@aragon-agent/cli 0.6.46 → 0.6.48
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 +28 -0
- package/README.md +80 -12
- package/dist/agent/coalesce.d.ts +5 -1
- package/dist/agent/coalesce.js +13 -0
- package/dist/agent/controller.d.ts +41 -20
- package/dist/agent/controller.js +68 -15
- package/dist/agent/conversation-reset.d.ts +1 -1
- package/dist/agent/governance-wiring.d.ts +6 -6
- package/dist/agent/governance-wiring.js +4 -4
- package/dist/agent/headless.d.ts +5 -5
- package/dist/agent/headless.js +4 -4
- package/dist/agent/job-notices.d.ts +1 -1
- package/dist/agent/job-notices.js +1 -1
- package/dist/agent/kit-apply.d.ts +3 -3
- package/dist/agent/kit-apply.js +3 -3
- package/dist/agent/model-profile-settings.d.ts +2 -2
- package/dist/agent/model-profile-settings.js +6 -6
- package/dist/agent/prompt-options.d.ts +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/agent/user-attention.d.ts +17 -0
- package/dist/agent/user-attention.js +32 -0
- package/dist/{ui → app}/App.d.ts +9 -9
- package/dist/{ui → app}/App.js +113 -79
- package/dist/{ui → app}/use-startup-notices.d.ts +1 -1
- package/dist/{ui → app}/use-startup-notices.js +2 -2
- package/dist/cli.js +31 -32
- package/dist/commands/agents-command.js +1 -1
- package/dist/commands/builtins.js +9 -9
- package/dist/commands/governance-command.js +2 -2
- package/dist/commands/governance-runs-table.js +1 -1
- package/dist/commands/kit-command.js +1 -1
- package/dist/commands/perf.d.ts +3 -3
- package/dist/commands/perf.js +1 -1
- package/dist/commands/registry.d.ts +8 -8
- package/dist/commands/skills.js +2 -2
- package/dist/commands/team-command.js +1 -1
- package/dist/compaction/archive.d.ts +1 -1
- package/dist/compaction/archive.js +1 -1
- package/dist/compaction/child.d.ts +3 -3
- package/dist/compaction/child.js +4 -4
- package/dist/compaction/command.js +5 -5
- package/dist/compaction/compactor.d.ts +6 -6
- package/dist/compaction/compactor.js +6 -6
- package/dist/compaction/context-command.js +1 -1
- package/dist/compaction/digest.js +1 -1
- package/dist/compaction/memory-input.js +1 -1
- package/dist/compaction/memory-validation.js +1 -1
- package/dist/compaction/memory.js +1 -1
- package/dist/compaction/summarize-call.js +1 -1
- package/dist/compaction/summary-prompt.js +1 -1
- package/dist/compaction/tail-budget.js +2 -2
- package/dist/compaction/wiring.d.ts +5 -5
- package/dist/compaction/wiring.js +2 -2
- package/dist/config/cli-commands.d.ts +1 -1
- package/dist/config/cli-commands.js +3 -3
- package/dist/config/env.d.ts +1 -1
- package/dist/config/env.js +4 -4
- package/dist/config/load.d.ts +2 -2
- package/dist/config/load.js +10 -31
- package/dist/config/migrate-state-out-of-config.js +1 -1
- package/dist/config/model-profile-store.d.ts +4 -54
- package/dist/config/model-profile-store.js +3 -3
- package/dist/config/prompt-history.js +1 -1
- package/dist/config/store.d.ts +2 -2
- package/dist/config/store.js +3 -3
- package/dist/diagnostics/doctor.js +4 -4
- package/dist/exec/bridge/decisions.d.ts +1 -1
- package/dist/exec/bridge/human-answers.d.ts +1 -1
- package/dist/exec/bridge/human-answers.js +1 -1
- package/dist/exec/bridge/protocol.d.ts +1 -1
- package/dist/exec/bridge/server.js +1 -1
- package/dist/exec/events.d.ts +2 -2
- package/dist/exec/index.d.ts +1 -1
- package/dist/exec/index.js +1 -1
- package/dist/exec/permission.js +1 -1
- package/dist/exec/runner.d.ts +3 -3
- package/dist/exec/runner.js +2 -2
- package/dist/exec/threads/runtime.js +1 -1
- package/dist/fast/digest.d.ts +1 -1
- package/dist/fast/digest.js +1 -1
- package/dist/fast/frames.d.ts +1 -1
- package/dist/fast/frames.js +1 -1
- package/dist/fast/prompt.d.ts +1 -1
- package/dist/fast/prompt.js +1 -1
- package/dist/fast/review-call.js +1 -1
- package/dist/fast/reviewer.d.ts +3 -3
- package/dist/fast/reviewer.js +1 -1
- package/dist/fast/summary-call.d.ts +3 -3
- package/dist/fast/summary-call.js +2 -2
- package/dist/fast/summary-prompt.d.ts +1 -1
- package/dist/fast/summary-prompt.js +1 -1
- package/dist/fast/wiring.d.ts +4 -4
- package/dist/fast/wiring.js +1 -1
- package/dist/governance/card-normalize.d.ts +1 -1
- package/dist/governance/copy.d.ts +1 -1
- package/dist/governance/copy.js +2 -2
- package/dist/governance/engine/artifact-persist.d.ts +1 -1
- package/dist/governance/engine/budget.d.ts +1 -1
- package/dist/governance/engine/budget.js +1 -1
- package/dist/governance/engine/cards.d.ts +1 -1
- package/dist/governance/engine/digest.js +1 -1
- package/dist/governance/engine/engine-core.d.ts +5 -5
- package/dist/governance/engine/engine-core.js +1 -1
- package/dist/governance/engine/engine.d.ts +1 -1
- package/dist/governance/engine/engine.js +1 -1
- package/dist/governance/engine/estimate.d.ts +1 -1
- package/dist/governance/engine/estimate.js +1 -1
- package/dist/governance/engine/inspector.js +2 -2
- package/dist/governance/engine/integration.d.ts +1 -1
- package/dist/governance/engine/lifecycle.d.ts +1 -1
- package/dist/governance/engine/lifecycle.js +1 -1
- package/dist/governance/engine/phase-members.d.ts +1 -1
- package/dist/governance/engine/phase-planner.d.ts +1 -1
- package/dist/governance/engine/phase-planner.js +1 -1
- package/dist/governance/engine/rebuild.d.ts +1 -1
- package/dist/governance/engine/report.d.ts +1 -1
- package/dist/governance/engine/report.js +1 -1
- package/dist/governance/engine/run-digest.d.ts +1 -1
- package/dist/governance/engine/spec-builder.d.ts +2 -2
- package/dist/governance/engine/spec-builder.js +2 -2
- package/dist/governance/engine/stage-runner.js +2 -2
- package/dist/governance/engine/start-input.d.ts +1 -1
- package/dist/governance/engine/start-input.js +1 -1
- package/dist/governance/engine/state-machine.d.ts +1 -1
- package/dist/governance/engine/state-machine.js +3 -3
- package/dist/governance/engine/submission-queries.d.ts +1 -1
- package/dist/governance/engine/submission-render.d.ts +1 -1
- package/dist/governance/engine/submissions.d.ts +1 -1
- package/dist/governance/engine/submissions.js +1 -1
- package/dist/governance/engine/visibility.d.ts +1 -1
- package/dist/governance/engine/visibility.js +1 -1
- package/dist/governance/posture-transition.d.ts +2 -2
- package/dist/governance/posture-transition.js +1 -1
- package/dist/governance/profiles.d.ts +1 -1
- package/dist/governance/prompts/orchestrator-block.d.ts +2 -2
- package/dist/governance/prompts/orchestrator-block.js +2 -2
- package/dist/governance/prompts/plan-addendum.d.ts +1 -1
- package/dist/governance/prompts/plan-addendum.js +1 -1
- package/dist/governance/prompts/role-blocks.d.ts +2 -2
- package/dist/governance/prompts/role-blocks.js +1 -1
- package/dist/governance/report-reader.js +1 -1
- package/dist/governance/roles.d.ts +1 -1
- package/dist/governance/rules/claims.d.ts +1 -1
- package/dist/governance/rules/claims.js +1 -1
- package/dist/governance/rules/elimination.d.ts +1 -1
- package/dist/governance/rules/elimination.js +1 -1
- package/dist/governance/rules/failure-analysis.d.ts +2 -2
- package/dist/governance/rules/failure-analysis.js +1 -1
- package/dist/governance/rules/ledger-replay.d.ts +1 -1
- package/dist/governance/rules/ledger-state.d.ts +1 -1
- package/dist/governance/rules/ledger-state.js +1 -1
- package/dist/governance/rules/ledger.d.ts +2 -2
- package/dist/governance/rules/ledger.js +2 -2
- package/dist/governance/rules/rca.d.ts +1 -1
- package/dist/governance/rules/rca.js +1 -1
- package/dist/governance/rules/settlement.d.ts +2 -2
- package/dist/governance/rules/settlement.js +2 -2
- package/dist/governance/rules/suspicion.d.ts +1 -1
- package/dist/governance/store/artifacts.d.ts +1 -1
- package/dist/governance/store/artifacts.js +1 -1
- package/dist/governance/store/events-log.d.ts +1 -1
- package/dist/governance/store/run-store.d.ts +1 -1
- package/dist/governance/store/run-store.js +1 -1
- package/dist/governance/store/scoreboard-export.d.ts +1 -1
- package/dist/governance/tools/child-tools.d.ts +1 -1
- package/dist/governance/tools/guard.d.ts +1 -1
- package/dist/governance/tools/guard.js +1 -1
- package/dist/governance/tools/inspector-tools.d.ts +2 -2
- package/dist/governance/tools/inspector-tools.js +2 -2
- package/dist/governance/tools/lead-tools.d.ts +1 -1
- package/dist/governance/tools/lead-tools.js +1 -1
- package/dist/governance/tools/normalize-util.js +1 -1
- package/dist/governance/tools/scan-incomplete.js +1 -1
- package/dist/governance/tools/shared-tools.d.ts +1 -1
- package/dist/governance/tools/shared-tools.js +1 -1
- package/dist/governance/tools/submit-normalizers.d.ts +1 -1
- package/dist/governance/tools/submit-normalizers.js +1 -1
- package/dist/governance/tools/submit-tools.d.ts +1 -1
- package/dist/logging/cli-commands.js +1 -1
- package/dist/logging/install.d.ts +1 -1
- package/dist/logging/install.js +3 -3
- package/dist/logging/logger.d.ts +2 -2
- package/dist/logging/logger.js +31 -2
- package/dist/proc/kill-tree.js +1 -1
- package/dist/proc/log-mirror.js +1 -1
- package/dist/proc/log-ring.js +2 -2
- package/dist/proc/notices.d.ts +1 -1
- package/dist/proc/notices.js +2 -2
- package/dist/proc/prompt.d.ts +1 -1
- package/dist/proc/prompt.js +8 -5
- package/dist/proc/readiness.js +1 -1
- package/dist/proc/supervisor.d.ts +1 -1
- package/dist/proc/supervisor.js +10 -4
- package/dist/proc/wait-plan.d.ts +39 -0
- package/dist/proc/wait-plan.js +77 -0
- package/dist/proc/wait.d.ts +37 -4
- package/dist/proc/wait.js +68 -5
- package/dist/prompts/command.d.ts +1 -1
- package/dist/prompts/command.js +1 -1
- package/dist/prompts/normalize.d.ts +1 -1
- package/dist/prompts/normalize.js +1 -1
- package/dist/prompts/resolve.d.ts +1 -1
- package/dist/prompts/store.d.ts +2 -12
- package/dist/prompts/store.js +6 -60
- package/dist/session/checkpoint.d.ts +2 -2
- package/dist/session/checkpoint.js +2 -0
- package/dist/session/clear-archive.d.ts +2 -2
- package/dist/session/persist.d.ts +2 -2
- package/dist/session/persist.js +20 -3
- package/dist/session/startup-session.d.ts +2 -2
- package/dist/session/validate-session.js +6 -3
- package/dist/skills/service.d.ts +2 -2
- package/dist/team/bus.d.ts +1 -1
- package/dist/team/bus.js +1 -1
- package/dist/team/child-reviewer.d.ts +2 -2
- package/dist/team/child-reviewer.js +1 -1
- package/dist/team/comm-tools.js +1 -1
- package/dist/team/dispatch-gate.js +1 -1
- package/dist/team/forced-dispatch.js +1 -1
- package/dist/team/forced-mode.d.ts +1 -1
- package/dist/team/forced-prompt.d.ts +1 -1
- package/dist/team/forced-prompt.js +1 -1
- package/dist/team/normalize.d.ts +1 -1
- package/dist/team/normalize.js +1 -1
- package/dist/team/overseer.d.ts +3 -3
- package/dist/team/overseer.js +3 -3
- package/dist/team/prompt.d.ts +1 -1
- package/dist/team/prompt.js +1 -1
- package/dist/team/report.d.ts +2 -2
- package/dist/team/report.js +2 -2
- package/dist/team/retry.d.ts +1 -1
- package/dist/team/retry.js +1 -1
- package/dist/team/runtime.d.ts +4 -4
- package/dist/team/runtime.js +2 -2
- package/dist/team/settled.d.ts +2 -2
- package/dist/team/subagent.d.ts +4 -4
- package/dist/team/subagent.js +5 -5
- package/dist/team/task-tool.d.ts +1 -1
- package/dist/team/task-tool.js +1 -1
- package/dist/todo/normalize.d.ts +1 -1
- package/dist/todo/normalize.js +1 -1
- package/dist/todo/prompt.d.ts +1 -1
- package/dist/todo/prompt.js +1 -1
- package/dist/todo/store.d.ts +1 -1
- package/dist/todo/store.js +2 -2
- package/dist/todo/todo-tool.d.ts +1 -1
- package/dist/todo/todo-tool.js +2 -2
- package/dist/tools/bash-tool.d.ts +1 -1
- package/dist/tools/bash-tool.js +2 -2
- package/dist/tools/diff.d.ts +1 -1
- package/dist/tools/diff.js +1 -1
- package/dist/tools/file-change-store.d.ts +1 -1
- package/dist/tools/fs-tools.d.ts +2 -2
- package/dist/tools/fs-tools.js +1 -1
- package/dist/tools/index.d.ts +3 -3
- package/dist/tools/index.js +1 -1
- package/dist/tools/job-tools.d.ts +14 -3
- package/dist/tools/job-tools.js +158 -35
- package/dist/tools/plan-tools.d.ts +1 -1
- package/dist/tools/plan-tools.js +1 -1
- package/dist/tools/proc-tools.d.ts +1 -1
- package/dist/tools/proc-tools.js +2 -2
- package/dist/update/classify-failure.d.ts +1 -1
- package/dist/update/install-lock.js +1 -1
- package/dist/update/install-source.d.ts +1 -1
- package/dist/update/installer.js +2 -2
- package/dist/update/npm-view.d.ts +1 -1
- package/dist/update/npm-view.js +1 -1
- package/dist/update/registry.d.ts +1 -1
- package/dist/update/registry.js +1 -1
- package/dist/update/service.d.ts +2 -2
- package/dist/update/service.js +2 -2
- package/package.json +7 -7
- package/dist/agent/agent-mode.d.ts +0 -108
- package/dist/agent/agent-mode.js +0 -121
- package/dist/agent/entry-limits.d.ts +0 -65
- package/dist/agent/entry-limits.js +0 -133
- package/dist/agent/governance-view.d.ts +0 -40
- package/dist/agent/governance-view.js +0 -40
- package/dist/agent/invocation-card.d.ts +0 -77
- package/dist/agent/invocation-card.js +0 -169
- package/dist/agent/model-probe-limits.d.ts +0 -39
- package/dist/agent/model-probe-limits.js +0 -25
- package/dist/agent/model-probe.d.ts +0 -104
- package/dist/agent/model-probe.js +0 -391
- package/dist/agent/queued-messages.d.ts +0 -23
- package/dist/agent/queued-messages.js +0 -49
- package/dist/agent/reducer.d.ts +0 -837
- package/dist/agent/reducer.js +0 -1617
- package/dist/agent/retry-view.d.ts +0 -68
- package/dist/agent/retry-view.js +0 -95
- package/dist/agent/usage.d.ts +0 -47
- package/dist/agent/usage.js +0 -84
- package/dist/compaction/limits.d.ts +0 -61
- package/dist/compaction/limits.js +0 -64
- package/dist/compaction/meter.d.ts +0 -276
- package/dist/compaction/meter.js +0 -512
- package/dist/compaction/pressure.d.ts +0 -163
- package/dist/compaction/pressure.js +0 -199
- package/dist/compaction/reason-text.d.ts +0 -36
- package/dist/compaction/reason-text.js +0 -78
- package/dist/compaction/types.d.ts +0 -360
- package/dist/compaction/types.js +0 -22
- package/dist/config/governance-config.d.ts +0 -125
- package/dist/config/governance-config.js +0 -164
- package/dist/config/kit-resolution.d.ts +0 -93
- package/dist/config/kit-resolution.js +0 -226
- package/dist/config/model-kits.d.ts +0 -225
- package/dist/config/model-kits.js +0 -302
- package/dist/config/model-profile-resolution.d.ts +0 -28
- package/dist/config/model-profile-resolution.js +0 -88
- package/dist/config/model-profiles.d.ts +0 -103
- package/dist/config/model-profiles.js +0 -188
- package/dist/config/schema.d.ts +0 -1645
- package/dist/config/schema.js +0 -1377
- package/dist/fast/limits.d.ts +0 -152
- package/dist/fast/limits.js +0 -152
- package/dist/fast/resolve.d.ts +0 -44
- package/dist/fast/resolve.js +0 -107
- package/dist/fast/task-summary-types.d.ts +0 -66
- package/dist/fast/task-summary-types.js +0 -17
- package/dist/fast/types.d.ts +0 -141
- package/dist/fast/types.js +0 -14
- package/dist/governance/governed-dispatch.d.ts +0 -19
- package/dist/governance/governed-dispatch.js +0 -17
- package/dist/governance/limits.d.ts +0 -107
- package/dist/governance/limits.js +0 -131
- package/dist/governance/posture.d.ts +0 -35
- package/dist/governance/posture.js +0 -59
- package/dist/governance/rules/events-table.d.ts +0 -46
- package/dist/governance/rules/events-table.js +0 -94
- package/dist/governance/types.d.ts +0 -661
- package/dist/governance/types.js +0 -27
- package/dist/input/control-sequences.d.ts +0 -71
- package/dist/input/control-sequences.js +0 -222
- package/dist/input/csiu-keys.d.ts +0 -66
- package/dist/input/csiu-keys.js +0 -181
- package/dist/input/cursor-report.d.ts +0 -61
- package/dist/input/cursor-report.js +0 -97
- package/dist/input/enter-sequences.d.ts +0 -64
- package/dist/input/enter-sequences.js +0 -153
- package/dist/input/interrupt-gesture.d.ts +0 -18
- package/dist/input/interrupt-gesture.js +0 -19
- package/dist/input/keyboard-enhancement.d.ts +0 -42
- package/dist/input/keyboard-enhancement.js +0 -65
- package/dist/input/keymap.d.ts +0 -20
- package/dist/input/keymap.js +0 -99
- package/dist/input/limits.d.ts +0 -118
- package/dist/input/limits.js +0 -109
- package/dist/input/mouse-events.d.ts +0 -87
- package/dist/input/mouse-events.js +0 -212
- package/dist/input/paste-parse.d.ts +0 -83
- package/dist/input/paste-parse.js +0 -107
- package/dist/input/pointer-router.d.ts +0 -11
- package/dist/input/pointer-router.js +0 -14
- package/dist/input/stdin-filter.d.ts +0 -112
- package/dist/input/stdin-filter.js +0 -657
- package/dist/input/win32-input-mode.d.ts +0 -61
- package/dist/input/win32-input-mode.js +0 -269
- package/dist/logging/levels.d.ts +0 -40
- package/dist/logging/levels.js +0 -59
- package/dist/logging/secret-registry.d.ts +0 -32
- package/dist/logging/secret-registry.js +0 -73
- package/dist/proc/limits.d.ts +0 -200
- package/dist/proc/limits.js +0 -207
- package/dist/proc/progress.d.ts +0 -40
- package/dist/proc/progress.js +0 -135
- package/dist/proc/types.d.ts +0 -263
- package/dist/proc/types.js +0 -15
- package/dist/prompts/copy.d.ts +0 -89
- package/dist/prompts/copy.js +0 -131
- package/dist/prompts/fill.d.ts +0 -51
- package/dist/prompts/fill.js +0 -46
- package/dist/prompts/limits.d.ts +0 -53
- package/dist/prompts/limits.js +0 -53
- package/dist/prompts/search.d.ts +0 -58
- package/dist/prompts/search.js +0 -146
- package/dist/prompts/types.d.ts +0 -204
- package/dist/prompts/types.js +0 -13
- package/dist/team/activity.d.ts +0 -67
- package/dist/team/activity.js +0 -130
- package/dist/team/limits.d.ts +0 -308
- package/dist/team/limits.js +0 -330
- package/dist/team/model.d.ts +0 -104
- package/dist/team/model.js +0 -150
- package/dist/team/panel-rows.d.ts +0 -48
- package/dist/team/panel-rows.js +0 -75
- package/dist/team/timeline.d.ts +0 -74
- package/dist/team/timeline.js +0 -101
- package/dist/team/types.d.ts +0 -354
- package/dist/team/types.js +0 -13
- package/dist/todo/acceptance.d.ts +0 -120
- package/dist/todo/acceptance.js +0 -399
- package/dist/todo/follow-through.d.ts +0 -138
- package/dist/todo/follow-through.js +0 -248
- package/dist/todo/limits.d.ts +0 -152
- package/dist/todo/limits.js +0 -152
- package/dist/todo/panel-rows.d.ts +0 -45
- package/dist/todo/panel-rows.js +0 -70
- package/dist/todo/plan-sections.d.ts +0 -60
- package/dist/todo/plan-sections.js +0 -108
- package/dist/todo/row-window.d.ts +0 -51
- package/dist/todo/row-window.js +0 -107
- package/dist/todo/types.d.ts +0 -124
- package/dist/todo/types.js +0 -12
- package/dist/tools/human-input.d.ts +0 -212
- package/dist/tools/human-input.js +0 -265
- package/dist/tools/patch.d.ts +0 -115
- package/dist/tools/patch.js +0 -453
- package/dist/tools/terminal-output.d.ts +0 -115
- package/dist/tools/terminal-output.js +0 -201
- package/dist/tools/tool-output-store.d.ts +0 -68
- package/dist/tools/tool-output-store.js +0 -102
- package/dist/ui/ActivityLine.d.ts +0 -26
- package/dist/ui/ActivityLine.js +0 -48
- package/dist/ui/AutocompletePopup.d.ts +0 -23
- package/dist/ui/AutocompletePopup.js +0 -17
- package/dist/ui/BottomStatusRow.d.ts +0 -10
- package/dist/ui/BottomStatusRow.js +0 -9
- package/dist/ui/Composer.d.ts +0 -115
- package/dist/ui/Composer.js +0 -64
- package/dist/ui/GovernancePanel.d.ts +0 -50
- package/dist/ui/GovernancePanel.js +0 -77
- package/dist/ui/GovernanceRun.d.ts +0 -18
- package/dist/ui/GovernanceRun.js +0 -11
- package/dist/ui/Header.d.ts +0 -48
- package/dist/ui/Header.js +0 -27
- package/dist/ui/Logo.d.ts +0 -32
- package/dist/ui/Logo.js +0 -65
- package/dist/ui/Markdown.d.ts +0 -29
- package/dist/ui/Markdown.js +0 -116
- package/dist/ui/PromptCaret.d.ts +0 -11
- package/dist/ui/PromptCaret.js +0 -31
- package/dist/ui/PromptInput.d.ts +0 -192
- package/dist/ui/PromptInput.js +0 -689
- package/dist/ui/QueuePanel.d.ts +0 -8
- package/dist/ui/QueuePanel.js +0 -9
- package/dist/ui/QueueStatusRow.d.ts +0 -24
- package/dist/ui/QueueStatusRow.js +0 -51
- package/dist/ui/ScrollbackShell.d.ts +0 -132
- package/dist/ui/ScrollbackShell.js +0 -26
- package/dist/ui/SessionOpener.d.ts +0 -30
- package/dist/ui/SessionOpener.js +0 -12
- package/dist/ui/StatusBar.d.ts +0 -129
- package/dist/ui/StatusBar.js +0 -61
- package/dist/ui/TeamPanel.d.ts +0 -76
- package/dist/ui/TeamPanel.js +0 -103
- package/dist/ui/ToastStack.d.ts +0 -8
- package/dist/ui/ToastStack.js +0 -31
- package/dist/ui/TodoPanel.d.ts +0 -52
- package/dist/ui/TodoPanel.js +0 -214
- package/dist/ui/Transcript.d.ts +0 -105
- package/dist/ui/Transcript.js +0 -251
- package/dist/ui/UpdateLine.d.ts +0 -44
- package/dist/ui/UpdateLine.js +0 -129
- package/dist/ui/activity-phrases.d.ts +0 -33
- package/dist/ui/activity-phrases.js +0 -50
- package/dist/ui/capabilities.d.ts +0 -27
- package/dist/ui/capabilities.js +0 -65
- package/dist/ui/clipboard-task.d.ts +0 -29
- package/dist/ui/clipboard-task.js +0 -66
- package/dist/ui/clipboard.d.ts +0 -31
- package/dist/ui/clipboard.js +0 -157
- package/dist/ui/color-runtime.d.ts +0 -5
- package/dist/ui/color-runtime.js +0 -29
- package/dist/ui/composer-input.d.ts +0 -38
- package/dist/ui/composer-input.js +0 -79
- package/dist/ui/composer-limits.d.ts +0 -30
- package/dist/ui/composer-limits.js +0 -45
- package/dist/ui/composer-rows.d.ts +0 -73
- package/dist/ui/composer-rows.js +0 -129
- package/dist/ui/console-bridge.d.ts +0 -19
- package/dist/ui/console-bridge.js +0 -52
- package/dist/ui/density.d.ts +0 -26
- package/dist/ui/density.js +0 -34
- package/dist/ui/display-tab.d.ts +0 -51
- package/dist/ui/display-tab.js +0 -82
- package/dist/ui/editor-navigation.d.ts +0 -55
- package/dist/ui/editor-navigation.js +0 -96
- package/dist/ui/editor-reducer.d.ts +0 -108
- package/dist/ui/editor-reducer.js +0 -187
- package/dist/ui/enter-frames.d.ts +0 -47
- package/dist/ui/enter-frames.js +0 -117
- package/dist/ui/entries/AssistantEntry.d.ts +0 -37
- package/dist/ui/entries/AssistantEntry.js +0 -43
- package/dist/ui/entries/CompactionCard.d.ts +0 -88
- package/dist/ui/entries/CompactionCard.js +0 -222
- package/dist/ui/entries/DiffView.d.ts +0 -61
- package/dist/ui/entries/DiffView.js +0 -103
- package/dist/ui/entries/EntryFrame.d.ts +0 -23
- package/dist/ui/entries/EntryFrame.js +0 -6
- package/dist/ui/entries/FastCard.d.ts +0 -53
- package/dist/ui/entries/FastCard.js +0 -105
- package/dist/ui/entries/GovernanceCard.d.ts +0 -30
- package/dist/ui/entries/GovernanceCard.js +0 -32
- package/dist/ui/entries/InvocationCard.d.ts +0 -20
- package/dist/ui/entries/InvocationCard.js +0 -32
- package/dist/ui/entries/QueuedEntry.d.ts +0 -27
- package/dist/ui/entries/QueuedEntry.js +0 -33
- package/dist/ui/entries/RetryCard.d.ts +0 -56
- package/dist/ui/entries/RetryCard.js +0 -60
- package/dist/ui/entries/ServiceCard.d.ts +0 -82
- package/dist/ui/entries/ServiceCard.js +0 -151
- package/dist/ui/entries/TeamCard.d.ts +0 -55
- package/dist/ui/entries/TeamCard.js +0 -94
- package/dist/ui/entries/TodoCard.d.ts +0 -54
- package/dist/ui/entries/TodoCard.js +0 -98
- package/dist/ui/entries/ToolCard.d.ts +0 -81
- package/dist/ui/entries/ToolCard.js +0 -160
- package/dist/ui/entries/ToolPreview.d.ts +0 -59
- package/dist/ui/entries/ToolPreview.js +0 -208
- package/dist/ui/entries/UserEntry.d.ts +0 -36
- package/dist/ui/entries/UserEntry.js +0 -57
- package/dist/ui/exit-snapshot.d.ts +0 -43
- package/dist/ui/exit-snapshot.js +0 -26
- package/dist/ui/frame-differ.d.ts +0 -166
- package/dist/ui/frame-differ.js +0 -354
- package/dist/ui/frame-observer.d.ts +0 -17
- package/dist/ui/frame-observer.js +0 -94
- package/dist/ui/frame-parser.d.ts +0 -7
- package/dist/ui/frame-parser.js +0 -18
- package/dist/ui/gauge.d.ts +0 -39
- package/dist/ui/gauge.js +0 -55
- package/dist/ui/glyphs.d.ts +0 -178
- package/dist/ui/glyphs.js +0 -165
- package/dist/ui/governance-copy.d.ts +0 -69
- package/dist/ui/governance-copy.js +0 -104
- package/dist/ui/governance-status.d.ts +0 -145
- package/dist/ui/governance-status.js +0 -326
- package/dist/ui/gradient.d.ts +0 -11
- package/dist/ui/gradient.js +0 -50
- package/dist/ui/ink-runtime.d.ts +0 -4
- package/dist/ui/ink-runtime.js +0 -51
- package/dist/ui/interaction-copy.d.ts +0 -82
- package/dist/ui/interaction-copy.js +0 -38
- package/dist/ui/interaction-hints.d.ts +0 -44
- package/dist/ui/interaction-hints.js +0 -97
- package/dist/ui/layout/AppShell.d.ts +0 -17
- package/dist/ui/layout/AppShell.js +0 -6
- package/dist/ui/layout/Gutter.d.ts +0 -67
- package/dist/ui/layout/Gutter.js +0 -42
- package/dist/ui/layout/MeasuredEntry.d.ts +0 -21
- package/dist/ui/layout/MeasuredEntry.js +0 -30
- package/dist/ui/layout/OverlayFrame.d.ts +0 -73
- package/dist/ui/layout/OverlayFrame.js +0 -110
- package/dist/ui/layout/ScrollIndicator.d.ts +0 -32
- package/dist/ui/layout/ScrollIndicator.js +0 -22
- package/dist/ui/layout/ScrollViewport.d.ts +0 -40
- package/dist/ui/layout/ScrollViewport.js +0 -222
- package/dist/ui/layout/agents-board.d.ts +0 -102
- package/dist/ui/layout/agents-board.js +0 -389
- package/dist/ui/layout/autocomplete.d.ts +0 -18
- package/dist/ui/layout/autocomplete.js +0 -26
- package/dist/ui/layout/budget.d.ts +0 -43
- package/dist/ui/layout/budget.js +0 -52
- package/dist/ui/layout/cells.d.ts +0 -61
- package/dist/ui/layout/cells.js +0 -156
- package/dist/ui/layout/document-layout.d.ts +0 -13
- package/dist/ui/layout/document-layout.js +0 -10
- package/dist/ui/layout/follow-state.d.ts +0 -138
- package/dist/ui/layout/follow-state.js +0 -148
- package/dist/ui/layout/frame.d.ts +0 -36
- package/dist/ui/layout/frame.js +0 -39
- package/dist/ui/layout/governance-board.d.ts +0 -121
- package/dist/ui/layout/governance-board.js +0 -382
- package/dist/ui/layout/governance-card.d.ts +0 -53
- package/dist/ui/layout/governance-card.js +0 -134
- package/dist/ui/layout/governance-chip.d.ts +0 -38
- package/dist/ui/layout/governance-chip.js +0 -64
- package/dist/ui/layout/governance-panel.d.ts +0 -85
- package/dist/ui/layout/governance-panel.js +0 -358
- package/dist/ui/layout/governance-roster.d.ts +0 -65
- package/dist/ui/layout/governance-roster.js +0 -275
- package/dist/ui/layout/header-hints.d.ts +0 -90
- package/dist/ui/layout/header-hints.js +0 -110
- package/dist/ui/layout/header-left.d.ts +0 -115
- package/dist/ui/layout/header-left.js +0 -206
- package/dist/ui/layout/invocation-card.d.ts +0 -41
- package/dist/ui/layout/invocation-card.js +0 -91
- package/dist/ui/layout/kit-chip.d.ts +0 -50
- package/dist/ui/layout/kit-chip.js +0 -81
- package/dist/ui/layout/overlay-window.d.ts +0 -43
- package/dist/ui/layout/overlay-window.js +0 -51
- package/dist/ui/layout/queue-layout.d.ts +0 -19
- package/dist/ui/layout/queue-layout.js +0 -26
- package/dist/ui/layout/rail.d.ts +0 -7
- package/dist/ui/layout/rail.js +0 -16
- package/dist/ui/layout/scroll-indicator.d.ts +0 -27
- package/dist/ui/layout/scroll-indicator.js +0 -36
- package/dist/ui/layout/scroll.d.ts +0 -37
- package/dist/ui/layout/scroll.js +0 -99
- package/dist/ui/layout/scrollbar-geometry.d.ts +0 -17
- package/dist/ui/layout/scrollbar-geometry.js +0 -13
- package/dist/ui/layout/session-chip.d.ts +0 -52
- package/dist/ui/layout/session-chip.js +0 -64
- package/dist/ui/layout/shortcut-panel-layout.d.ts +0 -191
- package/dist/ui/layout/shortcut-panel-layout.js +0 -321
- package/dist/ui/layout/status-detail-layout.d.ts +0 -9
- package/dist/ui/layout/status-detail-layout.js +0 -79
- package/dist/ui/layout/status-layout.d.ts +0 -139
- package/dist/ui/layout/status-layout.js +0 -253
- package/dist/ui/layout/task-summary-cell.d.ts +0 -61
- package/dist/ui/layout/task-summary-cell.js +0 -65
- package/dist/ui/layout/team-panel.d.ts +0 -18
- package/dist/ui/layout/team-panel.js +0 -25
- package/dist/ui/layout/team-row.d.ts +0 -139
- package/dist/ui/layout/team-row.js +0 -246
- package/dist/ui/layout/todo-layout.d.ts +0 -62
- package/dist/ui/layout/todo-layout.js +0 -102
- package/dist/ui/layout/useTerminalSize.d.ts +0 -13
- package/dist/ui/layout/useTerminalSize.js +0 -50
- package/dist/ui/layout/viewport-geometry.d.ts +0 -29
- package/dist/ui/layout/viewport-geometry.js +0 -28
- package/dist/ui/layout/virtual-window.d.ts +0 -112
- package/dist/ui/layout/virtual-window.js +0 -488
- package/dist/ui/layout/wrap-rows.d.ts +0 -26
- package/dist/ui/layout/wrap-rows.js +0 -88
- package/dist/ui/live-clamp.d.ts +0 -14
- package/dist/ui/live-clamp.js +0 -46
- package/dist/ui/markdown-blocks.d.ts +0 -107
- package/dist/ui/markdown-blocks.js +0 -240
- package/dist/ui/overlays/AgentsBoardOverlay.d.ts +0 -57
- package/dist/ui/overlays/AgentsBoardOverlay.js +0 -183
- package/dist/ui/overlays/ConfirmDialog.d.ts +0 -31
- package/dist/ui/overlays/ConfirmDialog.js +0 -44
- package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +0 -41
- package/dist/ui/overlays/GovernanceBoardOverlay.js +0 -76
- package/dist/ui/overlays/GovernanceSettingsPage.d.ts +0 -48
- package/dist/ui/overlays/GovernanceSettingsPage.js +0 -93
- package/dist/ui/overlays/HelpOverlay.d.ts +0 -29
- package/dist/ui/overlays/HelpOverlay.js +0 -232
- package/dist/ui/overlays/KitEditor.d.ts +0 -23
- package/dist/ui/overlays/KitEditor.js +0 -101
- package/dist/ui/overlays/KitManager.d.ts +0 -23
- package/dist/ui/overlays/KitManager.js +0 -104
- package/dist/ui/overlays/KitPicker.d.ts +0 -49
- package/dist/ui/overlays/KitPicker.js +0 -58
- package/dist/ui/overlays/ModelDiscoveryList.d.ts +0 -23
- package/dist/ui/overlays/ModelDiscoveryList.js +0 -161
- package/dist/ui/overlays/ModelPicker.d.ts +0 -26
- package/dist/ui/overlays/ModelPicker.js +0 -63
- package/dist/ui/overlays/ModelProfileEditor.d.ts +0 -29
- package/dist/ui/overlays/ModelProfileEditor.js +0 -168
- package/dist/ui/overlays/ModelProfilePicker.d.ts +0 -48
- package/dist/ui/overlays/ModelProfilePicker.js +0 -231
- package/dist/ui/overlays/PlanReviewOverlay.d.ts +0 -51
- package/dist/ui/overlays/PlanReviewOverlay.js +0 -132
- package/dist/ui/overlays/PromptEditorPage.d.ts +0 -48
- package/dist/ui/overlays/PromptEditorPage.js +0 -227
- package/dist/ui/overlays/PromptLibraryOverlay.d.ts +0 -37
- package/dist/ui/overlays/PromptLibraryOverlay.js +0 -191
- package/dist/ui/overlays/PromptPicker.d.ts +0 -36
- package/dist/ui/overlays/PromptPicker.js +0 -129
- package/dist/ui/overlays/PromptTextArea.d.ts +0 -86
- package/dist/ui/overlays/PromptTextArea.js +0 -141
- package/dist/ui/overlays/QuestionOverlay.d.ts +0 -39
- package/dist/ui/overlays/QuestionOverlay.js +0 -258
- package/dist/ui/overlays/QueueOverlay.d.ts +0 -22
- package/dist/ui/overlays/QueueOverlay.js +0 -79
- package/dist/ui/overlays/SettingsScreen.d.ts +0 -228
- package/dist/ui/overlays/SettingsScreen.js +0 -1037
- package/dist/ui/overlays/ShortcutPanel.d.ts +0 -39
- package/dist/ui/overlays/ShortcutPanel.js +0 -106
- package/dist/ui/overlays/TeamFanoutPage.d.ts +0 -51
- package/dist/ui/overlays/TeamFanoutPage.js +0 -90
- package/dist/ui/overlays/governance-settings.d.ts +0 -79
- package/dist/ui/overlays/governance-settings.js +0 -140
- package/dist/ui/overlays/kit-picker-state.d.ts +0 -87
- package/dist/ui/overlays/kit-picker-state.js +0 -136
- package/dist/ui/overlays/kit-settings-state.d.ts +0 -129
- package/dist/ui/overlays/kit-settings-state.js +0 -268
- package/dist/ui/overlays/model-probe-view.d.ts +0 -128
- package/dist/ui/overlays/model-probe-view.js +0 -225
- package/dist/ui/overlays/model-profile-state.d.ts +0 -177
- package/dist/ui/overlays/model-profile-state.js +0 -301
- package/dist/ui/overlays/prompt-library-state.d.ts +0 -162
- package/dist/ui/overlays/prompt-library-state.js +0 -335
- package/dist/ui/overlays/prompt-picker-state.d.ts +0 -71
- package/dist/ui/overlays/prompt-picker-state.js +0 -98
- package/dist/ui/overlays/team-fanout-state.d.ts +0 -106
- package/dist/ui/overlays/team-fanout-state.js +0 -155
- package/dist/ui/overlays/use-model-probe.d.ts +0 -30
- package/dist/ui/overlays/use-model-probe.js +0 -109
- package/dist/ui/palettes.d.ts +0 -112
- package/dist/ui/palettes.js +0 -130
- package/dist/ui/paste-frames.d.ts +0 -91
- package/dist/ui/paste-frames.js +0 -117
- package/dist/ui/paste-tokens.d.ts +0 -90
- package/dist/ui/paste-tokens.js +0 -147
- package/dist/ui/render-cache.d.ts +0 -81
- package/dist/ui/render-cache.js +0 -196
- package/dist/ui/render-governor.d.ts +0 -54
- package/dist/ui/render-governor.js +0 -78
- package/dist/ui/run-metrics.d.ts +0 -23
- package/dist/ui/run-metrics.js +0 -27
- package/dist/ui/run-status-row.d.ts +0 -61
- package/dist/ui/run-status-row.js +0 -54
- package/dist/ui/screen.d.ts +0 -107
- package/dist/ui/screen.js +0 -234
- package/dist/ui/scrollback/LiveTail.d.ts +0 -115
- package/dist/ui/scrollback/LiveTail.js +0 -48
- package/dist/ui/scrollback/band.d.ts +0 -114
- package/dist/ui/scrollback/band.js +0 -143
- package/dist/ui/scrollback/budget.d.ts +0 -90
- package/dist/ui/scrollback/budget.js +0 -100
- package/dist/ui/scrollback/canvas.d.ts +0 -100
- package/dist/ui/scrollback/canvas.js +0 -114
- package/dist/ui/scrollback/cursor-probe.d.ts +0 -71
- package/dist/ui/scrollback/cursor-probe.js +0 -133
- package/dist/ui/scrollback/drain.d.ts +0 -32
- package/dist/ui/scrollback/drain.js +0 -64
- package/dist/ui/scrollback/exit-summary.d.ts +0 -23
- package/dist/ui/scrollback/exit-summary.js +0 -25
- package/dist/ui/scrollback/limits.d.ts +0 -98
- package/dist/ui/scrollback/limits.js +0 -98
- package/dist/ui/scrollback/live-preview.d.ts +0 -34
- package/dist/ui/scrollback/live-preview.js +0 -118
- package/dist/ui/scrollback/overflow-print.d.ts +0 -108
- package/dist/ui/scrollback/overflow-print.js +0 -120
- package/dist/ui/scrollback/renderer.d.ts +0 -48
- package/dist/ui/scrollback/renderer.js +0 -186
- package/dist/ui/scrollback/scrollback-writer.d.ts +0 -174
- package/dist/ui/scrollback/scrollback-writer.js +0 -648
- package/dist/ui/scrollback/settled-boundary.d.ts +0 -42
- package/dist/ui/scrollback/settled-boundary.js +0 -109
- package/dist/ui/scrollback/tail-anchor.d.ts +0 -71
- package/dist/ui/scrollback/tail-anchor.js +0 -79
- package/dist/ui/scrollback/tail-window.d.ts +0 -73
- package/dist/ui/scrollback/tail-window.js +0 -89
- package/dist/ui/scrollback/use-scrollback-view.d.ts +0 -139
- package/dist/ui/scrollback/use-scrollback-view.js +0 -601
- package/dist/ui/scrollback/writer-shapes.d.ts +0 -127
- package/dist/ui/scrollback/writer-shapes.js +0 -159
- package/dist/ui/scrollbar-controller.d.ts +0 -30
- package/dist/ui/scrollbar-controller.js +0 -124
- package/dist/ui/selection/highlight.d.ts +0 -39
- package/dist/ui/selection/highlight.js +0 -64
- package/dist/ui/selection/screen-mirror.d.ts +0 -24
- package/dist/ui/selection/screen-mirror.js +0 -35
- package/dist/ui/selection/selection-controller.d.ts +0 -104
- package/dist/ui/selection/selection-controller.js +0 -372
- package/dist/ui/selection/selection.d.ts +0 -90
- package/dist/ui/selection/selection.js +0 -223
- package/dist/ui/shortcuts.d.ts +0 -81
- package/dist/ui/shortcuts.js +0 -221
- package/dist/ui/status-feedback.d.ts +0 -35
- package/dist/ui/status-feedback.js +0 -38
- package/dist/ui/stdout-frame-writer.d.ts +0 -74
- package/dist/ui/stdout-frame-writer.js +0 -155
- package/dist/ui/team-status.d.ts +0 -166
- package/dist/ui/team-status.js +0 -252
- package/dist/ui/terminal-plan.d.ts +0 -52
- package/dist/ui/terminal-plan.js +0 -49
- package/dist/ui/theme.d.ts +0 -96
- package/dist/ui/theme.js +0 -130
- package/dist/ui/transcript-text.d.ts +0 -41
- package/dist/ui/transcript-text.js +0 -282
- package/dist/ui/use-height-store.d.ts +0 -31
- package/dist/ui/use-height-store.js +0 -76
- package/dist/ui/use-render-governor.d.ts +0 -39
- package/dist/ui/use-render-governor.js +0 -57
- package/dist/ui/use-wheel-routing.d.ts +0 -57
- package/dist/ui/use-wheel-routing.js +0 -152
- package/dist/ui/win-vt-force.d.ts +0 -136
- package/dist/ui/win-vt-force.js +0 -237
- package/dist/ui/win-vt-input.d.ts +0 -57
- package/dist/ui/win-vt-input.js +0 -62
- package/dist/update/limits.d.ts +0 -111
- package/dist/update/limits.js +0 -111
- package/dist/update/semver.d.ts +0 -89
- package/dist/update/semver.js +0 -295
- package/dist/update/types.d.ts +0 -169
- package/dist/update/types.js +0 -68
- /package/dist/{ui → app}/session-bridge.d.ts +0 -0
- /package/dist/{ui → app}/session-bridge.js +0 -0
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import stringWidth from 'string-width';
|
|
2
|
-
import stripAnsi from 'strip-ansi';
|
|
3
|
-
import { formatDuration } from '../../agent/usage.js';
|
|
4
|
-
import { isGovernedModeValue, modeWord } from '../governance-status.js';
|
|
5
|
-
import { interactionCopy as copy } from '../interaction-copy.js';
|
|
6
|
-
export function cleanStatusText(text) {
|
|
7
|
-
// eslint-disable-next-line no-control-regex
|
|
8
|
-
return stripAnsi(text).replace(/[\x00-\x1f\x7f-\x9f\u2028\u2029]/g, ' ').trim();
|
|
9
|
-
}
|
|
10
|
-
export function statusField(id, text, tone = 'muted') {
|
|
11
|
-
const clean = cleanStatusText(text);
|
|
12
|
-
return { id, text: clean, cells: stringWidth(clean), tone };
|
|
13
|
-
}
|
|
14
|
-
export function statusLinePlan(fields, separator = ' | ') {
|
|
15
|
-
const separatorCells = stringWidth(separator);
|
|
16
|
-
return { fields, separator, separatorCells,
|
|
17
|
-
cells: fields.reduce((sum, item) => sum + item.cells, 0) + Math.max(0, fields.length - 1) * separatorCells };
|
|
18
|
-
}
|
|
19
|
-
export function phaseLabels(input) {
|
|
20
|
-
if (input.waitingForConfirmation)
|
|
21
|
-
return copy.confirming;
|
|
22
|
-
if (input.stopping)
|
|
23
|
-
return copy.stopping;
|
|
24
|
-
if (input.compacting)
|
|
25
|
-
return copy.compacting;
|
|
26
|
-
if (input.retryActive)
|
|
27
|
-
return copy.retrying;
|
|
28
|
-
// A WAIT OUTRANKS THE TOOL NAME (long-task-jobs AC-28): `Running job_wait`
|
|
29
|
-
// answers "which tool", `Waiting on t3 (up to 30s)` answers "what am I waiting
|
|
30
|
-
// for and how long may it take", which is the question a user staring at a
|
|
31
|
-
// quiet terminal actually has. Both forms carry it - the short rung is
|
|
32
|
-
// truncated by width, not reworded.
|
|
33
|
-
if (input.wait) {
|
|
34
|
-
const label = `Waiting on ${cleanStatusText(input.wait.jobId)} ` +
|
|
35
|
-
`(up to ${Math.max(0, Math.round(input.wait.upToSeconds))}s)`;
|
|
36
|
-
return [label, label];
|
|
37
|
-
}
|
|
38
|
-
if (input.activeTool)
|
|
39
|
-
return [copy.tool[0], copy.tool[1] + ' ' + cleanStatusText(input.activeTool.name)];
|
|
40
|
-
if (input.phase === 'idle' && input.runOutcome && input.runOutcome !== 'none')
|
|
41
|
-
return copy[input.runOutcome];
|
|
42
|
-
if (input.phase === 'preparing-tool')
|
|
43
|
-
return copy.preparingTool;
|
|
44
|
-
return copy[input.phase];
|
|
45
|
-
}
|
|
46
|
-
export function validContext(context) {
|
|
47
|
-
return context.windowKnown && context.window > 0 &&
|
|
48
|
-
[context.occupied, context.window, context.pct, context.deltaTokens].every(n => Number.isFinite(n) && n >= 0);
|
|
49
|
-
}
|
|
50
|
-
function contextPercent(context) {
|
|
51
|
-
if (!validContext(context))
|
|
52
|
-
return '?';
|
|
53
|
-
const mark = context.source === 'estimate' || context.deltaTokens > 0 ? '~' : '';
|
|
54
|
-
return mark + (context.pct > 999 ? '>999' : Math.round(context.pct)) + '%';
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* The words that ride on the gauge when auto-compaction has given up (C).
|
|
58
|
-
*
|
|
59
|
-
* IT RIDES ON THE GAUGE RATHER THAN OCCUPYING ITS OWN FIELD. "Auto-paused" is the
|
|
60
|
-
* only fact that explains a stuck percentage, so the two belong in one field for
|
|
61
|
-
* the same reason `/context` prints them on adjacent lines. A second field would
|
|
62
|
-
* also be the first thing the width ladder drops, and this is precisely the state
|
|
63
|
-
* that must survive a narrow terminal.
|
|
64
|
-
*
|
|
65
|
-
* `paused` at the tight rungs: the full phrase costs twelve cells the row does
|
|
66
|
-
* not have at rung 3 and beyond, and dropping the fact entirely would be worse
|
|
67
|
-
* than abbreviating it.
|
|
68
|
-
*/
|
|
69
|
-
function pausedSuffix(full) {
|
|
70
|
-
return full ? ' auto-paused' : ' paused';
|
|
71
|
-
}
|
|
72
|
-
export function shortDuration(ms) {
|
|
73
|
-
if (!Number.isFinite(ms) || ms <= 0)
|
|
74
|
-
return '0s';
|
|
75
|
-
const seconds = Math.floor(ms / 1000);
|
|
76
|
-
if (seconds < 60)
|
|
77
|
-
return seconds + 's';
|
|
78
|
-
if (seconds < 3600)
|
|
79
|
-
return Math.floor(seconds / 60) + 'm' + String(seconds % 60).padStart(2, '0') + 's';
|
|
80
|
-
if (seconds < 86400)
|
|
81
|
-
return Math.floor(seconds / 3600) + 'h' + String(Math.floor(seconds / 60) % 60).padStart(2, '0') + 'm';
|
|
82
|
-
const days = Math.floor(seconds / 86400);
|
|
83
|
-
return days > 999 ? '>999d' : days + 'd';
|
|
84
|
-
}
|
|
85
|
-
function speedNumber(input) {
|
|
86
|
-
if (!input.speedKnown || input.phase === 'idle' || input.elapsedMs <= 500
|
|
87
|
-
|| !Number.isFinite(input.tokPerSec) || input.tokPerSec < 0)
|
|
88
|
-
return '--';
|
|
89
|
-
const value = input.tokPerSec;
|
|
90
|
-
if (value > 99e6)
|
|
91
|
-
return '>99M';
|
|
92
|
-
if (value >= 999950)
|
|
93
|
-
return (value / 1e6).toFixed(1) + 'M';
|
|
94
|
-
if (value > 999)
|
|
95
|
-
return (value / 1000).toFixed(1) + 'k';
|
|
96
|
-
return String(Math.round(value));
|
|
97
|
-
}
|
|
98
|
-
function feedbackLabel(input, form) {
|
|
99
|
-
const feedback = input.feedback;
|
|
100
|
-
if (!feedback)
|
|
101
|
-
return undefined;
|
|
102
|
-
const error = feedback.kind === 'copy-error' || feedback.kind === 'copy-cleanup';
|
|
103
|
-
if (error && input.escapeAction === 'force-stop') {
|
|
104
|
-
return form === 'full' ? 'Copy err / Esc force' : form === 'tiny' ? 'E/F' : 'Err/EscF';
|
|
105
|
-
}
|
|
106
|
-
if (error && input.escapeAction === 'confirm-stop' && input.interruptPhase === 'armed') {
|
|
107
|
-
return form === 'full' ? 'Copy err / Esc stop' : form === 'tiny' ? 'E/S' : 'Err/EscS';
|
|
108
|
-
}
|
|
109
|
-
const labels = {
|
|
110
|
-
confirm: ['Awaiting confirmation', 'Ask', 'Ask'], stopping: ['Esc stop', 'EscS', 'EscS'],
|
|
111
|
-
'force-stop': ['Esc force', 'EscF', 'EscF'], exit: ['^C exit', '^Cexit', '^C'],
|
|
112
|
-
'clear-input': ['^C clear', '^Cclear', '^C'],
|
|
113
|
-
copying: ['Copying', 'Copy', 'Copy'], copied: ['Copied', 'Copied', 'Copy'],
|
|
114
|
-
'copy-sent': ['Copy sent', 'Sent', 'Sent'], 'copy-cleanup': ['Copy cleanup', 'Err', 'Err'],
|
|
115
|
-
'copy-error': ['Copy err', 'Err', 'Err'], notice: ['Notice', 'Notice', 'Note'],
|
|
116
|
-
};
|
|
117
|
-
return labels[feedback.kind][form === 'full' ? 0 : form === 'short' ? 1 : 2];
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Kinds that are NOTIFICATIONS, not a phase word (defect 8 / 9).
|
|
121
|
-
*
|
|
122
|
-
* A notification says "something happened". An ACTION kind (`confirm`,
|
|
123
|
-
* `stopping`, `force-stop`, `exit`, `clear-input`, `copy-error`,
|
|
124
|
-
* `copy-cleanup`) says what the NEXT key does - that IS the phase slot's job, so
|
|
125
|
-
* those keep replacing it. Everything in this set gets its own field instead and
|
|
126
|
-
* `phase` is never displaced: `Idle` / `Running` is the one thing this row must
|
|
127
|
-
* always answer, and a notice that lands as a turn ends is exactly when a wrong
|
|
128
|
-
* answer misleads the user about whether the agent is still working.
|
|
129
|
-
*/
|
|
130
|
-
const NOTIFICATION_KINDS = new Set([
|
|
131
|
-
'notice', 'copied', 'copy-sent', 'copying',
|
|
132
|
-
]);
|
|
133
|
-
/**
|
|
134
|
-
* The most cells a notification body may take on the primary row.
|
|
135
|
-
*
|
|
136
|
-
* The row is exactly one row high and measured, so the body is CLIPPED rather
|
|
137
|
-
* than wrapped. 32 cells carries `Theme set to light.` or `Todo panel off.`
|
|
138
|
-
* whole while leaving the phase word, the mode and the context gauge intact; a
|
|
139
|
-
* longer message still has the details row, where it is rendered in full.
|
|
140
|
-
*/
|
|
141
|
-
const FEEDBACK_TEXT_CELLS = 32;
|
|
142
|
-
/**
|
|
143
|
-
* Clip `text` to at most `cells` display columns, never splitting a wide glyph.
|
|
144
|
-
*
|
|
145
|
-
* Local rather than `interaction-hints.clipStatusText`: that module already
|
|
146
|
-
* imports THIS one, and a cycle for a five-line guard is not worth it.
|
|
147
|
-
*/
|
|
148
|
-
function clipFeedbackText(text, cells) {
|
|
149
|
-
const clean = cleanStatusText(text);
|
|
150
|
-
if (stringWidth(clean) <= cells)
|
|
151
|
-
return clean;
|
|
152
|
-
let clipped = '';
|
|
153
|
-
for (const char of clean) {
|
|
154
|
-
if (stringWidth(clipped + char) > cells)
|
|
155
|
-
break;
|
|
156
|
-
clipped += char;
|
|
157
|
-
}
|
|
158
|
-
return clipped;
|
|
159
|
-
}
|
|
160
|
-
const thinkingCodes = { off: 'O', minimal: 'N', low: 'L', medium: 'M', high: 'H', xhigh: 'X' };
|
|
161
|
-
/**
|
|
162
|
-
* The mode word for the primary row: full rungs name the mode with
|
|
163
|
-
* `MODE_LABEL`, tight rungs keep only its first letter, and a deferred switch
|
|
164
|
-
* renders `CUR>PENDING` in both tiers. `null` when the caller names no mode at
|
|
165
|
-
* all, so callers and tests that predate the field keep a byte-identical plan.
|
|
166
|
-
* The word must survive every width rung: the border color cannot be the only
|
|
167
|
-
* mode signal the default view carries (plan-mode P1-6).
|
|
168
|
-
*/
|
|
169
|
-
function modeFieldText(mode, pendingMode, full) {
|
|
170
|
-
if (!mode && !pendingMode)
|
|
171
|
-
return null;
|
|
172
|
-
const word = (value) => {
|
|
173
|
-
// `build` / `plan` answer exactly as before; the two governed postures are the only
|
|
174
|
-
// other values `modeWord` knows (`PG` is the short form of PLAN+GOVERN, since `P` is PLAN).
|
|
175
|
-
const known = modeWord(value, full);
|
|
176
|
-
if (known !== undefined)
|
|
177
|
-
return known;
|
|
178
|
-
return full ? value.toUpperCase() : (value[0] ?? '?').toUpperCase();
|
|
179
|
-
};
|
|
180
|
-
const current = word(mode || 'build');
|
|
181
|
-
return pendingMode ? `${current}>${word(pendingMode)}` : current;
|
|
182
|
-
}
|
|
183
|
-
/** Every field survives each width rung; only the redraw carrier is outside this plan. */
|
|
184
|
-
export function planPrimaryStatusFields(input) {
|
|
185
|
-
const columns = Number.isFinite(input.columns) ? Math.floor(input.columns) : 80;
|
|
186
|
-
// GUARDED LIKE `columns` ABOVE, and for the same reason: `Math.max(0, NaN)`
|
|
187
|
-
// is `NaN`, which would make every `cells > budget` comparison false and
|
|
188
|
-
// silently pin this row at its widest rung - the opposite of reserving space.
|
|
189
|
-
const reserved = typeof input.reserveRight === 'number' && Number.isFinite(input.reserveRight)
|
|
190
|
-
? Math.max(0, Math.floor(input.reserveRight))
|
|
191
|
-
: 0;
|
|
192
|
-
const budget = Math.max(0, columns - 1 - reserved);
|
|
193
|
-
const labels = phaseLabels(input);
|
|
194
|
-
const glyphText = cleanStatusText(input.spinner ?? '-');
|
|
195
|
-
const glyph = stringWidth(glyphText) === 1 ? glyphText : '-';
|
|
196
|
-
const code = thinkingCodes[input.thinkingLevel] ?? '?';
|
|
197
|
-
const pct = contextPercent(input.context);
|
|
198
|
-
const speed = speedNumber(input);
|
|
199
|
-
// THE RUN'S OWN URGENCY, and the notification's, are two different things
|
|
200
|
-
// (defect 9). `tone` keeps today's meaning for an ACTION kind (it colours the
|
|
201
|
-
// phase word); a notification is painted with its own level and leaves the
|
|
202
|
-
// phase word to describe the run - a copy error must not make `Idle` red.
|
|
203
|
-
const tone = input.feedback?.level === 'error' || input.runOutcome === 'failed'
|
|
204
|
-
? 'error' : input.feedback?.level === 'warn' || input.waitingForConfirmation || input.stopping ? 'warning' : 'normal';
|
|
205
|
-
const notification = !!input.feedback && NOTIFICATION_KINDS.has(input.feedback.kind);
|
|
206
|
-
const phaseTone = notification
|
|
207
|
-
? input.runOutcome === 'failed' ? 'error'
|
|
208
|
-
: input.waitingForConfirmation || input.stopping ? 'warning' : 'normal'
|
|
209
|
-
: tone;
|
|
210
|
-
const feedbackTone = input.feedback?.level === 'error' ? 'error'
|
|
211
|
-
: input.feedback?.level === 'warn' ? 'warning' : 'normal';
|
|
212
|
-
const build = (rung) => {
|
|
213
|
-
const full = rung === 0;
|
|
214
|
-
const form = full ? 'full' : rung >= 4 ? 'tiny' : 'short';
|
|
215
|
-
// THE BODY IS A FIELD OF ITS OWN (defect 8). The text has been in
|
|
216
|
-
// `feedback.text` all along; it only ever reached the screen on the SECOND
|
|
217
|
-
// status row, which is behind Ctrl+G and off by default. Rung 3 and tighter
|
|
218
|
-
// drop it: the ladder exists to keep the phase word, and a body that only fits
|
|
219
|
-
// by hiding `Running` would be the original defect back with extra steps.
|
|
220
|
-
const notice = notification && rung <= 2 && input.feedback
|
|
221
|
-
? clipFeedbackText(input.feedback.text, FEEDBACK_TEXT_CELLS) : '';
|
|
222
|
-
const label = (notification ? undefined : feedbackLabel(input, form))
|
|
223
|
-
?? (full ? labels[1] : rung >= 4 ? labels[0].slice(0, 4) : labels[0]);
|
|
224
|
-
const modeText = modeFieldText(input.mode, input.pendingMode, full);
|
|
225
|
-
// IMMEDIATELY AFTER `mode`, and kept at EVERY rung: both describe a state
|
|
226
|
-
// the USER armed, so the row's emphasis budget goes on them and nothing
|
|
227
|
-
// else (`accent`). It shortens to `T4` instead of disappearing because a
|
|
228
|
-
// chip that vanishes on a narrow terminal is indistinguishable from a
|
|
229
|
-
// disarmed session - the one question it exists to answer.
|
|
230
|
-
const forcedText = input.forcedTeam
|
|
231
|
-
? (rung >= 3 ? `T${input.forcedTeam.count}` : `Team ${input.forcedTeam.count}`)
|
|
232
|
-
: null;
|
|
233
|
-
return statusLinePlan([
|
|
234
|
-
statusField('phase', glyph + (rung >= 5 ? '' : ' ') + label, phaseTone),
|
|
235
|
-
...(notice ? [statusField('feedback', notice, feedbackTone)] : []),
|
|
236
|
-
...(modeText
|
|
237
|
-
? [statusField('mode', modeText, isGovernedModeValue(input.mode) || isGovernedModeValue(input.pendingMode) ? 'govern' : 'accent')]
|
|
238
|
-
: []),
|
|
239
|
-
...(forcedText ? [statusField('forcedTeam', forcedText, 'accent')] : []),
|
|
240
|
-
statusField('context', (full ? 'Context ' : 'C') + pct
|
|
241
|
-
+ (input.compactionPaused === true ? pausedSuffix(full) : '')),
|
|
242
|
-
statusField('thinking', full ? 'Think ' + (thinkingCodes[input.thinkingLevel] ? input.thinkingLevel : '?')
|
|
243
|
-
: (rung >= 2 ? '' : 'Th:') + code),
|
|
244
|
-
statusField('speed', speed + (full ? ' tok/s' : rung >= 3 ? '/s' : 't/s')),
|
|
245
|
-
statusField('elapsed', full && Number.isFinite(input.elapsedMs) && input.elapsedMs > 0
|
|
246
|
-
? formatDuration(input.elapsedMs) : shortDuration(input.elapsedMs)),
|
|
247
|
-
], full ? ' | ' : ' ');
|
|
248
|
-
};
|
|
249
|
-
let plan = build(0);
|
|
250
|
-
for (let rung = 1; plan.cells > budget && rung <= 5; rung++)
|
|
251
|
-
plan = build(rung);
|
|
252
|
-
return plan;
|
|
253
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The task-summary cell's decisions (tui-shortcut-drawer-and-task-summary §6.3).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY: `src/ui/**` is inside the glyph scanner's scope.
|
|
5
|
-
*
|
|
6
|
-
* WHY THIS IS A SEPARATE MODULE FROM `header-left.ts`: the planner answers "how
|
|
7
|
-
* wide is the cell", this one answers "should there be a cell at all, and what is
|
|
8
|
-
* in it". The second question is the trigger rule (D-7) and it has to be testable
|
|
9
|
-
* without a renderer - `task-summary-app.test.tsx` pins "one call per session" by
|
|
10
|
-
* calling THIS function, not by counting renders.
|
|
11
|
-
*
|
|
12
|
-
* THE TRIGGER IS NARROW ON PURPOSE. A header label is an identity strip, not a
|
|
13
|
-
* live subtitle: refreshing it every turn would flicker, cost money, and teach the
|
|
14
|
-
* user to distrust the one thing on the row that is not a status field.
|
|
15
|
-
*/
|
|
16
|
-
/** Why no summary call was started. Every branch is a branch the tests can name. */
|
|
17
|
-
export type TaskSummarySkipReason = 'already-set' | 'no-anchor' | 'not-user-initiated' | 'disabled' | 'pending';
|
|
18
|
-
/**
|
|
19
|
-
* D-7's trigger rule.
|
|
20
|
-
*
|
|
21
|
-
* FIVE INPUTS, ONE ANSWER. `userInitiated` is the second guard on the same fact
|
|
22
|
-
* `submitMessage` already knows (`opts.userInitiated !== false`): an automatic
|
|
23
|
-
* continuation is not a new task, and paying for a label for it would spend the
|
|
24
|
-
* user's money to describe work they did not start.
|
|
25
|
-
*/
|
|
26
|
-
export declare function shouldSummarize(input: {
|
|
27
|
-
anchor: string;
|
|
28
|
-
hasSummary: boolean;
|
|
29
|
-
pending: boolean;
|
|
30
|
-
enabled: boolean;
|
|
31
|
-
userInitiated: boolean;
|
|
32
|
-
}): {
|
|
33
|
-
start: true;
|
|
34
|
-
} | {
|
|
35
|
-
start: false;
|
|
36
|
-
reason: TaskSummarySkipReason;
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* The drawer's `Task` section, flattened from the view state so the pure layout
|
|
40
|
-
* module never learns what a `ViewState` is.
|
|
41
|
-
*/
|
|
42
|
-
export declare function taskSectionFrom(input: {
|
|
43
|
-
view: {
|
|
44
|
-
text: string;
|
|
45
|
-
tone: 'model' | 'fallback';
|
|
46
|
-
reason: string | null;
|
|
47
|
-
by: string;
|
|
48
|
-
at: number;
|
|
49
|
-
} | null;
|
|
50
|
-
pending: boolean;
|
|
51
|
-
enabled: boolean;
|
|
52
|
-
now: number;
|
|
53
|
-
}): {
|
|
54
|
-
text: string | null;
|
|
55
|
-
tone: 'model' | 'fallback' | null;
|
|
56
|
-
reason: string | null;
|
|
57
|
-
by: string;
|
|
58
|
-
ageMs: number | null;
|
|
59
|
-
enabled: boolean;
|
|
60
|
-
pending: boolean;
|
|
61
|
-
};
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The task-summary cell's decisions (tui-shortcut-drawer-and-task-summary §6.3).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY: `src/ui/**` is inside the glyph scanner's scope.
|
|
5
|
-
*
|
|
6
|
-
* WHY THIS IS A SEPARATE MODULE FROM `header-left.ts`: the planner answers "how
|
|
7
|
-
* wide is the cell", this one answers "should there be a cell at all, and what is
|
|
8
|
-
* in it". The second question is the trigger rule (D-7) and it has to be testable
|
|
9
|
-
* without a renderer - `task-summary-app.test.tsx` pins "one call per session" by
|
|
10
|
-
* calling THIS function, not by counting renders.
|
|
11
|
-
*
|
|
12
|
-
* THE TRIGGER IS NARROW ON PURPOSE. A header label is an identity strip, not a
|
|
13
|
-
* live subtitle: refreshing it every turn would flicker, cost money, and teach the
|
|
14
|
-
* user to distrust the one thing on the row that is not a status field.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* D-7's trigger rule.
|
|
18
|
-
*
|
|
19
|
-
* FIVE INPUTS, ONE ANSWER. `userInitiated` is the second guard on the same fact
|
|
20
|
-
* `submitMessage` already knows (`opts.userInitiated !== false`): an automatic
|
|
21
|
-
* continuation is not a new task, and paying for a label for it would spend the
|
|
22
|
-
* user's money to describe work they did not start.
|
|
23
|
-
*/
|
|
24
|
-
export function shouldSummarize(input) {
|
|
25
|
-
// ORDER IS THE DOCUMENTED PRECEDENCE: a prompt that is not a task cannot start
|
|
26
|
-
// one even when everything else says yes, and an OFF feature must report the
|
|
27
|
-
// switch rather than a downstream reason the user cannot act on.
|
|
28
|
-
if (!input.enabled)
|
|
29
|
-
return { start: false, reason: 'disabled' };
|
|
30
|
-
if (input.anchor.trim().length === 0)
|
|
31
|
-
return { start: false, reason: 'no-anchor' };
|
|
32
|
-
if (input.hasSummary)
|
|
33
|
-
return { start: false, reason: 'already-set' };
|
|
34
|
-
if (input.pending)
|
|
35
|
-
return { start: false, reason: 'pending' };
|
|
36
|
-
// ITS OWN REASON, not `no-anchor`: an automatic continuation HAS an anchor, it is
|
|
37
|
-
// simply not a new task, and a skip reason a maintainer cannot trust is worse than
|
|
38
|
-
// no reason at all (review fix RF-3).
|
|
39
|
-
if (!input.userInitiated)
|
|
40
|
-
return { start: false, reason: 'not-user-initiated' };
|
|
41
|
-
return { start: true };
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* The drawer's `Task` section, flattened from the view state so the pure layout
|
|
45
|
-
* module never learns what a `ViewState` is.
|
|
46
|
-
*/
|
|
47
|
-
export function taskSectionFrom(input) {
|
|
48
|
-
if (input.view === null) {
|
|
49
|
-
return {
|
|
50
|
-
text: null, tone: null, reason: null, by: '', ageMs: null,
|
|
51
|
-
enabled: input.enabled, pending: input.pending,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
return {
|
|
55
|
-
text: input.view.text,
|
|
56
|
-
tone: input.view.tone,
|
|
57
|
-
reason: input.view.reason,
|
|
58
|
-
by: input.view.by,
|
|
59
|
-
// The age is computed from the view's own timestamp and the caller's clock,
|
|
60
|
-
// so the drawer never introduces a second one.
|
|
61
|
-
ageMs: input.now >= input.view.at ? input.now - input.view.at : null,
|
|
62
|
-
enabled: input.enabled,
|
|
63
|
-
pending: input.pending,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { SubagentRun, TeamSnapshot } from '../../team/types.js';
|
|
2
|
-
export interface TeamPanelLayout {
|
|
3
|
-
collapsed: boolean;
|
|
4
|
-
rowCount: number;
|
|
5
|
-
visible: SubagentRun[];
|
|
6
|
-
hiddenTotal: number;
|
|
7
|
-
hiddenRunning: number;
|
|
8
|
-
}
|
|
9
|
-
export interface TeamPanelLayoutInput {
|
|
10
|
-
snapshot: TeamSnapshot | null;
|
|
11
|
-
terminalRows: number;
|
|
12
|
-
availableRows: number;
|
|
13
|
-
}
|
|
14
|
-
/** Project actual roster rows, preserving three middle rows when expanded.
|
|
15
|
-
* Invalid geometry becomes zero; legacy callers may pass positive Infinity
|
|
16
|
-
* for an unlimited available-row budget. Does not throw or mutate the snapshot.
|
|
17
|
-
*/
|
|
18
|
-
export declare function buildTeamPanelLayout(input: TeamPanelLayoutInput): TeamPanelLayout;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { TEAM_LIMITS } from '../../team/limits.js';
|
|
2
|
-
import { selectPanelRows } from '../../team/panel-rows.js';
|
|
3
|
-
import { TODO_LIMITS } from '../../todo/limits.js';
|
|
4
|
-
/** Project actual roster rows, preserving three middle rows when expanded.
|
|
5
|
-
* Invalid geometry becomes zero; legacy callers may pass positive Infinity
|
|
6
|
-
* for an unlimited available-row budget. Does not throw or mutate the snapshot.
|
|
7
|
-
*/
|
|
8
|
-
export function buildTeamPanelLayout(input) {
|
|
9
|
-
const available = input.availableRows === Infinity ? Infinity : nonNegativeInt(input.availableRows);
|
|
10
|
-
if (!input.snapshot || available < 1) {
|
|
11
|
-
return { collapsed: true, rowCount: 0, visible: [], hiddenTotal: 0, hiddenRunning: 0 };
|
|
12
|
-
}
|
|
13
|
-
const selection = selectPanelRows(input.snapshot.runs, TEAM_LIMITS.panelMaxRows);
|
|
14
|
-
const natural = 1 + selection.visible.length + Number(selection.hiddenTotal > 0)
|
|
15
|
-
+ Number(Boolean(input.snapshot.lastMessage))
|
|
16
|
-
// The supervisor status line (subagent-overseer-v2 AC-5) occupies one
|
|
17
|
-
// row whenever any run carries an intervention badge.
|
|
18
|
-
+ Number(input.snapshot.runs.some((run) => run.lastIntervention !== undefined));
|
|
19
|
-
const collapsed = nonNegativeInt(input.terminalRows) < TEAM_LIMITS.panelCollapseRows
|
|
20
|
-
|| available - natural < TODO_LIMITS.panelMinRows;
|
|
21
|
-
return { ...selection, collapsed, rowCount: collapsed ? 1 : natural };
|
|
22
|
-
}
|
|
23
|
-
function nonNegativeInt(value) {
|
|
24
|
-
return Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0;
|
|
25
|
-
}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Panel row geometry — the ONE authority for how a subagent row is measured and
|
|
3
|
-
* what it says (tui-subagent-panel §4.2 / §6.1).
|
|
4
|
-
*
|
|
5
|
-
* WHY THIS FILE EXISTS. The roster used to place its right-hand columns by
|
|
6
|
-
* `flexGrow`, and a fixed-height parent box makes Yoga stretch the column to its
|
|
7
|
-
* widest CHILD instead of to the available width: on a 100-column terminal inside
|
|
8
|
-
* the band slot the row measured 48 (spec §0.1, cases 3/4), so `grep 22.1s` sat
|
|
9
|
-
* hard against the description and the right half of the row was blank. Flex
|
|
10
|
-
* cannot fix that, because the number it needs - "how wide is this terminal" - is
|
|
11
|
-
* not part of the layout it is given. So the widths are COMPUTED here, by a total
|
|
12
|
-
* pure function, and the component only places fixed-width boxes at the offsets
|
|
13
|
-
* this module names.
|
|
14
|
-
*
|
|
15
|
-
* THE FIVE CELLS, in drawing order:
|
|
16
|
-
*
|
|
17
|
-
* marker(1+status+1) label(8) description(flex) gap(2) activity(n) clock(8)
|
|
18
|
-
*
|
|
19
|
-
* `description` is the ONLY flexible cell, and it is the one that absorbs every
|
|
20
|
-
* width pressure - the same degradation discipline `StatusBar` documents for its
|
|
21
|
-
* left cluster. The two right-hand cells are fixed and `flexShrink={0}`, so their
|
|
22
|
-
* absolute offsets follow from `rowWidth = parentWidth` and the sum of the fixed
|
|
23
|
-
* cells in front of them, and never from how a particular frame allocates slack.
|
|
24
|
-
*
|
|
25
|
-
* ASCII ONLY: `src/ui/**` is inside `glyphs.test.ts`'s static scan.
|
|
26
|
-
*
|
|
27
|
-
* THE ACTIVITY HELPERS LIVE HERE TOO (v2 implementation note, recorded in the
|
|
28
|
-
* spec's "implementation findings"). `teamRowCells` has to compose the activity
|
|
29
|
-
* text with the supervisor badge, which is what `activityWithBadge` already does;
|
|
30
|
-
* leaving those in `TeamPanel.tsx` would make this module and the component
|
|
31
|
-
* import each other. `TeamPanel` therefore RE-EXPORTS every symbol below, so the
|
|
32
|
-
* existing import sites (three test files) keep their import path unchanged.
|
|
33
|
-
*/
|
|
34
|
-
import type { OverseerAction, SubagentRun } from '../../team/types.js';
|
|
35
|
-
import type { Glyphs } from '../glyphs.js';
|
|
36
|
-
/** The clock cell: wide enough for `125m07s` (7) with one column of headroom. */
|
|
37
|
-
export declare const TEAM_CLOCK_CELLS = 8;
|
|
38
|
-
/** `run.label.padEnd(8).slice(0,8)` — unchanged from the row this replaces. */
|
|
39
|
-
export declare const TEAM_LABEL_CELLS = 8;
|
|
40
|
-
/** The two spaces in front of the activity cell. */
|
|
41
|
-
export declare const TEAM_GAP_CELLS = 2;
|
|
42
|
-
/**
|
|
43
|
-
* The description column's floor: below this the row is unreadable, so the
|
|
44
|
-
* activity cell gives way instead (`activityDropCols`).
|
|
45
|
-
*/
|
|
46
|
-
export declare const TEAM_MIN_DESCRIPTION_CELLS = 12;
|
|
47
|
-
export interface TeamRowGeometry {
|
|
48
|
-
marker: number;
|
|
49
|
-
label: number;
|
|
50
|
-
gap: number;
|
|
51
|
-
activity: number;
|
|
52
|
-
clock: number;
|
|
53
|
-
/** The description column's reserved MINIMUM; the real width comes from flex. */
|
|
54
|
-
minDescription: number;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* How many characters the activity cell may spend at this width.
|
|
58
|
-
*
|
|
59
|
-
* `TEAM_LIMITS.activityChars` is a STORAGE ceiling; a terminal has a COLUMN
|
|
60
|
-
* budget, and the two are not the same number. Below
|
|
61
|
-
* `TEAM_LIMITS.activityDropCols` the cell gives way ENTIRELY (returns 0) rather
|
|
62
|
-
* than shrinking to its 12-character floor: at 40 columns those twelve characters
|
|
63
|
-
* would push the description below its own floor, and "who is doing what" outranks
|
|
64
|
-
* "what they are writing right now" exactly when there is room for one of them.
|
|
65
|
-
* That is a semantic change to a shipped assertion (`activityBudget(40)` used to
|
|
66
|
-
* return 12) and is recorded in the spec's §10 collateral table.
|
|
67
|
-
*
|
|
68
|
-
* `markerCells` defaults to the Unicode tier so the three existing single-argument
|
|
69
|
-
* call sites keep compiling; the panel passes the real tier's width.
|
|
70
|
-
*/
|
|
71
|
-
export declare function activityBudget(cols: number, markerCells?: number): number;
|
|
72
|
-
/**
|
|
73
|
-
* The row's cell widths. A TOTAL function: every cell is a non-negative integer
|
|
74
|
-
* and the five of them never sum past `cols`, for any `cols >= 0` and either
|
|
75
|
-
* glyph tier (I-3, `team-row-geometry.test.ts`'s property test).
|
|
76
|
-
*
|
|
77
|
-
* THE LADDER IS THE SPECIFICATION (§4.2.2), in the order the cells give way:
|
|
78
|
-
* 1. a wide enough terminal gets the business budget;
|
|
79
|
-
* 2. below `activityDropCols` the activity cell is 0;
|
|
80
|
-
* 3. description still negative -> the gap goes;
|
|
81
|
-
* 4. still negative -> the label shrinks to `max(3, cols - marker - clock)`;
|
|
82
|
-
* 5. still negative -> the clock shrinks (`cols < marker + 3 + clock`);
|
|
83
|
-
* 6. the residue (a terminal narrower than the marker itself) is clamped so the
|
|
84
|
-
* sum stays inside `cols` — unreachable on a real device, where native mode
|
|
85
|
-
* degrades to the placeholder below 40x12, but the function is total because
|
|
86
|
-
* the property test runs `cols = 1..400`.
|
|
87
|
-
*/
|
|
88
|
-
export declare function teamRowGeometry(cols: number, glyphs: Glyphs): TeamRowGeometry;
|
|
89
|
-
/**
|
|
90
|
-
* The clock cell's text: this child's elapsed time, or empty when it never
|
|
91
|
-
* started (a `queued` row has no clock to show, and `0ms` would be a lie).
|
|
92
|
-
*/
|
|
93
|
-
export declare function teamClockText(run: SubagentRun, at: number): string;
|
|
94
|
-
/** The past-tense word the supervisor badge and status line render. */
|
|
95
|
-
export declare function interventionWord(action: OverseerAction): string;
|
|
96
|
-
/**
|
|
97
|
-
* The row's supervisor badge (subagent-overseer-v2 AC-5): what the supervisor
|
|
98
|
-
* last did to THIS child and how long ago, e.g. `nudged 2m03s`.
|
|
99
|
-
*
|
|
100
|
-
* `lastIntervention.at` is ABSOLUTE epoch ms (R-P2-3), the same units as
|
|
101
|
-
* `startedAt`, so this is one subtraction - no second clock convention.
|
|
102
|
-
*/
|
|
103
|
-
export declare function overseerBadge(run: SubagentRun, at: number): string;
|
|
104
|
-
/**
|
|
105
|
-
* The middle cell: what this child is doing right now, in a few words.
|
|
106
|
-
*
|
|
107
|
-
* Two width policies, answering different questions. `wide` decides WHICH FACT to
|
|
108
|
-
* show - a whole path or its basename, a whole command line or its program name -
|
|
109
|
-
* mirroring `StatusBar`'s `statusCompactCols` degradation rather than inventing a
|
|
110
|
-
* second threshold. `activityBudget(cols)` decides HOW MUCH OF IT FITS, and it is
|
|
111
|
-
* a continuous function of width rather than a threshold, because the failure it
|
|
112
|
-
* prevents - a row wider than the terminal - is continuous.
|
|
113
|
-
*/
|
|
114
|
-
export declare function activityLine(run: SubagentRun, cols: number, markerCells?: number): string;
|
|
115
|
-
/**
|
|
116
|
-
* The activity cell WITH the badge composed in (AC-5 / risk table): the badge
|
|
117
|
-
* rides the SAME allocation the prose uses, so a row can never grow past its
|
|
118
|
-
* terminal; on a narrow terminal the badge degrades to the action word alone -
|
|
119
|
-
* the who-acted fact outranks the what-they-are-doing tail exactly when there is
|
|
120
|
-
* room for only one.
|
|
121
|
-
*/
|
|
122
|
-
export declare function activityWithBadge(run: SubagentRun, cols: number, at: number, markerCells?: number): string;
|
|
123
|
-
/** The five text fragments of one row, each already clamped to its cell's policy. */
|
|
124
|
-
export interface TeamRowCells {
|
|
125
|
-
marker: string;
|
|
126
|
-
label: string;
|
|
127
|
-
description: string;
|
|
128
|
-
activity: string;
|
|
129
|
-
clock: string;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* The five text fragments of one row.
|
|
133
|
-
*
|
|
134
|
-
* The description is normalized here rather than in the component because
|
|
135
|
-
* truncation preserves explicit newlines and the band reserves exactly ONE row
|
|
136
|
-
* for a child: a description carrying a newline would make the row two rows tall
|
|
137
|
-
* and every row below it would land one row lower than `band.teamRows` allows.
|
|
138
|
-
*/
|
|
139
|
-
export declare function teamRowCells(run: SubagentRun, cols: number, at: number, glyphs: Glyphs): TeamRowCells;
|