@agentv/core 4.10.0 → 4.11.2-next.1
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/chunk-3WGHC7LC.js +149 -0
- package/dist/chunk-3WGHC7LC.js.map +1 -0
- package/dist/{chunk-BWHUWLGW.js → chunk-5POFMJJ7.js} +1 -1
- package/dist/chunk-5POFMJJ7.js.map +1 -0
- package/dist/chunk-SDIANPEY.js +181 -0
- package/dist/chunk-SDIANPEY.js.map +1 -0
- package/dist/docker-workspace-RPPXBT27.js +9 -0
- package/dist/docker-workspace-RPPXBT27.js.map +1 -0
- package/dist/evaluation/validation/index.cjs +70 -3
- package/dist/evaluation/validation/index.cjs.map +1 -1
- package/dist/evaluation/validation/index.js +71 -4
- package/dist/evaluation/validation/index.js.map +1 -1
- package/dist/exec-AR6JUUN5.js +9 -0
- package/dist/exec-AR6JUUN5.js.map +1 -0
- package/dist/index.cjs +1264 -468
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +191 -5
- package/dist/index.d.ts +191 -5
- package/dist/index.js +780 -342
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-BWHUWLGW.js.map +0 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// src/runtime/exec.ts
|
|
2
|
+
function shellEscapePath(value) {
|
|
3
|
+
if (process.platform === "win32") {
|
|
4
|
+
return `"${value.replaceAll('"', '""')}"`;
|
|
5
|
+
}
|
|
6
|
+
return `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
7
|
+
}
|
|
8
|
+
async function execFileWithStdin(argv, stdinPayload, options = {}) {
|
|
9
|
+
if (argv.length === 0) {
|
|
10
|
+
throw new Error("Executable argv must include at least one entry");
|
|
11
|
+
}
|
|
12
|
+
if (typeof Bun !== "undefined") {
|
|
13
|
+
return execFileWithStdinBun(argv, stdinPayload, options);
|
|
14
|
+
}
|
|
15
|
+
return execFileWithStdinNode(argv, stdinPayload, options);
|
|
16
|
+
}
|
|
17
|
+
async function execFileWithStdinBun(argv, stdinPayload, options) {
|
|
18
|
+
const command = [...argv];
|
|
19
|
+
const encoder = new TextEncoder();
|
|
20
|
+
const proc = Bun.spawn(command, {
|
|
21
|
+
cwd: options.cwd,
|
|
22
|
+
stdin: encoder.encode(stdinPayload),
|
|
23
|
+
stdout: "pipe",
|
|
24
|
+
stderr: "pipe",
|
|
25
|
+
// Merge additional env vars with process.env
|
|
26
|
+
env: options.env ? { ...process.env, ...options.env } : process.env
|
|
27
|
+
});
|
|
28
|
+
let timedOut = false;
|
|
29
|
+
const timeout = options.timeoutMs !== void 0 ? setTimeout(() => {
|
|
30
|
+
timedOut = true;
|
|
31
|
+
proc.kill("SIGKILL");
|
|
32
|
+
}, options.timeoutMs) : void 0;
|
|
33
|
+
try {
|
|
34
|
+
const stdoutPromise = proc.stdout ? new Response(proc.stdout).text() : Promise.resolve("");
|
|
35
|
+
const stderrPromise = proc.stderr ? new Response(proc.stderr).text() : Promise.resolve("");
|
|
36
|
+
const [stdout, stderr, exitCode] = await Promise.all([
|
|
37
|
+
stdoutPromise,
|
|
38
|
+
stderrPromise,
|
|
39
|
+
proc.exited
|
|
40
|
+
]);
|
|
41
|
+
if (timedOut) {
|
|
42
|
+
throw new Error(`Process timed out after ${options.timeoutMs}ms`);
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
stdout: stdout.replace(/\r\n/g, "\n"),
|
|
46
|
+
stderr: stderr.replace(/\r\n/g, "\n"),
|
|
47
|
+
exitCode
|
|
48
|
+
};
|
|
49
|
+
} finally {
|
|
50
|
+
if (timeout !== void 0) {
|
|
51
|
+
clearTimeout(timeout);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function execFileWithStdinNode(argv, stdinPayload, options) {
|
|
56
|
+
const { spawn } = await import("node:child_process");
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const [cmd, ...args] = argv;
|
|
59
|
+
const child = spawn(cmd, args, {
|
|
60
|
+
cwd: options.cwd,
|
|
61
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
62
|
+
// Merge additional env vars with process.env
|
|
63
|
+
env: options.env ? { ...process.env, ...options.env } : process.env
|
|
64
|
+
});
|
|
65
|
+
const stdoutChunks = [];
|
|
66
|
+
const stderrChunks = [];
|
|
67
|
+
child.stdout?.on("data", (chunk) => stdoutChunks.push(chunk));
|
|
68
|
+
child.stderr?.on("data", (chunk) => stderrChunks.push(chunk));
|
|
69
|
+
let timedOut = false;
|
|
70
|
+
const timeout = options.timeoutMs !== void 0 ? setTimeout(() => {
|
|
71
|
+
timedOut = true;
|
|
72
|
+
child.kill("SIGKILL");
|
|
73
|
+
}, options.timeoutMs) : void 0;
|
|
74
|
+
child.on("error", (error) => {
|
|
75
|
+
if (timeout !== void 0) clearTimeout(timeout);
|
|
76
|
+
reject(error);
|
|
77
|
+
});
|
|
78
|
+
child.on("close", (code) => {
|
|
79
|
+
if (timeout !== void 0) clearTimeout(timeout);
|
|
80
|
+
if (timedOut) {
|
|
81
|
+
reject(new Error(`Process timed out after ${options.timeoutMs}ms`));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const stdout = Buffer.concat(stdoutChunks).toString("utf8").replace(/\r\n/g, "\n");
|
|
85
|
+
const stderr = Buffer.concat(stderrChunks).toString("utf8").replace(/\r\n/g, "\n");
|
|
86
|
+
resolve({
|
|
87
|
+
stdout,
|
|
88
|
+
stderr,
|
|
89
|
+
exitCode: code ?? 0
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
if (child.stdin) {
|
|
93
|
+
child.stdin.write(stdinPayload);
|
|
94
|
+
child.stdin.end();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async function execShellWithStdin(command, stdinPayload, options = {}) {
|
|
99
|
+
const { mkdir, readFile, rm, writeFile } = await import("node:fs/promises");
|
|
100
|
+
const { tmpdir } = await import("node:os");
|
|
101
|
+
const path = await import("node:path");
|
|
102
|
+
const { randomUUID } = await import("node:crypto");
|
|
103
|
+
const dir = path.join(tmpdir(), `agentv-exec-${randomUUID()}`);
|
|
104
|
+
await mkdir(dir, { recursive: true });
|
|
105
|
+
const stdinPath = path.join(dir, "stdin.txt");
|
|
106
|
+
const stdoutPath = path.join(dir, "stdout.txt");
|
|
107
|
+
const stderrPath = path.join(dir, "stderr.txt");
|
|
108
|
+
await writeFile(stdinPath, stdinPayload, "utf8");
|
|
109
|
+
const wrappedCommand = process.platform === "win32" ? `(${command}) < ${shellEscapePath(stdinPath)} > ${shellEscapePath(stdoutPath)} 2> ${shellEscapePath(stderrPath)}` : `(${command}) < ${shellEscapePath(stdinPath)} > ${shellEscapePath(stdoutPath)} 2> ${shellEscapePath(stderrPath)}`;
|
|
110
|
+
const { spawn } = await import("node:child_process");
|
|
111
|
+
try {
|
|
112
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
113
|
+
const child = spawn(wrappedCommand, {
|
|
114
|
+
shell: true,
|
|
115
|
+
cwd: options.cwd,
|
|
116
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
117
|
+
// Merge additional env vars with process.env
|
|
118
|
+
env: options.env ? { ...process.env, ...options.env } : process.env
|
|
119
|
+
});
|
|
120
|
+
const timeout = options.timeoutMs ? setTimeout(() => {
|
|
121
|
+
child.kill();
|
|
122
|
+
reject(new Error(`Process timed out after ${options.timeoutMs}ms`));
|
|
123
|
+
}, options.timeoutMs) : void 0;
|
|
124
|
+
child.on("error", (error) => {
|
|
125
|
+
if (timeout !== void 0) {
|
|
126
|
+
clearTimeout(timeout);
|
|
127
|
+
}
|
|
128
|
+
reject(error);
|
|
129
|
+
});
|
|
130
|
+
child.on("exit", (code) => {
|
|
131
|
+
if (timeout !== void 0) {
|
|
132
|
+
clearTimeout(timeout);
|
|
133
|
+
}
|
|
134
|
+
resolve(code ?? 0);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
const stdout = (await readFile(stdoutPath, "utf8")).replace(/\r\n/g, "\n");
|
|
138
|
+
const stderr = (await readFile(stderrPath, "utf8")).replace(/\r\n/g, "\n");
|
|
139
|
+
return { stdout, stderr, exitCode };
|
|
140
|
+
} finally {
|
|
141
|
+
await rm(dir, { recursive: true, force: true });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export {
|
|
146
|
+
execFileWithStdin,
|
|
147
|
+
execShellWithStdin
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=chunk-3WGHC7LC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/exec.ts"],"sourcesContent":["interface ExecOptions {\n readonly cwd?: string;\n readonly timeoutMs?: number;\n /** Additional environment variables to pass to the subprocess */\n readonly env?: Record<string, string>;\n}\n\nfunction shellEscapePath(value: string): string {\n if (process.platform === 'win32') {\n // Very small escape helper for file paths in cmd.exe context.\n // Wrap in double-quotes and escape existing double-quotes.\n return `\"${value.replaceAll('\"', '\"\"')}\"`;\n }\n // POSIX: single-quote escape (close/open around embedded single quotes).\n return `'${value.replaceAll(\"'\", `'\\\"'\\\"'`)}'`;\n}\n\n// IPC protocol: stdin/stdout JSON was chosen over JSON-RPC (overkill for one-shot eval),\n// HTTP (unnecessary network overhead for local scripts), and in-process (no isolation,\n// single-language only). Each evaluation is isolated by design for reproducibility and\n// safe parallelization. Process spawn overhead (~10-50ms) is acceptable for eval workloads.\nexport async function execFileWithStdin(\n argv: readonly string[],\n stdinPayload: string,\n options: ExecOptions = {},\n): Promise<{\n readonly stdout: string;\n readonly stderr: string;\n readonly exitCode: number;\n}> {\n if (argv.length === 0) {\n throw new Error('Executable argv must include at least one entry');\n }\n\n // Use Bun.spawn if available, otherwise fall back to Node.js child_process\n if (typeof Bun !== 'undefined') {\n return execFileWithStdinBun(argv, stdinPayload, options);\n }\n return execFileWithStdinNode(argv, stdinPayload, options);\n}\n\n/**\n * Bun implementation using Bun.spawn\n */\nasync function execFileWithStdinBun(\n argv: readonly string[],\n stdinPayload: string,\n options: ExecOptions,\n): Promise<{\n readonly stdout: string;\n readonly stderr: string;\n readonly exitCode: number;\n}> {\n const command = [...argv];\n const encoder = new TextEncoder();\n const proc = Bun.spawn(command, {\n cwd: options.cwd,\n stdin: encoder.encode(stdinPayload),\n stdout: 'pipe',\n stderr: 'pipe',\n // Merge additional env vars with process.env\n env: options.env ? { ...process.env, ...options.env } : process.env,\n });\n\n let timedOut = false;\n const timeout =\n options.timeoutMs !== undefined\n ? setTimeout(() => {\n timedOut = true;\n proc.kill('SIGKILL');\n }, options.timeoutMs)\n : undefined;\n\n try {\n const stdoutPromise = proc.stdout ? new Response(proc.stdout).text() : Promise.resolve('');\n const stderrPromise = proc.stderr ? new Response(proc.stderr).text() : Promise.resolve('');\n\n const [stdout, stderr, exitCode] = await Promise.all([\n stdoutPromise,\n stderrPromise,\n proc.exited,\n ]);\n\n if (timedOut) {\n throw new Error(`Process timed out after ${options.timeoutMs}ms`);\n }\n\n return {\n stdout: stdout.replace(/\\r\\n/g, '\\n'),\n stderr: stderr.replace(/\\r\\n/g, '\\n'),\n exitCode,\n };\n } finally {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n }\n}\n\n/**\n * Node.js implementation using child_process.spawn\n */\nasync function execFileWithStdinNode(\n argv: readonly string[],\n stdinPayload: string,\n options: ExecOptions,\n): Promise<{\n readonly stdout: string;\n readonly stderr: string;\n readonly exitCode: number;\n}> {\n const { spawn } = await import('node:child_process');\n\n return new Promise((resolve, reject) => {\n const [cmd, ...args] = argv;\n const child = spawn(cmd, args, {\n cwd: options.cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n // Merge additional env vars with process.env\n env: options.env ? { ...process.env, ...options.env } : process.env,\n });\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n\n child.stdout?.on('data', (chunk: Buffer) => stdoutChunks.push(chunk));\n child.stderr?.on('data', (chunk: Buffer) => stderrChunks.push(chunk));\n\n let timedOut = false;\n const timeout =\n options.timeoutMs !== undefined\n ? setTimeout(() => {\n timedOut = true;\n child.kill('SIGKILL');\n }, options.timeoutMs)\n : undefined;\n\n child.on('error', (error) => {\n if (timeout !== undefined) clearTimeout(timeout);\n reject(error);\n });\n\n child.on('close', (code) => {\n if (timeout !== undefined) clearTimeout(timeout);\n\n if (timedOut) {\n reject(new Error(`Process timed out after ${options.timeoutMs}ms`));\n return;\n }\n\n const stdout = Buffer.concat(stdoutChunks).toString('utf8').replace(/\\r\\n/g, '\\n');\n const stderr = Buffer.concat(stderrChunks).toString('utf8').replace(/\\r\\n/g, '\\n');\n\n resolve({\n stdout,\n stderr,\n exitCode: code ?? 0,\n });\n });\n\n // Write stdin and close\n if (child.stdin) {\n child.stdin.write(stdinPayload);\n child.stdin.end();\n }\n });\n}\n\n/**\n * Execute a shell command with the given stdin payload.\n *\n * Why this exists:\n * - Some providers/scripts (notably Node.js) must receive stdin reliably.\n * - In some Bun environments, `Bun.spawn` does not forward stdin to Node correctly.\n * - Capture stdout/stderr via temp files to avoid pipe incompatibilities.\n */\nexport async function execShellWithStdin(\n command: string,\n stdinPayload: string,\n options: ExecOptions = {},\n): Promise<{\n readonly stdout: string;\n readonly stderr: string;\n readonly exitCode: number;\n}> {\n const { mkdir, readFile, rm, writeFile } = await import('node:fs/promises');\n const { tmpdir } = await import('node:os');\n const path = await import('node:path');\n const { randomUUID } = await import('node:crypto');\n\n const dir = path.join(tmpdir(), `agentv-exec-${randomUUID()}`);\n await mkdir(dir, { recursive: true });\n\n const stdinPath = path.join(dir, 'stdin.txt');\n const stdoutPath = path.join(dir, 'stdout.txt');\n const stderrPath = path.join(dir, 'stderr.txt');\n\n await writeFile(stdinPath, stdinPayload, 'utf8');\n\n const wrappedCommand =\n process.platform === 'win32'\n ? `(${command}) < ${shellEscapePath(stdinPath)} > ${shellEscapePath(stdoutPath)} 2> ${shellEscapePath(stderrPath)}`\n : `(${command}) < ${shellEscapePath(stdinPath)} > ${shellEscapePath(stdoutPath)} 2> ${shellEscapePath(stderrPath)}`;\n\n const { spawn } = await import('node:child_process');\n try {\n const exitCode = await new Promise<number>((resolve, reject) => {\n const child = spawn(wrappedCommand, {\n shell: true,\n cwd: options.cwd,\n stdio: ['ignore', 'ignore', 'ignore'],\n // Merge additional env vars with process.env\n env: options.env ? { ...process.env, ...options.env } : process.env,\n });\n\n const timeout = options.timeoutMs\n ? setTimeout(() => {\n child.kill();\n reject(new Error(`Process timed out after ${options.timeoutMs}ms`));\n }, options.timeoutMs)\n : undefined;\n\n child.on('error', (error) => {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n reject(error);\n });\n\n child.on('exit', (code) => {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n resolve(code ?? 0);\n });\n });\n\n const stdout = (await readFile(stdoutPath, 'utf8')).replace(/\\r\\n/g, '\\n');\n const stderr = (await readFile(stderrPath, 'utf8')).replace(/\\r\\n/g, '\\n');\n return { stdout, stderr, exitCode };\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n"],"mappings":"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","names":[]}
|