cloving 1.2.0 → 1.4.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 (752) hide show
  1. package/README.md +700 -331
  2. package/dist/src/agent-harness-shell.d.ts +13 -0
  3. package/dist/src/agent-harness-shell.js +93 -0
  4. package/dist/src/agent-harness-versions.d.ts +8 -0
  5. package/dist/src/agent-harness-versions.js +49 -0
  6. package/dist/src/agent-harnesses.d.ts +4 -0
  7. package/dist/src/agent-harnesses.js +13 -0
  8. package/dist/src/authority/command-wait-checks.d.ts +8 -0
  9. package/dist/src/authority/command-wait-checks.js +88 -0
  10. package/dist/src/authority/command-wait-results.d.ts +15 -0
  11. package/dist/src/authority/command-wait-results.js +73 -0
  12. package/dist/src/authority/command-wait-view.d.ts +21 -0
  13. package/dist/src/authority/command-wait-view.js +34 -0
  14. package/dist/src/authority/command-waits.d.ts +39 -0
  15. package/dist/src/authority/command-waits.js +97 -0
  16. package/dist/src/authority/commands.d.ts +1 -0
  17. package/dist/src/authority/commands.js +46 -5
  18. package/dist/src/authority/dispatch-decision.d.ts +8 -0
  19. package/dist/src/authority/dispatch-decision.js +26 -1
  20. package/dist/src/authority/effect-requests.js +6 -3
  21. package/dist/src/authority/effect-results.js +4 -2
  22. package/dist/src/authority/gate-reduction.d.ts +1 -0
  23. package/dist/src/authority/gate-reduction.js +18 -3
  24. package/dist/src/authority/gates.d.ts +2 -1
  25. package/dist/src/authority/gates.js +5 -1
  26. package/dist/src/authority/history-state.d.ts +2 -0
  27. package/dist/src/authority/history-state.js +13 -1
  28. package/dist/src/authority/instants.d.ts +1 -0
  29. package/dist/src/authority/instants.js +21 -0
  30. package/dist/src/authority/operations.js +1 -1
  31. package/dist/src/authority/reduction-state.d.ts +2 -0
  32. package/dist/src/authority/reduction-state.js +5 -0
  33. package/dist/src/authority/reduction.d.ts +1 -1
  34. package/dist/src/authority/reduction.js +30 -1
  35. package/dist/src/authority/status-input.d.ts +3 -1
  36. package/dist/src/authority/status.d.ts +3 -0
  37. package/dist/src/authority/status.js +28 -3
  38. package/dist/src/authority/stop-sequence.d.ts +1 -0
  39. package/dist/src/authority/stop-sequence.js +2 -1
  40. package/dist/src/authority/transitions.d.ts +7 -5
  41. package/dist/src/authority/transitions.js +13 -0
  42. package/dist/src/broker/actor/authority-delivery.js +1 -0
  43. package/dist/src/broker/actor/authority-queries.d.ts +9 -2
  44. package/dist/src/broker/actor/authority-queries.js +29 -5
  45. package/dist/src/broker/actor/authority-receipts.js +11 -1
  46. package/dist/src/broker/actor/authority-session.js +2 -2
  47. package/dist/src/broker/actor/authority-settings.js +4 -0
  48. package/dist/src/broker/actor/authority-upgrades.d.ts +19 -2
  49. package/dist/src/broker/actor/authority-upgrades.js +7 -2
  50. package/dist/src/broker/actor/delivery-intents.d.ts +2 -1
  51. package/dist/src/broker/actor/delivery-intents.js +6 -4
  52. package/dist/src/broker/actor/effect-delivery.d.ts +1 -1
  53. package/dist/src/broker/actor/effect-delivery.js +18 -2
  54. package/dist/src/broker/actor/effect-plan.js +11 -2
  55. package/dist/src/broker/actor/effect-queries.d.ts +5 -0
  56. package/dist/src/broker/actor/effect-queries.js +16 -1
  57. package/dist/src/broker/actor/effect-turn.js +2 -0
  58. package/dist/src/broker/actor/pin-check.js +1 -1
  59. package/dist/src/broker/actor/stop-plan.js +10 -4
  60. package/dist/src/broker/actor/stop-turn.d.ts +2 -0
  61. package/dist/src/broker/actor/stop-turn.js +24 -11
  62. package/dist/src/broker/actor/turn-draft.d.ts +1 -0
  63. package/dist/src/broker/actor/turn-draft.js +4 -0
  64. package/dist/src/broker/actor/turn-state.js +6 -2
  65. package/dist/src/broker/authority-admission.js +80 -7
  66. package/dist/src/broker/authority-restore.d.ts +2 -0
  67. package/dist/src/broker/authority-restore.js +36 -1
  68. package/dist/src/broker/command-wait-restore.d.ts +31 -0
  69. package/dist/src/broker/command-wait-restore.js +86 -0
  70. package/dist/src/broker/decision-restore.d.ts +1 -1
  71. package/dist/src/broker/decision-restore.js +5 -4
  72. package/dist/src/broker/effect-upgrade.d.ts +2 -0
  73. package/dist/src/broker/effect-upgrade.js +8 -2
  74. package/dist/src/broker/socket-address.d.ts +3 -1
  75. package/dist/src/broker/socket-address.js +2 -2
  76. package/dist/src/cli/arguments.d.ts +22 -11
  77. package/dist/src/cli/arguments.js +73 -104
  78. package/dist/src/cli/chat-stores.d.ts +2 -0
  79. package/dist/src/cli/chat-stores.js +113 -0
  80. package/dist/src/cli/client.d.ts +4 -1
  81. package/dist/src/cli/client.js +9 -3
  82. package/dist/src/cli/command-effects.d.ts +7 -0
  83. package/dist/src/cli/command-effects.js +39 -0
  84. package/dist/src/cli/command-requests.d.ts +17 -0
  85. package/dist/src/cli/command-requests.js +43 -0
  86. package/dist/src/cli/command-waits.d.ts +9 -0
  87. package/dist/src/cli/command-waits.js +51 -0
  88. package/dist/src/cli/commands.js +21 -41
  89. package/dist/src/cli/config-arguments.d.ts +11 -0
  90. package/dist/src/cli/config-arguments.js +59 -0
  91. package/dist/src/cli/config-command.d.ts +2 -0
  92. package/dist/src/cli/config-command.js +105 -0
  93. package/dist/src/cli/config-file.d.ts +3 -0
  94. package/dist/src/cli/config-file.js +52 -0
  95. package/dist/src/cli/config-lock.d.ts +7 -0
  96. package/dist/src/cli/config-lock.js +61 -0
  97. package/dist/src/cli/config-notice.d.ts +5 -0
  98. package/dist/src/cli/config-notice.js +46 -0
  99. package/dist/src/cli/doctor-github.d.ts +9 -0
  100. package/dist/src/cli/doctor-github.js +138 -0
  101. package/dist/src/cli/doctor-harness.d.ts +13 -0
  102. package/dist/src/cli/doctor-harness.js +242 -0
  103. package/dist/src/cli/doctor-local.d.ts +18 -0
  104. package/dist/src/cli/doctor-local.js +77 -0
  105. package/dist/src/cli/doctor-runtime.d.ts +15 -0
  106. package/dist/src/cli/doctor-runtime.js +176 -0
  107. package/dist/src/cli/doctor-service.d.ts +1 -0
  108. package/dist/src/cli/doctor-service.js +11 -0
  109. package/dist/src/cli/doctor-workflows.d.ts +6 -0
  110. package/dist/src/cli/doctor-workflows.js +50 -0
  111. package/dist/src/cli/doctor.d.ts +15 -0
  112. package/dist/src/cli/doctor.js +187 -0
  113. package/dist/src/cli/github-ci-progress.d.ts +8 -0
  114. package/dist/src/cli/github-ci-progress.js +83 -0
  115. package/dist/src/cli/github-retry.d.ts +6 -0
  116. package/dist/src/cli/github-retry.js +47 -0
  117. package/dist/src/cli/harness-probes.d.ts +24 -0
  118. package/dist/src/cli/harness-probes.js +183 -0
  119. package/dist/src/cli/harness-processes.d.ts +6 -0
  120. package/dist/src/cli/harness-processes.js +36 -0
  121. package/dist/src/cli/init-command.d.ts +9 -0
  122. package/dist/src/cli/init-command.js +52 -0
  123. package/dist/src/cli/init-prompt-command.d.ts +10 -0
  124. package/dist/src/cli/init-prompt-command.js +145 -0
  125. package/dist/src/cli/init-prompt.d.ts +35 -0
  126. package/dist/src/cli/init-prompt.js +74 -0
  127. package/dist/src/cli/init-selection.d.ts +13 -0
  128. package/dist/src/cli/init-selection.js +75 -0
  129. package/dist/src/cli/main.d.ts +9 -1
  130. package/dist/src/cli/main.js +69 -61
  131. package/dist/src/cli/mcp-server.d.ts +1 -0
  132. package/dist/src/cli/mcp-server.js +156 -0
  133. package/dist/src/cli/mcp-tools.d.ts +15 -0
  134. package/dist/src/cli/mcp-tools.js +80 -0
  135. package/dist/src/cli/phone-arguments.d.ts +14 -0
  136. package/dist/src/cli/phone-arguments.js +37 -0
  137. package/dist/src/cli/phone-client.d.ts +2 -0
  138. package/dist/src/cli/phone-client.js +32 -0
  139. package/dist/src/cli/phone-command.d.ts +13 -0
  140. package/dist/src/cli/phone-command.js +101 -0
  141. package/dist/src/cli/probe-command.d.ts +36 -0
  142. package/dist/src/cli/probe-command.js +59 -0
  143. package/dist/src/cli/project-settings.d.ts +4 -0
  144. package/dist/src/cli/project-settings.js +33 -0
  145. package/dist/src/cli/render.d.ts +2 -1
  146. package/dist/src/cli/render.js +57 -54
  147. package/dist/src/cli/report-ci-jobs.d.ts +23 -0
  148. package/dist/src/cli/report-ci-jobs.js +103 -0
  149. package/dist/src/cli/report-ci-usage.d.ts +9 -0
  150. package/dist/src/cli/report-ci-usage.js +185 -0
  151. package/dist/src/cli/report-ci.d.ts +13 -0
  152. package/dist/src/cli/report-ci.js +74 -0
  153. package/dist/src/cli/report-closures.d.ts +6 -0
  154. package/dist/src/cli/report-closures.js +97 -0
  155. package/dist/src/cli/report-flow.d.ts +7 -0
  156. package/dist/src/cli/report-flow.js +122 -0
  157. package/dist/src/cli/report-github-reader.d.ts +29 -0
  158. package/dist/src/cli/report-github-reader.js +157 -0
  159. package/dist/src/cli/report-github.d.ts +25 -0
  160. package/dist/src/cli/report-github.js +181 -0
  161. package/dist/src/cli/report-operator.d.ts +3 -0
  162. package/dist/src/cli/report-operator.js +40 -0
  163. package/dist/src/cli/report-ready.d.ts +3 -0
  164. package/dist/src/cli/report-ready.js +96 -0
  165. package/dist/src/cli/report-text.d.ts +9 -0
  166. package/dist/src/cli/report-text.js +33 -0
  167. package/dist/src/cli/report.d.ts +18 -0
  168. package/dist/src/cli/report.js +269 -0
  169. package/dist/src/cli/repository-arguments.d.ts +5 -0
  170. package/dist/src/cli/repository-arguments.js +34 -0
  171. package/dist/src/cli/runtime-arguments.d.ts +6 -1
  172. package/dist/src/cli/runtime-arguments.js +22 -2
  173. package/dist/src/cli/runtime-directory.d.ts +6 -2
  174. package/dist/src/cli/runtime-directory.js +72 -14
  175. package/dist/src/cli/schedule-arguments.d.ts +14 -0
  176. package/dist/src/cli/schedule-arguments.js +26 -0
  177. package/dist/src/cli/schedule-render.d.ts +22 -0
  178. package/dist/src/cli/schedule-render.js +73 -0
  179. package/dist/src/cli/terminal-text.d.ts +3 -0
  180. package/dist/src/cli/terminal-text.js +28 -0
  181. package/dist/src/cli/toolchain.d.ts +2 -0
  182. package/dist/src/cli/toolchain.js +22 -2
  183. package/dist/src/cli/usage-render.d.ts +6 -0
  184. package/dist/src/cli/usage-render.js +67 -1
  185. package/dist/src/cli/usage.d.ts +3 -3
  186. package/dist/src/cli/usage.js +119 -50
  187. package/dist/src/cli/watch-actions.d.ts +2 -0
  188. package/dist/src/cli/watch-actions.js +6 -6
  189. package/dist/src/cli/watch-board-view.d.ts +1 -1
  190. package/dist/src/cli/watch-board-view.js +27 -4
  191. package/dist/src/cli/watch-board.d.ts +4 -2
  192. package/dist/src/cli/watch-board.js +58 -35
  193. package/dist/src/cli/watch-card-forms.d.ts +1 -1
  194. package/dist/src/cli/watch-card-forms.js +13 -12
  195. package/dist/src/cli/watch-client.d.ts +1 -1
  196. package/dist/src/cli/watch-client.js +7 -11
  197. package/dist/src/cli/watch-header-view.d.ts +22 -0
  198. package/dist/src/cli/watch-header-view.js +104 -0
  199. package/dist/src/cli/watch-model.d.ts +4 -1
  200. package/dist/src/cli/watch-model.js +34 -15
  201. package/dist/src/cli/watch-page.js +57 -23
  202. package/dist/src/cli/watch-phases.d.ts +12 -3
  203. package/dist/src/cli/watch-phases.js +68 -11
  204. package/dist/src/cli/watch-phone-client.d.ts +1 -0
  205. package/dist/src/cli/watch-phone-client.js +84 -0
  206. package/dist/src/cli/watch-phone-view.d.ts +56 -0
  207. package/dist/src/cli/watch-phone-view.js +113 -0
  208. package/dist/src/cli/watch-phone.d.ts +5 -0
  209. package/dist/src/cli/watch-phone.js +53 -0
  210. package/dist/src/cli/watch-pr-board.js +1 -1
  211. package/dist/src/cli/watch-pr-command.d.ts +1 -0
  212. package/dist/src/cli/watch-pull-request.d.ts +3 -1
  213. package/dist/src/cli/watch-pull-request.js +22 -8
  214. package/dist/src/cli/watch-reads.d.ts +2 -0
  215. package/dist/src/cli/watch-reads.js +17 -16
  216. package/dist/src/cli/watch-render.d.ts +23 -1
  217. package/dist/src/cli/watch-run-input.d.ts +0 -1
  218. package/dist/src/cli/watch-run-input.js +0 -13
  219. package/dist/src/cli/watch-server.js +29 -11
  220. package/dist/src/cli/watch-turn.d.ts +4 -1
  221. package/dist/src/cli/watch-turn.js +37 -1
  222. package/dist/src/cli/watch-usage.js +5 -1
  223. package/dist/src/cli/watch-view.d.ts +4 -21
  224. package/dist/src/cli/watch-view.js +26 -118
  225. package/dist/src/cli.js +165 -28
  226. package/dist/src/command-settings.d.ts +16 -0
  227. package/dist/src/command-settings.js +42 -0
  228. package/dist/src/command-wait.d.ts +4 -0
  229. package/dist/src/command-wait.js +45 -0
  230. package/dist/src/configuration-change.d.ts +18 -0
  231. package/dist/src/configuration-change.js +76 -0
  232. package/dist/src/configuration-display.d.ts +21 -0
  233. package/dist/src/configuration-display.js +69 -0
  234. package/dist/src/configuration-schema.d.ts +58 -0
  235. package/dist/src/configuration-schema.js +163 -0
  236. package/dist/src/daemon/attachment-file.d.ts +6 -0
  237. package/dist/src/daemon/attachment-file.js +86 -0
  238. package/dist/src/daemon/attachments.d.ts +14 -0
  239. package/dist/src/daemon/attachments.js +17 -0
  240. package/dist/src/daemon/claude-recovery.d.ts +50 -0
  241. package/dist/src/daemon/claude-recovery.js +204 -0
  242. package/dist/src/daemon/claude-stream.d.ts +27 -0
  243. package/dist/src/daemon/claude-stream.js +63 -0
  244. package/dist/src/daemon/claude-turn.d.ts +18 -18
  245. package/dist/src/daemon/claude-turn.js +151 -105
  246. package/dist/src/daemon/claude-worker.d.ts +5 -4
  247. package/dist/src/daemon/claude-worker.js +149 -158
  248. package/dist/src/daemon/command-journal.d.ts +5 -0
  249. package/dist/src/daemon/command-journal.js +50 -0
  250. package/dist/src/daemon/command-process.d.ts +28 -0
  251. package/dist/src/daemon/command-process.js +164 -0
  252. package/dist/src/daemon/command-worker.d.ts +19 -0
  253. package/dist/src/daemon/command-worker.js +182 -0
  254. package/dist/src/daemon/cursor-stream.d.ts +4 -0
  255. package/dist/src/daemon/cursor-stream.js +154 -0
  256. package/dist/src/daemon/daemon-adapters.d.ts +60 -0
  257. package/dist/src/daemon/daemon-adapters.js +126 -0
  258. package/dist/src/daemon/daemon-loops.d.ts +16 -0
  259. package/dist/src/daemon/daemon-loops.js +41 -0
  260. package/dist/src/daemon/daemon.d.ts +2 -33
  261. package/dist/src/daemon/daemon.js +133 -131
  262. package/dist/src/daemon/declared-input.d.ts +3 -0
  263. package/dist/src/daemon/declared-input.js +9 -0
  264. package/dist/src/daemon/delivery-router.js +1 -1
  265. package/dist/src/daemon/gemini-stream.d.ts +4 -0
  266. package/dist/src/daemon/gemini-stream.js +129 -0
  267. package/dist/src/daemon/github-attach.d.ts +2 -0
  268. package/dist/src/daemon/github-attach.js +149 -0
  269. package/dist/src/daemon/github-ci-filters.d.ts +6 -0
  270. package/dist/src/daemon/github-ci-filters.js +138 -0
  271. package/dist/src/daemon/github-ci-rerun.d.ts +26 -0
  272. package/dist/src/daemon/github-ci-rerun.js +92 -0
  273. package/dist/src/daemon/github-ci-workflows.d.ts +10 -0
  274. package/dist/src/daemon/github-ci-workflows.js +148 -0
  275. package/dist/src/daemon/github-ci.js +109 -10
  276. package/dist/src/daemon/github-issue-methods.d.ts +2 -0
  277. package/dist/src/daemon/github-issue-methods.js +37 -2
  278. package/dist/src/daemon/github-merge-call.d.ts +4 -1
  279. package/dist/src/daemon/github-merge-call.js +10 -3
  280. package/dist/src/daemon/github-merge.js +58 -26
  281. package/dist/src/daemon/github-methods.js +22 -2
  282. package/dist/src/daemon/github-operation.d.ts +5 -0
  283. package/dist/src/daemon/github-operation.js +6 -0
  284. package/dist/src/daemon/github-retry.js +8 -44
  285. package/dist/src/daemon/github-worker.d.ts +4 -0
  286. package/dist/src/daemon/github-worker.js +6 -0
  287. package/dist/src/daemon/issue-queue.d.ts +1 -0
  288. package/dist/src/daemon/issue-queue.js +16 -34
  289. package/dist/src/daemon/notify-events.d.ts +6 -0
  290. package/dist/src/daemon/notify-events.js +84 -0
  291. package/dist/src/daemon/notify-journal.js +1 -1
  292. package/dist/src/daemon/notify-message.d.ts +4 -1
  293. package/dist/src/daemon/notify-message.js +36 -0
  294. package/dist/src/daemon/notify.d.ts +1 -1
  295. package/dist/src/daemon/notify.js +7 -78
  296. package/dist/src/daemon/opencode-stream.d.ts +5 -0
  297. package/dist/src/daemon/opencode-stream.js +87 -0
  298. package/dist/src/daemon/operation-journal.d.ts +1 -0
  299. package/dist/src/daemon/queue-status.d.ts +10 -0
  300. package/dist/src/daemon/queue-status.js +51 -0
  301. package/dist/src/daemon/resume-index-lock.d.ts +13 -0
  302. package/dist/src/daemon/resume-index-lock.js +160 -0
  303. package/dist/src/daemon/resume-worktree.d.ts +7 -0
  304. package/dist/src/daemon/resume-worktree.js +29 -0
  305. package/dist/src/daemon/retry-worktree.d.ts +18 -0
  306. package/dist/src/daemon/retry-worktree.js +139 -0
  307. package/dist/src/daemon/retrying-turn.d.ts +2 -10
  308. package/dist/src/daemon/retrying-turn.js +145 -141
  309. package/dist/src/daemon/schedule-control.d.ts +26 -0
  310. package/dist/src/daemon/schedule-control.js +110 -0
  311. package/dist/src/daemon/schedule-journal.d.ts +6 -0
  312. package/dist/src/daemon/schedule-journal.js +120 -0
  313. package/dist/src/daemon/text-output.d.ts +18 -0
  314. package/dist/src/daemon/text-output.js +44 -0
  315. package/dist/src/daemon/ticket-registration.d.ts +7 -14
  316. package/dist/src/daemon/ticket-registration.js +93 -114
  317. package/dist/src/daemon/turn-attempt-journal.d.ts +38 -0
  318. package/dist/src/daemon/turn-attempt-journal.js +136 -0
  319. package/dist/src/daemon/turn-attempts.d.ts +47 -0
  320. package/dist/src/daemon/turn-attempts.js +166 -0
  321. package/dist/src/daemon/turn-command.d.ts +10 -0
  322. package/dist/src/daemon/turn-command.js +33 -0
  323. package/dist/src/daemon/turn-report.d.ts +25 -0
  324. package/dist/src/daemon/turn-report.js +118 -0
  325. package/dist/src/daemon/work-tree.d.ts +11 -1
  326. package/dist/src/daemon/work-tree.js +35 -12
  327. package/dist/src/daemon/worker-profile.d.ts +8 -0
  328. package/dist/src/daemon/worker-profile.js +40 -0
  329. package/dist/src/daemon/workflow-generations.d.ts +32 -0
  330. package/dist/src/daemon/workflow-generations.js +57 -0
  331. package/dist/src/daemon/workflow-replay.d.ts +16 -0
  332. package/dist/src/daemon/workflow-replay.js +58 -0
  333. package/dist/src/daemon/workflow-schedules.d.ts +30 -0
  334. package/dist/src/daemon/workflow-schedules.js +238 -0
  335. package/dist/src/daemon/worktree-processes.d.ts +9 -0
  336. package/dist/src/daemon/worktree-processes.js +151 -0
  337. package/dist/src/decision-wait.d.ts +1 -0
  338. package/dist/src/decision-wait.js +3 -0
  339. package/dist/src/delivery-backoff.d.ts +1 -0
  340. package/dist/src/delivery-backoff.js +3 -0
  341. package/dist/src/doctor-report.d.ts +22 -0
  342. package/dist/src/doctor-report.js +63 -0
  343. package/dist/src/execution-pin.d.ts +5 -0
  344. package/dist/src/execution-pin.js +67 -4
  345. package/dist/src/grok-result.d.ts +12 -0
  346. package/dist/src/grok-result.js +61 -0
  347. package/dist/src/harness-defaults.d.ts +35 -0
  348. package/dist/src/harness-defaults.js +121 -0
  349. package/dist/src/harness-start.d.ts +15 -0
  350. package/dist/src/harness-start.js +37 -0
  351. package/dist/src/host/command-wait.d.ts +38 -0
  352. package/dist/src/host/command-wait.js +115 -0
  353. package/dist/src/host/decision-resume.d.ts +35 -0
  354. package/dist/src/host/decision-resume.js +86 -0
  355. package/dist/src/host/gate-bridge.d.ts +48 -0
  356. package/dist/src/host/gate-bridge.js +124 -0
  357. package/dist/src/host/run-wait.d.ts +26 -0
  358. package/dist/src/host/run-wait.js +37 -0
  359. package/dist/src/host/start-delivery.d.ts +6 -8
  360. package/dist/src/host/start-delivery.js +13 -18
  361. package/dist/src/host/step-bridge-host.d.ts +8 -20
  362. package/dist/src/host/step-bridge-host.js +65 -58
  363. package/dist/src/merge-request.d.ts +19 -0
  364. package/dist/src/merge-request.js +32 -0
  365. package/dist/src/operation-identity.d.ts +1 -0
  366. package/dist/src/operation-identity.js +4 -0
  367. package/dist/src/phone/canonical-json.d.ts +1 -0
  368. package/dist/src/phone/canonical-json.js +16 -0
  369. package/dist/src/phone/phone-link.d.ts +7 -0
  370. package/dist/src/phone/phone-link.js +21 -0
  371. package/dist/src/phone/qr-data.d.ts +8 -0
  372. package/dist/src/phone/qr-data.js +133 -0
  373. package/dist/src/phone/qr-matrix.d.ts +6 -0
  374. package/dist/src/phone/qr-matrix.js +175 -0
  375. package/dist/src/phone/qr-penalty.d.ts +3 -0
  376. package/dist/src/phone/qr-penalty.js +67 -0
  377. package/dist/src/phone/qr-picture.d.ts +5 -0
  378. package/dist/src/phone/qr-picture.js +24 -0
  379. package/dist/src/private-config.schema.json +303 -0
  380. package/dist/src/project-config.schema.json +105 -0
  381. package/dist/src/project-settings.d.ts +19 -0
  382. package/dist/src/project-settings.js +133 -0
  383. package/dist/src/queue-spend.d.ts +4 -0
  384. package/dist/src/queue-spend.js +21 -0
  385. package/dist/src/relay/answer-check.d.ts +24 -0
  386. package/dist/src/relay/answer-check.js +145 -0
  387. package/dist/src/relay/answer-inbox.d.ts +15 -0
  388. package/dist/src/relay/answer-inbox.js +173 -0
  389. package/dist/src/relay/daemon-keys.d.ts +16 -0
  390. package/dist/src/relay/daemon-keys.js +75 -0
  391. package/dist/src/relay/decision-check.d.ts +3 -0
  392. package/dist/src/relay/decision-check.js +77 -0
  393. package/dist/src/relay/decision-close.d.ts +6 -0
  394. package/dist/src/relay/decision-close.js +72 -0
  395. package/dist/src/relay/decision-envelopes.d.ts +29 -0
  396. package/dist/src/relay/decision-envelopes.js +93 -0
  397. package/dist/src/relay/decision-watch.d.ts +14 -0
  398. package/dist/src/relay/decision-watch.js +68 -0
  399. package/dist/src/relay/envelope-post.d.ts +8 -0
  400. package/dist/src/relay/envelope-post.js +71 -0
  401. package/dist/src/relay/envelope.d.ts +28 -0
  402. package/dist/src/relay/envelope.js +53 -0
  403. package/dist/src/relay/hpke.d.ts +25 -0
  404. package/dist/src/relay/hpke.js +108 -0
  405. package/dist/src/relay/pairing-checks.d.ts +42 -0
  406. package/dist/src/relay/pairing-checks.js +172 -0
  407. package/dist/src/relay/pairing-follow.d.ts +8 -0
  408. package/dist/src/relay/pairing-follow.js +95 -0
  409. package/dist/src/relay/pairing-session.d.ts +29 -0
  410. package/dist/src/relay/pairing-session.js +87 -0
  411. package/dist/src/relay/phone-delivery.d.ts +51 -0
  412. package/dist/src/relay/phone-delivery.js +139 -0
  413. package/dist/src/relay/phone-devices.d.ts +36 -0
  414. package/dist/src/relay/phone-devices.js +46 -0
  415. package/dist/src/relay/phone-inbox.d.ts +18 -0
  416. package/dist/src/relay/phone-inbox.js +17 -0
  417. package/dist/src/relay/phone-operations.d.ts +18 -0
  418. package/dist/src/relay/phone-operations.js +121 -0
  419. package/dist/src/relay/phone-outbox.d.ts +21 -0
  420. package/dist/src/relay/phone-outbox.js +25 -0
  421. package/dist/src/relay/phone-socket.d.ts +6 -0
  422. package/dist/src/relay/phone-socket.js +63 -0
  423. package/dist/src/relay/relay-control.d.ts +7 -0
  424. package/dist/src/relay/relay-control.js +24 -0
  425. package/dist/src/relay/relay-files.d.ts +2 -0
  426. package/dist/src/relay/relay-files.js +23 -0
  427. package/dist/src/relay/relay-heartbeat.d.ts +17 -0
  428. package/dist/src/relay/relay-heartbeat.js +81 -0
  429. package/dist/src/relay/relay-http.d.ts +14 -0
  430. package/dist/src/relay/relay-http.js +63 -0
  431. package/dist/src/relay/relay-registration.d.ts +15 -0
  432. package/dist/src/relay/relay-registration.js +63 -0
  433. package/dist/src/relay/relay-service.d.ts +28 -0
  434. package/dist/src/relay/relay-service.js +218 -0
  435. package/dist/src/relay/relay-store.d.ts +48 -0
  436. package/dist/src/relay/relay-store.js +131 -0
  437. package/dist/src/relay/sealed-post.d.ts +25 -0
  438. package/dist/src/relay/sealed-post.js +52 -0
  439. package/dist/src/relay.d.ts +1 -0
  440. package/dist/src/relay.js +8 -0
  441. package/dist/src/report-ci.d.ts +164 -0
  442. package/dist/src/report-ci.js +32 -0
  443. package/dist/src/report-effects.d.ts +15 -0
  444. package/dist/src/report-effects.js +212 -0
  445. package/dist/src/report-flow-types.d.ts +38 -0
  446. package/dist/src/report-flow-types.js +7 -0
  447. package/dist/src/report-flow.d.ts +43 -0
  448. package/dist/src/report-flow.js +193 -0
  449. package/dist/src/report-operator.d.ts +67 -0
  450. package/dist/src/report-operator.js +25 -0
  451. package/dist/src/report-quality.d.ts +221 -0
  452. package/dist/src/report-quality.js +94 -0
  453. package/dist/src/report-ready.d.ts +23 -0
  454. package/dist/src/report-ready.js +117 -0
  455. package/dist/src/report-statistics.d.ts +51 -0
  456. package/dist/src/report-statistics.js +106 -0
  457. package/dist/src/report.d.ts +712 -0
  458. package/dist/src/report.js +234 -0
  459. package/dist/src/repository-identity.d.ts +4 -0
  460. package/dist/src/repository-identity.js +4 -0
  461. package/dist/src/review-subject.d.ts +41 -0
  462. package/dist/src/review-subject.js +91 -0
  463. package/dist/src/run-wait.d.ts +23 -0
  464. package/dist/src/run-wait.js +20 -0
  465. package/dist/src/schedule-progress.d.ts +33 -0
  466. package/dist/src/schedule-progress.js +45 -0
  467. package/dist/src/service/active-tickets.d.ts +4 -0
  468. package/dist/src/service/active-tickets.js +49 -0
  469. package/dist/src/service/command-effects.d.ts +4 -0
  470. package/dist/src/service/command-effects.js +16 -0
  471. package/dist/src/service/command-waits.d.ts +34 -0
  472. package/dist/src/service/command-waits.js +86 -0
  473. package/dist/src/service/decision-handler.d.ts +4 -0
  474. package/dist/src/service/decision-handler.js +39 -4
  475. package/dist/src/service/expiry.js +2 -0
  476. package/dist/src/service/gateway.js +21 -4
  477. package/dist/src/service/queue-spend.d.ts +6 -0
  478. package/dist/src/service/queue-spend.js +68 -0
  479. package/dist/src/service/registry.d.ts +16 -3
  480. package/dist/src/service/registry.js +34 -3
  481. package/dist/src/service/replies.d.ts +16 -1
  482. package/dist/src/service/replies.js +23 -0
  483. package/dist/src/service/run-handlers.js +35 -56
  484. package/dist/src/service/run-metadata.d.ts +22 -0
  485. package/dist/src/service/run-metadata.js +138 -0
  486. package/dist/src/service/run-waits.d.ts +3 -0
  487. package/dist/src/service/run-waits.js +41 -0
  488. package/dist/src/service/service.d.ts +22 -2
  489. package/dist/src/service/service.js +29 -13
  490. package/dist/src/service/submission-handler.d.ts +0 -1
  491. package/dist/src/service/submission-handler.js +22 -36
  492. package/dist/src/service/worker-port.d.ts +1 -0
  493. package/dist/src/service/worker-port.js +9 -1
  494. package/dist/src/service/worker-totals.d.ts +2 -0
  495. package/dist/src/service/worker-totals.js +9 -24
  496. package/dist/src/step-bridge.d.ts +43 -0
  497. package/dist/src/steps/command-wait.d.ts +12 -0
  498. package/dist/src/steps/command-wait.js +26 -0
  499. package/dist/src/steps/merge-by-person.d.ts +2 -0
  500. package/dist/src/steps/merge-by-person.js +18 -0
  501. package/dist/src/steps/merge-when-green.d.ts +2 -0
  502. package/dist/src/steps/merge-when-green.js +62 -0
  503. package/dist/src/steps/open-decision-wait.d.ts +2 -0
  504. package/dist/src/steps/open-decision-wait.js +8 -0
  505. package/dist/src/steps/review-by-agent.d.ts +5 -0
  506. package/dist/src/steps/review-by-agent.js +124 -0
  507. package/dist/src/steps/review-by-person.d.ts +4 -0
  508. package/dist/src/steps/review-by-person.js +19 -0
  509. package/dist/src/steps/review-subject.d.ts +2 -0
  510. package/dist/src/steps/review-subject.js +11 -0
  511. package/dist/src/steps/run-command.d.ts +2 -0
  512. package/dist/src/steps/run-command.js +15 -0
  513. package/dist/src/steps/sleep.d.ts +3 -0
  514. package/dist/src/steps/sleep.js +19 -0
  515. package/dist/src/steps/wait-for-command.d.ts +3 -0
  516. package/dist/src/steps/wait-for-command.js +17 -0
  517. package/dist/src/steps/wait-for-decision.d.ts +2 -0
  518. package/dist/src/steps/wait-for-decision.js +71 -0
  519. package/dist/src/steps/wait-for-run.d.ts +5 -0
  520. package/dist/src/steps/wait-for-run.js +9 -0
  521. package/dist/src/storage/command-wait-rows.d.ts +30 -0
  522. package/dist/src/storage/command-wait-rows.js +96 -0
  523. package/dist/src/storage/decision-snapshots.d.ts +9 -1
  524. package/dist/src/storage/decision-snapshots.js +22 -2
  525. package/dist/src/storage/domain-changes.d.ts +2 -0
  526. package/dist/src/storage/domain-changes.js +3 -0
  527. package/dist/src/storage/domain-schema.d.ts +13 -1
  528. package/dist/src/storage/domain-schema.js +31 -4
  529. package/dist/src/storage/effect-schema.d.ts +1 -0
  530. package/dist/src/storage/effect-schema.js +5 -0
  531. package/dist/src/submission.d.ts +4 -0
  532. package/dist/src/submission.js +6 -2
  533. package/dist/src/testing-requests.d.ts +15 -0
  534. package/dist/src/testing-requests.js +93 -0
  535. package/dist/src/testing.d.ts +23 -0
  536. package/dist/src/testing.js +211 -0
  537. package/dist/src/ticket-status-stream.d.ts +9 -0
  538. package/dist/src/ticket-status-stream.js +94 -0
  539. package/dist/src/token-prices.d.ts +12 -4
  540. package/dist/src/token-prices.js +15 -2
  541. package/dist/src/turn-profile.d.ts +1 -0
  542. package/dist/src/turn-profile.js +8 -1
  543. package/dist/src/worker-usage.d.ts +17 -0
  544. package/dist/src/worker-usage.js +60 -0
  545. package/dist/src/workflow-admission.d.ts +5 -0
  546. package/dist/src/workflow-candidate.d.ts +8 -2
  547. package/dist/src/workflow-candidate.js +59 -6
  548. package/dist/src/workflow-contracts.d.ts +1 -0
  549. package/dist/src/workflow-contracts.js +9 -2
  550. package/dist/src/workflow-declaration.d.ts +21 -3
  551. package/dist/src/workflow-declaration.js +77 -9
  552. package/dist/src/workflow-discovery.d.ts +3 -13
  553. package/dist/src/workflow-discovery.js +5 -14
  554. package/dist/src/workflow-refusals.js +3 -1
  555. package/dist/src/workflow-schedule.d.ts +22 -0
  556. package/dist/src/workflow-schedule.js +53 -0
  557. package/dist/src/workflows.d.ts +12 -2
  558. package/dist/src/workflows.js +9 -1
  559. package/dist/tools/admit-workflow.d.ts +1 -0
  560. package/dist/tools/admit-workflow.js +18 -5
  561. package/dist/tools/doctor-adoption.d.ts +1 -0
  562. package/dist/tools/doctor-adoption.js +11 -0
  563. package/dist/tools/project-configuration.d.ts +4 -0
  564. package/dist/tools/project-configuration.js +47 -0
  565. package/dist/tools/red-green-command.d.ts +1 -0
  566. package/dist/tools/red-green-command.js +174 -0
  567. package/dist/tools/red-green-process.d.ts +10 -0
  568. package/dist/tools/red-green-process.js +59 -0
  569. package/dist/tools/self-host-processes.d.ts +3 -0
  570. package/dist/tools/self-host-processes.js +63 -33
  571. package/dist/tools/self-host-project.d.ts +4 -0
  572. package/dist/tools/self-host-project.js +42 -60
  573. package/dist/tools/self-host-runtime.d.ts +16 -0
  574. package/dist/tools/self-host-runtime.js +60 -0
  575. package/dist/tools/self-host-workflows.d.ts +1 -0
  576. package/dist/tools/self-host-workflows.js +36 -1
  577. package/dist/tools/self-host.js +128 -71
  578. package/dist/tools/template-command.d.ts +1 -0
  579. package/dist/tools/template-command.js +160 -0
  580. package/dist/tools/template-copy.d.ts +11 -0
  581. package/dist/tools/template-copy.js +130 -0
  582. package/dist/tools/template-files.d.ts +17 -0
  583. package/dist/tools/template-files.js +74 -0
  584. package/dist/tools/workflow-bundles.js +1 -0
  585. package/dist/tools/workflow-candidate-counts.d.ts +6 -2
  586. package/dist/tools/workflow-candidate-counts.js +31 -16
  587. package/dist/tools/workflow-candidate-fields.d.ts +5 -0
  588. package/dist/tools/workflow-candidate-fields.js +24 -0
  589. package/dist/tools/workflow-candidate-helper-counts.d.ts +10 -0
  590. package/dist/tools/workflow-candidate-helper-counts.js +129 -0
  591. package/dist/tools/workflow-candidate-program.d.ts +2 -0
  592. package/dist/tools/workflow-candidate-program.js +36 -8
  593. package/dist/tools/workflow-candidate-shape.d.ts +3 -0
  594. package/dist/tools/workflow-candidate-shape.js +90 -0
  595. package/dist/tools/workflow-candidate-source.js +92 -16
  596. package/dist/tools/workflow-candidate-syntax.d.ts +9 -3
  597. package/dist/tools/workflow-candidate-syntax.js +83 -109
  598. package/dist/tools/workflow-command.d.ts +1 -0
  599. package/dist/tools/workflow-command.js +142 -0
  600. package/dist/tools/workflow-folder-capture.d.ts +1 -0
  601. package/dist/tools/workflow-folder-capture.js +47 -2
  602. package/dist/tools/workflow-folders.d.ts +18 -3
  603. package/dist/tools/workflow-folders.js +60 -7
  604. package/dist/tools/workflow-test-hook.d.ts +7 -0
  605. package/dist/tools/workflow-test-hook.js +16 -0
  606. package/dist/tools/workflow-test-loader.d.ts +1 -0
  607. package/dist/tools/workflow-test-loader.js +10 -0
  608. package/package.json +60 -10
  609. package/templates/develop/README.md +90 -0
  610. package/templates/develop/develop/accept.ts +11 -0
  611. package/templates/develop/develop/flow-tests.ts +394 -0
  612. package/templates/develop/develop/local.ts +40 -0
  613. package/templates/develop/develop/option-tests.ts +174 -0
  614. package/templates/develop/develop/partial-choice.ts +29 -0
  615. package/templates/develop/develop/partial.ts +28 -0
  616. package/templates/develop/develop/pull.ts +156 -0
  617. package/templates/develop/develop/queue-partial.ts +39 -0
  618. package/templates/develop/develop/refusal-tests.ts +251 -0
  619. package/templates/develop/develop/report.ts +156 -0
  620. package/templates/develop/develop/round.ts +40 -0
  621. package/templates/develop/develop/scenarios.ts +87 -0
  622. package/templates/develop/develop/turn.ts +68 -0
  623. package/templates/develop/develop.declaration.json +24 -0
  624. package/templates/develop/develop.test.ts +287 -0
  625. package/templates/develop/develop.ts +30 -0
  626. package/templates/develop/template.json +153 -0
  627. package/templates/idea-to-issue/README.md +27 -0
  628. package/templates/idea-to-issue/idea-to-issue/effects.ts +52 -0
  629. package/templates/idea-to-issue/idea-to-issue/leave.ts +10 -0
  630. package/templates/idea-to-issue/idea-to-issue/next.ts +29 -0
  631. package/templates/idea-to-issue/idea-to-issue/post-person.ts +18 -0
  632. package/templates/idea-to-issue/idea-to-issue/post.ts +50 -0
  633. package/templates/idea-to-issue/idea-to-issue/queue.ts +27 -0
  634. package/templates/idea-to-issue/idea-to-issue/review.ts +42 -0
  635. package/templates/idea-to-issue/idea-to-issue/scenarios.ts +50 -0
  636. package/templates/idea-to-issue/idea-to-issue/turn.ts +40 -0
  637. package/templates/idea-to-issue/idea-to-issue.declaration.json +16 -0
  638. package/templates/idea-to-issue/idea-to-issue.test.ts +79 -0
  639. package/templates/idea-to-issue/idea-to-issue.ts +49 -0
  640. package/templates/idea-to-issue/template.json +81 -0
  641. package/templates/review-day/README.md +97 -0
  642. package/templates/review-day/review-day/critique.ts +58 -0
  643. package/templates/review-day/review-day/decision.ts +29 -0
  644. package/templates/review-day/review-day/facts.ts +69 -0
  645. package/templates/review-day/review-day/label.ts +29 -0
  646. package/templates/review-day/review-day/next.ts +28 -0
  647. package/templates/review-day/review-day/post.ts +27 -0
  648. package/templates/review-day/review-day/report.ts +98 -0
  649. package/templates/review-day/review-day/rules.ts +12 -0
  650. package/templates/review-day/review-day/scenarios.ts +76 -0
  651. package/templates/review-day/review-day/turn.ts +73 -0
  652. package/templates/review-day/review-day.declaration.json +16 -0
  653. package/templates/review-day/review-day.test.ts +362 -0
  654. package/templates/review-day/review-day.ts +37 -0
  655. package/templates/review-day/template.json +56 -0
  656. package/dist/src/chats/analysis-batches.d.ts +0 -42
  657. package/dist/src/chats/analysis-batches.js +0 -97
  658. package/dist/src/chats/analysis-checkpoint.d.ts +0 -29
  659. package/dist/src/chats/analysis-checkpoint.js +0 -31
  660. package/dist/src/chats/analysis-contract.d.ts +0 -80
  661. package/dist/src/chats/analysis-contract.js +0 -16
  662. package/dist/src/chats/analysis-data.d.ts +0 -3
  663. package/dist/src/chats/analysis-data.js +0 -85
  664. package/dist/src/chats/analysis-input.d.ts +0 -18
  665. package/dist/src/chats/analysis-input.js +0 -97
  666. package/dist/src/chats/analysis-links.d.ts +0 -2
  667. package/dist/src/chats/analysis-links.js +0 -25
  668. package/dist/src/chats/analysis-merge.d.ts +0 -16
  669. package/dist/src/chats/analysis-merge.js +0 -134
  670. package/dist/src/chats/analysis-prompt.d.ts +0 -18
  671. package/dist/src/chats/analysis-prompt.js +0 -42
  672. package/dist/src/chats/analysis-proposal.d.ts +0 -4
  673. package/dist/src/chats/analysis-proposal.js +0 -41
  674. package/dist/src/chats/analysis-provenance.d.ts +0 -4
  675. package/dist/src/chats/analysis-provenance.js +0 -99
  676. package/dist/src/chats/analysis-shape.d.ts +0 -4
  677. package/dist/src/chats/analysis-shape.js +0 -235
  678. package/dist/src/chats/analysis.d.ts +0 -3
  679. package/dist/src/chats/analysis.js +0 -42
  680. package/dist/src/chats/corpus-input.d.ts +0 -5
  681. package/dist/src/chats/corpus-input.js +0 -288
  682. package/dist/src/chats/destination.d.ts +0 -4
  683. package/dist/src/chats/destination.js +0 -96
  684. package/dist/src/chats/import.d.ts +0 -15
  685. package/dist/src/chats/import.js +0 -243
  686. package/dist/src/chats/input-file.d.ts +0 -3
  687. package/dist/src/chats/input-file.js +0 -32
  688. package/dist/src/chats/normalize.d.ts +0 -29
  689. package/dist/src/chats/normalize.js +0 -155
  690. package/dist/src/chats/previous-import.d.ts +0 -5
  691. package/dist/src/chats/previous-import.js +0 -34
  692. package/dist/src/chats/reader.d.ts +0 -21
  693. package/dist/src/chats/reader.js +0 -118
  694. package/dist/src/chats/redact-import.d.ts +0 -14
  695. package/dist/src/chats/redact-import.js +0 -141
  696. package/dist/src/chats/redaction.d.ts +0 -41
  697. package/dist/src/chats/redaction.js +0 -161
  698. package/dist/src/chats/reference-mapping.d.ts +0 -16
  699. package/dist/src/chats/reference-mapping.js +0 -153
  700. package/dist/src/chats/revision-input.d.ts +0 -3
  701. package/dist/src/chats/revision-input.js +0 -180
  702. package/dist/src/chats/revision.d.ts +0 -48
  703. package/dist/src/chats/revision.js +0 -94
  704. package/dist/src/chats/selection.d.ts +0 -25
  705. package/dist/src/chats/selection.js +0 -109
  706. package/dist/src/chats/source.d.ts +0 -23
  707. package/dist/src/chats/source.js +0 -135
  708. package/dist/src/chats/structure.d.ts +0 -57
  709. package/dist/src/chats/structure.js +0 -216
  710. package/dist/src/chats/workflow-generation-projection.d.ts +0 -8
  711. package/dist/src/chats/workflow-generation-projection.js +0 -75
  712. package/dist/src/chats/workflow-generation-source.d.ts +0 -25
  713. package/dist/src/chats/workflow-generation-source.js +0 -124
  714. package/dist/src/chats/workflow-generation-text.d.ts +0 -23
  715. package/dist/src/chats/workflow-generation-text.js +0 -74
  716. package/dist/src/chats/workflow-generation.d.ts +0 -69
  717. package/dist/src/chats/workflow-generation.js +0 -142
  718. package/dist/src/cli/watch-start-view.d.ts +0 -18
  719. package/dist/src/cli/watch-start-view.js +0 -77
  720. package/dist/src/daemon/analysis-launch.d.ts +0 -5
  721. package/dist/src/daemon/analysis-launch.js +0 -81
  722. package/dist/src/daemon/analysis-token.d.ts +0 -6
  723. package/dist/src/daemon/analysis-token.js +0 -88
  724. package/dist/src/daemon/analysis-worker.d.ts +0 -20
  725. package/dist/src/daemon/analysis-worker.js +0 -271
  726. package/dist/src/daemon/chats-batch-binding.d.ts +0 -23
  727. package/dist/src/daemon/chats-batch-binding.js +0 -99
  728. package/dist/src/daemon/chats-capture.d.ts +0 -18
  729. package/dist/src/daemon/chats-capture.js +0 -194
  730. package/dist/src/daemon/chats-checkpoints.d.ts +0 -41
  731. package/dist/src/daemon/chats-checkpoints.js +0 -186
  732. package/dist/src/daemon/chats-files.d.ts +0 -42
  733. package/dist/src/daemon/chats-files.js +0 -252
  734. package/dist/src/daemon/chats-follow-up.d.ts +0 -38
  735. package/dist/src/daemon/chats-follow-up.js +0 -180
  736. package/dist/src/daemon/chats-question.d.ts +0 -15
  737. package/dist/src/daemon/chats-question.js +0 -93
  738. package/dist/src/daemon/chats-worker.d.ts +0 -13
  739. package/dist/src/daemon/chats-worker.js +0 -201
  740. package/dist/src/steps/decision-gate.d.ts +0 -2
  741. package/dist/src/steps/decision-gate.js +0 -8
  742. package/dist/workflows/analyze-chats.d.ts +0 -15
  743. package/dist/workflows/analyze-chats.declaration.json +0 -22
  744. package/dist/workflows/analyze-chats.js +0 -250
  745. package/dist/workflows/develop-prd.d.ts +0 -7
  746. package/dist/workflows/develop-prd.js +0 -165
  747. package/dist/workflows/develop-ticket.d.ts +0 -9
  748. package/dist/workflows/develop-ticket.js +0 -207
  749. package/dist/workflows/issue-labels.d.ts +0 -16
  750. package/dist/workflows/issue-labels.js +0 -70
  751. package/dist/workflows/ticket-prompts.d.ts +0 -35
  752. package/dist/workflows/ticket-prompts.js +0 -143
@@ -1,26 +1,9 @@
1
1
  import { recordedNotifications, saveNotifications, } from "./notify-journal.js";
2
2
  import { spawn } from "node:child_process";
3
3
  import { join } from "node:path";
4
- import { send } from "../cli/client.js";
5
- import { record } from "../protocol.js";
6
- import { decisionNotification, outcomeNotification, } from "./notify-message.js";
4
+ import { deliveryBackoffMilliseconds } from "../delivery-backoff.js";
5
+ import { notificationEvents } from "./notify-events.js";
7
6
  const retentionMilliseconds = 7 * 24 * 60 * 60_000;
8
- async function request(runtimeDirectory, request) {
9
- const reply = await send(runtimeDirectory, request);
10
- if (reply.kind === "error")
11
- throw new Error(reply.error.code);
12
- return reply.result;
13
- }
14
- function rows(value) {
15
- if (!Array.isArray(value))
16
- throw new Error("invalid-notify-list");
17
- return value.map((item) => {
18
- const row = record(item);
19
- if (row === undefined)
20
- throw new Error("invalid-notify-row");
21
- return row;
22
- });
23
- }
24
7
  async function flushNotifications(journal) {
25
8
  if (journal.unsaved.size === 0)
26
9
  return;
@@ -35,60 +18,6 @@ async function finishDelivery(journal, entry) {
35
18
  journal.unsaved.set(entry.key, entry);
36
19
  await flushNotifications(journal);
37
20
  }
38
- async function observedOutcome(summary, source) {
39
- const { runtimeDirectory, cache } = source;
40
- const latestSequence = summary["latestSequence"];
41
- if (typeof latestSequence !== "number")
42
- throw new Error("invalid-notify-sequence");
43
- const runId = String(summary["runId"]);
44
- const previous = cache.get(runId);
45
- if (previous !== undefined && previous.latestSequence === latestSequence)
46
- return previous.event;
47
- const status = await request(runtimeDirectory, {
48
- operation: "status",
49
- parameters: { runId },
50
- });
51
- const run = record(status["run"]);
52
- if (run === undefined)
53
- throw new Error("invalid-notify-status");
54
- const event = outcomeNotification(run);
55
- cache.set(runId, { latestSequence, event });
56
- return event;
57
- }
58
- async function events(runtimeDirectory, cache) {
59
- const found = [];
60
- const runs = new Map();
61
- let after = "";
62
- do {
63
- const page = await request(runtimeDirectory, {
64
- operation: "status",
65
- parameters: { after, limit: 500 },
66
- });
67
- for (const summary of rows(page["runs"])) {
68
- runs.set(String(summary["runId"]), summary);
69
- const outcome = await observedOutcome(summary, {
70
- runtimeDirectory,
71
- cache,
72
- });
73
- if (outcome !== undefined)
74
- found.push(outcome);
75
- }
76
- const next = page["next"];
77
- if (next !== null && (typeof next !== "string" || next <= after))
78
- throw new Error("invalid-notify-page");
79
- after = next;
80
- } while (after !== null);
81
- const questions = await request(runtimeDirectory, {
82
- operation: "questions",
83
- parameters: {},
84
- });
85
- for (const decision of rows(questions["decisions"])) {
86
- const run = runs.get(String(decision["runId"]));
87
- if (run !== undefined)
88
- found.push(decisionNotification(run, decision));
89
- }
90
- return found;
91
- }
92
21
  export function notifyCommand(command, notification) {
93
22
  return new Promise((resolve, reject) => {
94
23
  const [executable = "", ...argumentsList] = command;
@@ -132,7 +61,7 @@ async function prepareDelivery(journal, entry) {
132
61
  });
133
62
  if (entry.attempts === 5)
134
63
  return undefined;
135
- const backoff = [0, 60_000, 300_000, 900_000, 3_600_000][entry.attempts] ?? 0;
64
+ const backoff = deliveryBackoffMilliseconds[entry.attempts] ?? 0;
136
65
  if (entry.lastAttemptAt !== null &&
137
66
  Date.now() - entry.lastAttemptAt < backoff)
138
67
  return undefined;
@@ -209,7 +138,7 @@ async function check(settings, journal) {
209
138
  journal.retiredKeys.add(key);
210
139
  }
211
140
  }
212
- for (const event of await events(settings.runtimeDirectory, journal.cache)) {
141
+ for (const event of await notificationEvents(settings.runtimeDirectory, journal.cache)) {
213
142
  if (journal.entries.has(event.key) || journal.retiredKeys.has(event.key))
214
143
  continue;
215
144
  const entry = {
@@ -236,12 +165,12 @@ export async function notifyRuns(settings) {
236
165
  unsaved: new Map(),
237
166
  };
238
167
  if (recorded === undefined) {
239
- for (const event of await events(settings.runtimeDirectory, cache))
168
+ for (const event of await notificationEvents(settings.runtimeDirectory, cache))
240
169
  journal.entries.set(event.key, {
241
170
  ...event,
242
- state: "sent",
171
+ state: event.message.event === "schedule-stopped" ? "pending" : "sent",
243
172
  attempts: 0,
244
- lastAttemptAt: Date.now(),
173
+ lastAttemptAt: event.message.event === "schedule-stopped" ? null : Date.now(),
245
174
  lastFailure: null,
246
175
  });
247
176
  }
@@ -0,0 +1,5 @@
1
+ export declare function opencodeStream(): {
2
+ line: (line: string) => readonly string[];
3
+ stderr: (chunk: string) => void;
4
+ result: (exitCode: number | null) => string;
5
+ };
@@ -0,0 +1,87 @@
1
+ import { record } from "../protocol.js";
2
+ import { sumUsage, usageOf, tokenCount, } from "../worker-usage.js";
3
+ function parsed(line) {
4
+ try {
5
+ return record(JSON.parse(line)) ?? {};
6
+ }
7
+ catch {
8
+ return {};
9
+ }
10
+ }
11
+ function tokens(value) {
12
+ const counts = record(value) ?? {};
13
+ const cache = record(counts["cache"]) ?? {};
14
+ const output = tokenCount(counts["output"]);
15
+ const reasoning = tokenCount(counts["reasoning"]);
16
+ return usageOf({
17
+ input_tokens: counts["input"],
18
+ cache_read_input_tokens: cache["read"],
19
+ output_tokens: output === null || reasoning === null ? null : output + reasoning,
20
+ });
21
+ }
22
+ function errorMessage(value) {
23
+ const error = record(value) ?? {};
24
+ const data = record(error["data"]) ?? {};
25
+ const message = data["message"] ?? error["name"];
26
+ return typeof message === "string" ? message : "opencode error";
27
+ }
28
+ function translated(line, state) {
29
+ const event = parsed(line);
30
+ const part = record(event["part"]) ?? {};
31
+ if (typeof event["sessionID"] === "string")
32
+ state.sessionId = event["sessionID"];
33
+ if (typeof event["model"] === "string")
34
+ state.model = event["model"];
35
+ if (event["type"] === "error")
36
+ state.error = errorMessage(event["error"]);
37
+ if (event["type"] === "step_finish") {
38
+ state.steps.push(tokens(part["tokens"]));
39
+ state.reason = part["reason"];
40
+ }
41
+ if (event["type"] !== "text" || typeof part["text"] !== "string")
42
+ return [];
43
+ state.message = part["text"];
44
+ return [
45
+ JSON.stringify({
46
+ type: "assistant",
47
+ message: { content: [{ type: "text", text: state.message }] },
48
+ }),
49
+ ];
50
+ }
51
+ function result(exitCode, state) {
52
+ const success = exitCode === 0 && state.error === null && state.reason === "stop";
53
+ const failure = exitCode === 0
54
+ ? "opencode ended without a final stop step"
55
+ : `opencode ended with the code ${String(exitCode)}`;
56
+ return JSON.stringify({
57
+ type: "result",
58
+ subtype: success ? "success" : "error_during_execution",
59
+ is_error: !success,
60
+ result: success
61
+ ? state.message
62
+ : state.error || state.stderr.trim() || failure,
63
+ total_cost_usd: null,
64
+ model: state.model,
65
+ usage: sumUsage(state.steps),
66
+ session_id: state.sessionId,
67
+ num_turns: state.steps.length,
68
+ });
69
+ }
70
+ export function opencodeStream() {
71
+ const state = {
72
+ steps: [],
73
+ message: "",
74
+ sessionId: null,
75
+ model: null,
76
+ reason: null,
77
+ error: null,
78
+ stderr: "",
79
+ };
80
+ return {
81
+ line: (line) => translated(line, state),
82
+ stderr: (chunk) => {
83
+ state.stderr = (state.stderr + chunk).slice(-16_000);
84
+ },
85
+ result: (exitCode) => result(exitCode, state),
86
+ };
87
+ }
@@ -11,6 +11,7 @@ export interface WorkerReport {
11
11
  readonly reason?: string;
12
12
  }
13
13
  export interface Recorded {
14
+ readonly stoppedBy?: "daemon-shutdown";
14
15
  readonly outcome: WorkerReport["outcome"];
15
16
  readonly result?: string;
16
17
  readonly reason?: string;
@@ -0,0 +1,10 @@
1
+ export declare function queueStatus(settings: {
2
+ readonly runtimeDirectory: string;
3
+ readonly workflowId: string;
4
+ }): Promise<{
5
+ readonly busy: number;
6
+ readonly holding: boolean;
7
+ }>;
8
+ export declare function spendNotice(): (status: {
9
+ readonly holding: boolean;
10
+ }) => boolean;
@@ -0,0 +1,51 @@
1
+ import { send } from "../cli/client.js";
2
+ import { record } from "../protocol.js";
3
+ function queueBusy(value) {
4
+ const busy = record(value)?.["busy"];
5
+ if (typeof busy !== "number")
6
+ return undefined;
7
+ if (!Number.isSafeInteger(busy) || busy < 0)
8
+ throw new Error("invalid-queue-status");
9
+ return busy;
10
+ }
11
+ export async function queueStatus(settings) {
12
+ let count = 0;
13
+ let after = "";
14
+ do {
15
+ const reply = await send(settings.runtimeDirectory, {
16
+ operation: "status",
17
+ parameters: { after, limit: 500 },
18
+ });
19
+ if (reply.kind === "error")
20
+ throw new Error(reply.error.code);
21
+ const busy = queueBusy(reply.result["queue"]);
22
+ if (busy !== undefined)
23
+ return {
24
+ busy,
25
+ holding: record(record(reply.result["queue"])?.["spend"])?.["holding"] ===
26
+ true,
27
+ };
28
+ const runs = reply.result["runs"];
29
+ if (!Array.isArray(runs))
30
+ throw new Error("invalid-run-list");
31
+ count += runs.filter((value) => {
32
+ const run = record(value);
33
+ return (run?.["workflowId"] === settings.workflowId &&
34
+ !["completed", "failed", "cancelled"].includes(String(run["state"])));
35
+ }).length;
36
+ const next = reply.result["next"];
37
+ if (next !== null && (typeof next !== "string" || next <= after))
38
+ throw new Error("invalid-run-page");
39
+ after = next;
40
+ } while (after !== null);
41
+ return { busy: count, holding: false };
42
+ }
43
+ export function spendNotice() {
44
+ let held = false;
45
+ return ({ holding }) => {
46
+ if (holding && !held)
47
+ process.stderr.write("Queue holding for spend limit\n");
48
+ held = holding;
49
+ return holding;
50
+ };
51
+ }
@@ -0,0 +1,13 @@
1
+ interface LockIdentity {
2
+ readonly path: string;
3
+ readonly dev: number;
4
+ readonly ino: number;
5
+ readonly ctimeMs: number;
6
+ readonly mtimeMs: number;
7
+ }
8
+ export interface OwnedIndexLock extends LockIdentity {
9
+ readonly processIds: readonly number[];
10
+ }
11
+ export declare function ownedIndexLock(path: string): Promise<OwnedIndexLock | undefined>;
12
+ export declare function removeStoppedIndexLock(lock: OwnedIndexLock, signal: AbortSignal): Promise<boolean>;
13
+ export {};
@@ -0,0 +1,160 @@
1
+ import { execFile } from "node:child_process";
2
+ import { lstat, readdir, readFile, stat, unlink } from "node:fs/promises";
3
+ import { promisify } from "node:util";
4
+ const execute = promisify(execFile);
5
+ function disappeared(error) {
6
+ return (error instanceof Error &&
7
+ "code" in error &&
8
+ (error.code === "ENOENT" || error.code === "ESRCH"));
9
+ }
10
+ async function descriptorUsesLock(path, lock) {
11
+ try {
12
+ const opened = await stat(path);
13
+ if (opened.dev !== lock.dev || opened.ino !== lock.ino)
14
+ return false;
15
+ const information = await readFile(path.replace("/fd/", "/fdinfo/"), "utf8");
16
+ const flags = /^flags:\s+([0-7]+)$/m.exec(information)?.[1];
17
+ const inode = /^ino:\s+(\d+)$/m.exec(information)?.[1];
18
+ if (flags === undefined || Number(inode) !== lock.ino)
19
+ return undefined;
20
+ return (Number.parseInt(flags, 8) & 3) !== 0;
21
+ }
22
+ catch (error) {
23
+ return disappeared(error) ? false : undefined;
24
+ }
25
+ }
26
+ async function processUsesLock(directory, lock) {
27
+ try {
28
+ for (const descriptor of await readdir(`${directory}/fd`)) {
29
+ const used = await descriptorUsesLock(`${directory}/fd/${descriptor}`, lock);
30
+ if (used !== false)
31
+ return used;
32
+ }
33
+ return false;
34
+ }
35
+ catch (error) {
36
+ if (disappeared(error))
37
+ return false;
38
+ if (!(error instanceof Error) ||
39
+ !("code" in error) ||
40
+ (error.code !== "EACCES" && error.code !== "EPERM"))
41
+ return undefined;
42
+ return (await unrelatedProcess(directory, lock)) ? false : undefined;
43
+ }
44
+ }
45
+ async function unrelatedProcess(directory, lock) {
46
+ if (lock.uid !== process.geteuid?.() || (lock.mode & 0o022) !== 0)
47
+ return false;
48
+ try {
49
+ const status = await readFile(`${directory}/status`, "utf8");
50
+ const users = /^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/m.exec(status);
51
+ return (users !== null &&
52
+ users
53
+ .slice(1)
54
+ .map(Number)
55
+ .every((user) => Number.isSafeInteger(user) && user !== lock.uid));
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }
61
+ async function lockOwners(lock) {
62
+ if (process.platform === "linux") {
63
+ const processIds = [];
64
+ for (const entry of await readdir("/proc")) {
65
+ if (!/^\d+$/.test(entry))
66
+ continue;
67
+ const used = await processUsesLock(`/proc/${entry}`, lock);
68
+ if (used === undefined)
69
+ return undefined;
70
+ if (used)
71
+ processIds.push(Number(entry));
72
+ }
73
+ return processIds;
74
+ }
75
+ try {
76
+ const { stdout, stderr } = await execute("lsof", ["-Fpfa", "--", lock.path], {
77
+ encoding: "utf8",
78
+ timeout: 5000,
79
+ maxBuffer: 8 * 1024 * 1024,
80
+ });
81
+ return stderr === "" ? writableOwners(stdout) : undefined;
82
+ }
83
+ catch {
84
+ return undefined;
85
+ }
86
+ }
87
+ function writableOwner(record) {
88
+ const [header, ...descriptors] = record.trim().split(/^f/m);
89
+ const processId = Number(header?.trim().slice(1));
90
+ const access = descriptors.map((descriptor) => descriptor.split("\n")[1]);
91
+ if (!Number.isSafeInteger(processId) ||
92
+ processId < 1 ||
93
+ descriptors.length === 0 ||
94
+ access.some((mode) => mode !== "ar" && mode !== "aw" && mode !== "au"))
95
+ return undefined;
96
+ return access.some((mode) => mode === "aw" || mode === "au")
97
+ ? processId
98
+ : null;
99
+ }
100
+ function writableOwners(text) {
101
+ const owners = text
102
+ .trim()
103
+ .split(/(?=^p)/m)
104
+ .map(writableOwner);
105
+ return owners.includes(undefined)
106
+ ? undefined
107
+ : [
108
+ ...new Set(owners.filter((owner) => typeof owner === "number")),
109
+ ];
110
+ }
111
+ export async function ownedIndexLock(path) {
112
+ try {
113
+ const identity = await lstat(path);
114
+ if (!identity.isFile())
115
+ return undefined;
116
+ const lock = {
117
+ path,
118
+ dev: identity.dev,
119
+ ino: identity.ino,
120
+ ctimeMs: identity.ctimeMs,
121
+ mtimeMs: identity.mtimeMs,
122
+ uid: identity.uid,
123
+ mode: identity.mode,
124
+ };
125
+ const processIds = await lockOwners(lock);
126
+ return processIds === undefined || processIds.length === 0
127
+ ? undefined
128
+ : { ...lock, processIds };
129
+ }
130
+ catch {
131
+ return undefined;
132
+ }
133
+ }
134
+ function stopped(processId) {
135
+ try {
136
+ process.kill(processId, 0);
137
+ return false;
138
+ }
139
+ catch (error) {
140
+ return error instanceof Error && "code" in error && error.code === "ESRCH";
141
+ }
142
+ }
143
+ export async function removeStoppedIndexLock(lock, signal) {
144
+ try {
145
+ if (!lock.processIds.every(stopped))
146
+ return false;
147
+ const after = await lstat(lock.path);
148
+ if (signal.aborted ||
149
+ lock.dev !== after.dev ||
150
+ lock.ino !== after.ino ||
151
+ lock.ctimeMs !== after.ctimeMs ||
152
+ lock.mtimeMs !== after.mtimeMs)
153
+ return false;
154
+ await unlink(lock.path);
155
+ return true;
156
+ }
157
+ catch {
158
+ return false;
159
+ }
160
+ }
@@ -0,0 +1,7 @@
1
+ import { type IndexFailure } from "./retry-worktree.ts";
2
+ export declare function resumeWorktree(request: {
3
+ readonly directory: string;
4
+ readonly folder: string;
5
+ readonly signal: AbortSignal;
6
+ readonly stopMilliseconds?: number;
7
+ }): Promise<IndexFailure | null>;
@@ -0,0 +1,29 @@
1
+ import { ownedIndexLock, removeStoppedIndexLock } from "./resume-index-lock.js";
2
+ import { stopTreeProcesses } from "./worktree-processes.js";
3
+ import { indexFailure } from "./retry-worktree.js";
4
+ async function inspectLock(failure) {
5
+ if (failure?.lockPath === undefined)
6
+ return undefined;
7
+ return ownedIndexLock(failure.lockPath);
8
+ }
9
+ export async function resumeWorktree(request) {
10
+ const aborted = () => request.signal.aborted;
11
+ const before = await indexFailure(request);
12
+ const lock = await inspectLock(before);
13
+ if (aborted())
14
+ return before;
15
+ const stopped = await stopTreeProcesses(request);
16
+ const locked = await indexFailure(request);
17
+ if (!stopped)
18
+ return (locked ?? {
19
+ reason: "worktree-index-locked",
20
+ fix: "Stop the remaining work tree processes before resuming the turn.",
21
+ });
22
+ if (locked?.reason !== "worktree-index-locked" || aborted())
23
+ return locked;
24
+ if (lock === undefined ||
25
+ lock.path !== locked.lockPath ||
26
+ !(await removeStoppedIndexLock(lock, request.signal)))
27
+ return locked;
28
+ return indexFailure(request);
29
+ }
@@ -0,0 +1,18 @@
1
+ export interface RetryTree {
2
+ readonly directory: string;
3
+ readonly signal: AbortSignal;
4
+ }
5
+ interface GitResult {
6
+ readonly text: string;
7
+ readonly code: number | null;
8
+ }
9
+ export declare function retryGit(tree: RetryTree, parts: readonly string[]): Promise<GitResult>;
10
+ export declare function turnHead(tree: RetryTree): Promise<string | null>;
11
+ export declare function retryEvidence(tree: RetryTree, startCommit: string | null): Promise<string>;
12
+ export interface IndexFailure {
13
+ readonly reason: "worktree-index-unknown" | "worktree-index-locked";
14
+ readonly lockPath?: string;
15
+ readonly fix: string;
16
+ }
17
+ export declare function indexFailure(tree: RetryTree): Promise<IndexFailure | null>;
18
+ export {};
@@ -0,0 +1,139 @@
1
+ import { spawn } from "node:child_process";
2
+ import { lstat } from "node:fs/promises";
3
+ import { resolve } from "node:path";
4
+ function kill(child) {
5
+ if (child.pid === undefined)
6
+ return;
7
+ try {
8
+ process.kill(-child.pid, "SIGKILL");
9
+ }
10
+ catch {
11
+ child.kill("SIGKILL");
12
+ }
13
+ }
14
+ export async function retryGit(tree, parts) {
15
+ if (tree.signal.aborted)
16
+ return { text: "", code: null };
17
+ const child = spawn("git", ["-C", tree.directory, ...parts], {
18
+ stdio: ["ignore", "pipe", "ignore"],
19
+ detached: true,
20
+ env: { ...process.env, GIT_TERMINAL_PROMPT: "0" },
21
+ });
22
+ const closed = Promise.withResolvers();
23
+ let text = "";
24
+ const stop = () => {
25
+ kill(child);
26
+ child.stdout.destroy();
27
+ closed.resolve(null);
28
+ };
29
+ const timer = setTimeout(stop, 30_000);
30
+ tree.signal.addEventListener("abort", stop, { once: true });
31
+ child.stdout.setEncoding("utf8");
32
+ child.stdout.on("data", (chunk) => {
33
+ text += chunk;
34
+ if (Buffer.byteLength(text) > 1_048_576)
35
+ stop();
36
+ });
37
+ child.once("error", () => {
38
+ closed.resolve(null);
39
+ });
40
+ child.once("close", closed.resolve);
41
+ const code = await closed.promise;
42
+ clearTimeout(timer);
43
+ tree.signal.removeEventListener("abort", stop);
44
+ return { text: text.trim(), code };
45
+ }
46
+ export async function turnHead(tree) {
47
+ const head = await retryGit(tree, ["rev-parse", "--verify", "HEAD"]);
48
+ return head.code === 0 && /^[a-f0-9]{40,64}$/.test(head.text)
49
+ ? head.text
50
+ : null;
51
+ }
52
+ async function remoteState(tree) {
53
+ const branch = await retryGit(tree, ["symbolic-ref", "--short", "HEAD"]);
54
+ if (branch.code !== 0 || tree.signal.aborted)
55
+ return "unknown";
56
+ const reference = `refs/heads/${branch.text}`;
57
+ const remote = await retryGit(tree, [
58
+ "ls-remote",
59
+ "--exit-code",
60
+ "--heads",
61
+ "origin",
62
+ reference,
63
+ ]);
64
+ if (remote.code === 2)
65
+ return "not pushed";
66
+ if (remote.code !== 0)
67
+ return "unknown";
68
+ const tracking = `refs/remotes/origin/${branch.text}`;
69
+ const fetched = await retryGit(tree, [
70
+ "fetch",
71
+ "--no-tags",
72
+ "origin",
73
+ `+${reference}:${tracking}`,
74
+ ]);
75
+ return fetched.code === 0 ? tracking : "unknown";
76
+ }
77
+ async function pushState(tree, evidence) {
78
+ const { commit, remote } = evidence;
79
+ if (!remote.startsWith("refs/"))
80
+ return remote;
81
+ const ancestor = await retryGit(tree, [
82
+ "merge-base",
83
+ "--is-ancestor",
84
+ commit,
85
+ remote,
86
+ ]);
87
+ if (ancestor.code === 1)
88
+ return "not pushed";
89
+ return ancestor.code === 0 ? "pushed" : "unknown";
90
+ }
91
+ export async function retryEvidence(tree, startCommit) {
92
+ const remote = await remoteState(tree);
93
+ if (startCommit === null || tree.signal.aborted)
94
+ return "unknown: commits since the start of this turn could not be determined.";
95
+ const commits = await retryGit(tree, [
96
+ "log",
97
+ "--format=%H %s",
98
+ `${startCommit}..HEAD`,
99
+ "--",
100
+ ]);
101
+ if (commits.code !== 0)
102
+ return "unknown: commits since the start of this turn could not be listed.";
103
+ const lines = [];
104
+ for (const line of commits.text.split("\n").filter(Boolean)) {
105
+ const commit = line.split(" ")[0] ?? "";
106
+ const state = await pushState(tree, { commit, remote });
107
+ lines.push(`${commit} ${state}${line.slice(commit.length)}`);
108
+ }
109
+ if (lines.length > 0)
110
+ return lines.join("\n");
111
+ return remote === "unknown"
112
+ ? "unknown: remote push state could not be determined; no local commits since the start of this turn."
113
+ : "No commits since the start of this turn.";
114
+ }
115
+ export async function indexFailure(tree) {
116
+ const lookup = await retryGit(tree, [
117
+ "rev-parse",
118
+ "--git-path",
119
+ "index.lock",
120
+ ]);
121
+ const unknown = {
122
+ reason: "worktree-index-unknown",
123
+ fix: "Check that the work tree and its git index path are accessible before starting another turn.",
124
+ };
125
+ if (lookup.code !== 0 || lookup.text === "")
126
+ return unknown;
127
+ const lockPath = resolve(tree.directory, lookup.text);
128
+ try {
129
+ await lstat(lockPath);
130
+ return {
131
+ reason: "worktree-index-locked",
132
+ lockPath,
133
+ fix: "Remove the index lock when no git process uses the work tree, then start another turn.",
134
+ };
135
+ }
136
+ catch (error) {
137
+ return Reflect.get(Object(error), "code") === "ENOENT" ? null : unknown;
138
+ }
139
+ }
@@ -1,12 +1,4 @@
1
- import { type TokenPrices } from "../token-prices.ts";
2
1
  import { type RunningTurn, type TurnStart } from "./claude-turn.ts";
3
- export interface RetrySettings {
4
- readonly tokenPrices?: TokenPrices;
5
- readonly fallbackModels?: readonly string[];
6
- readonly retryDelay?: (milliseconds: number, signal: AbortSignal) => Promise<void>;
7
- }
8
- interface RetryOptions extends RetrySettings {
9
- readonly metadata: Readonly<Record<string, unknown>>;
10
- }
2
+ import { type RetryOptions } from "./turn-attempts.ts";
3
+ export type { RetrySettings } from "./turn-attempts.ts";
11
4
  export declare function startRetriedTurn(start: TurnStart, options: RetryOptions): Promise<RunningTurn>;
12
- export {};