erosolar-cli 1.7.227 → 1.7.228
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/README.md +148 -22
- package/dist/core/aiFlowOptimizer.d.ts +26 -0
- package/dist/core/aiFlowOptimizer.d.ts.map +1 -0
- package/dist/core/aiFlowOptimizer.js +31 -0
- package/dist/core/aiFlowOptimizer.js.map +1 -0
- package/dist/core/aiOptimizationEngine.d.ts +158 -0
- package/dist/core/aiOptimizationEngine.d.ts.map +1 -0
- package/dist/core/aiOptimizationEngine.js +428 -0
- package/dist/core/aiOptimizationEngine.js.map +1 -0
- package/dist/core/aiOptimizationIntegration.d.ts +93 -0
- package/dist/core/aiOptimizationIntegration.d.ts.map +1 -0
- package/dist/core/aiOptimizationIntegration.js +250 -0
- package/dist/core/aiOptimizationIntegration.js.map +1 -0
- package/dist/core/enhancedErrorRecovery.d.ts +100 -0
- package/dist/core/enhancedErrorRecovery.d.ts.map +1 -0
- package/dist/core/enhancedErrorRecovery.js +345 -0
- package/dist/core/enhancedErrorRecovery.js.map +1 -0
- package/dist/mcp/sseClient.d.ts.map +1 -1
- package/dist/mcp/sseClient.js +18 -9
- package/dist/mcp/sseClient.js.map +1 -1
- package/dist/plugins/tools/build/buildPlugin.d.ts +6 -0
- package/dist/plugins/tools/build/buildPlugin.d.ts.map +1 -1
- package/dist/plugins/tools/build/buildPlugin.js +10 -4
- package/dist/plugins/tools/build/buildPlugin.js.map +1 -1
- package/dist/shell/claudeCodeStreamHandler.d.ts +145 -0
- package/dist/shell/claudeCodeStreamHandler.d.ts.map +1 -0
- package/dist/shell/claudeCodeStreamHandler.js +322 -0
- package/dist/shell/claudeCodeStreamHandler.js.map +1 -0
- package/dist/shell/inputQueueManager.d.ts +144 -0
- package/dist/shell/inputQueueManager.d.ts.map +1 -0
- package/dist/shell/inputQueueManager.js +290 -0
- package/dist/shell/inputQueueManager.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +2 -2
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +12 -12
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/streamingOutputManager.d.ts +115 -0
- package/dist/shell/streamingOutputManager.d.ts.map +1 -0
- package/dist/shell/streamingOutputManager.js +225 -0
- package/dist/shell/streamingOutputManager.js.map +1 -0
- package/dist/shell/terminalInput.d.ts +45 -19
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +262 -120
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/terminalInputAdapter.d.ts +8 -6
- package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
- package/dist/shell/terminalInputAdapter.js +12 -6
- package/dist/shell/terminalInputAdapter.js.map +1 -1
- package/dist/ui/persistentPrompt.d.ts +50 -0
- package/dist/ui/persistentPrompt.d.ts.map +1 -0
- package/dist/ui/persistentPrompt.js +92 -0
- package/dist/ui/persistentPrompt.js.map +1 -0
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +8 -6
- package/dist/ui/theme.js.map +1 -1
- package/dist/ui/unified/layout.d.ts.map +1 -1
- package/dist/ui/unified/layout.js +26 -13
- package/dist/ui/unified/layout.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StreamingOutputManager - Buffered output for Claude Code style UI
|
|
3
|
+
*
|
|
4
|
+
* Key design principle:
|
|
5
|
+
* - Buffer streaming output instead of writing directly to stdout
|
|
6
|
+
* - This keeps the cursor at the prompt area (no cursor movement during streaming)
|
|
7
|
+
* - Render complete response when streaming ends
|
|
8
|
+
* - The UI (prompt) stays fixed at the bottom
|
|
9
|
+
*
|
|
10
|
+
* Two modes:
|
|
11
|
+
* 1. Direct mode (bufferedMode=false): Write chunks directly to stdout (original behavior)
|
|
12
|
+
* 2. Buffered mode (bufferedMode=true): Collect chunks, render when complete
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from 'node:events';
|
|
15
|
+
export interface StreamingOutputState {
|
|
16
|
+
isStreaming: boolean;
|
|
17
|
+
charsWritten: number;
|
|
18
|
+
linesWritten: number;
|
|
19
|
+
startTime: number | null;
|
|
20
|
+
}
|
|
21
|
+
export interface StreamingOutputEvents {
|
|
22
|
+
'stream-start': () => void;
|
|
23
|
+
'stream-chunk': (chunk: string) => void;
|
|
24
|
+
'stream-end': (stats: {
|
|
25
|
+
duration: number;
|
|
26
|
+
chars: number;
|
|
27
|
+
lines: number;
|
|
28
|
+
}) => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Manages streaming output with optional buffering.
|
|
32
|
+
*
|
|
33
|
+
* Buffered mode:
|
|
34
|
+
* - Chunks are collected in a buffer
|
|
35
|
+
* - Output is rendered all at once when streaming ends
|
|
36
|
+
* - Cursor stays at prompt area (no jumping during streaming)
|
|
37
|
+
*
|
|
38
|
+
* Direct mode:
|
|
39
|
+
* - Chunks written directly to stdout (original behavior)
|
|
40
|
+
* - Cursor moves with output
|
|
41
|
+
*/
|
|
42
|
+
export declare class StreamingOutputManager extends EventEmitter {
|
|
43
|
+
private state;
|
|
44
|
+
private readonly writeStream;
|
|
45
|
+
private lastChunk;
|
|
46
|
+
private bufferedMode;
|
|
47
|
+
private outputBuffer;
|
|
48
|
+
constructor(writeStream?: NodeJS.WriteStream);
|
|
49
|
+
/**
|
|
50
|
+
* Enable or disable buffered mode
|
|
51
|
+
* When buffered, chunks are collected and rendered at the end
|
|
52
|
+
*/
|
|
53
|
+
setBufferedMode(enabled: boolean): void;
|
|
54
|
+
/**
|
|
55
|
+
* Check if buffered mode is enabled
|
|
56
|
+
*/
|
|
57
|
+
isBufferedMode(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Get the buffered content (for rendering)
|
|
60
|
+
*/
|
|
61
|
+
getBuffer(): string;
|
|
62
|
+
/**
|
|
63
|
+
* Clear the buffer
|
|
64
|
+
*/
|
|
65
|
+
clearBuffer(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if currently streaming output
|
|
68
|
+
*/
|
|
69
|
+
isStreaming(): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Begin a streaming session
|
|
72
|
+
* Resets counters and marks streaming as active
|
|
73
|
+
* In buffered mode, clears the buffer
|
|
74
|
+
*/
|
|
75
|
+
startStream(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Write a chunk of content
|
|
78
|
+
*
|
|
79
|
+
* In buffered mode: Collect in buffer (cursor stays at prompt)
|
|
80
|
+
* In direct mode: Write to stdout immediately
|
|
81
|
+
*/
|
|
82
|
+
writeChunk(chunk: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Write a complete line (adds newline)
|
|
85
|
+
*/
|
|
86
|
+
writeLine(line?: string): void;
|
|
87
|
+
/**
|
|
88
|
+
* End the streaming session
|
|
89
|
+
* In buffered mode: Renders the complete buffered output
|
|
90
|
+
* Returns statistics about what was streamed
|
|
91
|
+
*/
|
|
92
|
+
endStream(): {
|
|
93
|
+
duration: number;
|
|
94
|
+
chars: number;
|
|
95
|
+
lines: number;
|
|
96
|
+
buffer?: string;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Get current streaming statistics
|
|
100
|
+
*/
|
|
101
|
+
getStats(): {
|
|
102
|
+
chars: number;
|
|
103
|
+
lines: number;
|
|
104
|
+
elapsed: number;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Force a flush (for buffered output)
|
|
108
|
+
*/
|
|
109
|
+
flush(): void;
|
|
110
|
+
private countNewlines;
|
|
111
|
+
private writeLocked;
|
|
112
|
+
}
|
|
113
|
+
export declare function getStreamingOutputManager(): StreamingOutputManager;
|
|
114
|
+
export declare function resetStreamingOutputManager(): void;
|
|
115
|
+
//# sourceMappingURL=streamingOutputManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamingOutputManager.d.ts","sourceRoot":"","sources":["../../src/shell/streamingOutputManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACnF;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,OAAO,CAAC,KAAK,CAKX;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,SAAS,CAAc;IAG/B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,YAAY,CAAgB;gBAExB,WAAW,GAAE,MAAM,CAAC,WAA4B;IAK5D;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIvC;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;;OAIG;IACH,WAAW,IAAI,IAAI;IAiBnB;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAqB/B;;OAEG;IACH,SAAS,CAAC,IAAI,GAAE,MAAW,GAAG,IAAI;IAIlC;;;;OAIG;IACH,SAAS,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IA0ChF;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQ7D;;OAEG;IACH,KAAK,IAAI,IAAI;IAYb,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,WAAW;CAWpB;AAOD,wBAAgB,yBAAyB,IAAI,sBAAsB,CAKlE;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StreamingOutputManager - Buffered output for Claude Code style UI
|
|
3
|
+
*
|
|
4
|
+
* Key design principle:
|
|
5
|
+
* - Buffer streaming output instead of writing directly to stdout
|
|
6
|
+
* - This keeps the cursor at the prompt area (no cursor movement during streaming)
|
|
7
|
+
* - Render complete response when streaming ends
|
|
8
|
+
* - The UI (prompt) stays fixed at the bottom
|
|
9
|
+
*
|
|
10
|
+
* Two modes:
|
|
11
|
+
* 1. Direct mode (bufferedMode=false): Write chunks directly to stdout (original behavior)
|
|
12
|
+
* 2. Buffered mode (bufferedMode=true): Collect chunks, render when complete
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from 'node:events';
|
|
15
|
+
import { writeLock } from '../ui/writeLock.js';
|
|
16
|
+
/**
|
|
17
|
+
* Manages streaming output with optional buffering.
|
|
18
|
+
*
|
|
19
|
+
* Buffered mode:
|
|
20
|
+
* - Chunks are collected in a buffer
|
|
21
|
+
* - Output is rendered all at once when streaming ends
|
|
22
|
+
* - Cursor stays at prompt area (no jumping during streaming)
|
|
23
|
+
*
|
|
24
|
+
* Direct mode:
|
|
25
|
+
* - Chunks written directly to stdout (original behavior)
|
|
26
|
+
* - Cursor moves with output
|
|
27
|
+
*/
|
|
28
|
+
export class StreamingOutputManager extends EventEmitter {
|
|
29
|
+
state = {
|
|
30
|
+
isStreaming: false,
|
|
31
|
+
charsWritten: 0,
|
|
32
|
+
linesWritten: 0,
|
|
33
|
+
startTime: null,
|
|
34
|
+
};
|
|
35
|
+
writeStream;
|
|
36
|
+
lastChunk = '';
|
|
37
|
+
// Buffered mode support
|
|
38
|
+
bufferedMode = false;
|
|
39
|
+
outputBuffer = [];
|
|
40
|
+
constructor(writeStream = process.stdout) {
|
|
41
|
+
super();
|
|
42
|
+
this.writeStream = writeStream;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Enable or disable buffered mode
|
|
46
|
+
* When buffered, chunks are collected and rendered at the end
|
|
47
|
+
*/
|
|
48
|
+
setBufferedMode(enabled) {
|
|
49
|
+
this.bufferedMode = enabled;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if buffered mode is enabled
|
|
53
|
+
*/
|
|
54
|
+
isBufferedMode() {
|
|
55
|
+
return this.bufferedMode;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the buffered content (for rendering)
|
|
59
|
+
*/
|
|
60
|
+
getBuffer() {
|
|
61
|
+
return this.outputBuffer.join('');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Clear the buffer
|
|
65
|
+
*/
|
|
66
|
+
clearBuffer() {
|
|
67
|
+
this.outputBuffer = [];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if currently streaming output
|
|
71
|
+
*/
|
|
72
|
+
isStreaming() {
|
|
73
|
+
return this.state.isStreaming;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Begin a streaming session
|
|
77
|
+
* Resets counters and marks streaming as active
|
|
78
|
+
* In buffered mode, clears the buffer
|
|
79
|
+
*/
|
|
80
|
+
startStream() {
|
|
81
|
+
if (this.state.isStreaming) {
|
|
82
|
+
return; // Already streaming
|
|
83
|
+
}
|
|
84
|
+
this.state = {
|
|
85
|
+
isStreaming: true,
|
|
86
|
+
charsWritten: 0,
|
|
87
|
+
linesWritten: 0,
|
|
88
|
+
startTime: Date.now(),
|
|
89
|
+
};
|
|
90
|
+
this.lastChunk = '';
|
|
91
|
+
this.outputBuffer = [];
|
|
92
|
+
this.emit('stream-start');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Write a chunk of content
|
|
96
|
+
*
|
|
97
|
+
* In buffered mode: Collect in buffer (cursor stays at prompt)
|
|
98
|
+
* In direct mode: Write to stdout immediately
|
|
99
|
+
*/
|
|
100
|
+
writeChunk(chunk) {
|
|
101
|
+
if (!chunk) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Track statistics
|
|
105
|
+
this.state.charsWritten += chunk.length;
|
|
106
|
+
this.state.linesWritten += this.countNewlines(chunk);
|
|
107
|
+
this.lastChunk = chunk;
|
|
108
|
+
if (this.bufferedMode) {
|
|
109
|
+
// Buffered mode: collect chunks, don't write yet
|
|
110
|
+
this.outputBuffer.push(chunk);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Direct mode: write immediately
|
|
114
|
+
this.writeLocked(chunk);
|
|
115
|
+
}
|
|
116
|
+
this.emit('stream-chunk', chunk);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Write a complete line (adds newline)
|
|
120
|
+
*/
|
|
121
|
+
writeLine(line = '') {
|
|
122
|
+
this.writeChunk(`${line}\n`);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* End the streaming session
|
|
126
|
+
* In buffered mode: Renders the complete buffered output
|
|
127
|
+
* Returns statistics about what was streamed
|
|
128
|
+
*/
|
|
129
|
+
endStream() {
|
|
130
|
+
const stats = {
|
|
131
|
+
duration: this.state.startTime ? Date.now() - this.state.startTime : 0,
|
|
132
|
+
chars: this.state.charsWritten,
|
|
133
|
+
lines: this.state.linesWritten,
|
|
134
|
+
buffer: undefined,
|
|
135
|
+
};
|
|
136
|
+
if (this.bufferedMode) {
|
|
137
|
+
// In buffered mode, render the collected output now
|
|
138
|
+
const bufferedContent = this.outputBuffer.join('');
|
|
139
|
+
stats.buffer = bufferedContent;
|
|
140
|
+
if (bufferedContent) {
|
|
141
|
+
this.writeLocked(bufferedContent);
|
|
142
|
+
// Ensure we end with a newline
|
|
143
|
+
if (!bufferedContent.endsWith('\n')) {
|
|
144
|
+
this.writeLocked('\n');
|
|
145
|
+
stats.lines += 1;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
this.outputBuffer = [];
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// Direct mode: just ensure newline
|
|
152
|
+
if (this.lastChunk && !this.lastChunk.endsWith('\n')) {
|
|
153
|
+
this.writeLocked('\n');
|
|
154
|
+
stats.lines += 1;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
this.state = {
|
|
158
|
+
isStreaming: false,
|
|
159
|
+
charsWritten: 0,
|
|
160
|
+
linesWritten: 0,
|
|
161
|
+
startTime: null,
|
|
162
|
+
};
|
|
163
|
+
this.lastChunk = '';
|
|
164
|
+
this.emit('stream-end', stats);
|
|
165
|
+
return stats;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get current streaming statistics
|
|
169
|
+
*/
|
|
170
|
+
getStats() {
|
|
171
|
+
return {
|
|
172
|
+
chars: this.state.charsWritten,
|
|
173
|
+
lines: this.state.linesWritten,
|
|
174
|
+
elapsed: this.state.startTime ? Date.now() - this.state.startTime : 0,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Force a flush (for buffered output)
|
|
179
|
+
*/
|
|
180
|
+
flush() {
|
|
181
|
+
// Cork/uncork pattern for optimal buffering
|
|
182
|
+
if (typeof this.writeStream.cork === 'function') {
|
|
183
|
+
this.writeStream.cork();
|
|
184
|
+
process.nextTick(() => {
|
|
185
|
+
if (typeof this.writeStream.uncork === 'function') {
|
|
186
|
+
this.writeStream.uncork();
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
countNewlines(text) {
|
|
192
|
+
let count = 0;
|
|
193
|
+
for (const char of text) {
|
|
194
|
+
if (char === '\n') {
|
|
195
|
+
count += 1;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return count;
|
|
199
|
+
}
|
|
200
|
+
writeLocked(chunk) {
|
|
201
|
+
// If lock is already held, write directly - we're in a protected context
|
|
202
|
+
// This prevents queuing issues where content gets delayed during streaming
|
|
203
|
+
if (writeLock.isLocked()) {
|
|
204
|
+
this.writeStream.write(chunk);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
writeLock.withLock(() => {
|
|
208
|
+
this.writeStream.write(chunk);
|
|
209
|
+
}, 'streamingOutputManager.write');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Singleton instance for global use
|
|
214
|
+
*/
|
|
215
|
+
let globalInstance = null;
|
|
216
|
+
export function getStreamingOutputManager() {
|
|
217
|
+
if (!globalInstance) {
|
|
218
|
+
globalInstance = new StreamingOutputManager();
|
|
219
|
+
}
|
|
220
|
+
return globalInstance;
|
|
221
|
+
}
|
|
222
|
+
export function resetStreamingOutputManager() {
|
|
223
|
+
globalInstance = null;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=streamingOutputManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamingOutputManager.js","sourceRoot":"","sources":["../../src/shell/streamingOutputManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Design principles:
|
|
5
5
|
* - Single source of truth for input state
|
|
6
|
-
* - One bottom-pinned chat box for the entire session (no inline anchors)
|
|
7
6
|
* - Native bracketed paste support (no heuristics)
|
|
8
7
|
* - Clean cursor model with render-time wrapping
|
|
9
8
|
* - State machine for different input modes
|
|
@@ -66,9 +65,6 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
66
65
|
private statusMessage;
|
|
67
66
|
private overrideStatusMessage;
|
|
68
67
|
private streamingLabel;
|
|
69
|
-
private metaElapsedSeconds;
|
|
70
|
-
private metaTokensUsed;
|
|
71
|
-
private metaTokenLimit;
|
|
72
68
|
private reservedLines;
|
|
73
69
|
private scrollRegionActive;
|
|
74
70
|
private lastRenderContent;
|
|
@@ -76,6 +72,9 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
76
72
|
private renderDirty;
|
|
77
73
|
private isRendering;
|
|
78
74
|
private pinnedTopRows;
|
|
75
|
+
private inlineAnchorRow;
|
|
76
|
+
private inlineLayout;
|
|
77
|
+
private anchorProvider;
|
|
79
78
|
private disposed;
|
|
80
79
|
private enabled;
|
|
81
80
|
private contextUsage;
|
|
@@ -87,6 +86,9 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
87
86
|
private outputInterceptorCleanup?;
|
|
88
87
|
private lastStreamingRender;
|
|
89
88
|
private streamingRenderInterval;
|
|
89
|
+
private streamingStartTime;
|
|
90
|
+
private tokensUsed;
|
|
91
|
+
private thinkingEnabled;
|
|
90
92
|
constructor(writeStream?: NodeJS.WriteStream, config?: TerminalInputConfig);
|
|
91
93
|
/**
|
|
92
94
|
* Enable bracketed paste mode in terminal
|
|
@@ -111,14 +113,37 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
111
113
|
/**
|
|
112
114
|
* Set the input mode
|
|
113
115
|
*
|
|
114
|
-
* Streaming
|
|
115
|
-
*
|
|
116
|
+
* Streaming mode disables scroll region and lets content flow naturally.
|
|
117
|
+
* The input area will be re-rendered after streaming ends at wherever
|
|
118
|
+
* the cursor is (below the streamed content).
|
|
116
119
|
*/
|
|
117
120
|
setMode(mode: InputMode): void;
|
|
121
|
+
/**
|
|
122
|
+
* Update token count for metrics display
|
|
123
|
+
*/
|
|
124
|
+
setTokensUsed(tokens: number): void;
|
|
125
|
+
/**
|
|
126
|
+
* Toggle thinking/reasoning mode
|
|
127
|
+
*/
|
|
128
|
+
toggleThinking(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Get thinking enabled state
|
|
131
|
+
*/
|
|
132
|
+
isThinkingEnabled(): boolean;
|
|
118
133
|
/**
|
|
119
134
|
* Keep the top N rows pinned outside the scroll region (used for the launch banner).
|
|
120
135
|
*/
|
|
121
136
|
setPinnedHeaderLines(count: number): void;
|
|
137
|
+
/**
|
|
138
|
+
* Anchor prompt rendering near a specific row (inline layout). Pass null to
|
|
139
|
+
* restore the default bottom-aligned layout.
|
|
140
|
+
*/
|
|
141
|
+
setInlineAnchor(row: number | null): void;
|
|
142
|
+
/**
|
|
143
|
+
* Provide a dynamic anchor callback. When set, the prompt will follow the
|
|
144
|
+
* output by re-evaluating the anchor before each render.
|
|
145
|
+
*/
|
|
146
|
+
setInlineAnchorProvider(provider: (() => number | null | undefined) | null): void;
|
|
122
147
|
/**
|
|
123
148
|
* Get current mode
|
|
124
149
|
*/
|
|
@@ -165,14 +190,6 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
165
190
|
* Can be shown alongside override status messages.
|
|
166
191
|
*/
|
|
167
192
|
setStreamingLabel(label: string | null): void;
|
|
168
|
-
/**
|
|
169
|
-
* Surface meta status just above the divider (e.g., elapsed time or token usage).
|
|
170
|
-
*/
|
|
171
|
-
setMetaStatus(meta: {
|
|
172
|
-
elapsedSeconds?: number | null;
|
|
173
|
-
tokensUsed?: number | null;
|
|
174
|
-
tokenLimit?: number | null;
|
|
175
|
-
}): void;
|
|
176
193
|
/**
|
|
177
194
|
* Keep mode toggles (verification/auto-continue) visible in the control bar.
|
|
178
195
|
* Hotkey labels remain stable so the bar looks the same before/during streaming.
|
|
@@ -197,12 +214,13 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
197
214
|
*/
|
|
198
215
|
render(): void;
|
|
199
216
|
/**
|
|
200
|
-
* Build
|
|
217
|
+
* Build status bar showing streaming/ready status, elapsed time, and token count.
|
|
218
|
+
* This is the TOP line above the input area.
|
|
201
219
|
*/
|
|
202
|
-
private
|
|
220
|
+
private buildStatusBar;
|
|
203
221
|
/**
|
|
204
|
-
* Build
|
|
205
|
-
*
|
|
222
|
+
* Build mode controls line showing toggles and shortcuts.
|
|
223
|
+
* This is the BOTTOM line below the input area.
|
|
206
224
|
*/
|
|
207
225
|
private buildModeControls;
|
|
208
226
|
/**
|
|
@@ -221,6 +239,9 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
221
239
|
* Register with display's output interceptor to position cursor correctly.
|
|
222
240
|
* When scroll region is active, output needs to go to the scroll region,
|
|
223
241
|
* not the protected bottom area where the input is rendered.
|
|
242
|
+
*
|
|
243
|
+
* NOTE: With scroll region properly set, content naturally stays within
|
|
244
|
+
* the region boundaries - no cursor manipulation needed per-write.
|
|
224
245
|
*/
|
|
225
246
|
registerOutputInterceptor(display: {
|
|
226
247
|
registerOutputInterceptor: (i: {
|
|
@@ -265,10 +286,15 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
265
286
|
private shiftPlaceholders;
|
|
266
287
|
private removeRange;
|
|
267
288
|
private insertPlainText;
|
|
268
|
-
private shouldInlineMultiline;
|
|
269
289
|
private findPlaceholderAt;
|
|
270
290
|
private buildPlaceholder;
|
|
271
291
|
private insertPastePlaceholder;
|
|
292
|
+
/**
|
|
293
|
+
* Toggle expansion of a paste placeholder at the current cursor position.
|
|
294
|
+
* When expanded, shows first 3 and last 2 lines of the content.
|
|
295
|
+
*/
|
|
296
|
+
togglePasteExpansion(): boolean;
|
|
297
|
+
private buildExpandedPlaceholder;
|
|
272
298
|
private deletePlaceholder;
|
|
273
299
|
updateContextUsage(value: number | null): void;
|
|
274
300
|
getEditMode(): EditGuardMode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminalInput.d.ts","sourceRoot":"","sources":["../../src/shell/terminalInput.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"terminalInput.d.ts","sourceRoot":"","sources":["../../src/shell/terminalInput.ts"],"names":[],"mappings":"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"}
|