cloving 0.3.20 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE.md → LICENSE} +1 -1
- package/README.md +606 -182
- package/dist/src/authority/budgets.d.ts +12 -0
- package/dist/src/authority/budgets.js +42 -0
- package/dist/src/authority/commands.d.ts +7 -0
- package/dist/src/authority/commands.js +271 -0
- package/dist/src/authority/details.d.ts +28 -0
- package/dist/src/authority/details.js +33 -0
- package/dist/src/authority/dispatch-decision.d.ts +40 -0
- package/dist/src/authority/dispatch-decision.js +47 -0
- package/dist/src/authority/effect-requests.d.ts +2 -0
- package/dist/src/authority/effect-requests.js +139 -0
- package/dist/src/authority/effect-results.d.ts +4 -0
- package/dist/src/authority/effect-results.js +236 -0
- package/dist/src/authority/events.d.ts +2 -0
- package/dist/src/authority/events.js +45 -0
- package/dist/src/authority/gate-reduction.d.ts +8 -0
- package/dist/src/authority/gate-reduction.js +109 -0
- package/dist/src/authority/gates.d.ts +48 -0
- package/dist/src/authority/gates.js +77 -0
- package/dist/src/authority/history-state.d.ts +15 -0
- package/dist/src/authority/history-state.js +61 -0
- package/dist/src/authority/history.d.ts +13 -0
- package/dist/src/authority/history.js +37 -0
- package/dist/src/authority/instants.d.ts +3 -0
- package/dist/src/authority/instants.js +38 -0
- package/dist/src/authority/leases.d.ts +15 -0
- package/dist/src/authority/leases.js +113 -0
- package/dist/src/authority/operations.d.ts +101 -0
- package/dist/src/authority/operations.js +75 -0
- package/dist/src/authority/reconciliation.d.ts +29 -0
- package/dist/src/authority/reconciliation.js +156 -0
- package/dist/src/authority/reducer.d.ts +41 -0
- package/dist/src/authority/reducer.js +139 -0
- package/dist/src/authority/reduction-state.d.ts +36 -0
- package/dist/src/authority/reduction-state.js +68 -0
- package/dist/src/authority/reduction.d.ts +6 -0
- package/dist/src/authority/reduction.js +160 -0
- package/dist/src/authority/status-closure.d.ts +4 -0
- package/dist/src/authority/status-closure.js +57 -0
- package/dist/src/authority/status-effects.d.ts +17 -0
- package/dist/src/authority/status-effects.js +43 -0
- package/dist/src/authority/status-input.d.ts +45 -0
- package/dist/src/authority/status-input.js +9 -0
- package/dist/src/authority/status.d.ts +32 -0
- package/dist/src/authority/status.js +256 -0
- package/dist/src/authority/stop-sequence.d.ts +37 -0
- package/dist/src/authority/stop-sequence.js +91 -0
- package/dist/src/authority/transitions.d.ts +63 -0
- package/dist/src/authority/transitions.js +124 -0
- package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
- package/dist/src/broker/actor/adapter-calls.js +34 -0
- package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
- package/dist/src/broker/actor/adapter-outcomes.js +80 -0
- package/dist/src/broker/actor/authority-actor.d.ts +25 -0
- package/dist/src/broker/actor/authority-actor.js +169 -0
- package/dist/src/broker/actor/authority-changes.d.ts +31 -0
- package/dist/src/broker/actor/authority-changes.js +46 -0
- package/dist/src/broker/actor/authority-connection.d.ts +15 -0
- package/dist/src/broker/actor/authority-connection.js +44 -0
- package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
- package/dist/src/broker/actor/authority-conversion.js +72 -0
- package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
- package/dist/src/broker/actor/authority-delivery.js +162 -0
- package/dist/src/broker/actor/authority-logger.d.ts +2 -0
- package/dist/src/broker/actor/authority-logger.js +19 -0
- package/dist/src/broker/actor/authority-policy.d.ts +9 -0
- package/dist/src/broker/actor/authority-policy.js +11 -0
- package/dist/src/broker/actor/authority-queries.d.ts +45 -0
- package/dist/src/broker/actor/authority-queries.js +85 -0
- package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
- package/dist/src/broker/actor/authority-receipts.js +84 -0
- package/dist/src/broker/actor/authority-release.d.ts +13 -0
- package/dist/src/broker/actor/authority-release.js +69 -0
- package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
- package/dist/src/broker/actor/authority-runtime.js +204 -0
- package/dist/src/broker/actor/authority-session.d.ts +67 -0
- package/dist/src/broker/actor/authority-session.js +251 -0
- package/dist/src/broker/actor/authority-settings.d.ts +33 -0
- package/dist/src/broker/actor/authority-settings.js +63 -0
- package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
- package/dist/src/broker/actor/authority-upgrades.js +12 -0
- package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
- package/dist/src/broker/actor/authority-watchdog.js +41 -0
- package/dist/src/broker/actor/authority.d.ts +14 -0
- package/dist/src/broker/actor/authority.js +115 -0
- package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
- package/dist/src/broker/actor/delivery-intents.js +77 -0
- package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
- package/dist/src/broker/actor/delivery-plan.js +109 -0
- package/dist/src/broker/actor/delivery-results.d.ts +11 -0
- package/dist/src/broker/actor/delivery-results.js +63 -0
- package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
- package/dist/src/broker/actor/effect-delivery.js +118 -0
- package/dist/src/broker/actor/effect-plan.d.ts +41 -0
- package/dist/src/broker/actor/effect-plan.js +173 -0
- package/dist/src/broker/actor/effect-queries.d.ts +27 -0
- package/dist/src/broker/actor/effect-queries.js +80 -0
- package/dist/src/broker/actor/effect-turn.d.ts +25 -0
- package/dist/src/broker/actor/effect-turn.js +84 -0
- package/dist/src/broker/actor/pin-check.d.ts +6 -0
- package/dist/src/broker/actor/pin-check.js +12 -0
- package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
- package/dist/src/broker/actor/runtime-parts.js +34 -0
- package/dist/src/broker/actor/stop-plan.d.ts +20 -0
- package/dist/src/broker/actor/stop-plan.js +46 -0
- package/dist/src/broker/actor/stop-turn.d.ts +17 -0
- package/dist/src/broker/actor/stop-turn.js +42 -0
- package/dist/src/broker/actor/turn-draft.d.ts +31 -0
- package/dist/src/broker/actor/turn-draft.js +138 -0
- package/dist/src/broker/actor/turn-plan.d.ts +17 -0
- package/dist/src/broker/actor/turn-plan.js +136 -0
- package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
- package/dist/src/broker/actor/turn-refusals.js +35 -0
- package/dist/src/broker/actor/turn-staging.d.ts +78 -0
- package/dist/src/broker/actor/turn-staging.js +34 -0
- package/dist/src/broker/actor/turn-state.d.ts +34 -0
- package/dist/src/broker/actor/turn-state.js +208 -0
- package/dist/src/broker/authority-admission.d.ts +21 -0
- package/dist/src/broker/authority-admission.js +70 -0
- package/dist/src/broker/authority-restore.d.ts +30 -0
- package/dist/src/broker/authority-restore.js +165 -0
- package/dist/src/broker/decision-restore.d.ts +16 -0
- package/dist/src/broker/decision-restore.js +158 -0
- package/dist/src/broker/decision-upgrade.d.ts +3 -0
- package/dist/src/broker/decision-upgrade.js +12 -0
- package/dist/src/broker/effect-restore.d.ts +20 -0
- package/dist/src/broker/effect-restore.js +111 -0
- package/dist/src/broker/effect-upgrade.d.ts +3 -0
- package/dist/src/broker/effect-upgrade.js +9 -0
- package/dist/src/broker/operation-digest.d.ts +1 -0
- package/dist/src/broker/operation-digest.js +4 -0
- package/dist/src/broker/socket-address.d.ts +9 -0
- package/dist/src/broker/socket-address.js +14 -0
- package/dist/src/broker/workflow-pin.d.ts +2 -0
- package/dist/src/broker/workflow-pin.js +5 -0
- package/dist/src/chats/analysis-batches.d.ts +24 -0
- package/dist/src/chats/analysis-batches.js +83 -0
- package/dist/src/chats/analysis-contract.d.ts +80 -0
- package/dist/src/chats/analysis-contract.js +16 -0
- package/dist/src/chats/analysis-data.d.ts +3 -0
- package/dist/src/chats/analysis-data.js +85 -0
- package/dist/src/chats/analysis-input.d.ts +12 -0
- package/dist/src/chats/analysis-input.js +83 -0
- package/dist/src/chats/analysis-links.d.ts +2 -0
- package/dist/src/chats/analysis-links.js +25 -0
- package/dist/src/chats/analysis-prompt.d.ts +10 -0
- package/dist/src/chats/analysis-prompt.js +16 -0
- package/dist/src/chats/analysis-proposal.d.ts +2 -0
- package/dist/src/chats/analysis-proposal.js +32 -0
- package/dist/src/chats/analysis-provenance.d.ts +4 -0
- package/dist/src/chats/analysis-provenance.js +99 -0
- package/dist/src/chats/analysis-shape.d.ts +3 -0
- package/dist/src/chats/analysis-shape.js +228 -0
- package/dist/src/chats/analysis.d.ts +3 -0
- package/dist/src/chats/analysis.js +42 -0
- package/dist/src/chats/corpus-input.d.ts +5 -0
- package/dist/src/chats/corpus-input.js +288 -0
- package/dist/src/chats/destination.d.ts +4 -0
- package/dist/src/chats/destination.js +96 -0
- package/dist/src/chats/import.d.ts +15 -0
- package/dist/src/chats/import.js +243 -0
- package/dist/src/chats/input-file.d.ts +3 -0
- package/dist/src/chats/input-file.js +32 -0
- package/dist/src/chats/normalize.d.ts +29 -0
- package/dist/src/chats/normalize.js +155 -0
- package/dist/src/chats/previous-import.d.ts +5 -0
- package/dist/src/chats/previous-import.js +34 -0
- package/dist/src/chats/reader.d.ts +21 -0
- package/dist/src/chats/reader.js +118 -0
- package/dist/src/chats/redact-import.d.ts +14 -0
- package/dist/src/chats/redact-import.js +141 -0
- package/dist/src/chats/redaction.d.ts +41 -0
- package/dist/src/chats/redaction.js +161 -0
- package/dist/src/chats/revision-input.d.ts +3 -0
- package/dist/src/chats/revision-input.js +180 -0
- package/dist/src/chats/revision.d.ts +48 -0
- package/dist/src/chats/revision.js +94 -0
- package/dist/src/chats/selection.d.ts +25 -0
- package/dist/src/chats/selection.js +109 -0
- package/dist/src/chats/source.d.ts +23 -0
- package/dist/src/chats/source.js +135 -0
- package/dist/src/chats/structure.d.ts +57 -0
- package/dist/src/chats/structure.js +216 -0
- package/dist/src/cli/arguments.d.ts +31 -0
- package/dist/src/cli/arguments.js +235 -0
- package/dist/src/cli/client.d.ts +16 -0
- package/dist/src/cli/client.js +159 -0
- package/dist/src/cli/commands.d.ts +17 -0
- package/dist/src/cli/commands.js +271 -0
- package/dist/src/cli/main.d.ts +2 -0
- package/dist/src/cli/main.js +127 -0
- package/dist/src/cli/render.d.ts +10 -0
- package/dist/src/cli/render.js +254 -0
- package/dist/src/cli/runtime-arguments.d.ts +73 -0
- package/dist/src/cli/runtime-arguments.js +248 -0
- package/dist/src/cli/runtime-directory.d.ts +4 -0
- package/dist/src/cli/runtime-directory.js +25 -0
- package/dist/src/cli/toolchain.d.ts +3 -0
- package/dist/src/cli/toolchain.js +74 -0
- package/dist/src/cli/usage-render.d.ts +3 -0
- package/dist/src/cli/usage-render.js +28 -0
- package/dist/src/cli/usage.d.ts +5 -0
- package/dist/src/cli/usage.js +156 -0
- package/dist/src/cli/validate.d.ts +38 -0
- package/dist/src/cli/validate.js +116 -0
- package/dist/src/cli/watch-actions.d.ts +10 -0
- package/dist/src/cli/watch-actions.js +58 -0
- package/dist/src/cli/watch-board-view.d.ts +54 -0
- package/dist/src/cli/watch-board-view.js +201 -0
- package/dist/src/cli/watch-board.d.ts +15 -0
- package/dist/src/cli/watch-board.js +179 -0
- package/dist/src/cli/watch-card-client.d.ts +1 -0
- package/dist/src/cli/watch-card-client.js +44 -0
- package/dist/src/cli/watch-card-forms.d.ts +2 -0
- package/dist/src/cli/watch-card-forms.js +33 -0
- package/dist/src/cli/watch-card-reply.d.ts +5 -0
- package/dist/src/cli/watch-card-reply.js +34 -0
- package/dist/src/cli/watch-card-view.d.ts +40 -0
- package/dist/src/cli/watch-card-view.js +86 -0
- package/dist/src/cli/watch-client.d.ts +1 -0
- package/dist/src/cli/watch-client.js +118 -0
- package/dist/src/cli/watch-element.d.ts +11 -0
- package/dist/src/cli/watch-element.js +6 -0
- package/dist/src/cli/watch-model.d.ts +29 -0
- package/dist/src/cli/watch-model.js +278 -0
- package/dist/src/cli/watch-navigation.d.ts +9 -0
- package/dist/src/cli/watch-navigation.js +40 -0
- package/dist/src/cli/watch-page.d.ts +1 -0
- package/dist/src/cli/watch-page.js +258 -0
- package/dist/src/cli/watch-paths.d.ts +2 -0
- package/dist/src/cli/watch-paths.js +52 -0
- package/dist/src/cli/watch-phases.d.ts +7 -0
- package/dist/src/cli/watch-phases.js +148 -0
- package/dist/src/cli/watch-pr-board.d.ts +3 -0
- package/dist/src/cli/watch-pr-board.js +26 -0
- package/dist/src/cli/watch-pr-command.d.ts +15 -0
- package/dist/src/cli/watch-pr-command.js +37 -0
- package/dist/src/cli/watch-pr-identity.d.ts +20 -0
- package/dist/src/cli/watch-pr-identity.js +62 -0
- package/dist/src/cli/watch-pr-observer.d.ts +19 -0
- package/dist/src/cli/watch-pr-observer.js +108 -0
- package/dist/src/cli/watch-pr-settings.d.ts +8 -0
- package/dist/src/cli/watch-pr-settings.js +47 -0
- package/dist/src/cli/watch-reads.d.ts +28 -0
- package/dist/src/cli/watch-reads.js +248 -0
- package/dist/src/cli/watch-render.d.ts +153 -0
- package/dist/src/cli/watch-render.js +102 -0
- package/dist/src/cli/watch-run-input.d.ts +14 -0
- package/dist/src/cli/watch-run-input.js +49 -0
- package/dist/src/cli/watch-server.d.ts +13 -0
- package/dist/src/cli/watch-server.js +214 -0
- package/dist/src/cli/watch-start-view.d.ts +18 -0
- package/dist/src/cli/watch-start-view.js +77 -0
- package/dist/src/cli/watch-stream.d.ts +11 -0
- package/dist/src/cli/watch-stream.js +128 -0
- package/dist/src/cli/watch-turn.d.ts +30 -0
- package/dist/src/cli/watch-turn.js +135 -0
- package/dist/src/cli/watch-usage.d.ts +6 -0
- package/dist/src/cli/watch-usage.js +65 -0
- package/dist/src/cli/watch-view.d.ts +54 -0
- package/dist/src/cli/watch-view.js +267 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +104 -0
- package/dist/src/daemon/analysis-launch.d.ts +5 -0
- package/dist/src/daemon/analysis-launch.js +81 -0
- package/dist/src/daemon/analysis-token.d.ts +6 -0
- package/dist/src/daemon/analysis-token.js +88 -0
- package/dist/src/daemon/analysis-worker.d.ts +22 -0
- package/dist/src/daemon/analysis-worker.js +219 -0
- package/dist/src/daemon/chats-files.d.ts +15 -0
- package/dist/src/daemon/chats-files.js +113 -0
- package/dist/src/daemon/chats-worker.d.ts +12 -0
- package/dist/src/daemon/chats-worker.js +200 -0
- package/dist/src/daemon/claude-turn.d.ts +38 -0
- package/dist/src/daemon/claude-turn.js +216 -0
- package/dist/src/daemon/claude-worker.d.ts +29 -0
- package/dist/src/daemon/claude-worker.js +276 -0
- package/dist/src/daemon/codex-stream.d.ts +4 -0
- package/dist/src/daemon/codex-stream.js +129 -0
- package/dist/src/daemon/daemon.d.ts +49 -0
- package/dist/src/daemon/daemon.js +195 -0
- package/dist/src/daemon/delivery-router.d.ts +10 -0
- package/dist/src/daemon/delivery-router.js +34 -0
- package/dist/src/daemon/github-calls.d.ts +29 -0
- package/dist/src/daemon/github-calls.js +127 -0
- package/dist/src/daemon/github-issue-methods.d.ts +3 -0
- package/dist/src/daemon/github-issue-methods.js +99 -0
- package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
- package/dist/src/daemon/github-issue-privacy.js +131 -0
- package/dist/src/daemon/github-merge.d.ts +18 -0
- package/dist/src/daemon/github-merge.js +259 -0
- package/dist/src/daemon/github-methods.d.ts +5 -0
- package/dist/src/daemon/github-methods.js +202 -0
- package/dist/src/daemon/github-operation.d.ts +38 -0
- package/dist/src/daemon/github-operation.js +57 -0
- package/dist/src/daemon/github-ticket-status.d.ts +3 -0
- package/dist/src/daemon/github-ticket-status.js +268 -0
- package/dist/src/daemon/github-worker.d.ts +17 -0
- package/dist/src/daemon/github-worker.js +281 -0
- package/dist/src/daemon/host-environment.d.ts +8 -0
- package/dist/src/daemon/host-environment.js +14 -0
- package/dist/src/daemon/issue-queue.d.ts +10 -0
- package/dist/src/daemon/issue-queue.js +254 -0
- package/dist/src/daemon/notify-message.d.ts +14 -0
- package/dist/src/daemon/notify-message.js +48 -0
- package/dist/src/daemon/notify.d.ts +12 -0
- package/dist/src/daemon/notify.js +161 -0
- package/dist/src/daemon/operation-journal.d.ts +43 -0
- package/dist/src/daemon/operation-journal.js +55 -0
- package/dist/src/daemon/retrying-turn.d.ts +9 -0
- package/dist/src/daemon/retrying-turn.js +185 -0
- package/dist/src/daemon/ticket-registration.d.ts +33 -0
- package/dist/src/daemon/ticket-registration.js +177 -0
- package/dist/src/daemon/ticket-source.d.ts +17 -0
- package/dist/src/daemon/ticket-source.js +36 -0
- package/dist/src/daemon/work-tree.d.ts +26 -0
- package/dist/src/daemon/work-tree.js +206 -0
- package/dist/src/effect-authorization.d.ts +21 -0
- package/dist/src/effect-authorization.js +14 -0
- package/dist/src/execution-pin.d.ts +4 -0
- package/dist/src/execution-pin.js +68 -0
- package/dist/src/host/start-delivery.d.ts +41 -0
- package/dist/src/host/start-delivery.js +68 -0
- package/dist/src/host/step-bridge-host.d.ts +79 -0
- package/dist/src/host/step-bridge-host.js +205 -0
- package/dist/src/host/step-claims.d.ts +31 -0
- package/dist/src/host/step-claims.js +85 -0
- package/dist/src/host/world-host.d.ts +21 -0
- package/dist/src/host/world-host.js +51 -0
- package/dist/src/host/world-reconciliation.d.ts +39 -0
- package/dist/src/host/world-reconciliation.js +81 -0
- package/dist/src/host/world-runs.d.ts +14 -0
- package/dist/src/host/world-runs.js +69 -0
- package/dist/src/operation-identity.d.ts +7 -0
- package/dist/src/operation-identity.js +59 -0
- package/dist/src/protocol.d.ts +35 -0
- package/dist/src/protocol.js +64 -0
- package/dist/src/resource-files.d.ts +1 -0
- package/dist/src/resource-files.js +29 -0
- package/dist/src/service/changes.d.ts +11 -0
- package/dist/src/service/changes.js +32 -0
- package/dist/src/service/decision-handler.d.ts +9 -0
- package/dist/src/service/decision-handler.js +233 -0
- package/dist/src/service/event-handler.d.ts +10 -0
- package/dist/src/service/event-handler.js +70 -0
- package/dist/src/service/expiry.d.ts +13 -0
- package/dist/src/service/expiry.js +53 -0
- package/dist/src/service/gateway.d.ts +21 -0
- package/dist/src/service/gateway.js +120 -0
- package/dist/src/service/registry.d.ts +40 -0
- package/dist/src/service/registry.js +13 -0
- package/dist/src/service/replies.d.ts +26 -0
- package/dist/src/service/replies.js +56 -0
- package/dist/src/service/run-handlers.d.ts +4 -0
- package/dist/src/service/run-handlers.js +263 -0
- package/dist/src/service/service.d.ts +58 -0
- package/dist/src/service/service.js +212 -0
- package/dist/src/service/submission-handler.d.ts +4 -0
- package/dist/src/service/submission-handler.js +206 -0
- package/dist/src/service/transport.d.ts +16 -0
- package/dist/src/service/transport.js +141 -0
- package/dist/src/service/worker-port.d.ts +85 -0
- package/dist/src/service/worker-port.js +126 -0
- package/dist/src/service/worker-totals.d.ts +3 -0
- package/dist/src/service/worker-totals.js +28 -0
- package/dist/src/step-bridge.d.ts +57 -0
- package/dist/src/step-bridge.js +4 -0
- package/dist/src/steps/decision-gate.d.ts +2 -0
- package/dist/src/steps/decision-gate.js +8 -0
- package/dist/src/steps/load-cycle.d.ts +10 -0
- package/dist/src/steps/load-cycle.js +11 -0
- package/dist/src/steps/protected-effect.d.ts +2 -0
- package/dist/src/steps/protected-effect.js +8 -0
- package/dist/src/storage/decision-rows.d.ts +54 -0
- package/dist/src/storage/decision-rows.js +72 -0
- package/dist/src/storage/decision-snapshots.d.ts +17 -0
- package/dist/src/storage/decision-snapshots.js +25 -0
- package/dist/src/storage/domain-changes.d.ts +48 -0
- package/dist/src/storage/domain-changes.js +213 -0
- package/dist/src/storage/domain-rows.d.ts +85 -0
- package/dist/src/storage/domain-rows.js +129 -0
- package/dist/src/storage/domain-schema.d.ts +32 -0
- package/dist/src/storage/domain-schema.js +193 -0
- package/dist/src/storage/effect-changes.d.ts +5 -0
- package/dist/src/storage/effect-changes.js +105 -0
- package/dist/src/storage/effect-rows.d.ts +67 -0
- package/dist/src/storage/effect-rows.js +74 -0
- package/dist/src/storage/effect-schema.d.ts +1 -0
- package/dist/src/storage/effect-schema.js +59 -0
- package/dist/src/storage/statements.d.ts +9 -0
- package/dist/src/storage/statements.js +8 -0
- package/dist/src/submission.d.ts +42 -0
- package/dist/src/submission.js +71 -0
- package/dist/src/ticket-status.d.ts +8 -0
- package/dist/src/ticket-status.js +45 -0
- package/dist/src/token-prices.d.ts +19 -0
- package/dist/src/token-prices.js +76 -0
- package/dist/src/turn-profile.d.ts +13 -0
- package/dist/src/turn-profile.js +100 -0
- package/dist/src/worker-usage.d.ts +22 -0
- package/dist/src/worker-usage.js +44 -0
- package/dist/src/workflow-admission.d.ts +45 -0
- package/dist/src/workflow-admission.js +151 -0
- package/dist/src/workflow-candidate.d.ts +29 -0
- package/dist/src/workflow-candidate.js +59 -0
- package/dist/src/workflow-contracts.d.ts +29 -0
- package/dist/src/workflow-contracts.js +110 -0
- package/dist/src/workflow-declaration.d.ts +11 -0
- package/dist/src/workflow-declaration.js +59 -0
- package/dist/src/workflow-resources.d.ts +8 -0
- package/dist/src/workflow-resources.js +14 -0
- package/dist/src/workflows.d.ts +6 -0
- package/dist/src/workflows.js +4 -0
- package/dist/tools/compile-workflows.d.ts +1 -0
- package/dist/tools/compile-workflows.js +33 -0
- package/dist/tools/self-host-processes.d.ts +10 -0
- package/dist/tools/self-host-processes.js +156 -0
- package/dist/tools/self-host-workflows.d.ts +15 -0
- package/dist/tools/self-host-workflows.js +78 -0
- package/dist/tools/self-host.d.ts +1 -0
- package/dist/tools/self-host.js +261 -0
- package/dist/tools/self-update-host.d.ts +13 -0
- package/dist/tools/self-update-host.js +88 -0
- package/dist/tools/self-update.d.ts +11 -0
- package/dist/tools/self-update.js +177 -0
- package/dist/tools/workflow-manifest.d.ts +3 -0
- package/dist/tools/workflow-manifest.js +34 -0
- package/dist/workflows/analyze-chats.d.ts +10 -0
- package/dist/workflows/analyze-chats.declaration.json +9 -0
- package/dist/workflows/analyze-chats.js +73 -0
- package/dist/workflows/develop-prd.d.ts +7 -0
- package/dist/workflows/develop-prd.js +97 -0
- package/dist/workflows/develop-ticket.d.ts +9 -0
- package/dist/workflows/develop-ticket.js +202 -0
- package/dist/workflows/issue-labels.d.ts +16 -0
- package/dist/workflows/issue-labels.js +70 -0
- package/dist/workflows/ticket-prompts.d.ts +35 -0
- package/dist/workflows/ticket-prompts.js +133 -0
- package/package.json +84 -75
- package/dist/abstract_gpt/index.js +0 -55
- package/dist/cloving_gpt/adapters/Adapter.js +0 -2
- package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
- package/dist/cloving_gpt/adapters/claude.js +0 -128
- package/dist/cloving_gpt/adapters/gemini.js +0 -135
- package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
- package/dist/cloving_gpt/adapters/index.js +0 -2
- package/dist/cloving_gpt/adapters/mistral.js +0 -128
- package/dist/cloving_gpt/adapters/ollama.js +0 -128
- package/dist/cloving_gpt/adapters/openai.js +0 -100
- package/dist/cloving_gpt/index.js +0 -192
- package/dist/commands/analyze.js +0 -47
- package/dist/commands/chat.js +0 -14
- package/dist/commands/check.js +0 -7
- package/dist/commands/commit.js +0 -44
- package/dist/commands/config.js +0 -167
- package/dist/commands/describe.js +0 -235
- package/dist/commands/generate/code.js +0 -21
- package/dist/commands/generate/commit.js +0 -11
- package/dist/commands/generate/context.js +0 -82
- package/dist/commands/generate/docs.js +0 -11
- package/dist/commands/generate/documentation.js +0 -11
- package/dist/commands/generate/fizzbuzz.js +0 -35
- package/dist/commands/generate/init.js +0 -15
- package/dist/commands/generate/review.js +0 -11
- package/dist/commands/generate/sh.js +0 -95
- package/dist/commands/generate/shell.js +0 -11
- package/dist/commands/generate/unit_tests.js +0 -11
- package/dist/commands/init.js +0 -13
- package/dist/commands/models.js +0 -22
- package/dist/commands/project/build.js +0 -88
- package/dist/commands/project/complete.js +0 -12
- package/dist/commands/project/init.js +0 -82
- package/dist/commands/project/plan.js +0 -108
- package/dist/commands/proxy.js +0 -11
- package/dist/commands/review.js +0 -50
- package/dist/commands/tokens.js +0 -75
- package/dist/commands/unit_tests.js +0 -150
- package/dist/commands/update.js +0 -7
- package/dist/file2.js +0 -4
- package/dist/index.js +0 -136
- package/dist/managers/BlockManager.js +0 -120
- package/dist/managers/ChatManager.js +0 -653
- package/dist/managers/ChunkManager.js +0 -32
- package/dist/managers/CodeManager.js +0 -185
- package/dist/managers/CommitManager.js +0 -78
- package/dist/managers/DocsManager.js +0 -88
- package/dist/managers/DocumentationManager.js +0 -114
- package/dist/managers/InitManager.js +0 -230
- package/dist/managers/ProxyManager.js +0 -210
- package/dist/managers/ReviewManager.js +0 -131
- package/dist/managers/ShellManager.js +0 -163
- package/dist/managers/StreamManager.js +0 -308
- package/dist/managers/UnitTestManager.js +0 -243
- package/dist/managers/src/managers/ProxyManager.js +0 -1
- package/dist/newfile.js +0 -2
- package/dist/package.json +0 -86
- package/dist/utils/command_utils.js +0 -384
- package/dist/utils/config_utils.js +0 -249
- package/dist/utils/gitUtils.js +0 -42
- package/dist/utils/git_utils.js +0 -217
- package/dist/utils/modelUtils.js +0 -7
- package/dist/utils/model_utils.js +0 -7
- package/dist/utils/prompt_utils.js +0 -333
- package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
- package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
- package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
- package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
- package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
- package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
- package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
- package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
- package/dist/utils/prompts/index.js +0 -27
- package/dist/utils/string_utils.js +0 -505
- package/dist/utils/types.js +0 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ServiceRequest } from "../protocol.ts";
|
|
2
|
+
export interface CardField {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly multiline: boolean;
|
|
6
|
+
readonly optional: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface CardForm {
|
|
9
|
+
readonly workflowId: string;
|
|
10
|
+
readonly source: "ticket" | "prompt" | "input";
|
|
11
|
+
readonly fields: readonly CardField[];
|
|
12
|
+
}
|
|
13
|
+
export declare function builtinCardForms(): readonly CardForm[];
|
|
14
|
+
export declare function cardRunRequest(forms: readonly CardForm[], value: unknown): ServiceRequest | null;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { record } from "../protocol.js";
|
|
2
|
+
export function builtinCardForms() {
|
|
3
|
+
const entries = [
|
|
4
|
+
["develop-issue", "ticket", "Issue number"],
|
|
5
|
+
["develop-ticket", "ticket", "Ticket ID"],
|
|
6
|
+
["develop-prd", "prompt", "Idea"],
|
|
7
|
+
["develop-prompt", "prompt", "Task"],
|
|
8
|
+
];
|
|
9
|
+
return entries.map(([workflowId, name, label]) => ({
|
|
10
|
+
workflowId,
|
|
11
|
+
source: name === "ticket" ? "ticket" : "prompt",
|
|
12
|
+
fields: [{ name, label, multiline: name === "prompt", optional: false }],
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
function validFields(form, fields) {
|
|
16
|
+
if (Object.keys(fields).some((name) => !form.fields.some((field) => field.name === name)))
|
|
17
|
+
return false;
|
|
18
|
+
return form.fields.every((field) => {
|
|
19
|
+
if (field.optional && !Object.hasOwn(fields, field.name))
|
|
20
|
+
return true;
|
|
21
|
+
const text = fields[field.name];
|
|
22
|
+
return typeof text === "string" && text.trim() !== "";
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export function cardRunRequest(forms, value) {
|
|
26
|
+
const body = record(value);
|
|
27
|
+
if (body === undefined ||
|
|
28
|
+
Object.keys(body).some((key) => !["workflowId", "fields", "commandId"].includes(key)))
|
|
29
|
+
return null;
|
|
30
|
+
const { workflowId, commandId } = body;
|
|
31
|
+
const form = forms.find((item) => item.workflowId === workflowId);
|
|
32
|
+
const fields = record(body["fields"]);
|
|
33
|
+
if (form === undefined ||
|
|
34
|
+
fields === undefined ||
|
|
35
|
+
typeof commandId !== "string" ||
|
|
36
|
+
!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$/.test(commandId))
|
|
37
|
+
return null;
|
|
38
|
+
if (!validFields(form, fields))
|
|
39
|
+
return null;
|
|
40
|
+
return {
|
|
41
|
+
operation: "run",
|
|
42
|
+
parameters: {
|
|
43
|
+
workflowId,
|
|
44
|
+
source: form.source,
|
|
45
|
+
submission: fields,
|
|
46
|
+
commandId,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type WatchPrSettings } from "./watch-pr-settings.ts";
|
|
2
|
+
export declare const defaultWatchPort = 3663;
|
|
3
|
+
export interface WatchSettings {
|
|
4
|
+
readonly actions?: string;
|
|
5
|
+
readonly pullRequests?: WatchPrSettings;
|
|
6
|
+
readonly runtimeDirectory: string;
|
|
7
|
+
readonly port: number;
|
|
8
|
+
readonly client: string;
|
|
9
|
+
readonly announce: (text: string) => void;
|
|
10
|
+
readonly complain: (text: string) => void;
|
|
11
|
+
readonly stopped: Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare function watchServer(settings: WatchSettings): Promise<number>;
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { watchAction, watchActions, watchHost, } from "./watch-actions.js";
|
|
2
|
+
import { observedBoard } from "./watch-pr-board.js";
|
|
3
|
+
import { watchPrObserver } from "./watch-pr-settings.js";
|
|
4
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
5
|
+
import { createServer, } from "node:http";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
|
+
import { dirname, join } from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { watchReader } from "./watch-reads.js";
|
|
10
|
+
import { turnOf, watchModel } from "./watch-model.js";
|
|
11
|
+
import { pageDocument } from "./watch-page.js";
|
|
12
|
+
import { watchStream } from "./watch-stream.js";
|
|
13
|
+
export const defaultWatchPort = 3663;
|
|
14
|
+
const forbidden = { status: 403, type: "text/plain", body: "refused" };
|
|
15
|
+
const notFound = { status: 404, type: "text/plain", body: "not found" };
|
|
16
|
+
const libraryFile = fileURLToPath(import.meta.resolve("preact"));
|
|
17
|
+
function parsed(text) {
|
|
18
|
+
try {
|
|
19
|
+
const value = JSON.parse(text);
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const noStream = { size: 0, lines: [], activeAt: null };
|
|
27
|
+
async function streamed(watch, file) {
|
|
28
|
+
const found = await stat(file).catch(() => null);
|
|
29
|
+
if (found === null)
|
|
30
|
+
return noStream;
|
|
31
|
+
const known = watch.streams.get(file);
|
|
32
|
+
const activeAt = found.mtime.toISOString();
|
|
33
|
+
if (known?.size === found.size)
|
|
34
|
+
return { ...known, activeAt };
|
|
35
|
+
const lines = (await readFile(file, "utf8").catch(() => "")).split("\n");
|
|
36
|
+
watch.streams.set(file, { size: found.size, lines });
|
|
37
|
+
return { size: found.size, lines, activeAt };
|
|
38
|
+
}
|
|
39
|
+
async function stored(file) {
|
|
40
|
+
return parsed(await readFile(file, "utf8").catch(() => "null"));
|
|
41
|
+
}
|
|
42
|
+
async function turns(watch) {
|
|
43
|
+
const journal = join(dirname(watch.settings.runtimeDirectory), "journal");
|
|
44
|
+
const found = [];
|
|
45
|
+
for (const key of await readdir(journal).catch(() => [])) {
|
|
46
|
+
const started = await stored(join(journal, key, "started.json"));
|
|
47
|
+
if (started === null)
|
|
48
|
+
continue;
|
|
49
|
+
const stream = await streamed(watch, join(journal, key, "turn.jsonl"));
|
|
50
|
+
found.push(turnOf({
|
|
51
|
+
key,
|
|
52
|
+
started,
|
|
53
|
+
result: await stored(join(journal, key, "result.json")),
|
|
54
|
+
lines: stream.lines,
|
|
55
|
+
activeAt: stream.activeAt,
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
return found.toSorted((first, second) => first.startedAt < second.startedAt ? -1 : 1);
|
|
59
|
+
}
|
|
60
|
+
async function githubRecords(watch) {
|
|
61
|
+
const journal = join(dirname(watch.settings.runtimeDirectory), "github");
|
|
62
|
+
const keys = await readdir(journal).catch(() => []);
|
|
63
|
+
for (const key of keys) {
|
|
64
|
+
const known = watch.github.get(key);
|
|
65
|
+
if (known !== undefined && known.result !== null)
|
|
66
|
+
continue;
|
|
67
|
+
const started = known?.started ?? (await stored(join(journal, key, "started.json")));
|
|
68
|
+
if (started === null)
|
|
69
|
+
continue;
|
|
70
|
+
const result = await stored(join(journal, key, "result.json"));
|
|
71
|
+
watch.github.set(key, { started, result });
|
|
72
|
+
}
|
|
73
|
+
return keys.flatMap((key) => watch.github.get(key) ?? []);
|
|
74
|
+
}
|
|
75
|
+
async function snapshot(watch, runId) {
|
|
76
|
+
const updatedAt = new Date().toISOString();
|
|
77
|
+
const [read, journal, github] = await Promise.all([
|
|
78
|
+
runId === null ? watch.reader.read(updatedAt) : watch.reader.run(runId),
|
|
79
|
+
turns(watch),
|
|
80
|
+
githubRecords(watch),
|
|
81
|
+
]);
|
|
82
|
+
const model = watchModel({
|
|
83
|
+
...read,
|
|
84
|
+
home: homedir(),
|
|
85
|
+
client: watch.settings.client,
|
|
86
|
+
updatedAt,
|
|
87
|
+
turns: journal,
|
|
88
|
+
githubRecords: github,
|
|
89
|
+
});
|
|
90
|
+
const shown = runId === null ? observedBoard(model, watch.observer) : model;
|
|
91
|
+
return {
|
|
92
|
+
...shown,
|
|
93
|
+
cardForms: watch.actions?.forms.filter((form) => shown.workflows.some((workflow) => workflow.workflowId === form.workflowId)) ?? [],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async function answered(watch, request) {
|
|
97
|
+
if (!watchHost(request))
|
|
98
|
+
return forbidden;
|
|
99
|
+
const url = new URL(String(request.url), "http://localhost");
|
|
100
|
+
if (request.method === "GET")
|
|
101
|
+
return readReply(watch, url);
|
|
102
|
+
if (request.method !== "POST" ||
|
|
103
|
+
url.pathname !== "/actions/run" ||
|
|
104
|
+
watch.actions === null)
|
|
105
|
+
return notFound;
|
|
106
|
+
const body = await watchAction(watch.actions, request).catch(() => null);
|
|
107
|
+
return body === null
|
|
108
|
+
? forbidden
|
|
109
|
+
: { status: 200, type: "application/json", body };
|
|
110
|
+
}
|
|
111
|
+
async function readReply(watch, url) {
|
|
112
|
+
const path = url.pathname;
|
|
113
|
+
if (path === "/")
|
|
114
|
+
return {
|
|
115
|
+
status: 200,
|
|
116
|
+
type: "text/html; charset=utf-8",
|
|
117
|
+
body: pageDocument(watch.actions?.token ?? null),
|
|
118
|
+
};
|
|
119
|
+
if (path === "/preact.mjs")
|
|
120
|
+
return {
|
|
121
|
+
status: 200,
|
|
122
|
+
type: "text/javascript; charset=utf-8",
|
|
123
|
+
body: await readFile(libraryFile, "utf8"),
|
|
124
|
+
};
|
|
125
|
+
if (path !== "/data.json")
|
|
126
|
+
return notFound;
|
|
127
|
+
const runId = url.searchParams.get("runId");
|
|
128
|
+
const model = await snapshot(watch, runId);
|
|
129
|
+
if (runId !== null && model.runs.length === 0)
|
|
130
|
+
return notFound;
|
|
131
|
+
return {
|
|
132
|
+
status: 200,
|
|
133
|
+
type: "application/json",
|
|
134
|
+
body: JSON.stringify(runId === null ? model : { run: model.runs[0] }),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function replied(response, reply) {
|
|
138
|
+
response.writeHead(reply.status, {
|
|
139
|
+
"content-type": reply.type,
|
|
140
|
+
"cache-control": "no-store",
|
|
141
|
+
});
|
|
142
|
+
response.end(reply.body);
|
|
143
|
+
}
|
|
144
|
+
function subscribed(stream, exchange) {
|
|
145
|
+
const { request, response } = exchange;
|
|
146
|
+
const changed = () => {
|
|
147
|
+
response.write("data: change\n\n");
|
|
148
|
+
};
|
|
149
|
+
response.writeHead(200, {
|
|
150
|
+
"content-type": "text/event-stream",
|
|
151
|
+
"cache-control": "no-store",
|
|
152
|
+
});
|
|
153
|
+
changed();
|
|
154
|
+
request.once("close", stream.subscribe(changed));
|
|
155
|
+
}
|
|
156
|
+
export async function watchServer(settings) {
|
|
157
|
+
const observer = await observerFor(settings);
|
|
158
|
+
const watch = {
|
|
159
|
+
actions: settings.actions === "off"
|
|
160
|
+
? null
|
|
161
|
+
: await watchActions(settings.runtimeDirectory),
|
|
162
|
+
settings,
|
|
163
|
+
observer,
|
|
164
|
+
reader: watchReader(settings.runtimeDirectory),
|
|
165
|
+
streams: new Map(),
|
|
166
|
+
github: new Map(),
|
|
167
|
+
};
|
|
168
|
+
const stream = watchStream({
|
|
169
|
+
runtimeDirectory: settings.runtimeDirectory,
|
|
170
|
+
journal: join(dirname(settings.runtimeDirectory), "journal"),
|
|
171
|
+
retryMilliseconds: 1000,
|
|
172
|
+
});
|
|
173
|
+
const server = createServer((request, response) => {
|
|
174
|
+
if (watchHost(request) &&
|
|
175
|
+
request.method === "GET" &&
|
|
176
|
+
request.url === "/events") {
|
|
177
|
+
subscribed(stream, { request, response });
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
answered(watch, request).then((reply) => {
|
|
181
|
+
replied(response, reply);
|
|
182
|
+
}, () => {
|
|
183
|
+
replied(response, { ...notFound, status: 500, body: "failed" });
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
return new Promise((settle) => {
|
|
187
|
+
server.once("error", (error) => {
|
|
188
|
+
observer.close();
|
|
189
|
+
stream.close();
|
|
190
|
+
settings.complain(`watch-not-started: ${error.message}\n`);
|
|
191
|
+
settle(1);
|
|
192
|
+
});
|
|
193
|
+
server.listen(settings.port, "127.0.0.1", () => {
|
|
194
|
+
const bound = Reflect.get(Object(server.address()), "port");
|
|
195
|
+
settings.announce(`Watch page: http://127.0.0.1:${String(bound)}/\n`);
|
|
196
|
+
});
|
|
197
|
+
const closed = () => {
|
|
198
|
+
observer.close();
|
|
199
|
+
stream.close();
|
|
200
|
+
server.close();
|
|
201
|
+
server.closeAllConnections();
|
|
202
|
+
settle(0);
|
|
203
|
+
};
|
|
204
|
+
settings.stopped.then(closed, closed);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function observerFor(settings) {
|
|
208
|
+
if (settings.pullRequests !== undefined)
|
|
209
|
+
return watchPrObserver(settings.pullRequests);
|
|
210
|
+
return Promise.resolve({
|
|
211
|
+
observe: () => ({ status: "unavailable", failure: "configuration" }),
|
|
212
|
+
close: () => undefined,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type Shown } from "./watch-element.ts";
|
|
2
|
+
import type { Copying, WatchModel } from "./watch-render.ts";
|
|
3
|
+
interface StartPrompt {
|
|
4
|
+
readonly workflowId: string;
|
|
5
|
+
readonly sentence: string;
|
|
6
|
+
readonly prompt: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function startPrompts(): readonly StartPrompt[];
|
|
9
|
+
export declare function StartCard(props: {
|
|
10
|
+
readonly item: StartPrompt;
|
|
11
|
+
readonly copying: Copying;
|
|
12
|
+
}): Shown;
|
|
13
|
+
export declare function StartRun(props: {
|
|
14
|
+
readonly workflows: WatchModel["workflows"];
|
|
15
|
+
readonly copying: Copying;
|
|
16
|
+
readonly shown?: boolean;
|
|
17
|
+
}): Shown;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { component, element } from "./watch-element.js";
|
|
2
|
+
import { Command } from "./watch-turn.js";
|
|
3
|
+
export function startPrompts() {
|
|
4
|
+
return [
|
|
5
|
+
{
|
|
6
|
+
workflowId: "develop-issue",
|
|
7
|
+
sentence: "Work on a GitHub issue through a pull request.",
|
|
8
|
+
prompt: `Start a Cloving run for a GitHub issue in this repository.
|
|
9
|
+
Run: cloving run develop-issue --ticket ISSUE_NUMBER
|
|
10
|
+
Use the issue number that I give on the last line.
|
|
11
|
+
Report the run ID. Then run cloving status RUN_ID until the run completes or stops, and tell me the result and the pull request.
|
|
12
|
+
Do not push, merge or change labels yourself.
|
|
13
|
+
Issue number:`,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
workflowId: "develop-ticket",
|
|
17
|
+
sentence: "Work on a ticket with your review of the diff.",
|
|
18
|
+
prompt: `Start a Cloving run for a ticket in this repository.
|
|
19
|
+
Run: cloving run develop-ticket --ticket TICKET_ID
|
|
20
|
+
Use the ticket ID that I give on the last line.
|
|
21
|
+
When the run waits for a decision, run cloving questions, show me the diff and the decision, and give me the approve and deny commands.
|
|
22
|
+
Run only the command that I choose. Do not decide for me.
|
|
23
|
+
Ticket ID:`,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
workflowId: "develop-prd",
|
|
27
|
+
sentence: "Turn an idea into a GitHub issue.",
|
|
28
|
+
prompt: `Start a Cloving run that turns an idea into a GitHub issue.
|
|
29
|
+
Run: cloving run develop-prd --prompt "IDEA"
|
|
30
|
+
Use the idea that I give on the last line as IDEA.
|
|
31
|
+
When the run completes, show me the new issue.
|
|
32
|
+
Add the label cloving: ready only when I tell you to.
|
|
33
|
+
Idea:`,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
workflowId: "develop-prompt",
|
|
37
|
+
sentence: "Do a small task with your review of the diff.",
|
|
38
|
+
prompt: `Start a Cloving run for a small task in this repository.
|
|
39
|
+
Run: cloving run develop-prompt --prompt "TASK"
|
|
40
|
+
Use the task that I give on the last line as TASK.
|
|
41
|
+
When the run waits for a decision, run cloving questions, show me the diff, and give me the approve and deny commands.
|
|
42
|
+
Run only the command that I choose. Do not decide for me.
|
|
43
|
+
Task:`,
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
export function StartCard(props) {
|
|
48
|
+
const { item, copying } = props;
|
|
49
|
+
return element("article", {
|
|
50
|
+
class: "start-card",
|
|
51
|
+
children: [
|
|
52
|
+
element("h3", { children: item.workflowId }),
|
|
53
|
+
element("p", { children: item.sentence }),
|
|
54
|
+
component(Command, {
|
|
55
|
+
label: "Agent prompt",
|
|
56
|
+
command: item.prompt,
|
|
57
|
+
copyLabel: "Copy the prompt",
|
|
58
|
+
copying,
|
|
59
|
+
}),
|
|
60
|
+
],
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export function StartRun(props) {
|
|
64
|
+
const registered = startPrompts().filter((item) => props.workflows.some((workflow) => workflow.workflowId === item.workflowId));
|
|
65
|
+
const cards = registered.map((item) => component(StartCard, {
|
|
66
|
+
key: item.workflowId,
|
|
67
|
+
item,
|
|
68
|
+
copying: props.copying,
|
|
69
|
+
}));
|
|
70
|
+
return element("section", {
|
|
71
|
+
class: "start-run",
|
|
72
|
+
id: "start-run",
|
|
73
|
+
"aria-label": "Start a run",
|
|
74
|
+
hidden: props.shown !== true,
|
|
75
|
+
children: element("div", { class: "start-cards", children: cards }),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface StreamSettings {
|
|
2
|
+
readonly runtimeDirectory: string;
|
|
3
|
+
readonly journal: string;
|
|
4
|
+
readonly retryMilliseconds: number;
|
|
5
|
+
}
|
|
6
|
+
export interface WatchStream {
|
|
7
|
+
readonly subscribe: (listener: () => void) => () => void;
|
|
8
|
+
readonly close: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function throttled(notify: () => void, milliseconds: number): () => void;
|
|
11
|
+
export declare function watchStream(settings: StreamSettings): WatchStream;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { watch } from "node:fs";
|
|
2
|
+
import { readdir, stat } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
5
|
+
import { follow, send } from "./client.js";
|
|
6
|
+
const burstMilliseconds = 100;
|
|
7
|
+
export function throttled(notify, milliseconds) {
|
|
8
|
+
const burst = { open: false, again: false };
|
|
9
|
+
const fire = () => {
|
|
10
|
+
burst.open = true;
|
|
11
|
+
setTimeout(ended, milliseconds).unref();
|
|
12
|
+
notify();
|
|
13
|
+
};
|
|
14
|
+
const ended = () => {
|
|
15
|
+
burst.open = false;
|
|
16
|
+
if (!burst.again)
|
|
17
|
+
return;
|
|
18
|
+
burst.again = false;
|
|
19
|
+
fire();
|
|
20
|
+
};
|
|
21
|
+
return () => {
|
|
22
|
+
if (burst.open)
|
|
23
|
+
burst.again = true;
|
|
24
|
+
else
|
|
25
|
+
fire();
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function paused(stream) {
|
|
29
|
+
const { signal } = stream.stopping;
|
|
30
|
+
await delay(stream.settings.retryMilliseconds, undefined, { signal }).catch(() => undefined);
|
|
31
|
+
}
|
|
32
|
+
async function serviceFollowed(stream) {
|
|
33
|
+
const { runtimeDirectory } = stream.settings;
|
|
34
|
+
while (!stream.stopping.signal.aborted) {
|
|
35
|
+
const page = await send(runtimeDirectory, {
|
|
36
|
+
operation: "events",
|
|
37
|
+
parameters: { limit: 1 },
|
|
38
|
+
});
|
|
39
|
+
if (page.kind === "result") {
|
|
40
|
+
stream.notify();
|
|
41
|
+
const after = page.result["latestSequence"];
|
|
42
|
+
await follow(runtimeDirectory, {
|
|
43
|
+
request: { operation: "events", parameters: { after, follow: true } },
|
|
44
|
+
onEvent: stream.notify,
|
|
45
|
+
signal: stream.stopped,
|
|
46
|
+
});
|
|
47
|
+
stream.notify();
|
|
48
|
+
}
|
|
49
|
+
await paused(stream);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function present(file) {
|
|
53
|
+
return stat(file).then(() => true, () => false);
|
|
54
|
+
}
|
|
55
|
+
async function openTurns(journal) {
|
|
56
|
+
const files = [];
|
|
57
|
+
for (const folder of await readdir(journal).catch(() => [])) {
|
|
58
|
+
const started = await present(join(journal, folder, "started.json"));
|
|
59
|
+
const ended = await present(join(journal, folder, "result.json"));
|
|
60
|
+
if (started && !ended)
|
|
61
|
+
files.push(join(journal, folder, "turn.jsonl"));
|
|
62
|
+
}
|
|
63
|
+
return files;
|
|
64
|
+
}
|
|
65
|
+
function tailed(stream, file) {
|
|
66
|
+
if (stream.tails.has(file))
|
|
67
|
+
return;
|
|
68
|
+
try {
|
|
69
|
+
const watcher = watch(file, stream.notify);
|
|
70
|
+
watcher.on("error", stream.notify);
|
|
71
|
+
stream.tails.set(file, watcher);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
stream.notify();
|
|
77
|
+
}
|
|
78
|
+
async function tailsRefreshed(stream) {
|
|
79
|
+
const open = await openTurns(stream.settings.journal);
|
|
80
|
+
for (const [file, watcher] of stream.tails) {
|
|
81
|
+
if (open.includes(file))
|
|
82
|
+
continue;
|
|
83
|
+
watcher.close();
|
|
84
|
+
stream.tails.delete(file);
|
|
85
|
+
stream.notify();
|
|
86
|
+
}
|
|
87
|
+
for (const file of open)
|
|
88
|
+
tailed(stream, file);
|
|
89
|
+
}
|
|
90
|
+
async function journalWatched(stream) {
|
|
91
|
+
while (!stream.stopping.signal.aborted) {
|
|
92
|
+
await tailsRefreshed(stream);
|
|
93
|
+
await paused(stream);
|
|
94
|
+
}
|
|
95
|
+
for (const watcher of stream.tails.values())
|
|
96
|
+
watcher.close();
|
|
97
|
+
}
|
|
98
|
+
export function watchStream(settings) {
|
|
99
|
+
const listeners = new Set();
|
|
100
|
+
const stopping = new AbortController();
|
|
101
|
+
const stream = {
|
|
102
|
+
settings,
|
|
103
|
+
stopping,
|
|
104
|
+
stopped: new Promise((settle) => {
|
|
105
|
+
stopping.signal.addEventListener("abort", () => {
|
|
106
|
+
settle();
|
|
107
|
+
});
|
|
108
|
+
}),
|
|
109
|
+
notify: throttled(() => {
|
|
110
|
+
for (const listener of [...listeners])
|
|
111
|
+
listener();
|
|
112
|
+
}, burstMilliseconds),
|
|
113
|
+
tails: new Map(),
|
|
114
|
+
};
|
|
115
|
+
Promise.allSettled([serviceFollowed(stream), journalWatched(stream)]).then(() => undefined, () => undefined);
|
|
116
|
+
return {
|
|
117
|
+
subscribe: (listener) => {
|
|
118
|
+
listeners.add(listener);
|
|
119
|
+
return () => {
|
|
120
|
+
listeners.delete(listener);
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
close: () => {
|
|
124
|
+
listeners.clear();
|
|
125
|
+
stopping.abort();
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Shown } from "./watch-element.ts";
|
|
2
|
+
import { type Copying, type WatchDecision, type WatchEvent, type WatchItem, type WatchTurn } from "./watch-render.ts";
|
|
3
|
+
export declare function Item(props: {
|
|
4
|
+
readonly item: WatchItem;
|
|
5
|
+
}): Shown;
|
|
6
|
+
export declare function Group(props: {
|
|
7
|
+
readonly items: readonly WatchItem[];
|
|
8
|
+
readonly open: boolean;
|
|
9
|
+
}): Shown;
|
|
10
|
+
export declare function Turn(props: {
|
|
11
|
+
readonly turn: WatchTurn;
|
|
12
|
+
readonly now: string;
|
|
13
|
+
}): Shown;
|
|
14
|
+
export declare function Work(props: {
|
|
15
|
+
readonly turn: WatchTurn;
|
|
16
|
+
}): Shown;
|
|
17
|
+
export declare function Command(props: {
|
|
18
|
+
readonly label: string;
|
|
19
|
+
readonly command: string;
|
|
20
|
+
readonly copyLabel?: string;
|
|
21
|
+
readonly copying: Copying;
|
|
22
|
+
}): Shown;
|
|
23
|
+
export declare function Decision(props: {
|
|
24
|
+
readonly decision: WatchDecision;
|
|
25
|
+
readonly turn: WatchTurn | undefined;
|
|
26
|
+
readonly copying: Copying;
|
|
27
|
+
}): Shown;
|
|
28
|
+
export declare function Events(props: {
|
|
29
|
+
readonly events: readonly WatchEvent[];
|
|
30
|
+
}): Shown;
|