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,236 @@
1
+ import { current, ownedLease } from "./leases.js";
2
+ import { cancelledOperation, count, field, isFinal, isHolding, namesRunIntent, rejected, withOperation, } from "./operations.js";
3
+ const terminalStatuses = ["completed", "failed", "cancelled"];
4
+ function disposition(operation, reason) {
5
+ return {
6
+ operationId: operation.operationId,
7
+ disposition: reason === null ? "applied" : "rejected",
8
+ reason,
9
+ };
10
+ }
11
+ function released(effects, operation) {
12
+ const lease = ownedLease(effects, operation);
13
+ return {
14
+ ...effects,
15
+ leases: lease === undefined
16
+ ? effects.leases
17
+ : {
18
+ ...effects.leases,
19
+ [lease.resourceKey]: { ...lease, state: "released" },
20
+ },
21
+ holding: effects.holding - (isHolding(operation) ? 1 : 0),
22
+ };
23
+ }
24
+ function settled(effects, settlement) {
25
+ const { operation, event, status } = settlement;
26
+ return {
27
+ kind: "changed",
28
+ effects: withOperation(released(effects, operation), {
29
+ ...operation,
30
+ status,
31
+ receipt: operation.receipt ?? event.payload["receipt"] ?? null,
32
+ worker: operation.worker ?? event.payload["worker"] ?? null,
33
+ reason: event.payload["reason"] ?? null,
34
+ result: event.payload["result"] ?? null,
35
+ waitSequence: null,
36
+ settledSequence: event.sequence,
37
+ }),
38
+ released: [operation.operationId],
39
+ disposition: disposition(operation, null),
40
+ };
41
+ }
42
+ function reportRefusal(effects, subject) {
43
+ const { operation, event } = subject;
44
+ if (operation.inputDigest !== field(event, "inputDigest"))
45
+ return "input-mismatch";
46
+ if (isFinal(operation))
47
+ return "operation-settled";
48
+ const lease = ownedLease(effects, operation);
49
+ if (lease?.generation !== count(event, "leaseGeneration"))
50
+ return "retired-lease-generation";
51
+ if (!current(lease, event))
52
+ return "lease-expired";
53
+ if (operation.worker === null)
54
+ return "acceptance-not-recorded";
55
+ if (operation.worker !== field(event, "worker"))
56
+ return "worker-mismatch";
57
+ return undefined;
58
+ }
59
+ const reportedStatuses = {
60
+ completed: "completed",
61
+ failed: "failed",
62
+ stopped: "stopped",
63
+ };
64
+ export function reported(effects, context) {
65
+ const { event } = context;
66
+ const operation = effects.operations[field(event, "operationId")];
67
+ if (operation?.runId !== event.runId)
68
+ return rejected("unknown-operation");
69
+ const refusal = reportRefusal(effects, { ...context, operation });
70
+ if (refusal !== undefined)
71
+ return {
72
+ kind: "changed",
73
+ effects,
74
+ disposition: disposition(operation, refusal),
75
+ };
76
+ return settled(effects, {
77
+ ...context,
78
+ operation,
79
+ status: reportedStatuses[field(event, "outcome")] ?? "failed",
80
+ });
81
+ }
82
+ function formRefusal(subject) {
83
+ const { operation, event } = subject;
84
+ const outcome = field(event, "outcome");
85
+ if (outcome === "not-started" && operation.receipt !== null)
86
+ return "acceptance-recorded";
87
+ const identified = event.payload["receipt"] !== undefined &&
88
+ event.payload["worker"] !== undefined;
89
+ return outcome === "accepted" && !identified ? "invalid-outcome" : undefined;
90
+ }
91
+ function outcomeRefusal(effects, subject) {
92
+ const { operation, event } = subject;
93
+ if (isFinal(operation))
94
+ return "operation-settled";
95
+ if (ownedLease(effects, operation)?.generation !==
96
+ count(event, "leaseGeneration"))
97
+ return "retired-lease-generation";
98
+ const worker = event.payload["worker"];
99
+ const bound = operation.worker ?? worker;
100
+ if (worker !== undefined && worker !== bound)
101
+ return "worker-mismatch";
102
+ return formRefusal(subject);
103
+ }
104
+ function counted(operation) {
105
+ const attempts = operation.attempts + 1;
106
+ if (attempts < operation.recoveryLimit)
107
+ return { ...operation, attempts };
108
+ return {
109
+ ...operation,
110
+ attempts,
111
+ status: "blocked",
112
+ reason: "outcome-unknown",
113
+ };
114
+ }
115
+ function accepted(effects, subject) {
116
+ const { operation, event } = subject;
117
+ const lease = ownedLease(effects, operation);
118
+ const live = lease !== undefined && current(lease, event);
119
+ return {
120
+ kind: "changed",
121
+ effects: withOperation(effects, {
122
+ ...operation,
123
+ receipt: operation.receipt ?? field(event, "receipt"),
124
+ worker: operation.worker ?? field(event, "worker"),
125
+ status: live ? "running" : "recovering",
126
+ reason: live ? null : "lease-expired",
127
+ }),
128
+ released: [operation.operationId],
129
+ disposition: disposition(operation, null),
130
+ };
131
+ }
132
+ function statedReason(event) {
133
+ const stated = field(event, "reason");
134
+ return stated === "" ? "not-started" : stated;
135
+ }
136
+ function notStarted(effects, subject) {
137
+ const { operation, event, runStatus } = subject;
138
+ const exhausted = (effects.budgets[operation.runId]?.exhaustedSequence ?? null) !== null ||
139
+ field(event, "reason") === "budget-exhausted";
140
+ const ended = terminalStatuses.includes(runStatus);
141
+ const waiting = {
142
+ ...operation,
143
+ status: "waiting",
144
+ reason: runStatus === "running" ? "ready" : "run-not-running",
145
+ waitSequence: event.sequence,
146
+ };
147
+ const cancelled = cancelledOperation(operation, {
148
+ reason: exhausted ? "budget-exhausted" : statedReason(event),
149
+ sequence: event.sequence,
150
+ });
151
+ const final = ended || exhausted;
152
+ return {
153
+ kind: "changed",
154
+ effects: withOperation(released(effects, operation), final ? cancelled : waiting),
155
+ ...(final ? { released: [operation.operationId] } : {}),
156
+ disposition: disposition(operation, null),
157
+ };
158
+ }
159
+ function unknown(effects, subject) {
160
+ const { operation } = subject;
161
+ const attempted = counted(operation);
162
+ return {
163
+ kind: "changed",
164
+ effects: withOperation(effects, {
165
+ ...attempted,
166
+ status: attempted.status === "blocked" ? "blocked" : "recovering",
167
+ reason: "outcome-unknown",
168
+ }),
169
+ disposition: disposition(operation, null),
170
+ };
171
+ }
172
+ function final(status) {
173
+ return (effects, subject) => settled(effects, { ...subject, status });
174
+ }
175
+ const outcomes = {
176
+ accepted,
177
+ "not-started": notStarted,
178
+ unknown,
179
+ completed: final("completed"),
180
+ failed: final("failed"),
181
+ stopped: final("stopped"),
182
+ };
183
+ function stoppedIntent(effects, event) {
184
+ const operationId = field(event, "operationId");
185
+ const known = field(event, "outcome") === "stopped" &&
186
+ namesRunIntent(operationId, event.runId);
187
+ if (!known)
188
+ return rejected("unknown-operation");
189
+ return {
190
+ kind: "changed",
191
+ effects: {
192
+ ...effects,
193
+ stops: {
194
+ ...effects.stops,
195
+ [operationId]: { runId: event.runId, sequence: event.sequence },
196
+ },
197
+ },
198
+ disposition: { operationId, disposition: "applied", reason: null },
199
+ };
200
+ }
201
+ export function stopReported(effects, event) {
202
+ const operationId = event.payload["operationId"];
203
+ const named = field(event, "condition") === "stopped" &&
204
+ operationId !== undefined &&
205
+ namesRunIntent(operationId, event.runId);
206
+ if (!named)
207
+ return effects;
208
+ return {
209
+ ...effects,
210
+ stops: {
211
+ ...effects.stops,
212
+ [operationId]: { runId: event.runId, sequence: event.sequence },
213
+ },
214
+ };
215
+ }
216
+ export function reconciled(effects, context) {
217
+ const { event } = context;
218
+ const operation = effects.operations[field(event, "operationId")];
219
+ if (operation === undefined)
220
+ return stoppedIntent(effects, event);
221
+ if (operation.runId !== event.runId)
222
+ return rejected("unknown-operation");
223
+ const subject = { ...context, operation };
224
+ const refusal = outcomeRefusal(effects, subject);
225
+ const apply = outcomes[field(event, "outcome")];
226
+ if (refusal === undefined && apply !== undefined)
227
+ return apply(effects, subject);
228
+ const reason = refusal ?? "invalid-outcome";
229
+ return {
230
+ kind: "changed",
231
+ effects: isHolding(operation)
232
+ ? withOperation(effects, counted(operation))
233
+ : effects,
234
+ disposition: disposition(operation, reason),
235
+ };
236
+ }
@@ -0,0 +1,2 @@
1
+ import { type AuthorityEvent } from "./transitions.ts";
2
+ export declare function parseEvent(value: unknown): AuthorityEvent | null;
@@ -0,0 +1,45 @@
1
+ import { isRecordKey } from "./commands.js";
2
+ import { eventTypes } from "./transitions.js";
3
+ export function parseEvent(value) {
4
+ const fields = record(value);
5
+ if (!fields)
6
+ return null;
7
+ const { sequence, type, runId, commandId, recordedAt, request } = fields;
8
+ const payload = textRecord(fields["payload"]);
9
+ const eventType = eventTypes.find((item) => item === type);
10
+ if (typeof sequence !== "number" ||
11
+ !Number.isSafeInteger(sequence) ||
12
+ eventType === undefined ||
13
+ !isRecordKey(runId) ||
14
+ !isRecordKey(commandId) ||
15
+ typeof recordedAt !== "string" ||
16
+ typeof request !== "string" ||
17
+ !payload)
18
+ return null;
19
+ return {
20
+ sequence,
21
+ type: eventType,
22
+ runId,
23
+ commandId,
24
+ recordedAt,
25
+ request,
26
+ payload,
27
+ };
28
+ }
29
+ function textRecord(value) {
30
+ const fields = record(value);
31
+ if (!fields)
32
+ return null;
33
+ const entries = [];
34
+ for (const [key, item] of Object.entries(fields)) {
35
+ if (typeof item !== "string")
36
+ return null;
37
+ entries.push([key, item]);
38
+ }
39
+ return Object.fromEntries(entries);
40
+ }
41
+ function record(value) {
42
+ if (!value || typeof value !== "object" || Array.isArray(value))
43
+ return null;
44
+ return Object.fromEntries(Object.entries(value));
45
+ }
@@ -0,0 +1,8 @@
1
+ import { type SettledGate } from "./gates.ts";
2
+ import { type Recorded, type Reduction } from "./reduction-state.ts";
3
+ import { type AuthorityState, type EffectIntent } from "./transitions.ts";
4
+ export declare function gateContinuation(gate: SettledGate): EffectIntent;
5
+ export declare function opened(state: AuthorityState, recorded: Recorded): Reduction;
6
+ export declare function decided(state: AuthorityState, recorded: Recorded): Reduction;
7
+ export declare function expired(state: AuthorityState, recorded: Recorded): Reduction;
8
+ export declare function registered(state: AuthorityState, recorded: Recorded): Reduction;
@@ -0,0 +1,109 @@
1
+ import { continues, decisionRefusal, expiryRefusal, gateKey, openedGate, reusable, settled, } from "./gates.js";
2
+ import { applied, identity, invalid, text, } from "./reduction-state.js";
3
+ import { terminal, transition, } from "./transitions.js";
4
+ export function gateContinuation(gate) {
5
+ return {
6
+ kind: "continue-run",
7
+ runId: gate.runId,
8
+ operationId: identity({
9
+ run: gate.runId,
10
+ phase: "gate",
11
+ round: gate.outcome.sequence,
12
+ operation: "continue-run",
13
+ key: gate.gateId,
14
+ }),
15
+ };
16
+ }
17
+ function continuations(gate) {
18
+ return continues(gate) ? [gateContinuation(gate)] : [];
19
+ }
20
+ export function opened(state, recorded) {
21
+ const { event, run } = recorded;
22
+ const result = transition(run, {
23
+ type: "gate.opened",
24
+ gateId: text(event, "gateId"),
25
+ });
26
+ if (result.kind === "invalid")
27
+ return result;
28
+ const question = event.payload["gateKind"] === "question";
29
+ const questions = state.questions + (question ? 1 : 0);
30
+ const gate = openedGate({
31
+ runId: event.runId,
32
+ sequence: event.sequence,
33
+ payload: event.payload,
34
+ generation: recorded.details.generation,
35
+ label: question ? questions : null,
36
+ });
37
+ if (!reusable(gateOf(state, event), gate))
38
+ return invalid("existing-gate");
39
+ return applied(state, {
40
+ ...recorded,
41
+ moved: result.run,
42
+ questions,
43
+ gates: [gate],
44
+ });
45
+ }
46
+ function concluded(state, conclusion) {
47
+ const { run, gate, outcome } = conclusion;
48
+ const result = transition(run, { type: "gate.decided", gateId: gate.gateId });
49
+ if (result.kind === "invalid")
50
+ return result;
51
+ const next = settled(gate, outcome);
52
+ return applied(state, {
53
+ ...conclusion,
54
+ moved: result.run,
55
+ gates: [next],
56
+ added: continuations(next),
57
+ });
58
+ }
59
+ function gateOf(state, event) {
60
+ return state.gates[gateKey(event.runId, text(event, "gateId"))];
61
+ }
62
+ export function decided(state, recorded) {
63
+ const { event } = recorded;
64
+ const gate = gateOf(state, event);
65
+ if (gate === undefined)
66
+ return invalid("unknown-gate");
67
+ const refusal = decisionRefusal(gate, event);
68
+ if (refusal !== undefined)
69
+ return invalid(refusal);
70
+ return concluded(state, {
71
+ ...recorded,
72
+ gate,
73
+ outcome: {
74
+ decision: text(event, "decision"),
75
+ answer: event.payload["answer"] ?? null,
76
+ sequence: event.sequence,
77
+ },
78
+ });
79
+ }
80
+ export function expired(state, recorded) {
81
+ const { event } = recorded;
82
+ const gate = gateOf(state, event);
83
+ if (gate === undefined)
84
+ return invalid("unknown-gate");
85
+ const refusal = expiryRefusal(gate, event.recordedAt);
86
+ if (refusal !== undefined)
87
+ return invalid(refusal);
88
+ return concluded(state, {
89
+ ...recorded,
90
+ gate,
91
+ outcome: { decision: "expired", answer: null, sequence: event.sequence },
92
+ });
93
+ }
94
+ export function registered(state, recorded) {
95
+ const { event, run } = recorded;
96
+ if (terminal.includes(run.status))
97
+ return invalid("terminal-run");
98
+ const gate = gateOf(state, event);
99
+ if (gate === undefined)
100
+ return invalid("unknown-gate");
101
+ if (gate.wait === "registered")
102
+ return invalid("wait-already-registered");
103
+ const next = { ...gate, wait: "registered" };
104
+ return applied(state, {
105
+ ...recorded,
106
+ gates: [next],
107
+ added: continuations(next),
108
+ });
109
+ }
@@ -0,0 +1,48 @@
1
+ export type GateKind = "question" | "approval" | "untyped";
2
+ export interface GateOutcome {
3
+ readonly decision: string | null;
4
+ readonly answer: string | null;
5
+ readonly sequence: number;
6
+ }
7
+ export interface GateState {
8
+ readonly runId: string;
9
+ readonly gateId: string;
10
+ readonly kind: GateKind;
11
+ readonly label: number | null;
12
+ readonly subject: string | null;
13
+ readonly prompt: string | null;
14
+ readonly expiresAt: string | null;
15
+ readonly generation: number;
16
+ readonly revision: number;
17
+ readonly wait: "registered" | "pending";
18
+ readonly outcome: GateOutcome | null;
19
+ readonly openedSequence: number;
20
+ }
21
+ type Payload = Readonly<Record<string, string>>;
22
+ export declare function allowedDecisions(kind: GateKind): readonly string[] | null;
23
+ export declare function reusable(existing: GateState | undefined, next: GateState): boolean;
24
+ export declare function gateKey(runId: string, gateId: string): string;
25
+ export declare function openedGate(opening: {
26
+ readonly runId: string;
27
+ readonly sequence: number;
28
+ readonly payload: Payload;
29
+ readonly generation: number;
30
+ readonly label: number | null;
31
+ }): GateState;
32
+ export declare function decisionRefusal(gate: GateState, decision: {
33
+ readonly payload: Payload;
34
+ readonly recordedAt: string;
35
+ }): string | undefined;
36
+ export declare function expiryRefusal(gate: GateState, recordedAt: string): string | undefined;
37
+ export declare function settled(gate: GateState, outcome: GateOutcome): GateState;
38
+ export type SettledGate = GateState & {
39
+ readonly outcome: GateOutcome;
40
+ };
41
+ export declare function isSettled(gate: GateState): gate is SettledGate;
42
+ export type ContinuingGate = GateState & {
43
+ readonly outcome: GateOutcome & {
44
+ readonly decision: string;
45
+ };
46
+ };
47
+ export declare function continues(gate: GateState): gate is ContinuingGate;
48
+ export {};
@@ -0,0 +1,77 @@
1
+ import { notBefore } from "./instants.js";
2
+ const allowed = {
3
+ question: ["answered"],
4
+ approval: ["approved", "denied"],
5
+ untyped: null,
6
+ };
7
+ const kinds = {
8
+ question: "question",
9
+ approval: "approval",
10
+ };
11
+ export function allowedDecisions(kind) {
12
+ return allowed[kind];
13
+ }
14
+ export function reusable(existing, next) {
15
+ if (existing === undefined)
16
+ return true;
17
+ return existing.kind === "untyped" && next.kind === "untyped";
18
+ }
19
+ export function gateKey(runId, gateId) {
20
+ return `${runId} ${gateId}`;
21
+ }
22
+ export function openedGate(opening) {
23
+ const { payload } = opening;
24
+ const kind = kinds[payload["gateKind"] ?? ""] ?? "untyped";
25
+ return {
26
+ runId: opening.runId,
27
+ gateId: payload["gateId"] ?? "",
28
+ kind,
29
+ label: opening.label,
30
+ subject: payload["subject"] ?? null,
31
+ prompt: payload["prompt"] ?? null,
32
+ expiresAt: payload["expiresAt"] ?? null,
33
+ generation: opening.generation,
34
+ revision: 1,
35
+ wait: kind === "untyped" ? "registered" : "pending",
36
+ outcome: null,
37
+ openedSequence: opening.sequence,
38
+ };
39
+ }
40
+ function untypedRefusal(payload) {
41
+ const bound = payload["generation"] !== undefined || payload["subject"] !== undefined;
42
+ return bound ? "decision-not-allowed" : undefined;
43
+ }
44
+ export function decisionRefusal(gate, decision) {
45
+ const { payload, recordedAt } = decision;
46
+ if (gate.kind === "untyped")
47
+ return untypedRefusal(payload);
48
+ if (gate.outcome !== null)
49
+ return "decision-not-pending";
50
+ if (payload["generation"] !== String(gate.generation))
51
+ return "stale-generation";
52
+ if (payload["subject"] !== gate.subject)
53
+ return "subject-mismatch";
54
+ if (!allowed[gate.kind]?.includes(payload["decision"] ?? ""))
55
+ return "decision-not-allowed";
56
+ if (gate.expiresAt !== null && notBefore(recordedAt, gate.expiresAt))
57
+ return "decision-expired";
58
+ return undefined;
59
+ }
60
+ export function expiryRefusal(gate, recordedAt) {
61
+ if (gate.outcome !== null)
62
+ return "decision-not-pending";
63
+ if (gate.expiresAt === null || !notBefore(recordedAt, gate.expiresAt))
64
+ return "not-expired";
65
+ return undefined;
66
+ }
67
+ export function settled(gate, outcome) {
68
+ return { ...gate, outcome, revision: gate.revision + 1 };
69
+ }
70
+ export function isSettled(gate) {
71
+ return gate.outcome !== null;
72
+ }
73
+ export function continues(gate) {
74
+ return (gate.wait === "registered" &&
75
+ isSettled(gate) &&
76
+ gate.outcome.decision !== null);
77
+ }
@@ -0,0 +1,15 @@
1
+ import type { AuthorityState } from "./transitions.ts";
2
+ export declare class HistoryState {
3
+ private state;
4
+ private readonly runs;
5
+ private readonly commands;
6
+ private readonly details;
7
+ private readonly gates;
8
+ private readonly budgets;
9
+ private readonly runGates;
10
+ private readonly intents;
11
+ private readonly pending;
12
+ scope(value: unknown): AuthorityState;
13
+ record(state: AuthorityState, runId: string): void;
14
+ finish(): AuthorityState;
15
+ }
@@ -0,0 +1,61 @@
1
+ import { parseEvent } from "./events.js";
2
+ import { emptyAuthority } from "./reducer.js";
3
+ function entry(values, key) {
4
+ const value = values[key];
5
+ return value === undefined ? {} : { [key]: value };
6
+ }
7
+ export class HistoryState {
8
+ state = emptyAuthority;
9
+ runs = {};
10
+ commands = {};
11
+ details = {};
12
+ gates = {};
13
+ budgets = {};
14
+ runGates = new Map();
15
+ intents = new Map();
16
+ pending = new Set();
17
+ scope(value) {
18
+ const event = parseEvent(value);
19
+ if (event === null)
20
+ return this.state;
21
+ return {
22
+ ...this.state,
23
+ runs: entry(this.runs, event.runId),
24
+ commands: entry(this.commands, event.commandId),
25
+ details: entry(this.details, event.runId),
26
+ gates: this.runGates.get(event.runId) ?? {},
27
+ effects: {
28
+ ...this.state.effects,
29
+ budgets: entry(this.budgets, event.runId),
30
+ },
31
+ intents: this.intents.get(event.runId) ?? [],
32
+ };
33
+ }
34
+ record(state, runId) {
35
+ Object.assign(this.runs, state.runs);
36
+ Object.assign(this.commands, state.commands);
37
+ Object.assign(this.details, state.details);
38
+ Object.assign(this.gates, state.gates);
39
+ Object.assign(this.budgets, state.effects.budgets);
40
+ this.runGates.set(runId, state.gates);
41
+ const remaining = new Set(state.intents);
42
+ for (const intent of this.intents.get(runId) ?? [])
43
+ if (!remaining.has(intent))
44
+ this.pending.delete(intent);
45
+ for (const intent of remaining)
46
+ this.pending.add(intent);
47
+ this.intents.set(runId, state.intents);
48
+ this.state = state;
49
+ }
50
+ finish() {
51
+ return {
52
+ ...this.state,
53
+ runs: this.runs,
54
+ commands: this.commands,
55
+ details: this.details,
56
+ gates: this.gates,
57
+ effects: { ...this.state.effects, budgets: this.budgets },
58
+ intents: [...this.pending],
59
+ };
60
+ }
61
+ }
@@ -0,0 +1,13 @@
1
+ import type { Evidence } from "./operations.ts";
2
+ import { type AuthorityState, type EffectIntent } from "./reducer.ts";
3
+ export interface OutboxEntry extends EffectIntent {
4
+ readonly createdSequence: number;
5
+ readonly releasedSequence: number | null;
6
+ }
7
+ export interface History {
8
+ readonly state: AuthorityState;
9
+ readonly outbox: readonly OutboxEntry[];
10
+ readonly runSequences: Readonly<Record<string, number>>;
11
+ readonly evidence: readonly Evidence[];
12
+ }
13
+ export declare function rebuildHistory(events: readonly unknown[]): History;
@@ -0,0 +1,37 @@
1
+ import { HistoryState } from "./history-state.js";
2
+ import { applyEvent, } from "./reducer.js";
3
+ export function rebuildHistory(events) {
4
+ const replay = new HistoryState();
5
+ const created = [];
6
+ const released = new Map();
7
+ const runSequences = {};
8
+ const evidence = [];
9
+ for (const [index, value] of events.entries()) {
10
+ const state = replay.scope(value);
11
+ const applied = applyEvent(state, { value, index });
12
+ const before = new Set(state.intents.map((intent) => intent.operationId));
13
+ const after = new Set(applied.state.intents.map((intent) => intent.operationId));
14
+ for (const intent of applied.state.intents)
15
+ if (!before.has(intent.operationId))
16
+ created.push({
17
+ ...intent,
18
+ createdSequence: applied.event.sequence,
19
+ releasedSequence: null,
20
+ });
21
+ for (const operationId of before)
22
+ if (!after.has(operationId))
23
+ released.set(operationId, applied.event.sequence);
24
+ runSequences[applied.event.runId] = applied.event.sequence;
25
+ evidence.push(...applied.evidence);
26
+ replay.record(applied.state, applied.event.runId);
27
+ }
28
+ return {
29
+ state: replay.finish(),
30
+ outbox: created.map((entry) => ({
31
+ ...entry,
32
+ releasedSequence: released.get(entry.operationId) ?? null,
33
+ })),
34
+ runSequences,
35
+ evidence,
36
+ };
37
+ }
@@ -0,0 +1,3 @@
1
+ export declare function isInstant(value: unknown): value is string;
2
+ export declare function notBefore(value: string, bound: string): boolean;
3
+ export declare function isAfter(value: string, bound: string): boolean;