@aragon-agent/cli 0.6.46 → 0.6.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +80 -12
- package/dist/agent/coalesce.d.ts +5 -1
- package/dist/agent/coalesce.js +13 -0
- package/dist/agent/controller.d.ts +41 -20
- package/dist/agent/controller.js +68 -15
- package/dist/agent/conversation-reset.d.ts +1 -1
- package/dist/agent/governance-wiring.d.ts +6 -6
- package/dist/agent/governance-wiring.js +4 -4
- package/dist/agent/headless.d.ts +5 -5
- package/dist/agent/headless.js +4 -4
- package/dist/agent/job-notices.d.ts +1 -1
- package/dist/agent/job-notices.js +1 -1
- package/dist/agent/kit-apply.d.ts +3 -3
- package/dist/agent/kit-apply.js +3 -3
- package/dist/agent/model-profile-settings.d.ts +2 -2
- package/dist/agent/model-profile-settings.js +6 -6
- package/dist/agent/prompt-options.d.ts +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/agent/user-attention.d.ts +17 -0
- package/dist/agent/user-attention.js +32 -0
- package/dist/{ui → app}/App.d.ts +9 -9
- package/dist/{ui → app}/App.js +113 -79
- package/dist/{ui → app}/use-startup-notices.d.ts +1 -1
- package/dist/{ui → app}/use-startup-notices.js +2 -2
- package/dist/cli.js +31 -32
- package/dist/commands/agents-command.js +1 -1
- package/dist/commands/builtins.js +9 -9
- package/dist/commands/governance-command.js +2 -2
- package/dist/commands/governance-runs-table.js +1 -1
- package/dist/commands/kit-command.js +1 -1
- package/dist/commands/perf.d.ts +3 -3
- package/dist/commands/perf.js +1 -1
- package/dist/commands/registry.d.ts +8 -8
- package/dist/commands/skills.js +2 -2
- package/dist/commands/team-command.js +1 -1
- package/dist/compaction/archive.d.ts +1 -1
- package/dist/compaction/archive.js +1 -1
- package/dist/compaction/child.d.ts +3 -3
- package/dist/compaction/child.js +4 -4
- package/dist/compaction/command.js +5 -5
- package/dist/compaction/compactor.d.ts +6 -6
- package/dist/compaction/compactor.js +6 -6
- package/dist/compaction/context-command.js +1 -1
- package/dist/compaction/digest.js +1 -1
- package/dist/compaction/memory-input.js +1 -1
- package/dist/compaction/memory-validation.js +1 -1
- package/dist/compaction/memory.js +1 -1
- package/dist/compaction/summarize-call.js +1 -1
- package/dist/compaction/summary-prompt.js +1 -1
- package/dist/compaction/tail-budget.js +2 -2
- package/dist/compaction/wiring.d.ts +5 -5
- package/dist/compaction/wiring.js +2 -2
- package/dist/config/cli-commands.d.ts +1 -1
- package/dist/config/cli-commands.js +3 -3
- package/dist/config/env.d.ts +1 -1
- package/dist/config/env.js +4 -4
- package/dist/config/load.d.ts +2 -2
- package/dist/config/load.js +10 -31
- package/dist/config/migrate-state-out-of-config.js +1 -1
- package/dist/config/model-profile-store.d.ts +4 -54
- package/dist/config/model-profile-store.js +3 -3
- package/dist/config/prompt-history.js +1 -1
- package/dist/config/store.d.ts +2 -2
- package/dist/config/store.js +3 -3
- package/dist/diagnostics/doctor.js +4 -4
- package/dist/exec/bridge/decisions.d.ts +1 -1
- package/dist/exec/bridge/human-answers.d.ts +1 -1
- package/dist/exec/bridge/human-answers.js +1 -1
- package/dist/exec/bridge/protocol.d.ts +1 -1
- package/dist/exec/bridge/server.js +1 -1
- package/dist/exec/events.d.ts +2 -2
- package/dist/exec/index.d.ts +1 -1
- package/dist/exec/index.js +1 -1
- package/dist/exec/permission.js +1 -1
- package/dist/exec/runner.d.ts +3 -3
- package/dist/exec/runner.js +2 -2
- package/dist/exec/threads/runtime.js +1 -1
- package/dist/fast/digest.d.ts +1 -1
- package/dist/fast/digest.js +1 -1
- package/dist/fast/frames.d.ts +1 -1
- package/dist/fast/frames.js +1 -1
- package/dist/fast/prompt.d.ts +1 -1
- package/dist/fast/prompt.js +1 -1
- package/dist/fast/review-call.js +1 -1
- package/dist/fast/reviewer.d.ts +3 -3
- package/dist/fast/reviewer.js +1 -1
- package/dist/fast/summary-call.d.ts +3 -3
- package/dist/fast/summary-call.js +2 -2
- package/dist/fast/summary-prompt.d.ts +1 -1
- package/dist/fast/summary-prompt.js +1 -1
- package/dist/fast/wiring.d.ts +4 -4
- package/dist/fast/wiring.js +1 -1
- package/dist/governance/card-normalize.d.ts +1 -1
- package/dist/governance/copy.d.ts +1 -1
- package/dist/governance/copy.js +2 -2
- package/dist/governance/engine/artifact-persist.d.ts +1 -1
- package/dist/governance/engine/budget.d.ts +1 -1
- package/dist/governance/engine/budget.js +1 -1
- package/dist/governance/engine/cards.d.ts +1 -1
- package/dist/governance/engine/digest.js +1 -1
- package/dist/governance/engine/engine-core.d.ts +5 -5
- package/dist/governance/engine/engine-core.js +1 -1
- package/dist/governance/engine/engine.d.ts +1 -1
- package/dist/governance/engine/engine.js +1 -1
- package/dist/governance/engine/estimate.d.ts +1 -1
- package/dist/governance/engine/estimate.js +1 -1
- package/dist/governance/engine/inspector.js +2 -2
- package/dist/governance/engine/integration.d.ts +1 -1
- package/dist/governance/engine/lifecycle.d.ts +1 -1
- package/dist/governance/engine/lifecycle.js +1 -1
- package/dist/governance/engine/phase-members.d.ts +1 -1
- package/dist/governance/engine/phase-planner.d.ts +1 -1
- package/dist/governance/engine/phase-planner.js +1 -1
- package/dist/governance/engine/rebuild.d.ts +1 -1
- package/dist/governance/engine/report.d.ts +1 -1
- package/dist/governance/engine/report.js +1 -1
- package/dist/governance/engine/run-digest.d.ts +1 -1
- package/dist/governance/engine/spec-builder.d.ts +2 -2
- package/dist/governance/engine/spec-builder.js +2 -2
- package/dist/governance/engine/stage-runner.js +2 -2
- package/dist/governance/engine/start-input.d.ts +1 -1
- package/dist/governance/engine/start-input.js +1 -1
- package/dist/governance/engine/state-machine.d.ts +1 -1
- package/dist/governance/engine/state-machine.js +3 -3
- package/dist/governance/engine/submission-queries.d.ts +1 -1
- package/dist/governance/engine/submission-render.d.ts +1 -1
- package/dist/governance/engine/submissions.d.ts +1 -1
- package/dist/governance/engine/submissions.js +1 -1
- package/dist/governance/engine/visibility.d.ts +1 -1
- package/dist/governance/engine/visibility.js +1 -1
- package/dist/governance/posture-transition.d.ts +2 -2
- package/dist/governance/posture-transition.js +1 -1
- package/dist/governance/profiles.d.ts +1 -1
- package/dist/governance/prompts/orchestrator-block.d.ts +2 -2
- package/dist/governance/prompts/orchestrator-block.js +2 -2
- package/dist/governance/prompts/plan-addendum.d.ts +1 -1
- package/dist/governance/prompts/plan-addendum.js +1 -1
- package/dist/governance/prompts/role-blocks.d.ts +2 -2
- package/dist/governance/prompts/role-blocks.js +1 -1
- package/dist/governance/report-reader.js +1 -1
- package/dist/governance/roles.d.ts +1 -1
- package/dist/governance/rules/claims.d.ts +1 -1
- package/dist/governance/rules/claims.js +1 -1
- package/dist/governance/rules/elimination.d.ts +1 -1
- package/dist/governance/rules/elimination.js +1 -1
- package/dist/governance/rules/failure-analysis.d.ts +2 -2
- package/dist/governance/rules/failure-analysis.js +1 -1
- package/dist/governance/rules/ledger-replay.d.ts +1 -1
- package/dist/governance/rules/ledger-state.d.ts +1 -1
- package/dist/governance/rules/ledger-state.js +1 -1
- package/dist/governance/rules/ledger.d.ts +2 -2
- package/dist/governance/rules/ledger.js +2 -2
- package/dist/governance/rules/rca.d.ts +1 -1
- package/dist/governance/rules/rca.js +1 -1
- package/dist/governance/rules/settlement.d.ts +2 -2
- package/dist/governance/rules/settlement.js +2 -2
- package/dist/governance/rules/suspicion.d.ts +1 -1
- package/dist/governance/store/artifacts.d.ts +1 -1
- package/dist/governance/store/artifacts.js +1 -1
- package/dist/governance/store/events-log.d.ts +1 -1
- package/dist/governance/store/run-store.d.ts +1 -1
- package/dist/governance/store/run-store.js +1 -1
- package/dist/governance/store/scoreboard-export.d.ts +1 -1
- package/dist/governance/tools/child-tools.d.ts +1 -1
- package/dist/governance/tools/guard.d.ts +1 -1
- package/dist/governance/tools/guard.js +1 -1
- package/dist/governance/tools/inspector-tools.d.ts +2 -2
- package/dist/governance/tools/inspector-tools.js +2 -2
- package/dist/governance/tools/lead-tools.d.ts +1 -1
- package/dist/governance/tools/lead-tools.js +1 -1
- package/dist/governance/tools/normalize-util.js +1 -1
- package/dist/governance/tools/scan-incomplete.js +1 -1
- package/dist/governance/tools/shared-tools.d.ts +1 -1
- package/dist/governance/tools/shared-tools.js +1 -1
- package/dist/governance/tools/submit-normalizers.d.ts +1 -1
- package/dist/governance/tools/submit-normalizers.js +1 -1
- package/dist/governance/tools/submit-tools.d.ts +1 -1
- package/dist/logging/cli-commands.js +1 -1
- package/dist/logging/install.d.ts +1 -1
- package/dist/logging/install.js +3 -3
- package/dist/logging/logger.d.ts +2 -2
- package/dist/logging/logger.js +31 -2
- package/dist/proc/kill-tree.js +1 -1
- package/dist/proc/log-mirror.js +1 -1
- package/dist/proc/log-ring.js +2 -2
- package/dist/proc/notices.d.ts +1 -1
- package/dist/proc/notices.js +2 -2
- package/dist/proc/prompt.d.ts +1 -1
- package/dist/proc/prompt.js +8 -5
- package/dist/proc/readiness.js +1 -1
- package/dist/proc/supervisor.d.ts +1 -1
- package/dist/proc/supervisor.js +10 -4
- package/dist/proc/wait-plan.d.ts +39 -0
- package/dist/proc/wait-plan.js +77 -0
- package/dist/proc/wait.d.ts +37 -4
- package/dist/proc/wait.js +68 -5
- package/dist/prompts/command.d.ts +1 -1
- package/dist/prompts/command.js +1 -1
- package/dist/prompts/normalize.d.ts +1 -1
- package/dist/prompts/normalize.js +1 -1
- package/dist/prompts/resolve.d.ts +1 -1
- package/dist/prompts/store.d.ts +2 -12
- package/dist/prompts/store.js +6 -60
- package/dist/session/checkpoint.d.ts +2 -2
- package/dist/session/checkpoint.js +2 -0
- package/dist/session/clear-archive.d.ts +2 -2
- package/dist/session/persist.d.ts +2 -2
- package/dist/session/persist.js +20 -3
- package/dist/session/startup-session.d.ts +2 -2
- package/dist/session/validate-session.js +6 -3
- package/dist/skills/service.d.ts +2 -2
- package/dist/team/bus.d.ts +1 -1
- package/dist/team/bus.js +1 -1
- package/dist/team/child-reviewer.d.ts +2 -2
- package/dist/team/child-reviewer.js +1 -1
- package/dist/team/comm-tools.js +1 -1
- package/dist/team/dispatch-gate.js +1 -1
- package/dist/team/forced-dispatch.js +1 -1
- package/dist/team/forced-mode.d.ts +1 -1
- package/dist/team/forced-prompt.d.ts +1 -1
- package/dist/team/forced-prompt.js +1 -1
- package/dist/team/normalize.d.ts +1 -1
- package/dist/team/normalize.js +1 -1
- package/dist/team/overseer.d.ts +3 -3
- package/dist/team/overseer.js +3 -3
- package/dist/team/prompt.d.ts +1 -1
- package/dist/team/prompt.js +1 -1
- package/dist/team/report.d.ts +2 -2
- package/dist/team/report.js +2 -2
- package/dist/team/retry.d.ts +1 -1
- package/dist/team/retry.js +1 -1
- package/dist/team/runtime.d.ts +4 -4
- package/dist/team/runtime.js +2 -2
- package/dist/team/settled.d.ts +2 -2
- package/dist/team/subagent.d.ts +4 -4
- package/dist/team/subagent.js +5 -5
- package/dist/team/task-tool.d.ts +1 -1
- package/dist/team/task-tool.js +1 -1
- package/dist/todo/normalize.d.ts +1 -1
- package/dist/todo/normalize.js +1 -1
- package/dist/todo/prompt.d.ts +1 -1
- package/dist/todo/prompt.js +1 -1
- package/dist/todo/store.d.ts +1 -1
- package/dist/todo/store.js +2 -2
- package/dist/todo/todo-tool.d.ts +1 -1
- package/dist/todo/todo-tool.js +2 -2
- package/dist/tools/bash-tool.d.ts +1 -1
- package/dist/tools/bash-tool.js +2 -2
- package/dist/tools/diff.d.ts +1 -1
- package/dist/tools/diff.js +1 -1
- package/dist/tools/file-change-store.d.ts +1 -1
- package/dist/tools/fs-tools.d.ts +2 -2
- package/dist/tools/fs-tools.js +1 -1
- package/dist/tools/index.d.ts +3 -3
- package/dist/tools/index.js +1 -1
- package/dist/tools/job-tools.d.ts +14 -3
- package/dist/tools/job-tools.js +158 -35
- package/dist/tools/plan-tools.d.ts +1 -1
- package/dist/tools/plan-tools.js +1 -1
- package/dist/tools/proc-tools.d.ts +1 -1
- package/dist/tools/proc-tools.js +2 -2
- package/dist/update/classify-failure.d.ts +1 -1
- package/dist/update/install-lock.js +1 -1
- package/dist/update/install-source.d.ts +1 -1
- package/dist/update/installer.js +2 -2
- package/dist/update/npm-view.d.ts +1 -1
- package/dist/update/npm-view.js +1 -1
- package/dist/update/registry.d.ts +1 -1
- package/dist/update/registry.js +1 -1
- package/dist/update/service.d.ts +2 -2
- package/dist/update/service.js +2 -2
- package/package.json +7 -7
- package/dist/agent/agent-mode.d.ts +0 -108
- package/dist/agent/agent-mode.js +0 -121
- package/dist/agent/entry-limits.d.ts +0 -65
- package/dist/agent/entry-limits.js +0 -133
- package/dist/agent/governance-view.d.ts +0 -40
- package/dist/agent/governance-view.js +0 -40
- package/dist/agent/invocation-card.d.ts +0 -77
- package/dist/agent/invocation-card.js +0 -169
- package/dist/agent/model-probe-limits.d.ts +0 -39
- package/dist/agent/model-probe-limits.js +0 -25
- package/dist/agent/model-probe.d.ts +0 -104
- package/dist/agent/model-probe.js +0 -391
- package/dist/agent/queued-messages.d.ts +0 -23
- package/dist/agent/queued-messages.js +0 -49
- package/dist/agent/reducer.d.ts +0 -837
- package/dist/agent/reducer.js +0 -1617
- package/dist/agent/retry-view.d.ts +0 -68
- package/dist/agent/retry-view.js +0 -95
- package/dist/agent/usage.d.ts +0 -47
- package/dist/agent/usage.js +0 -84
- package/dist/compaction/limits.d.ts +0 -61
- package/dist/compaction/limits.js +0 -64
- package/dist/compaction/meter.d.ts +0 -276
- package/dist/compaction/meter.js +0 -512
- package/dist/compaction/pressure.d.ts +0 -163
- package/dist/compaction/pressure.js +0 -199
- package/dist/compaction/reason-text.d.ts +0 -36
- package/dist/compaction/reason-text.js +0 -78
- package/dist/compaction/types.d.ts +0 -360
- package/dist/compaction/types.js +0 -22
- package/dist/config/governance-config.d.ts +0 -125
- package/dist/config/governance-config.js +0 -164
- package/dist/config/kit-resolution.d.ts +0 -93
- package/dist/config/kit-resolution.js +0 -226
- package/dist/config/model-kits.d.ts +0 -225
- package/dist/config/model-kits.js +0 -302
- package/dist/config/model-profile-resolution.d.ts +0 -28
- package/dist/config/model-profile-resolution.js +0 -88
- package/dist/config/model-profiles.d.ts +0 -103
- package/dist/config/model-profiles.js +0 -188
- package/dist/config/schema.d.ts +0 -1645
- package/dist/config/schema.js +0 -1377
- package/dist/fast/limits.d.ts +0 -152
- package/dist/fast/limits.js +0 -152
- package/dist/fast/resolve.d.ts +0 -44
- package/dist/fast/resolve.js +0 -107
- package/dist/fast/task-summary-types.d.ts +0 -66
- package/dist/fast/task-summary-types.js +0 -17
- package/dist/fast/types.d.ts +0 -141
- package/dist/fast/types.js +0 -14
- package/dist/governance/governed-dispatch.d.ts +0 -19
- package/dist/governance/governed-dispatch.js +0 -17
- package/dist/governance/limits.d.ts +0 -107
- package/dist/governance/limits.js +0 -131
- package/dist/governance/posture.d.ts +0 -35
- package/dist/governance/posture.js +0 -59
- package/dist/governance/rules/events-table.d.ts +0 -46
- package/dist/governance/rules/events-table.js +0 -94
- package/dist/governance/types.d.ts +0 -661
- package/dist/governance/types.js +0 -27
- package/dist/input/control-sequences.d.ts +0 -71
- package/dist/input/control-sequences.js +0 -222
- package/dist/input/csiu-keys.d.ts +0 -66
- package/dist/input/csiu-keys.js +0 -181
- package/dist/input/cursor-report.d.ts +0 -61
- package/dist/input/cursor-report.js +0 -97
- package/dist/input/enter-sequences.d.ts +0 -64
- package/dist/input/enter-sequences.js +0 -153
- package/dist/input/interrupt-gesture.d.ts +0 -18
- package/dist/input/interrupt-gesture.js +0 -19
- package/dist/input/keyboard-enhancement.d.ts +0 -42
- package/dist/input/keyboard-enhancement.js +0 -65
- package/dist/input/keymap.d.ts +0 -20
- package/dist/input/keymap.js +0 -99
- package/dist/input/limits.d.ts +0 -118
- package/dist/input/limits.js +0 -109
- package/dist/input/mouse-events.d.ts +0 -87
- package/dist/input/mouse-events.js +0 -212
- package/dist/input/paste-parse.d.ts +0 -83
- package/dist/input/paste-parse.js +0 -107
- package/dist/input/pointer-router.d.ts +0 -11
- package/dist/input/pointer-router.js +0 -14
- package/dist/input/stdin-filter.d.ts +0 -112
- package/dist/input/stdin-filter.js +0 -657
- package/dist/input/win32-input-mode.d.ts +0 -61
- package/dist/input/win32-input-mode.js +0 -269
- package/dist/logging/levels.d.ts +0 -40
- package/dist/logging/levels.js +0 -59
- package/dist/logging/secret-registry.d.ts +0 -32
- package/dist/logging/secret-registry.js +0 -73
- package/dist/proc/limits.d.ts +0 -200
- package/dist/proc/limits.js +0 -207
- package/dist/proc/progress.d.ts +0 -40
- package/dist/proc/progress.js +0 -135
- package/dist/proc/types.d.ts +0 -263
- package/dist/proc/types.js +0 -15
- package/dist/prompts/copy.d.ts +0 -89
- package/dist/prompts/copy.js +0 -131
- package/dist/prompts/fill.d.ts +0 -51
- package/dist/prompts/fill.js +0 -46
- package/dist/prompts/limits.d.ts +0 -53
- package/dist/prompts/limits.js +0 -53
- package/dist/prompts/search.d.ts +0 -58
- package/dist/prompts/search.js +0 -146
- package/dist/prompts/types.d.ts +0 -204
- package/dist/prompts/types.js +0 -13
- package/dist/team/activity.d.ts +0 -67
- package/dist/team/activity.js +0 -130
- package/dist/team/limits.d.ts +0 -308
- package/dist/team/limits.js +0 -330
- package/dist/team/model.d.ts +0 -104
- package/dist/team/model.js +0 -150
- package/dist/team/panel-rows.d.ts +0 -48
- package/dist/team/panel-rows.js +0 -75
- package/dist/team/timeline.d.ts +0 -74
- package/dist/team/timeline.js +0 -101
- package/dist/team/types.d.ts +0 -354
- package/dist/team/types.js +0 -13
- package/dist/todo/acceptance.d.ts +0 -120
- package/dist/todo/acceptance.js +0 -399
- package/dist/todo/follow-through.d.ts +0 -138
- package/dist/todo/follow-through.js +0 -248
- package/dist/todo/limits.d.ts +0 -152
- package/dist/todo/limits.js +0 -152
- package/dist/todo/panel-rows.d.ts +0 -45
- package/dist/todo/panel-rows.js +0 -70
- package/dist/todo/plan-sections.d.ts +0 -60
- package/dist/todo/plan-sections.js +0 -108
- package/dist/todo/row-window.d.ts +0 -51
- package/dist/todo/row-window.js +0 -107
- package/dist/todo/types.d.ts +0 -124
- package/dist/todo/types.js +0 -12
- package/dist/tools/human-input.d.ts +0 -212
- package/dist/tools/human-input.js +0 -265
- package/dist/tools/patch.d.ts +0 -115
- package/dist/tools/patch.js +0 -453
- package/dist/tools/terminal-output.d.ts +0 -115
- package/dist/tools/terminal-output.js +0 -201
- package/dist/tools/tool-output-store.d.ts +0 -68
- package/dist/tools/tool-output-store.js +0 -102
- package/dist/ui/ActivityLine.d.ts +0 -26
- package/dist/ui/ActivityLine.js +0 -48
- package/dist/ui/AutocompletePopup.d.ts +0 -23
- package/dist/ui/AutocompletePopup.js +0 -17
- package/dist/ui/BottomStatusRow.d.ts +0 -10
- package/dist/ui/BottomStatusRow.js +0 -9
- package/dist/ui/Composer.d.ts +0 -115
- package/dist/ui/Composer.js +0 -64
- package/dist/ui/GovernancePanel.d.ts +0 -50
- package/dist/ui/GovernancePanel.js +0 -77
- package/dist/ui/GovernanceRun.d.ts +0 -18
- package/dist/ui/GovernanceRun.js +0 -11
- package/dist/ui/Header.d.ts +0 -48
- package/dist/ui/Header.js +0 -27
- package/dist/ui/Logo.d.ts +0 -32
- package/dist/ui/Logo.js +0 -65
- package/dist/ui/Markdown.d.ts +0 -29
- package/dist/ui/Markdown.js +0 -116
- package/dist/ui/PromptCaret.d.ts +0 -11
- package/dist/ui/PromptCaret.js +0 -31
- package/dist/ui/PromptInput.d.ts +0 -192
- package/dist/ui/PromptInput.js +0 -689
- package/dist/ui/QueuePanel.d.ts +0 -8
- package/dist/ui/QueuePanel.js +0 -9
- package/dist/ui/QueueStatusRow.d.ts +0 -24
- package/dist/ui/QueueStatusRow.js +0 -51
- package/dist/ui/ScrollbackShell.d.ts +0 -132
- package/dist/ui/ScrollbackShell.js +0 -26
- package/dist/ui/SessionOpener.d.ts +0 -30
- package/dist/ui/SessionOpener.js +0 -12
- package/dist/ui/StatusBar.d.ts +0 -129
- package/dist/ui/StatusBar.js +0 -61
- package/dist/ui/TeamPanel.d.ts +0 -76
- package/dist/ui/TeamPanel.js +0 -103
- package/dist/ui/ToastStack.d.ts +0 -8
- package/dist/ui/ToastStack.js +0 -31
- package/dist/ui/TodoPanel.d.ts +0 -52
- package/dist/ui/TodoPanel.js +0 -214
- package/dist/ui/Transcript.d.ts +0 -105
- package/dist/ui/Transcript.js +0 -251
- package/dist/ui/UpdateLine.d.ts +0 -44
- package/dist/ui/UpdateLine.js +0 -129
- package/dist/ui/activity-phrases.d.ts +0 -33
- package/dist/ui/activity-phrases.js +0 -50
- package/dist/ui/capabilities.d.ts +0 -27
- package/dist/ui/capabilities.js +0 -65
- package/dist/ui/clipboard-task.d.ts +0 -29
- package/dist/ui/clipboard-task.js +0 -66
- package/dist/ui/clipboard.d.ts +0 -31
- package/dist/ui/clipboard.js +0 -157
- package/dist/ui/color-runtime.d.ts +0 -5
- package/dist/ui/color-runtime.js +0 -29
- package/dist/ui/composer-input.d.ts +0 -38
- package/dist/ui/composer-input.js +0 -79
- package/dist/ui/composer-limits.d.ts +0 -30
- package/dist/ui/composer-limits.js +0 -45
- package/dist/ui/composer-rows.d.ts +0 -73
- package/dist/ui/composer-rows.js +0 -129
- package/dist/ui/console-bridge.d.ts +0 -19
- package/dist/ui/console-bridge.js +0 -52
- package/dist/ui/density.d.ts +0 -26
- package/dist/ui/density.js +0 -34
- package/dist/ui/display-tab.d.ts +0 -51
- package/dist/ui/display-tab.js +0 -82
- package/dist/ui/editor-navigation.d.ts +0 -55
- package/dist/ui/editor-navigation.js +0 -96
- package/dist/ui/editor-reducer.d.ts +0 -108
- package/dist/ui/editor-reducer.js +0 -187
- package/dist/ui/enter-frames.d.ts +0 -47
- package/dist/ui/enter-frames.js +0 -117
- package/dist/ui/entries/AssistantEntry.d.ts +0 -37
- package/dist/ui/entries/AssistantEntry.js +0 -43
- package/dist/ui/entries/CompactionCard.d.ts +0 -88
- package/dist/ui/entries/CompactionCard.js +0 -222
- package/dist/ui/entries/DiffView.d.ts +0 -61
- package/dist/ui/entries/DiffView.js +0 -103
- package/dist/ui/entries/EntryFrame.d.ts +0 -23
- package/dist/ui/entries/EntryFrame.js +0 -6
- package/dist/ui/entries/FastCard.d.ts +0 -53
- package/dist/ui/entries/FastCard.js +0 -105
- package/dist/ui/entries/GovernanceCard.d.ts +0 -30
- package/dist/ui/entries/GovernanceCard.js +0 -32
- package/dist/ui/entries/InvocationCard.d.ts +0 -20
- package/dist/ui/entries/InvocationCard.js +0 -32
- package/dist/ui/entries/QueuedEntry.d.ts +0 -27
- package/dist/ui/entries/QueuedEntry.js +0 -33
- package/dist/ui/entries/RetryCard.d.ts +0 -56
- package/dist/ui/entries/RetryCard.js +0 -60
- package/dist/ui/entries/ServiceCard.d.ts +0 -82
- package/dist/ui/entries/ServiceCard.js +0 -151
- package/dist/ui/entries/TeamCard.d.ts +0 -55
- package/dist/ui/entries/TeamCard.js +0 -94
- package/dist/ui/entries/TodoCard.d.ts +0 -54
- package/dist/ui/entries/TodoCard.js +0 -98
- package/dist/ui/entries/ToolCard.d.ts +0 -81
- package/dist/ui/entries/ToolCard.js +0 -160
- package/dist/ui/entries/ToolPreview.d.ts +0 -59
- package/dist/ui/entries/ToolPreview.js +0 -208
- package/dist/ui/entries/UserEntry.d.ts +0 -36
- package/dist/ui/entries/UserEntry.js +0 -57
- package/dist/ui/exit-snapshot.d.ts +0 -43
- package/dist/ui/exit-snapshot.js +0 -26
- package/dist/ui/frame-differ.d.ts +0 -166
- package/dist/ui/frame-differ.js +0 -354
- package/dist/ui/frame-observer.d.ts +0 -17
- package/dist/ui/frame-observer.js +0 -94
- package/dist/ui/frame-parser.d.ts +0 -7
- package/dist/ui/frame-parser.js +0 -18
- package/dist/ui/gauge.d.ts +0 -39
- package/dist/ui/gauge.js +0 -55
- package/dist/ui/glyphs.d.ts +0 -178
- package/dist/ui/glyphs.js +0 -165
- package/dist/ui/governance-copy.d.ts +0 -69
- package/dist/ui/governance-copy.js +0 -104
- package/dist/ui/governance-status.d.ts +0 -145
- package/dist/ui/governance-status.js +0 -326
- package/dist/ui/gradient.d.ts +0 -11
- package/dist/ui/gradient.js +0 -50
- package/dist/ui/ink-runtime.d.ts +0 -4
- package/dist/ui/ink-runtime.js +0 -51
- package/dist/ui/interaction-copy.d.ts +0 -82
- package/dist/ui/interaction-copy.js +0 -38
- package/dist/ui/interaction-hints.d.ts +0 -44
- package/dist/ui/interaction-hints.js +0 -97
- package/dist/ui/layout/AppShell.d.ts +0 -17
- package/dist/ui/layout/AppShell.js +0 -6
- package/dist/ui/layout/Gutter.d.ts +0 -67
- package/dist/ui/layout/Gutter.js +0 -42
- package/dist/ui/layout/MeasuredEntry.d.ts +0 -21
- package/dist/ui/layout/MeasuredEntry.js +0 -30
- package/dist/ui/layout/OverlayFrame.d.ts +0 -73
- package/dist/ui/layout/OverlayFrame.js +0 -110
- package/dist/ui/layout/ScrollIndicator.d.ts +0 -32
- package/dist/ui/layout/ScrollIndicator.js +0 -22
- package/dist/ui/layout/ScrollViewport.d.ts +0 -40
- package/dist/ui/layout/ScrollViewport.js +0 -222
- package/dist/ui/layout/agents-board.d.ts +0 -102
- package/dist/ui/layout/agents-board.js +0 -389
- package/dist/ui/layout/autocomplete.d.ts +0 -18
- package/dist/ui/layout/autocomplete.js +0 -26
- package/dist/ui/layout/budget.d.ts +0 -43
- package/dist/ui/layout/budget.js +0 -52
- package/dist/ui/layout/cells.d.ts +0 -61
- package/dist/ui/layout/cells.js +0 -156
- package/dist/ui/layout/document-layout.d.ts +0 -13
- package/dist/ui/layout/document-layout.js +0 -10
- package/dist/ui/layout/follow-state.d.ts +0 -138
- package/dist/ui/layout/follow-state.js +0 -148
- package/dist/ui/layout/frame.d.ts +0 -36
- package/dist/ui/layout/frame.js +0 -39
- package/dist/ui/layout/governance-board.d.ts +0 -121
- package/dist/ui/layout/governance-board.js +0 -382
- package/dist/ui/layout/governance-card.d.ts +0 -53
- package/dist/ui/layout/governance-card.js +0 -134
- package/dist/ui/layout/governance-chip.d.ts +0 -38
- package/dist/ui/layout/governance-chip.js +0 -64
- package/dist/ui/layout/governance-panel.d.ts +0 -85
- package/dist/ui/layout/governance-panel.js +0 -358
- package/dist/ui/layout/governance-roster.d.ts +0 -65
- package/dist/ui/layout/governance-roster.js +0 -275
- package/dist/ui/layout/header-hints.d.ts +0 -90
- package/dist/ui/layout/header-hints.js +0 -110
- package/dist/ui/layout/header-left.d.ts +0 -115
- package/dist/ui/layout/header-left.js +0 -206
- package/dist/ui/layout/invocation-card.d.ts +0 -41
- package/dist/ui/layout/invocation-card.js +0 -91
- package/dist/ui/layout/kit-chip.d.ts +0 -50
- package/dist/ui/layout/kit-chip.js +0 -81
- package/dist/ui/layout/overlay-window.d.ts +0 -43
- package/dist/ui/layout/overlay-window.js +0 -51
- package/dist/ui/layout/queue-layout.d.ts +0 -19
- package/dist/ui/layout/queue-layout.js +0 -26
- package/dist/ui/layout/rail.d.ts +0 -7
- package/dist/ui/layout/rail.js +0 -16
- package/dist/ui/layout/scroll-indicator.d.ts +0 -27
- package/dist/ui/layout/scroll-indicator.js +0 -36
- package/dist/ui/layout/scroll.d.ts +0 -37
- package/dist/ui/layout/scroll.js +0 -99
- package/dist/ui/layout/scrollbar-geometry.d.ts +0 -17
- package/dist/ui/layout/scrollbar-geometry.js +0 -13
- package/dist/ui/layout/session-chip.d.ts +0 -52
- package/dist/ui/layout/session-chip.js +0 -64
- package/dist/ui/layout/shortcut-panel-layout.d.ts +0 -191
- package/dist/ui/layout/shortcut-panel-layout.js +0 -321
- package/dist/ui/layout/status-detail-layout.d.ts +0 -9
- package/dist/ui/layout/status-detail-layout.js +0 -79
- package/dist/ui/layout/status-layout.d.ts +0 -139
- package/dist/ui/layout/status-layout.js +0 -253
- package/dist/ui/layout/task-summary-cell.d.ts +0 -61
- package/dist/ui/layout/task-summary-cell.js +0 -65
- package/dist/ui/layout/team-panel.d.ts +0 -18
- package/dist/ui/layout/team-panel.js +0 -25
- package/dist/ui/layout/team-row.d.ts +0 -139
- package/dist/ui/layout/team-row.js +0 -246
- package/dist/ui/layout/todo-layout.d.ts +0 -62
- package/dist/ui/layout/todo-layout.js +0 -102
- package/dist/ui/layout/useTerminalSize.d.ts +0 -13
- package/dist/ui/layout/useTerminalSize.js +0 -50
- package/dist/ui/layout/viewport-geometry.d.ts +0 -29
- package/dist/ui/layout/viewport-geometry.js +0 -28
- package/dist/ui/layout/virtual-window.d.ts +0 -112
- package/dist/ui/layout/virtual-window.js +0 -488
- package/dist/ui/layout/wrap-rows.d.ts +0 -26
- package/dist/ui/layout/wrap-rows.js +0 -88
- package/dist/ui/live-clamp.d.ts +0 -14
- package/dist/ui/live-clamp.js +0 -46
- package/dist/ui/markdown-blocks.d.ts +0 -107
- package/dist/ui/markdown-blocks.js +0 -240
- package/dist/ui/overlays/AgentsBoardOverlay.d.ts +0 -57
- package/dist/ui/overlays/AgentsBoardOverlay.js +0 -183
- package/dist/ui/overlays/ConfirmDialog.d.ts +0 -31
- package/dist/ui/overlays/ConfirmDialog.js +0 -44
- package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +0 -41
- package/dist/ui/overlays/GovernanceBoardOverlay.js +0 -76
- package/dist/ui/overlays/GovernanceSettingsPage.d.ts +0 -48
- package/dist/ui/overlays/GovernanceSettingsPage.js +0 -93
- package/dist/ui/overlays/HelpOverlay.d.ts +0 -29
- package/dist/ui/overlays/HelpOverlay.js +0 -232
- package/dist/ui/overlays/KitEditor.d.ts +0 -23
- package/dist/ui/overlays/KitEditor.js +0 -101
- package/dist/ui/overlays/KitManager.d.ts +0 -23
- package/dist/ui/overlays/KitManager.js +0 -104
- package/dist/ui/overlays/KitPicker.d.ts +0 -49
- package/dist/ui/overlays/KitPicker.js +0 -58
- package/dist/ui/overlays/ModelDiscoveryList.d.ts +0 -23
- package/dist/ui/overlays/ModelDiscoveryList.js +0 -161
- package/dist/ui/overlays/ModelPicker.d.ts +0 -26
- package/dist/ui/overlays/ModelPicker.js +0 -63
- package/dist/ui/overlays/ModelProfileEditor.d.ts +0 -29
- package/dist/ui/overlays/ModelProfileEditor.js +0 -168
- package/dist/ui/overlays/ModelProfilePicker.d.ts +0 -48
- package/dist/ui/overlays/ModelProfilePicker.js +0 -231
- package/dist/ui/overlays/PlanReviewOverlay.d.ts +0 -51
- package/dist/ui/overlays/PlanReviewOverlay.js +0 -132
- package/dist/ui/overlays/PromptEditorPage.d.ts +0 -48
- package/dist/ui/overlays/PromptEditorPage.js +0 -227
- package/dist/ui/overlays/PromptLibraryOverlay.d.ts +0 -37
- package/dist/ui/overlays/PromptLibraryOverlay.js +0 -191
- package/dist/ui/overlays/PromptPicker.d.ts +0 -36
- package/dist/ui/overlays/PromptPicker.js +0 -129
- package/dist/ui/overlays/PromptTextArea.d.ts +0 -86
- package/dist/ui/overlays/PromptTextArea.js +0 -141
- package/dist/ui/overlays/QuestionOverlay.d.ts +0 -39
- package/dist/ui/overlays/QuestionOverlay.js +0 -258
- package/dist/ui/overlays/QueueOverlay.d.ts +0 -22
- package/dist/ui/overlays/QueueOverlay.js +0 -79
- package/dist/ui/overlays/SettingsScreen.d.ts +0 -228
- package/dist/ui/overlays/SettingsScreen.js +0 -1037
- package/dist/ui/overlays/ShortcutPanel.d.ts +0 -39
- package/dist/ui/overlays/ShortcutPanel.js +0 -106
- package/dist/ui/overlays/TeamFanoutPage.d.ts +0 -51
- package/dist/ui/overlays/TeamFanoutPage.js +0 -90
- package/dist/ui/overlays/governance-settings.d.ts +0 -79
- package/dist/ui/overlays/governance-settings.js +0 -140
- package/dist/ui/overlays/kit-picker-state.d.ts +0 -87
- package/dist/ui/overlays/kit-picker-state.js +0 -136
- package/dist/ui/overlays/kit-settings-state.d.ts +0 -129
- package/dist/ui/overlays/kit-settings-state.js +0 -268
- package/dist/ui/overlays/model-probe-view.d.ts +0 -128
- package/dist/ui/overlays/model-probe-view.js +0 -225
- package/dist/ui/overlays/model-profile-state.d.ts +0 -177
- package/dist/ui/overlays/model-profile-state.js +0 -301
- package/dist/ui/overlays/prompt-library-state.d.ts +0 -162
- package/dist/ui/overlays/prompt-library-state.js +0 -335
- package/dist/ui/overlays/prompt-picker-state.d.ts +0 -71
- package/dist/ui/overlays/prompt-picker-state.js +0 -98
- package/dist/ui/overlays/team-fanout-state.d.ts +0 -106
- package/dist/ui/overlays/team-fanout-state.js +0 -155
- package/dist/ui/overlays/use-model-probe.d.ts +0 -30
- package/dist/ui/overlays/use-model-probe.js +0 -109
- package/dist/ui/palettes.d.ts +0 -112
- package/dist/ui/palettes.js +0 -130
- package/dist/ui/paste-frames.d.ts +0 -91
- package/dist/ui/paste-frames.js +0 -117
- package/dist/ui/paste-tokens.d.ts +0 -90
- package/dist/ui/paste-tokens.js +0 -147
- package/dist/ui/render-cache.d.ts +0 -81
- package/dist/ui/render-cache.js +0 -196
- package/dist/ui/render-governor.d.ts +0 -54
- package/dist/ui/render-governor.js +0 -78
- package/dist/ui/run-metrics.d.ts +0 -23
- package/dist/ui/run-metrics.js +0 -27
- package/dist/ui/run-status-row.d.ts +0 -61
- package/dist/ui/run-status-row.js +0 -54
- package/dist/ui/screen.d.ts +0 -107
- package/dist/ui/screen.js +0 -234
- package/dist/ui/scrollback/LiveTail.d.ts +0 -115
- package/dist/ui/scrollback/LiveTail.js +0 -48
- package/dist/ui/scrollback/band.d.ts +0 -114
- package/dist/ui/scrollback/band.js +0 -143
- package/dist/ui/scrollback/budget.d.ts +0 -90
- package/dist/ui/scrollback/budget.js +0 -100
- package/dist/ui/scrollback/canvas.d.ts +0 -100
- package/dist/ui/scrollback/canvas.js +0 -114
- package/dist/ui/scrollback/cursor-probe.d.ts +0 -71
- package/dist/ui/scrollback/cursor-probe.js +0 -133
- package/dist/ui/scrollback/drain.d.ts +0 -32
- package/dist/ui/scrollback/drain.js +0 -64
- package/dist/ui/scrollback/exit-summary.d.ts +0 -23
- package/dist/ui/scrollback/exit-summary.js +0 -25
- package/dist/ui/scrollback/limits.d.ts +0 -98
- package/dist/ui/scrollback/limits.js +0 -98
- package/dist/ui/scrollback/live-preview.d.ts +0 -34
- package/dist/ui/scrollback/live-preview.js +0 -118
- package/dist/ui/scrollback/overflow-print.d.ts +0 -108
- package/dist/ui/scrollback/overflow-print.js +0 -120
- package/dist/ui/scrollback/renderer.d.ts +0 -48
- package/dist/ui/scrollback/renderer.js +0 -186
- package/dist/ui/scrollback/scrollback-writer.d.ts +0 -174
- package/dist/ui/scrollback/scrollback-writer.js +0 -648
- package/dist/ui/scrollback/settled-boundary.d.ts +0 -42
- package/dist/ui/scrollback/settled-boundary.js +0 -109
- package/dist/ui/scrollback/tail-anchor.d.ts +0 -71
- package/dist/ui/scrollback/tail-anchor.js +0 -79
- package/dist/ui/scrollback/tail-window.d.ts +0 -73
- package/dist/ui/scrollback/tail-window.js +0 -89
- package/dist/ui/scrollback/use-scrollback-view.d.ts +0 -139
- package/dist/ui/scrollback/use-scrollback-view.js +0 -601
- package/dist/ui/scrollback/writer-shapes.d.ts +0 -127
- package/dist/ui/scrollback/writer-shapes.js +0 -159
- package/dist/ui/scrollbar-controller.d.ts +0 -30
- package/dist/ui/scrollbar-controller.js +0 -124
- package/dist/ui/selection/highlight.d.ts +0 -39
- package/dist/ui/selection/highlight.js +0 -64
- package/dist/ui/selection/screen-mirror.d.ts +0 -24
- package/dist/ui/selection/screen-mirror.js +0 -35
- package/dist/ui/selection/selection-controller.d.ts +0 -104
- package/dist/ui/selection/selection-controller.js +0 -372
- package/dist/ui/selection/selection.d.ts +0 -90
- package/dist/ui/selection/selection.js +0 -223
- package/dist/ui/shortcuts.d.ts +0 -81
- package/dist/ui/shortcuts.js +0 -221
- package/dist/ui/status-feedback.d.ts +0 -35
- package/dist/ui/status-feedback.js +0 -38
- package/dist/ui/stdout-frame-writer.d.ts +0 -74
- package/dist/ui/stdout-frame-writer.js +0 -155
- package/dist/ui/team-status.d.ts +0 -166
- package/dist/ui/team-status.js +0 -252
- package/dist/ui/terminal-plan.d.ts +0 -52
- package/dist/ui/terminal-plan.js +0 -49
- package/dist/ui/theme.d.ts +0 -96
- package/dist/ui/theme.js +0 -130
- package/dist/ui/transcript-text.d.ts +0 -41
- package/dist/ui/transcript-text.js +0 -282
- package/dist/ui/use-height-store.d.ts +0 -31
- package/dist/ui/use-height-store.js +0 -76
- package/dist/ui/use-render-governor.d.ts +0 -39
- package/dist/ui/use-render-governor.js +0 -57
- package/dist/ui/use-wheel-routing.d.ts +0 -57
- package/dist/ui/use-wheel-routing.js +0 -152
- package/dist/ui/win-vt-force.d.ts +0 -136
- package/dist/ui/win-vt-force.js +0 -237
- package/dist/ui/win-vt-input.d.ts +0 -57
- package/dist/ui/win-vt-input.js +0 -62
- package/dist/update/limits.d.ts +0 -111
- package/dist/update/limits.js +0 -111
- package/dist/update/semver.d.ts +0 -89
- package/dist/update/semver.js +0 -295
- package/dist/update/types.d.ts +0 -169
- package/dist/update/types.js +0 -68
- /package/dist/{ui → app}/session-bridge.d.ts +0 -0
- /package/dist/{ui → app}/session-bridge.js +0 -0
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Adaptive render governor (tui-render-performance L4 / R7). Pure, React-free.
|
|
3
|
-
*
|
|
4
|
-
* Neither the streaming coalescer nor Ink adapts when a frame overruns its
|
|
5
|
-
* budget: the coalescer keeps its 33 ms timer, Ink keeps its 32 ms throttle, and
|
|
6
|
-
* the event loop saturates. Renders then queue behind each other on Node's
|
|
7
|
-
* single thread and KEYSTROKES QUEUE BEHIND THE RENDERS — which is what turns a
|
|
8
|
-
* slow frame into an unresponsive terminal.
|
|
9
|
-
*
|
|
10
|
-
* The ladder is the safety net under L1/L2/L3, not a substitute for them: it
|
|
11
|
-
* cannot make a frame cheaper, only rarer. Its job is to turn any residual
|
|
12
|
-
* pathology from a freeze into a visibly slower but still interactive UI.
|
|
13
|
-
*
|
|
14
|
-
* I-L4-1 — the governor changes only HOW OFTEN the view updates. Never what is
|
|
15
|
-
* dispatched, never the order, never the final state. `mergeDeltas` already
|
|
16
|
-
* guarantees that a longer window is simply a larger merge and that any
|
|
17
|
-
* non-delta action flushes the pending run first, so the same event sequence
|
|
18
|
-
* must produce the same final `ViewState` at every rung
|
|
19
|
-
* (`render-governor.test.ts`).
|
|
20
|
-
*/
|
|
21
|
-
/** Coalescing intervals, in ms. Rung 0 is the pre-feature `COALESCE_MS`. */
|
|
22
|
-
export const GOVERNOR_LADDER = [33, 50, 80, 125, 200, 320];
|
|
23
|
-
/** Step up when a commit costs more than this fraction of the current interval. */
|
|
24
|
-
export const GOVERNOR_UP_RATIO = 0.7;
|
|
25
|
-
/**
|
|
26
|
-
* Consecutive cheap frames required before stepping back down.
|
|
27
|
-
*
|
|
28
|
-
* Hysteresis, and it has to be asymmetric: stepping up on one expensive frame
|
|
29
|
-
* and down on one cheap one would oscillate through the whole ladder while a
|
|
30
|
-
* long answer streams past a couple of code blocks.
|
|
31
|
-
*/
|
|
32
|
-
export const GOVERNOR_DOWN_STREAK = 8;
|
|
33
|
-
export function initialGovernor() {
|
|
34
|
-
return { rung: 0, cheapStreak: 0 };
|
|
35
|
-
}
|
|
36
|
-
/** Highest rung reachable under `maxIntervalMs`. Always at least 0. */
|
|
37
|
-
function topRung(maxIntervalMs) {
|
|
38
|
-
let top = 0;
|
|
39
|
-
for (let i = 1; i < GOVERNOR_LADDER.length; i += 1) {
|
|
40
|
-
if (GOVERNOR_LADDER[i] <= maxIntervalMs)
|
|
41
|
-
top = i;
|
|
42
|
-
}
|
|
43
|
-
return top;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* The coalescing interval for a state.
|
|
47
|
-
*
|
|
48
|
-
* Clamped to `maxIntervalMs` in BOTH directions: `maxRenderIntervalMs = 33`
|
|
49
|
-
* flattens the ladder to one rung, which is the documented way to get the
|
|
50
|
-
* pre-feature cadence without reaching for the kill switch.
|
|
51
|
-
*/
|
|
52
|
-
export function intervalOf(state, maxIntervalMs) {
|
|
53
|
-
const ceiling = Number.isFinite(maxIntervalMs) ? maxIntervalMs : GOVERNOR_LADDER[0];
|
|
54
|
-
const rung = Math.min(Math.max(0, Math.floor(state.rung)), topRung(ceiling));
|
|
55
|
-
return Math.min(ceiling, GOVERNOR_LADDER[rung] ?? GOVERNOR_LADDER[0]);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Fold one commit's cost into the ladder.
|
|
59
|
-
*
|
|
60
|
-
* `lastCommitMs` covers React reconciliation AND Ink's yoga layout, because Ink
|
|
61
|
-
* computes layout in `onRender`, which React runs before layout effects. It does
|
|
62
|
-
* NOT cover Ink's serialisation and the stdout write, which happen after. In
|
|
63
|
-
* practice layout dominates, and the ladder's job is DIRECTION, not accuracy.
|
|
64
|
-
*/
|
|
65
|
-
export function stepGovernor(state, lastCommitMs, maxIntervalMs) {
|
|
66
|
-
const top = topRung(Number.isFinite(maxIntervalMs) ? maxIntervalMs : GOVERNOR_LADDER[0]);
|
|
67
|
-
const rung = Math.min(Math.max(0, Math.floor(state.rung)), top);
|
|
68
|
-
const interval = intervalOf({ rung, cheapStreak: state.cheapStreak }, maxIntervalMs);
|
|
69
|
-
const cost = Number.isFinite(lastCommitMs) ? lastCommitMs : 0;
|
|
70
|
-
if (cost > interval * GOVERNOR_UP_RATIO) {
|
|
71
|
-
return { rung: Math.min(top, rung + 1), cheapStreak: 0 };
|
|
72
|
-
}
|
|
73
|
-
const streak = state.cheapStreak + 1;
|
|
74
|
-
if (streak >= GOVERNOR_DOWN_STREAK) {
|
|
75
|
-
return { rung: Math.max(0, rung - 1), cheapStreak: 0 };
|
|
76
|
-
}
|
|
77
|
-
return { rung, cheapStreak: streak };
|
|
78
|
-
}
|
package/dist/ui/run-metrics.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/** UI-only metrics. Feed only the existing generation-guarded main subscription. */
|
|
2
|
-
export interface RunMetrics {
|
|
3
|
-
runId: number;
|
|
4
|
-
startedAt: number | null;
|
|
5
|
-
endedAt: number | null;
|
|
6
|
-
outputTokens: number;
|
|
7
|
-
usageKnown: boolean;
|
|
8
|
-
}
|
|
9
|
-
export interface RunMetricsEvent {
|
|
10
|
-
type: string;
|
|
11
|
-
usage?: {
|
|
12
|
-
outputTokens?: number;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
export interface RunMetricsProjection {
|
|
16
|
-
elapsedMs: number;
|
|
17
|
-
tokPerSec: number;
|
|
18
|
-
speedKnown: boolean;
|
|
19
|
-
}
|
|
20
|
-
export declare function createRunMetrics(): RunMetrics;
|
|
21
|
-
export declare function freezeRunMetrics(state: RunMetrics, now: number): RunMetrics;
|
|
22
|
-
export declare function updateRunMetrics(state: RunMetrics, event: RunMetricsEvent, now: number): RunMetrics;
|
|
23
|
-
export declare function projectRunMetrics(state: RunMetrics, now: number): RunMetricsProjection;
|
package/dist/ui/run-metrics.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export function createRunMetrics() {
|
|
2
|
-
return { runId: 0, startedAt: null, endedAt: null, outputTokens: 0, usageKnown: false };
|
|
3
|
-
}
|
|
4
|
-
export function freezeRunMetrics(state, now) {
|
|
5
|
-
if (state.startedAt === null || state.endedAt !== null)
|
|
6
|
-
return state;
|
|
7
|
-
return { ...state, endedAt: Number.isFinite(now) ? Math.max(state.startedAt, now) : state.startedAt };
|
|
8
|
-
}
|
|
9
|
-
export function updateRunMetrics(state, event, now) {
|
|
10
|
-
if (event.type === 'agent_start')
|
|
11
|
-
return { ...createRunMetrics(), runId: state.runId + 1,
|
|
12
|
-
startedAt: Number.isFinite(now) ? now : 0 };
|
|
13
|
-
if (state.startedAt === null || state.endedAt !== null)
|
|
14
|
-
return state;
|
|
15
|
-
if (event.type === 'agent_end' || event.type === 'error')
|
|
16
|
-
return freezeRunMetrics(state, now);
|
|
17
|
-
const output = event.usage?.outputTokens;
|
|
18
|
-
if (event.type !== 'turn_end' || output === undefined || !Number.isFinite(output) || output < 0)
|
|
19
|
-
return state;
|
|
20
|
-
return { ...state, outputTokens: Math.min(Number.MAX_VALUE, state.outputTokens + output), usageKnown: true };
|
|
21
|
-
}
|
|
22
|
-
export function projectRunMetrics(state, now) {
|
|
23
|
-
const end = state.endedAt ?? (Number.isFinite(now) ? now : state.startedAt ?? 0);
|
|
24
|
-
const elapsedMs = state.startedAt === null ? 0 : Math.max(0, end - state.startedAt);
|
|
25
|
-
const speedKnown = state.startedAt !== null && state.endedAt === null && state.usageKnown && elapsedMs > 500;
|
|
26
|
-
return { elapsedMs, speedKnown, tokPerSec: speedKnown ? state.outputTokens / (elapsedMs / 1000) : 0 };
|
|
27
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/** Compatibility planner for former composer run rows. The current UI uses
|
|
2
|
-
* status-layout.ts and interaction-hints.ts; keep this pure API for existing callers.
|
|
3
|
-
*/
|
|
4
|
-
import type { StatusLayoutInput } from './layout/status-layout.js';
|
|
5
|
-
/** Shared activity facts; omitted phase fields retain the legacy phrase behavior. */
|
|
6
|
-
export interface RunActivity {
|
|
7
|
-
phase?: StatusLayoutInput['phase'];
|
|
8
|
-
outcome?: StatusLayoutInput['runOutcome'];
|
|
9
|
-
activeTool?: StatusLayoutInput['activeTool'];
|
|
10
|
-
/** Epoch ms the current run began - the phrase sequence's seed. */
|
|
11
|
-
startedAt: number;
|
|
12
|
-
/** `Date.now() - startedAt`, already computed by App's 200 ms ticker. */
|
|
13
|
-
elapsedMs: number;
|
|
14
|
-
/** The RAW config flag, never the widened one (single-spinner D-5). */
|
|
15
|
-
reducedMotion: boolean;
|
|
16
|
-
/** The tool currently in flight, if any. */
|
|
17
|
-
runningTool?: string;
|
|
18
|
-
/** A context compaction is in flight; outranks the tool name and the phrase. */
|
|
19
|
-
compacting?: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* A BOUNDED WAIT IS IN FLIGHT (long-task-jobs §4.9).
|
|
22
|
-
*
|
|
23
|
-
* `Running job_wait` is a TOOL NAME; `Waiting on t3 (up to 30s)` is a STATE, and
|
|
24
|
-
* the state is what answers the user's two questions - what is it waiting for,
|
|
25
|
-
* and how long may that take. No countdown: a ticking number would need its own
|
|
26
|
-
* re-render, and the sentence is already complete.
|
|
27
|
-
*/
|
|
28
|
-
wait?: {
|
|
29
|
-
jobId: string;
|
|
30
|
-
upToSeconds: number;
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
export interface RunRowPlanInput {
|
|
34
|
-
/** Width of the row's container (the composer's content columns). */
|
|
35
|
-
cols: number;
|
|
36
|
-
/** Spinner + space + label, in display columns (the label's natural width). */
|
|
37
|
-
labelCols: number;
|
|
38
|
-
/** Display width of each hint clause, most urgent first. */
|
|
39
|
-
hintClauseCols: readonly number[];
|
|
40
|
-
/** Display width of the separator between clauses (` · ` or ` - `). */
|
|
41
|
-
separatorCols: number;
|
|
42
|
-
/** Display width of the right-aligned mode chip; 0 = no chip. */
|
|
43
|
-
chipCols: number;
|
|
44
|
-
}
|
|
45
|
-
export interface RunRowPlan {
|
|
46
|
-
/** Columns the label may occupy; below its natural width it is ellipsized. */
|
|
47
|
-
labelCols: number;
|
|
48
|
-
/** How many leading clauses to show; 0 = none (defensive tier only). */
|
|
49
|
-
hintClauses: number;
|
|
50
|
-
/** Whether the chip fits after everything else. */
|
|
51
|
-
chip: boolean;
|
|
52
|
-
}
|
|
53
|
-
/** One leading space, matching the idle hint row's `' '` indent. */
|
|
54
|
-
export declare const RUN_ROW_LEAD = 1;
|
|
55
|
-
/** Narrowest the label may be squeezed before a clause is dropped instead. */
|
|
56
|
-
export declare const RUN_ROW_MIN_LABEL_COLS = 10;
|
|
57
|
-
/** `steer` and `interrupt`: always whole while the row is enabled. */
|
|
58
|
-
export declare const RUN_ROW_REQUIRED_CLAUSES = 2;
|
|
59
|
-
/** Space kept between the last clause and the chip. */
|
|
60
|
-
export declare const RUN_ROW_CHIP_GAP = 2;
|
|
61
|
-
export declare function planRunRow(input: RunRowPlanInput): RunRowPlan;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/** Compatibility planner for former composer run rows. The current UI uses
|
|
2
|
-
* status-layout.ts and interaction-hints.ts; keep this pure API for existing callers.
|
|
3
|
-
*/
|
|
4
|
-
/** One leading space, matching the idle hint row's `' '` indent. */
|
|
5
|
-
export const RUN_ROW_LEAD = 1;
|
|
6
|
-
/** Narrowest the label may be squeezed before a clause is dropped instead. */
|
|
7
|
-
export const RUN_ROW_MIN_LABEL_COLS = 10;
|
|
8
|
-
/** `steer` and `interrupt`: always whole while the row is enabled. */
|
|
9
|
-
export const RUN_ROW_REQUIRED_CLAUSES = 2;
|
|
10
|
-
/** Space kept between the last clause and the chip. */
|
|
11
|
-
export const RUN_ROW_CHIP_GAP = 2;
|
|
12
|
-
/** Non-finite or negative widths collapse to 0 so no input can make the plan throw. */
|
|
13
|
-
function width(value) {
|
|
14
|
-
return Number.isFinite(value) && value > 0 ? Math.floor(value) : 0;
|
|
15
|
-
}
|
|
16
|
-
/** Width of the first `count` clauses joined by `separator`. */
|
|
17
|
-
function clausesWidth(clauses, count, separator) {
|
|
18
|
-
if (count <= 0)
|
|
19
|
-
return 0;
|
|
20
|
-
let total = separator * (count - 1);
|
|
21
|
-
for (let i = 0; i < count; i += 1)
|
|
22
|
-
total += clauses[i] ?? 0;
|
|
23
|
-
return total;
|
|
24
|
-
}
|
|
25
|
-
export function planRunRow(input) {
|
|
26
|
-
const inner = Math.max(0, width(input.cols) - RUN_ROW_LEAD);
|
|
27
|
-
const natural = width(input.labelCols);
|
|
28
|
-
const separator = width(input.separatorCols);
|
|
29
|
-
const chipCols = width(input.chipCols);
|
|
30
|
-
const clauses = input.hintClauseCols.map(width);
|
|
31
|
-
const total = clauses.length;
|
|
32
|
-
const labelOnly = {
|
|
33
|
-
labelCols: Math.min(natural, inner), hintClauses: 0, chip: false,
|
|
34
|
-
};
|
|
35
|
-
if (total < RUN_ROW_REQUIRED_CLAUSES)
|
|
36
|
-
return labelOnly;
|
|
37
|
-
// Tier 1: everything fits; the chip is the first thing to go.
|
|
38
|
-
const everything = natural + separator + clausesWidth(clauses, total, separator);
|
|
39
|
-
if (everything <= inner) {
|
|
40
|
-
const chip = chipCols > 0 && everything + RUN_ROW_CHIP_GAP + chipCols <= inner;
|
|
41
|
-
return { labelCols: natural, hintClauses: total, chip };
|
|
42
|
-
}
|
|
43
|
-
// Tier 2: drop clauses from the tail, but never below the required two; only the
|
|
44
|
-
// label may be squeezed (down to its minimum) to make the remaining clauses fit.
|
|
45
|
-
for (let kept = total - 1; kept >= RUN_ROW_REQUIRED_CLAUSES; kept -= 1) {
|
|
46
|
-
const available = inner - separator - clausesWidth(clauses, kept, separator);
|
|
47
|
-
if (available >= RUN_ROW_MIN_LABEL_COLS) {
|
|
48
|
-
return { labelCols: Math.min(natural, available), hintClauses: kept, chip: false };
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// Tier 3 (defensive, below ~40 columns): the label alone. The status bar's own
|
|
52
|
-
// `Esc x2 interrupt` carries the urgent hint at this width.
|
|
53
|
-
return labelOnly;
|
|
54
|
-
}
|
package/dist/ui/screen.d.ts
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Alternate screen buffer take-over (spec §4.4).
|
|
3
|
-
*
|
|
4
|
-
* Why the alt-screen and not a clear: `\x1b[3J` destroys the user's scrollback
|
|
5
|
-
* (their build log, their stack trace) — an unacceptable side effect for a
|
|
6
|
-
* developer tool. The alt-screen is non-destructive: the main buffer is covered,
|
|
7
|
-
* not erased, and comes back untouched on exit. It also parks the cursor at
|
|
8
|
-
* (1,1), which gives the frame accounting in §4.2 a deterministic origin.
|
|
9
|
-
*
|
|
10
|
-
* CALL SITE IS LOAD-BEARING: only `cli.tsx::runInteractive()` may call this.
|
|
11
|
-
* Hoisting it into `buildProgram()` / `parseAsync` would push `\x1b[?1049h`
|
|
12
|
-
* into `aragon -p "…" > out.txt`, `aragon config set`, and `aragon --version`.
|
|
13
|
-
*/
|
|
14
|
-
export interface ScreenHandle {
|
|
15
|
-
/** Leave the alternate screen. Idempotent — safe from every exit path. */
|
|
16
|
-
restore(): void;
|
|
17
|
-
/**
|
|
18
|
-
* Hand the mouse back to the terminal for this session, or take it again
|
|
19
|
-
* (tui-selection-and-scroll-follow §4.4.6 / G3). A no-op when this session
|
|
20
|
-
* never had a filter, and idempotent in both directions.
|
|
21
|
-
*
|
|
22
|
-
* This is the honest answer to "a user who wants their terminal's own
|
|
23
|
-
* selection", and it is reversible in one command instead of a restart plus a
|
|
24
|
-
* config edit (D-9).
|
|
25
|
-
*/
|
|
26
|
-
setMouseCapture(on: boolean): void;
|
|
27
|
-
}
|
|
28
|
-
export interface AltScreenOptions {
|
|
29
|
-
/**
|
|
30
|
-
* TRUE MEANS "A MOUSE FILTER IS ALREADY INSTALLED", NOT "THE USER WANTS MOUSE
|
|
31
|
-
* SUPPORT" (invariant I-8).
|
|
32
|
-
*
|
|
33
|
-
* This module must never derive the value from config, env or platform.
|
|
34
|
-
* Enabling reporting without a filter in front of Ink does not degrade the
|
|
35
|
-
* feature — it types `[<0;12;5M` into the user's message on every click and
|
|
36
|
-
* every notch, which is strictly worse than the bug the feature fixes. The
|
|
37
|
-
* only caller is `cli.tsx::runInteractive`, and it passes `filter !== null`.
|
|
38
|
-
*/
|
|
39
|
-
readonly mouse: boolean;
|
|
40
|
-
/**
|
|
41
|
-
* Whether to request motion reporting (`?1002h`) alongside the two modes
|
|
42
|
-
* above — i.e. whether drag-select is on for this session.
|
|
43
|
-
*
|
|
44
|
-
* SAME "ALREADY DECIDED ELSEWHERE" DISCIPLINE AS `mouse`: this module must
|
|
45
|
-
* never derive it from config. `cli.tsx` passes
|
|
46
|
-
* `mouseOn`, after the filter and VT capability have been resolved.
|
|
47
|
-
*
|
|
48
|
-
* Optional, defaulting to `false`, so every pre-existing caller and every
|
|
49
|
-
* pre-existing test emits exactly the bytes it emitted before (AC-8 / T-34).
|
|
50
|
-
*/
|
|
51
|
-
readonly motion?: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* TRUE MEANS "A FILTER THAT CONSUMES `\x1b[200~` IS ALREADY INSTALLED", NOT
|
|
54
|
-
* "the user wants paste support" — the same discipline `mouse` carries (I-1 /
|
|
55
|
-
* I-8).
|
|
56
|
-
*
|
|
57
|
-
* Enabling DEC 2004 without a filter in front of Ink does not degrade the
|
|
58
|
-
* feature: it types `[200~` and `[201~` into the user's message on EVERY paste,
|
|
59
|
-
* which is strictly worse than the bug being fixed. `cli.tsx` passes
|
|
60
|
-
* `pasteOn && mode === 'fullscreen'`, and NOT `filter !== null && config.paste`
|
|
61
|
-
* — after the gate widened, the handle no longer answers any question except
|
|
62
|
-
* "is a stream wrapped?" (D-17 / I-11).
|
|
63
|
-
*
|
|
64
|
-
* Optional, defaulting to `false`, so every pre-existing caller and every
|
|
65
|
-
* pre-existing assertion emits exactly the bytes it emitted before.
|
|
66
|
-
*/
|
|
67
|
-
readonly bracketedPaste?: boolean;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Enter the alternate screen. A non-TTY stdout is a hard no-op (tests, pipes,
|
|
71
|
-
* CI) — writing screen-control sequences into a redirected file corrupts it.
|
|
72
|
-
*/
|
|
73
|
-
export declare function enterAltScreen(stdout: NodeJS.WriteStream | undefined, options?: AltScreenOptions): ScreenHandle;
|
|
74
|
-
export interface NativeScreenOptions {
|
|
75
|
-
/** Same discipline as `AltScreenOptions.bracketedPaste`: a filter that consumes it exists. */
|
|
76
|
-
readonly bracketedPaste?: boolean;
|
|
77
|
-
/**
|
|
78
|
-
* Line feeds to write BEFORE anything else, so the first batch starts from the
|
|
79
|
-
* bottom row of the screen (tui-bottom-anchored-live-region D4 rung 2).
|
|
80
|
-
*
|
|
81
|
-
* `cli.tsx` passes `rows - 1` when the cursor probe could not measure the
|
|
82
|
-
* position, and `0` when it did. Filling on a measured terminal would undo the
|
|
83
|
-
* measurement — and cost the page-flip this feature exists to avoid.
|
|
84
|
-
*/
|
|
85
|
-
readonly anchorFillRows?: number;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Native-scroll mode's counterpart of `enterAltScreen` (tui-native-terminal-scroll
|
|
89
|
-
* §4.8 / D6): it deliberately does almost nothing. The main buffer stays in use so
|
|
90
|
-
* the conversation lands in the terminal's own scrollback; there is no alternate
|
|
91
|
-
* screen, no mouse reporting and no DEC 1007 save/restore.
|
|
92
|
-
*
|
|
93
|
-
* The only modes it touches are DEC 2004 (bracketed paste), which changes how input
|
|
94
|
-
* is encoded and has nothing to do with scrolling, and — when the bottom anchor could
|
|
95
|
-
* not be measured — the one-off fill that puts the cursor on the last row. Returns the
|
|
96
|
-
* SAME `ScreenHandle` shape, so the four idempotent restore paths in `cli.tsx` need not
|
|
97
|
-
* know which mode is running. A non-TTY stdout is a hard no-op, like `enterAltScreen`.
|
|
98
|
-
*
|
|
99
|
-
* ORDER IS LOAD-BEARING: the fill goes FIRST. Written after `?2004h` it would be the
|
|
100
|
-
* same bytes, but written after any content it would scroll that content away.
|
|
101
|
-
*/
|
|
102
|
-
export declare function enterNativeScreen(stdout: NodeJS.WriteStream | undefined, options?: NativeScreenOptions): ScreenHandle;
|
|
103
|
-
/**
|
|
104
|
-
* Replay the session summary into the normal buffer after `restore()`, so the
|
|
105
|
-
* conversation does not evaporate along with the alternate screen.
|
|
106
|
-
*/
|
|
107
|
-
export declare function writeExitTranscript(stdout: NodeJS.WriteStream | undefined, text: string): void;
|
package/dist/ui/screen.js
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Alternate screen buffer take-over (spec §4.4).
|
|
3
|
-
*
|
|
4
|
-
* Why the alt-screen and not a clear: `\x1b[3J` destroys the user's scrollback
|
|
5
|
-
* (their build log, their stack trace) — an unacceptable side effect for a
|
|
6
|
-
* developer tool. The alt-screen is non-destructive: the main buffer is covered,
|
|
7
|
-
* not erased, and comes back untouched on exit. It also parks the cursor at
|
|
8
|
-
* (1,1), which gives the frame accounting in §4.2 a deterministic origin.
|
|
9
|
-
*
|
|
10
|
-
* CALL SITE IS LOAD-BEARING: only `cli.tsx::runInteractive()` may call this.
|
|
11
|
-
* Hoisting it into `buildProgram()` / `parseAsync` would push `\x1b[?1049h`
|
|
12
|
-
* into `aragon -p "…" > out.txt`, `aragon config set`, and `aragon --version`.
|
|
13
|
-
*/
|
|
14
|
-
import { fillBytes } from './scrollback/writer-shapes.js';
|
|
15
|
-
const ENTER_ALT = '\x1b[?1049h';
|
|
16
|
-
const LEAVE_ALT = '\x1b[?1049l';
|
|
17
|
-
const CURSOR_HOME = '\x1b[H';
|
|
18
|
-
const CLEAR_VISIBLE = '\x1b[2J';
|
|
19
|
-
/** Ink's log-update hides the cursor; a signal kill never gives it back. */
|
|
20
|
-
const SHOW_CURSOR = '\x1b[?25h';
|
|
21
|
-
/**
|
|
22
|
-
* `?1000` is NORMAL TRACKING (press / release), the minimum mode that reports
|
|
23
|
-
* wheel buttons; `?1006` selects SGR encoding so coordinates arrive as decimal
|
|
24
|
-
* text rather than raw bytes above 0x7F that `setEncoding('utf8')` would mangle.
|
|
25
|
-
*
|
|
26
|
-
* `?1002` is BUTTON-EVENT TRACKING: motion is reported ONLY WHILE A BUTTON IS
|
|
27
|
-
* HELD, which both scrollbar dragging and text selection need and costs exactly zero reports while the
|
|
28
|
-
* pointer is idle. This comment used to lump it together with `?1003` and
|
|
29
|
-
* dismiss both as "floods stdin on every pointer move" — true of `?1003`
|
|
30
|
-
* (any-event), false of `?1002`, and the sentence had to go in the same commit
|
|
31
|
-
* that started asking for it or it would stand as a documented reason not to
|
|
32
|
-
* (AC-11 / D-10).
|
|
33
|
-
*
|
|
34
|
-
* Motion is enabled with mouse reporting, independently of text selection.
|
|
35
|
-
* Disabling selection must still allow scrollbar gestures. The enable/disable
|
|
36
|
-
* sequences remain paired for both values of this resolved capability.
|
|
37
|
-
*/
|
|
38
|
-
const enableMouse = (motion) => `\x1b[?1000h${motion ? '\x1b[?1002h' : ''}\x1b[?1006h`;
|
|
39
|
-
const disableMouse = (motion) => `\x1b[?1006l${motion ? '\x1b[?1002l' : ''}\x1b[?1000l`;
|
|
40
|
-
/**
|
|
41
|
-
* Alternate scroll (DEC private mode 1007) is what turns a wheel notch into a
|
|
42
|
-
* burst of arrow keys, which `PromptInput` reads as prompt-history recall. With
|
|
43
|
-
* mouse reporting ON we do not touch it at all: 1007 is defined to translate
|
|
44
|
-
* the wheel only while no application is tracking the mouse, so `?1000h`
|
|
45
|
-
* already suppresses it and a second mutation of shared state buys nothing.
|
|
46
|
-
*
|
|
47
|
-
* With mouse reporting OFF we turn it off so the wheel is INERT rather than
|
|
48
|
-
* destructive — the fallback rung of the fail-safe ladder. But 1007 is GLOBAL
|
|
49
|
-
* TERMINAL STATE THIS APP DOES NOT OWN, so it is SAVED and RESTORED (XTSAVE /
|
|
50
|
-
* XTRESTORE) rather than force-set on the way out: a user who deliberately
|
|
51
|
-
* disabled alternate scroll in their terminal config must not have it switched
|
|
52
|
-
* back on by running `aragon --no-mouse` once. A terminal implementing neither
|
|
53
|
-
* sequence ignores both, so the fallback is no worse than writing nothing.
|
|
54
|
-
*/
|
|
55
|
-
const SAVE_ALT_SCROLL_OFF = '\x1b[?1007s\x1b[?1007l';
|
|
56
|
-
const RESTORE_ALT_SCROLL = '\x1b[?1007r';
|
|
57
|
-
/**
|
|
58
|
-
* Bracketed paste (DEC private mode 2004) — the terminal wraps a paste in
|
|
59
|
-
* `\x1b[200~` / `\x1b[201~`, which makes Tier 1 detection EXACT rather than a
|
|
60
|
-
* heuristic on chunk shape (tui-paste-handling D-6 / L2).
|
|
61
|
-
*
|
|
62
|
-
* WHY THIS IS FORCED OFF ON EXIT RATHER THAN SAVED AND RESTORED (P1-8). DEC 1007
|
|
63
|
-
* above is the same class of state — global, not ours — and gets the OPPOSITE
|
|
64
|
-
* treatment, so the asymmetry has to be written down or the next reader will
|
|
65
|
-
* "fix" the inconsistency:
|
|
66
|
-
*
|
|
67
|
-
* - `\x1b[?2004r` on a terminal that does not implement XTSAVE is a NO-OP, which
|
|
68
|
-
* leaves 2004 ON. A shell that does not itself speak bracketed paste then
|
|
69
|
-
* shows a literal `[200~` on every paste until the user runs `reset` — the
|
|
70
|
-
* exact I-1 failure, arriving from the restore path.
|
|
71
|
-
* - Forcing `?2004l` has no such failure mode. Every shell that DOES use
|
|
72
|
-
* bracketed paste (bash >= 4.4 readline, zsh ZLE, fish, PSReadLine) re-arms it
|
|
73
|
-
* when it draws its next prompt, so the state the user sees after `aragon`
|
|
74
|
-
* exits is the state they had. Every shell that does not use it was already
|
|
75
|
-
* off.
|
|
76
|
-
*
|
|
77
|
-
* So: 1007 is saved because getting it wrong silently changes a preference; 2004
|
|
78
|
-
* is forced because getting it wrong visibly breaks pasting, and the forced value
|
|
79
|
-
* is the one every consumer re-establishes for itself.
|
|
80
|
-
*/
|
|
81
|
-
const ENABLE_BRACKETED_PASTE = '\x1b[?2004h';
|
|
82
|
-
const DISABLE_BRACKETED_PASTE = '\x1b[?2004l';
|
|
83
|
-
const NOOP_HANDLE = { restore() { }, setMouseCapture() { } };
|
|
84
|
-
function safeWrite(stdout, data) {
|
|
85
|
-
try {
|
|
86
|
-
stdout.write(data);
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
// A closed/broken stdout must never turn into a crash on the exit path.
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Enter the alternate screen. A non-TTY stdout is a hard no-op (tests, pipes,
|
|
94
|
-
* CI) — writing screen-control sequences into a redirected file corrupts it.
|
|
95
|
-
*/
|
|
96
|
-
export function enterAltScreen(stdout, options = { mouse: false }) {
|
|
97
|
-
if (!stdout || !stdout.isTTY || typeof stdout.write !== 'function')
|
|
98
|
-
return NOOP_HANDLE;
|
|
99
|
-
const mouse = options.mouse === true;
|
|
100
|
-
const motion = options.motion === true;
|
|
101
|
-
const bracketedPaste = options.bracketedPaste === true;
|
|
102
|
-
safeWrite(stdout, ENTER_ALT +
|
|
103
|
-
CLEAR_VISIBLE +
|
|
104
|
-
CURSOR_HOME +
|
|
105
|
-
(mouse ? enableMouse(motion) : SAVE_ALT_SCROLL_OFF) +
|
|
106
|
-
(bracketedPaste ? ENABLE_BRACKETED_PASTE : ''));
|
|
107
|
-
/**
|
|
108
|
-
* THE CURRENT capture state, not the one the session started in (I-10).
|
|
109
|
-
*
|
|
110
|
-
* `restore()` used to close over the immutable `mouse` boolean. After
|
|
111
|
-
* `/mouse` exists that boolean is no longer the truth, and the exit path is
|
|
112
|
-
* the one place where being wrong leaves the user's shell broken until they
|
|
113
|
-
* run `reset`.
|
|
114
|
-
*/
|
|
115
|
-
let captured = mouse;
|
|
116
|
-
/**
|
|
117
|
-
* Whether OUR `XTSAVE` of DEC 1007 is outstanding.
|
|
118
|
-
*
|
|
119
|
-
* `XTSAVE` HAS ONE SLOT PER MODE, so the save and the restore must stay
|
|
120
|
-
* STRICTLY PAIRED: an `off` that saved while our own disable was already in
|
|
121
|
-
* effect would save OUR value, and the following restore would hand the user
|
|
122
|
-
* back a preference that was never theirs — permanently.
|
|
123
|
-
*/
|
|
124
|
-
let savedAltScroll = mouse ? false : true;
|
|
125
|
-
const setMouseCapture = (on) => {
|
|
126
|
-
// IT MUST NOT TOUCH DEC 2004 (I-16 / P2-7). `/mouse off` releases the
|
|
127
|
-
// pointer; it says nothing about pasting, and a user who turns the mouse off
|
|
128
|
-
// mid-session to select text with their terminal must not silently lose Tier
|
|
129
|
-
// 1 detection as well. The two modes are written by different call sites and
|
|
130
|
-
// unwound by different flags in `restore()`.
|
|
131
|
-
//
|
|
132
|
-
// A session that never installed a filter has nothing to release, and
|
|
133
|
-
// enabling reporting without one types `[<0;12;5M` into the user's message
|
|
134
|
-
// on every click (I-8). It stays a no-op in both directions.
|
|
135
|
-
if (!mouse || on === captured)
|
|
136
|
-
return;
|
|
137
|
-
captured = on;
|
|
138
|
-
if (on) {
|
|
139
|
-
// Alternate scroll goes back to the user's own preference BEFORE reporting
|
|
140
|
-
// resumes, so the two never overlap in the "both disabled" state.
|
|
141
|
-
safeWrite(stdout, (savedAltScroll ? RESTORE_ALT_SCROLL : '') + enableMouse(motion));
|
|
142
|
-
savedAltScroll = false;
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
// DEC 1007 IS THE HALF THAT MUST NOT BE DROPPED (P1-1). With reporting off,
|
|
146
|
-
// alternate scroll turns every wheel notch back into a burst of arrow keys,
|
|
147
|
-
// which `PromptInput` reads as prompt-history recall — replacing the user's
|
|
148
|
-
// draft with an old prompt. A `/mouse off` that wrote only the mouse
|
|
149
|
-
// sequences would hand that defect back on request, in the one command whose
|
|
150
|
-
// entire purpose is to make things better. Saved rather than force-set, so a
|
|
151
|
-
// user who deliberately disabled alternate scroll keeps their choice.
|
|
152
|
-
safeWrite(stdout, disableMouse(motion) + SAVE_ALT_SCROLL_OFF);
|
|
153
|
-
savedAltScroll = true;
|
|
154
|
-
};
|
|
155
|
-
let restored = false;
|
|
156
|
-
return {
|
|
157
|
-
restore() {
|
|
158
|
-
if (restored)
|
|
159
|
-
return;
|
|
160
|
-
restored = true;
|
|
161
|
-
// Mouse reporting is disabled BEFORE leaving the alternate screen (I-2).
|
|
162
|
-
// This handle is what all four exit paths converge on — `process.on
|
|
163
|
-
// ('exit')`, the crash handler's `setScreenRestore`, the signal
|
|
164
|
-
// terminator, and `waitUntilExit()` — which is why the sequences live
|
|
165
|
-
// here and not in `App.tsx`, a component that is on none of them.
|
|
166
|
-
// Leaving reporting on prints `[<0;12;5M` in the user's shell on every
|
|
167
|
-
// click, forever, until they run `reset`.
|
|
168
|
-
//
|
|
169
|
-
// IT UNWINDS THE CURRENT STATE (I-10): `captured` and `savedAltScroll` are
|
|
170
|
-
// read here rather than the startup `mouse` flag, so a session that ran
|
|
171
|
-
// `/mouse off` exits with exactly one outstanding save restored and
|
|
172
|
-
// nothing left reporting.
|
|
173
|
-
//
|
|
174
|
-
// DEC 2004 IS UNWOUND FROM THE STARTUP FLAG, not from a runtime one, and
|
|
175
|
-
// that is deliberate: `setMouseCapture` never touches it (I-16), so this
|
|
176
|
-
// session either enabled it at entry or never did.
|
|
177
|
-
const tail = (captured ? disableMouse(motion) : '') +
|
|
178
|
-
(bracketedPaste ? DISABLE_BRACKETED_PASTE : '') +
|
|
179
|
-
(savedAltScroll ? RESTORE_ALT_SCROLL : '');
|
|
180
|
-
safeWrite(stdout, tail + SHOW_CURSOR + LEAVE_ALT);
|
|
181
|
-
},
|
|
182
|
-
setMouseCapture,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Native-scroll mode's counterpart of `enterAltScreen` (tui-native-terminal-scroll
|
|
187
|
-
* §4.8 / D6): it deliberately does almost nothing. The main buffer stays in use so
|
|
188
|
-
* the conversation lands in the terminal's own scrollback; there is no alternate
|
|
189
|
-
* screen, no mouse reporting and no DEC 1007 save/restore.
|
|
190
|
-
*
|
|
191
|
-
* The only modes it touches are DEC 2004 (bracketed paste), which changes how input
|
|
192
|
-
* is encoded and has nothing to do with scrolling, and — when the bottom anchor could
|
|
193
|
-
* not be measured — the one-off fill that puts the cursor on the last row. Returns the
|
|
194
|
-
* SAME `ScreenHandle` shape, so the four idempotent restore paths in `cli.tsx` need not
|
|
195
|
-
* know which mode is running. A non-TTY stdout is a hard no-op, like `enterAltScreen`.
|
|
196
|
-
*
|
|
197
|
-
* ORDER IS LOAD-BEARING: the fill goes FIRST. Written after `?2004h` it would be the
|
|
198
|
-
* same bytes, but written after any content it would scroll that content away.
|
|
199
|
-
*/
|
|
200
|
-
export function enterNativeScreen(stdout, options = {}) {
|
|
201
|
-
if (!stdout || !stdout.isTTY || typeof stdout.write !== 'function')
|
|
202
|
-
return NOOP_HANDLE;
|
|
203
|
-
const bracketedPaste = options.bracketedPaste === true;
|
|
204
|
-
const fillRows = Math.max(0, Math.floor(options.anchorFillRows ?? 0));
|
|
205
|
-
const head = (fillRows > 0 ? fillBytes(fillRows) : '') +
|
|
206
|
-
(bracketedPaste ? ENABLE_BRACKETED_PASTE : '');
|
|
207
|
-
if (head.length > 0)
|
|
208
|
-
safeWrite(stdout, head);
|
|
209
|
-
let restored = false;
|
|
210
|
-
return {
|
|
211
|
-
restore() {
|
|
212
|
-
if (restored)
|
|
213
|
-
return;
|
|
214
|
-
restored = true;
|
|
215
|
-
// 2004 is FORCED off rather than saved/restored, for the reason recorded at
|
|
216
|
-
// `DISABLE_BRACKETED_PASTE`. The cursor is shown again because Ink's
|
|
217
|
-
// log-update hides it and a signal kill never gives it back.
|
|
218
|
-
safeWrite(stdout, (bracketedPaste ? DISABLE_BRACKETED_PASTE : '') + SHOW_CURSOR);
|
|
219
|
-
},
|
|
220
|
-
// No mouse reporting in this mode: nothing to hand back or take again.
|
|
221
|
-
setMouseCapture() { },
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Replay the session summary into the normal buffer after `restore()`, so the
|
|
226
|
-
* conversation does not evaporate along with the alternate screen.
|
|
227
|
-
*/
|
|
228
|
-
export function writeExitTranscript(stdout, text) {
|
|
229
|
-
if (!stdout || typeof stdout.write !== 'function')
|
|
230
|
-
return;
|
|
231
|
-
if (text.length === 0)
|
|
232
|
-
return;
|
|
233
|
-
safeWrite(stdout, text.endsWith('\n') ? text : `${text}\n`);
|
|
234
|
-
}
|