@vpxa/aikit 0.1.59 → 0.1.61

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 (553) hide show
  1. package/README.md +38 -3
  2. package/package.json +2 -1
  3. package/packages/aikit-client/dist/index.d.ts +146 -4
  4. package/packages/aikit-client/dist/index.js +5 -1
  5. package/packages/analyzers/dist/index.d.ts +309 -11
  6. package/packages/analyzers/dist/index.js +54 -1
  7. package/packages/chunker/dist/index.d.ts +451 -18
  8. package/packages/chunker/dist/index.js +24 -1
  9. package/packages/cli/dist/{commands/init/constants.js → constants-D3v4VDf0.js} +1 -1
  10. package/packages/cli/dist/index.js +15 -2
  11. package/packages/cli/dist/init-D0CiV9PX.js +7 -0
  12. package/packages/cli/dist/scaffold-CJwkHf-q.js +2 -0
  13. package/packages/cli/dist/{commands/init/templates.js → templates-DJ7EC5vw.js} +1 -1
  14. package/packages/cli/dist/user-HmJYNt5b.js +5 -0
  15. package/packages/core/dist/index.d.ts +357 -6
  16. package/packages/core/dist/index.js +1 -1
  17. package/packages/dashboard/dist/assets/{index-Cdke3KDK.js → index-C6D-PCp0.js} +7 -7
  18. package/packages/dashboard/dist/assets/index-C6D-PCp0.js.map +1 -0
  19. package/packages/dashboard/dist/index.html +1 -1
  20. package/packages/elicitation/dist/index.d.ts +139 -4
  21. package/packages/elicitation/dist/index.js +1 -1
  22. package/packages/embeddings/dist/index.d.ts +45 -2
  23. package/packages/embeddings/dist/index.js +1 -1
  24. package/packages/enterprise-bridge/dist/index.d.ts +275 -7
  25. package/packages/enterprise-bridge/dist/index.js +1 -1
  26. package/packages/flows/dist/index.d.ts +345 -12
  27. package/packages/flows/dist/index.js +15 -1
  28. package/packages/indexer/dist/index.d.ts +196 -6
  29. package/packages/indexer/dist/index.js +1 -1
  30. package/packages/present/dist/index.html +314 -313
  31. package/packages/server/dist/curated-manager-DX-_oJg0.js +5 -0
  32. package/packages/server/dist/index.d.ts +139 -1
  33. package/packages/server/dist/index.js +1 -1
  34. package/packages/server/dist/server-eMZ64H9b.js +1274 -0
  35. package/packages/store/dist/index.d.ts +316 -5
  36. package/packages/store/dist/index.js +90 -1
  37. package/packages/store/dist/lance-store-jdHZp-V4.js +1 -0
  38. package/packages/tools/dist/index.d.ts +2161 -61
  39. package/packages/tools/dist/index.js +117 -1
  40. package/packages/tui/dist/{App-CoMyn2kt.js → App-DobfqTPH.js} +1 -1
  41. package/packages/tui/dist/App.d.ts +1 -1
  42. package/packages/tui/dist/App.js +1 -1
  43. package/packages/tui/dist/{LogPanel-CDItCD0E.js → LogPanel-DGeptKim.js} +3 -3
  44. package/packages/tui/dist/hooks/useKBClient.d.ts +1 -1
  45. package/packages/tui/dist/{index-MXJeXmCf.d.ts → index-floZQwfo.d.ts} +2 -1
  46. package/packages/tui/dist/index.d.ts +1 -1
  47. package/packages/tui/dist/index.js +1 -1
  48. package/packages/tui/dist/panels/LogPanel.js +1 -1
  49. package/scaffold/definitions/bodies.mjs +47 -0
  50. package/scaffold/definitions/protocols.mjs +9 -0
  51. package/scaffold/definitions/tools.mjs +15 -0
  52. package/scaffold/general/agents/Debugger.agent.md +9 -0
  53. package/scaffold/general/agents/Documenter.agent.md +9 -0
  54. package/scaffold/general/agents/Frontend.agent.md +9 -0
  55. package/scaffold/general/agents/Implementer.agent.md +9 -0
  56. package/scaffold/general/agents/Orchestrator.agent.md +47 -0
  57. package/scaffold/general/agents/Planner.agent.md +9 -0
  58. package/scaffold/general/agents/Refactor.agent.md +9 -0
  59. package/scaffold/general/agents/Security.agent.md +9 -0
  60. package/scaffold/general/agents/_shared/code-agent-base.md +9 -0
  61. package/scaffold/general/skills/aikit/SKILL.md +71 -7
  62. package/packages/aikit-client/dist/direct-client.d.ts +0 -37
  63. package/packages/aikit-client/dist/direct-client.js +0 -1
  64. package/packages/aikit-client/dist/mcp-client.d.ts +0 -19
  65. package/packages/aikit-client/dist/mcp-client.js +0 -4
  66. package/packages/aikit-client/dist/parsers.d.ts +0 -35
  67. package/packages/aikit-client/dist/parsers.js +0 -2
  68. package/packages/aikit-client/dist/types.d.ts +0 -62
  69. package/packages/aikit-client/dist/types.js +0 -1
  70. package/packages/analyzers/dist/blast-radius-analyzer.d.ts +0 -19
  71. package/packages/analyzers/dist/blast-radius-analyzer.js +0 -6
  72. package/packages/analyzers/dist/dependency-analyzer.d.ts +0 -32
  73. package/packages/analyzers/dist/dependency-analyzer.js +0 -8
  74. package/packages/analyzers/dist/diagram-generator.d.ts +0 -16
  75. package/packages/analyzers/dist/diagram-generator.js +0 -2
  76. package/packages/analyzers/dist/entry-point-analyzer.d.ts +0 -40
  77. package/packages/analyzers/dist/entry-point-analyzer.js +0 -4
  78. package/packages/analyzers/dist/knowledge-producer.d.ts +0 -40
  79. package/packages/analyzers/dist/knowledge-producer.js +0 -26
  80. package/packages/analyzers/dist/pattern-analyzer.d.ts +0 -15
  81. package/packages/analyzers/dist/pattern-analyzer.js +0 -2
  82. package/packages/analyzers/dist/regex-call-graph.d.ts +0 -10
  83. package/packages/analyzers/dist/regex-call-graph.js +0 -1
  84. package/packages/analyzers/dist/structure-analyzer.d.ts +0 -19
  85. package/packages/analyzers/dist/structure-analyzer.js +0 -4
  86. package/packages/analyzers/dist/symbol-analyzer.d.ts +0 -14
  87. package/packages/analyzers/dist/symbol-analyzer.js +0 -9
  88. package/packages/analyzers/dist/ts-call-graph.d.ts +0 -29
  89. package/packages/analyzers/dist/ts-call-graph.js +0 -1
  90. package/packages/analyzers/dist/types.d.ts +0 -110
  91. package/packages/analyzers/dist/types.js +0 -1
  92. package/packages/chunker/dist/call-graph-extractor.d.ts +0 -25
  93. package/packages/chunker/dist/call-graph-extractor.js +0 -1
  94. package/packages/chunker/dist/chunker-factory.d.ts +0 -19
  95. package/packages/chunker/dist/chunker-factory.js +0 -1
  96. package/packages/chunker/dist/chunker.interface.d.ts +0 -13
  97. package/packages/chunker/dist/chunker.interface.js +0 -1
  98. package/packages/chunker/dist/code-chunker.d.ts +0 -17
  99. package/packages/chunker/dist/code-chunker.js +0 -11
  100. package/packages/chunker/dist/extractors/call-extractor.d.ts +0 -24
  101. package/packages/chunker/dist/extractors/call-extractor.js +0 -1
  102. package/packages/chunker/dist/extractors/entry-point-detector.d.ts +0 -14
  103. package/packages/chunker/dist/extractors/entry-point-detector.js +0 -1
  104. package/packages/chunker/dist/extractors/import-extractor.d.ts +0 -14
  105. package/packages/chunker/dist/extractors/import-extractor.js +0 -1
  106. package/packages/chunker/dist/extractors/pattern-detector.d.ts +0 -14
  107. package/packages/chunker/dist/extractors/pattern-detector.js +0 -1
  108. package/packages/chunker/dist/extractors/scope-resolver.d.ts +0 -26
  109. package/packages/chunker/dist/extractors/scope-resolver.js +0 -1
  110. package/packages/chunker/dist/extractors/symbol-extractor.d.ts +0 -14
  111. package/packages/chunker/dist/extractors/symbol-extractor.js +0 -3
  112. package/packages/chunker/dist/extractors/types.d.ts +0 -44
  113. package/packages/chunker/dist/extractors/types.js +0 -1
  114. package/packages/chunker/dist/generic-chunker.d.ts +0 -15
  115. package/packages/chunker/dist/generic-chunker.js +0 -5
  116. package/packages/chunker/dist/markdown-chunker.d.ts +0 -17
  117. package/packages/chunker/dist/markdown-chunker.js +0 -3
  118. package/packages/chunker/dist/wasm/languages.d.ts +0 -18
  119. package/packages/chunker/dist/wasm/languages.js +0 -1
  120. package/packages/chunker/dist/wasm/query-executor.d.ts +0 -70
  121. package/packages/chunker/dist/wasm/query-executor.js +0 -1
  122. package/packages/chunker/dist/wasm/runtime.d.ts +0 -44
  123. package/packages/chunker/dist/wasm/runtime.js +0 -1
  124. package/packages/chunker/dist/wasm/types.d.ts +0 -84
  125. package/packages/chunker/dist/wasm/types.js +0 -1
  126. package/packages/chunker/dist/wasm-chunker.d.ts +0 -23
  127. package/packages/chunker/dist/wasm-chunker.js +0 -6
  128. package/packages/cli/dist/aikit-init.d.ts +0 -59
  129. package/packages/cli/dist/aikit-init.js +0 -1
  130. package/packages/cli/dist/commands/analyze.d.ts +0 -6
  131. package/packages/cli/dist/commands/analyze.js +0 -2
  132. package/packages/cli/dist/commands/context-cmds.d.ts +0 -6
  133. package/packages/cli/dist/commands/context-cmds.js +0 -1
  134. package/packages/cli/dist/commands/environment.d.ts +0 -6
  135. package/packages/cli/dist/commands/environment.js +0 -1
  136. package/packages/cli/dist/commands/execution.d.ts +0 -6
  137. package/packages/cli/dist/commands/execution.js +0 -1
  138. package/packages/cli/dist/commands/flow.d.ts +0 -6
  139. package/packages/cli/dist/commands/flow.js +0 -1
  140. package/packages/cli/dist/commands/graph.d.ts +0 -6
  141. package/packages/cli/dist/commands/graph.js +0 -6
  142. package/packages/cli/dist/commands/init/adapters.d.ts +0 -28
  143. package/packages/cli/dist/commands/init/adapters.js +0 -1
  144. package/packages/cli/dist/commands/init/config.d.ts +0 -10
  145. package/packages/cli/dist/commands/init/config.js +0 -3
  146. package/packages/cli/dist/commands/init/constants.d.ts +0 -46
  147. package/packages/cli/dist/commands/init/curated.d.ts +0 -7
  148. package/packages/cli/dist/commands/init/curated.js +0 -1
  149. package/packages/cli/dist/commands/init/frontmatter.d.ts +0 -79
  150. package/packages/cli/dist/commands/init/frontmatter.js +0 -2
  151. package/packages/cli/dist/commands/init/index.d.ts +0 -36
  152. package/packages/cli/dist/commands/init/index.js +0 -5
  153. package/packages/cli/dist/commands/init/manifest.d.ts +0 -72
  154. package/packages/cli/dist/commands/init/manifest.js +0 -1
  155. package/packages/cli/dist/commands/init/scaffold.d.ts +0 -58
  156. package/packages/cli/dist/commands/init/scaffold.js +0 -1
  157. package/packages/cli/dist/commands/init/templates.d.ts +0 -9
  158. package/packages/cli/dist/commands/init/user.d.ts +0 -61
  159. package/packages/cli/dist/commands/init/user.js +0 -5
  160. package/packages/cli/dist/commands/knowledge.d.ts +0 -6
  161. package/packages/cli/dist/commands/knowledge.js +0 -1
  162. package/packages/cli/dist/commands/search.d.ts +0 -6
  163. package/packages/cli/dist/commands/search.js +0 -1
  164. package/packages/cli/dist/commands/system.d.ts +0 -6
  165. package/packages/cli/dist/commands/system.js +0 -4
  166. package/packages/cli/dist/commands/upgrade.d.ts +0 -6
  167. package/packages/cli/dist/commands/upgrade.js +0 -1
  168. package/packages/cli/dist/commands/workspace.d.ts +0 -6
  169. package/packages/cli/dist/commands/workspace.js +0 -1
  170. package/packages/cli/dist/context.d.ts +0 -7
  171. package/packages/cli/dist/context.js +0 -1
  172. package/packages/cli/dist/helpers.d.ts +0 -55
  173. package/packages/cli/dist/helpers.js +0 -5
  174. package/packages/cli/dist/types.d.ts +0 -9
  175. package/packages/cli/dist/types.js +0 -1
  176. package/packages/core/dist/constants.d.ts +0 -74
  177. package/packages/core/dist/constants.js +0 -1
  178. package/packages/core/dist/content-detector.d.ts +0 -13
  179. package/packages/core/dist/content-detector.js +0 -1
  180. package/packages/core/dist/errors.d.ts +0 -20
  181. package/packages/core/dist/errors.js +0 -1
  182. package/packages/core/dist/global-registry.d.ts +0 -69
  183. package/packages/core/dist/global-registry.js +0 -1
  184. package/packages/core/dist/logger.d.ts +0 -32
  185. package/packages/core/dist/logger.js +0 -1
  186. package/packages/core/dist/types.d.ts +0 -149
  187. package/packages/core/dist/types.js +0 -1
  188. package/packages/dashboard/dist/assets/index-Cdke3KDK.js.map +0 -1
  189. package/packages/elicitation/dist/build.d.ts +0 -14
  190. package/packages/elicitation/dist/build.js +0 -1
  191. package/packages/elicitation/dist/fields.d.ts +0 -32
  192. package/packages/elicitation/dist/fields.js +0 -1
  193. package/packages/elicitation/dist/normalize.d.ts +0 -15
  194. package/packages/elicitation/dist/normalize.js +0 -1
  195. package/packages/elicitation/dist/types.d.ts +0 -88
  196. package/packages/elicitation/dist/types.js +0 -1
  197. package/packages/embeddings/dist/embedder.interface.d.ts +0 -26
  198. package/packages/embeddings/dist/embedder.interface.js +0 -1
  199. package/packages/embeddings/dist/onnx-embedder.d.ts +0 -23
  200. package/packages/embeddings/dist/onnx-embedder.js +0 -1
  201. package/packages/enterprise-bridge/dist/cache.d.ts +0 -28
  202. package/packages/enterprise-bridge/dist/cache.js +0 -1
  203. package/packages/enterprise-bridge/dist/er-client.d.ts +0 -37
  204. package/packages/enterprise-bridge/dist/er-client.js +0 -1
  205. package/packages/enterprise-bridge/dist/evolution-collector.d.ts +0 -62
  206. package/packages/enterprise-bridge/dist/evolution-collector.js +0 -1
  207. package/packages/enterprise-bridge/dist/policy-store.d.ts +0 -45
  208. package/packages/enterprise-bridge/dist/policy-store.js +0 -1
  209. package/packages/enterprise-bridge/dist/push-adapter.d.ts +0 -23
  210. package/packages/enterprise-bridge/dist/push-adapter.js +0 -1
  211. package/packages/enterprise-bridge/dist/result-merger.d.ts +0 -14
  212. package/packages/enterprise-bridge/dist/result-merger.js +0 -1
  213. package/packages/enterprise-bridge/dist/types.d.ts +0 -81
  214. package/packages/enterprise-bridge/dist/types.js +0 -1
  215. package/packages/flows/dist/adapters/claude-plugin.d.ts +0 -25
  216. package/packages/flows/dist/adapters/claude-plugin.js +0 -3
  217. package/packages/flows/dist/adapters/copilot.d.ts +0 -12
  218. package/packages/flows/dist/adapters/copilot.js +0 -1
  219. package/packages/flows/dist/adapters/index.d.ts +0 -12
  220. package/packages/flows/dist/adapters/index.js +0 -1
  221. package/packages/flows/dist/adapters/native.d.ts +0 -10
  222. package/packages/flows/dist/adapters/native.js +0 -1
  223. package/packages/flows/dist/adapters/openspec.d.ts +0 -40
  224. package/packages/flows/dist/adapters/openspec.js +0 -1
  225. package/packages/flows/dist/builtins.d.ts +0 -16
  226. package/packages/flows/dist/builtins.js +0 -1
  227. package/packages/flows/dist/foundation.d.ts +0 -20
  228. package/packages/flows/dist/foundation.js +0 -11
  229. package/packages/flows/dist/git.d.ts +0 -53
  230. package/packages/flows/dist/git.js +0 -2
  231. package/packages/flows/dist/loader.d.ts +0 -13
  232. package/packages/flows/dist/loader.js +0 -2
  233. package/packages/flows/dist/registry.d.ts +0 -23
  234. package/packages/flows/dist/registry.js +0 -1
  235. package/packages/flows/dist/state-machine.d.ts +0 -23
  236. package/packages/flows/dist/state-machine.js +0 -1
  237. package/packages/flows/dist/symlinks.d.ts +0 -17
  238. package/packages/flows/dist/symlinks.js +0 -1
  239. package/packages/flows/dist/types.d.ts +0 -127
  240. package/packages/flows/dist/types.js +0 -1
  241. package/packages/indexer/dist/file-hasher.d.ts +0 -13
  242. package/packages/indexer/dist/file-hasher.js +0 -1
  243. package/packages/indexer/dist/filesystem-crawler.d.ts +0 -29
  244. package/packages/indexer/dist/filesystem-crawler.js +0 -1
  245. package/packages/indexer/dist/graph-extractor.d.ts +0 -22
  246. package/packages/indexer/dist/graph-extractor.js +0 -1
  247. package/packages/indexer/dist/hash-cache.d.ts +0 -24
  248. package/packages/indexer/dist/hash-cache.js +0 -1
  249. package/packages/indexer/dist/incremental-indexer.d.ts +0 -73
  250. package/packages/indexer/dist/incremental-indexer.js +0 -1
  251. package/packages/indexer/dist/smart-index-scheduler.d.ts +0 -47
  252. package/packages/indexer/dist/smart-index-scheduler.js +0 -1
  253. package/packages/server/dist/api.d.ts +0 -3
  254. package/packages/server/dist/api.js +0 -1
  255. package/packages/server/dist/auto-gc.d.ts +0 -30
  256. package/packages/server/dist/auto-gc.js +0 -1
  257. package/packages/server/dist/background-task.d.ts +0 -47
  258. package/packages/server/dist/background-task.js +0 -1
  259. package/packages/server/dist/completions.d.ts +0 -14
  260. package/packages/server/dist/completions.js +0 -1
  261. package/packages/server/dist/compression-interceptor.d.ts +0 -12
  262. package/packages/server/dist/compression-interceptor.js +0 -1
  263. package/packages/server/dist/config.d.ts +0 -16
  264. package/packages/server/dist/cross-workspace.d.ts +0 -43
  265. package/packages/server/dist/cross-workspace.js +0 -1
  266. package/packages/server/dist/curated-manager.d.ts +0 -92
  267. package/packages/server/dist/curated-manager.js +0 -5
  268. package/packages/server/dist/dashboard-static.d.ts +0 -27
  269. package/packages/server/dist/elicitor.d.ts +0 -18
  270. package/packages/server/dist/elicitor.js +0 -1
  271. package/packages/server/dist/idle-timer.d.ts +0 -33
  272. package/packages/server/dist/idle-timer.js +0 -1
  273. package/packages/server/dist/mcp-logging.d.ts +0 -11
  274. package/packages/server/dist/mcp-logging.js +0 -1
  275. package/packages/server/dist/memory-monitor.d.ts +0 -37
  276. package/packages/server/dist/memory-monitor.js +0 -1
  277. package/packages/server/dist/output-schemas.d.ts +0 -244
  278. package/packages/server/dist/output-schemas.js +0 -1
  279. package/packages/server/dist/prompts.d.ts +0 -13
  280. package/packages/server/dist/prompts.js +0 -13
  281. package/packages/server/dist/replay-interceptor.d.ts +0 -23
  282. package/packages/server/dist/replay-interceptor.js +0 -1
  283. package/packages/server/dist/resource-links.d.ts +0 -34
  284. package/packages/server/dist/resource-links.js +0 -1
  285. package/packages/server/dist/resources/curated-resources.d.ts +0 -13
  286. package/packages/server/dist/resources/curated-resources.js +0 -2
  287. package/packages/server/dist/resources/resource-notifier.d.ts +0 -45
  288. package/packages/server/dist/resources/resource-notifier.js +0 -1
  289. package/packages/server/dist/resources/resources.d.ts +0 -8
  290. package/packages/server/dist/resources/resources.js +0 -2
  291. package/packages/server/dist/sampling.d.ts +0 -41
  292. package/packages/server/dist/sampling.js +0 -2
  293. package/packages/server/dist/server.d.ts +0 -63
  294. package/packages/server/dist/server.js +0 -3
  295. package/packages/server/dist/structured-content-guard.d.ts +0 -28
  296. package/packages/server/dist/structured-content-guard.js +0 -1
  297. package/packages/server/dist/task-manager.d.ts +0 -40
  298. package/packages/server/dist/task-manager.js +0 -1
  299. package/packages/server/dist/tool-metadata.d.ts +0 -38
  300. package/packages/server/dist/tool-metadata.js +0 -1
  301. package/packages/server/dist/tool-prefix.d.ts +0 -12
  302. package/packages/server/dist/tool-prefix.js +0 -1
  303. package/packages/server/dist/tool-timeout.d.ts +0 -27
  304. package/packages/server/dist/tool-timeout.js +0 -1
  305. package/packages/server/dist/tools/analyze.tools.d.ts +0 -14
  306. package/packages/server/dist/tools/analyze.tools.js +0 -8
  307. package/packages/server/dist/tools/audit.tool.d.ts +0 -8
  308. package/packages/server/dist/tools/audit.tool.js +0 -1
  309. package/packages/server/dist/tools/brainstorm.tool.d.ts +0 -7
  310. package/packages/server/dist/tools/brainstorm.tool.js +0 -9
  311. package/packages/server/dist/tools/bridge.tools.d.ts +0 -34
  312. package/packages/server/dist/tools/bridge.tools.js +0 -15
  313. package/packages/server/dist/tools/config.tool.d.ts +0 -8
  314. package/packages/server/dist/tools/config.tool.js +0 -12
  315. package/packages/server/dist/tools/context.tools.d.ts +0 -15
  316. package/packages/server/dist/tools/context.tools.js +0 -10
  317. package/packages/server/dist/tools/evolution.tools.d.ts +0 -7
  318. package/packages/server/dist/tools/evolution.tools.js +0 -5
  319. package/packages/server/dist/tools/execution.tools.d.ts +0 -14
  320. package/packages/server/dist/tools/execution.tools.js +0 -4
  321. package/packages/server/dist/tools/flow.tools.d.ts +0 -7
  322. package/packages/server/dist/tools/flow.tools.js +0 -16
  323. package/packages/server/dist/tools/forge.tools.d.ts +0 -13
  324. package/packages/server/dist/tools/forge.tools.js +0 -10
  325. package/packages/server/dist/tools/forget.tool.d.ts +0 -8
  326. package/packages/server/dist/tools/forget.tool.js +0 -1
  327. package/packages/server/dist/tools/graph.tool.d.ts +0 -7
  328. package/packages/server/dist/tools/graph.tool.js +0 -29
  329. package/packages/server/dist/tools/infra.tools.d.ts +0 -10
  330. package/packages/server/dist/tools/infra.tools.js +0 -5
  331. package/packages/server/dist/tools/list.tool.d.ts +0 -7
  332. package/packages/server/dist/tools/list.tool.js +0 -2
  333. package/packages/server/dist/tools/lookup.tool.d.ts +0 -7
  334. package/packages/server/dist/tools/lookup.tool.js +0 -3
  335. package/packages/server/dist/tools/manipulation.tools.d.ts +0 -10
  336. package/packages/server/dist/tools/manipulation.tools.js +0 -4
  337. package/packages/server/dist/tools/onboard.tool.d.ts +0 -12
  338. package/packages/server/dist/tools/onboard.tool.js +0 -2
  339. package/packages/server/dist/tools/persistence.tools.d.ts +0 -10
  340. package/packages/server/dist/tools/persistence.tools.js +0 -5
  341. package/packages/server/dist/tools/policy.tools.d.ts +0 -7
  342. package/packages/server/dist/tools/policy.tools.js +0 -3
  343. package/packages/server/dist/tools/present/browser.d.ts +0 -4
  344. package/packages/server/dist/tools/present/browser.js +0 -93
  345. package/packages/server/dist/tools/present/helpers.d.ts +0 -19
  346. package/packages/server/dist/tools/present/helpers.js +0 -16
  347. package/packages/server/dist/tools/present/html.d.ts +0 -18
  348. package/packages/server/dist/tools/present/html.js +0 -5
  349. package/packages/server/dist/tools/present/index.d.ts +0 -2
  350. package/packages/server/dist/tools/present/index.js +0 -1
  351. package/packages/server/dist/tools/present/markdown.d.ts +0 -32
  352. package/packages/server/dist/tools/present/markdown.js +0 -11
  353. package/packages/server/dist/tools/present/templates.d.ts +0 -14
  354. package/packages/server/dist/tools/present/templates.js +0 -472
  355. package/packages/server/dist/tools/present/tool.d.ts +0 -27
  356. package/packages/server/dist/tools/present/tool.js +0 -39
  357. package/packages/server/dist/tools/present-blocks.d.ts +0 -46
  358. package/packages/server/dist/tools/present-blocks.js +0 -27
  359. package/packages/server/dist/tools/present-charts.d.ts +0 -31
  360. package/packages/server/dist/tools/present-charts.js +0 -34
  361. package/packages/server/dist/tools/present-theme.d.ts +0 -14
  362. package/packages/server/dist/tools/present-theme.js +0 -396
  363. package/packages/server/dist/tools/present-utils.d.ts +0 -11
  364. package/packages/server/dist/tools/present-utils.js +0 -1
  365. package/packages/server/dist/tools/present.tool.d.ts +0 -2
  366. package/packages/server/dist/tools/present.tool.js +0 -1
  367. package/packages/server/dist/tools/produce.tool.d.ts +0 -7
  368. package/packages/server/dist/tools/produce.tool.js +0 -4
  369. package/packages/server/dist/tools/read.tool.d.ts +0 -7
  370. package/packages/server/dist/tools/read.tool.js +0 -2
  371. package/packages/server/dist/tools/reindex.tool.d.ts +0 -11
  372. package/packages/server/dist/tools/reindex.tool.js +0 -9
  373. package/packages/server/dist/tools/remember.tool.d.ts +0 -9
  374. package/packages/server/dist/tools/remember.tool.js +0 -4
  375. package/packages/server/dist/tools/replay.tool.d.ts +0 -6
  376. package/packages/server/dist/tools/replay.tool.js +0 -3
  377. package/packages/server/dist/tools/restore.tool.d.ts +0 -6
  378. package/packages/server/dist/tools/restore.tool.js +0 -3
  379. package/packages/server/dist/tools/search.tool.d.ts +0 -11
  380. package/packages/server/dist/tools/search.tool.js +0 -10
  381. package/packages/server/dist/tools/status.tool.d.ts +0 -28
  382. package/packages/server/dist/tools/status.tool.js +0 -3
  383. package/packages/server/dist/tools/update.tool.d.ts +0 -8
  384. package/packages/server/dist/tools/update.tool.js +0 -1
  385. package/packages/server/dist/tools/utility.tools.d.ts +0 -15
  386. package/packages/server/dist/tools/utility.tools.js +0 -13
  387. package/packages/server/dist/version-check.d.ts +0 -32
  388. package/packages/store/dist/graph-store.interface.d.ts +0 -159
  389. package/packages/store/dist/graph-store.interface.js +0 -1
  390. package/packages/store/dist/lance-store.d.ts +0 -46
  391. package/packages/store/dist/lance-store.js +0 -1
  392. package/packages/store/dist/sqlite-graph-store.d.ts +0 -57
  393. package/packages/store/dist/sqlite-graph-store.js +0 -90
  394. package/packages/store/dist/store-factory.d.ts +0 -12
  395. package/packages/store/dist/store-factory.js +0 -1
  396. package/packages/store/dist/store.interface.d.ts +0 -54
  397. package/packages/store/dist/store.interface.js +0 -1
  398. package/packages/tools/dist/audit.d.ts +0 -65
  399. package/packages/tools/dist/audit.js +0 -6
  400. package/packages/tools/dist/batch.d.ts +0 -23
  401. package/packages/tools/dist/batch.js +0 -1
  402. package/packages/tools/dist/changelog.d.ts +0 -36
  403. package/packages/tools/dist/changelog.js +0 -2
  404. package/packages/tools/dist/check.d.ts +0 -48
  405. package/packages/tools/dist/check.js +0 -2
  406. package/packages/tools/dist/checkpoint.d.ts +0 -19
  407. package/packages/tools/dist/checkpoint.js +0 -1
  408. package/packages/tools/dist/codemod.d.ts +0 -39
  409. package/packages/tools/dist/codemod.js +0 -2
  410. package/packages/tools/dist/compact.d.ts +0 -47
  411. package/packages/tools/dist/compact.js +0 -3
  412. package/packages/tools/dist/compress-output.d.ts +0 -38
  413. package/packages/tools/dist/compress-output.js +0 -1
  414. package/packages/tools/dist/compression/delta-cache.d.ts +0 -29
  415. package/packages/tools/dist/compression/delta-cache.js +0 -1
  416. package/packages/tools/dist/compression/engine.d.ts +0 -34
  417. package/packages/tools/dist/compression/engine.js +0 -4
  418. package/packages/tools/dist/compression/litm.d.ts +0 -20
  419. package/packages/tools/dist/compression/litm.js +0 -1
  420. package/packages/tools/dist/compression/mmr.d.ts +0 -24
  421. package/packages/tools/dist/compression/mmr.js +0 -1
  422. package/packages/tools/dist/compression/rules/docker.d.ts +0 -11
  423. package/packages/tools/dist/compression/rules/docker.js +0 -3
  424. package/packages/tools/dist/compression/rules/generic.d.ts +0 -11
  425. package/packages/tools/dist/compression/rules/generic.js +0 -3
  426. package/packages/tools/dist/compression/rules/git.d.ts +0 -11
  427. package/packages/tools/dist/compression/rules/git.js +0 -3
  428. package/packages/tools/dist/compression/rules/index.d.ts +0 -14
  429. package/packages/tools/dist/compression/rules/index.js +0 -1
  430. package/packages/tools/dist/compression/rules/kubectl.d.ts +0 -11
  431. package/packages/tools/dist/compression/rules/kubectl.js +0 -3
  432. package/packages/tools/dist/compression/rules/lint.d.ts +0 -11
  433. package/packages/tools/dist/compression/rules/lint.js +0 -3
  434. package/packages/tools/dist/compression/rules/npm.d.ts +0 -11
  435. package/packages/tools/dist/compression/rules/npm.js +0 -3
  436. package/packages/tools/dist/compression/rules/test-runner.d.ts +0 -11
  437. package/packages/tools/dist/compression/rules/test-runner.js +0 -3
  438. package/packages/tools/dist/compression/scoring.d.ts +0 -26
  439. package/packages/tools/dist/compression/scoring.js +0 -1
  440. package/packages/tools/dist/compression/types.d.ts +0 -61
  441. package/packages/tools/dist/compression/types.js +0 -1
  442. package/packages/tools/dist/config-extractor.d.ts +0 -9
  443. package/packages/tools/dist/config-extractor.js +0 -7
  444. package/packages/tools/dist/data-transform.d.ts +0 -12
  445. package/packages/tools/dist/data-transform.js +0 -1
  446. package/packages/tools/dist/dead-symbols.d.ts +0 -28
  447. package/packages/tools/dist/dead-symbols.js +0 -2
  448. package/packages/tools/dist/delegate.d.ts +0 -36
  449. package/packages/tools/dist/delegate.js +0 -1
  450. package/packages/tools/dist/diagram-builder.d.ts +0 -9
  451. package/packages/tools/dist/diagram-builder.js +0 -9
  452. package/packages/tools/dist/diff-parse.d.ts +0 -28
  453. package/packages/tools/dist/diff-parse.js +0 -3
  454. package/packages/tools/dist/digest.d.ts +0 -55
  455. package/packages/tools/dist/digest.js +0 -6
  456. package/packages/tools/dist/dogfood-log.d.ts +0 -49
  457. package/packages/tools/dist/dogfood-log.js +0 -2
  458. package/packages/tools/dist/encode.d.ts +0 -16
  459. package/packages/tools/dist/encode.js +0 -1
  460. package/packages/tools/dist/env-info.d.ts +0 -30
  461. package/packages/tools/dist/env-info.js +0 -1
  462. package/packages/tools/dist/eval.d.ts +0 -15
  463. package/packages/tools/dist/eval.js +0 -2
  464. package/packages/tools/dist/evidence-map.d.ts +0 -92
  465. package/packages/tools/dist/evidence-map.js +0 -2
  466. package/packages/tools/dist/file-cache.d.ts +0 -41
  467. package/packages/tools/dist/file-cache.js +0 -3
  468. package/packages/tools/dist/file-summary.d.ts +0 -52
  469. package/packages/tools/dist/file-summary.js +0 -2
  470. package/packages/tools/dist/file-walk.d.ts +0 -6
  471. package/packages/tools/dist/file-walk.js +0 -1
  472. package/packages/tools/dist/find-examples.d.ts +0 -29
  473. package/packages/tools/dist/find-examples.js +0 -3
  474. package/packages/tools/dist/find.d.ts +0 -49
  475. package/packages/tools/dist/find.js +0 -1
  476. package/packages/tools/dist/forge-classify.d.ts +0 -44
  477. package/packages/tools/dist/forge-classify.js +0 -2
  478. package/packages/tools/dist/forge-ground.d.ts +0 -61
  479. package/packages/tools/dist/forge-ground.js +0 -1
  480. package/packages/tools/dist/git-context.d.ts +0 -25
  481. package/packages/tools/dist/git-context.js +0 -3
  482. package/packages/tools/dist/graph-query.d.ts +0 -98
  483. package/packages/tools/dist/graph-query.js +0 -1
  484. package/packages/tools/dist/guide.d.ts +0 -25
  485. package/packages/tools/dist/guide.js +0 -1
  486. package/packages/tools/dist/health.d.ts +0 -16
  487. package/packages/tools/dist/health.js +0 -2
  488. package/packages/tools/dist/http-request.d.ts +0 -25
  489. package/packages/tools/dist/http-request.js +0 -1
  490. package/packages/tools/dist/lane.d.ts +0 -41
  491. package/packages/tools/dist/lane.js +0 -6
  492. package/packages/tools/dist/measure.d.ts +0 -42
  493. package/packages/tools/dist/measure.js +0 -2
  494. package/packages/tools/dist/onboard-utils.d.ts +0 -12
  495. package/packages/tools/dist/onboard-utils.js +0 -1
  496. package/packages/tools/dist/onboard.d.ts +0 -50
  497. package/packages/tools/dist/onboard.js +0 -18
  498. package/packages/tools/dist/parse-output.d.ts +0 -84
  499. package/packages/tools/dist/parse-output.js +0 -2
  500. package/packages/tools/dist/path-resolver.d.ts +0 -14
  501. package/packages/tools/dist/path-resolver.js +0 -1
  502. package/packages/tools/dist/process-manager.d.ts +0 -20
  503. package/packages/tools/dist/process-manager.js +0 -1
  504. package/packages/tools/dist/queue.d.ts +0 -40
  505. package/packages/tools/dist/queue.js +0 -1
  506. package/packages/tools/dist/regex-test.d.ts +0 -33
  507. package/packages/tools/dist/regex-test.js +0 -1
  508. package/packages/tools/dist/regex-utils.d.ts +0 -8
  509. package/packages/tools/dist/regex-utils.js +0 -1
  510. package/packages/tools/dist/rename.d.ts +0 -31
  511. package/packages/tools/dist/rename.js +0 -2
  512. package/packages/tools/dist/replay.d.ts +0 -59
  513. package/packages/tools/dist/replay.js +0 -4
  514. package/packages/tools/dist/response-envelope.d.ts +0 -43
  515. package/packages/tools/dist/response-envelope.js +0 -1
  516. package/packages/tools/dist/restore-points.d.ts +0 -22
  517. package/packages/tools/dist/restore-points.js +0 -1
  518. package/packages/tools/dist/schema-validate.d.ts +0 -25
  519. package/packages/tools/dist/schema-validate.js +0 -1
  520. package/packages/tools/dist/scope-map.d.ts +0 -51
  521. package/packages/tools/dist/scope-map.js +0 -1
  522. package/packages/tools/dist/snippet.d.ts +0 -35
  523. package/packages/tools/dist/snippet.js +0 -1
  524. package/packages/tools/dist/stash.d.ts +0 -14
  525. package/packages/tools/dist/stash.js +0 -1
  526. package/packages/tools/dist/stratum-card.d.ts +0 -30
  527. package/packages/tools/dist/stratum-card.js +0 -4
  528. package/packages/tools/dist/symbol.d.ts +0 -45
  529. package/packages/tools/dist/symbol.js +0 -3
  530. package/packages/tools/dist/synthesis-engine.d.ts +0 -13
  531. package/packages/tools/dist/synthesis-engine.js +0 -6
  532. package/packages/tools/dist/test-run.d.ts +0 -28
  533. package/packages/tools/dist/test-run.js +0 -2
  534. package/packages/tools/dist/text-utils.d.ts +0 -24
  535. package/packages/tools/dist/text-utils.js +0 -2
  536. package/packages/tools/dist/time-utils.d.ts +0 -20
  537. package/packages/tools/dist/time-utils.js +0 -1
  538. package/packages/tools/dist/trace.d.ts +0 -43
  539. package/packages/tools/dist/trace.js +0 -2
  540. package/packages/tools/dist/truncation.d.ts +0 -66
  541. package/packages/tools/dist/truncation.js +0 -11
  542. package/packages/tools/dist/watch.d.ts +0 -32
  543. package/packages/tools/dist/watch.js +0 -1
  544. package/packages/tools/dist/web-fetch.d.ts +0 -47
  545. package/packages/tools/dist/web-fetch.js +0 -8
  546. package/packages/tools/dist/web-search.d.ts +0 -25
  547. package/packages/tools/dist/web-search.js +0 -1
  548. package/packages/tools/dist/workset.d.ts +0 -47
  549. package/packages/tools/dist/workset.js +0 -1
  550. package/scaffold/__tests__/copilot-inline-shared-protocols.test.mjs +0 -39
  551. /package/packages/server/dist/{config.js → config-C5IU9Lau.js} +0 -0
  552. /package/packages/server/dist/{dashboard-static.js → dashboard-static-BfIe0Si1.js} +0 -0
  553. /package/packages/server/dist/{version-check.js → version-check-D4j0Pykd.js} +0 -0
@@ -1,10 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{createTaskRunner as t}from"../task-manager.js";import{z as n}from"zod";import{createLogger as r,serializeError as i}from"../../../core/dist/index.js";import{digest as a,evidenceMap as o,forgeClassify as s,forgeGround as c,stratumCard as l}from"../../../tools/dist/index.js";const u=r(`tools`);function d(t){let r=e(`evidence_map`);t.registerTool(`evidence_map`,{title:r.title,description:`Track verified/assumed/unresolved claims for complex tasks. Gate readiness: YIELD (proceed), HOLD (unknowns), HARD_BLOCK (critical gaps). Persists across calls.`,inputSchema:{action:n.enum([`create`,`add`,`update`,`get`,`gate`,`list`,`delete`]).describe(`Operation to perform`),task_id:n.string().optional().describe(`Task identifier (required for all except list)`),tier:n.enum([`floor`,`standard`,`critical`]).optional().describe(`FORGE tier (required for create)`),claim:n.string().optional().describe(`Critical-path claim text (for add)`),status:n.enum([`V`,`A`,`U`]).optional().describe(`Evidence status: V=Verified, A=Assumed, U=Unresolved`),receipt:n.string().optional().describe(`Evidence receipt: tool→ref for V, reasoning for A, attempts for U`),id:n.number().optional().describe(`Entry ID (for update)`),critical_path:n.boolean().default(!0).describe(`Whether this claim is on the critical path`),unknown_type:n.enum([`contract`,`convention`,`freshness`,`runtime`,`data-flow`,`impact`]).optional().describe(`Typed unknown classification`),safety_gate:n.enum([`provenance`,`commitment`,`coverage`]).optional().describe(`Safety gate tag: provenance (claim→evidence), commitment (user-approved), coverage (nothing dropped)`),retry_count:n.number().default(0).describe(`Retry count for gate evaluation (0 = first attempt)`),cwd:n.string().optional().describe(`Working directory for evidence map storage (default: server cwd). Use root_path from forge_ground to match.`)},annotations:r.annotations},async({action:e,task_id:t,tier:n,claim:r,status:a,receipt:s,id:c,critical_path:l,unknown_type:d,safety_gate:f,retry_count:p,cwd:m})=>{try{switch(e){case`create`:if(!t)throw Error(`task_id required for create`);if(!n)throw Error(`tier required for create`);return o({action:`create`,taskId:t,tier:n},m),{content:[{type:`text`,text:`Created evidence map "${t}" (tier: ${n}).\n\n---\n_Next: Use \`evidence_map\` with action "add" to record critical-path claims._`}]};case`add`:{if(!t)throw Error(`task_id required for add`);if(!r)throw Error(`claim required for add`);if(!a)throw Error(`status required for add`);let e=o({action:`add`,taskId:t,claim:r,status:a,receipt:s??``,criticalPath:l,unknownType:d,safetyGate:f},m),n=[`Added entry #${e.entry?.id} to "${t}": [${a}] ${r}`];return e.formattedMap&&n.push(``,e.formattedMap),{content:[{type:`text`,text:n.join(`
2
- `)}]}}case`update`:{if(!t)throw Error(`task_id required for update`);if(c===void 0)throw Error(`id required for update`);if(!a)throw Error(`status required for update`);let e=o({action:`update`,taskId:t,id:c,status:a,receipt:s??``},m),n=[`Updated entry #${c} in "${t}" → ${a}`];return e.formattedMap&&n.push(``,e.formattedMap),{content:[{type:`text`,text:n.join(`
3
- `)}]}}case`get`:{if(!t)throw Error(`task_id required for get`);let e=o({action:`get`,taskId:t},m);return e.state?{content:[{type:`text`,text:[`## Evidence Map: ${t} (${e.state.tier})`,``,e.formattedMap??`No entries.`,``,`_${e.state.entries.length} entries — created ${e.state.createdAt}_`].join(`
4
- `)}]}:{content:[{type:`text`,text:`Evidence map "${t}" not found.`}]}}case`gate`:{if(!t)throw Error(`task_id required for gate`);let e=o({action:`gate`,taskId:t,retryCount:p},m);if(!e.gate)return{content:[{type:`text`,text:`Evidence map "${t}" not found.`}]};let n=e.gate,r=[`## FORGE Gate: **${n.decision}**`,``,`**Reason:** ${n.reason}`,``,`**Stats:** ${n.stats.verified}V / ${n.stats.assumed}A / ${n.stats.unresolved}U (${n.stats.total} total)`];return n.warnings.length>0&&r.push(``,`**Warnings:**`,...n.warnings.map(e=>`- ⚠️ ${e}`)),n.unresolvedCritical.length>0&&r.push(``,`**Blocking entries:**`,...n.unresolvedCritical.map(e=>`- #${e.id}: ${e.claim} [${e.unknownType??`untyped`}]`)),n.safetyGates&&(r.push(``,`**Safety Gates:**`,`- Provenance: ${n.safetyGates.provenance}`,`- Commitment: ${n.safetyGates.commitment}`,`- Coverage: ${n.safetyGates.coverage}`),n.safetyGates.failures.length>0&&r.push(``,`**Safety failures:**`,...n.safetyGates.failures.map(e=>`- \u{1F6D1} ${e}`))),n.annotation&&r.push(``,`**Annotation:**`,n.annotation),e.formattedMap&&r.push(``,`---`,``,e.formattedMap),r.push(``,`---`,`_Next: ${n.decision===`YIELD`?`Proceed to implementation.`:n.decision===`HOLD`?`Resolve blocking entries, then re-run gate.`:n.decision===`HARD_BLOCK`?`Contract unknowns MUST be resolved. Use search or schema_validate.`:`Proceed with annotation — document unresolved items in delivery.`}_`),{content:[{type:`text`,text:r.join(`
5
- `)}]}}case`list`:{let e=o({action:`list`},m);return!e.states||e.states.length===0?{content:[{type:`text`,text:`No evidence maps found.`}]}:{content:[{type:`text`,text:e.states.map(e=>`- **${e.taskId}** (${e.tier}) — ${e.entries.length} entries — ${e.updatedAt}`).join(`
6
- `)}]}}case`delete`:if(!t)throw Error(`task_id required for delete`);return{content:[{type:`text`,text:o({action:`delete`,taskId:t},m).deleted?`Deleted evidence map "${t}".`:`Evidence map "${t}" not found.`}]}}}catch(e){return u.error(`Evidence map error`,i(e)),{content:[{type:`text`,text:`Evidence map error: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function f(t,r){let o=e(`digest`);t.registerTool(`digest`,{title:o.title,description:`Compress multiple text sources (handoffs, debates, phase summaries) into a token-budgeted digest. Jointly ranks across all sources, pins structured fields (status, files, decisions, blockers), and allocates budget by priority weight.`,inputSchema:{sources:n.array(n.object({id:n.string().describe(`Source identifier (e.g., "phase-2-handoff")`),text:n.string().max(5e5).describe(`Source text to compress`),weight:n.number().min(0).default(1).describe(`Priority weight (higher = more budget)`)})).min(1).max(20).describe(`Text sources to compress`),query:n.string().describe(`Focus query — what matters for the next step?`),max_chars:n.number().min(100).max(5e4).default(4e3).describe(`Target budget in characters`),pin_fields:n.array(n.string()).optional().describe(`Key fields to always extract (default: status, files, decisions, blockers, next)`),segmentation:n.enum([`paragraph`,`sentence`,`line`]).default(`paragraph`).describe(`How to split text for scoring`),token_budget:n.number().min(50).max(12500).optional().describe(`Token budget — overrides max_chars (approx 4 chars per token). Use to fit output into a specific context window.`)},annotations:o.annotations},async({sources:e,query:t,max_chars:n,pin_fields:o,segmentation:s,token_budget:c})=>{try{let i=await a(r,{sources:e,query:t,maxChars:c?c*4:n,pinFields:o,segmentation:s}),l=[`## Digest (${i.totalOriginalChars} → ${i.totalCompressedChars} chars, ${(i.ratio*100).toFixed(0)}%)`,``],u=Object.keys(i.fields);if(u.length>0){l.push(`### Extracted Fields`);for(let e of u){let t=i.fields[e];l.push(`**${e}:**`);for(let e of t)l.push(` - [${e.sourceId}] ${e.value}`)}l.push(``)}l.push(`### Compressed Content`,``,i.text),l.push(``,`### Source Stats`);for(let e of i.sourceStats)l.push(`- **${e.id}**: ${e.originalChars} → ${e.keptChars} chars (${e.segmentsKept}/${e.segmentsTotal} segments)`);return l.push(``,`---`,"_Next: Use the digest as compressed context for the next phase. Use `stash` to persist it if needed._"),{content:[{type:`text`,text:l.join(`
7
- `)}]}}catch(e){return u.error(`Digest failed`,i(e)),{content:[{type:`text`,text:`Digest failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function p(t){let r=e(`forge_classify`);t.registerTool(`forge_classify`,{title:r.title,description:`Classify FORGE tier (Floor/Standard/Critical) from target files and task description. Checks blast radius, cross-package boundaries, schema/contract patterns, and security signals. Returns tier, triggers, typed unknown seeds, and ceremony guidance.`,inputSchema:{files:n.array(n.string()).min(1).max(100).describe(`Files being modified (paths)`),task:n.string().describe(`Task description`),root_path:n.string().describe(`Root path of the codebase`)},annotations:r.annotations},async({files:e,task:t,root_path:n})=>{try{let r=await s({files:e,task:t,rootPath:n}),i=[`## FORGE Classification: **${r.tier.toUpperCase()}**`,``];if(r.triggers.length>0){i.push(`### Triggers`);for(let e of r.triggers)i.push(`- **${e.rule}** (${e.source}): ${e.detail}`);i.push(``)}if(r.packagesCrossed.length>0&&i.push(`**Packages crossed:** ${r.packagesCrossed.join(`, `)}`),r.typedUnknownSeeds.length>0){i.push(``,`### Typed Unknown Seeds`);for(let e of r.typedUnknownSeeds)i.push(`- [${e.type}] ${e.description} → use \`${e.suggestedTool}\``)}i.push(``,`### Ceremony`);let a=r.ceremony;return i.push(`- **Ground:** ${a.ground}`,`- **Build:** ${a.build}`,`- **Break:** ${a.break}`,`- **Evidence Map:** ${a.evidenceMap}`,`- **Gate:** ${a.gate}`),i.push(``,`---`,`_Next: ${r.tier===`floor`?`Proceed directly to implementation.`:"Run `forge_ground` to execute the full Ground phase."}_`),{content:[{type:`text`,text:i.join(`
8
- `)}]}}catch(e){return u.error(`FORGE classify failed`,i(e)),{content:[{type:`text`,text:`FORGE classify failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function m(t,r,a){let o=e(`stratum_card`);t.registerTool(`stratum_card`,{title:o.title,description:`Generate context cards from files — a compressed alternative to reading full files (10-100x token reduction). Tier 1 (T1): structure only (~100 tokens/file — imports, exports, functions). Tier 2 (T2): structure + query-relevant content (~300 tokens/file).`,inputSchema:{files:n.array(n.string()).min(1).max(50).describe(`Absolute file paths to generate cards for`),query:n.string().describe(`Current task query — guides relevance scoring`),tier:n.enum([`T1`,`T2`]).default(`T1`).describe(`Card tier: T1 = structural only, T2 = T1 + compressed content`),max_content_chars:n.number().min(100).max(5e3).default(800).describe(`For T2: max chars for compressed content section`)},annotations:o.annotations},async({files:e,query:t,tier:n,max_content_chars:o})=>{try{let i=await l(r,{files:e,query:t,tier:n,maxContentChars:o,cache:a}),s=[`## STRATUM Cards (${n}) — ${i.cards.length} files`,`Total: ~${i.totalTokenEstimate} tokens (was ~${i.totalOriginalTokenEstimate}, ${(i.compressionRatio*100).toFixed(0)}% of original)`,``];for(let e of i.cards)s.push(e.card,``);return s.push(`---`,"_Next: Use these cards as context instead of reading full files. Use `compact` for deeper content extraction on specific files._"),{content:[{type:`text`,text:s.join(`
9
- `)}]}}catch(e){return u.error(`STRATUM cards failed`,i(e)),{content:[{type:`text`,text:`STRATUM cards failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function h(r,a,o){let s=e(`forge_ground`);r.registerTool(`forge_ground`,{title:s.title,description:`Execute the complete FORGE Ground phase in a single call. Chains: tier classification → scope map → typed unknown seeds → constraint loading → file summaries → evidence map creation. Replaces 5-15 manual tool calls.`,inputSchema:{task:n.string().describe(`Task description`),files:n.array(n.string()).min(1).max(100).describe(`Target files being modified (absolute paths)`),root_path:n.string().describe(`Root path of the codebase`),max_constraints:n.number().min(0).max(10).default(3).describe(`Max constraint entries to load from KB`),force_tier:n.enum([`floor`,`standard`,`critical`]).optional().describe(`Force a specific tier (skips auto-classification)`),task_id:n.string().optional().describe(`Custom task ID for evidence map (auto-generated if omitted)`)},annotations:s.annotations},async({task:e,files:n,root_path:r,max_constraints:s,force_tier:l,task_id:d},f)=>{try{let i=await c(a,o,{task:e,files:n,rootPath:r,maxConstraints:s,forceTier:l,taskId:d}),u=t(f).createTask(`FORGE Ground`,3);u.progress(0,`Classification: ${i.tier}`),u.progress(1,`Files analyzed: ${i.fileSummaries.length}`),u.progress(2,`Unknowns: ${i.typedUnknownSeeds.length}`),u.complete(`FORGE Ground complete: tier=${i.tier}`);let p=[`## FORGE Ground: **${i.tier.toUpperCase()}**`,`Estimated output: ~${i.estimatedTokens} tokens`,``];if(i.classifyTriggers.length>0){p.push(`### Classification Triggers`);for(let e of i.classifyTriggers)p.push(`- **${e.rule}** (${e.source}): ${e.detail}`);p.push(``)}if(i.fileSummaries.length>0){p.push(`### Target Files`);for(let e of i.fileSummaries)p.push(`- **${e.path}** (${e.lines} lines) — exports: ${e.exports.join(`, `)||`none`} — functions: ${e.functions.join(`, `)||`none`}`);p.push(``)}if(i.typedUnknownSeeds.length>0){p.push(`### Typed Unknown Seeds`);for(let e of i.typedUnknownSeeds)p.push(`- [${e.type}] ${e.description} → \`${e.suggestedTool}\``);p.push(``)}if(i.constraints.length>0){p.push(`### Constraint Seed`);for(let e of i.constraints)p.push(`- **${e.source}** (${(e.relevance*100).toFixed(0)}%): ${e.snippet}`);p.push(``)}if(i.scopeMap){p.push(`### Scope Map: ${i.scopeMap.files.length} files (~${i.scopeMap.totalEstimatedTokens} tokens)`);for(let e of i.scopeMap.files.slice(0,5))p.push(`- ${e.path} (${(e.relevance*100).toFixed(0)}%) — ${e.reason}`);i.scopeMap.files.length>5&&p.push(`- _...and ${i.scopeMap.files.length-5} more_`),p.push(``)}i.evidenceMapTaskId&&(p.push(`**Evidence Map:** \`${i.evidenceMapTaskId}\` (initialized)`),p.push(``)),p.push(`### Ceremony Guidance`);let m=i.ceremony;return p.push(`- **Ground:** ${m.ground}`,`- **Build:** ${m.build}`,`- **Break:** ${m.break}`,`- **Evidence Map:** ${m.evidenceMap}`,`- **Gate:** ${m.gate}`),p.push(``,`---`,`_Next: ${i.tier===`floor`?`Proceed to Build phase.`:"Use `evidence_map` to track claims during Build, then `evidence_map` gate after Break."}_`),{content:[{type:`text`,text:p.join(`
10
- `)}]}}catch(e){return u.error(`FORGE Ground failed`,i(e)),{content:[{type:`text`,text:`FORGE Ground failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}export{f as registerDigestTool,d as registerEvidenceMapTool,p as registerForgeClassifyTool,h as registerForgeGroundTool,m as registerStratumCardTool};
@@ -1,8 +0,0 @@
1
- import { CuratedKnowledgeManager } from "../curated-manager.js";
2
- import { ResourceNotifier } from "../resources/resource-notifier.js";
3
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
-
5
- //#region packages/server/src/tools/forget.tool.d.ts
6
- declare function registerForgetTool(server: McpServer, curated: CuratedKnowledgeManager, resourceNotifier?: ResourceNotifier): void;
7
- //#endregion
8
- export { registerForgetTool };
@@ -1 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{existsSync as t,readFileSync as n}from"node:fs";import{resolve as r}from"node:path";import{z as i}from"zod";import{AIKIT_PATHS as a,createLogger as o,serializeError as s}from"../../../core/dist/index.js";import{createRestorePoint as c}from"../../../tools/dist/index.js";const l=o(`tools`);function u(o,u,d){let f=e(`forget`);o.registerTool(`forget`,{title:f.title,description:`Remove a curated knowledge entry. Deletes the file and removes it from the vector store.`,inputSchema:{path:i.string().describe(`Relative path within .ai/curated/ (e.g., "decisions/deprecated-approach.md")`),reason:i.string().min(3).describe(`Why this entry is being removed`)},annotations:f.annotations},async({path:e,reason:i})=>{try{let o=r(process.cwd(),a.aiCurated,e);if(t(o))try{c(`forget`,[{path:o,content:n(o,`utf-8`)}],`forget: ${e}`)}catch{}let s=await u.forget(e,i);return l.info(`Forgot entry`,{path:s.path,reason:i}),d&&(d.notifyAfterCuratedWrite().catch(()=>{}),d.notifyResourceListChanged().catch(()=>{})),{content:[{type:`text`,text:`Forgotten: \`.ai/curated/${s.path}\`\n\nRemoved from disk and vector store.\nReason: ${i}\n\n---\n_Next: Use \`list\` to verify removal, or \`search\` to confirm the entry is no longer returned._`}]}}catch(e){return l.error(`Forget failed`,s(e)),{content:[{type:`text`,text:`Forget failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}export{u as registerForgetTool};
@@ -1,7 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { IGraphStore } from "../../../store/dist/index.js";
3
-
4
- //#region packages/server/src/tools/graph.tool.d.ts
5
- declare function registerGraphTool(server: McpServer, graphStore: IGraphStore): void;
6
- //#endregion
7
- export { registerGraphTool };
@@ -1,29 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{GraphOutputSchema as t}from"../output-schemas.js";import{z as n}from"zod";import{createLogger as r,serializeError as i}from"../../../core/dist/index.js";import{graphQuery as a}from"../../../tools/dist/index.js";const o=r(`tools`),s=n.object({id:n.string().optional().describe(`Node ID (auto-generated if omitted)`),type:n.string().describe(`Node type (entity, service, api, concept, decision)`),name:n.string().describe(`Display name`),properties:n.record(n.string(),n.unknown()).optional().describe(`Arbitrary properties`),sourceRecordId:n.string().optional().describe(`Back-link to knowledge record ID`),sourcePath:n.string().optional().describe(`Source file path`)}),c=n.object({id:n.string().optional().describe(`Edge ID (auto-generated if omitted)`),fromId:n.string().describe(`Source node ID`),toId:n.string().describe(`Target node ID`),type:n.string().describe(`Relationship type (depends-on, implements, calls, affects)`),weight:n.number().min(0).max(1).optional().describe(`Relationship weight`),properties:n.record(n.string(),n.unknown()).optional().describe(`Arbitrary properties`)});function l(r,l){let u=e(`graph`);r.registerTool(`graph`,{title:u.title,description:`Query the auto-populated code knowledge graph (modules, symbols, imports) to answer
2
- structural questions vector search cannot.
3
-
4
- Common flow (when you don't have a node_id yet — TWO STEPS):
5
- 1) Discover: graph({action:'find_nodes', name_pattern:'<module-or-symbol>'})
6
- 2) Explore: graph({action:'neighbors', node_id, direction:'incoming'|'outgoing'})
7
-
8
- Single-step read actions:
9
- • symbol360 — full context (definition + references + imports) for a named symbol
10
- • traverse — walk N hops from a node
11
- • depth_traverse — bounded-depth traversal
12
- • find_edges — list edges matching criteria
13
- • cohesion — module cohesion score
14
- • stats — graph size/health
15
- • validate — integrity check
16
-
17
- Mutating actions (use deliberately): add, delete, clear, set_community,
18
- detect_communities, trace_process, delete_process.
19
-
20
- Complements: \`symbol\` (single lookup), \`trace\` (call-chain AST), \`blast_radius\` (change impact).`,outputSchema:t,inputSchema:{action:n.enum([`find_nodes`,`find_edges`,`neighbors`,`traverse`,`stats`,`validate`,`add`,`delete`,`clear`,`detect_communities`,`set_community`,`trace_process`,`list_processes`,`delete_process`,`depth_traverse`,`cohesion`,`symbol360`]).describe(`Action: find_nodes (search nodes), find_edges (search edges), neighbors (direct connections), traverse (multi-hop), stats (graph overview), validate (check graph integrity), add (insert nodes/edges), delete (remove nodes), clear (remove all), detect_communities (find clusters), set_community (label a node), trace_process (persist execution flow), list_processes (list traced flows), delete_process (remove a flow), depth_traverse (bucket traversal by depth), cohesion (score a community), symbol360 (full node context)`),node_type:n.string().optional().describe(`Node type filter (for find_nodes)`),name_pattern:n.string().optional().describe(`Name substring match (for find_nodes)`),source_path:n.string().optional().describe(`Source path filter`),node_id:n.string().optional().describe(`Node ID (for neighbors, traverse, delete)`),edge_type:n.string().optional().describe(`Edge type filter`),from_id:n.string().optional().describe(`Source node ID (for find_edges)`),to_id:n.string().optional().describe(`Target node ID (for find_edges)`),direction:n.enum([`outgoing`,`incoming`,`both`]).default(`both`).describe(`Traversal direction`),max_depth:n.number().min(1).max(5).default(2).describe(`Max traversal depth`),limit:n.number().min(1).max(100).default(50).describe(`Max results`),nodes:n.array(s).max(500).optional().describe(`Nodes to add (for action=add)`),edges:n.array(c).max(500).optional().describe(`Edges to add (for action=add)`),community:n.string().optional().describe(`Community label (for set_community, cohesion)`),process_id:n.string().optional().describe(`Process ID (for delete_process)`),label:n.string().optional().describe(`Label for process tracing (for trace_process)`)},annotations:u.annotations},async e=>{try{let t=await a(l,{action:e.action,nodeType:e.node_type,namePattern:e.name_pattern,sourcePath:e.source_path,nodeId:e.node_id,edgeType:e.edge_type,fromId:e.from_id,toId:e.to_id,direction:e.direction,maxDepth:e.max_depth,limit:e.limit,nodes:e.nodes,edges:e.edges,community:e.community,processId:e.process_id,label:e.label}),n=[t.summary];if(t.nodes&&t.nodes.length>0){n.push(`
21
- ### Nodes`);for(let e of t.nodes){let t=Object.keys(e.properties).length>0?` — ${JSON.stringify(e.properties)}`:``;n.push(`- **${e.name}** (${e.type}, id: \`${e.id}\`)${t}`)}}if(t.edges&&t.edges.length>0){n.push(`
22
- ### Edges`);for(let e of t.edges)n.push(`- \`${e.fromId}\` —[${e.type}]→ \`${e.toId}\`${e.weight===1?``:` (weight: ${e.weight})`}`)}if(t.stats&&(n.push(`\nNode types: ${JSON.stringify(t.stats.nodeTypes)}`),n.push(`Edge types: ${JSON.stringify(t.stats.edgeTypes)}`)),t.validation){if(n.push(`
23
- ### Validation`),n.push(`- **Valid**: ${t.validation.valid?`yes`:`no`}`),t.validation.danglingEdges.length>0){n.push(`- **Dangling edges**:`);for(let e of t.validation.danglingEdges)n.push(` - \`${e.edgeId}\` references missing node \`${e.missingNodeId}\``)}t.validation.orphanNodes.length>0&&n.push(`- **Orphan nodes**: ${t.validation.orphanNodes.map(e=>`\`${e}\``).join(`, `)}`)}if(t.communities){n.push(`
24
- ### Communities`);for(let[e,r]of Object.entries(t.communities))n.push(`- **${e}**: ${r.length} node(s) — ${r.slice(0,5).map(e=>`\`${e}\``).join(`, `)}${r.length>5?`…`:``}`)}if(t.process&&(n.push(`
25
- ### Process`),n.push(`- **${t.process.label}** (id: \`${t.process.id}\`)`),n.push(`- Entry: \`${t.process.entryNodeId}\``),n.push(`- Steps: ${t.process.steps.map(e=>`\`${e}\``).join(` → `)}`)),t.processes&&t.processes.length>0){n.push(`
26
- ### Processes`);for(let e of t.processes)n.push(`- **${e.label}** (id: \`${e.id}\`) — ${e.steps.length} step(s)`)}if(t.depthGroups){n.push(`
27
- ### Depth Groups`);for(let[e,r]of Object.entries(t.depthGroups))n.push(`- **Depth ${e}**: ${r.map(e=>`${e.name} (${e.type})`).join(`, `)}`)}if(t.cohesionScore!==void 0&&n.push(`\n**Cohesion Score**: ${(t.cohesionScore*100).toFixed(1)}%`),t.symbol360){let e=t.symbol360;n.push(`
28
- ### 360° Symbol View`),n.push(`- **Node**: ${e.node.name} (${e.node.type})`),n.push(`- **Community**: ${e.community??`none`}`),n.push(`- **Incoming**: ${e.incoming.length} edge(s)`),n.push(`- **Outgoing**: ${e.outgoing.length} edge(s)`),n.push(`- **Processes**: ${e.processes.length}`)}return n.push("\n---\n_Next: Use `graph(traverse)` to explore connections, `graph(add)` to insert entities, `graph(symbol360)` for full node context, or `graph(detect_communities)` to find clusters._"),{content:[{type:`text`,text:n.join(`
29
- `)}],structuredContent:{nodes:(t.nodes??[]).map(e=>({id:e.id,name:e.name,type:e.type,...e.sourcePath?{sourcePath:e.sourcePath}:{}})),edges:(t.edges??[]).map(e=>({fromId:e.fromId,toId:e.toId,type:e.type})),totalNodes:t.stats?.nodeCount??t.nodes?.length??0,totalEdges:t.stats?.edgeCount??t.edges?.length??0,query:e.action}}}catch(e){return o.error(`Graph query failed`,i(e)),{content:[{type:`text`,text:`Graph query failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}export{l as registerGraphTool};
@@ -1,10 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
-
3
- //#region packages/server/src/tools/infra.tools.d.ts
4
- declare function registerProcessTool(server: McpServer): void;
5
- declare function registerWatchTool(server: McpServer): void;
6
- declare function registerHealthTool(server: McpServer): void;
7
- declare function registerWebFetchTool(server: McpServer): void;
8
- declare function registerGuideTool(server: McpServer, indexMode?: string): void;
9
- //#endregion
10
- export { registerGuideTool, registerHealthTool, registerProcessTool, registerWatchTool, registerWebFetchTool };
@@ -1,5 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{HealthOutputSchema as t}from"../output-schemas.js";import{z as n}from"zod";import{createLogger as r,serializeError as i}from"../../../core/dist/index.js";import{guide as a,health as o,processList as s,processLogs as c,processStart as l,processStatus as u,processStop as d,watchList as f,watchStart as p,watchStop as m,webFetch as h}from"../../../tools/dist/index.js";const g=r(`tools:infra`);function _(t){let r=e(`process`);t.registerTool(`process`,{title:r.title,description:`Start, stop, inspect, list, and tail logs for in-memory managed child processes.`,inputSchema:{action:n.enum([`start`,`stop`,`status`,`list`,`logs`]).describe(`Process action to perform`),id:n.string().optional().describe(`Managed process ID`),command:n.string().optional().describe(`Executable to start`),args:n.array(n.string()).optional().describe(`Arguments for start actions`),tail:n.number().min(1).max(500).optional().describe(`Log lines to return for logs actions`)},annotations:r.annotations},async({action:e,id:t,command:n,args:r,tail:a})=>{try{switch(e){case`start`:if(!t||!n)throw Error(`id and command are required for start`);return{content:[{type:`text`,text:JSON.stringify(l(t,n,r??[]))}]};case`stop`:if(!t)throw Error(`id is required for stop`);return{content:[{type:`text`,text:JSON.stringify(d(t)??null)}]};case`status`:if(!t)throw Error(`id is required for status`);return{content:[{type:`text`,text:JSON.stringify(u(t)??null)}]};case`list`:return{content:[{type:`text`,text:JSON.stringify(s())}]};case`logs`:if(!t)throw Error(`id is required for logs`);return{content:[{type:`text`,text:JSON.stringify(c(t,a))}]}}}catch(e){return g.error(`Process action failed`,i(e)),{content:[{type:`text`,text:`Process action failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function v(t){let r=e(`watch`);t.registerTool(`watch`,{title:r.title,description:`Watch a directory for file changes (create/modify/delete). Actions: start (begin watching), stop (by ID), list (show active watchers). Events are emitted as structured JSON with path, event type, and timestamp.`,inputSchema:{action:n.enum([`start`,`stop`,`list`]).describe(`Watch action to perform`),path:n.string().optional().describe(`Directory path to watch for start actions`),id:n.string().optional().describe(`Watcher ID for stop actions`)},annotations:r.annotations},async({action:e,path:t,id:n})=>{try{switch(e){case`start`:if(!t)throw Error(`path is required for start`);return{content:[{type:`text`,text:JSON.stringify(p({path:t}))}]};case`stop`:if(!n)throw Error(`id is required for stop`);return{content:[{type:`text`,text:JSON.stringify({stopped:m(n)})}]};case`list`:return{content:[{type:`text`,text:JSON.stringify(f())}]}}}catch(e){return g.error(`Watch action failed`,i(e)),{content:[{type:`text`,text:`Watch action failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function y(r){let a=e(`health`);r.registerTool(`health`,{title:a.title,description:`Run project health checks — verifies package.json, tsconfig, scripts, lockfile, README, LICENSE, .gitignore.`,outputSchema:t,inputSchema:{path:n.string().optional().describe(`Root directory to check (defaults to cwd)`)},annotations:a.annotations},async({path:e})=>{try{let t=o(e),n={ok:t.checks.every(e=>e.status!==`fail`),checks:t.checks.map(e=>({name:e.name,ok:e.status===`pass`,message:e.message}))};return{content:[{type:`text`,text:JSON.stringify(t)}],structuredContent:n}}catch(e){return g.error(`Health check failed`,i(e)),{content:[{type:`text`,text:`Health check failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function b(t){let r=e(`web_fetch`);t.registerTool(`web_fetch`,{title:r.title,description:`PREFERRED web fetcher — fetch one or many URLs and convert to LLM-optimized markdown. Pass one URL or multiple for parallel fetching. Supports CSS selectors, 4 output modes (markdown/raw/links/outline), smart paragraph-boundary truncation. Strips scripts/styles/nav automatically.`,inputSchema:{urls:n.array(n.string().url()).min(1).max(10).describe('URLs to fetch (1–10). Single URL: `["https://..."]`. Multiple fetched in parallel.'),mode:n.enum([`markdown`,`raw`,`links`,`outline`]).default(`markdown`).describe(`Output mode: markdown (clean content), raw (HTML), links (extracted URLs), outline (heading hierarchy)`),selector:n.string().optional().describe(`CSS selector to extract a specific element instead of auto-detecting main content`),max_length:n.number().min(500).max(1e5).default(15e3).describe(`Max characters in output — truncates at paragraph boundaries`),include_metadata:n.boolean().default(!0).describe(`Include page title, description, and URL as a header`),include_links:n.boolean().default(!1).describe(`Append extracted links list at the end`),include_images:n.boolean().default(!1).describe(`Include image alt texts inline`),timeout:n.number().min(1e3).max(12e4).default(3e4).describe(`Request timeout in milliseconds`)},annotations:r.annotations},async({urls:e,mode:t,selector:n,max_length:r,include_metadata:a,include_links:o,include_images:s,timeout:c})=>{let l=e,u=async(e,i)=>{let l=await h({url:e,mode:t,selector:n,maxLength:r,includeMetadata:a,includeLinks:o,includeImages:s,timeout:c}),u=[i?`## ${i} ${l.title||`Web Page`}\n> Source: ${e}`:`## ${l.title||`Web Page`}`,``,l.content];return l.truncated&&u.push(``,`_Original length: ${l.originalLength.toLocaleString()} chars_`),u.join(`
2
- `)};if(l.length===1)try{return{content:[{type:`text`,text:await u(l[0])+"\n\n---\n_Next: Use `remember` to save key findings, or `web_fetch` with a `selector` to extract a specific section._"}]}}catch(e){let t=e instanceof Error?e.message:String(e);return/HTTP [45]\d{2}/.test(t)?g.warn(`Web fetch failed`,{error:t}):g.error(`Web fetch failed`,i(e)),{content:[{type:`text`,text:`Web fetch failed: ${t}`}],isError:!0}}let d=l.length,f=await Promise.allSettled(l.map((e,t)=>u(e,`[${t+1}/${d}]`))),p=[],m=0;for(let e=0;e<f.length;e++){let t=f[e];if(t.status===`fulfilled`)p.push(t.value);else{m++;let n=t.reason instanceof Error?t.reason.message:String(t.reason);/HTTP [45]\d{2}/.test(n)?g.warn(`Web fetch failed`,{url:l[e],error:n}):g.error(`Web fetch failed`,{url:l[e],...i(t.reason)}),p.push(`## ❌ Failed: ${l[e]}\n\n${n}`)}}let _=`_Fetched ${f.length-m}/${f.length} URLs successfully._`;return p.push(``,`---`,_,"_Next: Use `remember` to save key findings, or `web_fetch` with a `selector` to extract a specific section._"),{content:[{type:`text`,text:p.join(`
3
-
4
- `)}],...m===f.length?{isError:!0}:{}}})}function x(t,r){let o=e(`guide`);t.registerTool(`guide`,{title:o.title,description:`Tool discovery — given a goal description, recommends which AI Kit tools to use and in what order. Matches against 10 predefined workflows: onboard, audit, bugfix, implement, refactor, search, context, memory, validate, analyze.`,inputSchema:{goal:n.string().describe(`What you want to accomplish (e.g., "audit this monorepo", "fix a failing test")`),max_recommendations:n.number().min(1).max(10).default(5).describe(`Maximum number of tool recommendations`)},annotations:o.annotations},async({goal:e,max_recommendations:t})=>{try{let n=a(e,t,r),i=[`## Recommended Workflow: **${n.workflow}**`,n.description,``,`### Tools`,...n.tools.map(e=>{let t=e.suggestedArgs?` — \`${JSON.stringify(e.suggestedArgs)}\``:``;return`${e.order}. **${e.tool}** — ${e.reason}${t}`})];return n.alternativeWorkflows.length>0&&i.push(``,`_Alternative workflows: ${n.alternativeWorkflows.join(`, `)}_`),i.push(``,`---`,"_Next: Run the first recommended tool, or use `guide` again with a more specific goal._"),{content:[{type:`text`,text:i.join(`
5
- `)}]}}catch(e){return g.error(`Guide failed`,i(e)),{content:[{type:`text`,text:`Guide failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}export{x as registerGuideTool,y as registerHealthTool,_ as registerProcessTool,v as registerWatchTool,b as registerWebFetchTool};
@@ -1,7 +0,0 @@
1
- import { CuratedKnowledgeManager } from "../curated-manager.js";
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
-
4
- //#region packages/server/src/tools/list.tool.d.ts
5
- declare function registerListTool(server: McpServer, curated: CuratedKnowledgeManager): void;
6
- //#endregion
7
- export { registerListTool };
@@ -1,2 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{ListOutputSchema as t}from"../output-schemas.js";import{curatedResourceLinks as n}from"../resource-links.js";import{z as r}from"zod";import{createLogger as i,serializeError as a}from"../../../core/dist/index.js";const o=i(`tools`);function s(i,s){let c=e(`list`);i.registerTool(`list`,{title:c.title,description:`List curated knowledge entries stored via remember. Returns path, title, category, tags, and content preview for each entry. Filter by category (decisions, patterns, conventions) or tag.`,outputSchema:t,inputSchema:{category:r.string().optional().describe(`Filter by category (e.g., "decisions", "patterns")`),tag:r.string().optional().describe(`Filter by tag`)},annotations:c.annotations},async({category:e,tag:t})=>{try{let r=await s.list({category:e,tag:t}),i={entries:r.map(e=>({path:e.path,title:e.title,category:e.category,tags:e.tags,version:e.version,preview:e.contentPreview?.slice(0,120)??``})),totalCount:r.length};if(r.length===0)return{content:[{type:`text`,text:`No curated knowledge entries found.`+(e?` (category: ${e})`:``)+(t?` (tag: ${t})`:``)}],structuredContent:i};let a=r.map(e=>{let t=e.tags.length>0?` [${e.tags.join(`, `)}]`:``;return`- **${e.title}** (v${e.version})${t}\n \`${e.path}\` — ${e.contentPreview.slice(0,80)}…`}).join(`
2
- `),o=n(r);return{content:[{type:`text`,text:`## Curated Knowledge (${r.length} entries)\n\n${a}\n\n---\n_Next: Use \`read\` to view full content of any entry, or \`remember\` to store new knowledge._`},...o],structuredContent:i}}catch(e){return o.error(`List failed`,a(e)),{content:[{type:`text`,text:`List failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}export{s as registerListTool};
@@ -1,7 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { IKnowledgeStore } from "../../../store/dist/index.js";
3
-
4
- //#region packages/server/src/tools/lookup.tool.d.ts
5
- declare function registerLookupTool(server: McpServer, store: IKnowledgeStore): void;
6
- //#endregion
7
- export { registerLookupTool };
@@ -1,3 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{curatedResourceLink as t,extractCuratedPath as n}from"../resource-links.js";import{z as r}from"zod";import{createLogger as i,serializeError as a}from"../../../core/dist/index.js";const o=i(`tools`);function s(i,s){let c=e(`lookup`);i.registerTool(`lookup`,{title:c.title,description:`Get all indexed content for a known file path, sorted by position. Use when you know the exact file. For discovery across files use search.`,inputSchema:{path:r.string().describe(`Relative file path to look up (e.g., "src/index.ts")`)},annotations:c.annotations},async({path:e})=>{try{let r=await s.getBySourcePath(e);if(r.length===0)return{content:[{type:`text`,text:`No indexed content found for: ${e}`}]};r.sort((e,t)=>e.chunkIndex-t.chunkIndex);let i=`## ${e}\n**Chunks**: ${r.length} | **Type**: ${r[0].contentType}\n`,a=r.map(e=>{let t=e.startLine?` (lines ${e.startLine}-${e.endLine})`:``;return`### Chunk ${e.chunkIndex+1}/${e.totalChunks}${t}\n${e.content}`}).join(`
2
-
3
- `),o=n(e),c=o?t(o):void 0;return{content:[{type:`text`,text:`${i}\n${a}\n\n---\n_Next: Use \`search\` to find related content, or \`analyze_dependencies\` to see what this file imports._`},...c?[c]:[]]}}catch(e){return o.error(`Lookup failed`,a(e)),{content:[{type:`text`,text:`Lookup failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}export{s as registerLookupTool};
@@ -1,10 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
-
3
- //#region packages/server/src/tools/manipulation.tools.d.ts
4
- declare function registerGitContextTool(server: McpServer): void;
5
- declare function registerDiffParseTool(server: McpServer): void;
6
- declare function registerRenameTool(server: McpServer): void;
7
- declare function registerCodemodTool(server: McpServer): void;
8
- declare function registerDataTransformTool(server: McpServer): void;
9
- //#endregion
10
- export { registerCodemodTool, registerDataTransformTool, registerDiffParseTool, registerGitContextTool, registerRenameTool };
@@ -1,4 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{GitContextOutputSchema as t}from"../output-schemas.js";import{z as n}from"zod";import{createLogger as r,serializeError as i}from"../../../core/dist/index.js";import{codemod as a,dataTransform as o,diffParse as s,gitContext as c,rename as l}from"../../../tools/dist/index.js";const u=r(`tools:manipulation`);function d(r){let a=e(`git_context`);r.registerTool(`git_context`,{title:a.title,description:`Summarize the current Git branch, working tree state, recent commits, and optional diff statistics for the repository.`,inputSchema:{cwd:n.string().optional().describe(`Repository root or working directory`),commit_count:n.number().min(1).max(50).default(5).optional().describe(`How many recent commits to include`),include_diff:n.boolean().default(!1).optional().describe(`Include diff stat for working tree changes`)},annotations:a.annotations,outputSchema:t},async({cwd:e,commit_count:t,include_diff:n})=>{try{let r=await c({cwd:e,commitCount:t,includeDiff:n});return{content:[{type:`text`,text:g(r)}],structuredContent:{gitRoot:r.gitRoot,branch:r.branch,commitCount:r.recentCommits.length,hasUncommitted:r.status.staged.length>0||r.status.modified.length>0||r.status.untracked.length>0,recentCommits:r.recentCommits.map(e=>({hash:e.hash,message:e.message,author:e.author,date:e.date}))}}}catch(e){return u.error(`Git context failed`,i(e)),{content:[{type:`text`,text:`Git context failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function f(t){let r=e(`diff_parse`);t.registerTool(`diff_parse`,{title:r.title,description:`Parse raw unified diff text into file-level and hunk-level structural changes.`,inputSchema:{diff:n.string().max(1e6).describe(`Raw unified diff text`)},annotations:r.annotations},async({diff:e})=>{try{return{content:[{type:`text`,text:_(s({diff:e.replace(/\\n/g,`
2
- `).replace(/\\t/g,` `)}))}]}}catch(e){return u.error(`Diff parse failed`,i(e)),{content:[{type:`text`,text:`Diff parse failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function p(t){let r=e(`rename`);t.registerTool(`rename`,{title:r.title,description:`Rename a symbol across files using whole-word regex matching for exports, imports, and general usage references.`,inputSchema:{old_name:n.string().describe(`Existing symbol name to replace`),new_name:n.string().describe(`New symbol name to use`),root_path:n.string().describe(`Root directory to search within`),extensions:n.array(n.string()).optional().describe(`Optional file extensions to include, such as .ts,.tsx,.js,.jsx`),dry_run:n.boolean().default(!0).describe(`Preview changes without writing files`)},annotations:r.annotations},async({old_name:e,new_name:t,root_path:n,extensions:r,dry_run:a})=>{try{let i=await l({oldName:e,newName:t,rootPath:n,extensions:r,dryRun:a});return{content:[{type:`text`,text:JSON.stringify(i)}]}}catch(e){return u.error(`Rename failed`,i(e)),{content:[{type:`text`,text:`Rename failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function m(t){let r=e(`codemod`);t.registerTool(`codemod`,{title:r.title,description:`Apply regex-based codemod rules across files and return structured before/after changes for each affected line.`,inputSchema:{root_path:n.string().describe(`Root directory to transform within`),rules:n.array(n.object({description:n.string().describe(`What the codemod rule does`),pattern:n.string().describe(`Regex pattern in string form`),replacement:n.string().describe(`Replacement string with optional capture groups`)})).min(1).describe(`Codemod rules to apply`),dry_run:n.boolean().default(!0).describe(`Preview changes without writing files`)},annotations:r.annotations},async({root_path:e,rules:t,dry_run:n})=>{try{let r=await a({rootPath:e,rules:t,dryRun:n});return{content:[{type:`text`,text:JSON.stringify(r)}]}}catch(e){return u.error(`Codemod failed`,i(e)),{content:[{type:`text`,text:`Codemod failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function h(t){let r=e(`data_transform`);t.registerTool(`data_transform`,{title:r.title,description:`Apply small jq-like transforms to JSON input for filtering, projection, grouping, and path extraction.`,inputSchema:{input:n.string().max(5e5).describe(`Input JSON string`),expression:n.string().max(1e4).describe(`Transform expression to apply`)},annotations:r.annotations},async({input:e,expression:t})=>{try{return{content:[{type:`text`,text:o({input:e,expression:t}).outputString}]}}catch(e){return u.error(`Data transform failed`,i(e)),{content:[{type:`text`,text:`Data transform failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function g(e){let t=[`Git root: ${e.gitRoot}`,`Branch: ${e.branch}`,`Staged: ${e.status.staged.length}`,...e.status.staged.map(e=>` - ${e}`),`Modified: ${e.status.modified.length}`,...e.status.modified.map(e=>` - ${e}`),`Untracked: ${e.status.untracked.length}`,...e.status.untracked.map(e=>` - ${e}`),``,`Recent commits:`];if(e.recentCommits.length===0)t.push(` none`);else for(let n of e.recentCommits)t.push(` - ${n.hash} ${n.message}`),t.push(` ${n.author} @ ${n.date}`);return e.diff&&t.push(``,`Diff stat:`,e.diff),t.join(`
3
- `)}function _(e){if(e.length===0)return`No diff files found.`;let t=[];for(let n of e){let e=n.oldPath?` (from ${n.oldPath})`:``;t.push(`${n.path}${e} [${n.status}] +${n.additions} -${n.deletions} (${n.hunks.length} hunks)`);for(let e of n.hunks){let n=e.header?` ${e.header}`:``;t.push(` @@ -${e.oldStart},${e.oldLines} +${e.newStart},${e.newLines} @@${n}`)}}return t.join(`
4
- `)}export{m as registerCodemodTool,h as registerDataTransformTool,f as registerDiffParseTool,d as registerGitContextTool,p as registerRenameTool};
@@ -1,12 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { KBConfig } from "../../../core/dist/index.js";
3
- import { IKnowledgeStore } from "../../../store/dist/index.js";
4
- import { IEmbedder } from "../../../embeddings/dist/index.js";
5
-
6
- //#region packages/server/src/tools/onboard.tool.d.ts
7
- declare function registerOnboardTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder, config?: KBConfig, onboardState?: {
8
- onboardComplete: boolean;
9
- onboardTimestamp?: string;
10
- }): void;
11
- //#endregion
12
- export { registerOnboardTool };
@@ -1,2 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{createTaskRunner as t}from"../task-manager.js";import{z as n}from"zod";import{createHash as r}from"node:crypto";import{createLogger as i,serializeError as a}from"../../../core/dist/index.js";import{onboard as o}from"../../../tools/dist/index.js";const s=i(`tools`);let c=!1;async function l(e,t,n){for(let i of n.steps)if(!(i.status!==`success`||!i.output))try{let a=r(`sha256`).update(n.path).digest(`hex`).slice(0,12),o=`produced/onboard/${i.name}/${a}.md`,s=r(`sha256`).update(i.output).digest(`hex`).slice(0,16),c=new Date().toISOString(),l=i.output.length>2e3?i.output.split(/(?=^## )/m).filter(e=>e.trim().length>0):[i.output],u=l.map((e,t)=>({id:r(`sha256`).update(`${o}::${t}`).digest(`hex`).slice(0,16),content:e.trim(),sourcePath:o,contentType:`produced-knowledge`,chunkIndex:t,totalChunks:l.length,startLine:0,endLine:0,fileHash:s,indexedAt:c,origin:`produced`,tags:[`onboard`,i.name],category:`analysis`,version:1})),d=await t.embedBatch(u.map(e=>e.content));await e.upsert(u,d)}catch(e){s.warn(`Auto-persist onboard step failed`,{stepName:i.name,...a(e)})}}async function u(e,t,n){if(n.autoRemember?.length)for(let i of n.autoRemember)try{let n=r(`sha256`).update(`onboard-remember::${i.title}`).digest(`hex`).slice(0,16),a=new Date().toISOString(),o={id:n,content:`# ${i.title}\n\n${i.content}`,sourcePath:`curated/onboard/${i.category}/${n}.md`,contentType:`curated`,chunkIndex:0,totalChunks:1,startLine:0,endLine:0,fileHash:r(`sha256`).update(i.content).digest(`hex`).slice(0,16),indexedAt:a,origin:`curated`,tags:i.tags,category:i.category,version:1},[s]=await t.embedBatch([o.content]);await e.upsert([o],[s])}catch(e){s.warn(`Auto-persist remember entry failed`,{title:i.title,...a(e)})}}function d(r,i,d,f,p){let m=e(`onboard`);r.registerTool(`onboard`,{title:m.title,description:`First-time codebase onboarding: runs all analysis tools (structure, dependencies, entry-points, symbols, patterns, diagram) in one command. Results are auto-persisted to KB. Use mode=generate to also write structured output to .ai/context/ directory.`,inputSchema:{path:n.string().describe(`Root path of the codebase to onboard`),mode:n.enum([`memory`,`generate`]).default(`generate`).describe(`Output mode: generate (default) = persist to AI Kit + write .ai/context/ files; memory = AI Kit vector store only`),out_dir:n.string().optional().describe(`Custom output directory for generate mode (default: <path>/.ai/context)`)},annotations:m.annotations},async({path:e,mode:n,out_dir:r},m)=>{try{if(c)return{content:[{type:`text`,text:`Onboard is already running. Please wait for it to complete before starting another.`}]};c=!0,s.info(`Starting onboard`,{path:e,mode:n});let h=await o({path:e,mode:n,outDir:r??f?.onboardDir}),g=t(m).createTask(`Onboard`,h.steps.length);for(let e=0;e<h.steps.length;e++){let t=h.steps[e];g.progress(e,`${t.name}: ${t.status}`)}g.complete(`Onboard complete: ${h.steps.filter(e=>e.status===`success`).length}/${h.steps.length} steps succeeded`),l(i,d,h),h.autoRemember?.length&&u(i,d,h).catch(e=>{s.warn(`Auto-persist autoRemember failed`,a(e))}),p&&(p.onboardComplete=!0,p.onboardTimestamp=new Date().toISOString());let _=[`## Onboard Complete`,``,`**Path:** \`${h.path}\``,`**Mode:** ${h.mode}`,`**Duration:** ${h.totalDurationMs}ms`,``];h.outDir&&(_.push(`**Output directory:** \`${h.outDir}\``),_.push(``)),_.push(`### Analysis Results`,``);let v=[],y=[];for(let e of h.steps)e.status===`success`?v.push(`- ✓ **${e.name}** (${e.durationMs}ms) — ${e.output.length} chars`):y.push(`- ✗ **${e.name}** — ${e.error}`);_.push(...v),y.length>0&&_.push(``,`### Failed`,``,...y),_.push(``,`---`,``);for(let e of h.steps)e.status===`success`&&_.push(`### ${e.name}`,``,e.output,``,`---`,``);return _.push(`_All results auto-saved to KB.`,h.mode===`generate`?` Files written to \`${h.outDir}\`.`:``," Next: Use `search` to query the knowledge, or `remember` to add custom insights._"),{content:[{type:`text`,text:_.join(`
2
- `)}]}}catch(e){return s.error(`Onboard failed`,a(e)),{content:[{type:`text`,text:`Onboard failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}finally{c=!1}})}export{d as registerOnboardTool};
@@ -1,10 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
-
3
- //#region packages/server/src/tools/persistence.tools.d.ts
4
- declare function registerWorksetTool(server: McpServer): void;
5
- declare function registerStashTool(server: McpServer): void;
6
- declare function registerCheckpointTool(server: McpServer): void;
7
- declare function registerLaneTool(server: McpServer): void;
8
- declare function registerQueueTool(server: McpServer): void;
9
- //#endregion
10
- export { registerCheckpointTool, registerLaneTool, registerQueueTool, registerStashTool, registerWorksetTool };
@@ -1,5 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{z as t}from"zod";import{createLogger as n,serializeError as r}from"../../../core/dist/index.js";import{addToWorkset as i,checkpointLatest as a,checkpointList as o,checkpointLoad as s,checkpointSave as c,deleteWorkset as l,getWorkset as u,laneCreate as d,laneDiff as f,laneDiscard as p,laneList as m,laneMerge as h,laneStatus as g,listWorksets as _,queueClear as v,queueCreate as y,queueDelete as b,queueDone as x,queueFail as S,queueGet as C,queueList as w,queueNext as T,queuePush as E,removeFromWorkset as D,saveWorkset as O,stashClear as k,stashDelete as A,stashGet as j,stashList as M,stashSet as N}from"../../../tools/dist/index.js";const P=n(`tools:persistence`);function F(n){let a=e(`workset`);n.registerTool(`workset`,{title:a.title,description:`Manage named file sets (worksets). Save, load, list, add/remove files. Worksets persist across sessions in .aikit-state/worksets.json.`,inputSchema:{action:t.enum([`save`,`get`,`list`,`delete`,`add`,`remove`]).describe(`Operation to perform`),name:t.string().optional().describe(`Workset name (required for all except list)`),files:t.array(t.string()).optional().describe(`File paths (required for save, add, remove)`),description:t.string().optional().describe(`Description (for save)`)},annotations:a.annotations},async({action:e,name:t,files:n,description:a})=>{try{switch(e){case`save`:{if(!t||!n)throw Error(`name and files required for save`);let e=O(t,n,{description:a});return{content:[{type:`text`,text:`Saved workset "${e.name}" with ${e.files.length} files.`}]}}case`get`:{if(!t)throw Error(`name required for get`);let e=u(t);return e?{content:[{type:`text`,text:JSON.stringify(e)}]}:{content:[{type:`text`,text:`Workset "${t}" not found.`}]}}case`list`:{let e=_();return e.length===0?{content:[{type:`text`,text:`No worksets.`}]}:{content:[{type:`text`,text:e.map(e=>`- **${e.name}** (${e.files.length} files) — ${e.description??`no description`}`).join(`
2
- `)}]}}case`delete`:if(!t)throw Error(`name required for delete`);return{content:[{type:`text`,text:l(t)?`Deleted workset "${t}".`:`Workset "${t}" not found.`}]};case`add`:{if(!t||!n)throw Error(`name and files required for add`);let e=i(t,n);return{content:[{type:`text`,text:`Added to workset "${e.name}": now ${e.files.length} files.`}]}}case`remove`:{if(!t||!n)throw Error(`name and files required for remove`);let e=D(t,n);return e?{content:[{type:`text`,text:`Removed from workset "${e.name}": now ${e.files.length} files.`}]}:{content:[{type:`text`,text:`Workset "${t}" not found.`}]}}}}catch(e){return P.error(`Workset operation failed`,r(e)),{content:[{type:`text`,text:`Workset operation failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function I(n){let i=e(`stash`);n.registerTool(`stash`,{title:i.title,description:`Persist and retrieve named values in .aikit-state/stash.json for intermediate results between tool calls.`,inputSchema:{action:t.enum([`set`,`get`,`list`,`delete`,`clear`]).describe(`Operation to perform on the stash`),key:t.string().optional().describe(`Entry key for set/get/delete operations`),value:t.string().optional().describe(`String or JSON value for set operations`)},annotations:i.annotations},async({action:e,key:t,value:n})=>{try{switch(e){case`set`:{if(!t)throw Error(`key required for set`);let e=N(t,V(n??``));return{content:[{type:`text`,text:`Stored stash entry "${e.key}" (${e.type}) at ${e.storedAt}.`}]}}case`get`:{if(!t)throw Error(`key required for get`);let e=j(t);return{content:[{type:`text`,text:e?JSON.stringify(e):`Stash entry "${t}" not found.`}]}}case`list`:{let e=M();return{content:[{type:`text`,text:e.length===0?`Stash is empty.`:e.map(e=>`- ${e.key} (${e.type}) — ${e.storedAt}`).join(`
3
- `)}]}}case`delete`:if(!t)throw Error(`key required for delete`);return{content:[{type:`text`,text:A(t)?`Deleted stash entry "${t}".`:`Stash entry "${t}" not found.`}]};case`clear`:{let e=k();return{content:[{type:`text`,text:`Cleared ${e} stash entr${e===1?`y`:`ies`}.`}]}}}}catch(e){return P.error(`Stash operation failed`,r(e)),{content:[{type:`text`,text:`Stash operation failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function L(n){let i=e(`checkpoint`);n.registerTool(`checkpoint`,{title:i.title,description:`Save and restore lightweight session checkpoints in .aikit-state/checkpoints for cross-session continuity.`,inputSchema:{action:t.enum([`save`,`load`,`list`,`latest`]).describe(`Checkpoint action to perform`),label:t.string().optional().describe(`Checkpoint label for save, or checkpoint id for load`),data:t.string().max(5e5).optional().describe(`JSON object string for save actions`),notes:t.string().max(1e4).optional().describe(`Optional notes for save actions`)},annotations:i.annotations},async({action:e,label:t,data:n,notes:i})=>{try{switch(e){case`save`:if(!t)throw Error(`label required for save`);return{content:[{type:`text`,text:B(c(t,H(n),{notes:i}))}]};case`load`:{if(!t)throw Error(`label required for load`);let e=s(t);return{content:[{type:`text`,text:e?B(e):`Checkpoint "${t}" not found.`}]}}case`list`:{let e=o();return{content:[{type:`text`,text:e.length===0?`No checkpoints saved.`:e.map(e=>`- ${e.id} — ${e.label} (${e.createdAt})`).join(`
4
- `)}]}}case`latest`:{let e=a();return{content:[{type:`text`,text:e?B(e):`No checkpoints saved.`}]}}}}catch(e){return P.error(`Checkpoint failed`,r(e)),{content:[{type:`text`,text:`Checkpoint failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function R(n){let i=e(`lane`);n.registerTool(`lane`,{title:i.title,description:`Manage verified lanes — isolated file copies for parallel exploration. Create a lane, make changes, diff, merge back, or discard.`,inputSchema:{action:t.enum([`create`,`list`,`status`,`diff`,`merge`,`discard`]).describe(`Lane action to perform`),name:t.string().optional().describe(`Lane name (required for create/status/diff/merge/discard)`),files:t.array(t.string()).optional().describe(`File paths to copy into the lane (required for create)`)},annotations:i.annotations},async({action:e,name:t,files:n})=>{try{switch(e){case`create`:{if(!t)throw Error(`name is required for create`);if(!n||n.length===0)throw Error(`files are required for create`);let e=d(t,n);return{content:[{type:`text`,text:JSON.stringify(e)}]}}case`list`:return{content:[{type:`text`,text:JSON.stringify(m())}]};case`status`:if(!t)throw Error(`name is required for status`);return{content:[{type:`text`,text:JSON.stringify(g(t))}]};case`diff`:if(!t)throw Error(`name is required for diff`);return{content:[{type:`text`,text:JSON.stringify(f(t))}]};case`merge`:if(!t)throw Error(`name is required for merge`);return{content:[{type:`text`,text:JSON.stringify(h(t))}]};case`discard`:if(!t)throw Error(`name is required for discard`);return{content:[{type:`text`,text:JSON.stringify({discarded:p(t)})}]}}}catch(e){return P.error(`Lane action failed`,r(e)),{content:[{type:`text`,text:`Lane action failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function z(n){let i=e(`queue`);n.registerTool(`queue`,{title:i.title,description:`Manage task queues for sequential agent operations. Push items, take next, mark done/failed, list queues.`,inputSchema:{action:t.enum([`create`,`push`,`next`,`done`,`fail`,`get`,`list`,`clear`,`delete`]).describe(`Queue action`),name:t.string().optional().describe(`Queue name (required for most actions)`),title:t.string().optional().describe(`Item title (required for push)`),id:t.string().optional().describe(`Item ID (required for done/fail)`),data:t.unknown().optional().describe(`Arbitrary data to attach to a queue item`),error:t.string().optional().describe(`Error message (required for fail)`)},annotations:i.annotations},async({action:e,name:t,title:n,id:i,data:a,error:o})=>{try{switch(e){case`create`:if(!t)throw Error(`name is required for create`);return{content:[{type:`text`,text:JSON.stringify(y(t))}]};case`push`:if(!t)throw Error(`name is required for push`);if(!n)throw Error(`title is required for push`);return{content:[{type:`text`,text:JSON.stringify(E(t,n,a))}]};case`next`:{if(!t)throw Error(`name is required for next`);let e=T(t);return{content:[{type:`text`,text:JSON.stringify(e)}]}}case`done`:if(!t)throw Error(`name is required for done`);if(!i)throw Error(`id is required for done`);return{content:[{type:`text`,text:JSON.stringify(x(t,i))}]};case`fail`:if(!t)throw Error(`name is required for fail`);if(!i)throw Error(`id is required for fail`);if(!o)throw Error(`error is required for fail`);return{content:[{type:`text`,text:JSON.stringify(S(t,i,o))}]};case`get`:if(!t)throw Error(`name is required for get`);return{content:[{type:`text`,text:JSON.stringify(C(t))}]};case`list`:return{content:[{type:`text`,text:JSON.stringify(w())}]};case`clear`:if(!t)throw Error(`name is required for clear`);return{content:[{type:`text`,text:JSON.stringify({cleared:v(t)})}]};case`delete`:if(!t)throw Error(`name is required for delete`);return{content:[{type:`text`,text:JSON.stringify({deleted:b(t)})}]}}}catch(e){return P.error(`Queue action failed`,r(e)),{content:[{type:`text`,text:`Queue action failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}function B(e){let t=[e.id,`Label: ${e.label}`,`Created: ${e.createdAt}`];if(e.notes&&t.push(`Notes: ${e.notes}`),e.files?.length){t.push(`Files: ${e.files.length}`);for(let n of e.files)t.push(` - ${n}`)}return t.push(``,`Data:`,JSON.stringify(e.data)),t.join(`
5
- `)}function V(e){let t=e.trim();if(!t)return``;try{return JSON.parse(t)}catch{return e}}function H(e){let t=e?.trim();if(!t)return{};let n;try{n=JSON.parse(t)}catch{throw Error(`data must be a valid JSON object string`)}if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`data must be a JSON object string`);return n}export{L as registerCheckpointTool,R as registerLaneTool,z as registerQueueTool,I as registerStashTool,F as registerWorksetTool};
@@ -1,7 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { PolicyStore } from "../../../enterprise-bridge/dist/index.js";
3
-
4
- //#region packages/server/src/tools/policy.tools.d.ts
5
- declare function registerErUpdatePolicyTool(server: McpServer, policyStore: PolicyStore): void;
6
- //#endregion
7
- export { registerErUpdatePolicyTool };
@@ -1,3 +0,0 @@
1
- import{getToolMeta as e}from"../tool-metadata.js";import{z as t}from"zod";import{createLogger as n,serializeError as r}from"../../../core/dist/index.js";const i=n(`tools`);function a(e){let t=[`## Rule: ${e.id}`,``,`- **Status**: ${e.enabled?`enabled`:`disabled`}`,`- **Description**: ${e.description??`—`}`,`- **Category**: ${e.category??`—`}`,`- **Push weight**: ${e.pushWeight??`—`}`];return e.patterns?.length&&t.push(`- **Patterns**: ${e.patterns.join(`, `)}`),e.examples?.length&&t.push(`- **Examples**: ${e.examples.join(`, `)}`),t.join(`
2
- `)}function o(n,o){let s=e(`er_update_policy`);n.registerTool(`er_update_policy`,{title:s.title,description:`Manage ER push classification rules. Supports listing, updating, creating, and deleting rules that determine when knowledge should be pushed to Enterprise RAG.`,inputSchema:{action:t.enum([`list`,`get`,`update`,`create`,`delete`]).describe(`Action to perform on classification rules`),rule_id:t.string().optional().describe(`Rule ID (required for get, update, delete)`),changes:t.object({patterns:t.array(t.string()).optional(),category:t.string().optional(),pushWeight:t.number().min(0).max(1).optional(),description:t.string().optional(),examples:t.array(t.string()).optional(),enabled:t.boolean().optional()}).optional().describe(`Changes to apply (for update action)`),new_rule:t.object({id:t.string().regex(/^[a-z][a-z0-9-]*$/),patterns:t.array(t.string()).min(1),category:t.string(),pushWeight:t.number().min(0).max(1),description:t.string(),examples:t.array(t.string()).default([]),enabled:t.boolean().default(!0)}).optional().describe(`New rule definition (for create action)`)},annotations:s.annotations},async({action:e,rule_id:t,changes:n,new_rule:s})=>{try{if(e===`list`){let e=o.getRules();return{content:[{type:`text`,text:`## Classification Rules\n\n${e.map(e=>`- **${e.id}** (${e.enabled?`enabled`:`disabled`}) — ${e.description}\n Category: ${e.category} | Weight: ${e.pushWeight} | Patterns: ${e.patterns.join(`, `)}`).join(`
3
- `)}\n\n---\n_${e.length} rules total. Use \`action: "update"\` to modify a rule._`}]}}if(e===`get`){if(!t)return{content:[{type:`text`,text:'`rule_id` is required for "get" action.'}],isError:!0};let e=o.getRule(t);return e?{content:[{type:`text`,text:a(e)}]}:{content:[{type:`text`,text:`Rule "${t}" not found.`}],isError:!0}}if(e===`update`){if(!t||!n)return{content:[{type:`text`,text:'`rule_id` and `changes` are required for "update" action.'}],isError:!0};let e=o.updateRule(t,n);return e?{content:[{type:`text`,text:`${a(e)}\n\n---\n_Updated. Next: Use \`action: "list"\` to verify._`}]}:{content:[{type:`text`,text:`Rule "${t}" not found.`}],isError:!0}}return e===`create`?s?{content:[{type:`text`,text:`${a(o.addRule(s))}\n\n---\n_Created. Next: Test classification with \`remember\`._`}]}:{content:[{type:`text`,text:'`new_rule` is required for "create" action.'}],isError:!0}:e===`delete`?t?o.deleteRule(t)?{content:[{type:`text`,text:`Deleted rule **${t}**.\n\n---\n_Next: Use \`action: "list"\` to verify._`}]}:{content:[{type:`text`,text:`Rule "${t}" not found.`}],isError:!0}:{content:[{type:`text`,text:'`rule_id` is required for "delete" action.'}],isError:!0}:{content:[{type:`text`,text:`Unknown action: ${e}`}],isError:!0}}catch(e){return i.error(`Policy update failed`,r(e)),{content:[{type:`text`,text:`Policy update failed: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}})}export{o as registerErUpdatePolicyTool};
@@ -1,4 +0,0 @@
1
- //#region packages/server/src/tools/present/browser.d.ts
2
- declare function buildBrowserHtml(title: string | undefined, content: unknown, actions?: unknown, template?: string): string;
3
- //#endregion
4
- export { buildBrowserHtml };
@@ -1,93 +0,0 @@
1
- import{escHtml as e}from"../present-utils.js";import{buildTemplateHtml as t}from"./templates.js";import{FONT_LINK as n,getDesignSystemCSS as r}from"../present-theme.js";import{contentToHtml as i}from"./html.js";function a(a,o,s,c){let l=c&&c!==`auto`?t(c,o):i(a,o);return`<!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width,initial-scale=1.0">
6
- <title>${e(a??`AI Kit Dashboard`)}</title>
7
- ${n}
8
- <style>${r()}</style>
9
- </head>
10
- <body>
11
- <div class="dashboard">
12
- <div class="header">
13
- <h1>${e(a??`AI Kit Dashboard`)}</h1>
14
- <div class="subtitle">AI Kit</div>
15
- </div>
16
- ${l}
17
- ${(()=>{let t=Array.isArray(s)?s:[];return t.length===0?``:`
18
- <div class="actions-bar">
19
- <h2>Actions</h2>
20
- <div class="actions-grid">${t.map(t=>{let n=String(t.id??``);if(t.type===`select`&&Array.isArray(t.options)){let r=t.options.map(t=>{let n=typeof t==`string`?t:t.label;return`<option value="${e(typeof t==`string`?t:t.value)}">${e(n)}</option>`}).join(``);return`<div class="action-group"><label>${e(String(t.label??``))}</label><select data-action-id="${e(n)}" onchange="sendCallback(${e(JSON.stringify(n))},this.value)">${r}</select></div>`}return`<button class="action-btn action-${String(t.variant??`default`)}" onclick="sendCallback(${e(JSON.stringify(n))},'clicked')">${e(String(t.label??``))}</button>`}).join(`
21
- `)}</div>
22
- <div id="action-feedback" class="action-feedback"></div>
23
- </div>
24
- <script>
25
- let _cbSent=false;
26
- function sendCallback(actionId,value){
27
- if(_cbSent)return;
28
- _cbSent=true;
29
- document.querySelectorAll('.action-btn,.action-group select').forEach(el=>{el.disabled=true;el.style.opacity='0.5'});
30
- const fb=document.getElementById('action-feedback');
31
- fb.textContent='⏳ Sending selection: '+actionId+' = '+value;
32
- fb.className='action-feedback sent';
33
- fetch('/callback',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({actionId,value})})
34
- .then(()=>{
35
- fb.textContent='✓ Selection sent: '+actionId+' = '+value;
36
- })
37
- .catch(e=>{
38
- fb.textContent='✗ Callback failed — '+e.message;
39
- fb.style.color='var(--error)';
40
- _cbSent=false;
41
- document.querySelectorAll('.action-btn,.action-group select').forEach(el=>{el.disabled=false;el.style.opacity='1'});
42
- });
43
- }
44
- <\/script>`})()}
45
- <div class="footer">AI Kit MCP Server &middot; Generated ${new Date().toLocaleString()}</div>
46
- </div>
47
- <script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"><\/script>
48
- <script>
49
- if(document.querySelector('.mermaid'))mermaid.initialize({theme:'dark',startOnLoad:true});
50
-
51
- document.querySelectorAll('table').forEach(table=>{
52
- const headers=table.querySelectorAll('th');
53
- headers.forEach((th,i)=>{
54
- let asc=true;
55
- th.addEventListener('click',()=>{
56
- const tbody=table.querySelector('tbody')||table;
57
- const rows=[...tbody.querySelectorAll('tr')].filter(r=>r.querySelector('td'));
58
- rows.sort((a,b)=>{
59
- const at=(a.cells[i]?.textContent||'').trim();
60
- const bt=(b.cells[i]?.textContent||'').trim();
61
- return asc?at.localeCompare(bt,undefined,{numeric:true}):bt.localeCompare(at,undefined,{numeric:true});
62
- });
63
- rows.forEach(r=>tbody.appendChild(r));
64
- asc=!asc;
65
- headers.forEach(h=>h.style.color='');
66
- th.style.color='var(--primary)';
67
- });
68
- });
69
- });
70
-
71
- document.querySelectorAll('.table-wrap').forEach(wrap=>{
72
- const table=wrap.querySelector('table');
73
- if(!table||table.querySelectorAll('tr').length<5)return;
74
- const bar=document.createElement('div');
75
- bar.className='search-bar';
76
- const input=document.createElement('input');
77
- input.placeholder='Filter rows...';
78
- const count=document.createElement('span');
79
- count.className='count';
80
- bar.appendChild(input);bar.appendChild(count);
81
- wrap.parentNode.insertBefore(bar,wrap);
82
- const rows=[...table.querySelectorAll('tbody tr, tr')].filter(r=>r.querySelector('td'));
83
- const updateCount=()=>{const v=rows.filter(r=>r.style.display!=='none').length;count.textContent=v+'/'+rows.length};
84
- updateCount();
85
- input.addEventListener('input',()=>{
86
- const q=input.value.toLowerCase();
87
- rows.forEach(r=>{r.style.display=r.textContent.toLowerCase().includes(q)?'':'none'});
88
- updateCount();
89
- });
90
- });
91
- <\/script>
92
- </body>
93
- </html>`}export{a as buildBrowserHtml};
@@ -1,19 +0,0 @@
1
- //#region packages/server/src/tools/present/helpers.d.ts
2
- interface TypedBlock {
3
- type: string;
4
- title?: string;
5
- value?: unknown;
6
- language?: string;
7
- [key: string]: unknown;
8
- }
9
- declare function formatValue(value: unknown): string;
10
- declare function sanitizeId(value: string): string;
11
- declare function isTypedBlock(value: unknown): value is TypedBlock;
12
- /**
13
- * Normalize a typed block so renderers can always read from `value`.
14
- * Handles alternative field names: text, code, headers+rows → value.
15
- */
16
- declare function normalizeBlock(block: TypedBlock): TypedBlock;
17
- declare function normalizeContentForApp(content: unknown): unknown;
18
- //#endregion
19
- export { TypedBlock, formatValue, isTypedBlock, normalizeBlock, normalizeContentForApp, sanitizeId };
@@ -1,16 +0,0 @@
1
- function e(t){return t==null?`null`:Array.isArray(t)?`[${t.map(e).join(`, `)}]`:String(t)}function t(e){return e.replace(/[^a-zA-Z0-9_]/g,`_`)}function n(e){if(typeof e!=`object`||!e||!(`type`in e))return!1;let t=e;return`value`in t||typeof t.text==`string`||Array.isArray(t.headers)&&Array.isArray(t.rows)||typeof t.code==`string`||Array.isArray(t.items)||!!t.entries&&typeof t.entries==`object`&&!Array.isArray(t.entries)||!!t.columns&&typeof t.columns==`object`||`chartType`in t||Array.isArray(t.data)}function r(e){if(Array.isArray(e)){let t=e.filter(e=>typeof e==`object`&&!!e),n=t.map(e=>String(e.title??``)),r=Math.max(0,...t.map(e=>Array.isArray(e.items)?e.items.length:0));return{headers:n,rows:Array.from({length:r},(e,n)=>t.map(e=>Array.isArray(e.items)?e.items[n]??``:``))}}if(!e||typeof e!=`object`)return null;let t=e,n=Object.keys(t),r=Math.max(0,...n.map(e=>Array.isArray(t[e])?t[e].length:0));return{headers:n,rows:Array.from({length:r},(e,r)=>n.map(e=>Array.isArray(t[e])?t[e][r]??``:``))}}function i(e){let t=e,n=e;if(`value`in n||(typeof t.text==`string`?n={...n,value:t.text}:typeof t.code==`string`?n={...n,value:t.code}:Array.isArray(t.headers)&&Array.isArray(t.rows)?n={...n,value:{headers:t.headers,rows:t.rows}}:Array.isArray(t.items)?n={...n,value:{items:t.items}}:(`chartType`in t||Array.isArray(t.data))&&(n={...n,value:{chartType:t.chartType,data:t.data,xKey:t.xKey??`label`,yKeys:t.yKeys??[`value`]}})),n.type===`chart`){let e=n.value;if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e,r=t.data&&typeof t.data==`object`&&!Array.isArray(t.data)?t.data:null,i=Array.isArray(t.labels)?t.labels:Array.isArray(r?.labels)?r.labels:null,a=Array.isArray(t.datasets)?t.datasets:Array.isArray(r?.datasets)?r.datasets:null,o=typeof t.type==`string`?t.type:typeof t.chartType==`string`?t.chartType:null;if(o&&i&&a&&!Array.isArray(t.data)){let e=a.map((e,t)=>String(e.label??`series${t+1}`)),t=i.map((e,t)=>{let n={label:String(e)};for(let[e,r]of a.entries()){let i=r,a=String(i.label??`series${e+1}`);n[a]=i.data?.[t]??0}return n});n={...n,value:{chartType:String(o),data:t,xKey:`label`,yKeys:e}}}}}let i=n;if(n.type===`text`||n.type===`paragraph`)return{...n,type:`markdown`};if(n.type===`heading`)return{...n,type:`markdown`,value:`## ${String(i.value??``)}`};if(n.type===`kv`){let e=t.entries&&typeof t.entries==`object`&&!Array.isArray(t.entries)?t.entries:i.value&&typeof i.value==`object`&&!Array.isArray(i.value)?i.value:null;if(e)return{...n,type:`table`,value:{headers:[`Key`,`Value`],rows:Object.entries(e).map(([e,t])=>[e,t])}}}if(n.type===`comparison`){let e=r(t.columns??(i.value&&typeof i.value==`object`?i.value.columns:void 0))??r(i.value);if(e)return{...n,type:`table`,value:e};let a=i.value;if(a&&typeof a==`object`&&!Array.isArray(a)){let e=a;if(Array.isArray(e.headers)&&Array.isArray(e.rows))return{...n,type:`table`}}}if(n.type===`timeline`){let e=i.value;if(Array.isArray(e)){let t=e.map(e=>{if(e&&typeof e==`object`){let t=e;return[String(t.status??t.state??``),String(t.time??t.date??t.timestamp??``),String(t.label??t.description??t.title??t.text??``)]}return[``,``,String(e)]});return{...n,type:`table`,value:{headers:[`Status`,`Time`,`Description`],rows:t}}}}return n}function a(e,t){let n=e=>{if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);if(typeof e==`object`)try{let t=JSON.stringify(e);return typeof t==`string`?t:String(e)}catch{return String(e)}return String(e)};if(e==null)return null;if(typeof e==`string`)return{type:`markdown`,title:t,value:e};if(typeof e==`number`||typeof e==`boolean`)return{type:`markdown`,title:t,value:String(e)};if(Array.isArray(e)){if(e.every(e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`))return{type:`markdown`,title:t,value:e.map(e=>`- ${String(e)}`).join(`
2
- `)};let n=e.filter(e=>typeof e==`object`&&!!e);if(n.length===e.length){let e={success:`✅`,done:`✅`,warning:`⚠️`,"at-risk":`⚠️`,error:`❌`,info:`ℹ️`,pending:`⏳`};if(n.every(e=>typeof e.category==`string`&&Array.isArray(e.items))){let r=n.map(t=>{let n=typeof t.category==`string`?t.category:null,r=Array.isArray(t.items)?t.items:null;if(!n||!r)return null;let i=r.map(t=>{if(!t||typeof t!=`object`)return null;let n=t,r=n.label??n.title??n.name,i=typeof r==`string`||typeof r==`number`||typeof r==`boolean`?String(r):null;if(!i)return null;let a=typeof n.status==`string`?`${e[n.status.toLowerCase()]??`●`} `:``,o=n.detail??n.description;return`- ${a}${i}${typeof o==`string`&&o.length>0?` — ${o}`:typeof o==`number`||typeof o==`boolean`?` — ${String(o)}`:``}`}).filter(e=>typeof e==`string`);return i.length===0?null:`### ${n}\n${i.join(`
3
- `)}`}).filter(e=>typeof e==`string`);if(r.length>0)return{type:`markdown`,title:t,value:r.join(`
4
-
5
- `)}}let r=new Set;for(let e of n)for(let t of Object.keys(e))r.add(t);let i=Array.from(r);return{type:`table`,title:t,value:{headers:i,rows:n.map(e=>i.map(t=>{if(!(t in e)||e[t]===void 0||e[t]===null)return``;let n=e[t];if(typeof n==`object`)try{let e=JSON.stringify(n);return typeof e==`string`?e:``}catch{return String(n)}return String(n)}))}}}}if(typeof e==`object`){let r=e;if(Array.isArray(r.items))return a(r.items,t);let i=Object.entries(r).map(([e,t])=>`**${e}**: ${n(t)}`);return i.length>0?{type:`markdown`,title:t,value:i.join(`
6
- `)}:null}return null}function o(e){let t=e.value;if(e.type===`separator`)return{type:`markdown`,title:e.title,value:`---`};if(e.type===`checklist`){let n=Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.items)?t.items:null;if(!n)return e;let r=n.map(e=>{if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.label!=`string`)return null;let n=t.checked===!0?`x`:` `,r=typeof t.note==`string`&&t.note.length>0?` — ${t.note}`:``;return`- [${n}] ${t.label}${r}`}).filter(e=>typeof e==`string`);return r.length>0?{type:`markdown`,title:e.title,value:r.join(`
7
- `)}:e}if(e.type===`status-board`){let n={success:`✅`,done:`✅`,warning:`⚠️`,"at-risk":`⚠️`,error:`❌`,info:`ℹ️`,pending:`⏳`},r=Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.items)?t.items:null;if(r&&r.length>0){let t=r[0];if(t&&typeof t==`object`&&`category`in t){let t=r.map(e=>{if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.category!=`string`||!Array.isArray(t.items))return null;let r=t.items.map(e=>{if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.label!=`string`)return null;let r=typeof t.status==`string`?`${n[t.status.toLowerCase()]??`●`} `:``,i=typeof t.detail==`string`&&t.detail.length>0?` — ${t.detail}`:``;return`- ${r}${t.label}${i}`}).filter(Boolean);return`### ${t.category}\n${r.join(`
8
- `)}`}).filter(Boolean);if(t.length>0)return{type:`markdown`,title:e.title,value:t.join(`
9
-
10
- `)}}let i=r.map(e=>{if(!e||typeof e!=`object`)return null;let t=e;return typeof t.label!=`string`||typeof t.status!=`string`?null:[n[t.status.toLowerCase()]??`●`,t.label,typeof t.detail==`string`?t.detail:``]}).filter(e=>Array.isArray(e));if(i.length>0)return{type:`table`,title:e.title,value:{headers:[`Status`,`Service`,`Detail`],rows:i}}}return e}if(e.type===`prompt`){if(!t||typeof t!=`object`)return e;let n=t;if(typeof n.question!=`string`)return e;let r=[`**${n.question}**`];return typeof n.context==`string`&&n.context.length>0&&r.push(n.context),typeof n.placeholder==`string`&&n.placeholder.length>0&&r.push(`*${n.placeholder}*`),{type:`markdown`,title:e.title,value:r.join(`
11
-
12
- `)}}if(e.type===`progress`){if(!t||typeof t!=`object`||!Array.isArray(t.items))return e;let n=t.items.map(e=>{if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.label!=`string`||typeof t.value!=`number`)return null;let n=typeof t.max==`number`?t.max:100,r=Number.isFinite(n)&&n>0?n:100,i=Math.round(t.value/r*100);return[t.label,`${i}%`,`${t.value} / ${r}`]}).filter(e=>Array.isArray(e));return n.length>0?{type:`table`,title:e.title,value:{headers:[`Item`,`Progress`,`Value`],rows:n}}:e}if(e.type===`timeline`){if(!t||typeof t!=`object`||!Array.isArray(t.items))return e;let n={done:`✅`,active:`🔵`,pending:`⏳`,error:`❌`},r=t.items.map(e=>{if(!e||typeof e!=`object`)return null;let t=e;return typeof t.title==`string`?[n[typeof t.status==`string`?t.status.toLowerCase():``]??`●`,typeof t.phase==`string`&&t.phase.length>0?t.phase:t.title,typeof t.description==`string`?t.description:``]:null}).filter(e=>Array.isArray(e));return r.length>0?{type:`table`,title:e.title,value:{headers:[`Status`,`Phase`,`Description`],rows:r}}:e}if(e.type===`cards`){let n=Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.items)?t.items:null;if(n&&n.length>0){let t={error:`🔴`,warning:`⚠️`,"at-risk":`⚠️`,success:`✅`,done:`✅`,info:`ℹ️`,pending:`⏳`},r=n[0];if(r&&typeof r==`object`&&`category`in r){let r=n.map(e=>{if(!e||typeof e!=`object`)return null;let n=e;if(typeof n.category!=`string`||!Array.isArray(n.items))return null;let r=n.items.map(e=>{if(!e||typeof e!=`object`)return null;let n=e;if(typeof n.label!=`string`)return null;let r=typeof n.status==`string`?`${t[n.status.toLowerCase()]??`●`} `:``,i=typeof n.description==`string`&&n.description.length>0?` — ${n.description}`:``;return`- ${r}${n.label}${i}`}).filter(Boolean);return`### ${n.category}\n${r.join(`
13
- `)}`}).filter(Boolean);if(r.length>0)return{type:`markdown`,title:e.title,value:r.join(`
14
-
15
- `)}}let i=n.map(e=>{if(!e||typeof e!=`object`)return null;let n=e,r=typeof n.label==`string`?n.label:typeof n.title==`string`?n.title:null;return r?`- ${typeof n.status==`string`?`${t[n.status.toLowerCase()]??`●`} `:``}${r}${typeof n.description==`string`&&n.description.length>0?` — ${n.description}`:``}`:null}).filter(Boolean);if(i.length>0)return{type:`markdown`,title:e.title,value:i.join(`
16
- `)}}}return e.type===`table`&&typeof t==`string`?{type:`markdown`,title:e.title,value:t}:new Set([`markdown`,`table`,`code`,`chart`,`metrics`,`tree`,`graph`,`mermaid`]).has(e.type)?e:a(e.value,e.title)||{type:`code`,title:e.title,value:typeof e.value==`string`?e.value:JSON.stringify(e.value,null,2)}}function s(e){return Array.isArray(e)?e.map(e=>n(e)?o(i(e)):e):e}export{e as formatValue,n as isTypedBlock,i as normalizeBlock,s as normalizeContentForApp,t as sanitizeId};
@@ -1,18 +0,0 @@
1
- import { TypedBlock } from "./helpers.js";
2
-
3
- //#region packages/server/src/tools/present/html.d.ts
4
- declare function contentToHtml(title: string | undefined, content: unknown): string;
5
- declare function renderBlockAsHtml(block: TypedBlock): string;
6
- declare function arrayToHtmlTable(rows: Record<string, unknown>[]): string;
7
- declare function metricsToHtml(metrics: Array<{
8
- label: string;
9
- value: string | number;
10
- }>): string;
11
- declare function cardsToHtml(cards: Record<string, unknown>[]): string;
12
- declare function objectToHtmlTree(obj: Record<string, unknown>): string;
13
- declare function graphToMermaidRaw(data: {
14
- nodes: unknown[];
15
- edges: unknown[];
16
- }): string;
17
- //#endregion
18
- export { arrayToHtmlTable, cardsToHtml, contentToHtml, graphToMermaidRaw, metricsToHtml, objectToHtmlTree, renderBlockAsHtml };
@@ -1,5 +0,0 @@
1
- import{escHtml as e}from"../present-utils.js";import{renderChecklistHtml as t,renderComparisonHtml as n,renderProgressHtml as r,renderPromptHtml as i,renderStatusBoardHtml as a,renderTimelineHtml as o}from"../present-blocks.js";import{renderChartAsHtml as s}from"../present-charts.js";import{formatValue as c,isTypedBlock as l,normalizeBlock as u,sanitizeId as d}from"./helpers.js";import{marked as f}from"marked";f.setOptions({async:!1,gfm:!0,breaks:!0}),f.use({renderer:{html(t){return e(t.text)}}});function p(e){return e.replace(/<table\b/g,`<div class="table-wrap"><table`).replace(/<\/table>/g,`</table></div>`)}function m(t,n){let r=[];if(t&&r.push(`<h1>${e(t)}</h1>`),typeof n==`string`)r.push(`<div class="md-content">${p(f.parse(n))}</div>`);else if(Array.isArray(n))if(n.length===0)r.push(`<p><em>empty</em></p>`);else if(l(n[0]))for(let e of n)r.push(h(u(e)));else typeof n[0]==`object`&&n[0]!==null?r.push(g(n)):r.push(`<ul>${n.map(t=>`<li>${e(String(t))}</li>`).join(``)}</ul>`);else if(typeof n==`object`&&n){let t=n;if(Array.isArray(t.blocks)&&t.blocks.length>0)for(let n of t.blocks)l(n)?r.push(h(u(n))):r.push(`<p>${e(String(n))}</p>`);else Array.isArray(t.metrics)?r.push(_(t.metrics)):Array.isArray(t.nodes)&&Array.isArray(t.edges)?(r.push(`<pre class="mermaid">${e(x(t))}</pre>`),r.push(`<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"><\/script>`),r.push(`<script>mermaid.run();<\/script>`)):r.push(y(t))}else r.push(`<p>${e(String(n))}</p>`);return r.join(`
2
- `)}function h(c){let l=[];switch(c.title&&l.push(`<h2>${e(c.title)}</h2>`),c.type){case`markdown`:l.push(`<div class="md-content">${p(f.parse(String(c.value??``)))}</div>`);break;case`code`:l.push(`<pre><code>${e(String(c.value??``))}</code></pre>`);break;case`mermaid`:l.push(`<pre class="mermaid">${e(String(c.value??``))}</pre>`);break;case`table`:if(Array.isArray(c.value)){let e=c.value;if(e.length>0&&Array.isArray(e[0])){let t=e,n=t[0].map(String),r=t.slice(1).map(e=>Object.fromEntries(n.map((t,n)=>[t,e[n]])));l.push(g(r))}else l.push(g(e))}else if(c.value&&typeof c.value==`object`&&`headers`in c.value&&`rows`in c.value){let{headers:e,rows:t}=c.value,n=t.map(t=>Object.fromEntries(e.map((e,n)=>[e,t[n]])));l.push(g(n))}break;case`metrics`:{let e;Array.isArray(c.value)?e=c.value:c.value&&typeof c.value==`object`&&(e=Object.entries(c.value).map(([e,t])=>({label:e,value:String(t)}))),e&&l.push(_(e));break}case`cards`:Array.isArray(c.value)&&l.push(v(c.value));break;case`tree`:c.value&&typeof c.value==`object`&&l.push(y(c.value));break;case`graph`:c.value&&typeof c.value==`object`&&l.push(`<pre class="mermaid">${e(x(c.value))}</pre>`);break;case`chart`:l.push(s(c));break;case`timeline`:{let e=c.value;Array.isArray(e)&&(e={items:e.map(e=>({title:String(e.event??e.title??``),phase:e.date==null?e.phase==null?void 0:String(e.phase):String(e.date),description:e.description==null?void 0:String(e.description),status:e.status??`done`}))}),e&&l.push(o(e));break}case`checklist`:c.value&&l.push(t(c.value));break;case`comparison`:c.value&&l.push(n(c.value));break;case`status-board`:c.value&&l.push(a(c.value));break;case`prompt`:c.value&&l.push(i(c.value));break;case`progress`:c.value&&l.push(r(c.value));break;case`text`:l.push(`<div class="md-content">${f.parse(String(c.value??``))}</div>`);break;case`heading`:{let t=Math.min(Math.max(Number(c.level)||2,1),6);l.push(`<h${t}>${e(String(c.value??``))}</h${t}>`);break}case`paragraph`:l.push(`<p>${e(String(c.value??``))}</p>`);break;case`separator`:l.push(`<hr class="separator">`);break;case`actions`:{let t=(Array.isArray(c.value)?c.value:[]).map(t=>{if(t.type===`select`){let n=Array.isArray(t.options)?t.options.map(t=>`<option value="${e(String(t.value??t.label??``))}">${e(String(t.label??t.value??``))}</option>`).join(``):``;return`<select class="action-select"><option value="">${e(String(t.label??`Select...`))}</option>${n}</select>`}return`<button class="action-btn action-${String(t.variant??`secondary`)}">${e(String(t.label??``))}</button>`}).join(``);l.push(`<div class="action-bar">${t}</div>`);break}default:l.push(`<pre>${e(JSON.stringify(c.value,null,2))}</pre>`)}return l.join(`
3
- `)}function g(t){if(t.length===0)return`<p><em>empty table</em></p>`;let n=Object.keys(t[0]);return`<div class="table-wrap"><table><thead><tr>${n.map(t=>`<th>${e(t)}</th>`).join(``)}</tr></thead><tbody>${t.map(t=>`<tr>${n.map(n=>`<td>${e(String(t[n]??``))}</td>`).join(``)}</tr>`).join(`
4
- `)}</tbody></table></div>`}function _(t){return`<div class="metric-grid">${t.map(t=>`<div class="metric"><div class="metric-value">${e(String(t.value))}</div><div class="metric-label">${e(t.label)}</div></div>`).join(``)}</div>`}function v(t){return`<div class="card-grid">${t.map(t=>{let n=[`<div class="card">`];return t.title&&n.push(`<div class="card-title">${e(String(t.title))}</div>`),(t.body||t.description)&&n.push(`<div class="card-body">${e(String(t.body??t.description))}</div>`),(t.badge||t.status)&&n.push(`<span class="badge">${e(String(t.badge??t.status))}</span>`),n.push(`</div>`),n.join(``)}).join(``)}</div>`}function y(t){if(`name`in t&&`children`in t&&Array.isArray(t.children))return b(t);if(`name`in t&&!(`children`in t))return`<div class="tree-node"><span class="tree-key">${e(String(t.name))}</span></div>`;let n=[];for(let[r,i]of Object.entries(t))typeof i==`object`&&i&&!Array.isArray(i)?n.push(`<div class="tree-node"><span class="tree-key">${e(r)}:</span><div class="tree-children">${y(i)}</div></div>`):n.push(`<div class="tree-node"><span class="tree-key">${e(r)}:</span> ${e(c(i))}</div>`);return n.join(``)}function b(t){let n=e(String(t.name));return!t.children||t.children.length===0?`<div class="tree-node"><span class="tree-key">${n}</span></div>`:`<div class="tree-node"><span class="tree-key">${n}</span><div class="tree-children">${t.children.map(t=>typeof t==`object`&&t?b(t):`<div class="tree-node"><span class="tree-key">${e(String(t))}</span></div>`).join(``)}</div></div>`}function x(e){let t=[`graph LR`];for(let n of e.nodes){let e=d(String(n.id??n.name??``)),r=String(n.label??n.name??e);t.push(` ${e}["${r}"]`)}for(let n of e.edges){let e=d(String(n.source??n.from??``)),r=d(String(n.target??n.to??``)),i=n.label?`|${String(n.label)}|`:``;t.push(` ${e} -->${i} ${r}`)}return t.join(`
5
- `)}export{g as arrayToHtmlTable,v as cardsToHtml,m as contentToHtml,x as graphToMermaidRaw,_ as metricsToHtml,y as objectToHtmlTree,h as renderBlockAsHtml};
@@ -1,2 +0,0 @@
1
- import { registerPresentTool } from "./tool.js";
2
- export { registerPresentTool };
@@ -1 +0,0 @@
1
- import{registerPresentTool as e}from"./tool.js";export{e as registerPresentTool};
@@ -1,32 +0,0 @@
1
- import { TypedBlock } from "./helpers.js";
2
-
3
- //#region packages/server/src/tools/present/markdown.d.ts
4
- interface MarkdownOptions {
5
- compactTables?: boolean;
6
- }
7
- declare function buildMarkdown(title: string | undefined, content: unknown, options?: MarkdownOptions): string;
8
- declare function renderBlockAsMarkdown(block: TypedBlock, options?: MarkdownOptions): string;
9
- declare function arrayToMarkdownTable(rows: Record<string, unknown>[]): string;
10
- /**
11
- * Render an array-of-objects as a numbered list (safe for VS Code chat markdown).
12
- * Uses the first column value as the bold label, remaining columns as inline details.
13
- */
14
- declare function arrayToListTable(rows: Record<string, unknown>[], title?: string): string;
15
- /**
16
- * Render a comparison block as grouped bullet lists (safe for VS Code chat markdown).
17
- */
18
- declare function comparisonToList(columns: Array<{
19
- title: string;
20
- items?: string[];
21
- }>, title?: string): string;
22
- declare function metricsToMarkdown(metrics: Array<{
23
- label: string;
24
- value: string | number;
25
- }>): string;
26
- declare function graphToMermaid(data: {
27
- nodes: unknown[];
28
- edges: unknown[];
29
- }): string;
30
- declare function objectToMarkdownTree(obj: Record<string, unknown>, indent?: number): string;
31
- //#endregion
32
- export { MarkdownOptions, arrayToListTable, arrayToMarkdownTable, buildMarkdown, comparisonToList, graphToMermaid, metricsToMarkdown, objectToMarkdownTree, renderBlockAsMarkdown };
@@ -1,11 +0,0 @@
1
- import{formatValue as e,isTypedBlock as t,normalizeBlock as n,sanitizeId as r}from"./helpers.js";function i(e,r,i){let c=[];if(e&&c.push(`# ${e}\n`),typeof r==`string`)c.push(r);else if(Array.isArray(r))if(r.length===0)c.push(`*(empty)*`);else if(t(r[0]))for(let e of r)c.push(a(n(e),i));else if(typeof r[0]==`object`&&r[0]!==null)i?.compactTables?c.push(s(r)):c.push(o(r));else for(let e of r)c.push(`- ${String(e)}`);else if(typeof r==`object`&&r){let e=r;if(Array.isArray(e.blocks)&&e.blocks.length>0)for(let r of e.blocks)t(r)?c.push(a(n(r),i)):c.push(String(r));else Array.isArray(e.nodes)&&Array.isArray(e.edges)?c.push(u(e)):Array.isArray(e.metrics)?c.push(l(e.metrics)):c.push(d(e))}else c.push(String(r));return c.join(`
2
- `)}function a(e,t){let n=[];switch(e.title&&n.push(`## ${e.title}\n`),e.type){case`markdown`:n.push(String(e.value??``));break;case`code`:n.push(`\`\`\`${e.language??``}\n${String(e.value??``)}\n\`\`\``);break;case`mermaid`:n.push(`\`\`\`mermaid\n${String(e.value??``)}\n\`\`\``);break;case`table`:{let r=e.value;if(Array.isArray(r)&&r.length>0)t?.compactTables?n.push(s(r,e.title)):n.push(o(r));else if(r&&typeof r==`object`&&!Array.isArray(r)&&`headers`in r&&`rows`in r){let{headers:i,rows:a}=r;if(t?.compactTables){let t=[];e.title&&t.push(`**${e.title}**\n`);for(let e=0;e<a.length;e++){let n=i.map((t,n)=>`**${t}**: ${String(a[e]?.[n]??``)}`).join(` · `);t.push(`${e+1}. ${n}`)}n.push(t.join(`
3
- `))}else{n.push(`| ${i.join(` | `)} |`),n.push(`| ${i.map(()=>`---`).join(` | `)} |`);for(let e of a)n.push(`| ${e.map(e=>String(e??``)).join(` | `)} |`)}}else n.push(`*(empty table)*`);break}case`metrics`:Array.isArray(e.value)&&n.push(l(e.value));break;case`graph`:e.value&&typeof e.value==`object`&&n.push(u(e.value));break;case`cards`:if(Array.isArray(e.value))for(let t of e.value)n.push(`### ${t.title??`Card`}`),(t.body||t.description)&&n.push(String(t.body??t.description)),(t.badge||t.status)&&n.push(`> **${t.badge??t.status}**`),n.push(``);break;case`tree`:e.value&&typeof e.value==`object`&&n.push(d(e.value));break;case`chart`:{let t=e.value;t?.data&&Array.isArray(t.data)&&n.push(`*${String(t.chartType??`chart`)} chart — ${t.data.length} data points*`);break}case`timeline`:{let t=e.value;if(t?.items)for(let e of t.items){let t=e.status===`done`?`✅`:e.status===`active`?`🔄`:e.status===`error`?`❌`:`⬜`;n.push(`${t} **${e.title}**${e.description?` — ${e.description}`:``}`)}break}case`checklist`:{let t=e.value;if(t?.items)for(let e of t.items)n.push(`- [${e.checked?`x`:` `}] ${e.label}${e.note?` — ${e.note}`:``}`);break}case`comparison`:{let r=e.value;if(r?.columns&&r.columns.length>0)if(t?.compactTables)n.push(c(r.columns,e.title));else{let e=Math.max(...r.columns.map(e=>e.items?.length??0)),t=r.columns.map(e=>e.title);n.push(`| ${t.join(` | `)} |`),n.push(`| ${t.map(()=>`---`).join(` | `)} |`);for(let t=0;t<e;t++)n.push(`| ${r.columns.map(e=>e.items?.[t]??``).join(` | `)} |`)}break}case`status-board`:{let t=e.value;if(t?.items)for(let e of t.items){let t=e.status===`success`?`🟢`:e.status===`warning`?`🟡`:e.status===`error`?`🔴`:e.status===`info`?`🔵`:`⚪`;n.push(`${t} **${e.label}**${e.detail?` — ${e.detail}`:``}`)}break}case`prompt`:{let t=e.value;t?.question&&(n.push(`> **${t.question}**`),t.context&&n.push(`> ${t.context}`));break}case`progress`:{let t=e.value;if(t?.items)for(let e of t.items){let t=e.max??100,r=t>0?Math.round(e.value/t*100):0,i=Math.round(r/5),a=`█`.repeat(i)+`░`.repeat(20-i);n.push(`${e.label}: ${a} ${r}%`)}break}case`text`:n.push(String(e.value??``));break;case`heading`:{let t=Math.min(Math.max(Number(e.level)||2,1),6);n.push(`${`#`.repeat(t)} ${String(e.value??``)}\n`);break}case`paragraph`:n.push(String(e.value??``));break;case`separator`:n.push(`---
4
- `);break;default:n.push(JSON.stringify(e.value,null,2))}return n.push(``),n.join(`
5
- `)}function o(e){if(e.length===0)return`*(empty table)*`;let t=Object.keys(e[0]),n=[];n.push(`| ${t.join(` | `)} |`),n.push(`| ${t.map(()=>`---`).join(` | `)} |`);for(let r of e)n.push(`| ${t.map(e=>String(r[e]??``)).join(` | `)} |`);return n.join(`
6
- `)}function s(e,t){if(e.length===0)return`*(empty table)*`;let n=Object.keys(e[0]),r=[];t&&r.push(`**${t}**\n`);for(let t=0;t<e.length;t++){let i=e[t],a=String(i[n[0]]??``);if(n.length===1)r.push(`${t+1}. **${a}**`);else{let e=n.slice(1).map(e=>`${e}: ${String(i[e]??``)}`).join(` · `);r.push(`${t+1}. **${a}** — ${e}`)}}return r.join(`
7
- `)}function c(e,t){let n=[];t&&n.push(`**${t}**\n`);for(let t of e){if(n.push(`**${t.title}**`),t.items&&t.items.length>0)for(let e of t.items)n.push(`- ${e}`);else n.push(`- *(none)*`);n.push(``)}return n.join(`
8
- `)}function l(e){return e.map(e=>`- **${e.label}**: ${e.value}`).join(`
9
- `)}function u(e){let t=["```mermaid",`graph LR`];for(let n of e.nodes){let e=r(String(n.id??n.name??``)),i=String(n.label??n.name??e);t.push(` ${e}["${i}"]`)}for(let n of e.edges){let e=r(String(n.source??n.from??``)),i=r(String(n.target??n.to??``)),a=n.label?`|${String(n.label)}|`:``;t.push(` ${e} -->${a} ${i}`)}return t.push("```"),t.join(`
10
- `)}function d(t,n=0){let r=` `.repeat(n),i=[];for(let[a,o]of Object.entries(t))typeof o==`object`&&o&&!Array.isArray(o)?(i.push(`${r}- **${a}**:`),i.push(d(o,n+1))):i.push(`${r}- **${a}**: ${e(o)}`);return i.join(`
11
- `)}export{s as arrayToListTable,o as arrayToMarkdownTable,i as buildMarkdown,c as comparisonToList,u as graphToMermaid,l as metricsToMarkdown,d as objectToMarkdownTree,a as renderBlockAsMarkdown};
@@ -1,14 +0,0 @@
1
- //#region packages/server/src/tools/present/templates.d.ts
2
- declare function buildTemplateHtml(template: string, content: unknown): string;
3
- declare function buildListSortHtml(data: Record<string, unknown>): string;
4
- declare function buildDataTableHtml(data: Record<string, unknown>): string;
5
- declare function buildPickerHtml(data: Record<string, unknown>): string;
6
- declare function buildFlameGraphHtml(data: Record<string, unknown>): string;
7
- declare function buildFormHtml(data: Record<string, unknown>): string;
8
- declare function buildTimelineHtml(data: Record<string, unknown>): string;
9
- declare function buildKanbanHtml(data: Record<string, unknown>): string;
10
- declare function buildTreeHtml(data: Record<string, unknown>): string;
11
- declare function buildDiffViewHtml(data: Record<string, unknown>): string;
12
- declare function buildDashboardHtml(data: Record<string, unknown>): string;
13
- //#endregion
14
- export { buildDashboardHtml, buildDataTableHtml, buildDiffViewHtml, buildFlameGraphHtml, buildFormHtml, buildKanbanHtml, buildListSortHtml, buildPickerHtml, buildTemplateHtml, buildTimelineHtml, buildTreeHtml };