codebuff 1.0.316 → 1.0.317
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/cli-definitions.js +2 -2
- package/dist/cli-definitions.js.map +1 -1
- package/dist/cli-handlers/checkpoint.d.ts +1 -0
- package/dist/cli-handlers/checkpoint.js +11 -7
- package/dist/cli-handlers/checkpoint.js.map +1 -1
- package/dist/cli.js +7 -17
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.js +36 -21
- package/dist/client.js.map +1 -1
- package/dist/common/constants.d.ts +7 -10
- package/dist/common/constants.js +3 -4
- package/dist/common/constants.js.map +1 -1
- package/dist/common/db/schema.d.ts +4 -4
- package/dist/common/db/schema.js +2 -2
- package/dist/common/db/schema.js.map +1 -1
- package/dist/common/util/string.d.ts +17 -0
- package/dist/common/util/string.js +31 -1
- package/dist/common/util/string.js.map +1 -1
- package/dist/dev-process-manager.js +2 -2
- package/dist/dev-process-manager.js.map +1 -1
- package/dist/index.js +20 -2
- package/dist/index.js.map +1 -1
- package/dist/json-config/hooks.js +2 -2
- package/dist/json-config/hooks.js.map +1 -1
- package/dist/terminal/background.d.ts +12 -0
- package/dist/terminal/background.js +148 -0
- package/dist/terminal/background.js.map +1 -0
- package/dist/terminal/base.d.ts +47 -0
- package/dist/terminal/base.js +671 -0
- package/dist/terminal/base.js.map +1 -0
- package/dist/tool-handlers.js +3 -3
- package/dist/tool-handlers.js.map +1 -1
- package/dist/utils/git.js +0 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/terminal.js +2 -7
- package/dist/utils/terminal.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -41,6 +41,24 @@ process.env.NEXT_PUBLIC_APP_URL = 'https://www.codebuff.com';
|
|
|
41
41
|
process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
|
|
42
42
|
process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
|
|
43
43
|
process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com';
|
|
44
|
+
process.env.NEXT_PUBLIC_CB_ENVIRONMENT = 'production';
|
|
45
|
+
process.env.NEXT_PUBLIC_BACKEND_URL = 'manicode-backend.onrender.com';
|
|
46
|
+
process.env.NEXT_PUBLIC_APP_URL = 'https://www.codebuff.com';
|
|
47
|
+
process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
|
|
48
|
+
process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
|
|
49
|
+
process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com';
|
|
50
|
+
process.env.NEXT_PUBLIC_CB_ENVIRONMENT = 'production';
|
|
51
|
+
process.env.NEXT_PUBLIC_BACKEND_URL = 'manicode-backend.onrender.com';
|
|
52
|
+
process.env.NEXT_PUBLIC_APP_URL = 'https://www.codebuff.com';
|
|
53
|
+
process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
|
|
54
|
+
process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
|
|
55
|
+
process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com';
|
|
56
|
+
process.env.NEXT_PUBLIC_CB_ENVIRONMENT = 'production';
|
|
57
|
+
process.env.NEXT_PUBLIC_BACKEND_URL = 'manicode-backend.onrender.com';
|
|
58
|
+
process.env.NEXT_PUBLIC_APP_URL = 'https://www.codebuff.com';
|
|
59
|
+
process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
|
|
60
|
+
process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
|
|
61
|
+
process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com';
|
|
44
62
|
"use strict";
|
|
45
63
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
64
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -55,11 +73,11 @@ const create_template_project_1 = require("./create-template-project");
|
|
|
55
73
|
const display_1 = require("./display");
|
|
56
74
|
const project_files_1 = require("./project-files");
|
|
57
75
|
const startup_process_handler_1 = require("./startup-process-handler");
|
|
76
|
+
const base_1 = require("./terminal/base");
|
|
58
77
|
const update_codebuff_1 = require("./update-codebuff");
|
|
59
78
|
const analytics_1 = require("./utils/analytics");
|
|
60
79
|
const git_1 = require("./utils/git");
|
|
61
80
|
const logger_1 = require("./utils/logger");
|
|
62
|
-
const terminal_1 = require("./utils/terminal");
|
|
63
81
|
async function codebuff(projectDir, { initialInput, git, costMode, runInitFlow, model, isManager }) {
|
|
64
82
|
(0, display_1.enableSquashNewlines)();
|
|
65
83
|
// Initialize starting directory
|
|
@@ -67,7 +85,7 @@ async function codebuff(projectDir, { initialInput, git, costMode, runInitFlow,
|
|
|
67
85
|
const gitRoot = shouldSearch ? (0, git_1.findGitRoot)(cwd) ?? cwd : cwd;
|
|
68
86
|
const projectRoot = (0, project_files_1.setProjectRoot)(gitRoot);
|
|
69
87
|
(0, project_files_1.setWorkingDirectory)(cwd);
|
|
70
|
-
(0,
|
|
88
|
+
(0, base_1.recreateShell)(cwd);
|
|
71
89
|
// Kill all processes we failed to kill before
|
|
72
90
|
const processCleanupPromise = (0, startup_process_handler_1.logAndHandleStartup)();
|
|
73
91
|
(0, analytics_1.initAnalytics)();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAA2C;AAE3C,2CAAgC;AAEhC,mEAAyC;AACzC,+BAA2B;AAC3B,uDAA4D;AAC5D,uEAAiE;AACjE,uCAAgD;AAChD,mDAKwB;AACxB,uEAA+D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,8 @@ exports.runFileChangeHooks = runFileChangeHooks;
|
|
|
7
7
|
const string_1 = require("../common/util/string");
|
|
8
8
|
const micromatch_1 = __importDefault(require("micromatch"));
|
|
9
9
|
const project_files_1 = require("../project-files");
|
|
10
|
+
const base_1 = require("../terminal/base");
|
|
10
11
|
const logger_1 = require("../utils/logger");
|
|
11
|
-
const terminal_1 = require("../utils/terminal");
|
|
12
12
|
const parser_1 = require("./parser");
|
|
13
13
|
/**
|
|
14
14
|
* Runs file change hooks defined in the codebuff.json configuration.
|
|
@@ -36,7 +36,7 @@ async function runFileChangeHooks(filesChanged) {
|
|
|
36
36
|
try {
|
|
37
37
|
const hookName = `file-change-hook-${hook.name}`;
|
|
38
38
|
const hookId = (0, string_1.generateCompactId)(`${hookName}-`);
|
|
39
|
-
const result = await (0,
|
|
39
|
+
const result = await (0, base_1.runTerminalCommand)(hookId, hook.command, 'assistant', 'SYNC', -1, hook.cwd || (0, project_files_1.getProjectRoot)(), undefined, undefined);
|
|
40
40
|
if (result.exitCode !== 0) {
|
|
41
41
|
someHooksFailed = true;
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/json-config/hooks.ts"],"names":[],"mappings":";;;;;AAaA,gDA4DC;AAxED,+CAAsD;AACtD,4DAAmC;AAEnC,oDAAiD;AACjD,4CAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/json-config/hooks.ts"],"names":[],"mappings":";;;;;AAaA,gDA4DC;AAxED,+CAAsD;AACtD,4DAAmC;AAEnC,oDAAiD;AACjD,2CAAqD;AACrD,4CAAwC;AACxC,qCAA6C;AAE7C;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CACtC,YAAsB;IAEtB,MAAM,MAAM,GAAG,IAAA,2BAAkB,GAAE,CAAA;IACnC,MAAM,WAAW,GAAiB,EAAE,CAAA;IACpC,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;QAC7B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA;IACzC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,SAAQ;QACV,CAAC;QAED,yEAAyE;QACzE,IAAI,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,aAAa,GAAG,IAAA,oBAAU,EAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAChE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,6CAA6C;gBAC7C,SAAQ;YACV,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAA;YAChD,MAAM,MAAM,GAAG,IAAA,0BAAiB,EAAC,GAAG,QAAQ,GAAG,CAAC,CAAA;YAChD,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAkB,EACrC,MAAM,EACN,IAAI,CAAC,OAAO,EACZ,WAAW,EACX,MAAM,EACN,CAAC,CAAC,EACF,IAAI,CAAC,GAAG,IAAI,IAAA,8BAAc,GAAE,EAC5B,SAAS,EACT,SAAS,CACV,CAAA;YACD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,eAAe,GAAG,IAAI,CAAA;YACxB,CAAC;YACD,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,MAAM;gBACV,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV;gBACE,YAAY,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACpE,UAAU,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBAC5D,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,WAAW,EAAE,IAAI,CAAC,OAAO;aAC1B,EACD,gCAAgC,CACjC,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA;AACzC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function runBackgroundCommand(options: {
|
|
2
|
+
toolCallId: string;
|
|
3
|
+
command: string;
|
|
4
|
+
mode: 'user' | 'assistant' | 'manager';
|
|
5
|
+
cwd: string;
|
|
6
|
+
stdoutFile?: string;
|
|
7
|
+
stderrFile?: string;
|
|
8
|
+
}, resolveCommand: (value: {
|
|
9
|
+
result: string;
|
|
10
|
+
stdout: string;
|
|
11
|
+
exitCode: number | null;
|
|
12
|
+
}) => void): void;
|
|
@@ -0,0 +1,148 @@
|
|
|
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.runBackgroundCommand = runBackgroundCommand;
|
|
30
|
+
const assert_1 = __importDefault(require("assert"));
|
|
31
|
+
const fs_1 = require("fs");
|
|
32
|
+
const os = __importStar(require("os"));
|
|
33
|
+
const path_1 = __importStar(require("path"));
|
|
34
|
+
const string_1 = require("../common/util/string");
|
|
35
|
+
const picocolors_1 = require("picocolors");
|
|
36
|
+
const background_process_manager_1 = require("../background-process-manager");
|
|
37
|
+
function runBackgroundCommand(options, resolveCommand) {
|
|
38
|
+
const { toolCallId, command, mode, cwd, stdoutFile, stderrFile } = options;
|
|
39
|
+
const isWindows = os.platform() === 'win32';
|
|
40
|
+
const shell = isWindows ? 'cmd.exe' : 'bash';
|
|
41
|
+
const shellArgs = isWindows ? ['/c'] : ['-c'];
|
|
42
|
+
if (mode === 'assistant') {
|
|
43
|
+
console.log((0, picocolors_1.green)(`Running background process...\n> ${command}`));
|
|
44
|
+
}
|
|
45
|
+
const initialStdout = '';
|
|
46
|
+
const initialStderr = '';
|
|
47
|
+
try {
|
|
48
|
+
const childProcess = (0, background_process_manager_1.spawnAndTrack)(shell, [...shellArgs, command], {
|
|
49
|
+
cwd,
|
|
50
|
+
env: { ...process.env, FORCE_COLOR: '1' },
|
|
51
|
+
// Ensure detached is always false to link child lifetime to parent
|
|
52
|
+
detached: false,
|
|
53
|
+
stdio: 'pipe',
|
|
54
|
+
});
|
|
55
|
+
// An error should have been thrown when we called `spawn`
|
|
56
|
+
(0, assert_1.default)(childProcess.pid !== undefined, 'Failed to spawn process: no PID assigned.');
|
|
57
|
+
const processId = childProcess.pid;
|
|
58
|
+
const processInfo = {
|
|
59
|
+
pid: processId,
|
|
60
|
+
toolCallId,
|
|
61
|
+
command,
|
|
62
|
+
process: childProcess,
|
|
63
|
+
stdoutBuffer: [],
|
|
64
|
+
stderrBuffer: [],
|
|
65
|
+
status: 'running',
|
|
66
|
+
startTime: Date.now(),
|
|
67
|
+
endTime: null,
|
|
68
|
+
lastReportedStdoutLength: 0,
|
|
69
|
+
lastReportedStderrLength: 0,
|
|
70
|
+
lastReportedStatus: null,
|
|
71
|
+
stdoutFile,
|
|
72
|
+
stderrFile,
|
|
73
|
+
};
|
|
74
|
+
background_process_manager_1.backgroundProcesses.set(processId, processInfo);
|
|
75
|
+
// Set up file streams if paths are provided
|
|
76
|
+
let stdoutStream;
|
|
77
|
+
let stderrStream;
|
|
78
|
+
if (stdoutFile) {
|
|
79
|
+
const stdoutAbs = path_1.default.isAbsolute(stdoutFile)
|
|
80
|
+
? stdoutFile
|
|
81
|
+
: path_1.default.join(cwd, stdoutFile);
|
|
82
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(stdoutAbs), { recursive: true });
|
|
83
|
+
stdoutStream = (0, fs_1.createWriteStream)(stdoutAbs);
|
|
84
|
+
}
|
|
85
|
+
const realStderrFile = stderrFile || stdoutFile;
|
|
86
|
+
if (realStderrFile) {
|
|
87
|
+
const stderrAbs = path_1.default.isAbsolute(realStderrFile)
|
|
88
|
+
? realStderrFile
|
|
89
|
+
: path_1.default.join(cwd, realStderrFile);
|
|
90
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(stderrAbs), { recursive: true });
|
|
91
|
+
stderrStream = (0, fs_1.createWriteStream)(stderrAbs);
|
|
92
|
+
}
|
|
93
|
+
childProcess.stdout.on('data', (data) => {
|
|
94
|
+
const output = (0, string_1.stripColors)(data.toString());
|
|
95
|
+
processInfo.stdoutBuffer.push(output);
|
|
96
|
+
// Write to file if stream exists
|
|
97
|
+
if (stdoutStream) {
|
|
98
|
+
stdoutStream.write(output);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
childProcess.stderr.on('data', (data) => {
|
|
102
|
+
const output = (0, string_1.stripColors)(data.toString());
|
|
103
|
+
processInfo.stderrBuffer.push(output);
|
|
104
|
+
// Write to file if stream exists
|
|
105
|
+
if (stderrStream) {
|
|
106
|
+
stderrStream.write(output);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
childProcess.on('error', (error) => {
|
|
110
|
+
processInfo.status = 'error';
|
|
111
|
+
processInfo.stderrBuffer.push(`\nError spawning command: ${error.message}`);
|
|
112
|
+
processInfo.endTime = Date.now();
|
|
113
|
+
// Close file streams
|
|
114
|
+
stdoutStream?.end();
|
|
115
|
+
stderrStream?.end();
|
|
116
|
+
});
|
|
117
|
+
let exitCode = null;
|
|
118
|
+
childProcess.on('close', (code) => {
|
|
119
|
+
exitCode = code;
|
|
120
|
+
processInfo.status = code === 0 ? 'completed' : 'error';
|
|
121
|
+
processInfo.endTime = Date.now();
|
|
122
|
+
// Close file streams
|
|
123
|
+
stdoutStream?.end();
|
|
124
|
+
stderrStream?.end();
|
|
125
|
+
});
|
|
126
|
+
// Unreference the process so the parent can exit independently IF the child is the only thing keeping it alive.
|
|
127
|
+
childProcess.unref();
|
|
128
|
+
const resultMessage = `<background_process>
|
|
129
|
+
<process_id>${processId}</process_id>
|
|
130
|
+
<command>${command}</command>
|
|
131
|
+
<status>${processInfo.status}</status>
|
|
132
|
+
</background_process>`;
|
|
133
|
+
resolveCommand({
|
|
134
|
+
result: resultMessage,
|
|
135
|
+
stdout: initialStdout + initialStderr,
|
|
136
|
+
exitCode,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
const errorMessage = `<background_process>\n<command>${command}</command>\n<error>${error.message}</error>\n</background_process>`;
|
|
141
|
+
resolveCommand({
|
|
142
|
+
result: errorMessage,
|
|
143
|
+
stdout: error.message,
|
|
144
|
+
exitCode: null,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../../src/terminal/background.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ChildProcessWithoutNullStreams } from 'child_process';
|
|
2
|
+
import type { IPty } from '@homebridge/node-pty-prebuilt-multiarch';
|
|
3
|
+
type PersistentProcess = {
|
|
4
|
+
type: 'pty';
|
|
5
|
+
shell: 'cmd.exe' | 'powershell.exe' | 'bash';
|
|
6
|
+
pty: IPty;
|
|
7
|
+
timerId: NodeJS.Timeout | null;
|
|
8
|
+
globalOutputBuffer: string;
|
|
9
|
+
globalOutputLastReadLength: number;
|
|
10
|
+
} | {
|
|
11
|
+
type: 'process';
|
|
12
|
+
shell: 'bash' | 'cmd.exe' | 'powershell.exe';
|
|
13
|
+
childProcess: ChildProcessWithoutNullStreams | null;
|
|
14
|
+
timerId: NodeJS.Timeout | null;
|
|
15
|
+
globalOutputBuffer: string;
|
|
16
|
+
globalOutputLastReadLength: number;
|
|
17
|
+
};
|
|
18
|
+
declare const createPersistantProcess: (dir: string, forceChildProcess?: boolean) => PersistentProcess;
|
|
19
|
+
export declare let persistentProcess: ReturnType<typeof createPersistantProcess> | null;
|
|
20
|
+
export declare const isCommandRunning: () => boolean;
|
|
21
|
+
export declare const recreateShell: (cwd: string, forceChildProcess?: boolean) => void;
|
|
22
|
+
export declare const resetShell: (cwd: string) => void;
|
|
23
|
+
export declare const runTerminalCommand: (toolCallId: string, command: string, mode: "user" | "assistant" | "manager", processType: "SYNC" | "BACKGROUND", timeoutSeconds: number, cwd?: string, stdoutFile?: string, stderrFile?: string) => Promise<{
|
|
24
|
+
result: string;
|
|
25
|
+
stdout: string;
|
|
26
|
+
exitCode: number | null;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const runCommandPty: (persistentProcess: PersistentProcess & {
|
|
29
|
+
type: "pty";
|
|
30
|
+
}, command: string, mode: "user" | "assistant" | "manager", cwd: string, maybeTimeoutSeconds: number | null, resolve: (value: {
|
|
31
|
+
result: string;
|
|
32
|
+
stdout: string;
|
|
33
|
+
exitCode: number | null;
|
|
34
|
+
}) => void) => void;
|
|
35
|
+
export declare function killAndResetPersistentProcess(): void;
|
|
36
|
+
export declare function clearScreen(): void;
|
|
37
|
+
export declare const runCommandPtyManager: (persistentProcess: PersistentProcess & {
|
|
38
|
+
type: "pty";
|
|
39
|
+
}, command: string, cwd: string, maybeTimeoutSeconds: number | null, resolve: (value: {
|
|
40
|
+
result: string;
|
|
41
|
+
stdout: string;
|
|
42
|
+
exitCode: number | null;
|
|
43
|
+
}) => void) => void;
|
|
44
|
+
export declare const readNewTerminalOutput: (options?: {
|
|
45
|
+
maxLength: number;
|
|
46
|
+
}) => string;
|
|
47
|
+
export {};
|