@promptwheel/cli 0.6.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 (530) hide show
  1. package/README.md +215 -0
  2. package/dist/bin/promptwheel.d.ts +17 -0
  3. package/dist/bin/promptwheel.d.ts.map +1 -0
  4. package/dist/bin/promptwheel.js +90 -0
  5. package/dist/bin/promptwheel.js.map +1 -0
  6. package/dist/commands/auto-auth.d.ts +26 -0
  7. package/dist/commands/auto-auth.d.ts.map +1 -0
  8. package/dist/commands/auto-auth.js +216 -0
  9. package/dist/commands/auto-auth.js.map +1 -0
  10. package/dist/commands/auto-ci-mode.d.ts +9 -0
  11. package/dist/commands/auto-ci-mode.d.ts.map +1 -0
  12. package/dist/commands/auto-ci-mode.js +176 -0
  13. package/dist/commands/auto-ci-mode.js.map +1 -0
  14. package/dist/commands/solo-analytics.d.ts +6 -0
  15. package/dist/commands/solo-analytics.d.ts.map +1 -0
  16. package/dist/commands/solo-analytics.js +267 -0
  17. package/dist/commands/solo-analytics.js.map +1 -0
  18. package/dist/commands/solo-auto.d.ts +6 -0
  19. package/dist/commands/solo-auto.d.ts.map +1 -0
  20. package/dist/commands/solo-auto.js +135 -0
  21. package/dist/commands/solo-auto.js.map +1 -0
  22. package/dist/commands/solo-daemon.d.ts +12 -0
  23. package/dist/commands/solo-daemon.d.ts.map +1 -0
  24. package/dist/commands/solo-daemon.js +177 -0
  25. package/dist/commands/solo-daemon.js.map +1 -0
  26. package/dist/commands/solo-exec.d.ts +6 -0
  27. package/dist/commands/solo-exec.d.ts.map +1 -0
  28. package/dist/commands/solo-exec.js +656 -0
  29. package/dist/commands/solo-exec.js.map +1 -0
  30. package/dist/commands/solo-inspect.d.ts +6 -0
  31. package/dist/commands/solo-inspect.d.ts.map +1 -0
  32. package/dist/commands/solo-inspect.js +765 -0
  33. package/dist/commands/solo-inspect.js.map +1 -0
  34. package/dist/commands/solo-lifecycle.d.ts +6 -0
  35. package/dist/commands/solo-lifecycle.d.ts.map +1 -0
  36. package/dist/commands/solo-lifecycle.js +226 -0
  37. package/dist/commands/solo-lifecycle.js.map +1 -0
  38. package/dist/commands/solo-nudge.d.ts +6 -0
  39. package/dist/commands/solo-nudge.d.ts.map +1 -0
  40. package/dist/commands/solo-nudge.js +49 -0
  41. package/dist/commands/solo-nudge.js.map +1 -0
  42. package/dist/commands/solo-qa.d.ts +6 -0
  43. package/dist/commands/solo-qa.d.ts.map +1 -0
  44. package/dist/commands/solo-qa.js +253 -0
  45. package/dist/commands/solo-qa.js.map +1 -0
  46. package/dist/commands/solo-trajectory.d.ts +6 -0
  47. package/dist/commands/solo-trajectory.d.ts.map +1 -0
  48. package/dist/commands/solo-trajectory.js +268 -0
  49. package/dist/commands/solo-trajectory.js.map +1 -0
  50. package/dist/commands/solo.d.ts +11 -0
  51. package/dist/commands/solo.d.ts.map +1 -0
  52. package/dist/commands/solo.js +52 -0
  53. package/dist/commands/solo.js.map +1 -0
  54. package/dist/index.d.ts +18 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +18 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/lib/artifacts.d.ts +136 -0
  59. package/dist/lib/artifacts.d.ts.map +1 -0
  60. package/dist/lib/artifacts.js +147 -0
  61. package/dist/lib/artifacts.js.map +1 -0
  62. package/dist/lib/codebase-index.d.ts +5 -0
  63. package/dist/lib/codebase-index.d.ts.map +1 -0
  64. package/dist/lib/codebase-index.js +5 -0
  65. package/dist/lib/codebase-index.js.map +1 -0
  66. package/dist/lib/cycle-context.d.ts +62 -0
  67. package/dist/lib/cycle-context.d.ts.map +1 -0
  68. package/dist/lib/cycle-context.js +141 -0
  69. package/dist/lib/cycle-context.js.map +1 -0
  70. package/dist/lib/daemon-fork.d.ts +39 -0
  71. package/dist/lib/daemon-fork.d.ts.map +1 -0
  72. package/dist/lib/daemon-fork.js +164 -0
  73. package/dist/lib/daemon-fork.js.map +1 -0
  74. package/dist/lib/daemon-notifier.d.ts +29 -0
  75. package/dist/lib/daemon-notifier.d.ts.map +1 -0
  76. package/dist/lib/daemon-notifier.js +147 -0
  77. package/dist/lib/daemon-notifier.js.map +1 -0
  78. package/dist/lib/daemon.d.ts +75 -0
  79. package/dist/lib/daemon.d.ts.map +1 -0
  80. package/dist/lib/daemon.js +265 -0
  81. package/dist/lib/daemon.js.map +1 -0
  82. package/dist/lib/dedup-memory.d.ts +46 -0
  83. package/dist/lib/dedup-memory.d.ts.map +1 -0
  84. package/dist/lib/dedup-memory.js +190 -0
  85. package/dist/lib/dedup-memory.js.map +1 -0
  86. package/dist/lib/dedup.d.ts +37 -0
  87. package/dist/lib/dedup.d.ts.map +1 -0
  88. package/dist/lib/dedup.js +85 -0
  89. package/dist/lib/dedup.js.map +1 -0
  90. package/dist/lib/display-adapter-log.d.ts +26 -0
  91. package/dist/lib/display-adapter-log.d.ts.map +1 -0
  92. package/dist/lib/display-adapter-log.js +63 -0
  93. package/dist/lib/display-adapter-log.js.map +1 -0
  94. package/dist/lib/display-adapter-spinner.d.ts +28 -0
  95. package/dist/lib/display-adapter-spinner.d.ts.map +1 -0
  96. package/dist/lib/display-adapter-spinner.js +93 -0
  97. package/dist/lib/display-adapter-spinner.js.map +1 -0
  98. package/dist/lib/display-adapter-tui.d.ts +32 -0
  99. package/dist/lib/display-adapter-tui.d.ts.map +1 -0
  100. package/dist/lib/display-adapter-tui.js +77 -0
  101. package/dist/lib/display-adapter-tui.js.map +1 -0
  102. package/dist/lib/display-adapter.d.ts +40 -0
  103. package/dist/lib/display-adapter.d.ts.map +1 -0
  104. package/dist/lib/display-adapter.js +9 -0
  105. package/dist/lib/display-adapter.js.map +1 -0
  106. package/dist/lib/doctor.d.ts +45 -0
  107. package/dist/lib/doctor.d.ts.map +1 -0
  108. package/dist/lib/doctor.js +382 -0
  109. package/dist/lib/doctor.js.map +1 -0
  110. package/dist/lib/exclusion-index.d.ts +50 -0
  111. package/dist/lib/exclusion-index.d.ts.map +1 -0
  112. package/dist/lib/exclusion-index.js +249 -0
  113. package/dist/lib/exclusion-index.js.map +1 -0
  114. package/dist/lib/exec.d.ts +24 -0
  115. package/dist/lib/exec.d.ts.map +1 -0
  116. package/dist/lib/exec.js +295 -0
  117. package/dist/lib/exec.js.map +1 -0
  118. package/dist/lib/execution-backends/claude.d.ts +27 -0
  119. package/dist/lib/execution-backends/claude.d.ts.map +1 -0
  120. package/dist/lib/execution-backends/claude.js +161 -0
  121. package/dist/lib/execution-backends/claude.js.map +1 -0
  122. package/dist/lib/execution-backends/codex.d.ts +28 -0
  123. package/dist/lib/execution-backends/codex.d.ts.map +1 -0
  124. package/dist/lib/execution-backends/codex.js +216 -0
  125. package/dist/lib/execution-backends/codex.js.map +1 -0
  126. package/dist/lib/execution-backends/index.d.ts +10 -0
  127. package/dist/lib/execution-backends/index.d.ts.map +1 -0
  128. package/dist/lib/execution-backends/index.js +9 -0
  129. package/dist/lib/execution-backends/index.js.map +1 -0
  130. package/dist/lib/execution-backends/kimi.d.ts +25 -0
  131. package/dist/lib/execution-backends/kimi.d.ts.map +1 -0
  132. package/dist/lib/execution-backends/kimi.js +76 -0
  133. package/dist/lib/execution-backends/kimi.js.map +1 -0
  134. package/dist/lib/execution-backends/types.d.ts +38 -0
  135. package/dist/lib/execution-backends/types.d.ts.map +1 -0
  136. package/dist/lib/execution-backends/types.js +5 -0
  137. package/dist/lib/execution-backends/types.js.map +1 -0
  138. package/dist/lib/failure-classifier.d.ts +11 -0
  139. package/dist/lib/failure-classifier.d.ts.map +1 -0
  140. package/dist/lib/failure-classifier.js +24 -0
  141. package/dist/lib/failure-classifier.js.map +1 -0
  142. package/dist/lib/file-cooldown.d.ts +9 -0
  143. package/dist/lib/file-cooldown.d.ts.map +1 -0
  144. package/dist/lib/file-cooldown.js +75 -0
  145. package/dist/lib/file-cooldown.js.map +1 -0
  146. package/dist/lib/formulas.d.ts +52 -0
  147. package/dist/lib/formulas.d.ts.map +1 -0
  148. package/dist/lib/formulas.js +123 -0
  149. package/dist/lib/formulas.js.map +1 -0
  150. package/dist/lib/git.d.ts +9 -0
  151. package/dist/lib/git.d.ts.map +1 -0
  152. package/dist/lib/git.js +60 -0
  153. package/dist/lib/git.js.map +1 -0
  154. package/dist/lib/goals.d.ts +59 -0
  155. package/dist/lib/goals.d.ts.map +1 -0
  156. package/dist/lib/goals.js +216 -0
  157. package/dist/lib/goals.js.map +1 -0
  158. package/dist/lib/guidelines.d.ts +32 -0
  159. package/dist/lib/guidelines.d.ts.map +1 -0
  160. package/dist/lib/guidelines.js +102 -0
  161. package/dist/lib/guidelines.js.map +1 -0
  162. package/dist/lib/learnings.d.ts +65 -0
  163. package/dist/lib/learnings.d.ts.map +1 -0
  164. package/dist/lib/learnings.js +193 -0
  165. package/dist/lib/learnings.js.map +1 -0
  166. package/dist/lib/logger.d.ts +17 -0
  167. package/dist/lib/logger.d.ts.map +1 -0
  168. package/dist/lib/logger.js +42 -0
  169. package/dist/lib/logger.js.map +1 -0
  170. package/dist/lib/meta-learnings.d.ts +27 -0
  171. package/dist/lib/meta-learnings.d.ts.map +1 -0
  172. package/dist/lib/meta-learnings.js +270 -0
  173. package/dist/lib/meta-learnings.js.map +1 -0
  174. package/dist/lib/metrics.d.ts +48 -0
  175. package/dist/lib/metrics.d.ts.map +1 -0
  176. package/dist/lib/metrics.js +107 -0
  177. package/dist/lib/metrics.js.map +1 -0
  178. package/dist/lib/openai-local-execution.d.ts +29 -0
  179. package/dist/lib/openai-local-execution.d.ts.map +1 -0
  180. package/dist/lib/openai-local-execution.js +282 -0
  181. package/dist/lib/openai-local-execution.js.map +1 -0
  182. package/dist/lib/project-metadata/csharp.d.ts +6 -0
  183. package/dist/lib/project-metadata/csharp.d.ts.map +1 -0
  184. package/dist/lib/project-metadata/csharp.js +19 -0
  185. package/dist/lib/project-metadata/csharp.js.map +1 -0
  186. package/dist/lib/project-metadata/elixir.d.ts +6 -0
  187. package/dist/lib/project-metadata/elixir.d.ts.map +1 -0
  188. package/dist/lib/project-metadata/elixir.js +23 -0
  189. package/dist/lib/project-metadata/elixir.js.map +1 -0
  190. package/dist/lib/project-metadata/go.d.ts +6 -0
  191. package/dist/lib/project-metadata/go.d.ts.map +1 -0
  192. package/dist/lib/project-metadata/go.js +30 -0
  193. package/dist/lib/project-metadata/go.js.map +1 -0
  194. package/dist/lib/project-metadata/index.d.ts +13 -0
  195. package/dist/lib/project-metadata/index.d.ts.map +1 -0
  196. package/dist/lib/project-metadata/index.js +111 -0
  197. package/dist/lib/project-metadata/index.js.map +1 -0
  198. package/dist/lib/project-metadata/java.d.ts +6 -0
  199. package/dist/lib/project-metadata/java.d.ts.map +1 -0
  200. package/dist/lib/project-metadata/java.js +37 -0
  201. package/dist/lib/project-metadata/java.js.map +1 -0
  202. package/dist/lib/project-metadata/node.d.ts +6 -0
  203. package/dist/lib/project-metadata/node.d.ts.map +1 -0
  204. package/dist/lib/project-metadata/node.js +135 -0
  205. package/dist/lib/project-metadata/node.js.map +1 -0
  206. package/dist/lib/project-metadata/php.d.ts +6 -0
  207. package/dist/lib/project-metadata/php.d.ts.map +1 -0
  208. package/dist/lib/project-metadata/php.js +29 -0
  209. package/dist/lib/project-metadata/php.js.map +1 -0
  210. package/dist/lib/project-metadata/python.d.ts +6 -0
  211. package/dist/lib/project-metadata/python.d.ts.map +1 -0
  212. package/dist/lib/project-metadata/python.js +79 -0
  213. package/dist/lib/project-metadata/python.js.map +1 -0
  214. package/dist/lib/project-metadata/ruby.d.ts +6 -0
  215. package/dist/lib/project-metadata/ruby.d.ts.map +1 -0
  216. package/dist/lib/project-metadata/ruby.js +38 -0
  217. package/dist/lib/project-metadata/ruby.js.map +1 -0
  218. package/dist/lib/project-metadata/rust.d.ts +6 -0
  219. package/dist/lib/project-metadata/rust.d.ts.map +1 -0
  220. package/dist/lib/project-metadata/rust.js +33 -0
  221. package/dist/lib/project-metadata/rust.js.map +1 -0
  222. package/dist/lib/project-metadata/swift.d.ts +6 -0
  223. package/dist/lib/project-metadata/swift.d.ts.map +1 -0
  224. package/dist/lib/project-metadata/swift.js +19 -0
  225. package/dist/lib/project-metadata/swift.js.map +1 -0
  226. package/dist/lib/project-metadata/types.d.ts +37 -0
  227. package/dist/lib/project-metadata/types.d.ts.map +1 -0
  228. package/dist/lib/project-metadata/types.js +5 -0
  229. package/dist/lib/project-metadata/types.js.map +1 -0
  230. package/dist/lib/proposal-review.d.ts +9 -0
  231. package/dist/lib/proposal-review.d.ts.map +1 -0
  232. package/dist/lib/proposal-review.js +9 -0
  233. package/dist/lib/proposal-review.js.map +1 -0
  234. package/dist/lib/providers/claude.d.ts +6 -0
  235. package/dist/lib/providers/claude.d.ts.map +1 -0
  236. package/dist/lib/providers/claude.js +21 -0
  237. package/dist/lib/providers/claude.js.map +1 -0
  238. package/dist/lib/providers/codex.d.ts +6 -0
  239. package/dist/lib/providers/codex.d.ts.map +1 -0
  240. package/dist/lib/providers/codex.js +26 -0
  241. package/dist/lib/providers/codex.js.map +1 -0
  242. package/dist/lib/providers/index.d.ts +22 -0
  243. package/dist/lib/providers/index.d.ts.map +1 -0
  244. package/dist/lib/providers/index.js +39 -0
  245. package/dist/lib/providers/index.js.map +1 -0
  246. package/dist/lib/providers/kimi.d.ts +6 -0
  247. package/dist/lib/providers/kimi.d.ts.map +1 -0
  248. package/dist/lib/providers/kimi.js +22 -0
  249. package/dist/lib/providers/kimi.js.map +1 -0
  250. package/dist/lib/providers/openai-local.d.ts +8 -0
  251. package/dist/lib/providers/openai-local.d.ts.map +1 -0
  252. package/dist/lib/providers/openai-local.js +30 -0
  253. package/dist/lib/providers/openai-local.js.map +1 -0
  254. package/dist/lib/providers/types.d.ts +37 -0
  255. package/dist/lib/providers/types.d.ts.map +1 -0
  256. package/dist/lib/providers/types.js +5 -0
  257. package/dist/lib/providers/types.js.map +1 -0
  258. package/dist/lib/qa-stats.d.ts +113 -0
  259. package/dist/lib/qa-stats.d.ts.map +1 -0
  260. package/dist/lib/qa-stats.js +311 -0
  261. package/dist/lib/qa-stats.js.map +1 -0
  262. package/dist/lib/retention.d.ts +125 -0
  263. package/dist/lib/retention.d.ts.map +1 -0
  264. package/dist/lib/retention.js +767 -0
  265. package/dist/lib/retention.js.map +1 -0
  266. package/dist/lib/run-history.d.ts +52 -0
  267. package/dist/lib/run-history.d.ts.map +1 -0
  268. package/dist/lib/run-history.js +116 -0
  269. package/dist/lib/run-history.js.map +1 -0
  270. package/dist/lib/run-state.d.ts +129 -0
  271. package/dist/lib/run-state.d.ts.map +1 -0
  272. package/dist/lib/run-state.js +312 -0
  273. package/dist/lib/run-state.js.map +1 -0
  274. package/dist/lib/scope.d.ts +8 -0
  275. package/dist/lib/scope.d.ts.map +1 -0
  276. package/dist/lib/scope.js +8 -0
  277. package/dist/lib/scope.js.map +1 -0
  278. package/dist/lib/scout-prompt-builder.d.ts +22 -0
  279. package/dist/lib/scout-prompt-builder.d.ts.map +1 -0
  280. package/dist/lib/scout-prompt-builder.js +97 -0
  281. package/dist/lib/scout-prompt-builder.js.map +1 -0
  282. package/dist/lib/sectors.d.ts +21 -0
  283. package/dist/lib/sectors.d.ts.map +1 -0
  284. package/dist/lib/sectors.js +96 -0
  285. package/dist/lib/sectors.js.map +1 -0
  286. package/dist/lib/selection.d.ts +35 -0
  287. package/dist/lib/selection.d.ts.map +1 -0
  288. package/dist/lib/selection.js +110 -0
  289. package/dist/lib/selection.js.map +1 -0
  290. package/dist/lib/session-report.d.ts +26 -0
  291. package/dist/lib/session-report.d.ts.map +1 -0
  292. package/dist/lib/session-report.js +143 -0
  293. package/dist/lib/session-report.js.map +1 -0
  294. package/dist/lib/solo-auto-between-cycles.d.ts +10 -0
  295. package/dist/lib/solo-auto-between-cycles.d.ts.map +1 -0
  296. package/dist/lib/solo-auto-between-cycles.js +577 -0
  297. package/dist/lib/solo-auto-between-cycles.js.map +1 -0
  298. package/dist/lib/solo-auto-execute.d.ts +22 -0
  299. package/dist/lib/solo-auto-execute.d.ts.map +1 -0
  300. package/dist/lib/solo-auto-execute.js +530 -0
  301. package/dist/lib/solo-auto-execute.js.map +1 -0
  302. package/dist/lib/solo-auto-filter.d.ts +14 -0
  303. package/dist/lib/solo-auto-filter.d.ts.map +1 -0
  304. package/dist/lib/solo-auto-filter.js +311 -0
  305. package/dist/lib/solo-auto-filter.js.map +1 -0
  306. package/dist/lib/solo-auto-finalize.d.ts +6 -0
  307. package/dist/lib/solo-auto-finalize.d.ts.map +1 -0
  308. package/dist/lib/solo-auto-finalize.js +242 -0
  309. package/dist/lib/solo-auto-finalize.js.map +1 -0
  310. package/dist/lib/solo-auto-init-qa.d.ts +23 -0
  311. package/dist/lib/solo-auto-init-qa.d.ts.map +1 -0
  312. package/dist/lib/solo-auto-init-qa.js +183 -0
  313. package/dist/lib/solo-auto-init-qa.js.map +1 -0
  314. package/dist/lib/solo-auto-planning.d.ts +40 -0
  315. package/dist/lib/solo-auto-planning.d.ts.map +1 -0
  316. package/dist/lib/solo-auto-planning.js +171 -0
  317. package/dist/lib/solo-auto-planning.js.map +1 -0
  318. package/dist/lib/solo-auto-scout.d.ts +18 -0
  319. package/dist/lib/solo-auto-scout.d.ts.map +1 -0
  320. package/dist/lib/solo-auto-scout.js +269 -0
  321. package/dist/lib/solo-auto-scout.js.map +1 -0
  322. package/dist/lib/solo-auto-state.d.ts +20 -0
  323. package/dist/lib/solo-auto-state.d.ts.map +1 -0
  324. package/dist/lib/solo-auto-state.js +859 -0
  325. package/dist/lib/solo-auto-state.js.map +1 -0
  326. package/dist/lib/solo-auto-types.d.ts +197 -0
  327. package/dist/lib/solo-auto-types.d.ts.map +1 -0
  328. package/dist/lib/solo-auto-types.js +11 -0
  329. package/dist/lib/solo-auto-types.js.map +1 -0
  330. package/dist/lib/solo-auto-utils.d.ts +23 -0
  331. package/dist/lib/solo-auto-utils.d.ts.map +1 -0
  332. package/dist/lib/solo-auto-utils.js +53 -0
  333. package/dist/lib/solo-auto-utils.js.map +1 -0
  334. package/dist/lib/solo-auto.d.ts +25 -0
  335. package/dist/lib/solo-auto.d.ts.map +1 -0
  336. package/dist/lib/solo-auto.js +345 -0
  337. package/dist/lib/solo-auto.js.map +1 -0
  338. package/dist/lib/solo-ci.d.ts +84 -0
  339. package/dist/lib/solo-ci.d.ts.map +1 -0
  340. package/dist/lib/solo-ci.js +306 -0
  341. package/dist/lib/solo-ci.js.map +1 -0
  342. package/dist/lib/solo-config.d.ts +242 -0
  343. package/dist/lib/solo-config.d.ts.map +1 -0
  344. package/dist/lib/solo-config.js +354 -0
  345. package/dist/lib/solo-config.js.map +1 -0
  346. package/dist/lib/solo-cycle-formula.d.ts +36 -0
  347. package/dist/lib/solo-cycle-formula.d.ts.map +1 -0
  348. package/dist/lib/solo-cycle-formula.js +90 -0
  349. package/dist/lib/solo-cycle-formula.js.map +1 -0
  350. package/dist/lib/solo-git.d.ts +87 -0
  351. package/dist/lib/solo-git.d.ts.map +1 -0
  352. package/dist/lib/solo-git.js +365 -0
  353. package/dist/lib/solo-git.js.map +1 -0
  354. package/dist/lib/solo-hints.d.ts +32 -0
  355. package/dist/lib/solo-hints.d.ts.map +1 -0
  356. package/dist/lib/solo-hints.js +98 -0
  357. package/dist/lib/solo-hints.js.map +1 -0
  358. package/dist/lib/solo-prompt-builder.d.ts +12 -0
  359. package/dist/lib/solo-prompt-builder.d.ts.map +1 -0
  360. package/dist/lib/solo-prompt-builder.js +53 -0
  361. package/dist/lib/solo-prompt-builder.js.map +1 -0
  362. package/dist/lib/solo-qa-retry.d.ts +43 -0
  363. package/dist/lib/solo-qa-retry.d.ts.map +1 -0
  364. package/dist/lib/solo-qa-retry.js +125 -0
  365. package/dist/lib/solo-qa-retry.js.map +1 -0
  366. package/dist/lib/solo-remote.d.ts +14 -0
  367. package/dist/lib/solo-remote.d.ts.map +1 -0
  368. package/dist/lib/solo-remote.js +48 -0
  369. package/dist/lib/solo-remote.js.map +1 -0
  370. package/dist/lib/solo-session-summary.d.ts +52 -0
  371. package/dist/lib/solo-session-summary.d.ts.map +1 -0
  372. package/dist/lib/solo-session-summary.js +188 -0
  373. package/dist/lib/solo-session-summary.js.map +1 -0
  374. package/dist/lib/solo-stdin.d.ts +33 -0
  375. package/dist/lib/solo-stdin.d.ts.map +1 -0
  376. package/dist/lib/solo-stdin.js +299 -0
  377. package/dist/lib/solo-stdin.js.map +1 -0
  378. package/dist/lib/solo-ticket-qa.d.ts +19 -0
  379. package/dist/lib/solo-ticket-qa.d.ts.map +1 -0
  380. package/dist/lib/solo-ticket-qa.js +68 -0
  381. package/dist/lib/solo-ticket-qa.js.map +1 -0
  382. package/dist/lib/solo-ticket-types.d.ts +146 -0
  383. package/dist/lib/solo-ticket-types.d.ts.map +1 -0
  384. package/dist/lib/solo-ticket-types.js +26 -0
  385. package/dist/lib/solo-ticket-types.js.map +1 -0
  386. package/dist/lib/solo-ticket.d.ts +12 -0
  387. package/dist/lib/solo-ticket.d.ts.map +1 -0
  388. package/dist/lib/solo-ticket.js +192 -0
  389. package/dist/lib/solo-ticket.js.map +1 -0
  390. package/dist/lib/solo-utils.d.ts +130 -0
  391. package/dist/lib/solo-utils.d.ts.map +1 -0
  392. package/dist/lib/solo-utils.js +277 -0
  393. package/dist/lib/solo-utils.js.map +1 -0
  394. package/dist/lib/spindle/failure-patterns.d.ts +15 -0
  395. package/dist/lib/spindle/failure-patterns.d.ts.map +1 -0
  396. package/dist/lib/spindle/failure-patterns.js +22 -0
  397. package/dist/lib/spindle/failure-patterns.js.map +1 -0
  398. package/dist/lib/spindle/format.d.ts +9 -0
  399. package/dist/lib/spindle/format.d.ts.map +1 -0
  400. package/dist/lib/spindle/format.js +37 -0
  401. package/dist/lib/spindle/format.js.map +1 -0
  402. package/dist/lib/spindle/index.d.ts +33 -0
  403. package/dist/lib/spindle/index.d.ts.map +1 -0
  404. package/dist/lib/spindle/index.js +231 -0
  405. package/dist/lib/spindle/index.js.map +1 -0
  406. package/dist/lib/spindle/oscillation.d.ts +17 -0
  407. package/dist/lib/spindle/oscillation.d.ts.map +1 -0
  408. package/dist/lib/spindle/oscillation.js +96 -0
  409. package/dist/lib/spindle/oscillation.js.map +1 -0
  410. package/dist/lib/spindle/repetition.d.ts +16 -0
  411. package/dist/lib/spindle/repetition.d.ts.map +1 -0
  412. package/dist/lib/spindle/repetition.js +52 -0
  413. package/dist/lib/spindle/repetition.js.map +1 -0
  414. package/dist/lib/spindle/similarity.d.ts +14 -0
  415. package/dist/lib/spindle/similarity.d.ts.map +1 -0
  416. package/dist/lib/spindle/similarity.js +58 -0
  417. package/dist/lib/spindle/similarity.js.map +1 -0
  418. package/dist/lib/spindle/types.d.ts +97 -0
  419. package/dist/lib/spindle/types.d.ts.map +1 -0
  420. package/dist/lib/spindle/types.js +46 -0
  421. package/dist/lib/spindle/types.js.map +1 -0
  422. package/dist/lib/spinner.d.ts +41 -0
  423. package/dist/lib/spinner.d.ts.map +1 -0
  424. package/dist/lib/spinner.js +186 -0
  425. package/dist/lib/spinner.js.map +1 -0
  426. package/dist/lib/taste-profile.d.ts +26 -0
  427. package/dist/lib/taste-profile.d.ts.map +1 -0
  428. package/dist/lib/taste-profile.js +121 -0
  429. package/dist/lib/taste-profile.js.map +1 -0
  430. package/dist/lib/ticket-steps/index.d.ts +14 -0
  431. package/dist/lib/ticket-steps/index.d.ts.map +1 -0
  432. package/dist/lib/ticket-steps/index.js +13 -0
  433. package/dist/lib/ticket-steps/index.js.map +1 -0
  434. package/dist/lib/ticket-steps/step-agent.d.ts +6 -0
  435. package/dist/lib/ticket-steps/step-agent.d.ts.map +1 -0
  436. package/dist/lib/ticket-steps/step-agent.js +122 -0
  437. package/dist/lib/ticket-steps/step-agent.js.map +1 -0
  438. package/dist/lib/ticket-steps/step-cleanup.d.ts +6 -0
  439. package/dist/lib/ticket-steps/step-cleanup.d.ts.map +1 -0
  440. package/dist/lib/ticket-steps/step-cleanup.js +11 -0
  441. package/dist/lib/ticket-steps/step-cleanup.js.map +1 -0
  442. package/dist/lib/ticket-steps/step-commit.d.ts +6 -0
  443. package/dist/lib/ticket-steps/step-commit.d.ts.map +1 -0
  444. package/dist/lib/ticket-steps/step-commit.js +31 -0
  445. package/dist/lib/ticket-steps/step-commit.js.map +1 -0
  446. package/dist/lib/ticket-steps/step-pr.d.ts +6 -0
  447. package/dist/lib/ticket-steps/step-pr.d.ts.map +1 -0
  448. package/dist/lib/ticket-steps/step-pr.js +38 -0
  449. package/dist/lib/ticket-steps/step-pr.js.map +1 -0
  450. package/dist/lib/ticket-steps/step-push.d.ts +6 -0
  451. package/dist/lib/ticket-steps/step-push.d.ts.map +1 -0
  452. package/dist/lib/ticket-steps/step-push.js +35 -0
  453. package/dist/lib/ticket-steps/step-push.js.map +1 -0
  454. package/dist/lib/ticket-steps/step-qa.d.ts +6 -0
  455. package/dist/lib/ticket-steps/step-qa.d.ts.map +1 -0
  456. package/dist/lib/ticket-steps/step-qa.js +300 -0
  457. package/dist/lib/ticket-steps/step-qa.js.map +1 -0
  458. package/dist/lib/ticket-steps/step-scope.d.ts +6 -0
  459. package/dist/lib/ticket-steps/step-scope.d.ts.map +1 -0
  460. package/dist/lib/ticket-steps/step-scope.js +121 -0
  461. package/dist/lib/ticket-steps/step-scope.js.map +1 -0
  462. package/dist/lib/ticket-steps/step-spindle.d.ts +9 -0
  463. package/dist/lib/ticket-steps/step-spindle.d.ts.map +1 -0
  464. package/dist/lib/ticket-steps/step-spindle.js +160 -0
  465. package/dist/lib/ticket-steps/step-spindle.js.map +1 -0
  466. package/dist/lib/ticket-steps/step-worktree.d.ts +6 -0
  467. package/dist/lib/ticket-steps/step-worktree.d.ts.map +1 -0
  468. package/dist/lib/ticket-steps/step-worktree.js +157 -0
  469. package/dist/lib/ticket-steps/step-worktree.js.map +1 -0
  470. package/dist/lib/ticket-steps/types.d.ts +70 -0
  471. package/dist/lib/ticket-steps/types.d.ts.map +1 -0
  472. package/dist/lib/ticket-steps/types.js +8 -0
  473. package/dist/lib/ticket-steps/types.js.map +1 -0
  474. package/dist/lib/tool-command-map.d.ts +11 -0
  475. package/dist/lib/tool-command-map.d.ts.map +1 -0
  476. package/dist/lib/tool-command-map.js +24 -0
  477. package/dist/lib/tool-command-map.js.map +1 -0
  478. package/dist/lib/trajectory-generate.d.ts +24 -0
  479. package/dist/lib/trajectory-generate.d.ts.map +1 -0
  480. package/dist/lib/trajectory-generate.js +163 -0
  481. package/dist/lib/trajectory-generate.js.map +1 -0
  482. package/dist/lib/trajectory.d.ts +20 -0
  483. package/dist/lib/trajectory.d.ts.map +1 -0
  484. package/dist/lib/trajectory.js +104 -0
  485. package/dist/lib/trajectory.js.map +1 -0
  486. package/dist/lib/trigger-config.d.ts +12 -0
  487. package/dist/lib/trigger-config.d.ts.map +1 -0
  488. package/dist/lib/trigger-config.js +37 -0
  489. package/dist/lib/trigger-config.js.map +1 -0
  490. package/dist/lib/update-check.d.ts +28 -0
  491. package/dist/lib/update-check.d.ts.map +1 -0
  492. package/dist/lib/update-check.js +178 -0
  493. package/dist/lib/update-check.js.map +1 -0
  494. package/dist/lib/wave-scheduling.d.ts +18 -0
  495. package/dist/lib/wave-scheduling.d.ts.map +1 -0
  496. package/dist/lib/wave-scheduling.js +29 -0
  497. package/dist/lib/wave-scheduling.js.map +1 -0
  498. package/dist/tui/app.d.ts +17 -0
  499. package/dist/tui/app.d.ts.map +1 -0
  500. package/dist/tui/app.js +139 -0
  501. package/dist/tui/app.js.map +1 -0
  502. package/dist/tui/index.d.ts +10 -0
  503. package/dist/tui/index.d.ts.map +1 -0
  504. package/dist/tui/index.js +9 -0
  505. package/dist/tui/index.js.map +1 -0
  506. package/dist/tui/poller.d.ts +42 -0
  507. package/dist/tui/poller.d.ts.map +1 -0
  508. package/dist/tui/poller.js +62 -0
  509. package/dist/tui/poller.js.map +1 -0
  510. package/dist/tui/screens/auto.d.ts +85 -0
  511. package/dist/tui/screens/auto.d.ts.map +1 -0
  512. package/dist/tui/screens/auto.js +440 -0
  513. package/dist/tui/screens/auto.js.map +1 -0
  514. package/dist/tui/screens/overview.d.ts +9 -0
  515. package/dist/tui/screens/overview.d.ts.map +1 -0
  516. package/dist/tui/screens/overview.js +189 -0
  517. package/dist/tui/screens/overview.js.map +1 -0
  518. package/dist/tui/state.d.ts +93 -0
  519. package/dist/tui/state.d.ts.map +1 -0
  520. package/dist/tui/state.js +169 -0
  521. package/dist/tui/state.js.map +1 -0
  522. package/dist/tui/ticket-output-buffer.d.ts +23 -0
  523. package/dist/tui/ticket-output-buffer.d.ts.map +1 -0
  524. package/dist/tui/ticket-output-buffer.js +60 -0
  525. package/dist/tui/ticket-output-buffer.js.map +1 -0
  526. package/dist/tui/types.d.ts +18 -0
  527. package/dist/tui/types.d.ts.map +1 -0
  528. package/dist/tui/types.js +5 -0
  529. package/dist/tui/types.js.map +1 -0
  530. package/package.json +70 -0
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Exclusion index — discovers what artifact patterns a project generates
3
+ * by scanning for indicator files (lockfiles, configs, build manifests)
4
+ * and writes any patterns missing from .gitignore to the worktree's
5
+ * .git/info/exclude so `git status` filters them natively.
6
+ *
7
+ * Detection is organic: the project's own files tell us what frameworks
8
+ * and languages are in use, and therefore what artifact directories will
9
+ * exist. The INDICATOR_MAP below is a knowledge base that drives
10
+ * detection — it only fires when we actually find the indicator file in
11
+ * the worktree, not unconditionally.
12
+ *
13
+ * As a second layer, solo-ticket.ts captures a baseline `git status`
14
+ * snapshot after dep install (before the agent runs). Anything present
15
+ * in the baseline is subtracted from the post-agent status, so even
16
+ * artifacts the indicator map doesn't know about are filtered out.
17
+ *
18
+ * Note: the enterprise worker path (src/worker/) uses `git diff --name-only`
19
+ * which only shows tracked changes and is not affected by untracked
20
+ * artifacts. This module is only used by the CLI solo path.
21
+ */
22
+ import * as fs from 'node:fs';
23
+ import * as path from 'node:path';
24
+ // ─── Knowledge base ───────────────────────────────────────────────
25
+ /**
26
+ * Map from indicator filenames to the artifact patterns that framework generates.
27
+ * When we find an indicator file in the worktree, we know those artifact paths
28
+ * may appear and should be excluded from scope validation.
29
+ */
30
+ const INDICATOR_MAP = {
31
+ // ── Node.js / JavaScript / TypeScript ──
32
+ 'package.json': ['node_modules/'],
33
+ 'next.config.js': ['.next/'],
34
+ 'next.config.mjs': ['.next/'],
35
+ 'next.config.ts': ['.next/'],
36
+ 'nuxt.config.ts': ['.nuxt/', '.output/'],
37
+ 'nuxt.config.js': ['.nuxt/', '.output/'],
38
+ 'svelte.config.js': ['.svelte-kit/'],
39
+ 'turbo.json': ['.turbo/'],
40
+ 'vite.config.ts': ['dist/'],
41
+ 'vite.config.js': ['dist/'],
42
+ 'rollup.config.js': ['dist/'],
43
+ 'rollup.config.mjs': ['dist/'],
44
+ 'webpack.config.js': ['dist/', 'build/'],
45
+ 'webpack.config.ts': ['dist/', 'build/'],
46
+ '.parcelrc': ['.parcel-cache/'],
47
+ 'tsconfig.json': ['*.tsbuildinfo'],
48
+ // ── Python ──
49
+ 'pyproject.toml': ['__pycache__/', '*.pyc', '.venv/', 'venv/', '.pytest_cache/', '.mypy_cache/', '.ruff_cache/'],
50
+ 'requirements.txt': ['__pycache__/', '*.pyc', '.venv/', 'venv/', '.eggs/', '*.egg-info/'],
51
+ 'Pipfile': ['__pycache__/', '*.pyc', '.venv/'],
52
+ 'setup.py': ['__pycache__/', '*.pyc', '*.egg-info/', 'dist/', 'build/'],
53
+ 'setup.cfg': ['__pycache__/', '*.pyc', '*.egg-info/'],
54
+ // ── Rust ──
55
+ 'Cargo.toml': ['target/'],
56
+ // ── Go ──
57
+ 'go.mod': ['vendor/'],
58
+ // ── PHP ──
59
+ 'composer.json': ['vendor/'],
60
+ // ── Ruby ──
61
+ 'Gemfile': ['.bundle/', 'vendor/bundle/'],
62
+ // ── Elixir ──
63
+ 'mix.exs': ['_build/', 'deps/', '.elixir_ls/'],
64
+ // ── Java / Kotlin / Scala ──
65
+ 'pom.xml': ['target/'],
66
+ 'build.gradle': ['build/', '.gradle/'],
67
+ 'build.gradle.kts': ['build/', '.gradle/'],
68
+ // ── .NET / C# ──
69
+ // *.csproj and *.sln handled via extension check below
70
+ // ── Swift ──
71
+ 'Package.swift': ['.build/', '.swiftpm/'],
72
+ // ── Dart / Flutter ──
73
+ 'pubspec.yaml': ['.dart_tool/', 'build/'],
74
+ // ── Coverage / testing tools ──
75
+ 'jest.config.js': ['coverage/'],
76
+ 'jest.config.ts': ['coverage/'],
77
+ 'vitest.config.ts': ['coverage/'],
78
+ 'vitest.config.js': ['coverage/'],
79
+ 'pytest.ini': ['.pytest_cache/'],
80
+ '.nycrc': ['coverage/', '.nyc_output/'],
81
+ '.nycrc.json': ['coverage/', '.nyc_output/'],
82
+ // ── PromptWheel internals ──
83
+ '.promptwheel': ['.promptwheel/'],
84
+ };
85
+ /**
86
+ * Extension-based indicators for project types where the config filename
87
+ * isn't fixed (e.g. *.csproj, *.sln for .NET).
88
+ */
89
+ const EXTENSION_INDICATORS = {
90
+ '.csproj': ['bin/', 'obj/'],
91
+ '.fsproj': ['bin/', 'obj/'],
92
+ '.sln': ['bin/', 'obj/'],
93
+ };
94
+ // ─── Derived constants ────────────────────────────────────────────
95
+ /**
96
+ * Directories to skip when scanning for indicators.
97
+ * Derived automatically from INDICATOR_MAP + EXTENSION_INDICATORS values
98
+ * so there is no separate list to maintain — if an artifact pattern is
99
+ * added above, the scanner will skip it during traversal too.
100
+ */
101
+ const SCAN_SKIP = /* @__PURE__ */ (() => {
102
+ // VCS internals are always skipped even though they aren't in the map.
103
+ const dirs = new Set(['.git', '.hg', '.svn']);
104
+ const allPatterns = [
105
+ ...Object.values(INDICATOR_MAP).flat(),
106
+ ...Object.values(EXTENSION_INDICATORS).flat(),
107
+ ];
108
+ for (const p of allPatterns) {
109
+ // 'node_modules/' → 'node_modules', '.next/' → '.next'
110
+ if (p.endsWith('/'))
111
+ dirs.add(p.slice(0, -1));
112
+ }
113
+ return dirs;
114
+ })();
115
+ /** Marker written to the exclude file so we can detect prior runs. */
116
+ const EXCLUDE_MARKER = '# Auto-discovered by PromptWheel exclusion index';
117
+ // ─── Internal helpers ─────────────────────────────────────────────
118
+ /**
119
+ * Scan a directory tree for indicator files and collect the artifact
120
+ * patterns they imply.
121
+ */
122
+ function scanIndicators(dir, patterns, depth, maxDepth) {
123
+ if (depth > maxDepth)
124
+ return;
125
+ let entries;
126
+ try {
127
+ entries = fs.readdirSync(dir, { withFileTypes: true });
128
+ }
129
+ catch {
130
+ return;
131
+ }
132
+ for (const entry of entries) {
133
+ const name = entry.name;
134
+ // Check exact-name indicators
135
+ if (INDICATOR_MAP[name]) {
136
+ for (const p of INDICATOR_MAP[name])
137
+ patterns.add(p);
138
+ }
139
+ // Check extension-based indicators
140
+ for (const ext of Object.keys(EXTENSION_INDICATORS)) {
141
+ if (name.endsWith(ext)) {
142
+ for (const p of EXTENSION_INDICATORS[ext])
143
+ patterns.add(p);
144
+ break;
145
+ }
146
+ }
147
+ // Recurse into subdirectories, skipping artifact dirs and hidden dirs
148
+ if (entry.isDirectory() && !SCAN_SKIP.has(name) && !name.startsWith('.')) {
149
+ scanIndicators(path.join(dir, name), patterns, depth + 1, maxDepth);
150
+ }
151
+ }
152
+ }
153
+ /**
154
+ * Resolve the git common directory for a worktree.
155
+ *
156
+ * Git reads `info/exclude` from the *common* dir — not the per-worktree
157
+ * dir. For a normal repo `.git/` IS the common dir. For a linked
158
+ * worktree `.git` is a file pointing to `.git/worktrees/<name>/`; the
159
+ * common dir is its grandparent (`.git/`).
160
+ *
161
+ * Exported for testing.
162
+ */
163
+ export function resolveGitDir(worktreePath) {
164
+ const gitPath = path.join(worktreePath, '.git');
165
+ let stat;
166
+ try {
167
+ stat = fs.statSync(gitPath);
168
+ }
169
+ catch {
170
+ return gitPath; // Doesn't exist yet — return default path
171
+ }
172
+ // Normal repo — .git is already the common dir
173
+ if (stat.isDirectory())
174
+ return gitPath;
175
+ // Linked worktree: .git is a file containing "gitdir: /path/to/..."
176
+ // e.g. "gitdir: /repo/.git/worktrees/my-ticket"
177
+ const content = fs.readFileSync(gitPath, 'utf-8').trim();
178
+ const match = content.match(/^gitdir:\s+(.+)$/);
179
+ if (match) {
180
+ const worktreeGitDir = path.isAbsolute(match[1])
181
+ ? match[1]
182
+ : path.resolve(worktreePath, match[1]);
183
+ // Walk up to the common dir: .git/worktrees/<name> → .git/
184
+ // The worktree gitdir is always <common>/worktrees/<name>
185
+ const worktreesParent = path.dirname(worktreeGitDir);
186
+ if (path.basename(worktreesParent) === 'worktrees') {
187
+ return path.dirname(worktreesParent);
188
+ }
189
+ // Fallback: return the worktree gitdir itself
190
+ return worktreeGitDir;
191
+ }
192
+ return gitPath;
193
+ }
194
+ // ─── Public API ───────────────────────────────────────────────────
195
+ /**
196
+ * Build an exclusion index for a worktree by scanning the project tree
197
+ * for indicator files and writing any inferred artifact patterns to
198
+ * `.git/info/exclude`.
199
+ *
200
+ * Call this after worktree creation but before installing dependencies
201
+ * or running the agent. After this, `git status --porcelain` natively
202
+ * filters out all discovered artifact directories.
203
+ *
204
+ * Idempotent — safe to call multiple times on the same worktree
205
+ * (e.g. on ticket retry). Subsequent calls are no-ops.
206
+ *
207
+ * @param worktreePath - Absolute path to the worktree root
208
+ * @param maxDepth - How deep to scan for indicators (default 4, sufficient for monorepos)
209
+ * @returns List of patterns written to the exclude file (empty on no-op)
210
+ */
211
+ export function buildExclusionIndex(worktreePath, maxDepth = 4) {
212
+ const patterns = new Set();
213
+ // Scan the worktree for indicator files
214
+ scanIndicators(worktreePath, patterns, 0, maxDepth);
215
+ if (patterns.size === 0)
216
+ return [];
217
+ const patternList = [...patterns].sort();
218
+ // Write to .git/info/exclude (worktree-local, never committed)
219
+ try {
220
+ const gitDir = resolveGitDir(worktreePath);
221
+ const infoDir = path.join(gitDir, 'info');
222
+ if (!fs.existsSync(infoDir)) {
223
+ fs.mkdirSync(infoDir, { recursive: true });
224
+ }
225
+ const excludePath = path.join(infoDir, 'exclude');
226
+ // Idempotency: if we've already written, don't append again
227
+ try {
228
+ const existing = fs.readFileSync(excludePath, 'utf-8');
229
+ if (existing.includes(EXCLUDE_MARKER)) {
230
+ return patternList;
231
+ }
232
+ }
233
+ catch {
234
+ // File doesn't exist yet — that's fine, we'll create it
235
+ }
236
+ const block = [
237
+ '',
238
+ EXCLUDE_MARKER,
239
+ ...patternList,
240
+ '',
241
+ ].join('\n');
242
+ fs.appendFileSync(excludePath, block);
243
+ }
244
+ catch {
245
+ // Non-fatal: scope check will still run, just might flag extra files
246
+ }
247
+ return patternList;
248
+ }
249
+ //# sourceMappingURL=exclusion-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exclusion-index.js","sourceRoot":"","sources":["../../src/lib/exclusion-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,qEAAqE;AAErE;;;;GAIG;AACH,MAAM,aAAa,GAA6B;IAC9C,0CAA0C;IAC1C,cAAc,EAAS,CAAC,eAAe,CAAC;IACxC,gBAAgB,EAAO,CAAC,QAAQ,CAAC;IACjC,iBAAiB,EAAM,CAAC,QAAQ,CAAC;IACjC,gBAAgB,EAAO,CAAC,QAAQ,CAAC;IACjC,gBAAgB,EAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7C,gBAAgB,EAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7C,kBAAkB,EAAK,CAAC,cAAc,CAAC;IACvC,YAAY,EAAW,CAAC,SAAS,CAAC;IAClC,gBAAgB,EAAO,CAAC,OAAO,CAAC;IAChC,gBAAgB,EAAO,CAAC,OAAO,CAAC;IAChC,kBAAkB,EAAK,CAAC,OAAO,CAAC;IAChC,mBAAmB,EAAI,CAAC,OAAO,CAAC;IAChC,mBAAmB,EAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC1C,mBAAmB,EAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC1C,WAAW,EAAY,CAAC,gBAAgB,CAAC;IACzC,eAAe,EAAQ,CAAC,eAAe,CAAC;IAExC,eAAe;IACf,gBAAgB,EAAO,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,CAAC;IACrH,kBAAkB,EAAK,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC;IAC5F,SAAS,EAAc,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC1D,UAAU,EAAa,CAAC,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC;IAClF,WAAW,EAAY,CAAC,cAAc,EAAE,OAAO,EAAE,aAAa,CAAC;IAE/D,aAAa;IACb,YAAY,EAAW,CAAC,SAAS,CAAC;IAElC,WAAW;IACX,QAAQ,EAAe,CAAC,SAAS,CAAC;IAElC,YAAY;IACZ,eAAe,EAAQ,CAAC,SAAS,CAAC;IAElC,aAAa;IACb,SAAS,EAAc,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAErD,eAAe;IACf,SAAS,EAAc,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC;IAE1D,8BAA8B;IAC9B,SAAS,EAAc,CAAC,SAAS,CAAC;IAClC,cAAc,EAAS,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7C,kBAAkB,EAAK,CAAC,QAAQ,EAAE,UAAU,CAAC;IAE7C,kBAAkB;IAClB,uDAAuD;IAEvD,cAAc;IACd,eAAe,EAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAE/C,uBAAuB;IACvB,cAAc,EAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;IAEhD,iCAAiC;IACjC,gBAAgB,EAAO,CAAC,WAAW,CAAC;IACpC,gBAAgB,EAAO,CAAC,WAAW,CAAC;IACpC,kBAAkB,EAAK,CAAC,WAAW,CAAC;IACpC,kBAAkB,EAAK,CAAC,WAAW,CAAC;IACpC,YAAY,EAAW,CAAC,gBAAgB,CAAC;IACzC,QAAQ,EAAe,CAAC,WAAW,EAAE,cAAc,CAAC;IACpD,aAAa,EAAU,CAAC,WAAW,EAAE,cAAc,CAAC;IAEpD,8BAA8B;IAC9B,cAAc,EAAU,CAAC,eAAe,CAAC;CAC1C,CAAC;AAEF;;;GAGG;AACH,MAAM,oBAAoB,GAA6B;IACrD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAK,CAAC,MAAM,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,qEAAqE;AAErE;;;;;GAKG;AACH,MAAM,SAAS,GAAgB,eAAe,CAAC,CAAC,GAAG,EAAE;IACnD,uEAAuE;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG;QAClB,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;QACtC,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;KAC9C,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,uDAAuD;QACvD,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,EAAE,CAAC;AAEL,sEAAsE;AACtE,MAAM,cAAc,GAAG,kDAAkD,CAAC;AAE1E,qEAAqE;AAErE;;;GAGG;AACH,SAAS,cAAc,CACrB,GAAW,EACX,QAAqB,EACrB,KAAa,EACb,QAAgB;IAEhB,IAAI,KAAK,GAAG,QAAQ;QAAE,OAAO;IAE7B,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,8BAA8B;QAC9B,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,mCAAmC;QACnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,MAAM,CAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC;oBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3D,MAAM;YACR,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAEhD,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,CAAC,0CAA0C;IAC5D,CAAC;IAED,+CAA+C;IAC/C,IAAI,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO,OAAO,CAAC;IAEvC,oEAAoE;IACpE,gDAAgD;IAChD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAChD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACV,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,2DAA2D;QAC3D,0DAA0D;QAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,WAAW,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC;QAED,8CAA8C;QAC9C,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qEAAqE;AAErE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,QAAQ,GAAG,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,wCAAwC;IACxC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEpD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzC,+DAA+D;IAC/D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElD,4DAA4D;QAC5D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtC,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;QAED,MAAM,KAAK,GAAG;YACZ,EAAE;YACF,cAAc;YACd,GAAG,WAAW;YACd,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Node.js ExecRunner implementation
3
+ *
4
+ * Spawns commands, captures output to artifact files,
5
+ * handles timeout/cancellation, and returns structured results.
6
+ */
7
+ import type { ExecRunner, ExecSpec, ExecResult } from '@promptwheel/core';
8
+ export interface NodeExecRunnerOptions {
9
+ defaultMaxLogBytes?: number;
10
+ defaultTailBytes?: number;
11
+ killGraceMs?: number;
12
+ }
13
+ export declare class NodeExecRunner implements ExecRunner {
14
+ private readonly defaultMaxLogBytes;
15
+ private readonly defaultTailBytes;
16
+ private readonly killGraceMs;
17
+ constructor(opts?: NodeExecRunnerOptions);
18
+ run(spec: ExecSpec): Promise<ExecResult>;
19
+ }
20
+ /**
21
+ * Create a Node exec runner with default options
22
+ */
23
+ export declare function createExecRunner(opts?: NodeExecRunnerOptions): ExecRunner;
24
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EAGX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0FD,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,IAAI,GAAE,qBAA0B;IAMtC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CA8N/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,UAAU,CAEzE"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Node.js ExecRunner implementation
3
+ *
4
+ * Spawns commands, captures output to artifact files,
5
+ * handles timeout/cancellation, and returns structured results.
6
+ */
7
+ import { spawn } from 'node:child_process';
8
+ import * as fs from 'node:fs';
9
+ import * as path from 'node:path';
10
+ /**
11
+ * Configuration constants for ExecRunner
12
+ */
13
+ /** Maximum bytes to write per output stream (stdout/stderr). Prevents runaway disk usage. */
14
+ const DEFAULT_MAX_LOG_BYTES = 2_000_000; // 2MB per stream
15
+ /** Bytes to retain in memory for the tail buffer, used for fast UI display. */
16
+ const DEFAULT_TAIL_BYTES = 65_536; // 64KB tail for fast UI
17
+ /** Grace period in ms between SIGTERM and SIGKILL when killing a child process. */
18
+ const DEFAULT_KILL_GRACE_MS = 1_500;
19
+ /** Maximum length for sanitized file name segments. Prevents overly long artifact paths. */
20
+ const MAX_FILE_SEGMENT_LENGTH = 64;
21
+ function isProbablyAbsolute(p) {
22
+ return path.isAbsolute(p);
23
+ }
24
+ function sanitizeFileSegment(s) {
25
+ return s
26
+ .trim()
27
+ .toLowerCase()
28
+ .replace(/[^a-z0-9._-]+/g, '-')
29
+ .replace(/-+/g, '-')
30
+ .replace(/^-+|-+$/g, '')
31
+ .slice(0, MAX_FILE_SEGMENT_LENGTH) || 'step';
32
+ }
33
+ function pad2(n) {
34
+ return n < 10 ? `0${n}` : `${n}`;
35
+ }
36
+ function appendTail(current, chunk, tailBytes) {
37
+ if (tailBytes <= 0)
38
+ return Buffer.alloc(0);
39
+ if (chunk.length >= tailBytes) {
40
+ return Buffer.from(chunk.subarray(chunk.length - tailBytes));
41
+ }
42
+ if (current.length === 0)
43
+ return Buffer.from(chunk);
44
+ const combined = Buffer.concat([current, chunk]);
45
+ if (combined.length <= tailBytes)
46
+ return combined;
47
+ return Buffer.from(combined.subarray(combined.length - tailBytes));
48
+ }
49
+ async function ensureDir(absDir) {
50
+ await fs.promises.mkdir(absDir, { recursive: true });
51
+ }
52
+ function writeCapped(stream, chunk, state, maxBytes) {
53
+ if (maxBytes <= 0) {
54
+ state.truncated = true;
55
+ return;
56
+ }
57
+ if (state.truncated)
58
+ return;
59
+ const remaining = maxBytes - state.bytesWritten;
60
+ if (remaining <= 0) {
61
+ state.truncated = true;
62
+ return;
63
+ }
64
+ if (chunk.length <= remaining) {
65
+ stream.write(chunk);
66
+ state.bytesWritten += chunk.length;
67
+ return;
68
+ }
69
+ // partial write, then truncate
70
+ stream.write(chunk.subarray(0, remaining));
71
+ state.bytesWritten += remaining;
72
+ state.truncated = true;
73
+ }
74
+ function waitForStreamClose(stream) {
75
+ return new Promise((resolve, reject) => {
76
+ stream.once('close', () => resolve());
77
+ stream.once('error', (err) => reject(err));
78
+ });
79
+ }
80
+ export class NodeExecRunner {
81
+ defaultMaxLogBytes;
82
+ defaultTailBytes;
83
+ killGraceMs;
84
+ constructor(opts = {}) {
85
+ this.defaultMaxLogBytes = opts.defaultMaxLogBytes ?? DEFAULT_MAX_LOG_BYTES;
86
+ this.defaultTailBytes = opts.defaultTailBytes ?? DEFAULT_TAIL_BYTES;
87
+ this.killGraceMs = opts.killGraceMs ?? DEFAULT_KILL_GRACE_MS;
88
+ }
89
+ async run(spec) {
90
+ const startedAtMs = Date.now();
91
+ const maxLogBytes = spec.maxLogBytes ?? this.defaultMaxLogBytes;
92
+ const tailBytes = spec.tailBytes ?? this.defaultTailBytes;
93
+ const repoRoot = spec.repoRoot;
94
+ const artifactsDirAbs = isProbablyAbsolute(spec.artifactsDir)
95
+ ? spec.artifactsDir
96
+ : path.join(repoRoot, spec.artifactsDir);
97
+ // Layout: .promptwheel/artifacts/<runId>/attempt-<n>/
98
+ const attemptDirAbs = path.join(artifactsDirAbs, spec.runId, `attempt-${spec.attempt}`);
99
+ await ensureDir(attemptDirAbs);
100
+ const safeName = sanitizeFileSegment(spec.stepName);
101
+ const base = `${pad2(spec.ordinal)}-${safeName}`;
102
+ const stdoutAbs = path.join(attemptDirAbs, `${base}.stdout.log`);
103
+ const stderrAbs = path.join(attemptDirAbs, `${base}.stderr.log`);
104
+ const stdoutPathDb = isProbablyAbsolute(spec.artifactsDir)
105
+ ? stdoutAbs
106
+ : path.join(spec.artifactsDir, spec.runId, `attempt-${spec.attempt}`, `${base}.stdout.log`);
107
+ const stderrPathDb = isProbablyAbsolute(spec.artifactsDir)
108
+ ? stderrAbs
109
+ : path.join(spec.artifactsDir, spec.runId, `attempt-${spec.attempt}`, `${base}.stderr.log`);
110
+ const stdoutStream = fs.createWriteStream(stdoutAbs, { flags: 'w' });
111
+ const stderrStream = fs.createWriteStream(stderrAbs, { flags: 'w' });
112
+ let stdoutTail = Buffer.alloc(0);
113
+ let stderrTail = Buffer.alloc(0);
114
+ const stdoutState = { bytesWritten: 0, truncated: false };
115
+ const stderrState = { bytesWritten: 0, truncated: false };
116
+ let timedOut = false;
117
+ let canceled = false;
118
+ let errorMessage;
119
+ let exitCode = null;
120
+ let signal = null;
121
+ let pid = null;
122
+ let timeoutHandle;
123
+ const endAndWaitStreams = async () => {
124
+ try {
125
+ stdoutStream.end();
126
+ }
127
+ catch { /* ignore */ }
128
+ try {
129
+ stderrStream.end();
130
+ }
131
+ catch { /* ignore */ }
132
+ await Promise.allSettled([
133
+ waitForStreamClose(stdoutStream),
134
+ waitForStreamClose(stderrStream),
135
+ ]);
136
+ };
137
+ const makeOutput = (stream) => {
138
+ const isStdout = stream === 'stdout';
139
+ const absPath = isStdout ? stdoutAbs : stderrAbs;
140
+ const pathDb = isStdout ? stdoutPathDb : stderrPathDb;
141
+ const bytes = isStdout ? stdoutState.bytesWritten : stderrState.bytesWritten;
142
+ const truncated = isStdout ? stdoutState.truncated : stderrState.truncated;
143
+ const tailBuf = isStdout ? stdoutTail : stderrTail;
144
+ return {
145
+ absPath,
146
+ path: pathDb,
147
+ bytes,
148
+ truncated,
149
+ tail: tailBuf.toString('utf8'),
150
+ };
151
+ };
152
+ const finalize = async (status) => {
153
+ const endedAtMs = Date.now();
154
+ await endAndWaitStreams();
155
+ return {
156
+ status,
157
+ exitCode,
158
+ signal,
159
+ errorMessage,
160
+ pid,
161
+ startedAtMs,
162
+ endedAtMs,
163
+ durationMs: Math.max(0, endedAtMs - startedAtMs),
164
+ stdout: makeOutput('stdout'),
165
+ stderr: makeOutput('stderr'),
166
+ };
167
+ };
168
+ let child;
169
+ const killChild = (_why) => {
170
+ if (!child || child.killed)
171
+ return;
172
+ try {
173
+ child.kill('SIGTERM');
174
+ }
175
+ catch { /* ignore */ }
176
+ // Escalate after grace period
177
+ setTimeout(() => {
178
+ if (!child || child.killed)
179
+ return;
180
+ try {
181
+ child.kill('SIGKILL');
182
+ }
183
+ catch { /* ignore */ }
184
+ }, this.killGraceMs);
185
+ };
186
+ const onAbort = () => {
187
+ canceled = true;
188
+ errorMessage = errorMessage ?? 'Canceled';
189
+ killChild('canceled');
190
+ };
191
+ // Shared cleanup: clears timeout, removes abort listener, then finalizes
192
+ const cleanupAndFinalize = async (status) => {
193
+ if (timeoutHandle)
194
+ clearTimeout(timeoutHandle);
195
+ if (spec.signal)
196
+ spec.signal.removeEventListener('abort', onAbort);
197
+ return await finalize(status);
198
+ };
199
+ try {
200
+ const env = { ...process.env, ...(spec.env ?? {}) };
201
+ const cwd = spec.cwd ?? repoRoot;
202
+ // If already aborted, short-circuit
203
+ if (spec.signal?.aborted) {
204
+ canceled = true;
205
+ errorMessage = 'Canceled (signal already aborted)';
206
+ return await finalize('canceled');
207
+ }
208
+ if (spec.signal) {
209
+ spec.signal.addEventListener('abort', onAbort, { once: true });
210
+ }
211
+ child = spawn(spec.cmd, {
212
+ cwd,
213
+ env,
214
+ shell: spec.shell ?? true,
215
+ stdio: ['ignore', 'pipe', 'pipe'],
216
+ });
217
+ pid = child.pid ?? null;
218
+ // Timeout handling
219
+ if (spec.timeoutMs && spec.timeoutMs > 0) {
220
+ timeoutHandle = setTimeout(() => {
221
+ timedOut = true;
222
+ errorMessage = errorMessage ?? `Timed out after ${spec.timeoutMs}ms`;
223
+ killChild('timeout');
224
+ }, spec.timeoutMs);
225
+ }
226
+ // Stream piping + tail capture
227
+ if (child.stdout) {
228
+ child.stdout.on('data', (chunk) => {
229
+ const buf = Buffer.from(chunk);
230
+ spec.onStdoutChunk?.(buf);
231
+ stdoutTail = appendTail(stdoutTail, buf, tailBytes);
232
+ writeCapped(stdoutStream, buf, stdoutState, maxLogBytes);
233
+ });
234
+ }
235
+ if (child.stderr) {
236
+ child.stderr.on('data', (chunk) => {
237
+ const buf = Buffer.from(chunk);
238
+ spec.onStderrChunk?.(buf);
239
+ stderrTail = appendTail(stderrTail, buf, tailBytes);
240
+ writeCapped(stderrStream, buf, stderrState, maxLogBytes);
241
+ });
242
+ }
243
+ // Spawn error (ENOENT, permissions, etc.)
244
+ const spawnErrorPromise = new Promise((resolve) => {
245
+ child.once('error', async (err) => {
246
+ errorMessage = errorMessage ?? err.message;
247
+ exitCode = null;
248
+ signal = null;
249
+ killChild('error');
250
+ resolve(await cleanupAndFinalize('failed'));
251
+ });
252
+ });
253
+ // Normal close path
254
+ const closePromise = new Promise((resolve) => {
255
+ child.once('close', async (code, sig) => {
256
+ exitCode = code;
257
+ signal = sig ?? null;
258
+ let status;
259
+ if (canceled)
260
+ status = 'canceled';
261
+ else if (timedOut)
262
+ status = 'timeout';
263
+ else if (code === 0)
264
+ status = 'success';
265
+ else
266
+ status = 'failed';
267
+ resolve(await cleanupAndFinalize(status));
268
+ });
269
+ });
270
+ // Write stream error (disk issue)
271
+ const writeErrorPromise = new Promise((resolve) => {
272
+ const onWriteError = async (err) => {
273
+ errorMessage = errorMessage ?? `Artifact write error: ${err.message}`;
274
+ killChild('error');
275
+ resolve(await cleanupAndFinalize('failed'));
276
+ };
277
+ stdoutStream.once('error', onWriteError);
278
+ stderrStream.once('error', onWriteError);
279
+ });
280
+ // First one wins
281
+ return await Promise.race([spawnErrorPromise, closePromise, writeErrorPromise]);
282
+ }
283
+ catch (err) {
284
+ errorMessage = errorMessage ?? (err instanceof Error ? err.message : String(err));
285
+ return await cleanupAndFinalize('failed');
286
+ }
287
+ }
288
+ }
289
+ /**
290
+ * Create a Node exec runner with default options
291
+ */
292
+ export function createExecRunner(opts) {
293
+ return new NodeExecRunner(opts);
294
+ }
295
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAgBlC;;GAEG;AAEH,6FAA6F;AAC7F,MAAM,qBAAqB,GAAG,SAAS,CAAC,CAAC,iBAAiB;AAE1D,+EAA+E;AAC/E,MAAM,kBAAkB,GAAG,MAAM,CAAC,CAAC,wBAAwB;AAE3D,mFAAmF;AACnF,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAEpC,4FAA4F;AAC5F,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,SAAS,kBAAkB,CAAC,CAAS;IACnC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,mBAAmB,CAAC,CAAS;IACpC,OAAO,CAAC;SACL,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,MAAM,CAAC;AACjD,CAAC;AAED,SAAS,IAAI,CAAC,CAAS;IACrB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,KAAa,EAAE,SAAiB;IACnE,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACjD,IAAI,QAAQ,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,QAAQ,CAAC;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAc;IACrC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAClB,MAAsB,EACtB,KAAa,EACb,KAAmD,EACnD,QAAgB;IAEhB,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO;IAE5B,MAAM,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;IAChD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;QACnC,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3C,KAAK,CAAC,YAAY,IAAI,SAAS,CAAC;IAChC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAsB;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,cAAc;IACR,kBAAkB,CAAS;IAC3B,gBAAgB,CAAS;IACzB,WAAW,CAAS;IAErC,YAAY,OAA8B,EAAE;QAC1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,qBAAqB,CAAC;QAC3E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,qBAAqB,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAc;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAE1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;YAC3D,CAAC,CAAC,IAAI,CAAC,YAAY;YACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAE3C,sDAAsD;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;QAE/B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;QAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;QAEjE,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;YACxD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;QAE9F,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;YACxD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;QAE9F,MAAM,YAAY,GAAG,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAErE,IAAI,UAAU,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,UAAU,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,WAAW,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAE1D,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,YAAgC,CAAC;QAErC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,GAAG,GAAkB,IAAI,CAAC;QAE9B,IAAI,aAAyC,CAAC;QAE9C,MAAM,iBAAiB,GAAG,KAAK,IAAmB,EAAE;YAClD,IAAI,CAAC;gBAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAClD,IAAI,CAAC;gBAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAElD,MAAM,OAAO,CAAC,UAAU,CAAC;gBACvB,kBAAkB,CAAC,YAAY,CAAC;gBAChC,kBAAkB,CAAC,YAAY,CAAC;aACjC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,MAA2B,EAAc,EAAE;YAC7D,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,CAAC;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;YACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;YAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;YAC3E,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;YAEnD,OAAO;gBACL,OAAO;gBACP,IAAI,EAAE,MAAM;gBACZ,KAAK;gBACL,SAAS;gBACT,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;aAC/B,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAkB,EAAuB,EAAE;YACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,iBAAiB,EAAE,CAAC;YAE1B,OAAO;gBACL,MAAM;gBACN,QAAQ;gBACR,MAAM;gBACN,YAAY;gBACZ,GAAG;gBACH,WAAW;gBACX,SAAS;gBACT,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;gBAChD,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC;gBAC5B,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC;aAC7B,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,KAA2C,CAAC;QAEhD,MAAM,SAAS,GAAG,CAAC,IAAsC,EAAE,EAAE;YAC3D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO;YAEnC,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAExB,8BAA8B;YAC9B,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM;oBAAE,OAAO;gBACnC,IAAI,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1B,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,QAAQ,GAAG,IAAI,CAAC;YAChB,YAAY,GAAG,YAAY,IAAI,UAAU,CAAC;YAC1C,SAAS,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC,CAAC;QAEF,yEAAyE;QACzE,MAAM,kBAAkB,GAAG,KAAK,EAAE,MAAkB,EAAuB,EAAE;YAC3E,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnE,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAA4B,CAAC;YAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC;YAEjC,oCAAoC;YACpC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACzB,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,GAAG,mCAAmC,CAAC;gBACnD,OAAO,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACtB,GAAG;gBACH,GAAG;gBACH,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YAEH,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;YAExB,mBAAmB;YACnB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACzC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,QAAQ,GAAG,IAAI,CAAC;oBAChB,YAAY,GAAG,YAAY,IAAI,mBAAmB,IAAI,CAAC,SAAS,IAAI,CAAC;oBACrE,SAAS,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,CAAC;YAED,+BAA+B;YAC/B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC/B,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;oBAC1B,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBACpD,WAAW,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC/B,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;oBAC1B,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBACpD,WAAW,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAC;YACL,CAAC;YAED,0CAA0C;YAC1C,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE;gBAC5D,KAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAU,EAAE,EAAE;oBACxC,YAAY,GAAG,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC;oBAC3C,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,GAAG,IAAI,CAAC;oBACd,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,OAAO,CAAC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,YAAY,GAAG,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE;gBACvD,KAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAmB,EAAE,GAA0B,EAAE,EAAE;oBAC7E,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC;oBAErB,IAAI,MAAkB,CAAC;oBACvB,IAAI,QAAQ;wBAAE,MAAM,GAAG,UAAU,CAAC;yBAC7B,IAAI,QAAQ;wBAAE,MAAM,GAAG,SAAS,CAAC;yBACjC,IAAI,IAAI,KAAK,CAAC;wBAAE,MAAM,GAAG,SAAS,CAAC;;wBACnC,MAAM,GAAG,QAAQ,CAAC;oBAEvB,OAAO,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,kCAAkC;YAClC,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE;gBAC5D,MAAM,YAAY,GAAG,KAAK,EAAE,GAAU,EAAE,EAAE;oBACxC,YAAY,GAAG,YAAY,IAAI,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC;oBACtE,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,OAAO,CAAC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC;gBAEF,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBACzC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,iBAAiB;YACjB,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,YAAY,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClF,OAAO,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA4B;IAC3D,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Claude Code CLI execution backend
3
+ */
4
+ import type { ClaudeResult, ExecutionBackend } from './types.js';
5
+ export declare class ClaudeExecutionBackend implements ExecutionBackend {
6
+ readonly name = "claude";
7
+ run(opts: {
8
+ worktreePath: string;
9
+ prompt: string;
10
+ timeoutMs: number;
11
+ verbose: boolean;
12
+ onProgress: (msg: string) => void;
13
+ onRawOutput?: (chunk: string) => void;
14
+ }): Promise<ClaudeResult>;
15
+ }
16
+ /**
17
+ * Run Claude Code CLI
18
+ */
19
+ export declare function runClaude(opts: {
20
+ worktreePath: string;
21
+ prompt: string;
22
+ timeoutMs: number;
23
+ verbose: boolean;
24
+ onProgress: (msg: string) => void;
25
+ onRawOutput?: (chunk: string) => void;
26
+ }): Promise<ClaudeResult>;
27
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/lib/execution-backends/claude.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgCjE,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,IAAI,YAAY;IAEzB,GAAG,CAAC,IAAI,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAClC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KACvC,GAAG,OAAO,CAAC,YAAY,CAAC;CAG1B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,GAAG,OAAO,CAAC,YAAY,CAAC,CAwIxB"}