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,236 @@
1
+ "use strict";
2
+ /**
3
+ * Mine Pipeline — orchestrates the `spec mine` flow.
4
+ *
5
+ * Three-stage pipeline:
6
+ * 1. Scan commits (AST-level diff extraction)
7
+ * 2. Cluster commits (multi-signal graph clustering)
8
+ * 3. Generate specs (LLM-driven spec documents)
9
+ *
10
+ * Integrates with the existing meta.json anchor for incremental runs.
11
+ *
12
+ * @module spec/mine/pipeline
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.runMinePipeline = runMinePipeline;
49
+ const path = __importStar(require("path"));
50
+ const git_1 = require("../git");
51
+ const factory_1 = require("../llm/factory");
52
+ const utils_1 = require("../utils");
53
+ const scanner_1 = require("./scanner");
54
+ const clustering_1 = require("./clustering");
55
+ const generator_1 = require("./generator");
56
+ const errors_1 = require("../../errors");
57
+ const persist_1 = require("./persist");
58
+ // ---------------------------------------------------------------------------
59
+ // Pipeline
60
+ // ---------------------------------------------------------------------------
61
+ /**
62
+ * Run the full reverse-spec pipeline.
63
+ *
64
+ * @param repoPath - Path to the git repository.
65
+ * @param config - Reverse pipeline configuration.
66
+ * @param llmConfig - LLM configuration (may be null when a coding agent
67
+ * — Claude Code / Codex — is available, or when skipLlm is true).
68
+ * @param db - Optional SQLite database handle for persistence.
69
+ * @param onProgress - Optional progress callback for real-time feedback.
70
+ * @returns Pipeline result with stats.
71
+ */
72
+ async function runMinePipeline(repoPath, config, llmConfig, db = null, onProgress) {
73
+ const errors = [];
74
+ // 1. Validate git repo
75
+ if (!(0, git_1.isGitRepo)(repoPath)) {
76
+ throw new Error(`Not a git repository: ${repoPath}`);
77
+ }
78
+ const headHash = (0, git_1.getHeadHash)(repoPath);
79
+ if (!headHash) {
80
+ throw new Error(`No HEAD commit found in ${repoPath}`);
81
+ }
82
+ // 2. Resolve commit range from meta.json
83
+ let fromHash = '';
84
+ const meta = (0, utils_1.readMeta)(repoPath);
85
+ if (meta?.currentCommitID) {
86
+ if ((0, git_1.isAncestor)(repoPath, meta.currentCommitID, headHash)) {
87
+ // Normal incremental case
88
+ fromHash = meta.currentCommitID;
89
+ (0, errors_1.logDebug)('Mine pipeline: incremental range', {
90
+ from: fromHash.slice(0, 7),
91
+ to: headHash.slice(0, 7),
92
+ });
93
+ }
94
+ else {
95
+ // Rebase detected — full scan
96
+ (0, errors_1.logWarn)('Mine pipeline: meta.json currentCommitID is not an ancestor of HEAD (possible rebase). Falling back to full scan.', {
97
+ metaCommit: meta.currentCommitID.slice(0, 7),
98
+ head: headHash.slice(0, 7),
99
+ });
100
+ fromHash = '';
101
+ }
102
+ }
103
+ else {
104
+ (0, errors_1.logDebug)('Mine pipeline: no meta.json anchor — full scan');
105
+ }
106
+ // 3. Scan commits (AST-level diff)
107
+ onProgress?.({ phase: 'scanning', current: 0, total: 0, message: 'Starting...' });
108
+ const changes = (0, scanner_1.scanCommits)(repoPath, fromHash, headHash, config.limit, onProgress);
109
+ if (changes.length === 0) {
110
+ onProgress?.({ phase: 'done', current: 1, total: 1 });
111
+ return {
112
+ commitsScanned: 0,
113
+ changesFound: 0,
114
+ clusters: 0,
115
+ specsGenerated: 0,
116
+ skippedClusters: 0,
117
+ specsWritten: 0,
118
+ commitsWritten: 0,
119
+ fragmentsWritten: 0,
120
+ relationsWritten: 0,
121
+ errors: ['No commits found in range.'],
122
+ };
123
+ }
124
+ const changesWithData = changes.filter((c) => c.fileChanges.length > 0);
125
+ if (changesWithData.length === 0) {
126
+ onProgress?.({ phase: 'done', current: 1, total: 1 });
127
+ return {
128
+ commitsScanned: changes.length,
129
+ changesFound: 0,
130
+ clusters: 0,
131
+ specsGenerated: 0,
132
+ skippedClusters: 0,
133
+ specsWritten: 0,
134
+ commitsWritten: 0,
135
+ fragmentsWritten: 0,
136
+ relationsWritten: 0,
137
+ errors: [`Scanned ${changes.length} commit(s) but none had structural changes.`],
138
+ };
139
+ }
140
+ (0, errors_1.logDebug)('Mine pipeline: scanning complete', {
141
+ totalCommits: changes.length,
142
+ commitsWithChanges: changesWithData.length,
143
+ });
144
+ // 4. Cluster commits (synchronous — one-shot; no per-item counting)
145
+ const clusterResult = (0, clustering_1.clusterCommits)(changesWithData, config.threshold, config.maxCluster);
146
+ onProgress?.({
147
+ phase: 'clustering',
148
+ current: 0,
149
+ total: 0,
150
+ message: `${changesWithData.length} commits → ${clusterResult.clusters.length} clusters`,
151
+ });
152
+ (0, errors_1.logDebug)('Mine pipeline: clustering complete', clusterResult.stats);
153
+ // 5. Generate specs (optional)
154
+ let specsGenerated = 0;
155
+ let skippedClusters = 0;
156
+ let specsWritten = 0;
157
+ let commitsWritten = 0;
158
+ let fragmentsWritten = 0;
159
+ let relationsWritten = 0;
160
+ let shouldAdvanceMeta = false;
161
+ const client = config.skipLlm ? undefined : (0, factory_1.createSpecLlmClient)(llmConfig);
162
+ if (!config.skipLlm && client) {
163
+ // Read custom template if provided
164
+ let templateContent;
165
+ if (config.template) {
166
+ try {
167
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
168
+ templateContent = fs.readFileSync(path.resolve(config.template), 'utf-8');
169
+ }
170
+ catch (err) {
171
+ (0, errors_1.logWarn)('Failed to read template file — using built-in template', {
172
+ template: config.template,
173
+ error: err instanceof Error ? err.message : String(err),
174
+ });
175
+ }
176
+ }
177
+ const genResult = await (0, generator_1.generateSpecs)(clusterResult.clusters, client, config.outputDir, templateContent, onProgress);
178
+ specsGenerated = genResult.specs.length;
179
+ skippedClusters = genResult.skipped + genResult.errors;
180
+ if (genResult.errors > 0) {
181
+ errors.push(`${genResult.errors} LLM generation(s) failed.`);
182
+ }
183
+ // 6. Persist specs to knowledge graph
184
+ let persistFailed = false;
185
+ if (db && genResult.specs.length > 0) {
186
+ try {
187
+ const persistResult = (0, persist_1.persistToGraph)(db, repoPath, genResult.specs, clusterResult.clusters, config.outputDir, onProgress);
188
+ specsWritten = persistResult.specsWritten;
189
+ commitsWritten = persistResult.commitsWritten;
190
+ fragmentsWritten = persistResult.fragmentsWritten;
191
+ relationsWritten = persistResult.relationsWritten;
192
+ (0, errors_1.logDebug)('Mine pipeline: persisted to graph', { ...persistResult });
193
+ }
194
+ catch (err) {
195
+ persistFailed = true;
196
+ errors.push(`Failed to persist specs to graph: ${err instanceof Error ? err.message : String(err)}`);
197
+ }
198
+ }
199
+ // Advance meta.json only when LLM ran, persistence did not fail,
200
+ // and at least one spec document was generated.
201
+ if (!persistFailed && genResult.specs.length > 0) {
202
+ shouldAdvanceMeta = true;
203
+ }
204
+ }
205
+ else if (!config.skipLlm && !client) {
206
+ errors.push('LLM generation skipped — no coding agent (Claude Code / Codex) detected and no LLM configuration found. Set up llm in configs.json or use --skip-llm.');
207
+ }
208
+ // 7. Update meta.json — only advance when specs were successfully generated
209
+ // and persisted. With skipLlm or no LLM config, skip advancing so the
210
+ // same commits are re-scanned when LLM is available.
211
+ if (shouldAdvanceMeta) {
212
+ try {
213
+ (0, utils_1.writeMeta)(repoPath, config.outputDir, headHash);
214
+ (0, errors_1.logDebug)('Mine pipeline: updated meta.json', {
215
+ currentCommitID: headHash.slice(0, 7),
216
+ });
217
+ }
218
+ catch (err) {
219
+ errors.push(`Failed to update meta.json: ${err instanceof Error ? err.message : String(err)}`);
220
+ }
221
+ }
222
+ onProgress?.({ phase: 'done', current: 1, total: 1 });
223
+ return {
224
+ commitsScanned: changes.length,
225
+ changesFound: changesWithData.length,
226
+ clusters: clusterResult.clusters.length,
227
+ specsGenerated,
228
+ skippedClusters,
229
+ specsWritten,
230
+ commitsWritten,
231
+ fragmentsWritten,
232
+ relationsWritten,
233
+ errors,
234
+ };
235
+ }
236
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/spec/mine/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Progress handler factory for `spec mine`.
3
+ *
4
+ * Provides two rendering strategies for `MineProgressCallback`:
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
+ * @module spec/mine/progress-handler
13
+ */
14
+ import type { MineProgressCallback } from './progress';
15
+ /**
16
+ * Create a progress handler for `spec mine`.
17
+ *
18
+ * @param mode - `'bar'` for ANSI progress bar (TTY), `'verbose'` for text lines.
19
+ * @returns A `MineProgressCallback` or `undefined` for silent mode.
20
+ */
21
+ export declare function createMineProgressHandler(mode: 'bar' | 'verbose'): MineProgressCallback;
22
+ //# sourceMappingURL=progress-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-handler.d.ts","sourceRoot":"","sources":["../../../src/spec/mine/progress-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAgB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA6FrE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,KAAK,GAAG,SAAS,GACtB,oBAAoB,CAKtB"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * Progress handler factory for `spec mine`.
4
+ *
5
+ * Provides two rendering strategies for `MineProgressCallback`:
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
+ * @module spec/mine/progress-handler
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.createMineProgressHandler = createMineProgressHandler;
17
+ // ---------------------------------------------------------------------------
18
+ // Bar mode
19
+ // ---------------------------------------------------------------------------
20
+ /** Width of the progress bar portion (excluding label and counters). */
21
+ const BAR_WIDTH = 20;
22
+ const PHASE_LABELS = {
23
+ scanning: 'Scanning commits ',
24
+ clustering: 'Clustering ',
25
+ generating: 'Generating specs ',
26
+ persisting: 'Persisting to DB ',
27
+ done: ' ',
28
+ };
29
+ function createBarHandler() {
30
+ let lastPhase = '';
31
+ return (p) => {
32
+ if (p.phase === 'done') {
33
+ // Print a trailing newline so the last progress bar stays visible
34
+ // and subsequent CLI output (success/info lines) starts on a fresh line.
35
+ if (process.stdout.isTTY)
36
+ process.stdout.write('\n');
37
+ return;
38
+ }
39
+ if (p.phase !== lastPhase) {
40
+ lastPhase = p.phase;
41
+ // Print a newline when phase changes (previous bar stays visible briefly)
42
+ if (process.stdout.isTTY)
43
+ process.stdout.write('\n');
44
+ }
45
+ const label = PHASE_LABELS[p.phase] || p.phase;
46
+ const total = p.total > 0 ? p.total : 0;
47
+ const current = p.current;
48
+ let bar;
49
+ if (total === 0) {
50
+ // Indeterminate — spinner-like effect
51
+ bar = '—'.repeat(BAR_WIDTH);
52
+ }
53
+ else {
54
+ const filled = Math.round((current / total) * BAR_WIDTH);
55
+ bar = '█'.repeat(filled) + '░'.repeat(BAR_WIDTH - filled);
56
+ }
57
+ const counter = total > 0 ? ` ${String(current).padStart(String(total).length, ' ')}/${total}` : '';
58
+ const msg = p.message ? ` ${p.message}` : '';
59
+ const line = `${label} [${bar}]${counter}${msg}`;
60
+ process.stdout.write(`\r\x1b[K${line}`);
61
+ };
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Verbose mode
65
+ // ---------------------------------------------------------------------------
66
+ function createVerboseHandler() {
67
+ const startTime = Date.now();
68
+ let lastPhase = '';
69
+ let lastPct = -1;
70
+ return (p) => {
71
+ if (p.phase === 'done')
72
+ return;
73
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
74
+ if (p.phase !== lastPhase) {
75
+ lastPhase = p.phase;
76
+ lastPct = -1;
77
+ console.log(`[${elapsed}s] Phase: ${p.phase}`);
78
+ }
79
+ if (p.total > 0) {
80
+ const pct = Math.floor((p.current / p.total) * 100);
81
+ if (pct >= lastPct + 5 || p.current === p.total) {
82
+ lastPct = pct;
83
+ const msg = p.message ? ` · ${p.message}` : '';
84
+ console.log(`[${elapsed}s] ${p.current}/${p.total} (${pct}%)${msg}`);
85
+ }
86
+ }
87
+ else if (p.message) {
88
+ // Phase-level message without item counts (clustering, etc.)
89
+ console.log(`[${elapsed}s] ${p.message}`);
90
+ }
91
+ };
92
+ }
93
+ // ---------------------------------------------------------------------------
94
+ // Factory
95
+ // ---------------------------------------------------------------------------
96
+ /**
97
+ * Create a progress handler for `spec mine`.
98
+ *
99
+ * @param mode - `'bar'` for ANSI progress bar (TTY), `'verbose'` for text lines.
100
+ * @returns A `MineProgressCallback` or `undefined` for silent mode.
101
+ */
102
+ function createMineProgressHandler(mode) {
103
+ if (mode === 'bar' && process.stdout.isTTY) {
104
+ return createBarHandler();
105
+ }
106
+ return createVerboseHandler();
107
+ }
108
+ //# sourceMappingURL=progress-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-handler.js","sourceRoot":"","sources":["../../../src/spec/mine/progress-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Progress reporting callback type for the `spec mine` pipeline.
3
+ *
4
+ * Each phase callback reports current/total progress with an optional
5
+ * human-readable message. The callback is purely advisory — `onProgress`
6
+ * is always optional and a missing callback just means "no output."
7
+ *
8
+ * @module spec/mine/progress
9
+ */
10
+ /** One progress tick from any phase of the pipeline. */
11
+ export interface MineProgress {
12
+ /** Current pipeline phase. */
13
+ phase: 'scanning' | 'clustering' | 'generating' | 'persisting' | 'done';
14
+ /** Current item index (1-based). 0 means the phase just started. */
15
+ current: number;
16
+ /** Total items in this phase. 0 means the total is unknown / not meaningful. */
17
+ total: number;
18
+ /** Optional human-readable label (e.g. commit hash, specId). */
19
+ message?: string;
20
+ }
21
+ /** Callback signature for progress reporting. */
22
+ export type MineProgressCallback = (progress: MineProgress) => void;
23
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/spec/mine/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC;IACxE,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * Progress reporting callback type for the `spec mine` pipeline.
4
+ *
5
+ * Each phase callback reports current/total progress with an optional
6
+ * human-readable message. The callback is purely advisory — `onProgress`
7
+ * is always optional and a missing callback just means "no output."
8
+ *
9
+ * @module spec/mine/progress
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/spec/mine/progress.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Mining Git Scanner — AST-level diff parsing for the `spec mine` pipeline.
3
+ *
4
+ * For each commit in a range this module extracts changed files, AST-parses
5
+ * both the old and new versions, and computes symbol-level (structural) diffs.
6
+ * It reuses the existing `extractFromSource` and the git utilities from
7
+ * `spec/git`.
8
+ *
9
+ * @module spec/mine/scanner
10
+ */
11
+ import { NodeKind, Language } from '../../types';
12
+ import type { ProgressCallback } from '../ui';
13
+ /** A single symbol that changed (added, removed, or modified) in a commit. */
14
+ export interface ChangedSymbol {
15
+ kind: NodeKind;
16
+ name: string;
17
+ qualifiedName: string;
18
+ startLine: number;
19
+ endLine: number;
20
+ /** Structural fingerprint for detecting content changes even when line ranges are unchanged. */
21
+ fingerprint: string;
22
+ /** Function/method signature (e.g. "authenticate(token: string): Promise<User>"). */
23
+ signature?: string;
24
+ /** Visibility modifier. */
25
+ visibility?: 'public' | 'private' | 'protected' | 'internal';
26
+ }
27
+ /** AST-level structural changes for one file in a commit. */
28
+ export interface FileChange {
29
+ filePath: string;
30
+ language: Language;
31
+ addedSymbols: ChangedSymbol[];
32
+ removedSymbols: ChangedSymbol[];
33
+ modifiedSymbols: {
34
+ old: ChangedSymbol;
35
+ new: ChangedSymbol;
36
+ }[];
37
+ /** True when the file did not exist in the parent commit. */
38
+ isNewFile?: boolean;
39
+ }
40
+ /** Aggregated AST change data for a single commit. */
41
+ export interface CommitChange {
42
+ commitHash: string;
43
+ commitMessage: string;
44
+ author: string;
45
+ timestamp: number;
46
+ fileChanges: FileChange[];
47
+ }
48
+ /**
49
+ * Scan commits in a range and produce AST-level structural change data.
50
+ *
51
+ * @param repoPath - Path to the git repository.
52
+ * @param fromHash - Starting commit hash (exclusive). Use empty string for root.
53
+ * @param toHash - Ending commit hash (inclusive), typically 'HEAD'.
54
+ * @param limit - If set, only the most recent N commits are processed.
55
+ * @param onProgress - Optional progress callback (called per commit).
56
+ * @returns Aggregated AST change data for each commit.
57
+ */
58
+ export declare function scanCommits(repoPath: string, fromHash: string, toHash: string, limit?: number, onProgress?: ProgressCallback): CommitChange[];
59
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/spec/mine/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAA0B,MAAM,aAAa,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAM9C,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gGAAgG;IAChG,WAAW,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;CAC9D;AAED,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,eAAe,EAAE;QAAE,GAAG,EAAE,aAAa,CAAC;QAAC,GAAG,EAAE,aAAa,CAAA;KAAE,EAAE,CAAC;IAC9D,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAsPD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,gBAAgB,GAC5B,YAAY,EAAE,CA6JhB"}