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,126 @@
1
+ import { documentDigest } from "../broker/decision-restore.js";
2
+ import { effectInputDigest } from "../broker/effect-restore.js";
3
+ import { operationIdentity } from "../operation-identity.js";
4
+ function reference(text) {
5
+ return typeof text === "string" ? documentDigest(text) : null;
6
+ }
7
+ function sequenceOf(receipt) {
8
+ const committed = receipt.kind === "accepted" || receipt.kind === "duplicate";
9
+ return committed ? receipt.sequence : undefined;
10
+ }
11
+ async function stored(authority, answer) {
12
+ const { receipt, operationId } = answer;
13
+ if (receipt.kind === "failed")
14
+ return { receipt, disposition: null, operation: null };
15
+ const sequence = sequenceOf(receipt);
16
+ try {
17
+ const disposition = sequence === undefined
18
+ ? undefined
19
+ : await authority.effects.disposition(sequence);
20
+ return {
21
+ receipt,
22
+ disposition: disposition ?? null,
23
+ operation: (await authority.effects.operation(operationId)) ?? null,
24
+ };
25
+ }
26
+ catch {
27
+ return { receipt, disposition: null, operation: null };
28
+ }
29
+ }
30
+ function texts(values) {
31
+ return values.every((value) => typeof value === "string");
32
+ }
33
+ function isObject(value) {
34
+ return typeof value === "object" && value !== null;
35
+ }
36
+ function unanswered(reason) {
37
+ return {
38
+ receipt: { kind: "rejected", reason },
39
+ disposition: null,
40
+ operation: null,
41
+ };
42
+ }
43
+ function effectPort(parts) {
44
+ const { gateway, authority } = parts;
45
+ return {
46
+ requestEffect: async (request) => {
47
+ if (!isObject(request))
48
+ return unanswered("invalid-command");
49
+ const { scope, payload, epoch, ...rest } = request;
50
+ if (!texts([payload, rest.capability, rest.method, rest.target]))
51
+ return unanswered("invalid-command");
52
+ const identity = operationIdentity({ ...scope, run: request.runId });
53
+ if (identity.kind !== "valid")
54
+ return unanswered(identity.reason);
55
+ const operationId = identity.value;
56
+ const digest = documentDigest(payload);
57
+ const receipt = await gateway.execute({
58
+ principal: "worker",
59
+ command: {
60
+ kind: "request-effect",
61
+ ...rest,
62
+ operationId,
63
+ payload: digest,
64
+ inputDigest: effectInputDigest({
65
+ capability: request.capability,
66
+ method: request.method,
67
+ target: request.target,
68
+ payload: digest,
69
+ }),
70
+ recoveryLimit: authority.recoveryLimit,
71
+ },
72
+ documents: [payload],
73
+ epoch: epoch ?? authority.epoch,
74
+ });
75
+ return stored(authority, { receipt, operationId });
76
+ },
77
+ reportEffect: async (report) => {
78
+ if (!isObject(report))
79
+ return unanswered("invalid-command");
80
+ const { result, epoch, ...rest } = report;
81
+ const given = result === undefined ? [] : [result];
82
+ if (!texts([report.operationId, ...given]))
83
+ return unanswered("invalid-command");
84
+ const receipt = await gateway.execute({
85
+ principal: "worker",
86
+ command: {
87
+ kind: "report-effect",
88
+ ...rest,
89
+ ...(result === undefined ? {} : { result: documentDigest(result) }),
90
+ },
91
+ documents: result === undefined ? [] : [result],
92
+ epoch: epoch ?? authority.epoch,
93
+ });
94
+ return stored(authority, {
95
+ receipt,
96
+ operationId: report.operationId,
97
+ });
98
+ },
99
+ };
100
+ }
101
+ export function workerPort(parts) {
102
+ const { gateway } = parts;
103
+ const submit = (command, documents) => gateway.execute({
104
+ principal: "worker",
105
+ command,
106
+ ...(documents === undefined ? {} : { documents }),
107
+ });
108
+ return {
109
+ submit,
110
+ started: (run) => submit({ kind: "mark-started", ...run }),
111
+ openGate: (opening) => {
112
+ const { kind, prompt, ...rest } = opening;
113
+ return submit({
114
+ kind: "open-gate",
115
+ ...rest,
116
+ gateKind: kind,
117
+ prompt: reference(prompt),
118
+ }, [prompt]);
119
+ },
120
+ registerWait: (wait) => submit({ kind: "register-wait", ...wait }),
121
+ observe: (report) => submit({ kind: "report-observation", ...report }),
122
+ completed: (run) => submit({ kind: "complete-run", ...run }),
123
+ failed: (run) => submit({ kind: "fail-run", ...run }),
124
+ ...effectPort(parts),
125
+ };
126
+ }
@@ -0,0 +1,57 @@
1
+ export declare const stepBridgeKey = "cloving.step-bridge/v1";
2
+ export interface ProtectedScope {
3
+ readonly phase: string;
4
+ readonly operation: string;
5
+ readonly round: number;
6
+ readonly key?: string;
7
+ readonly stage?: {
8
+ readonly id: string;
9
+ readonly visit: string;
10
+ readonly branch: string;
11
+ };
12
+ }
13
+ export interface ProtectedRequest {
14
+ readonly scope: ProtectedScope;
15
+ readonly capability: string;
16
+ readonly method: string;
17
+ readonly target: string;
18
+ readonly payload: string;
19
+ readonly units: number;
20
+ readonly resource?: string;
21
+ }
22
+ export type ProtectedResult = {
23
+ readonly kind: "completed";
24
+ readonly operationId: string;
25
+ readonly receipt: string | null;
26
+ readonly result: string | null;
27
+ } | {
28
+ readonly kind: "failed" | "stopped" | "blocked" | "cancelled";
29
+ readonly operationId: string;
30
+ readonly reason: string | null;
31
+ } | {
32
+ readonly kind: "refused";
33
+ readonly reason: string;
34
+ } | {
35
+ readonly kind: "unavailable";
36
+ readonly reason: string;
37
+ };
38
+ export interface GateRequest {
39
+ readonly gateId: string;
40
+ readonly kind: "question" | "approval";
41
+ readonly prompt: string;
42
+ }
43
+ export type GateResult = {
44
+ readonly kind: "opened";
45
+ readonly decisionId: string;
46
+ } | {
47
+ readonly kind: "refused";
48
+ readonly reason: string;
49
+ } | {
50
+ readonly kind: "unavailable";
51
+ readonly reason: string;
52
+ };
53
+ export interface StepBridge {
54
+ readonly effect: (request: ProtectedRequest) => Promise<ProtectedResult>;
55
+ readonly gate: (request: GateRequest) => Promise<GateResult>;
56
+ }
57
+ export declare function isStepBridge(value: unknown): value is StepBridge;
@@ -0,0 +1,4 @@
1
+ export const stepBridgeKey = "cloving.step-bridge/v1";
2
+ export function isStepBridge(value) {
3
+ return ["effect", "gate"].every((member) => typeof Reflect.get(Object(value), member) === "function");
4
+ }
@@ -0,0 +1,2 @@
1
+ import { type GateRequest, type GateResult } from "../step-bridge.ts";
2
+ export declare function decisionGate(request: GateRequest): Promise<GateResult>;
@@ -0,0 +1,8 @@
1
+ import { isStepBridge, stepBridgeKey, } from "../step-bridge.js";
2
+ export async function decisionGate(request) {
3
+ "use step";
4
+ const bridge = Reflect.get(globalThis, Symbol.for(stepBridgeKey));
5
+ if (!isStepBridge(bridge))
6
+ return { kind: "unavailable", reason: "cloving-host-unavailable" };
7
+ return await bridge.gate(request);
8
+ }
@@ -0,0 +1,10 @@
1
+ import type { DevelopmentInput } from "../workflow-contracts.ts";
2
+ export type CycleLoad = {
3
+ readonly kind: "unavailable";
4
+ readonly reason: "cloving-host-unavailable";
5
+ readonly cycleId: string;
6
+ } | {
7
+ readonly kind: "invalid";
8
+ readonly reason: "invalid-development-input";
9
+ };
10
+ export declare function loadCycle(input: DevelopmentInput): Promise<CycleLoad>;
@@ -0,0 +1,11 @@
1
+ import { validateDevelopmentInput } from "../workflow-contracts.js";
2
+ export async function loadCycle(input) {
3
+ "use step";
4
+ return Promise.resolve(validateDevelopmentInput(input).kind === "invalid"
5
+ ? { kind: "invalid", reason: "invalid-development-input" }
6
+ : {
7
+ kind: "unavailable",
8
+ reason: "cloving-host-unavailable",
9
+ cycleId: input.cycleId,
10
+ });
11
+ }
@@ -0,0 +1,2 @@
1
+ import { type ProtectedRequest, type ProtectedResult } from "../step-bridge.ts";
2
+ export declare function protectedEffect(request: ProtectedRequest): Promise<ProtectedResult>;
@@ -0,0 +1,8 @@
1
+ import { isStepBridge, stepBridgeKey, } from "../step-bridge.js";
2
+ export async function protectedEffect(request) {
3
+ "use step";
4
+ const bridge = Reflect.get(globalThis, Symbol.for(stepBridgeKey));
5
+ if (!isStepBridge(bridge))
6
+ return { kind: "unavailable", reason: "cloving-host-unavailable" };
7
+ return await bridge.effect(request);
8
+ }
@@ -0,0 +1,54 @@
1
+ import { type SqlConnection } from "./domain-rows.ts";
2
+ export interface GateRow {
3
+ readonly runId: string;
4
+ readonly gateId: string;
5
+ readonly kind: string;
6
+ readonly label: number | null;
7
+ readonly subject: string | null;
8
+ readonly prompt: string | null;
9
+ readonly expiresAt: string | null;
10
+ readonly generation: number;
11
+ readonly revision: number;
12
+ readonly wait: string;
13
+ readonly decision: string | null;
14
+ readonly answer: string | null;
15
+ readonly decidedSequence: number | null;
16
+ readonly openedSequence: number;
17
+ readonly continuation: string | null;
18
+ }
19
+ export interface DetailRow {
20
+ readonly runId: string;
21
+ readonly generation: number;
22
+ readonly submission: string | null;
23
+ readonly input: string | null;
24
+ readonly resolver: string | null;
25
+ readonly condition: string | null;
26
+ readonly reason: string | null;
27
+ readonly evidence: string | null;
28
+ readonly retryAt: string | null;
29
+ readonly attempt: number | null;
30
+ readonly attemptLimit: number | null;
31
+ readonly observedSequence: number | null;
32
+ readonly observedAt: string | null;
33
+ readonly observedOperation: string | null;
34
+ }
35
+ export interface DocumentRow {
36
+ readonly digest: string;
37
+ readonly body: string;
38
+ }
39
+ export interface DecisionRows {
40
+ readonly gates: readonly GateRow[];
41
+ readonly details: readonly DetailRow[];
42
+ }
43
+ export declare const gateColumns = "run_id, gate_id, kind, label, subject, prompt, expires_at, generation, revision, wait, decision, answer, decided_sequence, opened_sequence, continuation";
44
+ export declare const detailColumns = "run_id, generation, submission, input, resolver, condition, reason, evidence, retry_at, attempt, attempt_limit, observed_sequence, observed_at, observed_operation";
45
+ export declare function gateRow(row: unknown): GateRow;
46
+ export declare function detailRow(row: unknown): DetailRow;
47
+ export declare function documentRow(row: unknown): DocumentRow;
48
+ export declare function loadDecisions(connection: SqlConnection): Promise<DecisionRows>;
49
+ export declare function loadDocuments(connection: SqlConnection): Promise<readonly DocumentRow[]>;
50
+ export declare function runDecisions(connection: SqlConnection, runId: string): Promise<DecisionRows & {
51
+ readonly questions: number;
52
+ }>;
53
+ export declare function storedDigests(connection: SqlConnection, digests: readonly string[]): Promise<readonly string[]>;
54
+ export declare function documentBody(connection: SqlConnection, digest: string): Promise<string | undefined>;
@@ -0,0 +1,72 @@
1
+ import { integer, optionalInteger, optionalText, text, } from "./domain-rows.js";
2
+ export const gateColumns = "run_id, gate_id, kind, label, subject, prompt, expires_at, generation, revision, wait, decision, answer, decided_sequence, opened_sequence, continuation";
3
+ export const detailColumns = "run_id, generation, submission, input, resolver, condition, reason, evidence, retry_at, attempt, attempt_limit, observed_sequence, observed_at, observed_operation";
4
+ export function gateRow(row) {
5
+ return {
6
+ runId: text(row, "run_id"),
7
+ gateId: text(row, "gate_id"),
8
+ kind: text(row, "kind"),
9
+ label: optionalInteger(row, "label"),
10
+ subject: optionalText(row, "subject"),
11
+ prompt: optionalText(row, "prompt"),
12
+ expiresAt: optionalText(row, "expires_at"),
13
+ generation: integer(row, "generation"),
14
+ revision: integer(row, "revision"),
15
+ wait: text(row, "wait"),
16
+ decision: optionalText(row, "decision"),
17
+ answer: optionalText(row, "answer"),
18
+ decidedSequence: optionalInteger(row, "decided_sequence"),
19
+ openedSequence: integer(row, "opened_sequence"),
20
+ continuation: optionalText(row, "continuation"),
21
+ };
22
+ }
23
+ export function detailRow(row) {
24
+ return {
25
+ runId: text(row, "run_id"),
26
+ generation: integer(row, "generation"),
27
+ submission: optionalText(row, "submission"),
28
+ input: optionalText(row, "input"),
29
+ resolver: optionalText(row, "resolver"),
30
+ condition: optionalText(row, "condition"),
31
+ reason: optionalText(row, "reason"),
32
+ evidence: optionalText(row, "evidence"),
33
+ retryAt: optionalText(row, "retry_at"),
34
+ attempt: optionalInteger(row, "attempt"),
35
+ attemptLimit: optionalInteger(row, "attempt_limit"),
36
+ observedSequence: optionalInteger(row, "observed_sequence"),
37
+ observedAt: optionalText(row, "observed_at"),
38
+ observedOperation: optionalText(row, "observed_operation"),
39
+ };
40
+ }
41
+ export function documentRow(row) {
42
+ return { digest: text(row, "digest"), body: text(row, "body") };
43
+ }
44
+ export async function loadDecisions(connection) {
45
+ return {
46
+ gates: (await connection.all(`SELECT ${gateColumns} FROM gates ORDER BY opened_sequence, gate_id`)).map(gateRow),
47
+ details: (await connection.all(`SELECT ${detailColumns} FROM run_details ORDER BY run_id`)).map(detailRow),
48
+ };
49
+ }
50
+ export async function loadDocuments(connection) {
51
+ return (await connection.all("SELECT digest, body FROM documents ORDER BY digest")).map(documentRow);
52
+ }
53
+ export async function runDecisions(connection, runId) {
54
+ return {
55
+ gates: (await connection.all(`SELECT ${gateColumns} FROM gates WHERE run_id = ? ORDER BY opened_sequence, gate_id`, [runId])).map(gateRow),
56
+ details: (await connection.all(`SELECT ${detailColumns} FROM run_details WHERE run_id = ?`, [runId])).map(detailRow),
57
+ questions: integer(await connection.get("SELECT coalesce(max(label), 0) AS questions FROM gates"), "questions"),
58
+ };
59
+ }
60
+ export async function storedDigests(connection, digests) {
61
+ const found = [];
62
+ for (const digest of digests) {
63
+ const row = await connection.get("SELECT digest FROM documents WHERE digest = ?", [digest]);
64
+ if (row !== undefined)
65
+ found.push(digest);
66
+ }
67
+ return found;
68
+ }
69
+ export async function documentBody(connection, digest) {
70
+ const row = await connection.get("SELECT body FROM documents WHERE digest = ?", [digest]);
71
+ return row === undefined ? undefined : text(row, "body");
72
+ }
@@ -0,0 +1,17 @@
1
+ import { type DecisionRows, type DocumentRow } from "./decision-rows.ts";
2
+ import { type AttemptRow, type DomainSnapshot, type ProjectionRows, type SqlConnection } from "./domain-rows.ts";
3
+ import { type EffectRows } from "./effect-rows.ts";
4
+ export interface ProjectionSnapshot extends ProjectionRows, DecisionRows {
5
+ readonly deliveries: readonly AttemptRow[];
6
+ readonly pending: readonly string[];
7
+ readonly sequence: number;
8
+ }
9
+ export interface DecidedSnapshot extends DomainSnapshot, DecisionRows {
10
+ readonly documents: readonly DocumentRow[];
11
+ }
12
+ export interface CurrentSnapshot extends DecidedSnapshot {
13
+ readonly effects: EffectRows;
14
+ }
15
+ export declare function loadProjections(connection: SqlConnection): Promise<ProjectionSnapshot>;
16
+ export declare function loadDecided(connection: SqlConnection): Promise<DecidedSnapshot>;
17
+ export declare function loadCurrent(connection: SqlConnection): Promise<CurrentSnapshot>;
@@ -0,0 +1,25 @@
1
+ import { loadDecisions, loadDocuments, } from "./decision-rows.js";
2
+ import { latestSequence, loadAttempts, loadSnapshot, projectionRows, text, } from "./domain-rows.js";
3
+ import { loadEffects } from "./effect-rows.js";
4
+ export async function loadProjections(connection) {
5
+ return {
6
+ ...(await projectionRows(connection)),
7
+ ...(await loadDecisions(connection)),
8
+ deliveries: await loadAttempts(connection),
9
+ pending: (await connection.all("SELECT operation_id FROM operations WHERE status = 'dispatch-pending' ORDER BY operation_id")).map((row) => text(row, "operation_id")),
10
+ sequence: await latestSequence(connection),
11
+ };
12
+ }
13
+ export async function loadDecided(connection) {
14
+ return {
15
+ ...(await loadSnapshot(connection)),
16
+ ...(await loadDecisions(connection)),
17
+ documents: await loadDocuments(connection),
18
+ };
19
+ }
20
+ export async function loadCurrent(connection) {
21
+ return {
22
+ ...(await loadDecided(connection)),
23
+ effects: await loadEffects(connection),
24
+ };
25
+ }
@@ -0,0 +1,48 @@
1
+ import { type DetailRow, type DocumentRow, type GateRow } from "./decision-rows.ts";
2
+ import { type CommandRow, type DefinitionRow, type EventRow, type RunRow, type SqlConnection } from "./domain-rows.ts";
3
+ import { type EffectRows } from "./effect-rows.ts";
4
+ import { type Statement } from "./statements.ts";
5
+ export interface StagedDelivery {
6
+ readonly effectId: string;
7
+ readonly operationId: string;
8
+ readonly inputDigest: string;
9
+ readonly purpose: string;
10
+ readonly leaseGeneration: number | null;
11
+ readonly authorityEpoch: number;
12
+ }
13
+ export interface ClosedDelivery {
14
+ readonly effectId: string;
15
+ readonly outcome: string;
16
+ readonly receipt: string | null;
17
+ }
18
+ export interface AddedIntent {
19
+ readonly operationId: string;
20
+ readonly kind: string;
21
+ readonly runId: string;
22
+ readonly createdSequence: number;
23
+ }
24
+ export interface ReleasedIntent {
25
+ readonly operationId: string;
26
+ readonly releasedSequence: number;
27
+ }
28
+ export interface DomainChange extends EffectRows {
29
+ readonly previous: number;
30
+ readonly sequence: number;
31
+ readonly definitions: readonly DefinitionRow[];
32
+ readonly events: readonly EventRow[];
33
+ readonly runs: readonly RunRow[];
34
+ readonly commands: readonly CommandRow[];
35
+ readonly added: readonly AddedIntent[];
36
+ readonly released: readonly ReleasedIntent[];
37
+ readonly staged: readonly StagedDelivery[];
38
+ readonly closed: readonly ClosedDelivery[];
39
+ readonly gates: readonly GateRow[];
40
+ readonly details: readonly DetailRow[];
41
+ readonly documents: readonly DocumentRow[];
42
+ readonly completesAdoption: boolean;
43
+ }
44
+ export declare function persistChange(value: unknown, connection: SqlConnection): Promise<void>;
45
+ export declare function gateParameters(row: GateRow): readonly unknown[];
46
+ export declare function detailParameters(row: DetailRow): readonly unknown[];
47
+ export declare function decisionStatements(change: Pick<DomainChange, "gates" | "details" | "documents">): readonly Statement[];
48
+ export declare function persistDecisions(connection: SqlConnection, rows: Pick<DomainChange, "gates" | "details" | "documents">): Promise<void>;
@@ -0,0 +1,213 @@
1
+ import { detailColumns, detailRow, documentRow, gateColumns, gateRow, } from "./decision-rows.js";
2
+ import { commandRow, definitionRow, eventRow, integer, latestSequence, optionalInteger, optionalText, runRow, text, } from "./domain-rows.js";
3
+ import { effectStatements } from "./effect-changes.js";
4
+ import { budgetRow, evidenceRow, leaseRow, operationRow, stopRow, } from "./effect-rows.js";
5
+ import { upsert } from "./statements.js";
6
+ export async function persistChange(value, connection) {
7
+ const change = parseChange(value);
8
+ if ((await latestSequence(connection)) !== change.previous)
9
+ throw new Error("stale-authority-sequence");
10
+ for (const statement of statements(change))
11
+ await connection.run(statement.sql, statement.parameters);
12
+ }
13
+ function statements(change) {
14
+ return [
15
+ ...change.definitions.map((row) => ({
16
+ sql: "INSERT INTO definitions (pin, manifest) VALUES (?, ?) ON CONFLICT (pin) DO NOTHING",
17
+ parameters: [row.pin, row.manifest],
18
+ })),
19
+ ...change.events.map((row) => ({
20
+ sql: "INSERT INTO events (sequence, type, run_id, command_id, recorded_at, request, payload) VALUES (?, ?, ?, ?, ?, ?, ?)",
21
+ parameters: [
22
+ row.sequence,
23
+ row.type,
24
+ row.runId,
25
+ row.commandId,
26
+ row.recordedAt,
27
+ row.request,
28
+ row.payload,
29
+ ],
30
+ })),
31
+ ...change.runs.map((row) => ({
32
+ sql: "INSERT INTO runs (run_id, status, revision, workflow, paused_from, gates, sequence) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (run_id) DO UPDATE SET status = excluded.status, revision = excluded.revision, workflow = excluded.workflow, paused_from = excluded.paused_from, gates = excluded.gates, sequence = excluded.sequence",
33
+ parameters: [
34
+ row.runId,
35
+ row.status,
36
+ row.revision,
37
+ row.workflow,
38
+ row.pausedFrom,
39
+ row.gates,
40
+ row.sequence,
41
+ ],
42
+ })),
43
+ ...change.commands.map((row) => ({
44
+ sql: "INSERT INTO commands (command_id, request, sequence) VALUES (?, ?, ?)",
45
+ parameters: [row.commandId, row.request, row.sequence],
46
+ })),
47
+ ...intentStatements(change),
48
+ ...deliveryStatements(change),
49
+ ...decisionStatements(change),
50
+ ...effectStatements(change),
51
+ ...(change.completesAdoption
52
+ ? [
53
+ {
54
+ sql: "UPDATE authority_identity SET adoption_sequence = NULL WHERE singleton = 1 AND adoption_sequence = ?",
55
+ parameters: [change.sequence],
56
+ },
57
+ ]
58
+ : []),
59
+ ];
60
+ }
61
+ function intentStatements(change) {
62
+ return [
63
+ ...change.added.map((row) => ({
64
+ sql: "INSERT INTO outbox (operation_id, kind, run_id, created_sequence) VALUES (?, ?, ?, ?)",
65
+ parameters: [row.operationId, row.kind, row.runId, row.createdSequence],
66
+ })),
67
+ ...change.released.map((row) => ({
68
+ sql: "UPDATE outbox SET released_sequence = ? WHERE operation_id = ? AND released_sequence IS NULL",
69
+ parameters: [row.releasedSequence, row.operationId],
70
+ })),
71
+ ];
72
+ }
73
+ function deliveryStatements(change) {
74
+ return [
75
+ ...change.closed.map((row) => ({
76
+ sql: "UPDATE deliveries SET outcome = ?, receipt = ? WHERE effect_id = ? AND outcome IS NULL",
77
+ parameters: [row.outcome, row.receipt, row.effectId],
78
+ })),
79
+ ...change.staged.flatMap((row) => [
80
+ {
81
+ sql: "INSERT INTO deliveries (effect_id, operation_id, input_digest, staged_sequence) VALUES (?, ?, ?, ?)",
82
+ parameters: [
83
+ row.effectId,
84
+ row.operationId,
85
+ row.inputDigest,
86
+ change.sequence,
87
+ ],
88
+ },
89
+ {
90
+ sql: "INSERT INTO dispatch_attempts (effect_id, purpose, lease_generation, authority_epoch) VALUES (?, ?, ?, ?)",
91
+ parameters: [
92
+ row.effectId,
93
+ row.purpose,
94
+ row.leaseGeneration,
95
+ row.authorityEpoch,
96
+ ],
97
+ },
98
+ ]),
99
+ ];
100
+ }
101
+ const gateNames = gateColumns.split(", ");
102
+ const detailNames = detailColumns.split(", ");
103
+ const gateUpsert = upsert({ table: "gates", names: gateNames, key: 2 });
104
+ const detailUpsert = upsert({
105
+ table: "run_details",
106
+ names: detailNames,
107
+ key: 1,
108
+ });
109
+ export function gateParameters(row) {
110
+ return [
111
+ row.runId,
112
+ row.gateId,
113
+ row.kind,
114
+ row.label,
115
+ row.subject,
116
+ row.prompt,
117
+ row.expiresAt,
118
+ row.generation,
119
+ row.revision,
120
+ row.wait,
121
+ row.decision,
122
+ row.answer,
123
+ row.decidedSequence,
124
+ row.openedSequence,
125
+ row.continuation,
126
+ ];
127
+ }
128
+ export function detailParameters(row) {
129
+ return [
130
+ row.runId,
131
+ row.generation,
132
+ row.submission,
133
+ row.input,
134
+ row.resolver,
135
+ row.condition,
136
+ row.reason,
137
+ row.evidence,
138
+ row.retryAt,
139
+ row.attempt,
140
+ row.attemptLimit,
141
+ row.observedSequence,
142
+ row.observedAt,
143
+ row.observedOperation,
144
+ ];
145
+ }
146
+ export function decisionStatements(change) {
147
+ return [
148
+ ...change.gates.map((row) => ({
149
+ sql: gateUpsert,
150
+ parameters: gateParameters(row),
151
+ })),
152
+ ...change.details.map((row) => ({
153
+ sql: detailUpsert,
154
+ parameters: detailParameters(row),
155
+ })),
156
+ ...change.documents.map((row) => ({
157
+ sql: "INSERT INTO documents (digest, body) VALUES (?, ?) ON CONFLICT (digest) DO NOTHING",
158
+ parameters: [row.digest, row.body],
159
+ })),
160
+ ];
161
+ }
162
+ export async function persistDecisions(connection, rows) {
163
+ for (const statement of decisionStatements(rows))
164
+ await connection.run(statement.sql, statement.parameters);
165
+ }
166
+ function parseChange(value) {
167
+ return {
168
+ previous: integer(value, "previous"),
169
+ sequence: integer(value, "sequence"),
170
+ definitions: list(value, "definitions").map(definitionRow),
171
+ events: list(value, "events").map(eventRow),
172
+ runs: list(value, "runs").map(runRow),
173
+ commands: list(value, "commands").map(commandRow),
174
+ added: list(value, "added").map((row) => ({
175
+ operationId: text(row, "operation_id"),
176
+ kind: text(row, "kind"),
177
+ runId: text(row, "run_id"),
178
+ createdSequence: integer(row, "created_sequence"),
179
+ })),
180
+ released: list(value, "released").map((row) => ({
181
+ operationId: text(row, "operation_id"),
182
+ releasedSequence: integer(row, "released_sequence"),
183
+ })),
184
+ staged: list(value, "staged").map((row) => ({
185
+ effectId: text(row, "effect_id"),
186
+ operationId: text(row, "operation_id"),
187
+ inputDigest: text(row, "input_digest"),
188
+ purpose: text(row, "purpose"),
189
+ leaseGeneration: optionalInteger(row, "lease_generation"),
190
+ authorityEpoch: integer(row, "authority_epoch"),
191
+ })),
192
+ closed: list(value, "closed").map((row) => ({
193
+ effectId: text(row, "effect_id"),
194
+ outcome: text(row, "outcome"),
195
+ receipt: optionalText(row, "receipt"),
196
+ })),
197
+ gates: list(value, "gates").map(gateRow),
198
+ details: list(value, "details").map(detailRow),
199
+ documents: list(value, "documents").map(documentRow),
200
+ budgets: list(value, "budgets").map(budgetRow),
201
+ operations: list(value, "operations").map(operationRow),
202
+ leases: list(value, "leases").map(leaseRow),
203
+ evidence: list(value, "evidence").map(evidenceRow),
204
+ stops: list(value, "stops").map(stopRow),
205
+ completesAdoption: Reflect.get(Object(value), "completes_adoption") === true,
206
+ };
207
+ }
208
+ function list(value, name) {
209
+ const items = Reflect.get(Object(value), name);
210
+ if (!Array.isArray(items))
211
+ throw new Error(`invalid-column: ${name}`);
212
+ return items;
213
+ }