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
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ /**
3
+ * Mining Git Scanner — AST-level diff parsing for the `spec mine` pipeline.
4
+ *
5
+ * For each commit in a range this module extracts changed files, AST-parses
6
+ * both the old and new versions, and computes symbol-level (structural) diffs.
7
+ * It reuses the existing `extractFromSource` and the git utilities from
8
+ * `spec/git`.
9
+ *
10
+ * @module spec/mine/scanner
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.scanCommits = scanCommits;
14
+ const child_process_1 = require("child_process");
15
+ const git_1 = require("../git");
16
+ const diff_parser_1 = require("../build/diff-parser");
17
+ const tree_sitter_1 = require("../../extraction/tree-sitter");
18
+ const grammars_1 = require("../../extraction/grammars");
19
+ const errors_1 = require("../../errors");
20
+ const query_utils_1 = require("../../search/query-utils");
21
+ // ---------------------------------------------------------------------------
22
+ // Helpers
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Retrieve file content at a specific commit using `git show <hash>:<path>`.
26
+ * Returns null when the file did not exist at that commit.
27
+ */
28
+ function getFileAtCommit(repoPath, commitHash, filePath) {
29
+ try {
30
+ return (0, child_process_1.execFileSync)('git', ['show', `${commitHash}:${filePath}`], (0, git_1.gitExecOptions)(repoPath));
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ /**
37
+ * Check whether a file can be structurally diffed.
38
+ *
39
+ * Delegates to the grammar system's `detectLanguage` + `isLanguageSupported`
40
+ * so the supported language set is always aligned — any language the grammar
41
+ * system supports is automatically supported here.
42
+ */
43
+ function isDiffableFile(filePath) {
44
+ return (0, grammars_1.isLanguageSupported)((0, grammars_1.detectLanguage)(filePath));
45
+ }
46
+ /**
47
+ * Compute a structural fingerprint from key AST-level properties.
48
+ * Captures signature, docstring, visibility, decorators, type parameters,
49
+ * and async/static/abstract modifiers — so content changes are detected
50
+ * even when line ranges happen to stay the same.
51
+ */
52
+ function computeFingerprint(node) {
53
+ const parts = [
54
+ node.kind,
55
+ node.signature ?? '',
56
+ node.docstring ?? '',
57
+ node.visibility ?? '',
58
+ node.isExported ? 'exported' : '',
59
+ node.isAsync ? 'async' : '',
60
+ node.isStatic ? 'static' : '',
61
+ node.isAbstract ? 'abstract' : '',
62
+ (node.decorators ?? []).join(','),
63
+ (node.typeParameters ?? []).join(','),
64
+ node.returnType ?? '',
65
+ ];
66
+ return parts.join('|');
67
+ }
68
+ /**
69
+ * Convert an ExtractionResult node to a simplified ChangedSymbol.
70
+ */
71
+ function nodeToSymbol(node) {
72
+ return {
73
+ kind: node.kind,
74
+ name: node.name,
75
+ qualifiedName: node.qualifiedName,
76
+ startLine: node.startLine,
77
+ endLine: node.endLine,
78
+ fingerprint: computeFingerprint(node),
79
+ signature: node.signature,
80
+ visibility: node.visibility,
81
+ };
82
+ }
83
+ /**
84
+ * Compare two sets of symbols (from old and new file versions) and produce
85
+ * added / removed / modified lists.
86
+ *
87
+ * Uses two-phase matching:
88
+ * 1. Exact match on qualifiedName + startLine — handles overloads and
89
+ * symbols that haven't moved.
90
+ * 2. For unmatched symbols, match by qualifiedName alone. When exactly one
91
+ * old and one new symbol share a qualifiedName they are treated as the
92
+ * same symbol that relocated (modified). N:M pairs are treated as
93
+ * genuine additions / removals (e.g. multiple overloads added / removed).
94
+ */
95
+ function compareSymbolSets(oldSymbols, newSymbols) {
96
+ // Phase 1: Exact match by qualifiedName + startLine.
97
+ const oldMap = new Map();
98
+ for (const s of oldSymbols)
99
+ oldMap.set(`${s.qualifiedName}:${s.startLine}`, s);
100
+ const newMap = new Map();
101
+ for (const s of newSymbols)
102
+ newMap.set(`${s.qualifiedName}:${s.startLine}`, s);
103
+ const added = [];
104
+ const removed = [];
105
+ const modified = [];
106
+ const matchedOldKeys = new Set();
107
+ for (const [key, newSym] of newMap) {
108
+ const oldSym = oldMap.get(key);
109
+ if (oldSym) {
110
+ matchedOldKeys.add(key);
111
+ if (oldSym.endLine !== newSym.endLine ||
112
+ oldSym.fingerprint !== newSym.fingerprint) {
113
+ modified.push({ old: oldSym, new: newSym });
114
+ }
115
+ }
116
+ }
117
+ // Phase 2: Handle relocated symbols (same qualifiedName, different startLine).
118
+ const unmatchedOld = [];
119
+ for (const [key, sym] of oldMap) {
120
+ if (!matchedOldKeys.has(key))
121
+ unmatchedOld.push(sym);
122
+ }
123
+ const unmatchedNew = [];
124
+ for (const [key, sym] of newMap) {
125
+ if (!oldMap.has(key))
126
+ unmatchedNew.push(sym);
127
+ }
128
+ // Group unmatched by qualifiedName
129
+ const oldByName = new Map();
130
+ for (const s of unmatchedOld) {
131
+ const arr = oldByName.get(s.qualifiedName);
132
+ if (arr)
133
+ arr.push(s);
134
+ else
135
+ oldByName.set(s.qualifiedName, [s]);
136
+ }
137
+ const newByName = new Map();
138
+ for (const s of unmatchedNew) {
139
+ const arr = newByName.get(s.qualifiedName);
140
+ if (arr)
141
+ arr.push(s);
142
+ else
143
+ newByName.set(s.qualifiedName, [s]);
144
+ }
145
+ // 1:1 pairs → relocated (modified). N:M → genuine add/remove.
146
+ for (const [qname, oldList] of oldByName) {
147
+ const newList = newByName.get(qname);
148
+ if (newList && oldList.length === 1 && newList.length === 1) {
149
+ modified.push({ old: oldList[0], new: newList[0] });
150
+ }
151
+ else {
152
+ for (const s of oldList)
153
+ removed.push(s);
154
+ }
155
+ }
156
+ // Remaining new symbols are genuine additions
157
+ for (const [qname, newList] of newByName) {
158
+ const oldList = oldByName.get(qname);
159
+ if (!oldList || oldList.length !== 1 || newList.length !== 1) {
160
+ for (const s of newList)
161
+ added.push(s);
162
+ }
163
+ }
164
+ return { added, removed, modified };
165
+ }
166
+ /**
167
+ * Node kinds that carry structural design intent and are tracked as
168
+ * significant changes during commit scanning.
169
+ *
170
+ * - OOP/data containers: class, struct, trait, interface, protocol
171
+ * - Behaviour: function, method, component
172
+ * - Type system: type_alias, enum
173
+ * - Data: variable, constant
174
+ * - Organisation: namespace, module
175
+ * - Web API surface: route
176
+ */
177
+ const SIGNIFICANT_KINDS = new Set([
178
+ 'function', 'class', 'method', 'interface', 'type_alias',
179
+ 'struct', 'trait', 'protocol', 'route', 'module',
180
+ 'variable', 'constant', 'enum', 'component', 'namespace',
181
+ ]);
182
+ function extractSignificantSymbols(result) {
183
+ const symbols = [];
184
+ for (const node of result.nodes) {
185
+ if (SIGNIFICANT_KINDS.has(node.kind)) {
186
+ symbols.push(nodeToSymbol(node));
187
+ }
188
+ }
189
+ return symbols;
190
+ }
191
+ // ---------------------------------------------------------------------------
192
+ // Public API
193
+ // ---------------------------------------------------------------------------
194
+ /**
195
+ * Conventional commit prefix regex.
196
+ * Matches: type[(scope)][!]: description
197
+ * Kept groups: feat, fix, refactor, chore, docs, test, style, build, ci, perf, revert
198
+ */
199
+ const CONVENTIONAL_PREFIX = /^(feat|fix|refactor|chore|docs|test|style|build|ci|perf|revert)(?:\([^)]*\))?[!]?:\s/;
200
+ /** Conventional commit types that involve source-code structural changes
201
+ * and may carry design intent worth documenting as a spec. */
202
+ const DESIGN_RELEVANT_TYPES = new Set([
203
+ 'feat',
204
+ 'fix',
205
+ 'refactor',
206
+ 'perf',
207
+ ]);
208
+ /**
209
+ * Git-generated mechanical-commit prefixes that carry no design intent.
210
+ *
211
+ * - `Revert "..."` — `git revert` undo commits
212
+ * - `Reapply "..."` — cherry-pick re-application of a previously reverted commit
213
+ */
214
+ const MECHANICAL_COMMIT_PREFIX = /^(Revert|Reapply)\s+"/;
215
+ /**
216
+ * Determine whether a commit message represents a design-relevant change.
217
+ *
218
+ * Filtered out:
219
+ * - Git-generated mechanical commits (Revert / Reapply).
220
+ * - Conventional-commit types that rarely introduce new symbols or material
221
+ * design intent: chore, docs, test, style, build, ci, revert.
222
+ *
223
+ * Kept:
224
+ * - Conventional-commit types with structural source-code impact:
225
+ * feat, fix, refactor, perf.
226
+ * - Non-conventional messages (no prefix match) — conservatively treated as
227
+ * unstructured feature work.
228
+ */
229
+ function isDesignRelevant(message) {
230
+ // Git mechanical commits (Revert / Reapply) — no design intent
231
+ if (MECHANICAL_COMMIT_PREFIX.test(message))
232
+ return false;
233
+ const m = message.match(CONVENTIONAL_PREFIX);
234
+ if (!m)
235
+ return true; // Non-standard format — keep
236
+ return DESIGN_RELEVANT_TYPES.has(m[1]);
237
+ }
238
+ /**
239
+ * Scan commits in a range and produce AST-level structural change data.
240
+ *
241
+ * @param repoPath - Path to the git repository.
242
+ * @param fromHash - Starting commit hash (exclusive). Use empty string for root.
243
+ * @param toHash - Ending commit hash (inclusive), typically 'HEAD'.
244
+ * @param limit - If set, only the most recent N commits are processed.
245
+ * @param onProgress - Optional progress callback (called per commit).
246
+ * @returns Aggregated AST change data for each commit.
247
+ */
248
+ function scanCommits(repoPath, fromHash, toHash, limit, onProgress) {
249
+ let commits;
250
+ if (fromHash) {
251
+ commits = (0, git_1.getCommitRange)(repoPath, fromHash, toHash);
252
+ }
253
+ else {
254
+ // No anchor — get all commits reachable from toHash.
255
+ commits = (0, git_1.getCommitsUpTo)(repoPath, toHash);
256
+ }
257
+ if (commits.length === 0)
258
+ return [];
259
+ // Apply limit — take most recent commits
260
+ if (limit !== undefined && limit > 0 && commits.length > limit) {
261
+ commits = commits.slice(commits.length - limit);
262
+ }
263
+ // Filter to design-relevant commits (feat / fix / refactor / perf) for
264
+ // conventional-commit messages. Non-conventional messages are kept.
265
+ const before = commits.length;
266
+ commits = commits.filter((c) => isDesignRelevant(c.message));
267
+ const skipped = before - commits.length;
268
+ if (skipped > 0) {
269
+ (0, errors_1.logDebug)('Mine scan: filtered non-design commits', {
270
+ kept: commits.length,
271
+ skipped,
272
+ });
273
+ }
274
+ const changes = [];
275
+ let parseErrorCount = 0;
276
+ const totalCommits = commits.length;
277
+ for (let ci = 0; ci < commits.length; ci++) {
278
+ const commit = commits[ci];
279
+ onProgress?.({
280
+ phase: 'scanning',
281
+ current: ci + 1,
282
+ total: totalCommits,
283
+ message: `${commit.hash.slice(0, 7)} ${commit.message.slice(0, 30)}`,
284
+ });
285
+ (0, errors_1.logDebug)('Mine scan: processing commit', {
286
+ hash: commit.hash.slice(0, 7),
287
+ message: commit.message,
288
+ });
289
+ const parents = (0, git_1.getParentHashes)(repoPath, commit.hash);
290
+ const parentHashes = parents.length > 0 ? parents : [null];
291
+ // Collect file changes from all parents, deduplicating by file path.
292
+ // Each file uses the first parent that includes it for old-content retrieval.
293
+ const seenFiles = new Set();
294
+ const fileChanges = [];
295
+ for (const parentHash of parentHashes) {
296
+ let diff;
297
+ try {
298
+ if (parentHash) {
299
+ diff = (0, child_process_1.execFileSync)('git', ['diff', parentHash, commit.hash], (0, git_1.gitExecOptions)(repoPath));
300
+ }
301
+ else {
302
+ diff = (0, child_process_1.execFileSync)('git', ['diff', commit.hash], (0, git_1.gitExecOptions)(repoPath));
303
+ }
304
+ }
305
+ catch {
306
+ continue;
307
+ }
308
+ if (!diff)
309
+ continue;
310
+ const changedFiles = (0, diff_parser_1.listChangedFiles)(diff)
311
+ .filter(isDiffableFile)
312
+ .filter((fp) => !(0, query_utils_1.isTestFile)(fp))
313
+ .filter((fp) => !seenFiles.has(fp));
314
+ for (const filePath of changedFiles) {
315
+ seenFiles.add(filePath);
316
+ try {
317
+ const oldContent = parentHash
318
+ ? getFileAtCommit(repoPath, parentHash, filePath)
319
+ : null;
320
+ const newContent = getFileAtCommit(repoPath, commit.hash, filePath);
321
+ if (newContent === null) {
322
+ // File was deleted — no new version to parse
323
+ if (oldContent !== null) {
324
+ const oldResult = (0, tree_sitter_1.extractFromSource)(filePath, oldContent);
325
+ const oldSymbols = extractSignificantSymbols(oldResult);
326
+ fileChanges.push({
327
+ filePath,
328
+ language: (0, grammars_1.detectLanguage)(filePath, oldContent),
329
+ addedSymbols: [],
330
+ removedSymbols: oldSymbols,
331
+ modifiedSymbols: [],
332
+ });
333
+ }
334
+ continue;
335
+ }
336
+ const language = (0, grammars_1.detectLanguage)(filePath, newContent);
337
+ const newResult = (0, tree_sitter_1.extractFromSource)(filePath, newContent);
338
+ const newSymbols = extractSignificantSymbols(newResult);
339
+ if (oldContent === null) {
340
+ // New file — all symbols are added
341
+ fileChanges.push({
342
+ filePath,
343
+ language,
344
+ addedSymbols: newSymbols,
345
+ removedSymbols: [],
346
+ modifiedSymbols: [],
347
+ isNewFile: true,
348
+ });
349
+ continue;
350
+ }
351
+ const oldResult = (0, tree_sitter_1.extractFromSource)(filePath, oldContent);
352
+ const oldSymbols = extractSignificantSymbols(oldResult);
353
+ const { added, removed, modified } = compareSymbolSets(oldSymbols, newSymbols);
354
+ if (added.length > 0 || removed.length > 0 || modified.length > 0) {
355
+ fileChanges.push({
356
+ filePath,
357
+ language,
358
+ addedSymbols: added,
359
+ removedSymbols: removed,
360
+ modifiedSymbols: modified,
361
+ });
362
+ }
363
+ }
364
+ catch (err) {
365
+ parseErrorCount++;
366
+ (0, errors_1.logWarn)(`Mine scan: error parsing ${filePath} in commit ${commit.hash.slice(0, 7)}`, {
367
+ error: err instanceof Error ? err.message : String(err),
368
+ });
369
+ }
370
+ }
371
+ }
372
+ changes.push({
373
+ commitHash: commit.hash,
374
+ commitMessage: commit.message,
375
+ author: commit.author,
376
+ timestamp: commit.timestamp,
377
+ fileChanges,
378
+ });
379
+ }
380
+ (0, errors_1.logDebug)('Mine scan: parse errors', { parseErrorCount });
381
+ return changes;
382
+ }
383
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/spec/mine/scanner.ts"],"names":[],"mappings":"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"}
@@ -85,6 +85,7 @@ export interface SpecCommitRelation {
85
85
  export interface CommitFragmentRelation {
86
86
  commitHash: string;
87
87
  fragmentId: string;
88
+ relationType: RelationType;
88
89
  }
89
90
  /**
90
91
  * A link between two Specs.
@@ -120,6 +121,37 @@ export interface CommitReference {
120
121
  message: string;
121
122
  timestamp: number;
122
123
  }
124
+ /** Per-commit summary within a cluster context. */
125
+ export interface CommitSummary {
126
+ /** Full commit hash (40 chars) — used for git operations like getCommitDiff. */
127
+ fullHash: string;
128
+ /** Short hash (7 chars) — used for display in LLM prompts. */
129
+ shortHash: string;
130
+ /** First line of commit message. */
131
+ message: string;
132
+ /** Changed file paths. */
133
+ changedFiles: string[];
134
+ /** Aggregated and truncated diff for this commit (populated by caller). */
135
+ truncatedDiff: string;
136
+ }
137
+ /**
138
+ * Cluster-level context for LLM spec evaluation — aggregated summaries of a
139
+ * group of commits affecting the same spec.
140
+ */
141
+ export interface ClusterContext {
142
+ /** Number of commits in the cluster. */
143
+ commitCount: number;
144
+ /** Individual commit summaries. */
145
+ commitSummaries: CommitSummary[];
146
+ /** Top-N most frequently changed files across all commits. */
147
+ primaryFiles: string[];
148
+ }
149
+ /** Minimal info about a commit needed to build the cluster context. */
150
+ export interface CommitContextInput {
151
+ commitHash: string;
152
+ message?: string;
153
+ filePaths: string[];
154
+ }
123
155
  /**
124
156
  * A search result for a spec with scoring metadata.
125
157
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/spec/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/spec/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Presentation layer for the spec module — progress types and renderers
3
+ * shared by the build / mine / evolve pipelines and the CLI.
4
+ *
5
+ * @module spec/ui
6
+ */
7
+ export type { ProgressTick, ProgressCallback } from './progress';
8
+ export { createProgressHandler, createMineProgressHandler, createBuildProgressHandler, MINE_PHASE_LABELS, BUILD_PHASE_LABELS, } from './progress-handler';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spec/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * Presentation layer for the spec module — progress types and renderers
4
+ * shared by the build / mine / evolve pipelines and the CLI.
5
+ *
6
+ * @module spec/ui
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.BUILD_PHASE_LABELS = exports.MINE_PHASE_LABELS = exports.createBuildProgressHandler = exports.createMineProgressHandler = exports.createProgressHandler = void 0;
10
+ var progress_handler_1 = require("./progress-handler");
11
+ Object.defineProperty(exports, "createProgressHandler", { enumerable: true, get: function () { return progress_handler_1.createProgressHandler; } });
12
+ Object.defineProperty(exports, "createMineProgressHandler", { enumerable: true, get: function () { return progress_handler_1.createMineProgressHandler; } });
13
+ Object.defineProperty(exports, "createBuildProgressHandler", { enumerable: true, get: function () { return progress_handler_1.createBuildProgressHandler; } });
14
+ Object.defineProperty(exports, "MINE_PHASE_LABELS", { enumerable: true, get: function () { return progress_handler_1.MINE_PHASE_LABELS; } });
15
+ Object.defineProperty(exports, "BUILD_PHASE_LABELS", { enumerable: true, get: function () { return progress_handler_1.BUILD_PHASE_LABELS; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/spec/ui/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,uDAM4B;AAL1B,yHAAA,qBAAqB,OAAA;AACrB,6HAAA,yBAAyB,OAAA;AACzB,8HAAA,0BAA0B,OAAA;AAC1B,qHAAA,iBAAiB,OAAA;AACjB,sHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Progress handler factory for the spec pipelines.
3
+ *
4
+ * Provides two rendering strategies for `ProgressCallback`:
5
+ *
6
+ * - **bar** — ANSI-based single-line progress bar with phase label and
7
+ * item-level detail. Intended for interactive TTY sessions.
8
+ * - **verbose** — plain-text lines with elapsed timestamps. Identical in
9
+ * style to `createVerboseProgress()` used by the indexing pipeline.
10
+ * Intended for `--verbose` mode and non-TTY (pipe) output.
11
+ *
12
+ * Phase label tables for the known pipelines live here too — labels are a
13
+ * presentation concern and belong with the renderer.
14
+ *
15
+ * @module spec/ui/progress-handler
16
+ */
17
+ import type { ProgressCallback } from './progress';
18
+ /** Phase labels for `spec mine`. */
19
+ export declare const MINE_PHASE_LABELS: Record<string, string>;
20
+ /** Phase labels for `spec build`. */
21
+ export declare const BUILD_PHASE_LABELS: Record<string, string>;
22
+ /**
23
+ * Create a progress handler for a spec pipeline.
24
+ *
25
+ * @param mode - `'bar'` for ANSI progress bar (TTY), `'verbose'` for text lines.
26
+ * @param labels - phase → padded label map used by bar mode.
27
+ */
28
+ export declare function createProgressHandler(mode: 'bar' | 'verbose', labels: Record<string, string>): ProgressCallback;
29
+ /** Create a progress handler with the `spec mine` phase labels. */
30
+ export declare function createMineProgressHandler(mode: 'bar' | 'verbose'): ProgressCallback;
31
+ /** Create a progress handler with the `spec build` phase labels. */
32
+ export declare function createBuildProgressHandler(mode: 'bar' | 'verbose'): ProgressCallback;
33
+ //# sourceMappingURL=progress-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-handler.d.ts","sourceRoot":"","sources":["../../../src/spec/ui/progress-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,YAAY,CAAC;AAMjE,oCAAoC;AACpC,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIrD,CAAC;AAqFF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,KAAK,GAAG,SAAS,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,gBAAgB,CAKlB;AAED,mEAAmE;AACnE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,gBAAgB,CAEnF;AAED,oEAAoE;AACpE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,gBAAgB,CAEpF"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ /**
3
+ * Progress handler factory for the spec pipelines.
4
+ *
5
+ * Provides two rendering strategies for `ProgressCallback`:
6
+ *
7
+ * - **bar** — ANSI-based single-line progress bar with phase label and
8
+ * item-level detail. Intended for interactive TTY sessions.
9
+ * - **verbose** — plain-text lines with elapsed timestamps. Identical in
10
+ * style to `createVerboseProgress()` used by the indexing pipeline.
11
+ * Intended for `--verbose` mode and non-TTY (pipe) output.
12
+ *
13
+ * Phase label tables for the known pipelines live here too — labels are a
14
+ * presentation concern and belong with the renderer.
15
+ *
16
+ * @module spec/ui/progress-handler
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.BUILD_PHASE_LABELS = exports.MINE_PHASE_LABELS = void 0;
20
+ exports.createProgressHandler = createProgressHandler;
21
+ exports.createMineProgressHandler = createMineProgressHandler;
22
+ exports.createBuildProgressHandler = createBuildProgressHandler;
23
+ // ---------------------------------------------------------------------------
24
+ // Phase labels (presentation concern — owned by the UI layer)
25
+ // ---------------------------------------------------------------------------
26
+ /** Phase labels for `spec mine`. */
27
+ exports.MINE_PHASE_LABELS = {
28
+ scanning: 'Scanning commits ',
29
+ clustering: 'Clustering ',
30
+ generating: 'Generating specs ',
31
+ persisting: 'Persisting to DB ',
32
+ done: ' ',
33
+ };
34
+ /** Phase labels for `spec build`. */
35
+ exports.BUILD_PHASE_LABELS = {
36
+ scanning: 'Scanning commits ',
37
+ persisting: 'Building graph ',
38
+ done: ' ',
39
+ };
40
+ // ---------------------------------------------------------------------------
41
+ // Bar mode
42
+ // ---------------------------------------------------------------------------
43
+ /** Width of the progress bar portion (excluding label and counters). */
44
+ const BAR_WIDTH = 20;
45
+ function createBarHandler(labels) {
46
+ let lastPhase = '';
47
+ return (p) => {
48
+ if (p.phase === 'done') {
49
+ // Print a trailing newline so the last progress bar stays visible
50
+ // and subsequent CLI output (success/info lines) starts on a fresh line.
51
+ if (process.stdout.isTTY)
52
+ process.stdout.write('\n');
53
+ return;
54
+ }
55
+ if (p.phase !== lastPhase) {
56
+ lastPhase = p.phase;
57
+ // Print a newline when phase changes (previous bar stays visible briefly)
58
+ if (process.stdout.isTTY)
59
+ process.stdout.write('\n');
60
+ }
61
+ const label = labels[p.phase] || p.phase;
62
+ const total = p.total > 0 ? p.total : 0;
63
+ const current = p.current;
64
+ let bar;
65
+ if (total === 0) {
66
+ // Indeterminate — spinner-like effect
67
+ bar = '—'.repeat(BAR_WIDTH);
68
+ }
69
+ else {
70
+ const filled = Math.round((current / total) * BAR_WIDTH);
71
+ bar = '█'.repeat(filled) + '░'.repeat(BAR_WIDTH - filled);
72
+ }
73
+ const counter = total > 0 ? ` ${String(current).padStart(String(total).length, ' ')}/${total}` : '';
74
+ const msg = p.message ? ` ${p.message}` : '';
75
+ const line = `${label} [${bar}]${counter}${msg}`;
76
+ process.stdout.write(`\r\x1b[K${line}`);
77
+ };
78
+ }
79
+ // ---------------------------------------------------------------------------
80
+ // Verbose mode
81
+ // ---------------------------------------------------------------------------
82
+ function createVerboseHandler() {
83
+ const startTime = Date.now();
84
+ let lastPhase = '';
85
+ let lastPct = -1;
86
+ return (p) => {
87
+ if (p.phase === 'done')
88
+ return;
89
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
90
+ if (p.phase !== lastPhase) {
91
+ lastPhase = p.phase;
92
+ lastPct = -1;
93
+ console.log(`[${elapsed}s] Phase: ${p.phase}`);
94
+ }
95
+ if (p.total > 0) {
96
+ const pct = Math.floor((p.current / p.total) * 100);
97
+ if (pct >= lastPct + 5 || p.current === p.total) {
98
+ lastPct = pct;
99
+ const msg = p.message ? ` · ${p.message}` : '';
100
+ console.log(`[${elapsed}s] ${p.current}/${p.total} (${pct}%)${msg}`);
101
+ }
102
+ }
103
+ else if (p.message) {
104
+ // Phase-level message without item counts (clustering, etc.)
105
+ console.log(`[${elapsed}s] ${p.message}`);
106
+ }
107
+ };
108
+ }
109
+ // ---------------------------------------------------------------------------
110
+ // Factory
111
+ // ---------------------------------------------------------------------------
112
+ /**
113
+ * Create a progress handler for a spec pipeline.
114
+ *
115
+ * @param mode - `'bar'` for ANSI progress bar (TTY), `'verbose'` for text lines.
116
+ * @param labels - phase → padded label map used by bar mode.
117
+ */
118
+ function createProgressHandler(mode, labels) {
119
+ if (mode === 'bar' && process.stdout.isTTY) {
120
+ return createBarHandler(labels);
121
+ }
122
+ return createVerboseHandler();
123
+ }
124
+ /** Create a progress handler with the `spec mine` phase labels. */
125
+ function createMineProgressHandler(mode) {
126
+ return createProgressHandler(mode, exports.MINE_PHASE_LABELS);
127
+ }
128
+ /** Create a progress handler with the `spec build` phase labels. */
129
+ function createBuildProgressHandler(mode) {
130
+ return createProgressHandler(mode, exports.BUILD_PHASE_LABELS);
131
+ }
132
+ //# sourceMappingURL=progress-handler.js.map