@aragon-agent/cli 0.6.47 → 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 +13 -0
- package/README.md +27 -6
- package/dist/agent/coalesce.d.ts +1 -1
- package/dist/agent/controller.d.ts +21 -21
- package/dist/agent/controller.js +13 -13
- 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/{ui → app}/App.d.ts +9 -9
- package/dist/{ui → app}/App.js +79 -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 +29 -29
- 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 +6 -6
- 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 +1 -1
- package/dist/proc/readiness.js +1 -1
- package/dist/proc/supervisor.d.ts +1 -1
- package/dist/proc/supervisor.js +3 -3
- package/dist/proc/wait.d.ts +1 -1
- package/dist/proc/wait.js +1 -1
- 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/clear-archive.d.ts +2 -2
- package/dist/session/persist.d.ts +2 -2
- package/dist/session/persist.js +1 -1
- package/dist/session/startup-session.d.ts +2 -2
- package/dist/session/validate-session.js +3 -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 +2 -2
- package/dist/tools/job-tools.js +4 -4
- 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 -857
- package/dist/agent/reducer.js +0 -1646
- 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 -1383
- 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 -214
- package/dist/proc/limits.js +0 -221
- package/dist/proc/progress.d.ts +0 -47
- package/dist/proc/progress.js +0 -163
- package/dist/proc/types.d.ts +0 -269
- package/dist/proc/types.js +0 -15
- package/dist/proc/wait-view.d.ts +0 -65
- package/dist/proc/wait-view.js +0 -66
- 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 -51
- 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 -130
- 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 -258
- 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 -169
- 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/entries/WaitCard.d.ts +0 -37
- package/dist/ui/entries/WaitCard.js +0 -92
- 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 -84
- package/dist/ui/interaction-copy.js +0 -41
- 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 -140
- package/dist/ui/layout/status-layout.js +0 -262
- 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 -494
- package/dist/ui/layout/wait-bar.d.ts +0 -34
- package/dist/ui/layout/wait-bar.js +0 -48
- 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 -63
- 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 -130
- 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,206 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The header's LEFT half budget (tui-shortcut-drawer-and-task-summary §4.3).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY: `src/ui/**` is inside the glyph scanner's scope.
|
|
5
|
-
*
|
|
6
|
-
* WHY A PLANNER (the same argument `header-hints.ts` makes one file over): the
|
|
7
|
-
* left half used to be a `<Text wrap="truncate">` over four clauses with no
|
|
8
|
-
* clause-level arithmetic anywhere, so the only thing that ever decided what got
|
|
9
|
-
* cut was the terminal. Adding a fifth clause - the task summary - to that shape
|
|
10
|
-
* produces a header where the summary silently eats the directory name on an
|
|
11
|
-
* 80-column terminal and NO ASSERTION WOULD SEE IT, because losing trailing
|
|
12
|
-
* characters is invisible to a snapshot test.
|
|
13
|
-
*
|
|
14
|
-
* THE PRIORITY ORDER IS THE DESIGN: brand, then `provider:model`, then cwd, then
|
|
15
|
-
* the summary, with the key symbol reserved up front. The summary is the only
|
|
16
|
-
* clause that is allowed to disappear entirely - it is the newest and the least
|
|
17
|
-
* load-bearing (D-2) - and it is dropped rather than rendered as `...`, because a
|
|
18
|
-
* cell holding three dots spends eight columns to say nothing.
|
|
19
|
-
*/
|
|
20
|
-
import { cellWidth, fitCells } from './cells.js';
|
|
21
|
-
import { TASK_SUMMARY_LIMITS } from '../../fast/limits.js';
|
|
22
|
-
export const HEADER_LEFT_LIMITS = {
|
|
23
|
-
/** The `AragonAgent` word mark, the same 13 `header-hints.ts` documents. */
|
|
24
|
-
brandCells: 13,
|
|
25
|
-
/** Blank cells between two left clauses. */
|
|
26
|
-
gapCells: 2,
|
|
27
|
-
/** The has-key symbol (1 cell) plus its gap, always reserved. */
|
|
28
|
-
keyCells: 3,
|
|
29
|
-
/** Below this the model clause is dropped rather than rendered as `a...`. */
|
|
30
|
-
modelMinCells: 8,
|
|
31
|
-
/** Below this the cwd clause is dropped. */
|
|
32
|
-
cwdMinCells: 8,
|
|
33
|
-
/** Below this the summary is dropped instead of rendered as `...`. */
|
|
34
|
-
summaryMinCells: 8,
|
|
35
|
-
/**
|
|
36
|
-
* The separator that belongs to the SUMMARY rather than to the general gap:
|
|
37
|
-
* two spaces, the mid dot and one space. It is reserved together with the label
|
|
38
|
-
* so a summary can never be drawn without its dot, or the dot without it.
|
|
39
|
-
*/
|
|
40
|
-
summaryGapCells: 4,
|
|
41
|
-
};
|
|
42
|
-
/** `provider:model`, the clause `Header` prints after the word mark. */
|
|
43
|
-
export function modelClause(provider, model) {
|
|
44
|
-
return `${provider}:${model}`;
|
|
45
|
-
}
|
|
46
|
-
/** The directory name, falling back to the whole path for a bare root. */
|
|
47
|
-
export function cwdClause(cwd, basename) {
|
|
48
|
-
return basename(cwd) || cwd;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Allocate the left half.
|
|
52
|
-
*
|
|
53
|
-
* THE ORDER OF THE FOUR STEPS IS THE PRIORITY (D-2):
|
|
54
|
-
* 1. reserve the word mark, its gap and the key symbol - they are never cut;
|
|
55
|
-
* 2. `provider:model`, down to `modelMinCells`, then dropped;
|
|
56
|
-
* 3. cwd, down to `cwdMinCells`, then dropped;
|
|
57
|
-
* 4. the summary, capped at `TASK_SUMMARY_LIMITS.maxCells`, dropped below
|
|
58
|
-
* `summaryMinCells` and reported as `narrow`.
|
|
59
|
-
*
|
|
60
|
-
* THE LADDER IS EXPLICIT RATHER THAN GREEDY, and that is a correction to v2's
|
|
61
|
-
* algorithm, which funded the summary out of the reserved budget and could therefore
|
|
62
|
-
* show a label on a row where the model name had already been dropped. Four
|
|
63
|
-
* presence sets are tried from most to least complete; within a set the LAST clause
|
|
64
|
-
* gives way first, each only down to its own minimum. The first set that fits wins.
|
|
65
|
-
*
|
|
66
|
-
* Every returned text already MEASURES its reported width, so `Header` renders
|
|
67
|
-
* cells rather than hoping for them.
|
|
68
|
-
*/
|
|
69
|
-
export function planHeaderLeft(input) {
|
|
70
|
-
const leftCells = Number.isFinite(input.leftCells) ? Math.max(0, Math.floor(input.leftCells)) : 0;
|
|
71
|
-
const empty = {
|
|
72
|
-
text: { model: '', cwd: '', summary: '' },
|
|
73
|
-
cells: { model: 0, cwd: 0, summary: 0 },
|
|
74
|
-
summaryReason: input.summaryEnabled ? 'empty' : 'disabled',
|
|
75
|
-
};
|
|
76
|
-
const gap = HEADER_LEFT_LIMITS.gapCells;
|
|
77
|
-
// Everything the planner never touches, taken off the top so no later step can
|
|
78
|
-
// borrow from it.
|
|
79
|
-
// `keyCells` already contains the gap before the symbol, so this is the whole fixed
|
|
80
|
-
// cost and every clause below pays its own gap.
|
|
81
|
-
const budget = leftCells - HEADER_LEFT_LIMITS.brandCells - HEADER_LEFT_LIMITS.keyCells;
|
|
82
|
-
if (budget <= 0) {
|
|
83
|
-
return {
|
|
84
|
-
...empty,
|
|
85
|
-
summaryReason: input.summaryEnabled
|
|
86
|
-
? (input.summary === null ? 'empty' : 'narrow')
|
|
87
|
-
: 'disabled',
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
const model = modelClause(input.provider, input.model);
|
|
91
|
-
const summaryText = input.summary?.text ?? '';
|
|
92
|
-
const wantsSummary = input.summaryEnabled && input.summary !== null;
|
|
93
|
-
/** Desired width and the floor this clause may be cut to. */
|
|
94
|
-
const clause = (text, floor) => ({
|
|
95
|
-
want: cellWidth(text),
|
|
96
|
-
floor: Math.min(cellWidth(text), floor),
|
|
97
|
-
});
|
|
98
|
-
const modelWanted = clause(model, HEADER_LEFT_LIMITS.modelMinCells);
|
|
99
|
-
const cwdWanted = clause(input.cwd, HEADER_LEFT_LIMITS.cwdMinCells);
|
|
100
|
-
const summaryWanted = {
|
|
101
|
-
want: Math.min(cellWidth(summaryText), TASK_SUMMARY_LIMITS.maxCells),
|
|
102
|
-
// A label is never shown below its minimum: a three-cell label is a fragment,
|
|
103
|
-
// not a label, and the cell is dropped instead.
|
|
104
|
-
floor: HEADER_LEFT_LIMITS.summaryMinCells,
|
|
105
|
-
};
|
|
106
|
-
const sets = [
|
|
107
|
-
['model', 'cwd', ...(wantsSummary ? ['summary'] : [])],
|
|
108
|
-
['model', 'cwd'],
|
|
109
|
-
['model'],
|
|
110
|
-
[],
|
|
111
|
-
];
|
|
112
|
-
const wanted = { model: modelWanted, cwd: cwdWanted, summary: summaryWanted };
|
|
113
|
-
for (const set of sets) {
|
|
114
|
-
const assigned = fitClauses(set, wanted, budget, gap);
|
|
115
|
-
if (assigned === null)
|
|
116
|
-
continue;
|
|
117
|
-
const modelCells = assigned.model ?? 0;
|
|
118
|
-
const cwdCells = assigned.cwd ?? 0;
|
|
119
|
-
const summaryCells = assigned.summary ?? 0;
|
|
120
|
-
let summaryReason = 'empty';
|
|
121
|
-
if (!input.summaryEnabled)
|
|
122
|
-
summaryReason = 'disabled';
|
|
123
|
-
else if (input.summary === null)
|
|
124
|
-
summaryReason = 'empty';
|
|
125
|
-
else if (summaryCells === 0)
|
|
126
|
-
summaryReason = 'narrow';
|
|
127
|
-
else
|
|
128
|
-
summaryReason = 'ok';
|
|
129
|
-
return {
|
|
130
|
-
text: {
|
|
131
|
-
model: modelCells > 0 ? fitCells(model, modelCells, input.ellipsis) : '',
|
|
132
|
-
cwd: cwdCells > 0 ? fitCells(input.cwd, cwdCells, input.ellipsis) : '',
|
|
133
|
-
summary: summaryCells > 0 ? fitCells(summaryText, summaryCells, input.ellipsis) : '',
|
|
134
|
-
},
|
|
135
|
-
cells: { model: modelCells, cwd: cwdCells, summary: summaryCells },
|
|
136
|
-
summaryReason,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
return empty;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Fit one presence set into `budget`, cutting from the LAST clause inward.
|
|
143
|
-
*
|
|
144
|
-
* Returns `null` when the set cannot fit even at every clause's floor, which is the
|
|
145
|
-
* signal to try the next (smaller) set. `null` rather than a partial result because
|
|
146
|
-
* "the summary was dropped" and "the summary does not fit" must be the same fact to
|
|
147
|
-
* the caller, and only the set composition may express it.
|
|
148
|
-
*/
|
|
149
|
-
function fitClauses(set, wanted, budget, gap) {
|
|
150
|
-
const widths = { model: 0, cwd: 0, summary: 0 };
|
|
151
|
-
let cost = 0;
|
|
152
|
-
for (const key of set) {
|
|
153
|
-
widths[key] = wanted[key].want;
|
|
154
|
-
// EVERY CLAUSE PAYS ITS OWN SEPARATOR, including the first: the row renders
|
|
155
|
-
// `word mark, gap, clause, gap, clause, gap, key`, so a one-clause plan still
|
|
156
|
-
// spends a gap on each side of that clause.
|
|
157
|
-
cost += (key === 'summary' ? HEADER_LEFT_LIMITS.summaryGapCells : gap)
|
|
158
|
-
+ wanted[key].want;
|
|
159
|
-
}
|
|
160
|
-
let excess = cost - budget;
|
|
161
|
-
for (let index = set.length - 1; index >= 0 && excess > 0; index -= 1) {
|
|
162
|
-
const key = set[index];
|
|
163
|
-
const room = widths[key] - wanted[key].floor;
|
|
164
|
-
if (room <= 0)
|
|
165
|
-
continue;
|
|
166
|
-
const cut = Math.min(room, excess);
|
|
167
|
-
widths[key] -= cut;
|
|
168
|
-
excess -= cut;
|
|
169
|
-
}
|
|
170
|
-
return excess > 0 ? null : widths;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Cells the plan actually spends, for the row invariant:
|
|
174
|
-
* `brand + gap + model + gap + cwd + gap + summary + key <= leftCells`.
|
|
175
|
-
*
|
|
176
|
-
* Exported so `header-left.test.ts` can assert the inequality against the SAME
|
|
177
|
-
* arithmetic the renderer uses instead of re-deriving it in the test (which is how
|
|
178
|
-
* the two drift apart).
|
|
179
|
-
*/
|
|
180
|
-
export function planHeaderLeftCells(plan) {
|
|
181
|
-
const { gapCells, brandCells, keyCells, summaryGapCells } = HEADER_LEFT_LIMITS;
|
|
182
|
-
// The word mark and the key symbol are always drawn; every clause pays its own gap.
|
|
183
|
-
// The gap before the key is INSIDE `keyCells`, so it is counted once here and never
|
|
184
|
-
// again after a clause - the double count that made a one-clause plan read two cells
|
|
185
|
-
// wider than it renders.
|
|
186
|
-
let cells = brandCells + keyCells;
|
|
187
|
-
if (plan.cells.model > 0)
|
|
188
|
-
cells += gapCells + plan.cells.model;
|
|
189
|
-
if (plan.cells.cwd > 0)
|
|
190
|
-
cells += gapCells + plan.cells.cwd;
|
|
191
|
-
// The summary's separator carries the dot, so it is wider than the general gap.
|
|
192
|
-
if (plan.cells.summary > 0)
|
|
193
|
-
cells += summaryGapCells + plan.cells.summary;
|
|
194
|
-
return cells;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* The fixed cells a plan needs before any clause can appear: the word mark plus the
|
|
198
|
-
* key symbol and its gap.
|
|
199
|
-
*
|
|
200
|
-
* Below this the row does not "spend too much", it simply cannot show a clause - the
|
|
201
|
-
* renderer truncates the overflow and `Header`'s own `wrap="truncate"` keeps that from
|
|
202
|
-
* spilling. Stating it as a constant keeps the invariant in the tests honest:
|
|
203
|
-
* `planHeaderLeftCells(plan) <= max(leftCells, HEADER_LEFT_BASELINE)`.
|
|
204
|
-
*/
|
|
205
|
-
export const HEADER_LEFT_BASELINE = HEADER_LEFT_LIMITS.brandCells
|
|
206
|
-
+ HEADER_LEFT_LIMITS.keyCells;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Invocation card layout (tui-invocation-cards section 3.7): what a `user` entry that
|
|
3
|
-
* carries an `invocation` says, as pure data. No Ink, no React. ASCII ONLY.
|
|
4
|
-
*
|
|
5
|
-
* THE CARD'S HEIGHT IS A FUNCTION OF ITS DATA AND THE USABLE WIDTH (I-4).
|
|
6
|
-
* `InvocationCard.tsx` renders exactly the rows `invocationCardRows` counts, and both
|
|
7
|
-
* read `INVOCATION_LIMITS` plus the one `invocationInputText` below - an estimate that
|
|
8
|
-
* disagrees with the painter is permanent, because an over-estimated entry is never
|
|
9
|
-
* mounted and so never measured (see `virtual-window.ts`).
|
|
10
|
-
*/
|
|
11
|
-
import type { InvocationCard } from '../../agent/invocation-card.js';
|
|
12
|
-
import type { Glyphs } from '../glyphs.js';
|
|
13
|
-
/** Colour slots the component maps onto the theme; kept local so this file needs no `Theme`. */
|
|
14
|
-
export type InvocationTone = 'label' | 'name' | 'muted';
|
|
15
|
-
export interface InvocationSegment {
|
|
16
|
-
text: string;
|
|
17
|
-
tone: InvocationTone;
|
|
18
|
-
bold: boolean;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* The header row, already fitted to `usable` columns (RV-10). Narrow terminals drop
|
|
22
|
-
* facts from the right WHOLE before anything else is cut; only when the identity alone
|
|
23
|
-
* is too wide is the name shortened. Ink's `wrap="truncate"` stays on the row as a
|
|
24
|
-
* backstop, but it is never what produces the visible ellipsis.
|
|
25
|
-
*/
|
|
26
|
-
export declare function invocationHeaderSegments(card: InvocationCard, glyphs: Glyphs, usable: number): InvocationSegment[];
|
|
27
|
-
/** The text painted for `input`: tabs expanded per line, the same rule `UserEntry` follows. */
|
|
28
|
-
export declare function invocationInputText(card: InvocationCard): string;
|
|
29
|
-
/** Singular/plural for the hidden-characters tail. */
|
|
30
|
-
export declare function invocationHiddenText(card: InvocationCard, glyphs: Glyphs): string;
|
|
31
|
-
/**
|
|
32
|
-
* Rows the card occupies at `usable` columns. `wrappedRows` is injected by the caller
|
|
33
|
-
* (`virtual-window.ts` owns the one wrapping rule) so this file stays import-cycle free.
|
|
34
|
-
*/
|
|
35
|
-
export declare function invocationCardRows(card: InvocationCard, usable: number, wrappedRows: (text: string, usable: number) => number): number;
|
|
36
|
-
/**
|
|
37
|
-
* The lines the exit replay / export prints UNDER the command line (section 2.4):
|
|
38
|
-
* a bracketed fact line, and the disclosure note when there is one. Plain ASCII
|
|
39
|
-
* separators - the replay is pasted into issues and must survive any terminal.
|
|
40
|
-
*/
|
|
41
|
-
export declare function invocationCardLines(card: InvocationCard): string[];
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Invocation card layout (tui-invocation-cards section 3.7): what a `user` entry that
|
|
3
|
-
* carries an `invocation` says, as pure data. No Ink, no React. ASCII ONLY.
|
|
4
|
-
*
|
|
5
|
-
* THE CARD'S HEIGHT IS A FUNCTION OF ITS DATA AND THE USABLE WIDTH (I-4).
|
|
6
|
-
* `InvocationCard.tsx` renders exactly the rows `invocationCardRows` counts, and both
|
|
7
|
-
* read `INVOCATION_LIMITS` plus the one `invocationInputText` below - an estimate that
|
|
8
|
-
* disagrees with the painter is permanent, because an over-estimated entry is never
|
|
9
|
-
* mounted and so never measured (see `virtual-window.ts`).
|
|
10
|
-
*/
|
|
11
|
-
import { expandTabs } from '../display-tab.js';
|
|
12
|
-
import { cellWidth, fitCells } from './cells.js';
|
|
13
|
-
/** Two spaces between the identity (`skill . pdf-forms`) and the facts. */
|
|
14
|
-
const FACT_GAP = ' ';
|
|
15
|
-
function seg(text, tone, bold = false) {
|
|
16
|
-
return { text, tone, bold };
|
|
17
|
-
}
|
|
18
|
-
function segmentsWidth(segments) {
|
|
19
|
-
return segments.reduce((sum, part) => sum + cellWidth(part.text), 0);
|
|
20
|
-
}
|
|
21
|
-
function identitySegments(card, glyphs, name) {
|
|
22
|
-
const parts = [seg(card.variant, 'label', true)];
|
|
23
|
-
if (name !== '')
|
|
24
|
-
parts.push(seg(` ${glyphs.midDot} `, 'muted'), seg(name, 'name', true));
|
|
25
|
-
return parts;
|
|
26
|
-
}
|
|
27
|
-
function factSegments(facts, glyphs) {
|
|
28
|
-
if (facts.length === 0)
|
|
29
|
-
return [];
|
|
30
|
-
const parts = [seg(FACT_GAP, 'muted')];
|
|
31
|
-
facts.forEach((fact, index) => {
|
|
32
|
-
if (index > 0)
|
|
33
|
-
parts.push(seg(` ${glyphs.midDot} `, 'muted'));
|
|
34
|
-
parts.push(seg(fact, 'muted'));
|
|
35
|
-
});
|
|
36
|
-
return parts;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* The header row, already fitted to `usable` columns (RV-10). Narrow terminals drop
|
|
40
|
-
* facts from the right WHOLE before anything else is cut; only when the identity alone
|
|
41
|
-
* is too wide is the name shortened. Ink's `wrap="truncate"` stays on the row as a
|
|
42
|
-
* backstop, but it is never what produces the visible ellipsis.
|
|
43
|
-
*/
|
|
44
|
-
export function invocationHeaderSegments(card, glyphs, usable) {
|
|
45
|
-
const width = Math.max(1, Math.floor(usable));
|
|
46
|
-
for (let kept = card.facts.length; kept >= 0; kept -= 1) {
|
|
47
|
-
const candidate = [
|
|
48
|
-
...identitySegments(card, glyphs, card.name),
|
|
49
|
-
...factSegments(card.facts.slice(0, kept), glyphs),
|
|
50
|
-
];
|
|
51
|
-
if (segmentsWidth(candidate) <= width)
|
|
52
|
-
return candidate;
|
|
53
|
-
}
|
|
54
|
-
const head = identitySegments(card, glyphs, '');
|
|
55
|
-
const room = width - segmentsWidth(head) - cellWidth(` ${glyphs.midDot} `);
|
|
56
|
-
if (card.name !== '' && room > 1) {
|
|
57
|
-
return identitySegments(card, glyphs, fitCells(card.name, room, glyphs.ellipsis));
|
|
58
|
-
}
|
|
59
|
-
return [seg(fitCells(card.variant, width, glyphs.ellipsis), 'label', true)];
|
|
60
|
-
}
|
|
61
|
-
/** The text painted for `input`: tabs expanded per line, the same rule `UserEntry` follows. */
|
|
62
|
-
export function invocationInputText(card) {
|
|
63
|
-
return card.input.split('\n').map((line) => expandTabs(line)).join('\n');
|
|
64
|
-
}
|
|
65
|
-
/** Singular/plural for the hidden-characters tail. */
|
|
66
|
-
export function invocationHiddenText(card, glyphs) {
|
|
67
|
-
const unit = card.inputHidden === 1 ? 'char' : 'chars';
|
|
68
|
-
return `${glyphs.ellipsis} +${card.inputHidden} ${unit} not shown`;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Rows the card occupies at `usable` columns. `wrappedRows` is injected by the caller
|
|
72
|
-
* (`virtual-window.ts` owns the one wrapping rule) so this file stays import-cycle free.
|
|
73
|
-
*/
|
|
74
|
-
export function invocationCardRows(card, usable, wrappedRows) {
|
|
75
|
-
const inputRows = card.input === '' ? 0 : wrappedRows(invocationInputText(card), usable);
|
|
76
|
-
return 1 + inputRows + (card.inputHidden > 0 ? 1 : 0) + (card.note ? 1 : 0);
|
|
77
|
-
}
|
|
78
|
-
const REPLAY_INDENT = ' ';
|
|
79
|
-
/**
|
|
80
|
-
* The lines the exit replay / export prints UNDER the command line (section 2.4):
|
|
81
|
-
* a bracketed fact line, and the disclosure note when there is one. Plain ASCII
|
|
82
|
-
* separators - the replay is pasted into issues and must survive any terminal.
|
|
83
|
-
*/
|
|
84
|
-
export function invocationCardLines(card) {
|
|
85
|
-
const identity = card.name === '' ? card.variant : `${card.variant} ${card.name}`;
|
|
86
|
-
const detail = card.facts.length === 0 ? identity : `${identity} ${card.facts.join(' - ')}`;
|
|
87
|
-
const lines = [`${REPLAY_INDENT}[${detail}]`];
|
|
88
|
-
if (card.note)
|
|
89
|
-
lines.push(`${REPLAY_INDENT}${card.note}`);
|
|
90
|
-
return lines;
|
|
91
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The status bar's kit chip: pure width planning, no JSX
|
|
3
|
-
* (agent-model-kits §4.8 / D-12).
|
|
4
|
-
*
|
|
5
|
-
* ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`.
|
|
6
|
-
*
|
|
7
|
-
* WHY A PLANNER, AND WHY IT IS THE SAME SHAPE AS `session-chip.ts`: the status
|
|
8
|
-
* row is measured cell by cell, and anything appended "just to the right" eats
|
|
9
|
-
* `phase` - the one field a user needs while a run is in flight. The chip
|
|
10
|
-
* therefore competes for the SAME budget as every other field, and the rung that
|
|
11
|
-
* survives is computed rather than hand-tuned.
|
|
12
|
-
*
|
|
13
|
-
* ONE COMPARISON, NOT A THRESHOLD TABLE: `columns - (cells + gap) >=
|
|
14
|
-
* minStatusCells`. The width table in the spec is what that comparison WORKS
|
|
15
|
-
* OUT TO. `minStatusCells` is deliberately the same 34 as the session chip's -
|
|
16
|
-
* both answer "how much room must the left half keep", and two numbers for one
|
|
17
|
-
* question is how a "fit" and a "don't fit" end up disagreeing.
|
|
18
|
-
*/
|
|
19
|
-
export declare const KIT_CHIP_LIMITS: {
|
|
20
|
-
/** Blank cells between the chip and the field run. */
|
|
21
|
-
readonly gapCells: 2;
|
|
22
|
-
/** The floor the left half must keep; asserted equal to the session chip's. */
|
|
23
|
-
readonly minStatusCells: 34;
|
|
24
|
-
/** Below this the `kit` label is dropped before the name is shortened. */
|
|
25
|
-
readonly labelMinCols: 72;
|
|
26
|
-
/** The shortest unique prefix worth showing; below it the chip hides. */
|
|
27
|
-
readonly minNameChars: 4;
|
|
28
|
-
};
|
|
29
|
-
export interface KitChipPlan {
|
|
30
|
-
visible: boolean;
|
|
31
|
-
text: string;
|
|
32
|
-
cells: number;
|
|
33
|
-
gap: number;
|
|
34
|
-
}
|
|
35
|
-
export interface KitChipInput {
|
|
36
|
-
columns: number;
|
|
37
|
-
/**
|
|
38
|
-
* The kit in effect, or absent/null when there is none.
|
|
39
|
-
*
|
|
40
|
-
* ABSENT IS NOT EMPTY: with no kit the plan is hidden and the row's output is
|
|
41
|
-
* byte-identical to the pre-feature build (I-9).
|
|
42
|
-
*/
|
|
43
|
-
kit?: {
|
|
44
|
-
name: string;
|
|
45
|
-
modified: boolean;
|
|
46
|
-
otherNames: readonly string[];
|
|
47
|
-
} | null | undefined;
|
|
48
|
-
}
|
|
49
|
-
/** Plan the chip for `columns` and this session's kit. */
|
|
50
|
-
export declare function planKitChip(input: KitChipInput): KitChipPlan;
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The status bar's kit chip: pure width planning, no JSX
|
|
3
|
-
* (agent-model-kits §4.8 / D-12).
|
|
4
|
-
*
|
|
5
|
-
* ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`.
|
|
6
|
-
*
|
|
7
|
-
* WHY A PLANNER, AND WHY IT IS THE SAME SHAPE AS `session-chip.ts`: the status
|
|
8
|
-
* row is measured cell by cell, and anything appended "just to the right" eats
|
|
9
|
-
* `phase` - the one field a user needs while a run is in flight. The chip
|
|
10
|
-
* therefore competes for the SAME budget as every other field, and the rung that
|
|
11
|
-
* survives is computed rather than hand-tuned.
|
|
12
|
-
*
|
|
13
|
-
* ONE COMPARISON, NOT A THRESHOLD TABLE: `columns - (cells + gap) >=
|
|
14
|
-
* minStatusCells`. The width table in the spec is what that comparison WORKS
|
|
15
|
-
* OUT TO. `minStatusCells` is deliberately the same 34 as the session chip's -
|
|
16
|
-
* both answer "how much room must the left half keep", and two numbers for one
|
|
17
|
-
* question is how a "fit" and a "don't fit" end up disagreeing.
|
|
18
|
-
*/
|
|
19
|
-
import stringWidth from 'string-width';
|
|
20
|
-
export const KIT_CHIP_LIMITS = {
|
|
21
|
-
/** Blank cells between the chip and the field run. */
|
|
22
|
-
gapCells: 2,
|
|
23
|
-
/** The floor the left half must keep; asserted equal to the session chip's. */
|
|
24
|
-
minStatusCells: 34,
|
|
25
|
-
/** Below this the `kit` label is dropped before the name is shortened. */
|
|
26
|
-
labelMinCols: 72,
|
|
27
|
-
/** The shortest unique prefix worth showing; below it the chip hides. */
|
|
28
|
-
minNameChars: 4,
|
|
29
|
-
};
|
|
30
|
-
const HIDDEN = { visible: false, text: '', cells: 0, gap: 0 };
|
|
31
|
-
/** The shortest prefix of `name` that no sibling name also starts with. */
|
|
32
|
-
function uniqueLength(name, others) {
|
|
33
|
-
const points = [...name];
|
|
34
|
-
const start = Math.min(KIT_CHIP_LIMITS.minNameChars, points.length);
|
|
35
|
-
const shared = (length) => {
|
|
36
|
-
const prefix = points.slice(0, length).join('');
|
|
37
|
-
return others.some((other) => [...other].slice(0, length).join('') === prefix);
|
|
38
|
-
};
|
|
39
|
-
let length = start;
|
|
40
|
-
while (length < points.length && shared(length))
|
|
41
|
-
length += 1;
|
|
42
|
-
return Math.max(length, start);
|
|
43
|
-
}
|
|
44
|
-
/** Plan the chip for `columns` and this session's kit. */
|
|
45
|
-
export function planKitChip(input) {
|
|
46
|
-
const kit = input.kit;
|
|
47
|
-
if (!kit)
|
|
48
|
-
return HIDDEN;
|
|
49
|
-
const name = kit.name.trim();
|
|
50
|
-
if (!name)
|
|
51
|
-
return HIDDEN;
|
|
52
|
-
const columns = Number.isFinite(input.columns) ? Math.floor(input.columns) : 80;
|
|
53
|
-
const gap = KIT_CHIP_LIMITS.gapCells;
|
|
54
|
-
const fits = (text) => columns - (stringWidth(text) + gap) >= KIT_CHIP_LIMITS.minStatusCells;
|
|
55
|
-
const mark = kit.modified ? '~' : '';
|
|
56
|
-
const plan = (text) => ({ visible: true, text, cells: stringWidth(text), gap });
|
|
57
|
-
// Widest rung first, then drop the label, then shorten the name, then hide.
|
|
58
|
-
// THE ORDER IS THE DECISION: a reader cares WHICH kit is in effect before they
|
|
59
|
-
// care that it is a kit, so the name is the last thing to go.
|
|
60
|
-
//
|
|
61
|
-
// `KIT_CHIP_LIMITS.labelMinCols` NEEDS NO BRANCH: a labelled rung is 45 cells
|
|
62
|
-
// for a 40-character name, so `fits` already rejects it below ~81 columns. The
|
|
63
|
-
// constant is the documented intent (labels belong to wide rows), measured
|
|
64
|
-
// rather than hard-coded into the ladder.
|
|
65
|
-
const points = [...name];
|
|
66
|
-
const shortest = uniqueLength(name, kit.otherNames);
|
|
67
|
-
const rungs = [];
|
|
68
|
-
if (kit.modified)
|
|
69
|
-
rungs.push(`kit ${name}~`);
|
|
70
|
-
rungs.push(`kit ${name}`);
|
|
71
|
-
if (kit.modified)
|
|
72
|
-
rungs.push(`${name}~`);
|
|
73
|
-
rungs.push(name);
|
|
74
|
-
for (let length = points.length - 1; length >= shortest; length -= 1) {
|
|
75
|
-
rungs.push(`${points.slice(0, length).join('')}${mark}`);
|
|
76
|
-
}
|
|
77
|
-
for (const text of rungs)
|
|
78
|
-
if (fits(text))
|
|
79
|
-
return plan(text);
|
|
80
|
-
return HIDDEN;
|
|
81
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Overlay windowing (spec §4.4) — pure arithmetic for `OverlayFrame`.
|
|
3
|
-
*
|
|
4
|
-
* Overlays used to be dropped into `<Box overflow="hidden">` with no scrolling
|
|
5
|
-
* and no indication that anything had been cut: `/help` needs 29 rows, a 30-row
|
|
6
|
-
* terminal gave it 15, and everything from `/clear` downward was simply invisible.
|
|
7
|
-
*
|
|
8
|
-
* This does NOT reuse `ScrollViewport`. That component owns its offset in its own
|
|
9
|
-
* state as a deliberate single-source-of-truth decision, so routing an overlay
|
|
10
|
-
* through the same instance would leave the transcript parked at the overlay's
|
|
11
|
-
* offset after closing. Overlay content is finite and already in memory, so
|
|
12
|
-
* slicing an array is both cheaper and free of a second `measureElement` loop.
|
|
13
|
-
*/
|
|
14
|
-
export interface OverlayWindow {
|
|
15
|
-
/** First visible index. */
|
|
16
|
-
start: number;
|
|
17
|
-
/** How many rows are visible. */
|
|
18
|
-
visible: number;
|
|
19
|
-
total: number;
|
|
20
|
-
/** The requested offset after clamping — feed this back to keep state sane. */
|
|
21
|
-
clamped: number;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Slice `total` single-row items to a `height`-row window at `offset`.
|
|
25
|
-
*
|
|
26
|
-
* Guarantees for every input, including negative / absurd offsets and
|
|
27
|
-
* non-finite heights: `0 <= start` and `start + visible <= total` (A-2).
|
|
28
|
-
*/
|
|
29
|
-
export declare function sliceWindow(total: number, offset: number, height: number): OverlayWindow;
|
|
30
|
-
/**
|
|
31
|
-
* Visible-row budget for a self-managed (mode B) overlay list — i.e. the `limit`
|
|
32
|
-
* handed to `ink-select-input` in the model picker.
|
|
33
|
-
*
|
|
34
|
-
* A pure function rather than an inline expression because the test stack only
|
|
35
|
-
* returns rendered strings: there is no way to read a child's props back, so the
|
|
36
|
-
* only way to pin this behaviour (A-11) is to test the arithmetic directly.
|
|
37
|
-
*
|
|
38
|
-
* The 5 rows subtracted are the frame's own chrome: title, footer, the top and
|
|
39
|
-
* bottom border, and the frame's `marginTop` — which is spent out of the same
|
|
40
|
-
* budget, so leaving it out pushes the bottom border past the viewport where
|
|
41
|
-
* `overflow: hidden` silently eats it.
|
|
42
|
-
*/
|
|
43
|
-
export declare function overlayListLimit(maxRows: number): number;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Overlay windowing (spec §4.4) — pure arithmetic for `OverlayFrame`.
|
|
3
|
-
*
|
|
4
|
-
* Overlays used to be dropped into `<Box overflow="hidden">` with no scrolling
|
|
5
|
-
* and no indication that anything had been cut: `/help` needs 29 rows, a 30-row
|
|
6
|
-
* terminal gave it 15, and everything from `/clear` downward was simply invisible.
|
|
7
|
-
*
|
|
8
|
-
* This does NOT reuse `ScrollViewport`. That component owns its offset in its own
|
|
9
|
-
* state as a deliberate single-source-of-truth decision, so routing an overlay
|
|
10
|
-
* through the same instance would leave the transcript parked at the overlay's
|
|
11
|
-
* offset after closing. Overlay content is finite and already in memory, so
|
|
12
|
-
* slicing an array is both cheaper and free of a second `measureElement` loop.
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* Slice `total` single-row items to a `height`-row window at `offset`.
|
|
16
|
-
*
|
|
17
|
-
* Guarantees for every input, including negative / absurd offsets and
|
|
18
|
-
* non-finite heights: `0 <= start` and `start + visible <= total` (A-2).
|
|
19
|
-
*/
|
|
20
|
-
export function sliceWindow(total, offset, height) {
|
|
21
|
-
const t = Number.isFinite(total) ? Math.max(0, Math.floor(total)) : 0;
|
|
22
|
-
const h = Number.isFinite(height) ? Math.max(0, Math.floor(height)) : t;
|
|
23
|
-
const visible = Math.min(t, h);
|
|
24
|
-
const maxOffset = Math.max(0, t - visible);
|
|
25
|
-
const raw = Number.isFinite(offset) ? Math.floor(offset) : 0;
|
|
26
|
-
const clamped = Math.min(maxOffset, Math.max(0, raw));
|
|
27
|
-
return { start: clamped, visible, total: t, clamped };
|
|
28
|
-
}
|
|
29
|
-
/** Smallest list window worth showing before scrolling stops helping. */
|
|
30
|
-
const MIN_LIST_LIMIT = 3;
|
|
31
|
-
/** Beyond this a picker is a scroll problem, not a list problem. */
|
|
32
|
-
const MAX_LIST_LIMIT = 20;
|
|
33
|
-
/**
|
|
34
|
-
* Visible-row budget for a self-managed (mode B) overlay list — i.e. the `limit`
|
|
35
|
-
* handed to `ink-select-input` in the model picker.
|
|
36
|
-
*
|
|
37
|
-
* A pure function rather than an inline expression because the test stack only
|
|
38
|
-
* returns rendered strings: there is no way to read a child's props back, so the
|
|
39
|
-
* only way to pin this behaviour (A-11) is to test the arithmetic directly.
|
|
40
|
-
*
|
|
41
|
-
* The 5 rows subtracted are the frame's own chrome: title, footer, the top and
|
|
42
|
-
* bottom border, and the frame's `marginTop` — which is spent out of the same
|
|
43
|
-
* budget, so leaving it out pushes the bottom border past the viewport where
|
|
44
|
-
* `overflow: hidden` silently eats it.
|
|
45
|
-
*/
|
|
46
|
-
export function overlayListLimit(maxRows) {
|
|
47
|
-
if (!Number.isFinite(maxRows))
|
|
48
|
-
return MAX_LIST_LIMIT;
|
|
49
|
-
const usable = Math.floor(maxRows) - 5;
|
|
50
|
-
return Math.min(MAX_LIST_LIMIT, Math.max(MIN_LIST_LIMIT, usable));
|
|
51
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { PendingSteering } from '../../agent/queued-messages.js';
|
|
2
|
-
export interface QueueLayoutInput {
|
|
3
|
-
pending: readonly PendingSteering[];
|
|
4
|
-
columns: number;
|
|
5
|
-
terminalRows: number;
|
|
6
|
-
availableRows: number;
|
|
7
|
-
paused: boolean;
|
|
8
|
-
}
|
|
9
|
-
export interface QueueLayout {
|
|
10
|
-
rows: number;
|
|
11
|
-
title: string;
|
|
12
|
-
items: readonly {
|
|
13
|
-
queueId: string;
|
|
14
|
-
label: string;
|
|
15
|
-
}[];
|
|
16
|
-
hiddenCount: number;
|
|
17
|
-
}
|
|
18
|
-
/** One allocation drives both footer measurement and rendered rows. */
|
|
19
|
-
export declare function buildQueueLayout(input: QueueLayoutInput): QueueLayout;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import stringWidth from 'string-width';
|
|
2
|
-
import { queueSummary, truncateSummary } from '../QueueStatusRow.js';
|
|
3
|
-
/** One allocation drives both footer measurement and rendered rows. */
|
|
4
|
-
export function buildQueueLayout(input) {
|
|
5
|
-
const count = input.pending.length;
|
|
6
|
-
const limit = Math.max(0, Math.min(input.terminalRows >= 20 ? 4 : 2, Math.floor(input.availableRows)));
|
|
7
|
-
if (!count || !limit)
|
|
8
|
-
return { rows: 0, title: '', items: [], hiddenCount: count };
|
|
9
|
-
const shown = Math.min(count, Math.max(1, limit - 1));
|
|
10
|
-
const items = input.pending.slice(0, shown).map((item, index) => {
|
|
11
|
-
const prefix = `${index + 1}. `;
|
|
12
|
-
const lines = item.text.split(/\r\n|[\r\n]/).length;
|
|
13
|
-
const suffix = lines > 1 ? ` (+${lines - 1} lines)` : '';
|
|
14
|
-
return { queueId: item.queueId, label: prefix + truncateSummary(queueSummary(item.text), Math.max(0, input.columns - stringWidth(prefix + suffix)), '...') + suffix };
|
|
15
|
-
});
|
|
16
|
-
const hiddenCount = count - items.length;
|
|
17
|
-
const paused = input.paused ? ' paused' : '';
|
|
18
|
-
const hidden = hiddenCount ? ` +${hiddenCount} more` : '';
|
|
19
|
-
const title = `Queue: ${count} pending${paused}${hidden} /queue`;
|
|
20
|
-
if (limit === 1)
|
|
21
|
-
return { rows: 1,
|
|
22
|
-
title: truncateSummary(`Queue ${count} /queue ${items[0].label}`, input.columns, '...'),
|
|
23
|
-
items, hiddenCount: count - items.length };
|
|
24
|
-
return { rows: 1 + items.length, title: stringWidth(title) <= input.columns
|
|
25
|
-
? title : `Queue ${count} /queue`, items, hiddenCount };
|
|
26
|
-
}
|
package/dist/ui/layout/rail.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const TODO_RAIL_MIN_COLS = 14;
|
|
2
|
-
export declare const TODO_RAIL_MAX_COLS = 36;
|
|
3
|
-
export declare const TODO_TRANSCRIPT_MIN_COLS = 62;
|
|
4
|
-
export declare const TODO_RAIL_MIN_TOTAL_COLS: number;
|
|
5
|
-
export declare const TODO_RAIL_INDEX_MIN_COLS = 22;
|
|
6
|
-
/** Return a non-decreasing rail width; invalid or narrow terminals have no rail. */
|
|
7
|
-
export declare function todoRailWidth(cols: number): number;
|
package/dist/ui/layout/rail.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/** Responsive TODO rail widths, measured in terminal columns including chrome. */
|
|
2
|
-
const RAIL_FRACTION = 0.15;
|
|
3
|
-
export const TODO_RAIL_MIN_COLS = 14;
|
|
4
|
-
export const TODO_RAIL_MAX_COLS = 36;
|
|
5
|
-
export const TODO_TRANSCRIPT_MIN_COLS = 62;
|
|
6
|
-
export const TODO_RAIL_MIN_TOTAL_COLS = TODO_TRANSCRIPT_MIN_COLS + TODO_RAIL_MIN_COLS;
|
|
7
|
-
export const TODO_RAIL_INDEX_MIN_COLS = 22;
|
|
8
|
-
/** Return a non-decreasing rail width; invalid or narrow terminals have no rail. */
|
|
9
|
-
export function todoRailWidth(cols) {
|
|
10
|
-
if (!Number.isFinite(cols))
|
|
11
|
-
return 0;
|
|
12
|
-
const columns = Math.floor(cols);
|
|
13
|
-
if (columns < TODO_RAIL_MIN_TOTAL_COLS)
|
|
14
|
-
return 0;
|
|
15
|
-
return Math.min(TODO_RAIL_MAX_COLS, Math.max(TODO_RAIL_MIN_COLS, Math.round(columns * RAIL_FRACTION)));
|
|
16
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scroll-thumb geometry (mouse-wheel-region-routing §4.8) — pure, React-free.
|
|
3
|
-
*
|
|
4
|
-
* Wheel scrolling without a position indicator is a half-finished affordance:
|
|
5
|
-
* the user learns THAT they moved but not HOW FAR or how much is left. The
|
|
6
|
-
* status bar's `↑N` answers neither.
|
|
7
|
-
*
|
|
8
|
-
* OFFSET COUNTS FROM THE BOTTOM, exactly as `scroll.ts` documents — `0` is
|
|
9
|
-
* pinned to the newest output and `overflow` is parked at the very top. The
|
|
10
|
-
* rows hidden ABOVE are therefore `overflow - offset`, and that inversion is
|
|
11
|
-
* precisely what gets done by accident, so it is computed here once and named.
|
|
12
|
-
*/
|
|
13
|
-
export interface ThumbRange {
|
|
14
|
-
/** 0-based row of the thumb's first row, within the viewport. */
|
|
15
|
-
start: number;
|
|
16
|
-
/** Thumb height in rows; always >= 1 when a range is returned. */
|
|
17
|
-
size: number;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Where the thumb sits, or `null` when the content fits and there is nothing to
|
|
21
|
-
* indicate.
|
|
22
|
-
*
|
|
23
|
-
* `size` never rounds to zero: a 10-row window over a 5000-row transcript still
|
|
24
|
-
* gets a one-row thumb, because an indicator that vanishes at exactly the
|
|
25
|
-
* moment the transcript is longest is worse than no indicator at all.
|
|
26
|
-
*/
|
|
27
|
-
export declare function thumbRange(viewportRows: number, contentRows: number, offsetFromBottom: number, reserveTravel?: boolean): ThumbRange | null;
|