cloving 0.3.20 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE.md → LICENSE} +1 -1
- package/README.md +475 -182
- package/dist/src/authority/budgets.d.ts +12 -0
- package/dist/src/authority/budgets.js +42 -0
- package/dist/src/authority/commands.d.ts +7 -0
- package/dist/src/authority/commands.js +263 -0
- package/dist/src/authority/details.d.ts +28 -0
- package/dist/src/authority/details.js +33 -0
- package/dist/src/authority/dispatch-decision.d.ts +40 -0
- package/dist/src/authority/dispatch-decision.js +47 -0
- package/dist/src/authority/effect-requests.d.ts +2 -0
- package/dist/src/authority/effect-requests.js +139 -0
- package/dist/src/authority/effect-results.d.ts +4 -0
- package/dist/src/authority/effect-results.js +236 -0
- package/dist/src/authority/events.d.ts +2 -0
- package/dist/src/authority/events.js +45 -0
- package/dist/src/authority/gate-reduction.d.ts +8 -0
- package/dist/src/authority/gate-reduction.js +109 -0
- package/dist/src/authority/gates.d.ts +48 -0
- package/dist/src/authority/gates.js +77 -0
- package/dist/src/authority/history-state.d.ts +15 -0
- package/dist/src/authority/history-state.js +61 -0
- package/dist/src/authority/history.d.ts +13 -0
- package/dist/src/authority/history.js +37 -0
- package/dist/src/authority/instants.d.ts +3 -0
- package/dist/src/authority/instants.js +38 -0
- package/dist/src/authority/leases.d.ts +15 -0
- package/dist/src/authority/leases.js +113 -0
- package/dist/src/authority/operations.d.ts +101 -0
- package/dist/src/authority/operations.js +75 -0
- package/dist/src/authority/reconciliation.d.ts +27 -0
- package/dist/src/authority/reconciliation.js +147 -0
- package/dist/src/authority/reducer.d.ts +41 -0
- package/dist/src/authority/reducer.js +139 -0
- package/dist/src/authority/reduction-state.d.ts +36 -0
- package/dist/src/authority/reduction-state.js +68 -0
- package/dist/src/authority/reduction.d.ts +6 -0
- package/dist/src/authority/reduction.js +160 -0
- package/dist/src/authority/status-closure.d.ts +4 -0
- package/dist/src/authority/status-closure.js +57 -0
- package/dist/src/authority/status-effects.d.ts +17 -0
- package/dist/src/authority/status-effects.js +43 -0
- package/dist/src/authority/status-input.d.ts +45 -0
- package/dist/src/authority/status-input.js +9 -0
- package/dist/src/authority/status.d.ts +32 -0
- package/dist/src/authority/status.js +256 -0
- package/dist/src/authority/stop-sequence.d.ts +37 -0
- package/dist/src/authority/stop-sequence.js +91 -0
- package/dist/src/authority/transitions.d.ts +63 -0
- package/dist/src/authority/transitions.js +122 -0
- package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
- package/dist/src/broker/actor/adapter-calls.js +34 -0
- package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
- package/dist/src/broker/actor/adapter-outcomes.js +80 -0
- package/dist/src/broker/actor/authority-actor.d.ts +25 -0
- package/dist/src/broker/actor/authority-actor.js +169 -0
- package/dist/src/broker/actor/authority-changes.d.ts +31 -0
- package/dist/src/broker/actor/authority-changes.js +46 -0
- package/dist/src/broker/actor/authority-connection.d.ts +15 -0
- package/dist/src/broker/actor/authority-connection.js +44 -0
- package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
- package/dist/src/broker/actor/authority-conversion.js +72 -0
- package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
- package/dist/src/broker/actor/authority-delivery.js +162 -0
- package/dist/src/broker/actor/authority-logger.d.ts +2 -0
- package/dist/src/broker/actor/authority-logger.js +19 -0
- package/dist/src/broker/actor/authority-policy.d.ts +9 -0
- package/dist/src/broker/actor/authority-policy.js +11 -0
- package/dist/src/broker/actor/authority-queries.d.ts +45 -0
- package/dist/src/broker/actor/authority-queries.js +85 -0
- package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
- package/dist/src/broker/actor/authority-receipts.js +84 -0
- package/dist/src/broker/actor/authority-release.d.ts +13 -0
- package/dist/src/broker/actor/authority-release.js +69 -0
- package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
- package/dist/src/broker/actor/authority-runtime.js +204 -0
- package/dist/src/broker/actor/authority-session.d.ts +65 -0
- package/dist/src/broker/actor/authority-session.js +252 -0
- package/dist/src/broker/actor/authority-settings.d.ts +33 -0
- package/dist/src/broker/actor/authority-settings.js +63 -0
- package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
- package/dist/src/broker/actor/authority-upgrades.js +12 -0
- package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
- package/dist/src/broker/actor/authority-watchdog.js +41 -0
- package/dist/src/broker/actor/authority.d.ts +14 -0
- package/dist/src/broker/actor/authority.js +115 -0
- package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
- package/dist/src/broker/actor/delivery-intents.js +77 -0
- package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
- package/dist/src/broker/actor/delivery-plan.js +109 -0
- package/dist/src/broker/actor/delivery-results.d.ts +11 -0
- package/dist/src/broker/actor/delivery-results.js +63 -0
- package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
- package/dist/src/broker/actor/effect-delivery.js +118 -0
- package/dist/src/broker/actor/effect-plan.d.ts +41 -0
- package/dist/src/broker/actor/effect-plan.js +173 -0
- package/dist/src/broker/actor/effect-queries.d.ts +27 -0
- package/dist/src/broker/actor/effect-queries.js +80 -0
- package/dist/src/broker/actor/effect-turn.d.ts +25 -0
- package/dist/src/broker/actor/effect-turn.js +84 -0
- package/dist/src/broker/actor/pin-check.d.ts +6 -0
- package/dist/src/broker/actor/pin-check.js +12 -0
- package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
- package/dist/src/broker/actor/runtime-parts.js +34 -0
- package/dist/src/broker/actor/stop-plan.d.ts +20 -0
- package/dist/src/broker/actor/stop-plan.js +46 -0
- package/dist/src/broker/actor/stop-turn.d.ts +17 -0
- package/dist/src/broker/actor/stop-turn.js +42 -0
- package/dist/src/broker/actor/turn-draft.d.ts +31 -0
- package/dist/src/broker/actor/turn-draft.js +138 -0
- package/dist/src/broker/actor/turn-plan.d.ts +17 -0
- package/dist/src/broker/actor/turn-plan.js +136 -0
- package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
- package/dist/src/broker/actor/turn-refusals.js +35 -0
- package/dist/src/broker/actor/turn-staging.d.ts +78 -0
- package/dist/src/broker/actor/turn-staging.js +34 -0
- package/dist/src/broker/actor/turn-state.d.ts +34 -0
- package/dist/src/broker/actor/turn-state.js +208 -0
- package/dist/src/broker/authority-admission.d.ts +21 -0
- package/dist/src/broker/authority-admission.js +70 -0
- package/dist/src/broker/authority-restore.d.ts +30 -0
- package/dist/src/broker/authority-restore.js +165 -0
- package/dist/src/broker/decision-restore.d.ts +16 -0
- package/dist/src/broker/decision-restore.js +158 -0
- package/dist/src/broker/decision-upgrade.d.ts +3 -0
- package/dist/src/broker/decision-upgrade.js +12 -0
- package/dist/src/broker/effect-restore.d.ts +20 -0
- package/dist/src/broker/effect-restore.js +111 -0
- package/dist/src/broker/effect-upgrade.d.ts +3 -0
- package/dist/src/broker/effect-upgrade.js +9 -0
- package/dist/src/broker/operation-digest.d.ts +1 -0
- package/dist/src/broker/operation-digest.js +4 -0
- package/dist/src/broker/socket-address.d.ts +9 -0
- package/dist/src/broker/socket-address.js +14 -0
- package/dist/src/broker/workflow-pin.d.ts +2 -0
- package/dist/src/broker/workflow-pin.js +5 -0
- package/dist/src/chats/destination.d.ts +4 -0
- package/dist/src/chats/destination.js +94 -0
- package/dist/src/chats/import.d.ts +13 -0
- package/dist/src/chats/import.js +71 -0
- package/dist/src/chats/normalize.d.ts +20 -0
- package/dist/src/chats/normalize.js +139 -0
- package/dist/src/chats/reader.d.ts +15 -0
- package/dist/src/chats/reader.js +87 -0
- package/dist/src/cli/arguments.d.ts +23 -0
- package/dist/src/cli/arguments.js +154 -0
- package/dist/src/cli/client.d.ts +15 -0
- package/dist/src/cli/client.js +122 -0
- package/dist/src/cli/commands.d.ts +14 -0
- package/dist/src/cli/commands.js +253 -0
- package/dist/src/cli/main.d.ts +1 -0
- package/dist/src/cli/main.js +80 -0
- package/dist/src/cli/render.d.ts +8 -0
- package/dist/src/cli/render.js +186 -0
- package/dist/src/cli/runtime-arguments.d.ts +73 -0
- package/dist/src/cli/runtime-arguments.js +248 -0
- package/dist/src/cli/runtime-directory.d.ts +4 -0
- package/dist/src/cli/runtime-directory.js +25 -0
- package/dist/src/cli/toolchain.d.ts +3 -0
- package/dist/src/cli/toolchain.js +74 -0
- package/dist/src/cli/usage.d.ts +4 -0
- package/dist/src/cli/usage.js +124 -0
- package/dist/src/cli/validate.d.ts +38 -0
- package/dist/src/cli/validate.js +116 -0
- package/dist/src/cli/watch-board-view.d.ts +22 -0
- package/dist/src/cli/watch-board-view.js +128 -0
- package/dist/src/cli/watch-board.d.ts +15 -0
- package/dist/src/cli/watch-board.js +174 -0
- package/dist/src/cli/watch-element.d.ts +11 -0
- package/dist/src/cli/watch-element.js +6 -0
- package/dist/src/cli/watch-model.d.ts +29 -0
- package/dist/src/cli/watch-model.js +261 -0
- package/dist/src/cli/watch-navigation.d.ts +9 -0
- package/dist/src/cli/watch-navigation.js +40 -0
- package/dist/src/cli/watch-page.d.ts +1 -0
- package/dist/src/cli/watch-page.js +272 -0
- package/dist/src/cli/watch-paths.d.ts +2 -0
- package/dist/src/cli/watch-paths.js +52 -0
- package/dist/src/cli/watch-phases.d.ts +7 -0
- package/dist/src/cli/watch-phases.js +148 -0
- package/dist/src/cli/watch-reads.d.ts +28 -0
- package/dist/src/cli/watch-reads.js +244 -0
- package/dist/src/cli/watch-render.d.ts +139 -0
- package/dist/src/cli/watch-render.js +95 -0
- package/dist/src/cli/watch-server.d.ts +10 -0
- package/dist/src/cli/watch-server.js +176 -0
- package/dist/src/cli/watch-stream.d.ts +11 -0
- package/dist/src/cli/watch-stream.js +128 -0
- package/dist/src/cli/watch-turn.d.ts +29 -0
- package/dist/src/cli/watch-turn.js +130 -0
- package/dist/src/cli/watch-view.d.ts +39 -0
- package/dist/src/cli/watch-view.js +223 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +62 -0
- package/dist/src/daemon/claude-turn.d.ts +28 -0
- package/dist/src/daemon/claude-turn.js +135 -0
- package/dist/src/daemon/claude-worker.d.ts +26 -0
- package/dist/src/daemon/claude-worker.js +224 -0
- package/dist/src/daemon/codex-stream.d.ts +4 -0
- package/dist/src/daemon/codex-stream.js +113 -0
- package/dist/src/daemon/daemon.d.ts +46 -0
- package/dist/src/daemon/daemon.js +186 -0
- package/dist/src/daemon/delivery-router.d.ts +10 -0
- package/dist/src/daemon/delivery-router.js +34 -0
- package/dist/src/daemon/github-calls.d.ts +29 -0
- package/dist/src/daemon/github-calls.js +127 -0
- package/dist/src/daemon/github-issue-methods.d.ts +3 -0
- package/dist/src/daemon/github-issue-methods.js +99 -0
- package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
- package/dist/src/daemon/github-issue-privacy.js +131 -0
- package/dist/src/daemon/github-merge.d.ts +18 -0
- package/dist/src/daemon/github-merge.js +259 -0
- package/dist/src/daemon/github-methods.d.ts +5 -0
- package/dist/src/daemon/github-methods.js +198 -0
- package/dist/src/daemon/github-operation.d.ts +38 -0
- package/dist/src/daemon/github-operation.js +57 -0
- package/dist/src/daemon/github-worker.d.ts +17 -0
- package/dist/src/daemon/github-worker.js +281 -0
- package/dist/src/daemon/host-environment.d.ts +8 -0
- package/dist/src/daemon/host-environment.js +14 -0
- package/dist/src/daemon/issue-queue.d.ts +9 -0
- package/dist/src/daemon/issue-queue.js +163 -0
- package/dist/src/daemon/notify-message.d.ts +14 -0
- package/dist/src/daemon/notify-message.js +48 -0
- package/dist/src/daemon/notify.d.ts +12 -0
- package/dist/src/daemon/notify.js +161 -0
- package/dist/src/daemon/operation-journal.d.ts +42 -0
- package/dist/src/daemon/operation-journal.js +53 -0
- package/dist/src/daemon/ticket-registration.d.ts +33 -0
- package/dist/src/daemon/ticket-registration.js +177 -0
- package/dist/src/daemon/ticket-source.d.ts +17 -0
- package/dist/src/daemon/ticket-source.js +36 -0
- package/dist/src/daemon/work-tree.d.ts +26 -0
- package/dist/src/daemon/work-tree.js +206 -0
- package/dist/src/effect-authorization.d.ts +21 -0
- package/dist/src/effect-authorization.js +14 -0
- package/dist/src/execution-pin.d.ts +4 -0
- package/dist/src/execution-pin.js +68 -0
- package/dist/src/host/start-delivery.d.ts +41 -0
- package/dist/src/host/start-delivery.js +68 -0
- package/dist/src/host/step-bridge-host.d.ts +79 -0
- package/dist/src/host/step-bridge-host.js +205 -0
- package/dist/src/host/step-claims.d.ts +31 -0
- package/dist/src/host/step-claims.js +85 -0
- package/dist/src/host/world-host.d.ts +21 -0
- package/dist/src/host/world-host.js +51 -0
- package/dist/src/host/world-reconciliation.d.ts +37 -0
- package/dist/src/host/world-reconciliation.js +75 -0
- package/dist/src/host/world-runs.d.ts +14 -0
- package/dist/src/host/world-runs.js +61 -0
- package/dist/src/operation-identity.d.ts +7 -0
- package/dist/src/operation-identity.js +59 -0
- package/dist/src/protocol.d.ts +35 -0
- package/dist/src/protocol.js +64 -0
- package/dist/src/resource-files.d.ts +1 -0
- package/dist/src/resource-files.js +29 -0
- package/dist/src/service/changes.d.ts +11 -0
- package/dist/src/service/changes.js +32 -0
- package/dist/src/service/decision-handler.d.ts +9 -0
- package/dist/src/service/decision-handler.js +233 -0
- package/dist/src/service/event-handler.d.ts +10 -0
- package/dist/src/service/event-handler.js +70 -0
- package/dist/src/service/expiry.d.ts +13 -0
- package/dist/src/service/expiry.js +53 -0
- package/dist/src/service/gateway.d.ts +21 -0
- package/dist/src/service/gateway.js +120 -0
- package/dist/src/service/registry.d.ts +40 -0
- package/dist/src/service/registry.js +13 -0
- package/dist/src/service/replies.d.ts +26 -0
- package/dist/src/service/replies.js +56 -0
- package/dist/src/service/run-handlers.d.ts +4 -0
- package/dist/src/service/run-handlers.js +271 -0
- package/dist/src/service/service.d.ts +58 -0
- package/dist/src/service/service.js +212 -0
- package/dist/src/service/submission-handler.d.ts +4 -0
- package/dist/src/service/submission-handler.js +206 -0
- package/dist/src/service/transport.d.ts +16 -0
- package/dist/src/service/transport.js +141 -0
- package/dist/src/service/worker-port.d.ts +85 -0
- package/dist/src/service/worker-port.js +126 -0
- package/dist/src/step-bridge.d.ts +57 -0
- package/dist/src/step-bridge.js +4 -0
- package/dist/src/steps/decision-gate.d.ts +2 -0
- package/dist/src/steps/decision-gate.js +8 -0
- package/dist/src/steps/load-cycle.d.ts +10 -0
- package/dist/src/steps/load-cycle.js +11 -0
- package/dist/src/steps/protected-effect.d.ts +2 -0
- package/dist/src/steps/protected-effect.js +8 -0
- package/dist/src/storage/decision-rows.d.ts +54 -0
- package/dist/src/storage/decision-rows.js +72 -0
- package/dist/src/storage/decision-snapshots.d.ts +17 -0
- package/dist/src/storage/decision-snapshots.js +25 -0
- package/dist/src/storage/domain-changes.d.ts +48 -0
- package/dist/src/storage/domain-changes.js +213 -0
- package/dist/src/storage/domain-rows.d.ts +85 -0
- package/dist/src/storage/domain-rows.js +129 -0
- package/dist/src/storage/domain-schema.d.ts +32 -0
- package/dist/src/storage/domain-schema.js +193 -0
- package/dist/src/storage/effect-changes.d.ts +5 -0
- package/dist/src/storage/effect-changes.js +105 -0
- package/dist/src/storage/effect-rows.d.ts +67 -0
- package/dist/src/storage/effect-rows.js +74 -0
- package/dist/src/storage/effect-schema.d.ts +1 -0
- package/dist/src/storage/effect-schema.js +59 -0
- package/dist/src/storage/statements.d.ts +9 -0
- package/dist/src/storage/statements.js +8 -0
- package/dist/src/submission.d.ts +42 -0
- package/dist/src/submission.js +71 -0
- package/dist/src/turn-profile.d.ts +13 -0
- package/dist/src/turn-profile.js +100 -0
- package/dist/src/workflow-admission.d.ts +45 -0
- package/dist/src/workflow-admission.js +151 -0
- package/dist/src/workflow-contracts.d.ts +27 -0
- package/dist/src/workflow-contracts.js +88 -0
- package/dist/src/workflow-declaration.d.ts +11 -0
- package/dist/src/workflow-declaration.js +57 -0
- package/dist/src/workflow-resources.d.ts +8 -0
- package/dist/src/workflow-resources.js +14 -0
- package/dist/src/workflows.d.ts +5 -0
- package/dist/src/workflows.js +3 -0
- package/dist/tools/compile-workflows.d.ts +1 -0
- package/dist/tools/compile-workflows.js +33 -0
- package/dist/tools/self-host-processes.d.ts +10 -0
- package/dist/tools/self-host-processes.js +151 -0
- package/dist/tools/self-host-workflows.d.ts +15 -0
- package/dist/tools/self-host-workflows.js +78 -0
- package/dist/tools/self-host.d.ts +1 -0
- package/dist/tools/self-host.js +261 -0
- package/dist/tools/self-update-host.d.ts +6 -0
- package/dist/tools/self-update-host.js +41 -0
- package/dist/tools/self-update.d.ts +10 -0
- package/dist/tools/self-update.js +105 -0
- package/dist/tools/workflow-manifest.d.ts +3 -0
- package/dist/tools/workflow-manifest.js +34 -0
- package/dist/workflows/develop-prd.d.ts +7 -0
- package/dist/workflows/develop-prd.js +97 -0
- package/dist/workflows/develop-ticket.d.ts +15 -0
- package/dist/workflows/develop-ticket.js +301 -0
- package/dist/workflows/issue-labels.d.ts +14 -0
- package/dist/workflows/issue-labels.js +36 -0
- package/package.json +82 -75
- package/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,176 @@
|
|
|
1
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { createServer, } from "node:http";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { watchReader } from "./watch-reads.js";
|
|
7
|
+
import { turnOf, watchModel } from "./watch-model.js";
|
|
8
|
+
import { pageDocument } from "./watch-page.js";
|
|
9
|
+
import { watchStream } from "./watch-stream.js";
|
|
10
|
+
export const defaultWatchPort = 3663;
|
|
11
|
+
const notFound = { status: 404, type: "text/plain", body: "not found" };
|
|
12
|
+
const libraryFile = fileURLToPath(import.meta.resolve("preact"));
|
|
13
|
+
function parsed(text) {
|
|
14
|
+
try {
|
|
15
|
+
const value = JSON.parse(text);
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const noStream = { size: 0, lines: [], activeAt: null };
|
|
23
|
+
async function streamed(watch, file) {
|
|
24
|
+
const found = await stat(file).catch(() => null);
|
|
25
|
+
if (found === null)
|
|
26
|
+
return noStream;
|
|
27
|
+
const known = watch.streams.get(file);
|
|
28
|
+
const activeAt = found.mtime.toISOString();
|
|
29
|
+
if (known?.size === found.size)
|
|
30
|
+
return { ...known, activeAt };
|
|
31
|
+
const lines = (await readFile(file, "utf8").catch(() => "")).split("\n");
|
|
32
|
+
watch.streams.set(file, { size: found.size, lines });
|
|
33
|
+
return { size: found.size, lines, activeAt };
|
|
34
|
+
}
|
|
35
|
+
async function stored(file) {
|
|
36
|
+
return parsed(await readFile(file, "utf8").catch(() => "null"));
|
|
37
|
+
}
|
|
38
|
+
async function turns(watch) {
|
|
39
|
+
const journal = join(dirname(watch.settings.runtimeDirectory), "journal");
|
|
40
|
+
const found = [];
|
|
41
|
+
for (const key of await readdir(journal).catch(() => [])) {
|
|
42
|
+
const started = await stored(join(journal, key, "started.json"));
|
|
43
|
+
if (started === null)
|
|
44
|
+
continue;
|
|
45
|
+
const stream = await streamed(watch, join(journal, key, "turn.jsonl"));
|
|
46
|
+
found.push(turnOf({
|
|
47
|
+
key,
|
|
48
|
+
started,
|
|
49
|
+
result: await stored(join(journal, key, "result.json")),
|
|
50
|
+
lines: stream.lines,
|
|
51
|
+
activeAt: stream.activeAt,
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
return found.toSorted((first, second) => first.startedAt < second.startedAt ? -1 : 1);
|
|
55
|
+
}
|
|
56
|
+
async function githubRecords(watch) {
|
|
57
|
+
const journal = join(dirname(watch.settings.runtimeDirectory), "github");
|
|
58
|
+
const keys = await readdir(journal).catch(() => []);
|
|
59
|
+
for (const key of keys) {
|
|
60
|
+
const known = watch.github.get(key);
|
|
61
|
+
if (known !== undefined && known.result !== null)
|
|
62
|
+
continue;
|
|
63
|
+
const started = known?.started ?? (await stored(join(journal, key, "started.json")));
|
|
64
|
+
if (started === null)
|
|
65
|
+
continue;
|
|
66
|
+
const result = await stored(join(journal, key, "result.json"));
|
|
67
|
+
watch.github.set(key, { started, result });
|
|
68
|
+
}
|
|
69
|
+
return keys.flatMap((key) => watch.github.get(key) ?? []);
|
|
70
|
+
}
|
|
71
|
+
async function snapshot(watch, runId) {
|
|
72
|
+
const updatedAt = new Date().toISOString();
|
|
73
|
+
const [read, journal, github] = await Promise.all([
|
|
74
|
+
runId === null ? watch.reader.read(updatedAt) : watch.reader.run(runId),
|
|
75
|
+
turns(watch),
|
|
76
|
+
githubRecords(watch),
|
|
77
|
+
]);
|
|
78
|
+
return watchModel({
|
|
79
|
+
...read,
|
|
80
|
+
home: homedir(),
|
|
81
|
+
client: watch.settings.client,
|
|
82
|
+
updatedAt,
|
|
83
|
+
turns: journal,
|
|
84
|
+
githubRecords: github,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async function answered(watch, request) {
|
|
88
|
+
const url = new URL(String(request.url), "http://localhost");
|
|
89
|
+
const path = url.pathname;
|
|
90
|
+
if (request.method !== "GET")
|
|
91
|
+
return notFound;
|
|
92
|
+
if (path === "/")
|
|
93
|
+
return {
|
|
94
|
+
status: 200,
|
|
95
|
+
type: "text/html; charset=utf-8",
|
|
96
|
+
body: pageDocument(),
|
|
97
|
+
};
|
|
98
|
+
if (path === "/preact.mjs")
|
|
99
|
+
return {
|
|
100
|
+
status: 200,
|
|
101
|
+
type: "text/javascript; charset=utf-8",
|
|
102
|
+
body: await readFile(libraryFile, "utf8"),
|
|
103
|
+
};
|
|
104
|
+
if (path !== "/data.json")
|
|
105
|
+
return notFound;
|
|
106
|
+
const runId = url.searchParams.get("runId");
|
|
107
|
+
const model = await snapshot(watch, runId);
|
|
108
|
+
if (runId !== null && model.runs.length === 0)
|
|
109
|
+
return notFound;
|
|
110
|
+
return {
|
|
111
|
+
status: 200,
|
|
112
|
+
type: "application/json",
|
|
113
|
+
body: JSON.stringify(runId === null ? model : { run: model.runs[0] }),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function replied(response, reply) {
|
|
117
|
+
response.writeHead(reply.status, {
|
|
118
|
+
"content-type": reply.type,
|
|
119
|
+
"cache-control": "no-store",
|
|
120
|
+
});
|
|
121
|
+
response.end(reply.body);
|
|
122
|
+
}
|
|
123
|
+
function subscribed(stream, exchange) {
|
|
124
|
+
const { request, response } = exchange;
|
|
125
|
+
const changed = () => {
|
|
126
|
+
response.write("data: change\n\n");
|
|
127
|
+
};
|
|
128
|
+
response.writeHead(200, {
|
|
129
|
+
"content-type": "text/event-stream",
|
|
130
|
+
"cache-control": "no-store",
|
|
131
|
+
});
|
|
132
|
+
changed();
|
|
133
|
+
request.once("close", stream.subscribe(changed));
|
|
134
|
+
}
|
|
135
|
+
export function watchServer(settings) {
|
|
136
|
+
const watch = {
|
|
137
|
+
settings,
|
|
138
|
+
reader: watchReader(settings.runtimeDirectory),
|
|
139
|
+
streams: new Map(),
|
|
140
|
+
github: new Map(),
|
|
141
|
+
};
|
|
142
|
+
const stream = watchStream({
|
|
143
|
+
runtimeDirectory: settings.runtimeDirectory,
|
|
144
|
+
journal: join(dirname(settings.runtimeDirectory), "journal"),
|
|
145
|
+
retryMilliseconds: 1000,
|
|
146
|
+
});
|
|
147
|
+
const server = createServer((request, response) => {
|
|
148
|
+
if (request.method === "GET" && request.url === "/events") {
|
|
149
|
+
subscribed(stream, { request, response });
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
answered(watch, request).then((reply) => {
|
|
153
|
+
replied(response, reply);
|
|
154
|
+
}, () => {
|
|
155
|
+
replied(response, { ...notFound, status: 500, body: "failed" });
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
return new Promise((settle) => {
|
|
159
|
+
server.once("error", (error) => {
|
|
160
|
+
stream.close();
|
|
161
|
+
settings.complain(`watch-not-started: ${error.message}\n`);
|
|
162
|
+
settle(1);
|
|
163
|
+
});
|
|
164
|
+
server.listen(settings.port, "127.0.0.1", () => {
|
|
165
|
+
const bound = Reflect.get(Object(server.address()), "port");
|
|
166
|
+
settings.announce(`Watch page: http://127.0.0.1:${String(bound)}/\n`);
|
|
167
|
+
});
|
|
168
|
+
const closed = () => {
|
|
169
|
+
stream.close();
|
|
170
|
+
server.close();
|
|
171
|
+
server.closeAllConnections();
|
|
172
|
+
settle(0);
|
|
173
|
+
};
|
|
174
|
+
settings.stopped.then(closed, closed);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
@@ -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,29 @@
|
|
|
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 copying: Copying;
|
|
21
|
+
}): Shown;
|
|
22
|
+
export declare function Decision(props: {
|
|
23
|
+
readonly decision: WatchDecision;
|
|
24
|
+
readonly turn: WatchTurn | undefined;
|
|
25
|
+
readonly copying: Copying;
|
|
26
|
+
}): Shown;
|
|
27
|
+
export declare function Events(props: {
|
|
28
|
+
readonly events: readonly WatchEvent[];
|
|
29
|
+
}): Shown;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { component, element } from "./watch-element.js";
|
|
2
|
+
import { clockTime, counted, groupActivity, turnTime, } from "./watch-render.js";
|
|
3
|
+
export function Item(props) {
|
|
4
|
+
const { kind, text } = props.item;
|
|
5
|
+
const title = kind === "tool" ? text : undefined;
|
|
6
|
+
return element("div", { class: `item ${kind}`, title, children: text });
|
|
7
|
+
}
|
|
8
|
+
export function Group(props) {
|
|
9
|
+
const { items, open } = props;
|
|
10
|
+
const lines = items.map((item) => component(Item, { item }));
|
|
11
|
+
if (items.length < 2)
|
|
12
|
+
return lines;
|
|
13
|
+
const errors = items.filter((item) => item.kind === "error").length;
|
|
14
|
+
const failed = element("span", {
|
|
15
|
+
class: "bad",
|
|
16
|
+
children: counted(errors, "error"),
|
|
17
|
+
});
|
|
18
|
+
const summary = [
|
|
19
|
+
counted(items.length - errors, "tool call"),
|
|
20
|
+
errors === 0 ? null : [" · ", failed],
|
|
21
|
+
element("span", { class: "last", children: items.at(-1)?.text }),
|
|
22
|
+
];
|
|
23
|
+
return element("details", {
|
|
24
|
+
class: "tools",
|
|
25
|
+
open,
|
|
26
|
+
children: [element("summary", { children: summary }), lines],
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export function Turn(props) {
|
|
30
|
+
const { turn, now } = props;
|
|
31
|
+
const groups = groupActivity(turn.activity);
|
|
32
|
+
const working = turn.outcome === "in work";
|
|
33
|
+
const cost = turn.costUsd === null ? "" : `${turn.costUsd.toFixed(2)} USD`;
|
|
34
|
+
const heading = ["Claude turn", turn.outcome, turnTime(turn, now), cost];
|
|
35
|
+
const place = `Branch ${turn.branch} · work tree ${turn.worktree}`;
|
|
36
|
+
const activity = groups.map((items, index) => component(Group, { items, open: working && index === groups.length - 1 }));
|
|
37
|
+
return element("section", {
|
|
38
|
+
class: "turn code-window",
|
|
39
|
+
children: [
|
|
40
|
+
element("h3", {
|
|
41
|
+
class: "code-head",
|
|
42
|
+
children: heading.filter((part) => part !== "").join(" · "),
|
|
43
|
+
}),
|
|
44
|
+
element("p", { class: "meta", children: place }),
|
|
45
|
+
element("div", { class: "activity", children: activity }),
|
|
46
|
+
],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
export function Work(props) {
|
|
50
|
+
const { turn } = props;
|
|
51
|
+
const loose = turn.uncommitted.length;
|
|
52
|
+
const block = (lines) => element("pre", { children: lines.join("\n") });
|
|
53
|
+
const text = (tone, children) => element("p", { class: tone, children });
|
|
54
|
+
const branch = [
|
|
55
|
+
"Branch ",
|
|
56
|
+
element("code", { children: turn.branch }),
|
|
57
|
+
` · ${counted(turn.commits.length, "commit")}`,
|
|
58
|
+
];
|
|
59
|
+
const commits = turn.commits.length === 0
|
|
60
|
+
? text("bad", "The worker made no commit.")
|
|
61
|
+
: [text("fact", branch), block(turn.commits), block(turn.files)];
|
|
62
|
+
const left = `${counted(loose, "file")} ${loose === 1 ? "is" : "are"} not committed:`;
|
|
63
|
+
const state = loose === 0
|
|
64
|
+
? text("good", "All the work is committed.")
|
|
65
|
+
: [text("bad", left), block(turn.uncommitted)];
|
|
66
|
+
const report = element("details", {
|
|
67
|
+
open: true,
|
|
68
|
+
children: [
|
|
69
|
+
element("summary", { children: "Report of the worker" }),
|
|
70
|
+
element("div", { class: "report", children: turn.summary }),
|
|
71
|
+
],
|
|
72
|
+
});
|
|
73
|
+
return [commits, state, report];
|
|
74
|
+
}
|
|
75
|
+
export function Command(props) {
|
|
76
|
+
const { label, command, copying } = props;
|
|
77
|
+
const onClick = () => {
|
|
78
|
+
copying.onCopy(command);
|
|
79
|
+
};
|
|
80
|
+
const shown = copying.command === command ? copying.label : "Copy";
|
|
81
|
+
return element("div", {
|
|
82
|
+
class: "command code-window",
|
|
83
|
+
children: [
|
|
84
|
+
element("span", { class: "label code-head", children: label }),
|
|
85
|
+
element("code", { children: command }),
|
|
86
|
+
element("button", { type: "button", onClick, children: shown }),
|
|
87
|
+
],
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
export function Decision(props) {
|
|
91
|
+
const { decision, turn, copying } = props;
|
|
92
|
+
const request = element("details", {
|
|
93
|
+
open: turn === undefined,
|
|
94
|
+
children: [
|
|
95
|
+
element("summary", { children: "Full text of the request" }),
|
|
96
|
+
element("pre", { children: decision.prompt }),
|
|
97
|
+
],
|
|
98
|
+
});
|
|
99
|
+
return element("section", {
|
|
100
|
+
class: "decision",
|
|
101
|
+
children: [
|
|
102
|
+
element("h3", { children: `Your decision · ${decision.type}` }),
|
|
103
|
+
turn === undefined ? null : component(Work, { turn }),
|
|
104
|
+
request,
|
|
105
|
+
component(Command, {
|
|
106
|
+
label: "Approve",
|
|
107
|
+
command: decision.approve,
|
|
108
|
+
copying,
|
|
109
|
+
}),
|
|
110
|
+
component(Command, { label: "Deny", command: decision.deny, copying }),
|
|
111
|
+
],
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
export function Events(props) {
|
|
115
|
+
const { events } = props;
|
|
116
|
+
const rows = events.map((event) => element("div", {
|
|
117
|
+
class: "event",
|
|
118
|
+
children: `${clockTime(event.recordedAt)} ${event.type}`,
|
|
119
|
+
}));
|
|
120
|
+
return element("details", {
|
|
121
|
+
class: "events code-window",
|
|
122
|
+
children: [
|
|
123
|
+
element("summary", {
|
|
124
|
+
class: "code-head",
|
|
125
|
+
children: `All events (${String(events.length)})`,
|
|
126
|
+
}),
|
|
127
|
+
rows,
|
|
128
|
+
],
|
|
129
|
+
});
|
|
130
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Shown } from "./watch-element.ts";
|
|
2
|
+
import { type Copying, type WatchModel, type WatchPhase, type WatchRun } from "./watch-render.ts";
|
|
3
|
+
interface Timed {
|
|
4
|
+
readonly run: WatchRun;
|
|
5
|
+
readonly now: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const clove: {
|
|
8
|
+
viewBox: string;
|
|
9
|
+
paths: string[];
|
|
10
|
+
};
|
|
11
|
+
export declare function BannerDetail(props: Timed): Shown;
|
|
12
|
+
export declare function Banner(props: Timed): Shown;
|
|
13
|
+
export declare function Phases(props: {
|
|
14
|
+
readonly phases: readonly WatchPhase[];
|
|
15
|
+
readonly now: string;
|
|
16
|
+
}): Shown;
|
|
17
|
+
export declare function Review(props: {
|
|
18
|
+
readonly run: WatchRun;
|
|
19
|
+
readonly round: number;
|
|
20
|
+
}): Shown;
|
|
21
|
+
export declare function PullRequest(props: {
|
|
22
|
+
readonly run: WatchRun;
|
|
23
|
+
}): Shown;
|
|
24
|
+
export declare function Run(props: Timed & {
|
|
25
|
+
readonly copying: Copying;
|
|
26
|
+
}): Shown;
|
|
27
|
+
export declare function Header(props: {
|
|
28
|
+
readonly model: WatchModel | null;
|
|
29
|
+
readonly stale: boolean;
|
|
30
|
+
}): Shown;
|
|
31
|
+
export interface PageProps {
|
|
32
|
+
readonly model: WatchModel | null;
|
|
33
|
+
readonly selected: string;
|
|
34
|
+
readonly now: string;
|
|
35
|
+
readonly stale: boolean;
|
|
36
|
+
readonly copying: Copying;
|
|
37
|
+
}
|
|
38
|
+
export declare function Page(props: PageProps): Shown;
|
|
39
|
+
export {};
|