spectra-cli 4.1.1 → 4.2.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/README.md +1 -1
- package/dist/adapters/go-adapter.d.ts.map +1 -1
- package/dist/adapters/go-adapter.js +2 -0
- package/dist/adapters/go-adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/java-adapter.d.ts.map +1 -1
- package/dist/adapters/java-adapter.js +2 -0
- package/dist/adapters/java-adapter.js.map +1 -1
- package/dist/adapters/language-adapter.d.ts +47 -9
- package/dist/adapters/language-adapter.d.ts.map +1 -1
- package/dist/adapters/python-adapter.d.ts +34 -6
- package/dist/adapters/python-adapter.d.ts.map +1 -1
- package/dist/adapters/python-adapter.js +157 -59
- package/dist/adapters/python-adapter.js.map +1 -1
- package/dist/adapters/ts-js-adapter.d.ts +13 -5
- package/dist/adapters/ts-js-adapter.d.ts.map +1 -1
- package/dist/adapters/ts-js-adapter.js +55 -14
- package/dist/adapters/ts-js-adapter.js.map +1 -1
- package/dist/batch/batch-orchestrator.d.ts +30 -4
- package/dist/batch/batch-orchestrator.d.ts.map +1 -1
- package/dist/batch/batch-orchestrator.js +284 -7
- package/dist/batch/batch-orchestrator.js.map +1 -1
- package/dist/batch/delta-regenerator.d.ts +2 -2
- package/dist/batch/delta-regenerator.d.ts.map +1 -1
- package/dist/batch/delta-regenerator.js.map +1 -1
- package/dist/batch/module-grouper.d.ts +2 -2
- package/dist/batch/module-grouper.d.ts.map +1 -1
- package/dist/batch/module-grouper.js +1 -1
- package/dist/batch/module-grouper.js.map +1 -1
- package/dist/cli/commands/graph.js +1 -1
- package/dist/cli/commands/graph.js.map +1 -1
- package/dist/cli/commands/index.d.ts +8 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +274 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/query.d.ts.map +1 -1
- package/dist/cli/commands/query.js +3 -1
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/index.js +9 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/parse-args.d.ts +13 -1
- package/dist/cli/utils/parse-args.d.ts.map +1 -1
- package/dist/cli/utils/parse-args.js +79 -2
- package/dist/cli/utils/parse-args.js.map +1 -1
- package/dist/core/ast-analyzer.d.ts.map +1 -1
- package/dist/core/ast-analyzer.js +79 -5
- package/dist/core/ast-analyzer.js.map +1 -1
- package/dist/core/import-resolver.d.ts +90 -0
- package/dist/core/import-resolver.d.ts.map +1 -0
- package/dist/core/import-resolver.js +273 -0
- package/dist/core/import-resolver.js.map +1 -0
- package/dist/core/query-mappers/base-mapper.d.ts +13 -0
- package/dist/core/query-mappers/base-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/go-mapper.d.ts +68 -0
- package/dist/core/query-mappers/go-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/go-mapper.js +421 -0
- package/dist/core/query-mappers/go-mapper.js.map +1 -1
- package/dist/core/query-mappers/java-mapper.d.ts +196 -0
- package/dist/core/query-mappers/java-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/java-mapper.js +600 -0
- package/dist/core/query-mappers/java-mapper.js.map +1 -1
- package/dist/core/query-mappers/python-mapper.d.ts +55 -0
- package/dist/core/query-mappers/python-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/python-mapper.js +273 -0
- package/dist/core/query-mappers/python-mapper.js.map +1 -1
- package/dist/core/query-mappers/typescript-mapper.d.ts +102 -0
- package/dist/core/query-mappers/typescript-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/typescript-mapper.js +470 -0
- package/dist/core/query-mappers/typescript-mapper.js.map +1 -1
- package/dist/core/single-spec-orchestrator.d.ts.map +1 -1
- package/dist/core/single-spec-orchestrator.js +146 -9
- package/dist/core/single-spec-orchestrator.js.map +1 -1
- package/dist/core/tree-sitter-analyzer.d.ts +6 -0
- package/dist/core/tree-sitter-analyzer.d.ts.map +1 -1
- package/dist/core/tree-sitter-analyzer.js +33 -1
- package/dist/core/tree-sitter-analyzer.js.map +1 -1
- package/dist/core/tree-sitter-fallback.d.ts +7 -4
- package/dist/core/tree-sitter-fallback.d.ts.map +1 -1
- package/dist/core/tree-sitter-fallback.js +157 -12
- package/dist/core/tree-sitter-fallback.js.map +1 -1
- package/dist/extraction/extraction-types.d.ts +25 -25
- package/dist/generator/index-generator.d.ts +3 -3
- package/dist/generator/index-generator.d.ts.map +1 -1
- package/dist/generator/index-generator.js +1 -1
- package/dist/generator/index-generator.js.map +1 -1
- package/dist/graph/directory-graph.d.ts +14 -4
- package/dist/graph/directory-graph.d.ts.map +1 -1
- package/dist/graph/directory-graph.js +71 -128
- package/dist/graph/directory-graph.js.map +1 -1
- package/dist/graph/mermaid-renderer.d.ts +8 -5
- package/dist/graph/mermaid-renderer.d.ts.map +1 -1
- package/dist/graph/mermaid-renderer.js +3 -3
- package/dist/graph/mermaid-renderer.js.map +1 -1
- package/dist/graph/topological-sort.d.ts +13 -6
- package/dist/graph/topological-sort.d.ts.map +1 -1
- package/dist/graph/topological-sort.js +2 -2
- package/dist/graph/topological-sort.js.map +1 -1
- package/dist/knowledge-graph/call-resolver.d.ts +64 -0
- package/dist/knowledge-graph/call-resolver.d.ts.map +1 -0
- package/dist/knowledge-graph/call-resolver.js +323 -0
- package/dist/knowledge-graph/call-resolver.js.map +1 -0
- package/dist/knowledge-graph/import-resolver.d.ts +114 -0
- package/dist/knowledge-graph/import-resolver.d.ts.map +1 -0
- package/dist/knowledge-graph/import-resolver.js +537 -0
- package/dist/knowledge-graph/import-resolver.js.map +1 -0
- package/dist/knowledge-graph/incremental.d.ts +110 -0
- package/dist/knowledge-graph/incremental.d.ts.map +1 -0
- package/dist/knowledge-graph/incremental.js +410 -0
- package/dist/knowledge-graph/incremental.js.map +1 -0
- package/dist/knowledge-graph/index.d.ts +74 -0
- package/dist/knowledge-graph/index.d.ts.map +1 -0
- package/dist/knowledge-graph/index.js +156 -0
- package/dist/knowledge-graph/index.js.map +1 -0
- package/dist/knowledge-graph/module-derivation.d.ts +238 -0
- package/dist/knowledge-graph/module-derivation.d.ts.map +1 -0
- package/dist/knowledge-graph/module-derivation.js +418 -0
- package/dist/knowledge-graph/module-derivation.js.map +1 -0
- package/dist/knowledge-graph/persistence.d.ts +270 -0
- package/dist/knowledge-graph/persistence.d.ts.map +1 -0
- package/dist/knowledge-graph/persistence.js +226 -0
- package/dist/knowledge-graph/persistence.js.map +1 -0
- package/dist/knowledge-graph/query-helpers.d.ts +164 -0
- package/dist/knowledge-graph/query-helpers.d.ts.map +1 -0
- package/dist/knowledge-graph/query-helpers.js +394 -0
- package/dist/knowledge-graph/query-helpers.js.map +1 -0
- package/dist/knowledge-graph/unified-graph.d.ts +310 -0
- package/dist/knowledge-graph/unified-graph.d.ts.map +1 -0
- package/dist/knowledge-graph/unified-graph.js +182 -0
- package/dist/knowledge-graph/unified-graph.js.map +1 -0
- package/dist/mcp/agent-context-tools.d.ts +104 -0
- package/dist/mcp/agent-context-tools.d.ts.map +1 -0
- package/dist/mcp/agent-context-tools.js +854 -0
- package/dist/mcp/agent-context-tools.js.map +1 -0
- package/dist/mcp/graph-tools.d.ts +20 -0
- package/dist/mcp/graph-tools.d.ts.map +1 -1
- package/dist/mcp/graph-tools.js +71 -11
- package/dist/mcp/graph-tools.js.map +1 -1
- package/dist/mcp/lib/response-helpers.d.ts +67 -0
- package/dist/mcp/lib/response-helpers.d.ts.map +1 -0
- package/dist/mcp/lib/response-helpers.js +103 -0
- package/dist/mcp/lib/response-helpers.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +9 -10
- package/dist/mcp/server.js.map +1 -1
- package/dist/models/call-site.d.ts +68 -0
- package/dist/models/call-site.d.ts.map +1 -0
- package/dist/models/call-site.js +60 -0
- package/dist/models/call-site.js.map +1 -0
- package/dist/models/code-skeleton.d.ts +78 -6
- package/dist/models/code-skeleton.d.ts.map +1 -1
- package/dist/models/code-skeleton.js +29 -0
- package/dist/models/code-skeleton.js.map +1 -1
- package/dist/models/drift-item.d.ts +4 -4
- package/dist/models/module-spec.d.ts +155 -94
- package/dist/models/module-spec.d.ts.map +1 -1
- package/dist/panoramic/adr-decision-pipeline.d.ts +53 -0
- package/dist/panoramic/adr-decision-pipeline.d.ts.map +1 -0
- package/dist/panoramic/adr-decision-pipeline.js +685 -0
- package/dist/panoramic/adr-decision-pipeline.js.map +1 -0
- package/dist/panoramic/api-surface-generator.d.ts +56 -0
- package/dist/panoramic/api-surface-generator.d.ts.map +1 -0
- package/dist/panoramic/api-surface-generator.js +1671 -0
- package/dist/panoramic/api-surface-generator.js.map +1 -0
- package/dist/panoramic/architecture-ir-builder.d.ts +19 -0
- package/dist/panoramic/architecture-ir-builder.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-builder.js +561 -0
- package/dist/panoramic/architecture-ir-builder.js.map +1 -0
- package/dist/panoramic/architecture-ir-exporters.d.ts +7 -0
- package/dist/panoramic/architecture-ir-exporters.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-exporters.js +183 -0
- package/dist/panoramic/architecture-ir-exporters.js.map +1 -0
- package/dist/panoramic/architecture-ir-generator.d.ts +36 -0
- package/dist/panoramic/architecture-ir-generator.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-generator.js +51 -0
- package/dist/panoramic/architecture-ir-generator.js.map +1 -0
- package/dist/panoramic/architecture-ir-mermaid-adapter.d.ts +6 -0
- package/dist/panoramic/architecture-ir-mermaid-adapter.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-mermaid-adapter.js +98 -0
- package/dist/panoramic/architecture-ir-mermaid-adapter.js.map +1 -0
- package/dist/panoramic/architecture-ir-model.d.ts +87 -0
- package/dist/panoramic/architecture-ir-model.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-model.js +20 -0
- package/dist/panoramic/architecture-ir-model.js.map +1 -0
- package/dist/panoramic/architecture-narrative.d.ts +68 -0
- package/dist/panoramic/architecture-narrative.d.ts.map +1 -0
- package/dist/panoramic/architecture-narrative.js +401 -0
- package/dist/panoramic/architecture-narrative.js.map +1 -0
- package/dist/panoramic/architecture-overview-generator.d.ts +31 -0
- package/dist/panoramic/architecture-overview-generator.d.ts.map +1 -0
- package/dist/panoramic/architecture-overview-generator.js +454 -0
- package/dist/panoramic/architecture-overview-generator.js.map +1 -0
- package/dist/panoramic/architecture-overview-model.d.ts +77 -0
- package/dist/panoramic/architecture-overview-model.d.ts.map +1 -0
- package/dist/panoramic/architecture-overview-model.js +31 -0
- package/dist/panoramic/architecture-overview-model.js.map +1 -0
- package/dist/panoramic/batch-project-docs.d.ts.map +1 -1
- package/dist/panoramic/batch-project-docs.js +4 -2
- package/dist/panoramic/batch-project-docs.js.map +1 -1
- package/dist/panoramic/builders/component-view-builder.d.ts +25 -1
- package/dist/panoramic/builders/component-view-builder.d.ts.map +1 -1
- package/dist/panoramic/builders/component-view-builder.js +83 -3
- package/dist/panoramic/builders/component-view-builder.js.map +1 -1
- package/dist/panoramic/builders/doc-graph-builder.d.ts +2 -2
- package/dist/panoramic/builders/doc-graph-builder.d.ts.map +1 -1
- package/dist/panoramic/builders/doc-graph-builder.js.map +1 -1
- package/dist/panoramic/component-view-builder.d.ts +17 -0
- package/dist/panoramic/component-view-builder.d.ts.map +1 -0
- package/dist/panoramic/component-view-builder.js +652 -0
- package/dist/panoramic/component-view-builder.js.map +1 -0
- package/dist/panoramic/component-view-model.d.ts +127 -0
- package/dist/panoramic/component-view-model.d.ts.map +1 -0
- package/dist/panoramic/component-view-model.js +65 -0
- package/dist/panoramic/component-view-model.js.map +1 -0
- package/dist/panoramic/config-reference-generator.d.ts +78 -0
- package/dist/panoramic/config-reference-generator.d.ts.map +1 -0
- package/dist/panoramic/config-reference-generator.js +199 -0
- package/dist/panoramic/config-reference-generator.js.map +1 -0
- package/dist/panoramic/coverage-auditor.d.ts +95 -0
- package/dist/panoramic/coverage-auditor.d.ts.map +1 -0
- package/dist/panoramic/coverage-auditor.js +290 -0
- package/dist/panoramic/coverage-auditor.js.map +1 -0
- package/dist/panoramic/cross-package-analyzer.d.ts +112 -0
- package/dist/panoramic/cross-package-analyzer.d.ts.map +1 -0
- package/dist/panoramic/cross-package-analyzer.js +258 -0
- package/dist/panoramic/cross-package-analyzer.js.map +1 -0
- package/dist/panoramic/data-model-generator.d.ts +528 -0
- package/dist/panoramic/data-model-generator.d.ts.map +1 -0
- package/dist/panoramic/data-model-generator.js +647 -0
- package/dist/panoramic/data-model-generator.js.map +1 -0
- package/dist/panoramic/doc-graph-builder.d.ts +80 -0
- package/dist/panoramic/doc-graph-builder.d.ts.map +1 -0
- package/dist/panoramic/doc-graph-builder.js +352 -0
- package/dist/panoramic/doc-graph-builder.js.map +1 -0
- package/dist/panoramic/docs-bundle-manifest-reader.d.ts +26 -0
- package/dist/panoramic/docs-bundle-manifest-reader.d.ts.map +1 -0
- package/dist/panoramic/docs-bundle-manifest-reader.js +106 -0
- package/dist/panoramic/docs-bundle-manifest-reader.js.map +1 -0
- package/dist/panoramic/docs-bundle-orchestrator.d.ts +14 -0
- package/dist/panoramic/docs-bundle-orchestrator.d.ts.map +1 -0
- package/dist/panoramic/docs-bundle-orchestrator.js +538 -0
- package/dist/panoramic/docs-bundle-orchestrator.js.map +1 -0
- package/dist/panoramic/docs-bundle-profiles.d.ts +4 -0
- package/dist/panoramic/docs-bundle-profiles.d.ts.map +1 -0
- package/dist/panoramic/docs-bundle-profiles.js +82 -0
- package/dist/panoramic/docs-bundle-profiles.js.map +1 -0
- package/dist/panoramic/docs-bundle-types.d.ts +94 -0
- package/dist/panoramic/docs-bundle-types.d.ts.map +1 -0
- package/dist/panoramic/docs-bundle-types.js +10 -0
- package/dist/panoramic/docs-bundle-types.js.map +1 -0
- package/dist/panoramic/docs-quality-evaluator.d.ts +31 -0
- package/dist/panoramic/docs-quality-evaluator.d.ts.map +1 -0
- package/dist/panoramic/docs-quality-evaluator.js +941 -0
- package/dist/panoramic/docs-quality-evaluator.js.map +1 -0
- package/dist/panoramic/docs-quality-model.d.ts +125 -0
- package/dist/panoramic/docs-quality-model.d.ts.map +1 -0
- package/dist/panoramic/docs-quality-model.js +166 -0
- package/dist/panoramic/docs-quality-model.js.map +1 -0
- package/dist/panoramic/dynamic-scenarios-builder.d.ts +18 -0
- package/dist/panoramic/dynamic-scenarios-builder.d.ts.map +1 -0
- package/dist/panoramic/dynamic-scenarios-builder.js +316 -0
- package/dist/panoramic/dynamic-scenarios-builder.js.map +1 -0
- package/dist/panoramic/event-surface-generator.d.ts +52 -0
- package/dist/panoramic/event-surface-generator.d.ts.map +1 -0
- package/dist/panoramic/event-surface-generator.js +507 -0
- package/dist/panoramic/event-surface-generator.js.map +1 -0
- package/dist/panoramic/generator-registry.d.ts +1 -1
- package/dist/panoramic/generator-registry.d.ts.map +1 -1
- package/dist/panoramic/generator-registry.js +5 -2
- package/dist/panoramic/generator-registry.js.map +1 -1
- package/dist/panoramic/generators/cross-package-analyzer.d.ts +5 -5
- package/dist/panoramic/generators/cross-package-analyzer.d.ts.map +1 -1
- package/dist/panoramic/generators/cross-package-analyzer.js +1 -1
- package/dist/panoramic/generators/cross-package-analyzer.js.map +1 -1
- package/dist/panoramic/generators/data-model-generator.d.ts +27 -27
- package/dist/panoramic/graph/confidence-mapper.d.ts +18 -0
- package/dist/panoramic/graph/confidence-mapper.d.ts.map +1 -1
- package/dist/panoramic/graph/confidence-mapper.js +26 -0
- package/dist/panoramic/graph/confidence-mapper.js.map +1 -1
- package/dist/panoramic/graph/graph-builder.d.ts.map +1 -1
- package/dist/panoramic/graph/graph-builder.js +78 -0
- package/dist/panoramic/graph/graph-builder.js.map +1 -1
- package/dist/panoramic/graph/graph-paths.d.ts +8 -0
- package/dist/panoramic/graph/graph-paths.d.ts.map +1 -1
- package/dist/panoramic/graph/graph-paths.js +10 -0
- package/dist/panoramic/graph/graph-paths.js.map +1 -1
- package/dist/panoramic/graph/graph-query.d.ts +33 -2
- package/dist/panoramic/graph/graph-query.d.ts.map +1 -1
- package/dist/panoramic/graph/graph-query.js +69 -19
- package/dist/panoramic/graph/graph-query.js.map +1 -1
- package/dist/panoramic/graph/graph-types.d.ts +32 -3
- package/dist/panoramic/graph/graph-types.d.ts.map +1 -1
- package/dist/panoramic/hyperedges/schema.d.ts +6 -6
- package/dist/panoramic/interface-surface-generator.d.ts +50 -0
- package/dist/panoramic/interface-surface-generator.d.ts.map +1 -0
- package/dist/panoramic/interface-surface-generator.js +388 -0
- package/dist/panoramic/interface-surface-generator.js.map +1 -0
- package/dist/panoramic/interfaces.d.ts +2 -2
- package/dist/panoramic/mock-readme-generator.d.ts +90 -0
- package/dist/panoramic/mock-readme-generator.d.ts.map +1 -0
- package/dist/panoramic/mock-readme-generator.js +111 -0
- package/dist/panoramic/mock-readme-generator.js.map +1 -0
- package/dist/panoramic/models/component-view-model.d.ts +1 -1
- package/dist/panoramic/models/component-view-model.d.ts.map +1 -1
- package/dist/panoramic/models/component-view-model.js.map +1 -1
- package/dist/panoramic/narrative-provenance-adapter.d.ts +8 -0
- package/dist/panoramic/narrative-provenance-adapter.d.ts.map +1 -0
- package/dist/panoramic/narrative-provenance-adapter.js +99 -0
- package/dist/panoramic/narrative-provenance-adapter.js.map +1 -0
- package/dist/panoramic/parser-registry.d.ts +1 -1
- package/dist/panoramic/parser-registry.js +1 -1
- package/dist/panoramic/parsers/types.d.ts +6 -6
- package/dist/panoramic/pattern-hints-generator.d.ts +28 -0
- package/dist/panoramic/pattern-hints-generator.d.ts.map +1 -0
- package/dist/panoramic/pattern-hints-generator.js +218 -0
- package/dist/panoramic/pattern-hints-generator.js.map +1 -0
- package/dist/panoramic/pattern-hints-model.d.ts +89 -0
- package/dist/panoramic/pattern-hints-model.d.ts.map +1 -0
- package/dist/panoramic/pattern-hints-model.js +61 -0
- package/dist/panoramic/pattern-hints-model.js.map +1 -0
- package/dist/panoramic/pattern-knowledge-base.d.ts +31 -0
- package/dist/panoramic/pattern-knowledge-base.d.ts.map +1 -0
- package/dist/panoramic/pattern-knowledge-base.js +407 -0
- package/dist/panoramic/pattern-knowledge-base.js.map +1 -0
- package/dist/panoramic/pipelines/coverage-auditor.d.ts.map +1 -1
- package/dist/panoramic/pipelines/coverage-auditor.js +4 -2
- package/dist/panoramic/pipelines/coverage-auditor.js.map +1 -1
- package/dist/panoramic/pipelines/docs-bundle-orchestrator.js +13 -6
- package/dist/panoramic/pipelines/docs-bundle-orchestrator.js.map +1 -1
- package/dist/panoramic/pipelines/product-ux-docs.d.ts +5 -0
- package/dist/panoramic/pipelines/product-ux-docs.d.ts.map +1 -1
- package/dist/panoramic/pipelines/product-ux-docs.js +34 -6
- package/dist/panoramic/pipelines/product-ux-docs.js.map +1 -1
- package/dist/panoramic/product-ux-docs.d.ts +104 -0
- package/dist/panoramic/product-ux-docs.d.ts.map +1 -0
- package/dist/panoramic/product-ux-docs.js +817 -0
- package/dist/panoramic/product-ux-docs.js.map +1 -0
- package/dist/panoramic/qa/__tests__/citation.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/citation.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/citation.test.js +193 -0
- package/dist/panoramic/qa/__tests__/citation.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/debt-context.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/debt-context.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/debt-context.test.js +154 -0
- package/dist/panoramic/qa/__tests__/debt-context.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/graph-retriever.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/graph-retriever.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/graph-retriever.test.js +148 -0
- package/dist/panoramic/qa/__tests__/graph-retriever.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/index.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/index.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/index.test.js +246 -0
- package/dist/panoramic/qa/__tests__/index.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/llm-caller.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/llm-caller.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/llm-caller.test.js +168 -0
- package/dist/panoramic/qa/__tests__/llm-caller.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/prompt-builder.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/prompt-builder.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/prompt-builder.test.js +150 -0
- package/dist/panoramic/qa/__tests__/prompt-builder.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/qa-integration.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/qa-integration.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/qa-integration.test.js +296 -0
- package/dist/panoramic/qa/__tests__/qa-integration.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/rag-reranker.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/rag-reranker.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/rag-reranker.test.js +136 -0
- package/dist/panoramic/qa/__tests__/rag-reranker.test.js.map +1 -0
- package/dist/panoramic/qa/index.d.ts.map +1 -1
- package/dist/panoramic/qa/index.js +10 -3
- package/dist/panoramic/qa/index.js.map +1 -1
- package/dist/panoramic/runtime-topology-generator.d.ts +77 -0
- package/dist/panoramic/runtime-topology-generator.d.ts.map +1 -0
- package/dist/panoramic/runtime-topology-generator.js +676 -0
- package/dist/panoramic/runtime-topology-generator.js.map +1 -0
- package/dist/panoramic/runtime-topology-model.d.ts +145 -0
- package/dist/panoramic/runtime-topology-model.d.ts.map +1 -0
- package/dist/panoramic/runtime-topology-model.js +300 -0
- package/dist/panoramic/runtime-topology-model.js.map +1 -0
- package/dist/panoramic/troubleshooting-generator.d.ts +51 -0
- package/dist/panoramic/troubleshooting-generator.d.ts.map +1 -0
- package/dist/panoramic/troubleshooting-generator.js +451 -0
- package/dist/panoramic/troubleshooting-generator.js.map +1 -0
- package/dist/panoramic/utils/text-segmenter.d.ts +15 -0
- package/dist/panoramic/utils/text-segmenter.d.ts.map +1 -1
- package/dist/panoramic/utils/text-segmenter.js +38 -0
- package/dist/panoramic/utils/text-segmenter.js.map +1 -1
- package/dist/panoramic/workspace-index-generator.d.ts +148 -0
- package/dist/panoramic/workspace-index-generator.d.ts.map +1 -0
- package/dist/panoramic/workspace-index-generator.js +497 -0
- package/dist/panoramic/workspace-index-generator.js.map +1 -0
- package/dist/runtime-bootstrap.d.ts +9 -0
- package/dist/runtime-bootstrap.d.ts.map +1 -0
- package/dist/runtime-bootstrap.js +33 -0
- package/dist/runtime-bootstrap.js.map +1 -0
- package/dist/utils/file-scanner.js +1 -1
- package/dist/utils/file-scanner.js.map +1 -1
- package/package.json +12 -2
- package/plugins/spec-driver/.claude-plugin/plugin.json +1 -1
- package/plugins/spec-driver/README.md +18 -1
- package/plugins/spec-driver/agents/implement.md +20 -1
- package/plugins/spec-driver/agents/plan.md +20 -1
- package/plugins/spec-driver/agents/quality-review.md +20 -1
- package/plugins/spec-driver/agents/spec-review.md +20 -1
- package/plugins/spec-driver/agents/verify.md +20 -1
- package/plugins/spec-driver/docs/customization.md +134 -0
- package/plugins/spec-driver/docs/spectra-mcp-integration.md +165 -0
- package/plugins/spec-driver/lib/preference-rules.mjs +96 -0
- package/plugins/spec-driver/scripts/postinstall.sh +1 -1
- package/plugins/spec-driver/scripts/sync-preference-rules.mjs +148 -0
- package/plugins/spec-driver/skills/spec-driver-feature/SKILL.md +10 -0
- package/plugins/spec-driver/skills/spec-driver-fix/SKILL.md +10 -0
- package/plugins/spec-driver/skills/spec-driver-implement/SKILL.md +10 -0
- package/plugins/spec-driver/skills/spec-driver-refactor/SKILL.md +10 -0
- package/plugins/spec-driver/skills/spec-driver-story/SKILL.md +10 -0
- package/plugins/spec-driver/templates/preference-rules.md +39 -0
- package/plugins/spectra/.claude-plugin/plugin.json +1 -1
- package/plugins/spectra/README.md +48 -1
- package/plugins/spectra/hooks/post-commit.sh +40 -0
- package/templates/product-overview.hbs +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CodeSkeleton } from '../models/code-skeleton.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ModuleGraph } from '../knowledge-graph/module-derivation.js';
|
|
3
3
|
/**
|
|
4
|
-
* 基于 CodeSkeleton 的 imports
|
|
4
|
+
* 基于 CodeSkeleton 的 imports 信息构建轻量级模块图(W1.4:UnifiedGraph 派生路径)。
|
|
5
5
|
*
|
|
6
6
|
* 对 `isRelative: true` 的 import 使用路径解析构建依赖边;
|
|
7
7
|
* `isRelative: false` 的 import(第三方包)被忽略。
|
|
@@ -10,7 +10,17 @@ import type { DependencyGraph } from '../models/dependency-graph.js';
|
|
|
10
10
|
* @param files - 同一语言的文件路径列表(相对于项目根目录)
|
|
11
11
|
* @param projectRoot - 项目根目录
|
|
12
12
|
* @param skeletons - 与 files 对应的 CodeSkeleton 列表
|
|
13
|
-
* @returns
|
|
13
|
+
* @returns ModuleGraph
|
|
14
14
|
*/
|
|
15
|
-
export declare function buildDirectoryGraph(files: string[], projectRoot: string, skeletons: CodeSkeleton[]): Promise<
|
|
15
|
+
export declare function buildDirectoryGraph(files: string[], projectRoot: string, skeletons: CodeSkeleton[]): Promise<ModuleGraph>;
|
|
16
|
+
/**
|
|
17
|
+
* Public builder:从已含 resolvedPath 的 CodeSkeleton Map 直接派生 ModuleGraph。
|
|
18
|
+
*
|
|
19
|
+
* 适用场景:python-adapter 等已知道自己语言 import 解析规则的 adapter,
|
|
20
|
+
* 在自己内部完成 imports[].resolvedPath 写回后,调用本函数把 UnifiedGraph 派生 +
|
|
21
|
+
* 视图转换合并为一步。
|
|
22
|
+
*
|
|
23
|
+
* 这是 buildModuleGraphFromCodeSkeletons 的薄壳 re-export,保留 backwards-compat 名字。
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildGraphFromCodeSkeletons(codeSkeletons: ReadonlyMap<string, CodeSkeleton>, projectRoot: string, language?: CodeSkeleton['language']): ModuleGraph;
|
|
16
26
|
//# sourceMappingURL=directory-graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-graph.d.ts","sourceRoot":"","sources":["../../src/graph/directory-graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"directory-graph.d.ts","sourceRoot":"","sources":["../../src/graph/directory-graph.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAO3E;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,YAAY,EAAE,GACxB,OAAO,CAAC,WAAW,CAAC,CAyEtB;AAqID;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAChD,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,GAClC,WAAW,CAEb"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* directory-graph.ts — 多语言轻量级模块图构建器(Feature 156 W1.4)
|
|
3
|
+
*
|
|
4
|
+
* 历史:本文件原先直接产出模块图节点 + 边。
|
|
5
|
+
* Feature 156 W1.2 后改为统一走 UnifiedGraph 派生路径;W1.4 atomic switch 完成后,
|
|
6
|
+
* 类型系统统一为 ModuleGraph 视图。
|
|
7
|
+
*
|
|
8
|
+
* 流程:
|
|
9
|
+
* 1. 用既有的 resolveImportPath / resolveAbsoluteImportPath 推断每个 import 的
|
|
10
|
+
* resolvedPath(适用于 Python/Go/Java/任意语言相对 import)
|
|
11
|
+
* 2. 把这些 resolvedPath 写回 CodeSkeleton.imports[i],构造 codeSkeletons Map
|
|
12
|
+
* 3. buildUnifiedGraph 派生 depends-on 边
|
|
13
|
+
* 4. deriveModuleGraph 派生 ModuleGraph 视图
|
|
5
14
|
*/
|
|
6
15
|
import * as path from 'node:path';
|
|
7
|
-
import {
|
|
8
|
-
import { renderDependencyGraph } from './mermaid-renderer.js';
|
|
16
|
+
import { buildModuleGraphFromCodeSkeletons, createEmptyModuleGraph, } from '../knowledge-graph/module-derivation.js';
|
|
9
17
|
import { LanguageAdapterRegistry } from '../adapters/language-adapter-registry.js';
|
|
10
18
|
/**
|
|
11
|
-
* 基于 CodeSkeleton 的 imports
|
|
19
|
+
* 基于 CodeSkeleton 的 imports 信息构建轻量级模块图(W1.4:UnifiedGraph 派生路径)。
|
|
12
20
|
*
|
|
13
21
|
* 对 `isRelative: true` 的 import 使用路径解析构建依赖边;
|
|
14
22
|
* `isRelative: false` 的 import(第三方包)被忽略。
|
|
@@ -17,19 +25,17 @@ import { LanguageAdapterRegistry } from '../adapters/language-adapter-registry.j
|
|
|
17
25
|
* @param files - 同一语言的文件路径列表(相对于项目根目录)
|
|
18
26
|
* @param projectRoot - 项目根目录
|
|
19
27
|
* @param skeletons - 与 files 对应的 CodeSkeleton 列表
|
|
20
|
-
* @returns
|
|
28
|
+
* @returns ModuleGraph
|
|
21
29
|
*/
|
|
22
30
|
export async function buildDirectoryGraph(files, projectRoot, skeletons) {
|
|
23
31
|
if (files.length === 0) {
|
|
24
|
-
return
|
|
32
|
+
return createEmptyModuleGraph(projectRoot);
|
|
25
33
|
}
|
|
26
34
|
const fileSet = new Set(files);
|
|
27
35
|
const registry = LanguageAdapterRegistry.getInstance();
|
|
28
36
|
// 预构建目录前缀索引:dirPrefix → 该目录下的文件列表
|
|
29
|
-
// 将 resolveAbsoluteImportPath 中目录扫描从 O(n) 降到 O(候选数)
|
|
30
37
|
const dirPrefixIndex = new Map();
|
|
31
38
|
for (const file of files) {
|
|
32
|
-
// 提取所有父目录前缀(从根到直接父目录)
|
|
33
39
|
const parts = file.split('/');
|
|
34
40
|
for (let depth = 1; depth < parts.length; depth++) {
|
|
35
41
|
const prefix = parts.slice(0, depth).join('/') + '/';
|
|
@@ -42,7 +48,7 @@ export async function buildDirectoryGraph(files, projectRoot, skeletons) {
|
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
50
|
}
|
|
45
|
-
//
|
|
51
|
+
// 文件路径 → 骨架映射
|
|
46
52
|
const skeletonMap = new Map();
|
|
47
53
|
for (let i = 0; i < files.length; i++) {
|
|
48
54
|
const file = files[i];
|
|
@@ -51,95 +57,49 @@ export async function buildDirectoryGraph(files, projectRoot, skeletons) {
|
|
|
51
57
|
skeletonMap.set(file, skeleton);
|
|
52
58
|
}
|
|
53
59
|
}
|
|
54
|
-
//
|
|
55
|
-
const
|
|
56
|
-
for (const file of files) {
|
|
57
|
-
const adapter = registry.getAdapter(file);
|
|
58
|
-
nodeMap.set(file, {
|
|
59
|
-
source: file,
|
|
60
|
-
isOrphan: true,
|
|
61
|
-
inDegree: 0,
|
|
62
|
-
outDegree: 0,
|
|
63
|
-
level: 0,
|
|
64
|
-
language: adapter?.id,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
// 步骤 2:基于 import 推断构建边
|
|
68
|
-
const edges = [];
|
|
60
|
+
// ── 1. 重建带 resolvedPath 的 CodeSkeleton Map ──
|
|
61
|
+
const codeSkeletons = new Map();
|
|
69
62
|
for (const file of files) {
|
|
70
63
|
const skeleton = skeletonMap.get(file);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
for (const imp of skeleton.imports) {
|
|
64
|
+
const baseImports = skeleton?.imports ?? [];
|
|
65
|
+
const newImports = baseImports.map((imp) => {
|
|
74
66
|
let resolved;
|
|
75
67
|
if (imp.isRelative) {
|
|
76
68
|
resolved = resolveImportPath(file, imp.moduleSpecifier, fileSet);
|
|
77
69
|
}
|
|
78
70
|
else {
|
|
79
|
-
// 尝试解析项目内绝对 import(适用于 Python 包名式导入,如 graphify.core)
|
|
80
71
|
resolved = resolveAbsoluteImportPath(imp.moduleSpecifier, fileSet, dirPrefixIndex);
|
|
81
72
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
to: resolved,
|
|
86
|
-
isCircular: false,
|
|
87
|
-
importType: 'static',
|
|
88
|
-
});
|
|
89
|
-
// 更新度数
|
|
90
|
-
const fromNode = nodeMap.get(file);
|
|
91
|
-
const toNode = nodeMap.get(resolved);
|
|
92
|
-
if (fromNode && toNode) {
|
|
93
|
-
fromNode.outDegree++;
|
|
94
|
-
toNode.inDegree++;
|
|
95
|
-
fromNode.isOrphan = false;
|
|
96
|
-
toNode.isOrphan = false;
|
|
97
|
-
}
|
|
73
|
+
// 仅当解析到的目标确实在 fileSet 中且非自引用,才写回 resolvedPath
|
|
74
|
+
if (resolved && resolved !== file && fileSet.has(resolved)) {
|
|
75
|
+
return { ...imp, resolvedPath: resolved };
|
|
98
76
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
node.level = level;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// 生成 Mermaid 源码
|
|
125
|
-
const mermaidSource = renderDependencyGraph({
|
|
126
|
-
...tempGraph,
|
|
127
|
-
topologicalOrder: sortResult.order,
|
|
128
|
-
sccs,
|
|
129
|
-
modules: Array.from(nodeMap.values()),
|
|
130
|
-
});
|
|
131
|
-
return {
|
|
132
|
-
projectRoot,
|
|
133
|
-
modules: Array.from(nodeMap.values()),
|
|
134
|
-
edges,
|
|
135
|
-
topologicalOrder: sortResult.order,
|
|
136
|
-
sccs,
|
|
137
|
-
totalModules: graphNodes.length,
|
|
138
|
-
totalEdges: edges.length,
|
|
139
|
-
analyzedAt: new Date().toISOString(),
|
|
140
|
-
mermaidSource,
|
|
141
|
-
};
|
|
77
|
+
return imp;
|
|
78
|
+
});
|
|
79
|
+
// 构造(或复用)CodeSkeleton;filePath 用相对路径与 fileSet 对齐
|
|
80
|
+
const language = skeleton?.language ?? guessLanguageFromFile(file);
|
|
81
|
+
const adapter = registry.getAdapter(file);
|
|
82
|
+
const synthSk = skeleton
|
|
83
|
+
? { ...skeleton, filePath: file, imports: newImports }
|
|
84
|
+
: {
|
|
85
|
+
filePath: file,
|
|
86
|
+
language,
|
|
87
|
+
loc: 1,
|
|
88
|
+
exports: [],
|
|
89
|
+
imports: newImports,
|
|
90
|
+
hash: '0'.repeat(64),
|
|
91
|
+
analyzedAt: new Date().toISOString(),
|
|
92
|
+
parserUsed: 'tree-sitter',
|
|
93
|
+
};
|
|
94
|
+
codeSkeletons.set(file, synthSk);
|
|
95
|
+
void adapter;
|
|
96
|
+
}
|
|
97
|
+
// ── 2. 一站式派生 ModuleGraph(含 language 回填)──
|
|
98
|
+
return buildModuleGraphFromCodeSkeletons(codeSkeletons, projectRoot);
|
|
142
99
|
}
|
|
100
|
+
// ============================================================
|
|
101
|
+
// 路径解析(保留 W1.2 之前的实现,作为多语言相对 import 推断的核心)
|
|
102
|
+
// ============================================================
|
|
143
103
|
/**
|
|
144
104
|
* 解析 import 路径到文件集合中的实际文件
|
|
145
105
|
*
|
|
@@ -147,18 +107,12 @@ export async function buildDirectoryGraph(files, projectRoot, skeletons) {
|
|
|
147
107
|
* - Python 相对 import:`from .utils import x` → `./utils`
|
|
148
108
|
* - Go 本地 package:`"./internal/utils"` → `./internal/utils/`
|
|
149
109
|
* - 通用相对路径:`./foo`, `../bar`
|
|
150
|
-
*
|
|
151
|
-
* @param fromFile - 发起 import 的文件路径
|
|
152
|
-
* @param specifier - import 模块标识符
|
|
153
|
-
* @param fileSet - 可用文件集合
|
|
154
|
-
* @returns 解析后的文件路径,或 undefined(无法解析)
|
|
155
110
|
*/
|
|
156
111
|
function resolveImportPath(fromFile, specifier, fileSet) {
|
|
157
112
|
const fromDir = path.dirname(fromFile);
|
|
158
|
-
//
|
|
113
|
+
// Python 点号相对导入
|
|
159
114
|
let normalizedSpecifier = specifier;
|
|
160
115
|
if (/^\.{1,3}[a-zA-Z_]/.test(specifier)) {
|
|
161
|
-
// Python 风格:`.utils` → `./utils`,`..models` → `../models`
|
|
162
116
|
const dotMatch = /^(\.{1,3})(.*)$/.exec(specifier);
|
|
163
117
|
if (dotMatch) {
|
|
164
118
|
const dots = dotMatch[1];
|
|
@@ -174,17 +128,13 @@ function resolveImportPath(fromFile, specifier, fileSet) {
|
|
|
174
128
|
}
|
|
175
129
|
}
|
|
176
130
|
}
|
|
177
|
-
// 只处理以 ./ 或 ../ 开头的路径
|
|
178
131
|
if (!normalizedSpecifier.startsWith('./') && !normalizedSpecifier.startsWith('../')) {
|
|
179
132
|
return undefined;
|
|
180
133
|
}
|
|
181
|
-
// 解析为相对于项目根的路径
|
|
182
134
|
const resolved = path.normalize(path.join(fromDir, normalizedSpecifier));
|
|
183
|
-
// 尝试精确匹配
|
|
184
135
|
if (fileSet.has(resolved)) {
|
|
185
136
|
return resolved;
|
|
186
137
|
}
|
|
187
|
-
// 尝试补全常见扩展名
|
|
188
138
|
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.java'];
|
|
189
139
|
for (const ext of extensions) {
|
|
190
140
|
const withExt = resolved + ext;
|
|
@@ -192,7 +142,6 @@ function resolveImportPath(fromFile, specifier, fileSet) {
|
|
|
192
142
|
return withExt;
|
|
193
143
|
}
|
|
194
144
|
}
|
|
195
|
-
// 尝试 index 文件
|
|
196
145
|
const indexFiles = ['index.ts', 'index.js', '__init__.py'];
|
|
197
146
|
for (const indexFile of indexFiles) {
|
|
198
147
|
const withIndex = path.join(resolved, indexFile);
|
|
@@ -200,7 +149,6 @@ function resolveImportPath(fromFile, specifier, fileSet) {
|
|
|
200
149
|
return withIndex;
|
|
201
150
|
}
|
|
202
151
|
}
|
|
203
|
-
// 尝试匹配目录下的文件(Go package 导入场景:import "./internal/utils" 匹配 internal/utils/ 下任意 .go 文件)
|
|
204
152
|
const dirPrefix = resolved + '/';
|
|
205
153
|
for (const file of fileSet) {
|
|
206
154
|
if (file.startsWith(dirPrefix)) {
|
|
@@ -211,29 +159,18 @@ function resolveImportPath(fromFile, specifier, fileSet) {
|
|
|
211
159
|
}
|
|
212
160
|
/**
|
|
213
161
|
* 解析项目内绝对 import 路径(Python 包名式导入)
|
|
214
|
-
*
|
|
215
|
-
* 将点分包名转换为路径后,在 fileSet 中查找匹配的项目内文件。
|
|
216
|
-
* 外部库不存在于 fileSet 中,自动排除,不产生误边。
|
|
217
|
-
*
|
|
218
|
-
* @param specifier - import 模块标识符(如 `graphify.core.parser`)
|
|
219
|
-
* @param fileSet - 可用文件集合
|
|
220
|
-
* @returns 解析后的文件路径,或 undefined(无法解析 / 非项目内模块)
|
|
221
162
|
*/
|
|
222
163
|
function resolveAbsoluteImportPath(specifier, fileSet, dirPrefixIndex) {
|
|
223
|
-
// 将点分包名转换为路径(graphify.core → graphify/core)
|
|
224
164
|
const asPath = specifier.replace(/\./g, '/');
|
|
225
|
-
// 尝试精确文件匹配
|
|
226
165
|
if (fileSet.has(asPath)) {
|
|
227
166
|
return asPath;
|
|
228
167
|
}
|
|
229
|
-
// 尝试补全常见扩展名
|
|
230
168
|
const extensions = ['.py', '.pyi', '.ts', '.tsx', '.js', '.jsx', '.go', '.java'];
|
|
231
169
|
for (const ext of extensions) {
|
|
232
170
|
if (fileSet.has(asPath + ext)) {
|
|
233
171
|
return asPath + ext;
|
|
234
172
|
}
|
|
235
173
|
}
|
|
236
|
-
// 尝试包 index 文件(Python __init__.py、JS/TS index)
|
|
237
174
|
const indexFiles = ['__init__.py', 'index.ts', 'index.js', 'index.tsx'];
|
|
238
175
|
for (const indexFile of indexFiles) {
|
|
239
176
|
const candidate = `${asPath}/${indexFile}`;
|
|
@@ -241,8 +178,6 @@ function resolveAbsoluteImportPath(specifier, fileSet, dirPrefixIndex) {
|
|
|
241
178
|
return candidate;
|
|
242
179
|
}
|
|
243
180
|
}
|
|
244
|
-
// 尝试匹配目录下的任意文件(最佳稳定性:优先 __init__.py,其次字典序第一个)
|
|
245
|
-
// 使用预构建目录前缀索引(O(候选数)),回退为全量扫描(O(n))
|
|
246
181
|
const dirPrefix = `${asPath}/`;
|
|
247
182
|
let dirMatches;
|
|
248
183
|
if (dirPrefixIndex) {
|
|
@@ -262,20 +197,28 @@ function resolveAbsoluteImportPath(specifier, fileSet, dirPrefixIndex) {
|
|
|
262
197
|
}
|
|
263
198
|
return undefined;
|
|
264
199
|
}
|
|
200
|
+
function guessLanguageFromFile(file) {
|
|
201
|
+
const ext = path.extname(file).toLowerCase();
|
|
202
|
+
if (ext === '.py' || ext === '.pyi')
|
|
203
|
+
return 'python';
|
|
204
|
+
if (ext === '.go')
|
|
205
|
+
return 'go';
|
|
206
|
+
if (ext === '.java')
|
|
207
|
+
return 'java';
|
|
208
|
+
if (ext === '.ts' || ext === '.tsx' || ext === '.mts')
|
|
209
|
+
return 'typescript';
|
|
210
|
+
return 'javascript';
|
|
211
|
+
}
|
|
265
212
|
/**
|
|
266
|
-
*
|
|
213
|
+
* Public builder:从已含 resolvedPath 的 CodeSkeleton Map 直接派生 ModuleGraph。
|
|
214
|
+
*
|
|
215
|
+
* 适用场景:python-adapter 等已知道自己语言 import 解析规则的 adapter,
|
|
216
|
+
* 在自己内部完成 imports[].resolvedPath 写回后,调用本函数把 UnifiedGraph 派生 +
|
|
217
|
+
* 视图转换合并为一步。
|
|
218
|
+
*
|
|
219
|
+
* 这是 buildModuleGraphFromCodeSkeletons 的薄壳 re-export,保留 backwards-compat 名字。
|
|
267
220
|
*/
|
|
268
|
-
function
|
|
269
|
-
return
|
|
270
|
-
projectRoot,
|
|
271
|
-
modules: [],
|
|
272
|
-
edges: [],
|
|
273
|
-
topologicalOrder: [],
|
|
274
|
-
sccs: [],
|
|
275
|
-
totalModules: 0,
|
|
276
|
-
totalEdges: 0,
|
|
277
|
-
analyzedAt: new Date().toISOString(),
|
|
278
|
-
mermaidSource: '',
|
|
279
|
-
};
|
|
221
|
+
export function buildGraphFromCodeSkeletons(codeSkeletons, projectRoot, language) {
|
|
222
|
+
return buildModuleGraphFromCodeSkeletons(codeSkeletons, projectRoot, language);
|
|
280
223
|
}
|
|
281
224
|
//# sourceMappingURL=directory-graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-graph.js","sourceRoot":"","sources":["../../src/graph/directory-graph.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"directory-graph.js","sourceRoot":"","sources":["../../src/graph/directory-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EACL,iCAAiC,EACjC,sBAAsB,GACvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAEnF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAe,EACf,WAAmB,EACnB,SAAyB;IAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,WAAW,EAAE,CAAC;IAEvD,kCAAkC;IAClC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,WAAW,GAAG,IAAI,GAAG,EAAwB,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,WAAW,GAAsB,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAsB,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5D,IAAI,QAA4B,CAAC;YACjC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;YACrF,CAAC;YACD,8CAA8C;YAC9C,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3D,OAAO,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;YAC5C,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,iDAAiD;QACjD,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAiB,QAAQ;YACpC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;YACtD,CAAC,CAAC;gBACE,QAAQ,EAAE,IAAI;gBACd,QAAQ;gBACR,GAAG,EAAE,CAAC;gBACN,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,UAAU,EAAE,aAAa;aAC1B,CAAC;QACN,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,OAAO,CAAC;IACf,CAAC;IAED,2CAA2C;IAC3C,OAAO,iCAAiC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC;AAED,+DAA+D;AAC/D,2CAA2C;AAC3C,+DAA+D;AAE/D;;;;;;;GAOG;AACH,SAAS,iBAAiB,CACxB,QAAgB,EAChB,SAAiB,EACjB,OAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvC,gBAAgB;IAChB,IAAI,mBAAmB,GAAG,SAAS,CAAC;IACpC,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC1B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,mBAAmB,GAAG,KAAK,IAAI,EAAE,CAAC;YACpC,CAAC;iBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,mBAAmB,GAAG,MAAM,IAAI,EAAE,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC1B,mBAAmB,GAAG,SAAS,IAAI,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEzE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,QAAQ,GAAG,GAAG,CAAC;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC3D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,SAAiB,EACjB,OAAoB,EACpB,cAAsC;IAEtC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACjF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,MAAM,GAAG,GAAG,CAAC;QACtB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACxE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,MAAM,GAAG,CAAC;IAC/B,IAAI,UAAoB,CAAC;IACzB,IAAI,cAAc,EAAE,CAAC;QACnB,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IAC3E,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,aAAgD,EAChD,WAAmB,EACnB,QAAmC;IAEnC,OAAO,iCAAiC,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Mermaid
|
|
2
|
+
* Mermaid 模块图渲染器
|
|
3
3
|
* 参见 contracts/graph-module.md
|
|
4
|
+
*
|
|
5
|
+
* Feature 156 W1.4:输入类型为 ModuleGraph
|
|
6
|
+
* (UnifiedGraph 派生视图,结构等价)。
|
|
4
7
|
*/
|
|
5
|
-
import type {
|
|
8
|
+
import type { ModuleGraph } from '../knowledge-graph/module-derivation.js';
|
|
6
9
|
export interface RenderOptions {
|
|
7
10
|
/** 按目录分组(默认:模块数 > 20 时) */
|
|
8
11
|
collapseDirectories?: boolean;
|
|
@@ -12,11 +15,11 @@ export interface RenderOptions {
|
|
|
12
15
|
maxNodes?: number;
|
|
13
16
|
}
|
|
14
17
|
/**
|
|
15
|
-
*
|
|
18
|
+
* 为 ModuleGraph 生成 Mermaid graph TD 源码
|
|
16
19
|
*
|
|
17
|
-
* @param graph -
|
|
20
|
+
* @param graph - ModuleGraph
|
|
18
21
|
* @param options - 渲染选项
|
|
19
22
|
* @returns Mermaid graph TD 源码
|
|
20
23
|
*/
|
|
21
|
-
export declare function
|
|
24
|
+
export declare function renderModuleGraph(graph: ModuleGraph, options?: RenderOptions): string;
|
|
22
25
|
//# sourceMappingURL=mermaid-renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid-renderer.d.ts","sourceRoot":"","sources":["../../src/graph/mermaid-renderer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mermaid-renderer.d.ts","sourceRoot":"","sources":["../../src/graph/mermaid-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAwCD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CA6GR"}
|
|
@@ -30,13 +30,13 @@ function groupByDirectory(modules) {
|
|
|
30
30
|
return groups;
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
33
|
+
* 为 ModuleGraph 生成 Mermaid graph TD 源码
|
|
34
34
|
*
|
|
35
|
-
* @param graph -
|
|
35
|
+
* @param graph - ModuleGraph
|
|
36
36
|
* @param options - 渲染选项
|
|
37
37
|
* @returns Mermaid graph TD 源码
|
|
38
38
|
*/
|
|
39
|
-
export function
|
|
39
|
+
export function renderModuleGraph(graph, options = {}) {
|
|
40
40
|
const { highlightCycles = true, maxNodes = 50, } = options;
|
|
41
41
|
const collapseDirectories = options.collapseDirectories ??
|
|
42
42
|
graph.modules.length > 20;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid-renderer.js","sourceRoot":"","sources":["../../src/graph/mermaid-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mermaid-renderer.js","sourceRoot":"","sources":["../../src/graph/mermaid-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 拓扑排序与 Tarjan SCC 检测
|
|
3
3
|
* 参见 contracts/graph-module.md
|
|
4
|
+
*
|
|
5
|
+
* Feature 156 W1.4:输入类型为 ModuleGraph
|
|
6
|
+
* (取自 src/knowledge-graph/module-derivation.ts,UnifiedGraph 派生视图)。
|
|
4
7
|
*/
|
|
5
|
-
import type {
|
|
8
|
+
import type { ModuleGraph, ModuleStronglyConnectedSet } from '../knowledge-graph/module-derivation.js';
|
|
6
9
|
export interface TopologicalResult {
|
|
7
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* 按依赖顺序排列的文件路径(dependents-first,依赖前置)
|
|
12
|
+
* 对于 A→B→C 链,输出 [A, B, C]:A 没有依赖(inDegree=0)排首位,
|
|
13
|
+
* B 依赖 A 排其次,C 依赖 B 排末位。按此顺序处理可保证每个模块的依赖已被先处理。
|
|
14
|
+
*/
|
|
8
15
|
order: string[];
|
|
9
16
|
/** 模块 → 拓扑层级 */
|
|
10
17
|
levels: Map<string, number>;
|
|
@@ -16,16 +23,16 @@ export interface TopologicalResult {
|
|
|
16
23
|
/**
|
|
17
24
|
* 基于 Tarjan 算法的强连通分量检测
|
|
18
25
|
*
|
|
19
|
-
* @param graph -
|
|
26
|
+
* @param graph - ModuleGraph
|
|
20
27
|
* @returns 所有 SCC(单模块 SCC 的 modules.length === 1)
|
|
21
28
|
*/
|
|
22
|
-
export declare function detectSCCs(graph:
|
|
29
|
+
export declare function detectSCCs(graph: ModuleGraph): ModuleStronglyConnectedSet[];
|
|
23
30
|
/**
|
|
24
31
|
* 使用 Kahn 算法计算处理顺序
|
|
25
32
|
* 循环依赖被折叠为 SCC 后作为整体处理
|
|
26
33
|
*
|
|
27
|
-
* @param graph -
|
|
34
|
+
* @param graph - ModuleGraph
|
|
28
35
|
* @returns 拓扑排序结果
|
|
29
36
|
*/
|
|
30
|
-
export declare function topologicalSort(graph:
|
|
37
|
+
export declare function topologicalSort(graph: ModuleGraph): TopologicalResult;
|
|
31
38
|
//# sourceMappingURL=topological-sort.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topological-sort.d.ts","sourceRoot":"","sources":["../../src/graph/topological-sort.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"topological-sort.d.ts","sourceRoot":"","sources":["../../src/graph/topological-sort.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAMvG,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gBAAgB;IAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,eAAe;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB;IACnB,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;CACzB;AAMD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,0BAA0B,EAAE,CA+D3E;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAsGrE"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* 基于 Tarjan 算法的强连通分量检测
|
|
6
6
|
*
|
|
7
|
-
* @param graph -
|
|
7
|
+
* @param graph - ModuleGraph
|
|
8
8
|
* @returns 所有 SCC(单模块 SCC 的 modules.length === 1)
|
|
9
9
|
*/
|
|
10
10
|
export function detectSCCs(graph) {
|
|
@@ -71,7 +71,7 @@ export function detectSCCs(graph) {
|
|
|
71
71
|
* 使用 Kahn 算法计算处理顺序
|
|
72
72
|
* 循环依赖被折叠为 SCC 后作为整体处理
|
|
73
73
|
*
|
|
74
|
-
* @param graph -
|
|
74
|
+
* @param graph - ModuleGraph
|
|
75
75
|
* @returns 拓扑排序结果
|
|
76
76
|
*/
|
|
77
77
|
export function topologicalSort(graph) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topological-sort.js","sourceRoot":"","sources":["../../src/graph/topological-sort.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"topological-sort.js","sourceRoot":"","sources":["../../src/graph/topological-sort.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature 151 T-007 — 4 阶段 call resolver(语言无关共享抽象,FR-2 + CL-04 + Codex C-4 修订)
|
|
3
|
+
*
|
|
4
|
+
* 输入:CallSite[](含 callerFile)+ CodeSkeleton Map
|
|
5
|
+
* 输出:UnifiedEdge[](仅 calls 类型)
|
|
6
|
+
*
|
|
7
|
+
* 4 阶段流水线:
|
|
8
|
+
* - Stage 1 (free):calleeKind=free 且 callee 在同模块 export → high
|
|
9
|
+
* - Stage 2 (member):self.x / Class.x,必须验证 callee 在 class.members 才 high;
|
|
10
|
+
* 类存在但方法在 MRO 父类 → medium;类无法定位 → medium 占位(Codex C-4 修订)
|
|
11
|
+
* - Stage 3 (cross-module):import 表查找;非通配 → medium,import * → low
|
|
12
|
+
* - Stage 4 (super / unresolved):super().method MRO 解析 ≤8 层 → low;
|
|
13
|
+
* dunder / decorator / 全部 fallthrough → low;dynamic call → 不输出(skip)
|
|
14
|
+
*/
|
|
15
|
+
import type { CodeSkeleton } from '../models/code-skeleton.js';
|
|
16
|
+
import type { CallSite } from '../models/call-site.js';
|
|
17
|
+
import type { UnifiedEdge } from './unified-graph.js';
|
|
18
|
+
/**
|
|
19
|
+
* 带 callerFile 上下文的 CallSite — call-resolver 的输入单元。
|
|
20
|
+
*
|
|
21
|
+
* 各 mapper 在 collectCallSites 阶段附加 callerFile(CodeSkeleton.filePath),
|
|
22
|
+
* 让 resolver 能定位 caller 所在模块并进行 cross-module / member 解析。
|
|
23
|
+
*/
|
|
24
|
+
export interface CallSiteWithFile extends CallSite {
|
|
25
|
+
callerFile: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Stage 决策表(plan §3.2):
|
|
29
|
+
*
|
|
30
|
+
* | Stage | 条件 | confidence |
|
|
31
|
+
* |-------|------|-----------|
|
|
32
|
+
* | 1 free | calleeKind=free 且 callee 在同模块 export | high |
|
|
33
|
+
* | 2 member(双重验证)| className 在 moduleSymbol + callee 在 classMember | high |
|
|
34
|
+
* | 2 member(MRO 父类命中)| 自身 members 不含但 ≤8 层 MRO 父类含 | medium |
|
|
35
|
+
* | 2 member(占位)| 类可定位但 callee 既不在自身也不在 MRO | medium 占位 |
|
|
36
|
+
* | 2 member(类无法定位)| className 缺失或未导出 | medium |
|
|
37
|
+
* | 3 cross-module | import 表命中(非 star) | medium |
|
|
38
|
+
* | 3 cross-module(import \*)| 通配 import | low |
|
|
39
|
+
* | 4 super MRO | super() 且 ≤8 层 MRO 命中 | low |
|
|
40
|
+
* | 4 unresolved | dunder / decorator / 全部 fallthrough | low |
|
|
41
|
+
* | dynamic call | mapper 抽取层 skip,resolver 兜底 null | null(skip)|
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveCalls(callSites: ReadonlyArray<CallSiteWithFile>, codeSkeletons: ReadonlyMap<string, CodeSkeleton>): UnifiedEdge[];
|
|
44
|
+
interface ImportInfo {
|
|
45
|
+
/** 别名(含 default / namedImports / 通配 *)→ 解析后的 target 文件路径或 null */
|
|
46
|
+
aliasToTarget: ReadonlyMap<string, string | null>;
|
|
47
|
+
/** 哪些 target 文件被 import * 通配(confidence: low 兜底标记)*/
|
|
48
|
+
starImportTargets: ReadonlySet<string>;
|
|
49
|
+
}
|
|
50
|
+
export declare function buildModuleSymbolIndex(codeSkeletons: ReadonlyMap<string, CodeSkeleton>): Map<string, Set<string>>;
|
|
51
|
+
export declare function buildClassMemberIndex(codeSkeletons: ReadonlyMap<string, CodeSkeleton>): Map<string, Set<string>>;
|
|
52
|
+
export declare function buildImportIndex(codeSkeletons: ReadonlyMap<string, CodeSkeleton>): Map<string, ImportInfo>;
|
|
53
|
+
export declare function buildClassMroIndex(codeSkeletons: ReadonlyMap<string, CodeSkeleton>): Map<string, string[]>;
|
|
54
|
+
/**
|
|
55
|
+
* 从 callerContext 字符串提取 className。
|
|
56
|
+
*
|
|
57
|
+
* 约定格式:
|
|
58
|
+
* - "ClassName.method" → "ClassName"
|
|
59
|
+
* - "method" / 无点号 → undefined(顶层函数)
|
|
60
|
+
* - "Outer.Inner.method" → "Inner"(取最后一个点之前的段)
|
|
61
|
+
*/
|
|
62
|
+
export declare function extractClassName(callerContext: string | undefined): string | undefined;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=call-resolver.d.ts.map
|