@mcp-graph-workflow/mcp-graph 5.5.2 → 5.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/dist/api/router.d.ts.map +1 -1
  2. package/dist/api/router.js +4 -0
  3. package/dist/api/router.js.map +1 -1
  4. package/dist/api/routes/journey.d.ts +4 -0
  5. package/dist/api/routes/journey.d.ts.map +1 -0
  6. package/dist/api/routes/journey.js +263 -0
  7. package/dist/api/routes/journey.js.map +1 -0
  8. package/dist/api/routes/siebel.d.ts +7 -0
  9. package/dist/api/routes/siebel.d.ts.map +1 -0
  10. package/dist/api/routes/siebel.js +305 -0
  11. package/dist/api/routes/siebel.js.map +1 -0
  12. package/dist/core/context/compact-context.d.ts.map +1 -1
  13. package/dist/core/context/compact-context.js +6 -28
  14. package/dist/core/context/compact-context.js.map +1 -1
  15. package/dist/core/context/rag-context.d.ts.map +1 -1
  16. package/dist/core/context/rag-context.js +34 -5
  17. package/dist/core/context/rag-context.js.map +1 -1
  18. package/dist/core/designer/traceability-matrix.js +1 -1
  19. package/dist/core/designer/traceability-matrix.js.map +1 -1
  20. package/dist/core/events/event-types.d.ts +63 -1
  21. package/dist/core/events/event-types.d.ts.map +1 -1
  22. package/dist/core/graph/mermaid-export.d.ts.map +1 -1
  23. package/dist/core/graph/mermaid-export.js +1 -5
  24. package/dist/core/graph/mermaid-export.js.map +1 -1
  25. package/dist/core/implementer/tdd-checker.d.ts +1 -1
  26. package/dist/core/implementer/tdd-checker.d.ts.map +1 -1
  27. package/dist/core/implementer/tdd-checker.js +2 -2
  28. package/dist/core/implementer/tdd-checker.js.map +1 -1
  29. package/dist/core/importer/prd-to-graph.d.ts.map +1 -1
  30. package/dist/core/importer/prd-to-graph.js +28 -2
  31. package/dist/core/importer/prd-to-graph.js.map +1 -1
  32. package/dist/core/integrations/integration-orchestrator.d.ts +12 -0
  33. package/dist/core/integrations/integration-orchestrator.d.ts.map +1 -1
  34. package/dist/core/integrations/integration-orchestrator.js +36 -2
  35. package/dist/core/integrations/integration-orchestrator.js.map +1 -1
  36. package/dist/core/journey/journey-store.d.ts +137 -0
  37. package/dist/core/journey/journey-store.d.ts.map +1 -0
  38. package/dist/core/journey/journey-store.js +210 -0
  39. package/dist/core/journey/journey-store.js.map +1 -0
  40. package/dist/core/listener/backlog-health.d.ts.map +1 -1
  41. package/dist/core/listener/backlog-health.js +10 -2
  42. package/dist/core/listener/backlog-health.js.map +1 -1
  43. package/dist/core/listener/feedback-readiness.d.ts.map +1 -1
  44. package/dist/core/listener/feedback-readiness.js +2 -5
  45. package/dist/core/listener/feedback-readiness.js.map +1 -1
  46. package/dist/core/parser/classify.d.ts +1 -0
  47. package/dist/core/parser/classify.d.ts.map +1 -1
  48. package/dist/core/parser/classify.js +13 -0
  49. package/dist/core/parser/classify.js.map +1 -1
  50. package/dist/core/parser/extract.d.ts.map +1 -1
  51. package/dist/core/parser/extract.js +8 -2
  52. package/dist/core/parser/extract.js.map +1 -1
  53. package/dist/core/parser/file-reader.d.ts.map +1 -1
  54. package/dist/core/parser/file-reader.js +16 -1
  55. package/dist/core/parser/file-reader.js.map +1 -1
  56. package/dist/core/parser/read-docx.d.ts +17 -0
  57. package/dist/core/parser/read-docx.d.ts.map +1 -0
  58. package/dist/core/parser/read-docx.js +79 -0
  59. package/dist/core/parser/read-docx.js.map +1 -0
  60. package/dist/core/parser/read-swagger.d.ts +49 -0
  61. package/dist/core/parser/read-swagger.d.ts.map +1 -0
  62. package/dist/core/parser/read-swagger.js +332 -0
  63. package/dist/core/parser/read-swagger.js.map +1 -0
  64. package/dist/core/planner/decompose.d.ts.map +1 -1
  65. package/dist/core/planner/decompose.js +5 -4
  66. package/dist/core/planner/decompose.js.map +1 -1
  67. package/dist/core/planner/dependency-chain.d.ts.map +1 -1
  68. package/dist/core/planner/dependency-chain.js +3 -0
  69. package/dist/core/planner/dependency-chain.js.map +1 -1
  70. package/dist/core/planner/lifecycle-phase.d.ts.map +1 -1
  71. package/dist/core/planner/lifecycle-phase.js +3 -5
  72. package/dist/core/planner/lifecycle-phase.js.map +1 -1
  73. package/dist/core/planner/next-task.d.ts.map +1 -1
  74. package/dist/core/planner/next-task.js +7 -6
  75. package/dist/core/planner/next-task.js.map +1 -1
  76. package/dist/core/rag/chunk-text.d.ts +5 -0
  77. package/dist/core/rag/chunk-text.d.ts.map +1 -1
  78. package/dist/core/rag/chunk-text.js +135 -0
  79. package/dist/core/rag/chunk-text.js.map +1 -1
  80. package/dist/core/rag/code-context-indexer.d.ts +27 -0
  81. package/dist/core/rag/code-context-indexer.d.ts.map +1 -0
  82. package/dist/core/rag/code-context-indexer.js +53 -0
  83. package/dist/core/rag/code-context-indexer.js.map +1 -0
  84. package/dist/core/rag/decision-indexer.d.ts +20 -0
  85. package/dist/core/rag/decision-indexer.d.ts.map +1 -0
  86. package/dist/core/rag/decision-indexer.js +32 -0
  87. package/dist/core/rag/decision-indexer.js.map +1 -0
  88. package/dist/core/rag/journey-indexer.d.ts +16 -0
  89. package/dist/core/rag/journey-indexer.d.ts.map +1 -0
  90. package/dist/core/rag/journey-indexer.js +182 -0
  91. package/dist/core/rag/journey-indexer.js.map +1 -0
  92. package/dist/core/rag/knowledge-feedback.d.ts +15 -0
  93. package/dist/core/rag/knowledge-feedback.d.ts.map +1 -0
  94. package/dist/core/rag/knowledge-feedback.js +46 -0
  95. package/dist/core/rag/knowledge-feedback.js.map +1 -0
  96. package/dist/core/rag/knowledge-linker.d.ts +20 -0
  97. package/dist/core/rag/knowledge-linker.d.ts.map +1 -0
  98. package/dist/core/rag/knowledge-linker.js +107 -0
  99. package/dist/core/rag/knowledge-linker.js.map +1 -0
  100. package/dist/core/rag/knowledge-quality.d.ts +31 -0
  101. package/dist/core/rag/knowledge-quality.d.ts.map +1 -0
  102. package/dist/core/rag/knowledge-quality.js +127 -0
  103. package/dist/core/rag/knowledge-quality.js.map +1 -0
  104. package/dist/core/rag/knowledge-synthesizer.d.ts +17 -0
  105. package/dist/core/rag/knowledge-synthesizer.d.ts.map +1 -0
  106. package/dist/core/rag/knowledge-synthesizer.js +115 -0
  107. package/dist/core/rag/knowledge-synthesizer.js.map +1 -0
  108. package/dist/core/rag/memory-rag-query.d.ts +3 -3
  109. package/dist/core/rag/memory-rag-query.d.ts.map +1 -1
  110. package/dist/core/rag/memory-rag-query.js +18 -0
  111. package/dist/core/rag/memory-rag-query.js.map +1 -1
  112. package/dist/core/rag/multi-strategy-retrieval.d.ts +46 -0
  113. package/dist/core/rag/multi-strategy-retrieval.d.ts.map +1 -0
  114. package/dist/core/rag/multi-strategy-retrieval.js +140 -0
  115. package/dist/core/rag/multi-strategy-retrieval.js.map +1 -0
  116. package/dist/core/rag/rag-pipeline.d.ts +11 -0
  117. package/dist/core/rag/rag-pipeline.d.ts.map +1 -1
  118. package/dist/core/rag/rag-pipeline.js +39 -0
  119. package/dist/core/rag/rag-pipeline.js.map +1 -1
  120. package/dist/core/rag/siebel-indexer.d.ts +16 -0
  121. package/dist/core/rag/siebel-indexer.d.ts.map +1 -0
  122. package/dist/core/rag/siebel-indexer.js +75 -0
  123. package/dist/core/rag/siebel-indexer.js.map +1 -0
  124. package/dist/core/rag/swagger-indexer.d.ts +16 -0
  125. package/dist/core/rag/swagger-indexer.d.ts.map +1 -0
  126. package/dist/core/rag/swagger-indexer.js +119 -0
  127. package/dist/core/rag/swagger-indexer.js.map +1 -0
  128. package/dist/core/rag/validation-indexer.d.ts +23 -0
  129. package/dist/core/rag/validation-indexer.d.ts.map +1 -0
  130. package/dist/core/rag/validation-indexer.js +35 -0
  131. package/dist/core/rag/validation-indexer.js.map +1 -0
  132. package/dist/core/siebel/composer-automation.d.ts +77 -0
  133. package/dist/core/siebel/composer-automation.d.ts.map +1 -0
  134. package/dist/core/siebel/composer-automation.js +110 -0
  135. package/dist/core/siebel/composer-automation.js.map +1 -0
  136. package/dist/core/siebel/dependency-analyzer.d.ts +24 -0
  137. package/dist/core/siebel/dependency-analyzer.d.ts.map +1 -0
  138. package/dist/core/siebel/dependency-analyzer.js +174 -0
  139. package/dist/core/siebel/dependency-analyzer.js.map +1 -0
  140. package/dist/core/siebel/siebel-config.d.ts +28 -0
  141. package/dist/core/siebel/siebel-config.d.ts.map +1 -0
  142. package/dist/core/siebel/siebel-config.js +86 -0
  143. package/dist/core/siebel/siebel-config.js.map +1 -0
  144. package/dist/core/siebel/sif-context-assembler.d.ts +37 -0
  145. package/dist/core/siebel/sif-context-assembler.d.ts.map +1 -0
  146. package/dist/core/siebel/sif-context-assembler.js +259 -0
  147. package/dist/core/siebel/sif-context-assembler.js.map +1 -0
  148. package/dist/core/siebel/sif-generator.d.ts +26 -0
  149. package/dist/core/siebel/sif-generator.d.ts.map +1 -0
  150. package/dist/core/siebel/sif-generator.js +232 -0
  151. package/dist/core/siebel/sif-generator.js.map +1 -0
  152. package/dist/core/siebel/sif-parser.d.ts +16 -0
  153. package/dist/core/siebel/sif-parser.d.ts.map +1 -0
  154. package/dist/core/siebel/sif-parser.js +355 -0
  155. package/dist/core/siebel/sif-parser.js.map +1 -0
  156. package/dist/core/siebel/sif-templates.d.ts +45 -0
  157. package/dist/core/siebel/sif-templates.d.ts.map +1 -0
  158. package/dist/core/siebel/sif-templates.js +179 -0
  159. package/dist/core/siebel/sif-templates.js.map +1 -0
  160. package/dist/core/siebel/sif-to-graph.d.ts +20 -0
  161. package/dist/core/siebel/sif-to-graph.d.ts.map +1 -0
  162. package/dist/core/siebel/sif-to-graph.js +176 -0
  163. package/dist/core/siebel/sif-to-graph.js.map +1 -0
  164. package/dist/core/store/knowledge-store.d.ts +25 -0
  165. package/dist/core/store/knowledge-store.d.ts.map +1 -1
  166. package/dist/core/store/knowledge-store.js +73 -1
  167. package/dist/core/store/knowledge-store.js.map +1 -1
  168. package/dist/core/store/migrations.d.ts.map +1 -1
  169. package/dist/core/store/migrations.js +107 -0
  170. package/dist/core/store/migrations.js.map +1 -1
  171. package/dist/core/store/sqlite-store.d.ts.map +1 -1
  172. package/dist/core/store/sqlite-store.js +11 -7
  173. package/dist/core/store/sqlite-store.js.map +1 -1
  174. package/dist/core/utils/blocked-helpers.d.ts +14 -0
  175. package/dist/core/utils/blocked-helpers.d.ts.map +1 -0
  176. package/dist/core/utils/blocked-helpers.js +19 -0
  177. package/dist/core/utils/blocked-helpers.js.map +1 -0
  178. package/dist/core/utils/text.d.ts +9 -0
  179. package/dist/core/utils/text.d.ts.map +1 -0
  180. package/dist/core/utils/text.js +13 -0
  181. package/dist/core/utils/text.js.map +1 -0
  182. package/dist/mcp/lifecycle-wrapper.d.ts.map +1 -1
  183. package/dist/mcp/lifecycle-wrapper.js +1 -0
  184. package/dist/mcp/lifecycle-wrapper.js.map +1 -1
  185. package/dist/mcp/tools/index.d.ts.map +1 -1
  186. package/dist/mcp/tools/index.js +26 -0
  187. package/dist/mcp/tools/index.js.map +1 -1
  188. package/dist/mcp/tools/journey.d.ts +4 -0
  189. package/dist/mcp/tools/journey.d.ts.map +1 -0
  190. package/dist/mcp/tools/journey.js +154 -0
  191. package/dist/mcp/tools/journey.js.map +1 -0
  192. package/dist/mcp/tools/knowledge-feedback.d.ts +8 -0
  193. package/dist/mcp/tools/knowledge-feedback.d.ts.map +1 -0
  194. package/dist/mcp/tools/knowledge-feedback.js +35 -0
  195. package/dist/mcp/tools/knowledge-feedback.js.map +1 -0
  196. package/dist/mcp/tools/knowledge-stats.d.ts +9 -0
  197. package/dist/mcp/tools/knowledge-stats.d.ts.map +1 -0
  198. package/dist/mcp/tools/knowledge-stats.js +83 -0
  199. package/dist/mcp/tools/knowledge-stats.js.map +1 -0
  200. package/dist/mcp/tools/plan-sprint.d.ts.map +1 -1
  201. package/dist/mcp/tools/plan-sprint.js +7 -1
  202. package/dist/mcp/tools/plan-sprint.js.map +1 -1
  203. package/dist/mcp/tools/rag-context.d.ts.map +1 -1
  204. package/dist/mcp/tools/rag-context.js +43 -2
  205. package/dist/mcp/tools/rag-context.js.map +1 -1
  206. package/dist/mcp/tools/reindex-knowledge.d.ts.map +1 -1
  207. package/dist/mcp/tools/reindex-knowledge.js +23 -2
  208. package/dist/mcp/tools/reindex-knowledge.js.map +1 -1
  209. package/dist/mcp/tools/siebel-analyze.d.ts +8 -0
  210. package/dist/mcp/tools/siebel-analyze.d.ts.map +1 -0
  211. package/dist/mcp/tools/siebel-analyze.js +107 -0
  212. package/dist/mcp/tools/siebel-analyze.js.map +1 -0
  213. package/dist/mcp/tools/siebel-composer.d.ts +12 -0
  214. package/dist/mcp/tools/siebel-composer.d.ts.map +1 -0
  215. package/dist/mcp/tools/siebel-composer.js +59 -0
  216. package/dist/mcp/tools/siebel-composer.js.map +1 -0
  217. package/dist/mcp/tools/siebel-env.d.ts +8 -0
  218. package/dist/mcp/tools/siebel-env.d.ts.map +1 -0
  219. package/dist/mcp/tools/siebel-env.js +60 -0
  220. package/dist/mcp/tools/siebel-env.js.map +1 -0
  221. package/dist/mcp/tools/siebel-generate-sif.d.ts +8 -0
  222. package/dist/mcp/tools/siebel-generate-sif.d.ts.map +1 -0
  223. package/dist/mcp/tools/siebel-generate-sif.js +91 -0
  224. package/dist/mcp/tools/siebel-generate-sif.js.map +1 -0
  225. package/dist/mcp/tools/siebel-import-docs.d.ts +9 -0
  226. package/dist/mcp/tools/siebel-import-docs.d.ts.map +1 -0
  227. package/dist/mcp/tools/siebel-import-docs.js +106 -0
  228. package/dist/mcp/tools/siebel-import-docs.js.map +1 -0
  229. package/dist/mcp/tools/siebel-import-sif.d.ts +8 -0
  230. package/dist/mcp/tools/siebel-import-sif.d.ts.map +1 -0
  231. package/dist/mcp/tools/siebel-import-sif.js +68 -0
  232. package/dist/mcp/tools/siebel-import-sif.js.map +1 -0
  233. package/dist/mcp/tools/siebel-search.d.ts +8 -0
  234. package/dist/mcp/tools/siebel-search.d.ts.map +1 -0
  235. package/dist/mcp/tools/siebel-search.js +47 -0
  236. package/dist/mcp/tools/siebel-search.js.map +1 -0
  237. package/dist/mcp/tools/siebel-validate.d.ts +8 -0
  238. package/dist/mcp/tools/siebel-validate.d.ts.map +1 -0
  239. package/dist/mcp/tools/siebel-validate.js +107 -0
  240. package/dist/mcp/tools/siebel-validate.js.map +1 -0
  241. package/dist/mcp/tools/update-status.d.ts.map +1 -1
  242. package/dist/mcp/tools/update-status.js +34 -9
  243. package/dist/mcp/tools/update-status.js.map +1 -1
  244. package/dist/mcp/tools/validate.d.ts.map +1 -1
  245. package/dist/mcp/tools/validate.js +21 -0
  246. package/dist/mcp/tools/validate.js.map +1 -1
  247. package/dist/schemas/designer-schema.d.ts +3 -3
  248. package/dist/schemas/knowledge.schema.d.ts +66 -0
  249. package/dist/schemas/knowledge.schema.d.ts.map +1 -1
  250. package/dist/schemas/knowledge.schema.js +28 -0
  251. package/dist/schemas/knowledge.schema.js.map +1 -1
  252. package/dist/schemas/listener-schema.d.ts +9 -0
  253. package/dist/schemas/listener-schema.d.ts.map +1 -1
  254. package/dist/schemas/listener-schema.js +5 -0
  255. package/dist/schemas/listener-schema.js.map +1 -1
  256. package/dist/schemas/siebel.schema.d.ts +564 -0
  257. package/dist/schemas/siebel.schema.d.ts.map +1 -0
  258. package/dist/schemas/siebel.schema.js +197 -0
  259. package/dist/schemas/siebel.schema.js.map +1 -0
  260. package/dist/web/dashboard/dist/assets/{benchmark-tab-C5fwIqgM.js → benchmark-tab-WCcv55oB.js} +1 -1
  261. package/dist/web/dashboard/dist/assets/{context-tab-ChCyrRlr.js → context-tab-CYnMjkHN.js} +1 -1
  262. package/dist/web/dashboard/dist/assets/{gitnexus-tab-DnlGT63w.js → gitnexus-tab-Dj0DERUy.js} +1 -1
  263. package/dist/web/dashboard/dist/assets/graph-tab-tI93ZxxW.js +1 -0
  264. package/dist/web/dashboard/dist/assets/graph-utils-DeQEwmsr.js +1 -0
  265. package/dist/web/dashboard/dist/assets/index-B1PLsGu1.js +55 -0
  266. package/dist/web/dashboard/dist/assets/index-DKvjo_C5.css +1 -0
  267. package/dist/web/dashboard/dist/assets/{index-DlZhNCGR.js → index-NmopQGmQ.js} +1 -1
  268. package/dist/web/dashboard/dist/assets/{insights-tab-Cj4f85vS.js → insights-tab-X7u4J-xv.js} +1 -1
  269. package/dist/web/dashboard/dist/assets/journey-tab-Cpz6_3mB.js +1 -0
  270. package/dist/web/dashboard/dist/assets/{logs-tab-C4C2Vn8-.js → logs-tab-QB__4Xdl.js} +1 -1
  271. package/dist/web/dashboard/dist/assets/{memories-tab-NtNwoxbT.js → memories-tab-Dry9wz7q.js} +1 -1
  272. package/dist/web/dashboard/dist/assets/prd-backlog-tab-OXTksZKv.js +1 -0
  273. package/dist/web/dashboard/dist/assets/siebel-tab-x7OCuCmb.js +3 -0
  274. package/dist/web/dashboard/dist/assets/{skills-tab-CIj4z1Ol.js → skills-tab-DeUEKmpZ.js} +1 -1
  275. package/dist/web/dashboard/dist/assets/style-C-e8BTyP.js +7 -0
  276. package/dist/web/dashboard/dist/index.html +2 -2
  277. package/package.json +3 -1
  278. package/dist/web/dashboard/dist/assets/graph-tab-DjV9RD41.js +0 -1
  279. package/dist/web/dashboard/dist/assets/graph-utils-C6bvcT4d.js +0 -7
  280. package/dist/web/dashboard/dist/assets/index-DQqYFXms.css +0 -1
  281. package/dist/web/dashboard/dist/assets/index-dCyMex_p.js +0 -53
  282. package/dist/web/dashboard/dist/assets/prd-backlog-tab-Bxt7qiVG.js +0 -1
  283. /package/dist/web/dashboard/dist/assets/{graph-utils-BZV40eAE.css → style-BZV40eAE.css} +0 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * MCP Tool: siebel_generate_sif
3
+ * Two-phase SIF generation: prepare context + finalize generated XML.
4
+ */
5
+ import { z } from "zod/v4";
6
+ import { KnowledgeStore } from "../../core/store/knowledge-store.js";
7
+ import { prepareSifGeneration, finalizeSifGeneration } from "../../core/siebel/sif-generator.js";
8
+ import { listTemplates } from "../../core/siebel/sif-templates.js";
9
+ import { SiebelObjectTypeSchema } from "../../schemas/siebel.schema.js";
10
+ import { logger } from "../../core/utils/logger.js";
11
+ import { mcpText, mcpError, normalizeNewlines } from "../response-helpers.js";
12
+ export function registerSiebelGenerateSif(server, store) {
13
+ server.tool("siebel_generate_sif", "Generate Siebel SIF files using RAG context. Two-phase: action=prepare returns context+prompt for the LLM; action=finalize validates the LLM-generated XML and indexes it.", {
14
+ action: z.enum(["prepare", "finalize", "templates"]).describe("Phase: prepare (get context+prompt), finalize (validate XML), templates (list available templates)"),
15
+ // prepare params
16
+ description: z.string().optional().describe("What to generate (for prepare)"),
17
+ objectTypes: z.array(SiebelObjectTypeSchema).optional().describe("Siebel object types to generate"),
18
+ basedOnProject: z.string().optional().describe("Base project name for context"),
19
+ properties: z.record(z.string(), z.string()).optional().describe("Default properties for generated objects"),
20
+ // finalize params
21
+ generatedXml: z.string().optional().describe("LLM-generated SIF XML content (for finalize)"),
22
+ }, async ({ action, description, objectTypes, basedOnProject, properties, generatedXml }) => {
23
+ logger.info("tool:siebel_generate_sif", { action });
24
+ try {
25
+ if (action === "templates") {
26
+ const templates = listTemplates();
27
+ return mcpText({
28
+ ok: true,
29
+ templates: templates.map((t) => ({
30
+ type: t.type,
31
+ xmlTag: t.xmlTag,
32
+ requiredAttrs: t.requiredAttrs,
33
+ optionalAttrs: t.optionalAttrs,
34
+ childTags: t.childTags,
35
+ })),
36
+ });
37
+ }
38
+ const knowledgeStore = new KnowledgeStore(store.getDb());
39
+ if (action === "prepare") {
40
+ if (!description) {
41
+ return mcpError("description is required for prepare action");
42
+ }
43
+ if (!objectTypes || objectTypes.length === 0) {
44
+ return mcpError("objectTypes is required for prepare action");
45
+ }
46
+ const context = prepareSifGeneration(knowledgeStore, {
47
+ description,
48
+ objectTypes,
49
+ basedOnProject,
50
+ properties,
51
+ });
52
+ return mcpText({
53
+ ok: true,
54
+ action: "prepare",
55
+ prompt: context.prompt,
56
+ templates: context.templates.map((t) => t.type),
57
+ existingObjectsCount: context.existingObjects.length,
58
+ relatedDocsCount: context.relatedDocs.length,
59
+ validationRules: context.validationRules,
60
+ });
61
+ }
62
+ if (action === "finalize") {
63
+ if (!generatedXml) {
64
+ return mcpError("generatedXml is required for finalize action");
65
+ }
66
+ const normalized = normalizeNewlines(generatedXml) ?? generatedXml;
67
+ const result = finalizeSifGeneration(knowledgeStore, normalized, {
68
+ description: description ?? "SIF generation",
69
+ objectTypes: objectTypes ?? [],
70
+ });
71
+ return mcpText({
72
+ ok: true,
73
+ action: "finalize",
74
+ sifContent: result.sifContent,
75
+ objectCount: result.metadata.objectCount,
76
+ objects: result.objects,
77
+ validation: result.validation,
78
+ metadata: result.metadata,
79
+ });
80
+ }
81
+ return mcpError(`Unknown action: ${action}`);
82
+ }
83
+ catch (err) {
84
+ logger.error("tool:siebel_generate_sif failed", {
85
+ error: err instanceof Error ? err.message : String(err),
86
+ });
87
+ return mcpError(err instanceof Error ? err : String(err));
88
+ }
89
+ });
90
+ }
91
+ //# sourceMappingURL=siebel-generate-sif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-generate-sif.js","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-generate-sif.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Tool: siebel_import_docs
3
+ * Imports documentation (Swagger/WSDL, PDF, HTML, DOC/DOCX, Markdown)
4
+ * and indexes into knowledge store for RAG context during SIF generation.
5
+ */
6
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ import type { SqliteStore } from "../../core/store/sqlite-store.js";
8
+ export declare function registerSiebelImportDocs(server: McpServer, store: SqliteStore): void;
9
+ //# sourceMappingURL=siebel-import-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-import-docs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-import-docs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAUpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAmGpF"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * MCP Tool: siebel_import_docs
3
+ * Imports documentation (Swagger/WSDL, PDF, HTML, DOC/DOCX, Markdown)
4
+ * and indexes into knowledge store for RAG context during SIF generation.
5
+ */
6
+ import { z } from "zod/v4";
7
+ import { parseSwaggerContent, parseWsdlContent } from "../../core/parser/read-swagger.js";
8
+ import { indexSwaggerContent } from "../../core/rag/swagger-indexer.js";
9
+ import { readFileContent } from "../../core/parser/file-reader.js";
10
+ import { KnowledgeStore } from "../../core/store/knowledge-store.js";
11
+ import { chunkText } from "../../core/rag/chunk-text.js";
12
+ import { logger } from "../../core/utils/logger.js";
13
+ import { mcpText, mcpError, normalizeNewlines } from "../response-helpers.js";
14
+ import { readFile } from "node:fs/promises";
15
+ export function registerSiebelImportDocs(server, store) {
16
+ server.tool("siebel_import_docs", "Import documentation (Swagger/WSDL, PDF, HTML, DOC/DOCX, Markdown) into knowledge store for Siebel SIF generation context. Supports file path or inline content.", {
17
+ filePath: z.string().optional().describe("Path to the documentation file on disk"),
18
+ content: z.string().optional().describe("Raw documentation content (alternative to filePath)"),
19
+ fileName: z.string().optional().default("inline-doc").describe("File name (used for source tracking)"),
20
+ docType: z.enum(["swagger", "wsdl", "pdf", "html", "doc", "docx", "markdown"])
21
+ .describe("Document type to determine parsing strategy"),
22
+ }, async ({ filePath, content, fileName, docType }) => {
23
+ logger.info("tool:siebel_import_docs", { filePath, fileName, docType });
24
+ try {
25
+ const knowledgeStore = new KnowledgeStore(store.getDb());
26
+ let documentsIndexed = 0;
27
+ if (docType === "swagger" || docType === "wsdl") {
28
+ // Swagger/WSDL: parse and index with specialized indexer
29
+ const rawContent = content ?? (filePath ? await readFileToString(filePath) : undefined);
30
+ if (!rawContent) {
31
+ return mcpError("Either filePath or content is required");
32
+ }
33
+ const normalized = normalizeNewlines(rawContent) ?? rawContent;
34
+ const parseResult = docType === "wsdl"
35
+ ? parseWsdlContent(normalized)
36
+ : parseSwaggerContent(normalized);
37
+ const indexResult = indexSwaggerContent(knowledgeStore, parseResult, fileName);
38
+ documentsIndexed = indexResult.documentsIndexed;
39
+ return mcpText({
40
+ ok: true,
41
+ docType,
42
+ fileName,
43
+ title: parseResult.title,
44
+ version: parseResult.version,
45
+ format: parseResult.format,
46
+ endpointsFound: parseResult.endpoints.length,
47
+ schemasFound: parseResult.schemas.length,
48
+ documentsIndexed,
49
+ });
50
+ }
51
+ // General docs: PDF, HTML, DOC/DOCX, Markdown
52
+ let textContent;
53
+ if (filePath) {
54
+ const fileResult = await readFileContent(filePath, fileName);
55
+ textContent = fileResult.text;
56
+ }
57
+ else if (content) {
58
+ textContent = normalizeNewlines(content) ?? content;
59
+ }
60
+ else {
61
+ return mcpError("Either filePath or content is required");
62
+ }
63
+ // Chunk and index into knowledge store
64
+ const sourceId = `siebel_docs:${fileName}`;
65
+ knowledgeStore.deleteBySource("siebel_docs", sourceId);
66
+ const chunks = chunkText(textContent);
67
+ const chunkDocs = chunks.map((chunk, index) => ({
68
+ sourceType: "siebel_docs",
69
+ sourceId,
70
+ title: `Siebel Doc: ${fileName} [${index + 1}/${chunks.length}]`,
71
+ content: chunk.content,
72
+ chunkIndex: index,
73
+ metadata: {
74
+ docType,
75
+ fileName,
76
+ chunkTokens: chunk.tokens,
77
+ indexedAt: new Date().toISOString(),
78
+ },
79
+ }));
80
+ const docs = knowledgeStore.insertChunks(chunkDocs);
81
+ documentsIndexed = docs.length;
82
+ logger.info("Documentation indexed", {
83
+ fileName,
84
+ docType,
85
+ chunks: String(chunks.length),
86
+ documents: String(documentsIndexed),
87
+ });
88
+ return mcpText({
89
+ ok: true,
90
+ docType,
91
+ fileName,
92
+ textLength: textContent.length,
93
+ chunksCreated: chunks.length,
94
+ documentsIndexed,
95
+ });
96
+ }
97
+ catch (err) {
98
+ return mcpError(err instanceof Error ? err : String(err));
99
+ }
100
+ });
101
+ }
102
+ async function readFileToString(filePath) {
103
+ const buffer = await readFile(filePath, "utf-8");
104
+ return buffer;
105
+ }
106
+ //# sourceMappingURL=siebel-import-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-import-docs.js","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-import-docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tool: siebel_import_sif
3
+ * Imports a Siebel .SIF file, parses it, optionally maps to graph nodes, and indexes into knowledge store.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import type { SqliteStore } from "../../core/store/sqlite-store.js";
7
+ export declare function registerSiebelImportSif(server: McpServer, store: SqliteStore): void;
8
+ //# sourceMappingURL=siebel-import-sif.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-import-sif.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-import-sif.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAQpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA8DnF"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * MCP Tool: siebel_import_sif
3
+ * Imports a Siebel .SIF file, parses it, optionally maps to graph nodes, and indexes into knowledge store.
4
+ */
5
+ import { z } from "zod/v4";
6
+ import { parseSifFile, parseSifContent } from "../../core/siebel/sif-parser.js";
7
+ import { convertSifToGraph } from "../../core/siebel/sif-to-graph.js";
8
+ import { KnowledgeStore } from "../../core/store/knowledge-store.js";
9
+ import { indexSifContent } from "../../core/rag/siebel-indexer.js";
10
+ import { logger } from "../../core/utils/logger.js";
11
+ import { mcpText, mcpError, normalizeNewlines } from "../response-helpers.js";
12
+ export function registerSiebelImportSif(server, store) {
13
+ server.tool("siebel_import_sif", "Import a Siebel .SIF file. Parses XML, extracts objects and dependencies, optionally maps to graph nodes, and indexes into knowledge store for RAG retrieval.", {
14
+ filePath: z.string().optional().describe("Path to the .sif file on disk"),
15
+ content: z.string().optional().describe("Raw SIF XML content (alternative to filePath)"),
16
+ fileName: z.string().optional().default("inline.sif").describe("File name for content mode"),
17
+ mapToGraph: z.boolean().optional().default(true).describe("Convert Siebel objects to graph nodes and edges"),
18
+ }, async ({ filePath, content, fileName, mapToGraph }) => {
19
+ logger.info("tool:siebel_import_sif", { filePath, fileName, mapToGraph });
20
+ try {
21
+ // Parse SIF
22
+ let parseResult;
23
+ if (filePath) {
24
+ parseResult = await parseSifFile(filePath);
25
+ }
26
+ else if (content) {
27
+ const normalizedContent = normalizeNewlines(content) ?? content;
28
+ parseResult = parseSifContent(normalizedContent, fileName);
29
+ }
30
+ else {
31
+ return mcpError("Either filePath or content is required");
32
+ }
33
+ const result = {
34
+ ok: true,
35
+ metadata: parseResult.metadata,
36
+ objectCount: parseResult.objects.length,
37
+ dependencyCount: parseResult.dependencies.length,
38
+ objectTypes: parseResult.metadata.objectTypes,
39
+ };
40
+ // Map to graph nodes
41
+ if (mapToGraph) {
42
+ const { nodes, edges } = convertSifToGraph(parseResult);
43
+ store.bulkInsert(nodes, edges);
44
+ result.nodesCreated = nodes.length;
45
+ result.edgesCreated = edges.length;
46
+ result.epicId = nodes.find((n) => n.type === "epic")?.id;
47
+ }
48
+ // Index into knowledge store
49
+ try {
50
+ const knowledgeStore = new KnowledgeStore(store.getDb());
51
+ const indexResult = indexSifContent(knowledgeStore, parseResult);
52
+ result.documentsIndexed = indexResult.documentsIndexed;
53
+ }
54
+ catch (indexErr) {
55
+ logger.warn("Siebel knowledge indexing failed (non-fatal)", {
56
+ error: String(indexErr),
57
+ });
58
+ }
59
+ // Record import
60
+ store.recordImport(parseResult.metadata.fileName, parseResult.objects.length, parseResult.dependencies.length);
61
+ return mcpText(result);
62
+ }
63
+ catch (err) {
64
+ return mcpError(err instanceof Error ? err : String(err));
65
+ }
66
+ });
67
+ }
68
+ //# sourceMappingURL=siebel-import-sif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-import-sif.js","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-import-sif.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tool: siebel_search
3
+ * Search indexed Siebel objects in the knowledge store.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import type { SqliteStore } from "../../core/store/sqlite-store.js";
7
+ export declare function registerSiebelSearch(server: McpServer, store: SqliteStore): void;
8
+ //# sourceMappingURL=siebel-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-search.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAMpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAiDhF"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * MCP Tool: siebel_search
3
+ * Search indexed Siebel objects in the knowledge store.
4
+ */
5
+ import { z } from "zod/v4";
6
+ import { KnowledgeStore } from "../../core/store/knowledge-store.js";
7
+ import { SiebelObjectTypeSchema } from "../../schemas/siebel.schema.js";
8
+ import { logger } from "../../core/utils/logger.js";
9
+ import { mcpText, mcpError } from "../response-helpers.js";
10
+ export function registerSiebelSearch(server, store) {
11
+ server.tool("siebel_search", "Search indexed Siebel objects in the knowledge store. Find Business Components, Applets, Views, Workflows, etc. by name or content.", {
12
+ query: z.string().min(1).describe("Search query (e.g., 'Account', 'Workflow', 'BUS_COMP')"),
13
+ objectType: SiebelObjectTypeSchema.optional().describe("Filter by Siebel object type"),
14
+ limit: z.number().int().min(1).max(50).optional().default(10).describe("Maximum results"),
15
+ }, async ({ query, objectType, limit }) => {
16
+ logger.info("tool:siebel_search", { query, objectType, limit });
17
+ try {
18
+ const knowledgeStore = new KnowledgeStore(store.getDb());
19
+ const allResults = knowledgeStore.search(query, limit * 3); // over-fetch for filtering
20
+ // Filter to Siebel sources
21
+ let siebelResults = allResults.filter((d) => d.sourceType === "siebel_sif" || d.sourceType === "siebel_composer");
22
+ // Optional type filter
23
+ if (objectType) {
24
+ siebelResults = siebelResults.filter((d) => d.metadata?.siebelType === objectType);
25
+ }
26
+ // Apply limit
27
+ siebelResults = siebelResults.slice(0, limit);
28
+ return mcpText({
29
+ ok: true,
30
+ query,
31
+ objectType: objectType ?? "all",
32
+ resultCount: siebelResults.length,
33
+ results: siebelResults.map((d) => ({
34
+ title: d.title,
35
+ sourceType: d.sourceType,
36
+ siebelType: d.metadata?.siebelType,
37
+ siebelProject: d.metadata?.siebelProject,
38
+ content: d.content.slice(0, 200) + (d.content.length > 200 ? "..." : ""),
39
+ })),
40
+ });
41
+ }
42
+ catch (err) {
43
+ return mcpError(err instanceof Error ? err : String(err));
44
+ }
45
+ });
46
+ }
47
+ //# sourceMappingURL=siebel-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-search.js","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tool: siebel_validate
3
+ * Validate Siebel .SIF file integrity, dependencies, and version compatibility.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import type { SqliteStore } from "../../core/store/sqlite-store.js";
7
+ export declare function registerSiebelValidate(server: McpServer, _store: SqliteStore): void;
8
+ //# sourceMappingURL=siebel-validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-validate.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAmGnF"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * MCP Tool: siebel_validate
3
+ * Validate Siebel .SIF file integrity, dependencies, and version compatibility.
4
+ */
5
+ import { z } from "zod/v4";
6
+ import { parseSifFile, parseSifContent } from "../../core/siebel/sif-parser.js";
7
+ import { detectCircularDeps } from "../../core/siebel/dependency-analyzer.js";
8
+ import { logger } from "../../core/utils/logger.js";
9
+ import { mcpText, mcpError, normalizeNewlines } from "../response-helpers.js";
10
+ export function registerSiebelValidate(server, _store) {
11
+ server.tool("siebel_validate", "Validate a Siebel .SIF file for integrity, missing dependencies, circular references, and best practices.", {
12
+ filePath: z.string().optional().describe("Path to the .sif file"),
13
+ content: z.string().optional().describe("Raw SIF XML content"),
14
+ fileName: z.string().optional().default("validate.sif").describe("File name for content mode"),
15
+ checkDeps: z.boolean().optional().default(true).describe("Check for missing dependencies"),
16
+ checkCircular: z.boolean().optional().default(true).describe("Check for circular dependencies"),
17
+ }, async ({ filePath, content, fileName, checkDeps, checkCircular }) => {
18
+ logger.info("tool:siebel_validate", { filePath, fileName });
19
+ try {
20
+ let parseResult;
21
+ if (filePath) {
22
+ parseResult = await parseSifFile(filePath);
23
+ }
24
+ else if (content) {
25
+ const normalized = normalizeNewlines(content) ?? content;
26
+ parseResult = parseSifContent(normalized, fileName);
27
+ }
28
+ else {
29
+ return mcpError("Either filePath or content is required");
30
+ }
31
+ const errors = [];
32
+ const warnings = [];
33
+ const info = [];
34
+ // Basic structure validation
35
+ info.push(`Parsed ${parseResult.objects.length} objects, ${parseResult.dependencies.length} dependencies`);
36
+ // Check for objects without names
37
+ const unnamed = parseResult.objects.filter((o) => !o.name || o.name.trim() === "");
38
+ if (unnamed.length > 0) {
39
+ errors.push(`${unnamed.length} objects found without names`);
40
+ }
41
+ // Check for inactive objects
42
+ const inactive = parseResult.objects.filter((o) => o.inactive);
43
+ if (inactive.length > 0) {
44
+ warnings.push(`${inactive.length} inactive objects: ${inactive.map((o) => o.name).join(", ")}`);
45
+ }
46
+ // Check dependencies
47
+ if (checkDeps) {
48
+ const objectIndex = new Set(parseResult.objects.map((o) => `${o.type}:${o.name}`));
49
+ const missingDeps = parseResult.dependencies.filter((d) => !objectIndex.has(`${d.to.type}:${d.to.name}`));
50
+ if (missingDeps.length > 0) {
51
+ for (const dep of missingDeps) {
52
+ warnings.push(`Missing dependency: ${dep.from.name} → ${dep.to.type}:${dep.to.name}`);
53
+ }
54
+ }
55
+ // Check for BCs without tables
56
+ const bcsWithoutTable = parseResult.objects
57
+ .filter((o) => o.type === "business_component")
58
+ .filter((o) => !o.properties.some((p) => p.name === "TABLE"));
59
+ if (bcsWithoutTable.length > 0) {
60
+ warnings.push(`BCs without TABLE: ${bcsWithoutTable.map((o) => o.name).join(", ")}`);
61
+ }
62
+ }
63
+ // Check circular dependencies
64
+ if (checkCircular) {
65
+ const cycles = detectCircularDeps(parseResult.dependencies);
66
+ if (cycles.length > 0) {
67
+ for (const cycle of cycles) {
68
+ errors.push(`Circular dependency: ${cycle.cycle.map((r) => r.name).join(" → ")}`);
69
+ }
70
+ }
71
+ }
72
+ // Best practices
73
+ validateBestPractices(parseResult.objects, warnings);
74
+ const status = errors.length > 0 ? "invalid" : warnings.length > 0 ? "warnings" : "valid";
75
+ return mcpText({
76
+ ok: true,
77
+ status,
78
+ fileName: parseResult.metadata.fileName,
79
+ objectCount: parseResult.objects.length,
80
+ dependencyCount: parseResult.dependencies.length,
81
+ errors,
82
+ warnings,
83
+ info,
84
+ });
85
+ }
86
+ catch (err) {
87
+ return mcpError(err instanceof Error ? err : String(err));
88
+ }
89
+ });
90
+ }
91
+ function validateBestPractices(objects, warnings) {
92
+ // Check for applets without BUS_COMP
93
+ const appletsWithoutBc = objects
94
+ .filter((o) => o.type === "applet")
95
+ .filter((o) => !o.properties.some((p) => p.name === "BUS_COMP"));
96
+ if (appletsWithoutBc.length > 0) {
97
+ warnings.push(`Applets without BUS_COMP: ${appletsWithoutBc.map((o) => o.name).join(", ")}`);
98
+ }
99
+ // Check for views without BUS_OBJECT
100
+ const viewsWithoutBo = objects
101
+ .filter((o) => o.type === "view")
102
+ .filter((o) => !o.properties.some((p) => p.name === "BUS_OBJECT"));
103
+ if (viewsWithoutBo.length > 0) {
104
+ warnings.push(`Views without BUS_OBJECT: ${viewsWithoutBo.map((o) => o.name).join(", ")}`);
105
+ }
106
+ }
107
+ //# sourceMappingURL=siebel-validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siebel-validate.js","sourceRoot":"","sources":["../../../src/mcp/tools/siebel-validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG9E,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAmB;IAC3E,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2GAA2G,EAC3G;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACjE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC9F,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC1F,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KAChG,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,EAAE;QAClE,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,IAAI,WAAiC,CAAC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,OAAO,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;gBACzD,WAAW,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,QAAQ,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;YAE1B,6BAA6B;YAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,OAAO,CAAC,MAAM,aAAa,WAAW,CAAC,YAAY,CAAC,MAAM,eAAe,CAAC,CAAC;YAE3G,kCAAkC;YAClC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACnF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,8BAA8B,CAAC,CAAC;YAC/D,CAAC;YAED,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,sBAAsB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClG,CAAC;YAED,qBAAqB;YACrB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CACtD,CAAC;gBAEF,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CACrD,CAAC;gBAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;wBAC9B,QAAQ,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;oBACxF,CAAC;gBACH,CAAC;gBAED,+BAA+B;gBAC/B,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO;qBACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC;qBAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC;gBAChE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,QAAQ,CAAC,IAAI,CAAC,sBAAsB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC5D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBAC3B,MAAM,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;YAED,iBAAiB;YACjB,qBAAqB,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAE1F,OAAO,OAAO,CAAC;gBACb,EAAE,EAAE,IAAI;gBACR,MAAM;gBACN,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ;gBACvC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM;gBACvC,eAAe,EAAE,WAAW,CAAC,YAAY,CAAC,MAAM;gBAChD,MAAM;gBACN,QAAQ;gBACR,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAuB,EAAE,QAAkB;IACxE,qCAAqC;IACrC,MAAM,gBAAgB,GAAG,OAAO;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;IACnE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,qCAAqC;IACrC,MAAM,cAAc,GAAG,OAAO;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC;IACrE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,6BAA6B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-status.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/update-status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAepE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA8DhF"}
1
+ {"version":3,"file":"update-status.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/update-status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAiBpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAoFhF"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod/v4";
2
2
  import { NodeStatusSchema } from "../../schemas/node.schema.js";
3
3
  import { NodeNotFoundError } from "../../core/utils/errors.js";
4
+ import { KnowledgeStore } from "../../core/store/knowledge-store.js";
5
+ import { indexDecision } from "../../core/rag/decision-indexer.js";
4
6
  import { logger } from "../../core/utils/logger.js";
5
7
  import { mcpText, mcpError } from "../response-helpers.js";
6
8
  const VALID_TRANSITIONS = {
@@ -15,38 +17,40 @@ export function registerUpdateStatus(server, store) {
15
17
  id: z.union([z.string(), z.array(z.string())]).describe("Node ID (string) or array of node IDs for bulk update"),
16
18
  status: NodeStatusSchema.describe("The new status"),
17
19
  force: z.boolean().optional().describe("Force status change, bypass transition validation"),
18
- }, async ({ id, status, force }) => {
20
+ rationale: z.string().optional().describe("AI rationale/learnings for the status change required when transitioning to done"),
21
+ }, async ({ id, status, force, rationale }) => {
19
22
  const ids = Array.isArray(id) ? id : [id];
20
23
  const isBulk = ids.length > 1;
21
24
  logger.debug("tool:update_status", { ids, status, bulk: isBulk, force });
22
25
  if (isBulk) {
23
26
  // Validate transitions for bulk update
27
+ const bulkWarnings = [];
24
28
  if (!force) {
25
- const invalidTransitions = [];
26
29
  for (const nodeId of ids) {
27
30
  const currentNode = store.getNodeById(nodeId);
28
31
  if (currentNode) {
29
32
  const allowed = VALID_TRANSITIONS[currentNode.status] ?? [];
30
33
  if (!allowed.includes(status)) {
31
- invalidTransitions.push(`${nodeId}: ${currentNode.status} → ${status}`);
34
+ bulkWarnings.push(`${nodeId}: ${currentNode.status} → ${status}`);
32
35
  }
33
36
  }
34
37
  }
35
- if (invalidTransitions.length > 0) {
36
- return mcpError(`Invalid status transitions: ${invalidTransitions.join("; ")}. Use force:true to override.`);
37
- }
38
38
  }
39
39
  const result = store.bulkUpdateStatus(ids, status);
40
40
  logger.info("tool:update_status:ok", { count: ids.length, status, updated: result.updated.length });
41
- return mcpText({ ok: true, ...result });
41
+ const bulkResult = { ok: true, ...result };
42
+ if (bulkWarnings.length > 0)
43
+ bulkResult.warnings = bulkWarnings;
44
+ return mcpText(bulkResult);
42
45
  }
43
46
  // Validate status transition for single update
47
+ let transitionWarning;
44
48
  if (!force) {
45
49
  const currentNode = store.getNodeById(ids[0]);
46
50
  if (currentNode) {
47
51
  const allowed = VALID_TRANSITIONS[currentNode.status] ?? [];
48
52
  if (!allowed.includes(status)) {
49
- return mcpError(`Invalid status transition: ${currentNode.status} → ${status}. Allowed: ${allowed.join(", ")}. Use force:true to override.`);
53
+ transitionWarning = `Status skip: ${currentNode.status} → ${status}. Recommended flow: backlog→ready→in_progress→done.`;
50
54
  }
51
55
  }
52
56
  }
@@ -58,7 +62,28 @@ export function registerUpdateStatus(server, store) {
58
62
  return mcpError(err);
59
63
  }
60
64
  logger.info("tool:update_status:ok", { id: ids[0], status });
61
- return mcpText({ ok: true, node: updated });
65
+ // Auto-capture AI decision when transitioning to done
66
+ if (status === "done" && rationale) {
67
+ try {
68
+ const knowledgeStore = new KnowledgeStore(store.getDb());
69
+ indexDecision(knowledgeStore, {
70
+ nodeId: ids[0],
71
+ title: updated.title,
72
+ rationale,
73
+ tags: updated.tags ?? [],
74
+ });
75
+ }
76
+ catch (err) {
77
+ logger.warn("tool:update_status:decision_index_failed", { error: String(err) });
78
+ }
79
+ }
80
+ const result = { ok: true, node: updated };
81
+ if (transitionWarning)
82
+ result.warning = transitionWarning;
83
+ if (status === "done" && !rationale) {
84
+ result.hint = "Tip: provide a 'rationale' parameter when marking tasks done to capture learnings for future RAG context.";
85
+ }
86
+ return mcpText(result);
62
87
  });
63
88
  }
64
89
  //# sourceMappingURL=update-status.js.map