erosolar-cli 1.7.377 → 1.7.379
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/dist/contracts/agent-schemas.json +6 -1
- package/dist/core/alphaZeroModular.d.ts +186 -0
- package/dist/core/alphaZeroModular.d.ts.map +1 -0
- package/dist/core/alphaZeroModular.js +755 -0
- package/dist/core/alphaZeroModular.js.map +1 -0
- package/dist/core/intelligentTestFlows.d.ts +126 -0
- package/dist/core/intelligentTestFlows.d.ts.map +1 -0
- package/dist/core/intelligentTestFlows.js +678 -0
- package/dist/core/intelligentTestFlows.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +22 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +391 -1
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/keyboardShortcuts.d.ts +5 -5
- package/dist/shell/keyboardShortcuts.js +14 -14
- package/dist/shell/keyboardShortcuts.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +50 -0
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +215 -8
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/terminalInputAdapter.d.ts +7 -1
- package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
- package/dist/shell/terminalInputAdapter.js +7 -0
- package/dist/shell/terminalInputAdapter.js.map +1 -1
- package/dist/ui/shortcutsHelp.js +9 -9
- package/dist/ui/shortcutsHelp.js.map +1 -1
- package/dist/ui/unified/layout.d.ts.map +1 -1
- package/dist/ui/unified/layout.js +9 -9
- package/dist/ui/unified/layout.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
* - Shift+Tab: Cycle edit modes (auto -> ask -> plan)
|
|
14
14
|
* - Tab: Toggle thinking modes (standard -> extended -> ultrathinking)
|
|
15
15
|
* - PageUp/PageDown: Scroll through output
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
-
* -
|
|
20
|
-
* -
|
|
16
|
+
* - Ctrl+Shift+V: Toggle verification
|
|
17
|
+
* - Ctrl+Shift+C: Toggle auto-continue
|
|
18
|
+
* - Ctrl+Shift+T: Toggle thinking mode
|
|
19
|
+
* - Ctrl+Shift+E: Toggle edit permission mode
|
|
20
|
+
* - Ctrl+Shift+X: Clear/compact context
|
|
21
21
|
*/
|
|
22
22
|
export interface KeyboardShortcut {
|
|
23
23
|
key: string;
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
* - Shift+Tab: Cycle edit modes (auto -> ask -> plan)
|
|
14
14
|
* - Tab: Toggle thinking modes (standard -> extended -> ultrathinking)
|
|
15
15
|
* - PageUp/PageDown: Scroll through output
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
-
* -
|
|
20
|
-
* -
|
|
16
|
+
* - Ctrl+Shift+V: Toggle verification
|
|
17
|
+
* - Ctrl+Shift+C: Toggle auto-continue
|
|
18
|
+
* - Ctrl+Shift+T: Toggle thinking mode
|
|
19
|
+
* - Ctrl+Shift+E: Toggle edit permission mode
|
|
20
|
+
* - Ctrl+Shift+X: Clear/compact context
|
|
21
21
|
*/
|
|
22
22
|
/**
|
|
23
23
|
* All registered keyboard shortcuts
|
|
@@ -39,12 +39,12 @@ export const KEYBOARD_SHORTCUTS = [
|
|
|
39
39
|
{ key: 'PageDown', modifiers: [], action: 'scroll-down', description: 'Scroll down', category: 'navigation' },
|
|
40
40
|
{ key: 'Home', modifiers: ['ctrl'], action: 'scroll-top', description: 'Scroll to top', category: 'navigation' },
|
|
41
41
|
{ key: 'End', modifiers: ['ctrl'], action: 'scroll-bottom', description: 'Scroll to bottom', category: 'navigation' },
|
|
42
|
-
// Mode toggles (
|
|
43
|
-
{ key: 'v', modifiers: ['
|
|
44
|
-
{ key: 'c', modifiers: ['
|
|
45
|
-
{ key: 't', modifiers: ['
|
|
46
|
-
{ key: 'e', modifiers: ['
|
|
47
|
-
{ key: 'x', modifiers: ['
|
|
42
|
+
// Mode toggles (Ctrl+Shift key)
|
|
43
|
+
{ key: 'v', modifiers: ['ctrl', 'shift'], action: 'toggle-verify', description: 'Toggle verification mode', category: 'mode' },
|
|
44
|
+
{ key: 'c', modifiers: ['ctrl', 'shift'], action: 'toggle-auto-continue', description: 'Toggle auto-continue', category: 'mode' },
|
|
45
|
+
{ key: 't', modifiers: ['ctrl', 'shift'], action: 'toggle-thinking', description: 'Toggle thinking mode', category: 'mode' },
|
|
46
|
+
{ key: 'e', modifiers: ['ctrl', 'shift'], action: 'toggle-edit-mode', description: 'Toggle edit permission', category: 'mode' },
|
|
47
|
+
{ key: 'x', modifiers: ['ctrl', 'shift'], action: 'compact-context', description: 'Compact context', category: 'session' },
|
|
48
48
|
// Editing
|
|
49
49
|
{ key: 'Return', modifiers: ['shift'], action: 'newline', description: 'Insert newline', category: 'editing' },
|
|
50
50
|
{ key: 'Return', modifiers: ['alt'], action: 'newline', description: 'Insert newline', category: 'editing' },
|
|
@@ -132,13 +132,13 @@ export function formatShortcutsHelp() {
|
|
|
132
132
|
for (const s of shortcuts) {
|
|
133
133
|
const mods = s.modifiers.map(m => {
|
|
134
134
|
switch (m) {
|
|
135
|
-
case 'ctrl': return '
|
|
135
|
+
case 'ctrl': return '^';
|
|
136
136
|
case 'alt': return '⌥';
|
|
137
137
|
case 'shift': return '⇧';
|
|
138
138
|
case 'meta': return '⌘';
|
|
139
139
|
default: return m;
|
|
140
140
|
}
|
|
141
|
-
}).join('
|
|
141
|
+
}).join('');
|
|
142
142
|
const keyStr = mods ? `${mods}+${s.key}` : s.key;
|
|
143
143
|
const padding = ' '.repeat(Math.max(1, 18 - keyStr.length));
|
|
144
144
|
lines.push(` ${keyStr}${padding}${s.description}`);
|
|
@@ -151,7 +151,7 @@ export function formatShortcutsHelp() {
|
|
|
151
151
|
* Format compact shortcuts for status bar
|
|
152
152
|
*/
|
|
153
153
|
export function formatCompactShortcuts() {
|
|
154
|
-
return '? help · Esc stop · ⇧Tab mode ·
|
|
154
|
+
return '? help · Esc stop · ⇧Tab mode · ^⇧V verify · ^⇧C auto · PgUp/Dn scroll';
|
|
155
155
|
}
|
|
156
156
|
/**
|
|
157
157
|
* Get action description for display
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardShortcuts.js","sourceRoot":"","sources":["../../src/shell/keyboardShortcuts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAeH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAuB;IACpD,kBAAkB;IAClB,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE,QAAQ,EAAE,SAAS,EAAE;IACjH,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE;IACnG,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC9G,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAE1H,eAAe;IACf,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,kCAAkC,EAAE,QAAQ,EAAE,MAAM,EAAE;IAClI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,EAAE;IAE9G,SAAS;IACT,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE,QAAQ,EAAE,SAAS,EAAE;IACpH,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,4BAA4B,EAAE,QAAQ,EAAE,SAAS,EAAE;IAE7H,aAAa;IACb,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE;IACvG,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC7G,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE;IAChH,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAErH,gCAAgC;IAChC,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"keyboardShortcuts.js","sourceRoot":"","sources":["../../src/shell/keyboardShortcuts.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,14 @@ export interface TerminalInputConfig {
|
|
|
52
52
|
promptChar?: string;
|
|
53
53
|
continuationChar?: string;
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Command suggestion for autocomplete
|
|
57
|
+
*/
|
|
58
|
+
export interface CommandSuggestion {
|
|
59
|
+
command: string;
|
|
60
|
+
description: string;
|
|
61
|
+
category?: string;
|
|
62
|
+
}
|
|
55
63
|
/**
|
|
56
64
|
* Unified terminal input handler
|
|
57
65
|
*/
|
|
@@ -107,6 +115,10 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
107
115
|
private lastStreamingRender;
|
|
108
116
|
private streamingRenderInterval;
|
|
109
117
|
private streamingRenderTimer;
|
|
118
|
+
private commandSuggestions;
|
|
119
|
+
private showingSuggestions;
|
|
120
|
+
private selectedSuggestionIndex;
|
|
121
|
+
private maxVisibleSuggestions;
|
|
110
122
|
constructor(writeStream?: NodeJS.WriteStream, config?: TerminalInputConfig);
|
|
111
123
|
/**
|
|
112
124
|
* Enable bracketed paste mode in terminal
|
|
@@ -183,6 +195,43 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
183
195
|
* Clear the queue
|
|
184
196
|
*/
|
|
185
197
|
clearQueue(): void;
|
|
198
|
+
/**
|
|
199
|
+
* Set available commands for autocomplete.
|
|
200
|
+
* Call this once during initialization with all slash commands.
|
|
201
|
+
*/
|
|
202
|
+
setAvailableCommands(commands: CommandSuggestion[]): void;
|
|
203
|
+
/**
|
|
204
|
+
* Check if command suggestions are currently being shown
|
|
205
|
+
*/
|
|
206
|
+
isShowingSuggestions(): boolean;
|
|
207
|
+
/**
|
|
208
|
+
* Get filtered commands based on current input
|
|
209
|
+
*/
|
|
210
|
+
private getFilteredCommands;
|
|
211
|
+
/**
|
|
212
|
+
* Update suggestion visibility based on current buffer
|
|
213
|
+
*/
|
|
214
|
+
private updateSuggestionVisibility;
|
|
215
|
+
/**
|
|
216
|
+
* Handle selecting a suggestion (Enter key or click)
|
|
217
|
+
*/
|
|
218
|
+
private selectSuggestion;
|
|
219
|
+
/**
|
|
220
|
+
* Move selection up in suggestions list
|
|
221
|
+
*/
|
|
222
|
+
private moveSuggestionUp;
|
|
223
|
+
/**
|
|
224
|
+
* Move selection down in suggestions list
|
|
225
|
+
*/
|
|
226
|
+
private moveSuggestionDown;
|
|
227
|
+
/**
|
|
228
|
+
* Cancel suggestion display (Escape)
|
|
229
|
+
*/
|
|
230
|
+
private cancelSuggestions;
|
|
231
|
+
/**
|
|
232
|
+
* Build command suggestion display lines
|
|
233
|
+
*/
|
|
234
|
+
private buildSuggestionLines;
|
|
186
235
|
/**
|
|
187
236
|
* Update the inline status message shown before the prompt (e.g., streaming heartbeat).
|
|
188
237
|
*/
|
|
@@ -325,6 +374,7 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
325
374
|
* - Meta lines (model, elapsed, tokens)
|
|
326
375
|
* - Divider
|
|
327
376
|
* - Input line(s) - expands for multi-line/wrapped input
|
|
377
|
+
* - Command suggestions (when showing)
|
|
328
378
|
* - Control lines (wraps as needed to fit all toggles)
|
|
329
379
|
* - Buffer
|
|
330
380
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminalInput.d.ts","sourceRoot":"","sources":["../../src/shell/terminalInput.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"terminalInput.d.ts","sourceRoot":"","sources":["../../src/shell/terminalInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -127,6 +127,11 @@ export class TerminalInput extends EventEmitter {
|
|
|
127
127
|
lastStreamingRender = 0;
|
|
128
128
|
streamingRenderInterval = 250; // ms between renders during streaming
|
|
129
129
|
streamingRenderTimer = null;
|
|
130
|
+
// Command autocomplete state
|
|
131
|
+
commandSuggestions = [];
|
|
132
|
+
showingSuggestions = false;
|
|
133
|
+
selectedSuggestionIndex = 0;
|
|
134
|
+
maxVisibleSuggestions = 10;
|
|
130
135
|
constructor(writeStream = process.stdout, config = {}) {
|
|
131
136
|
super();
|
|
132
137
|
this.out = writeStream;
|
|
@@ -356,6 +361,8 @@ export class TerminalInput extends EventEmitter {
|
|
|
356
361
|
this.historyIndex = -1;
|
|
357
362
|
this.tempInput = '';
|
|
358
363
|
this.pastePlaceholders = [];
|
|
364
|
+
this.showingSuggestions = false;
|
|
365
|
+
this.selectedSuggestionIndex = 0;
|
|
359
366
|
this.scheduleRender();
|
|
360
367
|
}
|
|
361
368
|
/**
|
|
@@ -379,6 +386,148 @@ export class TerminalInput extends EventEmitter {
|
|
|
379
386
|
this.queue = [];
|
|
380
387
|
this.scheduleRender();
|
|
381
388
|
}
|
|
389
|
+
// ===========================================================================
|
|
390
|
+
// COMMAND AUTOCOMPLETE
|
|
391
|
+
// ===========================================================================
|
|
392
|
+
/**
|
|
393
|
+
* Set available commands for autocomplete.
|
|
394
|
+
* Call this once during initialization with all slash commands.
|
|
395
|
+
*/
|
|
396
|
+
setAvailableCommands(commands) {
|
|
397
|
+
this.commandSuggestions = commands;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Check if command suggestions are currently being shown
|
|
401
|
+
*/
|
|
402
|
+
isShowingSuggestions() {
|
|
403
|
+
return this.showingSuggestions;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Get filtered commands based on current input
|
|
407
|
+
*/
|
|
408
|
+
getFilteredCommands() {
|
|
409
|
+
const input = this.buffer.trim().toLowerCase();
|
|
410
|
+
// Only show suggestions if buffer starts with "/"
|
|
411
|
+
if (!input.startsWith('/')) {
|
|
412
|
+
return [];
|
|
413
|
+
}
|
|
414
|
+
// If just "/", show all commands
|
|
415
|
+
if (input === '/') {
|
|
416
|
+
return this.commandSuggestions;
|
|
417
|
+
}
|
|
418
|
+
// Filter commands that match the typed prefix
|
|
419
|
+
return this.commandSuggestions.filter(cmd => cmd.command.toLowerCase().startsWith(input));
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Update suggestion visibility based on current buffer
|
|
423
|
+
*/
|
|
424
|
+
updateSuggestionVisibility() {
|
|
425
|
+
const filtered = this.getFilteredCommands();
|
|
426
|
+
const shouldShow = filtered.length > 0 && this.buffer.startsWith('/');
|
|
427
|
+
if (shouldShow !== this.showingSuggestions) {
|
|
428
|
+
this.showingSuggestions = shouldShow;
|
|
429
|
+
this.selectedSuggestionIndex = 0;
|
|
430
|
+
this.scheduleRender();
|
|
431
|
+
}
|
|
432
|
+
else if (shouldShow) {
|
|
433
|
+
// Clamp selection index
|
|
434
|
+
this.selectedSuggestionIndex = Math.min(this.selectedSuggestionIndex, Math.max(0, filtered.length - 1));
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Handle selecting a suggestion (Enter key or click)
|
|
439
|
+
*/
|
|
440
|
+
selectSuggestion() {
|
|
441
|
+
if (!this.showingSuggestions)
|
|
442
|
+
return false;
|
|
443
|
+
const filtered = this.getFilteredCommands();
|
|
444
|
+
if (filtered.length === 0)
|
|
445
|
+
return false;
|
|
446
|
+
const selected = filtered[this.selectedSuggestionIndex];
|
|
447
|
+
if (!selected)
|
|
448
|
+
return false;
|
|
449
|
+
// Replace buffer with selected command
|
|
450
|
+
this.buffer = selected.command + ' ';
|
|
451
|
+
this.cursor = this.buffer.length;
|
|
452
|
+
this.showingSuggestions = false;
|
|
453
|
+
this.scheduleRender();
|
|
454
|
+
return true;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Move selection up in suggestions list
|
|
458
|
+
*/
|
|
459
|
+
moveSuggestionUp() {
|
|
460
|
+
if (!this.showingSuggestions)
|
|
461
|
+
return false;
|
|
462
|
+
const filtered = this.getFilteredCommands();
|
|
463
|
+
if (filtered.length === 0)
|
|
464
|
+
return false;
|
|
465
|
+
this.selectedSuggestionIndex = Math.max(0, this.selectedSuggestionIndex - 1);
|
|
466
|
+
this.scheduleRender();
|
|
467
|
+
return true;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Move selection down in suggestions list
|
|
471
|
+
*/
|
|
472
|
+
moveSuggestionDown() {
|
|
473
|
+
if (!this.showingSuggestions)
|
|
474
|
+
return false;
|
|
475
|
+
const filtered = this.getFilteredCommands();
|
|
476
|
+
if (filtered.length === 0)
|
|
477
|
+
return false;
|
|
478
|
+
this.selectedSuggestionIndex = Math.min(filtered.length - 1, this.selectedSuggestionIndex + 1);
|
|
479
|
+
this.scheduleRender();
|
|
480
|
+
return true;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Cancel suggestion display (Escape)
|
|
484
|
+
*/
|
|
485
|
+
cancelSuggestions() {
|
|
486
|
+
if (!this.showingSuggestions)
|
|
487
|
+
return false;
|
|
488
|
+
this.showingSuggestions = false;
|
|
489
|
+
this.scheduleRender();
|
|
490
|
+
return true;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Build command suggestion display lines
|
|
494
|
+
*/
|
|
495
|
+
buildSuggestionLines(width) {
|
|
496
|
+
if (!this.showingSuggestions)
|
|
497
|
+
return [];
|
|
498
|
+
const filtered = this.getFilteredCommands();
|
|
499
|
+
if (filtered.length === 0)
|
|
500
|
+
return [];
|
|
501
|
+
const lines = [];
|
|
502
|
+
const maxDisplay = Math.min(filtered.length, this.maxVisibleSuggestions);
|
|
503
|
+
// Header with navigation hint
|
|
504
|
+
const headerText = theme.ui.muted(`─── Commands (↑↓ navigate, Tab/Enter select, Esc cancel) ───`);
|
|
505
|
+
lines.push(headerText);
|
|
506
|
+
// Render visible suggestions
|
|
507
|
+
for (let i = 0; i < maxDisplay; i++) {
|
|
508
|
+
const cmd = filtered[i];
|
|
509
|
+
const isSelected = i === this.selectedSuggestionIndex;
|
|
510
|
+
// Format: [indicator] /command description
|
|
511
|
+
const indicator = isSelected ? theme.accent('▸') : ' ';
|
|
512
|
+
const cmdText = isSelected
|
|
513
|
+
? theme.accent(cmd.command.padEnd(18))
|
|
514
|
+
: theme.primary(cmd.command.padEnd(18));
|
|
515
|
+
// Truncate description to fit
|
|
516
|
+
const descMaxLen = Math.max(10, width - 22);
|
|
517
|
+
const desc = cmd.description.length > descMaxLen
|
|
518
|
+
? cmd.description.slice(0, descMaxLen - 2) + '..'
|
|
519
|
+
: cmd.description;
|
|
520
|
+
const descText = isSelected
|
|
521
|
+
? theme.info(desc)
|
|
522
|
+
: theme.ui.muted(desc);
|
|
523
|
+
lines.push(`${indicator} ${cmdText} ${descText}`);
|
|
524
|
+
}
|
|
525
|
+
// Show "more" indicator if truncated
|
|
526
|
+
if (filtered.length > maxDisplay) {
|
|
527
|
+
lines.push(theme.ui.muted(` ... ${filtered.length - maxDisplay} more commands`));
|
|
528
|
+
}
|
|
529
|
+
return lines;
|
|
530
|
+
}
|
|
382
531
|
/**
|
|
383
532
|
* Update the inline status message shown before the prompt (e.g., streaming heartbeat).
|
|
384
533
|
*/
|
|
@@ -638,10 +787,19 @@ export class TerminalInput extends EventEmitter {
|
|
|
638
787
|
this.write(' '.repeat(padding));
|
|
639
788
|
this.write(ESC.RESET);
|
|
640
789
|
}
|
|
790
|
+
// Command suggestions (shown above controls when "/" is typed)
|
|
791
|
+
const suggestionLines = this.buildSuggestionLines(cols - 2);
|
|
792
|
+
let suggestionRow = currentRow + visibleLines.length;
|
|
793
|
+
for (const suggestionLine of suggestionLines) {
|
|
794
|
+
this.write(ESC.TO(suggestionRow, 1));
|
|
795
|
+
this.write(' '); // Indent to match input
|
|
796
|
+
this.write(suggestionLine);
|
|
797
|
+
suggestionRow += 1;
|
|
798
|
+
}
|
|
641
799
|
// Mode controls lines with all keyboard shortcuts
|
|
642
800
|
// Can be multiple lines during streaming (status + toggles)
|
|
643
801
|
const controlLines = this.buildModeControls(cols);
|
|
644
|
-
let controlRow =
|
|
802
|
+
let controlRow = suggestionRow;
|
|
645
803
|
for (const controlLine of controlLines) {
|
|
646
804
|
this.write(ESC.TO(controlRow, 1));
|
|
647
805
|
this.write(controlLine);
|
|
@@ -771,19 +929,19 @@ export class TerminalInput extends EventEmitter {
|
|
|
771
929
|
const contextTone = this.contextUsage > 80 ? 'warn' : this.contextUsage > 60 ? 'info' : 'muted';
|
|
772
930
|
toggleParts.push({ text: `ctx:${remaining}%`, tone: contextTone });
|
|
773
931
|
}
|
|
774
|
-
// Verification toggle (
|
|
932
|
+
// Verification toggle (Alt+V)
|
|
775
933
|
const verifyStatus = this.verificationEnabled ? '✓' : '○';
|
|
776
934
|
toggleParts.push({
|
|
777
935
|
text: `⌥V:${verifyStatus}verify`,
|
|
778
936
|
tone: this.verificationEnabled ? 'success' : 'muted'
|
|
779
937
|
});
|
|
780
|
-
// Auto-continue toggle (
|
|
938
|
+
// Auto-continue toggle (Alt+C)
|
|
781
939
|
const autoStatus = this.autoContinueEnabled ? '↻' : '○';
|
|
782
940
|
toggleParts.push({
|
|
783
941
|
text: `⌥C:${autoStatus}auto`,
|
|
784
942
|
tone: this.autoContinueEnabled ? 'info' : 'muted'
|
|
785
943
|
});
|
|
786
|
-
// Thinking mode toggle (
|
|
944
|
+
// Thinking mode toggle (Alt+T)
|
|
787
945
|
if (this.thinkingModeLabel) {
|
|
788
946
|
const shortThinking = this.thinkingModeLabel.length > 10
|
|
789
947
|
? this.thinkingModeLabel.slice(0, 8) + '..'
|
|
@@ -1048,6 +1206,7 @@ export class TerminalInput extends EventEmitter {
|
|
|
1048
1206
|
* - Meta lines (model, elapsed, tokens)
|
|
1049
1207
|
* - Divider
|
|
1050
1208
|
* - Input line(s) - expands for multi-line/wrapped input
|
|
1209
|
+
* - Command suggestions (when showing)
|
|
1051
1210
|
* - Control lines (wraps as needed to fit all toggles)
|
|
1052
1211
|
* - Buffer
|
|
1053
1212
|
*/
|
|
@@ -1065,10 +1224,18 @@ export class TerminalInput extends EventEmitter {
|
|
|
1065
1224
|
// Meta line only if we have model/elapsed info
|
|
1066
1225
|
const hasMetaInfo = this.modelLabel || this.metaElapsedSeconds !== null || this.metaTokensUsed !== null;
|
|
1067
1226
|
const metaLines = hasMetaInfo ? 1 : 0;
|
|
1068
|
-
//
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1227
|
+
// Command suggestion lines (when showing)
|
|
1228
|
+
let suggestionLines = 0;
|
|
1229
|
+
if (this.showingSuggestions) {
|
|
1230
|
+
const filtered = this.getFilteredCommands();
|
|
1231
|
+
suggestionLines = Math.min(filtered.length, this.maxVisibleSuggestions) + 1; // +1 for header
|
|
1232
|
+
}
|
|
1233
|
+
// Total: meta + divider + input lines + suggestions + controls + buffer
|
|
1234
|
+
// Limit total height to leave room for content (max ~50% of terminal when showing suggestions)
|
|
1235
|
+
const totalHeight = metaLines + 1 + inputLines + suggestionLines + controlLineCount + 1;
|
|
1236
|
+
const maxHeight = this.showingSuggestions
|
|
1237
|
+
? Math.max(12, Math.floor(rows * 0.5))
|
|
1238
|
+
: Math.max(6, Math.floor(rows * 0.4));
|
|
1072
1239
|
return Math.min(totalHeight, maxHeight);
|
|
1073
1240
|
}
|
|
1074
1241
|
/**
|
|
@@ -1325,10 +1492,21 @@ export class TerminalInput extends EventEmitter {
|
|
|
1325
1492
|
if (key.shift || key.meta) {
|
|
1326
1493
|
this.insertNewline();
|
|
1327
1494
|
}
|
|
1495
|
+
else if (this.showingSuggestions) {
|
|
1496
|
+
// Select suggestion and don't submit yet
|
|
1497
|
+
this.selectSuggestion();
|
|
1498
|
+
}
|
|
1328
1499
|
else {
|
|
1329
1500
|
this.submit();
|
|
1330
1501
|
}
|
|
1331
1502
|
return true;
|
|
1503
|
+
case 'escape':
|
|
1504
|
+
// Cancel suggestions first, or emit interrupt
|
|
1505
|
+
if (this.cancelSuggestions()) {
|
|
1506
|
+
return true;
|
|
1507
|
+
}
|
|
1508
|
+
this.emit('interrupt');
|
|
1509
|
+
return true;
|
|
1332
1510
|
case 'backspace':
|
|
1333
1511
|
this.deleteBackward();
|
|
1334
1512
|
return true;
|
|
@@ -1336,12 +1514,25 @@ export class TerminalInput extends EventEmitter {
|
|
|
1336
1514
|
this.deleteForward();
|
|
1337
1515
|
return true;
|
|
1338
1516
|
case 'left':
|
|
1517
|
+
// Cancel suggestions on cursor movement
|
|
1518
|
+
if (this.showingSuggestions) {
|
|
1519
|
+
this.cancelSuggestions();
|
|
1520
|
+
}
|
|
1339
1521
|
this.moveCursorLeft();
|
|
1340
1522
|
return true;
|
|
1341
1523
|
case 'right':
|
|
1524
|
+
// Cancel suggestions on cursor movement
|
|
1525
|
+
if (this.showingSuggestions) {
|
|
1526
|
+
this.cancelSuggestions();
|
|
1527
|
+
}
|
|
1342
1528
|
this.moveCursorRight();
|
|
1343
1529
|
return true;
|
|
1344
1530
|
case 'up':
|
|
1531
|
+
// When showing suggestions, navigate up
|
|
1532
|
+
if (this.showingSuggestions) {
|
|
1533
|
+
this.moveSuggestionUp();
|
|
1534
|
+
return true;
|
|
1535
|
+
}
|
|
1345
1536
|
// Ctrl+Shift+Up or Shift+Up: Quick scroll up in scrollback
|
|
1346
1537
|
if ((key.ctrl && key.shift) || key.shift) {
|
|
1347
1538
|
this.scrollUp(5);
|
|
@@ -1351,6 +1542,11 @@ export class TerminalInput extends EventEmitter {
|
|
|
1351
1542
|
}
|
|
1352
1543
|
return true;
|
|
1353
1544
|
case 'down':
|
|
1545
|
+
// When showing suggestions, navigate down
|
|
1546
|
+
if (this.showingSuggestions) {
|
|
1547
|
+
this.moveSuggestionDown();
|
|
1548
|
+
return true;
|
|
1549
|
+
}
|
|
1354
1550
|
// Ctrl+Shift+Down or Shift+Down: Quick scroll down in scrollback
|
|
1355
1551
|
if ((key.ctrl && key.shift) || key.shift) {
|
|
1356
1552
|
this.scrollDown(5);
|
|
@@ -1385,6 +1581,11 @@ export class TerminalInput extends EventEmitter {
|
|
|
1385
1581
|
// Scrollback disabled in alternate screen mode
|
|
1386
1582
|
return true;
|
|
1387
1583
|
case 'tab':
|
|
1584
|
+
// Tab can select suggestion too
|
|
1585
|
+
if (this.showingSuggestions && !key.shift) {
|
|
1586
|
+
this.selectSuggestion();
|
|
1587
|
+
return true;
|
|
1588
|
+
}
|
|
1388
1589
|
if (key.shift) {
|
|
1389
1590
|
this.toggleEditMode();
|
|
1390
1591
|
return true;
|
|
@@ -1407,6 +1608,8 @@ export class TerminalInput extends EventEmitter {
|
|
|
1407
1608
|
this.insertPlainText(chunk, insertPos);
|
|
1408
1609
|
this.cursor = insertPos + chunk.length;
|
|
1409
1610
|
this.emit('change', this.buffer);
|
|
1611
|
+
// Update command autocomplete visibility
|
|
1612
|
+
this.updateSuggestionVisibility();
|
|
1410
1613
|
this.scheduleRender();
|
|
1411
1614
|
}
|
|
1412
1615
|
insertNewline() {
|
|
@@ -1431,6 +1634,7 @@ export class TerminalInput extends EventEmitter {
|
|
|
1431
1634
|
this.cursor = Math.max(0, this.cursor - 1);
|
|
1432
1635
|
}
|
|
1433
1636
|
this.emit('change', this.buffer);
|
|
1637
|
+
this.updateSuggestionVisibility();
|
|
1434
1638
|
this.scheduleRender();
|
|
1435
1639
|
}
|
|
1436
1640
|
deleteForward() {
|
|
@@ -1444,6 +1648,7 @@ export class TerminalInput extends EventEmitter {
|
|
|
1444
1648
|
this.removeRange(this.cursor, this.cursor + 1);
|
|
1445
1649
|
}
|
|
1446
1650
|
this.emit('change', this.buffer);
|
|
1651
|
+
this.updateSuggestionVisibility();
|
|
1447
1652
|
this.scheduleRender();
|
|
1448
1653
|
}
|
|
1449
1654
|
deleteToStart() {
|
|
@@ -1452,6 +1657,7 @@ export class TerminalInput extends EventEmitter {
|
|
|
1452
1657
|
this.removeRange(0, this.cursor);
|
|
1453
1658
|
this.cursor = 0;
|
|
1454
1659
|
this.emit('change', this.buffer);
|
|
1660
|
+
this.updateSuggestionVisibility();
|
|
1455
1661
|
this.scheduleRender();
|
|
1456
1662
|
}
|
|
1457
1663
|
deleteToEnd() {
|
|
@@ -1459,6 +1665,7 @@ export class TerminalInput extends EventEmitter {
|
|
|
1459
1665
|
return;
|
|
1460
1666
|
this.removeRange(this.cursor, this.buffer.length);
|
|
1461
1667
|
this.emit('change', this.buffer);
|
|
1668
|
+
this.updateSuggestionVisibility();
|
|
1462
1669
|
this.scheduleRender();
|
|
1463
1670
|
}
|
|
1464
1671
|
deleteWord() {
|