erosolar-cli 1.7.161 → 1.7.164
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/contracts/unified-schema.json +6 -6
- package/dist/core/unified/tools.d.ts.map +1 -1
- package/dist/core/unified/tools.js +12 -34
- package/dist/core/unified/tools.js.map +1 -1
- package/dist/security/tool-security-wrapper.js +3 -3
- package/dist/security/tool-security-wrapper.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 +312 -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 +21 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +140 -51
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/streamingOutputManager.d.ts +88 -0
- package/dist/shell/streamingOutputManager.d.ts.map +1 -0
- package/dist/shell/streamingOutputManager.js +155 -0
- package/dist/shell/streamingOutputManager.js.map +1 -0
- package/dist/shell/systemPrompt.js +2 -2
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/shell/taskCompletionDetector.d.ts.map +1 -1
- package/dist/shell/taskCompletionDetector.js +1 -3
- package/dist/shell/taskCompletionDetector.js.map +1 -1
- package/dist/shell/unifiedChatBox.d.ts +178 -0
- package/dist/shell/unifiedChatBox.d.ts.map +1 -0
- package/dist/shell/unifiedChatBox.js +539 -0
- package/dist/shell/unifiedChatBox.js.map +1 -0
- package/dist/tools/diffUtils.d.ts +1 -1
- package/dist/tools/diffUtils.d.ts.map +1 -1
- package/dist/tools/diffUtils.js +19 -3
- package/dist/tools/diffUtils.js.map +1 -1
- package/dist/tools/editTools.d.ts +11 -0
- package/dist/tools/editTools.d.ts.map +1 -1
- package/dist/tools/editTools.js +141 -98
- 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/tools/softwareEngineeringTools.d.ts +7 -0
- package/dist/tools/softwareEngineeringTools.d.ts.map +1 -0
- package/dist/tools/softwareEngineeringTools.js +338 -0
- package/dist/tools/softwareEngineeringTools.js.map +1 -0
- package/dist/ui/toolDisplay.d.ts.map +1 -1
- package/dist/ui/toolDisplay.js +1 -3
- package/dist/ui/toolDisplay.js.map +1 -1
- package/dist/ui/toolDisplayAdapter.d.ts.map +1 -1
- package/dist/ui/toolDisplayAdapter.js +0 -3
- package/dist/ui/toolDisplayAdapter.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StreamingOutputManager - Natural output flow for Claude Code style streaming
|
|
3
|
+
*
|
|
4
|
+
* Key principles from Claude Code:
|
|
5
|
+
* 1. Natural Output Flow - Streaming output just writes to stdout normally
|
|
6
|
+
* 2. The cursor stays where it is after each write
|
|
7
|
+
* 3. Lines scroll up naturally as new content appears
|
|
8
|
+
* 4. NO scroll regions, NO save/restore cursor during streaming
|
|
9
|
+
*
|
|
10
|
+
* The "input at bottom" effect comes from:
|
|
11
|
+
* - New output pushes older content (including the prompt) upward
|
|
12
|
+
* - After streaming ends, a new prompt is shown at the bottom
|
|
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 to stdout in Claude Code style.
|
|
32
|
+
*
|
|
33
|
+
* Design:
|
|
34
|
+
* - NEVER manipulates cursor during streaming
|
|
35
|
+
* - Output flows naturally, pushing content up
|
|
36
|
+
* - Tracks statistics for display after streaming
|
|
37
|
+
*/
|
|
38
|
+
export declare class StreamingOutputManager extends EventEmitter {
|
|
39
|
+
private state;
|
|
40
|
+
private readonly writeStream;
|
|
41
|
+
private lastChunk;
|
|
42
|
+
constructor(writeStream?: NodeJS.WriteStream);
|
|
43
|
+
/**
|
|
44
|
+
* Check if currently streaming output
|
|
45
|
+
*/
|
|
46
|
+
isStreaming(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Begin a streaming session
|
|
49
|
+
* Resets counters and marks streaming as active
|
|
50
|
+
*/
|
|
51
|
+
startStream(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Write a chunk of content to the stream
|
|
54
|
+
*
|
|
55
|
+
* Claude Code approach: Just write directly to stdout.
|
|
56
|
+
* No cursor manipulation, no position tracking during streaming.
|
|
57
|
+
*/
|
|
58
|
+
writeChunk(chunk: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Write a complete line (adds newline)
|
|
61
|
+
*/
|
|
62
|
+
writeLine(line?: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* End the streaming session
|
|
65
|
+
* Returns statistics about what was streamed
|
|
66
|
+
*/
|
|
67
|
+
endStream(): {
|
|
68
|
+
duration: number;
|
|
69
|
+
chars: number;
|
|
70
|
+
lines: number;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Get current streaming statistics
|
|
74
|
+
*/
|
|
75
|
+
getStats(): {
|
|
76
|
+
chars: number;
|
|
77
|
+
lines: number;
|
|
78
|
+
elapsed: number;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Force a flush (for buffered output)
|
|
82
|
+
*/
|
|
83
|
+
flush(): void;
|
|
84
|
+
private countNewlines;
|
|
85
|
+
}
|
|
86
|
+
export declare function getStreamingOutputManager(): StreamingOutputManager;
|
|
87
|
+
export declare function resetStreamingOutputManager(): void;
|
|
88
|
+
//# 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;AAE3C,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;;;;;;;GAOG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,OAAO,CAAC,KAAK,CAKX;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,SAAS,CAAc;gBAEnB,WAAW,GAAE,MAAM,CAAC,WAA4B;IAK5D;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,WAAW,IAAI,IAAI;IAgBnB;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgB/B;;OAEG;IACH,SAAS,CAAC,IAAI,GAAE,MAAW,GAAG,IAAI;IAIlC;;;OAGG;IACH,SAAS,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAyB/D;;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;CAStB;AAOD,wBAAgB,yBAAyB,IAAI,sBAAsB,CAKlE;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StreamingOutputManager - Natural output flow for Claude Code style streaming
|
|
3
|
+
*
|
|
4
|
+
* Key principles from Claude Code:
|
|
5
|
+
* 1. Natural Output Flow - Streaming output just writes to stdout normally
|
|
6
|
+
* 2. The cursor stays where it is after each write
|
|
7
|
+
* 3. Lines scroll up naturally as new content appears
|
|
8
|
+
* 4. NO scroll regions, NO save/restore cursor during streaming
|
|
9
|
+
*
|
|
10
|
+
* The "input at bottom" effect comes from:
|
|
11
|
+
* - New output pushes older content (including the prompt) upward
|
|
12
|
+
* - After streaming ends, a new prompt is shown at the bottom
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from 'node:events';
|
|
15
|
+
/**
|
|
16
|
+
* Manages streaming output to stdout in Claude Code style.
|
|
17
|
+
*
|
|
18
|
+
* Design:
|
|
19
|
+
* - NEVER manipulates cursor during streaming
|
|
20
|
+
* - Output flows naturally, pushing content up
|
|
21
|
+
* - Tracks statistics for display after streaming
|
|
22
|
+
*/
|
|
23
|
+
export class StreamingOutputManager extends EventEmitter {
|
|
24
|
+
state = {
|
|
25
|
+
isStreaming: false,
|
|
26
|
+
charsWritten: 0,
|
|
27
|
+
linesWritten: 0,
|
|
28
|
+
startTime: null,
|
|
29
|
+
};
|
|
30
|
+
writeStream;
|
|
31
|
+
lastChunk = '';
|
|
32
|
+
constructor(writeStream = process.stdout) {
|
|
33
|
+
super();
|
|
34
|
+
this.writeStream = writeStream;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if currently streaming output
|
|
38
|
+
*/
|
|
39
|
+
isStreaming() {
|
|
40
|
+
return this.state.isStreaming;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Begin a streaming session
|
|
44
|
+
* Resets counters and marks streaming as active
|
|
45
|
+
*/
|
|
46
|
+
startStream() {
|
|
47
|
+
if (this.state.isStreaming) {
|
|
48
|
+
return; // Already streaming
|
|
49
|
+
}
|
|
50
|
+
this.state = {
|
|
51
|
+
isStreaming: true,
|
|
52
|
+
charsWritten: 0,
|
|
53
|
+
linesWritten: 0,
|
|
54
|
+
startTime: Date.now(),
|
|
55
|
+
};
|
|
56
|
+
this.lastChunk = '';
|
|
57
|
+
this.emit('stream-start');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Write a chunk of content to the stream
|
|
61
|
+
*
|
|
62
|
+
* Claude Code approach: Just write directly to stdout.
|
|
63
|
+
* No cursor manipulation, no position tracking during streaming.
|
|
64
|
+
*/
|
|
65
|
+
writeChunk(chunk) {
|
|
66
|
+
if (!chunk) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Track statistics
|
|
70
|
+
this.state.charsWritten += chunk.length;
|
|
71
|
+
this.state.linesWritten += this.countNewlines(chunk);
|
|
72
|
+
this.lastChunk = chunk;
|
|
73
|
+
// Natural write - no cursor manipulation
|
|
74
|
+
this.writeStream.write(chunk);
|
|
75
|
+
this.emit('stream-chunk', chunk);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Write a complete line (adds newline)
|
|
79
|
+
*/
|
|
80
|
+
writeLine(line = '') {
|
|
81
|
+
this.writeChunk(`${line}\n`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* End the streaming session
|
|
85
|
+
* Returns statistics about what was streamed
|
|
86
|
+
*/
|
|
87
|
+
endStream() {
|
|
88
|
+
const stats = {
|
|
89
|
+
duration: this.state.startTime ? Date.now() - this.state.startTime : 0,
|
|
90
|
+
chars: this.state.charsWritten,
|
|
91
|
+
lines: this.state.linesWritten,
|
|
92
|
+
};
|
|
93
|
+
// Ensure we end with a newline if the last chunk didn't have one
|
|
94
|
+
if (this.lastChunk && !this.lastChunk.endsWith('\n')) {
|
|
95
|
+
this.writeStream.write('\n');
|
|
96
|
+
stats.lines += 1;
|
|
97
|
+
}
|
|
98
|
+
this.state = {
|
|
99
|
+
isStreaming: false,
|
|
100
|
+
charsWritten: 0,
|
|
101
|
+
linesWritten: 0,
|
|
102
|
+
startTime: null,
|
|
103
|
+
};
|
|
104
|
+
this.lastChunk = '';
|
|
105
|
+
this.emit('stream-end', stats);
|
|
106
|
+
return stats;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get current streaming statistics
|
|
110
|
+
*/
|
|
111
|
+
getStats() {
|
|
112
|
+
return {
|
|
113
|
+
chars: this.state.charsWritten,
|
|
114
|
+
lines: this.state.linesWritten,
|
|
115
|
+
elapsed: this.state.startTime ? Date.now() - this.state.startTime : 0,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Force a flush (for buffered output)
|
|
120
|
+
*/
|
|
121
|
+
flush() {
|
|
122
|
+
// Cork/uncork pattern for optimal buffering
|
|
123
|
+
if (typeof this.writeStream.cork === 'function') {
|
|
124
|
+
this.writeStream.cork();
|
|
125
|
+
process.nextTick(() => {
|
|
126
|
+
if (typeof this.writeStream.uncork === 'function') {
|
|
127
|
+
this.writeStream.uncork();
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
countNewlines(text) {
|
|
133
|
+
let count = 0;
|
|
134
|
+
for (const char of text) {
|
|
135
|
+
if (char === '\n') {
|
|
136
|
+
count += 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return count;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Singleton instance for global use
|
|
144
|
+
*/
|
|
145
|
+
let globalInstance = null;
|
|
146
|
+
export function getStreamingOutputManager() {
|
|
147
|
+
if (!globalInstance) {
|
|
148
|
+
globalInstance = new StreamingOutputManager();
|
|
149
|
+
}
|
|
150
|
+
return globalInstance;
|
|
151
|
+
}
|
|
152
|
+
export function resetStreamingOutputManager() {
|
|
153
|
+
globalInstance = null;
|
|
154
|
+
}
|
|
155
|
+
//# 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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"}
|
|
@@ -25,8 +25,8 @@ The erosolar-cli IS your codebase. When users ask to change "the UI" or "this to
|
|
|
25
25
|
'VALIDATION: Do NOT run type-check, build, test, health-check, lint, or quality-gate after each tool. Complete ALL edits first, run ONE validation at the end only if needed',
|
|
26
26
|
'GIT EFFICIENCY: Do NOT run redundant git commands. Use single combined commands: "git add -A && git commit -m msg && git push" instead of separate status/add/status/commit/push calls',
|
|
27
27
|
'NPM PUBLISH: When user says "push update npm" or similar, run: npm version patch && npm run build && npm publish && git push (single command chain)',
|
|
28
|
-
'TOOL USAGE: ALWAYS use tools to complete tasks. Do NOT describe what you would do - actually DO it by calling tools. If you need to read a file, call read_file. If you need to edit, call
|
|
29
|
-
'FILE EDITING: ALWAYS
|
|
28
|
+
'TOOL USAGE: ALWAYS use tools to complete tasks. Do NOT describe what you would do - actually DO it by calling tools. If you need to read a file, call read_file. If you need to edit, call Edit. Never output "I will..." or "Let me..." without immediately following with a tool call.',
|
|
29
|
+
'FILE EDITING: ALWAYS use the Edit tool for file modifications. The Edit tool performs exact string replacements - you must provide the exact text to replace (old_string) and the replacement text (new_string). To create new files, use Edit with an empty old_string. The edit will FAIL if old_string is not unique unless replace_all is true.',
|
|
30
30
|
];
|
|
31
31
|
const behaviorSection = behaviorGuidelines
|
|
32
32
|
.map((line, index) => `${index + 1}. ${line}`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"systemPrompt.js","sourceRoot":"","sources":["../../src/shell/systemPrompt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAC1C,UAAkB,EAClB,YAAoB,EACpB,KAA+B,EAC/B,YAAqB;IAErB,MAAM,IAAI,GAAG,YAAY,IAAI,cAAc,CAAC;IAC5C,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhD,MAAM,aAAa,GAAG;6BACK,IAAI;4CACW,SAAS;;;CAGpD,CAAC;IAEA,MAAM,eAAe,GAAG;QACtB,sCAAsC;QACtC,mDAAmD;QACnD,sEAAsE;QACtE,qCAAqC;QACrC,kDAAkD;QAClD,uDAAuD;KACxD,CAAC;IAEF,MAAM,kBAAkB,GAAG;QACzB,oVAAoV;QACpV,iHAAiH;QACjH,0EAA0E;QAC1E,6DAA6D;QAC7D,+CAA+C;QAC/C,6KAA6K;QAC7K,wLAAwL;QACxL,qJAAqJ;QACrJ
|
|
1
|
+
{"version":3,"file":"systemPrompt.js","sourceRoot":"","sources":["../../src/shell/systemPrompt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAC1C,UAAkB,EAClB,YAAoB,EACpB,KAA+B,EAC/B,YAAqB;IAErB,MAAM,IAAI,GAAG,YAAY,IAAI,cAAc,CAAC;IAC5C,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhD,MAAM,aAAa,GAAG;6BACK,IAAI;4CACW,SAAS;;;CAGpD,CAAC;IAEA,MAAM,eAAe,GAAG;QACtB,sCAAsC;QACtC,mDAAmD;QACnD,sEAAsE;QACtE,qCAAqC;QACrC,kDAAkD;QAClD,uDAAuD;KACxD,CAAC;IAEF,MAAM,kBAAkB,GAAG;QACzB,oVAAoV;QACpV,iHAAiH;QACjH,0EAA0E;QAC1E,6DAA6D;QAC7D,+CAA+C;QAC/C,6KAA6K;QAC7K,wLAAwL;QACxL,qJAAqJ;QACrJ,0RAA0R;QAC1R,qVAAqV;KACtV,CAAC;IAEF,MAAM,eAAe,GAAG,kBAAkB;SACvC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,GAAG,UAAU;EACpB,aAAa;UACL,IAAI;;;EAGZ,WAAW;;;EAGX,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG1B,eAAe;;4IAE2H,CAAC;AAC7I,CAAC;AAMD,SAAS,iBAAiB,CAAC,KAA+B,EAAE,UAA8B,EAAE;IAC1F,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,6CAA6C,CAAC;IACvD,CAAC;IACD,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACzG,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACpE,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;IACtC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,SAAkB;IACjD,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;AACtD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskCompletionDetector.d.ts","sourceRoot":"","sources":["../../src/shell/taskCompletionDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAEhC,8BAA8B,EAAE,OAAO,CAAC;IACxC,2BAA2B,EAAE,OAAO,CAAC;IACrC,0BAA0B,EAAE,OAAO,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAG9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gCAAgC,EAAE,MAAM,CAAC;IACzC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAG1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAG5B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAoED,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"taskCompletionDetector.d.ts","sourceRoot":"","sources":["../../src/shell/taskCompletionDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAEhC,8BAA8B,EAAE,OAAO,CAAC;IACxC,2BAA2B,EAAE,OAAO,CAAC;IACrC,0BAA0B,EAAE,OAAO,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAG9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gCAAgC,EAAE,MAAM,CAAC;IACzC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAG1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAG5B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAoED,eAAO,MAAM,WAAW,aAStB,CAAC;AAEH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,SAAS,CAAgC;;IAMjD;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAkB5E;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAgB3D;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzD;;OAEG;IACH,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,kBAAkB;IAoD5F;;OAEG;IACH,OAAO,CAAC,aAAa;IAqCrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA0BlC;;OAEG;IACH,OAAO,CAAC,oCAAoC;IAW5C;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,uBAAuB,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO;IAc9D;;;OAGG;IACH,OAAO,CAAC,oCAAoC;CA+D7C;AAOD,wBAAgB,yBAAyB,IAAI,sBAAsB,CAKlE;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD"}
|
|
@@ -73,8 +73,6 @@ const READ_ONLY_TOOLS = new Set([
|
|
|
73
73
|
]);
|
|
74
74
|
// Write/action tool names - exported for use in completion detection
|
|
75
75
|
export const WRITE_TOOLS = new Set([
|
|
76
|
-
'write_file',
|
|
77
|
-
'Write',
|
|
78
76
|
'edit_file',
|
|
79
77
|
'Edit',
|
|
80
78
|
'bash',
|
|
@@ -206,7 +204,7 @@ export class TaskCompletionDetector {
|
|
|
206
204
|
const mentionsFutureWork = FUTURE_WORK_PATTERNS.some((p) => p.test(response));
|
|
207
205
|
const lastToolWasReadOnly = toolsUsed.length > 0 && toolsUsed.every((t) => READ_ONLY_TOOLS.has(t));
|
|
208
206
|
const recentTools = this.toolHistory.filter((t) => Date.now() - t.timestamp < 60000);
|
|
209
|
-
const hasRecentFileWrites = recentTools.some((t) => t.toolName === '
|
|
207
|
+
const hasRecentFileWrites = recentTools.some((t) => t.toolName === 'edit_file' || t.toolName === 'Edit');
|
|
210
208
|
const hasRecentCommits = recentTools.some((t) => t.toolName === 'bash' || t.toolName === 'Bash') && this.responseHistory.some((r) => r.includes('git commit') || r.includes('committed'));
|
|
211
209
|
return {
|
|
212
210
|
hasExplicitCompletionStatement,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskCompletionDetector.js","sourceRoot":"","sources":["../../src/shell/taskCompletionDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0CH,kDAAkD;AAClD,MAAM,0BAA0B,GAAG;IACjC,iEAAiE;IACjE,0GAA0G;IAC1G,2DAA2D;IAC3D,2FAA2F;IAC3F,4FAA4F;IAC5F,gGAAgG;CACjG,CAAC;AAEF,mDAAmD;AACnD,MAAM,wBAAwB,GAAG;IAC/B,qFAAqF;IACrF,4DAA4D;IAC5D,qCAAqC;IACrC,6DAA6D;IAC7D,+CAA+C;IAC/C,uEAAuE;CACxE,CAAC;AAEF,yCAAyC;AACzC,MAAM,uBAAuB,GAAG;IAC9B,kDAAkD;IAClD,+BAA+B;IAC/B,kDAAkD;IAClD,qCAAqC;CACtC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,cAAc,GAAG;IACrB,yDAAyD;IACzD,4CAA4C;IAC5C,qDAAqD;CACtD,CAAC;AAEF,6CAA6C;AAC7C,MAAM,0BAA0B,GAAG;IACjC,gEAAgE;IAChE,oDAAoD;IACpD,MAAM;CACP,CAAC;AAEF,qCAAqC;AACrC,MAAM,oBAAoB,GAAG;IAC3B,0DAA0D;IAC1D,yDAAyD;IACzD,6CAA6C;CAC9C,CAAC;AAEF,uBAAuB;AACvB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,WAAW;IACX,MAAM;IACN,UAAU;IACV,YAAY;IACZ,aAAa;IACb,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,YAAY;IACZ,SAAS;IACT,UAAU;CACX,CAAC,CAAC;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,
|
|
1
|
+
{"version":3,"file":"taskCompletionDetector.js","sourceRoot":"","sources":["../../src/shell/taskCompletionDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0CH,kDAAkD;AAClD,MAAM,0BAA0B,GAAG;IACjC,iEAAiE;IACjE,0GAA0G;IAC1G,2DAA2D;IAC3D,2FAA2F;IAC3F,4FAA4F;IAC5F,gGAAgG;CACjG,CAAC;AAEF,mDAAmD;AACnD,MAAM,wBAAwB,GAAG;IAC/B,qFAAqF;IACrF,4DAA4D;IAC5D,qCAAqC;IACrC,6DAA6D;IAC7D,+CAA+C;IAC/C,uEAAuE;CACxE,CAAC;AAEF,yCAAyC;AACzC,MAAM,uBAAuB,GAAG;IAC9B,kDAAkD;IAClD,+BAA+B;IAC/B,kDAAkD;IAClD,qCAAqC;CACtC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,cAAc,GAAG;IACrB,yDAAyD;IACzD,4CAA4C;IAC5C,qDAAqD;CACtD,CAAC;AAEF,6CAA6C;AAC7C,MAAM,0BAA0B,GAAG;IACjC,gEAAgE;IAChE,oDAAoD;IACpD,MAAM;CACP,CAAC;AAEF,qCAAqC;AACrC,MAAM,oBAAoB,GAAG;IAC3B,0DAA0D;IAC1D,yDAAyD;IACzD,6CAA6C;CAC9C,CAAC;AAEF,uBAAuB;AACvB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,WAAW;IACX,MAAM;IACN,UAAU;IACV,YAAY;IACZ,aAAa;IACb,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,YAAY;IACZ,SAAS;IACT,UAAU;CACX,CAAC,CAAC;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,WAAW;IACX,MAAM;IACN,MAAM;IACN,MAAM;IACN,iBAAiB;IACjB,YAAY;IACZ,UAAU;IACV,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,OAAO,sBAAsB;IACzB,WAAW,GAAmB,EAAE,CAAC;IACjC,eAAe,GAAa,EAAE,CAAC;IAC/B,aAAa,GAAa,EAAE,CAAC;IAC7B,kBAAkB,GAAG,CAAC,CAAC;IACvB,SAAS,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAEjD;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB,EAAE,OAAgB,EAAE,SAAkB;QACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO;YACP,SAAS;SACV,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,2BAA2B;QAC3B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB,EAAE,SAAmB;QAClD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,OAAe,EAAE,SAAiB;QAChD,IAAI,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,eAAuB,EAAE,kBAA4B;QACrE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAErD,OAAO,CAAC,oBAAoB,GAAG,UAAU,CAAC;QAE1C,8BAA8B;QAC9B,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,kBAAsC,CAAC;QAE3C,6BAA6B;QAC7B,IAAI,UAAU,IAAI,IAAI,IAAI,OAAO,CAAC,8BAA8B,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC;YACzG,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,GAAG,kFAAkF,CAAC;QAC9F,CAAC;QACD,yCAAyC;aACpC,IAAI,UAAU,IAAI,GAAG,IAAI,OAAO,CAAC,8BAA8B,EAAE,CAAC;YACrE,YAAY,GAAG,IAAI,CAAC;YACpB,MAAM,GAAG,4DAA4D,CAAC;YACtE,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QACD,uCAAuC;aAClC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YAC1B,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,wCAAwC;aACnC,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC;YAC9E,YAAY,GAAG,IAAI,CAAC;YACpB,MAAM,GAAG,4DAA4D,CAAC;YACtE,kBAAkB,GAAG,IAAI,CAAC,oCAAoC,EAAE,CAAC;QACnE,CAAC;QACD,wBAAwB;aACnB,CAAC;YACJ,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM,GAAG,8DAA8D,CAAC;QAC1E,CAAC;QAED,OAAO;YACL,UAAU;YACV,UAAU;YACV,OAAO;YACP,MAAM;YACN,YAAY;YACZ,kBAAkB;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,QAAgB,EAAE,SAAmB;QACzD,MAAM,8BAA8B,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChG,MAAM,2BAA2B,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3F,MAAM,0BAA0B,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzF,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxE,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtF,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE9E,MAAM,mBAAmB,GACvB,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;QACrF,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAC3D,CAAC;QACF,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CACtD,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3F,OAAO;YACL,8BAA8B;YAC9B,2BAA2B;YAC3B,0BAA0B;YAC1B,kBAAkB;YAClB,oBAAoB;YACpB,uBAAuB,EAAE,SAAS,CAAC,MAAM;YACzC,mBAAmB;YACnB,gCAAgC,EAAE,IAAI,CAAC,kBAAkB;YACzD,mBAAmB;YACnB,gBAAgB;YAChB,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;YACxC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;YAC5C,kBAAkB;YAClB,oBAAoB,EAAE,CAAC,EAAE,qBAAqB;SAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAA0B;QACpD,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,mBAAmB;QAEpC,0BAA0B;QAC1B,IAAI,OAAO,CAAC,8BAA8B;YAAE,KAAK,IAAI,IAAI,CAAC;QAC1D,IAAI,OAAO,CAAC,gBAAgB;YAAE,KAAK,IAAI,GAAG,CAAC;QAC3C,IAAI,OAAO,CAAC,gBAAgB,KAAK,CAAC,IAAI,OAAO,CAAC,kBAAkB,GAAG,CAAC;YAAE,KAAK,IAAI,IAAI,CAAC;QAEpF,0BAA0B;QAC1B,IAAI,OAAO,CAAC,2BAA2B;YAAE,KAAK,IAAI,GAAG,CAAC;QACtD,IAAI,OAAO,CAAC,0BAA0B;YAAE,KAAK,IAAI,GAAG,CAAC;QACrD,IAAI,OAAO,CAAC,kBAAkB;YAAE,KAAK,IAAI,IAAI,CAAC;QAC9C,IAAI,OAAO,CAAC,gBAAgB,GAAG,CAAC;YAAE,KAAK,IAAI,IAAI,CAAC;QAEhD,mBAAmB;QACnB,IAAI,OAAO,CAAC,uBAAuB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB;YAAE,KAAK,IAAI,GAAG,CAAC;QACtF,IAAI,OAAO,CAAC,gCAAgC,IAAI,CAAC;YAAE,KAAK,IAAI,GAAG,CAAC;QAChE,IAAI,OAAO,CAAC,oBAAoB;YAAE,KAAK,IAAI,GAAG,CAAC;QAC/C,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,8BAA8B;YAAE,KAAK,IAAI,IAAI,CAAC;QAExF,qBAAqB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,OAA0B;QAC3D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,OAAO,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,gBAAgB,2BAA2B,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,YAAY,GAChB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpE,OAAO,6CAA6C,YAAY;;;;;;;mDAOjB,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,oCAAoC;QAC1C,OAAO;;;;;;;iDAOsC,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,OAA0B;QACvD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,OAAO,CAAC,2BAA2B,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO,CAAC,uBAAuB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,2BAA2B,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,oBAA4B;QAClD,MAAM,mBAAmB,GAAG,CAC1B,oBAAoB,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACpD,8DAA8D,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CACjG,CAAC;QAEF,iEAAiE;QACjE,IAAI,mBAAmB,IAAI,IAAI,CAAC,oCAAoC,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC3F,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,oCAAoC,CAAC,QAAgB;QAC3D,MAAM,kBAAkB,GAAG;YACzB,uCAAuC;YACvC,8GAA8G;YAC9G,yGAAyG;YACzG,qFAAqF;YACrF,+FAA+F;YAC/F,2EAA2E;YAC3E,kEAAkE;YAElE,mCAAmC;YACnC,+EAA+E;YAC/E,gGAAgG;YAChG,0FAA0F;YAE1F,iDAAiD;YACjD,qFAAqF;YACrF,uDAAuD;YACvD,+EAA+E;YAE/E,qCAAqC;YACrC,oEAAoE;YACpE,iGAAiG;YACjG,sEAAsE;YAEtE,uCAAuC;YACvC,gGAAgG;YAChG,gFAAgF;YAChF,2EAA2E;YAE3E,oCAAoC;YACpC,mFAAmF;YACnF,4DAA4D;YAC5D,4DAA4D;YAE5D,8BAA8B;YAC9B,sEAAsE;YACtE,yCAAyC;YACzC,6DAA6D;YAC7D,kEAAkE;YAElE,gCAAgC;YAChC,0FAA0F;YAC1F,mEAAmE;YAEnE,8BAA8B;YAC9B,6BAA6B;YAC7B,uEAAuE;YAEvE,4BAA4B;YAC5B,2DAA2D;YAC3D,sCAAsC;YACtC,mFAAmF;SACpF,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED;;GAEG;AACH,IAAI,gBAAgB,GAAkC,IAAI,CAAC;AAE3D,MAAM,UAAU,yBAAyB;IACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAClD,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,IAAI,gBAAgB,EAAE,CAAC;QACrB,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UnifiedChatBox - Claude Code style unified input at bottom of terminal
|
|
3
|
+
*
|
|
4
|
+
* This implements Claude Code's exact approach:
|
|
5
|
+
*
|
|
6
|
+
* 1. Natural Output Flow
|
|
7
|
+
* - Streaming output just writes to stdout normally
|
|
8
|
+
* - The cursor stays where it is after each write
|
|
9
|
+
* - Lines scroll up naturally as new content appears
|
|
10
|
+
* - NO scroll regions, NO save/restore cursor during streaming
|
|
11
|
+
*
|
|
12
|
+
* 2. Readline Handles Input
|
|
13
|
+
* - Uses Node.js readline module for input
|
|
14
|
+
* - The input prompt naturally moves up as output streams above it
|
|
15
|
+
* - User can type while streaming - input is queued in memory, not rendered
|
|
16
|
+
*
|
|
17
|
+
* 3. Queue-Based Approach
|
|
18
|
+
* User types during streaming → Input stored in queue → Processed after streaming ends
|
|
19
|
+
*
|
|
20
|
+
* 4. The Key Insight
|
|
21
|
+
* The cursor is NEVER moved during streaming. Output just appends at current position.
|
|
22
|
+
* The "input at bottom" effect comes from:
|
|
23
|
+
* - New output pushes older content (including the prompt) upward
|
|
24
|
+
* - After streaming ends, a new prompt is shown at the bottom
|
|
25
|
+
*/
|
|
26
|
+
import * as readline from 'node:readline';
|
|
27
|
+
import { EventEmitter } from 'node:events';
|
|
28
|
+
export interface QueuedUserInput {
|
|
29
|
+
id: string;
|
|
30
|
+
text: string;
|
|
31
|
+
timestamp: number;
|
|
32
|
+
type: 'message' | 'command' | 'interrupt';
|
|
33
|
+
}
|
|
34
|
+
export interface UnifiedChatBoxState {
|
|
35
|
+
isStreaming: boolean;
|
|
36
|
+
inputBuffer: string;
|
|
37
|
+
cursorPosition: number;
|
|
38
|
+
queuedInputs: QueuedUserInput[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* UnifiedChatBox - Exactly like Claude Code
|
|
42
|
+
*
|
|
43
|
+
* During idle: readline shows prompt at current cursor position (naturally at bottom)
|
|
44
|
+
* During streaming: output flows naturally, typed input goes to invisible queue
|
|
45
|
+
* After streaming: new prompt appears at bottom naturally
|
|
46
|
+
*/
|
|
47
|
+
export declare class UnifiedChatBox extends EventEmitter {
|
|
48
|
+
private rl;
|
|
49
|
+
private readonly writeStream;
|
|
50
|
+
private readonly readStream;
|
|
51
|
+
private state;
|
|
52
|
+
private inputIdCounter;
|
|
53
|
+
private keypressHandler;
|
|
54
|
+
private originalStdoutWrite;
|
|
55
|
+
private outputSuppressed;
|
|
56
|
+
private readonly maxQueueSize;
|
|
57
|
+
private readonly maxInputLength;
|
|
58
|
+
private promptText;
|
|
59
|
+
constructor(writeStream?: NodeJS.WriteStream, readStream?: NodeJS.ReadStream);
|
|
60
|
+
/**
|
|
61
|
+
* Initialize with an existing readline interface
|
|
62
|
+
*/
|
|
63
|
+
attachToReadline(rl: readline.Interface): void;
|
|
64
|
+
/**
|
|
65
|
+
* Set the prompt text
|
|
66
|
+
*/
|
|
67
|
+
setPrompt(text: string): void;
|
|
68
|
+
/**
|
|
69
|
+
* Get current prompt text
|
|
70
|
+
*/
|
|
71
|
+
getPrompt(): string;
|
|
72
|
+
/**
|
|
73
|
+
* Start streaming mode - Claude Code style
|
|
74
|
+
*
|
|
75
|
+
* What happens:
|
|
76
|
+
* - Output continues to flow naturally to stdout
|
|
77
|
+
* - User keystrokes are captured but NOT echoed
|
|
78
|
+
* - Captured keystrokes go into an invisible queue
|
|
79
|
+
* - NO cursor manipulation at all
|
|
80
|
+
*/
|
|
81
|
+
startStreaming(): void;
|
|
82
|
+
/**
|
|
83
|
+
* End streaming mode - Claude Code style
|
|
84
|
+
*
|
|
85
|
+
* What happens:
|
|
86
|
+
* - Restore readline echo
|
|
87
|
+
* - Return queue summary for caller to process
|
|
88
|
+
* - Caller should then show a fresh prompt (naturally at bottom)
|
|
89
|
+
*/
|
|
90
|
+
endStreaming(): {
|
|
91
|
+
queuedCount: number;
|
|
92
|
+
queueSummary: string;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Check if currently streaming
|
|
96
|
+
*/
|
|
97
|
+
isStreaming(): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Set up keypress capture for invisible input during streaming
|
|
100
|
+
*/
|
|
101
|
+
private setupKeypressCapture;
|
|
102
|
+
/**
|
|
103
|
+
* Handle keypress during streaming - queue input invisibly
|
|
104
|
+
*/
|
|
105
|
+
private handleKeypress;
|
|
106
|
+
/**
|
|
107
|
+
* Append character(s) to the invisible buffer
|
|
108
|
+
*/
|
|
109
|
+
private appendToBuffer;
|
|
110
|
+
/**
|
|
111
|
+
* Handle backspace in buffer
|
|
112
|
+
*/
|
|
113
|
+
private handleBackspace;
|
|
114
|
+
/**
|
|
115
|
+
* Handle delete key in buffer
|
|
116
|
+
*/
|
|
117
|
+
private handleDelete;
|
|
118
|
+
/**
|
|
119
|
+
* Handle Ctrl+W - delete word before cursor
|
|
120
|
+
*/
|
|
121
|
+
private handleDeleteWord;
|
|
122
|
+
/**
|
|
123
|
+
* Submit current buffer to queue
|
|
124
|
+
*/
|
|
125
|
+
private submitBuffer;
|
|
126
|
+
/**
|
|
127
|
+
* Queue an interrupt
|
|
128
|
+
*/
|
|
129
|
+
private queueInterrupt;
|
|
130
|
+
/**
|
|
131
|
+
* Suppress readline echo during streaming
|
|
132
|
+
* Characters typed will be captured but not displayed
|
|
133
|
+
*/
|
|
134
|
+
private suppressReadlineEcho;
|
|
135
|
+
/**
|
|
136
|
+
* Restore readline echo
|
|
137
|
+
*/
|
|
138
|
+
private restoreReadlineEcho;
|
|
139
|
+
/**
|
|
140
|
+
* Check if there are queued inputs
|
|
141
|
+
*/
|
|
142
|
+
hasQueuedInput(): boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Get next queued input
|
|
145
|
+
*/
|
|
146
|
+
dequeue(): QueuedUserInput | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Get all queued inputs
|
|
149
|
+
*/
|
|
150
|
+
getQueue(): QueuedUserInput[];
|
|
151
|
+
/**
|
|
152
|
+
* Clear queue
|
|
153
|
+
*/
|
|
154
|
+
clearQueue(): void;
|
|
155
|
+
/**
|
|
156
|
+
* Get queue summary for display
|
|
157
|
+
*/
|
|
158
|
+
getQueueSummary(): string;
|
|
159
|
+
/**
|
|
160
|
+
* Get current input buffer (for display if needed)
|
|
161
|
+
*/
|
|
162
|
+
getInputBuffer(): string;
|
|
163
|
+
/**
|
|
164
|
+
* Get current state
|
|
165
|
+
*/
|
|
166
|
+
getState(): UnifiedChatBoxState;
|
|
167
|
+
/**
|
|
168
|
+
* Show queue indicator if there are queued items
|
|
169
|
+
*/
|
|
170
|
+
showQueueIndicator(): void;
|
|
171
|
+
/**
|
|
172
|
+
* Dispose and cleanup
|
|
173
|
+
*/
|
|
174
|
+
dispose(): void;
|
|
175
|
+
}
|
|
176
|
+
export declare function getUnifiedChatBox(): UnifiedChatBox;
|
|
177
|
+
export declare function resetUnifiedChatBox(): void;
|
|
178
|
+
//# sourceMappingURL=unifiedChatBox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unifiedChatBox.d.ts","sourceRoot":"","sources":["../../src/shell/unifiedChatBox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAE/C,OAAO,CAAC,KAAK,CAKX;IAEF,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAA2D;IAClF,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,gBAAgB,CAAS;IAGjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,UAAU,CAAQ;gBAGxB,WAAW,GAAE,MAAM,CAAC,WAA4B,EAChD,UAAU,GAAE,MAAM,CAAC,UAA0B;IAO/C;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI;IAK9C;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO7B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;;;;;;;OAQG;IACH,cAAc,IAAI,IAAI;IAetB;;;;;;;OAOG;IACH,YAAY,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAe7D;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAsFtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,OAAO,CAAC,YAAY;IA+BpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAmG5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,OAAO,IAAI,eAAe,GAAG,SAAS;IAItC;;OAEG;IACH,QAAQ,IAAI,eAAe,EAAE;IAI7B;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,eAAe,IAAI,MAAM;IAwBzB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,QAAQ,IAAI,mBAAmB;IAO/B;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAU1B;;OAEG;IACH,OAAO,IAAI,IAAI;CAehB;AAOD,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
|