cloving 1.1.0 → 1.3.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/README.md +584 -144
- package/assets/watch-fonts/fira-code-OFL.md +93 -0
- package/assets/watch-fonts/fira-code-latin-400-normal.woff2 +0 -0
- package/assets/watch-fonts/fira-code-latin-500-normal.woff2 +0 -0
- package/assets/watch-fonts/heebo-OFL.md +93 -0
- package/assets/watch-fonts/heebo-latin-500-normal.woff2 +0 -0
- package/assets/watch-fonts/heebo-latin-700-normal.woff2 +0 -0
- package/assets/watch-fonts/heebo-latin-800-normal.woff2 +0 -0
- package/assets/watch-fonts/manifest.json +112 -0
- package/assets/watch-fonts/space-grotesk-OFL.md +93 -0
- package/assets/watch-fonts/space-grotesk-latin-400-normal.woff2 +0 -0
- package/assets/watch-fonts/space-grotesk-latin-500-normal.woff2 +0 -0
- package/assets/watch-fonts/space-grotesk-latin-600-normal.woff2 +0 -0
- package/assets/watch-fonts/space-grotesk-latin-700-normal.woff2 +0 -0
- package/dist/src/agent-harness-shell.d.ts +12 -0
- package/dist/src/agent-harness-shell.js +90 -0
- package/dist/src/agent-harness-versions.d.ts +8 -0
- package/dist/src/agent-harness-versions.js +49 -0
- package/dist/src/agent-harnesses.d.ts +4 -0
- package/dist/src/agent-harnesses.js +13 -0
- package/dist/src/authority/commands.d.ts +2 -0
- package/dist/src/authority/commands.js +49 -8
- package/dist/src/authority/dispatch-decision.d.ts +1 -0
- package/dist/src/authority/dispatch-decision.js +7 -4
- package/dist/src/authority/events.js +2 -2
- package/dist/src/authority/gate-reduction.d.ts +1 -0
- package/dist/src/authority/gate-reduction.js +18 -3
- package/dist/src/authority/gates.d.ts +2 -1
- package/dist/src/authority/gates.js +5 -1
- package/dist/src/authority/handoff-chain.d.ts +24 -0
- package/dist/src/authority/handoff-chain.js +46 -0
- package/dist/src/authority/operations.js +1 -1
- package/dist/src/authority/reconciliation.d.ts +1 -0
- package/dist/src/authority/reconciliation.js +18 -11
- package/dist/src/authority/reduction.d.ts +1 -1
- package/dist/src/authority/reduction.js +6 -1
- package/dist/src/authority/status-input.d.ts +1 -1
- package/dist/src/authority/status.d.ts +1 -0
- package/dist/src/authority/status.js +27 -3
- package/dist/src/authority/transitions.d.ts +5 -5
- package/dist/src/authority/transitions.js +9 -0
- package/dist/src/broker/actor/authority-delivery.js +1 -0
- package/dist/src/broker/actor/authority-queries.d.ts +11 -1
- package/dist/src/broker/actor/authority-queries.js +67 -3
- package/dist/src/broker/actor/authority-receipts.js +11 -1
- package/dist/src/broker/actor/authority-session.js +2 -2
- package/dist/src/broker/actor/authority-settings.js +4 -0
- package/dist/src/broker/actor/delivery-intents.d.ts +3 -1
- package/dist/src/broker/actor/delivery-intents.js +4 -4
- package/dist/src/broker/actor/effect-delivery.js +13 -1
- package/dist/src/broker/actor/effect-queries.d.ts +1 -0
- package/dist/src/broker/actor/effect-queries.js +7 -0
- package/dist/src/broker/actor/pin-check.js +1 -1
- package/dist/src/broker/actor/stop-plan.js +1 -1
- package/dist/src/broker/actor/turn-state.js +1 -1
- package/dist/src/broker/authority-admission.js +26 -5
- package/dist/src/broker/authority-restore.js +1 -0
- package/dist/src/broker/decision-restore.js +4 -4
- package/dist/src/broker/socket-address.d.ts +3 -1
- package/dist/src/broker/socket-address.js +2 -2
- package/dist/src/cli/arguments.d.ts +11 -13
- package/dist/src/cli/arguments.js +37 -107
- package/dist/src/cli/command-effects.d.ts +7 -0
- package/dist/src/cli/command-effects.js +39 -0
- package/dist/src/cli/commands.js +11 -4
- package/dist/src/cli/config-arguments.d.ts +11 -0
- package/dist/src/cli/config-arguments.js +59 -0
- package/dist/src/cli/config-command.d.ts +2 -0
- package/dist/src/cli/config-command.js +105 -0
- package/dist/src/cli/config-file.d.ts +3 -0
- package/dist/src/cli/config-file.js +50 -0
- package/dist/src/cli/config-lock.d.ts +7 -0
- package/dist/src/cli/config-lock.js +61 -0
- package/dist/src/cli/config-notice.d.ts +5 -0
- package/dist/src/cli/config-notice.js +46 -0
- package/dist/src/cli/doctor-github.d.ts +9 -0
- package/dist/src/cli/doctor-github.js +138 -0
- package/dist/src/cli/doctor-harness.d.ts +13 -0
- package/dist/src/cli/doctor-harness.js +242 -0
- package/dist/src/cli/doctor-local.d.ts +18 -0
- package/dist/src/cli/doctor-local.js +77 -0
- package/dist/src/cli/doctor-runtime.d.ts +15 -0
- package/dist/src/cli/doctor-runtime.js +176 -0
- package/dist/src/cli/doctor-service.d.ts +1 -0
- package/dist/src/cli/doctor-service.js +11 -0
- package/dist/src/cli/doctor-workflows.d.ts +3 -0
- package/dist/src/cli/doctor-workflows.js +45 -0
- package/dist/src/cli/doctor.d.ts +15 -0
- package/dist/src/cli/doctor.js +190 -0
- package/dist/src/cli/github-ci-progress.d.ts +8 -0
- package/dist/src/cli/github-ci-progress.js +83 -0
- package/dist/src/cli/github-retry.d.ts +6 -0
- package/dist/src/cli/github-retry.js +47 -0
- package/dist/src/cli/harness-probes.d.ts +22 -0
- package/dist/src/cli/harness-probes.js +183 -0
- package/dist/src/cli/main.d.ts +7 -1
- package/dist/src/cli/main.js +39 -61
- package/dist/src/cli/phone-arguments.d.ts +14 -0
- package/dist/src/cli/phone-arguments.js +37 -0
- package/dist/src/cli/phone-client.d.ts +2 -0
- package/dist/src/cli/phone-client.js +32 -0
- package/dist/src/cli/phone-command.d.ts +13 -0
- package/dist/src/cli/phone-command.js +101 -0
- package/dist/src/cli/probe-command.d.ts +36 -0
- package/dist/src/cli/probe-command.js +59 -0
- package/dist/src/cli/project-settings.d.ts +4 -0
- package/dist/src/cli/project-settings.js +33 -0
- package/dist/src/cli/render.d.ts +3 -1
- package/dist/src/cli/render.js +102 -39
- package/dist/src/cli/report-github.d.ts +18 -0
- package/dist/src/cli/report-github.js +200 -0
- package/dist/src/cli/report.d.ts +17 -0
- package/dist/src/cli/report.js +192 -0
- package/dist/src/cli/repository-arguments.d.ts +5 -0
- package/dist/src/cli/repository-arguments.js +34 -0
- package/dist/src/cli/runtime-arguments.d.ts +4 -0
- package/dist/src/cli/runtime-arguments.js +15 -0
- package/dist/src/cli/runtime-directory.d.ts +6 -2
- package/dist/src/cli/runtime-directory.js +72 -14
- package/dist/src/cli/toolchain.d.ts +2 -0
- package/dist/src/cli/toolchain.js +22 -2
- package/dist/src/cli/usage-render.d.ts +5 -0
- package/dist/src/cli/usage-render.js +40 -1
- package/dist/src/cli/usage.d.ts +3 -3
- package/dist/src/cli/usage.js +74 -45
- package/dist/src/cli/watch-actions.d.ts +2 -0
- package/dist/src/cli/watch-actions.js +4 -4
- package/dist/src/cli/watch-board-view.d.ts +12 -1
- package/dist/src/cli/watch-board-view.js +64 -12
- package/dist/src/cli/watch-board.d.ts +7 -1
- package/dist/src/cli/watch-board.js +61 -16
- package/dist/src/cli/watch-card-forms.js +2 -2
- package/dist/src/cli/watch-client.d.ts +1 -1
- package/dist/src/cli/watch-client.js +12 -3
- package/dist/src/cli/watch-header-view.d.ts +27 -0
- package/dist/src/cli/watch-header-view.js +116 -0
- package/dist/src/cli/watch-model.d.ts +10 -4
- package/dist/src/cli/watch-model.js +49 -59
- package/dist/src/cli/watch-page.js +67 -14
- package/dist/src/cli/watch-phases.js +3 -3
- package/dist/src/cli/watch-phone-client.d.ts +1 -0
- package/dist/src/cli/watch-phone-client.js +84 -0
- package/dist/src/cli/watch-phone-view.d.ts +56 -0
- package/dist/src/cli/watch-phone-view.js +113 -0
- package/dist/src/cli/watch-phone.d.ts +5 -0
- package/dist/src/cli/watch-phone.js +53 -0
- package/dist/src/cli/watch-pr-command.d.ts +5 -2
- package/dist/src/cli/watch-pr-command.js +41 -4
- package/dist/src/cli/watch-pr-identity.d.ts +14 -2
- package/dist/src/cli/watch-pr-identity.js +25 -0
- package/dist/src/cli/watch-pr-observer.d.ts +1 -0
- package/dist/src/cli/watch-pr-observer.js +48 -6
- package/dist/src/cli/watch-pull-request.d.ts +12 -0
- package/dist/src/cli/watch-pull-request.js +134 -0
- package/dist/src/cli/watch-reads.d.ts +7 -1
- package/dist/src/cli/watch-reads.js +42 -20
- package/dist/src/cli/watch-render.d.ts +23 -2
- package/dist/src/cli/watch-render.js +2 -1
- package/dist/src/cli/watch-server.js +56 -7
- package/dist/src/cli/watch-turn.d.ts +4 -1
- package/dist/src/cli/watch-turn.js +38 -2
- package/dist/src/cli/watch-usage.js +5 -1
- package/dist/src/cli/watch-view.d.ts +10 -17
- package/dist/src/cli/watch-view.js +33 -77
- package/dist/src/cli.js +106 -23
- package/dist/src/command-settings.d.ts +16 -0
- package/dist/src/command-settings.js +42 -0
- package/dist/src/configuration-change.d.ts +11 -0
- package/dist/src/configuration-change.js +62 -0
- package/dist/src/configuration-display.d.ts +21 -0
- package/dist/src/configuration-display.js +69 -0
- package/dist/src/configuration-schema.d.ts +49 -0
- package/dist/src/configuration-schema.js +159 -0
- package/dist/src/daemon/claude-turn.d.ts +20 -5
- package/dist/src/daemon/claude-turn.js +116 -53
- package/dist/src/daemon/claude-worker.d.ts +3 -5
- package/dist/src/daemon/claude-worker.js +64 -80
- package/dist/src/daemon/command-journal.d.ts +5 -0
- package/dist/src/daemon/command-journal.js +50 -0
- package/dist/src/daemon/command-process.d.ts +28 -0
- package/dist/src/daemon/command-process.js +164 -0
- package/dist/src/daemon/command-worker.d.ts +19 -0
- package/dist/src/daemon/command-worker.js +182 -0
- package/dist/src/daemon/cursor-stream.d.ts +4 -0
- package/dist/src/daemon/cursor-stream.js +154 -0
- package/dist/src/daemon/daemon-adapters.d.ts +58 -0
- package/dist/src/daemon/daemon-adapters.js +102 -0
- package/dist/src/daemon/daemon-loops.d.ts +14 -0
- package/dist/src/daemon/daemon-loops.js +39 -0
- package/dist/src/daemon/daemon.d.ts +3 -30
- package/dist/src/daemon/daemon.js +132 -110
- package/dist/src/daemon/declared-input.d.ts +3 -0
- package/dist/src/daemon/declared-input.js +9 -0
- package/dist/src/daemon/delivery-router.js +7 -1
- package/dist/src/daemon/gemini-stream.d.ts +4 -0
- package/dist/src/daemon/gemini-stream.js +129 -0
- package/dist/src/daemon/github-calls.d.ts +4 -0
- package/dist/src/daemon/github-calls.js +16 -7
- package/dist/src/daemon/github-ci-rerun.d.ts +26 -0
- package/dist/src/daemon/github-ci-rerun.js +92 -0
- package/dist/src/daemon/github-ci.d.ts +6 -0
- package/dist/src/daemon/github-ci.js +251 -0
- package/dist/src/daemon/github-merge-call.d.ts +16 -0
- package/dist/src/daemon/github-merge-call.js +73 -0
- package/dist/src/daemon/github-merge.d.ts +3 -5
- package/dist/src/daemon/github-merge.js +59 -98
- package/dist/src/daemon/github-methods.d.ts +28 -0
- package/dist/src/daemon/github-methods.js +90 -16
- package/dist/src/daemon/github-operation.d.ts +3 -0
- package/dist/src/daemon/github-retry.d.ts +6 -0
- package/dist/src/daemon/github-retry.js +13 -0
- package/dist/src/daemon/github-ticket-status.js +27 -1
- package/dist/src/daemon/github-worker.js +2 -1
- package/dist/src/daemon/handoff-worker.d.ts +10 -0
- package/dist/src/daemon/handoff-worker.js +232 -0
- package/dist/src/daemon/issue-queue.d.ts +2 -0
- package/dist/src/daemon/issue-queue.js +92 -63
- package/dist/src/daemon/notify-journal.d.ts +18 -0
- package/dist/src/daemon/notify-journal.js +108 -0
- package/dist/src/daemon/notify-message.js +2 -1
- package/dist/src/daemon/notify.js +177 -37
- package/dist/src/daemon/opencode-stream.d.ts +5 -0
- package/dist/src/daemon/opencode-stream.js +87 -0
- package/dist/src/daemon/queue-status.d.ts +4 -0
- package/dist/src/daemon/queue-status.js +38 -0
- package/dist/src/daemon/retry-worktree.d.ts +18 -0
- package/dist/src/daemon/retry-worktree.js +139 -0
- package/dist/src/daemon/retrying-turn.d.ts +5 -0
- package/dist/src/daemon/retrying-turn.js +145 -21
- package/dist/src/daemon/schedule-journal.d.ts +19 -0
- package/dist/src/daemon/schedule-journal.js +57 -0
- package/dist/src/daemon/text-output.d.ts +18 -0
- package/dist/src/daemon/text-output.js +44 -0
- package/dist/src/daemon/ticket-dependency-waits.d.ts +18 -0
- package/dist/src/daemon/ticket-dependency-waits.js +60 -0
- package/dist/src/daemon/ticket-registration.d.ts +10 -8
- package/dist/src/daemon/ticket-registration.js +146 -47
- package/dist/src/daemon/ticket-source.d.ts +4 -1
- package/dist/src/daemon/ticket-source.js +8 -2
- package/dist/src/daemon/turn-command.d.ts +10 -0
- package/dist/src/daemon/turn-command.js +33 -0
- package/dist/src/daemon/turn-report.d.ts +18 -0
- package/dist/src/daemon/turn-report.js +79 -0
- package/dist/src/daemon/work-tree.d.ts +2 -1
- package/dist/src/daemon/work-tree.js +15 -12
- package/dist/src/daemon/workflow-generations.d.ts +32 -0
- package/dist/src/daemon/workflow-generations.js +57 -0
- package/dist/src/daemon/workflow-replay.d.ts +16 -0
- package/dist/src/daemon/workflow-replay.js +58 -0
- package/dist/src/daemon/workflow-schedules.d.ts +27 -0
- package/dist/src/daemon/workflow-schedules.js +185 -0
- package/dist/src/decision-visibility.d.ts +2 -0
- package/dist/src/decision-visibility.js +10 -0
- package/dist/src/decision-wait.d.ts +1 -0
- package/dist/src/decision-wait.js +3 -0
- package/dist/src/delivery-backoff.d.ts +1 -0
- package/dist/src/delivery-backoff.js +3 -0
- package/dist/src/doctor-report.d.ts +24 -0
- package/dist/src/doctor-report.js +70 -0
- package/dist/src/execution-pin.d.ts +9 -0
- package/dist/src/execution-pin.js +86 -2
- package/dist/src/grok-result.d.ts +12 -0
- package/dist/src/grok-result.js +61 -0
- package/dist/src/harness-defaults.d.ts +35 -0
- package/dist/src/harness-defaults.js +121 -0
- package/dist/src/host/decision-resume.d.ts +35 -0
- package/dist/src/host/decision-resume.js +86 -0
- package/dist/src/host/gate-bridge.d.ts +48 -0
- package/dist/src/host/gate-bridge.js +124 -0
- package/dist/src/host/run-wait.d.ts +26 -0
- package/dist/src/host/run-wait.js +37 -0
- package/dist/src/host/start-delivery.d.ts +3 -2
- package/dist/src/host/start-delivery.js +11 -4
- package/dist/src/host/step-bridge-host.d.ts +6 -19
- package/dist/src/host/step-bridge-host.js +57 -55
- package/dist/src/host/world-reconciliation.d.ts +1 -0
- package/dist/src/host/world-reconciliation.js +3 -0
- package/dist/src/host/world-runs.js +5 -0
- package/dist/src/issue-identity.d.ts +6 -0
- package/dist/src/issue-identity.js +23 -0
- package/dist/src/merge-request.d.ts +19 -0
- package/dist/src/merge-request.js +32 -0
- package/dist/src/phone/canonical-json.d.ts +1 -0
- package/dist/src/phone/canonical-json.js +16 -0
- package/dist/src/phone/phone-link.d.ts +7 -0
- package/dist/src/phone/phone-link.js +21 -0
- package/dist/src/phone/qr-data.d.ts +8 -0
- package/dist/src/phone/qr-data.js +133 -0
- package/dist/src/phone/qr-matrix.d.ts +6 -0
- package/dist/src/phone/qr-matrix.js +175 -0
- package/dist/src/phone/qr-penalty.d.ts +3 -0
- package/dist/src/phone/qr-penalty.js +67 -0
- package/dist/src/phone/qr-picture.d.ts +5 -0
- package/dist/src/phone/qr-picture.js +24 -0
- package/dist/src/private-config.schema.json +263 -0
- package/dist/src/project-config.schema.json +65 -0
- package/dist/src/project-settings.d.ts +19 -0
- package/dist/src/project-settings.js +131 -0
- package/dist/src/relay/answer-check.d.ts +24 -0
- package/dist/src/relay/answer-check.js +145 -0
- package/dist/src/relay/answer-inbox.d.ts +15 -0
- package/dist/src/relay/answer-inbox.js +173 -0
- package/dist/src/relay/daemon-keys.d.ts +16 -0
- package/dist/src/relay/daemon-keys.js +75 -0
- package/dist/src/relay/decision-check.d.ts +3 -0
- package/dist/src/relay/decision-check.js +77 -0
- package/dist/src/relay/decision-close.d.ts +6 -0
- package/dist/src/relay/decision-close.js +72 -0
- package/dist/src/relay/decision-envelopes.d.ts +29 -0
- package/dist/src/relay/decision-envelopes.js +93 -0
- package/dist/src/relay/decision-watch.d.ts +14 -0
- package/dist/src/relay/decision-watch.js +68 -0
- package/dist/src/relay/envelope-post.d.ts +8 -0
- package/dist/src/relay/envelope-post.js +71 -0
- package/dist/src/relay/envelope.d.ts +28 -0
- package/dist/src/relay/envelope.js +53 -0
- package/dist/src/relay/hpke.d.ts +25 -0
- package/dist/src/relay/hpke.js +108 -0
- package/dist/src/relay/pairing-checks.d.ts +42 -0
- package/dist/src/relay/pairing-checks.js +172 -0
- package/dist/src/relay/pairing-follow.d.ts +8 -0
- package/dist/src/relay/pairing-follow.js +95 -0
- package/dist/src/relay/pairing-session.d.ts +29 -0
- package/dist/src/relay/pairing-session.js +87 -0
- package/dist/src/relay/phone-delivery.d.ts +51 -0
- package/dist/src/relay/phone-delivery.js +139 -0
- package/dist/src/relay/phone-devices.d.ts +36 -0
- package/dist/src/relay/phone-devices.js +46 -0
- package/dist/src/relay/phone-inbox.d.ts +18 -0
- package/dist/src/relay/phone-inbox.js +17 -0
- package/dist/src/relay/phone-operations.d.ts +18 -0
- package/dist/src/relay/phone-operations.js +121 -0
- package/dist/src/relay/phone-outbox.d.ts +21 -0
- package/dist/src/relay/phone-outbox.js +25 -0
- package/dist/src/relay/phone-socket.d.ts +6 -0
- package/dist/src/relay/phone-socket.js +63 -0
- package/dist/src/relay/relay-control.d.ts +7 -0
- package/dist/src/relay/relay-control.js +24 -0
- package/dist/src/relay/relay-files.d.ts +2 -0
- package/dist/src/relay/relay-files.js +23 -0
- package/dist/src/relay/relay-heartbeat.d.ts +17 -0
- package/dist/src/relay/relay-heartbeat.js +81 -0
- package/dist/src/relay/relay-http.d.ts +14 -0
- package/dist/src/relay/relay-http.js +63 -0
- package/dist/src/relay/relay-registration.d.ts +15 -0
- package/dist/src/relay/relay-registration.js +63 -0
- package/dist/src/relay/relay-service.d.ts +25 -0
- package/dist/src/relay/relay-service.js +216 -0
- package/dist/src/relay/relay-store.d.ts +48 -0
- package/dist/src/relay/relay-store.js +131 -0
- package/dist/src/relay/sealed-post.d.ts +25 -0
- package/dist/src/relay/sealed-post.js +52 -0
- package/dist/src/relay.d.ts +1 -0
- package/dist/src/relay.js +8 -0
- package/dist/src/report-statistics.d.ts +50 -0
- package/dist/src/report-statistics.js +70 -0
- package/dist/src/report.d.ts +171 -0
- package/dist/src/report.js +119 -0
- package/dist/src/repository-identity.d.ts +4 -0
- package/dist/src/repository-identity.js +4 -0
- package/dist/src/review-subject.d.ts +41 -0
- package/dist/src/review-subject.js +91 -0
- package/dist/src/run-wait.d.ts +23 -0
- package/dist/src/run-wait.js +20 -0
- package/dist/src/service/active-tickets.d.ts +4 -0
- package/dist/src/service/active-tickets.js +49 -0
- package/dist/src/service/command-effects.d.ts +4 -0
- package/dist/src/service/command-effects.js +16 -0
- package/dist/src/service/decision-handler.d.ts +4 -0
- package/dist/src/service/decision-handler.js +39 -4
- package/dist/src/service/gateway.js +18 -3
- package/dist/src/service/queue-runs.d.ts +3 -0
- package/dist/src/service/queue-runs.js +39 -0
- package/dist/src/service/registry.d.ts +22 -3
- package/dist/src/service/registry.js +51 -8
- package/dist/src/service/replies.d.ts +10 -0
- package/dist/src/service/replies.js +12 -0
- package/dist/src/service/run-handlers.js +45 -54
- package/dist/src/service/run-metadata.d.ts +8 -0
- package/dist/src/service/run-metadata.js +53 -0
- package/dist/src/service/run-waits.d.ts +3 -0
- package/dist/src/service/run-waits.js +41 -0
- package/dist/src/service/service.d.ts +21 -2
- package/dist/src/service/service.js +23 -5
- package/dist/src/service/submission-handler.js +70 -19
- package/dist/src/service/worker-port.d.ts +1 -0
- package/dist/src/service/worker-totals.js +10 -1
- package/dist/src/step-bridge.d.ts +32 -0
- package/dist/src/steps/decision-gate.d.ts +2 -1
- package/dist/src/steps/decision-gate.js +7 -0
- package/dist/src/steps/handoff.d.ts +2 -0
- package/dist/src/steps/handoff.js +13 -0
- package/dist/src/steps/merge-by-person.d.ts +2 -0
- package/dist/src/steps/merge-by-person.js +18 -0
- package/dist/src/steps/merge-when-green.d.ts +2 -0
- package/dist/src/steps/merge-when-green.js +62 -0
- package/dist/src/steps/review-by-agent.d.ts +5 -0
- package/dist/src/steps/review-by-agent.js +124 -0
- package/dist/src/steps/review-by-person.d.ts +4 -0
- package/dist/src/steps/review-by-person.js +16 -0
- package/dist/src/steps/review-subject.d.ts +2 -0
- package/dist/src/steps/review-subject.js +11 -0
- package/dist/src/steps/run-command.d.ts +2 -0
- package/dist/src/steps/run-command.js +15 -0
- package/dist/src/steps/sleep.d.ts +3 -0
- package/dist/src/steps/sleep.js +19 -0
- package/dist/src/steps/wait-for-decision.d.ts +2 -0
- package/dist/src/steps/wait-for-decision.js +71 -0
- package/dist/src/steps/wait-for-run.d.ts +5 -0
- package/dist/src/steps/wait-for-run.js +9 -0
- package/dist/src/storage/decision-snapshots.d.ts +1 -0
- package/dist/src/storage/decision-snapshots.js +7 -1
- package/dist/src/submission.d.ts +4 -0
- package/dist/src/submission.js +6 -2
- package/dist/src/testing.d.ts +29 -0
- package/dist/src/testing.js +264 -0
- package/dist/src/ticket-dependencies.d.ts +1 -0
- package/dist/src/ticket-dependencies.js +15 -0
- package/dist/src/ticket-status-stream.d.ts +9 -0
- package/dist/src/ticket-status-stream.js +94 -0
- package/dist/src/ticket-status.js +7 -4
- package/dist/src/token-prices.d.ts +14 -4
- package/dist/src/token-prices.js +56 -11
- package/dist/src/turn-profile.d.ts +1 -0
- package/dist/src/turn-profile.js +8 -1
- package/dist/src/worker-usage.d.ts +25 -0
- package/dist/src/worker-usage.js +58 -1
- package/dist/src/workflow-admission.d.ts +6 -0
- package/dist/src/workflow-candidate.d.ts +7 -2
- package/dist/src/workflow-candidate.js +48 -5
- package/dist/src/workflow-contracts.d.ts +2 -0
- package/dist/src/workflow-contracts.js +8 -3
- package/dist/src/workflow-declaration.d.ts +31 -2
- package/dist/src/workflow-declaration.js +140 -16
- package/dist/src/workflow-discovery.d.ts +19 -0
- package/dist/src/workflow-discovery.js +36 -0
- package/dist/src/workflow-refusals.d.ts +6 -0
- package/dist/src/workflow-refusals.js +42 -0
- package/dist/src/workflow-schedule.d.ts +22 -0
- package/dist/src/workflow-schedule.js +53 -0
- package/dist/src/workflows.d.ts +12 -1
- package/dist/src/workflows.js +9 -0
- package/dist/tools/admit-workflow.d.ts +14 -0
- package/dist/tools/admit-workflow.js +107 -0
- package/dist/tools/doctor-adoption.d.ts +1 -0
- package/dist/tools/doctor-adoption.js +11 -0
- package/dist/tools/project-configuration.d.ts +4 -0
- package/dist/tools/project-configuration.js +47 -0
- package/dist/tools/self-host-processes.d.ts +1 -0
- package/dist/tools/self-host-processes.js +33 -22
- package/dist/tools/self-host-project.d.ts +21 -0
- package/dist/tools/self-host-project.js +224 -0
- package/dist/tools/self-host-runtime.d.ts +16 -0
- package/dist/tools/self-host-runtime.js +60 -0
- package/dist/tools/self-host-workflows.d.ts +1 -0
- package/dist/tools/self-host-workflows.js +36 -1
- package/dist/tools/self-host.js +106 -135
- package/dist/tools/workflow-bundle-dependencies.d.ts +5 -0
- package/dist/tools/workflow-bundle-dependencies.js +93 -0
- package/dist/tools/workflow-bundles.d.ts +20 -0
- package/dist/tools/workflow-bundles.js +173 -0
- package/dist/tools/workflow-candidate-counts.d.ts +12 -0
- package/dist/tools/workflow-candidate-counts.js +266 -0
- package/dist/tools/workflow-candidate-fields.d.ts +5 -0
- package/dist/tools/workflow-candidate-fields.js +24 -0
- package/dist/tools/workflow-candidate-helper-counts.d.ts +10 -0
- package/dist/tools/workflow-candidate-helper-counts.js +129 -0
- package/dist/tools/workflow-candidate-program.d.ts +13 -0
- package/dist/tools/workflow-candidate-program.js +106 -0
- package/dist/tools/workflow-candidate-source.d.ts +6 -0
- package/dist/tools/workflow-candidate-source.js +169 -0
- package/dist/tools/workflow-candidate-syntax.d.ts +21 -0
- package/dist/tools/workflow-candidate-syntax.js +263 -0
- package/dist/tools/workflow-command.d.ts +1 -0
- package/dist/tools/workflow-command.js +143 -0
- package/dist/tools/workflow-folder-capture.d.ts +18 -0
- package/dist/tools/workflow-folder-capture.js +261 -0
- package/dist/tools/workflow-folders.d.ts +49 -0
- package/dist/tools/workflow-folders.js +203 -0
- package/dist/tools/workflow-source-effects.d.ts +10 -0
- package/dist/tools/workflow-source-effects.js +213 -0
- package/dist/tools/workflow-test-hook.d.ts +7 -0
- package/dist/tools/workflow-test-hook.js +16 -0
- package/dist/tools/workflow-test-loader.d.ts +1 -0
- package/dist/tools/workflow-test-loader.js +10 -0
- package/dist/workflows/develop-prd.js +71 -3
- package/dist/workflows/develop-ticket.js +6 -1
- package/dist/workflows/ticket-prompts.js +17 -3
- package/package.json +66 -6
- package/templates/develop/README.md +78 -0
- package/templates/develop/develop/accept.ts +11 -0
- package/templates/develop/develop/flow-tests.ts +357 -0
- package/templates/develop/develop/local.ts +40 -0
- package/templates/develop/develop/option-tests.ts +174 -0
- package/templates/develop/develop/partial-choice.ts +29 -0
- package/templates/develop/develop/partial.ts +28 -0
- package/templates/develop/develop/pull.ts +152 -0
- package/templates/develop/develop/queue-partial.ts +39 -0
- package/templates/develop/develop/refusal-tests.ts +174 -0
- package/templates/develop/develop/report.ts +156 -0
- package/templates/develop/develop/round.ts +40 -0
- package/templates/develop/develop/scenarios.ts +87 -0
- package/templates/develop/develop/turn.ts +67 -0
- package/templates/develop/develop.declaration.json +24 -0
- package/templates/develop/develop.test.ts +287 -0
- package/templates/develop/develop.ts +30 -0
- package/templates/develop/template.json +153 -0
- package/dist/src/chats/analysis-batches.d.ts +0 -24
- package/dist/src/chats/analysis-batches.js +0 -83
- package/dist/src/chats/analysis-contract.d.ts +0 -80
- package/dist/src/chats/analysis-contract.js +0 -16
- package/dist/src/chats/analysis-data.d.ts +0 -3
- package/dist/src/chats/analysis-data.js +0 -85
- package/dist/src/chats/analysis-input.d.ts +0 -12
- package/dist/src/chats/analysis-input.js +0 -83
- package/dist/src/chats/analysis-links.d.ts +0 -2
- package/dist/src/chats/analysis-links.js +0 -25
- package/dist/src/chats/analysis-prompt.d.ts +0 -10
- package/dist/src/chats/analysis-prompt.js +0 -16
- package/dist/src/chats/analysis-proposal.d.ts +0 -2
- package/dist/src/chats/analysis-proposal.js +0 -32
- package/dist/src/chats/analysis-provenance.d.ts +0 -4
- package/dist/src/chats/analysis-provenance.js +0 -99
- package/dist/src/chats/analysis-shape.d.ts +0 -3
- package/dist/src/chats/analysis-shape.js +0 -228
- package/dist/src/chats/analysis.d.ts +0 -3
- package/dist/src/chats/analysis.js +0 -42
- package/dist/src/chats/corpus-input.d.ts +0 -5
- package/dist/src/chats/corpus-input.js +0 -288
- package/dist/src/chats/destination.d.ts +0 -4
- package/dist/src/chats/destination.js +0 -96
- package/dist/src/chats/import.d.ts +0 -15
- package/dist/src/chats/import.js +0 -243
- package/dist/src/chats/input-file.d.ts +0 -3
- package/dist/src/chats/input-file.js +0 -32
- package/dist/src/chats/normalize.d.ts +0 -29
- package/dist/src/chats/normalize.js +0 -155
- package/dist/src/chats/previous-import.d.ts +0 -5
- package/dist/src/chats/previous-import.js +0 -34
- package/dist/src/chats/reader.d.ts +0 -21
- package/dist/src/chats/reader.js +0 -118
- package/dist/src/chats/redact-import.d.ts +0 -14
- package/dist/src/chats/redact-import.js +0 -141
- package/dist/src/chats/redaction.d.ts +0 -41
- package/dist/src/chats/redaction.js +0 -161
- package/dist/src/chats/revision-input.d.ts +0 -3
- package/dist/src/chats/revision-input.js +0 -180
- package/dist/src/chats/revision.d.ts +0 -48
- package/dist/src/chats/revision.js +0 -94
- package/dist/src/chats/selection.d.ts +0 -25
- package/dist/src/chats/selection.js +0 -109
- package/dist/src/chats/source.d.ts +0 -23
- package/dist/src/chats/source.js +0 -135
- package/dist/src/chats/structure.d.ts +0 -57
- package/dist/src/chats/structure.js +0 -216
- package/dist/src/daemon/analysis-launch.d.ts +0 -5
- package/dist/src/daemon/analysis-launch.js +0 -81
- package/dist/src/daemon/analysis-token.d.ts +0 -6
- package/dist/src/daemon/analysis-token.js +0 -88
- package/dist/src/daemon/analysis-worker.d.ts +0 -22
- package/dist/src/daemon/analysis-worker.js +0 -219
- package/dist/src/daemon/chats-files.d.ts +0 -15
- package/dist/src/daemon/chats-files.js +0 -113
- package/dist/src/daemon/chats-worker.d.ts +0 -12
- package/dist/src/daemon/chats-worker.js +0 -200
- package/dist/workflows/analyze-chats.d.ts +0 -10
- package/dist/workflows/analyze-chats.declaration.json +0 -9
- package/dist/workflows/analyze-chats.js +0 -73
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { parseArgs } from "node:util";
|
|
2
|
+
export function repositoryArguments(argumentsList, options) {
|
|
3
|
+
if (!argumentsList.some((argument) => argument === "--repository" || argument.startsWith("--repository=")))
|
|
4
|
+
return { argumentsList, repository: undefined };
|
|
5
|
+
try {
|
|
6
|
+
const parsed = parseArgs({
|
|
7
|
+
args: [...argumentsList],
|
|
8
|
+
options: {
|
|
9
|
+
...options,
|
|
10
|
+
repository: { type: "string" },
|
|
11
|
+
},
|
|
12
|
+
tokens: true,
|
|
13
|
+
allowPositionals: true,
|
|
14
|
+
strict: false,
|
|
15
|
+
});
|
|
16
|
+
const selectors = parsed.tokens.filter((token) => token.kind === "option" && token.name === "repository");
|
|
17
|
+
if (selectors.length > 1)
|
|
18
|
+
return "repeated-option";
|
|
19
|
+
const removed = new Set(selectors.flatMap((token) => token.kind === "option" && !token.inlineValue
|
|
20
|
+
? [token.index, token.index + 1]
|
|
21
|
+
: [token.index]));
|
|
22
|
+
const repository = parsed.values["repository"];
|
|
23
|
+
if (selectors.length > 0 &&
|
|
24
|
+
(typeof repository !== "string" || repository === ""))
|
|
25
|
+
return "missing-value";
|
|
26
|
+
return {
|
|
27
|
+
argumentsList: argumentsList.filter((_, index) => !removed.has(index)),
|
|
28
|
+
repository: typeof repository === "string" ? repository : undefined,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return "missing-value";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -11,6 +11,10 @@ export type RunSource = {
|
|
|
11
11
|
type DecisionCommand = "answer" | "approve" | "deny";
|
|
12
12
|
type RunCommand = "pause" | "resume" | "drop";
|
|
13
13
|
export type RuntimeInvocation = {
|
|
14
|
+
readonly kind: "report";
|
|
15
|
+
readonly since: number;
|
|
16
|
+
readonly json: boolean;
|
|
17
|
+
} | {
|
|
14
18
|
readonly kind: "command-help";
|
|
15
19
|
readonly command: string;
|
|
16
20
|
} | {
|
|
@@ -51,6 +51,15 @@ const shapes = new Map([
|
|
|
51
51
|
build: events,
|
|
52
52
|
},
|
|
53
53
|
],
|
|
54
|
+
[
|
|
55
|
+
"report",
|
|
56
|
+
{
|
|
57
|
+
subject: "none",
|
|
58
|
+
required: [],
|
|
59
|
+
allowed: () => ["since", "json"],
|
|
60
|
+
build: report,
|
|
61
|
+
},
|
|
62
|
+
],
|
|
54
63
|
[
|
|
55
64
|
"watch",
|
|
56
65
|
{
|
|
@@ -246,3 +255,9 @@ function events(request) {
|
|
|
246
255
|
const json = given(request, "json");
|
|
247
256
|
return { kind: "events", runId, after: after ?? 0, limit, follow, json };
|
|
248
257
|
}
|
|
258
|
+
function report(request) {
|
|
259
|
+
const since = whole(valueOf(request, "since"), { minimum: 1, maximum: 168 });
|
|
260
|
+
if (since === invalid)
|
|
261
|
+
return "invalid-option-value";
|
|
262
|
+
return { kind: "report", since: since ?? 24, json: given(request, "json") };
|
|
263
|
+
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
type Environment = Readonly<Record<string, string | undefined>>;
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
2
|
+
export declare function shellArgument(value: string): string;
|
|
3
|
+
export declare function clientCommand(environment: Environment, repository?: string): string;
|
|
4
|
+
export declare function repositoryRuntimeName(repository: string): string;
|
|
5
|
+
export declare function adoptionRecordPath(environment: Environment, repository: string): string | undefined;
|
|
6
|
+
export declare function legacyRuntimeDirectory(environment: Environment): string | undefined;
|
|
7
|
+
export declare function runtimeDirectory(environment: Environment, repository?: string): string | undefined;
|
|
4
8
|
export {};
|
|
@@ -1,25 +1,83 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { repositoryFileName } from "../repository-identity.js";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { readFileSync, realpathSync } from "node:fs";
|
|
4
|
+
import { basename, isAbsolute, join } from "node:path";
|
|
5
|
+
import { record } from "../protocol.js";
|
|
2
6
|
function given(value) {
|
|
3
7
|
return value !== undefined && value.length > 0;
|
|
4
8
|
}
|
|
5
|
-
export function
|
|
9
|
+
export function shellArgument(value) {
|
|
10
|
+
return /^[A-Za-z0-9_./-]+$/.test(value)
|
|
11
|
+
? value
|
|
12
|
+
: `'${value.replaceAll("'", "'\\''")}'`;
|
|
13
|
+
}
|
|
14
|
+
export function clientCommand(environment, repository) {
|
|
6
15
|
const explicit = environment["CLOVING_RUNTIME_DIR"];
|
|
7
16
|
return given(explicit)
|
|
8
|
-
? `CLOVING_RUNTIME_DIR=${explicit} cloving`
|
|
9
|
-
:
|
|
17
|
+
? `CLOVING_RUNTIME_DIR=${shellArgument(explicit)} cloving`
|
|
18
|
+
: `cloving${repository === undefined ? "" : ` --repository ${shellArgument(repository)}`}`;
|
|
19
|
+
}
|
|
20
|
+
function stateRoot(environment) {
|
|
21
|
+
const state = environment["XDG_STATE_HOME"];
|
|
22
|
+
if (given(state))
|
|
23
|
+
return state;
|
|
24
|
+
const home = environment["HOME"];
|
|
25
|
+
return given(home) ? join(home, ".local", "state") : undefined;
|
|
26
|
+
}
|
|
27
|
+
export function repositoryRuntimeName(repository) {
|
|
28
|
+
const canonical = realpathSync(repository);
|
|
29
|
+
return repositoryFileName({
|
|
30
|
+
name: basename(canonical),
|
|
31
|
+
sha256: createHash("sha256").update(canonical).digest("hex"),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export function adoptionRecordPath(environment, repository) {
|
|
35
|
+
const state = stateRoot(environment);
|
|
36
|
+
return state === undefined
|
|
37
|
+
? undefined
|
|
38
|
+
: join(state, "cloving", "adopted-runtime", `${repositoryRuntimeName(repository)}.json`);
|
|
39
|
+
}
|
|
40
|
+
export function legacyRuntimeDirectory(environment) {
|
|
41
|
+
const runtime = environment["XDG_RUNTIME_DIR"];
|
|
42
|
+
if (given(runtime))
|
|
43
|
+
return join(runtime, "cloving");
|
|
44
|
+
const state = stateRoot(environment);
|
|
45
|
+
return state === undefined ? undefined : join(state, "cloving", "run");
|
|
46
|
+
}
|
|
47
|
+
function adoptedRuntime(environment, repository) {
|
|
48
|
+
const path = adoptionRecordPath(environment, repository);
|
|
49
|
+
if (path === undefined)
|
|
50
|
+
return undefined;
|
|
51
|
+
try {
|
|
52
|
+
return runtimeRecord(path, repository);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT")
|
|
56
|
+
return undefined;
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
10
59
|
}
|
|
11
|
-
|
|
60
|
+
function runtimeRecord(path, repository) {
|
|
61
|
+
const value = record(JSON.parse(readFileSync(path, "utf8")));
|
|
62
|
+
if (value?.["schemaVersion"] === 1 &&
|
|
63
|
+
value["repository"] === realpathSync(repository) &&
|
|
64
|
+
typeof value["runtimeDirectory"] === "string" &&
|
|
65
|
+
isAbsolute(value["runtimeDirectory"]))
|
|
66
|
+
return value["runtimeDirectory"];
|
|
67
|
+
throw new Error("invalid-runtime-record");
|
|
68
|
+
}
|
|
69
|
+
export function runtimeDirectory(environment, repository) {
|
|
12
70
|
const explicit = environment["CLOVING_RUNTIME_DIR"];
|
|
13
71
|
if (given(explicit))
|
|
14
72
|
return explicit;
|
|
73
|
+
if (repository === undefined)
|
|
74
|
+
return undefined;
|
|
75
|
+
const adopted = adoptedRuntime(environment, repository);
|
|
76
|
+
if (adopted !== undefined)
|
|
77
|
+
return adopted;
|
|
15
78
|
const runtime = environment["XDG_RUNTIME_DIR"];
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return join(state, "cloving", "run");
|
|
21
|
-
const home = environment["HOME"];
|
|
22
|
-
return given(home)
|
|
23
|
-
? join(home, ".local", "state", "cloving", "run")
|
|
24
|
-
: undefined;
|
|
79
|
+
const root = given(runtime) ? runtime : stateRoot(environment);
|
|
80
|
+
return root === undefined
|
|
81
|
+
? undefined
|
|
82
|
+
: join(root, "cloving", repositoryRuntimeName(repository), "run");
|
|
25
83
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { ToolchainIdentity } from "../workflow-admission.ts";
|
|
2
|
+
export declare const supportedNodes: string;
|
|
3
|
+
export declare function supportedNode(version: string): boolean;
|
|
2
4
|
export declare function observedToolchain(start: string): Promise<ToolchainIdentity>;
|
|
3
5
|
export declare function qualifiedToolchain(observed: ToolchainIdentity, start: string): Promise<ToolchainIdentity>;
|
|
@@ -3,7 +3,27 @@ import { createHash } from "node:crypto";
|
|
|
3
3
|
import { access, readFile, realpath } from "node:fs/promises";
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
5
|
import packageMetadata from "#package" with { type: "json" };
|
|
6
|
-
const
|
|
6
|
+
export const supportedNodes = packageMetadata.engines.node;
|
|
7
|
+
export function supportedNode(version) {
|
|
8
|
+
const release = /^v(\d+)\.(\d+)\.(\d+)$/.exec(version);
|
|
9
|
+
if (release === null)
|
|
10
|
+
return false;
|
|
11
|
+
const observed = release.slice(1).map(Number);
|
|
12
|
+
return supportedNodes.split(" || ").some((range) => {
|
|
13
|
+
const bounds = /^>=(\d+)\.(\d+)\.(\d+) <(\d+)$/
|
|
14
|
+
.exec(range)
|
|
15
|
+
?.slice(1)
|
|
16
|
+
.map(Number);
|
|
17
|
+
if (bounds === undefined)
|
|
18
|
+
return false;
|
|
19
|
+
return (atLeast(observed, bounds.slice(0, 3)) &&
|
|
20
|
+
(observed[0] ?? 0) < (bounds[3] ?? 0));
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function atLeast(observed, minimum) {
|
|
24
|
+
const index = observed.findIndex((part, position) => part !== minimum[position]);
|
|
25
|
+
return index === -1 || (observed[index] ?? 0) > (minimum[index] ?? 0);
|
|
26
|
+
}
|
|
7
27
|
export async function observedToolchain(start) {
|
|
8
28
|
const root = await projectRoot(start);
|
|
9
29
|
const sdk = await packageDirectory(start, "workflow");
|
|
@@ -29,7 +49,7 @@ export async function qualifiedToolchain(observed, start) {
|
|
|
29
49
|
sdk: `workflow@${packageMetadata.dependencies.workflow}`,
|
|
30
50
|
world: `@workflow/world-local@${typeof declared === "string" ? declared : "undeclared"}`,
|
|
31
51
|
builder: `@workflow/builders@${packageMetadata.dependencies["@workflow/builders"]}`,
|
|
32
|
-
node:
|
|
52
|
+
node: supportedNode(observed.node) ? observed.node : supportedNodes,
|
|
33
53
|
dependencies: observed.dependencies,
|
|
34
54
|
};
|
|
35
55
|
}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import { type WorkerAttemptUsage } from "../worker-usage.ts";
|
|
1
2
|
export declare function priceText(value: unknown, estimate?: unknown): string;
|
|
2
3
|
export declare function usageText(value: unknown): string;
|
|
3
4
|
export declare function totalsSuffix(state: unknown): string;
|
|
5
|
+
export declare function statusJson(result: Fields): Fields;
|
|
6
|
+
import { type Fields } from "../protocol.ts";
|
|
7
|
+
export declare function attemptText(attempt: WorkerAttemptUsage): string;
|
|
8
|
+
export declare function attemptTexts(value: unknown): readonly string[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { priceOf, usageOf } from "../worker-usage.js";
|
|
1
|
+
import { attemptsOf, priceOf, usageOf, } from "../worker-usage.js";
|
|
2
2
|
export function priceText(value, estimate) {
|
|
3
3
|
const price = priceOf(value);
|
|
4
4
|
if (price === null && priceOf(estimate) !== null)
|
|
@@ -16,6 +16,9 @@ export function usageText(value) {
|
|
|
16
16
|
return [
|
|
17
17
|
["Input tokens", usage.input_tokens],
|
|
18
18
|
["Cache read tokens", usage.cache_read_input_tokens],
|
|
19
|
+
...(usage.cache_creation_input_tokens === undefined
|
|
20
|
+
? []
|
|
21
|
+
: [["Cache write tokens", usage.cache_creation_input_tokens]]),
|
|
19
22
|
["Output tokens", usage.output_tokens],
|
|
20
23
|
]
|
|
21
24
|
.map(([label, count]) => `${String(label)}: ${count === null ? "Token usage not known" : String(count)}`)
|
|
@@ -26,3 +29,39 @@ export function totalsSuffix(state) {
|
|
|
26
29
|
? ""
|
|
27
30
|
: " so far";
|
|
28
31
|
}
|
|
32
|
+
export function statusJson(result) {
|
|
33
|
+
const run = record(result["run"]);
|
|
34
|
+
if (result["kind"] !== "run-status" || run === undefined)
|
|
35
|
+
return result;
|
|
36
|
+
const turns = run["workerTurns"];
|
|
37
|
+
return {
|
|
38
|
+
...result,
|
|
39
|
+
run: {
|
|
40
|
+
...run,
|
|
41
|
+
costDisplay: priceText(run["claudeCostUsd"], run["estimatedCostUsd"]),
|
|
42
|
+
...(Array.isArray(turns)
|
|
43
|
+
? {
|
|
44
|
+
workerTurns: turns.map((turn) => {
|
|
45
|
+
const fields = record(turn);
|
|
46
|
+
if (fields === undefined)
|
|
47
|
+
return turn;
|
|
48
|
+
return {
|
|
49
|
+
...fields,
|
|
50
|
+
costDisplay: priceText(fields["costUsd"], fields["estimatedCostUsd"]),
|
|
51
|
+
};
|
|
52
|
+
}),
|
|
53
|
+
}
|
|
54
|
+
: {}),
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
import { record } from "../protocol.js";
|
|
59
|
+
export function attemptText(attempt) {
|
|
60
|
+
const kind = attempt.retryKind === undefined
|
|
61
|
+
? ""
|
|
62
|
+
: ` · retryKind: ${String(attempt.retryKind)}`;
|
|
63
|
+
return `Attempt ${String(attempt.attempt)} · ${attempt.model ?? "Model not known"}${kind} · ${priceText(attempt.costUsd, attempt.estimatedCostUsd)}`;
|
|
64
|
+
}
|
|
65
|
+
export function attemptTexts(value) {
|
|
66
|
+
return (attemptsOf(value) ?? []).map(attemptText);
|
|
67
|
+
}
|
package/dist/src/cli/usage.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
export declare const configUsage = "Usage: cloving config list [--json]\n cloving config get <field> [--json]\n cloving config set <field> <value> [--private] [--json]\n cloving config unset <field> [--private] [--json]\n\nReads and changes settings for the current repository; --repository selects another repository.\nValues use JSON when valid, otherwise text. Every change is checked before writing.\nFields use their default project or private file; --private selects the private file.\nlist and get show the effective source and hidden file values. Unconfigured values use defaults; null means no value.\nChanges keep the previous file as .bak and replace the file atomically under a lock.\nA live lock waits at most ten seconds, then exits with settings-locked.\nPrivate files, backups and temporary files have mode 0600. Changes require a service restart.\n";
|
|
1
2
|
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
|
|
3
|
-
export declare const chatsImportUsage = "Usage: cloving chats import [--] <path> [<path> ...]\n cloving chats import --root <projects-folder> [--root <projects-folder> ...] [--exclude-project <name> ...] [-- <path> ...]\n\nImports only the selected Claude Code JSONL files. Relative paths use the current directory.\nThis local command needs no service. It scans only explicitly named roots and does not expand globs or discover configuration.\nPositional files come first, retaining order and repetitions. Roots sort by canonical path, then entries by relative path in JavaScript string order.\nExclusions match direct project folder names exactly and prune their children. Exclusions require a root.\nScans accept lowercase .jsonl filenames, attempt at most 100 eligible files across roots, and stop before entering folders at depth four.\nLater file candidates and depth-limited folders are pending. Select pending files explicitly in a later import.\nLinked components, containment changes and roots in Git repositories are refused. Scan protections require the supported macOS kernel.\nThe file limit is 10 MiB (10,485,760 bytes). Links and nonregular files are refused.\nThe total normalized corpus limit is 50 MiB (52,428,800 UTF-8 bytes), including newlines and repeated selections.\nExceeding that total returns output-failed with exit code 1 and no completed coverage manifest; partial files may remain.\n--previous-import <IMPORT_ID> compares against one explicitly named UUID v4 import before --.\nThe earlier coverage and optional revision must be valid, completed private metadata; otherwise previous-import-refused returns exit 1 with no new import.\nA comparison writes private revision.json with ordered selection evidence and six status counts. Matching uses source path and selected root path; repetitions pair in order.\nByte-verified extensions are extended; shorter sources are truncated. Legacy imports without sizes can establish unchanged digests but cannot prove extension or truncation.\nMissing or truncated evidence makes the import partial. History completeness remains unknown.\nPrivate corpus.jsonl, structure.json 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.\nStructure preserves branches and marks known copies without removing records. History completeness remains unknown.\nRoot imports write coverage version 2 and add excluded and pending entry counts; positional-only imports retain coverage version 1.\nExit codes: 0 for no refused, pending, missing or truncated entries (exclusions alone permit success without comparison), 1 for partial coverage or processing failure, 2 for invalid usage.\n";
|
|
3
|
+
export declare const usage = "Usage: cloving [--help] [--version]\n cloving workflows list [--json] [--repository <directory>]\n cloving workflows test [<id>] [--repository <directory>]\n cloving workflows validate <manifest-path> [--input <json-file>] [--json]\n cloving templates list [--json]\n cloving templates show <name> [--json]\n cloving templates copy <name> [--id <workflow-id>] [--json] [--repository <directory>]\n cloving <command> [--help]\n\nCommands:\n workflows list List bundled, project and user workflows and refusal codes.\n workflows test Run project and user workflow tests without a service.\n workflows validate Check a compiled workflow manifest, its artifacts and optional runtime input.\n templates list List the workflow templates of the package.\n templates show Show the decision points and the files of one template.\n templates copy Copy one template into .cloving/workflows of the repository.\n doctor Check repository requirements before starting or submitting work.\n run Submit one run of an admitted workflow.\n status List the runs or show one run.\n report Report loop facts and seven-day baselines.\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 phone Show, list, remove and reset the connected phones.\n config Read and change repository settings.\n start Start the service for a repository.\n\nThe runtime commands need a Cloving service. They use the current git repository; --repository <directory> selects another repository. CLOVING_RUNTIME_DIR overrides its runtime directory.\nUse npm exec -- cloving ... for a project-local installation.\n";
|
|
4
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";
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const phoneUsage = "Usage: cloving phone status [--json]\n cloving phone list [--json]\n cloving phone remove <device-id> [--json]\n cloving phone reset [--json]\n\nShows and changes the phones that answer the questions of this computer.\nstatus shows the registration with cloving.ai and the number of phones.\nlist shows each phone with its device ID, name, platform, state and pairing time.\nremove marks one phone removed on this computer, then asks cloving.ai to remove it. A failure at cloving.ai keeps the phone removed and shows a warning.\nreset removes the registration with cloving.ai, marks all phones removed and deletes phone/link.json and phone/daemon-keys.json.\nConnect a phone with the Connect a phone button of the watch page.\ncloving start runs the phone relay as a child process. With CLOVING_PHONE_RELAY=off, the relay does not start, and status says that the relay is off or not started.\n";
|
package/dist/src/cli/usage.js
CHANGED
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
const binding = "--expected-revision <n> --generation <n> --subject-digest <digest>";
|
|
2
|
+
export const configUsage = `Usage: cloving config list [--json]
|
|
3
|
+
cloving config get <field> [--json]
|
|
4
|
+
cloving config set <field> <value> [--private] [--json]
|
|
5
|
+
cloving config unset <field> [--private] [--json]
|
|
6
|
+
|
|
7
|
+
Reads and changes settings for the current repository; --repository selects another repository.
|
|
8
|
+
Values use JSON when valid, otherwise text. Every change is checked before writing.
|
|
9
|
+
Fields use their default project or private file; --private selects the private file.
|
|
10
|
+
list and get show the effective source and hidden file values. Unconfigured values use defaults; null means no value.
|
|
11
|
+
Changes keep the previous file as .bak and replace the file atomically under a lock.
|
|
12
|
+
A live lock waits at most ten seconds, then exits with settings-locked.
|
|
13
|
+
Private files, backups and temporary files have mode 0600. Changes require a service restart.
|
|
14
|
+
`;
|
|
2
15
|
export const commandUsage = {
|
|
16
|
+
doctor: `Usage: cloving doctor [--json] [--repository <directory>]
|
|
17
|
+
|
|
18
|
+
Checks repository requirements without repairs, model turns or GitHub writes.
|
|
19
|
+
Required failures or skipped prerequisites exit with status 1.
|
|
20
|
+
`,
|
|
21
|
+
report: `Usage: cloving report [--since <hours>] [--json]
|
|
22
|
+
|
|
23
|
+
Reads loop facts without writing state. Hours are a whole number from 1 to 168; default 24.
|
|
24
|
+
Reports run outcomes, throughput and ended-run costs with seven-day medians and MAD bands.
|
|
25
|
+
Unsupported facts and unreadable sources are unavailable.
|
|
26
|
+
`,
|
|
3
27
|
run: `Usage: cloving run <workflow-id> (--prompt <text> | --ticket <id> | --next | --input <json-file>) [--command-id <id>] [--json]
|
|
4
28
|
|
|
5
29
|
Submits one run of an admitted workflow. Use exactly one input source.
|
|
6
|
-
With --ticket, the
|
|
7
|
-
With --next (the same as --ticket next),
|
|
30
|
+
With --ticket, the daemon reads the ticket at admission. A declared ticket field receives { id, text } inside input.
|
|
31
|
+
With --next (the same as --ticket next), ticket workflows select a ready ticket through CLOVING_NEXT_COMMAND.
|
|
8
32
|
Success means a committed receipt. It does not mean completed work.
|
|
9
33
|
`,
|
|
10
34
|
status: `Usage: cloving status [<run-id>] [--limit <n>] [--after <cursor>] [--json]
|
|
@@ -47,14 +71,14 @@ Prints the committed events after a sequence. With --json, each line is one even
|
|
|
47
71
|
watch: `Usage: cloving watch [--port <n>]
|
|
48
72
|
|
|
49
73
|
Serves a page on http://127.0.0.1:<port>/ that shows the runs live: the state,
|
|
50
|
-
the events, the work of the
|
|
74
|
+
the events, the work of the worker and each pending decision.
|
|
51
75
|
The default port is 3663. The page is read only. Stop it with Control-C.
|
|
52
76
|
`,
|
|
53
77
|
start: `Usage: cloving start [--repository <directory>] [--reset-queue]
|
|
54
78
|
|
|
55
79
|
Starts the Cloving service for one git repository, with the workflow host,
|
|
56
|
-
the
|
|
57
|
-
directory.
|
|
80
|
+
the worker and the watch page. The default repository is the current
|
|
81
|
+
directory.
|
|
58
82
|
Stop it with Control-C.
|
|
59
83
|
|
|
60
84
|
The queue continues after unsuccessful runs and stops after three runs in a row
|
|
@@ -62,38 +86,61 @@ without a successful handoff. A successful handoff resets the count; ordinary re
|
|
|
62
86
|
Stop the service, inspect the failures and reconcile affected issues, then start with --reset-queue and the same queue settings to clear the failure streak once. Tracked commands are preserved.
|
|
63
87
|
|
|
64
88
|
The command reads these settings from the environment:
|
|
65
|
-
|
|
89
|
+
Settings files: .cloving/config.json in the repository and <config>/cloving/projects/<name>-<id>.json for private settings. Both require version 1. Precedence: environment, private, project, defaults. <config> is an absolute XDG_CONFIG_HOME or ~/.config. The start guide shows each configured field's source. See the packaged project-config.schema.json and private-config.schema.json in dist/src.
|
|
90
|
+
|
|
91
|
+
CLOVING_RUNTIME_DIR The path of the runtime directory. The default is ~/.local/state/cloving/<name>-<id>/run, if XDG_RUNTIME_DIR and XDG_STATE_HOME are not set. A recorded legacy adoption takes priority.
|
|
66
92
|
CLOVING_TICKET_COMMAND A JSON list of a command and its arguments. The command gets a ticket ID as its last argument and prints the ticket. The setting has no default, and a run with --ticket needs it.
|
|
67
93
|
CLOVING_NOTIFY_COMMAND A JSON list of a command and its arguments. Every 15 seconds, new decisions, blocked runs and failed runs send JSON on standard input with no added argument. The setting has no default.
|
|
68
|
-
CLOVING_NEXT_COMMAND A JSON list of a command and its arguments. The command runs with no added argument and prints one ready ticket ID for --next. The setting has no default.
|
|
69
|
-
CLOVING_QUEUE_SECONDS A whole number from 10 to 3600 seconds between develop-issue queue checks; requires CLOVING_NEXT_COMMAND and CLOVING_TICKET_COMMAND. Unset means no queue. The queue stops after three runs in a row without a successful handoff; manual develop-issue submissions are refused with workflow-active
|
|
94
|
+
CLOVING_NEXT_COMMAND A JSON list of a command and its arguments. The command runs with no added argument and prints one ready ticket ID for --next. It must exclude the space-separated ticket IDs in CLOVING_SKIP_TICKETS. The setting has no default.
|
|
95
|
+
CLOVING_QUEUE_SECONDS A whole number from 10 to 3600 seconds between develop-issue queue checks; requires CLOVING_NEXT_COMMAND and CLOVING_TICKET_COMMAND. Unset means no queue. The queue stops after three runs in a row without a successful handoff; manual develop-issue submissions are refused with workflow-active when all lanes are busy.
|
|
96
|
+
CLOVING_QUEUE_LANES A whole number from 1 to 4; the default is 1. Requires CLOVING_QUEUE_SECONDS. Active tickets are refused with ticket-active. Needs #N sentences in the ticket's ## Dependencies section refuse admission with ticket-dependency-open while issue #N is open.
|
|
97
|
+
CLOVING_WORKFLOW_FOLDER An absolute folder path; when set, it replaces the user workflow folder. The private setting workflows.folder sets it. The folder itself must not be a symbolic link.
|
|
98
|
+
CLOVING_SCHEDULES A JSON object mapping declared workflow IDs to {everySeconds, input}; replaces declaration schedules. Intervals are whole seconds from 60 to 86400. Unset keeps declaration schedules. Scheduled runs skip overlapping slots and retain their progress across restart.
|
|
70
99
|
CLOVING_SELF_UPDATE_SECONDS A whole number from 30 to 3600 seconds between checks of the own checkout; unset means no update. An update stops the daemon and restarts with new code. A change of package-lock.json needs the operator to update and install by hand.
|
|
71
|
-
|
|
100
|
+
CLOVING_GROK_COMMAND A JSON list of a command and its arguments for Grok. The default uses streaming-messages-json, --always-approve and -p; the turn text follows -p or --single as one argument, or is appended if neither flag is present.
|
|
72
101
|
CLOVING_CLAUDE_COMMAND A JSON list of a command and its arguments for the Claude worker. The default is the claude command with a limit of 5 USD for each turn.
|
|
73
102
|
CLOVING_PROFILES The path of a JSON file of operator-defined Claude turn profiles, read once at start. The setting has no default.
|
|
103
|
+
CLOVING_COMMANDS A JSON object mapping names to argument arrays with an absolute executable path. Invalid values refuse startup with invalid-commands. Unset means no commands. Command execution is not available yet.
|
|
104
|
+
CLOVING_COMMAND_SECONDS A whole number from 1 to 3600 seconds; the default is 60. Invalid values refuse startup with invalid-command-seconds. Reserved for command execution.
|
|
74
105
|
CLOVING_TOKEN_PRICES A JSON object from model names to input, cachedInput and output USD prices per million tokens for estimates; entries override matching built-in prices.
|
|
75
|
-
|
|
106
|
+
CLOVING_FALLBACK_MODELS A JSON array of at most three nonempty model names; the default is no fallback. After capacity refusals the first retry keeps the main model and the third attempt uses the first fallback, with the same waits and attempt limit. Requires an explicit -m, --model or --model= argument. A fallback can have a higher price.
|
|
107
|
+
CLOVING_WORKER The worker for each turn: claude, codex, gemini, grok, cursor-agent or opencode. The default is claude. Other values stop the start with harness-no-worker.
|
|
76
108
|
CLOVING_CODEX_COMMAND A JSON list of a command and its arguments, used only when CLOVING_WORKER is codex; CLOVING_CLAUDE_COMMAND is then ignored. The default is codex exec --json --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check -, with no sandbox and no approval prompts.
|
|
109
|
+
CLOVING_GEMINI_COMMAND A JSON list of a command and its arguments for the gemini worker. The default is gemini --output-format stream-json --approval-mode yolo; Cloving appends -p and the turn text; turn text of 64 KiB or more in UTF-8 goes through standard input instead. No approval prompts or capacity retries.
|
|
110
|
+
CLOVING_OPENCODE_COMMAND A JSON list of a command and its arguments for opencode. The default is opencode run --format json; the turn text is appended as one argument. OPENCODE_PERMISSION permits unattended tools.
|
|
77
111
|
CLOVING_WATCH_REPOSITORY The service repository context for the watch board, set by start from --repository. Its local origin supplies the GitHub identity. There is no current-directory default.
|
|
78
112
|
CLOVING_WATCH_ACTIONS The value off removes the board run form and its write endpoint. The default is on.
|
|
79
113
|
CLOVING_WATCH_PORT The port number of the watch page. The value off starts no watch page. The default is 3663.
|
|
114
|
+
CLOVING_PHONE_RELAY The phone relay child, which connects phones through cloving.ai. The value off starts no phone relay. The default is on.
|
|
115
|
+
CLOVING_RELAY_ORIGIN The origin of the phone relay server. Only https origins are accepted. The default is https://cloving.ai.
|
|
80
116
|
CLOVING_OWNERSHIP_LEASE_SECONDS The time in seconds of the ownership lease of a started workflow step. The default is 15.
|
|
81
117
|
CLOVING_HOST_BOUND The largest number of queue messages that the workflow host handles at one time, from 1 to 64. The default is 8.
|
|
82
118
|
CLOVING_GH_COMMAND A JSON list of a command and its arguments for the GitHub CLI, which the workflow develop-issue uses for pull requests and develop-prd uses for issues. The watch board also uses it to read pull request status. The default is gh.
|
|
83
119
|
CLOVING_CHECK_COMMAND A JSON list of a command and its arguments that the workflow develop-issue runs in the work tree before a merge. A merge does not occur if the command fails. The setting has no default, and with no setting the merge occurs with no check.
|
|
120
|
+
CLOVING_REQUIRED_CHECKS A JSON list of required check run names before a develop-issue merge. Unset requires all GitHub Actions checks; a repository with no CI can merge after 60 seconds. The latest run of each name decides. The CI wait limit is 90 minutes.
|
|
84
121
|
CLOVING_PRIVATE_TEXTS A JSON list of texts that the workflow develop-issue does not push in a file or in a commit message. The workflow develop-prd requires the list before posting an issue. The list adds to the path of the home folder, and the case of the letters does not matter. The setting has no default.
|
|
85
122
|
`,
|
|
86
123
|
};
|
|
87
124
|
export const usage = `Usage: cloving [--help] [--version]
|
|
125
|
+
cloving workflows list [--json] [--repository <directory>]
|
|
126
|
+
cloving workflows test [<id>] [--repository <directory>]
|
|
88
127
|
cloving workflows validate <manifest-path> [--input <json-file>] [--json]
|
|
128
|
+
cloving templates list [--json]
|
|
129
|
+
cloving templates show <name> [--json]
|
|
130
|
+
cloving templates copy <name> [--id <workflow-id>] [--json] [--repository <directory>]
|
|
89
131
|
cloving <command> [--help]
|
|
90
132
|
|
|
91
133
|
Commands:
|
|
134
|
+
workflows list List bundled, project and user workflows and refusal codes.
|
|
135
|
+
workflows test Run project and user workflow tests without a service.
|
|
92
136
|
workflows validate Check a compiled workflow manifest, its artifacts and optional runtime input.
|
|
93
|
-
|
|
94
|
-
|
|
137
|
+
templates list List the workflow templates of the package.
|
|
138
|
+
templates show Show the decision points and the files of one template.
|
|
139
|
+
templates copy Copy one template into .cloving/workflows of the repository.
|
|
140
|
+
doctor Check repository requirements before starting or submitting work.
|
|
95
141
|
run Submit one run of an admitted workflow.
|
|
96
142
|
status List the runs or show one run.
|
|
143
|
+
report Report loop facts and seven-day baselines.
|
|
97
144
|
questions List the pending decisions.
|
|
98
145
|
answer Answer one design question.
|
|
99
146
|
approve Approve one pending approval.
|
|
@@ -103,36 +150,13 @@ Commands:
|
|
|
103
150
|
drop Cancel a run and keep its files.
|
|
104
151
|
events Print the committed events.
|
|
105
152
|
watch Serve a page that shows the runs live.
|
|
153
|
+
phone Show, list, remove and reset the connected phones.
|
|
154
|
+
config Read and change repository settings.
|
|
106
155
|
start Start the service for a repository.
|
|
107
156
|
|
|
108
|
-
The runtime commands need a Cloving service. CLOVING_RUNTIME_DIR
|
|
157
|
+
The runtime commands need a Cloving service. They use the current git repository; --repository <directory> selects another repository. CLOVING_RUNTIME_DIR overrides its runtime directory.
|
|
109
158
|
Use npm exec -- cloving ... for a project-local installation.
|
|
110
159
|
`;
|
|
111
|
-
export const chatsImportUsage = `Usage: cloving chats import [--] <path> [<path> ...]
|
|
112
|
-
cloving chats import --root <projects-folder> [--root <projects-folder> ...] [--exclude-project <name> ...] [-- <path> ...]
|
|
113
|
-
|
|
114
|
-
Imports only the selected Claude Code JSONL files. Relative paths use the current directory.
|
|
115
|
-
This local command needs no service. It scans only explicitly named roots and does not expand globs or discover configuration.
|
|
116
|
-
Positional files come first, retaining order and repetitions. Roots sort by canonical path, then entries by relative path in JavaScript string order.
|
|
117
|
-
Exclusions match direct project folder names exactly and prune their children. Exclusions require a root.
|
|
118
|
-
Scans accept lowercase .jsonl filenames, attempt at most 100 eligible files across roots, and stop before entering folders at depth four.
|
|
119
|
-
Later file candidates and depth-limited folders are pending. Select pending files explicitly in a later import.
|
|
120
|
-
Linked components, containment changes and roots in Git repositories are refused. Scan protections require the supported macOS kernel.
|
|
121
|
-
The file limit is 10 MiB (10,485,760 bytes). Links and nonregular files are refused.
|
|
122
|
-
The total normalized corpus limit is 50 MiB (52,428,800 UTF-8 bytes), including newlines and repeated selections.
|
|
123
|
-
Exceeding that total returns output-failed with exit code 1 and no completed coverage manifest; partial files may remain.
|
|
124
|
-
--previous-import <IMPORT_ID> compares against one explicitly named UUID v4 import before --.
|
|
125
|
-
The earlier coverage and optional revision must be valid, completed private metadata; otherwise previous-import-refused returns exit 1 with no new import.
|
|
126
|
-
A comparison writes private revision.json with ordered selection evidence and six status counts. Matching uses source path and selected root path; repetitions pair in order.
|
|
127
|
-
Byte-verified extensions are extended; shorter sources are truncated. Legacy imports without sizes can establish unchanged digests but cannot prove extension or truncation.
|
|
128
|
-
Missing or truncated evidence makes the import partial. History completeness remains unknown.
|
|
129
|
-
Private corpus.jsonl, structure.json and coverage.json files go into a new import directory under the runtime directory's chats directory.
|
|
130
|
-
The runtime selection is CLOVING_RUNTIME_DIR, XDG_RUNTIME_DIR, XDG_STATE_HOME, then HOME.
|
|
131
|
-
Output contains only counts, fixed codes and an opaque import ID. Source paths stay in the private manifest.
|
|
132
|
-
Structure preserves branches and marks known copies without removing records. History completeness remains unknown.
|
|
133
|
-
Root imports write coverage version 2 and add excluded and pending entry counts; positional-only imports retain coverage version 1.
|
|
134
|
-
Exit codes: 0 for no refused, pending, missing or truncated entries (exclusions alone permit success without comparison), 1 for partial coverage or processing failure, 2 for invalid usage.
|
|
135
|
-
`;
|
|
136
160
|
export const validateUsage = `Usage: cloving workflows validate <manifest-path> [--input <json-file>] [--json]
|
|
137
161
|
|
|
138
162
|
Checks 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.
|
|
@@ -146,11 +170,16 @@ Validation does not admit a run, dispatch effects, import workflow code or call
|
|
|
146
170
|
Example:
|
|
147
171
|
cloving workflows validate cloving.workflow.json --input input.json
|
|
148
172
|
`;
|
|
149
|
-
export const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
173
|
+
export const phoneUsage = `Usage: cloving phone status [--json]
|
|
174
|
+
cloving phone list [--json]
|
|
175
|
+
cloving phone remove <device-id> [--json]
|
|
176
|
+
cloving phone reset [--json]
|
|
177
|
+
|
|
178
|
+
Shows and changes the phones that answer the questions of this computer.
|
|
179
|
+
status shows the registration with cloving.ai and the number of phones.
|
|
180
|
+
list shows each phone with its device ID, name, platform, state and pairing time.
|
|
181
|
+
remove marks one phone removed on this computer, then asks cloving.ai to remove it. A failure at cloving.ai keeps the phone removed and shows a warning.
|
|
182
|
+
reset removes the registration with cloving.ai, marks all phones removed and deletes phone/link.json and phone/daemon-keys.json.
|
|
183
|
+
Connect a phone with the Connect a phone button of the watch page.
|
|
184
|
+
cloving start runs the phone relay as a child process. With CLOVING_PHONE_RELAY=off, the relay does not start, and status says that the relay is off or not started.
|
|
156
185
|
`;
|
|
@@ -7,4 +7,6 @@ export interface WatchActions {
|
|
|
7
7
|
}
|
|
8
8
|
export declare function watchActions(runtimeDirectory: string): Promise<WatchActions>;
|
|
9
9
|
export declare function watchHost(request: IncomingMessage): boolean;
|
|
10
|
+
export declare function actionAllowed(actions: WatchActions, request: IncomingMessage): boolean;
|
|
11
|
+
export declare function actionBody(request: IncomingMessage): Promise<unknown>;
|
|
10
12
|
export declare function watchAction(actions: WatchActions, request: IncomingMessage): Promise<string | null>;
|
|
@@ -14,13 +14,13 @@ export function watchHost(request) {
|
|
|
14
14
|
const port = request.socket.localPort;
|
|
15
15
|
return [`127.0.0.1:${String(port)}`, `localhost:${String(port)}`].includes(request.headers.host ?? "");
|
|
16
16
|
}
|
|
17
|
-
function
|
|
17
|
+
export function actionAllowed(actions, request) {
|
|
18
18
|
return (watchHost(request) &&
|
|
19
19
|
request.headers.origin === `http://${request.headers.host ?? ""}` &&
|
|
20
20
|
request.headers["x-cloving-token"] === actions.token &&
|
|
21
21
|
/^application\/json(?:\s*;\s*charset=utf-8)?$/i.test(request.headers["content-type"] ?? ""));
|
|
22
22
|
}
|
|
23
|
-
async function
|
|
23
|
+
export async function actionBody(request) {
|
|
24
24
|
const chunks = [];
|
|
25
25
|
let size = 0;
|
|
26
26
|
for await (const chunk of request) {
|
|
@@ -39,9 +39,9 @@ async function bodyOf(request) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
export async function watchAction(actions, request) {
|
|
42
|
-
if (!
|
|
42
|
+
if (!actionAllowed(actions, request))
|
|
43
43
|
return null;
|
|
44
|
-
const given = cardRunRequest(actions.forms, await
|
|
44
|
+
const given = cardRunRequest(actions.forms, await actionBody(request));
|
|
45
45
|
if (given === null)
|
|
46
46
|
return null;
|
|
47
47
|
const status = await send(actions.runtimeDirectory, {
|
|
@@ -21,11 +21,20 @@ export declare function CardReview(props: {
|
|
|
21
21
|
readonly card: WatchCard;
|
|
22
22
|
readonly workflowId: string;
|
|
23
23
|
}): Shown;
|
|
24
|
-
export declare function
|
|
24
|
+
export declare function staleObservation(card: WatchCard, now: string): Shown;
|
|
25
|
+
export declare function observationText(card: WatchCard, fallback: string): string;
|
|
26
|
+
export declare function completionMark(card: WatchCard, context: {
|
|
27
|
+
readonly workflowId: string;
|
|
28
|
+
readonly now: string;
|
|
29
|
+
}): Shown;
|
|
25
30
|
export declare function Card(props: {
|
|
26
31
|
readonly card: WatchCard;
|
|
27
32
|
readonly workflowId: string;
|
|
28
33
|
readonly now: string;
|
|
34
|
+
readonly observationNow?: string | undefined;
|
|
35
|
+
}): Shown;
|
|
36
|
+
export declare function HandoffLinks(props: {
|
|
37
|
+
readonly run: Pick<WatchCard, "parentRunId" | "childRunIds" | "awaitedRunId">;
|
|
29
38
|
}): Shown;
|
|
30
39
|
export declare function WorkflowList(props: {
|
|
31
40
|
readonly workflows: readonly WatchWorkflow[];
|
|
@@ -43,6 +52,7 @@ export declare function Column(props: {
|
|
|
43
52
|
readonly addCard?: Shown;
|
|
44
53
|
readonly workflowId: string;
|
|
45
54
|
readonly now: string;
|
|
55
|
+
readonly observationNow?: string | undefined;
|
|
46
56
|
readonly controls?: ColumnControls | undefined;
|
|
47
57
|
}): Shown;
|
|
48
58
|
export declare function Board(props: {
|
|
@@ -50,5 +60,6 @@ export declare function Board(props: {
|
|
|
50
60
|
readonly cardForm?: CardForm | undefined;
|
|
51
61
|
readonly cards?: CardControls | undefined;
|
|
52
62
|
readonly now: string;
|
|
63
|
+
readonly observationNow?: string | undefined;
|
|
53
64
|
readonly controls?: ColumnControls | undefined;
|
|
54
65
|
}): Shown;
|