@patze/code-cli 0.43.0 → 0.43.1

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 CHANGED
@@ -4,6 +4,13 @@ All notable changes to `@patze/code-cli` are documented here.
4
4
 
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
+ ## [0.43.1] - 2026-05-30
8
+
9
+ ### Fixed (model picker TTY)
10
+
11
+ - **`/model` arrow navigation** — removed duplicate keypress listeners and double `emitKeypressEvents` that caused erratic ↑/↓; picker now reuses the shared `runTTYArrowSelector` loop with proper cleanup.
12
+ - **Frame redraw** — counts wrapped terminal rows so highlight moves cleanly without ghost lines (Codex-style list).
13
+
7
14
  ## [0.43.0] - 2026-05-30
8
15
 
9
16
  ### Changed (model picker UX — Codex parity)
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.43.0
1
+ 0.43.1
@@ -86,7 +86,7 @@ export function formatCodexSelectionPanel(input) {
86
86
  const left = `${marker} ${numbered}`;
87
87
  const leftPadded = padPlain(left, nameWidth);
88
88
  const row = `${leftPadded} ${item.description}`;
89
- lines.push(styleRow(truncatePlain(row, width), index === safeIndex, color));
89
+ lines.push(styleRow(row, index === safeIndex, color));
90
90
  });
91
91
  }
92
92
  lines.push("");
@@ -134,7 +134,7 @@ function clampIndex(index, length) {
134
134
  }
135
135
  function styleRow(text, selected, color) {
136
136
  if (!color) {
137
- return selected ? `› ${text.replace(/^›\s?/, "")}` : text;
137
+ return text;
138
138
  }
139
139
  if (selected) {
140
140
  return `${BOLD}${CYAN}${text}${RESET}`;
@@ -1 +1 @@
1
- {"version":3,"file":"model-picker-panel.js","sourceRoot":"","sources":["../../../src/cli/interactive/model-picker-panel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-picker-panel.js","sourceRoot":"","sources":["../../../src/cli/interactive/model-picker-panel.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-tty-picker.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/model-tty-picker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAO1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAStD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAoBpE,MAAM,MAAM,qBAAqB,GAAG;IAClC,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,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAC;IAAC,cAAc,EAAE,mBAAmB,GAAG,IAAI,CAAA;CAAE,GAC/F;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAA;AAExB,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAmC/B;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,sBAAsB,EAC7B,cAAc,EAAE,mBAAmB,GAAG,IAAI,GACzC,MAAM,CAER"}
1
+ {"version":3,"file":"model-tty-picker.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/model-tty-picker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAM1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAQtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAWpE,MAAM,MAAM,qBAAqB,GAAG;IAClC,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,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAC;IAAC,cAAc,EAAE,mBAAmB,GAAG,IAAI,CAAA;CAAE,GAC/F;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAA;AAExB,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAyC/B;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,sBAAsB,EAC7B,cAAc,EAAE,mBAAmB,GAAG,IAAI,GACzC,MAAM,CAER"}
@@ -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":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGlD,OAAO,EAEL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,mBAAmB,EACnB,kCAAkC,GACnC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,uBAAuB,CAAA;AAE9B,MAAM,WAAW,GAAG,WAAW,CAAA;AAC/B,MAAM,WAAW,GAAG,WAAW,CAAA;AAmB/B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA2B,EAC3B,SAAiB,EACjB,UAAiC,EAAE;IAEnC,IAAI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAChC,OAAO,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IACxE,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAA;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAA;IAC/C,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;IAElC,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC;QAC3C,KAAK;QACL,MAAM;QACN,SAAS,EAAE,mBAAmB,CAAC,MAAM;QACrC,YAAY,EAAE,oBAAoB,CAAC,mBAAmB,EAAE,SAAS,CAAC;QAClE,MAAM,EAAE,CAAC,aAAa,EAAE,EAAE,CACxB,sBAAsB,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACpE,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAA;IAEF,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC7B,CAAC;IAED,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC7B,CAAC;IAED,OAAO,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAC1F,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAA6B,EAC7B,cAA0C;IAE1C,OAAO,2BAA2B,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;AAC3D,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAA2B,EAC3B,SAAiB,EACjB,WAA8B;IAE9B,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,KAAK,IAA4B,EAAE,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA;IAExF,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC;QAC3C,SAAS,EAAE,mBAAmB,CAAC,MAAM;QACrC,YAAY,EAAE,oBAAoB,CAAC,mBAAmB,EAAE,SAAS,CAAC;QAClE,MAAM,EAAE,CAAC,aAAa,EAAE,EAAE,CACxB,sBAAsB,CAAC;YACrB,SAAS;YACT,aAAa;YACb,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,KAAK;SACb,CAAC;QACJ,OAAO;KACR,CAAC,CAAA;IAEF,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC7B,CAAC;IAED,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC7B,CAAC;IAED,OAAO,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;AACxD,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAA2B,EAC3B,KAA6B,EAC7B,OAAqC,EACrC,KAAyB,EACzB,MAA2B,EAC3B,KAAK,GAAG,EAAE,EACV,KAAK,GAAG,KAAK;IAEb,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5C,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QACzC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;IAC1D,CAAC;IAED,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC/D,MAAM,YAAY,GAChB,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE;QAClC,CAAC,CAAC,IAAI,CAAA;IAEV,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;QAC/C,KAAK;QACL,MAAM;QACN,SAAS,EAAE,gBAAgB,CAAC,MAAM;QAClC,YAAY,EAAE,sBAAsB,CAClC,gBAAgB,EAChB,YAAY,EACZ,KAAK,CAAC,EAAE,CACT;QACD,MAAM,EAAE,CAAC,aAAa,EAAE,EAAE,CACxB,0BAA0B,CAAC;YACzB,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,YAAY;YACZ,aAAa;YACb,KAAK;YACL,KAAK;SACN,CAAC;QACJ,OAAO;KACR,CAAC,CAAA;IAEF,IAAI,eAAe,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC7B,CAAC;IAED,MAAM,cAAc,GAAG,kCAAkC,CACvD,KAAK,EACL,eAAe,CAAC,aAAa,CAC9B,CAAA;IACD,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAA;IACnD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;AACpD,CAAC;AAMD,KAAK,UAAU,kBAAkB,CAAC,KAOjC;IACC,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC7B,CAAC;IAED,IAAI,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAA;IAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAA;IAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,CAAC,CAAA;IAEhE,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5C,OAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QACzC,IAAI,GAAG,GAAG,WAAW,CAAA;QACrB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,GAAG,IAAI,QAAQ,SAAS,WAAW,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,UAAU,CAAA;QACnB,CAAC;QACD,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,GAAG,IAAI,WAAW,CAAA;QAClB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,SAAS,GAAG,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAS,EAAE;QAC5B,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACjD,OAAM;QACR,CAAC;QACD,SAAS,CAAC,KAAK,CAAC,QAAQ,SAAS,YAAY,WAAW,IAAI,CAAC,CAAA;QAC7D,SAAS,GAAG,CAAC,CAAA;IACf,CAAC,CAAA;IAED,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;QAC5B,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC5B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACzB,QAAQ,CAAC,MAAM,EAAE,CAAA;QACjB,QAAQ,GAAG,IAAI,CAAA;QACf,MAAM,EAAE,CAAA;IACV,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAA;YACpC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;YAC7B,CAAC;YACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;gBACjE,MAAM,EAAE,CAAA;gBACR,SAAQ;YACV,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;gBAChE,MAAM,EAAE,CAAA;gBACR,SAAQ;YACV,CAAC;YACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAA;YAC5C,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBACtD,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;oBACxC,aAAa,GAAG,IAAI,CAAA;oBACpB,MAAM,EAAE,CAAA;gBACV,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,QAAQ,IAAI,QAAQ,EAAE,KAAK,EAAE,CAAC;YAChC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YAC1B,QAAQ,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC;QACD,UAAU,EAAE,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAwB;IAG1D,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,KAAK,GAAyB,EAAE,CAAA;IACtC,IAAI,OAAO,GAA4C,IAAI,CAAA;IAE3D,MAAM,UAAU,GAAG,CAAC,GAAuB,EAAE,GAA4B,EAAQ,EAAE;QACjF,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,OAAO,CAAA;YACvB,OAAO,GAAG,IAAI,CAAA;YACd,OAAO,CAAC,MAAM,CAAC,CAAA;YACf,OAAM;QACR,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpB,CAAC,CAAA;IAED,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IAEhC,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CACZ,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;YAC1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,CAAA;gBACb,OAAM;YACR,CAAC;YACD,OAAO,GAAG,OAAO,CAAA;QACnB,CAAC,CAAC;KACL,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAuB,EAAE,GAA4B;IAC9E,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,EAAE,CAAA;IAC5B,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,MAAM,CAAA;IACf,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACnC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,MAAc;IAC/C,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,CAAA;IACV,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"model-tty-picker.js","sourceRoot":"","sources":["../../../src/cli/interactive/model-tty-picker.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":"AAOA,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,CAuFjC;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 { clearTtyFrame, redrawTtyFrame, } 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,14 @@ export async function runTTYArrowSelector(options) {
22
27
  const wasRaw = input.isRaw ?? false;
23
28
  input.setRawMode(true);
24
29
  input.resume();
30
+ const width = output.columns && output.columns > 0 ? output.columns : 80;
25
31
  let frameRows = 0;
26
32
  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
- }
33
+ frameRows = redrawTtyFrame(output, {
34
+ previousRows: frameRows,
35
+ lines: options.render(selectedIndex),
36
+ width,
37
+ });
45
38
  };
46
39
  return new Promise((resolve) => {
47
40
  const finish = (result) => {
@@ -50,10 +43,18 @@ export async function runTTYArrowSelector(options) {
50
43
  input.setRawMode(wasRaw);
51
44
  }
52
45
  input.pause();
53
- clearFrame();
46
+ clearTtyFrame(output, frameRows);
54
47
  resolve(result);
55
48
  };
56
49
  const onKeypress = (str, key) => {
50
+ if (options.digitJump && str && /^[1-9]$/.test(str)) {
51
+ const jump = Number(str) - 1;
52
+ if (jump < itemCount) {
53
+ selectedIndex = jump;
54
+ redraw();
55
+ }
56
+ return;
57
+ }
57
58
  const mapped = mapKeypressToSelectorKey(str, key ?? {});
58
59
  if (!mapped) {
59
60
  return;
@@ -80,25 +81,31 @@ export async function runTTYArrowSelector(options) {
80
81
  redraw();
81
82
  });
82
83
  }
83
- async function runScriptedArrowSelector(options, selectedIndex) {
84
- const readChunk = createKeyReaderFromSequence(options.keySequence ?? []);
85
- const itemCount = options.itemCount;
84
+ /** Shared arrow/digit/enter loop for scripted selectors and multi-step pickers. */
85
+ export async function runArrowSelectorLoop(input) {
86
+ let selectedIndex = clampIndex(input.selectedIndex, input.itemCount);
86
87
  while (true) {
87
- const key = await readPermissionSelectorKey(readChunk);
88
+ const key = await input.readKey();
88
89
  if (!key || key === "escape" || key === "cancel") {
89
90
  return { action: "cancel" };
90
91
  }
91
92
  if (key === "up") {
92
- selectedIndex = moveSelection(selectedIndex, -1, itemCount);
93
+ selectedIndex = moveSelection(selectedIndex, -1, input.itemCount);
93
94
  continue;
94
95
  }
95
96
  if (key === "down") {
96
- selectedIndex = moveSelection(selectedIndex, 1, itemCount);
97
+ selectedIndex = moveSelection(selectedIndex, 1, input.itemCount);
97
98
  continue;
98
99
  }
99
100
  if (key === "enter") {
100
101
  return { action: "select", selectedIndex };
101
102
  }
103
+ if (input.digitJump && /^[1-9]$/.test(key)) {
104
+ const jump = Number(key) - 1;
105
+ if (jump < input.itemCount) {
106
+ selectedIndex = jump;
107
+ }
108
+ }
102
109
  }
103
110
  }
104
111
  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,11 @@
1
+ export declare const SHOW_CURSOR = "\u001B[?25h";
2
+ export declare function stripAnsi(text: string): string;
3
+ /** Terminal row count after soft-wrapping long logical lines. */
4
+ export declare function countVisualRows(lines: readonly string[], width: number): number;
5
+ export declare function redrawTtyFrame(output: NodeJS.WriteStream, input: {
6
+ previousRows: number;
7
+ lines: readonly string[];
8
+ width: number;
9
+ }): number;
10
+ export declare function clearTtyFrame(output: NodeJS.WriteStream, frameRows: number): void;
11
+ //# 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;AAEtC,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,CAS/E;AAED,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,CAYR;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAIjF"}
@@ -0,0 +1,36 @@
1
+ const HIDE_CURSOR = "\x1b[?25l";
2
+ export const SHOW_CURSOR = "\x1b[?25h";
3
+ export function stripAnsi(text) {
4
+ return text.replace(/\x1b\[[0-9;]*m/g, "");
5
+ }
6
+ /** Terminal row count after soft-wrapping long logical lines. */
7
+ export function countVisualRows(lines, width) {
8
+ const cols = Math.max(1, width);
9
+ let total = 0;
10
+ for (const line of lines) {
11
+ const plain = stripAnsi(line);
12
+ const length = [...plain].length;
13
+ total += Math.max(1, Math.ceil(length / cols));
14
+ }
15
+ return total;
16
+ }
17
+ export function redrawTtyFrame(output, input) {
18
+ const visualRows = countVisualRows(input.lines, input.width);
19
+ let out = HIDE_CURSOR;
20
+ if (input.previousRows > 0) {
21
+ out += `\x1b[${input.previousRows}A\r\x1b[J`;
22
+ }
23
+ else {
24
+ out += "\r\x1b[J";
25
+ }
26
+ out += input.lines.join("\n");
27
+ out += SHOW_CURSOR;
28
+ output.write(out);
29
+ return visualRows;
30
+ }
31
+ export function clearTtyFrame(output, frameRows) {
32
+ if (frameRows > 0) {
33
+ output.write(`\x1b[${frameRows}A\r\x1b[J${SHOW_CURSOR}\n`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=tty-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tty-frame.js","sourceRoot":"","sources":["../../../src/cli/interactive/tty-frame.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,WAAW,CAAA;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAA;AAEtC,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AAC5C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,KAAwB,EAAE,KAAa;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC7B,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;QAChC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAA0B,EAC1B,KAIC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5D,IAAI,GAAG,GAAG,WAAW,CAAA;IACrB,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,IAAI,QAAQ,KAAK,CAAC,YAAY,WAAW,CAAA;IAC9C,CAAC;SAAM,CAAC;QACN,GAAG,IAAI,UAAU,CAAA;IACnB,CAAC;IACD,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,GAAG,IAAI,WAAW,CAAA;IAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjB,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA0B,EAAE,SAAiB;IACzE,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,QAAQ,SAAS,YAAY,WAAW,IAAI,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patze/code-cli",
3
- "version": "0.43.0",
3
+ "version": "0.43.1",
4
4
  "description": "Patze Code — local terminal coding agent client for PatzeAgents",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",