cloving 0.3.19 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE.md → LICENSE} +1 -1
- package/README.md +475 -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 +263 -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 +27 -0
- package/dist/src/authority/reconciliation.js +147 -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 +122 -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 +65 -0
- package/dist/src/broker/actor/authority-session.js +252 -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/destination.d.ts +4 -0
- package/dist/src/chats/destination.js +94 -0
- package/dist/src/chats/import.d.ts +13 -0
- package/dist/src/chats/import.js +71 -0
- package/dist/src/chats/normalize.d.ts +20 -0
- package/dist/src/chats/normalize.js +139 -0
- package/dist/src/chats/reader.d.ts +15 -0
- package/dist/src/chats/reader.js +87 -0
- package/dist/src/cli/arguments.d.ts +23 -0
- package/dist/src/cli/arguments.js +154 -0
- package/dist/src/cli/client.d.ts +15 -0
- package/dist/src/cli/client.js +122 -0
- package/dist/src/cli/commands.d.ts +14 -0
- package/dist/src/cli/commands.js +253 -0
- package/dist/src/cli/main.d.ts +1 -0
- package/dist/src/cli/main.js +80 -0
- package/dist/src/cli/render.d.ts +8 -0
- package/dist/src/cli/render.js +186 -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.d.ts +4 -0
- package/dist/src/cli/usage.js +124 -0
- package/dist/src/cli/validate.d.ts +38 -0
- package/dist/src/cli/validate.js +116 -0
- package/dist/src/cli/watch-board-view.d.ts +22 -0
- package/dist/src/cli/watch-board-view.js +128 -0
- package/dist/src/cli/watch-board.d.ts +15 -0
- package/dist/src/cli/watch-board.js +174 -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 +261 -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 +272 -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-reads.d.ts +28 -0
- package/dist/src/cli/watch-reads.js +244 -0
- package/dist/src/cli/watch-render.d.ts +139 -0
- package/dist/src/cli/watch-render.js +95 -0
- package/dist/src/cli/watch-server.d.ts +10 -0
- package/dist/src/cli/watch-server.js +176 -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 +29 -0
- package/dist/src/cli/watch-turn.js +130 -0
- package/dist/src/cli/watch-view.d.ts +39 -0
- package/dist/src/cli/watch-view.js +223 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +62 -0
- package/dist/src/daemon/claude-turn.d.ts +28 -0
- package/dist/src/daemon/claude-turn.js +135 -0
- package/dist/src/daemon/claude-worker.d.ts +26 -0
- package/dist/src/daemon/claude-worker.js +224 -0
- package/dist/src/daemon/codex-stream.d.ts +4 -0
- package/dist/src/daemon/codex-stream.js +113 -0
- package/dist/src/daemon/daemon.d.ts +46 -0
- package/dist/src/daemon/daemon.js +186 -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 +198 -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-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 +9 -0
- package/dist/src/daemon/issue-queue.js +163 -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 +42 -0
- package/dist/src/daemon/operation-journal.js +53 -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 +37 -0
- package/dist/src/host/world-reconciliation.js +75 -0
- package/dist/src/host/world-runs.d.ts +14 -0
- package/dist/src/host/world-runs.js +61 -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 +271 -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/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/turn-profile.d.ts +13 -0
- package/dist/src/turn-profile.js +100 -0
- package/dist/src/workflow-admission.d.ts +45 -0
- package/dist/src/workflow-admission.js +151 -0
- package/dist/src/workflow-contracts.d.ts +27 -0
- package/dist/src/workflow-contracts.js +88 -0
- package/dist/src/workflow-declaration.d.ts +11 -0
- package/dist/src/workflow-declaration.js +57 -0
- package/dist/src/workflow-resources.d.ts +8 -0
- package/dist/src/workflow-resources.js +14 -0
- package/dist/src/workflows.d.ts +5 -0
- package/dist/src/workflows.js +3 -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 +151 -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 +6 -0
- package/dist/tools/self-update-host.js +41 -0
- package/dist/tools/self-update.d.ts +10 -0
- package/dist/tools/self-update.js +105 -0
- package/dist/tools/workflow-manifest.d.ts +3 -0
- package/dist/tools/workflow-manifest.js +34 -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 +15 -0
- package/dist/workflows/develop-ticket.js +301 -0
- package/dist/workflows/issue-labels.d.ts +14 -0
- package/dist/workflows/issue-labels.js +36 -0
- package/package.json +82 -75
- package/.DS_Store +0 -0
- package/.aider.chat.history.md +0 -16978
- package/.aider.input.history +0 -15
- package/.aider.tags.cache.v3/cache.db +0 -0
- package/.aider.tags.cache.v3/cache.db-shm +0 -0
- package/.aider.tags.cache.v3/cache.db-wal +0 -0
- package/.cursorrules +0 -77
- package/.github/workflows/auto-release.yml +0 -83
- package/.github/workflows/ci.yml +0 -32
- package/.github/workflows/npm-publish.yml +0 -34
- package/.gitignore +0 -67
- package/.husky/_/.gitignore +0 -1
- package/.husky/_/applypatch-msg +0 -2
- package/.husky/_/commit-msg +0 -2
- package/.husky/_/h +0 -22
- package/.husky/_/husky.sh +0 -9
- package/.husky/_/post-applypatch +0 -2
- package/.husky/_/post-checkout +0 -2
- package/.husky/_/post-commit +0 -2
- package/.husky/_/post-merge +0 -2
- package/.husky/_/post-rewrite +0 -2
- package/.husky/_/pre-applypatch +0 -2
- package/.husky/_/pre-auto-gc +0 -2
- package/.husky/_/pre-commit +0 -2
- package/.husky/_/pre-merge-commit +0 -2
- package/.husky/_/pre-push +0 -2
- package/.husky/_/pre-rebase +0 -2
- package/.husky/_/prepare-commit-msg +0 -2
- package/.husky/pre-commit +0 -1
- package/.husky/pre-push +0 -1
- package/.prettierrc.json +0 -7
- package/.tool-versions +0 -2
- package/SECURITY.md +0 -15
- package/cloving.json +0 -67
- 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 -134
- 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 -64
- 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
- package/jest.config.js +0 -11
- package/src/cloving_gpt/adapters/azureopenai.ts +0 -83
- package/src/cloving_gpt/adapters/claude.ts +0 -140
- package/src/cloving_gpt/adapters/gemini.ts +0 -146
- package/src/cloving_gpt/adapters/index.ts +0 -43
- package/src/cloving_gpt/adapters/mistral.ts +0 -142
- package/src/cloving_gpt/adapters/ollama.ts +0 -136
- package/src/cloving_gpt/adapters/openai.ts +0 -113
- package/src/cloving_gpt/index.ts +0 -229
- package/src/commands/chat.ts +0 -12
- package/src/commands/config.ts +0 -192
- package/src/commands/generate/code.ts +0 -18
- package/src/commands/generate/commit.ts +0 -9
- package/src/commands/generate/context.ts +0 -93
- package/src/commands/generate/docs.ts +0 -9
- package/src/commands/generate/review.ts +0 -9
- package/src/commands/generate/shell.ts +0 -9
- package/src/commands/generate/unit_tests.ts +0 -9
- package/src/commands/init.ts +0 -9
- package/src/commands/models.ts +0 -21
- package/src/commands/proxy.ts +0 -9
- package/src/commands/tokens.ts +0 -82
- package/src/index.ts +0 -197
- package/src/managers/BlockManager.ts +0 -126
- package/src/managers/ChatManager.ts +0 -755
- package/src/managers/ChunkManager.ts +0 -31
- package/src/managers/CodeManager.ts +0 -226
- package/src/managers/CommitManager.ts +0 -71
- package/src/managers/DocsManager.ts +0 -101
- package/src/managers/InitManager.ts +0 -263
- package/src/managers/ProxyManager.ts +0 -240
- package/src/managers/ReviewManager.ts +0 -154
- package/src/managers/ShellManager.ts +0 -172
- package/src/managers/StreamManager.ts +0 -353
- package/src/managers/UnitTestManager.ts +0 -293
- package/src/utils/config_utils.ts +0 -271
- package/src/utils/git_utils.ts +0 -230
- package/src/utils/model_utils.ts +0 -3
- package/src/utils/prompt_utils.ts +0 -375
- package/src/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
- package/src/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
- package/src/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
- package/src/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
- package/src/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
- package/src/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
- package/src/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
- package/src/utils/prompts/SPECIAL_FILES.md +0 -66
- package/src/utils/prompts/index.ts +0 -37
- package/src/utils/string_utils.ts +0 -552
- package/src/utils/types.ts +0 -127
- package/tests/commands/generate/unit_tests.test.ts +0 -27
- package/tests/utils/git_utils.test.ts +0 -116
- package/tests/utils/model_utils.test.ts +0 -27
- package/tests/utils/prompt_utils.test.ts +0 -33
- package/tests/utils/string_utils.test.ts +0 -560
- package/tsconfig.json +0 -14
- package/yarn.lock +0 -5823
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export interface SqlConnection {
|
|
2
|
+
readonly run: (sql: string, parameters?: readonly unknown[]) => Promise<unknown>;
|
|
3
|
+
readonly get: (sql: string, parameters?: readonly unknown[]) => Promise<unknown>;
|
|
4
|
+
readonly all: (sql: string, parameters?: readonly unknown[]) => Promise<readonly unknown[]>;
|
|
5
|
+
}
|
|
6
|
+
export interface EventRow {
|
|
7
|
+
readonly sequence: number;
|
|
8
|
+
readonly type: string;
|
|
9
|
+
readonly runId: string;
|
|
10
|
+
readonly commandId: string;
|
|
11
|
+
readonly recordedAt: string;
|
|
12
|
+
readonly request: string;
|
|
13
|
+
readonly payload: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RunRow {
|
|
16
|
+
readonly runId: string;
|
|
17
|
+
readonly status: string;
|
|
18
|
+
readonly revision: number;
|
|
19
|
+
readonly workflow: string;
|
|
20
|
+
readonly pausedFrom: string | null;
|
|
21
|
+
readonly gates: string;
|
|
22
|
+
readonly sequence: number;
|
|
23
|
+
}
|
|
24
|
+
export interface CommandRow {
|
|
25
|
+
readonly commandId: string;
|
|
26
|
+
readonly request: string;
|
|
27
|
+
readonly sequence: number;
|
|
28
|
+
}
|
|
29
|
+
export interface IntentRow {
|
|
30
|
+
readonly operationId: string;
|
|
31
|
+
readonly kind: string;
|
|
32
|
+
readonly runId: string;
|
|
33
|
+
readonly createdSequence: number;
|
|
34
|
+
}
|
|
35
|
+
export interface OutboxRow extends IntentRow {
|
|
36
|
+
readonly releasedSequence: number | null;
|
|
37
|
+
}
|
|
38
|
+
export interface DefinitionRow {
|
|
39
|
+
readonly pin: string;
|
|
40
|
+
readonly manifest: string;
|
|
41
|
+
}
|
|
42
|
+
export interface DeliveryRow {
|
|
43
|
+
readonly effectId: string;
|
|
44
|
+
readonly operationId: string;
|
|
45
|
+
readonly inputDigest: string;
|
|
46
|
+
readonly stagedSequence: number;
|
|
47
|
+
readonly outcome: string | null;
|
|
48
|
+
readonly receipt: string | null;
|
|
49
|
+
}
|
|
50
|
+
export interface AttemptRow extends DeliveryRow {
|
|
51
|
+
readonly purpose: string;
|
|
52
|
+
readonly leaseGeneration: number | null;
|
|
53
|
+
readonly epoch: number | null;
|
|
54
|
+
}
|
|
55
|
+
export interface AuthoritySnapshot {
|
|
56
|
+
readonly definitions: readonly DefinitionRow[];
|
|
57
|
+
readonly events: readonly EventRow[];
|
|
58
|
+
readonly runs: readonly RunRow[];
|
|
59
|
+
readonly commands: readonly CommandRow[];
|
|
60
|
+
readonly outbox: readonly OutboxRow[];
|
|
61
|
+
}
|
|
62
|
+
export interface DomainSnapshot extends AuthoritySnapshot {
|
|
63
|
+
readonly deliveries: readonly DeliveryRow[];
|
|
64
|
+
}
|
|
65
|
+
export declare const attemptColumns = "d.effect_id, d.operation_id, d.input_digest, d.staged_sequence, d.outcome, d.receipt, coalesce(a.purpose, 'dispatch') AS purpose, a.lease_generation, a.authority_epoch";
|
|
66
|
+
export declare const attemptSource = "deliveries d LEFT JOIN dispatch_attempts a ON a.effect_id = d.effect_id";
|
|
67
|
+
export declare function loadAttempts(connection: SqlConnection): Promise<readonly AttemptRow[]>;
|
|
68
|
+
export declare function attemptRow(row: unknown): AttemptRow;
|
|
69
|
+
export type ProjectionRows = Omit<AuthoritySnapshot, "events">;
|
|
70
|
+
export declare function loadSnapshot(connection: SqlConnection): Promise<DomainSnapshot>;
|
|
71
|
+
export declare function loadBaseline(connection: SqlConnection): Promise<AuthoritySnapshot>;
|
|
72
|
+
export declare function loadEvents(connection: SqlConnection): Promise<readonly EventRow[]>;
|
|
73
|
+
export declare function loadDeliveries(connection: SqlConnection): Promise<readonly DeliveryRow[]>;
|
|
74
|
+
export declare function projectionRows(connection: SqlConnection): Promise<ProjectionRows>;
|
|
75
|
+
export declare function latestSequence(connection: SqlConnection): Promise<number>;
|
|
76
|
+
export declare function definitionRow(row: unknown): DefinitionRow;
|
|
77
|
+
export declare function eventRow(row: unknown): EventRow;
|
|
78
|
+
export declare function runRow(row: unknown): RunRow;
|
|
79
|
+
export declare function commandRow(row: unknown): CommandRow;
|
|
80
|
+
export declare function outboxRow(row: unknown): OutboxRow;
|
|
81
|
+
export declare function deliveryRow(row: unknown): DeliveryRow;
|
|
82
|
+
export declare function text(row: unknown, name: string): string;
|
|
83
|
+
export declare function optionalText(row: unknown, name: string): string | null;
|
|
84
|
+
export declare function integer(row: unknown, name: string): number;
|
|
85
|
+
export declare function optionalInteger(row: unknown, name: string): number | null;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
export const attemptColumns = "d.effect_id, d.operation_id, d.input_digest, d.staged_sequence, d.outcome, d.receipt, coalesce(a.purpose, 'dispatch') AS purpose, a.lease_generation, a.authority_epoch";
|
|
2
|
+
export const attemptSource = "deliveries d LEFT JOIN dispatch_attempts a ON a.effect_id = d.effect_id";
|
|
3
|
+
export async function loadAttempts(connection) {
|
|
4
|
+
return (await connection.all(`SELECT ${attemptColumns} FROM ${attemptSource} ORDER BY d.staged_sequence, d.rowid`)).map(attemptRow);
|
|
5
|
+
}
|
|
6
|
+
export function attemptRow(row) {
|
|
7
|
+
return {
|
|
8
|
+
...deliveryRow(row),
|
|
9
|
+
purpose: text(row, "purpose"),
|
|
10
|
+
leaseGeneration: optionalInteger(row, "lease_generation"),
|
|
11
|
+
epoch: optionalInteger(row, "authority_epoch"),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export async function loadSnapshot(connection) {
|
|
15
|
+
return {
|
|
16
|
+
...(await loadBaseline(connection)),
|
|
17
|
+
deliveries: await loadDeliveries(connection),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export async function loadBaseline(connection) {
|
|
21
|
+
return {
|
|
22
|
+
...(await projectionRows(connection)),
|
|
23
|
+
events: await loadEvents(connection),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export async function loadEvents(connection) {
|
|
27
|
+
return (await connection.all("SELECT sequence, type, run_id, command_id, recorded_at, request, payload FROM events ORDER BY sequence")).map(eventRow);
|
|
28
|
+
}
|
|
29
|
+
export async function loadDeliveries(connection) {
|
|
30
|
+
return (await connection.all("SELECT effect_id, operation_id, input_digest, staged_sequence, outcome, receipt FROM deliveries ORDER BY staged_sequence, rowid")).map(deliveryRow);
|
|
31
|
+
}
|
|
32
|
+
export async function projectionRows(connection) {
|
|
33
|
+
const rows = (sql) => connection.all(sql);
|
|
34
|
+
return {
|
|
35
|
+
definitions: (await rows("SELECT pin, manifest FROM definitions ORDER BY pin")).map(definitionRow),
|
|
36
|
+
runs: (await rows("SELECT run_id, status, revision, workflow, paused_from, gates, sequence FROM runs ORDER BY run_id")).map(runRow),
|
|
37
|
+
commands: (await rows("SELECT command_id, request, sequence FROM commands ORDER BY sequence")).map(commandRow),
|
|
38
|
+
outbox: (await rows("SELECT operation_id, kind, run_id, created_sequence, released_sequence FROM outbox ORDER BY created_sequence, rowid")).map(outboxRow),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export async function latestSequence(connection) {
|
|
42
|
+
return integer(await connection.get("SELECT coalesce(max(sequence), 0) AS sequence FROM events"), "sequence");
|
|
43
|
+
}
|
|
44
|
+
export function definitionRow(row) {
|
|
45
|
+
return { pin: text(row, "pin"), manifest: text(row, "manifest") };
|
|
46
|
+
}
|
|
47
|
+
export function eventRow(row) {
|
|
48
|
+
return {
|
|
49
|
+
sequence: integer(row, "sequence"),
|
|
50
|
+
type: text(row, "type"),
|
|
51
|
+
runId: text(row, "run_id"),
|
|
52
|
+
commandId: text(row, "command_id"),
|
|
53
|
+
recordedAt: text(row, "recorded_at"),
|
|
54
|
+
request: text(row, "request"),
|
|
55
|
+
payload: text(row, "payload"),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function runRow(row) {
|
|
59
|
+
return {
|
|
60
|
+
runId: text(row, "run_id"),
|
|
61
|
+
status: text(row, "status"),
|
|
62
|
+
revision: integer(row, "revision"),
|
|
63
|
+
workflow: text(row, "workflow"),
|
|
64
|
+
pausedFrom: optionalText(row, "paused_from"),
|
|
65
|
+
gates: text(row, "gates"),
|
|
66
|
+
sequence: integer(row, "sequence"),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function commandRow(row) {
|
|
70
|
+
return {
|
|
71
|
+
commandId: text(row, "command_id"),
|
|
72
|
+
request: text(row, "request"),
|
|
73
|
+
sequence: integer(row, "sequence"),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function outboxRow(row) {
|
|
77
|
+
return {
|
|
78
|
+
operationId: text(row, "operation_id"),
|
|
79
|
+
kind: text(row, "kind"),
|
|
80
|
+
runId: text(row, "run_id"),
|
|
81
|
+
createdSequence: integer(row, "created_sequence"),
|
|
82
|
+
releasedSequence: optionalInteger(row, "released_sequence"),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export function deliveryRow(row) {
|
|
86
|
+
return {
|
|
87
|
+
effectId: text(row, "effect_id"),
|
|
88
|
+
operationId: text(row, "operation_id"),
|
|
89
|
+
inputDigest: text(row, "input_digest"),
|
|
90
|
+
stagedSequence: integer(row, "staged_sequence"),
|
|
91
|
+
outcome: optionalText(row, "outcome"),
|
|
92
|
+
receipt: optionalText(row, "receipt"),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function column(row, field) {
|
|
96
|
+
const { name, accepts } = field;
|
|
97
|
+
const value = Reflect.get(Object(row), name);
|
|
98
|
+
if (!accepts(value))
|
|
99
|
+
throw new Error(`invalid-column: ${name}`);
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
function isText(value) {
|
|
103
|
+
return typeof value === "string";
|
|
104
|
+
}
|
|
105
|
+
function isOptionalText(value) {
|
|
106
|
+
return value === null || typeof value === "string";
|
|
107
|
+
}
|
|
108
|
+
function isSafeInteger(value) {
|
|
109
|
+
if (typeof value === "bigint")
|
|
110
|
+
return (value >= BigInt(Number.MIN_SAFE_INTEGER) &&
|
|
111
|
+
value <= BigInt(Number.MAX_SAFE_INTEGER));
|
|
112
|
+
return Number.isSafeInteger(value);
|
|
113
|
+
}
|
|
114
|
+
function isOptionalSafeInteger(value) {
|
|
115
|
+
return value === null || isSafeInteger(value);
|
|
116
|
+
}
|
|
117
|
+
export function text(row, name) {
|
|
118
|
+
return column(row, { name, accepts: isText });
|
|
119
|
+
}
|
|
120
|
+
export function optionalText(row, name) {
|
|
121
|
+
return column(row, { name, accepts: isOptionalText });
|
|
122
|
+
}
|
|
123
|
+
export function integer(row, name) {
|
|
124
|
+
return Number(column(row, { name, accepts: isSafeInteger }));
|
|
125
|
+
}
|
|
126
|
+
export function optionalInteger(row, name) {
|
|
127
|
+
const value = column(row, { name, accepts: isOptionalSafeInteger });
|
|
128
|
+
return value === null ? null : Number(value);
|
|
129
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type SqlConnection } from "./domain-rows.ts";
|
|
2
|
+
export declare const baselineVersion = 1;
|
|
3
|
+
export declare const adoptedVersion = 2;
|
|
4
|
+
export declare const decidedVersion = 3;
|
|
5
|
+
export declare const currentVersion = 4;
|
|
6
|
+
export declare const baselineSchema = "\nCREATE TABLE schema_migrations (\n version INTEGER PRIMARY KEY,\n checksum TEXT NOT NULL\n) STRICT;\nCREATE TABLE events (\n sequence INTEGER PRIMARY KEY,\n type TEXT NOT NULL,\n run_id TEXT NOT NULL,\n command_id TEXT NOT NULL UNIQUE,\n recorded_at TEXT NOT NULL,\n request TEXT NOT NULL,\n payload TEXT NOT NULL\n) STRICT;\nCREATE TABLE definitions (\n pin TEXT PRIMARY KEY,\n manifest TEXT NOT NULL\n) STRICT;\nCREATE TABLE runs (\n run_id TEXT PRIMARY KEY,\n status TEXT NOT NULL,\n revision INTEGER NOT NULL,\n workflow TEXT NOT NULL REFERENCES definitions (pin) DEFERRABLE INITIALLY DEFERRED,\n paused_from TEXT,\n gates TEXT NOT NULL,\n sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\nCREATE TABLE commands (\n command_id TEXT PRIMARY KEY,\n request TEXT NOT NULL,\n sequence INTEGER NOT NULL UNIQUE REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\nCREATE TABLE outbox (\n operation_id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,\n created_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,\n released_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED\n) STRICT;\n";
|
|
7
|
+
export type SchemaRefusal = {
|
|
8
|
+
readonly kind: "refused";
|
|
9
|
+
readonly reason: "unsupported-schema" | "foreign-database" | "schema-mismatch";
|
|
10
|
+
readonly detail: string;
|
|
11
|
+
};
|
|
12
|
+
export type SchemaState = {
|
|
13
|
+
readonly kind: "new";
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: "baseline";
|
|
16
|
+
} | {
|
|
17
|
+
readonly kind: "adopted";
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: "decided";
|
|
20
|
+
} | {
|
|
21
|
+
readonly kind: "current";
|
|
22
|
+
} | SchemaRefusal;
|
|
23
|
+
export declare function inspectSchema(connection: SqlConnection): Promise<SchemaState>;
|
|
24
|
+
export declare function createSchema(connection: SqlConnection): Promise<void>;
|
|
25
|
+
export declare function upgradeSchema(connection: SqlConnection, version: number): Promise<void>;
|
|
26
|
+
export declare function adoptSchema(connection: SqlConnection, pendingSequence: number | null): Promise<void>;
|
|
27
|
+
export interface AuthorityIdentity {
|
|
28
|
+
readonly actorId: string;
|
|
29
|
+
readonly pendingAdoption: number | null;
|
|
30
|
+
}
|
|
31
|
+
export declare function backupInto(connection: SqlConnection, target: string): Promise<void>;
|
|
32
|
+
export declare function authorityIdentity(connection: SqlConnection): Promise<AuthorityIdentity>;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { DatabaseSync } from "node:sqlite";
|
|
3
|
+
import { integer, optionalInteger, optionalText, text, } from "./domain-rows.js";
|
|
4
|
+
import { effectSchema } from "./effect-schema.js";
|
|
5
|
+
export const baselineVersion = 1;
|
|
6
|
+
export const adoptedVersion = 2;
|
|
7
|
+
export const decidedVersion = 3;
|
|
8
|
+
export const currentVersion = 4;
|
|
9
|
+
export const baselineSchema = `
|
|
10
|
+
CREATE TABLE schema_migrations (
|
|
11
|
+
version INTEGER PRIMARY KEY,
|
|
12
|
+
checksum TEXT NOT NULL
|
|
13
|
+
) STRICT;
|
|
14
|
+
CREATE TABLE events (
|
|
15
|
+
sequence INTEGER PRIMARY KEY,
|
|
16
|
+
type TEXT NOT NULL,
|
|
17
|
+
run_id TEXT NOT NULL,
|
|
18
|
+
command_id TEXT NOT NULL UNIQUE,
|
|
19
|
+
recorded_at TEXT NOT NULL,
|
|
20
|
+
request TEXT NOT NULL,
|
|
21
|
+
payload TEXT NOT NULL
|
|
22
|
+
) STRICT;
|
|
23
|
+
CREATE TABLE definitions (
|
|
24
|
+
pin TEXT PRIMARY KEY,
|
|
25
|
+
manifest TEXT NOT NULL
|
|
26
|
+
) STRICT;
|
|
27
|
+
CREATE TABLE runs (
|
|
28
|
+
run_id TEXT PRIMARY KEY,
|
|
29
|
+
status TEXT NOT NULL,
|
|
30
|
+
revision INTEGER NOT NULL,
|
|
31
|
+
workflow TEXT NOT NULL REFERENCES definitions (pin) DEFERRABLE INITIALLY DEFERRED,
|
|
32
|
+
paused_from TEXT,
|
|
33
|
+
gates TEXT NOT NULL,
|
|
34
|
+
sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
|
|
35
|
+
) STRICT;
|
|
36
|
+
CREATE TABLE commands (
|
|
37
|
+
command_id TEXT PRIMARY KEY,
|
|
38
|
+
request TEXT NOT NULL,
|
|
39
|
+
sequence INTEGER NOT NULL UNIQUE REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
|
|
40
|
+
) STRICT;
|
|
41
|
+
CREATE TABLE outbox (
|
|
42
|
+
operation_id TEXT PRIMARY KEY,
|
|
43
|
+
kind TEXT NOT NULL,
|
|
44
|
+
run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
|
|
45
|
+
created_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
|
|
46
|
+
released_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED
|
|
47
|
+
) STRICT;
|
|
48
|
+
`;
|
|
49
|
+
const adoption = `
|
|
50
|
+
CREATE TABLE authority_identity (
|
|
51
|
+
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
|
|
52
|
+
actor_id TEXT NOT NULL,
|
|
53
|
+
adoption_sequence INTEGER
|
|
54
|
+
) STRICT;
|
|
55
|
+
CREATE TABLE deliveries (
|
|
56
|
+
effect_id TEXT PRIMARY KEY,
|
|
57
|
+
operation_id TEXT NOT NULL REFERENCES outbox (operation_id) DEFERRABLE INITIALLY DEFERRED,
|
|
58
|
+
input_digest TEXT NOT NULL,
|
|
59
|
+
staged_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
|
|
60
|
+
outcome TEXT,
|
|
61
|
+
receipt TEXT
|
|
62
|
+
) STRICT;
|
|
63
|
+
CREATE UNIQUE INDEX deliveries_open ON deliveries (operation_id) WHERE outcome IS NULL;
|
|
64
|
+
`;
|
|
65
|
+
const decisions = `
|
|
66
|
+
CREATE TABLE gates (
|
|
67
|
+
run_id TEXT NOT NULL REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
|
|
68
|
+
gate_id TEXT NOT NULL,
|
|
69
|
+
kind TEXT NOT NULL,
|
|
70
|
+
label INTEGER,
|
|
71
|
+
subject TEXT,
|
|
72
|
+
prompt TEXT,
|
|
73
|
+
expires_at TEXT,
|
|
74
|
+
generation INTEGER NOT NULL,
|
|
75
|
+
revision INTEGER NOT NULL,
|
|
76
|
+
wait TEXT NOT NULL,
|
|
77
|
+
decision TEXT,
|
|
78
|
+
answer TEXT,
|
|
79
|
+
decided_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
|
|
80
|
+
opened_sequence INTEGER NOT NULL REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
|
|
81
|
+
continuation TEXT,
|
|
82
|
+
PRIMARY KEY (run_id, gate_id)
|
|
83
|
+
) STRICT;
|
|
84
|
+
CREATE TABLE run_details (
|
|
85
|
+
run_id TEXT PRIMARY KEY REFERENCES runs (run_id) DEFERRABLE INITIALLY DEFERRED,
|
|
86
|
+
generation INTEGER NOT NULL,
|
|
87
|
+
submission TEXT,
|
|
88
|
+
input TEXT,
|
|
89
|
+
resolver TEXT,
|
|
90
|
+
condition TEXT,
|
|
91
|
+
reason TEXT,
|
|
92
|
+
evidence TEXT,
|
|
93
|
+
retry_at TEXT,
|
|
94
|
+
attempt INTEGER,
|
|
95
|
+
attempt_limit INTEGER,
|
|
96
|
+
observed_sequence INTEGER REFERENCES events (sequence) DEFERRABLE INITIALLY DEFERRED,
|
|
97
|
+
observed_at TEXT,
|
|
98
|
+
observed_operation TEXT
|
|
99
|
+
) STRICT;
|
|
100
|
+
CREATE TABLE documents (
|
|
101
|
+
digest TEXT PRIMARY KEY,
|
|
102
|
+
body TEXT NOT NULL
|
|
103
|
+
) STRICT;
|
|
104
|
+
`;
|
|
105
|
+
const schemas = [baselineSchema, adoption, decisions, effectSchema];
|
|
106
|
+
const checksums = schemas.map((schema) => createHash("sha256").update(schema).digest("hex"));
|
|
107
|
+
const versionKinds = ["baseline", "adopted", "decided", "current"];
|
|
108
|
+
export async function inspectSchema(connection) {
|
|
109
|
+
const version = integer(await connection.get("PRAGMA user_version"), "user_version");
|
|
110
|
+
const detail = String(version);
|
|
111
|
+
if (version === 0)
|
|
112
|
+
return emptyDatabase(connection, detail);
|
|
113
|
+
const kind = versionKinds[version - 1];
|
|
114
|
+
if (kind === undefined)
|
|
115
|
+
return { kind: "refused", reason: "unsupported-schema", detail };
|
|
116
|
+
const intact = (await structure(connection)) ===
|
|
117
|
+
expectedStructure(schemas.slice(0, version)) &&
|
|
118
|
+
(await recordedChecksums(connection)) ===
|
|
119
|
+
JSON.stringify(checksums.slice(0, version));
|
|
120
|
+
if (!intact)
|
|
121
|
+
return { kind: "refused", reason: "schema-mismatch", detail };
|
|
122
|
+
return { kind };
|
|
123
|
+
}
|
|
124
|
+
async function emptyDatabase(connection, detail) {
|
|
125
|
+
const objects = integer(await connection.get("SELECT count(*) AS count FROM sqlite_schema"), "count");
|
|
126
|
+
return objects === 0
|
|
127
|
+
? { kind: "new" }
|
|
128
|
+
: { kind: "refused", reason: "foreign-database", detail };
|
|
129
|
+
}
|
|
130
|
+
export async function createSchema(connection) {
|
|
131
|
+
await execute(connection, baselineSchema);
|
|
132
|
+
await recordVersion(connection, baselineVersion);
|
|
133
|
+
await adoptSchema(connection, null);
|
|
134
|
+
await upgradeSchema(connection, decidedVersion);
|
|
135
|
+
await upgradeSchema(connection, currentVersion);
|
|
136
|
+
}
|
|
137
|
+
export async function upgradeSchema(connection, version) {
|
|
138
|
+
await execute(connection, schemas[version - 1] ?? "");
|
|
139
|
+
await recordVersion(connection, version);
|
|
140
|
+
await connection.run(`PRAGMA user_version = ${String(version)}`);
|
|
141
|
+
}
|
|
142
|
+
export async function adoptSchema(connection, pendingSequence) {
|
|
143
|
+
await execute(connection, adoption);
|
|
144
|
+
await recordVersion(connection, adoptedVersion);
|
|
145
|
+
await connection.run("INSERT INTO authority_identity (singleton, actor_id, adoption_sequence) VALUES (1, ?, ?)", [randomUUID(), pendingSequence]);
|
|
146
|
+
await connection.run(`PRAGMA user_version = ${String(adoptedVersion)}`);
|
|
147
|
+
}
|
|
148
|
+
export async function backupInto(connection, target) {
|
|
149
|
+
await connection.run("VACUUM INTO ?", [target]);
|
|
150
|
+
}
|
|
151
|
+
export async function authorityIdentity(connection) {
|
|
152
|
+
const row = await connection.get("SELECT actor_id, adoption_sequence FROM authority_identity WHERE singleton = 1");
|
|
153
|
+
return {
|
|
154
|
+
actorId: text(row, "actor_id"),
|
|
155
|
+
pendingAdoption: optionalInteger(row, "adoption_sequence"),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
async function execute(connection, schema) {
|
|
159
|
+
for (const statement of statements(schema))
|
|
160
|
+
await connection.run(statement);
|
|
161
|
+
}
|
|
162
|
+
function recordVersion(connection, version) {
|
|
163
|
+
return connection.run("INSERT INTO schema_migrations (version, checksum) VALUES (?, ?)", [version, checksums[version - 1]]);
|
|
164
|
+
}
|
|
165
|
+
function statements(schema) {
|
|
166
|
+
return schema
|
|
167
|
+
.split(";")
|
|
168
|
+
.map((statement) => statement.trim())
|
|
169
|
+
.filter((statement) => statement.length > 0);
|
|
170
|
+
}
|
|
171
|
+
const structureQuery = "SELECT type, name, tbl_name, sql FROM sqlite_schema WHERE type IN ('table', 'index') AND tbl_name NOT LIKE 'solid\\_%' ESCAPE '\\' ORDER BY type, name";
|
|
172
|
+
function structureOf(rows) {
|
|
173
|
+
return JSON.stringify(rows.map((row) => [
|
|
174
|
+
text(row, "type"),
|
|
175
|
+
text(row, "name"),
|
|
176
|
+
text(row, "tbl_name"),
|
|
177
|
+
optionalText(row, "sql"),
|
|
178
|
+
]));
|
|
179
|
+
}
|
|
180
|
+
async function structure(connection) {
|
|
181
|
+
return structureOf(await connection.all(structureQuery));
|
|
182
|
+
}
|
|
183
|
+
function expectedStructure(schemas) {
|
|
184
|
+
const memory = new DatabaseSync(":memory:");
|
|
185
|
+
for (const schema of schemas)
|
|
186
|
+
memory.exec(schema);
|
|
187
|
+
const value = structureOf(memory.prepare(structureQuery).all());
|
|
188
|
+
memory.close();
|
|
189
|
+
return value;
|
|
190
|
+
}
|
|
191
|
+
async function recordedChecksums(connection) {
|
|
192
|
+
return JSON.stringify((await connection.all("SELECT checksum FROM schema_migrations ORDER BY version")).map((row) => text(row, "checksum")));
|
|
193
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SqlConnection } from "./domain-rows.ts";
|
|
2
|
+
import { type EffectRows } from "./effect-rows.ts";
|
|
3
|
+
import { type Statement } from "./statements.ts";
|
|
4
|
+
export declare function effectStatements(rows: EffectRows): readonly Statement[];
|
|
5
|
+
export declare function persistEffects(connection: SqlConnection, rows: EffectRows): Promise<void>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { budgetColumns, evidenceColumns, leaseColumns, operationColumns, stopColumns, } from "./effect-rows.js";
|
|
2
|
+
import { upsert } from "./statements.js";
|
|
3
|
+
const budgetUpsert = upsert({
|
|
4
|
+
table: "run_budgets",
|
|
5
|
+
names: budgetColumns.split(", "),
|
|
6
|
+
key: 1,
|
|
7
|
+
});
|
|
8
|
+
const operationUpsert = upsert({
|
|
9
|
+
table: "operations",
|
|
10
|
+
names: operationColumns.split(", "),
|
|
11
|
+
key: 1,
|
|
12
|
+
});
|
|
13
|
+
const leaseUpsert = upsert({
|
|
14
|
+
table: "leases",
|
|
15
|
+
names: leaseColumns.split(", "),
|
|
16
|
+
key: 1,
|
|
17
|
+
});
|
|
18
|
+
const stopUpsert = upsert({
|
|
19
|
+
table: "stopped_operations",
|
|
20
|
+
names: stopColumns.split(", "),
|
|
21
|
+
key: 1,
|
|
22
|
+
});
|
|
23
|
+
const evidenceInsert = `INSERT INTO effect_evidence (${evidenceColumns}) VALUES (?, ?, ?, ?, ?)`;
|
|
24
|
+
function budgetParameters(row) {
|
|
25
|
+
return [
|
|
26
|
+
row.runId,
|
|
27
|
+
row.effectLimit,
|
|
28
|
+
row.spent,
|
|
29
|
+
row.capabilities,
|
|
30
|
+
row.exhaustedSequence,
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
function operationParameters(row) {
|
|
34
|
+
return [
|
|
35
|
+
row.operationId,
|
|
36
|
+
row.runId,
|
|
37
|
+
row.capability,
|
|
38
|
+
row.method,
|
|
39
|
+
row.target,
|
|
40
|
+
row.payload,
|
|
41
|
+
row.inputDigest,
|
|
42
|
+
row.units,
|
|
43
|
+
row.leaseKey,
|
|
44
|
+
row.recoveryLimit,
|
|
45
|
+
row.status,
|
|
46
|
+
row.reason,
|
|
47
|
+
row.attempts,
|
|
48
|
+
row.receipt,
|
|
49
|
+
row.worker,
|
|
50
|
+
row.result,
|
|
51
|
+
row.requestedSequence,
|
|
52
|
+
row.waitSequence,
|
|
53
|
+
row.settledSequence,
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
function leaseParameters(row) {
|
|
57
|
+
return [
|
|
58
|
+
row.resourceKey,
|
|
59
|
+
row.operationId,
|
|
60
|
+
row.generation,
|
|
61
|
+
row.expiresAt,
|
|
62
|
+
row.state,
|
|
63
|
+
row.grantedSequence,
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
function evidenceParameters(row) {
|
|
67
|
+
return [
|
|
68
|
+
row.sequence,
|
|
69
|
+
row.runId,
|
|
70
|
+
row.operationId,
|
|
71
|
+
row.disposition,
|
|
72
|
+
row.reason,
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
function stopParameters(row) {
|
|
76
|
+
return [row.operationId, row.runId, row.sequence];
|
|
77
|
+
}
|
|
78
|
+
export function effectStatements(rows) {
|
|
79
|
+
return [
|
|
80
|
+
...rows.budgets.map((row) => ({
|
|
81
|
+
sql: budgetUpsert,
|
|
82
|
+
parameters: budgetParameters(row),
|
|
83
|
+
})),
|
|
84
|
+
...rows.operations.map((row) => ({
|
|
85
|
+
sql: operationUpsert,
|
|
86
|
+
parameters: operationParameters(row),
|
|
87
|
+
})),
|
|
88
|
+
...rows.leases.map((row) => ({
|
|
89
|
+
sql: leaseUpsert,
|
|
90
|
+
parameters: leaseParameters(row),
|
|
91
|
+
})),
|
|
92
|
+
...rows.evidence.map((row) => ({
|
|
93
|
+
sql: evidenceInsert,
|
|
94
|
+
parameters: evidenceParameters(row),
|
|
95
|
+
})),
|
|
96
|
+
...rows.stops.map((row) => ({
|
|
97
|
+
sql: stopUpsert,
|
|
98
|
+
parameters: stopParameters(row),
|
|
99
|
+
})),
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
export async function persistEffects(connection, rows) {
|
|
103
|
+
for (const statement of effectStatements(rows))
|
|
104
|
+
await connection.run(statement.sql, statement.parameters);
|
|
105
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type SqlConnection } from "./domain-rows.ts";
|
|
2
|
+
export interface BudgetRow {
|
|
3
|
+
readonly runId: string;
|
|
4
|
+
readonly effectLimit: number;
|
|
5
|
+
readonly spent: number;
|
|
6
|
+
readonly capabilities: string;
|
|
7
|
+
readonly exhaustedSequence: number | null;
|
|
8
|
+
}
|
|
9
|
+
export interface OperationRow {
|
|
10
|
+
readonly operationId: string;
|
|
11
|
+
readonly runId: string;
|
|
12
|
+
readonly capability: string;
|
|
13
|
+
readonly method: string;
|
|
14
|
+
readonly target: string;
|
|
15
|
+
readonly payload: string;
|
|
16
|
+
readonly inputDigest: string;
|
|
17
|
+
readonly units: number;
|
|
18
|
+
readonly leaseKey: string;
|
|
19
|
+
readonly recoveryLimit: number;
|
|
20
|
+
readonly status: string;
|
|
21
|
+
readonly reason: string | null;
|
|
22
|
+
readonly attempts: number;
|
|
23
|
+
readonly receipt: string | null;
|
|
24
|
+
readonly worker: string | null;
|
|
25
|
+
readonly result: string | null;
|
|
26
|
+
readonly requestedSequence: number;
|
|
27
|
+
readonly waitSequence: number | null;
|
|
28
|
+
readonly settledSequence: number | null;
|
|
29
|
+
}
|
|
30
|
+
export interface LeaseRow {
|
|
31
|
+
readonly resourceKey: string;
|
|
32
|
+
readonly operationId: string;
|
|
33
|
+
readonly generation: number;
|
|
34
|
+
readonly expiresAt: string;
|
|
35
|
+
readonly state: string;
|
|
36
|
+
readonly grantedSequence: number;
|
|
37
|
+
}
|
|
38
|
+
export interface EvidenceRow {
|
|
39
|
+
readonly sequence: number;
|
|
40
|
+
readonly runId: string;
|
|
41
|
+
readonly operationId: string;
|
|
42
|
+
readonly disposition: string;
|
|
43
|
+
readonly reason: string | null;
|
|
44
|
+
}
|
|
45
|
+
export interface StopRow {
|
|
46
|
+
readonly operationId: string;
|
|
47
|
+
readonly runId: string;
|
|
48
|
+
readonly sequence: number;
|
|
49
|
+
}
|
|
50
|
+
export interface EffectRows {
|
|
51
|
+
readonly budgets: readonly BudgetRow[];
|
|
52
|
+
readonly operations: readonly OperationRow[];
|
|
53
|
+
readonly leases: readonly LeaseRow[];
|
|
54
|
+
readonly evidence: readonly EvidenceRow[];
|
|
55
|
+
readonly stops: readonly StopRow[];
|
|
56
|
+
}
|
|
57
|
+
export declare const budgetColumns = "run_id, effect_limit, spent, capabilities, exhausted_sequence";
|
|
58
|
+
export declare const operationColumns = "operation_id, run_id, capability, method, target, payload, input_digest, units, lease_key, recovery_limit, status, reason, attempts, receipt, worker, result, requested_sequence, wait_sequence, settled_sequence";
|
|
59
|
+
export declare const leaseColumns = "resource_key, operation_id, generation, expires_at, state, granted_sequence";
|
|
60
|
+
export declare const evidenceColumns = "sequence, run_id, operation_id, disposition, reason";
|
|
61
|
+
export declare const stopColumns = "operation_id, run_id, sequence";
|
|
62
|
+
export declare function budgetRow(row: unknown): BudgetRow;
|
|
63
|
+
export declare function operationRow(row: unknown): OperationRow;
|
|
64
|
+
export declare function leaseRow(row: unknown): LeaseRow;
|
|
65
|
+
export declare function evidenceRow(row: unknown): EvidenceRow;
|
|
66
|
+
export declare function stopRow(row: unknown): StopRow;
|
|
67
|
+
export declare function loadEffects(connection: SqlConnection): Promise<EffectRows>;
|