sdlc-agent-4-enterprise-server 1.10.1 → 1.12.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/.dockerignore +18 -0
- package/.env.example +36 -0
- package/.env.test +24 -0
- package/.huskyrc.json +5 -0
- package/.lintstagedrc.json +9 -0
- package/Dockerfile +51 -0
- package/README.md +5 -1
- package/dist/__tests__/sa4e-testkit.d.ts +1 -1
- package/dist/__tests__/sa4e-testkit.js +3 -2
- package/dist/__tests__/sa4e-testkit.js.map +1 -1
- package/dist/database/dialect/DialectHelper.d.ts +8 -0
- package/dist/database/dialect/DialectHelper.js +23 -0
- package/dist/database/dialect/DialectHelper.js.map +1 -0
- package/dist/database/index.d.ts +1 -0
- package/dist/database/index.js +1 -0
- package/dist/database/index.js.map +1 -1
- package/dist/engine/database/graph-repository.d.ts +3 -3
- package/dist/engine/database/graph-repository.js +24 -30
- package/dist/engine/database/graph-repository.js.map +1 -1
- package/dist/engine/database/migrator.d.ts +3 -3
- package/dist/engine/database/migrator.js +17 -17
- package/dist/engine/database/migrator.js.map +1 -1
- package/dist/engine/db/migrations.js +2 -1
- package/dist/engine/db/migrations.js.map +1 -1
- package/dist/engine/graph/__tests__/graph-isolation.test.js +5 -4
- package/dist/engine/graph/__tests__/graph-isolation.test.js.map +1 -1
- package/dist/engine/graph/__tests__/graph-services.test.js +10 -9
- package/dist/engine/graph/__tests__/graph-services.test.js.map +1 -1
- package/dist/engine/graph/__tests__/graph-sync-service.test.js +6 -5
- package/dist/engine/graph/__tests__/graph-sync-service.test.js.map +1 -1
- package/dist/engine/graph/graph-sync-service.d.ts +5 -4
- package/dist/engine/graph/graph-sync-service.js +19 -15
- package/dist/engine/graph/graph-sync-service.js.map +1 -1
- package/dist/engine/indexer/__tests__/tree-sitter-pipeline.test.js +7 -6
- package/dist/engine/indexer/__tests__/tree-sitter-pipeline.test.js.map +1 -1
- package/dist/engine/indexer/async-file-scanner.d.ts +8 -0
- package/dist/engine/indexer/async-file-scanner.js +94 -0
- package/dist/engine/indexer/async-file-scanner.js.map +1 -0
- package/dist/engine/indexer/index-helper.d.ts +6 -5
- package/dist/engine/indexer/index-helper.js +9 -11
- package/dist/engine/indexer/index-helper.js.map +1 -1
- package/dist/engine/indexer/indexing-engine.d.ts +4 -3
- package/dist/engine/indexer/indexing-engine.js +64 -45
- package/dist/engine/indexer/indexing-engine.js.map +1 -1
- package/dist/engine/indexer/module-helper.d.ts +3 -3
- package/dist/engine/indexer/module-helper.js +16 -18
- package/dist/engine/indexer/module-helper.js.map +1 -1
- package/dist/engine/indexer/sfdx-helper.d.ts +3 -3
- package/dist/engine/indexer/sfdx-helper.js +16 -20
- package/dist/engine/indexer/sfdx-helper.js.map +1 -1
- package/dist/engine/parsers/indexer/storage.d.ts +4 -4
- package/dist/engine/parsers/indexer/storage.js +16 -25
- package/dist/engine/parsers/indexer/storage.js.map +1 -1
- package/dist/engine/parsers/tree-sitter-indexer.d.ts +3 -3
- package/dist/engine/parsers/tree-sitter-indexer.js +6 -6
- package/dist/engine/parsers/tree-sitter-indexer.js.map +1 -1
- package/dist/engine/scanner/file-scanner.d.ts +13 -0
- package/dist/engine/scanner/file-scanner.js +14 -0
- package/dist/engine/scanner/file-scanner.js.map +1 -1
- package/dist/engine/tools/ai-context-tools.d.ts +1 -1
- package/dist/engine/tools/ai-context-tools.js +5 -2
- package/dist/engine/tools/ai-context-tools.js.map +1 -1
- package/dist/engine/tools/call-graph-tools.d.ts +1 -1
- package/dist/engine/tools/call-graph-tools.js +5 -2
- package/dist/engine/tools/call-graph-tools.js.map +1 -1
- package/dist/engine/tools/impact-tools.d.ts +1 -1
- package/dist/engine/tools/impact-tools.js +3 -1
- package/dist/engine/tools/impact-tools.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/code-intel/CodeIntelModule.js +3 -1
- package/dist/modules/code-intel/CodeIntelModule.js.map +1 -1
- package/dist/modules/kb-graph/service/sync.js +3 -3
- package/dist/modules/kb-graph/service/sync.js.map +1 -1
- package/dist/modules/memory/MemoryModule.d.ts +2 -0
- package/dist/modules/memory/MemoryModule.js +67 -37
- package/dist/modules/memory/MemoryModule.js.map +1 -1
- package/dist/modules/memory/__tests__/IsolationLayer.test.js.map +1 -1
- package/dist/modules/memory/__tests__/MemoryToolDispatcher.test.js +2 -1
- package/dist/modules/memory/__tests__/MemoryToolDispatcher.test.js.map +1 -1
- package/dist/modules/memory/__tests__/SA4E31-CrossWorkspaceIsolation.test.js +2 -1
- package/dist/modules/memory/__tests__/SA4E31-CrossWorkspaceIsolation.test.js.map +1 -1
- package/dist/modules/memory/__tests__/SmartIngest.test.js +3 -2
- package/dist/modules/memory/__tests__/SmartIngest.test.js.map +1 -1
- package/dist/modules/memory/__tests__/e2e/ingest-file-structured-map.e2e.test.d.ts +1 -0
- package/dist/modules/memory/__tests__/e2e/ingest-file-structured-map.e2e.test.js +114 -0
- package/dist/modules/memory/__tests__/e2e/ingest-file-structured-map.e2e.test.js.map +1 -0
- package/dist/modules/memory/dispatchers/analytics.js.map +1 -1
- package/dist/modules/memory/dispatchers/crud.d.ts +8 -2
- package/dist/modules/memory/dispatchers/crud.js +81 -28
- package/dist/modules/memory/dispatchers/crud.js.map +1 -1
- package/dist/modules/memory/dispatchers/dispatcher.d.ts +5 -0
- package/dist/modules/memory/dispatchers/dispatcher.js +10 -2
- package/dist/modules/memory/dispatchers/dispatcher.js.map +1 -1
- package/dist/modules/memory/dispatchers/evolution.js.map +1 -1
- package/dist/modules/memory/dispatchers/search.js.map +1 -1
- package/dist/modules/memory/dispatchers/smart-ingest.js.map +1 -1
- package/dist/modules/memory/dispatchers/supersession.js.map +1 -1
- package/dist/modules/memory/dispatchers/sync-code.js.map +1 -1
- package/dist/modules/memory/engine/core.d.ts +2 -2
- package/dist/modules/memory/engine/core.js +61 -33
- package/dist/modules/memory/engine/core.js.map +1 -1
- package/dist/modules/memory/engine/crud.d.ts +9 -4
- package/dist/modules/memory/engine/crud.js +33 -17
- package/dist/modules/memory/engine/crud.js.map +1 -1
- package/dist/modules/memory/evolution/CompositeScorer.d.ts +3 -3
- package/dist/modules/memory/evolution/CompositeScorer.js +5 -5
- package/dist/modules/memory/evolution/CompositeScorer.js.map +1 -1
- package/dist/modules/memory/evolution/OutcomeService.d.ts +4 -3
- package/dist/modules/memory/evolution/OutcomeService.js +10 -7
- package/dist/modules/memory/evolution/OutcomeService.js.map +1 -1
- package/dist/modules/memory/evolution/strategies/OutcomeStrategy.d.ts +2 -2
- package/dist/modules/memory/evolution/strategies/OutcomeStrategy.js +2 -2
- package/dist/modules/memory/evolution/strategies/OutcomeStrategy.js.map +1 -1
- package/dist/modules/memory/evolution/strategies/PredictiveStrategy.d.ts +3 -3
- package/dist/modules/memory/evolution/strategies/PredictiveStrategy.js +5 -5
- package/dist/modules/memory/evolution/strategies/PredictiveStrategy.js.map +1 -1
- package/dist/modules/memory/llm/LLMService.js +7 -7
- package/dist/modules/memory/llm/LLMService.js.map +1 -1
- package/dist/modules/memory/llm/__tests__/TagAnalyzerService.it.test.d.ts +1 -0
- package/dist/modules/memory/llm/__tests__/TagAnalyzerService.it.test.js +68 -0
- package/dist/modules/memory/llm/__tests__/TagAnalyzerService.it.test.js.map +1 -0
- package/dist/modules/memory/llm/__tests__/TagAnalyzerService.test.d.ts +1 -0
- package/dist/modules/memory/llm/__tests__/TagAnalyzerService.test.js +171 -0
- package/dist/modules/memory/llm/__tests__/TagAnalyzerService.test.js.map +1 -0
- package/dist/modules/memory/llm/__tests__/analyzeWithChunking.test.d.ts +1 -0
- package/dist/modules/memory/llm/__tests__/analyzeWithChunking.test.js +81 -0
- package/dist/modules/memory/llm/__tests__/analyzeWithChunking.test.js.map +1 -0
- package/dist/modules/memory/llm/__tests__/chunkContent.pbt.test.d.ts +1 -0
- package/dist/modules/memory/llm/__tests__/chunkContent.pbt.test.js +72 -0
- package/dist/modules/memory/llm/__tests__/chunkContent.pbt.test.js.map +1 -0
- package/dist/modules/memory/llm/__tests__/chunkContent.test.d.ts +1 -0
- package/dist/modules/memory/llm/__tests__/chunkContent.test.js +70 -0
- package/dist/modules/memory/llm/__tests__/chunkContent.test.js.map +1 -0
- package/dist/modules/memory/llm/__tests__/parseEnhancedResponse.pbt.test.d.ts +1 -0
- package/dist/modules/memory/llm/__tests__/parseEnhancedResponse.pbt.test.js +70 -0
- package/dist/modules/memory/llm/__tests__/parseEnhancedResponse.pbt.test.js.map +1 -0
- package/dist/modules/memory/llm/__tests__/parseEnhancedResponse.test.d.ts +1 -0
- package/dist/modules/memory/llm/__tests__/parseEnhancedResponse.test.js +120 -0
- package/dist/modules/memory/llm/__tests__/parseEnhancedResponse.test.js.map +1 -0
- package/dist/modules/memory/llm/__tests__/safeParseStructuredMap.pbt.test.d.ts +1 -0
- package/dist/modules/memory/llm/__tests__/safeParseStructuredMap.pbt.test.js +70 -0
- package/dist/modules/memory/llm/__tests__/safeParseStructuredMap.pbt.test.js.map +1 -0
- package/dist/modules/memory/llm/analyzer.d.ts +33 -6
- package/dist/modules/memory/llm/analyzer.js +118 -34
- package/dist/modules/memory/llm/analyzer.js.map +1 -1
- package/dist/modules/memory/llm/prompts.d.ts +1 -1
- package/dist/modules/memory/llm/prompts.js +32 -11
- package/dist/modules/memory/llm/prompts.js.map +1 -1
- package/dist/modules/memory/llm/types.d.ts +37 -0
- package/dist/modules/memory/llm/types.js +16 -1
- package/dist/modules/memory/llm/types.js.map +1 -1
- package/dist/modules/memory/migrations/003-pending-tasks.d.ts +7 -0
- package/dist/modules/memory/migrations/003-pending-tasks.js +33 -0
- package/dist/modules/memory/migrations/003-pending-tasks.js.map +1 -0
- package/dist/modules/memory/task-queue/PendingTaskRepository.d.ts +24 -0
- package/dist/modules/memory/task-queue/PendingTaskRepository.js +60 -0
- package/dist/modules/memory/task-queue/PendingTaskRepository.js.map +1 -0
- package/dist/modules/memory/task-queue/SqliteDbAdapter.d.ts +25 -0
- package/dist/modules/memory/task-queue/SqliteDbAdapter.js +59 -0
- package/dist/modules/memory/task-queue/SqliteDbAdapter.js.map +1 -0
- package/dist/modules/memory/task-queue/TaskWorker.d.ts +58 -0
- package/dist/modules/memory/task-queue/TaskWorker.js +249 -0
- package/dist/modules/memory/task-queue/TaskWorker.js.map +1 -0
- package/dist/modules/memory/task-queue/TaskWorkerConfig.d.ts +27 -0
- package/dist/modules/memory/task-queue/TaskWorkerConfig.js +17 -0
- package/dist/modules/memory/task-queue/TaskWorkerConfig.js.map +1 -0
- package/dist/modules/memory/task-queue/__tests__/TaskWorker.it.test.d.ts +1 -0
- package/dist/modules/memory/task-queue/__tests__/TaskWorker.it.test.js +345 -0
- package/dist/modules/memory/task-queue/__tests__/TaskWorker.it.test.js.map +1 -0
- package/dist/modules/memory/task-queue/__tests__/TaskWorker.test.d.ts +1 -0
- package/dist/modules/memory/task-queue/__tests__/TaskWorker.test.js +112 -0
- package/dist/modules/memory/task-queue/__tests__/TaskWorker.test.js.map +1 -0
- package/dist/modules/memory/task-queue/admin-handlers.d.ts +18 -0
- package/dist/modules/memory/task-queue/admin-handlers.js +20 -0
- package/dist/modules/memory/task-queue/admin-handlers.js.map +1 -0
- package/dist/modules/memory/task-queue/index.d.ts +11 -0
- package/dist/modules/memory/task-queue/index.js +10 -0
- package/dist/modules/memory/task-queue/index.js.map +1 -0
- package/dist/modules/memory/task-queue/models.d.ts +33 -0
- package/dist/modules/memory/task-queue/models.js +17 -0
- package/dist/modules/memory/task-queue/models.js.map +1 -0
- package/dist/modules/orchestration/OrchestrationModule.js.map +1 -1
- package/dist/modules/orchestration/reindex/ReindexSubscriberFactory.js.map +1 -1
- package/dist/server/__tests__/mcpServer.listtools.it.test.d.ts +2 -2
- package/dist/server/__tests__/mcpServer.listtools.it.test.js +7 -7
- package/dist/server/__tests__/mcpServer.listtools.it.test.js.map +1 -1
- package/dist/server/routes/admin/analytics.js +2 -1
- package/dist/server/routes/admin/analytics.js.map +1 -1
- package/dist/server/routes/admin/database.js +1 -1
- package/dist/server/routes/admin/database.js.map +1 -1
- package/dist/server/routes/admin/kb-entries.js +70 -1
- package/dist/server/routes/admin/kb-entries.js.map +1 -1
- package/dist/server/routes/admin/kb-graph-spatial.js +2 -3
- package/dist/server/routes/admin/kb-graph-spatial.js.map +1 -1
- package/dist/viewer/admin/index.html +1 -1
- package/docker-compose.test.yml +35 -0
- package/docker-compose.yml +75 -0
- package/documents/F1-memory-kb/BRD.md +597 -0
- package/documents/F1-memory-kb/FSD.md +756 -0
- package/documents/F1-memory-kb/STATUS.json +43 -0
- package/documents/F1-memory-kb/TDD.md +453 -0
- package/documents/F10-hook-system/BRD.md +434 -0
- package/documents/F10-hook-system/FSD.md +715 -0
- package/documents/F10-hook-system/STATUS.json +43 -0
- package/documents/F10-hook-system/TDD.md +642 -0
- package/documents/F11-webview-panels/BRD.md +432 -0
- package/documents/F11-webview-panels/FSD.md +669 -0
- package/documents/F11-webview-panels/STATUS.json +43 -0
- package/documents/F11-webview-panels/TDD.md +468 -0
- package/documents/F12-backend-connection/BRD.md +479 -0
- package/documents/F12-backend-connection/FSD.md +622 -0
- package/documents/F12-backend-connection/STATUS.json +43 -0
- package/documents/F12-backend-connection/TDD.md +386 -0
- package/documents/F2-code-intelligence/BRD.md +604 -0
- package/documents/F2-code-intelligence/FSD.md +492 -0
- package/documents/F2-code-intelligence/STATUS.json +43 -0
- package/documents/F2-code-intelligence/TDD.md +486 -0
- package/documents/F3-orchestration/BRD.md +527 -0
- package/documents/F3-orchestration/FSD.md +686 -0
- package/documents/F3-orchestration/STATUS.json +43 -0
- package/documents/F3-orchestration/TDD.md +477 -0
- package/documents/F4-context-assembly/BRD.md +448 -0
- package/documents/F4-context-assembly/FSD.md +372 -0
- package/documents/F4-context-assembly/STATUS.json +43 -0
- package/documents/F4-context-assembly/TDD.md +338 -0
- package/documents/F5-incremental-indexer/BRD.md +472 -0
- package/documents/F5-incremental-indexer/FSD.md +800 -0
- package/documents/F5-incremental-indexer/STATUS.json +16 -0
- package/documents/F5-incremental-indexer/TDD.md +628 -0
- package/documents/F6-drawio-engine/BRD.md +365 -0
- package/documents/F6-drawio-engine/FSD.md +1100 -0
- package/documents/F6-drawio-engine/STATUS.json +43 -0
- package/documents/F6-drawio-engine/TDD.md +581 -0
- package/documents/F7-langgraph-pipeline/BRD.md +520 -0
- package/documents/F7-langgraph-pipeline/FSD.md +597 -0
- package/documents/F7-langgraph-pipeline/STATUS.json +43 -0
- package/documents/F7-langgraph-pipeline/TDD.md +421 -0
- package/documents/F8-chat-panel/BRD.md +479 -0
- package/documents/F8-chat-panel/FSD.md +719 -0
- package/documents/F8-chat-panel/STATUS.json +43 -0
- package/documents/F8-chat-panel/TDD.md +459 -0
- package/documents/F9-auth-sso/BRD.md +356 -0
- package/documents/F9-auth-sso/FSD.md +663 -0
- package/documents/F9-auth-sso/STATUS.json +43 -0
- package/documents/F9-auth-sso/TDD.md +708 -0
- package/documents/FAILURE-MODES.md +112 -0
- package/documents/LOOP-ENGINEERING-PLAN.md +279 -0
- package/documents/SA4E-12/BRD.md +454 -0
- package/documents/SA4E-12/FSD.md +639 -0
- package/documents/SA4E-12/STATUS.json +59 -0
- package/documents/SA4E-12/STC.md +1502 -0
- package/documents/SA4E-12/STP.md +348 -0
- package/documents/SA4E-12/TDD.md +427 -0
- package/documents/SA4E-12/TEST-REPORT-SA4E-12.csv +66 -0
- package/documents/SA4E-12/test-data/api-keys.csv +16 -0
- package/documents/SA4E-12/test-data/models.csv +18 -0
- package/documents/SA4E-12/test-data/providers.csv +7 -0
- package/documents/SA4E-124/BRD.md +126 -0
- package/documents/SA4E-124/DPG+RLN.md +74 -0
- package/documents/SA4E-124/FSD.md +102 -0
- package/documents/SA4E-124/RUN-LOG.md +13 -0
- package/documents/SA4E-124/STATUS.json +18 -0
- package/documents/SA4E-124/STP+STC.md +118 -0
- package/documents/SA4E-124/TDD.md +87 -0
- package/documents/SA4E-125/Architecture-v2.md +165 -0
- package/documents/SA4E-125/Architecture-v3.md +99 -0
- package/documents/SA4E-125/Architecture-v4.md +122 -0
- package/documents/SA4E-125/Architecture-v5.md +140 -0
- package/documents/SA4E-125/Architecture-v6.md +94 -0
- package/documents/SA4E-125/BRD.md +168 -0
- package/documents/SA4E-125/DPG.md +189 -0
- package/documents/SA4E-125/FSD.md +742 -0
- package/documents/SA4E-125/Langgrap.md +648 -0
- package/documents/SA4E-125/Langgraph-Module-Reference.md +448 -0
- package/documents/SA4E-125/STATUS.json +18 -0
- package/documents/SA4E-125/STC.md +410 -0
- package/documents/SA4E-125/STP.md +101 -0
- package/documents/SA4E-125/TDD.md +252 -0
- package/documents/SA4E-125/UG.md +153 -0
- package/documents/SA4E-125/review-1.md +244 -0
- package/documents/SA4E-125/review-2.md +93 -0
- package/documents/SA4E-125/review-3.md +90 -0
- package/documents/SA4E-125/review-4.md +119 -0
- package/documents/SA4E-125/review-5.md +94 -0
- package/documents/SA4E-125/review-6.md +75 -0
- package/documents/SA4E-14/BRD.md +532 -0
- package/documents/SA4E-14/FSD.md +890 -0
- package/documents/SA4E-14/SECURITY-REPORT.md +470 -0
- package/documents/SA4E-14/STATUS.json +16 -0
- package/documents/SA4E-14/STC.md +337 -0
- package/documents/SA4E-14/STP.md +170 -0
- package/documents/SA4E-14/TDD.md +653 -0
- package/documents/SA4E-18/BRD-v1-SA4E-18.docx +0 -0
- package/documents/SA4E-18/BRD.md +382 -0
- package/documents/SA4E-18/FSD-v1-SA4E-18.docx +0 -0
- package/documents/SA4E-18/FSD.md +895 -0
- package/documents/SA4E-18/STATUS.json +23 -0
- package/documents/SA4E-18/STC-v1-SA4E-18.docx +0 -0
- package/documents/SA4E-18/STC.md +998 -0
- package/documents/SA4E-18/STP-v1-SA4E-18.docx +0 -0
- package/documents/SA4E-18/STP.md +323 -0
- package/documents/SA4E-18/TDD-v1-SA4E-18.docx +0 -0
- package/documents/SA4E-18/TDD.md +827 -0
- package/documents/SA4E-18/TEST-REPORT-SA4E-18.csv +35 -0
- package/documents/SA4E-18/TEST-REPORT-v1-SA4E-18.docx +0 -0
- package/documents/SA4E-18/TEST-REPORT.md +122 -0
- package/documents/SA4E-26/BRD-v1-SA4E-26.docx +0 -0
- package/documents/SA4E-26/BRD.md +306 -0
- package/documents/SA4E-26/DPG-v1-SA4E-26.docx +0 -0
- package/documents/SA4E-26/DPG.md +210 -0
- package/documents/SA4E-26/FSD-v1-SA4E-26.docx +0 -0
- package/documents/SA4E-26/FSD.md +953 -0
- package/documents/SA4E-26/RLN-v1-SA4E-26.docx +0 -0
- package/documents/SA4E-26/RLN.md +122 -0
- package/documents/SA4E-26/RUN-LOG.md +41 -0
- package/documents/SA4E-26/STATUS.json +25 -0
- package/documents/SA4E-26/STC-v1-SA4E-26.docx +0 -0
- package/documents/SA4E-26/STC.md +1011 -0
- package/documents/SA4E-26/STP-v1-SA4E-26.docx +0 -0
- package/documents/SA4E-26/STP.md +292 -0
- package/documents/SA4E-26/TDD-v1-SA4E-26.docx +0 -0
- package/documents/SA4E-26/TDD.md +506 -0
- package/documents/SA4E-27/BRD.md +471 -0
- package/documents/SA4E-27/FSD.md +1100 -0
- package/documents/SA4E-27/RUN-LOG.md +5 -0
- package/documents/SA4E-27/STATUS.json +15 -0
- package/documents/SA4E-27/TDD.md +1156 -0
- package/documents/SA4E-28/RUN-LOG.md +9 -0
- package/documents/SA4E-28/STATUS.json +24 -0
- package/documents/SA4E-28/TICKET-PLAN.md +121 -0
- package/documents/SA4E-29/ARCHITECTURE-BASE64-PROXY.md +145 -0
- package/documents/SA4E-29/BRD.md +366 -0
- package/documents/SA4E-29/FSD.md +675 -0
- package/documents/SA4E-29/RUN-LOG.md +5 -0
- package/documents/SA4E-29/STATUS.json +16 -0
- package/documents/SA4E-29/STC.md +667 -0
- package/documents/SA4E-29/STP.md +299 -0
- package/documents/SA4E-29/TDD.md +491 -0
- package/documents/SA4E-30/BRD.md +258 -0
- package/documents/SA4E-30/FSD.md +168 -0
- package/documents/SA4E-30/RUN-LOG.md +5 -0
- package/documents/SA4E-30/STATUS.json +32 -0
- package/documents/SA4E-30/TDD.md +153 -0
- package/documents/SA4E-31/RUN-LOG.md +39 -0
- package/documents/SA4E-31/STATUS.json +53 -0
- package/documents/SA4E-32/BRD.md +163 -0
- package/documents/SA4E-32/FSD.md +226 -0
- package/documents/SA4E-32/RUN-LOG.md +11 -0
- package/documents/SA4E-32/STATUS.json +18 -0
- package/documents/SA4E-32/STC.md +64 -0
- package/documents/SA4E-32/STP.md +72 -0
- package/documents/SA4E-32/TDD.md +132 -0
- package/documents/SA4E-34/BRD.md +324 -0
- package/documents/SA4E-34/FSD.md +291 -0
- package/documents/SA4E-34/RUN-LOG.md +14 -0
- package/documents/SA4E-34/STATUS.json +31 -0
- package/documents/SA4E-34/TDD.md +236 -0
- package/documents/SA4E-35/BRD.md +79 -0
- package/documents/SA4E-35/RUN-LOG.md +9 -0
- package/documents/SA4E-35/STATUS.json +14 -0
- package/documents/SA4E-36/BRD.md +485 -0
- package/documents/SA4E-36/FSD.md +886 -0
- package/documents/SA4E-36/RUN-LOG.md +30 -0
- package/documents/SA4E-36/STATUS.json +46 -0
- package/documents/SA4E-36/STC.md +1376 -0
- package/documents/SA4E-36/STP.md +445 -0
- package/documents/SA4E-36/TDD.md +846 -0
- package/documents/SA4E-36/UG.md +240 -0
- package/documents/SA4E-37/BRD.md +350 -0
- package/documents/SA4E-37/FSD.md +1087 -0
- package/documents/SA4E-37/RUN-LOG.md +14 -0
- package/documents/SA4E-37/STATUS.json +32 -0
- package/documents/SA4E-37/TDD.md +498 -0
- package/documents/SA4E-37/UG.md +135 -0
- package/documents/SA4E-38/BRD.md +441 -0
- package/documents/SA4E-38/FSD.md +671 -0
- package/documents/SA4E-38/RUN-LOG.md +12 -0
- package/documents/SA4E-38/STC.md +1286 -0
- package/documents/SA4E-38/STP.md +360 -0
- package/documents/SA4E-38/TDD.md +737 -0
- package/documents/SA4E-38/UG.md +78 -0
- package/documents/SA4E-38/test-data/business-messages.csv +11 -0
- package/documents/SA4E-38/test-data/edge-case-messages.csv +12 -0
- package/documents/SA4E-38/test-data/llm-mock-responses.csv +11 -0
- package/documents/SA4E-38/test-data/social-messages.csv +11 -0
- package/documents/SA4E-38/test-data/unfiltered-entries-seed.csv +11 -0
- package/documents/SA4E-39/RUN-LOG.md +11 -0
- package/documents/SA4E-39/STATUS.json +22 -0
- package/documents/SA4E-40/RUN-LOG.md +9 -0
- package/documents/SA4E-42/BRD.md +329 -0
- package/documents/SA4E-42/FSD.md +873 -0
- package/documents/SA4E-42/PENTEST-REPORT.md +247 -0
- package/documents/SA4E-42/RUN-LOG.md +24 -0
- package/documents/SA4E-42/SECURITY-REVIEW.md +430 -0
- package/documents/SA4E-42/STATUS.json +38 -0
- package/documents/SA4E-42/STC.md +351 -0
- package/documents/SA4E-42/STP.md +340 -0
- package/documents/SA4E-42/TDD.md +344 -0
- package/documents/SA4E-42/TEST-REPORT.md +198 -0
- package/documents/SA4E-42/test-data-events.csv +15 -0
- package/documents/SA4E-42/test-data-tools.csv +14 -0
- package/documents/SA4E-44/BRD.md +614 -0
- package/documents/SA4E-44/DISCREPANCY.md +82 -0
- package/documents/SA4E-44/DPG.md +170 -0
- package/documents/SA4E-44/FSD.md +1340 -0
- package/documents/SA4E-44/RLN.md +176 -0
- package/documents/SA4E-44/RUN-LOG.md +41 -0
- package/documents/SA4E-44/SECURITY-ASSESSMENT.md +465 -0
- package/documents/SA4E-44/SECURITY-REVIEW.md +287 -0
- package/documents/SA4E-44/STATUS.json +31 -0
- package/documents/SA4E-44/STC.md +1794 -0
- package/documents/SA4E-44/STP.md +281 -0
- package/documents/SA4E-44/TDD-REFACTOR-PG.md +171 -0
- package/documents/SA4E-44/TDD.md +1130 -0
- package/documents/SA4E-44/UG.md +147 -0
- package/documents/SA4E-45/BRD.md +413 -0
- package/documents/SA4E-45/FSD.md +1549 -0
- package/documents/SA4E-45/RUN-LOG.md +18 -0
- package/documents/SA4E-45/SECURITY-REVIEW.md +487 -0
- package/documents/SA4E-45/STATUS.json +35 -0
- package/documents/SA4E-45/STC.md +1080 -0
- package/documents/SA4E-45/STP.md +249 -0
- package/documents/SA4E-45/TDD.md +648 -0
- package/documents/SA4E-45/deployment_guide.md +209 -0
- package/documents/SA4E-45/release_notes.md +118 -0
- package/documents/SA4E-45/test-data/dialect-inputs.csv +9 -0
- package/documents/SA4E-45/test-data/fts-queries.csv +11 -0
- package/documents/SA4E-45/test-data/graph-symbols.csv +11 -0
- package/documents/SA4E-45/test-data/knowledge-entries.csv +11 -0
- package/documents/SA4E-45/test-data/migration-tables.csv +17 -0
- package/documents/SA4E-45/test-data/security-inputs.csv +13 -0
- package/documents/SA4E-47/BRD.md +721 -0
- package/documents/SA4E-47/FSD.md +1150 -0
- package/documents/SA4E-47/STC.md +1126 -0
- package/documents/SA4E-47/STP.md +409 -0
- package/documents/SA4E-47/TDD.md +1450 -0
- package/documents/SA4E-47/TEST-REPORT-SA4E-47.csv +36 -0
- package/documents/SA4E-6/BRD-TOUCH.md +366 -0
- package/documents/SA4E-6/BRD.md +531 -0
- package/documents/SA4E-6/FSD.md +1621 -0
- package/documents/SA4E-6/STATUS.json +19 -0
- package/documents/SA4E-6/TDD-TOUCH.md +768 -0
- package/documents/SA4E-6/TDD.md +1123 -0
- package/documents/SA4E-CODEINTEL-MT/RUN-LOG.md +27 -0
- package/documents/SA4E-CODEINTEL-MT/SECURITY-ASSESSMENT.md +197 -0
- package/documents/SA4E-CODEINTEL-MT/STATUS.json +25 -0
- package/documents/SA4E-CODEINTEL-MT/TDD.md +746 -0
- package/documents/SKILLS-REPO-TICKETS.md +64 -0
- package/documents/analysis/langgraph-vs-deerflow-report.md +603 -0
- package/documents/drawio-optimize/drawio-anti-edge-collision.md +97 -0
- package/documents/evolution-memory/Soliution-3-GPT.md +649 -0
- package/documents/evolution-memory/Solution-1-Deepseek.md +267 -0
- package/documents/evolution-memory/Solution-2-Grok.md +166 -0
- package/documents/evolution-memory/Solution4-gemini.pdf +0 -0
- package/documents/workflows/SA4E-workflows.md +167 -0
- package/extension/src/__tests__/backend-local-tools.test.ts +156 -46
- package/extension/src/__tests__/code-intel.test.ts +356 -0
- package/extension/src/__tests__/wrapper-server.helpers.ts +118 -0
- package/extension/src/__tests__/wrapper-server.test.ts +198 -0
- package/extension/src/backend-local-tools.ts +68 -74
- package/extension/src/code-intel/CodeIntelScanner.ts +157 -0
- package/extension/src/code-intel/CodeIntelUploader.ts +82 -0
- package/extension/src/code-intel/FileChangeWatcher.ts +132 -0
- package/extension/src/code-intel/HashCache.ts +57 -0
- package/extension/src/code-intel/OfflineQueue.ts +61 -0
- package/extension/src/code-intel/TimestampResolver.ts +62 -0
- package/extension/src/code-intel/index.ts +12 -0
- package/extension/src/code-intel/models.ts +83 -0
- package/extension/src/extension.ts +22 -0
- package/extension/src/file-meta.ts +92 -0
- package/extension/src/indexer-http.ts +4 -3
- package/extension/src/langgraph/agents/analyze-input-node.ts +6 -4
- package/extension/src/langgraph/agents/dynamic-agent-node.ts +13 -8
- package/extension/src/langgraph/agents/registry.ts +1 -1
- package/extension/src/langgraph/core/mcp-bridge.ts +1 -1
- package/extension/src/langgraph/core/stream-handler.ts +1 -1
- package/extension/src/langgraph/engine/engine-chat-handler.ts +1 -1
- package/extension/src/langgraph/engine/langgraph-engine.ts +3 -2
- package/extension/src/langgraph/hooks/hook-engine.ts +13 -0
- package/extension/src/langgraph/index.ts +1 -2
- package/extension/src/langgraph/pipeline/sdlc-graph.ts +10 -10
- package/extension/src/langgraph/pipeline/sdlc-node-factory.ts +2 -1
- package/extension/src/langgraph/subgraphs/core/checkpointer.ts +4 -0
- package/extension/src/langgraph/subgraphs/core/llm-provider.ts +4 -0
- package/extension/src/langgraph/subgraphs/core/mcp-bridge.ts +4 -0
- package/extension/src/langgraph/subgraphs/core/stream-handler.ts +4 -0
- package/extension/src/langgraph/subgraphs/hooks/hook-engine.ts +4 -0
- package/extension/src/proxy/HttpClient.ts +9 -0
- package/extension/src/remote-backend-client.ts +76 -129
- package/extension/src/services/Base64ProxyService.ts +180 -0
- package/extension/src/services/IndexerHttpClient.ts +92 -11
- package/extension/src/services/IndexingService.ts +37 -24
- package/extension/src/services/WrapperServer.ts +183 -0
- package/minimal-err.txt +12 -0
- package/minimal-out.txt +0 -0
- package/minimal.js +12 -0
- package/package.json +1 -1
- package/scripts/db/init.sql +10 -0
- package/scripts/run-migrations.ts +221 -0
- package/scripts/verify-migrations.ts +76 -0
- package/src/__tests__/sa4e-testkit.ts +3 -2
- package/src/database/dialect/DialectHelper.ts +24 -0
- package/src/database/index.ts +1 -0
- package/src/engine/database/graph-repository.ts +39 -41
- package/src/engine/database/migrator.ts +20 -20
- package/src/engine/db/migrations.ts +2 -1
- package/src/engine/graph/__tests__/graph-isolation.test.ts +5 -4
- package/src/engine/graph/__tests__/graph-services.test.ts +10 -9
- package/src/engine/graph/__tests__/graph-sync-service.test.ts +6 -5
- package/src/engine/graph/graph-sync-service.ts +25 -19
- package/src/engine/indexer/__tests__/tree-sitter-pipeline.test.ts +7 -6
- package/src/engine/indexer/async-file-scanner.ts +109 -0
- package/src/engine/indexer/index-helper.ts +21 -17
- package/src/engine/indexer/indexing-engine.ts +62 -43
- package/src/engine/indexer/module-helper.ts +24 -22
- package/src/engine/indexer/sfdx-helper.ts +24 -23
- package/src/engine/parsers/indexer/storage.ts +17 -26
- package/src/engine/parsers/tree-sitter-indexer.ts +7 -7
- package/src/engine/scanner/file-scanner.ts +25 -0
- package/src/engine/tools/ai-context-tools.ts +6 -3
- package/src/engine/tools/call-graph-tools.ts +6 -3
- package/src/engine/tools/impact-tools.ts +4 -2
- package/src/index.ts +1 -1
- package/src/modules/code-intel/CodeIntelModule.ts +3 -1
- package/src/modules/kb-graph/service/sync.ts +3 -3
- package/src/modules/memory/MemoryModule.ts +70 -37
- package/src/modules/memory/__tests__/IsolationLayer.test.ts +4 -4
- package/src/modules/memory/__tests__/MemoryToolDispatcher.test.ts +2 -1
- package/src/modules/memory/__tests__/SA4E31-CrossWorkspaceIsolation.test.ts +2 -1
- package/src/modules/memory/__tests__/SmartIngest.test.ts +3 -2
- package/src/modules/memory/__tests__/e2e/ingest-file-structured-map.e2e.test.ts +131 -0
- package/src/modules/memory/dispatchers/analytics.ts +1 -1
- package/src/modules/memory/dispatchers/crud.ts +93 -29
- package/src/modules/memory/dispatchers/dispatcher.ts +13 -2
- package/src/modules/memory/dispatchers/evolution.ts +3 -3
- package/src/modules/memory/dispatchers/search.ts +2 -2
- package/src/modules/memory/dispatchers/smart-ingest.ts +4 -4
- package/src/modules/memory/dispatchers/supersession.ts +2 -2
- package/src/modules/memory/dispatchers/sync-code.ts +1 -1
- package/src/modules/memory/engine/core.ts +99 -61
- package/src/modules/memory/engine/crud.ts +40 -24
- package/src/modules/memory/evolution/CompositeScorer.ts +6 -6
- package/src/modules/memory/evolution/OutcomeService.ts +20 -13
- package/src/modules/memory/evolution/strategies/OutcomeStrategy.ts +3 -3
- package/src/modules/memory/evolution/strategies/PredictiveStrategy.ts +7 -6
- package/src/modules/memory/llm/LLMService.ts +7 -7
- package/src/modules/memory/llm/__tests__/TagAnalyzerService.it.test.ts +81 -0
- package/src/modules/memory/llm/__tests__/TagAnalyzerService.test.ts +196 -0
- package/src/modules/memory/llm/__tests__/analyzeWithChunking.test.ts +91 -0
- package/src/modules/memory/llm/__tests__/chunkContent.pbt.test.ts +102 -0
- package/src/modules/memory/llm/__tests__/chunkContent.test.ts +77 -0
- package/src/modules/memory/llm/__tests__/parseEnhancedResponse.pbt.test.ts +89 -0
- package/src/modules/memory/llm/__tests__/parseEnhancedResponse.test.ts +130 -0
- package/src/modules/memory/llm/__tests__/safeParseStructuredMap.pbt.test.ts +83 -0
- package/src/modules/memory/llm/analyzer.ts +161 -56
- package/src/modules/memory/llm/prompts.ts +32 -11
- package/src/modules/memory/llm/types.ts +49 -0
- package/src/modules/memory/migrations/003-pending-tasks.ts +38 -0
- package/src/modules/memory/task-queue/PendingTaskRepository.ts +94 -0
- package/src/modules/memory/task-queue/SqliteDbAdapter.ts +79 -0
- package/src/modules/memory/task-queue/TaskWorker.ts +274 -0
- package/src/modules/memory/task-queue/TaskWorkerConfig.ts +42 -0
- package/src/modules/memory/task-queue/__tests__/TaskWorker.it.test.ts +387 -0
- package/src/modules/memory/task-queue/__tests__/TaskWorker.test.ts +131 -0
- package/src/modules/memory/task-queue/admin-handlers.ts +22 -0
- package/src/modules/memory/task-queue/index.ts +12 -0
- package/src/modules/memory/task-queue/models.ts +37 -0
- package/src/modules/orchestration/OrchestrationModule.ts +1 -1
- package/src/modules/orchestration/reindex/ReindexSubscriberFactory.ts +1 -1
- package/src/server/__tests__/mcpServer.listtools.it.test.ts +7 -7
- package/src/server/routes/admin/analytics.ts +2 -1
- package/src/server/routes/admin/database.ts +1 -1
- package/src/server/routes/admin/kb-entries.ts +68 -1
- package/src/server/routes/admin/kb-graph-spatial.ts +2 -3
- package/src/viewer/admin/index.html +1 -1
- package/tests/integration/drawio-export.test.ts +33 -37
- package/tests/integration/mcp-drawio-dispatch.test.ts +8 -11
- package/tests/integration/pg-memory.test.ts +196 -0
package/.dockerignore
ADDED
package/.env.example
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# SA4E-44 Environment Variables
|
|
2
|
+
# Copy to .env and fill in values
|
|
3
|
+
|
|
4
|
+
# --- Server ---
|
|
5
|
+
NODE_ENV=development
|
|
6
|
+
PORT=48721
|
|
7
|
+
|
|
8
|
+
# --- Database ---
|
|
9
|
+
DATABASE_ADAPTER=postgresql
|
|
10
|
+
DATABASE_URL=postgresql://sa4e_user:sa4e_local_dev_password@localhost:5432/sa4e_db
|
|
11
|
+
|
|
12
|
+
# --- Task Worker (Part 1) ---
|
|
13
|
+
TASK_WORKER_ENABLED=true
|
|
14
|
+
TASK_WORKER_POLL_INTERVAL_MS=5000
|
|
15
|
+
TASK_WORKER_MAX_RETRIES=3
|
|
16
|
+
TASK_WORKER_BACKOFF_BASE_MS=1000
|
|
17
|
+
TASK_WORKER_MAX_CONCURRENT=1
|
|
18
|
+
TASK_WORKER_DEAD_LETTER_ENABLED=true
|
|
19
|
+
|
|
20
|
+
# --- Code Intelligence (Part 2) ---
|
|
21
|
+
CODE_INTEL_ENABLED=true
|
|
22
|
+
CODE_INTEL_MAX_BATCH_SIZE=100
|
|
23
|
+
CODE_INTEL_UPLOAD_TIMEOUT_MS=30000
|
|
24
|
+
CODE_INTEL_VECTOR_ENABLED=false
|
|
25
|
+
|
|
26
|
+
# --- ONNX Runtime (optional --- for embeddings) ---
|
|
27
|
+
ONNX_RUNTIME_URL=http://localhost:8080
|
|
28
|
+
ONNX_MODEL_PATH=./models/all-MiniLM-L6-v2
|
|
29
|
+
|
|
30
|
+
# --- Security ---
|
|
31
|
+
API_KEY=
|
|
32
|
+
API_KEY_REQUIRED=false
|
|
33
|
+
|
|
34
|
+
# --- Logging ---
|
|
35
|
+
LOG_LEVEL=info
|
|
36
|
+
LOG_FORMAT=pretty
|
package/.env.test
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# SA4E-44 Test Environment Variables
|
|
2
|
+
NODE_ENV=test
|
|
3
|
+
PORT=48722
|
|
4
|
+
|
|
5
|
+
DATABASE_ADAPTER=postgresql
|
|
6
|
+
DATABASE_URL=postgresql://sa4e_user:sa4e_test_password@localhost:5433/sa4e_db_test
|
|
7
|
+
|
|
8
|
+
TASK_WORKER_ENABLED=true
|
|
9
|
+
TASK_WORKER_POLL_INTERVAL_MS=100
|
|
10
|
+
TASK_WORKER_MAX_RETRIES=2
|
|
11
|
+
TASK_WORKER_BACKOFF_BASE_MS=50
|
|
12
|
+
TASK_WORKER_MAX_CONCURRENT=1
|
|
13
|
+
TASK_WORKER_DEAD_LETTER_ENABLED=true
|
|
14
|
+
|
|
15
|
+
CODE_INTEL_ENABLED=true
|
|
16
|
+
CODE_INTEL_MAX_BATCH_SIZE=100
|
|
17
|
+
CODE_INTEL_UPLOAD_TIMEOUT_MS=5000
|
|
18
|
+
CODE_INTEL_VECTOR_ENABLED=false
|
|
19
|
+
|
|
20
|
+
API_KEY=test-api-key-sa4e-44
|
|
21
|
+
API_KEY_REQUIRED=true
|
|
22
|
+
|
|
23
|
+
LOG_LEVEL=warn
|
|
24
|
+
LOG_FORMAT=json
|
package/.huskyrc.json
ADDED
package/Dockerfile
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SA4E-44 Backend Dockerfile
|
|
2
|
+
# Node.js 20 + Hono backend for Code Intelligence MCP Server
|
|
3
|
+
FROM node:20-alpine AS base
|
|
4
|
+
|
|
5
|
+
WORKDIR /app
|
|
6
|
+
|
|
7
|
+
# Install dependencies for native modules (better-sqlite3, onnxruntime-node)
|
|
8
|
+
RUN apk add --no-cache python3 make g++ git
|
|
9
|
+
|
|
10
|
+
# --- Dependencies stage ---
|
|
11
|
+
FROM base AS deps
|
|
12
|
+
COPY package.json package-lock.json ./
|
|
13
|
+
RUN npm ci --omit=dev
|
|
14
|
+
|
|
15
|
+
# --- Build stage ---
|
|
16
|
+
FROM base AS build
|
|
17
|
+
COPY package.json package-lock.json ./
|
|
18
|
+
RUN npm ci
|
|
19
|
+
COPY tsconfig.json ./
|
|
20
|
+
COPY src/ ./src/
|
|
21
|
+
RUN npm run build
|
|
22
|
+
|
|
23
|
+
# --- Production stage ---
|
|
24
|
+
FROM node:20-alpine AS production
|
|
25
|
+
|
|
26
|
+
WORKDIR /app
|
|
27
|
+
|
|
28
|
+
# Runtime dependencies only
|
|
29
|
+
RUN apk add --no-cache git
|
|
30
|
+
|
|
31
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
32
|
+
COPY --from=build /app/dist ./dist
|
|
33
|
+
COPY --from=build /app/package.json ./
|
|
34
|
+
|
|
35
|
+
# Create non-root user
|
|
36
|
+
RUN addgroup -g 1001 -S sa4e && \
|
|
37
|
+
adduser -S sa4e -u 1001 -G sa4e && \
|
|
38
|
+
mkdir -p /app/.code-intel && \
|
|
39
|
+
chown -R sa4e:sa4e /app
|
|
40
|
+
|
|
41
|
+
USER sa4e
|
|
42
|
+
|
|
43
|
+
ENV NODE_ENV=production
|
|
44
|
+
ENV PORT=48721
|
|
45
|
+
|
|
46
|
+
EXPOSE 48721
|
|
47
|
+
|
|
48
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
49
|
+
CMD wget --no-verbose --tries=1 --spider http://localhost:48721/health || exit 1
|
|
50
|
+
|
|
51
|
+
CMD ["node", "dist/index.js"]
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<img src="https://img.shields.io/badge/version-1.
|
|
9
|
+
<img src="https://img.shields.io/badge/version-1.12.0-blue?style=for-the-badge" alt="Version">
|
|
10
10
|
<img src="https://img.shields.io/badge/tools-66+-teal?style=for-the-badge" alt="Tools">
|
|
11
11
|
<img src="https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge" alt="Node">
|
|
12
12
|
</p>
|
|
@@ -233,6 +233,10 @@ The embedding model is expected at `.code-intel/models/model.onnx`. Download it:
|
|
|
233
233
|
|
|
234
234
|
| Version | Date | Ticket | Changes |
|
|
235
235
|
|---------|------|--------|---------|
|
|
236
|
+
| 1.12.0 | 2026-07-19 | — | Version bump + README sync across all packages |
|
|
237
|
+
| 1.11.0 | 2026-07-18 | SA4E-42/47 | DatabaseAdapter refactoring (engine, memory, graph, indexer) + LLM Context Chain for document indexing (analyzer, prompts, TaskWorker, structured_map, full content extraction). 66 files, 570 tests pass. |
|
|
238
|
+
| 1.10.1 | 2026-07-16 | — | Bump version + update README |
|
|
239
|
+
| 1.9.0 | 2026-07-15 | — | Agent Sync to All Platforms — 9 agent prompts synced to 5 conversion targets + root `.claude/` and `.opencode/` folders |
|
|
236
240
|
| 1.8.1 | 2026-07-15 | SA4E-38 | Smart KB Ingest: `mem_smart_ingest` + `mem_smart_ingest_cleanup` tools using local Ollama LLM for semantic evaluation before KB ingestion. ClassifyService + SmartIngestHandler. |
|
|
237
241
|
| 1.8.0 | 2026-07-15 | SA4E-36 | Multi-tenant RBAC: Project isolation via X-Project-Id header, per-user KB scoping, access group permissions, impersonation. |
|
|
238
242
|
| 1.7.0 | 2026-07-15 | SA4E-37 | Health Check & Auto-Reconnect: HealthMonitor (parallel pings), ReconnectManager (exponential backoff + jitter), ConnectionStateTracker (state machine + events), TransportFactory. McpClientManager refactored as Facade. 54 unit tests. |
|
|
@@ -46,4 +46,4 @@ export interface McpHarness {
|
|
|
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
48
|
/** The canonical 10 CORE tool names (5 memory + 3 meta + 2 drawio). */
|
|
49
|
-
export declare const
|
|
49
|
+
export declare const CORE_10: string[];
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { DatabaseManager } from '../engine/db/database-manager.js';
|
|
6
6
|
import { MemoryEngine } from '../modules/memory/engine/index.js';
|
|
7
|
+
import { SqliteDbAdapter } from '../modules/memory/task-queue/SqliteDbAdapter.js';
|
|
7
8
|
import pino from 'pino';
|
|
8
9
|
import * as fs from 'fs';
|
|
9
10
|
import * as os from 'os';
|
|
@@ -16,7 +17,7 @@ export function makeTempDb() {
|
|
|
16
17
|
const dbPath = path.join(tmpDir, 'index.db');
|
|
17
18
|
const dbManager = new DatabaseManager(dbPath);
|
|
18
19
|
dbManager.initialize();
|
|
19
|
-
const engine = new MemoryEngine(dbManager.getDb());
|
|
20
|
+
const engine = new MemoryEngine(new SqliteDbAdapter(dbManager.getDb()));
|
|
20
21
|
return {
|
|
21
22
|
dbManager,
|
|
22
23
|
engine,
|
|
@@ -77,7 +78,7 @@ export async function connectMcp(registry) {
|
|
|
77
78
|
};
|
|
78
79
|
}
|
|
79
80
|
/** The canonical 10 CORE tool names (5 memory + 3 meta + 2 drawio). */
|
|
80
|
-
export const
|
|
81
|
+
export const CORE_10 = [
|
|
81
82
|
'mem_search', 'mem_ingest', 'mem_ingest_file', 'code_search',
|
|
82
83
|
'get_curated_context', 'find_tools', 'execute_dynamic_tool', 'orchestration_status',
|
|
83
84
|
'drawio_export_png', 'drawio_auto_layout',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sa4e-testkit.js","sourceRoot":"","sources":["../../src/__tests__/sa4e-testkit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"sa4e-testkit.js","sourceRoot":"","sources":["../../src/__tests__/sa4e-testkit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DatabaseEngine } from '../adapters/DatabaseAdapter.js';
|
|
2
|
+
export declare class DialectHelper {
|
|
3
|
+
private readonly engine;
|
|
4
|
+
constructor(engine: DatabaseEngine);
|
|
5
|
+
now(): string;
|
|
6
|
+
upsert(table: string, columns: string[], conflictKey: string, updateColumns: string[]): string;
|
|
7
|
+
insertIgnore(table: string, columns: string[], conflictKey: string): string;
|
|
8
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class DialectHelper {
|
|
2
|
+
engine;
|
|
3
|
+
constructor(engine) {
|
|
4
|
+
this.engine = engine;
|
|
5
|
+
}
|
|
6
|
+
now() {
|
|
7
|
+
return this.engine === 'sqlite' ? "datetime('now')" : 'NOW()';
|
|
8
|
+
}
|
|
9
|
+
upsert(table, columns, conflictKey, updateColumns) {
|
|
10
|
+
if (this.engine === 'sqlite') {
|
|
11
|
+
return `INSERT OR REPLACE INTO ${table} (${columns.join(', ')}) VALUES (${columns.map(() => '?').join(', ')})`;
|
|
12
|
+
}
|
|
13
|
+
const setClauses = updateColumns.map(c => `${c} = EXCLUDED.${c}`).join(', ');
|
|
14
|
+
return `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${columns.map(() => '?').join(', ')}) ON CONFLICT (${conflictKey}) DO UPDATE SET ${setClauses}`;
|
|
15
|
+
}
|
|
16
|
+
insertIgnore(table, columns, conflictKey) {
|
|
17
|
+
if (this.engine === 'sqlite') {
|
|
18
|
+
return `INSERT OR IGNORE INTO ${table} (${columns.join(', ')}) VALUES (${columns.map(() => '?').join(', ')})`;
|
|
19
|
+
}
|
|
20
|
+
return `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${columns.map(() => '?').join(', ')}) ON CONFLICT (${conflictKey}) DO NOTHING`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=DialectHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialectHelper.js","sourceRoot":"","sources":["../../../src/database/dialect/DialectHelper.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAEvD,GAAG;QACD,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,OAAiB,EAAE,WAAmB,EAAE,aAAuB;QACnF,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,0BAA0B,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACjH,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO,eAAe,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,WAAW,mBAAmB,UAAU,EAAE,CAAC;IAC/J,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,OAAiB,EAAE,WAAmB;QAChE,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,yBAAyB,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAChH,CAAC;QACD,OAAO,eAAe,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,WAAW,cAAc,CAAC;IAC9I,CAAC;CACF"}
|
package/dist/database/index.d.ts
CHANGED
|
@@ -9,3 +9,4 @@ export { MysqlAdapter } from './adapters/MysqlAdapter.js';
|
|
|
9
9
|
export { DatabaseAdapterFactory } from './factory/DatabaseAdapterFactory.js';
|
|
10
10
|
export { DatabaseConfigService } from './config/DatabaseConfigService.js';
|
|
11
11
|
export { MigrationService } from './migration/MigrationService.js';
|
|
12
|
+
export { DialectHelper } from './dialect/DialectHelper.js';
|
package/dist/database/index.js
CHANGED
|
@@ -8,4 +8,5 @@ export { MysqlAdapter } from './adapters/MysqlAdapter.js';
|
|
|
8
8
|
export { DatabaseAdapterFactory } from './factory/DatabaseAdapterFactory.js';
|
|
9
9
|
export { DatabaseConfigService } from './config/DatabaseConfigService.js';
|
|
10
10
|
export { MigrationService } from './migration/MigrationService.js';
|
|
11
|
+
export { DialectHelper } from './dialect/DialectHelper.js';
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Provides prepared-statement-based access to the relationships table.
|
|
4
4
|
* SA4E-41: every read is tenant-scoped and fail-closed via CodeIntelIsolation.
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
6
|
+
import type { DatabaseAdapter } from '../../database/adapters/DatabaseAdapter.js';
|
|
7
7
|
export interface CallerResult {
|
|
8
8
|
name: string;
|
|
9
9
|
kind: string;
|
|
@@ -32,14 +32,14 @@ export interface RelationshipInput {
|
|
|
32
32
|
metadata?: Record<string, unknown> | null;
|
|
33
33
|
}
|
|
34
34
|
export declare class GraphRepository {
|
|
35
|
-
private
|
|
35
|
+
private adapter;
|
|
36
36
|
private projectId;
|
|
37
37
|
private scopeParams;
|
|
38
38
|
private stmts;
|
|
39
39
|
/**
|
|
40
40
|
* @param projectId SA4E-41 tenant scope. Undefined ⇒ fail-closed (no rows).
|
|
41
41
|
*/
|
|
42
|
-
constructor(
|
|
42
|
+
constructor(adapter: DatabaseAdapter, projectId?: string);
|
|
43
43
|
/** Insert a batch of relationships within a transaction. */
|
|
44
44
|
insertRelationships(relationships: RelationshipInput[]): void;
|
|
45
45
|
/** Delete all relationships originating from a file (optionally tenant-scoped). */
|
|
@@ -5,33 +5,32 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { buildCodeScopeFilter } from '../query/code-intel-isolation.js';
|
|
7
7
|
export class GraphRepository {
|
|
8
|
-
|
|
8
|
+
adapter;
|
|
9
9
|
projectId;
|
|
10
10
|
scopeParams;
|
|
11
11
|
stmts;
|
|
12
12
|
/**
|
|
13
13
|
* @param projectId SA4E-41 tenant scope. Undefined ⇒ fail-closed (no rows).
|
|
14
14
|
*/
|
|
15
|
-
constructor(
|
|
16
|
-
this.
|
|
15
|
+
constructor(adapter, projectId) {
|
|
16
|
+
this.adapter = adapter;
|
|
17
17
|
this.projectId = projectId;
|
|
18
18
|
this.scopeParams = buildCodeScopeFilter(projectId, 's').params;
|
|
19
19
|
this.prepareStatements();
|
|
20
20
|
}
|
|
21
21
|
/** Insert a batch of relationships within a transaction. */
|
|
22
22
|
insertRelationships(relationships) {
|
|
23
|
-
|
|
24
|
-
for (const rel of
|
|
23
|
+
this.adapter.transaction(() => {
|
|
24
|
+
for (const rel of relationships) {
|
|
25
25
|
this.stmts.insertRelationship.run(rel.sourceSymbolId, rel.targetSymbol, rel.targetSymbolId ?? null, rel.kind, rel.filePath, rel.line, rel.metadata ? JSON.stringify(rel.metadata) : null);
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
|
-
transaction(relationships);
|
|
29
28
|
}
|
|
30
29
|
/** Delete all relationships originating from a file (optionally tenant-scoped). */
|
|
31
30
|
deleteFileRelationships(filePath, projectId) {
|
|
32
31
|
const pid = projectId ?? this.projectId;
|
|
33
32
|
if (pid) {
|
|
34
|
-
this.
|
|
33
|
+
this.adapter.run('DELETE FROM relationships WHERE file_path = ? AND project_id = ?', [filePath, pid]);
|
|
35
34
|
return;
|
|
36
35
|
}
|
|
37
36
|
this.stmts.deleteFileRelationships.run(filePath);
|
|
@@ -48,14 +47,13 @@ export class GraphRepository {
|
|
|
48
47
|
resolveTargets(batchSize = 1000, projectId) {
|
|
49
48
|
const pid = projectId ?? this.projectId;
|
|
50
49
|
const unresolved = (pid
|
|
51
|
-
? this.
|
|
52
|
-
: this.
|
|
50
|
+
? this.adapter.all('SELECT r.id, r.target_symbol FROM relationships r WHERE r.target_symbol_id IS NULL AND r.project_id = ? LIMIT ?', [pid, batchSize])
|
|
51
|
+
: this.adapter.all('SELECT r.id, r.target_symbol FROM relationships r WHERE r.target_symbol_id IS NULL LIMIT ?', [batchSize]));
|
|
53
52
|
let resolved = 0;
|
|
54
|
-
// Resolve targets only within the same tenant to avoid cross-project matches.
|
|
55
53
|
const findTarget = pid
|
|
56
|
-
? this.
|
|
57
|
-
: this.
|
|
58
|
-
|
|
54
|
+
? this.adapter.prepare('SELECT id FROM symbols WHERE name = ? AND project_id = ? LIMIT 1')
|
|
55
|
+
: this.adapter.prepare('SELECT id FROM symbols WHERE name = ? LIMIT 1');
|
|
56
|
+
this.adapter.transaction(() => {
|
|
59
57
|
for (const row of unresolved) {
|
|
60
58
|
const target = (pid ? findTarget.get(row.target_symbol, pid) : findTarget.get(row.target_symbol));
|
|
61
59
|
if (target) {
|
|
@@ -64,36 +62,32 @@ export class GraphRepository {
|
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
64
|
});
|
|
67
|
-
transaction();
|
|
68
65
|
return resolved;
|
|
69
66
|
}
|
|
70
67
|
/** Get total relationship count (tenant-scoped, fail-closed). */
|
|
71
68
|
getRelationshipCount() {
|
|
72
69
|
const scope = buildCodeScopeFilter(this.projectId, 'relationships');
|
|
73
|
-
const row = this.
|
|
74
|
-
return row
|
|
70
|
+
const row = this.adapter.get(`SELECT COUNT(*) as count FROM relationships WHERE ${scope.clause}`, [...scope.params]);
|
|
71
|
+
return row?.count ?? 0;
|
|
75
72
|
}
|
|
76
73
|
/** Get relationship statistics by kind (tenant-scoped, fail-closed). */
|
|
77
74
|
getStats() {
|
|
78
75
|
const scope = buildCodeScopeFilter(this.projectId, 'relationships');
|
|
79
|
-
return this.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
ORDER BY count DESC
|
|
85
|
-
`).all(...scope.params);
|
|
76
|
+
return this.adapter.all(`SELECT kind, COUNT(*) as count
|
|
77
|
+
FROM relationships
|
|
78
|
+
WHERE ${scope.clause}
|
|
79
|
+
GROUP BY kind
|
|
80
|
+
ORDER BY count DESC`, [...scope.params]);
|
|
86
81
|
}
|
|
87
82
|
prepareStatements() {
|
|
88
|
-
// scopeClause scopes joined symbols `s` by tenant; fail-closed ('1=0') with no projectId.
|
|
89
83
|
const scopeClause = buildCodeScopeFilter(this.projectId, 's').clause;
|
|
90
84
|
this.stmts = {
|
|
91
|
-
insertRelationship: this.
|
|
85
|
+
insertRelationship: this.adapter.prepare(`
|
|
92
86
|
INSERT INTO relationships (source_symbol_id, target_symbol, target_symbol_id, kind, file_path, line, metadata)
|
|
93
87
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
94
88
|
`),
|
|
95
|
-
deleteFileRelationships: this.
|
|
96
|
-
findCallers: this.
|
|
89
|
+
deleteFileRelationships: this.adapter.prepare('DELETE FROM relationships WHERE file_path = ?'),
|
|
90
|
+
findCallers: this.adapter.prepare(`
|
|
97
91
|
SELECT s.name, s.kind, f.relative_path as file_path, s.start_line as def_line, r.line as call_line,
|
|
98
92
|
s.parent_symbol as parameters, s.visibility as is_async, s.id
|
|
99
93
|
FROM relationships r
|
|
@@ -103,7 +97,7 @@ export class GraphRepository {
|
|
|
103
97
|
ORDER BY f.relative_path, r.line
|
|
104
98
|
LIMIT ?
|
|
105
99
|
`),
|
|
106
|
-
findCallees: this.
|
|
100
|
+
findCallees: this.adapter.prepare(`
|
|
107
101
|
SELECT r.target_symbol as name, r.line as call_line, r.metadata,
|
|
108
102
|
ts.kind, tf.relative_path as file_path, ts.start_line as def_line
|
|
109
103
|
FROM relationships r
|
|
@@ -114,8 +108,8 @@ export class GraphRepository {
|
|
|
114
108
|
ORDER BY r.line
|
|
115
109
|
LIMIT ?
|
|
116
110
|
`),
|
|
117
|
-
resolveTarget: this.
|
|
118
|
-
countRelationships: this.
|
|
111
|
+
resolveTarget: this.adapter.prepare('UPDATE relationships SET target_symbol_id = ? WHERE id = ?'),
|
|
112
|
+
countRelationships: this.adapter.prepare('SELECT COUNT(*) as count FROM relationships'),
|
|
119
113
|
};
|
|
120
114
|
}
|
|
121
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-repository.js","sourceRoot":"","sources":["../../../src/engine/database/graph-repository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAgCxE,MAAM,OAAO,eAAe;IAClB,
|
|
1
|
+
{"version":3,"file":"graph-repository.js","sourceRoot":"","sources":["../../../src/engine/database/graph-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* KSA-153: Schema Migrator — Applies graph schema migrations.
|
|
3
3
|
* Extends the existing migration system with graph-specific tables and columns.
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
5
|
+
import type { DatabaseAdapter } from '../../database/adapters/DatabaseAdapter.js';
|
|
6
6
|
/**
|
|
7
7
|
* Run graph-related migrations (KSA-153 + KSA-169).
|
|
8
8
|
* Safe to call multiple times — all operations are idempotent.
|
|
9
9
|
*/
|
|
10
|
-
export declare function runGraphMigrations(
|
|
10
|
+
export declare function runGraphMigrations(adapter: DatabaseAdapter): void;
|
|
11
11
|
/** Check if graph migrations have been applied. */
|
|
12
|
-
export declare function isGraphSchemaReady(
|
|
12
|
+
export declare function isGraphSchemaReady(adapter: DatabaseAdapter): boolean;
|
|
@@ -77,27 +77,27 @@ CREATE INDEX IF NOT EXISTS idx_body_embeddings_symbol ON body_embeddings(symbol_
|
|
|
77
77
|
* Run graph-related migrations (KSA-153 + KSA-169).
|
|
78
78
|
* Safe to call multiple times — all operations are idempotent.
|
|
79
79
|
*/
|
|
80
|
-
export function runGraphMigrations(
|
|
80
|
+
export function runGraphMigrations(adapter) {
|
|
81
81
|
logger.error('[graph-migrator] Running graph schema migrations...');
|
|
82
|
-
addEnhancedSymbolColumns(
|
|
83
|
-
|
|
82
|
+
addEnhancedSymbolColumns(adapter);
|
|
83
|
+
adapter.exec(GRAPH_SCHEMA_SQL);
|
|
84
84
|
logger.error('[graph-migrator] Relationships table ready');
|
|
85
|
-
|
|
85
|
+
adapter.exec(FILE_INDEX_SQL);
|
|
86
86
|
logger.error('[graph-migrator] File index table ready');
|
|
87
|
-
|
|
87
|
+
adapter.exec(GRAPH_META_SQL);
|
|
88
88
|
logger.error('[graph-migrator] Graph metadata table ready');
|
|
89
|
-
|
|
89
|
+
adapter.exec(BODY_EMBEDDINGS_SQL);
|
|
90
90
|
logger.error('[graph-migrator] Body embeddings table ready');
|
|
91
|
-
|
|
91
|
+
adapter.run('INSERT OR REPLACE INTO schema_version (version) VALUES (?)', [3]);
|
|
92
92
|
logger.error('[graph-migrator] Schema version set to 3');
|
|
93
93
|
}
|
|
94
|
-
function addEnhancedSymbolColumns(
|
|
95
|
-
const existing = getExistingColumns(
|
|
94
|
+
function addEnhancedSymbolColumns(adapter) {
|
|
95
|
+
const existing = getExistingColumns(adapter, 'symbols');
|
|
96
96
|
let added = 0;
|
|
97
97
|
for (const col of ENHANCED_SYMBOL_COLUMNS) {
|
|
98
98
|
if (!existing.has(col.name)) {
|
|
99
99
|
try {
|
|
100
|
-
|
|
100
|
+
adapter.exec(`ALTER TABLE symbols ADD COLUMN ${col.name} ${col.type}`);
|
|
101
101
|
added++;
|
|
102
102
|
}
|
|
103
103
|
catch {
|
|
@@ -108,23 +108,23 @@ function addEnhancedSymbolColumns(db) {
|
|
|
108
108
|
if (added > 0) {
|
|
109
109
|
logger.error(`[graph-migrator] Added ${added} enhanced symbol columns`);
|
|
110
110
|
try {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
adapter.exec('CREATE INDEX IF NOT EXISTS idx_sym_parent ON symbols(parent_symbol_id) WHERE parent_symbol_id IS NOT NULL');
|
|
112
|
+
adapter.exec('CREATE INDEX IF NOT EXISTS idx_sym_exported ON symbols(is_exported) WHERE is_exported = 1');
|
|
113
|
+
adapter.exec('CREATE INDEX IF NOT EXISTS idx_sym_file_kind ON symbols(file_id, kind)');
|
|
114
114
|
}
|
|
115
115
|
catch {
|
|
116
116
|
// Indexes may already exist
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
|
-
function getExistingColumns(
|
|
121
|
-
const rows =
|
|
120
|
+
function getExistingColumns(adapter, table) {
|
|
121
|
+
const rows = adapter.all(`SELECT * FROM pragma_table_info('${table}')`);
|
|
122
122
|
return new Set(rows.map(r => r.name));
|
|
123
123
|
}
|
|
124
124
|
/** Check if graph migrations have been applied. */
|
|
125
|
-
export function isGraphSchemaReady(
|
|
125
|
+
export function isGraphSchemaReady(adapter) {
|
|
126
126
|
try {
|
|
127
|
-
const tables =
|
|
127
|
+
const tables = adapter.get("SELECT name FROM sqlite_master WHERE type='table' AND name='relationships'");
|
|
128
128
|
return !!tables;
|
|
129
129
|
}
|
|
130
130
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../../src/engine/database/migrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAEhD,mEAAmE;AACnE,MAAM,uBAAuB,GAAG;IAC9B,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;IACpC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE;IACrC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC7C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;IACpC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE;IAC/C,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE;IAClD,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE;IAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;CAC3B,CAAC;AAEX,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;CAkBxB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;CAWtB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;CAWtB,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;CAa3B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../../src/engine/database/migrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import pino from 'pino';
|
|
6
6
|
import { SCHEMA_V1 } from './schema.js';
|
|
7
7
|
import { runGraphMigrations } from '../database/migrator.js';
|
|
8
|
+
import { SqliteDbAdapter } from '../../modules/memory/task-queue/SqliteDbAdapter.js';
|
|
8
9
|
import { applyMigrationV5 } from './migration-v5.js';
|
|
9
10
|
const logger = pino({ name: 'migrations' });
|
|
10
11
|
function applyMemorySchema(db) {
|
|
@@ -62,7 +63,7 @@ export function runMigrations(db, legacyProjectId = 'default') {
|
|
|
62
63
|
// Run V3 graph migrations (KSA-145/153/169) — idempotent
|
|
63
64
|
if (current < 3) {
|
|
64
65
|
try {
|
|
65
|
-
runGraphMigrations(db);
|
|
66
|
+
runGraphMigrations(new SqliteDbAdapter(db));
|
|
66
67
|
}
|
|
67
68
|
catch (err) {
|
|
68
69
|
logger.error({ err }, '[migrations] V3 graph migration error (graceful):');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/engine/db/migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AAE5C,SAAS,iBAAiB,CAAC,EAAqB;IAC9C,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,8CAA8C,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAQD,4CAA4C;AAC5C,MAAM,oBAAoB,GAAG;IAC3B,UAAU;IACV,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,SAAS;CACD,CAAC;AAEX,MAAM,UAAU,GAAgB;IAC9B,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,0BAA0B,EAAE,GAAG,EAAE,SAAS,EAAE;CACxE,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,iBAAiB,CAAC,EAAqB;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,8CAA8C,CAC/C,CAAC,GAAG,EAAsC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,kBAA0B,SAAS;IACtF,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAEtB,qFAAqF;IACrF,kFAAkF;IAClF,4EAA4E;IAC5E,8BAA8B,CAAC,EAAE,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;IAE5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,0BAA0B,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACtF,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,yDAAyD;IACzD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,kBAAkB,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/engine/db/migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AAE5C,SAAS,iBAAiB,CAAC,EAAqB;IAC9C,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,8CAA8C,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAQD,4CAA4C;AAC5C,MAAM,oBAAoB,GAAG;IAC3B,UAAU;IACV,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,SAAS;CACD,CAAC;AAEX,MAAM,UAAU,GAAgB;IAC9B,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,0BAA0B,EAAE,GAAG,EAAE,SAAS,EAAE;CACxE,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,iBAAiB,CAAC,EAAqB;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,8CAA8C,CAC/C,CAAC,GAAG,EAAsC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,kBAA0B,SAAS;IACtF,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAEtB,qFAAqF;IACrF,kFAAkF;IAClF,4EAA4E;IAC5E,8BAA8B,CAAC,EAAE,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;IAE5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,0BAA0B,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACtF,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,yDAAyD;IACzD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,kBAAkB,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,mDAAmD,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,kFAAkF;IAClF,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAAqB;IAClE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACtE,CAAC;IACD,EAAE,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAqB;IAC7C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG;YACnB,mBAAmB;YACnB,mBAAmB;YACnB,uBAAuB;YACvB,mBAAmB;YACnB,iBAAiB;YACjB,cAAc;YACd,oBAAoB;YACpB,cAAc;YACd,oBAAoB;YACpB,gBAAgB;YAChB,MAAM;YACN,YAAY;YACZ,WAAW;YACX,aAAa;YACb,WAAW;YACX,UAAU;YACV,WAAW;YACX,YAAY;YACZ,iBAAiB;YACjB,eAAe;SAChB,CAAC;QAEF,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,EAAE,CAAC,IAAI,CAAC,wBAAwB,KAAK,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEnC,kDAAkD;QAClD,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAEtB,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,EAAqB,EAAE,SAAoB;IACjE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvB,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrF,MAAM,CAAC,KAAK,CAAC,iBAAiB,SAAS,CAAC,OAAO,UAAU,CAAC,CAAC;AAC7D,CAAC;AAED,oEAAoE;AACpE,SAAS,gBAAgB,CAAC,EAAqB;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,EAAE,CAAC,IAAI,CAAC,kCAAkC,GAAG,oBAAoB,CAAC,CAAC;gBACnE,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QAED,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,+CAA+C,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,SAAS,kBAAkB,CAAC,EAAqB,EAAE,KAAa;IAC9D,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,KAAK,GAAG,CAAuB,CAAC;IACrE,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC"}
|