dsh-ssh-tui 0.5.3 → 0.5.4

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.
Files changed (46) hide show
  1. package/README.en.md +27 -6
  2. package/README.md +16 -8
  3. package/lib/approval-reviewer.js +56 -15
  4. package/lib/approval-reviewer.js.map +1 -1
  5. package/lib/auto-approval.js +251 -35
  6. package/lib/auto-approval.js.map +1 -1
  7. package/lib/footer.js +337 -0
  8. package/lib/footer.js.map +1 -0
  9. package/lib/i18n/en.js +48 -2
  10. package/lib/i18n/en.js.map +1 -1
  11. package/lib/i18n/zh.js +48 -2
  12. package/lib/i18n/zh.js.map +1 -1
  13. package/lib/json-args.js +30 -0
  14. package/lib/json-args.js.map +1 -0
  15. package/lib/paint.js +262 -0
  16. package/lib/paint.js.map +1 -0
  17. package/lib/picker.js +407 -56
  18. package/lib/picker.js.map +1 -1
  19. package/lib/plan.js +369 -0
  20. package/lib/plan.js.map +1 -0
  21. package/lib/quota.js +408 -0
  22. package/lib/quota.js.map +1 -0
  23. package/lib/session-list.js +18 -21
  24. package/lib/session-list.js.map +1 -1
  25. package/lib/term-text.js +827 -0
  26. package/lib/term-text.js.map +1 -0
  27. package/lib/tool-present.js +744 -0
  28. package/lib/tool-present.js.map +1 -0
  29. package/lib/transcript-types.js +6 -0
  30. package/lib/transcript-types.js.map +1 -0
  31. package/lib/tui.js +419 -3200
  32. package/lib/tui.js.map +1 -1
  33. package/lib/types/approval-reviewer.d.ts +8 -2
  34. package/lib/types/auto-approval.d.ts +28 -0
  35. package/lib/types/footer.d.ts +155 -0
  36. package/lib/types/json-args.d.ts +7 -0
  37. package/lib/types/paint.d.ts +78 -0
  38. package/lib/types/picker.d.ts +99 -7
  39. package/lib/types/plan.d.ts +80 -0
  40. package/lib/types/quota.d.ts +94 -0
  41. package/lib/types/session-list.d.ts +13 -0
  42. package/lib/types/term-text.d.ts +130 -0
  43. package/lib/types/tool-present.d.ts +165 -0
  44. package/lib/types/transcript-types.d.ts +152 -0
  45. package/lib/types/tui.d.ts +21 -721
  46. package/package.json +1 -1
package/lib/picker.js CHANGED
@@ -1,17 +1,312 @@
1
1
  /**
2
- * Startup history-session picker: a small raw-mode selector shown BEFORE the
3
- * main TUI mounts, so launching without an explicit session id lands on a
4
- * choice instead of a fresh main screen.
2
+ * Startup history-session picker: a raw-mode selector shown BEFORE the main
3
+ * TUI mounts, so launching without an explicit session id lands on a choice
4
+ * instead of a fresh main screen.
5
+ *
6
+ * The list itself is not capped. The visible page is always nine rows so
7
+ * digits 1-9 map onto every on-screen item. Arrow keys move a highlight,
8
+ * typing filters by title / id / cwd, and Enter confirms the focused row.
5
9
  */
6
10
  import { StringDecoder } from 'node:string_decoder';
7
11
  import { formatSessionTime, listResumableSessions } from './session-list.js';
8
- import { isEscapePrefix, truncateToWidth } from './tui.js';
12
+ import { composePaintOutput, isEscapePrefix, pickerWindowStart } from './paint.js';
13
+ import { truncateToWidth } from './term-text.js';
9
14
  import { t } from './i18n/index.js';
10
15
  /**
11
- * Show the picker and wait for one digit, Enter (new session), or a lone
12
- * Esc/Ctrl+C (cancel). Incomplete CSI/SS3 sequences are buffered briefly so
13
- * arrow keys are ignored instead of cancelling. Restores the terminal before
14
- * resolving; an AbortSignal cancels and restores as well.
16
+ * Visible rows in the sliding window. Locked to nine so every on-screen
17
+ * session has a 1-9 shortcut; remaining history is reached with ↑/↓ / filter.
18
+ */
19
+ export const SESSION_PICKER_WINDOW = 9;
20
+ /** Digit shortcuts into the current window when the filter is empty. */
21
+ export const PICKER_QUICK_KEYS = '123456789';
22
+ /** Haystack used by the filter: title, id, cwd, and a live pid when attached. */
23
+ export function sessionSearchHaystack(session) {
24
+ const parts = [session.label, session.id, session.cwd];
25
+ if (session.attach !== undefined) {
26
+ parts.push(String(session.attach.pid), 'pid');
27
+ }
28
+ return parts.join('\n').toLowerCase();
29
+ }
30
+ /** Whether one session matches a whitespace-separated query (every token). */
31
+ export function sessionMatchesQuery(session, query) {
32
+ const tokens = query.trim().toLowerCase().split(/\s+/u).filter(token => token !== '');
33
+ if (tokens.length === 0)
34
+ return true;
35
+ const haystack = sessionSearchHaystack(session);
36
+ return tokens.every(token => haystack.includes(token));
37
+ }
38
+ /** Sessions still visible under the current filter, in list order. */
39
+ export function filterResumableSessions(sessions, query) {
40
+ if (query.trim() === '')
41
+ return [...sessions];
42
+ return sessions.filter(session => sessionMatchesQuery(session, query));
43
+ }
44
+ /** Keep `cursor` inside `[0, total)`. Empty lists pin to 0. */
45
+ export function clampPickerCursor(cursor, total) {
46
+ if (total <= 0)
47
+ return 0;
48
+ return Math.max(0, Math.min(total - 1, cursor));
49
+ }
50
+ /**
51
+ * How many session rows to show. Prefer a full page of nine so 1-9 always
52
+ * map onto every on-screen item. Shrink only when the tty cannot fit that
53
+ * page (title + filter + nine items + hints).
54
+ */
55
+ export function pickerCapacity(rows) {
56
+ const chrome = 7;
57
+ const perItem = 2;
58
+ const available = Math.max(0, rows - chrome);
59
+ return Math.max(1, Math.min(SESSION_PICKER_WINDOW, Math.floor(available / perItem)));
60
+ }
61
+ /** Whether two picker states would paint the same frame. */
62
+ export function pickerStateUnchanged(previous, next) {
63
+ return previous.query === next.query
64
+ && previous.cursor === next.cursor
65
+ && previous.filterActive === next.filterActive
66
+ && previous.sessions === next.sessions;
67
+ }
68
+ function resultFor(session) {
69
+ return session.attach === undefined
70
+ ? { kind: 'resume', id: session.id }
71
+ : { kind: 'attach', id: session.id, sock: session.attach.sock };
72
+ }
73
+ function continueWith(state) {
74
+ return { kind: 'continue', state };
75
+ }
76
+ function dropLastCodePoint(text) {
77
+ const points = Array.from(text);
78
+ points.pop();
79
+ return points.join('');
80
+ }
81
+ function retainCursor(previousId, filtered, fallback) {
82
+ if (previousId !== undefined) {
83
+ const kept = filtered.findIndex(session => session.id === previousId);
84
+ if (kept >= 0)
85
+ return kept;
86
+ }
87
+ return clampPickerCursor(fallback, filtered.length);
88
+ }
89
+ /**
90
+ * Apply one picker action. Pure: the TTY layer maps keystrokes onto this, and
91
+ * tests drive it without stdin.
92
+ */
93
+ export function stepPicker(state, action, windowSize = SESSION_PICKER_WINDOW) {
94
+ const filtered = filterResumableSessions(state.sessions, state.query);
95
+ const focused = filtered[state.cursor];
96
+ switch (action.type) {
97
+ case 'move': {
98
+ const cursor = clampPickerCursor(state.cursor + action.delta, filtered.length);
99
+ if (cursor === state.cursor)
100
+ return continueWith(state);
101
+ return continueWith({ ...state, cursor });
102
+ }
103
+ case 'page': {
104
+ const cursor = clampPickerCursor(state.cursor + action.delta * Math.max(1, windowSize), filtered.length);
105
+ if (cursor === state.cursor)
106
+ return continueWith(state);
107
+ return continueWith({ ...state, cursor });
108
+ }
109
+ case 'home': {
110
+ if (state.cursor === 0)
111
+ return continueWith(state);
112
+ return continueWith({ ...state, cursor: 0 });
113
+ }
114
+ case 'end': {
115
+ const cursor = Math.max(0, filtered.length - 1);
116
+ if (cursor === state.cursor)
117
+ return continueWith(state);
118
+ return continueWith({ ...state, cursor });
119
+ }
120
+ case 'type': {
121
+ if (action.text === '')
122
+ return continueWith(state);
123
+ const query = `${state.query}${action.text}`;
124
+ const next = filterResumableSessions(state.sessions, query);
125
+ return continueWith({
126
+ ...state,
127
+ query,
128
+ filterActive: true,
129
+ cursor: retainCursor(focused?.id, next, 0),
130
+ });
131
+ }
132
+ case 'backspace': {
133
+ if (state.query === '' && !state.filterActive)
134
+ return continueWith(state);
135
+ if (state.query === '') {
136
+ return continueWith({ ...state, filterActive: false });
137
+ }
138
+ const query = dropLastCodePoint(state.query);
139
+ const next = filterResumableSessions(state.sessions, query);
140
+ return continueWith({
141
+ ...state,
142
+ query,
143
+ filterActive: query !== '',
144
+ cursor: retainCursor(focused?.id, next, state.cursor),
145
+ });
146
+ }
147
+ case 'clearQuery': {
148
+ if (state.query === '' && !state.filterActive)
149
+ return continueWith(state);
150
+ return continueWith({
151
+ ...state,
152
+ query: '',
153
+ filterActive: false,
154
+ cursor: retainCursor(focused?.id, state.sessions, state.cursor),
155
+ });
156
+ }
157
+ case 'startFilter':
158
+ if (state.filterActive)
159
+ return continueWith(state);
160
+ return continueWith({ ...state, filterActive: true });
161
+ case 'quick': {
162
+ if (state.filterActive || state.query !== '') {
163
+ return stepPicker(state, { type: 'type', text: action.key }, windowSize);
164
+ }
165
+ const index = PICKER_QUICK_KEYS.indexOf(action.key);
166
+ if (index < 0)
167
+ return continueWith(state);
168
+ const start = pickerWindowStart(state.cursor, filtered.length, windowSize);
169
+ const session = filtered[start + index];
170
+ if (session === undefined)
171
+ return continueWith(state);
172
+ return { kind: 'done', result: resultFor(session) };
173
+ }
174
+ case 'submit': {
175
+ const session = filtered[state.cursor];
176
+ if (session === undefined)
177
+ return continueWith(state);
178
+ return { kind: 'done', result: resultFor(session) };
179
+ }
180
+ case 'new':
181
+ return { kind: 'done', result: { kind: 'new' } };
182
+ case 'escape':
183
+ if (state.query !== '' || state.filterActive) {
184
+ return stepPicker(state, { type: 'clearQuery' }, windowSize);
185
+ }
186
+ return { kind: 'done', result: null };
187
+ case 'cancel':
188
+ return { kind: 'done', result: null };
189
+ }
190
+ }
191
+ /** Map one decoded stdin chunk (or a complete CSI sequence) to actions. */
192
+ export function actionsForInput(text, state = { query: '', filterActive: false }) {
193
+ if (text === '\x1b[A'
194
+ || text === '\x1bOA'
195
+ || text === '\x10') {
196
+ return [{ type: 'move', delta: -1 }];
197
+ }
198
+ if (text === '\x1b[B'
199
+ || text === '\x1bOB'
200
+ || text === '\x0e') {
201
+ return [{ type: 'move', delta: 1 }];
202
+ }
203
+ if (text === '\x1b[5~')
204
+ return [{ type: 'page', delta: -1 }];
205
+ if (text === '\x1b[6~')
206
+ return [{ type: 'page', delta: 1 }];
207
+ if (text === '\x1b[H' || text === '\x1b[1~')
208
+ return [{ type: 'home' }];
209
+ if (text === '\x1b[F' || text === '\x1b[4~')
210
+ return [{ type: 'end' }];
211
+ if (text === '\x1b' || text === '\x03')
212
+ return [{ type: text === '\x03' ? 'cancel' : 'escape' }];
213
+ if (text.startsWith('\x1b'))
214
+ return [];
215
+ const filtering = state.filterActive || state.query !== '';
216
+ const actions = [];
217
+ for (const char of text) {
218
+ if (char === '\x03') {
219
+ actions.push({ type: 'cancel' });
220
+ continue;
221
+ }
222
+ if (char === '\x1b') {
223
+ actions.push({ type: 'escape' });
224
+ continue;
225
+ }
226
+ if (char === '\r' || char === '\n') {
227
+ actions.push({ type: 'submit' });
228
+ continue;
229
+ }
230
+ if (char === '\x7f' || char === '\x08') {
231
+ actions.push({ type: 'backspace' });
232
+ continue;
233
+ }
234
+ if (char === '\x15' || char === '\x17') {
235
+ actions.push({ type: 'clearQuery' });
236
+ continue;
237
+ }
238
+ if (char === '\x10') {
239
+ actions.push({ type: 'move', delta: -1 });
240
+ continue;
241
+ }
242
+ if (char === '\x0e') {
243
+ actions.push({ type: 'move', delta: 1 });
244
+ continue;
245
+ }
246
+ if (char === '\x06') {
247
+ actions.push({ type: 'startFilter' });
248
+ continue;
249
+ }
250
+ if (char === '/' && !filtering) {
251
+ actions.push({ type: 'startFilter' });
252
+ continue;
253
+ }
254
+ if (char === '0' && !filtering) {
255
+ actions.push({ type: 'new' });
256
+ continue;
257
+ }
258
+ if (char >= '1' && char <= '9' && !filtering) {
259
+ actions.push({ type: 'quick', key: char });
260
+ continue;
261
+ }
262
+ if (char >= ' ' && char !== '\x7f') {
263
+ actions.push({ type: 'type', text: char });
264
+ }
265
+ }
266
+ return actions;
267
+ }
268
+ /** Split a decoded stdin chunk into CSI/SS3 sequences and individual characters. */
269
+ export function splitPickerInput(text) {
270
+ const units = [];
271
+ let index = 0;
272
+ while (index < text.length) {
273
+ if (text[index] !== '\x1b') {
274
+ units.push(text[index] ?? '');
275
+ index += 1;
276
+ continue;
277
+ }
278
+ const rest = text.slice(index);
279
+ const sequence = /^(?:\x1b\[[A-DHF]|\x1b\[[1-6]~|\x1bO[A-D]|\x1b)/u.exec(rest)?.[0];
280
+ if (sequence === undefined) {
281
+ units.push('\x1b');
282
+ index += 1;
283
+ continue;
284
+ }
285
+ units.push(sequence);
286
+ index += sequence.length;
287
+ }
288
+ return units;
289
+ }
290
+ /**
291
+ * Feed a decoded stdin chunk through the picker. CSI / SS3 sequences are one
292
+ * unit; ordinary text is applied character by character so a pasted "fix 2"
293
+ * types the digit instead of treating it as a 1-9 shortcut.
294
+ */
295
+ export function feedPicker(state, text, windowSize = SESSION_PICKER_WINDOW) {
296
+ let current = state;
297
+ for (const unit of splitPickerInput(text)) {
298
+ for (const action of actionsForInput(unit, current)) {
299
+ const step = stepPicker(current, action, windowSize);
300
+ if (step.kind === 'done')
301
+ return step;
302
+ current = step.state;
303
+ }
304
+ }
305
+ return continueWith(current);
306
+ }
307
+ /**
308
+ * Show the picker and wait for a selection, a new-session request, or cancel.
309
+ * Restores the terminal before resolving; an AbortSignal cancels as well.
15
310
  * @param ctx - boot context supplying sessionPersistence.
16
311
  * @param color - whether to apply ANSI colors.
17
312
  * @param signal - optional abort signal (fiber dispose) to cancel the picker.
@@ -20,14 +315,14 @@ import { t } from './i18n/index.js';
20
315
  export async function showSessionPicker(ctx, color, signal) {
21
316
  const persistence = ctx.get('sessionPersistence');
22
317
  if (persistence === undefined) {
23
- process.stderr.write('dsh-ssh-tui: sessionPersistence service is unavailable\n');
318
+ process.stderr.write(t('picker.noPersistence'));
24
319
  return { kind: 'new' };
25
320
  }
26
321
  const sessions = await listResumableSessions(persistence, '');
27
322
  if (signal?.aborted)
28
323
  return null;
29
324
  if (sessions.length === 0) {
30
- process.stdout.write('dsh-ssh-tui: no resumable history sessions; starting a fresh session.\n');
325
+ process.stdout.write(t('picker.none'));
31
326
  return { kind: 'new' };
32
327
  }
33
328
  const useAltScreen = process.env.DSH_TUI_NO_ALT_SCREEN !== '1'
@@ -37,35 +332,92 @@ export async function showSessionPicker(ctx, color, signal) {
37
332
  process.stdin.resume();
38
333
  process.stdout.write(`${useAltScreen ? '\x1b[?1049h' : ''}\x1b[?25l`);
39
334
  const style = (text, code) => color ? `\x1b[${code}m${text}\x1b[0m` : text;
40
- const render = () => {
41
- const width = Math.max(20, process.stdout.columns || 80);
335
+ let state = { sessions, query: '', cursor: 0, filterActive: false };
336
+ let previousRows = [];
337
+ let previousWidth = 0;
338
+ let previousHeight = 0;
339
+ const paintLines = (width, height) => {
340
+ const windowSize = pickerCapacity(height);
341
+ const filtered = filterResumableSessions(state.sessions, state.query);
342
+ const start = pickerWindowStart(state.cursor, filtered.length, windowSize);
343
+ const end = Math.min(filtered.length, start + windowSize);
42
344
  const lines = [
43
345
  style(truncateToWidth(t('picker.title'), width), '1'),
44
346
  '─'.repeat(width),
45
347
  ];
46
- sessions.forEach((session, index) => {
47
- lines.push(style(truncateToWidth(`${index + 1} ${session.label}`, width), '1'));
48
- const attachNote = session.attach === undefined
49
- ? ''
50
- : t('picker.attachable', {
51
- pid: session.attach.pid,
52
- status: session.attach.state === 'running-detached'
53
- ? t('picker.attachRunning')
54
- : t('picker.attachPaused'),
55
- });
56
- const meta = `${session.unreadable === true ? t('resume.unreadable') : ''}${formatSessionTime(session.updatedAt)} · ${session.cwd}`;
57
- if (attachNote !== '') {
58
- lines.push(` ${style(truncateToWidth(attachNote, Math.max(1, width - 3)), '32')}`);
348
+ const filtering = state.filterActive || state.query !== '';
349
+ const filterLine = !filtering
350
+ ? t('picker.filterHint')
351
+ : t('picker.filter', { query: state.query === '' ? '' : `${state.query}▌` });
352
+ lines.push(style(truncateToWidth(filterLine, width), filtering ? '36' : '90'));
353
+ lines.push(style(truncateToWidth(t('picker.count', {
354
+ shown: filtered.length,
355
+ total: state.sessions.length,
356
+ }), width), '90'));
357
+ if (filtered.length === 0) {
358
+ lines.push(style(truncateToWidth(t('picker.noMatch', { query: state.query }), width), '33'));
359
+ }
360
+ else {
361
+ if (start > 0) {
362
+ lines.push(style(truncateToWidth(t('picker.moreAbove', { count: start }), width), '90'));
363
+ }
364
+ for (let index = start; index < end; index += 1) {
365
+ const session = filtered[index];
366
+ if (session === undefined)
367
+ continue;
368
+ const quick = PICKER_QUICK_KEYS[index - start];
369
+ const focused = index === state.cursor;
370
+ const marker = focused ? '›' : ' ';
371
+ const key = quick ?? ' ';
372
+ const label = `${marker}${key} ${session.label}`;
373
+ lines.push(style(truncateToWidth(label, width), focused ? '1;7' : '1'));
374
+ const attachNote = session.attach === undefined
375
+ ? ''
376
+ : t('picker.attachable', {
377
+ pid: session.attach.pid,
378
+ status: session.attach.state === 'running-detached'
379
+ ? t('picker.attachRunning')
380
+ : t('picker.attachPaused'),
381
+ });
382
+ const meta = `${session.unreadable === true ? t('resume.unreadable') : ''}${formatSessionTime(session.updatedAt)} · ${session.cwd}`;
383
+ if (attachNote !== '') {
384
+ lines.push(` ${style(truncateToWidth(attachNote, Math.max(1, width - 3)), '32')}`);
385
+ }
386
+ lines.push(` ${style(truncateToWidth(meta, Math.max(1, width - 3)), '90')}`);
387
+ }
388
+ if (end < filtered.length) {
389
+ lines.push(style(truncateToWidth(t('picker.moreBelow', { count: filtered.length - end }), width), '90'));
59
390
  }
60
- lines.push(` ${style(truncateToWidth(meta, Math.max(1, width - 3)), '90')}`);
61
- });
62
- lines.push('');
63
- lines.push(`${style('0', '36')} / ${style('Enter', '36')} ${t('picker.new')}`);
64
- lines.push(`${style('Esc', '36')} ${t('picker.cancel')}`);
65
- process.stdout.write('\x1b[2J\x1b[H');
66
- for (const line of lines) {
67
- process.stdout.write(`${line}\x1b[0m\x1b[K\n`);
68
391
  }
392
+ lines.push('');
393
+ lines.push(style(truncateToWidth(filtering ? t('picker.hintFilter') : t('picker.hint'), width), '36'));
394
+ lines.push(filtering
395
+ ? `${style('Esc', '36')} ${t('picker.cancel')}`
396
+ : `${style('0', '36')} ${t('picker.new')} · ${style('Esc', '36')} ${t('picker.cancel')}`);
397
+ return lines;
398
+ };
399
+ const render = (force = false) => {
400
+ const width = Math.max(20, process.stdout.columns || 80);
401
+ const height = Math.max(12, process.stdout.rows || 24);
402
+ const paintRows = paintLines(width, height);
403
+ const sizeChanged = force || width !== previousWidth || height !== previousHeight;
404
+ const frame = composePaintOutput({
405
+ width,
406
+ height,
407
+ paintRows,
408
+ previousRows,
409
+ sizeChanged,
410
+ chromeChanged: false,
411
+ chromeStart: paintRows.length,
412
+ cursorRow: 1,
413
+ cursorColumn: 1,
414
+ hideCursor: true,
415
+ });
416
+ if (frame !== '')
417
+ process.stdout.write(frame);
418
+ previousRows = paintRows;
419
+ previousWidth = width;
420
+ previousHeight = height;
69
421
  };
70
422
  return new Promise((resolve) => {
71
423
  let done = false;
@@ -79,6 +431,7 @@ export async function showSessionPicker(ctx, color, signal) {
79
431
  clearTimeout(escapeTimer);
80
432
  signal?.removeEventListener('abort', onAbort);
81
433
  process.stdin.removeListener('data', onData);
434
+ process.stdout.removeListener('resize', render);
82
435
  try {
83
436
  process.stdin.setRawMode(false);
84
437
  }
@@ -92,6 +445,22 @@ export async function showSessionPicker(ctx, color, signal) {
92
445
  const onAbort = () => {
93
446
  cleanup(null);
94
447
  };
448
+ const applyChunk = (text) => {
449
+ const windowSize = pickerCapacity(Math.max(12, process.stdout.rows || 24));
450
+ const previous = state;
451
+ const step = feedPicker(state, text, windowSize);
452
+ if (step.kind === 'done') {
453
+ cleanup(step.result);
454
+ return;
455
+ }
456
+ state = step.state;
457
+ if (done)
458
+ return;
459
+ // Held ↑/↓ at the ends used to ED2-clear the whole screen every repeat.
460
+ if (pickerStateUnchanged(previous, state))
461
+ return;
462
+ render();
463
+ };
95
464
  const onData = (chunk) => {
96
465
  const combined = escapeBuffer + decoder.write(chunk);
97
466
  escapeBuffer = '';
@@ -99,10 +468,10 @@ export async function showSessionPicker(ctx, color, signal) {
99
468
  clearTimeout(escapeTimer);
100
469
  escapeTimer = undefined;
101
470
  }
102
- // Ignore complete navigation / function-key sequences.
103
471
  if (/^\x1b\[[A-DHF]$/u.test(combined)
104
472
  || /^\x1b\[[1-6]~$/u.test(combined)
105
473
  || /^\x1bO[A-D]$/u.test(combined)) {
474
+ applyChunk(combined);
106
475
  return;
107
476
  }
108
477
  if (isEscapePrefix(combined)) {
@@ -111,8 +480,7 @@ export async function showSessionPicker(ctx, color, signal) {
111
480
  escapeTimer = undefined;
112
481
  const pending = escapeBuffer;
113
482
  escapeBuffer = '';
114
- if (pending === '\x1b')
115
- cleanup(null);
483
+ applyChunk(pending);
116
484
  }, 60);
117
485
  return;
118
486
  }
@@ -120,25 +488,7 @@ export async function showSessionPicker(ctx, color, signal) {
120
488
  // Unknown / complete escape sequence — ignore rather than cancel.
121
489
  return;
122
490
  }
123
- for (const char of combined) {
124
- if (char === '\x03') {
125
- cleanup(null);
126
- return;
127
- }
128
- if (char === '\r' || char === '\n' || char === '0') {
129
- cleanup({ kind: 'new' });
130
- return;
131
- }
132
- if (char >= '1' && char <= '9') {
133
- const session = sessions[Number(char) - 1];
134
- if (session !== undefined) {
135
- cleanup(session.attach === undefined
136
- ? { kind: 'resume', id: session.id }
137
- : { kind: 'attach', id: session.id, sock: session.attach.sock });
138
- return;
139
- }
140
- }
141
- }
491
+ applyChunk(combined);
142
492
  };
143
493
  if (signal?.aborted) {
144
494
  cleanup(null);
@@ -146,7 +496,8 @@ export async function showSessionPicker(ctx, color, signal) {
146
496
  }
147
497
  signal?.addEventListener('abort', onAbort, { once: true });
148
498
  process.stdin.on('data', onData);
149
- render();
499
+ process.stdout.on('resize', () => { render(true); });
500
+ render(true);
150
501
  });
151
502
  }
152
503
  //# sourceMappingURL=picker.js.map
package/lib/picker.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"picker.js","sourceRoot":"","sources":["../src/picker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"picker.js","sourceRoot":"","sources":["../src/picker.ts"],"names":[],"mappings":"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"}