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
@@ -0,0 +1,47 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { readFile, realpath } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { basename, join, resolve } from "node:path";
6
+ import { configurationRoot, resolveSettings } from "../src/project-settings.js";
7
+ import { repositoryFileName } from "../src/repository-identity.js";
8
+ async function settingsFile(file) {
9
+ try {
10
+ return await readFile(file.path, "utf8");
11
+ }
12
+ catch (error) {
13
+ if (error instanceof Error && "code" in error && error.code === "ENOENT")
14
+ return undefined;
15
+ throw new Error(`unreadable-config-file: ${file.scope}`, { cause: error });
16
+ }
17
+ }
18
+ export function topLevel(given) {
19
+ try {
20
+ return execFileSync("git", ["-C", given, "rev-parse", "--show-toplevel"], {
21
+ encoding: "utf8",
22
+ stdio: ["ignore", "pipe", "ignore"],
23
+ }).trim();
24
+ }
25
+ catch {
26
+ return given;
27
+ }
28
+ }
29
+ export function projectRoot(given) {
30
+ return realpath(topLevel(resolve(given)));
31
+ }
32
+ export async function projectConfiguration(repository, environment) {
33
+ const projectName = repositoryFileName({
34
+ name: basename(repository),
35
+ sha256: createHash("sha256").update(repository).digest("hex"),
36
+ });
37
+ return resolveSettings(environment, {
38
+ project: await settingsFile({
39
+ path: join(repository, ".cloving/config.json"),
40
+ scope: "project",
41
+ }),
42
+ private: await settingsFile({
43
+ path: join(configurationRoot(environment, homedir()), "cloving/projects", `${projectName}.json`),
44
+ scope: "private",
45
+ }),
46
+ });
47
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,174 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { mkdtempSync, rmSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { record } from "../src/protocol.js";
6
+ import { configuration } from "../src/configuration-schema.js";
7
+ import { parseCommandSeconds } from "../src/command-settings.js";
8
+ import { redGreenProcess } from "./red-green-process.js";
9
+ function git(argumentsList) {
10
+ return execFileSync("git", [...argumentsList], {
11
+ encoding: "utf8",
12
+ stdio: ["ignore", "pipe", "pipe"],
13
+ });
14
+ }
15
+ async function run(input) {
16
+ const temporary = mkdtempSync(join(tmpdir(), "cloving-red-green-"));
17
+ const tree = join(temporary, "tree");
18
+ try {
19
+ git(["worktree", "add", "--detach", tree, input.revision]);
20
+ if (input.revision !== input.head)
21
+ git([
22
+ "--literal-pathspecs",
23
+ "-C",
24
+ tree,
25
+ "restore",
26
+ "--source",
27
+ input.head,
28
+ "--worktree",
29
+ "--",
30
+ ...input.files,
31
+ ]);
32
+ const options = {
33
+ directory: tree,
34
+ signal: input.signal,
35
+ milliseconds: input.milliseconds,
36
+ };
37
+ const prepared = input.prepare === undefined
38
+ ? undefined
39
+ : await redGreenProcess(input.prepare, options);
40
+ if (prepared !== undefined && prepared.status !== 0)
41
+ return { ...prepared, prepareFailed: true };
42
+ const tested = await redGreenProcess([...input.test, ...input.files], options);
43
+ return tested;
44
+ }
45
+ finally {
46
+ git(["worktree", "remove", "--force", tree]);
47
+ rmSync(temporary, { recursive: true, force: true });
48
+ }
49
+ }
50
+ async function redGreenCommand(signal) {
51
+ if (process.argv.slice(2).includes("--help")) {
52
+ process.stdout.write('Usage: cloving red-green\n\nReads {"head":"<full commit ID>"} on standard input.\nCLOVING_RED_GREEN configures test, testFiles, prepare, assertionPattern and skipPattern.\nPrints one JSON verdict from temporary detached worktrees.\n');
53
+ return;
54
+ }
55
+ let text = "";
56
+ for await (const chunk of process.stdin)
57
+ text += String(chunk);
58
+ const head = inputHead(text);
59
+ const { settings, assertion, skip } = redGreenSettings();
60
+ const { test, testFiles: prefixes, prepare } = settings;
61
+ if (git(["cat-file", "-t", head]).trim() !== "commit")
62
+ throw new Error("invalid-red-green-input: head must be a full commit ID");
63
+ if (git(["rev-parse", "--verify", head]).trim() !== head.toLowerCase())
64
+ throw new Error("invalid-red-green-input: head must be a full commit ID");
65
+ const base = git(["merge-base", head, "refs/remotes/origin/HEAD"]).trim();
66
+ const files = changedTests({ base, head, prefixes });
67
+ if (files.length === 0) {
68
+ process.stdout.write(JSON.stringify({
69
+ verdict: "no-test-change",
70
+ base,
71
+ head,
72
+ files,
73
+ output: "",
74
+ }) + "\n");
75
+ return;
76
+ }
77
+ const milliseconds = parseCommandSeconds(process.env["CLOVING_COMMAND_SECONDS"]) * 1000;
78
+ const options = { head, files, test, prepare, signal, milliseconds };
79
+ const red = await run({ ...options, revision: base });
80
+ signal.throwIfAborted();
81
+ const green = await run({ ...options, revision: head });
82
+ signal.throwIfAborted();
83
+ const result = classify({ red, green, assertion, skip });
84
+ process.stdout.write(JSON.stringify({
85
+ ...result,
86
+ output: result.output.slice(-16000),
87
+ base,
88
+ head,
89
+ files,
90
+ }) + "\n");
91
+ }
92
+ function changedTests(input) {
93
+ return git([
94
+ "diff",
95
+ "--no-renames",
96
+ "--name-only",
97
+ "--diff-filter=AMT",
98
+ "-z",
99
+ input.base,
100
+ input.head,
101
+ ])
102
+ .split("\0")
103
+ .filter((file) => input.prefixes.some((prefix) => file.startsWith(prefix)));
104
+ }
105
+ function classify(input) {
106
+ const { red, green, assertion, skip } = input;
107
+ for (const result of [red, green])
108
+ if (result.prepareFailed === true)
109
+ return { verdict: "prepare-failed", output: result.output };
110
+ for (const result of [red, green])
111
+ if (skip.test(result.output))
112
+ return { verdict: "skipped-test", output: result.output };
113
+ if (red.status === 0)
114
+ return { verdict: "false-red", output: red.output };
115
+ if (red.status === null || !assertion.test(red.output))
116
+ return { verdict: "red-not-assertion", output: red.output };
117
+ if (green.status !== 0)
118
+ return { verdict: "green-failed", output: green.output };
119
+ return { verdict: "accepted", output: green.output };
120
+ }
121
+ function inputHead(text) {
122
+ let input;
123
+ try {
124
+ input = JSON.parse(text);
125
+ }
126
+ catch {
127
+ throw new Error("invalid-red-green-input: expected JSON with a full commit ID in head");
128
+ }
129
+ const head = record(input)?.["head"];
130
+ if (typeof head !== "string" ||
131
+ !/^(?:[a-fA-F0-9]{40}|[a-fA-F0-9]{64})$/.test(head))
132
+ throw new Error("invalid-red-green-input: head must be a full commit ID");
133
+ return head;
134
+ }
135
+ function redGreenSettings() {
136
+ try {
137
+ const value = JSON.parse(process.env["CLOVING_RED_GREEN"] ?? "null");
138
+ const settings = configuration({ version: 1, checks: { redGreen: value } }, "project").checks?.redGreen;
139
+ if (settings === undefined)
140
+ throw new Error("missing settings");
141
+ return {
142
+ settings,
143
+ assertion: new RegExp(settings.assertionPattern ?? "ERR_ASSERTION"),
144
+ skip: new RegExp(settings.skipPattern ?? "# SKIP\\b"),
145
+ };
146
+ }
147
+ catch (error) {
148
+ throw new Error("invalid-CLOVING_RED_GREEN: " +
149
+ (error instanceof Error ? error.message : String(error)), { cause: error });
150
+ }
151
+ }
152
+ const controller = new AbortController();
153
+ const interrupt = () => {
154
+ controller.abort();
155
+ };
156
+ process.on("disconnect", interrupt);
157
+ if (!process.connected)
158
+ interrupt();
159
+ process.on("SIGTERM", interrupt);
160
+ process.on("SIGINT", interrupt);
161
+ try {
162
+ await redGreenCommand(controller.signal);
163
+ }
164
+ catch (error) {
165
+ process.stderr.write((error instanceof Error ? error.message : String(error)) + "\n");
166
+ process.exitCode = 1;
167
+ }
168
+ finally {
169
+ process.off("disconnect", interrupt);
170
+ if (process.connected)
171
+ process.disconnect?.();
172
+ process.off("SIGTERM", interrupt);
173
+ process.off("SIGINT", interrupt);
174
+ }
@@ -0,0 +1,10 @@
1
+ export interface RunResult {
2
+ readonly status: number | null;
3
+ readonly output: string;
4
+ readonly prepareFailed?: boolean;
5
+ }
6
+ export declare function redGreenProcess(argumentsList: readonly string[], options: {
7
+ readonly directory: string;
8
+ readonly signal: AbortSignal;
9
+ readonly milliseconds: number;
10
+ }): Promise<RunResult>;
@@ -0,0 +1,59 @@
1
+ import { spawn } from "node:child_process";
2
+ import { addAbortListener } from "node:events";
3
+ function stop(child) {
4
+ if (child.pid === undefined)
5
+ return;
6
+ try {
7
+ process.kill(-child.pid, "SIGKILL");
8
+ }
9
+ catch (error) {
10
+ if (Reflect.get(Object(error), "code") !== "ESRCH")
11
+ child.kill("SIGKILL");
12
+ }
13
+ }
14
+ export async function redGreenProcess(argumentsList, options) {
15
+ options.signal.throwIfAborted();
16
+ const child = spawn(argumentsList[0] ?? "", argumentsList.slice(1), {
17
+ cwd: options.directory,
18
+ stdio: ["ignore", "pipe", "pipe"],
19
+ detached: true,
20
+ env: { ...process.env, NODE_TEST_CONTEXT: undefined },
21
+ });
22
+ let output = "";
23
+ let stopped = false;
24
+ child.stdout.setEncoding("utf8");
25
+ child.stderr.setEncoding("utf8");
26
+ child.stdout.on("data", (chunk) => {
27
+ output += chunk;
28
+ });
29
+ child.stderr.on("data", (chunk) => {
30
+ output += chunk;
31
+ });
32
+ child.once("error", (error) => {
33
+ output += error.message;
34
+ });
35
+ const closed = new Promise((resolve) => {
36
+ child.once("close", (status) => {
37
+ resolve({ status: stopped ? null : status, output });
38
+ });
39
+ });
40
+ const terminate = () => {
41
+ stopped = true;
42
+ stop(child);
43
+ child.stdout.destroy();
44
+ child.stderr.destroy();
45
+ };
46
+ const listener = addAbortListener(options.signal, terminate);
47
+ const timeout = setTimeout(() => {
48
+ output += "\nred-green command timed out\n";
49
+ terminate();
50
+ }, options.milliseconds);
51
+ try {
52
+ return await closed;
53
+ }
54
+ finally {
55
+ clearTimeout(timeout);
56
+ listener[Symbol.dispose]();
57
+ stop(child);
58
+ }
59
+ }
@@ -1,10 +1,13 @@
1
1
  export interface HostProcesses {
2
+ readonly environment?: Readonly<NodeJS.ProcessEnv>;
2
3
  readonly project: string;
3
4
  readonly product: string;
4
5
  readonly runtime: string;
5
6
  readonly directory: string;
6
7
  readonly repository: string;
7
8
  readonly watchPort: string;
9
+ readonly phoneRelay: string;
8
10
  readonly updateMilliseconds: number | undefined;
11
+ readonly stopMilliseconds?: number;
9
12
  }
10
13
  export declare function hostedPrograms(settings: HostProcesses): Promise<number>;
@@ -1,5 +1,6 @@
1
1
  import { execFile, spawn } from "node:child_process";
2
2
  import { addAbortListener } from "node:events";
3
+ import { rm } from "node:fs/promises";
3
4
  import { extname, join } from "node:path";
4
5
  import { setTimeout as delay } from "node:timers/promises";
5
6
  import { promisify } from "node:util";
@@ -17,12 +18,26 @@ function launched(argumentsList, settings) {
17
18
  settle(status ?? 1);
18
19
  });
19
20
  });
20
- return { child, ended };
21
+ return { name: settings.name, child, ended };
21
22
  }
22
- async function stopped(programs) {
23
+ async function stopped(programs, milliseconds) {
23
24
  for (const program of programs)
24
- program.child.kill("SIGTERM");
25
- await Promise.all(programs.map((program) => program.ended));
25
+ if (!program.child.killed &&
26
+ program.child.exitCode === null &&
27
+ program.child.signalCode === null)
28
+ program.child.kill("SIGTERM");
29
+ await Promise.all(programs.map(async (program) => {
30
+ const timer = setTimeout(() => {
31
+ if (program.child.kill("SIGKILL"))
32
+ process.stderr.write(`Cloving stopped the ${program.name} child with SIGKILL after ${String(milliseconds / 1000)} s\n`);
33
+ }, milliseconds);
34
+ try {
35
+ await program.ended;
36
+ }
37
+ finally {
38
+ clearTimeout(timer);
39
+ }
40
+ }));
26
41
  }
27
42
  function updatingGit(settings, stopping) {
28
43
  const git = promisify(execFile);
@@ -51,8 +66,10 @@ function updatingGit(settings, stopping) {
51
66
  };
52
67
  }
53
68
  async function polled(settings, lifecycle) {
54
- if (settings.updateMilliseconds === undefined)
69
+ if (settings.updateMilliseconds === undefined) {
70
+ await rm(join(settings.directory, "pending-self-update"), { force: true });
55
71
  return;
72
+ }
56
73
  const cancelled = () => lifecycle.stopping.aborted;
57
74
  const updater = selfUpdater({
58
75
  directory: settings.directory,
@@ -87,44 +104,57 @@ async function polled(settings, lifecycle) {
87
104
  }
88
105
  return undefined;
89
106
  }
107
+ function productChild(settings, argumentsList) {
108
+ const [program, ...rest] = argumentsList;
109
+ return launched([
110
+ join(settings.product, `src/${program}${extname(import.meta.filename)}`),
111
+ ...rest,
112
+ ], {
113
+ name: program === "cli" ? "watch" : program,
114
+ directory: settings.product,
115
+ environment: {
116
+ ...(settings.environment ?? process.env),
117
+ CLOVING_RUNTIME_DIR: settings.runtime,
118
+ CLOVING_WATCH_REPOSITORY: settings.repository,
119
+ },
120
+ });
121
+ }
90
122
  function hostedChildren(settings) {
91
123
  const daemon = launched([join(settings.project, "start.mjs")], {
124
+ name: "daemon",
92
125
  directory: settings.project,
93
- environment: process.env,
126
+ environment: settings.environment ?? process.env,
94
127
  });
95
- if (settings.watchPort === "off")
96
- return [daemon];
97
- return [
98
- daemon,
99
- launched([
100
- join(settings.product, `src/cli${extname(import.meta.filename)}`),
101
- "watch",
102
- "--port",
103
- settings.watchPort,
104
- ], {
105
- directory: settings.product,
106
- environment: {
107
- ...process.env,
108
- CLOVING_RUNTIME_DIR: settings.runtime,
109
- CLOVING_WATCH_REPOSITORY: settings.repository,
110
- },
111
- }),
112
- ];
128
+ const watch = settings.watchPort === "off"
129
+ ? []
130
+ : [
131
+ productChild(settings, [
132
+ "cli",
133
+ "watch",
134
+ "--port",
135
+ settings.watchPort,
136
+ ]),
137
+ ];
138
+ const relay = settings.phoneRelay === "off" ? [] : [productChild(settings, ["relay"])];
139
+ return { daemon, programs: [daemon, ...watch, ...relay] };
113
140
  }
114
141
  export async function hostedPrograms(settings) {
115
- const programs = hostedChildren(settings);
116
- const daemon = programs[0];
142
+ const { daemon, programs } = hostedChildren(settings);
117
143
  const stopping = new AbortController();
118
144
  let updating = false;
119
- const interrupt = () => {
145
+ let shutdown;
146
+ const stop = () => (shutdown ??= stopped(programs, settings.stopMilliseconds ?? 60000));
147
+ const signal = (signal) => {
120
148
  stopping.abort();
121
149
  for (const program of programs)
122
- program.child.kill("SIGINT");
150
+ program.child.kill(signal);
151
+ shutdown = stop();
152
+ };
153
+ const interrupt = () => {
154
+ signal("SIGINT");
123
155
  };
124
156
  const terminate = () => {
125
- stopping.abort();
126
- for (const program of programs)
127
- program.child.kill("SIGTERM");
157
+ signal("SIGTERM");
128
158
  };
129
159
  process.on("SIGINT", interrupt);
130
160
  process.on("SIGTERM", terminate);
@@ -132,7 +162,7 @@ export async function hostedPrograms(settings) {
132
162
  stopping: stopping.signal,
133
163
  stop: async () => {
134
164
  updating = true;
135
- await stopped(programs);
165
+ await stop();
136
166
  },
137
167
  });
138
168
  try {
@@ -148,7 +178,7 @@ export async function hostedPrograms(settings) {
148
178
  }
149
179
  finally {
150
180
  stopping.abort();
151
- await stopped(programs);
181
+ await stop();
152
182
  await polling;
153
183
  process.off("SIGINT", interrupt);
154
184
  process.off("SIGTERM", terminate);
@@ -1,14 +1,18 @@
1
1
  import { type DeclaredWorkflow } from "../src/workflow-declaration.ts";
2
2
  import type { WorkflowRefusal } from "../src/workflow-refusals.ts";
3
+ import { type WorkflowListing } from "./workflow-folders.ts";
3
4
  interface ProjectSettings {
4
5
  readonly product: string;
5
6
  readonly project: string;
6
7
  readonly repository: string;
7
8
  readonly home: string;
8
9
  readonly xdgConfigHome?: string | undefined;
10
+ readonly userFolder?: string | undefined;
9
11
  }
10
12
  export interface RegisteredWorkflows {
13
+ readonly workflows: readonly WorkflowListing[];
11
14
  readonly repository: string;
15
+ readonly bundleDigest: string;
12
16
  readonly manifests: Readonly<Record<string, string>>;
13
17
  readonly declarations: readonly DeclaredWorkflow[];
14
18
  readonly workflowRefusals: readonly WorkflowRefusal[];
@@ -1,13 +1,12 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { createHash } from "node:crypto";
3
- import { copyFile, mkdir, readFile, rm, symlink, writeFile, } from "node:fs/promises";
3
+ import { mkdir, readFile, rm, symlink, writeFile } from "node:fs/promises";
4
4
  import { findPackageJSON } from "node:module";
5
- import { basename, dirname, extname, join, resolve } from "node:path";
5
+ import { dirname, extname, join, resolve } from "node:path";
6
6
  import packageMetadata from "#package" with { type: "json" };
7
7
  import { record } from "../src/protocol.js";
8
8
  import { isWorkflowDeclaration, } from "../src/workflow-declaration.js";
9
- import { bundledWorkflowIds, } from "../src/workflow-discovery.js";
10
- import { workflowDeclarations, workflowFiles, workflowManifests, } from "./self-host-workflows.js";
9
+ import { workflowManifests } from "./self-host-workflows.js";
11
10
  import { loadWorkflowFolders, } from "./workflow-folders.js";
12
11
  import { isWorkflowManifest } from "./workflow-manifest.js";
13
12
  import { retainWorkflowBundle } from "./workflow-bundles.js";
@@ -17,13 +16,15 @@ async function initializeProject(settings) {
17
16
  await rm(project, { recursive: true, force: true });
18
17
  await mkdir(join(project, "workflows"), { recursive: true, mode: 0o700 });
19
18
  await writeFile(join(project, "package.json"), '{"name":"cloving-self-host","private":true,"type":"module"}');
20
- const files = await workflowFiles(join(product, "workflows"));
21
- for (const file of files)
22
- await copyWorkflow(settings, file);
23
19
  const modules = join(project, "node_modules");
24
20
  await mkdir(join(modules, "cloving"), { recursive: true });
25
- for (const name of Object.keys(packageMetadata.dependencies)) {
26
- const location = findPackageJSON(name, join(product, "package.json"));
21
+ const dependencies = new Map(Object.keys(packageMetadata.dependencies).map((name) => [name, join(product, "package.json")]));
22
+ const sdk = findPackageJSON("workflow", join(product, "package.json"));
23
+ if (sdk === undefined)
24
+ throw new Error("missing-runtime-dependency: workflow");
25
+ dependencies.set("@workflow/core", sdk);
26
+ for (const [name, from] of dependencies) {
27
+ const location = findPackageJSON(name, from);
27
28
  if (location === undefined)
28
29
  throw new Error(`missing-runtime-dependency: ${name}`);
29
30
  await mkdir(dirname(join(modules, name)), { recursive: true });
@@ -41,7 +42,6 @@ async function initializeProject(settings) {
41
42
  `./src/${subpath.slice("./workflows/".length) || "workflows"}${extname(import.meta.filename)}`,
42
43
  ])),
43
44
  }));
44
- return files;
45
45
  }
46
46
  async function compile(settings) {
47
47
  const { product, project } = settings;
@@ -65,23 +65,6 @@ async function compile(settings) {
65
65
  throw new Error("The compiled workflow manifest is invalid.");
66
66
  return compiled;
67
67
  }
68
- function reservations(input) {
69
- const { files, manifests, declarations } = input;
70
- return [
71
- ...files.map((file) => ({
72
- baseName: basename(file, extname(file)),
73
- })),
74
- ...Object.entries(manifests).map(([functionName, manifest]) => ({
75
- baseName: manifest.name,
76
- workflowId: manifest.workflowId,
77
- functionName,
78
- })),
79
- ...[
80
- ...Object.values(bundledWorkflowIds),
81
- ...declarations.map((item) => item.workflowId),
82
- ].map((workflowId) => ({ workflowId })),
83
- ];
84
- }
85
68
  async function stageCandidates(project, candidates) {
86
69
  if (candidates.length === 0)
87
70
  return [];
@@ -95,11 +78,21 @@ async function stageCandidates(project, candidates) {
95
78
  candidate.baseName,
96
79
  candidate.source,
97
80
  candidate.declaration,
81
+ Object.entries(candidate.helpers).sort(([left], [right]) => left < right ? -1 : Number(left > right)),
98
82
  ]))
99
83
  .digest("hex");
100
- const file = join(directory, `${name}.ts`);
84
+ const root = Object.keys(candidate.helpers).length > 0
85
+ ? join(directory, name)
86
+ : directory;
87
+ await mkdir(root, { recursive: true, mode: 0o700 });
88
+ const file = join(root, `${name}.ts`);
101
89
  await writeFile(file, candidate.source);
102
- await writeFile(join(directory, `${name}.declaration.json`), candidate.declaration);
90
+ await writeFile(join(root, `${name}.declaration.json`), candidate.declaration);
91
+ for (const [path, source] of Object.entries(candidate.helpers)) {
92
+ const destination = join(root, path);
93
+ await mkdir(dirname(destination), { recursive: true, mode: 0o700 });
94
+ await writeFile(destination, source);
95
+ }
103
96
  staged.push({ candidate, file });
104
97
  }
105
98
  return staged;
@@ -120,37 +113,9 @@ function operatorDeclaration(staged, compiled) {
120
113
  functionName: workflow.workflowId.slice(workflow.workflowId.lastIndexOf("//") + 2),
121
114
  };
122
115
  }
123
- async function copyWorkflow(settings, file) {
124
- const { product, project } = settings;
125
- await copyFile(join(product, "workflows", file), join(project, "workflows", file));
126
- const sidecar = `${basename(file, extname(file))}.declaration.json`;
127
- const declaration = await readFile(join(product, "workflows", sidecar)).catch((error) => {
128
- if (error instanceof Error && "code" in error && error.code === "ENOENT")
129
- return undefined;
130
- throw error;
131
- });
132
- if (declaration !== undefined)
133
- await writeFile(join(project, "workflows", sidecar), declaration);
134
- }
135
- export async function preparedProject(settings) {
136
- const { product, project } = settings;
137
- const files = await initializeProject(settings);
138
- let compiled = await compile(settings);
139
- const bundled = workflowManifests(compiled);
140
- const declarations = await workflowDeclarations(join(project, "workflows"), bundled);
141
- const folders = await loadWorkflowFolders({
142
- ...settings,
143
- bundled: reservations({ files, manifests: bundled, declarations }),
144
- }, { packageRoot: await workflowPackageRoot(product) });
145
- const staged = await stageCandidates(project, folders.candidates);
146
- if (staged.length > 0)
147
- compiled = await compile(settings);
148
- const combined = [
149
- ...declarations,
150
- ...staged.map((candidate) => operatorDeclaration({ ...candidate, project }, compiled)),
151
- ];
116
+ async function writeManifests(project, compiled) {
152
117
  const manifests = {};
153
- for (const [functionName, manifest] of Object.entries(workflowManifests(compiled, combined))) {
118
+ for (const [functionName, manifest] of Object.entries(compiled)) {
154
119
  const path = join(project, `${manifest.name}.workflow.json`);
155
120
  await writeFile(path, JSON.stringify(manifest));
156
121
  Object.defineProperty(manifests, functionName, {
@@ -158,18 +123,35 @@ export async function preparedProject(settings) {
158
123
  enumerable: true,
159
124
  });
160
125
  }
126
+ return manifests;
127
+ }
128
+ export async function preparedProject(settings) {
129
+ const { product, project } = settings;
130
+ await initializeProject(settings);
131
+ const folders = await loadWorkflowFolders(settings, {
132
+ packageRoot: await workflowPackageRoot(product),
133
+ });
134
+ const staged = await stageCandidates(project, folders.candidates);
135
+ const compiled = await compile(settings);
136
+ const combined = staged.map((candidate) => operatorDeclaration({ ...candidate, project }, compiled));
137
+ const manifests = await writeManifests(project, workflowManifests(compiled, combined));
161
138
  await writeFile(join(project, "declarations.json"), JSON.stringify(combined));
162
139
  await writeFile(join(project, "dependencies.json"), await workflowBundleDependencies({
163
140
  product,
164
141
  packages: Object.keys(packageMetadata.dependencies),
165
142
  }));
166
- await retainWorkflowBundle({
143
+ const bundleDigest = await retainWorkflowBundle({
167
144
  project,
168
145
  repository: folders.repository,
169
146
  directory: join(dirname(project), "workflow-bundles"),
170
147
  });
148
+ const modules = join(dirname(project), "workflow-bundles/node_modules");
149
+ await rm(modules, { force: true });
150
+ await symlink(join(project, "node_modules"), modules);
171
151
  return {
152
+ workflows: folders.workflows,
172
153
  repository: folders.repository,
154
+ bundleDigest,
173
155
  manifests,
174
156
  declarations: combined,
175
157
  workflowRefusals: folders.refusals,
@@ -0,0 +1,16 @@
1
+ interface RuntimeSelection {
2
+ readonly runtime: string;
3
+ readonly repository: string;
4
+ readonly legacyRuntime: string | undefined;
5
+ readonly adoptionRecord: string | undefined;
6
+ }
7
+ export declare function selectRuntimeDirectory(input: RuntimeSelection): Promise<{
8
+ readonly runtime: string;
9
+ readonly note: string;
10
+ readonly adoptionRecord?: string;
11
+ }>;
12
+ export declare function adoptRuntimeDirectory(input: RuntimeSelection): Promise<{
13
+ readonly runtime: string;
14
+ readonly note: string;
15
+ }>;
16
+ export {};