toolroll 0.9.103 → 0.9.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/README.md +27 -27
- package/dist/accent-colors.js +0 -29
- package/dist/acp-agents.js +0 -3
- package/dist/acp-attest.js +0 -30
- package/dist/acp-check.js +3 -70
- package/dist/acp-client.js +3 -94
- package/dist/acp-inspect.js +1 -20
- package/dist/action-ledger.js +0 -8
- package/dist/activity-line.js +0 -14
- package/dist/actor.js +0 -15
- package/dist/advanced-schema.js +12 -0
- package/dist/advanced-view.js +26 -0
- package/dist/advanced.js +61 -0
- package/dist/agent-board.js +0 -117
- package/dist/agent-fence.js +11 -367
- package/dist/agent-onboard.js +12 -50
- package/dist/agent-pulse.js +5 -38
- package/dist/agent-state-words.js +0 -8
- package/dist/agent-state.js +1 -45
- package/dist/agent-turns.js +3 -17
- package/dist/agentconfig.js +1 -99
- package/dist/agents-board.js +0 -60
- package/dist/agents-live.js +1 -8
- package/dist/api-tokens.js +0 -27
- package/dist/approval-authority.js +0 -59
- package/dist/approval-password.js +0 -10
- package/dist/approval-policy.js +0 -29
- package/dist/approval-rules-ui.js +0 -9
- package/dist/assignment-adapters.js +0 -14
- package/dist/assignment-brief.js +1 -17
- package/dist/assignment-delivery.js +0 -22
- package/dist/assignment-presentation.js +0 -14
- package/dist/assignment-status.js +1 -30
- package/dist/assignment-ui.js +0 -12
- package/dist/assignment.js +117 -103
- package/dist/attest.js +0 -38
- package/dist/audit-cli.js +0 -9
- package/dist/backend.js +0 -59
- package/dist/backup-ui.js +0 -12
- package/dist/backup.js +8 -61
- package/dist/batch-checks.js +0 -20
- package/dist/batch-policy.js +0 -4
- package/dist/beads.js +0 -48
- package/dist/bin.js +0 -8
- package/dist/board.js +1 -36
- package/dist/boot-identity.js +0 -42
- package/dist/bounded-spawn.js +4 -28
- package/dist/brand-mark.js +0 -21
- package/dist/brief-fence.js +0 -16
- package/dist/browser/terminal.css +1 -1
- package/dist/browser/terminal.js +16 -16
- package/dist/browser/workspace.css +2 -2
- package/dist/browser/workspace.js +26 -26
- package/dist/browser-crew.js +0 -8
- package/dist/browser-shell.js +2 -15
- package/dist/browser-workspace.js +6 -30
- package/dist/budget-alerts.js +1 -4
- package/dist/build-review.js +2 -50
- package/dist/builder-restart.js +0 -13
- package/dist/builder.js +21 -1035
- package/dist/canonical-json.js +0 -12
- package/dist/capscan.js +1 -32
- package/dist/card-catalog.js +0 -12
- package/dist/card-cli.js +0 -1
- package/dist/card-render.js +0 -25
- package/dist/card-sources.js +0 -10
- package/dist/chat-acceptance.js +0 -7
- package/dist/chat-actions.js +5 -190
- package/dist/chat-admission.js +0 -7
- package/dist/chat-approval.js +0 -25
- package/dist/chat-ask.js +0 -17
- package/dist/chat-card-part.js +0 -3
- package/dist/chat-card.js +0 -6
- package/dist/chat-channel.js +2 -83
- package/dist/chat-continuity.js +0 -31
- package/dist/chat-controls.js +0 -7
- package/dist/chat-core.js +0 -55
- package/dist/chat-decide.js +2 -153
- package/dist/chat-delivery-state.js +0 -49
- package/dist/chat-delivery.js +2 -143
- package/dist/chat-display.js +0 -2
- package/dist/chat-evidence.js +0 -65
- package/dist/chat-flow.js +0 -72
- package/dist/chat-follow.js +0 -13
- package/dist/chat-inbox.js +0 -34
- package/dist/chat-live-schema.js +0 -14
- package/dist/chat-live.js +2 -87
- package/dist/chat-message-states.js +13 -40
- package/dist/chat-messages.js +0 -153
- package/dist/chat-migration.js +0 -57
- package/dist/chat-polish.js +0 -7
- package/dist/chat-quiet.js +0 -37
- package/dist/chat-review.js +0 -4
- package/dist/chat-rooms.js +0 -22
- package/dist/chat-settings-page.js +0 -4
- package/dist/chat-task-actions.js +0 -7
- package/dist/chat-terms.js +0 -21
- package/dist/chat-voice.js +0 -38
- package/dist/chat-warmth.js +1 -3
- package/dist/check-access.js +0 -30
- package/dist/check-facts.js +2 -62
- package/dist/check-failure.js +0 -98
- package/dist/check-levels-ui.js +4 -10
- package/dist/check-levels.js +3 -35
- package/dist/check-load.js +1 -49
- package/dist/check-only-standing.js +0 -6
- package/dist/check-only.js +0 -22
- package/dist/check-progress.js +0 -32
- package/dist/check-repair.js +2 -35
- package/dist/check-report.js +1 -108
- package/dist/check-stamp.js +0 -20
- package/dist/checkout-cleanup.js +0 -84
- package/dist/checkout-proof.js +1 -13
- package/dist/child-database.js +0 -3
- package/dist/claim.js +4 -508
- package/dist/claude-print.js +0 -10
- package/dist/cli-fast.js +0 -8
- package/dist/cli-help.js +90 -78
- package/dist/cli-http.js +0 -10
- package/dist/cli.js +26 -241
- package/dist/code-extract.js +0 -6
- package/dist/code-map-acts.js +0 -7
- package/dist/code-map-admission.js +2 -26
- package/dist/code-map-build.js +3 -24
- package/dist/code-map-cli.js +0 -4
- package/dist/code-map-main.js +0 -6
- package/dist/code-map-read.js +0 -12
- package/dist/code-map-report.js +0 -9
- package/dist/code-map-shape.js +0 -19
- package/dist/code-map-store.js +0 -26
- package/dist/codex-limits.js +1 -17
- package/dist/coding-context.js +0 -10
- package/dist/coding-handoff.js +0 -14
- package/dist/coding-provider.js +0 -39
- package/dist/coding-shipping-ui.js +0 -1
- package/dist/coding-ui.js +0 -1
- package/dist/coding-update.js +1 -18
- package/dist/coding-workspace.js +0 -27
- package/dist/commit-extract.js +0 -83
- package/dist/connect-cli.js +0 -19
- package/dist/console-chrome.js +1 -34
- package/dist/console-instance.js +2 -91
- package/dist/container-state.js +0 -4
- package/dist/containment.js +2 -105
- package/dist/contract-changes.js +0 -6
- package/dist/contracts/acceptance-terms.js +0 -7
- package/dist/contracts/chat-actions.js +0 -46
- package/dist/contracts/chat-callback-rows.js +0 -8
- package/dist/contracts/chat-card.js +0 -14
- package/dist/contracts/chat-content.js +0 -55
- package/dist/contracts/chat-tables.js +0 -7
- package/dist/contracts/cli.js +0 -59
- package/dist/contracts/coding-activity.js +0 -15
- package/dist/contracts/coding-context.js +0 -15
- package/dist/contracts/coding-handoff.js +0 -11
- package/dist/contracts/coding-workspace.js +0 -14
- package/dist/contracts/console-api.js +3 -54
- package/dist/contracts/contract-test.js +0 -14
- package/dist/contracts/contract.js +0 -48
- package/dist/contracts/decision.js +0 -20
- package/dist/contracts/diff-stat.js +0 -16
- package/dist/contracts/discord-callback.js +0 -9
- package/dist/contracts/flow-card.js +0 -18
- package/dist/contracts/flow-propose.js +0 -8
- package/dist/contracts/flow-send.js +0 -31
- package/dist/contracts/flow.js +0 -112
- package/dist/contracts/gateway-tools.js +0 -22
- package/dist/contracts/handoff.js +0 -22
- package/dist/contracts/integration-metadata.js +0 -39
- package/dist/contracts/lead-context.js +0 -14
- package/dist/contracts/lead-tools.js +0 -49
- package/dist/contracts/mcp-oauth.js +0 -12
- package/dist/contracts/memory-pass.js +0 -21
- package/dist/contracts/model-catalog.js +0 -9
- package/dist/contracts/observation-request.js +0 -11
- package/dist/contracts/plan.js +0 -16
- package/dist/contracts/project-knowledge.js +0 -26
- package/dist/contracts/project-memory.js +0 -16
- package/dist/contracts/project-skills.js +0 -31
- package/dist/contracts/proof.js +0 -23
- package/dist/contracts/provider.js +0 -9
- package/dist/contracts/recipes.js +0 -16
- package/dist/contracts/release-check.js +0 -61
- package/dist/contracts/release-terms.js +0 -27
- package/dist/contracts/retention.js +0 -12
- package/dist/contracts/review-findings.js +0 -13
- package/dist/contracts/route-results.js +0 -15
- package/dist/contracts/route.js +0 -33
- package/dist/contracts/scope.js +0 -29
- package/dist/contracts/scout-report.js +0 -34
- package/dist/contracts/slack-callback.js +0 -11
- package/dist/contracts/sort-answer.js +0 -24
- package/dist/contracts/stage-output.js +0 -46
- package/dist/contracts/storage.js +0 -8
- package/dist/contracts/store-json.js +0 -41
- package/dist/contracts/subagent-turn.js +0 -23
- package/dist/contracts/task-sizing.js +0 -10
- package/dist/contracts/teams-callback.js +0 -7
- package/dist/contracts/telegram-callback.js +0 -27
- package/dist/contracts/trigger-payloads.js +0 -41
- package/dist/contracts/update-journal.js +0 -47
- package/dist/contracts/verification-receipt.js +0 -36
- package/dist/contracts/verification-view.js +0 -15
- package/dist/contracts/youiyoux-request.js +0 -26
- package/dist/control-setup.js +0 -7
- package/dist/control-ui.js +0 -3
- package/dist/controller-service.js +0 -4
- package/dist/controller-supervisor.js +0 -15
- package/dist/converse.js +3 -129
- package/dist/coordinator-proposals.js +1 -6
- package/dist/coordinator.js +0 -65
- package/dist/credentials-ui.js +0 -6
- package/dist/daemon.js +0 -137
- package/dist/database-reclaim.js +0 -3
- package/dist/decision.js +0 -78
- package/dist/demo-chat.js +4 -15
- package/dist/demo-sign-in.js +77 -0
- package/dist/demo.js +5 -194
- package/dist/deploy-gate.js +0 -20
- package/dist/deploy-lock.js +0 -4
- package/dist/deploy-phase.js +0 -22
- package/dist/deploy-rescue.js +0 -21
- package/dist/deprecations.js +0 -12
- package/dist/design/kit.css +9 -6
- package/dist/design/kit.js +2 -33
- package/dist/desktop-access.js +0 -9
- package/dist/desktop-bundle.js +1 -3
- package/dist/desktop-host.js +0 -34
- package/dist/desktop-update-gate.js +0 -8
- package/dist/desktop-update-recovery.js +1 -18
- package/dist/desktop-update.js +2 -48
- package/dist/digest-times.js +0 -2
- package/dist/disclosure.js +0 -5
- package/dist/discord-api.js +0 -6
- package/dist/discord-chat.js +0 -31
- package/dist/discord.js +0 -7
- package/dist/discover.js +0 -50
- package/dist/dispatch.js +61 -60
- package/dist/dispose.js +0 -208
- package/dist/doctor.js +0 -48
- package/dist/easy-start-args.js +7 -7
- package/dist/easy-start.js +32 -45
- package/dist/egress.js +1 -63
- package/dist/email-settings.js +0 -8
- package/dist/envelope.js +50 -86
- package/dist/eval-gate.js +1 -37
- package/dist/eval-hooks.js +0 -120
- package/dist/eval-oracle-main.js +0 -7
- package/dist/eval-oracle.js +3 -42
- package/dist/eval-world.js +1 -23
- package/dist/evals.js +6 -134
- package/dist/evidence-pack.js +0 -29
- package/dist/evidence-pair.js +0 -17
- package/dist/evidence.js +4 -280
- package/dist/exec.js +19 -404
- package/dist/exhaustion.js +0 -30
- package/dist/export-ui.js +0 -7
- package/dist/export.js +1 -38
- package/dist/failing-first.js +0 -6
- package/dist/fallback-schema.js +0 -5
- package/dist/fallback.js +0 -81
- package/dist/fast-start.js +0 -97
- package/dist/fast-terms.js +0 -3
- package/dist/fenced-check-coverage.js +0 -11
- package/dist/findings.js +1 -63
- package/dist/first-run.js +4 -57
- package/dist/first-tasks-child.js +0 -5
- package/dist/flaky-ci.js +1 -24
- package/dist/flaky-cli.js +0 -4
- package/dist/flaky.js +0 -43
- package/dist/fleet-schema.js +0 -11
- package/dist/flow-actions.js +0 -31
- package/dist/flow-browser.js +0 -42
- package/dist/flow-cadence.js +1 -24
- package/dist/flow-card-task.js +0 -11
- package/dist/flow-changed.js +0 -16
- package/dist/flow-code.js +1 -45
- package/dist/flow-draft.js +0 -17
- package/dist/flow-engine.js +2 -76
- package/dist/flow-gallery-ui.js +0 -28
- package/dist/flow-gallery.js +0 -54
- package/dist/flow-insights.js +0 -12
- package/dist/flow-items.js +0 -27
- package/dist/flow-live.js +0 -31
- package/dist/flow-people.js +0 -14
- package/dist/flow-pull-request.js +0 -32
- package/dist/flow-replies.js +0 -9
- package/dist/flow-result-card.js +0 -8
- package/dist/flow-schedule.js +0 -74
- package/dist/flow-scripts.js +0 -13
- package/dist/flow-secrets.js +0 -10
- package/dist/flow-send.js +0 -45
- package/dist/flow-share.js +0 -60
- package/dist/flow-sort.js +1 -24
- package/dist/flow-starters-ui.js +0 -2
- package/dist/flow-starters.js +0 -13
- package/dist/flow-steps.js +0 -80
- package/dist/flow-triggers.js +2 -256
- package/dist/flow-unattended-words.js +0 -13
- package/dist/flow-unattended.js +2 -115
- package/dist/flows-cli.js +2 -36
- package/dist/flows-ui.js +0 -51
- package/dist/flows.js +0 -158
- package/dist/folder-gate.js +0 -21
- package/dist/folder-look.js +0 -42
- package/dist/follow-through-brief.js +0 -6
- package/dist/follow-through-cli.js +0 -5
- package/dist/fonts.js +0 -13
- package/dist/gaps.js +0 -20
- package/dist/gate-failure.js +0 -7
- package/dist/git-floor.js +0 -12
- package/dist/git-incident.js +2 -38
- package/dist/git-views.js +0 -24
- package/dist/git.js +0 -31
- package/dist/github-import.js +0 -22
- package/dist/github-jobs.js +0 -12
- package/dist/google-mail.js +2 -27
- package/dist/grant.js +0 -110
- package/dist/graph.js +0 -108
- package/dist/guides.js +4 -15
- package/dist/handover-note.js +0 -12
- package/dist/health-cli.js +0 -2
- package/dist/home-groups.js +0 -15
- package/dist/html.js +0 -54
- package/dist/install-method.js +0 -12
- package/dist/integrations-ui.js +0 -15
- package/dist/integrations.js +7 -50
- package/dist/invoke.js +1 -381
- package/dist/is-record.js +0 -1
- package/dist/issues.js +0 -48
- package/dist/jsonl-discriminants.js +0 -6
- package/dist/keymap.js +2 -16
- package/dist/keys.js +0 -56
- package/dist/kits-ui.js +0 -3
- package/dist/kits.js +1 -24
- package/dist/knowledge-cli.js +0 -4
- package/dist/knowledge-ui.js +0 -8
- package/dist/landed-cleanup.js +0 -119
- package/dist/laptop-background.js +0 -85
- package/dist/laptop-service.js +0 -67
- package/dist/latency-timeline.js +2 -23
- package/dist/lead-about.js +0 -7
- package/dist/lead-answer-eval.js +0 -39
- package/dist/lead-capabilities.js +0 -19
- package/dist/lead-cli-live.js +0 -22
- package/dist/lead-cli.js +0 -27
- package/dist/lead-commitments.js +1 -27
- package/dist/lead-context.js +2 -42
- package/dist/lead-contract.js +0 -8
- package/dist/lead-doors.js +0 -105
- package/dist/lead-follow.js +0 -41
- package/dist/lead-identity.js +1 -4
- package/dist/lead-latency-schema.js +0 -13
- package/dist/lead-people.js +3 -18
- package/dist/lead-progress.js +0 -12
- package/dist/lead-queue-runtime.js +0 -26
- package/dist/lead-queue.js +0 -35
- package/dist/lead-route.js +0 -33
- package/dist/lead-status.js +0 -37
- package/dist/lead-sweep.js +0 -18
- package/dist/lead-tools.js +0 -160
- package/dist/lead-voice.js +0 -54
- package/dist/lead.js +2 -105
- package/dist/learning-child.js +0 -6
- package/dist/learning-look.js +0 -14
- package/dist/ledger-chain.js +0 -34
- package/dist/ledger-csv.js +0 -2
- package/dist/ledger-view.js +0 -3
- package/dist/lesson-notes.js +0 -56
- package/dist/limits-ui.js +0 -14
- package/dist/link.js +0 -79
- package/dist/live-backup.js +3 -33
- package/dist/live-bus.js +7 -81
- package/dist/live-children-read.js +4 -47
- package/dist/live-children.js +4 -44
- package/dist/live-detail.js +0 -17
- package/dist/live-input.js +5 -68
- package/dist/live-main-read.js +1 -14
- package/dist/live-notes.js +0 -12
- package/dist/live-open.js +1 -23
- package/dist/live-records.js +4 -151
- package/dist/live-reply.js +1 -51
- package/dist/live-terminal.js +12 -111
- package/dist/live.js +4 -130
- package/dist/local-owner-acts.js +168 -0
- package/dist/local-owner.js +15 -80
- package/dist/log.js +0 -8
- package/dist/login-secrets.js +2 -38
- package/dist/machine-check.js +0 -2
- package/dist/machine-identity.js +1 -46
- package/dist/mailbox.js +0 -30
- package/dist/maintenance.js +1 -3
- package/dist/mcp-connect.js +0 -88
- package/dist/mcp-core.js +0 -45
- package/dist/mcp-http.js +0 -13
- package/dist/mcp-oauth.js +0 -37
- package/dist/mcp-person.js +0 -11
- package/dist/mcp.js +3 -73
- package/dist/memory-cli.js +0 -3
- package/dist/memory-pass.js +0 -53
- package/dist/memory-tidy.js +0 -55
- package/dist/memory-use.js +2 -24
- package/dist/merge-checklist.js +21 -29
- package/dist/metrics.js +0 -10
- package/dist/mobile-viewport.js +0 -6
- package/dist/model-catalog.js +1 -33
- package/dist/model-choices.js +9 -84
- package/dist/model-names.js +0 -9
- package/dist/models-cli.js +0 -13
- package/dist/models-ui.js +0 -17
- package/dist/modes.js +0 -35
- package/dist/monitoring-settings.js +2 -27
- package/dist/monitoring-ui.js +2 -14
- package/dist/monitoring.js +2 -38
- package/dist/names.js +0 -39
- package/dist/needs-you.js +7 -70
- package/dist/never-index.js +0 -9
- package/dist/nightly-check.js +0 -74
- package/dist/nightly-github.js +0 -168
- package/dist/notification-delivery.js +0 -3
- package/dist/notification-rows.js +0 -17
- package/dist/oauth-run-token.js +1 -37
- package/dist/observations.js +0 -16
- package/dist/oidc.js +1 -20
- package/dist/onboard.js +4 -57
- package/dist/one-step-chat-schema.js +0 -15
- package/dist/openrouter-models.js +0 -6
- package/dist/operate-remote-arguments.js +2 -17
- package/dist/operate-remote.js +0 -33
- package/dist/operate.js +280 -2304
- package/dist/orphan-sweep.js +3 -37
- package/dist/page-work-contract.js +0 -3
- package/dist/password-bearer.js +1 -11
- package/dist/passwordless.js +0 -3
- package/dist/peek-cli.js +0 -46
- package/dist/peek.js +2 -61
- package/dist/people-audit-ui.js +0 -6
- package/dist/person-proof.js +0 -6
- package/dist/phase-routing.js +8 -183
- package/dist/plain-schema.js +0 -14
- package/dist/plain-words.js +18 -12
- package/dist/plan-auto.js +3 -18
- package/dist/plan-login.js +0 -16
- package/dist/plan.js +0 -68
- package/dist/plane-review.js +0 -56
- package/dist/planner-source.js +0 -96
- package/dist/planner.js +0 -117
- package/dist/policy-ui.js +0 -8
- package/dist/policy.js +0 -47
- package/dist/prepared-evidence.js +0 -5
- package/dist/principal.js +0 -29
- package/dist/probe.js +0 -30
- package/dist/process-custody.js +0 -15
- package/dist/process-liveness.js +0 -32
- package/dist/process-tree.js +3 -29
- package/dist/project-access.js +0 -10
- package/dist/project-admission.js +1 -41
- package/dist/project-cli.js +0 -6
- package/dist/project-concurrency.js +0 -35
- package/dist/project-delete-ui.js +4 -29
- package/dist/project-delete.js +1 -73
- package/dist/project-demo.js +0 -13
- package/dist/project-file.js +0 -2
- package/dist/project-identity.js +0 -41
- package/dist/project-knowledge.js +0 -39
- package/dist/project-learning.js +3 -55
- package/dist/project-memory.js +2 -45
- package/dist/project-outcomes.js +0 -6
- package/dist/project-sandbox.js +0 -23
- package/dist/project-skills.js +0 -12
- package/dist/project-tools.js +6 -184
- package/dist/project.js +0 -48
- package/dist/prompt.js +0 -31
- package/dist/proof.js +0 -220
- package/dist/proposal.js +0 -50
- package/dist/protected-storage-look.js +0 -6
- package/dist/protected-storage.js +1 -84
- package/dist/provider-auth.js +3 -69
- package/dist/provider-capture.js +1 -15
- package/dist/provider-connection.js +0 -8
- package/dist/provider-home.js +0 -25
- package/dist/provider-limits.js +0 -14
- package/dist/provider.js +0 -324
- package/dist/public-access.js +11 -30
- package/dist/public-check.js +0 -16
- package/dist/publish.js +1 -150
- package/dist/pull-request-flow.js +6 -74
- package/dist/pull-request-schema.js +0 -4
- package/dist/pull-request-ui.js +0 -5
- package/dist/pulls.js +0 -80
- package/dist/push.js +5 -89
- package/dist/quick-start.js +1 -23
- package/dist/read-executor-worker.js +0 -1
- package/dist/read-executor.js +0 -10
- package/dist/read-only-request.js +0 -7
- package/dist/recipe-ui.js +0 -6
- package/dist/recipes.js +0 -13
- package/dist/release-adapters.js +6 -214
- package/dist/release-approval.js +0 -74
- package/dist/release-authority.js +0 -42
- package/dist/release-auto.js +0 -142
- package/dist/release-card.js +26 -103
- package/dist/release-carry.js +0 -132
- package/dist/release-ci-hold.js +0 -20
- package/dist/release-cli.js +0 -46
- package/dist/release-coverage.js +0 -16
- package/dist/release-gate.js +0 -30
- package/dist/release-git.js +0 -24
- package/dist/release-links.js +0 -17
- package/dist/release-net.js +0 -42
- package/dist/release-next.js +0 -25
- package/dist/release-recheck.js +0 -89
- package/dist/release-refusal.js +0 -18
- package/dist/release-view.js +0 -5
- package/dist/release.js +7 -341
- package/dist/releases.js +0 -49
- package/dist/remote-audit.js +0 -25
- package/dist/remote-command.js +0 -16
- package/dist/remote-destination.js +5 -26
- package/dist/remote-exec.js +1 -27
- package/dist/remote-main.js +1 -53
- package/dist/remote-run.js +0 -5
- package/dist/remote.js +0 -49
- package/dist/render.js +0 -133
- package/dist/reply-shape.js +0 -85
- package/dist/reply-voice.js +0 -7
- package/dist/report-summary.js +0 -5
- package/dist/reported-usage.js +0 -30
- package/dist/repos.js +9 -62
- package/dist/repository-context.js +1 -24
- package/dist/request-budget-ui.js +0 -4
- package/dist/request-budget.js +0 -23
- package/dist/restart-certification.js +0 -37
- package/dist/result-actions.js +0 -62
- package/dist/result-acts.js +0 -34
- package/dist/result-completion.js +9 -28
- package/dist/result-evidence-readers.js +0 -3
- package/dist/result-follow-ups.js +1 -39
- package/dist/result-review.js +0 -86
- package/dist/result-shots.js +0 -39
- package/dist/retention-ui.js +0 -7
- package/dist/retention.js +2 -46
- package/dist/review-context.js +0 -129
- package/dist/review-evidence.js +0 -4
- package/dist/review-switch.js +1 -7
- package/dist/reviewer.js +0 -35
- package/dist/route-change-check.js +0 -2
- package/dist/route-change.js +0 -16
- package/dist/route-hooks.js +0 -27
- package/dist/route-results.js +2 -58
- package/dist/route-rules.js +1 -106
- package/dist/route-savings.js +0 -36
- package/dist/route-store.js +1 -133
- package/dist/run-closeout.js +2 -50
- package/dist/run-efficiency.js +2 -44
- package/dist/run-ending.js +0 -13
- package/dist/runner-process.js +0 -33
- package/dist/runner.js +17 -189
- package/dist/sample-project.js +2 -27
- package/dist/sandbox-launch.js +4 -25
- package/dist/sandbox-runtime.js +1 -88
- package/dist/scan.js +0 -27
- package/dist/scope.js +88 -566
- package/dist/scout-browser-lock.js +0 -6
- package/dist/scout-browser.js +2 -68
- package/dist/scout-net.js +1 -32
- package/dist/scout-report.js +0 -22
- package/dist/scout.js +1 -116
- package/dist/secret-mint.js +0 -6
- package/dist/serve.js +29 -564
- package/dist/server/agents-computers.js +0 -10
- package/dist/server/agents-live-filed.js +0 -13
- package/dist/server/agents-live-lead.js +0 -19
- package/dist/server/agents-live-room.js +0 -19
- package/dist/server/chat.js +2 -194
- package/dist/server/chrome.js +17 -263
- package/dist/server/console.css +4 -4
- package/dist/server/edge-refusal.js +0 -3
- package/dist/server/flows.js +5 -74
- package/dist/server/guards.js +9 -86
- package/dist/server/handler-registry.js +0 -2
- package/dist/server/home-asks.js +1 -22
- package/dist/server/home.js +1 -30
- package/dist/server/http.js +0 -82
- package/dist/server/in-place.js +0 -15
- package/dist/server/kit-standalone.js +0 -20
- package/dist/server/kit.js +2 -114
- package/dist/server/last-checks.js +0 -2
- package/dist/server/live.js +1 -36
- package/dist/server/merge-ready-view.js +0 -6
- package/dist/server/mutation-key.js +3 -40
- package/dist/server/pages-assets.js +0 -16
- package/dist/server/pages.js +7 -195
- package/dist/server/people-tokens.js +3 -101
- package/dist/server/remote-hooks.js +0 -13
- package/dist/server/remote.js +0 -28
- package/dist/server/render-chat.js +8 -144
- package/dist/server/render-code-map.js +0 -5
- package/dist/server/render-flaky.js +0 -8
- package/dist/server/render-follow-through.js +2 -5
- package/dist/server/render-history.js +2 -34
- package/dist/server/render-new-task.js +2 -29
- package/dist/server/render-pages.js +1 -111
- package/dist/server/render-people.js +2 -46
- package/dist/server/render-projects.js +15 -32
- package/dist/server/render-release.js +1 -14
- package/dist/server/render-results.js +4 -355
- package/dist/server/render-settings.js +0 -15
- package/dist/server/render-tasks.js +17 -497
- package/dist/server/request-context.js +2 -9
- package/dist/server/retired-routes.js +0 -11
- package/dist/server/route-policy.js +0 -3
- package/dist/server/route-table.js +8 -133
- package/dist/server/runtime.js +0 -1
- package/dist/server/session.js +0 -28
- package/dist/server/settings.js +40 -246
- package/dist/server/signup-gate.js +0 -11
- package/dist/server/sweeps.js +0 -6
- package/dist/server/task-views.js +12 -227
- package/dist/server/tasks.js +37 -531
- package/dist/server/terminals.js +2 -46
- package/dist/server/welcome.js +2 -22
- package/dist/server-telemetry.js +0 -9
- package/dist/settings-groups-ui.js +50 -63
- package/dist/settings-kit-script.js +0 -19
- package/dist/settings-kit.js +0 -63
- package/dist/settings-proofs.js +0 -23
- package/dist/setup-guide.js +1 -9
- package/dist/shared-deps.js +9 -84
- package/dist/sign-in-guard.js +0 -27
- package/dist/skills-ui.js +0 -2
- package/dist/skills.js +2 -54
- package/dist/slack-api.js +0 -3
- package/dist/slack-chat.js +0 -25
- package/dist/slack-settings.js +0 -1
- package/dist/slack-socket.js +0 -5
- package/dist/slack.js +0 -4
- package/dist/sleep.js +0 -1
- package/dist/source-key.js +0 -10
- package/dist/spend-report.js +0 -29
- package/dist/spend-ui.js +0 -26
- package/dist/spend.js +0 -40
- package/dist/sqlite-runtime.js +0 -2
- package/dist/sqlite-telemetry.js +0 -9
- package/dist/sso-settings.js +0 -13
- package/dist/sso-ui.js +0 -2
- package/dist/staged-runtimes.js +5 -39
- package/dist/steer-capabilities.js +1 -7
- package/dist/steer-controls.js +0 -10
- package/dist/steer-live.js +0 -31
- package/dist/steer-mailbox.js +4 -65
- package/dist/steer-status.js +0 -7
- package/dist/stop-proof.js +5 -62
- package/dist/storage-sweep-child.js +1 -5
- package/dist/storage-sweep-process.js +2 -20
- package/dist/storage-sweep-schedule.js +0 -32
- package/dist/storage-sweep.js +2 -51
- package/dist/storage-ui.js +0 -18
- package/dist/storage.js +0 -31
- package/dist/store-baseline.js +0 -14
- package/dist/store.js +109 -4763
- package/dist/stream-scope.js +0 -16
- package/dist/structured-output.js +0 -39
- package/dist/style-asset.js +0 -2
- package/dist/subagent-admin.js +0 -9
- package/dist/subagent-desk.js +0 -29
- package/dist/subagent-memory.js +0 -38
- package/dist/subagent-question.js +0 -29
- package/dist/subagent-tools.js +1 -60
- package/dist/subagent-week.js +0 -28
- package/dist/subagent-work.js +1 -39
- package/dist/subagents-ui.js +1 -13
- package/dist/subagents.js +0 -40
- package/dist/subscription-chat.js +1 -42
- package/dist/summary.js +0 -19
- package/dist/surface.js +8 -73
- package/dist/sweep-gate.js +0 -2
- package/dist/sweep-quarantine.js +2 -13
- package/dist/sync.js +0 -47
- package/dist/tailnet.js +0 -9
- package/dist/tamper-scan.js +0 -15
- package/dist/task-activity.js +1 -16
- package/dist/task-aliases.js +0 -3
- package/dist/task-archive.js +0 -7
- package/dist/task-base.js +0 -18
- package/dist/task-composer.js +0 -2
- package/dist/task-control.js +0 -74
- package/dist/task-live.js +0 -23
- package/dist/task-moves.js +0 -28
- package/dist/task-outcome-cli.js +66 -19
- package/dist/task-review-brief.js +0 -7
- package/dist/task-sizing.js +0 -47
- package/dist/task-source.js +0 -23
- package/dist/task-status.js +0 -106
- package/dist/task-text.js +0 -12
- package/dist/team-chat-authorization.js +0 -3
- package/dist/team-contract.js +0 -2
- package/dist/team-http.js +0 -4
- package/dist/team-leads.js +1 -16
- package/dist/team-runtime.js +0 -13
- package/dist/team-ui.js +0 -1
- package/dist/team-updates.js +0 -4
- package/dist/teams-api.js +0 -12
- package/dist/teams-chat.js +0 -28
- package/dist/teams.js +0 -12
- package/dist/teardown-git.js +6 -294
- package/dist/telegram-flow.js +0 -51
- package/dist/telegram-lead.js +2 -203
- package/dist/telegram-live.js +1 -42
- package/dist/telegram-progress.js +0 -18
- package/dist/telegram-settings.js +0 -7
- package/dist/telegram-status.js +0 -46
- package/dist/telegram-team.js +1 -33
- package/dist/telegram.js +6 -454
- package/dist/templates.js +0 -24
- package/dist/terminal-catalog.js +2 -20
- package/dist/terminal-text.js +0 -12
- package/dist/test-infra.js +0 -50
- package/dist/test-temp.js +3 -26
- package/dist/text-limits.js +0 -92
- package/dist/tidy.js +0 -76
- package/dist/tier-report.js +0 -2
- package/dist/token-notices.js +1 -9
- package/dist/tokens-cli.js +0 -13
- package/dist/tool-broker.js +2 -53
- package/dist/tool-launcher.js +0 -14
- package/dist/tool-secret-store.js +3 -125
- package/dist/toolroll-update-cli.js +0 -9
- package/dist/toolroll-update-ui.js +0 -14
- package/dist/toolroll-update.js +13 -252
- package/dist/tools-ui.js +0 -17
- package/dist/transitions-recipes.js +0 -2
- package/dist/tree-proof.js +0 -23
- package/dist/tui-contract.js +0 -8
- package/dist/tui-source.js +91 -40
- package/dist/tui.js +54 -54
- package/dist/typed-start.js +0 -27
- package/dist/unfenced-test-support.js +0 -5
- package/dist/up-processes.js +1 -40
- package/dist/up-role-child.js +1 -13
- package/dist/update-notice.js +0 -1
- package/dist/vanished-retry.js +0 -40
- package/dist/verification-evidence.js +0 -39
- package/dist/version.js +0 -1
- package/dist/wake-hub.js +0 -28
- package/dist/webhook-limits.js +0 -7
- package/dist/webhook-readers.js +0 -30
- package/dist/webhook-signing.js +0 -14
- package/dist/webhooks.js +0 -54
- package/dist/welcome-facts.js +2 -14
- package/dist/when-html.js +0 -27
- package/dist/work-index.js +26 -98
- package/dist/work-summary.js +2 -17
- package/dist/workspace-motion.js +0 -2
- package/dist/workspace-revision.js +1 -21
- package/dist/workspace-ui.js +15 -135
- package/dist/worktree-notices.js +0 -3
- package/dist/worktree.js +0 -308
- package/dist/writes-mode.js +0 -1
- package/dist/youiyoux-intake.js +4 -159
- package/package.json +5 -4
- package/dist/accent-colors.d.ts +0 -51
- package/dist/acp-agents.d.ts +0 -43
- package/dist/acp-attest.d.ts +0 -44
- package/dist/acp-check.d.ts +0 -37
- package/dist/acp-client.d.ts +0 -163
- package/dist/acp-inspect.d.ts +0 -23
- package/dist/action-ledger.d.ts +0 -27
- package/dist/activity-line.d.ts +0 -29
- package/dist/actor.d.ts +0 -11
- package/dist/agent-board.d.ts +0 -229
- package/dist/agent-fence.d.ts +0 -479
- package/dist/agent-onboard.d.ts +0 -158
- package/dist/agent-pulse.d.ts +0 -43
- package/dist/agent-state-words.d.ts +0 -19
- package/dist/agent-state.d.ts +0 -65
- package/dist/agent-turns.d.ts +0 -52
- package/dist/agentconfig.d.ts +0 -191
- package/dist/agents-board.d.ts +0 -145
- package/dist/agents-live.d.ts +0 -31
- package/dist/api-tokens.d.ts +0 -80
- package/dist/approval-authority.d.ts +0 -51
- package/dist/approval-password.d.ts +0 -31
- package/dist/approval-policy.d.ts +0 -69
- package/dist/approval-rules-ui.d.ts +0 -40
- package/dist/assignment-adapters.d.ts +0 -152
- package/dist/assignment-brief.d.ts +0 -83
- package/dist/assignment-delivery.d.ts +0 -86
- package/dist/assignment-presentation.d.ts +0 -37
- package/dist/assignment-status.d.ts +0 -71
- package/dist/assignment-ui.d.ts +0 -68
- package/dist/assignment.d.ts +0 -318
- package/dist/attest.d.ts +0 -59
- package/dist/audit-cli.d.ts +0 -17
- package/dist/backend.d.ts +0 -97
- package/dist/backup-ui.d.ts +0 -32
- package/dist/backup.d.ts +0 -92
- package/dist/batch-checks.d.ts +0 -15
- package/dist/batch-policy.d.ts +0 -23
- package/dist/beads.d.ts +0 -34
- package/dist/bin.d.ts +0 -2
- package/dist/board.d.ts +0 -134
- package/dist/boot-identity.d.ts +0 -64
- package/dist/bounded-spawn.d.ts +0 -57
- package/dist/brand-icons.d.ts +0 -168
- package/dist/brand-mark.d.ts +0 -28
- package/dist/brief-fence.d.ts +0 -9
- package/dist/browser-crew.d.ts +0 -12
- package/dist/browser-shell.d.ts +0 -9
- package/dist/browser-workspace.d.ts +0 -1972
- package/dist/budget-alerts.d.ts +0 -19
- package/dist/build-review.d.ts +0 -38
- package/dist/builder-restart.d.ts +0 -21
- package/dist/builder.d.ts +0 -409
- package/dist/canonical-json.d.ts +0 -14
- package/dist/capscan.d.ts +0 -35
- package/dist/card-catalog.d.ts +0 -209
- package/dist/card-cli.d.ts +0 -43
- package/dist/card-render.d.ts +0 -43
- package/dist/card-sources.d.ts +0 -68
- package/dist/chat-acceptance.d.ts +0 -74
- package/dist/chat-actions.d.ts +0 -460
- package/dist/chat-admission.d.ts +0 -19
- package/dist/chat-approval.d.ts +0 -58
- package/dist/chat-ask.d.ts +0 -32
- package/dist/chat-card-part.d.ts +0 -11
- package/dist/chat-card.d.ts +0 -46
- package/dist/chat-channel.d.ts +0 -126
- package/dist/chat-continuity.d.ts +0 -32
- package/dist/chat-controls.d.ts +0 -117
- package/dist/chat-core.d.ts +0 -177
- package/dist/chat-decide.d.ts +0 -269
- package/dist/chat-delivery-state.d.ts +0 -132
- package/dist/chat-delivery.d.ts +0 -71
- package/dist/chat-display.d.ts +0 -1
- package/dist/chat-evidence.d.ts +0 -123
- package/dist/chat-flow.d.ts +0 -70
- package/dist/chat-follow.d.ts +0 -20
- package/dist/chat-inbox.d.ts +0 -57
- package/dist/chat-live-schema.d.ts +0 -17
- package/dist/chat-live.d.ts +0 -161
- package/dist/chat-message-states.d.ts +0 -75
- package/dist/chat-messages.d.ts +0 -338
- package/dist/chat-migration.d.ts +0 -30
- package/dist/chat-polish.d.ts +0 -17
- package/dist/chat-quiet.d.ts +0 -40
- package/dist/chat-review.d.ts +0 -51
- package/dist/chat-rooms.d.ts +0 -123
- package/dist/chat-settings-page.d.ts +0 -43
- package/dist/chat-task-actions.d.ts +0 -59
- package/dist/chat-terms.d.ts +0 -29
- package/dist/chat-voice.d.ts +0 -69
- package/dist/chat-warmth.d.ts +0 -21
- package/dist/check-access.d.ts +0 -54
- package/dist/check-facts.d.ts +0 -126
- package/dist/check-failure.d.ts +0 -113
- package/dist/check-levels-ui.d.ts +0 -36
- package/dist/check-levels.d.ts +0 -70
- package/dist/check-load.d.ts +0 -85
- package/dist/check-only-standing.d.ts +0 -36
- package/dist/check-only.d.ts +0 -15
- package/dist/check-progress.d.ts +0 -78
- package/dist/check-repair.d.ts +0 -47
- package/dist/check-report.d.ts +0 -177
- package/dist/check-stamp.d.ts +0 -46
- package/dist/checkout-cleanup.d.ts +0 -157
- package/dist/checkout-proof.d.ts +0 -28
- package/dist/child-database.d.ts +0 -12
- package/dist/claim.d.ts +0 -627
- package/dist/claude-print.d.ts +0 -12
- package/dist/cli-fast.d.ts +0 -8
- package/dist/cli-help.d.ts +0 -8
- package/dist/cli-http.d.ts +0 -58
- package/dist/cli.d.ts +0 -149
- package/dist/code-extract.d.ts +0 -44
- package/dist/code-map-acts.d.ts +0 -24
- package/dist/code-map-admission.d.ts +0 -52
- package/dist/code-map-build.d.ts +0 -63
- package/dist/code-map-cli.d.ts +0 -153
- package/dist/code-map-main.d.ts +0 -1
- package/dist/code-map-read.d.ts +0 -106
- package/dist/code-map-report.d.ts +0 -37
- package/dist/code-map-shape.d.ts +0 -172
- package/dist/code-map-store.d.ts +0 -136
- package/dist/codex-limits.d.ts +0 -15
- package/dist/coding-context.d.ts +0 -18
- package/dist/coding-handoff.d.ts +0 -39
- package/dist/coding-provider.d.ts +0 -88
- package/dist/coding-shipping-ui.d.ts +0 -5
- package/dist/coding-types.d.ts +0 -16
- package/dist/coding-ui.d.ts +0 -19
- package/dist/coding-update.d.ts +0 -28
- package/dist/coding-workspace.d.ts +0 -141
- package/dist/commit-extract.d.ts +0 -135
- package/dist/connect-cli.d.ts +0 -34
- package/dist/console-chrome.d.ts +0 -41
- package/dist/console-instance.d.ts +0 -157
- package/dist/container-state.d.ts +0 -5
- package/dist/containment.d.ts +0 -205
- package/dist/contract-changes.d.ts +0 -52
- package/dist/contracts/acceptance-terms.d.ts +0 -14
- package/dist/contracts/chat-actions.d.ts +0 -465
- package/dist/contracts/chat-callback-rows.d.ts +0 -59
- package/dist/contracts/chat-card.d.ts +0 -91
- package/dist/contracts/chat-content.d.ts +0 -551
- package/dist/contracts/chat-tables.d.ts +0 -12
- package/dist/contracts/cli.d.ts +0 -987
- package/dist/contracts/coding-activity.d.ts +0 -64
- package/dist/contracts/coding-context.d.ts +0 -97
- package/dist/contracts/coding-handoff.d.ts +0 -44
- package/dist/contracts/coding-workspace.d.ts +0 -165
- package/dist/contracts/console-api.d.ts +0 -539
- package/dist/contracts/contract-test.d.ts +0 -45
- package/dist/contracts/contract.d.ts +0 -92
- package/dist/contracts/decision.d.ts +0 -45
- package/dist/contracts/diff-stat.d.ts +0 -58
- package/dist/contracts/discord-callback.d.ts +0 -45
- package/dist/contracts/flow-card.d.ts +0 -53
- package/dist/contracts/flow-propose.d.ts +0 -334
- package/dist/contracts/flow-send.d.ts +0 -245
- package/dist/contracts/flow.d.ts +0 -19565
- package/dist/contracts/gateway-tools.d.ts +0 -472
- package/dist/contracts/handoff.d.ts +0 -91
- package/dist/contracts/health.d.ts +0 -82
- package/dist/contracts/integration-metadata.d.ts +0 -100
- package/dist/contracts/lead-context.d.ts +0 -165
- package/dist/contracts/lead-tools.d.ts +0 -2312
- package/dist/contracts/mcp-oauth.d.ts +0 -53
- package/dist/contracts/memory-pass.d.ts +0 -157
- package/dist/contracts/model-catalog.d.ts +0 -21
- package/dist/contracts/observation-request.d.ts +0 -37
- package/dist/contracts/plan.d.ts +0 -58
- package/dist/contracts/project-knowledge.d.ts +0 -159
- package/dist/contracts/project-memory.d.ts +0 -119
- package/dist/contracts/project-skills.d.ts +0 -120
- package/dist/contracts/proof.d.ts +0 -136
- package/dist/contracts/provider.d.ts +0 -40
- package/dist/contracts/recipes.d.ts +0 -166
- package/dist/contracts/release-check.d.ts +0 -371
- package/dist/contracts/release-terms.d.ts +0 -107
- package/dist/contracts/retention.d.ts +0 -42
- package/dist/contracts/review-findings.d.ts +0 -46
- package/dist/contracts/route-results.d.ts +0 -121
- package/dist/contracts/route.d.ts +0 -897
- package/dist/contracts/scope.d.ts +0 -105
- package/dist/contracts/scout-report.d.ts +0 -234
- package/dist/contracts/slack-callback.d.ts +0 -43
- package/dist/contracts/sort-answer.d.ts +0 -83
- package/dist/contracts/stage-output.d.ts +0 -127
- package/dist/contracts/storage.d.ts +0 -37
- package/dist/contracts/store-json.d.ts +0 -313
- package/dist/contracts/subagent-turn.d.ts +0 -43
- package/dist/contracts/task-sizing.d.ts +0 -24
- package/dist/contracts/teams-callback.d.ts +0 -13
- package/dist/contracts/telegram-callback.d.ts +0 -120
- package/dist/contracts/trigger-payloads.d.ts +0 -389
- package/dist/contracts/update-journal.d.ts +0 -254
- package/dist/contracts/verification-receipt.d.ts +0 -200
- package/dist/contracts/verification-view.d.ts +0 -102
- package/dist/contracts/youiyoux-request.d.ts +0 -248
- package/dist/control-setup.d.ts +0 -44
- package/dist/control-ui.d.ts +0 -37
- package/dist/controller-service.d.ts +0 -1
- package/dist/controller-supervisor.d.ts +0 -38
- package/dist/converse.d.ts +0 -316
- package/dist/coordinator-proposals.d.ts +0 -29
- package/dist/coordinator.d.ts +0 -186
- package/dist/credentials-ui.d.ts +0 -33
- package/dist/daemon.d.ts +0 -226
- package/dist/database-reclaim.d.ts +0 -4
- package/dist/decision.d.ts +0 -119
- package/dist/demo-chat.d.ts +0 -32
- package/dist/demo.d.ts +0 -153
- package/dist/deploy-gate.d.ts +0 -20
- package/dist/deploy-lock.d.ts +0 -8
- package/dist/deploy-phase.d.ts +0 -37
- package/dist/deploy-rescue.d.ts +0 -42
- package/dist/deprecations.d.ts +0 -20
- package/dist/design/kit.d.ts +0 -216
- package/dist/desktop-access.d.ts +0 -28
- package/dist/desktop-bundle.d.ts +0 -16
- package/dist/desktop-host.d.ts +0 -54
- package/dist/desktop-update-gate.d.ts +0 -12
- package/dist/desktop-update-recovery.d.ts +0 -14
- package/dist/desktop-update.d.ts +0 -147
- package/dist/digest-times.d.ts +0 -3
- package/dist/disclosure.d.ts +0 -6
- package/dist/discord-api.d.ts +0 -24
- package/dist/discord-chat.d.ts +0 -27
- package/dist/discord-settings.d.ts +0 -4
- package/dist/discord.d.ts +0 -10
- package/dist/discover.d.ts +0 -75
- package/dist/dispatch.d.ts +0 -123
- package/dist/dispose.d.ts +0 -194
- package/dist/doctor.d.ts +0 -67
- package/dist/easy-start-args.d.ts +0 -13
- package/dist/easy-start.d.ts +0 -77
- package/dist/egress.d.ts +0 -121
- package/dist/email-settings.d.ts +0 -34
- package/dist/envelope.d.ts +0 -47
- package/dist/eval-gate.d.ts +0 -51
- package/dist/eval-hooks.d.ts +0 -94
- package/dist/eval-oracle-main.d.ts +0 -1
- package/dist/eval-oracle.d.ts +0 -60
- package/dist/eval-world.d.ts +0 -17
- package/dist/evals.d.ts +0 -299
- package/dist/evidence-pack.d.ts +0 -186
- package/dist/evidence-pair.d.ts +0 -53
- package/dist/evidence.d.ts +0 -371
- package/dist/exec.d.ts +0 -355
- package/dist/exhaustion.d.ts +0 -58
- package/dist/export-ui.d.ts +0 -11
- package/dist/export.d.ts +0 -48
- package/dist/failing-first.d.ts +0 -31
- package/dist/fallback-schema.d.ts +0 -8
- package/dist/fallback.d.ts +0 -138
- package/dist/fast-start.d.ts +0 -213
- package/dist/fast-terms.d.ts +0 -9
- package/dist/fenced-check-coverage.d.ts +0 -62
- package/dist/findings.d.ts +0 -224
- package/dist/first-run.d.ts +0 -197
- package/dist/first-tasks-child.d.ts +0 -1
- package/dist/flaky-ci.d.ts +0 -31
- package/dist/flaky-cli.d.ts +0 -60
- package/dist/flaky.d.ts +0 -83
- package/dist/fleet-schema.d.ts +0 -17
- package/dist/flow-actions.d.ts +0 -79
- package/dist/flow-browser.d.ts +0 -103
- package/dist/flow-cadence.d.ts +0 -48
- package/dist/flow-card-task.d.ts +0 -11
- package/dist/flow-changed.d.ts +0 -14
- package/dist/flow-code.d.ts +0 -84
- package/dist/flow-draft.d.ts +0 -42
- package/dist/flow-engine.d.ts +0 -82
- package/dist/flow-gallery-ui.d.ts +0 -73
- package/dist/flow-gallery.d.ts +0 -147
- package/dist/flow-insights.d.ts +0 -104
- package/dist/flow-items.d.ts +0 -37
- package/dist/flow-live.d.ts +0 -16
- package/dist/flow-people.d.ts +0 -23
- package/dist/flow-pull-request.d.ts +0 -14
- package/dist/flow-replies.d.ts +0 -48
- package/dist/flow-result-card.d.ts +0 -22
- package/dist/flow-schedule.d.ts +0 -154
- package/dist/flow-scripts.d.ts +0 -31
- package/dist/flow-secrets.d.ts +0 -13
- package/dist/flow-send.d.ts +0 -54
- package/dist/flow-share.d.ts +0 -78
- package/dist/flow-sort.d.ts +0 -63
- package/dist/flow-starters-ui.d.ts +0 -15
- package/dist/flow-starters.d.ts +0 -63
- package/dist/flow-steps.d.ts +0 -52
- package/dist/flow-triggers.d.ts +0 -303
- package/dist/flow-unattended-words.d.ts +0 -48
- package/dist/flow-unattended.d.ts +0 -259
- package/dist/flows-cli.d.ts +0 -358
- package/dist/flows-ui.d.ts +0 -70
- package/dist/flows.d.ts +0 -136
- package/dist/folder-gate.d.ts +0 -32
- package/dist/folder-look.d.ts +0 -110
- package/dist/follow-through-brief.d.ts +0 -12
- package/dist/follow-through-cli.d.ts +0 -23
- package/dist/fonts.d.ts +0 -19
- package/dist/gaps.d.ts +0 -35
- package/dist/gate-failure.d.ts +0 -40
- package/dist/git-floor.d.ts +0 -16
- package/dist/git-incident.d.ts +0 -65
- package/dist/git-views.d.ts +0 -20
- package/dist/git.d.ts +0 -54
- package/dist/github-import.d.ts +0 -62
- package/dist/github-jobs.d.ts +0 -25
- package/dist/google-mail.d.ts +0 -59
- package/dist/grant.d.ts +0 -136
- package/dist/graph.d.ts +0 -164
- package/dist/guides.d.ts +0 -22
- package/dist/handover-note.d.ts +0 -33
- package/dist/health-cli.d.ts +0 -3
- package/dist/home-groups.d.ts +0 -39
- package/dist/html.d.ts +0 -85
- package/dist/install-method.d.ts +0 -17
- package/dist/integrations-ui.d.ts +0 -17
- package/dist/integrations.d.ts +0 -138
- package/dist/invoke.d.ts +0 -228
- package/dist/is-record.d.ts +0 -2
- package/dist/issues.d.ts +0 -41
- package/dist/jsonl-discriminants.d.ts +0 -11
- package/dist/keymap.d.ts +0 -41
- package/dist/keys.d.ts +0 -108
- package/dist/kits-ui.d.ts +0 -16
- package/dist/kits.d.ts +0 -88
- package/dist/knowledge-cli.d.ts +0 -132
- package/dist/knowledge-ui.d.ts +0 -45
- package/dist/landed-cleanup.d.ts +0 -175
- package/dist/laptop-background.d.ts +0 -187
- package/dist/laptop-service.d.ts +0 -111
- package/dist/latency-timeline.d.ts +0 -46
- package/dist/lead-about.d.ts +0 -35
- package/dist/lead-answer-eval.d.ts +0 -93
- package/dist/lead-capabilities.d.ts +0 -57
- package/dist/lead-cli-live.d.ts +0 -56
- package/dist/lead-cli.d.ts +0 -58
- package/dist/lead-commitments.d.ts +0 -84
- package/dist/lead-context.d.ts +0 -45
- package/dist/lead-contract.d.ts +0 -10
- package/dist/lead-doors.d.ts +0 -122
- package/dist/lead-follow.d.ts +0 -26
- package/dist/lead-identity.d.ts +0 -23
- package/dist/lead-latency-schema.d.ts +0 -24
- package/dist/lead-people.d.ts +0 -55
- package/dist/lead-progress.d.ts +0 -67
- package/dist/lead-queue-runtime.d.ts +0 -46
- package/dist/lead-queue.d.ts +0 -104
- package/dist/lead-route.d.ts +0 -56
- package/dist/lead-status.d.ts +0 -116
- package/dist/lead-sweep.d.ts +0 -67
- package/dist/lead-tools.d.ts +0 -167
- package/dist/lead-voice.d.ts +0 -85
- package/dist/lead.d.ts +0 -142
- package/dist/learning-child.d.ts +0 -1
- package/dist/learning-look.d.ts +0 -25
- package/dist/ledger-chain.d.ts +0 -46
- package/dist/ledger-csv.d.ts +0 -4
- package/dist/ledger-view.d.ts +0 -27
- package/dist/lesson-notes.d.ts +0 -81
- package/dist/limits-ui.d.ts +0 -34
- package/dist/link.d.ts +0 -72
- package/dist/live-backup.d.ts +0 -39
- package/dist/live-bus.d.ts +0 -141
- package/dist/live-children-read.d.ts +0 -52
- package/dist/live-children.d.ts +0 -73
- package/dist/live-detail.d.ts +0 -27
- package/dist/live-input.d.ts +0 -68
- package/dist/live-main-read.d.ts +0 -19
- package/dist/live-notes.d.ts +0 -20
- package/dist/live-open.d.ts +0 -28
- package/dist/live-records.d.ts +0 -149
- package/dist/live-reply.d.ts +0 -83
- package/dist/live-terminal.d.ts +0 -273
- package/dist/live.d.ts +0 -152
- package/dist/local-owner.d.ts +0 -124
- package/dist/log.d.ts +0 -7
- package/dist/login-secrets.d.ts +0 -60
- package/dist/machine-check.d.ts +0 -16
- package/dist/machine-identity.d.ts +0 -75
- package/dist/mailbox.d.ts +0 -57
- package/dist/maintenance.d.ts +0 -13
- package/dist/mcp-connect.d.ts +0 -181
- package/dist/mcp-core.d.ts +0 -110
- package/dist/mcp-http.d.ts +0 -32
- package/dist/mcp-oauth.d.ts +0 -92
- package/dist/mcp-person.d.ts +0 -22
- package/dist/mcp.d.ts +0 -20
- package/dist/memory-cli.d.ts +0 -768
- package/dist/memory-pass.d.ts +0 -151
- package/dist/memory-tidy.d.ts +0 -181
- package/dist/memory-use.d.ts +0 -35
- package/dist/merge-checklist.d.ts +0 -55
- package/dist/metrics.d.ts +0 -6
- package/dist/mobile-viewport.d.ts +0 -7
- package/dist/model-catalog.d.ts +0 -123
- package/dist/model-choices.d.ts +0 -235
- package/dist/model-names.d.ts +0 -6
- package/dist/models-cli.d.ts +0 -307
- package/dist/models-ui.d.ts +0 -161
- package/dist/modes.d.ts +0 -99
- package/dist/monitoring-settings.d.ts +0 -44
- package/dist/monitoring-ui.d.ts +0 -23
- package/dist/monitoring.d.ts +0 -34
- package/dist/names.d.ts +0 -67
- package/dist/needs-you.d.ts +0 -164
- package/dist/never-index.d.ts +0 -3
- package/dist/nightly-check.d.ts +0 -107
- package/dist/nightly-github.d.ts +0 -318
- package/dist/notification-delivery.d.ts +0 -19
- package/dist/notification-rows.d.ts +0 -30
- package/dist/oauth-run-token.d.ts +0 -51
- package/dist/observations.d.ts +0 -36
- package/dist/oidc.d.ts +0 -71
- package/dist/onboard.d.ts +0 -108
- package/dist/one-step-chat-schema.d.ts +0 -22
- package/dist/openrouter-models.d.ts +0 -34
- package/dist/operate-remote-arguments.d.ts +0 -36
- package/dist/operate-remote.d.ts +0 -98
- package/dist/operate.d.ts +0 -401
- package/dist/orphan-sweep.d.ts +0 -65
- package/dist/page-work-contract.d.ts +0 -21
- package/dist/password-bearer.d.ts +0 -25
- package/dist/passwordless.d.ts +0 -23
- package/dist/peek-cli.d.ts +0 -112
- package/dist/peek.d.ts +0 -110
- package/dist/people-audit-ui.d.ts +0 -16
- package/dist/person-proof.d.ts +0 -2
- package/dist/phase-routing.d.ts +0 -401
- package/dist/plain-schema.d.ts +0 -23
- package/dist/plain-words.d.ts +0 -20
- package/dist/plan-auto.d.ts +0 -25
- package/dist/plan-login.d.ts +0 -14
- package/dist/plan.d.ts +0 -188
- package/dist/plane-review.d.ts +0 -54
- package/dist/planner-source.d.ts +0 -225
- package/dist/planner.d.ts +0 -76
- package/dist/policy-ui.d.ts +0 -22
- package/dist/policy.d.ts +0 -92
- package/dist/prepared-evidence.d.ts +0 -17
- package/dist/principal.d.ts +0 -42
- package/dist/probe.d.ts +0 -46
- package/dist/process-custody.d.ts +0 -17
- package/dist/process-liveness.d.ts +0 -13
- package/dist/process-tree.d.ts +0 -39
- package/dist/project-access.d.ts +0 -17
- package/dist/project-activity.d.ts +0 -20
- package/dist/project-admission.d.ts +0 -105
- package/dist/project-cli.d.ts +0 -19
- package/dist/project-concurrency.d.ts +0 -62
- package/dist/project-delete-ui.d.ts +0 -96
- package/dist/project-delete.d.ts +0 -59
- package/dist/project-demo.d.ts +0 -12
- package/dist/project-file.d.ts +0 -3
- package/dist/project-identity.d.ts +0 -52
- package/dist/project-knowledge.d.ts +0 -124
- package/dist/project-learning.d.ts +0 -120
- package/dist/project-memory.d.ts +0 -70
- package/dist/project-outcomes.d.ts +0 -119
- package/dist/project-sandbox.d.ts +0 -59
- package/dist/project-skills.d.ts +0 -139
- package/dist/project-tools.d.ts +0 -318
- package/dist/project.d.ts +0 -65
- package/dist/prompt.d.ts +0 -33
- package/dist/proof.d.ts +0 -457
- package/dist/proposal.d.ts +0 -70
- package/dist/protected-storage-look.d.ts +0 -1
- package/dist/protected-storage.d.ts +0 -98
- package/dist/provider-auth.d.ts +0 -143
- package/dist/provider-capture.d.ts +0 -34
- package/dist/provider-connection.d.ts +0 -23
- package/dist/provider-home.d.ts +0 -22
- package/dist/provider-limits.d.ts +0 -37
- package/dist/provider.d.ts +0 -369
- package/dist/public-access.d.ts +0 -52
- package/dist/public-check.d.ts +0 -37
- package/dist/publish.d.ts +0 -146
- package/dist/pull-request-flow.d.ts +0 -189
- package/dist/pull-request-schema.d.ts +0 -5
- package/dist/pull-request-ui.d.ts +0 -25
- package/dist/pulls.d.ts +0 -121
- package/dist/push.d.ts +0 -120
- package/dist/quality.d.ts +0 -8
- package/dist/quick-start.d.ts +0 -26
- package/dist/read-executor-worker.d.ts +0 -1
- package/dist/read-executor.d.ts +0 -66
- package/dist/read-only-request.d.ts +0 -4
- package/dist/recipe-ui.d.ts +0 -21
- package/dist/recipes.d.ts +0 -56
- package/dist/release-adapters.d.ts +0 -205
- package/dist/release-approval.d.ts +0 -180
- package/dist/release-authority.d.ts +0 -173
- package/dist/release-auto.d.ts +0 -184
- package/dist/release-card.d.ts +0 -156
- package/dist/release-carry.d.ts +0 -261
- package/dist/release-ci-hold.d.ts +0 -41
- package/dist/release-cli.d.ts +0 -34
- package/dist/release-coverage.d.ts +0 -16
- package/dist/release-gate.d.ts +0 -84
- package/dist/release-git.d.ts +0 -43
- package/dist/release-links.d.ts +0 -29
- package/dist/release-net.d.ts +0 -90
- package/dist/release-next.d.ts +0 -48
- package/dist/release-recheck.d.ts +0 -146
- package/dist/release-refusal.d.ts +0 -32
- package/dist/release-view.d.ts +0 -37
- package/dist/release.d.ts +0 -806
- package/dist/releases.d.ts +0 -94
- package/dist/remote-audit.d.ts +0 -79
- package/dist/remote-command.d.ts +0 -45
- package/dist/remote-destination.d.ts +0 -36
- package/dist/remote-exec.d.ts +0 -38
- package/dist/remote-main.d.ts +0 -111
- package/dist/remote-run.d.ts +0 -20
- package/dist/remote.d.ts +0 -67
- package/dist/render.d.ts +0 -64
- package/dist/reply-shape.d.ts +0 -106
- package/dist/reply-voice.d.ts +0 -23
- package/dist/report-summary.d.ts +0 -22
- package/dist/reported-usage.d.ts +0 -69
- package/dist/repos.d.ts +0 -67
- package/dist/repository-context-ui.d.ts +0 -3
- package/dist/repository-context.d.ts +0 -66
- package/dist/request-budget-ui.d.ts +0 -14
- package/dist/request-budget.d.ts +0 -127
- package/dist/restart-certification.d.ts +0 -133
- package/dist/result-actions.d.ts +0 -36
- package/dist/result-acts.d.ts +0 -112
- package/dist/result-completion.d.ts +0 -35
- package/dist/result-evidence-readers.d.ts +0 -42
- package/dist/result-follow-ups.d.ts +0 -118
- package/dist/result-review.d.ts +0 -220
- package/dist/result-shots.d.ts +0 -59
- package/dist/retention-ui.d.ts +0 -21
- package/dist/retention.d.ts +0 -77
- package/dist/review-context.d.ts +0 -245
- package/dist/review-evidence.d.ts +0 -33
- package/dist/review-switch.d.ts +0 -36
- package/dist/reviewer.d.ts +0 -99
- package/dist/route-change-check.d.ts +0 -4
- package/dist/route-change.d.ts +0 -22
- package/dist/route-hooks.d.ts +0 -54
- package/dist/route-results.d.ts +0 -75
- package/dist/route-rules.d.ts +0 -324
- package/dist/route-savings.d.ts +0 -136
- package/dist/route-store.d.ts +0 -300
- package/dist/run-closeout.d.ts +0 -89
- package/dist/run-efficiency.d.ts +0 -74
- package/dist/run-ending.d.ts +0 -21
- package/dist/runner-process.d.ts +0 -76
- package/dist/runner.d.ts +0 -324
- package/dist/sample-project.d.ts +0 -31
- package/dist/sandbox-launch.d.ts +0 -1
- package/dist/sandbox-runtime.d.ts +0 -128
- package/dist/scan.d.ts +0 -32
- package/dist/scope.d.ts +0 -1067
- package/dist/scout-browser-lock.d.ts +0 -69
- package/dist/scout-browser.d.ts +0 -107
- package/dist/scout-net.d.ts +0 -25
- package/dist/scout-report.d.ts +0 -23
- package/dist/scout.d.ts +0 -142
- package/dist/secret-mint.d.ts +0 -1
- package/dist/serve.d.ts +0 -11
- package/dist/server/agents-computers.d.ts +0 -9
- package/dist/server/agents-live-filed.d.ts +0 -17
- package/dist/server/agents-live-lead.d.ts +0 -47
- package/dist/server/agents-live-room.d.ts +0 -23
- package/dist/server/chat.d.ts +0 -39
- package/dist/server/chrome.d.ts +0 -328
- package/dist/server/edge-refusal.d.ts +0 -7
- package/dist/server/flows.d.ts +0 -8
- package/dist/server/guards.d.ts +0 -80
- package/dist/server/handler-context.d.ts +0 -22
- package/dist/server/handler-registry.d.ts +0 -23
- package/dist/server/home-asks.d.ts +0 -45
- package/dist/server/home.d.ts +0 -65
- package/dist/server/http.d.ts +0 -337
- package/dist/server/in-place.d.ts +0 -15
- package/dist/server/kit-standalone.d.ts +0 -22
- package/dist/server/kit.d.ts +0 -452
- package/dist/server/last-checks.d.ts +0 -17
- package/dist/server/live.d.ts +0 -74
- package/dist/server/merge-ready-view.d.ts +0 -10
- package/dist/server/mutation-key.d.ts +0 -70
- package/dist/server/pages-assets.d.ts +0 -11
- package/dist/server/pages.d.ts +0 -8
- package/dist/server/people-tokens.d.ts +0 -18
- package/dist/server/remote-hooks.d.ts +0 -29
- package/dist/server/remote.d.ts +0 -59
- package/dist/server/render-chat.d.ts +0 -439
- package/dist/server/render-code-map.d.ts +0 -30
- package/dist/server/render-flaky.d.ts +0 -20
- package/dist/server/render-follow-through.d.ts +0 -11
- package/dist/server/render-history.d.ts +0 -51
- package/dist/server/render-new-task.d.ts +0 -54
- package/dist/server/render-pages.d.ts +0 -236
- package/dist/server/render-people.d.ts +0 -102
- package/dist/server/render-projects.d.ts +0 -104
- package/dist/server/render-release.d.ts +0 -19
- package/dist/server/render-results.d.ts +0 -754
- package/dist/server/render-settings.d.ts +0 -93
- package/dist/server/render-tasks.d.ts +0 -774
- package/dist/server/request-context.d.ts +0 -78
- package/dist/server/retired-routes.d.ts +0 -17
- package/dist/server/route-policy.d.ts +0 -18
- package/dist/server/route-table.d.ts +0 -114
- package/dist/server/runtime.d.ts +0 -342
- package/dist/server/session.d.ts +0 -192
- package/dist/server/settings.d.ts +0 -76
- package/dist/server/signup-gate.d.ts +0 -9
- package/dist/server/sweeps.d.ts +0 -4
- package/dist/server/task-views.d.ts +0 -98
- package/dist/server/tasks.d.ts +0 -83
- package/dist/server/terminals.d.ts +0 -31
- package/dist/server/welcome.d.ts +0 -28
- package/dist/server-telemetry.d.ts +0 -87
- package/dist/settings-groups-ui.d.ts +0 -286
- package/dist/settings-kit-script.d.ts +0 -21
- package/dist/settings-kit.d.ts +0 -173
- package/dist/settings-proofs.d.ts +0 -64
- package/dist/setup-guide.d.ts +0 -39
- package/dist/shared-deps.d.ts +0 -115
- package/dist/sign-in-guard.d.ts +0 -70
- package/dist/skills-ui.d.ts +0 -12
- package/dist/skills.d.ts +0 -99
- package/dist/slack-api.d.ts +0 -59
- package/dist/slack-chat.d.ts +0 -37
- package/dist/slack-settings.d.ts +0 -4
- package/dist/slack-socket.d.ts +0 -12
- package/dist/slack.d.ts +0 -6
- package/dist/sleep.d.ts +0 -2
- package/dist/source-key.d.ts +0 -2
- package/dist/spend-report.d.ts +0 -87
- package/dist/spend-ui.d.ts +0 -80
- package/dist/spend.d.ts +0 -142
- package/dist/sqlite-runtime.d.ts +0 -3
- package/dist/sqlite-telemetry.d.ts +0 -9
- package/dist/sso-settings.d.ts +0 -33
- package/dist/sso-ui.d.ts +0 -26
- package/dist/staged-runtimes.d.ts +0 -54
- package/dist/steer-capabilities.d.ts +0 -32
- package/dist/steer-controls.d.ts +0 -14
- package/dist/steer-live.d.ts +0 -19
- package/dist/steer-mailbox.d.ts +0 -46
- package/dist/steer-status.d.ts +0 -25
- package/dist/stop-proof.d.ts +0 -67
- package/dist/storage-sweep-child.d.ts +0 -1
- package/dist/storage-sweep-process.d.ts +0 -55
- package/dist/storage-sweep-schedule.d.ts +0 -30
- package/dist/storage-sweep.d.ts +0 -77
- package/dist/storage-ui.d.ts +0 -23
- package/dist/storage.d.ts +0 -68
- package/dist/store-baseline.d.ts +0 -19
- package/dist/store.d.ts +0 -8613
- package/dist/stream-scope.d.ts +0 -18
- package/dist/structured-output.d.ts +0 -57
- package/dist/style-asset.d.ts +0 -7
- package/dist/subagent-admin.d.ts +0 -53
- package/dist/subagent-desk.d.ts +0 -59
- package/dist/subagent-memory.d.ts +0 -65
- package/dist/subagent-question.d.ts +0 -59
- package/dist/subagent-tools.d.ts +0 -125
- package/dist/subagent-week.d.ts +0 -68
- package/dist/subagent-work.d.ts +0 -76
- package/dist/subagents-ui.d.ts +0 -22
- package/dist/subagents.d.ts +0 -146
- package/dist/subscription-chat.d.ts +0 -54
- package/dist/summary.d.ts +0 -33
- package/dist/surface.d.ts +0 -49
- package/dist/sweep-gate.d.ts +0 -10
- package/dist/sweep-quarantine.d.ts +0 -29
- package/dist/sync.d.ts +0 -94
- package/dist/tailnet.d.ts +0 -11
- package/dist/tamper-scan.d.ts +0 -4
- package/dist/task-activity.d.ts +0 -27
- package/dist/task-aliases.d.ts +0 -5
- package/dist/task-archive.d.ts +0 -13
- package/dist/task-base.d.ts +0 -39
- package/dist/task-composer.d.ts +0 -14
- package/dist/task-control.d.ts +0 -159
- package/dist/task-live.d.ts +0 -8
- package/dist/task-moves.d.ts +0 -90
- package/dist/task-outcome-cli.d.ts +0 -30
- package/dist/task-review-brief.d.ts +0 -69
- package/dist/task-sizing.d.ts +0 -58
- package/dist/task-source.d.ts +0 -77
- package/dist/task-status.d.ts +0 -324
- package/dist/task-text.d.ts +0 -31
- package/dist/team-chat-authorization.d.ts +0 -11
- package/dist/team-contract.d.ts +0 -103
- package/dist/team-http.d.ts +0 -25
- package/dist/team-leads.d.ts +0 -85
- package/dist/team-runtime.d.ts +0 -25
- package/dist/team-ui.d.ts +0 -4
- package/dist/team-updates.d.ts +0 -8
- package/dist/teams-api.d.ts +0 -33
- package/dist/teams-chat.d.ts +0 -36
- package/dist/teams-settings.d.ts +0 -14
- package/dist/teams.d.ts +0 -24
- package/dist/teardown-git.d.ts +0 -164
- package/dist/telegram-flow.d.ts +0 -112
- package/dist/telegram-lead.d.ts +0 -151
- package/dist/telegram-live.d.ts +0 -116
- package/dist/telegram-progress.d.ts +0 -20
- package/dist/telegram-settings.d.ts +0 -9
- package/dist/telegram-status.d.ts +0 -83
- package/dist/telegram-team.d.ts +0 -68
- package/dist/telegram.d.ts +0 -271
- package/dist/templates.d.ts +0 -69
- package/dist/terminal-catalog.d.ts +0 -11
- package/dist/terminal-text.d.ts +0 -11
- package/dist/test-infra.d.ts +0 -34
- package/dist/test-temp.d.ts +0 -40
- package/dist/text-limits.d.ts +0 -297
- package/dist/tidy.d.ts +0 -130
- package/dist/tier-report.d.ts +0 -44
- package/dist/token-notices.d.ts +0 -11
- package/dist/tokens-cli.d.ts +0 -21
- package/dist/tool-broker.d.ts +0 -52
- package/dist/tool-launcher.d.ts +0 -1
- package/dist/tool-secret-store.d.ts +0 -167
- package/dist/toolroll-update-cli.d.ts +0 -15
- package/dist/toolroll-update-ui.d.ts +0 -47
- package/dist/toolroll-update.d.ts +0 -265
- package/dist/tools-ui.d.ts +0 -51
- package/dist/transitions-recipes.d.ts +0 -1
- package/dist/tree-proof.d.ts +0 -34
- package/dist/tui-contract.d.ts +0 -144
- package/dist/tui-source.d.ts +0 -14
- package/dist/typed-start.d.ts +0 -51
- package/dist/unfenced-test-support.d.ts +0 -2
- package/dist/up-processes.d.ts +0 -162
- package/dist/up-role-child.d.ts +0 -1
- package/dist/update-notice.d.ts +0 -5
- package/dist/vanished-retry.d.ts +0 -30
- package/dist/verification-evidence.d.ts +0 -68
- package/dist/version.d.ts +0 -2
- package/dist/wake-hub.d.ts +0 -72
- package/dist/webhook-limits.d.ts +0 -23
- package/dist/webhook-readers.d.ts +0 -56
- package/dist/webhook-signing.d.ts +0 -27
- package/dist/webhooks.d.ts +0 -84
- package/dist/welcome-facts.d.ts +0 -18
- package/dist/when-html.d.ts +0 -40
- package/dist/work-index.d.ts +0 -175
- package/dist/work-summary.d.ts +0 -61
- package/dist/workspace-motion.d.ts +0 -4
- package/dist/workspace-revision.d.ts +0 -48
- package/dist/workspace-ui.d.ts +0 -385
- package/dist/worktree-notices.d.ts +0 -13
- package/dist/worktree.d.ts +0 -365
- package/dist/writes-mode.d.ts +0 -9
- package/dist/youiyoux-intake.d.ts +0 -234
package/dist/doctor.js
CHANGED
|
@@ -1,20 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `toolroll doctor`: whether Toolroll's own service holds a credential a build could read.
|
|
3
|
-
*
|
|
4
|
-
* A build runs as the operator's own user. Where no OS fence stops it (any build on Linux, where hidepid hides nothing
|
|
5
|
-
* from the same user; a Codex build anywhere, whose profile can't deny KERN_PROCARGS2; a Claude build without the
|
|
6
|
-
* macOS sandbox) it can read another process's launch arguments and environment: KERN_PROCARGS2 on macOS,
|
|
7
|
-
* /proc/<pid>/environ on Linux. Toolroll's own service is such a process, so its environment must hold no key:
|
|
8
|
-
* provider keys belong in Toolroll's key file (`toolroll keys set`), a tool's secrets on its Tools page, the runner
|
|
9
|
-
* token in its 0600 file.
|
|
10
|
-
*
|
|
11
|
-
* The doctor only reads: each installed service definition (a launchd plist; a systemd unit, its drop-ins and
|
|
12
|
-
* environment files), what `daemon install` would write, the environment a service inherits from its manager
|
|
13
|
-
* (`launchctl getenv`, `systemctl --user show-environment`), and the environment of each running service process.
|
|
14
|
-
* It reports names and where they are, never a value, with the exact steps for the owner. It never edits a unit,
|
|
15
|
-
* moves a key into a file or restarts anything. A key exported in the terminal that starts `toolroll up` keeps
|
|
16
|
-
* working (the ambient fallback); the doctor names it so the owner can choose.
|
|
17
|
-
*/
|
|
18
1
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
19
2
|
import { homedir } from "node:os";
|
|
20
3
|
import { join } from "node:path";
|
|
@@ -26,16 +9,10 @@ import { run as runCommand } from "./exec.js";
|
|
|
26
9
|
import { OWN_KEY_ENV } from "./keys.js";
|
|
27
10
|
import { ALL_CREDENTIAL_ENV } from "./provider.js";
|
|
28
11
|
import { SANDBOX_RUNTIME, sandboxRuntimeProblem, sandboxRuntimeWords } from "./sandbox-runtime.js";
|
|
29
|
-
/** Names that say they hold a credential. */
|
|
30
12
|
const CREDENTIAL_NAME = /(?:^|_)(?:API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|SECRET|SECRET_?KEY|TOKEN|AUTH_?TOKEN|PASSWORD|PASSWD|CREDENTIALS?|PAT)(?:_|$)/i;
|
|
31
|
-
/** Names that only point at one: a path, a socket, an address. */
|
|
32
13
|
const POINTER_NAME = /(?:_FILE|_PATH|_DIR|_SOCK|_URL|_HOST)$/i;
|
|
33
|
-
/** Launch flags whose next argument (or `=value`) is a credential. */
|
|
34
14
|
const CREDENTIAL_FLAG = /^--?(?:token|api-?key|key|secret|password|auth-token)$/i;
|
|
35
|
-
/** Toolroll's own launchd labels, current and from before the rename. */
|
|
36
15
|
const LABEL = /^(?:com\.toolroll|com\.standing-orders)\.[A-Za-z0-9._-]+$/;
|
|
37
|
-
/** The names among `pairs` that hold a credential: a provider key, a credential-looking name, or a key-shaped value.
|
|
38
|
-
* Values are only tested here and never leave. */
|
|
39
16
|
export function credentialNames(pairs) {
|
|
40
17
|
const found = new Set();
|
|
41
18
|
for (const [name, value] of pairs) {
|
|
@@ -46,7 +23,6 @@ export function credentialNames(pairs) {
|
|
|
46
23
|
}
|
|
47
24
|
return [...found].sort();
|
|
48
25
|
}
|
|
49
|
-
/** The flags of a launch command that carry a credential inline (`--token <value>`), and arguments that look like a key. */
|
|
50
26
|
function commandCredentials(args) {
|
|
51
27
|
const found = new Set();
|
|
52
28
|
args.forEach((arg, index) => {
|
|
@@ -59,14 +35,12 @@ function commandCredentials(args) {
|
|
|
59
35
|
return [...found].sort();
|
|
60
36
|
}
|
|
61
37
|
const unxml = (text) => text.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, '"').replace(/'/g, "'").replace(/&/g, "&");
|
|
62
|
-
/** A plist's EnvironmentVariables and ProgramArguments. */
|
|
63
38
|
function plistParts(content) {
|
|
64
39
|
const dict = /<key>EnvironmentVariables<\/key>\s*<dict>([\s\S]*?)<\/dict>/.exec(content)?.[1] ?? "";
|
|
65
40
|
const env = [...dict.matchAll(/<key>([^<]*)<\/key>\s*<string>([^<]*)<\/string>/g)].map(match => [unxml(match[1] ?? ""), unxml(match[2] ?? "")]);
|
|
66
41
|
const args = [...(/<key>ProgramArguments<\/key>\s*<array>([\s\S]*?)<\/array>/.exec(content)?.[1] ?? "").matchAll(/<string>([^<]*)<\/string>/g)].map(match => unxml(match[1] ?? ""));
|
|
67
42
|
return { env, args };
|
|
68
43
|
}
|
|
69
|
-
/** A systemd line's words, its "quotes" undone. */
|
|
70
44
|
function systemdWords(line) {
|
|
71
45
|
return (line.match(/"(?:[^"\\]|\\.)*"|'[^']*'|\S+/g) ?? []).map(word => word.startsWith('"') ? word.slice(1, -1).replace(/\\(.)/g, "$1") : word.startsWith("'") ? word.slice(1, -1) : word);
|
|
72
46
|
}
|
|
@@ -74,12 +48,10 @@ const assignment = (word) => {
|
|
|
74
48
|
const at = word.indexOf("=");
|
|
75
49
|
return at <= 0 ? null : [word.slice(0, at), word.slice(at + 1)];
|
|
76
50
|
};
|
|
77
|
-
/** `NAME=value` lines (an EnvironmentFile, `show-environment`), comments and blanks skipped. */
|
|
78
51
|
function envLines(text) {
|
|
79
52
|
return text.split("\n").map(line => line.trim()).filter(line => line !== "" && !line.startsWith("#") && !line.startsWith(";"))
|
|
80
53
|
.flatMap(line => { const pair = assignment(line.replace(/^export\s+/, "")); return pair === null ? [] : [[pair[0], pair[1].replace(/^(["'])(.*)\1$/, "$2")]]; });
|
|
81
54
|
}
|
|
82
|
-
/** A systemd unit's (or drop-in's) Environment= assignments, ExecStart words and EnvironmentFile= paths. */
|
|
83
55
|
function systemdParts(content) {
|
|
84
56
|
const env = [];
|
|
85
57
|
const files = [];
|
|
@@ -103,8 +75,6 @@ function systemdParts(content) {
|
|
|
103
75
|
}
|
|
104
76
|
return { env, args, files };
|
|
105
77
|
}
|
|
106
|
-
/** Only understood options may enter remediation. Free-form values are never reflected, even when they
|
|
107
|
-
* look like paths or runner names: any one could actually contain a credential. */
|
|
108
78
|
function reinstallCommand(args) {
|
|
109
79
|
const at = args.indexOf("watch");
|
|
110
80
|
if (at < 0)
|
|
@@ -124,7 +94,6 @@ function reinstallCommand(args) {
|
|
|
124
94
|
const flag = equal < 0 ? arg : arg.slice(0, equal);
|
|
125
95
|
const value = equal < 0 ? args[index + 1] : arg.slice(equal + 1);
|
|
126
96
|
const known = freeform.has(flag) || numeric.has(flag) || Object.hasOwn(enums, flag);
|
|
127
|
-
// A credential's value is the next argument even when it starts with "-" (random base64url can).
|
|
128
97
|
if (equal < 0 && value !== undefined && (CREDENTIAL_FLAG.test(flag) || (known && !value.startsWith("-"))))
|
|
129
98
|
index += 1;
|
|
130
99
|
if (flag === "--token") {
|
|
@@ -151,9 +120,7 @@ function reinstallSteps(command) {
|
|
|
151
120
|
"Save provider keys with `toolroll keys set` and project tool secrets on the project's Tools page before reinstalling. Review the completed command, then run it yourself; nothing has been changed.",
|
|
152
121
|
];
|
|
153
122
|
}
|
|
154
|
-
/** One shell word, quoted when it needs to be. */
|
|
155
123
|
const quote = (part) => /^[A-Za-z0-9@%+=:,./_-]+$/.test(part) ? part : `'${part.replace(/'/g, "'\\''")}'`;
|
|
156
|
-
/** Where a provider key goes instead, per provider, or the general home for any other secret. */
|
|
157
124
|
function keySteps(names) {
|
|
158
125
|
const providers = [...new Set(names.flatMap(name => Object.entries(OWN_KEY_ENV).filter(([, env]) => env.includes(name)).map(([provider]) => provider)))].sort();
|
|
159
126
|
return [
|
|
@@ -162,7 +129,6 @@ function keySteps(names) {
|
|
|
162
129
|
? ["Set a project tool's secret on that project's Tools page; anything else the service doesn't need can simply go."] : []),
|
|
163
130
|
];
|
|
164
131
|
}
|
|
165
|
-
/** Toolroll's installed service definitions on this computer, current and older names alike. */
|
|
166
132
|
function installedServices(platform, home) {
|
|
167
133
|
const dir = platform === "darwin" ? join(home, "Library", "LaunchAgents") : join(home, ".config", "systemd", "user");
|
|
168
134
|
const suffix = platform === "darwin" ? ".plist" : ".service";
|
|
@@ -176,8 +142,6 @@ function installedServices(platform, home) {
|
|
|
176
142
|
return names.filter(name => name.endsWith(suffix) && LABEL.test(name.slice(0, -suffix.length))).sort()
|
|
177
143
|
.flatMap(name => { const one = installedServiceDefinition({ label: name.slice(0, -suffix.length), platform, home }); return one === null ? [] : [one]; });
|
|
178
144
|
}
|
|
179
|
-
/** A running process's environment names (never values) that hold a credential: macOS through `ps -E`, which reads
|
|
180
|
-
* KERN_PROCARGS2; Linux from /proc/<pid>/environ. */
|
|
181
145
|
export async function processCredentialNames(pid, deps) {
|
|
182
146
|
if (deps.platform === "linux") {
|
|
183
147
|
try {
|
|
@@ -202,10 +166,6 @@ export async function processCredentialNames(pid, deps) {
|
|
|
202
166
|
const tail = whole.slice(command.length).trimStart();
|
|
203
167
|
if (tail === "")
|
|
204
168
|
return { ok: true, names: [] };
|
|
205
|
-
// ps separates entries with spaces and doesn't quote, so a value with spaces can look like more entries. Read it
|
|
206
|
-
// names-only: every NAME= at the start or after a space is a candidate (a few may be text inside a value, which
|
|
207
|
-
// only ever adds a name to report), each candidate's value runs to the next one, and the whole tail is also scanned
|
|
208
|
-
// for key-shaped text so a secret inside a value is never missed. Fail closed only when nothing parses.
|
|
209
169
|
if (!/^[A-Za-z_][A-Za-z0-9_]*=/.test(tail)) {
|
|
210
170
|
return { ok: false, problem: "ps returned an environment Toolroll couldn't parse" };
|
|
211
171
|
}
|
|
@@ -218,7 +178,6 @@ export async function processCredentialNames(pid, deps) {
|
|
|
218
178
|
}
|
|
219
179
|
return { ok: false, problem: `Toolroll can't read a process's environment on ${deps.platform}` };
|
|
220
180
|
}
|
|
221
|
-
/** Audit what Toolroll's service holds. Reads only; the report names variables, never their values. */
|
|
222
181
|
export async function auditServiceEnvironment(deps = {}) {
|
|
223
182
|
const platform = deps.platform ?? process.platform;
|
|
224
183
|
const home = deps.home ?? homedir();
|
|
@@ -227,8 +186,6 @@ export async function auditServiceEnvironment(deps = {}) {
|
|
|
227
186
|
const report = { ok: true, checked: [], findings: [], unreadable: [], notes: [] };
|
|
228
187
|
const find = (where, names, steps) => { if (names.length > 0)
|
|
229
188
|
report.findings.push({ where, names, steps }); };
|
|
230
|
-
// The ambient fallback: a key in this terminal keeps working for a Toolroll started here, and the owner should know
|
|
231
|
-
// that Toolroll would then hold it.
|
|
232
189
|
const ambient = credentialNames(Object.entries(deps.env ?? process.env).filter((pair) => ALL_CREDENTIAL_ENV.includes(pair[0]) && typeof pair[1] === "string"));
|
|
233
190
|
if (ambient.length > 0) {
|
|
234
191
|
report.notes.push(`This terminal exports ${ambient.join(", ")}. A Toolroll started from here still uses it when no key is saved, and holds it where a build without the macOS sandbox could read it. ${keySteps(ambient).join(" ")} Then remove the export from your shell profile.`);
|
|
@@ -239,7 +196,6 @@ export async function auditServiceEnvironment(deps = {}) {
|
|
|
239
196
|
report.ok = false;
|
|
240
197
|
return report;
|
|
241
198
|
}
|
|
242
|
-
// What `daemon install` writes: planned exactly as install plans it, from this process's own environment.
|
|
243
199
|
const planned = planDaemon({ platform, bin: process.execPath, binArgs: [], runner: "runner", repo: home, configDir: join(home, ".toolroll"), watchFlags: [], home });
|
|
244
200
|
if (!("error" in planned)) {
|
|
245
201
|
const parts = platform === "darwin" ? plistParts(planned.unitContent) : systemdParts(planned.unitContent);
|
|
@@ -248,12 +204,10 @@ export async function auditServiceEnvironment(deps = {}) {
|
|
|
248
204
|
}
|
|
249
205
|
const services = installedServices(platform, home);
|
|
250
206
|
report.checked.push(services.length === 0 ? "No Toolroll service is installed." : `Installed services: ${services.map(one => one.label).join(", ")}.`);
|
|
251
|
-
// The environment every service of this login inherits from its manager.
|
|
252
207
|
if (platform === "darwin") {
|
|
253
208
|
const inherited = [];
|
|
254
209
|
let failed = null;
|
|
255
210
|
for (const name of ALL_CREDENTIAL_ENV) {
|
|
256
|
-
// An unset name answers exit 0 and nothing; any other exit is a read that didn't happen.
|
|
257
211
|
const answer = await run("launchctl", ["getenv", name]);
|
|
258
212
|
if (answer.code !== 0)
|
|
259
213
|
failed ??= answer.code;
|
|
@@ -385,7 +339,6 @@ export async function auditServiceEnvironment(deps = {}) {
|
|
|
385
339
|
report.ok = report.findings.length === 0 && report.unreadable.length === 0;
|
|
386
340
|
return report;
|
|
387
341
|
}
|
|
388
|
-
/** The report as the owner reads it: one state, then each finding with its steps; detail after. */
|
|
389
342
|
export function doctorLines(report) {
|
|
390
343
|
const lines = [];
|
|
391
344
|
if (report.git?.problem != null)
|
|
@@ -426,7 +379,6 @@ export async function runDoctorCommand(argv, write, deps = {}) {
|
|
|
426
379
|
}
|
|
427
380
|
const report = await auditServiceEnvironment(deps);
|
|
428
381
|
report.sandbox = { engine: SANDBOX_RUNTIME.name, version: SANDBOX_RUNTIME.version, problem: sandboxRuntimeProblem() };
|
|
429
|
-
// A git older than the floor: named here too, and the console and worker won't start on it.
|
|
430
382
|
report.git = { floor: GIT_FLOOR_WORDS, problem: deps.gitFloorProblem === undefined ? installedGitFloorProblem() : deps.gitFloorProblem };
|
|
431
383
|
if (report.git.problem !== null)
|
|
432
384
|
report.ok = false;
|
package/dist/easy-start-args.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
/** Which invocations are an easy start (easy-start.ts), kept apart so the CLI's entry decides without loading it. */
|
|
2
|
-
/** The flags bare `toolroll` takes at a terminal (--web, --project-root <dir>), or null: not an easy start. */
|
|
3
1
|
export function easyStartArgs(argv) {
|
|
4
|
-
let web = false, projectRoot = null;
|
|
2
|
+
let web = false, projectRoot = null, port = null;
|
|
5
3
|
for (let index = 0; index < argv.length; index += 1) {
|
|
6
4
|
const one = argv[index];
|
|
7
5
|
if (one === "--web" && !web)
|
|
8
6
|
web = true;
|
|
9
|
-
else if (one === "--project-root" && projectRoot === null) {
|
|
7
|
+
else if ((one === "--project-root" && projectRoot === null) || (one === "--port" && port === null)) {
|
|
10
8
|
const value = argv[index + 1];
|
|
11
9
|
if (value === undefined || value === "" || value.startsWith("-"))
|
|
12
10
|
return null;
|
|
13
|
-
|
|
11
|
+
if (one === "--port")
|
|
12
|
+
port = value;
|
|
13
|
+
else
|
|
14
|
+
projectRoot = value;
|
|
14
15
|
index += 1;
|
|
15
16
|
}
|
|
16
17
|
else
|
|
17
18
|
return null;
|
|
18
19
|
}
|
|
19
|
-
return { web, projectRoot };
|
|
20
|
+
return { web, projectRoot, port };
|
|
20
21
|
}
|
|
21
|
-
/** Whether this invocation is an easy start: only those flags, a person at a terminal, no coding agent. */
|
|
22
22
|
export function easyStartApplies(argv, facts) {
|
|
23
23
|
return facts.stdin && facts.stdout && !facts.agent && easyStartArgs(argv) !== null;
|
|
24
24
|
}
|
package/dist/easy-start.js
CHANGED
|
@@ -1,45 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EASY START (easy-start plan A, D, E): bare `toolroll` at a terminal, and `toolroll open`.
|
|
3
|
-
*
|
|
4
|
-
* At a person's terminal (stdin and stdout a TTY, no --json, not under a coding agent), bare `toolroll` makes sure this
|
|
5
|
-
* computer's Toolroll is running and opens the terminal UI on it:
|
|
6
|
-
*
|
|
7
|
-
* - The console is proved live first (console-instance.ts, both channels). When it isn't running: the background
|
|
8
|
-
* service, if installed, is started through its supervisor; otherwise `up --laptop` starts as an ORDINARY child of
|
|
9
|
-
* this process, so quitting the screen ends it through `up`'s own parent-death drain (today's foreground semantics).
|
|
10
|
-
* - With local mode on, the terminal UI opens in this process as the local owner (runAsLocalOwner): reads in-process,
|
|
11
|
-
* writes through `runOperate`, refused wherever the local owner is. `--web` opens the browser instead, signed in
|
|
12
|
-
* through the console's socket `link` verb (or, with nothing running, runs `up --laptop` in the foreground, which
|
|
13
|
-
* opens it).
|
|
14
|
-
* - With local mode off (an install with passwords), nothing in the terminal writes: today's flow opens the browser,
|
|
15
|
-
* where the person signs in with their password.
|
|
16
|
-
*
|
|
17
|
-
* Every outside effect is a seam; `defaultEasyStartSeams` gives the real ones. Under an agent, without a terminal or
|
|
18
|
-
* with --json, cli.ts never comes here: those keep exactly the behaviour they had (quick-start.ts and the scan).
|
|
19
|
-
*/
|
|
20
1
|
import { spawn } from "node:child_process";
|
|
21
2
|
import { existsSync, realpathSync } from "node:fs";
|
|
22
3
|
import { pathToFileURL } from "node:url";
|
|
23
4
|
import { requestLocalLink } from "./console-instance.js";
|
|
24
5
|
import { backgroundInstalled, backgroundOn, startInstalledService } from "./laptop-background.js";
|
|
25
6
|
import { proveConsoleReadOnly } from "./quick-start.js";
|
|
26
|
-
import { backgroundAsked, localModeOf, openStore, openStoreReadOnly, recordBackgroundAsked } from "./store.js";
|
|
7
|
+
import { backgroundAsked, localModeCandidate, localModeOf, openStore, openStoreReadOnly, recordBackgroundAsked } from "./store.js";
|
|
8
|
+
import { underAgent } from "./prompt.js";
|
|
27
9
|
export { easyStartApplies, easyStartArgs } from "./easy-start-args.js";
|
|
28
|
-
const EXIT = { ok: 0, failed: 1, refused: 3 };
|
|
29
|
-
/**
|
|
30
|
-
* Bare `toolroll` ("start") or `toolroll open` ("open") at a person's terminal. Resolves with the exit code once the
|
|
31
|
-
* screen (or the foreground `up`, or the browser hand-off) is done.
|
|
32
|
-
*/
|
|
10
|
+
const EXIT = { ok: 0, failed: 1, usage: 2, refused: 3 };
|
|
33
11
|
export async function runEasyStart(mode, args, seams) {
|
|
34
12
|
const { write } = seams;
|
|
35
|
-
const
|
|
13
|
+
const port = args.port === undefined || args.port === null ? null : Number(args.port);
|
|
14
|
+
if (port !== null && (!/^[0-9]{1,5}$/.test(args.port) || port < 1 || port > 65_535)) {
|
|
15
|
+
write("--port is a whole number from 1 to 65535.");
|
|
16
|
+
return EXIT.usage;
|
|
17
|
+
}
|
|
18
|
+
const rootArgs = [...(args.projectRoot === null ? [] : ["--project-root", args.projectRoot]), ...(port === null ? [] : ["--port", String(port)])];
|
|
19
|
+
const elsewhere = (proof) => {
|
|
20
|
+
if (port !== null && proof.ok && proof.port !== port)
|
|
21
|
+
write(`Toolroll is already set up on port ${proof.port}, so it opens there.`);
|
|
22
|
+
};
|
|
36
23
|
const sleep = seams.sleep ?? (ms => new Promise(resolve => setTimeout(resolve, ms)));
|
|
37
24
|
const first = await seams.prove();
|
|
38
25
|
if (!first.ok && first.state === "refused") {
|
|
39
26
|
write(`Toolroll can't open: ${first.message}.`);
|
|
40
27
|
return EXIT.refused;
|
|
41
28
|
}
|
|
42
|
-
// Attaching to a console already running: this folder's repository joins it, as bare `toolroll` always did.
|
|
43
29
|
const joinRepo = async () => {
|
|
44
30
|
if (mode !== "start")
|
|
45
31
|
return EXIT.ok;
|
|
@@ -50,26 +36,29 @@ export async function runEasyStart(mode, args, seams) {
|
|
|
50
36
|
try {
|
|
51
37
|
repo = realpathSync(found);
|
|
52
38
|
}
|
|
53
|
-
catch {
|
|
39
|
+
catch { }
|
|
54
40
|
return (await seams.enrolled(repo)) ? EXIT.ok : seams.admit(repo);
|
|
55
41
|
};
|
|
56
|
-
|
|
57
|
-
if (
|
|
42
|
+
let local = seams.localMode();
|
|
43
|
+
if ((local === "candidate" || local === "absent") && !first.ok && first.state === "none" && await seams.initLocal())
|
|
44
|
+
local = "on";
|
|
45
|
+
if (local === "candidate")
|
|
46
|
+
local = "off";
|
|
47
|
+
if (local === "off") {
|
|
58
48
|
if (!first.ok)
|
|
59
49
|
return seams.runUpForeground(rootArgs);
|
|
60
50
|
const joined = await joinRepo();
|
|
61
51
|
if (joined !== EXIT.ok)
|
|
62
52
|
return joined;
|
|
53
|
+
elsewhere(first);
|
|
63
54
|
write(`Toolroll is on ${first.url}`);
|
|
64
55
|
await seams.openBrowser(first.url);
|
|
65
56
|
return EXIT.ok;
|
|
66
57
|
}
|
|
67
|
-
// --web with nothing running and no service: `up --laptop` in this terminal opens the browser itself, signed in.
|
|
68
58
|
if (args.web && !first.ok && !seams.serviceInstalled())
|
|
69
59
|
return seams.runUpForeground(["--laptop", ...rootArgs]);
|
|
70
60
|
let owned = null;
|
|
71
61
|
const upArgs = ["--laptop", "--no-open", ...rootArgs];
|
|
72
|
-
/** Start our own `up` and wait until its console proves live (or it ends, or the wait runs out). */
|
|
73
62
|
const startOwned = async () => {
|
|
74
63
|
const child = seams.spawnUp(upArgs);
|
|
75
64
|
owned = child;
|
|
@@ -103,8 +92,8 @@ export async function runEasyStart(mode, args, seams) {
|
|
|
103
92
|
if (joined !== EXIT.ok)
|
|
104
93
|
return joined;
|
|
105
94
|
}
|
|
95
|
+
elsewhere(proof);
|
|
106
96
|
const url = proof.url;
|
|
107
|
-
/** The `up` this process owns, while it runs. */
|
|
108
97
|
const ownedNow = () => (owned !== null && owned.running() ? owned : null);
|
|
109
98
|
const waitOwned = async () => {
|
|
110
99
|
const child = ownedNow();
|
|
@@ -114,7 +103,6 @@ export async function runEasyStart(mode, args, seams) {
|
|
|
114
103
|
await child.exited;
|
|
115
104
|
return EXIT.ok;
|
|
116
105
|
};
|
|
117
|
-
// No local mode here (a new install on a computer with no sandbox): the browser, with the password `up` saved.
|
|
118
106
|
if (seams.localMode() !== "on") {
|
|
119
107
|
write(`Toolroll is on ${url}. Sign in with your password.`);
|
|
120
108
|
await seams.openBrowser(url);
|
|
@@ -131,12 +119,10 @@ export async function runEasyStart(mode, args, seams) {
|
|
|
131
119
|
await seams.openBrowser(link.url);
|
|
132
120
|
return waitOwned();
|
|
133
121
|
}
|
|
134
|
-
/** Move to the background service, handing over from our own `up` (background on stops it and proves it gone). */
|
|
135
122
|
const handoff = async () => {
|
|
136
123
|
const child = ownedNow();
|
|
137
124
|
const result = await seams.backgroundOn(child === null ? null : {
|
|
138
125
|
controllerPid: child.pid,
|
|
139
|
-
// The service didn't take over: our own `up` starts again, as before.
|
|
140
126
|
restart: async () => { const again = await startOwned(); if (!again.ok)
|
|
141
127
|
throw Error(again.message); },
|
|
142
128
|
});
|
|
@@ -175,14 +161,12 @@ export async function runEasyStart(mode, args, seams) {
|
|
|
175
161
|
}
|
|
176
162
|
return EXIT.ok;
|
|
177
163
|
}
|
|
178
|
-
/** `up` as an ordinary child of this process: its output kept (last lines, for a failed start), never on the screen. */
|
|
179
164
|
export function spawnOwnedUp(args, options) {
|
|
180
165
|
const entry = options.entry ?? process.argv[1];
|
|
181
166
|
if (entry === undefined)
|
|
182
167
|
throw Error("can't find Toolroll's own command to start it");
|
|
183
168
|
const child = spawn(process.execPath, [...process.execArgv, entry, "up", ...args, "--db", options.databaseFile], {
|
|
184
169
|
cwd: options.cwd,
|
|
185
|
-
// An IPC channel: if this process ends without stopping it, `up` sees its parent go and drains (operate.ts).
|
|
186
170
|
stdio: ["ignore", "pipe", "pipe", "ipc"],
|
|
187
171
|
});
|
|
188
172
|
const lines = [];
|
|
@@ -203,7 +187,6 @@ export function spawnOwnedUp(args, options) {
|
|
|
203
187
|
return { pid: child.pid ?? -1, exited, running: () => running, stop: () => { if (running)
|
|
204
188
|
child.kill("SIGTERM"); }, tail: () => [...lines] };
|
|
205
189
|
}
|
|
206
|
-
/** The real seams, for this installation's database. */
|
|
207
190
|
export function defaultEasyStartSeams(options) {
|
|
208
191
|
const file = options.databaseFile;
|
|
209
192
|
const cwd = options.cwd ?? process.cwd();
|
|
@@ -213,6 +196,10 @@ export function defaultEasyStartSeams(options) {
|
|
|
213
196
|
write: options.write,
|
|
214
197
|
prove: () => proveConsoleReadOnly(file, options.build),
|
|
215
198
|
localMode: () => localModeRead(file),
|
|
199
|
+
initLocal: async () => (await import("./operate.js")).easyStartInitLocalMode(file, {
|
|
200
|
+
stdin: process.stdin.isTTY === true, stdout: process.stdout.isTTY === true, agent: underAgent(process.env), json: false,
|
|
201
|
+
remote: (await import("./local-owner.js")).localOwnerRequested(),
|
|
202
|
+
}),
|
|
216
203
|
serviceInstalled: () => backgroundInstalled(),
|
|
217
204
|
startService: async () => {
|
|
218
205
|
const store = openStore(file);
|
|
@@ -252,7 +239,6 @@ export function defaultEasyStartSeams(options) {
|
|
|
252
239
|
backgroundOn: async (foreground) => {
|
|
253
240
|
const store = openStore(file);
|
|
254
241
|
try {
|
|
255
|
-
// At this terminal, but the screen owns its input: another service on this database is refused, not asked.
|
|
256
242
|
const on = await backgroundOn(store, file, null, { terminal: false, ...(foreground === null ? {} : { foreground }) });
|
|
257
243
|
if (on.ok)
|
|
258
244
|
return { ok: true, message: `Toolroll now runs in the background at ${on.url}. It starts when you log in.` };
|
|
@@ -264,7 +250,6 @@ export function defaultEasyStartSeams(options) {
|
|
|
264
250
|
},
|
|
265
251
|
backgroundAsked: () => {
|
|
266
252
|
const store = openStoreReadOnly(file);
|
|
267
|
-
// Unreadable: never ask on the strength of a database this build can't read.
|
|
268
253
|
if (store === null)
|
|
269
254
|
return true;
|
|
270
255
|
try {
|
|
@@ -296,15 +281,12 @@ export function defaultEasyStartSeams(options) {
|
|
|
296
281
|
admit: options.admit,
|
|
297
282
|
};
|
|
298
283
|
}
|
|
299
|
-
/** The terminal UI bundle (dist/tui.js, built from src/tui/entry.tsx), loaded only when the screen opens. */
|
|
300
284
|
async function loadTui() {
|
|
301
285
|
const bundled = new URL("./tui.js", import.meta.url);
|
|
302
286
|
if (existsSync(bundled))
|
|
303
287
|
return await import(bundled.href);
|
|
304
|
-
// From source (`npm run dev`): the entry itself.
|
|
305
288
|
return await import(pathToFileURL(new URL("./tui/entry.tsx", import.meta.url).pathname).href);
|
|
306
289
|
}
|
|
307
|
-
/** Local mode as saved, read only: "absent" with no database yet; an older database has none ("off"). */
|
|
308
290
|
export function localModeRead(file) {
|
|
309
291
|
if (file !== ":memory:" && !existsSync(file))
|
|
310
292
|
return "absent";
|
|
@@ -312,7 +294,12 @@ export function localModeRead(file) {
|
|
|
312
294
|
if (store === null)
|
|
313
295
|
return "off";
|
|
314
296
|
try {
|
|
315
|
-
|
|
297
|
+
if (localModeOf(store)?.enabled === true)
|
|
298
|
+
return "on";
|
|
299
|
+
return localModeCandidate(store) ? "candidate" : "off";
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
return "off";
|
|
316
303
|
}
|
|
317
304
|
finally {
|
|
318
305
|
store.close();
|
package/dist/egress.js
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What a build may reach on the network (docs/plans/agent-baseline-hardening.md, arc 1).
|
|
3
|
-
*
|
|
4
|
-
* A run's network is part of its sealed execution profile: the hosts it may reach are resolved once, when the scope
|
|
5
|
-
* is written (the provider's own hosts, the package registries the project's own checkout names,
|
|
6
|
-
* and the project's added hosts), and that snapshot is what the approval binds and the launch enforces. Nothing at
|
|
7
|
-
* launch re-derives it from settings changed since or from files the agent wrote.
|
|
8
|
-
*
|
|
9
|
-
* The launch enforces it at the operating system (Anthropic's sandbox-runtime: its Seatbelt network rules on macOS, a
|
|
10
|
-
* network namespace on Linux with the proxy relayed in) and reaches the world through one proxy of its own (startEgressProxy), which admits only the
|
|
11
|
-
* snapshot's hosts. The proxy never decrypts TLS: it restricts where a build connects, not what it sends there.
|
|
12
|
-
*/
|
|
13
1
|
import { createServer, request as httpRequest } from "node:http";
|
|
14
2
|
import { randomBytes, timingSafeEqual } from "node:crypto";
|
|
15
3
|
import { isIP } from "node:net";
|
|
@@ -19,25 +7,16 @@ import { basename, join } from "node:path";
|
|
|
19
7
|
import { connectFirst, isPublicAddress } from "./scout-net.js";
|
|
20
8
|
import { lookup as dnsLookup } from "node:dns/promises";
|
|
21
9
|
import { folderAnswers } from "./folder-gate.js";
|
|
22
|
-
/** The policy's shape version: a worker enforces the versions it knows and refuses any other. */
|
|
23
10
|
export const NETWORK_POLICY_VERSION = 1;
|
|
24
11
|
export const PROJECT_NETWORK_DEFAULT = { mode: "allowlist", hosts: [], loopback: "proxy-only" };
|
|
25
|
-
/** At most this many hosts a project adds (a list longer than this is a different policy: open). */
|
|
26
12
|
export const MAX_NETWORK_HOSTS = 200;
|
|
27
|
-
/** At most this many in a sealed snapshot: the project's, plus its provider's and every registry's. */
|
|
28
13
|
export const MAX_SNAPSHOT_HOSTS = MAX_NETWORK_HOSTS + 100;
|
|
29
|
-
/**
|
|
30
|
-
* A host as a policy names it: lowercase ASCII (an international name in its punycode form), no trailing dot, at
|
|
31
|
-
* least two labels, each 1–63 letters, digits or hyphens; or `*.` and such a name, for every name under it. Never an
|
|
32
|
-
* IP address, a port, a path or a bare top-level name. Null when it is none of these.
|
|
33
|
-
*/
|
|
34
14
|
export function normalizeHost(input) {
|
|
35
15
|
const trimmed = input.trim().toLowerCase().replace(/\.$/, "");
|
|
36
16
|
const wildcard = trimmed.startsWith("*.");
|
|
37
17
|
const bare = wildcard ? trimmed.slice(2) : trimmed;
|
|
38
18
|
if (bare === "" || bare.length > 253 || isIP(bare.replace(/^\[|\]$/g, "")) !== 0)
|
|
39
19
|
return null;
|
|
40
|
-
// Nothing of a URL's other parts: the converter below would quietly cut a name at a slash or a colon.
|
|
41
20
|
if (/[\s/\\:@?#%[\]*,;]/.test(bare))
|
|
42
21
|
return null;
|
|
43
22
|
const ascii = domainToASCII(bare);
|
|
@@ -48,23 +27,16 @@ export function normalizeHost(input) {
|
|
|
48
27
|
return null;
|
|
49
28
|
if (!labels.every(label => /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(label)))
|
|
50
29
|
return null;
|
|
51
|
-
// A name whose last label is all digits reads as an address to too many resolvers.
|
|
52
30
|
if (/^\d+$/.test(labels.at(-1)))
|
|
53
31
|
return null;
|
|
54
32
|
return wildcard ? `*.${ascii}` : ascii;
|
|
55
33
|
}
|
|
56
|
-
/** Whether `host` (as a client named it) is one a policy's list admits: an exact name, or a name under a `*.` entry. */
|
|
57
34
|
export function hostAllowed(host, hosts) {
|
|
58
35
|
const name = normalizeHost(host);
|
|
59
36
|
if (name === null || name.startsWith("*."))
|
|
60
37
|
return false;
|
|
61
38
|
return hosts.some(entry => entry === name || (entry.startsWith("*.") && name.endsWith(entry.slice(1))));
|
|
62
39
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Each provider's own hosts (catalog version 1): its model API and the sign-in refresh its CLI needs. Codex starts
|
|
65
|
-
* its harness outside its command sandbox, so its hosts matter only to what its commands may reach. An ACP agent
|
|
66
|
-
* talks to whatever model service it was set up with; its row names the hosts its own service uses.
|
|
67
|
-
*/
|
|
68
40
|
export const PROVIDER_HOSTS = {
|
|
69
41
|
claude: ["api.anthropic.com", "console.anthropic.com", "platform.claude.com"],
|
|
70
42
|
codex: ["api.openai.com", "chatgpt.com", "auth.openai.com"],
|
|
@@ -74,7 +46,6 @@ export const PROVIDER_HOSTS = {
|
|
|
74
46
|
cursor: ["*.cursor.sh", "*.cursor.com"],
|
|
75
47
|
cline: ["api.cline.bot"],
|
|
76
48
|
qwen: ["chat.qwen.ai", "dashscope.aliyuncs.com", "dashscope-intl.aliyuncs.com"],
|
|
77
|
-
// Goose talks to whatever model service it is set up with: a project using it adds that service's host.
|
|
78
49
|
goose: [],
|
|
79
50
|
};
|
|
80
51
|
export const REGISTRY_HOSTS = {
|
|
@@ -85,7 +56,6 @@ export const REGISTRY_HOSTS = {
|
|
|
85
56
|
ruby: ["rubygems.org", "index.rubygems.org"],
|
|
86
57
|
jvm: ["repo.maven.apache.org", "repo1.maven.org", "plugins.gradle.org", "services.gradle.org", "downloads.gradle.org"],
|
|
87
58
|
};
|
|
88
|
-
/** The files that name each ecosystem, by file name wherever they are in the tree. */
|
|
89
59
|
const ECOSYSTEM_FILES = {
|
|
90
60
|
"package.json": "npm", "package-lock.json": "npm", "npm-shrinkwrap.json": "npm", "yarn.lock": "npm", "pnpm-lock.yaml": "npm", "bun.lock": "npm", "bun.lockb": "npm",
|
|
91
61
|
"pyproject.toml": "python", "requirements.txt": "python", "pipfile": "python", "pipfile.lock": "python", "poetry.lock": "python", "uv.lock": "python", "setup.py": "python", "setup.cfg": "python",
|
|
@@ -94,7 +64,6 @@ const ECOSYSTEM_FILES = {
|
|
|
94
64
|
"gemfile": "ruby", "gemfile.lock": "ruby",
|
|
95
65
|
"pom.xml": "jvm", "build.gradle": "jvm", "build.gradle.kts": "jvm", "settings.gradle": "jvm", "settings.gradle.kts": "jvm",
|
|
96
66
|
};
|
|
97
|
-
/** The ecosystems a list of repository paths names (requirements-*.txt counts as Python). */
|
|
98
67
|
export function ecosystemsOf(paths) {
|
|
99
68
|
const found = new Set();
|
|
100
69
|
for (const path of paths) {
|
|
@@ -105,18 +74,9 @@ export function ecosystemsOf(paths) {
|
|
|
105
74
|
}
|
|
106
75
|
return [...found].sort();
|
|
107
76
|
}
|
|
108
|
-
/** How deep and how wide the walk for ecosystem files goes (a monorepo names its ecosystems near its root). */
|
|
109
77
|
const WALK_DEPTH = 3, WALK_LIMIT = 5_000;
|
|
110
78
|
const WALK_SKIP = new Set(["node_modules", "vendor", "target", "dist", "build", "venv", "__pycache__"]);
|
|
111
|
-
/**
|
|
112
|
-
* The ecosystems the project's own checkout names: its files a few folders deep, read straight from the folder the
|
|
113
|
-
* plane registered (which no build can write: agent-fence.ts taskBoundary), never a build's worktree. No process is
|
|
114
|
-
* started and nothing in the repository runs. An unreadable folder names none: its builds reach the provider and the
|
|
115
|
-
* project's own hosts only.
|
|
116
|
-
*/
|
|
117
79
|
export function repositoryEcosystems(repo) {
|
|
118
|
-
// In the console, a folder that hasn't answered a look lately is not walked on its thread (folder-gate.ts): it names
|
|
119
|
-
// none, as an unreadable folder does.
|
|
120
80
|
if (!folderAnswers(repo))
|
|
121
81
|
return [];
|
|
122
82
|
const paths = [];
|
|
@@ -140,7 +100,6 @@ export function repositoryEcosystems(repo) {
|
|
|
140
100
|
walk(repo, 0);
|
|
141
101
|
return ecosystemsOf(paths);
|
|
142
102
|
}
|
|
143
|
-
/** The network a new scope is written with: the project's setting, its provider's hosts and its ecosystems' registries. */
|
|
144
103
|
export function resolveNetwork(provider, project, ecosystems) {
|
|
145
104
|
if (project.mode === "open")
|
|
146
105
|
return { version: NETWORK_POLICY_VERSION, mode: "open", hosts: [], loopback: project.loopback };
|
|
@@ -151,19 +110,12 @@ export function resolveNetwork(provider, project, ecosystems) {
|
|
|
151
110
|
]);
|
|
152
111
|
return { version: NETWORK_POLICY_VERSION, mode: "allowlist", hosts: [...hosts].sort(), loopback: project.loopback };
|
|
153
112
|
}
|
|
154
|
-
/** The network of a launch nothing sealed one for (a planner, a check): its provider's own hosts and nothing else. */
|
|
155
113
|
export function providerOnlyNetwork(provider) {
|
|
156
114
|
return { version: NETWORK_POLICY_VERSION, mode: "allowlist", hosts: [...new Set(PROVIDER_HOSTS[provider] ?? [])].sort(), loopback: "proxy-only" };
|
|
157
115
|
}
|
|
158
|
-
/**
|
|
159
|
-
* The network an approval sealed before network policies existed runs under: a deliberate narrowing (provider hosts
|
|
160
|
-
* and the repository's registries, nothing the project added since, local services of this Mac out of reach). Never
|
|
161
|
-
* widened by a setting changed after it was approved.
|
|
162
|
-
*/
|
|
163
116
|
export function legacyNetwork(provider, ecosystems) {
|
|
164
117
|
return { ...resolveNetwork(provider, { mode: "allowlist", hosts: [], loopback: "proxy-only" }, ecosystems) };
|
|
165
118
|
}
|
|
166
|
-
/** Strict re-hydration (scope.ts profileFromJson): exactly the keys this code writes, every host normalized, or null. */
|
|
167
119
|
export function networkFromValue(value) {
|
|
168
120
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
169
121
|
return null;
|
|
@@ -191,7 +143,6 @@ export function networkFromValue(value) {
|
|
|
191
143
|
return null;
|
|
192
144
|
return { version: NETWORK_POLICY_VERSION, mode: v["mode"], hosts, loopback: v["loopback"] };
|
|
193
145
|
}
|
|
194
|
-
/** A project setting as saved (store.ts project_network), or null when it isn't one this code wrote. */
|
|
195
146
|
export function projectNetworkFromValue(value) {
|
|
196
147
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
197
148
|
return null;
|
|
@@ -205,7 +156,6 @@ export function projectNetworkFromValue(value) {
|
|
|
205
156
|
return null;
|
|
206
157
|
return { mode: v["mode"], hosts: [...new Set(hosts)].sort(), loopback: v["loopback"] };
|
|
207
158
|
}
|
|
208
|
-
/** The network in plain words, for an approval card and a run's record. */
|
|
209
159
|
export function networkWords(network) {
|
|
210
160
|
if (network === null)
|
|
211
161
|
return "Network: approved before network rules (provider and package registries only)";
|
|
@@ -220,7 +170,6 @@ export function networkWords(network) {
|
|
|
220
170
|
}
|
|
221
171
|
const REGISTRY_NAMES = { npm: "npm", python: "PyPI", rust: "crates.io", go: "the Go proxy", ruby: "RubyGems", jvm: "Maven and Gradle" };
|
|
222
172
|
const HOST_LIMIT = 50;
|
|
223
|
-
/** A stored record read back strictly: anything this code didn't write reads as none. */
|
|
224
173
|
export function runNetworkFromValue(value) {
|
|
225
174
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
226
175
|
return null;
|
|
@@ -256,22 +205,14 @@ export function runNetworkFromValue(value) {
|
|
|
256
205
|
}
|
|
257
206
|
return out;
|
|
258
207
|
}
|
|
259
|
-
/** Every proxy setting a program might read, both cases, so none falls back to a direct connection the OS refuses. */
|
|
260
208
|
export function proxyEnv(proxy, loopback) {
|
|
261
209
|
const local = loopback === "proxy-only" ? "" : "localhost,127.0.0.1,::1";
|
|
262
210
|
return {
|
|
263
211
|
HTTPS_PROXY: proxy.url, https_proxy: proxy.url, HTTP_PROXY: proxy.url, http_proxy: proxy.url, ALL_PROXY: proxy.url, all_proxy: proxy.url,
|
|
264
212
|
NO_PROXY: local, no_proxy: local,
|
|
265
|
-
// Node's own fetch reads the proxy variables only when told to (Node 24 and later; earlier versions ignore it).
|
|
266
213
|
NODE_USE_ENV_PROXY: "1",
|
|
267
214
|
};
|
|
268
215
|
}
|
|
269
|
-
/**
|
|
270
|
-
* Start one run's proxy on loopback. Only a client presenting this run's credentials is served (another run's agent
|
|
271
|
-
* on the same machine can't borrow it). CONNECT goes only to port 443 and plain HTTP only to port 80, only to a host
|
|
272
|
-
* the run's list admits (matched by name before it is resolved), only to public addresses (the proxy resolves the
|
|
273
|
-
* name itself and connects to exactly the addresses it checked). A plain HTTP request's Host must be the URL's host.
|
|
274
|
-
*/
|
|
275
216
|
export async function startEgressProxy(options) {
|
|
276
217
|
const addressAllowed = options.addressAllowed ?? isPublicAddress;
|
|
277
218
|
const upstreamPort = options.upstreamPort ?? ((port) => port);
|
|
@@ -303,10 +244,8 @@ export async function startEgressProxy(options) {
|
|
|
303
244
|
try {
|
|
304
245
|
options.decided?.(key, allowed, why);
|
|
305
246
|
}
|
|
306
|
-
catch {
|
|
247
|
+
catch { }
|
|
307
248
|
};
|
|
308
|
-
/** Basic credentials whose password is this run's secret, whatever the user name (the sandbox runtime puts its own
|
|
309
|
-
* attribution there). */
|
|
310
249
|
const authorized = (incoming) => {
|
|
311
250
|
const header = String(incoming.headers["proxy-authorization"] ?? "");
|
|
312
251
|
const basic = /^Basic ([A-Za-z0-9+/=]+)$/.exec(header)?.[1];
|
|
@@ -317,7 +256,6 @@ export async function startEgressProxy(options) {
|
|
|
317
256
|
const given = Buffer.from(colon < 0 ? "" : decoded.slice(colon + 1));
|
|
318
257
|
return given.length === expected.length && timingSafeEqual(given, expected);
|
|
319
258
|
};
|
|
320
|
-
/** The addresses a request may reach, or why it may not. */
|
|
321
259
|
const admit = async (host, port, wantPort) => {
|
|
322
260
|
if (port !== wantPort)
|
|
323
261
|
return { ok: false, why: `port ${port} is not allowed` };
|
package/dist/email-settings.js
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The mail server (v87) and where Inbox triggers read it (v89), saved from
|
|
3
|
-
* Settings → Email in a 0600 file beside the database. Its own module, with
|
|
4
|
-
* nothing but the file system, so the mailbox and triggers can read it
|
|
5
|
-
* without pulling in the step runners.
|
|
6
|
-
*/
|
|
7
1
|
import { chmodSync, existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
8
2
|
import { join } from "node:path";
|
|
9
3
|
const EMAIL_FILE = "email.json";
|
|
@@ -23,7 +17,6 @@ export function readEmailSettings(dir) {
|
|
|
23
17
|
return null;
|
|
24
18
|
}
|
|
25
19
|
}
|
|
26
|
-
/** Save the mail server from Settings; an empty password keeps the saved one. An IMAP address lets Inbox triggers read it. */
|
|
27
20
|
export function saveEmailSettings(dir, input) {
|
|
28
21
|
const host = typeof input.host === "string" ? input.host.trim() : "";
|
|
29
22
|
if (!/^[A-Za-z0-9.-]{1,253}$/.test(host))
|
|
@@ -43,7 +36,6 @@ export function saveEmailSettings(dir, input) {
|
|
|
43
36
|
return { ok: false, message: "The reading port is a number, usually 993." };
|
|
44
37
|
const password = typeof input.password === "string" && input.password !== "" ? input.password : readEmailSettings(dir)?.password ?? "";
|
|
45
38
|
writeFileSync(join(dir, EMAIL_FILE), JSON.stringify({ host, port, secure: input.secure === true || input.secure === "on" || input.secure === "true" || port === 465, user, from, password,
|
|
46
|
-
// 993 is TLS from the start; any other port must upgrade with STARTTLS before the password is sent.
|
|
47
39
|
imap: imapHost === "" ? null : { host: imapHost, port: imapPort, secure: imapPort === 993 } }), { mode: 0o600 });
|
|
48
40
|
chmodSync(join(dir, EMAIL_FILE), 0o600);
|
|
49
41
|
return { ok: true, said: imapHost === "" ? `Email is set up: it comes from ${from}.` : `Email is set up: it comes from ${from}, and Inbox triggers read ${imapHost}.` };
|