toolroll 0.9.104 → 0.9.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +62 -5
- package/README.md +18 -20
- package/dist/accent-colors.js +0 -29
- package/dist/acp-agents.js +0 -3
- package/dist/acp-attest.js +0 -30
- package/dist/acp-check.js +3 -70
- package/dist/acp-client.js +3 -94
- package/dist/acp-inspect.js +1 -20
- package/dist/action-ledger.js +0 -8
- package/dist/activity-line.js +0 -14
- package/dist/actor.js +0 -15
- package/dist/advanced-schema.js +12 -0
- package/dist/advanced-view.js +26 -0
- package/dist/advanced.js +61 -0
- package/dist/agent-board.js +0 -117
- package/dist/agent-fence.js +11 -367
- package/dist/agent-onboard.js +12 -50
- package/dist/agent-pulse.js +5 -38
- package/dist/agent-state-words.js +0 -8
- package/dist/agent-state.js +1 -45
- package/dist/agent-turns.js +3 -17
- package/dist/agentconfig.js +1 -99
- package/dist/agents-board.js +0 -60
- package/dist/agents-live.js +1 -8
- package/dist/api-tokens.js +0 -27
- package/dist/approval-authority.js +0 -59
- package/dist/approval-password.js +0 -10
- package/dist/approval-policy.js +0 -29
- package/dist/approval-rules-ui.js +0 -9
- package/dist/assignment-adapters.js +0 -14
- package/dist/assignment-brief.js +1 -17
- package/dist/assignment-delivery.js +0 -22
- package/dist/assignment-presentation.js +0 -14
- package/dist/assignment-status.js +1 -30
- package/dist/assignment-ui.js +0 -12
- package/dist/assignment.js +17 -139
- package/dist/attest.js +0 -38
- package/dist/audit-cli.js +0 -9
- package/dist/backend.js +0 -59
- package/dist/backup-ui.js +0 -12
- package/dist/backup.js +8 -61
- package/dist/batch-checks.js +0 -20
- package/dist/batch-policy.js +0 -4
- package/dist/beads.js +0 -48
- package/dist/bin.js +0 -8
- package/dist/board.js +1 -36
- package/dist/boot-identity.js +0 -42
- package/dist/bounded-spawn.js +4 -28
- package/dist/brand-mark.js +0 -21
- package/dist/brief-fence.js +0 -16
- package/dist/browser/terminal.css +1 -1
- package/dist/browser/terminal.js +16 -16
- package/dist/browser/workspace.css +2 -2
- package/dist/browser/workspace.js +26 -26
- package/dist/browser-crew.js +0 -8
- package/dist/browser-shell.js +2 -15
- package/dist/browser-workspace.js +6 -30
- package/dist/budget-alerts.js +1 -4
- package/dist/build-review.js +2 -50
- package/dist/builder-restart.js +0 -13
- package/dist/builder.js +21 -1035
- package/dist/canonical-json.js +0 -12
- package/dist/capscan.js +1 -32
- package/dist/card-catalog.js +0 -12
- package/dist/card-cli.js +0 -1
- package/dist/card-render.js +0 -25
- package/dist/card-sources.js +0 -10
- package/dist/chat-acceptance.js +0 -7
- package/dist/chat-actions.js +5 -190
- package/dist/chat-admission.js +0 -7
- package/dist/chat-approval.js +0 -25
- package/dist/chat-ask.js +0 -17
- package/dist/chat-card-part.js +0 -3
- package/dist/chat-card.js +0 -6
- package/dist/chat-channel.js +2 -83
- package/dist/chat-continuity.js +0 -31
- package/dist/chat-controls.js +0 -7
- package/dist/chat-core.js +0 -55
- package/dist/chat-decide.js +2 -153
- package/dist/chat-delivery-state.js +0 -49
- package/dist/chat-delivery.js +2 -143
- package/dist/chat-display.js +0 -2
- package/dist/chat-evidence.js +0 -65
- package/dist/chat-flow.js +0 -72
- package/dist/chat-follow.js +0 -13
- package/dist/chat-inbox.js +0 -34
- package/dist/chat-live-schema.js +0 -14
- package/dist/chat-live.js +2 -87
- package/dist/chat-message-states.js +13 -40
- package/dist/chat-messages.js +0 -153
- package/dist/chat-migration.js +0 -57
- package/dist/chat-polish.js +0 -7
- package/dist/chat-quiet.js +0 -37
- package/dist/chat-review.js +0 -4
- package/dist/chat-rooms.js +0 -22
- package/dist/chat-settings-page.js +0 -4
- package/dist/chat-task-actions.js +0 -7
- package/dist/chat-terms.js +0 -21
- package/dist/chat-voice.js +0 -38
- package/dist/chat-warmth.js +1 -3
- package/dist/check-access.js +0 -30
- package/dist/check-facts.js +2 -62
- package/dist/check-failure.js +0 -98
- package/dist/check-levels-ui.js +4 -10
- package/dist/check-levels.js +3 -35
- package/dist/check-load.js +1 -49
- package/dist/check-only-standing.js +0 -6
- package/dist/check-only.js +0 -22
- package/dist/check-progress.js +0 -32
- package/dist/check-repair.js +2 -35
- package/dist/check-report.js +1 -108
- package/dist/check-stamp.js +0 -20
- package/dist/checkout-cleanup.js +0 -84
- package/dist/checkout-proof.js +1 -13
- package/dist/child-database.js +0 -3
- package/dist/claim.js +4 -508
- package/dist/claude-print.js +0 -10
- package/dist/cli-fast.js +0 -8
- package/dist/cli-help.js +90 -78
- package/dist/cli-http.js +0 -10
- package/dist/cli.js +26 -241
- package/dist/code-extract.js +0 -6
- package/dist/code-map-acts.js +0 -7
- package/dist/code-map-admission.js +2 -26
- package/dist/code-map-build.js +3 -24
- package/dist/code-map-cli.js +0 -4
- package/dist/code-map-main.js +0 -6
- package/dist/code-map-read.js +0 -12
- package/dist/code-map-report.js +0 -9
- package/dist/code-map-shape.js +0 -19
- package/dist/code-map-store.js +0 -26
- package/dist/codex-limits.js +1 -17
- package/dist/coding-context.js +0 -10
- package/dist/coding-handoff.js +0 -14
- package/dist/coding-provider.js +0 -39
- package/dist/coding-shipping-ui.js +0 -1
- package/dist/coding-ui.js +0 -1
- package/dist/coding-update.js +1 -18
- package/dist/coding-workspace.js +0 -27
- package/dist/commit-extract.js +0 -83
- package/dist/connect-cli.js +0 -19
- package/dist/console-chrome.js +1 -34
- package/dist/console-instance.js +2 -91
- package/dist/container-state.js +0 -4
- package/dist/containment.js +2 -105
- package/dist/contract-changes.js +0 -6
- package/dist/contracts/acceptance-terms.js +0 -7
- package/dist/contracts/chat-actions.js +0 -46
- package/dist/contracts/chat-callback-rows.js +0 -8
- package/dist/contracts/chat-card.js +0 -14
- package/dist/contracts/chat-content.js +0 -55
- package/dist/contracts/chat-tables.js +0 -7
- package/dist/contracts/cli.js +0 -59
- package/dist/contracts/coding-activity.js +0 -15
- package/dist/contracts/coding-context.js +0 -15
- package/dist/contracts/coding-handoff.js +0 -11
- package/dist/contracts/coding-workspace.js +0 -14
- package/dist/contracts/console-api.js +1 -54
- package/dist/contracts/contract-test.js +0 -14
- package/dist/contracts/contract.js +0 -48
- package/dist/contracts/decision.js +0 -20
- package/dist/contracts/diff-stat.js +0 -16
- package/dist/contracts/discord-callback.js +0 -9
- package/dist/contracts/flow-card.js +0 -18
- package/dist/contracts/flow-propose.js +0 -8
- package/dist/contracts/flow-send.js +0 -31
- package/dist/contracts/flow.js +0 -112
- package/dist/contracts/gateway-tools.js +0 -22
- package/dist/contracts/handoff.js +0 -22
- package/dist/contracts/integration-metadata.js +0 -39
- package/dist/contracts/lead-context.js +0 -14
- package/dist/contracts/lead-tools.js +0 -49
- package/dist/contracts/mcp-oauth.js +0 -12
- package/dist/contracts/memory-pass.js +0 -21
- package/dist/contracts/model-catalog.js +0 -9
- package/dist/contracts/observation-request.js +0 -11
- package/dist/contracts/plan.js +0 -16
- package/dist/contracts/project-knowledge.js +0 -26
- package/dist/contracts/project-memory.js +0 -16
- package/dist/contracts/project-skills.js +0 -31
- package/dist/contracts/proof.js +0 -23
- package/dist/contracts/provider.js +0 -9
- package/dist/contracts/recipes.js +0 -16
- package/dist/contracts/release-check.js +0 -61
- package/dist/contracts/release-terms.js +0 -27
- package/dist/contracts/retention.js +0 -12
- package/dist/contracts/review-findings.js +0 -13
- package/dist/contracts/route-results.js +0 -15
- package/dist/contracts/route.js +0 -33
- package/dist/contracts/scope.js +0 -29
- package/dist/contracts/scout-report.js +0 -34
- package/dist/contracts/slack-callback.js +0 -11
- package/dist/contracts/sort-answer.js +0 -24
- package/dist/contracts/stage-output.js +0 -46
- package/dist/contracts/storage.js +0 -8
- package/dist/contracts/store-json.js +0 -41
- package/dist/contracts/subagent-turn.js +0 -23
- package/dist/contracts/task-sizing.js +0 -10
- package/dist/contracts/teams-callback.js +0 -7
- package/dist/contracts/telegram-callback.js +0 -27
- package/dist/contracts/trigger-payloads.js +0 -41
- package/dist/contracts/update-journal.js +0 -47
- package/dist/contracts/verification-receipt.js +0 -36
- package/dist/contracts/verification-view.js +0 -15
- package/dist/contracts/youiyoux-request.js +0 -26
- package/dist/control-setup.js +0 -7
- package/dist/control-ui.js +0 -3
- package/dist/controller-service.js +0 -4
- package/dist/controller-supervisor.js +0 -15
- package/dist/converse.js +3 -129
- package/dist/coordinator-proposals.js +1 -6
- package/dist/coordinator.js +0 -65
- package/dist/credentials-ui.js +0 -6
- package/dist/daemon.js +0 -137
- package/dist/database-reclaim.js +0 -3
- package/dist/decision.js +0 -78
- package/dist/demo-chat.js +4 -15
- package/dist/demo-sign-in.js +77 -0
- package/dist/demo.js +5 -194
- package/dist/deploy-gate.js +0 -20
- package/dist/deploy-lock.js +0 -4
- package/dist/deploy-phase.js +0 -22
- package/dist/deploy-rescue.js +0 -21
- package/dist/deprecations.js +0 -12
- package/dist/design/kit.css +9 -6
- package/dist/design/kit.js +2 -33
- package/dist/desktop-access.js +0 -9
- package/dist/desktop-bundle.js +1 -3
- package/dist/desktop-host.js +0 -34
- package/dist/desktop-update-gate.js +0 -8
- package/dist/desktop-update-recovery.js +1 -18
- package/dist/desktop-update.js +2 -48
- package/dist/digest-times.js +0 -2
- package/dist/disclosure.js +0 -5
- package/dist/discord-api.js +0 -6
- package/dist/discord-chat.js +0 -31
- package/dist/discord.js +0 -7
- package/dist/discover.js +0 -50
- package/dist/dispatch.js +61 -60
- package/dist/dispose.js +0 -208
- package/dist/doctor.js +0 -48
- package/dist/easy-start-args.js +7 -7
- package/dist/easy-start.js +32 -45
- package/dist/egress.js +1 -63
- package/dist/email-settings.js +0 -8
- package/dist/envelope.js +50 -86
- package/dist/eval-gate.js +1 -37
- package/dist/eval-hooks.js +0 -120
- package/dist/eval-oracle-main.js +0 -7
- package/dist/eval-oracle.js +3 -42
- package/dist/eval-world.js +1 -23
- package/dist/evals.js +6 -134
- package/dist/evidence-pack.js +0 -29
- package/dist/evidence-pair.js +0 -17
- package/dist/evidence.js +4 -280
- package/dist/exec.js +19 -404
- package/dist/exhaustion.js +0 -30
- package/dist/export-ui.js +0 -7
- package/dist/export.js +1 -38
- package/dist/failing-first.js +0 -6
- package/dist/fallback-schema.js +0 -5
- package/dist/fallback.js +0 -81
- package/dist/fast-start.js +0 -97
- package/dist/fast-terms.js +0 -3
- package/dist/fenced-check-coverage.js +0 -11
- package/dist/findings.js +1 -63
- package/dist/first-run.js +4 -57
- package/dist/first-tasks-child.js +0 -5
- package/dist/flaky-ci.js +1 -24
- package/dist/flaky-cli.js +0 -4
- package/dist/flaky.js +0 -43
- package/dist/fleet-schema.js +0 -11
- package/dist/flow-actions.js +0 -31
- package/dist/flow-browser.js +0 -42
- package/dist/flow-cadence.js +1 -24
- package/dist/flow-card-task.js +0 -11
- package/dist/flow-changed.js +0 -16
- package/dist/flow-code.js +1 -45
- package/dist/flow-draft.js +0 -17
- package/dist/flow-engine.js +2 -76
- package/dist/flow-gallery-ui.js +0 -28
- package/dist/flow-gallery.js +0 -54
- package/dist/flow-insights.js +0 -12
- package/dist/flow-items.js +0 -27
- package/dist/flow-live.js +0 -31
- package/dist/flow-people.js +0 -14
- package/dist/flow-pull-request.js +0 -32
- package/dist/flow-replies.js +0 -9
- package/dist/flow-result-card.js +0 -8
- package/dist/flow-schedule.js +0 -74
- package/dist/flow-scripts.js +0 -13
- package/dist/flow-secrets.js +0 -10
- package/dist/flow-send.js +0 -45
- package/dist/flow-share.js +0 -60
- package/dist/flow-sort.js +1 -24
- package/dist/flow-starters-ui.js +0 -2
- package/dist/flow-starters.js +0 -13
- package/dist/flow-steps.js +0 -80
- package/dist/flow-triggers.js +2 -256
- package/dist/flow-unattended-words.js +0 -13
- package/dist/flow-unattended.js +2 -115
- package/dist/flows-cli.js +2 -36
- package/dist/flows-ui.js +0 -51
- package/dist/flows.js +0 -158
- package/dist/folder-gate.js +0 -21
- package/dist/folder-look.js +0 -42
- package/dist/follow-through-brief.js +0 -6
- package/dist/follow-through-cli.js +0 -5
- package/dist/fonts.js +0 -13
- package/dist/gaps.js +0 -20
- package/dist/gate-failure.js +0 -7
- package/dist/git-floor.js +0 -12
- package/dist/git-incident.js +2 -38
- package/dist/git-views.js +0 -24
- package/dist/git.js +0 -31
- package/dist/github-import.js +0 -22
- package/dist/github-jobs.js +0 -12
- package/dist/google-mail.js +2 -27
- package/dist/grant.js +0 -110
- package/dist/graph.js +0 -108
- package/dist/guides.js +4 -15
- package/dist/handover-note.js +0 -12
- package/dist/health-cli.js +0 -2
- package/dist/home-groups.js +0 -15
- package/dist/html.js +0 -54
- package/dist/install-method.js +0 -12
- package/dist/integrations-ui.js +0 -15
- package/dist/integrations.js +7 -50
- package/dist/invoke.js +1 -381
- package/dist/is-record.js +0 -1
- package/dist/issues.js +0 -48
- package/dist/jsonl-discriminants.js +0 -6
- package/dist/keymap.js +0 -17
- package/dist/keys.js +0 -56
- package/dist/kits-ui.js +0 -3
- package/dist/kits.js +1 -24
- package/dist/knowledge-cli.js +0 -4
- package/dist/knowledge-ui.js +0 -8
- package/dist/landed-cleanup.js +0 -119
- package/dist/laptop-background.js +0 -85
- package/dist/laptop-service.js +0 -67
- package/dist/latency-timeline.js +2 -23
- package/dist/lead-about.js +0 -7
- package/dist/lead-answer-eval.js +0 -39
- package/dist/lead-capabilities.js +0 -19
- package/dist/lead-cli-live.js +0 -22
- package/dist/lead-cli.js +0 -27
- package/dist/lead-commitments.js +1 -27
- package/dist/lead-context.js +2 -42
- package/dist/lead-contract.js +0 -8
- package/dist/lead-doors.js +0 -105
- package/dist/lead-follow.js +0 -41
- package/dist/lead-identity.js +1 -4
- package/dist/lead-latency-schema.js +0 -13
- package/dist/lead-people.js +3 -18
- package/dist/lead-progress.js +0 -12
- package/dist/lead-queue-runtime.js +0 -26
- package/dist/lead-queue.js +0 -35
- package/dist/lead-route.js +0 -33
- package/dist/lead-status.js +0 -37
- package/dist/lead-sweep.js +0 -18
- package/dist/lead-tools.js +0 -160
- package/dist/lead-voice.js +0 -54
- package/dist/lead.js +2 -105
- package/dist/learning-child.js +0 -6
- package/dist/learning-look.js +0 -14
- package/dist/ledger-chain.js +0 -34
- package/dist/ledger-csv.js +0 -2
- package/dist/ledger-view.js +0 -3
- package/dist/lesson-notes.js +0 -56
- package/dist/limits-ui.js +0 -14
- package/dist/link.js +0 -79
- package/dist/live-backup.js +3 -33
- package/dist/live-bus.js +7 -81
- package/dist/live-children-read.js +4 -47
- package/dist/live-children.js +4 -44
- package/dist/live-detail.js +0 -17
- package/dist/live-input.js +5 -68
- package/dist/live-main-read.js +1 -14
- package/dist/live-notes.js +0 -12
- package/dist/live-open.js +1 -23
- package/dist/live-records.js +4 -151
- package/dist/live-reply.js +1 -51
- package/dist/live-terminal.js +12 -111
- package/dist/live.js +4 -130
- package/dist/local-owner-acts.js +0 -53
- package/dist/local-owner.js +2 -93
- package/dist/log.js +0 -8
- package/dist/login-secrets.js +2 -38
- package/dist/machine-check.js +0 -2
- package/dist/machine-identity.js +1 -46
- package/dist/mailbox.js +0 -30
- package/dist/maintenance.js +1 -3
- package/dist/mcp-connect.js +0 -88
- package/dist/mcp-core.js +0 -45
- package/dist/mcp-http.js +0 -13
- package/dist/mcp-oauth.js +0 -37
- package/dist/mcp-person.js +0 -11
- package/dist/mcp.js +3 -73
- package/dist/memory-cli.js +0 -3
- package/dist/memory-pass.js +0 -53
- package/dist/memory-tidy.js +0 -55
- package/dist/memory-use.js +2 -24
- package/dist/merge-checklist.js +21 -29
- package/dist/metrics.js +0 -10
- package/dist/mobile-viewport.js +0 -6
- package/dist/model-catalog.js +1 -33
- package/dist/model-choices.js +9 -84
- package/dist/model-names.js +0 -9
- package/dist/models-cli.js +0 -13
- package/dist/models-ui.js +0 -17
- package/dist/modes.js +0 -35
- package/dist/monitoring-settings.js +2 -27
- package/dist/monitoring-ui.js +2 -14
- package/dist/monitoring.js +2 -38
- package/dist/names.js +0 -39
- package/dist/needs-you.js +7 -70
- package/dist/never-index.js +0 -9
- package/dist/nightly-check.js +0 -74
- package/dist/nightly-github.js +0 -168
- package/dist/notification-delivery.js +0 -3
- package/dist/notification-rows.js +0 -17
- package/dist/oauth-run-token.js +1 -37
- package/dist/observations.js +0 -16
- package/dist/oidc.js +1 -20
- package/dist/onboard.js +4 -57
- package/dist/one-step-chat-schema.js +0 -15
- package/dist/openrouter-models.js +0 -6
- package/dist/operate-remote-arguments.js +0 -17
- package/dist/operate-remote.js +0 -33
- package/dist/operate.js +227 -2326
- package/dist/orphan-sweep.js +3 -37
- package/dist/page-work-contract.js +0 -3
- package/dist/password-bearer.js +1 -11
- package/dist/passwordless.js +0 -3
- package/dist/peek-cli.js +0 -46
- package/dist/peek.js +2 -61
- package/dist/people-audit-ui.js +0 -6
- package/dist/person-proof.js +0 -6
- package/dist/phase-routing.js +8 -183
- package/dist/plain-schema.js +0 -14
- package/dist/plain-words.js +18 -12
- package/dist/plan-auto.js +0 -20
- package/dist/plan-login.js +0 -16
- package/dist/plan.js +0 -68
- package/dist/plane-review.js +0 -56
- package/dist/planner-source.js +0 -96
- package/dist/planner.js +0 -117
- package/dist/policy-ui.js +0 -8
- package/dist/policy.js +0 -47
- package/dist/prepared-evidence.js +0 -5
- package/dist/principal.js +0 -29
- package/dist/probe.js +0 -30
- package/dist/process-custody.js +0 -15
- package/dist/process-liveness.js +0 -32
- package/dist/process-tree.js +3 -29
- package/dist/project-access.js +0 -10
- package/dist/project-admission.js +1 -41
- package/dist/project-cli.js +0 -6
- package/dist/project-concurrency.js +0 -35
- package/dist/project-delete-ui.js +4 -29
- package/dist/project-delete.js +1 -73
- package/dist/project-demo.js +0 -13
- package/dist/project-file.js +0 -2
- package/dist/project-identity.js +0 -41
- package/dist/project-knowledge.js +0 -39
- package/dist/project-learning.js +3 -55
- package/dist/project-memory.js +2 -45
- package/dist/project-outcomes.js +0 -6
- package/dist/project-sandbox.js +0 -23
- package/dist/project-skills.js +0 -12
- package/dist/project-tools.js +6 -184
- package/dist/project.js +0 -48
- package/dist/prompt.js +0 -31
- package/dist/proof.js +0 -220
- package/dist/proposal.js +0 -50
- package/dist/protected-storage-look.js +0 -6
- package/dist/protected-storage.js +1 -84
- package/dist/provider-auth.js +3 -69
- package/dist/provider-capture.js +1 -15
- package/dist/provider-connection.js +0 -8
- package/dist/provider-home.js +0 -25
- package/dist/provider-limits.js +0 -14
- package/dist/provider.js +0 -324
- package/dist/public-access.js +0 -34
- package/dist/public-check.js +0 -16
- package/dist/publish.js +1 -150
- package/dist/pull-request-flow.js +0 -77
- package/dist/pull-request-schema.js +0 -4
- package/dist/pull-request-ui.js +0 -5
- package/dist/pulls.js +0 -80
- package/dist/push.js +5 -89
- package/dist/quick-start.js +1 -23
- package/dist/read-executor-worker.js +0 -1
- package/dist/read-executor.js +0 -10
- package/dist/read-only-request.js +0 -7
- package/dist/recipe-ui.js +0 -6
- package/dist/recipes.js +0 -13
- package/dist/release-adapters.js +6 -214
- package/dist/release-approval.js +0 -74
- package/dist/release-authority.js +0 -42
- package/dist/release-auto.js +0 -142
- package/dist/release-card.js +0 -100
- package/dist/release-carry.js +0 -132
- package/dist/release-ci-hold.js +0 -20
- package/dist/release-cli.js +0 -46
- package/dist/release-coverage.js +0 -16
- package/dist/release-gate.js +0 -30
- package/dist/release-git.js +0 -24
- package/dist/release-links.js +0 -17
- package/dist/release-net.js +0 -42
- package/dist/release-next.js +0 -25
- package/dist/release-recheck.js +0 -89
- package/dist/release-refusal.js +0 -18
- package/dist/release-view.js +0 -5
- package/dist/release.js +7 -341
- package/dist/releases.js +0 -49
- package/dist/remote-audit.js +0 -25
- package/dist/remote-command.js +0 -16
- package/dist/remote-destination.js +5 -26
- package/dist/remote-exec.js +1 -27
- package/dist/remote-main.js +1 -53
- package/dist/remote-run.js +0 -5
- package/dist/remote.js +0 -49
- package/dist/render.js +0 -133
- package/dist/reply-shape.js +0 -85
- package/dist/reply-voice.js +0 -7
- package/dist/report-summary.js +0 -5
- package/dist/reported-usage.js +0 -30
- package/dist/repos.js +9 -62
- package/dist/repository-context.js +1 -24
- package/dist/request-budget-ui.js +0 -4
- package/dist/request-budget.js +0 -23
- package/dist/restart-certification.js +0 -37
- package/dist/result-actions.js +0 -62
- package/dist/result-acts.js +0 -34
- package/dist/result-completion.js +0 -25
- package/dist/result-evidence-readers.js +0 -3
- package/dist/result-follow-ups.js +1 -39
- package/dist/result-review.js +0 -86
- package/dist/result-shots.js +0 -39
- package/dist/retention-ui.js +0 -7
- package/dist/retention.js +2 -46
- package/dist/review-context.js +0 -129
- package/dist/review-evidence.js +0 -4
- package/dist/review-switch.js +1 -7
- package/dist/reviewer.js +0 -35
- package/dist/route-change-check.js +0 -2
- package/dist/route-change.js +0 -16
- package/dist/route-hooks.js +0 -27
- package/dist/route-results.js +2 -58
- package/dist/route-rules.js +1 -106
- package/dist/route-savings.js +0 -36
- package/dist/route-store.js +1 -133
- package/dist/run-closeout.js +2 -50
- package/dist/run-efficiency.js +2 -44
- package/dist/run-ending.js +0 -13
- package/dist/runner-process.js +0 -33
- package/dist/runner.js +17 -189
- package/dist/sample-project.js +2 -27
- package/dist/sandbox-launch.js +4 -25
- package/dist/sandbox-runtime.js +1 -88
- package/dist/scan.js +0 -27
- package/dist/scope.js +4 -567
- package/dist/scout-browser-lock.js +0 -6
- package/dist/scout-browser.js +2 -68
- package/dist/scout-net.js +1 -32
- package/dist/scout-report.js +0 -22
- package/dist/scout.js +1 -116
- package/dist/secret-mint.js +0 -6
- package/dist/serve.js +21 -555
- package/dist/server/agents-computers.js +0 -10
- package/dist/server/agents-live-filed.js +0 -13
- package/dist/server/agents-live-lead.js +0 -19
- package/dist/server/agents-live-room.js +0 -19
- package/dist/server/chat.js +2 -194
- package/dist/server/chrome.js +17 -263
- package/dist/server/console.css +4 -4
- package/dist/server/edge-refusal.js +0 -3
- package/dist/server/flows.js +5 -74
- package/dist/server/guards.js +1 -88
- package/dist/server/handler-registry.js +0 -2
- package/dist/server/home-asks.js +1 -22
- package/dist/server/home.js +1 -30
- package/dist/server/http.js +0 -82
- package/dist/server/in-place.js +0 -15
- package/dist/server/kit-standalone.js +0 -20
- package/dist/server/kit.js +2 -114
- package/dist/server/last-checks.js +0 -2
- package/dist/server/live.js +1 -36
- package/dist/server/merge-ready-view.js +0 -6
- package/dist/server/mutation-key.js +3 -40
- package/dist/server/pages-assets.js +0 -16
- package/dist/server/pages.js +7 -195
- package/dist/server/people-tokens.js +3 -101
- package/dist/server/remote-hooks.js +0 -13
- package/dist/server/remote.js +0 -28
- package/dist/server/render-chat.js +8 -144
- package/dist/server/render-code-map.js +0 -5
- package/dist/server/render-flaky.js +0 -8
- package/dist/server/render-follow-through.js +2 -5
- package/dist/server/render-history.js +2 -34
- package/dist/server/render-new-task.js +2 -29
- package/dist/server/render-pages.js +1 -111
- package/dist/server/render-people.js +2 -46
- package/dist/server/render-projects.js +15 -32
- package/dist/server/render-release.js +1 -14
- package/dist/server/render-results.js +4 -355
- package/dist/server/render-settings.js +0 -15
- package/dist/server/render-tasks.js +13 -493
- package/dist/server/request-context.js +2 -9
- package/dist/server/retired-routes.js +0 -11
- package/dist/server/route-policy.js +0 -3
- package/dist/server/route-table.js +6 -135
- package/dist/server/runtime.js +0 -1
- package/dist/server/session.js +0 -28
- package/dist/server/settings.js +40 -246
- package/dist/server/signup-gate.js +0 -11
- package/dist/server/sweeps.js +0 -6
- package/dist/server/task-views.js +9 -227
- package/dist/server/tasks.js +5 -539
- package/dist/server/terminals.js +2 -46
- package/dist/server/welcome.js +2 -22
- package/dist/server-telemetry.js +0 -9
- package/dist/settings-groups-ui.js +50 -63
- package/dist/settings-kit-script.js +0 -19
- package/dist/settings-kit.js +0 -63
- package/dist/settings-proofs.js +0 -23
- package/dist/setup-guide.js +1 -9
- package/dist/shared-deps.js +9 -84
- package/dist/sign-in-guard.js +0 -27
- package/dist/skills-ui.js +0 -2
- package/dist/skills.js +2 -54
- package/dist/slack-api.js +0 -3
- package/dist/slack-chat.js +0 -25
- package/dist/slack-settings.js +0 -1
- package/dist/slack-socket.js +0 -5
- package/dist/slack.js +0 -4
- package/dist/sleep.js +0 -1
- package/dist/source-key.js +0 -10
- package/dist/spend-report.js +0 -29
- package/dist/spend-ui.js +0 -26
- package/dist/spend.js +0 -40
- package/dist/sqlite-runtime.js +0 -2
- package/dist/sqlite-telemetry.js +0 -9
- package/dist/sso-settings.js +0 -13
- package/dist/sso-ui.js +0 -2
- package/dist/staged-runtimes.js +5 -39
- package/dist/steer-capabilities.js +1 -7
- package/dist/steer-controls.js +0 -10
- package/dist/steer-live.js +0 -31
- package/dist/steer-mailbox.js +4 -65
- package/dist/steer-status.js +0 -7
- package/dist/stop-proof.js +5 -62
- package/dist/storage-sweep-child.js +1 -5
- package/dist/storage-sweep-process.js +2 -20
- package/dist/storage-sweep-schedule.js +0 -32
- package/dist/storage-sweep.js +2 -51
- package/dist/storage-ui.js +0 -18
- package/dist/storage.js +0 -31
- package/dist/store-baseline.js +0 -14
- package/dist/store.js +109 -4763
- package/dist/stream-scope.js +0 -16
- package/dist/structured-output.js +0 -39
- package/dist/style-asset.js +0 -2
- package/dist/subagent-admin.js +0 -9
- package/dist/subagent-desk.js +0 -29
- package/dist/subagent-memory.js +0 -38
- package/dist/subagent-question.js +0 -29
- package/dist/subagent-tools.js +1 -60
- package/dist/subagent-week.js +0 -28
- package/dist/subagent-work.js +1 -39
- package/dist/subagents-ui.js +1 -13
- package/dist/subagents.js +0 -40
- package/dist/subscription-chat.js +1 -42
- package/dist/summary.js +0 -19
- package/dist/surface.js +0 -75
- package/dist/sweep-gate.js +0 -2
- package/dist/sweep-quarantine.js +2 -13
- package/dist/sync.js +0 -47
- package/dist/tailnet.js +0 -9
- package/dist/tamper-scan.js +0 -15
- package/dist/task-activity.js +1 -16
- package/dist/task-aliases.js +0 -3
- package/dist/task-archive.js +0 -7
- package/dist/task-base.js +0 -18
- package/dist/task-composer.js +0 -2
- package/dist/task-control.js +0 -74
- package/dist/task-live.js +0 -23
- package/dist/task-moves.js +0 -28
- package/dist/task-outcome-cli.js +17 -28
- package/dist/task-review-brief.js +0 -7
- package/dist/task-sizing.js +0 -47
- package/dist/task-source.js +0 -23
- package/dist/task-status.js +0 -106
- package/dist/task-text.js +0 -12
- package/dist/team-chat-authorization.js +0 -3
- package/dist/team-contract.js +0 -2
- package/dist/team-http.js +0 -4
- package/dist/team-leads.js +1 -16
- package/dist/team-runtime.js +0 -13
- package/dist/team-ui.js +0 -1
- package/dist/team-updates.js +0 -4
- package/dist/teams-api.js +0 -12
- package/dist/teams-chat.js +0 -28
- package/dist/teams.js +0 -12
- package/dist/teardown-git.js +6 -294
- package/dist/telegram-flow.js +0 -51
- package/dist/telegram-lead.js +2 -203
- package/dist/telegram-live.js +1 -42
- package/dist/telegram-progress.js +0 -18
- package/dist/telegram-settings.js +0 -7
- package/dist/telegram-status.js +0 -46
- package/dist/telegram-team.js +1 -33
- package/dist/telegram.js +6 -454
- package/dist/templates.js +0 -24
- package/dist/terminal-catalog.js +2 -20
- package/dist/terminal-text.js +0 -12
- package/dist/test-infra.js +0 -50
- package/dist/test-temp.js +3 -26
- package/dist/text-limits.js +0 -92
- package/dist/tidy.js +0 -76
- package/dist/tier-report.js +0 -2
- package/dist/token-notices.js +1 -9
- package/dist/tokens-cli.js +0 -13
- package/dist/tool-broker.js +2 -53
- package/dist/tool-launcher.js +0 -14
- package/dist/tool-secret-store.js +3 -125
- package/dist/toolroll-update-cli.js +0 -9
- package/dist/toolroll-update-ui.js +0 -14
- package/dist/toolroll-update.js +13 -252
- package/dist/tools-ui.js +0 -17
- package/dist/transitions-recipes.js +0 -2
- package/dist/tree-proof.js +0 -23
- package/dist/tui-contract.js +0 -8
- package/dist/tui-source.js +16 -36
- package/dist/tui.js +1 -1
- package/dist/typed-start.js +0 -27
- package/dist/unfenced-test-support.js +0 -5
- package/dist/up-processes.js +1 -40
- package/dist/up-role-child.js +1 -13
- package/dist/update-notice.js +0 -1
- package/dist/vanished-retry.js +0 -40
- package/dist/verification-evidence.js +0 -39
- package/dist/version.js +0 -1
- package/dist/wake-hub.js +0 -28
- package/dist/webhook-limits.js +0 -7
- package/dist/webhook-readers.js +0 -30
- package/dist/webhook-signing.js +0 -14
- package/dist/webhooks.js +0 -54
- package/dist/welcome-facts.js +2 -14
- package/dist/when-html.js +0 -27
- package/dist/work-index.js +26 -98
- package/dist/work-summary.js +2 -17
- package/dist/workspace-motion.js +0 -2
- package/dist/workspace-revision.js +1 -21
- package/dist/workspace-ui.js +15 -135
- package/dist/worktree-notices.js +0 -3
- package/dist/worktree.js +0 -308
- package/dist/writes-mode.js +0 -1
- package/dist/youiyoux-intake.js +4 -159
- package/package.json +4 -3
- package/dist/accent-colors.d.ts +0 -51
- package/dist/acp-agents.d.ts +0 -43
- package/dist/acp-attest.d.ts +0 -44
- package/dist/acp-check.d.ts +0 -37
- package/dist/acp-client.d.ts +0 -163
- package/dist/acp-inspect.d.ts +0 -23
- package/dist/action-ledger.d.ts +0 -27
- package/dist/activity-line.d.ts +0 -29
- package/dist/actor.d.ts +0 -11
- package/dist/agent-board.d.ts +0 -229
- package/dist/agent-fence.d.ts +0 -479
- package/dist/agent-onboard.d.ts +0 -158
- package/dist/agent-pulse.d.ts +0 -43
- package/dist/agent-state-words.d.ts +0 -19
- package/dist/agent-state.d.ts +0 -65
- package/dist/agent-turns.d.ts +0 -52
- package/dist/agentconfig.d.ts +0 -191
- package/dist/agents-board.d.ts +0 -145
- package/dist/agents-live.d.ts +0 -31
- package/dist/api-tokens.d.ts +0 -80
- package/dist/approval-authority.d.ts +0 -51
- package/dist/approval-password.d.ts +0 -31
- package/dist/approval-policy.d.ts +0 -69
- package/dist/approval-rules-ui.d.ts +0 -40
- package/dist/assignment-adapters.d.ts +0 -152
- package/dist/assignment-brief.d.ts +0 -83
- package/dist/assignment-delivery.d.ts +0 -86
- package/dist/assignment-presentation.d.ts +0 -37
- package/dist/assignment-status.d.ts +0 -71
- package/dist/assignment-ui.d.ts +0 -68
- package/dist/assignment.d.ts +0 -350
- package/dist/attest.d.ts +0 -59
- package/dist/audit-cli.d.ts +0 -17
- package/dist/backend.d.ts +0 -97
- package/dist/backup-ui.d.ts +0 -32
- package/dist/backup.d.ts +0 -92
- package/dist/batch-checks.d.ts +0 -15
- package/dist/batch-policy.d.ts +0 -23
- package/dist/beads.d.ts +0 -34
- package/dist/bin.d.ts +0 -2
- package/dist/board.d.ts +0 -134
- package/dist/boot-identity.d.ts +0 -64
- package/dist/bounded-spawn.d.ts +0 -57
- package/dist/brand-icons.d.ts +0 -168
- package/dist/brand-mark.d.ts +0 -28
- package/dist/brief-fence.d.ts +0 -9
- package/dist/browser-crew.d.ts +0 -12
- package/dist/browser-shell.d.ts +0 -9
- package/dist/browser-workspace.d.ts +0 -1985
- package/dist/budget-alerts.d.ts +0 -19
- package/dist/build-review.d.ts +0 -38
- package/dist/builder-restart.d.ts +0 -21
- package/dist/builder.d.ts +0 -409
- package/dist/canonical-json.d.ts +0 -14
- package/dist/capscan.d.ts +0 -35
- package/dist/card-catalog.d.ts +0 -209
- package/dist/card-cli.d.ts +0 -43
- package/dist/card-render.d.ts +0 -43
- package/dist/card-sources.d.ts +0 -68
- package/dist/chat-acceptance.d.ts +0 -74
- package/dist/chat-actions.d.ts +0 -460
- package/dist/chat-admission.d.ts +0 -19
- package/dist/chat-approval.d.ts +0 -58
- package/dist/chat-ask.d.ts +0 -32
- package/dist/chat-card-part.d.ts +0 -11
- package/dist/chat-card.d.ts +0 -46
- package/dist/chat-channel.d.ts +0 -126
- package/dist/chat-continuity.d.ts +0 -32
- package/dist/chat-controls.d.ts +0 -117
- package/dist/chat-core.d.ts +0 -177
- package/dist/chat-decide.d.ts +0 -269
- package/dist/chat-delivery-state.d.ts +0 -132
- package/dist/chat-delivery.d.ts +0 -71
- package/dist/chat-display.d.ts +0 -1
- package/dist/chat-evidence.d.ts +0 -123
- package/dist/chat-flow.d.ts +0 -70
- package/dist/chat-follow.d.ts +0 -20
- package/dist/chat-inbox.d.ts +0 -57
- package/dist/chat-live-schema.d.ts +0 -17
- package/dist/chat-live.d.ts +0 -161
- package/dist/chat-message-states.d.ts +0 -75
- package/dist/chat-messages.d.ts +0 -338
- package/dist/chat-migration.d.ts +0 -30
- package/dist/chat-polish.d.ts +0 -17
- package/dist/chat-quiet.d.ts +0 -40
- package/dist/chat-review.d.ts +0 -51
- package/dist/chat-rooms.d.ts +0 -123
- package/dist/chat-settings-page.d.ts +0 -43
- package/dist/chat-task-actions.d.ts +0 -59
- package/dist/chat-terms.d.ts +0 -29
- package/dist/chat-voice.d.ts +0 -69
- package/dist/chat-warmth.d.ts +0 -21
- package/dist/check-access.d.ts +0 -54
- package/dist/check-facts.d.ts +0 -126
- package/dist/check-failure.d.ts +0 -113
- package/dist/check-levels-ui.d.ts +0 -36
- package/dist/check-levels.d.ts +0 -70
- package/dist/check-load.d.ts +0 -85
- package/dist/check-only-standing.d.ts +0 -36
- package/dist/check-only.d.ts +0 -15
- package/dist/check-progress.d.ts +0 -78
- package/dist/check-repair.d.ts +0 -47
- package/dist/check-report.d.ts +0 -177
- package/dist/check-stamp.d.ts +0 -46
- package/dist/checkout-cleanup.d.ts +0 -157
- package/dist/checkout-proof.d.ts +0 -28
- package/dist/child-database.d.ts +0 -12
- package/dist/claim.d.ts +0 -627
- package/dist/claude-print.d.ts +0 -12
- package/dist/cli-fast.d.ts +0 -8
- package/dist/cli-help.d.ts +0 -8
- package/dist/cli-http.d.ts +0 -58
- package/dist/cli.d.ts +0 -149
- package/dist/code-extract.d.ts +0 -44
- package/dist/code-map-acts.d.ts +0 -24
- package/dist/code-map-admission.d.ts +0 -52
- package/dist/code-map-build.d.ts +0 -63
- package/dist/code-map-cli.d.ts +0 -153
- package/dist/code-map-main.d.ts +0 -1
- package/dist/code-map-read.d.ts +0 -106
- package/dist/code-map-report.d.ts +0 -37
- package/dist/code-map-shape.d.ts +0 -172
- package/dist/code-map-store.d.ts +0 -136
- package/dist/codex-limits.d.ts +0 -15
- package/dist/coding-context.d.ts +0 -18
- package/dist/coding-handoff.d.ts +0 -39
- package/dist/coding-provider.d.ts +0 -88
- package/dist/coding-shipping-ui.d.ts +0 -5
- package/dist/coding-types.d.ts +0 -16
- package/dist/coding-ui.d.ts +0 -19
- package/dist/coding-update.d.ts +0 -28
- package/dist/coding-workspace.d.ts +0 -141
- package/dist/commit-extract.d.ts +0 -135
- package/dist/connect-cli.d.ts +0 -34
- package/dist/console-chrome.d.ts +0 -41
- package/dist/console-instance.d.ts +0 -157
- package/dist/container-state.d.ts +0 -5
- package/dist/containment.d.ts +0 -205
- package/dist/contract-changes.d.ts +0 -52
- package/dist/contracts/acceptance-terms.d.ts +0 -14
- package/dist/contracts/chat-actions.d.ts +0 -465
- package/dist/contracts/chat-callback-rows.d.ts +0 -59
- package/dist/contracts/chat-card.d.ts +0 -91
- package/dist/contracts/chat-content.d.ts +0 -551
- package/dist/contracts/chat-tables.d.ts +0 -12
- package/dist/contracts/cli.d.ts +0 -987
- package/dist/contracts/coding-activity.d.ts +0 -64
- package/dist/contracts/coding-context.d.ts +0 -97
- package/dist/contracts/coding-handoff.d.ts +0 -44
- package/dist/contracts/coding-workspace.d.ts +0 -165
- package/dist/contracts/console-api.d.ts +0 -540
- package/dist/contracts/contract-test.d.ts +0 -45
- package/dist/contracts/contract.d.ts +0 -92
- package/dist/contracts/decision.d.ts +0 -45
- package/dist/contracts/diff-stat.d.ts +0 -58
- package/dist/contracts/discord-callback.d.ts +0 -45
- package/dist/contracts/flow-card.d.ts +0 -53
- package/dist/contracts/flow-propose.d.ts +0 -334
- package/dist/contracts/flow-send.d.ts +0 -245
- package/dist/contracts/flow.d.ts +0 -19565
- package/dist/contracts/gateway-tools.d.ts +0 -472
- package/dist/contracts/handoff.d.ts +0 -91
- package/dist/contracts/health.d.ts +0 -82
- package/dist/contracts/integration-metadata.d.ts +0 -100
- package/dist/contracts/lead-context.d.ts +0 -165
- package/dist/contracts/lead-tools.d.ts +0 -2312
- package/dist/contracts/mcp-oauth.d.ts +0 -53
- package/dist/contracts/memory-pass.d.ts +0 -157
- package/dist/contracts/model-catalog.d.ts +0 -21
- package/dist/contracts/observation-request.d.ts +0 -37
- package/dist/contracts/plan.d.ts +0 -58
- package/dist/contracts/project-knowledge.d.ts +0 -159
- package/dist/contracts/project-memory.d.ts +0 -119
- package/dist/contracts/project-skills.d.ts +0 -120
- package/dist/contracts/proof.d.ts +0 -136
- package/dist/contracts/provider.d.ts +0 -40
- package/dist/contracts/recipes.d.ts +0 -166
- package/dist/contracts/release-check.d.ts +0 -371
- package/dist/contracts/release-terms.d.ts +0 -107
- package/dist/contracts/retention.d.ts +0 -42
- package/dist/contracts/review-findings.d.ts +0 -46
- package/dist/contracts/route-results.d.ts +0 -121
- package/dist/contracts/route.d.ts +0 -897
- package/dist/contracts/scope.d.ts +0 -105
- package/dist/contracts/scout-report.d.ts +0 -234
- package/dist/contracts/slack-callback.d.ts +0 -43
- package/dist/contracts/sort-answer.d.ts +0 -83
- package/dist/contracts/stage-output.d.ts +0 -127
- package/dist/contracts/storage.d.ts +0 -37
- package/dist/contracts/store-json.d.ts +0 -313
- package/dist/contracts/subagent-turn.d.ts +0 -43
- package/dist/contracts/task-sizing.d.ts +0 -24
- package/dist/contracts/teams-callback.d.ts +0 -13
- package/dist/contracts/telegram-callback.d.ts +0 -120
- package/dist/contracts/trigger-payloads.d.ts +0 -389
- package/dist/contracts/update-journal.d.ts +0 -254
- package/dist/contracts/verification-receipt.d.ts +0 -200
- package/dist/contracts/verification-view.d.ts +0 -102
- package/dist/contracts/youiyoux-request.d.ts +0 -248
- package/dist/control-setup.d.ts +0 -44
- package/dist/control-ui.d.ts +0 -37
- package/dist/controller-service.d.ts +0 -1
- package/dist/controller-supervisor.d.ts +0 -38
- package/dist/converse.d.ts +0 -316
- package/dist/coordinator-proposals.d.ts +0 -29
- package/dist/coordinator.d.ts +0 -186
- package/dist/credentials-ui.d.ts +0 -33
- package/dist/daemon.d.ts +0 -226
- package/dist/database-reclaim.d.ts +0 -4
- package/dist/decision.d.ts +0 -119
- package/dist/demo-chat.d.ts +0 -32
- package/dist/demo.d.ts +0 -153
- package/dist/deploy-gate.d.ts +0 -20
- package/dist/deploy-lock.d.ts +0 -8
- package/dist/deploy-phase.d.ts +0 -37
- package/dist/deploy-rescue.d.ts +0 -42
- package/dist/deprecations.d.ts +0 -20
- package/dist/design/kit.d.ts +0 -216
- package/dist/desktop-access.d.ts +0 -28
- package/dist/desktop-bundle.d.ts +0 -16
- package/dist/desktop-host.d.ts +0 -54
- package/dist/desktop-update-gate.d.ts +0 -12
- package/dist/desktop-update-recovery.d.ts +0 -14
- package/dist/desktop-update.d.ts +0 -147
- package/dist/digest-times.d.ts +0 -3
- package/dist/disclosure.d.ts +0 -6
- package/dist/discord-api.d.ts +0 -24
- package/dist/discord-chat.d.ts +0 -27
- package/dist/discord-settings.d.ts +0 -4
- package/dist/discord.d.ts +0 -10
- package/dist/discover.d.ts +0 -75
- package/dist/dispatch.d.ts +0 -123
- package/dist/dispose.d.ts +0 -194
- package/dist/doctor.d.ts +0 -67
- package/dist/easy-start-args.d.ts +0 -13
- package/dist/easy-start.d.ts +0 -77
- package/dist/egress.d.ts +0 -121
- package/dist/email-settings.d.ts +0 -34
- package/dist/envelope.d.ts +0 -47
- package/dist/eval-gate.d.ts +0 -51
- package/dist/eval-hooks.d.ts +0 -94
- package/dist/eval-oracle-main.d.ts +0 -1
- package/dist/eval-oracle.d.ts +0 -60
- package/dist/eval-world.d.ts +0 -17
- package/dist/evals.d.ts +0 -299
- package/dist/evidence-pack.d.ts +0 -186
- package/dist/evidence-pair.d.ts +0 -53
- package/dist/evidence.d.ts +0 -371
- package/dist/exec.d.ts +0 -355
- package/dist/exhaustion.d.ts +0 -58
- package/dist/export-ui.d.ts +0 -11
- package/dist/export.d.ts +0 -48
- package/dist/failing-first.d.ts +0 -31
- package/dist/fallback-schema.d.ts +0 -8
- package/dist/fallback.d.ts +0 -138
- package/dist/fast-start.d.ts +0 -213
- package/dist/fast-terms.d.ts +0 -9
- package/dist/fenced-check-coverage.d.ts +0 -62
- package/dist/findings.d.ts +0 -224
- package/dist/first-run.d.ts +0 -197
- package/dist/first-tasks-child.d.ts +0 -1
- package/dist/flaky-ci.d.ts +0 -31
- package/dist/flaky-cli.d.ts +0 -60
- package/dist/flaky.d.ts +0 -83
- package/dist/fleet-schema.d.ts +0 -17
- package/dist/flow-actions.d.ts +0 -79
- package/dist/flow-browser.d.ts +0 -103
- package/dist/flow-cadence.d.ts +0 -48
- package/dist/flow-card-task.d.ts +0 -11
- package/dist/flow-changed.d.ts +0 -14
- package/dist/flow-code.d.ts +0 -84
- package/dist/flow-draft.d.ts +0 -42
- package/dist/flow-engine.d.ts +0 -82
- package/dist/flow-gallery-ui.d.ts +0 -73
- package/dist/flow-gallery.d.ts +0 -147
- package/dist/flow-insights.d.ts +0 -104
- package/dist/flow-items.d.ts +0 -37
- package/dist/flow-live.d.ts +0 -16
- package/dist/flow-people.d.ts +0 -23
- package/dist/flow-pull-request.d.ts +0 -14
- package/dist/flow-replies.d.ts +0 -48
- package/dist/flow-result-card.d.ts +0 -22
- package/dist/flow-schedule.d.ts +0 -154
- package/dist/flow-scripts.d.ts +0 -31
- package/dist/flow-secrets.d.ts +0 -13
- package/dist/flow-send.d.ts +0 -54
- package/dist/flow-share.d.ts +0 -78
- package/dist/flow-sort.d.ts +0 -63
- package/dist/flow-starters-ui.d.ts +0 -15
- package/dist/flow-starters.d.ts +0 -63
- package/dist/flow-steps.d.ts +0 -52
- package/dist/flow-triggers.d.ts +0 -303
- package/dist/flow-unattended-words.d.ts +0 -48
- package/dist/flow-unattended.d.ts +0 -259
- package/dist/flows-cli.d.ts +0 -358
- package/dist/flows-ui.d.ts +0 -70
- package/dist/flows.d.ts +0 -136
- package/dist/folder-gate.d.ts +0 -32
- package/dist/folder-look.d.ts +0 -110
- package/dist/follow-through-brief.d.ts +0 -12
- package/dist/follow-through-cli.d.ts +0 -23
- package/dist/fonts.d.ts +0 -19
- package/dist/gaps.d.ts +0 -35
- package/dist/gate-failure.d.ts +0 -40
- package/dist/git-floor.d.ts +0 -16
- package/dist/git-incident.d.ts +0 -65
- package/dist/git-views.d.ts +0 -20
- package/dist/git.d.ts +0 -54
- package/dist/github-import.d.ts +0 -62
- package/dist/github-jobs.d.ts +0 -25
- package/dist/google-mail.d.ts +0 -59
- package/dist/grant.d.ts +0 -136
- package/dist/graph.d.ts +0 -164
- package/dist/guides.d.ts +0 -22
- package/dist/handover-note.d.ts +0 -33
- package/dist/health-cli.d.ts +0 -3
- package/dist/home-groups.d.ts +0 -39
- package/dist/html.d.ts +0 -85
- package/dist/install-method.d.ts +0 -17
- package/dist/integrations-ui.d.ts +0 -17
- package/dist/integrations.d.ts +0 -138
- package/dist/invoke.d.ts +0 -228
- package/dist/is-record.d.ts +0 -2
- package/dist/issues.d.ts +0 -41
- package/dist/jsonl-discriminants.d.ts +0 -11
- package/dist/keymap.d.ts +0 -43
- package/dist/keys.d.ts +0 -108
- package/dist/kits-ui.d.ts +0 -16
- package/dist/kits.d.ts +0 -88
- package/dist/knowledge-cli.d.ts +0 -132
- package/dist/knowledge-ui.d.ts +0 -45
- package/dist/landed-cleanup.d.ts +0 -175
- package/dist/laptop-background.d.ts +0 -187
- package/dist/laptop-service.d.ts +0 -111
- package/dist/latency-timeline.d.ts +0 -46
- package/dist/lead-about.d.ts +0 -35
- package/dist/lead-answer-eval.d.ts +0 -93
- package/dist/lead-capabilities.d.ts +0 -57
- package/dist/lead-cli-live.d.ts +0 -56
- package/dist/lead-cli.d.ts +0 -58
- package/dist/lead-commitments.d.ts +0 -84
- package/dist/lead-context.d.ts +0 -45
- package/dist/lead-contract.d.ts +0 -10
- package/dist/lead-doors.d.ts +0 -122
- package/dist/lead-follow.d.ts +0 -26
- package/dist/lead-identity.d.ts +0 -23
- package/dist/lead-latency-schema.d.ts +0 -24
- package/dist/lead-people.d.ts +0 -55
- package/dist/lead-progress.d.ts +0 -67
- package/dist/lead-queue-runtime.d.ts +0 -46
- package/dist/lead-queue.d.ts +0 -104
- package/dist/lead-route.d.ts +0 -56
- package/dist/lead-status.d.ts +0 -116
- package/dist/lead-sweep.d.ts +0 -67
- package/dist/lead-tools.d.ts +0 -167
- package/dist/lead-voice.d.ts +0 -85
- package/dist/lead.d.ts +0 -142
- package/dist/learning-child.d.ts +0 -1
- package/dist/learning-look.d.ts +0 -25
- package/dist/ledger-chain.d.ts +0 -46
- package/dist/ledger-csv.d.ts +0 -4
- package/dist/ledger-view.d.ts +0 -27
- package/dist/lesson-notes.d.ts +0 -81
- package/dist/limits-ui.d.ts +0 -34
- package/dist/link.d.ts +0 -72
- package/dist/live-backup.d.ts +0 -39
- package/dist/live-bus.d.ts +0 -141
- package/dist/live-children-read.d.ts +0 -52
- package/dist/live-children.d.ts +0 -73
- package/dist/live-detail.d.ts +0 -27
- package/dist/live-input.d.ts +0 -68
- package/dist/live-main-read.d.ts +0 -19
- package/dist/live-notes.d.ts +0 -20
- package/dist/live-open.d.ts +0 -28
- package/dist/live-records.d.ts +0 -149
- package/dist/live-reply.d.ts +0 -83
- package/dist/live-terminal.d.ts +0 -273
- package/dist/live.d.ts +0 -152
- package/dist/local-owner-acts.d.ts +0 -83
- package/dist/local-owner.d.ts +0 -135
- package/dist/log.d.ts +0 -7
- package/dist/login-secrets.d.ts +0 -60
- package/dist/machine-check.d.ts +0 -16
- package/dist/machine-identity.d.ts +0 -75
- package/dist/mailbox.d.ts +0 -57
- package/dist/maintenance.d.ts +0 -13
- package/dist/mcp-connect.d.ts +0 -181
- package/dist/mcp-core.d.ts +0 -110
- package/dist/mcp-http.d.ts +0 -32
- package/dist/mcp-oauth.d.ts +0 -92
- package/dist/mcp-person.d.ts +0 -22
- package/dist/mcp.d.ts +0 -20
- package/dist/memory-cli.d.ts +0 -768
- package/dist/memory-pass.d.ts +0 -151
- package/dist/memory-tidy.d.ts +0 -181
- package/dist/memory-use.d.ts +0 -35
- package/dist/merge-checklist.d.ts +0 -55
- package/dist/metrics.d.ts +0 -6
- package/dist/mobile-viewport.d.ts +0 -7
- package/dist/model-catalog.d.ts +0 -123
- package/dist/model-choices.d.ts +0 -235
- package/dist/model-names.d.ts +0 -6
- package/dist/models-cli.d.ts +0 -307
- package/dist/models-ui.d.ts +0 -161
- package/dist/modes.d.ts +0 -99
- package/dist/monitoring-settings.d.ts +0 -44
- package/dist/monitoring-ui.d.ts +0 -23
- package/dist/monitoring.d.ts +0 -34
- package/dist/names.d.ts +0 -67
- package/dist/needs-you.d.ts +0 -164
- package/dist/never-index.d.ts +0 -3
- package/dist/nightly-check.d.ts +0 -107
- package/dist/nightly-github.d.ts +0 -318
- package/dist/notification-delivery.d.ts +0 -19
- package/dist/notification-rows.d.ts +0 -30
- package/dist/oauth-run-token.d.ts +0 -51
- package/dist/observations.d.ts +0 -36
- package/dist/oidc.d.ts +0 -71
- package/dist/onboard.d.ts +0 -108
- package/dist/one-step-chat-schema.d.ts +0 -22
- package/dist/openrouter-models.d.ts +0 -34
- package/dist/operate-remote-arguments.d.ts +0 -36
- package/dist/operate-remote.d.ts +0 -98
- package/dist/operate.d.ts +0 -401
- package/dist/orphan-sweep.d.ts +0 -65
- package/dist/page-work-contract.d.ts +0 -21
- package/dist/password-bearer.d.ts +0 -25
- package/dist/passwordless.d.ts +0 -23
- package/dist/peek-cli.d.ts +0 -112
- package/dist/peek.d.ts +0 -110
- package/dist/people-audit-ui.d.ts +0 -16
- package/dist/person-proof.d.ts +0 -2
- package/dist/phase-routing.d.ts +0 -401
- package/dist/plain-schema.d.ts +0 -23
- package/dist/plain-words.d.ts +0 -20
- package/dist/plan-auto.d.ts +0 -25
- package/dist/plan-login.d.ts +0 -14
- package/dist/plan.d.ts +0 -188
- package/dist/plane-review.d.ts +0 -54
- package/dist/planner-source.d.ts +0 -225
- package/dist/planner.d.ts +0 -76
- package/dist/policy-ui.d.ts +0 -22
- package/dist/policy.d.ts +0 -92
- package/dist/prepared-evidence.d.ts +0 -17
- package/dist/principal.d.ts +0 -42
- package/dist/probe.d.ts +0 -46
- package/dist/process-custody.d.ts +0 -17
- package/dist/process-liveness.d.ts +0 -13
- package/dist/process-tree.d.ts +0 -39
- package/dist/project-access.d.ts +0 -17
- package/dist/project-activity.d.ts +0 -20
- package/dist/project-admission.d.ts +0 -105
- package/dist/project-cli.d.ts +0 -19
- package/dist/project-concurrency.d.ts +0 -62
- package/dist/project-delete-ui.d.ts +0 -96
- package/dist/project-delete.d.ts +0 -59
- package/dist/project-demo.d.ts +0 -12
- package/dist/project-file.d.ts +0 -3
- package/dist/project-identity.d.ts +0 -52
- package/dist/project-knowledge.d.ts +0 -124
- package/dist/project-learning.d.ts +0 -120
- package/dist/project-memory.d.ts +0 -70
- package/dist/project-outcomes.d.ts +0 -119
- package/dist/project-sandbox.d.ts +0 -59
- package/dist/project-skills.d.ts +0 -139
- package/dist/project-tools.d.ts +0 -318
- package/dist/project.d.ts +0 -65
- package/dist/prompt.d.ts +0 -33
- package/dist/proof.d.ts +0 -457
- package/dist/proposal.d.ts +0 -70
- package/dist/protected-storage-look.d.ts +0 -1
- package/dist/protected-storage.d.ts +0 -98
- package/dist/provider-auth.d.ts +0 -143
- package/dist/provider-capture.d.ts +0 -34
- package/dist/provider-connection.d.ts +0 -23
- package/dist/provider-home.d.ts +0 -22
- package/dist/provider-limits.d.ts +0 -37
- package/dist/provider.d.ts +0 -369
- package/dist/public-access.d.ts +0 -61
- package/dist/public-check.d.ts +0 -37
- package/dist/publish.d.ts +0 -146
- package/dist/pull-request-flow.d.ts +0 -189
- package/dist/pull-request-schema.d.ts +0 -5
- package/dist/pull-request-ui.d.ts +0 -25
- package/dist/pulls.d.ts +0 -121
- package/dist/push.d.ts +0 -120
- package/dist/quality.d.ts +0 -8
- package/dist/quick-start.d.ts +0 -26
- package/dist/read-executor-worker.d.ts +0 -1
- package/dist/read-executor.d.ts +0 -66
- package/dist/read-only-request.d.ts +0 -4
- package/dist/recipe-ui.d.ts +0 -21
- package/dist/recipes.d.ts +0 -56
- package/dist/release-adapters.d.ts +0 -205
- package/dist/release-approval.d.ts +0 -180
- package/dist/release-authority.d.ts +0 -173
- package/dist/release-auto.d.ts +0 -184
- package/dist/release-card.d.ts +0 -170
- package/dist/release-carry.d.ts +0 -261
- package/dist/release-ci-hold.d.ts +0 -41
- package/dist/release-cli.d.ts +0 -34
- package/dist/release-coverage.d.ts +0 -16
- package/dist/release-gate.d.ts +0 -84
- package/dist/release-git.d.ts +0 -43
- package/dist/release-links.d.ts +0 -29
- package/dist/release-net.d.ts +0 -90
- package/dist/release-next.d.ts +0 -48
- package/dist/release-recheck.d.ts +0 -146
- package/dist/release-refusal.d.ts +0 -32
- package/dist/release-view.d.ts +0 -37
- package/dist/release.d.ts +0 -806
- package/dist/releases.d.ts +0 -94
- package/dist/remote-audit.d.ts +0 -79
- package/dist/remote-command.d.ts +0 -45
- package/dist/remote-destination.d.ts +0 -36
- package/dist/remote-exec.d.ts +0 -38
- package/dist/remote-main.d.ts +0 -111
- package/dist/remote-run.d.ts +0 -20
- package/dist/remote.d.ts +0 -67
- package/dist/render.d.ts +0 -64
- package/dist/reply-shape.d.ts +0 -106
- package/dist/reply-voice.d.ts +0 -23
- package/dist/report-summary.d.ts +0 -22
- package/dist/reported-usage.d.ts +0 -69
- package/dist/repos.d.ts +0 -67
- package/dist/repository-context-ui.d.ts +0 -3
- package/dist/repository-context.d.ts +0 -66
- package/dist/request-budget-ui.d.ts +0 -14
- package/dist/request-budget.d.ts +0 -127
- package/dist/restart-certification.d.ts +0 -133
- package/dist/result-actions.d.ts +0 -36
- package/dist/result-acts.d.ts +0 -112
- package/dist/result-completion.d.ts +0 -39
- package/dist/result-evidence-readers.d.ts +0 -42
- package/dist/result-follow-ups.d.ts +0 -118
- package/dist/result-review.d.ts +0 -220
- package/dist/result-shots.d.ts +0 -59
- package/dist/retention-ui.d.ts +0 -21
- package/dist/retention.d.ts +0 -77
- package/dist/review-context.d.ts +0 -245
- package/dist/review-evidence.d.ts +0 -33
- package/dist/review-switch.d.ts +0 -36
- package/dist/reviewer.d.ts +0 -99
- package/dist/route-change-check.d.ts +0 -4
- package/dist/route-change.d.ts +0 -22
- package/dist/route-hooks.d.ts +0 -54
- package/dist/route-results.d.ts +0 -75
- package/dist/route-rules.d.ts +0 -324
- package/dist/route-savings.d.ts +0 -136
- package/dist/route-store.d.ts +0 -300
- package/dist/run-closeout.d.ts +0 -89
- package/dist/run-efficiency.d.ts +0 -74
- package/dist/run-ending.d.ts +0 -21
- package/dist/runner-process.d.ts +0 -76
- package/dist/runner.d.ts +0 -324
- package/dist/sample-project.d.ts +0 -31
- package/dist/sandbox-launch.d.ts +0 -1
- package/dist/sandbox-runtime.d.ts +0 -128
- package/dist/scan.d.ts +0 -32
- package/dist/scope.d.ts +0 -1098
- package/dist/scout-browser-lock.d.ts +0 -69
- package/dist/scout-browser.d.ts +0 -107
- package/dist/scout-net.d.ts +0 -25
- package/dist/scout-report.d.ts +0 -23
- package/dist/scout.d.ts +0 -142
- package/dist/secret-mint.d.ts +0 -1
- package/dist/serve.d.ts +0 -11
- package/dist/server/agents-computers.d.ts +0 -9
- package/dist/server/agents-live-filed.d.ts +0 -17
- package/dist/server/agents-live-lead.d.ts +0 -47
- package/dist/server/agents-live-room.d.ts +0 -23
- package/dist/server/chat.d.ts +0 -39
- package/dist/server/chrome.d.ts +0 -328
- package/dist/server/edge-refusal.d.ts +0 -7
- package/dist/server/flows.d.ts +0 -8
- package/dist/server/guards.d.ts +0 -81
- package/dist/server/handler-context.d.ts +0 -22
- package/dist/server/handler-registry.d.ts +0 -23
- package/dist/server/home-asks.d.ts +0 -45
- package/dist/server/home.d.ts +0 -65
- package/dist/server/http.d.ts +0 -337
- package/dist/server/in-place.d.ts +0 -15
- package/dist/server/kit-standalone.d.ts +0 -22
- package/dist/server/kit.d.ts +0 -452
- package/dist/server/last-checks.d.ts +0 -17
- package/dist/server/live.d.ts +0 -74
- package/dist/server/merge-ready-view.d.ts +0 -10
- package/dist/server/mutation-key.d.ts +0 -70
- package/dist/server/pages-assets.d.ts +0 -11
- package/dist/server/pages.d.ts +0 -8
- package/dist/server/people-tokens.d.ts +0 -18
- package/dist/server/remote-hooks.d.ts +0 -29
- package/dist/server/remote.d.ts +0 -60
- package/dist/server/render-chat.d.ts +0 -439
- package/dist/server/render-code-map.d.ts +0 -30
- package/dist/server/render-flaky.d.ts +0 -20
- package/dist/server/render-follow-through.d.ts +0 -11
- package/dist/server/render-history.d.ts +0 -51
- package/dist/server/render-new-task.d.ts +0 -54
- package/dist/server/render-pages.d.ts +0 -236
- package/dist/server/render-people.d.ts +0 -102
- package/dist/server/render-projects.d.ts +0 -104
- package/dist/server/render-release.d.ts +0 -19
- package/dist/server/render-results.d.ts +0 -758
- package/dist/server/render-settings.d.ts +0 -93
- package/dist/server/render-tasks.d.ts +0 -783
- package/dist/server/request-context.d.ts +0 -78
- package/dist/server/retired-routes.d.ts +0 -17
- package/dist/server/route-policy.d.ts +0 -18
- package/dist/server/route-table.d.ts +0 -114
- package/dist/server/runtime.d.ts +0 -343
- package/dist/server/session.d.ts +0 -192
- package/dist/server/settings.d.ts +0 -76
- package/dist/server/signup-gate.d.ts +0 -9
- package/dist/server/sweeps.d.ts +0 -4
- package/dist/server/task-views.d.ts +0 -98
- package/dist/server/tasks.d.ts +0 -108
- package/dist/server/terminals.d.ts +0 -31
- package/dist/server/welcome.d.ts +0 -28
- package/dist/server-telemetry.d.ts +0 -87
- package/dist/settings-groups-ui.d.ts +0 -286
- package/dist/settings-kit-script.d.ts +0 -21
- package/dist/settings-kit.d.ts +0 -173
- package/dist/settings-proofs.d.ts +0 -64
- package/dist/setup-guide.d.ts +0 -39
- package/dist/shared-deps.d.ts +0 -115
- package/dist/sign-in-guard.d.ts +0 -70
- package/dist/skills-ui.d.ts +0 -12
- package/dist/skills.d.ts +0 -99
- package/dist/slack-api.d.ts +0 -59
- package/dist/slack-chat.d.ts +0 -37
- package/dist/slack-settings.d.ts +0 -4
- package/dist/slack-socket.d.ts +0 -12
- package/dist/slack.d.ts +0 -6
- package/dist/sleep.d.ts +0 -2
- package/dist/source-key.d.ts +0 -2
- package/dist/spend-report.d.ts +0 -87
- package/dist/spend-ui.d.ts +0 -80
- package/dist/spend.d.ts +0 -142
- package/dist/sqlite-runtime.d.ts +0 -3
- package/dist/sqlite-telemetry.d.ts +0 -9
- package/dist/sso-settings.d.ts +0 -33
- package/dist/sso-ui.d.ts +0 -26
- package/dist/staged-runtimes.d.ts +0 -54
- package/dist/steer-capabilities.d.ts +0 -32
- package/dist/steer-controls.d.ts +0 -14
- package/dist/steer-live.d.ts +0 -19
- package/dist/steer-mailbox.d.ts +0 -46
- package/dist/steer-status.d.ts +0 -25
- package/dist/stop-proof.d.ts +0 -67
- package/dist/storage-sweep-child.d.ts +0 -1
- package/dist/storage-sweep-process.d.ts +0 -55
- package/dist/storage-sweep-schedule.d.ts +0 -30
- package/dist/storage-sweep.d.ts +0 -77
- package/dist/storage-ui.d.ts +0 -23
- package/dist/storage.d.ts +0 -68
- package/dist/store-baseline.d.ts +0 -19
- package/dist/store.d.ts +0 -8613
- package/dist/stream-scope.d.ts +0 -18
- package/dist/structured-output.d.ts +0 -57
- package/dist/style-asset.d.ts +0 -7
- package/dist/subagent-admin.d.ts +0 -53
- package/dist/subagent-desk.d.ts +0 -59
- package/dist/subagent-memory.d.ts +0 -65
- package/dist/subagent-question.d.ts +0 -59
- package/dist/subagent-tools.d.ts +0 -125
- package/dist/subagent-week.d.ts +0 -68
- package/dist/subagent-work.d.ts +0 -76
- package/dist/subagents-ui.d.ts +0 -22
- package/dist/subagents.d.ts +0 -146
- package/dist/subscription-chat.d.ts +0 -54
- package/dist/summary.d.ts +0 -33
- package/dist/surface.d.ts +0 -49
- package/dist/sweep-gate.d.ts +0 -10
- package/dist/sweep-quarantine.d.ts +0 -29
- package/dist/sync.d.ts +0 -94
- package/dist/tailnet.d.ts +0 -11
- package/dist/tamper-scan.d.ts +0 -4
- package/dist/task-activity.d.ts +0 -27
- package/dist/task-aliases.d.ts +0 -5
- package/dist/task-archive.d.ts +0 -13
- package/dist/task-base.d.ts +0 -39
- package/dist/task-composer.d.ts +0 -14
- package/dist/task-control.d.ts +0 -159
- package/dist/task-live.d.ts +0 -8
- package/dist/task-moves.d.ts +0 -90
- package/dist/task-outcome-cli.d.ts +0 -48
- package/dist/task-review-brief.d.ts +0 -69
- package/dist/task-sizing.d.ts +0 -58
- package/dist/task-source.d.ts +0 -77
- package/dist/task-status.d.ts +0 -324
- package/dist/task-text.d.ts +0 -31
- package/dist/team-chat-authorization.d.ts +0 -11
- package/dist/team-contract.d.ts +0 -103
- package/dist/team-http.d.ts +0 -25
- package/dist/team-leads.d.ts +0 -85
- package/dist/team-runtime.d.ts +0 -25
- package/dist/team-ui.d.ts +0 -4
- package/dist/team-updates.d.ts +0 -8
- package/dist/teams-api.d.ts +0 -33
- package/dist/teams-chat.d.ts +0 -36
- package/dist/teams-settings.d.ts +0 -14
- package/dist/teams.d.ts +0 -24
- package/dist/teardown-git.d.ts +0 -164
- package/dist/telegram-flow.d.ts +0 -112
- package/dist/telegram-lead.d.ts +0 -151
- package/dist/telegram-live.d.ts +0 -116
- package/dist/telegram-progress.d.ts +0 -20
- package/dist/telegram-settings.d.ts +0 -9
- package/dist/telegram-status.d.ts +0 -83
- package/dist/telegram-team.d.ts +0 -68
- package/dist/telegram.d.ts +0 -271
- package/dist/templates.d.ts +0 -69
- package/dist/terminal-catalog.d.ts +0 -11
- package/dist/terminal-text.d.ts +0 -11
- package/dist/test-infra.d.ts +0 -34
- package/dist/test-temp.d.ts +0 -40
- package/dist/text-limits.d.ts +0 -297
- package/dist/tidy.d.ts +0 -130
- package/dist/tier-report.d.ts +0 -44
- package/dist/token-notices.d.ts +0 -11
- package/dist/tokens-cli.d.ts +0 -21
- package/dist/tool-broker.d.ts +0 -52
- package/dist/tool-launcher.d.ts +0 -1
- package/dist/tool-secret-store.d.ts +0 -167
- package/dist/toolroll-update-cli.d.ts +0 -15
- package/dist/toolroll-update-ui.d.ts +0 -47
- package/dist/toolroll-update.d.ts +0 -265
- package/dist/tools-ui.d.ts +0 -51
- package/dist/transitions-recipes.d.ts +0 -1
- package/dist/tree-proof.d.ts +0 -34
- package/dist/tui-contract.d.ts +0 -202
- package/dist/tui-source.d.ts +0 -14
- package/dist/typed-start.d.ts +0 -51
- package/dist/unfenced-test-support.d.ts +0 -2
- package/dist/up-processes.d.ts +0 -162
- package/dist/up-role-child.d.ts +0 -1
- package/dist/update-notice.d.ts +0 -5
- package/dist/vanished-retry.d.ts +0 -30
- package/dist/verification-evidence.d.ts +0 -68
- package/dist/version.d.ts +0 -2
- package/dist/wake-hub.d.ts +0 -72
- package/dist/webhook-limits.d.ts +0 -23
- package/dist/webhook-readers.d.ts +0 -56
- package/dist/webhook-signing.d.ts +0 -27
- package/dist/webhooks.d.ts +0 -84
- package/dist/welcome-facts.d.ts +0 -18
- package/dist/when-html.d.ts +0 -40
- package/dist/work-index.d.ts +0 -175
- package/dist/work-summary.d.ts +0 -61
- package/dist/workspace-motion.d.ts +0 -4
- package/dist/workspace-revision.d.ts +0 -48
- package/dist/workspace-ui.d.ts +0 -385
- package/dist/worktree-notices.d.ts +0 -13
- package/dist/worktree.d.ts +0 -365
- package/dist/writes-mode.d.ts +0 -9
- package/dist/youiyoux-intake.d.ts +0 -234
package/dist/claim.js
CHANGED
|
@@ -1,32 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The claim, and the fence around it.
|
|
3
|
-
*
|
|
4
|
-
* This is the record §4 calls the one that matters, and the reason is a
|
|
5
|
-
* specific 3am failure. A runner takes a task, starts work, and then stops
|
|
6
|
-
* being reachable — the machine sleeps, the process is OOM-killed, the network
|
|
7
|
-
* partitions. The scheduler cannot tell "dead" from "slow", so it waits for the
|
|
8
|
-
* lease to expire and gives the task to someone else. Then the first runner
|
|
9
|
-
* wakes up, finishes the work it was doing, and reports success for a task that
|
|
10
|
-
* another runner is now halfway through.
|
|
11
|
-
*
|
|
12
|
-
* Both runners are behaving correctly. Without a fence, the control plane
|
|
13
|
-
* believes the last one to speak.
|
|
14
|
-
*
|
|
15
|
-
* So a lease carries two things. `lease_id` is immutable and identifies one
|
|
16
|
-
* grant of one task to one runner. `lease_generation` counts how many times
|
|
17
|
-
* that task has been granted at all, and it only ever goes up. Acquiring is a
|
|
18
|
-
* compare-and-swap on the generation; every later call carries the lease it
|
|
19
|
-
* thinks it holds, and anything whose generation has been superseded is
|
|
20
|
-
* refused. The late completion above is refused not because we detected the
|
|
21
|
-
* crash — we never did — but because the world moved on without it.
|
|
22
|
-
*
|
|
23
|
-
* Losing a race here is ordinary, not an error. Several runners asking for the
|
|
24
|
-
* same task at the same moment is the system working; exactly one wins.
|
|
25
|
-
*
|
|
26
|
-
* Time is a parameter everywhere. Expiry decided by an implicit clock is
|
|
27
|
-
* untestable, and a lease is exactly the kind of thing that has to be provable
|
|
28
|
-
* rather than probable.
|
|
29
|
-
*/
|
|
30
1
|
import { randomUUID } from "node:crypto";
|
|
31
2
|
import { authenticate, drainOf } from "./runner.js";
|
|
32
3
|
import { pauseForAuth } from "./provider-auth.js";
|
|
@@ -35,62 +6,26 @@ import { BUILT_IN, checkCleanupTaskOf, isClosedState, refArchived, taskStateForC
|
|
|
35
6
|
import { digestOf } from "./scope.js";
|
|
36
7
|
import { parseExecutionPlanDocument } from "./plan.js";
|
|
37
8
|
import { sealUnchangedPlanUnderMode } from "./plan-auto.js";
|
|
38
|
-
import { routeFromJson } from "./phase-routing.js";
|
|
9
|
+
import { readinessRefuses, routeFromJson } from "./phase-routing.js";
|
|
39
10
|
import { contractChangesOf, decodePlannerSource, encodePlannerSource, canonicalContractJson, PLANNER_SOURCE_LIMITS, describeContractChanges, encodePlanContractRecord, plannerContractOf, plannerSourceDigest, } from "./planner-source.js";
|
|
40
11
|
import { storeEvidence, readVerifiedArtifact, EVIDENCE_CAPS } from "./evidence.js";
|
|
41
12
|
import { moveOnIfExhausted } from "./fallback.js";
|
|
42
13
|
import { moveTask } from "./task-moves.js";
|
|
43
|
-
/** How stale a mirror's last complete sync may be before admission refuses. */
|
|
44
14
|
export const SYNC_MAX_AGE_MS = 15 * 60_000;
|
|
45
|
-
/**
|
|
46
|
-
* Long enough that an ordinary build does not lose its lease mid-thought,
|
|
47
|
-
* short enough that a dead runner's work is picked up the same night rather
|
|
48
|
-
* than at breakfast.
|
|
49
|
-
*/
|
|
50
15
|
export const DEFAULT_LEASE_MS = 15 * 60_000;
|
|
51
|
-
/**
|
|
52
|
-
* Take the task, if it is free.
|
|
53
|
-
*
|
|
54
|
-
* Free means no claim, or a claim whose lease expired, or one already released.
|
|
55
|
-
* A live lease belonging to somebody else is refused with who holds it and
|
|
56
|
-
* until when, because "no" without a reason is indistinguishable from a bug.
|
|
57
|
-
*/
|
|
58
16
|
export function acquire(store, taskRef, runner, options) {
|
|
59
|
-
// Replay detection is ACQUIRE-SPECIFIC (external dispatch, finding 36):
|
|
60
|
-
// the stored payload is untouched — the flag rides only the returned
|
|
61
|
-
// copy, so a second replay cannot double-stamp, and Store.replay's T→T
|
|
62
|
-
// contract holds for every other user.
|
|
63
17
|
const replayed = store.hasMutationRecord(options.mutation ?? {});
|
|
64
18
|
const result = inTransaction(store, () => acquireLocked(store, taskRef, runner, options, "refuse"));
|
|
65
19
|
return replayed && result.ok ? { ...result, replayed: true } : result;
|
|
66
20
|
}
|
|
67
|
-
|
|
68
|
-
* The body of `acquire`, for callers already holding the transaction.
|
|
69
|
-
* `acquireIfReady` needs its readiness check and the CAS to be one atomic
|
|
70
|
-
* step, and SQLite does not nest transactions.
|
|
71
|
-
*/
|
|
72
|
-
function acquireLocked(store, taskRef, runner, options,
|
|
73
|
-
/** Not an AcquireOptions field, so no options object (CLI flag, HTTP body, chat, MCP) can carry it. Only
|
|
74
|
-
* acquireForCheckCleanup passes "check-cleanup", after proving its check row in this transaction. */
|
|
75
|
-
closed) {
|
|
21
|
+
function acquireLocked(store, taskRef, runner, options, closed) {
|
|
76
22
|
const { now, ttlMs = DEFAULT_LEASE_MS, newLeaseId = randomUUID, mutation = {} } = options;
|
|
77
23
|
const db = store.handle;
|
|
78
|
-
// Idempotency wraps the CAS, not the other way round: a retried
|
|
79
|
-
// acquire must hand back the first answer rather than take a second lease.
|
|
80
24
|
return (store.replay(mutation, "acquire", () => {
|
|
81
25
|
const stamp = now.toISOString();
|
|
82
|
-
// THE RUNNER GATE, first leg (MCP gateway spec v6). Identity is
|
|
83
|
-
// proven INSIDE this transaction — the row re-read, the hash
|
|
84
|
-
// re-compared — so a takeover between the caller's own auth and
|
|
85
|
-
// this CAS never lets a stale process ride its successor's
|
|
86
|
-
// authority. Then the repo tuple: authority derives from
|
|
87
|
-
// task_ref.repo ONLY; a task placed nowhere cannot be authorized
|
|
88
|
-
// by a repo-scoped runner, and a runner not bound to the task's
|
|
89
|
-
// repo never even holds a claim.
|
|
90
26
|
const gate = authenticate(store, runner, options.token);
|
|
91
27
|
if (!gate.ok)
|
|
92
28
|
return { ok: false, reason: "unauthenticated", detail: gate.reason };
|
|
93
|
-
// DRAINING (v137): a runner whose stop has begun admits nothing new, on every claim road.
|
|
94
29
|
const drain = drainOf(store, gate.runner, now);
|
|
95
30
|
if (drain !== null)
|
|
96
31
|
return { ok: false, reason: "draining", until: drain.until };
|
|
@@ -101,45 +36,21 @@ closed) {
|
|
|
101
36
|
if (!gate.runner.repos.includes(placedRepo)) {
|
|
102
37
|
return { ok: false, reason: "unauthorized-repo", repo: placedRepo };
|
|
103
38
|
}
|
|
104
|
-
// The watch may have lapsed while this pass awaited I/O, before its heartbeat callback ran. Runner tokens
|
|
105
|
-
// survive a role restart, so prove this exact watch in the claim transaction as well.
|
|
106
39
|
if (options.incarnation !== undefined && db.prepare("SELECT 1 FROM watch_lease WHERE runner = ? AND repo = ? AND owner = ? AND expires_at > ?").get(runner, placedRepo, options.incarnation, stamp) === undefined)
|
|
107
40
|
return { ok: false, reason: "watch-custody" };
|
|
108
|
-
// THE COORDINATOR QUARANTINE in the one primitive every claim road
|
|
109
|
-
// shares (MCP spec v6, round-3 f1): a coordinator-filed task whose
|
|
110
|
-
// scope has not been sealed by the password ceremony claims for
|
|
111
|
-
// NOBODY — not the pre-approval planner road, not a raw CLI claim.
|
|
112
|
-
// One SQL predicate, so roads cannot diverge. After the seal it is
|
|
113
|
-
// ordinary in every respect.
|
|
114
41
|
if (placedRef !== null && placedRef.coordinatorCid !== null && !store.scopeSealed(placedRef.externalId)) {
|
|
115
42
|
return { ok: false, reason: "coordinator-filed" };
|
|
116
43
|
}
|
|
117
|
-
// A PUT-AWAY TASK (v145, task-tidy.md) claims for nobody, on every road: restore it first.
|
|
118
44
|
if (refArchived(store, taskRef))
|
|
119
45
|
return { ok: false, reason: "archived" };
|
|
120
|
-
// The reservation gate lives HERE, in the one primitive every
|
|
121
|
-
// acquisition path shares (queue-columns review, finding 1): tick's
|
|
122
|
-
// acquireIfReady and the raw CLI claim both
|
|
123
|
-
// pass through this line, so a task reserved for one worker can
|
|
124
|
-
// never be taken by another, whatever the caller's snapshot said.
|
|
125
|
-
// Scheduling, not authority: nothing about WHAT may build changes.
|
|
126
46
|
const reservedFor = store.assignedRunnerOf(taskRef);
|
|
127
47
|
if (reservedFor !== null && reservedFor !== runner) {
|
|
128
48
|
return { ok: false, reason: "reserved", reservedFor };
|
|
129
49
|
}
|
|
130
|
-
// The external-mirror gate (dispatch v3 §2): every acquisition path
|
|
131
|
-
// shares this line, so a stale, closed, revoked, or plane-blocked
|
|
132
|
-
// mirror never starts a build — whatever the caller's snapshot said.
|
|
133
|
-
// An ordinary task costs one indexed lookup.
|
|
134
50
|
const mirrorWhy = store.mirrorAdmissionRefusal(taskRef, now, options.syncMaxAgeMs ?? SYNC_MAX_AGE_MS);
|
|
135
51
|
if (mirrorWhy !== null && mirrorWhy !== "not-a-mirror") {
|
|
136
52
|
return { ok: false, reason: "external", detail: mirrorWhy };
|
|
137
53
|
}
|
|
138
|
-
// THE MODE BELT on the one primitive every claim road shares (Codex
|
|
139
|
-
// people round 2, finding 2): a mode-sealed approval whose signature
|
|
140
|
-
// no longer stands — revoked, expired by clock, or a dead signer —
|
|
141
|
-
// does not dispatch, CLI claim included. Live claims already taken
|
|
142
|
-
// are untouched; this fences only NEW takes.
|
|
143
54
|
if (!store.modeApprovalLive(taskRef, now)) {
|
|
144
55
|
return {
|
|
145
56
|
ok: false,
|
|
@@ -147,8 +58,6 @@ closed) {
|
|
|
147
58
|
message: "the approval it was sealed with no longer stands (an ended mode or flow grant, or an approval that wasn't a person's) — a person approves it again",
|
|
148
59
|
};
|
|
149
60
|
}
|
|
150
|
-
// A LEAD SWEEP'S LIMIT, inside this write transaction so two runners can't both take the last slot: at most
|
|
151
|
-
// max_parallel of its families hold a live claim (claimed-but-not-started counts; a revision counts as its child).
|
|
152
61
|
const sweep = placedRef === null ? null : store.sweepOfTask(placedRef.externalId);
|
|
153
62
|
if (sweep !== null && store.sweepLiveClaims(sweep.id, stamp, taskRef) >= sweep.maxParallel) {
|
|
154
63
|
return { ok: false, reason: "sweep-limit", sweep: sweep.id, limit: sweep.maxParallel };
|
|
@@ -162,10 +71,6 @@ closed) {
|
|
|
162
71
|
until: String(existing["expires_at"]),
|
|
163
72
|
};
|
|
164
73
|
}
|
|
165
|
-
// A CLOSED TASK claims for nobody (docs/plans/closed-task-claims.md, decision A), read here in the same write
|
|
166
|
-
// transaction as the insert below. Placed after every older refusal, so each of those answers as before; this
|
|
167
|
-
// only replaces what would have been a grant. A built-in reference with no task row has nothing to claim. A
|
|
168
|
-
// task of another backend keeps today's answer: its state is in that tracker, not in this database.
|
|
169
74
|
if (placedRef !== null && placedRef.backend === BUILT_IN) {
|
|
170
75
|
const known = taskStateForClaim(store, taskRef);
|
|
171
76
|
if (known.kind === "missing")
|
|
@@ -184,11 +89,6 @@ closed) {
|
|
|
184
89
|
expiresAt: new Date(now.getTime() + ttlMs).toISOString(),
|
|
185
90
|
heartbeatAt: stamp,
|
|
186
91
|
};
|
|
187
|
-
// The compare-and-swap, enforced by UNIQUE (task_ref, lease_generation)
|
|
188
|
-
// rather than by anything this code does. Two runners that both read the
|
|
189
|
-
// same generation both try to write generation + 1; the database admits
|
|
190
|
-
// one. OR IGNORE turns the loser's constraint violation into a row count
|
|
191
|
-
// of zero, because losing a race is an ordinary outcome and not an error.
|
|
192
92
|
const { changes } = db
|
|
193
93
|
.prepare(`INSERT OR IGNORE INTO claim
|
|
194
94
|
(lease_id, task_ref, lease_generation, runner, acquired_at, expires_at, heartbeat_at, released_at, incarnation)
|
|
@@ -204,39 +104,14 @@ closed) {
|
|
|
204
104
|
};
|
|
205
105
|
}
|
|
206
106
|
return { ok: true, claim, reclaimed: existing !== undefined };
|
|
207
|
-
},
|
|
208
|
-
// Only a lease that was actually granted is worth remembering. Recording
|
|
209
|
-
// the refusal would make this key a permanent "no" for a task that is
|
|
210
|
-
// free again five minutes later.
|
|
211
|
-
result => result.ok));
|
|
107
|
+
}, result => result.ok));
|
|
212
108
|
}
|
|
213
|
-
/** The newest lease on a task, held or not. */
|
|
214
109
|
function latest(db, taskRef) {
|
|
215
110
|
return db
|
|
216
111
|
.prepare("SELECT * FROM claim WHERE task_ref = ? ORDER BY lease_generation DESC LIMIT 1")
|
|
217
112
|
.get(taskRef);
|
|
218
113
|
}
|
|
219
|
-
/** DESIGN §8 gate 6: above this many open decisions, stop dispatching the parkers.
|
|
220
|
-
* `missingCapability` remains re-exported for callers of the old claim seam. */
|
|
221
114
|
export { DEFAULT_MAX_OPEN_DECISIONS, missingCapability } from "./dispatch.js";
|
|
222
|
-
/**
|
|
223
|
-
* Take the task, if it is free *and still worth taking*.
|
|
224
|
-
*
|
|
225
|
-
* `listReady` then `acquire` is two reads of a world that moves between them:
|
|
226
|
-
* a hold placed, a blocker reopened, the task cancelled — and the CAS admits
|
|
227
|
-
* the claim anyway, because the CAS only defends against other claimants. An
|
|
228
|
-
* unattended pass has nobody watching who would notice the stale dispatch, so
|
|
229
|
-
* the readiness conditions are re-proved inside the same transaction as the
|
|
230
|
-
* acquire, against rows the write lock has already pinned.
|
|
231
|
-
*
|
|
232
|
-
* "Not ready" is a different answer from "held": held means somebody else got
|
|
233
|
-
* it, which is a race being won; not-ready means nobody should have it, and
|
|
234
|
-
* says why.
|
|
235
|
-
*/
|
|
236
|
-
/**
|
|
237
|
-
* A conformance check's claim (acp-check.ts): its task has no scope to approve, so readiness is not asked — but a
|
|
238
|
-
* check runs real agents, so the runner's capacity is counted where the claim lands, as for dispatch.
|
|
239
|
-
*/
|
|
240
115
|
export function acquireForCheck(store, taskRef, runner, options) {
|
|
241
116
|
return inTransaction(store, () => {
|
|
242
117
|
const registered = store.getRunner(runner);
|
|
@@ -252,13 +127,6 @@ export function acquireIfReady(store, taskRef, runner, options) {
|
|
|
252
127
|
const why = taskReadinessBlocker(store, taskRef, options.now);
|
|
253
128
|
if (why !== null)
|
|
254
129
|
return { ok: false, reason: "not-ready", message: why.message };
|
|
255
|
-
// The role's own precondition, re-read where the write lock has pinned
|
|
256
|
-
// it — never an early return past the shared gates below. A planner
|
|
257
|
-
// dispatches exactly when the operator asked and no promise exists yet;
|
|
258
|
-
// a builder dispatches exactly when the promise is approved. A
|
|
259
|
-
// mode-sealed approval additionally re-proves its signature is STILL
|
|
260
|
-
// the live mode (belt to the demotion sweep — R-REVOKE's next gate
|
|
261
|
-
// holds even in the window before an expired mode is durably closed).
|
|
262
130
|
const approvedScope = scopeApprovedForDispatch(store, taskRef, options.now);
|
|
263
131
|
if (role === "planner") {
|
|
264
132
|
const ref = store.refForId(taskRef);
|
|
@@ -269,9 +137,6 @@ export function acquireIfReady(store, taskRef, runner, options) {
|
|
|
269
137
|
return { ok: false, reason: "not-ready", message: "the scope is already approved — nothing left to plan" };
|
|
270
138
|
}
|
|
271
139
|
}
|
|
272
|
-
// The deliverable is re-read here (v34): a scout dispatches exactly on
|
|
273
|
-
// a report task with an approved scope, and a builder never on one —
|
|
274
|
-
// the caller's survey chose the role, the row proves it.
|
|
275
140
|
if (role === "scout" || role === "builder") {
|
|
276
141
|
const deliverable = store.refForId(taskRef)?.deliverable ?? "branch";
|
|
277
142
|
if (role === "scout" && deliverable !== "report") {
|
|
@@ -287,16 +152,9 @@ export function acquireIfReady(store, taskRef, runner, options) {
|
|
|
287
152
|
if (role !== "planner" && !approvedScope) {
|
|
288
153
|
return { ok: false, reason: "not-ready", message: "the scope is not approved" };
|
|
289
154
|
}
|
|
290
|
-
// Capabilities are re-read inside the same transaction as the CAS, like
|
|
291
|
-
// every other readiness fact: a key that expired between the survey and
|
|
292
|
-
// the take must not be dispatched on the survey's answer.
|
|
293
155
|
const gap = missingCapability(store, taskRef, options.repo ?? null, options.now);
|
|
294
156
|
if (gap !== null)
|
|
295
157
|
return { ok: false, reason: "capability", message: gap };
|
|
296
|
-
// Capacity (§8 gate 3), counted where the claim lands — two overlapping
|
|
297
|
-
// passes cannot both see a free slot that only exists once. Enforced for
|
|
298
|
-
// registered runners; a runner the store has never met is a test driving
|
|
299
|
-
// the API directly, and the CLI always registers.
|
|
300
158
|
const registered = store.getRunner(runner);
|
|
301
159
|
if (registered !== null) {
|
|
302
160
|
const held = store.liveClaimCount(runner, options.now);
|
|
@@ -308,13 +166,7 @@ export function acquireIfReady(store, taskRef, runner, options) {
|
|
|
308
166
|
};
|
|
309
167
|
}
|
|
310
168
|
}
|
|
311
|
-
// Quota, same gate: an exhausted credential refuses; a half-open one
|
|
312
|
-
// admits exactly this dispatch as its probe, consumed here so a racing
|
|
313
|
-
// pass cannot also treat it as open.
|
|
314
169
|
const scope = options.model ?? "";
|
|
315
|
-
// Quota is keyed to the credential that actually exhausts: the RESOLVED
|
|
316
|
-
// provider, never a fixed binary name — codex quota must not collide
|
|
317
|
-
// with claude's, nor bypass it (Codex provider review, high finding 5).
|
|
318
170
|
const quota = store.quotaState(runner, options.provider ?? "claude", scope, options.now, options.authMode ?? "subscription");
|
|
319
171
|
if (quota !== null && quota.state === "exhausted") {
|
|
320
172
|
return {
|
|
@@ -323,27 +175,16 @@ export function acquireIfReady(store, taskRef, runner, options) {
|
|
|
323
175
|
message: `${runner}'s provider quota is exhausted (${quota.reason})${quota.resetAt === null ? "" : ` until ${quota.resetAt}`} — a free slot against an exhausted quota is not capacity`,
|
|
324
176
|
};
|
|
325
177
|
}
|
|
326
|
-
// THE ROUTED PROVIDER'S READINESS (v47), re-read inside the same
|
|
327
|
-
// transaction: a provider THIS runner has reported unavailable never
|
|
328
|
-
// claims — no substitution, no second-best. Unknown passes; only a
|
|
329
|
-
// recorded unavailable refuses, and it says what was observed.
|
|
330
178
|
const readiness = store.runnerReadinessOf(runner, options.provider ?? "claude");
|
|
331
|
-
if (readiness !== null && readiness.
|
|
179
|
+
if (readiness !== null && readinessRefuses(readiness, options.authMode ?? "subscription")) {
|
|
332
180
|
return {
|
|
333
181
|
ok: false,
|
|
334
182
|
reason: "provider-unavailable",
|
|
335
183
|
message: `${readiness.provider} is reported unavailable on ${runner} (${readiness.reason}; observed ${readiness.observedAt}) — nothing substitutes for a routed provider`,
|
|
336
184
|
};
|
|
337
185
|
}
|
|
338
|
-
// The attention budget (§8, gate 6), proved where every other readiness
|
|
339
|
-
// fact is proved. A phone with thirty open questions answers none of
|
|
340
|
-
// them; above the budget, tasks with a *measured* habit of parking step
|
|
341
|
-
// aside so the night keeps building what builds. First-time parkers pass
|
|
342
|
-
// — a rate nobody measured is not a rate.
|
|
343
186
|
const budget = options.maxOpenDecisions ?? DEFAULT_MAX_OPEN_DECISIONS;
|
|
344
187
|
if (store.countUnanswered() >= budget) {
|
|
345
|
-
// A planner exists to generate questions; above the budget it is
|
|
346
|
-
// refused outright — no zero-rate first-timer pass (finding 2).
|
|
347
188
|
if (role === "planner") {
|
|
348
189
|
return {
|
|
349
190
|
ok: false,
|
|
@@ -361,28 +202,16 @@ export function acquireIfReady(store, taskRef, runner, options) {
|
|
|
361
202
|
}
|
|
362
203
|
}
|
|
363
204
|
const taken = acquireLocked(store, taskRef, runner, options, "refuse");
|
|
364
|
-
// The half-open probe slot is consumed only WITH the claim it admits —
|
|
365
|
-
// an attention refusal or a lost CAS must not re-arm the quota as
|
|
366
|
-
// exhausted with no probe in flight (finding 3). Same transaction, so
|
|
367
|
-
// consume-with-claim is all-or-nothing.
|
|
368
205
|
if (taken.ok && quota !== null) {
|
|
369
206
|
store.consumeHalfOpen(runner, options.provider ?? "claude", scope, options.now, options.authMode ?? "subscription");
|
|
370
207
|
}
|
|
371
208
|
return taken;
|
|
372
209
|
});
|
|
373
210
|
}
|
|
374
|
-
/**
|
|
375
|
-
* "I am still here." Extends the lease, and tells a superseded runner that it
|
|
376
|
-
* has been superseded — which is the cheapest moment for it to find out, well
|
|
377
|
-
* before it has finished work nobody will accept.
|
|
378
|
-
*/
|
|
379
211
|
export function heartbeat(store, leaseId, now, ttlMs = DEFAULT_LEASE_MS) {
|
|
380
212
|
const db = store.handle;
|
|
381
213
|
const expiresAt = new Date(now.getTime() + ttlMs).toISOString();
|
|
382
214
|
return inTransaction(store, () => {
|
|
383
|
-
// An expired claim is not brought back on a task closed meanwhile (closed-task-claims.md, finding 1): that would
|
|
384
|
-
// be a new claim on a closed task by another road. A live claim, and an expired one on an open task, renew as
|
|
385
|
-
// always. Read in this write transaction, before the renewal.
|
|
386
215
|
const closedNow = expiredOnClosedTask(store, leaseId, now);
|
|
387
216
|
if (closedNow !== null)
|
|
388
217
|
return { ok: false, reason: "closed", state: closedNow };
|
|
@@ -396,41 +225,21 @@ export function heartbeat(store, leaseId, now, ttlMs = DEFAULT_LEASE_MS) {
|
|
|
396
225
|
return { ok: true, claim: readClaim(row) };
|
|
397
226
|
});
|
|
398
227
|
}
|
|
399
|
-
/**
|
|
400
|
-
* The fence, as a predicate on the write rather than a check before it.
|
|
401
|
-
*
|
|
402
|
-
* Checking first and updating second leaves a window: a reclaim committing
|
|
403
|
-
* between the two makes the check's answer stale, and the update — matching on
|
|
404
|
-
* lease id alone — succeeds anyway. Both runners then believe they hold the
|
|
405
|
-
* task, which is the precise failure this module was written to make
|
|
406
|
-
* impossible. Putting the condition inside the statement closes it, because
|
|
407
|
-
* SQLite evaluates it against the row it is about to write.
|
|
408
|
-
*/
|
|
409
228
|
const NOT_SUPERSEDED = `NOT EXISTS (
|
|
410
229
|
SELECT 1 FROM claim AS newer
|
|
411
230
|
WHERE newer.task_ref = claim.task_ref
|
|
412
231
|
AND newer.lease_generation > claim.lease_generation
|
|
413
232
|
)`;
|
|
414
|
-
/**
|
|
415
|
-
* Why a fenced write matched nothing. Worth the extra read: "you were
|
|
416
|
-
* superseded" and "I have never heard of this lease" send a runner to very
|
|
417
|
-
* different places.
|
|
418
|
-
*/
|
|
419
233
|
function refusal(db, leaseId) {
|
|
420
234
|
const row = db.prepare("SELECT 1 AS hit FROM claim WHERE lease_id = ?").get(leaseId);
|
|
421
235
|
return { ok: false, reason: row === undefined ? "unknown" : "fenced" };
|
|
422
236
|
}
|
|
423
|
-
/** The release every ending makes: a compare-and-swap that only the live lease nobody superseded wins. */
|
|
424
237
|
function releaseAs(store, leaseId, as, now) {
|
|
425
238
|
const { changes } = store.handle
|
|
426
239
|
.prepare(`UPDATE claim SET released_at = ?, released_by = ? WHERE lease_id = ? AND released_at IS NULL AND ${NOT_SUPERSEDED}`)
|
|
427
240
|
.run(now.toISOString(), as, leaseId);
|
|
428
241
|
return Number(changes) > 0;
|
|
429
242
|
}
|
|
430
|
-
/**
|
|
431
|
-
* The open attempt an ending seals, proved first inside finalize's transaction: the run must be this lease's open
|
|
432
|
-
* attempt of the role the ending is for (anything else is a caller defect, thrown — not a race to absorb).
|
|
433
|
-
*/
|
|
434
243
|
function openAttempt(store, leaseId, runId, what, role) {
|
|
435
244
|
const run = store.getRun(runId);
|
|
436
245
|
if (run === null || run.leaseId !== leaseId || run.outcome !== null)
|
|
@@ -439,8 +248,6 @@ function openAttempt(store, leaseId, runId, what, role) {
|
|
|
439
248
|
throw new Error(`run ${runId} is a ${run.role} run — only ${role} runs can be sealed as ${what}`);
|
|
440
249
|
return run;
|
|
441
250
|
}
|
|
442
|
-
/** Release the claim as `as`, or — for a lease the world moved past — finish the run (and its open repair child) as a
|
|
443
|
-
* fenced refusal and say why. Null when the release won. */
|
|
444
251
|
function releaseOrRefuse(store, leaseId, as, runId, now, repairRun = null) {
|
|
445
252
|
if (releaseAs(store, leaseId, as, now))
|
|
446
253
|
return null;
|
|
@@ -449,36 +256,10 @@ function releaseOrRefuse(store, leaseId, as, runId, now, repairRun = null) {
|
|
|
449
256
|
store.finishRun(runId, { outcome: "refused", reason: "fenced", now });
|
|
450
257
|
return refusal(store.handle, leaseId);
|
|
451
258
|
}
|
|
452
|
-
/**
|
|
453
|
-
* Hand the task back.
|
|
454
|
-
*
|
|
455
|
-
* Accepted only from the lease that currently holds it. A completion arriving
|
|
456
|
-
* on a superseded lease is the failure this whole module exists for, and it is
|
|
457
|
-
* rejected without touching anything — the work is not lost, it is simply not
|
|
458
|
-
* this runner's to report, and the record says so rather than overwriting a
|
|
459
|
-
* live claim with a dead runner's opinion.
|
|
460
|
-
*/
|
|
461
259
|
export function release(store, leaseId, now) {
|
|
462
260
|
const db = store.handle;
|
|
463
261
|
return inTransaction(store, () => {
|
|
464
262
|
if (!releaseAs(store, leaseId, "released", now)) {
|
|
465
|
-
// A repeat of a hand-back this same lease already made is not a fence —
|
|
466
|
-
// nobody took the task away, the runner simply said so twice because its
|
|
467
|
-
// first acknowledgement was lost. M1 asks for duplicate completion to be
|
|
468
|
-
// reconciled rather than refused, and telling an honest runner it was
|
|
469
|
-
// superseded would send it to stop when it should carry on.
|
|
470
|
-
//
|
|
471
|
-
// Deliberately not filtered by supersession. A lease that released and
|
|
472
|
-
// was then reacquired by somebody else still *completed*: its work was
|
|
473
|
-
// accepted at the time, and the honest answer to a late retry is "you
|
|
474
|
-
// already did this", not "you were fenced" — which would say its work
|
|
475
|
-
// never counted. Fencing is for a lease that never finished.
|
|
476
|
-
//
|
|
477
|
-
// But *how* the lease came to be released decides everything. Only a
|
|
478
|
-
// release the runner itself made counts as "you already did this". A
|
|
479
|
-
// lease the reaper or dead-runner recovery took back was never handed
|
|
480
|
-
// in by anybody — the world moved on without it, and the answer to its
|
|
481
|
-
// late retry is the fence.
|
|
482
263
|
return duplicateOrRefusal(db, leaseId, ["released", "completed"]);
|
|
483
264
|
}
|
|
484
265
|
const row = db.prepare("SELECT * FROM claim WHERE lease_id = ?").get(leaseId);
|
|
@@ -486,12 +267,6 @@ export function release(store, leaseId, now) {
|
|
|
486
267
|
return { ok: true, claim: readClaim(row) };
|
|
487
268
|
});
|
|
488
269
|
}
|
|
489
|
-
/**
|
|
490
|
-
* Whether an already-released lease was released in a way the caller may
|
|
491
|
-
* treat as its own doing. Anything else — reaped, recovered, or provenance
|
|
492
|
-
* unknown — is the fence, because accepting it would let a reclaimed lease's
|
|
493
|
-
* late retry pass as an ordinary duplicate.
|
|
494
|
-
*/
|
|
495
270
|
function duplicateOrRefusal(db, leaseId, own) {
|
|
496
271
|
const released = db
|
|
497
272
|
.prepare("SELECT * FROM claim WHERE lease_id = ? AND released_at IS NOT NULL")
|
|
@@ -503,18 +278,6 @@ function duplicateOrRefusal(db, leaseId, own) {
|
|
|
503
278
|
return { ok: false, reason: "fenced" };
|
|
504
279
|
return refusal(db, leaseId);
|
|
505
280
|
}
|
|
506
|
-
/**
|
|
507
|
-
* THE ONE WAY AN ATTEMPT ENDS: seal `outcome` for `leaseId` in one fenced transaction.
|
|
508
|
-
*
|
|
509
|
-
* Every ending passes the same fence, in the same order: the run is this lease's open attempt of the right role (a
|
|
510
|
-
* caller defect otherwise, thrown); a stop that applies to it wins — the attempt is sealed as interrupted instead
|
|
511
|
-
* (except the endings that ARE a stop or a service hand-back); then the claim is released by a compare-and-swap only the
|
|
512
|
-
* live, unsuperseded lease wins. A lease the world moved past writes nothing but its own run's fenced refusal (the
|
|
513
|
-
* stop and hand-back endings still end their run, touching no task state), and a retry of an ending the same lease
|
|
514
|
-
* already made answers as a duplicate where that ending allows it. Only then does the ending's own effect run —
|
|
515
|
-
* decision and hold, incident, strike and backoff, scope, report, revision, task state, the disowned mirror — inside
|
|
516
|
-
* the same transaction, so nothing of it exists without the release, and a crash rolls all of it back together.
|
|
517
|
-
*/
|
|
518
281
|
export function finalize(store, leaseId, outcome) {
|
|
519
282
|
return inTransaction(store, () => {
|
|
520
283
|
switch (outcome.kind) {
|
|
@@ -532,20 +295,6 @@ export function finalize(store, leaseId, outcome) {
|
|
|
532
295
|
}
|
|
533
296
|
});
|
|
534
297
|
}
|
|
535
|
-
/**
|
|
536
|
-
* Release the lease and write the task's terminal state, as one step.
|
|
537
|
-
*
|
|
538
|
-
* Release-then-mark is a window: between the two, the freed task is back in
|
|
539
|
-
* the ready set, and another pass can claim it before the terminal state
|
|
540
|
-
* lands — two builders for one task, the second dispatched by our own
|
|
541
|
-
* bookkeeping. Here the state is written inside the same transaction as the
|
|
542
|
-
* fenced release, so a task is never simultaneously free and unfinished.
|
|
543
|
-
*
|
|
544
|
-
* A fenced or unknown lease writes nothing: a runner the world moved past
|
|
545
|
-
* does not get to say how the task ended. A duplicate release reports
|
|
546
|
-
* `duplicate` and also writes nothing — the first completion already said,
|
|
547
|
-
* and a retry changing the answer would make "done" negotiable.
|
|
548
|
-
*/
|
|
549
298
|
function sealComplete(store, leaseId, args) {
|
|
550
299
|
const { state, now, mutation = {} } = args;
|
|
551
300
|
const db = store.handle;
|
|
@@ -559,12 +308,6 @@ function sealComplete(store, leaseId, args) {
|
|
|
559
308
|
return { ok: false, reason: "stopped" };
|
|
560
309
|
}
|
|
561
310
|
if (!releaseAs(store, leaseId, "completed", now)) {
|
|
562
|
-
// Only a completion this same lease already made reads as a duplicate.
|
|
563
|
-
// The DURABLE disposition (released_by) reproduces the original arm —
|
|
564
|
-
// whatever the task or the tracker did since (finding 33). A lease
|
|
565
|
-
// the reaper or recovery released was never *accepted*; a late
|
|
566
|
-
// completion after that is exactly the stale commit the fence keeps
|
|
567
|
-
// out.
|
|
568
311
|
const released = db
|
|
569
312
|
.prepare("SELECT * FROM claim WHERE lease_id = ? AND released_at IS NOT NULL")
|
|
570
313
|
.get(leaseId);
|
|
@@ -587,11 +330,6 @@ function sealComplete(store, leaseId, args) {
|
|
|
587
330
|
const taskId = db
|
|
588
331
|
.prepare("SELECT external_id FROM task_ref WHERE id = ? AND backend = ?")
|
|
589
332
|
.get(claim.taskRef, BUILT_IN);
|
|
590
|
-
// The completion gate (external dispatch, v4 §24): the latch is read
|
|
591
|
-
// INSIDE this transaction, on a FRESH win only. A latched mirror's
|
|
592
|
-
// completion is DISOWNED — the task is cancelled, the disposition is
|
|
593
|
-
// written durably, and the caller never sees the completed arm, so
|
|
594
|
-
// publication is impossible by construction.
|
|
595
333
|
const disowned = taskId !== undefined && !store.mirrorAllowsCompletion(String(taskId["external_id"]));
|
|
596
334
|
if (disowned) {
|
|
597
335
|
db.prepare("UPDATE claim SET released_by = 'disowned' WHERE lease_id = ?").run(leaseId);
|
|
@@ -599,8 +337,6 @@ function sealComplete(store, leaseId, args) {
|
|
|
599
337
|
if (taskId !== undefined) {
|
|
600
338
|
store.replay(mutation, "completeFenced", () => {
|
|
601
339
|
if (disowned) {
|
|
602
|
-
// Cancellation goes through the one floor — a disowned
|
|
603
|
-
// completion is a typed machine reason, not a bare state write.
|
|
604
340
|
store.applyCancellation(String(taskId["external_id"]), { kind: "machine", code: "disowned-completion" }, now, null);
|
|
605
341
|
}
|
|
606
342
|
else {
|
|
@@ -612,11 +348,6 @@ function sealComplete(store, leaseId, args) {
|
|
|
612
348
|
store.bumpWake();
|
|
613
349
|
return { ok: true, arm: disowned ? "disowned" : "completed", claim };
|
|
614
350
|
}
|
|
615
|
-
/**
|
|
616
|
-
* Validate the optional accepted formatting child against the open planner
|
|
617
|
-
* root. The child remains open until the root's fence settles, so a crash or
|
|
618
|
-
* takeover can never leave it masquerading as successfully delivered work.
|
|
619
|
-
*/
|
|
620
351
|
function plannerRepairChild(store, root, repairRunId) {
|
|
621
352
|
if (repairRunId === null)
|
|
622
353
|
return null;
|
|
@@ -656,22 +387,6 @@ function plannerRepairChild(store, root, repairRunId) {
|
|
|
656
387
|
}
|
|
657
388
|
throw new Error(`run ${repairRunId} is outside planner ${root.id}'s bounded linear correction chain`);
|
|
658
389
|
}
|
|
659
|
-
/**
|
|
660
|
-
* Seal a park, fenced at the write (§7).
|
|
661
|
-
*
|
|
662
|
-
* The builder proved its lease after the agent ran; this transaction proves
|
|
663
|
-
* it again *in the same statement that releases it*, because everything a
|
|
664
|
-
* park creates — the decision, its hold, the outbox row — is only true if
|
|
665
|
-
* this lease still spoke for the task at the moment of sealing. A superseded
|
|
666
|
-
* lease creates none of it: no decision, no hold, no notification, and the
|
|
667
|
-
* run is finalized as the fenced refusal it was. A crash anywhere inside
|
|
668
|
-
* rolls all of it back together; there is no instant at which a decision
|
|
669
|
-
* exists without its hold.
|
|
670
|
-
*
|
|
671
|
-
* `released_by = 'parked'` so a late retry from this lease is answered with
|
|
672
|
-
* the fence, not "duplicate": a park hands the task to a person, and nothing
|
|
673
|
-
* the runner says afterwards is that person's answer.
|
|
674
|
-
*/
|
|
675
390
|
function sealPark(store, leaseId, args) {
|
|
676
391
|
const { runId, taskId, decision, artifactIds, now } = args;
|
|
677
392
|
const run = openAttempt(store, leaseId, runId, "a park");
|
|
@@ -694,9 +409,6 @@ function sealPark(store, leaseId, args) {
|
|
|
694
409
|
}, now);
|
|
695
410
|
for (const artifact of artifactIds)
|
|
696
411
|
store.linkEvidence(decisionId, artifact);
|
|
697
|
-
// The hold is indefinite by construction. The decision's deadline is
|
|
698
|
-
// attention metadata; wiring it into `until` would dispatch the task,
|
|
699
|
-
// unanswered, the moment the deadline passed — expiry never chooses.
|
|
700
412
|
store.holdOwned({
|
|
701
413
|
taskRef: run.taskRef,
|
|
702
414
|
ownerKind: "decision",
|
|
@@ -714,21 +426,11 @@ function sealPark(store, leaseId, args) {
|
|
|
714
426
|
kind: "decision",
|
|
715
427
|
subject: `${taskId} parked a decision`,
|
|
716
428
|
body: `${oneLine(decision.question, 200)}\n\`toolroll decide ${decisionId}\``,
|
|
717
|
-
// The push stamp (arc 3): class + machine-minted link, at enqueue
|
|
718
|
-
// or never. Fixed phrases ride the push service; this subject does not.
|
|
719
429
|
pushClass: "decision",
|
|
720
430
|
link: `/d/${decisionId}`,
|
|
721
431
|
}, now);
|
|
722
432
|
return { ok: true, decisionId };
|
|
723
433
|
}
|
|
724
|
-
/**
|
|
725
|
-
* Seal a park whose payload never became a decision (§6's bounded repair ran
|
|
726
|
-
* out). Same fence, same atomicity, different record: an incident that stays
|
|
727
|
-
* in every brief until a person resolves it, holding the task so the next
|
|
728
|
-
* pass does not spend the same tokens hitting the same wall nightly. The
|
|
729
|
-
* malformed payload is preserved as evidence — a person may still be able to
|
|
730
|
-
* read what the agent meant.
|
|
731
|
-
*/
|
|
732
434
|
function sealMalformed(store, leaseId, args) {
|
|
733
435
|
const { runId, taskId, problems, now } = args;
|
|
734
436
|
const run = openAttempt(store, leaseId, runId, "a park");
|
|
@@ -762,35 +464,16 @@ function sealMalformed(store, leaseId, args) {
|
|
|
762
464
|
}, now);
|
|
763
465
|
return { ok: true, incidentId };
|
|
764
466
|
}
|
|
765
|
-
/** 1m, 2m, 4m, 8m, 16m — doubling, capped. Indexed by strikes-1. */
|
|
766
467
|
const BACKOFF_MS = [60_000, 120_000, 240_000, 480_000, 960_000];
|
|
767
468
|
export const MAX_STRIKES = 3;
|
|
768
|
-
/**
|
|
769
|
-
* Seal an operator-stopped attempt (v52): ONE fenced transaction for the
|
|
770
|
-
* claim's release as `interrupted`, the run's ending as `failed` /
|
|
771
|
-
* `interrupted` (the same words dead-runner recovery writes, so the
|
|
772
|
-
* recovered-draft road inherits the preserved work exactly as after a
|
|
773
|
-
* crash), every open run the attempt owns, the task's return to the
|
|
774
|
-
* queue under the stop's own hold, and the stop's settlement. Nothing
|
|
775
|
-
* here is a failure: no strike, no backoff, no incident, no automatic
|
|
776
|
-
* repair task, no notification page. A commit the attempt already made
|
|
777
|
-
* is kept as a reviewable artifact — `committed` records that it exists.
|
|
778
|
-
*
|
|
779
|
-
* A lease the world moved past (reaped, recovered, superseded) still
|
|
780
|
-
* ends the run as interrupted — that IS the honest ending — but touches
|
|
781
|
-
* no task state: the task belongs to whoever holds it now.
|
|
782
|
-
*/
|
|
783
469
|
function sealInterrupted(store, leaseId, args) {
|
|
784
470
|
const { runId, taskId, stopRun, now } = args;
|
|
785
471
|
const db = store.handle;
|
|
786
472
|
openAttempt(store, leaseId, runId, "an interruption");
|
|
787
|
-
// A lease the world moved past still ends its run as interrupted — that IS the honest ending — touching no task state.
|
|
788
473
|
const fenced = !releaseAs(store, leaseId, "interrupted", now);
|
|
789
474
|
if (args.message !== undefined && args.message.trim() !== "") {
|
|
790
475
|
store.recordOutcomeFacts(runId, { handoff: args.message });
|
|
791
476
|
}
|
|
792
|
-
// Owned descendants first (a repair turn, a correction) — the parent's
|
|
793
|
-
// ending settles the stop, and every owned row ends in the same write.
|
|
794
477
|
for (const owned of store.ownedRunsOf(runId)) {
|
|
795
478
|
if (owned === runId)
|
|
796
479
|
continue;
|
|
@@ -809,28 +492,14 @@ function sealInterrupted(store, leaseId, args) {
|
|
|
809
492
|
store.settleRunStop(stopRun, "interrupted", now);
|
|
810
493
|
if (fenced)
|
|
811
494
|
return { ok: true, stopRun, requeued: false, fenced: true };
|
|
812
|
-
// Back to the queue, where the stop's hold keeps it — a paused task
|
|
813
|
-
// reads as queued-and-held, exactly like an operator pause.
|
|
814
495
|
const requeued = moveTask(db, taskId, "requeue", now);
|
|
815
496
|
store.bumpWake();
|
|
816
497
|
return { ok: true, stopRun, requeued, fenced: false };
|
|
817
498
|
}
|
|
818
|
-
/**
|
|
819
|
-
* Hand an attempt back because the SERVICE stopped (its builder is
|
|
820
|
-
* stopping or restarting), not because anyone stopped the task: one fenced
|
|
821
|
-
* transaction releases the claim as `interrupted`, ends the run (and every
|
|
822
|
-
* open run it owns) as `failed` / `interrupted` — the words dead-runner
|
|
823
|
-
* recovery writes, so the next attempt inherits the preserved work in the
|
|
824
|
-
* same checkout exactly as after a crash — and returns the task to the
|
|
825
|
-
* queue with no strike, no backoff and no hold, so the next builder pass
|
|
826
|
-
* resumes it. A lease the world moved past still ends the run, touching no
|
|
827
|
-
* task state.
|
|
828
|
-
*/
|
|
829
499
|
function sealHandBack(store, leaseId, args) {
|
|
830
500
|
const { runId, taskId, now } = args;
|
|
831
501
|
const db = store.handle;
|
|
832
502
|
openAttempt(store, leaseId, runId, "a hand-back");
|
|
833
|
-
// A lease the world moved past still ends its run as interrupted — that IS the honest ending — touching no task state.
|
|
834
503
|
const fenced = !releaseAs(store, leaseId, "interrupted", now);
|
|
835
504
|
if (args.message.trim() !== "")
|
|
836
505
|
store.recordOutcomeFacts(runId, { handoff: args.message });
|
|
@@ -848,14 +517,6 @@ function sealHandBack(store, leaseId, args) {
|
|
|
848
517
|
store.bumpWake();
|
|
849
518
|
return { ok: true, requeued, fenced: false };
|
|
850
519
|
}
|
|
851
|
-
/**
|
|
852
|
-
* THE STOP FENCE at settlement (v52): when a stop applies to the run —
|
|
853
|
-
* its own or an owning ancestor's — seal the attempt as interrupted and
|
|
854
|
-
* answer with the seal; otherwise null, and the caller's own ending
|
|
855
|
-
* proceeds. Every fenced finalizer asks this first, inside its own
|
|
856
|
-
* transaction, so a stop that commits before terminal settlement wins
|
|
857
|
-
* whatever the attempt was about to say.
|
|
858
|
-
*/
|
|
859
520
|
export function interruptIfStopped(store, args) {
|
|
860
521
|
const stop = store.applicableStopFor(args.runId);
|
|
861
522
|
if (stop === null)
|
|
@@ -869,21 +530,6 @@ export function interruptIfStopped(store, args) {
|
|
|
869
530
|
message: args.message ?? `stopped by ${stop.requestedBy} (run #${stop.run}) — ${where === null ? "the attempt's evidence is on record" : `the work is preserved in ${where}`}`,
|
|
870
531
|
}));
|
|
871
532
|
}
|
|
872
|
-
/**
|
|
873
|
-
* Seal a failed attempt: one fenced transaction for the release, the run,
|
|
874
|
-
* the strike, the hold, and the page (§6, gnhf adopted rather than
|
|
875
|
-
* reinvented).
|
|
876
|
-
*
|
|
877
|
-
* Strikes count only top-level builder attempts; built, no-change, and
|
|
878
|
-
* parked reset them elsewhere; refusals, fenced attempts, and repair
|
|
879
|
-
* children never reach this function. Under three strikes the task
|
|
880
|
-
* requeues behind a doubling backoff hold the failure owns; at three it
|
|
881
|
-
* stalls — an 'attempts-exhausted' incident, the task marked failed, held,
|
|
882
|
-
* and paged once — because a fourth identical attempt at 3am is a token
|
|
883
|
-
* bonfire, not persistence. A commit-stage failure takes neither road: the
|
|
884
|
-
* worktree holds unpreserved work, ordinary re-pooling would refuse it as
|
|
885
|
-
* dirty forever, so it is an immediate incident naming the checkout.
|
|
886
|
-
*/
|
|
887
533
|
function sealFailure(store, leaseId, args) {
|
|
888
534
|
const { runId, taskId, failureClass, message, now } = args;
|
|
889
535
|
const run = openAttempt(store, leaseId, runId, "a failure", "builder");
|
|
@@ -893,14 +539,9 @@ function sealFailure(store, leaseId, args) {
|
|
|
893
539
|
const fenced = releaseOrRefuse(store, leaseId, "released", runId, now);
|
|
894
540
|
if (fenced !== null)
|
|
895
541
|
return fenced;
|
|
896
|
-
// A sign-in that no longer works is not the attempt's fault: no strike,
|
|
897
|
-
// no retry, the task back in the queue, and its provider paused.
|
|
898
542
|
if (failureClass !== "commit-failure" && run.terminalClass === "auth-expired") {
|
|
899
543
|
return { ok: true, ...sealAuthExpired(store, run, taskId, now) };
|
|
900
544
|
}
|
|
901
|
-
// Out of plan on an approved chain: the walk moves on, no strike, and the next agent runs through the ordinary claim.
|
|
902
|
-
// Anything else about this ending (fallback.ts says what closed the walk) stays the ordinary road below.
|
|
903
|
-
// Only the agent's own exit moves: a lease, branch or HEAD law that failed, or a commit that failed, is that ending.
|
|
904
545
|
if (failureClass === "unknown") {
|
|
905
546
|
const moved = moveOnIfExhausted(store, runId, taskId, now);
|
|
906
547
|
if (moved !== null) {
|
|
@@ -910,8 +551,6 @@ function sealFailure(store, leaseId, args) {
|
|
|
910
551
|
}
|
|
911
552
|
store.finishRun(runId, { outcome: "failed", reason: failureClass, now });
|
|
912
553
|
if (failureClass === "commit-failure") {
|
|
913
|
-
// The work exists and is uncommitted; nothing times its way out of
|
|
914
|
-
// that. A person (or an explicit repair) proves the checkout.
|
|
915
554
|
const incidentId = store.createIncident({ run: runId, kind: "commit-failure" }, now);
|
|
916
555
|
store.holdOwned({
|
|
917
556
|
taskRef: run.taskRef,
|
|
@@ -933,8 +572,6 @@ function sealFailure(store, leaseId, args) {
|
|
|
933
572
|
}
|
|
934
573
|
const strikes = store.addStrike(run.taskRef);
|
|
935
574
|
if (strikes >= MAX_STRIKES) {
|
|
936
|
-
// The state first: a task a person already closed keeps its state, and then no incident, hold or page is
|
|
937
|
-
// written either (closed-task-claims.md, decision B). The run's outcome, the release and the strike stand.
|
|
938
575
|
const closedState = exhaustUnlessClosed(store, run, taskId, now);
|
|
939
576
|
if (closedState !== null)
|
|
940
577
|
return { ok: true, disposition: "closed", strikes, state: closedState };
|
|
@@ -957,16 +594,12 @@ function sealFailure(store, leaseId, args) {
|
|
|
957
594
|
}, now);
|
|
958
595
|
return { ok: true, disposition: "stalled", strikes, incidentId };
|
|
959
596
|
}
|
|
960
|
-
// Under the limit: requeue behind a doubling pause the failure owns.
|
|
961
|
-
// Replacing the previous backoff hold is correct — this attempt's strike
|
|
962
|
-
// already reflects the whole streak.
|
|
963
597
|
const wait = BACKOFF_MS[Math.min(strikes, BACKOFF_MS.length) - 1];
|
|
964
598
|
const until = new Date(now.getTime() + wait);
|
|
965
599
|
store.holdOwned({
|
|
966
600
|
taskRef: run.taskRef,
|
|
967
601
|
ownerKind: "backoff",
|
|
968
602
|
ownerId: String(run.taskRef),
|
|
969
|
-
// Run 2085: this failure is named in plain words wherever the hold shows.
|
|
970
603
|
reason: failureClass === "no-handoff"
|
|
971
604
|
? `The agent stopped before handing off; its work was kept and it is being resumed (retry ${strikes}/${MAX_STRIKES} in ${Math.round(wait / 60_000)}m)`
|
|
972
605
|
: `retry ${strikes}/${MAX_STRIKES} after ${failureClass} — backing off ${Math.round(wait / 60_000)}m`,
|
|
@@ -983,12 +616,6 @@ function sealFailure(store, leaseId, args) {
|
|
|
983
616
|
}, now);
|
|
984
617
|
return { ok: true, disposition: "backoff", strikes, until: until.toISOString() };
|
|
985
618
|
}
|
|
986
|
-
/**
|
|
987
|
-
* The auth-expired ending, inside the caller's fenced transaction (claim
|
|
988
|
-
* already released): the run fails as `auth-expired`, the task goes back to
|
|
989
|
-
* the queue with no strike and no backoff, and dispatch for the run's
|
|
990
|
-
* provider pauses — the first such run of an incident tells a person once.
|
|
991
|
-
*/
|
|
992
619
|
function sealAuthExpired(store, run, taskId, now) {
|
|
993
620
|
store.finishRun(run.id, { outcome: "failed", reason: "auth-expired", now });
|
|
994
621
|
moveTask(store.handle, taskId, "requeue", now);
|
|
@@ -996,33 +623,16 @@ function sealAuthExpired(store, run, taskId, now) {
|
|
|
996
623
|
store.bumpWake();
|
|
997
624
|
return { disposition: "auth-expired", provider: run.provider };
|
|
998
625
|
}
|
|
999
|
-
/** Untrusted text on its way into a subject line: one line, bounded. */
|
|
1000
626
|
function oneLine(text, cap) {
|
|
1001
627
|
const flat = text.replace(/\s+/g, " ").trim();
|
|
1002
628
|
return flat.length <= cap ? flat : `${flat.slice(0, cap)}…`;
|
|
1003
629
|
}
|
|
1004
|
-
/** The live claim on a task, if there is one. */
|
|
1005
630
|
export const MAX_PLAN_STRIKES = 3;
|
|
1006
|
-
/** Backoff for planner retries: shorter than the builder's — a planner that
|
|
1007
|
-
* cannot start is usually a transient, and nothing downstream is waiting on
|
|
1008
|
-
* a workspace. */
|
|
1009
631
|
const PLAN_BACKOFF_MS = [60_000, 2 * 60_000, 4 * 60_000];
|
|
1010
|
-
/**
|
|
1011
|
-
* Seal a successful planning run: the proposed scope, the plan document
|
|
1012
|
-
* artifact, the drafted state, the run outcome, and the page to the
|
|
1013
|
-
* operator exist together or — if the lease was superseded — not at all.
|
|
1014
|
-
* The scope proposal is authority-bearing (it is what the approve card
|
|
1015
|
-
* will restate), which is why this is the park discipline, not the DONE
|
|
1016
|
-
* one (Codex planning review, question 2).
|
|
1017
|
-
*/
|
|
1018
632
|
function sealPlan(store, leaseId, args) {
|
|
1019
633
|
const { runId, taskId, plan, now } = args;
|
|
1020
|
-
// The ingestion record (contract handoff, task 1) is composed here from
|
|
1021
|
-
// the filed terms and the drafted plan; its file and row land inside the
|
|
1022
|
-
// transaction below, only after the stale-source check admits the draft.
|
|
1023
634
|
const filed = args.source?.contract.scope ?? null;
|
|
1024
635
|
const contractChanges = filed === null ? [] : contractChangesOf(filed, plan);
|
|
1025
|
-
// A hand-built plan (the pre-source road) carries no amendment field.
|
|
1026
636
|
const amendment = plan.amendment ?? null;
|
|
1027
637
|
const record = args.source === undefined
|
|
1028
638
|
? null
|
|
@@ -1049,8 +659,6 @@ function sealPlan(store, leaseId, args) {
|
|
|
1049
659
|
return failed.ok ? { ok: false, reason: "source-invalid", detail } : failed;
|
|
1050
660
|
};
|
|
1051
661
|
const sources = store.artifactsFor(runId).filter(one => one.kind === "plan-contract" && one.key.endsWith("/planner-source.json"));
|
|
1052
|
-
// Legacy rows have no input stamp or artifact. Every current dispatch
|
|
1053
|
-
// stamps even an empty scope; dropping a caller argument cannot bypass custody.
|
|
1054
662
|
if (args.source !== undefined || sources.length > 0 || run.scopeDigest !== null) {
|
|
1055
663
|
if (args.source === undefined || args.evidenceRoot === undefined || sources.length !== 1 || sources[0].id !== args.sourceArtifact) {
|
|
1056
664
|
return invalidSource("the planner's admitted source inventory is missing, ambiguous, or was not presented");
|
|
@@ -1073,13 +681,6 @@ function sealPlan(store, leaseId, args) {
|
|
|
1073
681
|
return invalidSource("a planner changed the filed contract without a bounded, explicit amendment");
|
|
1074
682
|
}
|
|
1075
683
|
}
|
|
1076
|
-
// THE SOURCE RECHECK (contract handoff, task 1): the filed request is
|
|
1077
|
-
// re-derived from durable state inside this very transaction and must
|
|
1078
|
-
// still be the one the planner read. A scope rewritten, approved, or
|
|
1079
|
-
// re-termed while the planner ran is the NEWER source; an old draft
|
|
1080
|
-
// never overwrites it. The attempt ends refused in words — no strike,
|
|
1081
|
-
// the planner did nothing wrong — and the task stays requested. The
|
|
1082
|
-
// claim releases under the same fence the ingestion would have used.
|
|
1083
684
|
if (args.source !== undefined) {
|
|
1084
685
|
const current = plannerContractOf(store, taskId);
|
|
1085
686
|
const currentDigest = current.ok ? plannerSourceDigest(current.contract) : null;
|
|
@@ -1181,8 +782,6 @@ function sealPlan(store, leaseId, args) {
|
|
|
1181
782
|
}, now);
|
|
1182
783
|
return { ok: true, changes: contractChanges.length, amendment };
|
|
1183
784
|
}
|
|
1184
|
-
/** Which part of the filed request moved, in words — for the refusal,
|
|
1185
|
-
* the page, and the notification. */
|
|
1186
785
|
function describeSourceDrift(source, current) {
|
|
1187
786
|
const was = source.contract;
|
|
1188
787
|
const parts = [];
|
|
@@ -1205,40 +804,6 @@ function describeSourceDrift(source, current) {
|
|
|
1205
804
|
parts.push("the revision brief changed");
|
|
1206
805
|
return `the filed request changed while the planner ran: ${parts.length === 0 ? "its source identity moved" : parts.join("; ")} (planned against ${source.sourceDigest.slice(0, 12)})`;
|
|
1207
806
|
}
|
|
1208
|
-
/**
|
|
1209
|
-
* Seal a running build's plan-revision proposal (adaptive execution plans).
|
|
1210
|
-
*
|
|
1211
|
-
* A builder that finds repository evidence invalidating a named dependency,
|
|
1212
|
-
* risk, or assumption in the plan it was given files ONE proposal and stops
|
|
1213
|
-
* without committing — the park discipline, applied to the road rather than
|
|
1214
|
-
* to a question. The ledger row, the hold when one is owed, the run's
|
|
1215
|
-
* outcome, and the page exist together or, if the lease was superseded,
|
|
1216
|
-
* not at all. Structurally the plan ending's twin: the same
|
|
1217
|
-
* open-attempt assertion, the same fenced release, the same all-or-nothing
|
|
1218
|
-
* transaction.
|
|
1219
|
-
*
|
|
1220
|
-
* Two dispositions, decided by the caller's classification and recorded
|
|
1221
|
-
* here:
|
|
1222
|
-
*
|
|
1223
|
-
* plan-only the signed scope and publication authority are
|
|
1224
|
-
* byte-identical to what this build started under, so
|
|
1225
|
-
* nothing authority-bearing moved and the revision is
|
|
1226
|
-
* APPLIED. The claim releases plainly, the task returns
|
|
1227
|
-
* to the ready set, and the next attempt reads the new
|
|
1228
|
-
* plan — that is the "resume" the subject line promises.
|
|
1229
|
-
*
|
|
1230
|
-
* authority-change something else moved the signed scope or the
|
|
1231
|
-
* publication authority WHILE this build ran. Whatever
|
|
1232
|
-
* the revision proposes, it is never auto-applied: the
|
|
1233
|
-
* row lands 'blocked', a `revision` hold keeps the task
|
|
1234
|
-
* out of every ready set until a person accepts or
|
|
1235
|
-
* rejects it, and the page names exactly which fields
|
|
1236
|
-
* changed.
|
|
1237
|
-
*
|
|
1238
|
-
* The lease is released either way — the attempt is over — and the run is
|
|
1239
|
-
* finished as `refused`, reusing the existing outcome vocabulary rather
|
|
1240
|
-
* than growing it: no work was committed, and nothing failed.
|
|
1241
|
-
*/
|
|
1242
807
|
function sealRevision(store, leaseId, args) {
|
|
1243
808
|
const { runId, taskId, taskRef, revision, now } = args;
|
|
1244
809
|
openAttempt(store, leaseId, runId, "a plan revision", "builder");
|
|
@@ -1276,19 +841,6 @@ function sealRevision(store, leaseId, args) {
|
|
|
1276
841
|
}, now);
|
|
1277
842
|
return { ok: true, revisionId, authorityKind: revision.authorityKind };
|
|
1278
843
|
}
|
|
1279
|
-
/**
|
|
1280
|
-
* The planner's own fenced failure finalizer (Codex planning review,
|
|
1281
|
-
* finding 6): releases exactly the planner claim, finishes the run,
|
|
1282
|
-
* counts a SEPARATE planning strike — a planner that cannot finish must
|
|
1283
|
-
* never spend the builder's three attempts — and eventually leaves a
|
|
1284
|
-
* durable incident + hold + page. It never marks the task done, never
|
|
1285
|
-
* touches builder strikes, never commits, never publishes.
|
|
1286
|
-
*
|
|
1287
|
-
* A malformed payload goes straight to its incident with no strike: the
|
|
1288
|
-
* protocol failed, not the weather, and retrying the same session buys
|
|
1289
|
-
* nothing without the repair machinery (deliberately not wired for
|
|
1290
|
-
* planners in v1).
|
|
1291
|
-
*/
|
|
1292
844
|
function sealPlanFailure(store, leaseId, args) {
|
|
1293
845
|
const { runId, taskId, failure: kind, message, now } = args;
|
|
1294
846
|
const run = openAttempt(store, leaseId, runId, "a failure", "planner");
|
|
@@ -1347,8 +899,6 @@ function sealPlanFailure(store, leaseId, args) {
|
|
|
1347
899
|
const until = new Date(now.getTime() + wait);
|
|
1348
900
|
store.holdOwned({
|
|
1349
901
|
taskRef: run.taskRef,
|
|
1350
|
-
// Its own owner id: a planning pause must never displace the
|
|
1351
|
-
// builder's backoff for the same task, or vice versa.
|
|
1352
902
|
ownerKind: "backoff",
|
|
1353
903
|
ownerId: `plan:${run.taskRef}`,
|
|
1354
904
|
reason: `plan retry ${strikes}/${MAX_PLAN_STRIKES} — backing off ${Math.round(wait / 60_000)}m`,
|
|
@@ -1363,13 +913,6 @@ function sealPlanFailure(store, leaseId, args) {
|
|
|
1363
913
|
}, now);
|
|
1364
914
|
return { ok: true, disposition: "backoff", strikes };
|
|
1365
915
|
}
|
|
1366
|
-
/**
|
|
1367
|
-
* Seal a successful scouting run (mate arc §10): the report artifact, the
|
|
1368
|
-
* run outcome, the task's terminal state, and the page to the operator
|
|
1369
|
-
* exist together or — if the lease was superseded — not at all. Nothing
|
|
1370
|
-
* here touches a branch, a publication, or a scope: the deliverable is
|
|
1371
|
-
* the artifact, and the task is done the moment it verifies.
|
|
1372
|
-
*/
|
|
1373
916
|
function sealScout(store, leaseId, args) {
|
|
1374
917
|
const { runId, taskId, report, now } = args;
|
|
1375
918
|
const run = openAttempt(store, leaseId, runId, "a report", "scout");
|
|
@@ -1384,8 +927,6 @@ function sealScout(store, leaseId, args) {
|
|
|
1384
927
|
store.finishRun(runId, { outcome: "built", reason: "report-delivered", now });
|
|
1385
928
|
const done = store.setTaskState(taskId, "done", now);
|
|
1386
929
|
if (!done.ok) {
|
|
1387
|
-
// A mirror the tracker closed meanwhile: the report stands as evidence
|
|
1388
|
-
// on the run; the task keeps the tracker's word for its state.
|
|
1389
930
|
store.finishRun(runId, { outcome: "built", reason: `report-delivered (task ${done.reason})`, now });
|
|
1390
931
|
}
|
|
1391
932
|
store.enqueueNotification({
|
|
@@ -1397,13 +938,6 @@ function sealScout(store, leaseId, args) {
|
|
|
1397
938
|
}, now);
|
|
1398
939
|
return { ok: true };
|
|
1399
940
|
}
|
|
1400
|
-
/**
|
|
1401
|
-
* The scout's fenced failure finalizer: the BUILDER's discipline, not the
|
|
1402
|
-
* planner's — a scout task has no builder attempts, so its strikes are the
|
|
1403
|
-
* task's own (three stall it, `task requeue` clears them), and a malformed
|
|
1404
|
-
* report is a straight incident with no strike. Never a branch, never a
|
|
1405
|
-
* repair session, never a commit.
|
|
1406
|
-
*/
|
|
1407
941
|
function sealScoutFailure(store, leaseId, args) {
|
|
1408
942
|
const { runId, taskId, failure: kind, message, now } = args;
|
|
1409
943
|
const run = openAttempt(store, leaseId, runId, "a failure", "scout");
|
|
@@ -1439,7 +973,6 @@ function sealScoutFailure(store, leaseId, args) {
|
|
|
1439
973
|
}
|
|
1440
974
|
const strikes = store.addStrike(run.taskRef);
|
|
1441
975
|
if (strikes >= MAX_STRIKES) {
|
|
1442
|
-
// Same as the build: a task a person already closed keeps its state, with no incident, hold or page.
|
|
1443
976
|
const closedState = exhaustUnlessClosed(store, run, taskId, now);
|
|
1444
977
|
if (closedState !== null)
|
|
1445
978
|
return { ok: true, disposition: "closed", strikes, state: closedState };
|
|
@@ -1486,20 +1019,9 @@ export function currentClaim(store, taskRef, now) {
|
|
|
1486
1019
|
return null;
|
|
1487
1020
|
return readClaim(row);
|
|
1488
1021
|
}
|
|
1489
|
-
/**
|
|
1490
|
-
* Release every lease that has run out.
|
|
1491
|
-
*
|
|
1492
|
-
* Expiry alone already frees a task for acquisition, so this is not what makes
|
|
1493
|
-
* reclaim work — it is what makes it *visible*. A daemon reaping on a tick
|
|
1494
|
-
* turns "this lease is being ignored because its timestamp is in the past" into
|
|
1495
|
-
* a released row somebody can read, which is the difference between a system
|
|
1496
|
-
* that recovers and a system that appears to have lost the work.
|
|
1497
|
-
*/
|
|
1498
1022
|
export function reap(store, now) {
|
|
1499
1023
|
const stamp = now.toISOString();
|
|
1500
1024
|
const db = store.handle;
|
|
1501
|
-
// One transaction, so the list returned is exactly the list released — a
|
|
1502
|
-
// lease expiring between the read and the write belongs to the next reap.
|
|
1503
1025
|
return inTransaction(store, () => {
|
|
1504
1026
|
const expired = db
|
|
1505
1027
|
.prepare("SELECT * FROM claim WHERE released_at IS NULL AND expires_at <= ?")
|
|
@@ -1524,21 +1046,9 @@ function readClaim(row) {
|
|
|
1524
1046
|
heartbeatAt: String(row["heartbeat_at"]),
|
|
1525
1047
|
};
|
|
1526
1048
|
}
|
|
1527
|
-
/**
|
|
1528
|
-
* IMMEDIATE rather than DEFERRED: the write lock is taken up front, so two
|
|
1529
|
-
* processes racing for the same task queue behind one another instead of both
|
|
1530
|
-
* reading, both deciding they won, and one failing at commit time.
|
|
1531
|
-
*/
|
|
1532
1049
|
function inTransaction(store, body) {
|
|
1533
|
-
// The store's transact: same BEGIN IMMEDIATE, plus reentrancy — a caller
|
|
1534
|
-
// composing a fenced finalizer with more writes (completion + publication
|
|
1535
|
-
// intent) joins one transaction instead of dying on a nested BEGIN.
|
|
1536
1050
|
return store.transact(body);
|
|
1537
1051
|
}
|
|
1538
|
-
/**
|
|
1539
|
-
* Whether `leaseId` is an expired claim, still unreleased and the newest for its task, on a built-in task that is now
|
|
1540
|
-
* done, failed or cancelled: that closed state, else null. heartbeat refuses to renew exactly this case.
|
|
1541
|
-
*/
|
|
1542
1052
|
function expiredOnClosedTask(store, leaseId, now) {
|
|
1543
1053
|
const row = store.handle
|
|
1544
1054
|
.prepare(`SELECT task_ref FROM claim WHERE lease_id = ? AND released_at IS NULL AND expires_at <= ? AND ${NOT_SUPERSEDED}`)
|
|
@@ -1548,13 +1058,6 @@ function expiredOnClosedTask(store, leaseId, now) {
|
|
|
1548
1058
|
const known = taskStateForClaim(store, Number(row["task_ref"]));
|
|
1549
1059
|
return known.kind === "built-in" && isClosedState(known.state) ? known.state : null;
|
|
1550
1060
|
}
|
|
1551
|
-
/**
|
|
1552
|
-
* The stall's state write (build and scouting), inside finalize's transaction. The task is the run's own: a supplied
|
|
1553
|
-
* id that names another task is a caller defect, thrown like openAttempt's. An open built-in task is marked failed
|
|
1554
|
-
* (null back, the stall goes on as before). One a person already closed keeps its state: that state comes back and
|
|
1555
|
-
* the caller writes no incident, hold or page. A reference with no built-in task row behind it (a missing row, or a
|
|
1556
|
-
* task of another backend) writes no state and answers null, so the stall goes on as it did before.
|
|
1557
|
-
*/
|
|
1558
1061
|
function exhaustUnlessClosed(store, run, taskId, now) {
|
|
1559
1062
|
const ref = store.refForId(run.taskRef);
|
|
1560
1063
|
if (ref === null || ref.externalId !== taskId) {
|
|
@@ -1567,13 +1070,6 @@ function exhaustUnlessClosed(store, run, taskId, now) {
|
|
|
1567
1070
|
const state = store.getTask(taskId)?.state;
|
|
1568
1071
|
return state !== undefined && isClosedState(state) ? state : null;
|
|
1569
1072
|
}
|
|
1570
|
-
/**
|
|
1571
|
-
* Check cleanup's claim (acp-check.ts settleChecks): the one road that may claim a closed task. Only the task bound to
|
|
1572
|
-
* check `checkId`, when that check is this runner's, finished and unsettled, held right now by this cleanup `attempt`,
|
|
1573
|
-
* and its task is the built-in one named from the check row's own id (store.ts checkCleanupTaskOf) — proved here, in
|
|
1574
|
-
* the same transaction as the grant. Every other gate of the claim still applies. When the proof fails, the claim
|
|
1575
|
-
* answers exactly as an ordinary one would: never wider.
|
|
1576
|
-
*/
|
|
1577
1073
|
export function acquireForCheckCleanup(store, checkId, attempt, runner, options) {
|
|
1578
1074
|
return inTransaction(store, () => {
|
|
1579
1075
|
const proved = checkCleanupTaskOf(store, checkId, runner, attempt, options.now);
|