sdlc-agent-4-enterprise-server 1.20.0 → 1.21.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 (345) hide show
  1. package/README.md +1 -1
  2. package/dist/engine/tools/drawio-export-png.js +2 -2
  3. package/dist/engine/tools/drawio-export-png.js.map +1 -1
  4. package/dist/knowledge/KnowledgeDb.d.ts +30 -0
  5. package/dist/knowledge/KnowledgeDb.js +148 -0
  6. package/dist/knowledge/KnowledgeDb.js.map +1 -0
  7. package/dist/knowledge/KnowledgeModule.d.ts +31 -0
  8. package/dist/knowledge/KnowledgeModule.js +63 -0
  9. package/dist/knowledge/KnowledgeModule.js.map +1 -0
  10. package/dist/knowledge/KnowledgeService.d.ts +50 -0
  11. package/dist/knowledge/KnowledgeService.js +152 -0
  12. package/dist/knowledge/KnowledgeService.js.map +1 -0
  13. package/dist/knowledge/__tests__/KnowledgeService.pbt.test.d.ts +6 -0
  14. package/dist/knowledge/__tests__/KnowledgeService.pbt.test.js +47 -0
  15. package/dist/knowledge/__tests__/KnowledgeService.pbt.test.js.map +1 -0
  16. package/dist/knowledge/__tests__/KnowledgeService.test.d.ts +6 -0
  17. package/dist/knowledge/__tests__/KnowledgeService.test.js +177 -0
  18. package/dist/knowledge/__tests__/KnowledgeService.test.js.map +1 -0
  19. package/dist/knowledge/__tests__/routes.test.d.ts +7 -0
  20. package/dist/knowledge/__tests__/routes.test.js +203 -0
  21. package/dist/knowledge/__tests__/routes.test.js.map +1 -0
  22. package/dist/knowledge/models.d.ts +111 -0
  23. package/dist/knowledge/models.js +12 -0
  24. package/dist/knowledge/models.js.map +1 -0
  25. package/dist/knowledge/routes.d.ts +22 -0
  26. package/dist/knowledge/routes.js +99 -0
  27. package/dist/knowledge/routes.js.map +1 -0
  28. package/dist/knowledge/schema.d.ts +7 -0
  29. package/dist/knowledge/schema.js +87 -0
  30. package/dist/knowledge/schema.js.map +1 -0
  31. package/dist/modules/ModuleFactory.js +3 -0
  32. package/dist/modules/ModuleFactory.js.map +1 -1
  33. package/dist/server/HttpServer.js +7 -0
  34. package/dist/server/HttpServer.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/engine/tools/drawio-export-png.ts +2 -2
  37. package/src/knowledge/KnowledgeDb.ts +161 -0
  38. package/src/knowledge/KnowledgeModule.ts +76 -0
  39. package/src/knowledge/KnowledgeService.ts +177 -0
  40. package/src/knowledge/__tests__/KnowledgeService.pbt.test.ts +63 -0
  41. package/src/knowledge/__tests__/KnowledgeService.test.ts +196 -0
  42. package/src/knowledge/__tests__/routes.test.ts +224 -0
  43. package/src/knowledge/models.ts +129 -0
  44. package/src/knowledge/routes.ts +130 -0
  45. package/src/knowledge/schema.ts +87 -0
  46. package/src/modules/ModuleFactory.ts +3 -0
  47. package/src/server/HttpServer.ts +8 -0
  48. package/extension/esbuild.js +0 -36
  49. package/extension/resources/webview-assets/chat/chat.js +0 -1907
  50. package/extension/resources/webview-assets/chat/graph-viz.js +0 -144
  51. package/extension/resources/webview-assets/chat/markdown-renderer.js +0 -254
  52. package/extension/resources/webview-assets/settings/settings.js +0 -575
  53. package/extension/scripts/capture-screenshots.py +0 -45
  54. package/extension/scripts/copy-resources.js +0 -76
  55. package/extension/scripts/gen-checksums.js +0 -68
  56. package/extension/scripts/update-onnx-manifest.js +0 -119
  57. package/extension/src/__tests__/backend-local-tools.test.ts +0 -284
  58. package/extension/src/__tests__/code-intel.test.ts +0 -356
  59. package/extension/src/__tests__/converter.test.ts +0 -297
  60. package/extension/src/__tests__/cross-process.e2e.test.ts +0 -168
  61. package/extension/src/__tests__/drawio-convert.e2e.test.ts +0 -184
  62. package/extension/src/__tests__/indexer.test.ts +0 -219
  63. package/extension/src/__tests__/mcp-handshake.regression.test.ts +0 -115
  64. package/extension/src/__tests__/wrapper-server.helpers.ts +0 -149
  65. package/extension/src/__tests__/wrapper-server.test.ts +0 -263
  66. package/extension/src/activation-helpers.ts +0 -38
  67. package/extension/src/addon-download-helpers.ts +0 -137
  68. package/extension/src/ai-context-commands.ts +0 -102
  69. package/extension/src/anthropic/__tests__/converter.test.ts +0 -201
  70. package/extension/src/anthropic/__tests__/handlers.test.ts +0 -255
  71. package/extension/src/anthropic/converter.ts +0 -95
  72. package/extension/src/anthropic/handlers.ts +0 -106
  73. package/extension/src/anthropic/types.ts +0 -124
  74. package/extension/src/auth/AuthManager.ts +0 -200
  75. package/extension/src/auth/PkceService.ts +0 -32
  76. package/extension/src/auth/TokenRefreshTimer.ts +0 -40
  77. package/extension/src/backend-local-tools.ts +0 -141
  78. package/extension/src/chat-panel/ChatContextPicker.ts +0 -189
  79. package/extension/src/chat-panel/ChatHtmlBuilder.ts +0 -67
  80. package/extension/src/chat-panel/ChatModelManager.ts +0 -49
  81. package/extension/src/chat-panel/ChatStateManager.ts +0 -134
  82. package/extension/src/chat-panel/ChatStatusManager.ts +0 -51
  83. package/extension/src/chat-panel/__tests__/chat-models.test.ts +0 -134
  84. package/extension/src/chat-panel/__tests__/context-usage-tracker.test.ts +0 -170
  85. package/extension/src/chat-panel/__tests__/conversation-manager.test.ts +0 -152
  86. package/extension/src/chat-panel/__tests__/token-counter.test.ts +0 -93
  87. package/extension/src/chat-panel/chat-models.ts +0 -169
  88. package/extension/src/chat-panel/chat-panel-provider.ts +0 -225
  89. package/extension/src/chat-panel/context-usage-tracker.ts +0 -144
  90. package/extension/src/chat-panel/conversation-manager.ts +0 -180
  91. package/extension/src/chat-panel/conversation-types.ts +0 -47
  92. package/extension/src/chat-panel/message-handler.ts +0 -119
  93. package/extension/src/chat-panel/message-protocol.ts +0 -107
  94. package/extension/src/chat-panel/message-routing.ts +0 -114
  95. package/extension/src/chat-panel/token-counter.ts +0 -103
  96. package/extension/src/checksum.ts +0 -199
  97. package/extension/src/code-intel/CodeIntelScanner.ts +0 -159
  98. package/extension/src/code-intel/CodeIntelUploader.ts +0 -84
  99. package/extension/src/code-intel/FileChangeWatcher.ts +0 -134
  100. package/extension/src/code-intel/HashCache.ts +0 -57
  101. package/extension/src/code-intel/OfflineQueue.ts +0 -61
  102. package/extension/src/code-intel/TimestampResolver.ts +0 -64
  103. package/extension/src/code-intel/index.ts +0 -12
  104. package/extension/src/code-intel/models.ts +0 -83
  105. package/extension/src/commands/CommandRegistrar.ts +0 -193
  106. package/extension/src/commands/LlmCommands.ts +0 -111
  107. package/extension/src/config-watcher.ts +0 -175
  108. package/extension/src/config.ts +0 -106
  109. package/extension/src/connection/ConnectionManager.ts +0 -128
  110. package/extension/src/connection/HealthChecker.ts +0 -45
  111. package/extension/src/converter/FileConverterService.ts +0 -62
  112. package/extension/src/converter/IFileConverter.ts +0 -15
  113. package/extension/src/converter/LocalFallbackConverter.ts +0 -93
  114. package/extension/src/converter/RemoteConverter.ts +0 -72
  115. package/extension/src/converter/TextConverter.ts +0 -41
  116. package/extension/src/converter/index.ts +0 -31
  117. package/extension/src/converter-helpers.ts +0 -127
  118. package/extension/src/converter.ts +0 -17
  119. package/extension/src/debug-logger.ts +0 -23
  120. package/extension/src/diagnostics-provider.ts +0 -149
  121. package/extension/src/extension.ts +0 -222
  122. package/extension/src/file-meta.ts +0 -96
  123. package/extension/src/file-utils.ts +0 -64
  124. package/extension/src/history/conversation.ts +0 -91
  125. package/extension/src/ide-adapters.ts +0 -104
  126. package/extension/src/indexer-discovery.ts +0 -106
  127. package/extension/src/indexer-http.ts +0 -99
  128. package/extension/src/indexer.ts +0 -91
  129. package/extension/src/injector-helpers.ts +0 -74
  130. package/extension/src/injector.ts +0 -130
  131. package/extension/src/kb-event-bus.ts +0 -127
  132. package/extension/src/langgraph/__tests__/anthropic-provider-content-guard.test.ts +0 -95
  133. package/extension/src/langgraph/__tests__/base-node-retry.test.ts +0 -277
  134. package/extension/src/langgraph/__tests__/chat-graph-agent-step.test.ts +0 -100
  135. package/extension/src/langgraph/__tests__/chat-graph-loop.test.ts +0 -155
  136. package/extension/src/langgraph/__tests__/chat-panel-e2e.test.ts +0 -617
  137. package/extension/src/langgraph/__tests__/edges-self-correction.test.ts +0 -148
  138. package/extension/src/langgraph/__tests__/hook-executor.test.ts +0 -257
  139. package/extension/src/langgraph/__tests__/hook-loader.test.ts +0 -204
  140. package/extension/src/langgraph/__tests__/mcp-bridge.test.ts +0 -297
  141. package/extension/src/langgraph/__tests__/stream-handler-events.test.ts +0 -158
  142. package/extension/src/langgraph/__tests__/verify-node.test.ts +0 -275
  143. package/extension/src/langgraph/agents/analyze-input-node.ts +0 -92
  144. package/extension/src/langgraph/agents/approval-node.ts +0 -188
  145. package/extension/src/langgraph/agents/dynamic-agent-node.ts +0 -169
  146. package/extension/src/langgraph/agents/feedback-node.ts +0 -68
  147. package/extension/src/langgraph/agents/hotfix-verify-node.ts +0 -144
  148. package/extension/src/langgraph/agents/pipeline-extractor.ts +0 -113
  149. package/extension/src/langgraph/agents/registry.ts +0 -326
  150. package/extension/src/langgraph/agents/security-node.ts +0 -172
  151. package/extension/src/langgraph/agents/verify-node.ts +0 -161
  152. package/extension/src/langgraph/config/alternate-strategies.ts +0 -43
  153. package/extension/src/langgraph/config/verify-criteria.ts +0 -87
  154. package/extension/src/langgraph/core/base-node.ts +0 -312
  155. package/extension/src/langgraph/core/checkpointer-helpers.ts +0 -82
  156. package/extension/src/langgraph/core/checkpointer.ts +0 -106
  157. package/extension/src/langgraph/core/context-budget.ts +0 -191
  158. package/extension/src/langgraph/core/llm-provider.ts +0 -83
  159. package/extension/src/langgraph/core/mcp-bridge.ts +0 -182
  160. package/extension/src/langgraph/core/state-types.ts +0 -36
  161. package/extension/src/langgraph/core/state.ts +0 -69
  162. package/extension/src/langgraph/core/stream-handler.ts +0 -185
  163. package/extension/src/langgraph/engine/engine-chat-handler.ts +0 -66
  164. package/extension/src/langgraph/engine/langgraph-engine.ts +0 -311
  165. package/extension/src/langgraph/errors/non-recoverable-error.ts +0 -13
  166. package/extension/src/langgraph/helpers/hook-helpers.ts +0 -122
  167. package/extension/src/langgraph/helpers/workspace-file-ops.ts +0 -163
  168. package/extension/src/langgraph/hooks/hook-emitter.ts +0 -37
  169. package/extension/src/langgraph/hooks/hook-engine.ts +0 -173
  170. package/extension/src/langgraph/hooks/hook-executor.ts +0 -197
  171. package/extension/src/langgraph/hooks/hook-filters.ts +0 -94
  172. package/extension/src/langgraph/hooks/hook-loader.ts +0 -88
  173. package/extension/src/langgraph/hooks/hook-tool-matcher.ts +0 -64
  174. package/extension/src/langgraph/index.ts +0 -54
  175. package/extension/src/langgraph/pipeline/edges-feedback.ts +0 -63
  176. package/extension/src/langgraph/pipeline/edges.ts +0 -152
  177. package/extension/src/langgraph/pipeline/sdlc-graph.ts +0 -388
  178. package/extension/src/langgraph/pipeline/sdlc-node-factory.ts +0 -60
  179. package/extension/src/langgraph/providers/BaseLlmProvider.ts +0 -122
  180. package/extension/src/langgraph/providers/anthropic-helpers.ts +0 -26
  181. package/extension/src/langgraph/providers/anthropic-provider.ts +0 -142
  182. package/extension/src/langgraph/providers/index.ts +0 -107
  183. package/extension/src/langgraph/providers/ollama-provider.ts +0 -117
  184. package/extension/src/langgraph/providers/ollama-tools.ts +0 -52
  185. package/extension/src/langgraph/providers/onnx-provider.ts +0 -155
  186. package/extension/src/langgraph/providers/onnx-tokenizer.ts +0 -47
  187. package/extension/src/langgraph/providers/openai-helpers.ts +0 -38
  188. package/extension/src/langgraph/providers/openai-provider.ts +0 -176
  189. package/extension/src/langgraph/providers/provider-registry.ts +0 -176
  190. package/extension/src/langgraph/router/intent-classifier.ts +0 -133
  191. package/extension/src/langgraph/router/router-graph.ts +0 -187
  192. package/extension/src/langgraph/router/router-state.ts +0 -19
  193. package/extension/src/langgraph/steering/steering-loader.ts +0 -190
  194. package/extension/src/langgraph/subgraphs/chat-graph-nodes.ts +0 -297
  195. package/extension/src/langgraph/subgraphs/chat-graph.ts +0 -180
  196. package/extension/src/langgraph/subgraphs/code-review-graph.ts +0 -102
  197. package/extension/src/langgraph/subgraphs/core/checkpointer.ts +0 -4
  198. package/extension/src/langgraph/subgraphs/core/llm-provider.ts +0 -4
  199. package/extension/src/langgraph/subgraphs/core/mcp-bridge.ts +0 -4
  200. package/extension/src/langgraph/subgraphs/core/stream-handler.ts +0 -4
  201. package/extension/src/langgraph/subgraphs/docs-graph.ts +0 -80
  202. package/extension/src/langgraph/subgraphs/graph-builder.ts +0 -36
  203. package/extension/src/langgraph/subgraphs/hooks/hook-engine.ts +0 -4
  204. package/extension/src/langgraph/subgraphs/hotfix-graph.ts +0 -93
  205. package/extension/src/langgraph/subgraphs/rag-grader-nodes.ts +0 -230
  206. package/extension/src/langgraph/subgraphs/rag-grader-prompts.ts +0 -54
  207. package/extension/src/langgraph/subgraphs/security-audit-graph.ts +0 -126
  208. package/extension/src/langgraph/subgraphs/verify-node.ts +0 -166
  209. package/extension/src/langgraph/subgraphs/verify-prompt.ts +0 -45
  210. package/extension/src/langgraph/vscode/tool-registry.ts +0 -86
  211. package/extension/src/langgraph/vscode/vscode-tool-definitions.ts +0 -44
  212. package/extension/src/langgraph/vscode/vscode-tools.ts +0 -150
  213. package/extension/src/langgraph/workflow/workflow-executor-actions.ts +0 -173
  214. package/extension/src/langgraph/workflow/workflow-executor.ts +0 -85
  215. package/extension/src/langgraph/workflow/workflow-graph-data.ts +0 -156
  216. package/extension/src/langgraph/workflow/workflow-parser-actions.ts +0 -87
  217. package/extension/src/langgraph/workflow/workflow-parser.ts +0 -74
  218. package/extension/src/logger.ts +0 -34
  219. package/extension/src/mcp-config-builder.ts +0 -114
  220. package/extension/src/mcp-injector.ts +0 -65
  221. package/extension/src/mcp-server-manager.ts +0 -24
  222. package/extension/src/models/LlmProviderConfig.ts +0 -25
  223. package/extension/src/models/LlmTestResult.ts +0 -9
  224. package/extension/src/models/SettingsState.ts +0 -16
  225. package/extension/src/models/index.ts +0 -3
  226. package/extension/src/native-addon-manager.ts +0 -151
  227. package/extension/src/panels/analytics-panel.ts +0 -31
  228. package/extension/src/panels/base-panel.ts +0 -97
  229. package/extension/src/panels/dashboard-panel.ts +0 -29
  230. package/extension/src/panels/graph-panel.ts +0 -27
  231. package/extension/src/panels/impact-panel.ts +0 -162
  232. package/extension/src/panels/login-panel.ts +0 -102
  233. package/extension/src/panels/panel-html.ts +0 -129
  234. package/extension/src/panels/quality-panel.ts +0 -31
  235. package/extension/src/panels/security-panel.ts +0 -155
  236. package/extension/src/panels/settings/SettingsMessageHandler.ts +0 -190
  237. package/extension/src/panels/settings/SettingsPanel.ts +0 -136
  238. package/extension/src/panels/settings-panel.ts +0 -10
  239. package/extension/src/panels/tags-panel.ts +0 -31
  240. package/extension/src/panels/workflow-panel.ts +0 -84
  241. package/extension/src/platform-detector.ts +0 -94
  242. package/extension/src/platform-swap/backup-manager.ts +0 -158
  243. package/extension/src/platform-swap/index.ts +0 -62
  244. package/extension/src/platform-swap/platform-config.ts +0 -84
  245. package/extension/src/platform-swap/platform-detector.ts +0 -90
  246. package/extension/src/platform-swap/platform-status-bar.ts +0 -71
  247. package/extension/src/platform-swap/state-manager.ts +0 -107
  248. package/extension/src/platform-swap/swap-commands.ts +0 -162
  249. package/extension/src/platform-swap/swap-executor.ts +0 -193
  250. package/extension/src/platform-swap/types.ts +0 -68
  251. package/extension/src/proxy/HttpClient.ts +0 -136
  252. package/extension/src/proxy/ToolProxy.ts +0 -61
  253. package/extension/src/remote-backend-client.ts +0 -157
  254. package/extension/src/services/Base64ProxyService.ts +0 -184
  255. package/extension/src/services/IndexerHttpClient.ts +0 -274
  256. package/extension/src/services/IndexingService.ts +0 -117
  257. package/extension/src/services/KBClient.ts +0 -109
  258. package/extension/src/services/LlmTestService.ts +0 -97
  259. package/extension/src/services/ProviderConfigService.ts +0 -85
  260. package/extension/src/services/WorkspaceSyncService.ts +0 -48
  261. package/extension/src/services/WrapperServer.ts +0 -240
  262. package/extension/src/sf-indexer.ts +0 -97
  263. package/extension/src/sidebar/tree-view-provider.ts +0 -173
  264. package/extension/src/symbol-search.ts +0 -130
  265. package/extension/src/test/base-panel.test.ts +0 -168
  266. package/extension/src/test/mcp-server-manager.test.ts +0 -322
  267. package/extension/src/test/mocks/vscode.ts +0 -148
  268. package/extension/src/test/setup.ts +0 -18
  269. package/extension/src/test/tree-view-provider.test.ts +0 -208
  270. package/extension/src/test/webview-panel-manager.test.ts +0 -160
  271. package/extension/src/types/index.ts +0 -6
  272. package/extension/src/types/panel-types.ts +0 -98
  273. package/extension/src/types/server-types.ts +0 -119
  274. package/extension/src/types.ts +0 -5
  275. package/extension/src/ui/status-bar.ts +0 -55
  276. package/extension/src/utils/backend-auth-headers.ts +0 -26
  277. package/extension/src/utils/http-client-utils.ts +0 -90
  278. package/extension/src/utils/mcp-config-file.ts +0 -89
  279. package/extension/src/utils/panel-utils.ts +0 -74
  280. package/extension/src/webview/__tests__/integration.test.ts +0 -341
  281. package/extension/src/webview/__tests__/options.integration.test.ts +0 -273
  282. package/extension/src/webview/__tests__/options.pbt.test.ts +0 -217
  283. package/extension/src/webview/__tests__/options.unit.test.ts +0 -388
  284. package/extension/src/webview/__tests__/pbt.test.ts +0 -251
  285. package/extension/src/webview/__tests__/slash-menu.integration.test.ts +0 -259
  286. package/extension/src/webview/__tests__/slash-menu.pbt.test.ts +0 -229
  287. package/extension/src/webview/__tests__/slash-menu.unit.test.ts +0 -244
  288. package/extension/src/webview/__tests__/spinner.integration.test.ts +0 -219
  289. package/extension/src/webview/__tests__/spinner.pbt.test.ts +0 -151
  290. package/extension/src/webview/__tests__/spinner.unit.test.ts +0 -263
  291. package/extension/src/webview/__tests__/unit-part2.test.ts +0 -377
  292. package/extension/src/webview/__tests__/unit.test.ts +0 -101
  293. package/extension/src/webview/badges/BadgeManager.ts +0 -94
  294. package/extension/src/webview/badges/BadgeRenderer.ts +0 -66
  295. package/extension/src/webview/badges/types.ts +0 -12
  296. package/extension/src/webview/bridge/MessageBridge.ts +0 -107
  297. package/extension/src/webview/bridge/types.ts +0 -15
  298. package/extension/src/webview/context-menu/ContextMenuController.ts +0 -275
  299. package/extension/src/webview/context-menu/ContextMenuItems.ts +0 -72
  300. package/extension/src/webview/context-menu/ContextMenuView.ts +0 -154
  301. package/extension/src/webview/context-menu/FilePicker.ts +0 -103
  302. package/extension/src/webview/context-menu/FolderPicker.ts +0 -101
  303. package/extension/src/webview/context-menu/FuzzyFilter.ts +0 -67
  304. package/extension/src/webview/context-menu/ListPicker.ts +0 -179
  305. package/extension/src/webview/context-menu/PickerPanel.ts +0 -205
  306. package/extension/src/webview/context-menu/types.ts +0 -49
  307. package/extension/src/webview/graph/lod/BudgetManager.ts +0 -53
  308. package/extension/src/webview/graph/lod/ClusteringAlgorithm.ts +0 -186
  309. package/extension/src/webview/graph/lod/DistanceChecker.ts +0 -51
  310. package/extension/src/webview/graph/lod/LODManager.ts +0 -177
  311. package/extension/src/webview/graph/lod/OrbitalLayout.ts +0 -52
  312. package/extension/src/webview/graph/lod/__tests__/lod.test.ts +0 -269
  313. package/extension/src/webview/graph/lod/clustering-helpers.ts +0 -62
  314. package/extension/src/webview/graph/lod/config.ts +0 -36
  315. package/extension/src/webview/graph/lod/index.ts +0 -25
  316. package/extension/src/webview/graph/lod/types.ts +0 -91
  317. package/extension/src/webview/input/InputAreaIntegration.ts +0 -408
  318. package/extension/src/webview/options/OptionsController.ts +0 -203
  319. package/extension/src/webview/options/OptionsView.ts +0 -169
  320. package/extension/src/webview/options/types.ts +0 -42
  321. package/extension/src/webview/protocol.ts +0 -134
  322. package/extension/src/webview/slash-menu/SlashMenuController.ts +0 -249
  323. package/extension/src/webview/slash-menu/SlashMenuItems.ts +0 -89
  324. package/extension/src/webview/slash-menu/SlashMenuView.ts +0 -216
  325. package/extension/src/webview/slash-menu/types.ts +0 -61
  326. package/extension/src/webview/spinner/SpinnerController.ts +0 -114
  327. package/extension/src/webview/spinner/SpinnerView.ts +0 -67
  328. package/extension/src/webview/spinner/types.ts +0 -35
  329. package/extension/src/webview-panel-manager.ts +0 -131
  330. package/extension/tests/mcp-bridge.test.js +0 -177
  331. package/extension/tests/mcp-bridge.test.ts +0 -183
  332. package/extension/vitest.config.ts +0 -25
  333. package/extension/webview-assets/3d-force-graph.min.js +0 -5
  334. package/extension/webview-assets/analytics.js +0 -174
  335. package/extension/webview-assets/chart.min.js +0 -14
  336. package/extension/webview-assets/chat/chat.js +0 -1907
  337. package/extension/webview-assets/chat/graph-viz.js +0 -144
  338. package/extension/webview-assets/chat/markdown-renderer.js +0 -254
  339. package/extension/webview-assets/dashboard.js +0 -246
  340. package/extension/webview-assets/graph.js +0 -636
  341. package/extension/webview-assets/quality.js +0 -203
  342. package/extension/webview-assets/settings/settings.js +0 -575
  343. package/extension/webview-assets/tags.js +0 -182
  344. package/extension/webview-assets/three.min.js +0 -6
  345. package/extension/webview-assets/workflow-graph.js +0 -108
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.19.1-blue?style=for-the-badge" alt="Version">
9
+ <img src="https://img.shields.io/badge/version-1.21.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>
@@ -80,9 +80,9 @@ function decodeBase64Content(b64) {
80
80
  }
81
81
  function wrapXmlIfNeeded(content) {
82
82
  const trimmed = content.trim();
83
- if (trimmed.startsWith('<mxfile') || trimmed.startsWith('<?xml'))
83
+ if (trimmed.startsWith('<mxfile') || trimmed.startsWith('<?xml') || trimmed.startsWith('<mxGraphModel'))
84
84
  return content;
85
- return `<?xml version="1.0" encoding="UTF-8"?>\n<mxfile host="app.diagrams.net">\n${content}\n</mxfile>`;
85
+ return `<?xml version="1.0" encoding="UTF-8"?>\n<mxfile host="app.diagrams.net">\n<diagram name="Page-1">\n${content}\n</diagram>\n</mxfile>`;
86
86
  }
87
87
  async function renderWithEngine(renderer, inputPath, outputPath, workspace, orchestrationEngine) {
88
88
  switch (renderer) {
@@ -1 +1 @@
1
- {"version":3,"file":"drawio-export-png.js","sourceRoot":"","sources":["../../../src/engine/tools/drawio-export-png.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEvJ,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,gFAAgF;IAC7F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;YACrF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;SAClF;QACD,QAAQ,EAAE,CAAC,gBAAgB,CAAC;KAC7B;CACF,CAAC;AAIF,IAAI,cAAc,GAAwB,IAAI,CAAC;AAE/C,MAAM,UAAU,cAAc,CAAC,mBAAyB;IACtD,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IACnD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,OAAO,EAAE,CAAC;QAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAAC,cAAc,GAAG,YAAY,CAAC;QAAC,OAAO,cAAc,CAAC;IAAC,CAAC;IACvG,IAAI,mBAAmB,IAAI,iBAAiB,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,CAAC;QACzF,cAAc,GAAG,qBAAqB,CAAC;QAAC,OAAO,cAAc,CAAC;IAChE,CAAC;IACD,IAAI,mBAAmB,IAAI,iBAAiB,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAAE,CAAC;QAC/E,cAAc,GAAG,eAAe,CAAC;QAAC,OAAO,cAAc,CAAC;IAC1D,CAAC;IACD,cAAc,GAAG,MAAM,CAAC;IACxB,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,mBAAyB;IAC5D,OAAO,cAAc,CAAC,mBAAmB,CAAC,KAAK,MAAM,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,cAAc,GAAG,IAAI,CAAC;IACtB,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAA6B,EAC7B,SAAiB,EACjB,mBAAyB;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAoC,CAAC;IACtD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACrC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACrD,MAAM,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACpF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7G,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC,kBAAkB,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACjF,OAAO,6EAA6E,OAAO,aAAa,CAAC;AAC3G,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,QAAsB,EAAE,SAAiB,EAAE,UAAkB,EAC7D,SAAiB,EAAE,mBAAyB;IAE5C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YAAE,MAAM,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAAC,MAAM;QACrE,KAAK,qBAAqB;YAAE,MAAM,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAAC,MAAM;QACjH,KAAK,eAAe;YAAE,MAAM,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAAC,MAAM;QAC9G,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;IAC/G,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"drawio-export-png.js","sourceRoot":"","sources":["../../../src/engine/tools/drawio-export-png.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * SA4E-85 — Knowledge SQLite persistence layer.
3
+ * Internal storage behind KnowledgeService. Not a LangGraph checkpointer —
4
+ * checkpoints are JSON projections stored here. DB perms hardened (Finding #22).
5
+ */
6
+ import Database from 'better-sqlite3';
7
+ import type { Thread, Message, Checkpoint, ToolExecution, Artifact, KnowledgeEvent, Agent, SaveCheckpointInput, MessageInput } from './models.js';
8
+ export declare class KnowledgeDb {
9
+ private db;
10
+ constructor(dbPath?: string, existing?: Database.Database);
11
+ static createInMemory(): KnowledgeDb;
12
+ private migrate;
13
+ close(): void;
14
+ createThread(t: Thread): void;
15
+ listThreads(workspaceId: string): Thread[];
16
+ getThread(threadId: string): Thread | null;
17
+ deleteThread(threadId: string): void;
18
+ appendMessage(workspaceId: string, threadId: string, m: MessageInput, seq: number): void;
19
+ listMessages(threadId: string): Message[];
20
+ countMessages(threadId: string): number;
21
+ getCheckpoint(threadId: string): Checkpoint | null;
22
+ upsertCheckpoint(workspaceId: string, threadId: string, input: SaveCheckpointInput): Checkpoint;
23
+ addToolExecution(exec: ToolExecution): void;
24
+ addArtifact(a: Artifact): void;
25
+ listArtifacts(threadId: string): Artifact[];
26
+ appendEvent(workspaceId: string, threadId: string, type: string, payload: unknown): void;
27
+ listEvents(threadId: string): KnowledgeEvent[];
28
+ upsertAgent(a: Agent): Agent;
29
+ listAgents(): Agent[];
30
+ }
@@ -0,0 +1,148 @@
1
+ /**
2
+ * SA4E-85 — Knowledge SQLite persistence layer.
3
+ * Internal storage behind KnowledgeService. Not a LangGraph checkpointer —
4
+ * checkpoints are JSON projections stored here. DB perms hardened (Finding #22).
5
+ */
6
+ import Database from 'better-sqlite3';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as crypto from 'crypto';
10
+ import { KNOWLEDGE_SCHEMA } from './schema.js';
11
+ function parse(raw, fallback) {
12
+ if (!raw)
13
+ return fallback;
14
+ try {
15
+ return JSON.parse(raw);
16
+ }
17
+ catch {
18
+ return fallback;
19
+ }
20
+ }
21
+ function openDb(dbPath) {
22
+ if (!dbPath)
23
+ throw new Error('KnowledgeDb requires a dbPath');
24
+ const dir = path.dirname(dbPath);
25
+ if (!fs.existsSync(dir))
26
+ fs.mkdirSync(dir, { recursive: true });
27
+ const db = new Database(dbPath);
28
+ db.pragma('journal_mode = WAL');
29
+ db.pragma('foreign_keys = ON');
30
+ try {
31
+ fs.chmodSync(dbPath, 0o600);
32
+ }
33
+ catch { /* best-effort on Windows */ }
34
+ return db;
35
+ }
36
+ export class KnowledgeDb {
37
+ db;
38
+ constructor(dbPath, existing) {
39
+ this.db = existing ?? openDb(dbPath);
40
+ this.migrate();
41
+ }
42
+ static createInMemory() {
43
+ return new KnowledgeDb(undefined, new Database(':memory:'));
44
+ }
45
+ migrate() { this.db.exec(KNOWLEDGE_SCHEMA); }
46
+ close() { this.db.close(); }
47
+ // --- threads (projection) ---
48
+ createThread(t) {
49
+ this.db.prepare('INSERT INTO threads (thread_id, workspace_id, title, agent_id, status, created_at, updated_at) VALUES (@thread_id, @workspace_id, @title, @agent_id, @status, @created_at, @updated_at)')
50
+ .run(t);
51
+ }
52
+ listThreads(workspaceId) {
53
+ return this.db.prepare('SELECT * FROM threads WHERE workspace_id = ? ORDER BY updated_at DESC').all(workspaceId);
54
+ }
55
+ getThread(threadId) {
56
+ const row = this.db.prepare('SELECT * FROM threads WHERE thread_id = ?').get(threadId);
57
+ return row ? row : null;
58
+ }
59
+ deleteThread(threadId) {
60
+ this.db.transaction(() => {
61
+ for (const table of ['threads', 'messages', 'checkpoints', 'tool_executions', 'artifacts', 'events']) {
62
+ this.db.prepare(`DELETE FROM ${table} WHERE thread_id = ?`).run(threadId);
63
+ }
64
+ })();
65
+ }
66
+ // --- messages (projection) ---
67
+ appendMessage(workspaceId, threadId, m, seq) {
68
+ const row = { id: m.id ?? crypto.randomUUID(), thread_id: threadId, workspace_id: workspaceId, role: m.role, content: m.content, agent_id: m.agent_id ?? null, timestamp: m.timestamp ?? new Date().toISOString(), seq };
69
+ this.db.prepare('INSERT OR IGNORE INTO messages (id, thread_id, workspace_id, role, content, agent_id, timestamp, seq) VALUES (@id, @thread_id, @workspace_id, @role, @content, @agent_id, @timestamp, @seq)').run(row);
70
+ }
71
+ listMessages(threadId) {
72
+ return this.db.prepare('SELECT * FROM messages WHERE thread_id = ? ORDER BY seq ASC').all(threadId);
73
+ }
74
+ countMessages(threadId) {
75
+ const row = this.db.prepare('SELECT COUNT(*) as cnt FROM messages WHERE thread_id = ?').get(threadId);
76
+ return row?.cnt ?? 0;
77
+ }
78
+ // --- checkpoints (projection) ---
79
+ getCheckpoint(threadId) {
80
+ const row = this.db.prepare('SELECT * FROM checkpoints WHERE thread_id = ?').get(threadId);
81
+ if (!row)
82
+ return null;
83
+ return {
84
+ thread_id: row.thread_id,
85
+ workspace_id: row.workspace_id,
86
+ checkpoint: parse(row.checkpoint, null),
87
+ metadata: parse(row.metadata, {}),
88
+ channel_versions: parse(row.channel_versions, {}),
89
+ pending_writes: parse(row.pending_writes, []),
90
+ version: row.version,
91
+ updated_at: row.updated_at,
92
+ };
93
+ }
94
+ upsertCheckpoint(workspaceId, threadId, input) {
95
+ const existing = this.getCheckpoint(threadId);
96
+ const version = (existing?.version ?? 0) + 1;
97
+ const writes = [...(existing?.pending_writes ?? []), ...(input.writes ?? input.pendingWrites ?? [])];
98
+ const checkpoint = input.checkpoint ?? existing?.checkpoint ?? null;
99
+ const metadata = input.metadata ?? existing?.metadata ?? {};
100
+ const channelVersions = input.newVersions ?? existing?.channel_versions ?? {};
101
+ const updatedAt = new Date().toISOString();
102
+ this.db.prepare('INSERT INTO checkpoints (thread_id, workspace_id, checkpoint, metadata, channel_versions, pending_writes, version, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (thread_id) DO UPDATE SET checkpoint = excluded.checkpoint, metadata = excluded.metadata, channel_versions = excluded.channel_versions, pending_writes = excluded.pending_writes, version = excluded.version, updated_at = excluded.updated_at')
103
+ .run(threadId, workspaceId, JSON.stringify(checkpoint), JSON.stringify(metadata), JSON.stringify(channelVersions), JSON.stringify(writes), version, updatedAt);
104
+ return { thread_id: threadId, workspace_id: workspaceId, checkpoint, metadata, channel_versions: channelVersions, pending_writes: writes, version, updated_at: updatedAt };
105
+ }
106
+ // --- tool executions (projection) ---
107
+ addToolExecution(exec) {
108
+ this.db.prepare('INSERT INTO tool_executions (id, thread_id, workspace_id, tool_id, name, status, input, output, created_at) VALUES (@id, @thread_id, @workspace_id, @tool_id, @name, @status, @input, @output, @created_at)')
109
+ .run({ ...exec, input: JSON.stringify(exec.input ?? null), output: JSON.stringify(exec.output ?? null) });
110
+ }
111
+ // --- artifacts (projection) ---
112
+ addArtifact(a) {
113
+ this.db.prepare('INSERT INTO artifacts (id, thread_id, workspace_id, type, name, content, created_at) VALUES (@id, @thread_id, @workspace_id, @type, @name, @content, @created_at)')
114
+ .run({ ...a, content: JSON.stringify(a.content ?? null) });
115
+ }
116
+ listArtifacts(threadId) {
117
+ return this.db.prepare('SELECT * FROM artifacts WHERE thread_id = ? ORDER BY created_at ASC').all(threadId)
118
+ .map((row) => ({ ...row, content: parse(row.content, null) }));
119
+ }
120
+ // --- events (append-only log) ---
121
+ appendEvent(workspaceId, threadId, type, payload) {
122
+ this.db.prepare('INSERT INTO events (thread_id, workspace_id, type, payload, created_at) VALUES (?, ?, ?, ?, ?)')
123
+ .run(threadId, workspaceId, type, JSON.stringify(payload ?? {}), new Date().toISOString());
124
+ }
125
+ listEvents(threadId) {
126
+ return this.db.prepare('SELECT * FROM events WHERE thread_id = ? ORDER BY id ASC').all(threadId)
127
+ .map((row) => ({ ...row, payload: parse(row.payload, null) }));
128
+ }
129
+ // --- agents (registry) ---
130
+ upsertAgent(a) {
131
+ this.db.prepare('INSERT INTO agents (agent_id, name, description, tools, mcp_servers, auto_approve, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (agent_id) DO UPDATE SET name = excluded.name, description = excluded.description, tools = excluded.tools, mcp_servers = excluded.mcp_servers, auto_approve = excluded.auto_approve, updated_at = excluded.updated_at')
132
+ .run(a.agent_id, a.name, a.description, JSON.stringify(a.tools), JSON.stringify(a.mcp_servers), JSON.stringify(a.auto_approve), a.created_at, a.updated_at);
133
+ return a;
134
+ }
135
+ listAgents() {
136
+ return this.db.prepare('SELECT * FROM agents ORDER BY name ASC').all().map((row) => ({
137
+ agent_id: row.agent_id,
138
+ name: row.name,
139
+ description: row.description,
140
+ tools: parse(row.tools, []),
141
+ mcp_servers: parse(row.mcp_servers, []),
142
+ auto_approve: parse(row.auto_approve, []),
143
+ created_at: row.created_at,
144
+ updated_at: row.updated_at,
145
+ }));
146
+ }
147
+ }
148
+ //# sourceMappingURL=KnowledgeDb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeDb.js","sourceRoot":"","sources":["../../src/knowledge/KnowledgeDb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * SA4E-85 — Knowledge Module.
3
+ * Wraps KnowledgeService for the ModuleRegistry lifecycle. Exposes the service
4
+ * to route factories via getService(). DB path follows backend convention:
5
+ * <workspace>/.code-intel/knowledge.db (matching memory module data dir).
6
+ */
7
+ import type { IModule, ModuleStatus } from '../types/module.js';
8
+ import type { ToolHandler, ToolDefinition } from '../types/tool.js';
9
+ import type { Logger } from 'pino';
10
+ import { KnowledgeService } from './KnowledgeService.js';
11
+ export interface KnowledgeModuleOptions {
12
+ dbPath?: string;
13
+ defaultWorkspace?: string;
14
+ service?: KnowledgeService;
15
+ }
16
+ export declare class KnowledgeModule implements IModule {
17
+ private readonly options;
18
+ readonly name = "knowledge";
19
+ private _status;
20
+ private logger;
21
+ private db;
22
+ private service;
23
+ constructor(logger: Logger, options?: KnowledgeModuleOptions);
24
+ get status(): ModuleStatus;
25
+ getService(): KnowledgeService;
26
+ initialize(): Promise<void>;
27
+ shutdown(): Promise<void>;
28
+ getToolHandlers(): Map<string, ToolHandler>;
29
+ getToolDefinitions(): ToolDefinition[];
30
+ private resolveDefaultDbPath;
31
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * SA4E-85 — Knowledge Module.
3
+ * Wraps KnowledgeService for the ModuleRegistry lifecycle. Exposes the service
4
+ * to route factories via getService(). DB path follows backend convention:
5
+ * <workspace>/.code-intel/knowledge.db (matching memory module data dir).
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { KnowledgeDb } from './KnowledgeDb.js';
10
+ import { KnowledgeService } from './KnowledgeService.js';
11
+ export class KnowledgeModule {
12
+ options;
13
+ name = 'knowledge';
14
+ _status = 'initializing';
15
+ logger;
16
+ db = null;
17
+ service;
18
+ constructor(logger, options = {}) {
19
+ this.options = options;
20
+ this.logger = logger.child({ module: this.name });
21
+ }
22
+ get status() { return this._status; }
23
+ getService() { return this.service; }
24
+ async initialize() {
25
+ this.logger.info('Initializing knowledge module');
26
+ try {
27
+ if (this.options.service) {
28
+ this.service = this.options.service;
29
+ }
30
+ else {
31
+ const dbPath = this.options.dbPath ?? this.resolveDefaultDbPath();
32
+ const dir = path.dirname(dbPath);
33
+ if (!fs.existsSync(dir))
34
+ fs.mkdirSync(dir, { recursive: true });
35
+ this.db = new KnowledgeDb(dbPath);
36
+ this.service = new KnowledgeService(this.db, this.logger, {
37
+ defaultWorkspace: this.options.defaultWorkspace,
38
+ });
39
+ }
40
+ this._status = 'ready';
41
+ this.logger.info('Knowledge module ready');
42
+ }
43
+ catch (err) {
44
+ this.logger.error({ err }, 'Failed to initialize knowledge module');
45
+ this._status = 'error';
46
+ }
47
+ }
48
+ async shutdown() {
49
+ if (this.db) {
50
+ this.db.close();
51
+ this.db = null;
52
+ }
53
+ this._status = 'stopped';
54
+ }
55
+ getToolHandlers() { return new Map(); }
56
+ getToolDefinitions() { return []; }
57
+ resolveDefaultDbPath() {
58
+ const dataDir = process.env.CODE_INTEL_DATA_DIR || '.code-intel';
59
+ const workspace = process.env.CODE_INTEL_WORKSPACE || process.cwd();
60
+ return path.resolve(workspace, dataDir, 'knowledge.db');
61
+ }
62
+ }
63
+ //# sourceMappingURL=KnowledgeModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeModule.js","sourceRoot":"","sources":["../../src/knowledge/KnowledgeModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * SA4E-85 — KnowledgeService: business logic + workspace binding.
3
+ * Event Sourcing: every mutation appends to the append-only event log;
4
+ * threads / messages / checkpoints are projections on top of it.
5
+ *
6
+ * Workspace isolation (SECURITY-REVIEW Finding #18): every thread access verifies
7
+ * the caller's workspace_id matches the stored one. On mismatch all accessor
8
+ * methods return null (routes map to 404 — never 403, preventing enumeration).
9
+ */
10
+ import type { Logger } from 'pino';
11
+ import type { KnowledgeDb } from './KnowledgeDb.js';
12
+ import type { ProjectContext } from '../modules/memory/ProjectContext.js';
13
+ import type { Thread, Message, Checkpoint, KnowledgeEvent, Artifact, ToolExecution, Agent, CreateThreadInput, SaveCheckpointInput } from './models.js';
14
+ export interface KnowledgeServiceOptions {
15
+ defaultWorkspace?: string;
16
+ }
17
+ export declare class KnowledgeService {
18
+ private readonly db;
19
+ private readonly logger;
20
+ private readonly defaultWorkspace;
21
+ constructor(db: KnowledgeDb, logger: Logger, options?: KnowledgeServiceOptions);
22
+ /** Caller workspace: X-Project-Id > JWT wid claim > default. */
23
+ resolveWorkspaceId(ctx: ProjectContext): string;
24
+ /** Return the thread only if it belongs to the caller's workspace. */
25
+ private ownedThread;
26
+ createThread(ctx: ProjectContext, input: CreateThreadInput): Thread;
27
+ listThreads(ctx: ProjectContext): Thread[];
28
+ getThread(ctx: ProjectContext, threadId: string): Thread | null;
29
+ getMessages(ctx: ProjectContext, threadId: string): Message[] | null;
30
+ getCheckpoint(ctx: ProjectContext, threadId: string): Checkpoint | null;
31
+ /** Save checkpoint (+ optional writes / messages) — projection updated transactionally. */
32
+ saveCheckpoint(ctx: ProjectContext, threadId: string, input: SaveCheckpointInput): Checkpoint | null;
33
+ getEvents(ctx: ProjectContext, threadId: string): KnowledgeEvent[] | null;
34
+ getArtifacts(ctx: ProjectContext, threadId: string): Artifact[] | null;
35
+ addArtifact(ctx: ProjectContext, threadId: string, input: {
36
+ type: string;
37
+ name: string;
38
+ content?: unknown;
39
+ }): Artifact | null;
40
+ addToolExecution(ctx: ProjectContext, threadId: string, input: {
41
+ tool_id: string;
42
+ name: string;
43
+ status: ToolExecution['status'];
44
+ input?: unknown;
45
+ output?: unknown;
46
+ }): ToolExecution | null;
47
+ getAgents(): Agent[];
48
+ upsertAgent(input: Omit<Agent, 'created_at' | 'updated_at'>): Agent;
49
+ deleteThread(ctx: ProjectContext, threadId: string): boolean;
50
+ }
@@ -0,0 +1,152 @@
1
+ /**
2
+ * SA4E-85 — KnowledgeService: business logic + workspace binding.
3
+ * Event Sourcing: every mutation appends to the append-only event log;
4
+ * threads / messages / checkpoints are projections on top of it.
5
+ *
6
+ * Workspace isolation (SECURITY-REVIEW Finding #18): every thread access verifies
7
+ * the caller's workspace_id matches the stored one. On mismatch all accessor
8
+ * methods return null (routes map to 404 — never 403, preventing enumeration).
9
+ */
10
+ import * as crypto from 'crypto';
11
+ import { isUuidV4 } from './models.js';
12
+ export class KnowledgeService {
13
+ db;
14
+ logger;
15
+ defaultWorkspace;
16
+ constructor(db, logger, options = {}) {
17
+ this.db = db;
18
+ this.logger = logger;
19
+ this.defaultWorkspace = options.defaultWorkspace ?? 'default';
20
+ }
21
+ /** Caller workspace: X-Project-Id > JWT wid claim > default. */
22
+ resolveWorkspaceId(ctx) {
23
+ return ctx.projectId || ctx.workspaceId || this.defaultWorkspace;
24
+ }
25
+ /** Return the thread only if it belongs to the caller's workspace. */
26
+ ownedThread(ctx, threadId) {
27
+ if (!isUuidV4(threadId))
28
+ return null;
29
+ const thread = this.db.getThread(threadId);
30
+ if (!thread || thread.workspace_id !== this.resolveWorkspaceId(ctx))
31
+ return null;
32
+ return thread;
33
+ }
34
+ createThread(ctx, input) {
35
+ const now = new Date().toISOString();
36
+ const thread = {
37
+ thread_id: crypto.randomUUID(),
38
+ workspace_id: this.resolveWorkspaceId(ctx),
39
+ title: input.title?.trim() || 'New thread',
40
+ agent_id: input.agent_id || null,
41
+ status: 'active',
42
+ created_at: now,
43
+ updated_at: now,
44
+ };
45
+ this.db.createThread(thread);
46
+ this.db.appendEvent(thread.workspace_id, thread.thread_id, 'THREAD_CREATED', {
47
+ title: thread.title,
48
+ agent_id: thread.agent_id,
49
+ });
50
+ this.logger.info({ thread_id: thread.thread_id, workspace_id: thread.workspace_id }, 'Thread created');
51
+ return thread;
52
+ }
53
+ listThreads(ctx) {
54
+ return this.db.listThreads(this.resolveWorkspaceId(ctx));
55
+ }
56
+ getThread(ctx, threadId) {
57
+ return this.ownedThread(ctx, threadId);
58
+ }
59
+ getMessages(ctx, threadId) {
60
+ if (!this.ownedThread(ctx, threadId))
61
+ return null;
62
+ return this.db.listMessages(threadId);
63
+ }
64
+ getCheckpoint(ctx, threadId) {
65
+ if (!this.ownedThread(ctx, threadId))
66
+ return null;
67
+ return this.db.getCheckpoint(threadId);
68
+ }
69
+ /** Save checkpoint (+ optional writes / messages) — projection updated transactionally. */
70
+ saveCheckpoint(ctx, threadId, input) {
71
+ const thread = this.ownedThread(ctx, threadId);
72
+ if (!thread)
73
+ return null;
74
+ const checkpoint = this.db.upsertCheckpoint(thread.workspace_id, threadId, input);
75
+ const messages = input.messages ?? [];
76
+ const seqBase = this.db.countMessages(threadId);
77
+ messages.forEach((m, i) => {
78
+ this.db.appendMessage(thread.workspace_id, threadId, m, seqBase + i);
79
+ });
80
+ this.db.appendEvent(thread.workspace_id, threadId, 'CHECKPOINT_SAVED', {
81
+ version: checkpoint.version,
82
+ writes: (input.writes ?? input.pendingWrites ?? []).length,
83
+ messages: messages.length,
84
+ });
85
+ this.logger.info({ thread_id: threadId, version: checkpoint.version }, 'Checkpoint saved');
86
+ return checkpoint;
87
+ }
88
+ getEvents(ctx, threadId) {
89
+ if (!this.ownedThread(ctx, threadId))
90
+ return null;
91
+ return this.db.listEvents(threadId);
92
+ }
93
+ getArtifacts(ctx, threadId) {
94
+ if (!this.ownedThread(ctx, threadId))
95
+ return null;
96
+ return this.db.listArtifacts(threadId);
97
+ }
98
+ addArtifact(ctx, threadId, input) {
99
+ const thread = this.ownedThread(ctx, threadId);
100
+ if (!thread)
101
+ return null;
102
+ const artifact = {
103
+ id: crypto.randomUUID(),
104
+ thread_id: threadId,
105
+ workspace_id: thread.workspace_id,
106
+ type: input.type,
107
+ name: input.name,
108
+ content: input.content ?? null,
109
+ created_at: new Date().toISOString(),
110
+ };
111
+ this.db.addArtifact(artifact);
112
+ this.db.appendEvent(thread.workspace_id, threadId, 'ARTIFACT_ADDED', { type: input.type, name: input.name });
113
+ return artifact;
114
+ }
115
+ addToolExecution(ctx, threadId, input) {
116
+ const thread = this.ownedThread(ctx, threadId);
117
+ if (!thread)
118
+ return null;
119
+ const exec = {
120
+ id: crypto.randomUUID(),
121
+ thread_id: threadId,
122
+ workspace_id: thread.workspace_id,
123
+ tool_id: input.tool_id,
124
+ name: input.name,
125
+ status: input.status,
126
+ input: input.input ?? null,
127
+ output: input.output ?? null,
128
+ created_at: new Date().toISOString(),
129
+ };
130
+ this.db.addToolExecution(exec);
131
+ this.db.appendEvent(thread.workspace_id, threadId, 'TOOL_EXECUTION', { tool_id: input.tool_id, status: input.status });
132
+ return exec;
133
+ }
134
+ getAgents() {
135
+ return this.db.listAgents();
136
+ }
137
+ upsertAgent(input) {
138
+ const now = new Date().toISOString();
139
+ const agent = { ...input, created_at: now, updated_at: now };
140
+ return this.db.upsertAgent(agent);
141
+ }
142
+ deleteThread(ctx, threadId) {
143
+ const thread = this.ownedThread(ctx, threadId);
144
+ if (!thread)
145
+ return false;
146
+ this.db.appendEvent(thread.workspace_id, threadId, 'THREAD_DELETED', {});
147
+ this.db.deleteThread(threadId);
148
+ this.logger.info({ thread_id: threadId }, 'Thread deleted');
149
+ return true;
150
+ }
151
+ }
152
+ //# sourceMappingURL=KnowledgeService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeService.js","sourceRoot":"","sources":["../../src/knowledge/KnowledgeService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * SA4E-85 — PBT-HYD-01: thread_id from Backend KB createThread always UUID v4.
3
+ * Property-based testing with fast-check (500 runs, per STC).
4
+ * STC: PBT-HYD-01 — thread_id always valid UUID v4 format.
5
+ */
6
+ export {};
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SA4E-85 — PBT-HYD-01: thread_id from Backend KB createThread always UUID v4.
3
+ * Property-based testing with fast-check (500 runs, per STC).
4
+ * STC: PBT-HYD-01 — thread_id always valid UUID v4 format.
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import fc from 'fast-check';
8
+ import pino from 'pino';
9
+ import { KnowledgeDb } from '../KnowledgeDb.js';
10
+ import { KnowledgeService } from '../KnowledgeService.js';
11
+ import { createProjectContext } from '../../modules/memory/ProjectContext.js';
12
+ import { isUuidV4, UUID_V4_REGEX } from '../models.js';
13
+ const logger = pino({ level: 'silent' });
14
+ describe('PBT-HYD-01 — backend thread_id always valid UUID v4', () => {
15
+ it('holds for 500 random createThread inputs', () => {
16
+ const db = KnowledgeDb.createInMemory();
17
+ const service = new KnowledgeService(db, logger);
18
+ const ctx = createProjectContext('pbt-ws', 'pbt-user');
19
+ fc.assert(fc.property(fc.string({ maxLength: 64 }), fc.string({ maxLength: 32 }), fc.boolean(), (title, agentId, hasAgent) => {
20
+ const thread = service.createThread(ctx, {
21
+ title,
22
+ agent_id: hasAgent ? agentId : null,
23
+ });
24
+ expect(thread.thread_id).toMatch(UUID_V4_REGEX);
25
+ expect(isUuidV4(thread.thread_id)).toBe(true);
26
+ }), { numRuns: 500 });
27
+ });
28
+ it('thread ids are unique across creations', () => {
29
+ const db = KnowledgeDb.createInMemory();
30
+ const service = new KnowledgeService(db, logger);
31
+ const ctx = createProjectContext('pbt-ws', 'pbt-user');
32
+ const ids = new Set(Array.from({ length: 100 }, () => service.createThread(ctx, {}).thread_id));
33
+ expect(ids.size).toBe(100);
34
+ });
35
+ it('invalid thread_id strings are rejected by accessors', () => {
36
+ const db = KnowledgeDb.createInMemory();
37
+ const service = new KnowledgeService(db, logger);
38
+ const ctx = createProjectContext('pbt-ws', 'pbt-user');
39
+ fc.assert(fc.property(fc.string({ maxLength: 100 }), (badId) => {
40
+ fc.pre(!UUID_V4_REGEX.test(badId));
41
+ expect(service.getThread(ctx, badId)).toBeNull();
42
+ expect(service.getMessages(ctx, badId)).toBeNull();
43
+ expect(service.getCheckpoint(ctx, badId)).toBeNull();
44
+ }), { numRuns: 500 });
45
+ });
46
+ });
47
+ //# sourceMappingURL=KnowledgeService.pbt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeService.pbt.test.js","sourceRoot":"","sources":["../../../src/knowledge/__tests__/KnowledgeService.pbt.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * SA4E-85 — KnowledgeService unit tests.
3
+ * Covers: thread creation (PBT-HYD-01 contract), workspace binding (#18),
4
+ * checkpoint PUT→GET roundtrip (IT-HYD-03 backend logic), DELETE cascade.
5
+ */
6
+ export {};