@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
package/dist/ui/frame-differ.js
DELETED
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Frame differ — F1 of tui-input-flicker-fix (§3.2).
|
|
3
|
-
*
|
|
4
|
-
* Ink 5.2.1 has exactly one repaint strategy: on every commit it serialises the
|
|
5
|
-
* WHOLE frame and hands it to `log-update`, which writes
|
|
6
|
-
* `eraseLines(previousLineCount) + frame` in a single `stdout.write`
|
|
7
|
-
* (`ink/build/log-update.js:17`). `ansiEscapes.eraseLines` walks BOTTOM-UP, so
|
|
8
|
-
* the composer — the last row of the frame — is erased near the start of every
|
|
9
|
-
* repaint and rewritten at the very end of it. During a run that happens 15–30
|
|
10
|
-
* times a second with the composer's bytes unchanged, and the user sees the
|
|
11
|
-
* bottom of their screen flicker while they type (§2 R1/R2).
|
|
12
|
-
*
|
|
13
|
-
* This module recognises that write shape, diffs the new frame against the
|
|
14
|
-
* previous one line by line, and emits only the rows that actually changed, each
|
|
15
|
-
* addressed absolutely. It is PURE: no I/O, no Node globals, no event emitter —
|
|
16
|
-
* `stdout-frame-writer.ts` is what binds it to a real stream. That is what keeps
|
|
17
|
-
* it unit-testable with plain string literals and no TTY.
|
|
18
|
-
*
|
|
19
|
-
* THREE INVARIANTS LIVE HERE AND EACH ONE FAILS SILENTLY IF DROPPED:
|
|
20
|
-
*
|
|
21
|
-
* - I-4 · An emitted line is `CUP · SGR0 · text · SGR0 · CSI K`, IN THAT ORDER,
|
|
22
|
-
* and it never contains `CSI 2K`. Erasing first would blank the row and refill
|
|
23
|
-
* it, which is R1's defect at 1/H the scale but on the one row the user is
|
|
24
|
-
* watching. Overwriting in place means no cell is ever presentably empty; the
|
|
25
|
-
* trailing `CSI K` removes only the residue a longer previous line left, and
|
|
26
|
-
* the trailing SGR reset before it stops a BCE terminal painting that residue
|
|
27
|
-
* in whatever background colour the line ended inside.
|
|
28
|
-
* `CSI K` IS EMITTED ONLY WHEN THE LINE IS NARROWER THAN THE TERMINAL. A row
|
|
29
|
-
* that already fills every column (the unified scrollbar paints the last one)
|
|
30
|
-
* has no residue to clear, and on terminals that keep the cursor ON the last
|
|
31
|
-
* column after writing it (a pending-wrap flag rather than a virtual column
|
|
32
|
-
* N+1) the EL would erase the cell that was just written. `cols` unknown keeps
|
|
33
|
-
* the old always-EL behaviour (`paintLine`).
|
|
34
|
-
* - I-5 · Every emitted batch ends parked on row `H+1`. Ink's own
|
|
35
|
-
* `previousLineCount` is computed from the string IT produced and is
|
|
36
|
-
* unaffected by what we actually wrote, so a later pass-through's
|
|
37
|
-
* `eraseLines(H+1)` must find the cursor exactly where log-update left it last
|
|
38
|
-
* time. Drop this and one fallback shifts the frame up a row for the rest of
|
|
39
|
-
* the session.
|
|
40
|
-
* - I-6 · Any unrecognised write invalidates the cache. Absolute addressing is
|
|
41
|
-
* valid only while nothing else writes to stdout. Full-screen mode already
|
|
42
|
-
* forbids that, but "forbidden" is not "impossible", and the failure mode of
|
|
43
|
-
* the guard being absent is a permanently misaligned screen while the failure
|
|
44
|
-
* mode of it firing spuriously is one extra full repaint.
|
|
45
|
-
*/
|
|
46
|
-
import stringWidth from 'string-width';
|
|
47
|
-
import stripAnsi from 'strip-ansi';
|
|
48
|
-
import { MIN_FULLSCREEN_ROWS } from './layout/frame.js';
|
|
49
|
-
import { matchInkErasePrefix } from './frame-parser.js';
|
|
50
|
-
// ---------------------------------------------------------------------------
|
|
51
|
-
// Constants — exact, so no call site ever re-derives an escape sequence.
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
/** Control Sequence Introducer. Spelled out once; nothing below re-escapes it. */
|
|
54
|
-
const CSI = '\x1b[';
|
|
55
|
-
/** Erase the WHOLE line. Ink uses it on every repaint; this module never emits it (I-4). */
|
|
56
|
-
const ERASE_LINE = `${CSI}2K`;
|
|
57
|
-
/** Erase cursor → end of line. This is what an emitted line ends with. */
|
|
58
|
-
const ERASE_TO_EOL = `${CSI}K`;
|
|
59
|
-
const CURSOR_UP_1 = `${CSI}1A`;
|
|
60
|
-
const CURSOR_LEFT = `${CSI}G`;
|
|
61
|
-
const SGR_RESET = `${CSI}0m`;
|
|
62
|
-
/** Erase cursor → end of screen. One sequence instead of H+1 line erases. */
|
|
63
|
-
const ERASE_DOWN = `${CSI}J`;
|
|
64
|
-
/** DEC private mode 2026 — begin/end synchronized update (F2, §3.3). */
|
|
65
|
-
const SYNC_BEGIN = `${CSI}?2026h`;
|
|
66
|
-
const SYNC_END = `${CSI}?2026l`;
|
|
67
|
-
/**
|
|
68
|
-
* `ansiEscapes.clearTerminal` — Ink's tall-frame write (`ink.js:121`).
|
|
69
|
-
*
|
|
70
|
-
* When `outputHeight >= stdout.rows` Ink abandons log-update and writes
|
|
71
|
-
* `clearTerminal + frame` in one chunk: no erase-lines prefix, no trailing
|
|
72
|
-
* `\n`. That happens on ANY height shrink, because Ink re-renders
|
|
73
|
-
* synchronously from its own `'resize'` handler while the React tree still
|
|
74
|
-
* holds the pre-resize height (`useTerminalSize` debounces 50 ms). Without
|
|
75
|
-
* recognition the chunk lands in the prefix-less branch and counts as a
|
|
76
|
-
* foreign write — the same §5.6 notice, one ordinary window-drag later.
|
|
77
|
-
*/
|
|
78
|
-
const CLEAR_TERMINAL = `${CSI}2J${CSI}3J${CSI}H`;
|
|
79
|
-
function cursorTo(row) {
|
|
80
|
-
return `${CSI}${row};1H`;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* One addressed row: `CUP · SGR0 · line · SGR0 [· CSI K]` (I-4).
|
|
84
|
-
*
|
|
85
|
-
* The trailing `CSI K` clears residue a longer previous line left behind, so it is
|
|
86
|
-
* only meaningful when the line is narrower than the terminal. A line that already
|
|
87
|
-
* fills `cols` columns ends with the cursor in the pending-wrap state, where some
|
|
88
|
-
* terminals run EL from the LAST column and erase the cell just written; those
|
|
89
|
-
* rows get no EL. Width is measured exactly as Ink measures it (`string-width` over
|
|
90
|
-
* the ANSI-stripped text) and only for rows that changed, so it costs at most one
|
|
91
|
-
* measurement per changed viewport row. `cols` unknown => the original always-EL.
|
|
92
|
-
*/
|
|
93
|
-
function paintLine(row, line, cols) {
|
|
94
|
-
const head = cursorTo(row) + SGR_RESET + line + SGR_RESET;
|
|
95
|
-
if (cols !== undefined && stringWidth(stripAnsi(line)) >= cols)
|
|
96
|
-
return head;
|
|
97
|
-
return head + ERASE_TO_EOL;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Rebuild `ansiEscapes.eraseLines(count)` byte for byte.
|
|
101
|
-
*
|
|
102
|
-
* Exported for the upgrade tripwire (`frame-differ-ink-shape.test.ts`), which
|
|
103
|
-
* drives the real `ink/build/log-update.js` and asserts this reconstruction is
|
|
104
|
-
* byte-equal to what it produced. If a future Ink changes the shape, that test
|
|
105
|
-
* fails loudly instead of this module silently degrading to pass-through for the
|
|
106
|
-
* rest of the package's life (K-2).
|
|
107
|
-
*/
|
|
108
|
-
export function eraseLinesPrefix(count) {
|
|
109
|
-
if (count <= 0)
|
|
110
|
-
return '';
|
|
111
|
-
let out = '';
|
|
112
|
-
for (let i = 0; i < count; i += 1) {
|
|
113
|
-
out += ERASE_LINE + (i < count - 1 ? CURSOR_UP_1 : '');
|
|
114
|
-
}
|
|
115
|
-
return out + CURSOR_LEFT;
|
|
116
|
-
}
|
|
117
|
-
export function createFrameDiffer(options) {
|
|
118
|
-
/**
|
|
119
|
-
* Last frame AS PAINTED — what is actually on the screen.
|
|
120
|
-
*
|
|
121
|
-
* `null` = no cache, next frame is a full repaint. THE DIFF COMPARES PAINTED
|
|
122
|
-
* LINES (I-2): diffing raw against a painted screen would leave the highlight
|
|
123
|
-
* burned into rows the next frame never repaints, because those rows' RAW text
|
|
124
|
-
* did not change.
|
|
125
|
-
*/
|
|
126
|
-
let prev = null;
|
|
127
|
-
/**
|
|
128
|
-
* The same frame UNDECORATED — `repaint()`'s input.
|
|
129
|
-
*
|
|
130
|
-
* Two caches rather than one, because a repaint has to re-run `decorate` over
|
|
131
|
-
* the ORIGINAL rows: painting an already-painted row would nest the selection
|
|
132
|
-
* escapes and the highlight would never come off.
|
|
133
|
-
*/
|
|
134
|
-
let rawPrev = null;
|
|
135
|
-
/**
|
|
136
|
-
* Whether any chunk has been seen at all.
|
|
137
|
-
*
|
|
138
|
-
* The session's FIRST write has `previousLineCount === 0`, so `eraseLines(0)`
|
|
139
|
-
* is the empty string and the chunk carries no erase prefix (§3.2.1). That is
|
|
140
|
-
* expected, not a desync, so it must not raise the §5.6 notice on every launch.
|
|
141
|
-
* After it, every chunk Ink produces carries a prefix, so a prefix-less chunk
|
|
142
|
-
* from then on really is foreign.
|
|
143
|
-
*/
|
|
144
|
-
let seenAnyChunk = false;
|
|
145
|
-
const counters = {
|
|
146
|
-
framesTotal: 0,
|
|
147
|
-
framesDiffed: 0,
|
|
148
|
-
framesFull: 0,
|
|
149
|
-
linesWritten: 0,
|
|
150
|
-
bytesWritten: 0,
|
|
151
|
-
fallbacks: 0,
|
|
152
|
-
repaints: 0,
|
|
153
|
-
};
|
|
154
|
-
/**
|
|
155
|
-
* Re-entrancy guard for `onInvalidate`. The listener clears the selection,
|
|
156
|
-
* which asks for a repaint, which can reach `invalidate()` again; one flag is
|
|
157
|
-
* cheaper than reasoning about how deep that can go.
|
|
158
|
-
*/
|
|
159
|
-
let notifying = false;
|
|
160
|
-
const invalidate = () => {
|
|
161
|
-
prev = null;
|
|
162
|
-
rawPrev = null;
|
|
163
|
-
if (notifying || !options.onInvalidate)
|
|
164
|
-
return;
|
|
165
|
-
notifying = true;
|
|
166
|
-
try {
|
|
167
|
-
options.onInvalidate();
|
|
168
|
-
}
|
|
169
|
-
finally {
|
|
170
|
-
notifying = false;
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
/**
|
|
174
|
-
* `decorate`, with the line-count contract enforced. A decorator that returned
|
|
175
|
-
* a different number of rows would shift every absolute address below it for
|
|
176
|
-
* the rest of the session, so its answer is discarded rather than trusted.
|
|
177
|
-
*/
|
|
178
|
-
const applyDecorate = (lines) => {
|
|
179
|
-
if (!options.decorate)
|
|
180
|
-
return lines;
|
|
181
|
-
const painted = options.decorate(lines);
|
|
182
|
-
return painted.length === lines.length ? painted : lines;
|
|
183
|
-
};
|
|
184
|
-
/**
|
|
185
|
-
* Write `chunk` verbatim — today's behaviour, and the only failure mode.
|
|
186
|
-
*
|
|
187
|
-
* `counted` is false for the two cases the differ inflicts on itself and knows
|
|
188
|
-
* are harmless (the seed write, degenerate geometry); true means a foreign
|
|
189
|
-
* write desynced absolute addressing, which is what `fallbacks` reports.
|
|
190
|
-
*/
|
|
191
|
-
const passThrough = (counted) => {
|
|
192
|
-
invalidate();
|
|
193
|
-
if (counted) {
|
|
194
|
-
counters.fallbacks += 1;
|
|
195
|
-
if (counters.fallbacks === 1)
|
|
196
|
-
options.onFirstFallback?.();
|
|
197
|
-
}
|
|
198
|
-
return null;
|
|
199
|
-
};
|
|
200
|
-
const wrapSync = (payload) => options.sync ? SYNC_BEGIN + payload + SYNC_END : payload;
|
|
201
|
-
const emit = (payload, lines, raw, addressed, full) => {
|
|
202
|
-
prev = lines;
|
|
203
|
-
rawPrev = raw;
|
|
204
|
-
counters.framesTotal += 1;
|
|
205
|
-
if (full)
|
|
206
|
-
counters.framesFull += 1;
|
|
207
|
-
else
|
|
208
|
-
counters.framesDiffed += 1;
|
|
209
|
-
counters.linesWritten += addressed;
|
|
210
|
-
counters.bytesWritten += payload.length;
|
|
211
|
-
return payload;
|
|
212
|
-
};
|
|
213
|
-
/** `undefined` ⇒ the I-9 stand-down: a viewport too small to address safely. */
|
|
214
|
-
const usableRows = () => {
|
|
215
|
-
const rows = options.rows();
|
|
216
|
-
if (rows === undefined || !Number.isFinite(rows))
|
|
217
|
-
return undefined;
|
|
218
|
-
return rows < MIN_FULLSCREEN_ROWS ? undefined : rows;
|
|
219
|
-
};
|
|
220
|
-
const matchErasePrefix = (chunk) => {
|
|
221
|
-
if (prev !== null) {
|
|
222
|
-
const expected = eraseLinesPrefix(prev.length + 1);
|
|
223
|
-
if (chunk.startsWith(expected))
|
|
224
|
-
return { prefix: expected, erased: prev.length + 1 };
|
|
225
|
-
}
|
|
226
|
-
return matchInkErasePrefix(chunk);
|
|
227
|
-
};
|
|
228
|
-
/**
|
|
229
|
-
* Full repaint — the first diffable frame of a session, every invalidation
|
|
230
|
-
* (including the resize invalidation of I-8), and any line-count change.
|
|
231
|
-
*
|
|
232
|
-
* `CSI J` replaces the H+1 individual line erases with one sequence, and the
|
|
233
|
-
* alternate screen is exactly the region being erased. `\r\n` rather than `\n`
|
|
234
|
-
* is deliberate: Ink relies on the tty's `ONLCR` post-processing to turn `\n`
|
|
235
|
-
* into CRLF, and that dependency is invisible until it is not there.
|
|
236
|
-
*
|
|
237
|
-
* P0-1's blank-then-paint objection does not apply here and the asymmetry with
|
|
238
|
-
* the per-line path is deliberate: a full repaint rewrites every row, so there
|
|
239
|
-
* is no unchanged content that has to survive, and full repaints are rare by
|
|
240
|
-
* construction — one per session, one per resize, one per invalidation.
|
|
241
|
-
*/
|
|
242
|
-
const fullRepaint = (lines, raw) => {
|
|
243
|
-
const payload = cursorTo(1) +
|
|
244
|
-
SGR_RESET +
|
|
245
|
-
ERASE_DOWN +
|
|
246
|
-
lines.join('\r\n') +
|
|
247
|
-
'\r\n' +
|
|
248
|
-
cursorTo(lines.length + 1);
|
|
249
|
-
return emit(wrapSync(payload), lines, raw, lines.length, true);
|
|
250
|
-
};
|
|
251
|
-
/** Terminal width for this paint, or `undefined` when unknown (I-4: always EL). */
|
|
252
|
-
const liveCols = () => {
|
|
253
|
-
const cols = options.cols?.();
|
|
254
|
-
return cols !== undefined && Number.isFinite(cols) ? cols : undefined;
|
|
255
|
-
};
|
|
256
|
-
const diffRepaint = (lines, raw, previous) => {
|
|
257
|
-
const out = [];
|
|
258
|
-
const cols = liveCols();
|
|
259
|
-
for (let i = 0; i < lines.length; i += 1) {
|
|
260
|
-
// I-4: paint, THEN clear the tail. Never `ERASE_LINE` first.
|
|
261
|
-
if (lines[i] !== previous[i])
|
|
262
|
-
out.push(paintLine(i + 1, lines[i], cols));
|
|
263
|
-
}
|
|
264
|
-
// DEFENSIVE ONLY, not a live path (P2-4). `log-update.js:13-15` returns early
|
|
265
|
-
// on an identical frame, so a chunk that reaches here differs by at least one
|
|
266
|
-
// line; the only way to observe zero is a cache that disagrees with the
|
|
267
|
-
// screen, which is the state `invalidate()` exists to prevent.
|
|
268
|
-
//
|
|
269
|
-
// With a `decorate` hook it stops being unreachable in one direction and
|
|
270
|
-
// stays correct: a frame whose RAW rows changed only where the highlight
|
|
271
|
-
// already covers them paints identically, and writing nothing is right.
|
|
272
|
-
if (out.length === 0)
|
|
273
|
-
return emit('', lines, raw, 0, false);
|
|
274
|
-
out.push(cursorTo(lines.length + 1)); // I-5
|
|
275
|
-
return emit(wrapSync(out.join('')), lines, raw, out.length - 1, false);
|
|
276
|
-
};
|
|
277
|
-
/**
|
|
278
|
-
* Re-paint the last frame's rows through `decorate` again, emitting only what
|
|
279
|
-
* changed. Called when the SELECTION moved rather than when Ink produced a
|
|
280
|
-
* frame — hence its own counter and no touch of the frame ones (P2-6).
|
|
281
|
-
*
|
|
282
|
-
* It carries the same DEC 2026 sync envelope and parks on row `H + 1` as every
|
|
283
|
-
* other batch, because it is addressed exactly like a diff frame and a
|
|
284
|
-
* half-applied highlight tears the same way a half-applied frame does.
|
|
285
|
-
*/
|
|
286
|
-
const repaint = () => {
|
|
287
|
-
if (prev === null || rawPrev === null)
|
|
288
|
-
return '';
|
|
289
|
-
const rows = usableRows();
|
|
290
|
-
if (rows === undefined)
|
|
291
|
-
return ''; // I-9 — geometry we cannot address safely
|
|
292
|
-
if (rawPrev.length + 1 > rows)
|
|
293
|
-
return '';
|
|
294
|
-
const painted = applyDecorate(rawPrev);
|
|
295
|
-
const out = [];
|
|
296
|
-
const cols = liveCols();
|
|
297
|
-
for (let i = 0; i < painted.length; i += 1) {
|
|
298
|
-
if (painted[i] !== prev[i])
|
|
299
|
-
out.push(paintLine(i + 1, painted[i], cols));
|
|
300
|
-
}
|
|
301
|
-
prev = painted;
|
|
302
|
-
if (out.length === 0)
|
|
303
|
-
return '';
|
|
304
|
-
out.push(cursorTo(painted.length + 1)); // I-5
|
|
305
|
-
counters.repaints += 1;
|
|
306
|
-
return wrapSync(out.join(''));
|
|
307
|
-
};
|
|
308
|
-
const transform = (chunk) => {
|
|
309
|
-
// A+ · Ink's tall-frame write (see CLEAR_TERMINAL above): a shrink makes
|
|
310
|
-
// `outputHeight >= stdout.rows` while the tree still holds the old height,
|
|
311
|
-
// so Ink bypasses log-update and writes clearTerminal + frame in one chunk.
|
|
312
|
-
// The chunk paints the whole frame by itself, so it needs no parsing: pass
|
|
313
|
-
// it through, drop the cache (the screen it described is gone), and do NOT
|
|
314
|
-
// count it — this is Ink's own write at a moment absolute addressing cannot
|
|
315
|
-
// cover, not something behind Ink's back. The next log-update frame lands
|
|
316
|
-
// on an empty cache and is a full repaint, exactly what a cleared screen
|
|
317
|
-
// needs. Checked BEFORE the seed bookkeeping — and it must be, because the
|
|
318
|
-
// tall-frame write bypasses `this.log`: log-update's own
|
|
319
|
-
// `previousLineCount` stays 0, so the first log-update frame after it still
|
|
320
|
-
// carries no erase prefix. THAT write is the session's genuine seed frame
|
|
321
|
-
// (P1-1), and a control write arriving first must not spend its exemption.
|
|
322
|
-
if (chunk.startsWith(CLEAR_TERMINAL))
|
|
323
|
-
return passThrough(false);
|
|
324
|
-
const firstChunk = !seenAnyChunk;
|
|
325
|
-
seenAnyChunk = true;
|
|
326
|
-
const rows = usableRows();
|
|
327
|
-
if (rows === undefined)
|
|
328
|
-
return passThrough(false); // I-9
|
|
329
|
-
const matched = matchErasePrefix(chunk);
|
|
330
|
-
// A prefix-less chunk is the session's seed write (P1-1) or a foreign one.
|
|
331
|
-
if (matched === null)
|
|
332
|
-
return passThrough(!firstChunk);
|
|
333
|
-
const body = chunk.slice(matched.prefix.length);
|
|
334
|
-
if (!body.endsWith('\n'))
|
|
335
|
-
return passThrough(true); // `log.clear()` and friends
|
|
336
|
-
const lines = body.slice(0, -1).split('\n');
|
|
337
|
-
if (lines.length + 1 > rows)
|
|
338
|
-
return passThrough(false); // I-9
|
|
339
|
-
// AFTER the geometry stand-down, BEFORE the cache comparison: a frame this
|
|
340
|
-
// module refuses to address never reaches the selection layer, and what is
|
|
341
|
-
// compared below is what the screen will hold.
|
|
342
|
-
const painted = applyDecorate(lines);
|
|
343
|
-
if (prev === null || prev.length !== painted.length || matched.erased !== prev.length + 1) {
|
|
344
|
-
return fullRepaint(painted, lines);
|
|
345
|
-
}
|
|
346
|
-
return diffRepaint(painted, lines, prev);
|
|
347
|
-
};
|
|
348
|
-
return {
|
|
349
|
-
transform,
|
|
350
|
-
invalidate,
|
|
351
|
-
repaint,
|
|
352
|
-
stats: () => ({ ...counters }),
|
|
353
|
-
};
|
|
354
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { ScrollbarBridge } from './scrollbar-controller.js';
|
|
2
|
-
export interface FrameSummary {
|
|
3
|
-
columns: number;
|
|
4
|
-
rows: number;
|
|
5
|
-
trackTop: number;
|
|
6
|
-
trackRows: number;
|
|
7
|
-
}
|
|
8
|
-
/** Observe before differ transformation, but acknowledge only after downstream write returns. */
|
|
9
|
-
export declare function createFrameObserver(options: {
|
|
10
|
-
stdout: NodeJS.WriteStream;
|
|
11
|
-
terminal: NodeJS.WriteStream;
|
|
12
|
-
scrollbar: ScrollbarBridge;
|
|
13
|
-
}): {
|
|
14
|
-
stdout: NodeJS.WriteStream;
|
|
15
|
-
dispose(): void;
|
|
16
|
-
invalidate(): void;
|
|
17
|
-
};
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import stripAnsi from 'strip-ansi';
|
|
2
|
-
import stringWidth from 'string-width';
|
|
3
|
-
import { parseInkFrame } from './frame-parser.js';
|
|
4
|
-
import { pickGlyphs } from './glyphs.js';
|
|
5
|
-
function summarizeFrame(chunk, rows, cols) {
|
|
6
|
-
const lines = typeof chunk === 'string' ? parseInkFrame(chunk) : null;
|
|
7
|
-
if (!lines || rows < 12 || cols < 40 || lines.length !== rows - 1)
|
|
8
|
-
return null;
|
|
9
|
-
const unicode = pickGlyphs({ unicode: true, colorLevel: 0 });
|
|
10
|
-
const cells = new Set(['|', '#', unicode.scrollTrack, unicode.scrollThumb]);
|
|
11
|
-
const plain = lines.map((line) => stripAnsi(line));
|
|
12
|
-
if (plain.some((line) => stringWidth(line) > cols))
|
|
13
|
-
return null;
|
|
14
|
-
let trackRows = 0;
|
|
15
|
-
// Fixed composer/status slots have no last-column rail. Discover the actual
|
|
16
|
-
// message track, then acknowledge it only against the published Yoga geometry.
|
|
17
|
-
for (const line of plain.slice(1)) {
|
|
18
|
-
if (stringWidth(line) !== cols || !cells.has(line.slice(-1)))
|
|
19
|
-
break;
|
|
20
|
-
trackRows++;
|
|
21
|
-
}
|
|
22
|
-
if (trackRows < 1)
|
|
23
|
-
return null;
|
|
24
|
-
return { columns: cols, rows, trackTop: 2, trackRows };
|
|
25
|
-
}
|
|
26
|
-
/** Observe before differ transformation, but acknowledge only after downstream write returns. */
|
|
27
|
-
export function createFrameObserver(options) {
|
|
28
|
-
const { stdout, terminal, scrollbar } = options;
|
|
29
|
-
let summary = null;
|
|
30
|
-
let summaryRevision;
|
|
31
|
-
let disposed = false;
|
|
32
|
-
let resizeTimer = null;
|
|
33
|
-
const invalidate = () => { summary = null; scrollbar.invalidate(); };
|
|
34
|
-
const onResize = () => {
|
|
35
|
-
invalidate();
|
|
36
|
-
if (resizeTimer)
|
|
37
|
-
clearTimeout(resizeTimer);
|
|
38
|
-
// Ink suppresses identical frames when a resize burst returns to its starting size.
|
|
39
|
-
// Wait past the 50 ms React size debounce, then request a normal redraw if needed.
|
|
40
|
-
resizeTimer = setTimeout(() => {
|
|
41
|
-
resizeTimer = null;
|
|
42
|
-
if (!disposed && !scrollbar.frameReady)
|
|
43
|
-
scrollbar.requestRedraw?.();
|
|
44
|
-
}, 60);
|
|
45
|
-
resizeTimer.unref?.();
|
|
46
|
-
};
|
|
47
|
-
const match = () => {
|
|
48
|
-
const g = scrollbar.geometry;
|
|
49
|
-
if (summary && g && summaryRevision === undefined)
|
|
50
|
-
summaryRevision = g.revision;
|
|
51
|
-
scrollbar.frameReady = !!summary && !!g && summary.columns === terminal.columns &&
|
|
52
|
-
summary.rows === terminal.rows && g.trackCol === summary.columns &&
|
|
53
|
-
g.trackTop === summary.trackTop && g.trackRows === summary.trackRows &&
|
|
54
|
-
g.revision === summaryRevision;
|
|
55
|
-
};
|
|
56
|
-
const observe = (chunk) => {
|
|
57
|
-
summary = summarizeFrame(chunk, terminal.rows, terminal.columns);
|
|
58
|
-
summaryRevision = scrollbar.geometry?.revision;
|
|
59
|
-
if (!summary) {
|
|
60
|
-
invalidate();
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
match();
|
|
64
|
-
};
|
|
65
|
-
scrollbar.onGeometry = match;
|
|
66
|
-
terminal.on('resize', onResize);
|
|
67
|
-
const bound = new Map();
|
|
68
|
-
const proxy = new Proxy(stdout, {
|
|
69
|
-
get(target, prop) {
|
|
70
|
-
if (prop === 'write')
|
|
71
|
-
return (...args) => {
|
|
72
|
-
const result = Reflect.apply(target.write, target, args);
|
|
73
|
-
if (!disposed)
|
|
74
|
-
observe(args[0]);
|
|
75
|
-
return result;
|
|
76
|
-
};
|
|
77
|
-
const value = Reflect.get(target, prop, target);
|
|
78
|
-
if (typeof value !== 'function')
|
|
79
|
-
return value;
|
|
80
|
-
if (!bound.has(prop))
|
|
81
|
-
bound.set(prop, value.bind(target));
|
|
82
|
-
return bound.get(prop);
|
|
83
|
-
},
|
|
84
|
-
});
|
|
85
|
-
return { stdout: proxy, invalidate, dispose: () => {
|
|
86
|
-
disposed = true;
|
|
87
|
-
if (resizeTimer)
|
|
88
|
-
clearTimeout(resizeTimer);
|
|
89
|
-
resizeTimer = null;
|
|
90
|
-
terminal.off('resize', onResize);
|
|
91
|
-
scrollbar.onGeometry = undefined;
|
|
92
|
-
invalidate();
|
|
93
|
-
} };
|
|
94
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/** Recognize Ink's erase-lines prefix without accepting arbitrary control writes. */
|
|
2
|
-
export declare function matchInkErasePrefix(chunk: string): {
|
|
3
|
-
prefix: string;
|
|
4
|
-
erased: number;
|
|
5
|
-
} | null;
|
|
6
|
-
/** Parse complete frames, including Ink's prefixless initial frame. */
|
|
7
|
-
export declare function parseInkFrame(chunk: string): string[] | null;
|
package/dist/ui/frame-parser.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/** Recognize Ink's erase-lines prefix without accepting arbitrary control writes. */
|
|
2
|
-
export function matchInkErasePrefix(chunk) {
|
|
3
|
-
const match = /^(?:\x1b\[2K(?:\x1b\[1A)?)+\x1b\[G/.exec(chunk);
|
|
4
|
-
return match ? { prefix: match[0], erased: match[0].split('\x1b[2K').length - 1 } : null;
|
|
5
|
-
}
|
|
6
|
-
/** Parse complete frames, including Ink's prefixless initial frame. */
|
|
7
|
-
export function parseInkFrame(chunk) {
|
|
8
|
-
const prefix = matchInkErasePrefix(chunk);
|
|
9
|
-
const body = chunk.slice(prefix?.prefix.length ?? 0);
|
|
10
|
-
if (!body.endsWith('\n'))
|
|
11
|
-
return null;
|
|
12
|
-
// SGR and OSC-8 may decorate text; cursor movement is never frame content.
|
|
13
|
-
const controls = body.replace(/\x1b\[[0-9;:]*m/g, '')
|
|
14
|
-
.replace(/\x1b\]8;[^\x07\x1b]*(?:\x07|\x1b\\)/g, '');
|
|
15
|
-
if (/[\x00-\x08\x0b-\x1f\x7f]/.test(controls))
|
|
16
|
-
return null;
|
|
17
|
-
return body.slice(0, -1).split('\n');
|
|
18
|
-
}
|
package/dist/ui/gauge.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context gauge builder (spec §3.4). Pure: turns a percentage into a block bar
|
|
3
|
-
* plus a threshold-based fill colour, with an ASCII fallback when the terminal
|
|
4
|
-
* has no Unicode. Kept out of the `.tsx` so it is unit-testable without Ink.
|
|
5
|
-
*/
|
|
6
|
-
import type { Theme } from './theme.js';
|
|
7
|
-
import type { TermCapabilities } from './capabilities.js';
|
|
8
|
-
export interface Gauge {
|
|
9
|
-
/** The filled portion of the bar. */
|
|
10
|
-
filled: string;
|
|
11
|
-
/** The empty (track) portion of the bar. */
|
|
12
|
-
empty: string;
|
|
13
|
-
/** Fill colour chosen by threshold (`theme.gauge.*`). */
|
|
14
|
-
fillColor: string | undefined;
|
|
15
|
-
/** Track colour (`theme.gauge.track`). */
|
|
16
|
-
trackColor: string | undefined;
|
|
17
|
-
/** Clamped percentage 0–100. */
|
|
18
|
-
pct: number;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Where the bar changes colour, as percentages.
|
|
22
|
-
*
|
|
23
|
-
* The defaults are the values this function hardcoded before context compaction
|
|
24
|
-
* existed, so every existing call site and test is byte-identical (§6.2).
|
|
25
|
-
*/
|
|
26
|
-
export interface GaugeMarks {
|
|
27
|
-
/** Amber at or above this. */
|
|
28
|
-
warn: number;
|
|
29
|
-
/** Red strictly above this. */
|
|
30
|
-
high: number;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Build a `width`-cell gauge for `pct` (0–100). Uses block glyphs on Unicode
|
|
34
|
-
* terminals and `#`/`-` otherwise (e.g. `[######----]`).
|
|
35
|
-
*
|
|
36
|
-
* `marks` is OPTIONAL and defaults to today's values, so omitting it produces
|
|
37
|
-
* byte-identical output to the pre-compaction build.
|
|
38
|
-
*/
|
|
39
|
-
export declare function buildGauge(pct: number, width: number, theme: Theme, caps: TermCapabilities, marks?: GaugeMarks): Gauge;
|
package/dist/ui/gauge.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context gauge builder (spec §3.4). Pure: turns a percentage into a block bar
|
|
3
|
-
* plus a threshold-based fill colour, with an ASCII fallback when the terminal
|
|
4
|
-
* has no Unicode. Kept out of the `.tsx` so it is unit-testable without Ink.
|
|
5
|
-
*/
|
|
6
|
-
import { pickGlyphs } from './glyphs.js';
|
|
7
|
-
const DEFAULT_MARKS = { warn: 60, high: 85 };
|
|
8
|
-
/**
|
|
9
|
-
* Pick the fill colour by threshold: `< warn` low · `>= warn` mid · `> high` high.
|
|
10
|
-
*
|
|
11
|
-
* THE TWO OPERATORS ARE PRESERVED EXACTLY (`> high`, `>= warn`), and that is not
|
|
12
|
-
* cosmetic: changing either would move the default 85 or 60 boundary and break
|
|
13
|
-
* the byte-identity claim that makes the `marks` parameter a free change.
|
|
14
|
-
*
|
|
15
|
-
* WHAT RED MEANS, PRECISELY (P2-4). The compaction trigger is
|
|
16
|
-
* `ratio >= threshold` (INCLUSIVE) while this fill is `pct > high` (EXCLUSIVE),
|
|
17
|
-
* so with `high = threshold` any occupancy that would render red has ALREADY
|
|
18
|
-
* triggered compaction, and the gauge repaints downward in the same frame. The
|
|
19
|
-
* red band is therefore only ever OBSERVABLE when compaction did not or could
|
|
20
|
-
* not run — the feature is off, it self-disabled, or the failure ladder ended at
|
|
21
|
-
* its last rung. That is a genuinely more useful meaning than "imminent", and it
|
|
22
|
-
* is the one the README and the settings screen state.
|
|
23
|
-
*/
|
|
24
|
-
function thresholdColor(pct, theme, marks) {
|
|
25
|
-
if (pct > marks.high)
|
|
26
|
-
return theme.gauge.high;
|
|
27
|
-
if (pct >= marks.warn)
|
|
28
|
-
return theme.gauge.mid;
|
|
29
|
-
return theme.gauge.low;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Build a `width`-cell gauge for `pct` (0–100). Uses block glyphs on Unicode
|
|
33
|
-
* terminals and `#`/`-` otherwise (e.g. `[######----]`).
|
|
34
|
-
*
|
|
35
|
-
* `marks` is OPTIONAL and defaults to today's values, so omitting it produces
|
|
36
|
-
* byte-identical output to the pre-compaction build.
|
|
37
|
-
*/
|
|
38
|
-
export function buildGauge(pct, width, theme, caps, marks = DEFAULT_MARKS) {
|
|
39
|
-
const clamped = Math.max(0, Math.min(100, Math.round(pct)));
|
|
40
|
-
const cells = Math.max(1, width);
|
|
41
|
-
const filledCells = Math.max(0, Math.min(cells, Math.round((clamped / 100) * cells)));
|
|
42
|
-
// Was `caps.unicode ? '█' : '#'` inline. The branch was correct but the
|
|
43
|
-
// literals still had to move: leaving even a well-formed pair here would mean
|
|
44
|
-
// the A-1 scan needs an exception, and exceptions get copied (§4.1).
|
|
45
|
-
const glyphs = pickGlyphs(caps);
|
|
46
|
-
const full = glyphs.gaugeFull;
|
|
47
|
-
const empty = glyphs.gaugeEmpty;
|
|
48
|
-
return {
|
|
49
|
-
filled: full.repeat(filledCells),
|
|
50
|
-
empty: empty.repeat(cells - filledCells),
|
|
51
|
-
fillColor: thresholdColor(clamped, theme, marks),
|
|
52
|
-
trackColor: theme.gauge.track,
|
|
53
|
-
pct: clamped,
|
|
54
|
-
};
|
|
55
|
-
}
|