toolroll 0.9.104 → 0.9.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +62 -5
- package/README.md +18 -20
- package/dist/accent-colors.js +0 -29
- package/dist/acp-agents.js +0 -3
- package/dist/acp-attest.js +0 -30
- package/dist/acp-check.js +3 -70
- package/dist/acp-client.js +3 -94
- package/dist/acp-inspect.js +1 -20
- package/dist/action-ledger.js +0 -8
- package/dist/activity-line.js +0 -14
- package/dist/actor.js +0 -15
- package/dist/advanced-schema.js +12 -0
- package/dist/advanced-view.js +26 -0
- package/dist/advanced.js +61 -0
- package/dist/agent-board.js +0 -117
- package/dist/agent-fence.js +11 -367
- package/dist/agent-onboard.js +12 -50
- package/dist/agent-pulse.js +5 -38
- package/dist/agent-state-words.js +0 -8
- package/dist/agent-state.js +1 -45
- package/dist/agent-turns.js +3 -17
- package/dist/agentconfig.js +1 -99
- package/dist/agents-board.js +0 -60
- package/dist/agents-live.js +1 -8
- package/dist/api-tokens.js +0 -27
- package/dist/approval-authority.js +0 -59
- package/dist/approval-password.js +0 -10
- package/dist/approval-policy.js +0 -29
- package/dist/approval-rules-ui.js +0 -9
- package/dist/assignment-adapters.js +0 -14
- package/dist/assignment-brief.js +1 -17
- package/dist/assignment-delivery.js +0 -22
- package/dist/assignment-presentation.js +0 -14
- package/dist/assignment-status.js +1 -30
- package/dist/assignment-ui.js +0 -12
- package/dist/assignment.js +17 -139
- package/dist/attest.js +0 -38
- package/dist/audit-cli.js +0 -9
- package/dist/backend.js +0 -59
- package/dist/backup-ui.js +0 -12
- package/dist/backup.js +8 -61
- package/dist/batch-checks.js +0 -20
- package/dist/batch-policy.js +0 -4
- package/dist/beads.js +0 -48
- package/dist/bin.js +0 -8
- package/dist/board.js +1 -36
- package/dist/boot-identity.js +0 -42
- package/dist/bounded-spawn.js +4 -28
- package/dist/brand-mark.js +0 -21
- package/dist/brief-fence.js +0 -16
- package/dist/browser/terminal.css +1 -1
- package/dist/browser/terminal.js +16 -16
- package/dist/browser/workspace.css +2 -2
- package/dist/browser/workspace.js +26 -26
- package/dist/browser-crew.js +0 -8
- package/dist/browser-shell.js +2 -15
- package/dist/browser-workspace.js +6 -30
- package/dist/budget-alerts.js +1 -4
- package/dist/build-review.js +2 -50
- package/dist/builder-restart.js +0 -13
- package/dist/builder.js +21 -1035
- package/dist/canonical-json.js +0 -12
- package/dist/capscan.js +1 -32
- package/dist/card-catalog.js +0 -12
- package/dist/card-cli.js +0 -1
- package/dist/card-render.js +0 -25
- package/dist/card-sources.js +0 -10
- package/dist/chat-acceptance.js +0 -7
- package/dist/chat-actions.js +5 -190
- package/dist/chat-admission.js +0 -7
- package/dist/chat-approval.js +0 -25
- package/dist/chat-ask.js +0 -17
- package/dist/chat-card-part.js +0 -3
- package/dist/chat-card.js +0 -6
- package/dist/chat-channel.js +2 -83
- package/dist/chat-continuity.js +0 -31
- package/dist/chat-controls.js +0 -7
- package/dist/chat-core.js +0 -55
- package/dist/chat-decide.js +2 -153
- package/dist/chat-delivery-state.js +0 -49
- package/dist/chat-delivery.js +2 -143
- package/dist/chat-display.js +0 -2
- package/dist/chat-evidence.js +0 -65
- package/dist/chat-flow.js +0 -72
- package/dist/chat-follow.js +0 -13
- package/dist/chat-inbox.js +0 -34
- package/dist/chat-live-schema.js +0 -14
- package/dist/chat-live.js +2 -87
- package/dist/chat-message-states.js +13 -40
- package/dist/chat-messages.js +0 -153
- package/dist/chat-migration.js +0 -57
- package/dist/chat-polish.js +0 -7
- package/dist/chat-quiet.js +0 -37
- package/dist/chat-review.js +0 -4
- package/dist/chat-rooms.js +0 -22
- package/dist/chat-settings-page.js +0 -4
- package/dist/chat-task-actions.js +0 -7
- package/dist/chat-terms.js +0 -21
- package/dist/chat-voice.js +0 -38
- package/dist/chat-warmth.js +1 -3
- package/dist/check-access.js +0 -30
- package/dist/check-facts.js +2 -62
- package/dist/check-failure.js +0 -98
- package/dist/check-levels-ui.js +4 -10
- package/dist/check-levels.js +3 -35
- package/dist/check-load.js +1 -49
- package/dist/check-only-standing.js +0 -6
- package/dist/check-only.js +0 -22
- package/dist/check-progress.js +0 -32
- package/dist/check-repair.js +2 -35
- package/dist/check-report.js +1 -108
- package/dist/check-stamp.js +0 -20
- package/dist/checkout-cleanup.js +0 -84
- package/dist/checkout-proof.js +1 -13
- package/dist/child-database.js +0 -3
- package/dist/claim.js +4 -508
- package/dist/claude-print.js +0 -10
- package/dist/cli-fast.js +0 -8
- package/dist/cli-help.js +90 -78
- package/dist/cli-http.js +0 -10
- package/dist/cli.js +26 -241
- package/dist/code-extract.js +0 -6
- package/dist/code-map-acts.js +0 -7
- package/dist/code-map-admission.js +2 -26
- package/dist/code-map-build.js +3 -24
- package/dist/code-map-cli.js +0 -4
- package/dist/code-map-main.js +0 -6
- package/dist/code-map-read.js +0 -12
- package/dist/code-map-report.js +0 -9
- package/dist/code-map-shape.js +0 -19
- package/dist/code-map-store.js +0 -26
- package/dist/codex-limits.js +1 -17
- package/dist/coding-context.js +0 -10
- package/dist/coding-handoff.js +0 -14
- package/dist/coding-provider.js +0 -39
- package/dist/coding-shipping-ui.js +0 -1
- package/dist/coding-ui.js +0 -1
- package/dist/coding-update.js +1 -18
- package/dist/coding-workspace.js +0 -27
- package/dist/commit-extract.js +0 -83
- package/dist/connect-cli.js +0 -19
- package/dist/console-chrome.js +1 -34
- package/dist/console-instance.js +2 -91
- package/dist/container-state.js +0 -4
- package/dist/containment.js +2 -105
- package/dist/contract-changes.js +0 -6
- package/dist/contracts/acceptance-terms.js +0 -7
- package/dist/contracts/chat-actions.js +0 -46
- package/dist/contracts/chat-callback-rows.js +0 -8
- package/dist/contracts/chat-card.js +0 -14
- package/dist/contracts/chat-content.js +0 -55
- package/dist/contracts/chat-tables.js +0 -7
- package/dist/contracts/cli.js +0 -59
- package/dist/contracts/coding-activity.js +0 -15
- package/dist/contracts/coding-context.js +0 -15
- package/dist/contracts/coding-handoff.js +0 -11
- package/dist/contracts/coding-workspace.js +0 -14
- package/dist/contracts/console-api.js +1 -54
- package/dist/contracts/contract-test.js +0 -14
- package/dist/contracts/contract.js +0 -48
- package/dist/contracts/decision.js +0 -20
- package/dist/contracts/diff-stat.js +0 -16
- package/dist/contracts/discord-callback.js +0 -9
- package/dist/contracts/flow-card.js +0 -18
- package/dist/contracts/flow-propose.js +0 -8
- package/dist/contracts/flow-send.js +0 -31
- package/dist/contracts/flow.js +0 -112
- package/dist/contracts/gateway-tools.js +0 -22
- package/dist/contracts/handoff.js +0 -22
- package/dist/contracts/integration-metadata.js +0 -39
- package/dist/contracts/lead-context.js +0 -14
- package/dist/contracts/lead-tools.js +0 -49
- package/dist/contracts/mcp-oauth.js +0 -12
- package/dist/contracts/memory-pass.js +0 -21
- package/dist/contracts/model-catalog.js +0 -9
- package/dist/contracts/observation-request.js +0 -11
- package/dist/contracts/plan.js +0 -16
- package/dist/contracts/project-knowledge.js +0 -26
- package/dist/contracts/project-memory.js +0 -16
- package/dist/contracts/project-skills.js +0 -31
- package/dist/contracts/proof.js +0 -23
- package/dist/contracts/provider.js +0 -9
- package/dist/contracts/recipes.js +0 -16
- package/dist/contracts/release-check.js +0 -61
- package/dist/contracts/release-terms.js +0 -27
- package/dist/contracts/retention.js +0 -12
- package/dist/contracts/review-findings.js +0 -13
- package/dist/contracts/route-results.js +0 -15
- package/dist/contracts/route.js +0 -33
- package/dist/contracts/scope.js +0 -29
- package/dist/contracts/scout-report.js +0 -34
- package/dist/contracts/slack-callback.js +0 -11
- package/dist/contracts/sort-answer.js +0 -24
- package/dist/contracts/stage-output.js +0 -46
- package/dist/contracts/storage.js +0 -8
- package/dist/contracts/store-json.js +0 -41
- package/dist/contracts/subagent-turn.js +0 -23
- package/dist/contracts/task-sizing.js +0 -10
- package/dist/contracts/teams-callback.js +0 -7
- package/dist/contracts/telegram-callback.js +0 -27
- package/dist/contracts/trigger-payloads.js +0 -41
- package/dist/contracts/update-journal.js +0 -47
- package/dist/contracts/verification-receipt.js +0 -36
- package/dist/contracts/verification-view.js +0 -15
- package/dist/contracts/youiyoux-request.js +0 -26
- package/dist/control-setup.js +0 -7
- package/dist/control-ui.js +0 -3
- package/dist/controller-service.js +0 -4
- package/dist/controller-supervisor.js +0 -15
- package/dist/converse.js +3 -129
- package/dist/coordinator-proposals.js +1 -6
- package/dist/coordinator.js +0 -65
- package/dist/credentials-ui.js +0 -6
- package/dist/daemon.js +0 -137
- package/dist/database-reclaim.js +0 -3
- package/dist/decision.js +0 -78
- package/dist/demo-chat.js +4 -15
- package/dist/demo-sign-in.js +77 -0
- package/dist/demo.js +5 -194
- package/dist/deploy-gate.js +0 -20
- package/dist/deploy-lock.js +0 -4
- package/dist/deploy-phase.js +0 -22
- package/dist/deploy-rescue.js +0 -21
- package/dist/deprecations.js +0 -12
- package/dist/design/kit.css +9 -6
- package/dist/design/kit.js +2 -33
- package/dist/desktop-access.js +0 -9
- package/dist/desktop-bundle.js +1 -3
- package/dist/desktop-host.js +0 -34
- package/dist/desktop-update-gate.js +0 -8
- package/dist/desktop-update-recovery.js +1 -18
- package/dist/desktop-update.js +2 -48
- package/dist/digest-times.js +0 -2
- package/dist/disclosure.js +0 -5
- package/dist/discord-api.js +0 -6
- package/dist/discord-chat.js +0 -31
- package/dist/discord.js +0 -7
- package/dist/discover.js +0 -50
- package/dist/dispatch.js +61 -60
- package/dist/dispose.js +0 -208
- package/dist/doctor.js +0 -48
- package/dist/easy-start-args.js +7 -7
- package/dist/easy-start.js +32 -45
- package/dist/egress.js +1 -63
- package/dist/email-settings.js +0 -8
- package/dist/envelope.js +50 -86
- package/dist/eval-gate.js +1 -37
- package/dist/eval-hooks.js +0 -120
- package/dist/eval-oracle-main.js +0 -7
- package/dist/eval-oracle.js +3 -42
- package/dist/eval-world.js +1 -23
- package/dist/evals.js +6 -134
- package/dist/evidence-pack.js +0 -29
- package/dist/evidence-pair.js +0 -17
- package/dist/evidence.js +4 -280
- package/dist/exec.js +19 -404
- package/dist/exhaustion.js +0 -30
- package/dist/export-ui.js +0 -7
- package/dist/export.js +1 -38
- package/dist/failing-first.js +0 -6
- package/dist/fallback-schema.js +0 -5
- package/dist/fallback.js +0 -81
- package/dist/fast-start.js +0 -97
- package/dist/fast-terms.js +0 -3
- package/dist/fenced-check-coverage.js +0 -11
- package/dist/findings.js +1 -63
- package/dist/first-run.js +4 -57
- package/dist/first-tasks-child.js +0 -5
- package/dist/flaky-ci.js +1 -24
- package/dist/flaky-cli.js +0 -4
- package/dist/flaky.js +0 -43
- package/dist/fleet-schema.js +0 -11
- package/dist/flow-actions.js +0 -31
- package/dist/flow-browser.js +0 -42
- package/dist/flow-cadence.js +1 -24
- package/dist/flow-card-task.js +0 -11
- package/dist/flow-changed.js +0 -16
- package/dist/flow-code.js +1 -45
- package/dist/flow-draft.js +0 -17
- package/dist/flow-engine.js +2 -76
- package/dist/flow-gallery-ui.js +0 -28
- package/dist/flow-gallery.js +0 -54
- package/dist/flow-insights.js +0 -12
- package/dist/flow-items.js +0 -27
- package/dist/flow-live.js +0 -31
- package/dist/flow-people.js +0 -14
- package/dist/flow-pull-request.js +0 -32
- package/dist/flow-replies.js +0 -9
- package/dist/flow-result-card.js +0 -8
- package/dist/flow-schedule.js +0 -74
- package/dist/flow-scripts.js +0 -13
- package/dist/flow-secrets.js +0 -10
- package/dist/flow-send.js +0 -45
- package/dist/flow-share.js +0 -60
- package/dist/flow-sort.js +1 -24
- package/dist/flow-starters-ui.js +0 -2
- package/dist/flow-starters.js +0 -13
- package/dist/flow-steps.js +0 -80
- package/dist/flow-triggers.js +2 -256
- package/dist/flow-unattended-words.js +0 -13
- package/dist/flow-unattended.js +2 -115
- package/dist/flows-cli.js +2 -36
- package/dist/flows-ui.js +0 -51
- package/dist/flows.js +0 -158
- package/dist/folder-gate.js +0 -21
- package/dist/folder-look.js +0 -42
- package/dist/follow-through-brief.js +0 -6
- package/dist/follow-through-cli.js +0 -5
- package/dist/fonts.js +0 -13
- package/dist/gaps.js +0 -20
- package/dist/gate-failure.js +0 -7
- package/dist/git-floor.js +0 -12
- package/dist/git-incident.js +2 -38
- package/dist/git-views.js +0 -24
- package/dist/git.js +0 -31
- package/dist/github-import.js +0 -22
- package/dist/github-jobs.js +0 -12
- package/dist/google-mail.js +2 -27
- package/dist/grant.js +0 -110
- package/dist/graph.js +0 -108
- package/dist/guides.js +4 -15
- package/dist/handover-note.js +0 -12
- package/dist/health-cli.js +0 -2
- package/dist/home-groups.js +0 -15
- package/dist/html.js +0 -54
- package/dist/install-method.js +0 -12
- package/dist/integrations-ui.js +0 -15
- package/dist/integrations.js +7 -50
- package/dist/invoke.js +1 -381
- package/dist/is-record.js +0 -1
- package/dist/issues.js +0 -48
- package/dist/jsonl-discriminants.js +0 -6
- package/dist/keymap.js +0 -17
- package/dist/keys.js +0 -56
- package/dist/kits-ui.js +0 -3
- package/dist/kits.js +1 -24
- package/dist/knowledge-cli.js +0 -4
- package/dist/knowledge-ui.js +0 -8
- package/dist/landed-cleanup.js +0 -119
- package/dist/laptop-background.js +0 -85
- package/dist/laptop-service.js +0 -67
- package/dist/latency-timeline.js +2 -23
- package/dist/lead-about.js +0 -7
- package/dist/lead-answer-eval.js +0 -39
- package/dist/lead-capabilities.js +0 -19
- package/dist/lead-cli-live.js +0 -22
- package/dist/lead-cli.js +0 -27
- package/dist/lead-commitments.js +1 -27
- package/dist/lead-context.js +2 -42
- package/dist/lead-contract.js +0 -8
- package/dist/lead-doors.js +0 -105
- package/dist/lead-follow.js +0 -41
- package/dist/lead-identity.js +1 -4
- package/dist/lead-latency-schema.js +0 -13
- package/dist/lead-people.js +3 -18
- package/dist/lead-progress.js +0 -12
- package/dist/lead-queue-runtime.js +0 -26
- package/dist/lead-queue.js +0 -35
- package/dist/lead-route.js +0 -33
- package/dist/lead-status.js +0 -37
- package/dist/lead-sweep.js +0 -18
- package/dist/lead-tools.js +0 -160
- package/dist/lead-voice.js +0 -54
- package/dist/lead.js +2 -105
- package/dist/learning-child.js +0 -6
- package/dist/learning-look.js +0 -14
- package/dist/ledger-chain.js +0 -34
- package/dist/ledger-csv.js +0 -2
- package/dist/ledger-view.js +0 -3
- package/dist/lesson-notes.js +0 -56
- package/dist/limits-ui.js +0 -14
- package/dist/link.js +0 -79
- package/dist/live-backup.js +3 -33
- package/dist/live-bus.js +7 -81
- package/dist/live-children-read.js +4 -47
- package/dist/live-children.js +4 -44
- package/dist/live-detail.js +0 -17
- package/dist/live-input.js +5 -68
- package/dist/live-main-read.js +1 -14
- package/dist/live-notes.js +0 -12
- package/dist/live-open.js +1 -23
- package/dist/live-records.js +4 -151
- package/dist/live-reply.js +1 -51
- package/dist/live-terminal.js +12 -111
- package/dist/live.js +4 -130
- package/dist/local-owner-acts.js +0 -53
- package/dist/local-owner.js +2 -93
- package/dist/log.js +0 -8
- package/dist/login-secrets.js +2 -38
- package/dist/machine-check.js +0 -2
- package/dist/machine-identity.js +1 -46
- package/dist/mailbox.js +0 -30
- package/dist/maintenance.js +1 -3
- package/dist/mcp-connect.js +0 -88
- package/dist/mcp-core.js +0 -45
- package/dist/mcp-http.js +0 -13
- package/dist/mcp-oauth.js +0 -37
- package/dist/mcp-person.js +0 -11
- package/dist/mcp.js +3 -73
- package/dist/memory-cli.js +0 -3
- package/dist/memory-pass.js +0 -53
- package/dist/memory-tidy.js +0 -55
- package/dist/memory-use.js +2 -24
- package/dist/merge-checklist.js +21 -29
- package/dist/metrics.js +0 -10
- package/dist/mobile-viewport.js +0 -6
- package/dist/model-catalog.js +1 -33
- package/dist/model-choices.js +9 -84
- package/dist/model-names.js +0 -9
- package/dist/models-cli.js +0 -13
- package/dist/models-ui.js +0 -17
- package/dist/modes.js +0 -35
- package/dist/monitoring-settings.js +2 -27
- package/dist/monitoring-ui.js +2 -14
- package/dist/monitoring.js +2 -38
- package/dist/names.js +0 -39
- package/dist/needs-you.js +7 -70
- package/dist/never-index.js +0 -9
- package/dist/nightly-check.js +0 -74
- package/dist/nightly-github.js +0 -168
- package/dist/notification-delivery.js +0 -3
- package/dist/notification-rows.js +0 -17
- package/dist/oauth-run-token.js +1 -37
- package/dist/observations.js +0 -16
- package/dist/oidc.js +1 -20
- package/dist/onboard.js +4 -57
- package/dist/one-step-chat-schema.js +0 -15
- package/dist/openrouter-models.js +0 -6
- package/dist/operate-remote-arguments.js +0 -17
- package/dist/operate-remote.js +0 -33
- package/dist/operate.js +227 -2326
- package/dist/orphan-sweep.js +3 -37
- package/dist/page-work-contract.js +0 -3
- package/dist/password-bearer.js +1 -11
- package/dist/passwordless.js +0 -3
- package/dist/peek-cli.js +0 -46
- package/dist/peek.js +2 -61
- package/dist/people-audit-ui.js +0 -6
- package/dist/person-proof.js +0 -6
- package/dist/phase-routing.js +8 -183
- package/dist/plain-schema.js +0 -14
- package/dist/plain-words.js +18 -12
- package/dist/plan-auto.js +0 -20
- package/dist/plan-login.js +0 -16
- package/dist/plan.js +0 -68
- package/dist/plane-review.js +0 -56
- package/dist/planner-source.js +0 -96
- package/dist/planner.js +0 -117
- package/dist/policy-ui.js +0 -8
- package/dist/policy.js +0 -47
- package/dist/prepared-evidence.js +0 -5
- package/dist/principal.js +0 -29
- package/dist/probe.js +0 -30
- package/dist/process-custody.js +0 -15
- package/dist/process-liveness.js +0 -32
- package/dist/process-tree.js +3 -29
- package/dist/project-access.js +0 -10
- package/dist/project-admission.js +1 -41
- package/dist/project-cli.js +0 -6
- package/dist/project-concurrency.js +0 -35
- package/dist/project-delete-ui.js +4 -29
- package/dist/project-delete.js +1 -73
- package/dist/project-demo.js +0 -13
- package/dist/project-file.js +0 -2
- package/dist/project-identity.js +0 -41
- package/dist/project-knowledge.js +0 -39
- package/dist/project-learning.js +3 -55
- package/dist/project-memory.js +2 -45
- package/dist/project-outcomes.js +0 -6
- package/dist/project-sandbox.js +0 -23
- package/dist/project-skills.js +0 -12
- package/dist/project-tools.js +6 -184
- package/dist/project.js +0 -48
- package/dist/prompt.js +0 -31
- package/dist/proof.js +0 -220
- package/dist/proposal.js +0 -50
- package/dist/protected-storage-look.js +0 -6
- package/dist/protected-storage.js +1 -84
- package/dist/provider-auth.js +3 -69
- package/dist/provider-capture.js +1 -15
- package/dist/provider-connection.js +0 -8
- package/dist/provider-home.js +0 -25
- package/dist/provider-limits.js +0 -14
- package/dist/provider.js +0 -324
- package/dist/public-access.js +0 -34
- package/dist/public-check.js +0 -16
- package/dist/publish.js +1 -150
- package/dist/pull-request-flow.js +0 -77
- package/dist/pull-request-schema.js +0 -4
- package/dist/pull-request-ui.js +0 -5
- package/dist/pulls.js +0 -80
- package/dist/push.js +5 -89
- package/dist/quick-start.js +1 -23
- package/dist/read-executor-worker.js +0 -1
- package/dist/read-executor.js +0 -10
- package/dist/read-only-request.js +0 -7
- package/dist/recipe-ui.js +0 -6
- package/dist/recipes.js +0 -13
- package/dist/release-adapters.js +6 -214
- package/dist/release-approval.js +0 -74
- package/dist/release-authority.js +0 -42
- package/dist/release-auto.js +0 -142
- package/dist/release-card.js +0 -100
- package/dist/release-carry.js +0 -132
- package/dist/release-ci-hold.js +0 -20
- package/dist/release-cli.js +0 -46
- package/dist/release-coverage.js +0 -16
- package/dist/release-gate.js +0 -30
- package/dist/release-git.js +0 -24
- package/dist/release-links.js +0 -17
- package/dist/release-net.js +0 -42
- package/dist/release-next.js +0 -25
- package/dist/release-recheck.js +0 -89
- package/dist/release-refusal.js +0 -18
- package/dist/release-view.js +0 -5
- package/dist/release.js +7 -341
- package/dist/releases.js +0 -49
- package/dist/remote-audit.js +0 -25
- package/dist/remote-command.js +0 -16
- package/dist/remote-destination.js +5 -26
- package/dist/remote-exec.js +1 -27
- package/dist/remote-main.js +1 -53
- package/dist/remote-run.js +0 -5
- package/dist/remote.js +0 -49
- package/dist/render.js +0 -133
- package/dist/reply-shape.js +0 -85
- package/dist/reply-voice.js +0 -7
- package/dist/report-summary.js +0 -5
- package/dist/reported-usage.js +0 -30
- package/dist/repos.js +9 -62
- package/dist/repository-context.js +1 -24
- package/dist/request-budget-ui.js +0 -4
- package/dist/request-budget.js +0 -23
- package/dist/restart-certification.js +0 -37
- package/dist/result-actions.js +0 -62
- package/dist/result-acts.js +0 -34
- package/dist/result-completion.js +0 -25
- package/dist/result-evidence-readers.js +0 -3
- package/dist/result-follow-ups.js +1 -39
- package/dist/result-review.js +0 -86
- package/dist/result-shots.js +0 -39
- package/dist/retention-ui.js +0 -7
- package/dist/retention.js +2 -46
- package/dist/review-context.js +0 -129
- package/dist/review-evidence.js +0 -4
- package/dist/review-switch.js +1 -7
- package/dist/reviewer.js +0 -35
- package/dist/route-change-check.js +0 -2
- package/dist/route-change.js +0 -16
- package/dist/route-hooks.js +0 -27
- package/dist/route-results.js +2 -58
- package/dist/route-rules.js +1 -106
- package/dist/route-savings.js +0 -36
- package/dist/route-store.js +1 -133
- package/dist/run-closeout.js +2 -50
- package/dist/run-efficiency.js +2 -44
- package/dist/run-ending.js +0 -13
- package/dist/runner-process.js +0 -33
- package/dist/runner.js +17 -189
- package/dist/sample-project.js +2 -27
- package/dist/sandbox-launch.js +4 -25
- package/dist/sandbox-runtime.js +1 -88
- package/dist/scan.js +0 -27
- package/dist/scope.js +4 -567
- package/dist/scout-browser-lock.js +0 -6
- package/dist/scout-browser.js +2 -68
- package/dist/scout-net.js +1 -32
- package/dist/scout-report.js +0 -22
- package/dist/scout.js +1 -116
- package/dist/secret-mint.js +0 -6
- package/dist/serve.js +21 -555
- package/dist/server/agents-computers.js +0 -10
- package/dist/server/agents-live-filed.js +0 -13
- package/dist/server/agents-live-lead.js +0 -19
- package/dist/server/agents-live-room.js +0 -19
- package/dist/server/chat.js +2 -194
- package/dist/server/chrome.js +17 -263
- package/dist/server/console.css +4 -4
- package/dist/server/edge-refusal.js +0 -3
- package/dist/server/flows.js +5 -74
- package/dist/server/guards.js +1 -88
- package/dist/server/handler-registry.js +0 -2
- package/dist/server/home-asks.js +1 -22
- package/dist/server/home.js +1 -30
- package/dist/server/http.js +0 -82
- package/dist/server/in-place.js +0 -15
- package/dist/server/kit-standalone.js +0 -20
- package/dist/server/kit.js +2 -114
- package/dist/server/last-checks.js +0 -2
- package/dist/server/live.js +1 -36
- package/dist/server/merge-ready-view.js +0 -6
- package/dist/server/mutation-key.js +3 -40
- package/dist/server/pages-assets.js +0 -16
- package/dist/server/pages.js +7 -195
- package/dist/server/people-tokens.js +3 -101
- package/dist/server/remote-hooks.js +0 -13
- package/dist/server/remote.js +0 -28
- package/dist/server/render-chat.js +8 -144
- package/dist/server/render-code-map.js +0 -5
- package/dist/server/render-flaky.js +0 -8
- package/dist/server/render-follow-through.js +2 -5
- package/dist/server/render-history.js +2 -34
- package/dist/server/render-new-task.js +2 -29
- package/dist/server/render-pages.js +1 -111
- package/dist/server/render-people.js +2 -46
- package/dist/server/render-projects.js +15 -32
- package/dist/server/render-release.js +1 -14
- package/dist/server/render-results.js +4 -355
- package/dist/server/render-settings.js +0 -15
- package/dist/server/render-tasks.js +13 -493
- package/dist/server/request-context.js +2 -9
- package/dist/server/retired-routes.js +0 -11
- package/dist/server/route-policy.js +0 -3
- package/dist/server/route-table.js +6 -135
- package/dist/server/runtime.js +0 -1
- package/dist/server/session.js +0 -28
- package/dist/server/settings.js +40 -246
- package/dist/server/signup-gate.js +0 -11
- package/dist/server/sweeps.js +0 -6
- package/dist/server/task-views.js +9 -227
- package/dist/server/tasks.js +5 -539
- package/dist/server/terminals.js +2 -46
- package/dist/server/welcome.js +2 -22
- package/dist/server-telemetry.js +0 -9
- package/dist/settings-groups-ui.js +50 -63
- package/dist/settings-kit-script.js +0 -19
- package/dist/settings-kit.js +0 -63
- package/dist/settings-proofs.js +0 -23
- package/dist/setup-guide.js +1 -9
- package/dist/shared-deps.js +9 -84
- package/dist/sign-in-guard.js +0 -27
- package/dist/skills-ui.js +0 -2
- package/dist/skills.js +2 -54
- package/dist/slack-api.js +0 -3
- package/dist/slack-chat.js +0 -25
- package/dist/slack-settings.js +0 -1
- package/dist/slack-socket.js +0 -5
- package/dist/slack.js +0 -4
- package/dist/sleep.js +0 -1
- package/dist/source-key.js +0 -10
- package/dist/spend-report.js +0 -29
- package/dist/spend-ui.js +0 -26
- package/dist/spend.js +0 -40
- package/dist/sqlite-runtime.js +0 -2
- package/dist/sqlite-telemetry.js +0 -9
- package/dist/sso-settings.js +0 -13
- package/dist/sso-ui.js +0 -2
- package/dist/staged-runtimes.js +5 -39
- package/dist/steer-capabilities.js +1 -7
- package/dist/steer-controls.js +0 -10
- package/dist/steer-live.js +0 -31
- package/dist/steer-mailbox.js +4 -65
- package/dist/steer-status.js +0 -7
- package/dist/stop-proof.js +5 -62
- package/dist/storage-sweep-child.js +1 -5
- package/dist/storage-sweep-process.js +2 -20
- package/dist/storage-sweep-schedule.js +0 -32
- package/dist/storage-sweep.js +2 -51
- package/dist/storage-ui.js +0 -18
- package/dist/storage.js +0 -31
- package/dist/store-baseline.js +0 -14
- package/dist/store.js +109 -4763
- package/dist/stream-scope.js +0 -16
- package/dist/structured-output.js +0 -39
- package/dist/style-asset.js +0 -2
- package/dist/subagent-admin.js +0 -9
- package/dist/subagent-desk.js +0 -29
- package/dist/subagent-memory.js +0 -38
- package/dist/subagent-question.js +0 -29
- package/dist/subagent-tools.js +1 -60
- package/dist/subagent-week.js +0 -28
- package/dist/subagent-work.js +1 -39
- package/dist/subagents-ui.js +1 -13
- package/dist/subagents.js +0 -40
- package/dist/subscription-chat.js +1 -42
- package/dist/summary.js +0 -19
- package/dist/surface.js +0 -75
- package/dist/sweep-gate.js +0 -2
- package/dist/sweep-quarantine.js +2 -13
- package/dist/sync.js +0 -47
- package/dist/tailnet.js +0 -9
- package/dist/tamper-scan.js +0 -15
- package/dist/task-activity.js +1 -16
- package/dist/task-aliases.js +0 -3
- package/dist/task-archive.js +0 -7
- package/dist/task-base.js +0 -18
- package/dist/task-composer.js +0 -2
- package/dist/task-control.js +0 -74
- package/dist/task-live.js +0 -23
- package/dist/task-moves.js +0 -28
- package/dist/task-outcome-cli.js +17 -28
- package/dist/task-review-brief.js +0 -7
- package/dist/task-sizing.js +0 -47
- package/dist/task-source.js +0 -23
- package/dist/task-status.js +0 -106
- package/dist/task-text.js +0 -12
- package/dist/team-chat-authorization.js +0 -3
- package/dist/team-contract.js +0 -2
- package/dist/team-http.js +0 -4
- package/dist/team-leads.js +1 -16
- package/dist/team-runtime.js +0 -13
- package/dist/team-ui.js +0 -1
- package/dist/team-updates.js +0 -4
- package/dist/teams-api.js +0 -12
- package/dist/teams-chat.js +0 -28
- package/dist/teams.js +0 -12
- package/dist/teardown-git.js +6 -294
- package/dist/telegram-flow.js +0 -51
- package/dist/telegram-lead.js +2 -203
- package/dist/telegram-live.js +1 -42
- package/dist/telegram-progress.js +0 -18
- package/dist/telegram-settings.js +0 -7
- package/dist/telegram-status.js +0 -46
- package/dist/telegram-team.js +1 -33
- package/dist/telegram.js +6 -454
- package/dist/templates.js +0 -24
- package/dist/terminal-catalog.js +2 -20
- package/dist/terminal-text.js +0 -12
- package/dist/test-infra.js +0 -50
- package/dist/test-temp.js +3 -26
- package/dist/text-limits.js +0 -92
- package/dist/tidy.js +0 -76
- package/dist/tier-report.js +0 -2
- package/dist/token-notices.js +1 -9
- package/dist/tokens-cli.js +0 -13
- package/dist/tool-broker.js +2 -53
- package/dist/tool-launcher.js +0 -14
- package/dist/tool-secret-store.js +3 -125
- package/dist/toolroll-update-cli.js +0 -9
- package/dist/toolroll-update-ui.js +0 -14
- package/dist/toolroll-update.js +13 -252
- package/dist/tools-ui.js +0 -17
- package/dist/transitions-recipes.js +0 -2
- package/dist/tree-proof.js +0 -23
- package/dist/tui-contract.js +0 -8
- package/dist/tui-source.js +16 -36
- package/dist/tui.js +1 -1
- package/dist/typed-start.js +0 -27
- package/dist/unfenced-test-support.js +0 -5
- package/dist/up-processes.js +1 -40
- package/dist/up-role-child.js +1 -13
- package/dist/update-notice.js +0 -1
- package/dist/vanished-retry.js +0 -40
- package/dist/verification-evidence.js +0 -39
- package/dist/version.js +0 -1
- package/dist/wake-hub.js +0 -28
- package/dist/webhook-limits.js +0 -7
- package/dist/webhook-readers.js +0 -30
- package/dist/webhook-signing.js +0 -14
- package/dist/webhooks.js +0 -54
- package/dist/welcome-facts.js +2 -14
- package/dist/when-html.js +0 -27
- package/dist/work-index.js +26 -98
- package/dist/work-summary.js +2 -17
- package/dist/workspace-motion.js +0 -2
- package/dist/workspace-revision.js +1 -21
- package/dist/workspace-ui.js +15 -135
- package/dist/worktree-notices.js +0 -3
- package/dist/worktree.js +0 -308
- package/dist/writes-mode.js +0 -1
- package/dist/youiyoux-intake.js +4 -159
- package/package.json +4 -3
- package/dist/accent-colors.d.ts +0 -51
- package/dist/acp-agents.d.ts +0 -43
- package/dist/acp-attest.d.ts +0 -44
- package/dist/acp-check.d.ts +0 -37
- package/dist/acp-client.d.ts +0 -163
- package/dist/acp-inspect.d.ts +0 -23
- package/dist/action-ledger.d.ts +0 -27
- package/dist/activity-line.d.ts +0 -29
- package/dist/actor.d.ts +0 -11
- package/dist/agent-board.d.ts +0 -229
- package/dist/agent-fence.d.ts +0 -479
- package/dist/agent-onboard.d.ts +0 -158
- package/dist/agent-pulse.d.ts +0 -43
- package/dist/agent-state-words.d.ts +0 -19
- package/dist/agent-state.d.ts +0 -65
- package/dist/agent-turns.d.ts +0 -52
- package/dist/agentconfig.d.ts +0 -191
- package/dist/agents-board.d.ts +0 -145
- package/dist/agents-live.d.ts +0 -31
- package/dist/api-tokens.d.ts +0 -80
- package/dist/approval-authority.d.ts +0 -51
- package/dist/approval-password.d.ts +0 -31
- package/dist/approval-policy.d.ts +0 -69
- package/dist/approval-rules-ui.d.ts +0 -40
- package/dist/assignment-adapters.d.ts +0 -152
- package/dist/assignment-brief.d.ts +0 -83
- package/dist/assignment-delivery.d.ts +0 -86
- package/dist/assignment-presentation.d.ts +0 -37
- package/dist/assignment-status.d.ts +0 -71
- package/dist/assignment-ui.d.ts +0 -68
- package/dist/assignment.d.ts +0 -350
- package/dist/attest.d.ts +0 -59
- package/dist/audit-cli.d.ts +0 -17
- package/dist/backend.d.ts +0 -97
- package/dist/backup-ui.d.ts +0 -32
- package/dist/backup.d.ts +0 -92
- package/dist/batch-checks.d.ts +0 -15
- package/dist/batch-policy.d.ts +0 -23
- package/dist/beads.d.ts +0 -34
- package/dist/bin.d.ts +0 -2
- package/dist/board.d.ts +0 -134
- package/dist/boot-identity.d.ts +0 -64
- package/dist/bounded-spawn.d.ts +0 -57
- package/dist/brand-icons.d.ts +0 -168
- package/dist/brand-mark.d.ts +0 -28
- package/dist/brief-fence.d.ts +0 -9
- package/dist/browser-crew.d.ts +0 -12
- package/dist/browser-shell.d.ts +0 -9
- package/dist/browser-workspace.d.ts +0 -1985
- package/dist/budget-alerts.d.ts +0 -19
- package/dist/build-review.d.ts +0 -38
- package/dist/builder-restart.d.ts +0 -21
- package/dist/builder.d.ts +0 -409
- package/dist/canonical-json.d.ts +0 -14
- package/dist/capscan.d.ts +0 -35
- package/dist/card-catalog.d.ts +0 -209
- package/dist/card-cli.d.ts +0 -43
- package/dist/card-render.d.ts +0 -43
- package/dist/card-sources.d.ts +0 -68
- package/dist/chat-acceptance.d.ts +0 -74
- package/dist/chat-actions.d.ts +0 -460
- package/dist/chat-admission.d.ts +0 -19
- package/dist/chat-approval.d.ts +0 -58
- package/dist/chat-ask.d.ts +0 -32
- package/dist/chat-card-part.d.ts +0 -11
- package/dist/chat-card.d.ts +0 -46
- package/dist/chat-channel.d.ts +0 -126
- package/dist/chat-continuity.d.ts +0 -32
- package/dist/chat-controls.d.ts +0 -117
- package/dist/chat-core.d.ts +0 -177
- package/dist/chat-decide.d.ts +0 -269
- package/dist/chat-delivery-state.d.ts +0 -132
- package/dist/chat-delivery.d.ts +0 -71
- package/dist/chat-display.d.ts +0 -1
- package/dist/chat-evidence.d.ts +0 -123
- package/dist/chat-flow.d.ts +0 -70
- package/dist/chat-follow.d.ts +0 -20
- package/dist/chat-inbox.d.ts +0 -57
- package/dist/chat-live-schema.d.ts +0 -17
- package/dist/chat-live.d.ts +0 -161
- package/dist/chat-message-states.d.ts +0 -75
- package/dist/chat-messages.d.ts +0 -338
- package/dist/chat-migration.d.ts +0 -30
- package/dist/chat-polish.d.ts +0 -17
- package/dist/chat-quiet.d.ts +0 -40
- package/dist/chat-review.d.ts +0 -51
- package/dist/chat-rooms.d.ts +0 -123
- package/dist/chat-settings-page.d.ts +0 -43
- package/dist/chat-task-actions.d.ts +0 -59
- package/dist/chat-terms.d.ts +0 -29
- package/dist/chat-voice.d.ts +0 -69
- package/dist/chat-warmth.d.ts +0 -21
- package/dist/check-access.d.ts +0 -54
- package/dist/check-facts.d.ts +0 -126
- package/dist/check-failure.d.ts +0 -113
- package/dist/check-levels-ui.d.ts +0 -36
- package/dist/check-levels.d.ts +0 -70
- package/dist/check-load.d.ts +0 -85
- package/dist/check-only-standing.d.ts +0 -36
- package/dist/check-only.d.ts +0 -15
- package/dist/check-progress.d.ts +0 -78
- package/dist/check-repair.d.ts +0 -47
- package/dist/check-report.d.ts +0 -177
- package/dist/check-stamp.d.ts +0 -46
- package/dist/checkout-cleanup.d.ts +0 -157
- package/dist/checkout-proof.d.ts +0 -28
- package/dist/child-database.d.ts +0 -12
- package/dist/claim.d.ts +0 -627
- package/dist/claude-print.d.ts +0 -12
- package/dist/cli-fast.d.ts +0 -8
- package/dist/cli-help.d.ts +0 -8
- package/dist/cli-http.d.ts +0 -58
- package/dist/cli.d.ts +0 -149
- package/dist/code-extract.d.ts +0 -44
- package/dist/code-map-acts.d.ts +0 -24
- package/dist/code-map-admission.d.ts +0 -52
- package/dist/code-map-build.d.ts +0 -63
- package/dist/code-map-cli.d.ts +0 -153
- package/dist/code-map-main.d.ts +0 -1
- package/dist/code-map-read.d.ts +0 -106
- package/dist/code-map-report.d.ts +0 -37
- package/dist/code-map-shape.d.ts +0 -172
- package/dist/code-map-store.d.ts +0 -136
- package/dist/codex-limits.d.ts +0 -15
- package/dist/coding-context.d.ts +0 -18
- package/dist/coding-handoff.d.ts +0 -39
- package/dist/coding-provider.d.ts +0 -88
- package/dist/coding-shipping-ui.d.ts +0 -5
- package/dist/coding-types.d.ts +0 -16
- package/dist/coding-ui.d.ts +0 -19
- package/dist/coding-update.d.ts +0 -28
- package/dist/coding-workspace.d.ts +0 -141
- package/dist/commit-extract.d.ts +0 -135
- package/dist/connect-cli.d.ts +0 -34
- package/dist/console-chrome.d.ts +0 -41
- package/dist/console-instance.d.ts +0 -157
- package/dist/container-state.d.ts +0 -5
- package/dist/containment.d.ts +0 -205
- package/dist/contract-changes.d.ts +0 -52
- package/dist/contracts/acceptance-terms.d.ts +0 -14
- package/dist/contracts/chat-actions.d.ts +0 -465
- package/dist/contracts/chat-callback-rows.d.ts +0 -59
- package/dist/contracts/chat-card.d.ts +0 -91
- package/dist/contracts/chat-content.d.ts +0 -551
- package/dist/contracts/chat-tables.d.ts +0 -12
- package/dist/contracts/cli.d.ts +0 -987
- package/dist/contracts/coding-activity.d.ts +0 -64
- package/dist/contracts/coding-context.d.ts +0 -97
- package/dist/contracts/coding-handoff.d.ts +0 -44
- package/dist/contracts/coding-workspace.d.ts +0 -165
- package/dist/contracts/console-api.d.ts +0 -540
- package/dist/contracts/contract-test.d.ts +0 -45
- package/dist/contracts/contract.d.ts +0 -92
- package/dist/contracts/decision.d.ts +0 -45
- package/dist/contracts/diff-stat.d.ts +0 -58
- package/dist/contracts/discord-callback.d.ts +0 -45
- package/dist/contracts/flow-card.d.ts +0 -53
- package/dist/contracts/flow-propose.d.ts +0 -334
- package/dist/contracts/flow-send.d.ts +0 -245
- package/dist/contracts/flow.d.ts +0 -19565
- package/dist/contracts/gateway-tools.d.ts +0 -472
- package/dist/contracts/handoff.d.ts +0 -91
- package/dist/contracts/health.d.ts +0 -82
- package/dist/contracts/integration-metadata.d.ts +0 -100
- package/dist/contracts/lead-context.d.ts +0 -165
- package/dist/contracts/lead-tools.d.ts +0 -2312
- package/dist/contracts/mcp-oauth.d.ts +0 -53
- package/dist/contracts/memory-pass.d.ts +0 -157
- package/dist/contracts/model-catalog.d.ts +0 -21
- package/dist/contracts/observation-request.d.ts +0 -37
- package/dist/contracts/plan.d.ts +0 -58
- package/dist/contracts/project-knowledge.d.ts +0 -159
- package/dist/contracts/project-memory.d.ts +0 -119
- package/dist/contracts/project-skills.d.ts +0 -120
- package/dist/contracts/proof.d.ts +0 -136
- package/dist/contracts/provider.d.ts +0 -40
- package/dist/contracts/recipes.d.ts +0 -166
- package/dist/contracts/release-check.d.ts +0 -371
- package/dist/contracts/release-terms.d.ts +0 -107
- package/dist/contracts/retention.d.ts +0 -42
- package/dist/contracts/review-findings.d.ts +0 -46
- package/dist/contracts/route-results.d.ts +0 -121
- package/dist/contracts/route.d.ts +0 -897
- package/dist/contracts/scope.d.ts +0 -105
- package/dist/contracts/scout-report.d.ts +0 -234
- package/dist/contracts/slack-callback.d.ts +0 -43
- package/dist/contracts/sort-answer.d.ts +0 -83
- package/dist/contracts/stage-output.d.ts +0 -127
- package/dist/contracts/storage.d.ts +0 -37
- package/dist/contracts/store-json.d.ts +0 -313
- package/dist/contracts/subagent-turn.d.ts +0 -43
- package/dist/contracts/task-sizing.d.ts +0 -24
- package/dist/contracts/teams-callback.d.ts +0 -13
- package/dist/contracts/telegram-callback.d.ts +0 -120
- package/dist/contracts/trigger-payloads.d.ts +0 -389
- package/dist/contracts/update-journal.d.ts +0 -254
- package/dist/contracts/verification-receipt.d.ts +0 -200
- package/dist/contracts/verification-view.d.ts +0 -102
- package/dist/contracts/youiyoux-request.d.ts +0 -248
- package/dist/control-setup.d.ts +0 -44
- package/dist/control-ui.d.ts +0 -37
- package/dist/controller-service.d.ts +0 -1
- package/dist/controller-supervisor.d.ts +0 -38
- package/dist/converse.d.ts +0 -316
- package/dist/coordinator-proposals.d.ts +0 -29
- package/dist/coordinator.d.ts +0 -186
- package/dist/credentials-ui.d.ts +0 -33
- package/dist/daemon.d.ts +0 -226
- package/dist/database-reclaim.d.ts +0 -4
- package/dist/decision.d.ts +0 -119
- package/dist/demo-chat.d.ts +0 -32
- package/dist/demo.d.ts +0 -153
- package/dist/deploy-gate.d.ts +0 -20
- package/dist/deploy-lock.d.ts +0 -8
- package/dist/deploy-phase.d.ts +0 -37
- package/dist/deploy-rescue.d.ts +0 -42
- package/dist/deprecations.d.ts +0 -20
- package/dist/design/kit.d.ts +0 -216
- package/dist/desktop-access.d.ts +0 -28
- package/dist/desktop-bundle.d.ts +0 -16
- package/dist/desktop-host.d.ts +0 -54
- package/dist/desktop-update-gate.d.ts +0 -12
- package/dist/desktop-update-recovery.d.ts +0 -14
- package/dist/desktop-update.d.ts +0 -147
- package/dist/digest-times.d.ts +0 -3
- package/dist/disclosure.d.ts +0 -6
- package/dist/discord-api.d.ts +0 -24
- package/dist/discord-chat.d.ts +0 -27
- package/dist/discord-settings.d.ts +0 -4
- package/dist/discord.d.ts +0 -10
- package/dist/discover.d.ts +0 -75
- package/dist/dispatch.d.ts +0 -123
- package/dist/dispose.d.ts +0 -194
- package/dist/doctor.d.ts +0 -67
- package/dist/easy-start-args.d.ts +0 -13
- package/dist/easy-start.d.ts +0 -77
- package/dist/egress.d.ts +0 -121
- package/dist/email-settings.d.ts +0 -34
- package/dist/envelope.d.ts +0 -47
- package/dist/eval-gate.d.ts +0 -51
- package/dist/eval-hooks.d.ts +0 -94
- package/dist/eval-oracle-main.d.ts +0 -1
- package/dist/eval-oracle.d.ts +0 -60
- package/dist/eval-world.d.ts +0 -17
- package/dist/evals.d.ts +0 -299
- package/dist/evidence-pack.d.ts +0 -186
- package/dist/evidence-pair.d.ts +0 -53
- package/dist/evidence.d.ts +0 -371
- package/dist/exec.d.ts +0 -355
- package/dist/exhaustion.d.ts +0 -58
- package/dist/export-ui.d.ts +0 -11
- package/dist/export.d.ts +0 -48
- package/dist/failing-first.d.ts +0 -31
- package/dist/fallback-schema.d.ts +0 -8
- package/dist/fallback.d.ts +0 -138
- package/dist/fast-start.d.ts +0 -213
- package/dist/fast-terms.d.ts +0 -9
- package/dist/fenced-check-coverage.d.ts +0 -62
- package/dist/findings.d.ts +0 -224
- package/dist/first-run.d.ts +0 -197
- package/dist/first-tasks-child.d.ts +0 -1
- package/dist/flaky-ci.d.ts +0 -31
- package/dist/flaky-cli.d.ts +0 -60
- package/dist/flaky.d.ts +0 -83
- package/dist/fleet-schema.d.ts +0 -17
- package/dist/flow-actions.d.ts +0 -79
- package/dist/flow-browser.d.ts +0 -103
- package/dist/flow-cadence.d.ts +0 -48
- package/dist/flow-card-task.d.ts +0 -11
- package/dist/flow-changed.d.ts +0 -14
- package/dist/flow-code.d.ts +0 -84
- package/dist/flow-draft.d.ts +0 -42
- package/dist/flow-engine.d.ts +0 -82
- package/dist/flow-gallery-ui.d.ts +0 -73
- package/dist/flow-gallery.d.ts +0 -147
- package/dist/flow-insights.d.ts +0 -104
- package/dist/flow-items.d.ts +0 -37
- package/dist/flow-live.d.ts +0 -16
- package/dist/flow-people.d.ts +0 -23
- package/dist/flow-pull-request.d.ts +0 -14
- package/dist/flow-replies.d.ts +0 -48
- package/dist/flow-result-card.d.ts +0 -22
- package/dist/flow-schedule.d.ts +0 -154
- package/dist/flow-scripts.d.ts +0 -31
- package/dist/flow-secrets.d.ts +0 -13
- package/dist/flow-send.d.ts +0 -54
- package/dist/flow-share.d.ts +0 -78
- package/dist/flow-sort.d.ts +0 -63
- package/dist/flow-starters-ui.d.ts +0 -15
- package/dist/flow-starters.d.ts +0 -63
- package/dist/flow-steps.d.ts +0 -52
- package/dist/flow-triggers.d.ts +0 -303
- package/dist/flow-unattended-words.d.ts +0 -48
- package/dist/flow-unattended.d.ts +0 -259
- package/dist/flows-cli.d.ts +0 -358
- package/dist/flows-ui.d.ts +0 -70
- package/dist/flows.d.ts +0 -136
- package/dist/folder-gate.d.ts +0 -32
- package/dist/folder-look.d.ts +0 -110
- package/dist/follow-through-brief.d.ts +0 -12
- package/dist/follow-through-cli.d.ts +0 -23
- package/dist/fonts.d.ts +0 -19
- package/dist/gaps.d.ts +0 -35
- package/dist/gate-failure.d.ts +0 -40
- package/dist/git-floor.d.ts +0 -16
- package/dist/git-incident.d.ts +0 -65
- package/dist/git-views.d.ts +0 -20
- package/dist/git.d.ts +0 -54
- package/dist/github-import.d.ts +0 -62
- package/dist/github-jobs.d.ts +0 -25
- package/dist/google-mail.d.ts +0 -59
- package/dist/grant.d.ts +0 -136
- package/dist/graph.d.ts +0 -164
- package/dist/guides.d.ts +0 -22
- package/dist/handover-note.d.ts +0 -33
- package/dist/health-cli.d.ts +0 -3
- package/dist/home-groups.d.ts +0 -39
- package/dist/html.d.ts +0 -85
- package/dist/install-method.d.ts +0 -17
- package/dist/integrations-ui.d.ts +0 -17
- package/dist/integrations.d.ts +0 -138
- package/dist/invoke.d.ts +0 -228
- package/dist/is-record.d.ts +0 -2
- package/dist/issues.d.ts +0 -41
- package/dist/jsonl-discriminants.d.ts +0 -11
- package/dist/keymap.d.ts +0 -43
- package/dist/keys.d.ts +0 -108
- package/dist/kits-ui.d.ts +0 -16
- package/dist/kits.d.ts +0 -88
- package/dist/knowledge-cli.d.ts +0 -132
- package/dist/knowledge-ui.d.ts +0 -45
- package/dist/landed-cleanup.d.ts +0 -175
- package/dist/laptop-background.d.ts +0 -187
- package/dist/laptop-service.d.ts +0 -111
- package/dist/latency-timeline.d.ts +0 -46
- package/dist/lead-about.d.ts +0 -35
- package/dist/lead-answer-eval.d.ts +0 -93
- package/dist/lead-capabilities.d.ts +0 -57
- package/dist/lead-cli-live.d.ts +0 -56
- package/dist/lead-cli.d.ts +0 -58
- package/dist/lead-commitments.d.ts +0 -84
- package/dist/lead-context.d.ts +0 -45
- package/dist/lead-contract.d.ts +0 -10
- package/dist/lead-doors.d.ts +0 -122
- package/dist/lead-follow.d.ts +0 -26
- package/dist/lead-identity.d.ts +0 -23
- package/dist/lead-latency-schema.d.ts +0 -24
- package/dist/lead-people.d.ts +0 -55
- package/dist/lead-progress.d.ts +0 -67
- package/dist/lead-queue-runtime.d.ts +0 -46
- package/dist/lead-queue.d.ts +0 -104
- package/dist/lead-route.d.ts +0 -56
- package/dist/lead-status.d.ts +0 -116
- package/dist/lead-sweep.d.ts +0 -67
- package/dist/lead-tools.d.ts +0 -167
- package/dist/lead-voice.d.ts +0 -85
- package/dist/lead.d.ts +0 -142
- package/dist/learning-child.d.ts +0 -1
- package/dist/learning-look.d.ts +0 -25
- package/dist/ledger-chain.d.ts +0 -46
- package/dist/ledger-csv.d.ts +0 -4
- package/dist/ledger-view.d.ts +0 -27
- package/dist/lesson-notes.d.ts +0 -81
- package/dist/limits-ui.d.ts +0 -34
- package/dist/link.d.ts +0 -72
- package/dist/live-backup.d.ts +0 -39
- package/dist/live-bus.d.ts +0 -141
- package/dist/live-children-read.d.ts +0 -52
- package/dist/live-children.d.ts +0 -73
- package/dist/live-detail.d.ts +0 -27
- package/dist/live-input.d.ts +0 -68
- package/dist/live-main-read.d.ts +0 -19
- package/dist/live-notes.d.ts +0 -20
- package/dist/live-open.d.ts +0 -28
- package/dist/live-records.d.ts +0 -149
- package/dist/live-reply.d.ts +0 -83
- package/dist/live-terminal.d.ts +0 -273
- package/dist/live.d.ts +0 -152
- package/dist/local-owner-acts.d.ts +0 -83
- package/dist/local-owner.d.ts +0 -135
- package/dist/log.d.ts +0 -7
- package/dist/login-secrets.d.ts +0 -60
- package/dist/machine-check.d.ts +0 -16
- package/dist/machine-identity.d.ts +0 -75
- package/dist/mailbox.d.ts +0 -57
- package/dist/maintenance.d.ts +0 -13
- package/dist/mcp-connect.d.ts +0 -181
- package/dist/mcp-core.d.ts +0 -110
- package/dist/mcp-http.d.ts +0 -32
- package/dist/mcp-oauth.d.ts +0 -92
- package/dist/mcp-person.d.ts +0 -22
- package/dist/mcp.d.ts +0 -20
- package/dist/memory-cli.d.ts +0 -768
- package/dist/memory-pass.d.ts +0 -151
- package/dist/memory-tidy.d.ts +0 -181
- package/dist/memory-use.d.ts +0 -35
- package/dist/merge-checklist.d.ts +0 -55
- package/dist/metrics.d.ts +0 -6
- package/dist/mobile-viewport.d.ts +0 -7
- package/dist/model-catalog.d.ts +0 -123
- package/dist/model-choices.d.ts +0 -235
- package/dist/model-names.d.ts +0 -6
- package/dist/models-cli.d.ts +0 -307
- package/dist/models-ui.d.ts +0 -161
- package/dist/modes.d.ts +0 -99
- package/dist/monitoring-settings.d.ts +0 -44
- package/dist/monitoring-ui.d.ts +0 -23
- package/dist/monitoring.d.ts +0 -34
- package/dist/names.d.ts +0 -67
- package/dist/needs-you.d.ts +0 -164
- package/dist/never-index.d.ts +0 -3
- package/dist/nightly-check.d.ts +0 -107
- package/dist/nightly-github.d.ts +0 -318
- package/dist/notification-delivery.d.ts +0 -19
- package/dist/notification-rows.d.ts +0 -30
- package/dist/oauth-run-token.d.ts +0 -51
- package/dist/observations.d.ts +0 -36
- package/dist/oidc.d.ts +0 -71
- package/dist/onboard.d.ts +0 -108
- package/dist/one-step-chat-schema.d.ts +0 -22
- package/dist/openrouter-models.d.ts +0 -34
- package/dist/operate-remote-arguments.d.ts +0 -36
- package/dist/operate-remote.d.ts +0 -98
- package/dist/operate.d.ts +0 -401
- package/dist/orphan-sweep.d.ts +0 -65
- package/dist/page-work-contract.d.ts +0 -21
- package/dist/password-bearer.d.ts +0 -25
- package/dist/passwordless.d.ts +0 -23
- package/dist/peek-cli.d.ts +0 -112
- package/dist/peek.d.ts +0 -110
- package/dist/people-audit-ui.d.ts +0 -16
- package/dist/person-proof.d.ts +0 -2
- package/dist/phase-routing.d.ts +0 -401
- package/dist/plain-schema.d.ts +0 -23
- package/dist/plain-words.d.ts +0 -20
- package/dist/plan-auto.d.ts +0 -25
- package/dist/plan-login.d.ts +0 -14
- package/dist/plan.d.ts +0 -188
- package/dist/plane-review.d.ts +0 -54
- package/dist/planner-source.d.ts +0 -225
- package/dist/planner.d.ts +0 -76
- package/dist/policy-ui.d.ts +0 -22
- package/dist/policy.d.ts +0 -92
- package/dist/prepared-evidence.d.ts +0 -17
- package/dist/principal.d.ts +0 -42
- package/dist/probe.d.ts +0 -46
- package/dist/process-custody.d.ts +0 -17
- package/dist/process-liveness.d.ts +0 -13
- package/dist/process-tree.d.ts +0 -39
- package/dist/project-access.d.ts +0 -17
- package/dist/project-activity.d.ts +0 -20
- package/dist/project-admission.d.ts +0 -105
- package/dist/project-cli.d.ts +0 -19
- package/dist/project-concurrency.d.ts +0 -62
- package/dist/project-delete-ui.d.ts +0 -96
- package/dist/project-delete.d.ts +0 -59
- package/dist/project-demo.d.ts +0 -12
- package/dist/project-file.d.ts +0 -3
- package/dist/project-identity.d.ts +0 -52
- package/dist/project-knowledge.d.ts +0 -124
- package/dist/project-learning.d.ts +0 -120
- package/dist/project-memory.d.ts +0 -70
- package/dist/project-outcomes.d.ts +0 -119
- package/dist/project-sandbox.d.ts +0 -59
- package/dist/project-skills.d.ts +0 -139
- package/dist/project-tools.d.ts +0 -318
- package/dist/project.d.ts +0 -65
- package/dist/prompt.d.ts +0 -33
- package/dist/proof.d.ts +0 -457
- package/dist/proposal.d.ts +0 -70
- package/dist/protected-storage-look.d.ts +0 -1
- package/dist/protected-storage.d.ts +0 -98
- package/dist/provider-auth.d.ts +0 -143
- package/dist/provider-capture.d.ts +0 -34
- package/dist/provider-connection.d.ts +0 -23
- package/dist/provider-home.d.ts +0 -22
- package/dist/provider-limits.d.ts +0 -37
- package/dist/provider.d.ts +0 -369
- package/dist/public-access.d.ts +0 -61
- package/dist/public-check.d.ts +0 -37
- package/dist/publish.d.ts +0 -146
- package/dist/pull-request-flow.d.ts +0 -189
- package/dist/pull-request-schema.d.ts +0 -5
- package/dist/pull-request-ui.d.ts +0 -25
- package/dist/pulls.d.ts +0 -121
- package/dist/push.d.ts +0 -120
- package/dist/quality.d.ts +0 -8
- package/dist/quick-start.d.ts +0 -26
- package/dist/read-executor-worker.d.ts +0 -1
- package/dist/read-executor.d.ts +0 -66
- package/dist/read-only-request.d.ts +0 -4
- package/dist/recipe-ui.d.ts +0 -21
- package/dist/recipes.d.ts +0 -56
- package/dist/release-adapters.d.ts +0 -205
- package/dist/release-approval.d.ts +0 -180
- package/dist/release-authority.d.ts +0 -173
- package/dist/release-auto.d.ts +0 -184
- package/dist/release-card.d.ts +0 -170
- package/dist/release-carry.d.ts +0 -261
- package/dist/release-ci-hold.d.ts +0 -41
- package/dist/release-cli.d.ts +0 -34
- package/dist/release-coverage.d.ts +0 -16
- package/dist/release-gate.d.ts +0 -84
- package/dist/release-git.d.ts +0 -43
- package/dist/release-links.d.ts +0 -29
- package/dist/release-net.d.ts +0 -90
- package/dist/release-next.d.ts +0 -48
- package/dist/release-recheck.d.ts +0 -146
- package/dist/release-refusal.d.ts +0 -32
- package/dist/release-view.d.ts +0 -37
- package/dist/release.d.ts +0 -806
- package/dist/releases.d.ts +0 -94
- package/dist/remote-audit.d.ts +0 -79
- package/dist/remote-command.d.ts +0 -45
- package/dist/remote-destination.d.ts +0 -36
- package/dist/remote-exec.d.ts +0 -38
- package/dist/remote-main.d.ts +0 -111
- package/dist/remote-run.d.ts +0 -20
- package/dist/remote.d.ts +0 -67
- package/dist/render.d.ts +0 -64
- package/dist/reply-shape.d.ts +0 -106
- package/dist/reply-voice.d.ts +0 -23
- package/dist/report-summary.d.ts +0 -22
- package/dist/reported-usage.d.ts +0 -69
- package/dist/repos.d.ts +0 -67
- package/dist/repository-context-ui.d.ts +0 -3
- package/dist/repository-context.d.ts +0 -66
- package/dist/request-budget-ui.d.ts +0 -14
- package/dist/request-budget.d.ts +0 -127
- package/dist/restart-certification.d.ts +0 -133
- package/dist/result-actions.d.ts +0 -36
- package/dist/result-acts.d.ts +0 -112
- package/dist/result-completion.d.ts +0 -39
- package/dist/result-evidence-readers.d.ts +0 -42
- package/dist/result-follow-ups.d.ts +0 -118
- package/dist/result-review.d.ts +0 -220
- package/dist/result-shots.d.ts +0 -59
- package/dist/retention-ui.d.ts +0 -21
- package/dist/retention.d.ts +0 -77
- package/dist/review-context.d.ts +0 -245
- package/dist/review-evidence.d.ts +0 -33
- package/dist/review-switch.d.ts +0 -36
- package/dist/reviewer.d.ts +0 -99
- package/dist/route-change-check.d.ts +0 -4
- package/dist/route-change.d.ts +0 -22
- package/dist/route-hooks.d.ts +0 -54
- package/dist/route-results.d.ts +0 -75
- package/dist/route-rules.d.ts +0 -324
- package/dist/route-savings.d.ts +0 -136
- package/dist/route-store.d.ts +0 -300
- package/dist/run-closeout.d.ts +0 -89
- package/dist/run-efficiency.d.ts +0 -74
- package/dist/run-ending.d.ts +0 -21
- package/dist/runner-process.d.ts +0 -76
- package/dist/runner.d.ts +0 -324
- package/dist/sample-project.d.ts +0 -31
- package/dist/sandbox-launch.d.ts +0 -1
- package/dist/sandbox-runtime.d.ts +0 -128
- package/dist/scan.d.ts +0 -32
- package/dist/scope.d.ts +0 -1098
- package/dist/scout-browser-lock.d.ts +0 -69
- package/dist/scout-browser.d.ts +0 -107
- package/dist/scout-net.d.ts +0 -25
- package/dist/scout-report.d.ts +0 -23
- package/dist/scout.d.ts +0 -142
- package/dist/secret-mint.d.ts +0 -1
- package/dist/serve.d.ts +0 -11
- package/dist/server/agents-computers.d.ts +0 -9
- package/dist/server/agents-live-filed.d.ts +0 -17
- package/dist/server/agents-live-lead.d.ts +0 -47
- package/dist/server/agents-live-room.d.ts +0 -23
- package/dist/server/chat.d.ts +0 -39
- package/dist/server/chrome.d.ts +0 -328
- package/dist/server/edge-refusal.d.ts +0 -7
- package/dist/server/flows.d.ts +0 -8
- package/dist/server/guards.d.ts +0 -81
- package/dist/server/handler-context.d.ts +0 -22
- package/dist/server/handler-registry.d.ts +0 -23
- package/dist/server/home-asks.d.ts +0 -45
- package/dist/server/home.d.ts +0 -65
- package/dist/server/http.d.ts +0 -337
- package/dist/server/in-place.d.ts +0 -15
- package/dist/server/kit-standalone.d.ts +0 -22
- package/dist/server/kit.d.ts +0 -452
- package/dist/server/last-checks.d.ts +0 -17
- package/dist/server/live.d.ts +0 -74
- package/dist/server/merge-ready-view.d.ts +0 -10
- package/dist/server/mutation-key.d.ts +0 -70
- package/dist/server/pages-assets.d.ts +0 -11
- package/dist/server/pages.d.ts +0 -8
- package/dist/server/people-tokens.d.ts +0 -18
- package/dist/server/remote-hooks.d.ts +0 -29
- package/dist/server/remote.d.ts +0 -60
- package/dist/server/render-chat.d.ts +0 -439
- package/dist/server/render-code-map.d.ts +0 -30
- package/dist/server/render-flaky.d.ts +0 -20
- package/dist/server/render-follow-through.d.ts +0 -11
- package/dist/server/render-history.d.ts +0 -51
- package/dist/server/render-new-task.d.ts +0 -54
- package/dist/server/render-pages.d.ts +0 -236
- package/dist/server/render-people.d.ts +0 -102
- package/dist/server/render-projects.d.ts +0 -104
- package/dist/server/render-release.d.ts +0 -19
- package/dist/server/render-results.d.ts +0 -758
- package/dist/server/render-settings.d.ts +0 -93
- package/dist/server/render-tasks.d.ts +0 -783
- package/dist/server/request-context.d.ts +0 -78
- package/dist/server/retired-routes.d.ts +0 -17
- package/dist/server/route-policy.d.ts +0 -18
- package/dist/server/route-table.d.ts +0 -114
- package/dist/server/runtime.d.ts +0 -343
- package/dist/server/session.d.ts +0 -192
- package/dist/server/settings.d.ts +0 -76
- package/dist/server/signup-gate.d.ts +0 -9
- package/dist/server/sweeps.d.ts +0 -4
- package/dist/server/task-views.d.ts +0 -98
- package/dist/server/tasks.d.ts +0 -108
- package/dist/server/terminals.d.ts +0 -31
- package/dist/server/welcome.d.ts +0 -28
- package/dist/server-telemetry.d.ts +0 -87
- package/dist/settings-groups-ui.d.ts +0 -286
- package/dist/settings-kit-script.d.ts +0 -21
- package/dist/settings-kit.d.ts +0 -173
- package/dist/settings-proofs.d.ts +0 -64
- package/dist/setup-guide.d.ts +0 -39
- package/dist/shared-deps.d.ts +0 -115
- package/dist/sign-in-guard.d.ts +0 -70
- package/dist/skills-ui.d.ts +0 -12
- package/dist/skills.d.ts +0 -99
- package/dist/slack-api.d.ts +0 -59
- package/dist/slack-chat.d.ts +0 -37
- package/dist/slack-settings.d.ts +0 -4
- package/dist/slack-socket.d.ts +0 -12
- package/dist/slack.d.ts +0 -6
- package/dist/sleep.d.ts +0 -2
- package/dist/source-key.d.ts +0 -2
- package/dist/spend-report.d.ts +0 -87
- package/dist/spend-ui.d.ts +0 -80
- package/dist/spend.d.ts +0 -142
- package/dist/sqlite-runtime.d.ts +0 -3
- package/dist/sqlite-telemetry.d.ts +0 -9
- package/dist/sso-settings.d.ts +0 -33
- package/dist/sso-ui.d.ts +0 -26
- package/dist/staged-runtimes.d.ts +0 -54
- package/dist/steer-capabilities.d.ts +0 -32
- package/dist/steer-controls.d.ts +0 -14
- package/dist/steer-live.d.ts +0 -19
- package/dist/steer-mailbox.d.ts +0 -46
- package/dist/steer-status.d.ts +0 -25
- package/dist/stop-proof.d.ts +0 -67
- package/dist/storage-sweep-child.d.ts +0 -1
- package/dist/storage-sweep-process.d.ts +0 -55
- package/dist/storage-sweep-schedule.d.ts +0 -30
- package/dist/storage-sweep.d.ts +0 -77
- package/dist/storage-ui.d.ts +0 -23
- package/dist/storage.d.ts +0 -68
- package/dist/store-baseline.d.ts +0 -19
- package/dist/store.d.ts +0 -8613
- package/dist/stream-scope.d.ts +0 -18
- package/dist/structured-output.d.ts +0 -57
- package/dist/style-asset.d.ts +0 -7
- package/dist/subagent-admin.d.ts +0 -53
- package/dist/subagent-desk.d.ts +0 -59
- package/dist/subagent-memory.d.ts +0 -65
- package/dist/subagent-question.d.ts +0 -59
- package/dist/subagent-tools.d.ts +0 -125
- package/dist/subagent-week.d.ts +0 -68
- package/dist/subagent-work.d.ts +0 -76
- package/dist/subagents-ui.d.ts +0 -22
- package/dist/subagents.d.ts +0 -146
- package/dist/subscription-chat.d.ts +0 -54
- package/dist/summary.d.ts +0 -33
- package/dist/surface.d.ts +0 -49
- package/dist/sweep-gate.d.ts +0 -10
- package/dist/sweep-quarantine.d.ts +0 -29
- package/dist/sync.d.ts +0 -94
- package/dist/tailnet.d.ts +0 -11
- package/dist/tamper-scan.d.ts +0 -4
- package/dist/task-activity.d.ts +0 -27
- package/dist/task-aliases.d.ts +0 -5
- package/dist/task-archive.d.ts +0 -13
- package/dist/task-base.d.ts +0 -39
- package/dist/task-composer.d.ts +0 -14
- package/dist/task-control.d.ts +0 -159
- package/dist/task-live.d.ts +0 -8
- package/dist/task-moves.d.ts +0 -90
- package/dist/task-outcome-cli.d.ts +0 -48
- package/dist/task-review-brief.d.ts +0 -69
- package/dist/task-sizing.d.ts +0 -58
- package/dist/task-source.d.ts +0 -77
- package/dist/task-status.d.ts +0 -324
- package/dist/task-text.d.ts +0 -31
- package/dist/team-chat-authorization.d.ts +0 -11
- package/dist/team-contract.d.ts +0 -103
- package/dist/team-http.d.ts +0 -25
- package/dist/team-leads.d.ts +0 -85
- package/dist/team-runtime.d.ts +0 -25
- package/dist/team-ui.d.ts +0 -4
- package/dist/team-updates.d.ts +0 -8
- package/dist/teams-api.d.ts +0 -33
- package/dist/teams-chat.d.ts +0 -36
- package/dist/teams-settings.d.ts +0 -14
- package/dist/teams.d.ts +0 -24
- package/dist/teardown-git.d.ts +0 -164
- package/dist/telegram-flow.d.ts +0 -112
- package/dist/telegram-lead.d.ts +0 -151
- package/dist/telegram-live.d.ts +0 -116
- package/dist/telegram-progress.d.ts +0 -20
- package/dist/telegram-settings.d.ts +0 -9
- package/dist/telegram-status.d.ts +0 -83
- package/dist/telegram-team.d.ts +0 -68
- package/dist/telegram.d.ts +0 -271
- package/dist/templates.d.ts +0 -69
- package/dist/terminal-catalog.d.ts +0 -11
- package/dist/terminal-text.d.ts +0 -11
- package/dist/test-infra.d.ts +0 -34
- package/dist/test-temp.d.ts +0 -40
- package/dist/text-limits.d.ts +0 -297
- package/dist/tidy.d.ts +0 -130
- package/dist/tier-report.d.ts +0 -44
- package/dist/token-notices.d.ts +0 -11
- package/dist/tokens-cli.d.ts +0 -21
- package/dist/tool-broker.d.ts +0 -52
- package/dist/tool-launcher.d.ts +0 -1
- package/dist/tool-secret-store.d.ts +0 -167
- package/dist/toolroll-update-cli.d.ts +0 -15
- package/dist/toolroll-update-ui.d.ts +0 -47
- package/dist/toolroll-update.d.ts +0 -265
- package/dist/tools-ui.d.ts +0 -51
- package/dist/transitions-recipes.d.ts +0 -1
- package/dist/tree-proof.d.ts +0 -34
- package/dist/tui-contract.d.ts +0 -202
- package/dist/tui-source.d.ts +0 -14
- package/dist/typed-start.d.ts +0 -51
- package/dist/unfenced-test-support.d.ts +0 -2
- package/dist/up-processes.d.ts +0 -162
- package/dist/up-role-child.d.ts +0 -1
- package/dist/update-notice.d.ts +0 -5
- package/dist/vanished-retry.d.ts +0 -30
- package/dist/verification-evidence.d.ts +0 -68
- package/dist/version.d.ts +0 -2
- package/dist/wake-hub.d.ts +0 -72
- package/dist/webhook-limits.d.ts +0 -23
- package/dist/webhook-readers.d.ts +0 -56
- package/dist/webhook-signing.d.ts +0 -27
- package/dist/webhooks.d.ts +0 -84
- package/dist/welcome-facts.d.ts +0 -18
- package/dist/when-html.d.ts +0 -40
- package/dist/work-index.d.ts +0 -175
- package/dist/work-summary.d.ts +0 -61
- package/dist/workspace-motion.d.ts +0 -4
- package/dist/workspace-revision.d.ts +0 -48
- package/dist/workspace-ui.d.ts +0 -385
- package/dist/worktree-notices.d.ts +0 -13
- package/dist/worktree.d.ts +0 -365
- package/dist/writes-mode.d.ts +0 -9
- package/dist/youiyoux-intake.d.ts +0 -234
|
@@ -31,15 +31,6 @@ import { attributes, html, htmlString, joinHtml, postForm, reauth } from "../htm
|
|
|
31
31
|
import { chip, facts } from "./kit.js";
|
|
32
32
|
import { publicationFactsOf, statusActionHref, statusLineHtml } from "./render-tasks.js";
|
|
33
33
|
export const RUNS_PAGE = 50;
|
|
34
|
-
/**
|
|
35
|
-
* A vscode://file href, or null (arc 6, finding 2): the link exists only
|
|
36
|
-
* when every part is provably tame — an absolute, control-free worktree;
|
|
37
|
-
* a relative, single-line path whose segments contain no empty, dot,
|
|
38
|
-
* dot-dot, or backslash components (so lexical resolution stays below the
|
|
39
|
-
* worktree); a line inside the same 1..1,000,000 range the comment form
|
|
40
|
-
* enforces. Encoding failures return null — a file row degrades to plain
|
|
41
|
-
* text, never to a 500. The scheme is a constant, never data.
|
|
42
|
-
*/
|
|
43
34
|
export function editorFileHref(worktree, path, line) {
|
|
44
35
|
if (!worktree.startsWith("/") || /[\u0000-\u001f\u007f]/.test(worktree))
|
|
45
36
|
return null;
|
|
@@ -61,23 +52,10 @@ export function editorFileHref(worktree, path, line) {
|
|
|
61
52
|
return null;
|
|
62
53
|
}
|
|
63
54
|
}
|
|
64
|
-
/** The execution profile in plain words (v24): what the password signs
|
|
65
|
-
* says WHAT RUNS — provider, exact model, permissions, and the real
|
|
66
|
-
* bounds — or says honestly that it cannot yet. */
|
|
67
|
-
/** The state badges the criterion-to-evidence matrix renders with — one
|
|
68
|
-
* shared vocabulary, so a "failed" row reads the same shade of trouble on
|
|
69
|
-
* the task page, the run page, the board, done, builds, the inbox, and
|
|
70
|
-
* chat (v39, extending Priority 2's "one surface, six places" rule from
|
|
71
|
-
* the verdict word to the per-criterion state). */
|
|
72
55
|
export function matrixStateBadge(state) {
|
|
73
|
-
// Red belongs to a Failed headline alone (task-status.ts); an unmet requirement is an ink note.
|
|
74
56
|
const cls = state === "pass" ? "badge-done" : state === "failed" ? "badge-note" : state === "missing" ? "badge-note" : "badge-manual-review";
|
|
75
|
-
// The same words as the Checks tab and the card's Requirements row (task-status.ts).
|
|
76
57
|
return html `<span class="badge ${cls}" data-matrix-state="${state}">${requirementWordOf({ state })}</span>`;
|
|
77
58
|
}
|
|
78
|
-
/** v40: the bounded repair chain's own line — presented as the user-facing
|
|
79
|
-
* recovery it represents, without exposing the internal workflow name.
|
|
80
|
-
* Renders on the task page and the run page identically. */
|
|
81
59
|
export function repairChainHtml(chain) {
|
|
82
60
|
if (chain === null)
|
|
83
61
|
return html ``;
|
|
@@ -97,26 +75,12 @@ export function repairChainHtml(chain) {
|
|
|
97
75
|
: html `<details><summary>What it is fixing</summary><p class="meta">${chain.unresolved.join(", ")}</p></details>`;
|
|
98
76
|
return html `<div class="card repair-chain" data-repair-outcome="${chain.outcome}"><p class="row"><strong>Automatic recovery</strong> — ${outcomeWords}${link}</p>${details}</div>`;
|
|
99
77
|
}
|
|
100
|
-
/**
|
|
101
|
-
* The bounded review-retry panel (v50), shared by the task page and the
|
|
102
|
-
* result cockpit so both say the same thing: which attempt is running or
|
|
103
|
-
* queued, how the latest one ended, every root attempt on record, and the
|
|
104
|
-
* ONE explicit act — a Retry review form — rendered only while the store's
|
|
105
|
-
* allowance admits it and this session may ask (an approver's cookie
|
|
106
|
-
* session). Every other state shows the same control disabled, in words,
|
|
107
|
-
* so a person always sees why nothing more will happen by itself. Empty
|
|
108
|
-
* when no review was ever asked for.
|
|
109
|
-
*/
|
|
110
78
|
export function reviewRetryPanel(_taskId, _sourceRun, retry, _options) {
|
|
111
79
|
if (retry === null || retry.state === "unrequested")
|
|
112
80
|
return html ``;
|
|
113
81
|
const attempts = retry.attempts.map(one => html `<li data-review-attempt="${one.attempt}" data-review-outcome="${one.outcome ?? "open"}"><a href="/r/${one.runId}">Run #${one.runId}</a> · ${one.outcome ?? "unfinished"}${one.reason === null ? "" : html ` · ${one.reason}`}</li>`);
|
|
114
82
|
return html `<details class="review-history" data-review-state="${retry.state}"><summary>Previous assessments</summary><p class="meta">Saved history; no separate review will be started.</p>${attempts.length === 0 ? "" : html `<ol aria-label="previous assessments">${attempts}</ol>`}</details>`;
|
|
115
83
|
}
|
|
116
|
-
/** A one-line summary of the matrix for list rows too dense for the full
|
|
117
|
-
* table (done, builds, board, inbox) — "2/3 criteria", plus a worst-state
|
|
118
|
-
* badge so trouble is visible without opening the row. `[]` renders
|
|
119
|
-
* nothing. */
|
|
120
84
|
export function criterionMatrixSummary(matrix) {
|
|
121
85
|
if (matrix.length === 0)
|
|
122
86
|
return html ``;
|
|
@@ -150,9 +114,6 @@ export function evidenceLinksFor(artifacts) {
|
|
|
150
114
|
}
|
|
151
115
|
return map;
|
|
152
116
|
}
|
|
153
|
-
/** Read the approved requirement first; inspect its saved evidence on demand.
|
|
154
|
-
* Machine results, reviewer judgements and missing context remain separate.
|
|
155
|
-
* Warnings stay outside the disclosure, including on compact surfaces. */
|
|
156
117
|
export function criterionMatrixHtml(matrix, options = {}) {
|
|
157
118
|
if (matrix.length === 0)
|
|
158
119
|
return html ``;
|
|
@@ -173,15 +134,10 @@ export function criterionMatrixHtml(matrix, options = {}) {
|
|
|
173
134
|
const state = row.state;
|
|
174
135
|
const awaitingAssessment = row.assessment?.evidenceState === "pass" && row.review === null;
|
|
175
136
|
const confirmed = row.assessment !== undefined && state === "pass";
|
|
176
|
-
// Plain words (task-status brief): the retired assessment step is not a state a person acts on.
|
|
177
|
-
// The card's Requirements row reads the same words from the same source (task-status.ts), so they agree.
|
|
178
137
|
const label = requirementWordOf(row, options.verdict, options.release);
|
|
179
138
|
const cls = label === "Met" ? "badge-done" : label === "You check" ? "badge-manual-review" : "badge-note";
|
|
180
139
|
const warnings = [];
|
|
181
|
-
// Only replace the known boilerplate. Other recorded failure details
|
|
182
|
-
// remain verbatim, so concision cannot hide a different problem.
|
|
183
140
|
const detail = row.detail.filter(line => !(row.assessment && row.review && line === `${row.review.author} ${row.review.judgement === "contradicts" ? "contradicts" : "needs more evidence for"} criterion "${row.id}": ${row.review.note}`) && !(state === "manual-review" && /^criterion "[^"\n]+" requires manual-review evidence — an operator must accept it before this can verify$/.test(line)));
|
|
184
|
-
// A requirement a release check covers, or that waits only on one, has nothing wrong to say.
|
|
185
141
|
if (!awaitingAssessment && state !== "pass" && label !== "Met" && label !== CHECKED_AT_RELEASE && detail.length > 0)
|
|
186
142
|
warnings.push(html `<ul class="requirement-issues">${detail.map(line => html `<li>${line}</li>`)}</ul>`);
|
|
187
143
|
const review = row.review;
|
|
@@ -215,31 +171,19 @@ export function criterionMatrixHtml(matrix, options = {}) {
|
|
|
215
171
|
});
|
|
216
172
|
return html `<div class="result-section criterion-matrix"><strong>Requirements · ${matrix.length}</strong><ol class="requirement-list">${rows}</ol></div>`;
|
|
217
173
|
}
|
|
218
|
-
/** One policy summary beneath the requirements. Per-requirement concerns
|
|
219
|
-
* are already visible in the matrix; do not repeat their full text here. */
|
|
220
174
|
export function semanticCoverageHtml(matrix, qualityMode) {
|
|
221
175
|
if (!matrix.some(row => row.review != null || row.assessment !== undefined))
|
|
222
176
|
return html ``;
|
|
223
177
|
const coverage = semanticCoverage(matrix, qualityMode);
|
|
224
178
|
return html `<details class="result-section semantic-coverage" data-semantic-coverage="${coverage.satisfied === true ? "satisfied" : coverage.satisfied === null ? "unsettled" : "unsatisfied"}" data-coverage-policy="${coverage.policy}"><summary>Previous assessment</summary><p class="meta">The saved assessment confirmed ${coverage.upheld.length} of ${coverage.total} requirements.</p></details>`;
|
|
225
179
|
}
|
|
226
|
-
/** A same-site path or "/": never a scheme, a host, or a protocol-relative road. */
|
|
227
|
-
/** The words a result page shows for a refusal its own form led to, by the fixed code a redirect carries. */
|
|
228
180
|
export const ACCEPT_ANYWAY_NEEDS_REASON = "Accepting anyway needs a reason.";
|
|
229
181
|
export const RESULT_REFUSALS = { reason: ACCEPT_ANYWAY_NEEDS_REASON };
|
|
230
|
-
/** A same-site page address with a refusal code added, before any fragment. */
|
|
231
182
|
export function withRefusal(href, code) {
|
|
232
183
|
const at = href.indexOf("#");
|
|
233
184
|
const [path, hash] = at === -1 ? [href, ""] : [href.slice(0, at), href.slice(at)];
|
|
234
185
|
return `${path}${path.includes("?") ? "&" : "?"}refused=${code}${hash}`;
|
|
235
186
|
}
|
|
236
|
-
// ---- the review cockpit (Priority 5) ----------------------------------------
|
|
237
|
-
// The field parallelizes generation and lets review pile up (M8.19); this
|
|
238
|
-
// page compresses it. Read-only by design — ranked advice and deep links,
|
|
239
|
-
// no merge button, because the PR is the terminus and the person merges
|
|
240
|
-
// on GitHub.
|
|
241
|
-
/** The queue reads at most this many completed tasks — the store's own
|
|
242
|
-
* page ceiling, admission bound before it. */
|
|
243
187
|
export const REVIEW_QUEUE_CAP = 100;
|
|
244
188
|
export const PRIORITY_LABELS = { 0: "needs action", 1: "review", 2: "no flags" };
|
|
245
189
|
export function reviewPriorityOf(row) {
|
|
@@ -287,8 +231,6 @@ export function reviewPriorityOf(row) {
|
|
|
287
231
|
raise(1, "no verification result");
|
|
288
232
|
return { band, label: PRIORITY_LABELS[band], reasons };
|
|
289
233
|
}
|
|
290
|
-
/** Ranked, stable: band first, then newest completion, then task id — the
|
|
291
|
-
* same input always yields the same queue, whoever loads it. */
|
|
292
234
|
export function rankReviewQueue(rows) {
|
|
293
235
|
return rows
|
|
294
236
|
.map(row => ({ ...row, priority: reviewPriorityOf(row) }))
|
|
@@ -300,10 +242,6 @@ export function rankReviewQueue(rows) {
|
|
|
300
242
|
? b.completedAt.localeCompare(a.completedAt)
|
|
301
243
|
: a.taskId.localeCompare(b.taskId));
|
|
302
244
|
}
|
|
303
|
-
/** Whether a changed path sits inside the scope's signed "touches" — an
|
|
304
|
-
* exact file, a directory prefix (with or without its slash), or a plain
|
|
305
|
-
* `*` / `**` glob. Touches are advisory in the scope; here they only
|
|
306
|
-
* decide which files wear the "outside the signed touches" flag. */
|
|
307
245
|
export function withinSignedTouches(path, touches) {
|
|
308
246
|
return touches.some(raw => {
|
|
309
247
|
const touch = raw.trim().replace(/^\.\//, "");
|
|
@@ -315,13 +253,7 @@ export function withinSignedTouches(path, touches) {
|
|
|
315
253
|
return path === touch || path.startsWith(dir);
|
|
316
254
|
});
|
|
317
255
|
}
|
|
318
|
-
/** A signed touch's glob as a regular expression, gitignore-style: `*`
|
|
319
|
-
* stays inside one segment; `**` followed by `/` spans zero or more
|
|
320
|
-
* directories, so `src/**` followed by `/*.ts` matches `src/a.ts` as well
|
|
321
|
-
* as `src/nested/a.ts` (v2 review, comment 2); a bare `**` spans anything.
|
|
322
|
-
* Whatever the glob names, its contents are inside it too. */
|
|
323
256
|
export function touchGlob(raw) {
|
|
324
|
-
// A trailing slash names a directory; the contents clause below covers it.
|
|
325
257
|
const touch = raw.replace(/\/+$/, "");
|
|
326
258
|
let pattern = "";
|
|
327
259
|
for (let at = 0; at < touch.length;) {
|
|
@@ -344,26 +276,11 @@ export function touchGlob(raw) {
|
|
|
344
276
|
}
|
|
345
277
|
return new RegExp(`^${pattern}(?:/.*)?$`);
|
|
346
278
|
}
|
|
347
|
-
/** A stable, attribute-safe anchor for one file of the sealed patch —
|
|
348
|
-
* derived from the path's bytes, never from the path's characters, so a
|
|
349
|
-
* hostile file name can neither break the id nor escape the attribute. */
|
|
350
279
|
export function diffFileAnchor(path) {
|
|
351
280
|
return `diff-file-${createHash("sha256").update(path, "utf8").digest("hex").slice(0, 16)}`;
|
|
352
281
|
}
|
|
353
|
-
/** Paths whose churn a reviewer reads first — dependency manifests and
|
|
354
|
-
* locks, CI workflows, container and schema definitions, migrations, the
|
|
355
|
-
* environment files secrets live in, and files NAMED for credentials.
|
|
356
|
-
* The credential words match only as whole `-`/`_`/`.`-delimited pieces
|
|
357
|
-
* of the file name (v2 review, comment 4): `auth.ts`, `api-token.ts`,
|
|
358
|
-
* `secrets.json` count; `author.ts`, `tokenizer.ts`, and `.envelope.ts`
|
|
359
|
-
* are ordinary names and do not. `permission` is not a credential word
|
|
360
|
-
* at all — `permissions-ui.tsx` is a screen, not a secret. */
|
|
361
282
|
export const SENSITIVE_PATH = /(^|\/)(\.github|migrations?)\/|(^|\/)(package(-lock)?\.json|pnpm-lock\.yaml|yarn\.lock|Dockerfile|\.env(\.[^/]+)?|schema[^/]*\.(sql|prisma)|(?:[^/]*[-_.])?(auth|secrets?|tokens?|credentials?)(?:[-_.][^/]*)?)$/i;
|
|
362
283
|
export const LARGE_CHANGE_LINES = 200;
|
|
363
|
-
/** The changed-file list's own review priority: outside the signed
|
|
364
|
-
* touches first, then files a machine cannot diff or a criterion never
|
|
365
|
-
* cited, then the rest by churn. Presentation only — the sealed patch
|
|
366
|
-
* keeps its own order beneath, byte for byte. */
|
|
367
284
|
export function reviewFilePriority(file, proofCitesPaths) {
|
|
368
285
|
const reasons = [];
|
|
369
286
|
let band = 2;
|
|
@@ -396,17 +313,7 @@ export function orderChangedFiles(files, proofCitesPaths) {
|
|
|
396
313
|
? churn(b) - churn(a)
|
|
397
314
|
: a.path.localeCompare(b.path));
|
|
398
315
|
}
|
|
399
|
-
/** The receipt's own proof-state word, so the cockpit and the task page
|
|
400
|
-
* never disagree on the state's name or its precedence: the stored
|
|
401
|
-
* verdict decides, whatever the run's outcome — a no-change run with a
|
|
402
|
-
* refuted proof reads as refuted, never as "no change needed". The one
|
|
403
|
-
* word the receipt never needs is "No build record": a manual completion
|
|
404
|
-
* has no receipt to share it with. */
|
|
405
|
-
/** The cockpit's headline status: the shared projection over the same
|
|
406
|
-
* verdict, acceptance, and publication rows the task page reads. */
|
|
407
316
|
export function cockpitStatusOf(view) {
|
|
408
|
-
// The receipt's own status (package 3): the same projection the chat
|
|
409
|
-
// receipt and the run page print, read from the shared detail.
|
|
410
317
|
if (view.run === null || view.detail === null)
|
|
411
318
|
return view.assignment === null ? resultHeadlineOf(resultStatusOf(null, null)) : assignmentPresentationOf(view.assignment).status;
|
|
412
319
|
const receiptStatus = receiptStatusOf(view.detail.receipt);
|
|
@@ -414,9 +321,6 @@ export function cockpitStatusOf(view) {
|
|
|
414
321
|
return assignmentStatusOf(assignmentWithEvidence(view.assignment, receiptStatus, view.run.id));
|
|
415
322
|
return resultHeadlineOf(receiptStatus);
|
|
416
323
|
}
|
|
417
|
-
/** Turn verifier records into one sentence a project owner can act on.
|
|
418
|
-
* A command-not-found result means the check could not start, not that the
|
|
419
|
-
* product itself failed. The stored record remains unchanged. */
|
|
420
324
|
export function verificationExplanation(verdict, reasons) {
|
|
421
325
|
const plain = reasons.map(reason => {
|
|
422
326
|
if (reason === "the approved verification command passed after the approved setup command ran"
|
|
@@ -500,9 +404,6 @@ export function verificationRecovered(reasons) {
|
|
|
500
404
|
return reasons.some(reason => reason === "the approved verification command passed after the approved setup command ran"
|
|
501
405
|
|| reason === "the approved verification command passed after the approved setup command restored project dependencies");
|
|
502
406
|
}
|
|
503
|
-
/** Whether a reviewer can annotate this result's diff here: the shared
|
|
504
|
-
* detail's own answer (a verified, non-empty sealed patch read by a
|
|
505
|
-
* session that holds a CSRF token) — decided once, in `resultDetailOf`. */
|
|
506
407
|
export function canAnnotateDiff(view, csrf) {
|
|
507
408
|
return view !== null && view.detail !== null && csrf !== "" && view.detail.canAnnotate;
|
|
508
409
|
}
|
|
@@ -535,8 +436,6 @@ export function reviewCockpitPage(chrome, data) {
|
|
|
535
436
|
: html `<p class="meta cockpit-beyond" data-cockpit-beyond="1">This result is not in the current review list.</p>`;
|
|
536
437
|
const detailParts = selected === null ? null : reviewCockpitDetailParts(selected, csrf, data.noted, data.canRetryReview, data.tab, data.user);
|
|
537
438
|
const detail = detailParts === null ? html `<section class="cockpit-detail"><p class="meta">Nothing to review yet.</p></section>` : detailParts.html;
|
|
538
|
-
// The rebuilt page (shadcn/ui): the selected result at full width, the
|
|
539
|
-
// list one tap away in the header.
|
|
540
439
|
const view = {
|
|
541
440
|
kind: "result",
|
|
542
441
|
results: queue.map(row => {
|
|
@@ -575,8 +474,6 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
575
474
|
const accepted = proof?.accepted !== null && proof?.accepted !== undefined;
|
|
576
475
|
const canAnnotate = canAnnotateDiff(view, csrf);
|
|
577
476
|
const status = cockpitStatusOf(view);
|
|
578
|
-
// Header: what this is, its verdict word, and why it sits where it does. On a task page the task's own header says
|
|
579
|
-
// all of it, once.
|
|
580
477
|
if (host.kind === "review")
|
|
581
478
|
parts.push(joinHtml([
|
|
582
479
|
html `<header class="cockpit-head" data-review-task="${view.taskId}">`,
|
|
@@ -587,16 +484,13 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
587
484
|
]));
|
|
588
485
|
if (view.detail === null && view.historyProblem !== null)
|
|
589
486
|
parts.push(html `<p class="problem" data-history-problem>${view.historyProblem} <a href="${taskHref(view.taskId)}">Open task</a></p>`);
|
|
590
|
-
// The primary next act — exactly one road, chosen from the state.
|
|
591
487
|
parts.push(reviewNextAction(view, csrf, accepted, canAnnotate));
|
|
592
|
-
// Approved intent: the signed scope's words, the plan's approach.
|
|
593
488
|
const intent = view.intent;
|
|
594
489
|
let intentView = null;
|
|
595
490
|
if (intent === null) {
|
|
596
491
|
parts.push(html `<section class="card cockpit-section" data-cockpit-section="intent"><h3>Approved plan</h3><p class="meta">No plan was filed for this task, so there is no approved goal or boundary to review.</p></section>`);
|
|
597
492
|
}
|
|
598
493
|
else {
|
|
599
|
-
// The time itself goes to the page as a stamp: the one formatter words it in the viewer's zone.
|
|
600
494
|
const approvalWords = intent.approval.approved
|
|
601
495
|
? `Approved by ${intent.approvedBy ?? "an approver"}`
|
|
602
496
|
: intent.approval.reason === "changed"
|
|
@@ -629,7 +523,6 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
629
523
|
network: view.network ?? null,
|
|
630
524
|
timing: view.timing ?? null,
|
|
631
525
|
acts: { primary: null, secondary: null, line: null }, runChecks: null, mismatch: null,
|
|
632
|
-
// The raw run record lives under Details now (2026-10-02): /r/<id> for this result redirects here.
|
|
633
526
|
record: run === null ? null : { build: run.id, href: `/r/${run.id}?record=1`, facts: [
|
|
634
527
|
{ label: "Agent", value: [run.provider, run.model].filter(Boolean).join(" · ") },
|
|
635
528
|
{ label: "Builder", value: run.runner },
|
|
@@ -643,19 +536,13 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
643
536
|
parts.push(html `<section class="card cockpit-section" id="verification" data-cockpit-section="proof"><h3>Verification</h3><p class="meta">This task has no finished build record, so there are no captured changes or checks to review.</p><p class="row"><a href="${taskHref(view.taskId)}">Open the task →</a></p></section>`);
|
|
644
537
|
return { html: html `<section class="cockpit-detail">${joinHtml(parts, "\n")}</section>`, selected: { ...selected, noRun: "This task has no finished build record, so there are no captured changes or checks to review." } };
|
|
645
538
|
}
|
|
646
|
-
// The result itself (package 3): the same panel the run page and the
|
|
647
|
-
// chat's result view render — Summary / Changes / Checks with Request
|
|
648
|
-
// changes beside it. The cockpit adds its own acts under Checks: the
|
|
649
|
-
// v50 review-retry panel and the accept-with-exception form.
|
|
650
539
|
const extraChecks = reviewRetryPanel(view.taskId, run.id, view.reviewRetry, { csrf, canAct: false, returnTo: null });
|
|
651
540
|
const here = reviewHref(view.taskId);
|
|
652
|
-
/** This result's own address on its host, at one of its views (summary when none). */
|
|
653
541
|
const at = (section = "summary") => host.kind === "task"
|
|
654
542
|
? `${host.base}&run=${run.id}${section === "summary" ? "" : `§ion=${section}`}`
|
|
655
543
|
: `${here}&run=${run.id}${section === "summary" ? "" : `&tab=${section}`}`;
|
|
656
544
|
const assignment = view.assignment === null ? null : assignmentWithEvidence(view.assignment, receiptStatusOf(view.detail.receipt), run.id);
|
|
657
545
|
const saved = assignment?.receipt?.checks;
|
|
658
|
-
// The approved check as the task page reads it (task-status.ts approvedCheckOf): one answer for this whole page.
|
|
659
546
|
const checks = saved === undefined || assignment?.receipt == null ? undefined
|
|
660
547
|
: { ...saved, ...(receiptChecksOf(assignment.receipt) ?? {}), detail: saved.detail };
|
|
661
548
|
if (checks !== undefined)
|
|
@@ -676,50 +563,38 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
676
563
|
headStatus: false,
|
|
677
564
|
action: false,
|
|
678
565
|
});
|
|
679
|
-
// On a task page the result script keeps the result's own view in `section=` (the page's `tab` is the task's).
|
|
680
566
|
if (host.kind === "task")
|
|
681
567
|
panel.panel.attributes = { ...panel.panel.attributes, "data-result-param": "section" };
|
|
682
568
|
parts.push(html `<div id="verification" data-cockpit-section="result">${panel.html}</div>`);
|
|
683
|
-
|
|
684
|
-
// the one line says the next step.
|
|
685
|
-
const hardStop = hardBlockerOf(assignment);
|
|
569
|
+
const hardStop = hardBlockerOf(assignment) ?? view.detail.completeRefusal ?? null;
|
|
686
570
|
const blocked = hardStop ?? cantAcceptYetOf(proof?.verdict ?? null, proof?.reasons ?? [], accepted);
|
|
687
571
|
const youCheck = panel.panel.youCheck;
|
|
688
|
-
// Accept and finish posts the completion; when an acceptance is owed (the person's own checks, or a reason a
|
|
689
|
-
// report that doesn't match its changes asks for), the same request records it first.
|
|
690
572
|
const owed = accepted ? null : youCheck?.accept != null ? { note: null } : panel.panel.need?.accept != null ? { note: panel.panel.need.accept.note }
|
|
691
573
|
: blocked === ACCEPT_NEEDS_REASON ? { note: "Why is this safe to accept?" } : null;
|
|
692
574
|
const complete = hardStop === null && assignment?.state === "ready-to-check" && assignment.receipt !== null && canRetryReview && csrf !== ""
|
|
693
575
|
? { action: `${taskHref(view.taskId)}/complete`, receipt: assignment.receipt.digest, run: run.id, accept: owed, ...(host.kind === "task" ? { returnTo: at() } : {}) } : null;
|
|
694
576
|
if (complete !== null)
|
|
695
577
|
parts.push(completionForm(view.taskId, run.id, complete.receipt, view.detail?.pullRequestTo ?? null, owed));
|
|
696
|
-
// The one decision, after the evidence: Accept and finish only when every requirement is met and the checks passed.
|
|
697
578
|
const acceptsHere = complete !== null || panel.panel.need?.accept != null || youCheck?.accept != null;
|
|
698
579
|
const matrix = proof === null || proof.proofProblem !== null ? [] : proof.matrix;
|
|
699
580
|
const unanswered = accepted || youCheck == null ? [] : youCheck.items.length > 0 ? youCheck.items.map(one => one.statement === "" ? one.words : one.statement) : youCheck.lines;
|
|
700
581
|
const base = !acceptsHere ? null : acceptWordsOf({
|
|
701
|
-
// Checks Off that a release check already covers read as passed (release-coverage.ts).
|
|
702
582
|
checks: checks === undefined ? null : { passed: "passed", failed: "failed", running: "running", "not-run": "not-run", off: "off", unreadable: "unavailable" }[approvedCheckStateOf(checks)],
|
|
703
|
-
// Release-aware words (task-status.ts): a requirement waiting only on a release check, or covered by one, isn't unmet.
|
|
704
583
|
unmet: matrix.filter(row => !["Met", "You check", CHECKED_AT_RELEASE].includes(requirementWordOf(row, null, checks === undefined ? undefined : checkBackingOf(checks)))).length,
|
|
705
584
|
action: complete !== null ? "complete" : "accept",
|
|
706
585
|
publishing: view.detail?.publishing ?? "other",
|
|
707
|
-
proof: proof !== null && proof.proof !== null
|
|
586
|
+
proof: proof !== null && proof.proofProblem === null && (proof.proof !== null || proof.matrix.length > 0),
|
|
708
587
|
});
|
|
709
|
-
// Refuted: plain Accept and finish stays as allowed, in outline, and the one line before the acts (acts.line) says why.
|
|
710
588
|
const settled = base === null || blocked === null ? base : { ...base, label: "Accept", ready: false };
|
|
711
589
|
const decision = settled === null ? null : { sentence: RESULT_DECISION_SENTENCE, ...settled, ...acceptWithChecksOf(settled, { unanswered, notRight: [] }),
|
|
712
590
|
base: { label: settled.label, ready: settled.ready, why: settled.why } };
|
|
713
|
-
// Run checks: no check ran on this result (or its saved one can't be read), the project has one, and an approver may run it.
|
|
714
591
|
const followUps = view.detail.followUps ?? null;
|
|
715
592
|
const checksRunning = checks?.running != null || (followUps?.checks.some(one => one.state === "waiting" || one.state === "running") ?? false);
|
|
716
593
|
const runChecks = canRetryReview && csrf !== "" && followUps !== null && (followUps.full || followUps.quick) && !checksRunning &&
|
|
717
594
|
(checks === undefined || ((checks.status === "not-run" || checks.status === "unavailable") && checks.release == null))
|
|
718
|
-
// Back on this result's Checks tab, where #follow-ups shows the run it started.
|
|
719
595
|
? { action: `/r/${run.id}/checks`, level: followUps.full ? "full" : "quick", returnTo: at("checks") } : null;
|
|
720
596
|
const need = panel.panel.need;
|
|
721
597
|
const nextKind = selected.next?.kind;
|
|
722
|
-
// A failed build: what went wrong is the card, Retry the act; a link to this same page goes nowhere, so it isn't one.
|
|
723
598
|
const failure = view.failure == null ? null : { line: view.failure.line, evidence: view.failure.evidence, suggestion: view.failure.suggestion, retry: view.failure.retry,
|
|
724
599
|
link: view.failure.link === null || (view.failure.link.href.startsWith(`${here}&run=${run.id}`) && !view.failure.link.href.includes("#")) ? null
|
|
725
600
|
: host.kind === "task" && view.failure.link.href.startsWith(`${here}&run=${run.id}&tab=`) ? { ...view.failure.link, href: view.failure.link.href.replace(`${here}&run=${run.id}&tab=`, `${host.base}&run=${run.id}§ion=`) } : view.failure.link,
|
|
@@ -738,12 +613,9 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
738
613
|
notRight: 0,
|
|
739
614
|
};
|
|
740
615
|
const acts = resultActsOf(actFacts);
|
|
741
|
-
// A refuted result's card lists every recorded disagreement, each tied to its lines; when the report itself doesn't
|
|
742
|
-
// match the changes (not a failed check), that is the headline.
|
|
743
616
|
const mismatch = failure !== null || proof === null || accepted || proof.verdict !== "refuted" ? null : (() => {
|
|
744
617
|
const patch = view.detail?.terminal?.patch ?? null;
|
|
745
618
|
const files = patch === null || "problem" in patch ? [] : parseReviewDiff(patch.text).files;
|
|
746
|
-
// Each file's first change: the lines it added (else every line it shows), and where that change starts (its link target).
|
|
747
619
|
const hunkStart = new Map();
|
|
748
620
|
const changes = new Map(files.map(file => {
|
|
749
621
|
const shown = file.hunks[0]?.lines.filter(line => line.newLine !== null && line.kind !== "meta") ?? [];
|
|
@@ -755,7 +627,6 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
755
627
|
}));
|
|
756
628
|
const changesHref = at("changes");
|
|
757
629
|
const found = reportMismatchesOf(proof.reasons, proof.proofProblem === null ? proof.matrix : [], changes);
|
|
758
|
-
// The saved report itself can't be read: that is the evidence problem, said once.
|
|
759
630
|
if (proof.proofProblem !== null)
|
|
760
631
|
found.push({ text: `The saved report can't be read: ${proof.proofProblem}`, path: null, lines: null, inChanges: null, note: null, reason: proof.proofProblem });
|
|
761
632
|
if (found.length === 0)
|
|
@@ -779,10 +650,7 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
779
650
|
html: html `<section class="cockpit-detail">${joinHtml(parts, "\n")}</section>`,
|
|
780
651
|
selected: {
|
|
781
652
|
...selected, complete: failure === null ? complete : null, decision: failure === null ? decision : null, acts, actFacts, runChecks, mismatch, failure,
|
|
782
|
-
// A failed build reads Failed, whatever its task has done since; its outcome is what went wrong.
|
|
783
|
-
// Run checks is the decision's own act on this page; a status row never sends the person to Chat for it.
|
|
784
653
|
panel: (() => {
|
|
785
|
-
// A Chat link to this same result would lead back here: it isn't one.
|
|
786
654
|
const elsewhere = (href) => href !== null && !href.endsWith("#follow-ups") && !new RegExp(`^/chat\\?task=[^&]+&result=${run.id}(?:&|$)`).test(href);
|
|
787
655
|
const shown = panel.panel.status === null ? null : view.demo === true ? demoChecksOf(panel.panel.status) : panel.panel.status;
|
|
788
656
|
const missed = proof === null || proof.proofProblem !== null ? 0 : requirementsOf(proof.matrix)?.missed ?? 0;
|
|
@@ -790,9 +658,7 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
790
658
|
href: elsewhere(one.href) ? one.href : null, action: one.action !== null && elsewhere(one.action.href) ? one.action : null })) };
|
|
791
659
|
return failure === null ? { ...panel.panel, status }
|
|
792
660
|
: { ...panel.panel, outcome: failure.line, need: null, youCheck: null, status: status === null ? null : { ...status, headline: "Failed", tone: "danger", sentence: failure.line, need: null,
|
|
793
|
-
// Read as Failed, the Requirements row counts what it missed, as the task's card does.
|
|
794
661
|
details: status.details.map(one => one.key !== "requirements" || missed === 0 ? one : { ...one, text: `${missed} missed`, mark: "failed", action: null }) },
|
|
795
|
-
// What it missed is said once, in plain words above; the recorded wording stays under Details.
|
|
796
662
|
attention: panel.panel.attention.filter(one => !(proof?.reasons ?? []).includes(one) && !(proof?.matrix ?? []).some(row => row.detail.includes(one))) };
|
|
797
663
|
})(),
|
|
798
664
|
...(failure === null ? {} : { status: { label: "Failed", tone: "problem", token: "failed" } }),
|
|
@@ -800,25 +666,18 @@ export function reviewCockpitDetailParts(view, csrf, noted, canRetryReview, tab,
|
|
|
800
666
|
},
|
|
801
667
|
};
|
|
802
668
|
}
|
|
803
|
-
/** What Accept and finish owes before it completes, as the form asks for it: the server's own rule
|
|
804
|
-
* (owedAcceptance), so the form asks for exactly what the completion requires. */
|
|
805
669
|
export function owedAcceptanceOf(receipt) {
|
|
806
670
|
const owed = owedAcceptance(receipt);
|
|
807
671
|
return owed === null ? null : owed === "person-check" ? { note: null } : { note: "Why is this safe to accept?" };
|
|
808
672
|
}
|
|
809
673
|
export function completionForm(taskId, runId, digest, pullRequestTo = null, accept = null) {
|
|
810
|
-
// Accept and finish, in one request: with an acceptance owed (the person's own checks, or an exception and
|
|
811
|
-
// its reason, asked for right here), the same post records it first.
|
|
812
674
|
const reason = accept?.note == null ? "" : html `<label class="meta" for="complete-reason-${runId}">${ACCEPT_NEEDS_REASON}</label><input type="text" id="complete-reason-${runId}" name="note" maxlength="500" required placeholder="${accept.note}">`;
|
|
813
675
|
const options = { attrs: { class: "card result-complete" }, hidden: { receipt: digest, run: runId, accept: accept === null ? null : "1" } };
|
|
814
676
|
if (pullRequestTo !== null) {
|
|
815
|
-
// With pull requests set up: the PR is the primary road, a bare finish the quiet one beside it.
|
|
816
677
|
return postForm(`${taskHref(taskId)}/complete`, html `${reason}<p class="meta">Finishes the task. A pull request opens on ${pullRequestTo} from this exact commit when you ask for one.</p><div class="result-complete-actions"><button type="submit" name="publish" value="1" style="min-height:44px">Accept and open a pull request</button><button type="submit" class="secondary" style="min-height:44px">Accept</button></div>`, options);
|
|
817
678
|
}
|
|
818
679
|
return postForm(`${taskHref(taskId)}/complete`, html `${reason}<p class="meta">Finishes the task. Checks stay unchanged; nothing is published or deployed.</p><button type="submit" style="min-height:44px">Accept</button>`, options);
|
|
819
680
|
}
|
|
820
|
-
/** The pull request, in one card: its state and link, one line of detail, and the one action it needs — Merge
|
|
821
|
-
* behind the password when checks passed, or Open a pull request for a result completed without one. */
|
|
822
681
|
export function pullRequestCardHtml(pr, csrf) {
|
|
823
682
|
if (pr.view === null) {
|
|
824
683
|
if (pr.offer === null || csrf === "")
|
|
@@ -828,7 +687,6 @@ export function pullRequestCardHtml(pr, csrf) {
|
|
|
828
687
|
const view = pr.view;
|
|
829
688
|
const url = safePrUrl(view.prUrl);
|
|
830
689
|
const link = view.prNumber === null ? "" : url === null ? html `<span class="mono">PR #${view.prNumber}</span>` : html `<a href="${url}" class="mono" rel="noreferrer" target="_blank">PR #${view.prNumber}</a>`;
|
|
831
|
-
// A pull request's trouble never undoes the result: an ink note, never red.
|
|
832
690
|
const tone = view.state === "ready" || view.state === "merged" ? "ok" : view.state === "failing" || view.state === "failed" ? "problem" : "waiting";
|
|
833
691
|
const revision = view.revisionTask === null || view.state !== "failing" ? "" : html ` <a href="${taskHref(view.revisionTask)}">Open revision</a>`;
|
|
834
692
|
const merged = view.mergeCommit === null ? "" : html `<p class="meta">Merge commit <span class="mono">${view.mergeCommit.slice(0, 12)}</span></p>`;
|
|
@@ -837,15 +695,10 @@ export function pullRequestCardHtml(pr, csrf) {
|
|
|
837
695
|
postForm(`${taskHref(pr.taskId)}/merge`, html `<p class="meta">${view.mergeMethod === "squash" ? "Squash-merges" : view.mergeMethod === "rebase" ? "Rebase-merges" : "Merges"} PR #${view.prNumber} into ${target} and deletes its branch.</p>${reauth(html `<label>Password<input type="password" name="token" autocomplete="current-password" required></label>`)}${view.fullCheck === null ? html `<button type="submit">Merge</button>` : html `<input type="hidden" name="anyway" value="1"><button type="submit" class="secondary">Merge anyway</button>`}`, { attrs: { class: "pull-request-act", "data-merge-form": true }, hidden: { run: view.runId } });
|
|
838
696
|
return html `<section class="card pull-request pull-request--${tone}" id="merge" data-pull-request="${view.state}"><div class="pull-request-head"><strong>${view.label}</strong>${link}</div><p class="meta">${view.detail}${revision}</p>${merged}${act}</section>`;
|
|
839
697
|
}
|
|
840
|
-
/** Exactly one primary road per result, chosen from its state; the
|
|
841
|
-
* others stay reachable from their own sections. Every form posts to the
|
|
842
|
-
* endpoint that already owns the act, with the session's CSRF token; a
|
|
843
|
-
* bearer session (no token) sees the road named, never a form. */
|
|
844
698
|
export function reviewNextAction(view, csrf, _accepted, _canAnnotate) {
|
|
845
699
|
const next = reviewNextActionParts(view, csrf);
|
|
846
700
|
return next === null ? html `` : html `<div class="card cockpit-next" data-next-action="${next.kind}"><div><strong>${next.title}</strong><span class="meta">${next.detail}</span></div>${next.control}</div>`;
|
|
847
701
|
}
|
|
848
|
-
/** The next action for the browser workspace's JSON: its control as markup text. */
|
|
849
702
|
export function reviewNextActionOf(view, csrf, back) {
|
|
850
703
|
const next = reviewNextActionParts(view, csrf, back);
|
|
851
704
|
return next === null ? null : { ...next, control: htmlString(next.control) };
|
|
@@ -865,11 +718,6 @@ function reviewNextActionParts(view, csrf, back) {
|
|
|
865
718
|
}
|
|
866
719
|
return null;
|
|
867
720
|
}
|
|
868
|
-
/**
|
|
869
|
-
* Plain words for the machine's own vocabulary — no internal token ever
|
|
870
|
-
* reaches a page. Every map here has a generic fallback: a kind a newer
|
|
871
|
-
* daemon invents degrades to honest generic prose, never to its raw name.
|
|
872
|
-
*/
|
|
873
721
|
export const PHASE_WORDS = {
|
|
874
722
|
"agent-running": "agent working",
|
|
875
723
|
"validating-handoff": "checking the handoff",
|
|
@@ -877,7 +725,6 @@ export const PHASE_WORDS = {
|
|
|
877
725
|
"capturing-evidence": "saving its files",
|
|
878
726
|
committing: "committing",
|
|
879
727
|
};
|
|
880
|
-
/** An agent's phase on the home card, from the machine's own vocabulary. */
|
|
881
728
|
export function homePhaseWords(run) {
|
|
882
729
|
if (run.role === "planner")
|
|
883
730
|
return "Planning";
|
|
@@ -892,7 +739,6 @@ export function homePhaseWords(run) {
|
|
|
892
739
|
export function phaseWords(phase) {
|
|
893
740
|
return PHASE_WORDS[phase] ?? "the agent is working";
|
|
894
741
|
}
|
|
895
|
-
/** A recorded reason in one plain line; machine output (a stack trace, a path, "Error:" text) waits on the run record. */
|
|
896
742
|
export function reasonWords(reason) {
|
|
897
743
|
return isInternalErrorReason(reason) ? "stopped with an internal error" : oneLineOf(runReasonWords(reason.trim().split(/\r?\n/, 1)[0] ?? ""), 140);
|
|
898
744
|
}
|
|
@@ -925,7 +771,6 @@ export const EVIDENCE_WORDS = {
|
|
|
925
771
|
"plan-contract": "Your request",
|
|
926
772
|
"review-context": "Review context",
|
|
927
773
|
};
|
|
928
|
-
/** Byte counts as people read them. */
|
|
929
774
|
export function humanBytes(bytes) {
|
|
930
775
|
if (bytes < 1024)
|
|
931
776
|
return `${bytes} B`;
|
|
@@ -936,9 +781,6 @@ export function humanBytes(bytes) {
|
|
|
936
781
|
export function evidenceWords(kind) {
|
|
937
782
|
return EVIDENCE_WORDS[kind] ?? "a stored record";
|
|
938
783
|
}
|
|
939
|
-
/** The badge for a run's outcome. A null outcome reads "running" ONLY when
|
|
940
|
-
* the caller proved the run's lease is the task's current live claim — an
|
|
941
|
-
* orphaned run keeps saying what actually became of it. */
|
|
942
784
|
export function runOutcomeBadge(run, live) {
|
|
943
785
|
if (!live && run.role === "planner" && run.reason === "plan-drafted") {
|
|
944
786
|
return html `<span class="badge">Planned</span>`;
|
|
@@ -950,8 +792,6 @@ export function runOutcomeBadge(run, live) {
|
|
|
950
792
|
: html `<span class="badge badge-${run.outcome ?? "cut"}">${sentenceCase(run.outcome ?? "never finished")}</span>`;
|
|
951
793
|
}
|
|
952
794
|
export const runNoun = (run) => run.role === "planner" ? "plan" : run.role === "reviewer" ? "review" : run.role === "scout" ? "report" : "build";
|
|
953
|
-
/** What a scout found, each with its link and picture, then any screenshot no item shows. Every link is the cited
|
|
954
|
-
* http(s) address the report parser admitted; every picture is served from verified evidence. */
|
|
955
795
|
export function reportItemsHtml(items, shots, runId) {
|
|
956
796
|
const picture = (shot) => shot.artifactId === null
|
|
957
797
|
? html `<p class="meta">Screenshot unavailable: ${shot.problem ?? "it can't be shown"}</p>`
|
|
@@ -985,11 +825,6 @@ export function runReportView(artifacts, root) {
|
|
|
985
825
|
return { ok: true, artifactId: artifact.id, title: parsed.report.title, summary: parsed.report.summary, document: parsed.report.report, followUps: parsed.report.followUps.length, truncated: artifact.truncated,
|
|
986
826
|
items: parsed.report.items, shots: reportShotsOf(artifacts, root, artifact.run, parsed.report.images) };
|
|
987
827
|
}
|
|
988
|
-
/** The shared facts (package 3), computed ONCE from the same verified
|
|
989
|
-
* records every surface reads: the head from the sealed diff summary when
|
|
990
|
-
* it verifies (else the run record, and the source is named), the signed
|
|
991
|
-
* criteria passed from the machine's matrix, the proof's caveats, every
|
|
992
|
-
* evidence problem in words, and the observed publication state. */
|
|
993
828
|
export function sharedResultFactsOf(run, proof, terminal, handoff, report, publication) {
|
|
994
829
|
const stat = terminal?.stat ?? null;
|
|
995
830
|
const statOk = stat !== null && !("problem" in stat);
|
|
@@ -1037,9 +872,6 @@ export function proofBundleView(store, run, artifacts, root) {
|
|
|
1037
872
|
const path = SCREENSHOT_CAPTURE.exec(artifact.capture)?.[1];
|
|
1038
873
|
if (path === undefined)
|
|
1039
874
|
return [];
|
|
1040
|
-
// The bytes are re-verified at render (workspace package 3): a shot
|
|
1041
|
-
// whose file is gone or altered is named as unavailable, never shown
|
|
1042
|
-
// as validated visual proof.
|
|
1043
875
|
let problem = null;
|
|
1044
876
|
try {
|
|
1045
877
|
const read = readVerifiedArtifact(root, artifact);
|
|
@@ -1055,8 +887,6 @@ export function proofBundleView(store, run, artifacts, root) {
|
|
|
1055
887
|
const uncapturedScreenshots = (proof?.screenshots ?? []).map(one => one.path).filter(path => !stored.has(path));
|
|
1056
888
|
let checkLog = null;
|
|
1057
889
|
if (checkLogArtifact !== null) {
|
|
1058
|
-
// Re-verified at render: a log whose bytes no longer hash to their
|
|
1059
|
-
// record is a named evidence problem, never shown as output.
|
|
1060
890
|
let read;
|
|
1061
891
|
try {
|
|
1062
892
|
read = readVerifiedArtifact(root, checkLogArtifact);
|
|
@@ -1086,9 +916,6 @@ export function proofBundleView(store, run, artifacts, root) {
|
|
|
1086
916
|
screenshots,
|
|
1087
917
|
uncapturedScreenshots,
|
|
1088
918
|
matrix: verdictRow?.matrix ?? [],
|
|
1089
|
-
// A matrix row links only to records that still verify (repair
|
|
1090
|
-
// 2026-09-14): a damaged screenshot or check log is named as a
|
|
1091
|
-
// problem above, never offered as a download.
|
|
1092
919
|
matrixLinks: (() => {
|
|
1093
920
|
const damaged = new Set([...screenshots.filter(one => one.problem !== null).map(one => one.artifactId), ...(checkLog !== null && checkLog.problem !== null ? [checkLog.artifactId] : [])]);
|
|
1094
921
|
return new Map([...evidenceLinksFor(artifacts)].filter(([, id]) => !damaged.has(id)));
|
|
@@ -1101,8 +928,6 @@ export function proofBundleView(store, run, artifacts, root) {
|
|
|
1101
928
|
})(),
|
|
1102
929
|
};
|
|
1103
930
|
}
|
|
1104
|
-
/** What the verdict recorded when the build finished, said beside what holds now: a recorded pass is restated only
|
|
1105
|
-
* when the check read now passed; unread, it points to the result; unreadable or failed since, it says so. */
|
|
1106
931
|
export function completionWords(verdict, reasons, checks) {
|
|
1107
932
|
const recorded = verificationExplanation(verdict, reasons);
|
|
1108
933
|
if (verdict !== "verified")
|
|
@@ -1116,8 +941,6 @@ export function completionWords(verdict, reasons, checks) {
|
|
|
1116
941
|
: checks?.cause === "command-changed" ? "the check command changed since this check." : `${CHECK_UNREADABLE.charAt(0).toLowerCase()}${CHECK_UNREADABLE.slice(1)}`;
|
|
1117
942
|
return `At completion: ${recorded} Now: ${said} It doesn't count as passed.`;
|
|
1118
943
|
}
|
|
1119
|
-
/** A result's saved approved check as the assignment reads it (assignment.ts): the receipt, follow-ups on its commit,
|
|
1120
|
-
* and with checks Off the passing release check that contains it. */
|
|
1121
944
|
function savedChecksOf(store, root, run, now) {
|
|
1122
945
|
const own = checksFactOf(assignmentChecksForRun(store, root, run.id, now), run.headRevision);
|
|
1123
946
|
if (own.level !== "off" || own.status === "passed" || own.status === "failed")
|
|
@@ -1161,14 +984,10 @@ export function completionReceiptView(store, run, artifacts, root, review = null
|
|
|
1161
984
|
coverageSecondary: coverage.contextGaps.length === 0 && (coverage.satisfied === true || (coverage.satisfied === null && !coverage.required)),
|
|
1162
985
|
report,
|
|
1163
986
|
facts: sharedResultFactsOf(run, proof, terminal, handoff, report, publication),
|
|
1164
|
-
// The same reading the task page's Project checks row shows (assignment.ts), never the verdict alone.
|
|
1165
987
|
...(run.role === "scout" ? {} : { checks: savedChecksOf(store, root, run, now) }),
|
|
1166
988
|
};
|
|
1167
989
|
}
|
|
1168
990
|
export const REVIEW_DIFF_LINE_CAP = 4_000;
|
|
1169
|
-
/** Parse only the stable structure Git's unified patch format guarantees.
|
|
1170
|
-
* Unknown metadata remains visible, and a patch that cannot be structured
|
|
1171
|
-
* falls back to the sealed raw record—presentation never becomes proof. */
|
|
1172
991
|
export function parseReviewDiff(text) {
|
|
1173
992
|
const files = [];
|
|
1174
993
|
let file = null;
|
|
@@ -1265,7 +1084,6 @@ export function reviewDiffHtml(patch, stat, runId, commentable, anchors = new Ma
|
|
|
1265
1084
|
? html `<span class="diff-file-counts">binary</span>`
|
|
1266
1085
|
: html `<span class="diff-file-counts"><b>+${counts.additions}</b><i>−${counts.deletions}</i></span>`;
|
|
1267
1086
|
const fileAnchor = anchors.get(one.path);
|
|
1268
|
-
// Each change is a link target of its own (#<file anchor>-L<first new line>): a result names the exact lines.
|
|
1269
1087
|
const hunks = one.hunks.map(hunk => {
|
|
1270
1088
|
const first = hunk.lines.find(line => line.newLine !== null && line.kind !== "meta")?.newLine ?? null;
|
|
1271
1089
|
return html `<section class="diff-hunk"${fileAnchor === undefined || first === null ? "" : html ` id="${fileAnchor}-L${first}"`}><div class="diff-hunk-head">${hunk.header}</div><div class="diff-lines">${hunk.lines.map(line => {
|
|
@@ -1275,7 +1093,6 @@ export function reviewDiffHtml(patch, stat, runId, commentable, anchors = new Ma
|
|
|
1275
1093
|
? html `<span class="diff-annotate-space"></span>`
|
|
1276
1094
|
: html `<button type="button" class="diff-annotate pick-line" data-path="${one.path}" data-line="${lineNumber}" data-side="${side}" aria-label="Annotate ${one.path}, ${side} line ${lineNumber}" title="Annotate this line">${annotateIcon}</button>`;
|
|
1277
1095
|
const marker = line.kind === "addition" ? "+" : line.kind === "deletion" ? "−" : line.kind === "context" ? " " : "·";
|
|
1278
|
-
// Each real line names its file and line, so a comment (or a test) can find the exact row.
|
|
1279
1096
|
const named = lineNumber === null || line.kind === "meta" ? "" : html ` data-diff-file="${one.path}" data-diff-line="${lineNumber}"`;
|
|
1280
1097
|
return html `<div class="diff-line diff-${line.kind}"${named}>${annotate}<span class="diff-gutter">${line.oldLine ?? ""}</span><span class="diff-gutter">${line.newLine ?? ""}</span><code><b aria-hidden="true">${marker}</b>${line.text}</code></div>`;
|
|
1281
1098
|
})}</div></section>`;
|
|
@@ -1289,29 +1106,15 @@ export function reviewDiffHtml(patch, stat, runId, commentable, anchors = new Ma
|
|
|
1289
1106
|
? html `<p class="diff-cut">The saved diff was shortened when it was stored: the rest of the change was never captured, here or in the download.</p>`
|
|
1290
1107
|
: parsed.linesTruncated ? html `<p class="diff-cut">This visual diff is shortened. Review the saved patch before approving.</p>` : ""}</div>${storedDownloadLink(runId, patch.artifactId, "diff", patch.truncated)}`;
|
|
1291
1108
|
}
|
|
1292
|
-
/** The check log as stored (repair 2026-09-14): its output behind a
|
|
1293
|
-
* disclosure when the bytes verify — a shortened log says so in the
|
|
1294
|
-
* summary and its download is the stored part; a log that no longer
|
|
1295
|
-
* verifies is a named problem with no output and no download. */
|
|
1296
1109
|
export function checkLogHtml(log, runId, extra) {
|
|
1297
1110
|
if (log.problem !== null) {
|
|
1298
1111
|
return html `<p class="problem" data-check-log="damaged"${extra}>The check log no longer verifies (${log.problem}). Its output is not shown, and there is nothing to download.</p>`;
|
|
1299
1112
|
}
|
|
1300
|
-
return html `<details data-check-log="${log.truncated ? "shortened" : "ok"}"${extra}><summary>Check output${log.truncated ? ` (shortened — ${log.bytesStored} of ${log.bytesOriginal} bytes stored)` : ""}</summary><pre class="mono" style="overflow-x:auto;max-height:18rem">${
|
|
1301
|
-
// Each line is a link target (#check-log-L<n>): a failed task names the exact line its check ended on.
|
|
1302
|
-
joinHtml(log.text.split("\n").map((line, index) => html `<span id="check-log-L${index + 1}">${line}</span>`), "\n")}</pre></details>${storedDownloadLink(runId, log.artifactId, "check log", log.truncated)}`;
|
|
1113
|
+
return html `<details data-check-log="${log.truncated ? "shortened" : "ok"}"${extra}><summary>Check output${log.truncated ? ` (shortened — ${log.bytesStored} of ${log.bytesOriginal} bytes stored)` : ""}</summary><pre class="mono" style="overflow-x:auto;max-height:18rem">${joinHtml(log.text.split("\n").map((line, index) => html `<span id="check-log-L${index + 1}">${line}</span>`), "\n")}</pre></details>${storedDownloadLink(runId, log.artifactId, "check log", log.truncated)}`;
|
|
1303
1114
|
}
|
|
1304
|
-
/** The download link for a stored record (repair 2026-09-14): a shortened
|
|
1305
|
-
* record's link says it holds the stored part only — never "the full"
|
|
1306
|
-
* bytes that were cut at storage and exist nowhere. */
|
|
1307
1115
|
export function storedDownloadLink(runId, artifactId, what, truncated) {
|
|
1308
1116
|
return html `<p class="meta"><a href="/r/${runId}/evidence/${artifactId}">${truncated ? `Download the stored part of the ${what} (shortened at storage — not the full ${what})` : `Download the ${what}`}</a></p>`;
|
|
1309
1117
|
}
|
|
1310
|
-
/** Render the terminal diff card: stat and capture health first, the bounded
|
|
1311
|
-
* patch beneath a fold. `editor` (arc 6) links file rows to vscode:// on the
|
|
1312
|
-
* reviewing device; `commentable` adds a per-file "comment" button the
|
|
1313
|
-
* page's prefill script reads — a real button, keyboard-reachable, separate
|
|
1314
|
-
* from the link so the two never fight over one click (finding 4). */
|
|
1315
1118
|
export function terminalDiffCard(view, runId, editor = null, commentable = false) {
|
|
1316
1119
|
const parts = [html `<h2>What changed</h2>`];
|
|
1317
1120
|
if (view.stat === null) {
|
|
@@ -1355,22 +1158,12 @@ export function terminalDiffCard(view, runId, editor = null, commentable = false
|
|
|
1355
1158
|
}
|
|
1356
1159
|
return joinHtml(parts, "\n");
|
|
1357
1160
|
}
|
|
1358
|
-
/**
|
|
1359
|
-
* The evidence bundle (Priority 2): the closed verdict first — the one
|
|
1360
|
-
* sentence every other surface agrees with — then criteria, the agent's
|
|
1361
|
-
* declared checks, the plane's own re-run (labeled "re-run here", never
|
|
1362
|
-
* confused with the agent's own claim), caveats, and every validated
|
|
1363
|
-
* screenshot as a thumbnail linking to the full image. Renders nothing
|
|
1364
|
-
* when the run predates the proof system.
|
|
1365
|
-
*/
|
|
1366
1161
|
export function evidenceBundleCard(view, run, publication = null, review = null) {
|
|
1367
1162
|
if (view === null)
|
|
1368
1163
|
return html ``;
|
|
1369
1164
|
const runId = run.id;
|
|
1370
1165
|
const parts = [html `<h2>Checks and saved files</h2>`];
|
|
1371
1166
|
if (view.verdict !== null) {
|
|
1372
|
-
// The same status line every other surface renders for this run
|
|
1373
|
-
// (workspace package 1), beside the verdict's own explanation.
|
|
1374
1167
|
const status = resultStatusOf({ runId, role: run.role, outcome: run.outcome, verdict: view.verdict, reasons: view.reasons, accepted: view.accepted !== null, review,
|
|
1375
1168
|
...(view.checks === undefined ? {} : { checks: view.checks }) }, publication);
|
|
1376
1169
|
parts.push(html `<p class="row" data-proof-verdict="${dispatchStatusToken(view.verdict)}">${statusLineHtml(status)} <span class="meta">${completionWords(view.verdict, view.reasons, view.checks)}</span></p>`);
|
|
@@ -1407,14 +1200,6 @@ export function evidenceBundleCard(view, run, publication = null, review = null)
|
|
|
1407
1200
|
}
|
|
1408
1201
|
return parts.length === 1 ? html `` : joinHtml(parts, "\n");
|
|
1409
1202
|
}
|
|
1410
|
-
/** A calm, scan-first result receipt for the task and its focused chat.
|
|
1411
|
-
* The full ledger remains one click away; this card carries only the facts
|
|
1412
|
-
* needed to decide whether to inspect, discuss, or move on. */
|
|
1413
|
-
/** The receipt's proof-state word and tone, from the stored verdict and
|
|
1414
|
-
* the operator's acceptance alone — shared with the review cockpit's
|
|
1415
|
-
* header chip so the two surfaces never name one state differently. */
|
|
1416
|
-
/** The receipt's facts as the shared projection reads them. */
|
|
1417
|
-
/** A result's follow-ups: checks run on its commit since it finished, and its tests task. */
|
|
1418
1203
|
export function followUpsFor(store, evidenceRoot, run, now) {
|
|
1419
1204
|
if (run.role !== "builder" || run.finishedAt === null || run.headRevision === null)
|
|
1420
1205
|
return null;
|
|
@@ -1424,9 +1209,7 @@ export function followUpsFor(store, evidenceRoot, run, now) {
|
|
|
1424
1209
|
quick: repo !== null && liveQuickCommand(store, repo) !== null, full: repo !== null && store.liveVerifyCommand(repo) !== null };
|
|
1425
1210
|
}
|
|
1426
1211
|
export const FOLLOW_UP_WORDS = { waiting: "waiting for a builder", running: "running", passed: "passed", failed: "failed", "not-run": "didn't run" };
|
|
1427
|
-
/** Run checks and Add tests, under the result's Checks: what ran since, then the two acts. */
|
|
1428
1212
|
export function followUpsHtml(followUps, runId, o) {
|
|
1429
|
-
// A batch check names every result it ran with and the exact commit it tested (batch-checks.ts).
|
|
1430
1213
|
const batchHow = (one) => {
|
|
1431
1214
|
const peers = one.batch?.members.filter(member => member.run !== runId).map(member => member.task) ?? [];
|
|
1432
1215
|
return one.batch?.mode === "together" && peers.length > 0 ? ` together with ${peers.join(", ")}`
|
|
@@ -1441,9 +1224,6 @@ export function followUpsHtml(followUps, runId, o) {
|
|
|
1441
1224
|
return html `<section class="result-section follow-ups" id="follow-ups" data-follow-ups><strong>Follow-ups</strong>${rows.length === 0 ? "" : html `<ul class="follow-up-list">${rows}</ul>`}${canCheck || followUps.repo === null ? "" : html `<p class="meta">No approved check to run. <a href="/settings/checks?repo=${encodeURIComponent(followUps.repo)}">Set one up</a>.</p>`}${checkActs === null && tests === null ? "" : html `<div class="follow-up-acts">${checkActs}${tests}</div>`}</section>`;
|
|
1442
1225
|
}
|
|
1443
1226
|
export function receiptStatusOf(view, review = view.review) {
|
|
1444
|
-
// The evidence health rides the status (repair 2026-09-14): a result
|
|
1445
|
-
// whose stored records are damaged is never called ready on the strength
|
|
1446
|
-
// of a verdict recorded before the damage.
|
|
1447
1227
|
return evidenceResultStatusOf({ runId: view.runId, role: view.role, outcome: view.outcome, verdict: view.verdict, reasons: view.reasons, accepted: view.accepted, recordComplete: view.recordComplete, review,
|
|
1448
1228
|
...(view.checks === undefined ? {} : { checks: view.checks }) }, view.publication, view.facts.evidenceHealth);
|
|
1449
1229
|
}
|
|
@@ -1451,8 +1231,6 @@ export function completionReceiptCard(view, taskId, place, standing = receiptSta
|
|
|
1451
1231
|
const current = assignment?.receipt?.runId === view.runId ? assignment : null;
|
|
1452
1232
|
const presentation = current === null ? null : assignmentPresentationOf(current);
|
|
1453
1233
|
const status = presentation?.status ?? standing;
|
|
1454
|
-
// The verdict on record, whatever review is in flight: the criteria
|
|
1455
|
-
// count's source label reads from it, never from the review's tone.
|
|
1456
1234
|
const stored = receiptStatusOf(view, null);
|
|
1457
1235
|
const inReview = REVIEW_TOKENS.has(status.token);
|
|
1458
1236
|
const facts = view.facts;
|
|
@@ -1470,9 +1248,6 @@ export function completionReceiptCard(view, taskId, place, standing = receiptSta
|
|
|
1470
1248
|
const criteria = facts.checks === null
|
|
1471
1249
|
? "No requirements set"
|
|
1472
1250
|
: `${facts.checks.passed}/${facts.checks.total} requirements met`;
|
|
1473
|
-
// The deliverable leads (package 3): a scout's report by its title, UI
|
|
1474
|
-
// work by its validated screenshots. Unverifiable shots are counted as
|
|
1475
|
-
// unavailable, never shown, never called validated.
|
|
1476
1251
|
const lead = view.report !== null
|
|
1477
1252
|
? view.report.ok
|
|
1478
1253
|
? html `<p class="receipt-report"><strong>${view.report.title}</strong> <span class="meta">${oneLineOf(view.report.summary, 240)}</span></p>`
|
|
@@ -1482,16 +1257,10 @@ export function completionReceiptCard(view, taskId, place, standing = receiptSta
|
|
|
1482
1257
|
: html `<div class="receipt-visuals" aria-label="validated screenshots">${shown
|
|
1483
1258
|
.slice(0, 4)
|
|
1484
1259
|
.map(shot => html `<a class="receipt-shot" href="/r/${view.runId}/evidence/${shot.artifactId}"><img src="/r/${view.runId}/evidence/${shot.artifactId}" alt="${shot.caption}"><span>${shot.caption}</span></a>`)}</div>`;
|
|
1485
|
-
// Caveats and evidence problems stay in the open, ahead of the counts
|
|
1486
|
-
// and any readiness words below them.
|
|
1487
1260
|
const attention = current === null ? [...facts.evidenceProblems, ...view.caveats] : [];
|
|
1488
1261
|
const caveats = attention.length === 0
|
|
1489
1262
|
? ""
|
|
1490
1263
|
: html `<div class="receipt-caveats" data-result-attention="${attention.length}"><strong>Before you move on</strong><ul>${attention.map(one => html `<li>${plainReasonWords(one)}</li>`)}</ul></div>`;
|
|
1491
|
-
// v51: semantic coverage, distinct from the machine proof word above —
|
|
1492
|
-
// the same lines the CLI prints, so chat and terminal cannot disagree.
|
|
1493
|
-
// Nothing owed (optional and unsettled, or satisfied) folds behind a
|
|
1494
|
-
// disclosure; a strict shortfall or a context gap stays in the open.
|
|
1495
1264
|
const coverage = view.coverage.length === 0
|
|
1496
1265
|
? ""
|
|
1497
1266
|
: current !== null || view.coverageSecondary
|
|
@@ -1502,25 +1271,16 @@ export function completionReceiptCard(view, taskId, place, standing = receiptSta
|
|
|
1502
1271
|
html `<section class="card completion-receipt" data-card-kind="result-receipt"${attributes(resultFactsAttributeMap(facts))}>`,
|
|
1503
1272
|
html `<div class="receipt-head"><div><h2>${receiptHeadingOf(view.outcome, view.publication, view.role)}</h2></div>`,
|
|
1504
1273
|
html `${headline ? statusLineHtml(status) : ""}</div>`,
|
|
1505
|
-
// The agent's handoff is its narrative, labeled as such; the
|
|
1506
|
-
// publication line is the observed record — never "shipped".
|
|
1507
1274
|
lead,
|
|
1508
1275
|
html `<p class="receipt-summary">${conciseOutcomeOf(view.summary ?? (view.outcome === "no-change" ? "The agent found that no repository change was needed." : "The build finished without a concise handoff."))}</p>`,
|
|
1509
1276
|
headline ? html `<div class="receipt-actions"><a class="button-link" href="${resultHref}" data-open-result data-primary-action>${status.action?.label ?? "Open result"}</a></div>` : "",
|
|
1510
|
-
// A pull request that couldn't open never undoes the result: an ink note, not red.
|
|
1511
1277
|
view.publication?.state === "failed" ? html `<p class="receipt-note">${statusIconSvg("note")} Pull request couldn't open. The commit is safe locally.</p>` : "",
|
|
1512
1278
|
caveats,
|
|
1513
1279
|
coverage,
|
|
1514
1280
|
html `<details class="receipt-details"><summary>${STATUS_MORE}</summary>`,
|
|
1515
1281
|
view.summary !== null && view.summary !== conciseOutcomeOf(view.summary) ? html `<p class="recap">${view.summary}</p>` : "",
|
|
1516
1282
|
html `<p class="receipt-publication" data-receipt-publication="${facts.publicationState}">${facts.publicationWords}</p>`,
|
|
1517
|
-
// A review in flight is the receipt's primary status too (its chip
|
|
1518
|
-
// above); the detail — the earlier verdict as history (review fixes,
|
|
1519
|
-
// finding 4) — is secondary, behind a native disclosure that reads the
|
|
1520
|
-
// same words on the task page and in chat.
|
|
1521
1283
|
inReview ? html `<details class="receipt-history"><summary>Review history</summary><p class="receipt-review meta" data-receipt-review="${status.token}">${status.detail}</p></details>` : "",
|
|
1522
|
-
// The matrix count is the proof's own citation; it reads as verified
|
|
1523
|
-
// only when the machine verified the result (workspace package 1).
|
|
1524
1284
|
html `<div class="receipt-facts"><span><strong>${criteria}</strong><small>${stored.tone === "problem" ? html `the agent's own word — not checked` : stored.token === "agent-attested" ? html `the agent's own word, no project check` : "against the approved plan"}</small></span>`,
|
|
1525
1285
|
html `<span><strong>${diff}</strong><small>${facts.head === null ? "no commit recorded" : `head ${facts.head.slice(0, 7)} · ${facts.headSource ?? ""}`}</small></span>`,
|
|
1526
1286
|
html `<span><strong>${view.screenshots.length} screenshot${view.screenshots.length === 1 ? "" : "s"}</strong><small>${view.screenshots.length === 0 ? "none required or captured" : unavailable === 0 ? "checked screenshots" : `${unavailable} unavailable — not validated`}</small></span></div>`,
|
|
@@ -1528,19 +1288,13 @@ export function completionReceiptCard(view, taskId, place, standing = receiptSta
|
|
|
1528
1288
|
place === "task"
|
|
1529
1289
|
? html `<a href="${taskChatHref(taskId)}">Discuss in chat →</a>`
|
|
1530
1290
|
: html `<a href="/r/${view.runId}">Full build record →</a>`,
|
|
1531
|
-
// The cockpit (Priority 5): the same records, arranged for a reviewer.
|
|
1532
1291
|
html `<a href="${reviewHref(taskId)}">Open result →</a>`,
|
|
1533
1292
|
html `</div></details></section>`,
|
|
1534
1293
|
]);
|
|
1535
1294
|
}
|
|
1536
|
-
/** The revision form's binding (repair 2026-09-14): the exact ids of the
|
|
1537
|
-
* notes this page displays and the source terms it was rendered against.
|
|
1538
|
-
* The server seals these ids and no others. */
|
|
1539
1295
|
export function revisionSealFields(comments, sourceDigest) {
|
|
1540
1296
|
return html `<input type="hidden" name="batch" value="${revisionBatchOf(comments)}"><input type="hidden" name="source" value="${revisionSourceOf(sourceDigest)}">`;
|
|
1541
1297
|
}
|
|
1542
|
-
/** Older machine-checked results saved a mechanical sentence; say the same
|
|
1543
|
-
* facts in plain words (the version id stays, shortened). */
|
|
1544
1298
|
export function plainConclusionOf(conclusion) {
|
|
1545
1299
|
const prepared = /^Prepared candidate ([0-9a-f]{7,40}) was checked out by the machine; no agent ran\. (The branch already matched it\.|The sealed diff spans this task's base to that candidate\.)/.exec(conclusion);
|
|
1546
1300
|
if (prepared === null)
|
|
@@ -1551,7 +1305,6 @@ export function plainConclusionOf(conclusion) {
|
|
|
1551
1305
|
export function resultPanelHtml(detail, o) {
|
|
1552
1306
|
return resultPanelParts(detail, o).html;
|
|
1553
1307
|
}
|
|
1554
|
-
/** The panel's HTML and the same panel in parts, for the rebuilt result page. */
|
|
1555
1308
|
export function resultPanelParts(detail, o) {
|
|
1556
1309
|
const { run, receipt, proof, terminal, handoff } = detail;
|
|
1557
1310
|
const facts = receipt.facts;
|
|
@@ -1566,11 +1319,8 @@ export function resultPanelParts(detail, o) {
|
|
|
1566
1319
|
const status = presentation?.status ?? resultHeadlineOf(receiptStatusOf(receipt));
|
|
1567
1320
|
const stored = receiptStatusOf(receipt, null);
|
|
1568
1321
|
const humanReview = manualReviewOnly(proof === null ? null : { ...proof, verdict: proof.verdict ?? "" });
|
|
1569
|
-
// Needs you: the action that resolves it comes first; Request changes stays beside it, never alone.
|
|
1570
|
-
// On the result itself, "Review result" would link here: accepting it is what resolves it.
|
|
1571
1322
|
const need = needActionOf(current, taskStatus, o.csrf, o.returnTo, {
|
|
1572
1323
|
accepted: proof?.accepted != null, humanReview, run: run.id, action: `${taskHref(detail.taskId)}/accept-proof`, refuted: proof?.verdict === "refuted",
|
|
1573
|
-
// What Store.finalResultReason refuses: a verified, attested, accepted or published result.
|
|
1574
1324
|
rebuildable: proof?.accepted == null && proof?.verdict !== "verified" && proof?.verdict !== "attested" && !(detail.publication !== null && ["pushed", "opened"].includes(detail.publication.state))
|
|
1575
1325
|
});
|
|
1576
1326
|
const directAssessment = proof?.matrix.some(row => row.assessment !== undefined) === true;
|
|
@@ -1588,34 +1338,22 @@ export function resultPanelParts(detail, o) {
|
|
|
1588
1338
|
const patchOk = patch !== null && !("problem" in patch);
|
|
1589
1339
|
const lead = resultLeadOf({ role: run.role, report: receipt.report !== null, screenshots: shown.length, diff: (patchOk && patch.text.trim() !== "") || (statOk && stat.fileCount > 0) });
|
|
1590
1340
|
const tabHref = (tab) => o.hrefFor(tab);
|
|
1591
|
-
// ---- attention: problems and caveats, ahead of every readiness word ----
|
|
1592
1341
|
const publication = detail.publication;
|
|
1593
1342
|
const prUrl = publication === null ? null : safePrUrl(publication.prUrl);
|
|
1594
1343
|
const attention = [];
|
|
1595
|
-
// The visible status already says verification is needed. Only omit the
|
|
1596
|
-
// generic repeat; failed checks, specific reasons and damaged evidence stay.
|
|
1597
1344
|
const missingVerdictNamed = o.headStatus !== false && status.token === "verification-needed" && receipt.verdict === null && receipt.reasons.length === 0;
|
|
1598
1345
|
if (current == null && !humanReview && !awaitingGoalReview && (!directAssessment || physicalReasons.length > 0) && !missingVerdictNamed && stored.token !== "evidence-damaged" && (stored.tone === "problem" || stored.tone === "attention")) {
|
|
1599
|
-
// A recorded pass whose check can't be read now is said as what holds now, never as the verdict's pass.
|
|
1600
|
-
// A recorded pass the check read now can't stand behind (unreadable, or failed since) is said as what holds now.
|
|
1601
1346
|
attention.push(stored.token === "check-unreadable" || (receipt.verdict === "verified" && stored.token === "checks-failed") ? stored.detail : verificationExplanation(receipt.verdict, physicalReasons));
|
|
1602
1347
|
}
|
|
1603
|
-
// Exact criterion assessment notes are already shown in Requirements;
|
|
1604
|
-
// do not repeat them as a second current attention message.
|
|
1605
1348
|
if (presentation !== null)
|
|
1606
1349
|
attention.push(...presentation.attention.map(one => one.detail).filter(detail => !assessmentReasons.has(detail)));
|
|
1607
1350
|
if (current == null)
|
|
1608
1351
|
attention.push(...facts.evidenceProblems);
|
|
1609
1352
|
if (detail.outsideTouches.length > 0)
|
|
1610
1353
|
attention.push(`${detail.outsideTouches.length} changed file${detail.outsideTouches.length === 1 ? "" : "s"} outside the approved paths: ${detail.outsideTouches.join(", ")}.`);
|
|
1611
|
-
// A failed caveat can already be quoted in full by its verification
|
|
1612
|
-
// reason. Keep that explanation once and retain every other caveat.
|
|
1613
1354
|
if (current == null)
|
|
1614
1355
|
attention.push(...receipt.caveats.filter(caveat => !historicalAssessmentReason(caveat) && !attention.some(problem => problem.includes(caveat))));
|
|
1615
1356
|
attention.push(...(handoff?.followUps ?? []).map(one => `Follow-up: ${one}`));
|
|
1616
|
-
// The automatic review: a HIGH that did not send the work back, or a review
|
|
1617
|
-
// that could not finish, is the person's to see. (Said once when the
|
|
1618
|
-
// current assignment already carries it.)
|
|
1619
1357
|
const automatic = detail.automaticReview ?? null;
|
|
1620
1358
|
if (automatic !== null && automatic.sentBackAs === null) {
|
|
1621
1359
|
const reviewed = [...(automatic.state === "not-reviewed" ? [`Not reviewed: ${automatic.reason ?? "the automatic review did not finish"}.`] : []), ...automatic.high.map(one => `Review: ${findingWords(one)}`)];
|
|
@@ -1623,17 +1361,11 @@ export function resultPanelParts(detail, o) {
|
|
|
1623
1361
|
if (!attention.includes(line))
|
|
1624
1362
|
attention.push(line);
|
|
1625
1363
|
}
|
|
1626
|
-
// Publication risks stay in the open (repair 2026-09-14); the routine
|
|
1627
|
-
// publication fact lives with the build details below.
|
|
1628
|
-
// With the shared status, the pull request is its own quiet row (its reason under Details).
|
|
1629
1364
|
if (publication !== null && publication.state === "failed" && taskStatus === null) {
|
|
1630
1365
|
attention.push(`Publication failed after ${publication.attempts} attempt${publication.attempts === 1 ? "" : "s"}${publication.lastError === null ? "" : ` — ${oneLineOf(publication.lastError, 200)}`}. No pull request or merge is recorded.`);
|
|
1631
1366
|
}
|
|
1632
1367
|
if (detail.ciFailing && publication !== null && taskStatus === null)
|
|
1633
1368
|
attention.push(`CI is failing on PR #${publication.prNumber} at the last check.`);
|
|
1634
|
-
// Requirements only a person can confirm: plain words and one Accept,
|
|
1635
|
-
// in neutral ink — nothing failed. Accepting records the person's
|
|
1636
|
-
// decision and leaves the recorded checks as they are.
|
|
1637
1369
|
const personChecks = proof === null || proof.accepted !== null ? [] : [
|
|
1638
1370
|
...proof.matrix.filter(row => row.state === "manual-review").map(row => personCheckWords(row.statement)),
|
|
1639
1371
|
...(proof.matrix.length > 0 ? [] : proof.reasons.filter(reason => manualReviewCriterionOf(reason) !== null).map(() => personCheckWords(null))),
|
|
@@ -1650,14 +1382,9 @@ export function resultPanelParts(detail, o) {
|
|
|
1650
1382
|
const attentionHtml = attention.length === 0
|
|
1651
1383
|
? ""
|
|
1652
1384
|
: html `<div class="result-attention" data-result-attention="${attention.length}"><ul>${attention.map(one => html `<li>${plainReasonWords(one)}</li>`)}</ul></div>`;
|
|
1653
|
-
// ---- one outcome, one action (repair 2026-09-14) ------------------------
|
|
1654
|
-
// The outcome is the handoff's first sentence, bounded; the agent's full
|
|
1655
|
-
// account waits behind a disclosure in Summary so nothing is said twice.
|
|
1656
1385
|
const conclusion = plainConclusionOf(receipt.summary ?? (run.outcome === "no-change" ? "The agent found that no repository change was needed." : "The build finished without a concise handoff."));
|
|
1657
1386
|
const outcome = conciseOutcomeOf(conclusion);
|
|
1658
|
-
// A failing pull request keeps its repair draft beside the need's action.
|
|
1659
1387
|
const action = o.action === false ? "" : need !== null ? html `${resultNeedAction(need, o, detail.canAnnotate)}${detail.ciFailing && o.csrf !== "" ? resultPrimaryAction(detail, o, prUrl) : ""}` : resultPrimaryAction(detail, o, prUrl);
|
|
1660
|
-
// ---- summary: the deliverable first ----------------------------------
|
|
1661
1388
|
const summaryParts = [];
|
|
1662
1389
|
const report = receipt.report;
|
|
1663
1390
|
if (lead === "report") {
|
|
@@ -1668,10 +1395,6 @@ export function resultPanelParts(detail, o) {
|
|
|
1668
1395
|
summaryParts.push(html `<p class="problem" data-result-report="problem">The report cannot be shown: ${report.problem}.</p>`);
|
|
1669
1396
|
}
|
|
1670
1397
|
else {
|
|
1671
|
-
// Escaped text in a fenced block, never markup, never a page: the
|
|
1672
|
-
// download serves the exact stored bytes as text. The summary is
|
|
1673
|
-
// already the outcome line above (and, when shortened there, waits
|
|
1674
|
-
// in "What the agent reported"), so the article never repeats it.
|
|
1675
1398
|
summaryParts.push(html `<article class="result-report" data-result-report="ok"><h3>${report.title}</h3>${reportItemsHtml(report.items, report.shots, runId)}<pre class="recap plan-doc">${report.document}</pre><p class="meta"><a href="/r/${runId}/evidence/${report.artifactId}">${report.truncated ? "Download the stored part of the report (shortened at storage — not the full report)" : "Download the report"}</a>${report.followUps === 0 ? "" : html ` · ${report.followUps} proposed follow-up${report.followUps === 1 ? "" : "s"} on <a href="${taskHref(detail.rootId ?? detail.taskId)}">the task</a>`}</p></article>`);
|
|
1676
1399
|
}
|
|
1677
1400
|
}
|
|
@@ -1681,23 +1404,18 @@ export function resultPanelParts(detail, o) {
|
|
|
1681
1404
|
}
|
|
1682
1405
|
const unavailableShots = shots.filter(one => one.problem !== null);
|
|
1683
1406
|
if (lead === "changes") {
|
|
1684
|
-
// Code work: the changed files ARE the deliverable; the diff is one tap away.
|
|
1685
1407
|
summaryParts.push(html `<p class="result-files-lead">${detail.files.length === 0 ? "" : html `${joinHtml(detail.files.slice(0, 6).map(one => html `<span class="mono">${one.path}</span>`), ", ")}${detail.files.length > 6 ? ` and ${detail.files.length - 6} more` : ""} — `}<a href="${tabHref("changes")}" data-result-goto="changes">see the diff</a></p>`);
|
|
1686
1408
|
}
|
|
1687
1409
|
if (lead === "summary" && run.outcome === "no-change")
|
|
1688
1410
|
summaryParts.push(html `<p class="meta">The agent found that no repository change was needed${statOk && stat.fileCount === 0 ? "; the saved diff is empty" : ""}.</p>`);
|
|
1689
|
-
// The agent's own account — its full conclusion (when the outcome line
|
|
1690
|
-
// shortened it), what it says it changed, and how it checked — on demand.
|
|
1691
1411
|
const agentAccount = [
|
|
1692
1412
|
...(conclusion !== outcome ? [html `<p class="recap">${conclusion}</p>`] : []),
|
|
1693
1413
|
...(handoff !== null && handoff.changes.length > 0 ? [html `<ul class="result-changes">${handoff.changes.map(one => html `<li>${one}</li>`)}</ul>`] : []),
|
|
1694
1414
|
...(handoff !== null && handoff.verification.length > 0 ? [html `<p class="meta">Checked by the agent:</p><ul class="result-changes" data-cockpit-source="agent-words">${handoff.verification.map(one => html `<li>${one}</li>`)}</ul>`] : []),
|
|
1695
|
-
// The report's own notes, each a link target (#report-note-<n>) a mismatch can point at.
|
|
1696
1415
|
...(proof?.proof == null || proof.proof.caveats.length === 0 ? [] : [html `<p class="meta">Its notes:</p><ol class="result-changes" data-report-notes>${proof.proof.caveats.map((one, index) => html `<li id="report-note-${index + 1}">${one}</li>`)}</ol>`]),
|
|
1697
1416
|
];
|
|
1698
1417
|
if (agentAccount.length > 0)
|
|
1699
1418
|
summaryParts.push(html `<details class="result-notes" data-result-notes-agent><summary>What the agent reported</summary>${agentAccount}</details>`);
|
|
1700
|
-
// MEDIUM and LOW never block: suggested follow-ups, on request.
|
|
1701
1419
|
if (automatic !== null && automatic.followUps.length > 0) {
|
|
1702
1420
|
summaryParts.push(html `<details class="result-notes" data-review-followups="${automatic.followUps.length}"><summary>Suggested follow-ups · ${automatic.followUps.length}</summary><ul class="result-changes">${automatic.followUps.map((one, index) => html `<li><span class="badge">${one.severity === "MEDIUM" ? "Medium" : "Low"}</span> <span class="mono">${`${one.file}:${one.line}`}</span> ${one.scenario}${o.csrf === "" ? "" : postForm(`${taskHref(detail.taskId)}/follow-through`, html `<input type="hidden" name="act" value="send"><input type="hidden" name="pointer" value="${`${automatic.run}:${automatic.high.length + index + 1}`}"><button type="submit" class="secondary">Send to the agent</button>`)}</li>`)}</ul></details>`);
|
|
1703
1421
|
}
|
|
@@ -1720,8 +1438,6 @@ export function resultPanelParts(detail, o) {
|
|
|
1720
1438
|
if (o.place !== "chat")
|
|
1721
1439
|
links.push(html `<a href="${taskChatHref(detail.rootId ?? detail.taskId)}">Discuss in chat →</a>`);
|
|
1722
1440
|
links.push(html `<a href="${taskHref(detail.rootId ?? detail.taskId)}">Task overview →</a>`);
|
|
1723
|
-
// Technical facts on demand: build, agent, exact commits, evidence
|
|
1724
|
-
// sources, the publication record, and the other pages for this result.
|
|
1725
1441
|
summaryParts.push(joinHtml([
|
|
1726
1442
|
html `<details class="result-details" data-result-details><summary>Build details</summary>`,
|
|
1727
1443
|
unavailableShots.length === 0 ? "" : html `<ul class="result-unavailable meta" data-result-unavailable="${unavailableShots.length}">${unavailableShots.map(one => html `<li>Screenshot unavailable — <span class="mono">${one.path}</span>: ${one.problem ?? ""}</li>`)}</ul>`,
|
|
@@ -1737,7 +1453,6 @@ export function resultPanelParts(detail, o) {
|
|
|
1737
1453
|
html `<p class="result-links meta">${links}</p>`,
|
|
1738
1454
|
html `</details>`,
|
|
1739
1455
|
]));
|
|
1740
|
-
// ---- changes -----------------------------------------------------------
|
|
1741
1456
|
const changeParts = [];
|
|
1742
1457
|
if (terminal === null) {
|
|
1743
1458
|
changeParts.push(html `<p class="meta">No final diff or change summary was captured for this build${run.role === "scout" ? " — an investigation changes nothing in the repository" : ""}.</p>`);
|
|
@@ -1779,7 +1494,6 @@ export function resultPanelParts(detail, o) {
|
|
|
1779
1494
|
else
|
|
1780
1495
|
changeParts.push(reviewDiffHtml(patch, stat, runId, detail.canAnnotate, detail.fileAnchors));
|
|
1781
1496
|
}
|
|
1782
|
-
// ---- checks --------------------------------------------------------------
|
|
1783
1497
|
const checkParts = [];
|
|
1784
1498
|
const reviewerNotes = detail.reviewerFindings.map(one => html `<li><span class="badge${one.severity === "problem" ? " badge-failed" : ""}">${one.severity ?? "note"}</span> ${one.path === null ? "" : html `<span class="mono">${one.path}${one.line === null ? "" : `:${one.line}`}</span> `}${one.note} <span class="meta">— ${one.author}</span>${!isRevisionFeedback(one) && detail.canAnnotate && o.csrf !== "" ? html ` <button type="button" class="pick-file" data-path="${one.path ?? ""}" data-line="${one.line ?? ""}" data-review-note="${one.note}">Request change</button>` : ""}</li>`);
|
|
1785
1499
|
if (proof === null && reviewerNotes.length > 0)
|
|
@@ -1792,12 +1506,8 @@ export function resultPanelParts(detail, o) {
|
|
|
1792
1506
|
}
|
|
1793
1507
|
else {
|
|
1794
1508
|
if (proof.verdict !== null && !directAssessment) {
|
|
1795
|
-
// The same status line the panel leads with (one status per surface,
|
|
1796
|
-
// workspace package 1), beside the machine verdict's own explanation.
|
|
1797
|
-
// A recorded pass the saved check can't show now is said so here too (task-status.ts approvedCheckOf).
|
|
1798
1509
|
const shown = current?.receipt != null ? receiptChecksOf(current.receipt) : receipt.checks === undefined ? undefined : approvedCheckOf(proof.verdict, proof.reasons, receipt.checks);
|
|
1799
1510
|
const unreadNow = proof.verdict === "verified" && shown !== undefined && shown?.status !== "passed" && !humanReview;
|
|
1800
|
-
// completionWords: the verdict at completion, and what holds now when they differ.
|
|
1801
1511
|
const words = humanReview ? "At completion: Human review required for the requirements below." : unreadNow ? completionWords(proof.verdict, proof.reasons, shown) : `At completion: ${verificationExplanation(proof.verdict, proof.reasons)}`;
|
|
1802
1512
|
checkParts.push(html `<p class="row result-verdict" data-proof-verdict="${dispatchStatusToken(proof.verdict)}"${unreadNow ? html ` data-check-now="${approvedCheckStateOf(shown) ?? "unreadable"}"` : ""}><span class="meta">${words}</span></p>`);
|
|
1803
1513
|
}
|
|
@@ -1838,19 +1548,15 @@ export function resultPanelParts(detail, o) {
|
|
|
1838
1548
|
}
|
|
1839
1549
|
if (followUps !== null && run.role === "builder")
|
|
1840
1550
|
checkParts.push(followUpsHtml(followUps, runId, o));
|
|
1841
|
-
// The handoff's own account of its checks — the agent's words, labeled
|
|
1842
|
-
// as such, whether or not a proof exists.
|
|
1843
1551
|
if (!directAssessment && handoff !== null && handoff.verification.length > 0)
|
|
1844
1552
|
checkParts.push(html `<div class="result-section" data-cockpit-source="agent-words"><strong>The agent's own account</strong><ul>${handoff.verification.map(one => html `<li>${one}</li>`)}</ul></div>`);
|
|
1845
1553
|
if (o.extraChecks !== undefined)
|
|
1846
1554
|
checkParts.push(o.extraChecks);
|
|
1847
|
-
// ---- request changes: both feedback styles, one sealed road ------------
|
|
1848
1555
|
const requestParts = [html `<h3 class="so-sr-only">What should change?</h3>`];
|
|
1849
1556
|
const imageNote = (one) => {
|
|
1850
1557
|
if (one.image == null)
|
|
1851
1558
|
return html ``;
|
|
1852
1559
|
const shot = shots.find(shot => shot.artifactId === one.image.artifact && shot.sha256 === one.image.sha256 && one.image.run === runId && shot.problem === null);
|
|
1853
|
-
// A live saved note whose screenshot no longer verifies can be kept without it, so it never blocks a revision.
|
|
1854
1560
|
const drop = o.csrf === "" || !(detail.unusableImageNotes ?? []).includes(one.id) ? html ``
|
|
1855
1561
|
: postForm(`/r/${runId}/comment`, html `<input type="hidden" name="intent" value="drop-image"><input type="hidden" name="comment" value="${String(one.id)}"><button type="submit" class="quiet">Keep note without screenshot</button>`, { attrs: { class: "feedback-image-drop" }, returnTo: o.returnTo, hidden: { tab: o.tab } });
|
|
1856
1562
|
return html `<figure class="feedback-image">${shot === undefined ? html `<figcaption>Screenshot ${one.image.artifact} is unavailable.</figcaption>`
|
|
@@ -1871,8 +1577,6 @@ export function resultPanelParts(detail, o) {
|
|
|
1871
1577
|
requestParts.push(html `<details class="result-feedback-history"><summary>Earlier feedback</summary><div class="diff-comments" data-past-feedback>${detail.pastComments.map(one => html `<div class="diff-comment">${imageNote(one)}<p>${one.path === null ? "" : pathWords(one.path, one.line)}${one.note}</p><span class="meta">${one.author} · ${whenTime(one.createdAt)}</span></div>`)}</div></details>`);
|
|
1872
1578
|
}
|
|
1873
1579
|
for (const revision of detail.revisions) {
|
|
1874
|
-
// The child's standing is the shared status projection's own words
|
|
1875
|
-
// (repair 2026-09-14): current exact approval and actual activity.
|
|
1876
1580
|
requestParts.push(html `<p class="result-revision" data-result-revision="${revision.id}" data-result-revision-approved="${revision.approved ? "1" : "0"}" data-tone="${revision.tone}"><strong>Revision</strong> <a href="${taskHref(revision.id)}">${revision.title}</a> <span class="meta">· ${revision.standing}</span></p>`);
|
|
1877
1581
|
}
|
|
1878
1582
|
if (o.csrf === "") {
|
|
@@ -1894,7 +1598,6 @@ export function resultPanelParts(detail, o) {
|
|
|
1894
1598
|
html `<div class="result-feedback-actions"><button type="submit" name="intent" value="revise" data-request-changes>Send back</button><button type="submit" name="intent" value="note" class="quiet" data-save-feedback>Save for later</button></div>`,
|
|
1895
1599
|
]), { attrs: { class: "diff-comment-form", id: "comment-form" }, returnTo: o.returnTo, hidden: { tab: o.tab, request: o.requestToken } })}</details>`);
|
|
1896
1600
|
}
|
|
1897
|
-
// ---- the panel ---------------------------------------------------------
|
|
1898
1601
|
const tabCounts = {
|
|
1899
1602
|
summary: "",
|
|
1900
1603
|
changes: statOk ? (stat.fileCount === 0 ? "none" : `${stat.fileCount} file${stat.fileCount === 1 ? "" : "s"}`) : terminal === null ? "none" : "",
|
|
@@ -1907,7 +1610,6 @@ export function resultPanelParts(detail, o) {
|
|
|
1907
1610
|
html `<section class="card result-panel" id="result" data-result-panel data-result-place="${o.place}" data-result-lead="${lead}" data-result-task="${detail.rootId ?? detail.taskId}" data-result-user="${o.user}"${attributes(resultFactsAttributeMap(facts))}>`,
|
|
1908
1611
|
o.back === null ? "" : html `<p class="result-back"><a href="${o.back.href}" data-result-back>← ${o.back.label}</a></p>`,
|
|
1909
1612
|
(detail.history ?? ""),
|
|
1910
|
-
// One headline: with the shared status, its words lead (task-status.ts); "Changes saved" would compete with them.
|
|
1911
1613
|
taskStatus !== null && o.headStatus !== false
|
|
1912
1614
|
? html `<header class="result-head"><div data-headline-tone="${taskStatus.tone}"><h2 class="status-headline" data-work-status="${status.token}"><i aria-hidden="true"></i>${taskStatus.headline}</h2><p class="status-sentence">${taskStatus.sentence}</p></div></header>`
|
|
1913
1615
|
: html `<header class="result-head"><div><h2>${heading}</h2></div>${o.headStatus === false ? "" : statusLineHtml(status)}</header>`,
|
|
@@ -1933,7 +1635,6 @@ export function resultPanelParts(detail, o) {
|
|
|
1933
1635
|
reviewHistory: REVIEW_TOKENS.has(status.token) ? status.detail : null,
|
|
1934
1636
|
attention: attention.filter(one => !shortenedMaterialReason(one)).map(plainReasonWords),
|
|
1935
1637
|
youCheck,
|
|
1936
|
-
// The same counts as the Requirements row (a refuted report verifies none of them, and says Unverified).
|
|
1937
1638
|
requirements: proof === null || proof.verdict === "refuted" ? null : requirementsOf(proof.matrix),
|
|
1938
1639
|
limits: attention.filter(one => shortenedMaterialReason(one)),
|
|
1939
1640
|
tabs: RESULT_TABS.map(tab => ({ key: tab.key, label: tab.key === "checks" && proof?.matrix.some(row => row.assessment !== undefined) ? "Requirements" : tab.label, count: tabCounts[tab.key], href: o.hrefFor(tab.key), active: tab.key === o.tab })),
|
|
@@ -1947,12 +1648,7 @@ export function resultPanelParts(detail, o) {
|
|
|
1947
1648
|
};
|
|
1948
1649
|
return { html: panelHtml, panel };
|
|
1949
1650
|
}
|
|
1950
|
-
/** Changed lines shown beside one "You check this one" item: at most this many per file, three files. */
|
|
1951
1651
|
export const CHECK_EXCERPT_LINES = 12;
|
|
1952
|
-
/** Each requirement only a person can confirm, with the evidence to judge
|
|
1953
|
-
* it by, inline: the changed lines in the files it cites (citing none, the
|
|
1954
|
-
* change's first file, labelled as not cited), the screenshots it cites
|
|
1955
|
-
* (none cited: every validated one), and the agent's own note. */
|
|
1956
1652
|
export function personCheckItems(proof, patchText, shots, runId) {
|
|
1957
1653
|
const rows = proof.matrix.filter(row => row.state === "manual-review");
|
|
1958
1654
|
if (rows.length === 0)
|
|
@@ -1978,35 +1674,27 @@ export function personCheckItems(proof, patchText, shots, runId) {
|
|
|
1978
1674
|
};
|
|
1979
1675
|
});
|
|
1980
1676
|
}
|
|
1981
|
-
/** The completion blocker no acceptance resolves (a failed check, an unresolved HIGH finding), in words, or null. */
|
|
1982
1677
|
export function hardBlockerOf(assignment) {
|
|
1983
1678
|
return assignment?.readiness?.blockers.find(one => one.key === "check-failed" || one.key === "high")?.message ?? null;
|
|
1984
1679
|
}
|
|
1985
|
-
/** A Needs you result's one action (needs-you.ts): a link to the act that resolves it, or Confirm it
|
|
1986
|
-
* stopped behind the password. Null under every other headline. */
|
|
1987
1680
|
export function needActionOf(assignment, status, csrf, returnTo, result) {
|
|
1988
1681
|
if (assignment === null || status === null || status.headline !== "Needs you" || status.need == null)
|
|
1989
1682
|
return null;
|
|
1990
|
-
// Accepting can't resolve it: Request changes is the way on, beside the reason.
|
|
1991
1683
|
if (result !== undefined && hardBlockerOf(assignment) !== null)
|
|
1992
1684
|
return null;
|
|
1993
1685
|
const action = assignment.primaryAction;
|
|
1994
1686
|
const rebuild = { href: null, confirm: null, rebuild: { action: `${taskHref(assignment.rootId)}/requeue` } };
|
|
1995
|
-
// Built to an earlier plan: Build again, in place (the task page's requeue).
|
|
1996
1687
|
if (action?.code === "retry-task" && status.need.key === "rebuild" && csrf !== "")
|
|
1997
1688
|
return { label: status.need.action.label, ...rebuild };
|
|
1998
1689
|
if (result !== undefined) {
|
|
1999
1690
|
if ((status.need.key === "review-result" || result.refuted === true) && !result.accepted && csrf !== "")
|
|
2000
1691
|
return { label: result.humanReview ? "Accept result" : "Accept with exception", href: null, confirm: null,
|
|
2001
1692
|
accept: { action: result.action, run: result.run, returnTo, note: result.humanReview ? null : "Why is this safe to accept?" } };
|
|
2002
|
-
// The task page sends the person here: never back to it. What this page can do leads — Accept
|
|
2003
|
-
// a check only a person can make, or Build again a result that may run again.
|
|
2004
1693
|
const here = (action?.code === "open-result" || action?.code === "inspect-run") && action.target.runId === result.run;
|
|
2005
1694
|
if (here && csrf !== "" && !result.accepted && result.humanReview)
|
|
2006
1695
|
return { label: "Accept result", href: null, confirm: null, accept: { action: result.action, run: result.run, returnTo, note: null } };
|
|
2007
1696
|
if (here && csrf !== "" && result.rebuildable === true)
|
|
2008
1697
|
return { label: NEEDS.rebuild.action.label, ...rebuild };
|
|
2009
|
-
// Nothing here resolves it: no act at all, never a link back to the task (which sends the person here).
|
|
2010
1698
|
if (status.need.key === "review-result" || here)
|
|
2011
1699
|
return null;
|
|
2012
1700
|
}
|
|
@@ -2014,7 +1702,6 @@ export function needActionOf(assignment, status, csrf, returnTo, result) {
|
|
|
2014
1702
|
? { action: `${taskHref(assignment.rootId)}/recheck-stopped`, run: action.target.runId, returnTo } : null;
|
|
2015
1703
|
return { label: status.need.action.label, href: assignmentActionHref(assignment) ?? taskHref(assignment.rootId), confirm };
|
|
2016
1704
|
}
|
|
2017
|
-
/** The server page's form of the same: the need's action first, Request changes as the quiet second. */
|
|
2018
1705
|
export function resultNeedAction(need, o, canRequest) {
|
|
2019
1706
|
const control = need.accept != null
|
|
2020
1707
|
? postForm(need.accept.action, html `${need.accept.note === null ? "" : html `<input type="text" name="note" maxlength="500" required placeholder="${need.accept.note}" aria-label="${need.accept.note}">`}<button type="submit" data-primary-action data-accept-result style="min-height:44px">${need.label}</button>`, { attrs: { class: "accept-result" }, returnTo: need.accept.returnTo, hidden: { run: need.accept.run } })
|
|
@@ -2025,20 +1712,12 @@ export function resultNeedAction(need, o, canRequest) {
|
|
|
2025
1712
|
: html `<a class="button-link" href="${need.href ?? "#"}" data-primary-action>${need.label}</a>`;
|
|
2026
1713
|
return html `<div class="result-action" data-result-action="need">${control}${canRequest && o.csrf !== "" ? html `<a class="result-feedback-link" href="#request-changes">Send back</a>` : ""}</div>`;
|
|
2027
1714
|
}
|
|
2028
|
-
/** The outcome in one bounded sentence (repair 2026-09-14): the handoff's
|
|
2029
|
-
* first sentence, cut at a word when it runs past 180 characters. The
|
|
2030
|
-
* full conclusion stays available behind the Summary's disclosure. */
|
|
2031
1715
|
export function conciseOutcomeOf(conclusion) {
|
|
2032
1716
|
const flat = oneLineOf(conclusion, 2_000);
|
|
2033
1717
|
const sentence = /^[\s\S]*?[.!?](?=\s|$)/.exec(flat)?.[0] ?? flat;
|
|
2034
1718
|
const bounded = sentence.length <= 140 ? sentence : `${sentence.slice(0, 140).replace(/\s+\S*$/, "")}…`;
|
|
2035
1719
|
return bounded.trim();
|
|
2036
1720
|
}
|
|
2037
|
-
/** Exactly one primary act for the result (repair 2026-09-14), chosen from
|
|
2038
|
-
* its state: draft the CI repair, create the revision the notes are
|
|
2039
|
-
* waiting for, open the pull request, or request changes. A bearer session
|
|
2040
|
-
* (no token) gets no control; the cockpit renders its own next-action
|
|
2041
|
-
* card instead (`action: false`). */
|
|
2042
1721
|
export function resultPrimaryAction(detail, o, prUrl) {
|
|
2043
1722
|
const wrap = (kind, control) => html `<div class="result-action" data-result-action="${kind}">${control}</div>`;
|
|
2044
1723
|
if (detail.ciFailing && o.csrf !== "") {
|
|
@@ -2056,10 +1735,6 @@ export function resultPrimaryAction(detail, o, prUrl) {
|
|
|
2056
1735
|
return wrap("request-changes", html `<a class="result-feedback-link" href="#request-changes">Send back</a>`);
|
|
2057
1736
|
return html ``;
|
|
2058
1737
|
}
|
|
2059
|
-
/** The run's facts as rows — one renderer for the page and its live
|
|
2060
|
-
* fragment (A4). Elapsed ticks client-side while the run is open. */
|
|
2061
|
-
/** The run's route provenance in plain words (v47): the exact agent it
|
|
2062
|
-
* spent as, in which role, and how that agent was chosen. */
|
|
2063
1738
|
export function runAgentWords(route) {
|
|
2064
1739
|
if (route === null || route === undefined)
|
|
2065
1740
|
return null;
|
|
@@ -2075,7 +1750,6 @@ export function runAgentWords(route) {
|
|
|
2075
1750
|
: "recommended";
|
|
2076
1751
|
return `${route.provider}${route.model === null ? "" : ` · ${route.model}`} as the ${role} — ${how}`;
|
|
2077
1752
|
}
|
|
2078
|
-
/** A run's outcome in the kit's tones: built or no change finished, failed or refused failed, anything else neutral. */
|
|
2079
1753
|
export function runOutcomeChip(run, live) {
|
|
2080
1754
|
if (live)
|
|
2081
1755
|
return chip("Running", "live");
|
|
@@ -2086,7 +1760,6 @@ export function runOutcomeChip(run, live) {
|
|
|
2086
1760
|
const word = sentenceCase(run.outcome ?? "never finished");
|
|
2087
1761
|
return chip(word, run.outcome === "built" || run.outcome === "no-change" ? "done" : run.outcome === "failed" || run.outcome === "refused" ? "failed" : "");
|
|
2088
1762
|
}
|
|
2089
|
-
/** How long a finished run ran, in whole minutes (seconds under one). */
|
|
2090
1763
|
function ranWords(run) {
|
|
2091
1764
|
if (run.startedAt === null || run.finishedAt === null)
|
|
2092
1765
|
return null;
|
|
@@ -2095,8 +1768,6 @@ function ranWords(run) {
|
|
|
2095
1768
|
return null;
|
|
2096
1769
|
return ms < 60_000 ? `${Math.max(1, Math.round(ms / 1000))} s` : ms < 3_600_000 ? `${Math.round(ms / 60_000)} min` : `${Math.floor(ms / 3_600_000)} h ${Math.round((ms % 3_600_000) / 60_000)} min`;
|
|
2097
1770
|
}
|
|
2098
|
-
/** A run's facts as the kit's facts list: how it ended, who ran it where, when, what it cost and where it ended. The
|
|
2099
|
-
* live poll (`?fragment=facts`) swaps the same list in place. (The page's header names the run and its task.) */
|
|
2100
1771
|
export function runFactsRows(run, _taskId, live, route = null) {
|
|
2101
1772
|
const mono = (value) => html `<span class="k-mono">${value}</span>`;
|
|
2102
1773
|
const rows = [
|
|
@@ -2114,27 +1785,13 @@ export function runFactsRows(run, _taskId, live, route = null) {
|
|
|
2114
1785
|
["Starting point", run.baseRevision === null ? null : mono(run.baseRevision.slice(0, 12))],
|
|
2115
1786
|
["Commit", run.headRevision === null ? null : mono(run.headRevision.slice(0, 12))],
|
|
2116
1787
|
["Tokens", run.tokensIn === null && run.tokensOut === null ? null : html `<span class="k-num">${(run.tokensIn ?? 0).toLocaleString()} in · ${(run.tokensOut ?? 0).toLocaleString()} out</span>`],
|
|
2117
|
-
// Auth is part of the economic fact: Claude's subscription harness reports an API-price equivalent, not a separate
|
|
2118
|
-
// API-key charge.
|
|
2119
1788
|
["Spend", run.providerStartedAt === null && run.tokensIn === null && run.tokensOut === null && run.costUsd === null ? null : runCostWords(run, live)],
|
|
2120
1789
|
];
|
|
2121
1790
|
const shown = rows.filter((row) => row[1] !== null && row[1] !== "");
|
|
2122
|
-
return html `${facts(shown)}${
|
|
2123
|
-
// Machine output (a stack trace, a path, "Error:" text) reads as an internal error everywhere else; its detail is here, as recorded.
|
|
2124
|
-
run.reason !== null && isInternalErrorReason(run.reason)
|
|
1791
|
+
return html `${facts(shown)}${run.reason !== null && isInternalErrorReason(run.reason)
|
|
2125
1792
|
? html `<p class="k-note">Recorded error</p><pre class="k-mono h-pre" id="run-reason-detail">${run.reason}</pre>`
|
|
2126
1793
|
: ""}`;
|
|
2127
1794
|
}
|
|
2128
|
-
/**
|
|
2129
|
-
* Click-to-prefill (arc 6, finding 4): client-side FORM mutation, named as
|
|
2130
|
-
* such — normal viewing stays the default; "Annotate" reveals line pins.
|
|
2131
|
-
* A pin or file button copies its target into the comment form and focuses
|
|
2132
|
-
* the note field. No fetch, endpoint, or submit: comments still leave
|
|
2133
|
-
* through the same CSRF'd form POST. Reads data attributes, writes input
|
|
2134
|
-
* values, and flips presentational state — never markup. The note counter
|
|
2135
|
-
* (follow-up on build 1540) reads the textarea's own maxlength — the
|
|
2136
|
-
* server's LIMITS.note — into the helper text, so the two cannot drift.
|
|
2137
|
-
*/
|
|
2138
1795
|
export function prefillScript() {
|
|
2139
1796
|
return (`(function(){var form=document.getElementById("comment-form");if(!form)return;var review=document.querySelector("[data-review-diff]");` +
|
|
2140
1797
|
`var noteBox=form.querySelector("[name=note]"),limit=document.getElementById("comment-note-limit");if(noteBox&&limit&¬eBox.maxLength>0){` +
|
|
@@ -2150,18 +1807,10 @@ export function prefillScript() {
|
|
|
2150
1807
|
`if(line)line.value=button.getAttribute("data-line")||"";` +
|
|
2151
1808
|
`form.scrollIntoView({behavior:"smooth",block:"center"});if(note)note.focus();});})();`);
|
|
2152
1809
|
}
|
|
2153
|
-
/** The primary review act opens the Checks view it names. The anchor
|
|
2154
|
-
* still lands on the result without JavaScript (the server honours
|
|
2155
|
-
* `?tab=checks`); this only removes the reload. */
|
|
2156
1810
|
export function reviewEvidenceScript() {
|
|
2157
1811
|
return (`(function(){var link=document.querySelector("[data-open-evidence]"),tab=document.querySelector('[data-result-tab="checks"]'),panel=document.getElementById("result");` +
|
|
2158
1812
|
`if(!link||!tab||!panel)return;link.addEventListener("click",function(ev){ev.preventDefault();tab.click();panel.scrollIntoView({behavior:"smooth",block:"start"});});})();`);
|
|
2159
1813
|
}
|
|
2160
|
-
/** The facts region alone, for the open-run poll (A4). A finished run's
|
|
2161
|
-
* fragment says so instead of quietly growing forms (finding 5), and a run
|
|
2162
|
-
* that stopped being the task's live claim says so too — both carry the
|
|
2163
|
-
* stop marker, so an open tab quits refetching a dead build (round-4
|
|
2164
|
-
* finding 15). */
|
|
2165
1814
|
export function runFactsFragment(run, taskId, live, route = null) {
|
|
2166
1815
|
if (run.outcome !== null) {
|
|
2167
1816
|
return html `<p class="k-note" data-region-stop>It finished. <a class="k-link" href="/r/${run.id}">Reload for the final record</a></p>`;
|