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,256 @@
|
|
|
1
|
+
import { cancelled } from "./status-closure.js";
|
|
2
|
+
import { effectEvidence, effectRecovery, effectViews, uncertainEffect, } from "./status-effects.js";
|
|
3
|
+
import { assessed, inFlight, last, } from "./status-input.js";
|
|
4
|
+
export { unresolved, unresolvedEffects } from "./status-closure.js";
|
|
5
|
+
const details = new Map([
|
|
6
|
+
["awaiting-dispatch", "The run waits for its first dispatch."],
|
|
7
|
+
["dispatch-in-progress", "A dispatch of the run is in progress."],
|
|
8
|
+
[
|
|
9
|
+
"start-not-reported",
|
|
10
|
+
"The start is sent. The worker did not report its start.",
|
|
11
|
+
],
|
|
12
|
+
["in-progress", "The run is in work."],
|
|
13
|
+
[
|
|
14
|
+
"no-recent-observation",
|
|
15
|
+
"No observation arrived in the liveness period. Silence alone is not a failure.",
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
"delivery-outcome-unknown",
|
|
19
|
+
"A dispatch has no known result. The service reconciles it and tries it again a limited count of times in the same opening, and again at its next start.",
|
|
20
|
+
],
|
|
21
|
+
[
|
|
22
|
+
"effect-recovering",
|
|
23
|
+
"A protected effect has no known result. The service reconciles it before a new send.",
|
|
24
|
+
],
|
|
25
|
+
[
|
|
26
|
+
"effect-blocked",
|
|
27
|
+
"A protected effect has no known result and its recovery bound is reached. A person must examine the effect.",
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
"pinned-workflow-unavailable",
|
|
31
|
+
"The installed workflow is not the workflow that the run pinned. The continuation is not sent.",
|
|
32
|
+
],
|
|
33
|
+
["operator-pause", "The operator paused the run."],
|
|
34
|
+
["design-question", "A design question waits for an answer."],
|
|
35
|
+
["policy-approval", "A configured approval waits for a decision."],
|
|
36
|
+
["gate-open", "A gate of the run is open."],
|
|
37
|
+
[
|
|
38
|
+
"delivery-in-flight",
|
|
39
|
+
"The run is dropped. A dispatch is in flight and has no result yet.",
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
"stop-not-observed",
|
|
43
|
+
"The run is dropped. The stop of its dispatched work is not observed yet.",
|
|
44
|
+
],
|
|
45
|
+
[
|
|
46
|
+
"stop-unconfirmed",
|
|
47
|
+
"The run is dropped. The service asked for the stop of its work and got no confirmation. A person can confirm that the worker stopped.",
|
|
48
|
+
],
|
|
49
|
+
["world-run-failed", "The SDK run of this run failed in the World."],
|
|
50
|
+
[
|
|
51
|
+
"world-run-cancelled",
|
|
52
|
+
"The SDK run of this run was cancelled in the World. Cloving did not ask for that.",
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"world-run-waits-without-gate",
|
|
56
|
+
"The SDK run of this run ended and waits for a decision, and the run has no open gate and no continuation.",
|
|
57
|
+
],
|
|
58
|
+
[
|
|
59
|
+
"world-run-conflict",
|
|
60
|
+
"More than one SDK run has one operation of this run. Examine the World runs, then drop the run.",
|
|
61
|
+
],
|
|
62
|
+
["run-cancelled", "The run is dropped and has no work in progress."],
|
|
63
|
+
["run-completed", "The run completed."],
|
|
64
|
+
["run-failed", "The run failed."],
|
|
65
|
+
]);
|
|
66
|
+
function uncertain(operations) {
|
|
67
|
+
return operations.some((operation) => operation.releasedSequence === null &&
|
|
68
|
+
["failed", "stale-epoch"].includes(last(operation) ?? ""));
|
|
69
|
+
}
|
|
70
|
+
function blocked(operations) {
|
|
71
|
+
return operations.some((operation) => operation.releasedSequence === null && last(operation) === "blocked");
|
|
72
|
+
}
|
|
73
|
+
function exhausted(observation) {
|
|
74
|
+
return (observation.attempt !== null &&
|
|
75
|
+
observation.limit !== null &&
|
|
76
|
+
observation.attempt >= observation.limit);
|
|
77
|
+
}
|
|
78
|
+
const unknownEffect = assessed("uncertain-effect", {
|
|
79
|
+
code: "delivery-outcome-unknown",
|
|
80
|
+
nextAction: "reconcile-effect",
|
|
81
|
+
humanInputCanHelp: true,
|
|
82
|
+
});
|
|
83
|
+
function dispatched(operations) {
|
|
84
|
+
return operations.some((operation) => operation.outcomes.includes("sent"));
|
|
85
|
+
}
|
|
86
|
+
const unavailablePin = assessed("infrastructure-failure", {
|
|
87
|
+
code: "pinned-workflow-unavailable",
|
|
88
|
+
nextAction: "restore-pinned-workflow",
|
|
89
|
+
humanInputCanHelp: true,
|
|
90
|
+
});
|
|
91
|
+
function worldConflict(input) {
|
|
92
|
+
const code = input.details?.observation?.reason;
|
|
93
|
+
if (code !== "world-run-conflict")
|
|
94
|
+
return undefined;
|
|
95
|
+
return assessed("infrastructure-failure", {
|
|
96
|
+
code,
|
|
97
|
+
nextAction: null,
|
|
98
|
+
humanInputCanHelp: true,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function queued(input) {
|
|
102
|
+
if (uncertain(input.operations))
|
|
103
|
+
return unknownEffect;
|
|
104
|
+
if (blocked(input.operations))
|
|
105
|
+
return unavailablePin;
|
|
106
|
+
const conflict = worldConflict(input);
|
|
107
|
+
if (conflict !== undefined)
|
|
108
|
+
return conflict;
|
|
109
|
+
if (dispatched(input.operations))
|
|
110
|
+
return assessed("queued", {
|
|
111
|
+
code: "start-not-reported",
|
|
112
|
+
nextAction: null,
|
|
113
|
+
humanInputCanHelp: false,
|
|
114
|
+
});
|
|
115
|
+
const progress = inFlight(input.operations);
|
|
116
|
+
return assessed("queued", {
|
|
117
|
+
code: progress ? "dispatch-in-progress" : "awaiting-dispatch",
|
|
118
|
+
nextAction: progress ? null : "dispatch",
|
|
119
|
+
humanInputCanHelp: false,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const observedActions = {
|
|
123
|
+
"quota-wait": "recheck-eligibility",
|
|
124
|
+
"infrastructure-failure": "retry-operation",
|
|
125
|
+
"code-failure": "repair-code",
|
|
126
|
+
};
|
|
127
|
+
function observedWork(observation) {
|
|
128
|
+
const spent = observation.condition !== "quota-wait" && exhausted(observation);
|
|
129
|
+
return assessed(observation.condition, {
|
|
130
|
+
code: observation.reason,
|
|
131
|
+
nextAction: spent ? null : (observedActions[observation.condition] ?? null),
|
|
132
|
+
nextActionAt: spent ? null : observation.retryAt,
|
|
133
|
+
humanInputCanHelp: spent,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function running(input) {
|
|
137
|
+
if (uncertain(input.operations))
|
|
138
|
+
return unknownEffect;
|
|
139
|
+
const effect = uncertainEffect(input.effects);
|
|
140
|
+
if (effect !== undefined)
|
|
141
|
+
return effect;
|
|
142
|
+
if (blocked(input.operations))
|
|
143
|
+
return unavailablePin;
|
|
144
|
+
return worldConflict(input) ?? observed(input);
|
|
145
|
+
}
|
|
146
|
+
function observed(input) {
|
|
147
|
+
const observation = input.details?.observation ?? null;
|
|
148
|
+
if (observation !== null &&
|
|
149
|
+
Object.hasOwn(observedActions, observation.condition))
|
|
150
|
+
return observedWork(observation);
|
|
151
|
+
if (input.silent)
|
|
152
|
+
return assessed("working", {
|
|
153
|
+
code: "no-recent-observation",
|
|
154
|
+
nextAction: "reconcile-worker",
|
|
155
|
+
humanInputCanHelp: false,
|
|
156
|
+
});
|
|
157
|
+
return assessed("working", {
|
|
158
|
+
code: observation?.reason ?? "in-progress",
|
|
159
|
+
nextAction: null,
|
|
160
|
+
humanInputCanHelp: false,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
function waiting(input) {
|
|
164
|
+
const pending = input.gates.filter((gate) => gate.outcome === null);
|
|
165
|
+
const question = pending.some((gate) => gate.kind === "question");
|
|
166
|
+
const approval = pending.some((gate) => gate.kind === "approval");
|
|
167
|
+
if (!question && !approval)
|
|
168
|
+
return assessed("waiting-decision", {
|
|
169
|
+
code: "gate-open",
|
|
170
|
+
nextAction: null,
|
|
171
|
+
humanInputCanHelp: true,
|
|
172
|
+
});
|
|
173
|
+
return assessed("waiting-decision", {
|
|
174
|
+
code: question ? "design-question" : "policy-approval",
|
|
175
|
+
nextAction: question ? "answer" : "approve-or-deny",
|
|
176
|
+
humanInputCanHelp: true,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
function worldEnd(input) {
|
|
180
|
+
const reason = input.details?.observation?.reason ?? "";
|
|
181
|
+
return ["world-run-failed", "world-run-cancelled"].includes(reason)
|
|
182
|
+
? reason
|
|
183
|
+
: undefined;
|
|
184
|
+
}
|
|
185
|
+
const assessments = {
|
|
186
|
+
queued,
|
|
187
|
+
running,
|
|
188
|
+
waiting_gate: waiting,
|
|
189
|
+
paused: (input) => assessed("paused", {
|
|
190
|
+
code: worldEnd(input) ?? "operator-pause",
|
|
191
|
+
nextAction: "resume",
|
|
192
|
+
humanInputCanHelp: true,
|
|
193
|
+
}),
|
|
194
|
+
completed: () => assessed("completed", {
|
|
195
|
+
code: "run-completed",
|
|
196
|
+
nextAction: null,
|
|
197
|
+
humanInputCanHelp: false,
|
|
198
|
+
}),
|
|
199
|
+
failed: (input) => assessed("failed", {
|
|
200
|
+
code: input.details?.observation?.reason ?? "run-failed",
|
|
201
|
+
nextAction: null,
|
|
202
|
+
humanInputCanHelp: true,
|
|
203
|
+
}),
|
|
204
|
+
cancelled,
|
|
205
|
+
};
|
|
206
|
+
function evidence(observation) {
|
|
207
|
+
if (observation === null)
|
|
208
|
+
return [];
|
|
209
|
+
const reference = observation.evidence === null ? [] : [observation.evidence];
|
|
210
|
+
return [`event:${String(observation.sequence)}`, ...reference];
|
|
211
|
+
}
|
|
212
|
+
function reasonOf(assessment) {
|
|
213
|
+
return {
|
|
214
|
+
code: assessment.code,
|
|
215
|
+
detail: assessment.detail ??
|
|
216
|
+
details.get(assessment.code) ??
|
|
217
|
+
"A worker reported this reason.",
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
export function runView(input) {
|
|
221
|
+
const { run } = input;
|
|
222
|
+
const observation = input.details?.observation ?? null;
|
|
223
|
+
const assessment = assessments[run.status](input);
|
|
224
|
+
return {
|
|
225
|
+
runId: run.runId,
|
|
226
|
+
workflow: run.workflow,
|
|
227
|
+
state: run.status,
|
|
228
|
+
condition: assessment.condition,
|
|
229
|
+
revision: run.revision,
|
|
230
|
+
latestSequence: input.latestSequence,
|
|
231
|
+
pendingDecisions: input.gates
|
|
232
|
+
.filter((gate) => gate.outcome === null)
|
|
233
|
+
.map((gate) => `${gate.runId}/${gate.gateId}`),
|
|
234
|
+
reason: reasonOf(assessment),
|
|
235
|
+
evidence: [
|
|
236
|
+
...evidence(observation),
|
|
237
|
+
...effectEvidence(input.effectEvidence),
|
|
238
|
+
],
|
|
239
|
+
lastConfirmedObservation: observation === null
|
|
240
|
+
? null
|
|
241
|
+
: {
|
|
242
|
+
at: observation.recordedAt,
|
|
243
|
+
sequence: observation.sequence,
|
|
244
|
+
source: "worker",
|
|
245
|
+
},
|
|
246
|
+
recovery: effectRecovery(input.effects) ?? {
|
|
247
|
+
attempts: observation?.attempt ?? 0,
|
|
248
|
+
limit: observation?.limit ?? null,
|
|
249
|
+
},
|
|
250
|
+
budget: input.budget,
|
|
251
|
+
effects: effectViews(input.effects),
|
|
252
|
+
nextAction: assessment.nextAction,
|
|
253
|
+
nextActionAt: assessment.nextActionAt ?? null,
|
|
254
|
+
humanInputCanHelp: assessment.humanInputCanHelp,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface AttemptSummary {
|
|
2
|
+
readonly effectId: string;
|
|
3
|
+
readonly purpose: string;
|
|
4
|
+
readonly outcome: string | null;
|
|
5
|
+
readonly stagedSequence: number;
|
|
6
|
+
}
|
|
7
|
+
export interface StopSubject {
|
|
8
|
+
readonly operationId: string;
|
|
9
|
+
readonly kind: string;
|
|
10
|
+
readonly attempts: readonly AttemptSummary[];
|
|
11
|
+
readonly status: string | null;
|
|
12
|
+
readonly receipt: string | null;
|
|
13
|
+
readonly stopped: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type StopClass = "open" | "resolved" | "unknown" | "alive";
|
|
16
|
+
export declare function stopClasses(subjects: readonly StopSubject[]): ReadonlyMap<string, StopClass>;
|
|
17
|
+
export declare function stopCount(subject: StopSubject, cancelledSequence: number): number;
|
|
18
|
+
export interface StopRule {
|
|
19
|
+
readonly cancelledSequence: number;
|
|
20
|
+
readonly stopLimit: number;
|
|
21
|
+
readonly stopSupported: boolean;
|
|
22
|
+
readonly opening: boolean;
|
|
23
|
+
readonly rejected: ReadonlySet<string>;
|
|
24
|
+
}
|
|
25
|
+
export interface StopAttempt {
|
|
26
|
+
readonly operationId: string;
|
|
27
|
+
readonly kind: string;
|
|
28
|
+
readonly purpose: "stop" | "reconcile";
|
|
29
|
+
}
|
|
30
|
+
export declare function stopAttempts(subjects: readonly StopSubject[], rule: StopRule): readonly StopAttempt[];
|
|
31
|
+
export type Closure = "cancelled" | "stop-not-observed" | "stop-unconfirmed";
|
|
32
|
+
export interface RunClosure {
|
|
33
|
+
readonly closure: Closure;
|
|
34
|
+
readonly unresolved: readonly string[];
|
|
35
|
+
readonly open: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare function runClosure(subjects: readonly StopSubject[], rule: Pick<StopRule, "cancelledSequence" | "stopLimit">): RunClosure;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const finalStatuses = [
|
|
2
|
+
"refused",
|
|
3
|
+
"completed",
|
|
4
|
+
"failed",
|
|
5
|
+
"stopped",
|
|
6
|
+
"cancelled",
|
|
7
|
+
];
|
|
8
|
+
const notStarted = ["withheld", "blocked", "absent"];
|
|
9
|
+
function sent(subject) {
|
|
10
|
+
return subject.attempts.some((attempt) => attempt.outcome === "sent");
|
|
11
|
+
}
|
|
12
|
+
function accepted(subject) {
|
|
13
|
+
return subject.receipt !== null || sent(subject);
|
|
14
|
+
}
|
|
15
|
+
function protectedClass(subject) {
|
|
16
|
+
if (finalStatuses.includes(subject.status ?? ""))
|
|
17
|
+
return "resolved";
|
|
18
|
+
return subject.receipt === null ? "unknown" : "alive";
|
|
19
|
+
}
|
|
20
|
+
function runClass(subject) {
|
|
21
|
+
if (subject.stopped)
|
|
22
|
+
return "resolved";
|
|
23
|
+
if (sent(subject))
|
|
24
|
+
return "alive";
|
|
25
|
+
const last = subject.attempts.at(-1)?.outcome ?? "";
|
|
26
|
+
return notStarted.includes(last) ? "resolved" : "unknown";
|
|
27
|
+
}
|
|
28
|
+
export function stopClasses(subjects) {
|
|
29
|
+
return new Map(subjects.map((subject) => [subject.operationId, classOf(subject)]));
|
|
30
|
+
}
|
|
31
|
+
function classOf(subject) {
|
|
32
|
+
if (subject.attempts.some((attempt) => attempt.outcome === null))
|
|
33
|
+
return "open";
|
|
34
|
+
return subject.kind === "protected-effect"
|
|
35
|
+
? protectedClass(subject)
|
|
36
|
+
: runClass(subject);
|
|
37
|
+
}
|
|
38
|
+
const stopPurposes = ["stop", "reconcile"];
|
|
39
|
+
export function stopCount(subject, cancelledSequence) {
|
|
40
|
+
return subject.attempts.filter((attempt) => attempt.outcome !== null &&
|
|
41
|
+
stopPurposes.includes(attempt.purpose) &&
|
|
42
|
+
attempt.stagedSequence >= cancelledSequence).length;
|
|
43
|
+
}
|
|
44
|
+
const uncertainStatuses = ["recovering", "blocked"];
|
|
45
|
+
function uncertain(subject) {
|
|
46
|
+
return uncertainStatuses.includes(subject.status ?? "");
|
|
47
|
+
}
|
|
48
|
+
function alivePurposes(subject, rule) {
|
|
49
|
+
if (rule.stopSupported)
|
|
50
|
+
return ["stop"];
|
|
51
|
+
return uncertain(subject) ? ["reconcile"] : [];
|
|
52
|
+
}
|
|
53
|
+
function purposes(classed, rule) {
|
|
54
|
+
const { subject, kind } = classed;
|
|
55
|
+
if (kind === "unknown")
|
|
56
|
+
return ["reconcile"];
|
|
57
|
+
return kind === "alive" ? alivePurposes(subject, rule) : [];
|
|
58
|
+
}
|
|
59
|
+
export function stopAttempts(subjects, rule) {
|
|
60
|
+
const classes = stopClasses(subjects);
|
|
61
|
+
return subjects
|
|
62
|
+
.filter((subject) => rule.opening ||
|
|
63
|
+
rule.rejected.has(subject.operationId) ||
|
|
64
|
+
stopCount(subject, rule.cancelledSequence) < rule.stopLimit)
|
|
65
|
+
.flatMap((subject) => purposes({ subject, kind: classes.get(subject.operationId) }, rule).map((purpose) => ({
|
|
66
|
+
operationId: subject.operationId,
|
|
67
|
+
kind: subject.kind,
|
|
68
|
+
purpose,
|
|
69
|
+
})));
|
|
70
|
+
}
|
|
71
|
+
function closureOf(pending, rule) {
|
|
72
|
+
if (pending.length === 0)
|
|
73
|
+
return "cancelled";
|
|
74
|
+
const bounded = pending.some((subject) => stopCount(subject, rule.cancelledSequence) >= rule.stopLimit);
|
|
75
|
+
return bounded ? "stop-unconfirmed" : "stop-not-observed";
|
|
76
|
+
}
|
|
77
|
+
export function runClosure(subjects, rule) {
|
|
78
|
+
const classes = stopClasses(subjects);
|
|
79
|
+
const classed = (kind) => subjects.filter((subject) => classes.get(subject.operationId) === kind);
|
|
80
|
+
const open = classed("open");
|
|
81
|
+
return {
|
|
82
|
+
closure: open.length > 0
|
|
83
|
+
? "stop-not-observed"
|
|
84
|
+
: closureOf([...classed("unknown"), ...classed("alive")], rule),
|
|
85
|
+
unresolved: [
|
|
86
|
+
...open.filter((subject) => !accepted(subject)),
|
|
87
|
+
...classed("unknown"),
|
|
88
|
+
].map((subject) => subject.operationId),
|
|
89
|
+
open: open.length > 0,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { RunDetails } from "./details.ts";
|
|
2
|
+
import type { GateState } from "./gates.ts";
|
|
3
|
+
import type { EffectState } from "./operations.ts";
|
|
4
|
+
export type RunStatus = "queued" | "running" | "waiting_gate" | "paused" | "completed" | "failed" | "cancelled";
|
|
5
|
+
export interface RunState {
|
|
6
|
+
readonly runId: string;
|
|
7
|
+
readonly status: RunStatus;
|
|
8
|
+
readonly revision: number;
|
|
9
|
+
readonly workflow: string;
|
|
10
|
+
readonly pausedFrom: RunStatus | null;
|
|
11
|
+
readonly gates: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
export interface EffectIntent {
|
|
14
|
+
readonly kind: "start-run" | "continue-run" | "protected-effect";
|
|
15
|
+
readonly runId: string;
|
|
16
|
+
readonly operationId: string;
|
|
17
|
+
}
|
|
18
|
+
export interface AuthorityState {
|
|
19
|
+
readonly sequence: number;
|
|
20
|
+
readonly runs: Readonly<Record<string, RunState>>;
|
|
21
|
+
readonly commands: Readonly<Record<string, {
|
|
22
|
+
readonly request: string;
|
|
23
|
+
readonly sequence: number;
|
|
24
|
+
}>>;
|
|
25
|
+
readonly intents: readonly EffectIntent[];
|
|
26
|
+
readonly gates: Readonly<Record<string, GateState>>;
|
|
27
|
+
readonly details: Readonly<Record<string, RunDetails>>;
|
|
28
|
+
readonly questions: number;
|
|
29
|
+
readonly effects: EffectState;
|
|
30
|
+
}
|
|
31
|
+
export declare const eventTypes: readonly ["run.created", "run.started", "gate.opened", "gate.wait-registered", "gate.decided", "gate.expired", "run.paused", "run.resumed", "run.completed", "run.failed", "run.cancelled", "run.observed", "step.dispatched", "effect.requested", "lease.granted", "lease.expired", "effect.reported", "operation.reconciled"];
|
|
32
|
+
export type EventType = (typeof eventTypes)[number];
|
|
33
|
+
export interface AuthorityEvent {
|
|
34
|
+
readonly sequence: number;
|
|
35
|
+
readonly type: EventType;
|
|
36
|
+
readonly runId: string;
|
|
37
|
+
readonly commandId: string;
|
|
38
|
+
readonly recordedAt: string;
|
|
39
|
+
readonly request: string;
|
|
40
|
+
readonly payload: Readonly<Record<string, string>>;
|
|
41
|
+
}
|
|
42
|
+
export declare const numberFields: readonly ["expectedRevision", "generation", "attempt", "limit", "effectLimit", "units", "recoveryLimit", "leaseGeneration", "sourceGeneration", "capacity"];
|
|
43
|
+
export declare const textFields: readonly ["workflow", "submission", "input", "resolver", "gateId", "gateKind", "subject", "prompt", "expiresAt", "decision", "answer", "condition", "reason", "evidence", "retryAt", "operationId", "receipt", "capabilities", "capability", "method", "target", "payload", "inputDigest", "resource", "transport", "source", "worker", "outcome", "outcomeReason", "result"];
|
|
44
|
+
export type NumberField = (typeof numberFields)[number];
|
|
45
|
+
export type TextField = (typeof textFields)[number];
|
|
46
|
+
export type AuthorityCommand = {
|
|
47
|
+
readonly kind: string;
|
|
48
|
+
readonly commandId: string;
|
|
49
|
+
readonly runId: string;
|
|
50
|
+
} & Readonly<Partial<Record<NumberField, number>>> & Readonly<Partial<Record<TextField, string>>>;
|
|
51
|
+
export type Move = Exclude<EventType, "run.created" | "step.dispatched" | "gate.wait-registered" | "run.observed" | "effect.requested" | "lease.granted" | "lease.expired" | "effect.reported" | "operation.reconciled">;
|
|
52
|
+
export declare const terminal: readonly RunStatus[];
|
|
53
|
+
export type Transition = {
|
|
54
|
+
readonly kind: "moved";
|
|
55
|
+
readonly run: RunState;
|
|
56
|
+
} | {
|
|
57
|
+
readonly kind: "invalid";
|
|
58
|
+
readonly reason: string;
|
|
59
|
+
};
|
|
60
|
+
export declare function transition(run: RunState, event: {
|
|
61
|
+
readonly type: Move;
|
|
62
|
+
readonly gateId: string;
|
|
63
|
+
}): Transition;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
export const eventTypes = [
|
|
2
|
+
"run.created",
|
|
3
|
+
"run.started",
|
|
4
|
+
"gate.opened",
|
|
5
|
+
"gate.wait-registered",
|
|
6
|
+
"gate.decided",
|
|
7
|
+
"gate.expired",
|
|
8
|
+
"run.paused",
|
|
9
|
+
"run.resumed",
|
|
10
|
+
"run.completed",
|
|
11
|
+
"run.failed",
|
|
12
|
+
"run.cancelled",
|
|
13
|
+
"run.observed",
|
|
14
|
+
"step.dispatched",
|
|
15
|
+
"effect.requested",
|
|
16
|
+
"lease.granted",
|
|
17
|
+
"lease.expired",
|
|
18
|
+
"effect.reported",
|
|
19
|
+
"operation.reconciled",
|
|
20
|
+
];
|
|
21
|
+
export const numberFields = [
|
|
22
|
+
"expectedRevision",
|
|
23
|
+
"generation",
|
|
24
|
+
"attempt",
|
|
25
|
+
"limit",
|
|
26
|
+
"effectLimit",
|
|
27
|
+
"units",
|
|
28
|
+
"recoveryLimit",
|
|
29
|
+
"leaseGeneration",
|
|
30
|
+
"sourceGeneration",
|
|
31
|
+
"capacity",
|
|
32
|
+
];
|
|
33
|
+
export const textFields = [
|
|
34
|
+
"workflow",
|
|
35
|
+
"submission",
|
|
36
|
+
"input",
|
|
37
|
+
"resolver",
|
|
38
|
+
"gateId",
|
|
39
|
+
"gateKind",
|
|
40
|
+
"subject",
|
|
41
|
+
"prompt",
|
|
42
|
+
"expiresAt",
|
|
43
|
+
"decision",
|
|
44
|
+
"answer",
|
|
45
|
+
"condition",
|
|
46
|
+
"reason",
|
|
47
|
+
"evidence",
|
|
48
|
+
"retryAt",
|
|
49
|
+
"operationId",
|
|
50
|
+
"receipt",
|
|
51
|
+
"capabilities",
|
|
52
|
+
"capability",
|
|
53
|
+
"method",
|
|
54
|
+
"target",
|
|
55
|
+
"payload",
|
|
56
|
+
"inputDigest",
|
|
57
|
+
"resource",
|
|
58
|
+
"transport",
|
|
59
|
+
"source",
|
|
60
|
+
"worker",
|
|
61
|
+
"outcome",
|
|
62
|
+
"outcomeReason",
|
|
63
|
+
"result",
|
|
64
|
+
];
|
|
65
|
+
export const terminal = [
|
|
66
|
+
"completed",
|
|
67
|
+
"failed",
|
|
68
|
+
"cancelled",
|
|
69
|
+
];
|
|
70
|
+
const active = ["queued", "running", "waiting_gate"];
|
|
71
|
+
const sources = {
|
|
72
|
+
"run.started": ["queued"],
|
|
73
|
+
"gate.opened": ["running", "waiting_gate"],
|
|
74
|
+
"gate.decided": ["waiting_gate"],
|
|
75
|
+
"gate.expired": ["waiting_gate"],
|
|
76
|
+
"run.paused": active,
|
|
77
|
+
"run.completed": ["running"],
|
|
78
|
+
"run.failed": active,
|
|
79
|
+
"run.cancelled": [...active, "paused"],
|
|
80
|
+
};
|
|
81
|
+
const changes = {
|
|
82
|
+
"run.started": () => ({ status: "running" }),
|
|
83
|
+
"gate.opened": (run, gateId) => ({
|
|
84
|
+
status: "waiting_gate",
|
|
85
|
+
gates: [...run.gates, gateId],
|
|
86
|
+
}),
|
|
87
|
+
"run.paused": (run) => ({ status: "paused", pausedFrom: run.status }),
|
|
88
|
+
"run.completed": () => ({ status: "completed" }),
|
|
89
|
+
"run.failed": () => ({ status: "failed" }),
|
|
90
|
+
"run.cancelled": () => ({ status: "cancelled" }),
|
|
91
|
+
};
|
|
92
|
+
export function transition(run, event) {
|
|
93
|
+
const { type, gateId } = event;
|
|
94
|
+
if (terminal.includes(run.status))
|
|
95
|
+
return invalid("terminal-run");
|
|
96
|
+
if (type === "run.resumed")
|
|
97
|
+
return run.pausedFrom
|
|
98
|
+
? moved(run, { status: run.pausedFrom, pausedFrom: null })
|
|
99
|
+
: invalid("invalid-transition");
|
|
100
|
+
if (!sources[type].includes(run.status))
|
|
101
|
+
return invalid("invalid-transition");
|
|
102
|
+
if (type === "gate.opened" && run.gates.includes(gateId))
|
|
103
|
+
return invalid("existing-gate");
|
|
104
|
+
if (type === "gate.decided" || type === "gate.expired")
|
|
105
|
+
return run.gates.includes(gateId)
|
|
106
|
+
? moved(run, decided(run, gateId))
|
|
107
|
+
: invalid("unknown-gate");
|
|
108
|
+
return moved(run, changes[type](run, gateId));
|
|
109
|
+
}
|
|
110
|
+
function decided(run, gateId) {
|
|
111
|
+
const gates = run.gates.filter((gate) => gate !== gateId);
|
|
112
|
+
return { status: gates.length === 0 ? "running" : "waiting_gate", gates };
|
|
113
|
+
}
|
|
114
|
+
function moved(run, change) {
|
|
115
|
+
return {
|
|
116
|
+
kind: "moved",
|
|
117
|
+
run: { ...run, ...change, revision: run.revision + 1 },
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function invalid(reason) {
|
|
121
|
+
return { kind: "invalid", reason };
|
|
122
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type CallResult<Reply> = {
|
|
2
|
+
readonly kind: "replied";
|
|
3
|
+
readonly reply: Reply;
|
|
4
|
+
} | {
|
|
5
|
+
readonly kind: "thrown";
|
|
6
|
+
readonly message: string;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: "overdue";
|
|
9
|
+
};
|
|
10
|
+
export interface AdapterCalls {
|
|
11
|
+
readonly call: <Reply>(operationId: string, invoke: (signal: AbortSignal) => Promise<Reply>) => Promise<CallResult<Reply>>;
|
|
12
|
+
}
|
|
13
|
+
export declare function adapterCalls(milliseconds: number): AdapterCalls;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
function attempted(invoke, signal) {
|
|
2
|
+
return Promise.resolve()
|
|
3
|
+
.then(() => invoke(signal))
|
|
4
|
+
.then((reply) => ({ kind: "replied", reply }), (error) => ({
|
|
5
|
+
kind: "thrown",
|
|
6
|
+
message: String(Reflect.get(Object(error), "message")),
|
|
7
|
+
}));
|
|
8
|
+
}
|
|
9
|
+
export function adapterCalls(milliseconds) {
|
|
10
|
+
const overdue = new Map();
|
|
11
|
+
return {
|
|
12
|
+
call: async (operationId, invoke) => {
|
|
13
|
+
if (overdue.get(operationId)?.settled === false)
|
|
14
|
+
return { kind: "overdue" };
|
|
15
|
+
const limit = new AbortController();
|
|
16
|
+
const open = { settled: false };
|
|
17
|
+
const attempt = attempted(invoke, limit.signal).then((result) => {
|
|
18
|
+
open.settled = true;
|
|
19
|
+
return result;
|
|
20
|
+
});
|
|
21
|
+
const expiry = Promise.withResolvers();
|
|
22
|
+
const timer = setTimeout(() => {
|
|
23
|
+
expiry.resolve({ kind: "overdue" });
|
|
24
|
+
}, milliseconds);
|
|
25
|
+
const result = await Promise.race([attempt, expiry.promise]);
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
if (result.kind !== "overdue")
|
|
28
|
+
return result;
|
|
29
|
+
limit.abort();
|
|
30
|
+
overdue.set(operationId, open);
|
|
31
|
+
return result;
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CallResult } from "./adapter-calls.ts";
|
|
2
|
+
export type Settlement = {
|
|
3
|
+
readonly kind: "absent";
|
|
4
|
+
} | {
|
|
5
|
+
readonly kind: "accepted";
|
|
6
|
+
readonly receipt: string;
|
|
7
|
+
readonly worker: string;
|
|
8
|
+
} | (Identity & {
|
|
9
|
+
readonly kind: "completed";
|
|
10
|
+
readonly receipt: string;
|
|
11
|
+
readonly result: string | null;
|
|
12
|
+
readonly reason: string | null;
|
|
13
|
+
}) | (Identity & {
|
|
14
|
+
readonly kind: "failed";
|
|
15
|
+
readonly reason: string;
|
|
16
|
+
readonly result?: string;
|
|
17
|
+
}) | (Identity & {
|
|
18
|
+
readonly kind: "stopped";
|
|
19
|
+
}) | {
|
|
20
|
+
readonly kind: "unknown";
|
|
21
|
+
readonly reason: string;
|
|
22
|
+
};
|
|
23
|
+
interface Identity {
|
|
24
|
+
readonly receipt: string | null;
|
|
25
|
+
readonly worker: string | null;
|
|
26
|
+
}
|
|
27
|
+
export declare function settlement(result: CallResult<unknown>, resultBytes: number): Settlement;
|
|
28
|
+
export {};
|