harness-dispatch 0.4.0 → 0.6.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/CHANGELOG.md +152 -0
- package/README.md +232 -87
- package/config.default.yaml +416 -397
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +2 -2
- package/dist/auth.js.map +1 -1
- package/dist/billing.d.ts +35 -4
- package/dist/billing.d.ts.map +1 -1
- package/dist/billing.js +48 -17
- package/dist/billing.js.map +1 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +147 -91
- package/dist/bin.js.map +1 -1
- package/dist/breaker-store.d.ts +60 -9
- package/dist/breaker-store.d.ts.map +1 -1
- package/dist/breaker-store.js +246 -50
- package/dist/breaker-store.js.map +1 -1
- package/dist/circuit-breaker.d.ts +35 -0
- package/dist/circuit-breaker.d.ts.map +1 -1
- package/dist/circuit-breaker.js +68 -11
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/config/coercions.d.ts +31 -0
- package/dist/config/coercions.d.ts.map +1 -0
- package/dist/config/coercions.js +169 -0
- package/dist/config/coercions.js.map +1 -0
- package/dist/config/env-interpolation.d.ts +36 -0
- package/dist/config/env-interpolation.d.ts.map +1 -0
- package/dist/config/env-interpolation.js +73 -0
- package/dist/config/env-interpolation.js.map +1 -0
- package/dist/config/protocol.d.ts +51 -0
- package/dist/config/protocol.d.ts.map +1 -0
- package/dist/config/protocol.js +300 -0
- package/dist/config/protocol.js.map +1 -0
- package/dist/config/route-fields.d.ts +72 -0
- package/dist/config/route-fields.d.ts.map +1 -0
- package/dist/config/route-fields.js +128 -0
- package/dist/config/route-fields.js.map +1 -0
- package/dist/config/validation.d.ts +72 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +189 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/config.d.ts +19 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +214 -635
- package/dist/config.js.map +1 -1
- package/dist/configure-yaml.d.ts +23 -0
- package/dist/configure-yaml.d.ts.map +1 -0
- package/dist/configure-yaml.js +193 -0
- package/dist/configure-yaml.js.map +1 -0
- package/dist/dispatch-log.d.ts.map +1 -1
- package/dist/dispatch-log.js +2 -3
- package/dist/dispatch-log.js.map +1 -1
- package/dist/dispatchers/base.d.ts +3 -0
- package/dist/dispatchers/base.d.ts.map +1 -1
- package/dist/dispatchers/base.js.map +1 -1
- package/dist/dispatchers/generic-cli.d.ts +15 -1
- package/dist/dispatchers/generic-cli.d.ts.map +1 -1
- package/dist/dispatchers/generic-cli.js +69 -5
- package/dist/dispatchers/generic-cli.js.map +1 -1
- package/dist/dispatchers/openai-compatible.d.ts.map +1 -1
- package/dist/dispatchers/openai-compatible.js +70 -2
- package/dist/dispatchers/openai-compatible.js.map +1 -1
- package/dist/dispatchers/shared/kill-tree.d.ts +17 -4
- package/dist/dispatchers/shared/kill-tree.d.ts.map +1 -1
- package/dist/dispatchers/shared/kill-tree.js +28 -4
- package/dist/dispatchers/shared/kill-tree.js.map +1 -1
- package/dist/dispatchers/shared/rate-limit-headers.d.ts +17 -0
- package/dist/dispatchers/shared/rate-limit-headers.d.ts.map +1 -1
- package/dist/dispatchers/shared/rate-limit-headers.js +27 -0
- package/dist/dispatchers/shared/rate-limit-headers.js.map +1 -1
- package/dist/dispatchers/shared/stream-subprocess.d.ts +11 -0
- package/dist/dispatchers/shared/stream-subprocess.d.ts.map +1 -1
- package/dist/dispatchers/shared/stream-subprocess.js +62 -35
- package/dist/dispatchers/shared/stream-subprocess.js.map +1 -1
- package/dist/dispatchers/shared/subprocess.d.ts.map +1 -1
- package/dist/dispatchers/shared/subprocess.js +3 -0
- package/dist/dispatchers/shared/subprocess.js.map +1 -1
- package/dist/dispatchers/shared/which-available.d.ts.map +1 -1
- package/dist/dispatchers/shared/which-available.js +16 -2
- package/dist/dispatchers/shared/which-available.js.map +1 -1
- package/dist/file-lock.d.ts +17 -0
- package/dist/file-lock.d.ts.map +1 -0
- package/dist/file-lock.js +143 -0
- package/dist/file-lock.js.map +1 -0
- package/dist/http/parse.d.ts +64 -0
- package/dist/http/parse.d.ts.map +1 -0
- package/dist/http/parse.js +230 -0
- package/dist/http/parse.js.map +1 -0
- package/dist/http/server.d.ts +2 -0
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +249 -286
- package/dist/http/server.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/job-runner.js +23 -5
- package/dist/job-runner.js.map +1 -1
- package/dist/jobs/context.d.ts +17 -0
- package/dist/jobs/context.d.ts.map +1 -0
- package/dist/jobs/context.js +84 -0
- package/dist/jobs/context.js.map +1 -0
- package/dist/jobs/store.d.ts +80 -0
- package/dist/jobs/store.d.ts.map +1 -0
- package/dist/jobs/store.js +279 -0
- package/dist/jobs/store.js.map +1 -0
- package/dist/jobs/types.d.ts +135 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +11 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/jobs.d.ts +165 -85
- package/dist/jobs.d.ts.map +1 -1
- package/dist/jobs.js +824 -208
- package/dist/jobs.js.map +1 -1
- package/dist/leaderboard.d.ts +24 -1
- package/dist/leaderboard.d.ts.map +1 -1
- package/dist/leaderboard.js +94 -2
- package/dist/leaderboard.js.map +1 -1
- package/dist/mcp/config-hot-reload.d.ts.map +1 -1
- package/dist/mcp/config-hot-reload.js +1 -1
- package/dist/mcp/config-hot-reload.js.map +1 -1
- package/dist/mcp/dispatcher-factory.d.ts +16 -1
- package/dist/mcp/dispatcher-factory.d.ts.map +1 -1
- package/dist/mcp/dispatcher-factory.js +41 -3
- package/dist/mcp/dispatcher-factory.js.map +1 -1
- package/dist/mcp/tool-schemas.d.ts +194 -0
- package/dist/mcp/tool-schemas.d.ts.map +1 -0
- package/dist/mcp/tool-schemas.js +311 -0
- package/dist/mcp/tool-schemas.js.map +1 -0
- package/dist/mcp/tools.d.ts +26 -51
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +122 -151
- package/dist/mcp/tools.js.map +1 -1
- package/dist/observability/index.d.ts +16 -3
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +23 -7
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/spans.d.ts.map +1 -1
- package/dist/observability/spans.js +4 -1
- package/dist/observability/spans.js.map +1 -1
- package/dist/quota.d.ts +106 -22
- package/dist/quota.d.ts.map +1 -1
- package/dist/quota.js +198 -58
- package/dist/quota.js.map +1 -1
- package/dist/route-policy.d.ts.map +1 -1
- package/dist/route-policy.js +13 -3
- package/dist/route-policy.js.map +1 -1
- package/dist/router.d.ts +29 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +102 -40
- package/dist/router.js.map +1 -1
- package/dist/safety.d.ts.map +1 -1
- package/dist/safety.js +11 -2
- package/dist/safety.js.map +1 -1
- package/dist/state-dir.d.ts +17 -0
- package/dist/state-dir.d.ts.map +1 -0
- package/dist/state-dir.js +21 -0
- package/dist/state-dir.js.map +1 -0
- package/dist/status.d.ts +49 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +67 -4
- package/dist/status.js.map +1 -1
- package/dist/types.d.ts +74 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/working-dir.d.ts +13 -0
- package/dist/working-dir.d.ts.map +1 -1
- package/dist/working-dir.js +27 -0
- package/dist/working-dir.js.map +1 -1
- package/dist/workspace-lock.d.ts +40 -0
- package/dist/workspace-lock.d.ts.map +1 -0
- package/dist/workspace-lock.js +258 -0
- package/dist/workspace-lock.js.map +1 -0
- package/dist/workspace-resolve.d.ts +98 -0
- package/dist/workspace-resolve.d.ts.map +1 -0
- package/dist/workspace-resolve.js +382 -0
- package/dist/workspace-resolve.js.map +1 -0
- package/dist/workspaces.d.ts +16 -0
- package/dist/workspaces.d.ts.map +1 -1
- package/dist/workspaces.js +166 -22
- package/dist/workspaces.js.map +1 -1
- package/package.json +99 -96
- package/dist/dashboard/live.d.ts +0 -49
- package/dist/dashboard/live.d.ts.map +0 -1
- package/dist/dashboard/live.js +0 -149
- package/dist/dashboard/live.js.map +0 -1
|
@@ -120,6 +120,11 @@ function realStreamSubprocess(command, args, opts) {
|
|
|
120
120
|
const spawnOpts = {
|
|
121
121
|
stdio: [opts.stdin === undefined ? "ignore" : "pipe", "pipe", "pipe"],
|
|
122
122
|
windowsHide: true,
|
|
123
|
+
// POSIX: own process group, so killTree can signal the agent CLI's whole
|
|
124
|
+
// tree (its shells, its test runners) rather than only the CLI itself.
|
|
125
|
+
// Windows keeps the default — taskkill /T handles the tree there, and
|
|
126
|
+
// `detached` on Windows means a new console instead.
|
|
127
|
+
detached: process.platform !== "win32",
|
|
123
128
|
env: opts.env ? { ...process.env, ...opts.env } : process.env,
|
|
124
129
|
};
|
|
125
130
|
if (opts.cwd !== undefined)
|
|
@@ -143,6 +148,12 @@ function realStreamSubprocess(command, args, opts) {
|
|
|
143
148
|
terminateChild("SIGTERM");
|
|
144
149
|
}, timeoutMs);
|
|
145
150
|
timer.unref();
|
|
151
|
+
if (opts.signal) {
|
|
152
|
+
if (opts.signal.aborted)
|
|
153
|
+
terminateChild("SIGTERM");
|
|
154
|
+
else
|
|
155
|
+
opts.signal.addEventListener("abort", () => terminateChild("SIGTERM"), { once: true });
|
|
156
|
+
}
|
|
146
157
|
child.stdout?.on("data", (buf) => {
|
|
147
158
|
if (truncated)
|
|
148
159
|
return;
|
|
@@ -200,43 +211,59 @@ function realStreamSubprocess(command, args, opts) {
|
|
|
200
211
|
});
|
|
201
212
|
finish();
|
|
202
213
|
});
|
|
214
|
+
// The three iterator methods, named rather than written inline.
|
|
215
|
+
//
|
|
216
|
+
// They used to sit three object/function literals deep inside
|
|
217
|
+
// buildIterable, which put the ordinary queue check at brace depth 8 — the
|
|
218
|
+
// deepest point in the codebase, for logic that is not complicated. None of
|
|
219
|
+
// them uses `this`, so they lift straight out and the nesting was pure
|
|
220
|
+
// syntax.
|
|
221
|
+
/** Next buffered event, the terminal state, or a promise a writer resolves. */
|
|
222
|
+
function nextEvent() {
|
|
223
|
+
if (queue.length > 0) {
|
|
224
|
+
const evt = queue.shift();
|
|
225
|
+
return Promise.resolve({ value: evt, done: false });
|
|
226
|
+
}
|
|
227
|
+
if (done) {
|
|
228
|
+
if (errored)
|
|
229
|
+
return Promise.reject(errored);
|
|
230
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
231
|
+
}
|
|
232
|
+
return new Promise((resolve, reject) => {
|
|
233
|
+
waiters.push({ resolve, reject });
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Consumer abandoned the stream (a `break` in a for-await). Kill the child
|
|
238
|
+
* and release every waiter — leaving one pending would hang the caller.
|
|
239
|
+
*/
|
|
240
|
+
function stopIteration() {
|
|
241
|
+
if (!settled)
|
|
242
|
+
terminateChild("SIGTERM");
|
|
243
|
+
done = true;
|
|
244
|
+
while (waiters.length > 0) {
|
|
245
|
+
const w = waiters.shift();
|
|
246
|
+
if (w)
|
|
247
|
+
w.resolve({ value: undefined, done: true });
|
|
248
|
+
}
|
|
249
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
250
|
+
}
|
|
251
|
+
/** Consumer threw into the stream: same teardown, propagate the error. */
|
|
252
|
+
function failIteration(err) {
|
|
253
|
+
if (!settled)
|
|
254
|
+
terminateChild("SIGTERM");
|
|
255
|
+
done = true;
|
|
256
|
+
return Promise.reject(err);
|
|
257
|
+
}
|
|
203
258
|
function buildIterable() {
|
|
259
|
+
// A fresh iterator object per call, as before — they share the one queue
|
|
260
|
+
// either way, so this stream has always been single-consumer.
|
|
204
261
|
return {
|
|
205
|
-
[Symbol.asyncIterator]() {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
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
|
-
},
|
|
262
|
+
[Symbol.asyncIterator]: () => ({
|
|
263
|
+
next: nextEvent,
|
|
264
|
+
return: stopIteration,
|
|
265
|
+
throw: failIteration,
|
|
266
|
+
}),
|
|
240
267
|
};
|
|
241
268
|
}
|
|
242
269
|
return buildIterable();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-subprocess.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/stream-subprocess.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAyB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"stream-subprocess.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/stream-subprocess.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,
|
|
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,CAiG3B"}
|
|
@@ -20,6 +20,9 @@ export function runSubprocess(command, args, opts = {}) {
|
|
|
20
20
|
const spawnOpts = {
|
|
21
21
|
stdio: [opts.stdin === undefined ? "ignore" : "pipe", "pipe", "pipe"],
|
|
22
22
|
windowsHide: true,
|
|
23
|
+
// POSIX: own process group, so killTree can signal the agent CLI's
|
|
24
|
+
// whole tree — see stream-subprocess.ts for the full rationale.
|
|
25
|
+
detached: process.platform !== "win32",
|
|
23
26
|
env: opts.env ? { ...process.env, ...opts.env } : process.env,
|
|
24
27
|
};
|
|
25
28
|
if (opts.cwd !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subprocess.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/subprocess.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"subprocess.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/subprocess.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"which-available.d.ts","sourceRoot":"","sources":["../../../src/dispatchers/shared/which-available.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"which-available.d.ts","sourceRoot":"","sources":["../../../src/dispatchers/shared/which-available.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAsBzD"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import which from "which";
|
|
2
|
+
let warnedMissingSync = false;
|
|
2
3
|
export function commandAvailable(command) {
|
|
3
4
|
const candidate = which;
|
|
4
|
-
if (typeof candidate.sync !== "function")
|
|
5
|
-
|
|
5
|
+
if (typeof candidate.sync !== "function") {
|
|
6
|
+
// Fail CLOSED. This previously returned true, declaring every command
|
|
7
|
+
// available when the resolver was unusable: the route would be selected,
|
|
8
|
+
// spawned, and fail — burning a dispatch and a breaker failure instead of
|
|
9
|
+
// being skipped with a clear "unavailable" reason. Not currently
|
|
10
|
+
// reachable (which@7 does expose .sync), but this branch exists precisely
|
|
11
|
+
// to survive an export-shape change, and the package was moved across two
|
|
12
|
+
// majors recently.
|
|
13
|
+
if (!warnedMissingSync) {
|
|
14
|
+
warnedMissingSync = true;
|
|
15
|
+
console.error("harness-dispatch: the 'which' package exposes no .sync() — cannot resolve " +
|
|
16
|
+
"commands on PATH, so every CLI route will report unavailable.");
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
6
20
|
return Boolean(candidate.sync(command, { nothrow: true }));
|
|
7
21
|
}
|
|
8
22
|
//# sourceMappingURL=which-available.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"which-available.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/which-available.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,SAAS,GAAG,KAEjB,CAAC;IACF,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,UAAU;
|
|
1
|
+
{"version":3,"file":"which-available.js","sourceRoot":"","sources":["../../../src/dispatchers/shared/which-available.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,SAAS,GAAG,KAEjB,CAAC;IACF,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACzC,sEAAsE;QACtE,yEAAyE;QACzE,0EAA0E;QAC1E,iEAAiE;QACjE,0EAA0E;QAC1E,0EAA0E;QAC1E,mBAAmB;QACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,iBAAiB,GAAG,IAAI,CAAC;YACzB,OAAO,CAAC,KAAK,CACX,4EAA4E;gBAC1E,+DAA+D,CAClE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal cross-process mutex over a file path.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from breaker-store.ts so quota.ts can use the same one. Both guard
|
|
5
|
+
* the same shape of bug: a read-modify-write of a shared state file performed
|
|
6
|
+
* by many detached dispatch processes at once, where the losers are silently
|
|
7
|
+
* discarded.
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT, and the reason a lock alone is not enough: serialising writers
|
|
10
|
+
* does not help if each writer holds an ABSOLUTE value computed from its own
|
|
11
|
+
* boot-time baseline — they will politely take turns writing the same number.
|
|
12
|
+
* The caller must apply a DELTA to whatever it reads inside the critical
|
|
13
|
+
* section. Both callers here do; getting that wrong is what made the first
|
|
14
|
+
* attempt at each of these fixes ineffective.
|
|
15
|
+
*/
|
|
16
|
+
export declare function withFileLock<T>(file: string, fn: () => T): T;
|
|
17
|
+
//# sourceMappingURL=file-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiDH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CA0E5D"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal cross-process mutex over a file path.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from breaker-store.ts so quota.ts can use the same one. Both guard
|
|
5
|
+
* the same shape of bug: a read-modify-write of a shared state file performed
|
|
6
|
+
* by many detached dispatch processes at once, where the losers are silently
|
|
7
|
+
* discarded.
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT, and the reason a lock alone is not enough: serialising writers
|
|
10
|
+
* does not help if each writer holds an ABSOLUTE value computed from its own
|
|
11
|
+
* boot-time baseline — they will politely take turns writing the same number.
|
|
12
|
+
* The caller must apply a DELTA to whatever it reads inside the critical
|
|
13
|
+
* section. Both callers here do; getting that wrong is what made the first
|
|
14
|
+
* attempt at each of these fixes ineffective.
|
|
15
|
+
*/
|
|
16
|
+
import { mkdirSync, renameSync, rmdirSync, statSync } from "node:fs";
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
/**
|
|
19
|
+
* How long a held lock may go unrefreshed before another process steals it.
|
|
20
|
+
*
|
|
21
|
+
* A crashed holder must not wedge a route's breaker file forever. Short,
|
|
22
|
+
* because the critical section is one read and one write.
|
|
23
|
+
*/
|
|
24
|
+
const LOCK_STALE_MS = 10_000;
|
|
25
|
+
/** Pause between acquisition attempts, so waiting costs no CPU. */
|
|
26
|
+
const RETRY_MS = 25;
|
|
27
|
+
/** Give up rather than block a dispatch indefinitely. */
|
|
28
|
+
const LOCK_TIMEOUT_MS = 2_000;
|
|
29
|
+
/**
|
|
30
|
+
* Run `fn` holding an exclusive cross-process lock on one route's file.
|
|
31
|
+
*
|
|
32
|
+
* mkdir is the atomic test-and-set here: it fails if the directory exists, on
|
|
33
|
+
* every platform, and unlike `writeFile` with `wx` it needs no cleanup path
|
|
34
|
+
* distinct from the directory itself. Synchronous on purpose — the callers
|
|
35
|
+
* (BreakerStore.update via Router.handleResult, and CLI paths that exit
|
|
36
|
+
* immediately afterwards) are sync, and making them async to acquire a lock
|
|
37
|
+
* would ripple through the whole dispatch return path for no benefit.
|
|
38
|
+
*
|
|
39
|
+
* Failing to acquire runs `fn` anyway rather than dropping the update: an
|
|
40
|
+
* un-serialised write is what we had before, so the fallback is no worse than
|
|
41
|
+
* the old behaviour, while a dropped failure would be strictly worse.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* Block this thread briefly without spinning.
|
|
45
|
+
*
|
|
46
|
+
* Atomics.wait on a throwaway buffer is the only synchronous sleep Node
|
|
47
|
+
* offers. The lock has to stay synchronous (its callers are), so the choice is
|
|
48
|
+
* this or a busy loop.
|
|
49
|
+
*/
|
|
50
|
+
function sleepSync(ms) {
|
|
51
|
+
try {
|
|
52
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Environments without SharedArrayBuffer fall back to returning
|
|
56
|
+
// immediately; the deadline still bounds the loop.
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function withFileLock(file, fn) {
|
|
60
|
+
const lockDir = `${file}.lock`;
|
|
61
|
+
// Ensure the parent exists before trying to lock inside it: a caller whose
|
|
62
|
+
// state directory has not been created yet would otherwise spin against an
|
|
63
|
+
// ENOENT that no amount of retrying resolves.
|
|
64
|
+
// If the parent cannot be created there is nothing to lock against and
|
|
65
|
+
// retrying cannot help — spinning the full timeout on EVERY call was
|
|
66
|
+
// measured at 2005ms per call, forever, on an unwritable state directory.
|
|
67
|
+
// Run unlocked immediately instead; the caller already tolerates that.
|
|
68
|
+
try {
|
|
69
|
+
mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return fn();
|
|
73
|
+
}
|
|
74
|
+
const deadline = Date.now() + LOCK_TIMEOUT_MS;
|
|
75
|
+
let held = false;
|
|
76
|
+
for (;;) {
|
|
77
|
+
try {
|
|
78
|
+
mkdirSync(lockDir);
|
|
79
|
+
held = true;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
try {
|
|
84
|
+
const age = Date.now() - statSync(lockDir).mtimeMs;
|
|
85
|
+
if (age > LOCK_STALE_MS) {
|
|
86
|
+
// Steal by RENAME, not delete. stat-then-rmdir let two waiters both
|
|
87
|
+
// judge the same lock stale — the slower one's rmdir then removed
|
|
88
|
+
// the faster one's FRESHLY CREATED lock, and both entered the
|
|
89
|
+
// critical section, recreating the unserialised read-modify-write
|
|
90
|
+
// this lock exists to prevent. Rename is atomic: exactly one waiter
|
|
91
|
+
// wins it, the loser gets ENOENT and goes round the loop again.
|
|
92
|
+
const tomb = `${lockDir}.stale-${process.pid}-${Date.now().toString(36)}`;
|
|
93
|
+
try {
|
|
94
|
+
renameSync(lockDir, tomb);
|
|
95
|
+
try {
|
|
96
|
+
rmdirSync(tomb);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Leftover tombstone; nothing reads `*.stale-*` names.
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Lost the steal race to another waiter; retry normally.
|
|
104
|
+
}
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// mkdir failed for a reason that is not "already exists": the lock
|
|
110
|
+
// vanished between the two calls, or the directory is unwritable, or
|
|
111
|
+
// the name is too long. Retrying can only help in the first case.
|
|
112
|
+
//
|
|
113
|
+
// This branch previously `continue`d with NO sleep, so the loop spun a
|
|
114
|
+
// full CPU for the whole timeout — measured at 1968ms of CPU per call
|
|
115
|
+
// on an existing-but-unwritable state directory, after every dispatch
|
|
116
|
+
// result. The earlier fix added a sleep to the contended branch only
|
|
117
|
+
// and its commit claimed the whole defect was gone; it was not. Every
|
|
118
|
+
// retry path sleeps now, and there is a test per branch.
|
|
119
|
+
if (Date.now() >= deadline)
|
|
120
|
+
break;
|
|
121
|
+
sleepSync(RETRY_MS);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (Date.now() >= deadline)
|
|
125
|
+
break;
|
|
126
|
+
sleepSync(RETRY_MS);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
return fn();
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
if (held) {
|
|
134
|
+
try {
|
|
135
|
+
rmdirSync(lockDir);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Already stolen as stale; the next acquirer owns it.
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=file-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parsing an OpenAI-style request into something the router can act on.
|
|
3
|
+
*
|
|
4
|
+
* Split out of http/server.ts, which mixed this with transport wiring. The
|
|
5
|
+
* separation is worth making because this file is the HTTP surface's half of
|
|
6
|
+
* the safety boundary, and it has repeatedly been the half that drifted: the
|
|
7
|
+
* MCP tool rejected an unknown fanout target by name while this one silently
|
|
8
|
+
* returned fewer arms, capped context files while this one accepted an
|
|
9
|
+
* unbounded list, and rejected misplaced hint keys while this one ignored
|
|
10
|
+
* them. Every one of those was found as "same input, two answers".
|
|
11
|
+
*
|
|
12
|
+
* Anything rejected here must be rejected the same way the MCP schema
|
|
13
|
+
* rejects it (see mcp/tool-schemas.ts). BadRequestError is what maps a
|
|
14
|
+
* refusal to HTTP 400 rather than letting it fail later as a 500.
|
|
15
|
+
*/
|
|
16
|
+
import type { IncomingMessage } from "node:http";
|
|
17
|
+
import type { RouteHints } from "../types.js";
|
|
18
|
+
/** Raised for anything the caller can fix; mapped to HTTP 400 by the server. */
|
|
19
|
+
export declare class PayloadTooLargeError extends Error {
|
|
20
|
+
}
|
|
21
|
+
export interface ChatMessage {
|
|
22
|
+
role?: unknown;
|
|
23
|
+
content?: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface ChatRequest {
|
|
26
|
+
model?: unknown;
|
|
27
|
+
messages?: unknown;
|
|
28
|
+
prompt?: unknown;
|
|
29
|
+
stream?: unknown;
|
|
30
|
+
workingDir?: unknown;
|
|
31
|
+
files?: unknown;
|
|
32
|
+
mode?: unknown;
|
|
33
|
+
models?: unknown;
|
|
34
|
+
hints?: unknown;
|
|
35
|
+
safetyProfile?: unknown;
|
|
36
|
+
workspacePolicy?: unknown;
|
|
37
|
+
}
|
|
38
|
+
export declare const MAX_REQUEST_BODY_BYTES: number;
|
|
39
|
+
/**
|
|
40
|
+
* A request the CALLER can fix — malformed JSON, a missing required field, a
|
|
41
|
+
* working directory that does not exist.
|
|
42
|
+
*
|
|
43
|
+
* Everything except the 413 was returned as 500. PRODUCT.md names CI and cron
|
|
44
|
+
* as consumers of this surface, and retry-on-5xx will happily retry a request
|
|
45
|
+
* that can never succeed. A 4xx says "stop and fix the request", which is the
|
|
46
|
+
* true statement.
|
|
47
|
+
*/
|
|
48
|
+
export declare class BadRequestError extends Error {
|
|
49
|
+
}
|
|
50
|
+
/** Mirrors MAX_CONTEXT_FILES in mcp/tools.ts — the two surfaces must agree. */
|
|
51
|
+
export declare const MAX_CONTEXT_FILES_HTTP = 64;
|
|
52
|
+
export declare function readJson(req: IncomingMessage, maxBytes?: number): Promise<unknown>;
|
|
53
|
+
export declare function parseChatRequest(raw: unknown): {
|
|
54
|
+
prompt: string;
|
|
55
|
+
files: string[];
|
|
56
|
+
workingDir: string;
|
|
57
|
+
workingDirWarning?: string;
|
|
58
|
+
stream: boolean;
|
|
59
|
+
mode: "single" | "fanout";
|
|
60
|
+
models: string[];
|
|
61
|
+
hints: RouteHints;
|
|
62
|
+
};
|
|
63
|
+
export declare function completionEnvelope(content: string, model: string, extra: Record<string, unknown>): Record<string, unknown>;
|
|
64
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/http/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AAG/D,gFAAgF;AAChF,qBAAa,oBAAqB,SAAQ,KAAK;CAAG;AAElD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAKD,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AAEvD;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,KAAK;CAAG;AAE7C,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,eAAe,EACpB,QAAQ,GAAE,MAA+B,GACxC,OAAO,CAAC,OAAO,CAAC,CAwBlB;AAsHD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;CACnB,CAmDA;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB"}
|