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,85 @@
1
+ export interface SqlConnection {
2
+ readonly run: (sql: string, parameters?: readonly unknown[]) => Promise<unknown>;
3
+ readonly get: (sql: string, parameters?: readonly unknown[]) => Promise<unknown>;
4
+ readonly all: (sql: string, parameters?: readonly unknown[]) => Promise<readonly unknown[]>;
5
+ }
6
+ export interface EventRow {
7
+ readonly sequence: number;
8
+ readonly type: string;
9
+ readonly runId: string;
10
+ readonly commandId: string;
11
+ readonly recordedAt: string;
12
+ readonly request: string;
13
+ readonly payload: string;
14
+ }
15
+ export interface RunRow {
16
+ readonly runId: string;
17
+ readonly status: string;
18
+ readonly revision: number;
19
+ readonly workflow: string;
20
+ readonly pausedFrom: string | null;
21
+ readonly gates: string;
22
+ readonly sequence: number;
23
+ }
24
+ export interface CommandRow {
25
+ readonly commandId: string;
26
+ readonly request: string;
27
+ readonly sequence: number;
28
+ }
29
+ export interface IntentRow {
30
+ readonly operationId: string;
31
+ readonly kind: string;
32
+ readonly runId: string;
33
+ readonly createdSequence: number;
34
+ }
35
+ export interface OutboxRow extends IntentRow {
36
+ readonly releasedSequence: number | null;
37
+ }
38
+ export interface DefinitionRow {
39
+ readonly pin: string;
40
+ readonly manifest: string;
41
+ }
42
+ export interface DeliveryRow {
43
+ readonly effectId: string;
44
+ readonly operationId: string;
45
+ readonly inputDigest: string;
46
+ readonly stagedSequence: number;
47
+ readonly outcome: string | null;
48
+ readonly receipt: string | null;
49
+ }
50
+ export interface AttemptRow extends DeliveryRow {
51
+ readonly purpose: string;
52
+ readonly leaseGeneration: number | null;
53
+ readonly epoch: number | null;
54
+ }
55
+ export interface AuthoritySnapshot {
56
+ readonly definitions: readonly DefinitionRow[];
57
+ readonly events: readonly EventRow[];
58
+ readonly runs: readonly RunRow[];
59
+ readonly commands: readonly CommandRow[];
60
+ readonly outbox: readonly OutboxRow[];
61
+ }
62
+ export interface DomainSnapshot extends AuthoritySnapshot {
63
+ readonly deliveries: readonly DeliveryRow[];
64
+ }
65
+ export declare 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";
66
+ export declare const attemptSource = "deliveries d LEFT JOIN dispatch_attempts a ON a.effect_id = d.effect_id";
67
+ export declare function loadAttempts(connection: SqlConnection): Promise<readonly AttemptRow[]>;
68
+ export declare function attemptRow(row: unknown): AttemptRow;
69
+ export type ProjectionRows = Omit<AuthoritySnapshot, "events">;
70
+ export declare function loadSnapshot(connection: SqlConnection): Promise<DomainSnapshot>;
71
+ export declare function loadBaseline(connection: SqlConnection): Promise<AuthoritySnapshot>;
72
+ export declare function loadEvents(connection: SqlConnection): Promise<readonly EventRow[]>;
73
+ export declare function loadDeliveries(connection: SqlConnection): Promise<readonly DeliveryRow[]>;
74
+ export declare function projectionRows(connection: SqlConnection): Promise<ProjectionRows>;
75
+ export declare function latestSequence(connection: SqlConnection): Promise<number>;
76
+ export declare function definitionRow(row: unknown): DefinitionRow;
77
+ export declare function eventRow(row: unknown): EventRow;
78
+ export declare function runRow(row: unknown): RunRow;
79
+ export declare function commandRow(row: unknown): CommandRow;
80
+ export declare function outboxRow(row: unknown): OutboxRow;
81
+ export declare function deliveryRow(row: unknown): DeliveryRow;
82
+ export declare function text(row: unknown, name: string): string;
83
+ export declare function optionalText(row: unknown, name: string): string | null;
84
+ export declare function integer(row: unknown, name: string): number;
85
+ export declare function optionalInteger(row: unknown, name: string): number | null;
@@ -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>;