Loading...
Loading...
Auto-generates code flow diagrams from Python module analysis. Detects when architecture diagrams become stale (code changed, diagram didn't). Use when: creating new modules, reviewing PRs for architecture impact, or checking diagram freshness. Generates mermaid diagrams showing imports, dependencies, and module relationships.
npx skill4agent add rysweet/amplihack code-visualizercode-visualizer (this skill)
├── Responsibilities:
│ ├── Python module analysis (AST parsing)
│ ├── Import relationship extraction
│ ├── Staleness detection (timestamp-based)
│ └── Orchestration of diagram generation
│
└── Delegates to:
├── mermaid-diagram-generator skill
│ ├── Mermaid syntax generation
│ ├── Diagram formatting and styling
│ └── Markdown embedding
│
└── visualization-architect agent
├── Complex multi-level architecture
├── ASCII art alternatives
└── Cross-module dependency graphs# code-visualizer analyzes code structure
modules = analyze_python_modules("src/")
relationships = extract_import_relationships(modules)
# Then delegates to mermaid-diagram-generator for syntax
Skill(skill="mermaid-diagram-generator")
# Provide: Module relationships, diagram type (flowchart/class), styling preferences
# Receive: Valid mermaid syntax ready for embedding
# For complex architectures, delegates to visualization-architect
Task(subagent_type="visualization-architect", prompt="Create multi-level diagram for...")User: Generate a code flow diagram for the authentication moduleUser: Are my architecture diagrams up to date?User: What architecture changes does this PR introduce?__all__# Scan target directory for Python modules
modules = glob("**/*.py")
packages = identify_packages(modules)flowchart TD
subgraph core["Core Modules"]
auth[auth.py]
users[users.py]
api[api.py]
end
subgraph utils["Utilities"]
helpers[helpers.py]
validators[validators.py]
end
api --> auth
api --> users
auth --> helpers
users --> validatorsflowchart LR
main[main.py] --> auth[auth/]
main --> api[api/]
auth --> models[models.py]
api --> authclassDiagram
class BaseService {
+process()
}
class AuthService {
+login()
+logout()
}
BaseService <|-- AuthServiceflowchart TD
Request[HTTP Request] --> Validate{Validate}
Validate -->|Valid| Process[Process]
Validate -->|Invalid| Error[Return Error]
Process --> Response[HTTP Response]## Diagram Freshness Report
### Status: STALE
**Diagrams Checked**: 3
**Fresh**: 1
**Stale**: 2
### Details
| File | Last Updated | Code Changed | Status |
| ------------ | ------------ | ------------ | ------ |
| README.md | 2025-01-01 | 2025-01-15 | STALE |
| docs/ARCH.md | 2025-01-10 | 2025-01-10 | FRESH |
### Missing from Diagrams
- `new_module.py` (added 2025-01-12)
- `api/v2.py` (added 2025-01-14)
### Recommended Actions
1. Update README.md architecture diagram
2. Add new_module.py to dependency graphflowchart TD
subgraph added["New"]
style added fill:#90EE90
new_api[api/v2.py]
end
subgraph modified["Modified"]
style modified fill:#FFE4B5
auth[auth.py]
end
subgraph existing["Unchanged"]
users[users.py]
models[models.py]
end
new_api --> auth
auth --> models
users --> modelsmermaid-diagram-generatorvisualization-architectUser: I just created a new payment module. Generate an architecture diagram.
Claude:
1. Analyzes payment/ directory
2. Extracts imports and dependencies
3. Generates mermaid flowchart
4. Suggests where to embed (README.md)User: Are my diagrams up to date?
Claude:
1. Finds all mermaid diagrams in docs
2. Compares with current codebase
3. Reports stale diagrams
4. Lists missing modules
5. Suggests updatesUser: Show architecture impact of this PR
Claude:
1. Gets changed files from PR
2. Identifies new/modified/deleted modules
3. Generates impact diagram
4. Highlights dependency changes# Extract imports from Python file
import ast
def extract_imports(file_path):
"""Extract import statements from Python file."""
tree = ast.parse(Path(file_path).read_text())
imports = []
for node in ast.walk(tree):
if isinstance(node, ast.Import):
for alias in node.names:
imports.append(alias.name)
elif isinstance(node, ast.ImportFrom):
if node.module:
imports.append(node.module)
return importsdef check_staleness(diagram_file, source_dir):
"""Check if diagram is stale compared to source."""
diagram_mtime = Path(diagram_file).stat().st_mtime
for source in Path(source_dir).rglob("*.py"):
if source.stat().st_mtime > diagram_mtime:
return True, source # Stale
return False, None # Fresh| Diagram Type | Recommended Location |
|---|---|
| Module overview | README.md |
| Detailed architecture | docs/ARCHITECTURE.md |
| Package structure | package/README.md |
| API flow | api/README.md |
## Architecture
<!-- code-visualizer:auto-generated -->
<!-- last-updated: 2025-01-15 -->
<!-- source-hash: abc123 -->
```mermaid
flowchart TD
...
```__import__importlib| Scenario | Accuracy | Notes |
|---|---|---|
| New module detection | 95%+ | Reliable for Python modules |
| Import relationship mapping | 90%+ | Misses dynamic imports |
| Staleness detection | 70-80% | False positives common |
| Circular dependency detection | 85%+ | May miss complex cycles |
| Class hierarchy extraction | 85%+ | Mixins can be tricky |
## Architecture Impact
<!-- Generated by code-visualizer -->
### Changed Dependencies
```mermaid
flowchart LR
subgraph changed["Modified Modules"]
style changed fill:#FFE4B5
auth[auth/service.py]
api[api/routes.py]
end
subgraph added["New Modules"]
style added fill:#90EE90
oauth[auth/oauth.py]
end
subgraph unchanged["Existing"]
models[models/user.py]
db[db/connection.py]
end
oauth --> auth
auth --> models
api --> auth
api --> db
```
### Impact Summary
- **New modules**: 1 (oauth.py)
- **Modified modules**: 2 (auth/service.py, api/routes.py)
- **New dependencies**: oauth.py -> auth/service.py
- **Diagrams to update**: README.md (STALE).github/workflows/pr-review.yml- name: Check Diagram Staleness
run: |
# Claude Code analyzes and reports
# Outputs: STALE diagrams that need updating
# Generates: Suggested diagram updates