@cavelang/cli 0.29.0 → 0.30.0

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 (79) hide show
  1. package/README.md +14 -0
  2. package/dist/internal/act/engine.d.ts +5 -1
  3. package/dist/internal/act/engine.d.ts.map +1 -1
  4. package/dist/internal/act/engine.js +39 -32
  5. package/dist/internal/act/engine.js.map +1 -1
  6. package/dist/internal/automate/engine.d.ts +4 -0
  7. package/dist/internal/automate/engine.d.ts.map +1 -1
  8. package/dist/internal/automate/engine.js +31 -25
  9. package/dist/internal/automate/engine.js.map +1 -1
  10. package/dist/internal/automate/main.d.ts.map +1 -1
  11. package/dist/internal/automate/main.js +7 -4
  12. package/dist/internal/automate/main.js.map +1 -1
  13. package/dist/internal/eval/loop.d.ts +1 -0
  14. package/dist/internal/eval/loop.d.ts.map +1 -1
  15. package/dist/internal/eval/loop.js +2 -1
  16. package/dist/internal/eval/loop.js.map +1 -1
  17. package/dist/internal/eval/main.d.ts.map +1 -1
  18. package/dist/internal/eval/main.js +2 -1
  19. package/dist/internal/eval/main.js.map +1 -1
  20. package/dist/internal/eval/run.d.ts +2 -0
  21. package/dist/internal/eval/run.d.ts.map +1 -1
  22. package/dist/internal/eval/run.js +6 -4
  23. package/dist/internal/eval/run.js.map +1 -1
  24. package/dist/internal/ingest/index.d.ts +1 -1
  25. package/dist/internal/ingest/index.d.ts.map +1 -1
  26. package/dist/internal/ingest/index.js.map +1 -1
  27. package/dist/internal/ingest/main.d.ts.map +1 -1
  28. package/dist/internal/ingest/main.js +4 -2
  29. package/dist/internal/ingest/main.js.map +1 -1
  30. package/dist/internal/ingest/run.d.ts +8 -1
  31. package/dist/internal/ingest/run.d.ts.map +1 -1
  32. package/dist/internal/ingest/run.js +17 -34
  33. package/dist/internal/ingest/run.js.map +1 -1
  34. package/dist/internal/loop/index.d.ts +2 -0
  35. package/dist/internal/loop/index.d.ts.map +1 -1
  36. package/dist/internal/loop/index.js +1 -0
  37. package/dist/internal/loop/index.js.map +1 -1
  38. package/dist/internal/loop/llm.d.ts +6 -0
  39. package/dist/internal/loop/llm.d.ts.map +1 -1
  40. package/dist/internal/loop/llm.js +22 -49
  41. package/dist/internal/loop/llm.js.map +1 -1
  42. package/dist/internal/loop/process-worker.d.ts +3 -0
  43. package/dist/internal/loop/process-worker.d.ts.map +1 -0
  44. package/dist/internal/loop/process-worker.js +32 -0
  45. package/dist/internal/loop/process-worker.js.map +1 -0
  46. package/dist/internal/loop/process.d.ts +61 -0
  47. package/dist/internal/loop/process.d.ts.map +1 -0
  48. package/dist/internal/loop/process.js +268 -0
  49. package/dist/internal/loop/process.js.map +1 -0
  50. package/dist/internal/mcp/index.d.ts +1 -1
  51. package/dist/internal/mcp/index.d.ts.map +1 -1
  52. package/dist/internal/mcp/index.js +1 -1
  53. package/dist/internal/mcp/index.js.map +1 -1
  54. package/dist/internal/mcp/server.d.ts +36 -36
  55. package/dist/internal/mcp/server.d.ts.map +1 -1
  56. package/dist/internal/mcp/server.js +89 -141
  57. package/dist/internal/mcp/server.js.map +1 -1
  58. package/dist/internal/mcp/tools.d.ts +4 -1
  59. package/dist/internal/mcp/tools.d.ts.map +1 -1
  60. package/dist/internal/mcp/tools.js +1 -1
  61. package/dist/internal/mcp/tools.js.map +1 -1
  62. package/dist/internal/view/scope.d.ts +19 -4
  63. package/dist/internal/view/scope.d.ts.map +1 -1
  64. package/dist/internal/view/scope.js +115 -31
  65. package/dist/internal/view/scope.js.map +1 -1
  66. package/dist/src/cli.d.ts +6 -2
  67. package/dist/src/cli.d.ts.map +1 -1
  68. package/dist/src/cli.js +12 -5
  69. package/dist/src/cli.js.map +1 -1
  70. package/dist/src/dispatch.d.ts.map +1 -1
  71. package/dist/src/dispatch.js +2 -2
  72. package/dist/src/dispatch.js.map +1 -1
  73. package/dist/src/doctor.d.ts.map +1 -1
  74. package/dist/src/doctor.js +19 -7
  75. package/dist/src/doctor.js.map +1 -1
  76. package/package.json +22 -21
  77. package/src/cli.ts +18 -5
  78. package/src/dispatch.ts +4 -2
  79. package/src/doctor.ts +18 -7
@@ -29,11 +29,11 @@
29
29
  * `cave ingest` and `cave eval` use — into a `Complete`, so no LLM SDK
30
30
  * ever becomes a dependency of this package.
31
31
  */
32
- import { spawn } from 'node:child_process';
33
32
  import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
34
33
  import { tmpdir } from 'node:os';
35
34
  import { join } from 'node:path';
36
35
  import { emitClaim } from '@cavelang/canonical';
36
+ import { runProcess, shellCommand } from "./process.js";
37
37
  /** The reply that ends the reconstruction. */
38
38
  export const stopToken = 'STOP';
39
39
  const defaultMaxCues = 16;
@@ -172,60 +172,33 @@ export const llmPolicy = (complete, options = {}) => {
172
172
  */
173
173
  export const shellComplete = (template, options = {}) => {
174
174
  const timeoutSeconds = options.timeoutSeconds ?? 120;
175
- return prompt => new Promise((resolvePromise, rejectPromise) => {
175
+ return async (prompt) => {
176
176
  let dir;
177
- let command = template;
177
+ const substitutions = {};
178
178
  if (template.includes('{prompt-file}')) {
179
179
  dir = mkdtempSync(join(tmpdir(), 'cave-loop-'));
180
180
  const file = join(dir, 'prompt.md');
181
181
  writeFileSync(file, prompt);
182
- // Quoted like ingest's substitutions — one argument, never re-parsed.
183
- command = template.replaceAll('{prompt-file}', `'${file.replaceAll("'", `'\\''`)}'`);
182
+ substitutions['prompt-file'] = file;
184
183
  }
185
- let settled = false;
186
- const settle = (finish) => {
187
- if (!settled) {
188
- settled = true;
189
- if (dir !== undefined) {
190
- rmSync(dir, { recursive: true, force: true });
191
- }
192
- // Grandchildren of a killed shell can inherit the stdio pipes;
193
- // dropping our end releases the event loop from waiting on them.
194
- child.stdout.destroy();
195
- child.stdin.destroy();
196
- finish();
184
+ try {
185
+ const result = await runProcess(shellCommand(template, substitutions), {
186
+ input: prompt,
187
+ timeoutMs: timeoutSeconds * 1000,
188
+ ...options.cwd === undefined ? {} : { cwd: options.cwd },
189
+ ...options.signal === undefined ? {} : { signal: options.signal },
190
+ ...options.maxStdoutBytes === undefined ? {} : { maxStdoutBytes: options.maxStdoutBytes },
191
+ ...options.maxStderrBytes === undefined ? {} : { maxStderrBytes: options.maxStderrBytes }
192
+ });
193
+ if (result.code !== 0) {
194
+ throw new Error(`agent exited with ${result.code ?? `signal ${result.signal}`}`);
197
195
  }
198
- };
199
- const child = spawn(command, {
200
- shell: true,
201
- timeout: timeoutSeconds * 1000,
202
- stdio: ['pipe', 'pipe', 'inherit'],
203
- ...options.cwd === undefined ? {} : { cwd: options.cwd }
204
- });
205
- let stdout = '';
206
- child.stdout.on('data', chunk => {
207
- stdout += String(chunk);
208
- });
209
- child.on('error', error => settle(() => rejectPromise(new Error(`agent failed: ${error.message}`))));
210
- // A killed shell can leave grandchildren holding the stdio pipes open,
211
- // so the signal path settles on `exit` — waiting for `close` would wait
212
- // for processes the timeout was meant to cut loose.
213
- child.on('exit', (_code, signal) => {
214
- if (signal !== null) {
215
- settle(() => rejectPromise(new Error(`agent killed by ${signal} after ${timeoutSeconds}s`)));
216
- }
217
- });
218
- child.on('close', code => settle(() => {
219
- if (code === 0) {
220
- resolvePromise(stdout);
221
- }
222
- else {
223
- rejectPromise(new Error(`agent exited with ${code}`));
224
- }
225
- }));
226
- child.stdin.on('error', () => { });
227
- child.stdin.write(prompt);
228
- child.stdin.end();
229
- });
196
+ return result.stdout;
197
+ }
198
+ finally {
199
+ if (dir !== undefined)
200
+ rmSync(dir, { recursive: true, force: true });
201
+ }
202
+ };
230
203
  };
231
204
  //# sourceMappingURL=llm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Internal synchronous-bridge worker for process.ts. */
2
+ export {};
3
+ //# sourceMappingURL=process-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-worker.d.ts","sourceRoot":"","sources":["../../src/process-worker.ts"],"names":[],"mappings":"AAAA,yDAAyD"}
@@ -0,0 +1,32 @@
1
+ /** Internal synchronous-bridge worker for process.ts. */
2
+ import { readFileSync } from 'node:fs';
3
+ import { ProcessFailure, runProcess } from "./process.js";
4
+ const request = JSON.parse(readFileSync(0, 'utf8'));
5
+ const controller = new AbortController();
6
+ const abort = () => controller.abort();
7
+ process.once('SIGINT', abort);
8
+ process.once('SIGTERM', abort);
9
+ try {
10
+ const result = await runProcess(request.command, { ...request.options, signal: controller.signal });
11
+ process.stdout.write(JSON.stringify({ ok: true, result }));
12
+ }
13
+ catch (error) {
14
+ if (error instanceof ProcessFailure) {
15
+ process.stdout.write(JSON.stringify({ ok: false, failure: error.toJSON() }));
16
+ }
17
+ else {
18
+ process.stdout.write(JSON.stringify({
19
+ ok: false,
20
+ failure: {
21
+ kind: 'spawn',
22
+ message: 'process failed to start',
23
+ result: { code: null, signal: null, stdout: '', stderr: '' }
24
+ }
25
+ }));
26
+ }
27
+ }
28
+ finally {
29
+ process.removeListener('SIGINT', abort);
30
+ process.removeListener('SIGTERM', abort);
31
+ }
32
+ //# sourceMappingURL=process-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-worker.js","sourceRoot":"","sources":["../../src/process-worker.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EACL,cAAc,EACd,UAAU,EAGX,MAAM,cAAc,CAAA;AAOrB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAY,CAAA;AAC9D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;AACxC,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;AAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAC9B,IAAI,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;IACnG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AAC5D,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IAC9E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC,EAAE,EAAE,KAAK;YACT,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;aAC7D;SACF,CAAC,CAAC,CAAA;IACL,CAAC;AACH,CAAC;QAAS,CAAC;IACT,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACvC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,61 @@
1
+ /** Portable, bounded external-process execution for CAVE integrations. */
2
+ export type ProcessCommand = {
3
+ readonly executable: string;
4
+ readonly args: readonly string[];
5
+ };
6
+ export type ShellSyntax = 'posix' | 'powershell';
7
+ export type ProcessResult = {
8
+ readonly code: number | null;
9
+ readonly signal: NodeJS.Signals | null;
10
+ readonly stdout: string;
11
+ readonly stderr: string;
12
+ };
13
+ export type ProcessFailureKind = 'spawn' | 'timeout' | 'aborted' | 'stdout-limit' | 'stderr-limit';
14
+ export type ProcessFailureRecord = {
15
+ readonly kind: ProcessFailureKind;
16
+ readonly message: string;
17
+ readonly result: ProcessResult;
18
+ readonly limit?: number;
19
+ readonly errorCode?: string;
20
+ };
21
+ /** Typed, command-redacted failure for resource and lifecycle errors. */
22
+ export declare class ProcessFailure extends Error {
23
+ readonly name = "ProcessFailure";
24
+ readonly kind: ProcessFailureKind;
25
+ readonly result: ProcessResult;
26
+ readonly limit?: number;
27
+ readonly errorCode?: string;
28
+ constructor(record: ProcessFailureRecord);
29
+ toJSON(): ProcessFailureRecord;
30
+ }
31
+ export type ProcessOptions = {
32
+ readonly cwd?: string;
33
+ readonly input?: string;
34
+ readonly env?: NodeJS.ProcessEnv;
35
+ readonly timeoutMs?: number;
36
+ readonly signal?: AbortSignal;
37
+ readonly maxStdoutBytes?: number;
38
+ readonly maxStderrBytes?: number;
39
+ };
40
+ export type SyncProcessOptions = Omit<ProcessOptions, 'signal'>;
41
+ export declare const defaultMaxStdoutBytes: number;
42
+ export declare const defaultMaxStderrBytes: number;
43
+ export declare const directCommand: (executable: string, args?: readonly string[]) => ProcessCommand;
44
+ export declare const shellSyntaxFor: (platform?: NodeJS.Platform) => ShellSyntax;
45
+ /** Quote one value as one argument for the selected intentional shell. */
46
+ export declare const quoteShellArgument: (value: string, syntax?: ShellSyntax) => string;
47
+ /** Substitute known placeholders once; unknown placeholders remain literal. */
48
+ export declare const substituteShell: (template: string, substitutions: Readonly<Record<string, string>>, syntax?: ShellSyntax) => string;
49
+ /**
50
+ * Make an intentional shell command explicit. POSIX uses `/bin/sh`; Windows
51
+ * uses PowerShell 7. The shell itself is still spawned with `shell:false`.
52
+ */
53
+ export declare const shellCommand: (template: string, substitutions?: Readonly<Record<string, string>>, platform?: NodeJS.Platform) => ProcessCommand;
54
+ /** Run an executable plus argument array with bounded output and tree cleanup. */
55
+ export declare const runProcess: (command: ProcessCommand, options?: ProcessOptions) => Promise<ProcessResult>;
56
+ /**
57
+ * Synchronous bridge for compatibility-sensitive APIs. A short-lived Node
58
+ * worker owns the asynchronous tree cleanup, then returns one bounded result.
59
+ */
60
+ export declare const runProcessSync: (command: ProcessCommand, options?: SyncProcessOptions) => ProcessResult;
61
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,268 @@
1
+ /** Portable, bounded external-process execution for CAVE integrations. */
2
+ import { spawn, spawnSync } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ /** Typed, command-redacted failure for resource and lifecycle errors. */
5
+ export class ProcessFailure extends Error {
6
+ name = 'ProcessFailure';
7
+ kind;
8
+ result;
9
+ limit;
10
+ errorCode;
11
+ constructor(record) {
12
+ super(record.message);
13
+ this.kind = record.kind;
14
+ this.result = record.result;
15
+ this.limit = record.limit;
16
+ this.errorCode = record.errorCode;
17
+ }
18
+ toJSON() {
19
+ return {
20
+ kind: this.kind,
21
+ message: this.message,
22
+ result: this.result,
23
+ ...this.limit === undefined ? {} : { limit: this.limit },
24
+ ...this.errorCode === undefined ? {} : { errorCode: this.errorCode }
25
+ };
26
+ }
27
+ }
28
+ export const defaultMaxStdoutBytes = 8 * 1024 * 1024;
29
+ export const defaultMaxStderrBytes = 1024 * 1024;
30
+ export const directCommand = (executable, args = []) => ({ executable, args });
31
+ export const shellSyntaxFor = (platform = process.platform) => platform === 'win32' ? 'powershell' : 'posix';
32
+ /** Quote one value as one argument for the selected intentional shell. */
33
+ export const quoteShellArgument = (value, syntax = shellSyntaxFor()) => syntax === 'powershell' ? `'${value.replaceAll("'", "''")}'` : `'${value.replaceAll("'", `'\\''`)}'`;
34
+ /** Substitute known placeholders once; unknown placeholders remain literal. */
35
+ export const substituteShell = (template, substitutions, syntax = shellSyntaxFor()) => template.replace(/\{([A-Za-z][A-Za-z0-9_-]*)\}/g, (whole, name) => Object.hasOwn(substitutions, name) ? quoteShellArgument(substitutions[name], syntax) : whole);
36
+ const powershellScript = (command) => [
37
+ '$global:LASTEXITCODE = $null',
38
+ command,
39
+ '$caveSucceeded = $?',
40
+ '$caveExitCode = $global:LASTEXITCODE',
41
+ 'if ($caveSucceeded) { exit 0 }',
42
+ 'if ($null -ne $caveExitCode) { exit $caveExitCode }',
43
+ 'exit 1'
44
+ ].join('\n');
45
+ /**
46
+ * Make an intentional shell command explicit. POSIX uses `/bin/sh`; Windows
47
+ * uses PowerShell 7. The shell itself is still spawned with `shell:false`.
48
+ */
49
+ export const shellCommand = (template, substitutions = {}, platform = process.platform) => {
50
+ const syntax = shellSyntaxFor(platform);
51
+ const command = substituteShell(template, substitutions, syntax);
52
+ // EncodedCommand transports the exact UTF-16LE script without a native argv
53
+ // reparse. PowerShell 7 is required for standard native argument passing;
54
+ // Windows PowerShell 5.1 corrupts embedded quotes passed to executables. The
55
+ // wrapper preserves the last native command's exact non-zero exit code.
56
+ return platform === 'win32' ?
57
+ directCommand('pwsh.exe', [
58
+ '-NoLogo', '-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass',
59
+ '-EncodedCommand', Buffer.from(powershellScript(command), 'utf16le').toString('base64')
60
+ ]) :
61
+ directCommand('/bin/sh', ['-c', command]);
62
+ };
63
+ const emptyResult = () => ({ code: null, signal: null, stdout: '', stderr: '' });
64
+ const positiveLimit = (value, fallback, name) => {
65
+ const result = value ?? fallback;
66
+ if (!Number.isSafeInteger(result) || result < 0) {
67
+ throw new TypeError(`${name} must be a non-negative safe integer`);
68
+ }
69
+ return result;
70
+ };
71
+ const killTree = (child) => {
72
+ const pid = child.pid;
73
+ if (pid === undefined)
74
+ return Promise.resolve();
75
+ if (process.platform !== 'win32') {
76
+ try {
77
+ process.kill(-pid, 'SIGKILL');
78
+ }
79
+ catch {
80
+ try {
81
+ child.kill('SIGKILL');
82
+ }
83
+ catch { /* already gone */ }
84
+ }
85
+ return Promise.resolve();
86
+ }
87
+ return new Promise(resolve => {
88
+ const killer = spawn('taskkill.exe', ['/pid', String(pid), '/t', '/f'], {
89
+ shell: false,
90
+ stdio: 'ignore',
91
+ windowsHide: true
92
+ });
93
+ killer.once('error', () => {
94
+ try {
95
+ child.kill('SIGKILL');
96
+ }
97
+ catch { /* already gone */ }
98
+ resolve();
99
+ });
100
+ killer.once('close', () => resolve());
101
+ });
102
+ };
103
+ const failureMessage = (kind, timeoutMs, limit) => {
104
+ switch (kind) {
105
+ case 'spawn': return 'process failed to start';
106
+ case 'timeout': return `process timed out after ${timeoutMs}ms`;
107
+ case 'aborted': return 'process was cancelled';
108
+ case 'stdout-limit': return `process stdout exceeded ${limit} bytes`;
109
+ case 'stderr-limit': return `process stderr exceeded ${limit} bytes`;
110
+ }
111
+ };
112
+ /** Run an executable plus argument array with bounded output and tree cleanup. */
113
+ export const runProcess = (command, options = {}) => {
114
+ const stdoutLimit = positiveLimit(options.maxStdoutBytes, defaultMaxStdoutBytes, 'maxStdoutBytes');
115
+ const stderrLimit = positiveLimit(options.maxStderrBytes, defaultMaxStderrBytes, 'maxStderrBytes');
116
+ const timeoutMs = positiveLimit(options.timeoutMs, 0, 'timeoutMs');
117
+ if (options.signal?.aborted === true) {
118
+ return Promise.reject(new ProcessFailure({
119
+ kind: 'aborted', message: failureMessage('aborted', timeoutMs), result: emptyResult()
120
+ }));
121
+ }
122
+ return new Promise((resolve, reject) => {
123
+ const stdout = [];
124
+ const stderr = [];
125
+ let stdoutBytes = 0;
126
+ let stderrBytes = 0;
127
+ let code = null;
128
+ let exitSignal = null;
129
+ let settled = false;
130
+ let terminating = false;
131
+ let timer;
132
+ let spawnErrorCode;
133
+ const child = spawn(command.executable, [...command.args], {
134
+ shell: false,
135
+ detached: process.platform !== 'win32',
136
+ windowsHide: true,
137
+ stdio: ['pipe', 'pipe', 'pipe'],
138
+ ...options.cwd === undefined ? {} : { cwd: options.cwd },
139
+ ...options.env === undefined ? {} : { env: options.env }
140
+ });
141
+ const result = () => ({
142
+ code,
143
+ signal: exitSignal,
144
+ stdout: Buffer.concat(stdout).toString('utf8'),
145
+ stderr: Buffer.concat(stderr).toString('utf8')
146
+ });
147
+ const cleanup = () => {
148
+ if (timer !== undefined)
149
+ clearTimeout(timer);
150
+ options.signal?.removeEventListener('abort', abort);
151
+ };
152
+ const finish = (failure) => {
153
+ if (settled)
154
+ return;
155
+ settled = true;
156
+ cleanup();
157
+ child.stdin?.destroy();
158
+ child.stdout?.destroy();
159
+ child.stderr?.destroy();
160
+ if (failure === undefined)
161
+ resolve(result());
162
+ else
163
+ reject(failure);
164
+ };
165
+ const terminate = (kind, limit) => {
166
+ if (settled || terminating)
167
+ return;
168
+ terminating = true;
169
+ void killTree(child).finally(() => finish(new ProcessFailure({
170
+ kind,
171
+ message: failureMessage(kind, timeoutMs, limit),
172
+ result: result(),
173
+ ...limit === undefined ? {} : { limit }
174
+ })));
175
+ };
176
+ const abort = () => terminate('aborted');
177
+ const collect = (stream, chunk) => {
178
+ if (terminating || settled)
179
+ return;
180
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
181
+ const limit = stream === 'stdout' ? stdoutLimit : stderrLimit;
182
+ const used = stream === 'stdout' ? stdoutBytes : stderrBytes;
183
+ const remaining = Math.max(0, limit - used);
184
+ if (remaining > 0)
185
+ (stream === 'stdout' ? stdout : stderr).push(bytes.subarray(0, remaining));
186
+ if (stream === 'stdout')
187
+ stdoutBytes += Math.min(bytes.length, remaining);
188
+ else
189
+ stderrBytes += Math.min(bytes.length, remaining);
190
+ if (bytes.length > remaining)
191
+ terminate(stream === 'stdout' ? 'stdout-limit' : 'stderr-limit', limit);
192
+ };
193
+ child.stdout?.on('data', chunk => collect('stdout', chunk));
194
+ child.stderr?.on('data', chunk => collect('stderr', chunk));
195
+ child.on('error', (error) => {
196
+ if (terminating)
197
+ return;
198
+ spawnErrorCode = error.code;
199
+ finish(new ProcessFailure({
200
+ kind: 'spawn',
201
+ message: failureMessage('spawn', timeoutMs),
202
+ result: result(),
203
+ ...spawnErrorCode === undefined ? {} : { errorCode: spawnErrorCode }
204
+ }));
205
+ });
206
+ child.on('exit', (observedCode, observedSignal) => {
207
+ code = observedCode;
208
+ exitSignal = observedSignal;
209
+ });
210
+ child.on('close', (observedCode, observedSignal) => {
211
+ code = observedCode;
212
+ exitSignal = observedSignal;
213
+ if (!terminating)
214
+ finish();
215
+ });
216
+ child.stdin?.on('error', () => { });
217
+ if (options.input !== undefined)
218
+ child.stdin?.end(options.input);
219
+ else
220
+ child.stdin?.end();
221
+ if (timeoutMs > 0)
222
+ timer = setTimeout(() => terminate('timeout'), timeoutMs);
223
+ options.signal?.addEventListener('abort', abort, { once: true });
224
+ // Close the check/listener race if cancellation landed during spawn setup.
225
+ if (options.signal?.aborted === true)
226
+ abort();
227
+ });
228
+ };
229
+ /**
230
+ * Synchronous bridge for compatibility-sensitive APIs. A short-lived Node
231
+ * worker owns the asynchronous tree cleanup, then returns one bounded result.
232
+ */
233
+ export const runProcessSync = (command, options = {}) => {
234
+ const stdoutLimit = positiveLimit(options.maxStdoutBytes, defaultMaxStdoutBytes, 'maxStdoutBytes');
235
+ const stderrLimit = positiveLimit(options.maxStderrBytes, defaultMaxStderrBytes, 'maxStderrBytes');
236
+ const timeoutMs = positiveLimit(options.timeoutMs, 0, 'timeoutMs');
237
+ const extension = import.meta.url.endsWith('.ts') ? 'ts' : 'js';
238
+ const worker = fileURLToPath(new URL(`./process-worker.${extension}`, import.meta.url));
239
+ const result = spawnSync(process.execPath, ['--disable-warning=ExperimentalWarning', worker], {
240
+ shell: false,
241
+ windowsHide: true,
242
+ encoding: 'utf8',
243
+ input: JSON.stringify({ command, options: { ...options, maxStdoutBytes: stdoutLimit, maxStderrBytes: stderrLimit } }),
244
+ // JSON can expand a captured control byte to a six-byte `\\u00xx` escape.
245
+ maxBuffer: Math.max(1024 * 1024, (stdoutLimit + stderrLimit) * 7 + 1024 * 1024),
246
+ timeout: timeoutMs > 0 ? timeoutMs + 5_000 : undefined
247
+ });
248
+ if (result.status !== 0 || result.error !== undefined) {
249
+ const errorCode = result.error?.code;
250
+ throw new ProcessFailure({
251
+ kind: errorCode === 'ETIMEDOUT' ? 'timeout' : 'spawn',
252
+ message: failureMessage(errorCode === 'ETIMEDOUT' ? 'timeout' : 'spawn', timeoutMs),
253
+ result: emptyResult(),
254
+ ...errorCode === undefined ? {} : { errorCode }
255
+ });
256
+ }
257
+ let response;
258
+ try {
259
+ response = JSON.parse(result.stdout);
260
+ }
261
+ catch {
262
+ throw new ProcessFailure({ kind: 'spawn', message: failureMessage('spawn', timeoutMs), result: emptyResult() });
263
+ }
264
+ if (!response.ok)
265
+ throw new ProcessFailure(response.failure);
266
+ return response.result;
267
+ };
268
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/process.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@
17
17
  * `--tools <list>` narrow the served surface — the minimum viable agent
18
18
  * permission boundary.
19
19
  */
20
- export { agentSource, createServer, serve, instructions, instructionsFor, protocolVersion, serverInfo, specCard } from './server.ts';
20
+ export { agentSource, createServer, serve, instructions, instructionsFor, protocolVersion, protocolVersions, serverInfo, specCard } from './server.ts';
21
21
  export type { ServerOptions } from './server.ts';
22
22
  export { runMcp } from './main.ts';
23
23
  export { actionTools, actToolName, actToolPrefix, allowsActions, permissions, scopedActionTools, scopedTools, tools } from './tools.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACpI,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAC/D,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EACxD,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
@@ -17,7 +17,7 @@
17
17
  * `--tools <list>` narrow the served surface — the minimum viable agent
18
18
  * permission boundary.
19
19
  */
20
- export { agentSource, createServer, serve, instructions, instructionsFor, protocolVersion, serverInfo, specCard } from "./server.js";
20
+ export { agentSource, createServer, serve, instructions, instructionsFor, protocolVersion, protocolVersions, serverInfo, specCard } from "./server.js";
21
21
  export { runMcp } from "./main.js";
22
22
  export { actionTools, actToolName, actToolPrefix, allowsActions, permissions, scopedActionTools, scopedTools, tools } from "./tools.js";
23
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEpI,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAC/D,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EACxD,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA"}