@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
package/dist/ui/layout/cells.js
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Display-width cell arithmetic (tui-subagent-panel §5 #1).
|
|
3
|
-
*
|
|
4
|
-
* EVERY FUNCTION HERE IS PURE AND TOTAL: no Ink, no clock, no terminal, and no
|
|
5
|
-
* input that throws. The panel row and the Agents board both need to place text
|
|
6
|
-
* in a FIXED number of terminal columns, and `padEnd` cannot do that: it counts
|
|
7
|
-
* code units while a terminal counts cells, so a CJK description padded with
|
|
8
|
-
* `padEnd` overflows its box by one column per wide character and pushes the
|
|
9
|
-
* next cell off the row. That is exactly the defect this round removes from the
|
|
10
|
-
* roster, one layer down.
|
|
11
|
-
*
|
|
12
|
-
* ASCII ONLY: `src/ui/**` is inside `glyphs.test.ts`'s static scan, so the
|
|
13
|
-
* ellipsis and any other symbol a caller wants must be passed IN (the board
|
|
14
|
-
* hands over `glyphs.ellipsis`), never spelled here.
|
|
15
|
-
*/
|
|
16
|
-
import stringWidth from 'string-width';
|
|
17
|
-
/** Invalid geometry becomes zero, exactly like the layout modules' `nonNegativeInt`. */
|
|
18
|
-
function nonNegativeInt(value) {
|
|
19
|
-
return Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0;
|
|
20
|
-
}
|
|
21
|
-
/** Display columns a string occupies, or 0 for a non-string (defensive at the edge only). */
|
|
22
|
-
export function cellWidth(text) {
|
|
23
|
-
if (typeof text !== 'string' || text.length === 0)
|
|
24
|
-
return 0;
|
|
25
|
-
return stringWidth(text);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Cut `text` to at most `cells` display columns, marking the cut with `ellipsis`.
|
|
29
|
-
*
|
|
30
|
-
* THE ELLIPSIS IS PART OF THE BUDGET, not an extra column: a caller that asks for
|
|
31
|
-
* 8 cells gets a string that MEASURES 8, which is what makes a fixed-width cell
|
|
32
|
-
* a cell rather than a hope. When the budget cannot hold the ellipsis plus one
|
|
33
|
-
* character, the string is hard-cut instead - a marker wider than the cell it
|
|
34
|
-
* marks is the one outcome worse than no marker.
|
|
35
|
-
*
|
|
36
|
-
* Wide characters are never split: a surrogate pair or a double-width glyph that
|
|
37
|
-
* does not fit is dropped whole, so the result can measure one column less than
|
|
38
|
-
* asked but never one more.
|
|
39
|
-
*/
|
|
40
|
-
export function fitCells(text, cells, ellipsis = '...') {
|
|
41
|
-
const budget = nonNegativeInt(cells);
|
|
42
|
-
if (budget === 0)
|
|
43
|
-
return '';
|
|
44
|
-
if (cellWidth(text) <= budget)
|
|
45
|
-
return text;
|
|
46
|
-
const mark = cellWidth(ellipsis) < budget ? ellipsis : '';
|
|
47
|
-
const room = budget - cellWidth(mark);
|
|
48
|
-
let out = '';
|
|
49
|
-
let used = 0;
|
|
50
|
-
// `Array.from` iterates by CODE POINT, so a surrogate pair is one step and can
|
|
51
|
-
// never be cut in half by this loop.
|
|
52
|
-
for (const char of Array.from(text)) {
|
|
53
|
-
const width = cellWidth(char);
|
|
54
|
-
if (used + width > room)
|
|
55
|
-
break;
|
|
56
|
-
out += char;
|
|
57
|
-
used += width;
|
|
58
|
-
}
|
|
59
|
-
return `${out}${mark}`;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Pad `text` to exactly `cells` columns (or leave it alone when it already
|
|
63
|
-
* measures at least that).
|
|
64
|
-
*
|
|
65
|
-
* NOT `padEnd`: see this file's header. A padded cell is what keeps the next
|
|
66
|
-
* column at a stable offset, which is the whole point of the panel's table.
|
|
67
|
-
*/
|
|
68
|
-
export function padCells(text, cells) {
|
|
69
|
-
const budget = nonNegativeInt(cells);
|
|
70
|
-
const width = cellWidth(text);
|
|
71
|
-
if (width >= budget)
|
|
72
|
-
return text;
|
|
73
|
-
return `${text}${' '.repeat(budget - width)}`;
|
|
74
|
-
}
|
|
75
|
-
/** `fitCells` then `padCells`: the result ALWAYS measures exactly `cells`. */
|
|
76
|
-
export function alignRightCells(text, cells, ellipsis = '...') {
|
|
77
|
-
const budget = nonNegativeInt(cells);
|
|
78
|
-
return padCells(fitCells(text, budget, ellipsis), budget);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Fold `text` into at most `maxRows` lines of at most `cells` columns each.
|
|
82
|
-
*
|
|
83
|
-
* BREAKS AT SPACES, HARD-CUTS ONLY WHEN A SINGLE TOKEN CANNOT FIT: a word that is
|
|
84
|
-
* wider than the column is the one case where an honest over-long token beats a
|
|
85
|
-
* line of nothing, so it is cut rather than pushed to a line that still cannot
|
|
86
|
-
* hold it. The last allowed line, when text remains, carries the `(+N lines)`
|
|
87
|
-
* tail so the reader learns that the section was truncated instead of believing
|
|
88
|
-
* the prose ended mid-sentence.
|
|
89
|
-
*
|
|
90
|
-
* Pure and total: `cells <= 0` or `maxRows <= 0` yields no lines, and the caller
|
|
91
|
-
* decides what an empty section means (the board omits it).
|
|
92
|
-
*/
|
|
93
|
-
export function wrapCells(text, cells, maxRows, ellipsis = '...') {
|
|
94
|
-
const width = nonNegativeInt(cells);
|
|
95
|
-
const limit = nonNegativeInt(maxRows);
|
|
96
|
-
const flat = (text ?? '').replace(/\s+/g, ' ').trim();
|
|
97
|
-
if (width === 0 || limit === 0 || flat.length === 0) {
|
|
98
|
-
return { lines: [], dropped: flat.length === 0 ? 0 : limit === 0 ? 1 : 0 };
|
|
99
|
-
}
|
|
100
|
-
const lines = [];
|
|
101
|
-
let rest = flat;
|
|
102
|
-
while (rest.length > 0) {
|
|
103
|
-
if (cellWidth(rest) <= width) {
|
|
104
|
-
lines.push(rest);
|
|
105
|
-
rest = '';
|
|
106
|
-
break;
|
|
107
|
-
}
|
|
108
|
-
const cut = breakCells(rest, width);
|
|
109
|
-
lines.push(cut.line);
|
|
110
|
-
rest = cut.rest;
|
|
111
|
-
}
|
|
112
|
-
if (lines.length <= limit)
|
|
113
|
-
return { lines, dropped: 0 };
|
|
114
|
-
const kept = lines.slice(0, limit);
|
|
115
|
-
const dropped = lines.length - limit;
|
|
116
|
-
const tail = `(+${dropped} lines)`;
|
|
117
|
-
// THE ANNOUNCEMENT IS RESERVED, not appended and then truncated away: a reader who
|
|
118
|
-
// sees prose stop mid-sentence with no marker reads it as the end of the fact, which
|
|
119
|
-
// is exactly the wrong conclusion. When the column is too narrow to hold the marker
|
|
120
|
-
// at all, the line is simply cut - the caller's section is unusable at that width.
|
|
121
|
-
const tailCells = cellWidth(tail) + 1;
|
|
122
|
-
const last = kept[limit - 1] ?? '';
|
|
123
|
-
kept[limit - 1] = tailCells < width
|
|
124
|
-
? `${fitCells(last, width - tailCells, ellipsis)} ${tail}`
|
|
125
|
-
: fitCells(last, width, ellipsis);
|
|
126
|
-
return { lines: kept, dropped };
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* The longest prefix of `text` that fits `width` columns, preferring a space.
|
|
130
|
-
*
|
|
131
|
-
* Returns the consumed line and what is left, so the caller's loop is one
|
|
132
|
-
* assignment per iteration and the "one function does one thing" rule holds.
|
|
133
|
-
*/
|
|
134
|
-
function breakCells(text, width) {
|
|
135
|
-
let used = 0;
|
|
136
|
-
let taken = 0;
|
|
137
|
-
let lastSpace = -1;
|
|
138
|
-
for (const char of Array.from(text)) {
|
|
139
|
-
const charWidth = cellWidth(char);
|
|
140
|
-
if (used + charWidth > width)
|
|
141
|
-
break;
|
|
142
|
-
used += charWidth;
|
|
143
|
-
taken += char.length;
|
|
144
|
-
if (char === ' ')
|
|
145
|
-
lastSpace = taken;
|
|
146
|
-
}
|
|
147
|
-
// A single token wider than the column: hard-cut it rather than emit nothing.
|
|
148
|
-
if (taken === 0) {
|
|
149
|
-
const first = Array.from(text)[0] ?? '';
|
|
150
|
-
return { line: fitCells(first, width), rest: text.slice(first.length) };
|
|
151
|
-
}
|
|
152
|
-
if (lastSpace > 0) {
|
|
153
|
-
return { line: text.slice(0, lastSpace).trimEnd(), rest: text.slice(lastSpace).trimStart() };
|
|
154
|
-
}
|
|
155
|
-
return { line: text.slice(0, taken), rest: text.slice(taken).trimStart() };
|
|
156
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface DocumentLayoutInput {
|
|
2
|
-
viewportRows: number;
|
|
3
|
-
bodyRows: number;
|
|
4
|
-
footerRows: number;
|
|
5
|
-
}
|
|
6
|
-
export interface DocumentLayout {
|
|
7
|
-
viewportRows: number;
|
|
8
|
-
paddingRows: number;
|
|
9
|
-
contentRows: number;
|
|
10
|
-
trailingContentRows: number;
|
|
11
|
-
}
|
|
12
|
-
/** Allocate the shared document, filling short sessions before the panels. */
|
|
13
|
-
export declare function buildDocumentLayout(input: DocumentLayoutInput): DocumentLayout;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/** Allocate the shared document, filling short sessions before the panels. */
|
|
2
|
-
export function buildDocumentLayout(input) {
|
|
3
|
-
const count = (n) => Number.isFinite(n) ? Math.max(0, Math.floor(n)) : 0;
|
|
4
|
-
const viewportRows = count(input.viewportRows);
|
|
5
|
-
const body = count(input.bodyRows);
|
|
6
|
-
const footer = count(input.footerRows);
|
|
7
|
-
const paddingRows = Math.max(0, viewportRows - body - footer);
|
|
8
|
-
return { viewportRows, paddingRows, contentRows: body + paddingRows + footer,
|
|
9
|
-
trailingContentRows: paddingRows + footer };
|
|
10
|
-
}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Follow rules for the self-drawn viewport (tui-selection-and-scroll-follow
|
|
3
|
-
* §4.3). PURE, React-free, unit-tested — the shape `scroll.ts`,
|
|
4
|
-
* `virtual-window.ts` and `frame-differ.ts` all already use.
|
|
5
|
-
*
|
|
6
|
-
* It lives here rather than inside `ScrollViewport` because
|
|
7
|
-
* `ink-testing-library`'s stdout stub reports no height, so a MOUNTED viewport
|
|
8
|
-
* measures `content === viewport`, `overflowLines === 0`, and neither rule below
|
|
9
|
-
* ever engages (`__tests__/render-at-width.ts`, and `transcript-virtual.test.tsx`
|
|
10
|
-
* records the same limitation and the same workaround). A state machine that can
|
|
11
|
-
* only be exercised through a box the test cannot size is a state machine with
|
|
12
|
-
* no tests (P1-10).
|
|
13
|
-
*
|
|
14
|
-
* ═══════════════════════════════════════════════════════════════════════════
|
|
15
|
-
* NOTHING IN THIS FILE MAY READ A MEASUREMENT (AC-17, and it is a `grep`).
|
|
16
|
-
*
|
|
17
|
-
* The gate is a `grep` for the name of Ink's element-measuring helper returning
|
|
18
|
-
* NOTHING from this file, so that name is deliberately left unspelled here and
|
|
19
|
-
* below, even where writing it would read more directly. A grep a COMMENT can
|
|
20
|
-
* trip is a grep whoever runs it learns to ignore, and then the import it exists
|
|
21
|
-
* to catch walks straight past it — the same reason `glyphs.test.ts` strips
|
|
22
|
-
* comments before judging a line.
|
|
23
|
-
*
|
|
24
|
-
* The transcript's MEASURED CONTENT HEIGHT — what `ScrollViewport` reads out of
|
|
25
|
-
* Ink's layout for the inner box — is the height of everything the transcript is
|
|
26
|
-
* currently drawing, and FOUR different things move it — only one of which is
|
|
27
|
-
* "the agent produced output":
|
|
28
|
-
*
|
|
29
|
-
* 1. rows appended at the tail <- Rule A must react
|
|
30
|
-
* 2. an entry ABOVE the reading position changing <- must NOT move
|
|
31
|
-
* height (Ctrl+T, Ctrl+O, a first real measurement
|
|
32
|
-
* of an entry that stood on an estimate)
|
|
33
|
-
* 3. the scroll horizon dropping entries off the <- must NOT move
|
|
34
|
-
* FRONT (`Transcript.tsx`, `entries.slice(-size)`)
|
|
35
|
-
* 4. a re-wrap after a resize <- must NOT move
|
|
36
|
-
*
|
|
37
|
-
* For (2) and (3) `virtual-window.ts`'s invariant V-4 is explicit: counting the
|
|
38
|
-
* offset FROM THE BOTTOM makes an above-the-viewport height change
|
|
39
|
-
* self-compensating, and that is what buys virtualisation its "no
|
|
40
|
-
* scroll-anchoring compensation pass required". Reacting to total content growth
|
|
41
|
-
* would make Rule A that compensation pass, applied to changes that never needed
|
|
42
|
-
* compensating — and it would additionally make (3) look like new output and arm
|
|
43
|
-
* the idle timer on a transcript that produced nothing, the exact failure G6
|
|
44
|
-
* exists to prevent.
|
|
45
|
-
*
|
|
46
|
-
* There is a second, sharper reason. `selectWindow` TAKES `offset` AS AN INPUT,
|
|
47
|
-
* so the mounted set — and therefore which entries are measured rather than
|
|
48
|
-
* estimated — is a function of the offset. An offset that is in turn a function
|
|
49
|
-
* of the measured height closes a loop: offset -> mounted set -> measured
|
|
50
|
-
* heights -> content height -> offset. The loop is broken by the INPUT rather
|
|
51
|
-
* than by a convergence argument: `advanceTailRows` reads the height table and
|
|
52
|
-
* never the geometry context (P0-1 / D-13).
|
|
53
|
-
* ═══════════════════════════════════════════════════════════════════════════
|
|
54
|
-
*/
|
|
55
|
-
export interface FollowInput {
|
|
56
|
-
/** Current RENDERED (already clamped) offset — see the caller's P1-9 note. */
|
|
57
|
-
offset: number;
|
|
58
|
-
overflowLines: number;
|
|
59
|
-
/** Signed: rows appended at (or removed from) the tail since the last frame. */
|
|
60
|
-
tailDelta: number;
|
|
61
|
-
layoutTailDelta?: number;
|
|
62
|
-
/** True while a selection drag holds the viewport (§4.4). */
|
|
63
|
-
hold: boolean;
|
|
64
|
-
newLinesWhilePaused: number;
|
|
65
|
-
}
|
|
66
|
-
export interface FollowOutput {
|
|
67
|
-
offset: number;
|
|
68
|
-
newLinesWhilePaused: number;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Rule A. When rows are appended AT THE TAIL while the user is not pinned to the
|
|
72
|
-
* bottom, grow the offset by the same amount: `shiftUp = overflowLines - offset`
|
|
73
|
-
* is then constant and the rows on screen do not move.
|
|
74
|
-
*
|
|
75
|
-
* SIGNED, NOT GROWTH-ONLY (I-7). A tail SHRINK is rows that no longer exist
|
|
76
|
-
* below the reading position, so shrinking the offset by the same amount is what
|
|
77
|
-
* keeps the screen still — and it is self-correcting when the source of the
|
|
78
|
-
* delta was an upper-bound height estimate that a later measurement brings down
|
|
79
|
-
* (`estimateEntryRows` is deliberately an upper bound). An unsigned rule
|
|
80
|
-
* over-counts once and never finds its way back.
|
|
81
|
-
*/
|
|
82
|
-
export declare function reduceFollow(input: FollowInput): FollowOutput;
|
|
83
|
-
export interface ResumeInput {
|
|
84
|
-
/** `scrollResumeMs`; `0` (or anything non-finite) disables auto-resume. */
|
|
85
|
-
resumeMs: number;
|
|
86
|
-
offset: number;
|
|
87
|
-
newLinesWhilePaused: number;
|
|
88
|
-
hold: boolean;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Rule B's three conditions, and they are three rather than one on purpose:
|
|
92
|
-
*
|
|
93
|
-
* 1. `offset > 0` — there is somewhere to return FROM;
|
|
94
|
-
* 2. `newLines > 0` — something arrived that is worth returning TO. THIS IS
|
|
95
|
-
* G6: a user reading a FINISHED transcript is never yanked to the bottom,
|
|
96
|
-
* which is the new bug that a timing-only rule would ship wearing the fix's
|
|
97
|
-
* clothes (D-3);
|
|
98
|
-
* 3. `!hold` — no selection drag is in progress (§4.4).
|
|
99
|
-
*
|
|
100
|
-
* AC-9 rides on the first line: with `scrollResumeMs: 0` this returns `false`
|
|
101
|
-
* before anything else is considered, so no timer is ever created.
|
|
102
|
-
*/
|
|
103
|
-
export declare function shouldArmResume(input: ResumeInput): boolean;
|
|
104
|
-
/**
|
|
105
|
-
* What the transcript publishes through a ref written during render.
|
|
106
|
-
*
|
|
107
|
-
* `lastHeight` is not decoration: §4.3.1a defines the per-frame delta as "heights
|
|
108
|
-
* of entries after the previously-last entry PLUS the delta of that entry's own
|
|
109
|
-
* height (a streaming entry grows in place)", and the second term cannot be
|
|
110
|
-
* computed without remembering what that height was.
|
|
111
|
-
*/
|
|
112
|
-
export interface TailState {
|
|
113
|
-
/** Monotonic-ish cumulative count of rows produced at the tail. Signed deltas. */
|
|
114
|
-
rows: number;
|
|
115
|
-
/** Identity anchor — the last entry's id when this state was written. */
|
|
116
|
-
lastId: string | null;
|
|
117
|
-
/** That entry's height when this state was written. */
|
|
118
|
-
lastHeight: number;
|
|
119
|
-
}
|
|
120
|
-
export interface TailSink {
|
|
121
|
-
current: TailState;
|
|
122
|
-
}
|
|
123
|
-
export declare function emptyTailState(): TailState;
|
|
124
|
-
/**
|
|
125
|
-
* Advance the tail counter by one frame.
|
|
126
|
-
*
|
|
127
|
-
* `ids` are the entries the transcript is drawing, in order; `heightOf(index)`
|
|
128
|
-
* is the transcript's own per-entry height table (measured where it exists, an
|
|
129
|
-
* upper-bound estimate where it does not). NO GEOMETRY IS READ HERE, which is
|
|
130
|
-
* what breaks P0-1's loop by construction.
|
|
131
|
-
*
|
|
132
|
-
* RE-ANCHORING CONTRIBUTES ZERO (R-11). When the scroll horizon drops the entry
|
|
133
|
-
* this counter was anchored on, the anchor is simply moved to the new last entry
|
|
134
|
-
* and the frame contributes a delta of 0. Losing one frame of anchoring is a row
|
|
135
|
-
* of drift at worst; treating a FRONT-DROP as tail motion is a visible jump, and
|
|
136
|
-
* an unbounded one.
|
|
137
|
-
*/
|
|
138
|
-
export declare function advanceTailRows(prev: TailState, ids: readonly string[], heightOf: (index: number) => number): TailState;
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Follow rules for the self-drawn viewport (tui-selection-and-scroll-follow
|
|
3
|
-
* §4.3). PURE, React-free, unit-tested — the shape `scroll.ts`,
|
|
4
|
-
* `virtual-window.ts` and `frame-differ.ts` all already use.
|
|
5
|
-
*
|
|
6
|
-
* It lives here rather than inside `ScrollViewport` because
|
|
7
|
-
* `ink-testing-library`'s stdout stub reports no height, so a MOUNTED viewport
|
|
8
|
-
* measures `content === viewport`, `overflowLines === 0`, and neither rule below
|
|
9
|
-
* ever engages (`__tests__/render-at-width.ts`, and `transcript-virtual.test.tsx`
|
|
10
|
-
* records the same limitation and the same workaround). A state machine that can
|
|
11
|
-
* only be exercised through a box the test cannot size is a state machine with
|
|
12
|
-
* no tests (P1-10).
|
|
13
|
-
*
|
|
14
|
-
* ═══════════════════════════════════════════════════════════════════════════
|
|
15
|
-
* NOTHING IN THIS FILE MAY READ A MEASUREMENT (AC-17, and it is a `grep`).
|
|
16
|
-
*
|
|
17
|
-
* The gate is a `grep` for the name of Ink's element-measuring helper returning
|
|
18
|
-
* NOTHING from this file, so that name is deliberately left unspelled here and
|
|
19
|
-
* below, even where writing it would read more directly. A grep a COMMENT can
|
|
20
|
-
* trip is a grep whoever runs it learns to ignore, and then the import it exists
|
|
21
|
-
* to catch walks straight past it — the same reason `glyphs.test.ts` strips
|
|
22
|
-
* comments before judging a line.
|
|
23
|
-
*
|
|
24
|
-
* The transcript's MEASURED CONTENT HEIGHT — what `ScrollViewport` reads out of
|
|
25
|
-
* Ink's layout for the inner box — is the height of everything the transcript is
|
|
26
|
-
* currently drawing, and FOUR different things move it — only one of which is
|
|
27
|
-
* "the agent produced output":
|
|
28
|
-
*
|
|
29
|
-
* 1. rows appended at the tail <- Rule A must react
|
|
30
|
-
* 2. an entry ABOVE the reading position changing <- must NOT move
|
|
31
|
-
* height (Ctrl+T, Ctrl+O, a first real measurement
|
|
32
|
-
* of an entry that stood on an estimate)
|
|
33
|
-
* 3. the scroll horizon dropping entries off the <- must NOT move
|
|
34
|
-
* FRONT (`Transcript.tsx`, `entries.slice(-size)`)
|
|
35
|
-
* 4. a re-wrap after a resize <- must NOT move
|
|
36
|
-
*
|
|
37
|
-
* For (2) and (3) `virtual-window.ts`'s invariant V-4 is explicit: counting the
|
|
38
|
-
* offset FROM THE BOTTOM makes an above-the-viewport height change
|
|
39
|
-
* self-compensating, and that is what buys virtualisation its "no
|
|
40
|
-
* scroll-anchoring compensation pass required". Reacting to total content growth
|
|
41
|
-
* would make Rule A that compensation pass, applied to changes that never needed
|
|
42
|
-
* compensating — and it would additionally make (3) look like new output and arm
|
|
43
|
-
* the idle timer on a transcript that produced nothing, the exact failure G6
|
|
44
|
-
* exists to prevent.
|
|
45
|
-
*
|
|
46
|
-
* There is a second, sharper reason. `selectWindow` TAKES `offset` AS AN INPUT,
|
|
47
|
-
* so the mounted set — and therefore which entries are measured rather than
|
|
48
|
-
* estimated — is a function of the offset. An offset that is in turn a function
|
|
49
|
-
* of the measured height closes a loop: offset -> mounted set -> measured
|
|
50
|
-
* heights -> content height -> offset. The loop is broken by the INPUT rather
|
|
51
|
-
* than by a convergence argument: `advanceTailRows` reads the height table and
|
|
52
|
-
* never the geometry context (P0-1 / D-13).
|
|
53
|
-
* ═══════════════════════════════════════════════════════════════════════════
|
|
54
|
-
*/
|
|
55
|
-
import { clampScroll } from './scroll.js';
|
|
56
|
-
/**
|
|
57
|
-
* Rule A. When rows are appended AT THE TAIL while the user is not pinned to the
|
|
58
|
-
* bottom, grow the offset by the same amount: `shiftUp = overflowLines - offset`
|
|
59
|
-
* is then constant and the rows on screen do not move.
|
|
60
|
-
*
|
|
61
|
-
* SIGNED, NOT GROWTH-ONLY (I-7). A tail SHRINK is rows that no longer exist
|
|
62
|
-
* below the reading position, so shrinking the offset by the same amount is what
|
|
63
|
-
* keeps the screen still — and it is self-correcting when the source of the
|
|
64
|
-
* delta was an upper-bound height estimate that a later measurement brings down
|
|
65
|
-
* (`estimateEntryRows` is deliberately an upper bound). An unsigned rule
|
|
66
|
-
* over-counts once and never finds its way back.
|
|
67
|
-
*/
|
|
68
|
-
export function reduceFollow(input) {
|
|
69
|
-
const { offset, overflowLines, tailDelta, hold } = input;
|
|
70
|
-
// Pinned and not holding: anchoring is free — `offset` stays 0 and the
|
|
71
|
-
// existing arithmetic keeps showing the tail. `hold` LIFTS the precondition
|
|
72
|
-
// because a drag that starts while pinned must still freeze the rows under the
|
|
73
|
-
// pointer (S3), and freezing means the pin becomes an anchor for the duration
|
|
74
|
-
// of the drag (T-20).
|
|
75
|
-
if (offset === 0 && !hold)
|
|
76
|
-
return { offset, newLinesWhilePaused: 0 };
|
|
77
|
-
const next = clampScroll(offset + tailDelta + (input.layoutTailDelta ?? 0), overflowLines);
|
|
78
|
-
return {
|
|
79
|
-
offset: next,
|
|
80
|
-
// Only real arrivals arm the resume timer, and reaching the bottom by ANY
|
|
81
|
-
// route resets the count (Rule B condition 2 / G6). Expressing the reset
|
|
82
|
-
// here is what keeps it one rule rather than two.
|
|
83
|
-
newLinesWhilePaused: next === 0 ? 0 : Math.max(0, input.newLinesWhilePaused + tailDelta),
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Rule B's three conditions, and they are three rather than one on purpose:
|
|
88
|
-
*
|
|
89
|
-
* 1. `offset > 0` — there is somewhere to return FROM;
|
|
90
|
-
* 2. `newLines > 0` — something arrived that is worth returning TO. THIS IS
|
|
91
|
-
* G6: a user reading a FINISHED transcript is never yanked to the bottom,
|
|
92
|
-
* which is the new bug that a timing-only rule would ship wearing the fix's
|
|
93
|
-
* clothes (D-3);
|
|
94
|
-
* 3. `!hold` — no selection drag is in progress (§4.4).
|
|
95
|
-
*
|
|
96
|
-
* AC-9 rides on the first line: with `scrollResumeMs: 0` this returns `false`
|
|
97
|
-
* before anything else is considered, so no timer is ever created.
|
|
98
|
-
*/
|
|
99
|
-
export function shouldArmResume(input) {
|
|
100
|
-
if (!Number.isFinite(input.resumeMs) || input.resumeMs <= 0)
|
|
101
|
-
return false;
|
|
102
|
-
if (input.offset <= 0)
|
|
103
|
-
return false;
|
|
104
|
-
if (input.newLinesWhilePaused <= 0)
|
|
105
|
-
return false;
|
|
106
|
-
if (input.hold)
|
|
107
|
-
return false;
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
export function emptyTailState() {
|
|
111
|
-
return { rows: 0, lastId: null, lastHeight: 0 };
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Advance the tail counter by one frame.
|
|
115
|
-
*
|
|
116
|
-
* `ids` are the entries the transcript is drawing, in order; `heightOf(index)`
|
|
117
|
-
* is the transcript's own per-entry height table (measured where it exists, an
|
|
118
|
-
* upper-bound estimate where it does not). NO GEOMETRY IS READ HERE, which is
|
|
119
|
-
* what breaks P0-1's loop by construction.
|
|
120
|
-
*
|
|
121
|
-
* RE-ANCHORING CONTRIBUTES ZERO (R-11). When the scroll horizon drops the entry
|
|
122
|
-
* this counter was anchored on, the anchor is simply moved to the new last entry
|
|
123
|
-
* and the frame contributes a delta of 0. Losing one frame of anchoring is a row
|
|
124
|
-
* of drift at worst; treating a FRONT-DROP as tail motion is a visible jump, and
|
|
125
|
-
* an unbounded one.
|
|
126
|
-
*/
|
|
127
|
-
export function advanceTailRows(prev, ids, heightOf) {
|
|
128
|
-
if (ids.length === 0)
|
|
129
|
-
return { rows: prev.rows, lastId: null, lastHeight: 0 };
|
|
130
|
-
const lastIndex = ids.length - 1;
|
|
131
|
-
const lastId = ids[lastIndex];
|
|
132
|
-
const lastHeight = heightOf(lastIndex);
|
|
133
|
-
if (prev.lastId === null) {
|
|
134
|
-
// First frame: there is no "before", so there is no delta to attribute.
|
|
135
|
-
return { rows: prev.rows, lastId, lastHeight };
|
|
136
|
-
}
|
|
137
|
-
const anchor = ids.lastIndexOf(prev.lastId);
|
|
138
|
-
if (anchor === -1) {
|
|
139
|
-
// The anchor is gone (horizon front-drop, `/clear`, `/reset`, `/resume`).
|
|
140
|
-
return { rows: prev.rows, lastId, lastHeight };
|
|
141
|
-
}
|
|
142
|
-
// The anchor entry may have grown in place (a streaming tail entry), and
|
|
143
|
-
// everything after it is new. Both terms are signed.
|
|
144
|
-
let delta = heightOf(anchor) - prev.lastHeight;
|
|
145
|
-
for (let i = anchor + 1; i <= lastIndex; i += 1)
|
|
146
|
-
delta += heightOf(i);
|
|
147
|
-
return { rows: prev.rows + delta, lastId, lastHeight };
|
|
148
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Frame geometry + render-mode decision (spec §4.1 / §4.2).
|
|
3
|
-
*
|
|
4
|
-
* Two pure functions with zero React dependency so the load-bearing invariant
|
|
5
|
-
* I-1 (`frameHeight(r) < r`) can be pinned by a unit test rather than by hope.
|
|
6
|
-
*/
|
|
7
|
-
/** Below this many rows a full-screen frame has no usable viewport left. */
|
|
8
|
-
export declare const MIN_FULLSCREEN_ROWS = 12;
|
|
9
|
-
/** Below this many columns the chrome (composer + status bar) cannot line-wrap sanely. */
|
|
10
|
-
export declare const MIN_FULLSCREEN_COLS = 40;
|
|
11
|
-
/** Used when `stdout.rows` is missing (pipes, test stubs, some PTYs). */
|
|
12
|
-
export declare const FALLBACK_ROWS = 24;
|
|
13
|
-
/** Used when `stdout.columns` is missing. */
|
|
14
|
-
export declare const FALLBACK_COLS = 80;
|
|
15
|
-
/**
|
|
16
|
-
* Frame height. MUST stay strictly below `rows`:
|
|
17
|
-
* - `>= rows` hits ink.js:121, which drops incremental `eraseLines` updates and
|
|
18
|
-
* writes `clearTerminal + <all Static history> + output` on EVERY frame —
|
|
19
|
-
* 30×/s under a 33 ms streaming window, with write amplification that grows
|
|
20
|
-
* monotonically with the session;
|
|
21
|
-
* - `== rows` lets the trailing '\n' log-update appends scroll the buffer by one
|
|
22
|
-
* line, so `eraseLines(previousLineCount)` drifts and the frame slowly eats
|
|
23
|
-
* the content above it.
|
|
24
|
-
* `frame.test.ts` asserts `frameHeight(r) < r` for every r in [1, 200].
|
|
25
|
-
*
|
|
26
|
-
* The lower clamp is 0 — NEVER `MIN_FULLSCREEN_ROWS - 1` (returns 11 for
|
|
27
|
-
* rows ∈ [1, 11], i.e. `>= rows`: precisely the clearTerminal disaster this
|
|
28
|
-
* function exists to prevent) and NEVER 1 either, because `Math.max(1, r - 1)`
|
|
29
|
-
* returns 1 for r = 1 and `1 >= 1` violates the invariant all the same. That
|
|
30
|
-
* range IS reachable: §4.11 keeps the alt-screen and renders a "terminal too
|
|
31
|
-
* small" placeholder when a resize drops below MIN_FULLSCREEN_ROWS, so a user
|
|
32
|
-
* dragging their window down lands in it. The placeholder takes its height from
|
|
33
|
-
* this same function. A 0-height frame renders nothing, which on a 1-row
|
|
34
|
-
* terminal is strictly better than a per-frame full-screen repaint.
|
|
35
|
-
*/
|
|
36
|
-
export declare function frameHeight(rows: number | undefined): number;
|
package/dist/ui/layout/frame.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Frame geometry + render-mode decision (spec §4.1 / §4.2).
|
|
3
|
-
*
|
|
4
|
-
* Two pure functions with zero React dependency so the load-bearing invariant
|
|
5
|
-
* I-1 (`frameHeight(r) < r`) can be pinned by a unit test rather than by hope.
|
|
6
|
-
*/
|
|
7
|
-
/** Below this many rows a full-screen frame has no usable viewport left. */
|
|
8
|
-
export const MIN_FULLSCREEN_ROWS = 12;
|
|
9
|
-
/** Below this many columns the chrome (composer + status bar) cannot line-wrap sanely. */
|
|
10
|
-
export const MIN_FULLSCREEN_COLS = 40;
|
|
11
|
-
/** Used when `stdout.rows` is missing (pipes, test stubs, some PTYs). */
|
|
12
|
-
export const FALLBACK_ROWS = 24;
|
|
13
|
-
/** Used when `stdout.columns` is missing. */
|
|
14
|
-
export const FALLBACK_COLS = 80;
|
|
15
|
-
/**
|
|
16
|
-
* Frame height. MUST stay strictly below `rows`:
|
|
17
|
-
* - `>= rows` hits ink.js:121, which drops incremental `eraseLines` updates and
|
|
18
|
-
* writes `clearTerminal + <all Static history> + output` on EVERY frame —
|
|
19
|
-
* 30×/s under a 33 ms streaming window, with write amplification that grows
|
|
20
|
-
* monotonically with the session;
|
|
21
|
-
* - `== rows` lets the trailing '\n' log-update appends scroll the buffer by one
|
|
22
|
-
* line, so `eraseLines(previousLineCount)` drifts and the frame slowly eats
|
|
23
|
-
* the content above it.
|
|
24
|
-
* `frame.test.ts` asserts `frameHeight(r) < r` for every r in [1, 200].
|
|
25
|
-
*
|
|
26
|
-
* The lower clamp is 0 — NEVER `MIN_FULLSCREEN_ROWS - 1` (returns 11 for
|
|
27
|
-
* rows ∈ [1, 11], i.e. `>= rows`: precisely the clearTerminal disaster this
|
|
28
|
-
* function exists to prevent) and NEVER 1 either, because `Math.max(1, r - 1)`
|
|
29
|
-
* returns 1 for r = 1 and `1 >= 1` violates the invariant all the same. That
|
|
30
|
-
* range IS reachable: §4.11 keeps the alt-screen and renders a "terminal too
|
|
31
|
-
* small" placeholder when a resize drops below MIN_FULLSCREEN_ROWS, so a user
|
|
32
|
-
* dragging their window down lands in it. The placeholder takes its height from
|
|
33
|
-
* this same function. A 0-height frame renders nothing, which on a 1-row
|
|
34
|
-
* terminal is strictly better than a per-frame full-screen repaint.
|
|
35
|
-
*/
|
|
36
|
-
export function frameHeight(rows) {
|
|
37
|
-
const r = rows && rows > 0 ? rows : FALLBACK_ROWS;
|
|
38
|
-
return Math.max(0, r - 1);
|
|
39
|
-
}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The `/gov board` overlay's model and geometry (governance-mode section 10.5): the tab
|
|
3
|
-
* model, the data adapters, the row builders and the scroll arithmetic - every decision
|
|
4
|
-
* the overlay makes, in pure code.
|
|
5
|
-
*
|
|
6
|
-
* Pure and total: no Ink, no clock (`now` is not even needed: rows carry sequence
|
|
7
|
-
* numbers, not times), no I/O. ASCII ONLY.
|
|
8
|
-
*
|
|
9
|
-
* TWO DATA SOURCES, ONE SHAPE. The live `GovernanceSnapshot` knows the roster and the
|
|
10
|
-
* ticker; the work-package matrix, the full ledger and the claims live in `RunState` /
|
|
11
|
-
* `LedgerState`. `GovernanceBoardData` is the UI's own flat projection of all of it, with
|
|
12
|
-
* two builders: `boardDataFromSnapshot` (what the renderer always has) and
|
|
13
|
-
* `boardDataFromRun` (what the wiring can supply). A board built from the snapshot alone
|
|
14
|
-
* still reads correctly - the tabs it cannot fill say so instead of going blank.
|
|
15
|
-
*
|
|
16
|
-
* EVERY ROW IS ONE TERMINAL ROW. Rows are `Segment[]` rendered `wrap="truncate"`, so
|
|
17
|
-
* scrolling is arithmetic on a list length (`sliceWindow`), never a re-measure.
|
|
18
|
-
*/
|
|
19
|
-
import type { GovernanceSnapshot, LedgerState, RunState, WorkPackage } from '../../governance/types.js';
|
|
20
|
-
import type { Glyphs } from '../glyphs.js';
|
|
21
|
-
import { type Segment } from '../governance-status.js';
|
|
22
|
-
export type BoardTab = 'roster' | 'work' | 'ledger' | 'claims';
|
|
23
|
-
export declare const BOARD_TABS: readonly BoardTab[];
|
|
24
|
-
/** Terminals narrower than this get the single-column form with a `1/4` pager. */
|
|
25
|
-
export declare const BOARD_NARROW_COLS = 80;
|
|
26
|
-
/** Recent ledger lines shown under each identity on the roster tab (spec 10.5). */
|
|
27
|
-
export declare const BOARD_RECENT_PER_AGENT = 5;
|
|
28
|
-
/** Ledger rows kept in the projection, newest first. */
|
|
29
|
-
export declare const BOARD_LEDGER_MAX = 200;
|
|
30
|
-
/** The tab `delta` steps away, wrapping at both ends. */
|
|
31
|
-
export declare function stepTab(tab: BoardTab, delta: number): BoardTab;
|
|
32
|
-
export declare function tabIndex(tab: BoardTab): number;
|
|
33
|
-
export interface BoardLedgerRow {
|
|
34
|
-
seq: number;
|
|
35
|
-
agentId: string;
|
|
36
|
-
code: string;
|
|
37
|
-
delta: number;
|
|
38
|
-
provisional: boolean;
|
|
39
|
-
/** `engine` / `inspector:insp`; '' when the source does not say. */
|
|
40
|
-
by: string;
|
|
41
|
-
reason: string;
|
|
42
|
-
evidence: string;
|
|
43
|
-
capped: boolean;
|
|
44
|
-
}
|
|
45
|
-
export interface BoardWorkPackage {
|
|
46
|
-
id: string;
|
|
47
|
-
title: string;
|
|
48
|
-
status: WorkPackage['status'];
|
|
49
|
-
reworkCount: number;
|
|
50
|
-
assignee: string;
|
|
51
|
-
reviewer: string;
|
|
52
|
-
tester: string;
|
|
53
|
-
fileCount: number;
|
|
54
|
-
blockedAt: string;
|
|
55
|
-
}
|
|
56
|
-
export interface BoardClaimRow {
|
|
57
|
-
id: string;
|
|
58
|
-
kind: 'claim' | 'escalation';
|
|
59
|
-
status: string;
|
|
60
|
-
/** `missed_by_review`, `wp_rework_cap`, ... */
|
|
61
|
-
detail: string;
|
|
62
|
-
/** Who is involved: `dev1 -> rev2` for a claim, the WP / phase for an escalation. */
|
|
63
|
-
subject: string;
|
|
64
|
-
text: string;
|
|
65
|
-
}
|
|
66
|
-
export interface GovernanceBoardData {
|
|
67
|
-
snapshot: GovernanceSnapshot;
|
|
68
|
-
workPackages: BoardWorkPackage[];
|
|
69
|
-
ledger: BoardLedgerRow[];
|
|
70
|
-
claims: BoardClaimRow[];
|
|
71
|
-
/** Absolute path of `board.md`, for the `e` key; null when unknown. */
|
|
72
|
-
boardPath: string | null;
|
|
73
|
-
}
|
|
74
|
-
/** What the renderer always has: the live snapshot. WPs and claims stay empty. */
|
|
75
|
-
export declare function boardDataFromSnapshot(snapshot: GovernanceSnapshot, boardPath?: string | null): GovernanceBoardData;
|
|
76
|
-
export interface BoardDataInput {
|
|
77
|
-
snapshot: GovernanceSnapshot;
|
|
78
|
-
run: RunState;
|
|
79
|
-
ledger: LedgerState;
|
|
80
|
-
boardPath?: string | null;
|
|
81
|
-
}
|
|
82
|
-
/** The full projection, for a wiring that can read the run and the ledger. */
|
|
83
|
-
export declare function boardDataFromRun(input: BoardDataInput): GovernanceBoardData;
|
|
84
|
-
export interface BoardLine {
|
|
85
|
-
key: string;
|
|
86
|
-
segments: Segment[];
|
|
87
|
-
}
|
|
88
|
-
export interface BoardTabStrip {
|
|
89
|
-
segments: Segment[];
|
|
90
|
-
/** `1/4` in the narrow form, `''` in the wide one. */
|
|
91
|
-
pager: string;
|
|
92
|
-
}
|
|
93
|
-
export declare function buildTabStrip(tab: BoardTab, data: GovernanceBoardData, narrow: boolean, glyphs: Glyphs): BoardTabStrip;
|
|
94
|
-
export interface GovernanceBoardInput {
|
|
95
|
-
/** Overlay CONTENT width (the frame's chrome already subtracted). */
|
|
96
|
-
cols: number;
|
|
97
|
-
tab: BoardTab;
|
|
98
|
-
data: GovernanceBoardData | null;
|
|
99
|
-
glyphs: Glyphs;
|
|
100
|
-
}
|
|
101
|
-
export interface GovernanceBoardLayout {
|
|
102
|
-
narrow: boolean;
|
|
103
|
-
tabStrip: BoardTabStrip;
|
|
104
|
-
/** Every row of the active tab; the overlay windows them. */
|
|
105
|
-
lines: BoardLine[];
|
|
106
|
-
}
|
|
107
|
-
export declare function buildGovernanceBoardLayout(input: GovernanceBoardInput): GovernanceBoardLayout;
|
|
108
|
-
/** Body rows left for content once the tab strip has taken one of the frame's rows. */
|
|
109
|
-
export declare function boardBodyRows(frameBodyRows: number): number;
|
|
110
|
-
export interface BoardWindow {
|
|
111
|
-
start: number;
|
|
112
|
-
visible: number;
|
|
113
|
-
total: number;
|
|
114
|
-
/** The offset after clamping: feed it back so the owner's counter cannot run away. */
|
|
115
|
-
clamped: number;
|
|
116
|
-
}
|
|
117
|
-
export declare function boardWindow(total: number, offset: number, height: number): BoardWindow;
|
|
118
|
-
/** Position text for the footer, e.g. `3-14/40`; '' when everything fits. */
|
|
119
|
-
export declare function boardPosition(window: BoardWindow, glyphs: Glyphs): string;
|
|
120
|
-
/** Footer hint, shortened to the width the frame can print on one row. */
|
|
121
|
-
export declare function boardHint(cols: number, glyphs: Glyphs): string;
|