@dsh-cc/tui 0.5.0
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/LICENSE +201 -0
- package/README.md +144 -0
- package/lib/bash-history.d.ts +31 -0
- package/lib/bash-history.d.ts.map +1 -0
- package/lib/bash-history.js +94 -0
- package/lib/bash-history.js.map +1 -0
- package/lib/compact-fold.d.ts +35 -0
- package/lib/compact-fold.d.ts.map +1 -0
- package/lib/compact-fold.js +60 -0
- package/lib/compact-fold.js.map +1 -0
- package/lib/components/arg-completers.d.ts +22 -0
- package/lib/components/arg-completers.d.ts.map +1 -0
- package/lib/components/arg-completers.js +75 -0
- package/lib/components/arg-completers.js.map +1 -0
- package/lib/components/code-theme.d.ts +25 -0
- package/lib/components/code-theme.d.ts.map +1 -0
- package/lib/components/code-theme.js +137 -0
- package/lib/components/code-theme.js.map +1 -0
- package/lib/components/completion.d.ts +50 -0
- package/lib/components/completion.d.ts.map +1 -0
- package/lib/components/completion.js +279 -0
- package/lib/components/completion.js.map +1 -0
- package/lib/components/diff-card.d.ts +29 -0
- package/lib/components/diff-card.d.ts.map +1 -0
- package/lib/components/diff-card.js +175 -0
- package/lib/components/diff-card.js.map +1 -0
- package/lib/components/diff-hunks.d.ts +44 -0
- package/lib/components/diff-hunks.d.ts.map +1 -0
- package/lib/components/diff-hunks.js +188 -0
- package/lib/components/diff-hunks.js.map +1 -0
- package/lib/components/editor-history.d.ts +23 -0
- package/lib/components/editor-history.d.ts.map +1 -0
- package/lib/components/editor-history.js +29 -0
- package/lib/components/editor-history.js.map +1 -0
- package/lib/components/markdown-theme.d.ts +11 -0
- package/lib/components/markdown-theme.d.ts.map +1 -0
- package/lib/components/markdown-theme.js +29 -0
- package/lib/components/markdown-theme.js.map +1 -0
- package/lib/components/masked-input.d.ts +24 -0
- package/lib/components/masked-input.d.ts.map +1 -0
- package/lib/components/masked-input.js +168 -0
- package/lib/components/masked-input.js.map +1 -0
- package/lib/components/overlay-host.d.ts +31 -0
- package/lib/components/overlay-host.d.ts.map +1 -0
- package/lib/components/overlay-host.js +128 -0
- package/lib/components/overlay-host.js.map +1 -0
- package/lib/components/overlays.d.ts +94 -0
- package/lib/components/overlays.d.ts.map +1 -0
- package/lib/components/overlays.js +450 -0
- package/lib/components/overlays.js.map +1 -0
- package/lib/components/provider-box.d.ts +23 -0
- package/lib/components/provider-box.d.ts.map +1 -0
- package/lib/components/provider-box.js +164 -0
- package/lib/components/provider-box.js.map +1 -0
- package/lib/components/read-group.d.ts +51 -0
- package/lib/components/read-group.d.ts.map +1 -0
- package/lib/components/read-group.js +105 -0
- package/lib/components/read-group.js.map +1 -0
- package/lib/components/root-bash.d.ts +36 -0
- package/lib/components/root-bash.d.ts.map +1 -0
- package/lib/components/root-bash.js +112 -0
- package/lib/components/root-bash.js.map +1 -0
- package/lib/components/root-types.d.ts +42 -0
- package/lib/components/root-types.d.ts.map +1 -0
- package/lib/components/root-types.js +8 -0
- package/lib/components/root-types.js.map +1 -0
- package/lib/components/root-utils.d.ts +22 -0
- package/lib/components/root-utils.d.ts.map +1 -0
- package/lib/components/root-utils.js +45 -0
- package/lib/components/root-utils.js.map +1 -0
- package/lib/components/root.d.ts +25 -0
- package/lib/components/root.d.ts.map +1 -0
- package/lib/components/root.js +357 -0
- package/lib/components/root.js.map +1 -0
- package/lib/components/theme.d.ts +61 -0
- package/lib/components/theme.d.ts.map +1 -0
- package/lib/components/theme.js +99 -0
- package/lib/components/theme.js.map +1 -0
- package/lib/components/transcript.d.ts +43 -0
- package/lib/components/transcript.d.ts.map +1 -0
- package/lib/components/transcript.js +203 -0
- package/lib/components/transcript.js.map +1 -0
- package/lib/components/working-line.d.ts +35 -0
- package/lib/components/working-line.d.ts.map +1 -0
- package/lib/components/working-line.js +66 -0
- package/lib/components/working-line.js.map +1 -0
- package/lib/effort-catalog.d.ts +27 -0
- package/lib/effort-catalog.d.ts.map +1 -0
- package/lib/effort-catalog.js +36 -0
- package/lib/effort-catalog.js.map +1 -0
- package/lib/export-markdown.d.ts +18 -0
- package/lib/export-markdown.d.ts.map +1 -0
- package/lib/export-markdown.js +124 -0
- package/lib/export-markdown.js.map +1 -0
- package/lib/harness/approval-preview.d.ts +33 -0
- package/lib/harness/approval-preview.d.ts.map +1 -0
- package/lib/harness/approval-preview.js +179 -0
- package/lib/harness/approval-preview.js.map +1 -0
- package/lib/harness/boot-banner.d.ts +14 -0
- package/lib/harness/boot-banner.d.ts.map +1 -0
- package/lib/harness/boot-banner.js +89 -0
- package/lib/harness/boot-banner.js.map +1 -0
- package/lib/harness/driver-agent.d.ts +78 -0
- package/lib/harness/driver-agent.d.ts.map +1 -0
- package/lib/harness/driver-agent.js +314 -0
- package/lib/harness/driver-agent.js.map +1 -0
- package/lib/harness/driver-agents.d.ts +20 -0
- package/lib/harness/driver-agents.d.ts.map +1 -0
- package/lib/harness/driver-agents.js +123 -0
- package/lib/harness/driver-agents.js.map +1 -0
- package/lib/harness/driver-approvals.d.ts +38 -0
- package/lib/harness/driver-approvals.d.ts.map +1 -0
- package/lib/harness/driver-approvals.js +277 -0
- package/lib/harness/driver-approvals.js.map +1 -0
- package/lib/harness/driver-bash.d.ts +15 -0
- package/lib/harness/driver-bash.d.ts.map +1 -0
- package/lib/harness/driver-bash.js +73 -0
- package/lib/harness/driver-bash.js.map +1 -0
- package/lib/harness/driver-catalog.d.ts +84 -0
- package/lib/harness/driver-catalog.d.ts.map +1 -0
- package/lib/harness/driver-catalog.js +256 -0
- package/lib/harness/driver-catalog.js.map +1 -0
- package/lib/harness/driver-ctx.d.ts +462 -0
- package/lib/harness/driver-ctx.d.ts.map +1 -0
- package/lib/harness/driver-ctx.js +11 -0
- package/lib/harness/driver-ctx.js.map +1 -0
- package/lib/harness/driver-hud.d.ts +31 -0
- package/lib/harness/driver-hud.d.ts.map +1 -0
- package/lib/harness/driver-hud.js +204 -0
- package/lib/harness/driver-hud.js.map +1 -0
- package/lib/harness/driver-live.d.ts +36 -0
- package/lib/harness/driver-live.d.ts.map +1 -0
- package/lib/harness/driver-live.js +44 -0
- package/lib/harness/driver-live.js.map +1 -0
- package/lib/harness/driver-modal.d.ts +52 -0
- package/lib/harness/driver-modal.d.ts.map +1 -0
- package/lib/harness/driver-modal.js +78 -0
- package/lib/harness/driver-modal.js.map +1 -0
- package/lib/harness/driver-mode.d.ts +35 -0
- package/lib/harness/driver-mode.d.ts.map +1 -0
- package/lib/harness/driver-mode.js +84 -0
- package/lib/harness/driver-mode.js.map +1 -0
- package/lib/harness/driver-pickers.d.ts +48 -0
- package/lib/harness/driver-pickers.d.ts.map +1 -0
- package/lib/harness/driver-pickers.js +249 -0
- package/lib/harness/driver-pickers.js.map +1 -0
- package/lib/harness/driver-promote.d.ts +29 -0
- package/lib/harness/driver-promote.d.ts.map +1 -0
- package/lib/harness/driver-promote.js +36 -0
- package/lib/harness/driver-promote.js.map +1 -0
- package/lib/harness/driver-queue.d.ts +19 -0
- package/lib/harness/driver-queue.d.ts.map +1 -0
- package/lib/harness/driver-queue.js +281 -0
- package/lib/harness/driver-queue.js.map +1 -0
- package/lib/harness/driver-run-local.d.ts +32 -0
- package/lib/harness/driver-run-local.d.ts.map +1 -0
- package/lib/harness/driver-run-local.js +366 -0
- package/lib/harness/driver-run-local.js.map +1 -0
- package/lib/harness/driver-sessions.d.ts +28 -0
- package/lib/harness/driver-sessions.d.ts.map +1 -0
- package/lib/harness/driver-sessions.js +386 -0
- package/lib/harness/driver-sessions.js.map +1 -0
- package/lib/harness/driver.d.ts +22 -0
- package/lib/harness/driver.d.ts.map +1 -0
- package/lib/harness/driver.js +459 -0
- package/lib/harness/driver.js.map +1 -0
- package/lib/harness/preset.d.ts +32 -0
- package/lib/harness/preset.d.ts.map +1 -0
- package/lib/harness/preset.js +34 -0
- package/lib/harness/preset.js.map +1 -0
- package/lib/harness/session-list.d.ts +65 -0
- package/lib/harness/session-list.d.ts.map +1 -0
- package/lib/harness/session-list.js +91 -0
- package/lib/harness/session-list.js.map +1 -0
- package/lib/harness/shell-output.d.ts +44 -0
- package/lib/harness/shell-output.d.ts.map +1 -0
- package/lib/harness/shell-output.js +90 -0
- package/lib/harness/shell-output.js.map +1 -0
- package/lib/harness/statusline-cc-transcript.d.ts +51 -0
- package/lib/harness/statusline-cc-transcript.d.ts.map +1 -0
- package/lib/harness/statusline-cc-transcript.js +191 -0
- package/lib/harness/statusline-cc-transcript.js.map +1 -0
- package/lib/harness/statusline-command.d.ts +54 -0
- package/lib/harness/statusline-command.d.ts.map +1 -0
- package/lib/harness/statusline-command.js +161 -0
- package/lib/harness/statusline-command.js.map +1 -0
- package/lib/harness/statusline-payload.d.ts +79 -0
- package/lib/harness/statusline-payload.d.ts.map +1 -0
- package/lib/harness/statusline-payload.js +93 -0
- package/lib/harness/statusline-payload.js.map +1 -0
- package/lib/harness/statusline-settings.d.ts +47 -0
- package/lib/harness/statusline-settings.d.ts.map +1 -0
- package/lib/harness/statusline-settings.js +57 -0
- package/lib/harness/statusline-settings.js.map +1 -0
- package/lib/harness/statusline-wiring.d.ts +45 -0
- package/lib/harness/statusline-wiring.d.ts.map +1 -0
- package/lib/harness/statusline-wiring.js +247 -0
- package/lib/harness/statusline-wiring.js.map +1 -0
- package/lib/harness/usage-view.d.ts +84 -0
- package/lib/harness/usage-view.d.ts.map +1 -0
- package/lib/harness/usage-view.js +199 -0
- package/lib/harness/usage-view.js.map +1 -0
- package/lib/harness/worktree-exit.d.ts +105 -0
- package/lib/harness/worktree-exit.d.ts.map +1 -0
- package/lib/harness/worktree-exit.js +168 -0
- package/lib/harness/worktree-exit.js.map +1 -0
- package/lib/history.d.ts +50 -0
- package/lib/history.d.ts.map +1 -0
- package/lib/history.js +139 -0
- package/lib/history.js.map +1 -0
- package/lib/index.d.ts +63 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +54 -0
- package/lib/index.js.map +1 -0
- package/lib/input.d.ts +158 -0
- package/lib/input.d.ts.map +1 -0
- package/lib/input.js +400 -0
- package/lib/input.js.map +1 -0
- package/lib/invariant.d.ts +14 -0
- package/lib/invariant.d.ts.map +1 -0
- package/lib/invariant.js +20 -0
- package/lib/invariant.js.map +1 -0
- package/lib/mode-cycle.d.ts +22 -0
- package/lib/mode-cycle.d.ts.map +1 -0
- package/lib/mode-cycle.js +32 -0
- package/lib/mode-cycle.js.map +1 -0
- package/lib/model-catalog.d.ts +22 -0
- package/lib/model-catalog.d.ts.map +1 -0
- package/lib/model-catalog.js +45 -0
- package/lib/model-catalog.js.map +1 -0
- package/lib/packaged-preset.d.ts +32 -0
- package/lib/packaged-preset.d.ts.map +1 -0
- package/lib/packaged-preset.js +94 -0
- package/lib/packaged-preset.js.map +1 -0
- package/lib/plugin.d.ts +11 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +88 -0
- package/lib/plugin.js.map +1 -0
- package/lib/profile.d.ts +4 -0
- package/lib/profile.d.ts.map +1 -0
- package/lib/profile.js +7 -0
- package/lib/profile.js.map +1 -0
- package/lib/project-sessions.d.ts +29 -0
- package/lib/project-sessions.d.ts.map +1 -0
- package/lib/project-sessions.js +60 -0
- package/lib/project-sessions.js.map +1 -0
- package/lib/project.d.ts +75 -0
- package/lib/project.d.ts.map +1 -0
- package/lib/project.js +196 -0
- package/lib/project.js.map +1 -0
- package/lib/provider-actions.d.ts +37 -0
- package/lib/provider-actions.d.ts.map +1 -0
- package/lib/provider-actions.js +417 -0
- package/lib/provider-actions.js.map +1 -0
- package/lib/provider-command.d.ts +109 -0
- package/lib/provider-command.d.ts.map +1 -0
- package/lib/provider-command.js +220 -0
- package/lib/provider-command.js.map +1 -0
- package/lib/provider-detail.d.ts +15 -0
- package/lib/provider-detail.d.ts.map +1 -0
- package/lib/provider-detail.js +201 -0
- package/lib/provider-detail.js.map +1 -0
- package/lib/provider-flow.d.ts +191 -0
- package/lib/provider-flow.d.ts.map +1 -0
- package/lib/provider-flow.js +192 -0
- package/lib/provider-flow.js.map +1 -0
- package/lib/provider-presets.d.ts +32 -0
- package/lib/provider-presets.d.ts.map +1 -0
- package/lib/provider-presets.js +105 -0
- package/lib/provider-presets.js.map +1 -0
- package/lib/provider-read.d.ts +63 -0
- package/lib/provider-read.d.ts.map +1 -0
- package/lib/provider-read.js +115 -0
- package/lib/provider-read.js.map +1 -0
- package/lib/provider-settings.d.ts +30 -0
- package/lib/provider-settings.d.ts.map +1 -0
- package/lib/provider-settings.js +65 -0
- package/lib/provider-settings.js.map +1 -0
- package/lib/resume-target.d.ts +59 -0
- package/lib/resume-target.d.ts.map +1 -0
- package/lib/resume-target.js +143 -0
- package/lib/resume-target.js.map +1 -0
- package/lib/slash.d.ts +44 -0
- package/lib/slash.d.ts.map +1 -0
- package/lib/slash.js +81 -0
- package/lib/slash.js.map +1 -0
- package/lib/state/driver-types.d.ts +505 -0
- package/lib/state/driver-types.d.ts.map +1 -0
- package/lib/state/driver-types.js +8 -0
- package/lib/state/driver-types.js.map +1 -0
- package/lib/state/driver-usage-types.d.ts +59 -0
- package/lib/state/driver-usage-types.d.ts.map +1 -0
- package/lib/state/driver-usage-types.js +8 -0
- package/lib/state/driver-usage-types.js.map +1 -0
- package/lib/statusline.d.ts +63 -0
- package/lib/statusline.d.ts.map +1 -0
- package/lib/statusline.js +97 -0
- package/lib/statusline.js.map +1 -0
- package/lib/store/pickers.d.ts +34 -0
- package/lib/store/pickers.d.ts.map +1 -0
- package/lib/store/pickers.js +111 -0
- package/lib/store/pickers.js.map +1 -0
- package/lib/store/provider-panel.d.ts +107 -0
- package/lib/store/provider-panel.d.ts.map +1 -0
- package/lib/store/provider-panel.js +151 -0
- package/lib/store/provider-panel.js.map +1 -0
- package/lib/store/question.d.ts +21 -0
- package/lib/store/question.d.ts.map +1 -0
- package/lib/store/question.js +59 -0
- package/lib/store/question.js.map +1 -0
- package/lib/store/queue.d.ts +27 -0
- package/lib/store/queue.d.ts.map +1 -0
- package/lib/store/queue.js +34 -0
- package/lib/store/queue.js.map +1 -0
- package/lib/store/session.d.ts +73 -0
- package/lib/store/session.d.ts.map +1 -0
- package/lib/store/session.js +172 -0
- package/lib/store/session.js.map +1 -0
- package/lib/store/subagents.d.ts +16 -0
- package/lib/store/subagents.d.ts.map +1 -0
- package/lib/store/subagents.js +44 -0
- package/lib/store/subagents.js.map +1 -0
- package/lib/store/todos.d.ts +35 -0
- package/lib/store/todos.d.ts.map +1 -0
- package/lib/store/todos.js +68 -0
- package/lib/store/todos.js.map +1 -0
- package/lib/store/usage.d.ts +15 -0
- package/lib/store/usage.d.ts.map +1 -0
- package/lib/store/usage.js +27 -0
- package/lib/store/usage.js.map +1 -0
- package/lib/store/views.d.ts +419 -0
- package/lib/store/views.d.ts.map +1 -0
- package/lib/store/views.js +3 -0
- package/lib/store/views.js.map +1 -0
- package/lib/store.d.ts +19 -0
- package/lib/store.d.ts.map +1 -0
- package/lib/store.js +10 -0
- package/lib/store.js.map +1 -0
- package/lib/terminal/lease.d.ts +33 -0
- package/lib/terminal/lease.d.ts.map +1 -0
- package/lib/terminal/lease.js +99 -0
- package/lib/terminal/lease.js.map +1 -0
- package/lib/tool-card.d.ts +75 -0
- package/lib/tool-card.d.ts.map +1 -0
- package/lib/tool-card.js +109 -0
- package/lib/tool-card.js.map +1 -0
- package/lib/tool-verbs.d.ts +12 -0
- package/lib/tool-verbs.d.ts.map +1 -0
- package/lib/tool-verbs.js +29 -0
- package/lib/tool-verbs.js.map +1 -0
- package/lib/transcript.d.ts +40 -0
- package/lib/transcript.d.ts.map +1 -0
- package/lib/transcript.js +413 -0
- package/lib/transcript.js.map +1 -0
- package/lib/working-line.d.ts +44 -0
- package/lib/working-line.d.ts.map +1 -0
- package/lib/working-line.js +56 -0
- package/lib/working-line.js.map +1 -0
- package/package.json +72 -0
- package/presets/cc/.dsh-cc-managed.json +5 -0
- package/presets/cc/agent.cordis.yml +524 -0
- package/presets/cc/preset.yml +3 -0
- package/scripts/stage-preset.mjs +26 -0
package/lib/input.d.ts
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global composer key handling. The editor owns typing, backspace, and enter;
|
|
3
|
+
* this module handles only overlay answers, permission cycling, interrupt,
|
|
4
|
+
* and quit. Reads the live driver snapshot so keystrokes never land on a
|
|
5
|
+
* stale closure.
|
|
6
|
+
* @module @dsh-cc/tui/input
|
|
7
|
+
*/
|
|
8
|
+
import type { ApprovalAnswerKind } from './state/driver-types.ts';
|
|
9
|
+
import type { TuiState } from './store.ts';
|
|
10
|
+
export interface InputSink {
|
|
11
|
+
state: TuiState;
|
|
12
|
+
interrupt(): void;
|
|
13
|
+
cyclePermissionMode(): void;
|
|
14
|
+
toggleThinking(): void;
|
|
15
|
+
answerApproval(kind: ApprovalAnswerKind): void;
|
|
16
|
+
questionMove(delta: -1 | 1): void;
|
|
17
|
+
questionToggle(): void;
|
|
18
|
+
questionPick(index: number): void;
|
|
19
|
+
questionType(text: string): void;
|
|
20
|
+
questionBackspace(): void;
|
|
21
|
+
questionSubmit(): void;
|
|
22
|
+
questionCancel(): void;
|
|
23
|
+
modelPickerMove(delta: -1 | 1): void;
|
|
24
|
+
modelPickerSubmit(): void;
|
|
25
|
+
modelPickerCancel(): void;
|
|
26
|
+
effortPickerMove(delta: -1 | 1): void;
|
|
27
|
+
effortPickerSubmit(): void;
|
|
28
|
+
effortPickerCancel(): void;
|
|
29
|
+
permissionPickerMove(delta: -1 | 1): void;
|
|
30
|
+
permissionPickerSubmit(): void;
|
|
31
|
+
permissionPickerCancel(): void;
|
|
32
|
+
sessionSwitcherMove(delta: -1 | 1): void;
|
|
33
|
+
sessionSwitcherType(text: string): void;
|
|
34
|
+
sessionSwitcherBackspace(): void;
|
|
35
|
+
sessionSwitcherToggleScope(): void;
|
|
36
|
+
sessionSwitcherSubmit(): Promise<void>;
|
|
37
|
+
sessionSwitcherCancel(): void;
|
|
38
|
+
/** Toggle the Ctrl+T todo panel: close it when open, open it when closed. */
|
|
39
|
+
toggleTodoPanel(): void;
|
|
40
|
+
/** Move the todo-panel focus by one row (clamped; no wrap). */
|
|
41
|
+
todoPanelMove(delta: -1 | 1): void;
|
|
42
|
+
/** Close the todo panel. */
|
|
43
|
+
todoPanelClose(): void;
|
|
44
|
+
/** Close the `/usage` panel. */
|
|
45
|
+
usagePanelClose(): void;
|
|
46
|
+
/** Move the `/quit` worktree-exit focus by one row. */
|
|
47
|
+
worktreeExitMove(delta: -1 | 1): void;
|
|
48
|
+
/** Confirm the focused worktree-exit option. */
|
|
49
|
+
worktreeExitSubmit(): Promise<void>;
|
|
50
|
+
/** Dismiss the `/quit` worktree-exit overlay without quitting. */
|
|
51
|
+
worktreeExitCancel(): void;
|
|
52
|
+
dispose(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
export type InputAction = {
|
|
55
|
+
kind: 'none';
|
|
56
|
+
} | {
|
|
57
|
+
kind: 'quit';
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Route one raw keypress into the open approval overlay: `1`/`y`/`Y` grant
|
|
61
|
+
* once, `2`/`n`/`N`/escape reject, `3`/`a`/`A` grant always (once + persist a
|
|
62
|
+
* derived allow rule), `4`/`s`/`S` grant for this session (once + a
|
|
63
|
+
* session-scoped allowlist rule, never persisted to global settings). Every
|
|
64
|
+
* other key is consumed and ignored — the overlay
|
|
65
|
+
* is modal and the composer editor must never see keystrokes while it is open.
|
|
66
|
+
* Shared by the headless composer path and the mounted root listener so the
|
|
67
|
+
* key map has a single source of truth.
|
|
68
|
+
*/
|
|
69
|
+
export declare function routeApprovalInput(driver: InputSink, data: string): void;
|
|
70
|
+
/**
|
|
71
|
+
* Route one raw keypress into the open question overlay. Every recognized
|
|
72
|
+
* key is handled and every other input is dropped — the composer editor must
|
|
73
|
+
* never see keystrokes while a question is open.
|
|
74
|
+
*/
|
|
75
|
+
export declare function routeQuestionInput(driver: InputSink, data: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* Route one raw keypress into the open model picker. Only arrows, enter, and
|
|
78
|
+
* escape are recognized; everything else is dropped — the picker is modal and
|
|
79
|
+
* the composer editor must never see keystrokes while it is open.
|
|
80
|
+
*/
|
|
81
|
+
export declare function routeModelPickerInput(driver: InputSink, data: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Route one raw keypress into the open effort picker. Only arrows, enter, and
|
|
84
|
+
* escape are recognized; everything else is dropped — the picker is modal and
|
|
85
|
+
* the composer editor must never see keystrokes while it is open.
|
|
86
|
+
*/
|
|
87
|
+
export declare function routeEffortPickerInput(driver: InputSink, data: string): void;
|
|
88
|
+
/**
|
|
89
|
+
* Route one raw keypress into the open `/quit` worktree-exit confirmation.
|
|
90
|
+
* Only arrows, enter, and escape are recognized; everything else is dropped
|
|
91
|
+
* — the overlay is modal and the composer editor must never see keystrokes
|
|
92
|
+
* while it is open. Enter on the focused row (keep/remove/cancel) is
|
|
93
|
+
* adjudicated by the driver.
|
|
94
|
+
*/
|
|
95
|
+
export declare function routeWorktreeExitInput(driver: InputSink, data: string): void;
|
|
96
|
+
/**
|
|
97
|
+
* Route one raw keypress into the open permission picker. Only arrows, enter,
|
|
98
|
+
* and escape are recognized; everything else is dropped — the picker is modal
|
|
99
|
+
* and the composer editor must never see keystrokes while it is open.
|
|
100
|
+
*/
|
|
101
|
+
export declare function routePermissionPickerInput(driver: InputSink, data: string): void;
|
|
102
|
+
/**
|
|
103
|
+
* Route one raw keypress into the open session switcher: arrows move, enter
|
|
104
|
+
* switches, tab toggles the cwd/all-projects scope, backspace and printable
|
|
105
|
+
* characters edit the query filter, and escape cancels (the two-stage
|
|
106
|
+
* clear-filter-then-close lives in the driver). Everything else is dropped —
|
|
107
|
+
* the switcher is modal and the composer editor must never see keystrokes
|
|
108
|
+
* while it is open. While `switching` is true, every key is consumed without
|
|
109
|
+
* action.
|
|
110
|
+
*/
|
|
111
|
+
export declare function routeSessionSwitcherInput(driver: InputSink, data: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* Route one raw keypress into the open todo panel. Only arrows, escape, and
|
|
114
|
+
* ctrl+t (toggle closed) are recognized; everything else is dropped — the
|
|
115
|
+
* panel is modal and the composer editor must never see keystrokes while it
|
|
116
|
+
* is open. Opening is owned by the ctrl+t binding in the global listener,
|
|
117
|
+
* which only fires while the panel is closed.
|
|
118
|
+
*/
|
|
119
|
+
export declare function routeTodoPanelInput(driver: InputSink, data: string): void;
|
|
120
|
+
/**
|
|
121
|
+
* Route one raw keypress into the open `/usage` panel. The panel is pure
|
|
122
|
+
* display with no focus list, so escape closes it and every other key is
|
|
123
|
+
* consumed and ignored — the composer editor must never see keystrokes while
|
|
124
|
+
* it is open. Opening is owned by the `/usage` command.
|
|
125
|
+
*/
|
|
126
|
+
export declare function routeUsagePanelInput(driver: InputSink, data: string): void;
|
|
127
|
+
/**
|
|
128
|
+
* Route one raw keypress into the open `/provider` panel (§4.2–§4.6).
|
|
129
|
+
* Phase-dependent: the list phase keeps j/k navigation (+ `n` starts the
|
|
130
|
+
* custom wizard); the wizard phase feeds printable keys/backspace into the
|
|
131
|
+
* live text field, arrows move the protocol select, enter submits, tab runs
|
|
132
|
+
* the models fetch, `x` is the secondary choice (keep/remove, keep
|
|
133
|
+
* credential), and esc backs one step (closing with a note at the first
|
|
134
|
+
* step). Every other key is consumed — the panel is modal and the composer
|
|
135
|
+
* editor must never see keystrokes while it is open.
|
|
136
|
+
*/
|
|
137
|
+
type ProviderPanelRouter = {
|
|
138
|
+
panelPhase?(): 'list' | 'detail' | 'wizard' | 'confirm-remove' | undefined;
|
|
139
|
+
panelMove(delta: -1 | 1): void;
|
|
140
|
+
panelSubmit(): void;
|
|
141
|
+
panelCancel(): void;
|
|
142
|
+
panelEscape?(): void;
|
|
143
|
+
panelType?(text: string): void;
|
|
144
|
+
panelBackspace?(): void;
|
|
145
|
+
panelToggleFetch?(): void;
|
|
146
|
+
panelSecondary?(): void;
|
|
147
|
+
panelRefreshModels?(): void;
|
|
148
|
+
startCustomWizard?(): void;
|
|
149
|
+
};
|
|
150
|
+
export declare function routeProviderPanelInput(runtime: ProviderPanelRouter | undefined, data: string): void;
|
|
151
|
+
/**
|
|
152
|
+
* Apply one raw keypress against the live driver. Returns whether the app
|
|
153
|
+
* should exit. Called from the pi-tui global input listener before the editor
|
|
154
|
+
* receives the keystroke.
|
|
155
|
+
*/
|
|
156
|
+
export declare function handleComposerInput(driver: InputSink, data: string): InputAction;
|
|
157
|
+
export {};
|
|
158
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
|
package/lib/input.js
ADDED
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global composer key handling. The editor owns typing, backspace, and enter;
|
|
3
|
+
* this module handles only overlay answers, permission cycling, interrupt,
|
|
4
|
+
* and quit. Reads the live driver snapshot so keystrokes never land on a
|
|
5
|
+
* stale closure.
|
|
6
|
+
* @module @dsh-cc/tui/input
|
|
7
|
+
*/
|
|
8
|
+
import { Key, decodeKittyPrintable, matchesKey } from '@dsh-cc/pi-tui';
|
|
9
|
+
/**
|
|
10
|
+
* Decode a raw keypress into the printable character it types, if any. Kitty
|
|
11
|
+
* CSI-u / modifyOtherKeys sequences decode via the vendored helper; legacy
|
|
12
|
+
* input arrives as the character itself.
|
|
13
|
+
*/
|
|
14
|
+
function printableOf(data) {
|
|
15
|
+
const decoded = decodeKittyPrintable(data);
|
|
16
|
+
if (decoded !== undefined)
|
|
17
|
+
return decoded;
|
|
18
|
+
if (data.length === 1) {
|
|
19
|
+
const code = data.charCodeAt(0);
|
|
20
|
+
if (code >= 32 && code !== 127)
|
|
21
|
+
return data;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Route one raw keypress into the open approval overlay: `1`/`y`/`Y` grant
|
|
27
|
+
* once, `2`/`n`/`N`/escape reject, `3`/`a`/`A` grant always (once + persist a
|
|
28
|
+
* derived allow rule), `4`/`s`/`S` grant for this session (once + a
|
|
29
|
+
* session-scoped allowlist rule, never persisted to global settings). Every
|
|
30
|
+
* other key is consumed and ignored — the overlay
|
|
31
|
+
* is modal and the composer editor must never see keystrokes while it is open.
|
|
32
|
+
* Shared by the headless composer path and the mounted root listener so the
|
|
33
|
+
* key map has a single source of truth.
|
|
34
|
+
*/
|
|
35
|
+
export function routeApprovalInput(driver, data) {
|
|
36
|
+
if (matchesKey(data, '1') || data === 'y' || data === 'Y') {
|
|
37
|
+
driver.answerApproval('once');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (matchesKey(data, '2') || data === 'n' || data === 'N' || matchesKey(data, Key.escape)) {
|
|
41
|
+
driver.answerApproval('reject');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (matchesKey(data, '3') || data === 'a' || data === 'A') {
|
|
45
|
+
driver.answerApproval('always');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (matchesKey(data, '4') || data === 's' || data === 'S') {
|
|
49
|
+
driver.answerApproval('session');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// All other keys consumed and ignored (modal).
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Route one raw keypress into the open question overlay. Every recognized
|
|
56
|
+
* key is handled and every other input is dropped — the composer editor must
|
|
57
|
+
* never see keystrokes while a question is open.
|
|
58
|
+
*/
|
|
59
|
+
export function routeQuestionInput(driver, data) {
|
|
60
|
+
if (matchesKey(data, Key.escape)) {
|
|
61
|
+
driver.questionCancel();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (matchesKey(data, Key.up)) {
|
|
65
|
+
driver.questionMove(-1);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (matchesKey(data, Key.down)) {
|
|
69
|
+
driver.questionMove(1);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (matchesKey(data, Key.enter)) {
|
|
73
|
+
driver.questionSubmit();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (matchesKey(data, Key.backspace)) {
|
|
77
|
+
driver.questionBackspace();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (matchesKey(data, Key.space)) {
|
|
81
|
+
driver.questionToggle();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (data.length === 1 && data >= '1' && data <= '9') {
|
|
85
|
+
// Digit quick-pick: the driver bounds-checks against the option list.
|
|
86
|
+
driver.questionPick(Number.parseInt(data, 10) - 1);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const printable = printableOf(data);
|
|
90
|
+
if (printable !== undefined)
|
|
91
|
+
driver.questionType(printable);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Route one raw keypress into the open model picker. Only arrows, enter, and
|
|
95
|
+
* escape are recognized; everything else is dropped — the picker is modal and
|
|
96
|
+
* the composer editor must never see keystrokes while it is open.
|
|
97
|
+
*/
|
|
98
|
+
export function routeModelPickerInput(driver, data) {
|
|
99
|
+
if (matchesKey(data, Key.escape)) {
|
|
100
|
+
driver.modelPickerCancel();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (matchesKey(data, Key.up)) {
|
|
104
|
+
driver.modelPickerMove(-1);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (matchesKey(data, Key.down)) {
|
|
108
|
+
driver.modelPickerMove(1);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (matchesKey(data, Key.enter)) {
|
|
112
|
+
driver.modelPickerSubmit();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// All other keys are consumed and ignored (modal).
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Route one raw keypress into the open effort picker. Only arrows, enter, and
|
|
119
|
+
* escape are recognized; everything else is dropped — the picker is modal and
|
|
120
|
+
* the composer editor must never see keystrokes while it is open.
|
|
121
|
+
*/
|
|
122
|
+
export function routeEffortPickerInput(driver, data) {
|
|
123
|
+
if (matchesKey(data, Key.escape)) {
|
|
124
|
+
driver.effortPickerCancel();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (matchesKey(data, Key.up)) {
|
|
128
|
+
driver.effortPickerMove(-1);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (matchesKey(data, Key.down)) {
|
|
132
|
+
driver.effortPickerMove(1);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (matchesKey(data, Key.enter)) {
|
|
136
|
+
driver.effortPickerSubmit();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// All other keys are consumed and ignored (modal).
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Route one raw keypress into the open `/quit` worktree-exit confirmation.
|
|
143
|
+
* Only arrows, enter, and escape are recognized; everything else is dropped
|
|
144
|
+
* — the overlay is modal and the composer editor must never see keystrokes
|
|
145
|
+
* while it is open. Enter on the focused row (keep/remove/cancel) is
|
|
146
|
+
* adjudicated by the driver.
|
|
147
|
+
*/
|
|
148
|
+
export function routeWorktreeExitInput(driver, data) {
|
|
149
|
+
if (matchesKey(data, Key.escape)) {
|
|
150
|
+
driver.worktreeExitCancel();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (matchesKey(data, Key.up)) {
|
|
154
|
+
driver.worktreeExitMove(-1);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (matchesKey(data, Key.down)) {
|
|
158
|
+
driver.worktreeExitMove(1);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (matchesKey(data, Key.enter)) {
|
|
162
|
+
void driver.worktreeExitSubmit();
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// All other keys are consumed and ignored (modal).
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Route one raw keypress into the open permission picker. Only arrows, enter,
|
|
169
|
+
* and escape are recognized; everything else is dropped — the picker is modal
|
|
170
|
+
* and the composer editor must never see keystrokes while it is open.
|
|
171
|
+
*/
|
|
172
|
+
export function routePermissionPickerInput(driver, data) {
|
|
173
|
+
if (matchesKey(data, Key.escape)) {
|
|
174
|
+
driver.permissionPickerCancel();
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (matchesKey(data, Key.up)) {
|
|
178
|
+
driver.permissionPickerMove(-1);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (matchesKey(data, Key.down)) {
|
|
182
|
+
driver.permissionPickerMove(1);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (matchesKey(data, Key.enter)) {
|
|
186
|
+
driver.permissionPickerSubmit();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
// All other keys are consumed and ignored (modal).
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Route one raw keypress into the open session switcher: arrows move, enter
|
|
193
|
+
* switches, tab toggles the cwd/all-projects scope, backspace and printable
|
|
194
|
+
* characters edit the query filter, and escape cancels (the two-stage
|
|
195
|
+
* clear-filter-then-close lives in the driver). Everything else is dropped —
|
|
196
|
+
* the switcher is modal and the composer editor must never see keystrokes
|
|
197
|
+
* while it is open. While `switching` is true, every key is consumed without
|
|
198
|
+
* action.
|
|
199
|
+
*/
|
|
200
|
+
export function routeSessionSwitcherInput(driver, data) {
|
|
201
|
+
if (driver.state.sessionSwitcher?.switching === true)
|
|
202
|
+
return;
|
|
203
|
+
if (matchesKey(data, Key.escape)) {
|
|
204
|
+
driver.sessionSwitcherCancel();
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (matchesKey(data, Key.tab)) {
|
|
208
|
+
driver.sessionSwitcherToggleScope();
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (matchesKey(data, Key.up)) {
|
|
212
|
+
driver.sessionSwitcherMove(-1);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (matchesKey(data, Key.down)) {
|
|
216
|
+
driver.sessionSwitcherMove(1);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (matchesKey(data, Key.enter)) {
|
|
220
|
+
void driver.sessionSwitcherSubmit();
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (matchesKey(data, Key.backspace)) {
|
|
224
|
+
driver.sessionSwitcherBackspace();
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const printable = printableOf(data);
|
|
228
|
+
if (printable !== undefined)
|
|
229
|
+
driver.sessionSwitcherType(printable);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Route one raw keypress into the open todo panel. Only arrows, escape, and
|
|
233
|
+
* ctrl+t (toggle closed) are recognized; everything else is dropped — the
|
|
234
|
+
* panel is modal and the composer editor must never see keystrokes while it
|
|
235
|
+
* is open. Opening is owned by the ctrl+t binding in the global listener,
|
|
236
|
+
* which only fires while the panel is closed.
|
|
237
|
+
*/
|
|
238
|
+
export function routeTodoPanelInput(driver, data) {
|
|
239
|
+
if (matchesKey(data, Key.ctrl('t'))) {
|
|
240
|
+
driver.todoPanelClose();
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (matchesKey(data, Key.escape)) {
|
|
244
|
+
driver.todoPanelClose();
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if (matchesKey(data, Key.up)) {
|
|
248
|
+
driver.todoPanelMove(-1);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (matchesKey(data, Key.down)) {
|
|
252
|
+
driver.todoPanelMove(1);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
// All other keys consumed and ignored (modal).
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Route one raw keypress into the open `/usage` panel. The panel is pure
|
|
259
|
+
* display with no focus list, so escape closes it and every other key is
|
|
260
|
+
* consumed and ignored — the composer editor must never see keystrokes while
|
|
261
|
+
* it is open. Opening is owned by the `/usage` command.
|
|
262
|
+
*/
|
|
263
|
+
export function routeUsagePanelInput(driver, data) {
|
|
264
|
+
if (matchesKey(data, Key.escape)) {
|
|
265
|
+
driver.usagePanelClose();
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
// All other keys consumed and ignored (modal, no navigation).
|
|
269
|
+
}
|
|
270
|
+
export function routeProviderPanelInput(runtime, data) {
|
|
271
|
+
if (runtime === undefined)
|
|
272
|
+
return;
|
|
273
|
+
const phase = runtime.panelPhase?.() ?? 'list';
|
|
274
|
+
if (matchesKey(data, Key.escape)) {
|
|
275
|
+
if (runtime.panelEscape !== undefined)
|
|
276
|
+
runtime.panelEscape();
|
|
277
|
+
else
|
|
278
|
+
runtime.panelCancel();
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (matchesKey(data, Key.enter)) {
|
|
282
|
+
runtime.panelSubmit();
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
if (phase === 'wizard') {
|
|
286
|
+
if (matchesKey(data, Key.tab)) {
|
|
287
|
+
runtime.panelToggleFetch?.();
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (data === 'x') {
|
|
291
|
+
runtime.panelSecondary?.();
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (matchesKey(data, Key.up)) {
|
|
296
|
+
runtime.panelMove(-1);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
if (matchesKey(data, Key.down)) {
|
|
300
|
+
runtime.panelMove(1);
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (phase === 'detail') {
|
|
304
|
+
if (data === 'r') {
|
|
305
|
+
runtime.panelRefreshModels?.();
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (phase === 'list') {
|
|
310
|
+
if (data === 'n') {
|
|
311
|
+
runtime.startCustomWizard?.();
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
if (data === 'j') {
|
|
315
|
+
runtime.panelMove(1);
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
if (data === 'k') {
|
|
319
|
+
runtime.panelMove(-1);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (matchesKey(data, Key.backspace)) {
|
|
324
|
+
runtime.panelBackspace?.();
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
if (phase === 'wizard') {
|
|
328
|
+
const printable = printableOf(data);
|
|
329
|
+
if (printable !== undefined)
|
|
330
|
+
runtime.panelType?.(printable);
|
|
331
|
+
}
|
|
332
|
+
// All other keys consumed (modal).
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Apply one raw keypress against the live driver. Returns whether the app
|
|
336
|
+
* should exit. Called from the pi-tui global input listener before the editor
|
|
337
|
+
* receives the keystroke.
|
|
338
|
+
*/
|
|
339
|
+
export function handleComposerInput(driver, data) {
|
|
340
|
+
const live = driver.state;
|
|
341
|
+
if (live.approval !== undefined) {
|
|
342
|
+
routeApprovalInput(driver, data);
|
|
343
|
+
return { kind: 'none' };
|
|
344
|
+
}
|
|
345
|
+
if (live.question !== undefined) {
|
|
346
|
+
routeQuestionInput(driver, data);
|
|
347
|
+
return { kind: 'none' };
|
|
348
|
+
}
|
|
349
|
+
if (live.modelPicker !== undefined) {
|
|
350
|
+
routeModelPickerInput(driver, data);
|
|
351
|
+
return { kind: 'none' };
|
|
352
|
+
}
|
|
353
|
+
if (live.effortPicker !== undefined) {
|
|
354
|
+
routeEffortPickerInput(driver, data);
|
|
355
|
+
return { kind: 'none' };
|
|
356
|
+
}
|
|
357
|
+
if (live.permissionPicker !== undefined) {
|
|
358
|
+
routePermissionPickerInput(driver, data);
|
|
359
|
+
return { kind: 'none' };
|
|
360
|
+
}
|
|
361
|
+
if (live.sessionSwitcher !== undefined) {
|
|
362
|
+
routeSessionSwitcherInput(driver, data);
|
|
363
|
+
return { kind: 'none' };
|
|
364
|
+
}
|
|
365
|
+
if (live.todoPanel !== undefined) {
|
|
366
|
+
routeTodoPanelInput(driver, data);
|
|
367
|
+
return { kind: 'none' };
|
|
368
|
+
}
|
|
369
|
+
if (live.usagePanel !== undefined) {
|
|
370
|
+
routeUsagePanelInput(driver, data);
|
|
371
|
+
return { kind: 'none' };
|
|
372
|
+
}
|
|
373
|
+
if (live.worktreeExit !== undefined) {
|
|
374
|
+
routeWorktreeExitInput(driver, data);
|
|
375
|
+
return { kind: 'none' };
|
|
376
|
+
}
|
|
377
|
+
if (matchesKey(data, 'shift+tab')) {
|
|
378
|
+
driver.cyclePermissionMode();
|
|
379
|
+
return { kind: 'none' };
|
|
380
|
+
}
|
|
381
|
+
if (matchesKey(data, Key.ctrl('o'))) {
|
|
382
|
+
driver.toggleThinking();
|
|
383
|
+
return { kind: 'none' };
|
|
384
|
+
}
|
|
385
|
+
if (matchesKey(data, Key.ctrl('t'))) {
|
|
386
|
+
driver.toggleTodoPanel();
|
|
387
|
+
return { kind: 'none' };
|
|
388
|
+
}
|
|
389
|
+
if (matchesKey(data, Key.escape)) {
|
|
390
|
+
if (live.busy)
|
|
391
|
+
driver.interrupt();
|
|
392
|
+
return { kind: 'none' };
|
|
393
|
+
}
|
|
394
|
+
if (matchesKey(data, Key.ctrl('c'))) {
|
|
395
|
+
void driver.dispose();
|
|
396
|
+
return { kind: 'quit' };
|
|
397
|
+
}
|
|
398
|
+
return { kind: 'none' };
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=input.js.map
|
package/lib/input.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAqDtE;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAA;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;IAC7C,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,IAAY;IAChE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC1D,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC7B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1F,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC/B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC1D,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC/B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC1D,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QAChC,OAAM;IACR,CAAC;IACD,+CAA+C;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,IAAY;IAChE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;QACvB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACtB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,iBAAiB,EAAE,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,OAAM;IACR,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QACpD,sEAAsE;QACtE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAClD,OAAM;IACR,CAAC;IACD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,IAAY;IACnE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,iBAAiB,EAAE,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACzB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,iBAAiB,EAAE,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,mDAAmD;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,IAAY;IACpE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,kBAAkB,EAAE,CAAA;QAC3B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,kBAAkB,EAAE,CAAA;QAC3B,OAAM;IACR,CAAC;IACD,mDAAmD;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,IAAY;IACpE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,kBAAkB,EAAE,CAAA;QAC3B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,kBAAkB,EAAE,CAAA;QAChC,OAAM;IACR,CAAC;IACD,mDAAmD;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,IAAY;IACxE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,sBAAsB,EAAE,CAAA;QAC/B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,sBAAsB,EAAE,CAAA;QAC/B,OAAM;IACR,CAAC;IACD,mDAAmD;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,IAAY;IACvE,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,KAAK,IAAI;QAAE,OAAM;IAC5D,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,qBAAqB,EAAE,CAAA;QAC9B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,0BAA0B,EAAE,CAAA;QACnC,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;QAC7B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,qBAAqB,EAAE,CAAA;QACnC,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,wBAAwB,EAAE,CAAA;QACjC,OAAM;IACR,CAAC;IACD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAA;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,IAAY;IACjE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QACxB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACvB,OAAM;IACR,CAAC;IACD,+CAA+C;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,IAAY;IAClE,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,eAAe,EAAE,CAAA;QACxB,OAAM;IACR,CAAC;IACD,8DAA8D;AAChE,CAAC;AA0BD,MAAM,UAAU,uBAAuB,CAAC,OAAwC,EAAE,IAAY;IAC5F,IAAI,OAAO,KAAK,SAAS;QAAE,OAAM;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,MAAM,CAAA;IAC9C,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,CAAC,WAAW,EAAE,CAAA;;YACvD,OAAO,CAAC,WAAW,EAAE,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,WAAW,EAAE,CAAA;QACrB,OAAM;IACR,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAA;YAC5B,OAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAA;YAC1B,OAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACrB,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACpB,OAAM;IACR,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAA;YAC9B,OAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAA;YAC7B,OAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YACrB,OAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAA;IAC7D,CAAC;IACD,mCAAmC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,IAAY;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAA;IAEzB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAChC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAChC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACxC,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACxC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACvC,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAClC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,mBAAmB,EAAE,CAAA;QAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,eAAe,EAAE,CAAA;QACxB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM,CAAC,SAAS,EAAE,CAAA;QACjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAA;QACrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-owned invariant companion for `@dsh-cc/tui`.
|
|
3
|
+
* @module @dsh-cc/tui/invariant
|
|
4
|
+
*/
|
|
5
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
6
|
+
/** Cordis companion plugin name. */
|
|
7
|
+
export declare const name = "dsh-cc-tui-invariant";
|
|
8
|
+
/** Service required before the companion can reserve package ownership. */
|
|
9
|
+
export declare const inject: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Register this package's invariant companion.
|
|
12
|
+
*/
|
|
13
|
+
export declare const apply: (ctx: Context) => Promise<() => void>;
|
|
14
|
+
//# sourceMappingURL=invariant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../src/invariant.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,oCAAoC;AACpC,eAAO,MAAM,IAAI,yBAAyB,CAAA;AAC1C,2EAA2E;AAC3E,eAAO,MAAM,MAAM,UAAiB,CAAA;AAQpC;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,OAAO,KAAG,OAAO,CAAC,MAAM,IAAI,CACU,CAAA"}
|
package/lib/invariant.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-owned invariant companion for `@dsh-cc/tui`.
|
|
3
|
+
* @module @dsh-cc/tui/invariant
|
|
4
|
+
*/
|
|
5
|
+
const PACKAGE_NAME = '@dsh-cc/tui';
|
|
6
|
+
/** Cordis companion plugin name. */
|
|
7
|
+
export const name = 'dsh-cc-tui-invariant';
|
|
8
|
+
/** Service required before the companion can reserve package ownership. */
|
|
9
|
+
export const inject = ['invariants'];
|
|
10
|
+
/**
|
|
11
|
+
* No runtime invariant: the TUI is a protocol driver over session/event and
|
|
12
|
+
* does not own a durable projection.
|
|
13
|
+
*/
|
|
14
|
+
const install = () => { };
|
|
15
|
+
/**
|
|
16
|
+
* Register this package's invariant companion.
|
|
17
|
+
*/
|
|
18
|
+
export const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
|
|
19
|
+
/* jscpd:ignore-end */
|
|
20
|
+
//# sourceMappingURL=invariant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant.js","sourceRoot":"","sources":["../src/invariant.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,YAAY,GAAG,aAAa,CAAA;AAElC,oCAAoC;AACpC,MAAM,CAAC,MAAM,IAAI,GAAG,sBAAsB,CAAA;AAC1C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,YAAY,CAAC,CAAA;AAEpC;;;GAGG;AACH,MAAM,OAAO,GAAuB,GAAG,EAAE,GAAE,CAAC,CAAA;AAE5C;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAY,EAAuB,EAAE,CACzD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;AACjE,sBAAsB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure Shift+Tab cycle over CC permission-rule modes. Browser-safe and
|
|
3
|
+
* harness-free so the cycle cannot drift from the `/permissions` list.
|
|
4
|
+
* @module @dsh-cc/tui/mode-cycle
|
|
5
|
+
*/
|
|
6
|
+
import { PERMISSION_COMMAND_MODES, type PermissionCommandMode } from '@dsh-cc/command-permissions';
|
|
7
|
+
export { PERMISSION_COMMAND_MODES, type PermissionCommandMode };
|
|
8
|
+
/** Cycle order matches `/permissions` advertisement. */
|
|
9
|
+
export declare const PERMISSION_CYCLE: readonly PermissionCommandMode[];
|
|
10
|
+
/**
|
|
11
|
+
* Advance one step in the CC permission-mode cycle.
|
|
12
|
+
* @param current - the mode currently in force.
|
|
13
|
+
* @param bypassDisabled - when true, `bypassPermissions` is skipped.
|
|
14
|
+
* @returns the next mode (wraps to the first).
|
|
15
|
+
*/
|
|
16
|
+
export declare function nextPermissionMode(current: string, bypassDisabled?: boolean): PermissionCommandMode;
|
|
17
|
+
/**
|
|
18
|
+
* Whether `mode` is one of the advertised CC permission modes.
|
|
19
|
+
* @param mode - untrusted user input.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isPermissionMode(mode: string): mode is PermissionCommandMode;
|
|
22
|
+
//# sourceMappingURL=mode-cycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-cycle.d.ts","sourceRoot":"","sources":["../src/mode-cycle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,CAAA;AAE/D,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,SAAS,qBAAqB,EAA6B,CAAA;AAE1F;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,cAAc,UAAQ,GACrB,qBAAqB,CAOvB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,qBAAqB,CAE5E"}
|