spec-gen-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1078 -0
- package/dist/api/analyze.d.ts +17 -0
- package/dist/api/analyze.d.ts.map +1 -0
- package/dist/api/analyze.js +109 -0
- package/dist/api/analyze.js.map +1 -0
- package/dist/api/drift.d.ts +21 -0
- package/dist/api/drift.d.ts.map +1 -0
- package/dist/api/drift.js +145 -0
- package/dist/api/drift.js.map +1 -0
- package/dist/api/generate.d.ts +18 -0
- package/dist/api/generate.d.ts.map +1 -0
- package/dist/api/generate.js +251 -0
- package/dist/api/generate.js.map +1 -0
- package/dist/api/index.d.ts +39 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +32 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/init.d.ts +18 -0
- package/dist/api/init.d.ts.map +1 -0
- package/dist/api/init.js +82 -0
- package/dist/api/init.js.map +1 -0
- package/dist/api/run.d.ts +19 -0
- package/dist/api/run.d.ts.map +1 -0
- package/dist/api/run.js +291 -0
- package/dist/api/run.js.map +1 -0
- package/dist/api/specs.d.ts +49 -0
- package/dist/api/specs.d.ts.map +1 -0
- package/dist/api/specs.js +136 -0
- package/dist/api/specs.js.map +1 -0
- package/dist/api/types.d.ts +176 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/verify.d.ts +20 -0
- package/dist/api/verify.d.ts.map +1 -0
- package/dist/api/verify.js +117 -0
- package/dist/api/verify.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +27 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +485 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/drift.d.ts +9 -0
- package/dist/cli/commands/drift.d.ts.map +1 -0
- package/dist/cli/commands/drift.js +540 -0
- package/dist/cli/commands/drift.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +9 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +633 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +171 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +638 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +574 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/run.d.ts +24 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +546 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +9 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +417 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/commands/view.d.ts +9 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +511 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +83 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/analyzer/architecture-writer.d.ts +67 -0
- package/dist/core/analyzer/architecture-writer.d.ts.map +1 -0
- package/dist/core/analyzer/architecture-writer.js +209 -0
- package/dist/core/analyzer/architecture-writer.js.map +1 -0
- package/dist/core/analyzer/artifact-generator.d.ts +222 -0
- package/dist/core/analyzer/artifact-generator.d.ts.map +1 -0
- package/dist/core/analyzer/artifact-generator.js +726 -0
- package/dist/core/analyzer/artifact-generator.js.map +1 -0
- package/dist/core/analyzer/call-graph.d.ts +83 -0
- package/dist/core/analyzer/call-graph.d.ts.map +1 -0
- package/dist/core/analyzer/call-graph.js +827 -0
- package/dist/core/analyzer/call-graph.js.map +1 -0
- package/dist/core/analyzer/code-shaper.d.ts +33 -0
- package/dist/core/analyzer/code-shaper.d.ts.map +1 -0
- package/dist/core/analyzer/code-shaper.js +149 -0
- package/dist/core/analyzer/code-shaper.js.map +1 -0
- package/dist/core/analyzer/dependency-graph.d.ts +179 -0
- package/dist/core/analyzer/dependency-graph.d.ts.map +1 -0
- package/dist/core/analyzer/dependency-graph.js +574 -0
- package/dist/core/analyzer/dependency-graph.js.map +1 -0
- package/dist/core/analyzer/duplicate-detector.d.ts +52 -0
- package/dist/core/analyzer/duplicate-detector.d.ts.map +1 -0
- package/dist/core/analyzer/duplicate-detector.js +279 -0
- package/dist/core/analyzer/duplicate-detector.js.map +1 -0
- package/dist/core/analyzer/embedding-service.d.ts +50 -0
- package/dist/core/analyzer/embedding-service.d.ts.map +1 -0
- package/dist/core/analyzer/embedding-service.js +104 -0
- package/dist/core/analyzer/embedding-service.js.map +1 -0
- package/dist/core/analyzer/file-walker.d.ts +78 -0
- package/dist/core/analyzer/file-walker.d.ts.map +1 -0
- package/dist/core/analyzer/file-walker.js +531 -0
- package/dist/core/analyzer/file-walker.js.map +1 -0
- package/dist/core/analyzer/import-parser.d.ts +91 -0
- package/dist/core/analyzer/import-parser.d.ts.map +1 -0
- package/dist/core/analyzer/import-parser.js +720 -0
- package/dist/core/analyzer/import-parser.js.map +1 -0
- package/dist/core/analyzer/index.d.ts +10 -0
- package/dist/core/analyzer/index.d.ts.map +1 -0
- package/dist/core/analyzer/index.js +10 -0
- package/dist/core/analyzer/index.js.map +1 -0
- package/dist/core/analyzer/refactor-analyzer.d.ts +80 -0
- package/dist/core/analyzer/refactor-analyzer.d.ts.map +1 -0
- package/dist/core/analyzer/refactor-analyzer.js +339 -0
- package/dist/core/analyzer/refactor-analyzer.js.map +1 -0
- package/dist/core/analyzer/repository-mapper.d.ts +150 -0
- package/dist/core/analyzer/repository-mapper.d.ts.map +1 -0
- package/dist/core/analyzer/repository-mapper.js +731 -0
- package/dist/core/analyzer/repository-mapper.js.map +1 -0
- package/dist/core/analyzer/signature-extractor.d.ts +31 -0
- package/dist/core/analyzer/signature-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/signature-extractor.js +387 -0
- package/dist/core/analyzer/signature-extractor.js.map +1 -0
- package/dist/core/analyzer/significance-scorer.d.ts +79 -0
- package/dist/core/analyzer/significance-scorer.d.ts.map +1 -0
- package/dist/core/analyzer/significance-scorer.js +407 -0
- package/dist/core/analyzer/significance-scorer.js.map +1 -0
- package/dist/core/analyzer/subgraph-extractor.d.ts +43 -0
- package/dist/core/analyzer/subgraph-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/subgraph-extractor.js +129 -0
- package/dist/core/analyzer/subgraph-extractor.js.map +1 -0
- package/dist/core/analyzer/vector-index.d.ts +63 -0
- package/dist/core/analyzer/vector-index.d.ts.map +1 -0
- package/dist/core/analyzer/vector-index.js +169 -0
- package/dist/core/analyzer/vector-index.js.map +1 -0
- package/dist/core/drift/drift-detector.d.ts +102 -0
- package/dist/core/drift/drift-detector.d.ts.map +1 -0
- package/dist/core/drift/drift-detector.js +597 -0
- package/dist/core/drift/drift-detector.js.map +1 -0
- package/dist/core/drift/git-diff.d.ts +55 -0
- package/dist/core/drift/git-diff.d.ts.map +1 -0
- package/dist/core/drift/git-diff.js +356 -0
- package/dist/core/drift/git-diff.js.map +1 -0
- package/dist/core/drift/index.d.ts +12 -0
- package/dist/core/drift/index.d.ts.map +1 -0
- package/dist/core/drift/index.js +9 -0
- package/dist/core/drift/index.js.map +1 -0
- package/dist/core/drift/spec-mapper.d.ts +73 -0
- package/dist/core/drift/spec-mapper.d.ts.map +1 -0
- package/dist/core/drift/spec-mapper.js +353 -0
- package/dist/core/drift/spec-mapper.js.map +1 -0
- package/dist/core/generator/adr-generator.d.ts +32 -0
- package/dist/core/generator/adr-generator.d.ts.map +1 -0
- package/dist/core/generator/adr-generator.js +192 -0
- package/dist/core/generator/adr-generator.js.map +1 -0
- package/dist/core/generator/index.d.ts +9 -0
- package/dist/core/generator/index.d.ts.map +1 -0
- package/dist/core/generator/index.js +12 -0
- package/dist/core/generator/index.js.map +1 -0
- package/dist/core/generator/mapping-generator.d.ts +54 -0
- package/dist/core/generator/mapping-generator.d.ts.map +1 -0
- package/dist/core/generator/mapping-generator.js +239 -0
- package/dist/core/generator/mapping-generator.js.map +1 -0
- package/dist/core/generator/openspec-compat.d.ts +160 -0
- package/dist/core/generator/openspec-compat.d.ts.map +1 -0
- package/dist/core/generator/openspec-compat.js +523 -0
- package/dist/core/generator/openspec-compat.js.map +1 -0
- package/dist/core/generator/openspec-format-generator.d.ts +111 -0
- package/dist/core/generator/openspec-format-generator.d.ts.map +1 -0
- package/dist/core/generator/openspec-format-generator.js +817 -0
- package/dist/core/generator/openspec-format-generator.js.map +1 -0
- package/dist/core/generator/openspec-writer.d.ts +131 -0
- package/dist/core/generator/openspec-writer.d.ts.map +1 -0
- package/dist/core/generator/openspec-writer.js +379 -0
- package/dist/core/generator/openspec-writer.js.map +1 -0
- package/dist/core/generator/prompts.d.ts +35 -0
- package/dist/core/generator/prompts.d.ts.map +1 -0
- package/dist/core/generator/prompts.js +212 -0
- package/dist/core/generator/prompts.js.map +1 -0
- package/dist/core/generator/spec-pipeline.d.ts +94 -0
- package/dist/core/generator/spec-pipeline.d.ts.map +1 -0
- package/dist/core/generator/spec-pipeline.js +474 -0
- package/dist/core/generator/spec-pipeline.js.map +1 -0
- package/dist/core/generator/stages/stage1-survey.d.ts +19 -0
- package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -0
- package/dist/core/generator/stages/stage1-survey.js +105 -0
- package/dist/core/generator/stages/stage1-survey.js.map +1 -0
- package/dist/core/generator/stages/stage2-entities.d.ts +11 -0
- package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -0
- package/dist/core/generator/stages/stage2-entities.js +67 -0
- package/dist/core/generator/stages/stage2-entities.js.map +1 -0
- package/dist/core/generator/stages/stage3-services.d.ts +11 -0
- package/dist/core/generator/stages/stage3-services.d.ts.map +1 -0
- package/dist/core/generator/stages/stage3-services.js +75 -0
- package/dist/core/generator/stages/stage3-services.js.map +1 -0
- package/dist/core/generator/stages/stage4-api.d.ts +11 -0
- package/dist/core/generator/stages/stage4-api.d.ts.map +1 -0
- package/dist/core/generator/stages/stage4-api.js +65 -0
- package/dist/core/generator/stages/stage4-api.js.map +1 -0
- package/dist/core/generator/stages/stage5-architecture.d.ts +10 -0
- package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -0
- package/dist/core/generator/stages/stage5-architecture.js +62 -0
- package/dist/core/generator/stages/stage5-architecture.js.map +1 -0
- package/dist/core/generator/stages/stage6-adr.d.ts +8 -0
- package/dist/core/generator/stages/stage6-adr.d.ts.map +1 -0
- package/dist/core/generator/stages/stage6-adr.js +41 -0
- package/dist/core/generator/stages/stage6-adr.js.map +1 -0
- package/dist/core/services/chat-agent.d.ts +45 -0
- package/dist/core/services/chat-agent.d.ts.map +1 -0
- package/dist/core/services/chat-agent.js +310 -0
- package/dist/core/services/chat-agent.js.map +1 -0
- package/dist/core/services/chat-tools.d.ts +32 -0
- package/dist/core/services/chat-tools.d.ts.map +1 -0
- package/dist/core/services/chat-tools.js +270 -0
- package/dist/core/services/chat-tools.js.map +1 -0
- package/dist/core/services/config-manager.d.ts +61 -0
- package/dist/core/services/config-manager.d.ts.map +1 -0
- package/dist/core/services/config-manager.js +143 -0
- package/dist/core/services/config-manager.js.map +1 -0
- package/dist/core/services/gitignore-manager.d.ts +29 -0
- package/dist/core/services/gitignore-manager.d.ts.map +1 -0
- package/dist/core/services/gitignore-manager.js +106 -0
- package/dist/core/services/gitignore-manager.js.map +1 -0
- package/dist/core/services/index.d.ts +8 -0
- package/dist/core/services/index.d.ts.map +1 -0
- package/dist/core/services/index.js +8 -0
- package/dist/core/services/index.js.map +1 -0
- package/dist/core/services/llm-service.d.ts +336 -0
- package/dist/core/services/llm-service.d.ts.map +1 -0
- package/dist/core/services/llm-service.js +1155 -0
- package/dist/core/services/llm-service.js.map +1 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts +42 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/analysis.js +300 -0
- package/dist/core/services/mcp-handlers/analysis.js.map +1 -0
- package/dist/core/services/mcp-handlers/graph.d.ts +65 -0
- package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/graph.js +509 -0
- package/dist/core/services/mcp-handlers/graph.js.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts +38 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.js +172 -0
- package/dist/core/services/mcp-handlers/semantic.js.map +1 -0
- package/dist/core/services/mcp-handlers/utils.d.ts +21 -0
- package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/utils.js +62 -0
- package/dist/core/services/mcp-handlers/utils.js.map +1 -0
- package/dist/core/services/project-detector.d.ts +32 -0
- package/dist/core/services/project-detector.d.ts.map +1 -0
- package/dist/core/services/project-detector.js +111 -0
- package/dist/core/services/project-detector.js.map +1 -0
- package/dist/core/verifier/index.d.ts +5 -0
- package/dist/core/verifier/index.d.ts.map +1 -0
- package/dist/core/verifier/index.js +5 -0
- package/dist/core/verifier/index.js.map +1 -0
- package/dist/core/verifier/verification-engine.d.ts +226 -0
- package/dist/core/verifier/verification-engine.d.ts.map +1 -0
- package/dist/core/verifier/verification-engine.js +681 -0
- package/dist/core/verifier/verification-engine.js.map +1 -0
- package/dist/types/index.d.ts +252 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/pipeline.d.ts +148 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +5 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/utils/errors.d.ts +51 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +128 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +149 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +331 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/progress.d.ts +142 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +280 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/prompts.d.ts +53 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +199 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/shutdown.d.ts +89 -0
- package/dist/utils/shutdown.d.ts.map +1 -0
- package/dist/utils/shutdown.js +237 -0
- package/dist/utils/shutdown.js.map +1 -0
- package/package.json +114 -0
- package/src/viewer/InteractiveGraphViewer.jsx +1486 -0
- package/src/viewer/app/index.html +17 -0
- package/src/viewer/app/main.jsx +13 -0
- package/src/viewer/components/ArchitectureView.jsx +177 -0
- package/src/viewer/components/ChatPanel.jsx +448 -0
- package/src/viewer/components/ClusterGraph.jsx +441 -0
- package/src/viewer/components/FilterBar.jsx +179 -0
- package/src/viewer/components/FlatGraph.jsx +275 -0
- package/src/viewer/components/MicroComponents.jsx +83 -0
- package/src/viewer/hooks/usePanZoom.js +79 -0
- package/src/viewer/utils/constants.js +47 -0
- package/src/viewer/utils/graph-helpers.js +291 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,mDAAmD;AACnD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,eAAe,CAAC;QACd,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;QAC1B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;QAC9B,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK;QAC7B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;KAC9D,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CACV,uEAAuE;IACrE,4EAA4E;IAC5E,iEAAiE,CACpE;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,aAAa,EAAE,8BAA8B,EAAE,KAAK,CAAC;KAC5D,MAAM,CAAC,eAAe,EAAE,wBAAwB,EAAE,KAAK,CAAC;KACxD,MAAM,CAAC,YAAY,EAAE,kDAAkD,CAAC;KACxE,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,uBAAuB,CAAC;KACzE,MAAM,CACL,kBAAkB,EAClB,0EAA0E,CAC3E;KACA,MAAM,CAAC,YAAY,EAAE,uEAAuE,CAAC;KAC7F,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BH,CACE,CAAC;AAEJ,uBAAuB;AACvB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Architecture Writer
|
|
3
|
+
*
|
|
4
|
+
* Shared logic for building a high-level architecture overview from cached
|
|
5
|
+
* static analysis artifacts (dependency-graph.json + llm-context.json).
|
|
6
|
+
*
|
|
7
|
+
* Used by:
|
|
8
|
+
* - MCP tool `get_architecture_overview` (mcp.ts)
|
|
9
|
+
* - `spec-gen analyze` — writes ARCHITECTURE.md to the project root
|
|
10
|
+
*/
|
|
11
|
+
import type { DependencyGraphResult } from './dependency-graph.js';
|
|
12
|
+
import type { LLMContext } from './artifact-generator.js';
|
|
13
|
+
export interface ClusterSummary {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
fileCount: number;
|
|
17
|
+
role: string;
|
|
18
|
+
entryPointCount: number;
|
|
19
|
+
hubCount: number;
|
|
20
|
+
dependsOn: string[];
|
|
21
|
+
keyFiles: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface ArchitectureOverview {
|
|
24
|
+
generatedAt: string;
|
|
25
|
+
summary: {
|
|
26
|
+
totalFiles: number;
|
|
27
|
+
totalClusters: number;
|
|
28
|
+
totalEdges: number;
|
|
29
|
+
cycles: number;
|
|
30
|
+
layerViolations: number;
|
|
31
|
+
};
|
|
32
|
+
clusters: ClusterSummary[];
|
|
33
|
+
globalEntryPoints: Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
file: string;
|
|
36
|
+
language: string;
|
|
37
|
+
}>;
|
|
38
|
+
criticalHubs: Array<{
|
|
39
|
+
name: string;
|
|
40
|
+
file: string;
|
|
41
|
+
fanIn: number;
|
|
42
|
+
fanOut: number;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Infer a module cluster's architectural role from aggregate metrics.
|
|
47
|
+
*/
|
|
48
|
+
export declare function inferClusterRole(entryCount: number, hubCount: number, fileCount: number): string;
|
|
49
|
+
/**
|
|
50
|
+
* Build an ArchitectureOverview from pre-loaded dependency graph and LLM context.
|
|
51
|
+
* Both can be null if one artifact is missing; at least one must be non-null.
|
|
52
|
+
*
|
|
53
|
+
* @param depGraph Parsed dependency-graph.json (or null)
|
|
54
|
+
* @param ctx Parsed llm-context.json (or null)
|
|
55
|
+
* @param absDir Absolute project root path — used to normalize cluster file paths
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildArchitectureOverview(depGraph: DependencyGraphResult | null, ctx: LLMContext | null, absDir: string): ArchitectureOverview;
|
|
58
|
+
/**
|
|
59
|
+
* Render an ArchitectureOverview as a Markdown document (ARCHITECTURE.md).
|
|
60
|
+
*/
|
|
61
|
+
export declare function renderArchitectureMarkdown(overview: ArchitectureOverview): string;
|
|
62
|
+
/**
|
|
63
|
+
* Write ARCHITECTURE.md to the project root.
|
|
64
|
+
* Returns the path written.
|
|
65
|
+
*/
|
|
66
|
+
export declare function writeArchitectureMd(rootPath: string, overview: ArchitectureOverview): Promise<string>;
|
|
67
|
+
//# sourceMappingURL=architecture-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture-writer.d.ts","sourceRoot":"","sources":["../../../src/core/analyzer/architecture-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAM1D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpF;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAMR;AAMD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,EACtC,GAAG,EAAE,UAAU,GAAG,IAAI,EACtB,MAAM,EAAE,MAAM,GACb,oBAAoB,CA4EtB;AAcD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAmFjF;AAMD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAIjB"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Architecture Writer
|
|
3
|
+
*
|
|
4
|
+
* Shared logic for building a high-level architecture overview from cached
|
|
5
|
+
* static analysis artifacts (dependency-graph.json + llm-context.json).
|
|
6
|
+
*
|
|
7
|
+
* Used by:
|
|
8
|
+
* - MCP tool `get_architecture_overview` (mcp.ts)
|
|
9
|
+
* - `spec-gen analyze` — writes ARCHITECTURE.md to the project root
|
|
10
|
+
*/
|
|
11
|
+
import { writeFile } from 'node:fs/promises';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// HELPERS
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Infer a module cluster's architectural role from aggregate metrics.
|
|
18
|
+
*/
|
|
19
|
+
export function inferClusterRole(entryCount, hubCount, fileCount) {
|
|
20
|
+
if (entryCount > fileCount * 0.5)
|
|
21
|
+
return 'entry_layer'; // most files are entry points
|
|
22
|
+
if (hubCount > 0 && entryCount > 0)
|
|
23
|
+
return 'orchestrator'; // both hubs and entries
|
|
24
|
+
if (hubCount > 0)
|
|
25
|
+
return 'core_utilities'; // heavily depended-on helpers
|
|
26
|
+
if (entryCount > 0)
|
|
27
|
+
return 'api_layer'; // exposed but not hub-heavy
|
|
28
|
+
return 'internal'; // implementation detail
|
|
29
|
+
}
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// BUILD
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Build an ArchitectureOverview from pre-loaded dependency graph and LLM context.
|
|
35
|
+
* Both can be null if one artifact is missing; at least one must be non-null.
|
|
36
|
+
*
|
|
37
|
+
* @param depGraph Parsed dependency-graph.json (or null)
|
|
38
|
+
* @param ctx Parsed llm-context.json (or null)
|
|
39
|
+
* @param absDir Absolute project root path — used to normalize cluster file paths
|
|
40
|
+
*/
|
|
41
|
+
export function buildArchitectureOverview(depGraph, ctx, absDir) {
|
|
42
|
+
// Cluster files use absolute paths; call graph uses relative paths.
|
|
43
|
+
// Normalise both to relative using absDir as base.
|
|
44
|
+
const toRel = (p) => p.startsWith(absDir) ? p.slice(absDir.length + 1) : p;
|
|
45
|
+
// Build sets of relative filePaths for hubs / entry points from call graph
|
|
46
|
+
const hubFiles = new Set((ctx?.callGraph?.hubFunctions ?? []).map(h => toRel(h.filePath)));
|
|
47
|
+
const entryFiles = new Set((ctx?.callGraph?.entryPoints ?? []).map(e => toRel(e.filePath)));
|
|
48
|
+
// Build inter-cluster dependency edges from dep graph edges
|
|
49
|
+
const clusterOfFile = new Map(); // absolute path → cluster id
|
|
50
|
+
for (const cl of depGraph?.clusters ?? []) {
|
|
51
|
+
for (const fileId of cl.files) {
|
|
52
|
+
clusterOfFile.set(fileId, cl.id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const clusterEdges = new Map();
|
|
56
|
+
for (const edge of depGraph?.edges ?? []) {
|
|
57
|
+
const from = clusterOfFile.get(edge.source);
|
|
58
|
+
const to = clusterOfFile.get(edge.target);
|
|
59
|
+
if (from && to && from !== to) {
|
|
60
|
+
if (!clusterEdges.has(from))
|
|
61
|
+
clusterEdges.set(from, new Set());
|
|
62
|
+
clusterEdges.get(from).add(to);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Summarize clusters
|
|
66
|
+
const clusters = (depGraph?.clusters ?? [])
|
|
67
|
+
.map(cl => {
|
|
68
|
+
const relFiles = cl.files.map(toRel);
|
|
69
|
+
const clusterHubCount = relFiles.filter(f => hubFiles.has(f)).length;
|
|
70
|
+
const clusterEntryCount = relFiles.filter(f => entryFiles.has(f)).length;
|
|
71
|
+
const role = inferClusterRole(clusterEntryCount, clusterHubCount, cl.files.length);
|
|
72
|
+
const dependsOn = [...(clusterEdges.get(cl.id) ?? [])];
|
|
73
|
+
return {
|
|
74
|
+
id: cl.id,
|
|
75
|
+
name: cl.name ?? cl.id,
|
|
76
|
+
fileCount: cl.files.length,
|
|
77
|
+
role,
|
|
78
|
+
entryPointCount: clusterEntryCount,
|
|
79
|
+
hubCount: clusterHubCount,
|
|
80
|
+
dependsOn,
|
|
81
|
+
keyFiles: relFiles
|
|
82
|
+
.filter(f => hubFiles.has(f) || entryFiles.has(f))
|
|
83
|
+
.slice(0, 5),
|
|
84
|
+
};
|
|
85
|
+
})
|
|
86
|
+
.sort((a, b) => b.fileCount - a.fileCount);
|
|
87
|
+
const globalEntryPoints = (ctx?.callGraph?.entryPoints ?? [])
|
|
88
|
+
.slice(0, 20)
|
|
89
|
+
.map(n => ({ name: n.name, file: n.filePath, language: n.language }));
|
|
90
|
+
const criticalHubs = (ctx?.callGraph?.hubFunctions ?? [])
|
|
91
|
+
.slice(0, 10)
|
|
92
|
+
.map(n => ({ name: n.name, file: n.filePath, fanIn: n.fanIn, fanOut: n.fanOut }));
|
|
93
|
+
return {
|
|
94
|
+
generatedAt: new Date().toISOString(),
|
|
95
|
+
summary: {
|
|
96
|
+
totalFiles: depGraph?.statistics.nodeCount ?? 0,
|
|
97
|
+
totalClusters: clusters.length,
|
|
98
|
+
totalEdges: depGraph?.statistics.edgeCount ?? 0,
|
|
99
|
+
cycles: depGraph?.cycles.length ?? 0,
|
|
100
|
+
layerViolations: ctx?.callGraph?.layerViolations?.length ?? 0,
|
|
101
|
+
},
|
|
102
|
+
clusters,
|
|
103
|
+
globalEntryPoints,
|
|
104
|
+
criticalHubs,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// ============================================================================
|
|
108
|
+
// MARKDOWN RENDERER
|
|
109
|
+
// ============================================================================
|
|
110
|
+
const ROLE_BADGE = {
|
|
111
|
+
entry_layer: 'entry layer',
|
|
112
|
+
orchestrator: 'orchestrator',
|
|
113
|
+
core_utilities: 'core utilities',
|
|
114
|
+
api_layer: 'API layer',
|
|
115
|
+
internal: 'internal',
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Render an ArchitectureOverview as a Markdown document (ARCHITECTURE.md).
|
|
119
|
+
*/
|
|
120
|
+
export function renderArchitectureMarkdown(overview) {
|
|
121
|
+
const { summary, clusters, globalEntryPoints, criticalHubs } = overview;
|
|
122
|
+
const lines = [];
|
|
123
|
+
lines.push('# Architecture Overview');
|
|
124
|
+
lines.push('');
|
|
125
|
+
lines.push(`> Generated by \`spec-gen analyze\` on ${overview.generatedAt.slice(0, 10)}.`);
|
|
126
|
+
lines.push('> Re-run `spec-gen analyze` to refresh.');
|
|
127
|
+
lines.push('');
|
|
128
|
+
// Summary table
|
|
129
|
+
lines.push('## Summary');
|
|
130
|
+
lines.push('');
|
|
131
|
+
lines.push('| Metric | Value |');
|
|
132
|
+
lines.push('|--------|-------|');
|
|
133
|
+
lines.push(`| Files | ${summary.totalFiles} |`);
|
|
134
|
+
lines.push(`| Module clusters | ${summary.totalClusters} |`);
|
|
135
|
+
lines.push(`| Dependency edges | ${summary.totalEdges} |`);
|
|
136
|
+
if (summary.cycles > 0) {
|
|
137
|
+
lines.push(`| ⚠️ Cycles | ${summary.cycles} |`);
|
|
138
|
+
}
|
|
139
|
+
if (summary.layerViolations > 0) {
|
|
140
|
+
lines.push(`| ⚠️ Layer violations | ${summary.layerViolations} |`);
|
|
141
|
+
}
|
|
142
|
+
lines.push('');
|
|
143
|
+
// Cluster map
|
|
144
|
+
lines.push('## Module Clusters');
|
|
145
|
+
lines.push('');
|
|
146
|
+
lines.push('Clusters are groups of tightly coupled files detected by static dependency analysis.');
|
|
147
|
+
lines.push('');
|
|
148
|
+
lines.push('| Cluster | Role | Files | Depends on |');
|
|
149
|
+
lines.push('|---------|------|-------|------------|');
|
|
150
|
+
for (const cl of clusters) {
|
|
151
|
+
const role = ROLE_BADGE[cl.role] ?? cl.role;
|
|
152
|
+
const deps = cl.dependsOn.length > 0
|
|
153
|
+
? cl.dependsOn.map(id => clusters.find(c => c.id === id)?.name ?? id).join(', ')
|
|
154
|
+
: '—';
|
|
155
|
+
lines.push(`| **${cl.name}** | \`${role}\` | ${cl.fileCount} | ${deps} |`);
|
|
156
|
+
}
|
|
157
|
+
lines.push('');
|
|
158
|
+
// Per-cluster detail (only for clusters with key files)
|
|
159
|
+
const withKeys = clusters.filter(cl => cl.keyFiles.length > 0);
|
|
160
|
+
if (withKeys.length > 0) {
|
|
161
|
+
lines.push('### Key files per cluster');
|
|
162
|
+
lines.push('');
|
|
163
|
+
for (const cl of withKeys) {
|
|
164
|
+
lines.push(`**${cl.name}** (\`${ROLE_BADGE[cl.role] ?? cl.role}\`)`);
|
|
165
|
+
for (const f of cl.keyFiles) {
|
|
166
|
+
lines.push(`- \`${f}\``);
|
|
167
|
+
}
|
|
168
|
+
lines.push('');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Entry points
|
|
172
|
+
if (globalEntryPoints.length > 0) {
|
|
173
|
+
lines.push('## Entry Points');
|
|
174
|
+
lines.push('');
|
|
175
|
+
lines.push('Functions with no internal callers — the public-facing roots of the codebase.');
|
|
176
|
+
lines.push('');
|
|
177
|
+
for (const ep of globalEntryPoints) {
|
|
178
|
+
lines.push(`- \`${ep.name}\` — \`${ep.file}\` (${ep.language})`);
|
|
179
|
+
}
|
|
180
|
+
lines.push('');
|
|
181
|
+
}
|
|
182
|
+
// Critical hubs
|
|
183
|
+
if (criticalHubs.length > 0) {
|
|
184
|
+
lines.push('## Critical Hubs');
|
|
185
|
+
lines.push('');
|
|
186
|
+
lines.push('High fan-in functions — many callers depend on them. Modify with care.');
|
|
187
|
+
lines.push('');
|
|
188
|
+
lines.push('| Function | File | Fan-in | Fan-out |');
|
|
189
|
+
lines.push('|----------|------|--------|---------|');
|
|
190
|
+
for (const hub of criticalHubs) {
|
|
191
|
+
lines.push(`| \`${hub.name}\` | \`${hub.file}\` | ${hub.fanIn} | ${hub.fanOut} |`);
|
|
192
|
+
}
|
|
193
|
+
lines.push('');
|
|
194
|
+
}
|
|
195
|
+
return lines.join('\n');
|
|
196
|
+
}
|
|
197
|
+
// ============================================================================
|
|
198
|
+
// FILE WRITER
|
|
199
|
+
// ============================================================================
|
|
200
|
+
/**
|
|
201
|
+
* Write ARCHITECTURE.md to the project root.
|
|
202
|
+
* Returns the path written.
|
|
203
|
+
*/
|
|
204
|
+
export async function writeArchitectureMd(rootPath, overview) {
|
|
205
|
+
const outPath = join(rootPath, 'ARCHITECTURE.md');
|
|
206
|
+
await writeFile(outPath, renderArchitectureMarkdown(overview), 'utf-8');
|
|
207
|
+
return outPath;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=architecture-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture-writer.js","sourceRoot":"","sources":["../../../src/core/analyzer/architecture-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiCjC,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,QAAgB,EAChB,SAAiB;IAEjB,IAAI,UAAU,GAAG,SAAS,GAAG,GAAG;QAAE,OAAO,aAAa,CAAC,CAAG,8BAA8B;IACxF,IAAI,QAAQ,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC,CAAC,wBAAwB;IACnF,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,gBAAgB,CAAC,CAAiB,8BAA8B;IACzF,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC,CAAoB,4BAA4B;IACvF,OAAO,UAAU,CAAC,CAAyC,wBAAwB;AACrF,CAAC;AAED,+EAA+E;AAC/E,QAAQ;AACR,+EAA+E;AAE/E;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAsC,EACtC,GAAsB,EACtB,MAAc;IAEd,oEAAoE;IACpE,mDAAmD;IACnD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnF,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CACjE,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAChE,CAAC;IAEF,4DAA4D;IAC5D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,6BAA6B;IAC9E,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YAC9B,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC/D,YAAY,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,QAAQ,GAAqB,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;SAC1D,GAAG,CAAC,EAAE,CAAC,EAAE;QACR,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzE,MAAM,IAAI,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAEvD,OAAO;YACL,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;YACtB,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM;YAC1B,IAAI;YACJ,eAAe,EAAE,iBAAiB;YAClC,QAAQ,EAAE,eAAe;YACzB,SAAS;YACT,QAAQ,EAAE,QAAQ;iBACf,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACjD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACf,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAE7C,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,IAAI,EAAE,CAAC;SAC1D,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,IAAI,EAAE,CAAC;SACtD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEpF,OAAO;QACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE;YACP,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,SAAS,IAAI,CAAC;YAC/C,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,SAAS,IAAI,CAAC;YAC/C,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;YACpC,eAAe,EAAE,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;SAC9D;QACD,QAAQ;QACR,iBAAiB;QACjB,YAAY;KACb,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,UAAU,GAA2B;IACzC,WAAW,EAAI,aAAa;IAC5B,YAAY,EAAG,cAAc;IAC7B,cAAc,EAAC,gBAAgB;IAC/B,SAAS,EAAM,WAAW;IAC1B,QAAQ,EAAO,UAAU;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAA8B;IACvE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IACxE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0CAA0C,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3F,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,cAAc;IACd,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;IACnG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAClC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAChF,CAAC,CAAC,GAAG,CAAC;QACR,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC,SAAS,MAAM,IAAI,IAAI,CAAC,CAAC;IAC7E,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,wDAAwD;IACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,SAAS,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;YACrE,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QAC5F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,gBAAgB;IAChB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACrD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;QACrF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,QAA8B;IAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAClD,MAAM,SAAS,CAAC,OAAO,EAAE,0BAA0B,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Artifact Generator
|
|
3
|
+
*
|
|
4
|
+
* Takes all analysis results and generates structured output files
|
|
5
|
+
* that will be consumed by the LLM generation phase and optionally by humans.
|
|
6
|
+
*/
|
|
7
|
+
import type { RepositoryMap } from './repository-mapper.js';
|
|
8
|
+
import type { DependencyGraphResult } from './dependency-graph.js';
|
|
9
|
+
/**
|
|
10
|
+
* Heuristic to detect test/spec files across languages.
|
|
11
|
+
* Excludes them from call graph analysis — test helpers inflate fanIn,
|
|
12
|
+
* and test functions are never "unreachable" by definition.
|
|
13
|
+
*
|
|
14
|
+
* Patterns covered:
|
|
15
|
+
* TypeScript/JS: *.test.ts, *.spec.ts, *.test.tsx, __tests__/*, test_*.ts
|
|
16
|
+
* Python: test_*.py, *_test.py, tests/*.py
|
|
17
|
+
* Go: *_test.go
|
|
18
|
+
* Rust: files with #[cfg(test)] (not detectable here — excluded by directory pattern)
|
|
19
|
+
* Java/Kotlin: *Test.java, *Spec.kt
|
|
20
|
+
*/
|
|
21
|
+
export declare function isTestFile(filePath: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Architecture layer information
|
|
24
|
+
*/
|
|
25
|
+
export interface ArchitectureLayer {
|
|
26
|
+
name: string;
|
|
27
|
+
purpose: string;
|
|
28
|
+
files: string[];
|
|
29
|
+
representativeFile: string | null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Detected domain (maps to OpenSpec spec)
|
|
33
|
+
*/
|
|
34
|
+
export interface DetectedDomain {
|
|
35
|
+
name: string;
|
|
36
|
+
suggestedSpecPath: string;
|
|
37
|
+
files: string[];
|
|
38
|
+
entities: string[];
|
|
39
|
+
keyFile: string | null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Entry point information
|
|
43
|
+
*/
|
|
44
|
+
export interface EntryPointInfo {
|
|
45
|
+
file: string;
|
|
46
|
+
type: 'application-entry' | 'api-entry' | 'test-entry' | 'build-entry';
|
|
47
|
+
initializes: string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Data flow information
|
|
51
|
+
*/
|
|
52
|
+
export interface DataFlowInfo {
|
|
53
|
+
sources: string[];
|
|
54
|
+
sinks: string[];
|
|
55
|
+
transformers: string[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Key files by category
|
|
59
|
+
*/
|
|
60
|
+
export interface KeyFiles {
|
|
61
|
+
schemas: string[];
|
|
62
|
+
config: string[];
|
|
63
|
+
auth: string[];
|
|
64
|
+
database: string[];
|
|
65
|
+
routes: string[];
|
|
66
|
+
services: string[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Repository structure (JSON artifact)
|
|
70
|
+
*/
|
|
71
|
+
export interface RepoStructure {
|
|
72
|
+
projectName: string;
|
|
73
|
+
projectType: string;
|
|
74
|
+
frameworks: string[];
|
|
75
|
+
architecture: {
|
|
76
|
+
pattern: 'layered' | 'modular' | 'microservices' | 'monolith' | 'unknown';
|
|
77
|
+
layers: ArchitectureLayer[];
|
|
78
|
+
};
|
|
79
|
+
domains: DetectedDomain[];
|
|
80
|
+
entryPoints: EntryPointInfo[];
|
|
81
|
+
dataFlow: DataFlowInfo;
|
|
82
|
+
keyFiles: KeyFiles;
|
|
83
|
+
statistics: {
|
|
84
|
+
totalFiles: number;
|
|
85
|
+
analyzedFiles: number;
|
|
86
|
+
skippedFiles: number;
|
|
87
|
+
avgFileScore: number;
|
|
88
|
+
nodeCount: number;
|
|
89
|
+
edgeCount: number;
|
|
90
|
+
cycleCount: number;
|
|
91
|
+
clusterCount: number;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* LLM context phase
|
|
96
|
+
*/
|
|
97
|
+
export interface LLMContextPhase {
|
|
98
|
+
purpose: string;
|
|
99
|
+
files: Array<{
|
|
100
|
+
path: string;
|
|
101
|
+
content?: string;
|
|
102
|
+
tokens: number;
|
|
103
|
+
}>;
|
|
104
|
+
totalTokens?: number;
|
|
105
|
+
estimatedTokens?: number;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* LLM context preparation
|
|
109
|
+
*/
|
|
110
|
+
export interface LLMContext {
|
|
111
|
+
phase1_survey: LLMContextPhase;
|
|
112
|
+
phase2_deep: LLMContextPhase;
|
|
113
|
+
phase3_validation: LLMContextPhase;
|
|
114
|
+
/** Compact signatures for ALL analyzed files — used by Stage 1 instead of bare file paths */
|
|
115
|
+
signatures?: import('./signature-extractor.js').FileSignatureMap[];
|
|
116
|
+
/** Static call graph: function→function relationships across all TS/Python files */
|
|
117
|
+
callGraph?: import('./call-graph.js').SerializedCallGraph;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* All generated artifacts
|
|
121
|
+
*/
|
|
122
|
+
export interface AnalysisArtifacts {
|
|
123
|
+
repoStructure: RepoStructure;
|
|
124
|
+
summaryMarkdown: string;
|
|
125
|
+
dependencyDiagram: string;
|
|
126
|
+
llmContext: LLMContext;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Options for artifact generation
|
|
130
|
+
*/
|
|
131
|
+
export interface ArtifactGeneratorOptions {
|
|
132
|
+
/** Root directory of the project */
|
|
133
|
+
rootDir: string;
|
|
134
|
+
/** Output directory for artifacts */
|
|
135
|
+
outputDir: string;
|
|
136
|
+
/** Maximum files to include in LLM deep analysis */
|
|
137
|
+
maxDeepAnalysisFiles?: number;
|
|
138
|
+
/** Maximum files for validation phase */
|
|
139
|
+
maxValidationFiles?: number;
|
|
140
|
+
/** Approximate tokens per character for estimation */
|
|
141
|
+
tokensPerChar?: number;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Generates analysis artifacts from repository map and dependency graph
|
|
145
|
+
*/
|
|
146
|
+
export declare class AnalysisArtifactGenerator {
|
|
147
|
+
private options;
|
|
148
|
+
constructor(options: ArtifactGeneratorOptions);
|
|
149
|
+
/**
|
|
150
|
+
* Generate all artifacts
|
|
151
|
+
*/
|
|
152
|
+
generate(repoMap: RepositoryMap, depGraph: DependencyGraphResult): Promise<AnalysisArtifacts>;
|
|
153
|
+
/**
|
|
154
|
+
* Generate and save all artifacts to disk
|
|
155
|
+
*/
|
|
156
|
+
generateAndSave(repoMap: RepositoryMap, depGraph: DependencyGraphResult): Promise<AnalysisArtifacts>;
|
|
157
|
+
/**
|
|
158
|
+
* Generate repo-structure.json
|
|
159
|
+
*/
|
|
160
|
+
private generateRepoStructure;
|
|
161
|
+
/**
|
|
162
|
+
* Format project type for display
|
|
163
|
+
*/
|
|
164
|
+
private formatProjectType;
|
|
165
|
+
/**
|
|
166
|
+
* Detect architecture pattern from code structure
|
|
167
|
+
*/
|
|
168
|
+
private detectArchitecturePattern;
|
|
169
|
+
/**
|
|
170
|
+
* Generate architecture layers
|
|
171
|
+
*/
|
|
172
|
+
private generateArchitectureLayers;
|
|
173
|
+
/**
|
|
174
|
+
* Generate domains from clusters
|
|
175
|
+
*/
|
|
176
|
+
private generateDomains;
|
|
177
|
+
/**
|
|
178
|
+
* Normalize domain name for OpenSpec path
|
|
179
|
+
*/
|
|
180
|
+
private normalizeDomainName;
|
|
181
|
+
/**
|
|
182
|
+
* Extract potential entity names from files
|
|
183
|
+
*/
|
|
184
|
+
private extractEntities;
|
|
185
|
+
/**
|
|
186
|
+
* Generate entry points information
|
|
187
|
+
*/
|
|
188
|
+
private generateEntryPoints;
|
|
189
|
+
/**
|
|
190
|
+
* Generate data flow information
|
|
191
|
+
*/
|
|
192
|
+
private generateDataFlow;
|
|
193
|
+
/**
|
|
194
|
+
* Generate key files by category
|
|
195
|
+
*/
|
|
196
|
+
private generateKeyFiles;
|
|
197
|
+
/**
|
|
198
|
+
* Generate SUMMARY.md
|
|
199
|
+
*/
|
|
200
|
+
private generateSummaryMarkdown;
|
|
201
|
+
/**
|
|
202
|
+
* Format project type for human reading
|
|
203
|
+
*/
|
|
204
|
+
private formatProjectTypeReadable;
|
|
205
|
+
/**
|
|
206
|
+
* Generate dependency diagram in Mermaid format
|
|
207
|
+
*/
|
|
208
|
+
private generateDependencyDiagram;
|
|
209
|
+
/**
|
|
210
|
+
* Generate LLM context preparation
|
|
211
|
+
*/
|
|
212
|
+
private generateLLMContext;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Generate all artifacts
|
|
216
|
+
*/
|
|
217
|
+
export declare function generateArtifacts(repoMap: RepositoryMap, depGraph: DependencyGraphResult, options: ArtifactGeneratorOptions): Promise<AnalysisArtifacts>;
|
|
218
|
+
/**
|
|
219
|
+
* Generate and save all artifacts
|
|
220
|
+
*/
|
|
221
|
+
export declare function generateAndSaveArtifacts(repoMap: RepositoryMap, depGraph: DependencyGraphResult, options: ArtifactGeneratorOptions): Promise<AnalysisArtifacts>;
|
|
222
|
+
//# sourceMappingURL=artifact-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-generator.d.ts","sourceRoot":"","sources":["../../../src/core/analyzer/artifact-generator.ts"],"names":[],"mappings":"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"}
|