cloving 0.3.20 → 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 (416) 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/dist/abstract_gpt/index.js +0 -55
  343. package/dist/cloving_gpt/adapters/Adapter.js +0 -2
  344. package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
  345. package/dist/cloving_gpt/adapters/claude.js +0 -128
  346. package/dist/cloving_gpt/adapters/gemini.js +0 -135
  347. package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
  348. package/dist/cloving_gpt/adapters/index.js +0 -2
  349. package/dist/cloving_gpt/adapters/mistral.js +0 -128
  350. package/dist/cloving_gpt/adapters/ollama.js +0 -128
  351. package/dist/cloving_gpt/adapters/openai.js +0 -100
  352. package/dist/cloving_gpt/index.js +0 -192
  353. package/dist/commands/analyze.js +0 -47
  354. package/dist/commands/chat.js +0 -14
  355. package/dist/commands/check.js +0 -7
  356. package/dist/commands/commit.js +0 -44
  357. package/dist/commands/config.js +0 -167
  358. package/dist/commands/describe.js +0 -235
  359. package/dist/commands/generate/code.js +0 -21
  360. package/dist/commands/generate/commit.js +0 -11
  361. package/dist/commands/generate/context.js +0 -82
  362. package/dist/commands/generate/docs.js +0 -11
  363. package/dist/commands/generate/documentation.js +0 -11
  364. package/dist/commands/generate/fizzbuzz.js +0 -35
  365. package/dist/commands/generate/init.js +0 -15
  366. package/dist/commands/generate/review.js +0 -11
  367. package/dist/commands/generate/sh.js +0 -95
  368. package/dist/commands/generate/shell.js +0 -11
  369. package/dist/commands/generate/unit_tests.js +0 -11
  370. package/dist/commands/init.js +0 -13
  371. package/dist/commands/models.js +0 -22
  372. package/dist/commands/project/build.js +0 -88
  373. package/dist/commands/project/complete.js +0 -12
  374. package/dist/commands/project/init.js +0 -82
  375. package/dist/commands/project/plan.js +0 -108
  376. package/dist/commands/proxy.js +0 -11
  377. package/dist/commands/review.js +0 -50
  378. package/dist/commands/tokens.js +0 -75
  379. package/dist/commands/unit_tests.js +0 -150
  380. package/dist/commands/update.js +0 -7
  381. package/dist/file2.js +0 -4
  382. package/dist/index.js +0 -136
  383. package/dist/managers/BlockManager.js +0 -120
  384. package/dist/managers/ChatManager.js +0 -653
  385. package/dist/managers/ChunkManager.js +0 -32
  386. package/dist/managers/CodeManager.js +0 -185
  387. package/dist/managers/CommitManager.js +0 -78
  388. package/dist/managers/DocsManager.js +0 -88
  389. package/dist/managers/DocumentationManager.js +0 -114
  390. package/dist/managers/InitManager.js +0 -230
  391. package/dist/managers/ProxyManager.js +0 -210
  392. package/dist/managers/ReviewManager.js +0 -131
  393. package/dist/managers/ShellManager.js +0 -163
  394. package/dist/managers/StreamManager.js +0 -308
  395. package/dist/managers/UnitTestManager.js +0 -243
  396. package/dist/managers/src/managers/ProxyManager.js +0 -1
  397. package/dist/newfile.js +0 -2
  398. package/dist/package.json +0 -86
  399. package/dist/utils/command_utils.js +0 -384
  400. package/dist/utils/config_utils.js +0 -249
  401. package/dist/utils/gitUtils.js +0 -42
  402. package/dist/utils/git_utils.js +0 -217
  403. package/dist/utils/modelUtils.js +0 -7
  404. package/dist/utils/model_utils.js +0 -7
  405. package/dist/utils/prompt_utils.js +0 -333
  406. package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  407. package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  408. package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  409. package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  410. package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  411. package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  412. package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  413. package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
  414. package/dist/utils/prompts/index.js +0 -27
  415. package/dist/utils/string_utils.js +0 -505
  416. package/dist/utils/types.js +0 -2
@@ -0,0 +1,19 @@
1
+ function line(level, entry) {
2
+ try {
3
+ return `${JSON.stringify({ level, ...entry })}\n`;
4
+ }
5
+ catch {
6
+ return `${JSON.stringify({ level, event: "unserializable-log-entry" })}\n`;
7
+ }
8
+ }
9
+ export function lineLogger(write) {
10
+ const level = (name) => (entry) => {
11
+ write(line(name, entry));
12
+ };
13
+ return {
14
+ debug: level("debug"),
15
+ info: level("info"),
16
+ warn: level("warn"),
17
+ error: level("error"),
18
+ };
19
+ }
@@ -0,0 +1,9 @@
1
+ import type { AdministrationAuthorizationInput, AuthorizationInput, SubscriptionAuthorizationInput } from "solid-objects";
2
+ export interface BrokerAuthorization {
3
+ readonly authorizeMessage: (input: AuthorizationInput) => boolean;
4
+ readonly authorizeQuery: (input: AuthorizationInput) => boolean;
5
+ readonly authorizeAdministration: (input: AdministrationAuthorizationInput) => boolean;
6
+ readonly authorizeDestroy: (input: object) => boolean;
7
+ readonly authorizeSubscription: (input: SubscriptionAuthorizationInput) => boolean;
8
+ }
9
+ export declare function brokerAuthorization(broker: object): BrokerAuthorization;
@@ -0,0 +1,11 @@
1
+ const brokerOperations = ["adopt", "beginEpoch", "execute", "recover"];
2
+ export function brokerAuthorization(broker) {
3
+ return {
4
+ authorizeMessage: (input) => input.authorizationContext === broker &&
5
+ brokerOperations.includes(input.operation),
6
+ authorizeQuery: () => false,
7
+ authorizeAdministration: (input) => input.authorizationContext === broker,
8
+ authorizeDestroy: () => false,
9
+ authorizeSubscription: (input) => input.authorizationContext === broker,
10
+ };
11
+ }
@@ -0,0 +1,45 @@
1
+ import type { Database } from "solid-objects";
2
+ import type { AuthorityCommand, AuthorityEvent } from "../../authority/transitions.ts";
3
+ import { type SqlConnection } from "../../storage/domain-rows.ts";
4
+ export interface CommandRecord {
5
+ readonly commandId: string;
6
+ readonly sequence: number;
7
+ readonly runId: string;
8
+ readonly recordedAt: string;
9
+ readonly commandDigest: string;
10
+ readonly command: AuthorityCommand;
11
+ }
12
+ export type PublishedEvent = Omit<AuthorityEvent, "request">;
13
+ export interface EventPage {
14
+ readonly events: readonly PublishedEvent[];
15
+ readonly earliest: number;
16
+ readonly latest: number;
17
+ }
18
+ export interface EventCursor {
19
+ readonly after: number;
20
+ readonly limit: number;
21
+ readonly runId?: string;
22
+ }
23
+ export interface Sequences {
24
+ readonly latest: number;
25
+ readonly runs: Readonly<Record<string, number>>;
26
+ readonly times: Readonly<Record<string, string>>;
27
+ }
28
+ export interface CompletionCursor {
29
+ readonly runId: string;
30
+ readonly atOrBefore: number;
31
+ }
32
+ export interface AuthorityQueries {
33
+ readonly document: (digest: string) => Promise<string | undefined>;
34
+ readonly receipt: (commandId: string) => Promise<CommandRecord | undefined>;
35
+ readonly eventsAfter: (cursor: EventCursor) => Promise<EventPage>;
36
+ readonly latestCompletion: (cursor: CompletionCursor) => Promise<PublishedEvent | undefined>;
37
+ readonly sequences: () => Promise<Sequences>;
38
+ readonly workflowIds: () => Promise<Readonly<Record<string, string>>>;
39
+ }
40
+ export type Read = <Value>(query: (connection: SqlConnection) => Promise<Value>) => Promise<Value>;
41
+ export declare function guardedRead(access: {
42
+ readonly reader: Database;
43
+ readonly ready: () => Promise<void>;
44
+ }): Read;
45
+ export declare function authorityQueries(read: Read): AuthorityQueries;
@@ -0,0 +1,85 @@
1
+ import { parseCommand } from "../../authority/commands.js";
2
+ import { documentBody } from "../../storage/decision-rows.js";
3
+ import { integer, latestSequence, text, } from "../../storage/domain-rows.js";
4
+ import { storedEvents } from "../authority-restore.js";
5
+ import { documentDigest } from "../decision-restore.js";
6
+ async function receipt(connection, commandId) {
7
+ const row = await connection.get("SELECT c.request, c.sequence, e.run_id, e.recorded_at FROM commands c JOIN events e ON e.sequence = c.sequence WHERE c.command_id = ?", [commandId]);
8
+ if (row === undefined)
9
+ return undefined;
10
+ const request = text(row, "request");
11
+ const command = parseCommand(JSON.parse(request));
12
+ if (command === null)
13
+ throw new Error(`invalid-command-row: ${commandId}`);
14
+ return {
15
+ commandId,
16
+ sequence: integer(row, "sequence"),
17
+ runId: text(row, "run_id"),
18
+ recordedAt: text(row, "recorded_at"),
19
+ commandDigest: documentDigest(request),
20
+ command,
21
+ };
22
+ }
23
+ async function eventsAfter(connection, cursor) {
24
+ const scoped = cursor.runId === undefined ? "" : " AND run_id = ?";
25
+ const parameters = cursor.runId === undefined
26
+ ? [cursor.after, cursor.limit]
27
+ : [cursor.after, cursor.runId, cursor.limit];
28
+ const rows = await connection.all(`SELECT sequence, type, run_id, command_id, recorded_at, payload FROM events WHERE sequence > ?${scoped} ORDER BY sequence LIMIT ?`, parameters);
29
+ return {
30
+ events: publishedEvents(rows),
31
+ earliest: integer(await connection.get("SELECT coalesce(min(sequence), 0) AS sequence FROM events"), "sequence"),
32
+ latest: await latestSequence(connection),
33
+ };
34
+ }
35
+ function publishedEvents(rows) {
36
+ return storedEvents(rows.map((row) => ({
37
+ sequence: integer(row, "sequence"),
38
+ type: text(row, "type"),
39
+ runId: text(row, "run_id"),
40
+ commandId: text(row, "command_id"),
41
+ recordedAt: text(row, "recorded_at"),
42
+ request: "",
43
+ payload: text(row, "payload"),
44
+ }))).map((event) => ({
45
+ sequence: event.sequence,
46
+ type: event.type,
47
+ runId: event.runId,
48
+ commandId: event.commandId,
49
+ recordedAt: event.recordedAt,
50
+ payload: event.payload,
51
+ }));
52
+ }
53
+ async function latestCompletion(connection, cursor) {
54
+ const row = await connection.get("SELECT sequence, type, run_id, command_id, recorded_at, payload FROM events WHERE run_id = ? AND type = 'run.completed' AND sequence <= ? ORDER BY sequence DESC LIMIT 1", [cursor.runId, cursor.atOrBefore]);
55
+ return row === undefined ? undefined : publishedEvents([row])[0];
56
+ }
57
+ async function sequences(connection) {
58
+ const rows = await connection.all("SELECT r.run_id, r.sequence, e.recorded_at FROM runs r JOIN events e ON e.sequence = r.sequence ORDER BY r.run_id");
59
+ return {
60
+ latest: await latestSequence(connection),
61
+ runs: Object.fromEntries(rows.map((row) => [text(row, "run_id"), integer(row, "sequence")])),
62
+ times: Object.fromEntries(rows.map((row) => [text(row, "run_id"), text(row, "recorded_at")])),
63
+ };
64
+ }
65
+ async function workflowIds(connection) {
66
+ const rows = await connection.all("SELECT d.run_id, json_extract(s.body, '$.workflowId') AS workflow_id FROM run_details d JOIN documents s ON s.digest = d.submission WHERE json_valid(s.body) AND json_type(s.body, '$.workflowId') = 'text'");
67
+ return Object.fromEntries(rows.map((row) => [text(row, "run_id"), text(row, "workflow_id")]));
68
+ }
69
+ export function guardedRead(access) {
70
+ const { reader, ready } = access;
71
+ return async (query) => {
72
+ await ready();
73
+ return reader.connection(query);
74
+ };
75
+ }
76
+ export function authorityQueries(read) {
77
+ return {
78
+ document: (digest) => read((connection) => documentBody(connection, digest)),
79
+ receipt: (commandId) => read((connection) => receipt(connection, commandId)),
80
+ eventsAfter: (cursor) => read((connection) => eventsAfter(connection, cursor)),
81
+ latestCompletion: (cursor) => read((connection) => latestCompletion(connection, cursor)),
82
+ sequences: () => read(sequences),
83
+ workflowIds: () => read(workflowIds),
84
+ };
85
+ }
@@ -0,0 +1,28 @@
1
+ import type { JsonObject } from "solid-objects";
2
+ import type { EffectIntent } from "../../authority/reducer.ts";
3
+ export type StoreReceipt = {
4
+ readonly kind: "accepted" | "duplicate";
5
+ readonly sequence: number;
6
+ readonly intents: readonly EffectIntent[];
7
+ readonly disposition?: string;
8
+ } | {
9
+ readonly kind: "rejected";
10
+ readonly reason: string;
11
+ readonly detail?: string;
12
+ } | {
13
+ readonly kind: "failed";
14
+ readonly reason: "storage-failure" | "storage-unavailable" | "authority-unavailable";
15
+ readonly detail: string;
16
+ };
17
+ export declare const unserializable: StoreReceipt;
18
+ export declare const invalidCommand: StoreReceipt;
19
+ export declare const maximumRequestBytes = 900000;
20
+ export declare const tooLarge: StoreReceipt;
21
+ export declare function oversized(request: JsonObject): boolean;
22
+ export declare function failed(error: unknown): Extract<StoreReceipt, {
23
+ kind: "failed";
24
+ }>;
25
+ export declare function storeReceipt(value: unknown): StoreReceipt;
26
+ export declare function json(value: unknown): JsonObject;
27
+ export declare function textList(value: unknown): readonly string[] | undefined;
28
+ export declare function serializable(value: unknown): JsonObject | undefined;
@@ -0,0 +1,84 @@
1
+ import { integer, text } from "../../storage/domain-rows.js";
2
+ import { intentKind } from "../authority-restore.js";
3
+ export const unserializable = {
4
+ kind: "rejected",
5
+ reason: "invalid-command",
6
+ detail: "unserializable-command",
7
+ };
8
+ export const invalidCommand = {
9
+ kind: "rejected",
10
+ reason: "invalid-command",
11
+ };
12
+ export const maximumRequestBytes = 900_000;
13
+ export const tooLarge = {
14
+ kind: "rejected",
15
+ reason: "request-too-large",
16
+ detail: `A request has at most ${String(maximumRequestBytes)} bytes.`,
17
+ };
18
+ export function oversized(request) {
19
+ return Buffer.byteLength(JSON.stringify(request)) > maximumRequestBytes;
20
+ }
21
+ export function failed(error) {
22
+ const name = String(Reflect.get(Object(error), "name"));
23
+ if (name === "MessageFailed")
24
+ return {
25
+ kind: "failed",
26
+ reason: "storage-failure",
27
+ detail: String(Reflect.get(Object(Reflect.get(Object(error), "details")), "message")),
28
+ };
29
+ return {
30
+ kind: "failed",
31
+ reason: "authority-unavailable",
32
+ detail: `${name}: ${String(Reflect.get(Object(error), "message"))}`,
33
+ };
34
+ }
35
+ export function storeReceipt(value) {
36
+ const kind = text(value, "kind");
37
+ if (kind === "rejected") {
38
+ const detail = Reflect.get(Object(value), "detail");
39
+ return {
40
+ kind,
41
+ reason: text(value, "reason"),
42
+ ...(typeof detail === "string" ? { detail } : {}),
43
+ };
44
+ }
45
+ if (kind !== "accepted" && kind !== "duplicate")
46
+ throw new Error(`invalid-receipt: ${kind}`);
47
+ const intents = Reflect.get(Object(value), "intents");
48
+ if (!Array.isArray(intents))
49
+ throw new Error("invalid-receipt: intents");
50
+ const disposition = Reflect.get(Object(value), "disposition");
51
+ return {
52
+ kind,
53
+ sequence: integer(value, "sequence"),
54
+ intents: intents.map((intent) => ({
55
+ kind: intentKind(text(intent, "kind")),
56
+ runId: text(intent, "runId"),
57
+ operationId: text(intent, "operationId"),
58
+ })),
59
+ ...(typeof disposition === "string" ? { disposition } : {}),
60
+ };
61
+ }
62
+ export function json(value) {
63
+ const copy = JSON.parse(JSON.stringify(value));
64
+ if (!isJsonObject(copy))
65
+ throw new Error("invalid-json-object");
66
+ return copy;
67
+ }
68
+ function isJsonObject(value) {
69
+ return typeof value === "object" && value !== null && !Array.isArray(value);
70
+ }
71
+ export function textList(value) {
72
+ if (!Array.isArray(value))
73
+ return undefined;
74
+ const items = value;
75
+ return items.every((item) => typeof item === "string") ? items : undefined;
76
+ }
77
+ export function serializable(value) {
78
+ try {
79
+ return json(value);
80
+ }
81
+ catch {
82
+ return undefined;
83
+ }
84
+ }
@@ -0,0 +1,13 @@
1
+ import type { Database, SolidObjectsRuntime } from "solid-objects";
2
+ import type { deliveryHandler } from "./authority-delivery.ts";
3
+ export interface DeliveryRegistration {
4
+ readonly runtime: Pick<SolidObjectsRuntime, "registerEffect" | "close">;
5
+ readonly database: Pick<Database, "close">;
6
+ readonly handle: ReturnType<typeof deliveryHandler>;
7
+ readonly shutdownMilliseconds: number;
8
+ }
9
+ export interface TrackedDelivery {
10
+ readonly stop: () => Promise<void>;
11
+ readonly handlersSettled: () => Promise<boolean>;
12
+ }
13
+ export declare function trackedDelivery(registration: DeliveryRegistration): TrackedDelivery;
@@ -0,0 +1,69 @@
1
+ import { setTimeout as delay } from "node:timers/promises";
2
+ import { deliverEffect } from "./authority-actor.js";
3
+ export function trackedDelivery(registration) {
4
+ const { runtime, database, handle, shutdownMilliseconds } = registration;
5
+ const handlers = new Set();
6
+ runtime.registerEffect(deliverEffect, (argumentsValue, context) => tracked(handlers, handle(argumentsValue, context)));
7
+ let released;
8
+ return {
9
+ handlersSettled: async () => {
10
+ await settledWithin([...handlers], shutdownMilliseconds);
11
+ return handlers.size === 0;
12
+ },
13
+ stop: () => {
14
+ const libraryWaited = released === undefined && handlers.size > 0;
15
+ released ??= Promise.allSettled([...handlers]).then(() => closedInOrder([() => runtime.close(), () => database.close()]));
16
+ return releasedWithin({
17
+ released,
18
+ handlers,
19
+ milliseconds: libraryWaited ? 0 : shutdownMilliseconds,
20
+ });
21
+ },
22
+ };
23
+ }
24
+ async function closedInOrder(closers) {
25
+ const attempts = [];
26
+ for (const close of closers) {
27
+ const attempt = close();
28
+ attempts.push(attempt);
29
+ await attempt.catch(() => undefined);
30
+ }
31
+ await Promise.all(attempts);
32
+ }
33
+ async function settledWithin(handlers, milliseconds) {
34
+ if (handlers.length === 0)
35
+ return;
36
+ const limit = new AbortController();
37
+ try {
38
+ await Promise.race([
39
+ Promise.allSettled(handlers),
40
+ delay(milliseconds, undefined, { signal: limit.signal }).catch(() => undefined),
41
+ ]);
42
+ }
43
+ finally {
44
+ limit.abort();
45
+ }
46
+ }
47
+ function tracked(handlers, handling) {
48
+ handlers.add(handling);
49
+ const remove = () => {
50
+ handlers.delete(handling);
51
+ };
52
+ void handling.then(remove, remove);
53
+ return handling;
54
+ }
55
+ async function releasedWithin(waiting) {
56
+ const { released, handlers, milliseconds } = waiting;
57
+ let timer;
58
+ const timedOut = new Promise((_resolve, reject) => {
59
+ timer = setTimeout(() => {
60
+ reject(new Error(`authority-close-timeout: in-flight delivery handlers: ${String(handlers.size)}`));
61
+ }, milliseconds);
62
+ });
63
+ try {
64
+ await Promise.race([released, timedOut]);
65
+ }
66
+ finally {
67
+ clearTimeout(timer);
68
+ }
69
+ }
@@ -0,0 +1,60 @@
1
+ import { type Database, type InstrumentationEvent, type JsonObject, type SolidObjectsRuntime } from "solid-objects";
2
+ import { type SequenceListener } from "./authority-changes.ts";
3
+ import { type SchemaState } from "../../storage/domain-schema.ts";
4
+ import { type AvailableManifest, type Delivery } from "./authority-delivery.ts";
5
+ import { type AuthorityTiming, type EffectSettings } from "./authority-settings.ts";
6
+ export interface AuthorityOptions {
7
+ readonly delivery?: Delivery;
8
+ readonly timing?: AuthorityTiming;
9
+ readonly effects?: Partial<EffectSettings>;
10
+ readonly clock?: () => string;
11
+ readonly instrumentation?: (event: InstrumentationEvent) => void;
12
+ readonly log?: (line: string) => void;
13
+ readonly available?: AvailableManifest;
14
+ }
15
+ export interface Refusal {
16
+ readonly kind: "refused";
17
+ readonly reason: string;
18
+ readonly detail: string;
19
+ }
20
+ export { authorityTiming } from "./authority-settings.ts";
21
+ export type { AuthorityTiming } from "./authority-settings.ts";
22
+ export declare function refused(reason: string, error: unknown): Refusal;
23
+ export interface Owned {
24
+ readonly kind: "owned";
25
+ readonly database: Database;
26
+ readonly schema: Exclude<SchemaState, Refusal>;
27
+ }
28
+ export declare function ownedDatabase(directory: string): Promise<Owned | Refusal>;
29
+ export interface OwnedRuntime extends Owned {
30
+ readonly parts: AuthorityRuntime;
31
+ }
32
+ export declare function ownedRuntime(directory: string, options: AuthorityOptions): Promise<OwnedRuntime | Refusal>;
33
+ export interface AuthorityInvoker {
34
+ readonly beginEpoch: () => Promise<unknown>;
35
+ readonly execute: (request: JsonObject) => Promise<unknown>;
36
+ readonly adopt: () => Promise<unknown>;
37
+ readonly recover: () => Promise<unknown>;
38
+ }
39
+ export declare function recoverDeliveries(invoker: AuthorityInvoker): Promise<number>;
40
+ export interface SessionLimits {
41
+ readonly stopLimit: number;
42
+ readonly recoveryLimit: number;
43
+ }
44
+ export interface AuthorityRuntime {
45
+ readonly runtime: SolidObjectsRuntime;
46
+ readonly reader: Database;
47
+ readonly invoker: (actorId: string, idempotencyKey?: string) => AuthorityInvoker;
48
+ readonly stop: () => Promise<void>;
49
+ readonly handlersSettled: () => Promise<boolean>;
50
+ readonly setEpoch: (epoch: number) => void;
51
+ readonly unhealthy: () => string | undefined;
52
+ readonly watchMilliseconds: number;
53
+ readonly limits: SessionLimits;
54
+ readonly releaseEarlierOwners: () => Promise<void>;
55
+ readonly retryDeliveryCallbacks: () => Promise<void>;
56
+ readonly storedActorRefusal: (actorId: string) => Promise<Refusal | undefined>;
57
+ readonly condition: () => Promise<string | undefined>;
58
+ readonly subscribe: (actorId: string, listener: SequenceListener) => () => void;
59
+ }
60
+ export declare function authorityRuntime(database: Database, options: AuthorityOptions): AuthorityRuntime;
@@ -0,0 +1,204 @@
1
+ import { realpath } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { setTimeout as delay } from "node:timers/promises";
4
+ import { guardApplicationDatabase, } from "solid-objects";
5
+ import { sqlite } from "solid-objects/database/sqlite";
6
+ import { recoveryBatch } from "./turn-state.js";
7
+ import { integer, latestSequence, text } from "../../storage/domain-rows.js";
8
+ import { trackedDelivery } from "./authority-release.js";
9
+ import { authorityActor } from "./authority-actor.js";
10
+ import { sequenceSubscriber, } from "./authority-changes.js";
11
+ import { contentionMilliseconds, lockContention, lockExclusively, observeSettings, requiredSettingsViolation, takeOwnership, } from "./authority-connection.js";
12
+ import { inspectSchema, } from "../../storage/domain-schema.js";
13
+ import { deliveryHandler, } from "./authority-delivery.js";
14
+ import { authorityTiming, effectConfiguration, } from "./authority-settings.js";
15
+ import { failureCounter, registeredRuntime, runtimeSettings, wallClock, } from "./runtime-parts.js";
16
+ import { strandingWatchdog, } from "./authority-watchdog.js";
17
+ export { authorityTiming } from "./authority-settings.js";
18
+ export function refused(reason, error) {
19
+ return {
20
+ kind: "refused",
21
+ reason,
22
+ detail: String(Reflect.get(Object(error), "message")),
23
+ };
24
+ }
25
+ export async function ownedDatabase(directory) {
26
+ let database;
27
+ try {
28
+ database = sqlite({
29
+ path: join(await realpath(directory), "authority.sqlite"),
30
+ timeoutMilliseconds: contentionMilliseconds,
31
+ lockRetryAttempts: 1,
32
+ });
33
+ }
34
+ catch (error) {
35
+ return refused("storage-failure", error);
36
+ }
37
+ const owned = await ownership(database);
38
+ if (owned.kind === "owned")
39
+ return owned;
40
+ await database.close();
41
+ return owned;
42
+ }
43
+ async function ownership(database) {
44
+ let schema;
45
+ try {
46
+ await lockExclusively(database);
47
+ schema = await database.connection(inspectSchema);
48
+ if (schema.kind === "refused")
49
+ return schema;
50
+ await takeOwnership(database);
51
+ }
52
+ catch (error) {
53
+ return refused(lockContention(error) ? "authority-held" : "storage-failure", error);
54
+ }
55
+ const violation = requiredSettingsViolation(await observeSettings(database));
56
+ return violation === null
57
+ ? { kind: "owned", database, schema }
58
+ : { kind: "refused", reason: "storage-failure", detail: violation };
59
+ }
60
+ export async function ownedRuntime(directory, options) {
61
+ const owned = await ownedDatabase(directory);
62
+ if (owned.kind === "refused")
63
+ return owned;
64
+ try {
65
+ return { ...owned, parts: authorityRuntime(owned.database, options) };
66
+ }
67
+ catch (error) {
68
+ await owned.database.close();
69
+ return refused("invalid-configuration", error);
70
+ }
71
+ }
72
+ export async function recoverDeliveries(invoker) {
73
+ let staged = 0;
74
+ for (;;) {
75
+ const batch = integer(await invoker.recover(), "staged");
76
+ staged += batch;
77
+ if (batch < recoveryBatch)
78
+ return staged;
79
+ }
80
+ }
81
+ function unhealthy(watchdog) {
82
+ const dead = watchdog.deadLettered();
83
+ if (dead !== undefined)
84
+ return `dead-lettered message ${dead}`;
85
+ const stranded = watchdog.stranded();
86
+ return stranded === undefined ? undefined : `stranded message ${stranded}`;
87
+ }
88
+ const deliveryCallbacks = ["deliveryCompleted", "deliveryFailed"];
89
+ async function retryDeliveryCallbacks(retry) {
90
+ const administration = { authorizationContext: retry.broker };
91
+ const letters = await retry.runtime.deadLetters.all(administration);
92
+ for (const letter of letters.filter((item) => item.actorType === "ClovingAuthority" &&
93
+ deliveryCallbacks.includes(item.operation) &&
94
+ item.retriedMessageId === null))
95
+ await retry.runtime.deadLetters.retry(letter.id, administration);
96
+ }
97
+ async function releaseEarlierOwners(release) {
98
+ const { runtime, broker, timing } = release;
99
+ const administration = { authorizationContext: broker };
100
+ const bound = timing.aliveThresholdMilliseconds + 2 * timing.heartbeatMilliseconds;
101
+ for (let waited = 0;; waited += timing.heartbeatMilliseconds) {
102
+ await runtime.processes.cleanup(administration);
103
+ const earlier = (await runtime.processes.all(administration)).filter((record) => record.shutdownState !== "stopped");
104
+ if (earlier.length === 0)
105
+ return;
106
+ if (waited > bound)
107
+ throw new Error(`earlier-owner-not-released: ${earlier.map((record) => record.id).join(",")}`);
108
+ await delay(timing.heartbeatMilliseconds);
109
+ }
110
+ }
111
+ const actorSequenceMismatch = {
112
+ kind: "refused",
113
+ reason: "projection-mismatch",
114
+ detail: "actor-sequence",
115
+ };
116
+ async function storedActorRefusal(check) {
117
+ const { database, actor, actorId } = check;
118
+ const supported = actor.stateVersion ?? 1;
119
+ const { row, latest } = await database.connection(async (connection) => ({
120
+ row: await connection.get("SELECT state_version, state FROM solid_instances WHERE actor_type = ? AND actor_id = ?", [actor.actorType, actorId]),
121
+ latest: await latestSequence(connection),
122
+ }));
123
+ const version = row === undefined ? supported : integer(row, "state_version");
124
+ if (version > supported)
125
+ return {
126
+ kind: "refused",
127
+ reason: "incompatible-state-version",
128
+ detail: `stored state version ${String(version)} is newer than code version ${String(supported)}`,
129
+ };
130
+ const sequence = row === undefined ? 0 : integer(JSON.parse(text(row, "state")), "sequence");
131
+ return sequence === latest ? undefined : actorSequenceMismatch;
132
+ }
133
+ async function condition(watch) {
134
+ const { runtime, broker, watchdog } = watch;
135
+ const dead = watchdog.deadLettered();
136
+ if (dead === undefined)
137
+ return unhealthy(watchdog);
138
+ return `dead-lettered message ${dead}: ${await deadLetterCause({ runtime, broker, messageId: dead })}`;
139
+ }
140
+ async function deadLetterCause(lookup) {
141
+ const { runtime, broker, messageId } = lookup;
142
+ try {
143
+ const letters = await runtime.deadLetters.all({
144
+ authorizationContext: broker,
145
+ });
146
+ const letter = letters.find((item) => item.messageId === messageId);
147
+ return String(Reflect.get(Object(letter?.error), "message"));
148
+ }
149
+ catch {
150
+ return "unreadable cause";
151
+ }
152
+ }
153
+ export function authorityRuntime(database, options) {
154
+ const timing = options.timing ?? authorityTiming;
155
+ const reader = guardApplicationDatabase(database);
156
+ const broker = {};
157
+ let epoch = 0;
158
+ const watchdog = strandingWatchdog({
159
+ boundMilliseconds: timing.callTimeoutMilliseconds,
160
+ });
161
+ const effects = effectConfiguration(options);
162
+ const shared = { reader, effects, clock: options.clock ?? wallClock };
163
+ const ClovingAuthority = authorityActor({
164
+ ...shared,
165
+ failed: failureCounter(),
166
+ });
167
+ const runtime = registeredRuntime({
168
+ database,
169
+ actor: ClovingAuthority,
170
+ settings: runtimeSettings({ timing, options, broker, watchdog }),
171
+ });
172
+ const delivery = trackedDelivery({
173
+ runtime,
174
+ database,
175
+ shutdownMilliseconds: timing.shutdownMilliseconds,
176
+ handle: deliveryHandler({
177
+ ...shared,
178
+ delivery: options.delivery,
179
+ epoch: () => epoch,
180
+ available: options.available,
181
+ }),
182
+ });
183
+ return {
184
+ runtime,
185
+ reader,
186
+ invoker: (actorId, idempotencyKey) => runtime.ref(ClovingAuthority, actorId).with({
187
+ authorizationContext: broker,
188
+ timeoutMilliseconds: timing.callTimeoutMilliseconds,
189
+ ...(idempotencyKey === undefined ? {} : { idempotencyKey }),
190
+ }),
191
+ ...delivery,
192
+ setEpoch: (value) => {
193
+ epoch = value;
194
+ },
195
+ unhealthy: () => unhealthy(watchdog),
196
+ watchMilliseconds: timing.leaseMilliseconds,
197
+ limits: effects,
198
+ releaseEarlierOwners: () => releaseEarlierOwners({ runtime, broker, timing }),
199
+ retryDeliveryCallbacks: () => retryDeliveryCallbacks({ runtime, broker }),
200
+ storedActorRefusal: (actorId) => storedActorRefusal({ database, actor: ClovingAuthority, actorId }),
201
+ condition: () => condition({ runtime, broker, watchdog }),
202
+ subscribe: sequenceSubscriber({ realtime: runtime.realtime, broker }),
203
+ };
204
+ }