erosolar-cli 1.7.198 → 1.7.200
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/core/agent.d.ts +3 -0
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +109 -18
- package/dist/core/agent.js.map +1 -1
- package/dist/core/toolPreconditions.js +1 -1
- package/dist/core/toolPreconditions.js.map +1 -1
- package/dist/core/toolRuntime.js +1 -1
- package/dist/core/toolRuntime.js.map +1 -1
- package/dist/core/toolValidation.js +1 -1
- package/dist/core/toolValidation.js.map +1 -1
- package/dist/shell/interactiveShell.d.ts +18 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +102 -24
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +16 -1
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +86 -31
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/terminalInputAdapter.d.ts +12 -0
- package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
- package/dist/shell/terminalInputAdapter.js +14 -0
- package/dist/shell/terminalInputAdapter.js.map +1 -1
- package/dist/tools/fileTools.d.ts.map +1 -1
- package/dist/tools/fileTools.js +102 -39
- package/dist/tools/fileTools.js.map +1 -1
- package/dist/ui/display.d.ts +25 -1
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +105 -22
- package/dist/ui/display.js.map +1 -1
- package/dist/ui/keyboardShortcuts.js +1 -1
- package/dist/ui/keyboardShortcuts.js.map +1 -1
- package/dist/ui/persistentPrompt.d.ts +50 -0
- package/dist/ui/persistentPrompt.d.ts.map +1 -0
- package/dist/ui/persistentPrompt.js +92 -0
- package/dist/ui/persistentPrompt.js.map +1 -0
- package/dist/ui/shortcutsHelp.js +2 -2
- package/dist/ui/shortcutsHelp.js.map +1 -1
- package/package.json +1 -1
package/dist/tools/fileTools.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
2
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
2
3
|
import { join, relative } from 'node:path';
|
|
3
4
|
import { buildError } from '../core/errors.js';
|
|
5
|
+
import { parallelMap } from '../utils/asyncUtils.js';
|
|
4
6
|
// Maximum file size to read (10MB) to prevent memory exhaustion
|
|
5
7
|
const MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
6
8
|
export function createFileTools(workingDir) {
|
|
@@ -29,46 +31,61 @@ export function createFileTools(workingDir) {
|
|
|
29
31
|
additionalProperties: false,
|
|
30
32
|
},
|
|
31
33
|
handler: async (args) => {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
34
|
+
const result = await readFileWithLineNumbers(workingDir, args['path'], args['offset'], args['limit']);
|
|
35
|
+
return result.output;
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'read_files',
|
|
40
|
+
description: 'Read multiple files in parallel with line numbers. Use this to avoid sequential read bottlenecks when inspecting several files.',
|
|
41
|
+
parameters: {
|
|
42
|
+
type: 'object',
|
|
43
|
+
properties: {
|
|
44
|
+
paths: {
|
|
45
|
+
type: 'array',
|
|
46
|
+
minItems: 1,
|
|
47
|
+
items: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
minLength: 1,
|
|
50
|
+
},
|
|
51
|
+
description: 'List of file paths to read (relative or absolute)',
|
|
52
|
+
},
|
|
53
|
+
offset: {
|
|
54
|
+
type: 'number',
|
|
55
|
+
description: 'Optional starting line for all files (1-based).',
|
|
56
|
+
},
|
|
57
|
+
limit: {
|
|
58
|
+
type: 'number',
|
|
59
|
+
description: 'Optional max lines to read for each file.',
|
|
60
|
+
},
|
|
61
|
+
concurrency: {
|
|
62
|
+
type: 'number',
|
|
63
|
+
description: 'Maximum number of files to read concurrently (default: 5, max: 10).',
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
required: ['paths'],
|
|
67
|
+
additionalProperties: false,
|
|
68
|
+
},
|
|
69
|
+
handler: async (args) => {
|
|
70
|
+
const pathsArg = args['paths'];
|
|
71
|
+
if (!Array.isArray(pathsArg) || pathsArg.length === 0) {
|
|
72
|
+
return 'Error: paths must be a non-empty array of file paths.';
|
|
68
73
|
}
|
|
69
|
-
|
|
70
|
-
|
|
74
|
+
const sanitizedPaths = pathsArg
|
|
75
|
+
.filter((value) => typeof value === 'string')
|
|
76
|
+
.map((value) => value.trim())
|
|
77
|
+
.filter(Boolean);
|
|
78
|
+
if (sanitizedPaths.length === 0) {
|
|
79
|
+
return 'Error: paths must contain at least one valid string path.';
|
|
71
80
|
}
|
|
81
|
+
const concurrencyArg = typeof args['concurrency'] === 'number' ? Math.floor(args['concurrency']) : 5;
|
|
82
|
+
const concurrency = Math.min(Math.max(concurrencyArg, 1), 10);
|
|
83
|
+
const offsetArg = args['offset'];
|
|
84
|
+
const limitArg = args['limit'];
|
|
85
|
+
const results = await parallelMap(sanitizedPaths, async (path) => readFileWithLineNumbers(workingDir, path, offsetArg, limitArg), concurrency);
|
|
86
|
+
const header = `Read ${results.length} file${results.length === 1 ? '' : 's'} in parallel (max ${concurrency} concurrent):`;
|
|
87
|
+
const body = results.map((result) => result.output).join('\n\n---\n\n');
|
|
88
|
+
return [header, body].join('\n\n');
|
|
72
89
|
},
|
|
73
90
|
},
|
|
74
91
|
{
|
|
@@ -249,4 +266,50 @@ function formatFileSize(bytes) {
|
|
|
249
266
|
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
250
267
|
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
251
268
|
}
|
|
269
|
+
async function readFileWithLineNumbers(workingDir, pathArg, offsetArg, limitArg) {
|
|
270
|
+
const requestedPath = normalizePathContext(pathArg);
|
|
271
|
+
let resolvedPath;
|
|
272
|
+
try {
|
|
273
|
+
const filePath = resolveFilePath(workingDir, pathArg);
|
|
274
|
+
resolvedPath = filePath;
|
|
275
|
+
if (!existsSync(filePath)) {
|
|
276
|
+
return { filePath, output: `Error: File not found: ${filePath}` };
|
|
277
|
+
}
|
|
278
|
+
const fileStats = await stat(filePath);
|
|
279
|
+
if (fileStats.size > MAX_FILE_SIZE) {
|
|
280
|
+
return {
|
|
281
|
+
filePath,
|
|
282
|
+
output: `Error: File too large (${formatFileSize(fileStats.size)}). Maximum allowed: ${formatFileSize(MAX_FILE_SIZE)}. Use offset and limit parameters to read specific portions.`,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
const content = await readFile(filePath, 'utf-8');
|
|
286
|
+
const lines = content.split('\n');
|
|
287
|
+
const totalLines = lines.length;
|
|
288
|
+
const { offset, startLine, endLine } = normalizeReadWindow(totalLines, offsetArg, limitArg);
|
|
289
|
+
const selectedLines = lines.slice(startLine, endLine);
|
|
290
|
+
const numberedLines = selectedLines.map((line, idx) => {
|
|
291
|
+
const lineNum = String(startLine + idx + 1).padStart(6);
|
|
292
|
+
return `${lineNum}\t${line}`;
|
|
293
|
+
});
|
|
294
|
+
const showingRange = startLine > 0 || endLine < totalLines;
|
|
295
|
+
const rangeInfo = showingRange
|
|
296
|
+
? ` (lines ${offset}-${endLine} of ${totalLines})`
|
|
297
|
+
: ` (${totalLines} lines)`;
|
|
298
|
+
return {
|
|
299
|
+
filePath,
|
|
300
|
+
output: `File: ${filePath}${rangeInfo}\n\n${numberedLines.join('\n')}`,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
return { filePath: resolvedPath, output: buildError('reading file', error, { path: requestedPath, resolvedPath }) };
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
function normalizeReadWindow(totalLines, offsetArg, limitArg) {
|
|
308
|
+
const offset = typeof offsetArg === 'number' ? Math.max(1, Math.floor(offsetArg)) : 1;
|
|
309
|
+
const defaultLimit = totalLines > 2000 ? 2000 : totalLines;
|
|
310
|
+
const limit = typeof limitArg === 'number' ? Math.max(1, Math.floor(limitArg)) : defaultLimit;
|
|
311
|
+
const startLine = offset - 1;
|
|
312
|
+
const endLine = Math.min(startLine + limit, totalLines);
|
|
313
|
+
return { offset, startLine, endLine };
|
|
314
|
+
}
|
|
252
315
|
//# sourceMappingURL=fileTools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileTools.js","sourceRoot":"","sources":["../../src/tools/fileTools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fileTools.js","sourceRoot":"","sources":["../../src/tools/fileTools.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/display.d.ts
CHANGED
|
@@ -60,6 +60,8 @@ export declare class Display {
|
|
|
60
60
|
private thinkingElapsedTimer;
|
|
61
61
|
private thinkingBaseMessage;
|
|
62
62
|
private streamingStatusVisible;
|
|
63
|
+
private scrollRegionActive;
|
|
64
|
+
private savedCursorRow;
|
|
63
65
|
constructor(stream?: OutputStream, errorStream?: OutputStream);
|
|
64
66
|
registerOutputInterceptor(interceptor: OutputInterceptor): () => void;
|
|
65
67
|
private withOutput;
|
|
@@ -120,9 +122,26 @@ export declare class Display {
|
|
|
120
122
|
* If spinner is active, the write will be queued until spinner stops.
|
|
121
123
|
*/
|
|
122
124
|
safeWrite(callback: () => void): void;
|
|
125
|
+
/**
|
|
126
|
+
* Get terminal rows, with fallback
|
|
127
|
+
*/
|
|
128
|
+
private getTerminalRows;
|
|
129
|
+
/**
|
|
130
|
+
* Set up scroll region to reserve bottom line for status.
|
|
131
|
+
* This allows content to scroll while status stays fixed.
|
|
132
|
+
*/
|
|
133
|
+
setupScrollRegion(): void;
|
|
134
|
+
/**
|
|
135
|
+
* Tear down scroll region and restore normal terminal.
|
|
136
|
+
*/
|
|
137
|
+
teardownScrollRegion(): void;
|
|
138
|
+
/**
|
|
139
|
+
* Check if we're in a TTY (can use escape codes)
|
|
140
|
+
*/
|
|
141
|
+
private isTTY;
|
|
123
142
|
/**
|
|
124
143
|
* Update the streaming status line (Claude Code style).
|
|
125
|
-
*
|
|
144
|
+
* When scroll region is active, updates the fixed status area at bottom.
|
|
126
145
|
* Call with null to clear the status line.
|
|
127
146
|
*/
|
|
128
147
|
updateStreamingStatus(status: string | null): void;
|
|
@@ -130,6 +149,10 @@ export declare class Display {
|
|
|
130
149
|
* Check if streaming status is currently visible.
|
|
131
150
|
*/
|
|
132
151
|
isStreamingStatusVisible(): boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Check if scroll region is active.
|
|
154
|
+
*/
|
|
155
|
+
isScrollRegionActive(): boolean;
|
|
133
156
|
/**
|
|
134
157
|
* Clear streaming status and reset state.
|
|
135
158
|
*/
|
|
@@ -161,6 +184,7 @@ export declare class Display {
|
|
|
161
184
|
}>): void;
|
|
162
185
|
/**
|
|
163
186
|
* Show ready message with keyboard shortcuts hint (compact)
|
|
187
|
+
* Note: Commands are now shown in the banner, so this is a no-op
|
|
164
188
|
*/
|
|
165
189
|
showReadyWithHints(): void;
|
|
166
190
|
/**
|
package/dist/ui/display.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,KAAK,YAAY,GAAG,MAAM,CAAC,cAAc,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AA8KjG,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,KAAK,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAMzE,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AA6BD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,aAAa,CAAiD;IACtE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAgC;IACnE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,oBAAoB,CAA+C;IAC3E,OAAO,CAAC,mBAAmB,CAAyB;IAGpD,OAAO,CAAC,sBAAsB,CAAkB;
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/display.js
CHANGED
|
@@ -195,8 +195,10 @@ export class Display {
|
|
|
195
195
|
thinkingStartTime = null;
|
|
196
196
|
thinkingElapsedTimer = null;
|
|
197
197
|
thinkingBaseMessage = 'Thinking...';
|
|
198
|
-
// Streaming status line (Claude Code style -
|
|
198
|
+
// Streaming status line (Claude Code style - fixed at bottom using scroll region)
|
|
199
199
|
streamingStatusVisible = false;
|
|
200
|
+
scrollRegionActive = false;
|
|
201
|
+
savedCursorRow = 0;
|
|
200
202
|
constructor(stream = process.stdout, errorStream) {
|
|
201
203
|
this.outputStream = stream;
|
|
202
204
|
this.errorStream = errorStream ?? stream;
|
|
@@ -429,16 +431,73 @@ export class Display {
|
|
|
429
431
|
safeWrite(callback) {
|
|
430
432
|
this.outputLock.safeWrite(callback);
|
|
431
433
|
}
|
|
434
|
+
/**
|
|
435
|
+
* Get terminal rows, with fallback
|
|
436
|
+
*/
|
|
437
|
+
getTerminalRows() {
|
|
438
|
+
const stream = this.outputStream;
|
|
439
|
+
return stream.rows ?? 24;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Set up scroll region to reserve bottom line for status.
|
|
443
|
+
* This allows content to scroll while status stays fixed.
|
|
444
|
+
*/
|
|
445
|
+
setupScrollRegion() {
|
|
446
|
+
if (this.scrollRegionActive || !this.isTTY()) {
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
const rows = this.getTerminalRows();
|
|
450
|
+
// Reserve bottom 2 lines (separator + status)
|
|
451
|
+
// Set scroll region from row 1 to row (rows - 2)
|
|
452
|
+
this.outputStream.write(`\x1b[1;${rows - 2}r`);
|
|
453
|
+
// Move cursor to end of scroll region
|
|
454
|
+
this.outputStream.write(`\x1b[${rows - 2};1H`);
|
|
455
|
+
this.scrollRegionActive = true;
|
|
456
|
+
this.savedCursorRow = rows - 2;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Tear down scroll region and restore normal terminal.
|
|
460
|
+
*/
|
|
461
|
+
teardownScrollRegion() {
|
|
462
|
+
if (!this.scrollRegionActive) {
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
const rows = this.getTerminalRows();
|
|
466
|
+
// Reset scroll region to full screen
|
|
467
|
+
this.outputStream.write('\x1b[r');
|
|
468
|
+
// Clear the status lines at bottom
|
|
469
|
+
this.outputStream.write(`\x1b[${rows - 1};1H\x1b[2K`);
|
|
470
|
+
this.outputStream.write(`\x1b[${rows};1H\x1b[2K`);
|
|
471
|
+
// Move cursor back to where content was
|
|
472
|
+
this.outputStream.write(`\x1b[${this.savedCursorRow};1H`);
|
|
473
|
+
this.scrollRegionActive = false;
|
|
474
|
+
this.streamingStatusVisible = false;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Check if we're in a TTY (can use escape codes)
|
|
478
|
+
*/
|
|
479
|
+
isTTY() {
|
|
480
|
+
const stream = this.outputStream;
|
|
481
|
+
return stream.isTTY === true;
|
|
482
|
+
}
|
|
432
483
|
/**
|
|
433
484
|
* Update the streaming status line (Claude Code style).
|
|
434
|
-
*
|
|
485
|
+
* When scroll region is active, updates the fixed status area at bottom.
|
|
435
486
|
* Call with null to clear the status line.
|
|
436
487
|
*/
|
|
437
488
|
updateStreamingStatus(status) {
|
|
438
489
|
if (!status) {
|
|
439
490
|
if (this.streamingStatusVisible) {
|
|
440
|
-
|
|
441
|
-
|
|
491
|
+
if (this.scrollRegionActive) {
|
|
492
|
+
// Clear status in the fixed area
|
|
493
|
+
const rows = this.getTerminalRows();
|
|
494
|
+
this.outputStream.write('\x1b[s'); // Save cursor
|
|
495
|
+
this.outputStream.write(`\x1b[${rows};1H\x1b[2K`); // Go to status line, clear
|
|
496
|
+
this.outputStream.write('\x1b[u'); // Restore cursor
|
|
497
|
+
}
|
|
498
|
+
else {
|
|
499
|
+
this.outputStream.write('\r\x1b[2K');
|
|
500
|
+
}
|
|
442
501
|
this.streamingStatusVisible = false;
|
|
443
502
|
}
|
|
444
503
|
return;
|
|
@@ -449,15 +508,28 @@ export class Display {
|
|
|
449
508
|
const displayStatus = status.length > maxStatusLen
|
|
450
509
|
? `${status.slice(0, maxStatusLen - 3)}...`
|
|
451
510
|
: status;
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
511
|
+
if (this.scrollRegionActive) {
|
|
512
|
+
// Update status in the fixed area at bottom (outside scroll region)
|
|
513
|
+
const rows = this.getTerminalRows();
|
|
514
|
+
const separatorWidth = Math.min(cols - 2, 72);
|
|
515
|
+
const separator = theme.ui.border('─'.repeat(separatorWidth));
|
|
516
|
+
this.outputStream.write('\x1b[s'); // Save cursor position
|
|
517
|
+
// Draw separator on row (rows - 1)
|
|
518
|
+
this.outputStream.write(`\x1b[${rows - 1};1H\x1b[2K${separator}`);
|
|
519
|
+
// Draw status on row (rows)
|
|
520
|
+
this.outputStream.write(`\x1b[${rows};1H\x1b[2K${theme.ui.muted(displayStatus)}`);
|
|
521
|
+
this.outputStream.write('\x1b[u'); // Restore cursor position
|
|
522
|
+
this.streamingStatusVisible = true;
|
|
456
523
|
}
|
|
457
524
|
else {
|
|
458
|
-
//
|
|
459
|
-
this.
|
|
460
|
-
|
|
525
|
+
// Fallback: simple single-line update
|
|
526
|
+
if (this.streamingStatusVisible) {
|
|
527
|
+
this.outputStream.write(`\r\x1b[2K${theme.ui.muted(displayStatus)}`);
|
|
528
|
+
}
|
|
529
|
+
else {
|
|
530
|
+
this.outputStream.write(`\n${theme.ui.muted(displayStatus)}`);
|
|
531
|
+
this.streamingStatusVisible = true;
|
|
532
|
+
}
|
|
461
533
|
}
|
|
462
534
|
}
|
|
463
535
|
/**
|
|
@@ -466,14 +538,24 @@ export class Display {
|
|
|
466
538
|
isStreamingStatusVisible() {
|
|
467
539
|
return this.streamingStatusVisible;
|
|
468
540
|
}
|
|
541
|
+
/**
|
|
542
|
+
* Check if scroll region is active.
|
|
543
|
+
*/
|
|
544
|
+
isScrollRegionActive() {
|
|
545
|
+
return this.scrollRegionActive;
|
|
546
|
+
}
|
|
469
547
|
/**
|
|
470
548
|
* Clear streaming status and reset state.
|
|
471
549
|
*/
|
|
472
550
|
clearStreamingStatus() {
|
|
473
551
|
if (this.streamingStatusVisible) {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
552
|
+
if (this.scrollRegionActive) {
|
|
553
|
+
this.teardownScrollRegion();
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
this.outputStream.write('\r\x1b[2K');
|
|
557
|
+
this.streamingStatusVisible = false;
|
|
558
|
+
}
|
|
477
559
|
}
|
|
478
560
|
}
|
|
479
561
|
clearSpinnerIfActive(addNewLine = true) {
|
|
@@ -672,11 +754,10 @@ export class Display {
|
|
|
672
754
|
}
|
|
673
755
|
/**
|
|
674
756
|
* Show ready message with keyboard shortcuts hint (compact)
|
|
757
|
+
* Note: Commands are now shown in the banner, so this is a no-op
|
|
675
758
|
*/
|
|
676
759
|
showReadyWithHints() {
|
|
677
|
-
|
|
678
|
-
this.writeLine(`${theme.success('>')} ${theme.ui.muted('/help for commands')}`);
|
|
679
|
-
});
|
|
760
|
+
// Commands hint is now included in the banner
|
|
680
761
|
}
|
|
681
762
|
/**
|
|
682
763
|
* Show available providers and their status on launch (compact inline)
|
|
@@ -934,15 +1015,17 @@ export class Display {
|
|
|
934
1015
|
return `${seconds}s`;
|
|
935
1016
|
}
|
|
936
1017
|
buildClaudeStyleBanner(_profileLabel, _profileName, model, provider, workingDir, _width, version) {
|
|
937
|
-
//
|
|
1018
|
+
// Clean, minimal startup display
|
|
938
1019
|
const lines = [];
|
|
939
|
-
//
|
|
1020
|
+
// App name with version
|
|
940
1021
|
const versionStr = version ? `v${version}` : '';
|
|
941
1022
|
lines.push(`${theme.gradient.cool('Erosolar')} ${theme.ui.muted(versionStr)}`);
|
|
942
|
-
// Model info
|
|
943
|
-
lines.push(`${theme.ui.muted('
|
|
1023
|
+
// Model info
|
|
1024
|
+
lines.push(`${theme.ui.muted('▸')} ${theme.info(this.formatModelLabel(model))} ${theme.ui.muted(`· ${provider}`)}`);
|
|
944
1025
|
// Working directory
|
|
945
|
-
lines.push(`${theme.ui.muted('
|
|
1026
|
+
lines.push(`${theme.ui.muted('▸')} ${this.abbreviatePath(workingDir, 60)}`);
|
|
1027
|
+
// Commands hint
|
|
1028
|
+
lines.push(`${theme.ui.muted('▸')} ${theme.ui.muted('/help · /model · /clear · /quit')}`);
|
|
946
1029
|
return lines.join('\n');
|
|
947
1030
|
}
|
|
948
1031
|
abbreviatePath(path, maxLen) {
|