cloving 0.3.20 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. package/{LICENSE.md → LICENSE} +1 -1
  2. package/README.md +606 -182
  3. package/dist/src/authority/budgets.d.ts +12 -0
  4. package/dist/src/authority/budgets.js +42 -0
  5. package/dist/src/authority/commands.d.ts +7 -0
  6. package/dist/src/authority/commands.js +271 -0
  7. package/dist/src/authority/details.d.ts +28 -0
  8. package/dist/src/authority/details.js +33 -0
  9. package/dist/src/authority/dispatch-decision.d.ts +40 -0
  10. package/dist/src/authority/dispatch-decision.js +47 -0
  11. package/dist/src/authority/effect-requests.d.ts +2 -0
  12. package/dist/src/authority/effect-requests.js +139 -0
  13. package/dist/src/authority/effect-results.d.ts +4 -0
  14. package/dist/src/authority/effect-results.js +236 -0
  15. package/dist/src/authority/events.d.ts +2 -0
  16. package/dist/src/authority/events.js +45 -0
  17. package/dist/src/authority/gate-reduction.d.ts +8 -0
  18. package/dist/src/authority/gate-reduction.js +109 -0
  19. package/dist/src/authority/gates.d.ts +48 -0
  20. package/dist/src/authority/gates.js +77 -0
  21. package/dist/src/authority/history-state.d.ts +15 -0
  22. package/dist/src/authority/history-state.js +61 -0
  23. package/dist/src/authority/history.d.ts +13 -0
  24. package/dist/src/authority/history.js +37 -0
  25. package/dist/src/authority/instants.d.ts +3 -0
  26. package/dist/src/authority/instants.js +38 -0
  27. package/dist/src/authority/leases.d.ts +15 -0
  28. package/dist/src/authority/leases.js +113 -0
  29. package/dist/src/authority/operations.d.ts +101 -0
  30. package/dist/src/authority/operations.js +75 -0
  31. package/dist/src/authority/reconciliation.d.ts +29 -0
  32. package/dist/src/authority/reconciliation.js +156 -0
  33. package/dist/src/authority/reducer.d.ts +41 -0
  34. package/dist/src/authority/reducer.js +139 -0
  35. package/dist/src/authority/reduction-state.d.ts +36 -0
  36. package/dist/src/authority/reduction-state.js +68 -0
  37. package/dist/src/authority/reduction.d.ts +6 -0
  38. package/dist/src/authority/reduction.js +160 -0
  39. package/dist/src/authority/status-closure.d.ts +4 -0
  40. package/dist/src/authority/status-closure.js +57 -0
  41. package/dist/src/authority/status-effects.d.ts +17 -0
  42. package/dist/src/authority/status-effects.js +43 -0
  43. package/dist/src/authority/status-input.d.ts +45 -0
  44. package/dist/src/authority/status-input.js +9 -0
  45. package/dist/src/authority/status.d.ts +32 -0
  46. package/dist/src/authority/status.js +256 -0
  47. package/dist/src/authority/stop-sequence.d.ts +37 -0
  48. package/dist/src/authority/stop-sequence.js +91 -0
  49. package/dist/src/authority/transitions.d.ts +63 -0
  50. package/dist/src/authority/transitions.js +124 -0
  51. package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
  52. package/dist/src/broker/actor/adapter-calls.js +34 -0
  53. package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
  54. package/dist/src/broker/actor/adapter-outcomes.js +80 -0
  55. package/dist/src/broker/actor/authority-actor.d.ts +25 -0
  56. package/dist/src/broker/actor/authority-actor.js +169 -0
  57. package/dist/src/broker/actor/authority-changes.d.ts +31 -0
  58. package/dist/src/broker/actor/authority-changes.js +46 -0
  59. package/dist/src/broker/actor/authority-connection.d.ts +15 -0
  60. package/dist/src/broker/actor/authority-connection.js +44 -0
  61. package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
  62. package/dist/src/broker/actor/authority-conversion.js +72 -0
  63. package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
  64. package/dist/src/broker/actor/authority-delivery.js +162 -0
  65. package/dist/src/broker/actor/authority-logger.d.ts +2 -0
  66. package/dist/src/broker/actor/authority-logger.js +19 -0
  67. package/dist/src/broker/actor/authority-policy.d.ts +9 -0
  68. package/dist/src/broker/actor/authority-policy.js +11 -0
  69. package/dist/src/broker/actor/authority-queries.d.ts +45 -0
  70. package/dist/src/broker/actor/authority-queries.js +85 -0
  71. package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
  72. package/dist/src/broker/actor/authority-receipts.js +84 -0
  73. package/dist/src/broker/actor/authority-release.d.ts +13 -0
  74. package/dist/src/broker/actor/authority-release.js +69 -0
  75. package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
  76. package/dist/src/broker/actor/authority-runtime.js +204 -0
  77. package/dist/src/broker/actor/authority-session.d.ts +67 -0
  78. package/dist/src/broker/actor/authority-session.js +251 -0
  79. package/dist/src/broker/actor/authority-settings.d.ts +33 -0
  80. package/dist/src/broker/actor/authority-settings.js +63 -0
  81. package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
  82. package/dist/src/broker/actor/authority-upgrades.js +12 -0
  83. package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
  84. package/dist/src/broker/actor/authority-watchdog.js +41 -0
  85. package/dist/src/broker/actor/authority.d.ts +14 -0
  86. package/dist/src/broker/actor/authority.js +115 -0
  87. package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
  88. package/dist/src/broker/actor/delivery-intents.js +77 -0
  89. package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
  90. package/dist/src/broker/actor/delivery-plan.js +109 -0
  91. package/dist/src/broker/actor/delivery-results.d.ts +11 -0
  92. package/dist/src/broker/actor/delivery-results.js +63 -0
  93. package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
  94. package/dist/src/broker/actor/effect-delivery.js +118 -0
  95. package/dist/src/broker/actor/effect-plan.d.ts +41 -0
  96. package/dist/src/broker/actor/effect-plan.js +173 -0
  97. package/dist/src/broker/actor/effect-queries.d.ts +27 -0
  98. package/dist/src/broker/actor/effect-queries.js +80 -0
  99. package/dist/src/broker/actor/effect-turn.d.ts +25 -0
  100. package/dist/src/broker/actor/effect-turn.js +84 -0
  101. package/dist/src/broker/actor/pin-check.d.ts +6 -0
  102. package/dist/src/broker/actor/pin-check.js +12 -0
  103. package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
  104. package/dist/src/broker/actor/runtime-parts.js +34 -0
  105. package/dist/src/broker/actor/stop-plan.d.ts +20 -0
  106. package/dist/src/broker/actor/stop-plan.js +46 -0
  107. package/dist/src/broker/actor/stop-turn.d.ts +17 -0
  108. package/dist/src/broker/actor/stop-turn.js +42 -0
  109. package/dist/src/broker/actor/turn-draft.d.ts +31 -0
  110. package/dist/src/broker/actor/turn-draft.js +138 -0
  111. package/dist/src/broker/actor/turn-plan.d.ts +17 -0
  112. package/dist/src/broker/actor/turn-plan.js +136 -0
  113. package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
  114. package/dist/src/broker/actor/turn-refusals.js +35 -0
  115. package/dist/src/broker/actor/turn-staging.d.ts +78 -0
  116. package/dist/src/broker/actor/turn-staging.js +34 -0
  117. package/dist/src/broker/actor/turn-state.d.ts +34 -0
  118. package/dist/src/broker/actor/turn-state.js +208 -0
  119. package/dist/src/broker/authority-admission.d.ts +21 -0
  120. package/dist/src/broker/authority-admission.js +70 -0
  121. package/dist/src/broker/authority-restore.d.ts +30 -0
  122. package/dist/src/broker/authority-restore.js +165 -0
  123. package/dist/src/broker/decision-restore.d.ts +16 -0
  124. package/dist/src/broker/decision-restore.js +158 -0
  125. package/dist/src/broker/decision-upgrade.d.ts +3 -0
  126. package/dist/src/broker/decision-upgrade.js +12 -0
  127. package/dist/src/broker/effect-restore.d.ts +20 -0
  128. package/dist/src/broker/effect-restore.js +111 -0
  129. package/dist/src/broker/effect-upgrade.d.ts +3 -0
  130. package/dist/src/broker/effect-upgrade.js +9 -0
  131. package/dist/src/broker/operation-digest.d.ts +1 -0
  132. package/dist/src/broker/operation-digest.js +4 -0
  133. package/dist/src/broker/socket-address.d.ts +9 -0
  134. package/dist/src/broker/socket-address.js +14 -0
  135. package/dist/src/broker/workflow-pin.d.ts +2 -0
  136. package/dist/src/broker/workflow-pin.js +5 -0
  137. package/dist/src/chats/analysis-batches.d.ts +24 -0
  138. package/dist/src/chats/analysis-batches.js +83 -0
  139. package/dist/src/chats/analysis-contract.d.ts +80 -0
  140. package/dist/src/chats/analysis-contract.js +16 -0
  141. package/dist/src/chats/analysis-data.d.ts +3 -0
  142. package/dist/src/chats/analysis-data.js +85 -0
  143. package/dist/src/chats/analysis-input.d.ts +12 -0
  144. package/dist/src/chats/analysis-input.js +83 -0
  145. package/dist/src/chats/analysis-links.d.ts +2 -0
  146. package/dist/src/chats/analysis-links.js +25 -0
  147. package/dist/src/chats/analysis-prompt.d.ts +10 -0
  148. package/dist/src/chats/analysis-prompt.js +16 -0
  149. package/dist/src/chats/analysis-proposal.d.ts +2 -0
  150. package/dist/src/chats/analysis-proposal.js +32 -0
  151. package/dist/src/chats/analysis-provenance.d.ts +4 -0
  152. package/dist/src/chats/analysis-provenance.js +99 -0
  153. package/dist/src/chats/analysis-shape.d.ts +3 -0
  154. package/dist/src/chats/analysis-shape.js +228 -0
  155. package/dist/src/chats/analysis.d.ts +3 -0
  156. package/dist/src/chats/analysis.js +42 -0
  157. package/dist/src/chats/corpus-input.d.ts +5 -0
  158. package/dist/src/chats/corpus-input.js +288 -0
  159. package/dist/src/chats/destination.d.ts +4 -0
  160. package/dist/src/chats/destination.js +96 -0
  161. package/dist/src/chats/import.d.ts +15 -0
  162. package/dist/src/chats/import.js +243 -0
  163. package/dist/src/chats/input-file.d.ts +3 -0
  164. package/dist/src/chats/input-file.js +32 -0
  165. package/dist/src/chats/normalize.d.ts +29 -0
  166. package/dist/src/chats/normalize.js +155 -0
  167. package/dist/src/chats/previous-import.d.ts +5 -0
  168. package/dist/src/chats/previous-import.js +34 -0
  169. package/dist/src/chats/reader.d.ts +21 -0
  170. package/dist/src/chats/reader.js +118 -0
  171. package/dist/src/chats/redact-import.d.ts +14 -0
  172. package/dist/src/chats/redact-import.js +141 -0
  173. package/dist/src/chats/redaction.d.ts +41 -0
  174. package/dist/src/chats/redaction.js +161 -0
  175. package/dist/src/chats/revision-input.d.ts +3 -0
  176. package/dist/src/chats/revision-input.js +180 -0
  177. package/dist/src/chats/revision.d.ts +48 -0
  178. package/dist/src/chats/revision.js +94 -0
  179. package/dist/src/chats/selection.d.ts +25 -0
  180. package/dist/src/chats/selection.js +109 -0
  181. package/dist/src/chats/source.d.ts +23 -0
  182. package/dist/src/chats/source.js +135 -0
  183. package/dist/src/chats/structure.d.ts +57 -0
  184. package/dist/src/chats/structure.js +216 -0
  185. package/dist/src/cli/arguments.d.ts +31 -0
  186. package/dist/src/cli/arguments.js +235 -0
  187. package/dist/src/cli/client.d.ts +16 -0
  188. package/dist/src/cli/client.js +159 -0
  189. package/dist/src/cli/commands.d.ts +17 -0
  190. package/dist/src/cli/commands.js +271 -0
  191. package/dist/src/cli/main.d.ts +2 -0
  192. package/dist/src/cli/main.js +127 -0
  193. package/dist/src/cli/render.d.ts +10 -0
  194. package/dist/src/cli/render.js +254 -0
  195. package/dist/src/cli/runtime-arguments.d.ts +73 -0
  196. package/dist/src/cli/runtime-arguments.js +248 -0
  197. package/dist/src/cli/runtime-directory.d.ts +4 -0
  198. package/dist/src/cli/runtime-directory.js +25 -0
  199. package/dist/src/cli/toolchain.d.ts +3 -0
  200. package/dist/src/cli/toolchain.js +74 -0
  201. package/dist/src/cli/usage-render.d.ts +3 -0
  202. package/dist/src/cli/usage-render.js +28 -0
  203. package/dist/src/cli/usage.d.ts +5 -0
  204. package/dist/src/cli/usage.js +156 -0
  205. package/dist/src/cli/validate.d.ts +38 -0
  206. package/dist/src/cli/validate.js +116 -0
  207. package/dist/src/cli/watch-actions.d.ts +10 -0
  208. package/dist/src/cli/watch-actions.js +58 -0
  209. package/dist/src/cli/watch-board-view.d.ts +54 -0
  210. package/dist/src/cli/watch-board-view.js +201 -0
  211. package/dist/src/cli/watch-board.d.ts +15 -0
  212. package/dist/src/cli/watch-board.js +179 -0
  213. package/dist/src/cli/watch-card-client.d.ts +1 -0
  214. package/dist/src/cli/watch-card-client.js +44 -0
  215. package/dist/src/cli/watch-card-forms.d.ts +2 -0
  216. package/dist/src/cli/watch-card-forms.js +33 -0
  217. package/dist/src/cli/watch-card-reply.d.ts +5 -0
  218. package/dist/src/cli/watch-card-reply.js +34 -0
  219. package/dist/src/cli/watch-card-view.d.ts +40 -0
  220. package/dist/src/cli/watch-card-view.js +86 -0
  221. package/dist/src/cli/watch-client.d.ts +1 -0
  222. package/dist/src/cli/watch-client.js +118 -0
  223. package/dist/src/cli/watch-element.d.ts +11 -0
  224. package/dist/src/cli/watch-element.js +6 -0
  225. package/dist/src/cli/watch-model.d.ts +29 -0
  226. package/dist/src/cli/watch-model.js +278 -0
  227. package/dist/src/cli/watch-navigation.d.ts +9 -0
  228. package/dist/src/cli/watch-navigation.js +40 -0
  229. package/dist/src/cli/watch-page.d.ts +1 -0
  230. package/dist/src/cli/watch-page.js +258 -0
  231. package/dist/src/cli/watch-paths.d.ts +2 -0
  232. package/dist/src/cli/watch-paths.js +52 -0
  233. package/dist/src/cli/watch-phases.d.ts +7 -0
  234. package/dist/src/cli/watch-phases.js +148 -0
  235. package/dist/src/cli/watch-pr-board.d.ts +3 -0
  236. package/dist/src/cli/watch-pr-board.js +26 -0
  237. package/dist/src/cli/watch-pr-command.d.ts +15 -0
  238. package/dist/src/cli/watch-pr-command.js +37 -0
  239. package/dist/src/cli/watch-pr-identity.d.ts +20 -0
  240. package/dist/src/cli/watch-pr-identity.js +62 -0
  241. package/dist/src/cli/watch-pr-observer.d.ts +19 -0
  242. package/dist/src/cli/watch-pr-observer.js +108 -0
  243. package/dist/src/cli/watch-pr-settings.d.ts +8 -0
  244. package/dist/src/cli/watch-pr-settings.js +47 -0
  245. package/dist/src/cli/watch-reads.d.ts +28 -0
  246. package/dist/src/cli/watch-reads.js +248 -0
  247. package/dist/src/cli/watch-render.d.ts +153 -0
  248. package/dist/src/cli/watch-render.js +102 -0
  249. package/dist/src/cli/watch-run-input.d.ts +14 -0
  250. package/dist/src/cli/watch-run-input.js +49 -0
  251. package/dist/src/cli/watch-server.d.ts +13 -0
  252. package/dist/src/cli/watch-server.js +214 -0
  253. package/dist/src/cli/watch-start-view.d.ts +18 -0
  254. package/dist/src/cli/watch-start-view.js +77 -0
  255. package/dist/src/cli/watch-stream.d.ts +11 -0
  256. package/dist/src/cli/watch-stream.js +128 -0
  257. package/dist/src/cli/watch-turn.d.ts +30 -0
  258. package/dist/src/cli/watch-turn.js +135 -0
  259. package/dist/src/cli/watch-usage.d.ts +6 -0
  260. package/dist/src/cli/watch-usage.js +65 -0
  261. package/dist/src/cli/watch-view.d.ts +54 -0
  262. package/dist/src/cli/watch-view.js +267 -0
  263. package/dist/src/cli.d.ts +2 -0
  264. package/dist/src/cli.js +104 -0
  265. package/dist/src/daemon/analysis-launch.d.ts +5 -0
  266. package/dist/src/daemon/analysis-launch.js +81 -0
  267. package/dist/src/daemon/analysis-token.d.ts +6 -0
  268. package/dist/src/daemon/analysis-token.js +88 -0
  269. package/dist/src/daemon/analysis-worker.d.ts +22 -0
  270. package/dist/src/daemon/analysis-worker.js +219 -0
  271. package/dist/src/daemon/chats-files.d.ts +15 -0
  272. package/dist/src/daemon/chats-files.js +113 -0
  273. package/dist/src/daemon/chats-worker.d.ts +12 -0
  274. package/dist/src/daemon/chats-worker.js +200 -0
  275. package/dist/src/daemon/claude-turn.d.ts +38 -0
  276. package/dist/src/daemon/claude-turn.js +216 -0
  277. package/dist/src/daemon/claude-worker.d.ts +29 -0
  278. package/dist/src/daemon/claude-worker.js +276 -0
  279. package/dist/src/daemon/codex-stream.d.ts +4 -0
  280. package/dist/src/daemon/codex-stream.js +129 -0
  281. package/dist/src/daemon/daemon.d.ts +49 -0
  282. package/dist/src/daemon/daemon.js +195 -0
  283. package/dist/src/daemon/delivery-router.d.ts +10 -0
  284. package/dist/src/daemon/delivery-router.js +34 -0
  285. package/dist/src/daemon/github-calls.d.ts +29 -0
  286. package/dist/src/daemon/github-calls.js +127 -0
  287. package/dist/src/daemon/github-issue-methods.d.ts +3 -0
  288. package/dist/src/daemon/github-issue-methods.js +99 -0
  289. package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
  290. package/dist/src/daemon/github-issue-privacy.js +131 -0
  291. package/dist/src/daemon/github-merge.d.ts +18 -0
  292. package/dist/src/daemon/github-merge.js +259 -0
  293. package/dist/src/daemon/github-methods.d.ts +5 -0
  294. package/dist/src/daemon/github-methods.js +202 -0
  295. package/dist/src/daemon/github-operation.d.ts +38 -0
  296. package/dist/src/daemon/github-operation.js +57 -0
  297. package/dist/src/daemon/github-ticket-status.d.ts +3 -0
  298. package/dist/src/daemon/github-ticket-status.js +268 -0
  299. package/dist/src/daemon/github-worker.d.ts +17 -0
  300. package/dist/src/daemon/github-worker.js +281 -0
  301. package/dist/src/daemon/host-environment.d.ts +8 -0
  302. package/dist/src/daemon/host-environment.js +14 -0
  303. package/dist/src/daemon/issue-queue.d.ts +10 -0
  304. package/dist/src/daemon/issue-queue.js +254 -0
  305. package/dist/src/daemon/notify-message.d.ts +14 -0
  306. package/dist/src/daemon/notify-message.js +48 -0
  307. package/dist/src/daemon/notify.d.ts +12 -0
  308. package/dist/src/daemon/notify.js +161 -0
  309. package/dist/src/daemon/operation-journal.d.ts +43 -0
  310. package/dist/src/daemon/operation-journal.js +55 -0
  311. package/dist/src/daemon/retrying-turn.d.ts +9 -0
  312. package/dist/src/daemon/retrying-turn.js +185 -0
  313. package/dist/src/daemon/ticket-registration.d.ts +33 -0
  314. package/dist/src/daemon/ticket-registration.js +177 -0
  315. package/dist/src/daemon/ticket-source.d.ts +17 -0
  316. package/dist/src/daemon/ticket-source.js +36 -0
  317. package/dist/src/daemon/work-tree.d.ts +26 -0
  318. package/dist/src/daemon/work-tree.js +206 -0
  319. package/dist/src/effect-authorization.d.ts +21 -0
  320. package/dist/src/effect-authorization.js +14 -0
  321. package/dist/src/execution-pin.d.ts +4 -0
  322. package/dist/src/execution-pin.js +68 -0
  323. package/dist/src/host/start-delivery.d.ts +41 -0
  324. package/dist/src/host/start-delivery.js +68 -0
  325. package/dist/src/host/step-bridge-host.d.ts +79 -0
  326. package/dist/src/host/step-bridge-host.js +205 -0
  327. package/dist/src/host/step-claims.d.ts +31 -0
  328. package/dist/src/host/step-claims.js +85 -0
  329. package/dist/src/host/world-host.d.ts +21 -0
  330. package/dist/src/host/world-host.js +51 -0
  331. package/dist/src/host/world-reconciliation.d.ts +39 -0
  332. package/dist/src/host/world-reconciliation.js +81 -0
  333. package/dist/src/host/world-runs.d.ts +14 -0
  334. package/dist/src/host/world-runs.js +69 -0
  335. package/dist/src/operation-identity.d.ts +7 -0
  336. package/dist/src/operation-identity.js +59 -0
  337. package/dist/src/protocol.d.ts +35 -0
  338. package/dist/src/protocol.js +64 -0
  339. package/dist/src/resource-files.d.ts +1 -0
  340. package/dist/src/resource-files.js +29 -0
  341. package/dist/src/service/changes.d.ts +11 -0
  342. package/dist/src/service/changes.js +32 -0
  343. package/dist/src/service/decision-handler.d.ts +9 -0
  344. package/dist/src/service/decision-handler.js +233 -0
  345. package/dist/src/service/event-handler.d.ts +10 -0
  346. package/dist/src/service/event-handler.js +70 -0
  347. package/dist/src/service/expiry.d.ts +13 -0
  348. package/dist/src/service/expiry.js +53 -0
  349. package/dist/src/service/gateway.d.ts +21 -0
  350. package/dist/src/service/gateway.js +120 -0
  351. package/dist/src/service/registry.d.ts +40 -0
  352. package/dist/src/service/registry.js +13 -0
  353. package/dist/src/service/replies.d.ts +26 -0
  354. package/dist/src/service/replies.js +56 -0
  355. package/dist/src/service/run-handlers.d.ts +4 -0
  356. package/dist/src/service/run-handlers.js +263 -0
  357. package/dist/src/service/service.d.ts +58 -0
  358. package/dist/src/service/service.js +212 -0
  359. package/dist/src/service/submission-handler.d.ts +4 -0
  360. package/dist/src/service/submission-handler.js +206 -0
  361. package/dist/src/service/transport.d.ts +16 -0
  362. package/dist/src/service/transport.js +141 -0
  363. package/dist/src/service/worker-port.d.ts +85 -0
  364. package/dist/src/service/worker-port.js +126 -0
  365. package/dist/src/service/worker-totals.d.ts +3 -0
  366. package/dist/src/service/worker-totals.js +28 -0
  367. package/dist/src/step-bridge.d.ts +57 -0
  368. package/dist/src/step-bridge.js +4 -0
  369. package/dist/src/steps/decision-gate.d.ts +2 -0
  370. package/dist/src/steps/decision-gate.js +8 -0
  371. package/dist/src/steps/load-cycle.d.ts +10 -0
  372. package/dist/src/steps/load-cycle.js +11 -0
  373. package/dist/src/steps/protected-effect.d.ts +2 -0
  374. package/dist/src/steps/protected-effect.js +8 -0
  375. package/dist/src/storage/decision-rows.d.ts +54 -0
  376. package/dist/src/storage/decision-rows.js +72 -0
  377. package/dist/src/storage/decision-snapshots.d.ts +17 -0
  378. package/dist/src/storage/decision-snapshots.js +25 -0
  379. package/dist/src/storage/domain-changes.d.ts +48 -0
  380. package/dist/src/storage/domain-changes.js +213 -0
  381. package/dist/src/storage/domain-rows.d.ts +85 -0
  382. package/dist/src/storage/domain-rows.js +129 -0
  383. package/dist/src/storage/domain-schema.d.ts +32 -0
  384. package/dist/src/storage/domain-schema.js +193 -0
  385. package/dist/src/storage/effect-changes.d.ts +5 -0
  386. package/dist/src/storage/effect-changes.js +105 -0
  387. package/dist/src/storage/effect-rows.d.ts +67 -0
  388. package/dist/src/storage/effect-rows.js +74 -0
  389. package/dist/src/storage/effect-schema.d.ts +1 -0
  390. package/dist/src/storage/effect-schema.js +59 -0
  391. package/dist/src/storage/statements.d.ts +9 -0
  392. package/dist/src/storage/statements.js +8 -0
  393. package/dist/src/submission.d.ts +42 -0
  394. package/dist/src/submission.js +71 -0
  395. package/dist/src/ticket-status.d.ts +8 -0
  396. package/dist/src/ticket-status.js +45 -0
  397. package/dist/src/token-prices.d.ts +19 -0
  398. package/dist/src/token-prices.js +76 -0
  399. package/dist/src/turn-profile.d.ts +13 -0
  400. package/dist/src/turn-profile.js +100 -0
  401. package/dist/src/worker-usage.d.ts +22 -0
  402. package/dist/src/worker-usage.js +44 -0
  403. package/dist/src/workflow-admission.d.ts +45 -0
  404. package/dist/src/workflow-admission.js +151 -0
  405. package/dist/src/workflow-candidate.d.ts +29 -0
  406. package/dist/src/workflow-candidate.js +59 -0
  407. package/dist/src/workflow-contracts.d.ts +29 -0
  408. package/dist/src/workflow-contracts.js +110 -0
  409. package/dist/src/workflow-declaration.d.ts +11 -0
  410. package/dist/src/workflow-declaration.js +59 -0
  411. package/dist/src/workflow-resources.d.ts +8 -0
  412. package/dist/src/workflow-resources.js +14 -0
  413. package/dist/src/workflows.d.ts +6 -0
  414. package/dist/src/workflows.js +4 -0
  415. package/dist/tools/compile-workflows.d.ts +1 -0
  416. package/dist/tools/compile-workflows.js +33 -0
  417. package/dist/tools/self-host-processes.d.ts +10 -0
  418. package/dist/tools/self-host-processes.js +156 -0
  419. package/dist/tools/self-host-workflows.d.ts +15 -0
  420. package/dist/tools/self-host-workflows.js +78 -0
  421. package/dist/tools/self-host.d.ts +1 -0
  422. package/dist/tools/self-host.js +261 -0
  423. package/dist/tools/self-update-host.d.ts +13 -0
  424. package/dist/tools/self-update-host.js +88 -0
  425. package/dist/tools/self-update.d.ts +11 -0
  426. package/dist/tools/self-update.js +177 -0
  427. package/dist/tools/workflow-manifest.d.ts +3 -0
  428. package/dist/tools/workflow-manifest.js +34 -0
  429. package/dist/workflows/analyze-chats.d.ts +10 -0
  430. package/dist/workflows/analyze-chats.declaration.json +9 -0
  431. package/dist/workflows/analyze-chats.js +73 -0
  432. package/dist/workflows/develop-prd.d.ts +7 -0
  433. package/dist/workflows/develop-prd.js +97 -0
  434. package/dist/workflows/develop-ticket.d.ts +9 -0
  435. package/dist/workflows/develop-ticket.js +202 -0
  436. package/dist/workflows/issue-labels.d.ts +16 -0
  437. package/dist/workflows/issue-labels.js +70 -0
  438. package/dist/workflows/ticket-prompts.d.ts +35 -0
  439. package/dist/workflows/ticket-prompts.js +133 -0
  440. package/package.json +84 -75
  441. package/dist/abstract_gpt/index.js +0 -55
  442. package/dist/cloving_gpt/adapters/Adapter.js +0 -2
  443. package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
  444. package/dist/cloving_gpt/adapters/claude.js +0 -128
  445. package/dist/cloving_gpt/adapters/gemini.js +0 -135
  446. package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
  447. package/dist/cloving_gpt/adapters/index.js +0 -2
  448. package/dist/cloving_gpt/adapters/mistral.js +0 -128
  449. package/dist/cloving_gpt/adapters/ollama.js +0 -128
  450. package/dist/cloving_gpt/adapters/openai.js +0 -100
  451. package/dist/cloving_gpt/index.js +0 -192
  452. package/dist/commands/analyze.js +0 -47
  453. package/dist/commands/chat.js +0 -14
  454. package/dist/commands/check.js +0 -7
  455. package/dist/commands/commit.js +0 -44
  456. package/dist/commands/config.js +0 -167
  457. package/dist/commands/describe.js +0 -235
  458. package/dist/commands/generate/code.js +0 -21
  459. package/dist/commands/generate/commit.js +0 -11
  460. package/dist/commands/generate/context.js +0 -82
  461. package/dist/commands/generate/docs.js +0 -11
  462. package/dist/commands/generate/documentation.js +0 -11
  463. package/dist/commands/generate/fizzbuzz.js +0 -35
  464. package/dist/commands/generate/init.js +0 -15
  465. package/dist/commands/generate/review.js +0 -11
  466. package/dist/commands/generate/sh.js +0 -95
  467. package/dist/commands/generate/shell.js +0 -11
  468. package/dist/commands/generate/unit_tests.js +0 -11
  469. package/dist/commands/init.js +0 -13
  470. package/dist/commands/models.js +0 -22
  471. package/dist/commands/project/build.js +0 -88
  472. package/dist/commands/project/complete.js +0 -12
  473. package/dist/commands/project/init.js +0 -82
  474. package/dist/commands/project/plan.js +0 -108
  475. package/dist/commands/proxy.js +0 -11
  476. package/dist/commands/review.js +0 -50
  477. package/dist/commands/tokens.js +0 -75
  478. package/dist/commands/unit_tests.js +0 -150
  479. package/dist/commands/update.js +0 -7
  480. package/dist/file2.js +0 -4
  481. package/dist/index.js +0 -136
  482. package/dist/managers/BlockManager.js +0 -120
  483. package/dist/managers/ChatManager.js +0 -653
  484. package/dist/managers/ChunkManager.js +0 -32
  485. package/dist/managers/CodeManager.js +0 -185
  486. package/dist/managers/CommitManager.js +0 -78
  487. package/dist/managers/DocsManager.js +0 -88
  488. package/dist/managers/DocumentationManager.js +0 -114
  489. package/dist/managers/InitManager.js +0 -230
  490. package/dist/managers/ProxyManager.js +0 -210
  491. package/dist/managers/ReviewManager.js +0 -131
  492. package/dist/managers/ShellManager.js +0 -163
  493. package/dist/managers/StreamManager.js +0 -308
  494. package/dist/managers/UnitTestManager.js +0 -243
  495. package/dist/managers/src/managers/ProxyManager.js +0 -1
  496. package/dist/newfile.js +0 -2
  497. package/dist/package.json +0 -86
  498. package/dist/utils/command_utils.js +0 -384
  499. package/dist/utils/config_utils.js +0 -249
  500. package/dist/utils/gitUtils.js +0 -42
  501. package/dist/utils/git_utils.js +0 -217
  502. package/dist/utils/modelUtils.js +0 -7
  503. package/dist/utils/model_utils.js +0 -7
  504. package/dist/utils/prompt_utils.js +0 -333
  505. package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  506. package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  507. package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  508. package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  509. package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  510. package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  511. package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  512. package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
  513. package/dist/utils/prompts/index.js +0 -27
  514. package/dist/utils/string_utils.js +0 -505
  515. package/dist/utils/types.js +0 -2
@@ -0,0 +1,67 @@
1
+ import type { Database, JsonObject } from "solid-objects";
2
+ import { type AuthorityEvent, type EffectIntent } from "../../authority/reducer.ts";
3
+ import { type ProjectionSnapshot } from "../../storage/decision-snapshots.ts";
4
+ import type { AdmissionResult, ExecutionManifest } from "../../workflow-admission.ts";
5
+ import { type StoredState } from "../authority-restore.ts";
6
+ import { type SequenceChanges, type SequenceListener } from "./authority-changes.ts";
7
+ import { type AuthorityQueries } from "./authority-queries.ts";
8
+ import { type EffectQueries } from "./effect-queries.ts";
9
+ import { type ConnectionSettings } from "./authority-connection.ts";
10
+ import { type StoreReceipt } from "./authority-receipts.ts";
11
+ export type { StoreReceipt } from "./authority-receipts.ts";
12
+ export type { StoredState } from "../authority-restore.ts";
13
+ export interface CommandContext {
14
+ readonly recordedAt: string;
15
+ readonly manifest?: ExecutionManifest;
16
+ readonly epoch?: number;
17
+ readonly documents?: readonly string[];
18
+ }
19
+ export interface OperationRecord {
20
+ readonly operationId: string;
21
+ readonly kind: EffectIntent["kind"];
22
+ readonly runId: string;
23
+ readonly createdSequence: number;
24
+ readonly releasedSequence: number | null;
25
+ readonly deliveries: readonly {
26
+ readonly effectId: string;
27
+ readonly outcome: string | null;
28
+ readonly receipt: string | null;
29
+ readonly purpose: string;
30
+ readonly epoch: number | null;
31
+ }[];
32
+ }
33
+ export interface Authority {
34
+ readonly execute: (command: unknown, context: CommandContext) => Promise<StoreReceipt>;
35
+ readonly state: () => Promise<StoredState>;
36
+ readonly events: () => Promise<readonly AuthorityEvent[]>;
37
+ readonly eligibleIntents: () => Promise<readonly EffectIntent[]>;
38
+ readonly operations: () => Promise<readonly OperationRecord[]>;
39
+ readonly resumePinned: (runId: string, available: ExecutionManifest) => Promise<AdmissionResult>;
40
+ readonly settings: () => Promise<ConnectionSettings>;
41
+ readonly epoch: number;
42
+ readonly recoveryLimit: number;
43
+ readonly queries: AuthorityQueries;
44
+ readonly effects: EffectQueries;
45
+ readonly deliver: (signal: AbortSignal) => Promise<void>;
46
+ readonly changes: SequenceChanges;
47
+ readonly backup: (target: string) => Promise<void>;
48
+ readonly close: () => Promise<void>;
49
+ }
50
+ export interface SessionParts {
51
+ readonly database: Database;
52
+ readonly reader: Database;
53
+ readonly execute: (request: JsonObject) => Promise<unknown>;
54
+ readonly run: (signal: AbortSignal) => Promise<void>;
55
+ readonly stop: () => Promise<void>;
56
+ readonly handlersSettled: () => Promise<boolean>;
57
+ readonly deliveryConfigured: boolean;
58
+ readonly epoch: number;
59
+ readonly stopLimit: number;
60
+ readonly recoveryLimit: number;
61
+ readonly unhealthy: () => string | undefined;
62
+ readonly condition: () => Promise<string | undefined>;
63
+ readonly watchMilliseconds: number;
64
+ readonly subscribe: (listener: SequenceListener) => () => void;
65
+ }
66
+ export declare function authoritySession(parts: SessionParts): Authority;
67
+ export declare function operationRecords(snapshot: Pick<ProjectionSnapshot, "outbox" | "deliveries">): readonly OperationRecord[];
@@ -0,0 +1,251 @@
1
+ import { eligibleIntents, } from "../../authority/reducer.js";
2
+ import { loadProjections, } from "../../storage/decision-snapshots.js";
3
+ import { loadEvents } from "../../storage/domain-rows.js";
4
+ import { pinnedResumption } from "../authority-admission.js";
5
+ import { currentState, intentKind, storedDefinitions, storedEvents, } from "../authority-restore.js";
6
+ import { checkedRequest } from "./authority-actor.js";
7
+ import { subscriptions, } from "./authority-changes.js";
8
+ import { authorityQueries, guardedRead, } from "./authority-queries.js";
9
+ import { effectQueries } from "./effect-queries.js";
10
+ import { backupInto } from "../../storage/domain-schema.js";
11
+ import { observeSettings, } from "./authority-connection.js";
12
+ import { failed, serializable, storeReceipt, invalidCommand, oversized, tooLarge, unserializable, } from "./authority-receipts.js";
13
+ export function authoritySession(parts) {
14
+ const session = {
15
+ parts,
16
+ stopping: new AbortController(),
17
+ delivering: false,
18
+ failure: null,
19
+ condition: null,
20
+ describing: null,
21
+ closed: false,
22
+ running: Promise.resolve(),
23
+ invocations: new Set(),
24
+ changes: subscriptions(parts.subscribe),
25
+ closing: null,
26
+ };
27
+ const read = guardedRead({
28
+ reader: parts.reader,
29
+ ready: async () => {
30
+ await refreshed(session);
31
+ available(session);
32
+ },
33
+ });
34
+ return {
35
+ execute: (command, context) => executeCommand(session, { command, context }),
36
+ state: async () => currentState(await projected(session)),
37
+ events: async () => {
38
+ await refreshed(session);
39
+ available(session);
40
+ return storedEvents(await parts.reader.connection(loadEvents));
41
+ },
42
+ eligibleIntents: async () => eligible(await projected(session)),
43
+ operations: async () => operationRecords(await projected(session)),
44
+ resumePinned: async (runId, manifest) => {
45
+ const snapshot = await projected(session);
46
+ return pinnedResumption(currentState(snapshot), {
47
+ definitions: storedDefinitions(snapshot),
48
+ runId,
49
+ available: manifest,
50
+ });
51
+ },
52
+ settings: async () => {
53
+ await refreshed(session);
54
+ available(session);
55
+ return observeSettings(parts.database);
56
+ },
57
+ epoch: parts.epoch,
58
+ recoveryLimit: parts.recoveryLimit,
59
+ queries: authorityQueries(read),
60
+ effects: effectQueries(read, { stopLimit: parts.stopLimit }),
61
+ deliver: (signal) => deliver(session, signal),
62
+ changes: { subscribe: session.changes.add },
63
+ backup: (target) => backup(session, target),
64
+ close: () => close(session),
65
+ };
66
+ }
67
+ function close(session) {
68
+ session.closed = true;
69
+ session.closing ??= stopped(session);
70
+ return session.closing;
71
+ }
72
+ async function stopped(session) {
73
+ try {
74
+ session.stopping.abort();
75
+ session.changes.close();
76
+ await Promise.allSettled([session.running, ...session.invocations]);
77
+ await session.parts.stop();
78
+ }
79
+ catch (error) {
80
+ session.closing = null;
81
+ throw error;
82
+ }
83
+ }
84
+ async function refreshed(session) {
85
+ if (session.parts.unhealthy() === undefined)
86
+ return;
87
+ await failClosed(session, "authority failure");
88
+ }
89
+ async function failClosed(session, failure) {
90
+ session.failure ??= failure;
91
+ await conditionRead(session);
92
+ close(session).catch(() => undefined);
93
+ }
94
+ async function conditionRead(session) {
95
+ if (session.condition !== null && session.describing === null)
96
+ return;
97
+ session.describing ??= described(session).finally(() => {
98
+ session.describing = null;
99
+ });
100
+ await session.describing;
101
+ }
102
+ async function described(session) {
103
+ const detected = session.parts.unhealthy();
104
+ if (detected === undefined)
105
+ return;
106
+ session.condition = detected;
107
+ session.condition = (await session.parts.condition()) ?? detected;
108
+ }
109
+ async function backup(session, target) {
110
+ await refreshed(session);
111
+ available(session);
112
+ try {
113
+ await session.parts.database.connection((connection) => backupInto(connection, target));
114
+ }
115
+ catch (error) {
116
+ throw new Error(`backup-failed: ${String(Reflect.get(Object(error), "message"))}`, { cause: error });
117
+ }
118
+ }
119
+ function available(session) {
120
+ const failure = session.condition ?? session.failure;
121
+ if (failure !== null)
122
+ throw new Error(`authority-unavailable: ${failure}`);
123
+ if (session.closed)
124
+ throw new Error("authority-unavailable: closed");
125
+ }
126
+ function unavailableReceipt(session) {
127
+ const failure = session.condition ?? session.failure;
128
+ if (failure !== null)
129
+ return {
130
+ kind: "failed",
131
+ reason: "storage-unavailable",
132
+ detail: `closed after ${failure}`,
133
+ };
134
+ if (session.closed)
135
+ return { kind: "failed", reason: "storage-unavailable", detail: "closed" };
136
+ return undefined;
137
+ }
138
+ async function projected(session) {
139
+ await refreshed(session);
140
+ available(session);
141
+ return session.parts.reader.connection(loadProjections);
142
+ }
143
+ async function deliver(session, signal) {
144
+ if (!session.parts.deliveryConfigured)
145
+ throw new Error("delivery-unconfigured");
146
+ if (session.delivering)
147
+ throw new Error("delivery-already-running");
148
+ available(session);
149
+ session.delivering = true;
150
+ try {
151
+ await delivered(session, signal);
152
+ }
153
+ finally {
154
+ session.delivering = false;
155
+ }
156
+ await refreshed(session);
157
+ const failure = session.condition ?? session.failure;
158
+ if (failure !== null)
159
+ throw new Error(`authority-unavailable: ${failure}`);
160
+ }
161
+ async function delivered(session, signal) {
162
+ if (!(await session.parts.handlersSettled()))
163
+ throw new Error("delivery-handler-in-flight");
164
+ available(session);
165
+ const watch = new AbortController();
166
+ const timer = setInterval(() => {
167
+ if (session.parts.unhealthy() !== undefined)
168
+ watch.abort();
169
+ }, session.parts.watchMilliseconds);
170
+ try {
171
+ session.running = session.parts.run(AbortSignal.any([signal, session.stopping.signal, watch.signal]));
172
+ await session.running;
173
+ }
174
+ finally {
175
+ clearInterval(timer);
176
+ }
177
+ }
178
+ async function executeCommand(session, input) {
179
+ const { command, context } = input;
180
+ await refreshed(session);
181
+ const unavailable = unavailableReceipt(session);
182
+ if (unavailable !== undefined)
183
+ return unavailable;
184
+ const given = serializable({
185
+ command,
186
+ recordedAt: context.recordedAt,
187
+ manifest: context.manifest ?? null,
188
+ epoch: context.epoch ?? null,
189
+ documents: context.documents ?? [],
190
+ });
191
+ if (given === undefined)
192
+ return unserializable;
193
+ const request = checkedRequest(given);
194
+ if (request === undefined)
195
+ return invalidCommand;
196
+ if (oversized(request))
197
+ return tooLarge;
198
+ try {
199
+ return await healthyReceipt(session, await invoked(session, request));
200
+ }
201
+ catch (error) {
202
+ const receipt = failed(error);
203
+ await failClosed(session, receipt.reason === "storage-failure"
204
+ ? "storage failure"
205
+ : "authority failure");
206
+ return receipt;
207
+ }
208
+ }
209
+ async function invoked(session, request) {
210
+ const invocation = session.parts.execute(request);
211
+ session.invocations.add(invocation);
212
+ try {
213
+ return await invocation;
214
+ }
215
+ finally {
216
+ session.invocations.delete(invocation);
217
+ }
218
+ }
219
+ async function healthyReceipt(session, value) {
220
+ const receipt = storeReceipt(value);
221
+ await refreshed(session);
222
+ return receipt;
223
+ }
224
+ export function operationRecords(snapshot) {
225
+ const deliveries = Map.groupBy(snapshot.deliveries, (row) => row.operationId);
226
+ return snapshot.outbox.map((row) => ({
227
+ operationId: row.operationId,
228
+ kind: intentKind(row.kind),
229
+ runId: row.runId,
230
+ createdSequence: row.createdSequence,
231
+ releasedSequence: row.releasedSequence,
232
+ deliveries: (deliveries.get(row.operationId) ?? []).map(({ effectId, outcome, receipt, purpose, epoch }) => ({
233
+ effectId,
234
+ outcome,
235
+ receipt,
236
+ purpose,
237
+ epoch,
238
+ })),
239
+ }));
240
+ }
241
+ function eligible(snapshot) {
242
+ return eligibleIntents({
243
+ ...currentState(snapshot),
244
+ effects: {
245
+ operations: Object.fromEntries(snapshot.pending.map((operationId) => [
246
+ operationId,
247
+ { status: "dispatch-pending" },
248
+ ])),
249
+ },
250
+ });
251
+ }
@@ -0,0 +1,33 @@
1
+ import type { SolidObjectsConfiguration } from "solid-objects";
2
+ export interface AuthorityTiming {
3
+ readonly leaseMilliseconds: number;
4
+ readonly renewalMilliseconds: number;
5
+ readonly heartbeatMilliseconds: number;
6
+ readonly aliveThresholdMilliseconds: number;
7
+ readonly cleanupIntervalMilliseconds: number;
8
+ readonly callTimeoutMilliseconds: number;
9
+ readonly messageRetentionMilliseconds: number;
10
+ readonly retentionIntervalMilliseconds: number;
11
+ readonly shutdownMilliseconds: number;
12
+ }
13
+ export declare const authorityTiming: AuthorityTiming;
14
+ export interface EffectSettings {
15
+ readonly capacity: number;
16
+ readonly leaseMilliseconds: number;
17
+ readonly adapterMilliseconds: number;
18
+ readonly resultBytes: number;
19
+ readonly deliveryAttempts: number;
20
+ readonly stopLimit: number;
21
+ readonly recoveryLimit: number;
22
+ }
23
+ export interface PlanSettings extends EffectSettings {
24
+ readonly stopSupported: boolean;
25
+ }
26
+ export declare const effectSettings: PlanSettings;
27
+ export declare function effectConfiguration(options: {
28
+ readonly effects?: Partial<EffectSettings>;
29
+ readonly delivery?: {
30
+ readonly stop?: unknown;
31
+ };
32
+ }): PlanSettings;
33
+ export declare function librarySettings(timing: AuthorityTiming, log: ((line: string) => void) | undefined): Partial<SolidObjectsConfiguration>;
@@ -0,0 +1,63 @@
1
+ import { recoveryBound } from "../../authority/commands.js";
2
+ import { lineLogger } from "./authority-logger.js";
3
+ export const authorityTiming = {
4
+ leaseMilliseconds: 2_000,
5
+ renewalMilliseconds: 500,
6
+ heartbeatMilliseconds: 1_000,
7
+ aliveThresholdMilliseconds: 3_000,
8
+ cleanupIntervalMilliseconds: 1_000,
9
+ callTimeoutMilliseconds: 10_000,
10
+ messageRetentionMilliseconds: 30 * 86_400_000,
11
+ retentionIntervalMilliseconds: 3_600_000,
12
+ shutdownMilliseconds: 10_000,
13
+ };
14
+ export const effectSettings = {
15
+ capacity: 4,
16
+ leaseMilliseconds: 600_000,
17
+ adapterMilliseconds: 30_000,
18
+ resultBytes: 262_144,
19
+ deliveryAttempts: 2,
20
+ stopLimit: 3,
21
+ recoveryLimit: 3,
22
+ stopSupported: false,
23
+ };
24
+ const maximumCapacity = 8;
25
+ export function effectConfiguration(options) {
26
+ const settings = {
27
+ ...effectSettings,
28
+ ...options.effects,
29
+ stopSupported: options.delivery?.stop !== undefined,
30
+ };
31
+ const positive = [
32
+ settings.capacity,
33
+ settings.leaseMilliseconds,
34
+ settings.adapterMilliseconds,
35
+ settings.resultBytes,
36
+ settings.deliveryAttempts,
37
+ settings.stopLimit,
38
+ settings.recoveryLimit,
39
+ ].every((value) => Number.isInteger(value) && value >= 1);
40
+ const bounded = settings.capacity <= maximumCapacity &&
41
+ settings.recoveryLimit <= recoveryBound;
42
+ if (!positive || !bounded)
43
+ throw new Error("invalid-effect-settings");
44
+ return settings;
45
+ }
46
+ function standardError(line) {
47
+ process.stderr.write(line);
48
+ }
49
+ export function librarySettings(timing, log) {
50
+ return {
51
+ tableNamePrefix: "solid_",
52
+ maxAttempts: 1,
53
+ logger: lineLogger(log ?? standardError),
54
+ leaseDurationMilliseconds: timing.leaseMilliseconds,
55
+ leaseRenewalIntervalMilliseconds: timing.renewalMilliseconds,
56
+ processHeartbeatIntervalMilliseconds: timing.heartbeatMilliseconds,
57
+ processAliveThresholdMilliseconds: timing.aliveThresholdMilliseconds,
58
+ deadProcessCleanupIntervalMilliseconds: timing.cleanupIntervalMilliseconds,
59
+ messageRetentionMilliseconds: timing.messageRetentionMilliseconds,
60
+ retentionIntervalMilliseconds: timing.retentionIntervalMilliseconds,
61
+ shutdownTimeoutMilliseconds: timing.shutdownMilliseconds,
62
+ };
63
+ }
@@ -0,0 +1,16 @@
1
+ import { loadDecided } from "../../storage/decision-snapshots.ts";
2
+ import { loadSnapshot } from "../../storage/domain-rows.ts";
3
+ import { upgradeDecisions } from "../decision-upgrade.ts";
4
+ import { upgradeEffects } from "../effect-upgrade.ts";
5
+ declare const upgrades: readonly [{
6
+ readonly from: "adopted";
7
+ readonly load: typeof loadSnapshot;
8
+ readonly apply: typeof upgradeDecisions;
9
+ }, {
10
+ readonly from: "decided";
11
+ readonly load: typeof loadDecided;
12
+ readonly apply: typeof upgradeEffects;
13
+ }];
14
+ export type UpgradeStep = (typeof upgrades)[number];
15
+ export declare function upgradeSteps(kind: string): readonly UpgradeStep[];
16
+ export {};
@@ -0,0 +1,12 @@
1
+ import { loadDecided } from "../../storage/decision-snapshots.js";
2
+ import { loadSnapshot } from "../../storage/domain-rows.js";
3
+ import { upgradeDecisions } from "../decision-upgrade.js";
4
+ import { upgradeEffects } from "../effect-upgrade.js";
5
+ const upgrades = [
6
+ { from: "adopted", load: loadSnapshot, apply: upgradeDecisions },
7
+ { from: "decided", load: loadDecided, apply: upgradeEffects },
8
+ ];
9
+ export function upgradeSteps(kind) {
10
+ const first = upgrades.findIndex((step) => step.from === kind);
11
+ return first === -1 ? [] : upgrades.slice(first);
12
+ }
@@ -0,0 +1,14 @@
1
+ export interface WatchedEvent {
2
+ readonly name: string;
3
+ readonly messageId: string | null;
4
+ readonly attributes: Readonly<Record<string, unknown>>;
5
+ }
6
+ export interface StrandingWatchdog {
7
+ readonly observe: (event: WatchedEvent) => void;
8
+ readonly stranded: () => string | undefined;
9
+ readonly deadLettered: () => string | undefined;
10
+ }
11
+ export declare function strandingWatchdog(bound: {
12
+ readonly boundMilliseconds: number;
13
+ readonly clock?: () => number;
14
+ }): StrandingWatchdog;
@@ -0,0 +1,41 @@
1
+ const callbacks = ["deliveryCompleted", "deliveryFailed"];
2
+ const finished = [
3
+ "solid_objects.message.completed",
4
+ "solid_objects.message.failed",
5
+ "solid_objects.message.rejected",
6
+ ];
7
+ export function strandingWatchdog(bound) {
8
+ const clock = bound.clock ?? monotonic;
9
+ const lost = new Map();
10
+ const dead = [];
11
+ let reported;
12
+ return {
13
+ observe: (event) => {
14
+ const { messageId } = event;
15
+ if (messageId === null)
16
+ return;
17
+ if (deadCallback(event))
18
+ dead.push(messageId);
19
+ if (event.name === "solid_objects.activation.lost" &&
20
+ !lost.has(messageId))
21
+ lost.set(messageId, clock());
22
+ if (finished.includes(event.name))
23
+ lost.delete(messageId);
24
+ },
25
+ stranded: () => {
26
+ reported ??= overdue(lost, clock() - bound.boundMilliseconds);
27
+ return reported;
28
+ },
29
+ deadLettered: () => dead[0],
30
+ };
31
+ }
32
+ function monotonic() {
33
+ return performance.now();
34
+ }
35
+ function overdue(lost, limit) {
36
+ return [...lost].find(([, at]) => at < limit)?.[0];
37
+ }
38
+ function deadCallback(event) {
39
+ return (event.name === "solid_objects.dead_letter.created" &&
40
+ callbacks.includes(String(event.attributes["operation"])));
41
+ }
@@ -0,0 +1,14 @@
1
+ import { type AuthorityOptions, type Refusal } from "./authority-runtime.ts";
2
+ import { type Authority } from "./authority-session.ts";
3
+ export type { AdapterOutcome, Delivery, DeliveryIntent, Reconciliation, } from "./authority-delivery.ts";
4
+ export type { AuthorityOptions, AuthorityTiming, Refusal, } from "./authority-runtime.ts";
5
+ export type { EffectSettings } from "./authority-settings.ts";
6
+ export type { OperationView, StoredDisposition } from "./effect-queries.ts";
7
+ export { authorityTiming } from "./authority-runtime.ts";
8
+ export type { AuthorityQueries, CommandRecord, EventPage, PublishedEvent, } from "./authority-queries.ts";
9
+ export type { Authority, CommandContext, OperationRecord, StoreReceipt, StoredState, } from "./authority-session.ts";
10
+ export type AuthorityOpening = {
11
+ readonly kind: "opened";
12
+ readonly authority: Authority;
13
+ } | Refusal;
14
+ export declare function openAuthority(directory: string, options?: AuthorityOptions): Promise<AuthorityOpening>;
@@ -0,0 +1,115 @@
1
+ import { loadCurrent } from "../../storage/decision-snapshots.js";
2
+ import { integer } from "../../storage/domain-rows.js";
3
+ import { authorityIdentity, createSchema, } from "../../storage/domain-schema.js";
4
+ import { restore } from "../authority-restore.js";
5
+ import { ownedRuntime, recoverDeliveries, refused, } from "./authority-runtime.js";
6
+ import { json } from "./authority-receipts.js";
7
+ import { upgradeSteps } from "./authority-upgrades.js";
8
+ import { authoritySession } from "./authority-session.js";
9
+ export { authorityTiming } from "./authority-runtime.js";
10
+ export async function openAuthority(directory, options = {}) {
11
+ const owned = await ownedRuntime(directory, options);
12
+ if (owned.kind === "refused")
13
+ return owned;
14
+ let actorId;
15
+ try {
16
+ actorId = await validated(owned);
17
+ }
18
+ catch (error) {
19
+ actorId = refused("storage-failure", error);
20
+ }
21
+ if (typeof actorId !== "string") {
22
+ await owned.parts.stop();
23
+ return actorId;
24
+ }
25
+ return start({ owned, actorId, options });
26
+ }
27
+ async function validated(owned) {
28
+ const { database, schema } = owned;
29
+ if (schema.kind === "new")
30
+ await database.transaction(createSchema);
31
+ if (schema.kind === "baseline")
32
+ return conversionRequired("schema version 1");
33
+ const upgrade = await upgraded(owned);
34
+ if (upgrade !== undefined)
35
+ return upgrade;
36
+ const restored = restore(await database.connection(loadCurrent));
37
+ if (restored.kind === "refused")
38
+ return restored;
39
+ const identity = await database.connection(authorityIdentity);
40
+ if (identity.pendingAdoption !== null)
41
+ return conversionRequired("adoption pending");
42
+ return identity.actorId;
43
+ }
44
+ async function upgraded(owned) {
45
+ const { database, schema } = owned;
46
+ for (const step of upgradeSteps(schema.kind)) {
47
+ const restored = restore(await database.connection(step.load));
48
+ if (restored.kind === "refused")
49
+ return restored;
50
+ const identity = await database.connection(authorityIdentity);
51
+ if (identity.pendingAdoption !== null)
52
+ return conversionRequired("adoption pending");
53
+ await step.apply(database, restored.state);
54
+ }
55
+ return undefined;
56
+ }
57
+ function conversionRequired(detail) {
58
+ return { kind: "refused", reason: "conversion-required", detail };
59
+ }
60
+ async function begun(opening) {
61
+ const { owned, actorId } = opening;
62
+ const { parts } = owned;
63
+ const authority = parts.invoker(actorId);
64
+ await parts.runtime.install();
65
+ const stored = await parts.storedActorRefusal(actorId);
66
+ if (stored !== undefined)
67
+ return stored;
68
+ await parts.releaseEarlierOwners();
69
+ await parts.retryDeliveryCallbacks();
70
+ const opened = await authority.beginEpoch();
71
+ await recoverDeliveries(authority);
72
+ const condition = await parts.condition();
73
+ if (condition !== undefined)
74
+ return {
75
+ kind: "refused",
76
+ reason: "unresolved-delivery",
77
+ detail: condition,
78
+ };
79
+ return integer(opened, "epoch");
80
+ }
81
+ async function start(opening) {
82
+ const { owned, actorId, options } = opening;
83
+ const { database, parts } = owned;
84
+ let epoch;
85
+ try {
86
+ epoch = await begun({ owned, actorId });
87
+ }
88
+ catch (error) {
89
+ epoch = refused("authority-unavailable", error);
90
+ }
91
+ if (typeof epoch !== "number") {
92
+ await parts.stop();
93
+ return epoch;
94
+ }
95
+ parts.setEpoch(epoch);
96
+ const authority = parts.invoker(actorId);
97
+ return {
98
+ kind: "opened",
99
+ authority: authoritySession({
100
+ database,
101
+ reader: parts.reader,
102
+ execute: (request) => authority.execute(json(request)),
103
+ run: (signal) => parts.runtime.run(signal),
104
+ stop: parts.stop,
105
+ handlersSettled: parts.handlersSettled,
106
+ deliveryConfigured: options.delivery !== undefined,
107
+ epoch,
108
+ ...parts.limits,
109
+ unhealthy: parts.unhealthy,
110
+ condition: parts.condition,
111
+ watchMilliseconds: parts.watchMilliseconds,
112
+ subscribe: (listener) => parts.subscribe(actorId, listener),
113
+ }),
114
+ };
115
+ }