cloving 1.2.0 → 1.4.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 +700 -331
- package/dist/src/agent-harness-shell.d.ts +13 -0
- package/dist/src/agent-harness-shell.js +93 -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/command-wait-checks.d.ts +8 -0
- package/dist/src/authority/command-wait-checks.js +88 -0
- package/dist/src/authority/command-wait-results.d.ts +15 -0
- package/dist/src/authority/command-wait-results.js +73 -0
- package/dist/src/authority/command-wait-view.d.ts +21 -0
- package/dist/src/authority/command-wait-view.js +34 -0
- package/dist/src/authority/command-waits.d.ts +39 -0
- package/dist/src/authority/command-waits.js +97 -0
- package/dist/src/authority/commands.d.ts +1 -0
- package/dist/src/authority/commands.js +46 -5
- package/dist/src/authority/dispatch-decision.d.ts +8 -0
- package/dist/src/authority/dispatch-decision.js +26 -1
- package/dist/src/authority/effect-requests.js +6 -3
- package/dist/src/authority/effect-results.js +4 -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/history-state.d.ts +2 -0
- package/dist/src/authority/history-state.js +13 -1
- package/dist/src/authority/instants.d.ts +1 -0
- package/dist/src/authority/instants.js +21 -0
- package/dist/src/authority/operations.js +1 -1
- package/dist/src/authority/reduction-state.d.ts +2 -0
- package/dist/src/authority/reduction-state.js +5 -0
- package/dist/src/authority/reduction.d.ts +1 -1
- package/dist/src/authority/reduction.js +30 -1
- package/dist/src/authority/status-input.d.ts +3 -1
- package/dist/src/authority/status.d.ts +3 -0
- package/dist/src/authority/status.js +28 -3
- package/dist/src/authority/stop-sequence.d.ts +1 -0
- package/dist/src/authority/stop-sequence.js +2 -1
- package/dist/src/authority/transitions.d.ts +7 -5
- package/dist/src/authority/transitions.js +13 -0
- package/dist/src/broker/actor/authority-delivery.js +1 -0
- package/dist/src/broker/actor/authority-queries.d.ts +9 -2
- package/dist/src/broker/actor/authority-queries.js +29 -5
- 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/authority-upgrades.d.ts +19 -2
- package/dist/src/broker/actor/authority-upgrades.js +7 -2
- package/dist/src/broker/actor/delivery-intents.d.ts +2 -1
- package/dist/src/broker/actor/delivery-intents.js +6 -4
- package/dist/src/broker/actor/effect-delivery.d.ts +1 -1
- package/dist/src/broker/actor/effect-delivery.js +18 -2
- package/dist/src/broker/actor/effect-plan.js +11 -2
- package/dist/src/broker/actor/effect-queries.d.ts +5 -0
- package/dist/src/broker/actor/effect-queries.js +16 -1
- package/dist/src/broker/actor/effect-turn.js +2 -0
- package/dist/src/broker/actor/pin-check.js +1 -1
- package/dist/src/broker/actor/stop-plan.js +10 -4
- package/dist/src/broker/actor/stop-turn.d.ts +2 -0
- package/dist/src/broker/actor/stop-turn.js +24 -11
- package/dist/src/broker/actor/turn-draft.d.ts +1 -0
- package/dist/src/broker/actor/turn-draft.js +4 -0
- package/dist/src/broker/actor/turn-state.js +6 -2
- package/dist/src/broker/authority-admission.js +80 -7
- package/dist/src/broker/authority-restore.d.ts +2 -0
- package/dist/src/broker/authority-restore.js +36 -1
- package/dist/src/broker/command-wait-restore.d.ts +31 -0
- package/dist/src/broker/command-wait-restore.js +86 -0
- package/dist/src/broker/decision-restore.d.ts +1 -1
- package/dist/src/broker/decision-restore.js +5 -4
- package/dist/src/broker/effect-upgrade.d.ts +2 -0
- package/dist/src/broker/effect-upgrade.js +8 -2
- 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 +22 -11
- package/dist/src/cli/arguments.js +73 -104
- package/dist/src/cli/chat-stores.d.ts +2 -0
- package/dist/src/cli/chat-stores.js +113 -0
- package/dist/src/cli/client.d.ts +4 -1
- package/dist/src/cli/client.js +9 -3
- package/dist/src/cli/command-effects.d.ts +7 -0
- package/dist/src/cli/command-effects.js +39 -0
- package/dist/src/cli/command-requests.d.ts +17 -0
- package/dist/src/cli/command-requests.js +43 -0
- package/dist/src/cli/command-waits.d.ts +9 -0
- package/dist/src/cli/command-waits.js +51 -0
- package/dist/src/cli/commands.js +21 -41
- 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 +52 -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 +6 -0
- package/dist/src/cli/doctor-workflows.js +50 -0
- package/dist/src/cli/doctor.d.ts +15 -0
- package/dist/src/cli/doctor.js +187 -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 +24 -0
- package/dist/src/cli/harness-probes.js +183 -0
- package/dist/src/cli/harness-processes.d.ts +6 -0
- package/dist/src/cli/harness-processes.js +36 -0
- package/dist/src/cli/init-command.d.ts +9 -0
- package/dist/src/cli/init-command.js +52 -0
- package/dist/src/cli/init-prompt-command.d.ts +10 -0
- package/dist/src/cli/init-prompt-command.js +145 -0
- package/dist/src/cli/init-prompt.d.ts +35 -0
- package/dist/src/cli/init-prompt.js +74 -0
- package/dist/src/cli/init-selection.d.ts +13 -0
- package/dist/src/cli/init-selection.js +75 -0
- package/dist/src/cli/main.d.ts +9 -1
- package/dist/src/cli/main.js +69 -61
- package/dist/src/cli/mcp-server.d.ts +1 -0
- package/dist/src/cli/mcp-server.js +156 -0
- package/dist/src/cli/mcp-tools.d.ts +15 -0
- package/dist/src/cli/mcp-tools.js +80 -0
- 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 +2 -1
- package/dist/src/cli/render.js +57 -54
- package/dist/src/cli/report-ci-jobs.d.ts +23 -0
- package/dist/src/cli/report-ci-jobs.js +103 -0
- package/dist/src/cli/report-ci-usage.d.ts +9 -0
- package/dist/src/cli/report-ci-usage.js +185 -0
- package/dist/src/cli/report-ci.d.ts +13 -0
- package/dist/src/cli/report-ci.js +74 -0
- package/dist/src/cli/report-closures.d.ts +6 -0
- package/dist/src/cli/report-closures.js +97 -0
- package/dist/src/cli/report-flow.d.ts +7 -0
- package/dist/src/cli/report-flow.js +122 -0
- package/dist/src/cli/report-github-reader.d.ts +29 -0
- package/dist/src/cli/report-github-reader.js +157 -0
- package/dist/src/cli/report-github.d.ts +25 -0
- package/dist/src/cli/report-github.js +181 -0
- package/dist/src/cli/report-operator.d.ts +3 -0
- package/dist/src/cli/report-operator.js +40 -0
- package/dist/src/cli/report-ready.d.ts +3 -0
- package/dist/src/cli/report-ready.js +96 -0
- package/dist/src/cli/report-text.d.ts +9 -0
- package/dist/src/cli/report-text.js +33 -0
- package/dist/src/cli/report.d.ts +18 -0
- package/dist/src/cli/report.js +269 -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 +6 -1
- package/dist/src/cli/runtime-arguments.js +22 -2
- package/dist/src/cli/runtime-directory.d.ts +6 -2
- package/dist/src/cli/runtime-directory.js +72 -14
- package/dist/src/cli/schedule-arguments.d.ts +14 -0
- package/dist/src/cli/schedule-arguments.js +26 -0
- package/dist/src/cli/schedule-render.d.ts +22 -0
- package/dist/src/cli/schedule-render.js +73 -0
- package/dist/src/cli/terminal-text.d.ts +3 -0
- package/dist/src/cli/terminal-text.js +28 -0
- 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 +6 -0
- package/dist/src/cli/usage-render.js +67 -1
- package/dist/src/cli/usage.d.ts +3 -3
- package/dist/src/cli/usage.js +119 -50
- package/dist/src/cli/watch-actions.d.ts +2 -0
- package/dist/src/cli/watch-actions.js +6 -6
- package/dist/src/cli/watch-board-view.d.ts +1 -1
- package/dist/src/cli/watch-board-view.js +27 -4
- package/dist/src/cli/watch-board.d.ts +4 -2
- package/dist/src/cli/watch-board.js +58 -35
- package/dist/src/cli/watch-card-forms.d.ts +1 -1
- package/dist/src/cli/watch-card-forms.js +13 -12
- package/dist/src/cli/watch-client.d.ts +1 -1
- package/dist/src/cli/watch-client.js +7 -11
- package/dist/src/cli/watch-header-view.d.ts +22 -0
- package/dist/src/cli/watch-header-view.js +104 -0
- package/dist/src/cli/watch-model.d.ts +4 -1
- package/dist/src/cli/watch-model.js +34 -15
- package/dist/src/cli/watch-page.js +57 -23
- package/dist/src/cli/watch-phases.d.ts +12 -3
- package/dist/src/cli/watch-phases.js +68 -11
- 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-board.js +1 -1
- package/dist/src/cli/watch-pr-command.d.ts +1 -0
- package/dist/src/cli/watch-pull-request.d.ts +3 -1
- package/dist/src/cli/watch-pull-request.js +22 -8
- package/dist/src/cli/watch-reads.d.ts +2 -0
- package/dist/src/cli/watch-reads.js +17 -16
- package/dist/src/cli/watch-render.d.ts +23 -1
- package/dist/src/cli/watch-run-input.d.ts +0 -1
- package/dist/src/cli/watch-run-input.js +0 -13
- package/dist/src/cli/watch-server.js +29 -11
- package/dist/src/cli/watch-turn.d.ts +4 -1
- package/dist/src/cli/watch-turn.js +37 -1
- package/dist/src/cli/watch-usage.js +5 -1
- package/dist/src/cli/watch-view.d.ts +4 -21
- package/dist/src/cli/watch-view.js +26 -118
- package/dist/src/cli.js +165 -28
- package/dist/src/command-settings.d.ts +16 -0
- package/dist/src/command-settings.js +42 -0
- package/dist/src/command-wait.d.ts +4 -0
- package/dist/src/command-wait.js +45 -0
- package/dist/src/configuration-change.d.ts +18 -0
- package/dist/src/configuration-change.js +76 -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 +58 -0
- package/dist/src/configuration-schema.js +163 -0
- package/dist/src/daemon/attachment-file.d.ts +6 -0
- package/dist/src/daemon/attachment-file.js +86 -0
- package/dist/src/daemon/attachments.d.ts +14 -0
- package/dist/src/daemon/attachments.js +17 -0
- package/dist/src/daemon/claude-recovery.d.ts +50 -0
- package/dist/src/daemon/claude-recovery.js +204 -0
- package/dist/src/daemon/claude-stream.d.ts +27 -0
- package/dist/src/daemon/claude-stream.js +63 -0
- package/dist/src/daemon/claude-turn.d.ts +18 -18
- package/dist/src/daemon/claude-turn.js +151 -105
- package/dist/src/daemon/claude-worker.d.ts +5 -4
- package/dist/src/daemon/claude-worker.js +149 -158
- 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 +60 -0
- package/dist/src/daemon/daemon-adapters.js +126 -0
- package/dist/src/daemon/daemon-loops.d.ts +16 -0
- package/dist/src/daemon/daemon-loops.js +41 -0
- package/dist/src/daemon/daemon.d.ts +2 -33
- package/dist/src/daemon/daemon.js +133 -131
- 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 +1 -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-attach.d.ts +2 -0
- package/dist/src/daemon/github-attach.js +149 -0
- package/dist/src/daemon/github-ci-filters.d.ts +6 -0
- package/dist/src/daemon/github-ci-filters.js +138 -0
- 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-workflows.d.ts +10 -0
- package/dist/src/daemon/github-ci-workflows.js +148 -0
- package/dist/src/daemon/github-ci.js +109 -10
- package/dist/src/daemon/github-issue-methods.d.ts +2 -0
- package/dist/src/daemon/github-issue-methods.js +37 -2
- package/dist/src/daemon/github-merge-call.d.ts +4 -1
- package/dist/src/daemon/github-merge-call.js +10 -3
- package/dist/src/daemon/github-merge.js +58 -26
- package/dist/src/daemon/github-methods.js +22 -2
- package/dist/src/daemon/github-operation.d.ts +5 -0
- package/dist/src/daemon/github-operation.js +6 -0
- package/dist/src/daemon/github-retry.js +8 -44
- package/dist/src/daemon/github-worker.d.ts +4 -0
- package/dist/src/daemon/github-worker.js +6 -0
- package/dist/src/daemon/issue-queue.d.ts +1 -0
- package/dist/src/daemon/issue-queue.js +16 -34
- package/dist/src/daemon/notify-events.d.ts +6 -0
- package/dist/src/daemon/notify-events.js +84 -0
- package/dist/src/daemon/notify-journal.js +1 -1
- package/dist/src/daemon/notify-message.d.ts +4 -1
- package/dist/src/daemon/notify-message.js +36 -0
- package/dist/src/daemon/notify.d.ts +1 -1
- package/dist/src/daemon/notify.js +7 -78
- package/dist/src/daemon/opencode-stream.d.ts +5 -0
- package/dist/src/daemon/opencode-stream.js +87 -0
- package/dist/src/daemon/operation-journal.d.ts +1 -0
- package/dist/src/daemon/queue-status.d.ts +10 -0
- package/dist/src/daemon/queue-status.js +51 -0
- package/dist/src/daemon/resume-index-lock.d.ts +13 -0
- package/dist/src/daemon/resume-index-lock.js +160 -0
- package/dist/src/daemon/resume-worktree.d.ts +7 -0
- package/dist/src/daemon/resume-worktree.js +29 -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 +2 -10
- package/dist/src/daemon/retrying-turn.js +145 -141
- package/dist/src/daemon/schedule-control.d.ts +26 -0
- package/dist/src/daemon/schedule-control.js +110 -0
- package/dist/src/daemon/schedule-journal.d.ts +6 -0
- package/dist/src/daemon/schedule-journal.js +120 -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-registration.d.ts +7 -14
- package/dist/src/daemon/ticket-registration.js +93 -114
- package/dist/src/daemon/turn-attempt-journal.d.ts +38 -0
- package/dist/src/daemon/turn-attempt-journal.js +136 -0
- package/dist/src/daemon/turn-attempts.d.ts +47 -0
- package/dist/src/daemon/turn-attempts.js +166 -0
- 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 +25 -0
- package/dist/src/daemon/turn-report.js +118 -0
- package/dist/src/daemon/work-tree.d.ts +11 -1
- package/dist/src/daemon/work-tree.js +35 -12
- package/dist/src/daemon/worker-profile.d.ts +8 -0
- package/dist/src/daemon/worker-profile.js +40 -0
- 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 +30 -0
- package/dist/src/daemon/workflow-schedules.js +238 -0
- package/dist/src/daemon/worktree-processes.d.ts +9 -0
- package/dist/src/daemon/worktree-processes.js +151 -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 +22 -0
- package/dist/src/doctor-report.js +63 -0
- package/dist/src/execution-pin.d.ts +5 -0
- package/dist/src/execution-pin.js +67 -4
- 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/harness-start.d.ts +15 -0
- package/dist/src/harness-start.js +37 -0
- package/dist/src/host/command-wait.d.ts +38 -0
- package/dist/src/host/command-wait.js +115 -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 +6 -8
- package/dist/src/host/start-delivery.js +13 -18
- package/dist/src/host/step-bridge-host.d.ts +8 -20
- package/dist/src/host/step-bridge-host.js +65 -58
- package/dist/src/merge-request.d.ts +19 -0
- package/dist/src/merge-request.js +32 -0
- package/dist/src/operation-identity.d.ts +1 -0
- package/dist/src/operation-identity.js +4 -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 +303 -0
- package/dist/src/project-config.schema.json +105 -0
- package/dist/src/project-settings.d.ts +19 -0
- package/dist/src/project-settings.js +133 -0
- package/dist/src/queue-spend.d.ts +4 -0
- package/dist/src/queue-spend.js +21 -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 +28 -0
- package/dist/src/relay/relay-service.js +218 -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-ci.d.ts +164 -0
- package/dist/src/report-ci.js +32 -0
- package/dist/src/report-effects.d.ts +15 -0
- package/dist/src/report-effects.js +212 -0
- package/dist/src/report-flow-types.d.ts +38 -0
- package/dist/src/report-flow-types.js +7 -0
- package/dist/src/report-flow.d.ts +43 -0
- package/dist/src/report-flow.js +193 -0
- package/dist/src/report-operator.d.ts +67 -0
- package/dist/src/report-operator.js +25 -0
- package/dist/src/report-quality.d.ts +221 -0
- package/dist/src/report-quality.js +94 -0
- package/dist/src/report-ready.d.ts +23 -0
- package/dist/src/report-ready.js +117 -0
- package/dist/src/report-statistics.d.ts +51 -0
- package/dist/src/report-statistics.js +106 -0
- package/dist/src/report.d.ts +712 -0
- package/dist/src/report.js +234 -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/schedule-progress.d.ts +33 -0
- package/dist/src/schedule-progress.js +45 -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/command-waits.d.ts +34 -0
- package/dist/src/service/command-waits.js +86 -0
- package/dist/src/service/decision-handler.d.ts +4 -0
- package/dist/src/service/decision-handler.js +39 -4
- package/dist/src/service/expiry.js +2 -0
- package/dist/src/service/gateway.js +21 -4
- package/dist/src/service/queue-spend.d.ts +6 -0
- package/dist/src/service/queue-spend.js +68 -0
- package/dist/src/service/registry.d.ts +16 -3
- package/dist/src/service/registry.js +34 -3
- package/dist/src/service/replies.d.ts +16 -1
- package/dist/src/service/replies.js +23 -0
- package/dist/src/service/run-handlers.js +35 -56
- package/dist/src/service/run-metadata.d.ts +22 -0
- package/dist/src/service/run-metadata.js +138 -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 +22 -2
- package/dist/src/service/service.js +29 -13
- package/dist/src/service/submission-handler.d.ts +0 -1
- package/dist/src/service/submission-handler.js +22 -36
- package/dist/src/service/worker-port.d.ts +1 -0
- package/dist/src/service/worker-port.js +9 -1
- package/dist/src/service/worker-totals.d.ts +2 -0
- package/dist/src/service/worker-totals.js +9 -24
- package/dist/src/step-bridge.d.ts +43 -0
- package/dist/src/steps/command-wait.d.ts +12 -0
- package/dist/src/steps/command-wait.js +26 -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/open-decision-wait.d.ts +2 -0
- package/dist/src/steps/open-decision-wait.js +8 -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 +19 -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-command.d.ts +3 -0
- package/dist/src/steps/wait-for-command.js +17 -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/command-wait-rows.d.ts +30 -0
- package/dist/src/storage/command-wait-rows.js +96 -0
- package/dist/src/storage/decision-snapshots.d.ts +9 -1
- package/dist/src/storage/decision-snapshots.js +22 -2
- package/dist/src/storage/domain-changes.d.ts +2 -0
- package/dist/src/storage/domain-changes.js +3 -0
- package/dist/src/storage/domain-schema.d.ts +13 -1
- package/dist/src/storage/domain-schema.js +31 -4
- package/dist/src/storage/effect-schema.d.ts +1 -0
- package/dist/src/storage/effect-schema.js +5 -0
- package/dist/src/submission.d.ts +4 -0
- package/dist/src/submission.js +6 -2
- package/dist/src/testing-requests.d.ts +15 -0
- package/dist/src/testing-requests.js +93 -0
- package/dist/src/testing.d.ts +23 -0
- package/dist/src/testing.js +211 -0
- package/dist/src/ticket-status-stream.d.ts +9 -0
- package/dist/src/ticket-status-stream.js +94 -0
- package/dist/src/token-prices.d.ts +12 -4
- package/dist/src/token-prices.js +15 -2
- package/dist/src/turn-profile.d.ts +1 -0
- package/dist/src/turn-profile.js +8 -1
- package/dist/src/worker-usage.d.ts +17 -0
- package/dist/src/worker-usage.js +60 -0
- package/dist/src/workflow-admission.d.ts +5 -0
- package/dist/src/workflow-candidate.d.ts +8 -2
- package/dist/src/workflow-candidate.js +59 -6
- package/dist/src/workflow-contracts.d.ts +1 -0
- package/dist/src/workflow-contracts.js +9 -2
- package/dist/src/workflow-declaration.d.ts +21 -3
- package/dist/src/workflow-declaration.js +77 -9
- package/dist/src/workflow-discovery.d.ts +3 -13
- package/dist/src/workflow-discovery.js +5 -14
- package/dist/src/workflow-refusals.js +3 -1
- package/dist/src/workflow-schedule.d.ts +22 -0
- package/dist/src/workflow-schedule.js +53 -0
- package/dist/src/workflows.d.ts +12 -2
- package/dist/src/workflows.js +9 -1
- package/dist/tools/admit-workflow.d.ts +1 -0
- package/dist/tools/admit-workflow.js +18 -5
- 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/red-green-command.d.ts +1 -0
- package/dist/tools/red-green-command.js +174 -0
- package/dist/tools/red-green-process.d.ts +10 -0
- package/dist/tools/red-green-process.js +59 -0
- package/dist/tools/self-host-processes.d.ts +3 -0
- package/dist/tools/self-host-processes.js +63 -33
- package/dist/tools/self-host-project.d.ts +4 -0
- package/dist/tools/self-host-project.js +42 -60
- 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 +128 -71
- package/dist/tools/template-command.d.ts +1 -0
- package/dist/tools/template-command.js +160 -0
- package/dist/tools/template-copy.d.ts +11 -0
- package/dist/tools/template-copy.js +130 -0
- package/dist/tools/template-files.d.ts +17 -0
- package/dist/tools/template-files.js +74 -0
- package/dist/tools/workflow-bundles.js +1 -0
- package/dist/tools/workflow-candidate-counts.d.ts +6 -2
- package/dist/tools/workflow-candidate-counts.js +31 -16
- 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 +2 -0
- package/dist/tools/workflow-candidate-program.js +36 -8
- package/dist/tools/workflow-candidate-shape.d.ts +3 -0
- package/dist/tools/workflow-candidate-shape.js +90 -0
- package/dist/tools/workflow-candidate-source.js +92 -16
- package/dist/tools/workflow-candidate-syntax.d.ts +9 -3
- package/dist/tools/workflow-candidate-syntax.js +83 -109
- package/dist/tools/workflow-command.d.ts +1 -0
- package/dist/tools/workflow-command.js +142 -0
- package/dist/tools/workflow-folder-capture.d.ts +1 -0
- package/dist/tools/workflow-folder-capture.js +47 -2
- package/dist/tools/workflow-folders.d.ts +18 -3
- package/dist/tools/workflow-folders.js +60 -7
- 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/package.json +60 -10
- package/templates/develop/README.md +90 -0
- package/templates/develop/develop/accept.ts +11 -0
- package/templates/develop/develop/flow-tests.ts +394 -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 +156 -0
- package/templates/develop/develop/queue-partial.ts +39 -0
- package/templates/develop/develop/refusal-tests.ts +251 -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 +68 -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/templates/idea-to-issue/README.md +27 -0
- package/templates/idea-to-issue/idea-to-issue/effects.ts +52 -0
- package/templates/idea-to-issue/idea-to-issue/leave.ts +10 -0
- package/templates/idea-to-issue/idea-to-issue/next.ts +29 -0
- package/templates/idea-to-issue/idea-to-issue/post-person.ts +18 -0
- package/templates/idea-to-issue/idea-to-issue/post.ts +50 -0
- package/templates/idea-to-issue/idea-to-issue/queue.ts +27 -0
- package/templates/idea-to-issue/idea-to-issue/review.ts +42 -0
- package/templates/idea-to-issue/idea-to-issue/scenarios.ts +50 -0
- package/templates/idea-to-issue/idea-to-issue/turn.ts +40 -0
- package/templates/idea-to-issue/idea-to-issue.declaration.json +16 -0
- package/templates/idea-to-issue/idea-to-issue.test.ts +79 -0
- package/templates/idea-to-issue/idea-to-issue.ts +49 -0
- package/templates/idea-to-issue/template.json +81 -0
- package/templates/review-day/README.md +97 -0
- package/templates/review-day/review-day/critique.ts +58 -0
- package/templates/review-day/review-day/decision.ts +29 -0
- package/templates/review-day/review-day/facts.ts +69 -0
- package/templates/review-day/review-day/label.ts +29 -0
- package/templates/review-day/review-day/next.ts +28 -0
- package/templates/review-day/review-day/post.ts +27 -0
- package/templates/review-day/review-day/report.ts +98 -0
- package/templates/review-day/review-day/rules.ts +12 -0
- package/templates/review-day/review-day/scenarios.ts +76 -0
- package/templates/review-day/review-day/turn.ts +73 -0
- package/templates/review-day/review-day.declaration.json +16 -0
- package/templates/review-day/review-day.test.ts +362 -0
- package/templates/review-day/review-day.ts +37 -0
- package/templates/review-day/template.json +56 -0
- package/dist/src/chats/analysis-batches.d.ts +0 -42
- package/dist/src/chats/analysis-batches.js +0 -97
- package/dist/src/chats/analysis-checkpoint.d.ts +0 -29
- package/dist/src/chats/analysis-checkpoint.js +0 -31
- 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 -18
- package/dist/src/chats/analysis-input.js +0 -97
- package/dist/src/chats/analysis-links.d.ts +0 -2
- package/dist/src/chats/analysis-links.js +0 -25
- package/dist/src/chats/analysis-merge.d.ts +0 -16
- package/dist/src/chats/analysis-merge.js +0 -134
- package/dist/src/chats/analysis-prompt.d.ts +0 -18
- package/dist/src/chats/analysis-prompt.js +0 -42
- package/dist/src/chats/analysis-proposal.d.ts +0 -4
- package/dist/src/chats/analysis-proposal.js +0 -41
- 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 -4
- package/dist/src/chats/analysis-shape.js +0 -235
- 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/reference-mapping.d.ts +0 -16
- package/dist/src/chats/reference-mapping.js +0 -153
- 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/chats/workflow-generation-projection.d.ts +0 -8
- package/dist/src/chats/workflow-generation-projection.js +0 -75
- package/dist/src/chats/workflow-generation-source.d.ts +0 -25
- package/dist/src/chats/workflow-generation-source.js +0 -124
- package/dist/src/chats/workflow-generation-text.d.ts +0 -23
- package/dist/src/chats/workflow-generation-text.js +0 -74
- package/dist/src/chats/workflow-generation.d.ts +0 -69
- package/dist/src/chats/workflow-generation.js +0 -142
- package/dist/src/cli/watch-start-view.d.ts +0 -18
- package/dist/src/cli/watch-start-view.js +0 -77
- 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 -20
- package/dist/src/daemon/analysis-worker.js +0 -271
- package/dist/src/daemon/chats-batch-binding.d.ts +0 -23
- package/dist/src/daemon/chats-batch-binding.js +0 -99
- package/dist/src/daemon/chats-capture.d.ts +0 -18
- package/dist/src/daemon/chats-capture.js +0 -194
- package/dist/src/daemon/chats-checkpoints.d.ts +0 -41
- package/dist/src/daemon/chats-checkpoints.js +0 -186
- package/dist/src/daemon/chats-files.d.ts +0 -42
- package/dist/src/daemon/chats-files.js +0 -252
- package/dist/src/daemon/chats-follow-up.d.ts +0 -38
- package/dist/src/daemon/chats-follow-up.js +0 -180
- package/dist/src/daemon/chats-question.d.ts +0 -15
- package/dist/src/daemon/chats-question.js +0 -93
- package/dist/src/daemon/chats-worker.d.ts +0 -13
- package/dist/src/daemon/chats-worker.js +0 -201
- package/dist/src/steps/decision-gate.d.ts +0 -2
- package/dist/src/steps/decision-gate.js +0 -8
- package/dist/workflows/analyze-chats.d.ts +0 -15
- package/dist/workflows/analyze-chats.declaration.json +0 -22
- package/dist/workflows/analyze-chats.js +0 -250
- package/dist/workflows/develop-prd.d.ts +0 -7
- package/dist/workflows/develop-prd.js +0 -165
- package/dist/workflows/develop-ticket.d.ts +0 -9
- package/dist/workflows/develop-ticket.js +0 -207
- package/dist/workflows/issue-labels.d.ts +0 -16
- package/dist/workflows/issue-labels.js +0 -70
- package/dist/workflows/ticket-prompts.d.ts +0 -35
- package/dist/workflows/ticket-prompts.js +0 -143
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { constants } from "node:fs";
|
|
2
2
|
import { lstat, open, readdir, realpath, } from "node:fs/promises";
|
|
3
3
|
import { isAbsolute, join, relative, sep } from "node:path";
|
|
4
|
+
import ts from "typescript";
|
|
5
|
+
import { workflowHelperPath } from "../src/workflow-candidate.js";
|
|
4
6
|
function contained(root, path) {
|
|
5
7
|
const suffix = relative(root, path);
|
|
6
8
|
return (!isAbsolute(suffix) && suffix !== ".." && !suffix.startsWith(`..${sep}`));
|
|
@@ -92,6 +94,19 @@ async function openSource(folder, name) {
|
|
|
92
94
|
}
|
|
93
95
|
}
|
|
94
96
|
async function inspectFile(folder, name) {
|
|
97
|
+
const parts = name.split("/");
|
|
98
|
+
const fileName = parts.pop();
|
|
99
|
+
if (!fileName || parts.some((part) => !safeComponent(part)))
|
|
100
|
+
throw new Error("unsafe-workflow-path");
|
|
101
|
+
let parent = folder;
|
|
102
|
+
for (const part of parts) {
|
|
103
|
+
const path = join(parent.path, part);
|
|
104
|
+
const stats = await lstat(path, { bigint: true });
|
|
105
|
+
if (!stats.isDirectory())
|
|
106
|
+
throw new Error("unsafe-workflow-path");
|
|
107
|
+
parent = { path, components: [...parent.components, { path, stats }] };
|
|
108
|
+
}
|
|
109
|
+
await verifyFolder(parent);
|
|
95
110
|
const path = join(folder.path, name);
|
|
96
111
|
const stats = await lstat(path, { bigint: true });
|
|
97
112
|
if (!stats.isFile())
|
|
@@ -101,11 +116,12 @@ async function inspectFile(folder, name) {
|
|
|
101
116
|
throw new Error("workflow-source-changed");
|
|
102
117
|
if (!contained(folder.path, resolved))
|
|
103
118
|
throw new Error("unsafe-workflow-path");
|
|
104
|
-
return { path, name, stats };
|
|
119
|
+
return { path, name, stats, folder: parent, fileName };
|
|
105
120
|
}
|
|
106
121
|
async function captureFile(folder, file) {
|
|
107
122
|
const { stats } = file;
|
|
108
|
-
|
|
123
|
+
await verifyFolder(folder);
|
|
124
|
+
const handle = await openSource(file.folder, file.fileName).catch(changedPathError);
|
|
109
125
|
try {
|
|
110
126
|
if (!sameSnapshot(stats, await handle.stat({ bigint: true })))
|
|
111
127
|
throw new Error("workflow-source-changed");
|
|
@@ -140,11 +156,38 @@ async function captureFiles(folder, names) {
|
|
|
140
156
|
}
|
|
141
157
|
}
|
|
142
158
|
for (const file of captured) {
|
|
159
|
+
await verifyFolder(file.folder);
|
|
143
160
|
if (!sameSnapshot(file.stats, await capturedStats(file.path)))
|
|
144
161
|
throw new Error("workflow-source-changed");
|
|
145
162
|
}
|
|
146
163
|
return { captured, codes };
|
|
147
164
|
}
|
|
165
|
+
async function captureImports(folder, snapshot) {
|
|
166
|
+
const { captured, codes } = snapshot;
|
|
167
|
+
const helpers = {};
|
|
168
|
+
for (const source of captured) {
|
|
169
|
+
if (!source.name.endsWith(".ts"))
|
|
170
|
+
continue;
|
|
171
|
+
for (const imported of ts.preProcessFile(source.bytes.toString("utf8"))
|
|
172
|
+
.importedFiles) {
|
|
173
|
+
const name = workflowHelperPath(source.name, imported.fileName);
|
|
174
|
+
if (!name || captured.some((file) => file.name === name))
|
|
175
|
+
continue;
|
|
176
|
+
const result = await captureFiles(folder, [name]);
|
|
177
|
+
codes.push(...result.codes);
|
|
178
|
+
captured.push(...result.captured);
|
|
179
|
+
const text = decodedFile({ bytes: result.captured[0]?.bytes, code: "unsupported-source" }, codes);
|
|
180
|
+
if (text !== undefined)
|
|
181
|
+
helpers[name] = text;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
for (const file of captured) {
|
|
185
|
+
await verifyFolder(file.folder);
|
|
186
|
+
if (!sameSnapshot(file.stats, await capturedStats(file.path)))
|
|
187
|
+
throw new Error("workflow-source-changed");
|
|
188
|
+
}
|
|
189
|
+
return helpers;
|
|
190
|
+
}
|
|
148
191
|
function decodedFile(input, codes) {
|
|
149
192
|
if (input.bytes === undefined)
|
|
150
193
|
return undefined;
|
|
@@ -163,6 +206,7 @@ export async function captureWorkflowCandidate(folder, name) {
|
|
|
163
206
|
name,
|
|
164
207
|
declarationName,
|
|
165
208
|
]);
|
|
209
|
+
const helpers = await captureImports(folder, { captured, codes });
|
|
166
210
|
await verifyFolder(folder);
|
|
167
211
|
const source = decodedFile({
|
|
168
212
|
bytes: captured.find((file) => file.name === name)?.bytes,
|
|
@@ -175,6 +219,7 @@ export async function captureWorkflowCandidate(folder, name) {
|
|
|
175
219
|
return {
|
|
176
220
|
source,
|
|
177
221
|
declaration,
|
|
222
|
+
helpers,
|
|
178
223
|
codes: [
|
|
179
224
|
...new Set(codes.includes("unsafe-workflow-path")
|
|
180
225
|
? codes.filter((code) => code !== "workflow-read-failed")
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type
|
|
1
|
+
import type { WorkflowDeclaration } from "../src/workflow-declaration.ts";
|
|
2
|
+
import { type CandidateDeclaration, type WorkflowCandidateCode } from "../src/workflow-candidate.ts";
|
|
3
|
+
import { type WorkflowConflictCode } from "../src/workflow-discovery.ts";
|
|
3
4
|
import type { CandidatePackageOptions } from "./workflow-candidate-program.ts";
|
|
4
5
|
import { type WorkflowCaptureCode } from "./workflow-folder-capture.ts";
|
|
5
6
|
export interface WorkflowFolderInput {
|
|
6
7
|
readonly repository: string;
|
|
7
8
|
readonly home: string;
|
|
8
9
|
readonly xdgConfigHome?: string | undefined;
|
|
9
|
-
readonly
|
|
10
|
+
readonly userFolder?: string | undefined;
|
|
10
11
|
}
|
|
11
12
|
interface WorkflowLabel {
|
|
12
13
|
readonly scope: "project" | "user";
|
|
@@ -16,6 +17,7 @@ interface WorkflowSnapshot extends WorkflowLabel {
|
|
|
16
17
|
readonly baseName: string;
|
|
17
18
|
readonly source: string;
|
|
18
19
|
readonly declaration: string;
|
|
20
|
+
readonly helpers: Readonly<Record<string, string>>;
|
|
19
21
|
}
|
|
20
22
|
export interface WorkflowFolderCandidate extends WorkflowSnapshot {
|
|
21
23
|
readonly repository: string;
|
|
@@ -24,10 +26,23 @@ export interface WorkflowFolderCandidate extends WorkflowSnapshot {
|
|
|
24
26
|
export interface WorkflowFolderRefusal extends WorkflowLabel {
|
|
25
27
|
readonly codes: readonly (WorkflowCandidateCode | WorkflowCaptureCode | WorkflowConflictCode | "compile-failed")[];
|
|
26
28
|
}
|
|
29
|
+
export interface WorkflowListing {
|
|
30
|
+
readonly scope: "project" | "user";
|
|
31
|
+
readonly workflowId: string | null;
|
|
32
|
+
readonly file: string;
|
|
33
|
+
readonly admitted: boolean;
|
|
34
|
+
readonly codes: readonly string[];
|
|
35
|
+
readonly declaration?: CandidateDeclaration | WorkflowDeclaration;
|
|
36
|
+
}
|
|
27
37
|
export interface WorkflowFolderResult {
|
|
38
|
+
readonly workflows: readonly WorkflowListing[];
|
|
28
39
|
readonly repository: string;
|
|
29
40
|
readonly candidates: readonly WorkflowFolderCandidate[];
|
|
30
41
|
readonly refusals: readonly WorkflowFolderRefusal[];
|
|
31
42
|
}
|
|
43
|
+
export declare function userLocation(input: Pick<WorkflowFolderInput, "home" | "xdgConfigHome" | "userFolder">): {
|
|
44
|
+
readonly root: string;
|
|
45
|
+
readonly parts: readonly string[];
|
|
46
|
+
};
|
|
32
47
|
export declare function loadWorkflowFolders(input: WorkflowFolderInput, installed?: CandidatePackageOptions): Promise<WorkflowFolderResult>;
|
|
33
48
|
export {};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { absoluteWorkflowFolder } from "../src/project-settings.js";
|
|
1
2
|
import { createHash } from "node:crypto";
|
|
2
3
|
import { realpath } from "node:fs/promises";
|
|
3
|
-
import { isAbsolute, join } from "node:path";
|
|
4
|
+
import { basename, dirname, isAbsolute, join } from "node:path";
|
|
4
5
|
import ts from "typescript";
|
|
6
|
+
import { isCandidateDeclaration, } from "../src/workflow-candidate.js";
|
|
5
7
|
import { record } from "../src/protocol.js";
|
|
6
8
|
import { workflowConflicts, } from "../src/workflow-discovery.js";
|
|
7
9
|
import { admitWorkflowCandidate } from "./admit-workflow.js";
|
|
@@ -22,8 +24,11 @@ function parsedDeclaration(text) {
|
|
|
22
24
|
function identity(entry) {
|
|
23
25
|
const snapshot = entry.kind === "captured" ? entry.snapshot : entry;
|
|
24
26
|
const source = ts.createSourceFile("candidate.ts", snapshot.source ?? "", ts.ScriptTarget.Latest, true);
|
|
25
|
-
const
|
|
27
|
+
const parsed = parsedDeclaration(snapshot.declaration ?? "");
|
|
28
|
+
const declaration = record(record(parsed)?.["workflow"]);
|
|
29
|
+
const workflowId = declaration?.["workflowId"];
|
|
26
30
|
return {
|
|
31
|
+
queue: isCandidateDeclaration(parsed) && parsed.workflow.queue === true,
|
|
27
32
|
baseName: snapshot.baseName,
|
|
28
33
|
workflowId: typeof workflowId === "string" ? workflowId : undefined,
|
|
29
34
|
functionNames: source.statements
|
|
@@ -55,7 +60,9 @@ async function scanFolder(location, refusals) {
|
|
|
55
60
|
}
|
|
56
61
|
const snapshots = [];
|
|
57
62
|
for (const name of entries
|
|
58
|
-
.filter((name) => name.endsWith(".ts") &&
|
|
63
|
+
.filter((name) => name.endsWith(".ts") &&
|
|
64
|
+
!name.endsWith(".d.ts") &&
|
|
65
|
+
!name.endsWith(".test.ts"))
|
|
59
66
|
.sort()) {
|
|
60
67
|
snapshots.push(await captureEntry(folder, {
|
|
61
68
|
scope: location.scope,
|
|
@@ -83,6 +90,7 @@ async function captureEntry(folder, file) {
|
|
|
83
90
|
...label,
|
|
84
91
|
source: capture.source,
|
|
85
92
|
declaration: capture.declaration,
|
|
93
|
+
helpers: capture.helpers,
|
|
86
94
|
},
|
|
87
95
|
};
|
|
88
96
|
}
|
|
@@ -96,22 +104,65 @@ async function captureEntry(folder, file) {
|
|
|
96
104
|
};
|
|
97
105
|
}
|
|
98
106
|
}
|
|
99
|
-
|
|
100
|
-
const
|
|
107
|
+
export function userLocation(input) {
|
|
108
|
+
const folder = absoluteWorkflowFolder(input.userFolder);
|
|
109
|
+
if (folder !== undefined)
|
|
110
|
+
return { root: dirname(folder), parts: [basename(folder)] };
|
|
101
111
|
const configuration = input.xdgConfigHome && isAbsolute(input.xdgConfigHome)
|
|
102
112
|
? input.xdgConfigHome
|
|
103
113
|
: join(input.home, ".config");
|
|
114
|
+
return { root: configuration, parts: ["cloving", "workflows"] };
|
|
115
|
+
}
|
|
116
|
+
async function scanFolders(input, refusals) {
|
|
117
|
+
const repository = await realpath(input.repository);
|
|
104
118
|
const snapshots = [
|
|
105
119
|
...(await scanFolder({ scope: "project", root: repository, parts: [".cloving", "workflows"] }, refusals)),
|
|
106
|
-
...(await scanFolder({ scope: "user",
|
|
120
|
+
...(await scanFolder({ scope: "user", ...userLocation(input) }, refusals)),
|
|
107
121
|
];
|
|
108
122
|
return { repository, snapshots };
|
|
109
123
|
}
|
|
124
|
+
function workflowFolder(input, scope) {
|
|
125
|
+
if (scope === "project")
|
|
126
|
+
return join(input.repository, ".cloving", "workflows");
|
|
127
|
+
const { root, parts } = userLocation(input);
|
|
128
|
+
return join(root, ...parts);
|
|
129
|
+
}
|
|
130
|
+
function folderListings(input, found) {
|
|
131
|
+
const { repository, snapshots, refusals } = found;
|
|
132
|
+
const workflows = snapshots.map((entry) => {
|
|
133
|
+
const snapshot = entry.kind === "captured" ? entry.snapshot : entry;
|
|
134
|
+
const declaration = parsedDeclaration(snapshot.declaration ?? "");
|
|
135
|
+
const refusal = refusals.find((item) => item.scope === snapshot.scope && item.label === snapshot.label);
|
|
136
|
+
const folder = workflowFolder({ ...input, repository }, snapshot.scope);
|
|
137
|
+
return {
|
|
138
|
+
scope: snapshot.scope,
|
|
139
|
+
workflowId: isCandidateDeclaration(declaration)
|
|
140
|
+
? declaration.workflow.workflowId
|
|
141
|
+
: null,
|
|
142
|
+
file: join(folder, snapshot.baseName + ".ts"),
|
|
143
|
+
admitted: refusal === undefined,
|
|
144
|
+
codes: refusal?.codes ?? [],
|
|
145
|
+
...(isCandidateDeclaration(declaration) ? { declaration } : {}),
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
return [
|
|
149
|
+
...workflows,
|
|
150
|
+
...refusals
|
|
151
|
+
.filter((refusal) => refusal.label === "workflows/")
|
|
152
|
+
.map((refusal) => ({
|
|
153
|
+
scope: refusal.scope,
|
|
154
|
+
workflowId: null,
|
|
155
|
+
file: workflowFolder({ ...input, repository }, refusal.scope),
|
|
156
|
+
admitted: false,
|
|
157
|
+
codes: refusal.codes,
|
|
158
|
+
})),
|
|
159
|
+
];
|
|
160
|
+
}
|
|
110
161
|
export async function loadWorkflowFolders(input, installed = {}) {
|
|
111
162
|
const candidates = [];
|
|
112
163
|
const refusals = [];
|
|
113
164
|
const { repository, snapshots } = await scanFolders(input, refusals);
|
|
114
|
-
const conflicts = workflowConflicts(snapshots.map(identity)
|
|
165
|
+
const conflicts = workflowConflicts(snapshots.map(identity));
|
|
115
166
|
for (const [index, entry] of snapshots.entries()) {
|
|
116
167
|
const label = entry.kind === "captured" ? entry.snapshot : entry;
|
|
117
168
|
const codes = [
|
|
@@ -128,6 +179,7 @@ export async function loadWorkflowFolders(input, installed = {}) {
|
|
|
128
179
|
const result = await admitWorkflowCandidate({
|
|
129
180
|
source: snapshot.source,
|
|
130
181
|
declaration: parsedDeclaration(snapshot.declaration),
|
|
182
|
+
helpers: snapshot.helpers,
|
|
131
183
|
}, installed);
|
|
132
184
|
if (result.kind === "refused")
|
|
133
185
|
refusals.push({
|
|
@@ -143,6 +195,7 @@ export async function loadWorkflowFolders(input, installed = {}) {
|
|
|
143
195
|
});
|
|
144
196
|
}
|
|
145
197
|
return {
|
|
198
|
+
workflows: folderListings(input, { repository, snapshots, refusals }),
|
|
146
199
|
repository,
|
|
147
200
|
candidates: candidates.sort(compareLabels),
|
|
148
201
|
refusals: refusals.sort(compareLabels),
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function workflowTestHook(input) {
|
|
2
|
+
const modules = Object.fromEntries(Object.entries(input.exports).map(([subpath, target]) => {
|
|
3
|
+
const path = target.import
|
|
4
|
+
.replace("./dist/", "./")
|
|
5
|
+
.replace(/\.js$/, input.extension);
|
|
6
|
+
return ["cloving" + subpath.slice(1), new URL(path, input.root).href];
|
|
7
|
+
}));
|
|
8
|
+
const hook = `import { registerHooks } from "node:module";
|
|
9
|
+
const modules = ${JSON.stringify(modules)};
|
|
10
|
+
registerHooks({
|
|
11
|
+
resolve(specifier, context, nextResolve) {
|
|
12
|
+
return nextResolve(modules[specifier] ?? specifier, context);
|
|
13
|
+
},
|
|
14
|
+
});`;
|
|
15
|
+
return "data:text/javascript," + encodeURIComponent(hook);
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function workflowTestLoader(): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { extname } from "node:path";
|
|
2
|
+
import packageMetadata from "#package" with { type: "json" };
|
|
3
|
+
import { workflowTestHook } from "./workflow-test-hook.js";
|
|
4
|
+
export function workflowTestLoader() {
|
|
5
|
+
return workflowTestHook({
|
|
6
|
+
root: new URL("../", import.meta.url).href,
|
|
7
|
+
extension: extname(import.meta.filename),
|
|
8
|
+
exports: packageMetadata.exports,
|
|
9
|
+
});
|
|
10
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloving",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Local durable development workflow service",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -31,19 +31,67 @@
|
|
|
31
31
|
"types": "./dist/src/steps/protected-effect.d.ts",
|
|
32
32
|
"import": "./dist/src/steps/protected-effect.js"
|
|
33
33
|
},
|
|
34
|
-
"./workflows/steps/
|
|
35
|
-
"types": "./dist/src/steps/
|
|
36
|
-
"import": "./dist/src/steps/
|
|
34
|
+
"./workflows/steps/review-subject": {
|
|
35
|
+
"types": "./dist/src/steps/review-subject.d.ts",
|
|
36
|
+
"import": "./dist/src/steps/review-subject.js"
|
|
37
|
+
},
|
|
38
|
+
"./workflows/steps/review-by-person": {
|
|
39
|
+
"types": "./dist/src/steps/review-by-person.d.ts",
|
|
40
|
+
"import": "./dist/src/steps/review-by-person.js"
|
|
41
|
+
},
|
|
42
|
+
"./workflows/steps/review-by-agent": {
|
|
43
|
+
"types": "./dist/src/steps/review-by-agent.d.ts",
|
|
44
|
+
"import": "./dist/src/steps/review-by-agent.js"
|
|
45
|
+
},
|
|
46
|
+
"./workflows/steps/merge-by-person": {
|
|
47
|
+
"types": "./dist/src/steps/merge-by-person.d.ts",
|
|
48
|
+
"import": "./dist/src/steps/merge-by-person.js"
|
|
49
|
+
},
|
|
50
|
+
"./workflows/steps/merge-when-green": {
|
|
51
|
+
"types": "./dist/src/steps/merge-when-green.d.ts",
|
|
52
|
+
"import": "./dist/src/steps/merge-when-green.js"
|
|
53
|
+
},
|
|
54
|
+
"./workflows/steps/open-decision-wait": {
|
|
55
|
+
"types": "./dist/src/steps/open-decision-wait.d.ts",
|
|
56
|
+
"import": "./dist/src/steps/open-decision-wait.js"
|
|
57
|
+
},
|
|
58
|
+
"./workflows/steps/wait-for-decision": {
|
|
59
|
+
"types": "./dist/src/steps/wait-for-decision.d.ts",
|
|
60
|
+
"import": "./dist/src/steps/wait-for-decision.js"
|
|
37
61
|
},
|
|
38
62
|
"./workflows/steps/handoff": {
|
|
39
63
|
"types": "./dist/src/steps/handoff.d.ts",
|
|
40
64
|
"import": "./dist/src/steps/handoff.js"
|
|
65
|
+
},
|
|
66
|
+
"./workflows/steps/wait-for-run": {
|
|
67
|
+
"types": "./dist/src/steps/wait-for-run.d.ts",
|
|
68
|
+
"import": "./dist/src/steps/wait-for-run.js"
|
|
69
|
+
},
|
|
70
|
+
"./workflows/steps/run-command": {
|
|
71
|
+
"types": "./dist/src/steps/run-command.d.ts",
|
|
72
|
+
"import": "./dist/src/steps/run-command.js"
|
|
73
|
+
},
|
|
74
|
+
"./workflows/testing": {
|
|
75
|
+
"types": "./dist/src/testing.d.ts",
|
|
76
|
+
"import": "./dist/src/testing.js"
|
|
77
|
+
},
|
|
78
|
+
"./workflows/steps/sleep": {
|
|
79
|
+
"types": "./dist/src/steps/sleep.d.ts",
|
|
80
|
+
"import": "./dist/src/steps/sleep.js"
|
|
81
|
+
},
|
|
82
|
+
"./workflows/steps/wait-for-command": {
|
|
83
|
+
"types": "./dist/src/steps/wait-for-command.d.ts",
|
|
84
|
+
"import": "./dist/src/steps/wait-for-command.js"
|
|
85
|
+
},
|
|
86
|
+
"./workflows/steps/command-wait": {
|
|
87
|
+
"types": "./dist/src/steps/command-wait.d.ts",
|
|
88
|
+
"import": "./dist/src/steps/command-wait.js"
|
|
41
89
|
}
|
|
42
90
|
},
|
|
43
91
|
"files": [
|
|
44
92
|
"dist/src",
|
|
45
93
|
"dist/tools",
|
|
46
|
-
"
|
|
94
|
+
"templates",
|
|
47
95
|
"assets/watch-fonts/fira-code-latin-400-normal.woff2",
|
|
48
96
|
"assets/watch-fonts/fira-code-latin-500-normal.woff2",
|
|
49
97
|
"assets/watch-fonts/fira-code-OFL.md",
|
|
@@ -59,7 +107,7 @@
|
|
|
59
107
|
"assets/watch-fonts/manifest.json"
|
|
60
108
|
],
|
|
61
109
|
"engines": {
|
|
62
|
-
"node": ">=26.9.0 <27",
|
|
110
|
+
"node": ">=24.22.1 <25 || >=26.9.0 <27",
|
|
63
111
|
"npm": ">=11.19.1 <12"
|
|
64
112
|
},
|
|
65
113
|
"os": [
|
|
@@ -71,14 +119,15 @@
|
|
|
71
119
|
"x64"
|
|
72
120
|
],
|
|
73
121
|
"scripts": {
|
|
74
|
-
"build": "tsc --project tsconfig.build.json
|
|
122
|
+
"build": "tsc --project tsconfig.build.json",
|
|
75
123
|
"build:workflows": "node tools/compile-workflows.ts",
|
|
76
|
-
"check:setup": "tsc --project tsconfig.json --noEmit",
|
|
124
|
+
"check:setup": "node tools/check-shells.ts && tsc --project tsconfig.json --noEmit",
|
|
77
125
|
"check:quality": "node tools/check-quality.ts",
|
|
78
126
|
"check:clean": "node tools/check-clean.ts",
|
|
79
127
|
"check:lint": "eslint src tools quality test eslint.config.mjs --max-warnings 0",
|
|
80
128
|
"check:format": "prettier --check src tools quality test eslint.config.mjs package.json tsconfig.json tsconfig.build.json",
|
|
81
129
|
"test:quality": "node --test test/quality/*.test.ts",
|
|
130
|
+
"record:test-durations": "node tools/record-test-durations.ts",
|
|
82
131
|
"test:scale": "node --test --test-concurrency=1 test/authority-opening-scale.benchmark.ts",
|
|
83
132
|
"check": "node tools/quality-pending.ts",
|
|
84
133
|
"test:concurrency": "node tools/quality-pending.ts"
|
|
@@ -106,8 +155,9 @@
|
|
|
106
155
|
"@workflow/builders": "5.0.2",
|
|
107
156
|
"entities": "8.1.0",
|
|
108
157
|
"preact": "11.0.0",
|
|
109
|
-
"solid-objects": "0.
|
|
158
|
+
"solid-objects": "1.0.2",
|
|
110
159
|
"typescript": "6.0.3",
|
|
111
|
-
"workflow": "5.1.0"
|
|
160
|
+
"workflow": "5.1.0",
|
|
161
|
+
"yaml": "2.9.1"
|
|
112
162
|
}
|
|
113
163
|
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Develop template decisions
|
|
2
|
+
|
|
3
|
+
`template.json` describes the five decisions used by the develop template.
|
|
4
|
+
The default workflow in `develop.ts` accepts the declared ticket input, selects
|
|
5
|
+
from the queue, opens a pull request, waits for Greptile at 5/5, and calls
|
|
6
|
+
`mergeWhenGreen` with `check: "beforeMerge"`. Its declaration and helper files
|
|
7
|
+
pass folder admission, including compilation with the Workflow SDK in a packed
|
|
8
|
+
installation. Copy this directory's contents into a workflow folder.
|
|
9
|
+
|
|
10
|
+
The host supplies `{ cycleId, repository, input: { ticket: { id, text } } }`.
|
|
11
|
+
`develop/report.ts` extracts the resolved text and preserves the worker's ticket
|
|
12
|
+
status. `develop/round.ts` composes development, review and merge. A failed
|
|
13
|
+
review or repairable merge result gives its full output and remaining work to
|
|
14
|
+
the next worker turn. Review, local-check, conflict and CI fixes share a limit
|
|
15
|
+
of three fix rounds. Pending CI and an unconfigured check stop the run.
|
|
16
|
+
|
|
17
|
+
`develop/pull.ts` keeps the first line of the ticket as the pull request title,
|
|
18
|
+
removes leading `#` characters and limits it to 200 characters. For a task with
|
|
19
|
+
a GitHub issue, the pull request body links that issue and names its number:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
Refs cloving-ai/cloving-ai#375
|
|
23
|
+
|
|
24
|
+
Cloving made this change for the ticket 375.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
A task without a GitHub issue uses only `Cloving made this change for this task.`
|
|
28
|
+
|
|
29
|
+
`develop.test.ts` and `develop/flow-tests.ts` test the default composition through the public fake
|
|
30
|
+
step bridge. The alternative configurations use `develop/option-tests.ts`, with the selected
|
|
31
|
+
point IDs in `develop/scenarios.ts`. For an edited copy, replace the default
|
|
32
|
+
`flowTests` and `refusalTests` imports in `develop.test.ts` with
|
|
33
|
+
`optionTests as flowTests`, then run every `flowTests` scenario. Keep the shared
|
|
34
|
+
turn and partial-helper tests. Package tests apply each source edit, validate
|
|
35
|
+
its requirements, and test seven complete configurations through the folder
|
|
36
|
+
loader and the installed package, covering every option.
|
|
37
|
+
|
|
38
|
+
`develop/turn.ts` implements the development turn for either a resolved
|
|
39
|
+
`ticket` or a task `prompt`. It calls the public protected effect helper and
|
|
40
|
+
returns the broker result unchanged. Its `feedback` takes the previous
|
|
41
|
+
result's `reason`, full `output`, and `remaining` items. Rounds 1 through 4
|
|
42
|
+
allow the initial turn and three fix turns; the workflow must stop after that.
|
|
43
|
+
`develop.test.ts` exercises this helper with `cloving/workflows/testing`.
|
|
44
|
+
The package tests also load small compositions of this helper through folder
|
|
45
|
+
admission for both input forms and test both forms in complete workflows.
|
|
46
|
+
|
|
47
|
+
`develop/partial.ts` implements the person's partial-work question.
|
|
48
|
+
`develop/partial-choice.ts` connects its answer to a development report and the
|
|
49
|
+
next round, or returns a blocked outcome without opening a review or merging. `reviewPartial`
|
|
50
|
+
opens a question with an identity scoped to the run and round. It returns
|
|
51
|
+
nonempty feedback from an explicit answer, or stops. It opens no question
|
|
52
|
+
after the initial turn and three fix turns. The separate `develop/queue-partial.ts`
|
|
53
|
+
helper, `queuePartial`, forwards the issue,
|
|
54
|
+
merged pull request and remaining items to the protected `partial-issue`
|
|
55
|
+
operation, preserving its result. The GitHub worker owns partial-run history
|
|
56
|
+
and requeues the first two runs, then blocks the ticket from the third.
|
|
57
|
+
Folder-admission tests cover both helpers in the checkout and packed install.
|
|
58
|
+
The default workflow calls `queuePartial` after merging partial work, closes
|
|
59
|
+
complete issues, and reports a failed issue update in its outcome.
|
|
60
|
+
The person-only composition needs no GitHub capability. `develop/local.ts`
|
|
61
|
+
implements its round: develop, ask about partial work, review the immutable
|
|
62
|
+
commit, and leave the branch for the person to merge. It refuses missing or
|
|
63
|
+
malformed commit IDs and reports of uncommitted work. `develop/accept.ts`
|
|
64
|
+
contains the editable pull-request acceptance call. `promptInput` in
|
|
65
|
+
`develop/report.ts` adapts task text without looking up a ticket.
|
|
66
|
+
Only resolved ticket input supplies an issue identity for lifecycle updates.
|
|
67
|
+
Task text keeps its full contents, including any issue-looking lines, without
|
|
68
|
+
selecting an issue to label, close or return to the queue.
|
|
69
|
+
|
|
70
|
+
The first option of each point is the default: ticket input, queue selection,
|
|
71
|
+
Greptile at 5/5, merge after checks, and return partial work to the queue.
|
|
72
|
+
Selecting `person` at selection, acceptance and partial work, with `local` at
|
|
73
|
+
merge, describes the existing reviewed local-branch process.
|
|
74
|
+
|
|
75
|
+
Each option has an `id`, `label`, `summary`, `change`, `requires` and `needs`.
|
|
76
|
+
`change` describes the step call or declaration edit for the setup agent.
|
|
77
|
+
It is guidance for editing source, rather than an executable patch.
|
|
78
|
+
|
|
79
|
+
`requires` maps another point ID to its allowed option IDs. All named points
|
|
80
|
+
must satisfy their requirement; any listed option for one point satisfies that
|
|
81
|
+
point. For example, `"merge": ["person", "green"]` requires either pull-request
|
|
82
|
+
merge option. An empty object imposes no additional requirement. Select exactly
|
|
83
|
+
one known option at each point and validate the complete selection after edits.
|
|
84
|
+
|
|
85
|
+
`needs` lists `cloving doctor` codes required by that option. The configured
|
|
86
|
+
workflow also needs the common runtime and harness checks reported by doctor.
|
|
87
|
+
|
|
88
|
+
Changing metadata does not change runtime behavior. The setup agent must apply
|
|
89
|
+
the source and declaration edits, run the workflow's scenario tests, and load
|
|
90
|
+
the edited configuration through folder admission before using it.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReviewSubject, ReviewResult } from "cloving/workflows";
|
|
2
|
+
import { reviewByAgent } from "cloving/workflows/steps/review-by-agent";
|
|
3
|
+
|
|
4
|
+
export async function acceptWork(
|
|
5
|
+
subject: ReviewSubject,
|
|
6
|
+
): Promise<ReviewResult> {
|
|
7
|
+
return await reviewByAgent({
|
|
8
|
+
subject: subject,
|
|
9
|
+
reviewer: { kind: "greptile" },
|
|
10
|
+
});
|
|
11
|
+
}
|