homegraph 1.1.2 → 1.2.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 (361) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +268 -243
  3. package/dist/arkts/ohos-api-index.d.ts +15 -0
  4. package/dist/arkts/ohos-api-index.d.ts.map +1 -0
  5. package/dist/arkts/ohos-api-index.js +190 -0
  6. package/dist/arkts/ohos-api-index.js.map +1 -0
  7. package/dist/arkts/ohos-sdk-input.d.ts +36 -0
  8. package/dist/arkts/ohos-sdk-input.d.ts.map +1 -0
  9. package/dist/arkts/ohos-sdk-input.js +214 -0
  10. package/dist/arkts/ohos-sdk-input.js.map +1 -0
  11. package/dist/bin/command-supervision.d.ts +12 -0
  12. package/dist/bin/command-supervision.d.ts.map +1 -0
  13. package/dist/bin/command-supervision.js +86 -0
  14. package/dist/bin/command-supervision.js.map +1 -0
  15. package/dist/bin/homegraph.d.ts +1 -1
  16. package/dist/bin/homegraph.js +971 -71
  17. package/dist/bin/homegraph.js.map +1 -1
  18. package/dist/db/index.d.ts +20 -0
  19. package/dist/db/index.d.ts.map +1 -1
  20. package/dist/db/index.js +39 -0
  21. package/dist/db/index.js.map +1 -1
  22. package/dist/db/migrations.d.ts +1 -1
  23. package/dist/db/migrations.d.ts.map +1 -1
  24. package/dist/db/migrations.js +58 -19
  25. package/dist/db/migrations.js.map +1 -1
  26. package/dist/db/queries.d.ts +14 -0
  27. package/dist/db/queries.d.ts.map +1 -1
  28. package/dist/db/queries.js +314 -143
  29. package/dist/db/queries.js.map +1 -1
  30. package/dist/db/schema.sql +172 -152
  31. package/dist/directory.d.ts +32 -0
  32. package/dist/directory.d.ts.map +1 -1
  33. package/dist/directory.js +88 -5
  34. package/dist/directory.js.map +1 -1
  35. package/dist/extraction/arkts-batch-worker.d.ts +2 -0
  36. package/dist/extraction/arkts-batch-worker.d.ts.map +1 -0
  37. package/dist/extraction/arkts-batch-worker.js +28 -0
  38. package/dist/extraction/arkts-batch-worker.js.map +1 -0
  39. package/dist/extraction/context.d.ts +11 -0
  40. package/dist/extraction/context.d.ts.map +1 -1
  41. package/dist/extraction/context.js +20 -0
  42. package/dist/extraction/context.js.map +1 -1
  43. package/dist/extraction/index.d.ts +16 -2
  44. package/dist/extraction/index.d.ts.map +1 -1
  45. package/dist/extraction/index.js +619 -380
  46. package/dist/extraction/index.js.map +1 -1
  47. package/dist/extraction/languages/arkts-state-decorators.d.ts +13 -0
  48. package/dist/extraction/languages/arkts-state-decorators.d.ts.map +1 -0
  49. package/dist/extraction/languages/arkts-state-decorators.js +26 -0
  50. package/dist/extraction/languages/arkts-state-decorators.js.map +1 -0
  51. package/dist/extraction/languages/arkts-viewtree.d.ts +4 -2
  52. package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -1
  53. package/dist/extraction/languages/arkts-viewtree.js +21 -6
  54. package/dist/extraction/languages/arkts-viewtree.js.map +1 -1
  55. package/dist/extraction/languages/arkts.d.ts +98 -2
  56. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  57. package/dist/extraction/languages/arkts.js +1290 -61
  58. package/dist/extraction/languages/arkts.js.map +1 -1
  59. package/dist/extraction/languages/c-cpp.d.ts +56 -0
  60. package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  61. package/dist/extraction/languages/c-cpp.js +198 -1
  62. package/dist/extraction/languages/c-cpp.js.map +1 -1
  63. package/dist/extraction/languages/ohos-api-consumer.d.ts +34 -0
  64. package/dist/extraction/languages/ohos-api-consumer.d.ts.map +1 -0
  65. package/dist/extraction/languages/ohos-api-consumer.js +283 -0
  66. package/dist/extraction/languages/ohos-api-consumer.js.map +1 -0
  67. package/dist/extraction/parse-pool.d.ts +126 -0
  68. package/dist/extraction/parse-pool.d.ts.map +1 -0
  69. package/dist/extraction/parse-pool.js +319 -0
  70. package/dist/extraction/parse-pool.js.map +1 -0
  71. package/dist/extraction/tree-sitter-types.d.ts +17 -0
  72. package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  73. package/dist/extraction/tree-sitter.d.ts +21 -0
  74. package/dist/extraction/tree-sitter.d.ts.map +1 -1
  75. package/dist/extraction/tree-sitter.js +198 -27
  76. package/dist/extraction/tree-sitter.js.map +1 -1
  77. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  78. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  79. package/dist/graph/traversal.d.ts.map +1 -1
  80. package/dist/graph/traversal.js +76 -17
  81. package/dist/graph/traversal.js.map +1 -1
  82. package/dist/index.d.ts +25 -0
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +78 -4
  85. package/dist/index.js.map +1 -1
  86. package/dist/installer/instructions-template.js +9 -9
  87. package/dist/installer/targets/shared.d.ts +5 -6
  88. package/dist/installer/targets/shared.d.ts.map +1 -1
  89. package/dist/installer/targets/shared.js +5 -6
  90. package/dist/installer/targets/shared.js.map +1 -1
  91. package/dist/mcp/daemon-paths.d.ts +30 -3
  92. package/dist/mcp/daemon-paths.d.ts.map +1 -1
  93. package/dist/mcp/daemon-paths.js +50 -10
  94. package/dist/mcp/daemon-paths.js.map +1 -1
  95. package/dist/mcp/daemon-registry.d.ts.map +1 -1
  96. package/dist/mcp/daemon-registry.js +7 -3
  97. package/dist/mcp/daemon-registry.js.map +1 -1
  98. package/dist/mcp/daemon.d.ts +48 -0
  99. package/dist/mcp/daemon.d.ts.map +1 -1
  100. package/dist/mcp/daemon.js +196 -32
  101. package/dist/mcp/daemon.js.map +1 -1
  102. package/dist/mcp/engine.d.ts +17 -0
  103. package/dist/mcp/engine.d.ts.map +1 -1
  104. package/dist/mcp/engine.js +73 -1
  105. package/dist/mcp/engine.js.map +1 -1
  106. package/dist/mcp/index.d.ts.map +1 -1
  107. package/dist/mcp/index.js +25 -43
  108. package/dist/mcp/index.js.map +1 -1
  109. package/dist/mcp/liveness-watchdog.js +16 -16
  110. package/dist/mcp/ppid-watchdog.d.ts +18 -0
  111. package/dist/mcp/ppid-watchdog.d.ts.map +1 -1
  112. package/dist/mcp/ppid-watchdog.js +37 -0
  113. package/dist/mcp/ppid-watchdog.js.map +1 -1
  114. package/dist/mcp/query-cache.d.ts +25 -0
  115. package/dist/mcp/query-cache.d.ts.map +1 -0
  116. package/dist/mcp/query-cache.js +191 -0
  117. package/dist/mcp/query-cache.js.map +1 -0
  118. package/dist/mcp/query-pool.d.ts +94 -0
  119. package/dist/mcp/query-pool.d.ts.map +1 -0
  120. package/dist/mcp/query-pool.js +297 -0
  121. package/dist/mcp/query-pool.js.map +1 -0
  122. package/dist/mcp/query-worker.d.ts +24 -0
  123. package/dist/mcp/query-worker.d.ts.map +1 -0
  124. package/dist/mcp/query-worker.js +87 -0
  125. package/dist/mcp/query-worker.js.map +1 -0
  126. package/dist/mcp/server-instructions.d.ts +5 -7
  127. package/dist/mcp/server-instructions.d.ts.map +1 -1
  128. package/dist/mcp/server-instructions.js +72 -74
  129. package/dist/mcp/server-instructions.js.map +1 -1
  130. package/dist/mcp/tools.d.ts +94 -4
  131. package/dist/mcp/tools.d.ts.map +1 -1
  132. package/dist/mcp/tools.js +877 -71
  133. package/dist/mcp/tools.js.map +1 -1
  134. package/dist/project-config.d.ts +20 -0
  135. package/dist/project-config.d.ts.map +1 -1
  136. package/dist/project-config.js +42 -2
  137. package/dist/project-config.js.map +1 -1
  138. package/dist/reasoning/login.js +1 -1
  139. package/dist/reasoning/login.js.map +1 -1
  140. package/dist/reasoning/reasoner.js +32 -32
  141. package/dist/resolution/c-fnptr-synthesizer.d.ts +0 -28
  142. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
  143. package/dist/resolution/c-fnptr-synthesizer.js +765 -79
  144. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
  145. package/dist/resolution/callback-synthesizer.d.ts +1 -1
  146. package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  147. package/dist/resolution/callback-synthesizer.js +72 -11
  148. package/dist/resolution/callback-synthesizer.js.map +1 -1
  149. package/dist/resolution/cooperative-yield.d.ts +32 -0
  150. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  151. package/dist/resolution/cooperative-yield.js +42 -0
  152. package/dist/resolution/cooperative-yield.js.map +1 -0
  153. package/dist/resolution/index.d.ts +11 -2
  154. package/dist/resolution/index.d.ts.map +1 -1
  155. package/dist/resolution/index.js +72 -4
  156. package/dist/resolution/index.js.map +1 -1
  157. package/dist/resolution/name-matcher.d.ts +22 -0
  158. package/dist/resolution/name-matcher.d.ts.map +1 -1
  159. package/dist/resolution/name-matcher.js +317 -20
  160. package/dist/resolution/name-matcher.js.map +1 -1
  161. package/dist/spec/config.d.ts +39 -0
  162. package/dist/spec/config.d.ts.map +1 -0
  163. package/dist/spec/config.js +304 -0
  164. package/dist/spec/config.js.map +1 -0
  165. package/dist/spec/db/commit-node.d.ts +23 -0
  166. package/dist/spec/db/commit-node.d.ts.map +1 -0
  167. package/dist/spec/db/commit-node.js +62 -0
  168. package/dist/spec/db/commit-node.js.map +1 -0
  169. package/dist/spec/db/fragment-node.d.ts +24 -0
  170. package/dist/spec/db/fragment-node.d.ts.map +1 -0
  171. package/dist/spec/db/fragment-node.js +128 -0
  172. package/dist/spec/db/fragment-node.js.map +1 -0
  173. package/dist/spec/db/fts.d.ts +74 -0
  174. package/dist/spec/db/fts.d.ts.map +1 -0
  175. package/dist/spec/db/fts.js +324 -0
  176. package/dist/spec/db/fts.js.map +1 -0
  177. package/dist/spec/db/index.d.ts +13 -0
  178. package/dist/spec/db/index.d.ts.map +1 -0
  179. package/dist/spec/db/index.js +50 -0
  180. package/dist/spec/db/index.js.map +1 -0
  181. package/dist/spec/db/relations.d.ts +55 -0
  182. package/dist/spec/db/relations.d.ts.map +1 -0
  183. package/dist/spec/db/relations.js +158 -0
  184. package/dist/spec/db/relations.js.map +1 -0
  185. package/dist/spec/db/schema.d.ts +33 -0
  186. package/dist/spec/db/schema.d.ts.map +1 -0
  187. package/dist/spec/db/schema.js +119 -0
  188. package/dist/spec/db/schema.js.map +1 -0
  189. package/dist/spec/db/schema.sql +117 -0
  190. package/dist/spec/db/spec-node.d.ts +41 -0
  191. package/dist/spec/db/spec-node.d.ts.map +1 -0
  192. package/dist/spec/db/spec-node.js +114 -0
  193. package/dist/spec/db/spec-node.js.map +1 -0
  194. package/dist/spec/evolve/impact-locator.d.ts +13 -0
  195. package/dist/spec/evolve/impact-locator.d.ts.map +1 -0
  196. package/dist/spec/evolve/impact-locator.js +25 -0
  197. package/dist/spec/evolve/impact-locator.js.map +1 -0
  198. package/dist/spec/evolve/llm-client.d.ts +50 -0
  199. package/dist/spec/evolve/llm-client.d.ts.map +1 -0
  200. package/dist/spec/evolve/llm-client.js +176 -0
  201. package/dist/spec/evolve/llm-client.js.map +1 -0
  202. package/dist/spec/evolve/logic-checker.d.ts +12 -0
  203. package/dist/spec/evolve/logic-checker.d.ts.map +1 -0
  204. package/dist/spec/evolve/logic-checker.js +24 -0
  205. package/dist/spec/evolve/logic-checker.js.map +1 -0
  206. package/dist/spec/evolve/pipeline.d.ts +42 -0
  207. package/dist/spec/evolve/pipeline.d.ts.map +1 -0
  208. package/dist/spec/evolve/pipeline.js +567 -0
  209. package/dist/spec/evolve/pipeline.js.map +1 -0
  210. package/dist/spec/evolve/spec-rewriter.d.ts +42 -0
  211. package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -0
  212. package/dist/spec/evolve/spec-rewriter.js +230 -0
  213. package/dist/spec/evolve/spec-rewriter.js.map +1 -0
  214. package/dist/spec/graph/queries.d.ts +155 -0
  215. package/dist/spec/graph/queries.d.ts.map +1 -0
  216. package/dist/spec/graph/queries.js +440 -0
  217. package/dist/spec/graph/queries.js.map +1 -0
  218. package/dist/spec/llm/client.d.ts +29 -0
  219. package/dist/spec/llm/client.d.ts.map +1 -0
  220. package/dist/spec/llm/client.js +123 -0
  221. package/dist/spec/llm/client.js.map +1 -0
  222. package/dist/spec/llm/index.d.ts +3 -0
  223. package/dist/spec/llm/index.d.ts.map +1 -0
  224. package/dist/spec/llm/index.js +11 -0
  225. package/dist/spec/llm/index.js.map +1 -0
  226. package/dist/spec/llm/prompts.d.ts +13 -0
  227. package/dist/spec/llm/prompts.d.ts.map +1 -0
  228. package/dist/spec/llm/prompts.js +75 -0
  229. package/dist/spec/llm/prompts.js.map +1 -0
  230. package/dist/spec/mining/diff-parser.d.ts +33 -0
  231. package/dist/spec/mining/diff-parser.d.ts.map +1 -0
  232. package/dist/spec/mining/diff-parser.js +166 -0
  233. package/dist/spec/mining/diff-parser.js.map +1 -0
  234. package/dist/spec/mining/git-scanner.d.ts +103 -0
  235. package/dist/spec/mining/git-scanner.d.ts.map +1 -0
  236. package/dist/spec/mining/git-scanner.js +307 -0
  237. package/dist/spec/mining/git-scanner.js.map +1 -0
  238. package/dist/spec/mining/pipeline.d.ts +53 -0
  239. package/dist/spec/mining/pipeline.d.ts.map +1 -0
  240. package/dist/spec/mining/pipeline.js +178 -0
  241. package/dist/spec/mining/pipeline.js.map +1 -0
  242. package/dist/spec/mining/scope-resolver.d.ts +45 -0
  243. package/dist/spec/mining/scope-resolver.d.ts.map +1 -0
  244. package/dist/spec/mining/scope-resolver.js +103 -0
  245. package/dist/spec/mining/scope-resolver.js.map +1 -0
  246. package/dist/spec/mining/spec-extractor.d.ts +69 -0
  247. package/dist/spec/mining/spec-extractor.d.ts.map +1 -0
  248. package/dist/spec/mining/spec-extractor.js +369 -0
  249. package/dist/spec/mining/spec-extractor.js.map +1 -0
  250. package/dist/spec/types.d.ts +149 -0
  251. package/dist/spec/types.d.ts.map +1 -0
  252. package/dist/spec/types.js +15 -0
  253. package/dist/spec/types.js.map +1 -0
  254. package/dist/spec/utils.d.ts +167 -0
  255. package/dist/spec/utils.d.ts.map +1 -0
  256. package/dist/spec/utils.js +463 -0
  257. package/dist/spec/utils.js.map +1 -0
  258. package/dist/sync/worktree.d.ts +9 -0
  259. package/dist/sync/worktree.d.ts.map +1 -1
  260. package/dist/sync/worktree.js +40 -0
  261. package/dist/sync/worktree.js.map +1 -1
  262. package/dist/types.d.ts +6 -1
  263. package/dist/types.d.ts.map +1 -1
  264. package/dist/ui/shimmer-progress.d.ts +2 -0
  265. package/dist/ui/shimmer-progress.d.ts.map +1 -1
  266. package/dist/ui/shimmer-progress.js +19 -2
  267. package/dist/ui/shimmer-progress.js.map +1 -1
  268. package/dist/upgrade/index.js +1 -1
  269. package/dist/upgrade/index.js.map +1 -1
  270. package/package.json +58 -57
  271. package/scripts/add-lang/bench.sh +60 -60
  272. package/scripts/add-lang/check-grammar.mjs +75 -75
  273. package/scripts/add-lang/dump-ast.mjs +103 -103
  274. package/scripts/add-lang/verify-extraction.mjs +70 -70
  275. package/scripts/agent-eval/ab-adoption.sh +91 -91
  276. package/scripts/agent-eval/ab-hook.sh +86 -86
  277. package/scripts/agent-eval/ab-impl.sh +78 -78
  278. package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -102
  279. package/scripts/agent-eval/ab-sufficiency.sh +78 -78
  280. package/scripts/agent-eval/arms-F.sh +21 -21
  281. package/scripts/agent-eval/arms-matrix.sh +37 -37
  282. package/scripts/agent-eval/audit.sh +68 -68
  283. package/scripts/agent-eval/bench-readme.sh +28 -28
  284. package/scripts/agent-eval/bench-why-repo.sh +22 -22
  285. package/scripts/agent-eval/block-read-hook.sh +19 -19
  286. package/scripts/agent-eval/hook-settings.json +15 -15
  287. package/scripts/agent-eval/itrun.sh +120 -120
  288. package/scripts/agent-eval/offload-eval-3arm.sh +72 -72
  289. package/scripts/agent-eval/offload-eval-cost.mjs +133 -133
  290. package/scripts/agent-eval/offload-eval-effort.mjs +108 -108
  291. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -25
  292. package/scripts/agent-eval/offload-eval-frontload.sh +47 -47
  293. package/scripts/agent-eval/offload-eval-ground-truth.json +18 -18
  294. package/scripts/agent-eval/offload-eval-hook.mjs +84 -84
  295. package/scripts/agent-eval/offload-eval-judge.mjs +103 -103
  296. package/scripts/agent-eval/offload-eval-matrix.sh +20 -20
  297. package/scripts/agent-eval/offload-eval-metrics.mjs +94 -94
  298. package/scripts/agent-eval/offload-eval-refs1.sh +50 -50
  299. package/scripts/agent-eval/offload-eval-setup.sh +24 -24
  300. package/scripts/agent-eval/offload-eval-styles.sh +71 -71
  301. package/scripts/agent-eval/offload-eval-summarize.mjs +68 -68
  302. package/scripts/agent-eval/offload-eval.md +76 -76
  303. package/scripts/agent-eval/parse-arms.mjs +116 -116
  304. package/scripts/agent-eval/parse-bench-readme.mjs +84 -84
  305. package/scripts/agent-eval/parse-run.mjs +45 -45
  306. package/scripts/agent-eval/parse-session.mjs +93 -93
  307. package/scripts/agent-eval/probe-context.mjs +21 -21
  308. package/scripts/agent-eval/probe-explore.mjs +40 -40
  309. package/scripts/agent-eval/probe-node.mjs +20 -20
  310. package/scripts/agent-eval/probe-sweep.mjs +119 -119
  311. package/scripts/agent-eval/probe-trace.mjs +20 -20
  312. package/scripts/agent-eval/redirect-read-hook.sh +38 -38
  313. package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -0
  314. package/scripts/agent-eval/repro-daemon-clients.mjs +125 -0
  315. package/scripts/agent-eval/run-agent.sh +34 -34
  316. package/scripts/agent-eval/run-all.sh +69 -69
  317. package/scripts/agent-eval/run-arms.sh +56 -56
  318. package/scripts/agent-eval/seq-matrix.mjs +137 -137
  319. package/scripts/build-bundle.sh +118 -118
  320. package/scripts/exp_boundary_eval/README.md +247 -0
  321. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-310.pyc +0 -0
  322. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-310.pyc +0 -0
  323. package/scripts/exp_boundary_eval/__pycache__/deveco_arm.cpython-310.pyc +0 -0
  324. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-310.pyc +0 -0
  325. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-310.pyc +0 -0
  326. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-310.pyc +0 -0
  327. package/scripts/exp_boundary_eval/_test_mcp_chain.py +78 -0
  328. package/scripts/exp_boundary_eval/_test_stdin.py +8 -0
  329. package/scripts/exp_boundary_eval/_utils.py +1116 -0
  330. package/scripts/exp_boundary_eval/analyze.py +1313 -0
  331. package/scripts/exp_boundary_eval/data/agents.json +109 -0
  332. package/scripts/exp_boundary_eval/data/experiments.json +140 -0
  333. package/scripts/exp_boundary_eval/deveco_arm.py +519 -0
  334. package/scripts/exp_boundary_eval/run_all.py +378 -0
  335. package/scripts/exp_boundary_eval/run_one.py +165 -0
  336. package/scripts/exp_boundary_eval/run_session.py +158 -0
  337. package/scripts/exp_boundary_eval/setup.py +120 -0
  338. package/scripts/exp_boundary_eval/win_mcp_launcher.py +73 -0
  339. package/scripts/exp_boundary_eval/win_mcp_stdio_wrap.js +36 -0
  340. package/scripts/exp_boundary_eval/win_node_launcher.py +24 -0
  341. package/scripts/extract-release-notes.mjs +130 -130
  342. package/scripts/local-install.sh +41 -41
  343. package/scripts/npm-sdk.js +75 -75
  344. package/scripts/npm-shim.js +268 -246
  345. package/scripts/ohos-sdk-publish.mjs +133 -0
  346. package/scripts/pack-npm.sh +119 -119
  347. package/scripts/prepare-release.mjs +270 -270
  348. package/scripts/qa_eval/README.md +407 -404
  349. package/scripts/qa_eval/_test_deveco_probe.py +41 -41
  350. package/scripts/qa_eval/agent_runner.py +526 -526
  351. package/scripts/qa_eval/data/.gitignore +4 -4
  352. package/scripts/qa_eval/data/test-set.jsonl +2 -22
  353. package/scripts/qa_eval/eval_metrics.py +274 -233
  354. package/scripts/qa_eval/external_agent.py +976 -671
  355. package/scripts/qa_eval/llm_config.py +92 -92
  356. package/scripts/qa_eval/memory_monitor.py +132 -132
  357. package/scripts/qa_eval/my_answer_accuracy.py +187 -187
  358. package/scripts/qa_eval/requirements.txt +2 -2
  359. package/scripts/qa_eval/run_pipeline.py +804 -711
  360. package/scripts/qa_eval/stats_efficiency.py +279 -279
  361. package/scripts/qa_eval/stats_scores.py +207 -207
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.evaluateSpec = evaluateSpec;
37
+ exports.applyUpdate = applyUpdate;
38
+ exports.applyDeprecate = applyDeprecate;
39
+ /**
40
+ * Spec rewriter — evaluates a commit's impact on a design spec and applies
41
+ * UPDATE / DEPRECATE decisions.
42
+ *
43
+ * Replaces `commit4spec/self_evolve/spec_rewriter.py` (lines 1-231).
44
+ *
45
+ * @module spec/evolve/spec-rewriter
46
+ */
47
+ const fs = __importStar(require("fs"));
48
+ const utils_1 = require("../utils");
49
+ const spec_node_1 = require("../db/spec-node");
50
+ const relations_1 = require("../db/relations");
51
+ const spec_extractor_1 = require("../mining/spec-extractor");
52
+ const prompts_1 = require("../llm/prompts");
53
+ const errors_1 = require("../../errors");
54
+ // =============================================================================
55
+ // evaluateSpec
56
+ // =============================================================================
57
+ /**
58
+ * Ask the LLM whether a commit requires updating, deprecating, or leaving
59
+ * a spec unchanged.
60
+ *
61
+ * @param specId - The spec identifier (for logging / context).
62
+ * @param specStoragePath - Root spec storage directory.
63
+ * @param specFilePath - Absolute path to the plan.md file.
64
+ * @param commitMessage - First line of the commit message.
65
+ * @param commitDiff - Full unified diff of the commit.
66
+ * @param scheduleNextSpecs - Remaining spec IDs to be processed (for context).
67
+ * @param client - Optional LLM client; if absent, returns UNCHANGED.
68
+ */
69
+ async function evaluateSpec(specId, _specStoragePath, specFilePath, commitMessage, commitDiff, scheduleNextSpecs, client) {
70
+ // 1. Read plan content
71
+ const planContent = (0, utils_1.readFileContent)(specFilePath);
72
+ if (planContent === null) {
73
+ (0, errors_1.logDebug)('evaluateSpec: plan file not found, returning UNCHANGED', {
74
+ specId,
75
+ specFilePath,
76
+ });
77
+ return { action: 'UNCHANGED' };
78
+ }
79
+ // 2. Truncate commitDiff to 6000 chars
80
+ const truncatedDiff = (0, utils_1.truncateText)(commitDiff, 6000);
81
+ // 3. Build user prompt
82
+ const userPrompt = (0, prompts_1.buildSpecEvaluationUserPrompt)(planContent, commitMessage, truncatedDiff, scheduleNextSpecs);
83
+ // 4. Call LLM
84
+ if (!client) {
85
+ (0, errors_1.logDebug)('evaluateSpec: no LLM client, returning UNCHANGED', { specId });
86
+ return { action: 'UNCHANGED' };
87
+ }
88
+ const result = await client.chatJson(prompts_1.SPEC_EVALUATION_SYSTEM_PROMPT, userPrompt);
89
+ // 5. Validate action
90
+ const rawAction = result.action;
91
+ let action = 'UNCHANGED';
92
+ if (rawAction === 'UPDATE' || rawAction === 'DEPRECATE' || rawAction === 'UNCHANGED') {
93
+ action = rawAction;
94
+ }
95
+ else {
96
+ (0, errors_1.logWarn)('evaluateSpec: unknown action from LLM, defaulting to UNCHANGED', {
97
+ specId,
98
+ rawAction: String(rawAction),
99
+ });
100
+ }
101
+ // 6. Return EvolveDecision
102
+ return {
103
+ action,
104
+ title: typeof result.title === 'string' ? result.title : undefined,
105
+ subtitles: Array.isArray(result.subtitles)
106
+ ? result.subtitles.filter((s) => typeof s === 'string')
107
+ : undefined,
108
+ plan_content: typeof result.plan_content === 'string' ? result.plan_content : undefined,
109
+ };
110
+ }
111
+ // =============================================================================
112
+ // applyUpdate
113
+ // =============================================================================
114
+ /**
115
+ * Apply an UPDATE decision: backup the old plan, write the new plan, version
116
+ * the spec in the database, and transfer relations.
117
+ *
118
+ * 10-step process (ported from spec_rewriter.py:79-178).
119
+ *
120
+ * @returns The new spec ID (same as old) and bumped version number.
121
+ */
122
+ function applyUpdate(db, specStoragePath, oldSpecId, oldFilePath, oldVersion, decision, commitHash) {
123
+ // ---- Step 1: Write new plan content to temp file ----
124
+ // We write to a temp file first so the original is preserved until every
125
+ // DB operation succeeds. If the caller's transaction rolls back, the
126
+ // temp file is harmless garbage — the original plan.md is untouched.
127
+ const tmpPath = oldFilePath + '.new';
128
+ (0, utils_1.writeFileContent)(tmpPath, decision.plan_content || '');
129
+ // ---- Step 2: Extract new metadata from the temp file ----
130
+ const metadata = (0, spec_extractor_1.extractSpecMetadata)(specStoragePath, oldSpecId);
131
+ const metadataTitle = metadata?.title;
132
+ const metadataSubtitles = metadata?.subtitles;
133
+ // ---- Step 3: Read old spec data ----
134
+ const oldSpec = (0, spec_node_1.findSpecById)(db, oldSpecId);
135
+ if (!oldSpec) {
136
+ (0, errors_1.logDebug)('applyUpdate: old spec not found in DB, returning early', {
137
+ oldSpecId,
138
+ });
139
+ // Clean up the temp file — no DB changes were made.
140
+ try {
141
+ fs.unlinkSync(tmpPath);
142
+ }
143
+ catch { /* best-effort */ }
144
+ return { newSpecId: oldSpecId, newVersion: oldVersion + 1 };
145
+ }
146
+ // ---- Step 4: Insert deprecated record ----
147
+ const bakPath = oldFilePath + '.bak';
148
+ const deprecatedId = `${oldSpecId}_v${oldVersion}`;
149
+ (0, spec_node_1.insertSpecNode)(db, {
150
+ id: deprecatedId,
151
+ title: oldSpec.title,
152
+ subtitles: oldSpec.subtitles,
153
+ status: 'deprecated',
154
+ version: oldVersion,
155
+ filePath: bakPath,
156
+ timestamp: Date.now(),
157
+ });
158
+ // ---- Step 5: Transfer relations from old active to deprecated ----
159
+ (0, relations_1.transferSpecCommitRelations)(db, oldSpecId, deprecatedId);
160
+ (0, relations_1.transferSpecSpecRelations)(db, oldSpecId, deprecatedId);
161
+ // ---- Step 6: Delete old active spec ----
162
+ (0, spec_node_1.deleteSpec)(db, oldSpecId);
163
+ // ---- Step 7: Insert new active spec ----
164
+ const newVersion = oldVersion + 1;
165
+ (0, spec_node_1.insertSpecNode)(db, {
166
+ id: oldSpecId,
167
+ title: decision.title || metadataTitle || oldSpecId,
168
+ subtitles: decision.subtitles || metadataSubtitles || [],
169
+ status: 'active',
170
+ version: newVersion,
171
+ filePath: oldFilePath,
172
+ timestamp: Date.now(),
173
+ });
174
+ // ---- Step 8: Create EVOLVED_FROM relation ----
175
+ (0, relations_1.insertSpecSpecRelation)(db, oldSpecId, deprecatedId, 'EVOLVED_FROM');
176
+ // ---- Step 9: Create GENERATE relation ----
177
+ (0, relations_1.insertSpecCommitRelation)(db, oldSpecId, commitHash, 'GENERATE');
178
+ // ---- Step 10: File system finalisation ----
179
+ // Only now — after all DB ops succeeded — do we touch the original disk
180
+ // files. rename() is atomic on the same filesystem.
181
+ try {
182
+ fs.renameSync(oldFilePath, bakPath);
183
+ }
184
+ catch {
185
+ (0, errors_1.logDebug)('applyUpdate: backup rename failed (file may be missing), continuing', {
186
+ oldFilePath,
187
+ bakPath,
188
+ });
189
+ }
190
+ try {
191
+ fs.renameSync(tmpPath, oldFilePath);
192
+ }
193
+ catch {
194
+ (0, errors_1.logDebug)('applyUpdate: temp rename failed, leaving .new in place', {
195
+ tmpPath,
196
+ oldFilePath,
197
+ });
198
+ }
199
+ return { newSpecId: oldSpecId, newVersion };
200
+ }
201
+ // =============================================================================
202
+ // applyDeprecate
203
+ // =============================================================================
204
+ /**
205
+ * Apply a DEPRECATE decision: mark the spec as deprecated, create a
206
+ * deprecated target node, create the EVOLVED_FROM relation, and clean
207
+ * SIMILAR_TO relations.
208
+ *
209
+ * Ported from spec_rewriter.py:181-231.
210
+ */
211
+ function applyDeprecate(db, oldSpecId) {
212
+ // 1. Mark the spec as deprecated
213
+ (0, spec_node_1.updateSpecStatus)(db, oldSpecId, 'deprecated');
214
+ // 2. Create deprecated target node
215
+ const deprecatedTargetId = `${oldSpecId}_deprecated`;
216
+ (0, spec_node_1.insertSpecNode)(db, {
217
+ id: deprecatedTargetId,
218
+ status: 'deprecated',
219
+ version: 1,
220
+ title: oldSpecId,
221
+ subtitles: [],
222
+ filePath: '', // Synthetic deprecated node — no on-disk file.
223
+ timestamp: Date.now(),
224
+ });
225
+ // 3. Create EVOLVED_FROM relation
226
+ (0, relations_1.insertSpecSpecRelation)(db, oldSpecId, deprecatedTargetId, 'EVOLVED_FROM');
227
+ // 4. Clean SIMILAR_TO relations
228
+ (0, relations_1.deleteSimilarToRelations)(db, oldSpecId);
229
+ }
230
+ //# sourceMappingURL=spec-rewriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-rewriter.js","sourceRoot":"","sources":["../../../src/spec/evolve/spec-rewriter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Graph traversal queries for the Spec→Commit→CodeFragment knowledge graph.
3
+ *
4
+ * Replaces `commit4spec/graph/queries.py`. Provides spec context retrieval,
5
+ * stats, and search+traverse functionality.
6
+ */
7
+ import { SqliteDatabase } from '../../db/sqlite-adapter';
8
+ import { SpecContext, SpecStats } from '../types';
9
+ /**
10
+ * Retrieve full context for a Spec — the spec node itself, all linked
11
+ * commits (with their relation types), and optionally the code fragments
12
+ * each commit touched.
13
+ *
14
+ * Commits are ordered by relation-type priority (GENERATE first, then
15
+ * SUMMARIZED_FROM, then others) and then by timestamp descending within
16
+ * each priority tier.
17
+ *
18
+ * @param db Active SQLite database handle.
19
+ * @param specId Spec identifier to look up.
20
+ * @param maxCommits Maximum number of linked commits to return (default 5).
21
+ * @param includeFragments Whether to load code fragments for each commit (default true).
22
+ * @returns SpecContext on success, or null when the spec is not found.
23
+ */
24
+ export declare function getSpecContext(db: SqliteDatabase, specId: string, maxCommits?: number, includeFragments?: boolean): SpecContext | null;
25
+ /**
26
+ * Find all spec IDs related to code fragments whose file path matches
27
+ * the given substring.
28
+ *
29
+ * @param db Active SQLite database handle.
30
+ * @param filePath File path substring to search for (LIKE-wrapped).
31
+ * @returns Array of distinct spec IDs.
32
+ */
33
+ export declare function findSpecsByFragmentPath(db: SqliteDatabase, filePath: string): string[];
34
+ /** Result container returned by findSpecsByFilePath. */
35
+ export interface FindSpecsByFilePathResult {
36
+ /** Matching spec entries (capped at maxResults). */
37
+ results: Array<{
38
+ id: string;
39
+ title: string;
40
+ status: string;
41
+ version: number;
42
+ filePath: string;
43
+ }>;
44
+ /** Number of results actually returned (<= maxResults). */
45
+ matched_count: number;
46
+ /** True when more results exist beyond the cap. */
47
+ truncated: boolean;
48
+ }
49
+ /**
50
+ * Find specs whose code fragments reference the given file path.
51
+ *
52
+ * Traverses: filePath -> code_fragment_nodes -> commit_fragment_relations
53
+ * -> commit_nodes -> spec_commit_relations -> spec_nodes.
54
+ *
55
+ * Uses LIKE matching against code_fragment_nodes.file_path, so partial
56
+ * paths work (e.g. `src/auth.ts` matches `src/auth/login.ts` and
57
+ * `app/src/auth.ts`). LIKE metacharacters (`%`, `_`, `\`) in the
58
+ * filePath are automatically escaped.
59
+ *
60
+ * An empty or whitespace-only filePath is rejected with an error
61
+ * (it would match every spec in the graph).
62
+ *
63
+ * @param db Active SQLite database handle.
64
+ * @param filePath File path to search for (substring LIKE match).
65
+ * @param maxResults Maximum number of results to return (default 100).
66
+ * @returns FindSpecsByFilePathResult with .results, .matched_count, and .truncated.
67
+ */
68
+ export declare function findSpecsByFilePath(db: SqliteDatabase, filePath: string, maxResults?: number): FindSpecsByFilePathResult;
69
+ /**
70
+ * Compute statistics about the Spec knowledge graph.
71
+ *
72
+ * @param db Active SQLite database handle.
73
+ * @returns SpecStats with entity counts and relation totals.
74
+ */
75
+ export declare function getSpecStats(db: SqliteDatabase): SpecStats;
76
+ /**
77
+ * Full-text search for specs and return full context for each match.
78
+ *
79
+ * Combines FTS5 + LIKE fallback search with graph traversal so callers
80
+ * get everything in one call: spec metadata, linked commits, and
81
+ * optionally code fragments.
82
+ *
83
+ * Results are sorted by `_score` descending, then by spec timestamp
84
+ * descending as a tiebreaker.
85
+ *
86
+ * @param db Active SQLite database handle.
87
+ * @param query Search query string.
88
+ * @param topK Maximum number of results to return (default 10).
89
+ * @param includeFragments Whether to load code fragments per commit (default true).
90
+ * @returns Array of SpecContext (null results filtered out).
91
+ */
92
+ export declare function searchAndGetContext(db: SqliteDatabase, query: string, topK?: number, includeFragments?: boolean): SpecContext[];
93
+ /**
94
+ * Metadata about a code entity for which we want to find associated Specs.
95
+ * Typically sourced from a homegraph.db ``nodes`` row.
96
+ */
97
+ export interface CodeEntityInfo {
98
+ name: string;
99
+ qualifiedName: string;
100
+ kind: string;
101
+ filePath: string;
102
+ startLine: number;
103
+ endLine: number;
104
+ }
105
+ /** A single scored match between a code entity and a Spec. */
106
+ export interface CodeEntitySpecMatch {
107
+ spec: {
108
+ id: string;
109
+ title: string;
110
+ status: string;
111
+ version: number;
112
+ filePath: string;
113
+ timestamp: number;
114
+ };
115
+ /** Five-dimension weighted score (0.0–1.0). */
116
+ score: number;
117
+ /** Score breakdown for transparency. */
118
+ scoreDetail: {
119
+ filePathScore: number;
120
+ contentScore: number;
121
+ nameScore: number;
122
+ recencyScore: number;
123
+ overlapScore: number;
124
+ };
125
+ /** Number of overlapping code fragments for this spec. */
126
+ fragmentCount: number;
127
+ /** Total commits linking this spec to the entity's file. */
128
+ commitCount: number;
129
+ }
130
+ /** Result container for findSpecsByCodeSymbol. */
131
+ export interface FindSpecsByCodeSymbolResult {
132
+ entity: CodeEntityInfo;
133
+ matches: CodeEntitySpecMatch[];
134
+ totalCandidates: number;
135
+ }
136
+ /**
137
+ * Find Specs associated with a code entity by multi-dimensional scoring:
138
+ *
139
+ * 1. File path match (weight 0.30) — most stable anchor; function rarely changes file
140
+ * 2. Code-diff content match via FTS5 (weight 0.25) — catches entity names in diff text
141
+ * that never appear in Spec titles
142
+ * 3. Spec title/subtitle name match via FTS5 (weight 0.15) — semantic alignment
143
+ * 4. Recency (weight 0.20) — newer Specs are more likely to describe current code
144
+ * 5. Line-range overlap (weight 0.10) — soft signal; code drifts over time
145
+ *
146
+ * All five dimensions contribute even when some are zero — a spec without line
147
+ * overlap can still rank first if its content/name/recency scores are high.
148
+ *
149
+ * @param specDb commit4spec.db connection
150
+ * @param entity Code entity info (from homegraph.db nodes)
151
+ * @param topK Maximum matches to return (default 10)
152
+ * @returns Ranked, scored matches with score breakdowns
153
+ */
154
+ export declare function findSpecsByCodeSymbol(specDb: SqliteDatabase, entity: CodeEntityInfo, topK?: number): FindSpecsByCodeSymbolResult;
155
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/spec/graph/queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAIL,WAAW,EAEX,SAAS,EACV,MAAM,UAAU,CAAC;AAoElB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAU,EACtB,gBAAgB,GAAE,OAAc,GAC/B,WAAW,GAAG,IAAI,CAyEpB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CAaV;AASD,wDAAwD;AACxD,MAAM,WAAW,yBAAyB;IACxC,oDAAoD;IACpD,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAsC,GACjD,yBAAyB,CAkD3B;AAGD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,SAAS,CAqD1D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAW,EACjB,gBAAgB,GAAE,OAAc,GAC/B,WAAW,EAAE,CAwBf;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,EAAE;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,kDAAkD;AAClD,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;CACzB;AAwBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,EACtB,IAAI,GAAE,MAAW,GAChB,2BAA2B,CA0J7B"}