- 🤖 LLM usage: $0.1500 (1 commits)
- 👤 Human dev: ~$200 (2.0h @ $100/h, 30min dedup)
Generated on 2026-05-04 using openrouter/qwen/qwen3-coder-next
Semantic Compiler for Software Systems
Przekształca kod Python w model semantyczny CQRS → kontrakty API → graf architektury.
CODE (.py)
⬇ AST extraction (built-in ast)
⬇ CQRS inference (Query / Command / Orchestrator)
⬇ Call Graph (NetworkX)
⬇ Event Model (DDD / Event Sourcing)
⬇ Workflow DAG
⬇ Quality Rules
↓
JSON schema · .proto · Markdown · GraphML · DOT
pip install code2schemaOpcjonalne backendy:
pip install "code2schema[proto]" # grpcio-tools → kompilacja .proto
pip install "code2schema[neo4j]" # eksport do bazy grafowej
pip install "code2schema[viz]" # pyvis → wizualizacja HTML
pip install "code2schema[dev]" # pytest + ruff + black# Analiza z auto-generowanymi nazwami plików (w katalogu bieżącym)
code2schema /home/tom/github/maskservice/c2004/backend
# → c2004_schema.json
# Pełna analiza ze wszystkimi formatami wyjściowymi
code2schema ./backend --proto --md --html
# → backend_schema.json
# → backend_api.proto
# → backend_report.md
# → backend_viz.html
# Pełna analiza ze szczegółami
code2schema ./backend --proto --md --html --graph-summary --events --cyclesPrzykładowy output:
✅ Gotowe (1.8s)
Modules : 607
Functions: 3142
Queries : 1518
Commands : 505
Orchest. : 1119
Workflows: 1118
Rules : 320
Graph : 2922N / 5612E
→ c2004_schema.json
→ c2004_api.proto
→ c2004_report.md
Analiza produkcyjnego projektu IoT (607 modułów, 3142 funkcje):
code2schema /home/tom/github/maskservice/c2004/backend --proto --md --html
# Pliki generowane w /home/tom/github/maskservice/c2004/ (katalog projektu)Wyniki:
✅ Gotowe (1.8s)
Modules : 607
Functions: 3142
Queries : 1518
Commands : 505
Orchest. : 1119
Workflows: 1118
Rules : 320
Graph : 2922N / 5612E
→ c2004_schema.json
→ c2004_api.proto
→ c2004_report.md
→ c2004_viz.html
- Dokumentacja — przykłady użycia CLI i Python API
Wykryte cykle w architekturze CQRS (do refaktoryzacji):
handle → publish → _execute → publish → handle
Wygenerowane artefakty:
c2004_schema.json(2.9MB) — pełny modelc2004_api.proto(188KB) — gRPC contractsc2004_report.md(49KB) — podsumowanie jakościc2004_viz.html(1.1MB) — interaktywny graf D3.js z wyszukiwaniem i filtrowaniem
from code2schema import extract_project, analyze
from code2schema.analyzer.graph import build_rich_graph, graph_summary
from code2schema.analyzer.events import infer_event_model
from code2schema.codegen import to_proto, to_markdown
from pathlib import Path
# Ekstrakcja + analiza
modules = extract_project(Path("./backend"))
schema = analyze(modules)
# CQRS
print(f"Queries: {len(schema.queries())}")
print(f"Commands: {len(schema.commands())}")
print(f"Orchestrators:{len(schema.orchestrators())}")
# Graf
G = build_rich_graph(schema)
print(graph_summary(G, schema))
# Event Model (DDD)
em = infer_event_model(modules)
print(em.summary())
# Eksport
print(to_proto(schema))
print(to_markdown(schema))Interaktywny graf D3.js z funkcjami:
- Kolory ról: 🟢 Query, 🟠 Command, 🟣 Orchestrator
- Wyszukiwanie — filtruje węzły w czasie rzeczywistym
- Hover — podświetla połączenia (call graph)
- Klik — szczegóły funkcji (fan-out, side effects, reguły jakości)
- Filtry — pokazuj/ukrywaj kategorie ról
- Force layout — przeciąganie węzłów
code2schema ./backend --html viz.html
# Otwórz w przeglądarce: open viz.htmlcode2schema/
├── core/
│ ├── models.py # IR: FunctionIR, ModuleIR, SchemaIR (Pydantic)
│ └── extractor.py # AST parser (stdlib ast, bez zależności)
├── analyzer/
│ ├── cqrs.py # CQRS inference + WorkflowDAG + Rules
│ ├── graph.py # NetworkX: centrality, hubs, cycles, GraphML/DOT
│ └── events.py # DDD / Event Sourcing inference
├── codegen/
│ └── __init__.py # JSON, .proto, Markdown generators
└── cli.py # entry point: code2schema <path> [flags]
| Rola | Kryterium |
|---|---|
query |
brak side-effectów, fan-out = 0 |
command |
side-effects (IO, network, DB) |
orchestrator |
fan-out ≥ 5 (wywołuje wiele funkcji) |
Automatycznie generowane:
| ID | Warunek | Akcja |
|---|---|---|
HIGH_FAN_OUT |
fan-out ≥ 10 | refactor_to_service |
LONG_FUNCTION |
lines > 100 | split_function |
QUERY_WITH_SIDE_EFFECTS |
query + IO | separate_command_from_query |
GraphML można otworzyć w Gephi, yEd lub zaimportować do Neo4j.
DOT renderuje Graphviz: dot -Tsvg graph.dot -o graph.svg
| Kategoria | Biblioteka | Po co |
|---|---|---|
| Parsing | ast (stdlib) |
Parsowanie Python bez zależności |
| Parsing | libcst |
Modyfikacja kodu z zachowaniem formatowania |
| Parsing | tree-sitter |
Multi-language (Go, TS, Rust) — v4 |
| Graf | networkx |
Call graph, centrality, cykle |
| Graf | neo4j |
Eksport do bazy grafowej |
| Wizualizacja | pyvis |
Interaktywny HTML |
| Schema | pydantic |
IR models + walidacja |
| Proto | grpcio-tools |
Kompilacja .proto → kod |
- v0.1 — AST extraction, CQRS inference, JSON/Proto/MD output
- v0.1 — NetworkX call graph, GraphML/DOT export, PageRank
- v0.1 — Event Model (DDD), layer violation detection
- v0.2 —
libcstextractor (zachowanie formatowania, transformacje) - v0.2 —
tree-sittermulti-language (Go, TypeScript, Rust) - v0.3 — Neo4j export, pyvis HTML visualization
- v0.3 — Cross-language code generator (proto → Go/TS stubs)
- v0.4 — Data Flow Graph (DFG), State model extraction
MIT
Licensed under Apache-2.0.