@patze/code-cli 0.43.0 → 0.43.3

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.
@@ -1,32 +1,31 @@
1
- import { emitKeypressEvents } from "node:readline";
2
1
  import { getReasoningLevelsForModelId, modelSupportsReasoningPicker, } from "../../config/model-reasoning.js";
3
2
  import { normalizeModelId, PATZE_MODEL_CATALOG } from "../../config/models.js";
4
- import { moveSelection } from "./slash-menu.js";
5
3
  import { formatModelPickerPanel, formatModelPickerResultLine, formatReasoningPickerPanel, indexForCatalogEntry, indexForReasoningLevel, } from "./model-picker-panel.js";
6
4
  import { applyModelSelection, resolveReasoningLevelFromSelection, } from "./model-selection-apply.js";
7
5
  import { createKeyReaderFromSequence, readPermissionSelectorKey, } from "./permissions-keys.js";
8
- const HIDE_CURSOR = "\x1b[?25l";
9
- const SHOW_CURSOR = "\x1b[?25h";
6
+ import { runArrowSelectorLoop, runTTYArrowSelector } from "./tty-arrow-selector.js";
10
7
  export async function runModelTtyPicker(session, currentId, options = {}) {
11
- if (options.keySequence?.length) {
12
- return runScriptedModelPicker(session, currentId, options.keySequence);
13
- }
14
- const input = options.input ?? process.stdin;
15
8
  const output = options.output ?? process.stdout;
16
- if (!input.isTTY || !output.isTTY) {
17
- return { action: "cancel" };
18
- }
19
- const keys = createInteractiveKeyReader(input);
9
+ const width = output.columns && output.columns > 0 ? output.columns : 80;
20
10
  const color = !process.env.NO_COLOR;
21
- const width = output.columns ?? 80;
22
- const modelResult = await runCodexListPicker({
23
- input,
24
- output,
25
- itemCount: PATZE_MODEL_CATALOG.length,
26
- initialIndex: indexForCatalogEntry(PATZE_MODEL_CATALOG, currentId),
27
- render: (selectedIndex) => formatModelPickerPanel({ currentId, selectedIndex, width, color }),
28
- readKey: keys.readKey,
29
- });
11
+ const sharedReader = options.keySequence?.length
12
+ ? createKeyReaderFromSequence(options.keySequence)
13
+ : null;
14
+ const modelResult = sharedReader
15
+ ? await runArrowSelectorLoop({
16
+ itemCount: PATZE_MODEL_CATALOG.length,
17
+ selectedIndex: indexForCatalogEntry(PATZE_MODEL_CATALOG, currentId),
18
+ readKey: () => readPermissionSelectorKey(sharedReader),
19
+ digitJump: true,
20
+ })
21
+ : await runTTYArrowSelector({
22
+ itemCount: PATZE_MODEL_CATALOG.length,
23
+ initialIndex: indexForCatalogEntry(PATZE_MODEL_CATALOG, currentId),
24
+ render: (selectedIndex) => formatModelPickerPanel({ currentId, selectedIndex, width, color }),
25
+ input: options.input,
26
+ output: options.output,
27
+ digitJump: true,
28
+ });
30
29
  if (modelResult.action === "cancel") {
31
30
  return { action: "cancel" };
32
31
  }
@@ -34,35 +33,18 @@ export async function runModelTtyPicker(session, currentId, options = {}) {
34
33
  if (!entry) {
35
34
  return { action: "cancel" };
36
35
  }
37
- return finalizeModelSelection(session, entry, keys.readKey, input, output, width, color);
36
+ return finalizeModelSelection(session, entry, {
37
+ sharedReader,
38
+ width,
39
+ color,
40
+ input: options.input,
41
+ output: options.output,
42
+ });
38
43
  }
39
44
  export function formatModelPickerSuccessLine(entry, reasoningLevel) {
40
45
  return formatModelPickerResultLine(entry, reasoningLevel);
41
46
  }
42
- async function runScriptedModelPicker(session, currentId, keySequence) {
43
- const readChunk = createKeyReaderFromSequence(keySequence);
44
- const readKey = async () => readPermissionSelectorKey(readChunk);
45
- const modelResult = await runCodexListPicker({
46
- itemCount: PATZE_MODEL_CATALOG.length,
47
- initialIndex: indexForCatalogEntry(PATZE_MODEL_CATALOG, currentId),
48
- render: (selectedIndex) => formatModelPickerPanel({
49
- currentId,
50
- selectedIndex,
51
- width: 80,
52
- color: false,
53
- }),
54
- readKey,
55
- });
56
- if (modelResult.action === "cancel") {
57
- return { action: "cancel" };
58
- }
59
- const entry = PATZE_MODEL_CATALOG[modelResult.selectedIndex];
60
- if (!entry) {
61
- return { action: "cancel" };
62
- }
63
- return finalizeModelSelection(session, entry, readKey);
64
- }
65
- async function finalizeModelSelection(session, entry, readKey, input, output, width = 80, color = false) {
47
+ async function finalizeModelSelection(session, entry, ctx) {
66
48
  if (!modelSupportsReasoningPicker(entry.id)) {
67
49
  applyModelSelection(session, entry, null);
68
50
  return { action: "select", entry, reasoningLevel: null };
@@ -71,20 +53,28 @@ async function finalizeModelSelection(session, entry, readKey, input, output, wi
71
53
  const currentLevel = normalizeModelId(session.getModelOverride()) === normalizeModelId(entry.id)
72
54
  ? session.getModelReasoningLevel()
73
55
  : null;
74
- const reasoningResult = await runCodexListPicker({
75
- input,
76
- output,
77
- itemCount: reasoningOptions.length,
78
- initialIndex: indexForReasoningLevel(reasoningOptions, currentLevel, entry.id),
79
- render: (selectedIndex) => formatReasoningPickerPanel({
80
- modelId: entry.id,
81
- currentLevel,
82
- selectedIndex,
83
- width,
84
- color,
85
- }),
86
- readKey,
87
- });
56
+ const initialIndex = indexForReasoningLevel(reasoningOptions, currentLevel, entry.id);
57
+ const reasoningResult = ctx.sharedReader
58
+ ? await runArrowSelectorLoop({
59
+ itemCount: reasoningOptions.length,
60
+ selectedIndex: initialIndex,
61
+ readKey: () => readPermissionSelectorKey(ctx.sharedReader),
62
+ digitJump: true,
63
+ })
64
+ : await runTTYArrowSelector({
65
+ itemCount: reasoningOptions.length,
66
+ initialIndex,
67
+ render: (selectedIndex) => formatReasoningPickerPanel({
68
+ modelId: entry.id,
69
+ currentLevel,
70
+ selectedIndex,
71
+ width: ctx.width,
72
+ color: ctx.color,
73
+ }),
74
+ input: ctx.input,
75
+ output: ctx.output,
76
+ digitJump: true,
77
+ });
88
78
  if (reasoningResult.action === "cancel") {
89
79
  return { action: "cancel" };
90
80
  }
@@ -92,139 +82,4 @@ async function finalizeModelSelection(session, entry, readKey, input, output, wi
92
82
  applyModelSelection(session, entry, reasoningLevel);
93
83
  return { action: "select", entry, reasoningLevel };
94
84
  }
95
- async function runCodexListPicker(input) {
96
- if (input.itemCount <= 0) {
97
- return { action: "cancel" };
98
- }
99
- let selectedIndex = clampIndex(input.initialIndex, input.itemCount);
100
- const ttyInput = input.input;
101
- const ttyOutput = input.output;
102
- const interactive = Boolean(ttyInput?.isTTY && ttyOutput?.isTTY);
103
- let frameRows = 0;
104
- let attached = false;
105
- const redraw = () => {
106
- if (!interactive || !ttyInput || !ttyOutput) {
107
- return;
108
- }
109
- const lines = input.render(selectedIndex);
110
- let out = HIDE_CURSOR;
111
- if (frameRows > 0) {
112
- out += `\x1b[${frameRows}A\r\x1b[J`;
113
- }
114
- else {
115
- out += "\r\x1b[J";
116
- }
117
- out += lines.join("\n");
118
- out += SHOW_CURSOR;
119
- ttyOutput.write(out);
120
- frameRows = lines.length;
121
- };
122
- const clearFrame = () => {
123
- if (!interactive || !ttyOutput || frameRows <= 0) {
124
- return;
125
- }
126
- ttyOutput.write(`\x1b[${frameRows}A\r\x1b[J${SHOW_CURSOR}\n`);
127
- frameRows = 0;
128
- };
129
- if (interactive && ttyInput) {
130
- emitKeypressEvents(ttyInput);
131
- ttyInput.setRawMode(true);
132
- ttyInput.resume();
133
- attached = true;
134
- redraw();
135
- }
136
- try {
137
- while (true) {
138
- const mapped = await input.readKey();
139
- if (!mapped || mapped === "escape" || mapped === "cancel") {
140
- return { action: "cancel" };
141
- }
142
- if (mapped === "up") {
143
- selectedIndex = moveSelection(selectedIndex, -1, input.itemCount);
144
- redraw();
145
- continue;
146
- }
147
- if (mapped === "down") {
148
- selectedIndex = moveSelection(selectedIndex, 1, input.itemCount);
149
- redraw();
150
- continue;
151
- }
152
- if (mapped === "enter") {
153
- return { action: "select", selectedIndex };
154
- }
155
- if (mapped.startsWith("digit:")) {
156
- const jump = Number(mapped.slice("digit:".length)) - 1;
157
- if (jump >= 0 && jump < input.itemCount) {
158
- selectedIndex = jump;
159
- redraw();
160
- }
161
- }
162
- }
163
- }
164
- finally {
165
- if (attached && ttyInput?.isTTY) {
166
- ttyInput.setRawMode(false);
167
- ttyInput.pause();
168
- }
169
- clearFrame();
170
- }
171
- }
172
- function createInteractiveKeyReader(input) {
173
- emitKeypressEvents(input);
174
- const queue = [];
175
- let pending = null;
176
- const onKeypress = (str, key) => {
177
- const mapped = mapInteractiveKey(str, key);
178
- if (!mapped) {
179
- return;
180
- }
181
- if (pending) {
182
- const resolve = pending;
183
- pending = null;
184
- resolve(mapped);
185
- return;
186
- }
187
- queue.push(mapped);
188
- };
189
- input.on("keypress", onKeypress);
190
- return {
191
- readKey: () => new Promise((resolve) => {
192
- const next = queue.shift();
193
- if (next !== undefined) {
194
- resolve(next);
195
- return;
196
- }
197
- pending = resolve;
198
- }),
199
- };
200
- }
201
- function mapInteractiveKey(str, key) {
202
- const name = key?.name ?? "";
203
- if (key?.ctrl && name === "c") {
204
- return "cancel";
205
- }
206
- if (name === "escape") {
207
- return "escape";
208
- }
209
- if (name === "up" || (!key?.ctrl && !key?.meta && name === "k")) {
210
- return "up";
211
- }
212
- if (name === "down" || (!key?.ctrl && !key?.meta && name === "j")) {
213
- return "down";
214
- }
215
- if (name === "return" || name === "enter") {
216
- return "enter";
217
- }
218
- const digit = str?.match(/^[1-9]$/);
219
- if (digit) {
220
- return `digit:${digit[0]}`;
221
- }
222
- return null;
223
- }
224
- function clampIndex(index, length) {
225
- if (length <= 0) {
226
- return 0;
227
- }
228
- return Math.min(Math.max(0, index), length - 1);
229
- }
230
85
  //# sourceMappingURL=model-tty-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-tty-picker.js","sourceRoot":"","sources":["../../../src/cli/interactive/model-tty-picker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-tty-picker.js","sourceRoot":"","sources":["../../../src/cli/interactive/model-tty-picker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AActD,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAuDD,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAkGjC"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAgBtD,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAuDD,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAoGjC"}
@@ -5,6 +5,8 @@ import { INTERACTIVE_PROMPT } from "./header.js";
5
5
  import { buildComposerChromeForSession } from "./composer-session-chrome.js";
6
6
  import { resolveComposerPlaceholder } from "./auth-gate.js";
7
7
  import { buildEmptySessionHints } from "./session-hints.js";
8
+ import { loadConfig } from "../../config/config.js";
9
+ import { isAuthConfigured } from "../../backend/auth.js";
8
10
  import { SlashLineEditor } from "./line-editor.js";
9
11
  import { prepareInteractiveController } from "./session-controller.js";
10
12
  async function runTurnWithCancel(rawLine, context) {
@@ -66,7 +68,9 @@ export async function runInteractiveShell(options = {}) {
66
68
  for (const line of controller.renderHeaderLines()) {
67
69
  output.line(line);
68
70
  }
69
- const showEmptyHints = interactive && controller.session.snapshot().length === 0;
71
+ const showEmptyHints = interactive &&
72
+ controller.session.snapshot().length === 0 &&
73
+ isAuthConfigured(loadConfig(cwd));
70
74
  if (showEmptyHints) {
71
75
  output.line("");
72
76
  for (const hint of buildEmptySessionHints(cwd)) {
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type PermissionSelectorKey } from "./permissions-keys.js";
1
2
  export type TtyArrowSelectorResult = {
2
3
  action: "select";
3
4
  selectedIndex: number;
@@ -11,7 +12,16 @@ export type TtyArrowSelectorOptions = {
11
12
  keySequence?: readonly string[];
12
13
  input?: NodeJS.ReadStream;
13
14
  output?: NodeJS.WriteStream;
15
+ /** Allow 1–9 to jump highlight without confirming (Codex-style). */
16
+ digitJump?: boolean;
14
17
  };
15
18
  /** Cookbook-style ↑/↓ + Enter list picker for Node TTY shells. */
16
19
  export declare function runTTYArrowSelector(options: TtyArrowSelectorOptions): Promise<TtyArrowSelectorResult>;
20
+ /** Shared arrow/digit/enter loop for scripted selectors and multi-step pickers. */
21
+ export declare function runArrowSelectorLoop(input: {
22
+ itemCount: number;
23
+ selectedIndex: number;
24
+ readKey: () => Promise<PermissionSelectorKey | null>;
25
+ digitJump?: boolean;
26
+ }): Promise<TtyArrowSelectorResult>;
17
27
  //# sourceMappingURL=tty-arrow-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tty-arrow-selector.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/tty-arrow-selector.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAA;AAExB,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAA;IACpD,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;CAC5B,CAAA;AAED,kEAAkE;AAClE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAoFjC"}
1
+ {"version":3,"file":"tty-arrow-selector.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/tty-arrow-selector.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAA;AAS9B,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAA;AAExB,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAA;IACpD,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;IAC3B,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,kEAAkE;AAClE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAoFjC;AAED,mFAAmF;AACnF,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAA;IACpD,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA0BlC"}
@@ -1,8 +1,7 @@
1
1
  import { emitKeypressEvents } from "node:readline";
2
2
  import { moveSelection } from "./slash-menu.js";
3
+ import { TtyAnchoredOverlay } from "./tty-frame.js";
3
4
  import { createKeyReaderFromSequence, mapKeypressToSelectorKey, readPermissionSelectorKey, } from "./permissions-keys.js";
4
- const HIDE_CURSOR = "\x1b[?25l";
5
- const SHOW_CURSOR = "\x1b[?25h";
6
5
  /** Cookbook-style ↑/↓ + Enter list picker for Node TTY shells. */
7
6
  export async function runTTYArrowSelector(options) {
8
7
  const itemCount = Math.max(0, options.itemCount);
@@ -11,7 +10,13 @@ export async function runTTYArrowSelector(options) {
11
10
  }
12
11
  let selectedIndex = clampIndex(options.initialIndex, itemCount);
13
12
  if (options.keySequence?.length) {
14
- return runScriptedArrowSelector(options, selectedIndex);
13
+ const readChunk = createKeyReaderFromSequence(options.keySequence);
14
+ return runArrowSelectorLoop({
15
+ itemCount,
16
+ selectedIndex,
17
+ readKey: () => readPermissionSelectorKey(readChunk),
18
+ digitJump: options.digitJump ?? false,
19
+ });
15
20
  }
16
21
  const input = options.input ?? process.stdin;
17
22
  const output = options.output ?? process.stdout;
@@ -22,26 +27,11 @@ export async function runTTYArrowSelector(options) {
22
27
  const wasRaw = input.isRaw ?? false;
23
28
  input.setRawMode(true);
24
29
  input.resume();
25
- let frameRows = 0;
30
+ const width = output.columns && output.columns > 0 ? output.columns : 80;
31
+ const overlay = new TtyAnchoredOverlay();
32
+ overlay.begin(output);
26
33
  const redraw = () => {
27
- const lines = options.render(selectedIndex);
28
- let out = HIDE_CURSOR;
29
- if (frameRows > 0) {
30
- out += `\x1b[${frameRows}A\r\x1b[J`;
31
- }
32
- else {
33
- out += "\r\x1b[J";
34
- }
35
- out += lines.join("\n");
36
- out += SHOW_CURSOR;
37
- output.write(out);
38
- frameRows = lines.length;
39
- };
40
- const clearFrame = () => {
41
- if (frameRows > 0) {
42
- output.write(`\x1b[${frameRows}A\r\x1b[J${SHOW_CURSOR}\n`);
43
- frameRows = 0;
44
- }
34
+ overlay.redraw(output, options.render(selectedIndex), width);
45
35
  };
46
36
  return new Promise((resolve) => {
47
37
  const finish = (result) => {
@@ -50,10 +40,18 @@ export async function runTTYArrowSelector(options) {
50
40
  input.setRawMode(wasRaw);
51
41
  }
52
42
  input.pause();
53
- clearFrame();
43
+ overlay.clear(output);
54
44
  resolve(result);
55
45
  };
56
46
  const onKeypress = (str, key) => {
47
+ if (options.digitJump && str && /^[1-9]$/.test(str)) {
48
+ const jump = Number(str) - 1;
49
+ if (jump < itemCount) {
50
+ selectedIndex = jump;
51
+ redraw();
52
+ }
53
+ return;
54
+ }
57
55
  const mapped = mapKeypressToSelectorKey(str, key ?? {});
58
56
  if (!mapped) {
59
57
  return;
@@ -80,25 +78,31 @@ export async function runTTYArrowSelector(options) {
80
78
  redraw();
81
79
  });
82
80
  }
83
- async function runScriptedArrowSelector(options, selectedIndex) {
84
- const readChunk = createKeyReaderFromSequence(options.keySequence ?? []);
85
- const itemCount = options.itemCount;
81
+ /** Shared arrow/digit/enter loop for scripted selectors and multi-step pickers. */
82
+ export async function runArrowSelectorLoop(input) {
83
+ let selectedIndex = clampIndex(input.selectedIndex, input.itemCount);
86
84
  while (true) {
87
- const key = await readPermissionSelectorKey(readChunk);
85
+ const key = await input.readKey();
88
86
  if (!key || key === "escape" || key === "cancel") {
89
87
  return { action: "cancel" };
90
88
  }
91
89
  if (key === "up") {
92
- selectedIndex = moveSelection(selectedIndex, -1, itemCount);
90
+ selectedIndex = moveSelection(selectedIndex, -1, input.itemCount);
93
91
  continue;
94
92
  }
95
93
  if (key === "down") {
96
- selectedIndex = moveSelection(selectedIndex, 1, itemCount);
94
+ selectedIndex = moveSelection(selectedIndex, 1, input.itemCount);
97
95
  continue;
98
96
  }
99
97
  if (key === "enter") {
100
98
  return { action: "select", selectedIndex };
101
99
  }
100
+ if (input.digitJump && /^[1-9]$/.test(key)) {
101
+ const jump = Number(key) - 1;
102
+ if (jump < input.itemCount) {
103
+ selectedIndex = jump;
104
+ }
105
+ }
102
106
  }
103
107
  }
104
108
  function clampIndex(index, length) {
@@ -1 +1 @@
1
- {"version":3,"file":"tty-arrow-selector.js","sourceRoot":"","sources":["../../../src/cli/interactive/tty-arrow-selector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tty-arrow-selector.js","sourceRoot":"","sources":["../../../src/cli/interactive/tty-arrow-selector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare const SHOW_CURSOR = "\u001B[?25h";
2
+ export declare function clampLinesToSingleRow(lines: readonly string[], width: number): string[];
3
+ export declare function stripAnsi(text: string): string;
4
+ /** Terminal row count after soft-wrapping long logical lines. */
5
+ export declare function countVisualRows(lines: readonly string[], width: number): number;
6
+ export declare function lineVisualRows(line: string, width: number): number;
7
+ /** Pin overlay redraws to the cursor position where the picker opened (Codex-style). */
8
+ export declare class TtyAnchoredOverlay {
9
+ private frameRows;
10
+ private anchored;
11
+ begin(output: NodeJS.WriteStream): void;
12
+ redraw(output: NodeJS.WriteStream, lines: readonly string[], width: number, options?: {
13
+ showCursor?: boolean;
14
+ }): number;
15
+ clear(output: NodeJS.WriteStream): void;
16
+ }
17
+ /** @deprecated Prefer TtyAnchoredOverlay for interactive overlays. */
18
+ export declare function redrawTtyFrame(output: NodeJS.WriteStream, input: {
19
+ previousRows: number;
20
+ lines: readonly string[];
21
+ width: number;
22
+ }): number;
23
+ /** @deprecated Prefer TtyAnchoredOverlay.clear */
24
+ export declare function clearTtyFrame(output: NodeJS.WriteStream, frameRows: number): void;
25
+ //# sourceMappingURL=tty-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tty-frame.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/tty-frame.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,gBAAc,CAAA;AAItC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAGvF;AA4BD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO/E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED,wFAAwF;AACxF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,QAAQ,CAAQ;IAExB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI;IAMvC,MAAM,CACJ,MAAM,EAAE,MAAM,CAAC,WAAW,EAC1B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,MAAM;IA+BT,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI;CAqBxC;AA2BD,sEAAsE;AACtE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,WAAW,EAC1B,KAAK,EAAE;IACL,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;CACd,GACA,MAAM,CASR;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAIjF"}