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.
Files changed (365) hide show
  1. package/dist/__tests__/sa4e-testkit.d.ts +1 -1
  2. package/dist/__tests__/sa4e-testkit.js +2 -1
  3. package/dist/__tests__/sa4e-testkit.js.map +1 -1
  4. package/dist/config/CoreTools.js +1 -0
  5. package/dist/config/CoreTools.js.map +1 -1
  6. package/dist/config/__tests__/CoreTools.test.js +3 -2
  7. package/dist/config/__tests__/CoreTools.test.js.map +1 -1
  8. package/dist/engine/analyzers/complexity/ComplexityAnalyzer.d.ts +5 -1
  9. package/dist/engine/analyzers/complexity/ComplexityAnalyzer.js +11 -4
  10. package/dist/engine/analyzers/complexity/ComplexityAnalyzer.js.map +1 -1
  11. package/dist/engine/analyzers/complexity/ComplexityStore.d.ts +7 -2
  12. package/dist/engine/analyzers/complexity/ComplexityStore.js +24 -10
  13. package/dist/engine/analyzers/complexity/ComplexityStore.js.map +1 -1
  14. package/dist/engine/analyzers/complexity/ComplexityTool.d.ts +2 -2
  15. package/dist/engine/analyzers/complexity/ComplexityTool.js +3 -3
  16. package/dist/engine/analyzers/complexity/ComplexityTool.js.map +1 -1
  17. package/dist/engine/analyzers/entry-points/EntryPointDetector.d.ts +4 -1
  18. package/dist/engine/analyzers/entry-points/EntryPointDetector.js +5 -2
  19. package/dist/engine/analyzers/entry-points/EntryPointDetector.js.map +1 -1
  20. package/dist/engine/analyzers/entry-points/EntryPointStore.d.ts +5 -1
  21. package/dist/engine/analyzers/entry-points/EntryPointStore.js +19 -10
  22. package/dist/engine/analyzers/entry-points/EntryPointStore.js.map +1 -1
  23. package/dist/engine/analyzers/entry-points/EntryPointTool.d.ts +2 -2
  24. package/dist/engine/analyzers/entry-points/EntryPointTool.js +3 -3
  25. package/dist/engine/analyzers/entry-points/EntryPointTool.js.map +1 -1
  26. package/dist/engine/analyzers/graph-analysis/DeadImportDetector.d.ts +5 -1
  27. package/dist/engine/analyzers/graph-analysis/DeadImportDetector.js +11 -2
  28. package/dist/engine/analyzers/graph-analysis/DeadImportDetector.js.map +1 -1
  29. package/dist/engine/analyzers/graph-analysis/GraphAnalysisTools.d.ts +2 -2
  30. package/dist/engine/analyzers/graph-analysis/GraphAnalysisTools.js +9 -9
  31. package/dist/engine/analyzers/graph-analysis/GraphAnalysisTools.js.map +1 -1
  32. package/dist/engine/analyzers/graph-analysis/ModuleSummarizer.d.ts +6 -1
  33. package/dist/engine/analyzers/graph-analysis/ModuleSummarizer.js +18 -8
  34. package/dist/engine/analyzers/graph-analysis/ModuleSummarizer.js.map +1 -1
  35. package/dist/engine/analyzers/graph-analysis/utils/GraphLoader.d.ts +13 -4
  36. package/dist/engine/analyzers/graph-analysis/utils/GraphLoader.js +45 -43
  37. package/dist/engine/analyzers/graph-analysis/utils/GraphLoader.js.map +1 -1
  38. package/dist/engine/analyzers/similarity/DeadCodeDetector.d.ts +5 -1
  39. package/dist/engine/analyzers/similarity/DeadCodeDetector.js +25 -9
  40. package/dist/engine/analyzers/similarity/DeadCodeDetector.js.map +1 -1
  41. package/dist/engine/analyzers/similarity/DuplicateDetector.d.ts +5 -1
  42. package/dist/engine/analyzers/similarity/DuplicateDetector.js +10 -2
  43. package/dist/engine/analyzers/similarity/DuplicateDetector.js.map +1 -1
  44. package/dist/engine/analyzers/similarity/GitLogParser.d.ts +1 -1
  45. package/dist/engine/analyzers/similarity/GitLogParser.js +3 -2
  46. package/dist/engine/analyzers/similarity/GitLogParser.js.map +1 -1
  47. package/dist/engine/analyzers/similarity/GitMiner.d.ts +10 -1
  48. package/dist/engine/analyzers/similarity/GitMiner.js +49 -19
  49. package/dist/engine/analyzers/similarity/GitMiner.js.map +1 -1
  50. package/dist/engine/analyzers/similarity/SimilarityTools.d.ts +2 -2
  51. package/dist/engine/analyzers/similarity/SimilarityTools.js +29 -21
  52. package/dist/engine/analyzers/similarity/SimilarityTools.js.map +1 -1
  53. package/dist/engine/context/curated-context-service.js +3 -3
  54. package/dist/engine/context/curated-context-service.js.map +1 -1
  55. package/dist/engine/context/curated-helpers.d.ts +2 -2
  56. package/dist/engine/context/curated-helpers.js +12 -7
  57. package/dist/engine/context/curated-helpers.js.map +1 -1
  58. package/dist/engine/context/types.d.ts +2 -0
  59. package/dist/engine/database/graph-repository.d.ts +15 -9
  60. package/dist/engine/database/graph-repository.js +44 -23
  61. package/dist/engine/database/graph-repository.js.map +1 -1
  62. package/dist/engine/db/__tests__/migration-v5.test.d.ts +7 -0
  63. package/dist/engine/db/__tests__/migration-v5.test.js +103 -0
  64. package/dist/engine/db/__tests__/migration-v5.test.js.map +1 -0
  65. package/dist/engine/db/database-manager.d.ts +13 -1
  66. package/dist/engine/db/database-manager.js +33 -3
  67. package/dist/engine/db/database-manager.js.map +1 -1
  68. package/dist/engine/db/migration-v5.d.ts +15 -0
  69. package/dist/engine/db/migration-v5.js +131 -0
  70. package/dist/engine/db/migration-v5.js.map +1 -0
  71. package/dist/engine/db/migrations.d.ts +7 -1
  72. package/dist/engine/db/migrations.js +24 -2
  73. package/dist/engine/db/migrations.js.map +1 -1
  74. package/dist/engine/db/schema.d.ts +1 -1
  75. package/dist/engine/db/schema.js +26 -4
  76. package/dist/engine/db/schema.js.map +1 -1
  77. package/dist/engine/graph/__tests__/graph-isolation.test.d.ts +6 -0
  78. package/dist/engine/graph/__tests__/graph-isolation.test.js +103 -0
  79. package/dist/engine/graph/__tests__/graph-isolation.test.js.map +1 -0
  80. package/dist/engine/graph/__tests__/graph-services.test.js +61 -57
  81. package/dist/engine/graph/__tests__/graph-services.test.js.map +1 -1
  82. package/dist/engine/graph/__tests__/graph-sync-service.test.d.ts +5 -0
  83. package/dist/engine/graph/__tests__/graph-sync-service.test.js +75 -0
  84. package/dist/engine/graph/__tests__/graph-sync-service.test.js.map +1 -0
  85. package/dist/engine/graph/dep-helpers.d.ts +3 -3
  86. package/dist/engine/graph/dep-helpers.js +12 -8
  87. package/dist/engine/graph/dep-helpers.js.map +1 -1
  88. package/dist/engine/graph/dependency-graph-service.d.ts +5 -1
  89. package/dist/engine/graph/dependency-graph-service.js +9 -4
  90. package/dist/engine/graph/dependency-graph-service.js.map +1 -1
  91. package/dist/engine/graph/file-resolver.d.ts +5 -1
  92. package/dist/engine/graph/file-resolver.js +9 -2
  93. package/dist/engine/graph/file-resolver.js.map +1 -1
  94. package/dist/engine/graph/graph-sync-service.d.ts +20 -0
  95. package/dist/engine/graph/graph-sync-service.js +71 -0
  96. package/dist/engine/graph/graph-sync-service.js.map +1 -0
  97. package/dist/engine/graph/symbol-resolver.d.ts +6 -1
  98. package/dist/engine/graph/symbol-resolver.js +17 -9
  99. package/dist/engine/graph/symbol-resolver.js.map +1 -1
  100. package/dist/engine/graph/test-detector.d.ts +5 -1
  101. package/dist/engine/graph/test-detector.js +11 -4
  102. package/dist/engine/graph/test-detector.js.map +1 -1
  103. package/dist/engine/graph/traverse-helpers.d.ts +1 -1
  104. package/dist/engine/graph/traverse-helpers.js +16 -12
  105. package/dist/engine/graph/traverse-helpers.js.map +1 -1
  106. package/dist/engine/graph/traverser.d.ts +5 -1
  107. package/dist/engine/graph/traverser.js +7 -2
  108. package/dist/engine/graph/traverser.js.map +1 -1
  109. package/dist/engine/indexer/index-helper.d.ts +8 -7
  110. package/dist/engine/indexer/index-helper.js +17 -16
  111. package/dist/engine/indexer/index-helper.js.map +1 -1
  112. package/dist/engine/indexer/index-scope.d.ts +14 -0
  113. package/dist/engine/indexer/index-scope.js +14 -0
  114. package/dist/engine/indexer/index-scope.js.map +1 -0
  115. package/dist/engine/indexer/indexing-engine.d.ts +13 -2
  116. package/dist/engine/indexer/indexing-engine.js +67 -35
  117. package/dist/engine/indexer/indexing-engine.js.map +1 -1
  118. package/dist/engine/indexer/module-helper.d.ts +4 -4
  119. package/dist/engine/indexer/module-helper.js +17 -17
  120. package/dist/engine/indexer/module-helper.js.map +1 -1
  121. package/dist/engine/parsers/indexer/storage.d.ts +3 -3
  122. package/dist/engine/parsers/indexer/storage.js +39 -21
  123. package/dist/engine/parsers/indexer/storage.js.map +1 -1
  124. package/dist/engine/parsers/tree-sitter-indexer.d.ts +2 -2
  125. package/dist/engine/parsers/tree-sitter-indexer.js +9 -9
  126. package/dist/engine/parsers/tree-sitter-indexer.js.map +1 -1
  127. package/dist/engine/query/__tests__/code-intel-isolation.test.d.ts +4 -0
  128. package/dist/engine/query/__tests__/code-intel-isolation.test.js +37 -0
  129. package/dist/engine/query/__tests__/code-intel-isolation.test.js.map +1 -0
  130. package/dist/engine/query/__tests__/query-isolation.test.d.ts +5 -0
  131. package/dist/engine/query/__tests__/query-isolation.test.js +83 -0
  132. package/dist/engine/query/__tests__/query-isolation.test.js.map +1 -0
  133. package/dist/engine/query/code-intel-isolation.d.ts +24 -0
  134. package/dist/engine/query/code-intel-isolation.js +28 -0
  135. package/dist/engine/query/code-intel-isolation.js.map +1 -0
  136. package/dist/engine/query/query-layer.d.ts +12 -11
  137. package/dist/engine/query/query-layer.js +49 -58
  138. package/dist/engine/query/query-layer.js.map +1 -1
  139. package/dist/engine/tools/ai-context-tools.d.ts +3 -3
  140. package/dist/engine/tools/ai-context-tools.js +12 -11
  141. package/dist/engine/tools/ai-context-tools.js.map +1 -1
  142. package/dist/engine/tools/call-graph-tools.d.ts +2 -2
  143. package/dist/engine/tools/call-graph-tools.js +6 -6
  144. package/dist/engine/tools/call-graph-tools.js.map +1 -1
  145. package/dist/engine/tools/code-context.js +12 -8
  146. package/dist/engine/tools/code-context.js.map +1 -1
  147. package/dist/engine/tools/code-index-status.js +5 -4
  148. package/dist/engine/tools/code-index-status.js.map +1 -1
  149. package/dist/engine/tools/code-intel-handlers.d.ts +9 -0
  150. package/dist/engine/tools/code-intel-handlers.js +145 -0
  151. package/dist/engine/tools/code-intel-handlers.js.map +1 -0
  152. package/dist/engine/tools/code-kb-export.js +3 -2
  153. package/dist/engine/tools/code-kb-export.js.map +1 -1
  154. package/dist/engine/tools/code-modules.js +3 -2
  155. package/dist/engine/tools/code-modules.js.map +1 -1
  156. package/dist/engine/tools/code-search.js +3 -2
  157. package/dist/engine/tools/code-search.js.map +1 -1
  158. package/dist/engine/tools/code-symbols.js +4 -3
  159. package/dist/engine/tools/code-symbols.js.map +1 -1
  160. package/dist/engine/tools/code-traverse.d.ts +1 -1
  161. package/dist/engine/tools/code-traverse.js +3 -3
  162. package/dist/engine/tools/code-traverse.js.map +1 -1
  163. package/dist/engine/tools/dependency-tools.d.ts +1 -1
  164. package/dist/engine/tools/dependency-tools.js +3 -3
  165. package/dist/engine/tools/dependency-tools.js.map +1 -1
  166. package/dist/engine/tools/drawio-export-png.d.ts +4 -0
  167. package/dist/engine/tools/drawio-export-png.js +55 -53
  168. package/dist/engine/tools/drawio-export-png.js.map +1 -1
  169. package/dist/engine/tools/drawio-tool.d.ts +5 -9
  170. package/dist/engine/tools/drawio-tool.js +20 -15
  171. package/dist/engine/tools/drawio-tool.js.map +1 -1
  172. package/dist/engine/tools/impact-tools.d.ts +1 -1
  173. package/dist/engine/tools/impact-tools.js +6 -6
  174. package/dist/engine/tools/impact-tools.js.map +1 -1
  175. package/dist/engine/tools/register-tools.d.ts +31 -1
  176. package/dist/engine/tools/register-tools.js +22 -140
  177. package/dist/engine/tools/register-tools.js.map +1 -1
  178. package/dist/index.js +9 -5
  179. package/dist/index.js.map +1 -1
  180. package/dist/modules/code-intel/CodeIntelModule.js +4 -2
  181. package/dist/modules/code-intel/CodeIntelModule.js.map +1 -1
  182. package/dist/modules/memory/__tests__/MemoryToolDispatcher.test.js +8 -7
  183. package/dist/modules/memory/__tests__/MemoryToolDispatcher.test.js.map +1 -1
  184. package/dist/modules/memory/definitions/index.d.ts +7 -4
  185. package/dist/modules/memory/definitions/search.d.ts +7 -4
  186. package/dist/modules/memory/definitions/search.js +2 -2
  187. package/dist/modules/memory/definitions/search.js.map +1 -1
  188. package/dist/modules/memory/dispatchers/crud.js +8 -3
  189. package/dist/modules/memory/dispatchers/crud.js.map +1 -1
  190. package/dist/modules/memory/dispatchers/sync-code.js +5 -3
  191. package/dist/modules/memory/dispatchers/sync-code.js.map +1 -1
  192. package/dist/modules/memory/tool-definitions.js +1 -1
  193. package/dist/modules/memory/tool-definitions.js.map +1 -1
  194. package/dist/modules/orchestration/OrchestrationModule.d.ts +1 -0
  195. package/dist/modules/orchestration/OrchestrationModule.js +9 -0
  196. package/dist/modules/orchestration/OrchestrationModule.js.map +1 -1
  197. package/dist/modules/orchestration/reindex/McpToolsRepository.d.ts +32 -0
  198. package/dist/modules/orchestration/reindex/McpToolsRepository.js +93 -0
  199. package/dist/modules/orchestration/reindex/McpToolsRepository.js.map +1 -0
  200. package/dist/modules/orchestration/reindex/PerServerTaskQueue.d.ts +22 -0
  201. package/dist/modules/orchestration/reindex/PerServerTaskQueue.js +60 -0
  202. package/dist/modules/orchestration/reindex/PerServerTaskQueue.js.map +1 -0
  203. package/dist/modules/orchestration/reindex/ReindexActionMapper.d.ts +9 -0
  204. package/dist/modules/orchestration/reindex/ReindexActionMapper.js +10 -0
  205. package/dist/modules/orchestration/reindex/ReindexActionMapper.js.map +1 -0
  206. package/dist/modules/orchestration/reindex/ReindexService.d.ts +25 -0
  207. package/dist/modules/orchestration/reindex/ReindexService.js +109 -0
  208. package/dist/modules/orchestration/reindex/ReindexService.js.map +1 -0
  209. package/dist/modules/orchestration/reindex/ReindexSubscriber.d.ts +27 -0
  210. package/dist/modules/orchestration/reindex/ReindexSubscriber.js +47 -0
  211. package/dist/modules/orchestration/reindex/ReindexSubscriber.js.map +1 -0
  212. package/dist/modules/orchestration/reindex/ReindexSubscriberFactory.d.ts +10 -0
  213. package/dist/modules/orchestration/reindex/ReindexSubscriberFactory.js +21 -0
  214. package/dist/modules/orchestration/reindex/ReindexSubscriberFactory.js.map +1 -0
  215. package/dist/modules/orchestration/reindex/__tests__/McpToolsRepository.test.d.ts +1 -0
  216. package/dist/modules/orchestration/reindex/__tests__/McpToolsRepository.test.js +103 -0
  217. package/dist/modules/orchestration/reindex/__tests__/McpToolsRepository.test.js.map +1 -0
  218. package/dist/modules/orchestration/reindex/__tests__/PerServerTaskQueue.test.d.ts +1 -0
  219. package/dist/modules/orchestration/reindex/__tests__/PerServerTaskQueue.test.js +82 -0
  220. package/dist/modules/orchestration/reindex/__tests__/PerServerTaskQueue.test.js.map +1 -0
  221. package/dist/modules/orchestration/reindex/__tests__/ReindexActionMapper.test.d.ts +1 -0
  222. package/dist/modules/orchestration/reindex/__tests__/ReindexActionMapper.test.js +24 -0
  223. package/dist/modules/orchestration/reindex/__tests__/ReindexActionMapper.test.js.map +1 -0
  224. package/dist/modules/orchestration/reindex/__tests__/ReindexService.test.d.ts +1 -0
  225. package/dist/modules/orchestration/reindex/__tests__/ReindexService.test.js +76 -0
  226. package/dist/modules/orchestration/reindex/__tests__/ReindexService.test.js.map +1 -0
  227. package/dist/modules/orchestration/reindex/__tests__/ReindexSubscriber.test.d.ts +1 -0
  228. package/dist/modules/orchestration/reindex/__tests__/ReindexSubscriber.test.js +117 -0
  229. package/dist/modules/orchestration/reindex/__tests__/ReindexSubscriber.test.js.map +1 -0
  230. package/dist/modules/orchestration/reindex/__tests__/reindex-fakes.d.ts +30 -0
  231. package/dist/modules/orchestration/reindex/__tests__/reindex-fakes.js +64 -0
  232. package/dist/modules/orchestration/reindex/__tests__/reindex-fakes.js.map +1 -0
  233. package/dist/modules/orchestration/reindex/__tests__/reindex.pbt.test.d.ts +1 -0
  234. package/dist/modules/orchestration/reindex/__tests__/reindex.pbt.test.js +124 -0
  235. package/dist/modules/orchestration/reindex/__tests__/reindex.pbt.test.js.map +1 -0
  236. package/dist/modules/orchestration/reindex/models/PreparedTool.d.ts +11 -0
  237. package/dist/modules/orchestration/reindex/models/PreparedTool.js +2 -0
  238. package/dist/modules/orchestration/reindex/models/PreparedTool.js.map +1 -0
  239. package/dist/modules/orchestration/reindex/models/ReindexAction.d.ts +4 -0
  240. package/dist/modules/orchestration/reindex/models/ReindexAction.js +2 -0
  241. package/dist/modules/orchestration/reindex/models/ReindexAction.js.map +1 -0
  242. package/dist/modules/orchestration/reindex/models/ReindexResult.d.ts +9 -0
  243. package/dist/modules/orchestration/reindex/models/ReindexResult.js +2 -0
  244. package/dist/modules/orchestration/reindex/models/ReindexResult.js.map +1 -0
  245. package/dist/modules/orchestration/reindex/models/ports.d.ts +22 -0
  246. package/dist/modules/orchestration/reindex/models/ports.js +2 -0
  247. package/dist/modules/orchestration/reindex/models/ports.js.map +1 -0
  248. package/dist/modules/orchestration/reindex/safeError.d.ts +6 -0
  249. package/dist/modules/orchestration/reindex/safeError.js +10 -0
  250. package/dist/modules/orchestration/reindex/safeError.js.map +1 -0
  251. package/dist/server/middleware/jwt-auth.d.ts +16 -0
  252. package/dist/server/middleware/jwt-auth.js +108 -39
  253. package/dist/server/middleware/jwt-auth.js.map +1 -1
  254. package/dist/server/routes/admin/kb-graph-spatial.js +4 -2
  255. package/dist/server/routes/admin/kb-graph-spatial.js.map +1 -1
  256. package/dist/server/routes/api-index.d.ts +9 -0
  257. package/dist/server/routes/api-index.js +156 -0
  258. package/dist/server/routes/api-index.js.map +1 -0
  259. package/dist/server/routes/api.d.ts +1 -0
  260. package/dist/server/routes/api.js +14 -133
  261. package/dist/server/routes/api.js.map +1 -1
  262. package/dist/server/routes/tools.js +69 -14
  263. package/dist/server/routes/tools.js.map +1 -1
  264. package/dist/shared/path-safety.d.ts +17 -0
  265. package/dist/shared/path-safety.js +45 -0
  266. package/dist/shared/path-safety.js.map +1 -0
  267. package/package.json +1 -1
  268. package/src/__tests__/sa4e-testkit.ts +2 -1
  269. package/src/config/CoreTools.ts +1 -0
  270. package/src/config/__tests__/CoreTools.test.ts +3 -2
  271. package/src/engine/analyzers/complexity/ComplexityAnalyzer.ts +11 -4
  272. package/src/engine/analyzers/complexity/ComplexityStore.ts +24 -10
  273. package/src/engine/analyzers/complexity/ComplexityTool.ts +3 -3
  274. package/src/engine/analyzers/entry-points/EntryPointDetector.ts +5 -2
  275. package/src/engine/analyzers/entry-points/EntryPointStore.ts +19 -10
  276. package/src/engine/analyzers/entry-points/EntryPointTool.ts +3 -3
  277. package/src/engine/analyzers/graph-analysis/DeadImportDetector.ts +11 -2
  278. package/src/engine/analyzers/graph-analysis/GraphAnalysisTools.ts +9 -9
  279. package/src/engine/analyzers/graph-analysis/ModuleSummarizer.ts +18 -8
  280. package/src/engine/analyzers/graph-analysis/utils/GraphLoader.ts +45 -54
  281. package/src/engine/analyzers/similarity/DeadCodeDetector.ts +26 -12
  282. package/src/engine/analyzers/similarity/DuplicateDetector.ts +10 -2
  283. package/src/engine/analyzers/similarity/GitLogParser.ts +4 -3
  284. package/src/engine/analyzers/similarity/GitMiner.ts +60 -27
  285. package/src/engine/analyzers/similarity/SimilarityTools.ts +29 -22
  286. package/src/engine/context/curated-context-service.ts +4 -3
  287. package/src/engine/context/curated-helpers.ts +13 -7
  288. package/src/engine/context/types.ts +2 -0
  289. package/src/engine/database/graph-repository.ts +47 -23
  290. package/src/engine/db/__tests__/migration-v5.test.ts +113 -0
  291. package/src/engine/db/database-manager.ts +30 -3
  292. package/src/engine/db/migration-v5.ts +136 -0
  293. package/src/engine/db/migrations.ts +27 -2
  294. package/src/engine/db/schema.ts +26 -4
  295. package/src/engine/graph/__tests__/graph-isolation.test.ts +125 -0
  296. package/src/engine/graph/__tests__/graph-services.test.ts +61 -57
  297. package/src/engine/graph/__tests__/graph-sync-service.test.ts +84 -0
  298. package/src/engine/graph/dep-helpers.ts +13 -8
  299. package/src/engine/graph/dependency-graph-service.ts +9 -4
  300. package/src/engine/graph/file-resolver.ts +11 -2
  301. package/src/engine/graph/graph-sync-service.ts +88 -0
  302. package/src/engine/graph/symbol-resolver.ts +17 -9
  303. package/src/engine/graph/test-detector.ts +11 -4
  304. package/src/engine/graph/traverse-helpers.ts +16 -12
  305. package/src/engine/graph/traverser.ts +7 -2
  306. package/src/engine/indexer/index-helper.ts +19 -18
  307. package/src/engine/indexer/index-scope.ts +24 -0
  308. package/src/engine/indexer/indexing-engine.ts +67 -34
  309. package/src/engine/indexer/module-helper.ts +18 -18
  310. package/src/engine/parsers/indexer/storage.ts +42 -19
  311. package/src/engine/parsers/tree-sitter-indexer.ts +9 -9
  312. package/src/engine/query/__tests__/code-intel-isolation.test.ts +43 -0
  313. package/src/engine/query/__tests__/query-isolation.test.ts +98 -0
  314. package/src/engine/query/code-intel-isolation.ts +35 -0
  315. package/src/engine/query/query-layer.ts +55 -69
  316. package/src/engine/tools/ai-context-tools.ts +13 -11
  317. package/src/engine/tools/call-graph-tools.ts +6 -6
  318. package/src/engine/tools/code-context.ts +11 -8
  319. package/src/engine/tools/code-index-status.ts +5 -4
  320. package/src/engine/tools/code-intel-handlers.ts +131 -0
  321. package/src/engine/tools/code-kb-export.ts +3 -2
  322. package/src/engine/tools/code-modules.ts +3 -2
  323. package/src/engine/tools/code-search.ts +3 -2
  324. package/src/engine/tools/code-symbols.ts +4 -3
  325. package/src/engine/tools/code-traverse.ts +3 -3
  326. package/src/engine/tools/dependency-tools.ts +3 -3
  327. package/src/engine/tools/drawio-export-png.ts +53 -61
  328. package/src/engine/tools/drawio-tool.ts +15 -13
  329. package/src/engine/tools/impact-tools.ts +6 -6
  330. package/src/engine/tools/register-tools.ts +28 -133
  331. package/src/index.ts +11 -5
  332. package/src/modules/code-intel/CodeIntelModule.ts +4 -2
  333. package/src/modules/memory/__tests__/MemoryToolDispatcher.test.ts +8 -7
  334. package/src/modules/memory/definitions/search.ts +2 -2
  335. package/src/modules/memory/dispatchers/crud.ts +7 -3
  336. package/src/modules/memory/dispatchers/sync-code.ts +5 -3
  337. package/src/modules/memory/tool-definitions.ts +1 -1
  338. package/src/modules/orchestration/OrchestrationModule.ts +10 -0
  339. package/src/modules/orchestration/reindex/McpToolsRepository.ts +107 -0
  340. package/src/modules/orchestration/reindex/PerServerTaskQueue.ts +76 -0
  341. package/src/modules/orchestration/reindex/ReindexActionMapper.ts +14 -0
  342. package/src/modules/orchestration/reindex/ReindexService.ts +131 -0
  343. package/src/modules/orchestration/reindex/ReindexSubscriber.ts +54 -0
  344. package/src/modules/orchestration/reindex/ReindexSubscriberFactory.ts +34 -0
  345. package/src/modules/orchestration/reindex/__tests__/McpToolsRepository.test.ts +118 -0
  346. package/src/modules/orchestration/reindex/__tests__/PerServerTaskQueue.test.ts +84 -0
  347. package/src/modules/orchestration/reindex/__tests__/ReindexActionMapper.test.ts +25 -0
  348. package/src/modules/orchestration/reindex/__tests__/ReindexService.test.ts +85 -0
  349. package/src/modules/orchestration/reindex/__tests__/ReindexSubscriber.test.ts +131 -0
  350. package/src/modules/orchestration/reindex/__tests__/reindex-fakes.ts +74 -0
  351. package/src/modules/orchestration/reindex/__tests__/reindex.pbt.test.ts +155 -0
  352. package/src/modules/orchestration/reindex/models/PreparedTool.ts +11 -0
  353. package/src/modules/orchestration/reindex/models/ReindexAction.ts +4 -0
  354. package/src/modules/orchestration/reindex/models/ReindexResult.ts +9 -0
  355. package/src/modules/orchestration/reindex/models/ports.ts +26 -0
  356. package/src/modules/orchestration/reindex/safeError.ts +9 -0
  357. package/src/server/middleware/jwt-auth.ts +118 -43
  358. package/src/server/routes/admin/kb-graph-spatial.ts +4 -2
  359. package/src/server/routes/api-index.ts +162 -0
  360. package/src/server/routes/api.ts +14 -140
  361. package/src/server/routes/tools.ts +78 -26
  362. package/src/shared/path-safety.ts +40 -0
  363. package/tests/e2e/reindex.e2e.test.ts +161 -0
  364. package/tests/integration/migration-v5-upgrade.it.test.ts +84 -0
  365. 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 8 CORE tool names (5 memory + 3 meta). */
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 8 CORE tool names (5 memory + 3 meta). */
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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAQ,CAAC;AASnE,6EAA6E;AAC7E,MAAM,UAAU,UAAU;IACvB,eAAuB,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9C,SAAS,CAAC,UAAU,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,OAAO;QACL,SAAS;QACT,MAAM;QACN,MAAM;QACN,KAAK;YACH,SAAS,CAAC,KAAK,EAAE,CAAC;YACjB,eAAuB,CAAC,QAAQ,GAAG,IAAI,CAAC;YACzC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,OAAO,UAAU;IAGV;IACD;IACA;IACA;IALF,OAAO,CAAe;IAC9B,YACW,IAAY,EACb,OAAyB,EAAE,EAC3B,WAAqC,IAAI,GAAG,EAAE,EAC9C,MAAqB,EAC7B,SAAuB,OAAO;QAJrB,SAAI,GAAJ,IAAI,CAAQ;QACb,SAAI,GAAJ,IAAI,CAAuB;QAC3B,aAAQ,GAAR,QAAQ,CAAsC;QAC9C,WAAM,GAAN,MAAM,CAAe;QAG7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,IAAI,MAAM,KAAmB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,CAAe,IAAU,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,UAAU,KAAmB,CAAC;IACpC,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAClC,eAAe,KAA+B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,kBAAkB,KAAuB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,SAAS,KAAmB,OAAO,IAAI,CAAC,MAAsB,CAAC,CAAC,CAAC;CAClE;AAED,sCAAsC;AACtC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,WAAuC,QAAQ;IAC/E,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC1G,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,SAAS,GAAgB,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAEhH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAgB,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAElH,yEAAyE;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAOtD,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAwB;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5E,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;KAChC,CAAC,CAAC;IACH,OAAO;QACL,MAAM;QACN,KAAK,CAAC,KAAK,KAAK,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa;IAC5D,qBAAqB,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB;IACnF,mBAAmB,EAAE,oBAAoB;CAC1C,CAAC"}
@@ -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;CACpD,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"}
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 8 names', () => {
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(8);
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":"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"}
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
- constructor(db: Database.Database);
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
- constructor(db) {
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":"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"}
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
- constructor(db: Database.Database);
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
- constructor(db) {
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 1=1
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 1=1 ${filters.module ? 'AND f.module = ?' : ''}
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 = `SELECT AVG(cyclomatic_complexity) as avg FROM complexity`;
115
- const avgRow = this.db.prepare(avgSql).get();
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":"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"}
1
+ {"version":3,"file":"ComplexityStore.js","sourceRoot":"","sources":["../../../../src/engine/analyzers/complexity/ComplexityStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;CAmBpB,CAAC;AAEF,MAAM,OAAO,eAAe;IAClB,EAAE,CAAoB;IACtB,SAAS,CAAqB;IAC9B,KAAK,CAIX;IAEF;;;OAGG;IACH,YAAY,EAAqB,EAAE,SAAkB;QACnD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,sDAAsD;IACtD,MAAM,CAAC,MAAwB;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACnB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,qBAAqB,EAC5B,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,KAAK,CACb,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,WAAW,CAAC,OAA2B;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,KAAyB,EAAE,EAAE;YACpE,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,4CAA4C;IAC5C,WAAW,CAAC,QAAgB;QAC1B,OAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAsB,IAAI,IAAI,CAAC;IAC5E,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,OAA0B;QAC9B,4EAA4E;QAC5E,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACxD,IAAI,GAAG,GAAG;;;;;;cAMA,KAAK,CAAC,MAAM;KACrB,CAAC;QACF,MAAM,MAAM,GAAc,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,GAAG,IAAI,6BAA6B,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,GAAG,IAAI,oBAAoB,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACxC,GAAG,IAAI,mCAAmC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClE,GAAG,IAAI,oBAAoB,YAAY,GAAG,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,GAAG,IAAI,mBAAmB,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,+BAA+B,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAkC,CAAC;QAC3F,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;QAEnC,iBAAiB;QACjB,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,MAAM;gBAAE,GAAG,IAAI,sBAAsB,CAAC;gBAAC,MAAM;YAClD,KAAK,MAAM;gBAAE,GAAG,IAAI,iDAAiD,CAAC;gBAAC,MAAM;YAC7E;gBAAS,GAAG,IAAI,wCAAwC,CAAC;gBAAC,MAAM;QAClE,CAAC;QACD,GAAG,IAAI,UAAU,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAuB,CAAC;QAE1E,qCAAqC;QACrC,MAAM,OAAO,GAAG;;;;;cAKN,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;;KAEjE,CAAC;QACF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAsC,CAAC;QAClG,MAAM,iBAAiB,GAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAClF,KAAK,MAAM,GAAG,IAAI,QAAQ;YAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QAErE,6CAA6C;QAC7C,MAAM,MAAM,GAAG;;;;cAIL,KAAK,CAAC,MAAM;KACrB,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAA2B,CAAC;QAEtF,OAAO;YACL,OAAO;YACP,KAAK;YACL,OAAO,EAAE;gBACP,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACzB,iBAAiB;aAClB;SACF,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,cAAc,CAAC,QAAgB;QAC7B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,KAAK,GAAG;YACX,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAKvB,CAAC;YACF,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;OAO5B,CAAC;YACF,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC;SAC9E,CAAC;IACJ,CAAC;CACF"}
@@ -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":"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"}
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
- constructor(db: Database.Database);
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
- constructor(db) {
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;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,yCAAyC;IACzC,UAAU,CAAC,QAAgB,EAAE,MAAc,EAAE,QAAgB,EAAE,OAG7D;QACA,MAAM,cAAc,GAAiB,EAAE,CAAC;QAExC,sBAAsB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAElE,2CAA2C;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzF,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QACtC,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxE,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAEpC,kBAAkB;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,cAAc,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAEnC,oBAAoB;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChE,cAAc,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAErC,gBAAgB;QAChB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,OAA0B;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF"}
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
- constructor(db: Database.Database);
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
- constructor(db) {
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 1=1
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 typeSql = 'SELECT entry_type, COUNT(*) as count FROM entry_points GROUP BY entry_type';
94
- const typeRows = this.db.prepare(typeSql).all();
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 fwSql = 'SELECT framework, COUNT(*) as count FROM entry_points WHERE framework IS NOT NULL GROUP BY framework';
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 authSql = 'SELECT has_auth, COUNT(*) as count FROM entry_points GROUP BY has_auth';
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":"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"}
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":"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"}
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
- constructor(db: Database.Database);
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
- constructor(db) {
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;AAKH,MAAM,OAAO,kBAAkB;IACrB,EAAE,CAAoB;IAE9B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,UAAkE,EAAE;QACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAElC,sFAAsF;QACtF,IAAI,GAAG,GAAG;;;;;;;;;;;;KAYT,CAAC;QACF,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,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"}
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;