cloving 0.3.20 → 1.1.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 (515) hide show
  1. package/{LICENSE.md → LICENSE} +1 -1
  2. package/README.md +606 -182
  3. package/dist/src/authority/budgets.d.ts +12 -0
  4. package/dist/src/authority/budgets.js +42 -0
  5. package/dist/src/authority/commands.d.ts +7 -0
  6. package/dist/src/authority/commands.js +271 -0
  7. package/dist/src/authority/details.d.ts +28 -0
  8. package/dist/src/authority/details.js +33 -0
  9. package/dist/src/authority/dispatch-decision.d.ts +40 -0
  10. package/dist/src/authority/dispatch-decision.js +47 -0
  11. package/dist/src/authority/effect-requests.d.ts +2 -0
  12. package/dist/src/authority/effect-requests.js +139 -0
  13. package/dist/src/authority/effect-results.d.ts +4 -0
  14. package/dist/src/authority/effect-results.js +236 -0
  15. package/dist/src/authority/events.d.ts +2 -0
  16. package/dist/src/authority/events.js +45 -0
  17. package/dist/src/authority/gate-reduction.d.ts +8 -0
  18. package/dist/src/authority/gate-reduction.js +109 -0
  19. package/dist/src/authority/gates.d.ts +48 -0
  20. package/dist/src/authority/gates.js +77 -0
  21. package/dist/src/authority/history-state.d.ts +15 -0
  22. package/dist/src/authority/history-state.js +61 -0
  23. package/dist/src/authority/history.d.ts +13 -0
  24. package/dist/src/authority/history.js +37 -0
  25. package/dist/src/authority/instants.d.ts +3 -0
  26. package/dist/src/authority/instants.js +38 -0
  27. package/dist/src/authority/leases.d.ts +15 -0
  28. package/dist/src/authority/leases.js +113 -0
  29. package/dist/src/authority/operations.d.ts +101 -0
  30. package/dist/src/authority/operations.js +75 -0
  31. package/dist/src/authority/reconciliation.d.ts +29 -0
  32. package/dist/src/authority/reconciliation.js +156 -0
  33. package/dist/src/authority/reducer.d.ts +41 -0
  34. package/dist/src/authority/reducer.js +139 -0
  35. package/dist/src/authority/reduction-state.d.ts +36 -0
  36. package/dist/src/authority/reduction-state.js +68 -0
  37. package/dist/src/authority/reduction.d.ts +6 -0
  38. package/dist/src/authority/reduction.js +160 -0
  39. package/dist/src/authority/status-closure.d.ts +4 -0
  40. package/dist/src/authority/status-closure.js +57 -0
  41. package/dist/src/authority/status-effects.d.ts +17 -0
  42. package/dist/src/authority/status-effects.js +43 -0
  43. package/dist/src/authority/status-input.d.ts +45 -0
  44. package/dist/src/authority/status-input.js +9 -0
  45. package/dist/src/authority/status.d.ts +32 -0
  46. package/dist/src/authority/status.js +256 -0
  47. package/dist/src/authority/stop-sequence.d.ts +37 -0
  48. package/dist/src/authority/stop-sequence.js +91 -0
  49. package/dist/src/authority/transitions.d.ts +63 -0
  50. package/dist/src/authority/transitions.js +124 -0
  51. package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
  52. package/dist/src/broker/actor/adapter-calls.js +34 -0
  53. package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
  54. package/dist/src/broker/actor/adapter-outcomes.js +80 -0
  55. package/dist/src/broker/actor/authority-actor.d.ts +25 -0
  56. package/dist/src/broker/actor/authority-actor.js +169 -0
  57. package/dist/src/broker/actor/authority-changes.d.ts +31 -0
  58. package/dist/src/broker/actor/authority-changes.js +46 -0
  59. package/dist/src/broker/actor/authority-connection.d.ts +15 -0
  60. package/dist/src/broker/actor/authority-connection.js +44 -0
  61. package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
  62. package/dist/src/broker/actor/authority-conversion.js +72 -0
  63. package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
  64. package/dist/src/broker/actor/authority-delivery.js +162 -0
  65. package/dist/src/broker/actor/authority-logger.d.ts +2 -0
  66. package/dist/src/broker/actor/authority-logger.js +19 -0
  67. package/dist/src/broker/actor/authority-policy.d.ts +9 -0
  68. package/dist/src/broker/actor/authority-policy.js +11 -0
  69. package/dist/src/broker/actor/authority-queries.d.ts +45 -0
  70. package/dist/src/broker/actor/authority-queries.js +85 -0
  71. package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
  72. package/dist/src/broker/actor/authority-receipts.js +84 -0
  73. package/dist/src/broker/actor/authority-release.d.ts +13 -0
  74. package/dist/src/broker/actor/authority-release.js +69 -0
  75. package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
  76. package/dist/src/broker/actor/authority-runtime.js +204 -0
  77. package/dist/src/broker/actor/authority-session.d.ts +67 -0
  78. package/dist/src/broker/actor/authority-session.js +251 -0
  79. package/dist/src/broker/actor/authority-settings.d.ts +33 -0
  80. package/dist/src/broker/actor/authority-settings.js +63 -0
  81. package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
  82. package/dist/src/broker/actor/authority-upgrades.js +12 -0
  83. package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
  84. package/dist/src/broker/actor/authority-watchdog.js +41 -0
  85. package/dist/src/broker/actor/authority.d.ts +14 -0
  86. package/dist/src/broker/actor/authority.js +115 -0
  87. package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
  88. package/dist/src/broker/actor/delivery-intents.js +77 -0
  89. package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
  90. package/dist/src/broker/actor/delivery-plan.js +109 -0
  91. package/dist/src/broker/actor/delivery-results.d.ts +11 -0
  92. package/dist/src/broker/actor/delivery-results.js +63 -0
  93. package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
  94. package/dist/src/broker/actor/effect-delivery.js +118 -0
  95. package/dist/src/broker/actor/effect-plan.d.ts +41 -0
  96. package/dist/src/broker/actor/effect-plan.js +173 -0
  97. package/dist/src/broker/actor/effect-queries.d.ts +27 -0
  98. package/dist/src/broker/actor/effect-queries.js +80 -0
  99. package/dist/src/broker/actor/effect-turn.d.ts +25 -0
  100. package/dist/src/broker/actor/effect-turn.js +84 -0
  101. package/dist/src/broker/actor/pin-check.d.ts +6 -0
  102. package/dist/src/broker/actor/pin-check.js +12 -0
  103. package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
  104. package/dist/src/broker/actor/runtime-parts.js +34 -0
  105. package/dist/src/broker/actor/stop-plan.d.ts +20 -0
  106. package/dist/src/broker/actor/stop-plan.js +46 -0
  107. package/dist/src/broker/actor/stop-turn.d.ts +17 -0
  108. package/dist/src/broker/actor/stop-turn.js +42 -0
  109. package/dist/src/broker/actor/turn-draft.d.ts +31 -0
  110. package/dist/src/broker/actor/turn-draft.js +138 -0
  111. package/dist/src/broker/actor/turn-plan.d.ts +17 -0
  112. package/dist/src/broker/actor/turn-plan.js +136 -0
  113. package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
  114. package/dist/src/broker/actor/turn-refusals.js +35 -0
  115. package/dist/src/broker/actor/turn-staging.d.ts +78 -0
  116. package/dist/src/broker/actor/turn-staging.js +34 -0
  117. package/dist/src/broker/actor/turn-state.d.ts +34 -0
  118. package/dist/src/broker/actor/turn-state.js +208 -0
  119. package/dist/src/broker/authority-admission.d.ts +21 -0
  120. package/dist/src/broker/authority-admission.js +70 -0
  121. package/dist/src/broker/authority-restore.d.ts +30 -0
  122. package/dist/src/broker/authority-restore.js +165 -0
  123. package/dist/src/broker/decision-restore.d.ts +16 -0
  124. package/dist/src/broker/decision-restore.js +158 -0
  125. package/dist/src/broker/decision-upgrade.d.ts +3 -0
  126. package/dist/src/broker/decision-upgrade.js +12 -0
  127. package/dist/src/broker/effect-restore.d.ts +20 -0
  128. package/dist/src/broker/effect-restore.js +111 -0
  129. package/dist/src/broker/effect-upgrade.d.ts +3 -0
  130. package/dist/src/broker/effect-upgrade.js +9 -0
  131. package/dist/src/broker/operation-digest.d.ts +1 -0
  132. package/dist/src/broker/operation-digest.js +4 -0
  133. package/dist/src/broker/socket-address.d.ts +9 -0
  134. package/dist/src/broker/socket-address.js +14 -0
  135. package/dist/src/broker/workflow-pin.d.ts +2 -0
  136. package/dist/src/broker/workflow-pin.js +5 -0
  137. package/dist/src/chats/analysis-batches.d.ts +24 -0
  138. package/dist/src/chats/analysis-batches.js +83 -0
  139. package/dist/src/chats/analysis-contract.d.ts +80 -0
  140. package/dist/src/chats/analysis-contract.js +16 -0
  141. package/dist/src/chats/analysis-data.d.ts +3 -0
  142. package/dist/src/chats/analysis-data.js +85 -0
  143. package/dist/src/chats/analysis-input.d.ts +12 -0
  144. package/dist/src/chats/analysis-input.js +83 -0
  145. package/dist/src/chats/analysis-links.d.ts +2 -0
  146. package/dist/src/chats/analysis-links.js +25 -0
  147. package/dist/src/chats/analysis-prompt.d.ts +10 -0
  148. package/dist/src/chats/analysis-prompt.js +16 -0
  149. package/dist/src/chats/analysis-proposal.d.ts +2 -0
  150. package/dist/src/chats/analysis-proposal.js +32 -0
  151. package/dist/src/chats/analysis-provenance.d.ts +4 -0
  152. package/dist/src/chats/analysis-provenance.js +99 -0
  153. package/dist/src/chats/analysis-shape.d.ts +3 -0
  154. package/dist/src/chats/analysis-shape.js +228 -0
  155. package/dist/src/chats/analysis.d.ts +3 -0
  156. package/dist/src/chats/analysis.js +42 -0
  157. package/dist/src/chats/corpus-input.d.ts +5 -0
  158. package/dist/src/chats/corpus-input.js +288 -0
  159. package/dist/src/chats/destination.d.ts +4 -0
  160. package/dist/src/chats/destination.js +96 -0
  161. package/dist/src/chats/import.d.ts +15 -0
  162. package/dist/src/chats/import.js +243 -0
  163. package/dist/src/chats/input-file.d.ts +3 -0
  164. package/dist/src/chats/input-file.js +32 -0
  165. package/dist/src/chats/normalize.d.ts +29 -0
  166. package/dist/src/chats/normalize.js +155 -0
  167. package/dist/src/chats/previous-import.d.ts +5 -0
  168. package/dist/src/chats/previous-import.js +34 -0
  169. package/dist/src/chats/reader.d.ts +21 -0
  170. package/dist/src/chats/reader.js +118 -0
  171. package/dist/src/chats/redact-import.d.ts +14 -0
  172. package/dist/src/chats/redact-import.js +141 -0
  173. package/dist/src/chats/redaction.d.ts +41 -0
  174. package/dist/src/chats/redaction.js +161 -0
  175. package/dist/src/chats/revision-input.d.ts +3 -0
  176. package/dist/src/chats/revision-input.js +180 -0
  177. package/dist/src/chats/revision.d.ts +48 -0
  178. package/dist/src/chats/revision.js +94 -0
  179. package/dist/src/chats/selection.d.ts +25 -0
  180. package/dist/src/chats/selection.js +109 -0
  181. package/dist/src/chats/source.d.ts +23 -0
  182. package/dist/src/chats/source.js +135 -0
  183. package/dist/src/chats/structure.d.ts +57 -0
  184. package/dist/src/chats/structure.js +216 -0
  185. package/dist/src/cli/arguments.d.ts +31 -0
  186. package/dist/src/cli/arguments.js +235 -0
  187. package/dist/src/cli/client.d.ts +16 -0
  188. package/dist/src/cli/client.js +159 -0
  189. package/dist/src/cli/commands.d.ts +17 -0
  190. package/dist/src/cli/commands.js +271 -0
  191. package/dist/src/cli/main.d.ts +2 -0
  192. package/dist/src/cli/main.js +127 -0
  193. package/dist/src/cli/render.d.ts +10 -0
  194. package/dist/src/cli/render.js +254 -0
  195. package/dist/src/cli/runtime-arguments.d.ts +73 -0
  196. package/dist/src/cli/runtime-arguments.js +248 -0
  197. package/dist/src/cli/runtime-directory.d.ts +4 -0
  198. package/dist/src/cli/runtime-directory.js +25 -0
  199. package/dist/src/cli/toolchain.d.ts +3 -0
  200. package/dist/src/cli/toolchain.js +74 -0
  201. package/dist/src/cli/usage-render.d.ts +3 -0
  202. package/dist/src/cli/usage-render.js +28 -0
  203. package/dist/src/cli/usage.d.ts +5 -0
  204. package/dist/src/cli/usage.js +156 -0
  205. package/dist/src/cli/validate.d.ts +38 -0
  206. package/dist/src/cli/validate.js +116 -0
  207. package/dist/src/cli/watch-actions.d.ts +10 -0
  208. package/dist/src/cli/watch-actions.js +58 -0
  209. package/dist/src/cli/watch-board-view.d.ts +54 -0
  210. package/dist/src/cli/watch-board-view.js +201 -0
  211. package/dist/src/cli/watch-board.d.ts +15 -0
  212. package/dist/src/cli/watch-board.js +179 -0
  213. package/dist/src/cli/watch-card-client.d.ts +1 -0
  214. package/dist/src/cli/watch-card-client.js +44 -0
  215. package/dist/src/cli/watch-card-forms.d.ts +2 -0
  216. package/dist/src/cli/watch-card-forms.js +33 -0
  217. package/dist/src/cli/watch-card-reply.d.ts +5 -0
  218. package/dist/src/cli/watch-card-reply.js +34 -0
  219. package/dist/src/cli/watch-card-view.d.ts +40 -0
  220. package/dist/src/cli/watch-card-view.js +86 -0
  221. package/dist/src/cli/watch-client.d.ts +1 -0
  222. package/dist/src/cli/watch-client.js +118 -0
  223. package/dist/src/cli/watch-element.d.ts +11 -0
  224. package/dist/src/cli/watch-element.js +6 -0
  225. package/dist/src/cli/watch-model.d.ts +29 -0
  226. package/dist/src/cli/watch-model.js +278 -0
  227. package/dist/src/cli/watch-navigation.d.ts +9 -0
  228. package/dist/src/cli/watch-navigation.js +40 -0
  229. package/dist/src/cli/watch-page.d.ts +1 -0
  230. package/dist/src/cli/watch-page.js +258 -0
  231. package/dist/src/cli/watch-paths.d.ts +2 -0
  232. package/dist/src/cli/watch-paths.js +52 -0
  233. package/dist/src/cli/watch-phases.d.ts +7 -0
  234. package/dist/src/cli/watch-phases.js +148 -0
  235. package/dist/src/cli/watch-pr-board.d.ts +3 -0
  236. package/dist/src/cli/watch-pr-board.js +26 -0
  237. package/dist/src/cli/watch-pr-command.d.ts +15 -0
  238. package/dist/src/cli/watch-pr-command.js +37 -0
  239. package/dist/src/cli/watch-pr-identity.d.ts +20 -0
  240. package/dist/src/cli/watch-pr-identity.js +62 -0
  241. package/dist/src/cli/watch-pr-observer.d.ts +19 -0
  242. package/dist/src/cli/watch-pr-observer.js +108 -0
  243. package/dist/src/cli/watch-pr-settings.d.ts +8 -0
  244. package/dist/src/cli/watch-pr-settings.js +47 -0
  245. package/dist/src/cli/watch-reads.d.ts +28 -0
  246. package/dist/src/cli/watch-reads.js +248 -0
  247. package/dist/src/cli/watch-render.d.ts +153 -0
  248. package/dist/src/cli/watch-render.js +102 -0
  249. package/dist/src/cli/watch-run-input.d.ts +14 -0
  250. package/dist/src/cli/watch-run-input.js +49 -0
  251. package/dist/src/cli/watch-server.d.ts +13 -0
  252. package/dist/src/cli/watch-server.js +214 -0
  253. package/dist/src/cli/watch-start-view.d.ts +18 -0
  254. package/dist/src/cli/watch-start-view.js +77 -0
  255. package/dist/src/cli/watch-stream.d.ts +11 -0
  256. package/dist/src/cli/watch-stream.js +128 -0
  257. package/dist/src/cli/watch-turn.d.ts +30 -0
  258. package/dist/src/cli/watch-turn.js +135 -0
  259. package/dist/src/cli/watch-usage.d.ts +6 -0
  260. package/dist/src/cli/watch-usage.js +65 -0
  261. package/dist/src/cli/watch-view.d.ts +54 -0
  262. package/dist/src/cli/watch-view.js +267 -0
  263. package/dist/src/cli.d.ts +2 -0
  264. package/dist/src/cli.js +104 -0
  265. package/dist/src/daemon/analysis-launch.d.ts +5 -0
  266. package/dist/src/daemon/analysis-launch.js +81 -0
  267. package/dist/src/daemon/analysis-token.d.ts +6 -0
  268. package/dist/src/daemon/analysis-token.js +88 -0
  269. package/dist/src/daemon/analysis-worker.d.ts +22 -0
  270. package/dist/src/daemon/analysis-worker.js +219 -0
  271. package/dist/src/daemon/chats-files.d.ts +15 -0
  272. package/dist/src/daemon/chats-files.js +113 -0
  273. package/dist/src/daemon/chats-worker.d.ts +12 -0
  274. package/dist/src/daemon/chats-worker.js +200 -0
  275. package/dist/src/daemon/claude-turn.d.ts +38 -0
  276. package/dist/src/daemon/claude-turn.js +216 -0
  277. package/dist/src/daemon/claude-worker.d.ts +29 -0
  278. package/dist/src/daemon/claude-worker.js +276 -0
  279. package/dist/src/daemon/codex-stream.d.ts +4 -0
  280. package/dist/src/daemon/codex-stream.js +129 -0
  281. package/dist/src/daemon/daemon.d.ts +49 -0
  282. package/dist/src/daemon/daemon.js +195 -0
  283. package/dist/src/daemon/delivery-router.d.ts +10 -0
  284. package/dist/src/daemon/delivery-router.js +34 -0
  285. package/dist/src/daemon/github-calls.d.ts +29 -0
  286. package/dist/src/daemon/github-calls.js +127 -0
  287. package/dist/src/daemon/github-issue-methods.d.ts +3 -0
  288. package/dist/src/daemon/github-issue-methods.js +99 -0
  289. package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
  290. package/dist/src/daemon/github-issue-privacy.js +131 -0
  291. package/dist/src/daemon/github-merge.d.ts +18 -0
  292. package/dist/src/daemon/github-merge.js +259 -0
  293. package/dist/src/daemon/github-methods.d.ts +5 -0
  294. package/dist/src/daemon/github-methods.js +202 -0
  295. package/dist/src/daemon/github-operation.d.ts +38 -0
  296. package/dist/src/daemon/github-operation.js +57 -0
  297. package/dist/src/daemon/github-ticket-status.d.ts +3 -0
  298. package/dist/src/daemon/github-ticket-status.js +268 -0
  299. package/dist/src/daemon/github-worker.d.ts +17 -0
  300. package/dist/src/daemon/github-worker.js +281 -0
  301. package/dist/src/daemon/host-environment.d.ts +8 -0
  302. package/dist/src/daemon/host-environment.js +14 -0
  303. package/dist/src/daemon/issue-queue.d.ts +10 -0
  304. package/dist/src/daemon/issue-queue.js +254 -0
  305. package/dist/src/daemon/notify-message.d.ts +14 -0
  306. package/dist/src/daemon/notify-message.js +48 -0
  307. package/dist/src/daemon/notify.d.ts +12 -0
  308. package/dist/src/daemon/notify.js +161 -0
  309. package/dist/src/daemon/operation-journal.d.ts +43 -0
  310. package/dist/src/daemon/operation-journal.js +55 -0
  311. package/dist/src/daemon/retrying-turn.d.ts +9 -0
  312. package/dist/src/daemon/retrying-turn.js +185 -0
  313. package/dist/src/daemon/ticket-registration.d.ts +33 -0
  314. package/dist/src/daemon/ticket-registration.js +177 -0
  315. package/dist/src/daemon/ticket-source.d.ts +17 -0
  316. package/dist/src/daemon/ticket-source.js +36 -0
  317. package/dist/src/daemon/work-tree.d.ts +26 -0
  318. package/dist/src/daemon/work-tree.js +206 -0
  319. package/dist/src/effect-authorization.d.ts +21 -0
  320. package/dist/src/effect-authorization.js +14 -0
  321. package/dist/src/execution-pin.d.ts +4 -0
  322. package/dist/src/execution-pin.js +68 -0
  323. package/dist/src/host/start-delivery.d.ts +41 -0
  324. package/dist/src/host/start-delivery.js +68 -0
  325. package/dist/src/host/step-bridge-host.d.ts +79 -0
  326. package/dist/src/host/step-bridge-host.js +205 -0
  327. package/dist/src/host/step-claims.d.ts +31 -0
  328. package/dist/src/host/step-claims.js +85 -0
  329. package/dist/src/host/world-host.d.ts +21 -0
  330. package/dist/src/host/world-host.js +51 -0
  331. package/dist/src/host/world-reconciliation.d.ts +39 -0
  332. package/dist/src/host/world-reconciliation.js +81 -0
  333. package/dist/src/host/world-runs.d.ts +14 -0
  334. package/dist/src/host/world-runs.js +69 -0
  335. package/dist/src/operation-identity.d.ts +7 -0
  336. package/dist/src/operation-identity.js +59 -0
  337. package/dist/src/protocol.d.ts +35 -0
  338. package/dist/src/protocol.js +64 -0
  339. package/dist/src/resource-files.d.ts +1 -0
  340. package/dist/src/resource-files.js +29 -0
  341. package/dist/src/service/changes.d.ts +11 -0
  342. package/dist/src/service/changes.js +32 -0
  343. package/dist/src/service/decision-handler.d.ts +9 -0
  344. package/dist/src/service/decision-handler.js +233 -0
  345. package/dist/src/service/event-handler.d.ts +10 -0
  346. package/dist/src/service/event-handler.js +70 -0
  347. package/dist/src/service/expiry.d.ts +13 -0
  348. package/dist/src/service/expiry.js +53 -0
  349. package/dist/src/service/gateway.d.ts +21 -0
  350. package/dist/src/service/gateway.js +120 -0
  351. package/dist/src/service/registry.d.ts +40 -0
  352. package/dist/src/service/registry.js +13 -0
  353. package/dist/src/service/replies.d.ts +26 -0
  354. package/dist/src/service/replies.js +56 -0
  355. package/dist/src/service/run-handlers.d.ts +4 -0
  356. package/dist/src/service/run-handlers.js +263 -0
  357. package/dist/src/service/service.d.ts +58 -0
  358. package/dist/src/service/service.js +212 -0
  359. package/dist/src/service/submission-handler.d.ts +4 -0
  360. package/dist/src/service/submission-handler.js +206 -0
  361. package/dist/src/service/transport.d.ts +16 -0
  362. package/dist/src/service/transport.js +141 -0
  363. package/dist/src/service/worker-port.d.ts +85 -0
  364. package/dist/src/service/worker-port.js +126 -0
  365. package/dist/src/service/worker-totals.d.ts +3 -0
  366. package/dist/src/service/worker-totals.js +28 -0
  367. package/dist/src/step-bridge.d.ts +57 -0
  368. package/dist/src/step-bridge.js +4 -0
  369. package/dist/src/steps/decision-gate.d.ts +2 -0
  370. package/dist/src/steps/decision-gate.js +8 -0
  371. package/dist/src/steps/load-cycle.d.ts +10 -0
  372. package/dist/src/steps/load-cycle.js +11 -0
  373. package/dist/src/steps/protected-effect.d.ts +2 -0
  374. package/dist/src/steps/protected-effect.js +8 -0
  375. package/dist/src/storage/decision-rows.d.ts +54 -0
  376. package/dist/src/storage/decision-rows.js +72 -0
  377. package/dist/src/storage/decision-snapshots.d.ts +17 -0
  378. package/dist/src/storage/decision-snapshots.js +25 -0
  379. package/dist/src/storage/domain-changes.d.ts +48 -0
  380. package/dist/src/storage/domain-changes.js +213 -0
  381. package/dist/src/storage/domain-rows.d.ts +85 -0
  382. package/dist/src/storage/domain-rows.js +129 -0
  383. package/dist/src/storage/domain-schema.d.ts +32 -0
  384. package/dist/src/storage/domain-schema.js +193 -0
  385. package/dist/src/storage/effect-changes.d.ts +5 -0
  386. package/dist/src/storage/effect-changes.js +105 -0
  387. package/dist/src/storage/effect-rows.d.ts +67 -0
  388. package/dist/src/storage/effect-rows.js +74 -0
  389. package/dist/src/storage/effect-schema.d.ts +1 -0
  390. package/dist/src/storage/effect-schema.js +59 -0
  391. package/dist/src/storage/statements.d.ts +9 -0
  392. package/dist/src/storage/statements.js +8 -0
  393. package/dist/src/submission.d.ts +42 -0
  394. package/dist/src/submission.js +71 -0
  395. package/dist/src/ticket-status.d.ts +8 -0
  396. package/dist/src/ticket-status.js +45 -0
  397. package/dist/src/token-prices.d.ts +19 -0
  398. package/dist/src/token-prices.js +76 -0
  399. package/dist/src/turn-profile.d.ts +13 -0
  400. package/dist/src/turn-profile.js +100 -0
  401. package/dist/src/worker-usage.d.ts +22 -0
  402. package/dist/src/worker-usage.js +44 -0
  403. package/dist/src/workflow-admission.d.ts +45 -0
  404. package/dist/src/workflow-admission.js +151 -0
  405. package/dist/src/workflow-candidate.d.ts +29 -0
  406. package/dist/src/workflow-candidate.js +59 -0
  407. package/dist/src/workflow-contracts.d.ts +29 -0
  408. package/dist/src/workflow-contracts.js +110 -0
  409. package/dist/src/workflow-declaration.d.ts +11 -0
  410. package/dist/src/workflow-declaration.js +59 -0
  411. package/dist/src/workflow-resources.d.ts +8 -0
  412. package/dist/src/workflow-resources.js +14 -0
  413. package/dist/src/workflows.d.ts +6 -0
  414. package/dist/src/workflows.js +4 -0
  415. package/dist/tools/compile-workflows.d.ts +1 -0
  416. package/dist/tools/compile-workflows.js +33 -0
  417. package/dist/tools/self-host-processes.d.ts +10 -0
  418. package/dist/tools/self-host-processes.js +156 -0
  419. package/dist/tools/self-host-workflows.d.ts +15 -0
  420. package/dist/tools/self-host-workflows.js +78 -0
  421. package/dist/tools/self-host.d.ts +1 -0
  422. package/dist/tools/self-host.js +261 -0
  423. package/dist/tools/self-update-host.d.ts +13 -0
  424. package/dist/tools/self-update-host.js +88 -0
  425. package/dist/tools/self-update.d.ts +11 -0
  426. package/dist/tools/self-update.js +177 -0
  427. package/dist/tools/workflow-manifest.d.ts +3 -0
  428. package/dist/tools/workflow-manifest.js +34 -0
  429. package/dist/workflows/analyze-chats.d.ts +10 -0
  430. package/dist/workflows/analyze-chats.declaration.json +9 -0
  431. package/dist/workflows/analyze-chats.js +73 -0
  432. package/dist/workflows/develop-prd.d.ts +7 -0
  433. package/dist/workflows/develop-prd.js +97 -0
  434. package/dist/workflows/develop-ticket.d.ts +9 -0
  435. package/dist/workflows/develop-ticket.js +202 -0
  436. package/dist/workflows/issue-labels.d.ts +16 -0
  437. package/dist/workflows/issue-labels.js +70 -0
  438. package/dist/workflows/ticket-prompts.d.ts +35 -0
  439. package/dist/workflows/ticket-prompts.js +133 -0
  440. package/package.json +84 -75
  441. package/dist/abstract_gpt/index.js +0 -55
  442. package/dist/cloving_gpt/adapters/Adapter.js +0 -2
  443. package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
  444. package/dist/cloving_gpt/adapters/claude.js +0 -128
  445. package/dist/cloving_gpt/adapters/gemini.js +0 -135
  446. package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
  447. package/dist/cloving_gpt/adapters/index.js +0 -2
  448. package/dist/cloving_gpt/adapters/mistral.js +0 -128
  449. package/dist/cloving_gpt/adapters/ollama.js +0 -128
  450. package/dist/cloving_gpt/adapters/openai.js +0 -100
  451. package/dist/cloving_gpt/index.js +0 -192
  452. package/dist/commands/analyze.js +0 -47
  453. package/dist/commands/chat.js +0 -14
  454. package/dist/commands/check.js +0 -7
  455. package/dist/commands/commit.js +0 -44
  456. package/dist/commands/config.js +0 -167
  457. package/dist/commands/describe.js +0 -235
  458. package/dist/commands/generate/code.js +0 -21
  459. package/dist/commands/generate/commit.js +0 -11
  460. package/dist/commands/generate/context.js +0 -82
  461. package/dist/commands/generate/docs.js +0 -11
  462. package/dist/commands/generate/documentation.js +0 -11
  463. package/dist/commands/generate/fizzbuzz.js +0 -35
  464. package/dist/commands/generate/init.js +0 -15
  465. package/dist/commands/generate/review.js +0 -11
  466. package/dist/commands/generate/sh.js +0 -95
  467. package/dist/commands/generate/shell.js +0 -11
  468. package/dist/commands/generate/unit_tests.js +0 -11
  469. package/dist/commands/init.js +0 -13
  470. package/dist/commands/models.js +0 -22
  471. package/dist/commands/project/build.js +0 -88
  472. package/dist/commands/project/complete.js +0 -12
  473. package/dist/commands/project/init.js +0 -82
  474. package/dist/commands/project/plan.js +0 -108
  475. package/dist/commands/proxy.js +0 -11
  476. package/dist/commands/review.js +0 -50
  477. package/dist/commands/tokens.js +0 -75
  478. package/dist/commands/unit_tests.js +0 -150
  479. package/dist/commands/update.js +0 -7
  480. package/dist/file2.js +0 -4
  481. package/dist/index.js +0 -136
  482. package/dist/managers/BlockManager.js +0 -120
  483. package/dist/managers/ChatManager.js +0 -653
  484. package/dist/managers/ChunkManager.js +0 -32
  485. package/dist/managers/CodeManager.js +0 -185
  486. package/dist/managers/CommitManager.js +0 -78
  487. package/dist/managers/DocsManager.js +0 -88
  488. package/dist/managers/DocumentationManager.js +0 -114
  489. package/dist/managers/InitManager.js +0 -230
  490. package/dist/managers/ProxyManager.js +0 -210
  491. package/dist/managers/ReviewManager.js +0 -131
  492. package/dist/managers/ShellManager.js +0 -163
  493. package/dist/managers/StreamManager.js +0 -308
  494. package/dist/managers/UnitTestManager.js +0 -243
  495. package/dist/managers/src/managers/ProxyManager.js +0 -1
  496. package/dist/newfile.js +0 -2
  497. package/dist/package.json +0 -86
  498. package/dist/utils/command_utils.js +0 -384
  499. package/dist/utils/config_utils.js +0 -249
  500. package/dist/utils/gitUtils.js +0 -42
  501. package/dist/utils/git_utils.js +0 -217
  502. package/dist/utils/modelUtils.js +0 -7
  503. package/dist/utils/model_utils.js +0 -7
  504. package/dist/utils/prompt_utils.js +0 -333
  505. package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  506. package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  507. package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  508. package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  509. package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  510. package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  511. package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  512. package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
  513. package/dist/utils/prompts/index.js +0 -27
  514. package/dist/utils/string_utils.js +0 -505
  515. package/dist/utils/types.js +0 -2
@@ -0,0 +1,139 @@
1
+ import { numberFields, textFields, } from "./transitions.js";
2
+ import { commandEvents, parseCommand } from "./commands.js";
3
+ import { parseEvent } from "./events.js";
4
+ import { gateKey } from "./gates.js";
5
+ import { emptyEffects, evidenceOf, } from "./operations.js";
6
+ import { reduce } from "./reduction.js";
7
+ export const emptyAuthority = {
8
+ sequence: 0,
9
+ runs: {},
10
+ commands: {},
11
+ intents: [],
12
+ gates: {},
13
+ details: {},
14
+ questions: 0,
15
+ effects: emptyEffects,
16
+ };
17
+ export function execute(state, proposed) {
18
+ const command = parseCommand(proposed.command);
19
+ if (!command)
20
+ return { kind: "rejected", reason: "invalid-command" };
21
+ const request = canonical(command);
22
+ const existing = state.commands[command.commandId];
23
+ if (existing)
24
+ return existing.request === request
25
+ ? { kind: "duplicate", sequence: existing.sequence }
26
+ : { kind: "rejected", reason: "conflicting-command" };
27
+ if (staleRevision(state, command))
28
+ return { kind: "rejected", reason: "stale-revision" };
29
+ const event = commandEvent(command, {
30
+ sequence: state.sequence + 1,
31
+ request,
32
+ recordedAt: proposed.recordedAt,
33
+ });
34
+ const reduction = reduce(state, event);
35
+ if (reduction.kind === "invalid")
36
+ return { kind: "rejected", reason: reduction.reason };
37
+ return {
38
+ kind: "accepted",
39
+ events: [event],
40
+ state: reduction.state,
41
+ intents: reduction.intents,
42
+ ...(reduction.disposition === undefined
43
+ ? {}
44
+ : { disposition: reduction.disposition }),
45
+ };
46
+ }
47
+ export function rebuild(events) {
48
+ let state = emptyAuthority;
49
+ for (const [index, value] of events.entries())
50
+ state = applyEvent(state, { value, index }).state;
51
+ return state;
52
+ }
53
+ export function applyEvent(state, entry) {
54
+ const { value, index } = entry;
55
+ const event = parseEvent(value);
56
+ if (!event)
57
+ throw new Error(`invalid-event: ${String(index + 1)} malformed-event`);
58
+ if (!requestMatches(event))
59
+ throw new Error(`invalid-event: ${String(index + 1)} request-mismatch`);
60
+ const reduction = reduce(state, event);
61
+ if (reduction.kind === "invalid")
62
+ throw new Error(`invalid-event: ${String(event.sequence)} ${reduction.reason}`);
63
+ return {
64
+ state: reduction.state,
65
+ event,
66
+ evidence: evidenceOf(event, reduction.disposition),
67
+ };
68
+ }
69
+ function commandEvent(command, record) {
70
+ const { sequence, request, recordedAt } = record;
71
+ const payload = {};
72
+ for (const name of payloadFields) {
73
+ const value = command[name];
74
+ if (value !== undefined)
75
+ payload[name] = String(value);
76
+ }
77
+ return {
78
+ sequence,
79
+ type: commandEvents[command.kind] ?? "run.created",
80
+ runId: command.runId,
81
+ commandId: command.commandId,
82
+ recordedAt,
83
+ request,
84
+ payload,
85
+ };
86
+ }
87
+ function staleRevision(state, command) {
88
+ const run = state.runs[command.runId];
89
+ if (!run || command.expectedRevision === undefined)
90
+ return false;
91
+ const gate = command.kind === "decide-gate"
92
+ ? state.gates[gateKey(command.runId, command.gateId ?? "")]
93
+ : undefined;
94
+ if (gate === undefined || gate.kind === "untyped")
95
+ return command.expectedRevision !== run.revision;
96
+ return gate.outcome === null && command.expectedRevision !== gate.revision;
97
+ }
98
+ const payloadFields = [
99
+ ...textFields,
100
+ ...numberFields.filter((name) => name !== "expectedRevision"),
101
+ ];
102
+ function canonical(value) {
103
+ const fields = value;
104
+ return JSON.stringify(Object.fromEntries(Object.keys(fields)
105
+ .sort()
106
+ .map((key) => [key, fields[key]])));
107
+ }
108
+ export function eligibleIntents(state) {
109
+ return state.intents.filter((intent) => eligible(state, intent));
110
+ }
111
+ function eligible(state, intent) {
112
+ if (intent.kind === "protected-effect")
113
+ return (state.effects.operations[intent.operationId]?.status ===
114
+ "dispatch-pending");
115
+ return (state.runs[intent.runId]?.status ===
116
+ (intent.kind === "start-run" ? "queued" : "running"));
117
+ }
118
+ function requestMatches(event) {
119
+ let value;
120
+ try {
121
+ value = JSON.parse(event.request);
122
+ }
123
+ catch {
124
+ return false;
125
+ }
126
+ const command = parseCommand(value);
127
+ if (!command || canonical(command) !== event.request)
128
+ return false;
129
+ const expected = commandEvent(command, event);
130
+ return JSON.stringify(sorted(expected)) === JSON.stringify(sorted(event));
131
+ }
132
+ function sorted(event) {
133
+ return [
134
+ event.type,
135
+ event.runId,
136
+ event.commandId,
137
+ Object.entries(event.payload).sort(([left], [right]) => left < right ? -1 : 1),
138
+ ];
139
+ }
@@ -0,0 +1,36 @@
1
+ import { type RunDetails } from "./details.ts";
2
+ import { type GateState } from "./gates.ts";
3
+ import { type Disposition, type EffectState } from "./operations.ts";
4
+ import type { AuthorityEvent, AuthorityState, EffectIntent, RunState } from "./transitions.ts";
5
+ export interface Applied {
6
+ readonly kind: "applied";
7
+ readonly state: AuthorityState;
8
+ readonly intents: readonly EffectIntent[];
9
+ readonly disposition?: Disposition;
10
+ }
11
+ export type Reduction = Applied | {
12
+ readonly kind: "invalid";
13
+ readonly reason: string;
14
+ };
15
+ export interface Recorded {
16
+ readonly event: AuthorityEvent;
17
+ readonly commands: AuthorityState["commands"];
18
+ readonly run: RunState;
19
+ readonly details: RunDetails;
20
+ }
21
+ export interface Change extends Recorded {
22
+ readonly moved?: RunState;
23
+ readonly gates?: readonly GateState[];
24
+ readonly added?: readonly EffectIntent[];
25
+ readonly questions?: number;
26
+ readonly observed?: RunDetails;
27
+ readonly effects?: EffectState;
28
+ readonly released?: readonly string[];
29
+ readonly disposition?: Disposition;
30
+ }
31
+ export type Handler = (state: AuthorityState, recorded: Recorded) => Reduction;
32
+ export declare function invalid(reason: string): Reduction;
33
+ export declare function text(event: AuthorityEvent, name: string): string;
34
+ export declare function identity(scope: Readonly<Record<string, unknown>>): string;
35
+ export declare function retained(intents: readonly EffectIntent[], event: AuthorityEvent): readonly EffectIntent[];
36
+ export declare function applied(state: AuthorityState, change: Change): Applied;
@@ -0,0 +1,68 @@
1
+ import { operationIdentity } from "../operation-identity.js";
2
+ import { continued } from "./details.js";
3
+ import { gateKey } from "./gates.js";
4
+ import { endedRun } from "./operations.js";
5
+ export function invalid(reason) {
6
+ return { kind: "invalid", reason };
7
+ }
8
+ export function text(event, name) {
9
+ return event.payload[name] ?? "";
10
+ }
11
+ export function identity(scope) {
12
+ const result = operationIdentity(scope);
13
+ return result.kind === "valid" ? result.value : "";
14
+ }
15
+ const ended = ["run.cancelled", "run.failed", "run.completed"];
16
+ export function retained(intents, event) {
17
+ if (ended.includes(event.type))
18
+ return intents.filter((intent) => intent.runId !== event.runId);
19
+ if (event.type === "run.started")
20
+ return intents.filter((intent) => intent.runId !== event.runId || intent.kind !== "start-run");
21
+ return intents;
22
+ }
23
+ function nextEffects(state, change) {
24
+ const effects = change.effects ?? state.effects;
25
+ return ended.includes(change.event.type)
26
+ ? endedRun(effects, change.event)
27
+ : effects;
28
+ }
29
+ function nextIntents(state, change) {
30
+ const released = change.released ?? [];
31
+ return [
32
+ ...retained(state.intents, change.event).filter((intent) => !released.includes(intent.operationId)),
33
+ ...(change.added ?? []),
34
+ ];
35
+ }
36
+ function nextDetails(change) {
37
+ const details = change.observed ?? change.details;
38
+ const continuation = (change.added ?? []).some((intent) => intent.kind === "continue-run");
39
+ return continuation ? continued(details) : details;
40
+ }
41
+ export function applied(state, change) {
42
+ const { event } = change;
43
+ return {
44
+ kind: "applied",
45
+ ...(change.disposition === undefined
46
+ ? {}
47
+ : { disposition: change.disposition }),
48
+ state: {
49
+ sequence: event.sequence,
50
+ runs: change.moved
51
+ ? { ...state.runs, [event.runId]: change.moved }
52
+ : state.runs,
53
+ commands: change.commands,
54
+ effects: nextEffects(state, change),
55
+ intents: nextIntents(state, change),
56
+ gates: {
57
+ ...state.gates,
58
+ ...Object.fromEntries((change.gates ?? []).map((gate) => [
59
+ gateKey(gate.runId, gate.gateId),
60
+ gate,
61
+ ])),
62
+ },
63
+ details: { ...state.details, [event.runId]: nextDetails(change) },
64
+ questions: change.questions ?? state.questions,
65
+ },
66
+ intents: change.added ?? [],
67
+ };
68
+ }
@@ -0,0 +1,6 @@
1
+ import { type Reduction } from "./reduction-state.ts";
2
+ import { type AuthorityEvent, type AuthorityState } from "./transitions.ts";
3
+ export { gateContinuation } from "./gate-reduction.ts";
4
+ export type { Reduction } from "./reduction-state.ts";
5
+ export declare function startOperation(runId: string): string;
6
+ export declare function reduce(state: AuthorityState, event: AuthorityEvent): Reduction;
@@ -0,0 +1,160 @@
1
+ import { admittedDetails, observed } from "./details.js";
2
+ import { settled } from "./gates.js";
3
+ import { admittedBudgets } from "./budgets.js";
4
+ import { requested } from "./effect-requests.js";
5
+ import { reconciled, reported, stopReported } from "./effect-results.js";
6
+ import { decided, expired, opened, registered } from "./gate-reduction.js";
7
+ import { expired as leaseExpired, granted } from "./leases.js";
8
+ import { applied, identity, invalid, text, } from "./reduction-state.js";
9
+ import { transition, } from "./transitions.js";
10
+ export { gateContinuation } from "./gate-reduction.js";
11
+ function moved(type) {
12
+ return (state, recorded) => {
13
+ const result = transition(recorded.run, {
14
+ type,
15
+ gateId: text(recorded.event, "gateId"),
16
+ });
17
+ if (result.kind === "invalid")
18
+ return result;
19
+ return applied(state, { ...recorded, moved: result.run });
20
+ };
21
+ }
22
+ function closed(type) {
23
+ return (state, recorded) => {
24
+ const { event, run } = recorded;
25
+ const result = transition(run, { type, gateId: "" });
26
+ if (result.kind === "invalid")
27
+ return result;
28
+ const outcome = { decision: null, answer: null, sequence: event.sequence };
29
+ return applied(state, {
30
+ ...recorded,
31
+ moved: result.run,
32
+ gates: Object.values(state.gates)
33
+ .filter((gate) => gate.runId === run.runId && gate.outcome === null)
34
+ .map((gate) => settled(gate, outcome)),
35
+ });
36
+ };
37
+ }
38
+ function observation(state, recorded) {
39
+ return applied(state, {
40
+ ...recorded,
41
+ observed: observed(recorded.details, recorded.event),
42
+ effects: stopReported(state.effects, recorded.event),
43
+ });
44
+ }
45
+ function dispatched(state, recorded) {
46
+ const operationId = text(recorded.event, "operationId");
47
+ const remaining = state.intents.filter((intent) => intent.runId !== recorded.event.runId ||
48
+ intent.operationId !== operationId);
49
+ if (remaining.length === state.intents.length)
50
+ return invalid("unknown-intent");
51
+ return applied({ ...state, intents: remaining }, recorded);
52
+ }
53
+ function effect(rule) {
54
+ return (state, recorded) => {
55
+ const { event, run } = recorded;
56
+ const result = rule(state.effects, { event, runStatus: run.status });
57
+ if (result.kind === "invalid")
58
+ return result;
59
+ const present = new Set(state.intents.map((intent) => intent.operationId));
60
+ return applied(state, {
61
+ ...recorded,
62
+ effects: result.effects,
63
+ ...(result.released === undefined ? {} : { released: result.released }),
64
+ ...(result.disposition === undefined
65
+ ? {}
66
+ : { disposition: result.disposition }),
67
+ added: (result.added ?? [])
68
+ .filter((operationId) => !present.has(operationId))
69
+ .map((operationId) => ({
70
+ kind: "protected-effect",
71
+ runId: event.runId,
72
+ operationId,
73
+ })),
74
+ });
75
+ };
76
+ }
77
+ const handlers = {
78
+ "effect.requested": effect(requested),
79
+ "lease.granted": effect(granted),
80
+ "lease.expired": effect(leaseExpired),
81
+ "effect.reported": effect(reported),
82
+ "operation.reconciled": effect(reconciled),
83
+ "run.started": moved("run.started"),
84
+ "run.paused": moved("run.paused"),
85
+ "run.resumed": moved("run.resumed"),
86
+ "run.completed": moved("run.completed"),
87
+ "run.cancelled": closed("run.cancelled"),
88
+ "run.failed": closed("run.failed"),
89
+ "run.observed": observation,
90
+ "gate.opened": opened,
91
+ "gate.wait-registered": registered,
92
+ "gate.decided": decided,
93
+ "gate.expired": expired,
94
+ "step.dispatched": dispatched,
95
+ };
96
+ export function startOperation(runId) {
97
+ return identity({
98
+ run: runId,
99
+ phase: "admission",
100
+ round: 0,
101
+ operation: "start-run",
102
+ });
103
+ }
104
+ function created(state, recorded) {
105
+ const { event, commands } = recorded;
106
+ if (state.runs[event.runId])
107
+ return invalid("existing-run");
108
+ const intent = {
109
+ kind: "start-run",
110
+ runId: event.runId,
111
+ operationId: startOperation(event.runId),
112
+ };
113
+ return {
114
+ kind: "applied",
115
+ state: {
116
+ ...state,
117
+ sequence: event.sequence,
118
+ runs: {
119
+ ...state.runs,
120
+ [event.runId]: {
121
+ runId: event.runId,
122
+ status: "queued",
123
+ revision: 1,
124
+ workflow: text(event, "workflow"),
125
+ pausedFrom: null,
126
+ gates: [],
127
+ },
128
+ },
129
+ commands,
130
+ intents: [...state.intents, intent],
131
+ details: {
132
+ ...state.details,
133
+ [event.runId]: admittedDetails(event.runId, event.payload),
134
+ },
135
+ effects: {
136
+ ...state.effects,
137
+ budgets: admittedBudgets(state.effects.budgets, event),
138
+ },
139
+ },
140
+ intents: [intent],
141
+ };
142
+ }
143
+ export function reduce(state, event) {
144
+ if (event.sequence !== state.sequence + 1)
145
+ return invalid("sequence-gap");
146
+ if (state.commands[event.commandId])
147
+ return invalid("duplicate-command");
148
+ const commands = {
149
+ ...state.commands,
150
+ [event.commandId]: { request: event.request, sequence: event.sequence },
151
+ };
152
+ const handler = handlers[event.type];
153
+ if (handler === undefined)
154
+ return created(state, { event, commands });
155
+ const run = state.runs[event.runId];
156
+ const details = state.details[event.runId];
157
+ if (!run || !details)
158
+ return invalid("unknown-run");
159
+ return handler(state, { event, commands, run, details });
160
+ }
@@ -0,0 +1,4 @@
1
+ import { type Assessment, type OperationSummary, type StatusInput } from "./status-input.ts";
2
+ export declare function unresolved(operations: readonly OperationSummary[]): readonly string[];
3
+ export declare function unresolvedEffects(input: StatusInput): readonly string[];
4
+ export declare function cancelled(input: StatusInput): Assessment;
@@ -0,0 +1,57 @@
1
+ import { assessed, } from "./status-input.js";
2
+ const unknownResults = [
3
+ null,
4
+ "failed",
5
+ "stale-epoch",
6
+ ];
7
+ export function unresolved(operations) {
8
+ return operations
9
+ .filter((operation) => !operation.outcomes.includes("sent") &&
10
+ operation.outcomes.some((outcome) => unknownResults.includes(outcome)))
11
+ .map((operation) => operation.operationId);
12
+ }
13
+ function stoppedOperation(input) {
14
+ const observation = input.details?.observation ?? null;
15
+ return observation?.condition === "stopped" ? observation.operationId : null;
16
+ }
17
+ export function unresolvedEffects(input) {
18
+ if (input.closure !== null)
19
+ return input.closure.unresolved;
20
+ const stopped = stoppedOperation(input);
21
+ return unresolved(input.operations).filter((operationId) => operationId !== stopped);
22
+ }
23
+ const resolved = {
24
+ closure: "cancelled",
25
+ unresolved: [],
26
+ open: false,
27
+ };
28
+ const cancelling = (code, rest) => assessed("cancelling", { code, ...rest });
29
+ export function cancelled(input) {
30
+ const closure = input.closure ?? resolved;
31
+ if (closure.open)
32
+ return cancelling("delivery-in-flight", {
33
+ nextAction: "reconcile-effect",
34
+ humanInputCanHelp: false,
35
+ });
36
+ if (closure.closure === "stop-unconfirmed")
37
+ return cancelling("stop-unconfirmed", {
38
+ nextAction: "confirm-worker-stop",
39
+ humanInputCanHelp: true,
40
+ });
41
+ if (closure.unresolved.length > 0)
42
+ return cancelling("delivery-outcome-unknown", {
43
+ detail: "The run is dropped. A dispatch has no known result. A stop report of that operation or a later reconciliation resolves it.",
44
+ nextAction: "reconcile-effect",
45
+ humanInputCanHelp: false,
46
+ });
47
+ if (closure.closure === "stop-not-observed")
48
+ return cancelling("stop-not-observed", {
49
+ nextAction: "observe-worker-stop",
50
+ humanInputCanHelp: false,
51
+ });
52
+ return assessed("cancelled", {
53
+ code: "run-cancelled",
54
+ nextAction: null,
55
+ humanInputCanHelp: false,
56
+ });
57
+ }
@@ -0,0 +1,17 @@
1
+ import { type Assessment, type EffectSummary } from "./status-input.ts";
2
+ export interface EffectView {
3
+ readonly operationId: string;
4
+ readonly state: string;
5
+ readonly reason: string | null;
6
+ readonly leaseGeneration: number | null;
7
+ readonly attempts: number;
8
+ readonly limit: number;
9
+ }
10
+ export interface Recovery {
11
+ readonly attempts: number;
12
+ readonly limit: number | null;
13
+ }
14
+ export declare function uncertainEffect(effects: readonly EffectSummary[]): Assessment | undefined;
15
+ export declare function effectViews(effects: readonly EffectSummary[]): readonly EffectView[];
16
+ export declare function effectRecovery(effects: readonly EffectSummary[]): Recovery | undefined;
17
+ export declare function effectEvidence(sequences: readonly number[]): readonly string[];
@@ -0,0 +1,43 @@
1
+ import { assessed, } from "./status-input.js";
2
+ const blocked = assessed("uncertain-effect", {
3
+ code: "effect-blocked",
4
+ nextAction: "inspect-effect",
5
+ humanInputCanHelp: true,
6
+ });
7
+ const recovering = assessed("uncertain-effect", {
8
+ code: "effect-recovering",
9
+ nextAction: "reconcile-effect",
10
+ humanInputCanHelp: false,
11
+ });
12
+ export function uncertainEffect(effects) {
13
+ const statuses = effects.map((effect) => effect.status);
14
+ if (statuses.includes("blocked"))
15
+ return blocked;
16
+ return statuses.includes("recovering") ? recovering : undefined;
17
+ }
18
+ function shownReason(effect) {
19
+ const ready = effect.status === "waiting" && effect.reason === "ready";
20
+ return ready ? "capacity" : effect.reason;
21
+ }
22
+ export function effectViews(effects) {
23
+ return effects.map((effect) => ({
24
+ operationId: effect.operationId,
25
+ state: effect.status,
26
+ reason: shownReason(effect),
27
+ leaseGeneration: effect.leaseGeneration,
28
+ attempts: effect.attempts,
29
+ limit: effect.limit,
30
+ }));
31
+ }
32
+ const uncertainStatuses = ["recovering", "blocked"];
33
+ export function effectRecovery(effects) {
34
+ const [largest] = effects
35
+ .filter((effect) => uncertainStatuses.includes(effect.status))
36
+ .sort((left, right) => right.attempts - left.attempts);
37
+ if (largest === undefined)
38
+ return undefined;
39
+ return { attempts: largest.attempts, limit: largest.limit };
40
+ }
41
+ export function effectEvidence(sequences) {
42
+ return sequences.map((sequence) => `event:${String(sequence)}`);
43
+ }
@@ -0,0 +1,45 @@
1
+ import type { RunDetails } from "./details.ts";
2
+ import type { GateState } from "./gates.ts";
3
+ import type { RunClosure } from "./stop-sequence.ts";
4
+ import type { RunState } from "./transitions.ts";
5
+ export interface OperationSummary {
6
+ readonly operationId: string;
7
+ readonly kind: "start-run" | "continue-run" | "protected-effect";
8
+ readonly releasedSequence: number | null;
9
+ readonly outcomes: readonly (string | null)[];
10
+ }
11
+ export interface EffectSummary {
12
+ readonly operationId: string;
13
+ readonly status: string;
14
+ readonly reason: string | null;
15
+ readonly leaseGeneration: number | null;
16
+ readonly attempts: number;
17
+ readonly limit: number;
18
+ }
19
+ export interface BudgetSummary {
20
+ readonly limit: number;
21
+ readonly spent: number;
22
+ }
23
+ export interface StatusInput {
24
+ readonly run: RunState;
25
+ readonly details: RunDetails | undefined;
26
+ readonly gates: readonly GateState[];
27
+ readonly operations: readonly OperationSummary[];
28
+ readonly latestSequence: number;
29
+ readonly silent: boolean;
30
+ readonly closure: RunClosure | null;
31
+ readonly effects: readonly EffectSummary[];
32
+ readonly budget: BudgetSummary | null;
33
+ readonly effectEvidence: readonly number[];
34
+ }
35
+ export interface Assessment {
36
+ readonly condition: string;
37
+ readonly code: string;
38
+ readonly nextAction: string | null;
39
+ readonly nextActionAt?: string | null;
40
+ readonly detail?: string;
41
+ readonly humanInputCanHelp: boolean;
42
+ }
43
+ export declare function last(operation: OperationSummary): string | null | undefined;
44
+ export declare function inFlight(operations: readonly OperationSummary[]): boolean;
45
+ export declare function assessed(condition: string, rest: Omit<Assessment, "condition">): Assessment;
@@ -0,0 +1,9 @@
1
+ export function last(operation) {
2
+ return operation.outcomes.at(-1);
3
+ }
4
+ export function inFlight(operations) {
5
+ return operations.some((operation) => last(operation) === null);
6
+ }
7
+ export function assessed(condition, rest) {
8
+ return { condition, ...rest };
9
+ }
@@ -0,0 +1,32 @@
1
+ import { type EffectView, type Recovery } from "./status-effects.ts";
2
+ import { type BudgetSummary, type StatusInput } from "./status-input.ts";
3
+ import type { RunStatus } from "./transitions.ts";
4
+ export { unresolved, unresolvedEffects } from "./status-closure.ts";
5
+ export type { EffectView } from "./status-effects.ts";
6
+ export type { Assessment, BudgetSummary, EffectSummary, OperationSummary, StatusInput, } from "./status-input.ts";
7
+ export interface RunView {
8
+ readonly runId: string;
9
+ readonly workflow: string;
10
+ readonly state: RunStatus;
11
+ readonly condition: string;
12
+ readonly revision: number;
13
+ readonly latestSequence: number;
14
+ readonly pendingDecisions: readonly string[];
15
+ readonly reason: {
16
+ readonly code: string;
17
+ readonly detail: string;
18
+ };
19
+ readonly evidence: readonly string[];
20
+ readonly lastConfirmedObservation: {
21
+ readonly at: string;
22
+ readonly sequence: number;
23
+ readonly source: string;
24
+ } | null;
25
+ readonly recovery: Recovery;
26
+ readonly budget: BudgetSummary | null;
27
+ readonly effects: readonly EffectView[];
28
+ readonly nextAction: string | null;
29
+ readonly nextActionAt: string | null;
30
+ readonly humanInputCanHelp: boolean;
31
+ }
32
+ export declare function runView(input: StatusInput): RunView;