codebuff 1.0.253 → 1.0.255

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.
Files changed (116) hide show
  1. package/dist/background-process-manager.d.ts +50 -0
  2. package/dist/background-process-manager.js +359 -0
  3. package/dist/background-process-manager.js.map +1 -0
  4. package/dist/browser-runner.d.ts +35 -0
  5. package/dist/browser-runner.js +680 -0
  6. package/dist/browser-runner.js.map +1 -0
  7. package/dist/chat-storage.d.ts +2 -0
  8. package/dist/chat-storage.js +93 -0
  9. package/dist/chat-storage.js.map +1 -0
  10. package/dist/checkpoints/checkpoint-manager.d.ts +94 -0
  11. package/dist/checkpoints/checkpoint-manager.js +280 -0
  12. package/dist/checkpoints/checkpoint-manager.js.map +1 -0
  13. package/dist/checkpoints/file-manager.d.ts +72 -0
  14. package/dist/checkpoints/file-manager.js +311 -0
  15. package/dist/checkpoints/file-manager.js.map +1 -0
  16. package/dist/cli-handlers/api-key.d.ts +25 -0
  17. package/dist/cli-handlers/api-key.js +66 -0
  18. package/dist/cli-handlers/api-key.js.map +1 -0
  19. package/dist/cli-handlers/checkpoint.d.ts +18 -0
  20. package/dist/cli-handlers/checkpoint.js +195 -0
  21. package/dist/cli-handlers/checkpoint.js.map +1 -0
  22. package/dist/cli-handlers/diff.d.ts +2 -0
  23. package/dist/cli-handlers/diff.js +31 -0
  24. package/dist/cli-handlers/diff.js.map +1 -0
  25. package/dist/cli-handlers/easter-egg.d.ts +1 -0
  26. package/dist/cli-handlers/easter-egg.js +126 -0
  27. package/dist/cli-handlers/easter-egg.js.map +1 -0
  28. package/dist/cli-handlers/inititalization-flow.d.ts +1 -0
  29. package/dist/cli-handlers/inititalization-flow.js +24 -0
  30. package/dist/cli-handlers/inititalization-flow.js.map +1 -0
  31. package/dist/cli.d.ts +44 -0
  32. package/dist/cli.js +478 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/client.d.ts +157 -0
  35. package/dist/client.js +836 -0
  36. package/dist/client.js.map +1 -0
  37. package/dist/code-map/tsconfig.tsbuildinfo +1 -1
  38. package/dist/config.d.ts +4 -0
  39. package/dist/config.js +12 -0
  40. package/dist/config.js.map +1 -0
  41. package/dist/create-template-project.d.ts +1 -0
  42. package/dist/create-template-project.js +107 -0
  43. package/dist/create-template-project.js.map +1 -0
  44. package/dist/credentials.d.ts +4 -0
  45. package/dist/credentials.js +38 -0
  46. package/dist/credentials.js.map +1 -0
  47. package/dist/dev-process-manager.d.ts +10 -0
  48. package/dist/dev-process-manager.js +54 -0
  49. package/dist/dev-process-manager.js.map +1 -0
  50. package/dist/fingerprint.d.ts +1 -0
  51. package/dist/fingerprint.js +48 -0
  52. package/dist/fingerprint.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +117 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/menu.d.ts +3 -0
  57. package/dist/menu.js +126 -0
  58. package/dist/menu.js.map +1 -0
  59. package/dist/project-files.d.ts +114 -0
  60. package/dist/project-files.js +513 -0
  61. package/dist/project-files.js.map +1 -0
  62. package/dist/startup-process-handler.d.ts +2 -0
  63. package/dist/startup-process-handler.js +21 -0
  64. package/dist/startup-process-handler.js.map +1 -0
  65. package/dist/tool-handlers.d.ts +28 -0
  66. package/dist/tool-handlers.js +240 -0
  67. package/dist/tool-handlers.js.map +1 -0
  68. package/dist/types.d.ts +15 -0
  69. package/dist/types.js +3 -0
  70. package/dist/types.js.map +1 -0
  71. package/dist/update-codebuff.d.ts +1 -0
  72. package/dist/update-codebuff.js +160 -0
  73. package/dist/update-codebuff.js.map +1 -0
  74. package/dist/utils/__tests__/background-process-manager.test.d.ts +1 -0
  75. package/dist/utils/__tests__/background-process-manager.test.js +289 -0
  76. package/dist/utils/__tests__/background-process-manager.test.js.map +1 -0
  77. package/dist/utils/__tests__/tool-renderers.test.d.ts +1 -0
  78. package/dist/utils/__tests__/tool-renderers.test.js +51 -0
  79. package/dist/utils/__tests__/tool-renderers.test.js.map +1 -0
  80. package/dist/utils/__tests__/xml-stream-parser.test.d.ts +1 -0
  81. package/dist/utils/__tests__/xml-stream-parser.test.js +229 -0
  82. package/dist/utils/__tests__/xml-stream-parser.test.js.map +1 -0
  83. package/dist/utils/analytics.d.ts +6 -0
  84. package/dist/utils/analytics.js +59 -0
  85. package/dist/utils/analytics.js.map +1 -0
  86. package/dist/utils/detect-shell.d.ts +1 -0
  87. package/dist/utils/detect-shell.js +60 -0
  88. package/dist/utils/detect-shell.js.map +1 -0
  89. package/dist/utils/logger.d.ts +21 -0
  90. package/dist/utils/logger.js +105 -0
  91. package/dist/utils/logger.js.map +1 -0
  92. package/dist/utils/spinner.d.ts +11 -0
  93. package/dist/utils/spinner.js +87 -0
  94. package/dist/utils/spinner.js.map +1 -0
  95. package/dist/utils/system-info.d.ts +8 -0
  96. package/dist/utils/system-info.js +22 -0
  97. package/dist/utils/system-info.js.map +1 -0
  98. package/dist/utils/terminal.d.ts +41 -0
  99. package/dist/utils/terminal.js +467 -0
  100. package/dist/utils/terminal.js.map +1 -0
  101. package/dist/utils/tool-renderers.d.ts +16 -0
  102. package/dist/utils/tool-renderers.js +148 -0
  103. package/dist/utils/tool-renderers.js.map +1 -0
  104. package/dist/utils/xml-stream-parser.d.ts +9 -0
  105. package/dist/utils/xml-stream-parser.js +128 -0
  106. package/dist/utils/xml-stream-parser.js.map +1 -0
  107. package/dist/web-scraper.d.ts +3 -0
  108. package/dist/web-scraper.js +57 -0
  109. package/dist/web-scraper.js.map +1 -0
  110. package/dist/workers/checkpoint-worker.d.ts +1 -0
  111. package/dist/workers/checkpoint-worker.js +48 -0
  112. package/dist/workers/checkpoint-worker.js.map +1 -0
  113. package/dist/workers/project-context.d.ts +1 -0
  114. package/dist/workers/project-context.js +17 -0
  115. package/dist/workers/project-context.js.map +1 -0
  116. package/package.json +1 -1
@@ -0,0 +1,467 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.runCommandPty = exports.runTerminalCommand = exports.resetShell = exports.recreateShell = exports.isCommandRunning = exports.persistentProcess = void 0;
30
+ exports.runBackgroundCommand = runBackgroundCommand;
31
+ exports.killAndResetPersistentProcess = killAndResetPersistentProcess;
32
+ const assert_1 = __importDefault(require("assert"));
33
+ const child_process_1 = require("child_process");
34
+ const fs_1 = require("fs");
35
+ const os = __importStar(require("os"));
36
+ const path_1 = __importStar(require("path"));
37
+ const array_1 = require("../common/util/array");
38
+ const string_1 = require("../common/util/string");
39
+ const picocolors_1 = require("picocolors");
40
+ const background_process_manager_1 = require("../background-process-manager");
41
+ const project_files_1 = require("../project-files");
42
+ const detect_shell_1 = require("./detect-shell");
43
+ let pty;
44
+ const tempConsoleError = console.error;
45
+ console.error = () => { };
46
+ try {
47
+ pty = require('@homebridge/node-pty-prebuilt-multiarch');
48
+ }
49
+ catch (error) {
50
+ }
51
+ finally {
52
+ console.error = tempConsoleError;
53
+ }
54
+ const COMMAND_OUTPUT_LIMIT = 10_000;
55
+ const promptIdentifier = '@36261@';
56
+ const createPersistantProcess = (dir) => {
57
+ if (pty && process.env.NODE_ENV !== 'test') {
58
+ const isWindows = os.platform() === 'win32';
59
+ const currShell = (0, detect_shell_1.detectShell)();
60
+ const shell = isWindows
61
+ ? currShell === 'powershell'
62
+ ? 'powershell.exe'
63
+ : 'cmd.exe'
64
+ : 'bash';
65
+ const shellWithoutExe = shell.split('.')[0];
66
+ // Prepare shell init commands
67
+ let shellInitCommands = '';
68
+ if (!isWindows) {
69
+ const rcFile = currShell === 'zsh'
70
+ ? '~/.zshrc'
71
+ : currShell === 'fish'
72
+ ? '~/.config/fish/config.fish'
73
+ : '~/.bashrc';
74
+ shellInitCommands = `source ${rcFile} 2>/dev/null || true\n`;
75
+ }
76
+ else if (currShell === 'powershell') {
77
+ // Try to source PowerShell profile if it exists
78
+ shellInitCommands =
79
+ '$PSProfile = $PROFILE.CurrentUserAllHosts; if (Test-Path $PSProfile) { . $PSProfile }\n';
80
+ }
81
+ const persistentPty = pty.spawn(shell, isWindows ? [] : ['--login'], {
82
+ name: 'xterm-256color',
83
+ cols: process.stdout.columns || 80,
84
+ rows: process.stdout.rows || 24,
85
+ cwd: dir,
86
+ env: {
87
+ ...process.env,
88
+ PAGER: 'cat',
89
+ GIT_PAGER: 'cat',
90
+ GIT_TERMINAL_PROMPT: '0',
91
+ ...(isWindows
92
+ ? {
93
+ TERM: 'cygwin',
94
+ ANSICON: '1', // Better ANSI support in cmd.exe
95
+ PROMPT: promptIdentifier,
96
+ }
97
+ : {
98
+ TERM: 'xterm-256color',
99
+ }),
100
+ LESS: '-FRX',
101
+ TERM_PROGRAM: 'mintty',
102
+ FORCE_COLOR: '1', // Enable colors in CI/CD
103
+ // Locale settings for consistent output
104
+ LANG: 'en_US.UTF-8',
105
+ LC_ALL: 'en_US.UTF-8',
106
+ // Shell-specific settings
107
+ SHELL: shellWithoutExe,
108
+ },
109
+ });
110
+ // Source the shell config file if available
111
+ if (shellInitCommands) {
112
+ persistentPty.write(shellInitCommands);
113
+ }
114
+ // Set prompt for Unix shells after sourcing config
115
+ if (!isWindows) {
116
+ persistentPty.write(`PS1='${promptIdentifier}'\n`);
117
+ }
118
+ return { type: 'pty', shell: 'pty', pty: persistentPty, timerId: null };
119
+ }
120
+ else {
121
+ // Fallback to child_process
122
+ const isWindows = os.platform() === 'win32';
123
+ const currShell = (0, detect_shell_1.detectShell)();
124
+ const shell = isWindows
125
+ ? currShell === 'powershell'
126
+ ? 'powershell.exe'
127
+ : 'cmd.exe'
128
+ : 'bash';
129
+ const childProcess = null;
130
+ return {
131
+ type: 'process',
132
+ shell,
133
+ childProcess,
134
+ timerId: null,
135
+ };
136
+ }
137
+ };
138
+ exports.persistentProcess = null;
139
+ process.stdout.on('resize', () => {
140
+ if (!exports.persistentProcess)
141
+ return;
142
+ if (exports.persistentProcess.type === 'pty') {
143
+ exports.persistentProcess.pty.resize(process.stdout.columns, process.stdout.rows);
144
+ }
145
+ });
146
+ let commandIsRunning = false;
147
+ const isCommandRunning = () => {
148
+ return commandIsRunning;
149
+ };
150
+ exports.isCommandRunning = isCommandRunning;
151
+ const recreateShell = (projectPath) => {
152
+ exports.persistentProcess = createPersistantProcess(projectPath);
153
+ };
154
+ exports.recreateShell = recreateShell;
155
+ const resetShell = (projectPath) => {
156
+ commandIsRunning = false;
157
+ if (exports.persistentProcess) {
158
+ if (exports.persistentProcess.timerId) {
159
+ clearTimeout(exports.persistentProcess.timerId);
160
+ exports.persistentProcess.timerId = null;
161
+ }
162
+ if (exports.persistentProcess.type === 'pty') {
163
+ exports.persistentProcess.pty.kill();
164
+ (0, exports.recreateShell)(projectPath);
165
+ }
166
+ else {
167
+ exports.persistentProcess.childProcess?.kill();
168
+ exports.persistentProcess = {
169
+ ...exports.persistentProcess,
170
+ childProcess: null,
171
+ };
172
+ }
173
+ }
174
+ };
175
+ exports.resetShell = resetShell;
176
+ function formatResult(command, stdout, status) {
177
+ return (0, array_1.buildArray)(`<command>${command}</command>`, '<terminal_command_result>', `<output>${(0, string_1.truncateStringWithMessage)({ str: stdout, maxLength: COMMAND_OUTPUT_LIMIT, remove: 'MIDDLE' })}</output>`, `<status>${status}</status>`, '</terminal_command_result>').join('\n');
178
+ }
179
+ const MAX_EXECUTION_TIME = 30_000;
180
+ function runBackgroundCommand(options, resolveCommand) {
181
+ const { toolCallId, command, mode, projectPath, stdoutFile, stderrFile } = options;
182
+ const isWindows = os.platform() === 'win32';
183
+ const shell = isWindows ? 'cmd.exe' : 'bash';
184
+ const shellArgs = isWindows ? ['/c'] : ['-c'];
185
+ if (mode === 'assistant') {
186
+ console.log((0, picocolors_1.green)(`Running background process...\n> ${command}`));
187
+ }
188
+ const initialStdout = '';
189
+ const initialStderr = '';
190
+ try {
191
+ const childProcess = (0, background_process_manager_1.spawnAndTrack)(shell, [...shellArgs, command], {
192
+ cwd: projectPath,
193
+ env: { ...process.env, FORCE_COLOR: '1' },
194
+ // Ensure detached is always false to link child lifetime to parent
195
+ detached: false,
196
+ stdio: 'pipe',
197
+ });
198
+ // An error should have been thrown when we called `spawn`
199
+ (0, assert_1.default)(childProcess.pid !== undefined, 'Failed to spawn process: no PID assigned.');
200
+ const processId = childProcess.pid;
201
+ const processInfo = {
202
+ pid: processId,
203
+ toolCallId,
204
+ command,
205
+ process: childProcess,
206
+ stdoutBuffer: [],
207
+ stderrBuffer: [],
208
+ status: 'running',
209
+ startTime: Date.now(),
210
+ endTime: null,
211
+ lastReportedStdoutLength: 0,
212
+ lastReportedStderrLength: 0,
213
+ lastReportedStatus: null,
214
+ stdoutFile,
215
+ stderrFile,
216
+ };
217
+ background_process_manager_1.backgroundProcesses.set(processId, processInfo);
218
+ // Set up file streams if paths are provided
219
+ let stdoutStream;
220
+ let stderrStream;
221
+ if (stdoutFile) {
222
+ const stdoutAbs = path_1.default.isAbsolute(stdoutFile)
223
+ ? stdoutFile
224
+ : path_1.default.join(projectPath, stdoutFile);
225
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(stdoutAbs), { recursive: true });
226
+ stdoutStream = (0, fs_1.createWriteStream)(stdoutAbs);
227
+ }
228
+ const realStderrFile = stderrFile || stdoutFile;
229
+ if (realStderrFile) {
230
+ const stderrAbs = path_1.default.isAbsolute(realStderrFile)
231
+ ? realStderrFile
232
+ : path_1.default.join(projectPath, realStderrFile);
233
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(stderrAbs), { recursive: true });
234
+ stderrStream = (0, fs_1.createWriteStream)(stderrAbs);
235
+ }
236
+ childProcess.stdout.on('data', (data) => {
237
+ const output = (0, string_1.stripColors)(data.toString());
238
+ processInfo.stdoutBuffer.push(output);
239
+ // Write to file if stream exists
240
+ if (stdoutStream) {
241
+ stdoutStream.write(output);
242
+ }
243
+ });
244
+ childProcess.stderr.on('data', (data) => {
245
+ const output = (0, string_1.stripColors)(data.toString());
246
+ processInfo.stderrBuffer.push(output);
247
+ // Write to file if stream exists
248
+ if (stderrStream) {
249
+ stderrStream.write(output);
250
+ }
251
+ });
252
+ childProcess.on('error', (error) => {
253
+ processInfo.status = 'error';
254
+ processInfo.stderrBuffer.push(`\nError spawning command: ${error.message}`);
255
+ processInfo.endTime = Date.now();
256
+ // Close file streams
257
+ stdoutStream?.end();
258
+ stderrStream?.end();
259
+ });
260
+ childProcess.on('close', (code) => {
261
+ processInfo.status = code === 0 ? 'completed' : 'error';
262
+ processInfo.endTime = Date.now();
263
+ // Close file streams
264
+ stdoutStream?.end();
265
+ stderrStream?.end();
266
+ });
267
+ // Unreference the process so the parent can exit independently IF the child is the only thing keeping it alive.
268
+ childProcess.unref();
269
+ const resultMessage = `<background_process>
270
+ <process_id>${processId}</process_id>
271
+ <command>${command}</command>
272
+ <status>${processInfo.status}</status>
273
+ </background_process>`;
274
+ resolveCommand({
275
+ result: resultMessage,
276
+ stdout: initialStdout + initialStderr,
277
+ });
278
+ }
279
+ catch (error) {
280
+ const errorMessage = `<background_process>\n<command>${command}</command>\n<error>${error.message}</error>\n</background_process>`;
281
+ resolveCommand({ result: errorMessage, stdout: error.message });
282
+ }
283
+ }
284
+ const runTerminalCommand = async (toolCallId, command, mode, projectPath, processType, stdoutFile, stderrFile) => {
285
+ return new Promise((resolve) => {
286
+ if (!exports.persistentProcess) {
287
+ throw new Error('Shell not initialized');
288
+ }
289
+ if (commandIsRunning) {
290
+ (0, exports.resetShell)(projectPath);
291
+ }
292
+ commandIsRunning = true;
293
+ // Add special case for git log to limit output
294
+ const modifiedCommand = command.trim() === 'git log' ? 'git log -n 5' : command;
295
+ const resolveCommand = (value) => {
296
+ commandIsRunning = false;
297
+ resolve(value);
298
+ };
299
+ if (processType === 'BACKGROUND') {
300
+ runBackgroundCommand({
301
+ toolCallId,
302
+ command: modifiedCommand,
303
+ mode,
304
+ projectPath,
305
+ stdoutFile,
306
+ stderrFile,
307
+ }, resolveCommand);
308
+ }
309
+ else if (exports.persistentProcess.type === 'pty') {
310
+ (0, exports.runCommandPty)(exports.persistentProcess, modifiedCommand, mode, resolveCommand, projectPath);
311
+ }
312
+ else {
313
+ // Fallback to child_process implementation
314
+ runCommandChildProcess(exports.persistentProcess, modifiedCommand, mode, resolveCommand, projectPath);
315
+ }
316
+ });
317
+ };
318
+ exports.runTerminalCommand = runTerminalCommand;
319
+ const runCommandPty = (persistentProcess, command, mode, resolve, projectPath) => {
320
+ const ptyProcess = persistentProcess.pty;
321
+ let commandOutput = '';
322
+ let pendingOutput = '';
323
+ let foundFirstNewLine = false;
324
+ if (mode === 'assistant') {
325
+ console.log((0, picocolors_1.green)(`> ${command}`));
326
+ }
327
+ const timer = setTimeout(() => {
328
+ if (mode === 'assistant') {
329
+ // Kill and recreate PTY
330
+ (0, exports.resetShell)(projectPath);
331
+ resolve({
332
+ result: formatResult(command, commandOutput, `Command timed out after ${MAX_EXECUTION_TIME / 1000} seconds and was terminated. Shell has been restarted.`),
333
+ stdout: commandOutput,
334
+ });
335
+ }
336
+ }, MAX_EXECUTION_TIME);
337
+ persistentProcess.timerId = timer;
338
+ const dataDisposable = ptyProcess.onData((data) => {
339
+ // Trim first line if it's the prompt identifier
340
+ if ((commandOutput + pendingOutput).trim() === '' &&
341
+ data.trimStart().startsWith(promptIdentifier)) {
342
+ data = data.trimStart().slice(promptIdentifier.length);
343
+ }
344
+ const prefix = commandOutput + pendingOutput + data;
345
+ // Skip the first line of the output, because it's the command being printed.
346
+ if (!foundFirstNewLine) {
347
+ if (!prefix.includes('\n')) {
348
+ return;
349
+ }
350
+ foundFirstNewLine = true;
351
+ const newLineIndex = prefix.indexOf('\n');
352
+ data = prefix.slice(newLineIndex + 1);
353
+ }
354
+ const dataLines = (pendingOutput + data).split('\r\n');
355
+ for (const [index, l] of dataLines.entries()) {
356
+ const isLast = index === dataLines.length - 1;
357
+ const line = isLast ? l : l + '\r\n';
358
+ if (line.includes(promptIdentifier)) {
359
+ // Last line is the prompt, command is done
360
+ clearTimeout(timer);
361
+ dataDisposable.dispose();
362
+ if (command.startsWith('cd ') && mode === 'user') {
363
+ let newWorkingDirectory = command.split(' ')[1];
364
+ if (newWorkingDirectory === '~') {
365
+ newWorkingDirectory = os.homedir();
366
+ }
367
+ else if (newWorkingDirectory.startsWith('~/')) {
368
+ newWorkingDirectory = path_1.default.join(os.homedir(), newWorkingDirectory.slice(2));
369
+ }
370
+ else if (!path_1.default.isAbsolute(newWorkingDirectory)) {
371
+ newWorkingDirectory = path_1.default.join(projectPath, newWorkingDirectory);
372
+ }
373
+ projectPath = (0, project_files_1.setProjectRoot)(newWorkingDirectory);
374
+ }
375
+ // Reset the PTY to the project root
376
+ ptyProcess.write(`cd ${projectPath}\r`);
377
+ resolve({
378
+ result: formatResult(command, commandOutput, 'Command completed'),
379
+ stdout: commandOutput,
380
+ });
381
+ return;
382
+ }
383
+ else if (isLast) {
384
+ // Doesn't end in newline character, wait for more data
385
+ pendingOutput = line;
386
+ }
387
+ else {
388
+ // Process the line
389
+ process.stdout.write(line);
390
+ commandOutput += line;
391
+ }
392
+ }
393
+ });
394
+ const isWindows = os.platform() === 'win32';
395
+ if (command.trim() === 'clear') {
396
+ // `clear` needs access to the main process stdout. This is a workaround.
397
+ (0, child_process_1.execSync)('clear', { stdio: 'inherit' });
398
+ }
399
+ // Write the command
400
+ const commandWithCheck = isWindows
401
+ ? command
402
+ : `${command}; ec=$?; if [ $ec -eq 0 ]; then printf "Command completed. "; else printf "Command failed with exit code $ec. "; fi`;
403
+ ptyProcess.write(commandWithCheck + '\r');
404
+ };
405
+ exports.runCommandPty = runCommandPty;
406
+ const runCommandChildProcess = (persistentProcess, command, mode, resolve, projectPath) => {
407
+ const isWindows = os.platform() === 'win32';
408
+ let commandOutput = '';
409
+ if (mode === 'assistant') {
410
+ console.log((0, picocolors_1.green)(`> ${command}`));
411
+ }
412
+ const childProcess = (0, child_process_1.spawn)(persistentProcess.shell, [isWindows ? '/c' : '-c', command], {
413
+ cwd: projectPath,
414
+ env: {
415
+ ...process.env,
416
+ PAGER: 'cat',
417
+ GIT_PAGER: 'cat',
418
+ GIT_TERMINAL_PROMPT: '0',
419
+ LESS: '-FRX',
420
+ },
421
+ });
422
+ persistentProcess = {
423
+ ...persistentProcess,
424
+ childProcess,
425
+ };
426
+ const timer = setTimeout(() => {
427
+ (0, exports.resetShell)(projectPath);
428
+ if (mode === 'assistant') {
429
+ resolve({
430
+ result: formatResult(command, commandOutput, `Command timed out after ${MAX_EXECUTION_TIME / 1000} seconds and was terminated.`),
431
+ stdout: commandOutput,
432
+ });
433
+ }
434
+ }, MAX_EXECUTION_TIME);
435
+ persistentProcess.timerId = timer;
436
+ childProcess.stdout.on('data', (data) => {
437
+ const output = data.toString();
438
+ process.stdout.write(output);
439
+ commandOutput += output;
440
+ });
441
+ childProcess.stderr.on('data', (data) => {
442
+ const output = data.toString();
443
+ process.stdout.write(output);
444
+ commandOutput += output;
445
+ });
446
+ childProcess.on('close', (code) => {
447
+ clearTimeout(timer);
448
+ if (command.startsWith('cd ') && mode === 'user') {
449
+ const newWorkingDirectory = command.split(' ')[1];
450
+ projectPath = (0, project_files_1.setProjectRoot)(path_1.default.join(projectPath, newWorkingDirectory));
451
+ }
452
+ if (mode === 'assistant') {
453
+ console.log((0, picocolors_1.green)(`Command completed`));
454
+ }
455
+ resolve({
456
+ result: formatResult(command, commandOutput, `Command completed`),
457
+ stdout: commandOutput,
458
+ });
459
+ });
460
+ };
461
+ function killAndResetPersistentProcess() {
462
+ if (exports.persistentProcess?.type === 'pty') {
463
+ exports.persistentProcess.pty.kill();
464
+ exports.persistentProcess = null;
465
+ }
466
+ }
467
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/utils/terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ToolName } from '../common/constants/tools';
2
+ /**
3
+ * Interface for handling tool call rendering
4
+ */
5
+ export interface ToolCallRenderer {
6
+ onToolStart?: (toolName: string, attributes: Record<string, string>) => string | null;
7
+ onParamStart?: (paramName: string, toolName: string) => string | null;
8
+ onParamChunk?: (content: string, paramName: string, toolName: string) => string | null;
9
+ onParamEnd?: (paramName: string, toolName: string, content: string) => string | null;
10
+ onToolEnd?: (toolName: string, params: Record<string, string>) => string | null;
11
+ }
12
+ /**
13
+ * Default renderer for tool calls that formats them nicely for the console
14
+ */
15
+ export declare const defaultToolCallRenderer: ToolCallRenderer;
16
+ export declare const toolRenderers: Record<ToolName, ToolCallRenderer>;
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toolRenderers = exports.defaultToolCallRenderer = void 0;
4
+ const string_1 = require("../common/util/string");
5
+ const picocolors_1 = require("picocolors");
6
+ /**
7
+ * Default renderer for tool calls that formats them nicely for the console
8
+ */
9
+ exports.defaultToolCallRenderer = {
10
+ onToolStart: (toolName) => {
11
+ return (0, picocolors_1.gray)(`[${(0, picocolors_1.bold)((0, string_1.snakeToTitleCase)(toolName))}]`) + '\n';
12
+ },
13
+ onParamChunk: (content, paramName, toolName) => {
14
+ return (0, picocolors_1.gray)(content);
15
+ },
16
+ onParamEnd: () => null,
17
+ onToolEnd: () => null,
18
+ };
19
+ exports.toolRenderers = {
20
+ run_terminal_command: {
21
+ // Don't render anything
22
+ },
23
+ code_search: {
24
+ // Don't render anything
25
+ },
26
+ end_turn: {
27
+ // Don't render anything
28
+ },
29
+ browser_logs: {
30
+ // Don't render anything
31
+ },
32
+ read_files: {
33
+ ...exports.defaultToolCallRenderer,
34
+ onParamChunk: (content, paramName, toolName) => {
35
+ // Don't render chunks for paths, wait for the full list
36
+ return null;
37
+ },
38
+ onParamEnd: (paramName, toolName, content) => {
39
+ const files = content.trim().split('\n').filter(Boolean); // Split by newline and remove empty entries
40
+ const numFiles = files.length;
41
+ const maxInitialFiles = 3;
42
+ if (numFiles <= maxInitialFiles) {
43
+ // If 3 or fewer files, list them all on new lines
44
+ return (0, picocolors_1.gray)(files.join('\n'));
45
+ }
46
+ else {
47
+ // If more than 3 files
48
+ const initialFiles = files.slice(0, maxInitialFiles);
49
+ const remainingFiles = files.slice(maxInitialFiles);
50
+ const numRemaining = remainingFiles.length;
51
+ const remainingFilesString = remainingFiles.join(' ');
52
+ return (0, picocolors_1.gray)(`${initialFiles.map((file) => '- ' + file).join('\n')}\nand ${numRemaining} more: ${remainingFilesString}`);
53
+ }
54
+ },
55
+ onToolEnd: (toolName, params) => {
56
+ // Add a final newline after the file list
57
+ return '\n';
58
+ },
59
+ },
60
+ find_files: {
61
+ ...exports.defaultToolCallRenderer,
62
+ },
63
+ think_deeply: {
64
+ ...exports.defaultToolCallRenderer,
65
+ },
66
+ create_plan: {
67
+ ...exports.defaultToolCallRenderer,
68
+ onParamStart: (paramName) => {
69
+ if (paramName === 'path') {
70
+ return (0, picocolors_1.gray)('Editing plan at ');
71
+ }
72
+ return null;
73
+ },
74
+ onParamChunk: (content, paramName) => {
75
+ if (paramName === 'path') {
76
+ return (0, picocolors_1.gray)(content);
77
+ }
78
+ return null;
79
+ },
80
+ onParamEnd: (paramName) => {
81
+ if (paramName === 'path') {
82
+ return (0, picocolors_1.gray)('...') + '\n';
83
+ }
84
+ return null;
85
+ },
86
+ },
87
+ write_file: {
88
+ ...exports.defaultToolCallRenderer,
89
+ onParamStart: (paramName) => {
90
+ if (paramName === 'path') {
91
+ return (0, picocolors_1.gray)('Editing file at ');
92
+ }
93
+ return null;
94
+ },
95
+ onParamChunk: (content, paramName, toolName) => {
96
+ if (paramName === 'path') {
97
+ return (0, picocolors_1.gray)(content);
98
+ }
99
+ return null;
100
+ },
101
+ onParamEnd: (paramName) => paramName === 'path' ? (0, picocolors_1.gray)('...') + '\n' : null,
102
+ },
103
+ add_subgoal: {
104
+ ...exports.defaultToolCallRenderer,
105
+ onParamStart: (paramName, toolName) => {
106
+ if (paramName === 'id') {
107
+ return null;
108
+ }
109
+ return (0, picocolors_1.gray)((0, string_1.capitalize)(paramName) + ': ');
110
+ },
111
+ onParamChunk: (content, paramName, toolName) => {
112
+ if (paramName === 'id') {
113
+ return null;
114
+ }
115
+ return (0, picocolors_1.gray)(content);
116
+ },
117
+ onParamEnd: (paramName) => {
118
+ const paramsWithNewLine = ['objective', 'status'];
119
+ if (paramsWithNewLine.includes(paramName)) {
120
+ return '\n';
121
+ }
122
+ return null;
123
+ },
124
+ },
125
+ update_subgoal: {
126
+ ...exports.defaultToolCallRenderer,
127
+ onParamStart: (paramName, toolName) => {
128
+ if (paramName === 'id') {
129
+ return null;
130
+ }
131
+ return (0, picocolors_1.gray)((0, string_1.capitalize)(paramName) + ': ');
132
+ },
133
+ onParamChunk: (content, paramName, toolName) => {
134
+ if (paramName === 'id') {
135
+ return null;
136
+ }
137
+ return (0, picocolors_1.gray)(content);
138
+ },
139
+ onParamEnd: (paramName) => {
140
+ const paramsWithNewLine = ['status'];
141
+ if (paramsWithNewLine.includes(paramName)) {
142
+ return '\n';
143
+ }
144
+ return null;
145
+ },
146
+ },
147
+ };
148
+ //# sourceMappingURL=tool-renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-renderers.js","sourceRoot":"","sources":["../../src/utils/tool-renderers.ts"],"names":[],"mappings":";;;AACA,+CAAiE;AACjE,2CAAuC;AAoCvC;;GAEG;AACU,QAAA,uBAAuB,GAAqB;IACvD,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;QACxB,OAAO,IAAA,iBAAI,EAAC,IAAI,IAAA,iBAAI,EAAC,IAAA,yBAAgB,EAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;IAC7D,CAAC;IAED,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;QAC7C,OAAO,IAAA,iBAAI,EAAC,OAAO,CAAC,CAAA;IACtB,CAAC;IAED,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI;IAEtB,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;CACtB,CAAA;AAEY,QAAA,aAAa,GAAuC;IAC/D,oBAAoB,EAAE;IACpB,wBAAwB;KACzB;IACD,WAAW,EAAE;IACX,wBAAwB;KACzB;IACD,QAAQ,EAAE;IACR,wBAAwB;KACzB;IACD,YAAY,EAAE;IACZ,wBAAwB;KACzB;IACD,UAAU,EAAE;QACV,GAAG,+BAAuB;QAC1B,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YAC7C,wDAAwD;YACxD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,UAAU,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA,CAAC,4CAA4C;YACrG,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAA;YAC7B,MAAM,eAAe,GAAG,CAAC,CAAA;YAEzB,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;gBAChC,kDAAkD;gBAClD,OAAO,IAAA,iBAAI,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,uBAAuB;gBACvB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAA;gBACpD,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;gBACnD,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAA;gBAC1C,MAAM,oBAAoB,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAErD,OAAO,IAAA,iBAAI,EACT,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,YAAY,UAAU,oBAAoB,EAAE,CAC3G,CAAA;YACH,CAAC;QACH,CAAC;QACD,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;YAC9B,0CAA0C;YAC1C,OAAO,IAAI,CAAA;QACb,CAAC;KACF;IACD,UAAU,EAAE;QACV,GAAG,+BAAuB;KAC3B;IACD,YAAY,EAAE;QACZ,GAAG,+BAAuB;KAC3B;IACD,WAAW,EAAE;QACX,GAAG,+BAAuB;QAC1B,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE;YAC1B,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,IAAA,iBAAI,EAAC,kBAAkB,CAAC,CAAA;YACjC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;YACnC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,IAAA,iBAAI,EAAC,OAAO,CAAC,CAAA;YACtB,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,UAAU,EAAE,CAAC,SAAS,EAAE,EAAE;YACxB,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,IAAA,iBAAI,EAAC,KAAK,CAAC,GAAG,IAAI,CAAA;YAC3B,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACF;IACD,UAAU,EAAE;QACV,GAAG,+BAAuB;QAC1B,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE;YAC1B,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,IAAA,iBAAI,EAAC,kBAAkB,CAAC,CAAA;YACjC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YAC7C,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,IAAA,iBAAI,EAAC,OAAO,CAAC,CAAA;YACtB,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,UAAU,EAAE,CAAC,SAAS,EAAE,EAAE,CACxB,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,iBAAI,EAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI;KACnD;IACD,WAAW,EAAE;QACX,GAAG,+BAAuB;QAC1B,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;YACpC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,IAAA,iBAAI,EAAC,IAAA,mBAAU,EAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;QAC3C,CAAC;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YAC7C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,IAAA,iBAAI,EAAC,OAAO,CAAC,CAAA;QACtB,CAAC;QACD,UAAU,EAAE,CAAC,SAAS,EAAE,EAAE;YACxB,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YACjD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACF;IACD,cAAc,EAAE;QACd,GAAG,+BAAuB;QAC1B,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;YACpC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,IAAA,iBAAI,EAAC,IAAA,mBAAU,EAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;QAC3C,CAAC;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YAC7C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,IAAA,iBAAI,EAAC,OAAO,CAAC,CAAA;QACtB,CAAC;QACD,UAAU,EAAE,CAAC,SAAS,EAAE,EAAE;YACxB,MAAM,iBAAiB,GAAG,CAAC,QAAQ,CAAC,CAAA;YACpC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACF;CACF,CAAA"}