@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,223 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The selection model (tui-selection-and-scroll-follow §4.4.4). PURE — no React,
|
|
3
|
-
* no I/O, no terminal.
|
|
4
|
-
*
|
|
5
|
-
* Coordinates are SCREEN CELLS, 0-based: frame line `i` is terminal row `i + 1`
|
|
6
|
-
* and column `x - 1`, so an SGR report at `(x, y)` becomes `{ row: y - 1, col: x
|
|
7
|
-
* - 1 }`. Screen coordinates are only sound while the rows hold still, and
|
|
8
|
-
* holding them still is Stage 2's job — `press` sets `hold`, which anchors the
|
|
9
|
-
* content and suspends the resume timer, so the transcript is frozen for the
|
|
10
|
-
* duration of a drag (D-7).
|
|
11
|
-
*
|
|
12
|
-
* ═══════════════════════════════════════════════════════════════════════════
|
|
13
|
-
* I-12 — `sliceColumns` IS THE ONE COLUMN→CHARACTER MAPPING IN THIS FEATURE,
|
|
14
|
-
* and `stringWidth` is its only width oracle.
|
|
15
|
-
*
|
|
16
|
-
* The painter and the extractor are handed the SAME half-open column range by
|
|
17
|
-
* `rowSpan`. If they turn that range into characters by different rules, the
|
|
18
|
-
* copied text is not the highlighted text — silently, which is the one failure
|
|
19
|
-
* mode I-4 exists to name. That is not hypothetical: `slice-ansi` advances its
|
|
20
|
-
* cursor by `isFullWidth ? 2 : character.length`, i.e. display columns for CJK
|
|
21
|
-
* but UTF-16 CODE UNITS for everything else, so a combining mark costs it a
|
|
22
|
-
* column that occupies none and an astral code point costs two; and the obvious
|
|
23
|
-
* `String.slice` for the extractor is code units throughout. Two mappings from
|
|
24
|
-
* one range agree on ASCII and diverge on exactly the rows a user is most likely
|
|
25
|
-
* to want to copy.
|
|
26
|
-
*
|
|
27
|
-
* So both call the function below, which walks GRAPHEME CLUSTERS and charges
|
|
28
|
-
* each one `stringWidth(cluster)` columns. What is hand-rolled here is only the
|
|
29
|
-
* column arithmetic — the width table is still `string-width`'s, and the escape
|
|
30
|
-
* bookkeeping is `slice-ansi`'s idea re-indexed (R-13).
|
|
31
|
-
* ═══════════════════════════════════════════════════════════════════════════
|
|
32
|
-
*/
|
|
33
|
-
import stringWidth from 'string-width';
|
|
34
|
-
export function normalize(sel) {
|
|
35
|
-
const { anchor, focus } = sel;
|
|
36
|
-
const anchorFirst = anchor.row < focus.row || (anchor.row === focus.row && anchor.col <= focus.col);
|
|
37
|
-
return anchorFirst ? { start: anchor, end: focus } : { start: focus, end: anchor };
|
|
38
|
-
}
|
|
39
|
-
export function isEmpty(sel) {
|
|
40
|
-
return sel.start.row === sel.end.row && sel.start.col === sel.end.col;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* The half-open column range to highlight on `row`, or `null` when the row is
|
|
44
|
-
* outside the selection.
|
|
45
|
-
*
|
|
46
|
-
* LINEAR, NOT RECTANGULAR — what every terminal does: the first row runs from
|
|
47
|
-
* `start.col` to end of line, whole middle rows are taken entirely, and the last
|
|
48
|
-
* row stops at `end.col`. `Infinity` means "to the end of the line"; the painter
|
|
49
|
-
* clamps it to the terminal width so a multi-row selection gets a straight right
|
|
50
|
-
* edge, and the extractor treats it as "no upper bound".
|
|
51
|
-
*/
|
|
52
|
-
export function rowSpan(sel, row) {
|
|
53
|
-
const { start, end } = sel;
|
|
54
|
-
if (row < start.row || row > end.row)
|
|
55
|
-
return null;
|
|
56
|
-
if (start.row === end.row) {
|
|
57
|
-
return end.col > start.col ? { from: start.col, to: end.col } : null;
|
|
58
|
-
}
|
|
59
|
-
if (row === start.row)
|
|
60
|
-
return { from: start.col, to: Number.POSITIVE_INFINITY };
|
|
61
|
-
if (row === end.row)
|
|
62
|
-
return end.col > 0 ? { from: 0, to: end.col } : null;
|
|
63
|
-
return { from: 0, to: Number.POSITIVE_INFINITY };
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* The text a release would put on the clipboard.
|
|
67
|
-
*
|
|
68
|
-
* `plainRows` are the mirror's ANSI-STRIPPED rows — the same rows the highlight
|
|
69
|
-
* was painted over, which is what makes I-4 hold by construction rather than by
|
|
70
|
-
* a staleness check that can be wrong.
|
|
71
|
-
*/
|
|
72
|
-
export function selectedText(plainRows, sel) {
|
|
73
|
-
const out = [];
|
|
74
|
-
for (let row = sel.start.row; row <= sel.end.row; row += 1) {
|
|
75
|
-
const span = rowSpan(sel, row);
|
|
76
|
-
if (!span)
|
|
77
|
-
continue;
|
|
78
|
-
const line = plainRows[row] ?? '';
|
|
79
|
-
const to = Number.isFinite(span.to) ? span.to : undefined;
|
|
80
|
-
out.push(sliceColumns(line, span.from, to).trimEnd());
|
|
81
|
-
}
|
|
82
|
-
return out.join('\n');
|
|
83
|
-
}
|
|
84
|
-
// ---------------------------------------------------------------------------
|
|
85
|
-
// sliceColumns — the one mapping (I-12)
|
|
86
|
-
// ---------------------------------------------------------------------------
|
|
87
|
-
/**
|
|
88
|
-
* CSI / OSC sequences. They occupy ZERO columns and are copied through so a
|
|
89
|
-
* slice keeps the styling of the text around it.
|
|
90
|
-
*/
|
|
91
|
-
const ANSI_RE = /\x1b(?:\[[0-9;:?]*[ -/]*[@-~]|\][^\x07\x1b]*(?:\x07|\x1b\\)|[@-Z\\-_])/g;
|
|
92
|
-
/** SGR "all attributes off" — everything carried before it is cancelled. */
|
|
93
|
-
const SGR_RESET_RE = /^\x1b\[0?m$/;
|
|
94
|
-
const segmenter = typeof Intl !== 'undefined' && typeof Intl.Segmenter === 'function'
|
|
95
|
-
? new Intl.Segmenter(undefined, { granularity: 'grapheme' })
|
|
96
|
-
: null;
|
|
97
|
-
/**
|
|
98
|
-
* Width cache. `stringWidth` re-segments and re-classifies on every call, and a
|
|
99
|
-
* repaint slices every row of the selection; the key space is the set of
|
|
100
|
-
* grapheme clusters on screen, which is tiny and bounded by the frame.
|
|
101
|
-
*/
|
|
102
|
-
const widthCache = new Map();
|
|
103
|
-
const WIDTH_CACHE_MAX = 4096;
|
|
104
|
-
function clusterWidth(cluster) {
|
|
105
|
-
const hit = widthCache.get(cluster);
|
|
106
|
-
if (hit !== undefined)
|
|
107
|
-
return hit;
|
|
108
|
-
const w = stringWidth(cluster);
|
|
109
|
-
// A plain ceiling with a wholesale drop, like `virtual-window.ts`'s height
|
|
110
|
-
// cache: an LRU here would cost more bookkeeping than the values are worth.
|
|
111
|
-
if (widthCache.size >= WIDTH_CACHE_MAX)
|
|
112
|
-
widthCache.clear();
|
|
113
|
-
widthCache.set(cluster, w);
|
|
114
|
-
return w;
|
|
115
|
-
}
|
|
116
|
-
/** Split into ANSI sequences and grapheme clusters, in order. */
|
|
117
|
-
function tokenize(text) {
|
|
118
|
-
const tokens = [];
|
|
119
|
-
ANSI_RE.lastIndex = 0;
|
|
120
|
-
let last = 0;
|
|
121
|
-
let m;
|
|
122
|
-
const pushPlain = (chunk) => {
|
|
123
|
-
if (chunk.length === 0)
|
|
124
|
-
return;
|
|
125
|
-
if (segmenter) {
|
|
126
|
-
for (const { segment } of segmenter.segment(chunk))
|
|
127
|
-
tokens.push({ text: segment, ansi: false });
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
// No `Intl.Segmenter`: code points are a strictly worse but never wrong
|
|
131
|
-
// approximation — a combining mark becomes its own zero-width token, which
|
|
132
|
-
// the walk below already handles.
|
|
133
|
-
for (const cp of chunk)
|
|
134
|
-
tokens.push({ text: cp, ansi: false });
|
|
135
|
-
};
|
|
136
|
-
while ((m = ANSI_RE.exec(text)) !== null) {
|
|
137
|
-
pushPlain(text.slice(last, m.index));
|
|
138
|
-
tokens.push({ text: m[0], ansi: true });
|
|
139
|
-
last = m.index + m[0].length;
|
|
140
|
-
}
|
|
141
|
-
pushPlain(text.slice(last));
|
|
142
|
-
return tokens;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Slice `text` by SCREEN COLUMNS, half-open `[from, to)`.
|
|
146
|
-
*
|
|
147
|
-
* Three properties are load-bearing:
|
|
148
|
-
*
|
|
149
|
-
* - **Escape codes opened before `from` are carried into the result.** Without
|
|
150
|
-
* it the painter's tail — `sliceColumns(line, to)` — would lose the colour
|
|
151
|
-
* `Markdown` and `cli-highlight` gave it, on every row a selection touches.
|
|
152
|
-
* - **A wide cluster straddling either boundary becomes spaces for the part
|
|
153
|
-
* that is inside.** That keeps the arithmetic EXACT in columns, which is the
|
|
154
|
-
* whole point of I-12: half a CJK glyph is not a character, and inventing one
|
|
155
|
-
* would put the painter and the extractor back out of step.
|
|
156
|
-
* - **`to` is optional and means "to the end of the line".**
|
|
157
|
-
*/
|
|
158
|
-
export function sliceColumns(text, from, to) {
|
|
159
|
-
const start = Math.max(0, Math.floor(from));
|
|
160
|
-
const end = to === undefined || !Number.isFinite(to) ? Number.POSITIVE_INFINITY : Math.floor(to);
|
|
161
|
-
if (end <= start)
|
|
162
|
-
return '';
|
|
163
|
-
let carried = '';
|
|
164
|
-
let out = '';
|
|
165
|
-
let col = 0;
|
|
166
|
-
let started = false;
|
|
167
|
-
const open = () => {
|
|
168
|
-
if (started)
|
|
169
|
-
return;
|
|
170
|
-
started = true;
|
|
171
|
-
out += carried;
|
|
172
|
-
};
|
|
173
|
-
for (const token of tokenize(text)) {
|
|
174
|
-
if (token.ansi) {
|
|
175
|
-
if (started)
|
|
176
|
-
out += token.text;
|
|
177
|
-
else {
|
|
178
|
-
if (SGR_RESET_RE.test(token.text))
|
|
179
|
-
carried = '';
|
|
180
|
-
carried += token.text;
|
|
181
|
-
}
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
if (col >= end)
|
|
185
|
-
break;
|
|
186
|
-
const w = clusterWidth(token.text);
|
|
187
|
-
if (w === 0) {
|
|
188
|
-
// A zero-width cluster attaches to the cell before it, so it belongs to the
|
|
189
|
-
// slice only when that cell is already inside.
|
|
190
|
-
if (started)
|
|
191
|
-
out += token.text;
|
|
192
|
-
continue;
|
|
193
|
-
}
|
|
194
|
-
const cellEnd = col + w;
|
|
195
|
-
if (cellEnd <= start) {
|
|
196
|
-
col = cellEnd;
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
open();
|
|
200
|
-
if (col < start) {
|
|
201
|
-
// Straddles the LEFT boundary: only `cellEnd - start` columns are ours.
|
|
202
|
-
out += ' '.repeat(Math.min(cellEnd, end) - start);
|
|
203
|
-
}
|
|
204
|
-
else if (cellEnd > end) {
|
|
205
|
-
// Straddles the RIGHT boundary.
|
|
206
|
-
out += ' '.repeat(end - col);
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
out += token.text;
|
|
210
|
-
}
|
|
211
|
-
col = cellEnd;
|
|
212
|
-
}
|
|
213
|
-
return out;
|
|
214
|
-
}
|
|
215
|
-
/** Display width in columns, using the same oracle `sliceColumns` charges with. */
|
|
216
|
-
export function columnsOf(text) {
|
|
217
|
-
let total = 0;
|
|
218
|
-
for (const token of tokenize(text)) {
|
|
219
|
-
if (!token.ansi)
|
|
220
|
-
total += clusterWidth(token.text);
|
|
221
|
-
}
|
|
222
|
-
return total;
|
|
223
|
-
}
|
package/dist/ui/shortcuts.d.ts
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE shortcut table (tui-shortcut-drawer-and-task-summary §4.6 / appendix B).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY, AND THAT IS A HARD CONSTRAINT RATHER THAN A STYLE CHOICE: this file
|
|
5
|
-
* is inside `glyphs.test.ts::inScope` (`ui/` prefix), whose `A-1` case fails on a
|
|
6
|
-
* single non-ASCII byte. Every `keyword` and `detail` below is English on
|
|
7
|
-
* purpose; translating them would turn the scanner red, and the only escape
|
|
8
|
-
* hatch - adding this file to the exemptions - is the thing that helper's own
|
|
9
|
-
* comment argues against.
|
|
10
|
-
*
|
|
11
|
-
* THIS IS THE ONLY TRUTH ABOUT SHORTCUTS. The drawer, `/keys` and the tests all
|
|
12
|
-
* derive from it, and `shortcut-table.test.ts` holds it in a BIDIRECTIONAL set
|
|
13
|
-
* relation with `HelpOverlay`'s key column (D-8). The reverse direction is the
|
|
14
|
-
* one that matters: without it `Alt+K`, `Esc twice` and `Esc again` could sit in
|
|
15
|
-
* `/help` forever and never appear in the panel whose entire requirement is
|
|
16
|
-
* "list ALL of them".
|
|
17
|
-
*
|
|
18
|
-
* `keyword` IS CAPPED AT 10 CELLS (`SHORTCUT_PANEL_LIMITS.keywordMaxCells`). A
|
|
19
|
-
* longer one is a spec error, not a width problem: at 80 columns the keyword
|
|
20
|
-
* column is 11 cells wide, and the only remaining remedy would be truncating it -
|
|
21
|
-
* which is the exact defect (a column of `promp...`) this table exists to avoid.
|
|
22
|
-
*/
|
|
23
|
-
export type ShortcutGroupId = 'compose' | 'run' | 'panels' | 'session' | 'view';
|
|
24
|
-
/**
|
|
25
|
-
* When a row can actually be used. Unavailable rows are STILL LISTED - the user
|
|
26
|
-
* needs to know the key exists - but they render dim and explain themselves in
|
|
27
|
-
* the detail line when selected.
|
|
28
|
-
*/
|
|
29
|
-
export type ShortcutAvailability = 'always' | 'idle' | 'running' | 'app' | 'native';
|
|
30
|
-
export interface ShortcutEntry {
|
|
31
|
-
/** Stable id used by tests and by `/keys <query>`. */
|
|
32
|
-
id: string;
|
|
33
|
-
/** The primary binding, spelled in full the way `HelpOverlay` spells it. */
|
|
34
|
-
keys: string;
|
|
35
|
-
/** One to two words, ASCII only, at most 10 columns. The requirement's second column. */
|
|
36
|
-
keyword: string;
|
|
37
|
-
/** One ASCII sentence, shown when the row is selected. */
|
|
38
|
-
detail: string;
|
|
39
|
-
group: ShortcutGroupId;
|
|
40
|
-
availability: ShortcutAvailability;
|
|
41
|
-
/** Extra spellings that must also resolve in `/keys <query>`. */
|
|
42
|
-
aliases?: readonly string[];
|
|
43
|
-
}
|
|
44
|
-
export declare const SHORTCUT_GROUPS: readonly {
|
|
45
|
-
id: ShortcutGroupId;
|
|
46
|
-
title: string;
|
|
47
|
-
}[];
|
|
48
|
-
/**
|
|
49
|
-
* The 31 rows, in reading order. Group order is fixed by `SHORTCUT_GROUPS`, and
|
|
50
|
-
* within a group the order is "how often a user reaches for it", not alphabetical:
|
|
51
|
-
* a reference panel is scanned from the top.
|
|
52
|
-
*/
|
|
53
|
-
export declare const SHORTCUTS: readonly ShortcutEntry[];
|
|
54
|
-
/**
|
|
55
|
-
* The longest `keys` string in cells - the input the column derivation needs.
|
|
56
|
-
*
|
|
57
|
-
* DERIVED, NEVER HARD-CODED: v1 fixed the key column at 21 cells, which left six
|
|
58
|
-
* for the keyword at 80 columns and turned `prompt library` into `promp...`. A
|
|
59
|
-
* derived value cannot go stale the day someone adds a longer binding.
|
|
60
|
-
*/
|
|
61
|
-
export declare function widestKeysCells(entries: readonly ShortcutEntry[]): number;
|
|
62
|
-
/**
|
|
63
|
-
* Filter for `/keys <query>`: case-insensitive substring over id, keys, keyword
|
|
64
|
-
* and aliases.
|
|
65
|
-
*
|
|
66
|
-
* NO KEYBOARD SEARCH IN THE PANEL ITSELF (§11 F-2): typing would fight `Esc` for
|
|
67
|
-
* "clear the filter or close the panel", and `Esc` is App-owned. The command is
|
|
68
|
-
* the zero-conflict way to reach the same filter.
|
|
69
|
-
*/
|
|
70
|
-
export declare function filterShortcuts(entries: readonly ShortcutEntry[], query: string): ShortcutEntry[];
|
|
71
|
-
/**
|
|
72
|
-
* Whether a row can be used right now.
|
|
73
|
-
*
|
|
74
|
-
* `running` MEANS "ONLY WHILE RUNNING", not "unavailable while running" - the two
|
|
75
|
-
* halves of the table would otherwise need two different predicates, which is the
|
|
76
|
-
* kind of asymmetry a later reader gets backwards.
|
|
77
|
-
*/
|
|
78
|
-
export declare function isAvailable(entry: ShortcutEntry, context: {
|
|
79
|
-
native: boolean;
|
|
80
|
-
running: boolean;
|
|
81
|
-
}): boolean;
|
package/dist/ui/shortcuts.js
DELETED
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE shortcut table (tui-shortcut-drawer-and-task-summary §4.6 / appendix B).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY, AND THAT IS A HARD CONSTRAINT RATHER THAN A STYLE CHOICE: this file
|
|
5
|
-
* is inside `glyphs.test.ts::inScope` (`ui/` prefix), whose `A-1` case fails on a
|
|
6
|
-
* single non-ASCII byte. Every `keyword` and `detail` below is English on
|
|
7
|
-
* purpose; translating them would turn the scanner red, and the only escape
|
|
8
|
-
* hatch - adding this file to the exemptions - is the thing that helper's own
|
|
9
|
-
* comment argues against.
|
|
10
|
-
*
|
|
11
|
-
* THIS IS THE ONLY TRUTH ABOUT SHORTCUTS. The drawer, `/keys` and the tests all
|
|
12
|
-
* derive from it, and `shortcut-table.test.ts` holds it in a BIDIRECTIONAL set
|
|
13
|
-
* relation with `HelpOverlay`'s key column (D-8). The reverse direction is the
|
|
14
|
-
* one that matters: without it `Alt+K`, `Esc twice` and `Esc again` could sit in
|
|
15
|
-
* `/help` forever and never appear in the panel whose entire requirement is
|
|
16
|
-
* "list ALL of them".
|
|
17
|
-
*
|
|
18
|
-
* `keyword` IS CAPPED AT 10 CELLS (`SHORTCUT_PANEL_LIMITS.keywordMaxCells`). A
|
|
19
|
-
* longer one is a spec error, not a width problem: at 80 columns the keyword
|
|
20
|
-
* column is 11 cells wide, and the only remaining remedy would be truncating it -
|
|
21
|
-
* which is the exact defect (a column of `promp...`) this table exists to avoid.
|
|
22
|
-
*/
|
|
23
|
-
import { cellWidth } from './layout/cells.js';
|
|
24
|
-
export const SHORTCUT_GROUPS = [
|
|
25
|
-
{ id: 'compose', title: 'COMPOSE' },
|
|
26
|
-
{ id: 'run', title: 'RUN' },
|
|
27
|
-
{ id: 'panels', title: 'PANELS' },
|
|
28
|
-
{ id: 'session', title: 'SESSION' },
|
|
29
|
-
{ id: 'view', title: 'VIEW' },
|
|
30
|
-
];
|
|
31
|
-
/**
|
|
32
|
-
* The 31 rows, in reading order. Group order is fixed by `SHORTCUT_GROUPS`, and
|
|
33
|
-
* within a group the order is "how often a user reaches for it", not alphabetical:
|
|
34
|
-
* a reference panel is scanned from the top.
|
|
35
|
-
*/
|
|
36
|
-
export const SHORTCUTS = [
|
|
37
|
-
// --- COMPOSE ---------------------------------------------------------------
|
|
38
|
-
{
|
|
39
|
-
id: 'enter', keys: 'Enter', keyword: 'send', group: 'compose', availability: 'always',
|
|
40
|
-
detail: 'Submits when idle; queues as steering while running;'
|
|
41
|
-
+ ' re-pins the view to the newest output.',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
id: 'alt-enter', keys: 'Alt+Enter', keyword: 'newline', group: 'compose',
|
|
45
|
-
availability: 'always',
|
|
46
|
-
detail: 'Multiline input; the host may intercept this combination.',
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
id: 'shift-enter', keys: 'Shift+Enter', keyword: 'newline', group: 'compose',
|
|
50
|
-
availability: 'always',
|
|
51
|
-
detail: 'Needs keyboard enhancement; /terminal-setup explains how to bind it.',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
id: 'ctrl-j', keys: 'Ctrl+J', keyword: 'newline', group: 'compose', availability: 'always',
|
|
55
|
-
detail: 'Newline fallback that does not depend on keyboard enhancement.',
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
id: 'history', keys: 'Up / Down', keyword: 'history', group: 'compose', availability: 'always',
|
|
59
|
-
detail: 'Recalls earlier prompts when the input box is empty.',
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
id: 'paste', keys: 'Paste', keyword: 'paste', group: 'compose', availability: 'always',
|
|
63
|
-
detail: 'Up to 6 lines inserted as-is; larger becomes [Pasted text #N]; --no-paste disables.',
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
id: 'ctrl-o', keys: 'Ctrl+O', keyword: 'expand', group: 'compose', availability: 'always',
|
|
67
|
-
detail: 'Expands the newest tool output; in native mode it reprints it as a new block.',
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
id: 'ctrl-c', keys: 'Ctrl+C', keyword: 'copy/exit', group: 'compose', availability: 'always',
|
|
71
|
-
aliases: ['Ctrl+C (with a selection)'],
|
|
72
|
-
detail: 'Copies a pending selection; with a draft x2 clears and x3 exits;'
|
|
73
|
-
+ ' empty input x2 exits.',
|
|
74
|
-
},
|
|
75
|
-
// --- RUN -------------------------------------------------------------------
|
|
76
|
-
{
|
|
77
|
-
id: 'esc', keys: 'Esc', keyword: 'close', group: 'run', availability: 'always',
|
|
78
|
-
detail: 'Closes the open overlay or menu; with nothing open it arms the interrupt ladder.',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
id: 'esc-twice', keys: 'Esc twice', keyword: 'interrupt', group: 'run', availability: 'running',
|
|
82
|
-
aliases: ['Esc again'],
|
|
83
|
-
detail: 'Requests an interrupt within 1.5s; the next press forces the stop.',
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
id: 'shift-tab', keys: 'Shift+Tab', keyword: 'plan mode', group: 'run', availability: 'always',
|
|
87
|
-
detail: 'Cycles BUILD / PLAN / GOVERN / PLAN+GOVERN. PLAN refuses writes; GOVERN runs a governed team.',
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
id: 'ctrl-n', keys: 'Ctrl+N', keyword: 'plan mode', group: 'run', availability: 'always',
|
|
91
|
-
detail: 'The same cycle (BUILD / PLAN / GOVERN / PLAN+GOVERN), for consoles that cannot deliver Shift+Tab.',
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
id: 'ctrl-t', keys: 'Ctrl+T', keyword: 'thinking', group: 'run', availability: 'always',
|
|
95
|
-
detail: "Shows or hides the model's thinking (off by default).",
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
id: 'ctrl-r', keys: 'Ctrl+R', keyword: 'redraw', group: 'run', availability: 'always',
|
|
99
|
-
detail: 'Repaints the whole frame; use it when the terminal is garbled.',
|
|
100
|
-
},
|
|
101
|
-
// --- PANELS ----------------------------------------------------------------
|
|
102
|
-
{
|
|
103
|
-
id: 'ctrl-g', keys: 'Ctrl+G', keyword: 'all keys', group: 'panels', availability: 'always',
|
|
104
|
-
detail: 'Opens this panel; a second Ctrl+G closes it. Every shortcut is listed here.',
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
id: 'ctrl-b', keys: 'Ctrl+B', keyword: 'agents', group: 'panels', availability: 'always',
|
|
108
|
-
detail: 'Read-only subagent board: every child, its facts and its timeline.',
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
id: 'ctrl-p', keys: 'Ctrl+P', keyword: 'prompts', group: 'panels', availability: 'always',
|
|
112
|
-
detail: 'Quick prompt library: pick, edit, reorder.',
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
id: 'ctrl-k', keys: 'Ctrl+K', keyword: 'kits', group: 'panels', availability: 'always',
|
|
116
|
-
detail: 'Switch the main / fast / subagent model kit for this session.',
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
id: 'ctrl-i', keys: 'Ctrl+I', keyword: 'index', group: 'panels', availability: 'idle',
|
|
120
|
-
detail: 'Unavailable while running; asks first, then runs the project-indexer skill.',
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
id: 'alt-k', keys: 'Alt+K', keyword: 'kill line', group: 'panels', availability: 'always',
|
|
124
|
-
detail: 'Deletes from the cursor to the end of the line'
|
|
125
|
-
+ ' (this was Ctrl+K before the kit picker).',
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
id: 'help', keys: '/help', keyword: 'reference', group: 'panels', availability: 'always',
|
|
129
|
-
detail: 'Full reference: keys, slash commands, plan mode, team, skills.',
|
|
130
|
-
},
|
|
131
|
-
// --- SESSION ---------------------------------------------------------------
|
|
132
|
-
{
|
|
133
|
-
id: 'ctrl-l', keys: 'Ctrl+L', keyword: 'branch', group: 'session', availability: 'always',
|
|
134
|
-
detail: 'Opens this session in a new terminal window with its own session id.',
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
id: 'clear', keys: '/clear', keyword: 'new task', group: 'session', availability: 'always',
|
|
138
|
-
detail: 'Archives the old conversation, clears the context;'
|
|
139
|
-
+ ' the task summary is cleared with it.',
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
id: 'resume', keys: '/resume', keyword: 'switch', group: 'session', availability: 'always',
|
|
143
|
-
detail: 'Loads a saved session; the current session moves to a new id.',
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
id: 'session', keys: '/session', keyword: 'identity', group: 'session', availability: 'always',
|
|
147
|
-
detail: 'Shows the session id and file, copies the resume command, pins the id.',
|
|
148
|
-
},
|
|
149
|
-
// --- VIEW ------------------------------------------------------------------
|
|
150
|
-
{
|
|
151
|
-
id: 'page', keys: 'PgUp / PgDn', keyword: 'page', group: 'view', availability: 'always',
|
|
152
|
-
detail: 'Pages the transcript, or the overlay that currently owns the keyboard.',
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
id: 'wheel', keys: 'Wheel', keyword: 'scroll', group: 'view', availability: 'app',
|
|
156
|
-
detail: 'Scrolls the transcript in app mode; in native mode the terminal owns this.',
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
id: 'shift-wheel', keys: 'Shift+Wheel', keyword: 'page', group: 'view', availability: 'app',
|
|
160
|
-
detail: 'Scrolls a whole page.',
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
id: 'shift-arrows', keys: 'Shift+Up / Shift+Down', keyword: 'line', group: 'view',
|
|
164
|
-
availability: 'app',
|
|
165
|
-
detail: 'Scrolls one line; native mode leaves this to the terminal.',
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
id: 'drag-edge', keys: 'Drag right edge', keyword: 'scrollbar', group: 'view',
|
|
169
|
-
availability: 'app',
|
|
170
|
-
detail: 'Drags the right-edge scrollbar; the input stays fixed.',
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
id: 'drag-text', keys: 'Drag text (left button)', keyword: 'select', group: 'view',
|
|
174
|
-
availability: 'app',
|
|
175
|
-
detail: 'Drags to select on-screen text; the highlight waits for a copy.',
|
|
176
|
-
},
|
|
177
|
-
];
|
|
178
|
-
/**
|
|
179
|
-
* The longest `keys` string in cells - the input the column derivation needs.
|
|
180
|
-
*
|
|
181
|
-
* DERIVED, NEVER HARD-CODED: v1 fixed the key column at 21 cells, which left six
|
|
182
|
-
* for the keyword at 80 columns and turned `prompt library` into `promp...`. A
|
|
183
|
-
* derived value cannot go stale the day someone adds a longer binding.
|
|
184
|
-
*/
|
|
185
|
-
export function widestKeysCells(entries) {
|
|
186
|
-
return entries.reduce((widest, entry) => Math.max(widest, cellWidth(entry.keys)), 0);
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Filter for `/keys <query>`: case-insensitive substring over id, keys, keyword
|
|
190
|
-
* and aliases.
|
|
191
|
-
*
|
|
192
|
-
* NO KEYBOARD SEARCH IN THE PANEL ITSELF (§11 F-2): typing would fight `Esc` for
|
|
193
|
-
* "clear the filter or close the panel", and `Esc` is App-owned. The command is
|
|
194
|
-
* the zero-conflict way to reach the same filter.
|
|
195
|
-
*/
|
|
196
|
-
export function filterShortcuts(entries, query) {
|
|
197
|
-
const needle = query.trim().toLowerCase();
|
|
198
|
-
if (needle.length === 0)
|
|
199
|
-
return [...entries];
|
|
200
|
-
return entries.filter((entry) => {
|
|
201
|
-
const haystack = [entry.id, entry.keys, entry.keyword, ...(entry.aliases ?? [])];
|
|
202
|
-
return haystack.some((field) => field.toLowerCase().includes(needle));
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Whether a row can be used right now.
|
|
207
|
-
*
|
|
208
|
-
* `running` MEANS "ONLY WHILE RUNNING", not "unavailable while running" - the two
|
|
209
|
-
* halves of the table would otherwise need two different predicates, which is the
|
|
210
|
-
* kind of asymmetry a later reader gets backwards.
|
|
211
|
-
*/
|
|
212
|
-
export function isAvailable(entry, context) {
|
|
213
|
-
switch (entry.availability) {
|
|
214
|
-
case 'always': return true;
|
|
215
|
-
case 'idle': return !context.running;
|
|
216
|
-
case 'running': return context.running;
|
|
217
|
-
case 'app': return !context.native;
|
|
218
|
-
case 'native': return context.native;
|
|
219
|
-
default: return true;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/** Facts, never translated toast text, determine action ownership and feedback. */
|
|
2
|
-
export interface StatusFeedback {
|
|
3
|
-
kind: 'confirm' | 'stopping' | 'force-stop' | 'exit' | 'clear-input' | 'copying' | 'copied' | 'copy-sent' | 'copy-cleanup' | 'copy-error' | 'notice';
|
|
4
|
-
text: string;
|
|
5
|
-
level: 'info' | 'warn' | 'error';
|
|
6
|
-
}
|
|
7
|
-
export type EscapeAction = 'menu' | 'cancel-start' | 'confirm-stop' | 'force-stop';
|
|
8
|
-
export interface StatusFeedbackInput {
|
|
9
|
-
interactionPhase: 'idle' | 'starting' | 'running';
|
|
10
|
-
interruptPhase?: 'ready' | 'armed' | 'stopping';
|
|
11
|
-
completion?: 'none' | 'slash' | 'file';
|
|
12
|
-
overlay?: string | null;
|
|
13
|
-
copyState?: {
|
|
14
|
-
busy: boolean;
|
|
15
|
-
cleanupPending: boolean;
|
|
16
|
-
};
|
|
17
|
-
copyResult?: {
|
|
18
|
-
status: 'confirmed' | 'sent' | 'error';
|
|
19
|
-
text: string;
|
|
20
|
-
};
|
|
21
|
-
ctrlCArmed?: boolean;
|
|
22
|
-
/** Draft present: the armed feedback names the clear rung, not exit. */
|
|
23
|
-
hasDraft?: boolean;
|
|
24
|
-
selectionPending?: boolean;
|
|
25
|
-
liveServices?: number;
|
|
26
|
-
toast?: {
|
|
27
|
-
text: string;
|
|
28
|
-
level: 'info' | 'warn' | 'error';
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export interface StatusFeedbackProjection {
|
|
32
|
-
feedback?: StatusFeedback;
|
|
33
|
-
escapeAction?: EscapeAction;
|
|
34
|
-
}
|
|
35
|
-
export declare function projectStatusFeedback(input: StatusFeedbackInput): StatusFeedbackProjection;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export function projectStatusFeedback(input) {
|
|
2
|
-
const escapeAction = input.overlay ? undefined
|
|
3
|
-
: input.completion && input.completion !== 'none' ? 'menu'
|
|
4
|
-
: input.interactionPhase === 'starting' ? 'cancel-start'
|
|
5
|
-
: input.interactionPhase !== 'running' ? undefined
|
|
6
|
-
: input.interruptPhase === 'stopping' ? 'force-stop' : 'confirm-stop';
|
|
7
|
-
let feedback;
|
|
8
|
-
if (input.ctrlCArmed && !input.copyState?.busy && !input.copyState?.cleanupPending
|
|
9
|
-
&& !input.selectionPending && !input.liveServices) {
|
|
10
|
-
feedback = input.hasDraft
|
|
11
|
-
? { kind: 'clear-input', text: 'Press Ctrl+C again to clear input', level: 'warn' }
|
|
12
|
-
: { kind: 'exit', text: 'Press Ctrl+C again to exit', level: 'warn' };
|
|
13
|
-
}
|
|
14
|
-
else if (input.copyState?.cleanupPending) {
|
|
15
|
-
feedback = { kind: 'copy-cleanup', text: 'Copy failed; cleaning up', level: 'error' };
|
|
16
|
-
}
|
|
17
|
-
else if (input.copyResult?.status === 'error') {
|
|
18
|
-
feedback = { kind: 'copy-error', text: input.copyResult.text, level: 'error' };
|
|
19
|
-
}
|
|
20
|
-
else if (input.copyState?.busy) {
|
|
21
|
-
feedback = { kind: 'copying', text: 'Copying', level: 'info' };
|
|
22
|
-
}
|
|
23
|
-
else if (input.copyResult) {
|
|
24
|
-
feedback = { kind: input.copyResult.status === 'confirmed' ? 'copied' : 'copy-sent',
|
|
25
|
-
text: input.copyResult.text, level: 'info' };
|
|
26
|
-
}
|
|
27
|
-
else if (input.interruptPhase === 'stopping' && escapeAction === 'force-stop') {
|
|
28
|
-
feedback = { kind: 'force-stop', text: 'Esc again to force-stop', level: 'warn' };
|
|
29
|
-
}
|
|
30
|
-
else if (input.interruptPhase === 'armed' && escapeAction && escapeAction !== 'menu') {
|
|
31
|
-
feedback = { kind: 'stopping', text: input.interactionPhase === 'starting'
|
|
32
|
-
? 'Esc again to cancel start' : 'Esc again to stop', level: 'warn' };
|
|
33
|
-
}
|
|
34
|
-
else if (input.toast) {
|
|
35
|
-
feedback = { kind: 'notice', ...input.toast };
|
|
36
|
-
}
|
|
37
|
-
return { feedback, escapeAction };
|
|
38
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stdout frame writer — the `Proxy` that binds `frame-differ.ts` to a real
|
|
3
|
-
* stream (tui-input-flicker-fix §3.2 / §5.5).
|
|
4
|
-
*
|
|
5
|
-
* Ink offers no hook for "how to write a frame": `Ink#log` is constructed
|
|
6
|
-
* internally and `log-update` is a private module. It DOES accept a `stdout` in
|
|
7
|
-
* `render()`'s options, so the whole interposition is one `Proxy` whose only
|
|
8
|
-
* trapped behaviour is `write` — everything else is the real stream.
|
|
9
|
-
*
|
|
10
|
-
* THREE THINGS IN HERE ARE LOAD-BEARING:
|
|
11
|
-
*
|
|
12
|
-
* - The `get` trap MUST bind non-`write` function members to the REAL stream.
|
|
13
|
-
* Without the bind, `stdout.on('resize', …)` executes with `this === proxy`,
|
|
14
|
-
* and `useTerminalSize` registers and removes its listener against a
|
|
15
|
-
* different `_events` object than the one Node emits on — the frame stops
|
|
16
|
-
* resizing and nothing reports why.
|
|
17
|
-
* - The UNTYPED BOUNDARY LIVES HERE, not in the differ (P1-4). A `Uint8Array`
|
|
18
|
-
* chunk, and any `write` whose `encoding` is present and is not UTF-8, is
|
|
19
|
-
* passed straight through after `invalidate()`: in both cases the bytes on
|
|
20
|
-
* the wire are not the string a differ could reason about, and diffing one
|
|
21
|
-
* encoding while writing another is the kind of bug that only shows up on
|
|
22
|
-
* someone else's machine.
|
|
23
|
-
* - The `'resize'` SUBSCRIPTION (I-8 / P0-2). Ink renders SYNCHRONOUSLY from its
|
|
24
|
-
* own `'resize'` handler while the frame's height is still the pre-resize one
|
|
25
|
-
* — `useTerminalSize` debounces by 50 ms — so the line count is unchanged
|
|
26
|
-
* across that window and the differ's line-count guard cannot see the resize.
|
|
27
|
-
* Meanwhile the emulator has re-flowed the alternate screen, so every row the
|
|
28
|
-
* differ believes unchanged is a row it will not repaint, for the rest of the
|
|
29
|
-
* drag. It goes on the REAL stream, not the `Proxy`, and `dispose()` removes
|
|
30
|
-
* it.
|
|
31
|
-
*/
|
|
32
|
-
import type { FrameDiffer, FrameWriterStats } from './frame-differ.js';
|
|
33
|
-
export interface FrameWriterHandle {
|
|
34
|
-
/** Hand this to `render(…, { stdout })`. */
|
|
35
|
-
stdout: NodeJS.WriteStream;
|
|
36
|
-
/** Hand this to `setFrameStatsProvider`. */
|
|
37
|
-
stats(): FrameWriterStats;
|
|
38
|
-
/**
|
|
39
|
-
* Re-paint the last frame through the differ's `decorate` hook — how a
|
|
40
|
-
* selection drag reaches the screen without a React commit.
|
|
41
|
-
*
|
|
42
|
-
* Returns whether anything was written. `false` means the differ had nothing
|
|
43
|
-
* safe to do (no cache, or a geometry stand-down), which is the caller's cue to
|
|
44
|
-
* fall back to `App`'s `redrawNonce`.
|
|
45
|
-
*
|
|
46
|
-
* I-3 / I-13 — IT WRITES TO THE REAL STREAM, NEVER THROUGH THE PROXY. Through
|
|
47
|
-
* the proxy the payload would be handed to `transform`, which would not
|
|
48
|
-
* recognise it and would `invalidate()`, turning every drag frame into a full
|
|
49
|
-
* repaint — the flicker `tui-input-flicker-fix` removed. It is also not a
|
|
50
|
-
* fallback and not a frame, so it touches neither counter.
|
|
51
|
-
*/
|
|
52
|
-
repaint(): boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Write bytes that are ours but are not a frame — today, the OSC 52 clipboard
|
|
55
|
-
* sequence (§4.4.5).
|
|
56
|
-
*
|
|
57
|
-
* The differ is invalidated first, because absolute addressing is only valid
|
|
58
|
-
* while nothing else writes to stdout, and one full repaint after a copy is the
|
|
59
|
-
* correct price.
|
|
60
|
-
*
|
|
61
|
-
* IT IS NOT A FALLBACK (P1-6 / I-13), and that is the whole reason this door
|
|
62
|
-
* exists rather than the caller reaching for `stdout.write`. `transform` cannot
|
|
63
|
-
* recognise an OSC 52 chunk, so through the proxy it would take
|
|
64
|
-
* `passThrough(true)` — which increments `fallbacks` and, on the first one,
|
|
65
|
-
* raises `onFirstFallback`, wired to `console.warn(FRAME_FALLBACK_NOTICE)`.
|
|
66
|
-
* The first copy of every session would print a diagnostic at a user who did
|
|
67
|
-
* nothing wrong, and `fallbacks` — documented to mean "something wrote to
|
|
68
|
-
* stdout behind Ink's back" — would stop being true for the rest of the run.
|
|
69
|
-
*/
|
|
70
|
-
writeForeign(text: string): void;
|
|
71
|
-
/** Removes the `'resize'` subscription of I-8. Idempotent. */
|
|
72
|
-
dispose(): void;
|
|
73
|
-
}
|
|
74
|
-
export declare function wrapStdoutForFrames(stdout: NodeJS.WriteStream, differ: FrameDiffer): FrameWriterHandle;
|