codecane 1.0.156 → 1.0.170
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/browser-runner.d.ts +2 -0
- package/dist/browser-runner.js +210 -135
- package/dist/browser-runner.js.map +1 -1
- package/dist/chat-storage.d.ts +1 -1
- package/dist/chat-storage.js +35 -31
- package/dist/chat-storage.js.map +1 -1
- package/dist/checkpoints.d.ts +62 -0
- package/dist/checkpoints.js +134 -0
- package/dist/checkpoints.js.map +1 -0
- package/dist/cli.d.ts +20 -13
- package/dist/cli.js +461 -353
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +178 -25
- package/dist/client.js +236 -198
- package/dist/client.js.map +1 -1
- package/dist/code-map/tsconfig.tsbuildinfo +1 -1
- package/dist/common/actions.d.ts +2114 -443
- package/dist/common/actions.js +31 -78
- package/dist/common/actions.js.map +1 -1
- package/dist/common/browser-actions.d.ts +221 -141
- package/dist/common/browser-actions.js +25 -12
- package/dist/common/browser-actions.js.map +1 -1
- package/dist/common/constants/tools.d.ts +3 -0
- package/dist/common/constants/tools.js +24 -0
- package/dist/common/constants/tools.js.map +1 -0
- package/dist/common/constants.d.ts +14 -8
- package/dist/common/constants.js +7 -6
- package/dist/common/constants.js.map +1 -1
- package/dist/common/message-image-handling.d.ts +41 -0
- package/dist/common/message-image-handling.js +57 -0
- package/dist/common/message-image-handling.js.map +1 -0
- package/dist/common/project-file-tree.js +7 -7
- package/dist/common/project-file-tree.js.map +1 -1
- package/dist/common/types/agent-state.d.ts +466 -0
- package/dist/common/types/agent-state.js +30 -0
- package/dist/common/types/agent-state.js.map +1 -0
- package/dist/common/types/message.d.ts +311 -0
- package/dist/common/types/message.js +54 -0
- package/dist/common/types/message.js.map +1 -0
- package/dist/common/types/tools.d.ts +5 -0
- package/dist/common/types/tools.js +3 -0
- package/dist/common/types/tools.js.map +1 -0
- package/dist/common/util/__tests__/messages.test.js +70 -0
- package/dist/common/util/__tests__/messages.test.js.map +1 -0
- package/dist/common/util/changes.js +3 -3
- package/dist/common/util/changes.js.map +1 -1
- package/dist/common/util/credentials.d.ts +4 -4
- package/dist/common/util/file.d.ts +9 -2
- package/dist/common/util/file.js +31 -27
- package/dist/common/util/file.js.map +1 -1
- package/dist/common/util/git.js +1 -1
- package/dist/common/util/git.js.map +1 -1
- package/dist/common/util/lru-cache.d.ts +9 -0
- package/dist/common/util/lru-cache.js +42 -0
- package/dist/common/util/lru-cache.js.map +1 -0
- package/dist/common/util/messages.d.ts +6 -0
- package/dist/common/util/messages.js +22 -0
- package/dist/common/util/messages.js.map +1 -0
- package/dist/common/util/min-heap.d.ts +15 -0
- package/dist/common/util/min-heap.js +73 -0
- package/dist/common/util/min-heap.js.map +1 -0
- package/dist/common/util/process-stream.d.ts +8 -0
- package/dist/common/util/process-stream.js +102 -0
- package/dist/common/util/process-stream.js.map +1 -0
- package/dist/common/util/promise.d.ts +8 -0
- package/dist/common/util/promise.js +25 -2
- package/dist/common/util/promise.js.map +1 -1
- package/dist/common/util/string.d.ts +31 -0
- package/dist/common/util/string.js +71 -1
- package/dist/common/util/string.js.map +1 -1
- package/dist/common/websockets/websocket-schema.d.ts +3984 -938
- package/dist/config.d.ts +1 -0
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/credentials.d.ts +1 -0
- package/dist/credentials.js +7 -3
- package/dist/credentials.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/menu.js +16 -12
- package/dist/menu.js.map +1 -1
- package/dist/project-files.d.ts +43 -3
- package/dist/project-files.js +97 -18
- package/dist/project-files.js.map +1 -1
- package/dist/tool-handlers.d.ts +22 -7
- package/dist/tool-handlers.js +110 -43
- package/dist/tool-handlers.js.map +1 -1
- package/dist/utils/process-xml-chunks.d.ts +31 -0
- package/dist/utils/process-xml-chunks.js +235 -0
- package/dist/utils/process-xml-chunks.js.map +1 -0
- package/dist/utils/spinner.d.ts +11 -0
- package/dist/utils/spinner.js +87 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/utils/terminal.d.ts +3 -3
- package/dist/utils/terminal.js +23 -24
- package/dist/utils/terminal.js.map +1 -1
- package/dist/web-scraper.d.ts +1 -1
- package/dist/web-scraper.js +11 -7
- package/dist/web-scraper.js.map +1 -1
- package/dist/worker-script-project-context.js +1 -1
- package/dist/worker-script-project-context.js.map +1 -1
- package/package.json +3 -4
- package/dist/__tests__/browser-runner.test.js +0 -15
- package/dist/__tests__/browser-runner.test.js.map +0 -1
- /package/dist/{__tests__/browser-runner.test.d.ts → common/util/__tests__/messages.test.d.ts} +0 -0
package/dist/tool-handlers.js
CHANGED
|
@@ -23,19 +23,36 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
26
|
+
exports.handleToolCall = exports.toolHandlers = exports.handleCodeSearch = exports.handleRunTerminalCommand = exports.handleScrapeWebPage = exports.handleWriteFile = void 0;
|
|
27
27
|
const ripgrep_1 = require("@vscode/ripgrep");
|
|
28
28
|
const picocolors_1 = require("picocolors");
|
|
29
29
|
const child_process_1 = require("child_process");
|
|
30
30
|
const browser_actions_1 = require("./common/browser-actions");
|
|
31
31
|
const browser_runner_1 = require("./browser-runner");
|
|
32
32
|
const web_scraper_1 = require("./web-scraper");
|
|
33
|
-
const project_files_1 = require("./project-files");
|
|
34
33
|
const terminal_1 = require("./utils/terminal");
|
|
35
34
|
const string_1 = require("./common/util/string");
|
|
36
35
|
const path = __importStar(require("path"));
|
|
37
|
-
const
|
|
38
|
-
|
|
36
|
+
const spinner_1 = require("./utils/spinner");
|
|
37
|
+
const changes_1 = require("./common/util/changes");
|
|
38
|
+
const actions_1 = require("./common/actions");
|
|
39
|
+
const handleWriteFile = async (parameters, _id, projectPath) => {
|
|
40
|
+
const fileChange = actions_1.FileChangeSchema.parse(parameters);
|
|
41
|
+
const { created, modified } = (0, changes_1.applyChanges)(projectPath, [fileChange]);
|
|
42
|
+
let result = '';
|
|
43
|
+
for (const file of created) {
|
|
44
|
+
result += `Wrote to ${file} successfully.\n`;
|
|
45
|
+
console.log((0, picocolors_1.green)(`- Created ${file}`));
|
|
46
|
+
}
|
|
47
|
+
for (const file of modified) {
|
|
48
|
+
result += `Wrote to ${file} successfully.\n`;
|
|
49
|
+
console.log((0, picocolors_1.green)(`- Updated ${file}`));
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
exports.handleWriteFile = handleWriteFile;
|
|
54
|
+
const handleScrapeWebPage = async (parameters) => {
|
|
55
|
+
const { url } = parameters;
|
|
39
56
|
const content = await (0, web_scraper_1.scrapeWebPage)(url);
|
|
40
57
|
if (!content) {
|
|
41
58
|
return `<web_scraping_error url="${url}">Failed to scrape the web page.</web_scraping_error>`;
|
|
@@ -43,23 +60,22 @@ const handleScrapeWebPage = async (input, id) => {
|
|
|
43
60
|
return `<web_scraped_content url="${url}">${content}</web_scraped_content>`;
|
|
44
61
|
};
|
|
45
62
|
exports.handleScrapeWebPage = handleScrapeWebPage;
|
|
46
|
-
const handleRunTerminalCommand = async (
|
|
47
|
-
const { command } =
|
|
48
|
-
return (0, terminal_1.runTerminalCommand)(command, mode);
|
|
63
|
+
const handleRunTerminalCommand = async (parameters, id, mode, projectPath) => {
|
|
64
|
+
const { command } = parameters;
|
|
65
|
+
return (0, terminal_1.runTerminalCommand)(command, mode, projectPath);
|
|
49
66
|
};
|
|
50
67
|
exports.handleRunTerminalCommand = handleRunTerminalCommand;
|
|
51
|
-
const handleCodeSearch = async (
|
|
68
|
+
const handleCodeSearch = async (parameters, _id, projectPath) => {
|
|
52
69
|
return new Promise((resolve) => {
|
|
53
70
|
let stdout = '';
|
|
54
71
|
let stderr = '';
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
const pattern = input.pattern.replace(/"/g, '');
|
|
72
|
+
const basename = path.basename(projectPath);
|
|
73
|
+
const pattern = parameters.pattern.replace(/"/g, '');
|
|
58
74
|
const command = `${path.resolve(ripgrep_1.rgPath)} "${pattern}" .`;
|
|
59
75
|
console.log();
|
|
60
76
|
console.log((0, picocolors_1.green)(`Searching ${basename} for "${pattern}":`));
|
|
61
77
|
const childProcess = (0, child_process_1.spawn)(command, {
|
|
62
|
-
cwd:
|
|
78
|
+
cwd: projectPath,
|
|
63
79
|
shell: true,
|
|
64
80
|
});
|
|
65
81
|
childProcess.stdout.on('data', (data) => {
|
|
@@ -78,7 +94,7 @@ const handleCodeSearch = async (input, id) => {
|
|
|
78
94
|
console.log('...');
|
|
79
95
|
}
|
|
80
96
|
}
|
|
81
|
-
console.log((0, picocolors_1.green)(`Found ${lines.length} results
|
|
97
|
+
console.log((0, picocolors_1.green)(`Found ${lines.length} results`));
|
|
82
98
|
const truncatedStdout = (0, string_1.truncateStringWithMessage)(stdout, 10000);
|
|
83
99
|
const truncatedStderr = (0, string_1.truncateStringWithMessage)(stderr, 1000);
|
|
84
100
|
resolve(formatResult(truncatedStdout, truncatedStderr, 'Code search completed', code));
|
|
@@ -89,15 +105,53 @@ const handleCodeSearch = async (input, id) => {
|
|
|
89
105
|
});
|
|
90
106
|
};
|
|
91
107
|
exports.handleCodeSearch = handleCodeSearch;
|
|
108
|
+
function formatResult(stdout, stderr, status, exitCode) {
|
|
109
|
+
let result = '<terminal_command_result>\n';
|
|
110
|
+
result += `<stdout>${stdout}</stdout>\n`;
|
|
111
|
+
if (stderr !== undefined) {
|
|
112
|
+
result += `<stderr>${stderr}</stderr>\n`;
|
|
113
|
+
}
|
|
114
|
+
result += `<status>${status}</status>\n`;
|
|
115
|
+
if (exitCode !== null) {
|
|
116
|
+
result += `<exit_code>${exitCode}</exit_code>\n`;
|
|
117
|
+
}
|
|
118
|
+
result += '</terminal_command_result>';
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
92
121
|
exports.toolHandlers = {
|
|
122
|
+
write_file: exports.handleWriteFile,
|
|
93
123
|
scrape_web_page: exports.handleScrapeWebPage,
|
|
94
|
-
run_terminal_command: ((
|
|
95
|
-
continue: async (input, id) => input.response ?? 'Please continue',
|
|
124
|
+
run_terminal_command: ((parameters, id, projectPath) => (0, exports.handleRunTerminalCommand)(parameters, id, 'assistant', projectPath).then((result) => result.result)),
|
|
96
125
|
code_search: exports.handleCodeSearch,
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
126
|
+
end_turn: async () => {
|
|
127
|
+
return '';
|
|
128
|
+
},
|
|
129
|
+
browser_action: async (params, _id) => {
|
|
130
|
+
spinner_1.Spinner.get().start();
|
|
131
|
+
let response;
|
|
132
|
+
try {
|
|
133
|
+
const action = browser_actions_1.BrowserActionSchema.parse(params);
|
|
134
|
+
response = await (0, browser_runner_1.handleBrowserInstruction)(action);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
138
|
+
console.log('Small hiccup, one sec...');
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
error: `Browser action validation failed: ${errorMessage}`,
|
|
142
|
+
logs: [
|
|
143
|
+
{
|
|
144
|
+
type: 'error',
|
|
145
|
+
message: `Browser action validation failed: ${errorMessage}`,
|
|
146
|
+
timestamp: Date.now(),
|
|
147
|
+
source: 'tool',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
spinner_1.Spinner.get().stop();
|
|
154
|
+
}
|
|
101
155
|
// Log any browser errors
|
|
102
156
|
if (!response.success && response.error) {
|
|
103
157
|
console.error((0, picocolors_1.red)(`Browser action failed: ${response.error}`));
|
|
@@ -113,38 +167,51 @@ exports.toolHandlers = {
|
|
|
113
167
|
console.warn((0, picocolors_1.yellow)(log.message));
|
|
114
168
|
break;
|
|
115
169
|
case 'info':
|
|
116
|
-
console.info(log.message);
|
|
170
|
+
console.info((0, picocolors_1.cyan)(log.message));
|
|
117
171
|
break;
|
|
118
172
|
default:
|
|
119
|
-
console.log(log.message);
|
|
173
|
+
console.log((0, picocolors_1.cyan)(log.message));
|
|
120
174
|
}
|
|
121
175
|
}
|
|
122
176
|
});
|
|
123
177
|
}
|
|
124
|
-
|
|
125
|
-
if (response.chunks && response.chunks.length > 0) {
|
|
126
|
-
const sortedChunks = response.chunks.sort((a, b) => a.index - b.index);
|
|
127
|
-
const combinedBase64 = sortedChunks.map((ch) => ch.data).join('');
|
|
128
|
-
response.screenshot = combinedBase64;
|
|
129
|
-
delete response.chunks; // Remove chunks after combining
|
|
130
|
-
}
|
|
131
|
-
// Send the full response including screenshot
|
|
132
|
-
return JSON.stringify(response);
|
|
178
|
+
return response;
|
|
133
179
|
},
|
|
134
180
|
};
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (
|
|
139
|
-
|
|
181
|
+
const handleToolCall = async (toolCall, projectPath) => {
|
|
182
|
+
const { name, parameters } = toolCall;
|
|
183
|
+
const handler = exports.toolHandlers[name];
|
|
184
|
+
if (!handler) {
|
|
185
|
+
throw new Error(`No handler found for tool: ${name}`);
|
|
140
186
|
}
|
|
141
|
-
|
|
142
|
-
if (
|
|
143
|
-
|
|
187
|
+
const content = await handler(parameters, toolCall.id, projectPath);
|
|
188
|
+
if (typeof content !== 'string') {
|
|
189
|
+
throw new Error(`Tool call ${name} not supported. It returned non-string content.`);
|
|
144
190
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
191
|
+
// TODO: Add support for screenshots.
|
|
192
|
+
// const toolResultMessage: Message = {
|
|
193
|
+
// role: 'user',
|
|
194
|
+
// content: match(content)
|
|
195
|
+
// .with({ screenshots: P.not(P.nullish) }, (response) => [
|
|
196
|
+
// ...(response.screenshots.pre ? [response.screenshots.pre] : []),
|
|
197
|
+
// {
|
|
198
|
+
// type: 'text' as const,
|
|
199
|
+
// text:
|
|
200
|
+
// JSON.stringify({
|
|
201
|
+
// ...response,
|
|
202
|
+
// screenshots: undefined,
|
|
203
|
+
// }),
|
|
204
|
+
// },
|
|
205
|
+
// response.screenshots.post,
|
|
206
|
+
// ])
|
|
207
|
+
// .with(P.string, (str) => str)
|
|
208
|
+
// .otherwise((val) => JSON.stringify(val)),
|
|
209
|
+
// }
|
|
210
|
+
return {
|
|
211
|
+
name,
|
|
212
|
+
result: content,
|
|
213
|
+
id: toolCall.id,
|
|
214
|
+
};
|
|
215
|
+
};
|
|
216
|
+
exports.handleToolCall = handleToolCall;
|
|
150
217
|
//# sourceMappingURL=tool-handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../src/tool-handlers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAwC;AACxC,2CAAqD;AACrD,iDAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../src/tool-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler interface for XML tags
|
|
3
|
+
* Allows controlling both tag display and content handling
|
|
4
|
+
*/
|
|
5
|
+
export interface TagHandler {
|
|
6
|
+
onTagStart?: (tagName: string) => string | null;
|
|
7
|
+
onTagEnd: (tagName: string, content: string) => string | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* XmlStreamProcessor handles XML tags that may be split across multiple chunks.
|
|
11
|
+
* It processes tool-related XML tags and executes callbacks when nested tags are completed.
|
|
12
|
+
*/
|
|
13
|
+
export declare class XmlStreamProcessor {
|
|
14
|
+
private tagStack;
|
|
15
|
+
private currentContent;
|
|
16
|
+
private tagHandlers;
|
|
17
|
+
private processedLength;
|
|
18
|
+
private lastOutput;
|
|
19
|
+
constructor(tagHandlers: Record<string, TagHandler>);
|
|
20
|
+
/**
|
|
21
|
+
* Process a buffer of text that may contain XML tags
|
|
22
|
+
* @param buffer The complete buffer to process
|
|
23
|
+
* @returns Processed text with XML tags handled according to the tag handlers
|
|
24
|
+
*/
|
|
25
|
+
process(buffer: string): string;
|
|
26
|
+
private handleClosingTag;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Default tag handlers for common XML tags
|
|
30
|
+
*/
|
|
31
|
+
export declare const defaultTagHandlers: Record<string, TagHandler>;
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultTagHandlers = exports.XmlStreamProcessor = void 0;
|
|
4
|
+
const tools_1 = require("../common/constants/tools");
|
|
5
|
+
const string_1 = require("../common/util/string");
|
|
6
|
+
const picocolors_1 = require("picocolors");
|
|
7
|
+
/**
|
|
8
|
+
* Formats a tag name for display in the terminal
|
|
9
|
+
* @param tagName The name of the tag to format
|
|
10
|
+
* @returns Formatted tag name with proper styling
|
|
11
|
+
*/
|
|
12
|
+
const formatTagName = (tagName) => {
|
|
13
|
+
return `\n[${(0, picocolors_1.bold)((0, string_1.snakeToTitleCase)(tagName))}] `;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* XmlStreamProcessor handles XML tags that may be split across multiple chunks.
|
|
17
|
+
* It processes tool-related XML tags and executes callbacks when nested tags are completed.
|
|
18
|
+
*/
|
|
19
|
+
class XmlStreamProcessor {
|
|
20
|
+
tagStack = [];
|
|
21
|
+
currentContent = '';
|
|
22
|
+
tagHandlers;
|
|
23
|
+
processedLength = 0;
|
|
24
|
+
lastOutput = '';
|
|
25
|
+
constructor(tagHandlers) {
|
|
26
|
+
this.tagHandlers = tagHandlers;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Process a buffer of text that may contain XML tags
|
|
30
|
+
* @param buffer The complete buffer to process
|
|
31
|
+
* @returns Processed text with XML tags handled according to the tag handlers
|
|
32
|
+
*/
|
|
33
|
+
process(buffer) {
|
|
34
|
+
// Only process new content since last call
|
|
35
|
+
const newContent = buffer.slice(this.processedLength);
|
|
36
|
+
if (!newContent) {
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
// Process the entire buffer
|
|
40
|
+
let output = this.lastOutput;
|
|
41
|
+
let position = this.processedLength;
|
|
42
|
+
// Look for opening and closing tags in the buffer
|
|
43
|
+
while (position < buffer.length) {
|
|
44
|
+
// Look for opening tag
|
|
45
|
+
const openTagMatch = buffer.slice(position).match(/<([a-zA-Z_]+)>/);
|
|
46
|
+
// Look for closing tag
|
|
47
|
+
const closeTagMatch = buffer.slice(position).match(/<\/([a-zA-Z_]+)>/);
|
|
48
|
+
if (this.tagStack.length === 0) {
|
|
49
|
+
// Not inside any tag - look for opening tag or add text to output
|
|
50
|
+
if (openTagMatch && openTagMatch.index !== undefined) {
|
|
51
|
+
// Add text before the tag to output
|
|
52
|
+
output += buffer.slice(position, position + openTagMatch.index);
|
|
53
|
+
// Get tag name
|
|
54
|
+
const tagName = openTagMatch[1];
|
|
55
|
+
// Handle opening tag display
|
|
56
|
+
const handler = this.tagHandlers[tagName];
|
|
57
|
+
if (handler && handler.onTagStart) {
|
|
58
|
+
const tagDisplay = handler.onTagStart(tagName);
|
|
59
|
+
if (tagDisplay !== null) {
|
|
60
|
+
output += tagDisplay;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Move position to after the opening tag
|
|
64
|
+
position += openTagMatch.index + openTagMatch[0].length;
|
|
65
|
+
// Push tag name to stack
|
|
66
|
+
this.tagStack.push(tagName);
|
|
67
|
+
this.currentContent = '';
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// No opening tag found, add remaining text to output
|
|
71
|
+
output += buffer.slice(position);
|
|
72
|
+
position = buffer.length;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Inside a tag - look for nested opening tag or closing tag
|
|
77
|
+
if (openTagMatch &&
|
|
78
|
+
closeTagMatch &&
|
|
79
|
+
openTagMatch.index !== undefined &&
|
|
80
|
+
closeTagMatch.index !== undefined) {
|
|
81
|
+
// Both opening and closing tags found, check which comes first
|
|
82
|
+
if (openTagMatch.index < closeTagMatch.index) {
|
|
83
|
+
// Opening tag comes first
|
|
84
|
+
this.currentContent += buffer.slice(position, position + openTagMatch.index);
|
|
85
|
+
position += openTagMatch.index + openTagMatch[0].length;
|
|
86
|
+
this.tagStack.push(openTagMatch[1]);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Closing tag comes first
|
|
90
|
+
this.currentContent += buffer.slice(position, position + closeTagMatch.index);
|
|
91
|
+
position += closeTagMatch.index + closeTagMatch[0].length;
|
|
92
|
+
const result = this.handleClosingTag(closeTagMatch[1]);
|
|
93
|
+
if (result !== null) {
|
|
94
|
+
output += result;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (closeTagMatch && closeTagMatch.index !== undefined) {
|
|
99
|
+
// Only closing tag found
|
|
100
|
+
this.currentContent += buffer.slice(position, position + closeTagMatch.index);
|
|
101
|
+
position += closeTagMatch.index + closeTagMatch[0].length;
|
|
102
|
+
const result = this.handleClosingTag(closeTagMatch[1]);
|
|
103
|
+
if (result !== null) {
|
|
104
|
+
output += result;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else if (openTagMatch && openTagMatch.index !== undefined) {
|
|
108
|
+
// Only opening tag found
|
|
109
|
+
this.currentContent += buffer.slice(position, position + openTagMatch.index);
|
|
110
|
+
position += openTagMatch.index + openTagMatch[0].length;
|
|
111
|
+
this.tagStack.push(openTagMatch[1]);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// No tags found, add everything to current content
|
|
115
|
+
this.currentContent += buffer.slice(position);
|
|
116
|
+
position = buffer.length;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Update processed length and last output
|
|
121
|
+
this.processedLength = position;
|
|
122
|
+
// Calculate new output since last call
|
|
123
|
+
const newOutput = output.slice(this.lastOutput.length);
|
|
124
|
+
this.lastOutput = output;
|
|
125
|
+
return newOutput;
|
|
126
|
+
}
|
|
127
|
+
handleClosingTag(tagName) {
|
|
128
|
+
// Check if this closing tag matches the current tag on the stack
|
|
129
|
+
if (this.tagStack.length > 0) {
|
|
130
|
+
const currentTag = this.tagStack.pop();
|
|
131
|
+
// If tag names don't match, attempt to recover by ignoring this closing tag
|
|
132
|
+
if (currentTag !== tagName) {
|
|
133
|
+
// Push the popped tag back onto the stack
|
|
134
|
+
if (currentTag) {
|
|
135
|
+
this.tagStack.push(currentTag);
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
// If we're closing a nested tag
|
|
140
|
+
if (this.tagStack.length === 1) {
|
|
141
|
+
const parentTag = this.tagStack[0];
|
|
142
|
+
const handler = this.tagHandlers[parentTag];
|
|
143
|
+
if (handler) {
|
|
144
|
+
const result = handler.onTagEnd(tagName, this.currentContent);
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// If we're closing the main tag, reset content
|
|
149
|
+
if (this.tagStack.length === 0) {
|
|
150
|
+
this.currentContent = '';
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.XmlStreamProcessor = XmlStreamProcessor;
|
|
157
|
+
/**
|
|
158
|
+
* Default tag handlers for common XML tags
|
|
159
|
+
*/
|
|
160
|
+
exports.defaultTagHandlers = {
|
|
161
|
+
// Create handlers for each tool in TOOL_LIST
|
|
162
|
+
...Object.fromEntries(tools_1.TOOL_LIST.map((tool) => [
|
|
163
|
+
tool,
|
|
164
|
+
{
|
|
165
|
+
onTagStart: (tagName) => formatTagName(tagName),
|
|
166
|
+
onTagEnd: (_tagName, _content) => null, // Hide all nested tags by default
|
|
167
|
+
},
|
|
168
|
+
])),
|
|
169
|
+
add_subgoal: {
|
|
170
|
+
onTagStart: (tagName) => formatTagName(tagName),
|
|
171
|
+
onTagEnd: (tagName, content) => {
|
|
172
|
+
if (tagName === 'objective') {
|
|
173
|
+
return content;
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
update_subgoal: {
|
|
179
|
+
onTagStart: (tagName) => formatTagName(tagName),
|
|
180
|
+
onTagEnd: (tagName, content) => {
|
|
181
|
+
if (tagName === 'objective') {
|
|
182
|
+
return content;
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
end_turn: {
|
|
188
|
+
onTagStart: () => null,
|
|
189
|
+
onTagEnd: () => null,
|
|
190
|
+
},
|
|
191
|
+
// Override with specific handlers for tools that need special handling
|
|
192
|
+
write_file: {
|
|
193
|
+
onTagStart: (tagName) => formatTagName(tagName),
|
|
194
|
+
onTagEnd: (tagName, content) => {
|
|
195
|
+
// hide content tags
|
|
196
|
+
if (tagName === 'path') {
|
|
197
|
+
return content;
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
run_terminal_command: {
|
|
203
|
+
onTagStart: (tagName) => formatTagName(tagName),
|
|
204
|
+
onTagEnd: (tagName, content) => {
|
|
205
|
+
return content;
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
read_files: {
|
|
209
|
+
onTagStart: (tagName) => formatTagName(tagName),
|
|
210
|
+
onTagEnd: (tagName, content) => {
|
|
211
|
+
// Hide paths tag
|
|
212
|
+
if (tagName === 'paths') {
|
|
213
|
+
return content.split('\n').join(',');
|
|
214
|
+
}
|
|
215
|
+
return content;
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
find_files: {
|
|
219
|
+
onTagStart: (tagName) => formatTagName(tagName),
|
|
220
|
+
onTagEnd: (tagName, content) => {
|
|
221
|
+
return content;
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
code_search: {
|
|
225
|
+
onTagStart: (tagName) => formatTagName(tagName),
|
|
226
|
+
onTagEnd: (tagName, content) => {
|
|
227
|
+
// Hide pattern tag
|
|
228
|
+
if (tagName === 'pattern') {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
return content;
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
//# sourceMappingURL=process-xml-chunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-xml-chunks.js","sourceRoot":"","sources":["../../src/utils/process-xml-chunks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.Spinner = void 0;
|
|
27
|
+
const picocolors_1 = require("picocolors");
|
|
28
|
+
const readline = __importStar(require("readline"));
|
|
29
|
+
const chars = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
30
|
+
class Spinner {
|
|
31
|
+
static instance = null;
|
|
32
|
+
loadingInterval = null;
|
|
33
|
+
constructor() { }
|
|
34
|
+
static get() {
|
|
35
|
+
if (!Spinner.instance) {
|
|
36
|
+
Spinner.instance = new Spinner();
|
|
37
|
+
}
|
|
38
|
+
return Spinner.instance;
|
|
39
|
+
}
|
|
40
|
+
start() {
|
|
41
|
+
if (this.loadingInterval) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
let i = 0;
|
|
45
|
+
// Hide cursor while spinner is active
|
|
46
|
+
process.stdout.write('\u001B[?25l');
|
|
47
|
+
this.loadingInterval = setInterval(() => {
|
|
48
|
+
this.rewriteLine((0, picocolors_1.green)(`${chars[i]} Thinking...`));
|
|
49
|
+
i = (i + 1) % chars.length;
|
|
50
|
+
}, 100);
|
|
51
|
+
}
|
|
52
|
+
stop() {
|
|
53
|
+
if (!this.loadingInterval) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
clearInterval(this.loadingInterval);
|
|
57
|
+
this.loadingInterval = null;
|
|
58
|
+
this.rewriteLine(''); // Clear the spinner line
|
|
59
|
+
this.restoreCursor(); // Show cursor after spinner stops
|
|
60
|
+
}
|
|
61
|
+
restoreCursor() {
|
|
62
|
+
process.stdout.write('\u001B[?25h');
|
|
63
|
+
}
|
|
64
|
+
log(message) {
|
|
65
|
+
// Temporarily clear the spinner line
|
|
66
|
+
this.rewriteLine('');
|
|
67
|
+
// Write the log message
|
|
68
|
+
console.log(message);
|
|
69
|
+
// If spinner is active, redraw it on the next line
|
|
70
|
+
if (this.loadingInterval) {
|
|
71
|
+
const i = Math.floor(Math.random() * chars.length);
|
|
72
|
+
this.rewriteLine((0, picocolors_1.green)(`${chars[i]} Thinking...`));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
rewriteLine(line) {
|
|
76
|
+
if (process.stdout.isTTY) {
|
|
77
|
+
readline.clearLine(process.stdout, 0);
|
|
78
|
+
readline.cursorTo(process.stdout, 0);
|
|
79
|
+
process.stdout.write(line);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
process.stdout.write(line + '\n');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.Spinner = Spinner;
|
|
87
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkC;AAClC,mDAAoC;AAEpC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAEhE,MAAa,OAAO;IACV,MAAM,CAAC,QAAQ,GAAmB,IAAI,CAAA;IACtC,eAAe,GAA0B,IAAI,CAAA;IAErD,gBAAuB,CAAC;IAEjB,MAAM,CAAC,GAAG;QACf,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAA;QAClC,CAAC;QACD,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,sCAAsC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,IAAA,kBAAK,EAAC,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;YAClD,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;QAC5B,CAAC,EAAE,GAAG,CAAC,CAAA;IACT,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QAED,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC3B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA,CAAC,yBAAyB;QAC9C,IAAI,CAAC,aAAa,EAAE,CAAA,CAAC,kCAAkC;IACzD,CAAC;IAED,aAAa;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACrC,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,qCAAqC;QACrC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QACpB,wBAAwB;QACxB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACpB,mDAAmD;QACnD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YAClD,IAAI,CAAC,WAAW,CAAC,IAAA,kBAAK,EAAC,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACrC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;;AA9DH,0BA+DC"}
|
package/dist/utils/terminal.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const isCommandRunning: () => boolean;
|
|
2
|
-
export declare const recreateShell: () => void;
|
|
3
|
-
export declare const resetShell: () => void;
|
|
4
|
-
export declare const runTerminalCommand: (command: string, mode: "user" | "assistant") => Promise<{
|
|
2
|
+
export declare const recreateShell: (projectPath: string) => void;
|
|
3
|
+
export declare const resetShell: (projectPath: string) => void;
|
|
4
|
+
export declare const runTerminalCommand: (command: string, mode: "user" | "assistant", projectPath: string) => Promise<{
|
|
5
5
|
result: string;
|
|
6
6
|
stdout: string;
|
|
7
7
|
}>;
|