codebuff 1.0.169 → 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.js +17 -7
- package/dist/browser-runner.js.map +1 -1
- package/dist/chat-storage.d.ts +2 -27
- package/dist/chat-storage.js +73 -139
- package/dist/chat-storage.js.map +1 -1
- package/dist/checkpoint-file-manager.d.ts +8 -0
- package/dist/checkpoint-file-manager.js +125 -0
- package/dist/checkpoint-file-manager.js.map +1 -0
- package/dist/checkpoints.d.ts +61 -0
- package/dist/checkpoints.js +171 -0
- package/dist/checkpoints.js.map +1 -0
- package/dist/cli.d.ts +7 -8
- package/dist/cli.js +127 -155
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +179 -28
- package/dist/client.js +154 -150
- package/dist/client.js.map +1 -1
- package/dist/code-map/languages.js +17 -7
- package/dist/code-map/languages.js.map +1 -1
- package/dist/code-map/parse.js +17 -7
- package/dist/code-map/parse.js.map +1 -1
- package/dist/code-map/tsconfig.tsbuildinfo +1 -1
- package/dist/common/actions.d.ts +2121 -560
- package/dist/common/actions.js +58 -81
- package/dist/common/actions.js.map +1 -1
- package/dist/common/constants/tools.d.ts +13 -0
- package/dist/common/constants/tools.js +22 -0
- package/dist/common/constants/tools.js.map +1 -0
- package/dist/common/constants.d.ts +0 -1
- package/dist/common/constants.js +3 -3
- package/dist/common/constants.js.map +1 -1
- package/dist/common/logger.d.ts +1 -0
- package/dist/common/logger.js +7 -0
- package/dist/common/logger.js.map +1 -0
- package/dist/common/types/agent-state.d.ts +461 -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/changes.js +3 -3
- package/dist/common/util/changes.js.map +1 -1
- package/dist/common/util/constants.d.ts +1 -0
- package/dist/common/util/constants.js +7 -0
- package/dist/common/util/constants.js.map +1 -0
- package/dist/common/util/credentials.d.ts +4 -4
- package/dist/common/util/file.d.ts +6 -2
- package/dist/common/util/file.js +25 -24
- 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/helpers.d.ts +1 -0
- package/dist/common/util/helpers.js +6 -0
- package/dist/common/util/helpers.js.map +1 -0
- package/dist/common/util/messages.d.ts +1 -1
- 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/saxy.d.ts +158 -0
- package/dist/common/util/saxy.js +450 -0
- package/dist/common/util/saxy.js.map +1 -0
- package/dist/common/util/string.d.ts +13 -0
- package/dist/common/util/string.js +21 -1
- package/dist/common/util/string.js.map +1 -1
- package/dist/common/util/token-counter.d.ts +3 -0
- package/dist/common/util/token-counter.js +27 -0
- package/dist/common/util/token-counter.js.map +1 -0
- package/dist/common/websockets/websocket-schema.d.ts +3646 -530
- package/dist/create-template-project.js +17 -7
- package/dist/create-template-project.js.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/menu.js +31 -19
- package/dist/menu.js.map +1 -1
- package/dist/project-files.d.ts +40 -2
- package/dist/project-files.js +94 -34
- package/dist/project-files.js.map +1 -1
- package/dist/tool-handlers.d.ts +21 -7
- package/dist/tool-handlers.js +99 -37
- package/dist/tool-handlers.js.map +1 -1
- package/dist/utils/__tests__/xml-stream-parser.test.js +221 -0
- package/dist/utils/__tests__/xml-stream-parser.test.js.map +1 -0
- package/dist/utils/spinner.d.ts +1 -0
- package/dist/utils/spinner.js +28 -7
- package/dist/utils/spinner.js.map +1 -1
- package/dist/utils/terminal.d.ts +23 -3
- package/dist/utils/terminal.js +68 -45
- package/dist/utils/terminal.js.map +1 -1
- package/dist/utils/tool-renderers.d.ts +16 -0
- package/dist/utils/tool-renderers.js +105 -0
- package/dist/utils/tool-renderers.js.map +1 -0
- package/dist/utils/xml-stream-parser.d.ts +9 -0
- package/dist/utils/xml-stream-parser.js +128 -0
- package/dist/utils/xml-stream-parser.js.map +1 -0
- package/dist/worker-script-project-context.js +1 -1
- package/dist/worker-script-project-context.js.map +1 -1
- package/package.json +2 -1
- 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 → utils/__tests__/xml-stream-parser.test.d.ts} +0 -0
package/dist/tool-handlers.js
CHANGED
|
@@ -15,28 +15,54 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
36
|
+
exports.handleToolCall = exports.toolHandlers = exports.handleCodeSearch = exports.handleRunTerminalCommand = exports.handleScrapeWebPage = exports.handleWriteFile = void 0;
|
|
27
37
|
const ripgrep_1 = require("@vscode/ripgrep");
|
|
28
38
|
const picocolors_1 = require("picocolors");
|
|
29
39
|
const child_process_1 = require("child_process");
|
|
30
40
|
const browser_actions_1 = require("./common/browser-actions");
|
|
31
41
|
const browser_runner_1 = require("./browser-runner");
|
|
32
42
|
const web_scraper_1 = require("./web-scraper");
|
|
33
|
-
const project_files_1 = require("./project-files");
|
|
34
43
|
const terminal_1 = require("./utils/terminal");
|
|
35
44
|
const string_1 = require("./common/util/string");
|
|
36
45
|
const path = __importStar(require("path"));
|
|
37
46
|
const spinner_1 = require("./utils/spinner");
|
|
38
|
-
const
|
|
39
|
-
|
|
47
|
+
const changes_1 = require("./common/util/changes");
|
|
48
|
+
const actions_1 = require("./common/actions");
|
|
49
|
+
const handleWriteFile = async (parameters, _id, projectPath) => {
|
|
50
|
+
const fileChange = actions_1.FileChangeSchema.parse(parameters);
|
|
51
|
+
const { created, modified } = (0, changes_1.applyChanges)(projectPath, [fileChange]);
|
|
52
|
+
let result = '';
|
|
53
|
+
for (const file of created) {
|
|
54
|
+
result += `Wrote to ${file} successfully.\n`;
|
|
55
|
+
console.log((0, picocolors_1.green)(`- Created ${file}`));
|
|
56
|
+
}
|
|
57
|
+
for (const file of modified) {
|
|
58
|
+
result += `Wrote to ${file} successfully.\n`;
|
|
59
|
+
console.log((0, picocolors_1.green)(`- Updated ${file}`));
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
};
|
|
63
|
+
exports.handleWriteFile = handleWriteFile;
|
|
64
|
+
const handleScrapeWebPage = async (parameters) => {
|
|
65
|
+
const { url } = parameters;
|
|
40
66
|
const content = await (0, web_scraper_1.scrapeWebPage)(url);
|
|
41
67
|
if (!content) {
|
|
42
68
|
return `<web_scraping_error url="${url}">Failed to scrape the web page.</web_scraping_error>`;
|
|
@@ -44,23 +70,22 @@ const handleScrapeWebPage = async (input, id) => {
|
|
|
44
70
|
return `<web_scraped_content url="${url}">${content}</web_scraped_content>`;
|
|
45
71
|
};
|
|
46
72
|
exports.handleScrapeWebPage = handleScrapeWebPage;
|
|
47
|
-
const handleRunTerminalCommand = async (
|
|
48
|
-
const { command } =
|
|
49
|
-
return (0, terminal_1.runTerminalCommand)(command, mode);
|
|
73
|
+
const handleRunTerminalCommand = async (parameters, id, mode, projectPath) => {
|
|
74
|
+
const { command } = parameters;
|
|
75
|
+
return (0, terminal_1.runTerminalCommand)(command, mode, projectPath);
|
|
50
76
|
};
|
|
51
77
|
exports.handleRunTerminalCommand = handleRunTerminalCommand;
|
|
52
|
-
const handleCodeSearch = async (
|
|
78
|
+
const handleCodeSearch = async (parameters, _id, projectPath) => {
|
|
53
79
|
return new Promise((resolve) => {
|
|
54
80
|
let stdout = '';
|
|
55
81
|
let stderr = '';
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const pattern = input.pattern.replace(/"/g, '');
|
|
82
|
+
const basename = path.basename(projectPath);
|
|
83
|
+
const pattern = parameters.pattern.replace(/"/g, '');
|
|
59
84
|
const command = `${path.resolve(ripgrep_1.rgPath)} "${pattern}" .`;
|
|
60
85
|
console.log();
|
|
61
86
|
console.log((0, picocolors_1.green)(`Searching ${basename} for "${pattern}":`));
|
|
62
87
|
const childProcess = (0, child_process_1.spawn)(command, {
|
|
63
|
-
cwd:
|
|
88
|
+
cwd: projectPath,
|
|
64
89
|
shell: true,
|
|
65
90
|
});
|
|
66
91
|
childProcess.stdout.on('data', (data) => {
|
|
@@ -79,7 +104,7 @@ const handleCodeSearch = async (input, id) => {
|
|
|
79
104
|
console.log('...');
|
|
80
105
|
}
|
|
81
106
|
}
|
|
82
|
-
console.log((0, picocolors_1.green)(`Found ${lines.length} results
|
|
107
|
+
console.log((0, picocolors_1.green)(`Found ${lines.length} results`));
|
|
83
108
|
const truncatedStdout = (0, string_1.truncateStringWithMessage)(stdout, 10000);
|
|
84
109
|
const truncatedStderr = (0, string_1.truncateStringWithMessage)(stderr, 1000);
|
|
85
110
|
resolve(formatResult(truncatedStdout, truncatedStderr, 'Code search completed', code));
|
|
@@ -90,16 +115,32 @@ const handleCodeSearch = async (input, id) => {
|
|
|
90
115
|
});
|
|
91
116
|
};
|
|
92
117
|
exports.handleCodeSearch = handleCodeSearch;
|
|
118
|
+
function formatResult(stdout, stderr, status, exitCode) {
|
|
119
|
+
let result = '<terminal_command_result>\n';
|
|
120
|
+
result += `<stdout>${stdout}</stdout>\n`;
|
|
121
|
+
if (stderr !== undefined) {
|
|
122
|
+
result += `<stderr>${stderr}</stderr>\n`;
|
|
123
|
+
}
|
|
124
|
+
result += `<status>${status}</status>\n`;
|
|
125
|
+
if (exitCode !== null) {
|
|
126
|
+
result += `<exit_code>${exitCode}</exit_code>\n`;
|
|
127
|
+
}
|
|
128
|
+
result += '</terminal_command_result>';
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
93
131
|
exports.toolHandlers = {
|
|
132
|
+
write_file: exports.handleWriteFile,
|
|
94
133
|
scrape_web_page: exports.handleScrapeWebPage,
|
|
95
|
-
run_terminal_command: ((
|
|
96
|
-
continue: async (input, id) => input.response ?? 'Please continue',
|
|
134
|
+
run_terminal_command: ((parameters, id, projectPath) => (0, exports.handleRunTerminalCommand)(parameters, id, 'assistant', projectPath).then((result) => result.result)),
|
|
97
135
|
code_search: exports.handleCodeSearch,
|
|
98
|
-
|
|
136
|
+
end_turn: async () => {
|
|
137
|
+
return '';
|
|
138
|
+
},
|
|
139
|
+
browser_action: async (params, _id) => {
|
|
99
140
|
spinner_1.Spinner.get().start();
|
|
100
141
|
let response;
|
|
101
142
|
try {
|
|
102
|
-
const action = browser_actions_1.BrowserActionSchema.parse(
|
|
143
|
+
const action = browser_actions_1.BrowserActionSchema.parse(params);
|
|
103
144
|
response = await (0, browser_runner_1.handleBrowserInstruction)(action);
|
|
104
145
|
}
|
|
105
146
|
catch (error) {
|
|
@@ -147,19 +188,40 @@ exports.toolHandlers = {
|
|
|
147
188
|
return response;
|
|
148
189
|
},
|
|
149
190
|
};
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (
|
|
154
|
-
|
|
191
|
+
const handleToolCall = async (toolCall, projectPath) => {
|
|
192
|
+
const { name, parameters } = toolCall;
|
|
193
|
+
const handler = exports.toolHandlers[name];
|
|
194
|
+
if (!handler) {
|
|
195
|
+
throw new Error(`No handler found for tool: ${name}`);
|
|
155
196
|
}
|
|
156
|
-
|
|
157
|
-
if (
|
|
158
|
-
|
|
197
|
+
const content = await handler(parameters, toolCall.id, projectPath);
|
|
198
|
+
if (typeof content !== 'string') {
|
|
199
|
+
throw new Error(`Tool call ${name} not supported. It returned non-string content.`);
|
|
159
200
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
201
|
+
// TODO: Add support for screenshots.
|
|
202
|
+
// const toolResultMessage: Message = {
|
|
203
|
+
// role: 'user',
|
|
204
|
+
// content: match(content)
|
|
205
|
+
// .with({ screenshots: P.not(P.nullish) }, (response) => [
|
|
206
|
+
// ...(response.screenshots.pre ? [response.screenshots.pre] : []),
|
|
207
|
+
// {
|
|
208
|
+
// type: 'text' as const,
|
|
209
|
+
// text:
|
|
210
|
+
// JSON.stringify({
|
|
211
|
+
// ...response,
|
|
212
|
+
// screenshots: undefined,
|
|
213
|
+
// }),
|
|
214
|
+
// },
|
|
215
|
+
// response.screenshots.post,
|
|
216
|
+
// ])
|
|
217
|
+
// .with(P.string, (str) => str)
|
|
218
|
+
// .otherwise((val) => JSON.stringify(val)),
|
|
219
|
+
// }
|
|
220
|
+
return {
|
|
221
|
+
name,
|
|
222
|
+
result: content,
|
|
223
|
+
id: toolCall.id,
|
|
224
|
+
};
|
|
225
|
+
};
|
|
226
|
+
exports.handleToolCall = handleToolCall;
|
|
165
227
|
//# sourceMappingURL=tool-handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../src/tool-handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../src/tool-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
const bun_test_1 = require("bun:test");
|
|
8
|
+
const stream_1 = require("stream");
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const xml_stream_parser_1 = require("../xml-stream-parser");
|
|
12
|
+
const tool_renderers_1 = require("../tool-renderers");
|
|
13
|
+
const toolRenderers = {
|
|
14
|
+
run_terminal_command: tool_renderers_1.defaultToolCallRenderer,
|
|
15
|
+
write_file: tool_renderers_1.defaultToolCallRenderer,
|
|
16
|
+
read_files: tool_renderers_1.defaultToolCallRenderer,
|
|
17
|
+
};
|
|
18
|
+
(0, bun_test_1.describe)('Saxy Stream Processor', () => {
|
|
19
|
+
(0, bun_test_1.test)('pipes output to writable stream', async () => {
|
|
20
|
+
const xml = '<run_terminal_command><command>echo hello</command></run_terminal_command>';
|
|
21
|
+
let result = '';
|
|
22
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
23
|
+
const writable = new stream_1.Writable({
|
|
24
|
+
write(chunk, encoding, callback) {
|
|
25
|
+
result += chunk.toString();
|
|
26
|
+
callback();
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
processor.pipe(writable);
|
|
30
|
+
processor.write(xml);
|
|
31
|
+
processor.end();
|
|
32
|
+
// Wait for the stream to finish
|
|
33
|
+
await new Promise((resolve) => {
|
|
34
|
+
writable.on('finish', resolve);
|
|
35
|
+
});
|
|
36
|
+
(0, bun_test_1.expect)(result).toContain('Run Terminal Command');
|
|
37
|
+
(0, bun_test_1.expect)(result).toContain('echo hello');
|
|
38
|
+
});
|
|
39
|
+
(0, bun_test_1.test)('handles multiple tool calls in sequence', async () => {
|
|
40
|
+
const xml = '<run_terminal_command><command>ls</command></run_terminal_command><read_files><paths>file.txt</paths></read_files>';
|
|
41
|
+
let result = '';
|
|
42
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
43
|
+
const writable = new stream_1.Writable({
|
|
44
|
+
write(chunk, encoding, callback) {
|
|
45
|
+
result += chunk.toString();
|
|
46
|
+
callback();
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
processor.pipe(writable);
|
|
50
|
+
processor.write(xml);
|
|
51
|
+
processor.end();
|
|
52
|
+
// Wait for the stream to finish
|
|
53
|
+
await new Promise((resolve) => {
|
|
54
|
+
writable.on('finish', resolve);
|
|
55
|
+
});
|
|
56
|
+
(0, bun_test_1.expect)(result).toContain('Run Terminal Command');
|
|
57
|
+
(0, bun_test_1.expect)(result).toContain('ls');
|
|
58
|
+
(0, bun_test_1.expect)(result).toContain('Read Files');
|
|
59
|
+
(0, bun_test_1.expect)(result).toContain('file.txt');
|
|
60
|
+
});
|
|
61
|
+
(0, bun_test_1.test)('handles text content between tool calls', async () => {
|
|
62
|
+
const xml = '<run_terminal_command><command>ls</command></run_terminal_command>Some text between tool calls<read_files><paths>file.txt</paths></read_files>';
|
|
63
|
+
let result = '';
|
|
64
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
65
|
+
const writable = new stream_1.Writable({
|
|
66
|
+
write(chunk, encoding, callback) {
|
|
67
|
+
result += chunk.toString();
|
|
68
|
+
callback();
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
processor.pipe(writable);
|
|
72
|
+
processor.write(xml);
|
|
73
|
+
processor.end();
|
|
74
|
+
// Wait for the stream to finish
|
|
75
|
+
await new Promise((resolve) => {
|
|
76
|
+
writable.on('finish', resolve);
|
|
77
|
+
});
|
|
78
|
+
(0, bun_test_1.expect)(result).toContain('Run Terminal Command');
|
|
79
|
+
(0, bun_test_1.expect)(result).toContain('ls');
|
|
80
|
+
(0, bun_test_1.expect)(result).toContain('Some text between tool calls');
|
|
81
|
+
(0, bun_test_1.expect)(result).toContain('Read Files');
|
|
82
|
+
(0, bun_test_1.expect)(result).toContain('file.txt');
|
|
83
|
+
});
|
|
84
|
+
(0, bun_test_1.test)('processes chunks incrementally with output verification', async () => {
|
|
85
|
+
// Define chunks that will be written one at a time
|
|
86
|
+
const chunks = [
|
|
87
|
+
'<run_terminal_',
|
|
88
|
+
'command><comm',
|
|
89
|
+
'and>npm ',
|
|
90
|
+
'install',
|
|
91
|
+
'</command></run_terminal_command>',
|
|
92
|
+
'<code_search><patt',
|
|
93
|
+
'ern>function</pattern></code_search>',
|
|
94
|
+
];
|
|
95
|
+
// Array to store output chunks as they're produced
|
|
96
|
+
const outputChunks = [];
|
|
97
|
+
// Create a writable stream that captures each output chunk
|
|
98
|
+
const writable = new stream_1.Writable({
|
|
99
|
+
write(chunk, encoding, callback) {
|
|
100
|
+
const chunkStr = chunk.toString();
|
|
101
|
+
outputChunks.push(chunkStr);
|
|
102
|
+
callback();
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
// Create the processor
|
|
106
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
107
|
+
processor.pipe(writable);
|
|
108
|
+
// Process each chunk with a small delay between them
|
|
109
|
+
for (const chunk of chunks) {
|
|
110
|
+
processor.write(chunk);
|
|
111
|
+
// Small delay to simulate real-world streaming
|
|
112
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
113
|
+
}
|
|
114
|
+
processor.end();
|
|
115
|
+
// Wait for the stream to finish
|
|
116
|
+
await new Promise((resolve) => {
|
|
117
|
+
writable.on('finish', resolve);
|
|
118
|
+
});
|
|
119
|
+
// Verify the complete output
|
|
120
|
+
const fullOutput = outputChunks.join('');
|
|
121
|
+
(0, bun_test_1.expect)(fullOutput).toContain('Run Terminal Command');
|
|
122
|
+
(0, bun_test_1.expect)(fullOutput).toContain('npm install');
|
|
123
|
+
(0, bun_test_1.expect)(fullOutput).toContain('Code Search');
|
|
124
|
+
(0, bun_test_1.expect)(fullOutput).toContain('function');
|
|
125
|
+
// Verify incremental output - but don't make assumptions about which chunks contain what
|
|
126
|
+
// Just check that we got multiple output chunks (incremental processing)
|
|
127
|
+
(0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(1);
|
|
128
|
+
// Check that the terminal command appears before the code search in the output
|
|
129
|
+
const terminalCommandIndex = fullOutput.indexOf('Run Terminal Command');
|
|
130
|
+
const codeSearchIndex = fullOutput.indexOf('Code Search');
|
|
131
|
+
(0, bun_test_1.expect)(terminalCommandIndex).toBeLessThan(codeSearchIndex);
|
|
132
|
+
});
|
|
133
|
+
(0, bun_test_1.test)('processes text content incrementally', async () => {
|
|
134
|
+
// Define chunks that will be written one at a time
|
|
135
|
+
const chunks = ['hi', 'hi2', 'hi3 <yo>yo</yo>'];
|
|
136
|
+
// Array to store output chunks as they're produced
|
|
137
|
+
const outputChunks = [];
|
|
138
|
+
// Create a writable stream that captures each output chunk
|
|
139
|
+
const writable = new stream_1.Writable({
|
|
140
|
+
write(chunk, encoding, callback) {
|
|
141
|
+
const chunkStr = chunk.toString();
|
|
142
|
+
outputChunks.push(chunkStr);
|
|
143
|
+
callback();
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
// Create the processor
|
|
147
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
148
|
+
processor.pipe(writable);
|
|
149
|
+
// Process each chunk with a small delay between them
|
|
150
|
+
for (const chunk of chunks) {
|
|
151
|
+
processor.write(chunk);
|
|
152
|
+
// Small delay to simulate real-world streaming
|
|
153
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
154
|
+
}
|
|
155
|
+
processor.end();
|
|
156
|
+
// Wait for the stream to finish
|
|
157
|
+
await new Promise((resolve) => {
|
|
158
|
+
writable.on('finish', resolve);
|
|
159
|
+
});
|
|
160
|
+
// Verify the complete output
|
|
161
|
+
const fullOutput = outputChunks.join('');
|
|
162
|
+
(0, bun_test_1.expect)(fullOutput).toEqual('hihi2hi3 yo');
|
|
163
|
+
(0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(3);
|
|
164
|
+
});
|
|
165
|
+
(0, bun_test_1.test)('real world example write to 4 files', async () => {
|
|
166
|
+
// Read the file content directly - no need for complex unescaping
|
|
167
|
+
const response = fs_1.default.readFileSync(path_1.default.join(__dirname, './response-example-4-files.txt'), 'utf-8');
|
|
168
|
+
// Array to store output chunks as they're produced
|
|
169
|
+
const outputChunks = [];
|
|
170
|
+
// Create a writable stream that captures each output chunk
|
|
171
|
+
const writable = new stream_1.Writable({
|
|
172
|
+
write(chunk, encoding, callback) {
|
|
173
|
+
const chunkStr = chunk.toString();
|
|
174
|
+
outputChunks.push(chunkStr);
|
|
175
|
+
callback();
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
let writeFileStartCount = 0;
|
|
179
|
+
let writeFileEndCount = 0;
|
|
180
|
+
const testToolRenderers = {
|
|
181
|
+
...toolRenderers,
|
|
182
|
+
write_file: {
|
|
183
|
+
...tool_renderers_1.defaultToolCallRenderer,
|
|
184
|
+
onToolStart: (toolName) => {
|
|
185
|
+
console.log('write_file start');
|
|
186
|
+
writeFileStartCount++;
|
|
187
|
+
return 'Write File';
|
|
188
|
+
},
|
|
189
|
+
onParamStart: (paramName, toolName) => {
|
|
190
|
+
console.log('write_file param start', paramName);
|
|
191
|
+
return null;
|
|
192
|
+
},
|
|
193
|
+
onParamEnd: (paramName, toolName, content) => {
|
|
194
|
+
console.log('write_file param end', paramName, content);
|
|
195
|
+
return null;
|
|
196
|
+
},
|
|
197
|
+
onToolEnd: (toolName, params) => {
|
|
198
|
+
console.log('write_file end', params);
|
|
199
|
+
writeFileEndCount++;
|
|
200
|
+
return null;
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
// Create the processor
|
|
205
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(testToolRenderers);
|
|
206
|
+
processor.pipe(writable);
|
|
207
|
+
processor.write(response);
|
|
208
|
+
processor.end();
|
|
209
|
+
// Wait for the stream to finish
|
|
210
|
+
await new Promise((resolve) => {
|
|
211
|
+
writable.on('finish', resolve);
|
|
212
|
+
});
|
|
213
|
+
// Verify the complete output
|
|
214
|
+
const fullOutput = outputChunks.join('');
|
|
215
|
+
(0, bun_test_1.expect)(fullOutput).toContain('Write File'); // Check for expected output without worrying about formatting
|
|
216
|
+
(0, bun_test_1.expect)(writeFileEndCount).toBe(4);
|
|
217
|
+
// We expect multiple chunks for a large response
|
|
218
|
+
(0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(1);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
//# sourceMappingURL=xml-stream-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml-stream-parser.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/xml-stream-parser.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/spinner.d.ts
CHANGED
package/dist/utils/spinner.js
CHANGED
|
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
36
|
exports.Spinner = void 0;
|
|
27
37
|
const picocolors_1 = require("picocolors");
|
|
@@ -61,6 +71,17 @@ class Spinner {
|
|
|
61
71
|
restoreCursor() {
|
|
62
72
|
process.stdout.write('\u001B[?25h');
|
|
63
73
|
}
|
|
74
|
+
log(message) {
|
|
75
|
+
// Temporarily clear the spinner line
|
|
76
|
+
this.rewriteLine('');
|
|
77
|
+
// Write the log message
|
|
78
|
+
console.log(message);
|
|
79
|
+
// If spinner is active, redraw it on the next line
|
|
80
|
+
if (this.loadingInterval) {
|
|
81
|
+
const i = Math.floor(Math.random() * chars.length);
|
|
82
|
+
this.rewriteLine((0, picocolors_1.green)(`${chars[i]} Thinking...`));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
64
85
|
rewriteLine(line) {
|
|
65
86
|
if (process.stdout.isTTY) {
|
|
66
87
|
readline.clearLine(process.stdout, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"
|
|
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,27 @@
|
|
|
1
|
+
import { ChildProcessWithoutNullStreams } from 'child_process';
|
|
2
|
+
import type { IPty } from '@homebridge/node-pty-prebuilt-multiarch';
|
|
3
|
+
type PersistentProcess = {
|
|
4
|
+
type: 'pty';
|
|
5
|
+
shell: 'pty';
|
|
6
|
+
pty: IPty;
|
|
7
|
+
timerId: NodeJS.Timeout | null;
|
|
8
|
+
} | {
|
|
9
|
+
type: 'process';
|
|
10
|
+
shell: 'bash' | 'cmd.exe' | 'powershell.exe';
|
|
11
|
+
childProcess: ChildProcessWithoutNullStreams | null;
|
|
12
|
+
timerId: NodeJS.Timeout | null;
|
|
13
|
+
};
|
|
1
14
|
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<{
|
|
15
|
+
export declare const recreateShell: (projectPath: string) => void;
|
|
16
|
+
export declare const resetShell: (projectPath: string) => void;
|
|
17
|
+
export declare const runTerminalCommand: (command: string, mode: "user" | "assistant", projectPath: string) => Promise<{
|
|
5
18
|
result: string;
|
|
6
19
|
stdout: string;
|
|
7
20
|
}>;
|
|
21
|
+
export declare const runCommandPty: (persistentProcess: PersistentProcess & {
|
|
22
|
+
type: "pty";
|
|
23
|
+
}, command: string, mode: "user" | "assistant", resolve: (value: {
|
|
24
|
+
result: string;
|
|
25
|
+
stdout: string;
|
|
26
|
+
}) => void, projectPath: string) => void;
|
|
27
|
+
export {};
|