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,186 @@
|
|
|
1
|
+
import { record } from "../protocol.js";
|
|
2
|
+
function show(value) {
|
|
3
|
+
return typeof value === "string" ? value : JSON.stringify(value);
|
|
4
|
+
}
|
|
5
|
+
function escaped(character) {
|
|
6
|
+
return `\\u${(character.codePointAt(0) ?? 0).toString(16).padStart(4, "0")}`;
|
|
7
|
+
}
|
|
8
|
+
const hiddenRanges = [
|
|
9
|
+
[0x00, 0x1f],
|
|
10
|
+
[0x7f, 0x9f],
|
|
11
|
+
[0x061c, 0x061c],
|
|
12
|
+
[0x200b, 0x200f],
|
|
13
|
+
[0x2028, 0x202e],
|
|
14
|
+
[0x2060, 0x2069],
|
|
15
|
+
[0xfeff, 0xfeff],
|
|
16
|
+
];
|
|
17
|
+
function hidden(character) {
|
|
18
|
+
const code = character.codePointAt(0) ?? 0;
|
|
19
|
+
return hiddenRanges.some(([first, last]) => code >= first && code <= last);
|
|
20
|
+
}
|
|
21
|
+
function visible(value) {
|
|
22
|
+
return show(value)
|
|
23
|
+
.split("\n")
|
|
24
|
+
.map((line) => Array.from(line, (character) => hidden(character) ? escaped(character) : character).join(""))
|
|
25
|
+
.join("\n ");
|
|
26
|
+
}
|
|
27
|
+
export function errorText(error) {
|
|
28
|
+
const { candidates } = error;
|
|
29
|
+
const lines = [`${visible(error["code"])}: ${visible(error["detail"])}`];
|
|
30
|
+
if (Array.isArray(candidates))
|
|
31
|
+
lines.push(`Candidates: ${candidates.map(visible).join(", ")}`);
|
|
32
|
+
return lines.map((line) => `${line}\n`).join("");
|
|
33
|
+
}
|
|
34
|
+
function part(value, name) {
|
|
35
|
+
return record(value)?.[name];
|
|
36
|
+
}
|
|
37
|
+
function listing(value) {
|
|
38
|
+
const items = Array.isArray(value) ? value.map(show) : [];
|
|
39
|
+
return items.length === 0 ? "none" : items.join(", ");
|
|
40
|
+
}
|
|
41
|
+
function receiptLines(result) {
|
|
42
|
+
const receipt = result["receipt"];
|
|
43
|
+
return [
|
|
44
|
+
`Command ID: ${show(result["commandId"])}`,
|
|
45
|
+
`Receipt: sequence ${show(part(receipt, "sequence"))}, recorded at ${show(part(receipt, "recordedAt"))}`,
|
|
46
|
+
...(result["replayed"] === true
|
|
47
|
+
? ["This is the receipt of the earlier equal command."]
|
|
48
|
+
: []),
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
function admitted(result) {
|
|
52
|
+
return [
|
|
53
|
+
`Run ${show(result["runId"])} is admitted.`,
|
|
54
|
+
...receiptLines(result),
|
|
55
|
+
"The run is queued. Admission is not completed work.",
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
function runLine(run) {
|
|
59
|
+
return ` ${show(part(run, "runId"))} ${show(part(run, "workflowId"))} ${show(part(run, "condition"))} revision ${show(part(run, "revision"))} latest at ${show(part(run, "latestAt") ?? "none")}`;
|
|
60
|
+
}
|
|
61
|
+
function runList(result) {
|
|
62
|
+
const runs = result["runs"];
|
|
63
|
+
const lines = Array.isArray(runs) ? runs.map(runLine) : [];
|
|
64
|
+
return [
|
|
65
|
+
`Workflows: ${visible(listing(result["workflows"]))}`,
|
|
66
|
+
"Runs:",
|
|
67
|
+
...(lines.length === 0 ? [" none"] : lines),
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
function observation(value) {
|
|
71
|
+
if (record(value) === undefined)
|
|
72
|
+
return "none";
|
|
73
|
+
return `${show(part(value, "at"))} (sequence ${show(part(value, "sequence"))}, ${show(part(value, "source"))})`;
|
|
74
|
+
}
|
|
75
|
+
function feedbackLines(value) {
|
|
76
|
+
return (Array.isArray(value) ? value : []).map((item) => `Feedback of ${show(part(item, "decisionId"))}: ${visible(part(item, "text"))}`);
|
|
77
|
+
}
|
|
78
|
+
function outcome(value) {
|
|
79
|
+
if (record(value) === undefined)
|
|
80
|
+
return "none";
|
|
81
|
+
const reason = part(value, "reason");
|
|
82
|
+
const kind = visible(part(value, "kind"));
|
|
83
|
+
return typeof reason === "string" ? `${kind}: ${visible(reason)}` : kind;
|
|
84
|
+
}
|
|
85
|
+
export function runStatus(result) {
|
|
86
|
+
const run = result["run"];
|
|
87
|
+
const reason = part(run, "reason");
|
|
88
|
+
const recovery = part(run, "recovery");
|
|
89
|
+
const at = part(run, "nextActionAt") ?? null;
|
|
90
|
+
const cost = part(run, "claudeCostUsd");
|
|
91
|
+
return [
|
|
92
|
+
`Run ${show(part(run, "runId"))} (${show(part(run, "workflowId"))})`,
|
|
93
|
+
`Title: ${visible(part(run, "title") ?? "none")}`,
|
|
94
|
+
`State: ${show(part(run, "state"))}`,
|
|
95
|
+
`Outcome: ${outcome(part(run, "outcome"))}`,
|
|
96
|
+
`Condition: ${show(part(run, "condition"))}`,
|
|
97
|
+
`Reason: ${show(part(reason, "code"))}: ${show(part(reason, "detail"))}`,
|
|
98
|
+
`Revision: ${show(part(run, "revision"))}, latest sequence ${show(part(run, "latestSequence"))}`,
|
|
99
|
+
`Latest at: ${show(part(run, "latestAt") ?? "none")}`,
|
|
100
|
+
`Pending decisions: ${listing(part(run, "pendingDecisions"))}`,
|
|
101
|
+
`Evidence: ${listing(part(run, "evidence"))}`,
|
|
102
|
+
`Last confirmed observation: ${observation(part(run, "lastConfirmedObservation"))}`,
|
|
103
|
+
`Recovery: ${show(part(recovery, "attempts"))} of ${show(part(recovery, "limit") ?? "no limit")}`,
|
|
104
|
+
`Claude cost: ${(typeof cost === "number" ? cost : 0).toFixed(2)} USD`,
|
|
105
|
+
`Next action: ${show(part(run, "nextAction") ?? "none")}${at === null ? "" : ` at ${show(at)}`}`,
|
|
106
|
+
`Human input can help: ${part(run, "humanInputCanHelp") === true ? "yes" : "no"}`,
|
|
107
|
+
...feedbackLines(part(run, "feedback")),
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
function binding(decision) {
|
|
111
|
+
return `--expected-revision ${show(part(decision, "revision"))} --generation ${show(part(decision, "generation"))} --subject-digest ${show(part(decision, "subjectDigest"))}`;
|
|
112
|
+
}
|
|
113
|
+
function suggestion(decision, command) {
|
|
114
|
+
const reference = part(decision, "label") ?? part(decision, "decisionId");
|
|
115
|
+
const head = ` cloving ${show(command)} ${show(reference)}`;
|
|
116
|
+
const tail = binding(decision);
|
|
117
|
+
if (command === "answer")
|
|
118
|
+
return `${head} --text <answer> ${tail}`;
|
|
119
|
+
if (command === "deny")
|
|
120
|
+
return `${head} --text "<feedback>" ${tail}`;
|
|
121
|
+
return `${head} ${tail}`;
|
|
122
|
+
}
|
|
123
|
+
export function decisionLines(decision) {
|
|
124
|
+
const allowed = part(decision, "allowed");
|
|
125
|
+
const label = part(decision, "label");
|
|
126
|
+
return [
|
|
127
|
+
`${label === null ? "" : `${show(label)} `}${show(part(decision, "type"))} ${show(part(decision, "decisionId"))}`,
|
|
128
|
+
` Prompt: ${visible(part(decision, "prompt"))}`,
|
|
129
|
+
...feedbackLines(part(decision, "feedback")).map((line) => ` ${line}`),
|
|
130
|
+
...(Array.isArray(allowed) ? allowed : []).map((command) => suggestion(decision, command)),
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
export function decisionList(result) {
|
|
134
|
+
const decisions = result["decisions"];
|
|
135
|
+
const lines = Array.isArray(decisions)
|
|
136
|
+
? decisions.flatMap(decisionLines)
|
|
137
|
+
: [];
|
|
138
|
+
return lines.length === 0 ? ["No decision waits."] : lines;
|
|
139
|
+
}
|
|
140
|
+
function decisionRecorded(result) {
|
|
141
|
+
const run = result["run"];
|
|
142
|
+
return [
|
|
143
|
+
`Decision ${show(result["decisionId"])} is recorded as ${show(result["decision"])}.`,
|
|
144
|
+
...receiptLines(result),
|
|
145
|
+
`Run state: ${show(part(run, "state"))}, revision ${show(part(run, "revision"))}`,
|
|
146
|
+
`Continuation: ${show(result["continuation"])}`,
|
|
147
|
+
];
|
|
148
|
+
}
|
|
149
|
+
function runCommand(result) {
|
|
150
|
+
const committed = result["committed"];
|
|
151
|
+
const observed = result["observed"];
|
|
152
|
+
return [
|
|
153
|
+
`Run ${show(result["runId"])}: ${show(result["command"])} is committed. State ${show(part(committed, "state"))}, revision ${show(part(committed, "revision"))}.`,
|
|
154
|
+
...receiptLines(result),
|
|
155
|
+
`Revoked intents: ${show(part(committed, "revokedIntents"))}`,
|
|
156
|
+
`Observed: ${show(part(observed, "condition"))}`,
|
|
157
|
+
`Unresolved effects: ${listing(part(observed, "unresolvedEffects"))}`,
|
|
158
|
+
];
|
|
159
|
+
}
|
|
160
|
+
export function eventText(event) {
|
|
161
|
+
return `${show(event["sequence"])} ${show(event["recordedAt"])} ${show(event["type"])} ${show(event["runId"])} ${JSON.stringify(event["payload"])}`;
|
|
162
|
+
}
|
|
163
|
+
function eventPage(result) {
|
|
164
|
+
const events = result["events"];
|
|
165
|
+
return (Array.isArray(events) ? events : []).map((event) => eventText(record(event) ?? {}));
|
|
166
|
+
}
|
|
167
|
+
const renderers = new Map([
|
|
168
|
+
["run-admitted", admitted],
|
|
169
|
+
["run-list", runList],
|
|
170
|
+
["run-status", runStatus],
|
|
171
|
+
["decision-list", decisionList],
|
|
172
|
+
["decision-recorded", decisionRecorded],
|
|
173
|
+
["run-command", runCommand],
|
|
174
|
+
["event-page", eventPage],
|
|
175
|
+
]);
|
|
176
|
+
export function rendered(result) {
|
|
177
|
+
const lines = renderers.get(show(result["kind"]))?.(result) ?? [];
|
|
178
|
+
return lines.map((line) => `${line}\n`).join("");
|
|
179
|
+
}
|
|
180
|
+
export function pendingSummary(result) {
|
|
181
|
+
const decisions = result["decisions"];
|
|
182
|
+
const lines = (Array.isArray(decisions) ? decisions : []).map((decision) => ` ${show(part(decision, "label") ?? part(decision, "type"))} ${show(part(decision, "decisionId"))}: ${visible(part(decision, "prompt"))}`);
|
|
183
|
+
return ["Pending decisions:", ...(lines.length === 0 ? [" none"] : lines)]
|
|
184
|
+
.map((line) => `${line}\n`)
|
|
185
|
+
.join("");
|
|
186
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export type RunSource = {
|
|
2
|
+
readonly kind: "prompt";
|
|
3
|
+
readonly text: string;
|
|
4
|
+
} | {
|
|
5
|
+
readonly kind: "ticket";
|
|
6
|
+
readonly id: string;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: "input";
|
|
9
|
+
readonly file: string;
|
|
10
|
+
};
|
|
11
|
+
type DecisionCommand = "answer" | "approve" | "deny";
|
|
12
|
+
type RunCommand = "pause" | "resume" | "drop";
|
|
13
|
+
export type RuntimeInvocation = {
|
|
14
|
+
readonly kind: "command-help";
|
|
15
|
+
readonly command: string;
|
|
16
|
+
} | {
|
|
17
|
+
readonly kind: "run";
|
|
18
|
+
readonly workflowId: string;
|
|
19
|
+
readonly source: RunSource;
|
|
20
|
+
readonly commandId: string | null;
|
|
21
|
+
readonly json: boolean;
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: "status";
|
|
24
|
+
readonly runId: string | null;
|
|
25
|
+
readonly limit: number | null;
|
|
26
|
+
readonly after: string | null;
|
|
27
|
+
readonly json: boolean;
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: "questions";
|
|
30
|
+
readonly runId: string | null;
|
|
31
|
+
readonly json: boolean;
|
|
32
|
+
} | {
|
|
33
|
+
readonly kind: "decision";
|
|
34
|
+
readonly command: DecisionCommand;
|
|
35
|
+
readonly reference: string;
|
|
36
|
+
readonly text: string | null;
|
|
37
|
+
readonly expectedRevision: number;
|
|
38
|
+
readonly generation: number;
|
|
39
|
+
readonly subjectDigest: string;
|
|
40
|
+
readonly commandId: string | null;
|
|
41
|
+
readonly json: boolean;
|
|
42
|
+
} | {
|
|
43
|
+
readonly kind: "run-command";
|
|
44
|
+
readonly command: RunCommand;
|
|
45
|
+
readonly runId: string;
|
|
46
|
+
readonly expectedRevision: number;
|
|
47
|
+
readonly commandId: string | null;
|
|
48
|
+
readonly json: boolean;
|
|
49
|
+
} | {
|
|
50
|
+
readonly kind: "events";
|
|
51
|
+
readonly runId: string | null;
|
|
52
|
+
readonly after: number;
|
|
53
|
+
readonly limit: number | null;
|
|
54
|
+
readonly follow: boolean;
|
|
55
|
+
readonly json: boolean;
|
|
56
|
+
} | {
|
|
57
|
+
readonly kind: "watch";
|
|
58
|
+
readonly port: number | null;
|
|
59
|
+
readonly json: boolean;
|
|
60
|
+
};
|
|
61
|
+
export interface GivenOption {
|
|
62
|
+
readonly name: string;
|
|
63
|
+
readonly value: string | undefined;
|
|
64
|
+
}
|
|
65
|
+
export interface RuntimeRequest {
|
|
66
|
+
readonly command: string;
|
|
67
|
+
readonly positionals: readonly string[];
|
|
68
|
+
readonly options: readonly GivenOption[];
|
|
69
|
+
}
|
|
70
|
+
type Outcome = RuntimeInvocation | string;
|
|
71
|
+
export declare function isRuntimeCommand(command: string): boolean;
|
|
72
|
+
export declare function runtimeInvocation(request: RuntimeRequest): Outcome;
|
|
73
|
+
export {};
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { isRecordKey } from "../authority/commands.js";
|
|
2
|
+
const identifier = /^[A-Za-z0-9._:/-]{1,128}$/;
|
|
3
|
+
const decisionReference = /^[A-Za-z0-9._:/-]{1,256}$/;
|
|
4
|
+
const sha256Digest = /^sha256:[0-9a-f]{64}$/;
|
|
5
|
+
const wholeNumber = /^(?:0|[1-9][0-9]*)$/;
|
|
6
|
+
const invalid = Symbol("invalid");
|
|
7
|
+
const revisions = { minimum: 1, maximum: Number.MAX_SAFE_INTEGER };
|
|
8
|
+
const sequences = { minimum: 0, maximum: Number.MAX_SAFE_INTEGER };
|
|
9
|
+
const bindingOptions = ["expected-revision", "generation", "subject-digest"];
|
|
10
|
+
const mutationOptions = ["command-id", "json"];
|
|
11
|
+
const shapes = new Map([
|
|
12
|
+
[
|
|
13
|
+
"run",
|
|
14
|
+
{
|
|
15
|
+
subject: "required",
|
|
16
|
+
required: [],
|
|
17
|
+
allowed: () => ["prompt", "input", "ticket", "next", ...mutationOptions],
|
|
18
|
+
build: run,
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
[
|
|
22
|
+
"status",
|
|
23
|
+
{
|
|
24
|
+
subject: "optional",
|
|
25
|
+
required: [],
|
|
26
|
+
allowed: statusOptions,
|
|
27
|
+
build: status,
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
"questions",
|
|
32
|
+
{
|
|
33
|
+
subject: "optional",
|
|
34
|
+
required: [],
|
|
35
|
+
allowed: () => ["json"],
|
|
36
|
+
build: questions,
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
["answer", decisionShape("answer")],
|
|
40
|
+
["approve", decisionShape("approve")],
|
|
41
|
+
["deny", decisionShape("deny")],
|
|
42
|
+
["pause", runCommandShape("pause")],
|
|
43
|
+
["resume", runCommandShape("resume")],
|
|
44
|
+
["drop", runCommandShape("drop")],
|
|
45
|
+
[
|
|
46
|
+
"events",
|
|
47
|
+
{
|
|
48
|
+
subject: "optional",
|
|
49
|
+
required: [],
|
|
50
|
+
allowed: eventOptions,
|
|
51
|
+
build: events,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"watch",
|
|
56
|
+
{
|
|
57
|
+
subject: "none",
|
|
58
|
+
required: [],
|
|
59
|
+
allowed: () => ["port"],
|
|
60
|
+
build: watch,
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
]);
|
|
64
|
+
export function isRuntimeCommand(command) {
|
|
65
|
+
return shapes.has(command);
|
|
66
|
+
}
|
|
67
|
+
export function runtimeInvocation(request) {
|
|
68
|
+
const shape = shapes.get(request.command);
|
|
69
|
+
if (shape === undefined)
|
|
70
|
+
return "unknown-command";
|
|
71
|
+
const names = request.options.map((option) => option.name);
|
|
72
|
+
if (new Set(names).size !== names.length)
|
|
73
|
+
return "repeated-option";
|
|
74
|
+
if (names.includes("help"))
|
|
75
|
+
return { kind: "command-help", command: request.command };
|
|
76
|
+
return shapeFailure(shape, request) ?? shape.build(request);
|
|
77
|
+
}
|
|
78
|
+
function shapeFailure(shape, request) {
|
|
79
|
+
const names = request.options.map((option) => option.name);
|
|
80
|
+
const allowed = shape.allowed(request);
|
|
81
|
+
const count = request.positionals.length;
|
|
82
|
+
if (names.some((name) => !allowed.includes(name)))
|
|
83
|
+
return "unexpected-option";
|
|
84
|
+
if (shape.subject === "required" && count === 0)
|
|
85
|
+
return "missing-argument";
|
|
86
|
+
if (count > (shape.subject === "none" ? 0 : 1))
|
|
87
|
+
return "unexpected-argument";
|
|
88
|
+
if (shape.required.some((name) => !names.includes(name)))
|
|
89
|
+
return "missing-option";
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
function decisionShape(command) {
|
|
93
|
+
const required = command === "answer" ? [...bindingOptions, "text"] : bindingOptions;
|
|
94
|
+
const optional = command === "deny" ? ["text"] : [];
|
|
95
|
+
return {
|
|
96
|
+
subject: "required",
|
|
97
|
+
required,
|
|
98
|
+
allowed: () => [...required, ...optional, ...mutationOptions],
|
|
99
|
+
build: (request) => decision(command, request),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function runCommandShape(command) {
|
|
103
|
+
return {
|
|
104
|
+
subject: "required",
|
|
105
|
+
required: ["expected-revision"],
|
|
106
|
+
allowed: () => ["expected-revision", ...mutationOptions],
|
|
107
|
+
build: (request) => runCommand(command, request),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function statusOptions(request) {
|
|
111
|
+
return request.positionals.length === 0
|
|
112
|
+
? ["limit", "after", "json"]
|
|
113
|
+
: ["json"];
|
|
114
|
+
}
|
|
115
|
+
function eventOptions(request) {
|
|
116
|
+
return given(request, "follow")
|
|
117
|
+
? ["after", "follow", "json"]
|
|
118
|
+
: ["after", "limit", "follow", "json"];
|
|
119
|
+
}
|
|
120
|
+
function given(request, name) {
|
|
121
|
+
return request.options.some((option) => option.name === name);
|
|
122
|
+
}
|
|
123
|
+
function valueOf(request, name) {
|
|
124
|
+
return request.options.find((option) => option.name === name)?.value;
|
|
125
|
+
}
|
|
126
|
+
function blank(value) {
|
|
127
|
+
return value?.trim() === "";
|
|
128
|
+
}
|
|
129
|
+
function matching(value, pattern) {
|
|
130
|
+
if (value === undefined)
|
|
131
|
+
return null;
|
|
132
|
+
return pattern.test(value) ? value : invalid;
|
|
133
|
+
}
|
|
134
|
+
function key(value) {
|
|
135
|
+
if (value === undefined)
|
|
136
|
+
return null;
|
|
137
|
+
return isRecordKey(value) ? value : invalid;
|
|
138
|
+
}
|
|
139
|
+
function whole(value, range) {
|
|
140
|
+
if (value === undefined)
|
|
141
|
+
return null;
|
|
142
|
+
if (!wholeNumber.test(value))
|
|
143
|
+
return invalid;
|
|
144
|
+
const number = Number(value);
|
|
145
|
+
return number >= range.minimum && number <= range.maximum ? number : invalid;
|
|
146
|
+
}
|
|
147
|
+
function inputSource(request) {
|
|
148
|
+
const prompt = valueOf(request, "prompt");
|
|
149
|
+
const input = valueOf(request, "input");
|
|
150
|
+
const ticket = valueOf(request, "ticket");
|
|
151
|
+
const next = given(request, "next");
|
|
152
|
+
const sources = [prompt, input, ticket].filter((value) => value !== undefined);
|
|
153
|
+
if (sources.length + Number(next) > 1)
|
|
154
|
+
return "conflicting-input-sources";
|
|
155
|
+
if (prompt !== undefined)
|
|
156
|
+
return { kind: "prompt", text: prompt };
|
|
157
|
+
if (input !== undefined)
|
|
158
|
+
return { kind: "input", file: input };
|
|
159
|
+
if (ticket !== undefined)
|
|
160
|
+
return { kind: "ticket", id: ticket };
|
|
161
|
+
if (next)
|
|
162
|
+
return { kind: "ticket", id: "next" };
|
|
163
|
+
return "missing-input-source";
|
|
164
|
+
}
|
|
165
|
+
function run(request) {
|
|
166
|
+
const source = inputSource(request);
|
|
167
|
+
if (typeof source === "string")
|
|
168
|
+
return source;
|
|
169
|
+
if (blank(valueOf(request, "prompt")))
|
|
170
|
+
return "empty-prompt";
|
|
171
|
+
const workflowId = matching(request.positionals[0], identifier);
|
|
172
|
+
const commandId = key(valueOf(request, "command-id"));
|
|
173
|
+
const unusable = typeof workflowId !== "string" ||
|
|
174
|
+
key(valueOf(request, "ticket")) === invalid;
|
|
175
|
+
if (unusable || commandId === invalid)
|
|
176
|
+
return "invalid-option-value";
|
|
177
|
+
const json = given(request, "json");
|
|
178
|
+
return { kind: "run", workflowId, source, commandId, json };
|
|
179
|
+
}
|
|
180
|
+
function status(request) {
|
|
181
|
+
const runId = key(request.positionals[0]);
|
|
182
|
+
const limit = whole(valueOf(request, "limit"), { minimum: 1, maximum: 500 });
|
|
183
|
+
const after = matching(valueOf(request, "after"), identifier);
|
|
184
|
+
if (runId === invalid || limit === invalid || after === invalid)
|
|
185
|
+
return "invalid-option-value";
|
|
186
|
+
const json = given(request, "json");
|
|
187
|
+
return { kind: "status", runId, limit, after, json };
|
|
188
|
+
}
|
|
189
|
+
function watch(request) {
|
|
190
|
+
const port = whole(valueOf(request, "port"), { minimum: 0, maximum: 65535 });
|
|
191
|
+
if (port === invalid)
|
|
192
|
+
return "invalid-option-value";
|
|
193
|
+
return { kind: "watch", port, json: false };
|
|
194
|
+
}
|
|
195
|
+
function questions(request) {
|
|
196
|
+
const runId = key(request.positionals[0]);
|
|
197
|
+
if (runId === invalid)
|
|
198
|
+
return "invalid-option-value";
|
|
199
|
+
return { kind: "questions", runId, json: given(request, "json") };
|
|
200
|
+
}
|
|
201
|
+
function decision(command, request) {
|
|
202
|
+
const answer = valueOf(request, "text");
|
|
203
|
+
if (blank(answer))
|
|
204
|
+
return "empty-prompt";
|
|
205
|
+
const reference = matching(request.positionals[0], decisionReference);
|
|
206
|
+
const expectedRevision = whole(valueOf(request, "expected-revision"), revisions);
|
|
207
|
+
const generation = whole(valueOf(request, "generation"), revisions);
|
|
208
|
+
const subjectDigest = matching(valueOf(request, "subject-digest"), sha256Digest);
|
|
209
|
+
const commandId = key(valueOf(request, "command-id"));
|
|
210
|
+
if (typeof reference !== "string" ||
|
|
211
|
+
typeof expectedRevision !== "number" ||
|
|
212
|
+
typeof generation !== "number" ||
|
|
213
|
+
typeof subjectDigest !== "string" ||
|
|
214
|
+
commandId === invalid)
|
|
215
|
+
return "invalid-option-value";
|
|
216
|
+
const subject = { command, reference, text: answer ?? null };
|
|
217
|
+
const binding = { expectedRevision, generation, subjectDigest };
|
|
218
|
+
const json = given(request, "json");
|
|
219
|
+
return { kind: "decision", ...subject, ...binding, commandId, json };
|
|
220
|
+
}
|
|
221
|
+
function runCommand(command, request) {
|
|
222
|
+
const runId = key(request.positionals[0]);
|
|
223
|
+
const expectedRevision = whole(valueOf(request, "expected-revision"), revisions);
|
|
224
|
+
const commandId = key(valueOf(request, "command-id"));
|
|
225
|
+
if (typeof runId !== "string" ||
|
|
226
|
+
typeof expectedRevision !== "number" ||
|
|
227
|
+
commandId === invalid)
|
|
228
|
+
return "invalid-option-value";
|
|
229
|
+
const json = given(request, "json");
|
|
230
|
+
return {
|
|
231
|
+
kind: "run-command",
|
|
232
|
+
command,
|
|
233
|
+
runId,
|
|
234
|
+
expectedRevision,
|
|
235
|
+
commandId,
|
|
236
|
+
json,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function events(request) {
|
|
240
|
+
const runId = key(request.positionals[0]);
|
|
241
|
+
const after = whole(valueOf(request, "after"), sequences);
|
|
242
|
+
const limit = whole(valueOf(request, "limit"), { minimum: 1, maximum: 1000 });
|
|
243
|
+
if (runId === invalid || after === invalid || limit === invalid)
|
|
244
|
+
return "invalid-option-value";
|
|
245
|
+
const follow = given(request, "follow");
|
|
246
|
+
const json = given(request, "json");
|
|
247
|
+
return { kind: "events", runId, after: after ?? 0, limit, follow, json };
|
|
248
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
function given(value) {
|
|
3
|
+
return value !== undefined && value.length > 0;
|
|
4
|
+
}
|
|
5
|
+
export function clientCommand(environment) {
|
|
6
|
+
const explicit = environment["CLOVING_RUNTIME_DIR"];
|
|
7
|
+
return given(explicit)
|
|
8
|
+
? `CLOVING_RUNTIME_DIR=${explicit} cloving`
|
|
9
|
+
: "cloving";
|
|
10
|
+
}
|
|
11
|
+
export function runtimeDirectory(environment) {
|
|
12
|
+
const explicit = environment["CLOVING_RUNTIME_DIR"];
|
|
13
|
+
if (given(explicit))
|
|
14
|
+
return explicit;
|
|
15
|
+
const runtime = environment["XDG_RUNTIME_DIR"];
|
|
16
|
+
if (given(runtime))
|
|
17
|
+
return join(runtime, "cloving");
|
|
18
|
+
const state = environment["XDG_STATE_HOME"];
|
|
19
|
+
if (given(state))
|
|
20
|
+
return join(state, "cloving", "run");
|
|
21
|
+
const home = environment["HOME"];
|
|
22
|
+
return given(home)
|
|
23
|
+
? join(home, ".local", "state", "cloving", "run")
|
|
24
|
+
: undefined;
|
|
25
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { findPackageJSON } from "node:module";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { access, readFile, realpath } from "node:fs/promises";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import packageMetadata from "#package" with { type: "json" };
|
|
6
|
+
const qualifiedNode = "v26.9.0";
|
|
7
|
+
export async function observedToolchain(start) {
|
|
8
|
+
const root = await projectRoot(start);
|
|
9
|
+
const sdk = await packageDirectory(start, "workflow");
|
|
10
|
+
const core = sdk === undefined
|
|
11
|
+
? undefined
|
|
12
|
+
: await packageDirectory(sdk, "@workflow/core");
|
|
13
|
+
const lock = await readFile(join(root, "package-lock.json")).catch(() => null);
|
|
14
|
+
return {
|
|
15
|
+
sdk: `workflow@${await installedVersion(start, "workflow")}`,
|
|
16
|
+
world: `@workflow/world-local@${await installedVersion(core ?? start, "@workflow/world-local")}`,
|
|
17
|
+
builder: `@workflow/builders@${await installedVersion(start, "@workflow/builders")}`,
|
|
18
|
+
node: process.version,
|
|
19
|
+
dependencies: lock === null
|
|
20
|
+
? "missing"
|
|
21
|
+
: createHash("sha256").update(lock).digest("hex"),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export async function qualifiedToolchain(observed, start) {
|
|
25
|
+
const sdk = await packageDirectory(start, "workflow");
|
|
26
|
+
const core = await packageFields(sdk ?? start, "@workflow/core");
|
|
27
|
+
const declared = fields(core["dependencies"])["@workflow/world-local"];
|
|
28
|
+
return {
|
|
29
|
+
sdk: `workflow@${packageMetadata.dependencies.workflow}`,
|
|
30
|
+
world: `@workflow/world-local@${typeof declared === "string" ? declared : "undeclared"}`,
|
|
31
|
+
builder: `@workflow/builders@${packageMetadata.dependencies["@workflow/builders"]}`,
|
|
32
|
+
node: qualifiedNode,
|
|
33
|
+
dependencies: observed.dependencies,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async function projectRoot(start) {
|
|
37
|
+
let directory = start;
|
|
38
|
+
for (;;) {
|
|
39
|
+
const found = await access(join(directory, "package-lock.json")).then(() => true, () => false);
|
|
40
|
+
const parent = dirname(directory);
|
|
41
|
+
if (found || parent === directory)
|
|
42
|
+
return directory;
|
|
43
|
+
directory = parent;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function installedVersion(root, name) {
|
|
47
|
+
const version = (await packageFields(root, name))["version"];
|
|
48
|
+
return typeof version === "string" ? version : "missing";
|
|
49
|
+
}
|
|
50
|
+
async function packageFields(root, name) {
|
|
51
|
+
const directory = await packageDirectory(root, name);
|
|
52
|
+
if (directory === undefined)
|
|
53
|
+
return {};
|
|
54
|
+
const text = await readFile(join(directory, "package.json"), "utf8").catch(() => "{}");
|
|
55
|
+
return fields(JSON.parse(text));
|
|
56
|
+
}
|
|
57
|
+
function fields(value) {
|
|
58
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
59
|
+
return {};
|
|
60
|
+
return Object.fromEntries(Object.entries(value));
|
|
61
|
+
}
|
|
62
|
+
async function packageDirectory(start, name) {
|
|
63
|
+
try {
|
|
64
|
+
const file = findPackageJSON(name, join(start, "package.json"));
|
|
65
|
+
return file === undefined ? undefined : dirname(await realpath(file));
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error instanceof Error &&
|
|
69
|
+
"code" in error &&
|
|
70
|
+
error.code === "ERR_MODULE_NOT_FOUND")
|
|
71
|
+
return undefined;
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const commandUsage: Readonly<Record<string, string>>;
|
|
2
|
+
export declare const usage = "Usage: cloving [--help] [--version]\n cloving workflows validate <manifest-path> [--input <json-file>] [--json]\n cloving <command> [--help]\n\nCommands:\n workflows validate Check a compiled workflow manifest, its artifacts and optional runtime input.\n chats import Import explicitly selected Claude Code transcripts into private runtime files.\n run Submit one run of an admitted workflow.\n status List the runs or show one run.\n questions List the pending decisions.\n answer Answer one design question.\n approve Approve one pending approval.\n deny Deny one pending approval.\n pause Stop new dispatch for a run.\n resume Resume a paused run.\n drop Cancel a run and keep its files.\n events Print the committed events.\n watch Serve a page that shows the runs live.\n start Start the service for a repository.\n\nThe runtime commands need a Cloving service. CLOVING_RUNTIME_DIR names its runtime directory.\nUse npm exec -- cloving ... for a project-local installation.\n";
|
|
3
|
+
export declare const chatsImportUsage = "Usage: cloving chats import [--] <path> [<path> ...]\n\nImports only the selected Claude Code JSONL files. Relative paths use the current directory.\nThis local command needs no service. It does not expand globs or scan directories.\nThe file limit is 10 MiB (10,485,760 bytes). Links and nonregular files are refused.\nPrivate corpus.jsonl and coverage.json files go into a new import directory under the runtime directory's chats directory.\nThe runtime selection is CLOVING_RUNTIME_DIR, XDG_RUNTIME_DIR, XDG_STATE_HOME, then HOME.\nOutput contains only counts, fixed codes and an opaque import ID. Source paths stay in the private manifest.\nExit codes: 0 for complete coverage, 1 for refused sources or output failure, 2 for invalid usage.\n";
|
|
4
|
+
export declare const validateUsage = "Usage: cloving workflows validate <manifest-path> [--input <json-file>] [--json]\n\nChecks a Cloving workflow manifest, its compiled SDK artifacts, declared resources and toolchain, and an optional runtime input file. Relative paths resolve against the current directory.\n\nOptions:\n --input <json-file> Validate this runtime input file.\n --json Print one versioned JSON result on stdout.\n\nValidation does not admit a run, dispatch effects, import workflow code or call a model.\n\nExample:\n cloving workflows validate cloving.workflow.json --input input.json\n";
|