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.
- package/{LICENSE.md → LICENSE} +1 -1
- package/README.md +606 -182
- package/dist/src/authority/budgets.d.ts +12 -0
- package/dist/src/authority/budgets.js +42 -0
- package/dist/src/authority/commands.d.ts +7 -0
- package/dist/src/authority/commands.js +271 -0
- package/dist/src/authority/details.d.ts +28 -0
- package/dist/src/authority/details.js +33 -0
- package/dist/src/authority/dispatch-decision.d.ts +40 -0
- package/dist/src/authority/dispatch-decision.js +47 -0
- package/dist/src/authority/effect-requests.d.ts +2 -0
- package/dist/src/authority/effect-requests.js +139 -0
- package/dist/src/authority/effect-results.d.ts +4 -0
- package/dist/src/authority/effect-results.js +236 -0
- package/dist/src/authority/events.d.ts +2 -0
- package/dist/src/authority/events.js +45 -0
- package/dist/src/authority/gate-reduction.d.ts +8 -0
- package/dist/src/authority/gate-reduction.js +109 -0
- package/dist/src/authority/gates.d.ts +48 -0
- package/dist/src/authority/gates.js +77 -0
- package/dist/src/authority/history-state.d.ts +15 -0
- package/dist/src/authority/history-state.js +61 -0
- package/dist/src/authority/history.d.ts +13 -0
- package/dist/src/authority/history.js +37 -0
- package/dist/src/authority/instants.d.ts +3 -0
- package/dist/src/authority/instants.js +38 -0
- package/dist/src/authority/leases.d.ts +15 -0
- package/dist/src/authority/leases.js +113 -0
- package/dist/src/authority/operations.d.ts +101 -0
- package/dist/src/authority/operations.js +75 -0
- package/dist/src/authority/reconciliation.d.ts +29 -0
- package/dist/src/authority/reconciliation.js +156 -0
- package/dist/src/authority/reducer.d.ts +41 -0
- package/dist/src/authority/reducer.js +139 -0
- package/dist/src/authority/reduction-state.d.ts +36 -0
- package/dist/src/authority/reduction-state.js +68 -0
- package/dist/src/authority/reduction.d.ts +6 -0
- package/dist/src/authority/reduction.js +160 -0
- package/dist/src/authority/status-closure.d.ts +4 -0
- package/dist/src/authority/status-closure.js +57 -0
- package/dist/src/authority/status-effects.d.ts +17 -0
- package/dist/src/authority/status-effects.js +43 -0
- package/dist/src/authority/status-input.d.ts +45 -0
- package/dist/src/authority/status-input.js +9 -0
- package/dist/src/authority/status.d.ts +32 -0
- package/dist/src/authority/status.js +256 -0
- package/dist/src/authority/stop-sequence.d.ts +37 -0
- package/dist/src/authority/stop-sequence.js +91 -0
- package/dist/src/authority/transitions.d.ts +63 -0
- package/dist/src/authority/transitions.js +124 -0
- package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
- package/dist/src/broker/actor/adapter-calls.js +34 -0
- package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
- package/dist/src/broker/actor/adapter-outcomes.js +80 -0
- package/dist/src/broker/actor/authority-actor.d.ts +25 -0
- package/dist/src/broker/actor/authority-actor.js +169 -0
- package/dist/src/broker/actor/authority-changes.d.ts +31 -0
- package/dist/src/broker/actor/authority-changes.js +46 -0
- package/dist/src/broker/actor/authority-connection.d.ts +15 -0
- package/dist/src/broker/actor/authority-connection.js +44 -0
- package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
- package/dist/src/broker/actor/authority-conversion.js +72 -0
- package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
- package/dist/src/broker/actor/authority-delivery.js +162 -0
- package/dist/src/broker/actor/authority-logger.d.ts +2 -0
- package/dist/src/broker/actor/authority-logger.js +19 -0
- package/dist/src/broker/actor/authority-policy.d.ts +9 -0
- package/dist/src/broker/actor/authority-policy.js +11 -0
- package/dist/src/broker/actor/authority-queries.d.ts +45 -0
- package/dist/src/broker/actor/authority-queries.js +85 -0
- package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
- package/dist/src/broker/actor/authority-receipts.js +84 -0
- package/dist/src/broker/actor/authority-release.d.ts +13 -0
- package/dist/src/broker/actor/authority-release.js +69 -0
- package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
- package/dist/src/broker/actor/authority-runtime.js +204 -0
- package/dist/src/broker/actor/authority-session.d.ts +67 -0
- package/dist/src/broker/actor/authority-session.js +251 -0
- package/dist/src/broker/actor/authority-settings.d.ts +33 -0
- package/dist/src/broker/actor/authority-settings.js +63 -0
- package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
- package/dist/src/broker/actor/authority-upgrades.js +12 -0
- package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
- package/dist/src/broker/actor/authority-watchdog.js +41 -0
- package/dist/src/broker/actor/authority.d.ts +14 -0
- package/dist/src/broker/actor/authority.js +115 -0
- package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
- package/dist/src/broker/actor/delivery-intents.js +77 -0
- package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
- package/dist/src/broker/actor/delivery-plan.js +109 -0
- package/dist/src/broker/actor/delivery-results.d.ts +11 -0
- package/dist/src/broker/actor/delivery-results.js +63 -0
- package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
- package/dist/src/broker/actor/effect-delivery.js +118 -0
- package/dist/src/broker/actor/effect-plan.d.ts +41 -0
- package/dist/src/broker/actor/effect-plan.js +173 -0
- package/dist/src/broker/actor/effect-queries.d.ts +27 -0
- package/dist/src/broker/actor/effect-queries.js +80 -0
- package/dist/src/broker/actor/effect-turn.d.ts +25 -0
- package/dist/src/broker/actor/effect-turn.js +84 -0
- package/dist/src/broker/actor/pin-check.d.ts +6 -0
- package/dist/src/broker/actor/pin-check.js +12 -0
- package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
- package/dist/src/broker/actor/runtime-parts.js +34 -0
- package/dist/src/broker/actor/stop-plan.d.ts +20 -0
- package/dist/src/broker/actor/stop-plan.js +46 -0
- package/dist/src/broker/actor/stop-turn.d.ts +17 -0
- package/dist/src/broker/actor/stop-turn.js +42 -0
- package/dist/src/broker/actor/turn-draft.d.ts +31 -0
- package/dist/src/broker/actor/turn-draft.js +138 -0
- package/dist/src/broker/actor/turn-plan.d.ts +17 -0
- package/dist/src/broker/actor/turn-plan.js +136 -0
- package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
- package/dist/src/broker/actor/turn-refusals.js +35 -0
- package/dist/src/broker/actor/turn-staging.d.ts +78 -0
- package/dist/src/broker/actor/turn-staging.js +34 -0
- package/dist/src/broker/actor/turn-state.d.ts +34 -0
- package/dist/src/broker/actor/turn-state.js +208 -0
- package/dist/src/broker/authority-admission.d.ts +21 -0
- package/dist/src/broker/authority-admission.js +70 -0
- package/dist/src/broker/authority-restore.d.ts +30 -0
- package/dist/src/broker/authority-restore.js +165 -0
- package/dist/src/broker/decision-restore.d.ts +16 -0
- package/dist/src/broker/decision-restore.js +158 -0
- package/dist/src/broker/decision-upgrade.d.ts +3 -0
- package/dist/src/broker/decision-upgrade.js +12 -0
- package/dist/src/broker/effect-restore.d.ts +20 -0
- package/dist/src/broker/effect-restore.js +111 -0
- package/dist/src/broker/effect-upgrade.d.ts +3 -0
- package/dist/src/broker/effect-upgrade.js +9 -0
- package/dist/src/broker/operation-digest.d.ts +1 -0
- package/dist/src/broker/operation-digest.js +4 -0
- package/dist/src/broker/socket-address.d.ts +9 -0
- package/dist/src/broker/socket-address.js +14 -0
- package/dist/src/broker/workflow-pin.d.ts +2 -0
- package/dist/src/broker/workflow-pin.js +5 -0
- package/dist/src/chats/analysis-batches.d.ts +24 -0
- package/dist/src/chats/analysis-batches.js +83 -0
- package/dist/src/chats/analysis-contract.d.ts +80 -0
- package/dist/src/chats/analysis-contract.js +16 -0
- package/dist/src/chats/analysis-data.d.ts +3 -0
- package/dist/src/chats/analysis-data.js +85 -0
- package/dist/src/chats/analysis-input.d.ts +12 -0
- package/dist/src/chats/analysis-input.js +83 -0
- package/dist/src/chats/analysis-links.d.ts +2 -0
- package/dist/src/chats/analysis-links.js +25 -0
- package/dist/src/chats/analysis-prompt.d.ts +10 -0
- package/dist/src/chats/analysis-prompt.js +16 -0
- package/dist/src/chats/analysis-proposal.d.ts +2 -0
- package/dist/src/chats/analysis-proposal.js +32 -0
- package/dist/src/chats/analysis-provenance.d.ts +4 -0
- package/dist/src/chats/analysis-provenance.js +99 -0
- package/dist/src/chats/analysis-shape.d.ts +3 -0
- package/dist/src/chats/analysis-shape.js +228 -0
- package/dist/src/chats/analysis.d.ts +3 -0
- package/dist/src/chats/analysis.js +42 -0
- package/dist/src/chats/corpus-input.d.ts +5 -0
- package/dist/src/chats/corpus-input.js +288 -0
- package/dist/src/chats/destination.d.ts +4 -0
- package/dist/src/chats/destination.js +96 -0
- package/dist/src/chats/import.d.ts +15 -0
- package/dist/src/chats/import.js +243 -0
- package/dist/src/chats/input-file.d.ts +3 -0
- package/dist/src/chats/input-file.js +32 -0
- package/dist/src/chats/normalize.d.ts +29 -0
- package/dist/src/chats/normalize.js +155 -0
- package/dist/src/chats/previous-import.d.ts +5 -0
- package/dist/src/chats/previous-import.js +34 -0
- package/dist/src/chats/reader.d.ts +21 -0
- package/dist/src/chats/reader.js +118 -0
- package/dist/src/chats/redact-import.d.ts +14 -0
- package/dist/src/chats/redact-import.js +141 -0
- package/dist/src/chats/redaction.d.ts +41 -0
- package/dist/src/chats/redaction.js +161 -0
- package/dist/src/chats/revision-input.d.ts +3 -0
- package/dist/src/chats/revision-input.js +180 -0
- package/dist/src/chats/revision.d.ts +48 -0
- package/dist/src/chats/revision.js +94 -0
- package/dist/src/chats/selection.d.ts +25 -0
- package/dist/src/chats/selection.js +109 -0
- package/dist/src/chats/source.d.ts +23 -0
- package/dist/src/chats/source.js +135 -0
- package/dist/src/chats/structure.d.ts +57 -0
- package/dist/src/chats/structure.js +216 -0
- package/dist/src/cli/arguments.d.ts +31 -0
- package/dist/src/cli/arguments.js +235 -0
- package/dist/src/cli/client.d.ts +16 -0
- package/dist/src/cli/client.js +159 -0
- package/dist/src/cli/commands.d.ts +17 -0
- package/dist/src/cli/commands.js +271 -0
- package/dist/src/cli/main.d.ts +2 -0
- package/dist/src/cli/main.js +127 -0
- package/dist/src/cli/render.d.ts +10 -0
- package/dist/src/cli/render.js +254 -0
- package/dist/src/cli/runtime-arguments.d.ts +73 -0
- package/dist/src/cli/runtime-arguments.js +248 -0
- package/dist/src/cli/runtime-directory.d.ts +4 -0
- package/dist/src/cli/runtime-directory.js +25 -0
- package/dist/src/cli/toolchain.d.ts +3 -0
- package/dist/src/cli/toolchain.js +74 -0
- package/dist/src/cli/usage-render.d.ts +3 -0
- package/dist/src/cli/usage-render.js +28 -0
- package/dist/src/cli/usage.d.ts +5 -0
- package/dist/src/cli/usage.js +156 -0
- package/dist/src/cli/validate.d.ts +38 -0
- package/dist/src/cli/validate.js +116 -0
- package/dist/src/cli/watch-actions.d.ts +10 -0
- package/dist/src/cli/watch-actions.js +58 -0
- package/dist/src/cli/watch-board-view.d.ts +54 -0
- package/dist/src/cli/watch-board-view.js +201 -0
- package/dist/src/cli/watch-board.d.ts +15 -0
- package/dist/src/cli/watch-board.js +179 -0
- package/dist/src/cli/watch-card-client.d.ts +1 -0
- package/dist/src/cli/watch-card-client.js +44 -0
- package/dist/src/cli/watch-card-forms.d.ts +2 -0
- package/dist/src/cli/watch-card-forms.js +33 -0
- package/dist/src/cli/watch-card-reply.d.ts +5 -0
- package/dist/src/cli/watch-card-reply.js +34 -0
- package/dist/src/cli/watch-card-view.d.ts +40 -0
- package/dist/src/cli/watch-card-view.js +86 -0
- package/dist/src/cli/watch-client.d.ts +1 -0
- package/dist/src/cli/watch-client.js +118 -0
- package/dist/src/cli/watch-element.d.ts +11 -0
- package/dist/src/cli/watch-element.js +6 -0
- package/dist/src/cli/watch-model.d.ts +29 -0
- package/dist/src/cli/watch-model.js +278 -0
- package/dist/src/cli/watch-navigation.d.ts +9 -0
- package/dist/src/cli/watch-navigation.js +40 -0
- package/dist/src/cli/watch-page.d.ts +1 -0
- package/dist/src/cli/watch-page.js +258 -0
- package/dist/src/cli/watch-paths.d.ts +2 -0
- package/dist/src/cli/watch-paths.js +52 -0
- package/dist/src/cli/watch-phases.d.ts +7 -0
- package/dist/src/cli/watch-phases.js +148 -0
- package/dist/src/cli/watch-pr-board.d.ts +3 -0
- package/dist/src/cli/watch-pr-board.js +26 -0
- package/dist/src/cli/watch-pr-command.d.ts +15 -0
- package/dist/src/cli/watch-pr-command.js +37 -0
- package/dist/src/cli/watch-pr-identity.d.ts +20 -0
- package/dist/src/cli/watch-pr-identity.js +62 -0
- package/dist/src/cli/watch-pr-observer.d.ts +19 -0
- package/dist/src/cli/watch-pr-observer.js +108 -0
- package/dist/src/cli/watch-pr-settings.d.ts +8 -0
- package/dist/src/cli/watch-pr-settings.js +47 -0
- package/dist/src/cli/watch-reads.d.ts +28 -0
- package/dist/src/cli/watch-reads.js +248 -0
- package/dist/src/cli/watch-render.d.ts +153 -0
- package/dist/src/cli/watch-render.js +102 -0
- package/dist/src/cli/watch-run-input.d.ts +14 -0
- package/dist/src/cli/watch-run-input.js +49 -0
- package/dist/src/cli/watch-server.d.ts +13 -0
- package/dist/src/cli/watch-server.js +214 -0
- package/dist/src/cli/watch-start-view.d.ts +18 -0
- package/dist/src/cli/watch-start-view.js +77 -0
- package/dist/src/cli/watch-stream.d.ts +11 -0
- package/dist/src/cli/watch-stream.js +128 -0
- package/dist/src/cli/watch-turn.d.ts +30 -0
- package/dist/src/cli/watch-turn.js +135 -0
- package/dist/src/cli/watch-usage.d.ts +6 -0
- package/dist/src/cli/watch-usage.js +65 -0
- package/dist/src/cli/watch-view.d.ts +54 -0
- package/dist/src/cli/watch-view.js +267 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +104 -0
- package/dist/src/daemon/analysis-launch.d.ts +5 -0
- package/dist/src/daemon/analysis-launch.js +81 -0
- package/dist/src/daemon/analysis-token.d.ts +6 -0
- package/dist/src/daemon/analysis-token.js +88 -0
- package/dist/src/daemon/analysis-worker.d.ts +22 -0
- package/dist/src/daemon/analysis-worker.js +219 -0
- package/dist/src/daemon/chats-files.d.ts +15 -0
- package/dist/src/daemon/chats-files.js +113 -0
- package/dist/src/daemon/chats-worker.d.ts +12 -0
- package/dist/src/daemon/chats-worker.js +200 -0
- package/dist/src/daemon/claude-turn.d.ts +38 -0
- package/dist/src/daemon/claude-turn.js +216 -0
- package/dist/src/daemon/claude-worker.d.ts +29 -0
- package/dist/src/daemon/claude-worker.js +276 -0
- package/dist/src/daemon/codex-stream.d.ts +4 -0
- package/dist/src/daemon/codex-stream.js +129 -0
- package/dist/src/daemon/daemon.d.ts +49 -0
- package/dist/src/daemon/daemon.js +195 -0
- package/dist/src/daemon/delivery-router.d.ts +10 -0
- package/dist/src/daemon/delivery-router.js +34 -0
- package/dist/src/daemon/github-calls.d.ts +29 -0
- package/dist/src/daemon/github-calls.js +127 -0
- package/dist/src/daemon/github-issue-methods.d.ts +3 -0
- package/dist/src/daemon/github-issue-methods.js +99 -0
- package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
- package/dist/src/daemon/github-issue-privacy.js +131 -0
- package/dist/src/daemon/github-merge.d.ts +18 -0
- package/dist/src/daemon/github-merge.js +259 -0
- package/dist/src/daemon/github-methods.d.ts +5 -0
- package/dist/src/daemon/github-methods.js +202 -0
- package/dist/src/daemon/github-operation.d.ts +38 -0
- package/dist/src/daemon/github-operation.js +57 -0
- package/dist/src/daemon/github-ticket-status.d.ts +3 -0
- package/dist/src/daemon/github-ticket-status.js +268 -0
- package/dist/src/daemon/github-worker.d.ts +17 -0
- package/dist/src/daemon/github-worker.js +281 -0
- package/dist/src/daemon/host-environment.d.ts +8 -0
- package/dist/src/daemon/host-environment.js +14 -0
- package/dist/src/daemon/issue-queue.d.ts +10 -0
- package/dist/src/daemon/issue-queue.js +254 -0
- package/dist/src/daemon/notify-message.d.ts +14 -0
- package/dist/src/daemon/notify-message.js +48 -0
- package/dist/src/daemon/notify.d.ts +12 -0
- package/dist/src/daemon/notify.js +161 -0
- package/dist/src/daemon/operation-journal.d.ts +43 -0
- package/dist/src/daemon/operation-journal.js +55 -0
- package/dist/src/daemon/retrying-turn.d.ts +9 -0
- package/dist/src/daemon/retrying-turn.js +185 -0
- package/dist/src/daemon/ticket-registration.d.ts +33 -0
- package/dist/src/daemon/ticket-registration.js +177 -0
- package/dist/src/daemon/ticket-source.d.ts +17 -0
- package/dist/src/daemon/ticket-source.js +36 -0
- package/dist/src/daemon/work-tree.d.ts +26 -0
- package/dist/src/daemon/work-tree.js +206 -0
- package/dist/src/effect-authorization.d.ts +21 -0
- package/dist/src/effect-authorization.js +14 -0
- package/dist/src/execution-pin.d.ts +4 -0
- package/dist/src/execution-pin.js +68 -0
- package/dist/src/host/start-delivery.d.ts +41 -0
- package/dist/src/host/start-delivery.js +68 -0
- package/dist/src/host/step-bridge-host.d.ts +79 -0
- package/dist/src/host/step-bridge-host.js +205 -0
- package/dist/src/host/step-claims.d.ts +31 -0
- package/dist/src/host/step-claims.js +85 -0
- package/dist/src/host/world-host.d.ts +21 -0
- package/dist/src/host/world-host.js +51 -0
- package/dist/src/host/world-reconciliation.d.ts +39 -0
- package/dist/src/host/world-reconciliation.js +81 -0
- package/dist/src/host/world-runs.d.ts +14 -0
- package/dist/src/host/world-runs.js +69 -0
- package/dist/src/operation-identity.d.ts +7 -0
- package/dist/src/operation-identity.js +59 -0
- package/dist/src/protocol.d.ts +35 -0
- package/dist/src/protocol.js +64 -0
- package/dist/src/resource-files.d.ts +1 -0
- package/dist/src/resource-files.js +29 -0
- package/dist/src/service/changes.d.ts +11 -0
- package/dist/src/service/changes.js +32 -0
- package/dist/src/service/decision-handler.d.ts +9 -0
- package/dist/src/service/decision-handler.js +233 -0
- package/dist/src/service/event-handler.d.ts +10 -0
- package/dist/src/service/event-handler.js +70 -0
- package/dist/src/service/expiry.d.ts +13 -0
- package/dist/src/service/expiry.js +53 -0
- package/dist/src/service/gateway.d.ts +21 -0
- package/dist/src/service/gateway.js +120 -0
- package/dist/src/service/registry.d.ts +40 -0
- package/dist/src/service/registry.js +13 -0
- package/dist/src/service/replies.d.ts +26 -0
- package/dist/src/service/replies.js +56 -0
- package/dist/src/service/run-handlers.d.ts +4 -0
- package/dist/src/service/run-handlers.js +263 -0
- package/dist/src/service/service.d.ts +58 -0
- package/dist/src/service/service.js +212 -0
- package/dist/src/service/submission-handler.d.ts +4 -0
- package/dist/src/service/submission-handler.js +206 -0
- package/dist/src/service/transport.d.ts +16 -0
- package/dist/src/service/transport.js +141 -0
- package/dist/src/service/worker-port.d.ts +85 -0
- package/dist/src/service/worker-port.js +126 -0
- package/dist/src/service/worker-totals.d.ts +3 -0
- package/dist/src/service/worker-totals.js +28 -0
- package/dist/src/step-bridge.d.ts +57 -0
- package/dist/src/step-bridge.js +4 -0
- package/dist/src/steps/decision-gate.d.ts +2 -0
- package/dist/src/steps/decision-gate.js +8 -0
- package/dist/src/steps/load-cycle.d.ts +10 -0
- package/dist/src/steps/load-cycle.js +11 -0
- package/dist/src/steps/protected-effect.d.ts +2 -0
- package/dist/src/steps/protected-effect.js +8 -0
- package/dist/src/storage/decision-rows.d.ts +54 -0
- package/dist/src/storage/decision-rows.js +72 -0
- package/dist/src/storage/decision-snapshots.d.ts +17 -0
- package/dist/src/storage/decision-snapshots.js +25 -0
- package/dist/src/storage/domain-changes.d.ts +48 -0
- package/dist/src/storage/domain-changes.js +213 -0
- package/dist/src/storage/domain-rows.d.ts +85 -0
- package/dist/src/storage/domain-rows.js +129 -0
- package/dist/src/storage/domain-schema.d.ts +32 -0
- package/dist/src/storage/domain-schema.js +193 -0
- package/dist/src/storage/effect-changes.d.ts +5 -0
- package/dist/src/storage/effect-changes.js +105 -0
- package/dist/src/storage/effect-rows.d.ts +67 -0
- package/dist/src/storage/effect-rows.js +74 -0
- package/dist/src/storage/effect-schema.d.ts +1 -0
- package/dist/src/storage/effect-schema.js +59 -0
- package/dist/src/storage/statements.d.ts +9 -0
- package/dist/src/storage/statements.js +8 -0
- package/dist/src/submission.d.ts +42 -0
- package/dist/src/submission.js +71 -0
- package/dist/src/ticket-status.d.ts +8 -0
- package/dist/src/ticket-status.js +45 -0
- package/dist/src/token-prices.d.ts +19 -0
- package/dist/src/token-prices.js +76 -0
- package/dist/src/turn-profile.d.ts +13 -0
- package/dist/src/turn-profile.js +100 -0
- package/dist/src/worker-usage.d.ts +22 -0
- package/dist/src/worker-usage.js +44 -0
- package/dist/src/workflow-admission.d.ts +45 -0
- package/dist/src/workflow-admission.js +151 -0
- package/dist/src/workflow-candidate.d.ts +29 -0
- package/dist/src/workflow-candidate.js +59 -0
- package/dist/src/workflow-contracts.d.ts +29 -0
- package/dist/src/workflow-contracts.js +110 -0
- package/dist/src/workflow-declaration.d.ts +11 -0
- package/dist/src/workflow-declaration.js +59 -0
- package/dist/src/workflow-resources.d.ts +8 -0
- package/dist/src/workflow-resources.js +14 -0
- package/dist/src/workflows.d.ts +6 -0
- package/dist/src/workflows.js +4 -0
- package/dist/tools/compile-workflows.d.ts +1 -0
- package/dist/tools/compile-workflows.js +33 -0
- package/dist/tools/self-host-processes.d.ts +10 -0
- package/dist/tools/self-host-processes.js +156 -0
- package/dist/tools/self-host-workflows.d.ts +15 -0
- package/dist/tools/self-host-workflows.js +78 -0
- package/dist/tools/self-host.d.ts +1 -0
- package/dist/tools/self-host.js +261 -0
- package/dist/tools/self-update-host.d.ts +13 -0
- package/dist/tools/self-update-host.js +88 -0
- package/dist/tools/self-update.d.ts +11 -0
- package/dist/tools/self-update.js +177 -0
- package/dist/tools/workflow-manifest.d.ts +3 -0
- package/dist/tools/workflow-manifest.js +34 -0
- package/dist/workflows/analyze-chats.d.ts +10 -0
- package/dist/workflows/analyze-chats.declaration.json +9 -0
- package/dist/workflows/analyze-chats.js +73 -0
- package/dist/workflows/develop-prd.d.ts +7 -0
- package/dist/workflows/develop-prd.js +97 -0
- package/dist/workflows/develop-ticket.d.ts +9 -0
- package/dist/workflows/develop-ticket.js +202 -0
- package/dist/workflows/issue-labels.d.ts +16 -0
- package/dist/workflows/issue-labels.js +70 -0
- package/dist/workflows/ticket-prompts.d.ts +35 -0
- package/dist/workflows/ticket-prompts.js +133 -0
- package/package.json +84 -75
- package/dist/abstract_gpt/index.js +0 -55
- package/dist/cloving_gpt/adapters/Adapter.js +0 -2
- package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
- package/dist/cloving_gpt/adapters/claude.js +0 -128
- package/dist/cloving_gpt/adapters/gemini.js +0 -135
- package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
- package/dist/cloving_gpt/adapters/index.js +0 -2
- package/dist/cloving_gpt/adapters/mistral.js +0 -128
- package/dist/cloving_gpt/adapters/ollama.js +0 -128
- package/dist/cloving_gpt/adapters/openai.js +0 -100
- package/dist/cloving_gpt/index.js +0 -192
- package/dist/commands/analyze.js +0 -47
- package/dist/commands/chat.js +0 -14
- package/dist/commands/check.js +0 -7
- package/dist/commands/commit.js +0 -44
- package/dist/commands/config.js +0 -167
- package/dist/commands/describe.js +0 -235
- package/dist/commands/generate/code.js +0 -21
- package/dist/commands/generate/commit.js +0 -11
- package/dist/commands/generate/context.js +0 -82
- package/dist/commands/generate/docs.js +0 -11
- package/dist/commands/generate/documentation.js +0 -11
- package/dist/commands/generate/fizzbuzz.js +0 -35
- package/dist/commands/generate/init.js +0 -15
- package/dist/commands/generate/review.js +0 -11
- package/dist/commands/generate/sh.js +0 -95
- package/dist/commands/generate/shell.js +0 -11
- package/dist/commands/generate/unit_tests.js +0 -11
- package/dist/commands/init.js +0 -13
- package/dist/commands/models.js +0 -22
- package/dist/commands/project/build.js +0 -88
- package/dist/commands/project/complete.js +0 -12
- package/dist/commands/project/init.js +0 -82
- package/dist/commands/project/plan.js +0 -108
- package/dist/commands/proxy.js +0 -11
- package/dist/commands/review.js +0 -50
- package/dist/commands/tokens.js +0 -75
- package/dist/commands/unit_tests.js +0 -150
- package/dist/commands/update.js +0 -7
- package/dist/file2.js +0 -4
- package/dist/index.js +0 -136
- package/dist/managers/BlockManager.js +0 -120
- package/dist/managers/ChatManager.js +0 -653
- package/dist/managers/ChunkManager.js +0 -32
- package/dist/managers/CodeManager.js +0 -185
- package/dist/managers/CommitManager.js +0 -78
- package/dist/managers/DocsManager.js +0 -88
- package/dist/managers/DocumentationManager.js +0 -114
- package/dist/managers/InitManager.js +0 -230
- package/dist/managers/ProxyManager.js +0 -210
- package/dist/managers/ReviewManager.js +0 -131
- package/dist/managers/ShellManager.js +0 -163
- package/dist/managers/StreamManager.js +0 -308
- package/dist/managers/UnitTestManager.js +0 -243
- package/dist/managers/src/managers/ProxyManager.js +0 -1
- package/dist/newfile.js +0 -2
- package/dist/package.json +0 -86
- package/dist/utils/command_utils.js +0 -384
- package/dist/utils/config_utils.js +0 -249
- package/dist/utils/gitUtils.js +0 -42
- package/dist/utils/git_utils.js +0 -217
- package/dist/utils/modelUtils.js +0 -7
- package/dist/utils/model_utils.js +0 -7
- package/dist/utils/prompt_utils.js +0 -333
- package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
- package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
- package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
- package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
- package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
- package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
- package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
- package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
- package/dist/utils/prompts/index.js +0 -27
- package/dist/utils/string_utils.js +0 -505
- package/dist/utils/types.js +0 -2
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DevelopmentInput } from "../workflow-contracts.ts";
|
|
2
|
+
export type CycleLoad = {
|
|
3
|
+
readonly kind: "unavailable";
|
|
4
|
+
readonly reason: "cloving-host-unavailable";
|
|
5
|
+
readonly cycleId: string;
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: "invalid";
|
|
8
|
+
readonly reason: "invalid-development-input";
|
|
9
|
+
};
|
|
10
|
+
export declare function loadCycle(input: DevelopmentInput): Promise<CycleLoad>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { validateDevelopmentInput } from "../workflow-contracts.js";
|
|
2
|
+
export async function loadCycle(input) {
|
|
3
|
+
"use step";
|
|
4
|
+
return Promise.resolve(validateDevelopmentInput(input).kind === "invalid"
|
|
5
|
+
? { kind: "invalid", reason: "invalid-development-input" }
|
|
6
|
+
: {
|
|
7
|
+
kind: "unavailable",
|
|
8
|
+
reason: "cloving-host-unavailable",
|
|
9
|
+
cycleId: input.cycleId,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { isStepBridge, stepBridgeKey, } from "../step-bridge.js";
|
|
2
|
+
export async function protectedEffect(request) {
|
|
3
|
+
"use step";
|
|
4
|
+
const bridge = Reflect.get(globalThis, Symbol.for(stepBridgeKey));
|
|
5
|
+
if (!isStepBridge(bridge))
|
|
6
|
+
return { kind: "unavailable", reason: "cloving-host-unavailable" };
|
|
7
|
+
return await bridge.effect(request);
|
|
8
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type SqlConnection } from "./domain-rows.ts";
|
|
2
|
+
export interface GateRow {
|
|
3
|
+
readonly runId: string;
|
|
4
|
+
readonly gateId: string;
|
|
5
|
+
readonly kind: string;
|
|
6
|
+
readonly label: number | null;
|
|
7
|
+
readonly subject: string | null;
|
|
8
|
+
readonly prompt: string | null;
|
|
9
|
+
readonly expiresAt: string | null;
|
|
10
|
+
readonly generation: number;
|
|
11
|
+
readonly revision: number;
|
|
12
|
+
readonly wait: string;
|
|
13
|
+
readonly decision: string | null;
|
|
14
|
+
readonly answer: string | null;
|
|
15
|
+
readonly decidedSequence: number | null;
|
|
16
|
+
readonly openedSequence: number;
|
|
17
|
+
readonly continuation: string | null;
|
|
18
|
+
}
|
|
19
|
+
export interface DetailRow {
|
|
20
|
+
readonly runId: string;
|
|
21
|
+
readonly generation: number;
|
|
22
|
+
readonly submission: string | null;
|
|
23
|
+
readonly input: string | null;
|
|
24
|
+
readonly resolver: string | null;
|
|
25
|
+
readonly condition: string | null;
|
|
26
|
+
readonly reason: string | null;
|
|
27
|
+
readonly evidence: string | null;
|
|
28
|
+
readonly retryAt: string | null;
|
|
29
|
+
readonly attempt: number | null;
|
|
30
|
+
readonly attemptLimit: number | null;
|
|
31
|
+
readonly observedSequence: number | null;
|
|
32
|
+
readonly observedAt: string | null;
|
|
33
|
+
readonly observedOperation: string | null;
|
|
34
|
+
}
|
|
35
|
+
export interface DocumentRow {
|
|
36
|
+
readonly digest: string;
|
|
37
|
+
readonly body: string;
|
|
38
|
+
}
|
|
39
|
+
export interface DecisionRows {
|
|
40
|
+
readonly gates: readonly GateRow[];
|
|
41
|
+
readonly details: readonly DetailRow[];
|
|
42
|
+
}
|
|
43
|
+
export declare const gateColumns = "run_id, gate_id, kind, label, subject, prompt, expires_at, generation, revision, wait, decision, answer, decided_sequence, opened_sequence, continuation";
|
|
44
|
+
export declare const detailColumns = "run_id, generation, submission, input, resolver, condition, reason, evidence, retry_at, attempt, attempt_limit, observed_sequence, observed_at, observed_operation";
|
|
45
|
+
export declare function gateRow(row: unknown): GateRow;
|
|
46
|
+
export declare function detailRow(row: unknown): DetailRow;
|
|
47
|
+
export declare function documentRow(row: unknown): DocumentRow;
|
|
48
|
+
export declare function loadDecisions(connection: SqlConnection): Promise<DecisionRows>;
|
|
49
|
+
export declare function loadDocuments(connection: SqlConnection): Promise<readonly DocumentRow[]>;
|
|
50
|
+
export declare function runDecisions(connection: SqlConnection, runId: string): Promise<DecisionRows & {
|
|
51
|
+
readonly questions: number;
|
|
52
|
+
}>;
|
|
53
|
+
export declare function storedDigests(connection: SqlConnection, digests: readonly string[]): Promise<readonly string[]>;
|
|
54
|
+
export declare function documentBody(connection: SqlConnection, digest: string): Promise<string | undefined>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { integer, optionalInteger, optionalText, text, } from "./domain-rows.js";
|
|
2
|
+
export const gateColumns = "run_id, gate_id, kind, label, subject, prompt, expires_at, generation, revision, wait, decision, answer, decided_sequence, opened_sequence, continuation";
|
|
3
|
+
export const detailColumns = "run_id, generation, submission, input, resolver, condition, reason, evidence, retry_at, attempt, attempt_limit, observed_sequence, observed_at, observed_operation";
|
|
4
|
+
export function gateRow(row) {
|
|
5
|
+
return {
|
|
6
|
+
runId: text(row, "run_id"),
|
|
7
|
+
gateId: text(row, "gate_id"),
|
|
8
|
+
kind: text(row, "kind"),
|
|
9
|
+
label: optionalInteger(row, "label"),
|
|
10
|
+
subject: optionalText(row, "subject"),
|
|
11
|
+
prompt: optionalText(row, "prompt"),
|
|
12
|
+
expiresAt: optionalText(row, "expires_at"),
|
|
13
|
+
generation: integer(row, "generation"),
|
|
14
|
+
revision: integer(row, "revision"),
|
|
15
|
+
wait: text(row, "wait"),
|
|
16
|
+
decision: optionalText(row, "decision"),
|
|
17
|
+
answer: optionalText(row, "answer"),
|
|
18
|
+
decidedSequence: optionalInteger(row, "decided_sequence"),
|
|
19
|
+
openedSequence: integer(row, "opened_sequence"),
|
|
20
|
+
continuation: optionalText(row, "continuation"),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function detailRow(row) {
|
|
24
|
+
return {
|
|
25
|
+
runId: text(row, "run_id"),
|
|
26
|
+
generation: integer(row, "generation"),
|
|
27
|
+
submission: optionalText(row, "submission"),
|
|
28
|
+
input: optionalText(row, "input"),
|
|
29
|
+
resolver: optionalText(row, "resolver"),
|
|
30
|
+
condition: optionalText(row, "condition"),
|
|
31
|
+
reason: optionalText(row, "reason"),
|
|
32
|
+
evidence: optionalText(row, "evidence"),
|
|
33
|
+
retryAt: optionalText(row, "retry_at"),
|
|
34
|
+
attempt: optionalInteger(row, "attempt"),
|
|
35
|
+
attemptLimit: optionalInteger(row, "attempt_limit"),
|
|
36
|
+
observedSequence: optionalInteger(row, "observed_sequence"),
|
|
37
|
+
observedAt: optionalText(row, "observed_at"),
|
|
38
|
+
observedOperation: optionalText(row, "observed_operation"),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function documentRow(row) {
|
|
42
|
+
return { digest: text(row, "digest"), body: text(row, "body") };
|
|
43
|
+
}
|
|
44
|
+
export async function loadDecisions(connection) {
|
|
45
|
+
return {
|
|
46
|
+
gates: (await connection.all(`SELECT ${gateColumns} FROM gates ORDER BY opened_sequence, gate_id`)).map(gateRow),
|
|
47
|
+
details: (await connection.all(`SELECT ${detailColumns} FROM run_details ORDER BY run_id`)).map(detailRow),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export async function loadDocuments(connection) {
|
|
51
|
+
return (await connection.all("SELECT digest, body FROM documents ORDER BY digest")).map(documentRow);
|
|
52
|
+
}
|
|
53
|
+
export async function runDecisions(connection, runId) {
|
|
54
|
+
return {
|
|
55
|
+
gates: (await connection.all(`SELECT ${gateColumns} FROM gates WHERE run_id = ? ORDER BY opened_sequence, gate_id`, [runId])).map(gateRow),
|
|
56
|
+
details: (await connection.all(`SELECT ${detailColumns} FROM run_details WHERE run_id = ?`, [runId])).map(detailRow),
|
|
57
|
+
questions: integer(await connection.get("SELECT coalesce(max(label), 0) AS questions FROM gates"), "questions"),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export async function storedDigests(connection, digests) {
|
|
61
|
+
const found = [];
|
|
62
|
+
for (const digest of digests) {
|
|
63
|
+
const row = await connection.get("SELECT digest FROM documents WHERE digest = ?", [digest]);
|
|
64
|
+
if (row !== undefined)
|
|
65
|
+
found.push(digest);
|
|
66
|
+
}
|
|
67
|
+
return found;
|
|
68
|
+
}
|
|
69
|
+
export async function documentBody(connection, digest) {
|
|
70
|
+
const row = await connection.get("SELECT body FROM documents WHERE digest = ?", [digest]);
|
|
71
|
+
return row === undefined ? undefined : text(row, "body");
|
|
72
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type DecisionRows, type DocumentRow } from "./decision-rows.ts";
|
|
2
|
+
import { type AttemptRow, type DomainSnapshot, type ProjectionRows, type SqlConnection } from "./domain-rows.ts";
|
|
3
|
+
import { type EffectRows } from "./effect-rows.ts";
|
|
4
|
+
export interface ProjectionSnapshot extends ProjectionRows, DecisionRows {
|
|
5
|
+
readonly deliveries: readonly AttemptRow[];
|
|
6
|
+
readonly pending: readonly string[];
|
|
7
|
+
readonly sequence: number;
|
|
8
|
+
}
|
|
9
|
+
export interface DecidedSnapshot extends DomainSnapshot, DecisionRows {
|
|
10
|
+
readonly documents: readonly DocumentRow[];
|
|
11
|
+
}
|
|
12
|
+
export interface CurrentSnapshot extends DecidedSnapshot {
|
|
13
|
+
readonly effects: EffectRows;
|
|
14
|
+
}
|
|
15
|
+
export declare function loadProjections(connection: SqlConnection): Promise<ProjectionSnapshot>;
|
|
16
|
+
export declare function loadDecided(connection: SqlConnection): Promise<DecidedSnapshot>;
|
|
17
|
+
export declare function loadCurrent(connection: SqlConnection): Promise<CurrentSnapshot>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { loadDecisions, loadDocuments, } from "./decision-rows.js";
|
|
2
|
+
import { latestSequence, loadAttempts, loadSnapshot, projectionRows, text, } from "./domain-rows.js";
|
|
3
|
+
import { loadEffects } from "./effect-rows.js";
|
|
4
|
+
export async function loadProjections(connection) {
|
|
5
|
+
return {
|
|
6
|
+
...(await projectionRows(connection)),
|
|
7
|
+
...(await loadDecisions(connection)),
|
|
8
|
+
deliveries: await loadAttempts(connection),
|
|
9
|
+
pending: (await connection.all("SELECT operation_id FROM operations WHERE status = 'dispatch-pending' ORDER BY operation_id")).map((row) => text(row, "operation_id")),
|
|
10
|
+
sequence: await latestSequence(connection),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export async function loadDecided(connection) {
|
|
14
|
+
return {
|
|
15
|
+
...(await loadSnapshot(connection)),
|
|
16
|
+
...(await loadDecisions(connection)),
|
|
17
|
+
documents: await loadDocuments(connection),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export async function loadCurrent(connection) {
|
|
21
|
+
return {
|
|
22
|
+
...(await loadDecided(connection)),
|
|
23
|
+
effects: await loadEffects(connection),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type DetailRow, type DocumentRow, type GateRow } from "./decision-rows.ts";
|
|
2
|
+
import { type CommandRow, type DefinitionRow, type EventRow, type RunRow, type SqlConnection } from "./domain-rows.ts";
|
|
3
|
+
import { type EffectRows } from "./effect-rows.ts";
|
|
4
|
+
import { type Statement } from "./statements.ts";
|
|
5
|
+
export interface StagedDelivery {
|
|
6
|
+
readonly effectId: string;
|
|
7
|
+
readonly operationId: string;
|
|
8
|
+
readonly inputDigest: string;
|
|
9
|
+
readonly purpose: string;
|
|
10
|
+
readonly leaseGeneration: number | null;
|
|
11
|
+
readonly authorityEpoch: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ClosedDelivery {
|
|
14
|
+
readonly effectId: string;
|
|
15
|
+
readonly outcome: string;
|
|
16
|
+
readonly receipt: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface AddedIntent {
|
|
19
|
+
readonly operationId: string;
|
|
20
|
+
readonly kind: string;
|
|
21
|
+
readonly runId: string;
|
|
22
|
+
readonly createdSequence: number;
|
|
23
|
+
}
|
|
24
|
+
export interface ReleasedIntent {
|
|
25
|
+
readonly operationId: string;
|
|
26
|
+
readonly releasedSequence: number;
|
|
27
|
+
}
|
|
28
|
+
export interface DomainChange extends EffectRows {
|
|
29
|
+
readonly previous: number;
|
|
30
|
+
readonly sequence: number;
|
|
31
|
+
readonly definitions: readonly DefinitionRow[];
|
|
32
|
+
readonly events: readonly EventRow[];
|
|
33
|
+
readonly runs: readonly RunRow[];
|
|
34
|
+
readonly commands: readonly CommandRow[];
|
|
35
|
+
readonly added: readonly AddedIntent[];
|
|
36
|
+
readonly released: readonly ReleasedIntent[];
|
|
37
|
+
readonly staged: readonly StagedDelivery[];
|
|
38
|
+
readonly closed: readonly ClosedDelivery[];
|
|
39
|
+
readonly gates: readonly GateRow[];
|
|
40
|
+
readonly details: readonly DetailRow[];
|
|
41
|
+
readonly documents: readonly DocumentRow[];
|
|
42
|
+
readonly completesAdoption: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function persistChange(value: unknown, connection: SqlConnection): Promise<void>;
|
|
45
|
+
export declare function gateParameters(row: GateRow): readonly unknown[];
|
|
46
|
+
export declare function detailParameters(row: DetailRow): readonly unknown[];
|
|
47
|
+
export declare function decisionStatements(change: Pick<DomainChange, "gates" | "details" | "documents">): readonly Statement[];
|
|
48
|
+
export declare function persistDecisions(connection: SqlConnection, rows: Pick<DomainChange, "gates" | "details" | "documents">): Promise<void>;
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { detailColumns, detailRow, documentRow, gateColumns, gateRow, } from "./decision-rows.js";
|
|
2
|
+
import { commandRow, definitionRow, eventRow, integer, latestSequence, optionalInteger, optionalText, runRow, text, } from "./domain-rows.js";
|
|
3
|
+
import { effectStatements } from "./effect-changes.js";
|
|
4
|
+
import { budgetRow, evidenceRow, leaseRow, operationRow, stopRow, } from "./effect-rows.js";
|
|
5
|
+
import { upsert } from "./statements.js";
|
|
6
|
+
export async function persistChange(value, connection) {
|
|
7
|
+
const change = parseChange(value);
|
|
8
|
+
if ((await latestSequence(connection)) !== change.previous)
|
|
9
|
+
throw new Error("stale-authority-sequence");
|
|
10
|
+
for (const statement of statements(change))
|
|
11
|
+
await connection.run(statement.sql, statement.parameters);
|
|
12
|
+
}
|
|
13
|
+
function statements(change) {
|
|
14
|
+
return [
|
|
15
|
+
...change.definitions.map((row) => ({
|
|
16
|
+
sql: "INSERT INTO definitions (pin, manifest) VALUES (?, ?) ON CONFLICT (pin) DO NOTHING",
|
|
17
|
+
parameters: [row.pin, row.manifest],
|
|
18
|
+
})),
|
|
19
|
+
...change.events.map((row) => ({
|
|
20
|
+
sql: "INSERT INTO events (sequence, type, run_id, command_id, recorded_at, request, payload) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
21
|
+
parameters: [
|
|
22
|
+
row.sequence,
|
|
23
|
+
row.type,
|
|
24
|
+
row.runId,
|
|
25
|
+
row.commandId,
|
|
26
|
+
row.recordedAt,
|
|
27
|
+
row.request,
|
|
28
|
+
row.payload,
|
|
29
|
+
],
|
|
30
|
+
})),
|
|
31
|
+
...change.runs.map((row) => ({
|
|
32
|
+
sql: "INSERT INTO runs (run_id, status, revision, workflow, paused_from, gates, sequence) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (run_id) DO UPDATE SET status = excluded.status, revision = excluded.revision, workflow = excluded.workflow, paused_from = excluded.paused_from, gates = excluded.gates, sequence = excluded.sequence",
|
|
33
|
+
parameters: [
|
|
34
|
+
row.runId,
|
|
35
|
+
row.status,
|
|
36
|
+
row.revision,
|
|
37
|
+
row.workflow,
|
|
38
|
+
row.pausedFrom,
|
|
39
|
+
row.gates,
|
|
40
|
+
row.sequence,
|
|
41
|
+
],
|
|
42
|
+
})),
|
|
43
|
+
...change.commands.map((row) => ({
|
|
44
|
+
sql: "INSERT INTO commands (command_id, request, sequence) VALUES (?, ?, ?)",
|
|
45
|
+
parameters: [row.commandId, row.request, row.sequence],
|
|
46
|
+
})),
|
|
47
|
+
...intentStatements(change),
|
|
48
|
+
...deliveryStatements(change),
|
|
49
|
+
...decisionStatements(change),
|
|
50
|
+
...effectStatements(change),
|
|
51
|
+
...(change.completesAdoption
|
|
52
|
+
? [
|
|
53
|
+
{
|
|
54
|
+
sql: "UPDATE authority_identity SET adoption_sequence = NULL WHERE singleton = 1 AND adoption_sequence = ?",
|
|
55
|
+
parameters: [change.sequence],
|
|
56
|
+
},
|
|
57
|
+
]
|
|
58
|
+
: []),
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
function intentStatements(change) {
|
|
62
|
+
return [
|
|
63
|
+
...change.added.map((row) => ({
|
|
64
|
+
sql: "INSERT INTO outbox (operation_id, kind, run_id, created_sequence) VALUES (?, ?, ?, ?)",
|
|
65
|
+
parameters: [row.operationId, row.kind, row.runId, row.createdSequence],
|
|
66
|
+
})),
|
|
67
|
+
...change.released.map((row) => ({
|
|
68
|
+
sql: "UPDATE outbox SET released_sequence = ? WHERE operation_id = ? AND released_sequence IS NULL",
|
|
69
|
+
parameters: [row.releasedSequence, row.operationId],
|
|
70
|
+
})),
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
function deliveryStatements(change) {
|
|
74
|
+
return [
|
|
75
|
+
...change.closed.map((row) => ({
|
|
76
|
+
sql: "UPDATE deliveries SET outcome = ?, receipt = ? WHERE effect_id = ? AND outcome IS NULL",
|
|
77
|
+
parameters: [row.outcome, row.receipt, row.effectId],
|
|
78
|
+
})),
|
|
79
|
+
...change.staged.flatMap((row) => [
|
|
80
|
+
{
|
|
81
|
+
sql: "INSERT INTO deliveries (effect_id, operation_id, input_digest, staged_sequence) VALUES (?, ?, ?, ?)",
|
|
82
|
+
parameters: [
|
|
83
|
+
row.effectId,
|
|
84
|
+
row.operationId,
|
|
85
|
+
row.inputDigest,
|
|
86
|
+
change.sequence,
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
sql: "INSERT INTO dispatch_attempts (effect_id, purpose, lease_generation, authority_epoch) VALUES (?, ?, ?, ?)",
|
|
91
|
+
parameters: [
|
|
92
|
+
row.effectId,
|
|
93
|
+
row.purpose,
|
|
94
|
+
row.leaseGeneration,
|
|
95
|
+
row.authorityEpoch,
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
]),
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
const gateNames = gateColumns.split(", ");
|
|
102
|
+
const detailNames = detailColumns.split(", ");
|
|
103
|
+
const gateUpsert = upsert({ table: "gates", names: gateNames, key: 2 });
|
|
104
|
+
const detailUpsert = upsert({
|
|
105
|
+
table: "run_details",
|
|
106
|
+
names: detailNames,
|
|
107
|
+
key: 1,
|
|
108
|
+
});
|
|
109
|
+
export function gateParameters(row) {
|
|
110
|
+
return [
|
|
111
|
+
row.runId,
|
|
112
|
+
row.gateId,
|
|
113
|
+
row.kind,
|
|
114
|
+
row.label,
|
|
115
|
+
row.subject,
|
|
116
|
+
row.prompt,
|
|
117
|
+
row.expiresAt,
|
|
118
|
+
row.generation,
|
|
119
|
+
row.revision,
|
|
120
|
+
row.wait,
|
|
121
|
+
row.decision,
|
|
122
|
+
row.answer,
|
|
123
|
+
row.decidedSequence,
|
|
124
|
+
row.openedSequence,
|
|
125
|
+
row.continuation,
|
|
126
|
+
];
|
|
127
|
+
}
|
|
128
|
+
export function detailParameters(row) {
|
|
129
|
+
return [
|
|
130
|
+
row.runId,
|
|
131
|
+
row.generation,
|
|
132
|
+
row.submission,
|
|
133
|
+
row.input,
|
|
134
|
+
row.resolver,
|
|
135
|
+
row.condition,
|
|
136
|
+
row.reason,
|
|
137
|
+
row.evidence,
|
|
138
|
+
row.retryAt,
|
|
139
|
+
row.attempt,
|
|
140
|
+
row.attemptLimit,
|
|
141
|
+
row.observedSequence,
|
|
142
|
+
row.observedAt,
|
|
143
|
+
row.observedOperation,
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
export function decisionStatements(change) {
|
|
147
|
+
return [
|
|
148
|
+
...change.gates.map((row) => ({
|
|
149
|
+
sql: gateUpsert,
|
|
150
|
+
parameters: gateParameters(row),
|
|
151
|
+
})),
|
|
152
|
+
...change.details.map((row) => ({
|
|
153
|
+
sql: detailUpsert,
|
|
154
|
+
parameters: detailParameters(row),
|
|
155
|
+
})),
|
|
156
|
+
...change.documents.map((row) => ({
|
|
157
|
+
sql: "INSERT INTO documents (digest, body) VALUES (?, ?) ON CONFLICT (digest) DO NOTHING",
|
|
158
|
+
parameters: [row.digest, row.body],
|
|
159
|
+
})),
|
|
160
|
+
];
|
|
161
|
+
}
|
|
162
|
+
export async function persistDecisions(connection, rows) {
|
|
163
|
+
for (const statement of decisionStatements(rows))
|
|
164
|
+
await connection.run(statement.sql, statement.parameters);
|
|
165
|
+
}
|
|
166
|
+
function parseChange(value) {
|
|
167
|
+
return {
|
|
168
|
+
previous: integer(value, "previous"),
|
|
169
|
+
sequence: integer(value, "sequence"),
|
|
170
|
+
definitions: list(value, "definitions").map(definitionRow),
|
|
171
|
+
events: list(value, "events").map(eventRow),
|
|
172
|
+
runs: list(value, "runs").map(runRow),
|
|
173
|
+
commands: list(value, "commands").map(commandRow),
|
|
174
|
+
added: list(value, "added").map((row) => ({
|
|
175
|
+
operationId: text(row, "operation_id"),
|
|
176
|
+
kind: text(row, "kind"),
|
|
177
|
+
runId: text(row, "run_id"),
|
|
178
|
+
createdSequence: integer(row, "created_sequence"),
|
|
179
|
+
})),
|
|
180
|
+
released: list(value, "released").map((row) => ({
|
|
181
|
+
operationId: text(row, "operation_id"),
|
|
182
|
+
releasedSequence: integer(row, "released_sequence"),
|
|
183
|
+
})),
|
|
184
|
+
staged: list(value, "staged").map((row) => ({
|
|
185
|
+
effectId: text(row, "effect_id"),
|
|
186
|
+
operationId: text(row, "operation_id"),
|
|
187
|
+
inputDigest: text(row, "input_digest"),
|
|
188
|
+
purpose: text(row, "purpose"),
|
|
189
|
+
leaseGeneration: optionalInteger(row, "lease_generation"),
|
|
190
|
+
authorityEpoch: integer(row, "authority_epoch"),
|
|
191
|
+
})),
|
|
192
|
+
closed: list(value, "closed").map((row) => ({
|
|
193
|
+
effectId: text(row, "effect_id"),
|
|
194
|
+
outcome: text(row, "outcome"),
|
|
195
|
+
receipt: optionalText(row, "receipt"),
|
|
196
|
+
})),
|
|
197
|
+
gates: list(value, "gates").map(gateRow),
|
|
198
|
+
details: list(value, "details").map(detailRow),
|
|
199
|
+
documents: list(value, "documents").map(documentRow),
|
|
200
|
+
budgets: list(value, "budgets").map(budgetRow),
|
|
201
|
+
operations: list(value, "operations").map(operationRow),
|
|
202
|
+
leases: list(value, "leases").map(leaseRow),
|
|
203
|
+
evidence: list(value, "evidence").map(evidenceRow),
|
|
204
|
+
stops: list(value, "stops").map(stopRow),
|
|
205
|
+
completesAdoption: Reflect.get(Object(value), "completes_adoption") === true,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function list(value, name) {
|
|
209
|
+
const items = Reflect.get(Object(value), name);
|
|
210
|
+
if (!Array.isArray(items))
|
|
211
|
+
throw new Error(`invalid-column: ${name}`);
|
|
212
|
+
return items;
|
|
213
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export interface SqlConnection {
|
|
2
|
+
readonly run: (sql: string, parameters?: readonly unknown[]) => Promise<unknown>;
|
|
3
|
+
readonly get: (sql: string, parameters?: readonly unknown[]) => Promise<unknown>;
|
|
4
|
+
readonly all: (sql: string, parameters?: readonly unknown[]) => Promise<readonly unknown[]>;
|
|
5
|
+
}
|
|
6
|
+
export interface EventRow {
|
|
7
|
+
readonly sequence: number;
|
|
8
|
+
readonly type: string;
|
|
9
|
+
readonly runId: string;
|
|
10
|
+
readonly commandId: string;
|
|
11
|
+
readonly recordedAt: string;
|
|
12
|
+
readonly request: string;
|
|
13
|
+
readonly payload: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RunRow {
|
|
16
|
+
readonly runId: string;
|
|
17
|
+
readonly status: string;
|
|
18
|
+
readonly revision: number;
|
|
19
|
+
readonly workflow: string;
|
|
20
|
+
readonly pausedFrom: string | null;
|
|
21
|
+
readonly gates: string;
|
|
22
|
+
readonly sequence: number;
|
|
23
|
+
}
|
|
24
|
+
export interface CommandRow {
|
|
25
|
+
readonly commandId: string;
|
|
26
|
+
readonly request: string;
|
|
27
|
+
readonly sequence: number;
|
|
28
|
+
}
|
|
29
|
+
export interface IntentRow {
|
|
30
|
+
readonly operationId: string;
|
|
31
|
+
readonly kind: string;
|
|
32
|
+
readonly runId: string;
|
|
33
|
+
readonly createdSequence: number;
|
|
34
|
+
}
|
|
35
|
+
export interface OutboxRow extends IntentRow {
|
|
36
|
+
readonly releasedSequence: number | null;
|
|
37
|
+
}
|
|
38
|
+
export interface DefinitionRow {
|
|
39
|
+
readonly pin: string;
|
|
40
|
+
readonly manifest: string;
|
|
41
|
+
}
|
|
42
|
+
export interface DeliveryRow {
|
|
43
|
+
readonly effectId: string;
|
|
44
|
+
readonly operationId: string;
|
|
45
|
+
readonly inputDigest: string;
|
|
46
|
+
readonly stagedSequence: number;
|
|
47
|
+
readonly outcome: string | null;
|
|
48
|
+
readonly receipt: string | null;
|
|
49
|
+
}
|
|
50
|
+
export interface AttemptRow extends DeliveryRow {
|
|
51
|
+
readonly purpose: string;
|
|
52
|
+
readonly leaseGeneration: number | null;
|
|
53
|
+
readonly epoch: number | null;
|
|
54
|
+
}
|
|
55
|
+
export interface AuthoritySnapshot {
|
|
56
|
+
readonly definitions: readonly DefinitionRow[];
|
|
57
|
+
readonly events: readonly EventRow[];
|
|
58
|
+
readonly runs: readonly RunRow[];
|
|
59
|
+
readonly commands: readonly CommandRow[];
|
|
60
|
+
readonly outbox: readonly OutboxRow[];
|
|
61
|
+
}
|
|
62
|
+
export interface DomainSnapshot extends AuthoritySnapshot {
|
|
63
|
+
readonly deliveries: readonly DeliveryRow[];
|
|
64
|
+
}
|
|
65
|
+
export declare const attemptColumns = "d.effect_id, d.operation_id, d.input_digest, d.staged_sequence, d.outcome, d.receipt, coalesce(a.purpose, 'dispatch') AS purpose, a.lease_generation, a.authority_epoch";
|
|
66
|
+
export declare const attemptSource = "deliveries d LEFT JOIN dispatch_attempts a ON a.effect_id = d.effect_id";
|
|
67
|
+
export declare function loadAttempts(connection: SqlConnection): Promise<readonly AttemptRow[]>;
|
|
68
|
+
export declare function attemptRow(row: unknown): AttemptRow;
|
|
69
|
+
export type ProjectionRows = Omit<AuthoritySnapshot, "events">;
|
|
70
|
+
export declare function loadSnapshot(connection: SqlConnection): Promise<DomainSnapshot>;
|
|
71
|
+
export declare function loadBaseline(connection: SqlConnection): Promise<AuthoritySnapshot>;
|
|
72
|
+
export declare function loadEvents(connection: SqlConnection): Promise<readonly EventRow[]>;
|
|
73
|
+
export declare function loadDeliveries(connection: SqlConnection): Promise<readonly DeliveryRow[]>;
|
|
74
|
+
export declare function projectionRows(connection: SqlConnection): Promise<ProjectionRows>;
|
|
75
|
+
export declare function latestSequence(connection: SqlConnection): Promise<number>;
|
|
76
|
+
export declare function definitionRow(row: unknown): DefinitionRow;
|
|
77
|
+
export declare function eventRow(row: unknown): EventRow;
|
|
78
|
+
export declare function runRow(row: unknown): RunRow;
|
|
79
|
+
export declare function commandRow(row: unknown): CommandRow;
|
|
80
|
+
export declare function outboxRow(row: unknown): OutboxRow;
|
|
81
|
+
export declare function deliveryRow(row: unknown): DeliveryRow;
|
|
82
|
+
export declare function text(row: unknown, name: string): string;
|
|
83
|
+
export declare function optionalText(row: unknown, name: string): string | null;
|
|
84
|
+
export declare function integer(row: unknown, name: string): number;
|
|
85
|
+
export declare function optionalInteger(row: unknown, name: string): number | null;
|