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,145 @@
1
+ "use strict";
2
+ /**
3
+ * Codex CLI headless adapter (`codex exec`).
4
+ *
5
+ * Invocation design:
6
+ * - `codex exec` — non-interactive one-shot mode
7
+ * - `--sandbox read-only` — no file writes or command side effects
8
+ * - `--skip-git-repo-check` — allow running outside/inside any repo
9
+ * - `--json` — stdout is a JSONL event stream; the final
10
+ * assistant message is the last
11
+ * `item.completed` event whose item type is
12
+ * `agent_message`
13
+ * - `-` — read the prompt from stdin (prompts can
14
+ * reach ~60K chars; stdin avoids OS argv
15
+ * length limits)
16
+ *
17
+ * Codex has no native system-prompt flag, so the system prompt is embedded
18
+ * into the user prompt inside an <instructions> block.
19
+ *
20
+ * @module spec/llm/agents/codex
21
+ */
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || (function () {
39
+ var ownKeys = function(o) {
40
+ ownKeys = Object.getOwnPropertyNames || function (o) {
41
+ var ar = [];
42
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
43
+ return ar;
44
+ };
45
+ return ownKeys(o);
46
+ };
47
+ return function (mod) {
48
+ if (mod && mod.__esModule) return mod;
49
+ var result = {};
50
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
51
+ __setModuleDefault(result, mod);
52
+ return result;
53
+ };
54
+ })();
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.codexAdapter = exports.CodexAdapter = void 0;
57
+ const os = __importStar(require("os"));
58
+ const path = __importStar(require("path"));
59
+ const detect_utils_1 = require("./detect-utils");
60
+ /** Signatures of auth/quota failures — retrying is pointless. */
61
+ const TERMINAL_PATTERNS = [
62
+ /not\s+logged\s+in/i,
63
+ /please\s+(run\s+)?\/?login/i,
64
+ /unauthorized|invalid\s+api\s+key|authentication/i,
65
+ /usage\s+limit|quota\s+(exceeded|exhausted)|rate\s+limit\s+reached/i,
66
+ ];
67
+ /** Footer line Codex prints after the final message in plain-text mode. */
68
+ const STDOUT_NOISE = /^tokens used\b/i;
69
+ class CodexAdapter {
70
+ id = 'codex';
71
+ displayName = 'Codex';
72
+ binary = 'codex';
73
+ detect() {
74
+ // Executable-based detection only: an uninstalled Codex leaves
75
+ // ~/.codex behind, so the config directory is NOT a valid signal.
76
+ // Fall back to a well-known manual-install location for setups that
77
+ // never added the binary to PATH.
78
+ return (0, detect_utils_1.isOnPath)(this.binary)
79
+ || (0, detect_utils_1.isExecutable)(path.join(os.homedir(), '.local', 'bin', 'codex'));
80
+ }
81
+ buildInvocation(systemPrompt, userPrompt) {
82
+ const args = [
83
+ 'exec',
84
+ '--sandbox', 'read-only',
85
+ '--skip-git-repo-check',
86
+ '--json',
87
+ '-',
88
+ ];
89
+ // No native system-prompt flag — embed it in the prompt body.
90
+ const stdin = systemPrompt
91
+ ? `<instructions>\n${systemPrompt}\n</instructions>\n\n${userPrompt}`
92
+ : userPrompt;
93
+ return { args, stdin };
94
+ }
95
+ extractOutput(result) {
96
+ // JSONL event stream (codex exec --json): the model text is the LAST
97
+ // `item.completed` event whose item is an agent message. Verified
98
+ // shape: {"type":"item.completed","item":{"type":"agent_message","text":...}}
99
+ let lastMessage = '';
100
+ let sawEvent = false;
101
+ for (const line of result.stdout.split('\n')) {
102
+ const trimmed = line.trim();
103
+ if (!trimmed.startsWith('{'))
104
+ continue;
105
+ try {
106
+ const event = JSON.parse(trimmed);
107
+ sawEvent = true;
108
+ if (event?.type === 'item.completed'
109
+ && event?.item?.type === 'agent_message') {
110
+ // `text` is the documented field; tolerate `message` for
111
+ // cross-version robustness at this external boundary.
112
+ const text = event.item.text ?? event.item.message;
113
+ if (typeof text === 'string')
114
+ lastMessage = text;
115
+ }
116
+ }
117
+ catch {
118
+ // Non-JSON line — ignore.
119
+ }
120
+ }
121
+ if (lastMessage)
122
+ return lastMessage.trim();
123
+ if (sawEvent)
124
+ return ''; // events parsed but no agent message
125
+ // Fallback for CLI versions without JSONL support: strip known noise.
126
+ return result.stdout
127
+ .split('\n')
128
+ .filter((line) => !STDOUT_NOISE.test(line.trim()))
129
+ .join('\n')
130
+ .trim();
131
+ }
132
+ classifyFailure(failure) {
133
+ if (failure.exitCode === null)
134
+ return 'terminal'; // spawn-level failure (e.g. ENOENT)
135
+ // Auth/quota errors surface on stderr (Rust logs) AND as JSONL error
136
+ // events on stdout — check both.
137
+ const haystack = `${failure.stderr}\n${failure.stdout}`;
138
+ if (TERMINAL_PATTERNS.some((re) => re.test(haystack)))
139
+ return 'terminal';
140
+ return 'retryable';
141
+ }
142
+ }
143
+ exports.CodexAdapter = CodexAdapter;
144
+ exports.codexAdapter = new CodexAdapter();
145
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../../src/spec/llm/agents/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared detection helpers for coding-agent adapters.
3
+ *
4
+ * Detection philosophy mirrors src/installer/targets (cheap filesystem
5
+ * checks, never spawn the agent), with one crucial difference: installer
6
+ * targets detect WHERE to install hooks (a config directory is a fine
7
+ * signal), while adapters detect WHETHER the agent can run — and an
8
+ * uninstalled agent leaves its config directory behind. Detection must
9
+ * therefore key on executable files only: the binary on PATH, or a
10
+ * well-known install path with the executable bit set.
11
+ *
12
+ * @module spec/llm/agents/detect-utils
13
+ */
14
+ /**
15
+ * Check whether `binary` resolves to an existing file on PATH.
16
+ *
17
+ * Scans PATH directories directly instead of shelling out to `which` —
18
+ * no child process, no platform-specific locator quirks. Executable-bit
19
+ * verification is POSIX-only; on Windows existence is sufficient.
20
+ */
21
+ export declare function isOnPath(binary: string): boolean;
22
+ /**
23
+ * Check whether `fullPath` exists and is executable (POSIX) or simply
24
+ * exists (Windows). Used for well-known install locations of agents that
25
+ * are installed but not on PATH.
26
+ */
27
+ export declare function isExecutable(fullPath: string): boolean;
28
+ //# sourceMappingURL=detect-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-utils.d.ts","sourceRoot":"","sources":["../../../../src/spec/llm/agents/detect-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAehD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOtD"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Shared detection helpers for coding-agent adapters.
4
+ *
5
+ * Detection philosophy mirrors src/installer/targets (cheap filesystem
6
+ * checks, never spawn the agent), with one crucial difference: installer
7
+ * targets detect WHERE to install hooks (a config directory is a fine
8
+ * signal), while adapters detect WHETHER the agent can run — and an
9
+ * uninstalled agent leaves its config directory behind. Detection must
10
+ * therefore key on executable files only: the binary on PATH, or a
11
+ * well-known install path with the executable bit set.
12
+ *
13
+ * @module spec/llm/agents/detect-utils
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.isOnPath = isOnPath;
50
+ exports.isExecutable = isExecutable;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ /**
54
+ * Check whether `binary` resolves to an existing file on PATH.
55
+ *
56
+ * Scans PATH directories directly instead of shelling out to `which` —
57
+ * no child process, no platform-specific locator quirks. Executable-bit
58
+ * verification is POSIX-only; on Windows existence is sufficient.
59
+ */
60
+ function isOnPath(binary) {
61
+ const pathEnv = process.env.PATH;
62
+ if (!pathEnv)
63
+ return false;
64
+ const candidates = process.platform === 'win32'
65
+ ? [binary, `${binary}.exe`, `${binary}.cmd`, `${binary}.bat`]
66
+ : [binary];
67
+ for (const dir of pathEnv.split(path.delimiter)) {
68
+ if (!dir)
69
+ continue;
70
+ for (const name of candidates) {
71
+ if (isExecutable(path.join(dir, name)))
72
+ return true;
73
+ }
74
+ }
75
+ return false;
76
+ }
77
+ /**
78
+ * Check whether `fullPath` exists and is executable (POSIX) or simply
79
+ * exists (Windows). Used for well-known install locations of agents that
80
+ * are installed but not on PATH.
81
+ */
82
+ function isExecutable(fullPath) {
83
+ try {
84
+ fs.accessSync(fullPath, fs.constants.X_OK);
85
+ return true;
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ }
91
+ //# sourceMappingURL=detect-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-utils.js","sourceRoot":"","sources":["../../../../src/spec/llm/agents/detect-utils.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYH,4BAeC;AAOD,oCAOC;AAvCD,uCAAyB;AACzB,2CAA6B;AAE7B;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,MAAc;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC7C,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;QAC7D,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEb,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * DevEco Code headless adapter (`deveco run`).
3
+ *
4
+ * Invocation design:
5
+ * - `deveco run` — non-interactive one-shot mode, exits when
6
+ * the session goes idle
7
+ * - `--agent explore` — read-only agent: only read/grep/glob/
8
+ * webfetch/websearch are allowed; all write
9
+ * and shell tools are denied at agent level
10
+ * - `--format json` — stdout is a JSONL event stream; model text
11
+ * arrives in `{"type":"text","part":{...}}`
12
+ * events
13
+ * - prompt via stdin — spec prompts can reach ~60K chars; stdin
14
+ * avoids OS argv length limits
15
+ *
16
+ * DevEco Code has no native system-prompt flag on `deveco run`, so the
17
+ * system prompt is embedded into the user prompt inside an <instructions>
18
+ * block — same strategy as the Codex adapter.
19
+ *
20
+ * @module spec/llm/agents/deveco-code
21
+ */
22
+ import { AgentAdapter, AgentFailure, AgentInvocation, AgentRunResult } from './types';
23
+ export declare class DevecoCodeAdapter implements AgentAdapter {
24
+ readonly id: "deveco-code";
25
+ readonly displayName = "DevEco Code";
26
+ readonly binary = "deveco";
27
+ detect(): boolean;
28
+ buildInvocation(systemPrompt: string, userPrompt: string): AgentInvocation;
29
+ extractOutput(result: AgentRunResult): string;
30
+ classifyFailure(failure: AgentFailure): 'retryable' | 'terminal';
31
+ }
32
+ export declare const devecoCodeAdapter: DevecoCodeAdapter;
33
+ //# sourceMappingURL=deveco-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deveco-code.d.ts","sourceRoot":"","sources":["../../../../src/spec/llm/agents/deveco-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAYtF,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,EAAE,EAAG,aAAa,CAAU;IACrC,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,MAAM,YAAY;IAE3B,MAAM,IAAI,OAAO;IAkBjB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe;IAoB1E,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAiD7C,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,GAAG,UAAU;CAMjE;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ /**
3
+ * DevEco Code headless adapter (`deveco run`).
4
+ *
5
+ * Invocation design:
6
+ * - `deveco run` — non-interactive one-shot mode, exits when
7
+ * the session goes idle
8
+ * - `--agent explore` — read-only agent: only read/grep/glob/
9
+ * webfetch/websearch are allowed; all write
10
+ * and shell tools are denied at agent level
11
+ * - `--format json` — stdout is a JSONL event stream; model text
12
+ * arrives in `{"type":"text","part":{...}}`
13
+ * events
14
+ * - prompt via stdin — spec prompts can reach ~60K chars; stdin
15
+ * avoids OS argv length limits
16
+ *
17
+ * DevEco Code has no native system-prompt flag on `deveco run`, so the
18
+ * system prompt is embedded into the user prompt inside an <instructions>
19
+ * block — same strategy as the Codex adapter.
20
+ *
21
+ * @module spec/llm/agents/deveco-code
22
+ */
23
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ var desc = Object.getOwnPropertyDescriptor(m, k);
26
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
27
+ desc = { enumerable: true, get: function() { return m[k]; } };
28
+ }
29
+ Object.defineProperty(o, k2, desc);
30
+ }) : (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ o[k2] = m[k];
33
+ }));
34
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
36
+ }) : function(o, v) {
37
+ o["default"] = v;
38
+ });
39
+ var __importStar = (this && this.__importStar) || (function () {
40
+ var ownKeys = function(o) {
41
+ ownKeys = Object.getOwnPropertyNames || function (o) {
42
+ var ar = [];
43
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
44
+ return ar;
45
+ };
46
+ return ownKeys(o);
47
+ };
48
+ return function (mod) {
49
+ if (mod && mod.__esModule) return mod;
50
+ var result = {};
51
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
52
+ __setModuleDefault(result, mod);
53
+ return result;
54
+ };
55
+ })();
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.devecoCodeAdapter = exports.DevecoCodeAdapter = void 0;
58
+ const os = __importStar(require("os"));
59
+ const path = __importStar(require("path"));
60
+ const detect_utils_1 = require("./detect-utils");
61
+ /** stderr signatures of auth/quota failures — retrying is pointless. */
62
+ const TERMINAL_PATTERNS = [
63
+ /not\s+logged\s+in/i,
64
+ /please\s+(run\s+)?\/?login/i,
65
+ /unauthorized|invalid\s+api\s+key|authentication/i,
66
+ /usage\s+limit|quota\s+(exceeded|exhausted)|credit\s+balance/i,
67
+ /rate\s+limit/i,
68
+ ];
69
+ class DevecoCodeAdapter {
70
+ id = 'deveco-code';
71
+ displayName = 'DevEco Code';
72
+ binary = 'deveco';
73
+ detect() {
74
+ // Executable-based detection only. DevEco Code config directories
75
+ // (`.deveco/`, `~/.config/deveco/`) persist after uninstall, so they
76
+ // are NOT valid detection signals.
77
+ //
78
+ // DevEco Code is built on OpenCode and follows similar install patterns.
79
+ // Common install paths:
80
+ // - System PATH (via installer)
81
+ // - ~/.local/bin/deveco (manual install, same pattern as codex/claude)
82
+ //
83
+ // DevEco Studio IDE installs its own copy to an IDE-private location;
84
+ // we don't attempt to locate that — PATH + ~/.local/bin covers the
85
+ // CLI-first workflows this adapter targets.
86
+ const home = os.homedir();
87
+ return (0, detect_utils_1.isOnPath)(this.binary)
88
+ || (0, detect_utils_1.isExecutable)(path.join(home, '.local', 'bin', 'deveco'));
89
+ }
90
+ buildInvocation(systemPrompt, userPrompt) {
91
+ const args = [
92
+ 'run',
93
+ '--agent', 'explore', // Read-only: no file writes or shell commands
94
+ '--format', 'json', // JSONL event stream for reliable parsing
95
+ ];
96
+ // No native system-prompt flag — embed it in the prompt body, same
97
+ // strategy as Codex. The agent processes the combined prompt as a
98
+ // single user message.
99
+ const prompt = systemPrompt
100
+ ? `<instructions>\n${systemPrompt}\n</instructions>\n\n${userPrompt}`
101
+ : userPrompt;
102
+ // Deliver via stdin to avoid OS argv length limits (spec prompts are
103
+ // ~50-60K chars). `deveco run` reads from stdin when no positional
104
+ // message is provided and stdin is not a TTY — both hold when spawned.
105
+ return { args, stdin: prompt };
106
+ }
107
+ extractOutput(result) {
108
+ // JSONL event stream (`deveco run --format json`).
109
+ //
110
+ // Events of interest:
111
+ // {"type":"text","timestamp":...,"sessionID":"...",
112
+ // "part":{"type":"text","text":"actual content","time":{...}}}
113
+ //
114
+ // We extract all `type: "text"` events and concatenate them. Text
115
+ // parts can arrive incrementally (streaming); each event contains the
116
+ // latest content delta.
117
+ //
118
+ // Other event types we ignore:
119
+ // "tool_use" — tool invocations (empty with explore agent anyway)
120
+ // "reasoning" — thinking traces
121
+ // "error" — session errors
122
+ // "step_start" / "step_finish" — turn boundaries
123
+ let output = '';
124
+ let sawJsonlEvent = false;
125
+ for (const line of result.stdout.split('\n')) {
126
+ const trimmed = line.trim();
127
+ if (!trimmed.startsWith('{'))
128
+ continue;
129
+ try {
130
+ const event = JSON.parse(trimmed);
131
+ sawJsonlEvent = true;
132
+ if (event?.type === 'text'
133
+ && event?.part?.type === 'text'
134
+ && typeof event.part.text === 'string') {
135
+ output += event.part.text;
136
+ }
137
+ }
138
+ catch {
139
+ // Non-JSON line — ignore (diagnostic output, warnings, etc.)
140
+ }
141
+ }
142
+ if (output)
143
+ return output.trim();
144
+ if (sawJsonlEvent)
145
+ return ''; // events parsed but no text content
146
+ // Fallback for CLI versions that may not produce JSONL (unlikely with
147
+ // --format json, but safe). Strip anything that looks like noise.
148
+ return result.stdout
149
+ .split('\n')
150
+ .filter((line) => !/^(deveco|warning|info)[:\s]/i.test(line.trim()))
151
+ .join('\n')
152
+ .trim();
153
+ }
154
+ classifyFailure(failure) {
155
+ if (failure.exitCode === null)
156
+ return 'terminal'; // spawn-level failure (e.g. ENOENT)
157
+ // Auth/quota errors surface on stderr.
158
+ if (TERMINAL_PATTERNS.some((re) => re.test(failure.stderr)))
159
+ return 'terminal';
160
+ return 'retryable';
161
+ }
162
+ }
163
+ exports.DevecoCodeAdapter = DevecoCodeAdapter;
164
+ exports.devecoCodeAdapter = new DevecoCodeAdapter();
165
+ //# sourceMappingURL=deveco-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deveco-code.js","sourceRoot":"","sources":["../../../../src/spec/llm/agents/deveco-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Coding-agent registry, installation detection, and resolution.
3
+ *
4
+ * Resolution is fully automatic and deterministic (spec evolve is mostly
5
+ * triggered by git hooks, so interactive selection is impossible):
6
+ *
7
+ * - exactly one agent installed → use it
8
+ * - both installed → prefer Claude Code (registry order)
9
+ * - none installed → null (caller falls back to LLMConfig)
10
+ *
11
+ * There is intentionally no user-facing way to pick an agent. The
12
+ * HOMEGRAPH_SPEC_AGENT environment variable exists ONLY as a test escape
13
+ * hatch ('none' disables agent usage; an adapter id forces that adapter)
14
+ * and is not documented for end users.
15
+ *
16
+ * @module spec/llm/agents
17
+ */
18
+ import { AgentAdapter } from './types';
19
+ export type { AgentAdapter, AgentInvocation, AgentRunResult } from './types';
20
+ export { claudeCodeAdapter } from './claude-code';
21
+ export { codexAdapter } from './codex';
22
+ export { devecoCodeAdapter } from './deveco-code';
23
+ /**
24
+ * Resolve the coding agent to use for LLM tasks, or null when none is
25
+ * installed. Result is cached for the process lifetime — detection is
26
+ * repeated only after {@link resetAgentResolutionCache} (tests).
27
+ */
28
+ export declare function resolveAgent(): AgentAdapter | null;
29
+ /** Test-only: clear the cached resolution after mutating PATH/HOME/env. */
30
+ export declare function resetAgentResolutionCache(): void;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/spec/llm/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKvC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAWlD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,YAAY,GAAG,IAAI,CAgBlD;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * Coding-agent registry, installation detection, and resolution.
4
+ *
5
+ * Resolution is fully automatic and deterministic (spec evolve is mostly
6
+ * triggered by git hooks, so interactive selection is impossible):
7
+ *
8
+ * - exactly one agent installed → use it
9
+ * - both installed → prefer Claude Code (registry order)
10
+ * - none installed → null (caller falls back to LLMConfig)
11
+ *
12
+ * There is intentionally no user-facing way to pick an agent. The
13
+ * HOMEGRAPH_SPEC_AGENT environment variable exists ONLY as a test escape
14
+ * hatch ('none' disables agent usage; an adapter id forces that adapter)
15
+ * and is not documented for end users.
16
+ *
17
+ * @module spec/llm/agents
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.devecoCodeAdapter = exports.codexAdapter = exports.claudeCodeAdapter = void 0;
21
+ exports.resolveAgent = resolveAgent;
22
+ exports.resetAgentResolutionCache = resetAgentResolutionCache;
23
+ const claude_code_1 = require("./claude-code");
24
+ const codex_1 = require("./codex");
25
+ const deveco_code_1 = require("./deveco-code");
26
+ var claude_code_2 = require("./claude-code");
27
+ Object.defineProperty(exports, "claudeCodeAdapter", { enumerable: true, get: function () { return claude_code_2.claudeCodeAdapter; } });
28
+ var codex_2 = require("./codex");
29
+ Object.defineProperty(exports, "codexAdapter", { enumerable: true, get: function () { return codex_2.codexAdapter; } });
30
+ var deveco_code_2 = require("./deveco-code");
31
+ Object.defineProperty(exports, "devecoCodeAdapter", { enumerable: true, get: function () { return deveco_code_2.devecoCodeAdapter; } });
32
+ /**
33
+ * Registry in priority order — the first installed adapter wins.
34
+ * Claude Code ranks first: its headless mode offers native system-prompt
35
+ * support, a clean JSON output envelope, and reliable tool disabling.
36
+ */
37
+ const REGISTRY = [claude_code_1.claudeCodeAdapter, codex_1.codexAdapter, deveco_code_1.devecoCodeAdapter];
38
+ let cachedResolution;
39
+ /**
40
+ * Resolve the coding agent to use for LLM tasks, or null when none is
41
+ * installed. Result is cached for the process lifetime — detection is
42
+ * repeated only after {@link resetAgentResolutionCache} (tests).
43
+ */
44
+ function resolveAgent() {
45
+ if (cachedResolution !== undefined)
46
+ return cachedResolution;
47
+ const override = process.env.HOMEGRAPH_SPEC_AGENT?.trim().toLowerCase();
48
+ let resolved = null;
49
+ if (override === 'none') {
50
+ resolved = null;
51
+ }
52
+ else if (override) {
53
+ resolved = REGISTRY.find((a) => a.id === override) ?? null;
54
+ }
55
+ else {
56
+ resolved = REGISTRY.find((a) => a.detect()) ?? null;
57
+ }
58
+ cachedResolution = resolved;
59
+ return resolved;
60
+ }
61
+ /** Test-only: clear the cached resolution after mutating PATH/HOME/env. */
62
+ function resetAgentResolutionCache() {
63
+ cachedResolution = undefined;
64
+ }
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/spec/llm/agents/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AA0BH,oCAgBC;AAGD,8DAEC;AA5CD,+CAAkD;AAClD,mCAAuC;AACvC,+CAAkD;AAGlD,6CAAkD;AAAzC,gHAAA,iBAAiB,OAAA;AAC1B,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,6CAAkD;AAAzC,gHAAA,iBAAiB,OAAA;AAE1B;;;;GAIG;AACH,MAAM,QAAQ,GAAmB,CAAC,+BAAiB,EAAE,oBAAY,EAAE,+BAAiB,CAAC,CAAC;AAEtF,IAAI,gBAAiD,CAAC;AAEtD;;;;GAIG;AACH,SAAgB,YAAY;IAC1B,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IAE5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxE,IAAI,QAAQ,GAAwB,IAAI,CAAC;IAEzC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC;IACtD,CAAC;IAED,gBAAgB,GAAG,QAAQ,CAAC;IAC5B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,2EAA2E;AAC3E,SAAgB,yBAAyB;IACvC,gBAAgB,GAAG,SAAS,CAAC;AAC/B,CAAC"}