@aragon-agent/cli 0.6.47 → 0.6.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +27 -6
- package/dist/agent/coalesce.d.ts +1 -1
- package/dist/agent/controller.d.ts +21 -21
- package/dist/agent/controller.js +13 -13
- package/dist/agent/conversation-reset.d.ts +1 -1
- package/dist/agent/governance-wiring.d.ts +6 -6
- package/dist/agent/governance-wiring.js +4 -4
- package/dist/agent/headless.d.ts +5 -5
- package/dist/agent/headless.js +4 -4
- package/dist/agent/job-notices.d.ts +1 -1
- package/dist/agent/job-notices.js +1 -1
- package/dist/agent/kit-apply.d.ts +3 -3
- package/dist/agent/kit-apply.js +3 -3
- package/dist/agent/model-profile-settings.d.ts +2 -2
- package/dist/agent/model-profile-settings.js +6 -6
- package/dist/agent/prompt-options.d.ts +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/{ui → app}/App.d.ts +9 -9
- package/dist/{ui → app}/App.js +79 -79
- package/dist/{ui → app}/use-startup-notices.d.ts +1 -1
- package/dist/{ui → app}/use-startup-notices.js +2 -2
- package/dist/cli.js +29 -29
- package/dist/commands/agents-command.js +1 -1
- package/dist/commands/builtins.js +9 -9
- package/dist/commands/governance-command.js +2 -2
- package/dist/commands/governance-runs-table.js +1 -1
- package/dist/commands/kit-command.js +1 -1
- package/dist/commands/perf.d.ts +3 -3
- package/dist/commands/perf.js +1 -1
- package/dist/commands/registry.d.ts +8 -8
- package/dist/commands/skills.js +2 -2
- package/dist/commands/team-command.js +1 -1
- package/dist/compaction/archive.d.ts +1 -1
- package/dist/compaction/archive.js +1 -1
- package/dist/compaction/child.d.ts +3 -3
- package/dist/compaction/child.js +4 -4
- package/dist/compaction/command.js +5 -5
- package/dist/compaction/compactor.d.ts +6 -6
- package/dist/compaction/compactor.js +6 -6
- package/dist/compaction/context-command.js +1 -1
- package/dist/compaction/digest.js +1 -1
- package/dist/compaction/memory-input.js +1 -1
- package/dist/compaction/memory-validation.js +1 -1
- package/dist/compaction/memory.js +1 -1
- package/dist/compaction/summarize-call.js +1 -1
- package/dist/compaction/summary-prompt.js +1 -1
- package/dist/compaction/tail-budget.js +2 -2
- package/dist/compaction/wiring.d.ts +5 -5
- package/dist/compaction/wiring.js +2 -2
- package/dist/config/cli-commands.d.ts +1 -1
- package/dist/config/cli-commands.js +3 -3
- package/dist/config/env.d.ts +1 -1
- package/dist/config/env.js +4 -4
- package/dist/config/load.d.ts +2 -2
- package/dist/config/load.js +6 -6
- package/dist/config/migrate-state-out-of-config.js +1 -1
- package/dist/config/model-profile-store.d.ts +4 -54
- package/dist/config/model-profile-store.js +3 -3
- package/dist/config/prompt-history.js +1 -1
- package/dist/config/store.d.ts +2 -2
- package/dist/config/store.js +3 -3
- package/dist/diagnostics/doctor.js +4 -4
- package/dist/exec/bridge/decisions.d.ts +1 -1
- package/dist/exec/bridge/human-answers.d.ts +1 -1
- package/dist/exec/bridge/human-answers.js +1 -1
- package/dist/exec/bridge/protocol.d.ts +1 -1
- package/dist/exec/bridge/server.js +1 -1
- package/dist/exec/events.d.ts +2 -2
- package/dist/exec/index.d.ts +1 -1
- package/dist/exec/index.js +1 -1
- package/dist/exec/permission.js +1 -1
- package/dist/exec/runner.d.ts +3 -3
- package/dist/exec/runner.js +2 -2
- package/dist/exec/threads/runtime.js +1 -1
- package/dist/fast/digest.d.ts +1 -1
- package/dist/fast/digest.js +1 -1
- package/dist/fast/frames.d.ts +1 -1
- package/dist/fast/frames.js +1 -1
- package/dist/fast/prompt.d.ts +1 -1
- package/dist/fast/prompt.js +1 -1
- package/dist/fast/review-call.js +1 -1
- package/dist/fast/reviewer.d.ts +3 -3
- package/dist/fast/reviewer.js +1 -1
- package/dist/fast/summary-call.d.ts +3 -3
- package/dist/fast/summary-call.js +2 -2
- package/dist/fast/summary-prompt.d.ts +1 -1
- package/dist/fast/summary-prompt.js +1 -1
- package/dist/fast/wiring.d.ts +4 -4
- package/dist/fast/wiring.js +1 -1
- package/dist/governance/card-normalize.d.ts +1 -1
- package/dist/governance/copy.d.ts +1 -1
- package/dist/governance/copy.js +2 -2
- package/dist/governance/engine/artifact-persist.d.ts +1 -1
- package/dist/governance/engine/budget.d.ts +1 -1
- package/dist/governance/engine/budget.js +1 -1
- package/dist/governance/engine/cards.d.ts +1 -1
- package/dist/governance/engine/digest.js +1 -1
- package/dist/governance/engine/engine-core.d.ts +5 -5
- package/dist/governance/engine/engine-core.js +1 -1
- package/dist/governance/engine/engine.d.ts +1 -1
- package/dist/governance/engine/engine.js +1 -1
- package/dist/governance/engine/estimate.d.ts +1 -1
- package/dist/governance/engine/estimate.js +1 -1
- package/dist/governance/engine/inspector.js +2 -2
- package/dist/governance/engine/integration.d.ts +1 -1
- package/dist/governance/engine/lifecycle.d.ts +1 -1
- package/dist/governance/engine/lifecycle.js +1 -1
- package/dist/governance/engine/phase-members.d.ts +1 -1
- package/dist/governance/engine/phase-planner.d.ts +1 -1
- package/dist/governance/engine/phase-planner.js +1 -1
- package/dist/governance/engine/rebuild.d.ts +1 -1
- package/dist/governance/engine/report.d.ts +1 -1
- package/dist/governance/engine/report.js +1 -1
- package/dist/governance/engine/run-digest.d.ts +1 -1
- package/dist/governance/engine/spec-builder.d.ts +2 -2
- package/dist/governance/engine/spec-builder.js +2 -2
- package/dist/governance/engine/stage-runner.js +2 -2
- package/dist/governance/engine/start-input.d.ts +1 -1
- package/dist/governance/engine/start-input.js +1 -1
- package/dist/governance/engine/state-machine.d.ts +1 -1
- package/dist/governance/engine/state-machine.js +3 -3
- package/dist/governance/engine/submission-queries.d.ts +1 -1
- package/dist/governance/engine/submission-render.d.ts +1 -1
- package/dist/governance/engine/submissions.d.ts +1 -1
- package/dist/governance/engine/submissions.js +1 -1
- package/dist/governance/engine/visibility.d.ts +1 -1
- package/dist/governance/engine/visibility.js +1 -1
- package/dist/governance/posture-transition.d.ts +2 -2
- package/dist/governance/posture-transition.js +1 -1
- package/dist/governance/profiles.d.ts +1 -1
- package/dist/governance/prompts/orchestrator-block.d.ts +2 -2
- package/dist/governance/prompts/orchestrator-block.js +2 -2
- package/dist/governance/prompts/plan-addendum.d.ts +1 -1
- package/dist/governance/prompts/plan-addendum.js +1 -1
- package/dist/governance/prompts/role-blocks.d.ts +2 -2
- package/dist/governance/prompts/role-blocks.js +1 -1
- package/dist/governance/report-reader.js +1 -1
- package/dist/governance/roles.d.ts +1 -1
- package/dist/governance/rules/claims.d.ts +1 -1
- package/dist/governance/rules/claims.js +1 -1
- package/dist/governance/rules/elimination.d.ts +1 -1
- package/dist/governance/rules/elimination.js +1 -1
- package/dist/governance/rules/failure-analysis.d.ts +2 -2
- package/dist/governance/rules/failure-analysis.js +1 -1
- package/dist/governance/rules/ledger-replay.d.ts +1 -1
- package/dist/governance/rules/ledger-state.d.ts +1 -1
- package/dist/governance/rules/ledger-state.js +1 -1
- package/dist/governance/rules/ledger.d.ts +2 -2
- package/dist/governance/rules/ledger.js +2 -2
- package/dist/governance/rules/rca.d.ts +1 -1
- package/dist/governance/rules/rca.js +1 -1
- package/dist/governance/rules/settlement.d.ts +2 -2
- package/dist/governance/rules/settlement.js +2 -2
- package/dist/governance/rules/suspicion.d.ts +1 -1
- package/dist/governance/store/artifacts.d.ts +1 -1
- package/dist/governance/store/artifacts.js +1 -1
- package/dist/governance/store/events-log.d.ts +1 -1
- package/dist/governance/store/run-store.d.ts +1 -1
- package/dist/governance/store/run-store.js +1 -1
- package/dist/governance/store/scoreboard-export.d.ts +1 -1
- package/dist/governance/tools/child-tools.d.ts +1 -1
- package/dist/governance/tools/guard.d.ts +1 -1
- package/dist/governance/tools/guard.js +1 -1
- package/dist/governance/tools/inspector-tools.d.ts +2 -2
- package/dist/governance/tools/inspector-tools.js +2 -2
- package/dist/governance/tools/lead-tools.d.ts +1 -1
- package/dist/governance/tools/lead-tools.js +1 -1
- package/dist/governance/tools/normalize-util.js +1 -1
- package/dist/governance/tools/scan-incomplete.js +1 -1
- package/dist/governance/tools/shared-tools.d.ts +1 -1
- package/dist/governance/tools/shared-tools.js +1 -1
- package/dist/governance/tools/submit-normalizers.d.ts +1 -1
- package/dist/governance/tools/submit-normalizers.js +1 -1
- package/dist/governance/tools/submit-tools.d.ts +1 -1
- package/dist/logging/cli-commands.js +1 -1
- package/dist/logging/install.d.ts +1 -1
- package/dist/logging/install.js +3 -3
- package/dist/logging/logger.d.ts +2 -2
- package/dist/logging/logger.js +31 -2
- package/dist/proc/kill-tree.js +1 -1
- package/dist/proc/log-mirror.js +1 -1
- package/dist/proc/log-ring.js +2 -2
- package/dist/proc/notices.d.ts +1 -1
- package/dist/proc/notices.js +2 -2
- package/dist/proc/prompt.d.ts +1 -1
- package/dist/proc/prompt.js +1 -1
- package/dist/proc/readiness.js +1 -1
- package/dist/proc/supervisor.d.ts +1 -1
- package/dist/proc/supervisor.js +3 -3
- package/dist/proc/wait.d.ts +1 -1
- package/dist/proc/wait.js +1 -1
- package/dist/prompts/command.d.ts +1 -1
- package/dist/prompts/command.js +1 -1
- package/dist/prompts/normalize.d.ts +1 -1
- package/dist/prompts/normalize.js +1 -1
- package/dist/prompts/resolve.d.ts +1 -1
- package/dist/prompts/store.d.ts +2 -12
- package/dist/prompts/store.js +6 -60
- package/dist/session/checkpoint.d.ts +2 -2
- package/dist/session/clear-archive.d.ts +2 -2
- package/dist/session/persist.d.ts +2 -2
- package/dist/session/persist.js +1 -1
- package/dist/session/startup-session.d.ts +2 -2
- package/dist/session/validate-session.js +3 -3
- package/dist/skills/service.d.ts +2 -2
- package/dist/team/bus.d.ts +1 -1
- package/dist/team/bus.js +1 -1
- package/dist/team/child-reviewer.d.ts +2 -2
- package/dist/team/child-reviewer.js +1 -1
- package/dist/team/comm-tools.js +1 -1
- package/dist/team/dispatch-gate.js +1 -1
- package/dist/team/forced-dispatch.js +1 -1
- package/dist/team/forced-mode.d.ts +1 -1
- package/dist/team/forced-prompt.d.ts +1 -1
- package/dist/team/forced-prompt.js +1 -1
- package/dist/team/normalize.d.ts +1 -1
- package/dist/team/normalize.js +1 -1
- package/dist/team/overseer.d.ts +3 -3
- package/dist/team/overseer.js +3 -3
- package/dist/team/prompt.d.ts +1 -1
- package/dist/team/prompt.js +1 -1
- package/dist/team/report.d.ts +2 -2
- package/dist/team/report.js +2 -2
- package/dist/team/retry.d.ts +1 -1
- package/dist/team/retry.js +1 -1
- package/dist/team/runtime.d.ts +4 -4
- package/dist/team/runtime.js +2 -2
- package/dist/team/settled.d.ts +2 -2
- package/dist/team/subagent.d.ts +4 -4
- package/dist/team/subagent.js +5 -5
- package/dist/team/task-tool.d.ts +1 -1
- package/dist/team/task-tool.js +1 -1
- package/dist/todo/normalize.d.ts +1 -1
- package/dist/todo/normalize.js +1 -1
- package/dist/todo/prompt.d.ts +1 -1
- package/dist/todo/prompt.js +1 -1
- package/dist/todo/store.d.ts +1 -1
- package/dist/todo/store.js +2 -2
- package/dist/todo/todo-tool.d.ts +1 -1
- package/dist/todo/todo-tool.js +2 -2
- package/dist/tools/bash-tool.d.ts +1 -1
- package/dist/tools/bash-tool.js +2 -2
- package/dist/tools/diff.d.ts +1 -1
- package/dist/tools/diff.js +1 -1
- package/dist/tools/file-change-store.d.ts +1 -1
- package/dist/tools/fs-tools.d.ts +2 -2
- package/dist/tools/fs-tools.js +1 -1
- package/dist/tools/index.d.ts +3 -3
- package/dist/tools/index.js +1 -1
- package/dist/tools/job-tools.d.ts +2 -2
- package/dist/tools/job-tools.js +4 -4
- package/dist/tools/plan-tools.d.ts +1 -1
- package/dist/tools/plan-tools.js +1 -1
- package/dist/tools/proc-tools.d.ts +1 -1
- package/dist/tools/proc-tools.js +2 -2
- package/dist/update/classify-failure.d.ts +1 -1
- package/dist/update/install-lock.js +1 -1
- package/dist/update/install-source.d.ts +1 -1
- package/dist/update/installer.js +2 -2
- package/dist/update/npm-view.d.ts +1 -1
- package/dist/update/npm-view.js +1 -1
- package/dist/update/registry.d.ts +1 -1
- package/dist/update/registry.js +1 -1
- package/dist/update/service.d.ts +2 -2
- package/dist/update/service.js +2 -2
- package/package.json +7 -7
- package/dist/agent/agent-mode.d.ts +0 -108
- package/dist/agent/agent-mode.js +0 -121
- package/dist/agent/entry-limits.d.ts +0 -65
- package/dist/agent/entry-limits.js +0 -133
- package/dist/agent/governance-view.d.ts +0 -40
- package/dist/agent/governance-view.js +0 -40
- package/dist/agent/invocation-card.d.ts +0 -77
- package/dist/agent/invocation-card.js +0 -169
- package/dist/agent/model-probe-limits.d.ts +0 -39
- package/dist/agent/model-probe-limits.js +0 -25
- package/dist/agent/model-probe.d.ts +0 -104
- package/dist/agent/model-probe.js +0 -391
- package/dist/agent/queued-messages.d.ts +0 -23
- package/dist/agent/queued-messages.js +0 -49
- package/dist/agent/reducer.d.ts +0 -857
- package/dist/agent/reducer.js +0 -1646
- package/dist/agent/retry-view.d.ts +0 -68
- package/dist/agent/retry-view.js +0 -95
- package/dist/agent/usage.d.ts +0 -47
- package/dist/agent/usage.js +0 -84
- package/dist/compaction/limits.d.ts +0 -61
- package/dist/compaction/limits.js +0 -64
- package/dist/compaction/meter.d.ts +0 -276
- package/dist/compaction/meter.js +0 -512
- package/dist/compaction/pressure.d.ts +0 -163
- package/dist/compaction/pressure.js +0 -199
- package/dist/compaction/reason-text.d.ts +0 -36
- package/dist/compaction/reason-text.js +0 -78
- package/dist/compaction/types.d.ts +0 -360
- package/dist/compaction/types.js +0 -22
- package/dist/config/governance-config.d.ts +0 -125
- package/dist/config/governance-config.js +0 -164
- package/dist/config/kit-resolution.d.ts +0 -93
- package/dist/config/kit-resolution.js +0 -226
- package/dist/config/model-kits.d.ts +0 -225
- package/dist/config/model-kits.js +0 -302
- package/dist/config/model-profile-resolution.d.ts +0 -28
- package/dist/config/model-profile-resolution.js +0 -88
- package/dist/config/model-profiles.d.ts +0 -103
- package/dist/config/model-profiles.js +0 -188
- package/dist/config/schema.d.ts +0 -1645
- package/dist/config/schema.js +0 -1383
- package/dist/fast/limits.d.ts +0 -152
- package/dist/fast/limits.js +0 -152
- package/dist/fast/resolve.d.ts +0 -44
- package/dist/fast/resolve.js +0 -107
- package/dist/fast/task-summary-types.d.ts +0 -66
- package/dist/fast/task-summary-types.js +0 -17
- package/dist/fast/types.d.ts +0 -141
- package/dist/fast/types.js +0 -14
- package/dist/governance/governed-dispatch.d.ts +0 -19
- package/dist/governance/governed-dispatch.js +0 -17
- package/dist/governance/limits.d.ts +0 -107
- package/dist/governance/limits.js +0 -131
- package/dist/governance/posture.d.ts +0 -35
- package/dist/governance/posture.js +0 -59
- package/dist/governance/rules/events-table.d.ts +0 -46
- package/dist/governance/rules/events-table.js +0 -94
- package/dist/governance/types.d.ts +0 -661
- package/dist/governance/types.js +0 -27
- package/dist/input/control-sequences.d.ts +0 -71
- package/dist/input/control-sequences.js +0 -222
- package/dist/input/csiu-keys.d.ts +0 -66
- package/dist/input/csiu-keys.js +0 -181
- package/dist/input/cursor-report.d.ts +0 -61
- package/dist/input/cursor-report.js +0 -97
- package/dist/input/enter-sequences.d.ts +0 -64
- package/dist/input/enter-sequences.js +0 -153
- package/dist/input/interrupt-gesture.d.ts +0 -18
- package/dist/input/interrupt-gesture.js +0 -19
- package/dist/input/keyboard-enhancement.d.ts +0 -42
- package/dist/input/keyboard-enhancement.js +0 -65
- package/dist/input/keymap.d.ts +0 -20
- package/dist/input/keymap.js +0 -99
- package/dist/input/limits.d.ts +0 -118
- package/dist/input/limits.js +0 -109
- package/dist/input/mouse-events.d.ts +0 -87
- package/dist/input/mouse-events.js +0 -212
- package/dist/input/paste-parse.d.ts +0 -83
- package/dist/input/paste-parse.js +0 -107
- package/dist/input/pointer-router.d.ts +0 -11
- package/dist/input/pointer-router.js +0 -14
- package/dist/input/stdin-filter.d.ts +0 -112
- package/dist/input/stdin-filter.js +0 -657
- package/dist/input/win32-input-mode.d.ts +0 -61
- package/dist/input/win32-input-mode.js +0 -269
- package/dist/logging/levels.d.ts +0 -40
- package/dist/logging/levels.js +0 -59
- package/dist/logging/secret-registry.d.ts +0 -32
- package/dist/logging/secret-registry.js +0 -73
- package/dist/proc/limits.d.ts +0 -214
- package/dist/proc/limits.js +0 -221
- package/dist/proc/progress.d.ts +0 -47
- package/dist/proc/progress.js +0 -163
- package/dist/proc/types.d.ts +0 -269
- package/dist/proc/types.js +0 -15
- package/dist/proc/wait-view.d.ts +0 -65
- package/dist/proc/wait-view.js +0 -66
- package/dist/prompts/copy.d.ts +0 -89
- package/dist/prompts/copy.js +0 -131
- package/dist/prompts/fill.d.ts +0 -51
- package/dist/prompts/fill.js +0 -46
- package/dist/prompts/limits.d.ts +0 -53
- package/dist/prompts/limits.js +0 -53
- package/dist/prompts/search.d.ts +0 -58
- package/dist/prompts/search.js +0 -146
- package/dist/prompts/types.d.ts +0 -204
- package/dist/prompts/types.js +0 -13
- package/dist/team/activity.d.ts +0 -67
- package/dist/team/activity.js +0 -130
- package/dist/team/limits.d.ts +0 -308
- package/dist/team/limits.js +0 -330
- package/dist/team/model.d.ts +0 -104
- package/dist/team/model.js +0 -150
- package/dist/team/panel-rows.d.ts +0 -48
- package/dist/team/panel-rows.js +0 -75
- package/dist/team/timeline.d.ts +0 -74
- package/dist/team/timeline.js +0 -101
- package/dist/team/types.d.ts +0 -354
- package/dist/team/types.js +0 -13
- package/dist/todo/acceptance.d.ts +0 -120
- package/dist/todo/acceptance.js +0 -399
- package/dist/todo/follow-through.d.ts +0 -138
- package/dist/todo/follow-through.js +0 -248
- package/dist/todo/limits.d.ts +0 -152
- package/dist/todo/limits.js +0 -152
- package/dist/todo/panel-rows.d.ts +0 -45
- package/dist/todo/panel-rows.js +0 -70
- package/dist/todo/plan-sections.d.ts +0 -60
- package/dist/todo/plan-sections.js +0 -108
- package/dist/todo/row-window.d.ts +0 -51
- package/dist/todo/row-window.js +0 -107
- package/dist/todo/types.d.ts +0 -124
- package/dist/todo/types.js +0 -12
- package/dist/tools/human-input.d.ts +0 -212
- package/dist/tools/human-input.js +0 -265
- package/dist/tools/patch.d.ts +0 -115
- package/dist/tools/patch.js +0 -453
- package/dist/tools/terminal-output.d.ts +0 -115
- package/dist/tools/terminal-output.js +0 -201
- package/dist/tools/tool-output-store.d.ts +0 -68
- package/dist/tools/tool-output-store.js +0 -102
- package/dist/ui/ActivityLine.d.ts +0 -26
- package/dist/ui/ActivityLine.js +0 -51
- package/dist/ui/AutocompletePopup.d.ts +0 -23
- package/dist/ui/AutocompletePopup.js +0 -17
- package/dist/ui/BottomStatusRow.d.ts +0 -10
- package/dist/ui/BottomStatusRow.js +0 -9
- package/dist/ui/Composer.d.ts +0 -115
- package/dist/ui/Composer.js +0 -64
- package/dist/ui/GovernancePanel.d.ts +0 -50
- package/dist/ui/GovernancePanel.js +0 -77
- package/dist/ui/GovernanceRun.d.ts +0 -18
- package/dist/ui/GovernanceRun.js +0 -11
- package/dist/ui/Header.d.ts +0 -48
- package/dist/ui/Header.js +0 -27
- package/dist/ui/Logo.d.ts +0 -32
- package/dist/ui/Logo.js +0 -65
- package/dist/ui/Markdown.d.ts +0 -29
- package/dist/ui/Markdown.js +0 -116
- package/dist/ui/PromptCaret.d.ts +0 -11
- package/dist/ui/PromptCaret.js +0 -31
- package/dist/ui/PromptInput.d.ts +0 -192
- package/dist/ui/PromptInput.js +0 -689
- package/dist/ui/QueuePanel.d.ts +0 -8
- package/dist/ui/QueuePanel.js +0 -9
- package/dist/ui/QueueStatusRow.d.ts +0 -24
- package/dist/ui/QueueStatusRow.js +0 -51
- package/dist/ui/ScrollbackShell.d.ts +0 -132
- package/dist/ui/ScrollbackShell.js +0 -26
- package/dist/ui/SessionOpener.d.ts +0 -30
- package/dist/ui/SessionOpener.js +0 -12
- package/dist/ui/StatusBar.d.ts +0 -130
- package/dist/ui/StatusBar.js +0 -61
- package/dist/ui/TeamPanel.d.ts +0 -76
- package/dist/ui/TeamPanel.js +0 -103
- package/dist/ui/ToastStack.d.ts +0 -8
- package/dist/ui/ToastStack.js +0 -31
- package/dist/ui/TodoPanel.d.ts +0 -52
- package/dist/ui/TodoPanel.js +0 -214
- package/dist/ui/Transcript.d.ts +0 -105
- package/dist/ui/Transcript.js +0 -258
- package/dist/ui/UpdateLine.d.ts +0 -44
- package/dist/ui/UpdateLine.js +0 -129
- package/dist/ui/activity-phrases.d.ts +0 -33
- package/dist/ui/activity-phrases.js +0 -50
- package/dist/ui/capabilities.d.ts +0 -27
- package/dist/ui/capabilities.js +0 -65
- package/dist/ui/clipboard-task.d.ts +0 -29
- package/dist/ui/clipboard-task.js +0 -66
- package/dist/ui/clipboard.d.ts +0 -31
- package/dist/ui/clipboard.js +0 -157
- package/dist/ui/color-runtime.d.ts +0 -5
- package/dist/ui/color-runtime.js +0 -29
- package/dist/ui/composer-input.d.ts +0 -38
- package/dist/ui/composer-input.js +0 -79
- package/dist/ui/composer-limits.d.ts +0 -30
- package/dist/ui/composer-limits.js +0 -45
- package/dist/ui/composer-rows.d.ts +0 -73
- package/dist/ui/composer-rows.js +0 -129
- package/dist/ui/console-bridge.d.ts +0 -19
- package/dist/ui/console-bridge.js +0 -52
- package/dist/ui/density.d.ts +0 -26
- package/dist/ui/density.js +0 -34
- package/dist/ui/display-tab.d.ts +0 -51
- package/dist/ui/display-tab.js +0 -82
- package/dist/ui/editor-navigation.d.ts +0 -55
- package/dist/ui/editor-navigation.js +0 -96
- package/dist/ui/editor-reducer.d.ts +0 -108
- package/dist/ui/editor-reducer.js +0 -187
- package/dist/ui/enter-frames.d.ts +0 -47
- package/dist/ui/enter-frames.js +0 -117
- package/dist/ui/entries/AssistantEntry.d.ts +0 -37
- package/dist/ui/entries/AssistantEntry.js +0 -43
- package/dist/ui/entries/CompactionCard.d.ts +0 -88
- package/dist/ui/entries/CompactionCard.js +0 -222
- package/dist/ui/entries/DiffView.d.ts +0 -61
- package/dist/ui/entries/DiffView.js +0 -103
- package/dist/ui/entries/EntryFrame.d.ts +0 -23
- package/dist/ui/entries/EntryFrame.js +0 -6
- package/dist/ui/entries/FastCard.d.ts +0 -53
- package/dist/ui/entries/FastCard.js +0 -105
- package/dist/ui/entries/GovernanceCard.d.ts +0 -30
- package/dist/ui/entries/GovernanceCard.js +0 -32
- package/dist/ui/entries/InvocationCard.d.ts +0 -20
- package/dist/ui/entries/InvocationCard.js +0 -32
- package/dist/ui/entries/QueuedEntry.d.ts +0 -27
- package/dist/ui/entries/QueuedEntry.js +0 -33
- package/dist/ui/entries/RetryCard.d.ts +0 -56
- package/dist/ui/entries/RetryCard.js +0 -60
- package/dist/ui/entries/ServiceCard.d.ts +0 -82
- package/dist/ui/entries/ServiceCard.js +0 -151
- package/dist/ui/entries/TeamCard.d.ts +0 -55
- package/dist/ui/entries/TeamCard.js +0 -94
- package/dist/ui/entries/TodoCard.d.ts +0 -54
- package/dist/ui/entries/TodoCard.js +0 -98
- package/dist/ui/entries/ToolCard.d.ts +0 -81
- package/dist/ui/entries/ToolCard.js +0 -169
- package/dist/ui/entries/ToolPreview.d.ts +0 -59
- package/dist/ui/entries/ToolPreview.js +0 -208
- package/dist/ui/entries/UserEntry.d.ts +0 -36
- package/dist/ui/entries/UserEntry.js +0 -57
- package/dist/ui/entries/WaitCard.d.ts +0 -37
- package/dist/ui/entries/WaitCard.js +0 -92
- package/dist/ui/exit-snapshot.d.ts +0 -43
- package/dist/ui/exit-snapshot.js +0 -26
- package/dist/ui/frame-differ.d.ts +0 -166
- package/dist/ui/frame-differ.js +0 -354
- package/dist/ui/frame-observer.d.ts +0 -17
- package/dist/ui/frame-observer.js +0 -94
- package/dist/ui/frame-parser.d.ts +0 -7
- package/dist/ui/frame-parser.js +0 -18
- package/dist/ui/gauge.d.ts +0 -39
- package/dist/ui/gauge.js +0 -55
- package/dist/ui/glyphs.d.ts +0 -178
- package/dist/ui/glyphs.js +0 -165
- package/dist/ui/governance-copy.d.ts +0 -69
- package/dist/ui/governance-copy.js +0 -104
- package/dist/ui/governance-status.d.ts +0 -145
- package/dist/ui/governance-status.js +0 -326
- package/dist/ui/gradient.d.ts +0 -11
- package/dist/ui/gradient.js +0 -50
- package/dist/ui/ink-runtime.d.ts +0 -4
- package/dist/ui/ink-runtime.js +0 -51
- package/dist/ui/interaction-copy.d.ts +0 -84
- package/dist/ui/interaction-copy.js +0 -41
- package/dist/ui/interaction-hints.d.ts +0 -44
- package/dist/ui/interaction-hints.js +0 -97
- package/dist/ui/layout/AppShell.d.ts +0 -17
- package/dist/ui/layout/AppShell.js +0 -6
- package/dist/ui/layout/Gutter.d.ts +0 -67
- package/dist/ui/layout/Gutter.js +0 -42
- package/dist/ui/layout/MeasuredEntry.d.ts +0 -21
- package/dist/ui/layout/MeasuredEntry.js +0 -30
- package/dist/ui/layout/OverlayFrame.d.ts +0 -73
- package/dist/ui/layout/OverlayFrame.js +0 -110
- package/dist/ui/layout/ScrollIndicator.d.ts +0 -32
- package/dist/ui/layout/ScrollIndicator.js +0 -22
- package/dist/ui/layout/ScrollViewport.d.ts +0 -40
- package/dist/ui/layout/ScrollViewport.js +0 -222
- package/dist/ui/layout/agents-board.d.ts +0 -102
- package/dist/ui/layout/agents-board.js +0 -389
- package/dist/ui/layout/autocomplete.d.ts +0 -18
- package/dist/ui/layout/autocomplete.js +0 -26
- package/dist/ui/layout/budget.d.ts +0 -43
- package/dist/ui/layout/budget.js +0 -52
- package/dist/ui/layout/cells.d.ts +0 -61
- package/dist/ui/layout/cells.js +0 -156
- package/dist/ui/layout/document-layout.d.ts +0 -13
- package/dist/ui/layout/document-layout.js +0 -10
- package/dist/ui/layout/follow-state.d.ts +0 -138
- package/dist/ui/layout/follow-state.js +0 -148
- package/dist/ui/layout/frame.d.ts +0 -36
- package/dist/ui/layout/frame.js +0 -39
- package/dist/ui/layout/governance-board.d.ts +0 -121
- package/dist/ui/layout/governance-board.js +0 -382
- package/dist/ui/layout/governance-card.d.ts +0 -53
- package/dist/ui/layout/governance-card.js +0 -134
- package/dist/ui/layout/governance-chip.d.ts +0 -38
- package/dist/ui/layout/governance-chip.js +0 -64
- package/dist/ui/layout/governance-panel.d.ts +0 -85
- package/dist/ui/layout/governance-panel.js +0 -358
- package/dist/ui/layout/governance-roster.d.ts +0 -65
- package/dist/ui/layout/governance-roster.js +0 -275
- package/dist/ui/layout/header-hints.d.ts +0 -90
- package/dist/ui/layout/header-hints.js +0 -110
- package/dist/ui/layout/header-left.d.ts +0 -115
- package/dist/ui/layout/header-left.js +0 -206
- package/dist/ui/layout/invocation-card.d.ts +0 -41
- package/dist/ui/layout/invocation-card.js +0 -91
- package/dist/ui/layout/kit-chip.d.ts +0 -50
- package/dist/ui/layout/kit-chip.js +0 -81
- package/dist/ui/layout/overlay-window.d.ts +0 -43
- package/dist/ui/layout/overlay-window.js +0 -51
- package/dist/ui/layout/queue-layout.d.ts +0 -19
- package/dist/ui/layout/queue-layout.js +0 -26
- package/dist/ui/layout/rail.d.ts +0 -7
- package/dist/ui/layout/rail.js +0 -16
- package/dist/ui/layout/scroll-indicator.d.ts +0 -27
- package/dist/ui/layout/scroll-indicator.js +0 -36
- package/dist/ui/layout/scroll.d.ts +0 -37
- package/dist/ui/layout/scroll.js +0 -99
- package/dist/ui/layout/scrollbar-geometry.d.ts +0 -17
- package/dist/ui/layout/scrollbar-geometry.js +0 -13
- package/dist/ui/layout/session-chip.d.ts +0 -52
- package/dist/ui/layout/session-chip.js +0 -64
- package/dist/ui/layout/shortcut-panel-layout.d.ts +0 -191
- package/dist/ui/layout/shortcut-panel-layout.js +0 -321
- package/dist/ui/layout/status-detail-layout.d.ts +0 -9
- package/dist/ui/layout/status-detail-layout.js +0 -79
- package/dist/ui/layout/status-layout.d.ts +0 -140
- package/dist/ui/layout/status-layout.js +0 -262
- package/dist/ui/layout/task-summary-cell.d.ts +0 -61
- package/dist/ui/layout/task-summary-cell.js +0 -65
- package/dist/ui/layout/team-panel.d.ts +0 -18
- package/dist/ui/layout/team-panel.js +0 -25
- package/dist/ui/layout/team-row.d.ts +0 -139
- package/dist/ui/layout/team-row.js +0 -246
- package/dist/ui/layout/todo-layout.d.ts +0 -62
- package/dist/ui/layout/todo-layout.js +0 -102
- package/dist/ui/layout/useTerminalSize.d.ts +0 -13
- package/dist/ui/layout/useTerminalSize.js +0 -50
- package/dist/ui/layout/viewport-geometry.d.ts +0 -29
- package/dist/ui/layout/viewport-geometry.js +0 -28
- package/dist/ui/layout/virtual-window.d.ts +0 -112
- package/dist/ui/layout/virtual-window.js +0 -494
- package/dist/ui/layout/wait-bar.d.ts +0 -34
- package/dist/ui/layout/wait-bar.js +0 -48
- package/dist/ui/layout/wrap-rows.d.ts +0 -26
- package/dist/ui/layout/wrap-rows.js +0 -88
- package/dist/ui/live-clamp.d.ts +0 -14
- package/dist/ui/live-clamp.js +0 -46
- package/dist/ui/markdown-blocks.d.ts +0 -107
- package/dist/ui/markdown-blocks.js +0 -240
- package/dist/ui/overlays/AgentsBoardOverlay.d.ts +0 -57
- package/dist/ui/overlays/AgentsBoardOverlay.js +0 -183
- package/dist/ui/overlays/ConfirmDialog.d.ts +0 -31
- package/dist/ui/overlays/ConfirmDialog.js +0 -44
- package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +0 -41
- package/dist/ui/overlays/GovernanceBoardOverlay.js +0 -76
- package/dist/ui/overlays/GovernanceSettingsPage.d.ts +0 -48
- package/dist/ui/overlays/GovernanceSettingsPage.js +0 -93
- package/dist/ui/overlays/HelpOverlay.d.ts +0 -29
- package/dist/ui/overlays/HelpOverlay.js +0 -232
- package/dist/ui/overlays/KitEditor.d.ts +0 -23
- package/dist/ui/overlays/KitEditor.js +0 -101
- package/dist/ui/overlays/KitManager.d.ts +0 -23
- package/dist/ui/overlays/KitManager.js +0 -104
- package/dist/ui/overlays/KitPicker.d.ts +0 -49
- package/dist/ui/overlays/KitPicker.js +0 -58
- package/dist/ui/overlays/ModelDiscoveryList.d.ts +0 -23
- package/dist/ui/overlays/ModelDiscoveryList.js +0 -161
- package/dist/ui/overlays/ModelPicker.d.ts +0 -26
- package/dist/ui/overlays/ModelPicker.js +0 -63
- package/dist/ui/overlays/ModelProfileEditor.d.ts +0 -29
- package/dist/ui/overlays/ModelProfileEditor.js +0 -168
- package/dist/ui/overlays/ModelProfilePicker.d.ts +0 -48
- package/dist/ui/overlays/ModelProfilePicker.js +0 -231
- package/dist/ui/overlays/PlanReviewOverlay.d.ts +0 -51
- package/dist/ui/overlays/PlanReviewOverlay.js +0 -132
- package/dist/ui/overlays/PromptEditorPage.d.ts +0 -48
- package/dist/ui/overlays/PromptEditorPage.js +0 -227
- package/dist/ui/overlays/PromptLibraryOverlay.d.ts +0 -37
- package/dist/ui/overlays/PromptLibraryOverlay.js +0 -191
- package/dist/ui/overlays/PromptPicker.d.ts +0 -36
- package/dist/ui/overlays/PromptPicker.js +0 -129
- package/dist/ui/overlays/PromptTextArea.d.ts +0 -86
- package/dist/ui/overlays/PromptTextArea.js +0 -141
- package/dist/ui/overlays/QuestionOverlay.d.ts +0 -39
- package/dist/ui/overlays/QuestionOverlay.js +0 -258
- package/dist/ui/overlays/QueueOverlay.d.ts +0 -22
- package/dist/ui/overlays/QueueOverlay.js +0 -79
- package/dist/ui/overlays/SettingsScreen.d.ts +0 -228
- package/dist/ui/overlays/SettingsScreen.js +0 -1037
- package/dist/ui/overlays/ShortcutPanel.d.ts +0 -39
- package/dist/ui/overlays/ShortcutPanel.js +0 -106
- package/dist/ui/overlays/TeamFanoutPage.d.ts +0 -51
- package/dist/ui/overlays/TeamFanoutPage.js +0 -90
- package/dist/ui/overlays/governance-settings.d.ts +0 -79
- package/dist/ui/overlays/governance-settings.js +0 -140
- package/dist/ui/overlays/kit-picker-state.d.ts +0 -87
- package/dist/ui/overlays/kit-picker-state.js +0 -136
- package/dist/ui/overlays/kit-settings-state.d.ts +0 -129
- package/dist/ui/overlays/kit-settings-state.js +0 -268
- package/dist/ui/overlays/model-probe-view.d.ts +0 -128
- package/dist/ui/overlays/model-probe-view.js +0 -225
- package/dist/ui/overlays/model-profile-state.d.ts +0 -177
- package/dist/ui/overlays/model-profile-state.js +0 -301
- package/dist/ui/overlays/prompt-library-state.d.ts +0 -162
- package/dist/ui/overlays/prompt-library-state.js +0 -335
- package/dist/ui/overlays/prompt-picker-state.d.ts +0 -71
- package/dist/ui/overlays/prompt-picker-state.js +0 -98
- package/dist/ui/overlays/team-fanout-state.d.ts +0 -106
- package/dist/ui/overlays/team-fanout-state.js +0 -155
- package/dist/ui/overlays/use-model-probe.d.ts +0 -30
- package/dist/ui/overlays/use-model-probe.js +0 -109
- package/dist/ui/palettes.d.ts +0 -112
- package/dist/ui/palettes.js +0 -130
- package/dist/ui/paste-frames.d.ts +0 -91
- package/dist/ui/paste-frames.js +0 -117
- package/dist/ui/paste-tokens.d.ts +0 -90
- package/dist/ui/paste-tokens.js +0 -147
- package/dist/ui/render-cache.d.ts +0 -81
- package/dist/ui/render-cache.js +0 -196
- package/dist/ui/render-governor.d.ts +0 -54
- package/dist/ui/render-governor.js +0 -78
- package/dist/ui/run-metrics.d.ts +0 -23
- package/dist/ui/run-metrics.js +0 -27
- package/dist/ui/run-status-row.d.ts +0 -63
- package/dist/ui/run-status-row.js +0 -54
- package/dist/ui/screen.d.ts +0 -107
- package/dist/ui/screen.js +0 -234
- package/dist/ui/scrollback/LiveTail.d.ts +0 -115
- package/dist/ui/scrollback/LiveTail.js +0 -48
- package/dist/ui/scrollback/band.d.ts +0 -114
- package/dist/ui/scrollback/band.js +0 -143
- package/dist/ui/scrollback/budget.d.ts +0 -90
- package/dist/ui/scrollback/budget.js +0 -100
- package/dist/ui/scrollback/canvas.d.ts +0 -100
- package/dist/ui/scrollback/canvas.js +0 -114
- package/dist/ui/scrollback/cursor-probe.d.ts +0 -71
- package/dist/ui/scrollback/cursor-probe.js +0 -133
- package/dist/ui/scrollback/drain.d.ts +0 -32
- package/dist/ui/scrollback/drain.js +0 -64
- package/dist/ui/scrollback/exit-summary.d.ts +0 -23
- package/dist/ui/scrollback/exit-summary.js +0 -25
- package/dist/ui/scrollback/limits.d.ts +0 -98
- package/dist/ui/scrollback/limits.js +0 -98
- package/dist/ui/scrollback/live-preview.d.ts +0 -34
- package/dist/ui/scrollback/live-preview.js +0 -130
- package/dist/ui/scrollback/overflow-print.d.ts +0 -108
- package/dist/ui/scrollback/overflow-print.js +0 -120
- package/dist/ui/scrollback/renderer.d.ts +0 -48
- package/dist/ui/scrollback/renderer.js +0 -186
- package/dist/ui/scrollback/scrollback-writer.d.ts +0 -174
- package/dist/ui/scrollback/scrollback-writer.js +0 -648
- package/dist/ui/scrollback/settled-boundary.d.ts +0 -42
- package/dist/ui/scrollback/settled-boundary.js +0 -109
- package/dist/ui/scrollback/tail-anchor.d.ts +0 -71
- package/dist/ui/scrollback/tail-anchor.js +0 -79
- package/dist/ui/scrollback/tail-window.d.ts +0 -73
- package/dist/ui/scrollback/tail-window.js +0 -89
- package/dist/ui/scrollback/use-scrollback-view.d.ts +0 -139
- package/dist/ui/scrollback/use-scrollback-view.js +0 -601
- package/dist/ui/scrollback/writer-shapes.d.ts +0 -127
- package/dist/ui/scrollback/writer-shapes.js +0 -159
- package/dist/ui/scrollbar-controller.d.ts +0 -30
- package/dist/ui/scrollbar-controller.js +0 -124
- package/dist/ui/selection/highlight.d.ts +0 -39
- package/dist/ui/selection/highlight.js +0 -64
- package/dist/ui/selection/screen-mirror.d.ts +0 -24
- package/dist/ui/selection/screen-mirror.js +0 -35
- package/dist/ui/selection/selection-controller.d.ts +0 -104
- package/dist/ui/selection/selection-controller.js +0 -372
- package/dist/ui/selection/selection.d.ts +0 -90
- package/dist/ui/selection/selection.js +0 -223
- package/dist/ui/shortcuts.d.ts +0 -81
- package/dist/ui/shortcuts.js +0 -221
- package/dist/ui/status-feedback.d.ts +0 -35
- package/dist/ui/status-feedback.js +0 -38
- package/dist/ui/stdout-frame-writer.d.ts +0 -74
- package/dist/ui/stdout-frame-writer.js +0 -155
- package/dist/ui/team-status.d.ts +0 -166
- package/dist/ui/team-status.js +0 -252
- package/dist/ui/terminal-plan.d.ts +0 -52
- package/dist/ui/terminal-plan.js +0 -49
- package/dist/ui/theme.d.ts +0 -96
- package/dist/ui/theme.js +0 -130
- package/dist/ui/transcript-text.d.ts +0 -41
- package/dist/ui/transcript-text.js +0 -282
- package/dist/ui/use-height-store.d.ts +0 -31
- package/dist/ui/use-height-store.js +0 -76
- package/dist/ui/use-render-governor.d.ts +0 -39
- package/dist/ui/use-render-governor.js +0 -57
- package/dist/ui/use-wheel-routing.d.ts +0 -57
- package/dist/ui/use-wheel-routing.js +0 -152
- package/dist/ui/win-vt-force.d.ts +0 -136
- package/dist/ui/win-vt-force.js +0 -237
- package/dist/ui/win-vt-input.d.ts +0 -57
- package/dist/ui/win-vt-input.js +0 -62
- package/dist/update/limits.d.ts +0 -111
- package/dist/update/limits.js +0 -111
- package/dist/update/semver.d.ts +0 -89
- package/dist/update/semver.js +0 -295
- package/dist/update/types.d.ts +0 -169
- package/dist/update/types.js +0 -68
- /package/dist/{ui → app}/session-bridge.d.ts +0 -0
- /package/dist/{ui → app}/session-bridge.js +0 -0
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The one editable multi-line field in this feature (quick-prompt-library D-11).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`.
|
|
5
|
-
*
|
|
6
|
-
* RENDER AND CARET COME FROM THE SAME FUNCTION. `layoutComposer` wraps the buffer and
|
|
7
|
-
* reports the caret's row and column from ONE `buildEditorVisualMap` pass, and the
|
|
8
|
-
* drawing below splits that same row at that same column. Every second authority
|
|
9
|
-
* here - a prose wrapper, a second width table, a "count the characters instead" -
|
|
10
|
-
* puts the caret on a cell that does not hold the character it points at, and the
|
|
11
|
-
* only symptom is that the user's edits land one column off in Chinese text.
|
|
12
|
-
*
|
|
13
|
-
* WHY `layout/wrap-rows.ts::wrapToRows` IS BANNED HERE (it is used one directory
|
|
14
|
-
* away, for the list's read-only preview): it splits on whitespace and rejoins with
|
|
15
|
-
* single spaces, so it eats indentation and destroys the character-index-to-cell
|
|
16
|
-
* mapping. `composer-rows.ts:16-20` says so in as many words, and that is the module
|
|
17
|
-
* this one borrows from.
|
|
18
|
-
*
|
|
19
|
-
* NO PASTE-COLLAPSE TOKENS, deliberately. The token machinery exists so a 218-line
|
|
20
|
-
* paste does not have to live in a one-line input; this IS a multi-line field, and a
|
|
21
|
-
* token inside a saved prompt body would be data corruption the user could not undo.
|
|
22
|
-
*/
|
|
23
|
-
import React from 'react';
|
|
24
|
-
import type { Theme } from '../theme.js';
|
|
25
|
-
import type { TermCapabilities } from '../capabilities.js';
|
|
26
|
-
export interface PromptTextAreaState {
|
|
27
|
-
buffer: string;
|
|
28
|
-
cursor: number;
|
|
29
|
-
/** Kept across vertical moves, cleared by any horizontal one (composer parity). */
|
|
30
|
-
preferredVisualColumn?: number;
|
|
31
|
-
}
|
|
32
|
-
export declare const EMPTY_TEXT_AREA: PromptTextAreaState;
|
|
33
|
-
export type PromptTextAreaAction = {
|
|
34
|
-
type: 'insert';
|
|
35
|
-
text: string;
|
|
36
|
-
} | {
|
|
37
|
-
type: 'newline';
|
|
38
|
-
} | {
|
|
39
|
-
type: 'backspace';
|
|
40
|
-
} | {
|
|
41
|
-
type: 'delete';
|
|
42
|
-
} | {
|
|
43
|
-
type: 'left';
|
|
44
|
-
} | {
|
|
45
|
-
type: 'right';
|
|
46
|
-
} | {
|
|
47
|
-
type: 'home';
|
|
48
|
-
} | {
|
|
49
|
-
type: 'end';
|
|
50
|
-
}
|
|
51
|
-
/** Vertical moves need the wrap width; it is part of the ACTION, not of the state. */
|
|
52
|
-
| {
|
|
53
|
-
type: 'up';
|
|
54
|
-
cols: number;
|
|
55
|
-
} | {
|
|
56
|
-
type: 'down';
|
|
57
|
-
cols: number;
|
|
58
|
-
} | {
|
|
59
|
-
type: 'replace';
|
|
60
|
-
buffer: string;
|
|
61
|
-
cursor: number;
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* Pure. No React, no Ink, no filesystem - so the twelve editing cases are a table
|
|
65
|
-
* test rather than a rendered frame assertion.
|
|
66
|
-
*/
|
|
67
|
-
export declare function promptTextAreaReducer(state: PromptTextAreaState, action: PromptTextAreaAction): PromptTextAreaState;
|
|
68
|
-
export interface PromptTextAreaProps {
|
|
69
|
-
state: PromptTextAreaState;
|
|
70
|
-
/** Wrap width, in cells, already net of the field's own chrome. */
|
|
71
|
-
cols: number;
|
|
72
|
-
/** Rows the field may occupy. `1` is the single-line case for title/description. */
|
|
73
|
-
rows: number;
|
|
74
|
-
focused: boolean;
|
|
75
|
-
theme: Theme;
|
|
76
|
-
caps: TermCapabilities;
|
|
77
|
-
reducedMotion?: boolean;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* One field's worth of rows.
|
|
81
|
-
*
|
|
82
|
-
* The overflow chip is a plain `+N` on the LAST row rather than a row of its own:
|
|
83
|
-
* an extra row would make this component draw one more line than the caller budgeted
|
|
84
|
-
* for, and the frame it lives in has no way to find out.
|
|
85
|
-
*/
|
|
86
|
-
export declare function PromptTextArea(props: PromptTextAreaProps): React.ReactElement;
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* The one editable multi-line field in this feature (quick-prompt-library D-11).
|
|
4
|
-
*
|
|
5
|
-
* ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`.
|
|
6
|
-
*
|
|
7
|
-
* RENDER AND CARET COME FROM THE SAME FUNCTION. `layoutComposer` wraps the buffer and
|
|
8
|
-
* reports the caret's row and column from ONE `buildEditorVisualMap` pass, and the
|
|
9
|
-
* drawing below splits that same row at that same column. Every second authority
|
|
10
|
-
* here - a prose wrapper, a second width table, a "count the characters instead" -
|
|
11
|
-
* puts the caret on a cell that does not hold the character it points at, and the
|
|
12
|
-
* only symptom is that the user's edits land one column off in Chinese text.
|
|
13
|
-
*
|
|
14
|
-
* WHY `layout/wrap-rows.ts::wrapToRows` IS BANNED HERE (it is used one directory
|
|
15
|
-
* away, for the list's read-only preview): it splits on whitespace and rejoins with
|
|
16
|
-
* single spaces, so it eats indentation and destroys the character-index-to-cell
|
|
17
|
-
* mapping. `composer-rows.ts:16-20` says so in as many words, and that is the module
|
|
18
|
-
* this one borrows from.
|
|
19
|
-
*
|
|
20
|
-
* NO PASTE-COLLAPSE TOKENS, deliberately. The token machinery exists so a 218-line
|
|
21
|
-
* paste does not have to live in a one-line input; this IS a multi-line field, and a
|
|
22
|
-
* token inside a saved prompt body would be data corruption the user could not undo.
|
|
23
|
-
*/
|
|
24
|
-
import React from 'react';
|
|
25
|
-
import { Box, Text } from 'ink';
|
|
26
|
-
import { pickGlyphs } from '../glyphs.js';
|
|
27
|
-
import { layoutComposer, splitRowAtColumn } from '../composer-rows.js';
|
|
28
|
-
import { moveVisualCursor, snapGrapheme, stepGrapheme } from '../editor-navigation.js';
|
|
29
|
-
import { PromptCaret } from '../PromptCaret.js';
|
|
30
|
-
export const EMPTY_TEXT_AREA = { buffer: '', cursor: 0 };
|
|
31
|
-
function withCursor(state, buffer, cursor) {
|
|
32
|
-
return { buffer, cursor: snapGrapheme(buffer, cursor, true) };
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Pure. No React, no Ink, no filesystem - so the twelve editing cases are a table
|
|
36
|
-
* test rather than a rendered frame assertion.
|
|
37
|
-
*/
|
|
38
|
-
export function promptTextAreaReducer(state, action) {
|
|
39
|
-
switch (action.type) {
|
|
40
|
-
case 'insert': {
|
|
41
|
-
const cursor = snapGrapheme(state.buffer, state.cursor);
|
|
42
|
-
const buffer = state.buffer.slice(0, cursor) + action.text + state.buffer.slice(cursor);
|
|
43
|
-
return {
|
|
44
|
-
buffer,
|
|
45
|
-
cursor: snapGrapheme(buffer, cursor + action.text.length, true),
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
case 'newline': {
|
|
49
|
-
const cursor = snapGrapheme(state.buffer, state.cursor);
|
|
50
|
-
const buffer = `${state.buffer.slice(0, cursor)}\n${state.buffer.slice(cursor)}`;
|
|
51
|
-
return { buffer, cursor: cursor + 1 };
|
|
52
|
-
}
|
|
53
|
-
case 'backspace':
|
|
54
|
-
case 'delete': {
|
|
55
|
-
const cursor = snapGrapheme(state.buffer, state.cursor);
|
|
56
|
-
if (action.type === 'backspace') {
|
|
57
|
-
if (cursor <= 0)
|
|
58
|
-
return state;
|
|
59
|
-
const from = stepGrapheme(state.buffer, cursor, 'left');
|
|
60
|
-
return withCursor(state, state.buffer.slice(0, from) + state.buffer.slice(cursor), from);
|
|
61
|
-
}
|
|
62
|
-
if (cursor >= state.buffer.length)
|
|
63
|
-
return state;
|
|
64
|
-
const to = stepGrapheme(state.buffer, cursor, 'right');
|
|
65
|
-
return withCursor(state, state.buffer.slice(0, cursor) + state.buffer.slice(to), cursor);
|
|
66
|
-
}
|
|
67
|
-
case 'left':
|
|
68
|
-
return {
|
|
69
|
-
buffer: state.buffer,
|
|
70
|
-
cursor: stepGrapheme(state.buffer, state.cursor, 'left'),
|
|
71
|
-
};
|
|
72
|
-
case 'right':
|
|
73
|
-
return {
|
|
74
|
-
buffer: state.buffer,
|
|
75
|
-
cursor: stepGrapheme(state.buffer, state.cursor, 'right'),
|
|
76
|
-
};
|
|
77
|
-
case 'home':
|
|
78
|
-
return { buffer: state.buffer, cursor: 0 };
|
|
79
|
-
case 'end':
|
|
80
|
-
return { buffer: state.buffer, cursor: snapGrapheme(state.buffer, state.buffer.length) };
|
|
81
|
-
case 'up':
|
|
82
|
-
case 'down': {
|
|
83
|
-
const moved = moveVisualCursor({
|
|
84
|
-
buffer: state.buffer,
|
|
85
|
-
cursor: state.cursor,
|
|
86
|
-
cols: action.cols,
|
|
87
|
-
direction: action.type,
|
|
88
|
-
...(state.preferredVisualColumn === undefined
|
|
89
|
-
? {}
|
|
90
|
-
: { preferredVisualColumn: state.preferredVisualColumn }),
|
|
91
|
-
});
|
|
92
|
-
// A vertical move at the first or last visual row stays put rather than
|
|
93
|
-
// jumping to the buffer's edge: the composer behaves the same way, and a jump
|
|
94
|
-
// here would silently relocate the caret in a field the user is editing.
|
|
95
|
-
return moved === null
|
|
96
|
-
? state
|
|
97
|
-
: {
|
|
98
|
-
buffer: state.buffer,
|
|
99
|
-
cursor: moved.cursor,
|
|
100
|
-
preferredVisualColumn: moved.preferredVisualColumn,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
case 'replace':
|
|
104
|
-
return withCursor(state, action.buffer, action.cursor);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function renderSegments(segments, keyPrefix) {
|
|
108
|
-
return segments.map((segment, at) => (_jsx(Text, { children: segment.text }, `${keyPrefix}${at}`)));
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* One field's worth of rows.
|
|
112
|
-
*
|
|
113
|
-
* The overflow chip is a plain `+N` on the LAST row rather than a row of its own:
|
|
114
|
-
* an extra row would make this component draw one more line than the caller budgeted
|
|
115
|
-
* for, and the frame it lives in has no way to find out.
|
|
116
|
-
*/
|
|
117
|
-
export function PromptTextArea(props) {
|
|
118
|
-
const { state, cols, rows, focused } = props;
|
|
119
|
-
const glyphs = pickGlyphs(props.caps);
|
|
120
|
-
const layout = layoutComposer({
|
|
121
|
-
buffer: state.buffer,
|
|
122
|
-
cursor: state.cursor,
|
|
123
|
-
cols: Math.max(4, cols),
|
|
124
|
-
maxRows: Math.max(1, rows),
|
|
125
|
-
active: focused,
|
|
126
|
-
});
|
|
127
|
-
const hidden = layout.hiddenAbove + layout.hiddenBelow;
|
|
128
|
-
const resetKey = React.useMemo(() => ({}), [state.buffer, state.cursor, focused, props.cols, rows]);
|
|
129
|
-
if (state.buffer.length === 0) {
|
|
130
|
-
return (_jsxs(Text, { wrap: "truncate", color: props.theme.muted, children: [_jsx(PromptCaret, { text: " ", active: focused, reducedMotion: props.reducedMotion ?? false, colorLevel: props.caps.colorLevel, color: props.theme.muted, resetKey: resetKey }), glyphs.ellipsis] }));
|
|
131
|
-
}
|
|
132
|
-
return (_jsx(Box, { flexDirection: "column", children: layout.rows.map((row, at) => {
|
|
133
|
-
if (at !== layout.cursorRow) {
|
|
134
|
-
return _jsx(Text, { wrap: "truncate", children: renderSegments(row.segments, `r${at}.`) }, at);
|
|
135
|
-
}
|
|
136
|
-
const split = splitRowAtColumn(row, layout.cursorCol);
|
|
137
|
-
return (_jsxs(Text, { wrap: "truncate", children: [renderSegments(split.before, `b${at}.`), _jsx(PromptCaret, { text: split.at ? split.at.text : ' ', active: focused, reducedMotion: props.reducedMotion ?? false, colorLevel: props.caps.colorLevel, resetKey: resetKey }), renderSegments(split.after, `a${at}.`), at === layout.rows.length - 1 && hidden > 0
|
|
138
|
-
? _jsx(Text, { color: props.theme.muted, children: ` +${hidden}` })
|
|
139
|
-
: null] }, at));
|
|
140
|
-
}) }));
|
|
141
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QuestionOverlay — the keyboard-driven multiple-choice wizard `ask_user`
|
|
3
|
-
* renders (plan-mode §6.5).
|
|
4
|
-
*
|
|
5
|
-
* `OverlayFrame` MODE B (self-managed): the content is a small state machine,
|
|
6
|
-
* not a list of rows, and slicing it by element would be meaningless.
|
|
7
|
-
*
|
|
8
|
-
* THE SINGLE HIGHEST-VALUE DECISION HERE is that the recommended option is the
|
|
9
|
-
* initial highlight for every question, so `Enter Enter Enter` is a correct,
|
|
10
|
-
* deliberate "use your judgement" path rather than an accident.
|
|
11
|
-
*
|
|
12
|
-
* `Esc` IS NOT HANDLED HERE. `App` owns it, and the bridge's `settle()` is the
|
|
13
|
-
* only place a human request is ever answered. `ConfirmDialog` does the
|
|
14
|
-
* opposite — both it and `App` call `resolve` — which is harmless there only by
|
|
15
|
-
* accident of promise semantics, and is not a pattern to copy (R-P12).
|
|
16
|
-
*/
|
|
17
|
-
import React from 'react';
|
|
18
|
-
import type { Theme } from '../theme.js';
|
|
19
|
-
import type { TermCapabilities } from '../capabilities.js';
|
|
20
|
-
import type { Answer, NormalizedQuestion } from '../../tools/human-input.js';
|
|
21
|
-
interface QuestionOverlayProps {
|
|
22
|
-
isActive?: boolean;
|
|
23
|
-
questions: NormalizedQuestion[];
|
|
24
|
-
maxRows: number;
|
|
25
|
-
cols: number;
|
|
26
|
-
theme: Theme;
|
|
27
|
-
caps: TermCapabilities;
|
|
28
|
-
onSubmit: (answers: Answer[]) => void;
|
|
29
|
-
/**
|
|
30
|
-
* PLAN+GOVERN interview progress (governance-mode 9 / 10.6). Present only in that
|
|
31
|
-
* posture; absent leaves the title byte-identical to the pre-governance overlay.
|
|
32
|
-
*/
|
|
33
|
-
interview?: {
|
|
34
|
-
round: number;
|
|
35
|
-
required: number;
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
export declare function QuestionOverlay({ isActive, questions, maxRows, cols, theme, caps, onSubmit, interview, }: QuestionOverlayProps): React.ReactElement;
|
|
39
|
-
export {};
|
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* QuestionOverlay — the keyboard-driven multiple-choice wizard `ask_user`
|
|
4
|
-
* renders (plan-mode §6.5).
|
|
5
|
-
*
|
|
6
|
-
* `OverlayFrame` MODE B (self-managed): the content is a small state machine,
|
|
7
|
-
* not a list of rows, and slicing it by element would be meaningless.
|
|
8
|
-
*
|
|
9
|
-
* THE SINGLE HIGHEST-VALUE DECISION HERE is that the recommended option is the
|
|
10
|
-
* initial highlight for every question, so `Enter Enter Enter` is a correct,
|
|
11
|
-
* deliberate "use your judgement" path rather than an accident.
|
|
12
|
-
*
|
|
13
|
-
* `Esc` IS NOT HANDLED HERE. `App` owns it, and the bridge's `settle()` is the
|
|
14
|
-
* only place a human request is ever answered. `ConfirmDialog` does the
|
|
15
|
-
* opposite — both it and `App` call `resolve` — which is harmless there only by
|
|
16
|
-
* accident of promise semantics, and is not a pattern to copy (R-P12).
|
|
17
|
-
*/
|
|
18
|
-
import { useState, useLayoutEffect } from 'react';
|
|
19
|
-
import { Text, useInput } from 'ink';
|
|
20
|
-
import { pickGlyphs } from '../glyphs.js';
|
|
21
|
-
import { wrapToRows } from '../layout/wrap-rows.js';
|
|
22
|
-
import { OverlayFrame, overlayBodyRows } from '../layout/OverlayFrame.js';
|
|
23
|
-
import { stripPasteFrames } from '../paste-frames.js';
|
|
24
|
-
import { stripEnterFrames } from '../enter-frames.js';
|
|
25
|
-
import { interviewChipText } from '../governance-status.js';
|
|
26
|
-
/** Which option index each question starts on: the recommended one. */
|
|
27
|
-
function initialCursors(questions) {
|
|
28
|
-
return questions.map((q) => Math.max(0, q.options.findIndex((o) => o.recommended)));
|
|
29
|
-
}
|
|
30
|
-
function initialSelections(questions) {
|
|
31
|
-
return questions.map((q) => {
|
|
32
|
-
const recommended = q.options.findIndex((o) => o.recommended);
|
|
33
|
-
return new Set(recommended >= 0 ? [recommended] : [0]);
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
export function QuestionOverlay({ isActive = true, questions, maxRows, cols, theme, caps, onSubmit, interview, }) {
|
|
37
|
-
const glyphs = pickGlyphs(caps);
|
|
38
|
-
const [step, setStep] = useState(0);
|
|
39
|
-
const [phase, setPhase] = useState('choosing');
|
|
40
|
-
const [cursors, setCursors] = useState(() => initialCursors(questions));
|
|
41
|
-
const [selections, setSelections] = useState(() => initialSelections(questions));
|
|
42
|
-
/**
|
|
43
|
-
* THE PER-QUESTION EXPLICIT-MARK BIT (V-1 / D-8).
|
|
44
|
-
*
|
|
45
|
-
* `initialSelections` PRE-SELECTS the recommended option on EVERY question
|
|
46
|
-
* (or the first option when there is none), so "the selection set is empty"
|
|
47
|
-
* is unreachable and can never be the test for "did the user choose?". The
|
|
48
|
-
* only reliable discriminator is the fact itself: the user pressed SPACE on
|
|
49
|
-
* this question. Without it, a user who only MOVES the cursor and presses
|
|
50
|
-
* Enter would submit the RECOMMENDED option instead of the highlighted one -
|
|
51
|
-
* a silent regression of the wizard's most common path. The bit survives
|
|
52
|
-
* Left/Right navigation exactly like `selections` and `cursors` do, and a
|
|
53
|
-
* single-choice mark is idempotent (no un-mark; Enter always has at least
|
|
54
|
-
* the marked item to submit).
|
|
55
|
-
*/
|
|
56
|
-
const [markedSteps, setMarkedSteps] = useState(() => questions.map(() => false));
|
|
57
|
-
const [customs, setCustoms] = useState(() => questions.map(() => ''));
|
|
58
|
-
const [draft, setDraft] = useState('');
|
|
59
|
-
const [offset, setOffset] = useState(0);
|
|
60
|
-
const question = questions[Math.min(step, questions.length - 1)];
|
|
61
|
-
const cursor = cursors[step] ?? 0;
|
|
62
|
-
const setCursorAt = (index, value) => setCursors((prev) => prev.map((c, i) => (i === index ? value : c)));
|
|
63
|
-
const setCustomAt = (index, value) => setCustoms((prev) => prev.map((c, i) => (i === index ? value : c)));
|
|
64
|
-
const toggleAt = (index, option) => setSelections((prev) => prev.map((set, i) => {
|
|
65
|
-
if (i !== index)
|
|
66
|
-
return set;
|
|
67
|
-
const next = new Set(set);
|
|
68
|
-
if (next.has(option))
|
|
69
|
-
next.delete(option);
|
|
70
|
-
else
|
|
71
|
-
next.add(option);
|
|
72
|
-
return next;
|
|
73
|
-
}));
|
|
74
|
-
const chooseAt = (index, option) => setSelections((prev) => prev.map((set, i) => (i === index ? new Set([option]) : set)));
|
|
75
|
-
const markAt = (index) => setMarkedSteps((prev) => prev.map((marked, i) => (i === index ? true : marked)));
|
|
76
|
-
const buildAnswers = () => questions.map((q, i) => {
|
|
77
|
-
const chosen = [...(selections[i] ?? new Set())].sort((a, b) => a - b);
|
|
78
|
-
const labels = chosen.map((index) => q.options[index]?.label ?? '').filter((l) => l.length > 0);
|
|
79
|
-
const pickedOther = chosen.some((index) => q.options[index]?.isOther);
|
|
80
|
-
return {
|
|
81
|
-
id: q.id,
|
|
82
|
-
question: q.question,
|
|
83
|
-
selected: labels,
|
|
84
|
-
custom: pickedOther && (customs[i] ?? '').length > 0 ? customs[i] : null,
|
|
85
|
-
};
|
|
86
|
-
});
|
|
87
|
-
const advance = () => {
|
|
88
|
-
if (step + 1 >= questions.length)
|
|
89
|
-
setPhase('review');
|
|
90
|
-
else {
|
|
91
|
-
setStep(step + 1);
|
|
92
|
-
setPhase('choosing');
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
const goBack = () => {
|
|
96
|
-
if (step === 0)
|
|
97
|
-
return; // No-op on the first question, by design.
|
|
98
|
-
setStep(step - 1);
|
|
99
|
-
setPhase('choosing');
|
|
100
|
-
};
|
|
101
|
-
useInput((input, key) => {
|
|
102
|
-
if (!isActive)
|
|
103
|
-
return;
|
|
104
|
-
if (key.pageUp) {
|
|
105
|
-
setOffset(n => Math.max(0, n - 1));
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
if (key.pageDown) {
|
|
109
|
-
setOffset(n => n + 1);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
// App owns Esc for both new overlays (R-P12). Swallow it here so the
|
|
113
|
-
// free-text editor below cannot eat the raw escape byte as a character.
|
|
114
|
-
if (key.escape)
|
|
115
|
-
return;
|
|
116
|
-
if (phase === 'review') {
|
|
117
|
-
if (key.return) {
|
|
118
|
-
onSubmit(buildAnswers());
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
if (key.leftArrow) {
|
|
122
|
-
setStep(questions.length - 1);
|
|
123
|
-
setPhase('choosing');
|
|
124
|
-
}
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
if (phase === 'typingOther') {
|
|
128
|
-
if (key.return) {
|
|
129
|
-
// An empty commit falls back to the recommended option rather than
|
|
130
|
-
// recording a blank answer: the user pressed Enter, which everywhere
|
|
131
|
-
// else in this wizard means "accept the sensible default".
|
|
132
|
-
if (draft.trim().length === 0) {
|
|
133
|
-
const recommended = Math.max(0, question.options.findIndex((o) => o.recommended));
|
|
134
|
-
chooseAt(step, recommended);
|
|
135
|
-
setCursorAt(step, recommended);
|
|
136
|
-
setCustomAt(step, '');
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
setCustomAt(step, draft.trim());
|
|
140
|
-
}
|
|
141
|
-
setDraft('');
|
|
142
|
-
setPhase('choosing');
|
|
143
|
-
advance();
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
if (key.leftArrow) {
|
|
147
|
-
setDraft('');
|
|
148
|
-
setPhase('choosing');
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
if (key.backspace || key.delete) {
|
|
152
|
-
setDraft(draft.slice(0, -1));
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
// `stripPasteFrames`, NOT `input` (I-12 / P0-2) -- the same broadcast
|
|
156
|
-
// hazard `SettingsScreen` documents at length: a framed paste appended
|
|
157
|
-
// verbatim stores NULs that render as nothing.
|
|
158
|
-
// `stripEnterFrames` rides inside it for the newline frame a
|
|
159
|
-
// Shift+Enter broadcasts (tui-shift-enter-copy-queue 3.5): same hazard,
|
|
160
|
-
// same fix, and this order is the one that leaves no NUL in the draft.
|
|
161
|
-
if (input && !key.ctrl && !key.meta && !key.tab) {
|
|
162
|
-
setDraft(draft + stripPasteFrames(stripEnterFrames(input)));
|
|
163
|
-
}
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
// phase === 'choosing'
|
|
167
|
-
if (key.upArrow) {
|
|
168
|
-
setCursorAt(step, (cursor - 1 + question.options.length) % question.options.length);
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
if (key.downArrow) {
|
|
172
|
-
setCursorAt(step, (cursor + 1) % question.options.length);
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
if (key.leftArrow) {
|
|
176
|
-
goBack();
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
// SPACE, BY QUESTION SHAPE (D-8). The strict `input === ' '` keeps a
|
|
180
|
-
// multi-character paste frame from ever matching (R-8); the Other row is
|
|
181
|
-
// a no-op in both shapes because it needs TEXT, and Enter is its key.
|
|
182
|
-
if (input === ' ' && !question.options[cursor]?.isOther) {
|
|
183
|
-
if (question.allowMultiple) {
|
|
184
|
-
toggleAt(step, cursor);
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
// SINGLE CHOICE: mark the highlighted item and STAY - the terminal
|
|
188
|
-
// convention of "space selects, enter confirms". The mark is recorded
|
|
189
|
-
// both in the selection set (so `[x]` renders) and in the explicit
|
|
190
|
-
// mark bit (so a later Enter submits THIS item even after the cursor
|
|
191
|
-
// has moved on).
|
|
192
|
-
chooseAt(step, cursor);
|
|
193
|
-
markAt(step);
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
if (key.return) {
|
|
197
|
-
if (question.options[cursor]?.isOther) {
|
|
198
|
-
chooseAt(step, cursor);
|
|
199
|
-
setDraft(customs[step] ?? '');
|
|
200
|
-
setPhase('typingOther');
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
// A single-choice Enter submits the CURSOR item unless the user has
|
|
204
|
-
// explicitly space-marked this question, in which case the marked item
|
|
205
|
-
// wins even if the cursor has since moved (V-1's regression guard:
|
|
206
|
-
// cursor + Enter alone keeps today's behavior, recommended preselect
|
|
207
|
-
// and all).
|
|
208
|
-
if (!question.allowMultiple) {
|
|
209
|
-
if (!markedSteps[step])
|
|
210
|
-
chooseAt(step, cursor);
|
|
211
|
-
}
|
|
212
|
-
else if (!(selections[step] ?? new Set()).has(cursor))
|
|
213
|
-
toggleAt(step, cursor);
|
|
214
|
-
advance();
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
const title = phase === 'review' ? 'Review your answers' : 'Clarify the request';
|
|
218
|
-
const position = phase === 'review' ? '' : ` ${step + 1}/${questions.length}`;
|
|
219
|
-
const interviewChip = interview ? ` ${interviewChipText(interview.round, interview.required)}` : '';
|
|
220
|
-
const hint = phase === 'typingOther'
|
|
221
|
-
? `type your answer ${glyphs.midDot} ${glyphs.enterKey} commit ${glyphs.midDot} ${glyphs.arrowLeft} back ${glyphs.midDot} esc cancel`
|
|
222
|
-
: phase === 'review'
|
|
223
|
-
? `${glyphs.enterKey} submit ${glyphs.midDot} ${glyphs.arrowLeft} back ${glyphs.midDot} esc cancel`
|
|
224
|
-
: question.options[cursor]?.isOther
|
|
225
|
-
? `${glyphs.arrowUp}${glyphs.arrowDown} choose ${glyphs.midDot} ${glyphs.enterKey} to type ${glyphs.midDot} ${glyphs.arrowLeft} back ${glyphs.midDot} esc cancel`
|
|
226
|
-
: `${glyphs.arrowUp}${glyphs.arrowDown} choose ${glyphs.midDot} space select ${glyphs.midDot} ${glyphs.enterKey} next ${glyphs.midDot} ${glyphs.arrowLeft} back ${glyphs.midDot} esc cancel`;
|
|
227
|
-
const rowTexts = [];
|
|
228
|
-
const optionStarts = [];
|
|
229
|
-
const push = (text) => { rowTexts.push(...wrapToRows(text, Math.max(1, cols - 4))); };
|
|
230
|
-
if (phase === 'review') {
|
|
231
|
-
buildAnswers().forEach((answer, index) => push(`${questions[index].header}: ${answer.custom ?? answer.selected.join(', ')}`));
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
push(question.header);
|
|
235
|
-
push(question.question);
|
|
236
|
-
question.options.forEach((option, index) => {
|
|
237
|
-
optionStarts.push(rowTexts.length);
|
|
238
|
-
const mark = (selections[step] ?? new Set()).has(index) ? '[x]' : '[ ]';
|
|
239
|
-
push(`${index === cursor ? glyphs.caret : ' '} ${mark} ${option.label}${option.recommended ? ' RECOMMENDED' : ''} ${option.description}`);
|
|
240
|
-
});
|
|
241
|
-
if (phase === 'typingOther')
|
|
242
|
-
push(`${glyphs.caret} ${draft || 'type your own answer'} `);
|
|
243
|
-
}
|
|
244
|
-
const focus = phase === 'review' ? 0 : phase === 'typingOther'
|
|
245
|
-
? Math.max(0, rowTexts.length - 1) : optionStarts[cursor] ?? 0;
|
|
246
|
-
useLayoutEffect(() => {
|
|
247
|
-
const height = overlayBodyRows(maxRows, cols);
|
|
248
|
-
setOffset(previous => focus < previous ? focus : focus >= previous + height
|
|
249
|
-
? focus - height + 1 : previous);
|
|
250
|
-
}, [focus, maxRows, cols, step, phase]);
|
|
251
|
-
// `space select` shows for BOTH shapes (AC-10) - 42 characters on the
|
|
252
|
-
// single-choice shape without `cancel`, a deliberate 5-column growth inside
|
|
253
|
-
// the `cols <= 48` budget this hint exists for (V-12).
|
|
254
|
-
const shortHint = phase === 'typingOther' ? 'Enter commit | Left back | Esc cancel'
|
|
255
|
-
: phase === 'review' ? 'Enter submit | Left back | Esc cancel'
|
|
256
|
-
: '^v choose Space select Enter next Esc';
|
|
257
|
-
return _jsx(OverlayFrame, { title: `${title}${position}${interviewChip}`, hint: cols <= 48 ? shortHint : hint, maxRows: maxRows, cols: cols, theme: theme, caps: caps, rows: rowTexts.map((line, index) => _jsx(Text, { wrap: "truncate", children: line || ' ' }, index)), scrollOffset: offset, onScrollClamp: setOffset });
|
|
258
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { PendingSteering } from '../../agent/queued-messages.js';
|
|
3
|
-
import type { Theme } from '../theme.js';
|
|
4
|
-
import type { TermCapabilities } from '../capabilities.js';
|
|
5
|
-
export interface QueueTextRow {
|
|
6
|
-
queueId: string;
|
|
7
|
-
offset: number;
|
|
8
|
-
text: string;
|
|
9
|
-
}
|
|
10
|
-
/** Preserve visible whitespace and display terminal controls as harmless escapes. */
|
|
11
|
-
export declare function projectQueueRows(pending: readonly PendingSteering[], columns: number): QueueTextRow[];
|
|
12
|
-
/** Anchor by stable message ID and source offset, including long soft-wrapped lines. */
|
|
13
|
-
export declare function restoreQueueAnchor(before: readonly QueueTextRow[], after: readonly QueueTextRow[], scroll: number): number;
|
|
14
|
-
export declare function QueueOverlay(props: {
|
|
15
|
-
pending: readonly PendingSteering[];
|
|
16
|
-
cols: number;
|
|
17
|
-
maxRows: number;
|
|
18
|
-
scrollOffset: number;
|
|
19
|
-
onScrollClamp: (offset: number) => void;
|
|
20
|
-
theme: Theme;
|
|
21
|
-
caps: TermCapabilities;
|
|
22
|
-
}): React.ReactElement;
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useMemo, useRef } from 'react';
|
|
3
|
-
import { Text } from 'ink';
|
|
4
|
-
import stringWidth from 'string-width';
|
|
5
|
-
import { OverlayFrame } from '../layout/OverlayFrame.js';
|
|
6
|
-
import { graphemes } from '../editor-navigation.js';
|
|
7
|
-
/** Preserve visible whitespace and display terminal controls as harmless escapes. */
|
|
8
|
-
export function projectQueueRows(pending, columns) {
|
|
9
|
-
const width = Math.max(1, columns);
|
|
10
|
-
const rows = [];
|
|
11
|
-
for (const [index, item] of pending.entries()) {
|
|
12
|
-
rows.push({ queueId: item.queueId, offset: -1, text: `Queue ${index + 1}` });
|
|
13
|
-
let text = '';
|
|
14
|
-
let cells = 0;
|
|
15
|
-
let offset = 0;
|
|
16
|
-
const flush = () => {
|
|
17
|
-
rows.push({ queueId: item.queueId, offset, text });
|
|
18
|
-
text = '';
|
|
19
|
-
cells = 0;
|
|
20
|
-
};
|
|
21
|
-
for (const part of graphemes(item.text)) {
|
|
22
|
-
if (part.text === '\n' || part.text === '\r\n') {
|
|
23
|
-
flush();
|
|
24
|
-
offset = part.end;
|
|
25
|
-
continue;
|
|
26
|
-
}
|
|
27
|
-
const safe = part.text === '\t' ? ' '.repeat(4 - cells % 4)
|
|
28
|
-
: part.text.replace(/[\x00-\x1f\x7f-\x9f]/g, (char) => `\\x${char.charCodeAt(0).toString(16).padStart(2, '0')}`);
|
|
29
|
-
const units = safe === part.text ? [safe] : Array.from(safe);
|
|
30
|
-
for (const unit of units) {
|
|
31
|
-
const size = stringWidth(unit);
|
|
32
|
-
if (cells + size > width && text) {
|
|
33
|
-
flush();
|
|
34
|
-
offset = part.index;
|
|
35
|
-
}
|
|
36
|
-
text += unit;
|
|
37
|
-
cells += size;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
flush();
|
|
41
|
-
}
|
|
42
|
-
return rows;
|
|
43
|
-
}
|
|
44
|
-
/** Anchor by stable message ID and source offset, including long soft-wrapped lines. */
|
|
45
|
-
export function restoreQueueAnchor(before, after, scroll) {
|
|
46
|
-
const anchor = before[Math.min(scroll, before.length - 1)];
|
|
47
|
-
if (!anchor || !after.length)
|
|
48
|
-
return 0;
|
|
49
|
-
let target = -1;
|
|
50
|
-
for (let i = 0; i < after.length; i++) {
|
|
51
|
-
if (after[i].queueId === anchor.queueId && after[i].offset <= anchor.offset)
|
|
52
|
-
target = i;
|
|
53
|
-
}
|
|
54
|
-
if (target >= 0)
|
|
55
|
-
return target;
|
|
56
|
-
const next = before.slice(scroll).find((row) => after.some((item) => item.queueId === row.queueId));
|
|
57
|
-
if (next)
|
|
58
|
-
return after.findIndex((row) => row.queueId === next.queueId);
|
|
59
|
-
const previous = [...before.slice(0, scroll)].reverse()
|
|
60
|
-
.find((row) => after.some((item) => item.queueId === row.queueId));
|
|
61
|
-
return previous ? after.findIndex((row) => row.queueId === previous.queueId) : 0;
|
|
62
|
-
}
|
|
63
|
-
export function QueueOverlay(props) {
|
|
64
|
-
const { pending, cols, scrollOffset, onScrollClamp, theme } = props;
|
|
65
|
-
const projected = useMemo(() => projectQueueRows(pending, cols - (cols >= 48 ? 4 : 2)), [pending, cols]);
|
|
66
|
-
const previous = useRef({ rows: projected, scroll: scrollOffset });
|
|
67
|
-
const anchored = previous.current.rows === projected ? scrollOffset
|
|
68
|
-
: restoreQueueAnchor(previous.current.rows, projected, previous.current.scroll);
|
|
69
|
-
const bodyRows = Math.max(1, Math.floor(props.maxRows) - (cols >= 48 ? 5 : 3));
|
|
70
|
-
const offset = Math.max(0, Math.min(anchored, projected.length - bodyRows));
|
|
71
|
-
useEffect(() => {
|
|
72
|
-
previous.current = { rows: projected, scroll: offset };
|
|
73
|
-
if (offset !== scrollOffset)
|
|
74
|
-
onScrollClamp(offset);
|
|
75
|
-
}, [projected, offset, scrollOffset, onScrollClamp]);
|
|
76
|
-
const rows = useMemo(() => projected.length ? projected.map((row, index) => _jsx(Text, { wrap: "truncate", color: theme.primary, children: row.text || ' ' }, `${row.queueId}:${index}`))
|
|
77
|
-
: [_jsx(Text, { children: "Queue is empty" }, "empty")], [projected, theme]);
|
|
78
|
-
return _jsx(OverlayFrame, { ...props, title: `Queue: ${pending.length} pending`, hint: "PgUp/PgDn | Up/Down | Esc", rows: rows, scrollOffset: offset });
|
|
79
|
-
}
|