cloving 0.3.19 → 1.0.1

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 (507) hide show
  1. package/{LICENSE.md → LICENSE} +1 -1
  2. package/README.md +475 -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 +263 -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 +27 -0
  32. package/dist/src/authority/reconciliation.js +147 -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 +122 -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 +65 -0
  78. package/dist/src/broker/actor/authority-session.js +252 -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/destination.d.ts +4 -0
  138. package/dist/src/chats/destination.js +94 -0
  139. package/dist/src/chats/import.d.ts +13 -0
  140. package/dist/src/chats/import.js +71 -0
  141. package/dist/src/chats/normalize.d.ts +20 -0
  142. package/dist/src/chats/normalize.js +139 -0
  143. package/dist/src/chats/reader.d.ts +15 -0
  144. package/dist/src/chats/reader.js +87 -0
  145. package/dist/src/cli/arguments.d.ts +23 -0
  146. package/dist/src/cli/arguments.js +154 -0
  147. package/dist/src/cli/client.d.ts +15 -0
  148. package/dist/src/cli/client.js +122 -0
  149. package/dist/src/cli/commands.d.ts +14 -0
  150. package/dist/src/cli/commands.js +253 -0
  151. package/dist/src/cli/main.d.ts +1 -0
  152. package/dist/src/cli/main.js +80 -0
  153. package/dist/src/cli/render.d.ts +8 -0
  154. package/dist/src/cli/render.js +186 -0
  155. package/dist/src/cli/runtime-arguments.d.ts +73 -0
  156. package/dist/src/cli/runtime-arguments.js +248 -0
  157. package/dist/src/cli/runtime-directory.d.ts +4 -0
  158. package/dist/src/cli/runtime-directory.js +25 -0
  159. package/dist/src/cli/toolchain.d.ts +3 -0
  160. package/dist/src/cli/toolchain.js +74 -0
  161. package/dist/src/cli/usage.d.ts +4 -0
  162. package/dist/src/cli/usage.js +124 -0
  163. package/dist/src/cli/validate.d.ts +38 -0
  164. package/dist/src/cli/validate.js +116 -0
  165. package/dist/src/cli/watch-board-view.d.ts +22 -0
  166. package/dist/src/cli/watch-board-view.js +128 -0
  167. package/dist/src/cli/watch-board.d.ts +15 -0
  168. package/dist/src/cli/watch-board.js +174 -0
  169. package/dist/src/cli/watch-element.d.ts +11 -0
  170. package/dist/src/cli/watch-element.js +6 -0
  171. package/dist/src/cli/watch-model.d.ts +29 -0
  172. package/dist/src/cli/watch-model.js +261 -0
  173. package/dist/src/cli/watch-navigation.d.ts +9 -0
  174. package/dist/src/cli/watch-navigation.js +40 -0
  175. package/dist/src/cli/watch-page.d.ts +1 -0
  176. package/dist/src/cli/watch-page.js +272 -0
  177. package/dist/src/cli/watch-paths.d.ts +2 -0
  178. package/dist/src/cli/watch-paths.js +52 -0
  179. package/dist/src/cli/watch-phases.d.ts +7 -0
  180. package/dist/src/cli/watch-phases.js +148 -0
  181. package/dist/src/cli/watch-reads.d.ts +28 -0
  182. package/dist/src/cli/watch-reads.js +244 -0
  183. package/dist/src/cli/watch-render.d.ts +139 -0
  184. package/dist/src/cli/watch-render.js +95 -0
  185. package/dist/src/cli/watch-server.d.ts +10 -0
  186. package/dist/src/cli/watch-server.js +176 -0
  187. package/dist/src/cli/watch-stream.d.ts +11 -0
  188. package/dist/src/cli/watch-stream.js +128 -0
  189. package/dist/src/cli/watch-turn.d.ts +29 -0
  190. package/dist/src/cli/watch-turn.js +130 -0
  191. package/dist/src/cli/watch-view.d.ts +39 -0
  192. package/dist/src/cli/watch-view.js +223 -0
  193. package/dist/src/cli.d.ts +2 -0
  194. package/dist/src/cli.js +62 -0
  195. package/dist/src/daemon/claude-turn.d.ts +28 -0
  196. package/dist/src/daemon/claude-turn.js +135 -0
  197. package/dist/src/daemon/claude-worker.d.ts +26 -0
  198. package/dist/src/daemon/claude-worker.js +224 -0
  199. package/dist/src/daemon/codex-stream.d.ts +4 -0
  200. package/dist/src/daemon/codex-stream.js +113 -0
  201. package/dist/src/daemon/daemon.d.ts +46 -0
  202. package/dist/src/daemon/daemon.js +186 -0
  203. package/dist/src/daemon/delivery-router.d.ts +10 -0
  204. package/dist/src/daemon/delivery-router.js +34 -0
  205. package/dist/src/daemon/github-calls.d.ts +29 -0
  206. package/dist/src/daemon/github-calls.js +127 -0
  207. package/dist/src/daemon/github-issue-methods.d.ts +3 -0
  208. package/dist/src/daemon/github-issue-methods.js +99 -0
  209. package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
  210. package/dist/src/daemon/github-issue-privacy.js +131 -0
  211. package/dist/src/daemon/github-merge.d.ts +18 -0
  212. package/dist/src/daemon/github-merge.js +259 -0
  213. package/dist/src/daemon/github-methods.d.ts +5 -0
  214. package/dist/src/daemon/github-methods.js +198 -0
  215. package/dist/src/daemon/github-operation.d.ts +38 -0
  216. package/dist/src/daemon/github-operation.js +57 -0
  217. package/dist/src/daemon/github-worker.d.ts +17 -0
  218. package/dist/src/daemon/github-worker.js +281 -0
  219. package/dist/src/daemon/host-environment.d.ts +8 -0
  220. package/dist/src/daemon/host-environment.js +14 -0
  221. package/dist/src/daemon/issue-queue.d.ts +9 -0
  222. package/dist/src/daemon/issue-queue.js +163 -0
  223. package/dist/src/daemon/notify-message.d.ts +14 -0
  224. package/dist/src/daemon/notify-message.js +48 -0
  225. package/dist/src/daemon/notify.d.ts +12 -0
  226. package/dist/src/daemon/notify.js +161 -0
  227. package/dist/src/daemon/operation-journal.d.ts +42 -0
  228. package/dist/src/daemon/operation-journal.js +53 -0
  229. package/dist/src/daemon/ticket-registration.d.ts +33 -0
  230. package/dist/src/daemon/ticket-registration.js +177 -0
  231. package/dist/src/daemon/ticket-source.d.ts +17 -0
  232. package/dist/src/daemon/ticket-source.js +36 -0
  233. package/dist/src/daemon/work-tree.d.ts +26 -0
  234. package/dist/src/daemon/work-tree.js +206 -0
  235. package/dist/src/effect-authorization.d.ts +21 -0
  236. package/dist/src/effect-authorization.js +14 -0
  237. package/dist/src/execution-pin.d.ts +4 -0
  238. package/dist/src/execution-pin.js +68 -0
  239. package/dist/src/host/start-delivery.d.ts +41 -0
  240. package/dist/src/host/start-delivery.js +68 -0
  241. package/dist/src/host/step-bridge-host.d.ts +79 -0
  242. package/dist/src/host/step-bridge-host.js +205 -0
  243. package/dist/src/host/step-claims.d.ts +31 -0
  244. package/dist/src/host/step-claims.js +85 -0
  245. package/dist/src/host/world-host.d.ts +21 -0
  246. package/dist/src/host/world-host.js +51 -0
  247. package/dist/src/host/world-reconciliation.d.ts +37 -0
  248. package/dist/src/host/world-reconciliation.js +75 -0
  249. package/dist/src/host/world-runs.d.ts +14 -0
  250. package/dist/src/host/world-runs.js +61 -0
  251. package/dist/src/operation-identity.d.ts +7 -0
  252. package/dist/src/operation-identity.js +59 -0
  253. package/dist/src/protocol.d.ts +35 -0
  254. package/dist/src/protocol.js +64 -0
  255. package/dist/src/resource-files.d.ts +1 -0
  256. package/dist/src/resource-files.js +29 -0
  257. package/dist/src/service/changes.d.ts +11 -0
  258. package/dist/src/service/changes.js +32 -0
  259. package/dist/src/service/decision-handler.d.ts +9 -0
  260. package/dist/src/service/decision-handler.js +233 -0
  261. package/dist/src/service/event-handler.d.ts +10 -0
  262. package/dist/src/service/event-handler.js +70 -0
  263. package/dist/src/service/expiry.d.ts +13 -0
  264. package/dist/src/service/expiry.js +53 -0
  265. package/dist/src/service/gateway.d.ts +21 -0
  266. package/dist/src/service/gateway.js +120 -0
  267. package/dist/src/service/registry.d.ts +40 -0
  268. package/dist/src/service/registry.js +13 -0
  269. package/dist/src/service/replies.d.ts +26 -0
  270. package/dist/src/service/replies.js +56 -0
  271. package/dist/src/service/run-handlers.d.ts +4 -0
  272. package/dist/src/service/run-handlers.js +271 -0
  273. package/dist/src/service/service.d.ts +58 -0
  274. package/dist/src/service/service.js +212 -0
  275. package/dist/src/service/submission-handler.d.ts +4 -0
  276. package/dist/src/service/submission-handler.js +206 -0
  277. package/dist/src/service/transport.d.ts +16 -0
  278. package/dist/src/service/transport.js +141 -0
  279. package/dist/src/service/worker-port.d.ts +85 -0
  280. package/dist/src/service/worker-port.js +126 -0
  281. package/dist/src/step-bridge.d.ts +57 -0
  282. package/dist/src/step-bridge.js +4 -0
  283. package/dist/src/steps/decision-gate.d.ts +2 -0
  284. package/dist/src/steps/decision-gate.js +8 -0
  285. package/dist/src/steps/load-cycle.d.ts +10 -0
  286. package/dist/src/steps/load-cycle.js +11 -0
  287. package/dist/src/steps/protected-effect.d.ts +2 -0
  288. package/dist/src/steps/protected-effect.js +8 -0
  289. package/dist/src/storage/decision-rows.d.ts +54 -0
  290. package/dist/src/storage/decision-rows.js +72 -0
  291. package/dist/src/storage/decision-snapshots.d.ts +17 -0
  292. package/dist/src/storage/decision-snapshots.js +25 -0
  293. package/dist/src/storage/domain-changes.d.ts +48 -0
  294. package/dist/src/storage/domain-changes.js +213 -0
  295. package/dist/src/storage/domain-rows.d.ts +85 -0
  296. package/dist/src/storage/domain-rows.js +129 -0
  297. package/dist/src/storage/domain-schema.d.ts +32 -0
  298. package/dist/src/storage/domain-schema.js +193 -0
  299. package/dist/src/storage/effect-changes.d.ts +5 -0
  300. package/dist/src/storage/effect-changes.js +105 -0
  301. package/dist/src/storage/effect-rows.d.ts +67 -0
  302. package/dist/src/storage/effect-rows.js +74 -0
  303. package/dist/src/storage/effect-schema.d.ts +1 -0
  304. package/dist/src/storage/effect-schema.js +59 -0
  305. package/dist/src/storage/statements.d.ts +9 -0
  306. package/dist/src/storage/statements.js +8 -0
  307. package/dist/src/submission.d.ts +42 -0
  308. package/dist/src/submission.js +71 -0
  309. package/dist/src/turn-profile.d.ts +13 -0
  310. package/dist/src/turn-profile.js +100 -0
  311. package/dist/src/workflow-admission.d.ts +45 -0
  312. package/dist/src/workflow-admission.js +151 -0
  313. package/dist/src/workflow-contracts.d.ts +27 -0
  314. package/dist/src/workflow-contracts.js +88 -0
  315. package/dist/src/workflow-declaration.d.ts +11 -0
  316. package/dist/src/workflow-declaration.js +57 -0
  317. package/dist/src/workflow-resources.d.ts +8 -0
  318. package/dist/src/workflow-resources.js +14 -0
  319. package/dist/src/workflows.d.ts +5 -0
  320. package/dist/src/workflows.js +3 -0
  321. package/dist/tools/compile-workflows.d.ts +1 -0
  322. package/dist/tools/compile-workflows.js +33 -0
  323. package/dist/tools/self-host-processes.d.ts +10 -0
  324. package/dist/tools/self-host-processes.js +151 -0
  325. package/dist/tools/self-host-workflows.d.ts +15 -0
  326. package/dist/tools/self-host-workflows.js +78 -0
  327. package/dist/tools/self-host.d.ts +1 -0
  328. package/dist/tools/self-host.js +261 -0
  329. package/dist/tools/self-update-host.d.ts +6 -0
  330. package/dist/tools/self-update-host.js +41 -0
  331. package/dist/tools/self-update.d.ts +10 -0
  332. package/dist/tools/self-update.js +105 -0
  333. package/dist/tools/workflow-manifest.d.ts +3 -0
  334. package/dist/tools/workflow-manifest.js +34 -0
  335. package/dist/workflows/develop-prd.d.ts +7 -0
  336. package/dist/workflows/develop-prd.js +97 -0
  337. package/dist/workflows/develop-ticket.d.ts +15 -0
  338. package/dist/workflows/develop-ticket.js +301 -0
  339. package/dist/workflows/issue-labels.d.ts +14 -0
  340. package/dist/workflows/issue-labels.js +36 -0
  341. package/package.json +82 -75
  342. package/.DS_Store +0 -0
  343. package/.aider.chat.history.md +0 -16978
  344. package/.aider.input.history +0 -15
  345. package/.aider.tags.cache.v3/cache.db +0 -0
  346. package/.aider.tags.cache.v3/cache.db-shm +0 -0
  347. package/.aider.tags.cache.v3/cache.db-wal +0 -0
  348. package/.cursorrules +0 -77
  349. package/.github/workflows/auto-release.yml +0 -83
  350. package/.github/workflows/ci.yml +0 -32
  351. package/.github/workflows/npm-publish.yml +0 -34
  352. package/.gitignore +0 -67
  353. package/.husky/_/.gitignore +0 -1
  354. package/.husky/_/applypatch-msg +0 -2
  355. package/.husky/_/commit-msg +0 -2
  356. package/.husky/_/h +0 -22
  357. package/.husky/_/husky.sh +0 -9
  358. package/.husky/_/post-applypatch +0 -2
  359. package/.husky/_/post-checkout +0 -2
  360. package/.husky/_/post-commit +0 -2
  361. package/.husky/_/post-merge +0 -2
  362. package/.husky/_/post-rewrite +0 -2
  363. package/.husky/_/pre-applypatch +0 -2
  364. package/.husky/_/pre-auto-gc +0 -2
  365. package/.husky/_/pre-commit +0 -2
  366. package/.husky/_/pre-merge-commit +0 -2
  367. package/.husky/_/pre-push +0 -2
  368. package/.husky/_/pre-rebase +0 -2
  369. package/.husky/_/prepare-commit-msg +0 -2
  370. package/.husky/pre-commit +0 -1
  371. package/.husky/pre-push +0 -1
  372. package/.prettierrc.json +0 -7
  373. package/.tool-versions +0 -2
  374. package/SECURITY.md +0 -15
  375. package/cloving.json +0 -67
  376. package/dist/abstract_gpt/index.js +0 -55
  377. package/dist/cloving_gpt/adapters/Adapter.js +0 -2
  378. package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
  379. package/dist/cloving_gpt/adapters/claude.js +0 -128
  380. package/dist/cloving_gpt/adapters/gemini.js +0 -135
  381. package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
  382. package/dist/cloving_gpt/adapters/index.js +0 -2
  383. package/dist/cloving_gpt/adapters/mistral.js +0 -128
  384. package/dist/cloving_gpt/adapters/ollama.js +0 -128
  385. package/dist/cloving_gpt/adapters/openai.js +0 -100
  386. package/dist/cloving_gpt/index.js +0 -192
  387. package/dist/commands/analyze.js +0 -47
  388. package/dist/commands/chat.js +0 -14
  389. package/dist/commands/check.js +0 -7
  390. package/dist/commands/commit.js +0 -44
  391. package/dist/commands/config.js +0 -167
  392. package/dist/commands/describe.js +0 -235
  393. package/dist/commands/generate/code.js +0 -21
  394. package/dist/commands/generate/commit.js +0 -11
  395. package/dist/commands/generate/context.js +0 -82
  396. package/dist/commands/generate/docs.js +0 -11
  397. package/dist/commands/generate/documentation.js +0 -11
  398. package/dist/commands/generate/fizzbuzz.js +0 -35
  399. package/dist/commands/generate/init.js +0 -15
  400. package/dist/commands/generate/review.js +0 -11
  401. package/dist/commands/generate/sh.js +0 -95
  402. package/dist/commands/generate/shell.js +0 -11
  403. package/dist/commands/generate/unit_tests.js +0 -11
  404. package/dist/commands/init.js +0 -13
  405. package/dist/commands/models.js +0 -22
  406. package/dist/commands/project/build.js +0 -88
  407. package/dist/commands/project/complete.js +0 -12
  408. package/dist/commands/project/init.js +0 -82
  409. package/dist/commands/project/plan.js +0 -108
  410. package/dist/commands/proxy.js +0 -11
  411. package/dist/commands/review.js +0 -50
  412. package/dist/commands/tokens.js +0 -75
  413. package/dist/commands/unit_tests.js +0 -150
  414. package/dist/commands/update.js +0 -7
  415. package/dist/file2.js +0 -4
  416. package/dist/index.js +0 -134
  417. package/dist/managers/BlockManager.js +0 -120
  418. package/dist/managers/ChatManager.js +0 -653
  419. package/dist/managers/ChunkManager.js +0 -32
  420. package/dist/managers/CodeManager.js +0 -185
  421. package/dist/managers/CommitManager.js +0 -64
  422. package/dist/managers/DocsManager.js +0 -88
  423. package/dist/managers/DocumentationManager.js +0 -114
  424. package/dist/managers/InitManager.js +0 -230
  425. package/dist/managers/ProxyManager.js +0 -210
  426. package/dist/managers/ReviewManager.js +0 -131
  427. package/dist/managers/ShellManager.js +0 -163
  428. package/dist/managers/StreamManager.js +0 -308
  429. package/dist/managers/UnitTestManager.js +0 -243
  430. package/dist/managers/src/managers/ProxyManager.js +0 -1
  431. package/dist/newfile.js +0 -2
  432. package/dist/package.json +0 -86
  433. package/dist/utils/command_utils.js +0 -384
  434. package/dist/utils/config_utils.js +0 -249
  435. package/dist/utils/gitUtils.js +0 -42
  436. package/dist/utils/git_utils.js +0 -217
  437. package/dist/utils/modelUtils.js +0 -7
  438. package/dist/utils/model_utils.js +0 -7
  439. package/dist/utils/prompt_utils.js +0 -333
  440. package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  441. package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  442. package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  443. package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  444. package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  445. package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  446. package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  447. package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
  448. package/dist/utils/prompts/index.js +0 -27
  449. package/dist/utils/string_utils.js +0 -505
  450. package/dist/utils/types.js +0 -2
  451. package/jest.config.js +0 -11
  452. package/src/cloving_gpt/adapters/azureopenai.ts +0 -83
  453. package/src/cloving_gpt/adapters/claude.ts +0 -140
  454. package/src/cloving_gpt/adapters/gemini.ts +0 -146
  455. package/src/cloving_gpt/adapters/index.ts +0 -43
  456. package/src/cloving_gpt/adapters/mistral.ts +0 -142
  457. package/src/cloving_gpt/adapters/ollama.ts +0 -136
  458. package/src/cloving_gpt/adapters/openai.ts +0 -113
  459. package/src/cloving_gpt/index.ts +0 -229
  460. package/src/commands/chat.ts +0 -12
  461. package/src/commands/config.ts +0 -192
  462. package/src/commands/generate/code.ts +0 -18
  463. package/src/commands/generate/commit.ts +0 -9
  464. package/src/commands/generate/context.ts +0 -93
  465. package/src/commands/generate/docs.ts +0 -9
  466. package/src/commands/generate/review.ts +0 -9
  467. package/src/commands/generate/shell.ts +0 -9
  468. package/src/commands/generate/unit_tests.ts +0 -9
  469. package/src/commands/init.ts +0 -9
  470. package/src/commands/models.ts +0 -21
  471. package/src/commands/proxy.ts +0 -9
  472. package/src/commands/tokens.ts +0 -82
  473. package/src/index.ts +0 -197
  474. package/src/managers/BlockManager.ts +0 -126
  475. package/src/managers/ChatManager.ts +0 -755
  476. package/src/managers/ChunkManager.ts +0 -31
  477. package/src/managers/CodeManager.ts +0 -226
  478. package/src/managers/CommitManager.ts +0 -71
  479. package/src/managers/DocsManager.ts +0 -101
  480. package/src/managers/InitManager.ts +0 -263
  481. package/src/managers/ProxyManager.ts +0 -240
  482. package/src/managers/ReviewManager.ts +0 -154
  483. package/src/managers/ShellManager.ts +0 -172
  484. package/src/managers/StreamManager.ts +0 -353
  485. package/src/managers/UnitTestManager.ts +0 -293
  486. package/src/utils/config_utils.ts +0 -271
  487. package/src/utils/git_utils.ts +0 -230
  488. package/src/utils/model_utils.ts +0 -3
  489. package/src/utils/prompt_utils.ts +0 -375
  490. package/src/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  491. package/src/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  492. package/src/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  493. package/src/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  494. package/src/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  495. package/src/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  496. package/src/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  497. package/src/utils/prompts/SPECIAL_FILES.md +0 -66
  498. package/src/utils/prompts/index.ts +0 -37
  499. package/src/utils/string_utils.ts +0 -552
  500. package/src/utils/types.ts +0 -127
  501. package/tests/commands/generate/unit_tests.test.ts +0 -27
  502. package/tests/utils/git_utils.test.ts +0 -116
  503. package/tests/utils/model_utils.test.ts +0 -27
  504. package/tests/utils/prompt_utils.test.ts +0 -33
  505. package/tests/utils/string_utils.test.ts +0 -560
  506. package/tsconfig.json +0 -14
  507. package/yarn.lock +0 -5823
@@ -0,0 +1,38 @@
1
+ const instant = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d{3})?Z$/;
2
+ function leap(year) {
3
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
4
+ }
5
+ function daysIn(year, month) {
6
+ if (month === 2)
7
+ return leap(year) ? 29 : 28;
8
+ return [4, 6, 9, 11].includes(month) ? 30 : 31;
9
+ }
10
+ function calendar(match) {
11
+ const year = Number(match[1]);
12
+ const month = Number(match[2]);
13
+ const bounds = [
14
+ [month, 1, 12],
15
+ [Number(match[3]), 1, daysIn(year, month)],
16
+ [Number(match[4]), 0, 23],
17
+ [Number(match[5]), 0, 59],
18
+ [Number(match[6]), 0, 59],
19
+ ];
20
+ return bounds.every(([value, minimum, maximum]) => value >= minimum && value <= maximum);
21
+ }
22
+ export function isInstant(value) {
23
+ if (typeof value !== "string")
24
+ return false;
25
+ const match = instant.exec(value);
26
+ return match !== null && calendar(match);
27
+ }
28
+ function milliseconds(value) {
29
+ return value.length === 20 ? `${value.slice(0, 19)}.000Z` : value;
30
+ }
31
+ export function notBefore(value, bound) {
32
+ return (isInstant(value) &&
33
+ isInstant(bound) &&
34
+ milliseconds(value) >= milliseconds(bound));
35
+ }
36
+ export function isAfter(value, bound) {
37
+ return notBefore(value, bound) && !notBefore(bound, value);
38
+ }
@@ -0,0 +1,15 @@
1
+ import { type EffectContext, type EffectResult, type EffectState, type Lease, type Operation } from "./operations.ts";
2
+ export declare function ownedLease(effects: EffectState, operation: Operation): Lease | undefined;
3
+ export declare function current(lease: Lease, event: {
4
+ readonly recordedAt: string;
5
+ }): boolean;
6
+ export declare function granted(effects: EffectState, context: EffectContext): EffectResult;
7
+ export declare function expired(effects: EffectState, context: EffectContext): EffectResult;
8
+ interface Promotable {
9
+ readonly effects: EffectState;
10
+ readonly runs: Readonly<Record<string, {
11
+ readonly status: string;
12
+ }>>;
13
+ }
14
+ export declare function promotions(state: Promotable, bound: number): readonly Operation[];
15
+ export {};
@@ -0,0 +1,113 @@
1
+ import { isAfter, notBefore } from "./instants.js";
2
+ import { count, field, rejected, withOperation, } from "./operations.js";
3
+ export function ownedLease(effects, operation) {
4
+ const lease = effects.leases[operation.leaseKey];
5
+ const owned = lease?.operationId === operation.operationId && lease.state !== "released";
6
+ return owned ? lease : undefined;
7
+ }
8
+ export function current(lease, event) {
9
+ return (lease.state === "held" && !notBefore(event.recordedAt, lease.expiresAt));
10
+ }
11
+ function grantRefusal(effects, grant) {
12
+ const { operation, event, runStatus } = grant;
13
+ if (operation.status !== "waiting")
14
+ return "operation-not-waiting";
15
+ if (runStatus !== "running")
16
+ return "run-not-running";
17
+ const lease = effects.leases[operation.leaseKey];
18
+ if (lease !== undefined && lease.state !== "released")
19
+ return "resource-held";
20
+ if (count(event, "leaseGeneration") !== (lease?.generation ?? 0) + 1)
21
+ return "stale-lease-generation";
22
+ if (effects.holding >= count(event, "capacity"))
23
+ return "capacity-exceeded";
24
+ if (!isAfter(field(event, "expiresAt"), event.recordedAt))
25
+ return "invalid-lease-expiry";
26
+ return undefined;
27
+ }
28
+ export function granted(effects, context) {
29
+ const { event } = context;
30
+ const operation = effects.operations[field(event, "operationId")];
31
+ if (operation?.runId !== event.runId)
32
+ return rejected("unknown-operation");
33
+ const refusal = grantRefusal(effects, { ...context, operation });
34
+ if (refusal !== undefined)
35
+ return rejected(refusal);
36
+ const lease = {
37
+ resourceKey: operation.leaseKey,
38
+ operationId: operation.operationId,
39
+ generation: count(event, "leaseGeneration"),
40
+ expiresAt: field(event, "expiresAt"),
41
+ state: "held",
42
+ grantedSequence: event.sequence,
43
+ };
44
+ return {
45
+ kind: "changed",
46
+ effects: {
47
+ ...withOperation(effects, {
48
+ ...operation,
49
+ status: "dispatch-pending",
50
+ reason: null,
51
+ waitSequence: null,
52
+ }),
53
+ leases: { ...effects.leases, [lease.resourceKey]: lease },
54
+ holding: effects.holding + 1,
55
+ },
56
+ added: [operation.operationId],
57
+ };
58
+ }
59
+ function expiryRefusal(lease, expiry) {
60
+ const { operation, event } = expiry;
61
+ const held = lease?.operationId === operation.operationId && lease.state === "held";
62
+ if (!held)
63
+ return "lease-not-held";
64
+ if (lease.generation !== count(event, "leaseGeneration"))
65
+ return "stale-lease-generation";
66
+ if (!notBefore(event.recordedAt, lease.expiresAt))
67
+ return "lease-not-expired";
68
+ return undefined;
69
+ }
70
+ const expiring = ["dispatch-pending", "running"];
71
+ export function expired(effects, context) {
72
+ const { event } = context;
73
+ const operation = effects.operations[field(event, "operationId")];
74
+ if (operation?.runId !== event.runId)
75
+ return rejected("unknown-operation");
76
+ const lease = effects.leases[operation.leaseKey];
77
+ const refusal = expiryRefusal(lease, { ...context, operation });
78
+ if (refusal !== undefined || lease === undefined)
79
+ return rejected(refusal ?? "lease-not-held");
80
+ const recovering = expiring.includes(operation.status)
81
+ ? { ...operation, status: "recovering", reason: "lease-expired" }
82
+ : operation;
83
+ return {
84
+ kind: "changed",
85
+ effects: {
86
+ ...withOperation(effects, recovering),
87
+ leases: {
88
+ ...effects.leases,
89
+ [lease.resourceKey]: { ...lease, state: "expired" },
90
+ },
91
+ },
92
+ };
93
+ }
94
+ function free(effects, leaseKey) {
95
+ const lease = effects.leases[leaseKey];
96
+ return lease === undefined || lease.state === "released";
97
+ }
98
+ export function promotions(state, bound) {
99
+ const { effects, runs } = state;
100
+ const waiting = Object.values(effects.operations)
101
+ .filter((operation) => operation.status === "waiting" &&
102
+ runs[operation.runId]?.status === "running" &&
103
+ free(effects, operation.leaseKey))
104
+ .sort((left, right) => (left.waitSequence ?? 0) - (right.waitSequence ?? 0) ||
105
+ (left.operationId < right.operationId ? -1 : 1));
106
+ const keys = new Set();
107
+ const oldest = waiting.filter((operation) => {
108
+ const first = !keys.has(operation.leaseKey);
109
+ keys.add(operation.leaseKey);
110
+ return first;
111
+ });
112
+ return oldest.slice(0, Math.max(0, bound - effects.holding));
113
+ }
@@ -0,0 +1,101 @@
1
+ export type OperationStatus = "refused" | "waiting" | "dispatch-pending" | "running" | "recovering" | "blocked" | "completed" | "failed" | "stopped" | "cancelled";
2
+ export interface Operation {
3
+ readonly runId: string;
4
+ readonly operationId: string;
5
+ readonly capability: string;
6
+ readonly method: string;
7
+ readonly target: string;
8
+ readonly payload: string;
9
+ readonly inputDigest: string;
10
+ readonly units: number;
11
+ readonly leaseKey: string;
12
+ readonly recoveryLimit: number;
13
+ readonly status: OperationStatus;
14
+ readonly reason: string | null;
15
+ readonly attempts: number;
16
+ readonly receipt: string | null;
17
+ readonly worker: string | null;
18
+ readonly result: string | null;
19
+ readonly requestedSequence: number;
20
+ readonly waitSequence: number | null;
21
+ readonly settledSequence: number | null;
22
+ }
23
+ export interface Lease {
24
+ readonly resourceKey: string;
25
+ readonly operationId: string;
26
+ readonly generation: number;
27
+ readonly expiresAt: string;
28
+ readonly state: "held" | "expired" | "released";
29
+ readonly grantedSequence: number;
30
+ }
31
+ export interface RunBudget {
32
+ readonly runId: string;
33
+ readonly limit: number;
34
+ readonly spent: number;
35
+ readonly capabilities: readonly string[];
36
+ readonly exhaustedSequence: number | null;
37
+ }
38
+ export interface StoppedOperation {
39
+ readonly runId: string;
40
+ readonly sequence: number;
41
+ }
42
+ export interface EffectState {
43
+ readonly budgets: Readonly<Record<string, RunBudget>>;
44
+ readonly operations: Readonly<Record<string, Operation>>;
45
+ readonly leases: Readonly<Record<string, Lease>>;
46
+ readonly holding: number;
47
+ readonly stops: Readonly<Record<string, StoppedOperation>>;
48
+ }
49
+ export declare const emptyEffects: EffectState;
50
+ export interface Disposition {
51
+ readonly operationId: string;
52
+ readonly disposition: string;
53
+ readonly reason: string | null;
54
+ }
55
+ export interface Evidence extends Disposition {
56
+ readonly sequence: number;
57
+ readonly runId: string;
58
+ }
59
+ export declare function evidenceOf(event: {
60
+ readonly sequence: number;
61
+ readonly runId: string;
62
+ }, disposition: Disposition | undefined): readonly Evidence[];
63
+ export interface EffectChange {
64
+ readonly kind: "changed";
65
+ readonly effects: EffectState;
66
+ readonly added?: readonly string[];
67
+ readonly released?: readonly string[];
68
+ readonly disposition?: Disposition;
69
+ }
70
+ export type EffectResult = EffectChange | {
71
+ readonly kind: "invalid";
72
+ readonly reason: string;
73
+ };
74
+ export interface EffectEvent {
75
+ readonly sequence: number;
76
+ readonly runId: string;
77
+ readonly recordedAt: string;
78
+ readonly payload: Readonly<Record<string, string>>;
79
+ }
80
+ export interface EffectContext {
81
+ readonly event: EffectEvent;
82
+ readonly runStatus: string;
83
+ }
84
+ export declare const runOperations: string[];
85
+ export declare function namesRunIntent(operationId: string, runId: string): boolean;
86
+ export declare function isHolding(operation: {
87
+ readonly status: string;
88
+ }): boolean;
89
+ export declare function isFinal(operation: Operation): boolean;
90
+ export declare function rejected(reason: string): EffectResult;
91
+ export declare function field(event: EffectEvent, name: string): string;
92
+ export declare function count(event: EffectEvent, name: string): number;
93
+ export declare function withOperation(effects: EffectState, operation: Operation): EffectState;
94
+ export declare function cancelledOperation(operation: Operation, cancellation: {
95
+ readonly reason: string;
96
+ readonly sequence: number;
97
+ }): Operation;
98
+ export declare function endedRun(effects: EffectState, event: {
99
+ readonly runId: string;
100
+ readonly sequence: number;
101
+ }): EffectState;
@@ -0,0 +1,75 @@
1
+ import { operationScope } from "../operation-identity.js";
2
+ export const emptyEffects = {
3
+ budgets: {},
4
+ operations: {},
5
+ leases: {},
6
+ holding: 0,
7
+ stops: {},
8
+ };
9
+ export function evidenceOf(event, disposition) {
10
+ if (disposition === undefined)
11
+ return [];
12
+ return [{ sequence: event.sequence, runId: event.runId, ...disposition }];
13
+ }
14
+ const holdingStatuses = [
15
+ "dispatch-pending",
16
+ "running",
17
+ "recovering",
18
+ "blocked",
19
+ ];
20
+ const finalStatuses = [
21
+ "refused",
22
+ "completed",
23
+ "failed",
24
+ "stopped",
25
+ "cancelled",
26
+ ];
27
+ export const runOperations = ["start-run", "continue-run"];
28
+ export function namesRunIntent(operationId, runId) {
29
+ const scope = operationScope(operationId);
30
+ return scope?.run === runId && runOperations.includes(scope.operation);
31
+ }
32
+ export function isHolding(operation) {
33
+ return holdingStatuses.includes(operation.status);
34
+ }
35
+ export function isFinal(operation) {
36
+ return finalStatuses.includes(operation.status);
37
+ }
38
+ export function rejected(reason) {
39
+ return { kind: "invalid", reason };
40
+ }
41
+ export function field(event, name) {
42
+ return event.payload[name] ?? "";
43
+ }
44
+ export function count(event, name) {
45
+ return Number(event.payload[name]);
46
+ }
47
+ export function withOperation(effects, operation) {
48
+ return {
49
+ ...effects,
50
+ operations: { ...effects.operations, [operation.operationId]: operation },
51
+ };
52
+ }
53
+ export function cancelledOperation(operation, cancellation) {
54
+ return {
55
+ ...operation,
56
+ status: "cancelled",
57
+ reason: cancellation.reason,
58
+ waitSequence: null,
59
+ settledSequence: cancellation.sequence,
60
+ };
61
+ }
62
+ export function endedRun(effects, event) {
63
+ return {
64
+ ...effects,
65
+ operations: Object.fromEntries(Object.entries(effects.operations).map(([operationId, operation]) => [
66
+ operationId,
67
+ operation.runId === event.runId && operation.status === "waiting"
68
+ ? cancelledOperation(operation, {
69
+ reason: "run-ended",
70
+ sequence: event.sequence,
71
+ })
72
+ : operation,
73
+ ])),
74
+ };
75
+ }
@@ -0,0 +1,27 @@
1
+ import { type AuthorityState } from "./transitions.ts";
2
+ export interface WorldRun {
3
+ readonly runId: string;
4
+ readonly receipt: string;
5
+ readonly status: string;
6
+ readonly outcome?: string;
7
+ readonly outcomeReason?: string;
8
+ readonly operationId?: string | null;
9
+ readonly createdAt?: string;
10
+ }
11
+ export type WorldReport = {
12
+ readonly kind: "unknown-world-run" | "world-run-unreadable";
13
+ readonly runId: string;
14
+ readonly receipt: string;
15
+ } | {
16
+ readonly kind: "world-run-absent";
17
+ readonly runId: string;
18
+ readonly operationId: string;
19
+ };
20
+ export interface Reconciliation {
21
+ readonly commands: readonly Readonly<Record<string, unknown>>[];
22
+ readonly conflicts: readonly string[];
23
+ readonly reports: readonly WorldReport[];
24
+ }
25
+ type Reconciled = Pick<AuthorityState, "runs" | "intents" | "details" | "gates" | "commands">;
26
+ export declare function reconcile(state: Reconciled, worldRuns: readonly WorldRun[]): Reconciliation;
27
+ export {};
@@ -0,0 +1,147 @@
1
+ import { gateContinuation } from "./gate-reduction.js";
2
+ import { isBlockedReason } from "../workflow-contracts.js";
3
+ import { continues } from "./gates.js";
4
+ import { startOperation } from "./reduction.js";
5
+ import { terminal, } from "./transitions.js";
6
+ const progress = {
7
+ queued: { running: "mark-started", completed: "mark-started" },
8
+ running: { completed: "complete-run" },
9
+ };
10
+ const endings = {
11
+ failed: "world-run-failed",
12
+ cancelled: "world-run-cancelled",
13
+ };
14
+ export function reconcile(state, worldRuns) {
15
+ const observed = Map.groupBy(worldRuns, (world) => world.runId);
16
+ const known = Object.values(state.runs).map((run) => ({
17
+ run,
18
+ segments: (observed.get(run.runId) ?? []).toSorted((first, second) => created(first) < created(second) ? -1 : 1),
19
+ }));
20
+ return {
21
+ commands: known.flatMap((found) => planned(state, found)),
22
+ conflicts: known
23
+ .filter((found) => conflicting(found.segments))
24
+ .map((found) => found.run.runId),
25
+ reports: [
26
+ ...worldRuns.flatMap((world) => unusable(state, world)),
27
+ ...known.flatMap((found) => absent(state, found)),
28
+ ],
29
+ };
30
+ }
31
+ function unusable(state, world) {
32
+ const { runId, receipt } = world;
33
+ if (!Object.hasOwn(state.runs, runId))
34
+ return [{ kind: "unknown-world-run", runId, receipt }];
35
+ if (world.status !== "unreadable")
36
+ return [];
37
+ return [{ kind: "world-run-unreadable", runId, receipt }];
38
+ }
39
+ function dispatched(state, run) {
40
+ const pending = state.intents.map((intent) => intent.operationId);
41
+ const continued = Object.values(state.gates)
42
+ .filter((gate) => gate.runId === run.runId)
43
+ .filter(continues)
44
+ .map((gate) => gateContinuation(gate).operationId);
45
+ return [startOperation(run.runId), ...continued].filter((operationId) => !pending.includes(operationId));
46
+ }
47
+ function missing(state, found) {
48
+ const { run, segments } = found;
49
+ const tags = segments.map((world) => world.operationId ?? null);
50
+ if (terminal.includes(run.status) || tags.includes(null))
51
+ return [];
52
+ return dispatched(state, run).filter((operationId) => !tags.includes(operationId));
53
+ }
54
+ function absent(state, found) {
55
+ return missing(state, found).map((operationId) => ({
56
+ kind: "world-run-absent",
57
+ runId: found.run.runId,
58
+ operationId,
59
+ }));
60
+ }
61
+ function created(world) {
62
+ return `${world.createdAt ?? ""} ${world.receipt}`;
63
+ }
64
+ function conflicting(runs) {
65
+ const operations = runs.map((world) => world.operationId ?? null);
66
+ return (runs.length > 1 &&
67
+ (operations.includes(null) || new Set(operations).size < runs.length));
68
+ }
69
+ function planned(state, found) {
70
+ const { run, segments } = found;
71
+ const world = segments.at(-1);
72
+ if (!world || terminal.includes(run.status))
73
+ return [];
74
+ if (conflicting(segments))
75
+ return unsent(state, conflict(found));
76
+ const pending = state.intents.some((intent) => intent.runId === run.runId && intent.kind !== "protected-effect");
77
+ if (pending)
78
+ return [];
79
+ const failed = segments.find((segment) => Object.hasOwn(endings, segment.status));
80
+ if (failed)
81
+ return ended(state, {
82
+ run,
83
+ world: failed,
84
+ reason: String(endings[failed.status]),
85
+ });
86
+ return next(state, { ...found, world });
87
+ }
88
+ function next(state, observed) {
89
+ const { run, world } = observed;
90
+ const kind = progress[run.status]?.[world.status];
91
+ if (kind === undefined)
92
+ return [];
93
+ const waits = kind === "complete-run" && world.outcome === "waiting_for_decision";
94
+ if (!waits)
95
+ return [moved(kind, observed)];
96
+ const held = run.gates.length > 0 || missing(state, observed).length > 0;
97
+ if (held)
98
+ return [];
99
+ return ended(state, { run, world, reason: "world-run-waits-without-gate" });
100
+ }
101
+ function moved(kind, observed) {
102
+ const { run, world } = observed;
103
+ return {
104
+ kind,
105
+ commandId: `${kind}:${world.receipt}`,
106
+ runId: run.runId,
107
+ expectedRevision: run.revision,
108
+ ...(kind === "complete-run" ? completionOutcome(world) : {}),
109
+ };
110
+ }
111
+ function completionOutcome(world) {
112
+ const { outcome, outcomeReason } = world;
113
+ if (outcome !== "handoff_requested" && outcome !== "blocked")
114
+ return {};
115
+ if (outcome !== "blocked" || !isBlockedReason(outcomeReason))
116
+ return { outcome };
117
+ return { outcome, outcomeReason };
118
+ }
119
+ function noted(observed, evidence) {
120
+ const { run, world, reason } = observed;
121
+ return {
122
+ kind: "report-observation",
123
+ commandId: `observe:${reason}:${world.receipt}`,
124
+ runId: run.runId,
125
+ condition: "infrastructure-failure",
126
+ reason,
127
+ evidence,
128
+ };
129
+ }
130
+ function unsent(state, command) {
131
+ const recorded = Object.hasOwn(state.commands, String(command["commandId"]));
132
+ return recorded ? [] : [command];
133
+ }
134
+ function conflict(found) {
135
+ const [world = { runId: "", receipt: "", status: "" }] = found.segments;
136
+ return noted({ run: found.run, world, reason: "world-run-conflict" }, found.segments
137
+ .slice(0, 2)
138
+ .map((segment) => `world-run:${segment.receipt}`)
139
+ .join("/"));
140
+ }
141
+ function ended(state, observed) {
142
+ const { run, world } = observed;
143
+ return [
144
+ ...unsent(state, noted(observed, `world-run:${world.receipt}`)),
145
+ ...(run.status === "paused" ? [] : [moved("fail-run", observed)]),
146
+ ];
147
+ }
@@ -0,0 +1,41 @@
1
+ import { type AuthorityEvent, type AuthorityState, type EffectIntent } from "./transitions.ts";
2
+ import { type Disposition, type Evidence } from "./operations.ts";
3
+ export type { AuthorityEvent, AuthorityState, EffectIntent, RunState, RunStatus, } from "./transitions.ts";
4
+ export type CommandResult = {
5
+ readonly kind: "accepted";
6
+ readonly events: readonly AuthorityEvent[];
7
+ readonly state: AuthorityState;
8
+ readonly intents: readonly EffectIntent[];
9
+ readonly disposition?: Disposition;
10
+ } | {
11
+ readonly kind: "duplicate";
12
+ readonly sequence: number;
13
+ } | {
14
+ readonly kind: "rejected";
15
+ readonly reason: string;
16
+ };
17
+ export declare const emptyAuthority: AuthorityState;
18
+ export declare function execute(state: AuthorityState, proposed: {
19
+ readonly command: unknown;
20
+ readonly recordedAt: string;
21
+ }): CommandResult;
22
+ export declare function rebuild(events: readonly unknown[]): AuthorityState;
23
+ export declare function applyEvent(state: AuthorityState, entry: {
24
+ readonly value: unknown;
25
+ readonly index: number;
26
+ }): {
27
+ readonly state: AuthorityState;
28
+ readonly event: AuthorityEvent;
29
+ readonly evidence: readonly Evidence[];
30
+ };
31
+ type Statuses = Readonly<Record<string, {
32
+ readonly status: string;
33
+ }>>;
34
+ export interface Eligibility {
35
+ readonly intents: readonly EffectIntent[];
36
+ readonly runs: Statuses;
37
+ readonly effects: {
38
+ readonly operations: Statuses;
39
+ };
40
+ }
41
+ export declare function eligibleIntents(state: Eligibility): readonly EffectIntent[];