erosolar-cli 1.7.117 → 1.7.119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/agent.js +4 -4
- package/dist/core/agent.js.map +1 -1
- package/dist/shell/systemPrompt.d.ts.map +1 -1
- package/dist/shell/systemPrompt.js +3 -4
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/tools/editTools.d.ts.map +1 -1
- package/dist/tools/editTools.js +29 -6
- package/dist/tools/editTools.js.map +1 -1
- package/dist/tools/fileTools.d.ts.map +1 -1
- package/dist/tools/fileTools.js +2 -126
- package/dist/tools/fileTools.js.map +1 -1
- package/dist/ui/EnhancedPinnedChatBox.d.ts +2 -0
- package/dist/ui/EnhancedPinnedChatBox.d.ts.map +1 -0
- package/dist/ui/EnhancedPinnedChatBox.js +3 -0
- package/dist/ui/EnhancedPinnedChatBox.js.map +1 -0
- package/dist/ui/persistentPrompt.d.ts +32 -2
- package/dist/ui/persistentPrompt.d.ts.map +1 -1
- package/dist/ui/persistentPrompt.js +231 -79
- package/dist/ui/persistentPrompt.js.map +1 -1
- package/package.json +1 -1
- package/dist/shell/enhancedInteractiveShell.d.ts +0 -42
- package/dist/shell/enhancedInteractiveShell.d.ts.map +0 -1
- package/dist/shell/enhancedInteractiveShell.js +0 -139
- package/dist/shell/enhancedInteractiveShell.js.map +0 -1
- package/dist/shell/enhancedShellApp.d.ts +0 -22
- package/dist/shell/enhancedShellApp.d.ts.map +0 -1
- package/dist/shell/enhancedShellApp.js +0 -148
- package/dist/shell/enhancedShellApp.js.map +0 -1
- package/dist/ui/enhancedPinnedChatBox.d.ts +0 -93
- package/dist/ui/enhancedPinnedChatBox.d.ts.map +0 -1
- package/dist/ui/enhancedPinnedChatBox.js +0 -372
- package/dist/ui/enhancedPinnedChatBox.js.map +0 -1
- package/dist/ui/persistentChatBox.d.ts +0 -137
- package/dist/ui/persistentChatBox.d.ts.map +0 -1
- package/dist/ui/persistentChatBox.js +0 -298
- package/dist/ui/persistentChatBox.js.map +0 -1
|
@@ -1,372 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enhancedPinnedChatBox.js","sourceRoot":"","sources":["../../src/ui/enhancedPinnedChatBox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Persistent Chat Box - Stays at bottom during AI streaming
|
|
3
|
-
*
|
|
4
|
-
* Features:
|
|
5
|
-
* - Always visible at bottom of terminal
|
|
6
|
-
* - Supports typing while AI is streaming
|
|
7
|
-
* - Gracefully handles long pastes without errors
|
|
8
|
-
* - Only submits to AI when user hits enter key
|
|
9
|
-
* - Integrates with existing multiline paste handler
|
|
10
|
-
*/
|
|
11
|
-
export interface PersistentChatBoxConfig {
|
|
12
|
-
/** Whether chat box is enabled */
|
|
13
|
-
enabled: boolean;
|
|
14
|
-
/** Position from bottom (lines) */
|
|
15
|
-
position: number;
|
|
16
|
-
/** Maximum lines for chat box display */
|
|
17
|
-
maxLines: number;
|
|
18
|
-
/** Whether to show paste summaries */
|
|
19
|
-
showPasteSummaries: boolean;
|
|
20
|
-
/** Whether to auto-scroll during streaming */
|
|
21
|
-
autoScroll: boolean;
|
|
22
|
-
}
|
|
23
|
-
export interface ChatBoxState {
|
|
24
|
-
/** Current input text */
|
|
25
|
-
input: string;
|
|
26
|
-
/** Whether AI is currently streaming */
|
|
27
|
-
isStreaming: boolean;
|
|
28
|
-
/** Whether user is currently typing */
|
|
29
|
-
isTyping: boolean;
|
|
30
|
-
/** Whether paste mode is active */
|
|
31
|
-
isPasteMode: boolean;
|
|
32
|
-
/** Cursor position */
|
|
33
|
-
cursorPosition: number;
|
|
34
|
-
/** History of inputs */
|
|
35
|
-
history: string[];
|
|
36
|
-
/** Current history index */
|
|
37
|
-
historyIndex: number;
|
|
38
|
-
}
|
|
39
|
-
export type ChatBoxSubmitCallback = (input: string) => void;
|
|
40
|
-
export type ChatBoxCancelCallback = () => void;
|
|
41
|
-
export declare class PersistentChatBox {
|
|
42
|
-
private rl;
|
|
43
|
-
private config;
|
|
44
|
-
private state;
|
|
45
|
-
private onSubmit;
|
|
46
|
-
private onCancel;
|
|
47
|
-
private isActive;
|
|
48
|
-
private originalPrompt;
|
|
49
|
-
private pasteBuffer;
|
|
50
|
-
private pasteMode;
|
|
51
|
-
constructor(onSubmit: ChatBoxSubmitCallback, onCancel: ChatBoxCancelCallback, config?: Partial<PersistentChatBoxConfig>);
|
|
52
|
-
/**
|
|
53
|
-
* Setup readline event handlers
|
|
54
|
-
*/
|
|
55
|
-
private setupEventHandlers;
|
|
56
|
-
/**
|
|
57
|
-
* Handle line input (when user presses enter)
|
|
58
|
-
*/
|
|
59
|
-
private handleLineInput;
|
|
60
|
-
/**
|
|
61
|
-
* Handle normal text input
|
|
62
|
-
*/
|
|
63
|
-
private handleNormalInput;
|
|
64
|
-
/**
|
|
65
|
-
* Handle paste completion
|
|
66
|
-
*/
|
|
67
|
-
private handlePasteComplete;
|
|
68
|
-
/**
|
|
69
|
-
* Handle raw data input for paste detection
|
|
70
|
-
*/
|
|
71
|
-
private handleDataInput;
|
|
72
|
-
/**
|
|
73
|
-
* Handle cancel (Ctrl+C)
|
|
74
|
-
*/
|
|
75
|
-
private handleCancel;
|
|
76
|
-
/**
|
|
77
|
-
* Handle close
|
|
78
|
-
*/
|
|
79
|
-
private handleClose;
|
|
80
|
-
/**
|
|
81
|
-
* Handle history navigation - up
|
|
82
|
-
*/
|
|
83
|
-
private handleHistoryUp;
|
|
84
|
-
/**
|
|
85
|
-
* Handle history navigation - down
|
|
86
|
-
*/
|
|
87
|
-
private handleHistoryDown;
|
|
88
|
-
/**
|
|
89
|
-
* Update the readline prompt
|
|
90
|
-
*/
|
|
91
|
-
private updatePrompt;
|
|
92
|
-
/**
|
|
93
|
-
* Set input text
|
|
94
|
-
*/
|
|
95
|
-
private setInput;
|
|
96
|
-
/**
|
|
97
|
-
* Clear input
|
|
98
|
-
*/
|
|
99
|
-
private clearInput;
|
|
100
|
-
/**
|
|
101
|
-
* Get default prompt based on streaming state
|
|
102
|
-
*/
|
|
103
|
-
private getDefaultPrompt;
|
|
104
|
-
/**
|
|
105
|
-
* Activate the chat box
|
|
106
|
-
*/
|
|
107
|
-
activate(): void;
|
|
108
|
-
/**
|
|
109
|
-
* Deactivate the chat box
|
|
110
|
-
*/
|
|
111
|
-
deactivate(): void;
|
|
112
|
-
/**
|
|
113
|
-
* Set streaming state
|
|
114
|
-
*/
|
|
115
|
-
setStreaming(isStreaming: boolean): void;
|
|
116
|
-
/**
|
|
117
|
-
* Add message to history
|
|
118
|
-
*/
|
|
119
|
-
addToHistory(message: string): void;
|
|
120
|
-
/**
|
|
121
|
-
* Get current state
|
|
122
|
-
*/
|
|
123
|
-
getState(): ChatBoxState;
|
|
124
|
-
/**
|
|
125
|
-
* Get config
|
|
126
|
-
*/
|
|
127
|
-
getConfig(): PersistentChatBoxConfig;
|
|
128
|
-
/**
|
|
129
|
-
* Update config
|
|
130
|
-
*/
|
|
131
|
-
updateConfig(config: Partial<PersistentChatBoxConfig>): void;
|
|
132
|
-
/**
|
|
133
|
-
* Dispose of resources
|
|
134
|
-
*/
|
|
135
|
-
dispose(): void;
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=PersistentChatBox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PersistentChatBox.d.ts","sourceRoot":"","sources":["../../src/ui/PersistentChatBox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8CAA8C;IAC9C,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAC5D,MAAM,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC;AAE/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAkB;gBAGjC,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,GAAE,OAAO,CAAC,uBAAuB,CAAM;IAmC/C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAUhB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAQxC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASnC;;OAEG;IACH,QAAQ,IAAI,YAAY;IAIxB;;OAEG;IACH,SAAS,IAAI,uBAAuB;IAIpC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI;IAI5D;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|