cloving 1.2.0 → 1.3.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 (518) hide show
  1. package/README.md +525 -185
  2. package/dist/src/agent-harness-shell.d.ts +12 -0
  3. package/dist/src/agent-harness-shell.js +90 -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/commands.d.ts +1 -0
  9. package/dist/src/authority/commands.js +24 -4
  10. package/dist/src/authority/gate-reduction.d.ts +1 -0
  11. package/dist/src/authority/gate-reduction.js +18 -3
  12. package/dist/src/authority/gates.d.ts +2 -1
  13. package/dist/src/authority/gates.js +5 -1
  14. package/dist/src/authority/operations.js +1 -1
  15. package/dist/src/authority/reduction.d.ts +1 -1
  16. package/dist/src/authority/reduction.js +6 -1
  17. package/dist/src/authority/status-input.d.ts +1 -1
  18. package/dist/src/authority/status.d.ts +1 -0
  19. package/dist/src/authority/status.js +27 -3
  20. package/dist/src/authority/transitions.d.ts +5 -5
  21. package/dist/src/authority/transitions.js +6 -0
  22. package/dist/src/broker/actor/authority-delivery.js +1 -0
  23. package/dist/src/broker/actor/authority-queries.d.ts +7 -1
  24. package/dist/src/broker/actor/authority-queries.js +17 -2
  25. package/dist/src/broker/actor/authority-receipts.js +11 -1
  26. package/dist/src/broker/actor/authority-session.js +2 -2
  27. package/dist/src/broker/actor/authority-settings.js +4 -0
  28. package/dist/src/broker/actor/delivery-intents.d.ts +2 -1
  29. package/dist/src/broker/actor/delivery-intents.js +4 -4
  30. package/dist/src/broker/actor/effect-delivery.js +4 -1
  31. package/dist/src/broker/actor/effect-queries.d.ts +1 -0
  32. package/dist/src/broker/actor/effect-queries.js +7 -0
  33. package/dist/src/broker/actor/pin-check.js +1 -1
  34. package/dist/src/broker/actor/stop-plan.js +1 -1
  35. package/dist/src/broker/actor/turn-state.js +1 -1
  36. package/dist/src/broker/authority-admission.js +22 -9
  37. package/dist/src/broker/authority-restore.js +1 -0
  38. package/dist/src/broker/decision-restore.js +4 -4
  39. package/dist/src/broker/socket-address.d.ts +3 -1
  40. package/dist/src/broker/socket-address.js +2 -2
  41. package/dist/src/cli/arguments.d.ts +11 -13
  42. package/dist/src/cli/arguments.js +37 -107
  43. package/dist/src/cli/command-effects.d.ts +7 -0
  44. package/dist/src/cli/command-effects.js +39 -0
  45. package/dist/src/cli/commands.js +11 -4
  46. package/dist/src/cli/config-arguments.d.ts +11 -0
  47. package/dist/src/cli/config-arguments.js +59 -0
  48. package/dist/src/cli/config-command.d.ts +2 -0
  49. package/dist/src/cli/config-command.js +105 -0
  50. package/dist/src/cli/config-file.d.ts +3 -0
  51. package/dist/src/cli/config-file.js +50 -0
  52. package/dist/src/cli/config-lock.d.ts +7 -0
  53. package/dist/src/cli/config-lock.js +61 -0
  54. package/dist/src/cli/config-notice.d.ts +5 -0
  55. package/dist/src/cli/config-notice.js +46 -0
  56. package/dist/src/cli/doctor-github.d.ts +9 -0
  57. package/dist/src/cli/doctor-github.js +138 -0
  58. package/dist/src/cli/doctor-harness.d.ts +13 -0
  59. package/dist/src/cli/doctor-harness.js +242 -0
  60. package/dist/src/cli/doctor-local.d.ts +18 -0
  61. package/dist/src/cli/doctor-local.js +77 -0
  62. package/dist/src/cli/doctor-runtime.d.ts +15 -0
  63. package/dist/src/cli/doctor-runtime.js +176 -0
  64. package/dist/src/cli/doctor-service.d.ts +1 -0
  65. package/dist/src/cli/doctor-service.js +11 -0
  66. package/dist/src/cli/doctor-workflows.d.ts +3 -0
  67. package/dist/src/cli/doctor-workflows.js +45 -0
  68. package/dist/src/cli/doctor.d.ts +15 -0
  69. package/dist/src/cli/doctor.js +190 -0
  70. package/dist/src/cli/github-ci-progress.d.ts +8 -0
  71. package/dist/src/cli/github-ci-progress.js +83 -0
  72. package/dist/src/cli/github-retry.d.ts +6 -0
  73. package/dist/src/cli/github-retry.js +47 -0
  74. package/dist/src/cli/harness-probes.d.ts +22 -0
  75. package/dist/src/cli/harness-probes.js +183 -0
  76. package/dist/src/cli/main.d.ts +7 -1
  77. package/dist/src/cli/main.js +39 -61
  78. package/dist/src/cli/phone-arguments.d.ts +14 -0
  79. package/dist/src/cli/phone-arguments.js +37 -0
  80. package/dist/src/cli/phone-client.d.ts +2 -0
  81. package/dist/src/cli/phone-client.js +32 -0
  82. package/dist/src/cli/phone-command.d.ts +13 -0
  83. package/dist/src/cli/phone-command.js +101 -0
  84. package/dist/src/cli/probe-command.d.ts +36 -0
  85. package/dist/src/cli/probe-command.js +59 -0
  86. package/dist/src/cli/project-settings.d.ts +4 -0
  87. package/dist/src/cli/project-settings.js +33 -0
  88. package/dist/src/cli/render.d.ts +2 -1
  89. package/dist/src/cli/render.js +44 -28
  90. package/dist/src/cli/report-github.d.ts +18 -0
  91. package/dist/src/cli/report-github.js +200 -0
  92. package/dist/src/cli/report.d.ts +17 -0
  93. package/dist/src/cli/report.js +192 -0
  94. package/dist/src/cli/repository-arguments.d.ts +5 -0
  95. package/dist/src/cli/repository-arguments.js +34 -0
  96. package/dist/src/cli/runtime-arguments.d.ts +4 -0
  97. package/dist/src/cli/runtime-arguments.js +15 -0
  98. package/dist/src/cli/runtime-directory.d.ts +6 -2
  99. package/dist/src/cli/runtime-directory.js +72 -14
  100. package/dist/src/cli/toolchain.d.ts +2 -0
  101. package/dist/src/cli/toolchain.js +22 -2
  102. package/dist/src/cli/usage-render.d.ts +5 -0
  103. package/dist/src/cli/usage-render.js +40 -1
  104. package/dist/src/cli/usage.d.ts +3 -3
  105. package/dist/src/cli/usage.js +70 -44
  106. package/dist/src/cli/watch-actions.d.ts +2 -0
  107. package/dist/src/cli/watch-actions.js +4 -4
  108. package/dist/src/cli/watch-board-view.d.ts +1 -1
  109. package/dist/src/cli/watch-board-view.js +8 -2
  110. package/dist/src/cli/watch-board.js +23 -10
  111. package/dist/src/cli/watch-card-forms.js +2 -2
  112. package/dist/src/cli/watch-client.d.ts +1 -1
  113. package/dist/src/cli/watch-client.js +7 -2
  114. package/dist/src/cli/watch-header-view.d.ts +27 -0
  115. package/dist/src/cli/watch-header-view.js +116 -0
  116. package/dist/src/cli/watch-model.js +17 -4
  117. package/dist/src/cli/watch-page.js +48 -12
  118. package/dist/src/cli/watch-phone-client.d.ts +1 -0
  119. package/dist/src/cli/watch-phone-client.js +84 -0
  120. package/dist/src/cli/watch-phone-view.d.ts +56 -0
  121. package/dist/src/cli/watch-phone-view.js +113 -0
  122. package/dist/src/cli/watch-phone.d.ts +5 -0
  123. package/dist/src/cli/watch-phone.js +53 -0
  124. package/dist/src/cli/watch-pull-request.d.ts +3 -1
  125. package/dist/src/cli/watch-pull-request.js +4 -0
  126. package/dist/src/cli/watch-render.d.ts +9 -1
  127. package/dist/src/cli/watch-server.js +23 -5
  128. package/dist/src/cli/watch-turn.d.ts +4 -1
  129. package/dist/src/cli/watch-turn.js +37 -1
  130. package/dist/src/cli/watch-usage.js +5 -1
  131. package/dist/src/cli/watch-view.d.ts +6 -20
  132. package/dist/src/cli/watch-view.js +14 -106
  133. package/dist/src/cli.js +106 -23
  134. package/dist/src/command-settings.d.ts +16 -0
  135. package/dist/src/command-settings.js +42 -0
  136. package/dist/src/configuration-change.d.ts +11 -0
  137. package/dist/src/configuration-change.js +62 -0
  138. package/dist/src/configuration-display.d.ts +21 -0
  139. package/dist/src/configuration-display.js +69 -0
  140. package/dist/src/configuration-schema.d.ts +49 -0
  141. package/dist/src/configuration-schema.js +159 -0
  142. package/dist/src/daemon/claude-turn.d.ts +19 -5
  143. package/dist/src/daemon/claude-turn.js +116 -53
  144. package/dist/src/daemon/claude-worker.d.ts +3 -3
  145. package/dist/src/daemon/claude-worker.js +65 -76
  146. package/dist/src/daemon/command-journal.d.ts +5 -0
  147. package/dist/src/daemon/command-journal.js +50 -0
  148. package/dist/src/daemon/command-process.d.ts +28 -0
  149. package/dist/src/daemon/command-process.js +164 -0
  150. package/dist/src/daemon/command-worker.d.ts +19 -0
  151. package/dist/src/daemon/command-worker.js +182 -0
  152. package/dist/src/daemon/cursor-stream.d.ts +4 -0
  153. package/dist/src/daemon/cursor-stream.js +154 -0
  154. package/dist/src/daemon/daemon-adapters.d.ts +58 -0
  155. package/dist/src/daemon/daemon-adapters.js +102 -0
  156. package/dist/src/daemon/daemon-loops.d.ts +14 -0
  157. package/dist/src/daemon/daemon-loops.js +39 -0
  158. package/dist/src/daemon/daemon.d.ts +2 -33
  159. package/dist/src/daemon/daemon.js +126 -132
  160. package/dist/src/daemon/declared-input.d.ts +3 -0
  161. package/dist/src/daemon/declared-input.js +9 -0
  162. package/dist/src/daemon/delivery-router.js +1 -1
  163. package/dist/src/daemon/gemini-stream.d.ts +4 -0
  164. package/dist/src/daemon/gemini-stream.js +129 -0
  165. package/dist/src/daemon/github-ci-rerun.d.ts +26 -0
  166. package/dist/src/daemon/github-ci-rerun.js +92 -0
  167. package/dist/src/daemon/github-ci.js +89 -8
  168. package/dist/src/daemon/github-merge-call.d.ts +2 -0
  169. package/dist/src/daemon/github-merge.js +7 -3
  170. package/dist/src/daemon/github-methods.js +10 -0
  171. package/dist/src/daemon/github-operation.d.ts +1 -0
  172. package/dist/src/daemon/github-retry.js +8 -44
  173. package/dist/src/daemon/issue-queue.d.ts +1 -0
  174. package/dist/src/daemon/issue-queue.js +3 -26
  175. package/dist/src/daemon/notify.js +2 -1
  176. package/dist/src/daemon/opencode-stream.d.ts +5 -0
  177. package/dist/src/daemon/opencode-stream.js +87 -0
  178. package/dist/src/daemon/queue-status.d.ts +4 -0
  179. package/dist/src/daemon/queue-status.js +38 -0
  180. package/dist/src/daemon/retry-worktree.d.ts +18 -0
  181. package/dist/src/daemon/retry-worktree.js +139 -0
  182. package/dist/src/daemon/retrying-turn.d.ts +2 -0
  183. package/dist/src/daemon/retrying-turn.js +108 -30
  184. package/dist/src/daemon/schedule-journal.d.ts +19 -0
  185. package/dist/src/daemon/schedule-journal.js +57 -0
  186. package/dist/src/daemon/text-output.d.ts +18 -0
  187. package/dist/src/daemon/text-output.js +44 -0
  188. package/dist/src/daemon/ticket-registration.d.ts +5 -7
  189. package/dist/src/daemon/ticket-registration.js +85 -40
  190. package/dist/src/daemon/turn-command.d.ts +10 -0
  191. package/dist/src/daemon/turn-command.js +33 -0
  192. package/dist/src/daemon/turn-report.d.ts +18 -0
  193. package/dist/src/daemon/turn-report.js +79 -0
  194. package/dist/src/daemon/work-tree.d.ts +2 -1
  195. package/dist/src/daemon/work-tree.js +15 -12
  196. package/dist/src/daemon/workflow-generations.d.ts +32 -0
  197. package/dist/src/daemon/workflow-generations.js +57 -0
  198. package/dist/src/daemon/workflow-replay.d.ts +16 -0
  199. package/dist/src/daemon/workflow-replay.js +58 -0
  200. package/dist/src/daemon/workflow-schedules.d.ts +27 -0
  201. package/dist/src/daemon/workflow-schedules.js +185 -0
  202. package/dist/src/decision-wait.d.ts +1 -0
  203. package/dist/src/decision-wait.js +3 -0
  204. package/dist/src/delivery-backoff.d.ts +1 -0
  205. package/dist/src/delivery-backoff.js +3 -0
  206. package/dist/src/doctor-report.d.ts +24 -0
  207. package/dist/src/doctor-report.js +70 -0
  208. package/dist/src/execution-pin.d.ts +5 -0
  209. package/dist/src/execution-pin.js +67 -4
  210. package/dist/src/grok-result.d.ts +12 -0
  211. package/dist/src/grok-result.js +61 -0
  212. package/dist/src/harness-defaults.d.ts +35 -0
  213. package/dist/src/harness-defaults.js +121 -0
  214. package/dist/src/host/decision-resume.d.ts +35 -0
  215. package/dist/src/host/decision-resume.js +86 -0
  216. package/dist/src/host/gate-bridge.d.ts +48 -0
  217. package/dist/src/host/gate-bridge.js +124 -0
  218. package/dist/src/host/run-wait.d.ts +26 -0
  219. package/dist/src/host/run-wait.js +37 -0
  220. package/dist/src/host/start-delivery.d.ts +1 -1
  221. package/dist/src/host/start-delivery.js +10 -3
  222. package/dist/src/host/step-bridge-host.d.ts +6 -20
  223. package/dist/src/host/step-bridge-host.js +44 -58
  224. package/dist/src/merge-request.d.ts +19 -0
  225. package/dist/src/merge-request.js +32 -0
  226. package/dist/src/phone/canonical-json.d.ts +1 -0
  227. package/dist/src/phone/canonical-json.js +16 -0
  228. package/dist/src/phone/phone-link.d.ts +7 -0
  229. package/dist/src/phone/phone-link.js +21 -0
  230. package/dist/src/phone/qr-data.d.ts +8 -0
  231. package/dist/src/phone/qr-data.js +133 -0
  232. package/dist/src/phone/qr-matrix.d.ts +6 -0
  233. package/dist/src/phone/qr-matrix.js +175 -0
  234. package/dist/src/phone/qr-penalty.d.ts +3 -0
  235. package/dist/src/phone/qr-penalty.js +67 -0
  236. package/dist/src/phone/qr-picture.d.ts +5 -0
  237. package/dist/src/phone/qr-picture.js +24 -0
  238. package/dist/src/private-config.schema.json +263 -0
  239. package/dist/src/project-config.schema.json +65 -0
  240. package/dist/src/project-settings.d.ts +19 -0
  241. package/dist/src/project-settings.js +131 -0
  242. package/dist/src/relay/answer-check.d.ts +24 -0
  243. package/dist/src/relay/answer-check.js +145 -0
  244. package/dist/src/relay/answer-inbox.d.ts +15 -0
  245. package/dist/src/relay/answer-inbox.js +173 -0
  246. package/dist/src/relay/daemon-keys.d.ts +16 -0
  247. package/dist/src/relay/daemon-keys.js +75 -0
  248. package/dist/src/relay/decision-check.d.ts +3 -0
  249. package/dist/src/relay/decision-check.js +77 -0
  250. package/dist/src/relay/decision-close.d.ts +6 -0
  251. package/dist/src/relay/decision-close.js +72 -0
  252. package/dist/src/relay/decision-envelopes.d.ts +29 -0
  253. package/dist/src/relay/decision-envelopes.js +93 -0
  254. package/dist/src/relay/decision-watch.d.ts +14 -0
  255. package/dist/src/relay/decision-watch.js +68 -0
  256. package/dist/src/relay/envelope-post.d.ts +8 -0
  257. package/dist/src/relay/envelope-post.js +71 -0
  258. package/dist/src/relay/envelope.d.ts +28 -0
  259. package/dist/src/relay/envelope.js +53 -0
  260. package/dist/src/relay/hpke.d.ts +25 -0
  261. package/dist/src/relay/hpke.js +108 -0
  262. package/dist/src/relay/pairing-checks.d.ts +42 -0
  263. package/dist/src/relay/pairing-checks.js +172 -0
  264. package/dist/src/relay/pairing-follow.d.ts +8 -0
  265. package/dist/src/relay/pairing-follow.js +95 -0
  266. package/dist/src/relay/pairing-session.d.ts +29 -0
  267. package/dist/src/relay/pairing-session.js +87 -0
  268. package/dist/src/relay/phone-delivery.d.ts +51 -0
  269. package/dist/src/relay/phone-delivery.js +139 -0
  270. package/dist/src/relay/phone-devices.d.ts +36 -0
  271. package/dist/src/relay/phone-devices.js +46 -0
  272. package/dist/src/relay/phone-inbox.d.ts +18 -0
  273. package/dist/src/relay/phone-inbox.js +17 -0
  274. package/dist/src/relay/phone-operations.d.ts +18 -0
  275. package/dist/src/relay/phone-operations.js +121 -0
  276. package/dist/src/relay/phone-outbox.d.ts +21 -0
  277. package/dist/src/relay/phone-outbox.js +25 -0
  278. package/dist/src/relay/phone-socket.d.ts +6 -0
  279. package/dist/src/relay/phone-socket.js +63 -0
  280. package/dist/src/relay/relay-control.d.ts +7 -0
  281. package/dist/src/relay/relay-control.js +24 -0
  282. package/dist/src/relay/relay-files.d.ts +2 -0
  283. package/dist/src/relay/relay-files.js +23 -0
  284. package/dist/src/relay/relay-heartbeat.d.ts +17 -0
  285. package/dist/src/relay/relay-heartbeat.js +81 -0
  286. package/dist/src/relay/relay-http.d.ts +14 -0
  287. package/dist/src/relay/relay-http.js +63 -0
  288. package/dist/src/relay/relay-registration.d.ts +15 -0
  289. package/dist/src/relay/relay-registration.js +63 -0
  290. package/dist/src/relay/relay-service.d.ts +25 -0
  291. package/dist/src/relay/relay-service.js +216 -0
  292. package/dist/src/relay/relay-store.d.ts +48 -0
  293. package/dist/src/relay/relay-store.js +131 -0
  294. package/dist/src/relay/sealed-post.d.ts +25 -0
  295. package/dist/src/relay/sealed-post.js +52 -0
  296. package/dist/src/relay.d.ts +1 -0
  297. package/dist/src/relay.js +8 -0
  298. package/dist/src/report-statistics.d.ts +50 -0
  299. package/dist/src/report-statistics.js +70 -0
  300. package/dist/src/report.d.ts +171 -0
  301. package/dist/src/report.js +119 -0
  302. package/dist/src/repository-identity.d.ts +4 -0
  303. package/dist/src/repository-identity.js +4 -0
  304. package/dist/src/review-subject.d.ts +41 -0
  305. package/dist/src/review-subject.js +91 -0
  306. package/dist/src/run-wait.d.ts +23 -0
  307. package/dist/src/run-wait.js +20 -0
  308. package/dist/src/service/active-tickets.d.ts +4 -0
  309. package/dist/src/service/active-tickets.js +49 -0
  310. package/dist/src/service/command-effects.d.ts +4 -0
  311. package/dist/src/service/command-effects.js +16 -0
  312. package/dist/src/service/decision-handler.d.ts +4 -0
  313. package/dist/src/service/decision-handler.js +39 -4
  314. package/dist/src/service/gateway.js +18 -3
  315. package/dist/src/service/registry.d.ts +16 -3
  316. package/dist/src/service/registry.js +34 -3
  317. package/dist/src/service/replies.d.ts +9 -1
  318. package/dist/src/service/replies.js +12 -0
  319. package/dist/src/service/run-handlers.js +14 -55
  320. package/dist/src/service/run-metadata.d.ts +8 -0
  321. package/dist/src/service/run-metadata.js +53 -0
  322. package/dist/src/service/run-waits.d.ts +3 -0
  323. package/dist/src/service/run-waits.js +41 -0
  324. package/dist/src/service/service.d.ts +18 -2
  325. package/dist/src/service/service.js +23 -7
  326. package/dist/src/service/submission-handler.d.ts +0 -1
  327. package/dist/src/service/submission-handler.js +6 -34
  328. package/dist/src/service/worker-port.d.ts +1 -0
  329. package/dist/src/service/worker-totals.js +8 -23
  330. package/dist/src/step-bridge.d.ts +23 -0
  331. package/dist/src/steps/decision-gate.d.ts +2 -1
  332. package/dist/src/steps/decision-gate.js +7 -0
  333. package/dist/src/steps/merge-by-person.d.ts +2 -0
  334. package/dist/src/steps/merge-by-person.js +18 -0
  335. package/dist/src/steps/merge-when-green.d.ts +2 -0
  336. package/dist/src/steps/merge-when-green.js +62 -0
  337. package/dist/src/steps/review-by-agent.d.ts +5 -0
  338. package/dist/src/steps/review-by-agent.js +124 -0
  339. package/dist/src/steps/review-by-person.d.ts +4 -0
  340. package/dist/src/steps/review-by-person.js +16 -0
  341. package/dist/src/steps/review-subject.d.ts +2 -0
  342. package/dist/src/steps/review-subject.js +11 -0
  343. package/dist/src/steps/run-command.d.ts +2 -0
  344. package/dist/src/steps/run-command.js +15 -0
  345. package/dist/src/steps/sleep.d.ts +3 -0
  346. package/dist/src/steps/sleep.js +19 -0
  347. package/dist/src/steps/wait-for-decision.d.ts +2 -0
  348. package/dist/src/steps/wait-for-decision.js +71 -0
  349. package/dist/src/steps/wait-for-run.d.ts +5 -0
  350. package/dist/src/steps/wait-for-run.js +9 -0
  351. package/dist/src/storage/decision-snapshots.d.ts +1 -0
  352. package/dist/src/storage/decision-snapshots.js +7 -1
  353. package/dist/src/submission.d.ts +4 -0
  354. package/dist/src/submission.js +6 -2
  355. package/dist/src/testing.d.ts +29 -0
  356. package/dist/src/testing.js +264 -0
  357. package/dist/src/ticket-status-stream.d.ts +9 -0
  358. package/dist/src/ticket-status-stream.js +94 -0
  359. package/dist/src/token-prices.d.ts +12 -4
  360. package/dist/src/token-prices.js +15 -2
  361. package/dist/src/turn-profile.d.ts +1 -0
  362. package/dist/src/turn-profile.js +8 -1
  363. package/dist/src/worker-usage.d.ts +16 -0
  364. package/dist/src/worker-usage.js +57 -0
  365. package/dist/src/workflow-admission.d.ts +5 -0
  366. package/dist/src/workflow-candidate.d.ts +7 -2
  367. package/dist/src/workflow-candidate.js +47 -5
  368. package/dist/src/workflow-declaration.d.ts +21 -3
  369. package/dist/src/workflow-declaration.js +77 -9
  370. package/dist/src/workflow-discovery.d.ts +2 -1
  371. package/dist/src/workflow-discovery.js +4 -1
  372. package/dist/src/workflow-refusals.js +3 -0
  373. package/dist/src/workflow-schedule.d.ts +22 -0
  374. package/dist/src/workflow-schedule.js +53 -0
  375. package/dist/src/workflows.d.ts +11 -1
  376. package/dist/src/workflows.js +8 -0
  377. package/dist/tools/admit-workflow.d.ts +1 -0
  378. package/dist/tools/admit-workflow.js +18 -5
  379. package/dist/tools/doctor-adoption.d.ts +1 -0
  380. package/dist/tools/doctor-adoption.js +11 -0
  381. package/dist/tools/project-configuration.d.ts +4 -0
  382. package/dist/tools/project-configuration.js +47 -0
  383. package/dist/tools/self-host-processes.d.ts +1 -0
  384. package/dist/tools/self-host-processes.js +33 -22
  385. package/dist/tools/self-host-project.d.ts +4 -0
  386. package/dist/tools/self-host-project.js +61 -14
  387. package/dist/tools/self-host-runtime.d.ts +16 -0
  388. package/dist/tools/self-host-runtime.js +60 -0
  389. package/dist/tools/self-host-workflows.d.ts +1 -0
  390. package/dist/tools/self-host-workflows.js +36 -1
  391. package/dist/tools/self-host.js +86 -61
  392. package/dist/tools/workflow-candidate-counts.d.ts +6 -2
  393. package/dist/tools/workflow-candidate-counts.js +31 -16
  394. package/dist/tools/workflow-candidate-fields.d.ts +5 -0
  395. package/dist/tools/workflow-candidate-fields.js +24 -0
  396. package/dist/tools/workflow-candidate-helper-counts.d.ts +10 -0
  397. package/dist/tools/workflow-candidate-helper-counts.js +129 -0
  398. package/dist/tools/workflow-candidate-program.d.ts +2 -0
  399. package/dist/tools/workflow-candidate-program.js +36 -8
  400. package/dist/tools/workflow-candidate-source.js +77 -15
  401. package/dist/tools/workflow-candidate-syntax.d.ts +8 -2
  402. package/dist/tools/workflow-candidate-syntax.js +70 -26
  403. package/dist/tools/workflow-command.d.ts +1 -0
  404. package/dist/tools/workflow-command.js +143 -0
  405. package/dist/tools/workflow-folder-capture.d.ts +1 -0
  406. package/dist/tools/workflow-folder-capture.js +47 -2
  407. package/dist/tools/workflow-folders.d.ts +17 -1
  408. package/dist/tools/workflow-folders.js +59 -6
  409. package/dist/tools/workflow-test-hook.d.ts +7 -0
  410. package/dist/tools/workflow-test-hook.js +16 -0
  411. package/dist/tools/workflow-test-loader.d.ts +1 -0
  412. package/dist/tools/workflow-test-loader.js +10 -0
  413. package/dist/workflows/develop-ticket.js +1 -1
  414. package/dist/workflows/ticket-prompts.js +5 -1
  415. package/package.json +46 -4
  416. package/templates/develop/README.md +78 -0
  417. package/templates/develop/develop/accept.ts +11 -0
  418. package/templates/develop/develop/flow-tests.ts +357 -0
  419. package/templates/develop/develop/local.ts +40 -0
  420. package/templates/develop/develop/option-tests.ts +174 -0
  421. package/templates/develop/develop/partial-choice.ts +29 -0
  422. package/templates/develop/develop/partial.ts +28 -0
  423. package/templates/develop/develop/pull.ts +152 -0
  424. package/templates/develop/develop/queue-partial.ts +39 -0
  425. package/templates/develop/develop/refusal-tests.ts +174 -0
  426. package/templates/develop/develop/report.ts +156 -0
  427. package/templates/develop/develop/round.ts +40 -0
  428. package/templates/develop/develop/scenarios.ts +87 -0
  429. package/templates/develop/develop/turn.ts +67 -0
  430. package/templates/develop/develop.declaration.json +24 -0
  431. package/templates/develop/develop.test.ts +287 -0
  432. package/templates/develop/develop.ts +30 -0
  433. package/templates/develop/template.json +153 -0
  434. package/dist/src/chats/analysis-batches.d.ts +0 -42
  435. package/dist/src/chats/analysis-batches.js +0 -97
  436. package/dist/src/chats/analysis-checkpoint.d.ts +0 -29
  437. package/dist/src/chats/analysis-checkpoint.js +0 -31
  438. package/dist/src/chats/analysis-contract.d.ts +0 -80
  439. package/dist/src/chats/analysis-contract.js +0 -16
  440. package/dist/src/chats/analysis-data.d.ts +0 -3
  441. package/dist/src/chats/analysis-data.js +0 -85
  442. package/dist/src/chats/analysis-input.d.ts +0 -18
  443. package/dist/src/chats/analysis-input.js +0 -97
  444. package/dist/src/chats/analysis-links.d.ts +0 -2
  445. package/dist/src/chats/analysis-links.js +0 -25
  446. package/dist/src/chats/analysis-merge.d.ts +0 -16
  447. package/dist/src/chats/analysis-merge.js +0 -134
  448. package/dist/src/chats/analysis-prompt.d.ts +0 -18
  449. package/dist/src/chats/analysis-prompt.js +0 -42
  450. package/dist/src/chats/analysis-proposal.d.ts +0 -4
  451. package/dist/src/chats/analysis-proposal.js +0 -41
  452. package/dist/src/chats/analysis-provenance.d.ts +0 -4
  453. package/dist/src/chats/analysis-provenance.js +0 -99
  454. package/dist/src/chats/analysis-shape.d.ts +0 -4
  455. package/dist/src/chats/analysis-shape.js +0 -235
  456. package/dist/src/chats/analysis.d.ts +0 -3
  457. package/dist/src/chats/analysis.js +0 -42
  458. package/dist/src/chats/corpus-input.d.ts +0 -5
  459. package/dist/src/chats/corpus-input.js +0 -288
  460. package/dist/src/chats/destination.d.ts +0 -4
  461. package/dist/src/chats/destination.js +0 -96
  462. package/dist/src/chats/import.d.ts +0 -15
  463. package/dist/src/chats/import.js +0 -243
  464. package/dist/src/chats/input-file.d.ts +0 -3
  465. package/dist/src/chats/input-file.js +0 -32
  466. package/dist/src/chats/normalize.d.ts +0 -29
  467. package/dist/src/chats/normalize.js +0 -155
  468. package/dist/src/chats/previous-import.d.ts +0 -5
  469. package/dist/src/chats/previous-import.js +0 -34
  470. package/dist/src/chats/reader.d.ts +0 -21
  471. package/dist/src/chats/reader.js +0 -118
  472. package/dist/src/chats/redact-import.d.ts +0 -14
  473. package/dist/src/chats/redact-import.js +0 -141
  474. package/dist/src/chats/redaction.d.ts +0 -41
  475. package/dist/src/chats/redaction.js +0 -161
  476. package/dist/src/chats/reference-mapping.d.ts +0 -16
  477. package/dist/src/chats/reference-mapping.js +0 -153
  478. package/dist/src/chats/revision-input.d.ts +0 -3
  479. package/dist/src/chats/revision-input.js +0 -180
  480. package/dist/src/chats/revision.d.ts +0 -48
  481. package/dist/src/chats/revision.js +0 -94
  482. package/dist/src/chats/selection.d.ts +0 -25
  483. package/dist/src/chats/selection.js +0 -109
  484. package/dist/src/chats/source.d.ts +0 -23
  485. package/dist/src/chats/source.js +0 -135
  486. package/dist/src/chats/structure.d.ts +0 -57
  487. package/dist/src/chats/structure.js +0 -216
  488. package/dist/src/chats/workflow-generation-projection.d.ts +0 -8
  489. package/dist/src/chats/workflow-generation-projection.js +0 -75
  490. package/dist/src/chats/workflow-generation-source.d.ts +0 -25
  491. package/dist/src/chats/workflow-generation-source.js +0 -124
  492. package/dist/src/chats/workflow-generation-text.d.ts +0 -23
  493. package/dist/src/chats/workflow-generation-text.js +0 -74
  494. package/dist/src/chats/workflow-generation.d.ts +0 -69
  495. package/dist/src/chats/workflow-generation.js +0 -142
  496. package/dist/src/daemon/analysis-launch.d.ts +0 -5
  497. package/dist/src/daemon/analysis-launch.js +0 -81
  498. package/dist/src/daemon/analysis-token.d.ts +0 -6
  499. package/dist/src/daemon/analysis-token.js +0 -88
  500. package/dist/src/daemon/analysis-worker.d.ts +0 -20
  501. package/dist/src/daemon/analysis-worker.js +0 -271
  502. package/dist/src/daemon/chats-batch-binding.d.ts +0 -23
  503. package/dist/src/daemon/chats-batch-binding.js +0 -99
  504. package/dist/src/daemon/chats-capture.d.ts +0 -18
  505. package/dist/src/daemon/chats-capture.js +0 -194
  506. package/dist/src/daemon/chats-checkpoints.d.ts +0 -41
  507. package/dist/src/daemon/chats-checkpoints.js +0 -186
  508. package/dist/src/daemon/chats-files.d.ts +0 -42
  509. package/dist/src/daemon/chats-files.js +0 -252
  510. package/dist/src/daemon/chats-follow-up.d.ts +0 -38
  511. package/dist/src/daemon/chats-follow-up.js +0 -180
  512. package/dist/src/daemon/chats-question.d.ts +0 -15
  513. package/dist/src/daemon/chats-question.js +0 -93
  514. package/dist/src/daemon/chats-worker.d.ts +0 -13
  515. package/dist/src/daemon/chats-worker.js +0 -201
  516. package/dist/workflows/analyze-chats.d.ts +0 -15
  517. package/dist/workflows/analyze-chats.declaration.json +0 -22
  518. package/dist/workflows/analyze-chats.js +0 -250
@@ -1,7 +1,9 @@
1
+ import { absoluteWorkflowFolder } from "../src/project-settings.js";
1
2
  import { createHash } from "node:crypto";
2
3
  import { realpath } from "node:fs/promises";
3
- import { isAbsolute, join } from "node:path";
4
+ import { basename, dirname, isAbsolute, join } from "node:path";
4
5
  import ts from "typescript";
6
+ import { isCandidateDeclaration, } from "../src/workflow-candidate.js";
5
7
  import { record } from "../src/protocol.js";
6
8
  import { workflowConflicts, } from "../src/workflow-discovery.js";
7
9
  import { admitWorkflowCandidate } from "./admit-workflow.js";
@@ -22,8 +24,11 @@ function parsedDeclaration(text) {
22
24
  function identity(entry) {
23
25
  const snapshot = entry.kind === "captured" ? entry.snapshot : entry;
24
26
  const source = ts.createSourceFile("candidate.ts", snapshot.source ?? "", ts.ScriptTarget.Latest, true);
25
- const workflowId = record(record(parsedDeclaration(snapshot.declaration ?? ""))?.["workflow"])?.["workflowId"];
27
+ const parsed = parsedDeclaration(snapshot.declaration ?? "");
28
+ const declaration = record(record(parsed)?.["workflow"]);
29
+ const workflowId = declaration?.["workflowId"];
26
30
  return {
31
+ queue: isCandidateDeclaration(parsed) && parsed.workflow.queue === true,
27
32
  baseName: snapshot.baseName,
28
33
  workflowId: typeof workflowId === "string" ? workflowId : undefined,
29
34
  functionNames: source.statements
@@ -55,7 +60,9 @@ async function scanFolder(location, refusals) {
55
60
  }
56
61
  const snapshots = [];
57
62
  for (const name of entries
58
- .filter((name) => name.endsWith(".ts") && !name.endsWith(".d.ts"))
63
+ .filter((name) => name.endsWith(".ts") &&
64
+ !name.endsWith(".d.ts") &&
65
+ !name.endsWith(".test.ts"))
59
66
  .sort()) {
60
67
  snapshots.push(await captureEntry(folder, {
61
68
  scope: location.scope,
@@ -83,6 +90,7 @@ async function captureEntry(folder, file) {
83
90
  ...label,
84
91
  source: capture.source,
85
92
  declaration: capture.declaration,
93
+ helpers: capture.helpers,
86
94
  },
87
95
  };
88
96
  }
@@ -96,17 +104,60 @@ async function captureEntry(folder, file) {
96
104
  };
97
105
  }
98
106
  }
99
- async function scanFolders(input, refusals) {
100
- const repository = await realpath(input.repository);
107
+ export function userLocation(input) {
108
+ const folder = absoluteWorkflowFolder(input.userFolder);
109
+ if (folder !== undefined)
110
+ return { root: dirname(folder), parts: [basename(folder)] };
101
111
  const configuration = input.xdgConfigHome && isAbsolute(input.xdgConfigHome)
102
112
  ? input.xdgConfigHome
103
113
  : join(input.home, ".config");
114
+ return { root: configuration, parts: ["cloving", "workflows"] };
115
+ }
116
+ async function scanFolders(input, refusals) {
117
+ const repository = await realpath(input.repository);
104
118
  const snapshots = [
105
119
  ...(await scanFolder({ scope: "project", root: repository, parts: [".cloving", "workflows"] }, refusals)),
106
- ...(await scanFolder({ scope: "user", root: configuration, parts: ["cloving", "workflows"] }, refusals)),
120
+ ...(await scanFolder({ scope: "user", ...userLocation(input) }, refusals)),
107
121
  ];
108
122
  return { repository, snapshots };
109
123
  }
124
+ function workflowFolder(input, scope) {
125
+ if (scope === "project")
126
+ return join(input.repository, ".cloving", "workflows");
127
+ const { root, parts } = userLocation(input);
128
+ return join(root, ...parts);
129
+ }
130
+ function folderListings(input, found) {
131
+ const { repository, snapshots, refusals } = found;
132
+ const workflows = snapshots.map((entry) => {
133
+ const snapshot = entry.kind === "captured" ? entry.snapshot : entry;
134
+ const declaration = parsedDeclaration(snapshot.declaration ?? "");
135
+ const refusal = refusals.find((item) => item.scope === snapshot.scope && item.label === snapshot.label);
136
+ const folder = workflowFolder({ ...input, repository }, snapshot.scope);
137
+ return {
138
+ scope: snapshot.scope,
139
+ workflowId: isCandidateDeclaration(declaration)
140
+ ? declaration.workflow.workflowId
141
+ : null,
142
+ file: join(folder, snapshot.baseName + ".ts"),
143
+ admitted: refusal === undefined,
144
+ codes: refusal?.codes ?? [],
145
+ ...(isCandidateDeclaration(declaration) ? { declaration } : {}),
146
+ };
147
+ });
148
+ return [
149
+ ...workflows,
150
+ ...refusals
151
+ .filter((refusal) => refusal.label === "workflows/")
152
+ .map((refusal) => ({
153
+ scope: refusal.scope,
154
+ workflowId: null,
155
+ file: workflowFolder({ ...input, repository }, refusal.scope),
156
+ admitted: false,
157
+ codes: refusal.codes,
158
+ })),
159
+ ];
160
+ }
110
161
  export async function loadWorkflowFolders(input, installed = {}) {
111
162
  const candidates = [];
112
163
  const refusals = [];
@@ -128,6 +179,7 @@ export async function loadWorkflowFolders(input, installed = {}) {
128
179
  const result = await admitWorkflowCandidate({
129
180
  source: snapshot.source,
130
181
  declaration: parsedDeclaration(snapshot.declaration),
182
+ helpers: snapshot.helpers,
131
183
  }, installed);
132
184
  if (result.kind === "refused")
133
185
  refusals.push({
@@ -143,6 +195,7 @@ export async function loadWorkflowFolders(input, installed = {}) {
143
195
  });
144
196
  }
145
197
  return {
198
+ workflows: folderListings(input, { repository, snapshots, refusals }),
146
199
  repository,
147
200
  candidates: candidates.sort(compareLabels),
148
201
  refusals: refusals.sort(compareLabels),
@@ -0,0 +1,7 @@
1
+ export declare function workflowTestHook(input: {
2
+ readonly root: string;
3
+ readonly extension: string;
4
+ readonly exports: Readonly<Record<string, {
5
+ readonly import: string;
6
+ }>>;
7
+ }): string;
@@ -0,0 +1,16 @@
1
+ export function workflowTestHook(input) {
2
+ const modules = Object.fromEntries(Object.entries(input.exports).map(([subpath, target]) => {
3
+ const path = target.import
4
+ .replace("./dist/", "./")
5
+ .replace(/\.js$/, input.extension);
6
+ return ["cloving" + subpath.slice(1), new URL(path, input.root).href];
7
+ }));
8
+ const hook = `import { registerHooks } from "node:module";
9
+ const modules = ${JSON.stringify(modules)};
10
+ registerHooks({
11
+ resolve(specifier, context, nextResolve) {
12
+ return nextResolve(modules[specifier] ?? specifier, context);
13
+ },
14
+ });`;
15
+ return "data:text/javascript," + encodeURIComponent(hook);
16
+ }
@@ -0,0 +1 @@
1
+ export declare function workflowTestLoader(): string;
@@ -0,0 +1,10 @@
1
+ import { extname } from "node:path";
2
+ import packageMetadata from "#package" with { type: "json" };
3
+ import { workflowTestHook } from "./workflow-test-hook.js";
4
+ export function workflowTestLoader() {
5
+ return workflowTestHook({
6
+ root: new URL("../", import.meta.url).href,
7
+ extension: extname(import.meta.filename),
8
+ exports: packageMetadata.exports,
9
+ });
10
+ }
@@ -190,7 +190,7 @@ export async function developTicket(input, decision) {
190
190
  });
191
191
  if (turn.kind !== "completed")
192
192
  return blocked(cycleId, {
193
- reason: `The Claude turn has the result ${turn.kind}.`,
193
+ reason: `The worker turn has the result ${turn.kind}.`,
194
194
  evidenceId: "claude-turn",
195
195
  });
196
196
  const gate = await decisionGate({
@@ -38,8 +38,12 @@ function denial(round) {
38
38
  }
39
39
  export function review(input, turnResult) {
40
40
  const turn = fields(turnResult.result);
41
+ const harness = turn["harness"];
42
+ const worker = typeof harness === "string" && harness !== ""
43
+ ? `the ${harness} worker`
44
+ : "the worker";
41
45
  return [
42
- `Review the work of the Claude worker for ${named(input)}.`,
46
+ `Review the work of ${worker} for ${named(input)}.`,
43
47
  `Round: ${String(turnResult.round)} of ${String(lastRound)}`,
44
48
  `Branch: ${part(turn, "branch")}`,
45
49
  `Work tree: ${part(turn, "worktree")}`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloving",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Local durable development workflow service",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -35,15 +35,56 @@
35
35
  "types": "./dist/src/steps/decision-gate.d.ts",
36
36
  "import": "./dist/src/steps/decision-gate.js"
37
37
  },
38
+ "./workflows/steps/review-subject": {
39
+ "types": "./dist/src/steps/review-subject.d.ts",
40
+ "import": "./dist/src/steps/review-subject.js"
41
+ },
42
+ "./workflows/steps/review-by-person": {
43
+ "types": "./dist/src/steps/review-by-person.d.ts",
44
+ "import": "./dist/src/steps/review-by-person.js"
45
+ },
46
+ "./workflows/steps/review-by-agent": {
47
+ "types": "./dist/src/steps/review-by-agent.d.ts",
48
+ "import": "./dist/src/steps/review-by-agent.js"
49
+ },
50
+ "./workflows/steps/merge-by-person": {
51
+ "types": "./dist/src/steps/merge-by-person.d.ts",
52
+ "import": "./dist/src/steps/merge-by-person.js"
53
+ },
54
+ "./workflows/steps/merge-when-green": {
55
+ "types": "./dist/src/steps/merge-when-green.d.ts",
56
+ "import": "./dist/src/steps/merge-when-green.js"
57
+ },
58
+ "./workflows/steps/wait-for-decision": {
59
+ "types": "./dist/src/steps/wait-for-decision.d.ts",
60
+ "import": "./dist/src/steps/wait-for-decision.js"
61
+ },
38
62
  "./workflows/steps/handoff": {
39
63
  "types": "./dist/src/steps/handoff.d.ts",
40
64
  "import": "./dist/src/steps/handoff.js"
65
+ },
66
+ "./workflows/steps/wait-for-run": {
67
+ "types": "./dist/src/steps/wait-for-run.d.ts",
68
+ "import": "./dist/src/steps/wait-for-run.js"
69
+ },
70
+ "./workflows/steps/run-command": {
71
+ "types": "./dist/src/steps/run-command.d.ts",
72
+ "import": "./dist/src/steps/run-command.js"
73
+ },
74
+ "./workflows/testing": {
75
+ "types": "./dist/src/testing.d.ts",
76
+ "import": "./dist/src/testing.js"
77
+ },
78
+ "./workflows/steps/sleep": {
79
+ "types": "./dist/src/steps/sleep.d.ts",
80
+ "import": "./dist/src/steps/sleep.js"
41
81
  }
42
82
  },
43
83
  "files": [
44
84
  "dist/src",
45
85
  "dist/tools",
46
86
  "dist/workflows",
87
+ "templates",
47
88
  "assets/watch-fonts/fira-code-latin-400-normal.woff2",
48
89
  "assets/watch-fonts/fira-code-latin-500-normal.woff2",
49
90
  "assets/watch-fonts/fira-code-OFL.md",
@@ -59,7 +100,7 @@
59
100
  "assets/watch-fonts/manifest.json"
60
101
  ],
61
102
  "engines": {
62
- "node": ">=26.9.0 <27",
103
+ "node": ">=24.22.1 <25 || >=26.9.0 <27",
63
104
  "npm": ">=11.19.1 <12"
64
105
  },
65
106
  "os": [
@@ -73,12 +114,13 @@
73
114
  "scripts": {
74
115
  "build": "tsc --project tsconfig.build.json && node tools/copy-workflow-declarations.ts workflows dist/workflows",
75
116
  "build:workflows": "node tools/compile-workflows.ts",
76
- "check:setup": "tsc --project tsconfig.json --noEmit",
117
+ "check:setup": "node tools/check-shells.ts && tsc --project tsconfig.json --noEmit",
77
118
  "check:quality": "node tools/check-quality.ts",
78
119
  "check:clean": "node tools/check-clean.ts",
79
120
  "check:lint": "eslint src tools quality test eslint.config.mjs --max-warnings 0",
80
121
  "check:format": "prettier --check src tools quality test eslint.config.mjs package.json tsconfig.json tsconfig.build.json",
81
122
  "test:quality": "node --test test/quality/*.test.ts",
123
+ "record:test-durations": "node tools/record-test-durations.ts",
82
124
  "test:scale": "node --test --test-concurrency=1 test/authority-opening-scale.benchmark.ts",
83
125
  "check": "node tools/quality-pending.ts",
84
126
  "test:concurrency": "node tools/quality-pending.ts"
@@ -106,7 +148,7 @@
106
148
  "@workflow/builders": "5.0.2",
107
149
  "entities": "8.1.0",
108
150
  "preact": "11.0.0",
109
- "solid-objects": "0.17.8",
151
+ "solid-objects": "1.0.2",
110
152
  "typescript": "6.0.3",
111
153
  "workflow": "5.1.0"
112
154
  }
@@ -0,0 +1,78 @@
1
+ # Develop template decisions
2
+
3
+ `template.json` describes the five decisions used by the develop template.
4
+ The default workflow in `develop.ts` accepts the declared ticket input, selects
5
+ from the queue, opens a pull request, waits for Greptile at 5/5, and calls
6
+ `mergeWhenGreen` with `check: "beforeMerge"`. Its declaration and helper files
7
+ pass folder admission, including compilation with the Workflow SDK in a packed
8
+ installation. Copy this directory's contents into a workflow folder.
9
+
10
+ The host supplies `{ cycleId, repository, input: { ticket: { id, text } } }`.
11
+ `develop/report.ts` extracts the resolved text and preserves the worker's ticket
12
+ status. `develop/round.ts` composes development, review and merge. A failed
13
+ review or repairable merge result gives its full output and remaining work to
14
+ the next worker turn. Review, local-check, conflict and CI fixes share a limit
15
+ of three fix rounds. Pending CI and an unconfigured check stop the run.
16
+
17
+ `develop.test.ts` and `develop/flow-tests.ts` test the default composition through the public fake
18
+ step bridge. The alternative configurations use `develop/option-tests.ts`, with the selected
19
+ point IDs in `develop/scenarios.ts`. For an edited copy, replace the default
20
+ `flowTests` and `refusalTests` imports in `develop.test.ts` with
21
+ `optionTests as flowTests`, then run every `flowTests` scenario. Keep the shared
22
+ turn and partial-helper tests. Package tests apply each source edit, validate
23
+ its requirements, and test seven complete configurations through the folder
24
+ loader and the installed package, covering every option.
25
+
26
+ `develop/turn.ts` implements the development turn for either a resolved
27
+ `ticket` or a task `prompt`. It calls the public protected effect helper and
28
+ returns the broker result unchanged. Its `feedback` takes the previous
29
+ result's `reason`, full `output`, and `remaining` items. Rounds 1 through 4
30
+ allow the initial turn and three fix turns; the workflow must stop after that.
31
+ `develop.test.ts` exercises this helper with `cloving/workflows/testing`.
32
+ The package tests also load small compositions of this helper through folder
33
+ admission for both input forms and test both forms in complete workflows.
34
+
35
+ `develop/partial.ts` implements the person's partial-work question.
36
+ `develop/partial-choice.ts` connects its answer to a development report and the
37
+ next round, or returns a blocked outcome without opening a review or merging. `reviewPartial`
38
+ opens a question with an identity scoped to the run and round. It returns
39
+ nonempty feedback from an explicit answer, or stops. It opens no question
40
+ after the initial turn and three fix turns. The separate `develop/queue-partial.ts`
41
+ helper, `queuePartial`, forwards the issue,
42
+ merged pull request and remaining items to the protected `partial-issue`
43
+ operation, preserving its result. The GitHub worker owns partial-run history
44
+ and requeues the first two runs, then blocks the ticket from the third.
45
+ Folder-admission tests cover both helpers in the checkout and packed install.
46
+ The default workflow calls `queuePartial` after merging partial work, closes
47
+ complete issues, and reports a failed issue update in its outcome.
48
+ The person-only composition needs no GitHub capability. `develop/local.ts`
49
+ implements its round: develop, ask about partial work, review the immutable
50
+ commit, and leave the branch for the person to merge. It refuses missing or
51
+ malformed commit IDs and reports of uncommitted work. `develop/accept.ts`
52
+ contains the editable pull-request acceptance call. `promptInput` in
53
+ `develop/report.ts` adapts task text without looking up a ticket.
54
+ Only resolved ticket input supplies an issue identity for lifecycle updates.
55
+ Task text keeps its full contents, including any issue-looking lines, without
56
+ selecting an issue to label, close or return to the queue.
57
+
58
+ The first option of each point is the default: ticket input, queue selection,
59
+ Greptile at 5/5, merge after checks, and return partial work to the queue.
60
+ Selecting `person` at selection, acceptance and partial work, with `local` at
61
+ merge, describes the existing reviewed local-branch process.
62
+
63
+ Each option has an `id`, `label`, `summary`, `change`, `requires` and `needs`.
64
+ `change` describes the step call or declaration edit for the setup agent.
65
+ It is guidance for editing source, rather than an executable patch.
66
+
67
+ `requires` maps another point ID to its allowed option IDs. All named points
68
+ must satisfy their requirement; any listed option for one point satisfies that
69
+ point. For example, `"merge": ["person", "green"]` requires either pull-request
70
+ merge option. An empty object imposes no additional requirement. Select exactly
71
+ one known option at each point and validate the complete selection after edits.
72
+
73
+ `needs` lists `cloving doctor` codes required by that option. The configured
74
+ workflow also needs the common runtime and harness checks reported by doctor.
75
+
76
+ Changing metadata does not change runtime behavior. The setup agent must apply
77
+ the source and declaration edits, run the workflow's scenario tests, and load
78
+ the edited configuration through folder admission before using it.
@@ -0,0 +1,11 @@
1
+ import type { ReviewSubject, ReviewResult } from "cloving/workflows";
2
+ import { reviewByAgent } from "cloving/workflows/steps/review-by-agent";
3
+
4
+ export async function acceptWork(
5
+ subject: ReviewSubject,
6
+ ): Promise<ReviewResult> {
7
+ return await reviewByAgent({
8
+ subject: subject,
9
+ reviewer: { kind: "greptile" },
10
+ });
11
+ }