toolroll 0.9.103 → 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 +65 -0
- package/README.md +27 -27
- 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 +117 -103
- 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 +3 -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 +2 -16
- 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 +168 -0
- package/dist/local-owner.js +15 -80
- 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 +2 -17
- package/dist/operate-remote.js +0 -33
- package/dist/operate.js +280 -2304
- 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 +3 -18
- 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 +11 -30
- package/dist/public-check.js +0 -16
- package/dist/publish.js +1 -150
- package/dist/pull-request-flow.js +6 -74
- 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 +26 -103
- 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 +9 -28
- 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 +88 -566
- 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 +29 -564
- 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 +9 -86
- 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 +17 -497
- 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 +8 -133
- 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 +12 -227
- package/dist/server/tasks.js +37 -531
- 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 +8 -73
- 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 +66 -19
- 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 +91 -40
- package/dist/tui.js +54 -54
- 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 +5 -4
- 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 -318
- 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 -1972
- 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 -539
- 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 -41
- 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.d.ts +0 -124
- 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 -52
- 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 -156
- 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 -35
- 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 -1067
- 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 -80
- 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 -59
- 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 -754
- package/dist/server/render-settings.d.ts +0 -93
- package/dist/server/render-tasks.d.ts +0 -774
- 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 -342
- 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 -83
- 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 -30
- 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 -144
- 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/server/chat.js
CHANGED
|
@@ -3,7 +3,6 @@ import { approvalPasswordField } from "../approval-password.js";
|
|
|
3
3
|
import { CHAT_ACTION_LOCAL_ACTS, localOwnerRefusal } from "../local-owner.js";
|
|
4
4
|
import { handlersOf } from './handler-registry.js';
|
|
5
5
|
import { DEPRECATED_PAGE } from "../deprecations.js";
|
|
6
|
-
/** chat handlers, moved without changing their route bodies. */
|
|
7
6
|
import { randomBytes } from "node:crypto";
|
|
8
7
|
import { chmodSync, rmSync as rmFileSync, writeFileSync as writeFsFileSync } from "node:fs";
|
|
9
8
|
import { dirname, join } from "node:path";
|
|
@@ -48,19 +47,11 @@ import { completionForm, hardBlockerOf, homePhaseWords, owedAcceptanceOf, result
|
|
|
48
47
|
import { browserCaller, oneLineUa } from "./session.js";
|
|
49
48
|
export function createChatHandlers(runtime) {
|
|
50
49
|
const { firstRunStepsNow, managedRepos, leadWords, store, options, phoneSetup, visible, liveTurns, leadSaid, evidenceRoot, clock, sessions, CHAT_CANDIDATE_TTL_MS, chatFetcher, CHAT_CANDIDATES_PER_APPROVER, chatCeilingDigest, workAccess, familyOf, firstTasks, leadPrincipal, taskChatFocus, chatScopeOf, leadConversationRows, demoLeadHere, sendScreen, chromeFor, teamBrowserReply, team, teamChatProvider, runVisible, runIsLive, resultDetailOf, pullRequestTargetOf, chatEnablement, sharedIndexPage, startLeadConversation, projectFamilyPeek, needsYouBadge, liveRefreshSeconds, chatKeyFor, chatCatalog, chatCatalogKnown, providerHome, mintApprovalNonce, checkLocalAgents, agentSignInCommand, bustBadge, authenticateApprover, revisionDestination, armTaskResume, consumeApprovalNonce } = runtime;
|
|
51
|
-
// The read-only refresh (package 2): the same JSON status as before —
|
|
52
|
-
// session binding, the send receipt, the live turn — plus a version
|
|
53
|
-
// of the DISPLAYED facts and, only when the caller's version differs,
|
|
54
|
-
// the server-rendered thread / task fragments the page swaps into
|
|
55
|
-
// its safe regions. No-store, cookie-and-approver only, the same
|
|
56
|
-
// admission and ceiling checks as the page; nothing here writes.
|
|
57
50
|
async function mateStatus(ctx) {
|
|
58
51
|
const { url, response, now } = ctx;
|
|
59
52
|
const who = browserCaller(ctx.who);
|
|
60
53
|
const found = store.activeLeadSession(who.name);
|
|
61
54
|
const principal = leadPrincipal(who);
|
|
62
|
-
// Quiet page visits: a membership conversation not started yet is still a page to keep current (its task's
|
|
63
|
-
// progress and approval); it reads as session 0, and nothing here starts it.
|
|
64
55
|
const enabled = chatEnablement();
|
|
65
56
|
const notStarted = principal !== null && enabled.ok && enabled.billing === "subscription" && (found === null || found.ceilingDigest !== principal.ceilingDigest);
|
|
66
57
|
const session = notStarted ? null : found;
|
|
@@ -69,13 +60,10 @@ export function createChatHandlers(runtime) {
|
|
|
69
60
|
}
|
|
70
61
|
const sessionId = session?.id ?? NOT_STARTED_SESSION;
|
|
71
62
|
const request = url.searchParams.get("request") ?? "";
|
|
72
|
-
// Received: the engine took it, or the lead queue holds it (a queued acknowledgement lost on the way still frees the draft).
|
|
73
63
|
const received = session !== null && /^[a-f0-9]{32}$/.test(request) && store.leadRequestReceived(session.id, request);
|
|
74
64
|
const requestedTask = url.searchParams.get("task");
|
|
75
65
|
const focusTask = requestedTask === null || requestedTask === "" ? null : taskChatFocus(requestedTask, now, who, { mintNonce: false });
|
|
76
66
|
if (requestedTask !== null && requestedTask !== "" && focusTask === null) {
|
|
77
|
-
// The lens's task is gone or no longer admitted: the page keeps its
|
|
78
|
-
// draft and says so; it never falls back to the unified thread.
|
|
79
67
|
return respond(response, 200, "application/json", JSON.stringify({ session: sessionId, task: requestedTask, unavailable: true, received }));
|
|
80
68
|
}
|
|
81
69
|
const chatProject = focusTask !== null ? null : chatProjectOf(url.searchParams.getAll("project").filter(one => one !== ""));
|
|
@@ -102,7 +90,6 @@ export function createChatHandlers(runtime) {
|
|
|
102
90
|
...(fragments === null ? {} : { fragments }),
|
|
103
91
|
}));
|
|
104
92
|
}
|
|
105
|
-
// `toolroll demo`: Chat is the scripted lead, never a model.
|
|
106
93
|
async function demoLive(ctx) {
|
|
107
94
|
const { who, response } = ctx;
|
|
108
95
|
const lead = demoLeadHere();
|
|
@@ -125,8 +112,6 @@ export function createChatHandlers(runtime) {
|
|
|
125
112
|
functional: { script: DEMO_CHAT_SCRIPT, fetches: true },
|
|
126
113
|
}));
|
|
127
114
|
}
|
|
128
|
-
// Cookie sessions only (Codex v3 review, change 7): drafts live in
|
|
129
|
-
// THIS session's memory; a bearer caller has nowhere to keep them.
|
|
130
115
|
if (who.via !== "cookie")
|
|
131
116
|
return refuse(response, who, 403, "chat is a browser surface — it keeps your drafts in the session");
|
|
132
117
|
const teamAsked = url.searchParams.get('team') === '1' || url.searchParams.has('conversation') || url.searchParams.has('lead') || url.searchParams.has('proposal');
|
|
@@ -153,12 +138,9 @@ export function createChatHandlers(runtime) {
|
|
|
153
138
|
chrome: chromeFor(null, 'chat', undefined, 'all'), workspace: { team: reply.snapshot, notices: [DEPRECATED_PAGE.team, ...(said ? [said] : [])] },
|
|
154
139
|
}));
|
|
155
140
|
}
|
|
156
|
-
// Settling a turn past its deadline (its spend) and expiring old proposals are the background passes' work, never a
|
|
157
|
-
// page visit's (docs/plans/get-side-effects.md); the lead's follow pass sweeps every few seconds.
|
|
158
141
|
sweepChatDrafts(Date.now());
|
|
159
142
|
const requestedTask = url.searchParams.get("task");
|
|
160
143
|
const focusTask = taskChatFocus(requestedTask, now, who, { mintNonce: !requestContext.getStore()?.workspaceRead });
|
|
161
|
-
// A project's own thread (v77): /chat?project=<path>. A task lens wins.
|
|
162
144
|
const chatProject = focusTask !== null ? null : chatProjectOf(url.searchParams.getAll("project"));
|
|
163
145
|
if (chatProject === undefined)
|
|
164
146
|
return refuse(response, who, 404, "That project is not available in this workspace.", "/chat");
|
|
@@ -166,8 +148,6 @@ export function createChatHandlers(runtime) {
|
|
|
166
148
|
url.searchParams.set("task", focusTask.id);
|
|
167
149
|
return redirect(response, `/chat?${url.searchParams.toString()}`);
|
|
168
150
|
}
|
|
169
|
-
// A seal receipt names the exact child it returned. Reopening an old
|
|
170
|
-
// receipt must not present a newer revision's approval as its answer.
|
|
171
151
|
const requestedRevision = url.searchParams.get("revision");
|
|
172
152
|
if (requestedRevision !== null) {
|
|
173
153
|
if (focusTask === null || !focusTask.family.versions.some(one => one.id === requestedRevision) || url.searchParams.has("result")) {
|
|
@@ -176,10 +156,6 @@ export function createChatHandlers(runtime) {
|
|
|
176
156
|
if (requestedRevision !== focusTask.executionId)
|
|
177
157
|
return redirect(response, `${taskHref(focusTask.id)}?version=${encodeURIComponent(requestedRevision)}`);
|
|
178
158
|
}
|
|
179
|
-
// The result detail (package 3): `?result=<run>` names one finished
|
|
180
|
-
// build OF THIS TASK; anything else — another task's run, a live or
|
|
181
|
-
// failed attempt, a number that is no run — says so and shows the
|
|
182
|
-
// conversation alone. The task lens is never inferred from the run.
|
|
183
159
|
const requestedResult = url.searchParams.get("result");
|
|
184
160
|
const resultRun = (() => {
|
|
185
161
|
if (focusTask === null || requestedResult === null || !/^[0-9]{1,15}$/.test(requestedResult))
|
|
@@ -193,8 +169,6 @@ export function createChatHandlers(runtime) {
|
|
|
193
169
|
})();
|
|
194
170
|
const roomId = url.searchParams.get('conversation');
|
|
195
171
|
const resultLink = (href) => roomId ? href + '&conversation=' + encodeURIComponent(roomId) : href;
|
|
196
|
-
// Accept and finish is here: the one act that accepts the person's own checks and finishes the task.
|
|
197
|
-
// Never offered where Complete is refused whatever is accepted (a failed check, a HIGH finding).
|
|
198
172
|
const finishes = resultRun !== null && who.role === 'approver' && focusTask?.assignment?.state === 'ready-to-check' && focusTask.assignment.receipt?.runId === resultRun.id &&
|
|
199
173
|
hardBlockerOf(focusTask.assignment) === null;
|
|
200
174
|
const resultPanel = resultRun === null
|
|
@@ -232,7 +206,6 @@ export function createChatHandlers(runtime) {
|
|
|
232
206
|
},
|
|
233
207
|
}));
|
|
234
208
|
}
|
|
235
|
-
// Pending cards, and the recently answered ones so the door's words are read (last 30).
|
|
236
209
|
const repos = managedRepos();
|
|
237
210
|
const allCoordinatorRows = who.role === "approver" ? store.listCoordinatorProposals({ repos, states: ["pending", "confirmed", "refused"], limit: 30 }) : [];
|
|
238
211
|
const coordinatorRows = focusTask === null
|
|
@@ -241,24 +214,11 @@ export function createChatHandlers(runtime) {
|
|
|
241
214
|
const enabled = chatEnablement();
|
|
242
215
|
const pending = store.liveChatTurnFor(who.name);
|
|
243
216
|
const latched = enabled.ok ? store.latchedChatTurns(enabled.credentialKey) : [];
|
|
244
|
-
// The mate (mate arc §5): while a mate session is live, /chat IS the
|
|
245
|
-
// thread — the same rows the CLI reads. Without one, fleet chat as
|
|
246
|
-
// before, plus the card that mints a session.
|
|
247
217
|
const leadSession = enabled.ok && who.role === "approver" ? store.activeLeadSession(who.name) : null;
|
|
248
218
|
const principal = enabled.ok && who.role === "approver" ? leadPrincipal(who) : null;
|
|
249
|
-
// Chat opens ready to talk (2026-09-23): an approver in good standing
|
|
250
|
-
// needs no second password to start their own conversation. Quiet page
|
|
251
|
-
// visits (2026-10-27): a visit only shows it. With no membership
|
|
252
|
-
// conversation yet (or only one under another ceiling), the page shows
|
|
253
|
-
// the composer and the first message starts one (chatSend); nothing
|
|
254
|
-
// here writes. Direct-API chat keeps a one-tap Start with its visible
|
|
255
|
-
// spending limit (no password).
|
|
256
219
|
const settingsView = url.searchParams.get("settings") === "1";
|
|
257
220
|
const notStarted = !settingsView && enabled.ok && enabled.billing === "subscription" && principal !== null &&
|
|
258
221
|
(leadSession === null || leadSession.ceilingDigest !== principal.ceilingDigest);
|
|
259
|
-
// A session under another ceiling is not continuable from here; a GET
|
|
260
|
-
// writes nothing (slice-2 review, finding 7) — the mint card below
|
|
261
|
-
// starts a new conversation, and minting ends the old session.
|
|
262
222
|
const ceilingStale = !notStarted && enabled.ok && leadSession !== null && principal !== null && leadSession.ceilingDigest !== principal.ceilingDigest;
|
|
263
223
|
const catchUp = leadBriefHtml(assignmentCatchUp(store, now, { principal: "operator", repos }, { limit: 6 }, evidenceRoot));
|
|
264
224
|
const chatProjects = repos.map((repo, index) => {
|
|
@@ -267,8 +227,6 @@ export function createChatHandlers(runtime) {
|
|
|
267
227
|
peek = projectFamilyPeek(repo, now);
|
|
268
228
|
}
|
|
269
229
|
catch {
|
|
270
|
-
// The project rail is orientation, like chrome's project peek: a
|
|
271
|
-
// failed count must not make the conversation itself disappear.
|
|
272
230
|
}
|
|
273
231
|
return { id: `r${index + 1}`, label: projectName(repo), path: repo, peek };
|
|
274
232
|
});
|
|
@@ -281,14 +239,10 @@ export function createChatHandlers(runtime) {
|
|
|
281
239
|
fleetSnapshot.attentionCount = needsYouBadge(null);
|
|
282
240
|
}
|
|
283
241
|
catch {
|
|
284
|
-
// The project rail already degrades each pulse independently.
|
|
285
|
-
// A failed briefing query must not make the conversation vanish.
|
|
286
242
|
}
|
|
287
243
|
}
|
|
288
|
-
// The first run belongs to the lead conversation, for someone who can act on it.
|
|
289
244
|
const firstRun = focusTask === null && who.role === "approver" ? chatFirstRun(now, chatProject) : undefined;
|
|
290
245
|
const phone = focusTask === null && who.via === "cookie" ? phoneCard(who, now) : undefined;
|
|
291
|
-
// Console v2: the landing's live view (who is working, four counts, Catch up in tabs).
|
|
292
246
|
const home = focusTask === null && chatProject === null && !roomId ? chatHomeOf(who, repos, now) : null;
|
|
293
247
|
const withFirstRun = (shown) => firstRun === undefined && phone === undefined && home === null ? shown
|
|
294
248
|
: { ...shown, ...(home === null ? {} : { refreshSeconds: liveRefreshSeconds() }),
|
|
@@ -362,8 +316,6 @@ export function createChatHandlers(runtime) {
|
|
|
362
316
|
if (turn === null || !turn.unknownSpend || turn.acknowledgedAt !== null) {
|
|
363
317
|
return refuse(response, who, 404, "no acknowledgement is waiting there", "/chat");
|
|
364
318
|
}
|
|
365
|
-
// The one nonce in chat — this screen restates exact financial terms
|
|
366
|
-
// and re-enables spend, which is precisely what nonces are for.
|
|
367
319
|
const nonce = mintApprovalNonce(who.name, `chat-ack-${turn.id}`, String(turn.reservedMicrousd));
|
|
368
320
|
return sendScreen(response, 200, chatAckPage(chromeFor(project, "chat"), turn, nonce, store.leadTurnOfStep(turn.id)));
|
|
369
321
|
}
|
|
@@ -392,7 +344,6 @@ export function createChatHandlers(runtime) {
|
|
|
392
344
|
const id = proposalId, saved = store.getLeadProposal(id), savedAction = saved?.kind === 'action' ? sharedActionPayload(saved.payload) : null;
|
|
393
345
|
if (saved && savedAction && saved.state !== 'pending' && (sharedConversation !== null || store.getLeadThread(saved.thread)?.approver === principal.name) && principal.repos.includes(savedAction.repo) && store.accountCanAccess(principal.name, savedAction.repo)) {
|
|
394
346
|
const task = typeof saved.outcome?.['taskId'] === 'string' ? saved.outcome['taskId'] : typeof savedAction.request['task'] === 'string' ? savedAction.request['task'] : null;
|
|
395
|
-
// A flow action leads back to its flow (a page path of our own making, never the proposal's words).
|
|
396
347
|
const flowId = savedAction.operation.startsWith('flow_') && Number.isSafeInteger(savedAction.request['flow']) ? Number(savedAction.request['flow']) : null;
|
|
397
348
|
const destination = task ? taskHref(task) : flowId !== null ? `/flows/${flowId}` : `/settings/${savedAction.operation.startsWith('skill_') ? 'skills' : 'knowledge'}?repo=${encodeURIComponent(savedAction.repo)}`;
|
|
398
349
|
const said = typeof saved.outcome?.['said'] === 'string' ? saved.outcome['said'] : saved.state === 'dismissed' ? 'Action dismissed.' : saved.state === 'expired' ? 'This proposal expired. Ask for a fresh proposal.' : 'This action has no completed outcome yet.';
|
|
@@ -401,9 +352,6 @@ export function createChatHandlers(runtime) {
|
|
|
401
352
|
const review = mintSharedActionReview(store, principal, id, evidenceRoot, clock()), action = review.payload;
|
|
402
353
|
const terms = action.terms.map(term => html `<p style="white-space:pre-wrap;overflow-wrap:anywhere">${term}</p>`);
|
|
403
354
|
const evidenceLink = action.operation === 'result_accept' ? html `<a href="/r/${Number(action.request['run'])}">Inspect this result</a>` : '';
|
|
404
|
-
// Cockpit B2: approving standard work may stand on a password remembered on this session, exactly as on the task
|
|
405
|
-
// page (the same rule approve() applies when the form comes back); the field then may be left empty.
|
|
406
|
-
// The one password rule every approve form reads (approval-password.ts).
|
|
407
355
|
const freshSince = (() => {
|
|
408
356
|
const task = typeof action.request['task'] === 'string' ? action.request['task'] : null;
|
|
409
357
|
if (action.operation !== 'scope_approve' || task === null)
|
|
@@ -414,8 +362,6 @@ export function createChatHandlers(runtime) {
|
|
|
414
362
|
const field = approvalPasswordField(store, { name: who.name, taskId: task, scope, passwordless: false, localOwner: false, freshAt: fresh?.at ?? null, returnTo: '/chat' });
|
|
415
363
|
return field.field === 'remembered' ? new Date(field.since) : null;
|
|
416
364
|
})();
|
|
417
|
-
// Easy-start C5: a laptop's local owner confirms its own acts without a password (an approval only when it is
|
|
418
|
-
// eligible: localApprovalEligible, the rule the seal applies again); anything else says how to get a password.
|
|
419
365
|
const reviewTask = typeof action.request['task'] === 'string' ? action.request['task'] : null;
|
|
420
366
|
const localScope = reviewTask === null ? null : store.getScope(reviewTask);
|
|
421
367
|
const localOk = who.authority === 'local-owner' && CHAT_ACTION_LOCAL_ACTS[action.operation] !== null && (action.operation !== 'scope_approve' || (reviewTask !== null && localScope !== null && approvalPasswordField(store, { name: who.name, taskId: reviewTask, scope: localScope, passwordless: false, localOwner: true, freshAt: null, returnTo: '/chat' }).field === 'none'));
|
|
@@ -430,20 +376,16 @@ export function createChatHandlers(runtime) {
|
|
|
430
376
|
return refuse(response, who, 409, error instanceof Error ? error.message : 'This action could not be reviewed.', '/chat');
|
|
431
377
|
}
|
|
432
378
|
}
|
|
433
|
-
// Session-gated: the key is not secret, but strangers get nothing.
|
|
434
379
|
async function pushKey(ctx) {
|
|
435
380
|
const { who, response } = ctx;
|
|
436
381
|
if (who.via !== "cookie")
|
|
437
382
|
return respond(response, 403, "application/json", JSON.stringify({ error: "session" }));
|
|
438
|
-
// The pair is made as the console starts (docs/plans/get-side-effects.md); this only reads it.
|
|
439
383
|
const keys = options.telegramTokenFile === undefined ? null : loadVapidKeys(dirname(options.telegramTokenFile));
|
|
440
384
|
response.setHeader("cache-control", "no-store");
|
|
441
385
|
if (keys === null)
|
|
442
386
|
return respond(response, 503, "application/json", JSON.stringify({ error: "push is not set up on this console" }));
|
|
443
387
|
return respond(response, 200, "application/json", JSON.stringify({ key: keys.publicKey }));
|
|
444
388
|
}
|
|
445
|
-
// What this computer's agent CLIs said last, and whether the lead is on. A read: the answer comes from the background
|
|
446
|
-
// checks or a Check now (POST /lead/check), never from this request (docs/plans/get-side-effects.md).
|
|
447
389
|
const leadState = () => JSON.stringify({ lead: store.getChatConfig() === null ? "off" : "on", agent: runtime.localSignIn?.signedIn ?? null,
|
|
448
390
|
checkedAt: runtime.localSignIn === null ? null : new Date(runtime.localSignIn.at).toISOString(), command: agentSignInCommand() });
|
|
449
391
|
async function leadStatus(ctx) {
|
|
@@ -453,9 +395,6 @@ export function createChatHandlers(runtime) {
|
|
|
453
395
|
response.setHeader("cache-control", "no-store");
|
|
454
396
|
return respond(response, 200, "application/json", leadState());
|
|
455
397
|
}
|
|
456
|
-
// While no agent is signed in, Chat asks this computer again on its own (onboarding), and Settings → Lead has Check
|
|
457
|
-
// now: a fresh, non-spending sign-in check at most every few seconds, and the lead turns on as soon as one is found
|
|
458
|
-
// (the lead-by-default rule). A POST with the person's form token, so no prefetch or link preview can set it off.
|
|
459
398
|
async function leadCheck(ctx) {
|
|
460
399
|
const { response, posted } = ctx;
|
|
461
400
|
const body = readForm(posted, CONSOLE_FORMS.leadCheck);
|
|
@@ -479,7 +418,6 @@ export function createChatHandlers(runtime) {
|
|
|
479
418
|
response.setHeader("cache-control", "no-store");
|
|
480
419
|
return respond(response, 200, "text/html; charset=utf-8", taskChatLiveRegion(focus, who.session.csrf, true));
|
|
481
420
|
}
|
|
482
|
-
// The scripted demo lead's acts: ask, approve, change a plan, complete or send back a result.
|
|
483
421
|
async function demoAsk(ctx) {
|
|
484
422
|
const { who, response, posted } = ctx;
|
|
485
423
|
const body = readForm(posted, CONSOLE_FORMS.demo);
|
|
@@ -528,9 +466,6 @@ export function createChatHandlers(runtime) {
|
|
|
528
466
|
async function pushSubscribe(ctx) {
|
|
529
467
|
const { who, request, response, posted } = ctx;
|
|
530
468
|
const body = readForm(posted, CONSOLE_FORMS.pushSubscribe);
|
|
531
|
-
// Enrolling a durable notification sink is a CEREMONY (arc 3 finding
|
|
532
|
-
// 6): browser session + CSRF + the password typed again; bearer
|
|
533
|
-
// identities are machines and are refused outright.
|
|
534
469
|
if (who.via !== "cookie")
|
|
535
470
|
return refuse(response, who, 403, "push enrollment is a browser session's act");
|
|
536
471
|
if (store.isDemo())
|
|
@@ -587,11 +522,6 @@ export function createChatHandlers(runtime) {
|
|
|
587
522
|
async function chatConfig(ctx) {
|
|
588
523
|
const { who, response, now, posted } = ctx;
|
|
589
524
|
const body = readForm(posted, CONSOLE_FORMS.chatConfig);
|
|
590
|
-
// The console's own door into `config set chat` (operator request:
|
|
591
|
-
// chat lives mainly in the web UI). Same ceremony weight as the CLI
|
|
592
|
-
// verb: the password typed again authenticates the approver, the
|
|
593
|
-
// write is audited under their name, and the KEY still never
|
|
594
|
-
// touches a form or this database — environment only.
|
|
595
525
|
if (who.via !== "cookie")
|
|
596
526
|
return refuse(response, who, 403, "chat setup is a browser surface");
|
|
597
527
|
const back = body.get("return") === "/settings/lead" ? "/settings/lead" : safeChatReturn(body.get("return"));
|
|
@@ -621,9 +551,6 @@ export function createChatHandlers(runtime) {
|
|
|
621
551
|
if (!validModelId(model)) {
|
|
622
552
|
return redirect(response, chatRefusal(back, "the model id must be 1–128 letters, digits, dots, slashes, colons, underscores, or dashes"));
|
|
623
553
|
}
|
|
624
|
-
// The key, when pasted, is stored FIRST (0600 file, Telegram-token
|
|
625
|
-
// precedent) so the catalog fetch below can already use it. It never
|
|
626
|
-
// touches the database and is never echoed back.
|
|
627
554
|
const pastedKey = (body.get("key") ?? "").trim();
|
|
628
555
|
if (pastedKey !== "") {
|
|
629
556
|
if (subscription)
|
|
@@ -632,11 +559,6 @@ export function createChatHandlers(runtime) {
|
|
|
632
559
|
if (!stored.ok)
|
|
633
560
|
return redirect(response, chatRefusal(back, stored.message));
|
|
634
561
|
}
|
|
635
|
-
// The pin: anthropic models come from the compiled table; openrouter
|
|
636
|
-
// models come from OpenRouter's OWN catalog, priced by the authority
|
|
637
|
-
// that will bill them. No price found anywhere = refused, not guessed.
|
|
638
|
-
// Live list prices (Settings → Models) come first; the compiled table
|
|
639
|
-
// is the fallback when the catalog has never been fetched.
|
|
640
562
|
let pin = subscription ? { inMicrousd: 0, outMicrousd: 0 } : livePin(store, provider, model) ?? priceOf(model);
|
|
641
563
|
if (provider === "openrouter-api") {
|
|
642
564
|
const catalog = await chatCatalog();
|
|
@@ -663,7 +585,6 @@ export function createChatHandlers(runtime) {
|
|
|
663
585
|
}, who.name, now);
|
|
664
586
|
return redirect(response, back);
|
|
665
587
|
}
|
|
666
|
-
// ---- the mate (mate arc §5) ------------------------------------------
|
|
667
588
|
async function leadMint(ctx) {
|
|
668
589
|
const { who, response, now, posted } = ctx;
|
|
669
590
|
const body = readForm(posted, CONSOLE_FORMS.leadMint);
|
|
@@ -673,16 +594,11 @@ export function createChatHandlers(runtime) {
|
|
|
673
594
|
const enabled = chatEnablement();
|
|
674
595
|
if (!enabled.ok)
|
|
675
596
|
return redirect(response, chatReturnWithSaid(back, enabled.why));
|
|
676
|
-
// The one password ceremony of a conversation (§1): it restates the
|
|
677
|
-
// terms — this spend ceiling, over these projects — and mints the
|
|
678
|
-
// session every later turn debits without asking again.
|
|
679
597
|
const ceilingText = (body.get("ceiling-usd") ?? "").trim();
|
|
680
598
|
const ceilingUsd = enabled.billing === "subscription" ? 0 : Number(ceilingText);
|
|
681
599
|
if (enabled.billing === "metered" && (!Number.isFinite(ceilingUsd) || ceilingUsd <= 0 || ceilingUsd > 1_000)) {
|
|
682
600
|
return redirect(response, chatReturnWithSaid(back, "the session ceiling is a dollar amount between 0 and 1000"));
|
|
683
601
|
}
|
|
684
|
-
// The signed-in session is the authority (an approver in good
|
|
685
|
-
// standing); a typed password, when sent, is still checked.
|
|
686
602
|
const token = body.get("token") ?? "";
|
|
687
603
|
const verified = token === "" ? verifyApproverStanding(store, who.name, who.session.generation, managedRepos()) : verifyApproverByPassword(store, who.name, token, managedRepos());
|
|
688
604
|
if (!verified.ok)
|
|
@@ -696,7 +612,6 @@ export function createChatHandlers(runtime) {
|
|
|
696
612
|
if (who.via !== "cookie")
|
|
697
613
|
return refuse(response, who, 403, "Open the conversation to change automatic updates.");
|
|
698
614
|
const principal = leadPrincipal(who), session = store.activeLeadSession(who.name);
|
|
699
|
-
// A conversation its first message started from a task or project page has no main thread yet: this act opens it.
|
|
700
615
|
const thread = principal && session && session.ceilingDigest === principal.ceilingDigest ? store.openLeadThread(who.name, principal.ceilingDigest, now).thread : null;
|
|
701
616
|
if (!principal || !session || !thread || !configureLeadFollow(store, principal, session, thread, body.get("enabled") === "yes", now))
|
|
702
617
|
return refuse(response, who, 409, "Conversation access changed. Start chat again.", "/chat");
|
|
@@ -708,15 +623,12 @@ export function createChatHandlers(runtime) {
|
|
|
708
623
|
if (who.via !== "cookie")
|
|
709
624
|
return refuse(response, who, 403, "the lead is a browser surface");
|
|
710
625
|
const back = safeChatReturn(body.get("return"));
|
|
711
|
-
// Ending spend and forgetting the thread takes no password: any
|
|
712
|
-
// approver may revoke (§1), and the thread is theirs to drop (ruling 11).
|
|
713
626
|
store.failLiveLeadTurnsFor(who.name, "ended", now);
|
|
714
627
|
store.endLeadSessionsFor(who.name, who.name, now);
|
|
715
628
|
store.closeLeadThreadsFor(who.name, now);
|
|
716
629
|
leadSaid.delete(who.session.csrf);
|
|
717
630
|
return redirect(response, back);
|
|
718
631
|
}
|
|
719
|
-
/** Remove a message still waiting in the person's lead queue: theirs only, only while it waits; its words are forgotten. */
|
|
720
632
|
async function leadQueuedRemove(ctx) {
|
|
721
633
|
const { url, who, request, response, now, posted } = ctx;
|
|
722
634
|
const body = readForm(posted, CONSOLE_FORMS.leadQueuedRemove);
|
|
@@ -744,9 +656,6 @@ export function createChatHandlers(runtime) {
|
|
|
744
656
|
noteLead(who.session.csrf, null, "that turn has already finished");
|
|
745
657
|
return redirect(response, chatReturnWithLatest(back));
|
|
746
658
|
}
|
|
747
|
-
// A stopped direct-API turn is conservatively charged its reserved
|
|
748
|
-
// worst case: dispatch may already have happened. Membership turns
|
|
749
|
-
// reserve zero. The conversation itself stays live.
|
|
750
659
|
store.failLiveLeadTurnsFor(who.name, "stopped", now);
|
|
751
660
|
noteLead(who.session.csrf, live.id, "stopped — the conversation is still open");
|
|
752
661
|
return redirect(response, chatReturnWithLatest(back));
|
|
@@ -774,9 +683,6 @@ export function createChatHandlers(runtime) {
|
|
|
774
683
|
}
|
|
775
684
|
else
|
|
776
685
|
principal = leadPrincipal(who);
|
|
777
|
-
// Confirm in place (chat cards): the same door and checks, answered in
|
|
778
|
-
// JSON so the conversation stays where it is; the card's refreshed
|
|
779
|
-
// state carries the result. The secure review screen stays a form.
|
|
780
686
|
const cardJson = String(request.headers["accept"] ?? "").includes("application/json") && !body.has("nonce");
|
|
781
687
|
const cardAnswer = (status, ok, said, taskId = null) => respond(response, status, "application/json", JSON.stringify({ ok, said, taskId }));
|
|
782
688
|
if (principal === null)
|
|
@@ -789,8 +695,6 @@ export function createChatHandlers(runtime) {
|
|
|
789
695
|
noteLead(who.session.csrf, null, "that proposal was already acted on");
|
|
790
696
|
return redirect(response, chatReturnWithLatest(back));
|
|
791
697
|
}
|
|
792
|
-
// A scope approval's re-check is spent only if the whole confirmation commits (one transaction: the proposal's
|
|
793
|
-
// settlement included). Any other action spends it whatever comes of it (its effects aren't all in the database).
|
|
794
698
|
const confirmIt = () => confirmLeadProposal(store, principal, id, now, { authority: who.authority, chatProvider: teamChatProvider, confirm: body.get("confirm") === "yes", via: "web", person: who.via === "cookie", evidenceRoot, ...(body.has("nonce") ? { actionReview: { nonce: body.get("nonce") ?? "", password: body.get("token") ?? "" } } : {}) });
|
|
795
699
|
const proposed = store.getLeadProposal(id);
|
|
796
700
|
const approving = proposed?.kind === "action" && sharedActionPayload(proposed.payload)?.operation === "scope_approve";
|
|
@@ -812,21 +716,11 @@ export function createChatHandlers(runtime) {
|
|
|
812
716
|
return redirect(response, chatReturnWithSaid(back, outcome.said));
|
|
813
717
|
if (!outcome.ok && outcome.reason === "needs-confirm")
|
|
814
718
|
noteLead(who.session.csrf, null, outcome.said);
|
|
815
|
-
// A confirmed task proposal leads to the task it actually created
|
|
816
|
-
// (package 2): the lens over this same conversation, whose journey
|
|
817
|
-
// and plan are the next step. The id is the door's recorded
|
|
818
|
-
// outcome, never a title or the assistant's prose; a refused,
|
|
819
|
-
// replayed, or unavailable confirmation returns as before, with
|
|
820
|
-
// the card carrying the door's words.
|
|
821
719
|
if (outcome.ok && outcome.kind === "task" && outcome.taskId !== null && taskChatFocus(outcome.taskId, now, who, { mintNonce: false }) !== null) {
|
|
822
720
|
return redirect(response, `${proposalTaskHref(outcome.taskId)}#task-chat-live`);
|
|
823
721
|
}
|
|
824
722
|
if (outcome.ok && outcome.kind === "review" && outcome.taskId !== null) {
|
|
825
723
|
const proposal = store.getLeadProposal(id);
|
|
826
|
-
// A revision confirmed here returns to its receipt: the newest
|
|
827
|
-
// reply, whose confirmed card names the revision and links to the
|
|
828
|
-
// plan. Landing at the top left that message under the phone's
|
|
829
|
-
// fixed composer (build #1604 feedback).
|
|
830
724
|
return redirect(response, proposal.payload["operation"] === "revise"
|
|
831
725
|
? chatReturnWithLatest(revisionDestination(outcome.taskId, proposalTaskHref(outcome.taskId)))
|
|
832
726
|
: `${proposalTaskHref(outcome.taskId)}&result=${Number(proposal.payload["run"])}#request-changes`);
|
|
@@ -840,8 +734,6 @@ export function createChatHandlers(runtime) {
|
|
|
840
734
|
}
|
|
841
735
|
return redirect(response, chatReturnWithLatest(back));
|
|
842
736
|
};
|
|
843
|
-
// Coordinator proposals (mate arc v3): confirmed by any approver whose
|
|
844
|
-
// ceiling admits the repo; the card lives on /chat and on the task.
|
|
845
737
|
const coordinatorProposalAct = (op) => async (ctx) => {
|
|
846
738
|
const { url, who, response, now, posted } = ctx;
|
|
847
739
|
const body = readForm(posted, CONSOLE_FORMS.coordinatorProposal);
|
|
@@ -871,11 +763,6 @@ export function createChatHandlers(runtime) {
|
|
|
871
763
|
const requestedTask = body.get("task");
|
|
872
764
|
const focusTask = taskChatFocus(requestedTask, now, who);
|
|
873
765
|
const chatProject = focusTask !== null ? null : chatProjectOf(body.getAll("project"));
|
|
874
|
-
// The enhanced send (package 2): the SAME endpoint, fields, request
|
|
875
|
-
// receipt key, and session binding as the native form — only the
|
|
876
|
-
// answer differs. A fetch that asks for JSON gets the refusal's
|
|
877
|
-
// words or an acceptance instead of a redirect; nothing is retried,
|
|
878
|
-
// cleared, or authorized here that the native POST would not.
|
|
879
766
|
const wantsJson = String(request.headers["accept"] ?? "").includes("application/json");
|
|
880
767
|
if (requestedTask !== null && focusTask === null) {
|
|
881
768
|
return wantsJson
|
|
@@ -895,9 +782,6 @@ export function createChatHandlers(runtime) {
|
|
|
895
782
|
return said(409, "That result is no longer available for this task. Review the task before sending.");
|
|
896
783
|
}
|
|
897
784
|
const resultContext = viewedRun === null ? "" : ` The operator is viewing result #${viewedRun.id} from execution ${store.externalIdFor(viewedRun.taskRef)}. Use get_result for that exact execution and run when responding to feedback; do not substitute another result.`;
|
|
898
|
-
// The task composer's mode (console v2): fixed words for this turn only.
|
|
899
|
-
// It steers what the lead proposes and grants nothing: every action
|
|
900
|
-
// still arrives as a card the person confirms under its own rules.
|
|
901
785
|
const modeValue = body.get("mode");
|
|
902
786
|
if (modeValue !== null && (focusTask === null || body.getAll("mode").length !== 1 || !Object.hasOwn(TASK_COMPOSER_MODES, modeValue))) {
|
|
903
787
|
return said(400, "Choose Build, Plan only or Just answer, then send again. Your draft is saved.");
|
|
@@ -906,13 +790,7 @@ export function createChatHandlers(runtime) {
|
|
|
906
790
|
const enabled = chatEnablement();
|
|
907
791
|
if (!enabled.ok)
|
|
908
792
|
return said(409, enabled.why);
|
|
909
|
-
// A live mate session: the message is a mate turn — no password, the
|
|
910
|
-
// session's ceremony already covered it (§1); the engine refuses on
|
|
911
|
-
// its own terms and the thread shows why.
|
|
912
793
|
let leadSession = who.role === "approver" ? store.activeLeadSession(who.name) : null;
|
|
913
|
-
// Quiet page visits: a membership conversation starts with its first message, never with a page view. A page
|
|
914
|
-
// shown before one existed binds its sends to session 0; that send starts it (the same approver standing a visit
|
|
915
|
-
// used to need), and a retry or double submit of the same request lands in the conversation it started.
|
|
916
794
|
let startedHere = false;
|
|
917
795
|
const binding = body.getAll("request-session");
|
|
918
796
|
const unbound = binding.length === 0 || (binding.length === 1 && binding[0] === String(NOT_STARTED_SESSION));
|
|
@@ -924,7 +802,6 @@ export function createChatHandlers(runtime) {
|
|
|
924
802
|
if (sentRequest !== null && (body.getAll("request").length !== 1 || !/^[a-f0-9]{32}$/.test(sentRequest)))
|
|
925
803
|
return said(409, "This conversation changed. Reload it before sending your message.");
|
|
926
804
|
const usable = leadSession !== null && leadSession.ceilingDigest === principal.ceilingDigest && leadSession.approverGeneration === principal.generation;
|
|
927
|
-
// The conversation this very request started, if it started one: a retry or double submit lands only there.
|
|
928
805
|
const startedBy = sentRequest === null ? null : store.leadStartReceipt(who.name, sentRequest);
|
|
929
806
|
if (startedBy !== null) {
|
|
930
807
|
if (!usable || leadSession === null || leadSession.id !== startedBy.session)
|
|
@@ -932,19 +809,16 @@ export function createChatHandlers(runtime) {
|
|
|
932
809
|
startedHere = true;
|
|
933
810
|
}
|
|
934
811
|
else if (usable && leadSession !== null) {
|
|
935
|
-
// A page that showed no conversation never sends into one it did not start.
|
|
936
812
|
if (binding.length === 1)
|
|
937
813
|
return said(409, "This conversation changed. Reload it before sending your message.", leadSession.id);
|
|
938
814
|
}
|
|
939
815
|
else {
|
|
940
|
-
// Nothing starts for a message that would be refused anyway.
|
|
941
816
|
const message = (body.get("message") ?? "").trim();
|
|
942
817
|
if (message === "" || message.length > LEAD_MESSAGE_MAX_CHARS)
|
|
943
818
|
return said(400, `a message is 1 to ${LEAD_MESSAGE_MAX_CHARS} characters`);
|
|
944
819
|
if (scanForSecrets(message).length > 0)
|
|
945
820
|
return said(400, "that looks like a credential — chat never forwards or stores those");
|
|
946
821
|
const scope = chatScopeOf(focusTask, chatProject);
|
|
947
|
-
// The start and its record are one write: a retry finds it, and never starts a second conversation.
|
|
948
822
|
const started = startLeadConversation(who, principal, enabled, 0, false, now, scope, sentRequest ?? undefined);
|
|
949
823
|
leadSession = store.activeLeadSession(who.name);
|
|
950
824
|
if (leadSession === null || leadSession.id !== started)
|
|
@@ -957,7 +831,6 @@ export function createChatHandlers(runtime) {
|
|
|
957
831
|
if (sentRequest !== null && !startedHere && (body.getAll("request").length !== 1 || body.getAll("request-session").length !== 1 || body.get("request-session") !== String(leadSession.id))) {
|
|
958
832
|
return said(409, "This conversation changed. Reload it before sending your message.");
|
|
959
833
|
}
|
|
960
|
-
// Every send has one identity (a form without one gets it here): a message that waits is known by it.
|
|
961
834
|
const requestId = sentRequest ?? randomBytes(16).toString("hex");
|
|
962
835
|
const principal = leadPrincipal(who);
|
|
963
836
|
if (principal === null)
|
|
@@ -967,15 +840,11 @@ export function createChatHandlers(runtime) {
|
|
|
967
840
|
return said(400, `a message is 1 to ${LEAD_MESSAGE_MAX_CHARS} characters`, leadSession.id);
|
|
968
841
|
}
|
|
969
842
|
const opened = store.openLeadThread(who.name, principal.ceilingDigest, now, chatScopeOf(focusTask, chatProject));
|
|
970
|
-
// The personal queue (docs/plans/lead-message-queue.md): while this person's lead is busy, or something of theirs
|
|
971
|
-
// waits, the message waits its turn instead of being refused. A request the engine already took replays as before.
|
|
972
843
|
const queueContext = focusTask !== null
|
|
973
844
|
? { task: focusTask.id, ...(viewedRun === null ? {} : { result: viewedRun.id }), ...(modeValue === null ? {} : { mode: modeValue }) }
|
|
974
845
|
: chatProject !== null ? { project: chatProject } : null;
|
|
975
846
|
const queueIt = () => runtime.personalQueue.queue.sendOrQueue({ approver: who.name, approverGeneration: principal.generation, session: leadSession.id,
|
|
976
847
|
ceilingDigest: principal.ceilingDigest, thread: opened.thread.id, text: message, requestId, context: queueContext }, clock());
|
|
977
|
-
// A message the engine would refuse for a secret never waits (nothing stored): it goes straight to the engine,
|
|
978
|
-
// which refuses it before any row exists, exactly as when the lead is free.
|
|
979
848
|
if (scanForSecrets(message).length === 0 && store.leadRequestReceipt(leadSession.id, requestId) === null) {
|
|
980
849
|
const decided = queueIt();
|
|
981
850
|
if (decided.kind === "conflict")
|
|
@@ -989,35 +858,23 @@ export function createChatHandlers(runtime) {
|
|
|
989
858
|
: redirect(response, chatReturnWithLatest(back));
|
|
990
859
|
}
|
|
991
860
|
}
|
|
992
|
-
// The live display starts once this message holds a turn: a refusal (a secret, a turn still running) never blanks
|
|
993
|
-
// the display of a reply that is still running in the same conversation.
|
|
994
861
|
let onProgress;
|
|
995
|
-
// Partials are shaped as the final reply is: for this message, with this console's own addresses.
|
|
996
862
|
const liveShape = { asked: message, appOrigin: requestContext.getStore()?.appOrigins ?? null };
|
|
997
863
|
const ended = (ok) => { if (onProgress !== undefined)
|
|
998
864
|
endLiveTurn(opened.thread.id, ok, onProgress); };
|
|
999
|
-
// Detached work never carries this request's browser session (Passwordless reads it): it runs with no session facts.
|
|
1000
865
|
void freshFacts.run(null, () => runLeadTurn({ store, who: principal, session: leadSession, thread: opened.thread, config: enabled.config, key: enabled.key, message,
|
|
1001
866
|
onAdmitted: () => { onProgress = beginLiveTurn(opened.thread.id, liveShape); }, onProgress: event => onProgress?.(event), channel: "console", requestId, ...(focusTask === null && chatProject !== null ? { context: `Current project: ${projectName(chatProject)} (${chatProject}). Keep this conversation about that project unless the operator explicitly asks to broaden it; use it as the repo for project tools.` } : {}), ...(focusTask === null ? {} : { context: `Current task: ${focusTask.id}. Read it with get_task before answering or proposing changes. Read its currentExecution next and bind new actions to that exact execution. Never replace the target of a prior proposal with a newer revision. Keep this turn about that task unless the operator explicitly asks to broaden it.${resultContext}${modeContext}` }), fetcher: chatFetcher, ...(options.subscriptionChatRunner === undefined ? {} : { subscriptionRunner: options.subscriptionChatRunner }), clock, evidenceRoot }))
|
|
1002
867
|
.then(outcome => {
|
|
1003
|
-
// Lost a race to another turn of this person's between deciding and admission: it waits instead of being refused.
|
|
1004
868
|
if (!outcome.ok && "refused" in outcome && (outcome.refused === "concurrent" || outcome.refused === "backlog") && queueIt().kind === "queued") {
|
|
1005
869
|
ended(false);
|
|
1006
870
|
return;
|
|
1007
871
|
}
|
|
1008
|
-
// A turn that saved its outcome in the thread (one stopped at its deadline) is said there, once. Any other turn
|
|
1009
|
-
// that ended failed is said from its saved row (leadConversationRows `failure`), which a restart keeps; only a
|
|
1010
|
-
// refusal before any turn existed is said from memory.
|
|
1011
872
|
if (!outcome.ok && !("saved" in outcome && outcome.saved === true) && !("turn" in outcome))
|
|
1012
873
|
noteLead(who.session.csrf, null, outcome.message);
|
|
1013
874
|
ended(outcome.ok);
|
|
1014
875
|
})
|
|
1015
876
|
.catch(() => { noteLead(who.session.csrf, null, "the turn failed unexpectedly"); ended(false); })
|
|
1016
|
-
// A personal turn ended: the next waiting message (this person's or anyone's) may start now.
|
|
1017
877
|
.finally(() => runtime.personalQueue.kick());
|
|
1018
|
-
// Accepted for the engine, not received: the receipt is written by
|
|
1019
|
-
// the turn's own admission, and the status poll is where the page
|
|
1020
|
-
// learns of it — the same road as after a native send.
|
|
1021
878
|
if (wantsJson)
|
|
1022
879
|
return respond(response, 202, "application/json", JSON.stringify({ ok: true, session: leadSession.id, task: focusTask?.id ?? "", ...(chatProject === null ? {} : { project: chatProject }), request: requestId }));
|
|
1023
880
|
return redirect(response, chatReturnWithLatest(back));
|
|
@@ -1030,15 +887,10 @@ export function createChatHandlers(runtime) {
|
|
|
1030
887
|
if (enabled.billing === "subscription") {
|
|
1031
888
|
return redirect(response, `/chat?said=${encodeURIComponent("start the conversation first — the one password ceremony opens the subscription-backed session")}`);
|
|
1032
889
|
}
|
|
1033
|
-
// The password, typed again, on EVERY message (v2 ruling 2): chat is
|
|
1034
|
-
// spend, and a seven-day cookie is not a spend credential.
|
|
1035
890
|
const message = (body.get("message") ?? "").trim();
|
|
1036
891
|
if (message === "" || message.length > 2_000) {
|
|
1037
892
|
return redirect(response, `/chat?said=${encodeURIComponent("a message is 1 to 2000 characters")}`);
|
|
1038
893
|
}
|
|
1039
|
-
// Secrets refuse BEFORE any row or request exists — nothing stored,
|
|
1040
|
-
// nothing sent (v3 brief; scanForSecrets is the same high-confidence
|
|
1041
|
-
// set the evidence path trusts).
|
|
1042
894
|
if (scanForSecrets(message).length > 0) {
|
|
1043
895
|
return redirect(response, `/chat?said=${encodeURIComponent("that looks like a credential — chat never forwards or stores those")}`);
|
|
1044
896
|
}
|
|
@@ -1046,8 +898,6 @@ export function createChatHandlers(runtime) {
|
|
|
1046
898
|
const turnRepos = managedRepos();
|
|
1047
899
|
const snapshot = withDispatchDiagnoses(store, store.chatSnapshot(turnRepos, now), now);
|
|
1048
900
|
const { document } = buildDataDocument(snapshot);
|
|
1049
|
-
// The WHOLE outbound body is scanned — a token in a task title
|
|
1050
|
-
// refuses the turn exactly like one typed in the box (v2 ruling 4).
|
|
1051
901
|
const composed = composeRequest({
|
|
1052
902
|
provider: enabled.config.provider,
|
|
1053
903
|
model: enabled.config.model,
|
|
@@ -1058,17 +908,12 @@ export function createChatHandlers(runtime) {
|
|
|
1058
908
|
if (scanForSecrets(composed.body).length > 0) {
|
|
1059
909
|
return redirect(response, `/chat?said=${encodeURIComponent("fleet context contains something credential-shaped — chat refuses to send it; find and remove it first")}`);
|
|
1060
910
|
}
|
|
1061
|
-
// Sprint 8: the organisation policy allows this chat's provider and model, or the turn doesn't start.
|
|
1062
911
|
const disallowed = store.agentPolicyRefusal(enabled.config.provider, enabled.config.model);
|
|
1063
912
|
if (disallowed !== null)
|
|
1064
913
|
return redirect(response, `/chat?said=${encodeURIComponent(disallowed)}`);
|
|
1065
914
|
const reserved = worstCaseForPrice(enabled.price, Buffer.byteLength(composed.body, "utf8"));
|
|
1066
|
-
// The password comes last, right where the turn opens: every refusal above leaves an explicit re-check unspent,
|
|
1067
|
-
// and a turn that doesn't open (a cap, a budget) puts it back.
|
|
1068
915
|
const password = body.get("token") ?? "";
|
|
1069
916
|
const opened = spendingOnlyOnSuccess(() => {
|
|
1070
|
-
// Typed now, or (cockpit B2) a password or explicit provider re-check given on this session, on a direct local
|
|
1071
|
-
// request, within its window. An ordinary provider sign-in never starts that window.
|
|
1072
917
|
if (!withFreshness("chat-send", () => authenticateApprover(who, password)).ok)
|
|
1073
918
|
return null;
|
|
1074
919
|
return store.openChatTurn({
|
|
@@ -1108,7 +953,6 @@ export function createChatHandlers(runtime) {
|
|
|
1108
953
|
const key = url.pathname.split("/")[3];
|
|
1109
954
|
const chat = who.session.chat;
|
|
1110
955
|
const candidate = chat?.candidates.get(key);
|
|
1111
|
-
// The filing act creates durable rows from model text: password again.
|
|
1112
956
|
const password = body.get("token") ?? "";
|
|
1113
957
|
if (password === "" || !authenticateApprover(who, password).ok) {
|
|
1114
958
|
return redirect(response, `/chat?said=${encodeURIComponent("filing a draft takes your password, typed again")}`);
|
|
@@ -1116,7 +960,6 @@ export function createChatHandlers(runtime) {
|
|
|
1116
960
|
if (chat === undefined || candidate === undefined) {
|
|
1117
961
|
return refuse(response, who, 404, "that draft is gone — drafts live in the session and do not survive restarts", "/chat");
|
|
1118
962
|
}
|
|
1119
|
-
// Single-use CAS with no await between check and claim (v2 new 3).
|
|
1120
963
|
if (candidate.state !== "pending")
|
|
1121
964
|
return refuse(response, who, 409, "that draft is already being filed", "/chat");
|
|
1122
965
|
candidate.state = "filing";
|
|
@@ -1125,8 +968,6 @@ export function createChatHandlers(runtime) {
|
|
|
1125
968
|
candidate.state = "pending";
|
|
1126
969
|
return refuse(response, who, 409, "the world changed since this draft was made — it cannot be filed", "/chat");
|
|
1127
970
|
}
|
|
1128
|
-
// Re-validated at the act: the door runs every field check again, and
|
|
1129
|
-
// the fields are scanned for secrets before they become durable.
|
|
1130
971
|
const acceptanceFields = candidate.draft.acceptance.flatMap(c => [c.statement, ...(c.how === null ? [] : [c.how])]);
|
|
1131
972
|
const fields = [candidate.draft.title, candidate.draft.goal, candidate.draft.outOfScope ?? "", ...candidate.draft.touches, ...acceptanceFields];
|
|
1132
973
|
if (scanForSecrets(fields.join("\n")).length > 0) {
|
|
@@ -1172,10 +1013,8 @@ export function createChatHandlers(runtime) {
|
|
|
1172
1013
|
}
|
|
1173
1014
|
return redirect(response, "/chat");
|
|
1174
1015
|
}
|
|
1175
|
-
/** Chat's first run: the steps, first tasks until the first task exists, and the sandbox while no agent is signed in. */
|
|
1176
1016
|
function chatFirstRun(now, project) {
|
|
1177
1017
|
const repo = project ?? managedRepos()[0] ?? null;
|
|
1178
|
-
// Done only when a task in this project could start: a live builder bound to it, as dispatch decides.
|
|
1179
1018
|
const steps = withBuilderStep(firstRunStepsNow(now), builderReadyFor(store, firstRunBuilderRepo(store, project, visible, managedRepos()), now));
|
|
1180
1019
|
if (steps === null)
|
|
1181
1020
|
return undefined;
|
|
@@ -1187,13 +1026,10 @@ export function createChatHandlers(runtime) {
|
|
|
1187
1026
|
suggestions: taskFiled || repo === null ? [] : firstTasksFor(repo),
|
|
1188
1027
|
sandbox: agent !== undefined && !agent.done && !agent.checking ? SANDBOX_COMMAND : null,
|
|
1189
1028
|
intro: HOW_IT_WORKS,
|
|
1190
|
-
lead: lead === null ? null : { words: `
|
|
1191
|
-
// With no lead yet and no agent signed in, the page asks this computer again on its own.
|
|
1029
|
+
lead: lead === null ? null : { words: `Chat uses ${lead}`, href: "/settings/lead" },
|
|
1192
1030
|
recheck: store.getChatConfig() === null && agent !== undefined && !agent.done ? "/lead/check" : null,
|
|
1193
1031
|
};
|
|
1194
1032
|
}
|
|
1195
|
-
/** After the first Ready result, once (onboarding): the phone, by a chat app or the console over Tailscale. */
|
|
1196
|
-
/** Chat's one-line pointer to the phone setup: after the first Ready result, until put away or Telegram is paired. */
|
|
1197
1033
|
function phoneCard(who, now) {
|
|
1198
1034
|
if (who.role !== "approver" || store.isDemo() || store.firstSuccessAt(now) === null || store.installationFact(PHONE_CARD_FACT) !== null)
|
|
1199
1035
|
return undefined;
|
|
@@ -1202,16 +1038,12 @@ export function createChatHandlers(runtime) {
|
|
|
1202
1038
|
return undefined;
|
|
1203
1039
|
return phoneSetup(who);
|
|
1204
1040
|
}
|
|
1205
|
-
/** The project a chat request names: exactly one, visible to this person
|
|
1206
|
-
* and one of this console's projects; undefined when refused. */
|
|
1207
1041
|
function chatProjectOf(values) {
|
|
1208
1042
|
if (values.length === 0)
|
|
1209
1043
|
return null;
|
|
1210
1044
|
const wanted = values[0] ?? "";
|
|
1211
1045
|
return values.length === 1 && visible(wanted) && managedRepos().includes(wanted) ? wanted : undefined;
|
|
1212
1046
|
}
|
|
1213
|
-
/** Which live display each progress handle started: ending a turn ends only its own display (a turn stopped from
|
|
1214
|
-
* another window that settles late can never end the next turn's). */
|
|
1215
1047
|
const progressOf = new WeakMap();
|
|
1216
1048
|
function beginLiveTurn(thread, shape = {}) {
|
|
1217
1049
|
const previous = liveTurns.get(thread);
|
|
@@ -1219,7 +1051,6 @@ export function createChatHandlers(runtime) {
|
|
|
1219
1051
|
clearTimeout(previous.expiry);
|
|
1220
1052
|
const live = { steps: [], done: false, ok: false, listeners: previous?.listeners ?? new Set(), startedAt: clock().getTime(), stepAt: [], reply: createLiveReply(shape) };
|
|
1221
1053
|
liveTurns.set(thread, live);
|
|
1222
|
-
// A page that has this conversation open follows the reply (GET /live, its chat room).
|
|
1223
1054
|
runtime.liveTurnStarted(thread);
|
|
1224
1055
|
const newStep = () => { live.steps.push({ tools: [], toolCalls: [], text: "" }); live.stepAt.push(clock().getTime()); };
|
|
1225
1056
|
const current = () => live.steps.at(-1) ?? (newStep(), live.steps.at(-1));
|
|
@@ -1248,7 +1079,6 @@ export function createChatHandlers(runtime) {
|
|
|
1248
1079
|
(live.confirmed ??= [])[live.steps.length - 1] = event.final === true;
|
|
1249
1080
|
}
|
|
1250
1081
|
else if (event.kind === "blocked") {
|
|
1251
|
-
// Held back as a possible password or key: no step keeps its words (the Live grid's tile reads these too).
|
|
1252
1082
|
for (const step of live.steps)
|
|
1253
1083
|
step.text = "";
|
|
1254
1084
|
}
|
|
@@ -1292,7 +1122,6 @@ export function createChatHandlers(runtime) {
|
|
|
1292
1122
|
const turn = store.getLeadTurn(noted.turn);
|
|
1293
1123
|
return turn !== null && turn.session === liveSession ? noted.message : null;
|
|
1294
1124
|
}
|
|
1295
|
-
/** A finished demo exchange's result, read back from the evidence its run actually stored. */
|
|
1296
1125
|
function demoResultView(exchange) {
|
|
1297
1126
|
if (exchange.runId === null || exchange.taskId === null)
|
|
1298
1127
|
return null;
|
|
@@ -1333,9 +1162,8 @@ export function createChatHandlers(runtime) {
|
|
|
1333
1162
|
}
|
|
1334
1163
|
const file = join(options.configDir, `chat-key-${provider}`);
|
|
1335
1164
|
writeFsFileSync(file, `${key.trim()}\n`, { mode: 0o600 });
|
|
1336
|
-
// writeFileSync applies the mode only on creation; assert it regardless.
|
|
1337
1165
|
chmodSync(file, 0o600);
|
|
1338
|
-
runtime.catalogCache = null;
|
|
1166
|
+
runtime.catalogCache = null;
|
|
1339
1167
|
return { ok: true };
|
|
1340
1168
|
}
|
|
1341
1169
|
function forgetChatKey(provider) {
|
|
@@ -1345,12 +1173,9 @@ export function createChatHandlers(runtime) {
|
|
|
1345
1173
|
rmFileSync(join(options.configDir, `chat-key-${provider}`));
|
|
1346
1174
|
}
|
|
1347
1175
|
catch {
|
|
1348
|
-
// never stored — nothing to forget
|
|
1349
1176
|
}
|
|
1350
1177
|
runtime.catalogCache = null;
|
|
1351
1178
|
}
|
|
1352
|
-
/** Session-memory hygiene: drafts age out; a filed or dead session frees
|
|
1353
|
-
* its bytes; the per-approver cap spans ALL that approver's sessions. */
|
|
1354
1179
|
function sweepChatDrafts(nowMs) {
|
|
1355
1180
|
for (const session of sessions.values()) {
|
|
1356
1181
|
if (session.chat === undefined)
|
|
@@ -1361,10 +1186,6 @@ export function createChatHandlers(runtime) {
|
|
|
1361
1186
|
}
|
|
1362
1187
|
}
|
|
1363
1188
|
}
|
|
1364
|
-
/** The one network call a turn makes, run detached from the request that
|
|
1365
|
-
* opened it. Every failure maps to the closed enum BEFORE anything can
|
|
1366
|
-
* log it; a turn that may have started but has no usable usage LATCHES
|
|
1367
|
-
* (unknown spend blocks the credential until acknowledged). */
|
|
1368
1189
|
async function runChatTurn(turnId, session, enabled, userMessage, dataDocument, turnRepos) {
|
|
1369
1190
|
const started = store.startChatTurn(turnId, new Date());
|
|
1370
1191
|
if (!started.ok)
|
|
@@ -1396,7 +1217,6 @@ export function createChatHandlers(runtime) {
|
|
|
1396
1217
|
};
|
|
1397
1218
|
if (!result.ok) {
|
|
1398
1219
|
if (result.problem.startsWith("status-")) {
|
|
1399
|
-
// The provider ANSWERED with an error: nothing billed.
|
|
1400
1220
|
finish({ state: "failed", failureReason: "provider-error", settledMicrousd: 0 });
|
|
1401
1221
|
tell(null, "The chat provider turned the request down. Nothing was kept or charged. Try again in a minute.");
|
|
1402
1222
|
}
|
|
@@ -1409,18 +1229,14 @@ export function createChatHandlers(runtime) {
|
|
|
1409
1229
|
tell(null, "The chat provider stopped responding partway through, and the cost isn't known, so chat is paused. Confirm the cost on this page to turn chat back on.");
|
|
1410
1230
|
}
|
|
1411
1231
|
else {
|
|
1412
|
-
// 200 with an unusable wrapper: billed, amount unproven.
|
|
1413
1232
|
finish({ state: "failed", failureReason: "malformed-reply", settledMicrousd: null, unknownSpend: true });
|
|
1414
1233
|
tell(null, "The chat provider sent back an answer that couldn't be read, and its cost isn't known, so chat is paused. Confirm the cost on this page to turn chat back on.");
|
|
1415
1234
|
}
|
|
1416
1235
|
return;
|
|
1417
1236
|
}
|
|
1418
|
-
// The pinned math, or the provider's own reported charge when that is
|
|
1419
|
-
// HIGHER — the ledger never undercounts what actually left the wallet.
|
|
1420
1237
|
const pinnedSettle = settleForPrice(enabled.price, result.answer.tokensIn, result.answer.tokensOut);
|
|
1421
1238
|
const settled = Math.max(pinnedSettle, result.answer.reportedCostMicrousd ?? 0);
|
|
1422
1239
|
const envelope = parseAssistantEnvelope(result.answer.text);
|
|
1423
|
-
// v140: what the provider's response body itself reported (absent: unreported, kept NULL).
|
|
1424
1240
|
const reported = { modelReported: result.answer.modelReported ?? null, reportedCostUsd: result.answer.reportedCostUsd ?? null };
|
|
1425
1241
|
if (!envelope.ok) {
|
|
1426
1242
|
finish({
|
|
@@ -1468,9 +1284,6 @@ export function createChatHandlers(runtime) {
|
|
|
1468
1284
|
});
|
|
1469
1285
|
tell(envelope.envelope.reply, null, envelope.proposalsDiscarded);
|
|
1470
1286
|
}
|
|
1471
|
-
/** The Chat landing's live view: each agent at work now with its task and
|
|
1472
|
-
* phase, four counts, plan-window use (never dollars: subscriptions don't
|
|
1473
|
-
* bill per run) and Catch up's items, each tagged with its tab. Reads only. */
|
|
1474
1287
|
function chatHomeOf(who, repos, now) {
|
|
1475
1288
|
const access = workAccess();
|
|
1476
1289
|
const admitted = (repo) => repo === null ? visible(null) : repos.includes(repo);
|
|
@@ -1480,13 +1293,11 @@ export function createChatHandlers(runtime) {
|
|
|
1480
1293
|
agent: `${providerName(run.provider)} on ${run.runner}`, phase: homePhaseWords(run), project: run.repo === null ? null : projectName(run.repo), since: run.startedAt,
|
|
1481
1294
|
activity: runActivityOf(store, run, now) };
|
|
1482
1295
|
});
|
|
1483
|
-
// The three whole views, read at most once per workspace revision (and on a read worker first when one is attached).
|
|
1484
1296
|
const view = (name) => sharedIndexPage(access, { view: name, limit: WORK_INDEX_MAX_LIMIT, ...(evidenceRoot === undefined ? {} : { root: evidenceRoot }) });
|
|
1485
1297
|
const all = view("all"), needs = view("needs-you"), done = view("completed");
|
|
1486
1298
|
const weekAgo = new Date(now.getTime() - 7 * 86_400_000).toISOString();
|
|
1487
1299
|
const counts = [
|
|
1488
1300
|
{ key: "working", label: "Working now", value: agents.length, href: "/tasks?view=running" },
|
|
1489
|
-
// Each by its shared headline, as the Tasks list words it: a result whose checks failed waits on you, it isn't ready.
|
|
1490
1301
|
{ key: "waiting", label: "Waiting on you", value: needs.items.filter(one => one.status.label !== "Ready for review").length, href: "/tasks?view=needs-you" },
|
|
1491
1302
|
{ key: "ready", label: "Ready to review", value: needs.items.filter(one => one.status.label === "Ready for review").length, href: "/tasks?view=needs-you" },
|
|
1492
1303
|
{ key: "done", label: "Done this week", value: done.items.filter(one => (one.completion?.at ?? one.updatedAt) >= weekAgo).length, href: "/tasks?view=completed" },
|
|
@@ -1502,7 +1313,6 @@ export function createChatHandlers(runtime) {
|
|
|
1502
1313
|
})(),
|
|
1503
1314
|
}));
|
|
1504
1315
|
const windows = who.via === "cookie" && store.isInstanceOperator(who.name) ? limitsView(store.providerLimits(), [], { project: projectName, subagent: id => `Subagent ${id}` }, now) : null;
|
|
1505
|
-
// One line: what this person's lead is doing now and when it last acted.
|
|
1506
1316
|
const activity = leadActivity(store, who.name);
|
|
1507
1317
|
const leadTask = activity?.taskId == null ? null : store.lookupRef(activity.taskId);
|
|
1508
1318
|
const lead = activity === null ? null : { name: activity.name, doing: activity.doing, at: activity.at,
|
|
@@ -1512,8 +1322,6 @@ export function createChatHandlers(runtime) {
|
|
|
1512
1322
|
planUse: (windows?.tiles ?? []).map(one => ({ name: one.name, window: one.window, percent: one.percent, detail: one.detail, tone: one.tone })),
|
|
1513
1323
|
};
|
|
1514
1324
|
}
|
|
1515
|
-
/** The first tasks last found for a project (docs/plans/get-side-effects.md): the background checks ask gh and
|
|
1516
|
-
* git grep while the first run is open; a page shows what they found, or the generic three. */
|
|
1517
1325
|
function firstTasksFor(repo) {
|
|
1518
1326
|
return firstTasks.get(repo)?.found ?? firstTaskSuggestions({ issues: [], todos: [] });
|
|
1519
1327
|
}
|