@caupulican/pi-adaptative 0.81.32 → 0.81.35
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/CHANGELOG.md +22 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/README.md +69 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +53 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +1282 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +1453 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/builder-validator.json +14 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/claude-trio.json +32 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/full-provider-review.json +15 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/provider-prompt-smoke.json +14 -0
- package/dist/bundled-resources/prompts/extensionify.md +5 -4
- package/dist/bundled-resources/prompts/skillify.md +5 -5
- package/dist/bundled-resources/skills/pi-harness-learning/SKILL.md +6 -3
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -2
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +7 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +25 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +12 -3
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +67 -26
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +7 -3
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/context/context-store-retention.d.ts +4 -1
- package/dist/core/context/context-store-retention.d.ts.map +1 -1
- package/dist/core/context/context-store-retention.js +42 -151
- package/dist/core/context/context-store-retention.js.map +1 -1
- package/dist/core/context-pipeline.d.ts.map +1 -1
- package/dist/core/context-pipeline.js +6 -6
- package/dist/core/context-pipeline.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +25 -39
- package/dist/core/exec.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +9 -2
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +105 -21
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +2 -0
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/goals/goal-state.d.ts +10 -0
- package/dist/core/goals/goal-state.d.ts.map +1 -1
- package/dist/core/goals/goal-state.js +37 -0
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts +11 -0
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +51 -1
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/improvement-loop.d.ts.map +1 -1
- package/dist/core/improvement-loop.js +26 -5
- package/dist/core/improvement-loop.js.map +1 -1
- package/dist/core/models/fitness-store.d.ts.map +1 -1
- package/dist/core/models/fitness-store.js +1 -1
- package/dist/core/models/fitness-store.js.map +1 -1
- package/dist/core/models/local-runtime.d.ts +6 -4
- package/dist/core/models/local-runtime.d.ts.map +1 -1
- package/dist/core/models/local-runtime.js +108 -36
- package/dist/core/models/local-runtime.js.map +1 -1
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js +23 -8
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +44 -59
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/profile-resource-selection.d.ts +16 -0
- package/dist/core/profile-resource-selection.d.ts.map +1 -1
- package/dist/core/profile-resource-selection.js +41 -0
- package/dist/core/profile-resource-selection.js.map +1 -1
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +18 -1
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/reload-blockers.d.ts +1 -0
- package/dist/core/reload-blockers.d.ts.map +1 -1
- package/dist/core/reload-blockers.js +6 -2
- package/dist/core/reload-blockers.js.map +1 -1
- package/dist/core/resource-loader.d.ts +2 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +50 -28
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/toolkit/script-runner.d.ts.map +1 -1
- package/dist/core/toolkit/script-runner.js +58 -24
- package/dist/core/toolkit/script-runner.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +13 -26
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/extensionify.d.ts +2 -1
- package/dist/core/tools/extensionify.d.ts.map +1 -1
- package/dist/core/tools/extensionify.js +11 -8
- package/dist/core/tools/extensionify.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +54 -48
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/git-filter.d.ts.map +1 -1
- package/dist/core/tools/git-filter.js +20 -32
- package/dist/core/tools/git-filter.js.map +1 -1
- package/dist/core/tools/goal.d.ts +1 -1
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +10 -3
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +89 -80
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +2 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +7 -4
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +4 -3
- package/dist/core/tools/read.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +23 -4
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +18 -4
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.d.ts +10 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +94 -27
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +2 -1
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +8 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +6 -15
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +3 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +20 -8
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.d.ts +4 -1
- package/dist/modes/interactive/components/profile-resource-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.js +22 -39
- package/dist/modes/interactive/components/profile-resource-editor.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/config-backup.d.ts +1 -0
- package/dist/modes/interactive/config-backup.d.ts.map +1 -1
- package/dist/modes/interactive/config-backup.js +14 -3
- package/dist/modes/interactive/config-backup.js.map +1 -1
- package/dist/modes/interactive/editor-overlay-host.d.ts +12 -0
- package/dist/modes/interactive/editor-overlay-host.d.ts.map +1 -1
- package/dist/modes/interactive/editor-overlay-host.js +55 -0
- package/dist/modes/interactive/editor-overlay-host.js.map +1 -1
- package/dist/modes/interactive/extension-ui-host.d.ts +2 -1
- package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
- package/dist/modes/interactive/extension-ui-host.js +161 -96
- package/dist/modes/interactive/extension-ui-host.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +23 -28
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +14 -8
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/profile-menu-controller.d.ts +5 -1
- package/dist/modes/interactive/profile-menu-controller.d.ts.map +1 -1
- package/dist/modes/interactive/profile-menu-controller.js +118 -24
- package/dist/modes/interactive/profile-menu-controller.js.map +1 -1
- package/dist/modes/interactive/resource-shell-commands.d.ts +1 -0
- package/dist/modes/interactive/resource-shell-commands.d.ts.map +1 -1
- package/dist/modes/interactive/resource-shell-commands.js +5 -1
- package/dist/modes/interactive/resource-shell-commands.js.map +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +100 -7
- package/dist/modes/interactive/session-flow-commands.js.map +1 -1
- package/dist/modes/interactive/session-io-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-io-commands.js +80 -50
- package/dist/modes/interactive/session-io-commands.js.map +1 -1
- package/dist/modes/interactive/startup-checks.d.ts.map +1 -1
- package/dist/modes/interactive/startup-checks.js +14 -17
- package/dist/modes/interactive/startup-checks.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +20 -19
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +10 -19
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/child-process.d.ts +13 -7
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +56 -3
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +3 -2
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +17 -10
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/external-editor-command.d.ts +8 -0
- package/dist/utils/external-editor-command.d.ts.map +1 -0
- package/dist/utils/external-editor-command.js +60 -0
- package/dist/utils/external-editor-command.js.map +1 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +10 -2
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +23 -10
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/work-directory.d.ts +36 -0
- package/dist/utils/work-directory.d.ts.map +1 -0
- package/dist/utils/work-directory.js +462 -0
- package/dist/utils/work-directory.js.map +1 -0
- package/docs/index.md +2 -0
- package/docs/resources.md +2 -2
- package/docs/rpc.md +1 -1
- package/docs/tmux-agent-manager.md +48 -0
- package/docs/windows.md +100 -7
- package/docs/work-directory.md +41 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
|
@@ -25,13 +25,17 @@ import { globSync } from "glob";
|
|
|
25
25
|
import ignore from "ignore";
|
|
26
26
|
import { minimatch } from "minimatch";
|
|
27
27
|
import { CONFIG_DIR_NAME } from "../config.js";
|
|
28
|
-
import { spawnProcess, spawnProcessSync } from "../utils/child-process.js";
|
|
28
|
+
import { spawnProcess, spawnProcessSync, waitForChildProcessWithTermination } from "../utils/child-process.js";
|
|
29
29
|
import { parseGitUrl } from "../utils/git.js";
|
|
30
30
|
import { canonicalizePath, isLocalPath, markPathIgnoredByCloudSync, resolvePath } from "../utils/paths.js";
|
|
31
|
+
import { getProcessWorkRun } from "../utils/work-directory.js";
|
|
31
32
|
import { createRollingOutputBuffer } from "./exec.js";
|
|
32
33
|
import { isStdoutTakenOver } from "./output-guard.js";
|
|
33
34
|
import { mergeResourceProfileMap, parseResourceProfileBlocks } from "./resource-profile-blocks.js";
|
|
34
35
|
const NETWORK_TIMEOUT_MS = 10000;
|
|
36
|
+
const PACKAGE_CAPTURE_TIMEOUT_MS = 30_000;
|
|
37
|
+
const PACKAGE_OPERATION_TIMEOUT_MS = 10 * 60_000;
|
|
38
|
+
const PACKAGE_COMMAND_KILL_GRACE_MS = 2_000;
|
|
35
39
|
const UPDATE_CHECK_CONCURRENCY = 4;
|
|
36
40
|
const GIT_UPDATE_CONCURRENCY = 4;
|
|
37
41
|
const MAX_RESOURCE_PROFILE_SCAN_BYTES = 2 * 1024 * 1024;
|
|
@@ -74,8 +78,7 @@ function getHomeDir() {
|
|
|
74
78
|
return process.env.HOME || homedir();
|
|
75
79
|
}
|
|
76
80
|
export function getExtensionTempFolder(agentDir) {
|
|
77
|
-
const tempFolder =
|
|
78
|
-
mkdirSync(tempFolder, { recursive: true, mode: 0o700 });
|
|
81
|
+
const tempFolder = getProcessWorkRun(agentDir, "extensions", "packages").path;
|
|
79
82
|
chmodSync(tempFolder, 0o700);
|
|
80
83
|
return tempFolder;
|
|
81
84
|
}
|
|
@@ -2064,6 +2067,7 @@ export class DefaultPackageManager {
|
|
|
2064
2067
|
const env = getEnv();
|
|
2065
2068
|
return spawnProcess(command, args, {
|
|
2066
2069
|
cwd: options?.cwd,
|
|
2070
|
+
detached: process.platform !== "win32",
|
|
2067
2071
|
stdio: isStdoutTakenOver() ? ["ignore", 2, 2] : "inherit",
|
|
2068
2072
|
env,
|
|
2069
2073
|
});
|
|
@@ -2073,69 +2077,49 @@ export class DefaultPackageManager {
|
|
|
2073
2077
|
const env = options?.env ? { ...baseEnv, ...options.env } : baseEnv;
|
|
2074
2078
|
return spawnProcess(command, args, {
|
|
2075
2079
|
cwd: options?.cwd,
|
|
2080
|
+
detached: process.platform !== "win32",
|
|
2076
2081
|
stdio: ["ignore", "pipe", "pipe"],
|
|
2077
2082
|
env,
|
|
2078
2083
|
});
|
|
2079
2084
|
}
|
|
2080
|
-
runCommandCapture(command, args, options) {
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
}, options.timeoutMs)
|
|
2094
|
-
: undefined;
|
|
2095
|
-
child.stdout?.on("data", (data) => {
|
|
2096
|
-
stdout.push(data.toString());
|
|
2097
|
-
});
|
|
2098
|
-
child.stderr?.on("data", (data) => {
|
|
2099
|
-
stderr.push(data.toString());
|
|
2100
|
-
});
|
|
2101
|
-
child.once("error", (error) => {
|
|
2102
|
-
if (timeout)
|
|
2103
|
-
clearTimeout(timeout);
|
|
2104
|
-
reject(error);
|
|
2105
|
-
});
|
|
2106
|
-
child.once("close", (code, signal) => {
|
|
2107
|
-
if (timeout)
|
|
2108
|
-
clearTimeout(timeout);
|
|
2109
|
-
if (timedOut) {
|
|
2110
|
-
reject(new Error(`${command} ${args.join(" ")} timed out after ${options?.timeoutMs}ms`));
|
|
2111
|
-
return;
|
|
2112
|
-
}
|
|
2113
|
-
if (code === 0) {
|
|
2114
|
-
if (stdout.truncated()) {
|
|
2115
|
-
reject(new Error(`${command} ${args.join(" ")} produced more than ${maxCapturedOutput} bytes of output`));
|
|
2116
|
-
return;
|
|
2117
|
-
}
|
|
2118
|
-
resolvePromise(stdout.text().trim());
|
|
2119
|
-
return;
|
|
2120
|
-
}
|
|
2121
|
-
const exitStatus = code === null ? `signal ${signal ?? "unknown"}` : `code ${code}`;
|
|
2122
|
-
reject(new Error(`${command} ${args.join(" ")} failed with ${exitStatus}: ${stderr.text() || stdout.text()}`));
|
|
2123
|
-
});
|
|
2085
|
+
async runCommandCapture(command, args, options) {
|
|
2086
|
+
const child = this.spawnCaptureCommand(command, args, options);
|
|
2087
|
+
// Callers parse stdout, so a silently truncated tail would corrupt results.
|
|
2088
|
+
// Bound retention and fail loudly in the (pathological) overflow case.
|
|
2089
|
+
const maxCapturedOutput = 16 * 1024 * 1024;
|
|
2090
|
+
const stdout = createRollingOutputBuffer(maxCapturedOutput);
|
|
2091
|
+
const stderr = createRollingOutputBuffer(maxCapturedOutput);
|
|
2092
|
+
child.stdout?.on("data", (data) => stdout.push(data.toString()));
|
|
2093
|
+
child.stderr?.on("data", (data) => stderr.push(data.toString()));
|
|
2094
|
+
const timeoutMs = options?.timeoutMs ?? PACKAGE_CAPTURE_TIMEOUT_MS;
|
|
2095
|
+
const terminal = await waitForChildProcessWithTermination(child, {
|
|
2096
|
+
timeoutMs,
|
|
2097
|
+
killGraceMs: PACKAGE_COMMAND_KILL_GRACE_MS,
|
|
2124
2098
|
});
|
|
2099
|
+
if (terminal.reason === "timeout") {
|
|
2100
|
+
throw new Error(`${command} ${args.join(" ")} timed out after ${timeoutMs}ms`);
|
|
2101
|
+
}
|
|
2102
|
+
if (terminal.code === 0) {
|
|
2103
|
+
if (stdout.truncated()) {
|
|
2104
|
+
throw new Error(`${command} ${args.join(" ")} produced more than ${maxCapturedOutput} bytes of output`);
|
|
2105
|
+
}
|
|
2106
|
+
return stdout.text().trim();
|
|
2107
|
+
}
|
|
2108
|
+
const exitStatus = terminal.code === null ? `signal ${child.signalCode ?? "unknown"}` : `code ${terminal.code}`;
|
|
2109
|
+
throw new Error(`${command} ${args.join(" ")} failed with ${exitStatus}: ${stderr.text() || stdout.text()}`);
|
|
2125
2110
|
}
|
|
2126
|
-
runCommand(command, args, options) {
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
if (code === 0) {
|
|
2132
|
-
resolvePromise();
|
|
2133
|
-
}
|
|
2134
|
-
else {
|
|
2135
|
-
reject(new Error(`${command} ${args.join(" ")} failed with code ${code}`));
|
|
2136
|
-
}
|
|
2137
|
-
});
|
|
2111
|
+
async runCommand(command, args, options) {
|
|
2112
|
+
const child = this.spawnCommand(command, args, options);
|
|
2113
|
+
const terminal = await waitForChildProcessWithTermination(child, {
|
|
2114
|
+
timeoutMs: PACKAGE_OPERATION_TIMEOUT_MS,
|
|
2115
|
+
killGraceMs: PACKAGE_COMMAND_KILL_GRACE_MS,
|
|
2138
2116
|
});
|
|
2117
|
+
if (terminal.reason === "timeout") {
|
|
2118
|
+
throw new Error(`${command} ${args.join(" ")} timed out after ${PACKAGE_OPERATION_TIMEOUT_MS}ms`);
|
|
2119
|
+
}
|
|
2120
|
+
if (terminal.code !== 0) {
|
|
2121
|
+
throw new Error(`${command} ${args.join(" ")} failed with code ${terminal.code}`);
|
|
2122
|
+
}
|
|
2139
2123
|
}
|
|
2140
2124
|
runCommandSync(command, args) {
|
|
2141
2125
|
const env = getEnv();
|
|
@@ -2143,6 +2127,7 @@ export class DefaultPackageManager {
|
|
|
2143
2127
|
stdio: ["ignore", "pipe", "pipe"],
|
|
2144
2128
|
encoding: "utf-8",
|
|
2145
2129
|
env,
|
|
2130
|
+
timeout: 30_000,
|
|
2146
2131
|
});
|
|
2147
2132
|
if (result.error || result.status !== 0) {
|
|
2148
2133
|
throw new Error(`Failed to run ${command} ${args.join(" ")}: ${result.error?.message || result.stderr || result.stdout}`);
|