cloving 0.3.20 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE.md → LICENSE} +1 -1
- package/README.md +606 -182
- package/dist/src/authority/budgets.d.ts +12 -0
- package/dist/src/authority/budgets.js +42 -0
- package/dist/src/authority/commands.d.ts +7 -0
- package/dist/src/authority/commands.js +271 -0
- package/dist/src/authority/details.d.ts +28 -0
- package/dist/src/authority/details.js +33 -0
- package/dist/src/authority/dispatch-decision.d.ts +40 -0
- package/dist/src/authority/dispatch-decision.js +47 -0
- package/dist/src/authority/effect-requests.d.ts +2 -0
- package/dist/src/authority/effect-requests.js +139 -0
- package/dist/src/authority/effect-results.d.ts +4 -0
- package/dist/src/authority/effect-results.js +236 -0
- package/dist/src/authority/events.d.ts +2 -0
- package/dist/src/authority/events.js +45 -0
- package/dist/src/authority/gate-reduction.d.ts +8 -0
- package/dist/src/authority/gate-reduction.js +109 -0
- package/dist/src/authority/gates.d.ts +48 -0
- package/dist/src/authority/gates.js +77 -0
- package/dist/src/authority/history-state.d.ts +15 -0
- package/dist/src/authority/history-state.js +61 -0
- package/dist/src/authority/history.d.ts +13 -0
- package/dist/src/authority/history.js +37 -0
- package/dist/src/authority/instants.d.ts +3 -0
- package/dist/src/authority/instants.js +38 -0
- package/dist/src/authority/leases.d.ts +15 -0
- package/dist/src/authority/leases.js +113 -0
- package/dist/src/authority/operations.d.ts +101 -0
- package/dist/src/authority/operations.js +75 -0
- package/dist/src/authority/reconciliation.d.ts +29 -0
- package/dist/src/authority/reconciliation.js +156 -0
- package/dist/src/authority/reducer.d.ts +41 -0
- package/dist/src/authority/reducer.js +139 -0
- package/dist/src/authority/reduction-state.d.ts +36 -0
- package/dist/src/authority/reduction-state.js +68 -0
- package/dist/src/authority/reduction.d.ts +6 -0
- package/dist/src/authority/reduction.js +160 -0
- package/dist/src/authority/status-closure.d.ts +4 -0
- package/dist/src/authority/status-closure.js +57 -0
- package/dist/src/authority/status-effects.d.ts +17 -0
- package/dist/src/authority/status-effects.js +43 -0
- package/dist/src/authority/status-input.d.ts +45 -0
- package/dist/src/authority/status-input.js +9 -0
- package/dist/src/authority/status.d.ts +32 -0
- package/dist/src/authority/status.js +256 -0
- package/dist/src/authority/stop-sequence.d.ts +37 -0
- package/dist/src/authority/stop-sequence.js +91 -0
- package/dist/src/authority/transitions.d.ts +63 -0
- package/dist/src/authority/transitions.js +124 -0
- package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
- package/dist/src/broker/actor/adapter-calls.js +34 -0
- package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
- package/dist/src/broker/actor/adapter-outcomes.js +80 -0
- package/dist/src/broker/actor/authority-actor.d.ts +25 -0
- package/dist/src/broker/actor/authority-actor.js +169 -0
- package/dist/src/broker/actor/authority-changes.d.ts +31 -0
- package/dist/src/broker/actor/authority-changes.js +46 -0
- package/dist/src/broker/actor/authority-connection.d.ts +15 -0
- package/dist/src/broker/actor/authority-connection.js +44 -0
- package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
- package/dist/src/broker/actor/authority-conversion.js +72 -0
- package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
- package/dist/src/broker/actor/authority-delivery.js +162 -0
- package/dist/src/broker/actor/authority-logger.d.ts +2 -0
- package/dist/src/broker/actor/authority-logger.js +19 -0
- package/dist/src/broker/actor/authority-policy.d.ts +9 -0
- package/dist/src/broker/actor/authority-policy.js +11 -0
- package/dist/src/broker/actor/authority-queries.d.ts +45 -0
- package/dist/src/broker/actor/authority-queries.js +85 -0
- package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
- package/dist/src/broker/actor/authority-receipts.js +84 -0
- package/dist/src/broker/actor/authority-release.d.ts +13 -0
- package/dist/src/broker/actor/authority-release.js +69 -0
- package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
- package/dist/src/broker/actor/authority-runtime.js +204 -0
- package/dist/src/broker/actor/authority-session.d.ts +67 -0
- package/dist/src/broker/actor/authority-session.js +251 -0
- package/dist/src/broker/actor/authority-settings.d.ts +33 -0
- package/dist/src/broker/actor/authority-settings.js +63 -0
- package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
- package/dist/src/broker/actor/authority-upgrades.js +12 -0
- package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
- package/dist/src/broker/actor/authority-watchdog.js +41 -0
- package/dist/src/broker/actor/authority.d.ts +14 -0
- package/dist/src/broker/actor/authority.js +115 -0
- package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
- package/dist/src/broker/actor/delivery-intents.js +77 -0
- package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
- package/dist/src/broker/actor/delivery-plan.js +109 -0
- package/dist/src/broker/actor/delivery-results.d.ts +11 -0
- package/dist/src/broker/actor/delivery-results.js +63 -0
- package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
- package/dist/src/broker/actor/effect-delivery.js +118 -0
- package/dist/src/broker/actor/effect-plan.d.ts +41 -0
- package/dist/src/broker/actor/effect-plan.js +173 -0
- package/dist/src/broker/actor/effect-queries.d.ts +27 -0
- package/dist/src/broker/actor/effect-queries.js +80 -0
- package/dist/src/broker/actor/effect-turn.d.ts +25 -0
- package/dist/src/broker/actor/effect-turn.js +84 -0
- package/dist/src/broker/actor/pin-check.d.ts +6 -0
- package/dist/src/broker/actor/pin-check.js +12 -0
- package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
- package/dist/src/broker/actor/runtime-parts.js +34 -0
- package/dist/src/broker/actor/stop-plan.d.ts +20 -0
- package/dist/src/broker/actor/stop-plan.js +46 -0
- package/dist/src/broker/actor/stop-turn.d.ts +17 -0
- package/dist/src/broker/actor/stop-turn.js +42 -0
- package/dist/src/broker/actor/turn-draft.d.ts +31 -0
- package/dist/src/broker/actor/turn-draft.js +138 -0
- package/dist/src/broker/actor/turn-plan.d.ts +17 -0
- package/dist/src/broker/actor/turn-plan.js +136 -0
- package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
- package/dist/src/broker/actor/turn-refusals.js +35 -0
- package/dist/src/broker/actor/turn-staging.d.ts +78 -0
- package/dist/src/broker/actor/turn-staging.js +34 -0
- package/dist/src/broker/actor/turn-state.d.ts +34 -0
- package/dist/src/broker/actor/turn-state.js +208 -0
- package/dist/src/broker/authority-admission.d.ts +21 -0
- package/dist/src/broker/authority-admission.js +70 -0
- package/dist/src/broker/authority-restore.d.ts +30 -0
- package/dist/src/broker/authority-restore.js +165 -0
- package/dist/src/broker/decision-restore.d.ts +16 -0
- package/dist/src/broker/decision-restore.js +158 -0
- package/dist/src/broker/decision-upgrade.d.ts +3 -0
- package/dist/src/broker/decision-upgrade.js +12 -0
- package/dist/src/broker/effect-restore.d.ts +20 -0
- package/dist/src/broker/effect-restore.js +111 -0
- package/dist/src/broker/effect-upgrade.d.ts +3 -0
- package/dist/src/broker/effect-upgrade.js +9 -0
- package/dist/src/broker/operation-digest.d.ts +1 -0
- package/dist/src/broker/operation-digest.js +4 -0
- package/dist/src/broker/socket-address.d.ts +9 -0
- package/dist/src/broker/socket-address.js +14 -0
- package/dist/src/broker/workflow-pin.d.ts +2 -0
- package/dist/src/broker/workflow-pin.js +5 -0
- package/dist/src/chats/analysis-batches.d.ts +24 -0
- package/dist/src/chats/analysis-batches.js +83 -0
- package/dist/src/chats/analysis-contract.d.ts +80 -0
- package/dist/src/chats/analysis-contract.js +16 -0
- package/dist/src/chats/analysis-data.d.ts +3 -0
- package/dist/src/chats/analysis-data.js +85 -0
- package/dist/src/chats/analysis-input.d.ts +12 -0
- package/dist/src/chats/analysis-input.js +83 -0
- package/dist/src/chats/analysis-links.d.ts +2 -0
- package/dist/src/chats/analysis-links.js +25 -0
- package/dist/src/chats/analysis-prompt.d.ts +10 -0
- package/dist/src/chats/analysis-prompt.js +16 -0
- package/dist/src/chats/analysis-proposal.d.ts +2 -0
- package/dist/src/chats/analysis-proposal.js +32 -0
- package/dist/src/chats/analysis-provenance.d.ts +4 -0
- package/dist/src/chats/analysis-provenance.js +99 -0
- package/dist/src/chats/analysis-shape.d.ts +3 -0
- package/dist/src/chats/analysis-shape.js +228 -0
- package/dist/src/chats/analysis.d.ts +3 -0
- package/dist/src/chats/analysis.js +42 -0
- package/dist/src/chats/corpus-input.d.ts +5 -0
- package/dist/src/chats/corpus-input.js +288 -0
- package/dist/src/chats/destination.d.ts +4 -0
- package/dist/src/chats/destination.js +96 -0
- package/dist/src/chats/import.d.ts +15 -0
- package/dist/src/chats/import.js +243 -0
- package/dist/src/chats/input-file.d.ts +3 -0
- package/dist/src/chats/input-file.js +32 -0
- package/dist/src/chats/normalize.d.ts +29 -0
- package/dist/src/chats/normalize.js +155 -0
- package/dist/src/chats/previous-import.d.ts +5 -0
- package/dist/src/chats/previous-import.js +34 -0
- package/dist/src/chats/reader.d.ts +21 -0
- package/dist/src/chats/reader.js +118 -0
- package/dist/src/chats/redact-import.d.ts +14 -0
- package/dist/src/chats/redact-import.js +141 -0
- package/dist/src/chats/redaction.d.ts +41 -0
- package/dist/src/chats/redaction.js +161 -0
- package/dist/src/chats/revision-input.d.ts +3 -0
- package/dist/src/chats/revision-input.js +180 -0
- package/dist/src/chats/revision.d.ts +48 -0
- package/dist/src/chats/revision.js +94 -0
- package/dist/src/chats/selection.d.ts +25 -0
- package/dist/src/chats/selection.js +109 -0
- package/dist/src/chats/source.d.ts +23 -0
- package/dist/src/chats/source.js +135 -0
- package/dist/src/chats/structure.d.ts +57 -0
- package/dist/src/chats/structure.js +216 -0
- package/dist/src/cli/arguments.d.ts +31 -0
- package/dist/src/cli/arguments.js +235 -0
- package/dist/src/cli/client.d.ts +16 -0
- package/dist/src/cli/client.js +159 -0
- package/dist/src/cli/commands.d.ts +17 -0
- package/dist/src/cli/commands.js +271 -0
- package/dist/src/cli/main.d.ts +2 -0
- package/dist/src/cli/main.js +127 -0
- package/dist/src/cli/render.d.ts +10 -0
- package/dist/src/cli/render.js +254 -0
- package/dist/src/cli/runtime-arguments.d.ts +73 -0
- package/dist/src/cli/runtime-arguments.js +248 -0
- package/dist/src/cli/runtime-directory.d.ts +4 -0
- package/dist/src/cli/runtime-directory.js +25 -0
- package/dist/src/cli/toolchain.d.ts +3 -0
- package/dist/src/cli/toolchain.js +74 -0
- package/dist/src/cli/usage-render.d.ts +3 -0
- package/dist/src/cli/usage-render.js +28 -0
- package/dist/src/cli/usage.d.ts +5 -0
- package/dist/src/cli/usage.js +156 -0
- package/dist/src/cli/validate.d.ts +38 -0
- package/dist/src/cli/validate.js +116 -0
- package/dist/src/cli/watch-actions.d.ts +10 -0
- package/dist/src/cli/watch-actions.js +58 -0
- package/dist/src/cli/watch-board-view.d.ts +54 -0
- package/dist/src/cli/watch-board-view.js +201 -0
- package/dist/src/cli/watch-board.d.ts +15 -0
- package/dist/src/cli/watch-board.js +179 -0
- package/dist/src/cli/watch-card-client.d.ts +1 -0
- package/dist/src/cli/watch-card-client.js +44 -0
- package/dist/src/cli/watch-card-forms.d.ts +2 -0
- package/dist/src/cli/watch-card-forms.js +33 -0
- package/dist/src/cli/watch-card-reply.d.ts +5 -0
- package/dist/src/cli/watch-card-reply.js +34 -0
- package/dist/src/cli/watch-card-view.d.ts +40 -0
- package/dist/src/cli/watch-card-view.js +86 -0
- package/dist/src/cli/watch-client.d.ts +1 -0
- package/dist/src/cli/watch-client.js +118 -0
- package/dist/src/cli/watch-element.d.ts +11 -0
- package/dist/src/cli/watch-element.js +6 -0
- package/dist/src/cli/watch-model.d.ts +29 -0
- package/dist/src/cli/watch-model.js +278 -0
- package/dist/src/cli/watch-navigation.d.ts +9 -0
- package/dist/src/cli/watch-navigation.js +40 -0
- package/dist/src/cli/watch-page.d.ts +1 -0
- package/dist/src/cli/watch-page.js +258 -0
- package/dist/src/cli/watch-paths.d.ts +2 -0
- package/dist/src/cli/watch-paths.js +52 -0
- package/dist/src/cli/watch-phases.d.ts +7 -0
- package/dist/src/cli/watch-phases.js +148 -0
- package/dist/src/cli/watch-pr-board.d.ts +3 -0
- package/dist/src/cli/watch-pr-board.js +26 -0
- package/dist/src/cli/watch-pr-command.d.ts +15 -0
- package/dist/src/cli/watch-pr-command.js +37 -0
- package/dist/src/cli/watch-pr-identity.d.ts +20 -0
- package/dist/src/cli/watch-pr-identity.js +62 -0
- package/dist/src/cli/watch-pr-observer.d.ts +19 -0
- package/dist/src/cli/watch-pr-observer.js +108 -0
- package/dist/src/cli/watch-pr-settings.d.ts +8 -0
- package/dist/src/cli/watch-pr-settings.js +47 -0
- package/dist/src/cli/watch-reads.d.ts +28 -0
- package/dist/src/cli/watch-reads.js +248 -0
- package/dist/src/cli/watch-render.d.ts +153 -0
- package/dist/src/cli/watch-render.js +102 -0
- package/dist/src/cli/watch-run-input.d.ts +14 -0
- package/dist/src/cli/watch-run-input.js +49 -0
- package/dist/src/cli/watch-server.d.ts +13 -0
- package/dist/src/cli/watch-server.js +214 -0
- package/dist/src/cli/watch-start-view.d.ts +18 -0
- package/dist/src/cli/watch-start-view.js +77 -0
- package/dist/src/cli/watch-stream.d.ts +11 -0
- package/dist/src/cli/watch-stream.js +128 -0
- package/dist/src/cli/watch-turn.d.ts +30 -0
- package/dist/src/cli/watch-turn.js +135 -0
- package/dist/src/cli/watch-usage.d.ts +6 -0
- package/dist/src/cli/watch-usage.js +65 -0
- package/dist/src/cli/watch-view.d.ts +54 -0
- package/dist/src/cli/watch-view.js +267 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +104 -0
- package/dist/src/daemon/analysis-launch.d.ts +5 -0
- package/dist/src/daemon/analysis-launch.js +81 -0
- package/dist/src/daemon/analysis-token.d.ts +6 -0
- package/dist/src/daemon/analysis-token.js +88 -0
- package/dist/src/daemon/analysis-worker.d.ts +22 -0
- package/dist/src/daemon/analysis-worker.js +219 -0
- package/dist/src/daemon/chats-files.d.ts +15 -0
- package/dist/src/daemon/chats-files.js +113 -0
- package/dist/src/daemon/chats-worker.d.ts +12 -0
- package/dist/src/daemon/chats-worker.js +200 -0
- package/dist/src/daemon/claude-turn.d.ts +38 -0
- package/dist/src/daemon/claude-turn.js +216 -0
- package/dist/src/daemon/claude-worker.d.ts +29 -0
- package/dist/src/daemon/claude-worker.js +276 -0
- package/dist/src/daemon/codex-stream.d.ts +4 -0
- package/dist/src/daemon/codex-stream.js +129 -0
- package/dist/src/daemon/daemon.d.ts +49 -0
- package/dist/src/daemon/daemon.js +195 -0
- package/dist/src/daemon/delivery-router.d.ts +10 -0
- package/dist/src/daemon/delivery-router.js +34 -0
- package/dist/src/daemon/github-calls.d.ts +29 -0
- package/dist/src/daemon/github-calls.js +127 -0
- package/dist/src/daemon/github-issue-methods.d.ts +3 -0
- package/dist/src/daemon/github-issue-methods.js +99 -0
- package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
- package/dist/src/daemon/github-issue-privacy.js +131 -0
- package/dist/src/daemon/github-merge.d.ts +18 -0
- package/dist/src/daemon/github-merge.js +259 -0
- package/dist/src/daemon/github-methods.d.ts +5 -0
- package/dist/src/daemon/github-methods.js +202 -0
- package/dist/src/daemon/github-operation.d.ts +38 -0
- package/dist/src/daemon/github-operation.js +57 -0
- package/dist/src/daemon/github-ticket-status.d.ts +3 -0
- package/dist/src/daemon/github-ticket-status.js +268 -0
- package/dist/src/daemon/github-worker.d.ts +17 -0
- package/dist/src/daemon/github-worker.js +281 -0
- package/dist/src/daemon/host-environment.d.ts +8 -0
- package/dist/src/daemon/host-environment.js +14 -0
- package/dist/src/daemon/issue-queue.d.ts +10 -0
- package/dist/src/daemon/issue-queue.js +254 -0
- package/dist/src/daemon/notify-message.d.ts +14 -0
- package/dist/src/daemon/notify-message.js +48 -0
- package/dist/src/daemon/notify.d.ts +12 -0
- package/dist/src/daemon/notify.js +161 -0
- package/dist/src/daemon/operation-journal.d.ts +43 -0
- package/dist/src/daemon/operation-journal.js +55 -0
- package/dist/src/daemon/retrying-turn.d.ts +9 -0
- package/dist/src/daemon/retrying-turn.js +185 -0
- package/dist/src/daemon/ticket-registration.d.ts +33 -0
- package/dist/src/daemon/ticket-registration.js +177 -0
- package/dist/src/daemon/ticket-source.d.ts +17 -0
- package/dist/src/daemon/ticket-source.js +36 -0
- package/dist/src/daemon/work-tree.d.ts +26 -0
- package/dist/src/daemon/work-tree.js +206 -0
- package/dist/src/effect-authorization.d.ts +21 -0
- package/dist/src/effect-authorization.js +14 -0
- package/dist/src/execution-pin.d.ts +4 -0
- package/dist/src/execution-pin.js +68 -0
- package/dist/src/host/start-delivery.d.ts +41 -0
- package/dist/src/host/start-delivery.js +68 -0
- package/dist/src/host/step-bridge-host.d.ts +79 -0
- package/dist/src/host/step-bridge-host.js +205 -0
- package/dist/src/host/step-claims.d.ts +31 -0
- package/dist/src/host/step-claims.js +85 -0
- package/dist/src/host/world-host.d.ts +21 -0
- package/dist/src/host/world-host.js +51 -0
- package/dist/src/host/world-reconciliation.d.ts +39 -0
- package/dist/src/host/world-reconciliation.js +81 -0
- package/dist/src/host/world-runs.d.ts +14 -0
- package/dist/src/host/world-runs.js +69 -0
- package/dist/src/operation-identity.d.ts +7 -0
- package/dist/src/operation-identity.js +59 -0
- package/dist/src/protocol.d.ts +35 -0
- package/dist/src/protocol.js +64 -0
- package/dist/src/resource-files.d.ts +1 -0
- package/dist/src/resource-files.js +29 -0
- package/dist/src/service/changes.d.ts +11 -0
- package/dist/src/service/changes.js +32 -0
- package/dist/src/service/decision-handler.d.ts +9 -0
- package/dist/src/service/decision-handler.js +233 -0
- package/dist/src/service/event-handler.d.ts +10 -0
- package/dist/src/service/event-handler.js +70 -0
- package/dist/src/service/expiry.d.ts +13 -0
- package/dist/src/service/expiry.js +53 -0
- package/dist/src/service/gateway.d.ts +21 -0
- package/dist/src/service/gateway.js +120 -0
- package/dist/src/service/registry.d.ts +40 -0
- package/dist/src/service/registry.js +13 -0
- package/dist/src/service/replies.d.ts +26 -0
- package/dist/src/service/replies.js +56 -0
- package/dist/src/service/run-handlers.d.ts +4 -0
- package/dist/src/service/run-handlers.js +263 -0
- package/dist/src/service/service.d.ts +58 -0
- package/dist/src/service/service.js +212 -0
- package/dist/src/service/submission-handler.d.ts +4 -0
- package/dist/src/service/submission-handler.js +206 -0
- package/dist/src/service/transport.d.ts +16 -0
- package/dist/src/service/transport.js +141 -0
- package/dist/src/service/worker-port.d.ts +85 -0
- package/dist/src/service/worker-port.js +126 -0
- package/dist/src/service/worker-totals.d.ts +3 -0
- package/dist/src/service/worker-totals.js +28 -0
- package/dist/src/step-bridge.d.ts +57 -0
- package/dist/src/step-bridge.js +4 -0
- package/dist/src/steps/decision-gate.d.ts +2 -0
- package/dist/src/steps/decision-gate.js +8 -0
- package/dist/src/steps/load-cycle.d.ts +10 -0
- package/dist/src/steps/load-cycle.js +11 -0
- package/dist/src/steps/protected-effect.d.ts +2 -0
- package/dist/src/steps/protected-effect.js +8 -0
- package/dist/src/storage/decision-rows.d.ts +54 -0
- package/dist/src/storage/decision-rows.js +72 -0
- package/dist/src/storage/decision-snapshots.d.ts +17 -0
- package/dist/src/storage/decision-snapshots.js +25 -0
- package/dist/src/storage/domain-changes.d.ts +48 -0
- package/dist/src/storage/domain-changes.js +213 -0
- package/dist/src/storage/domain-rows.d.ts +85 -0
- package/dist/src/storage/domain-rows.js +129 -0
- package/dist/src/storage/domain-schema.d.ts +32 -0
- package/dist/src/storage/domain-schema.js +193 -0
- package/dist/src/storage/effect-changes.d.ts +5 -0
- package/dist/src/storage/effect-changes.js +105 -0
- package/dist/src/storage/effect-rows.d.ts +67 -0
- package/dist/src/storage/effect-rows.js +74 -0
- package/dist/src/storage/effect-schema.d.ts +1 -0
- package/dist/src/storage/effect-schema.js +59 -0
- package/dist/src/storage/statements.d.ts +9 -0
- package/dist/src/storage/statements.js +8 -0
- package/dist/src/submission.d.ts +42 -0
- package/dist/src/submission.js +71 -0
- package/dist/src/ticket-status.d.ts +8 -0
- package/dist/src/ticket-status.js +45 -0
- package/dist/src/token-prices.d.ts +19 -0
- package/dist/src/token-prices.js +76 -0
- package/dist/src/turn-profile.d.ts +13 -0
- package/dist/src/turn-profile.js +100 -0
- package/dist/src/worker-usage.d.ts +22 -0
- package/dist/src/worker-usage.js +44 -0
- package/dist/src/workflow-admission.d.ts +45 -0
- package/dist/src/workflow-admission.js +151 -0
- package/dist/src/workflow-candidate.d.ts +29 -0
- package/dist/src/workflow-candidate.js +59 -0
- package/dist/src/workflow-contracts.d.ts +29 -0
- package/dist/src/workflow-contracts.js +110 -0
- package/dist/src/workflow-declaration.d.ts +11 -0
- package/dist/src/workflow-declaration.js +59 -0
- package/dist/src/workflow-resources.d.ts +8 -0
- package/dist/src/workflow-resources.js +14 -0
- package/dist/src/workflows.d.ts +6 -0
- package/dist/src/workflows.js +4 -0
- package/dist/tools/compile-workflows.d.ts +1 -0
- package/dist/tools/compile-workflows.js +33 -0
- package/dist/tools/self-host-processes.d.ts +10 -0
- package/dist/tools/self-host-processes.js +156 -0
- package/dist/tools/self-host-workflows.d.ts +15 -0
- package/dist/tools/self-host-workflows.js +78 -0
- package/dist/tools/self-host.d.ts +1 -0
- package/dist/tools/self-host.js +261 -0
- package/dist/tools/self-update-host.d.ts +13 -0
- package/dist/tools/self-update-host.js +88 -0
- package/dist/tools/self-update.d.ts +11 -0
- package/dist/tools/self-update.js +177 -0
- package/dist/tools/workflow-manifest.d.ts +3 -0
- package/dist/tools/workflow-manifest.js +34 -0
- package/dist/workflows/analyze-chats.d.ts +10 -0
- package/dist/workflows/analyze-chats.declaration.json +9 -0
- package/dist/workflows/analyze-chats.js +73 -0
- package/dist/workflows/develop-prd.d.ts +7 -0
- package/dist/workflows/develop-prd.js +97 -0
- package/dist/workflows/develop-ticket.d.ts +9 -0
- package/dist/workflows/develop-ticket.js +202 -0
- package/dist/workflows/issue-labels.d.ts +16 -0
- package/dist/workflows/issue-labels.js +70 -0
- package/dist/workflows/ticket-prompts.d.ts +35 -0
- package/dist/workflows/ticket-prompts.js +133 -0
- package/package.json +84 -75
- package/dist/abstract_gpt/index.js +0 -55
- package/dist/cloving_gpt/adapters/Adapter.js +0 -2
- package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
- package/dist/cloving_gpt/adapters/claude.js +0 -128
- package/dist/cloving_gpt/adapters/gemini.js +0 -135
- package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
- package/dist/cloving_gpt/adapters/index.js +0 -2
- package/dist/cloving_gpt/adapters/mistral.js +0 -128
- package/dist/cloving_gpt/adapters/ollama.js +0 -128
- package/dist/cloving_gpt/adapters/openai.js +0 -100
- package/dist/cloving_gpt/index.js +0 -192
- package/dist/commands/analyze.js +0 -47
- package/dist/commands/chat.js +0 -14
- package/dist/commands/check.js +0 -7
- package/dist/commands/commit.js +0 -44
- package/dist/commands/config.js +0 -167
- package/dist/commands/describe.js +0 -235
- package/dist/commands/generate/code.js +0 -21
- package/dist/commands/generate/commit.js +0 -11
- package/dist/commands/generate/context.js +0 -82
- package/dist/commands/generate/docs.js +0 -11
- package/dist/commands/generate/documentation.js +0 -11
- package/dist/commands/generate/fizzbuzz.js +0 -35
- package/dist/commands/generate/init.js +0 -15
- package/dist/commands/generate/review.js +0 -11
- package/dist/commands/generate/sh.js +0 -95
- package/dist/commands/generate/shell.js +0 -11
- package/dist/commands/generate/unit_tests.js +0 -11
- package/dist/commands/init.js +0 -13
- package/dist/commands/models.js +0 -22
- package/dist/commands/project/build.js +0 -88
- package/dist/commands/project/complete.js +0 -12
- package/dist/commands/project/init.js +0 -82
- package/dist/commands/project/plan.js +0 -108
- package/dist/commands/proxy.js +0 -11
- package/dist/commands/review.js +0 -50
- package/dist/commands/tokens.js +0 -75
- package/dist/commands/unit_tests.js +0 -150
- package/dist/commands/update.js +0 -7
- package/dist/file2.js +0 -4
- package/dist/index.js +0 -136
- package/dist/managers/BlockManager.js +0 -120
- package/dist/managers/ChatManager.js +0 -653
- package/dist/managers/ChunkManager.js +0 -32
- package/dist/managers/CodeManager.js +0 -185
- package/dist/managers/CommitManager.js +0 -78
- package/dist/managers/DocsManager.js +0 -88
- package/dist/managers/DocumentationManager.js +0 -114
- package/dist/managers/InitManager.js +0 -230
- package/dist/managers/ProxyManager.js +0 -210
- package/dist/managers/ReviewManager.js +0 -131
- package/dist/managers/ShellManager.js +0 -163
- package/dist/managers/StreamManager.js +0 -308
- package/dist/managers/UnitTestManager.js +0 -243
- package/dist/managers/src/managers/ProxyManager.js +0 -1
- package/dist/newfile.js +0 -2
- package/dist/package.json +0 -86
- package/dist/utils/command_utils.js +0 -384
- package/dist/utils/config_utils.js +0 -249
- package/dist/utils/gitUtils.js +0 -42
- package/dist/utils/git_utils.js +0 -217
- package/dist/utils/modelUtils.js +0 -7
- package/dist/utils/model_utils.js +0 -7
- package/dist/utils/prompt_utils.js +0 -333
- package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
- package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
- package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
- package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
- package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
- package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
- package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
- package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
- package/dist/utils/prompts/index.js +0 -27
- package/dist/utils/string_utils.js +0 -505
- package/dist/utils/types.js +0 -2
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { numberFields, textFields, } from "./transitions.js";
|
|
2
|
+
import { commandEvents, parseCommand } from "./commands.js";
|
|
3
|
+
import { parseEvent } from "./events.js";
|
|
4
|
+
import { gateKey } from "./gates.js";
|
|
5
|
+
import { emptyEffects, evidenceOf, } from "./operations.js";
|
|
6
|
+
import { reduce } from "./reduction.js";
|
|
7
|
+
export const emptyAuthority = {
|
|
8
|
+
sequence: 0,
|
|
9
|
+
runs: {},
|
|
10
|
+
commands: {},
|
|
11
|
+
intents: [],
|
|
12
|
+
gates: {},
|
|
13
|
+
details: {},
|
|
14
|
+
questions: 0,
|
|
15
|
+
effects: emptyEffects,
|
|
16
|
+
};
|
|
17
|
+
export function execute(state, proposed) {
|
|
18
|
+
const command = parseCommand(proposed.command);
|
|
19
|
+
if (!command)
|
|
20
|
+
return { kind: "rejected", reason: "invalid-command" };
|
|
21
|
+
const request = canonical(command);
|
|
22
|
+
const existing = state.commands[command.commandId];
|
|
23
|
+
if (existing)
|
|
24
|
+
return existing.request === request
|
|
25
|
+
? { kind: "duplicate", sequence: existing.sequence }
|
|
26
|
+
: { kind: "rejected", reason: "conflicting-command" };
|
|
27
|
+
if (staleRevision(state, command))
|
|
28
|
+
return { kind: "rejected", reason: "stale-revision" };
|
|
29
|
+
const event = commandEvent(command, {
|
|
30
|
+
sequence: state.sequence + 1,
|
|
31
|
+
request,
|
|
32
|
+
recordedAt: proposed.recordedAt,
|
|
33
|
+
});
|
|
34
|
+
const reduction = reduce(state, event);
|
|
35
|
+
if (reduction.kind === "invalid")
|
|
36
|
+
return { kind: "rejected", reason: reduction.reason };
|
|
37
|
+
return {
|
|
38
|
+
kind: "accepted",
|
|
39
|
+
events: [event],
|
|
40
|
+
state: reduction.state,
|
|
41
|
+
intents: reduction.intents,
|
|
42
|
+
...(reduction.disposition === undefined
|
|
43
|
+
? {}
|
|
44
|
+
: { disposition: reduction.disposition }),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function rebuild(events) {
|
|
48
|
+
let state = emptyAuthority;
|
|
49
|
+
for (const [index, value] of events.entries())
|
|
50
|
+
state = applyEvent(state, { value, index }).state;
|
|
51
|
+
return state;
|
|
52
|
+
}
|
|
53
|
+
export function applyEvent(state, entry) {
|
|
54
|
+
const { value, index } = entry;
|
|
55
|
+
const event = parseEvent(value);
|
|
56
|
+
if (!event)
|
|
57
|
+
throw new Error(`invalid-event: ${String(index + 1)} malformed-event`);
|
|
58
|
+
if (!requestMatches(event))
|
|
59
|
+
throw new Error(`invalid-event: ${String(index + 1)} request-mismatch`);
|
|
60
|
+
const reduction = reduce(state, event);
|
|
61
|
+
if (reduction.kind === "invalid")
|
|
62
|
+
throw new Error(`invalid-event: ${String(event.sequence)} ${reduction.reason}`);
|
|
63
|
+
return {
|
|
64
|
+
state: reduction.state,
|
|
65
|
+
event,
|
|
66
|
+
evidence: evidenceOf(event, reduction.disposition),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function commandEvent(command, record) {
|
|
70
|
+
const { sequence, request, recordedAt } = record;
|
|
71
|
+
const payload = {};
|
|
72
|
+
for (const name of payloadFields) {
|
|
73
|
+
const value = command[name];
|
|
74
|
+
if (value !== undefined)
|
|
75
|
+
payload[name] = String(value);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
sequence,
|
|
79
|
+
type: commandEvents[command.kind] ?? "run.created",
|
|
80
|
+
runId: command.runId,
|
|
81
|
+
commandId: command.commandId,
|
|
82
|
+
recordedAt,
|
|
83
|
+
request,
|
|
84
|
+
payload,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function staleRevision(state, command) {
|
|
88
|
+
const run = state.runs[command.runId];
|
|
89
|
+
if (!run || command.expectedRevision === undefined)
|
|
90
|
+
return false;
|
|
91
|
+
const gate = command.kind === "decide-gate"
|
|
92
|
+
? state.gates[gateKey(command.runId, command.gateId ?? "")]
|
|
93
|
+
: undefined;
|
|
94
|
+
if (gate === undefined || gate.kind === "untyped")
|
|
95
|
+
return command.expectedRevision !== run.revision;
|
|
96
|
+
return gate.outcome === null && command.expectedRevision !== gate.revision;
|
|
97
|
+
}
|
|
98
|
+
const payloadFields = [
|
|
99
|
+
...textFields,
|
|
100
|
+
...numberFields.filter((name) => name !== "expectedRevision"),
|
|
101
|
+
];
|
|
102
|
+
function canonical(value) {
|
|
103
|
+
const fields = value;
|
|
104
|
+
return JSON.stringify(Object.fromEntries(Object.keys(fields)
|
|
105
|
+
.sort()
|
|
106
|
+
.map((key) => [key, fields[key]])));
|
|
107
|
+
}
|
|
108
|
+
export function eligibleIntents(state) {
|
|
109
|
+
return state.intents.filter((intent) => eligible(state, intent));
|
|
110
|
+
}
|
|
111
|
+
function eligible(state, intent) {
|
|
112
|
+
if (intent.kind === "protected-effect")
|
|
113
|
+
return (state.effects.operations[intent.operationId]?.status ===
|
|
114
|
+
"dispatch-pending");
|
|
115
|
+
return (state.runs[intent.runId]?.status ===
|
|
116
|
+
(intent.kind === "start-run" ? "queued" : "running"));
|
|
117
|
+
}
|
|
118
|
+
function requestMatches(event) {
|
|
119
|
+
let value;
|
|
120
|
+
try {
|
|
121
|
+
value = JSON.parse(event.request);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
const command = parseCommand(value);
|
|
127
|
+
if (!command || canonical(command) !== event.request)
|
|
128
|
+
return false;
|
|
129
|
+
const expected = commandEvent(command, event);
|
|
130
|
+
return JSON.stringify(sorted(expected)) === JSON.stringify(sorted(event));
|
|
131
|
+
}
|
|
132
|
+
function sorted(event) {
|
|
133
|
+
return [
|
|
134
|
+
event.type,
|
|
135
|
+
event.runId,
|
|
136
|
+
event.commandId,
|
|
137
|
+
Object.entries(event.payload).sort(([left], [right]) => left < right ? -1 : 1),
|
|
138
|
+
];
|
|
139
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type RunDetails } from "./details.ts";
|
|
2
|
+
import { type GateState } from "./gates.ts";
|
|
3
|
+
import { type Disposition, type EffectState } from "./operations.ts";
|
|
4
|
+
import type { AuthorityEvent, AuthorityState, EffectIntent, RunState } from "./transitions.ts";
|
|
5
|
+
export interface Applied {
|
|
6
|
+
readonly kind: "applied";
|
|
7
|
+
readonly state: AuthorityState;
|
|
8
|
+
readonly intents: readonly EffectIntent[];
|
|
9
|
+
readonly disposition?: Disposition;
|
|
10
|
+
}
|
|
11
|
+
export type Reduction = Applied | {
|
|
12
|
+
readonly kind: "invalid";
|
|
13
|
+
readonly reason: string;
|
|
14
|
+
};
|
|
15
|
+
export interface Recorded {
|
|
16
|
+
readonly event: AuthorityEvent;
|
|
17
|
+
readonly commands: AuthorityState["commands"];
|
|
18
|
+
readonly run: RunState;
|
|
19
|
+
readonly details: RunDetails;
|
|
20
|
+
}
|
|
21
|
+
export interface Change extends Recorded {
|
|
22
|
+
readonly moved?: RunState;
|
|
23
|
+
readonly gates?: readonly GateState[];
|
|
24
|
+
readonly added?: readonly EffectIntent[];
|
|
25
|
+
readonly questions?: number;
|
|
26
|
+
readonly observed?: RunDetails;
|
|
27
|
+
readonly effects?: EffectState;
|
|
28
|
+
readonly released?: readonly string[];
|
|
29
|
+
readonly disposition?: Disposition;
|
|
30
|
+
}
|
|
31
|
+
export type Handler = (state: AuthorityState, recorded: Recorded) => Reduction;
|
|
32
|
+
export declare function invalid(reason: string): Reduction;
|
|
33
|
+
export declare function text(event: AuthorityEvent, name: string): string;
|
|
34
|
+
export declare function identity(scope: Readonly<Record<string, unknown>>): string;
|
|
35
|
+
export declare function retained(intents: readonly EffectIntent[], event: AuthorityEvent): readonly EffectIntent[];
|
|
36
|
+
export declare function applied(state: AuthorityState, change: Change): Applied;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { operationIdentity } from "../operation-identity.js";
|
|
2
|
+
import { continued } from "./details.js";
|
|
3
|
+
import { gateKey } from "./gates.js";
|
|
4
|
+
import { endedRun } from "./operations.js";
|
|
5
|
+
export function invalid(reason) {
|
|
6
|
+
return { kind: "invalid", reason };
|
|
7
|
+
}
|
|
8
|
+
export function text(event, name) {
|
|
9
|
+
return event.payload[name] ?? "";
|
|
10
|
+
}
|
|
11
|
+
export function identity(scope) {
|
|
12
|
+
const result = operationIdentity(scope);
|
|
13
|
+
return result.kind === "valid" ? result.value : "";
|
|
14
|
+
}
|
|
15
|
+
const ended = ["run.cancelled", "run.failed", "run.completed"];
|
|
16
|
+
export function retained(intents, event) {
|
|
17
|
+
if (ended.includes(event.type))
|
|
18
|
+
return intents.filter((intent) => intent.runId !== event.runId);
|
|
19
|
+
if (event.type === "run.started")
|
|
20
|
+
return intents.filter((intent) => intent.runId !== event.runId || intent.kind !== "start-run");
|
|
21
|
+
return intents;
|
|
22
|
+
}
|
|
23
|
+
function nextEffects(state, change) {
|
|
24
|
+
const effects = change.effects ?? state.effects;
|
|
25
|
+
return ended.includes(change.event.type)
|
|
26
|
+
? endedRun(effects, change.event)
|
|
27
|
+
: effects;
|
|
28
|
+
}
|
|
29
|
+
function nextIntents(state, change) {
|
|
30
|
+
const released = change.released ?? [];
|
|
31
|
+
return [
|
|
32
|
+
...retained(state.intents, change.event).filter((intent) => !released.includes(intent.operationId)),
|
|
33
|
+
...(change.added ?? []),
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
function nextDetails(change) {
|
|
37
|
+
const details = change.observed ?? change.details;
|
|
38
|
+
const continuation = (change.added ?? []).some((intent) => intent.kind === "continue-run");
|
|
39
|
+
return continuation ? continued(details) : details;
|
|
40
|
+
}
|
|
41
|
+
export function applied(state, change) {
|
|
42
|
+
const { event } = change;
|
|
43
|
+
return {
|
|
44
|
+
kind: "applied",
|
|
45
|
+
...(change.disposition === undefined
|
|
46
|
+
? {}
|
|
47
|
+
: { disposition: change.disposition }),
|
|
48
|
+
state: {
|
|
49
|
+
sequence: event.sequence,
|
|
50
|
+
runs: change.moved
|
|
51
|
+
? { ...state.runs, [event.runId]: change.moved }
|
|
52
|
+
: state.runs,
|
|
53
|
+
commands: change.commands,
|
|
54
|
+
effects: nextEffects(state, change),
|
|
55
|
+
intents: nextIntents(state, change),
|
|
56
|
+
gates: {
|
|
57
|
+
...state.gates,
|
|
58
|
+
...Object.fromEntries((change.gates ?? []).map((gate) => [
|
|
59
|
+
gateKey(gate.runId, gate.gateId),
|
|
60
|
+
gate,
|
|
61
|
+
])),
|
|
62
|
+
},
|
|
63
|
+
details: { ...state.details, [event.runId]: nextDetails(change) },
|
|
64
|
+
questions: change.questions ?? state.questions,
|
|
65
|
+
},
|
|
66
|
+
intents: change.added ?? [],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Reduction } from "./reduction-state.ts";
|
|
2
|
+
import { type AuthorityEvent, type AuthorityState } from "./transitions.ts";
|
|
3
|
+
export { gateContinuation } from "./gate-reduction.ts";
|
|
4
|
+
export type { Reduction } from "./reduction-state.ts";
|
|
5
|
+
export declare function startOperation(runId: string): string;
|
|
6
|
+
export declare function reduce(state: AuthorityState, event: AuthorityEvent): Reduction;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { admittedDetails, observed } from "./details.js";
|
|
2
|
+
import { settled } from "./gates.js";
|
|
3
|
+
import { admittedBudgets } from "./budgets.js";
|
|
4
|
+
import { requested } from "./effect-requests.js";
|
|
5
|
+
import { reconciled, reported, stopReported } from "./effect-results.js";
|
|
6
|
+
import { decided, expired, opened, registered } from "./gate-reduction.js";
|
|
7
|
+
import { expired as leaseExpired, granted } from "./leases.js";
|
|
8
|
+
import { applied, identity, invalid, text, } from "./reduction-state.js";
|
|
9
|
+
import { transition, } from "./transitions.js";
|
|
10
|
+
export { gateContinuation } from "./gate-reduction.js";
|
|
11
|
+
function moved(type) {
|
|
12
|
+
return (state, recorded) => {
|
|
13
|
+
const result = transition(recorded.run, {
|
|
14
|
+
type,
|
|
15
|
+
gateId: text(recorded.event, "gateId"),
|
|
16
|
+
});
|
|
17
|
+
if (result.kind === "invalid")
|
|
18
|
+
return result;
|
|
19
|
+
return applied(state, { ...recorded, moved: result.run });
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function closed(type) {
|
|
23
|
+
return (state, recorded) => {
|
|
24
|
+
const { event, run } = recorded;
|
|
25
|
+
const result = transition(run, { type, gateId: "" });
|
|
26
|
+
if (result.kind === "invalid")
|
|
27
|
+
return result;
|
|
28
|
+
const outcome = { decision: null, answer: null, sequence: event.sequence };
|
|
29
|
+
return applied(state, {
|
|
30
|
+
...recorded,
|
|
31
|
+
moved: result.run,
|
|
32
|
+
gates: Object.values(state.gates)
|
|
33
|
+
.filter((gate) => gate.runId === run.runId && gate.outcome === null)
|
|
34
|
+
.map((gate) => settled(gate, outcome)),
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function observation(state, recorded) {
|
|
39
|
+
return applied(state, {
|
|
40
|
+
...recorded,
|
|
41
|
+
observed: observed(recorded.details, recorded.event),
|
|
42
|
+
effects: stopReported(state.effects, recorded.event),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function dispatched(state, recorded) {
|
|
46
|
+
const operationId = text(recorded.event, "operationId");
|
|
47
|
+
const remaining = state.intents.filter((intent) => intent.runId !== recorded.event.runId ||
|
|
48
|
+
intent.operationId !== operationId);
|
|
49
|
+
if (remaining.length === state.intents.length)
|
|
50
|
+
return invalid("unknown-intent");
|
|
51
|
+
return applied({ ...state, intents: remaining }, recorded);
|
|
52
|
+
}
|
|
53
|
+
function effect(rule) {
|
|
54
|
+
return (state, recorded) => {
|
|
55
|
+
const { event, run } = recorded;
|
|
56
|
+
const result = rule(state.effects, { event, runStatus: run.status });
|
|
57
|
+
if (result.kind === "invalid")
|
|
58
|
+
return result;
|
|
59
|
+
const present = new Set(state.intents.map((intent) => intent.operationId));
|
|
60
|
+
return applied(state, {
|
|
61
|
+
...recorded,
|
|
62
|
+
effects: result.effects,
|
|
63
|
+
...(result.released === undefined ? {} : { released: result.released }),
|
|
64
|
+
...(result.disposition === undefined
|
|
65
|
+
? {}
|
|
66
|
+
: { disposition: result.disposition }),
|
|
67
|
+
added: (result.added ?? [])
|
|
68
|
+
.filter((operationId) => !present.has(operationId))
|
|
69
|
+
.map((operationId) => ({
|
|
70
|
+
kind: "protected-effect",
|
|
71
|
+
runId: event.runId,
|
|
72
|
+
operationId,
|
|
73
|
+
})),
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const handlers = {
|
|
78
|
+
"effect.requested": effect(requested),
|
|
79
|
+
"lease.granted": effect(granted),
|
|
80
|
+
"lease.expired": effect(leaseExpired),
|
|
81
|
+
"effect.reported": effect(reported),
|
|
82
|
+
"operation.reconciled": effect(reconciled),
|
|
83
|
+
"run.started": moved("run.started"),
|
|
84
|
+
"run.paused": moved("run.paused"),
|
|
85
|
+
"run.resumed": moved("run.resumed"),
|
|
86
|
+
"run.completed": moved("run.completed"),
|
|
87
|
+
"run.cancelled": closed("run.cancelled"),
|
|
88
|
+
"run.failed": closed("run.failed"),
|
|
89
|
+
"run.observed": observation,
|
|
90
|
+
"gate.opened": opened,
|
|
91
|
+
"gate.wait-registered": registered,
|
|
92
|
+
"gate.decided": decided,
|
|
93
|
+
"gate.expired": expired,
|
|
94
|
+
"step.dispatched": dispatched,
|
|
95
|
+
};
|
|
96
|
+
export function startOperation(runId) {
|
|
97
|
+
return identity({
|
|
98
|
+
run: runId,
|
|
99
|
+
phase: "admission",
|
|
100
|
+
round: 0,
|
|
101
|
+
operation: "start-run",
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function created(state, recorded) {
|
|
105
|
+
const { event, commands } = recorded;
|
|
106
|
+
if (state.runs[event.runId])
|
|
107
|
+
return invalid("existing-run");
|
|
108
|
+
const intent = {
|
|
109
|
+
kind: "start-run",
|
|
110
|
+
runId: event.runId,
|
|
111
|
+
operationId: startOperation(event.runId),
|
|
112
|
+
};
|
|
113
|
+
return {
|
|
114
|
+
kind: "applied",
|
|
115
|
+
state: {
|
|
116
|
+
...state,
|
|
117
|
+
sequence: event.sequence,
|
|
118
|
+
runs: {
|
|
119
|
+
...state.runs,
|
|
120
|
+
[event.runId]: {
|
|
121
|
+
runId: event.runId,
|
|
122
|
+
status: "queued",
|
|
123
|
+
revision: 1,
|
|
124
|
+
workflow: text(event, "workflow"),
|
|
125
|
+
pausedFrom: null,
|
|
126
|
+
gates: [],
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
commands,
|
|
130
|
+
intents: [...state.intents, intent],
|
|
131
|
+
details: {
|
|
132
|
+
...state.details,
|
|
133
|
+
[event.runId]: admittedDetails(event.runId, event.payload),
|
|
134
|
+
},
|
|
135
|
+
effects: {
|
|
136
|
+
...state.effects,
|
|
137
|
+
budgets: admittedBudgets(state.effects.budgets, event),
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
intents: [intent],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export function reduce(state, event) {
|
|
144
|
+
if (event.sequence !== state.sequence + 1)
|
|
145
|
+
return invalid("sequence-gap");
|
|
146
|
+
if (state.commands[event.commandId])
|
|
147
|
+
return invalid("duplicate-command");
|
|
148
|
+
const commands = {
|
|
149
|
+
...state.commands,
|
|
150
|
+
[event.commandId]: { request: event.request, sequence: event.sequence },
|
|
151
|
+
};
|
|
152
|
+
const handler = handlers[event.type];
|
|
153
|
+
if (handler === undefined)
|
|
154
|
+
return created(state, { event, commands });
|
|
155
|
+
const run = state.runs[event.runId];
|
|
156
|
+
const details = state.details[event.runId];
|
|
157
|
+
if (!run || !details)
|
|
158
|
+
return invalid("unknown-run");
|
|
159
|
+
return handler(state, { event, commands, run, details });
|
|
160
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Assessment, type OperationSummary, type StatusInput } from "./status-input.ts";
|
|
2
|
+
export declare function unresolved(operations: readonly OperationSummary[]): readonly string[];
|
|
3
|
+
export declare function unresolvedEffects(input: StatusInput): readonly string[];
|
|
4
|
+
export declare function cancelled(input: StatusInput): Assessment;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { assessed, } from "./status-input.js";
|
|
2
|
+
const unknownResults = [
|
|
3
|
+
null,
|
|
4
|
+
"failed",
|
|
5
|
+
"stale-epoch",
|
|
6
|
+
];
|
|
7
|
+
export function unresolved(operations) {
|
|
8
|
+
return operations
|
|
9
|
+
.filter((operation) => !operation.outcomes.includes("sent") &&
|
|
10
|
+
operation.outcomes.some((outcome) => unknownResults.includes(outcome)))
|
|
11
|
+
.map((operation) => operation.operationId);
|
|
12
|
+
}
|
|
13
|
+
function stoppedOperation(input) {
|
|
14
|
+
const observation = input.details?.observation ?? null;
|
|
15
|
+
return observation?.condition === "stopped" ? observation.operationId : null;
|
|
16
|
+
}
|
|
17
|
+
export function unresolvedEffects(input) {
|
|
18
|
+
if (input.closure !== null)
|
|
19
|
+
return input.closure.unresolved;
|
|
20
|
+
const stopped = stoppedOperation(input);
|
|
21
|
+
return unresolved(input.operations).filter((operationId) => operationId !== stopped);
|
|
22
|
+
}
|
|
23
|
+
const resolved = {
|
|
24
|
+
closure: "cancelled",
|
|
25
|
+
unresolved: [],
|
|
26
|
+
open: false,
|
|
27
|
+
};
|
|
28
|
+
const cancelling = (code, rest) => assessed("cancelling", { code, ...rest });
|
|
29
|
+
export function cancelled(input) {
|
|
30
|
+
const closure = input.closure ?? resolved;
|
|
31
|
+
if (closure.open)
|
|
32
|
+
return cancelling("delivery-in-flight", {
|
|
33
|
+
nextAction: "reconcile-effect",
|
|
34
|
+
humanInputCanHelp: false,
|
|
35
|
+
});
|
|
36
|
+
if (closure.closure === "stop-unconfirmed")
|
|
37
|
+
return cancelling("stop-unconfirmed", {
|
|
38
|
+
nextAction: "confirm-worker-stop",
|
|
39
|
+
humanInputCanHelp: true,
|
|
40
|
+
});
|
|
41
|
+
if (closure.unresolved.length > 0)
|
|
42
|
+
return cancelling("delivery-outcome-unknown", {
|
|
43
|
+
detail: "The run is dropped. A dispatch has no known result. A stop report of that operation or a later reconciliation resolves it.",
|
|
44
|
+
nextAction: "reconcile-effect",
|
|
45
|
+
humanInputCanHelp: false,
|
|
46
|
+
});
|
|
47
|
+
if (closure.closure === "stop-not-observed")
|
|
48
|
+
return cancelling("stop-not-observed", {
|
|
49
|
+
nextAction: "observe-worker-stop",
|
|
50
|
+
humanInputCanHelp: false,
|
|
51
|
+
});
|
|
52
|
+
return assessed("cancelled", {
|
|
53
|
+
code: "run-cancelled",
|
|
54
|
+
nextAction: null,
|
|
55
|
+
humanInputCanHelp: false,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Assessment, type EffectSummary } from "./status-input.ts";
|
|
2
|
+
export interface EffectView {
|
|
3
|
+
readonly operationId: string;
|
|
4
|
+
readonly state: string;
|
|
5
|
+
readonly reason: string | null;
|
|
6
|
+
readonly leaseGeneration: number | null;
|
|
7
|
+
readonly attempts: number;
|
|
8
|
+
readonly limit: number;
|
|
9
|
+
}
|
|
10
|
+
export interface Recovery {
|
|
11
|
+
readonly attempts: number;
|
|
12
|
+
readonly limit: number | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function uncertainEffect(effects: readonly EffectSummary[]): Assessment | undefined;
|
|
15
|
+
export declare function effectViews(effects: readonly EffectSummary[]): readonly EffectView[];
|
|
16
|
+
export declare function effectRecovery(effects: readonly EffectSummary[]): Recovery | undefined;
|
|
17
|
+
export declare function effectEvidence(sequences: readonly number[]): readonly string[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { assessed, } from "./status-input.js";
|
|
2
|
+
const blocked = assessed("uncertain-effect", {
|
|
3
|
+
code: "effect-blocked",
|
|
4
|
+
nextAction: "inspect-effect",
|
|
5
|
+
humanInputCanHelp: true,
|
|
6
|
+
});
|
|
7
|
+
const recovering = assessed("uncertain-effect", {
|
|
8
|
+
code: "effect-recovering",
|
|
9
|
+
nextAction: "reconcile-effect",
|
|
10
|
+
humanInputCanHelp: false,
|
|
11
|
+
});
|
|
12
|
+
export function uncertainEffect(effects) {
|
|
13
|
+
const statuses = effects.map((effect) => effect.status);
|
|
14
|
+
if (statuses.includes("blocked"))
|
|
15
|
+
return blocked;
|
|
16
|
+
return statuses.includes("recovering") ? recovering : undefined;
|
|
17
|
+
}
|
|
18
|
+
function shownReason(effect) {
|
|
19
|
+
const ready = effect.status === "waiting" && effect.reason === "ready";
|
|
20
|
+
return ready ? "capacity" : effect.reason;
|
|
21
|
+
}
|
|
22
|
+
export function effectViews(effects) {
|
|
23
|
+
return effects.map((effect) => ({
|
|
24
|
+
operationId: effect.operationId,
|
|
25
|
+
state: effect.status,
|
|
26
|
+
reason: shownReason(effect),
|
|
27
|
+
leaseGeneration: effect.leaseGeneration,
|
|
28
|
+
attempts: effect.attempts,
|
|
29
|
+
limit: effect.limit,
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
const uncertainStatuses = ["recovering", "blocked"];
|
|
33
|
+
export function effectRecovery(effects) {
|
|
34
|
+
const [largest] = effects
|
|
35
|
+
.filter((effect) => uncertainStatuses.includes(effect.status))
|
|
36
|
+
.sort((left, right) => right.attempts - left.attempts);
|
|
37
|
+
if (largest === undefined)
|
|
38
|
+
return undefined;
|
|
39
|
+
return { attempts: largest.attempts, limit: largest.limit };
|
|
40
|
+
}
|
|
41
|
+
export function effectEvidence(sequences) {
|
|
42
|
+
return sequences.map((sequence) => `event:${String(sequence)}`);
|
|
43
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { RunDetails } from "./details.ts";
|
|
2
|
+
import type { GateState } from "./gates.ts";
|
|
3
|
+
import type { RunClosure } from "./stop-sequence.ts";
|
|
4
|
+
import type { RunState } from "./transitions.ts";
|
|
5
|
+
export interface OperationSummary {
|
|
6
|
+
readonly operationId: string;
|
|
7
|
+
readonly kind: "start-run" | "continue-run" | "protected-effect";
|
|
8
|
+
readonly releasedSequence: number | null;
|
|
9
|
+
readonly outcomes: readonly (string | null)[];
|
|
10
|
+
}
|
|
11
|
+
export interface EffectSummary {
|
|
12
|
+
readonly operationId: string;
|
|
13
|
+
readonly status: string;
|
|
14
|
+
readonly reason: string | null;
|
|
15
|
+
readonly leaseGeneration: number | null;
|
|
16
|
+
readonly attempts: number;
|
|
17
|
+
readonly limit: number;
|
|
18
|
+
}
|
|
19
|
+
export interface BudgetSummary {
|
|
20
|
+
readonly limit: number;
|
|
21
|
+
readonly spent: number;
|
|
22
|
+
}
|
|
23
|
+
export interface StatusInput {
|
|
24
|
+
readonly run: RunState;
|
|
25
|
+
readonly details: RunDetails | undefined;
|
|
26
|
+
readonly gates: readonly GateState[];
|
|
27
|
+
readonly operations: readonly OperationSummary[];
|
|
28
|
+
readonly latestSequence: number;
|
|
29
|
+
readonly silent: boolean;
|
|
30
|
+
readonly closure: RunClosure | null;
|
|
31
|
+
readonly effects: readonly EffectSummary[];
|
|
32
|
+
readonly budget: BudgetSummary | null;
|
|
33
|
+
readonly effectEvidence: readonly number[];
|
|
34
|
+
}
|
|
35
|
+
export interface Assessment {
|
|
36
|
+
readonly condition: string;
|
|
37
|
+
readonly code: string;
|
|
38
|
+
readonly nextAction: string | null;
|
|
39
|
+
readonly nextActionAt?: string | null;
|
|
40
|
+
readonly detail?: string;
|
|
41
|
+
readonly humanInputCanHelp: boolean;
|
|
42
|
+
}
|
|
43
|
+
export declare function last(operation: OperationSummary): string | null | undefined;
|
|
44
|
+
export declare function inFlight(operations: readonly OperationSummary[]): boolean;
|
|
45
|
+
export declare function assessed(condition: string, rest: Omit<Assessment, "condition">): Assessment;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function last(operation) {
|
|
2
|
+
return operation.outcomes.at(-1);
|
|
3
|
+
}
|
|
4
|
+
export function inFlight(operations) {
|
|
5
|
+
return operations.some((operation) => last(operation) === null);
|
|
6
|
+
}
|
|
7
|
+
export function assessed(condition, rest) {
|
|
8
|
+
return { condition, ...rest };
|
|
9
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type EffectView, type Recovery } from "./status-effects.ts";
|
|
2
|
+
import { type BudgetSummary, type StatusInput } from "./status-input.ts";
|
|
3
|
+
import type { RunStatus } from "./transitions.ts";
|
|
4
|
+
export { unresolved, unresolvedEffects } from "./status-closure.ts";
|
|
5
|
+
export type { EffectView } from "./status-effects.ts";
|
|
6
|
+
export type { Assessment, BudgetSummary, EffectSummary, OperationSummary, StatusInput, } from "./status-input.ts";
|
|
7
|
+
export interface RunView {
|
|
8
|
+
readonly runId: string;
|
|
9
|
+
readonly workflow: string;
|
|
10
|
+
readonly state: RunStatus;
|
|
11
|
+
readonly condition: string;
|
|
12
|
+
readonly revision: number;
|
|
13
|
+
readonly latestSequence: number;
|
|
14
|
+
readonly pendingDecisions: readonly string[];
|
|
15
|
+
readonly reason: {
|
|
16
|
+
readonly code: string;
|
|
17
|
+
readonly detail: string;
|
|
18
|
+
};
|
|
19
|
+
readonly evidence: readonly string[];
|
|
20
|
+
readonly lastConfirmedObservation: {
|
|
21
|
+
readonly at: string;
|
|
22
|
+
readonly sequence: number;
|
|
23
|
+
readonly source: string;
|
|
24
|
+
} | null;
|
|
25
|
+
readonly recovery: Recovery;
|
|
26
|
+
readonly budget: BudgetSummary | null;
|
|
27
|
+
readonly effects: readonly EffectView[];
|
|
28
|
+
readonly nextAction: string | null;
|
|
29
|
+
readonly nextActionAt: string | null;
|
|
30
|
+
readonly humanInputCanHelp: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function runView(input: StatusInput): RunView;
|