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.
Files changed (38) hide show
  1. package/dist/core/agent.d.ts +3 -0
  2. package/dist/core/agent.d.ts.map +1 -1
  3. package/dist/core/agent.js +109 -18
  4. package/dist/core/agent.js.map +1 -1
  5. package/dist/core/toolPreconditions.js +1 -1
  6. package/dist/core/toolPreconditions.js.map +1 -1
  7. package/dist/core/toolRuntime.js +1 -1
  8. package/dist/core/toolRuntime.js.map +1 -1
  9. package/dist/core/toolValidation.js +1 -1
  10. package/dist/core/toolValidation.js.map +1 -1
  11. package/dist/shell/interactiveShell.d.ts +18 -0
  12. package/dist/shell/interactiveShell.d.ts.map +1 -1
  13. package/dist/shell/interactiveShell.js +102 -24
  14. package/dist/shell/interactiveShell.js.map +1 -1
  15. package/dist/shell/terminalInput.d.ts +16 -1
  16. package/dist/shell/terminalInput.d.ts.map +1 -1
  17. package/dist/shell/terminalInput.js +86 -31
  18. package/dist/shell/terminalInput.js.map +1 -1
  19. package/dist/shell/terminalInputAdapter.d.ts +12 -0
  20. package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
  21. package/dist/shell/terminalInputAdapter.js +14 -0
  22. package/dist/shell/terminalInputAdapter.js.map +1 -1
  23. package/dist/tools/fileTools.d.ts.map +1 -1
  24. package/dist/tools/fileTools.js +102 -39
  25. package/dist/tools/fileTools.js.map +1 -1
  26. package/dist/ui/display.d.ts +25 -1
  27. package/dist/ui/display.d.ts.map +1 -1
  28. package/dist/ui/display.js +105 -22
  29. package/dist/ui/display.js.map +1 -1
  30. package/dist/ui/keyboardShortcuts.js +1 -1
  31. package/dist/ui/keyboardShortcuts.js.map +1 -1
  32. package/dist/ui/persistentPrompt.d.ts +50 -0
  33. package/dist/ui/persistentPrompt.d.ts.map +1 -0
  34. package/dist/ui/persistentPrompt.js +92 -0
  35. package/dist/ui/persistentPrompt.js.map +1 -0
  36. package/dist/ui/shortcutsHelp.js +2 -2
  37. package/dist/ui/shortcutsHelp.js.map +1 -1
  38. package/package.json +1 -1
@@ -1,6 +1,8 @@
1
- import { readFileSync, existsSync, readdirSync, statSync } from 'node:fs';
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 pathArg = args['path'];
33
- const requestedPath = normalizePathContext(pathArg);
34
- let resolvedPath;
35
- try {
36
- const filePath = resolveFilePath(workingDir, pathArg);
37
- resolvedPath = filePath;
38
- if (!existsSync(filePath)) {
39
- return `Error: File not found: ${filePath}`;
40
- }
41
- // Check file size before reading to prevent memory exhaustion
42
- const fileStats = statSync(filePath);
43
- if (fileStats.size > MAX_FILE_SIZE) {
44
- return `Error: File too large (${formatFileSize(fileStats.size)}). Maximum allowed: ${formatFileSize(MAX_FILE_SIZE)}. Use offset and limit parameters to read specific portions.`;
45
- }
46
- const content = readFileSync(filePath, 'utf-8');
47
- const lines = content.split('\n');
48
- const totalLines = lines.length;
49
- // Parse offset and limit parameters
50
- const offset = typeof args['offset'] === 'number' ? Math.max(1, Math.floor(args['offset'])) : 1;
51
- const defaultLimit = totalLines > 2000 ? 2000 : totalLines;
52
- const limit = typeof args['limit'] === 'number' ? Math.max(1, Math.floor(args['limit'])) : defaultLimit;
53
- // Apply offset and limit (offset is 1-based)
54
- const startLine = offset - 1;
55
- const endLine = Math.min(startLine + limit, totalLines);
56
- const selectedLines = lines.slice(startLine, endLine);
57
- // Format with line numbers (like cat -n)
58
- const numberedLines = selectedLines.map((line, idx) => {
59
- const lineNum = String(startLine + idx + 1).padStart(6);
60
- return `${lineNum}\t${line}`;
61
- });
62
- // Build header with file info
63
- const showingRange = startLine > 0 || endLine < totalLines;
64
- const rangeInfo = showingRange
65
- ? ` (lines ${offset}-${endLine} of ${totalLines})`
66
- : ` (${totalLines} lines)`;
67
- return `File: ${filePath}${rangeInfo}\n\n${numberedLines.join('\n')}`;
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
- catch (error) {
70
- return buildError('reading file', error, { path: requestedPath, resolvedPath });
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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"}
@@ -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
- * Uses simple carriage return to update in-place on a single line.
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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"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"}
@@ -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 - single line at bottom)
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
- * Uses simple carriage return to update in-place on a single line.
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
- // Clear the current line
441
- this.outputStream.write('\r\x1b[2K');
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
- // Simple single-line update - no cursor movement, just carriage return
453
- if (this.streamingStatusVisible) {
454
- // Overwrite current line
455
- this.outputStream.write(`\r\x1b[2K${theme.ui.muted(displayStatus)}`);
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
- // First time - start on new line
459
- this.outputStream.write(`\n${theme.ui.muted(displayStatus)}`);
460
- this.streamingStatusVisible = true;
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
- // Clear the single status line and move to new line
475
- this.outputStream.write('\r\x1b[2K');
476
- this.streamingStatusVisible = false;
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
- this.withOutput(() => {
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
- // Claude Code style: simple, compact, no boxes
1018
+ // Clean, minimal startup display
938
1019
  const lines = [];
939
- // Version line
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 on one line
943
- lines.push(`${theme.ui.muted('>')} ${this.formatModelLabel(model)} ${theme.ui.muted(`(${provider})`)}`);
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('>')} ${this.abbreviatePath(workingDir, 60)}`);
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) {