toolroll 0.9.104 → 0.9.105
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/CHANGELOG.md +62 -5
- package/README.md +18 -20
- package/dist/accent-colors.js +0 -29
- package/dist/acp-agents.js +0 -3
- package/dist/acp-attest.js +0 -30
- package/dist/acp-check.js +3 -70
- package/dist/acp-client.js +3 -94
- package/dist/acp-inspect.js +1 -20
- package/dist/action-ledger.js +0 -8
- package/dist/activity-line.js +0 -14
- package/dist/actor.js +0 -15
- package/dist/advanced-schema.js +12 -0
- package/dist/advanced-view.js +26 -0
- package/dist/advanced.js +61 -0
- package/dist/agent-board.js +0 -117
- package/dist/agent-fence.js +11 -367
- package/dist/agent-onboard.js +12 -50
- package/dist/agent-pulse.js +5 -38
- package/dist/agent-state-words.js +0 -8
- package/dist/agent-state.js +1 -45
- package/dist/agent-turns.js +3 -17
- package/dist/agentconfig.js +1 -99
- package/dist/agents-board.js +0 -60
- package/dist/agents-live.js +1 -8
- package/dist/api-tokens.js +0 -27
- package/dist/approval-authority.js +0 -59
- package/dist/approval-password.js +0 -10
- package/dist/approval-policy.js +0 -29
- package/dist/approval-rules-ui.js +0 -9
- package/dist/assignment-adapters.js +0 -14
- package/dist/assignment-brief.js +1 -17
- package/dist/assignment-delivery.js +0 -22
- package/dist/assignment-presentation.js +0 -14
- package/dist/assignment-status.js +1 -30
- package/dist/assignment-ui.js +0 -12
- package/dist/assignment.js +17 -139
- package/dist/attest.js +0 -38
- package/dist/audit-cli.js +0 -9
- package/dist/backend.js +0 -59
- package/dist/backup-ui.js +0 -12
- package/dist/backup.js +8 -61
- package/dist/batch-checks.js +0 -20
- package/dist/batch-policy.js +0 -4
- package/dist/beads.js +0 -48
- package/dist/bin.js +0 -8
- package/dist/board.js +1 -36
- package/dist/boot-identity.js +0 -42
- package/dist/bounded-spawn.js +4 -28
- package/dist/brand-mark.js +0 -21
- package/dist/brief-fence.js +0 -16
- package/dist/browser/terminal.css +1 -1
- package/dist/browser/terminal.js +16 -16
- package/dist/browser/workspace.css +2 -2
- package/dist/browser/workspace.js +26 -26
- package/dist/browser-crew.js +0 -8
- package/dist/browser-shell.js +2 -15
- package/dist/browser-workspace.js +6 -30
- package/dist/budget-alerts.js +1 -4
- package/dist/build-review.js +2 -50
- package/dist/builder-restart.js +0 -13
- package/dist/builder.js +21 -1035
- package/dist/canonical-json.js +0 -12
- package/dist/capscan.js +1 -32
- package/dist/card-catalog.js +0 -12
- package/dist/card-cli.js +0 -1
- package/dist/card-render.js +0 -25
- package/dist/card-sources.js +0 -10
- package/dist/chat-acceptance.js +0 -7
- package/dist/chat-actions.js +5 -190
- package/dist/chat-admission.js +0 -7
- package/dist/chat-approval.js +0 -25
- package/dist/chat-ask.js +0 -17
- package/dist/chat-card-part.js +0 -3
- package/dist/chat-card.js +0 -6
- package/dist/chat-channel.js +2 -83
- package/dist/chat-continuity.js +0 -31
- package/dist/chat-controls.js +0 -7
- package/dist/chat-core.js +0 -55
- package/dist/chat-decide.js +2 -153
- package/dist/chat-delivery-state.js +0 -49
- package/dist/chat-delivery.js +2 -143
- package/dist/chat-display.js +0 -2
- package/dist/chat-evidence.js +0 -65
- package/dist/chat-flow.js +0 -72
- package/dist/chat-follow.js +0 -13
- package/dist/chat-inbox.js +0 -34
- package/dist/chat-live-schema.js +0 -14
- package/dist/chat-live.js +2 -87
- package/dist/chat-message-states.js +13 -40
- package/dist/chat-messages.js +0 -153
- package/dist/chat-migration.js +0 -57
- package/dist/chat-polish.js +0 -7
- package/dist/chat-quiet.js +0 -37
- package/dist/chat-review.js +0 -4
- package/dist/chat-rooms.js +0 -22
- package/dist/chat-settings-page.js +0 -4
- package/dist/chat-task-actions.js +0 -7
- package/dist/chat-terms.js +0 -21
- package/dist/chat-voice.js +0 -38
- package/dist/chat-warmth.js +1 -3
- package/dist/check-access.js +0 -30
- package/dist/check-facts.js +2 -62
- package/dist/check-failure.js +0 -98
- package/dist/check-levels-ui.js +4 -10
- package/dist/check-levels.js +3 -35
- package/dist/check-load.js +1 -49
- package/dist/check-only-standing.js +0 -6
- package/dist/check-only.js +0 -22
- package/dist/check-progress.js +0 -32
- package/dist/check-repair.js +2 -35
- package/dist/check-report.js +1 -108
- package/dist/check-stamp.js +0 -20
- package/dist/checkout-cleanup.js +0 -84
- package/dist/checkout-proof.js +1 -13
- package/dist/child-database.js +0 -3
- package/dist/claim.js +4 -508
- package/dist/claude-print.js +0 -10
- package/dist/cli-fast.js +0 -8
- package/dist/cli-help.js +90 -78
- package/dist/cli-http.js +0 -10
- package/dist/cli.js +26 -241
- package/dist/code-extract.js +0 -6
- package/dist/code-map-acts.js +0 -7
- package/dist/code-map-admission.js +2 -26
- package/dist/code-map-build.js +3 -24
- package/dist/code-map-cli.js +0 -4
- package/dist/code-map-main.js +0 -6
- package/dist/code-map-read.js +0 -12
- package/dist/code-map-report.js +0 -9
- package/dist/code-map-shape.js +0 -19
- package/dist/code-map-store.js +0 -26
- package/dist/codex-limits.js +1 -17
- package/dist/coding-context.js +0 -10
- package/dist/coding-handoff.js +0 -14
- package/dist/coding-provider.js +0 -39
- package/dist/coding-shipping-ui.js +0 -1
- package/dist/coding-ui.js +0 -1
- package/dist/coding-update.js +1 -18
- package/dist/coding-workspace.js +0 -27
- package/dist/commit-extract.js +0 -83
- package/dist/connect-cli.js +0 -19
- package/dist/console-chrome.js +1 -34
- package/dist/console-instance.js +2 -91
- package/dist/container-state.js +0 -4
- package/dist/containment.js +2 -105
- package/dist/contract-changes.js +0 -6
- package/dist/contracts/acceptance-terms.js +0 -7
- package/dist/contracts/chat-actions.js +0 -46
- package/dist/contracts/chat-callback-rows.js +0 -8
- package/dist/contracts/chat-card.js +0 -14
- package/dist/contracts/chat-content.js +0 -55
- package/dist/contracts/chat-tables.js +0 -7
- package/dist/contracts/cli.js +0 -59
- package/dist/contracts/coding-activity.js +0 -15
- package/dist/contracts/coding-context.js +0 -15
- package/dist/contracts/coding-handoff.js +0 -11
- package/dist/contracts/coding-workspace.js +0 -14
- package/dist/contracts/console-api.js +1 -54
- package/dist/contracts/contract-test.js +0 -14
- package/dist/contracts/contract.js +0 -48
- package/dist/contracts/decision.js +0 -20
- package/dist/contracts/diff-stat.js +0 -16
- package/dist/contracts/discord-callback.js +0 -9
- package/dist/contracts/flow-card.js +0 -18
- package/dist/contracts/flow-propose.js +0 -8
- package/dist/contracts/flow-send.js +0 -31
- package/dist/contracts/flow.js +0 -112
- package/dist/contracts/gateway-tools.js +0 -22
- package/dist/contracts/handoff.js +0 -22
- package/dist/contracts/integration-metadata.js +0 -39
- package/dist/contracts/lead-context.js +0 -14
- package/dist/contracts/lead-tools.js +0 -49
- package/dist/contracts/mcp-oauth.js +0 -12
- package/dist/contracts/memory-pass.js +0 -21
- package/dist/contracts/model-catalog.js +0 -9
- package/dist/contracts/observation-request.js +0 -11
- package/dist/contracts/plan.js +0 -16
- package/dist/contracts/project-knowledge.js +0 -26
- package/dist/contracts/project-memory.js +0 -16
- package/dist/contracts/project-skills.js +0 -31
- package/dist/contracts/proof.js +0 -23
- package/dist/contracts/provider.js +0 -9
- package/dist/contracts/recipes.js +0 -16
- package/dist/contracts/release-check.js +0 -61
- package/dist/contracts/release-terms.js +0 -27
- package/dist/contracts/retention.js +0 -12
- package/dist/contracts/review-findings.js +0 -13
- package/dist/contracts/route-results.js +0 -15
- package/dist/contracts/route.js +0 -33
- package/dist/contracts/scope.js +0 -29
- package/dist/contracts/scout-report.js +0 -34
- package/dist/contracts/slack-callback.js +0 -11
- package/dist/contracts/sort-answer.js +0 -24
- package/dist/contracts/stage-output.js +0 -46
- package/dist/contracts/storage.js +0 -8
- package/dist/contracts/store-json.js +0 -41
- package/dist/contracts/subagent-turn.js +0 -23
- package/dist/contracts/task-sizing.js +0 -10
- package/dist/contracts/teams-callback.js +0 -7
- package/dist/contracts/telegram-callback.js +0 -27
- package/dist/contracts/trigger-payloads.js +0 -41
- package/dist/contracts/update-journal.js +0 -47
- package/dist/contracts/verification-receipt.js +0 -36
- package/dist/contracts/verification-view.js +0 -15
- package/dist/contracts/youiyoux-request.js +0 -26
- package/dist/control-setup.js +0 -7
- package/dist/control-ui.js +0 -3
- package/dist/controller-service.js +0 -4
- package/dist/controller-supervisor.js +0 -15
- package/dist/converse.js +3 -129
- package/dist/coordinator-proposals.js +1 -6
- package/dist/coordinator.js +0 -65
- package/dist/credentials-ui.js +0 -6
- package/dist/daemon.js +0 -137
- package/dist/database-reclaim.js +0 -3
- package/dist/decision.js +0 -78
- package/dist/demo-chat.js +4 -15
- package/dist/demo-sign-in.js +77 -0
- package/dist/demo.js +5 -194
- package/dist/deploy-gate.js +0 -20
- package/dist/deploy-lock.js +0 -4
- package/dist/deploy-phase.js +0 -22
- package/dist/deploy-rescue.js +0 -21
- package/dist/deprecations.js +0 -12
- package/dist/design/kit.css +9 -6
- package/dist/design/kit.js +2 -33
- package/dist/desktop-access.js +0 -9
- package/dist/desktop-bundle.js +1 -3
- package/dist/desktop-host.js +0 -34
- package/dist/desktop-update-gate.js +0 -8
- package/dist/desktop-update-recovery.js +1 -18
- package/dist/desktop-update.js +2 -48
- package/dist/digest-times.js +0 -2
- package/dist/disclosure.js +0 -5
- package/dist/discord-api.js +0 -6
- package/dist/discord-chat.js +0 -31
- package/dist/discord.js +0 -7
- package/dist/discover.js +0 -50
- package/dist/dispatch.js +61 -60
- package/dist/dispose.js +0 -208
- package/dist/doctor.js +0 -48
- package/dist/easy-start-args.js +7 -7
- package/dist/easy-start.js +32 -45
- package/dist/egress.js +1 -63
- package/dist/email-settings.js +0 -8
- package/dist/envelope.js +50 -86
- package/dist/eval-gate.js +1 -37
- package/dist/eval-hooks.js +0 -120
- package/dist/eval-oracle-main.js +0 -7
- package/dist/eval-oracle.js +3 -42
- package/dist/eval-world.js +1 -23
- package/dist/evals.js +6 -134
- package/dist/evidence-pack.js +0 -29
- package/dist/evidence-pair.js +0 -17
- package/dist/evidence.js +4 -280
- package/dist/exec.js +19 -404
- package/dist/exhaustion.js +0 -30
- package/dist/export-ui.js +0 -7
- package/dist/export.js +1 -38
- package/dist/failing-first.js +0 -6
- package/dist/fallback-schema.js +0 -5
- package/dist/fallback.js +0 -81
- package/dist/fast-start.js +0 -97
- package/dist/fast-terms.js +0 -3
- package/dist/fenced-check-coverage.js +0 -11
- package/dist/findings.js +1 -63
- package/dist/first-run.js +4 -57
- package/dist/first-tasks-child.js +0 -5
- package/dist/flaky-ci.js +1 -24
- package/dist/flaky-cli.js +0 -4
- package/dist/flaky.js +0 -43
- package/dist/fleet-schema.js +0 -11
- package/dist/flow-actions.js +0 -31
- package/dist/flow-browser.js +0 -42
- package/dist/flow-cadence.js +1 -24
- package/dist/flow-card-task.js +0 -11
- package/dist/flow-changed.js +0 -16
- package/dist/flow-code.js +1 -45
- package/dist/flow-draft.js +0 -17
- package/dist/flow-engine.js +2 -76
- package/dist/flow-gallery-ui.js +0 -28
- package/dist/flow-gallery.js +0 -54
- package/dist/flow-insights.js +0 -12
- package/dist/flow-items.js +0 -27
- package/dist/flow-live.js +0 -31
- package/dist/flow-people.js +0 -14
- package/dist/flow-pull-request.js +0 -32
- package/dist/flow-replies.js +0 -9
- package/dist/flow-result-card.js +0 -8
- package/dist/flow-schedule.js +0 -74
- package/dist/flow-scripts.js +0 -13
- package/dist/flow-secrets.js +0 -10
- package/dist/flow-send.js +0 -45
- package/dist/flow-share.js +0 -60
- package/dist/flow-sort.js +1 -24
- package/dist/flow-starters-ui.js +0 -2
- package/dist/flow-starters.js +0 -13
- package/dist/flow-steps.js +0 -80
- package/dist/flow-triggers.js +2 -256
- package/dist/flow-unattended-words.js +0 -13
- package/dist/flow-unattended.js +2 -115
- package/dist/flows-cli.js +2 -36
- package/dist/flows-ui.js +0 -51
- package/dist/flows.js +0 -158
- package/dist/folder-gate.js +0 -21
- package/dist/folder-look.js +0 -42
- package/dist/follow-through-brief.js +0 -6
- package/dist/follow-through-cli.js +0 -5
- package/dist/fonts.js +0 -13
- package/dist/gaps.js +0 -20
- package/dist/gate-failure.js +0 -7
- package/dist/git-floor.js +0 -12
- package/dist/git-incident.js +2 -38
- package/dist/git-views.js +0 -24
- package/dist/git.js +0 -31
- package/dist/github-import.js +0 -22
- package/dist/github-jobs.js +0 -12
- package/dist/google-mail.js +2 -27
- package/dist/grant.js +0 -110
- package/dist/graph.js +0 -108
- package/dist/guides.js +4 -15
- package/dist/handover-note.js +0 -12
- package/dist/health-cli.js +0 -2
- package/dist/home-groups.js +0 -15
- package/dist/html.js +0 -54
- package/dist/install-method.js +0 -12
- package/dist/integrations-ui.js +0 -15
- package/dist/integrations.js +7 -50
- package/dist/invoke.js +1 -381
- package/dist/is-record.js +0 -1
- package/dist/issues.js +0 -48
- package/dist/jsonl-discriminants.js +0 -6
- package/dist/keymap.js +0 -17
- package/dist/keys.js +0 -56
- package/dist/kits-ui.js +0 -3
- package/dist/kits.js +1 -24
- package/dist/knowledge-cli.js +0 -4
- package/dist/knowledge-ui.js +0 -8
- package/dist/landed-cleanup.js +0 -119
- package/dist/laptop-background.js +0 -85
- package/dist/laptop-service.js +0 -67
- package/dist/latency-timeline.js +2 -23
- package/dist/lead-about.js +0 -7
- package/dist/lead-answer-eval.js +0 -39
- package/dist/lead-capabilities.js +0 -19
- package/dist/lead-cli-live.js +0 -22
- package/dist/lead-cli.js +0 -27
- package/dist/lead-commitments.js +1 -27
- package/dist/lead-context.js +2 -42
- package/dist/lead-contract.js +0 -8
- package/dist/lead-doors.js +0 -105
- package/dist/lead-follow.js +0 -41
- package/dist/lead-identity.js +1 -4
- package/dist/lead-latency-schema.js +0 -13
- package/dist/lead-people.js +3 -18
- package/dist/lead-progress.js +0 -12
- package/dist/lead-queue-runtime.js +0 -26
- package/dist/lead-queue.js +0 -35
- package/dist/lead-route.js +0 -33
- package/dist/lead-status.js +0 -37
- package/dist/lead-sweep.js +0 -18
- package/dist/lead-tools.js +0 -160
- package/dist/lead-voice.js +0 -54
- package/dist/lead.js +2 -105
- package/dist/learning-child.js +0 -6
- package/dist/learning-look.js +0 -14
- package/dist/ledger-chain.js +0 -34
- package/dist/ledger-csv.js +0 -2
- package/dist/ledger-view.js +0 -3
- package/dist/lesson-notes.js +0 -56
- package/dist/limits-ui.js +0 -14
- package/dist/link.js +0 -79
- package/dist/live-backup.js +3 -33
- package/dist/live-bus.js +7 -81
- package/dist/live-children-read.js +4 -47
- package/dist/live-children.js +4 -44
- package/dist/live-detail.js +0 -17
- package/dist/live-input.js +5 -68
- package/dist/live-main-read.js +1 -14
- package/dist/live-notes.js +0 -12
- package/dist/live-open.js +1 -23
- package/dist/live-records.js +4 -151
- package/dist/live-reply.js +1 -51
- package/dist/live-terminal.js +12 -111
- package/dist/live.js +4 -130
- package/dist/local-owner-acts.js +0 -53
- package/dist/local-owner.js +2 -93
- package/dist/log.js +0 -8
- package/dist/login-secrets.js +2 -38
- package/dist/machine-check.js +0 -2
- package/dist/machine-identity.js +1 -46
- package/dist/mailbox.js +0 -30
- package/dist/maintenance.js +1 -3
- package/dist/mcp-connect.js +0 -88
- package/dist/mcp-core.js +0 -45
- package/dist/mcp-http.js +0 -13
- package/dist/mcp-oauth.js +0 -37
- package/dist/mcp-person.js +0 -11
- package/dist/mcp.js +3 -73
- package/dist/memory-cli.js +0 -3
- package/dist/memory-pass.js +0 -53
- package/dist/memory-tidy.js +0 -55
- package/dist/memory-use.js +2 -24
- package/dist/merge-checklist.js +21 -29
- package/dist/metrics.js +0 -10
- package/dist/mobile-viewport.js +0 -6
- package/dist/model-catalog.js +1 -33
- package/dist/model-choices.js +9 -84
- package/dist/model-names.js +0 -9
- package/dist/models-cli.js +0 -13
- package/dist/models-ui.js +0 -17
- package/dist/modes.js +0 -35
- package/dist/monitoring-settings.js +2 -27
- package/dist/monitoring-ui.js +2 -14
- package/dist/monitoring.js +2 -38
- package/dist/names.js +0 -39
- package/dist/needs-you.js +7 -70
- package/dist/never-index.js +0 -9
- package/dist/nightly-check.js +0 -74
- package/dist/nightly-github.js +0 -168
- package/dist/notification-delivery.js +0 -3
- package/dist/notification-rows.js +0 -17
- package/dist/oauth-run-token.js +1 -37
- package/dist/observations.js +0 -16
- package/dist/oidc.js +1 -20
- package/dist/onboard.js +4 -57
- package/dist/one-step-chat-schema.js +0 -15
- package/dist/openrouter-models.js +0 -6
- package/dist/operate-remote-arguments.js +0 -17
- package/dist/operate-remote.js +0 -33
- package/dist/operate.js +227 -2326
- package/dist/orphan-sweep.js +3 -37
- package/dist/page-work-contract.js +0 -3
- package/dist/password-bearer.js +1 -11
- package/dist/passwordless.js +0 -3
- package/dist/peek-cli.js +0 -46
- package/dist/peek.js +2 -61
- package/dist/people-audit-ui.js +0 -6
- package/dist/person-proof.js +0 -6
- package/dist/phase-routing.js +8 -183
- package/dist/plain-schema.js +0 -14
- package/dist/plain-words.js +18 -12
- package/dist/plan-auto.js +0 -20
- package/dist/plan-login.js +0 -16
- package/dist/plan.js +0 -68
- package/dist/plane-review.js +0 -56
- package/dist/planner-source.js +0 -96
- package/dist/planner.js +0 -117
- package/dist/policy-ui.js +0 -8
- package/dist/policy.js +0 -47
- package/dist/prepared-evidence.js +0 -5
- package/dist/principal.js +0 -29
- package/dist/probe.js +0 -30
- package/dist/process-custody.js +0 -15
- package/dist/process-liveness.js +0 -32
- package/dist/process-tree.js +3 -29
- package/dist/project-access.js +0 -10
- package/dist/project-admission.js +1 -41
- package/dist/project-cli.js +0 -6
- package/dist/project-concurrency.js +0 -35
- package/dist/project-delete-ui.js +4 -29
- package/dist/project-delete.js +1 -73
- package/dist/project-demo.js +0 -13
- package/dist/project-file.js +0 -2
- package/dist/project-identity.js +0 -41
- package/dist/project-knowledge.js +0 -39
- package/dist/project-learning.js +3 -55
- package/dist/project-memory.js +2 -45
- package/dist/project-outcomes.js +0 -6
- package/dist/project-sandbox.js +0 -23
- package/dist/project-skills.js +0 -12
- package/dist/project-tools.js +6 -184
- package/dist/project.js +0 -48
- package/dist/prompt.js +0 -31
- package/dist/proof.js +0 -220
- package/dist/proposal.js +0 -50
- package/dist/protected-storage-look.js +0 -6
- package/dist/protected-storage.js +1 -84
- package/dist/provider-auth.js +3 -69
- package/dist/provider-capture.js +1 -15
- package/dist/provider-connection.js +0 -8
- package/dist/provider-home.js +0 -25
- package/dist/provider-limits.js +0 -14
- package/dist/provider.js +0 -324
- package/dist/public-access.js +0 -34
- package/dist/public-check.js +0 -16
- package/dist/publish.js +1 -150
- package/dist/pull-request-flow.js +0 -77
- package/dist/pull-request-schema.js +0 -4
- package/dist/pull-request-ui.js +0 -5
- package/dist/pulls.js +0 -80
- package/dist/push.js +5 -89
- package/dist/quick-start.js +1 -23
- package/dist/read-executor-worker.js +0 -1
- package/dist/read-executor.js +0 -10
- package/dist/read-only-request.js +0 -7
- package/dist/recipe-ui.js +0 -6
- package/dist/recipes.js +0 -13
- package/dist/release-adapters.js +6 -214
- package/dist/release-approval.js +0 -74
- package/dist/release-authority.js +0 -42
- package/dist/release-auto.js +0 -142
- package/dist/release-card.js +0 -100
- package/dist/release-carry.js +0 -132
- package/dist/release-ci-hold.js +0 -20
- package/dist/release-cli.js +0 -46
- package/dist/release-coverage.js +0 -16
- package/dist/release-gate.js +0 -30
- package/dist/release-git.js +0 -24
- package/dist/release-links.js +0 -17
- package/dist/release-net.js +0 -42
- package/dist/release-next.js +0 -25
- package/dist/release-recheck.js +0 -89
- package/dist/release-refusal.js +0 -18
- package/dist/release-view.js +0 -5
- package/dist/release.js +7 -341
- package/dist/releases.js +0 -49
- package/dist/remote-audit.js +0 -25
- package/dist/remote-command.js +0 -16
- package/dist/remote-destination.js +5 -26
- package/dist/remote-exec.js +1 -27
- package/dist/remote-main.js +1 -53
- package/dist/remote-run.js +0 -5
- package/dist/remote.js +0 -49
- package/dist/render.js +0 -133
- package/dist/reply-shape.js +0 -85
- package/dist/reply-voice.js +0 -7
- package/dist/report-summary.js +0 -5
- package/dist/reported-usage.js +0 -30
- package/dist/repos.js +9 -62
- package/dist/repository-context.js +1 -24
- package/dist/request-budget-ui.js +0 -4
- package/dist/request-budget.js +0 -23
- package/dist/restart-certification.js +0 -37
- package/dist/result-actions.js +0 -62
- package/dist/result-acts.js +0 -34
- package/dist/result-completion.js +0 -25
- package/dist/result-evidence-readers.js +0 -3
- package/dist/result-follow-ups.js +1 -39
- package/dist/result-review.js +0 -86
- package/dist/result-shots.js +0 -39
- package/dist/retention-ui.js +0 -7
- package/dist/retention.js +2 -46
- package/dist/review-context.js +0 -129
- package/dist/review-evidence.js +0 -4
- package/dist/review-switch.js +1 -7
- package/dist/reviewer.js +0 -35
- package/dist/route-change-check.js +0 -2
- package/dist/route-change.js +0 -16
- package/dist/route-hooks.js +0 -27
- package/dist/route-results.js +2 -58
- package/dist/route-rules.js +1 -106
- package/dist/route-savings.js +0 -36
- package/dist/route-store.js +1 -133
- package/dist/run-closeout.js +2 -50
- package/dist/run-efficiency.js +2 -44
- package/dist/run-ending.js +0 -13
- package/dist/runner-process.js +0 -33
- package/dist/runner.js +17 -189
- package/dist/sample-project.js +2 -27
- package/dist/sandbox-launch.js +4 -25
- package/dist/sandbox-runtime.js +1 -88
- package/dist/scan.js +0 -27
- package/dist/scope.js +4 -567
- package/dist/scout-browser-lock.js +0 -6
- package/dist/scout-browser.js +2 -68
- package/dist/scout-net.js +1 -32
- package/dist/scout-report.js +0 -22
- package/dist/scout.js +1 -116
- package/dist/secret-mint.js +0 -6
- package/dist/serve.js +21 -555
- package/dist/server/agents-computers.js +0 -10
- package/dist/server/agents-live-filed.js +0 -13
- package/dist/server/agents-live-lead.js +0 -19
- package/dist/server/agents-live-room.js +0 -19
- package/dist/server/chat.js +2 -194
- package/dist/server/chrome.js +17 -263
- package/dist/server/console.css +4 -4
- package/dist/server/edge-refusal.js +0 -3
- package/dist/server/flows.js +5 -74
- package/dist/server/guards.js +1 -88
- package/dist/server/handler-registry.js +0 -2
- package/dist/server/home-asks.js +1 -22
- package/dist/server/home.js +1 -30
- package/dist/server/http.js +0 -82
- package/dist/server/in-place.js +0 -15
- package/dist/server/kit-standalone.js +0 -20
- package/dist/server/kit.js +2 -114
- package/dist/server/last-checks.js +0 -2
- package/dist/server/live.js +1 -36
- package/dist/server/merge-ready-view.js +0 -6
- package/dist/server/mutation-key.js +3 -40
- package/dist/server/pages-assets.js +0 -16
- package/dist/server/pages.js +7 -195
- package/dist/server/people-tokens.js +3 -101
- package/dist/server/remote-hooks.js +0 -13
- package/dist/server/remote.js +0 -28
- package/dist/server/render-chat.js +8 -144
- package/dist/server/render-code-map.js +0 -5
- package/dist/server/render-flaky.js +0 -8
- package/dist/server/render-follow-through.js +2 -5
- package/dist/server/render-history.js +2 -34
- package/dist/server/render-new-task.js +2 -29
- package/dist/server/render-pages.js +1 -111
- package/dist/server/render-people.js +2 -46
- package/dist/server/render-projects.js +15 -32
- package/dist/server/render-release.js +1 -14
- package/dist/server/render-results.js +4 -355
- package/dist/server/render-settings.js +0 -15
- package/dist/server/render-tasks.js +13 -493
- package/dist/server/request-context.js +2 -9
- package/dist/server/retired-routes.js +0 -11
- package/dist/server/route-policy.js +0 -3
- package/dist/server/route-table.js +6 -135
- package/dist/server/runtime.js +0 -1
- package/dist/server/session.js +0 -28
- package/dist/server/settings.js +40 -246
- package/dist/server/signup-gate.js +0 -11
- package/dist/server/sweeps.js +0 -6
- package/dist/server/task-views.js +9 -227
- package/dist/server/tasks.js +5 -539
- package/dist/server/terminals.js +2 -46
- package/dist/server/welcome.js +2 -22
- package/dist/server-telemetry.js +0 -9
- package/dist/settings-groups-ui.js +50 -63
- package/dist/settings-kit-script.js +0 -19
- package/dist/settings-kit.js +0 -63
- package/dist/settings-proofs.js +0 -23
- package/dist/setup-guide.js +1 -9
- package/dist/shared-deps.js +9 -84
- package/dist/sign-in-guard.js +0 -27
- package/dist/skills-ui.js +0 -2
- package/dist/skills.js +2 -54
- package/dist/slack-api.js +0 -3
- package/dist/slack-chat.js +0 -25
- package/dist/slack-settings.js +0 -1
- package/dist/slack-socket.js +0 -5
- package/dist/slack.js +0 -4
- package/dist/sleep.js +0 -1
- package/dist/source-key.js +0 -10
- package/dist/spend-report.js +0 -29
- package/dist/spend-ui.js +0 -26
- package/dist/spend.js +0 -40
- package/dist/sqlite-runtime.js +0 -2
- package/dist/sqlite-telemetry.js +0 -9
- package/dist/sso-settings.js +0 -13
- package/dist/sso-ui.js +0 -2
- package/dist/staged-runtimes.js +5 -39
- package/dist/steer-capabilities.js +1 -7
- package/dist/steer-controls.js +0 -10
- package/dist/steer-live.js +0 -31
- package/dist/steer-mailbox.js +4 -65
- package/dist/steer-status.js +0 -7
- package/dist/stop-proof.js +5 -62
- package/dist/storage-sweep-child.js +1 -5
- package/dist/storage-sweep-process.js +2 -20
- package/dist/storage-sweep-schedule.js +0 -32
- package/dist/storage-sweep.js +2 -51
- package/dist/storage-ui.js +0 -18
- package/dist/storage.js +0 -31
- package/dist/store-baseline.js +0 -14
- package/dist/store.js +109 -4763
- package/dist/stream-scope.js +0 -16
- package/dist/structured-output.js +0 -39
- package/dist/style-asset.js +0 -2
- package/dist/subagent-admin.js +0 -9
- package/dist/subagent-desk.js +0 -29
- package/dist/subagent-memory.js +0 -38
- package/dist/subagent-question.js +0 -29
- package/dist/subagent-tools.js +1 -60
- package/dist/subagent-week.js +0 -28
- package/dist/subagent-work.js +1 -39
- package/dist/subagents-ui.js +1 -13
- package/dist/subagents.js +0 -40
- package/dist/subscription-chat.js +1 -42
- package/dist/summary.js +0 -19
- package/dist/surface.js +0 -75
- package/dist/sweep-gate.js +0 -2
- package/dist/sweep-quarantine.js +2 -13
- package/dist/sync.js +0 -47
- package/dist/tailnet.js +0 -9
- package/dist/tamper-scan.js +0 -15
- package/dist/task-activity.js +1 -16
- package/dist/task-aliases.js +0 -3
- package/dist/task-archive.js +0 -7
- package/dist/task-base.js +0 -18
- package/dist/task-composer.js +0 -2
- package/dist/task-control.js +0 -74
- package/dist/task-live.js +0 -23
- package/dist/task-moves.js +0 -28
- package/dist/task-outcome-cli.js +17 -28
- package/dist/task-review-brief.js +0 -7
- package/dist/task-sizing.js +0 -47
- package/dist/task-source.js +0 -23
- package/dist/task-status.js +0 -106
- package/dist/task-text.js +0 -12
- package/dist/team-chat-authorization.js +0 -3
- package/dist/team-contract.js +0 -2
- package/dist/team-http.js +0 -4
- package/dist/team-leads.js +1 -16
- package/dist/team-runtime.js +0 -13
- package/dist/team-ui.js +0 -1
- package/dist/team-updates.js +0 -4
- package/dist/teams-api.js +0 -12
- package/dist/teams-chat.js +0 -28
- package/dist/teams.js +0 -12
- package/dist/teardown-git.js +6 -294
- package/dist/telegram-flow.js +0 -51
- package/dist/telegram-lead.js +2 -203
- package/dist/telegram-live.js +1 -42
- package/dist/telegram-progress.js +0 -18
- package/dist/telegram-settings.js +0 -7
- package/dist/telegram-status.js +0 -46
- package/dist/telegram-team.js +1 -33
- package/dist/telegram.js +6 -454
- package/dist/templates.js +0 -24
- package/dist/terminal-catalog.js +2 -20
- package/dist/terminal-text.js +0 -12
- package/dist/test-infra.js +0 -50
- package/dist/test-temp.js +3 -26
- package/dist/text-limits.js +0 -92
- package/dist/tidy.js +0 -76
- package/dist/tier-report.js +0 -2
- package/dist/token-notices.js +1 -9
- package/dist/tokens-cli.js +0 -13
- package/dist/tool-broker.js +2 -53
- package/dist/tool-launcher.js +0 -14
- package/dist/tool-secret-store.js +3 -125
- package/dist/toolroll-update-cli.js +0 -9
- package/dist/toolroll-update-ui.js +0 -14
- package/dist/toolroll-update.js +13 -252
- package/dist/tools-ui.js +0 -17
- package/dist/transitions-recipes.js +0 -2
- package/dist/tree-proof.js +0 -23
- package/dist/tui-contract.js +0 -8
- package/dist/tui-source.js +16 -36
- package/dist/tui.js +1 -1
- package/dist/typed-start.js +0 -27
- package/dist/unfenced-test-support.js +0 -5
- package/dist/up-processes.js +1 -40
- package/dist/up-role-child.js +1 -13
- package/dist/update-notice.js +0 -1
- package/dist/vanished-retry.js +0 -40
- package/dist/verification-evidence.js +0 -39
- package/dist/version.js +0 -1
- package/dist/wake-hub.js +0 -28
- package/dist/webhook-limits.js +0 -7
- package/dist/webhook-readers.js +0 -30
- package/dist/webhook-signing.js +0 -14
- package/dist/webhooks.js +0 -54
- package/dist/welcome-facts.js +2 -14
- package/dist/when-html.js +0 -27
- package/dist/work-index.js +26 -98
- package/dist/work-summary.js +2 -17
- package/dist/workspace-motion.js +0 -2
- package/dist/workspace-revision.js +1 -21
- package/dist/workspace-ui.js +15 -135
- package/dist/worktree-notices.js +0 -3
- package/dist/worktree.js +0 -308
- package/dist/writes-mode.js +0 -1
- package/dist/youiyoux-intake.js +4 -159
- package/package.json +4 -3
- package/dist/accent-colors.d.ts +0 -51
- package/dist/acp-agents.d.ts +0 -43
- package/dist/acp-attest.d.ts +0 -44
- package/dist/acp-check.d.ts +0 -37
- package/dist/acp-client.d.ts +0 -163
- package/dist/acp-inspect.d.ts +0 -23
- package/dist/action-ledger.d.ts +0 -27
- package/dist/activity-line.d.ts +0 -29
- package/dist/actor.d.ts +0 -11
- package/dist/agent-board.d.ts +0 -229
- package/dist/agent-fence.d.ts +0 -479
- package/dist/agent-onboard.d.ts +0 -158
- package/dist/agent-pulse.d.ts +0 -43
- package/dist/agent-state-words.d.ts +0 -19
- package/dist/agent-state.d.ts +0 -65
- package/dist/agent-turns.d.ts +0 -52
- package/dist/agentconfig.d.ts +0 -191
- package/dist/agents-board.d.ts +0 -145
- package/dist/agents-live.d.ts +0 -31
- package/dist/api-tokens.d.ts +0 -80
- package/dist/approval-authority.d.ts +0 -51
- package/dist/approval-password.d.ts +0 -31
- package/dist/approval-policy.d.ts +0 -69
- package/dist/approval-rules-ui.d.ts +0 -40
- package/dist/assignment-adapters.d.ts +0 -152
- package/dist/assignment-brief.d.ts +0 -83
- package/dist/assignment-delivery.d.ts +0 -86
- package/dist/assignment-presentation.d.ts +0 -37
- package/dist/assignment-status.d.ts +0 -71
- package/dist/assignment-ui.d.ts +0 -68
- package/dist/assignment.d.ts +0 -350
- package/dist/attest.d.ts +0 -59
- package/dist/audit-cli.d.ts +0 -17
- package/dist/backend.d.ts +0 -97
- package/dist/backup-ui.d.ts +0 -32
- package/dist/backup.d.ts +0 -92
- package/dist/batch-checks.d.ts +0 -15
- package/dist/batch-policy.d.ts +0 -23
- package/dist/beads.d.ts +0 -34
- package/dist/bin.d.ts +0 -2
- package/dist/board.d.ts +0 -134
- package/dist/boot-identity.d.ts +0 -64
- package/dist/bounded-spawn.d.ts +0 -57
- package/dist/brand-icons.d.ts +0 -168
- package/dist/brand-mark.d.ts +0 -28
- package/dist/brief-fence.d.ts +0 -9
- package/dist/browser-crew.d.ts +0 -12
- package/dist/browser-shell.d.ts +0 -9
- package/dist/browser-workspace.d.ts +0 -1985
- package/dist/budget-alerts.d.ts +0 -19
- package/dist/build-review.d.ts +0 -38
- package/dist/builder-restart.d.ts +0 -21
- package/dist/builder.d.ts +0 -409
- package/dist/canonical-json.d.ts +0 -14
- package/dist/capscan.d.ts +0 -35
- package/dist/card-catalog.d.ts +0 -209
- package/dist/card-cli.d.ts +0 -43
- package/dist/card-render.d.ts +0 -43
- package/dist/card-sources.d.ts +0 -68
- package/dist/chat-acceptance.d.ts +0 -74
- package/dist/chat-actions.d.ts +0 -460
- package/dist/chat-admission.d.ts +0 -19
- package/dist/chat-approval.d.ts +0 -58
- package/dist/chat-ask.d.ts +0 -32
- package/dist/chat-card-part.d.ts +0 -11
- package/dist/chat-card.d.ts +0 -46
- package/dist/chat-channel.d.ts +0 -126
- package/dist/chat-continuity.d.ts +0 -32
- package/dist/chat-controls.d.ts +0 -117
- package/dist/chat-core.d.ts +0 -177
- package/dist/chat-decide.d.ts +0 -269
- package/dist/chat-delivery-state.d.ts +0 -132
- package/dist/chat-delivery.d.ts +0 -71
- package/dist/chat-display.d.ts +0 -1
- package/dist/chat-evidence.d.ts +0 -123
- package/dist/chat-flow.d.ts +0 -70
- package/dist/chat-follow.d.ts +0 -20
- package/dist/chat-inbox.d.ts +0 -57
- package/dist/chat-live-schema.d.ts +0 -17
- package/dist/chat-live.d.ts +0 -161
- package/dist/chat-message-states.d.ts +0 -75
- package/dist/chat-messages.d.ts +0 -338
- package/dist/chat-migration.d.ts +0 -30
- package/dist/chat-polish.d.ts +0 -17
- package/dist/chat-quiet.d.ts +0 -40
- package/dist/chat-review.d.ts +0 -51
- package/dist/chat-rooms.d.ts +0 -123
- package/dist/chat-settings-page.d.ts +0 -43
- package/dist/chat-task-actions.d.ts +0 -59
- package/dist/chat-terms.d.ts +0 -29
- package/dist/chat-voice.d.ts +0 -69
- package/dist/chat-warmth.d.ts +0 -21
- package/dist/check-access.d.ts +0 -54
- package/dist/check-facts.d.ts +0 -126
- package/dist/check-failure.d.ts +0 -113
- package/dist/check-levels-ui.d.ts +0 -36
- package/dist/check-levels.d.ts +0 -70
- package/dist/check-load.d.ts +0 -85
- package/dist/check-only-standing.d.ts +0 -36
- package/dist/check-only.d.ts +0 -15
- package/dist/check-progress.d.ts +0 -78
- package/dist/check-repair.d.ts +0 -47
- package/dist/check-report.d.ts +0 -177
- package/dist/check-stamp.d.ts +0 -46
- package/dist/checkout-cleanup.d.ts +0 -157
- package/dist/checkout-proof.d.ts +0 -28
- package/dist/child-database.d.ts +0 -12
- package/dist/claim.d.ts +0 -627
- package/dist/claude-print.d.ts +0 -12
- package/dist/cli-fast.d.ts +0 -8
- package/dist/cli-help.d.ts +0 -8
- package/dist/cli-http.d.ts +0 -58
- package/dist/cli.d.ts +0 -149
- package/dist/code-extract.d.ts +0 -44
- package/dist/code-map-acts.d.ts +0 -24
- package/dist/code-map-admission.d.ts +0 -52
- package/dist/code-map-build.d.ts +0 -63
- package/dist/code-map-cli.d.ts +0 -153
- package/dist/code-map-main.d.ts +0 -1
- package/dist/code-map-read.d.ts +0 -106
- package/dist/code-map-report.d.ts +0 -37
- package/dist/code-map-shape.d.ts +0 -172
- package/dist/code-map-store.d.ts +0 -136
- package/dist/codex-limits.d.ts +0 -15
- package/dist/coding-context.d.ts +0 -18
- package/dist/coding-handoff.d.ts +0 -39
- package/dist/coding-provider.d.ts +0 -88
- package/dist/coding-shipping-ui.d.ts +0 -5
- package/dist/coding-types.d.ts +0 -16
- package/dist/coding-ui.d.ts +0 -19
- package/dist/coding-update.d.ts +0 -28
- package/dist/coding-workspace.d.ts +0 -141
- package/dist/commit-extract.d.ts +0 -135
- package/dist/connect-cli.d.ts +0 -34
- package/dist/console-chrome.d.ts +0 -41
- package/dist/console-instance.d.ts +0 -157
- package/dist/container-state.d.ts +0 -5
- package/dist/containment.d.ts +0 -205
- package/dist/contract-changes.d.ts +0 -52
- package/dist/contracts/acceptance-terms.d.ts +0 -14
- package/dist/contracts/chat-actions.d.ts +0 -465
- package/dist/contracts/chat-callback-rows.d.ts +0 -59
- package/dist/contracts/chat-card.d.ts +0 -91
- package/dist/contracts/chat-content.d.ts +0 -551
- package/dist/contracts/chat-tables.d.ts +0 -12
- package/dist/contracts/cli.d.ts +0 -987
- package/dist/contracts/coding-activity.d.ts +0 -64
- package/dist/contracts/coding-context.d.ts +0 -97
- package/dist/contracts/coding-handoff.d.ts +0 -44
- package/dist/contracts/coding-workspace.d.ts +0 -165
- package/dist/contracts/console-api.d.ts +0 -540
- package/dist/contracts/contract-test.d.ts +0 -45
- package/dist/contracts/contract.d.ts +0 -92
- package/dist/contracts/decision.d.ts +0 -45
- package/dist/contracts/diff-stat.d.ts +0 -58
- package/dist/contracts/discord-callback.d.ts +0 -45
- package/dist/contracts/flow-card.d.ts +0 -53
- package/dist/contracts/flow-propose.d.ts +0 -334
- package/dist/contracts/flow-send.d.ts +0 -245
- package/dist/contracts/flow.d.ts +0 -19565
- package/dist/contracts/gateway-tools.d.ts +0 -472
- package/dist/contracts/handoff.d.ts +0 -91
- package/dist/contracts/health.d.ts +0 -82
- package/dist/contracts/integration-metadata.d.ts +0 -100
- package/dist/contracts/lead-context.d.ts +0 -165
- package/dist/contracts/lead-tools.d.ts +0 -2312
- package/dist/contracts/mcp-oauth.d.ts +0 -53
- package/dist/contracts/memory-pass.d.ts +0 -157
- package/dist/contracts/model-catalog.d.ts +0 -21
- package/dist/contracts/observation-request.d.ts +0 -37
- package/dist/contracts/plan.d.ts +0 -58
- package/dist/contracts/project-knowledge.d.ts +0 -159
- package/dist/contracts/project-memory.d.ts +0 -119
- package/dist/contracts/project-skills.d.ts +0 -120
- package/dist/contracts/proof.d.ts +0 -136
- package/dist/contracts/provider.d.ts +0 -40
- package/dist/contracts/recipes.d.ts +0 -166
- package/dist/contracts/release-check.d.ts +0 -371
- package/dist/contracts/release-terms.d.ts +0 -107
- package/dist/contracts/retention.d.ts +0 -42
- package/dist/contracts/review-findings.d.ts +0 -46
- package/dist/contracts/route-results.d.ts +0 -121
- package/dist/contracts/route.d.ts +0 -897
- package/dist/contracts/scope.d.ts +0 -105
- package/dist/contracts/scout-report.d.ts +0 -234
- package/dist/contracts/slack-callback.d.ts +0 -43
- package/dist/contracts/sort-answer.d.ts +0 -83
- package/dist/contracts/stage-output.d.ts +0 -127
- package/dist/contracts/storage.d.ts +0 -37
- package/dist/contracts/store-json.d.ts +0 -313
- package/dist/contracts/subagent-turn.d.ts +0 -43
- package/dist/contracts/task-sizing.d.ts +0 -24
- package/dist/contracts/teams-callback.d.ts +0 -13
- package/dist/contracts/telegram-callback.d.ts +0 -120
- package/dist/contracts/trigger-payloads.d.ts +0 -389
- package/dist/contracts/update-journal.d.ts +0 -254
- package/dist/contracts/verification-receipt.d.ts +0 -200
- package/dist/contracts/verification-view.d.ts +0 -102
- package/dist/contracts/youiyoux-request.d.ts +0 -248
- package/dist/control-setup.d.ts +0 -44
- package/dist/control-ui.d.ts +0 -37
- package/dist/controller-service.d.ts +0 -1
- package/dist/controller-supervisor.d.ts +0 -38
- package/dist/converse.d.ts +0 -316
- package/dist/coordinator-proposals.d.ts +0 -29
- package/dist/coordinator.d.ts +0 -186
- package/dist/credentials-ui.d.ts +0 -33
- package/dist/daemon.d.ts +0 -226
- package/dist/database-reclaim.d.ts +0 -4
- package/dist/decision.d.ts +0 -119
- package/dist/demo-chat.d.ts +0 -32
- package/dist/demo.d.ts +0 -153
- package/dist/deploy-gate.d.ts +0 -20
- package/dist/deploy-lock.d.ts +0 -8
- package/dist/deploy-phase.d.ts +0 -37
- package/dist/deploy-rescue.d.ts +0 -42
- package/dist/deprecations.d.ts +0 -20
- package/dist/design/kit.d.ts +0 -216
- package/dist/desktop-access.d.ts +0 -28
- package/dist/desktop-bundle.d.ts +0 -16
- package/dist/desktop-host.d.ts +0 -54
- package/dist/desktop-update-gate.d.ts +0 -12
- package/dist/desktop-update-recovery.d.ts +0 -14
- package/dist/desktop-update.d.ts +0 -147
- package/dist/digest-times.d.ts +0 -3
- package/dist/disclosure.d.ts +0 -6
- package/dist/discord-api.d.ts +0 -24
- package/dist/discord-chat.d.ts +0 -27
- package/dist/discord-settings.d.ts +0 -4
- package/dist/discord.d.ts +0 -10
- package/dist/discover.d.ts +0 -75
- package/dist/dispatch.d.ts +0 -123
- package/dist/dispose.d.ts +0 -194
- package/dist/doctor.d.ts +0 -67
- package/dist/easy-start-args.d.ts +0 -13
- package/dist/easy-start.d.ts +0 -77
- package/dist/egress.d.ts +0 -121
- package/dist/email-settings.d.ts +0 -34
- package/dist/envelope.d.ts +0 -47
- package/dist/eval-gate.d.ts +0 -51
- package/dist/eval-hooks.d.ts +0 -94
- package/dist/eval-oracle-main.d.ts +0 -1
- package/dist/eval-oracle.d.ts +0 -60
- package/dist/eval-world.d.ts +0 -17
- package/dist/evals.d.ts +0 -299
- package/dist/evidence-pack.d.ts +0 -186
- package/dist/evidence-pair.d.ts +0 -53
- package/dist/evidence.d.ts +0 -371
- package/dist/exec.d.ts +0 -355
- package/dist/exhaustion.d.ts +0 -58
- package/dist/export-ui.d.ts +0 -11
- package/dist/export.d.ts +0 -48
- package/dist/failing-first.d.ts +0 -31
- package/dist/fallback-schema.d.ts +0 -8
- package/dist/fallback.d.ts +0 -138
- package/dist/fast-start.d.ts +0 -213
- package/dist/fast-terms.d.ts +0 -9
- package/dist/fenced-check-coverage.d.ts +0 -62
- package/dist/findings.d.ts +0 -224
- package/dist/first-run.d.ts +0 -197
- package/dist/first-tasks-child.d.ts +0 -1
- package/dist/flaky-ci.d.ts +0 -31
- package/dist/flaky-cli.d.ts +0 -60
- package/dist/flaky.d.ts +0 -83
- package/dist/fleet-schema.d.ts +0 -17
- package/dist/flow-actions.d.ts +0 -79
- package/dist/flow-browser.d.ts +0 -103
- package/dist/flow-cadence.d.ts +0 -48
- package/dist/flow-card-task.d.ts +0 -11
- package/dist/flow-changed.d.ts +0 -14
- package/dist/flow-code.d.ts +0 -84
- package/dist/flow-draft.d.ts +0 -42
- package/dist/flow-engine.d.ts +0 -82
- package/dist/flow-gallery-ui.d.ts +0 -73
- package/dist/flow-gallery.d.ts +0 -147
- package/dist/flow-insights.d.ts +0 -104
- package/dist/flow-items.d.ts +0 -37
- package/dist/flow-live.d.ts +0 -16
- package/dist/flow-people.d.ts +0 -23
- package/dist/flow-pull-request.d.ts +0 -14
- package/dist/flow-replies.d.ts +0 -48
- package/dist/flow-result-card.d.ts +0 -22
- package/dist/flow-schedule.d.ts +0 -154
- package/dist/flow-scripts.d.ts +0 -31
- package/dist/flow-secrets.d.ts +0 -13
- package/dist/flow-send.d.ts +0 -54
- package/dist/flow-share.d.ts +0 -78
- package/dist/flow-sort.d.ts +0 -63
- package/dist/flow-starters-ui.d.ts +0 -15
- package/dist/flow-starters.d.ts +0 -63
- package/dist/flow-steps.d.ts +0 -52
- package/dist/flow-triggers.d.ts +0 -303
- package/dist/flow-unattended-words.d.ts +0 -48
- package/dist/flow-unattended.d.ts +0 -259
- package/dist/flows-cli.d.ts +0 -358
- package/dist/flows-ui.d.ts +0 -70
- package/dist/flows.d.ts +0 -136
- package/dist/folder-gate.d.ts +0 -32
- package/dist/folder-look.d.ts +0 -110
- package/dist/follow-through-brief.d.ts +0 -12
- package/dist/follow-through-cli.d.ts +0 -23
- package/dist/fonts.d.ts +0 -19
- package/dist/gaps.d.ts +0 -35
- package/dist/gate-failure.d.ts +0 -40
- package/dist/git-floor.d.ts +0 -16
- package/dist/git-incident.d.ts +0 -65
- package/dist/git-views.d.ts +0 -20
- package/dist/git.d.ts +0 -54
- package/dist/github-import.d.ts +0 -62
- package/dist/github-jobs.d.ts +0 -25
- package/dist/google-mail.d.ts +0 -59
- package/dist/grant.d.ts +0 -136
- package/dist/graph.d.ts +0 -164
- package/dist/guides.d.ts +0 -22
- package/dist/handover-note.d.ts +0 -33
- package/dist/health-cli.d.ts +0 -3
- package/dist/home-groups.d.ts +0 -39
- package/dist/html.d.ts +0 -85
- package/dist/install-method.d.ts +0 -17
- package/dist/integrations-ui.d.ts +0 -17
- package/dist/integrations.d.ts +0 -138
- package/dist/invoke.d.ts +0 -228
- package/dist/is-record.d.ts +0 -2
- package/dist/issues.d.ts +0 -41
- package/dist/jsonl-discriminants.d.ts +0 -11
- package/dist/keymap.d.ts +0 -43
- package/dist/keys.d.ts +0 -108
- package/dist/kits-ui.d.ts +0 -16
- package/dist/kits.d.ts +0 -88
- package/dist/knowledge-cli.d.ts +0 -132
- package/dist/knowledge-ui.d.ts +0 -45
- package/dist/landed-cleanup.d.ts +0 -175
- package/dist/laptop-background.d.ts +0 -187
- package/dist/laptop-service.d.ts +0 -111
- package/dist/latency-timeline.d.ts +0 -46
- package/dist/lead-about.d.ts +0 -35
- package/dist/lead-answer-eval.d.ts +0 -93
- package/dist/lead-capabilities.d.ts +0 -57
- package/dist/lead-cli-live.d.ts +0 -56
- package/dist/lead-cli.d.ts +0 -58
- package/dist/lead-commitments.d.ts +0 -84
- package/dist/lead-context.d.ts +0 -45
- package/dist/lead-contract.d.ts +0 -10
- package/dist/lead-doors.d.ts +0 -122
- package/dist/lead-follow.d.ts +0 -26
- package/dist/lead-identity.d.ts +0 -23
- package/dist/lead-latency-schema.d.ts +0 -24
- package/dist/lead-people.d.ts +0 -55
- package/dist/lead-progress.d.ts +0 -67
- package/dist/lead-queue-runtime.d.ts +0 -46
- package/dist/lead-queue.d.ts +0 -104
- package/dist/lead-route.d.ts +0 -56
- package/dist/lead-status.d.ts +0 -116
- package/dist/lead-sweep.d.ts +0 -67
- package/dist/lead-tools.d.ts +0 -167
- package/dist/lead-voice.d.ts +0 -85
- package/dist/lead.d.ts +0 -142
- package/dist/learning-child.d.ts +0 -1
- package/dist/learning-look.d.ts +0 -25
- package/dist/ledger-chain.d.ts +0 -46
- package/dist/ledger-csv.d.ts +0 -4
- package/dist/ledger-view.d.ts +0 -27
- package/dist/lesson-notes.d.ts +0 -81
- package/dist/limits-ui.d.ts +0 -34
- package/dist/link.d.ts +0 -72
- package/dist/live-backup.d.ts +0 -39
- package/dist/live-bus.d.ts +0 -141
- package/dist/live-children-read.d.ts +0 -52
- package/dist/live-children.d.ts +0 -73
- package/dist/live-detail.d.ts +0 -27
- package/dist/live-input.d.ts +0 -68
- package/dist/live-main-read.d.ts +0 -19
- package/dist/live-notes.d.ts +0 -20
- package/dist/live-open.d.ts +0 -28
- package/dist/live-records.d.ts +0 -149
- package/dist/live-reply.d.ts +0 -83
- package/dist/live-terminal.d.ts +0 -273
- package/dist/live.d.ts +0 -152
- package/dist/local-owner-acts.d.ts +0 -83
- package/dist/local-owner.d.ts +0 -135
- package/dist/log.d.ts +0 -7
- package/dist/login-secrets.d.ts +0 -60
- package/dist/machine-check.d.ts +0 -16
- package/dist/machine-identity.d.ts +0 -75
- package/dist/mailbox.d.ts +0 -57
- package/dist/maintenance.d.ts +0 -13
- package/dist/mcp-connect.d.ts +0 -181
- package/dist/mcp-core.d.ts +0 -110
- package/dist/mcp-http.d.ts +0 -32
- package/dist/mcp-oauth.d.ts +0 -92
- package/dist/mcp-person.d.ts +0 -22
- package/dist/mcp.d.ts +0 -20
- package/dist/memory-cli.d.ts +0 -768
- package/dist/memory-pass.d.ts +0 -151
- package/dist/memory-tidy.d.ts +0 -181
- package/dist/memory-use.d.ts +0 -35
- package/dist/merge-checklist.d.ts +0 -55
- package/dist/metrics.d.ts +0 -6
- package/dist/mobile-viewport.d.ts +0 -7
- package/dist/model-catalog.d.ts +0 -123
- package/dist/model-choices.d.ts +0 -235
- package/dist/model-names.d.ts +0 -6
- package/dist/models-cli.d.ts +0 -307
- package/dist/models-ui.d.ts +0 -161
- package/dist/modes.d.ts +0 -99
- package/dist/monitoring-settings.d.ts +0 -44
- package/dist/monitoring-ui.d.ts +0 -23
- package/dist/monitoring.d.ts +0 -34
- package/dist/names.d.ts +0 -67
- package/dist/needs-you.d.ts +0 -164
- package/dist/never-index.d.ts +0 -3
- package/dist/nightly-check.d.ts +0 -107
- package/dist/nightly-github.d.ts +0 -318
- package/dist/notification-delivery.d.ts +0 -19
- package/dist/notification-rows.d.ts +0 -30
- package/dist/oauth-run-token.d.ts +0 -51
- package/dist/observations.d.ts +0 -36
- package/dist/oidc.d.ts +0 -71
- package/dist/onboard.d.ts +0 -108
- package/dist/one-step-chat-schema.d.ts +0 -22
- package/dist/openrouter-models.d.ts +0 -34
- package/dist/operate-remote-arguments.d.ts +0 -36
- package/dist/operate-remote.d.ts +0 -98
- package/dist/operate.d.ts +0 -401
- package/dist/orphan-sweep.d.ts +0 -65
- package/dist/page-work-contract.d.ts +0 -21
- package/dist/password-bearer.d.ts +0 -25
- package/dist/passwordless.d.ts +0 -23
- package/dist/peek-cli.d.ts +0 -112
- package/dist/peek.d.ts +0 -110
- package/dist/people-audit-ui.d.ts +0 -16
- package/dist/person-proof.d.ts +0 -2
- package/dist/phase-routing.d.ts +0 -401
- package/dist/plain-schema.d.ts +0 -23
- package/dist/plain-words.d.ts +0 -20
- package/dist/plan-auto.d.ts +0 -25
- package/dist/plan-login.d.ts +0 -14
- package/dist/plan.d.ts +0 -188
- package/dist/plane-review.d.ts +0 -54
- package/dist/planner-source.d.ts +0 -225
- package/dist/planner.d.ts +0 -76
- package/dist/policy-ui.d.ts +0 -22
- package/dist/policy.d.ts +0 -92
- package/dist/prepared-evidence.d.ts +0 -17
- package/dist/principal.d.ts +0 -42
- package/dist/probe.d.ts +0 -46
- package/dist/process-custody.d.ts +0 -17
- package/dist/process-liveness.d.ts +0 -13
- package/dist/process-tree.d.ts +0 -39
- package/dist/project-access.d.ts +0 -17
- package/dist/project-activity.d.ts +0 -20
- package/dist/project-admission.d.ts +0 -105
- package/dist/project-cli.d.ts +0 -19
- package/dist/project-concurrency.d.ts +0 -62
- package/dist/project-delete-ui.d.ts +0 -96
- package/dist/project-delete.d.ts +0 -59
- package/dist/project-demo.d.ts +0 -12
- package/dist/project-file.d.ts +0 -3
- package/dist/project-identity.d.ts +0 -52
- package/dist/project-knowledge.d.ts +0 -124
- package/dist/project-learning.d.ts +0 -120
- package/dist/project-memory.d.ts +0 -70
- package/dist/project-outcomes.d.ts +0 -119
- package/dist/project-sandbox.d.ts +0 -59
- package/dist/project-skills.d.ts +0 -139
- package/dist/project-tools.d.ts +0 -318
- package/dist/project.d.ts +0 -65
- package/dist/prompt.d.ts +0 -33
- package/dist/proof.d.ts +0 -457
- package/dist/proposal.d.ts +0 -70
- package/dist/protected-storage-look.d.ts +0 -1
- package/dist/protected-storage.d.ts +0 -98
- package/dist/provider-auth.d.ts +0 -143
- package/dist/provider-capture.d.ts +0 -34
- package/dist/provider-connection.d.ts +0 -23
- package/dist/provider-home.d.ts +0 -22
- package/dist/provider-limits.d.ts +0 -37
- package/dist/provider.d.ts +0 -369
- package/dist/public-access.d.ts +0 -61
- package/dist/public-check.d.ts +0 -37
- package/dist/publish.d.ts +0 -146
- package/dist/pull-request-flow.d.ts +0 -189
- package/dist/pull-request-schema.d.ts +0 -5
- package/dist/pull-request-ui.d.ts +0 -25
- package/dist/pulls.d.ts +0 -121
- package/dist/push.d.ts +0 -120
- package/dist/quality.d.ts +0 -8
- package/dist/quick-start.d.ts +0 -26
- package/dist/read-executor-worker.d.ts +0 -1
- package/dist/read-executor.d.ts +0 -66
- package/dist/read-only-request.d.ts +0 -4
- package/dist/recipe-ui.d.ts +0 -21
- package/dist/recipes.d.ts +0 -56
- package/dist/release-adapters.d.ts +0 -205
- package/dist/release-approval.d.ts +0 -180
- package/dist/release-authority.d.ts +0 -173
- package/dist/release-auto.d.ts +0 -184
- package/dist/release-card.d.ts +0 -170
- package/dist/release-carry.d.ts +0 -261
- package/dist/release-ci-hold.d.ts +0 -41
- package/dist/release-cli.d.ts +0 -34
- package/dist/release-coverage.d.ts +0 -16
- package/dist/release-gate.d.ts +0 -84
- package/dist/release-git.d.ts +0 -43
- package/dist/release-links.d.ts +0 -29
- package/dist/release-net.d.ts +0 -90
- package/dist/release-next.d.ts +0 -48
- package/dist/release-recheck.d.ts +0 -146
- package/dist/release-refusal.d.ts +0 -32
- package/dist/release-view.d.ts +0 -37
- package/dist/release.d.ts +0 -806
- package/dist/releases.d.ts +0 -94
- package/dist/remote-audit.d.ts +0 -79
- package/dist/remote-command.d.ts +0 -45
- package/dist/remote-destination.d.ts +0 -36
- package/dist/remote-exec.d.ts +0 -38
- package/dist/remote-main.d.ts +0 -111
- package/dist/remote-run.d.ts +0 -20
- package/dist/remote.d.ts +0 -67
- package/dist/render.d.ts +0 -64
- package/dist/reply-shape.d.ts +0 -106
- package/dist/reply-voice.d.ts +0 -23
- package/dist/report-summary.d.ts +0 -22
- package/dist/reported-usage.d.ts +0 -69
- package/dist/repos.d.ts +0 -67
- package/dist/repository-context-ui.d.ts +0 -3
- package/dist/repository-context.d.ts +0 -66
- package/dist/request-budget-ui.d.ts +0 -14
- package/dist/request-budget.d.ts +0 -127
- package/dist/restart-certification.d.ts +0 -133
- package/dist/result-actions.d.ts +0 -36
- package/dist/result-acts.d.ts +0 -112
- package/dist/result-completion.d.ts +0 -39
- package/dist/result-evidence-readers.d.ts +0 -42
- package/dist/result-follow-ups.d.ts +0 -118
- package/dist/result-review.d.ts +0 -220
- package/dist/result-shots.d.ts +0 -59
- package/dist/retention-ui.d.ts +0 -21
- package/dist/retention.d.ts +0 -77
- package/dist/review-context.d.ts +0 -245
- package/dist/review-evidence.d.ts +0 -33
- package/dist/review-switch.d.ts +0 -36
- package/dist/reviewer.d.ts +0 -99
- package/dist/route-change-check.d.ts +0 -4
- package/dist/route-change.d.ts +0 -22
- package/dist/route-hooks.d.ts +0 -54
- package/dist/route-results.d.ts +0 -75
- package/dist/route-rules.d.ts +0 -324
- package/dist/route-savings.d.ts +0 -136
- package/dist/route-store.d.ts +0 -300
- package/dist/run-closeout.d.ts +0 -89
- package/dist/run-efficiency.d.ts +0 -74
- package/dist/run-ending.d.ts +0 -21
- package/dist/runner-process.d.ts +0 -76
- package/dist/runner.d.ts +0 -324
- package/dist/sample-project.d.ts +0 -31
- package/dist/sandbox-launch.d.ts +0 -1
- package/dist/sandbox-runtime.d.ts +0 -128
- package/dist/scan.d.ts +0 -32
- package/dist/scope.d.ts +0 -1098
- package/dist/scout-browser-lock.d.ts +0 -69
- package/dist/scout-browser.d.ts +0 -107
- package/dist/scout-net.d.ts +0 -25
- package/dist/scout-report.d.ts +0 -23
- package/dist/scout.d.ts +0 -142
- package/dist/secret-mint.d.ts +0 -1
- package/dist/serve.d.ts +0 -11
- package/dist/server/agents-computers.d.ts +0 -9
- package/dist/server/agents-live-filed.d.ts +0 -17
- package/dist/server/agents-live-lead.d.ts +0 -47
- package/dist/server/agents-live-room.d.ts +0 -23
- package/dist/server/chat.d.ts +0 -39
- package/dist/server/chrome.d.ts +0 -328
- package/dist/server/edge-refusal.d.ts +0 -7
- package/dist/server/flows.d.ts +0 -8
- package/dist/server/guards.d.ts +0 -81
- package/dist/server/handler-context.d.ts +0 -22
- package/dist/server/handler-registry.d.ts +0 -23
- package/dist/server/home-asks.d.ts +0 -45
- package/dist/server/home.d.ts +0 -65
- package/dist/server/http.d.ts +0 -337
- package/dist/server/in-place.d.ts +0 -15
- package/dist/server/kit-standalone.d.ts +0 -22
- package/dist/server/kit.d.ts +0 -452
- package/dist/server/last-checks.d.ts +0 -17
- package/dist/server/live.d.ts +0 -74
- package/dist/server/merge-ready-view.d.ts +0 -10
- package/dist/server/mutation-key.d.ts +0 -70
- package/dist/server/pages-assets.d.ts +0 -11
- package/dist/server/pages.d.ts +0 -8
- package/dist/server/people-tokens.d.ts +0 -18
- package/dist/server/remote-hooks.d.ts +0 -29
- package/dist/server/remote.d.ts +0 -60
- package/dist/server/render-chat.d.ts +0 -439
- package/dist/server/render-code-map.d.ts +0 -30
- package/dist/server/render-flaky.d.ts +0 -20
- package/dist/server/render-follow-through.d.ts +0 -11
- package/dist/server/render-history.d.ts +0 -51
- package/dist/server/render-new-task.d.ts +0 -54
- package/dist/server/render-pages.d.ts +0 -236
- package/dist/server/render-people.d.ts +0 -102
- package/dist/server/render-projects.d.ts +0 -104
- package/dist/server/render-release.d.ts +0 -19
- package/dist/server/render-results.d.ts +0 -758
- package/dist/server/render-settings.d.ts +0 -93
- package/dist/server/render-tasks.d.ts +0 -783
- package/dist/server/request-context.d.ts +0 -78
- package/dist/server/retired-routes.d.ts +0 -17
- package/dist/server/route-policy.d.ts +0 -18
- package/dist/server/route-table.d.ts +0 -114
- package/dist/server/runtime.d.ts +0 -343
- package/dist/server/session.d.ts +0 -192
- package/dist/server/settings.d.ts +0 -76
- package/dist/server/signup-gate.d.ts +0 -9
- package/dist/server/sweeps.d.ts +0 -4
- package/dist/server/task-views.d.ts +0 -98
- package/dist/server/tasks.d.ts +0 -108
- package/dist/server/terminals.d.ts +0 -31
- package/dist/server/welcome.d.ts +0 -28
- package/dist/server-telemetry.d.ts +0 -87
- package/dist/settings-groups-ui.d.ts +0 -286
- package/dist/settings-kit-script.d.ts +0 -21
- package/dist/settings-kit.d.ts +0 -173
- package/dist/settings-proofs.d.ts +0 -64
- package/dist/setup-guide.d.ts +0 -39
- package/dist/shared-deps.d.ts +0 -115
- package/dist/sign-in-guard.d.ts +0 -70
- package/dist/skills-ui.d.ts +0 -12
- package/dist/skills.d.ts +0 -99
- package/dist/slack-api.d.ts +0 -59
- package/dist/slack-chat.d.ts +0 -37
- package/dist/slack-settings.d.ts +0 -4
- package/dist/slack-socket.d.ts +0 -12
- package/dist/slack.d.ts +0 -6
- package/dist/sleep.d.ts +0 -2
- package/dist/source-key.d.ts +0 -2
- package/dist/spend-report.d.ts +0 -87
- package/dist/spend-ui.d.ts +0 -80
- package/dist/spend.d.ts +0 -142
- package/dist/sqlite-runtime.d.ts +0 -3
- package/dist/sqlite-telemetry.d.ts +0 -9
- package/dist/sso-settings.d.ts +0 -33
- package/dist/sso-ui.d.ts +0 -26
- package/dist/staged-runtimes.d.ts +0 -54
- package/dist/steer-capabilities.d.ts +0 -32
- package/dist/steer-controls.d.ts +0 -14
- package/dist/steer-live.d.ts +0 -19
- package/dist/steer-mailbox.d.ts +0 -46
- package/dist/steer-status.d.ts +0 -25
- package/dist/stop-proof.d.ts +0 -67
- package/dist/storage-sweep-child.d.ts +0 -1
- package/dist/storage-sweep-process.d.ts +0 -55
- package/dist/storage-sweep-schedule.d.ts +0 -30
- package/dist/storage-sweep.d.ts +0 -77
- package/dist/storage-ui.d.ts +0 -23
- package/dist/storage.d.ts +0 -68
- package/dist/store-baseline.d.ts +0 -19
- package/dist/store.d.ts +0 -8613
- package/dist/stream-scope.d.ts +0 -18
- package/dist/structured-output.d.ts +0 -57
- package/dist/style-asset.d.ts +0 -7
- package/dist/subagent-admin.d.ts +0 -53
- package/dist/subagent-desk.d.ts +0 -59
- package/dist/subagent-memory.d.ts +0 -65
- package/dist/subagent-question.d.ts +0 -59
- package/dist/subagent-tools.d.ts +0 -125
- package/dist/subagent-week.d.ts +0 -68
- package/dist/subagent-work.d.ts +0 -76
- package/dist/subagents-ui.d.ts +0 -22
- package/dist/subagents.d.ts +0 -146
- package/dist/subscription-chat.d.ts +0 -54
- package/dist/summary.d.ts +0 -33
- package/dist/surface.d.ts +0 -49
- package/dist/sweep-gate.d.ts +0 -10
- package/dist/sweep-quarantine.d.ts +0 -29
- package/dist/sync.d.ts +0 -94
- package/dist/tailnet.d.ts +0 -11
- package/dist/tamper-scan.d.ts +0 -4
- package/dist/task-activity.d.ts +0 -27
- package/dist/task-aliases.d.ts +0 -5
- package/dist/task-archive.d.ts +0 -13
- package/dist/task-base.d.ts +0 -39
- package/dist/task-composer.d.ts +0 -14
- package/dist/task-control.d.ts +0 -159
- package/dist/task-live.d.ts +0 -8
- package/dist/task-moves.d.ts +0 -90
- package/dist/task-outcome-cli.d.ts +0 -48
- package/dist/task-review-brief.d.ts +0 -69
- package/dist/task-sizing.d.ts +0 -58
- package/dist/task-source.d.ts +0 -77
- package/dist/task-status.d.ts +0 -324
- package/dist/task-text.d.ts +0 -31
- package/dist/team-chat-authorization.d.ts +0 -11
- package/dist/team-contract.d.ts +0 -103
- package/dist/team-http.d.ts +0 -25
- package/dist/team-leads.d.ts +0 -85
- package/dist/team-runtime.d.ts +0 -25
- package/dist/team-ui.d.ts +0 -4
- package/dist/team-updates.d.ts +0 -8
- package/dist/teams-api.d.ts +0 -33
- package/dist/teams-chat.d.ts +0 -36
- package/dist/teams-settings.d.ts +0 -14
- package/dist/teams.d.ts +0 -24
- package/dist/teardown-git.d.ts +0 -164
- package/dist/telegram-flow.d.ts +0 -112
- package/dist/telegram-lead.d.ts +0 -151
- package/dist/telegram-live.d.ts +0 -116
- package/dist/telegram-progress.d.ts +0 -20
- package/dist/telegram-settings.d.ts +0 -9
- package/dist/telegram-status.d.ts +0 -83
- package/dist/telegram-team.d.ts +0 -68
- package/dist/telegram.d.ts +0 -271
- package/dist/templates.d.ts +0 -69
- package/dist/terminal-catalog.d.ts +0 -11
- package/dist/terminal-text.d.ts +0 -11
- package/dist/test-infra.d.ts +0 -34
- package/dist/test-temp.d.ts +0 -40
- package/dist/text-limits.d.ts +0 -297
- package/dist/tidy.d.ts +0 -130
- package/dist/tier-report.d.ts +0 -44
- package/dist/token-notices.d.ts +0 -11
- package/dist/tokens-cli.d.ts +0 -21
- package/dist/tool-broker.d.ts +0 -52
- package/dist/tool-launcher.d.ts +0 -1
- package/dist/tool-secret-store.d.ts +0 -167
- package/dist/toolroll-update-cli.d.ts +0 -15
- package/dist/toolroll-update-ui.d.ts +0 -47
- package/dist/toolroll-update.d.ts +0 -265
- package/dist/tools-ui.d.ts +0 -51
- package/dist/transitions-recipes.d.ts +0 -1
- package/dist/tree-proof.d.ts +0 -34
- package/dist/tui-contract.d.ts +0 -202
- package/dist/tui-source.d.ts +0 -14
- package/dist/typed-start.d.ts +0 -51
- package/dist/unfenced-test-support.d.ts +0 -2
- package/dist/up-processes.d.ts +0 -162
- package/dist/up-role-child.d.ts +0 -1
- package/dist/update-notice.d.ts +0 -5
- package/dist/vanished-retry.d.ts +0 -30
- package/dist/verification-evidence.d.ts +0 -68
- package/dist/version.d.ts +0 -2
- package/dist/wake-hub.d.ts +0 -72
- package/dist/webhook-limits.d.ts +0 -23
- package/dist/webhook-readers.d.ts +0 -56
- package/dist/webhook-signing.d.ts +0 -27
- package/dist/webhooks.d.ts +0 -84
- package/dist/welcome-facts.d.ts +0 -18
- package/dist/when-html.d.ts +0 -40
- package/dist/work-index.d.ts +0 -175
- package/dist/work-summary.d.ts +0 -61
- package/dist/workspace-motion.d.ts +0 -4
- package/dist/workspace-revision.d.ts +0 -48
- package/dist/workspace-ui.d.ts +0 -385
- package/dist/worktree-notices.d.ts +0 -13
- package/dist/worktree.d.ts +0 -365
- package/dist/writes-mode.d.ts +0 -9
- package/dist/youiyoux-intake.d.ts +0 -234
package/dist/tools-ui.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/** Settings → Tools: one project's MCP servers, in plain words. Secrets are
|
|
2
|
-
* entered here and nowhere else, and never shown again. Built from the revamp kit (src/design/KIT.md): each tool and
|
|
3
|
-
* each service is a record with one action; the password is asked only once a tool or service is picked. */
|
|
4
1
|
import { html, joinHtml, postForm } from "./html.js";
|
|
5
2
|
import { brandMarkHtml } from "./brand-mark.js";
|
|
6
3
|
import { signedIn } from "./oauth-run-token.js";
|
|
@@ -8,9 +5,7 @@ import { credentialModeOf, toolCommandLine, toolStanding } from "./project-tools
|
|
|
8
5
|
import { acts, btn, chip, codeLine, disclose, facts, formRow, icon, infoLine, input, note, notice, select, settingsRecord, settingsSection } from "./server/kit.js";
|
|
9
6
|
import { kitSectionForm, SECRET_OPT_OUTS } from "./settings-kit.js";
|
|
10
7
|
const hidden = (data) => Object.entries(data).map(([k, v]) => html `<input type="hidden" name="${k}" value="${v}">`);
|
|
11
|
-
/** Kept for the console's style bundle (server/chrome.ts): the page is built from the kit and needs none of its own. */
|
|
12
8
|
export const TOOLS_CSS = "";
|
|
13
|
-
/** The project chooser: it opens the chosen project at once; without scripts, its button does. */
|
|
14
9
|
export function toolsProjectPicker(projects, chosen, keep = {}) {
|
|
15
10
|
if (projects.length < 2)
|
|
16
11
|
return "";
|
|
@@ -18,10 +13,8 @@ export function toolsProjectPicker(projects, chosen, keep = {}) {
|
|
|
18
13
|
return html `<form method="get" action="/settings/tools" class="k-acts k-picker" data-autosave>${hidden(keep)}\
|
|
19
14
|
${select({ name: "repo", label: "Project", current: chosen, items, attrs: { "data-tools-project": true } })}${btn("Show project", { sm: true, type: "submit" })}</form>`;
|
|
20
15
|
}
|
|
21
|
-
/** Choosing another project marks every form on the page as stale before it reloads, so a tap racing the reload is refused. */
|
|
22
16
|
export const TOOLS_PROJECT_SCRIPT = `(function(){var s=document.querySelector('select[data-tools-project]');if(!s)return;s.addEventListener('change',function(){document.querySelectorAll('input[name=shown]').forEach(function(i){i.value=s.value;});});})();`;
|
|
23
17
|
const slug = (text) => text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
24
|
-
/** A tool secret's own field: masked, never given a value, kept out of password managers. */
|
|
25
18
|
function secretField(id, label) {
|
|
26
19
|
return html `<input class="k-input" id="${id}" type="password" name="value" autocomplete="off" spellcheck="false" autocapitalize="none" data-so-secret \
|
|
27
20
|
data-1p-ignore data-lpignore="${SECRET_OPT_OUTS["data-lpignore"]}" data-bwignore data-form-type="other" required aria-label="${label}">`;
|
|
@@ -29,11 +22,8 @@ data-1p-ignore data-lpignore="${SECRET_OPT_OUTS["data-lpignore"]}" data-bwignore
|
|
|
29
22
|
function toolRecord(one, base, manage, project, research = null) {
|
|
30
23
|
const { tool, secretsSet } = one;
|
|
31
24
|
const standing = toolStanding(tool, secretsSet);
|
|
32
|
-
// How its runs get credentials, in one line; what that means is in Details.
|
|
33
25
|
const mode = credentialModeOf(tool.spec, secretsSet);
|
|
34
26
|
const sub = html `${tool.spec.about}${mode === null ? "" : html ` · <span data-credential="${mode.mode}">${mode.words}</span>`}`;
|
|
35
|
-
// One form per secret: the disclosure is both where it stands and where it is set. A service connected by signing
|
|
36
|
-
// in gets its tokens only by signing in again (its Connect): no token of it is ever pasted here.
|
|
37
27
|
const secrets = manage && !signedIn(tool.spec) ? tool.spec.secrets.map(secret => {
|
|
38
28
|
const set = secretsSet.includes(secret.name);
|
|
39
29
|
const id = `secret-${slug(tool.name)}-${slug(secret.name)}`;
|
|
@@ -51,7 +41,6 @@ function toolRecord(one, base, manage, project, research = null) {
|
|
|
51
41
|
...(tested === null ? [] : [["Last test", tested]]),
|
|
52
42
|
]));
|
|
53
43
|
const failed = tool.lastTest !== null && !tool.lastTest.ok ? notice(tool.lastTest.problem ?? "The last test failed.") : "";
|
|
54
|
-
// Connected, but research can't use it (its grant writes): said once, with the one way to fix it.
|
|
55
44
|
const reconnect = research === null || !manage ? "" : kitSectionForm({
|
|
56
45
|
proof: "tools-connect", action: "/settings/tools/connect", id: `reconnect-${slug(tool.name)}`, native: true, hidden: { ...base, service: tool.name, access: "read" },
|
|
57
46
|
save: { label: "Reconnect read-only", variant: "outline" }, confirm: `Reconnect ${tool.name} read-only for ${project}`, body: html ``,
|
|
@@ -65,7 +54,6 @@ function toolRecord(one, base, manage, project, research = null) {
|
|
|
65
54
|
more: joinHtml([failed, limited, ...secrets, details, remove]),
|
|
66
55
|
});
|
|
67
56
|
}
|
|
68
|
-
/** One service to connect by signing in on its own page: one record, one Connect. The password is asked after it is picked. */
|
|
69
57
|
function connectRecord(one, view, base, problem) {
|
|
70
58
|
const mark = brandMarkHtml(one.id.replace(/-desktop$/, ""), one.label, one.state === "connected");
|
|
71
59
|
const attrs = { id: `connect-${one.id}`, "data-state": one.state };
|
|
@@ -82,7 +70,6 @@ function connectRecord(one, view, base, problem) {
|
|
|
82
70
|
});
|
|
83
71
|
return settingsRecord({ title: html `${mark}<span>${one.label}</span>${connected ? chip("Connected", "done") : ""}`, sub: connected ? "" : one.about, action, attrs, more: problem });
|
|
84
72
|
}
|
|
85
|
-
/** A service connected here, offered to the person's other projects: each act signs in again for that project (tokens are never copied). */
|
|
86
73
|
function elsewhere(view, base) {
|
|
87
74
|
const offers = view.connections.filter(one => one.state === "connected").flatMap(one => (view.others ?? []).filter(other => other.open.includes(one.id)).map(other => kitSectionForm({
|
|
88
75
|
proof: "tools-connect", action: "/settings/tools/connect", id: `also-${slug(one.id)}-${slug(other.project)}`, native: true,
|
|
@@ -95,11 +82,9 @@ function elsewhere(view, base) {
|
|
|
95
82
|
}
|
|
96
83
|
export function toolsHtml(view, csrf, canManage, message = {}) {
|
|
97
84
|
const manage = canManage && csrf !== "";
|
|
98
|
-
// `shown` is the project this page shows; the server refuses a post whose repo differs from it.
|
|
99
85
|
const base = { repo: view.repo, shown: view.repo };
|
|
100
86
|
const to = ` to ${view.project}`;
|
|
101
87
|
const keptIn = view.storage === undefined || view.storage.filesOnly ? "Secrets stay on this computer" : view.storage.words.replace(/\.$/, "");
|
|
102
|
-
// No keychain here: said once, plainly, where it can't be missed.
|
|
103
88
|
const storage = view.storage?.problem !== undefined ? notice(view.storage.problem)
|
|
104
89
|
: view.storage?.filesOnly === true ? infoLine(view.storage.words) : "";
|
|
105
90
|
const how = disclose("How tools work", html `<ul class="k-note"><li>A tool you add reaches work you approve from now on. Approve a task again to give it a new tool.</li><li>Removing a tool takes it away from every build right away.</li><li>${keptIn}, are never shown again, and go only to the tool that needs them.</li><li>Reviewers and the lead chat never get tools. Gemini builds don't use tools yet.</li></ul>`);
|
|
@@ -107,10 +92,8 @@ export function toolsHtml(view, csrf, canManage, message = {}) {
|
|
|
107
92
|
: joinHtml(view.tools.map(one => toolRecord(one, base, manage, view.project, view.connections.find(c => c.id === one.tool.name && c.state === "connected")?.research ?? null)));
|
|
108
93
|
const tools = settingsSection({ id: "tools", title: `Tools in ${view.project}`, lead: `Builds in ${view.project} use exactly these tools. MCP servers set up elsewhere on this computer aren't used.`, body: joinHtml([storage, records, how]) });
|
|
109
94
|
const connecting = manage && view.connections.length > 0;
|
|
110
|
-
// A Connect that failed says why at its service, focused so it is heard and seen there (not only at the top).
|
|
111
95
|
const atButton = connecting && view.wanted !== null && view.connections.some(one => one.id === view.wanted) && Boolean(message.problem);
|
|
112
96
|
const failed = atButton ? html `<p class="k-notice" id="connect-problem" role="alert" tabindex="-1" autofocus>${icon("alert", true)}<span>${message.problem}</span></p>` : "";
|
|
113
|
-
// The service a link asked for comes first; its Connect is the page's one primary.
|
|
114
97
|
const ordered = [...view.connections.filter(one => one.id === view.wanted), ...view.connections.filter(one => one.id !== view.wanted)];
|
|
115
98
|
const connect = connecting ? settingsSection({ id: "connect", title: `Connect${to}`, lead: "Sign in on the service's own page. Toolroll asks for your password once you pick one.",
|
|
116
99
|
body: joinHtml(ordered.map(one => connectRecord(one, view, base, one.id === view.wanted ? failed : ""))) }) : "";
|
package/dist/tree-proof.js
CHANGED
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The read-only roles' clean-tree proof (planner, scout — mate arc §10,
|
|
3
|
-
* v4 review finding 4). `git status --porcelain` alone is not a proof: it
|
|
4
|
-
* omits IGNORED paths, so an agent could leave a generated file behind
|
|
5
|
-
* and pass; and a pathname filter that exempts the protocol files
|
|
6
|
-
* regardless of index status would let an agent `git add` its own
|
|
7
|
-
* handoff and pass with a dirty index. So: ignored paths are snapshotted
|
|
8
|
-
* BEFORE the agent runs and any new one afterwards is foreign; and a
|
|
9
|
-
* protocol file is admitted only as plain untracked (`??`) — staged is
|
|
10
|
-
* foreign. Ignored directories are collapsed by git (`!! build/`), so a
|
|
11
|
-
* write INTO a directory that was already ignored before the agent ran
|
|
12
|
-
* (a dependency tree the setup command produced) is not detected — that
|
|
13
|
-
* residual is stated here rather than wished away.
|
|
14
|
-
*/
|
|
15
1
|
const GIT = "git";
|
|
16
2
|
const STATUS_ARGS = ["--no-optional-locks", "-c", "core.quotePath=false", "status", "--porcelain", "--ignored"];
|
|
17
|
-
/** The ignored paths git reports right now — the "before" of a proof. */
|
|
18
3
|
export async function snapshotIgnored(git, cwd) {
|
|
19
4
|
const status = await git(GIT, [...STATUS_ARGS], { cwd });
|
|
20
5
|
if (status.code !== 0)
|
|
@@ -26,11 +11,6 @@ export async function snapshotIgnored(git, cwd) {
|
|
|
26
11
|
}
|
|
27
12
|
return ignored;
|
|
28
13
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Everything in the tree that is not (a) an ignored path that was already
|
|
31
|
-
* ignored before, (b) one of this attempt's own protocol files as PLAIN
|
|
32
|
-
* untracked, or (c) the pool's untracked lease marker.
|
|
33
|
-
*/
|
|
34
14
|
export async function proveTreeUntouched(git, cwd, args) {
|
|
35
15
|
const status = await git(GIT, [...STATUS_ARGS], { cwd });
|
|
36
16
|
if (status.code !== 0)
|
|
@@ -47,9 +27,6 @@ export async function proveTreeUntouched(git, cwd, args) {
|
|
|
47
27
|
continue;
|
|
48
28
|
}
|
|
49
29
|
const own = args.protocolFiles.includes(path) || path === args.marker;
|
|
50
|
-
// Untracked is the only admissible state for a protocol file: a staged
|
|
51
|
-
// one would survive cleanup in the index and ride into somebody's
|
|
52
|
-
// commit.
|
|
53
30
|
if (own && code === "??")
|
|
54
31
|
continue;
|
|
55
32
|
foreign.push(own ? `${path} (staged)` : path);
|
package/dist/tui-contract.js
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What the terminal UI (src/tui, bundled into dist/tui.js) reads and asks for, and nothing more. The CLI side
|
|
3
|
-
* (tui-source.ts) implements it with in-process reads of this installation's database and with every write sent
|
|
4
|
-
* through `runOperate` as the local owner (local-owner.ts runAsLocalOwner), so the screen holds no authority of its
|
|
5
|
-
* own: a write the local owner may not make is refused there, and the screen shows the refusal's words.
|
|
6
|
-
*
|
|
7
|
-
* Types only, with no imports: both the CLI build (tsc) and the terminal UI bundle (esbuild) read this file.
|
|
8
|
-
*/
|
|
9
1
|
export {};
|
package/dist/tui-source.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The terminal UI's view of this installation (tui-contract.ts TuiSource), in this process.
|
|
3
|
-
*
|
|
4
|
-
* Reads come straight from the database through a read-only handle (the task list and a task's own envelopes through
|
|
5
|
-
* `runOperate`, live output through peek's tail reader, the store's wake sequence as the change signal). Every write
|
|
6
|
-
* goes through `runOperate` inside runAsLocalOwner: the same commands, rows and refusals as the CLI, bound to local
|
|
7
|
-
* mode when each command opens the database, never to anything the screen says. Every command runs with --json, so
|
|
8
|
-
* nothing ever prompts on the terminal the screen owns.
|
|
9
|
-
*/
|
|
10
1
|
import { dirname, join } from "node:path";
|
|
2
|
+
import { advancedShownFor } from "./advanced.js";
|
|
11
3
|
import { assignmentOf, owedAcceptance } from "./assignment.js";
|
|
4
|
+
import { agentlessFirstRun, buildersFor } from "./dispatch.js";
|
|
12
5
|
import { familyChangedFiles } from "./result-completion.js";
|
|
13
6
|
import { checkBackingOf, receiptChecksOf, requirementWordOf } from "./task-status.js";
|
|
14
7
|
import { checklistLines, mergeChecklistOf } from "./merge-checklist.js";
|
|
@@ -26,11 +19,7 @@ import { welcomeHere, welcomeLines } from "./welcome-facts.js";
|
|
|
26
19
|
import { planSourceOf, retryPinsOf } from "./local-owner-acts.js";
|
|
27
20
|
const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
28
21
|
const words = (value, fallback = "") => typeof value === "string" ? value : fallback;
|
|
29
|
-
/** Text for the screen: whatever wrote it (an agent, a person, a project's name), escapes and controls never reach the
|
|
30
|
-
* terminal (terminal-text.ts). Every displayed string below goes through here; ids and digests are only acted on. */
|
|
31
22
|
const shown = (value, fallback = "") => terminalText(words(value, fallback));
|
|
32
|
-
/** What a refused write says, and whether it is a local-owner refusal (the screen then leads to a password), or a
|
|
33
|
-
* result that changed since the screen read it. */
|
|
34
23
|
function refusalOf(envelope) {
|
|
35
24
|
const message = shown(envelope.message, "That was refused.");
|
|
36
25
|
if (envelope.reason === "stale")
|
|
@@ -51,7 +40,6 @@ export function createTuiSource(options) {
|
|
|
51
40
|
reader ??= openStoreReadOnly(file);
|
|
52
41
|
return reader;
|
|
53
42
|
};
|
|
54
|
-
/** One command as the local owner, with --json: its envelope (an unreadable answer reads as a refusal). */
|
|
55
43
|
async function command(argv) {
|
|
56
44
|
const [name = "", ...rest] = argv;
|
|
57
45
|
let out = "";
|
|
@@ -81,7 +69,6 @@ export function createTuiSource(options) {
|
|
|
81
69
|
return {
|
|
82
70
|
id: words(row["id"], words(row["rootId"])), title: shown(row["title"]), status: shown(status["label"], words(row["state"])), detail: shown(status["detail"]),
|
|
83
71
|
needsYou: views.includes("needs-you"), liveRunId: typeof row["liveRunId"] === "number" ? row["liveRunId"] : null, repo: typeof row["repo"] === "string" ? row["repo"] : null,
|
|
84
|
-
// The same rule as Home's groups, over the same work index item.
|
|
85
72
|
group: homeGroupOf({ status: { views: views.filter((one) => typeof one === "string") } }),
|
|
86
73
|
};
|
|
87
74
|
});
|
|
@@ -91,7 +78,8 @@ export function createTuiSource(options) {
|
|
|
91
78
|
const store = read();
|
|
92
79
|
const mode = store === null ? null : localModeOf(store);
|
|
93
80
|
const passwordSet = store !== null && mode !== null && store.accountOf(mode.owner)?.passwordSet === true;
|
|
94
|
-
|
|
81
|
+
const advanced = store === null || mode === null || advancedShownFor(store, mode.owner);
|
|
82
|
+
return { rows, needsYou, projects: "error" in registry ? [] : registry.repos, passwordSet, learning: store === null ? null : learningLine(store, "error" in registry ? [] : registry.repos, clock(), advanced) };
|
|
95
83
|
},
|
|
96
84
|
async task(id) {
|
|
97
85
|
const answer = await command(["task", "show", id]);
|
|
@@ -110,7 +98,6 @@ export function createTuiSource(options) {
|
|
|
110
98
|
}
|
|
111
99
|
const decisions = store === null ? [] : store.listDecisions("unanswered").filter(one => one.taskId === id)
|
|
112
100
|
.map(one => ({ id: one.id, question: terminalText(one.question), options: one.options.map(option => ({ id: option.id, label: terminalText(option.label) })) }));
|
|
113
|
-
// "Can I merge?": the same checklist and lines as `toolroll task ready`, read from the same records.
|
|
114
101
|
let ready = [];
|
|
115
102
|
try {
|
|
116
103
|
const list = !hasResult || store === null ? null : mergeChecklistOf(store, id, clock(), { principal: "operator", repos: null }, evidenceRoot);
|
|
@@ -149,7 +136,6 @@ export function createTuiSource(options) {
|
|
|
149
136
|
let argv;
|
|
150
137
|
let done;
|
|
151
138
|
switch (act.kind) {
|
|
152
|
-
// A task too big to build straight away: filed, then its plan asked for at once (local-owner slice 2), below.
|
|
153
139
|
case "new":
|
|
154
140
|
argv = ["task", "add", act.text, ...(act.repo === null ? [] : ["--repo", act.repo])];
|
|
155
141
|
done = "Filed.";
|
|
@@ -160,7 +146,7 @@ export function createTuiSource(options) {
|
|
|
160
146
|
break;
|
|
161
147
|
case "build":
|
|
162
148
|
argv = ["task", "new", "--build", act.preview, "--digest", act.digest];
|
|
163
|
-
done = "Building.
|
|
149
|
+
done = "Building. It starts next.";
|
|
164
150
|
break;
|
|
165
151
|
case "approve":
|
|
166
152
|
argv = ["task", "approve", act.id, "--yes", "--digest", act.digest];
|
|
@@ -178,13 +164,10 @@ export function createTuiSource(options) {
|
|
|
178
164
|
argv = ["decide", String(act.decision), "--choose", act.option];
|
|
179
165
|
done = "Answered.";
|
|
180
166
|
break;
|
|
181
|
-
// Retry: exactly the build and approved plan the screen read (local-owner slice 3), never the current ones.
|
|
182
167
|
case "retry":
|
|
183
168
|
argv = ["task", "requeue", act.id, "--run", String(act.runId), "--digest", act.digest];
|
|
184
|
-
done = "Retrying.
|
|
169
|
+
done = "Retrying. It starts next.";
|
|
185
170
|
break;
|
|
186
|
-
// Accept: exactly the result the Accept screen read, never the one current when this is sent (the command
|
|
187
|
-
// refuses a result that changed meanwhile). The person's yes to their own check, or a reason, only when given.
|
|
188
171
|
case "complete":
|
|
189
172
|
argv = ["task", "complete", act.id, "--run", String(act.runId), "--digest", act.digest, ...(act.checked ? ["--checked"] : []), ...(act.reason === null ? [] : ["--reason", act.reason])];
|
|
190
173
|
done = "Accepted. The task is done.";
|
|
@@ -198,14 +181,18 @@ export function createTuiSource(options) {
|
|
|
198
181
|
if (act.kind === "plan" && answer["replayed"] === true)
|
|
199
182
|
return { ok: true, message: "Already asked for a plan." };
|
|
200
183
|
if (act.kind === "retry" && answer["replayed"] === true)
|
|
201
|
-
return { ok: true, message: "Already retrying.
|
|
184
|
+
return { ok: true, message: "Already retrying. It starts next." };
|
|
202
185
|
const filed = act.kind === "new" ? words(record(answer["task"])["id"], words(answer["id"])) : act.kind === "build" ? words(answer["task"]) : "";
|
|
203
|
-
// Filed in a project: ask for its plan now, bound to the task just filed (the screen promised a plan).
|
|
204
186
|
if (act.kind === "new" && filed !== "" && act.repo !== null) {
|
|
205
187
|
const store = read();
|
|
206
188
|
const ask = store === null ? null : planAskOf(store, filed);
|
|
207
189
|
const asked = ask === null ? null : await command(["task", "plan", filed, "--digest", ask.source]);
|
|
208
|
-
const
|
|
190
|
+
const filedRef = store === null ? null : store.lookupRef(filed);
|
|
191
|
+
const agentless = store === null || filedRef === null || asked?.ok !== true ? null
|
|
192
|
+
: agentlessFirstRun(store, filedRef, true, buildersFor(store, act.repo, clock()).alive.map(one => one.name));
|
|
193
|
+
const message = asked?.ok !== true ? `Filed. It wasn't sent for a plan: ${shown(asked?.message, "it can't be planned now.")}`
|
|
194
|
+
: agentless !== null ? `Filed. ${agentless.words}`
|
|
195
|
+
: "Filed. Planning: you'll approve the plan before anything is built.";
|
|
209
196
|
return { ok: true, message, id: filed };
|
|
210
197
|
}
|
|
211
198
|
return { ok: true, message: done, ...(filed === "" ? {} : { id: filed }) };
|
|
@@ -236,7 +223,6 @@ export function createTuiSource(options) {
|
|
|
236
223
|
const store = read();
|
|
237
224
|
if (store === null)
|
|
238
225
|
return null;
|
|
239
|
-
// The screen can close while this waits on the sign-in checks: the store it holds is gone then, and so is the question.
|
|
240
226
|
const here = await welcomeHere(store, file, clock(), options.check === undefined ? {} : { check: options.check }).catch((problem) => {
|
|
241
227
|
if (closed)
|
|
242
228
|
return null;
|
|
@@ -255,12 +241,12 @@ export function createTuiSource(options) {
|
|
|
255
241
|
},
|
|
256
242
|
};
|
|
257
243
|
}
|
|
258
|
-
|
|
259
|
-
function learningLine(store, repos, now) {
|
|
244
|
+
export function learningLine(store, repos, now, advanced = true) {
|
|
260
245
|
let flaky = 0, memory = 0;
|
|
261
246
|
try {
|
|
262
247
|
for (const repo of repos) {
|
|
263
|
-
|
|
248
|
+
if (advanced)
|
|
249
|
+
flaky += flakyCount(store, repo, now);
|
|
264
250
|
const waiting = memoryWaiting(store, repo);
|
|
265
251
|
memory += waiting.notes + waiting.cleanups;
|
|
266
252
|
}
|
|
@@ -271,9 +257,6 @@ function learningLine(store, repos, now) {
|
|
|
271
257
|
const parts = [flaky === 0 ? "" : `${flaky} flaky test${flaky === 1 ? "" : "s"}: open the project's Flaky tests in the browser`, memory === 0 ? "" : `${memory} project memory suggestion${memory === 1 ? "" : "s"}: open Settings → Knowledge`].filter(Boolean);
|
|
272
258
|
return parts.length === 0 ? null : parts.join(" · ");
|
|
273
259
|
}
|
|
274
|
-
/** The Accept screen's one read of a task's current result (local-owner slice 1): which build and receipt it pins, and
|
|
275
|
-
* what the result page would show about it — the agent's summary, the files changed, each requirement and how it is
|
|
276
|
-
* shown, the actual check status, and what accepting it needs from the person. Text from outside is cleaned here. */
|
|
277
260
|
function resultOf(store, id, now, evidenceRoot) {
|
|
278
261
|
const assignment = assignmentOf(store, id, now, { principal: "operator", repos: null }, evidenceRoot);
|
|
279
262
|
const receipt = assignment?.receipt ?? null;
|
|
@@ -281,7 +264,6 @@ function resultOf(store, id, now, evidenceRoot) {
|
|
|
281
264
|
return null;
|
|
282
265
|
const blockers = assignment.readiness?.blockers ?? [];
|
|
283
266
|
const owed = assignment.state === "ready-to-check" ? owedAcceptance(receipt, blockers) : null;
|
|
284
|
-
// An exception's own blocker is what its reason answers; any other one stands in the way of accepting.
|
|
285
267
|
const standing = blockers.filter(one => !(owed === "exception" && one.key === "criteria")).map(one => terminalText(one.message));
|
|
286
268
|
const notNow = assignment.state === "complete" ? "This result is already accepted." : assignment.state === "ready-to-check" ? null : terminalText(assignment.detail || "This result isn't ready to accept.");
|
|
287
269
|
const changed = familyChangedFiles(store, receipt.taskId, receipt.runId, evidenceRoot);
|
|
@@ -303,8 +285,6 @@ function resultOf(store, id, now, evidenceRoot) {
|
|
|
303
285
|
checks, owed,
|
|
304
286
|
};
|
|
305
287
|
}
|
|
306
|
-
/** Whether a plan can be asked for this task now, and the planning source a request binds to (local-owner slice 2): a
|
|
307
|
-
* queued task with no plan asked or drafted and no approved plan. What the screen offers only; the command decides. */
|
|
308
288
|
function planAskOf(store, id) {
|
|
309
289
|
const ref = store.lookupRef(id);
|
|
310
290
|
const scope = store.getScope(id);
|
package/dist/tui.js
CHANGED
|
@@ -67,7 +67,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
|
|
|
67
67
|
`))}patchConsole(){this.options.debug||(this.restoreConsole=_c((u,a)=>{u==="stdout"&&this.writeToStdout(a),u==="stderr"&&(a.startsWith("The above error occurred")||this.writeToStderr(a))}))}initKittyKeyboard(){if(!this.options.kittyKeyboard)return;let u=this.options.kittyKeyboard,a=u.mode??"auto";if(a==="disabled"||!this.options.stdin.isTTY||!this.options.stdout.isTTY)return;let l=u.flags??["disambiguateEscapeCodes"];if(a==="enabled"){this.enableKittyProtocol(l);return}let g=Ui.env.TERM??"",E=Ui.env.TERM_PROGRAM??"",s="KITTY_WINDOW_ID"in Ui.env||g==="xterm-kitty"||E==="WezTerm"||E==="ghostty";!qe&&s&&this.confirmKittySupport(l)}confirmKittySupport(u){let{stdin:a,stdout:l}=this.options,g=[],E=()=>{this.cancelKittyDetection=void 0,clearTimeout(I),a.removeListener("data",s);let Q=Cy(g);g=[],Q.length>0&&a.unshift(Buffer.from(Q))},s=Q=>{let y=typeof Q=="string"?Buffer.from(Q):Q;for(let v of y)g.push(v);cy(g)&&(E(),this.isUnmounted||this.enableKittyProtocol(u))};a.on("data",s);let I=setTimeout(E,200);this.cancelKittyDetection=E,l.write("\x1B[?u")}enableKittyProtocol(u){this.options.stdout.write(`\x1B[>${_Q(u)}u`),this.kittyProtocolEnabled=!0}};var Qy=(e,u)=>{let a={stdout:Uo.stdout,stdin:Uo.stdin,stderr:Uo.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0,maxFps:30,incrementalRendering:!1,concurrent:!1,...fy(u)},l=Dy(a.stdout,()=>new za(a),a.concurrent??!1);return l.render(e),{rerender:l.render,unmount(){l.unmount()},waitUntilExit:l.waitUntilExit,cleanup:()=>Hi.delete(a.stdout),clear:l.clear}},TE=Qy,fy=(e={})=>e instanceof Iy?{stdout:e,stdin:Uo.stdin}:e,Dy=(e,u,a)=>{let l=Hi.get(e);return l?l.isConcurrent!==a&&console.warn(`Warning: render() was called with concurrent: ${a}, but the existing instance for this stdout uses concurrent: ${l.isConcurrent}. The concurrent option only takes effect on the first render. Call unmount() first if you need to change the rendering mode.`):(l=u(),Hi.set(e,l)),l};var dy=aA(Zl(),1);var To=aA(SA(),1);var XQ=aA(SA(),1);var py=aA(SA(),1);var my=aA(SA(),1);var LE=aA(SA(),1);import{Buffer as hy}from"node:buffer";var yy=/^(?:\x1b)([a-zA-Z0-9])$/,Sy=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,jQ={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},VQ=[...Object.values(jQ),"backspace"],Fy=e=>["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(e),Ny=e=>["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(e),WQ=/^\x1b\[(\d+)(?:;(\d+)(?::(\d+))?(?:;([\d:]+))?)?u$/,Ry=/^\x1b\[(\d+);(\d+):(\d+)([A-Za-z~])$/,vy={A:"up",B:"down",C:"right",D:"left",E:"clear",F:"end",H:"home",P:"f1",Q:"f2",R:"f3",S:"f4"},wy={2:"insert",3:"delete",5:"pageup",6:"pagedown",7:"home",8:"end",11:"f1",12:"f2",13:"f3",14:"f4",15:"f5",17:"f6",18:"f7",19:"f8",20:"f9",21:"f10",23:"f11",24:"f12"},ZQ={27:"escape",9:"tab",127:"delete",8:"backspace",57358:"capslock",57359:"scrolllock",57360:"numlock",57361:"printscreen",57362:"pause",57363:"menu",57376:"f13",57377:"f14",57378:"f15",57379:"f16",57380:"f17",57381:"f18",57382:"f19",57383:"f20",57384:"f21",57385:"f22",57386:"f23",57387:"f24",57388:"f25",57389:"f26",57390:"f27",57391:"f28",57392:"f29",57393:"f30",57394:"f31",57395:"f32",57396:"f33",57397:"f34",57398:"f35",57399:"kp0",57400:"kp1",57401:"kp2",57402:"kp3",57403:"kp4",57404:"kp5",57405:"kp6",57406:"kp7",57407:"kp8",57408:"kp9",57409:"kpdecimal",57410:"kpdivide",57411:"kpmultiply",57412:"kpsubtract",57413:"kpadd",57414:"kpenter",57415:"kpequal",57416:"kpseparator",57417:"kpleft",57418:"kpright",57419:"kpup",57420:"kpdown",57421:"kppageup",57422:"kppagedown",57423:"kphome",57424:"kpend",57425:"kpinsert",57426:"kpdelete",57427:"kpbegin",57428:"mediaplay",57429:"mediapause",57430:"mediaplaypause",57431:"mediareverse",57432:"mediastop",57433:"mediafastforward",57434:"mediarewind",57435:"mediatracknext",57436:"mediatrackprevious",57437:"mediarecord",57438:"lowervolume",57439:"raisevolume",57440:"mutevolume",57441:"leftshift",57442:"leftcontrol",57443:"leftalt",57444:"leftsuper",57445:"lefthyper",57446:"leftmeta",57447:"rightshift",57448:"rightcontrol",57449:"rightalt",57450:"rightsuper",57451:"righthyper",57452:"rightmeta",57453:"isoLevel3Shift",57454:"isoLevel5Shift"},PQ=e=>e>=0&&e<=1114111&&!(e>=55296&&e<=57343),bE=e=>PQ(e)?String.fromCodePoint(e):"?";function $Q(e){return e===3?"release":e===2?"repeat":"press"}function Af(e){return{ctrl:!!(e&We.ctrl),shift:!!(e&We.shift),meta:!!(e&We.meta),option:!!(e&We.alt),super:!!(e&We.super),hyper:!!(e&We.hyper),capsLock:!!(e&We.capsLock),numLock:!!(e&We.numLock)}}var Gy=e=>{let u=WQ.exec(e);if(!u)return null;let a=parseInt(u[1],10),l=u[2]?Math.max(0,parseInt(u[2],10)-1):0,g=u[3]?parseInt(u[3],10):1,E=u[4];if(!PQ(a))return null;let s;E&&(s=E.split(":").map(y=>bE(parseInt(y,10))).join(""));let I,Q;return a===32?(I="space",Q=!0):a===13?(I="return",Q=!0):ZQ[a]?(I=ZQ[a],Q=!1):a>=1&&a<=26?(I=String.fromCodePoint(a+96),Q=!1):(I=bE(a).toLowerCase(),Q=!0),Q&&!s&&(s=bE(a)),{name:I,...Af(l),eventType:$Q(g),sequence:e,raw:e,isKittyProtocol:!0,isPrintable:Q,text:s}},My=e=>{let u=Ry.exec(e);if(!u)return null;let a=parseInt(u[1],10),l=Math.max(0,parseInt(u[2],10)-1),g=parseInt(u[3],10),E=u[4],s=E==="~"?wy[a]:vy[E];return s?{name:s,...Af(l),eventType:$Q(g),sequence:e,raw:e,isKittyProtocol:!0,isPrintable:!1}:null},xy=(e="")=>{let u;hy.isBuffer(e)?e[0]>127&&e[1]===void 0?(e[0]-=128,e="\x1B"+String(e)):e=String(e):e!==void 0&&typeof e!="string"?e=String(e):e||(e="");let a=Gy(e);if(a)return a;let l=My(e);if(l)return l;if(WQ.test(e))return{name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:e,raw:e,isKittyProtocol:!0,isPrintable:!1};let g={name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:e,raw:e};if(g.sequence=g.sequence||e||g.name,e==="\r"||e==="\x1B\r")g.raw=void 0,g.name="return",g.option=e.length===2;else if(e===`
|
|
68
68
|
`)g.name="enter";else if(e===" ")g.name="tab";else if(e==="\b"||e==="\x1B\b")g.name="backspace",g.meta=e.charAt(0)==="\x1B";else if(e===""||e==="\x1B")g.name="delete",g.meta=e.charAt(0)==="\x1B";else if(e==="\x1B"||e==="\x1B\x1B")g.name="escape",g.meta=e.length===2;else if(e===" "||e==="\x1B ")g.name="space",g.meta=e.length===2;else if(e.length===1&&e<="")g.name=String.fromCharCode(e.charCodeAt(0)+97-1),g.ctrl=!0;else if(e.length===1&&e>="0"&&e<="9")g.name="number";else if(e.length===1&&e>="a"&&e<="z")g.name=e;else if(e.length===1&&e>="A"&&e<="Z")g.name=e.toLowerCase(),g.shift=!0;else if(u=yy.exec(e))g.meta=!0,g.shift=/^[A-Z]$/.test(u[1]);else if(u=Sy.exec(e)){let E=[...e];E[0]==="\x1B"&&E[1]==="\x1B"&&(g.option=!0);let s=[u[1],u[2],u[4],u[6]].filter(Boolean).join(""),I=(u[3]||u[5]||1)-1;g.ctrl=!!(I&4),g.meta=!!(I&10),g.shift=!!(I&1),g.code=s,g.name=jQ[s],g.shift=Fy(s)||g.shift,g.ctrl=Ny(s)||g.ctrl}return g},tf=xy;var ef=aA(SA(),1);var Hy=()=>(0,ef.useContext)(Ro),bo=Hy;var Uy=(e,u={})=>{let{stdin:a,setRawMode:l,internal_exitOnCtrlC:g,internal_eventEmitter:E}=bo();(0,LE.useEffect)(()=>{if(u.isActive!==!1)return l(!0),()=>{l(!1)}},[u.isActive,l]),(0,LE.useEffect)(()=>{if(u.isActive===!1)return;let s=I=>{let Q=tf(I),y={upArrow:Q.name==="up",downArrow:Q.name==="down",leftArrow:Q.name==="left",rightArrow:Q.name==="right",pageDown:Q.name==="pagedown",pageUp:Q.name==="pageup",home:Q.name==="home",end:Q.name==="end",return:Q.name==="return",escape:Q.name==="escape",ctrl:Q.ctrl,shift:Q.shift,tab:Q.name==="tab",backspace:Q.name==="backspace",delete:Q.name==="delete",meta:Q.meta||Q.name==="escape"||Q.option,super:Q.super??!1,hyper:Q.hyper??!1,capsLock:Q.capsLock??!1,numLock:Q.numLock??!1,eventType:Q.eventType},v;Q.isKittyProtocol?Q.isPrintable?v=Q.text??Q.name:Q.ctrl&&Q.name.length===1?v=Q.name:v="":Q.ctrl?v=Q.name:v=Q.sequence,!Q.isKittyProtocol&&VQ.includes(Q.name)&&(v=""),v.startsWith("\x1B")&&(v=v.slice(1)),v.length===1&&typeof v[0]=="string"&&/[A-Z]/.test(v[0])&&(y.shift=!0),(!(v==="c"&&y.ctrl)||!g)&&fe.batchedUpdates(()=>{e(v,y)})};return E?.on("input",s),()=>{E?.removeListener("input",s)}},[u.isActive,a,g,e])},OE=Uy;var nf=aA(SA(),1);var Ty=()=>(0,nf.useContext)(No),kE=Ty;var by=aA(SA(),1);var Ly=aA(SA(),1);var JE=aA(SA(),1);var Oy=aA(SA(),1);var ky=aA(SA(),1);var Lo=aA(SA(),1);import{pathToFileURL as $y}from"node:url";var Jy=["[data-ink-approve]",'[data-ink-act="accept"]',"[data-accept-result][data-primary-action]"],Ky=['[data-act="request-changes"]','[data-act="revise"]','a.result-feedback-link[href="#request-changes"]'],Yy=['[data-act="retry"]','form[data-retry] button[type="submit"]','form[data-rebuild] button[type="submit"]'],_y=['form[action$="/plan"] button[type="submit"]'],KE=[{keys:"n",says:"new task",web:{kind:"go",href:"/tasks/new"},tui:"new"},{keys:"a",says:"Approve or Accept (presses the button on the page)",web:{kind:"press",selectors:Jy},tui:"ink"},{keys:"b",says:"Send back (opens its note)",web:{kind:"press",selectors:Ky},tui:"send-back"},{keys:"r",says:"Retry (presses the button on the page)",web:{kind:"press",selectors:Yy},tui:"retry"},{keys:"p",says:"Ask for a plan (presses the button on the page)",web:{kind:"press",selectors:_y},tui:"plan"},{keys:"/",says:"search",web:{kind:"search"},tui:{none:"The terminal has no search; press w to open the console."}},{keys:"g h",says:"go Home",web:{kind:"go",href:"/"},tui:"list"},{keys:"g t",says:"go to Tasks",web:{kind:"go",href:"/tasks"},tui:"list"},{keys:"?",says:"these shortcuts",web:{kind:"help"},tui:"help"}],uf=e=>e.split(" ").join(" then ");var PA=aA(SA(),1);var zy=/[--]/g;function qy(e){return e.replace(/(?:\x1b\[|\u009b)[0-?]*[ -/]*[@-~]/g,"").replace(/(?:\x1b\]|\u009d)[^\x07\x1b\u009c]*(?:\x07|\x1b\\|\u009c)?/g,"").replace(/\x1b[ -/]*[0-~]/g,"").replace(/\t/g," ").replace(/[\x00-\x1f\x7f-\x9f]/g,"").replace(new RegExp("\\p{Cf}","gu"),"").replace(zy,"")}function af(e){return e.split(`
|
|
69
69
|
`).map(qy).join(`
|
|
70
|
-
`)}var YE=["you","working","done"],lf={you:"Waiting on you",working:"Working",done:"Done"};var L=aA(qa(),1);function RA({children:e,...u}){return(0,L.jsx)(eA,{...u,children:af(e)})}var jy={new:"new task",ink:"approve the plan (shows it in full first), or accept the result (shows it first)","send-back":"send the result back",retry:"retry",plan:"ask for a plan",list:"back to the task list",help:"these keys"},Vy=["j / k or ↑ / ↓ move","Enter open the task",...KE.filter(e=>typeof e.tui=="string").map(e=>`${uf(e.keys).padEnd(17)}${jy[e.tui]}`),"c accept the result (shows it first)","s stop the running attempt","1–9 answer the task's question","w open in the browser","Esc back","q quit"];function Wy(e){let u=a=>a.group===null?YE.length:YE.indexOf(a.group);return e.map((a,l)=>({row:a,index:l})).sort((a,l)=>u(a.row)-u(l.row)||a.index-l.index).map(a=>a.row)}var Py=e=>e.group===null?"Other":lf[e.group],Ef=e=>[...e].filter(u=>u>=" "&&u!=="").join("");function sf({source:e,session:u,onExit:a,pollMs:l=1e3}){let{exit:g}=kE(),[E,s]=(0,PA.useState)(null),[I,Q]=(0,PA.useState)(null),[y,v]=(0,PA.useState)(0),[w,p]=(0,PA.useState)({kind:"main"}),[M,U]=(0,PA.useState)(null),[J,H]=(0,PA.useState)(null),[P,FA]=(0,PA.useState)([]),NA=(0,PA.useRef)(null),gA=(0,PA.useRef)(0),xA=(0,PA.useRef)(!1),vA=Wy(E?.rows??[]),QA=vA[Math.min(y,Math.max(vA.length-1,0))],LA=(0,PA.useCallback)(async()=>{let N=await e.snapshot();s(N),N.rows.length===0&&Q(await e.setup())},[e]);(0,PA.useEffect)(()=>{LA()},[LA]),(0,PA.useEffect)(()=>{let N=setInterval(()=>{gA.current+=1;let S=e.changed();(S!==NA.current||gA.current%5===0)&&(NA.current=S,LA())},l);return()=>clearInterval(N)},[e,LA,l]);let yt=QA?.id??null;(0,PA.useEffect)(()=>{if(yt===null){FA([]);return}FA(e.live(yt));let N=setInterval(()=>FA(e.live(yt)),l);return()=>clearInterval(N)},[e,yt,l]);let Ht=N=>{xA.current||(xA.current=!0,g(),a?.(N))},Xt=(0,PA.useRef)(!1),OA=async N=>{H("Working…");try{let S=await e.act(N);return S.ok?(U(S.message),await LA(),N.kind==="new"&&u.shouldAskBackground()&&p({kind:"background"}),!0):(S.needsPassword?p({kind:"password",message:S.message}):U(S.message),!1)}finally{H(null)}},Bt=async(N,S)=>{let O=await e.task(N);O===null?U("That task can't be read now."):S(O)},Ut=N=>Bt(N,S=>{S.plan===null?U("No plan is waiting for your approval on this task."):p({kind:"approve",task:S})}),St=async(N,S=!1)=>{let O=await e.result(N);if(O===null){U("This task has no finished result to accept.");return}p({kind:"accept",result:O,reason:"",changed:S})},Tt=N=>Bt(N,S=>{S.plan!==null?p({kind:"approve",task:S}):S.hasResult?St(N):U("No plan or result is waiting for you on this task.")}),Ot=async(N,S,O)=>{H("Working…");let X;try{X=await e.act({kind:"complete",id:N.id,runId:N.runId,digest:N.digest,checked:S,reason:O})}finally{H(null)}if(X.ok){U(X.message),p({kind:"main"}),await LA();return}if(X.changed===!0){p({kind:"main"}),U("This result changed while you were reading it. Nothing was accepted."),await St(N.id,!0);return}X.needsPassword?p({kind:"password",message:X.message}):(U(X.message),p({kind:"main"}))},GA=N=>Bt(N,S=>{S.retry==null?U("Nothing to retry on this task."):p({kind:"retry",task:S,retry:S.retry})}),Dt=N=>Bt(N,S=>{S.planAsk==null?U("This task can't be planned now."):OA({kind:"plan",id:N,source:S.planAsk.source})}),He=(N,S)=>{if(S===null){U("Nothing is running on this task.");return}OA({kind:"stop",id:N,runId:S})},Ue=(N,S)=>{let O=N.decisions[0],X=O?.options[S];O===void 0||X===void 0||OA({kind:"answer",decision:O.id,option:X.id}).then(W=>{W&&p({kind:"main"})})},Zt=()=>{H("Opening the browser…"),u.openBrowser().then(N=>{U(N),H(null)})},de=()=>{u.owned()?p({kind:"quit"}):Ht("leave")},kt=(N,S,O)=>{if(Xt.current&&(Xt.current=!1,N==="h"||N==="t"))return p({kind:"main"}),!0;if(N==="g")return Xt.current=!0,!0;if(N==="/"){let X=KE.find(W=>W.keys==="/").tui;return U(typeof X=="string"?null:X.none),!0}return N==="n"?(p({kind:"compose",purpose:"new",id:null,text:"",project:0}),!0):N==="w"?(Zt(),!0):N==="?"?(p({kind:"help"}),!0):N==="q"?(de(),!0):S===null?!1:N==="a"?(Tt(S),!0):N==="s"?(He(S,O),!0):N==="b"?(p({kind:"compose",purpose:"revise",id:S,text:"",project:0}),!0):N==="r"?(GA(S),!0):N==="c"?(St(S),!0):N==="p"?(Dt(S),!0):!1},XA=(N,S)=>{if(J===null){if(S.ctrl&&N==="c"){de();return}switch(w.kind){case"main":{if(N==="j"||S.downArrow){v(O=>Math.min(O+1,Math.max(vA.length-1,0)));return}if(N==="k"||S.upArrow){v(O=>Math.max(O-1,0));return}if(S.return&&QA!==void 0){Bt(QA.id,O=>p({kind:"task",task:O}));return}if(S.escape){U(null);return}kt(N,QA?.id??null,QA?.liveRunId??null);return}case"task":{if(S.escape||S.leftArrow){p({kind:"main"});return}if(/^[1-9]$/.test(N)){Ue(w.task,Number(N)-1);return}kt(N,w.task.id,w.task.liveRunId);return}case"approve":{if(S.escape||N==="n"){p({kind:"main"}),U("Nothing approved.");return}if(N==="y"){let{task:O}=w;OA({kind:"approve",id:O.id,digest:O.plan.digest}).then(X=>{X&&p({kind:"main"})})}return}case"retry":{if(S.escape||N==="n"){p({kind:"main"}),U("Nothing retried.");return}if(N==="y"){let{task:O,retry:X}=w;OA({kind:"retry",id:O.id,runId:X.runId,digest:X.digest}).then(()=>p(W=>W.kind==="retry"?{kind:"main"}:W))}return}case"accept":{let{result:O}=w,X=()=>{p({kind:"main"}),U("Nothing accepted.")};if(S.escape){X();return}if(!O.ready||O.owed!=="exception"){if(N==="w"){Zt();return}if(!O.ready){(N==="n"||N==="q")&&X();return}if(N==="n"){X();return}N==="y"&&Ot(O,O.owed==="person-check",null);return}if(S.backspace||S.delete){p({...w,reason:w.reason.slice(0,-1)});return}if(S.return){let dA=w.reason.trim();dA!==""&&Ot(O,!1,dA);return}let W=Ef(N);W!==""&&p({...w,reason:w.reason+W});return}case"build":{if(S.escape){p({kind:"main"}),U("Nothing started.");return}if(N==="p"){let{text:O,repo:X}=w;p({kind:"main"}),OA({kind:"new",text:O,repo:X});return}if(S.return){let{preview:O,digest:X}=w.terms;OA({kind:"build",preview:O,digest:X}).then(W=>{W&&p({kind:"main"})})}return}case"compose":{if(S.escape){p({kind:"main"});return}let O=E?.projects??[];if(S.tab&&w.purpose==="new"&&O.length>1){p({...w,project:(w.project+1)%O.length});return}if(S.backspace||S.delete){p({...w,text:w.text.slice(0,-1)});return}if(S.return){let W=w.text.trim();if(W==="")return;let dA=w.purpose==="new"?{kind:"new",text:W,repo:O[w.project]??null}:{kind:"revise",id:w.id,text:W};if(p({kind:"main"}),dA.kind==="new"){H("Reading it…"),e.fastTerms(W,dA.repo).catch(()=>null).then(Ft=>{H(null),Ft===null?OA(dA):p({kind:"build",terms:Ft,text:W,repo:dA.repo})});return}OA(dA);return}let X=Ef(N);X!==""&&p({...w,text:w.text+X});return}case"quit":{N==="s"?Ht("stop"):N==="b"?Ht("keep"):S.escape&&p({kind:"main"});return}case"background":{let O=N==="y"||N==="Y"||S.return;if(!O&&N!=="n"&&N!=="N")return;p({kind:"main"}),H(O?"Moving Toolroll to the background…":"Saving…"),u.answerBackground(O).then(X=>{U(X),H(null)});return}default:(S.escape||S.return||N==="q")&&p({kind:"main"})}}},ie=(0,PA.useRef)(XA);ie.current=XA,OE((0,PA.useCallback)((N,S)=>ie.current(N,S),[]));let Jt=J??M;return(0,L.jsxs)(cA,{flexDirection:"column",children:[(0,L.jsxs)(cA,{justifyContent:"space-between",children:[(0,L.jsx)(eA,{bold:!0,children:"Toolroll"}),E?.needsYou?(0,L.jsx)(RA,{bold:!0,children:E.needsYou}):(0,L.jsx)(eA,{dimColor:!0,children:"Nothing needs you"}),E?.learning?(0,L.jsx)(RA,{dimColor:!0,children:E.learning}):null]}),lA(),Jt===null?null:(0,L.jsx)(RA,{children:Jt}),(0,L.jsx)(eA,{dimColor:!0,children:ut()})]});function ut(){switch(w.kind){case"main":return vA.length===0?"n new task · w browser · ? help · q quit":"j/k move · Enter open · n new · a approve/accept · b send back · r retry · p plan · s stop · w browser · ? help · q quit";case"task":return`a approve/accept · b send back · r retry${w.task.planAsk==null?"":" · p plan it"} · s stop · 1–9 answer · w browser · Esc back`;case"approve":return"y approve · Esc cancel";case"retry":return"y retry · Esc cancel";case"accept":return w.result.ready?w.result.owed==="person-check"?"y yes, it looks right · n no · w open in the browser · Esc cancel":w.result.owed==="exception"?"Enter accept · Esc cancel":"y accept · w open in the browser · Esc cancel":"w open in the browser · Esc back";case"build":return"Enter Build · p plan it first · Esc cancel";case"compose":return w.purpose==="new"&&(E?.projects.length??0)>1?"Enter send · Tab project · Esc cancel":"Enter send · Esc cancel";case"quit":return"s stop · b background · Esc cancel";case"background":return"y yes · n no";default:return"Esc back"}}function lA(){switch(w.kind){case"help":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Keys"}),Vy.map(N=>(0,L.jsx)(eA,{children:N},N))]});case"password":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"This needs your password"}),(0,L.jsx)(RA,{children:w.message}),E?.passwordSet?(0,L.jsx)(eA,{children:"Sign in in the browser, then do it there."}):(0,L.jsx)(eA,{children:"Set a password: run `toolroll password set`"})]});case"quit":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Quit Toolroll?"}),(0,L.jsx)(eA,{children:"s Stop agents and quit (running work is saved)"}),(0,L.jsx)(eA,{children:"b Keep running in the background"})]});case"background":return(0,L.jsx)(cA,{borderStyle:"single",paddingX:1,children:(0,L.jsx)(eA,{bold:!0,children:"Keep Toolroll running in the background? (Y/n)"})});case"build":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Build approves exactly this:"}),w.terms.terms.map((N,S)=>(0,L.jsx)(RA,{children:`${N.label}: ${N.words}`},S))]});case"compose":{let N=E?.projects[w.project]??null;return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"round",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:w.purpose==="new"?"New task":"What should change?"}),w.purpose==="new"&&N!==null?(0,L.jsx)(RA,{dimColor:!0,children:`In ${N}`}):null,(0,L.jsxs)(eA,{children:[(0,L.jsx)(RA,{children:w.text}),(0,L.jsx)(eA,{inverse:!0,children:" "})]})]})}case"accept":{let{result:N}=w;return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(RA,{bold:!0,children:`Accept this result? ${N.title}`}),(0,L.jsx)(RA,{dimColor:!0,children:`Build #${N.runId}`}),w.changed?(0,L.jsx)(eA,{bold:!0,children:"This result changed while you were reading it. This is the new one."}):null,N.summary.length===0?null:(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:N.summary.map((S,O)=>(0,L.jsx)(RA,{children:S},O))}),(0,L.jsxs)(cA,{flexDirection:"column",marginTop:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Changed files"}),N.files===null?(0,L.jsx)(eA,{children:"The changed files couldn't be read. Press w to see them in the browser."}):N.files.names.length===0?(0,L.jsx)(eA,{children:"None."}):(0,L.jsxs)(L.Fragment,{children:[N.files.names.map(S=>(0,L.jsx)(RA,{children:` ${S}`},S)),N.files.more>0?(0,L.jsx)(eA,{children:` and ${N.files.more} more`}):null]})]}),N.requirements.length===0?null:(0,L.jsxs)(cA,{flexDirection:"column",marginTop:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Requirements"}),N.requirements.map((S,O)=>(0,L.jsx)(RA,{children:` ${S.word}: ${S.statement}`},O))]}),N.checks.length===0?null:(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:N.checks.map((S,O)=>(0,L.jsx)(RA,{...O===0?{bold:!0}:{},children:S},O))}),(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:N.ready?N.owed==="person-check"?(0,L.jsx)(eA,{bold:!0,children:"Did you check it yourself? (y/n)"}):N.owed==="exception"?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(eA,{bold:!0,children:"Say why you accept it anyway:"}),(0,L.jsxs)(eA,{children:[(0,L.jsx)(RA,{children:w.reason}),(0,L.jsx)(eA,{inverse:!0,children:" "})]})]}):(0,L.jsx)(eA,{bold:!0,children:"Accept it and mark the task done? (y/n)"}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(eA,{bold:!0,children:"You can't accept it yet."}),N.blockers.map((S,O)=>(0,L.jsx)(RA,{children:S},O))]})})]})}case"retry":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(RA,{bold:!0,children:`Retry build #${w.retry.runId}? ${w.task.title}`}),(0,L.jsx)(eA,{children:"Same plan, same agent. Its branch and workspace are kept."})]});case"approve":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(RA,{bold:!0,children:`Approve this plan? ${w.task.title}`}),w.task.plan.lines.map((N,S)=>(0,L.jsx)(RA,{children:N},S))]});case"task":{let{task:N}=w,S=N.decisions[0];return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(RA,{bold:!0,children:N.title}),(0,L.jsx)(RA,{children:`${N.status}${N.detail===""?"":` · ${N.detail}`}`}),N.plan===null?null:(0,L.jsx)(eA,{children:"A plan waits for your approval (a)."}),(N.ready?.length??0)===0?null:(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:N.ready.map((O,X)=>(0,L.jsx)(RA,{...X===0?{bold:!0}:{},children:O},X))}),S===void 0?null:(0,L.jsxs)(cA,{flexDirection:"column",marginTop:1,children:[(0,L.jsx)(RA,{bold:!0,children:S.question}),S.options.map((O,X)=>(0,L.jsx)(RA,{children:`${X+1} ${O.label}`},O.id))]}),P.length===0?null:(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:P.slice(-12).map((O,X)=>(0,L.jsx)(RA,{dimColor:!0,children:O},X))})]})}default:return E===null?(0,L.jsx)(eA,{dimColor:!0,children:"Loading…"}):vA.length===0?(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Get to your first result"}),(I?.lines??["No tasks yet. Press n to write one."]).map((N,S)=>(0,L.jsx)(RA,{children:N},S))]}):(0,L.jsxs)(cA,{children:[(0,L.jsx)(cA,{flexDirection:"column",width:"45%",borderStyle:"single",paddingX:1,children:vA.map((N,S)=>(0,L.jsxs)(PA.Fragment,{children:[S===0||vA[S-1].group!==N.group?(0,L.jsx)(eA,{bold:!0,children:Py(N)}):null,(0,L.jsxs)(eA,{inverse:N===QA,wrap:"truncate-end",children:[N===QA?"> ":" ",(0,L.jsx)(RA,{children:N.title})," ",(0,L.jsx)(RA,{...N.needsYou?{bold:!0}:{dimColor:!0},children:N.status})]})]},N.id))}),(0,L.jsx)(cA,{flexDirection:"column",flexGrow:1,borderStyle:"single",paddingX:1,children:QA===void 0?(0,L.jsx)(eA,{dimColor:!0,children:"Nothing selected"}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(RA,{bold:!0,wrap:"truncate-end",children:QA.title}),(0,L.jsx)(RA,{children:`${QA.status}${QA.detail===""?"":` · ${QA.detail}`}`}),P.length===0?(0,L.jsx)(eA,{dimColor:!0,children:QA.liveRunId===null?"No agent is working on it now.":"Waiting for output…"}):P.slice(-12).map((N,S)=>(0,L.jsx)(RA,{dimColor:!0,wrap:"truncate-end",children:N},S))]})})]})}}}function Bf(){let e=[{id:"t3",title:"Sample: upgrade the test runner",status:"Needs you",detail:"Plan ready to approve",needsYou:!0,liveRunId:null,repo:null,group:"you"},{id:"t1",title:"Sample: fix the login redirect",status:"Running",detail:"Sample task (not real)",needsYou:!1,liveRunId:1,repo:null,group:"working"},{id:"t2",title:"Sample: add CSV export",status:"Complete",detail:"Sample task (not real)",needsYou:!1,liveRunId:null,repo:null,group:"done"}];return{fastTerms:async()=>null,snapshot:async()=>({rows:e,needsYou:"1 task needs you: Sample: upgrade the test runner",projects:[],passwordSet:!1}),task:async u=>{let a=e.find(g=>g.id===u);return a===void 0?null:{id:u,title:a.title,status:a.status,detail:a.detail,liveRunId:a.liveRunId,hasResult:a.status==="Complete",decisions:[],plan:a.needsYou?{digest:"sample",lines:["Goal: upgrade the test runner (sample)"]}:null}},live:u=>u==="t1"?["Editing src/auth.ts (sample)"]:[],changed:()=>0,act:async()=>({ok:!1,message:"This is a sample: nothing changes.",needsPassword:!1}),result:async u=>u!=="t2"?null:{id:u,runId:2,digest:"sample",title:"Sample: add CSV export",ready:!0,blockers:[],summary:["Added a CSV export button to the orders page (sample)."],files:{names:["src/export.ts (sample)"],more:0},requirements:[{word:"You check",statement:"The CSV opens in a spreadsheet (sample)."}],checks:["Sample: checks are not real here."],owed:"person-check"},setup:async()=>null}}function cf(){return{owned:()=>!1,openBrowser:async()=>"This is a sample.",shouldAskBackground:()=>!1,answerBackground:async()=>"This is a sample."}}var If=aA(qa(),1);async function A2(e=Bf(),u=cf()){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("The terminal UI needs an interactive terminal.");let a="leave";return await TE((0,If.jsx)(sf,{source:e,session:u,onExit:g=>{a=g}}),{exitOnCtrlC:!1}).waitUntilExit(),a}var Cf=process.argv[1];Cf!==void 0&&import.meta.url===$y(Cf).href&&A2().catch(e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}
|
|
70
|
+
`)}var YE=["you","working","done"],lf={you:"Waiting on you",working:"Working",done:"Done"};var L=aA(qa(),1);function RA({children:e,...u}){return(0,L.jsx)(eA,{...u,children:af(e)})}var jy={new:"new task",ink:"approve the plan (shows it in full first)","send-back":"send the result back",retry:"retry",plan:"ask for a plan",list:"back to the task list",help:"these keys"},Vy=["j / k or ↑ / ↓ move","Enter open the task",...[...KE.filter(e=>typeof e.tui=="string").reduce((e,u)=>e.set(u.tui,[...e.get(u.tui)??[],uf(u.keys)]),new Map)].flatMap(([e,u])=>[`${u.join(", ").padEnd(15)} ${jy[e]}`,...e==="ink"?["c accept the result (shows it first)"]:[]]),"s stop the running attempt","1–9 answer the task's question","w open in the browser","Esc back","q quit"];function Wy(e){let u=a=>a.group===null?YE.length:YE.indexOf(a.group);return e.map((a,l)=>({row:a,index:l})).sort((a,l)=>u(a.row)-u(l.row)||a.index-l.index).map(a=>a.row)}var Py=e=>e.group===null?"Other":lf[e.group],Ef=e=>[...e].filter(u=>u>=" "&&u!=="").join("");function sf({source:e,session:u,onExit:a,pollMs:l=1e3}){let{exit:g}=kE(),[E,s]=(0,PA.useState)(null),[I,Q]=(0,PA.useState)(null),[y,v]=(0,PA.useState)(0),[w,p]=(0,PA.useState)({kind:"main"}),[M,U]=(0,PA.useState)(null),[J,H]=(0,PA.useState)(null),[P,FA]=(0,PA.useState)([]),NA=(0,PA.useRef)(null),gA=(0,PA.useRef)(0),xA=(0,PA.useRef)(!1),vA=Wy(E?.rows??[]),QA=vA[Math.min(y,Math.max(vA.length-1,0))],LA=(0,PA.useCallback)(async()=>{let N=await e.snapshot();s(N),N.rows.length===0&&Q(await e.setup())},[e]);(0,PA.useEffect)(()=>{LA()},[LA]),(0,PA.useEffect)(()=>{let N=setInterval(()=>{gA.current+=1;let S=e.changed();(S!==NA.current||gA.current%5===0)&&(NA.current=S,LA())},l);return()=>clearInterval(N)},[e,LA,l]);let yt=QA?.id??null;(0,PA.useEffect)(()=>{if(yt===null){FA([]);return}FA(e.live(yt));let N=setInterval(()=>FA(e.live(yt)),l);return()=>clearInterval(N)},[e,yt,l]);let Ht=N=>{xA.current||(xA.current=!0,g(),a?.(N))},Xt=(0,PA.useRef)(!1),OA=async N=>{H("Working…");try{let S=await e.act(N);return S.ok?(U(S.message),await LA(),N.kind==="new"&&u.shouldAskBackground()&&p({kind:"background"}),!0):(S.needsPassword?p({kind:"password",message:S.message}):U(S.message),!1)}finally{H(null)}},Bt=async(N,S)=>{let O=await e.task(N);O===null?U("That task can't be read now."):S(O)},Ut=N=>Bt(N,S=>{S.plan===null?U("No plan is waiting for your approval on this task."):p({kind:"approve",task:S})}),St=async(N,S=!1)=>{let O=await e.result(N);if(O===null){U("This task has no finished result to accept.");return}p({kind:"accept",result:O,reason:"",changed:S})},Tt=N=>Bt(N,S=>{S.plan!==null?p({kind:"approve",task:S}):S.hasResult?St(N):U("No plan or result is waiting for you on this task.")}),Ot=async(N,S,O)=>{H("Working…");let X;try{X=await e.act({kind:"complete",id:N.id,runId:N.runId,digest:N.digest,checked:S,reason:O})}finally{H(null)}if(X.ok){U(X.message),p({kind:"main"}),await LA();return}if(X.changed===!0){p({kind:"main"}),U("This result changed while you were reading it. Nothing was accepted."),await St(N.id,!0);return}X.needsPassword?p({kind:"password",message:X.message}):(U(X.message),p({kind:"main"}))},GA=N=>Bt(N,S=>{S.retry==null?U("Nothing to retry on this task."):p({kind:"retry",task:S,retry:S.retry})}),Dt=N=>Bt(N,S=>{S.planAsk==null?U("This task can't be planned now."):OA({kind:"plan",id:N,source:S.planAsk.source})}),He=(N,S)=>{if(S===null){U("Nothing is running on this task.");return}OA({kind:"stop",id:N,runId:S})},Ue=(N,S)=>{let O=N.decisions[0],X=O?.options[S];O===void 0||X===void 0||OA({kind:"answer",decision:O.id,option:X.id}).then(W=>{W&&p({kind:"main"})})},Zt=()=>{H("Opening the browser…"),u.openBrowser().then(N=>{U(N),H(null)})},de=()=>{u.owned()?p({kind:"quit"}):Ht("leave")},kt=(N,S,O)=>{if(Xt.current&&(Xt.current=!1,N==="h"||N==="t"))return p({kind:"main"}),!0;if(N==="g")return Xt.current=!0,!0;if(N==="/"){let X=KE.find(W=>W.keys==="/").tui;return U(typeof X=="string"?null:X.none),!0}return N==="n"?(p({kind:"compose",purpose:"new",id:null,text:"",project:0}),!0):N==="w"?(Zt(),!0):N==="?"?(p({kind:"help"}),!0):N==="q"?(de(),!0):S===null?!1:N==="a"?(Tt(S),!0):N==="s"?(He(S,O),!0):N==="b"?(p({kind:"compose",purpose:"revise",id:S,text:"",project:0}),!0):N==="r"?(GA(S),!0):N==="c"?(St(S),!0):N==="p"?(Dt(S),!0):!1},XA=(N,S)=>{if(J===null){if(S.ctrl&&N==="c"){de();return}switch(w.kind){case"main":{if(N==="j"||S.downArrow){v(O=>Math.min(O+1,Math.max(vA.length-1,0)));return}if(N==="k"||S.upArrow){v(O=>Math.max(O-1,0));return}if(S.return&&QA!==void 0){Bt(QA.id,O=>p({kind:"task",task:O}));return}if(S.escape){U(null);return}kt(N,QA?.id??null,QA?.liveRunId??null);return}case"task":{if(S.escape||S.leftArrow){p({kind:"main"});return}if(/^[1-9]$/.test(N)){Ue(w.task,Number(N)-1);return}kt(N,w.task.id,w.task.liveRunId);return}case"approve":{if(S.escape||N==="n"){p({kind:"main"}),U("Nothing approved.");return}if(N==="y"){let{task:O}=w;OA({kind:"approve",id:O.id,digest:O.plan.digest}).then(X=>{X&&p({kind:"main"})})}return}case"retry":{if(S.escape||N==="n"){p({kind:"main"}),U("Nothing retried.");return}if(N==="y"){let{task:O,retry:X}=w;OA({kind:"retry",id:O.id,runId:X.runId,digest:X.digest}).then(()=>p(W=>W.kind==="retry"?{kind:"main"}:W))}return}case"accept":{let{result:O}=w,X=()=>{p({kind:"main"}),U("Nothing accepted.")};if(S.escape){X();return}if(!O.ready||O.owed!=="exception"){if(N==="w"){Zt();return}if(!O.ready){(N==="n"||N==="q")&&X();return}if(N==="n"){X();return}N==="y"&&Ot(O,O.owed==="person-check",null);return}if(S.backspace||S.delete){p({...w,reason:w.reason.slice(0,-1)});return}if(S.return){let dA=w.reason.trim();dA!==""&&Ot(O,!1,dA);return}let W=Ef(N);W!==""&&p({...w,reason:w.reason+W});return}case"build":{if(S.escape){p({kind:"main"}),U("Nothing started.");return}if(N==="p"){let{text:O,repo:X}=w;p({kind:"main"}),OA({kind:"new",text:O,repo:X});return}if(S.return){let{preview:O,digest:X}=w.terms;OA({kind:"build",preview:O,digest:X}).then(W=>{W&&p({kind:"main"})})}return}case"compose":{if(S.escape){p({kind:"main"});return}let O=E?.projects??[];if(S.tab&&w.purpose==="new"&&O.length>1){p({...w,project:(w.project+1)%O.length});return}if(S.backspace||S.delete){p({...w,text:w.text.slice(0,-1)});return}if(S.return){let W=w.text.trim();if(W==="")return;let dA=w.purpose==="new"?{kind:"new",text:W,repo:O[w.project]??null}:{kind:"revise",id:w.id,text:W};if(p({kind:"main"}),dA.kind==="new"){H("Reading it…"),e.fastTerms(W,dA.repo).catch(()=>null).then(Ft=>{H(null),Ft===null?OA(dA):p({kind:"build",terms:Ft,text:W,repo:dA.repo})});return}OA(dA);return}let X=Ef(N);X!==""&&p({...w,text:w.text+X});return}case"quit":{N==="s"?Ht("stop"):N==="b"?Ht("keep"):S.escape&&p({kind:"main"});return}case"background":{let O=N==="y"||N==="Y";if(!O&&N!=="n"&&N!=="N"&&!S.return)return;p({kind:"main"}),H(O?"Moving Toolroll to the background…":"Saving…"),u.answerBackground(O).then(X=>{U(X),H(null)});return}default:(S.escape||S.return||N==="q")&&p({kind:"main"})}}},ie=(0,PA.useRef)(XA);ie.current=XA,OE((0,PA.useCallback)((N,S)=>ie.current(N,S),[]));let Jt=J??M;return(0,L.jsxs)(cA,{flexDirection:"column",children:[(0,L.jsxs)(cA,{justifyContent:"space-between",children:[(0,L.jsx)(eA,{bold:!0,children:"Toolroll"}),E?.needsYou?(0,L.jsx)(RA,{bold:!0,children:E.needsYou}):(0,L.jsx)(eA,{dimColor:!0,children:"Nothing needs you"}),E?.learning?(0,L.jsx)(RA,{dimColor:!0,children:E.learning}):null]}),lA(),Jt===null?null:(0,L.jsx)(RA,{children:Jt}),(0,L.jsx)(eA,{dimColor:!0,children:ut()})]});function ut(){switch(w.kind){case"main":return vA.length===0?"n new task · w browser · ? help · q quit":"j/k move · Enter open · n new · a approve/accept · b send back · r retry · p plan · s stop · w browser · ? help · q quit";case"task":return`a approve/accept · b send back · r retry${w.task.planAsk==null?"":" · p plan it"} · s stop · 1–9 answer · w browser · Esc back`;case"approve":return"y approve · Esc cancel";case"retry":return"y retry · Esc cancel";case"accept":return w.result.ready?w.result.owed==="person-check"?"y yes, it looks right · n no · w open in the browser · Esc cancel":w.result.owed==="exception"?"Enter accept · Esc cancel":"y accept · w open in the browser · Esc cancel":"w open in the browser · Esc back";case"build":return"Enter Build · p plan it first · Esc cancel";case"compose":return w.purpose==="new"&&(E?.projects.length??0)>1?"Enter send · Tab project · Esc cancel":"Enter send · Esc cancel";case"quit":return"s stop · b background · Esc cancel";case"background":return"y yes · n no";default:return"Esc back"}}function lA(){switch(w.kind){case"help":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Keys"}),Vy.map(N=>(0,L.jsx)(eA,{children:N},N))]});case"password":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"This needs your password"}),(0,L.jsx)(RA,{children:w.message}),E?.passwordSet?(0,L.jsx)(eA,{children:"Sign in in the browser, then do it there."}):(0,L.jsx)(eA,{children:"Set a password: run `toolroll password set`"})]});case"quit":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Quit Toolroll?"}),(0,L.jsx)(eA,{children:"s Stop agents and quit (running work is saved)"}),(0,L.jsx)(eA,{children:"b Keep running, and start when you log in"})]});case"background":return(0,L.jsx)(cA,{borderStyle:"single",paddingX:1,children:(0,L.jsx)(eA,{bold:!0,children:"Start Toolroll when you log in, so tasks keep going? (y/N)"})});case"build":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Build approves exactly this:"}),w.terms.terms.map((N,S)=>(0,L.jsx)(RA,{children:`${N.label}: ${N.words}`},S))]});case"compose":{let N=E?.projects[w.project]??null;return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"round",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:w.purpose==="new"?"New task":"What should change?"}),w.purpose==="new"&&N!==null?(0,L.jsx)(RA,{dimColor:!0,children:`In ${N}`}):null,(0,L.jsxs)(eA,{children:[(0,L.jsx)(RA,{children:w.text}),(0,L.jsx)(eA,{inverse:!0,children:" "})]})]})}case"accept":{let{result:N}=w;return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(RA,{bold:!0,children:`Accept this result? ${N.title}`}),(0,L.jsx)(RA,{dimColor:!0,children:`Build #${N.runId}`}),w.changed?(0,L.jsx)(eA,{bold:!0,children:"This result changed while you were reading it. This is the new one."}):null,N.summary.length===0?null:(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:N.summary.map((S,O)=>(0,L.jsx)(RA,{children:S},O))}),(0,L.jsxs)(cA,{flexDirection:"column",marginTop:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Changed files"}),N.files===null?(0,L.jsx)(eA,{children:"The changed files couldn't be read. Press w to see them in the browser."}):N.files.names.length===0?(0,L.jsx)(eA,{children:"None."}):(0,L.jsxs)(L.Fragment,{children:[N.files.names.map(S=>(0,L.jsx)(RA,{children:` ${S}`},S)),N.files.more>0?(0,L.jsx)(eA,{children:` and ${N.files.more} more`}):null]})]}),N.requirements.length===0?null:(0,L.jsxs)(cA,{flexDirection:"column",marginTop:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Requirements"}),N.requirements.map((S,O)=>(0,L.jsx)(RA,{children:` ${S.word}: ${S.statement}`},O))]}),N.checks.length===0?null:(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:N.checks.map((S,O)=>(0,L.jsx)(RA,{...O===0?{bold:!0}:{},children:S},O))}),(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:N.ready?N.owed==="person-check"?(0,L.jsx)(eA,{bold:!0,children:"Did you check it yourself? (y/n)"}):N.owed==="exception"?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(eA,{bold:!0,children:"Say why you accept it anyway:"}),(0,L.jsxs)(eA,{children:[(0,L.jsx)(RA,{children:w.reason}),(0,L.jsx)(eA,{inverse:!0,children:" "})]})]}):(0,L.jsx)(eA,{bold:!0,children:"Accept it and mark the task done? (y/n)"}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(eA,{bold:!0,children:"You can't accept it yet."}),N.blockers.map((S,O)=>(0,L.jsx)(RA,{children:S},O))]})})]})}case"retry":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(RA,{bold:!0,children:`Retry build #${w.retry.runId}? ${w.task.title}`}),(0,L.jsx)(eA,{children:"Same plan, same agent. Its branch and workspace are kept."})]});case"approve":return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(RA,{bold:!0,children:`Approve this plan? ${w.task.title}`}),w.task.plan.lines.map((N,S)=>(0,L.jsx)(RA,{children:N},S))]});case"task":{let{task:N}=w,S=N.decisions[0];return(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(RA,{bold:!0,children:N.title}),(0,L.jsx)(RA,{children:`${N.status}${N.detail===""?"":` · ${N.detail}`}`}),N.plan===null?null:(0,L.jsx)(eA,{children:"A plan waits for your approval (a)."}),(N.ready?.length??0)===0?null:(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:N.ready.map((O,X)=>(0,L.jsx)(RA,{...X===0?{bold:!0}:{},children:O},X))}),S===void 0?null:(0,L.jsxs)(cA,{flexDirection:"column",marginTop:1,children:[(0,L.jsx)(RA,{bold:!0,children:S.question}),S.options.map((O,X)=>(0,L.jsx)(RA,{children:`${X+1} ${O.label}`},O.id))]}),P.length===0?null:(0,L.jsx)(cA,{flexDirection:"column",marginTop:1,children:P.slice(-12).map((O,X)=>(0,L.jsx)(RA,{dimColor:!0,children:O},X))})]})}default:return E===null?(0,L.jsx)(eA,{dimColor:!0,children:"Loading…"}):vA.length===0?(0,L.jsxs)(cA,{flexDirection:"column",borderStyle:"single",paddingX:1,children:[(0,L.jsx)(eA,{bold:!0,children:"Get to your first result"}),(I?.lines??["No tasks yet. Press n to write one."]).map((N,S)=>(0,L.jsx)(RA,{children:N},S))]}):(0,L.jsxs)(cA,{children:[(0,L.jsx)(cA,{flexDirection:"column",width:"45%",borderStyle:"single",paddingX:1,children:vA.map((N,S)=>(0,L.jsxs)(PA.Fragment,{children:[S===0||vA[S-1].group!==N.group?(0,L.jsx)(eA,{bold:!0,children:Py(N)}):null,(0,L.jsxs)(eA,{inverse:N===QA,wrap:"truncate-end",children:[N===QA?"> ":" ",(0,L.jsx)(RA,{children:N.title})," ",(0,L.jsx)(RA,{...N.needsYou?{bold:!0}:{dimColor:!0},children:N.status})]})]},N.id))}),(0,L.jsx)(cA,{flexDirection:"column",flexGrow:1,borderStyle:"single",paddingX:1,children:QA===void 0?(0,L.jsx)(eA,{dimColor:!0,children:"Nothing selected"}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(RA,{bold:!0,wrap:"truncate-end",children:QA.title}),(0,L.jsx)(RA,{children:`${QA.status}${QA.detail===""?"":` · ${QA.detail}`}`}),P.length===0?(0,L.jsx)(eA,{dimColor:!0,children:QA.liveRunId===null?"No agent is working on it now.":"Waiting for output…"}):P.slice(-12).map((N,S)=>(0,L.jsx)(RA,{dimColor:!0,wrap:"truncate-end",children:N},S))]})})]})}}}function Bf(){let e=[{id:"t3",title:"Sample: upgrade the test runner",status:"Needs you",detail:"Plan ready to approve",needsYou:!0,liveRunId:null,repo:null,group:"you"},{id:"t1",title:"Sample: fix the login redirect",status:"Running",detail:"Sample task (not real)",needsYou:!1,liveRunId:1,repo:null,group:"working"},{id:"t2",title:"Sample: add CSV export",status:"Complete",detail:"Sample task (not real)",needsYou:!1,liveRunId:null,repo:null,group:"done"}];return{fastTerms:async()=>null,snapshot:async()=>({rows:e,needsYou:"1 task needs you: Sample: upgrade the test runner",projects:[],passwordSet:!1}),task:async u=>{let a=e.find(g=>g.id===u);return a===void 0?null:{id:u,title:a.title,status:a.status,detail:a.detail,liveRunId:a.liveRunId,hasResult:a.status==="Complete",decisions:[],plan:a.needsYou?{digest:"sample",lines:["Goal: upgrade the test runner (sample)"]}:null}},live:u=>u==="t1"?["Editing src/auth.ts (sample)"]:[],changed:()=>0,act:async()=>({ok:!1,message:"This is a sample: nothing changes.",needsPassword:!1}),result:async u=>u!=="t2"?null:{id:u,runId:2,digest:"sample",title:"Sample: add CSV export",ready:!0,blockers:[],summary:["Added a CSV export button to the orders page (sample)."],files:{names:["src/export.ts (sample)"],more:0},requirements:[{word:"You check",statement:"The CSV opens in a spreadsheet (sample)."}],checks:["Sample: checks are not real here."],owed:"person-check"},setup:async()=>null}}function cf(){return{owned:()=>!1,openBrowser:async()=>"This is a sample.",shouldAskBackground:()=>!1,answerBackground:async()=>"This is a sample."}}var If=aA(qa(),1);async function A2(e=Bf(),u=cf()){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("The terminal UI needs an interactive terminal.");let a="leave";return await TE((0,If.jsx)(sf,{source:e,session:u,onExit:g=>{a=g}}),{exitOnCtrlC:!1}).waitUntilExit(),a}var Cf=process.argv[1];Cf!==void 0&&import.meta.url===$y(Cf).href&&A2().catch(e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}
|
|
71
71
|
`),process.exitCode=1});export{A2 as startTui};
|
|
72
72
|
/*! Bundled license information:
|
|
73
73
|
|
package/dist/typed-start.js
CHANGED
|
@@ -1,39 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A typed yes to a Start card, on Telegram (docs/plans/one-step-chat.md C5). Toolroll reads the word when the message
|
|
3
|
-
* arrives, before any model runs: the lead never sees it as an instruction and has no tool that presses a card. Which
|
|
4
|
-
* card a yes belongs to comes from Telegram's own message ids and Toolroll's delivery record (chat_part), never from the
|
|
5
|
-
* text or the lead.
|
|
6
|
-
*
|
|
7
|
-
* Read at ingress (telegram.ts applyConversation, the typed-message path only) in the transaction that saves the message,
|
|
8
|
-
* and read again from the tables by confirmTypedStart (lead-doors.ts) in the transaction that acts on it.
|
|
9
|
-
*/
|
|
10
1
|
import { sharedActionAllowsChallenge, sharedActionPayload } from "./chat-actions.js";
|
|
11
|
-
/** The card's last line on Telegram, outside the terms (terms are digest-bound), in Toolroll's fixed words. */
|
|
12
2
|
export const TYPED_START_LINE = "Tap Start work, or reply yes.";
|
|
13
|
-
/** What a yes that counted for nothing says. It is never passed to the lead. */
|
|
14
3
|
export const TYPED_START_REFUSED = "That yes didn't start anything. Tap Start work on the card.";
|
|
15
4
|
const WORDS = new Set(["yes", "y", "yep", "yeah", "yes please", "yes start", "start", "start it", "go ahead", "do it"]);
|
|
16
|
-
/** Whether a typed message is exactly one of the fixed yes words: trimmed, lower-cased, one trailing `.` or `!` removed.
|
|
17
|
-
* Anything longer or different ("yes but make it blue", "ok", "sure") is an ordinary message to the lead. */
|
|
18
5
|
export function typedYes(text) {
|
|
19
6
|
const word = text.trim().toLowerCase().replace(/[.!]$/, "");
|
|
20
7
|
return WORDS.has(word);
|
|
21
8
|
}
|
|
22
|
-
/**
|
|
23
|
-
* The Start card a yes in this chat answers, by ids, or null. Every condition from the plan:
|
|
24
|
-
* - the chat's last sent card is a card for a `task_start` proposal: sent (a confirmed message id), never
|
|
25
|
-
* uncertain, the last part of its event, sent with its buttons and the fixed "reply yes" line, its terms whole on the
|
|
26
|
-
* card (sharedActionAllowsChallenge);
|
|
27
|
-
* - the message is a Telegram reply to that card's message (`reply`), or replies to nothing and its message id is the
|
|
28
|
-
* card's plus one (`next`): nothing at all was sent or typed in the chat between them;
|
|
29
|
-
* - the proposal is pending, the only pending proposal in the person's own thread with the lead (never a team room),
|
|
30
|
-
* drafted in a turn that answered (one finalized after a timeout doesn't qualify).
|
|
31
|
-
*/
|
|
32
9
|
export function typedStartCard(store, chat, message) {
|
|
33
10
|
const own = /^[1-9][0-9]{0,15}$/;
|
|
34
11
|
if (!own.test(message.id) || (message.replyTo !== null && !own.test(message.replyTo)))
|
|
35
12
|
return null;
|
|
36
|
-
// The chat's last sent card, by Telegram's own message id (ids in one private chat run in order, both directions).
|
|
37
13
|
const last = store.handle.prepare(`SELECT p.id, p.event, p.ordinal, p.payload, p.message, p.uncertain FROM chat_part p
|
|
38
14
|
JOIN chat_event e ON e.provider = p.provider AND e.id = p.event
|
|
39
15
|
WHERE p.provider = 'telegram' AND e.binding = ? AND e.channel = ? AND p.state = 'sent' AND p.message IS NOT NULL
|
|
@@ -75,12 +51,10 @@ export function typedStartCard(store, chat, message) {
|
|
|
75
51
|
return null;
|
|
76
52
|
return { proposal: proposal.id, cardMessage, stamp: action.stamp, how };
|
|
77
53
|
}
|
|
78
|
-
/** Record a typed yes for the message just saved (event `m<update_id>`), in the caller's transaction. */
|
|
79
54
|
export function recordTypedStart(store, event, card, now) {
|
|
80
55
|
store.handle.prepare(`INSERT INTO chat_typed_start (provider, event, proposal, card_message, stamp, how, created) VALUES ('telegram', ?, ?, ?, ?, ?, ?)`)
|
|
81
56
|
.run(event, card.proposal, card.cardMessage, card.stamp, card.how, now.toISOString());
|
|
82
57
|
}
|
|
83
|
-
/** A message's typed-yes record, or null when it has none. */
|
|
84
58
|
export function typedStartOf(store, provider, event) {
|
|
85
59
|
const row = store.handle.prepare("SELECT * FROM chat_typed_start WHERE provider = ? AND event = ?").get(provider, event);
|
|
86
60
|
if (row === undefined)
|
|
@@ -89,7 +63,6 @@ export function typedStartOf(store, provider, event) {
|
|
|
89
63
|
outcome: row["outcome"] === "started" || row["outcome"] === "refused" || row["outcome"] === "not-counted" ? row["outcome"] : null,
|
|
90
64
|
taskId: row["task_id"] === null ? null : String(row["task_id"]) };
|
|
91
65
|
}
|
|
92
|
-
/** Whether an UNSETTLED typed yes names exactly this proposal: the only thing `typedStart` may open, and only once. */
|
|
93
66
|
export function typedStartNames(store, typed, proposal) {
|
|
94
67
|
if (typed.provider !== "telegram" || typeof typed.event !== "string")
|
|
95
68
|
return false;
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests that run real commands on a machine with no OS fence (CI's Ubuntu runners, where unprivileged namespaces are
|
|
3
|
-
* off) allow unconfined agents on their own store, as an instance operator there would; anywhere a fence exists,
|
|
4
|
-
* nothing changes and the fence is what the test runs under.
|
|
5
|
-
*/
|
|
6
1
|
import { linuxFenceAvailable, macosFenceAvailable } from "./agent-fence.js";
|
|
7
2
|
export function allowWhereUnfenced(store) {
|
|
8
3
|
if (!macosFenceAvailable() && !linuxFenceAvailable())
|