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.
- package/agents/erosolar-code.rules.json +35 -0
- package/dist/bin/erosolar.js +1 -0
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/core/toolRuntime.d.ts +26 -0
- package/dist/core/toolRuntime.d.ts.map +1 -1
- package/dist/core/toolRuntime.js +102 -0
- package/dist/core/toolRuntime.js.map +1 -1
- package/dist/shell/enhancedInteractiveShell.d.ts +42 -0
- package/dist/shell/enhancedInteractiveShell.d.ts.map +1 -0
- package/dist/shell/enhancedInteractiveShell.js +139 -0
- package/dist/shell/enhancedInteractiveShell.js.map +1 -0
- package/dist/shell/enhancedShellApp.d.ts +22 -0
- package/dist/shell/enhancedShellApp.d.ts.map +1 -0
- package/dist/shell/enhancedShellApp.js +148 -0
- package/dist/shell/enhancedShellApp.js.map +1 -0
- package/dist/tools/diffUtils.d.ts +6 -0
- package/dist/tools/diffUtils.d.ts.map +1 -1
- package/dist/tools/diffUtils.js +110 -0
- package/dist/tools/diffUtils.js.map +1 -1
- package/dist/tools/editTools.d.ts.map +1 -1
- package/dist/tools/editTools.js +29 -12
- package/dist/tools/editTools.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +4 -0
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +18 -0
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/enhancedPinnedChatBox.d.ts +93 -0
- package/dist/ui/enhancedPinnedChatBox.d.ts.map +1 -0
- package/dist/ui/enhancedPinnedChatBox.js +372 -0
- package/dist/ui/enhancedPinnedChatBox.js.map +1 -0
- package/dist/ui/persistentPrompt.d.ts +5 -4
- package/dist/ui/persistentPrompt.d.ts.map +1 -1
- package/dist/ui/persistentPrompt.js +34 -13
- package/dist/ui/persistentPrompt.js.map +1 -1
- 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
|
-
*
|
|
186
|
-
*
|
|
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
|
-
*
|
|
392
|
-
*
|
|
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":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,WAAW,CAAc;gBAErB,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,GAAE,MAAa;IAWtE;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKnD;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAIrD;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAc;gBAEpB,UAAU,GAAE,MAAa;IAIrC;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,SAAS;IAU9E;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO7B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI;IAYtC;;OAEG;IACH,YAAY,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI;IAIzC;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAOD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;CACpB;AAqBD;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAC,CAA+B;IACvD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmF;IAC/G,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IACvE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAe;IAGtD,OAAO,CAAC,kBAAkB,CAAkB;IAG5C,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAG9C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,iBAAiB,CAAc;IAEvC,2DAA2D;IAC3D,OAAO,CAAC,wBAAwB,CAAC,CAAa;gBAG5C,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,WAAW,GAAE,MAAa,EAAE,0CAA0C;IACtE,OAAO,GAAE;QACP,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;QAC/C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QACxC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB;IAkBR,sDAAsD;IACtD,OAAO,CAAC,uBAAuB,CAA8C;IAE7E;;;;OAIG;IACH,yBAAyB,CAAC,OAAO,EAAE;QAAE,yBAAyB,EAAE,CAAC,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;SAAE,KAAK,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI;
|
|
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
|
-
*
|
|
268
|
-
*
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
*
|
|
1018
|
-
*
|
|
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
|
-
//
|
|
1024
|
-
|
|
1025
|
-
|
|
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
|
-
|
|
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);
|