cloving 0.3.20 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. package/{LICENSE.md → LICENSE} +1 -1
  2. package/README.md +606 -182
  3. package/dist/src/authority/budgets.d.ts +12 -0
  4. package/dist/src/authority/budgets.js +42 -0
  5. package/dist/src/authority/commands.d.ts +7 -0
  6. package/dist/src/authority/commands.js +271 -0
  7. package/dist/src/authority/details.d.ts +28 -0
  8. package/dist/src/authority/details.js +33 -0
  9. package/dist/src/authority/dispatch-decision.d.ts +40 -0
  10. package/dist/src/authority/dispatch-decision.js +47 -0
  11. package/dist/src/authority/effect-requests.d.ts +2 -0
  12. package/dist/src/authority/effect-requests.js +139 -0
  13. package/dist/src/authority/effect-results.d.ts +4 -0
  14. package/dist/src/authority/effect-results.js +236 -0
  15. package/dist/src/authority/events.d.ts +2 -0
  16. package/dist/src/authority/events.js +45 -0
  17. package/dist/src/authority/gate-reduction.d.ts +8 -0
  18. package/dist/src/authority/gate-reduction.js +109 -0
  19. package/dist/src/authority/gates.d.ts +48 -0
  20. package/dist/src/authority/gates.js +77 -0
  21. package/dist/src/authority/history-state.d.ts +15 -0
  22. package/dist/src/authority/history-state.js +61 -0
  23. package/dist/src/authority/history.d.ts +13 -0
  24. package/dist/src/authority/history.js +37 -0
  25. package/dist/src/authority/instants.d.ts +3 -0
  26. package/dist/src/authority/instants.js +38 -0
  27. package/dist/src/authority/leases.d.ts +15 -0
  28. package/dist/src/authority/leases.js +113 -0
  29. package/dist/src/authority/operations.d.ts +101 -0
  30. package/dist/src/authority/operations.js +75 -0
  31. package/dist/src/authority/reconciliation.d.ts +29 -0
  32. package/dist/src/authority/reconciliation.js +156 -0
  33. package/dist/src/authority/reducer.d.ts +41 -0
  34. package/dist/src/authority/reducer.js +139 -0
  35. package/dist/src/authority/reduction-state.d.ts +36 -0
  36. package/dist/src/authority/reduction-state.js +68 -0
  37. package/dist/src/authority/reduction.d.ts +6 -0
  38. package/dist/src/authority/reduction.js +160 -0
  39. package/dist/src/authority/status-closure.d.ts +4 -0
  40. package/dist/src/authority/status-closure.js +57 -0
  41. package/dist/src/authority/status-effects.d.ts +17 -0
  42. package/dist/src/authority/status-effects.js +43 -0
  43. package/dist/src/authority/status-input.d.ts +45 -0
  44. package/dist/src/authority/status-input.js +9 -0
  45. package/dist/src/authority/status.d.ts +32 -0
  46. package/dist/src/authority/status.js +256 -0
  47. package/dist/src/authority/stop-sequence.d.ts +37 -0
  48. package/dist/src/authority/stop-sequence.js +91 -0
  49. package/dist/src/authority/transitions.d.ts +63 -0
  50. package/dist/src/authority/transitions.js +124 -0
  51. package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
  52. package/dist/src/broker/actor/adapter-calls.js +34 -0
  53. package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
  54. package/dist/src/broker/actor/adapter-outcomes.js +80 -0
  55. package/dist/src/broker/actor/authority-actor.d.ts +25 -0
  56. package/dist/src/broker/actor/authority-actor.js +169 -0
  57. package/dist/src/broker/actor/authority-changes.d.ts +31 -0
  58. package/dist/src/broker/actor/authority-changes.js +46 -0
  59. package/dist/src/broker/actor/authority-connection.d.ts +15 -0
  60. package/dist/src/broker/actor/authority-connection.js +44 -0
  61. package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
  62. package/dist/src/broker/actor/authority-conversion.js +72 -0
  63. package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
  64. package/dist/src/broker/actor/authority-delivery.js +162 -0
  65. package/dist/src/broker/actor/authority-logger.d.ts +2 -0
  66. package/dist/src/broker/actor/authority-logger.js +19 -0
  67. package/dist/src/broker/actor/authority-policy.d.ts +9 -0
  68. package/dist/src/broker/actor/authority-policy.js +11 -0
  69. package/dist/src/broker/actor/authority-queries.d.ts +45 -0
  70. package/dist/src/broker/actor/authority-queries.js +85 -0
  71. package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
  72. package/dist/src/broker/actor/authority-receipts.js +84 -0
  73. package/dist/src/broker/actor/authority-release.d.ts +13 -0
  74. package/dist/src/broker/actor/authority-release.js +69 -0
  75. package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
  76. package/dist/src/broker/actor/authority-runtime.js +204 -0
  77. package/dist/src/broker/actor/authority-session.d.ts +67 -0
  78. package/dist/src/broker/actor/authority-session.js +251 -0
  79. package/dist/src/broker/actor/authority-settings.d.ts +33 -0
  80. package/dist/src/broker/actor/authority-settings.js +63 -0
  81. package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
  82. package/dist/src/broker/actor/authority-upgrades.js +12 -0
  83. package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
  84. package/dist/src/broker/actor/authority-watchdog.js +41 -0
  85. package/dist/src/broker/actor/authority.d.ts +14 -0
  86. package/dist/src/broker/actor/authority.js +115 -0
  87. package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
  88. package/dist/src/broker/actor/delivery-intents.js +77 -0
  89. package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
  90. package/dist/src/broker/actor/delivery-plan.js +109 -0
  91. package/dist/src/broker/actor/delivery-results.d.ts +11 -0
  92. package/dist/src/broker/actor/delivery-results.js +63 -0
  93. package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
  94. package/dist/src/broker/actor/effect-delivery.js +118 -0
  95. package/dist/src/broker/actor/effect-plan.d.ts +41 -0
  96. package/dist/src/broker/actor/effect-plan.js +173 -0
  97. package/dist/src/broker/actor/effect-queries.d.ts +27 -0
  98. package/dist/src/broker/actor/effect-queries.js +80 -0
  99. package/dist/src/broker/actor/effect-turn.d.ts +25 -0
  100. package/dist/src/broker/actor/effect-turn.js +84 -0
  101. package/dist/src/broker/actor/pin-check.d.ts +6 -0
  102. package/dist/src/broker/actor/pin-check.js +12 -0
  103. package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
  104. package/dist/src/broker/actor/runtime-parts.js +34 -0
  105. package/dist/src/broker/actor/stop-plan.d.ts +20 -0
  106. package/dist/src/broker/actor/stop-plan.js +46 -0
  107. package/dist/src/broker/actor/stop-turn.d.ts +17 -0
  108. package/dist/src/broker/actor/stop-turn.js +42 -0
  109. package/dist/src/broker/actor/turn-draft.d.ts +31 -0
  110. package/dist/src/broker/actor/turn-draft.js +138 -0
  111. package/dist/src/broker/actor/turn-plan.d.ts +17 -0
  112. package/dist/src/broker/actor/turn-plan.js +136 -0
  113. package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
  114. package/dist/src/broker/actor/turn-refusals.js +35 -0
  115. package/dist/src/broker/actor/turn-staging.d.ts +78 -0
  116. package/dist/src/broker/actor/turn-staging.js +34 -0
  117. package/dist/src/broker/actor/turn-state.d.ts +34 -0
  118. package/dist/src/broker/actor/turn-state.js +208 -0
  119. package/dist/src/broker/authority-admission.d.ts +21 -0
  120. package/dist/src/broker/authority-admission.js +70 -0
  121. package/dist/src/broker/authority-restore.d.ts +30 -0
  122. package/dist/src/broker/authority-restore.js +165 -0
  123. package/dist/src/broker/decision-restore.d.ts +16 -0
  124. package/dist/src/broker/decision-restore.js +158 -0
  125. package/dist/src/broker/decision-upgrade.d.ts +3 -0
  126. package/dist/src/broker/decision-upgrade.js +12 -0
  127. package/dist/src/broker/effect-restore.d.ts +20 -0
  128. package/dist/src/broker/effect-restore.js +111 -0
  129. package/dist/src/broker/effect-upgrade.d.ts +3 -0
  130. package/dist/src/broker/effect-upgrade.js +9 -0
  131. package/dist/src/broker/operation-digest.d.ts +1 -0
  132. package/dist/src/broker/operation-digest.js +4 -0
  133. package/dist/src/broker/socket-address.d.ts +9 -0
  134. package/dist/src/broker/socket-address.js +14 -0
  135. package/dist/src/broker/workflow-pin.d.ts +2 -0
  136. package/dist/src/broker/workflow-pin.js +5 -0
  137. package/dist/src/chats/analysis-batches.d.ts +24 -0
  138. package/dist/src/chats/analysis-batches.js +83 -0
  139. package/dist/src/chats/analysis-contract.d.ts +80 -0
  140. package/dist/src/chats/analysis-contract.js +16 -0
  141. package/dist/src/chats/analysis-data.d.ts +3 -0
  142. package/dist/src/chats/analysis-data.js +85 -0
  143. package/dist/src/chats/analysis-input.d.ts +12 -0
  144. package/dist/src/chats/analysis-input.js +83 -0
  145. package/dist/src/chats/analysis-links.d.ts +2 -0
  146. package/dist/src/chats/analysis-links.js +25 -0
  147. package/dist/src/chats/analysis-prompt.d.ts +10 -0
  148. package/dist/src/chats/analysis-prompt.js +16 -0
  149. package/dist/src/chats/analysis-proposal.d.ts +2 -0
  150. package/dist/src/chats/analysis-proposal.js +32 -0
  151. package/dist/src/chats/analysis-provenance.d.ts +4 -0
  152. package/dist/src/chats/analysis-provenance.js +99 -0
  153. package/dist/src/chats/analysis-shape.d.ts +3 -0
  154. package/dist/src/chats/analysis-shape.js +228 -0
  155. package/dist/src/chats/analysis.d.ts +3 -0
  156. package/dist/src/chats/analysis.js +42 -0
  157. package/dist/src/chats/corpus-input.d.ts +5 -0
  158. package/dist/src/chats/corpus-input.js +288 -0
  159. package/dist/src/chats/destination.d.ts +4 -0
  160. package/dist/src/chats/destination.js +96 -0
  161. package/dist/src/chats/import.d.ts +15 -0
  162. package/dist/src/chats/import.js +243 -0
  163. package/dist/src/chats/input-file.d.ts +3 -0
  164. package/dist/src/chats/input-file.js +32 -0
  165. package/dist/src/chats/normalize.d.ts +29 -0
  166. package/dist/src/chats/normalize.js +155 -0
  167. package/dist/src/chats/previous-import.d.ts +5 -0
  168. package/dist/src/chats/previous-import.js +34 -0
  169. package/dist/src/chats/reader.d.ts +21 -0
  170. package/dist/src/chats/reader.js +118 -0
  171. package/dist/src/chats/redact-import.d.ts +14 -0
  172. package/dist/src/chats/redact-import.js +141 -0
  173. package/dist/src/chats/redaction.d.ts +41 -0
  174. package/dist/src/chats/redaction.js +161 -0
  175. package/dist/src/chats/revision-input.d.ts +3 -0
  176. package/dist/src/chats/revision-input.js +180 -0
  177. package/dist/src/chats/revision.d.ts +48 -0
  178. package/dist/src/chats/revision.js +94 -0
  179. package/dist/src/chats/selection.d.ts +25 -0
  180. package/dist/src/chats/selection.js +109 -0
  181. package/dist/src/chats/source.d.ts +23 -0
  182. package/dist/src/chats/source.js +135 -0
  183. package/dist/src/chats/structure.d.ts +57 -0
  184. package/dist/src/chats/structure.js +216 -0
  185. package/dist/src/cli/arguments.d.ts +31 -0
  186. package/dist/src/cli/arguments.js +235 -0
  187. package/dist/src/cli/client.d.ts +16 -0
  188. package/dist/src/cli/client.js +159 -0
  189. package/dist/src/cli/commands.d.ts +17 -0
  190. package/dist/src/cli/commands.js +271 -0
  191. package/dist/src/cli/main.d.ts +2 -0
  192. package/dist/src/cli/main.js +127 -0
  193. package/dist/src/cli/render.d.ts +10 -0
  194. package/dist/src/cli/render.js +254 -0
  195. package/dist/src/cli/runtime-arguments.d.ts +73 -0
  196. package/dist/src/cli/runtime-arguments.js +248 -0
  197. package/dist/src/cli/runtime-directory.d.ts +4 -0
  198. package/dist/src/cli/runtime-directory.js +25 -0
  199. package/dist/src/cli/toolchain.d.ts +3 -0
  200. package/dist/src/cli/toolchain.js +74 -0
  201. package/dist/src/cli/usage-render.d.ts +3 -0
  202. package/dist/src/cli/usage-render.js +28 -0
  203. package/dist/src/cli/usage.d.ts +5 -0
  204. package/dist/src/cli/usage.js +156 -0
  205. package/dist/src/cli/validate.d.ts +38 -0
  206. package/dist/src/cli/validate.js +116 -0
  207. package/dist/src/cli/watch-actions.d.ts +10 -0
  208. package/dist/src/cli/watch-actions.js +58 -0
  209. package/dist/src/cli/watch-board-view.d.ts +54 -0
  210. package/dist/src/cli/watch-board-view.js +201 -0
  211. package/dist/src/cli/watch-board.d.ts +15 -0
  212. package/dist/src/cli/watch-board.js +179 -0
  213. package/dist/src/cli/watch-card-client.d.ts +1 -0
  214. package/dist/src/cli/watch-card-client.js +44 -0
  215. package/dist/src/cli/watch-card-forms.d.ts +2 -0
  216. package/dist/src/cli/watch-card-forms.js +33 -0
  217. package/dist/src/cli/watch-card-reply.d.ts +5 -0
  218. package/dist/src/cli/watch-card-reply.js +34 -0
  219. package/dist/src/cli/watch-card-view.d.ts +40 -0
  220. package/dist/src/cli/watch-card-view.js +86 -0
  221. package/dist/src/cli/watch-client.d.ts +1 -0
  222. package/dist/src/cli/watch-client.js +118 -0
  223. package/dist/src/cli/watch-element.d.ts +11 -0
  224. package/dist/src/cli/watch-element.js +6 -0
  225. package/dist/src/cli/watch-model.d.ts +29 -0
  226. package/dist/src/cli/watch-model.js +278 -0
  227. package/dist/src/cli/watch-navigation.d.ts +9 -0
  228. package/dist/src/cli/watch-navigation.js +40 -0
  229. package/dist/src/cli/watch-page.d.ts +1 -0
  230. package/dist/src/cli/watch-page.js +258 -0
  231. package/dist/src/cli/watch-paths.d.ts +2 -0
  232. package/dist/src/cli/watch-paths.js +52 -0
  233. package/dist/src/cli/watch-phases.d.ts +7 -0
  234. package/dist/src/cli/watch-phases.js +148 -0
  235. package/dist/src/cli/watch-pr-board.d.ts +3 -0
  236. package/dist/src/cli/watch-pr-board.js +26 -0
  237. package/dist/src/cli/watch-pr-command.d.ts +15 -0
  238. package/dist/src/cli/watch-pr-command.js +37 -0
  239. package/dist/src/cli/watch-pr-identity.d.ts +20 -0
  240. package/dist/src/cli/watch-pr-identity.js +62 -0
  241. package/dist/src/cli/watch-pr-observer.d.ts +19 -0
  242. package/dist/src/cli/watch-pr-observer.js +108 -0
  243. package/dist/src/cli/watch-pr-settings.d.ts +8 -0
  244. package/dist/src/cli/watch-pr-settings.js +47 -0
  245. package/dist/src/cli/watch-reads.d.ts +28 -0
  246. package/dist/src/cli/watch-reads.js +248 -0
  247. package/dist/src/cli/watch-render.d.ts +153 -0
  248. package/dist/src/cli/watch-render.js +102 -0
  249. package/dist/src/cli/watch-run-input.d.ts +14 -0
  250. package/dist/src/cli/watch-run-input.js +49 -0
  251. package/dist/src/cli/watch-server.d.ts +13 -0
  252. package/dist/src/cli/watch-server.js +214 -0
  253. package/dist/src/cli/watch-start-view.d.ts +18 -0
  254. package/dist/src/cli/watch-start-view.js +77 -0
  255. package/dist/src/cli/watch-stream.d.ts +11 -0
  256. package/dist/src/cli/watch-stream.js +128 -0
  257. package/dist/src/cli/watch-turn.d.ts +30 -0
  258. package/dist/src/cli/watch-turn.js +135 -0
  259. package/dist/src/cli/watch-usage.d.ts +6 -0
  260. package/dist/src/cli/watch-usage.js +65 -0
  261. package/dist/src/cli/watch-view.d.ts +54 -0
  262. package/dist/src/cli/watch-view.js +267 -0
  263. package/dist/src/cli.d.ts +2 -0
  264. package/dist/src/cli.js +104 -0
  265. package/dist/src/daemon/analysis-launch.d.ts +5 -0
  266. package/dist/src/daemon/analysis-launch.js +81 -0
  267. package/dist/src/daemon/analysis-token.d.ts +6 -0
  268. package/dist/src/daemon/analysis-token.js +88 -0
  269. package/dist/src/daemon/analysis-worker.d.ts +22 -0
  270. package/dist/src/daemon/analysis-worker.js +219 -0
  271. package/dist/src/daemon/chats-files.d.ts +15 -0
  272. package/dist/src/daemon/chats-files.js +113 -0
  273. package/dist/src/daemon/chats-worker.d.ts +12 -0
  274. package/dist/src/daemon/chats-worker.js +200 -0
  275. package/dist/src/daemon/claude-turn.d.ts +38 -0
  276. package/dist/src/daemon/claude-turn.js +216 -0
  277. package/dist/src/daemon/claude-worker.d.ts +29 -0
  278. package/dist/src/daemon/claude-worker.js +276 -0
  279. package/dist/src/daemon/codex-stream.d.ts +4 -0
  280. package/dist/src/daemon/codex-stream.js +129 -0
  281. package/dist/src/daemon/daemon.d.ts +49 -0
  282. package/dist/src/daemon/daemon.js +195 -0
  283. package/dist/src/daemon/delivery-router.d.ts +10 -0
  284. package/dist/src/daemon/delivery-router.js +34 -0
  285. package/dist/src/daemon/github-calls.d.ts +29 -0
  286. package/dist/src/daemon/github-calls.js +127 -0
  287. package/dist/src/daemon/github-issue-methods.d.ts +3 -0
  288. package/dist/src/daemon/github-issue-methods.js +99 -0
  289. package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
  290. package/dist/src/daemon/github-issue-privacy.js +131 -0
  291. package/dist/src/daemon/github-merge.d.ts +18 -0
  292. package/dist/src/daemon/github-merge.js +259 -0
  293. package/dist/src/daemon/github-methods.d.ts +5 -0
  294. package/dist/src/daemon/github-methods.js +202 -0
  295. package/dist/src/daemon/github-operation.d.ts +38 -0
  296. package/dist/src/daemon/github-operation.js +57 -0
  297. package/dist/src/daemon/github-ticket-status.d.ts +3 -0
  298. package/dist/src/daemon/github-ticket-status.js +268 -0
  299. package/dist/src/daemon/github-worker.d.ts +17 -0
  300. package/dist/src/daemon/github-worker.js +281 -0
  301. package/dist/src/daemon/host-environment.d.ts +8 -0
  302. package/dist/src/daemon/host-environment.js +14 -0
  303. package/dist/src/daemon/issue-queue.d.ts +10 -0
  304. package/dist/src/daemon/issue-queue.js +254 -0
  305. package/dist/src/daemon/notify-message.d.ts +14 -0
  306. package/dist/src/daemon/notify-message.js +48 -0
  307. package/dist/src/daemon/notify.d.ts +12 -0
  308. package/dist/src/daemon/notify.js +161 -0
  309. package/dist/src/daemon/operation-journal.d.ts +43 -0
  310. package/dist/src/daemon/operation-journal.js +55 -0
  311. package/dist/src/daemon/retrying-turn.d.ts +9 -0
  312. package/dist/src/daemon/retrying-turn.js +185 -0
  313. package/dist/src/daemon/ticket-registration.d.ts +33 -0
  314. package/dist/src/daemon/ticket-registration.js +177 -0
  315. package/dist/src/daemon/ticket-source.d.ts +17 -0
  316. package/dist/src/daemon/ticket-source.js +36 -0
  317. package/dist/src/daemon/work-tree.d.ts +26 -0
  318. package/dist/src/daemon/work-tree.js +206 -0
  319. package/dist/src/effect-authorization.d.ts +21 -0
  320. package/dist/src/effect-authorization.js +14 -0
  321. package/dist/src/execution-pin.d.ts +4 -0
  322. package/dist/src/execution-pin.js +68 -0
  323. package/dist/src/host/start-delivery.d.ts +41 -0
  324. package/dist/src/host/start-delivery.js +68 -0
  325. package/dist/src/host/step-bridge-host.d.ts +79 -0
  326. package/dist/src/host/step-bridge-host.js +205 -0
  327. package/dist/src/host/step-claims.d.ts +31 -0
  328. package/dist/src/host/step-claims.js +85 -0
  329. package/dist/src/host/world-host.d.ts +21 -0
  330. package/dist/src/host/world-host.js +51 -0
  331. package/dist/src/host/world-reconciliation.d.ts +39 -0
  332. package/dist/src/host/world-reconciliation.js +81 -0
  333. package/dist/src/host/world-runs.d.ts +14 -0
  334. package/dist/src/host/world-runs.js +69 -0
  335. package/dist/src/operation-identity.d.ts +7 -0
  336. package/dist/src/operation-identity.js +59 -0
  337. package/dist/src/protocol.d.ts +35 -0
  338. package/dist/src/protocol.js +64 -0
  339. package/dist/src/resource-files.d.ts +1 -0
  340. package/dist/src/resource-files.js +29 -0
  341. package/dist/src/service/changes.d.ts +11 -0
  342. package/dist/src/service/changes.js +32 -0
  343. package/dist/src/service/decision-handler.d.ts +9 -0
  344. package/dist/src/service/decision-handler.js +233 -0
  345. package/dist/src/service/event-handler.d.ts +10 -0
  346. package/dist/src/service/event-handler.js +70 -0
  347. package/dist/src/service/expiry.d.ts +13 -0
  348. package/dist/src/service/expiry.js +53 -0
  349. package/dist/src/service/gateway.d.ts +21 -0
  350. package/dist/src/service/gateway.js +120 -0
  351. package/dist/src/service/registry.d.ts +40 -0
  352. package/dist/src/service/registry.js +13 -0
  353. package/dist/src/service/replies.d.ts +26 -0
  354. package/dist/src/service/replies.js +56 -0
  355. package/dist/src/service/run-handlers.d.ts +4 -0
  356. package/dist/src/service/run-handlers.js +263 -0
  357. package/dist/src/service/service.d.ts +58 -0
  358. package/dist/src/service/service.js +212 -0
  359. package/dist/src/service/submission-handler.d.ts +4 -0
  360. package/dist/src/service/submission-handler.js +206 -0
  361. package/dist/src/service/transport.d.ts +16 -0
  362. package/dist/src/service/transport.js +141 -0
  363. package/dist/src/service/worker-port.d.ts +85 -0
  364. package/dist/src/service/worker-port.js +126 -0
  365. package/dist/src/service/worker-totals.d.ts +3 -0
  366. package/dist/src/service/worker-totals.js +28 -0
  367. package/dist/src/step-bridge.d.ts +57 -0
  368. package/dist/src/step-bridge.js +4 -0
  369. package/dist/src/steps/decision-gate.d.ts +2 -0
  370. package/dist/src/steps/decision-gate.js +8 -0
  371. package/dist/src/steps/load-cycle.d.ts +10 -0
  372. package/dist/src/steps/load-cycle.js +11 -0
  373. package/dist/src/steps/protected-effect.d.ts +2 -0
  374. package/dist/src/steps/protected-effect.js +8 -0
  375. package/dist/src/storage/decision-rows.d.ts +54 -0
  376. package/dist/src/storage/decision-rows.js +72 -0
  377. package/dist/src/storage/decision-snapshots.d.ts +17 -0
  378. package/dist/src/storage/decision-snapshots.js +25 -0
  379. package/dist/src/storage/domain-changes.d.ts +48 -0
  380. package/dist/src/storage/domain-changes.js +213 -0
  381. package/dist/src/storage/domain-rows.d.ts +85 -0
  382. package/dist/src/storage/domain-rows.js +129 -0
  383. package/dist/src/storage/domain-schema.d.ts +32 -0
  384. package/dist/src/storage/domain-schema.js +193 -0
  385. package/dist/src/storage/effect-changes.d.ts +5 -0
  386. package/dist/src/storage/effect-changes.js +105 -0
  387. package/dist/src/storage/effect-rows.d.ts +67 -0
  388. package/dist/src/storage/effect-rows.js +74 -0
  389. package/dist/src/storage/effect-schema.d.ts +1 -0
  390. package/dist/src/storage/effect-schema.js +59 -0
  391. package/dist/src/storage/statements.d.ts +9 -0
  392. package/dist/src/storage/statements.js +8 -0
  393. package/dist/src/submission.d.ts +42 -0
  394. package/dist/src/submission.js +71 -0
  395. package/dist/src/ticket-status.d.ts +8 -0
  396. package/dist/src/ticket-status.js +45 -0
  397. package/dist/src/token-prices.d.ts +19 -0
  398. package/dist/src/token-prices.js +76 -0
  399. package/dist/src/turn-profile.d.ts +13 -0
  400. package/dist/src/turn-profile.js +100 -0
  401. package/dist/src/worker-usage.d.ts +22 -0
  402. package/dist/src/worker-usage.js +44 -0
  403. package/dist/src/workflow-admission.d.ts +45 -0
  404. package/dist/src/workflow-admission.js +151 -0
  405. package/dist/src/workflow-candidate.d.ts +29 -0
  406. package/dist/src/workflow-candidate.js +59 -0
  407. package/dist/src/workflow-contracts.d.ts +29 -0
  408. package/dist/src/workflow-contracts.js +110 -0
  409. package/dist/src/workflow-declaration.d.ts +11 -0
  410. package/dist/src/workflow-declaration.js +59 -0
  411. package/dist/src/workflow-resources.d.ts +8 -0
  412. package/dist/src/workflow-resources.js +14 -0
  413. package/dist/src/workflows.d.ts +6 -0
  414. package/dist/src/workflows.js +4 -0
  415. package/dist/tools/compile-workflows.d.ts +1 -0
  416. package/dist/tools/compile-workflows.js +33 -0
  417. package/dist/tools/self-host-processes.d.ts +10 -0
  418. package/dist/tools/self-host-processes.js +156 -0
  419. package/dist/tools/self-host-workflows.d.ts +15 -0
  420. package/dist/tools/self-host-workflows.js +78 -0
  421. package/dist/tools/self-host.d.ts +1 -0
  422. package/dist/tools/self-host.js +261 -0
  423. package/dist/tools/self-update-host.d.ts +13 -0
  424. package/dist/tools/self-update-host.js +88 -0
  425. package/dist/tools/self-update.d.ts +11 -0
  426. package/dist/tools/self-update.js +177 -0
  427. package/dist/tools/workflow-manifest.d.ts +3 -0
  428. package/dist/tools/workflow-manifest.js +34 -0
  429. package/dist/workflows/analyze-chats.d.ts +10 -0
  430. package/dist/workflows/analyze-chats.declaration.json +9 -0
  431. package/dist/workflows/analyze-chats.js +73 -0
  432. package/dist/workflows/develop-prd.d.ts +7 -0
  433. package/dist/workflows/develop-prd.js +97 -0
  434. package/dist/workflows/develop-ticket.d.ts +9 -0
  435. package/dist/workflows/develop-ticket.js +202 -0
  436. package/dist/workflows/issue-labels.d.ts +16 -0
  437. package/dist/workflows/issue-labels.js +70 -0
  438. package/dist/workflows/ticket-prompts.d.ts +35 -0
  439. package/dist/workflows/ticket-prompts.js +133 -0
  440. package/package.json +84 -75
  441. package/dist/abstract_gpt/index.js +0 -55
  442. package/dist/cloving_gpt/adapters/Adapter.js +0 -2
  443. package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
  444. package/dist/cloving_gpt/adapters/claude.js +0 -128
  445. package/dist/cloving_gpt/adapters/gemini.js +0 -135
  446. package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
  447. package/dist/cloving_gpt/adapters/index.js +0 -2
  448. package/dist/cloving_gpt/adapters/mistral.js +0 -128
  449. package/dist/cloving_gpt/adapters/ollama.js +0 -128
  450. package/dist/cloving_gpt/adapters/openai.js +0 -100
  451. package/dist/cloving_gpt/index.js +0 -192
  452. package/dist/commands/analyze.js +0 -47
  453. package/dist/commands/chat.js +0 -14
  454. package/dist/commands/check.js +0 -7
  455. package/dist/commands/commit.js +0 -44
  456. package/dist/commands/config.js +0 -167
  457. package/dist/commands/describe.js +0 -235
  458. package/dist/commands/generate/code.js +0 -21
  459. package/dist/commands/generate/commit.js +0 -11
  460. package/dist/commands/generate/context.js +0 -82
  461. package/dist/commands/generate/docs.js +0 -11
  462. package/dist/commands/generate/documentation.js +0 -11
  463. package/dist/commands/generate/fizzbuzz.js +0 -35
  464. package/dist/commands/generate/init.js +0 -15
  465. package/dist/commands/generate/review.js +0 -11
  466. package/dist/commands/generate/sh.js +0 -95
  467. package/dist/commands/generate/shell.js +0 -11
  468. package/dist/commands/generate/unit_tests.js +0 -11
  469. package/dist/commands/init.js +0 -13
  470. package/dist/commands/models.js +0 -22
  471. package/dist/commands/project/build.js +0 -88
  472. package/dist/commands/project/complete.js +0 -12
  473. package/dist/commands/project/init.js +0 -82
  474. package/dist/commands/project/plan.js +0 -108
  475. package/dist/commands/proxy.js +0 -11
  476. package/dist/commands/review.js +0 -50
  477. package/dist/commands/tokens.js +0 -75
  478. package/dist/commands/unit_tests.js +0 -150
  479. package/dist/commands/update.js +0 -7
  480. package/dist/file2.js +0 -4
  481. package/dist/index.js +0 -136
  482. package/dist/managers/BlockManager.js +0 -120
  483. package/dist/managers/ChatManager.js +0 -653
  484. package/dist/managers/ChunkManager.js +0 -32
  485. package/dist/managers/CodeManager.js +0 -185
  486. package/dist/managers/CommitManager.js +0 -78
  487. package/dist/managers/DocsManager.js +0 -88
  488. package/dist/managers/DocumentationManager.js +0 -114
  489. package/dist/managers/InitManager.js +0 -230
  490. package/dist/managers/ProxyManager.js +0 -210
  491. package/dist/managers/ReviewManager.js +0 -131
  492. package/dist/managers/ShellManager.js +0 -163
  493. package/dist/managers/StreamManager.js +0 -308
  494. package/dist/managers/UnitTestManager.js +0 -243
  495. package/dist/managers/src/managers/ProxyManager.js +0 -1
  496. package/dist/newfile.js +0 -2
  497. package/dist/package.json +0 -86
  498. package/dist/utils/command_utils.js +0 -384
  499. package/dist/utils/config_utils.js +0 -249
  500. package/dist/utils/gitUtils.js +0 -42
  501. package/dist/utils/git_utils.js +0 -217
  502. package/dist/utils/modelUtils.js +0 -7
  503. package/dist/utils/model_utils.js +0 -7
  504. package/dist/utils/prompt_utils.js +0 -333
  505. package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  506. package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  507. package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  508. package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  509. package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  510. package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  511. package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  512. package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
  513. package/dist/utils/prompts/index.js +0 -27
  514. package/dist/utils/string_utils.js +0 -505
  515. package/dist/utils/types.js +0 -2
@@ -0,0 +1,129 @@
1
+ export const attemptColumns = "d.effect_id, d.operation_id, d.input_digest, d.staged_sequence, d.outcome, d.receipt, coalesce(a.purpose, 'dispatch') AS purpose, a.lease_generation, a.authority_epoch";
2
+ export const attemptSource = "deliveries d LEFT JOIN dispatch_attempts a ON a.effect_id = d.effect_id";
3
+ export async function loadAttempts(connection) {
4
+ return (await connection.all(`SELECT ${attemptColumns} FROM ${attemptSource} ORDER BY d.staged_sequence, d.rowid`)).map(attemptRow);
5
+ }
6
+ export function attemptRow(row) {
7
+ return {
8
+ ...deliveryRow(row),
9
+ purpose: text(row, "purpose"),
10
+ leaseGeneration: optionalInteger(row, "lease_generation"),
11
+ epoch: optionalInteger(row, "authority_epoch"),
12
+ };
13
+ }
14
+ export async function loadSnapshot(connection) {
15
+ return {
16
+ ...(await loadBaseline(connection)),
17
+ deliveries: await loadDeliveries(connection),
18
+ };
19
+ }
20
+ export async function loadBaseline(connection) {
21
+ return {
22
+ ...(await projectionRows(connection)),
23
+ events: await loadEvents(connection),
24
+ };
25
+ }
26
+ export async function loadEvents(connection) {
27
+ return (await connection.all("SELECT sequence, type, run_id, command_id, recorded_at, request, payload FROM events ORDER BY sequence")).map(eventRow);
28
+ }
29
+ export async function loadDeliveries(connection) {
30
+ return (await connection.all("SELECT effect_id, operation_id, input_digest, staged_sequence, outcome, receipt FROM deliveries ORDER BY staged_sequence, rowid")).map(deliveryRow);
31
+ }
32
+ export async function projectionRows(connection) {
33
+ const rows = (sql) => connection.all(sql);
34
+ return {
35
+ definitions: (await rows("SELECT pin, manifest FROM definitions ORDER BY pin")).map(definitionRow),
36
+ runs: (await rows("SELECT run_id, status, revision, workflow, paused_from, gates, sequence FROM runs ORDER BY run_id")).map(runRow),
37
+ commands: (await rows("SELECT command_id, request, sequence FROM commands ORDER BY sequence")).map(commandRow),
38
+ outbox: (await rows("SELECT operation_id, kind, run_id, created_sequence, released_sequence FROM outbox ORDER BY created_sequence, rowid")).map(outboxRow),
39
+ };
40
+ }
41
+ export async function latestSequence(connection) {
42
+ return integer(await connection.get("SELECT coalesce(max(sequence), 0) AS sequence FROM events"), "sequence");
43
+ }
44
+ export function definitionRow(row) {
45
+ return { pin: text(row, "pin"), manifest: text(row, "manifest") };
46
+ }
47
+ export function eventRow(row) {
48
+ return {
49
+ sequence: integer(row, "sequence"),
50
+ type: text(row, "type"),
51
+ runId: text(row, "run_id"),
52
+ commandId: text(row, "command_id"),
53
+ recordedAt: text(row, "recorded_at"),
54
+ request: text(row, "request"),
55
+ payload: text(row, "payload"),
56
+ };
57
+ }
58
+ export function runRow(row) {
59
+ return {
60
+ runId: text(row, "run_id"),
61
+ status: text(row, "status"),
62
+ revision: integer(row, "revision"),
63
+ workflow: text(row, "workflow"),
64
+ pausedFrom: optionalText(row, "paused_from"),
65
+ gates: text(row, "gates"),
66
+ sequence: integer(row, "sequence"),
67
+ };
68
+ }
69
+ export function commandRow(row) {
70
+ return {
71
+ commandId: text(row, "command_id"),
72
+ request: text(row, "request"),
73
+ sequence: integer(row, "sequence"),
74
+ };
75
+ }
76
+ export function outboxRow(row) {
77
+ return {
78
+ operationId: text(row, "operation_id"),
79
+ kind: text(row, "kind"),
80
+ runId: text(row, "run_id"),
81
+ createdSequence: integer(row, "created_sequence"),
82
+ releasedSequence: optionalInteger(row, "released_sequence"),
83
+ };
84
+ }
85
+ export function deliveryRow(row) {
86
+ return {
87
+ effectId: text(row, "effect_id"),
88
+ operationId: text(row, "operation_id"),
89
+ inputDigest: text(row, "input_digest"),
90
+ stagedSequence: integer(row, "staged_sequence"),
91
+ outcome: optionalText(row, "outcome"),
92
+ receipt: optionalText(row, "receipt"),
93
+ };
94
+ }
95
+ function column(row, field) {
96
+ const { name, accepts } = field;
97
+ const value = Reflect.get(Object(row), name);
98
+ if (!accepts(value))
99
+ throw new Error(`invalid-column: ${name}`);
100
+ return value;
101
+ }
102
+ function isText(value) {
103
+ return typeof value === "string";
104
+ }
105
+ function isOptionalText(value) {
106
+ return value === null || typeof value === "string";
107
+ }
108
+ function isSafeInteger(value) {
109
+ if (typeof value === "bigint")
110
+ return (value >= BigInt(Number.MIN_SAFE_INTEGER) &&
111
+ value <= BigInt(Number.MAX_SAFE_INTEGER));
112
+ return Number.isSafeInteger(value);
113
+ }
114
+ function isOptionalSafeInteger(value) {
115
+ return value === null || isSafeInteger(value);
116
+ }
117
+ export function text(row, name) {
118
+ return column(row, { name, accepts: isText });
119
+ }
120
+ export function optionalText(row, name) {
121
+ return column(row, { name, accepts: isOptionalText });
122
+ }
123
+ export function integer(row, name) {
124
+ return Number(column(row, { name, accepts: isSafeInteger }));
125
+ }
126
+ export function optionalInteger(row, name) {
127
+ const value = column(row, { name, accepts: isOptionalSafeInteger });
128
+ return value === null ? null : Number(value);
129
+ }
@@ -0,0 +1,32 @@
1
+ import { type SqlConnection } from "./domain-rows.ts";
2
+ export declare const baselineVersion = 1;
3
+ export declare const adoptedVersion = 2;
4
+ export declare const decidedVersion = 3;
5
+ export declare const currentVersion = 4;
6
+ export declare const baselineSchema = "\nCREATE TABLE schema_migrations (\n version INTEGER PRIMARY KEY,\n checksum TEXT NOT NULL\n) STRICT;\nCREATE TABLE events (\n sequence INTEGER PRIMARY KEY,\n type TEXT NOT NULL,\n run_id TEXT NOT NULL,\n command_id TEXT NOT NULL UNIQUE,\n recorded_at TEXT NOT NULL,\n request TEXT NOT NULL,\n payload TEXT NOT NULL\n) STRICT;\nCREATE TABLE definitions (\n pin TEXT PRIMARY KEY,\n manifest TEXT NOT NULL\n) STRICT;\nCREATE TABLE runs (\n run_id TEXT PRIMARY KEY,\n status TEXT NOT NULL,\n revision INTEGER NOT NULL,\n workflow TEXT NOT NULL REFERENCES definitions (pin) DEFERRABLE INITIALLY DEFERRED,\n paused_from TEXT,\n gates TEXT NOT NULL,\n sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\nCREATE TABLE commands (\n command_id TEXT PRIMARY KEY,\n request TEXT NOT NULL,\n sequence INTEGER NOT NULL UNIQUE REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\nCREATE TABLE outbox (\n operation_id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,\n created_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,\n released_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\n";
7
+ export type SchemaRefusal = {
8
+ readonly kind: "refused";
9
+ readonly reason: "unsupported-schema" | "foreign-database" | "schema-mismatch";
10
+ readonly detail: string;
11
+ };
12
+ export type SchemaState = {
13
+ readonly kind: "new";
14
+ } | {
15
+ readonly kind: "baseline";
16
+ } | {
17
+ readonly kind: "adopted";
18
+ } | {
19
+ readonly kind: "decided";
20
+ } | {
21
+ readonly kind: "current";
22
+ } | SchemaRefusal;
23
+ export declare function inspectSchema(connection: SqlConnection): Promise<SchemaState>;
24
+ export declare function createSchema(connection: SqlConnection): Promise<void>;
25
+ export declare function upgradeSchema(connection: SqlConnection, version: number): Promise<void>;
26
+ export declare function adoptSchema(connection: SqlConnection, pendingSequence: number | null): Promise<void>;
27
+ export interface AuthorityIdentity {
28
+ readonly actorId: string;
29
+ readonly pendingAdoption: number | null;
30
+ }
31
+ export declare function backupInto(connection: SqlConnection, target: string): Promise<void>;
32
+ export declare function authorityIdentity(connection: SqlConnection): Promise<AuthorityIdentity>;
@@ -0,0 +1,193 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { DatabaseSync } from "node:sqlite";
3
+ import { integer, optionalInteger, optionalText, text, } from "./domain-rows.js";
4
+ import { effectSchema } from "./effect-schema.js";
5
+ export const baselineVersion = 1;
6
+ export const adoptedVersion = 2;
7
+ export const decidedVersion = 3;
8
+ export const currentVersion = 4;
9
+ export const baselineSchema = `
10
+ CREATE TABLE schema_migrations (
11
+ version INTEGER PRIMARY KEY,
12
+ checksum TEXT NOT NULL
13
+ ) STRICT;
14
+ CREATE TABLE events (
15
+ sequence INTEGER PRIMARY KEY,
16
+ type TEXT NOT NULL,
17
+ run_id TEXT NOT NULL,
18
+ command_id TEXT NOT NULL UNIQUE,
19
+ recorded_at TEXT NOT NULL,
20
+ request TEXT NOT NULL,
21
+ payload TEXT NOT NULL
22
+ ) STRICT;
23
+ CREATE TABLE definitions (
24
+ pin TEXT PRIMARY KEY,
25
+ manifest TEXT NOT NULL
26
+ ) STRICT;
27
+ CREATE TABLE runs (
28
+ run_id TEXT PRIMARY KEY,
29
+ status TEXT NOT NULL,
30
+ revision INTEGER NOT NULL,
31
+ workflow TEXT NOT NULL REFERENCES definitions (pin) DEFERRABLE INITIALLY DEFERRED,
32
+ paused_from TEXT,
33
+ gates TEXT NOT NULL,
34
+ sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
35
+ ) STRICT;
36
+ CREATE TABLE commands (
37
+ command_id TEXT PRIMARY KEY,
38
+ request TEXT NOT NULL,
39
+ sequence INTEGER NOT NULL UNIQUE REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
40
+ ) STRICT;
41
+ CREATE TABLE outbox (
42
+ operation_id TEXT PRIMARY KEY,
43
+ kind TEXT NOT NULL,
44
+ run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
45
+ created_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
46
+ released_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
47
+ ) STRICT;
48
+ `;
49
+ const adoption = `
50
+ CREATE TABLE authority_identity (
51
+ singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
52
+ actor_id TEXT NOT NULL,
53
+ adoption_sequence INTEGER
54
+ ) STRICT;
55
+ CREATE TABLE deliveries (
56
+ effect_id TEXT PRIMARY KEY,
57
+ operation_id TEXT NOT NULL REFERENCES outbox (operation_id) DEFERRABLE INITIALLY DEFERRED,
58
+ input_digest TEXT NOT NULL,
59
+ staged_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
60
+ outcome TEXT,
61
+ receipt TEXT
62
+ ) STRICT;
63
+ CREATE UNIQUE INDEX deliveries_open ON deliveries (operation_id) WHERE outcome IS NULL;
64
+ `;
65
+ const decisions = `
66
+ CREATE TABLE gates (
67
+ run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
68
+ gate_id TEXT NOT NULL,
69
+ kind TEXT NOT NULL,
70
+ label INTEGER,
71
+ subject TEXT,
72
+ prompt TEXT,
73
+ expires_at TEXT,
74
+ generation INTEGER NOT NULL,
75
+ revision INTEGER NOT NULL,
76
+ wait TEXT NOT NULL,
77
+ decision TEXT,
78
+ answer TEXT,
79
+ decided_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
80
+ opened_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
81
+ continuation TEXT,
82
+ PRIMARY KEY (run_id, gate_id)
83
+ ) STRICT;
84
+ CREATE TABLE run_details (
85
+ run_id TEXT PRIMARY KEY REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
86
+ generation INTEGER NOT NULL,
87
+ submission TEXT,
88
+ input TEXT,
89
+ resolver TEXT,
90
+ condition TEXT,
91
+ reason TEXT,
92
+ evidence TEXT,
93
+ retry_at TEXT,
94
+ attempt INTEGER,
95
+ attempt_limit INTEGER,
96
+ observed_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
97
+ observed_at TEXT,
98
+ observed_operation TEXT
99
+ ) STRICT;
100
+ CREATE TABLE documents (
101
+ digest TEXT PRIMARY KEY,
102
+ body TEXT NOT NULL
103
+ ) STRICT;
104
+ `;
105
+ const schemas = [baselineSchema, adoption, decisions, effectSchema];
106
+ const checksums = schemas.map((schema) => createHash("sha256").update(schema).digest("hex"));
107
+ const versionKinds = ["baseline", "adopted", "decided", "current"];
108
+ export async function inspectSchema(connection) {
109
+ const version = integer(await connection.get("PRAGMA user_version"), "user_version");
110
+ const detail = String(version);
111
+ if (version === 0)
112
+ return emptyDatabase(connection, detail);
113
+ const kind = versionKinds[version - 1];
114
+ if (kind === undefined)
115
+ return { kind: "refused", reason: "unsupported-schema", detail };
116
+ const intact = (await structure(connection)) ===
117
+ expectedStructure(schemas.slice(0, version)) &&
118
+ (await recordedChecksums(connection)) ===
119
+ JSON.stringify(checksums.slice(0, version));
120
+ if (!intact)
121
+ return { kind: "refused", reason: "schema-mismatch", detail };
122
+ return { kind };
123
+ }
124
+ async function emptyDatabase(connection, detail) {
125
+ const objects = integer(await connection.get("SELECT count(*) AS count FROM sqlite_schema"), "count");
126
+ return objects === 0
127
+ ? { kind: "new" }
128
+ : { kind: "refused", reason: "foreign-database", detail };
129
+ }
130
+ export async function createSchema(connection) {
131
+ await execute(connection, baselineSchema);
132
+ await recordVersion(connection, baselineVersion);
133
+ await adoptSchema(connection, null);
134
+ await upgradeSchema(connection, decidedVersion);
135
+ await upgradeSchema(connection, currentVersion);
136
+ }
137
+ export async function upgradeSchema(connection, version) {
138
+ await execute(connection, schemas[version - 1] ?? "");
139
+ await recordVersion(connection, version);
140
+ await connection.run(`PRAGMA user_version = ${String(version)}`);
141
+ }
142
+ export async function adoptSchema(connection, pendingSequence) {
143
+ await execute(connection, adoption);
144
+ await recordVersion(connection, adoptedVersion);
145
+ await connection.run("INSERT INTO authority_identity (singleton, actor_id, adoption_sequence) VALUES (1, ?, ?)", [randomUUID(), pendingSequence]);
146
+ await connection.run(`PRAGMA user_version = ${String(adoptedVersion)}`);
147
+ }
148
+ export async function backupInto(connection, target) {
149
+ await connection.run("VACUUM INTO ?", [target]);
150
+ }
151
+ export async function authorityIdentity(connection) {
152
+ const row = await connection.get("SELECT actor_id, adoption_sequence FROM authority_identity WHERE singleton = 1");
153
+ return {
154
+ actorId: text(row, "actor_id"),
155
+ pendingAdoption: optionalInteger(row, "adoption_sequence"),
156
+ };
157
+ }
158
+ async function execute(connection, schema) {
159
+ for (const statement of statements(schema))
160
+ await connection.run(statement);
161
+ }
162
+ function recordVersion(connection, version) {
163
+ return connection.run("INSERT INTO schema_migrations (version, checksum) VALUES (?, ?)", [version, checksums[version - 1]]);
164
+ }
165
+ function statements(schema) {
166
+ return schema
167
+ .split(";")
168
+ .map((statement) => statement.trim())
169
+ .filter((statement) => statement.length > 0);
170
+ }
171
+ const structureQuery = "SELECT type, name, tbl_name, sql FROM sqlite_schema WHERE type IN ('table', 'index') AND tbl_name NOT LIKE 'solid\\_%' ESCAPE '\\' ORDER BY type, name";
172
+ function structureOf(rows) {
173
+ return JSON.stringify(rows.map((row) => [
174
+ text(row, "type"),
175
+ text(row, "name"),
176
+ text(row, "tbl_name"),
177
+ optionalText(row, "sql"),
178
+ ]));
179
+ }
180
+ async function structure(connection) {
181
+ return structureOf(await connection.all(structureQuery));
182
+ }
183
+ function expectedStructure(schemas) {
184
+ const memory = new DatabaseSync(":memory:");
185
+ for (const schema of schemas)
186
+ memory.exec(schema);
187
+ const value = structureOf(memory.prepare(structureQuery).all());
188
+ memory.close();
189
+ return value;
190
+ }
191
+ async function recordedChecksums(connection) {
192
+ return JSON.stringify((await connection.all("SELECT checksum FROM schema_migrations ORDER BY version")).map((row) => text(row, "checksum")));
193
+ }
@@ -0,0 +1,5 @@
1
+ import type { SqlConnection } from "./domain-rows.ts";
2
+ import { type EffectRows } from "./effect-rows.ts";
3
+ import { type Statement } from "./statements.ts";
4
+ export declare function effectStatements(rows: EffectRows): readonly Statement[];
5
+ export declare function persistEffects(connection: SqlConnection, rows: EffectRows): Promise<void>;
@@ -0,0 +1,105 @@
1
+ import { budgetColumns, evidenceColumns, leaseColumns, operationColumns, stopColumns, } from "./effect-rows.js";
2
+ import { upsert } from "./statements.js";
3
+ const budgetUpsert = upsert({
4
+ table: "run_budgets",
5
+ names: budgetColumns.split(", "),
6
+ key: 1,
7
+ });
8
+ const operationUpsert = upsert({
9
+ table: "operations",
10
+ names: operationColumns.split(", "),
11
+ key: 1,
12
+ });
13
+ const leaseUpsert = upsert({
14
+ table: "leases",
15
+ names: leaseColumns.split(", "),
16
+ key: 1,
17
+ });
18
+ const stopUpsert = upsert({
19
+ table: "stopped_operations",
20
+ names: stopColumns.split(", "),
21
+ key: 1,
22
+ });
23
+ const evidenceInsert = `INSERT INTO effect_evidence (${evidenceColumns}) VALUES (?, ?, ?, ?, ?)`;
24
+ function budgetParameters(row) {
25
+ return [
26
+ row.runId,
27
+ row.effectLimit,
28
+ row.spent,
29
+ row.capabilities,
30
+ row.exhaustedSequence,
31
+ ];
32
+ }
33
+ function operationParameters(row) {
34
+ return [
35
+ row.operationId,
36
+ row.runId,
37
+ row.capability,
38
+ row.method,
39
+ row.target,
40
+ row.payload,
41
+ row.inputDigest,
42
+ row.units,
43
+ row.leaseKey,
44
+ row.recoveryLimit,
45
+ row.status,
46
+ row.reason,
47
+ row.attempts,
48
+ row.receipt,
49
+ row.worker,
50
+ row.result,
51
+ row.requestedSequence,
52
+ row.waitSequence,
53
+ row.settledSequence,
54
+ ];
55
+ }
56
+ function leaseParameters(row) {
57
+ return [
58
+ row.resourceKey,
59
+ row.operationId,
60
+ row.generation,
61
+ row.expiresAt,
62
+ row.state,
63
+ row.grantedSequence,
64
+ ];
65
+ }
66
+ function evidenceParameters(row) {
67
+ return [
68
+ row.sequence,
69
+ row.runId,
70
+ row.operationId,
71
+ row.disposition,
72
+ row.reason,
73
+ ];
74
+ }
75
+ function stopParameters(row) {
76
+ return [row.operationId, row.runId, row.sequence];
77
+ }
78
+ export function effectStatements(rows) {
79
+ return [
80
+ ...rows.budgets.map((row) => ({
81
+ sql: budgetUpsert,
82
+ parameters: budgetParameters(row),
83
+ })),
84
+ ...rows.operations.map((row) => ({
85
+ sql: operationUpsert,
86
+ parameters: operationParameters(row),
87
+ })),
88
+ ...rows.leases.map((row) => ({
89
+ sql: leaseUpsert,
90
+ parameters: leaseParameters(row),
91
+ })),
92
+ ...rows.evidence.map((row) => ({
93
+ sql: evidenceInsert,
94
+ parameters: evidenceParameters(row),
95
+ })),
96
+ ...rows.stops.map((row) => ({
97
+ sql: stopUpsert,
98
+ parameters: stopParameters(row),
99
+ })),
100
+ ];
101
+ }
102
+ export async function persistEffects(connection, rows) {
103
+ for (const statement of effectStatements(rows))
104
+ await connection.run(statement.sql, statement.parameters);
105
+ }
@@ -0,0 +1,67 @@
1
+ import { type SqlConnection } from "./domain-rows.ts";
2
+ export interface BudgetRow {
3
+ readonly runId: string;
4
+ readonly effectLimit: number;
5
+ readonly spent: number;
6
+ readonly capabilities: string;
7
+ readonly exhaustedSequence: number | null;
8
+ }
9
+ export interface OperationRow {
10
+ readonly operationId: string;
11
+ readonly runId: string;
12
+ readonly capability: string;
13
+ readonly method: string;
14
+ readonly target: string;
15
+ readonly payload: string;
16
+ readonly inputDigest: string;
17
+ readonly units: number;
18
+ readonly leaseKey: string;
19
+ readonly recoveryLimit: number;
20
+ readonly status: string;
21
+ readonly reason: string | null;
22
+ readonly attempts: number;
23
+ readonly receipt: string | null;
24
+ readonly worker: string | null;
25
+ readonly result: string | null;
26
+ readonly requestedSequence: number;
27
+ readonly waitSequence: number | null;
28
+ readonly settledSequence: number | null;
29
+ }
30
+ export interface LeaseRow {
31
+ readonly resourceKey: string;
32
+ readonly operationId: string;
33
+ readonly generation: number;
34
+ readonly expiresAt: string;
35
+ readonly state: string;
36
+ readonly grantedSequence: number;
37
+ }
38
+ export interface EvidenceRow {
39
+ readonly sequence: number;
40
+ readonly runId: string;
41
+ readonly operationId: string;
42
+ readonly disposition: string;
43
+ readonly reason: string | null;
44
+ }
45
+ export interface StopRow {
46
+ readonly operationId: string;
47
+ readonly runId: string;
48
+ readonly sequence: number;
49
+ }
50
+ export interface EffectRows {
51
+ readonly budgets: readonly BudgetRow[];
52
+ readonly operations: readonly OperationRow[];
53
+ readonly leases: readonly LeaseRow[];
54
+ readonly evidence: readonly EvidenceRow[];
55
+ readonly stops: readonly StopRow[];
56
+ }
57
+ export declare const budgetColumns = "run_id, effect_limit, spent, capabilities, exhausted_sequence";
58
+ export declare const operationColumns = "operation_id, run_id, capability, method, target, payload, input_digest, units, lease_key, recovery_limit, status, reason, attempts, receipt, worker, result, requested_sequence, wait_sequence, settled_sequence";
59
+ export declare const leaseColumns = "resource_key, operation_id, generation, expires_at, state, granted_sequence";
60
+ export declare const evidenceColumns = "sequence, run_id, operation_id, disposition, reason";
61
+ export declare const stopColumns = "operation_id, run_id, sequence";
62
+ export declare function budgetRow(row: unknown): BudgetRow;
63
+ export declare function operationRow(row: unknown): OperationRow;
64
+ export declare function leaseRow(row: unknown): LeaseRow;
65
+ export declare function evidenceRow(row: unknown): EvidenceRow;
66
+ export declare function stopRow(row: unknown): StopRow;
67
+ export declare function loadEffects(connection: SqlConnection): Promise<EffectRows>;
@@ -0,0 +1,74 @@
1
+ import { integer, optionalInteger, optionalText, text, } from "./domain-rows.js";
2
+ export const budgetColumns = "run_id, effect_limit, spent, capabilities, exhausted_sequence";
3
+ export const operationColumns = "operation_id, run_id, capability, method, target, payload, input_digest, units, lease_key, recovery_limit, status, reason, attempts, receipt, worker, result, requested_sequence, wait_sequence, settled_sequence";
4
+ export const leaseColumns = "resource_key, operation_id, generation, expires_at, state, granted_sequence";
5
+ export const evidenceColumns = "sequence, run_id, operation_id, disposition, reason";
6
+ export const stopColumns = "operation_id, run_id, sequence";
7
+ export function budgetRow(row) {
8
+ return {
9
+ runId: text(row, "run_id"),
10
+ effectLimit: integer(row, "effect_limit"),
11
+ spent: integer(row, "spent"),
12
+ capabilities: text(row, "capabilities"),
13
+ exhaustedSequence: optionalInteger(row, "exhausted_sequence"),
14
+ };
15
+ }
16
+ export function operationRow(row) {
17
+ return {
18
+ operationId: text(row, "operation_id"),
19
+ runId: text(row, "run_id"),
20
+ capability: text(row, "capability"),
21
+ method: text(row, "method"),
22
+ target: text(row, "target"),
23
+ payload: text(row, "payload"),
24
+ inputDigest: text(row, "input_digest"),
25
+ units: integer(row, "units"),
26
+ leaseKey: text(row, "lease_key"),
27
+ recoveryLimit: integer(row, "recovery_limit"),
28
+ status: text(row, "status"),
29
+ reason: optionalText(row, "reason"),
30
+ attempts: integer(row, "attempts"),
31
+ receipt: optionalText(row, "receipt"),
32
+ worker: optionalText(row, "worker"),
33
+ result: optionalText(row, "result"),
34
+ requestedSequence: integer(row, "requested_sequence"),
35
+ waitSequence: optionalInteger(row, "wait_sequence"),
36
+ settledSequence: optionalInteger(row, "settled_sequence"),
37
+ };
38
+ }
39
+ export function leaseRow(row) {
40
+ return {
41
+ resourceKey: text(row, "resource_key"),
42
+ operationId: text(row, "operation_id"),
43
+ generation: integer(row, "generation"),
44
+ expiresAt: text(row, "expires_at"),
45
+ state: text(row, "state"),
46
+ grantedSequence: integer(row, "granted_sequence"),
47
+ };
48
+ }
49
+ export function evidenceRow(row) {
50
+ return {
51
+ sequence: integer(row, "sequence"),
52
+ runId: text(row, "run_id"),
53
+ operationId: text(row, "operation_id"),
54
+ disposition: text(row, "disposition"),
55
+ reason: optionalText(row, "reason"),
56
+ };
57
+ }
58
+ export function stopRow(row) {
59
+ return {
60
+ operationId: text(row, "operation_id"),
61
+ runId: text(row, "run_id"),
62
+ sequence: integer(row, "sequence"),
63
+ };
64
+ }
65
+ export async function loadEffects(connection) {
66
+ const rows = (sql) => connection.all(sql);
67
+ return {
68
+ budgets: (await rows(`SELECT ${budgetColumns} FROM run_budgets ORDER BY run_id`)).map(budgetRow),
69
+ operations: (await rows(`SELECT ${operationColumns} FROM operations ORDER BY requested_sequence, operation_id`)).map(operationRow),
70
+ leases: (await rows(`SELECT ${leaseColumns} FROM leases ORDER BY resource_key`)).map(leaseRow),
71
+ evidence: (await rows(`SELECT ${evidenceColumns} FROM effect_evidence ORDER BY sequence`)).map(evidenceRow),
72
+ stops: (await rows(`SELECT ${stopColumns} FROM stopped_operations ORDER BY operation_id`)).map(stopRow),
73
+ };
74
+ }
@@ -0,0 +1 @@
1
+ export declare const effectSchema = "\nCREATE TABLE run_budgets (\n run_id TEXT PRIMARY KEY REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,\n effect_limit INTEGER NOT NULL,\n spent INTEGER NOT NULL CHECK (spent <= effect_limit),\n capabilities TEXT NOT NULL,\n exhausted_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\nCREATE TABLE operations (\n operation_id TEXT PRIMARY KEY,\n run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,\n capability TEXT NOT NULL,\n method TEXT NOT NULL,\n target TEXT NOT NULL,\n payload TEXT NOT NULL,\n input_digest TEXT NOT NULL,\n units INTEGER NOT NULL,\n lease_key TEXT NOT NULL,\n recovery_limit INTEGER NOT NULL,\n status TEXT NOT NULL,\n reason TEXT,\n attempts INTEGER NOT NULL,\n receipt TEXT,\n worker TEXT,\n result TEXT,\n requested_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,\n wait_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,\n settled_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\nCREATE INDEX operations_run ON operations (run_id);\nCREATE INDEX operations_waiting ON operations (wait_sequence) WHERE status = 'waiting';\nCREATE TABLE leases (\n resource_key TEXT PRIMARY KEY,\n operation_id TEXT NOT NULL REFERENCES operations (operation_id) DEFERRABLE INITIALLY DEFERRED,\n generation INTEGER NOT NULL CHECK (generation > 0),\n expires_at TEXT NOT NULL,\n state TEXT NOT NULL CHECK (state IN ('held', 'expired', 'released')),\n granted_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\nCREATE INDEX leases_due ON leases (expires_at) WHERE state = 'held';\nCREATE TABLE effect_evidence (\n sequence INTEGER PRIMARY KEY REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,\n run_id TEXT NOT NULL,\n operation_id TEXT NOT NULL,\n disposition TEXT NOT NULL,\n reason TEXT\n) STRICT;\nCREATE TABLE stopped_operations (\n operation_id TEXT PRIMARY KEY,\n run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,\n sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\nCREATE TABLE dispatch_attempts (\n effect_id TEXT PRIMARY KEY REFERENCES deliveries (effect_id) DEFERRABLE INITIALLY DEFERRED,\n purpose TEXT NOT NULL,\n lease_generation INTEGER,\n authority_epoch INTEGER NOT NULL\n) STRICT;\n";
@@ -0,0 +1,59 @@
1
+ export const effectSchema = `
2
+ CREATE TABLE run_budgets (
3
+ run_id TEXT PRIMARY KEY REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
4
+ effect_limit INTEGER NOT NULL,
5
+ spent INTEGER NOT NULL CHECK (spent <= effect_limit),
6
+ capabilities TEXT NOT NULL,
7
+ exhausted_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
8
+ ) STRICT;
9
+ CREATE TABLE operations (
10
+ operation_id TEXT PRIMARY KEY,
11
+ run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
12
+ capability TEXT NOT NULL,
13
+ method TEXT NOT NULL,
14
+ target TEXT NOT NULL,
15
+ payload TEXT NOT NULL,
16
+ input_digest TEXT NOT NULL,
17
+ units INTEGER NOT NULL,
18
+ lease_key TEXT NOT NULL,
19
+ recovery_limit INTEGER NOT NULL,
20
+ status TEXT NOT NULL,
21
+ reason TEXT,
22
+ attempts INTEGER NOT NULL,
23
+ receipt TEXT,
24
+ worker TEXT,
25
+ result TEXT,
26
+ requested_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
27
+ wait_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
28
+ settled_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
29
+ ) STRICT;
30
+ CREATE INDEX operations_run ON operations (run_id);
31
+ CREATE INDEX operations_waiting ON operations (wait_sequence) WHERE status = 'waiting';
32
+ CREATE TABLE leases (
33
+ resource_key TEXT PRIMARY KEY,
34
+ operation_id TEXT NOT NULL REFERENCES operations (operation_id) DEFERRABLE INITIALLY DEFERRED,
35
+ generation INTEGER NOT NULL CHECK (generation > 0),
36
+ expires_at TEXT NOT NULL,
37
+ state TEXT NOT NULL CHECK (state IN ('held', 'expired', 'released')),
38
+ granted_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
39
+ ) STRICT;
40
+ CREATE INDEX leases_due ON leases (expires_at) WHERE state = 'held';
41
+ CREATE TABLE effect_evidence (
42
+ sequence INTEGER PRIMARY KEY REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
43
+ run_id TEXT NOT NULL,
44
+ operation_id TEXT NOT NULL,
45
+ disposition TEXT NOT NULL,
46
+ reason TEXT
47
+ ) STRICT;
48
+ CREATE TABLE stopped_operations (
49
+ operation_id TEXT PRIMARY KEY,
50
+ run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
51
+ sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
52
+ ) STRICT;
53
+ CREATE TABLE dispatch_attempts (
54
+ effect_id TEXT PRIMARY KEY REFERENCES deliveries (effect_id) DEFERRABLE INITIALLY DEFERRED,
55
+ purpose TEXT NOT NULL,
56
+ lease_generation INTEGER,
57
+ authority_epoch INTEGER NOT NULL
58
+ ) STRICT;
59
+ `;