sdlc-agent-4-enterprise-server 1.9.0 → 1.10.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/dist/__tests__/sa4e-testkit.d.ts +1 -1
- package/dist/__tests__/sa4e-testkit.js +2 -1
- package/dist/__tests__/sa4e-testkit.js.map +1 -1
- package/dist/config/CoreTools.js +1 -0
- package/dist/config/CoreTools.js.map +1 -1
- package/dist/config/__tests__/CoreTools.test.js +3 -2
- package/dist/config/__tests__/CoreTools.test.js.map +1 -1
- package/dist/engine/analyzers/complexity/ComplexityAnalyzer.d.ts +5 -1
- package/dist/engine/analyzers/complexity/ComplexityAnalyzer.js +11 -4
- package/dist/engine/analyzers/complexity/ComplexityAnalyzer.js.map +1 -1
- package/dist/engine/analyzers/complexity/ComplexityStore.d.ts +7 -2
- package/dist/engine/analyzers/complexity/ComplexityStore.js +24 -10
- package/dist/engine/analyzers/complexity/ComplexityStore.js.map +1 -1
- package/dist/engine/analyzers/complexity/ComplexityTool.d.ts +2 -2
- package/dist/engine/analyzers/complexity/ComplexityTool.js +3 -3
- package/dist/engine/analyzers/complexity/ComplexityTool.js.map +1 -1
- package/dist/engine/analyzers/entry-points/EntryPointDetector.d.ts +4 -1
- package/dist/engine/analyzers/entry-points/EntryPointDetector.js +5 -2
- package/dist/engine/analyzers/entry-points/EntryPointDetector.js.map +1 -1
- package/dist/engine/analyzers/entry-points/EntryPointStore.d.ts +5 -1
- package/dist/engine/analyzers/entry-points/EntryPointStore.js +19 -10
- package/dist/engine/analyzers/entry-points/EntryPointStore.js.map +1 -1
- package/dist/engine/analyzers/entry-points/EntryPointTool.d.ts +2 -2
- package/dist/engine/analyzers/entry-points/EntryPointTool.js +3 -3
- package/dist/engine/analyzers/entry-points/EntryPointTool.js.map +1 -1
- package/dist/engine/analyzers/graph-analysis/DeadImportDetector.d.ts +5 -1
- package/dist/engine/analyzers/graph-analysis/DeadImportDetector.js +11 -2
- package/dist/engine/analyzers/graph-analysis/DeadImportDetector.js.map +1 -1
- package/dist/engine/analyzers/graph-analysis/GraphAnalysisTools.d.ts +2 -2
- package/dist/engine/analyzers/graph-analysis/GraphAnalysisTools.js +9 -9
- package/dist/engine/analyzers/graph-analysis/GraphAnalysisTools.js.map +1 -1
- package/dist/engine/analyzers/graph-analysis/ModuleSummarizer.d.ts +6 -1
- package/dist/engine/analyzers/graph-analysis/ModuleSummarizer.js +18 -8
- package/dist/engine/analyzers/graph-analysis/ModuleSummarizer.js.map +1 -1
- package/dist/engine/analyzers/graph-analysis/utils/GraphLoader.d.ts +13 -4
- package/dist/engine/analyzers/graph-analysis/utils/GraphLoader.js +45 -43
- package/dist/engine/analyzers/graph-analysis/utils/GraphLoader.js.map +1 -1
- package/dist/engine/analyzers/similarity/DeadCodeDetector.d.ts +5 -1
- package/dist/engine/analyzers/similarity/DeadCodeDetector.js +25 -9
- package/dist/engine/analyzers/similarity/DeadCodeDetector.js.map +1 -1
- package/dist/engine/analyzers/similarity/DuplicateDetector.d.ts +5 -1
- package/dist/engine/analyzers/similarity/DuplicateDetector.js +10 -2
- package/dist/engine/analyzers/similarity/DuplicateDetector.js.map +1 -1
- package/dist/engine/analyzers/similarity/GitLogParser.d.ts +1 -1
- package/dist/engine/analyzers/similarity/GitLogParser.js +3 -2
- package/dist/engine/analyzers/similarity/GitLogParser.js.map +1 -1
- package/dist/engine/analyzers/similarity/GitMiner.d.ts +10 -1
- package/dist/engine/analyzers/similarity/GitMiner.js +49 -19
- package/dist/engine/analyzers/similarity/GitMiner.js.map +1 -1
- package/dist/engine/analyzers/similarity/SimilarityTools.d.ts +2 -2
- package/dist/engine/analyzers/similarity/SimilarityTools.js +29 -21
- package/dist/engine/analyzers/similarity/SimilarityTools.js.map +1 -1
- package/dist/engine/context/curated-context-service.js +3 -3
- package/dist/engine/context/curated-context-service.js.map +1 -1
- package/dist/engine/context/curated-helpers.d.ts +2 -2
- package/dist/engine/context/curated-helpers.js +12 -7
- package/dist/engine/context/curated-helpers.js.map +1 -1
- package/dist/engine/context/types.d.ts +2 -0
- package/dist/engine/database/graph-repository.d.ts +15 -9
- package/dist/engine/database/graph-repository.js +44 -23
- package/dist/engine/database/graph-repository.js.map +1 -1
- package/dist/engine/db/__tests__/migration-v5.test.d.ts +7 -0
- package/dist/engine/db/__tests__/migration-v5.test.js +103 -0
- package/dist/engine/db/__tests__/migration-v5.test.js.map +1 -0
- package/dist/engine/db/database-manager.d.ts +13 -1
- package/dist/engine/db/database-manager.js +33 -3
- package/dist/engine/db/database-manager.js.map +1 -1
- package/dist/engine/db/migration-v5.d.ts +15 -0
- package/dist/engine/db/migration-v5.js +131 -0
- package/dist/engine/db/migration-v5.js.map +1 -0
- package/dist/engine/db/migrations.d.ts +7 -1
- package/dist/engine/db/migrations.js +24 -2
- package/dist/engine/db/migrations.js.map +1 -1
- package/dist/engine/db/schema.d.ts +1 -1
- package/dist/engine/db/schema.js +26 -4
- package/dist/engine/db/schema.js.map +1 -1
- package/dist/engine/graph/__tests__/graph-isolation.test.d.ts +6 -0
- package/dist/engine/graph/__tests__/graph-isolation.test.js +103 -0
- package/dist/engine/graph/__tests__/graph-isolation.test.js.map +1 -0
- package/dist/engine/graph/__tests__/graph-services.test.js +61 -57
- package/dist/engine/graph/__tests__/graph-services.test.js.map +1 -1
- package/dist/engine/graph/__tests__/graph-sync-service.test.d.ts +5 -0
- package/dist/engine/graph/__tests__/graph-sync-service.test.js +75 -0
- package/dist/engine/graph/__tests__/graph-sync-service.test.js.map +1 -0
- package/dist/engine/graph/dep-helpers.d.ts +3 -3
- package/dist/engine/graph/dep-helpers.js +12 -8
- package/dist/engine/graph/dep-helpers.js.map +1 -1
- package/dist/engine/graph/dependency-graph-service.d.ts +5 -1
- package/dist/engine/graph/dependency-graph-service.js +9 -4
- package/dist/engine/graph/dependency-graph-service.js.map +1 -1
- package/dist/engine/graph/file-resolver.d.ts +5 -1
- package/dist/engine/graph/file-resolver.js +9 -2
- package/dist/engine/graph/file-resolver.js.map +1 -1
- package/dist/engine/graph/graph-sync-service.d.ts +20 -0
- package/dist/engine/graph/graph-sync-service.js +71 -0
- package/dist/engine/graph/graph-sync-service.js.map +1 -0
- package/dist/engine/graph/symbol-resolver.d.ts +6 -1
- package/dist/engine/graph/symbol-resolver.js +17 -9
- package/dist/engine/graph/symbol-resolver.js.map +1 -1
- package/dist/engine/graph/test-detector.d.ts +5 -1
- package/dist/engine/graph/test-detector.js +11 -4
- package/dist/engine/graph/test-detector.js.map +1 -1
- package/dist/engine/graph/traverse-helpers.d.ts +1 -1
- package/dist/engine/graph/traverse-helpers.js +16 -12
- package/dist/engine/graph/traverse-helpers.js.map +1 -1
- package/dist/engine/graph/traverser.d.ts +5 -1
- package/dist/engine/graph/traverser.js +7 -2
- package/dist/engine/graph/traverser.js.map +1 -1
- package/dist/engine/indexer/index-helper.d.ts +8 -7
- package/dist/engine/indexer/index-helper.js +17 -16
- package/dist/engine/indexer/index-helper.js.map +1 -1
- package/dist/engine/indexer/index-scope.d.ts +14 -0
- package/dist/engine/indexer/index-scope.js +14 -0
- package/dist/engine/indexer/index-scope.js.map +1 -0
- package/dist/engine/indexer/indexing-engine.d.ts +13 -2
- package/dist/engine/indexer/indexing-engine.js +67 -35
- package/dist/engine/indexer/indexing-engine.js.map +1 -1
- package/dist/engine/indexer/module-helper.d.ts +4 -4
- package/dist/engine/indexer/module-helper.js +17 -17
- package/dist/engine/indexer/module-helper.js.map +1 -1
- package/dist/engine/parsers/indexer/storage.d.ts +3 -3
- package/dist/engine/parsers/indexer/storage.js +39 -21
- package/dist/engine/parsers/indexer/storage.js.map +1 -1
- package/dist/engine/parsers/tree-sitter-indexer.d.ts +2 -2
- package/dist/engine/parsers/tree-sitter-indexer.js +9 -9
- package/dist/engine/parsers/tree-sitter-indexer.js.map +1 -1
- package/dist/engine/query/__tests__/code-intel-isolation.test.d.ts +4 -0
- package/dist/engine/query/__tests__/code-intel-isolation.test.js +37 -0
- package/dist/engine/query/__tests__/code-intel-isolation.test.js.map +1 -0
- package/dist/engine/query/__tests__/query-isolation.test.d.ts +5 -0
- package/dist/engine/query/__tests__/query-isolation.test.js +83 -0
- package/dist/engine/query/__tests__/query-isolation.test.js.map +1 -0
- package/dist/engine/query/code-intel-isolation.d.ts +24 -0
- package/dist/engine/query/code-intel-isolation.js +28 -0
- package/dist/engine/query/code-intel-isolation.js.map +1 -0
- package/dist/engine/query/query-layer.d.ts +12 -11
- package/dist/engine/query/query-layer.js +49 -58
- package/dist/engine/query/query-layer.js.map +1 -1
- package/dist/engine/tools/ai-context-tools.d.ts +3 -3
- package/dist/engine/tools/ai-context-tools.js +12 -11
- package/dist/engine/tools/ai-context-tools.js.map +1 -1
- package/dist/engine/tools/call-graph-tools.d.ts +2 -2
- package/dist/engine/tools/call-graph-tools.js +6 -6
- package/dist/engine/tools/call-graph-tools.js.map +1 -1
- package/dist/engine/tools/code-context.js +12 -8
- package/dist/engine/tools/code-context.js.map +1 -1
- package/dist/engine/tools/code-index-status.js +5 -4
- package/dist/engine/tools/code-index-status.js.map +1 -1
- package/dist/engine/tools/code-intel-handlers.d.ts +9 -0
- package/dist/engine/tools/code-intel-handlers.js +145 -0
- package/dist/engine/tools/code-intel-handlers.js.map +1 -0
- package/dist/engine/tools/code-kb-export.js +3 -2
- package/dist/engine/tools/code-kb-export.js.map +1 -1
- package/dist/engine/tools/code-modules.js +3 -2
- package/dist/engine/tools/code-modules.js.map +1 -1
- package/dist/engine/tools/code-search.js +3 -2
- package/dist/engine/tools/code-search.js.map +1 -1
- package/dist/engine/tools/code-symbols.js +4 -3
- package/dist/engine/tools/code-symbols.js.map +1 -1
- package/dist/engine/tools/code-traverse.d.ts +1 -1
- package/dist/engine/tools/code-traverse.js +3 -3
- package/dist/engine/tools/code-traverse.js.map +1 -1
- package/dist/engine/tools/dependency-tools.d.ts +1 -1
- package/dist/engine/tools/dependency-tools.js +3 -3
- package/dist/engine/tools/dependency-tools.js.map +1 -1
- package/dist/engine/tools/drawio-export-png.d.ts +4 -0
- package/dist/engine/tools/drawio-export-png.js +55 -53
- package/dist/engine/tools/drawio-export-png.js.map +1 -1
- package/dist/engine/tools/drawio-tool.d.ts +5 -9
- package/dist/engine/tools/drawio-tool.js +20 -15
- package/dist/engine/tools/drawio-tool.js.map +1 -1
- package/dist/engine/tools/impact-tools.d.ts +1 -1
- package/dist/engine/tools/impact-tools.js +6 -6
- package/dist/engine/tools/impact-tools.js.map +1 -1
- package/dist/engine/tools/register-tools.d.ts +31 -1
- package/dist/engine/tools/register-tools.js +22 -140
- package/dist/engine/tools/register-tools.js.map +1 -1
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/modules/code-intel/CodeIntelModule.js +4 -2
- package/dist/modules/code-intel/CodeIntelModule.js.map +1 -1
- package/dist/modules/memory/__tests__/MemoryToolDispatcher.test.js +8 -7
- package/dist/modules/memory/__tests__/MemoryToolDispatcher.test.js.map +1 -1
- package/dist/modules/memory/definitions/index.d.ts +7 -4
- package/dist/modules/memory/definitions/search.d.ts +7 -4
- package/dist/modules/memory/definitions/search.js +2 -2
- package/dist/modules/memory/definitions/search.js.map +1 -1
- package/dist/modules/memory/dispatchers/crud.js +8 -3
- package/dist/modules/memory/dispatchers/crud.js.map +1 -1
- package/dist/modules/memory/dispatchers/sync-code.js +5 -3
- package/dist/modules/memory/dispatchers/sync-code.js.map +1 -1
- package/dist/modules/memory/tool-definitions.js +1 -1
- package/dist/modules/memory/tool-definitions.js.map +1 -1
- package/dist/modules/orchestration/OrchestrationModule.d.ts +1 -0
- package/dist/modules/orchestration/OrchestrationModule.js +9 -0
- package/dist/modules/orchestration/OrchestrationModule.js.map +1 -1
- package/dist/modules/orchestration/reindex/McpToolsRepository.d.ts +32 -0
- package/dist/modules/orchestration/reindex/McpToolsRepository.js +93 -0
- package/dist/modules/orchestration/reindex/McpToolsRepository.js.map +1 -0
- package/dist/modules/orchestration/reindex/PerServerTaskQueue.d.ts +22 -0
- package/dist/modules/orchestration/reindex/PerServerTaskQueue.js +60 -0
- package/dist/modules/orchestration/reindex/PerServerTaskQueue.js.map +1 -0
- package/dist/modules/orchestration/reindex/ReindexActionMapper.d.ts +9 -0
- package/dist/modules/orchestration/reindex/ReindexActionMapper.js +10 -0
- package/dist/modules/orchestration/reindex/ReindexActionMapper.js.map +1 -0
- package/dist/modules/orchestration/reindex/ReindexService.d.ts +25 -0
- package/dist/modules/orchestration/reindex/ReindexService.js +109 -0
- package/dist/modules/orchestration/reindex/ReindexService.js.map +1 -0
- package/dist/modules/orchestration/reindex/ReindexSubscriber.d.ts +27 -0
- package/dist/modules/orchestration/reindex/ReindexSubscriber.js +47 -0
- package/dist/modules/orchestration/reindex/ReindexSubscriber.js.map +1 -0
- package/dist/modules/orchestration/reindex/ReindexSubscriberFactory.d.ts +10 -0
- package/dist/modules/orchestration/reindex/ReindexSubscriberFactory.js +21 -0
- package/dist/modules/orchestration/reindex/ReindexSubscriberFactory.js.map +1 -0
- package/dist/modules/orchestration/reindex/__tests__/McpToolsRepository.test.d.ts +1 -0
- package/dist/modules/orchestration/reindex/__tests__/McpToolsRepository.test.js +103 -0
- package/dist/modules/orchestration/reindex/__tests__/McpToolsRepository.test.js.map +1 -0
- package/dist/modules/orchestration/reindex/__tests__/PerServerTaskQueue.test.d.ts +1 -0
- package/dist/modules/orchestration/reindex/__tests__/PerServerTaskQueue.test.js +82 -0
- package/dist/modules/orchestration/reindex/__tests__/PerServerTaskQueue.test.js.map +1 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexActionMapper.test.d.ts +1 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexActionMapper.test.js +24 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexActionMapper.test.js.map +1 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexService.test.d.ts +1 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexService.test.js +76 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexService.test.js.map +1 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexSubscriber.test.d.ts +1 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexSubscriber.test.js +117 -0
- package/dist/modules/orchestration/reindex/__tests__/ReindexSubscriber.test.js.map +1 -0
- package/dist/modules/orchestration/reindex/__tests__/reindex-fakes.d.ts +30 -0
- package/dist/modules/orchestration/reindex/__tests__/reindex-fakes.js +64 -0
- package/dist/modules/orchestration/reindex/__tests__/reindex-fakes.js.map +1 -0
- package/dist/modules/orchestration/reindex/__tests__/reindex.pbt.test.d.ts +1 -0
- package/dist/modules/orchestration/reindex/__tests__/reindex.pbt.test.js +124 -0
- package/dist/modules/orchestration/reindex/__tests__/reindex.pbt.test.js.map +1 -0
- package/dist/modules/orchestration/reindex/models/PreparedTool.d.ts +11 -0
- package/dist/modules/orchestration/reindex/models/PreparedTool.js +2 -0
- package/dist/modules/orchestration/reindex/models/PreparedTool.js.map +1 -0
- package/dist/modules/orchestration/reindex/models/ReindexAction.d.ts +4 -0
- package/dist/modules/orchestration/reindex/models/ReindexAction.js +2 -0
- package/dist/modules/orchestration/reindex/models/ReindexAction.js.map +1 -0
- package/dist/modules/orchestration/reindex/models/ReindexResult.d.ts +9 -0
- package/dist/modules/orchestration/reindex/models/ReindexResult.js +2 -0
- package/dist/modules/orchestration/reindex/models/ReindexResult.js.map +1 -0
- package/dist/modules/orchestration/reindex/models/ports.d.ts +22 -0
- package/dist/modules/orchestration/reindex/models/ports.js +2 -0
- package/dist/modules/orchestration/reindex/models/ports.js.map +1 -0
- package/dist/modules/orchestration/reindex/safeError.d.ts +6 -0
- package/dist/modules/orchestration/reindex/safeError.js +10 -0
- package/dist/modules/orchestration/reindex/safeError.js.map +1 -0
- package/dist/server/middleware/jwt-auth.d.ts +16 -0
- package/dist/server/middleware/jwt-auth.js +108 -39
- package/dist/server/middleware/jwt-auth.js.map +1 -1
- package/dist/server/routes/admin/kb-graph-spatial.js +4 -2
- package/dist/server/routes/admin/kb-graph-spatial.js.map +1 -1
- package/dist/server/routes/api-index.d.ts +9 -0
- package/dist/server/routes/api-index.js +156 -0
- package/dist/server/routes/api-index.js.map +1 -0
- package/dist/server/routes/api.d.ts +1 -0
- package/dist/server/routes/api.js +14 -133
- package/dist/server/routes/api.js.map +1 -1
- package/dist/server/routes/tools.js +69 -14
- package/dist/server/routes/tools.js.map +1 -1
- package/dist/shared/path-safety.d.ts +17 -0
- package/dist/shared/path-safety.js +45 -0
- package/dist/shared/path-safety.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/sa4e-testkit.ts +2 -1
- package/src/config/CoreTools.ts +1 -0
- package/src/config/__tests__/CoreTools.test.ts +3 -2
- package/src/engine/analyzers/complexity/ComplexityAnalyzer.ts +11 -4
- package/src/engine/analyzers/complexity/ComplexityStore.ts +24 -10
- package/src/engine/analyzers/complexity/ComplexityTool.ts +3 -3
- package/src/engine/analyzers/entry-points/EntryPointDetector.ts +5 -2
- package/src/engine/analyzers/entry-points/EntryPointStore.ts +19 -10
- package/src/engine/analyzers/entry-points/EntryPointTool.ts +3 -3
- package/src/engine/analyzers/graph-analysis/DeadImportDetector.ts +11 -2
- package/src/engine/analyzers/graph-analysis/GraphAnalysisTools.ts +9 -9
- package/src/engine/analyzers/graph-analysis/ModuleSummarizer.ts +18 -8
- package/src/engine/analyzers/graph-analysis/utils/GraphLoader.ts +45 -54
- package/src/engine/analyzers/similarity/DeadCodeDetector.ts +26 -12
- package/src/engine/analyzers/similarity/DuplicateDetector.ts +10 -2
- package/src/engine/analyzers/similarity/GitLogParser.ts +4 -3
- package/src/engine/analyzers/similarity/GitMiner.ts +60 -27
- package/src/engine/analyzers/similarity/SimilarityTools.ts +29 -22
- package/src/engine/context/curated-context-service.ts +4 -3
- package/src/engine/context/curated-helpers.ts +13 -7
- package/src/engine/context/types.ts +2 -0
- package/src/engine/database/graph-repository.ts +47 -23
- package/src/engine/db/__tests__/migration-v5.test.ts +113 -0
- package/src/engine/db/database-manager.ts +30 -3
- package/src/engine/db/migration-v5.ts +136 -0
- package/src/engine/db/migrations.ts +27 -2
- package/src/engine/db/schema.ts +26 -4
- package/src/engine/graph/__tests__/graph-isolation.test.ts +125 -0
- package/src/engine/graph/__tests__/graph-services.test.ts +61 -57
- package/src/engine/graph/__tests__/graph-sync-service.test.ts +84 -0
- package/src/engine/graph/dep-helpers.ts +13 -8
- package/src/engine/graph/dependency-graph-service.ts +9 -4
- package/src/engine/graph/file-resolver.ts +11 -2
- package/src/engine/graph/graph-sync-service.ts +88 -0
- package/src/engine/graph/symbol-resolver.ts +17 -9
- package/src/engine/graph/test-detector.ts +11 -4
- package/src/engine/graph/traverse-helpers.ts +16 -12
- package/src/engine/graph/traverser.ts +7 -2
- package/src/engine/indexer/index-helper.ts +19 -18
- package/src/engine/indexer/index-scope.ts +24 -0
- package/src/engine/indexer/indexing-engine.ts +67 -34
- package/src/engine/indexer/module-helper.ts +18 -18
- package/src/engine/parsers/indexer/storage.ts +42 -19
- package/src/engine/parsers/tree-sitter-indexer.ts +9 -9
- package/src/engine/query/__tests__/code-intel-isolation.test.ts +43 -0
- package/src/engine/query/__tests__/query-isolation.test.ts +98 -0
- package/src/engine/query/code-intel-isolation.ts +35 -0
- package/src/engine/query/query-layer.ts +55 -69
- package/src/engine/tools/ai-context-tools.ts +13 -11
- package/src/engine/tools/call-graph-tools.ts +6 -6
- package/src/engine/tools/code-context.ts +11 -8
- package/src/engine/tools/code-index-status.ts +5 -4
- package/src/engine/tools/code-intel-handlers.ts +131 -0
- package/src/engine/tools/code-kb-export.ts +3 -2
- package/src/engine/tools/code-modules.ts +3 -2
- package/src/engine/tools/code-search.ts +3 -2
- package/src/engine/tools/code-symbols.ts +4 -3
- package/src/engine/tools/code-traverse.ts +3 -3
- package/src/engine/tools/dependency-tools.ts +3 -3
- package/src/engine/tools/drawio-export-png.ts +53 -61
- package/src/engine/tools/drawio-tool.ts +15 -13
- package/src/engine/tools/impact-tools.ts +6 -6
- package/src/engine/tools/register-tools.ts +28 -133
- package/src/index.ts +11 -5
- package/src/modules/code-intel/CodeIntelModule.ts +4 -2
- package/src/modules/memory/__tests__/MemoryToolDispatcher.test.ts +8 -7
- package/src/modules/memory/definitions/search.ts +2 -2
- package/src/modules/memory/dispatchers/crud.ts +7 -3
- package/src/modules/memory/dispatchers/sync-code.ts +5 -3
- package/src/modules/memory/tool-definitions.ts +1 -1
- package/src/modules/orchestration/OrchestrationModule.ts +10 -0
- package/src/modules/orchestration/reindex/McpToolsRepository.ts +107 -0
- package/src/modules/orchestration/reindex/PerServerTaskQueue.ts +76 -0
- package/src/modules/orchestration/reindex/ReindexActionMapper.ts +14 -0
- package/src/modules/orchestration/reindex/ReindexService.ts +131 -0
- package/src/modules/orchestration/reindex/ReindexSubscriber.ts +54 -0
- package/src/modules/orchestration/reindex/ReindexSubscriberFactory.ts +34 -0
- package/src/modules/orchestration/reindex/__tests__/McpToolsRepository.test.ts +118 -0
- package/src/modules/orchestration/reindex/__tests__/PerServerTaskQueue.test.ts +84 -0
- package/src/modules/orchestration/reindex/__tests__/ReindexActionMapper.test.ts +25 -0
- package/src/modules/orchestration/reindex/__tests__/ReindexService.test.ts +85 -0
- package/src/modules/orchestration/reindex/__tests__/ReindexSubscriber.test.ts +131 -0
- package/src/modules/orchestration/reindex/__tests__/reindex-fakes.ts +74 -0
- package/src/modules/orchestration/reindex/__tests__/reindex.pbt.test.ts +155 -0
- package/src/modules/orchestration/reindex/models/PreparedTool.ts +11 -0
- package/src/modules/orchestration/reindex/models/ReindexAction.ts +4 -0
- package/src/modules/orchestration/reindex/models/ReindexResult.ts +9 -0
- package/src/modules/orchestration/reindex/models/ports.ts +26 -0
- package/src/modules/orchestration/reindex/safeError.ts +9 -0
- package/src/server/middleware/jwt-auth.ts +118 -43
- package/src/server/routes/admin/kb-graph-spatial.ts +4 -2
- package/src/server/routes/api-index.ts +162 -0
- package/src/server/routes/api.ts +14 -140
- package/src/server/routes/tools.ts +78 -26
- package/src/shared/path-safety.ts +40 -0
- package/tests/e2e/reindex.e2e.test.ts +161 -0
- package/tests/integration/migration-v5-upgrade.it.test.ts +84 -0
- package/tests/integration/reindex.it.test.ts +250 -0
|
@@ -45,5 +45,5 @@ export interface McpHarness {
|
|
|
45
45
|
}
|
|
46
46
|
/** Wire a real getMcpServer(registry) to a Client over linked in-memory transports. */
|
|
47
47
|
export declare function connectMcp(registry: ModuleRegistry): Promise<McpHarness>;
|
|
48
|
-
/** The canonical
|
|
48
|
+
/** The canonical 10 CORE tool names (5 memory + 3 meta + 2 drawio). */
|
|
49
49
|
export declare const CORE_8: string[];
|
|
@@ -76,9 +76,10 @@ export async function connectMcp(registry) {
|
|
|
76
76
|
async close() { await client.close(); await server.close(); },
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
-
/** The canonical
|
|
79
|
+
/** The canonical 10 CORE tool names (5 memory + 3 meta + 2 drawio). */
|
|
80
80
|
export const CORE_8 = [
|
|
81
81
|
'mem_search', 'mem_ingest', 'mem_ingest_file', 'code_search',
|
|
82
82
|
'get_curated_context', 'find_tools', 'execute_dynamic_tool', 'orchestration_status',
|
|
83
|
+
'drawio_export_png', 'drawio_auto_layout',
|
|
83
84
|
];
|
|
84
85
|
//# sourceMappingURL=sa4e-testkit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sa4e-testkit.js","sourceRoot":"","sources":["../../src/__tests__/sa4e-testkit.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sa4e-testkit.js","sourceRoot":"","sources":["../../src/__tests__/sa4e-testkit.ts"],"names":[],"mappings":"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"}
|
package/dist/config/CoreTools.js
CHANGED
|
@@ -11,6 +11,7 @@ export const CORE_TOOLS = [
|
|
|
11
11
|
'mem_search', 'mem_ingest', 'mem_ingest_file',
|
|
12
12
|
'code_search', 'get_curated_context',
|
|
13
13
|
'find_tools', 'execute_dynamic_tool', 'orchestration_status',
|
|
14
|
+
'drawio_export_png', 'drawio_auto_layout',
|
|
14
15
|
];
|
|
15
16
|
/**
|
|
16
17
|
* Normalize allowlist: drop invalid (BR-05), de-dup (BR-08),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoreTools.js","sourceRoot":"","sources":["../../src/config/CoreTools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C,YAAY,EAAE,sBAAsB,EAAE,sBAAsB;CACpD,CAAC;AAEX,sFAAsF;AACtF,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C,YAAY,EAAE,YAAY,EAAE,iBAAiB;IAC7C,aAAa,EAAE,qBAAqB;IACpC,YAAY,EAAE,sBAAsB,EAAE,sBAAsB;
|
|
1
|
+
{"version":3,"file":"CoreTools.js","sourceRoot":"","sources":["../../src/config/CoreTools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C,YAAY,EAAE,sBAAsB,EAAE,sBAAsB;CACpD,CAAC;AAEX,sFAAsF;AACtF,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C,YAAY,EAAE,YAAY,EAAE,iBAAiB;IAC7C,aAAa,EAAE,qBAAqB;IACpC,YAAY,EAAE,sBAAsB,EAAE,sBAAsB;IAC5D,mBAAmB,EAAE,oBAAoB;CACjC,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,EAAE;YAAE,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,4CAA4C,CAAC,CAAC;QAClF,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,GAAG,CAAS,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -15,13 +15,14 @@ function setCore(entries) {
|
|
|
15
15
|
beforeEach(() => { original = [...CORE_TOOLS]; });
|
|
16
16
|
afterEach(() => { setCore(original); });
|
|
17
17
|
describe('CoreTools.resolveCoreToolNames', () => {
|
|
18
|
-
it('UT-01: valid CORE set resolves to exactly
|
|
18
|
+
it('UT-01: valid CORE set resolves to exactly 10 names', () => {
|
|
19
19
|
const set = resolveCoreToolNames();
|
|
20
20
|
expect(set).toBeInstanceOf(Set);
|
|
21
|
-
expect(set.size).toBe(
|
|
21
|
+
expect(set.size).toBe(10);
|
|
22
22
|
for (const name of [
|
|
23
23
|
'mem_search', 'mem_ingest', 'mem_ingest_file', 'code_search',
|
|
24
24
|
'get_curated_context', 'find_tools', 'execute_dynamic_tool', 'orchestration_status',
|
|
25
|
+
'drawio_export_png', 'drawio_auto_layout',
|
|
25
26
|
]) {
|
|
26
27
|
expect(set.has(name)).toBe(true);
|
|
27
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoreTools.test.js","sourceRoot":"","sources":["../../../src/config/__tests__/CoreTools.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AAC7B,IAAI,QAAkB,CAAC;AAEvB,SAAS,OAAO,CAAC,OAAiB;IAC/B,UAAuB,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,UAAuB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,UAAU,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"CoreTools.test.js","sourceRoot":"","sources":["../../../src/config/__tests__/CoreTools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,11 @@ export declare class ComplexityAnalyzer {
|
|
|
10
10
|
private grader;
|
|
11
11
|
private store;
|
|
12
12
|
private db;
|
|
13
|
-
|
|
13
|
+
private projectId;
|
|
14
|
+
/**
|
|
15
|
+
* @param projectId SA4E-41 read scope. Undefined ⇒ query()/getBySymbolName fail-closed.
|
|
16
|
+
*/
|
|
17
|
+
constructor(db: Database.Database, projectId?: string);
|
|
14
18
|
/** Analyze a single function given its body AST node. */
|
|
15
19
|
analyzeFunction(symbolId: number, symbolName: string, filePath: string, startLine: number, endLine: number, bodyNode: SyntaxNode, language: string): ComplexityResult | null;
|
|
16
20
|
/** Analyze all functions in a file (from DB symbols). Returns file-level summary. */
|
|
@@ -5,16 +5,22 @@
|
|
|
5
5
|
import { ComplexityCalculator } from './ComplexityCalculator.js';
|
|
6
6
|
import { GradeAssigner } from './GradeAssigner.js';
|
|
7
7
|
import { ComplexityStore } from './ComplexityStore.js';
|
|
8
|
+
import { buildCodeScopeFilter } from '../../query/code-intel-isolation.js';
|
|
8
9
|
export class ComplexityAnalyzer {
|
|
9
10
|
calculator;
|
|
10
11
|
grader;
|
|
11
12
|
store;
|
|
12
13
|
db;
|
|
13
|
-
|
|
14
|
+
projectId;
|
|
15
|
+
/**
|
|
16
|
+
* @param projectId SA4E-41 read scope. Undefined ⇒ query()/getBySymbolName fail-closed.
|
|
17
|
+
*/
|
|
18
|
+
constructor(db, projectId) {
|
|
14
19
|
this.db = db;
|
|
20
|
+
this.projectId = projectId;
|
|
15
21
|
this.calculator = new ComplexityCalculator();
|
|
16
22
|
this.grader = new GradeAssigner();
|
|
17
|
-
this.store = new ComplexityStore(db);
|
|
23
|
+
this.store = new ComplexityStore(db, projectId);
|
|
18
24
|
}
|
|
19
25
|
/** Analyze a single function given its body AST node. */
|
|
20
26
|
analyzeFunction(symbolId, symbolName, filePath, startLine, endLine, bodyNode, language) {
|
|
@@ -66,12 +72,13 @@ export class ComplexityAnalyzer {
|
|
|
66
72
|
}
|
|
67
73
|
/** Get complexity for a specific symbol by name. */
|
|
68
74
|
getBySymbolName(symbolName, filePath) {
|
|
75
|
+
const scope = buildCodeScopeFilter(this.projectId, 's'); // fail-closed
|
|
69
76
|
let sql = `
|
|
70
77
|
SELECT s.id FROM symbols s
|
|
71
78
|
JOIN files f ON f.id = s.file_id
|
|
72
|
-
WHERE s.name = ?
|
|
79
|
+
WHERE s.name = ? AND ${scope.clause}
|
|
73
80
|
`;
|
|
74
|
-
const params = [symbolName];
|
|
81
|
+
const params = [symbolName, ...scope.params];
|
|
75
82
|
if (filePath) {
|
|
76
83
|
sql += ' AND f.relative_path LIKE ?';
|
|
77
84
|
params.push(`%${filePath}%`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComplexityAnalyzer.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/complexity/ComplexityAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ComplexityAnalyzer.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/complexity/ComplexityAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,15 +5,20 @@ import Database from 'better-sqlite3';
|
|
|
5
5
|
import type { ComplexityResult, ComplexityFilters, ComplexityQueryResult } from './types.js';
|
|
6
6
|
export declare class ComplexityStore {
|
|
7
7
|
private db;
|
|
8
|
+
private projectId;
|
|
8
9
|
private stmts;
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* @param projectId SA4E-41 read scope. Undefined ⇒ query() is fail-closed.
|
|
12
|
+
* Write paths (upsert) are keyed by symbol_id and don't require a scope.
|
|
13
|
+
*/
|
|
14
|
+
constructor(db: Database.Database, projectId?: string);
|
|
10
15
|
/** Store or update complexity result for a symbol. */
|
|
11
16
|
upsert(result: ComplexityResult): void;
|
|
12
17
|
/** Batch upsert complexity results. */
|
|
13
18
|
upsertBatch(results: ComplexityResult[]): void;
|
|
14
19
|
/** Get complexity for a specific symbol. */
|
|
15
20
|
getBySymbol(symbolId: number): ComplexityResult | null;
|
|
16
|
-
/** Query complexity results with filters. */
|
|
21
|
+
/** Query complexity results with filters (tenant-scoped, fail-closed). */
|
|
17
22
|
query(filters: ComplexityFilters): ComplexityQueryResult;
|
|
18
23
|
/** Delete complexity data for a symbol. */
|
|
19
24
|
deleteBySymbol(symbolId: number): void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KSA-161: SQLite CRUD for complexity results.
|
|
3
3
|
*/
|
|
4
|
+
import { buildCodeScopeFilter } from '../../query/code-intel-isolation.js';
|
|
4
5
|
const CREATE_TABLE = `
|
|
5
6
|
CREATE TABLE IF NOT EXISTS complexity (
|
|
6
7
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -23,9 +24,15 @@ CREATE INDEX IF NOT EXISTS idx_complexity_symbol ON complexity(symbol_id);
|
|
|
23
24
|
`;
|
|
24
25
|
export class ComplexityStore {
|
|
25
26
|
db;
|
|
27
|
+
projectId;
|
|
26
28
|
stmts;
|
|
27
|
-
|
|
29
|
+
/**
|
|
30
|
+
* @param projectId SA4E-41 read scope. Undefined ⇒ query() is fail-closed.
|
|
31
|
+
* Write paths (upsert) are keyed by symbol_id and don't require a scope.
|
|
32
|
+
*/
|
|
33
|
+
constructor(db, projectId) {
|
|
28
34
|
this.db = db;
|
|
35
|
+
this.projectId = projectId;
|
|
29
36
|
this.ensureTable();
|
|
30
37
|
this.prepareStatements();
|
|
31
38
|
}
|
|
@@ -45,17 +52,19 @@ export class ComplexityStore {
|
|
|
45
52
|
getBySymbol(symbolId) {
|
|
46
53
|
return this.stmts.getBySymbol.get(symbolId) ?? null;
|
|
47
54
|
}
|
|
48
|
-
/** Query complexity results with filters. */
|
|
55
|
+
/** Query complexity results with filters (tenant-scoped, fail-closed). */
|
|
49
56
|
query(filters) {
|
|
57
|
+
// complexity has no project_id column — scope via the joined symbols table.
|
|
58
|
+
const scope = buildCodeScopeFilter(this.projectId, 's');
|
|
50
59
|
let sql = `
|
|
51
60
|
SELECT c.*, s.name as symbol_name, f.relative_path as file_path,
|
|
52
61
|
s.start_line, s.end_line
|
|
53
62
|
FROM complexity c
|
|
54
63
|
JOIN symbols s ON s.id = c.symbol_id
|
|
55
64
|
JOIN files f ON f.id = s.file_id
|
|
56
|
-
WHERE
|
|
65
|
+
WHERE ${scope.clause}
|
|
57
66
|
`;
|
|
58
|
-
const params = [];
|
|
67
|
+
const params = [...scope.params];
|
|
59
68
|
if (filters.filePath) {
|
|
60
69
|
sql += ' AND f.relative_path LIKE ?';
|
|
61
70
|
params.push(`%${filters.filePath}%`);
|
|
@@ -96,23 +105,28 @@ export class ComplexityStore {
|
|
|
96
105
|
sql += ' LIMIT ?';
|
|
97
106
|
params.push(filters.limit);
|
|
98
107
|
const results = this.db.prepare(sql).all(...params);
|
|
99
|
-
// Grade distribution
|
|
108
|
+
// Grade distribution (tenant-scoped)
|
|
100
109
|
const distSql = `
|
|
101
110
|
SELECT c.grade, COUNT(*) as count
|
|
102
111
|
FROM complexity c
|
|
103
112
|
JOIN symbols s ON s.id = c.symbol_id
|
|
104
113
|
JOIN files f ON f.id = s.file_id
|
|
105
|
-
WHERE
|
|
114
|
+
WHERE ${scope.clause} ${filters.module ? 'AND f.module = ?' : ''}
|
|
106
115
|
GROUP BY c.grade
|
|
107
116
|
`;
|
|
108
|
-
const distParams = filters.module ? [filters.module] : [];
|
|
117
|
+
const distParams = filters.module ? [...scope.params, filters.module] : [...scope.params];
|
|
109
118
|
const distRows = this.db.prepare(distSql).all(...distParams);
|
|
110
119
|
const gradeDistribution = { A: 0, B: 0, C: 0, D: 0, F: 0 };
|
|
111
120
|
for (const row of distRows)
|
|
112
121
|
gradeDistribution[row.grade] = row.count;
|
|
113
|
-
// Average
|
|
114
|
-
const avgSql = `
|
|
115
|
-
|
|
122
|
+
// Average (tenant-scoped via joined symbols)
|
|
123
|
+
const avgSql = `
|
|
124
|
+
SELECT AVG(c.cyclomatic_complexity) as avg
|
|
125
|
+
FROM complexity c
|
|
126
|
+
JOIN symbols s ON s.id = c.symbol_id
|
|
127
|
+
WHERE ${scope.clause}
|
|
128
|
+
`;
|
|
129
|
+
const avgRow = this.db.prepare(avgSql).get(...scope.params);
|
|
116
130
|
return {
|
|
117
131
|
results,
|
|
118
132
|
total,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComplexityStore.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/complexity/ComplexityStore.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"ComplexityStore.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/complexity/ComplexityStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ export declare const COMPLEXITY_TOOL_DEFINITION: {
|
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
41
|
};
|
|
42
|
-
/** Handle complexity_analysis tool call. */
|
|
43
|
-
export declare function handleComplexityTool(args: Record<string, unknown>, db: Database.Database): string;
|
|
42
|
+
/** Handle complexity_analysis tool call (SA4E-41: tenant-scoped, fail-closed). */
|
|
43
|
+
export declare function handleComplexityTool(args: Record<string, unknown>, db: Database.Database, projectId?: string): string;
|
|
44
44
|
/** Register the complexity tool in the dispatch system. */
|
|
45
45
|
export declare function registerComplexityTool(): typeof COMPLEXITY_TOOL_DEFINITION;
|
|
@@ -18,9 +18,9 @@ export const COMPLEXITY_TOOL_DEFINITION = {
|
|
|
18
18
|
},
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
|
-
/** Handle complexity_analysis tool call. */
|
|
22
|
-
export function handleComplexityTool(args, db) {
|
|
23
|
-
const analyzer = new ComplexityAnalyzer(db);
|
|
21
|
+
/** Handle complexity_analysis tool call (SA4E-41: tenant-scoped, fail-closed). */
|
|
22
|
+
export function handleComplexityTool(args, db, projectId) {
|
|
23
|
+
const analyzer = new ComplexityAnalyzer(db, projectId);
|
|
24
24
|
const filters = {
|
|
25
25
|
filePath: args.file_path,
|
|
26
26
|
symbolName: args.symbol_name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComplexityTool.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/complexity/ComplexityTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,qHAAqH;IAClI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;YACjF,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;YAC9E,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;YACpF,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kDAAkD,EAAE;YACjG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAChE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;YACnE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;SACtF;KACF;CACF,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"ComplexityTool.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/complexity/ComplexityTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,10 @@ export declare class EntryPointDetector {
|
|
|
12
12
|
private eventDetector;
|
|
13
13
|
private store;
|
|
14
14
|
private db;
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* @param projectId SA4E-41 read scope. Undefined ⇒ query() is fail-closed.
|
|
17
|
+
*/
|
|
18
|
+
constructor(db: Database.Database, projectId?: string);
|
|
16
19
|
/** Detect all entry points in a file. */
|
|
17
20
|
detectFile(filePath: string, source: string, language: string, symbols: Array<{
|
|
18
21
|
id: number;
|
|
@@ -17,7 +17,10 @@ export class EntryPointDetector {
|
|
|
17
17
|
eventDetector;
|
|
18
18
|
store;
|
|
19
19
|
db;
|
|
20
|
-
|
|
20
|
+
/**
|
|
21
|
+
* @param projectId SA4E-41 read scope. Undefined ⇒ query() is fail-closed.
|
|
22
|
+
*/
|
|
23
|
+
constructor(db, projectId) {
|
|
21
24
|
this.db = db;
|
|
22
25
|
this.registry = new PatternRegistry();
|
|
23
26
|
this.frameworkDetector = new FrameworkDetector(this.registry);
|
|
@@ -25,7 +28,7 @@ export class EntryPointDetector {
|
|
|
25
28
|
this.mainDetector = new MainDetector(this.registry);
|
|
26
29
|
this.cliDetector = new CLIDetector();
|
|
27
30
|
this.eventDetector = new EventDetector();
|
|
28
|
-
this.store = new EntryPointStore(db);
|
|
31
|
+
this.store = new EntryPointStore(db, projectId);
|
|
29
32
|
}
|
|
30
33
|
/** Detect all entry points in a file. */
|
|
31
34
|
detectFile(filePath, source, language, symbols) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntryPointDetector.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/entry-points/EntryPointDetector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,MAAM,OAAO,kBAAkB;IACrB,QAAQ,CAAkB;IAC1B,iBAAiB,CAAoB;IACrC,YAAY,CAAsB;IAClC,YAAY,CAAe;IAC3B,WAAW,CAAc;IACzB,aAAa,CAAgB;IAC7B,KAAK,CAAkB;IACvB,EAAE,CAAoB;IAE9B,YAAY,EAAqB;
|
|
1
|
+
{"version":3,"file":"EntryPointDetector.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/entry-points/EntryPointDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,12 @@ import Database from 'better-sqlite3';
|
|
|
5
5
|
import type { EntryPoint, EntryPointFilters, EntryPointQueryResult } from './types.js';
|
|
6
6
|
export declare class EntryPointStore {
|
|
7
7
|
private db;
|
|
8
|
+
private projectId;
|
|
8
9
|
private stmts;
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* @param projectId SA4E-41 read scope. Undefined ⇒ query() is fail-closed.
|
|
12
|
+
*/
|
|
13
|
+
constructor(db: Database.Database, projectId?: string);
|
|
10
14
|
/** Store or update an entry point. */
|
|
11
15
|
upsert(ep: EntryPoint): void;
|
|
12
16
|
/** Batch upsert entry points. */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KSA-162: Entry Point Store — SQLite CRUD for detected entry points.
|
|
3
3
|
*/
|
|
4
|
+
import { buildCodeScopeFilter } from '../../query/code-intel-isolation.js';
|
|
4
5
|
const CREATE_TABLE = `
|
|
5
6
|
CREATE TABLE IF NOT EXISTS entry_points (
|
|
6
7
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -25,9 +26,14 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_ep_symbol ON entry_points(symbol_id);
|
|
|
25
26
|
`;
|
|
26
27
|
export class EntryPointStore {
|
|
27
28
|
db;
|
|
29
|
+
projectId;
|
|
28
30
|
stmts;
|
|
29
|
-
|
|
31
|
+
/**
|
|
32
|
+
* @param projectId SA4E-41 read scope. Undefined ⇒ query() is fail-closed.
|
|
33
|
+
*/
|
|
34
|
+
constructor(db, projectId) {
|
|
30
35
|
this.db = db;
|
|
36
|
+
this.projectId = projectId;
|
|
31
37
|
this.ensureTable();
|
|
32
38
|
this.prepareStatements();
|
|
33
39
|
}
|
|
@@ -45,14 +51,16 @@ export class EntryPointStore {
|
|
|
45
51
|
}
|
|
46
52
|
/** Query entry points with filters. */
|
|
47
53
|
query(filters) {
|
|
54
|
+
// entry_points has no project_id column — scope via the joined symbols table.
|
|
55
|
+
const scope = buildCodeScopeFilter(this.projectId, 's');
|
|
48
56
|
let sql = `
|
|
49
57
|
SELECT ep.*, s.name as symbol_name, f.relative_path as file_path, s.start_line
|
|
50
58
|
FROM entry_points ep
|
|
51
59
|
JOIN symbols s ON s.id = ep.symbol_id
|
|
52
60
|
JOIN files f ON f.id = s.file_id
|
|
53
|
-
WHERE
|
|
61
|
+
WHERE ${scope.clause}
|
|
54
62
|
`;
|
|
55
|
-
const params = [];
|
|
63
|
+
const params = [...scope.params];
|
|
56
64
|
if (filters.entryType) {
|
|
57
65
|
sql += ' AND ep.entry_type = ?';
|
|
58
66
|
params.push(filters.entryType);
|
|
@@ -89,19 +97,20 @@ export class EntryPointStore {
|
|
|
89
97
|
middleware: r.middleware ? JSON.parse(r.middleware) : [],
|
|
90
98
|
has_auth: Boolean(r.has_auth),
|
|
91
99
|
}));
|
|
92
|
-
// Summary
|
|
93
|
-
const
|
|
94
|
-
|
|
100
|
+
// Summary (tenant-scoped via joined symbols)
|
|
101
|
+
const scoped = (col, extra = '') => `
|
|
102
|
+
SELECT ep.${col}, COUNT(*) as count
|
|
103
|
+
FROM entry_points ep JOIN symbols s ON s.id = ep.symbol_id
|
|
104
|
+
WHERE ${scope.clause} ${extra} GROUP BY ep.${col}`;
|
|
105
|
+
const typeRows = this.db.prepare(scoped('entry_type')).all(...scope.params);
|
|
95
106
|
const byType = {};
|
|
96
107
|
for (const r of typeRows)
|
|
97
108
|
byType[r.entry_type] = r.count;
|
|
98
|
-
const
|
|
99
|
-
const fwRows = this.db.prepare(fwSql).all();
|
|
109
|
+
const fwRows = this.db.prepare(scoped('framework', 'AND ep.framework IS NOT NULL')).all(...scope.params);
|
|
100
110
|
const byFramework = {};
|
|
101
111
|
for (const r of fwRows)
|
|
102
112
|
byFramework[r.framework] = r.count;
|
|
103
|
-
const
|
|
104
|
-
const authRows = this.db.prepare(authSql).all();
|
|
113
|
+
const authRows = this.db.prepare(scoped('has_auth')).all(...scope.params);
|
|
105
114
|
const authCoverage = { withAuth: 0, withoutAuth: 0 };
|
|
106
115
|
for (const r of authRows) {
|
|
107
116
|
if (r.has_auth)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntryPointStore.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/entry-points/EntryPointStore.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"EntryPointStore.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/entry-points/EntryPointStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,5 +39,5 @@ export declare const ENTRY_POINT_TOOL_DEFINITION: {
|
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
41
|
};
|
|
42
|
-
/** Handle find_entry_points tool call. */
|
|
43
|
-
export declare function handleEntryPointTool(args: Record<string, unknown>, db: Database.Database): string;
|
|
42
|
+
/** Handle find_entry_points tool call (SA4E-41: tenant-scoped, fail-closed). */
|
|
43
|
+
export declare function handleEntryPointTool(args: Record<string, unknown>, db: Database.Database, projectId?: string): string;
|
|
@@ -18,9 +18,9 @@ export const ENTRY_POINT_TOOL_DEFINITION = {
|
|
|
18
18
|
},
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
|
-
/** Handle find_entry_points tool call. */
|
|
22
|
-
export function handleEntryPointTool(args, db) {
|
|
23
|
-
const detector = new EntryPointDetector(db);
|
|
21
|
+
/** Handle find_entry_points tool call (SA4E-41: tenant-scoped, fail-closed). */
|
|
22
|
+
export function handleEntryPointTool(args, db, projectId) {
|
|
23
|
+
const detector = new EntryPointDetector(db, projectId);
|
|
24
24
|
const result = detector.query({
|
|
25
25
|
entryType: args.entry_type,
|
|
26
26
|
framework: args.framework,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntryPointTool.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/entry-points/EntryPointTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,uFAAuF;IACpG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mEAAmE,EAAE;YAChH,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mEAAmE,EAAE;YAC/G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uDAAuD,EAAE;YACrG,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;YACzF,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yBAAyB,EAAE;YACrE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;YACjE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;SACpE;KACF;CACF,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"EntryPointTool.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/entry-points/EntryPointTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,11 @@ import Database from 'better-sqlite3';
|
|
|
5
5
|
import type { DeadImport } from './types.js';
|
|
6
6
|
export declare class DeadImportDetector {
|
|
7
7
|
private db;
|
|
8
|
-
|
|
8
|
+
private projectId;
|
|
9
|
+
/**
|
|
10
|
+
* @param projectId SA4E-41 tenant scope. Undefined ⇒ fail-closed (no rows).
|
|
11
|
+
*/
|
|
12
|
+
constructor(db: Database.Database, projectId?: string);
|
|
9
13
|
/** Find dead (unused) imports in a file or across the project. */
|
|
10
14
|
detect(options?: {
|
|
11
15
|
filePath?: string;
|
|
@@ -1,29 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KSA-163: Dead Import Detector — Finds unused imports.
|
|
3
3
|
*/
|
|
4
|
+
import { buildCodeScopeFilter } from '../../query/code-intel-isolation.js';
|
|
4
5
|
export class DeadImportDetector {
|
|
5
6
|
db;
|
|
6
|
-
|
|
7
|
+
projectId;
|
|
8
|
+
/**
|
|
9
|
+
* @param projectId SA4E-41 tenant scope. Undefined ⇒ fail-closed (no rows).
|
|
10
|
+
*/
|
|
11
|
+
constructor(db, projectId) {
|
|
7
12
|
this.db = db;
|
|
13
|
+
this.projectId = projectId;
|
|
8
14
|
}
|
|
9
15
|
/** Find dead (unused) imports in a file or across the project. */
|
|
10
16
|
detect(options = {}) {
|
|
11
17
|
const limit = options.limit ?? 50;
|
|
18
|
+
const scope = buildCodeScopeFilter(this.projectId, 'r'); // fail-closed
|
|
12
19
|
// Find imports where the target symbol is never referenced elsewhere in the same file
|
|
13
20
|
let sql = `
|
|
14
21
|
SELECT r.file_path as filePath, r.line, r.target_symbol as importedSymbol,
|
|
15
22
|
r.metadata
|
|
16
23
|
FROM relationships r
|
|
17
24
|
WHERE r.kind = 'imports'
|
|
25
|
+
AND ${scope.clause}
|
|
18
26
|
AND NOT EXISTS (
|
|
19
27
|
SELECT 1 FROM relationships r2
|
|
20
28
|
WHERE r2.file_path = r.file_path
|
|
21
29
|
AND r2.kind IN ('calls', 'uses')
|
|
22
30
|
AND r2.target_symbol = r.target_symbol
|
|
23
31
|
AND r2.id != r.id
|
|
32
|
+
AND r2.project_id = r.project_id
|
|
24
33
|
)
|
|
25
34
|
`;
|
|
26
|
-
const params = [];
|
|
35
|
+
const params = [...scope.params];
|
|
27
36
|
if (options.filePath) {
|
|
28
37
|
sql += ' AND r.file_path LIKE ?';
|
|
29
38
|
params.push(`%${options.filePath}%`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeadImportDetector.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/graph-analysis/DeadImportDetector.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"DeadImportDetector.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/graph-analysis/DeadImportDetector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,OAAO,kBAAkB;IACrB,EAAE,CAAoB;IACtB,SAAS,CAAqB;IAEtC;;OAEG;IACH,YAAY,EAAqB,EAAE,SAAkB;QACnD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,UAAkE,EAAE;QACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,cAAc;QAEvE,sFAAsF;QACtF,IAAI,GAAG,GAAG;;;;;cAKA,KAAK,CAAC,MAAM;;;;;;;;;KASrB,CAAC;QACF,MAAM,MAAM,GAAc,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,GAAG,IAAI,yBAAyB,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,GAAG,IAAI,yBAAyB,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,GAAG,IAAI,uCAAuC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAK7C,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACpB,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACtC,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC9C,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,UAAU;aACX,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -119,5 +119,5 @@ export declare const GRAPH_ANALYSIS_TOOL_DEFINITIONS: ({
|
|
|
119
119
|
required?: undefined;
|
|
120
120
|
};
|
|
121
121
|
})[];
|
|
122
|
-
/** Dispatch a graph analysis tool call. */
|
|
123
|
-
export declare function handleGraphAnalysisTool(name: string, args: Record<string, unknown>, db: Database.Database): string | null;
|
|
122
|
+
/** Dispatch a graph analysis tool call (SA4E-41: tenant-scoped, fail-closed). */
|
|
123
|
+
export declare function handleGraphAnalysisTool(name: string, args: Record<string, unknown>, db: Database.Database, projectId?: string): string | null;
|