openlore 2.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 +268 -0
- package/dist/api/analyze.d.ts +17 -0
- package/dist/api/analyze.d.ts.map +1 -0
- package/dist/api/analyze.js +143 -0
- package/dist/api/analyze.js.map +1 -0
- package/dist/api/audit.d.ts +10 -0
- package/dist/api/audit.d.ts.map +1 -0
- package/dist/api/audit.js +117 -0
- package/dist/api/audit.js.map +1 -0
- package/dist/api/decisions.d.ts +55 -0
- package/dist/api/decisions.d.ts.map +1 -0
- package/dist/api/decisions.js +157 -0
- package/dist/api/decisions.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 +152 -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 +259 -0
- package/dist/api/generate.js.map +1 -0
- package/dist/api/index.d.ts +41 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +34 -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 +83 -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 +312 -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 +137 -0
- package/dist/api/specs.js.map +1 -0
- package/dist/api/types.d.ts +201 -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 +30 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +683 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +9 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +98 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/decisions.d.ts +16 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +864 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/digest.d.ts +9 -0
- package/dist/cli/commands/digest.d.ts.map +1 -0
- package/dist/cli/commands/digest.js +61 -0
- package/dist/cli/commands/digest.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +9 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +398 -0
- package/dist/cli/commands/doctor.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 +550 -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 +565 -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 +173 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +2235 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +1384 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/refresh-stories.d.ts +10 -0
- package/dist/cli/commands/refresh-stories.d.ts.map +1 -0
- package/dist/cli/commands/refresh-stories.js +314 -0
- package/dist/cli/commands/refresh-stories.js.map +1 -0
- package/dist/cli/commands/run.d.ts +9 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +459 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +19 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +355 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/test.d.ts +22 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +180 -0
- package/dist/cli/commands/test.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 +383 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/commands/view.d.ts +13 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +547 -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 +118 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/tui-approval.d.ts +11 -0
- package/dist/cli/tui-approval.d.ts.map +1 -0
- package/dist/cli/tui-approval.js +129 -0
- package/dist/cli/tui-approval.js.map +1 -0
- package/dist/constants.d.ts +314 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +382 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/analyzer/ai-config-generator.d.ts +54 -0
- package/dist/core/analyzer/ai-config-generator.d.ts.map +1 -0
- package/dist/core/analyzer/ai-config-generator.js +98 -0
- package/dist/core/analyzer/ai-config-generator.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 +261 -0
- package/dist/core/analyzer/artifact-generator.d.ts.map +1 -0
- package/dist/core/analyzer/artifact-generator.js +909 -0
- package/dist/core/analyzer/artifact-generator.js.map +1 -0
- package/dist/core/analyzer/ast-chunker.d.ts +24 -0
- package/dist/core/analyzer/ast-chunker.d.ts.map +1 -0
- package/dist/core/analyzer/ast-chunker.js +198 -0
- package/dist/core/analyzer/ast-chunker.js.map +1 -0
- package/dist/core/analyzer/call-graph.d.ts +162 -0
- package/dist/core/analyzer/call-graph.d.ts.map +1 -0
- package/dist/core/analyzer/call-graph.js +2040 -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 +154 -0
- package/dist/core/analyzer/code-shaper.js.map +1 -0
- package/dist/core/analyzer/codebase-digest.d.ts +40 -0
- package/dist/core/analyzer/codebase-digest.d.ts.map +1 -0
- package/dist/core/analyzer/codebase-digest.js +195 -0
- package/dist/core/analyzer/codebase-digest.js.map +1 -0
- package/dist/core/analyzer/cpp-header-resolver.d.ts +30 -0
- package/dist/core/analyzer/cpp-header-resolver.d.ts.map +1 -0
- package/dist/core/analyzer/cpp-header-resolver.js +71 -0
- package/dist/core/analyzer/cpp-header-resolver.js.map +1 -0
- package/dist/core/analyzer/dependency-graph.d.ts +230 -0
- package/dist/core/analyzer/dependency-graph.d.ts.map +1 -0
- package/dist/core/analyzer/dependency-graph.js +752 -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 +289 -0
- package/dist/core/analyzer/duplicate-detector.js.map +1 -0
- package/dist/core/analyzer/embedding-service.d.ts +56 -0
- package/dist/core/analyzer/embedding-service.d.ts.map +1 -0
- package/dist/core/analyzer/embedding-service.js +118 -0
- package/dist/core/analyzer/embedding-service.js.map +1 -0
- package/dist/core/analyzer/env-extractor.d.ts +33 -0
- package/dist/core/analyzer/env-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/env-extractor.js +196 -0
- package/dist/core/analyzer/env-extractor.js.map +1 -0
- package/dist/core/analyzer/external-packages.d.ts +20 -0
- package/dist/core/analyzer/external-packages.d.ts.map +1 -0
- package/dist/core/analyzer/external-packages.js +175 -0
- package/dist/core/analyzer/external-packages.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 +532 -0
- package/dist/core/analyzer/file-walker.js.map +1 -0
- package/dist/core/analyzer/function-registry-trie.d.ts +21 -0
- package/dist/core/analyzer/function-registry-trie.d.ts.map +1 -0
- package/dist/core/analyzer/function-registry-trie.js +39 -0
- package/dist/core/analyzer/function-registry-trie.js.map +1 -0
- package/dist/core/analyzer/http-route-parser.d.ts +152 -0
- package/dist/core/analyzer/http-route-parser.d.ts.map +1 -0
- package/dist/core/analyzer/http-route-parser.js +971 -0
- package/dist/core/analyzer/http-route-parser.js.map +1 -0
- package/dist/core/analyzer/import-parser.d.ts +100 -0
- package/dist/core/analyzer/import-parser.d.ts.map +1 -0
- package/dist/core/analyzer/import-parser.js +952 -0
- package/dist/core/analyzer/import-parser.js.map +1 -0
- package/dist/core/analyzer/import-resolver-bridge.d.ts +25 -0
- package/dist/core/analyzer/import-resolver-bridge.d.ts.map +1 -0
- package/dist/core/analyzer/import-resolver-bridge.js +99 -0
- package/dist/core/analyzer/import-resolver-bridge.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/middleware-extractor.d.ts +29 -0
- package/dist/core/analyzer/middleware-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/middleware-extractor.js +195 -0
- package/dist/core/analyzer/middleware-extractor.js.map +1 -0
- package/dist/core/analyzer/refactor-analyzer.d.ts +83 -0
- package/dist/core/analyzer/refactor-analyzer.d.ts.map +1 -0
- package/dist/core/analyzer/refactor-analyzer.js +351 -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 +740 -0
- package/dist/core/analyzer/repository-mapper.js.map +1 -0
- package/dist/core/analyzer/schema-extractor.d.ts +41 -0
- package/dist/core/analyzer/schema-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/schema-extractor.js +229 -0
- package/dist/core/analyzer/schema-extractor.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 +675 -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/spec-snapshot-generator.d.ts +17 -0
- package/dist/core/analyzer/spec-snapshot-generator.d.ts.map +1 -0
- package/dist/core/analyzer/spec-snapshot-generator.js +201 -0
- package/dist/core/analyzer/spec-snapshot-generator.js.map +1 -0
- package/dist/core/analyzer/spec-vector-index.d.ts +68 -0
- package/dist/core/analyzer/spec-vector-index.d.ts.map +1 -0
- package/dist/core/analyzer/spec-vector-index.js +340 -0
- package/dist/core/analyzer/spec-vector-index.js.map +1 -0
- package/dist/core/analyzer/subgraph-extractor.d.ts +51 -0
- package/dist/core/analyzer/subgraph-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/subgraph-extractor.js +147 -0
- package/dist/core/analyzer/subgraph-extractor.js.map +1 -0
- package/dist/core/analyzer/type-inference-engine.d.ts +23 -0
- package/dist/core/analyzer/type-inference-engine.d.ts.map +1 -0
- package/dist/core/analyzer/type-inference-engine.js +130 -0
- package/dist/core/analyzer/type-inference-engine.js.map +1 -0
- package/dist/core/analyzer/ui-component-extractor.d.ts +43 -0
- package/dist/core/analyzer/ui-component-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/ui-component-extractor.js +245 -0
- package/dist/core/analyzer/ui-component-extractor.js.map +1 -0
- package/dist/core/analyzer/unified-search.d.ts +116 -0
- package/dist/core/analyzer/unified-search.d.ts.map +1 -0
- package/dist/core/analyzer/unified-search.js +231 -0
- package/dist/core/analyzer/unified-search.js.map +1 -0
- package/dist/core/analyzer/vector-index.d.ts +92 -0
- package/dist/core/analyzer/vector-index.d.ts.map +1 -0
- package/dist/core/analyzer/vector-index.js +451 -0
- package/dist/core/analyzer/vector-index.js.map +1 -0
- package/dist/core/decisions/consolidator.d.ts +14 -0
- package/dist/core/decisions/consolidator.d.ts.map +1 -0
- package/dist/core/decisions/consolidator.js +169 -0
- package/dist/core/decisions/consolidator.js.map +1 -0
- package/dist/core/decisions/extractor.d.ts +26 -0
- package/dist/core/decisions/extractor.d.ts.map +1 -0
- package/dist/core/decisions/extractor.js +156 -0
- package/dist/core/decisions/extractor.js.map +1 -0
- package/dist/core/decisions/index.d.ts +19 -0
- package/dist/core/decisions/index.d.ts.map +1 -0
- package/dist/core/decisions/index.js +16 -0
- package/dist/core/decisions/index.js.map +1 -0
- package/dist/core/decisions/store.d.ts +36 -0
- package/dist/core/decisions/store.d.ts.map +1 -0
- package/dist/core/decisions/store.js +109 -0
- package/dist/core/decisions/store.js.map +1 -0
- package/dist/core/decisions/syncer.d.ts +27 -0
- package/dist/core/decisions/syncer.d.ts.map +1 -0
- package/dist/core/decisions/syncer.js +214 -0
- package/dist/core/decisions/syncer.js.map +1 -0
- package/dist/core/decisions/verifier.d.ts +20 -0
- package/dist/core/decisions/verifier.d.ts.map +1 -0
- package/dist/core/decisions/verifier.js +115 -0
- package/dist/core/decisions/verifier.js.map +1 -0
- package/dist/core/digest/digest-generator.d.ts +29 -0
- package/dist/core/digest/digest-generator.d.ts.map +1 -0
- package/dist/core/digest/digest-generator.js +181 -0
- package/dist/core/digest/digest-generator.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 +598 -0
- package/dist/core/drift/drift-detector.js.map +1 -0
- package/dist/core/drift/git-diff.d.ts +60 -0
- package/dist/core/drift/git-diff.d.ts.map +1 -0
- package/dist/core/drift/git-diff.js +383 -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/drift/test-suggester.d.ts +18 -0
- package/dist/core/drift/test-suggester.d.ts.map +1 -0
- package/dist/core/drift/test-suggester.js +107 -0
- package/dist/core/drift/test-suggester.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 +240 -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 +524 -0
- package/dist/core/generator/openspec-compat.js.map +1 -0
- package/dist/core/generator/openspec-format-generator.d.ts +131 -0
- package/dist/core/generator/openspec-format-generator.d.ts.map +1 -0
- package/dist/core/generator/openspec-format-generator.js +963 -0
- package/dist/core/generator/openspec-format-generator.js.map +1 -0
- package/dist/core/generator/openspec-writer.d.ts +130 -0
- package/dist/core/generator/openspec-writer.d.ts.map +1 -0
- package/dist/core/generator/openspec-writer.js +404 -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/rag-manifest-generator.d.ts +37 -0
- package/dist/core/generator/rag-manifest-generator.d.ts.map +1 -0
- package/dist/core/generator/rag-manifest-generator.js +134 -0
- package/dist/core/generator/rag-manifest-generator.js.map +1 -0
- package/dist/core/generator/schemas.d.ts +365 -0
- package/dist/core/generator/schemas.d.ts.map +1 -0
- package/dist/core/generator/schemas.js +190 -0
- package/dist/core/generator/schemas.js.map +1 -0
- package/dist/core/generator/spec-pipeline.d.ts +123 -0
- package/dist/core/generator/spec-pipeline.d.ts.map +1 -0
- package/dist/core/generator/spec-pipeline.js +699 -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 +171 -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 +74 -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 +85 -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 +72 -0
- package/dist/core/generator/stages/stage4-api.js.map +1 -0
- package/dist/core/generator/stages/stage5-architecture.d.ts +11 -0
- package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -0
- package/dist/core/generator/stages/stage5-architecture.js +75 -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 +47 -0
- package/dist/core/generator/stages/stage6-adr.js.map +1 -0
- package/dist/core/services/chat-agent.d.ts +50 -0
- package/dist/core/services/chat-agent.d.ts.map +1 -0
- package/dist/core/services/chat-agent.js +369 -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 +494 -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 +149 -0
- package/dist/core/services/config-manager.js.map +1 -0
- package/dist/core/services/edge-store.d.ts +57 -0
- package/dist/core/services/edge-store.d.ts.map +1 -0
- package/dist/core/services/edge-store.js +419 -0
- package/dist/core/services/edge-store.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 +95 -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 +379 -0
- package/dist/core/services/llm-service.d.ts.map +1 -0
- package/dist/core/services/llm-service.js +1553 -0
- package/dist/core/services/llm-service.js.map +1 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts +127 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/analysis.js +1185 -0
- package/dist/core/services/mcp-handlers/analysis.js.map +1 -0
- package/dist/core/services/mcp-handlers/change.d.ts +14 -0
- package/dist/core/services/mcp-handlers/change.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/change.js +416 -0
- package/dist/core/services/mcp-handlers/change.js.map +1 -0
- package/dist/core/services/mcp-handlers/decisions.d.ts +16 -0
- package/dist/core/services/mcp-handlers/decisions.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/decisions.js +239 -0
- package/dist/core/services/mcp-handlers/decisions.js.map +1 -0
- package/dist/core/services/mcp-handlers/graph.d.ts +94 -0
- package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/graph.js +693 -0
- package/dist/core/services/mcp-handlers/graph.js.map +1 -0
- package/dist/core/services/mcp-handlers/orient.d.ts +17 -0
- package/dist/core/services/mcp-handlers/orient.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/orient.js +357 -0
- package/dist/core/services/mcp-handlers/orient.js.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts +66 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.js +432 -0
- package/dist/core/services/mcp-handlers/semantic.js.map +1 -0
- package/dist/core/services/mcp-handlers/utils.d.ts +85 -0
- package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/utils.js +262 -0
- package/dist/core/services/mcp-handlers/utils.js.map +1 -0
- package/dist/core/services/mcp-watcher.d.ts +41 -0
- package/dist/core/services/mcp-watcher.d.ts.map +1 -0
- package/dist/core/services/mcp-watcher.js +254 -0
- package/dist/core/services/mcp-watcher.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 +100 -0
- package/dist/core/services/project-detector.js.map +1 -0
- package/dist/core/test-generator/coverage-analyzer.d.ts +27 -0
- package/dist/core/test-generator/coverage-analyzer.d.ts.map +1 -0
- package/dist/core/test-generator/coverage-analyzer.js +285 -0
- package/dist/core/test-generator/coverage-analyzer.js.map +1 -0
- package/dist/core/test-generator/framework-detector.d.ts +17 -0
- package/dist/core/test-generator/framework-detector.d.ts.map +1 -0
- package/dist/core/test-generator/framework-detector.js +65 -0
- package/dist/core/test-generator/framework-detector.js.map +1 -0
- package/dist/core/test-generator/index.d.ts +14 -0
- package/dist/core/test-generator/index.d.ts.map +1 -0
- package/dist/core/test-generator/index.js +11 -0
- package/dist/core/test-generator/index.js.map +1 -0
- package/dist/core/test-generator/renderers/catch2.d.ts +8 -0
- package/dist/core/test-generator/renderers/catch2.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/catch2.js +47 -0
- package/dist/core/test-generator/renderers/catch2.js.map +1 -0
- package/dist/core/test-generator/renderers/gtest.d.ts +8 -0
- package/dist/core/test-generator/renderers/gtest.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/gtest.js +45 -0
- package/dist/core/test-generator/renderers/gtest.js.map +1 -0
- package/dist/core/test-generator/renderers/index.d.ts +20 -0
- package/dist/core/test-generator/renderers/index.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/index.js +35 -0
- package/dist/core/test-generator/renderers/index.js.map +1 -0
- package/dist/core/test-generator/renderers/playwright.d.ts +8 -0
- package/dist/core/test-generator/renderers/playwright.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/playwright.js +44 -0
- package/dist/core/test-generator/renderers/playwright.js.map +1 -0
- package/dist/core/test-generator/renderers/pytest.d.ts +8 -0
- package/dist/core/test-generator/renderers/pytest.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/pytest.js +44 -0
- package/dist/core/test-generator/renderers/pytest.js.map +1 -0
- package/dist/core/test-generator/renderers/shared.d.ts +21 -0
- package/dist/core/test-generator/renderers/shared.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/shared.js +56 -0
- package/dist/core/test-generator/renderers/shared.js.map +1 -0
- package/dist/core/test-generator/renderers/vitest.d.ts +8 -0
- package/dist/core/test-generator/renderers/vitest.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/vitest.js +52 -0
- package/dist/core/test-generator/renderers/vitest.js.map +1 -0
- package/dist/core/test-generator/scenario-parser.d.ts +33 -0
- package/dist/core/test-generator/scenario-parser.d.ts.map +1 -0
- package/dist/core/test-generator/scenario-parser.js +244 -0
- package/dist/core/test-generator/scenario-parser.js.map +1 -0
- package/dist/core/test-generator/test-generator.d.ts +30 -0
- package/dist/core/test-generator/test-generator.d.ts.map +1 -0
- package/dist/core/test-generator/test-generator.js +174 -0
- package/dist/core/test-generator/test-generator.js.map +1 -0
- package/dist/core/test-generator/test-writer.d.ts +25 -0
- package/dist/core/test-generator/test-writer.d.ts.map +1 -0
- package/dist/core/test-generator/test-writer.js +128 -0
- package/dist/core/test-generator/test-writer.js.map +1 -0
- package/dist/core/test-generator/then-matchers.d.ts +35 -0
- package/dist/core/test-generator/then-matchers.d.ts.map +1 -0
- package/dist/core/test-generator/then-matchers.js +211 -0
- package/dist/core/test-generator/then-matchers.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 +293 -0
- package/dist/core/verifier/verification-engine.d.ts.map +1 -0
- package/dist/core/verifier/verification-engine.js +919 -0
- package/dist/core/verifier/verification-engine.js.map +1 -0
- package/dist/types/index.d.ts +368 -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 +167 -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/types/test-generator.d.ts +103 -0
- package/dist/types/test-generator.d.ts.map +1 -0
- package/dist/types/test-generator.js +17 -0
- package/dist/types/test-generator.js.map +1 -0
- package/dist/utils/command-helpers.d.ts +68 -0
- package/dist/utils/command-helpers.d.ts.map +1 -0
- package/dist/utils/command-helpers.js +150 -0
- package/dist/utils/command-helpers.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 +129 -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 +342 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/misc.d.ts +10 -0
- package/dist/utils/misc.d.ts.map +1 -0
- package/dist/utils/misc.js +21 -0
- package/dist/utils/misc.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 +283 -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 +238 -0
- package/dist/utils/shutdown.js.map +1 -0
- package/examples/bmad/README.md +113 -0
- package/examples/bmad/agents/architect.md +226 -0
- package/examples/bmad/agents/dev-brownfield.md +69 -0
- package/examples/bmad/setup/architect.customize.yaml +14 -0
- package/examples/bmad/tasks/implement-story.md +254 -0
- package/examples/bmad/tasks/onboarding.md +169 -0
- package/examples/bmad/tasks/refactor.md +178 -0
- package/examples/bmad/tasks/sprint-planning.md +168 -0
- package/examples/bmad/templates/story.md +108 -0
- package/examples/cline-workflows/openlore-analyze-codebase.md +101 -0
- package/examples/cline-workflows/openlore-check-spec-drift.md +102 -0
- package/examples/cline-workflows/openlore-execute-refactor.md +212 -0
- package/examples/cline-workflows/openlore-implement-feature.md +266 -0
- package/examples/cline-workflows/openlore-plan-refactor.md +279 -0
- package/examples/cline-workflows/openlore-refactor-codebase.md +16 -0
- package/examples/cline-workflows/openlore-write-tests.md +177 -0
- package/examples/drift-demo/openspec/config.yaml +14 -0
- package/examples/drift-demo/openspec/specs/architecture/spec.md +30 -0
- package/examples/drift-demo/openspec/specs/auth/spec.md +71 -0
- package/examples/drift-demo/openspec/specs/database/spec.md +33 -0
- package/examples/drift-demo/openspec/specs/overview/spec.md +20 -0
- package/examples/drift-demo/openspec/specs/projects/spec.md +55 -0
- package/examples/drift-demo/openspec/specs/tasks/spec.md +78 -0
- package/examples/drift-demo/package.json +21 -0
- package/examples/drift-demo/src/auth/auth-middleware.ts +30 -0
- package/examples/drift-demo/src/auth/auth-routes.ts +29 -0
- package/examples/drift-demo/src/auth/auth-service.ts +45 -0
- package/examples/drift-demo/src/database/connection.ts +27 -0
- package/examples/drift-demo/src/index.ts +16 -0
- package/examples/drift-demo/src/projects/project-model.ts +15 -0
- package/examples/drift-demo/src/projects/project-service.ts +34 -0
- package/examples/drift-demo/src/tasks/task-model.ts +37 -0
- package/examples/drift-demo/src/tasks/task-routes.ts +53 -0
- package/examples/drift-demo/src/tasks/task-service.ts +60 -0
- package/examples/drift-demo/src/utils/validation.ts +11 -0
- package/examples/drift-demo/tests/auth.test.ts +4 -0
- package/examples/drift-demo/tests/tasks.test.ts +4 -0
- package/examples/drift-demo/tsconfig.json +10 -0
- package/examples/drift-test/run-drift-test.sh +1087 -0
- package/examples/gsd/README.md +119 -0
- package/examples/gsd/commands/gsd/openlore-drift.md +111 -0
- package/examples/gsd/commands/gsd/openlore-orient.md +191 -0
- package/examples/mistral-vibe/README.md +101 -0
- package/examples/mistral-vibe/antipatterns-template.md +18 -0
- package/examples/mistral-vibe/skills/openlore-analyze-codebase/SKILL.md +124 -0
- package/examples/mistral-vibe/skills/openlore-brainstorm/SKILL.md +379 -0
- package/examples/mistral-vibe/skills/openlore-debug/SKILL.md +330 -0
- package/examples/mistral-vibe/skills/openlore-execute-refactor/SKILL.md +291 -0
- package/examples/mistral-vibe/skills/openlore-generate/SKILL.md +245 -0
- package/examples/mistral-vibe/skills/openlore-implement-story/SKILL.md +326 -0
- package/examples/mistral-vibe/skills/openlore-plan-refactor/SKILL.md +365 -0
- package/examples/mistral-vibe/skills/openlore-review-changes/SKILL.md +128 -0
- package/examples/mistral-vibe/skills/openlore-write-tests/SKILL.md +261 -0
- package/examples/opencode/agent-guard.ts +170 -0
- package/examples/opencode/plugins/anti-laziness.ts +202 -0
- package/examples/opencode/plugins/lib/openlore-context-injector-helpers.ts +116 -0
- package/examples/opencode/plugins/lib/openlore-decision-extractor-helpers.ts +65 -0
- package/examples/opencode/plugins/openlore-context-injector.test.ts +211 -0
- package/examples/opencode/plugins/openlore-context-injector.ts +165 -0
- package/examples/opencode/plugins/openlore-decision-extractor.test.ts +131 -0
- package/examples/opencode/plugins/openlore-decision-extractor.ts +322 -0
- package/examples/opencode/plugins/openlore-enforcer.ts +227 -0
- package/examples/opencode/prompts/sisyphus-sdd.md +150 -0
- package/examples/opencode-skills/openlore-analyze-codebase/SKILL.md +101 -0
- package/examples/opencode-skills/openlore-brainstorm/SKILL.md +354 -0
- package/examples/opencode-skills/openlore-debug/SKILL.md +291 -0
- package/examples/opencode-skills/openlore-execute-refactor/SKILL.md +241 -0
- package/examples/opencode-skills/openlore-generate/SKILL.md +236 -0
- package/examples/opencode-skills/openlore-implement-story/SKILL.md +251 -0
- package/examples/opencode-skills/openlore-plan-refactor/SKILL.md +298 -0
- package/examples/opencode-skills/openlore-review-changes/SKILL.md +134 -0
- package/examples/opencode-skills/openlore-write-tests/SKILL.md +230 -0
- package/examples/openspec-analysis/README.md +59 -0
- package/examples/openspec-analysis/SUMMARY.md +72 -0
- package/examples/openspec-analysis/config.json +16 -0
- package/examples/openspec-analysis/dependencies.mermaid +35 -0
- package/examples/openspec-analysis/dependency-graph.json +12116 -0
- package/examples/openspec-analysis/llm-context.json +119 -0
- package/examples/openspec-analysis/repo-structure.json +871 -0
- package/examples/openspec-cli/README.md +67 -0
- package/examples/openspec-cli/openspec/config.yaml +26 -0
- package/examples/openspec-cli/openspec/specs/architecture/spec.md +178 -0
- package/examples/openspec-cli/openspec/specs/artifact-graph/spec.md +143 -0
- package/examples/openspec-cli/openspec/specs/cli/spec.md +138 -0
- package/examples/openspec-cli/openspec/specs/overview/spec.md +60 -0
- package/examples/openspec-cli/openspec/specs/parsing/spec.md +123 -0
- package/examples/openspec-cli/openspec/specs/validation/spec.md +108 -0
- package/examples/spec-kit/README.md +104 -0
- package/examples/spec-kit/commands/drift.md +87 -0
- package/examples/spec-kit/commands/orient.md +138 -0
- package/examples/spec-kit/extension.yml +54 -0
- package/package.json +125 -0
- package/src/viewer/InteractiveGraphViewer.jsx +1600 -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 +450 -0
- package/src/viewer/components/ClassGraph.jsx +782 -0
- package/src/viewer/components/ClusterGraph.jsx +469 -0
- package/src/viewer/components/FilterBar.jsx +179 -0
- package/src/viewer/components/FlatGraph.jsx +282 -0
- package/src/viewer/components/MicroComponents.jsx +85 -0
- package/src/viewer/hooks/usePanZoom.js +79 -0
- package/src/viewer/utils/constants.js +64 -0
- package/src/viewer/utils/graph-helpers.js +303 -0
- package/src/viewer/utils/graph-helpers.test.ts +39 -0
- package/src/viewer/utils/themes.js +206 -0
- package/stubs/tree-sitter-cli-stub/package.json +6 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management service
|
|
3
|
+
*
|
|
4
|
+
* Handles reading/writing .openlore/config.json and openspec/config.yaml
|
|
5
|
+
*/
|
|
6
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import YAML from 'yaml';
|
|
9
|
+
import { logger } from '../../utils/logger.js';
|
|
10
|
+
import { DEFAULT_MAX_FILES, DEFAULT_ANTHROPIC_MODEL, OPENLORE_DIR, OPENLORE_CONFIG_FILENAME, OPENLORE_CONFIG_REL_PATH, OPENSPEC_CONFIG_FILENAME, } from '../../constants.js';
|
|
11
|
+
import { fileExists } from '../../utils/command-helpers.js';
|
|
12
|
+
/**
|
|
13
|
+
* Ensure directory exists, creating it if necessary
|
|
14
|
+
*/
|
|
15
|
+
async function ensureDir(dirPath) {
|
|
16
|
+
try {
|
|
17
|
+
await mkdir(dirPath, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
// Ignore if directory already exists
|
|
21
|
+
if (error.code !== 'EEXIST') {
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get default openlore configuration
|
|
28
|
+
*/
|
|
29
|
+
export function getDefaultConfig(projectType, openspecPath) {
|
|
30
|
+
return {
|
|
31
|
+
version: '1.0.0',
|
|
32
|
+
projectType,
|
|
33
|
+
openspecPath,
|
|
34
|
+
analysis: {
|
|
35
|
+
maxFiles: DEFAULT_MAX_FILES,
|
|
36
|
+
includePatterns: [],
|
|
37
|
+
excludePatterns: [],
|
|
38
|
+
},
|
|
39
|
+
generation: {
|
|
40
|
+
model: DEFAULT_ANTHROPIC_MODEL,
|
|
41
|
+
domains: 'auto',
|
|
42
|
+
},
|
|
43
|
+
createdAt: new Date().toISOString(),
|
|
44
|
+
lastRun: null,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Read openlore configuration from .openlore/config.json
|
|
49
|
+
*/
|
|
50
|
+
export async function readOpenLoreConfig(rootPath) {
|
|
51
|
+
const configPath = join(rootPath, OPENLORE_DIR, OPENLORE_CONFIG_FILENAME);
|
|
52
|
+
let content;
|
|
53
|
+
try {
|
|
54
|
+
content = await readFile(configPath, 'utf-8');
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null; // File doesn't exist — normal case before init
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
return JSON.parse(content);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
logger.warning(`Failed to parse ${configPath}: ${err.message}`);
|
|
64
|
+
logger.warning(`Delete ${OPENLORE_CONFIG_REL_PATH} and run 'openlore init' to recreate it.`);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Write openlore configuration to .openlore/config.json
|
|
70
|
+
*/
|
|
71
|
+
export async function writeOpenLoreConfig(rootPath, config) {
|
|
72
|
+
const configDir = join(rootPath, OPENLORE_DIR);
|
|
73
|
+
const configPath = join(configDir, OPENLORE_CONFIG_FILENAME);
|
|
74
|
+
await ensureDir(configDir);
|
|
75
|
+
await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if openlore config already exists
|
|
79
|
+
*/
|
|
80
|
+
export async function openloreConfigExists(rootPath) {
|
|
81
|
+
return fileExists(join(rootPath, OPENLORE_DIR, OPENLORE_CONFIG_FILENAME));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Read OpenSpec config.yaml if it exists
|
|
85
|
+
*/
|
|
86
|
+
export async function readOpenSpecConfig(openspecPath) {
|
|
87
|
+
const configPath = join(openspecPath, OPENSPEC_CONFIG_FILENAME);
|
|
88
|
+
let content;
|
|
89
|
+
try {
|
|
90
|
+
content = await readFile(configPath, 'utf-8');
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null; // File doesn't exist — normal case before generate
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
return YAML.parse(content);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
logger.warning(`Failed to parse ${configPath}: ${err.message}`);
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Write OpenSpec config.yaml
|
|
105
|
+
*/
|
|
106
|
+
export async function writeOpenSpecConfig(openspecPath, config) {
|
|
107
|
+
const configPath = join(openspecPath, OPENSPEC_CONFIG_FILENAME);
|
|
108
|
+
await ensureDir(openspecPath);
|
|
109
|
+
await writeFile(configPath, YAML.stringify(config), 'utf-8');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if openspec directory exists
|
|
113
|
+
*/
|
|
114
|
+
export async function openspecDirExists(openspecPath) {
|
|
115
|
+
return fileExists(openspecPath);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if openspec/config.yaml exists
|
|
119
|
+
*/
|
|
120
|
+
export async function openspecConfigExists(openspecPath) {
|
|
121
|
+
return fileExists(join(openspecPath, OPENSPEC_CONFIG_FILENAME));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create minimal OpenSpec directory structure
|
|
125
|
+
*/
|
|
126
|
+
export async function createOpenSpecStructure(openspecPath) {
|
|
127
|
+
await ensureDir(openspecPath);
|
|
128
|
+
await ensureDir(join(openspecPath, 'specs'));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Merge existing OpenSpec config with openlore metadata
|
|
132
|
+
*/
|
|
133
|
+
export function mergeOpenSpecConfig(existing, openloreMeta) {
|
|
134
|
+
if (existing) {
|
|
135
|
+
return {
|
|
136
|
+
...existing,
|
|
137
|
+
'openlore': {
|
|
138
|
+
...existing['openlore'],
|
|
139
|
+
...openloreMeta,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
schema: 'spec-driven',
|
|
145
|
+
context: '',
|
|
146
|
+
'openlore': openloreMeta,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/core/services/config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { CallEdge, FunctionNode, ClassNode, InheritanceEdge } from '../analyzer/call-graph.js';
|
|
2
|
+
export declare class EdgeStore {
|
|
3
|
+
private readonly db;
|
|
4
|
+
private constructor();
|
|
5
|
+
private initSchema;
|
|
6
|
+
/** All distinct files that call into calleeFile (reverse lookup before delete). */
|
|
7
|
+
getCallerFiles(calleeFile: string): string[];
|
|
8
|
+
/** All outgoing + incoming edges touching a file. */
|
|
9
|
+
getEdgesForFile(file: string): {
|
|
10
|
+
outgoing: CallEdge[];
|
|
11
|
+
incoming: CallEdge[];
|
|
12
|
+
};
|
|
13
|
+
/** Outgoing edges from a node ID (its direct callees). */
|
|
14
|
+
getCallees(nodeId: string): CallEdge[];
|
|
15
|
+
/** Incoming edges to a node ID (its direct callers). */
|
|
16
|
+
getCallers(nodeId: string): CallEdge[];
|
|
17
|
+
/** Batch: outgoing edges for a set of caller IDs — one query instead of N. */
|
|
18
|
+
getCalleesForIds(callerIds: string[]): CallEdge[];
|
|
19
|
+
/** Batch: incoming edges for a set of callee IDs — one query instead of N. */
|
|
20
|
+
getCallersForIds(calleeIds: string[]): CallEdge[];
|
|
21
|
+
/** Remove all edges where this file is caller or callee. */
|
|
22
|
+
deleteEdgesForFile(file: string): void;
|
|
23
|
+
/** Remove only outgoing edges from this file (incoming edges remain). */
|
|
24
|
+
deleteOutgoingEdgesForFile(file: string): void;
|
|
25
|
+
/** Bulk-insert edges in a single transaction. */
|
|
26
|
+
insertEdges(edges: CallEdge[]): void;
|
|
27
|
+
/** Bulk-insert inheritance edges in a single transaction. */
|
|
28
|
+
insertInheritanceEdges(edges: InheritanceEdge[]): void;
|
|
29
|
+
getNode(id: string): FunctionNode | null;
|
|
30
|
+
getNodesForFile(file: string): FunctionNode[];
|
|
31
|
+
/** Case-insensitive substring search on node name. FTS5 trigram for ≥3 chars, LIKE fallback otherwise. */
|
|
32
|
+
searchNodes(pattern: string, limit?: number): FunctionNode[];
|
|
33
|
+
getHubs(limit?: number): FunctionNode[];
|
|
34
|
+
getEntryPoints(limit?: number): FunctionNode[];
|
|
35
|
+
countNodes(): number;
|
|
36
|
+
deleteNodesForFile(file: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Bulk-insert nodes. hubIds/entryIds are optional sets used to mark flags;
|
|
39
|
+
* omit them during incremental watcher updates (flags preserved from last analyze).
|
|
40
|
+
*/
|
|
41
|
+
insertNodes(nodes: FunctionNode[], hubIds?: Set<string>, entryIds?: Set<string>): void;
|
|
42
|
+
getClass(id: string): ClassNode | null;
|
|
43
|
+
getClassesForFile(file: string): ClassNode[];
|
|
44
|
+
deleteClassesForFile(file: string): void;
|
|
45
|
+
insertClasses(classes: ClassNode[]): void;
|
|
46
|
+
getFileHash(filePath: string): string | null;
|
|
47
|
+
setFileHash(filePath: string, hash: string): void;
|
|
48
|
+
/** Drop all graph data — used by full analyze rebuild. */
|
|
49
|
+
clearAll(): void;
|
|
50
|
+
/** Run fn inside a single SQLite transaction. */
|
|
51
|
+
transaction(fn: () => void): void;
|
|
52
|
+
close(): void;
|
|
53
|
+
static open(dbPath: string): EdgeStore;
|
|
54
|
+
static exists(outputDir: string): boolean;
|
|
55
|
+
static dbPath(outputDir: string): string;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=edge-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-store.d.ts","sourceRoot":"","sources":["../../../src/core/services/edge-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AA6CpG,qBAAa,SAAS;IACA,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAIP,OAAO,CAAC,UAAU;IA4FlB,mFAAmF;IACnF,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAO5C,qDAAqD;IACrD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAAC,QAAQ,EAAE,QAAQ,EAAE,CAAA;KAAE;IAU7E,0DAA0D;IAC1D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAMtC,wDAAwD;IACxD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAMtC,8EAA8E;IAC9E,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE;IAQjD,8EAA8E;IAC9E,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE;IAUjD,4DAA4D;IAC5D,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAItC,yEAAyE;IACzE,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9C,iDAAiD;IACjD,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAwBpC,6DAA6D;IAC7D,sBAAsB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI;IAatD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKxC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE;IAM7C,0GAA0G;IAC1G,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,YAAY,EAAE;IAoBxD,OAAO,CAAC,KAAK,SAAK,GAAG,YAAY,EAAE;IAQnC,cAAc,CAAC,KAAK,SAAK,GAAG,YAAY,EAAE;IAQ1C,UAAU,IAAI,MAAM;IAOpB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWtC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;IAqCtF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKtC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;IAQ5C,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IA2BzC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO5C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQjD,0DAA0D;IAC1D,QAAQ,IAAI,IAAI;IAIhB,iDAAiD;IACjD,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC,KAAK,IAAI,IAAI;IAMb,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAItC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIzC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAGzC"}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
4
|
+
import { ARTIFACT_CALL_GRAPH_DB } from '../../constants.js';
|
|
5
|
+
function openDatabase(dbPath) {
|
|
6
|
+
const db = new DatabaseSync(dbPath);
|
|
7
|
+
db.exec('PRAGMA journal_mode = WAL');
|
|
8
|
+
db.exec('PRAGMA synchronous = NORMAL');
|
|
9
|
+
return db;
|
|
10
|
+
}
|
|
11
|
+
// Track nesting depth per db instance to support nested transactions via SAVEPOINT
|
|
12
|
+
const txDepth = new WeakMap();
|
|
13
|
+
function runTransaction(db, fn) {
|
|
14
|
+
const depth = txDepth.get(db) ?? 0;
|
|
15
|
+
const sp = `sp${depth}`;
|
|
16
|
+
if (depth === 0) {
|
|
17
|
+
db.exec('BEGIN');
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
db.exec(`SAVEPOINT ${sp}`);
|
|
21
|
+
}
|
|
22
|
+
txDepth.set(db, depth + 1);
|
|
23
|
+
try {
|
|
24
|
+
fn();
|
|
25
|
+
if (depth === 0) {
|
|
26
|
+
db.exec('COMMIT');
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
db.exec(`RELEASE ${sp}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (depth === 0) {
|
|
34
|
+
db.exec('ROLLBACK');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
db.exec(`ROLLBACK TO ${sp}`);
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
txDepth.set(db, depth);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Bump when schema changes. Old DBs are dropped and rebuilt on next analyze --force. */
|
|
46
|
+
const SCHEMA_VERSION = 2;
|
|
47
|
+
export class EdgeStore {
|
|
48
|
+
db;
|
|
49
|
+
constructor(db) {
|
|
50
|
+
this.db = db;
|
|
51
|
+
this.initSchema();
|
|
52
|
+
}
|
|
53
|
+
initSchema() {
|
|
54
|
+
// Version check — if schema changed, wipe and rebuild (analyze --force repopulates).
|
|
55
|
+
this.db.exec(`CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL)`);
|
|
56
|
+
const row = this.db.prepare('SELECT version FROM schema_version LIMIT 1').get();
|
|
57
|
+
if (row === undefined) {
|
|
58
|
+
this.db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(SCHEMA_VERSION);
|
|
59
|
+
}
|
|
60
|
+
else if (row.version !== SCHEMA_VERSION) {
|
|
61
|
+
this.db.exec(`
|
|
62
|
+
DROP TABLE IF EXISTS edges;
|
|
63
|
+
DROP TABLE IF EXISTS inheritance_edges;
|
|
64
|
+
DROP TABLE IF EXISTS nodes;
|
|
65
|
+
DROP TABLE IF EXISTS classes;
|
|
66
|
+
DROP TABLE IF EXISTS file_hashes;
|
|
67
|
+
DROP TABLE IF EXISTS schema_version;
|
|
68
|
+
CREATE TABLE schema_version (version INTEGER NOT NULL);
|
|
69
|
+
`);
|
|
70
|
+
this.db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(SCHEMA_VERSION);
|
|
71
|
+
}
|
|
72
|
+
this.db.exec(`
|
|
73
|
+
CREATE TABLE IF NOT EXISTS edges (
|
|
74
|
+
caller_id TEXT NOT NULL,
|
|
75
|
+
caller_file TEXT NOT NULL,
|
|
76
|
+
callee_id TEXT NOT NULL,
|
|
77
|
+
callee_file TEXT,
|
|
78
|
+
callee_name TEXT NOT NULL,
|
|
79
|
+
line INTEGER,
|
|
80
|
+
confidence TEXT,
|
|
81
|
+
kind TEXT,
|
|
82
|
+
call_type TEXT
|
|
83
|
+
);
|
|
84
|
+
CREATE INDEX IF NOT EXISTS idx_caller_id ON edges(caller_id);
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_callee_id ON edges(callee_id);
|
|
86
|
+
CREATE INDEX IF NOT EXISTS idx_caller_file ON edges(caller_file);
|
|
87
|
+
CREATE INDEX IF NOT EXISTS idx_callee_file ON edges(callee_file);
|
|
88
|
+
|
|
89
|
+
CREATE TABLE IF NOT EXISTS inheritance_edges (
|
|
90
|
+
parent_id TEXT NOT NULL,
|
|
91
|
+
child_id TEXT NOT NULL,
|
|
92
|
+
kind TEXT
|
|
93
|
+
);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_inh_parent ON inheritance_edges(parent_id);
|
|
95
|
+
CREATE INDEX IF NOT EXISTS idx_inh_child ON inheritance_edges(child_id);
|
|
96
|
+
|
|
97
|
+
CREATE TABLE IF NOT EXISTS nodes (
|
|
98
|
+
id TEXT PRIMARY KEY,
|
|
99
|
+
name TEXT NOT NULL,
|
|
100
|
+
file_path TEXT NOT NULL,
|
|
101
|
+
class_name TEXT,
|
|
102
|
+
is_async INTEGER NOT NULL DEFAULT 0,
|
|
103
|
+
language TEXT NOT NULL DEFAULT '',
|
|
104
|
+
start_index INTEGER NOT NULL DEFAULT 0,
|
|
105
|
+
end_index INTEGER NOT NULL DEFAULT 0,
|
|
106
|
+
fan_in INTEGER NOT NULL DEFAULT 0,
|
|
107
|
+
fan_out INTEGER NOT NULL DEFAULT 0,
|
|
108
|
+
docstring TEXT,
|
|
109
|
+
signature TEXT,
|
|
110
|
+
is_external INTEGER NOT NULL DEFAULT 0,
|
|
111
|
+
external_kind TEXT,
|
|
112
|
+
is_hub INTEGER NOT NULL DEFAULT 0,
|
|
113
|
+
is_entry_point INTEGER NOT NULL DEFAULT 0
|
|
114
|
+
);
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_node_file ON nodes(file_path);
|
|
116
|
+
CREATE INDEX IF NOT EXISTS idx_node_name ON nodes(name);
|
|
117
|
+
|
|
118
|
+
CREATE TABLE IF NOT EXISTS classes (
|
|
119
|
+
id TEXT PRIMARY KEY,
|
|
120
|
+
name TEXT NOT NULL,
|
|
121
|
+
file_path TEXT NOT NULL,
|
|
122
|
+
language TEXT NOT NULL DEFAULT '',
|
|
123
|
+
parent_classes TEXT NOT NULL DEFAULT '[]',
|
|
124
|
+
interfaces TEXT NOT NULL DEFAULT '[]',
|
|
125
|
+
method_ids TEXT NOT NULL DEFAULT '[]',
|
|
126
|
+
fan_in INTEGER NOT NULL DEFAULT 0,
|
|
127
|
+
fan_out INTEGER NOT NULL DEFAULT 0,
|
|
128
|
+
is_module INTEGER NOT NULL DEFAULT 0
|
|
129
|
+
);
|
|
130
|
+
CREATE INDEX IF NOT EXISTS idx_class_file ON classes(file_path);
|
|
131
|
+
CREATE INDEX IF NOT EXISTS idx_class_name ON classes(name);
|
|
132
|
+
|
|
133
|
+
CREATE TABLE IF NOT EXISTS file_hashes (
|
|
134
|
+
file_path TEXT PRIMARY KEY,
|
|
135
|
+
content_hash TEXT NOT NULL,
|
|
136
|
+
updated_at INTEGER NOT NULL
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS nodes_fts USING fts5(node_id UNINDEXED, name, tokenize='trigram');
|
|
140
|
+
`);
|
|
141
|
+
}
|
|
142
|
+
// ── Edge queries ──────────────────────────────────────────────────────────────
|
|
143
|
+
/** All distinct files that call into calleeFile (reverse lookup before delete). */
|
|
144
|
+
getCallerFiles(calleeFile) {
|
|
145
|
+
const rows = this.db
|
|
146
|
+
.prepare('SELECT DISTINCT caller_file FROM edges WHERE callee_file = ?')
|
|
147
|
+
.all(calleeFile);
|
|
148
|
+
return rows.map(r => r.caller_file);
|
|
149
|
+
}
|
|
150
|
+
/** All outgoing + incoming edges touching a file. */
|
|
151
|
+
getEdgesForFile(file) {
|
|
152
|
+
const outgoing = this.db.prepare('SELECT * FROM edges WHERE caller_file = ?').all(file).map(rawToCallEdge);
|
|
153
|
+
const incoming = this.db.prepare('SELECT * FROM edges WHERE callee_file = ?').all(file).map(rawToCallEdge);
|
|
154
|
+
return { outgoing, incoming };
|
|
155
|
+
}
|
|
156
|
+
/** Outgoing edges from a node ID (its direct callees). */
|
|
157
|
+
getCallees(nodeId) {
|
|
158
|
+
return this.db.prepare('SELECT * FROM edges WHERE caller_id = ?').all(nodeId).map(rawToCallEdge);
|
|
159
|
+
}
|
|
160
|
+
/** Incoming edges to a node ID (its direct callers). */
|
|
161
|
+
getCallers(nodeId) {
|
|
162
|
+
return this.db.prepare('SELECT * FROM edges WHERE callee_id = ?').all(nodeId).map(rawToCallEdge);
|
|
163
|
+
}
|
|
164
|
+
/** Batch: outgoing edges for a set of caller IDs — one query instead of N. */
|
|
165
|
+
getCalleesForIds(callerIds) {
|
|
166
|
+
if (callerIds.length === 0)
|
|
167
|
+
return [];
|
|
168
|
+
const placeholders = callerIds.map(() => '?').join(',');
|
|
169
|
+
return this.db.prepare(`SELECT * FROM edges WHERE caller_id IN (${placeholders})`).all(...callerIds).map(rawToCallEdge);
|
|
170
|
+
}
|
|
171
|
+
/** Batch: incoming edges for a set of callee IDs — one query instead of N. */
|
|
172
|
+
getCallersForIds(calleeIds) {
|
|
173
|
+
if (calleeIds.length === 0)
|
|
174
|
+
return [];
|
|
175
|
+
const placeholders = calleeIds.map(() => '?').join(',');
|
|
176
|
+
return this.db.prepare(`SELECT * FROM edges WHERE callee_id IN (${placeholders})`).all(...calleeIds).map(rawToCallEdge);
|
|
177
|
+
}
|
|
178
|
+
// ── Edge mutations ────────────────────────────────────────────────────────────
|
|
179
|
+
/** Remove all edges where this file is caller or callee. */
|
|
180
|
+
deleteEdgesForFile(file) {
|
|
181
|
+
this.db.prepare('DELETE FROM edges WHERE caller_file = ? OR callee_file = ?').run(file, file);
|
|
182
|
+
}
|
|
183
|
+
/** Remove only outgoing edges from this file (incoming edges remain). */
|
|
184
|
+
deleteOutgoingEdgesForFile(file) {
|
|
185
|
+
this.db.prepare('DELETE FROM edges WHERE caller_file = ?').run(file);
|
|
186
|
+
}
|
|
187
|
+
/** Bulk-insert edges in a single transaction. */
|
|
188
|
+
insertEdges(edges) {
|
|
189
|
+
const stmt = this.db.prepare(`
|
|
190
|
+
INSERT INTO edges (caller_id, caller_file, callee_id, callee_file, callee_name, line, confidence, kind, call_type)
|
|
191
|
+
VALUES (@callerId, @callerFile, @calleeId, @calleeFile, @calleeName, @line, @confidence, @kind, @callType)
|
|
192
|
+
`);
|
|
193
|
+
runTransaction(this.db, () => {
|
|
194
|
+
for (const e of edges) {
|
|
195
|
+
const callerFile = e.callerId.includes('::') ? e.callerId.split('::')[0] : e.callerId;
|
|
196
|
+
const calleeFile = e.calleeId.includes('::') ? e.calleeId.split('::')[0] : null;
|
|
197
|
+
stmt.run({
|
|
198
|
+
'@callerId': e.callerId,
|
|
199
|
+
'@callerFile': callerFile,
|
|
200
|
+
'@calleeId': e.calleeId,
|
|
201
|
+
'@calleeFile': calleeFile,
|
|
202
|
+
'@calleeName': e.calleeName,
|
|
203
|
+
'@line': e.line ?? null,
|
|
204
|
+
'@confidence': e.confidence,
|
|
205
|
+
'@kind': e.kind ?? null,
|
|
206
|
+
'@callType': e.callType ?? null,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/** Bulk-insert inheritance edges in a single transaction. */
|
|
212
|
+
insertInheritanceEdges(edges) {
|
|
213
|
+
const stmt = this.db.prepare('INSERT INTO inheritance_edges (parent_id, child_id, kind) VALUES (@parentId, @childId, @kind)');
|
|
214
|
+
runTransaction(this.db, () => {
|
|
215
|
+
for (const e of edges) {
|
|
216
|
+
stmt.run({ '@parentId': e.parentId, '@childId': e.childId, '@kind': e.kind ?? null });
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
// ── Node queries ──────────────────────────────────────────────────────────────
|
|
221
|
+
getNode(id) {
|
|
222
|
+
const row = this.db.prepare('SELECT * FROM nodes WHERE id = ?').get(id);
|
|
223
|
+
return row ? rawToFunctionNode(row) : null;
|
|
224
|
+
}
|
|
225
|
+
getNodesForFile(file) {
|
|
226
|
+
return this.db.prepare('SELECT * FROM nodes WHERE file_path = ?').all(file).map(rawToFunctionNode);
|
|
227
|
+
}
|
|
228
|
+
/** Case-insensitive substring search on node name. FTS5 trigram for ≥3 chars, LIKE fallback otherwise. */
|
|
229
|
+
searchNodes(pattern, limit = 50) {
|
|
230
|
+
if (pattern.length >= 3) {
|
|
231
|
+
return this.db
|
|
232
|
+
.prepare(`
|
|
233
|
+
SELECT n.* FROM nodes_fts f
|
|
234
|
+
JOIN nodes n ON n.id = f.node_id
|
|
235
|
+
WHERE nodes_fts MATCH ? AND n.is_external = 0
|
|
236
|
+
LIMIT ?
|
|
237
|
+
`)
|
|
238
|
+
.all(pattern, limit).map(rawToFunctionNode);
|
|
239
|
+
}
|
|
240
|
+
return this.db
|
|
241
|
+
.prepare('SELECT * FROM nodes WHERE name LIKE ? AND is_external = 0 LIMIT ?')
|
|
242
|
+
.all(`%${pattern}%`, limit).map(rawToFunctionNode);
|
|
243
|
+
}
|
|
244
|
+
getHubs(limit = 25) {
|
|
245
|
+
return this.db
|
|
246
|
+
.prepare('SELECT * FROM nodes WHERE is_hub = 1 AND is_external = 0 ORDER BY fan_in DESC LIMIT ?')
|
|
247
|
+
.all(limit).map(rawToFunctionNode);
|
|
248
|
+
}
|
|
249
|
+
getEntryPoints(limit = 50) {
|
|
250
|
+
return this.db
|
|
251
|
+
.prepare('SELECT * FROM nodes WHERE is_entry_point = 1 AND is_external = 0 ORDER BY fan_out DESC LIMIT ?')
|
|
252
|
+
.all(limit).map(rawToFunctionNode);
|
|
253
|
+
}
|
|
254
|
+
countNodes() {
|
|
255
|
+
const row = this.db.prepare('SELECT COUNT(*) as n FROM nodes WHERE is_external = 0').get();
|
|
256
|
+
return row.n;
|
|
257
|
+
}
|
|
258
|
+
// ── Node mutations ────────────────────────────────────────────────────────────
|
|
259
|
+
deleteNodesForFile(file) {
|
|
260
|
+
const ids = this.db.prepare('SELECT id FROM nodes WHERE file_path = ?').all(file).map(r => r.id);
|
|
261
|
+
this.db.prepare('DELETE FROM nodes WHERE file_path = ?').run(file);
|
|
262
|
+
if (ids.length > 0) {
|
|
263
|
+
const placeholders = ids.map(() => '?').join(',');
|
|
264
|
+
this.db.prepare(`DELETE FROM nodes_fts WHERE node_id IN (${placeholders})`).run(...ids);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Bulk-insert nodes. hubIds/entryIds are optional sets used to mark flags;
|
|
269
|
+
* omit them during incremental watcher updates (flags preserved from last analyze).
|
|
270
|
+
*/
|
|
271
|
+
insertNodes(nodes, hubIds, entryIds) {
|
|
272
|
+
const stmt = this.db.prepare(`
|
|
273
|
+
INSERT OR REPLACE INTO nodes
|
|
274
|
+
(id, name, file_path, class_name, is_async, language, start_index, end_index,
|
|
275
|
+
fan_in, fan_out, docstring, signature, is_external, external_kind, is_hub, is_entry_point)
|
|
276
|
+
VALUES
|
|
277
|
+
(@id, @name, @filePath, @className, @isAsync, @language, @startIndex, @endIndex,
|
|
278
|
+
@fanIn, @fanOut, @docstring, @signature, @isExternal, @externalKind, @isHub, @isEntryPoint)
|
|
279
|
+
`);
|
|
280
|
+
const ftsStmt = this.db.prepare('INSERT OR REPLACE INTO nodes_fts (node_id, name) VALUES (?, ?)');
|
|
281
|
+
runTransaction(this.db, () => {
|
|
282
|
+
for (const n of nodes) {
|
|
283
|
+
stmt.run({
|
|
284
|
+
'@id': n.id,
|
|
285
|
+
'@name': n.name,
|
|
286
|
+
'@filePath': n.filePath,
|
|
287
|
+
'@className': n.className ?? null,
|
|
288
|
+
'@isAsync': n.isAsync ? 1 : 0,
|
|
289
|
+
'@language': n.language,
|
|
290
|
+
'@startIndex': n.startIndex,
|
|
291
|
+
'@endIndex': n.endIndex,
|
|
292
|
+
'@fanIn': n.fanIn,
|
|
293
|
+
'@fanOut': n.fanOut,
|
|
294
|
+
'@docstring': n.docstring ?? null,
|
|
295
|
+
'@signature': n.signature ?? null,
|
|
296
|
+
'@isExternal': n.isExternal ? 1 : 0,
|
|
297
|
+
'@externalKind': n.externalKind ?? null,
|
|
298
|
+
'@isHub': hubIds ? (hubIds.has(n.id) ? 1 : 0) : 0,
|
|
299
|
+
'@isEntryPoint': entryIds ? (entryIds.has(n.id) ? 1 : 0) : 0,
|
|
300
|
+
});
|
|
301
|
+
if (!n.isExternal)
|
|
302
|
+
ftsStmt.run(n.id, n.name);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// ── Class queries ─────────────────────────────────────────────────────────────
|
|
307
|
+
getClass(id) {
|
|
308
|
+
const row = this.db.prepare('SELECT * FROM classes WHERE id = ?').get(id);
|
|
309
|
+
return row ? rawToClassNode(row) : null;
|
|
310
|
+
}
|
|
311
|
+
getClassesForFile(file) {
|
|
312
|
+
return this.db.prepare('SELECT * FROM classes WHERE file_path = ?').all(file).map(rawToClassNode);
|
|
313
|
+
}
|
|
314
|
+
// ── Class mutations ───────────────────────────────────────────────────────────
|
|
315
|
+
deleteClassesForFile(file) {
|
|
316
|
+
this.db.prepare('DELETE FROM classes WHERE file_path = ?').run(file);
|
|
317
|
+
}
|
|
318
|
+
insertClasses(classes) {
|
|
319
|
+
const stmt = this.db.prepare(`
|
|
320
|
+
INSERT OR REPLACE INTO classes
|
|
321
|
+
(id, name, file_path, language, parent_classes, interfaces, method_ids, fan_in, fan_out, is_module)
|
|
322
|
+
VALUES
|
|
323
|
+
(@id, @name, @filePath, @language, @parentClasses, @interfaces, @methodIds, @fanIn, @fanOut, @isModule)
|
|
324
|
+
`);
|
|
325
|
+
runTransaction(this.db, () => {
|
|
326
|
+
for (const c of classes) {
|
|
327
|
+
stmt.run({
|
|
328
|
+
'@id': c.id,
|
|
329
|
+
'@name': c.name,
|
|
330
|
+
'@filePath': c.filePath,
|
|
331
|
+
'@language': c.language,
|
|
332
|
+
'@parentClasses': JSON.stringify(c.parentClasses),
|
|
333
|
+
'@interfaces': JSON.stringify(c.interfaces),
|
|
334
|
+
'@methodIds': JSON.stringify(c.methodIds),
|
|
335
|
+
'@fanIn': c.fanIn,
|
|
336
|
+
'@fanOut': c.fanOut,
|
|
337
|
+
'@isModule': c.isModule ? 1 : 0,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
// ── Content-hash cache ────────────────────────────────────────────────────────
|
|
343
|
+
getFileHash(filePath) {
|
|
344
|
+
const row = this.db
|
|
345
|
+
.prepare('SELECT content_hash FROM file_hashes WHERE file_path = ?')
|
|
346
|
+
.get(filePath);
|
|
347
|
+
return row?.content_hash ?? null;
|
|
348
|
+
}
|
|
349
|
+
setFileHash(filePath, hash) {
|
|
350
|
+
this.db
|
|
351
|
+
.prepare('INSERT OR REPLACE INTO file_hashes (file_path, content_hash, updated_at) VALUES (?, ?, ?)')
|
|
352
|
+
.run(filePath, hash, Date.now());
|
|
353
|
+
}
|
|
354
|
+
/** Drop all graph data — used by full analyze rebuild. */
|
|
355
|
+
clearAll() {
|
|
356
|
+
this.db.exec('DELETE FROM edges; DELETE FROM inheritance_edges; DELETE FROM nodes; DELETE FROM classes; DELETE FROM nodes_fts; DELETE FROM file_hashes;');
|
|
357
|
+
}
|
|
358
|
+
/** Run fn inside a single SQLite transaction. */
|
|
359
|
+
transaction(fn) {
|
|
360
|
+
runTransaction(this.db, fn);
|
|
361
|
+
}
|
|
362
|
+
close() {
|
|
363
|
+
this.db.close();
|
|
364
|
+
}
|
|
365
|
+
// ── Factory ───────────────────────────────────────────────────────────────────
|
|
366
|
+
static open(dbPath) {
|
|
367
|
+
return new EdgeStore(openDatabase(dbPath));
|
|
368
|
+
}
|
|
369
|
+
static exists(outputDir) {
|
|
370
|
+
return existsSync(join(outputDir, ARTIFACT_CALL_GRAPH_DB));
|
|
371
|
+
}
|
|
372
|
+
static dbPath(outputDir) {
|
|
373
|
+
return join(outputDir, ARTIFACT_CALL_GRAPH_DB);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
function rawToCallEdge(r) {
|
|
377
|
+
return {
|
|
378
|
+
callerId: r.caller_id,
|
|
379
|
+
calleeId: r.callee_id,
|
|
380
|
+
calleeName: r.callee_name,
|
|
381
|
+
...(r.line !== null && { line: r.line }),
|
|
382
|
+
confidence: r.confidence,
|
|
383
|
+
...(r.kind && { kind: r.kind }),
|
|
384
|
+
...(r.call_type && { callType: r.call_type }),
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
function rawToFunctionNode(r) {
|
|
388
|
+
return {
|
|
389
|
+
id: r.id,
|
|
390
|
+
name: r.name,
|
|
391
|
+
filePath: r.file_path,
|
|
392
|
+
...(r.class_name && { className: r.class_name }),
|
|
393
|
+
isAsync: r.is_async === 1,
|
|
394
|
+
language: r.language,
|
|
395
|
+
startIndex: r.start_index,
|
|
396
|
+
endIndex: r.end_index,
|
|
397
|
+
fanIn: r.fan_in,
|
|
398
|
+
fanOut: r.fan_out,
|
|
399
|
+
...(r.docstring && { docstring: r.docstring }),
|
|
400
|
+
...(r.signature && { signature: r.signature }),
|
|
401
|
+
...(r.is_external && { isExternal: true }),
|
|
402
|
+
...(r.external_kind && { externalKind: r.external_kind }),
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
function rawToClassNode(r) {
|
|
406
|
+
return {
|
|
407
|
+
id: r.id,
|
|
408
|
+
name: r.name,
|
|
409
|
+
filePath: r.file_path,
|
|
410
|
+
language: r.language,
|
|
411
|
+
parentClasses: JSON.parse(r.parent_classes),
|
|
412
|
+
interfaces: JSON.parse(r.interfaces),
|
|
413
|
+
methodIds: JSON.parse(r.method_ids),
|
|
414
|
+
fanIn: r.fan_in,
|
|
415
|
+
fanOut: r.fan_out,
|
|
416
|
+
...(r.is_module && { isModule: true }),
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=edge-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-store.js","sourceRoot":"","sources":["../../../src/core/services/edge-store.ts"],"names":[],"mappings":"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"}
|