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/exec.js
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Running external commands.
|
|
3
|
-
*
|
|
4
|
-
* Two rules define this module. Arguments are passed as an array and never
|
|
5
|
-
* through a shell, so a directory named `; rm -rf ~` is a string and not a
|
|
6
|
-
* command. And nothing here rejects: a failed command is a value. Discovery
|
|
7
|
-
* walks repos it has never seen, and one broken repo must not end the scan.
|
|
8
|
-
*/
|
|
9
1
|
import { ACP_LINE_CAP, createAcpConversation } from "./acp-client.js";
|
|
10
2
|
import { linuxFenceAvailable, macosFenceAvailable, sandboxedSpawn } from "./agent-fence.js";
|
|
11
3
|
import { withoutProtectedEnv } from "./protected-storage.js";
|
|
@@ -17,15 +9,9 @@ import { createContainer, currentContainment } from "./containment.js";
|
|
|
17
9
|
import { claudeLimitsOf, noteLimits } from "./provider-limits.js";
|
|
18
10
|
import { sleep as defaultSleep } from "./sleep.js";
|
|
19
11
|
import { primaryResultEvent, topLevelEvent } from "./stream-scope.js";
|
|
20
|
-
/** Shell convention for "could not be executed": the refusal before any target ran. */
|
|
21
12
|
export const CONTAINMENT_REFUSED_CODE = 126;
|
|
22
|
-
/** Live provider children, for the deterministic stop. Registered only when `processGroup` was set. */
|
|
23
13
|
const liveProviders = new Set();
|
|
24
|
-
/** Children this process's own hard stop ended: their results say so (`stoppedByPlane`). */
|
|
25
14
|
const hardStopped = new WeakSet();
|
|
26
|
-
/** Live children by owner tag (v52): the exact-attempt stop's handle. A
|
|
27
|
-
* child is registered here beside liveProviders when its options named an
|
|
28
|
-
* owner, and dropped the moment it closes. */
|
|
29
15
|
const ownedChildren = new Map();
|
|
30
16
|
function registerOwned(owner, child) {
|
|
31
17
|
if (owner === undefined)
|
|
@@ -45,22 +31,12 @@ function registerOwned(owner, child) {
|
|
|
45
31
|
ownedChildren.delete(owner);
|
|
46
32
|
});
|
|
47
33
|
}
|
|
48
|
-
/** The native OS object behind a live child, when it has one. */
|
|
49
34
|
const containers = new WeakMap();
|
|
50
|
-
/** Thrown BEFORE any spawn when required containment cannot be had. */
|
|
51
35
|
export class ContainmentRefusal extends Error {
|
|
52
36
|
name = "ContainmentRefusal";
|
|
53
37
|
}
|
|
54
|
-
/**
|
|
55
|
-
* The command as it runs inside the agent fence (Anthropic's sandbox-runtime wrapping it: agent-fence.ts
|
|
56
|
-
* sandboxedSpawn), with the environment that needs beside the caller's, or as it is when it has no fence. A spawn whose
|
|
57
|
-
* confinement is required and that no sandbox here can wrap is refused (ContainmentRefusal): nothing runs, and nothing
|
|
58
|
-
* falls back to running it unwrapped.
|
|
59
|
-
*/
|
|
60
38
|
export function confined(file, args, bag) {
|
|
61
39
|
const fence = bag.fence ?? [];
|
|
62
|
-
// A fence is only ever made by fenceFor (agent-fence.ts), which marks it required: one without the mark was put
|
|
63
|
-
// together some other way, and would run bare wherever no OS fence applies. Nothing runs.
|
|
64
40
|
if (fence.length > 0 && bag.confinement !== "required")
|
|
65
41
|
throw new ContainmentRefusal("This process was given a fence that isn't marked required, so it was not started.");
|
|
66
42
|
if (fence.length > 0 && (macosFenceAvailable() || linuxFenceAvailable())) {
|
|
@@ -78,15 +54,11 @@ export function confined(file, args, bag) {
|
|
|
78
54
|
}
|
|
79
55
|
return { file, args: [...args], env: {} };
|
|
80
56
|
}
|
|
81
|
-
/** A spawn's environment with what its sandbox needs added (nothing added: the caller's, as it was). */
|
|
82
57
|
export function withSandboxEnv(env, added, fenced = false) {
|
|
83
|
-
// A fenced launch never gets a chat or vault variable (protected-storage.ts), whoever made its environment.
|
|
84
58
|
if (fenced)
|
|
85
59
|
return withoutProtectedEnv({ ...(env ?? process.env), ...added });
|
|
86
60
|
return Object.keys(added).length === 0 ? env : { ...(env ?? process.env), ...added };
|
|
87
61
|
}
|
|
88
|
-
/** A spawn callback refused custody AFTER the child existed: the caller
|
|
89
|
-
* must reap exactly this child before answering. */
|
|
90
62
|
class SpawnCustodyFailure extends Error {
|
|
91
63
|
child;
|
|
92
64
|
reason;
|
|
@@ -97,37 +69,22 @@ class SpawnCustodyFailure extends Error {
|
|
|
97
69
|
this.reason = reason;
|
|
98
70
|
}
|
|
99
71
|
}
|
|
100
|
-
/** The child a failed spawn road left behind, if any. */
|
|
101
72
|
function rejectedChild(error, child) {
|
|
102
73
|
return error instanceof SpawnCustodyFailure ? error.child : child;
|
|
103
74
|
}
|
|
104
|
-
/**
|
|
105
|
-
* The ONE spawn road for containable children (buffered and streaming
|
|
106
|
-
* transports): consult the pinned policy, make this spawn's OS
|
|
107
|
-
* object, spawn the target INSIDE it, and register the object beside the
|
|
108
|
-
* handle. Under observed containment this is exactly the old spawn. A
|
|
109
|
-
* required policy that cannot be met throws ContainmentRefusal here —
|
|
110
|
-
* nothing has been spawned, so the caller's reap is a no-op and its
|
|
111
|
-
* result says `refused` in the policy's words.
|
|
112
|
-
*/
|
|
113
75
|
function spawnContained(file, args, spawnOptions, label, bag, contain = true) {
|
|
114
|
-
// The agent fence wraps the target itself (sandbox-exec then execs it, same pid).
|
|
115
76
|
const sandboxed = confined(file, args, { ...bag, cwd: spawnOptions.cwd, temp: spawnOptions.env?.["TMPDIR"] });
|
|
116
77
|
({ file, args } = sandboxed);
|
|
117
78
|
spawnOptions = { ...spawnOptions, env: withSandboxEnv(spawnOptions.env, sandboxed.env, (bag.fence?.length ?? 0) > 0) };
|
|
118
|
-
// The policy refusal comes first: nothing is reserved, recorded or
|
|
119
|
-
// spawned for a spawn that cannot be contained as required.
|
|
120
79
|
const effective = contain ? currentContainment() : null;
|
|
121
80
|
if (effective !== null && effective.refusal !== null)
|
|
122
81
|
throw new ContainmentRefusal(effective.refusal);
|
|
123
82
|
if (bag.beforeSpawn?.() === false)
|
|
124
83
|
throw new Error("the attempt stopped before this process could spawn");
|
|
125
|
-
// From here a witness may be reserved: every road that makes no process
|
|
126
|
-
// says so through onSpawnFailed before it returns or throws.
|
|
127
84
|
const neverStarted = () => { try {
|
|
128
85
|
bag.onSpawnFailed?.();
|
|
129
86
|
}
|
|
130
|
-
catch {
|
|
87
|
+
catch { } };
|
|
131
88
|
let made;
|
|
132
89
|
try {
|
|
133
90
|
made = effective === null ? { container: null } : createContainer(effective, label);
|
|
@@ -171,7 +128,6 @@ function spawnContained(file, args, spawnOptions, label, bag, contain = true) {
|
|
|
171
128
|
});
|
|
172
129
|
}
|
|
173
130
|
catch (error) {
|
|
174
|
-
// The OS spawn itself threw: this invocation made no target process.
|
|
175
131
|
try {
|
|
176
132
|
if (container !== null)
|
|
177
133
|
bag.onContainerEmpty?.();
|
|
@@ -183,8 +139,6 @@ function spawnContained(file, args, spawnOptions, label, bag, contain = true) {
|
|
|
183
139
|
}
|
|
184
140
|
if (container !== null) {
|
|
185
141
|
containers.set(child, container);
|
|
186
|
-
// A descendant may keep stdout/stderr open after the root exits. Begin
|
|
187
|
-
// cleanup at root exit; waiting for `close` would wait for that descendant.
|
|
188
142
|
child.once("exit", () => {
|
|
189
143
|
void settleContainer(container, bag).then(empty => {
|
|
190
144
|
if (!empty) {
|
|
@@ -200,9 +154,6 @@ function spawnContained(file, args, spawnOptions, label, bag, contain = true) {
|
|
|
200
154
|
bag.onSpawn?.(child.pid);
|
|
201
155
|
}
|
|
202
156
|
else if (container === null) {
|
|
203
|
-
// No pid: the OS refused the spawn (ENOENT, EACCES) and only an
|
|
204
|
-
// 'error' event follows. A contained spawn settles once its object is
|
|
205
|
-
// proven empty, and its transport's return finishes the witness.
|
|
206
157
|
neverStarted();
|
|
207
158
|
}
|
|
208
159
|
}
|
|
@@ -212,13 +163,6 @@ function spawnContained(file, args, spawnOptions, label, bag, contain = true) {
|
|
|
212
163
|
const attached = launch === null || child.pid === undefined ? Promise.resolve({ ok: true }) : launch.attach(child);
|
|
213
164
|
return { child, container, attached };
|
|
214
165
|
}
|
|
215
|
-
/**
|
|
216
|
-
* The settlement every containable transport runs at the root's exit:
|
|
217
|
-
* members that outlived the root (a setsid'd helper, a double fork) are
|
|
218
|
-
* killed and the OS asked for its empty state, bounded. The answer is
|
|
219
|
-
* the proof the custody record keeps — `false` leaves the record
|
|
220
|
-
* unproven and every stop/resume fence closed.
|
|
221
|
-
*/
|
|
222
166
|
const containerSettlements = new WeakMap();
|
|
223
167
|
function settleContainer(container, bag, timeoutMs = 5_000) {
|
|
224
168
|
const existing = containerSettlements.get(container);
|
|
@@ -244,16 +188,14 @@ async function finishContainer(container, bag, timeoutMs) {
|
|
|
244
188
|
bag.onUnknown?.();
|
|
245
189
|
}
|
|
246
190
|
catch {
|
|
247
|
-
// Custody that cannot be written stays unproven; the fences hold.
|
|
248
191
|
empty = false;
|
|
249
192
|
}
|
|
250
193
|
try {
|
|
251
194
|
container.release();
|
|
252
195
|
}
|
|
253
|
-
catch {
|
|
196
|
+
catch { }
|
|
254
197
|
return empty;
|
|
255
198
|
}
|
|
256
|
-
/** The result's containment field for a spawn that ran inside an object. */
|
|
257
199
|
function containmentOf(container, empty, attachFailure) {
|
|
258
200
|
if (attachFailure !== null)
|
|
259
201
|
return { containment: { refused: attachFailure } };
|
|
@@ -261,11 +203,9 @@ function containmentOf(container, empty, attachFailure) {
|
|
|
261
203
|
return {};
|
|
262
204
|
return { containment: { backend: container.backend, id: container.id, empty } };
|
|
263
205
|
}
|
|
264
|
-
/** The streaming transports' spawn: contained when the spawn is a provider (process group), plain otherwise. */
|
|
265
206
|
function spawnStream(file, args, options, stdio, childEnv) {
|
|
266
207
|
return spawnContained(file, args, { cwd: options.cwd, env: childEnv, stdio, detached: options.processGroup === true && process.platform !== "win32" }, options.owner ?? "stream", { beforeSpawn: options.beforeSpawn, onSpawn: options.onSpawn, onSpawnFailed: options.onSpawnFailed, onContainer: options.onContainer, onContainerEmpty: options.onContainerEmpty, onUnknown: options.onUnknown, fence: options.fence, fenceGrants: options.fenceGrants, confinement: options.confinement }, options.processGroup === true);
|
|
267
208
|
}
|
|
268
|
-
/** The refusal-before-spawn shape shared by every containable transport. */
|
|
269
209
|
function refusedResult(error) {
|
|
270
210
|
if (error instanceof ContainmentRefusal) {
|
|
271
211
|
return { code: CONTAINMENT_REFUSED_CODE, stdout: "", stderr: error.message, timedOut: false, notFound: false, containment: { refused: error.message } };
|
|
@@ -274,8 +214,6 @@ function refusedResult(error) {
|
|
|
274
214
|
}
|
|
275
215
|
const databaseOwners = new WeakMap();
|
|
276
216
|
let memoryDatabaseOwner = 0;
|
|
277
|
-
/** Run IDs are local to a database. Connections to the same file share
|
|
278
|
-
* custody; separate files and separate in-memory databases never do. */
|
|
279
217
|
export function runOwnerTag(store, runId) {
|
|
280
218
|
let owner = databaseOwners.get(store.handle);
|
|
281
219
|
if (owner === undefined) {
|
|
@@ -286,19 +224,9 @@ export function runOwnerTag(store, runId) {
|
|
|
286
224
|
}
|
|
287
225
|
return JSON.stringify([owner, runId]);
|
|
288
226
|
}
|
|
289
|
-
/** How many live children this process still tracks under an owner tag. */
|
|
290
|
-
// Zero is local to this process registry. Recovery must also inspect durable
|
|
291
|
-
// witnesses and its authenticated OS census; this count is not an absence proof.
|
|
292
227
|
export function ownedProcessCount(owner) {
|
|
293
228
|
return ownedChildren.get(owner)?.size ?? 0;
|
|
294
229
|
}
|
|
295
|
-
/**
|
|
296
|
-
* The exact-attempt stop (v52): SIGKILL the process group of every live
|
|
297
|
-
* child registered under the owner tag — and only those. Returns how many
|
|
298
|
-
* were signalled. Idempotent: a child already gone was dropped at close,
|
|
299
|
-
* and a tag nobody registered kills nothing. This is the ONLY kill road a
|
|
300
|
-
* task action may take; the global sweep below is the watch's shutdown.
|
|
301
|
-
*/
|
|
302
230
|
export function terminateOwnedProcesses(owner) {
|
|
303
231
|
const owned = ownedChildren.get(owner);
|
|
304
232
|
if (owned === undefined)
|
|
@@ -312,22 +240,15 @@ export function terminateOwnedProcesses(owner) {
|
|
|
312
240
|
}
|
|
313
241
|
return terminated;
|
|
314
242
|
}
|
|
315
|
-
/** SIGKILL the child's whole process group; fall back to the child alone. */
|
|
316
243
|
function killGroup(child) {
|
|
317
244
|
const container = containers.get(child);
|
|
318
245
|
if (container !== undefined) {
|
|
319
|
-
// The OS object reaches every member at once — detached helpers
|
|
320
|
-
// included — and its empty state is awaited by the transport's
|
|
321
|
-
// settlement, never assumed here.
|
|
322
246
|
void container.kill().catch(() => { });
|
|
323
|
-
// The Windows helper is the job's owner and reporter: it terminates the
|
|
324
|
-
// job on the order above and answers "empty"; killing it instead would
|
|
325
|
-
// close the handle (kill-on-close still ends the job) but lose the proof.
|
|
326
247
|
if (container.backend !== "job-object") {
|
|
327
248
|
try {
|
|
328
249
|
child.kill("SIGKILL");
|
|
329
250
|
}
|
|
330
|
-
catch {
|
|
251
|
+
catch { }
|
|
331
252
|
}
|
|
332
253
|
return;
|
|
333
254
|
}
|
|
@@ -335,15 +256,10 @@ function killGroup(child) {
|
|
|
335
256
|
return;
|
|
336
257
|
const pid = child.pid;
|
|
337
258
|
if (pid !== undefined && process.platform === "win32") {
|
|
338
|
-
// Windows has no process groups to signal (Codex M5-M8 audit, IV-6):
|
|
339
|
-
// taskkill /T walks the tree, so a harness's shell grandchildren die
|
|
340
|
-
// with it instead of writing to the worktree after "stopped". Untested
|
|
341
|
-
// on physical Windows, like the daemon — stated, not hidden.
|
|
342
259
|
try {
|
|
343
260
|
spawn("taskkill", ["/PID", String(pid), "/T", "/F"], { stdio: "ignore", windowsHide: true }).on("error", () => { });
|
|
344
261
|
}
|
|
345
262
|
catch {
|
|
346
|
-
// taskkill missing or refused — the direct kill below still runs.
|
|
347
263
|
}
|
|
348
264
|
}
|
|
349
265
|
if (pid !== undefined && process.platform !== "win32") {
|
|
@@ -352,23 +268,14 @@ function killGroup(child) {
|
|
|
352
268
|
return;
|
|
353
269
|
}
|
|
354
270
|
catch {
|
|
355
|
-
// No group of ours (not detached, or already gone) — fall through.
|
|
356
271
|
}
|
|
357
272
|
}
|
|
358
273
|
try {
|
|
359
274
|
child.kill("SIGKILL");
|
|
360
275
|
}
|
|
361
276
|
catch {
|
|
362
|
-
// Already gone.
|
|
363
277
|
}
|
|
364
278
|
}
|
|
365
|
-
/**
|
|
366
|
-
* The hard stop (M6.12): SIGKILL every live provider's process group.
|
|
367
|
-
* Called by the watch when its stop grace expires — never on the first
|
|
368
|
-
* signal, which stays graceful. Late output cannot commit or publish:
|
|
369
|
-
* the killed process exits nonzero, the build finalizes as the failure
|
|
370
|
-
* it is, and every commit sits behind fences the corpse cannot pass.
|
|
371
|
-
*/
|
|
372
279
|
export function terminateLiveProviders() {
|
|
373
280
|
let terminated = 0;
|
|
374
281
|
for (const child of liveProviders) {
|
|
@@ -378,16 +285,6 @@ export function terminateLiveProviders() {
|
|
|
378
285
|
}
|
|
379
286
|
return terminated;
|
|
380
287
|
}
|
|
381
|
-
/** The one place a child's environment is decided (audit IV-5). */
|
|
382
|
-
/**
|
|
383
|
-
* Chat credentials never reach a child process (Codex chat v3 review,
|
|
384
|
-
* change 10): ANTHROPIC_API_KEY is the chat key AND would silently flip
|
|
385
|
-
* the claude harness from subscription auth to API billing if inherited.
|
|
386
|
-
* A caller that genuinely needs it re-supplies it via `env` explicitly.
|
|
387
|
-
* (OPENROUTER_API_KEY is not listed: the openrouter BUILD adapter reads
|
|
388
|
-
* it from the child env by design, and the agent-facing shell excludes
|
|
389
|
-
* it separately via the provider's own config.)
|
|
390
|
-
*/
|
|
391
288
|
const CHAT_KEYS_NEVER_INHERITED = ["ANTHROPIC_API_KEY"];
|
|
392
289
|
function resolveChildEnv(options) {
|
|
393
290
|
const { env, omitEnv, envAllowlist } = options;
|
|
@@ -416,13 +313,8 @@ function resolveChildEnv(options) {
|
|
|
416
313
|
}
|
|
417
314
|
return merged;
|
|
418
315
|
}
|
|
419
|
-
/** Conventions from the shell and from coreutils `timeout(1)`. */
|
|
420
316
|
export const NOT_FOUND_CODE = 127;
|
|
421
317
|
export const TIMEOUT_CODE = 124;
|
|
422
|
-
/** Output too large to hold. Not a timeout, and must not be reported as one. */
|
|
423
|
-
/** A spawn callback records custody after the child exists. If that write
|
|
424
|
-
* fails, stop and reap the owned child before reporting failure; otherwise
|
|
425
|
-
* an unrecorded provider could keep writing after its caller retries. */
|
|
426
318
|
function reapRejectedSpawn(child, group) {
|
|
427
319
|
if (child === undefined)
|
|
428
320
|
return Promise.resolve();
|
|
@@ -446,24 +338,14 @@ function reapRejectedSpawn(child, group) {
|
|
|
446
338
|
try {
|
|
447
339
|
child.kill("SIGKILL");
|
|
448
340
|
}
|
|
449
|
-
catch {
|
|
341
|
+
catch { }
|
|
450
342
|
}
|
|
451
343
|
});
|
|
452
344
|
}
|
|
453
345
|
export const OVERFLOW_CODE = 125;
|
|
454
346
|
export const DEFAULT_TIMEOUT_MS = 15_000;
|
|
455
347
|
export const DEFAULT_MAX_BUFFER = 8 * 1024 * 1024;
|
|
456
|
-
|
|
457
|
-
* A streaming process may run for hours while it is making observable
|
|
458
|
-
* progress. This controller keeps the ordinary hard timeout available for
|
|
459
|
-
* bounded work, while allowing provider callers to choose an activity-based
|
|
460
|
-
* watchdog with no wall-clock deadline. Both roads share the same kill and
|
|
461
|
-
* settlement semantics.
|
|
462
|
-
*/
|
|
463
|
-
function streamWatchdog(options, onTimeout,
|
|
464
|
-
/** The idle limit was reached: true when the caller ended the wait its own way (a paused live session closes
|
|
465
|
-
* stdin), so the same limit runs again for the process to exit before it is killed. */
|
|
466
|
-
onIdle) {
|
|
348
|
+
function streamWatchdog(options, onTimeout, onIdle) {
|
|
467
349
|
const hardMs = options.timeoutMs ?? (options.idleTimeoutMs === undefined ? DEFAULT_TIMEOUT_MS : undefined);
|
|
468
350
|
const idleMs = options.idleTimeoutMs;
|
|
469
351
|
let fired = false;
|
|
@@ -512,25 +394,11 @@ onIdle) {
|
|
|
512
394
|
};
|
|
513
395
|
}
|
|
514
396
|
const MAX_BUFFER_ERROR = "ERR_CHILD_PROCESS_STDIO_MAXBUFFER";
|
|
515
|
-
/**
|
|
516
|
-
* A spawn the OS refused for the moment — no free process slot or file
|
|
517
|
-
* descriptor (a loaded machine, a fork storm from a parallel test suite) —
|
|
518
|
-
* is not the command failing: the command never ran. Left as an exit 1, a
|
|
519
|
-
* `git symbolic-ref` that never started reads as "no branch checked out"
|
|
520
|
-
* and an unattended pass refuses on a lie. So the two buffered transports
|
|
521
|
-
* retry EXACTLY this class, bounded, before answering.
|
|
522
|
-
*/
|
|
523
397
|
const TRANSIENT_SPAWN_CODES = new Set(["EAGAIN", "EMFILE", "ENFILE"]);
|
|
524
398
|
export const SPAWN_RETRY_DELAYS_MS = [50, 100, 200, 400, 800];
|
|
525
399
|
export function isTransientSpawnFailure(error) {
|
|
526
400
|
return error !== null && error !== undefined && typeof error.code === "string" && TRANSIENT_SPAWN_CODES.has(error.code);
|
|
527
401
|
}
|
|
528
|
-
/**
|
|
529
|
-
* Retry `attempt` while it reports a transient spawn failure, sleeping the
|
|
530
|
-
* given delays between tries; the last answer stands when they run out.
|
|
531
|
-
* A non-transient answer — success, a real exit code, not found, timeout —
|
|
532
|
-
* is returned at once: only the never-started case is retried.
|
|
533
|
-
*/
|
|
534
402
|
export async function retryTransientSpawn(attempt, delays = SPAWN_RETRY_DELAYS_MS, sleep = defaultSleep) {
|
|
535
403
|
let last = await attempt();
|
|
536
404
|
for (const delay of delays) {
|
|
@@ -544,8 +412,6 @@ export async function retryTransientSpawn(attempt, delays = SPAWN_RETRY_DELAYS_M
|
|
|
544
412
|
export function run(file, args, options = {}) {
|
|
545
413
|
const { cwd, timeoutMs = DEFAULT_TIMEOUT_MS, maxBuffer = DEFAULT_MAX_BUFFER } = options;
|
|
546
414
|
const childEnv = resolveChildEnv(options);
|
|
547
|
-
// A provider run needs its own process group; execFile cannot give one,
|
|
548
|
-
// so the buffered path detours through spawn with identical semantics.
|
|
549
415
|
if (options.processGroup === true) {
|
|
550
416
|
return retryTransientSpawn(() => runBufferedGroup(file, args, {
|
|
551
417
|
timeoutMs,
|
|
@@ -572,8 +438,6 @@ export function run(file, args, options = {}) {
|
|
|
572
438
|
...(options.onContainerEmpty === undefined ? {} : { onContainerEmpty: options.onContainerEmpty }),
|
|
573
439
|
}));
|
|
574
440
|
}
|
|
575
|
-
// The plain road wraps exactly as the process-group road does: a fence given here is never dropped, and a spawn
|
|
576
|
-
// whose confinement is required and can't be wrapped refuses before anything runs.
|
|
577
441
|
let wrapped;
|
|
578
442
|
try {
|
|
579
443
|
wrapped = confined(file, args, { ...options, cwd, temp: childEnv?.["TMPDIR"] });
|
|
@@ -584,8 +448,6 @@ export function run(file, args, options = {}) {
|
|
|
584
448
|
return Promise.resolve({ code: CONTAINMENT_REFUSED_CODE, stdout: "", stderr: error.message, timedOut: false, notFound: false, containment: { refused: error.message } });
|
|
585
449
|
}
|
|
586
450
|
return retryTransientSpawn(() => new Promise(resolve => {
|
|
587
|
-
// execFile's timeout sends SIGTERM and nothing more: a process that survives it (one that ignores or blocks
|
|
588
|
-
// it) never exits, and its caller would wait forever. SIGKILL follows a short grace later.
|
|
589
451
|
let hardKill;
|
|
590
452
|
const child = execFile(wrapped.file, wrapped.args, {
|
|
591
453
|
cwd,
|
|
@@ -611,19 +473,12 @@ export function run(file, args, options = {}) {
|
|
|
611
473
|
hardKill = setTimeout(() => { try {
|
|
612
474
|
child.kill("SIGKILL");
|
|
613
475
|
}
|
|
614
|
-
catch {
|
|
476
|
+
catch { } }, timeoutMs + TERM_GRACE_MS);
|
|
615
477
|
hardKill.unref?.();
|
|
616
478
|
}
|
|
617
479
|
}));
|
|
618
480
|
}
|
|
619
|
-
/** How long a timed-out plain command has to exit after SIGTERM before it is killed outright. */
|
|
620
481
|
export const TERM_GRACE_MS = 2_000;
|
|
621
|
-
/**
|
|
622
|
-
* The buffered transport for process-group providers (claude): spawn
|
|
623
|
-
* detached so the harness and everything it launches share one killable
|
|
624
|
-
* group, collect output up to the same maxBuffer contract as execFile,
|
|
625
|
-
* and register as a live provider for the watch's hard stop.
|
|
626
|
-
*/
|
|
627
482
|
function runBufferedGroup(file, args, bag) {
|
|
628
483
|
return new Promise(resolve => {
|
|
629
484
|
let child;
|
|
@@ -662,7 +517,6 @@ function runBufferedGroup(file, args, bag) {
|
|
|
662
517
|
timedOut = true;
|
|
663
518
|
killGroup(child);
|
|
664
519
|
}, bag.timeoutMs);
|
|
665
|
-
// The caller's deadline, when it owns one: the same group kill as the timer.
|
|
666
520
|
const aborted = () => {
|
|
667
521
|
timedOut = true;
|
|
668
522
|
killGroup(child);
|
|
@@ -681,7 +535,7 @@ function runBufferedGroup(file, args, bag) {
|
|
|
681
535
|
try {
|
|
682
536
|
bag.onStdout?.(chunk);
|
|
683
537
|
}
|
|
684
|
-
catch {
|
|
538
|
+
catch { }
|
|
685
539
|
});
|
|
686
540
|
child.stderr?.setEncoding("utf8");
|
|
687
541
|
child.stderr?.on("data", (chunk) => {
|
|
@@ -690,7 +544,7 @@ function runBufferedGroup(file, args, bag) {
|
|
|
690
544
|
try {
|
|
691
545
|
bag.onStderr?.(chunk);
|
|
692
546
|
}
|
|
693
|
-
catch {
|
|
547
|
+
catch { }
|
|
694
548
|
});
|
|
695
549
|
let settled = false;
|
|
696
550
|
let transient = false;
|
|
@@ -702,8 +556,6 @@ function runBufferedGroup(file, args, bag) {
|
|
|
702
556
|
clearTimeout(timer);
|
|
703
557
|
bag.signal?.removeEventListener("abort", aborted);
|
|
704
558
|
liveProviders.delete(child);
|
|
705
|
-
// The OS object is settled BEFORE the answer: a root that exited is
|
|
706
|
-
// not an empty container until the OS says so.
|
|
707
559
|
const settlement = container === null ? Promise.resolve(null) : settleContainer(container, bag);
|
|
708
560
|
void settlement.then(empty => {
|
|
709
561
|
resolve({
|
|
@@ -711,7 +563,6 @@ function runBufferedGroup(file, args, bag) {
|
|
|
711
563
|
code: notFound ? NOT_FOUND_CODE : overflowed ? OVERFLOW_CODE : timedOut ? TIMEOUT_CODE : inputFailed ? 1 : attachFailure !== null || empty === false ? CONTAINMENT_REFUSED_CODE : (code ?? 1),
|
|
712
564
|
stdout,
|
|
713
565
|
stderr: empty === false ? `${stderr}\nNative process containment could not prove all descendants exited.`.trim() : attachFailure !== null && stderr === "" ? attachFailure : stderr,
|
|
714
|
-
// Overflow also killed the child; it is not a timeout and must not read as one.
|
|
715
566
|
timedOut: timedOut && !overflowed,
|
|
716
567
|
notFound,
|
|
717
568
|
...containmentOf(container, empty, attachFailure),
|
|
@@ -740,11 +591,6 @@ function runBufferedGroup(file, args, bag) {
|
|
|
740
591
|
}
|
|
741
592
|
});
|
|
742
593
|
}
|
|
743
|
-
/**
|
|
744
|
-
* Turn an execFile error into a result. The order matters: a maxBuffer overflow
|
|
745
|
-
* also arrives with `killed: true`, so it has to be recognised before the
|
|
746
|
-
* timeout check or a truncated `git log` reads as a hung one.
|
|
747
|
-
*/
|
|
748
594
|
function describeFailure(error, stdout, stderr) {
|
|
749
595
|
const notFound = error.code === "ENOENT";
|
|
750
596
|
const overflowed = error.code === MAX_BUFFER_ERROR;
|
|
@@ -768,57 +614,22 @@ function resolveCode(error, flags) {
|
|
|
768
614
|
return TIMEOUT_CODE;
|
|
769
615
|
return 1;
|
|
770
616
|
}
|
|
771
|
-
/**
|
|
772
|
-
* The streaming transport for JSONL-emitting providers.
|
|
773
|
-
*
|
|
774
|
-
* A long agent session can write far more event stream than any fixed
|
|
775
|
-
* buffer should hold, and the lines that matter — the session identity,
|
|
776
|
-
* the terminal usage — arrive LAST. Buffering-and-overflowing would kill
|
|
777
|
-
* the process at 8 MiB and lose exactly the facts a paid run must not
|
|
778
|
-
* lose (Codex provider review, high finding 2). So stdout is consumed
|
|
779
|
-
* incrementally and only the load-bearing lines are retained:
|
|
780
|
-
*
|
|
781
|
-
* - a bounded identity witness for `thread.started` (first usable id,
|
|
782
|
-
* first conflicting id, and last event), plus the LAST `turn.completed`
|
|
783
|
-
* and `turn.failed` line
|
|
784
|
-
* - the LAST `item.completed` line carrying an agent_message
|
|
785
|
-
*
|
|
786
|
-
* each capped per line; everything else is counted and dropped. The
|
|
787
|
-
* result's stdout is the retained lines joined — a synthetic, bounded
|
|
788
|
-
* envelope the parser reads exactly like test fixtures.
|
|
789
|
-
*/
|
|
790
617
|
const JSONL_LINE_CAP = 64 * 1024;
|
|
791
618
|
const JSONL_STDERR_CAP = 64 * 1024;
|
|
792
|
-
/** Canonical identity at the transport boundary. Never persist or expose
|
|
793
|
-
* provider framing whitespace as part of a resumable session id. */
|
|
794
619
|
function transportSessionId(value) {
|
|
795
620
|
if (typeof value !== "string")
|
|
796
621
|
return null;
|
|
797
622
|
const id = value.trim();
|
|
798
623
|
return id === "" ? null : id;
|
|
799
624
|
}
|
|
800
|
-
/**
|
|
801
|
-
* Provider replies are nested inside their JSONL envelope. A 64 KiB reply
|
|
802
|
-
* therefore needs appreciably more than 64 KiB on the wire once quotes,
|
|
803
|
-
* backslashes, and control characters are escaped. 512 KiB carries that
|
|
804
|
-
* worst useful case while remaining a hard, per-event memory boundary.
|
|
805
|
-
*/
|
|
806
625
|
export const JSONL_EVENT_HARD_CAP = 512 * 1024;
|
|
807
626
|
const JSONL_OVERFLOW_PREFIX_CAP = 4 * 1024;
|
|
808
|
-
/**
|
|
809
|
-
* Split a byte stream into JSONL records without ever accumulating an
|
|
810
|
-
* unbounded partial line. The callback is synchronous so the same fixed
|
|
811
|
-
* storage can be reused for the next record. Counting the original bytes
|
|
812
|
-
* (rather than JavaScript characters) makes the overflow receipt exact.
|
|
813
|
-
*/
|
|
814
627
|
function boundedJsonlFramer(cap, onLine, inspectDiscriminants = false, tailCap = 0) {
|
|
815
628
|
const retained = Buffer.allocUnsafe(cap);
|
|
816
629
|
let retainedBytes = 0;
|
|
817
630
|
let originalBytes = 0;
|
|
818
631
|
let nonWhitespace = false;
|
|
819
632
|
let discriminants = inspectDiscriminants ? jsonlDiscriminants() : null;
|
|
820
|
-
// An oversized line's last tailCap bytes, kept only once the line passes the cap (Claude's result carries its cost
|
|
821
|
-
// after the words that made it too large). Seeded from the retained prefix's end, so it is always the line's true end.
|
|
822
633
|
const tailSize = Math.max(0, Math.min(tailCap, cap));
|
|
823
634
|
const tail = tailSize === 0 ? null : Buffer.allocUnsafe(tailSize);
|
|
824
635
|
let tailBytes = 0;
|
|
@@ -853,7 +664,6 @@ function boundedJsonlFramer(cap, onLine, inspectDiscriminants = false, tailCap =
|
|
|
853
664
|
if (retainedBytes < cap) {
|
|
854
665
|
retainedBytes += part.copy(retained, retainedBytes, 0, cap - retainedBytes);
|
|
855
666
|
}
|
|
856
|
-
// The bytes up to the cap are in the prefix; only what runs past it moves the tail.
|
|
857
667
|
if (tail !== null && originalBytes > cap)
|
|
858
668
|
keepTail(before >= cap ? part : part.subarray(cap - before));
|
|
859
669
|
};
|
|
@@ -887,8 +697,6 @@ function boundedJsonlFramer(cap, onLine, inspectDiscriminants = false, tailCap =
|
|
|
887
697
|
}
|
|
888
698
|
},
|
|
889
699
|
finish() {
|
|
890
|
-
// Match the old `partial.trim() !== ""` rule: a final unterminated
|
|
891
|
-
// whitespace-only record is not an event and needs no receipt.
|
|
892
700
|
if (originalBytes > 0 && nonWhitespace)
|
|
893
701
|
emit();
|
|
894
702
|
},
|
|
@@ -904,8 +712,6 @@ function overflowReceiptText(transport, line) {
|
|
|
904
712
|
hardCapBytes: JSONL_EVENT_HARD_CAP,
|
|
905
713
|
prefixBytes: rawPrefix.length,
|
|
906
714
|
prefix: rawPrefix.toString("utf8"),
|
|
907
|
-
// The readable prefix can end halfway through a UTF-8 character. This
|
|
908
|
-
// companion is the exact retained byte prefix for forensic evidence.
|
|
909
715
|
prefixBase64: rawPrefix.toString("base64"),
|
|
910
716
|
});
|
|
911
717
|
}
|
|
@@ -961,17 +767,10 @@ function geminiMalformedLine(line) {
|
|
|
961
767
|
error: { message: malformedReceiptText("gemini", line) },
|
|
962
768
|
});
|
|
963
769
|
}
|
|
964
|
-
/**
|
|
965
|
-
* Read only the leading, top-level `type` discriminant from an incomplete
|
|
966
|
-
* JSON object. Provider JSONL dialects put `type` first. Anchoring the match
|
|
967
|
-
* means content later in an oversized event can never spoof classification.
|
|
968
|
-
*/
|
|
969
770
|
function leadingJsonObjectType(prefix) {
|
|
970
771
|
const match = /^\s*\{\s*"type"\s*:\s*"([A-Za-z0-9._-]+)"/.exec(prefix.toString("utf8", 0, Math.min(prefix.length, 256)));
|
|
971
772
|
return match?.[1] ?? null;
|
|
972
773
|
}
|
|
973
|
-
/** Codex emits `item` immediately after the outer type. Only an agent
|
|
974
|
-
* message is load-bearing; completed command/tool telemetry is droppable. */
|
|
975
774
|
function leadingCodexCompletedItemType(prefix) {
|
|
976
775
|
const match = /^\s*\{\s*"type"\s*:\s*"item\.completed"\s*,\s*"item"\s*:\s*\{\s*"type"\s*:\s*"([A-Za-z0-9._-]+)"/.exec(prefix.toString("utf8", 0, Math.min(prefix.length, 512)));
|
|
977
776
|
return match?.[1] ?? null;
|
|
@@ -980,9 +779,7 @@ function leadingClaudeSystemSubtype(prefix) {
|
|
|
980
779
|
const match = /^\s*\{\s*"type"\s*:\s*"system"\s*,\s*"subtype"\s*:\s*"([A-Za-z0-9._-]+)"/.exec(prefix.toString("utf8", 0, Math.min(prefix.length, 512)));
|
|
981
780
|
return match?.[1] ?? null;
|
|
982
781
|
}
|
|
983
|
-
/** How much of an oversized Claude result's end is kept to read its cost and usage (they follow the words). */
|
|
984
782
|
const CLAUDE_RESULT_TAIL_CAP = 64 * 1024;
|
|
985
|
-
/** Marks a Claude result whose session cost could not be read: the gateway charges the run's dollar cap instead. */
|
|
986
783
|
export const CLAUDE_COST_UNKNOWN = "standing_orders_cost_unknown";
|
|
987
784
|
function malformedCodexEventIsLoadBearing(prefix) {
|
|
988
785
|
const type = leadingJsonObjectType(prefix);
|
|
@@ -995,9 +792,6 @@ function malformedCodexEventIsLoadBearing(prefix) {
|
|
|
995
792
|
}
|
|
996
793
|
function malformedGeminiEventIsLoadBearing(prefix) {
|
|
997
794
|
const type = leadingJsonObjectType(prefix);
|
|
998
|
-
// These two records authorize the session and the successful terminal.
|
|
999
|
-
// Malformed messages remain diagnostics only; startup prose, tool traffic,
|
|
1000
|
-
// and warnings retain the transport's established noise tolerance.
|
|
1001
795
|
return type === "init" || type === "result";
|
|
1002
796
|
}
|
|
1003
797
|
export function runStreamJsonl(file, args, options = {}) {
|
|
@@ -1037,9 +831,6 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1037
831
|
let inputFailed = false;
|
|
1038
832
|
const keep = (framed) => {
|
|
1039
833
|
if (framed.overflowed) {
|
|
1040
|
-
// Inspect structural keys across the complete byte stream, including
|
|
1041
|
-
// keys AFTER discarded command output. Quoted or nested types cannot
|
|
1042
|
-
// spoof these discriminants, and malformed/ambiguous input stays red.
|
|
1043
834
|
const type = framed.discriminants?.type ?? null;
|
|
1044
835
|
if (type !== null && !["thread.started", "turn.completed", "turn.failed", "item.completed"].includes(type)) {
|
|
1045
836
|
return;
|
|
@@ -1049,9 +840,6 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1049
840
|
if (itemType !== undefined && itemType !== null && ["command_execution", "mcp_tool_call", "web_search", "file_change", "todo_list"].includes(itemType))
|
|
1050
841
|
return;
|
|
1051
842
|
}
|
|
1052
|
-
// A load-bearing or unclassifiable hard-cap breach is independently
|
|
1053
|
-
// retained as failure. Once those bytes were discarded, a later
|
|
1054
|
-
// ordinary message must never turn the run green.
|
|
1055
843
|
if (overflowLine === null)
|
|
1056
844
|
overflowLine = codexOverflowLine(framed);
|
|
1057
845
|
return;
|
|
@@ -1061,13 +849,9 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1061
849
|
const event = JSON.parse(line);
|
|
1062
850
|
const type = String(event["type"] ?? "");
|
|
1063
851
|
if (type === "thread.started") {
|
|
1064
|
-
// Keep the last init for the existing transport contract and a
|
|
1065
|
-
// bounded pair of earlier witnesses so a conflict cannot hide.
|
|
1066
852
|
startedLine = line;
|
|
1067
853
|
const id = transportSessionId(event["thread_id"]);
|
|
1068
854
|
if (id !== null) {
|
|
1069
|
-
// Retain only enough events to prove the identity contract:
|
|
1070
|
-
// one usable id when the first init was blank, and one conflict.
|
|
1071
855
|
if (startedSessionId === null) {
|
|
1072
856
|
startedSessionId = id;
|
|
1073
857
|
startedIdentityLine = line;
|
|
@@ -1080,7 +864,6 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1080
864
|
options.onSessionId(id);
|
|
1081
865
|
}
|
|
1082
866
|
catch {
|
|
1083
|
-
// A registry that cannot be written must not kill the turn.
|
|
1084
867
|
}
|
|
1085
868
|
}
|
|
1086
869
|
}
|
|
@@ -1089,8 +872,6 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1089
872
|
completedLine = line;
|
|
1090
873
|
}
|
|
1091
874
|
else if (type === "turn.failed") {
|
|
1092
|
-
// Retain failure independently from completion: seeing either at
|
|
1093
|
-
// any point is load-bearing, while one slot per kind stays bounded.
|
|
1094
875
|
failedLine = line;
|
|
1095
876
|
}
|
|
1096
877
|
else if (type === "item.completed") {
|
|
@@ -1104,14 +885,10 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1104
885
|
options.onStreamEvent(event);
|
|
1105
886
|
}
|
|
1106
887
|
catch {
|
|
1107
|
-
// Observational only: a broken listener never touches the run.
|
|
1108
888
|
}
|
|
1109
889
|
}
|
|
1110
890
|
}
|
|
1111
891
|
catch {
|
|
1112
|
-
// Startup prose and ordinary malformed telemetry remain ignorable.
|
|
1113
|
-
// Once initialization is proven, however, a recognizable control or
|
|
1114
|
-
// answer record cannot disappear merely because its JSON was cut.
|
|
1115
892
|
if (startedLine !== null &&
|
|
1116
893
|
malformedLine === null &&
|
|
1117
894
|
malformedCodexEventIsLoadBearing(framed.prefix)) {
|
|
@@ -1167,8 +944,6 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1167
944
|
...containmentOf(container, empty, attachFailure),
|
|
1168
945
|
}));
|
|
1169
946
|
};
|
|
1170
|
-
// A failed spawn fires 'error' and may never fire 'close' — both routes
|
|
1171
|
-
// settle, exactly once.
|
|
1172
947
|
child.on("error", error => {
|
|
1173
948
|
notFound = error.code === "ENOENT";
|
|
1174
949
|
if (stderr === "")
|
|
@@ -1177,8 +952,6 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1177
952
|
});
|
|
1178
953
|
child.on("close", code => finish(code));
|
|
1179
954
|
if (options.stdin !== undefined && child.stdin !== null) {
|
|
1180
|
-
// Even an exit-0 child cannot prove a review if prompt delivery failed.
|
|
1181
|
-
// Handle EPIPE without crashing the supervisor, then wait for close.
|
|
1182
955
|
child.stdin.on("error", error => {
|
|
1183
956
|
inputFailed = true;
|
|
1184
957
|
stderr = `review prompt input failed: ${String(error)}`.slice(0, JSONL_STDERR_CAP);
|
|
@@ -1191,27 +964,6 @@ export function runStreamJsonl(file, args, options = {}) {
|
|
|
1191
964
|
}
|
|
1192
965
|
});
|
|
1193
966
|
}
|
|
1194
|
-
/**
|
|
1195
|
-
* The streaming transport for gemini's stream-json dialect (Phase 3 D1/A7).
|
|
1196
|
-
*
|
|
1197
|
-
* Retention: a bounded `init` identity witness (the first init signal, first
|
|
1198
|
-
* usable session id, and first conflicting id), the FIRST
|
|
1199
|
-
* `severity:"error"` error event (diagnostics),
|
|
1200
|
-
* the LAST `result` event (tokens + structural status), and the assistant's
|
|
1201
|
-
* text — which gemini emits only as many `message` delta lines — ASSEMBLED
|
|
1202
|
-
* into one line of a dedicated internal schema the real CLI cannot emit:
|
|
1203
|
-
*
|
|
1204
|
-
* {"type":"synthetic_message","content":"...","truncated":true?}
|
|
1205
|
-
*
|
|
1206
|
-
* Assembly rules (round-3 f9): only `role:"assistant"` events with
|
|
1207
|
-
* `delta === true` concatenate; a non-delta assistant message REPLACES the
|
|
1208
|
-
* buffer (full-message semantics); non-string content is dropped; the cap
|
|
1209
|
-
* is enforced on the SERIALIZED UTF-8 BYTES of the complete synthetic line
|
|
1210
|
-
* (marker included), so it can never violate the runner's own line
|
|
1211
|
-
* discipline. Everything else — user echoes, tool_use, tool_result,
|
|
1212
|
-
* warnings — is dropped. Timeout, process-group, kill, and spawn
|
|
1213
|
-
* semantics match `runStreamJsonl`.
|
|
1214
|
-
*/
|
|
1215
967
|
export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
1216
968
|
const childEnv = resolveChildEnv(options);
|
|
1217
969
|
return new Promise(resolve => {
|
|
@@ -1250,9 +1002,6 @@ export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
|
1250
1002
|
const keep = (framed) => {
|
|
1251
1003
|
if (framed.overflowed) {
|
|
1252
1004
|
const type = leadingJsonObjectType(framed.prefix);
|
|
1253
|
-
// Tool plumbing is never a terminal or answer. All load-bearing and
|
|
1254
|
-
// unknown oversized events latch a terminal protocol failure so a
|
|
1255
|
-
// later small success cannot hide discarded provider bytes.
|
|
1256
1005
|
if (type !== "tool_use" && type !== "tool_result") {
|
|
1257
1006
|
if (overflowLine === null)
|
|
1258
1007
|
overflowLine = geminiOverflowLine(framed);
|
|
@@ -1270,7 +1019,7 @@ export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
|
1270
1019
|
malformedGeminiEventIsLoadBearing(framed.prefix)) {
|
|
1271
1020
|
malformedLine = geminiMalformedLine(framed);
|
|
1272
1021
|
}
|
|
1273
|
-
return;
|
|
1022
|
+
return;
|
|
1274
1023
|
}
|
|
1275
1024
|
if (event === null || typeof event !== "object")
|
|
1276
1025
|
return;
|
|
@@ -1295,13 +1044,12 @@ export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
|
1295
1044
|
options.onSessionId(id);
|
|
1296
1045
|
}
|
|
1297
1046
|
catch {
|
|
1298
|
-
// A registry that cannot be written must not kill the turn.
|
|
1299
1047
|
}
|
|
1300
1048
|
}
|
|
1301
1049
|
}
|
|
1302
1050
|
}
|
|
1303
1051
|
else if (type === "result") {
|
|
1304
|
-
resultLine = line;
|
|
1052
|
+
resultLine = line;
|
|
1305
1053
|
}
|
|
1306
1054
|
else if (type === "error") {
|
|
1307
1055
|
if (errorLine === null && String(event["severity"] ?? "") === "error")
|
|
@@ -1310,7 +1058,7 @@ export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
|
1310
1058
|
else if (type === "message" && String(event["role"] ?? "") === "assistant") {
|
|
1311
1059
|
const content = event["content"];
|
|
1312
1060
|
if (typeof content !== "string")
|
|
1313
|
-
return;
|
|
1061
|
+
return;
|
|
1314
1062
|
if (event["delta"] === true) {
|
|
1315
1063
|
if (!messageTruncated) {
|
|
1316
1064
|
message += content;
|
|
@@ -1319,7 +1067,6 @@ export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
|
1319
1067
|
}
|
|
1320
1068
|
}
|
|
1321
1069
|
else {
|
|
1322
|
-
// A full (non-delta) assistant message replaces the buffer.
|
|
1323
1070
|
message = content;
|
|
1324
1071
|
messageTruncated = Buffer.byteLength(message, "utf8") > JSONL_LINE_CAP;
|
|
1325
1072
|
}
|
|
@@ -1329,7 +1076,6 @@ export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
|
1329
1076
|
options.onStreamEvent(event);
|
|
1330
1077
|
}
|
|
1331
1078
|
catch {
|
|
1332
|
-
// Observational only: a broken listener never touches the run.
|
|
1333
1079
|
}
|
|
1334
1080
|
}
|
|
1335
1081
|
};
|
|
@@ -1368,12 +1114,8 @@ export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
|
1368
1114
|
lines.push(syntheticMessageLine(message, messageTruncated));
|
|
1369
1115
|
if (resultLine !== null)
|
|
1370
1116
|
lines.push(resultLine);
|
|
1371
|
-
// Keep the overflow last: gemini's contract is last-result-wins, and
|
|
1372
|
-
// no later small event may erase evidence that a record was discarded.
|
|
1373
1117
|
if (overflowLine !== null)
|
|
1374
1118
|
lines.push(overflowLine);
|
|
1375
|
-
// A recognizable, malformed terminal is just as conclusive as an
|
|
1376
|
-
// oversized one. Keep it last so last-result-wins cannot erase it.
|
|
1377
1119
|
if (malformedLine !== null)
|
|
1378
1120
|
lines.push(malformedLine);
|
|
1379
1121
|
const settlement = container === null ? Promise.resolve(null) : settleContainer(container, options);
|
|
@@ -1395,7 +1137,6 @@ export function runGeminiStreamJsonl(file, args, options = {}) {
|
|
|
1395
1137
|
child.on("close", code => finish(code));
|
|
1396
1138
|
});
|
|
1397
1139
|
}
|
|
1398
|
-
/** One process listing: ids, group, state and command name only (never arguments — they can carry a brief). */
|
|
1399
1140
|
function processRows() {
|
|
1400
1141
|
try {
|
|
1401
1142
|
return execFileSync("/bin/ps", ["-axo", "pid=,ppid=,pgid=,stat=,comm="], { encoding: "utf8", timeout: 2_000, maxBuffer: 8 * 1024 * 1024 })
|
|
@@ -1408,11 +1149,6 @@ function processRows() {
|
|
|
1408
1149
|
return null;
|
|
1409
1150
|
}
|
|
1410
1151
|
}
|
|
1411
|
-
/**
|
|
1412
|
-
* What the agent started and is still running: from `root` (the spawned process — the agent itself, or a fence
|
|
1413
|
-
* wrapper around it), down to the agent's own process (the first whose command is the agent's launch, `names`), then
|
|
1414
|
-
* every live, non-zombie process beneath it, with its group. The agent itself and any wrapper are never counted.
|
|
1415
|
-
*/
|
|
1416
1152
|
function liveUnderAgent(root, names, rootIsWrapper = false) {
|
|
1417
1153
|
const rows = processRows();
|
|
1418
1154
|
if (rows === null)
|
|
@@ -1422,8 +1158,6 @@ function liveUnderAgent(root, names, rootIsWrapper = false) {
|
|
|
1422
1158
|
children.set(row.parent, [...(children.get(row.parent) ?? []), row]);
|
|
1423
1159
|
const self = rows.find(row => row.pid === root);
|
|
1424
1160
|
const named = (row) => agentNamed(row, names);
|
|
1425
|
-
// The agent: the root when it is the agent (macOS sandbox-exec execs in place), else the first named descendant.
|
|
1426
|
-
// On Linux the root is the sandbox launch helper (sandbox-launch.ts, itself node): never taken for the agent.
|
|
1427
1161
|
let agent = !rootIsWrapper && self !== undefined && named(self) ? root : null;
|
|
1428
1162
|
const pending = [...(children.get(root) ?? [])];
|
|
1429
1163
|
while (agent === null && pending.length > 0) {
|
|
@@ -1445,7 +1179,6 @@ function liveUnderAgent(root, names, rootIsWrapper = false) {
|
|
|
1445
1179
|
}
|
|
1446
1180
|
return found;
|
|
1447
1181
|
}
|
|
1448
|
-
/** The program a Linux process runs (its /proc exe), or null: elsewhere, or unreadable. */
|
|
1449
1182
|
function linuxProgramOf(pid) {
|
|
1450
1183
|
if (process.platform !== "linux")
|
|
1451
1184
|
return null;
|
|
@@ -1456,23 +1189,15 @@ function linuxProgramOf(pid) {
|
|
|
1456
1189
|
return null;
|
|
1457
1190
|
}
|
|
1458
1191
|
}
|
|
1459
|
-
/**
|
|
1460
|
-
* Whether a listed process is the agent's launch (`names`): by its listed name, or on Linux by the program it runs,
|
|
1461
|
-
* since a listing there shows the main thread's name, which Node 24 sets to "MainThread".
|
|
1462
|
-
*/
|
|
1463
1192
|
export function agentNamed(row, names, programOf = linuxProgramOf) {
|
|
1464
1193
|
if (names.some(name => row.name === name || row.name.endsWith(`/${name}`)))
|
|
1465
1194
|
return true;
|
|
1466
1195
|
const program = programOf(row.pid);
|
|
1467
1196
|
return program !== null && names.includes(program);
|
|
1468
1197
|
}
|
|
1469
|
-
/** How long each shutdown step waits: session/close's answer, then exit after stdin closes, then exit after SIGTERM. */
|
|
1470
1198
|
export const ACP_SHUTDOWN_MS = { close: 2_000, eof: 5_000, term: 5_000 };
|
|
1471
|
-
/** How long each handshake step (initialize, session/new, choosing the model) may take before the agent is stopped. */
|
|
1472
1199
|
export const ACP_HANDSHAKE_MS = 30_000;
|
|
1473
|
-
/** After the agent itself has exited, how long its pipes may stay open (a descendant holding them) before they are closed. */
|
|
1474
1200
|
const ACP_PIPES_AFTER_EXIT_MS = 5_000;
|
|
1475
|
-
/** SIGTERM the child's process group (POSIX) or the child alone; a container's own stop is the forced one, later. */
|
|
1476
1201
|
function termGroup(child) {
|
|
1477
1202
|
const pid = child.pid;
|
|
1478
1203
|
try {
|
|
@@ -1482,20 +1207,8 @@ function termGroup(child) {
|
|
|
1482
1207
|
child.kill("SIGTERM");
|
|
1483
1208
|
}
|
|
1484
1209
|
catch {
|
|
1485
|
-
// Already gone.
|
|
1486
1210
|
}
|
|
1487
1211
|
}
|
|
1488
|
-
/**
|
|
1489
|
-
* One ACP build conversation over the agent's stdio (docs/plans/acp-adapter.md § Gateway, runner, custody). The
|
|
1490
|
-
* conversation itself is acp-client.ts; this owns the process: the same contained spawn, ownership, descendant
|
|
1491
|
-
* observation, container settlement and watchdog every other runner uses, with both clocks at once.
|
|
1492
|
-
*
|
|
1493
|
-
* After the prompt is answered it shuts the agent down in bounded steps — session/close (when offered), stdin EOF,
|
|
1494
|
-
* SIGTERM to the group, then the forced kill — and returns only when the process has settled, so the gateway's
|
|
1495
|
-
* witness records the real exit. A protocol failure kills at once. A stop, from the gateway's stop watch, kills at
|
|
1496
|
-
* any step. The result's stdout is the conversation's retained record, never the agent's stream; its code is 0 only
|
|
1497
|
-
* when the prompt was answered end_turn and the agent then exited cleanly or on our own signal.
|
|
1498
|
-
*/
|
|
1499
1212
|
export function runAcpSession(file, args, options = {}) {
|
|
1500
1213
|
const acp = options.acp;
|
|
1501
1214
|
if (acp === undefined)
|
|
@@ -1522,18 +1235,14 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1522
1235
|
if (options.processGroup === true && container === null)
|
|
1523
1236
|
observeProcessTree(child, options);
|
|
1524
1237
|
const conversation = createAcpConversation({ cwd: options.cwd ?? process.cwd(), prompt: acp.prompt, model: acp.model, expect: acp.expect });
|
|
1525
|
-
// The agent's own process, as a listing names it: the launched file, or the script a pinned interpreter runs.
|
|
1526
1238
|
const agentNames = [...new Set([file, ...args.slice(0, 2)].filter(one => one.startsWith("/")).map(one => one.split("/").pop()).filter(one => one !== ""))];
|
|
1527
1239
|
let stderr = "";
|
|
1528
1240
|
let timedOut = false;
|
|
1529
1241
|
let notFound = false;
|
|
1530
1242
|
let settled = false;
|
|
1531
1243
|
let shuttingDown = false;
|
|
1532
|
-
/** The signals the plane itself sent after the prompt was answered, by its own shutdown ladder: an exit by one of
|
|
1533
|
-
* those is clean. A stop or a timeout kills through other roads and never sets these. */
|
|
1534
1244
|
let termAfterTerminal = false;
|
|
1535
1245
|
let killAfterTerminal = false;
|
|
1536
|
-
/** How the process came to end, for the record: on its own (before or after stdin closed), or by our signal. */
|
|
1537
1246
|
let endedBy = "self";
|
|
1538
1247
|
let announced = null;
|
|
1539
1248
|
const timers = [];
|
|
@@ -1545,7 +1254,7 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1545
1254
|
try {
|
|
1546
1255
|
child.stdin.write(`${one}\n`);
|
|
1547
1256
|
}
|
|
1548
|
-
catch {
|
|
1257
|
+
catch { }
|
|
1549
1258
|
}
|
|
1550
1259
|
};
|
|
1551
1260
|
const forceKill = () => {
|
|
@@ -1555,7 +1264,6 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1555
1264
|
else
|
|
1556
1265
|
child.kill("SIGKILL");
|
|
1557
1266
|
};
|
|
1558
|
-
/** Each handshake step has its own deadline, beside the run's clocks. */
|
|
1559
1267
|
let handshakePhase = null;
|
|
1560
1268
|
const armHandshake = () => {
|
|
1561
1269
|
const phase = conversation.phase();
|
|
@@ -1585,7 +1293,7 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1585
1293
|
try {
|
|
1586
1294
|
child.stdin?.end();
|
|
1587
1295
|
}
|
|
1588
|
-
catch {
|
|
1296
|
+
catch { }
|
|
1589
1297
|
endedBy = "eof";
|
|
1590
1298
|
later(ACP_SHUTDOWN_MS.eof, () => {
|
|
1591
1299
|
if (exited())
|
|
@@ -1630,13 +1338,13 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1630
1338
|
try {
|
|
1631
1339
|
options.onSessionId?.(id);
|
|
1632
1340
|
}
|
|
1633
|
-
catch {
|
|
1341
|
+
catch { }
|
|
1634
1342
|
}
|
|
1635
1343
|
for (const update of reaction.live) {
|
|
1636
1344
|
try {
|
|
1637
1345
|
options.onStreamEvent?.({ acp: update });
|
|
1638
1346
|
}
|
|
1639
|
-
catch {
|
|
1347
|
+
catch { }
|
|
1640
1348
|
}
|
|
1641
1349
|
const phase = conversation.phase();
|
|
1642
1350
|
if (phase === "failed" || phase === "ended")
|
|
@@ -1677,10 +1385,7 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1677
1385
|
liveDescendants: () => process.platform === "win32" ? null : exited() || child.pid === undefined ? [] : liveUnderAgent(child.pid, agentNames, child.spawnargs.some(arg => arg.endsWith("sandbox-launch.js"))),
|
|
1678
1386
|
});
|
|
1679
1387
|
}
|
|
1680
|
-
catch {
|
|
1681
|
-
// The moment the agent itself exits, what it left in its own group ends with it — not at "close", which a
|
|
1682
|
-
// descendant holding the agent's pipes can postpone forever; and if those pipes are still open shortly after, they
|
|
1683
|
-
// are closed, so settlement never waits on a stray. Escaped groups are the custody observer's, as for every runner.
|
|
1388
|
+
catch { }
|
|
1684
1389
|
let leftover = false;
|
|
1685
1390
|
child.on("exit", () => {
|
|
1686
1391
|
if (options.processGroup === true && container === null && child.pid !== undefined && process.platform !== "win32") {
|
|
@@ -1694,7 +1399,7 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1694
1399
|
try {
|
|
1695
1400
|
process.kill(-child.pid, "SIGKILL");
|
|
1696
1401
|
}
|
|
1697
|
-
catch {
|
|
1402
|
+
catch { }
|
|
1698
1403
|
}
|
|
1699
1404
|
later(ACP_PIPES_AFTER_EXIT_MS, () => {
|
|
1700
1405
|
if (settled)
|
|
@@ -1703,32 +1408,26 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1703
1408
|
try {
|
|
1704
1409
|
pipe?.destroy();
|
|
1705
1410
|
}
|
|
1706
|
-
catch {
|
|
1411
|
+
catch { }
|
|
1707
1412
|
}
|
|
1708
1413
|
});
|
|
1709
1414
|
});
|
|
1710
1415
|
const finish = (code, signal) => {
|
|
1711
1416
|
if (settled)
|
|
1712
1417
|
return;
|
|
1713
|
-
// The last record, even one with no newline after it, is read before anything is decided.
|
|
1714
1418
|
framing.finish();
|
|
1715
1419
|
settled = true;
|
|
1716
1420
|
for (const timer of timers)
|
|
1717
1421
|
clearTimeout(timer);
|
|
1718
1422
|
watchdog.stop();
|
|
1719
1423
|
liveProviders.delete(child);
|
|
1720
|
-
// Whatever the agent started in its own group and left running ends with it (a group id can't be reused while any
|
|
1721
|
-
// member lives, so this reaches only what it left). Escaped groups are the custody observer's, as for every runner.
|
|
1722
1424
|
const terminal = conversation.terminal();
|
|
1723
1425
|
const answered = terminal !== null && "stopReason" in terminal && terminal.stopReason === "end_turn" && conversation.failure() === null;
|
|
1724
|
-
// A clean exit after the answer, or an exit by the plane's own post-answer signal (its shutdown ladder's SIGTERM,
|
|
1725
|
-
// then SIGKILL), is success; anything else — a stop, a timeout, another signal — is its code.
|
|
1726
1426
|
const ownSignal = (termAfterTerminal && (signal === "SIGTERM" || code === 143)) || (killAfterTerminal && (signal === "SIGKILL" || code === 137));
|
|
1727
1427
|
const exitCode = answered && !timedOut && (code === 0 || ownSignal) ? 0 : (code ?? 1);
|
|
1728
1428
|
const settlement = container === null ? Promise.resolve(null) : settleContainer(container, options);
|
|
1729
1429
|
void settlement.then(empty => resolve({
|
|
1730
1430
|
code: notFound ? NOT_FOUND_CODE : timedOut ? TIMEOUT_CODE : attachFailure !== null || empty === false ? CONTAINMENT_REFUSED_CODE : exitCode,
|
|
1731
|
-
// The runner's own account of the ending rides last: a type no agent can emit.
|
|
1732
1431
|
stdout: `${conversation.retained()}${JSON.stringify({ type: "acp.exit", how: endedBy, leftover: leftover || empty === false, timedOut })}\n`,
|
|
1733
1432
|
stderr: empty === false ? `${stderr}\nNative process containment could not prove all descendants exited.`.trim() : attachFailure !== null && stderr === "" ? attachFailure : stderr,
|
|
1734
1433
|
timedOut,
|
|
@@ -1747,12 +1446,6 @@ export function runAcpSession(file, args, options = {}) {
|
|
|
1747
1446
|
});
|
|
1748
1447
|
}
|
|
1749
1448
|
const TRUNCATION_MARKER = "…[truncated]";
|
|
1750
|
-
/**
|
|
1751
|
-
* One serialized synthetic line, guaranteed ≤ JSONL_LINE_CAP in UTF-8
|
|
1752
|
-
* bytes — the trim loop measures the COMPLETE serialized line (escaping
|
|
1753
|
-
* and marker included), so pathological escaping cannot smuggle it past
|
|
1754
|
-
* the cap (round-3 f9).
|
|
1755
|
-
*/
|
|
1756
1449
|
function syntheticMessageLine(content, truncated) {
|
|
1757
1450
|
let body = content;
|
|
1758
1451
|
let marked = truncated;
|
|
@@ -1764,42 +1457,11 @@ function syntheticMessageLine(content, truncated) {
|
|
|
1764
1457
|
if (over <= 0)
|
|
1765
1458
|
return line;
|
|
1766
1459
|
marked = true;
|
|
1767
|
-
// Cut at least the overage in UTF-16 units; the loop re-measures.
|
|
1768
1460
|
const cut = Math.max(1, over);
|
|
1769
1461
|
body = body.slice(0, Math.max(0, body.length - cut));
|
|
1770
1462
|
}
|
|
1771
1463
|
}
|
|
1772
|
-
/**
|
|
1773
|
-
* The streaming transport for claude's stream-json dialect (arc 1).
|
|
1774
|
-
*
|
|
1775
|
-
* Same rationale as `runStreamJsonl`: a long agent session writes far more
|
|
1776
|
-
* event stream than any fixed buffer should hold, and the line that matters
|
|
1777
|
-
* — the terminal result carrying session, usage, and dollars — arrives
|
|
1778
|
-
* LAST. The 8 MiB buffered kill would destroy exactly that accounting
|
|
1779
|
-
* envelope, so stdout is consumed incrementally and only the load-bearing
|
|
1780
|
-
* lines are retained:
|
|
1781
|
-
*
|
|
1782
|
-
* - a bounded identity witness for `system`/`init`: the first init signal,
|
|
1783
|
-
* the first usable session id, and one conflicting id
|
|
1784
|
-
* - the FIRST primary `result` event, selected STRUCTURALLY (finding 10;
|
|
1785
|
-
* stream-scope.ts `primaryResultEvent`): top-level, and origin absent or
|
|
1786
|
-
* `origin.kind === "human"` — an allowlist, so a subagent's or background
|
|
1787
|
-
* task's result (or any future origin kind) can never be mistaken for the
|
|
1788
|
-
* main query's accounting. Later results are dropped. A subagent's init
|
|
1789
|
-
* never enters the identity witness.
|
|
1790
|
-
*
|
|
1791
|
-
* The result's stdout is the retained lines joined — a synthetic, bounded
|
|
1792
|
-
* envelope `claudeParse` reads exactly like test fixtures. Timeout,
|
|
1793
|
-
* process-group, kill, and spawn semantics match `runStreamJsonl`.
|
|
1794
|
-
*/
|
|
1795
|
-
/** The usage fields Claude reports per message (not per session): a live session's account adds them up. */
|
|
1796
1464
|
const LIVE_SUMMED_USAGE = ["input_tokens", "output_tokens", "cache_creation_input_tokens", "cache_read_input_tokens"];
|
|
1797
|
-
/**
|
|
1798
|
-
* A live session's account so far (one main result per turn, checked on Claude Code 2.1.290): the latest result's
|
|
1799
|
-
* session, ending, words and cost — `total_cost_usd` is already the session's running total — with the usage token
|
|
1800
|
-
* fields and `num_turns`, which count only their own message, added up across every main result. A field that is not
|
|
1801
|
-
* a non-negative number adds nothing.
|
|
1802
|
-
*/
|
|
1803
1465
|
export function cumulativeLiveResult(previous, latest) {
|
|
1804
1466
|
const count = (value) => typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
|
|
1805
1467
|
const usageOf = (event) => event["usage"] !== null && typeof event["usage"] === "object" && !Array.isArray(event["usage"]) ? event["usage"] : null;
|
|
@@ -1817,9 +1479,7 @@ export function cumulativeLiveResult(previous, latest) {
|
|
|
1817
1479
|
...(turnsBefore === null && turnsNow === null ? {} : { num_turns: (turnsBefore ?? 0) + (turnsNow ?? 0) }),
|
|
1818
1480
|
};
|
|
1819
1481
|
}
|
|
1820
|
-
/** This transport can keep stdin open for a live session (RunOptions.liveInput). */
|
|
1821
1482
|
export const STREAM_INPUT = Symbol.for("toolroll.streamInput");
|
|
1822
|
-
/** Whether a runner declares it keeps stdin open for a live session; an injected runner opts in by carrying the mark. */
|
|
1823
1483
|
export const streamsInput = (runner) => typeof runner === "function" && runner[STREAM_INPUT] === true;
|
|
1824
1484
|
export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
1825
1485
|
const childEnv = resolveChildEnv(options);
|
|
@@ -1847,17 +1507,12 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1847
1507
|
let initLine = null;
|
|
1848
1508
|
let initIdentityLine = null;
|
|
1849
1509
|
let conflictingInitLine = null;
|
|
1850
|
-
/** v140: the first init's model, and the first top-level init naming another (the parser reads them as a conflict:
|
|
1851
|
-
* unknown, never one of them). Kept even within one session id. */
|
|
1852
1510
|
let initModel = null;
|
|
1853
1511
|
let initModelLine = null;
|
|
1854
1512
|
let modelConflictLine = null;
|
|
1855
1513
|
let initSessionId = null;
|
|
1856
1514
|
let resultLine = null;
|
|
1857
1515
|
let resultOverflowed = false;
|
|
1858
|
-
// The run's account: the first main result, or for a live session every main result added up (each oversized
|
|
1859
|
-
// one's scanned cost and usage too). Its cost is the highest running total seen; costUnknown when the latest main
|
|
1860
|
-
// result's cost could not be read (an oversized one), which only a later readable result can clear.
|
|
1861
1516
|
let account = null;
|
|
1862
1517
|
let costUnknown = false;
|
|
1863
1518
|
let overflowLine = null;
|
|
@@ -1865,8 +1520,6 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1865
1520
|
let stderr = "";
|
|
1866
1521
|
let timedOut = false;
|
|
1867
1522
|
let notFound = false;
|
|
1868
|
-
// Latch BEFORE invoking (finding 13): a throwing listener has already
|
|
1869
|
-
// consumed its one firing, and the stream goes on unharmed.
|
|
1870
1523
|
const fireReceipt = () => {
|
|
1871
1524
|
if (receiptFired || options.onReceipt === undefined) {
|
|
1872
1525
|
receiptFired = true;
|
|
@@ -1877,8 +1530,6 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1877
1530
|
options.onReceipt();
|
|
1878
1531
|
}
|
|
1879
1532
|
catch {
|
|
1880
|
-
// A receipt that cannot be recorded must not alter the run; the
|
|
1881
|
-
// note stays honestly unreceipted and re-attaches later.
|
|
1882
1533
|
}
|
|
1883
1534
|
};
|
|
1884
1535
|
const tally = (event, line) => {
|
|
@@ -1886,7 +1537,6 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1886
1537
|
account = account === null || live === null ? event : { ...(line === null ? account : {}), ...cumulativeLiveResult(account, event) };
|
|
1887
1538
|
const cost = event["total_cost_usd"];
|
|
1888
1539
|
const readable = typeof cost === "number" && Number.isFinite(cost) && cost >= 0;
|
|
1889
|
-
// The running total only grows: an earlier, higher total stands (a session's cost is never given back).
|
|
1890
1540
|
const prior = before?.["total_cost_usd"];
|
|
1891
1541
|
if (readable && typeof prior === "number" && prior > cost)
|
|
1892
1542
|
account = { ...account, total_cost_usd: prior };
|
|
@@ -1903,12 +1553,6 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1903
1553
|
};
|
|
1904
1554
|
const keep = (framed) => {
|
|
1905
1555
|
if (framed.overflowed) {
|
|
1906
|
-
// An oversized result is the first primary candidate and therefore
|
|
1907
|
-
// closes the slot fail-closed; an oversized non-result is merely a
|
|
1908
|
-
// fallback that a later parseable primary result can supersede.
|
|
1909
|
-
// Claude's parser trusts the first primary result. When a line is
|
|
1910
|
-
// too large to classify, reserve that first slot fail-closed rather
|
|
1911
|
-
// than let a later small result hide emitted bytes we discarded.
|
|
1912
1556
|
const type = leadingJsonObjectType(framed.prefix);
|
|
1913
1557
|
if (type !== null && type !== "result") {
|
|
1914
1558
|
if (type !== "system")
|
|
@@ -1916,18 +1560,10 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1916
1560
|
const subtype = leadingClaudeSystemSubtype(framed.prefix);
|
|
1917
1561
|
if (subtype !== null && subtype !== "init")
|
|
1918
1562
|
return;
|
|
1919
|
-
// An init too large to inspect may conceal a conflicting session
|
|
1920
|
-
// identity. Latch it independently from the primary result so the
|
|
1921
|
-
// same event set fails regardless of whether it arrived before or
|
|
1922
|
-
// after the terminal, while a normal terminal can still account
|
|
1923
|
-
// for the turn's usage.
|
|
1924
1563
|
if (overflowLine === null)
|
|
1925
1564
|
overflowLine = claudeOverflowLine(framed);
|
|
1926
1565
|
return;
|
|
1927
1566
|
}
|
|
1928
|
-
// Nothing inside an oversized result is trusted: the agent shapes its bytes (tool inputs in permission_denials
|
|
1929
|
-
// are real JSON objects), so a planted total_cost_usd or origin could read as genuine. It counts as the main
|
|
1930
|
-
// result with an unknown cost, charged at the run's cap, and a live session's input closes.
|
|
1931
1567
|
const scanned = { primary: true, account: {} };
|
|
1932
1568
|
if (live !== null || resultLine === null)
|
|
1933
1569
|
tally(scanned.account, null);
|
|
@@ -1937,8 +1573,6 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1937
1573
|
}
|
|
1938
1574
|
else if (overflowLine === null)
|
|
1939
1575
|
overflowLine = claudeOverflowLine(framed);
|
|
1940
|
-
// A live session whose main result was too large to read cannot be steered safely: close its input, so the
|
|
1941
|
-
// process ends instead of running further turns nobody can account for.
|
|
1942
1576
|
if (live !== null && scanned.primary)
|
|
1943
1577
|
live.close("settled");
|
|
1944
1578
|
return;
|
|
@@ -1949,14 +1583,11 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1949
1583
|
event = JSON.parse(line);
|
|
1950
1584
|
}
|
|
1951
1585
|
catch {
|
|
1952
|
-
return;
|
|
1586
|
+
return;
|
|
1953
1587
|
}
|
|
1954
1588
|
if (event === null || typeof event !== "object")
|
|
1955
1589
|
return;
|
|
1956
1590
|
const type = String(event["type"] ?? "");
|
|
1957
|
-
// A subagent's init, words and result are not the session's (stream-scope.ts): they never witness its identity,
|
|
1958
|
-
// name its session, fire its receipt or stand as its result. They still reach the observers below, which filter
|
|
1959
|
-
// for themselves.
|
|
1960
1591
|
if (type === "system" && String(event["subtype"] ?? "") === "init" && topLevelEvent(event)) {
|
|
1961
1592
|
if (initLine === null)
|
|
1962
1593
|
initLine = line;
|
|
@@ -1986,30 +1617,19 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
1986
1617
|
options.onSessionId(id);
|
|
1987
1618
|
}
|
|
1988
1619
|
catch {
|
|
1989
|
-
// A registry that cannot be written must not kill the turn.
|
|
1990
1620
|
}
|
|
1991
1621
|
}
|
|
1992
1622
|
}
|
|
1993
1623
|
}
|
|
1994
1624
|
else if (type === "assistant") {
|
|
1995
|
-
// Top-level only (finding 11): assistant events carry no origin;
|
|
1996
|
-
// parent_tool_use_id is the correlation field, and a subagent's
|
|
1997
|
-
// words prove nothing about the main prompt.
|
|
1998
1625
|
if (topLevelEvent(event))
|
|
1999
1626
|
fireReceipt();
|
|
2000
1627
|
}
|
|
2001
1628
|
else if (type === "rate_limit_event") {
|
|
2002
|
-
// v105: the plan's usage windows, as Claude says them each turn (the Tasks page's limits).
|
|
2003
1629
|
noteLimits(claudeLimitsOf(event));
|
|
2004
1630
|
}
|
|
2005
1631
|
else if (type === "result" && (resultLine === null || live !== null) && primaryResultEvent(event)) {
|
|
2006
|
-
// A live session ends a turn with a result each time: the run's account is the last one, with every main
|
|
2007
|
-
// result's usage and turns added up (account). After an oversized main result the retained result stays the
|
|
2008
|
-
// fail-closed overflow, but later results still count toward its cost.
|
|
2009
1632
|
tally(event, line);
|
|
2010
|
-
// Fallback receipt (finding 11): a SUCCESSFUL main-query completion
|
|
2011
|
-
// entails the prompt ran even if the stream elided assistant
|
|
2012
|
-
// events. Error results never fire — startup death is not delivery.
|
|
2013
1633
|
if (event["is_error"] !== true && String(event["subtype"] ?? "") === "success")
|
|
2014
1634
|
fireReceipt();
|
|
2015
1635
|
}
|
|
@@ -2018,15 +1638,11 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
2018
1638
|
options.onStreamEvent(event);
|
|
2019
1639
|
}
|
|
2020
1640
|
catch {
|
|
2021
|
-
// Observational only: a broken listener never touches the run.
|
|
2022
1641
|
}
|
|
2023
1642
|
}
|
|
2024
|
-
// After the run's own bookkeeping: the session may close stdin on this event.
|
|
2025
1643
|
if (live !== null)
|
|
2026
1644
|
live.observe(event);
|
|
2027
1645
|
};
|
|
2028
|
-
// The retained main result as the run's account: an oversized one stays the fail-closed overflow but carries the
|
|
2029
|
-
// cost and usage read from it and from later results; a cost that could not be read says so (CLAUDE_COST_UNKNOWN).
|
|
2030
1646
|
const accountedResultLine = () => {
|
|
2031
1647
|
if (resultLine === null || (!resultOverflowed && !costUnknown))
|
|
2032
1648
|
return resultLine;
|
|
@@ -2088,7 +1704,6 @@ export function runClaudeStreamJsonl(file, args, options = {}) {
|
|
|
2088
1704
|
child.on("close", code => finish(code));
|
|
2089
1705
|
if (live !== null && child.stdin !== null) {
|
|
2090
1706
|
const input = child.stdin;
|
|
2091
|
-
// A pipe the child closed (it exited) ends live input; the run settles on the process, as always.
|
|
2092
1707
|
input.on("error", () => live.detach("input-failed"));
|
|
2093
1708
|
live.attach({ write: line => { input.write(line, "utf8"); }, end: () => { input.end(); } });
|
|
2094
1709
|
}
|