harness-dispatch 0.4.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.
- package/LICENSE +21 -0
- package/README.md +582 -0
- package/config.default.yaml +397 -0
- package/data/coding_benchmarks.json +431 -0
- package/dist/auth.d.ts +9 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +73 -0
- package/dist/auth.js.map +1 -0
- package/dist/billing.d.ts +7 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +201 -0
- package/dist/billing.js.map +1 -0
- package/dist/bin.d.ts +6 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +488 -0
- package/dist/bin.js.map +1 -0
- package/dist/breaker-store.d.ts +31 -0
- package/dist/breaker-store.d.ts.map +1 -0
- package/dist/breaker-store.js +103 -0
- package/dist/breaker-store.js.map +1 -0
- package/dist/circuit-breaker.d.ts +47 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +102 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/config.d.ts +48 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +1248 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/live.d.ts +49 -0
- package/dist/dashboard/live.d.ts.map +1 -0
- package/dist/dashboard/live.js +149 -0
- package/dist/dashboard/live.js.map +1 -0
- package/dist/dispatch-log.d.ts +46 -0
- package/dist/dispatch-log.d.ts.map +1 -0
- package/dist/dispatch-log.js +89 -0
- package/dist/dispatch-log.js.map +1 -0
- package/dist/dispatchers/base.d.ts +55 -0
- package/dist/dispatchers/base.d.ts.map +1 -0
- package/dist/dispatchers/base.js +80 -0
- package/dist/dispatchers/base.js.map +1 -0
- package/dist/dispatchers/generic-cli.d.ts +30 -0
- package/dist/dispatchers/generic-cli.d.ts.map +1 -0
- package/dist/dispatchers/generic-cli.js +471 -0
- package/dist/dispatchers/generic-cli.js.map +1 -0
- package/dist/dispatchers/openai-compatible.d.ts +57 -0
- package/dist/dispatchers/openai-compatible.d.ts.map +1 -0
- package/dist/dispatchers/openai-compatible.js +662 -0
- package/dist/dispatchers/openai-compatible.js.map +1 -0
- package/dist/dispatchers/shared/kill-tree.d.ts +21 -0
- package/dist/dispatchers/shared/kill-tree.d.ts.map +1 -0
- package/dist/dispatchers/shared/kill-tree.js +35 -0
- package/dist/dispatchers/shared/kill-tree.js.map +1 -0
- package/dist/dispatchers/shared/rate-limit-headers.d.ts +22 -0
- package/dist/dispatchers/shared/rate-limit-headers.d.ts.map +1 -0
- package/dist/dispatchers/shared/rate-limit-headers.js +124 -0
- package/dist/dispatchers/shared/rate-limit-headers.js.map +1 -0
- package/dist/dispatchers/shared/stream-subprocess.d.ts +53 -0
- package/dist/dispatchers/shared/stream-subprocess.d.ts.map +1 -0
- package/dist/dispatchers/shared/stream-subprocess.js +274 -0
- package/dist/dispatchers/shared/stream-subprocess.js.map +1 -0
- package/dist/dispatchers/shared/subprocess.d.ts +25 -0
- package/dist/dispatchers/shared/subprocess.d.ts.map +1 -0
- package/dist/dispatchers/shared/subprocess.js +110 -0
- package/dist/dispatchers/shared/subprocess.js.map +1 -0
- package/dist/dispatchers/shared/which-available.d.ts +2 -0
- package/dist/dispatchers/shared/which-available.d.ts.map +1 -0
- package/dist/dispatchers/shared/which-available.js +8 -0
- package/dist/dispatchers/shared/which-available.js.map +1 -0
- package/dist/dispatchers/shared/windows-cmd.d.ts +38 -0
- package/dist/dispatchers/shared/windows-cmd.d.ts.map +1 -0
- package/dist/dispatchers/shared/windows-cmd.js +91 -0
- package/dist/dispatchers/shared/windows-cmd.js.map +1 -0
- package/dist/http/server.d.ts +15 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +495 -0
- package/dist/http/server.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/job-runner.d.ts +19 -0
- package/dist/job-runner.d.ts.map +1 -0
- package/dist/job-runner.js +42 -0
- package/dist/job-runner.js.map +1 -0
- package/dist/jobs.d.ts +116 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +542 -0
- package/dist/jobs.js.map +1 -0
- package/dist/leaderboard.d.ts +62 -0
- package/dist/leaderboard.d.ts.map +1 -0
- package/dist/leaderboard.js +287 -0
- package/dist/leaderboard.js.map +1 -0
- package/dist/mcp/config-hot-reload.d.ts +64 -0
- package/dist/mcp/config-hot-reload.d.ts.map +1 -0
- package/dist/mcp/config-hot-reload.js +144 -0
- package/dist/mcp/config-hot-reload.js.map +1 -0
- package/dist/mcp/dispatcher-factory.d.ts +20 -0
- package/dist/mcp/dispatcher-factory.d.ts.map +1 -0
- package/dist/mcp/dispatcher-factory.js +30 -0
- package/dist/mcp/dispatcher-factory.js.map +1 -0
- package/dist/mcp/resources.d.ts +8 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +45 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +36 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +80 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +171 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +658 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/observability/index.d.ts +52 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +111 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/spans.d.ts +47 -0
- package/dist/observability/spans.d.ts.map +1 -0
- package/dist/observability/spans.js +72 -0
- package/dist/observability/spans.js.map +1 -0
- package/dist/quota.d.ts +91 -0
- package/dist/quota.d.ts.map +1 -0
- package/dist/quota.js +331 -0
- package/dist/quota.js.map +1 -0
- package/dist/route-policy.d.ts +24 -0
- package/dist/route-policy.d.ts.map +1 -0
- package/dist/route-policy.js +92 -0
- package/dist/route-policy.js.map +1 -0
- package/dist/router.d.ts +162 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +878 -0
- package/dist/router.js.map +1 -0
- package/dist/safety.d.ts +7 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +33 -0
- package/dist/safety.js.map +1 -0
- package/dist/status.d.ts +100 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +228 -0
- package/dist/status.js.map +1 -0
- package/dist/types.d.ts +402 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +13 -0
- package/dist/version.js.map +1 -0
- package/dist/working-dir.d.ts +15 -0
- package/dist/working-dir.d.ts.map +1 -0
- package/dist/working-dir.js +22 -0
- package/dist/working-dir.js.map +1 -0
- package/dist/workspaces.d.ts +19 -0
- package/dist/workspaces.d.ts.map +1 -0
- package/dist/workspaces.js +352 -0
- package/dist/workspaces.js.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../src/dispatchers/openai-compatible.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminate a child process AND its descendants.
|
|
3
|
+
*
|
|
4
|
+
* On Windows, CLI binaries invoked through the `cmd /c <path>` fallback
|
|
5
|
+
* (see windows-cmd.ts) make the real target process a GRANDCHILD of this
|
|
6
|
+
* Node process — cmd.exe is the direct child, and it spawns the actual CLI
|
|
7
|
+
* itself. `child.kill()` only signals the direct child; killing cmd.exe
|
|
8
|
+
* does not terminate the process it started, since Windows has no
|
|
9
|
+
* exec-replace and cmd.exe just blocks waiting on its own child. On
|
|
10
|
+
* timeout, output-cap overflow, or early stream cancellation, that left the
|
|
11
|
+
* real CLI process running indefinitely — holding files/ports, still
|
|
12
|
+
* consuming API quota, and possibly still writing to the workspace after
|
|
13
|
+
* the router had already reported failure.
|
|
14
|
+
*
|
|
15
|
+
* `taskkill /PID <pid> /T /F` kills the whole process tree rooted at the
|
|
16
|
+
* given PID. POSIX doesn't need this — there's no shell-indirection layer
|
|
17
|
+
* in this codebase on that platform — so `child.kill()` there is unchanged.
|
|
18
|
+
*/
|
|
19
|
+
import { type ChildProcess } from "node:child_process";
|
|
20
|
+
export declare function killTree(child: ChildProcess, signal: NodeJS.Signals): void;
|
|
21
|
+
//# sourceMappingURL=kill-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kill-tree.d.ts","sourceRoot":"","sources":["../../../src/dispatchers/shared/kill-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAa1E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminate a child process AND its descendants.
|
|
3
|
+
*
|
|
4
|
+
* On Windows, CLI binaries invoked through the `cmd /c <path>` fallback
|
|
5
|
+
* (see windows-cmd.ts) make the real target process a GRANDCHILD of this
|
|
6
|
+
* Node process — cmd.exe is the direct child, and it spawns the actual CLI
|
|
7
|
+
* itself. `child.kill()` only signals the direct child; killing cmd.exe
|
|
8
|
+
* does not terminate the process it started, since Windows has no
|
|
9
|
+
* exec-replace and cmd.exe just blocks waiting on its own child. On
|
|
10
|
+
* timeout, output-cap overflow, or early stream cancellation, that left the
|
|
11
|
+
* real CLI process running indefinitely — holding files/ports, still
|
|
12
|
+
* consuming API quota, and possibly still writing to the workspace after
|
|
13
|
+
* the router had already reported failure.
|
|
14
|
+
*
|
|
15
|
+
* `taskkill /PID <pid> /T /F` kills the whole process tree rooted at the
|
|
16
|
+
* given PID. POSIX doesn't need this — there's no shell-indirection layer
|
|
17
|
+
* in this codebase on that platform — so `child.kill()` there is unchanged.
|
|
18
|
+
*/
|
|
19
|
+
import { execFile } from "node:child_process";
|
|
20
|
+
export function killTree(child, signal) {
|
|
21
|
+
if (process.platform === "win32" && child.pid !== undefined) {
|
|
22
|
+
execFile("taskkill", ["/PID", String(child.pid), "/T", "/F"], () => {
|
|
23
|
+
// Best effort. A non-zero exit here just means the process (or its
|
|
24
|
+
// whole tree) was already gone — nothing further to do either way.
|
|
25
|
+
});
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
child.kill(signal);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// already dead
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=kill-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kill-tree.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/kill-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,QAAQ,EAAqB,MAAM,oBAAoB,CAAC;AAEjE,MAAM,UAAU,QAAQ,CAAC,KAAmB,EAAE,MAAsB;IAClE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC5D,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE;YACjE,mEAAmE;YACnE,mEAAmE;QACrE,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP rate-limit header parsers.
|
|
3
|
+
*
|
|
4
|
+
* Ported from `src/coding_agent/dispatchers/utils.py` (parse_remaining,
|
|
5
|
+
* parse_limit, parse_retry_after). Preserves the same key order and semantics:
|
|
6
|
+
* - matching is case-insensitive (headers are normalized to lowercase)
|
|
7
|
+
* - numeric strings with commas are NOT supported here (matches Python)
|
|
8
|
+
* - Retry-After may be a delta-seconds number or an HTTP-date
|
|
9
|
+
* - reset-* headers may be an epoch timestamp (seconds since 1970)
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseRemaining(headers: Record<string, string>): number | null;
|
|
12
|
+
export declare function parseLimit(headers: Record<string, string>): number | null;
|
|
13
|
+
/**
|
|
14
|
+
* Returns retry-after in seconds (fractional allowed). Sources in priority order:
|
|
15
|
+
* 1. Retry-After or x-ratelimit-retry-after as delta-seconds
|
|
16
|
+
* 2. Retry-After as an HTTP-date (RFC 7231)
|
|
17
|
+
* 3. x-ratelimit-reset{,-requests,-tokens} as an epoch timestamp
|
|
18
|
+
*
|
|
19
|
+
* Returns null if no header is present or all are malformed.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseRetryAfter(headers: Record<string, string>): number | null;
|
|
22
|
+
//# sourceMappingURL=rate-limit-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit-headers.d.ts","sourceRoot":"","sources":["../../../src/dispatchers/shared/rate-limit-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA8DH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAO7E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAOzE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CA6B9E"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP rate-limit header parsers.
|
|
3
|
+
*
|
|
4
|
+
* Ported from `src/coding_agent/dispatchers/utils.py` (parse_remaining,
|
|
5
|
+
* parse_limit, parse_retry_after). Preserves the same key order and semantics:
|
|
6
|
+
* - matching is case-insensitive (headers are normalized to lowercase)
|
|
7
|
+
* - numeric strings with commas are NOT supported here (matches Python)
|
|
8
|
+
* - Retry-After may be a delta-seconds number or an HTTP-date
|
|
9
|
+
* - reset-* headers may be an epoch timestamp (seconds since 1970)
|
|
10
|
+
*/
|
|
11
|
+
const REMAINING_KEYS = [
|
|
12
|
+
"x-ratelimit-remaining-requests",
|
|
13
|
+
"x-ratelimit-remaining",
|
|
14
|
+
"anthropic-ratelimit-requests-remaining",
|
|
15
|
+
"anthropic-ratelimit-tokens-remaining",
|
|
16
|
+
"ratelimit-remaining",
|
|
17
|
+
];
|
|
18
|
+
const LIMIT_KEYS = [
|
|
19
|
+
"x-ratelimit-limit-requests",
|
|
20
|
+
"x-ratelimit-limit",
|
|
21
|
+
"anthropic-ratelimit-requests-limit",
|
|
22
|
+
"anthropic-ratelimit-tokens-limit",
|
|
23
|
+
"ratelimit-limit",
|
|
24
|
+
];
|
|
25
|
+
const RETRY_AFTER_KEYS = [
|
|
26
|
+
"retry-after",
|
|
27
|
+
"x-ratelimit-retry-after",
|
|
28
|
+
];
|
|
29
|
+
const RESET_EPOCH_KEYS = [
|
|
30
|
+
"x-ratelimit-reset",
|
|
31
|
+
"x-ratelimit-reset-requests",
|
|
32
|
+
"x-ratelimit-reset-tokens",
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* Normalize to lowercase keys so lookups are case-insensitive.
|
|
36
|
+
* Later duplicates win (matches typical HTTP proxy behavior).
|
|
37
|
+
*/
|
|
38
|
+
function lower(headers) {
|
|
39
|
+
const out = {};
|
|
40
|
+
for (const [k, v] of Object.entries(headers)) {
|
|
41
|
+
out[k.toLowerCase()] = v;
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
function parseIntStrict(raw) {
|
|
46
|
+
if (raw == null)
|
|
47
|
+
return null;
|
|
48
|
+
const trimmed = raw.trim();
|
|
49
|
+
if (trimmed === "")
|
|
50
|
+
return null;
|
|
51
|
+
// Python's int() rejects decimals; match that.
|
|
52
|
+
if (!/^-?\d+$/.test(trimmed))
|
|
53
|
+
return null;
|
|
54
|
+
const n = Number.parseInt(trimmed, 10);
|
|
55
|
+
return Number.isFinite(n) ? n : null;
|
|
56
|
+
}
|
|
57
|
+
function parseFloatStrict(raw) {
|
|
58
|
+
if (raw == null)
|
|
59
|
+
return null;
|
|
60
|
+
const trimmed = raw.trim();
|
|
61
|
+
if (trimmed === "")
|
|
62
|
+
return null;
|
|
63
|
+
const n = Number.parseFloat(trimmed);
|
|
64
|
+
if (!Number.isFinite(n))
|
|
65
|
+
return null;
|
|
66
|
+
// Reject obvious non-numeric prefixes like "soon"/"5min".
|
|
67
|
+
if (!/^-?\d+(\.\d+)?([eE][-+]?\d+)?$/.test(trimmed))
|
|
68
|
+
return null;
|
|
69
|
+
return n;
|
|
70
|
+
}
|
|
71
|
+
export function parseRemaining(headers) {
|
|
72
|
+
const h = lower(headers);
|
|
73
|
+
for (const key of REMAINING_KEYS) {
|
|
74
|
+
const v = parseIntStrict(h[key]);
|
|
75
|
+
if (v !== null)
|
|
76
|
+
return v;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
export function parseLimit(headers) {
|
|
81
|
+
const h = lower(headers);
|
|
82
|
+
for (const key of LIMIT_KEYS) {
|
|
83
|
+
const v = parseIntStrict(h[key]);
|
|
84
|
+
if (v !== null)
|
|
85
|
+
return v;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Returns retry-after in seconds (fractional allowed). Sources in priority order:
|
|
91
|
+
* 1. Retry-After or x-ratelimit-retry-after as delta-seconds
|
|
92
|
+
* 2. Retry-After as an HTTP-date (RFC 7231)
|
|
93
|
+
* 3. x-ratelimit-reset{,-requests,-tokens} as an epoch timestamp
|
|
94
|
+
*
|
|
95
|
+
* Returns null if no header is present or all are malformed.
|
|
96
|
+
*/
|
|
97
|
+
export function parseRetryAfter(headers) {
|
|
98
|
+
const h = lower(headers);
|
|
99
|
+
// 1. delta-seconds
|
|
100
|
+
for (const key of RETRY_AFTER_KEYS) {
|
|
101
|
+
const v = parseFloatStrict(h[key]);
|
|
102
|
+
if (v !== null)
|
|
103
|
+
return v;
|
|
104
|
+
}
|
|
105
|
+
// 2. HTTP-date (only Retry-After permits this per RFC 7231 §7.1.3)
|
|
106
|
+
const retryAfter = h["retry-after"];
|
|
107
|
+
if (retryAfter && retryAfter.trim() !== "") {
|
|
108
|
+
const ts = Date.parse(retryAfter);
|
|
109
|
+
if (Number.isFinite(ts)) {
|
|
110
|
+
const delay = (ts - Date.now()) / 1000;
|
|
111
|
+
return Math.max(0, delay);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// 3. epoch reset
|
|
115
|
+
for (const key of RESET_EPOCH_KEYS) {
|
|
116
|
+
const epoch = parseFloatStrict(h[key]);
|
|
117
|
+
if (epoch !== null) {
|
|
118
|
+
const delay = epoch - Date.now() / 1000;
|
|
119
|
+
return Math.max(0, delay);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=rate-limit-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit-headers.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/rate-limit-headers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface SubprocessChunk {
|
|
2
|
+
stream: "stdout" | "stderr";
|
|
3
|
+
chunk: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SubprocessEnd {
|
|
6
|
+
kind: "end";
|
|
7
|
+
exitCode: number;
|
|
8
|
+
timedOut: boolean;
|
|
9
|
+
durationMs: number;
|
|
10
|
+
totalStdoutBytes: number;
|
|
11
|
+
totalStderrBytes: number;
|
|
12
|
+
truncated: boolean;
|
|
13
|
+
}
|
|
14
|
+
export type SubprocessStreamEvent = SubprocessChunk | SubprocessEnd;
|
|
15
|
+
export interface StreamSubprocessOpts {
|
|
16
|
+
cwd?: string;
|
|
17
|
+
env?: Record<string, string>;
|
|
18
|
+
stdin?: string;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
maxOutputBytes?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Maximum number of chunks to buffer internally before the child is
|
|
23
|
+
* considered runaway and killed. Defaults to 1000.
|
|
24
|
+
*/
|
|
25
|
+
maxBufferedChunks?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Graceful-kill window before SIGKILL is sent. Defaults to 2s — matches
|
|
28
|
+
* `runSubprocess`.
|
|
29
|
+
*/
|
|
30
|
+
killGraceMs?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Stream a subprocess's stdout/stderr as an AsyncIterable.
|
|
34
|
+
*
|
|
35
|
+
* Completion is signalled by yielding a terminal `kind: "end"` event, after
|
|
36
|
+
* which the iterator closes.
|
|
37
|
+
*/
|
|
38
|
+
export declare function streamSubprocess(command: string, args: readonly string[], opts?: StreamSubprocessOpts): AsyncIterable<SubprocessStreamEvent>;
|
|
39
|
+
/**
|
|
40
|
+
* Convenience: drain a `streamSubprocess` iterable into a `SubprocessResult`
|
|
41
|
+
* (same shape as `runSubprocess`) by buffering every chunk. Used by the
|
|
42
|
+
* dispatchers' legacy `dispatch()` wrappers.
|
|
43
|
+
*/
|
|
44
|
+
export interface DrainedResult {
|
|
45
|
+
stdout: string;
|
|
46
|
+
stderr: string;
|
|
47
|
+
exitCode: number;
|
|
48
|
+
durationMs: number;
|
|
49
|
+
timedOut: boolean;
|
|
50
|
+
truncated: boolean;
|
|
51
|
+
}
|
|
52
|
+
export declare function drainSubprocessStream(iter: AsyncIterable<SubprocessStreamEvent>): Promise<DrainedResult>;
|
|
53
|
+
//# sourceMappingURL=stream-subprocess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-subprocess.d.ts","sourceRoot":"","sources":["../../../src/dispatchers/shared/stream-subprocess.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,aAAa,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAOD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,oBAAyB,GAC9B,aAAa,CAAC,qBAAqB,CAAC,CAkBtC;AAwOD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,aAAa,CAAC,qBAAqB,CAAC,GACzC,OAAO,CAAC,aAAa,CAAC,CA0BxB"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import spawn from "cross-spawn";
|
|
2
|
+
import { killTree } from "./kill-tree.js";
|
|
3
|
+
import { runSubprocess } from "./subprocess.js";
|
|
4
|
+
const DEFAULT_TIMEOUT_MS = 300_000;
|
|
5
|
+
const DEFAULT_MAX_OUTPUT_BYTES = 10 * 1024 * 1024;
|
|
6
|
+
const DEFAULT_MAX_BUFFERED_CHUNKS = 1000;
|
|
7
|
+
const DEFAULT_KILL_GRACE_MS = 2_000;
|
|
8
|
+
/**
|
|
9
|
+
* Stream a subprocess's stdout/stderr as an AsyncIterable.
|
|
10
|
+
*
|
|
11
|
+
* Completion is signalled by yielding a terminal `kind: "end"` event, after
|
|
12
|
+
* which the iterator closes.
|
|
13
|
+
*/
|
|
14
|
+
export function streamSubprocess(command, args, opts = {}) {
|
|
15
|
+
// Test-compatibility: when `runSubprocess` is replaced by a vi.fn() mock
|
|
16
|
+
// (every dispatcher test does this), delegate to the mock and synthesize
|
|
17
|
+
// stream events from the buffered result. This keeps existing tests
|
|
18
|
+
// passing without modification.
|
|
19
|
+
//
|
|
20
|
+
// We detect the mock by looking at `runSubprocess.mock` (the vitest fn shape).
|
|
21
|
+
// In production the function is a regular async function and `.mock` is
|
|
22
|
+
// undefined — we fall through to the real streaming implementation.
|
|
23
|
+
const rs = runSubprocess;
|
|
24
|
+
if (rs._isMockFunction || rs.mock) {
|
|
25
|
+
return adaptBufferedToStream(command, args, opts);
|
|
26
|
+
}
|
|
27
|
+
return realStreamSubprocess(command, args, opts);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* When `runSubprocess` is mocked in tests, call it and synthesize a stream
|
|
31
|
+
* from the buffered result. The ordering is stdout-chunk → stderr-chunk →
|
|
32
|
+
* end, matching what a real subprocess would emit when stdin closes and
|
|
33
|
+
* it flushes both streams before exit.
|
|
34
|
+
*/
|
|
35
|
+
function adaptBufferedToStream(command, args, opts) {
|
|
36
|
+
const deferredOpts = {};
|
|
37
|
+
if (opts.cwd !== undefined)
|
|
38
|
+
deferredOpts.cwd = opts.cwd;
|
|
39
|
+
if (opts.env !== undefined)
|
|
40
|
+
deferredOpts.env = opts.env;
|
|
41
|
+
if (opts.stdin !== undefined)
|
|
42
|
+
deferredOpts.stdin = opts.stdin;
|
|
43
|
+
if (opts.timeoutMs !== undefined)
|
|
44
|
+
deferredOpts.timeoutMs = opts.timeoutMs;
|
|
45
|
+
if (opts.maxOutputBytes !== undefined)
|
|
46
|
+
deferredOpts.maxOutputBytes = opts.maxOutputBytes;
|
|
47
|
+
async function* gen() {
|
|
48
|
+
const res = await runSubprocess(command, args, deferredOpts);
|
|
49
|
+
if (res.stdout) {
|
|
50
|
+
yield { stream: "stdout", chunk: res.stdout };
|
|
51
|
+
}
|
|
52
|
+
if (res.stderr) {
|
|
53
|
+
yield { stream: "stderr", chunk: res.stderr };
|
|
54
|
+
}
|
|
55
|
+
yield {
|
|
56
|
+
kind: "end",
|
|
57
|
+
exitCode: res.exitCode,
|
|
58
|
+
timedOut: res.timedOut,
|
|
59
|
+
durationMs: res.durationMs,
|
|
60
|
+
totalStdoutBytes: Buffer.byteLength(res.stdout, "utf8"),
|
|
61
|
+
totalStderrBytes: Buffer.byteLength(res.stderr, "utf8"),
|
|
62
|
+
truncated: false,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return gen();
|
|
66
|
+
}
|
|
67
|
+
function realStreamSubprocess(command, args, opts) {
|
|
68
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
69
|
+
const maxOutputBytes = opts.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
|
|
70
|
+
const maxBufferedChunks = opts.maxBufferedChunks ?? DEFAULT_MAX_BUFFERED_CHUNKS;
|
|
71
|
+
const killGraceMs = opts.killGraceMs ?? DEFAULT_KILL_GRACE_MS;
|
|
72
|
+
const start = Date.now();
|
|
73
|
+
const queue = [];
|
|
74
|
+
const waiters = [];
|
|
75
|
+
let done = false;
|
|
76
|
+
let errored = null;
|
|
77
|
+
let child = null;
|
|
78
|
+
let stdoutBytes = 0;
|
|
79
|
+
let stderrBytes = 0;
|
|
80
|
+
let truncated = false;
|
|
81
|
+
let timedOut = false;
|
|
82
|
+
let settled = false;
|
|
83
|
+
function push(evt) {
|
|
84
|
+
if (done)
|
|
85
|
+
return;
|
|
86
|
+
const waiter = waiters.shift();
|
|
87
|
+
if (waiter) {
|
|
88
|
+
waiter.resolve({ value: evt, done: false });
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
queue.push(evt);
|
|
92
|
+
if (queue.length > maxBufferedChunks) {
|
|
93
|
+
errored = new Error(`stream-subprocess: internal queue exceeded ${maxBufferedChunks} chunks — consumer not draining`);
|
|
94
|
+
truncated = true;
|
|
95
|
+
terminateChild("SIGTERM");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function finish() {
|
|
100
|
+
done = true;
|
|
101
|
+
while (waiters.length > 0) {
|
|
102
|
+
const w = waiters.shift();
|
|
103
|
+
if (!w)
|
|
104
|
+
break;
|
|
105
|
+
if (errored)
|
|
106
|
+
w.reject(errored);
|
|
107
|
+
else
|
|
108
|
+
w.resolve({ value: undefined, done: true });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function terminateChild(sig) {
|
|
112
|
+
if (!child)
|
|
113
|
+
return;
|
|
114
|
+
killTree(child, sig);
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
if (!settled && child)
|
|
117
|
+
killTree(child, "SIGKILL");
|
|
118
|
+
}, killGraceMs).unref();
|
|
119
|
+
}
|
|
120
|
+
const spawnOpts = {
|
|
121
|
+
stdio: [opts.stdin === undefined ? "ignore" : "pipe", "pipe", "pipe"],
|
|
122
|
+
windowsHide: true,
|
|
123
|
+
env: opts.env ? { ...process.env, ...opts.env } : process.env,
|
|
124
|
+
};
|
|
125
|
+
if (opts.cwd !== undefined)
|
|
126
|
+
spawnOpts.cwd = opts.cwd;
|
|
127
|
+
try {
|
|
128
|
+
child = spawn(command, args, spawnOpts);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const e = err instanceof Error ? err : new Error(String(err));
|
|
132
|
+
errored = e;
|
|
133
|
+
queueMicrotask(finish);
|
|
134
|
+
return buildIterable();
|
|
135
|
+
}
|
|
136
|
+
if (opts.stdin !== undefined) {
|
|
137
|
+
child.stdin?.end(opts.stdin);
|
|
138
|
+
}
|
|
139
|
+
const timer = setTimeout(() => {
|
|
140
|
+
if (settled)
|
|
141
|
+
return;
|
|
142
|
+
timedOut = true;
|
|
143
|
+
terminateChild("SIGTERM");
|
|
144
|
+
}, timeoutMs);
|
|
145
|
+
timer.unref();
|
|
146
|
+
child.stdout?.on("data", (buf) => {
|
|
147
|
+
if (truncated)
|
|
148
|
+
return;
|
|
149
|
+
if (stdoutBytes + buf.length > maxOutputBytes) {
|
|
150
|
+
const remaining = Math.max(0, maxOutputBytes - stdoutBytes);
|
|
151
|
+
if (remaining > 0) {
|
|
152
|
+
push({ stream: "stdout", chunk: buf.subarray(0, remaining).toString("utf8") });
|
|
153
|
+
}
|
|
154
|
+
stdoutBytes = maxOutputBytes;
|
|
155
|
+
truncated = true;
|
|
156
|
+
terminateChild("SIGTERM");
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
stdoutBytes += buf.length;
|
|
160
|
+
push({ stream: "stdout", chunk: buf.toString("utf8") });
|
|
161
|
+
});
|
|
162
|
+
child.stderr?.on("data", (buf) => {
|
|
163
|
+
if (truncated)
|
|
164
|
+
return;
|
|
165
|
+
if (stderrBytes + buf.length > maxOutputBytes) {
|
|
166
|
+
const remaining = Math.max(0, maxOutputBytes - stderrBytes);
|
|
167
|
+
if (remaining > 0) {
|
|
168
|
+
push({ stream: "stderr", chunk: buf.subarray(0, remaining).toString("utf8") });
|
|
169
|
+
}
|
|
170
|
+
stderrBytes = maxOutputBytes;
|
|
171
|
+
truncated = true;
|
|
172
|
+
terminateChild("SIGTERM");
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
stderrBytes += buf.length;
|
|
176
|
+
push({ stream: "stderr", chunk: buf.toString("utf8") });
|
|
177
|
+
});
|
|
178
|
+
child.on("error", (err) => {
|
|
179
|
+
if (settled)
|
|
180
|
+
return;
|
|
181
|
+
settled = true;
|
|
182
|
+
clearTimeout(timer);
|
|
183
|
+
errored = err;
|
|
184
|
+
finish();
|
|
185
|
+
});
|
|
186
|
+
child.on("close", (code, signal) => {
|
|
187
|
+
if (settled)
|
|
188
|
+
return;
|
|
189
|
+
settled = true;
|
|
190
|
+
clearTimeout(timer);
|
|
191
|
+
const exitCode = code ?? (signal ? 128 : -1);
|
|
192
|
+
push({
|
|
193
|
+
kind: "end",
|
|
194
|
+
exitCode,
|
|
195
|
+
timedOut,
|
|
196
|
+
durationMs: Date.now() - start,
|
|
197
|
+
totalStdoutBytes: stdoutBytes,
|
|
198
|
+
totalStderrBytes: stderrBytes,
|
|
199
|
+
truncated,
|
|
200
|
+
});
|
|
201
|
+
finish();
|
|
202
|
+
});
|
|
203
|
+
function buildIterable() {
|
|
204
|
+
return {
|
|
205
|
+
[Symbol.asyncIterator]() {
|
|
206
|
+
return {
|
|
207
|
+
next() {
|
|
208
|
+
if (queue.length > 0) {
|
|
209
|
+
const evt = queue.shift();
|
|
210
|
+
return Promise.resolve({ value: evt, done: false });
|
|
211
|
+
}
|
|
212
|
+
if (done) {
|
|
213
|
+
if (errored)
|
|
214
|
+
return Promise.reject(errored);
|
|
215
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
216
|
+
}
|
|
217
|
+
return new Promise((resolve, reject) => {
|
|
218
|
+
waiters.push({ resolve, reject });
|
|
219
|
+
});
|
|
220
|
+
},
|
|
221
|
+
return() {
|
|
222
|
+
if (!settled)
|
|
223
|
+
terminateChild("SIGTERM");
|
|
224
|
+
done = true;
|
|
225
|
+
while (waiters.length > 0) {
|
|
226
|
+
const w = waiters.shift();
|
|
227
|
+
if (w)
|
|
228
|
+
w.resolve({ value: undefined, done: true });
|
|
229
|
+
}
|
|
230
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
231
|
+
},
|
|
232
|
+
throw(err) {
|
|
233
|
+
if (!settled)
|
|
234
|
+
terminateChild("SIGTERM");
|
|
235
|
+
done = true;
|
|
236
|
+
return Promise.reject(err);
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
return buildIterable();
|
|
243
|
+
}
|
|
244
|
+
export async function drainSubprocessStream(iter) {
|
|
245
|
+
const stdout = [];
|
|
246
|
+
const stderr = [];
|
|
247
|
+
let exitCode = -1;
|
|
248
|
+
let durationMs = 0;
|
|
249
|
+
let timedOut = false;
|
|
250
|
+
let truncated = false;
|
|
251
|
+
for await (const evt of iter) {
|
|
252
|
+
if ("stream" in evt) {
|
|
253
|
+
if (evt.stream === "stdout")
|
|
254
|
+
stdout.push(evt.chunk);
|
|
255
|
+
else
|
|
256
|
+
stderr.push(evt.chunk);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
exitCode = evt.exitCode;
|
|
260
|
+
durationMs = evt.durationMs;
|
|
261
|
+
timedOut = evt.timedOut;
|
|
262
|
+
truncated = evt.truncated;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
stdout: stdout.join(""),
|
|
267
|
+
stderr: stderr.join(""),
|
|
268
|
+
exitCode,
|
|
269
|
+
durationMs,
|
|
270
|
+
timedOut,
|
|
271
|
+
truncated,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=stream-subprocess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-subprocess.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/stream-subprocess.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async subprocess runner.
|
|
3
|
+
*
|
|
4
|
+
* Wraps `child_process.spawn` with:
|
|
5
|
+
* - hard timeout (SIGTERM, then SIGKILL after grace period)
|
|
6
|
+
* - output byte cap (protects the agent from pathological CLI output)
|
|
7
|
+
* - DEVNULL stdin by default (prevents interactive auth prompts from hanging)
|
|
8
|
+
* - UTF-8 decoding with replacement on invalid sequences
|
|
9
|
+
*/
|
|
10
|
+
export interface SubprocessResult {
|
|
11
|
+
stdout: string;
|
|
12
|
+
stderr: string;
|
|
13
|
+
exitCode: number;
|
|
14
|
+
durationMs: number;
|
|
15
|
+
timedOut: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface RunSubprocessOpts {
|
|
18
|
+
cwd?: string;
|
|
19
|
+
env?: Record<string, string>;
|
|
20
|
+
stdin?: string;
|
|
21
|
+
timeoutMs?: number;
|
|
22
|
+
maxOutputBytes?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function runSubprocess(command: string, args: readonly string[], opts?: RunSubprocessOpts): Promise<SubprocessResult>;
|
|
25
|
+
//# sourceMappingURL=subprocess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subprocess.d.ts","sourceRoot":"","sources":["../../../src/dispatchers/shared/subprocess.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CA8F3B"}
|