erosolar-cli 1.7.213 → 1.7.215

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 (104) hide show
  1. package/dist/bin/erosolar.js +3 -0
  2. package/dist/bin/erosolar.js.map +1 -1
  3. package/dist/mcp/sseClient.d.ts.map +1 -1
  4. package/dist/mcp/sseClient.js +54 -27
  5. package/dist/mcp/sseClient.js.map +1 -1
  6. package/dist/shell/claudeCodeStreamHandler.d.ts.map +1 -1
  7. package/dist/shell/claudeCodeStreamHandler.js +11 -1
  8. package/dist/shell/claudeCodeStreamHandler.js.map +1 -1
  9. package/dist/shell/interactiveShell.d.ts +10 -0
  10. package/dist/shell/interactiveShell.d.ts.map +1 -1
  11. package/dist/shell/interactiveShell.js +76 -31
  12. package/dist/shell/interactiveShell.js.map +1 -1
  13. package/dist/shell/shellApp.d.ts.map +1 -1
  14. package/dist/shell/shellApp.js +3 -0
  15. package/dist/shell/shellApp.js.map +1 -1
  16. package/dist/shell/streamingOutputManager.d.ts +1 -0
  17. package/dist/shell/streamingOutputManager.d.ts.map +1 -1
  18. package/dist/shell/streamingOutputManager.js +16 -4
  19. package/dist/shell/streamingOutputManager.js.map +1 -1
  20. package/dist/shell/terminalInput.d.ts +27 -7
  21. package/dist/shell/terminalInput.d.ts.map +1 -1
  22. package/dist/shell/terminalInput.js +91 -53
  23. package/dist/shell/terminalInput.js.map +1 -1
  24. package/dist/shell/terminalInputAdapter.d.ts +14 -0
  25. package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
  26. package/dist/shell/terminalInputAdapter.js +20 -0
  27. package/dist/shell/terminalInputAdapter.js.map +1 -1
  28. package/dist/ui/display.d.ts +17 -4
  29. package/dist/ui/display.d.ts.map +1 -1
  30. package/dist/ui/display.js +141 -81
  31. package/dist/ui/display.js.map +1 -1
  32. package/dist/ui/globalWriteLock.d.ts +38 -0
  33. package/dist/ui/globalWriteLock.d.ts.map +1 -0
  34. package/dist/ui/globalWriteLock.js +54 -0
  35. package/dist/ui/globalWriteLock.js.map +1 -0
  36. package/dist/ui/unified/layout.d.ts +27 -0
  37. package/dist/ui/unified/layout.d.ts.map +1 -0
  38. package/dist/ui/unified/layout.js +110 -0
  39. package/dist/ui/unified/layout.js.map +1 -0
  40. package/package.json +1 -1
  41. package/dist/ui/FixedInputArea.d.ts +0 -108
  42. package/dist/ui/FixedInputArea.d.ts.map +0 -1
  43. package/dist/ui/FixedInputArea.js +0 -312
  44. package/dist/ui/FixedInputArea.js.map +0 -1
  45. package/dist/ui/advancedTheme.d.ts +0 -246
  46. package/dist/ui/advancedTheme.d.ts.map +0 -1
  47. package/dist/ui/advancedTheme.js +0 -478
  48. package/dist/ui/advancedTheme.js.map +0 -1
  49. package/dist/ui/collapsibleContent.d.ts +0 -57
  50. package/dist/ui/collapsibleContent.d.ts.map +0 -1
  51. package/dist/ui/collapsibleContent.js +0 -106
  52. package/dist/ui/collapsibleContent.js.map +0 -1
  53. package/dist/ui/diffViewer.d.ts +0 -42
  54. package/dist/ui/diffViewer.d.ts.map +0 -1
  55. package/dist/ui/diffViewer.js +0 -343
  56. package/dist/ui/diffViewer.js.map +0 -1
  57. package/dist/ui/gitDisplay.d.ts +0 -45
  58. package/dist/ui/gitDisplay.d.ts.map +0 -1
  59. package/dist/ui/gitDisplay.js +0 -215
  60. package/dist/ui/gitDisplay.js.map +0 -1
  61. package/dist/ui/gitFormatter.d.ts +0 -29
  62. package/dist/ui/gitFormatter.d.ts.map +0 -1
  63. package/dist/ui/gitFormatter.js +0 -203
  64. package/dist/ui/gitFormatter.js.map +0 -1
  65. package/dist/ui/keyboardShortcuts.d.ts +0 -49
  66. package/dist/ui/keyboardShortcuts.d.ts.map +0 -1
  67. package/dist/ui/keyboardShortcuts.js +0 -128
  68. package/dist/ui/keyboardShortcuts.js.map +0 -1
  69. package/dist/ui/logFormatter.d.ts +0 -70
  70. package/dist/ui/logFormatter.d.ts.map +0 -1
  71. package/dist/ui/logFormatter.js +0 -323
  72. package/dist/ui/logFormatter.js.map +0 -1
  73. package/dist/ui/outputSummarizer.d.ts +0 -52
  74. package/dist/ui/outputSummarizer.d.ts.map +0 -1
  75. package/dist/ui/outputSummarizer.js +0 -242
  76. package/dist/ui/outputSummarizer.js.map +0 -1
  77. package/dist/ui/progressBar.d.ts +0 -51
  78. package/dist/ui/progressBar.d.ts.map +0 -1
  79. package/dist/ui/progressBar.js +0 -153
  80. package/dist/ui/progressBar.js.map +0 -1
  81. package/dist/ui/progressIndicator.d.ts +0 -69
  82. package/dist/ui/progressIndicator.d.ts.map +0 -1
  83. package/dist/ui/progressIndicator.js +0 -145
  84. package/dist/ui/progressIndicator.js.map +0 -1
  85. package/dist/ui/streamingIndicators.d.ts +0 -42
  86. package/dist/ui/streamingIndicators.d.ts.map +0 -1
  87. package/dist/ui/streamingIndicators.js +0 -155
  88. package/dist/ui/streamingIndicators.js.map +0 -1
  89. package/dist/ui/tableFormatter.d.ts +0 -31
  90. package/dist/ui/tableFormatter.d.ts.map +0 -1
  91. package/dist/ui/tableFormatter.js +0 -186
  92. package/dist/ui/tableFormatter.js.map +0 -1
  93. package/dist/ui/thinkingTracker.d.ts +0 -51
  94. package/dist/ui/thinkingTracker.d.ts.map +0 -1
  95. package/dist/ui/thinkingTracker.js +0 -115
  96. package/dist/ui/thinkingTracker.js.map +0 -1
  97. package/dist/ui/toolDisplayAdapter.d.ts +0 -66
  98. package/dist/ui/toolDisplayAdapter.d.ts.map +0 -1
  99. package/dist/ui/toolDisplayAdapter.js +0 -356
  100. package/dist/ui/toolDisplayAdapter.js.map +0 -1
  101. package/dist/ui/treeVisualizer.d.ts +0 -56
  102. package/dist/ui/treeVisualizer.d.ts.map +0 -1
  103. package/dist/ui/treeVisualizer.js +0 -247
  104. package/dist/ui/treeVisualizer.js.map +0 -1
@@ -0,0 +1,110 @@
1
+ import { theme } from '../theme.js';
2
+ const ANSI_PATTERN = /\u001B\[[0-?]*[ -/]*[@-~]/g;
3
+ const clampWidth = (width, min = 42, max = 110) => {
4
+ if (!Number.isFinite(width) || !width) {
5
+ return max;
6
+ }
7
+ return Math.max(min, Math.min(max, Math.floor(width)));
8
+ };
9
+ const stripAnsi = (value) => value.replace(ANSI_PATTERN, '');
10
+ const visibleLength = (value) => stripAnsi(value).length;
11
+ const padLine = (content, innerWidth) => {
12
+ const visible = visibleLength(content);
13
+ const padding = Math.max(0, innerWidth - visible);
14
+ return `${theme.ui.border('┃')} ${content}${' '.repeat(padding)} ${theme.ui.border('┃')}`;
15
+ };
16
+ const framedBlock = (lines, width) => {
17
+ const innerWidth = clampWidth(width ? width - 2 : undefined, 32, 96);
18
+ const top = theme.ui.border(`╭${'─'.repeat(innerWidth)}╮`);
19
+ const bottom = theme.ui.border(`╰${'─'.repeat(innerWidth)}╯`);
20
+ const body = lines.map((line) => padLine(line, innerWidth));
21
+ return [top, ...body, bottom].join('\n');
22
+ };
23
+ export const renderSessionFrame = (props) => {
24
+ const versionStr = props.version ? `v${props.version}` : 'live';
25
+ const profile = props.profileLabel || props.profileName || 'Default';
26
+ const modelLabel = props.model;
27
+ const workspace = abbreviatePath(props.workspace, Math.max(16, clampWidth(props.width) - 18));
28
+ const shortcuts = theme.ui.muted('/help · /model · /clear · /quit');
29
+ const lines = [
30
+ `${theme.gradient.cool('⚡ EROSOLAR CLI')} ${theme.ui.muted(versionStr)}`,
31
+ `${theme.ui.muted('Profile')} ${theme.info(profile)}`,
32
+ `${theme.ui.muted('Model')} ${theme.info(modelLabel)} ${theme.ui.muted('via')} ${theme.accent(props.provider)}`,
33
+ `${theme.ui.muted('Workspace')} ${workspace}`,
34
+ `${theme.ui.muted('Shortcuts')} ${shortcuts}`,
35
+ ];
36
+ return framedBlock(lines, props.width);
37
+ };
38
+ export const renderLiveFrame = (props) => {
39
+ const label = props.label ?? 'Live stream';
40
+ const workspace = props.workspace
41
+ ? `${theme.ui.muted('Workspace')} ${abbreviatePath(props.workspace, 48)}`
42
+ : null;
43
+ const header = `${theme.gradient.cool('▶')} ${theme.info(label)} ${theme.ui.muted('•')} ${theme.info(props.model)} ${theme.ui.muted('@')} ${theme.accent(props.provider)}`;
44
+ const lines = workspace ? [header, workspace] : [header];
45
+ return framedBlock(lines, props.width);
46
+ };
47
+ export const renderDivider = (width, label) => {
48
+ const maxWidth = clampWidth(width, 16, 140);
49
+ if (!label) {
50
+ return theme.ui.muted('─'.repeat(maxWidth));
51
+ }
52
+ const cleanLabel = theme.ui.muted(`[${label}]`);
53
+ const labelLen = visibleLength(cleanLabel);
54
+ const side = Math.max(2, Math.floor((maxWidth - labelLen - 2) / 2));
55
+ const left = '─'.repeat(side);
56
+ const right = '─'.repeat(Math.max(0, maxWidth - side - labelLen - 2));
57
+ return theme.ui.muted(`${left} ${cleanLabel} ${right}`);
58
+ };
59
+ export const renderStatusLine = (parts, width) => {
60
+ const segments = parts
61
+ .filter((part) => part.text.trim())
62
+ .map((part) => colorize(part.text.trim(), part.tone));
63
+ // Join with muted separators for consistent rhythm
64
+ const separator = theme.ui.muted(' · ');
65
+ const joined = segments.join(separator);
66
+ const maxLen = clampWidth(width, 8, 180);
67
+ if (visibleLength(joined) <= maxLen) {
68
+ return joined;
69
+ }
70
+ let result = '';
71
+ for (const segment of segments) {
72
+ const next = result ? `${result}${separator}${segment}` : segment;
73
+ if (visibleLength(next) > maxLen) {
74
+ break;
75
+ }
76
+ result = next;
77
+ }
78
+ return result || segments.slice(0, 1).join('');
79
+ };
80
+ const colorize = (text, tone) => {
81
+ switch (tone) {
82
+ case 'info':
83
+ return theme.info(text);
84
+ case 'warn':
85
+ return theme.warning(text);
86
+ case 'error':
87
+ return theme.error(text);
88
+ case 'success':
89
+ return theme.success(text);
90
+ case 'muted':
91
+ default:
92
+ return theme.ui.muted(text);
93
+ }
94
+ };
95
+ const abbreviatePath = (path, maxLen) => {
96
+ if (!path)
97
+ return '';
98
+ if (visibleLength(path) <= maxLen)
99
+ return path;
100
+ const parts = path.split('/').filter(Boolean);
101
+ if (parts.length <= 2) {
102
+ return `${path.slice(0, maxLen - 3)}...`;
103
+ }
104
+ const first = parts[0] ?? '';
105
+ const last = parts[parts.length - 1] ?? '';
106
+ const middleBudget = Math.max(0, maxLen - visibleLength(first) - visibleLength(last) - 7);
107
+ const middle = middleBudget > 0 ? parts.slice(1, -1).join('/').slice(0, middleBudget) : '';
108
+ return `${first}/.../${middle ? `${middle}/` : ''}${last}`;
109
+ };
110
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/ui/unified/layout.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "erosolar-cli",
3
- "version": "1.7.213",
3
+ "version": "1.7.215",
4
4
  "description": "Unified AI agent framework for the command line - Multi-provider support with schema-driven tools, code intelligence, and transparent reasoning",
5
5
  "main": "dist/bin/erosolar.js",
6
6
  "type": "module",
@@ -1,108 +0,0 @@
1
- /**
2
- * FixedInputArea - Claude Code style chat box
3
- *
4
- * Simple, clean implementation that keeps the input area fixed at the bottom
5
- * while output scrolls above. Uses terminal scroll regions properly.
6
- *
7
- * Key principles:
8
- * 1. ONE scroll region - set once at start, reset once at end
9
- * 2. Protected bottom area - output can never touch it
10
- * 3. Cursor always at input - no jumping around
11
- * 4. Minimal ANSI codes - only what's necessary
12
- */
13
- export interface FixedInputAreaConfig {
14
- /** Number of lines to reserve at the bottom (default: 3) */
15
- reservedLines?: number;
16
- /** Stream to write to (default: process.stdout) */
17
- stream?: NodeJS.WriteStream;
18
- }
19
- export declare class FixedInputArea {
20
- private readonly stream;
21
- private readonly reservedLines;
22
- private isActive;
23
- private inputBuffer;
24
- private cursorPosition;
25
- private queuedCommands;
26
- private statusHint;
27
- constructor(config?: FixedInputAreaConfig);
28
- /**
29
- * Enable the fixed input area.
30
- * Call this when starting AI response/streaming.
31
- */
32
- enable(): void;
33
- /**
34
- * Disable the fixed input area.
35
- * Call this when AI response/streaming ends.
36
- */
37
- disable(): void;
38
- /**
39
- * Render the fixed input area at the bottom.
40
- * This includes: separator line, input prompt, and status hints.
41
- */
42
- renderInputArea(): void;
43
- /**
44
- * Handle character input.
45
- */
46
- handleInput(char: string): void;
47
- /**
48
- * Handle backspace.
49
- */
50
- handleBackspace(): void;
51
- /**
52
- * Handle delete key.
53
- */
54
- handleDelete(): void;
55
- /**
56
- * Handle left arrow.
57
- */
58
- handleLeft(): void;
59
- /**
60
- * Handle right arrow.
61
- */
62
- handleRight(): void;
63
- /**
64
- * Handle home key.
65
- */
66
- handleHome(): void;
67
- /**
68
- * Handle end key.
69
- */
70
- handleEnd(): void;
71
- /**
72
- * Handle enter key - queue the current input.
73
- */
74
- handleEnter(): string | null;
75
- /**
76
- * Handle clear line (Ctrl+U).
77
- */
78
- handleClearLine(): void;
79
- /**
80
- * Get and clear queued commands.
81
- */
82
- getQueuedCommands(): string[];
83
- /**
84
- * Get current input buffer (for transferring to readline after disable).
85
- */
86
- getInputBuffer(): string;
87
- /**
88
- * Set input buffer (for restoring state).
89
- */
90
- setInputBuffer(value: string): void;
91
- /**
92
- * Set status hint to display.
93
- */
94
- setStatusHint(hint: string): void;
95
- /**
96
- * Check if the fixed input area is active.
97
- */
98
- isEnabled(): boolean;
99
- /**
100
- * Force a refresh of the input area.
101
- * Call this after external output that might have disrupted the display.
102
- */
103
- refresh(): void;
104
- private write;
105
- }
106
- export declare function getFixedInputArea(): FixedInputArea;
107
- export declare function resetFixedInputArea(): void;
108
- //# sourceMappingURL=FixedInputArea.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FixedInputArea.d.ts","sourceRoot":"","sources":["../../src/ui/FixedInputArea.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA6BH,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;CAC7B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,UAAU,CAAM;gBAEZ,MAAM,GAAE,oBAAyB;IAK7C;;;OAGG;IACH,MAAM,IAAI,IAAI;IAkBd;;;OAGG;IACH,OAAO,IAAI,IAAI;IAmBf;;;OAGG;IACH,eAAe,IAAI,IAAI;IAqDvB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa/B;;OAEG;IACH,eAAe,IAAI,IAAI;IAavB;;OAEG;IACH,YAAY,IAAI,IAAI;IAYpB;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;IACH,WAAW,IAAI,IAAI;IASnB;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;OAEG;IACH,SAAS,IAAI,IAAI;IAOjB;;OAEG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAgB5B;;OAEG;IACH,eAAe,IAAI,IAAI;IAQvB;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAM7B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQnC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOjC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,KAAK;CAOd;AAKD,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
@@ -1,312 +0,0 @@
1
- /**
2
- * FixedInputArea - Claude Code style chat box
3
- *
4
- * Simple, clean implementation that keeps the input area fixed at the bottom
5
- * while output scrolls above. Uses terminal scroll regions properly.
6
- *
7
- * Key principles:
8
- * 1. ONE scroll region - set once at start, reset once at end
9
- * 2. Protected bottom area - output can never touch it
10
- * 3. Cursor always at input - no jumping around
11
- * 4. Minimal ANSI codes - only what's necessary
12
- */
13
- // ANSI escape codes
14
- const ESC = '\x1b';
15
- const CSI = `${ESC}[`;
16
- const ANSI = {
17
- // Scroll region: set scrollable area from line `top` to line `bottom`
18
- setScrollRegion: (top, bottom) => `${CSI}${top};${bottom}r`,
19
- // Reset scroll region to full screen
20
- resetScrollRegion: () => `${CSI}r`,
21
- // Move cursor to specific row and column (1-indexed)
22
- moveTo: (row, col) => `${CSI}${row};${col}H`,
23
- // Move cursor to column (1-indexed)
24
- moveToCol: (col) => `${CSI}${col}G`,
25
- // Clear from cursor to end of line
26
- clearToEndOfLine: () => `${CSI}K`,
27
- // Clear entire line
28
- clearLine: () => `${CSI}2K`,
29
- // Save cursor position
30
- saveCursor: () => `${ESC}7`,
31
- // Restore cursor position
32
- restoreCursor: () => `${ESC}8`,
33
- // Hide cursor
34
- hideCursor: () => `${CSI}?25l`,
35
- // Show cursor
36
- showCursor: () => `${CSI}?25h`,
37
- };
38
- export class FixedInputArea {
39
- stream;
40
- reservedLines;
41
- isActive = false;
42
- inputBuffer = '';
43
- cursorPosition = 0;
44
- queuedCommands = [];
45
- statusHint = '';
46
- constructor(config = {}) {
47
- this.stream = config.stream ?? process.stdout;
48
- this.reservedLines = config.reservedLines ?? 3;
49
- }
50
- /**
51
- * Enable the fixed input area.
52
- * Call this when starting AI response/streaming.
53
- */
54
- enable() {
55
- if (this.isActive || !this.stream.isTTY)
56
- return;
57
- const rows = this.stream.rows ?? 24;
58
- const scrollBottom = rows - this.reservedLines;
59
- // Set scroll region to exclude the bottom reserved lines
60
- this.write(ANSI.setScrollRegion(1, scrollBottom));
61
- // Move cursor to bottom of scroll region (where output will flow)
62
- this.write(ANSI.moveTo(scrollBottom, 1));
63
- // Render the fixed input area at the bottom
64
- this.renderInputArea();
65
- this.isActive = true;
66
- }
67
- /**
68
- * Disable the fixed input area.
69
- * Call this when AI response/streaming ends.
70
- */
71
- disable() {
72
- if (!this.isActive)
73
- return;
74
- // Reset scroll region to full screen
75
- this.write(ANSI.resetScrollRegion());
76
- // Clear the reserved area (it will be replaced by normal prompt)
77
- const rows = this.stream.rows ?? 24;
78
- for (let i = 0; i < this.reservedLines; i++) {
79
- this.write(ANSI.moveTo(rows - i, 1));
80
- this.write(ANSI.clearLine());
81
- }
82
- // Move cursor to the bottom
83
- this.write(ANSI.moveTo(rows, 1));
84
- this.isActive = false;
85
- }
86
- /**
87
- * Render the fixed input area at the bottom.
88
- * This includes: separator line, input prompt, and status hints.
89
- */
90
- renderInputArea() {
91
- if (!this.stream.isTTY)
92
- return;
93
- const rows = this.stream.rows ?? 24;
94
- const cols = this.stream.columns ?? 80;
95
- // Save cursor position (we're in the scroll region)
96
- this.write(ANSI.saveCursor());
97
- // Line 1 of reserved area: Separator
98
- const separatorRow = rows - this.reservedLines + 1;
99
- this.write(ANSI.moveTo(separatorRow, 1));
100
- this.write(ANSI.clearLine());
101
- const separatorWidth = Math.min(cols - 2, 60);
102
- this.write('─'.repeat(separatorWidth));
103
- // Line 2 of reserved area: Input prompt
104
- const inputRow = separatorRow + 1;
105
- this.write(ANSI.moveTo(inputRow, 1));
106
- this.write(ANSI.clearLine());
107
- this.write('> ');
108
- // Display input buffer (truncate if too long)
109
- const maxInputWidth = cols - 4;
110
- let displayInput = this.inputBuffer;
111
- if (displayInput.length > maxInputWidth) {
112
- displayInput = '…' + displayInput.slice(-(maxInputWidth - 1));
113
- }
114
- this.write(displayInput);
115
- // Line 3 of reserved area: Status hints
116
- const statusRow = inputRow + 1;
117
- this.write(ANSI.moveTo(statusRow, 1));
118
- this.write(ANSI.clearLine());
119
- // Build status line
120
- const hints = [];
121
- if (this.queuedCommands.length > 0) {
122
- hints.push(`${this.queuedCommands.length} queued`);
123
- }
124
- hints.push('Esc: cancel', 'Enter: queue');
125
- if (this.statusHint) {
126
- hints.unshift(this.statusHint);
127
- }
128
- this.write(` ${hints.join(' · ')}`);
129
- // Position cursor at the input (after "> " and the input text)
130
- const cursorCol = 3 + Math.min(this.cursorPosition, displayInput.length);
131
- this.write(ANSI.moveTo(inputRow, cursorCol));
132
- // Note: We do NOT restore cursor here - we WANT the cursor to stay at the input
133
- }
134
- /**
135
- * Handle character input.
136
- */
137
- handleInput(char) {
138
- // Insert character at cursor position
139
- this.inputBuffer =
140
- this.inputBuffer.slice(0, this.cursorPosition) +
141
- char +
142
- this.inputBuffer.slice(this.cursorPosition);
143
- this.cursorPosition += char.length;
144
- if (this.isActive) {
145
- this.renderInputArea();
146
- }
147
- }
148
- /**
149
- * Handle backspace.
150
- */
151
- handleBackspace() {
152
- if (this.cursorPosition > 0) {
153
- this.inputBuffer =
154
- this.inputBuffer.slice(0, this.cursorPosition - 1) +
155
- this.inputBuffer.slice(this.cursorPosition);
156
- this.cursorPosition--;
157
- if (this.isActive) {
158
- this.renderInputArea();
159
- }
160
- }
161
- }
162
- /**
163
- * Handle delete key.
164
- */
165
- handleDelete() {
166
- if (this.cursorPosition < this.inputBuffer.length) {
167
- this.inputBuffer =
168
- this.inputBuffer.slice(0, this.cursorPosition) +
169
- this.inputBuffer.slice(this.cursorPosition + 1);
170
- if (this.isActive) {
171
- this.renderInputArea();
172
- }
173
- }
174
- }
175
- /**
176
- * Handle left arrow.
177
- */
178
- handleLeft() {
179
- if (this.cursorPosition > 0) {
180
- this.cursorPosition--;
181
- if (this.isActive) {
182
- this.renderInputArea();
183
- }
184
- }
185
- }
186
- /**
187
- * Handle right arrow.
188
- */
189
- handleRight() {
190
- if (this.cursorPosition < this.inputBuffer.length) {
191
- this.cursorPosition++;
192
- if (this.isActive) {
193
- this.renderInputArea();
194
- }
195
- }
196
- }
197
- /**
198
- * Handle home key.
199
- */
200
- handleHome() {
201
- this.cursorPosition = 0;
202
- if (this.isActive) {
203
- this.renderInputArea();
204
- }
205
- }
206
- /**
207
- * Handle end key.
208
- */
209
- handleEnd() {
210
- this.cursorPosition = this.inputBuffer.length;
211
- if (this.isActive) {
212
- this.renderInputArea();
213
- }
214
- }
215
- /**
216
- * Handle enter key - queue the current input.
217
- */
218
- handleEnter() {
219
- const input = this.inputBuffer.trim();
220
- if (input) {
221
- this.queuedCommands.push(input);
222
- this.inputBuffer = '';
223
- this.cursorPosition = 0;
224
- if (this.isActive) {
225
- this.renderInputArea();
226
- }
227
- return input;
228
- }
229
- return null;
230
- }
231
- /**
232
- * Handle clear line (Ctrl+U).
233
- */
234
- handleClearLine() {
235
- this.inputBuffer = '';
236
- this.cursorPosition = 0;
237
- if (this.isActive) {
238
- this.renderInputArea();
239
- }
240
- }
241
- /**
242
- * Get and clear queued commands.
243
- */
244
- getQueuedCommands() {
245
- const commands = this.queuedCommands;
246
- this.queuedCommands = [];
247
- return commands;
248
- }
249
- /**
250
- * Get current input buffer (for transferring to readline after disable).
251
- */
252
- getInputBuffer() {
253
- return this.inputBuffer;
254
- }
255
- /**
256
- * Set input buffer (for restoring state).
257
- */
258
- setInputBuffer(value) {
259
- this.inputBuffer = value;
260
- this.cursorPosition = value.length;
261
- if (this.isActive) {
262
- this.renderInputArea();
263
- }
264
- }
265
- /**
266
- * Set status hint to display.
267
- */
268
- setStatusHint(hint) {
269
- this.statusHint = hint;
270
- if (this.isActive) {
271
- this.renderInputArea();
272
- }
273
- }
274
- /**
275
- * Check if the fixed input area is active.
276
- */
277
- isEnabled() {
278
- return this.isActive;
279
- }
280
- /**
281
- * Force a refresh of the input area.
282
- * Call this after external output that might have disrupted the display.
283
- */
284
- refresh() {
285
- if (this.isActive) {
286
- this.renderInputArea();
287
- }
288
- }
289
- write(data) {
290
- try {
291
- this.stream.write(data);
292
- }
293
- catch {
294
- // Ignore write errors
295
- }
296
- }
297
- }
298
- // Singleton instance
299
- let instance = null;
300
- export function getFixedInputArea() {
301
- if (!instance) {
302
- instance = new FixedInputArea();
303
- }
304
- return instance;
305
- }
306
- export function resetFixedInputArea() {
307
- if (instance?.isEnabled()) {
308
- instance.disable();
309
- }
310
- instance = null;
311
- }
312
- //# sourceMappingURL=FixedInputArea.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FixedInputArea.js","sourceRoot":"","sources":["../../src/ui/FixedInputArea.ts"],"names":[],"mappings":"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"}