homegraph 1.2.0 → 1.5.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 (560) hide show
  1. package/README.md +48 -11
  2. package/dist/bin/homegraph.js +298 -72
  3. package/dist/bin/homegraph.js.map +1 -1
  4. package/dist/context/index.d.ts.map +1 -1
  5. package/dist/context/index.js +117 -11
  6. package/dist/context/index.js.map +1 -1
  7. package/dist/db/index.d.ts +207 -6
  8. package/dist/db/index.d.ts.map +1 -1
  9. package/dist/db/index.js +461 -20
  10. package/dist/db/index.js.map +1 -1
  11. package/dist/db/migrations.d.ts +1 -1
  12. package/dist/db/migrations.d.ts.map +1 -1
  13. package/dist/db/migrations.js +19 -1
  14. package/dist/db/migrations.js.map +1 -1
  15. package/dist/db/queries.d.ts +157 -3
  16. package/dist/db/queries.d.ts.map +1 -1
  17. package/dist/db/queries.js +426 -9
  18. package/dist/db/queries.js.map +1 -1
  19. package/dist/db/schema.sql +32 -1
  20. package/dist/db/sqlite-adapter.d.ts +24 -17
  21. package/dist/db/sqlite-adapter.d.ts.map +1 -1
  22. package/dist/db/sqlite-adapter.js +292 -36
  23. package/dist/db/sqlite-adapter.js.map +1 -1
  24. package/dist/db/wal-valve.d.ts +119 -0
  25. package/dist/db/wal-valve.d.ts.map +1 -0
  26. package/dist/db/wal-valve.js +290 -0
  27. package/dist/db/wal-valve.js.map +1 -0
  28. package/dist/directory.d.ts +9 -5
  29. package/dist/directory.d.ts.map +1 -1
  30. package/dist/directory.js +210 -19
  31. package/dist/directory.js.map +1 -1
  32. package/dist/extraction/arkts-batch-worker.js +3 -2
  33. package/dist/extraction/arkts-batch-worker.js.map +1 -1
  34. package/dist/extraction/cfml-extractor.d.ts +107 -0
  35. package/dist/extraction/cfml-extractor.d.ts.map +1 -0
  36. package/dist/extraction/cfml-extractor.js +494 -0
  37. package/dist/extraction/cfml-extractor.js.map +1 -0
  38. package/dist/extraction/default-ignore.d.ts +39 -0
  39. package/dist/extraction/default-ignore.d.ts.map +1 -0
  40. package/dist/extraction/default-ignore.js +221 -0
  41. package/dist/extraction/default-ignore.js.map +1 -0
  42. package/dist/extraction/grammars.d.ts +25 -1
  43. package/dist/extraction/grammars.d.ts.map +1 -1
  44. package/dist/extraction/grammars.js +177 -24
  45. package/dist/extraction/grammars.js.map +1 -1
  46. package/dist/extraction/index.d.ts +52 -14
  47. package/dist/extraction/index.d.ts.map +1 -1
  48. package/dist/extraction/index.js +521 -314
  49. package/dist/extraction/index.js.map +1 -1
  50. package/dist/extraction/languages/arkts.d.ts +90 -6
  51. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  52. package/dist/extraction/languages/arkts.js +1579 -128
  53. package/dist/extraction/languages/arkts.js.map +1 -1
  54. package/dist/extraction/languages/c-cpp.d.ts +42 -0
  55. package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  56. package/dist/extraction/languages/c-cpp.js +369 -4
  57. package/dist/extraction/languages/c-cpp.js.map +1 -1
  58. package/dist/extraction/languages/cfquery.d.ts +12 -0
  59. package/dist/extraction/languages/cfquery.d.ts.map +1 -0
  60. package/dist/extraction/languages/cfquery.js +28 -0
  61. package/dist/extraction/languages/cfquery.js.map +1 -0
  62. package/dist/extraction/languages/cfscript.d.ts +3 -0
  63. package/dist/extraction/languages/cfscript.d.ts.map +1 -0
  64. package/dist/extraction/languages/cfscript.js +73 -0
  65. package/dist/extraction/languages/cfscript.js.map +1 -0
  66. package/dist/extraction/languages/cobol.d.ts +33 -0
  67. package/dist/extraction/languages/cobol.d.ts.map +1 -0
  68. package/dist/extraction/languages/cobol.js +499 -0
  69. package/dist/extraction/languages/cobol.js.map +1 -0
  70. package/dist/extraction/languages/erlang.d.ts +3 -0
  71. package/dist/extraction/languages/erlang.d.ts.map +1 -0
  72. package/dist/extraction/languages/erlang.js +350 -0
  73. package/dist/extraction/languages/erlang.js.map +1 -0
  74. package/dist/extraction/languages/index.d.ts.map +1 -1
  75. package/dist/extraction/languages/index.js +16 -0
  76. package/dist/extraction/languages/index.js.map +1 -1
  77. package/dist/extraction/languages/nix.d.ts +3 -0
  78. package/dist/extraction/languages/nix.d.ts.map +1 -0
  79. package/dist/extraction/languages/nix.js +294 -0
  80. package/dist/extraction/languages/nix.js.map +1 -0
  81. package/dist/extraction/languages/solidity.d.ts +3 -0
  82. package/dist/extraction/languages/solidity.d.ts.map +1 -0
  83. package/dist/extraction/languages/solidity.js +293 -0
  84. package/dist/extraction/languages/solidity.js.map +1 -0
  85. package/dist/extraction/languages/terraform.d.ts +3 -0
  86. package/dist/extraction/languages/terraform.d.ts.map +1 -0
  87. package/dist/extraction/languages/terraform.js +641 -0
  88. package/dist/extraction/languages/terraform.js.map +1 -0
  89. package/dist/extraction/languages/vbnet.d.ts +11 -0
  90. package/dist/extraction/languages/vbnet.d.ts.map +1 -0
  91. package/dist/extraction/languages/vbnet.js +141 -0
  92. package/dist/extraction/languages/vbnet.js.map +1 -0
  93. package/dist/extraction/mybatis-extractor.d.ts +30 -10
  94. package/dist/extraction/mybatis-extractor.d.ts.map +1 -1
  95. package/dist/extraction/mybatis-extractor.js +140 -38
  96. package/dist/extraction/mybatis-extractor.js.map +1 -1
  97. package/dist/extraction/parse-pool.d.ts +27 -1
  98. package/dist/extraction/parse-pool.d.ts.map +1 -1
  99. package/dist/extraction/parse-pool.js +75 -7
  100. package/dist/extraction/parse-pool.js.map +1 -1
  101. package/dist/extraction/parse-worker.js +9 -2
  102. package/dist/extraction/parse-worker.js.map +1 -1
  103. package/dist/extraction/store-worker.d.ts +20 -0
  104. package/dist/extraction/store-worker.d.ts.map +1 -0
  105. package/dist/extraction/store-worker.js +102 -0
  106. package/dist/extraction/store-worker.js.map +1 -0
  107. package/dist/extraction/store-writer.d.ts +48 -0
  108. package/dist/extraction/store-writer.d.ts.map +1 -0
  109. package/dist/extraction/store-writer.js +167 -0
  110. package/dist/extraction/store-writer.js.map +1 -0
  111. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
  112. package/dist/extraction/tree-sitter-helpers.js +1 -0
  113. package/dist/extraction/tree-sitter-helpers.js.map +1 -1
  114. package/dist/extraction/tree-sitter-types.d.ts +3 -1
  115. package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  116. package/dist/extraction/tree-sitter.d.ts +38 -0
  117. package/dist/extraction/tree-sitter.d.ts.map +1 -1
  118. package/dist/extraction/tree-sitter.js +801 -10
  119. package/dist/extraction/tree-sitter.js.map +1 -1
  120. package/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
  121. package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  122. package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  123. package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  124. package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  125. package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  126. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  127. package/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
  128. package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  129. package/dist/extraction/wasm-runtime-flags.d.ts +14 -4
  130. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -1
  131. package/dist/extraction/wasm-runtime-flags.js +55 -7
  132. package/dist/extraction/wasm-runtime-flags.js.map +1 -1
  133. package/dist/graph/traversal.d.ts.map +1 -1
  134. package/dist/graph/traversal.js +1 -1
  135. package/dist/graph/traversal.js.map +1 -1
  136. package/dist/index.d.ts +74 -5
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +436 -55
  139. package/dist/index.js.map +1 -1
  140. package/dist/installer/index.d.ts +42 -0
  141. package/dist/installer/index.d.ts.map +1 -1
  142. package/dist/installer/index.js +97 -2
  143. package/dist/installer/index.js.map +1 -1
  144. package/dist/mcp/daemon.d.ts +25 -3
  145. package/dist/mcp/daemon.d.ts.map +1 -1
  146. package/dist/mcp/daemon.js +62 -8
  147. package/dist/mcp/daemon.js.map +1 -1
  148. package/dist/mcp/dynamic-boundaries.d.ts.map +1 -1
  149. package/dist/mcp/dynamic-boundaries.js +2 -1
  150. package/dist/mcp/dynamic-boundaries.js.map +1 -1
  151. package/dist/mcp/early-ppid.d.ts +26 -0
  152. package/dist/mcp/early-ppid.d.ts.map +1 -0
  153. package/dist/mcp/early-ppid.js +29 -0
  154. package/dist/mcp/early-ppid.js.map +1 -0
  155. package/dist/mcp/engine.d.ts +4 -5
  156. package/dist/mcp/engine.d.ts.map +1 -1
  157. package/dist/mcp/engine.js +27 -1
  158. package/dist/mcp/engine.js.map +1 -1
  159. package/dist/mcp/index.d.ts.map +1 -1
  160. package/dist/mcp/index.js +41 -6
  161. package/dist/mcp/index.js.map +1 -1
  162. package/dist/mcp/liveness-watchdog.d.ts +18 -1
  163. package/dist/mcp/liveness-watchdog.d.ts.map +1 -1
  164. package/dist/mcp/liveness-watchdog.js +73 -13
  165. package/dist/mcp/liveness-watchdog.js.map +1 -1
  166. package/dist/mcp/memory-budget.d.ts +30 -0
  167. package/dist/mcp/memory-budget.d.ts.map +1 -0
  168. package/dist/mcp/memory-budget.js +123 -0
  169. package/dist/mcp/memory-budget.js.map +1 -0
  170. package/dist/mcp/proxy.d.ts.map +1 -1
  171. package/dist/mcp/proxy.js +88 -4
  172. package/dist/mcp/proxy.js.map +1 -1
  173. package/dist/mcp/query-cache.d.ts +35 -4
  174. package/dist/mcp/query-cache.d.ts.map +1 -1
  175. package/dist/mcp/query-cache.js +89 -19
  176. package/dist/mcp/query-cache.js.map +1 -1
  177. package/dist/mcp/query-pool.d.ts +46 -12
  178. package/dist/mcp/query-pool.d.ts.map +1 -1
  179. package/dist/mcp/query-pool.js +100 -23
  180. package/dist/mcp/query-pool.js.map +1 -1
  181. package/dist/mcp/query-worker.d.ts +2 -2
  182. package/dist/mcp/query-worker.js +2 -2
  183. package/dist/mcp/server-instructions.d.ts +4 -27
  184. package/dist/mcp/server-instructions.d.ts.map +1 -1
  185. package/dist/mcp/server-instructions.js +39 -84
  186. package/dist/mcp/server-instructions.js.map +1 -1
  187. package/dist/mcp/session.d.ts +14 -0
  188. package/dist/mcp/session.d.ts.map +1 -1
  189. package/dist/mcp/session.js +28 -1
  190. package/dist/mcp/session.js.map +1 -1
  191. package/dist/mcp/startup-handshake.d.ts +44 -0
  192. package/dist/mcp/startup-handshake.d.ts.map +1 -0
  193. package/dist/mcp/startup-handshake.js +73 -0
  194. package/dist/mcp/startup-handshake.js.map +1 -0
  195. package/dist/mcp/tools.d.ts +104 -4
  196. package/dist/mcp/tools.d.ts.map +1 -1
  197. package/dist/mcp/tools.js +2432 -217
  198. package/dist/mcp/tools.js.map +1 -1
  199. package/dist/mcp/transport.d.ts.map +1 -1
  200. package/dist/mcp/transport.js +18 -0
  201. package/dist/mcp/transport.js.map +1 -1
  202. package/dist/project-config.d.ts +38 -0
  203. package/dist/project-config.d.ts.map +1 -1
  204. package/dist/project-config.js +101 -2
  205. package/dist/project-config.js.map +1 -1
  206. package/dist/resolution/c-fnptr-synthesizer.d.ts +2 -1
  207. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
  208. package/dist/resolution/c-fnptr-synthesizer.js +178 -146
  209. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
  210. package/dist/resolution/callback-synthesizer.d.ts +54 -10
  211. package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  212. package/dist/resolution/callback-synthesizer.js +1299 -257
  213. package/dist/resolution/callback-synthesizer.js.map +1 -1
  214. package/dist/resolution/cooperative-yield.d.ts +10 -2
  215. package/dist/resolution/cooperative-yield.d.ts.map +1 -1
  216. package/dist/resolution/cooperative-yield.js +6 -4
  217. package/dist/resolution/cooperative-yield.js.map +1 -1
  218. package/dist/resolution/frameworks/cics.d.ts +20 -0
  219. package/dist/resolution/frameworks/cics.d.ts.map +1 -0
  220. package/dist/resolution/frameworks/cics.js +90 -0
  221. package/dist/resolution/frameworks/cics.js.map +1 -0
  222. package/dist/resolution/frameworks/go.d.ts.map +1 -1
  223. package/dist/resolution/frameworks/go.js +29 -6
  224. package/dist/resolution/frameworks/go.js.map +1 -1
  225. package/dist/resolution/frameworks/index.d.ts.map +1 -1
  226. package/dist/resolution/frameworks/index.js +3 -0
  227. package/dist/resolution/frameworks/index.js.map +1 -1
  228. package/dist/resolution/frameworks/java.d.ts.map +1 -1
  229. package/dist/resolution/frameworks/java.js +14 -6
  230. package/dist/resolution/frameworks/java.js.map +1 -1
  231. package/dist/resolution/frameworks/terraform.d.ts +38 -0
  232. package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  233. package/dist/resolution/frameworks/terraform.js +277 -0
  234. package/dist/resolution/frameworks/terraform.js.map +1 -0
  235. package/dist/resolution/goframe-synthesizer.d.ts +2 -1
  236. package/dist/resolution/goframe-synthesizer.d.ts.map +1 -1
  237. package/dist/resolution/goframe-synthesizer.js +8 -3
  238. package/dist/resolution/goframe-synthesizer.js.map +1 -1
  239. package/dist/resolution/import-resolver.d.ts +9 -3
  240. package/dist/resolution/import-resolver.d.ts.map +1 -1
  241. package/dist/resolution/import-resolver.js +295 -11
  242. package/dist/resolution/import-resolver.js.map +1 -1
  243. package/dist/resolution/index.d.ts +146 -8
  244. package/dist/resolution/index.d.ts.map +1 -1
  245. package/dist/resolution/index.js +1089 -131
  246. package/dist/resolution/index.js.map +1 -1
  247. package/dist/resolution/memory-budget.d.ts +48 -0
  248. package/dist/resolution/memory-budget.d.ts.map +1 -0
  249. package/dist/resolution/memory-budget.js +162 -0
  250. package/dist/resolution/memory-budget.js.map +1 -0
  251. package/dist/resolution/name-matcher.d.ts +12 -4
  252. package/dist/resolution/name-matcher.d.ts.map +1 -1
  253. package/dist/resolution/name-matcher.js +793 -130
  254. package/dist/resolution/name-matcher.js.map +1 -1
  255. package/dist/resolution/resolver-pool.d.ts +106 -0
  256. package/dist/resolution/resolver-pool.d.ts.map +1 -0
  257. package/dist/resolution/resolver-pool.js +344 -0
  258. package/dist/resolution/resolver-pool.js.map +1 -0
  259. package/dist/resolution/resolver-worker.d.ts +17 -0
  260. package/dist/resolution/resolver-worker.d.ts.map +1 -0
  261. package/dist/resolution/resolver-worker.js +141 -0
  262. package/dist/resolution/resolver-worker.js.map +1 -0
  263. package/dist/resolution/strip-comments.d.ts +1 -1
  264. package/dist/resolution/strip-comments.d.ts.map +1 -1
  265. package/dist/resolution/strip-comments.js +49 -0
  266. package/dist/resolution/strip-comments.js.map +1 -1
  267. package/dist/resolution/types.d.ts +32 -0
  268. package/dist/resolution/types.d.ts.map +1 -1
  269. package/dist/resolution/workspace-packages.d.ts +10 -0
  270. package/dist/resolution/workspace-packages.d.ts.map +1 -1
  271. package/dist/resolution/workspace-packages.js +142 -4
  272. package/dist/resolution/workspace-packages.js.map +1 -1
  273. package/dist/search/identifier-segments.d.ts +60 -0
  274. package/dist/search/identifier-segments.d.ts.map +1 -0
  275. package/dist/search/identifier-segments.js +176 -0
  276. package/dist/search/identifier-segments.js.map +1 -0
  277. package/dist/search/query-utils.d.ts +201 -0
  278. package/dist/search/query-utils.d.ts.map +1 -1
  279. package/dist/search/query-utils.js +919 -2
  280. package/dist/search/query-utils.js.map +1 -1
  281. package/dist/spec/build/diff-parser.d.ts +55 -0
  282. package/dist/spec/build/diff-parser.d.ts.map +1 -0
  283. package/dist/spec/build/diff-parser.js +205 -0
  284. package/dist/spec/build/diff-parser.js.map +1 -0
  285. package/dist/spec/build/git-scanner.d.ts +93 -0
  286. package/dist/spec/build/git-scanner.d.ts.map +1 -0
  287. package/dist/spec/build/git-scanner.js +254 -0
  288. package/dist/spec/build/git-scanner.js.map +1 -0
  289. package/dist/spec/build/pipeline.d.ts +54 -0
  290. package/dist/spec/build/pipeline.d.ts.map +1 -0
  291. package/dist/spec/build/pipeline.js +170 -0
  292. package/dist/spec/build/pipeline.js.map +1 -0
  293. package/dist/spec/build/scan.d.ts +48 -0
  294. package/dist/spec/build/scan.d.ts.map +1 -0
  295. package/dist/spec/build/scan.js +89 -0
  296. package/dist/spec/build/scan.js.map +1 -0
  297. package/dist/spec/build/scope-resolver.d.ts +50 -0
  298. package/dist/spec/build/scope-resolver.d.ts.map +1 -0
  299. package/dist/spec/build/scope-resolver.js +105 -0
  300. package/dist/spec/build/scope-resolver.js.map +1 -0
  301. package/dist/spec/build/spec-extractor.d.ts +74 -0
  302. package/dist/spec/build/spec-extractor.d.ts.map +1 -0
  303. package/dist/spec/build/spec-extractor.js +344 -0
  304. package/dist/spec/build/spec-extractor.js.map +1 -0
  305. package/dist/spec/config.d.ts +35 -1
  306. package/dist/spec/config.d.ts.map +1 -1
  307. package/dist/spec/config.js +30 -5
  308. package/dist/spec/config.js.map +1 -1
  309. package/dist/spec/db/fts.d.ts.map +1 -1
  310. package/dist/spec/db/fts.js +19 -50
  311. package/dist/spec/db/fts.js.map +1 -1
  312. package/dist/spec/db/index.d.ts +5 -3
  313. package/dist/spec/db/index.d.ts.map +1 -1
  314. package/dist/spec/db/index.js +16 -1
  315. package/dist/spec/db/index.js.map +1 -1
  316. package/dist/spec/db/persist.d.ts +45 -0
  317. package/dist/spec/db/persist.d.ts.map +1 -0
  318. package/dist/spec/db/persist.js +66 -0
  319. package/dist/spec/db/persist.js.map +1 -0
  320. package/dist/spec/db/relations.d.ts +80 -1
  321. package/dist/spec/db/relations.d.ts.map +1 -1
  322. package/dist/spec/db/relations.js +175 -4
  323. package/dist/spec/db/relations.js.map +1 -1
  324. package/dist/spec/db/schema.d.ts +4 -0
  325. package/dist/spec/db/schema.d.ts.map +1 -1
  326. package/dist/spec/db/schema.js +4 -0
  327. package/dist/spec/db/schema.js.map +1 -1
  328. package/dist/spec/db/schema.sql +5 -1
  329. package/dist/spec/db/spec-node.d.ts +5 -0
  330. package/dist/spec/db/spec-node.d.ts.map +1 -1
  331. package/dist/spec/db/spec-node.js +11 -5
  332. package/dist/spec/db/spec-node.js.map +1 -1
  333. package/dist/spec/db/sql-utils.d.ts +11 -0
  334. package/dist/spec/db/sql-utils.d.ts.map +1 -0
  335. package/dist/spec/db/sql-utils.js +19 -0
  336. package/dist/spec/db/sql-utils.js.map +1 -0
  337. package/dist/spec/evolve/cluster-context.d.ts +30 -0
  338. package/dist/spec/evolve/cluster-context.d.ts.map +1 -0
  339. package/dist/spec/evolve/cluster-context.js +78 -0
  340. package/dist/spec/evolve/cluster-context.js.map +1 -0
  341. package/dist/spec/evolve/commit-spec-analyzer.d.ts +51 -0
  342. package/dist/spec/evolve/commit-spec-analyzer.d.ts.map +1 -0
  343. package/dist/spec/evolve/commit-spec-analyzer.js +88 -0
  344. package/dist/spec/evolve/commit-spec-analyzer.js.map +1 -0
  345. package/dist/spec/evolve/commit-spec-persister.d.ts +53 -0
  346. package/dist/spec/evolve/commit-spec-persister.d.ts.map +1 -0
  347. package/dist/spec/evolve/commit-spec-persister.js +93 -0
  348. package/dist/spec/evolve/commit-spec-persister.js.map +1 -0
  349. package/dist/spec/evolve/impact-locator.d.ts +23 -7
  350. package/dist/spec/evolve/impact-locator.d.ts.map +1 -1
  351. package/dist/spec/evolve/impact-locator.js +58 -14
  352. package/dist/spec/evolve/impact-locator.js.map +1 -1
  353. package/dist/spec/evolve/pipeline.d.ts +62 -25
  354. package/dist/spec/evolve/pipeline.d.ts.map +1 -1
  355. package/dist/spec/evolve/pipeline.js +436 -457
  356. package/dist/spec/evolve/pipeline.js.map +1 -1
  357. package/dist/spec/evolve/spec-rewriter.d.ts +13 -13
  358. package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -1
  359. package/dist/spec/evolve/spec-rewriter.js +45 -45
  360. package/dist/spec/evolve/spec-rewriter.js.map +1 -1
  361. package/dist/spec/git/commits.d.ts +85 -0
  362. package/dist/spec/git/commits.d.ts.map +1 -0
  363. package/dist/spec/git/commits.js +218 -0
  364. package/dist/spec/git/commits.js.map +1 -0
  365. package/dist/spec/git/exec.d.ts +13 -0
  366. package/dist/spec/git/exec.d.ts.map +1 -0
  367. package/dist/spec/git/exec.js +19 -0
  368. package/dist/spec/git/exec.js.map +1 -0
  369. package/dist/spec/git/index.d.ts +9 -0
  370. package/dist/spec/git/index.d.ts.map +1 -0
  371. package/dist/spec/git/index.js +22 -0
  372. package/dist/spec/git/index.js.map +1 -0
  373. package/dist/spec/git-utils.d.ts +8 -0
  374. package/dist/spec/git-utils.d.ts.map +1 -0
  375. package/dist/spec/git-utils.js +14 -0
  376. package/dist/spec/git-utils.js.map +1 -0
  377. package/dist/spec/graph/index.d.ts +8 -0
  378. package/dist/spec/graph/index.d.ts.map +1 -0
  379. package/dist/spec/graph/index.js +17 -0
  380. package/dist/spec/graph/index.js.map +1 -0
  381. package/dist/spec/graph/queries.d.ts +6 -35
  382. package/dist/spec/graph/queries.d.ts.map +1 -1
  383. package/dist/spec/graph/queries.js +71 -248
  384. package/dist/spec/graph/queries.js.map +1 -1
  385. package/dist/spec/llm/agent-client.d.ts +59 -0
  386. package/dist/spec/llm/agent-client.d.ts.map +1 -0
  387. package/dist/spec/llm/agent-client.js +213 -0
  388. package/dist/spec/llm/agent-client.js.map +1 -0
  389. package/dist/spec/llm/agents/claude-code.d.ts +32 -0
  390. package/dist/spec/llm/agents/claude-code.d.ts.map +1 -0
  391. package/dist/spec/llm/agents/claude-code.js +125 -0
  392. package/dist/spec/llm/agents/claude-code.js.map +1 -0
  393. package/dist/spec/llm/agents/codex.d.ts +32 -0
  394. package/dist/spec/llm/agents/codex.d.ts.map +1 -0
  395. package/dist/spec/llm/agents/codex.js +145 -0
  396. package/dist/spec/llm/agents/codex.js.map +1 -0
  397. package/dist/spec/llm/agents/detect-utils.d.ts +28 -0
  398. package/dist/spec/llm/agents/detect-utils.d.ts.map +1 -0
  399. package/dist/spec/llm/agents/detect-utils.js +91 -0
  400. package/dist/spec/llm/agents/detect-utils.js.map +1 -0
  401. package/dist/spec/llm/agents/deveco-code.d.ts +33 -0
  402. package/dist/spec/llm/agents/deveco-code.d.ts.map +1 -0
  403. package/dist/spec/llm/agents/deveco-code.js +165 -0
  404. package/dist/spec/llm/agents/deveco-code.js.map +1 -0
  405. package/dist/spec/llm/agents/index.d.ts +31 -0
  406. package/dist/spec/llm/agents/index.d.ts.map +1 -0
  407. package/dist/spec/llm/agents/index.js +65 -0
  408. package/dist/spec/llm/agents/index.js.map +1 -0
  409. package/dist/spec/llm/agents/types.d.ts +76 -0
  410. package/dist/spec/llm/agents/types.d.ts.map +1 -0
  411. package/dist/spec/llm/agents/types.js +15 -0
  412. package/dist/spec/llm/agents/types.js.map +1 -0
  413. package/dist/spec/llm/client.d.ts +31 -11
  414. package/dist/spec/llm/client.d.ts.map +1 -1
  415. package/dist/spec/llm/client.js +143 -81
  416. package/dist/spec/llm/client.js.map +1 -1
  417. package/dist/spec/llm/factory.d.ts +41 -0
  418. package/dist/spec/llm/factory.d.ts.map +1 -0
  419. package/dist/spec/llm/factory.js +80 -0
  420. package/dist/spec/llm/factory.js.map +1 -0
  421. package/dist/spec/llm/prompts.d.ts +24 -8
  422. package/dist/spec/llm/prompts.d.ts.map +1 -1
  423. package/dist/spec/llm/prompts.js +100 -50
  424. package/dist/spec/llm/prompts.js.map +1 -1
  425. package/dist/spec/llm/retry.d.ts +53 -0
  426. package/dist/spec/llm/retry.d.ts.map +1 -0
  427. package/dist/spec/llm/retry.js +153 -0
  428. package/dist/spec/llm/retry.js.map +1 -0
  429. package/dist/spec/mine/clusterer.d.ts +63 -0
  430. package/dist/spec/mine/clusterer.d.ts.map +1 -0
  431. package/dist/spec/mine/clusterer.js +904 -0
  432. package/dist/spec/mine/clusterer.js.map +1 -0
  433. package/dist/spec/mine/clustering/features.d.ts +38 -0
  434. package/dist/spec/mine/clustering/features.d.ts.map +1 -0
  435. package/dist/spec/mine/clustering/features.js +108 -0
  436. package/dist/spec/mine/clustering/features.js.map +1 -0
  437. package/dist/spec/mine/clustering/index.d.ts +62 -0
  438. package/dist/spec/mine/clustering/index.d.ts.map +1 -0
  439. package/dist/spec/mine/clustering/index.js +259 -0
  440. package/dist/spec/mine/clustering/index.js.map +1 -0
  441. package/dist/spec/mine/clustering/leiden.d.ts +61 -0
  442. package/dist/spec/mine/clustering/leiden.d.ts.map +1 -0
  443. package/dist/spec/mine/clustering/leiden.js +489 -0
  444. package/dist/spec/mine/clustering/leiden.js.map +1 -0
  445. package/dist/spec/mine/clustering/text-similarity.d.ts +22 -0
  446. package/dist/spec/mine/clustering/text-similarity.d.ts.map +1 -0
  447. package/dist/spec/mine/clustering/text-similarity.js +98 -0
  448. package/dist/spec/mine/clustering/text-similarity.js.map +1 -0
  449. package/dist/spec/mine/generator.d.ts +54 -0
  450. package/dist/spec/mine/generator.d.ts.map +1 -0
  451. package/dist/spec/mine/generator.js +267 -0
  452. package/dist/spec/mine/generator.js.map +1 -0
  453. package/dist/spec/mine/persist.d.ts +37 -0
  454. package/dist/spec/mine/persist.d.ts.map +1 -0
  455. package/dist/spec/mine/persist.js +170 -0
  456. package/dist/spec/mine/persist.js.map +1 -0
  457. package/dist/spec/mine/pipeline.d.ts +41 -0
  458. package/dist/spec/mine/pipeline.d.ts.map +1 -0
  459. package/dist/spec/mine/pipeline.js +236 -0
  460. package/dist/spec/mine/pipeline.js.map +1 -0
  461. package/dist/spec/mine/progress-handler.d.ts +22 -0
  462. package/dist/spec/mine/progress-handler.d.ts.map +1 -0
  463. package/dist/spec/mine/progress-handler.js +108 -0
  464. package/dist/spec/mine/progress-handler.js.map +1 -0
  465. package/dist/spec/mine/progress.d.ts +23 -0
  466. package/dist/spec/mine/progress.d.ts.map +1 -0
  467. package/dist/spec/mine/progress.js +12 -0
  468. package/dist/spec/mine/progress.js.map +1 -0
  469. package/dist/spec/mine/scanner.d.ts +59 -0
  470. package/dist/spec/mine/scanner.d.ts.map +1 -0
  471. package/dist/spec/mine/scanner.js +383 -0
  472. package/dist/spec/mine/scanner.js.map +1 -0
  473. package/dist/spec/types.d.ts +32 -0
  474. package/dist/spec/types.d.ts.map +1 -1
  475. package/dist/spec/ui/index.d.ts +9 -0
  476. package/dist/spec/ui/index.d.ts.map +1 -0
  477. package/dist/spec/ui/index.js +16 -0
  478. package/dist/spec/ui/index.js.map +1 -0
  479. package/dist/spec/ui/progress-handler.d.ts +33 -0
  480. package/dist/spec/ui/progress-handler.d.ts.map +1 -0
  481. package/dist/spec/ui/progress-handler.js +132 -0
  482. package/dist/spec/ui/progress-handler.js.map +1 -0
  483. package/dist/spec/ui/progress.d.ts +24 -0
  484. package/dist/spec/ui/progress.d.ts.map +1 -0
  485. package/dist/spec/ui/progress.js +13 -0
  486. package/dist/spec/ui/progress.js.map +1 -0
  487. package/dist/spec/utils/fs.d.ts +45 -0
  488. package/dist/spec/utils/fs.d.ts.map +1 -0
  489. package/dist/spec/utils/fs.js +163 -0
  490. package/dist/spec/utils/fs.js.map +1 -0
  491. package/dist/spec/utils/index.d.ts +12 -0
  492. package/dist/spec/utils/index.d.ts.map +1 -0
  493. package/dist/spec/utils/index.js +26 -0
  494. package/dist/spec/utils/index.js.map +1 -0
  495. package/dist/spec/utils/meta.d.ts +32 -0
  496. package/dist/spec/utils/meta.d.ts.map +1 -0
  497. package/dist/spec/utils/meta.js +122 -0
  498. package/dist/spec/utils/meta.js.map +1 -0
  499. package/dist/spec/utils/truncate.d.ts +86 -0
  500. package/dist/spec/utils/truncate.d.ts.map +1 -0
  501. package/dist/spec/utils/truncate.js +172 -0
  502. package/dist/spec/utils/truncate.js.map +1 -0
  503. package/dist/spec/utils.d.ts +4 -16
  504. package/dist/spec/utils.d.ts.map +1 -1
  505. package/dist/spec/utils.js +6 -58
  506. package/dist/spec/utils.js.map +1 -1
  507. package/dist/sync/git-hooks.d.ts.map +1 -1
  508. package/dist/sync/git-hooks.js +2 -0
  509. package/dist/sync/git-hooks.js.map +1 -1
  510. package/dist/sync/watcher.d.ts +35 -6
  511. package/dist/sync/watcher.d.ts.map +1 -1
  512. package/dist/sync/watcher.js +127 -17
  513. package/dist/sync/watcher.js.map +1 -1
  514. package/dist/sync/worktree.d.ts.map +1 -1
  515. package/dist/sync/worktree.js +5 -0
  516. package/dist/sync/worktree.js.map +1 -1
  517. package/dist/telemetry/index.js +3 -3
  518. package/dist/telemetry/index.js.map +1 -1
  519. package/dist/types.d.ts +22 -1
  520. package/dist/types.d.ts.map +1 -1
  521. package/dist/types.js +10 -0
  522. package/dist/types.js.map +1 -1
  523. package/dist/upgrade/index.d.ts +32 -0
  524. package/dist/upgrade/index.d.ts.map +1 -1
  525. package/dist/upgrade/index.js +162 -14
  526. package/dist/upgrade/index.js.map +1 -1
  527. package/dist/upgrade/remove-binary.d.ts +87 -0
  528. package/dist/upgrade/remove-binary.d.ts.map +1 -0
  529. package/dist/upgrade/remove-binary.js +289 -0
  530. package/dist/upgrade/remove-binary.js.map +1 -0
  531. package/dist/upgrade/update-check.d.ts +92 -0
  532. package/dist/upgrade/update-check.d.ts.map +1 -0
  533. package/dist/upgrade/update-check.js +258 -0
  534. package/dist/upgrade/update-check.js.map +1 -0
  535. package/package.json +6 -2
  536. package/scripts/agent-eval/run-all.sh +6 -0
  537. package/scripts/build-bundle.sh +5 -0
  538. package/scripts/npm-shim.js +8 -1
  539. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-310.pyc +0 -0
  540. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-310.pyc +0 -0
  541. package/scripts/exp_boundary_eval/__pycache__/deveco_arm.cpython-310.pyc +0 -0
  542. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-310.pyc +0 -0
  543. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-310.pyc +0 -0
  544. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-310.pyc +0 -0
  545. package/scripts/exp_boundary_eval/data/agents.json +0 -109
  546. package/scripts/exp_boundary_eval/data/experiments.json +0 -140
  547. package/scripts/qa_eval/README.md +0 -407
  548. package/scripts/qa_eval/_test_deveco_probe.py +0 -41
  549. package/scripts/qa_eval/agent_runner.py +0 -526
  550. package/scripts/qa_eval/data/.gitignore +0 -4
  551. package/scripts/qa_eval/data/test-set.jsonl +0 -2
  552. package/scripts/qa_eval/eval_metrics.py +0 -274
  553. package/scripts/qa_eval/external_agent.py +0 -976
  554. package/scripts/qa_eval/llm_config.py +0 -92
  555. package/scripts/qa_eval/memory_monitor.py +0 -132
  556. package/scripts/qa_eval/my_answer_accuracy.py +0 -187
  557. package/scripts/qa_eval/requirements.txt +0 -2
  558. package/scripts/qa_eval/run_pipeline.py +0 -804
  559. package/scripts/qa_eval/stats_efficiency.py +0 -279
  560. package/scripts/qa_eval/stats_scores.py +0 -207
@@ -15,6 +15,13 @@ exports.insertSpecSpecRelation = insertSpecSpecRelation;
15
15
  exports.deleteSimilarToRelations = deleteSimilarToRelations;
16
16
  exports.transferSpecSpecRelations = transferSpecSpecRelations;
17
17
  exports.countAllRelations = countAllRelations;
18
+ exports.findSpecIdsByFragmentPath = findSpecIdsByFragmentPath;
19
+ exports.findSpecsByFilePath = findSpecsByFilePath;
20
+ exports.findSpecCandidatesByFilePath = findSpecCandidatesByFilePath;
21
+ exports.findSpecIdsByFragmentIds = findSpecIdsByFragmentIds;
22
+ exports.findFragmentPathsBySpec = findFragmentPathsBySpec;
23
+ exports.findActiveSpecIds = findActiveSpecIds;
24
+ const sql_utils_1 = require("./sql-utils");
18
25
  // ===========================================================================
19
26
  // Spec ↔ Commit Relations
20
27
  // ===========================================================================
@@ -70,12 +77,12 @@ function transferSpecCommitRelations(db, fromSpecId, toSpecId) {
70
77
  * Link a commit to a code fragment.
71
78
  * `INSERT OR IGNORE` — duplicates are silently skipped.
72
79
  */
73
- function insertCommitFragmentRelation(db, commitHash, fragmentId) {
80
+ function insertCommitFragmentRelation(db, commitHash, fragmentId, relationType) {
74
81
  db.prepare(`
75
82
  INSERT OR IGNORE INTO commit_fragment_relations
76
- (commit_hash, fragment_id)
77
- VALUES (@commitHash, @fragmentId)
78
- `).run({ commitHash, fragmentId });
83
+ (commit_hash, fragment_id, relation_type)
84
+ VALUES (@commitHash, @fragmentId, @relationType)
85
+ `).run({ commitHash, fragmentId, relationType });
79
86
  }
80
87
  // ===========================================================================
81
88
  // Spec ↔ Spec Relations
@@ -155,4 +162,168 @@ function countAllRelations(db) {
155
162
  }
156
163
  return total;
157
164
  }
165
+ // ===========================================================================
166
+ // Cross-table traversal primitives
167
+ //
168
+ // Join queries that walk Spec → Commit → CodeFragment. These are the ONLY
169
+ // home for this SQL — higher layers (graph/queries, evolve/impact-locator)
170
+ // compose these primitives instead of writing their own joins.
171
+ // ===========================================================================
172
+ /**
173
+ * Find all spec IDs related to code fragments whose file path matches
174
+ * the given substring (unescaped LIKE `%filePath%`).
175
+ */
176
+ function findSpecIdsByFragmentPath(db, filePath) {
177
+ const rows = db
178
+ .prepare(`SELECT DISTINCT r.spec_id
179
+ FROM spec_commit_relations r
180
+ JOIN commit_fragment_relations cfr ON cfr.commit_hash = r.commit_hash
181
+ JOIN code_fragment_nodes cf ON cf.id = cfr.fragment_id
182
+ WHERE cf.file_path LIKE ?`)
183
+ .all(`%${filePath}%`);
184
+ return rows.map((r) => r.spec_id);
185
+ }
186
+ /** Default max results returned by findSpecsByFilePath. */
187
+ const DEFAULT_MAX_SPEC_FIND_RESULTS = 100;
188
+ /**
189
+ * Find specs whose code fragments reference the given file path.
190
+ *
191
+ * Traverses: filePath -> code_fragment_nodes -> commit_fragment_relations
192
+ * -> commit_nodes -> spec_commit_relations -> spec_nodes.
193
+ *
194
+ * Uses LIKE matching against code_fragment_nodes.file_path, so partial
195
+ * paths work (e.g. `src/auth.ts` matches `src/auth/login.ts` and
196
+ * `app/src/auth.ts`). LIKE metacharacters (`%`, `_`, `\`) in the
197
+ * filePath are automatically escaped.
198
+ *
199
+ * An empty or whitespace-only filePath is rejected with an error
200
+ * (it would match every spec in the graph).
201
+ */
202
+ function findSpecsByFilePath(db, filePath, maxResults = DEFAULT_MAX_SPEC_FIND_RESULTS) {
203
+ // Guard against empty input that would match every spec
204
+ if (!filePath || filePath.trim().length === 0) {
205
+ throw new Error('Empty file path is not allowed -- it would match every spec in the knowledge graph. ' +
206
+ 'Provide a concrete file path (e.g. "src/auth.ts") or a partial path (e.g. "src/auth").');
207
+ }
208
+ const pattern = `%${(0, sql_utils_1.escapeLike)(filePath)}%`;
209
+ const rows = db
210
+ .prepare(`SELECT DISTINCT s.id, s.title, s.status, s.version, s.file_path
211
+ FROM spec_nodes s
212
+ JOIN spec_commit_relations scr ON scr.spec_id = s.id
213
+ JOIN commit_fragment_relations cfr ON cfr.commit_hash = scr.commit_hash
214
+ JOIN code_fragment_nodes cf ON cf.id = cfr.fragment_id
215
+ WHERE cf.file_path LIKE ? ESCAPE '\\'
216
+ ORDER BY s.id
217
+ LIMIT ?`)
218
+ .all(pattern, maxResults + 1);
219
+ const truncated = rows.length > maxResults;
220
+ const slice = truncated ? rows.slice(0, maxResults) : rows;
221
+ return {
222
+ results: slice.map((r) => ({
223
+ id: r.id,
224
+ title: r.title,
225
+ status: r.status,
226
+ version: r.version,
227
+ filePath: r.file_path,
228
+ })),
229
+ matched_count: slice.length,
230
+ truncated,
231
+ };
232
+ }
233
+ /**
234
+ * Gather candidate specs whose fragments touch the given file path, with
235
+ * per-spec aggregate signals for downstream scoring. Only active specs are
236
+ * considered.
237
+ */
238
+ function findSpecCandidatesByFilePath(db, params) {
239
+ const pathEscaped = (0, sql_utils_1.escapeLike)(params.filePath);
240
+ const rows = db
241
+ .prepare(`
242
+ SELECT
243
+ s.id, s.title, s.status, s.version, s.file_path, s.timestamp,
244
+ MAX(
245
+ MIN(cf.end_line, @entityEnd) - MAX(cf.start_line, @entityStart) + 1,
246
+ 0
247
+ ) AS overlap_lines,
248
+ COUNT(DISTINCT cf.id) AS fragment_count,
249
+ COUNT(DISTINCT scr.commit_hash) AS commit_count,
250
+ MAX(CASE
251
+ WHEN cf.file_path = @exactFilePath THEN 3
252
+ WHEN cf.file_path LIKE @suffixLikePattern ESCAPE '\\' THEN 2
253
+ ELSE 1
254
+ END) AS file_path_match_level
255
+ FROM spec_nodes s
256
+ JOIN spec_commit_relations scr ON scr.spec_id = s.id
257
+ JOIN commit_fragment_relations cfr ON cfr.commit_hash = scr.commit_hash
258
+ JOIN code_fragment_nodes cf ON cf.id = cfr.fragment_id
259
+ WHERE s.status = 'active'
260
+ AND cf.file_path LIKE @likePattern ESCAPE '\\'
261
+ GROUP BY s.id
262
+ ORDER BY s.timestamp DESC
263
+ LIMIT @maxCandidates
264
+ `)
265
+ .all({
266
+ entityEnd: params.endLine,
267
+ entityStart: params.startLine,
268
+ exactFilePath: params.filePath,
269
+ suffixLikePattern: `%${pathEscaped}`,
270
+ likePattern: `%${pathEscaped}%`,
271
+ maxCandidates: params.maxCandidates,
272
+ });
273
+ return rows.map((r) => ({
274
+ id: r.id,
275
+ title: r.title,
276
+ status: r.status,
277
+ version: r.version,
278
+ filePath: r.file_path,
279
+ timestamp: r.timestamp,
280
+ overlapLines: r.overlap_lines,
281
+ fragmentCount: r.fragment_count,
282
+ commitCount: r.commit_count,
283
+ filePathMatchLevel: r.file_path_match_level,
284
+ }));
285
+ }
286
+ /**
287
+ * Find all spec IDs linked (via commits) to any of the given fragment IDs.
288
+ */
289
+ function findSpecIdsByFragmentIds(db, fragmentIds) {
290
+ if (fragmentIds.length === 0)
291
+ return [];
292
+ const placeholders = fragmentIds.map(() => '?').join(',');
293
+ const rows = db
294
+ .prepare(`
295
+ SELECT DISTINCT scr.spec_id
296
+ FROM commit_fragment_relations cfr
297
+ JOIN spec_commit_relations scr ON scr.commit_hash = cfr.commit_hash
298
+ WHERE cfr.fragment_id IN (${placeholders})
299
+ `)
300
+ .all(...fragmentIds);
301
+ return rows.map((r) => r.spec_id);
302
+ }
303
+ /**
304
+ * Return the distinct fragment file paths associated with a spec (via its
305
+ * commits' fragments).
306
+ */
307
+ function findFragmentPathsBySpec(db, specId) {
308
+ const rows = db
309
+ .prepare(`SELECT DISTINCT cf.file_path
310
+ FROM spec_commit_relations scr
311
+ JOIN commit_fragment_relations cfr ON cfr.commit_hash = scr.commit_hash
312
+ JOIN code_fragment_nodes cf ON cf.id = cfr.fragment_id
313
+ WHERE scr.spec_id = ?`)
314
+ .all(specId);
315
+ return rows.map((r) => r.file_path);
316
+ }
317
+ /**
318
+ * Filter a list of spec IDs down to those with status = 'active'.
319
+ */
320
+ function findActiveSpecIds(db, specIds) {
321
+ if (specIds.length === 0)
322
+ return [];
323
+ const placeholders = specIds.map(() => '?').join(',');
324
+ const rows = db
325
+ .prepare(`SELECT id FROM spec_nodes WHERE status = 'active' AND id IN (${placeholders})`)
326
+ .all(...specIds);
327
+ return rows.map((r) => r.id);
328
+ }
158
329
  //# sourceMappingURL=relations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../../src/spec/db/relations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../../src/spec/db/relations.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAcH,4DAWC;AAMD,8CA2BC;AAOD,kEAUC;AAUD,oEAWC;AAUD,wDAWC;AAMD,4DAMC;AAOD,8DAiCC;AASD,8CAaC;AAcD,8DAeC;AAmCD,kDAgDC;AA4BD,oEA+DC;AAKD,4DAiBC;AAMD,0DAeC;AAKD,8CAcC;AApcD,2CAAyC;AAEzC,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,EAAkB,EAClB,MAAc,EACd,UAAkB,EAClB,YAA0B;IAE1B,EAAE,CAAC,OAAO,CAAC;;;;GAIV,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,EAAkB,EAClB,MAAc;IAEd,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;GAOvB,CAAC,CAAC,GAAG,CAAC,MAAM,CAMX,CAAC;IAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM;QACN,UAAU,EAAE,CAAC,CAAC,WAAW;QACzB,YAAY,EAAE,CAAC,CAAC,aAA6B;QAC7C,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,SAAS;KACvB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAgB,2BAA2B,CACzC,EAAkB,EAClB,UAAkB,EAClB,QAAgB;IAEhB,EAAE,CAAC,OAAO,CAAC;;;;GAIV,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E;;;GAGG;AACH,SAAgB,4BAA4B,CAC1C,EAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,YAA0B;IAE1B,EAAE,CAAC,OAAO,CAAC;;;;GAIV,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;GAGG;AACH,SAAgB,sBAAsB,CACpC,EAAkB,EAClB,QAAgB,EAChB,QAAgB,EAChB,YAA0B;IAE1B,EAAE,CAAC,OAAO,CAAC;;;;GAIV,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,EAAkB,EAAE,MAAc;IACzE,EAAE,CAAC,OAAO,CAAC;;;;GAIV,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAgB,yBAAyB,CACvC,EAAkB,EAClB,UAAkB,EAClB,QAAgB;IAEhB,6DAA6D;IAC7D,8CAA8C;IAE9C,mEAAmE;IACnE,0EAA0E;IAC1E,EAAE,CAAC,OAAO,CAAC;;;;;;;GAOV,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjC,EAAE,CAAC,OAAO,CAAC;;;;;;;GAOV,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEjC,EAAE,CAAC,OAAO,CAAC;;GAEV,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjC,EAAE,CAAC,OAAO,CAAC;;GAEV,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E;;GAEG;AACH,SAAgB,iBAAiB,CAAC,EAAkB;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI;QAClB,uBAAuB;QACvB,2BAA2B;QAC3B,qBAAqB;KACtB,EAAE,CAAC;QACF,MAAM,GAAG,GAAG,EAAE;aACX,OAAO,CAAC,+BAA+B,KAAK,EAAE,CAAC;aAC/C,GAAG,EAAiC,CAAC;QACxC,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,+DAA+D;AAC/D,8EAA8E;AAE9E;;;GAGG;AACH,SAAgB,yBAAyB,CACvC,EAAkB,EAClB,QAAgB;IAEhB,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;iCAI2B,CAC5B;SACA,GAAG,CAAC,IAAI,QAAQ,GAAG,CAA+B,CAAC;IAEtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAkBD,2DAA2D;AAC3D,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAE1C;;;;;;;;;;;;;GAaG;AACH,SAAgB,mBAAmB,CACjC,EAAkB,EAClB,QAAgB,EAChB,aAAqB,6BAA6B;IAElD,wDAAwD;IACxD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,sFAAsF;YACtF,wFAAwF,CACzF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,IAAA,sBAAU,EAAC,QAAQ,CAAC,GAAG,CAAC;IAE5C,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;;;;eAOS,CACV;SACA,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAM1B,CAAC;IAEL,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3D,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,SAAS;SACtB,CAAC,CAAC;QACH,aAAa,EAAE,KAAK,CAAC,MAAM;QAC3B,SAAS;KACV,CAAC;AACJ,CAAC;AAuBD;;;;GAIG;AACH,SAAgB,4BAA4B,CAC1C,EAAkB,EAClB,MAAuF;IAEvF,MAAM,WAAW,GAAG,IAAA,sBAAU,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;KAuBR,CAAC;SACD,GAAG,CAAC;QACH,SAAS,EAAE,MAAM,CAAC,OAAO;QACzB,WAAW,EAAE,MAAM,CAAC,SAAS;QAC7B,aAAa,EAAE,MAAM,CAAC,QAAQ;QAC9B,iBAAiB,EAAE,IAAI,WAAW,EAAE;QACpC,WAAW,EAAE,IAAI,WAAW,GAAG;QAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAWC,CAAC;IAEL,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,YAAY,EAAE,CAAC,CAAC,aAAa;QAC7B,aAAa,EAAE,CAAC,CAAC,cAAc;QAC/B,WAAW,EAAE,CAAC,CAAC,YAAY;QAC3B,kBAAkB,EAAE,CAAC,CAAC,qBAAqB;KAC5C,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CACtC,EAAkB,EAClB,WAAqB;IAErB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC;;;;kCAIqB,YAAY;KACzC,CAAC;SACD,GAAG,CAAC,GAAG,WAAW,CAA+B,CAAC;IAErD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,EAAkB,EAClB,MAAc;IAEd,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;6BAIuB,CACxB;SACA,GAAG,CAAC,MAAM,CAAiC,CAAC;IAE/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,EAAkB,EAClB,OAAiB;IAEjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN,gEAAgE,YAAY,GAAG,CAChF;SACA,GAAG,CAAC,GAAG,OAAO,CAA0B,CAAC;IAE5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC"}
@@ -26,6 +26,10 @@ export declare function getCurrentSpecVersion(db: SqliteDatabase): number;
26
26
  /**
27
27
  * Run pending migrations.
28
28
  *
29
+ * NOTE: migration DDL mirrors statements in `schema.sql` (fresh databases
30
+ * get everything from the .sql file; migrations only patch pre-existing
31
+ * databases). Keep the two in sync when adding future migrations.
32
+ *
29
33
  * v1 → v2: Create code_fragments_fts virtual table and populate it
30
34
  * from existing code_fragment_nodes data.
31
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/spec/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAIzD;;;GAGG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAMvD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAShE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAwC/E"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/spec/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAIzD;;;GAGG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAMvD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAShE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAwC/E"}
@@ -81,6 +81,10 @@ function getCurrentSpecVersion(db) {
81
81
  /**
82
82
  * Run pending migrations.
83
83
  *
84
+ * NOTE: migration DDL mirrors statements in `schema.sql` (fresh databases
85
+ * get everything from the .sql file; migrations only patch pre-existing
86
+ * databases). Keep the two in sync when adding future migrations.
87
+ *
84
88
  * v1 → v2: Create code_fragments_fts virtual table and populate it
85
89
  * from existing code_fragment_nodes data.
86
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/spec/db/schema.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBH,wCAMC;AAMD,sDASC;AAQD,8CAwCC;AApFD,uCAAyB;AACzB,2CAA6B;AAE7B;;;GAGG;AACU,QAAA,2BAA2B,GAAG,CAAC,CAAC;AAE7C;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,EAAkB;IAC/C,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,EAAkB;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE;aACX,OAAO,CAAC,0DAA0D,CAAC;aACnE,GAAG,EAA4C,CAAC;QACnD,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,EAAkB,EAAE,WAAmB;IACvE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,kEAAkE;QAClE,mEAAmE;QACnE,mEAAmE;QACnE,EAAE,CAAC,IAAI,CAAC;;;;;;KAMP,CAAC,CAAC;QAEH,sDAAsD;QACtD,MAAM,KAAK,GACT,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,EACjE,CAAC,GAAG,CAAC;QACN,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,EAAE;iBACZ,OAAO,CAAC,0DAA0D,CAAC;iBACnE,GAAG,EAAiE,CAAC;YAExE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,4EAA4E,CAC7E,CAAC;gBACF,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,SAAsE,EAAE,EAAE;oBAC3G,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;wBAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,EAAE,CAAC,OAAO,CACR,oLAAoL,CACrL,CAAC,GAAG,EAAE,CAAC;IACV,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/spec/db/schema.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBH,wCAMC;AAMD,sDASC;AAYD,8CAwCC;AAxFD,uCAAyB;AACzB,2CAA6B;AAE7B;;;GAGG;AACU,QAAA,2BAA2B,GAAG,CAAC,CAAC;AAE7C;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,EAAkB;IAC/C,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,EAAkB;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE;aACX,OAAO,CAAC,0DAA0D,CAAC;aACnE,GAAG,EAA4C,CAAC;QACnD,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAAC,EAAkB,EAAE,WAAmB;IACvE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,kEAAkE;QAClE,mEAAmE;QACnE,mEAAmE;QACnE,EAAE,CAAC,IAAI,CAAC;;;;;;KAMP,CAAC,CAAC;QAEH,sDAAsD;QACtD,MAAM,KAAK,GACT,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,EACjE,CAAC,GAAG,CAAC;QACN,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,EAAE;iBACZ,OAAO,CAAC,0DAA0D,CAAC;iBACnE,GAAG,EAAiE,CAAC;YAExE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,4EAA4E,CAC7E,CAAC;gBACF,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,SAAsE,EAAE,EAAE;oBAC3G,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;wBAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,EAAE,CAAC,OAAO,CACR,oLAAoL,CACrL,CAAC,GAAG,EAAE,CAAC;IACV,CAAC;AACH,CAAC"}
@@ -54,7 +54,8 @@ CREATE TABLE IF NOT EXISTS spec_commit_relations (
54
54
  CREATE TABLE IF NOT EXISTS commit_fragment_relations (
55
55
  commit_hash TEXT NOT NULL,
56
56
  fragment_id TEXT NOT NULL,
57
- PRIMARY KEY (commit_hash, fragment_id),
57
+ relation_type TEXT NOT NULL,
58
+ PRIMARY KEY (commit_hash, fragment_id, relation_type),
58
59
  FOREIGN KEY (commit_hash) REFERENCES commit_nodes(hash) ON DELETE CASCADE,
59
60
  FOREIGN KEY (fragment_id) REFERENCES code_fragment_nodes(id) ON DELETE CASCADE
60
61
  );
@@ -78,6 +79,9 @@ CREATE VIRTUAL TABLE IF NOT EXISTS specs_fts USING fts5(
78
79
  subtitles
79
80
  );
80
81
 
82
+ -- NOTE: `runSpecMigrations` in schema.ts mirrors some of this DDL to patch
83
+ -- pre-existing databases. Keep the two in sync when adding migrations.
84
+
81
85
  CREATE VIRTUAL TABLE IF NOT EXISTS code_fragments_fts USING fts5(
82
86
  id,
83
87
  file_path,
@@ -6,6 +6,11 @@
6
6
  */
7
7
  import { SqliteDatabase } from '../../db/sqlite-adapter';
8
8
  import { SpecNode } from '../types';
9
+ /**
10
+ * Parse a JSON-encoded subtitles array, returning [] on any failure.
11
+ * Shared by every query that reads `spec_nodes.subtitles`.
12
+ */
13
+ export declare function parseSubtitlesJson(raw: string): string[];
9
14
  /**
10
15
  * Insert or replace a SpecNode. Also updates the standalone FTS5 index
11
16
  * with CJK-segmented text.
@@ -1 +1 @@
1
- {"version":3,"file":"spec-node.d.ts","sourceRoot":"","sources":["../../../src/spec/db/spec-node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AA2CpC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CA2B3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAMhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAErG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,QAAQ,EAAE,CAK3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAW7F"}
1
+ {"version":3,"file":"spec-node.d.ts","sourceRoot":"","sources":["../../../src/spec/db/spec-node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAqBpC;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAMxD;AAkBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CA2B3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAMhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAErG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,QAAQ,EAAE,CAK3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAW7F"}
@@ -6,6 +6,7 @@
6
6
  * text (see `fts.ts` for the segmentation logic).
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.parseSubtitlesJson = parseSubtitlesJson;
9
10
  exports.insertSpecNode = insertSpecNode;
10
11
  exports.findSpecById = findSpecById;
11
12
  exports.updateSpecStatus = updateSpecStatus;
@@ -17,18 +18,23 @@ const fts_1 = require("./fts");
17
18
  // ---------------------------------------------------------------------------
18
19
  // Helpers
19
20
  // ---------------------------------------------------------------------------
20
- function rowToSpec(row) {
21
- let subtitles;
21
+ /**
22
+ * Parse a JSON-encoded subtitles array, returning [] on any failure.
23
+ * Shared by every query that reads `spec_nodes.subtitles`.
24
+ */
25
+ function parseSubtitlesJson(raw) {
22
26
  try {
23
- subtitles = JSON.parse(row.subtitles || '[]');
27
+ return JSON.parse(raw || '[]');
24
28
  }
25
29
  catch {
26
- subtitles = [];
30
+ return [];
27
31
  }
32
+ }
33
+ function rowToSpec(row) {
28
34
  return {
29
35
  id: row.id,
30
36
  title: row.title,
31
- subtitles,
37
+ subtitles: parseSubtitlesJson(row.subtitles),
32
38
  status: row.status,
33
39
  version: row.version,
34
40
  filePath: row.file_path,
@@ -1 +1 @@
1
- {"version":3,"file":"spec-node.js","sourceRoot":"","sources":["../../../src/spec/db/spec-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-node.js","sourceRoot":"","sources":["../../../src/spec/db/spec-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Shared SQL helpers for the spec db layer.
3
+ *
4
+ * @module spec/db/sql-utils
5
+ */
6
+ /**
7
+ * Escape LIKE metacharacters (`%`, `_`) and the escape character itself so
8
+ * the input is matched literally in `LIKE ... ESCAPE '\'` queries.
9
+ */
10
+ export declare function escapeLike(str: string): string;
11
+ //# sourceMappingURL=sql-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-utils.d.ts","sourceRoot":"","sources":["../../../src/spec/db/sql-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK9C"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Shared SQL helpers for the spec db layer.
4
+ *
5
+ * @module spec/db/sql-utils
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.escapeLike = escapeLike;
9
+ /**
10
+ * Escape LIKE metacharacters (`%`, `_`) and the escape character itself so
11
+ * the input is matched literally in `LIKE ... ESCAPE '\'` queries.
12
+ */
13
+ function escapeLike(str) {
14
+ return str
15
+ .replace(/\\/g, '\\\\')
16
+ .replace(/%/g, '\\%')
17
+ .replace(/_/g, '\\_');
18
+ }
19
+ //# sourceMappingURL=sql-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-utils.js","sourceRoot":"","sources":["../../../src/spec/db/sql-utils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,gCAKC;AATD;;;GAGG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG;SACP,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * cluster-context.ts — Build cluster-level context summary for LLM spec evaluation.
3
+ *
4
+ * References mine/generator.ts buildClusterPrompt for the multi-commit
5
+ * context aggregation pattern, but uses simpler data (diff-based instead of
6
+ * AST-based) since evolve works with unified diffs.
7
+ *
8
+ * The ClusterContext / CommitSummary / CommitContextInput types live in
9
+ * `../types` so the LLM layer can depend on them without importing from a
10
+ * pipeline module.
11
+ *
12
+ * @module spec/evolve/cluster-context
13
+ */
14
+ import { ClusterContext, CommitSummary, CommitContextInput } from '../types';
15
+ export type { ClusterContext, CommitSummary, CommitContextInput };
16
+ /**
17
+ * Build a cluster context summary for a group of commits affecting the same spec.
18
+ *
19
+ * Steps:
20
+ * 1. For each affecting commit, build a CommitSummary with changed files.
21
+ * The `truncatedDiff` field is left as a placeholder — the caller is
22
+ * responsible for injecting actual diffs via `getCommitDiff()` + `truncateText()`.
23
+ * 2. Compute primaryFiles: files changed in the most commits (top TOP_PRIMARY_FILES).
24
+ *
25
+ * @param affectingCommits - Commit info for commits affecting this spec.
26
+ * @param maxChars - Maximum total characters for commit summaries (default 12000).
27
+ * @returns ClusterContext ready for LLM prompt construction.
28
+ */
29
+ export declare function buildClusterContext(affectingCommits: CommitContextInput[], maxChars?: number): ClusterContext;
30
+ //# sourceMappingURL=cluster-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster-context.d.ts","sourceRoot":"","sources":["../../../src/spec/evolve/cluster-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE7E,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC;AAgBlE;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,QAAQ,GAAE,MAAkC,GAC3C,cAAc,CA2ChB"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * cluster-context.ts — Build cluster-level context summary for LLM spec evaluation.
4
+ *
5
+ * References mine/generator.ts buildClusterPrompt for the multi-commit
6
+ * context aggregation pattern, but uses simpler data (diff-based instead of
7
+ * AST-based) since evolve works with unified diffs.
8
+ *
9
+ * The ClusterContext / CommitSummary / CommitContextInput types live in
10
+ * `../types` so the LLM layer can depend on them without importing from a
11
+ * pipeline module.
12
+ *
13
+ * @module spec/evolve/cluster-context
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.buildClusterContext = buildClusterContext;
17
+ // =============================================================================
18
+ // Constants
19
+ // =============================================================================
20
+ /** Maximum total characters for the cluster context (~12K tokens @ ~0.25 token/char). */
21
+ const DEFAULT_MAX_CONTEXT_CHARS = 48000;
22
+ /** Number of top files reported in primaryFiles. */
23
+ const TOP_PRIMARY_FILES = 10;
24
+ // =============================================================================
25
+ // Public API
26
+ // =============================================================================
27
+ /**
28
+ * Build a cluster context summary for a group of commits affecting the same spec.
29
+ *
30
+ * Steps:
31
+ * 1. For each affecting commit, build a CommitSummary with changed files.
32
+ * The `truncatedDiff` field is left as a placeholder — the caller is
33
+ * responsible for injecting actual diffs via `getCommitDiff()` + `truncateText()`.
34
+ * 2. Compute primaryFiles: files changed in the most commits (top TOP_PRIMARY_FILES).
35
+ *
36
+ * @param affectingCommits - Commit info for commits affecting this spec.
37
+ * @param maxChars - Maximum total characters for commit summaries (default 12000).
38
+ * @returns ClusterContext ready for LLM prompt construction.
39
+ */
40
+ function buildClusterContext(affectingCommits, maxChars = DEFAULT_MAX_CONTEXT_CHARS) {
41
+ // 1. Build commit summaries
42
+ const commitSummaries = [];
43
+ let usedBudget = 0;
44
+ // Track file frequency for primaryFiles
45
+ const fileFrequency = new Map();
46
+ for (const input of affectingCommits) {
47
+ const files = input.filePaths;
48
+ for (const f of files) {
49
+ fileFrequency.set(f, (fileFrequency.get(f) ?? 0) + 1);
50
+ }
51
+ // Per-commit overhead estimate: header + file list area
52
+ const overhead = 150; // "### abc1234 — message\n\nFiles: ...\n\n```diff\n...```\n\n"
53
+ const remainingForThis = maxChars - usedBudget - overhead;
54
+ if (remainingForThis <= 0)
55
+ break; // Budget exhausted
56
+ const summary = {
57
+ fullHash: input.commitHash,
58
+ shortHash: input.commitHash.slice(0, 7),
59
+ message: input.message ?? input.commitHash.slice(0, 7),
60
+ changedFiles: files,
61
+ // Placeholder — caller populates with actual diff
62
+ truncatedDiff: '',
63
+ };
64
+ commitSummaries.push(summary);
65
+ usedBudget += overhead;
66
+ }
67
+ // 2. Compute primaryFiles (top-N by frequency)
68
+ const primaryFiles = [...fileFrequency.entries()]
69
+ .sort((a, b) => b[1] - a[1])
70
+ .slice(0, TOP_PRIMARY_FILES)
71
+ .map(([file]) => file);
72
+ return {
73
+ commitCount: affectingCommits.length,
74
+ commitSummaries,
75
+ primaryFiles,
76
+ };
77
+ }
78
+ //# sourceMappingURL=cluster-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster-context.js","sourceRoot":"","sources":["../../../src/spec/evolve/cluster-context.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAiCH,kDA8CC;AAzED,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,yFAAyF;AACzF,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAExC,oDAAoD;AACpD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF;;;;;;;;;;;;GAYG;AACH,SAAgB,mBAAmB,CACjC,gBAAsC,EACtC,WAAmB,yBAAyB;IAE5C,4BAA4B;IAC5B,MAAM,eAAe,GAAoB,EAAE,CAAC;IAC5C,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,wCAAwC;IACxC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,wDAAwD;QACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,+DAA+D;QACrF,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;QAC1D,IAAI,gBAAgB,IAAI,CAAC;YAAE,MAAM,CAAC,mBAAmB;QAErD,MAAM,OAAO,GAAkB;YAC7B,QAAQ,EAAE,KAAK,CAAC,UAAU;YAC1B,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACvC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACtD,YAAY,EAAE,KAAK;YACnB,kDAAkD;YAClD,aAAa,EAAE,EAAE;SAClB,CAAC;QAEF,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,UAAU,IAAI,QAAQ,CAAC;IACzB,CAAC;IAED,+CAA+C;IAC/C,MAAM,YAAY,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;SAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAEzB,OAAO;QACL,WAAW,EAAE,gBAAgB,CAAC,MAAM;QACpC,eAAe;QACf,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * commit-spec-analyzer.ts — Batch analysis of incremental commits.
3
+ *
4
+ * References build pipeline's scan() Strategy A pattern: iterate commits,
5
+ * resolve scopes, extract metadata, parse diffs — all before any DB writes.
6
+ *
7
+ * @module spec/evolve/commit-spec-analyzer
8
+ */
9
+ import { SpecConfig } from '../config';
10
+ import { CommitInfo } from '../git';
11
+ import { SpecMetadata } from '../build/spec-extractor';
12
+ import { DiffFragment } from '../build/diff-parser';
13
+ /** Result of analyzing a single commit for spec match. */
14
+ export interface CommitSpecAnalysis {
15
+ /** The commit being analyzed. */
16
+ commit: CommitInfo;
17
+ /** Whether the commit's scope matched a local spec. */
18
+ matched: boolean;
19
+ /** Resolved spec ID (only when matched). */
20
+ specId?: string;
21
+ /** Extracted spec metadata (only when matched). */
22
+ metadata?: SpecMetadata;
23
+ /** Parsed diff fragments (only when matched). */
24
+ fragments?: DiffFragment[];
25
+ /** Human-readable reason for non-match. */
26
+ skipReason?: string;
27
+ }
28
+ /**
29
+ * Batch-analyze a list of incremental commits for spec matching.
30
+ *
31
+ * For each commit:
32
+ * 1. Resolve scope from commit message.
33
+ * 2. If scope matches a local spec file, extract metadata and parse the diff.
34
+ * 3. Return a CommitSpecAnalysis for every commit (matched or not).
35
+ *
36
+ * This function performs NO database writes. All side effects are read-only:
37
+ * `getCommitDiff()` and `analyzeCommitDiff()` read from the git repo's
38
+ * object store but do not modify anything.
39
+ *
40
+ * The most expensive operations (`getCommitDiff` + `analyzeCommitDiff`) are
41
+ * only performed for scope-matched commits so that unmatched commits are
42
+ * nearly zero-cost during scan.
43
+ *
44
+ * @param repoPath - Absolute path to the git repository.
45
+ * @param specStoragePath - Path to spec storage directory.
46
+ * @param commits - Incremental commits to analyze (chronological order).
47
+ * @param config - Resolved SpecConfig.
48
+ * @returns Array of CommitSpecAnalysis, one per input commit.
49
+ */
50
+ export declare function analyzeIncrementalCommits(repoPath: string, specStoragePath: string, commits: CommitInfo[], config: SpecConfig): CommitSpecAnalysis[];
51
+ //# sourceMappingURL=commit-spec-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-spec-analyzer.d.ts","sourceRoot":"","sources":["../../../src/spec/evolve/commit-spec-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAiB,MAAM,QAAQ,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAqB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOvE,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,MAAM,EAAE,UAAU,CAAC;IACnB,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,iDAAiD;IACjD,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,UAAU,GACjB,kBAAkB,EAAE,CAqDtB"}