erosolar-cli 1.7.109 → 1.7.111

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 (35) hide show
  1. package/agents/erosolar-code.rules.json +35 -0
  2. package/dist/bin/erosolar.js +1 -0
  3. package/dist/bin/erosolar.js.map +1 -1
  4. package/dist/core/toolRuntime.d.ts +26 -0
  5. package/dist/core/toolRuntime.d.ts.map +1 -1
  6. package/dist/core/toolRuntime.js +102 -0
  7. package/dist/core/toolRuntime.js.map +1 -1
  8. package/dist/shell/enhancedInteractiveShell.d.ts +42 -0
  9. package/dist/shell/enhancedInteractiveShell.d.ts.map +1 -0
  10. package/dist/shell/enhancedInteractiveShell.js +139 -0
  11. package/dist/shell/enhancedInteractiveShell.js.map +1 -0
  12. package/dist/shell/enhancedShellApp.d.ts +22 -0
  13. package/dist/shell/enhancedShellApp.d.ts.map +1 -0
  14. package/dist/shell/enhancedShellApp.js +148 -0
  15. package/dist/shell/enhancedShellApp.js.map +1 -0
  16. package/dist/tools/diffUtils.d.ts +6 -0
  17. package/dist/tools/diffUtils.d.ts.map +1 -1
  18. package/dist/tools/diffUtils.js +110 -0
  19. package/dist/tools/diffUtils.js.map +1 -1
  20. package/dist/tools/editTools.d.ts.map +1 -1
  21. package/dist/tools/editTools.js +29 -12
  22. package/dist/tools/editTools.js.map +1 -1
  23. package/dist/ui/ShellUIAdapter.d.ts +4 -0
  24. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  25. package/dist/ui/ShellUIAdapter.js +18 -0
  26. package/dist/ui/ShellUIAdapter.js.map +1 -1
  27. package/dist/ui/enhancedPinnedChatBox.d.ts +93 -0
  28. package/dist/ui/enhancedPinnedChatBox.d.ts.map +1 -0
  29. package/dist/ui/enhancedPinnedChatBox.js +372 -0
  30. package/dist/ui/enhancedPinnedChatBox.js.map +1 -0
  31. package/dist/ui/persistentPrompt.d.ts +5 -4
  32. package/dist/ui/persistentPrompt.d.ts.map +1 -1
  33. package/dist/ui/persistentPrompt.js +34 -13
  34. package/dist/ui/persistentPrompt.js.map +1 -1
  35. package/package.json +1 -1
@@ -0,0 +1,93 @@
1
+ /**
2
+ * EnhancedPinnedChatBox - Modified version of PinnedChatBox with persistent visibility during streaming
3
+ * and enhanced paste handling
4
+ */
5
+ export interface QueuedCommand {
6
+ id: string;
7
+ text: string;
8
+ type: 'request' | 'continuous' | 'slash';
9
+ timestamp: number;
10
+ preview: string;
11
+ }
12
+ export interface PinnedChatBoxState {
13
+ isProcessing: boolean;
14
+ queuedCommands: QueuedCommand[];
15
+ currentInput: string;
16
+ contextUsage: number;
17
+ statusMessage: string | null;
18
+ isVisible: boolean;
19
+ }
20
+ export declare class EnhancedPinnedChatBox {
21
+ private writeStream;
22
+ private state;
23
+ private reservedLines;
24
+ private _lastRenderedHeight;
25
+ private inputBuffer;
26
+ private cursorPosition;
27
+ private commandIdCounter;
28
+ private onCommandQueued?;
29
+ private onInputSubmit?;
30
+ private renderScheduled;
31
+ private isEnabled;
32
+ private isDisposed;
33
+ private lastRenderTime;
34
+ private renderThrottleMs;
35
+ private maxInputLength;
36
+ private maxQueueSize;
37
+ private readonly ansiPattern;
38
+ private readonly oscPattern;
39
+ private readonly maxStatusMessageLength;
40
+ private scrollRegionActive;
41
+ private inputHistory;
42
+ private historyIndex;
43
+ private tempCurrentInput;
44
+ private readonly maxHistorySize;
45
+ private isPastedBlock;
46
+ private pastedFullContent;
47
+ private pasteStartTime;
48
+ private pasteLineCount;
49
+ private readonly maxPasteLines;
50
+ private outputInterceptorCleanup?;
51
+ constructor(writeStream: NodeJS.WriteStream, _promptText?: string, options?: {
52
+ onCommandQueued?: (cmd: QueuedCommand) => void;
53
+ onInputSubmit?: (input: string) => void;
54
+ maxInputLength?: number;
55
+ maxQueueSize?: number;
56
+ });
57
+ /**
58
+ * Enhanced paste detection with summarization
59
+ */
60
+ handlePaste(content: string): void;
61
+ /**
62
+ * Clear paste state
63
+ */
64
+ private clearPastedBlock;
65
+ /**
66
+ * Handle character input with paste detection
67
+ */
68
+ handleCharacter(char: string): void;
69
+ /**
70
+ * Handle Enter key - only submit when explicitly pressed
71
+ */
72
+ handleEnter(): string | null;
73
+ /**
74
+ * Enhanced render that always shows during processing
75
+ */
76
+ render(): void;
77
+ /**
78
+ * Render persistent input during processing
79
+ */
80
+ renderPersistentInput(): void;
81
+ private supportsRendering;
82
+ private safeWrite;
83
+ private sanitizeCommandText;
84
+ private sanitizeStatusMessage;
85
+ private addToHistory;
86
+ setEnabled(enabled: boolean): void;
87
+ setProcessing(isProcessing: boolean): void;
88
+ setContextUsage(percentage: number): void;
89
+ setStatusMessage(message: string | null): void;
90
+ queueCommand(text: string, type?: 'request' | 'continuous' | 'slash'): QueuedCommand | null;
91
+ clearQueue(): void;
92
+ }
93
+ //# sourceMappingURL=enhancedPinnedChatBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhancedPinnedChatBox.d.ts","sourceRoot":"","sources":["../../src/ui/enhancedPinnedChatBox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,372 @@
1
+ /**
2
+ * EnhancedPinnedChatBox - Modified version of PinnedChatBox with persistent visibility during streaming
3
+ * and enhanced paste handling
4
+ */
5
+ import { theme } from './theme.js';
6
+ import { ANSI } from './ansi.js';
7
+ export class EnhancedPinnedChatBox {
8
+ writeStream;
9
+ state;
10
+ reservedLines = 2;
11
+ _lastRenderedHeight = 0;
12
+ inputBuffer = '';
13
+ cursorPosition = 0;
14
+ commandIdCounter = 0;
15
+ onCommandQueued;
16
+ onInputSubmit;
17
+ renderScheduled = false;
18
+ isEnabled = true;
19
+ isDisposed = false;
20
+ lastRenderTime = 0;
21
+ renderThrottleMs = 16;
22
+ maxInputLength = 10000;
23
+ maxQueueSize = 100;
24
+ ansiPattern = /[\u001B\u009B][[\]()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
25
+ oscPattern = /\u001b\][^\u0007]*(?:\u0007|\u001b\\)/g;
26
+ maxStatusMessageLength = 200;
27
+ // Scroll region management
28
+ scrollRegionActive = false;
29
+ // Input history
30
+ inputHistory = [];
31
+ historyIndex = -1;
32
+ tempCurrentInput = '';
33
+ maxHistorySize = 100;
34
+ // Enhanced paste tracking
35
+ isPastedBlock = false;
36
+ pastedFullContent = '';
37
+ pasteStartTime = 0;
38
+ pasteLineCount = 0;
39
+ maxPasteLines = 50;
40
+ outputInterceptorCleanup;
41
+ constructor(writeStream, _promptText = '> ', options = {}) {
42
+ this.writeStream = writeStream;
43
+ this.onCommandQueued = options.onCommandQueued;
44
+ this.onInputSubmit = options.onInputSubmit;
45
+ this.maxInputLength = options.maxInputLength ?? this.maxInputLength;
46
+ this.maxQueueSize = options.maxQueueSize ?? this.maxQueueSize;
47
+ this.state = {
48
+ isProcessing: false,
49
+ queuedCommands: [],
50
+ currentInput: '',
51
+ contextUsage: 0,
52
+ statusMessage: null,
53
+ isVisible: true,
54
+ };
55
+ }
56
+ /**
57
+ * Enhanced paste detection with summarization
58
+ */
59
+ handlePaste(content) {
60
+ if (this.isDisposed)
61
+ return;
62
+ const lines = content.split('\n');
63
+ const lineCount = lines.length;
64
+ const charCount = content.length;
65
+ this.pasteStartTime = Date.now();
66
+ this.pasteLineCount = lineCount;
67
+ // For large pastes, show summary instead of full content
68
+ if (lineCount > this.maxPasteLines || charCount > 2000) {
69
+ this.isPastedBlock = true;
70
+ this.pastedFullContent = content;
71
+ const summaryLines = lines.slice(0, 5);
72
+ const remainingLines = lineCount - 5;
73
+ const summary = summaryLines.join('\n') +
74
+ (remainingLines > 0 ? `\n... (${remainingLines} more lines)` : '');
75
+ this.inputBuffer = summary;
76
+ this.cursorPosition = summary.length;
77
+ this.state.currentInput = summary;
78
+ this.setStatusMessage(`📋 Pasted ${lineCount} lines, ${charCount} chars - hit Enter to submit`);
79
+ }
80
+ else {
81
+ this.isPastedBlock = false;
82
+ this.pastedFullContent = '';
83
+ this.inputBuffer = content;
84
+ this.cursorPosition = content.length;
85
+ this.state.currentInput = content;
86
+ }
87
+ this.scheduleRender();
88
+ }
89
+ /**
90
+ * Clear paste state
91
+ */
92
+ clearPastedBlock() {
93
+ this.isPastedBlock = false;
94
+ this.pastedFullContent = '';
95
+ this.pasteStartTime = 0;
96
+ this.pasteLineCount = 0;
97
+ }
98
+ /**
99
+ * Handle character input with paste detection
100
+ */
101
+ handleCharacter(char) {
102
+ if (this.isDisposed)
103
+ return;
104
+ const now = Date.now();
105
+ if (this.pasteStartTime > 0 && now - this.pasteStartTime < 100) {
106
+ // Rapid input detected - treat as paste continuation
107
+ this.inputBuffer = this.inputBuffer.slice(0, this.cursorPosition) +
108
+ char +
109
+ this.inputBuffer.slice(this.cursorPosition);
110
+ this.cursorPosition += char.length;
111
+ this.state.currentInput = this.inputBuffer;
112
+ this.scheduleRender();
113
+ return;
114
+ }
115
+ // Normal character input
116
+ this.inputBuffer = this.inputBuffer.slice(0, this.cursorPosition) +
117
+ char +
118
+ this.inputBuffer.slice(this.cursorPosition);
119
+ this.cursorPosition += char.length;
120
+ this.state.currentInput = this.inputBuffer;
121
+ this.clearPastedBlock();
122
+ this.scheduleRender();
123
+ }
124
+ /**
125
+ * Handle Enter key - only submit when explicitly pressed
126
+ */
127
+ handleEnter() {
128
+ if (this.isDisposed)
129
+ return null;
130
+ let input;
131
+ // If we have a pasted block, use the full content
132
+ if (this.isPastedBlock && this.pastedFullContent) {
133
+ input = this.sanitizeCommandText(this.pastedFullContent);
134
+ }
135
+ else {
136
+ input = this.sanitizeCommandText(this.inputBuffer);
137
+ }
138
+ if (!input)
139
+ return null;
140
+ // Add to history before processing
141
+ const historyEntry = this.isPastedBlock
142
+ ? `[Pasted ${this.pasteLineCount} lines] ${input.slice(0, 100)}...`
143
+ : input;
144
+ this.addToHistory(historyEntry);
145
+ // If processing, queue the command instead of submitting
146
+ if (this.state.isProcessing) {
147
+ const type = input.startsWith('/') ? 'slash' : 'request';
148
+ const queued = this.queueCommand(input, type);
149
+ if (!queued) {
150
+ this.setStatusMessage(`Queue is full (${this.maxQueueSize}). Submit after current task or clear queued items.`);
151
+ return null;
152
+ }
153
+ this.clearInput();
154
+ return null;
155
+ }
156
+ // Clear input and paste state, then notify
157
+ this.clearInput();
158
+ if (this.onInputSubmit) {
159
+ this.onInputSubmit(input);
160
+ }
161
+ return input;
162
+ }
163
+ /**
164
+ * Enhanced render that always shows during processing
165
+ */
166
+ render() {
167
+ if (!this.state.isVisible || !this.supportsRendering())
168
+ return;
169
+ // ALWAYS render during processing - use persistent input mode
170
+ if (this.state.isProcessing) {
171
+ this.renderPersistentInput();
172
+ return;
173
+ }
174
+ // Not processing - render the standard status box
175
+ this.lastRenderTime = Date.now();
176
+ try {
177
+ const cols = Math.max(this.writeStream.columns || 80, 40);
178
+ const separatorWidth = Math.min(cols - 2, 72);
179
+ // Build status message
180
+ const statusParts = [];
181
+ // Processing status
182
+ if (this.state.statusMessage) {
183
+ const maxLen = Math.max(20, cols - 30);
184
+ const msg = this.state.statusMessage.length > maxLen
185
+ ? `${this.state.statusMessage.slice(0, maxLen - 3)}...`
186
+ : this.state.statusMessage;
187
+ statusParts.push(theme.ui.muted(msg));
188
+ }
189
+ if (statusParts.length === 0) {
190
+ // Not processing and no status - nothing to show
191
+ return;
192
+ }
193
+ const statusLine = statusParts.join(' │ ');
194
+ const separator = theme.ui.border('─'.repeat(separatorWidth));
195
+ // Write the 3-line pinned box
196
+ this.safeWrite(`\r${ANSI.CLEAR_LINE}${separator}\n`);
197
+ this.safeWrite(`${ANSI.CLEAR_LINE}${statusLine}\n`);
198
+ this.safeWrite(`${ANSI.CLEAR_LINE}${theme.ui.muted('>')} `);
199
+ this._lastRenderedHeight = 3;
200
+ }
201
+ catch {
202
+ // Silently handle render errors
203
+ }
204
+ }
205
+ /**
206
+ * Render persistent input during processing
207
+ */
208
+ renderPersistentInput() {
209
+ if (!this.supportsRendering())
210
+ return;
211
+ const rows = this.writeStream.rows || 24;
212
+ const cols = Math.max(this.writeStream.columns || 80, 40);
213
+ // Save cursor position
214
+ this.safeWrite(ANSI.SAVE_CURSOR);
215
+ // Move to the reserved bottom area (outside scroll region)
216
+ this.safeWrite(ANSI.CURSOR_TO_BOTTOM(rows - 1));
217
+ // Build status line
218
+ const queueCount = this.state.queuedCommands.length;
219
+ let statusText = '';
220
+ if (this.state.isProcessing) {
221
+ const queuePart = queueCount > 0 ? ` (${queueCount} queued)` : '';
222
+ statusText = `🔄 AI is streaming...${queuePart} [Enter: queue additional prompts]`;
223
+ }
224
+ else if (this.state.statusMessage) {
225
+ statusText = this.state.statusMessage;
226
+ }
227
+ else if (queueCount > 0) {
228
+ statusText = `${queueCount} follow-up${queueCount === 1 ? '' : 's'} queued`;
229
+ }
230
+ // Render separator and status on bottom lines
231
+ const separatorWidth = Math.min(cols - 2, 72);
232
+ const separator = theme.ui.border('─'.repeat(separatorWidth));
233
+ // Line rows-1: separator
234
+ this.safeWrite(ANSI.CLEAR_LINE);
235
+ this.safeWrite(separator);
236
+ // Line rows: input line with prompt or status
237
+ this.safeWrite(`\n${ANSI.CLEAR_LINE}`);
238
+ // Show actual input line during processing so user can see what they're typing
239
+ const promptPrefix = theme.ui.muted('> ');
240
+ const currentInput = this.inputBuffer;
241
+ const maxInputDisplay = cols - 4;
242
+ // Truncate input if too long, showing end of input
243
+ let displayInput = currentInput;
244
+ if (displayInput.length > maxInputDisplay) {
245
+ displayInput = '…' + displayInput.slice(-(maxInputDisplay - 1));
246
+ }
247
+ // Render prompt + input
248
+ this.safeWrite(promptPrefix);
249
+ this.safeWrite(displayInput);
250
+ // Show status hint on the right if there's room
251
+ if (statusText && currentInput.length < maxInputDisplay - statusText.length - 5) {
252
+ const padding = cols - 3 - currentInput.length - statusText.length - 3;
253
+ if (padding > 3) {
254
+ this.safeWrite(' '.repeat(padding));
255
+ this.safeWrite(theme.ui.muted(statusText.slice(0, cols - currentInput.length - 6)));
256
+ }
257
+ }
258
+ // Restore cursor to scroll region
259
+ this.safeWrite(ANSI.RESTORE_CURSOR);
260
+ }
261
+ // ... (other methods remain largely the same as PinnedChatBox)
262
+ supportsRendering() {
263
+ return this.isEnabled &&
264
+ !this.isDisposed &&
265
+ this.writeStream.writable &&
266
+ this.writeStream.isTTY;
267
+ }
268
+ safeWrite(content) {
269
+ try {
270
+ if (this.writeStream.writable) {
271
+ this.writeStream.write(content);
272
+ }
273
+ }
274
+ catch {
275
+ // Swallow write errors
276
+ }
277
+ }
278
+ sanitizeCommandText(text) {
279
+ return text
280
+ .replace(this.ansiPattern, '')
281
+ .replace(this.oscPattern, '')
282
+ .trim();
283
+ }
284
+ sanitizeStatusMessage(message) {
285
+ if (!message)
286
+ return null;
287
+ return message
288
+ .replace(this.ansiPattern, '')
289
+ .replace(this.oscPattern, '')
290
+ .slice(0, this.maxStatusMessageLength);
291
+ }
292
+ addToHistory(entry) {
293
+ if (!entry.trim())
294
+ return;
295
+ const existingIndex = this.inputHistory.indexOf(entry);
296
+ if (existingIndex >= 0) {
297
+ this.inputHistory.splice(existingIndex, 1);
298
+ }
299
+ this.inputHistory.push(entry);
300
+ if (this.inputHistory.length > this.maxHistorySize) {
301
+ this.inputHistory = this.inputHistory.slice(-this.maxHistorySize);
302
+ }
303
+ }
304
+ setEnabled(enabled) {
305
+ if (this.isDisposed)
306
+ return;
307
+ if (!enabled && this.isEnabled) {
308
+ this.clear();
309
+ }
310
+ this.isEnabled = enabled;
311
+ if (enabled) {
312
+ this.scheduleRender();
313
+ }
314
+ }
315
+ setProcessing(isProcessing) {
316
+ if (this.isDisposed)
317
+ return;
318
+ this.state.isProcessing = isProcessing;
319
+ this.scheduleRender();
320
+ }
321
+ setContextUsage(percentage) {
322
+ if (this.isDisposed)
323
+ return;
324
+ const value = Number.isFinite(percentage) ? percentage : 0;
325
+ this.state.contextUsage = Math.max(0, Math.min(100, value));
326
+ }
327
+ setStatusMessage(message) {
328
+ if (this.isDisposed)
329
+ return;
330
+ this.state.statusMessage = this.sanitizeStatusMessage(message);
331
+ this.scheduleRender();
332
+ }
333
+ queueCommand(text, type = 'request') {
334
+ if (this.isDisposed)
335
+ return null;
336
+ if (typeof text !== 'string')
337
+ return null;
338
+ const sanitizedText = this.sanitizeCommandText(text);
339
+ if (!sanitizedText)
340
+ return null;
341
+ if (this.state.queuedCommands.length >= this.maxQueueSize) {
342
+ const idx = this.state.queuedCommands.findIndex(c => c.type !== 'slash');
343
+ if (idx >= 0) {
344
+ this.state.queuedCommands.splice(idx, 1);
345
+ }
346
+ else {
347
+ return null;
348
+ }
349
+ }
350
+ const truncated = sanitizedText.slice(0, this.maxInputLength);
351
+ const preview = truncated.length > 60 ? `${truncated.slice(0, 57)}...` : truncated;
352
+ const cmd = {
353
+ id: `cmd-${++this.commandIdCounter}`,
354
+ text: truncated,
355
+ type,
356
+ timestamp: Date.now(),
357
+ preview,
358
+ };
359
+ this.state.queuedCommands.push(cmd);
360
+ this.scheduleRender();
361
+ if (this.onCommandQueued) {
362
+ this.onCommandQueued(cmd);
363
+ }
364
+ return cmd;
365
+ }
366
+ clearQueue() {
367
+ if (this.isDisposed)
368
+ return;
369
+ this.state.que;
370
+ }
371
+ }
372
+ //# sourceMappingURL=enhancedPinnedChatBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhancedPinnedChatBox.js","sourceRoot":"","sources":["../../src/ui/enhancedPinnedChatBox.ts"],"names":[],"mappings":"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"}
@@ -182,8 +182,8 @@ export declare class PinnedChatBox {
182
182
  private pendingAfterWriteRender;
183
183
  /**
184
184
  * Register with the display's output interceptor system.
185
- * This ensures the pinned area is cleared before output (to prevent ghost lines)
186
- * and re-rendered after output (to maintain the pinned position).
185
+ * With scroll regions, output flows in the scrollable area while
186
+ * the input stays pinned at the bottom.
187
187
  */
188
188
  registerOutputInterceptor(display: {
189
189
  registerOutputInterceptor: (i: {
@@ -241,6 +241,7 @@ export declare class PinnedChatBox {
241
241
  setEnabled(enabled: boolean): void;
242
242
  /**
243
243
  * Set processing state
244
+ * Enables scroll region during processing to keep input visible while streaming
244
245
  */
245
246
  setProcessing(isProcessing: boolean): void;
246
247
  /**
@@ -388,8 +389,8 @@ export declare class PinnedChatBox {
388
389
  * Line 2: Status (⏳ Processing... or context info)
389
390
  * Line 3: Muted prompt (> ) for queued input
390
391
  *
391
- * DISABLED during processing to prevent duplicating lines during streaming.
392
- * Status updates are tracked but not rendered - content flows naturally.
392
+ * During processing with scroll region active, uses renderPersistentInput()
393
+ * to keep the input visible at the bottom while streaming continues above.
393
394
  */
394
395
  render(): void;
395
396
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"persistentPrompt.d.ts","sourceRoot":"","sources":["../../src/ui/persistentPrompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistentPrompt.d.ts","sourceRoot":"","sources":["../../src/ui/persistentPrompt.ts"],"names":[],"mappings":"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"}
@@ -264,21 +264,32 @@ export class PinnedChatBox {
264
264
  pendingAfterWriteRender = null;
265
265
  /**
266
266
  * Register with the display's output interceptor system.
267
- * This ensures the pinned area is cleared before output (to prevent ghost lines)
268
- * and re-rendered after output (to maintain the pinned position).
267
+ * With scroll regions, output flows in the scrollable area while
268
+ * the input stays pinned at the bottom.
269
269
  */
270
270
  registerOutputInterceptor(display) {
271
271
  if (this.outputInterceptorCleanup) {
272
272
  this.outputInterceptorCleanup();
273
273
  }
274
- // Simplified: don't intercept output during processing
275
- // Let streaming content flow naturally, only render status box at start/end
276
274
  this.outputInterceptorCleanup = display.registerOutputInterceptor({
277
275
  beforeWrite: () => {
278
- // No-op: let output flow without clearing
276
+ // With scroll regions active, output naturally stays in the scroll region
277
+ // No need to clear - terminal handles it
279
278
  },
280
279
  afterWrite: () => {
281
- // No-op: don't re-render on every write - too disruptive
280
+ // Debounced re-render of persistent input after streaming output
281
+ if (this.scrollRegionActive && this.state.isProcessing) {
282
+ if (this.pendingAfterWriteRender) {
283
+ clearTimeout(this.pendingAfterWriteRender);
284
+ }
285
+ // Debounce to ~30fps to avoid excessive rendering during fast streaming
286
+ this.pendingAfterWriteRender = setTimeout(() => {
287
+ this.pendingAfterWriteRender = null;
288
+ if (!this.isDisposed && this.scrollRegionActive) {
289
+ this.renderPersistentInput();
290
+ }
291
+ }, 33);
292
+ }
282
293
  },
283
294
  });
284
295
  }
@@ -453,11 +464,21 @@ export class PinnedChatBox {
453
464
  }
454
465
  /**
455
466
  * Set processing state
467
+ * Enables scroll region during processing to keep input visible while streaming
456
468
  */
457
469
  setProcessing(isProcessing) {
458
470
  if (this.isDisposed)
459
471
  return;
472
+ const wasProcessing = this.state.isProcessing;
460
473
  this.state.isProcessing = isProcessing;
474
+ if (isProcessing && !wasProcessing) {
475
+ // Starting processing - enable scroll region to keep input pinned at bottom
476
+ this.enableScrollRegion();
477
+ }
478
+ else if (!isProcessing && wasProcessing) {
479
+ // Done processing - disable scroll region
480
+ this.disableScrollRegion();
481
+ }
461
482
  this.scheduleRender();
462
483
  }
463
484
  /**
@@ -1014,18 +1035,18 @@ export class PinnedChatBox {
1014
1035
  * Line 2: Status (⏳ Processing... or context info)
1015
1036
  * Line 3: Muted prompt (> ) for queued input
1016
1037
  *
1017
- * DISABLED during processing to prevent duplicating lines during streaming.
1018
- * Status updates are tracked but not rendered - content flows naturally.
1038
+ * During processing with scroll region active, uses renderPersistentInput()
1039
+ * to keep the input visible at the bottom while streaming continues above.
1019
1040
  */
1020
1041
  render() {
1021
1042
  if (!this.state.isVisible || !this.supportsRendering())
1022
1043
  return;
1023
- // Don't render during processing - streaming content would conflict
1024
- // with any status box updates. Let content flow naturally.
1025
- // Status is shown at start/end of processing only.
1026
- if (this.state.isProcessing)
1044
+ // During processing with scroll region active, update the persistent input area
1045
+ if (this.state.isProcessing && this.scrollRegionActive) {
1046
+ this.renderPersistentInput();
1027
1047
  return;
1028
- // Only render when not processing (e.g., idle state, startup)
1048
+ }
1049
+ // Not processing - render the standard status box
1029
1050
  this.lastRenderTime = Date.now();
1030
1051
  try {
1031
1052
  const cols = Math.max(this.writeStream.columns || 80, 40);