@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,176 @@
1
+ /**
2
+ * SIF-to-Graph Converter — maps parsed Siebel objects to mcp-graph nodes and edges.
3
+ *
4
+ * Mapping strategy:
5
+ * - SIF Project → epic node
6
+ * - BC, BO, Workflow, Business Service → task nodes (core logic)
7
+ * - Applets, Views, Screens, Web Templates, Integration Objects → subtask nodes (UI/integration)
8
+ * - Dependencies → depends_on / related_to edges
9
+ */
10
+ import { generateId } from "../utils/id.js";
11
+ import { now } from "../utils/time.js";
12
+ import { logger } from "../utils/logger.js";
13
+ /** Siebel types mapped to task nodes (core/backend objects). */
14
+ const TASK_TYPES = new Set([
15
+ "business_component",
16
+ "business_object",
17
+ "workflow",
18
+ "business_service",
19
+ ]);
20
+ /** Siebel types mapped to subtask nodes (UI/integration objects). */
21
+ const SUBTASK_TYPES = new Set([
22
+ "applet",
23
+ "view",
24
+ "screen",
25
+ "web_template",
26
+ "integration_object",
27
+ "pick_list",
28
+ "table",
29
+ ]);
30
+ /**
31
+ * Convert a parsed SIF result into graph nodes and edges.
32
+ */
33
+ export function convertSifToGraph(parseResult) {
34
+ const { metadata, objects, dependencies } = parseResult;
35
+ if (objects.length === 0) {
36
+ return { nodes: [], edges: [] };
37
+ }
38
+ const timestamp = now();
39
+ const nodes = [];
40
+ const edges = [];
41
+ // Lookup: siebelType:siebelName → graphNodeId
42
+ const siebelToNodeId = new Map();
43
+ // Create epic node for the project
44
+ const epicId = generateId("siebel");
45
+ const epic = {
46
+ id: epicId,
47
+ type: "epic",
48
+ title: `Siebel: ${metadata.projectName ?? metadata.fileName}`,
49
+ description: `Siebel project imported from ${metadata.fileName}. ${metadata.objectCount} objects, ${dependencies.length} dependencies.`,
50
+ status: "backlog",
51
+ priority: 2,
52
+ tags: ["siebel", "project"],
53
+ sourceRef: { file: metadata.fileName },
54
+ metadata: {
55
+ siebelType: "project",
56
+ siebelProject: metadata.projectName,
57
+ origin: "sif_import",
58
+ },
59
+ createdAt: timestamp,
60
+ updatedAt: timestamp,
61
+ };
62
+ nodes.push(epic);
63
+ // Convert each Siebel object to a graph node
64
+ for (const obj of objects) {
65
+ const nodeType = getGraphNodeType(obj.type);
66
+ const nodeId = generateId("siebel");
67
+ siebelToNodeId.set(`${obj.type}:${obj.name}`, nodeId);
68
+ const description = buildDescription(obj);
69
+ const node = {
70
+ id: nodeId,
71
+ type: nodeType,
72
+ title: obj.name,
73
+ description,
74
+ status: "backlog",
75
+ priority: getPriority(obj.type),
76
+ tags: ["siebel", obj.type],
77
+ parentId: epicId,
78
+ sourceRef: { file: metadata.fileName },
79
+ metadata: {
80
+ siebelType: obj.type,
81
+ siebelProject: obj.project,
82
+ siebelProperties: obj.properties.reduce((acc, p) => ({ ...acc, [p.name]: p.value }), {}),
83
+ childCount: obj.children.length,
84
+ origin: "sif_import",
85
+ },
86
+ createdAt: timestamp,
87
+ updatedAt: timestamp,
88
+ };
89
+ nodes.push(node);
90
+ }
91
+ // Convert dependencies to edges
92
+ for (const dep of dependencies) {
93
+ const fromKey = `${dep.from.type}:${dep.from.name}`;
94
+ const toKey = `${dep.to.type}:${dep.to.name}`;
95
+ const fromId = siebelToNodeId.get(fromKey);
96
+ const toId = siebelToNodeId.get(toKey);
97
+ if (fromId && toId) {
98
+ edges.push({
99
+ id: generateId("edge"),
100
+ from: fromId,
101
+ to: toId,
102
+ relationType: mapDependencyRelation(dep),
103
+ reason: `Siebel ${dep.relationType}: ${dep.from.name} → ${dep.to.name}`,
104
+ metadata: {
105
+ inferred: dep.inferred ?? true,
106
+ siebelRelationType: dep.relationType,
107
+ },
108
+ createdAt: timestamp,
109
+ });
110
+ }
111
+ }
112
+ logger.info("SIF converted to graph", {
113
+ nodes: String(nodes.length),
114
+ edges: String(edges.length),
115
+ epicId,
116
+ });
117
+ return { nodes, edges };
118
+ }
119
+ function getGraphNodeType(siebelType) {
120
+ if (TASK_TYPES.has(siebelType))
121
+ return "task";
122
+ if (SUBTASK_TYPES.has(siebelType))
123
+ return "subtask";
124
+ return "task";
125
+ }
126
+ function getPriority(siebelType) {
127
+ switch (siebelType) {
128
+ case "business_component":
129
+ case "business_object":
130
+ return 2;
131
+ case "workflow":
132
+ case "business_service":
133
+ return 3;
134
+ case "applet":
135
+ case "view":
136
+ return 3;
137
+ case "screen":
138
+ case "web_template":
139
+ case "integration_object":
140
+ return 4;
141
+ default:
142
+ return 3;
143
+ }
144
+ }
145
+ function buildDescription(obj) {
146
+ const parts = [`Siebel ${obj.type.replace(/_/g, " ")} — ${obj.name}`];
147
+ const table = obj.properties.find((p) => p.name === "TABLE");
148
+ if (table)
149
+ parts.push(`Table: ${table.value}`);
150
+ const busComp = obj.properties.find((p) => p.name === "BUS_COMP");
151
+ if (busComp)
152
+ parts.push(`BC: ${busComp.value}`);
153
+ const busObject = obj.properties.find((p) => p.name === "BUS_OBJECT");
154
+ if (busObject)
155
+ parts.push(`BO: ${busObject.value}`);
156
+ if (obj.children.length > 0) {
157
+ parts.push(`Children: ${obj.children.length}`);
158
+ }
159
+ return parts.join(". ");
160
+ }
161
+ function mapDependencyRelation(dep) {
162
+ switch (dep.relationType) {
163
+ case "uses":
164
+ case "references":
165
+ case "based_on":
166
+ return "depends_on";
167
+ case "contains":
168
+ case "extends":
169
+ case "linked_to":
170
+ case "parent_of":
171
+ return "related_to";
172
+ default:
173
+ return "related_to";
174
+ }
175
+ }
176
+ //# sourceMappingURL=sif-to-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sif-to-graph.js","sourceRoot":"","sources":["../../../src/core/siebel/sif-to-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,gEAAgE;AAChE,MAAM,UAAU,GAA0B,IAAI,GAAG,CAAC;IAChD,oBAAoB;IACpB,iBAAiB;IACjB,UAAU;IACV,kBAAkB;CACnB,CAAC,CAAC;AAEH,qEAAqE;AACrE,MAAM,aAAa,GAA0B,IAAI,GAAG,CAAC;IACnD,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,cAAc;IACd,oBAAoB;IACpB,WAAW;IACX,OAAO;CACR,CAAC,CAAC;AAOH;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAiC;IACjE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC;IAExD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;IACxB,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,8CAA8C;IAC9C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,mCAAmC;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,IAAI,GAAc;QACtB,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,WAAW,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,QAAQ,EAAE;QAC7D,WAAW,EAAE,gCAAgC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,aAAa,YAAY,CAAC,MAAM,gBAAgB;QACvI,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE;QACtC,QAAQ,EAAE;YACR,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,QAAQ,CAAC,WAAW;YACnC,MAAM,EAAE,YAAY;SACrB;QACD,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;KACrB,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,6CAA6C;IAC7C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEpC,cAAc,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QAEtD,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE1C,MAAM,IAAI,GAAc;YACtB,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG,CAAC,IAAI;YACf,WAAW;YACX,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAC/B,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE;YACtC,QAAQ,EAAE;gBACR,UAAU,EAAE,GAAG,CAAC,IAAI;gBACpB,aAAa,EAAE,GAAG,CAAC,OAAO;gBAC1B,gBAAgB,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,CACrC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAC3C,EAA4B,CAC7B;gBACD,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM;gBAC/B,MAAM,EAAE,YAAY;aACrB;YACD,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEvC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC;gBACtB,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,IAAI;gBACR,YAAY,EAAE,qBAAqB,CAAC,GAAG,CAAC;gBACxC,MAAM,EAAE,UAAU,GAAG,CAAC,YAAY,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;gBACvE,QAAQ,EAAE;oBACR,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;oBAC9B,kBAAkB,EAAE,GAAG,CAAC,YAAY;iBACrC;gBACD,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;QACpC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3B,MAAM;KACP,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,UAA4B;IACpD,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,UAA4B;IAC/C,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,iBAAiB;YACpB,OAAO,CAAC,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,kBAAkB;YACrB,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,cAAc,CAAC;QACpB,KAAK,oBAAoB;YACvB,OAAO,CAAC,CAAC;QACX;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAiB;IACzC,MAAM,KAAK,GAAa,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAC7D,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAClE,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACtE,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAEpD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAqB;IAClD,QAAQ,GAAG,CAAC,YAAY,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC;QACZ,KAAK,YAAY,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,YAAY,CAAC;QACtB,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,YAAY,CAAC;QACtB;YACE,OAAO,YAAY,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -77,5 +77,30 @@ export declare class KnowledgeStore {
77
77
  * Get all documents for a given source ID (all chunks).
78
78
  */
79
79
  getBySourceId(sourceId: string): KnowledgeDocument[];
80
+ /**
81
+ * Update the quality score for a document.
82
+ */
83
+ updateQualityScore(id: string, score: number): void;
84
+ /**
85
+ * Record access on a document — update last_accessed_at + increment usage_count.
86
+ */
87
+ recordAccess(id: string): void;
88
+ /**
89
+ * Batch update staleness_days for all documents.
90
+ */
91
+ batchUpdateStaleness(): number;
92
+ /**
93
+ * Search with quality score weighting applied to BM25 results.
94
+ */
95
+ searchWithQuality(query: string, limit?: number, options?: {
96
+ minQuality?: number;
97
+ }): Array<KnowledgeDocument & {
98
+ score: number;
99
+ qualityScore: number;
100
+ }>;
101
+ /**
102
+ * Get related documents via knowledge_relations table.
103
+ */
104
+ getRelated(docId: string, limit?: number): KnowledgeDocument[];
80
105
  }
81
106
  //# sourceMappingURL=knowledge-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAKhG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,mBAAmB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AA8BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,iBAAiB;IAqClD;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,EAAE;IAY7D;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAO7C;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,EAAE;IAqB1G;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,KAAK,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBvF;;;OAGG;IACH,oBAAoB,CAClB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,cAAc,EAC5B,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBnE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAO3B;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQzE;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAc/C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOnC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;CAMrD"}
1
+ {"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAKhG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,mBAAmB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AA8BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,iBAAiB;IAqClD;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,EAAE;IAY7D;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAO7C;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,EAAE;IAqB1G;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,KAAK,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBvF;;;OAGG;IACH,oBAAoB,CAClB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,cAAc,EAC5B,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBnE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAO3B;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQzE;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAc/C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOnC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAOpD;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMnD;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAO9B;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAoB9B;;OAEG;IACH,iBAAiB,CACf,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,EAClB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,KAAK,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBrE;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,iBAAiB,EAAE;CAenE"}
@@ -108,7 +108,7 @@ export class KnowledgeStore {
108
108
  .all(query, limit);
109
109
  return rows.map((row) => ({
110
110
  ...rowToDoc(row),
111
- score: -row.score,
111
+ score: Math.abs(row.score),
112
112
  }));
113
113
  }
114
114
  /**
@@ -184,5 +184,77 @@ export class KnowledgeStore {
184
184
  .all(sourceId);
185
185
  return rows.map(rowToDoc);
186
186
  }
187
+ /**
188
+ * Update the quality score for a document.
189
+ */
190
+ updateQualityScore(id, score) {
191
+ this.db
192
+ .prepare("UPDATE knowledge_documents SET quality_score = ? WHERE id = ?")
193
+ .run(score, id);
194
+ }
195
+ /**
196
+ * Record access on a document — update last_accessed_at + increment usage_count.
197
+ */
198
+ recordAccess(id) {
199
+ const timestamp = now();
200
+ this.db
201
+ .prepare("UPDATE knowledge_documents SET last_accessed_at = ?, usage_count = usage_count + 1 WHERE id = ?")
202
+ .run(timestamp, id);
203
+ }
204
+ /**
205
+ * Batch update staleness_days for all documents.
206
+ */
207
+ batchUpdateStaleness() {
208
+ const rows = this.db
209
+ .prepare("SELECT id, created_at FROM knowledge_documents")
210
+ .all();
211
+ const update = this.db.prepare("UPDATE knowledge_documents SET staleness_days = ? WHERE id = ?");
212
+ let updated = 0;
213
+ this.db.transaction(() => {
214
+ for (const row of rows) {
215
+ const ageMs = Date.now() - new Date(row.created_at).getTime();
216
+ const days = Math.max(0, Math.floor(ageMs / (24 * 60 * 60 * 1000)));
217
+ update.run(days, row.id);
218
+ updated++;
219
+ }
220
+ })();
221
+ return updated;
222
+ }
223
+ /**
224
+ * Search with quality score weighting applied to BM25 results.
225
+ */
226
+ searchWithQuality(query, limit = 20, options) {
227
+ const minQuality = options?.minQuality ?? 0;
228
+ const rows = this.db
229
+ .prepare(`SELECT kd.*, bm25(knowledge_fts) AS bm25_score, COALESCE(kd.quality_score, 0.5) AS q_score
230
+ FROM knowledge_fts fts
231
+ JOIN knowledge_documents kd ON kd.rowid = fts.rowid
232
+ WHERE knowledge_fts MATCH ?
233
+ AND COALESCE(kd.quality_score, 0.5) >= ?
234
+ ORDER BY (bm25(knowledge_fts) * COALESCE(kd.quality_score, 0.5))
235
+ LIMIT ?`)
236
+ .all(query, minQuality, limit);
237
+ return rows.map((row) => ({
238
+ ...rowToDoc(row),
239
+ score: Math.abs(row.bm25_score) * row.q_score,
240
+ qualityScore: row.q_score,
241
+ }));
242
+ }
243
+ /**
244
+ * Get related documents via knowledge_relations table.
245
+ */
246
+ getRelated(docId, limit = 10) {
247
+ const rows = this.db
248
+ .prepare(`SELECT kd.* FROM knowledge_relations kr
249
+ JOIN knowledge_documents kd ON kd.id = kr.to_doc_id
250
+ WHERE kr.from_doc_id = ?
251
+ UNION
252
+ SELECT kd.* FROM knowledge_relations kr
253
+ JOIN knowledge_documents kd ON kd.id = kr.from_doc_id
254
+ WHERE kr.to_doc_id = ?
255
+ LIMIT ?`)
256
+ .all(docId, docId, limit);
257
+ return rows.map(rowToDoc);
258
+ }
187
259
  }
188
260
  //# sourceMappingURL=knowledge-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../../../src/core/store/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAyB1E,SAAS,QAAQ,CAAC,GAAiB;IACjC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,UAAU,EAAE,GAAG,CAAC,WAAkC;QAClD,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7D,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,OAAO,cAAc;IACjB,EAAE,CAAoB;IAE9B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAuB;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtC,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE;aACrB,OAAO,CAAC,4EAA4E,CAAC;aACrF,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAA6B,CAAC;QAEvD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5F,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QAExB,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;;6CAEuC,CACxC,CAAC,GAAG,CACH,EAAE,EACF,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,OAAO,EACX,IAAI,EACJ,GAAG,CAAC,UAAU,IAAI,CAAC,EACnB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAClD,SAAS,EACT,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5F,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,IAA0B;QACrC,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,gDAAgD,CAAC;aACzD,GAAG,CAAC,EAAE,CAA6B,CAAC;QACvC,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAA+E;QAClF,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QAEpC,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;iBACjB,OAAO,CACN,mGAAmG,CACpG;iBACA,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAmB,CAAC;YAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN,6EAA6E,CAC9E;aACA,GAAG,CAAC,KAAK,EAAE,MAAM,CAAmB,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;;iBAKS,CACV;aACA,GAAG,CAAC,KAAK,EAAE,KAAK,CAA4C,CAAC;QAEhE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,GAAG,QAAQ,CAAC,GAAG,CAAC;YAChB,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK;SAClB,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAClB,KAAa,EACb,YAA4B,EAC5B,QAAgB,EAAE;QAElB,qDAAqD;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,KAA2B,CAAC;YAC9D,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO;gBACL,GAAG,MAAM;gBACT,KAAK,EAAE,YAAY;gBACnB,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAE1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,EAAU;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CAAC,8CAA8C,CAAC;aACvD,GAAG,CAAC,EAAE,CAAC,CAAC;QACX,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,UAA+B,EAAE,QAAgB;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CAAC,yEAAyE,CAAC;aAClF,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAgC;QACpC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;iBAChB,OAAO,CAAC,uEAAuE,CAAC;iBAChF,GAAG,CAAC,UAAU,CAAoB,CAAC;YACtC,OAAO,GAAG,CAAC,GAAG,CAAC;QACjB,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,iDAAiD,CAAC;aAC1D,GAAG,EAAqB,CAAC;QAC5B,OAAO,GAAG,CAAC,GAAG,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,kEAAkE,CAAC;aAC3E,GAAG,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,GAAG,KAAK,SAAS,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,4EAA4E,CAAC;aACrF,GAAG,CAAC,QAAQ,CAAmB,CAAC;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../../../src/core/store/knowledge-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/core/store/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAwV3C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA6BzD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAGvD"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/core/store/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAmc3C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA6BzD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAGvD"}
@@ -332,6 +332,113 @@ const migrations = [
332
332
  CREATE INDEX IF NOT EXISTS idx_custom_skills_project ON custom_skills(project_id);
333
333
  `,
334
334
  },
335
+ {
336
+ version: 10,
337
+ description: "Edge deduplication — remove duplicates, add UNIQUE constraint",
338
+ sql: `
339
+ DELETE FROM edges WHERE rowid NOT IN (
340
+ SELECT MIN(rowid) FROM edges GROUP BY project_id, from_node, to_node, relation_type
341
+ );
342
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_edges_unique
343
+ ON edges(project_id, from_node, to_node, relation_type);
344
+ `,
345
+ },
346
+ {
347
+ version: 11,
348
+ description: "Journey maps + Knowledge quality scoring, usage tracking, and cross-source relations",
349
+ sql: `
350
+ CREATE TABLE IF NOT EXISTS journey_maps (
351
+ id TEXT PRIMARY KEY,
352
+ project_id TEXT NOT NULL REFERENCES projects(id),
353
+ name TEXT NOT NULL,
354
+ url TEXT,
355
+ description TEXT,
356
+ metadata TEXT, -- JSON object
357
+ created_at TEXT NOT NULL,
358
+ updated_at TEXT NOT NULL
359
+ );
360
+
361
+ CREATE TABLE IF NOT EXISTS journey_screens (
362
+ id TEXT PRIMARY KEY,
363
+ map_id TEXT NOT NULL REFERENCES journey_maps(id) ON DELETE CASCADE,
364
+ project_id TEXT NOT NULL REFERENCES projects(id),
365
+ title TEXT NOT NULL,
366
+ description TEXT,
367
+ screenshot TEXT, -- filename relative to journey-screenshots/
368
+ url TEXT,
369
+ screen_type TEXT NOT NULL DEFAULT 'page',
370
+ fields TEXT, -- JSON array
371
+ ctas TEXT, -- JSON array
372
+ metadata TEXT, -- JSON object
373
+ position_x REAL DEFAULT 0,
374
+ position_y REAL DEFAULT 0,
375
+ created_at TEXT NOT NULL,
376
+ updated_at TEXT NOT NULL
377
+ );
378
+
379
+ CREATE TABLE IF NOT EXISTS journey_edges (
380
+ id TEXT PRIMARY KEY,
381
+ map_id TEXT NOT NULL REFERENCES journey_maps(id) ON DELETE CASCADE,
382
+ project_id TEXT NOT NULL REFERENCES projects(id),
383
+ from_screen TEXT NOT NULL REFERENCES journey_screens(id) ON DELETE CASCADE,
384
+ to_screen TEXT NOT NULL REFERENCES journey_screens(id) ON DELETE CASCADE,
385
+ label TEXT,
386
+ edge_type TEXT NOT NULL DEFAULT 'navigation',
387
+ metadata TEXT, -- JSON object
388
+ created_at TEXT NOT NULL
389
+ );
390
+
391
+ CREATE TABLE IF NOT EXISTS journey_variants (
392
+ id TEXT PRIMARY KEY,
393
+ map_id TEXT NOT NULL REFERENCES journey_maps(id) ON DELETE CASCADE,
394
+ project_id TEXT NOT NULL REFERENCES projects(id),
395
+ name TEXT NOT NULL,
396
+ description TEXT,
397
+ path TEXT NOT NULL, -- JSON array of screen IDs
398
+ created_at TEXT NOT NULL
399
+ );
400
+
401
+ CREATE INDEX IF NOT EXISTS idx_journey_maps_project ON journey_maps(project_id);
402
+ CREATE INDEX IF NOT EXISTS idx_journey_screens_map ON journey_screens(map_id);
403
+ CREATE INDEX IF NOT EXISTS idx_journey_edges_map ON journey_edges(map_id);
404
+ CREATE INDEX IF NOT EXISTS idx_journey_edges_from ON journey_edges(from_screen);
405
+ CREATE INDEX IF NOT EXISTS idx_journey_edges_to ON journey_edges(to_screen);
406
+ CREATE INDEX IF NOT EXISTS idx_journey_variants_map ON journey_variants(map_id);
407
+
408
+ ALTER TABLE knowledge_documents ADD COLUMN quality_score REAL DEFAULT 0.5;
409
+ ALTER TABLE knowledge_documents ADD COLUMN usage_count INTEGER DEFAULT 0;
410
+ ALTER TABLE knowledge_documents ADD COLUMN last_accessed_at TEXT;
411
+ ALTER TABLE knowledge_documents ADD COLUMN staleness_days INTEGER DEFAULT 0;
412
+
413
+ CREATE INDEX IF NOT EXISTS idx_knowledge_quality ON knowledge_documents(quality_score);
414
+ CREATE INDEX IF NOT EXISTS idx_knowledge_usage ON knowledge_documents(usage_count);
415
+
416
+ CREATE TABLE IF NOT EXISTS knowledge_relations (
417
+ id TEXT PRIMARY KEY,
418
+ from_doc_id TEXT NOT NULL,
419
+ to_doc_id TEXT NOT NULL,
420
+ relation TEXT NOT NULL,
421
+ score REAL DEFAULT 1.0,
422
+ created_at TEXT NOT NULL,
423
+ UNIQUE(from_doc_id, to_doc_id, relation)
424
+ );
425
+
426
+ CREATE INDEX IF NOT EXISTS idx_krel_from ON knowledge_relations(from_doc_id);
427
+ CREATE INDEX IF NOT EXISTS idx_krel_to ON knowledge_relations(to_doc_id);
428
+
429
+ CREATE TABLE IF NOT EXISTS knowledge_usage_log (
430
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
431
+ doc_id TEXT NOT NULL,
432
+ query TEXT NOT NULL,
433
+ action TEXT NOT NULL,
434
+ context TEXT,
435
+ created_at TEXT NOT NULL
436
+ );
437
+
438
+ CREATE INDEX IF NOT EXISTS idx_kusage_doc ON knowledge_usage_log(doc_id);
439
+ CREATE INDEX IF NOT EXISTS idx_kusage_action ON knowledge_usage_log(action);
440
+ `,
441
+ },
335
442
  ];
336
443
  export function runMigrations(db) {
337
444
  // Create migrations tracking table
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/core/store/migrations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,UAAU,GAAgB;IAC9B;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,oEAAoE;QACjF,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsEJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,sCAAsC;QACnD,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,6DAA6D;QAC1E,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,uEAAuE;QACpF,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwCJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,0DAA0D;QACvE,GAAG,EAAE;;;;;;;;KAQJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,oEAAoE;QACjF,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkEJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,mDAAmD;QAChE,GAAG,EAAE;;;;;;;;;;;;;KAaJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,sEAAsE;QACnF,GAAG,EAAE;;;;;;KAMJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,4CAA4C;QACzD,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;KAuBJ;KACF;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,mCAAmC;IACnC,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,EAAE;SACC,OAAO,CAAC,iCAAiC,CAAC;SAC1C,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAE,GAA2B,CAAC,OAAO,CAAC,CACtD,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,SAAS;QAE7C,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACjG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAClB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvB,EAAE,CAAC,OAAO,CACR,6EAA6E,CAC9E,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAqB;IAC/C,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/core/store/migrations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/sqlite-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import { GraphNodeSchema } from "../../schemas/node.schema.js";
11
11
  import { GraphEdgeSchema } from "../../schemas/edge.schema.js";
12
12
  import { z } from "zod/v4";
13
13
  import { STORE_DIR, LEGACY_STORE_DIR, DB_FILE } from "../utils/constants.js";
14
+ import { normalizeNewlines } from "../utils/text.js";
14
15
  // ── Mapping helpers ──────────────────────────────────────
15
16
  function nodeToRow(node, projectId) {
16
17
  return {
@@ -352,7 +353,8 @@ export class SqliteStore {
352
353
  throw err;
353
354
  }
354
355
  const pid = this.ensureProject();
355
- const row = nodeToRow(node, pid);
356
+ const normalized = { ...node, description: normalizeNewlines(node.description) };
357
+ const row = nodeToRow(normalized, pid);
356
358
  this.db
357
359
  .prepare(`INSERT INTO nodes
358
360
  (id, project_id, type, title, description, status, priority,
@@ -426,7 +428,7 @@ export class SqliteStore {
426
428
  }
427
429
  if (fields.description !== undefined) {
428
430
  setClauses.push("description = ?");
429
- params.push(fields.description ?? null);
431
+ params.push(normalizeNewlines(fields.description) ?? null);
430
432
  }
431
433
  if (fields.type !== undefined) {
432
434
  setClauses.push("type = ?");
@@ -540,13 +542,15 @@ export class SqliteStore {
540
542
  }
541
543
  const pid = this.ensureProject();
542
544
  const row = edgeToRow(edge, pid);
543
- this.db
544
- .prepare(`INSERT INTO edges
545
+ const result = this.db
546
+ .prepare(`INSERT OR IGNORE INTO edges
545
547
  (id, project_id, from_node, to_node, relation_type, weight, reason, metadata, created_at)
546
548
  VALUES
547
549
  (@id, @project_id, @from_node, @to_node, @relation_type, @weight, @reason, @metadata, @created_at)`)
548
550
  .run(row);
549
- this._eventBus?.emitTyped("edge:created", { edgeId: edge.id, from: edge.from, to: edge.to, relationType: edge.relationType });
551
+ if (result.changes > 0) {
552
+ this._eventBus?.emitTyped("edge:created", { edgeId: edge.id, from: edge.from, to: edge.to, relationType: edge.relationType });
553
+ }
550
554
  }
551
555
  getEdgesFrom(nodeId) {
552
556
  const pid = this.ensureProject();
@@ -635,7 +639,7 @@ export class SqliteStore {
635
639
  for (const edge of edges) {
636
640
  const row = edgeToRow(edge, pid);
637
641
  this.db
638
- .prepare(`INSERT INTO edges
642
+ .prepare(`INSERT OR IGNORE INTO edges
639
643
  (id, project_id, from_node, to_node, relation_type, weight, reason, metadata, created_at)
640
644
  VALUES
641
645
  (@id, @project_id, @from_node, @to_node, @relation_type, @weight, @reason, @metadata, @created_at)`)
@@ -721,7 +725,7 @@ export class SqliteStore {
721
725
  .all(query, pid, limit);
722
726
  return rows.map((row) => ({
723
727
  ...rowToNode(row),
724
- score: -row.score,
728
+ score: Math.abs(row.score),
725
729
  }));
726
730
  }
727
731
  // ── Bulk status update ─────────────────────────