@bunny-agent/manager 0.9.61-release.7 → 0.9.61-release.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/daemon-health.test.js +417 -0
- package/dist/__tests__/daemon-health.test.js.map +1 -1
- package/dist/__tests__/env.test.js +32 -0
- package/dist/__tests__/env.test.js.map +1 -1
- package/dist/__tests__/sandbox-exec-error.test.d.ts +2 -0
- package/dist/__tests__/sandbox-exec-error.test.d.ts.map +1 -0
- package/dist/__tests__/sandbox-exec-error.test.js +101 -0
- package/dist/__tests__/sandbox-exec-error.test.js.map +1 -0
- package/dist/__tests__/shell-escape.test.d.ts +2 -0
- package/dist/__tests__/shell-escape.test.d.ts.map +1 -0
- package/dist/__tests__/shell-escape.test.js +76 -0
- package/dist/__tests__/shell-escape.test.js.map +1 -0
- package/dist/bunny-agent.d.ts.map +1 -1
- package/dist/bunny-agent.js +6 -2
- package/dist/bunny-agent.js.map +1 -1
- package/dist/daemon-health.d.ts +23 -7
- package/dist/daemon-health.d.ts.map +1 -1
- package/dist/daemon-health.js +231 -18
- package/dist/daemon-health.js.map +1 -1
- package/dist/env.d.ts +3 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +8 -0
- package/dist/env.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/sandbox-exec-error.d.ts +53 -0
- package/dist/sandbox-exec-error.d.ts.map +1 -0
- package/dist/sandbox-exec-error.js +110 -0
- package/dist/sandbox-exec-error.js.map +1 -0
- package/dist/shell-escape.d.ts +18 -0
- package/dist/shell-escape.d.ts.map +1 -0
- package/dist/shell-escape.js +20 -0
- package/dist/shell-escape.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-escape.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/shell-escape.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { posixShellQuote } from "../shell-escape.js";
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
/** Run `sh -c <script>` for real and return trimmed stdout. */
|
|
7
|
+
async function runShell(script) {
|
|
8
|
+
const { stdout } = await execFileAsync("/bin/sh", ["-c", script]);
|
|
9
|
+
return stdout;
|
|
10
|
+
}
|
|
11
|
+
describe("posixShellQuote", () => {
|
|
12
|
+
it("round-trips a plain value through a real shell", async () => {
|
|
13
|
+
const value = "hello";
|
|
14
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
15
|
+
expect(out).toBe(value);
|
|
16
|
+
});
|
|
17
|
+
it("round-trips a value containing a single quote", async () => {
|
|
18
|
+
const value = "it's a test";
|
|
19
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
20
|
+
expect(out).toBe(value);
|
|
21
|
+
});
|
|
22
|
+
it("neutralizes command substitution via backticks", async () => {
|
|
23
|
+
const value = "`touch /tmp/pwned-backtick-$$`";
|
|
24
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
25
|
+
expect(out).toBe(value);
|
|
26
|
+
});
|
|
27
|
+
it("neutralizes command substitution via $()", async () => {
|
|
28
|
+
const value = "$(touch /tmp/pwned-dollar-$$)";
|
|
29
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
30
|
+
expect(out).toBe(value);
|
|
31
|
+
});
|
|
32
|
+
it("neutralizes variable expansion", async () => {
|
|
33
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: intentional shell `${PATH}` literal, not an accidental JS template placeholder
|
|
34
|
+
const value = "$HOME and $PATH and ${PATH}";
|
|
35
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
36
|
+
expect(out).toBe(value);
|
|
37
|
+
});
|
|
38
|
+
it("preserves embedded newlines literally", async () => {
|
|
39
|
+
const value = "line one\nline two\nline three";
|
|
40
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
41
|
+
expect(out).toBe(value);
|
|
42
|
+
});
|
|
43
|
+
it("neutralizes history-expansion-looking content (no special meaning in sh -c)", async () => {
|
|
44
|
+
const value = "echo !!; rm -rf /tmp/should-not-run-$$";
|
|
45
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
46
|
+
expect(out).toBe(value);
|
|
47
|
+
});
|
|
48
|
+
it("neutralizes a trailing unescaped double quote", async () => {
|
|
49
|
+
const value = 'say "hello" to "world"';
|
|
50
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
51
|
+
expect(out).toBe(value);
|
|
52
|
+
});
|
|
53
|
+
it("neutralizes semicolons and pipes used as command separators", async () => {
|
|
54
|
+
const value = "; touch /tmp/pwned-semi-$$ | true";
|
|
55
|
+
const out = await runShell(`printf '%s' ${posixShellQuote(value)}`);
|
|
56
|
+
expect(out).toBe(value);
|
|
57
|
+
});
|
|
58
|
+
it("supports the export KEY=value pattern used by remote adapters", async () => {
|
|
59
|
+
const key = "MY_SECRET";
|
|
60
|
+
const value = "value with `backticks`, $vars, and 'quotes'";
|
|
61
|
+
const script = `export ${key}=${posixShellQuote(value)} && printf '%s' "$${key}"`;
|
|
62
|
+
const out = await runShell(script);
|
|
63
|
+
expect(out).toBe(value);
|
|
64
|
+
});
|
|
65
|
+
it("does not actually execute injected shell syntax (negative control)", async () => {
|
|
66
|
+
const marker = `pwn-marker-${process.pid}-${Date.now()}`;
|
|
67
|
+
const value = `\`echo ${marker} > /tmp/${marker}.txt\``;
|
|
68
|
+
await runShell(`printf '%s' ${posixShellQuote(value)} > /dev/null`);
|
|
69
|
+
await expect(execFileAsync("/bin/sh", ["-c", `test -f /tmp/${marker}.txt`])).rejects.toBeTruthy();
|
|
70
|
+
});
|
|
71
|
+
it("handles the empty string", async () => {
|
|
72
|
+
const out = await runShell(`printf '%s' ${posixShellQuote("")}`);
|
|
73
|
+
expect(out).toBe("");
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=shell-escape.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-escape.test.js","sourceRoot":"","sources":["../../src/__tests__/shell-escape.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bunny-agent.d.ts","sourceRoot":"","sources":["../src/bunny-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAKjB,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,MAAM,CAA8B;gBAEhC,OAAO,EAAE,iBAAiB;IAMtC;;OAEG;YACW,cAAc;IAO5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAmFpB;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"bunny-agent.d.ts","sourceRoot":"","sources":["../src/bunny-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAKjB,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,MAAM,CAA8B;gBAEhC,OAAO,EAAE,iBAAiB;IAMtC;;OAEG;YACW,cAAc;IAO5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAmFpB;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IA4IrE;;OAEG;IACG,WAAW,CACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAA;KAAE,CAAC,EAC5D,SAAS,SAAe,GACvB,OAAO,CAAC,IAAI,CAAC;IAKhB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B"}
|
package/dist/bunny-agent.js
CHANGED
|
@@ -124,7 +124,9 @@ export class BunnyAgent {
|
|
|
124
124
|
const signal = input.signal;
|
|
125
125
|
// Check if signal is already aborted
|
|
126
126
|
if (signal?.aborted) {
|
|
127
|
-
|
|
127
|
+
const error = new Error("Operation was aborted");
|
|
128
|
+
error.name = "AbortError";
|
|
129
|
+
throw error;
|
|
128
130
|
}
|
|
129
131
|
// Write start entry if transcript is enabled
|
|
130
132
|
if (transcriptWriter) {
|
|
@@ -201,7 +203,9 @@ export class BunnyAgent {
|
|
|
201
203
|
(typeof DOMException !== "undefined" &&
|
|
202
204
|
error instanceof DOMException &&
|
|
203
205
|
error.name === "AbortError") ||
|
|
204
|
-
(error instanceof Error &&
|
|
206
|
+
(error instanceof Error &&
|
|
207
|
+
"code" in error &&
|
|
208
|
+
error.code === "aborted");
|
|
205
209
|
if (isAbort) {
|
|
206
210
|
console.log("[BunnyAgent] Operation aborted by user");
|
|
207
211
|
}
|
package/dist/bunny-agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bunny-agent.js","sourceRoot":"","sources":["../src/bunny-agent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bunny-agent.js","sourceRoot":"","sources":["../src/bunny-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAUzD;;;;;;;GAOG;AACH,MAAM,OAAO,UAAU;IACJ,OAAO,CAAiB;IACxB,MAAM,CAAa;IACnB,GAAG,CAAyB;IACrC,MAAM,GAAyB,IAAI,CAAC;IAE5C,YAAY,OAA0B;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAAkB;QACrC,oEAAoE;QACpE,MAAM,GAAG,GAAa,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,IAAI;YACzD,aAAa;YACb,KAAK;SACN,CAAC;QAEF,uGAAuG;QACvG,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC;QACtD,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEjC,YAAY;QACZ,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvC,qBAAqB;QACrB,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,YAAY,CAAC;QAC5D,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAEjC,6BAA6B;QAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC/C,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,2EAA2E;QAC3E,2DAA2D;QAC3D,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,mDAAmD;QACnD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,4EAA4E;QAC5E,0EAA0E;QAC1E,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,iFAAiF;QAEjF,+BAA+B;QAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEf,qCAAqC;QACrC,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ;aACnC,MAAM,CAAC,CAAC,CAAC,EAAmC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aACjE,GAAG,EAAE,CAAC;QAET,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,oBAAoB,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CACN,OAAO,eAAe,CAAC,OAAO,KAAK,QAAQ;gBACzC,CAAC,CAAC,eAAe,CAAC,OAAO;gBACzB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAC5C,CAAC;QACJ,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE3C,qEAAqE;QACrE,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,gBAAgB,GAAgB;YACpC,GAAG,KAAK;YACR,SAAS,EAAE;gBACT,GAAG,KAAK,CAAC,SAAS;gBAClB,IAAI,EAAE,aAAa;aACpB;SACF,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAEpD,MAAM,aAAa,GAAG,aAAa,CAAC;QACpC,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAE5B,qCAAqC;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;YAC1B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,6CAA6C;QAC7C,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,gBAAgB,CAAC,KAAK,CAAC;gBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE;oBACR,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC1B,SAAS,EAAE,aAAa;oBACxB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB;aACF,CAAC,CAAC;QACL,CAAC;QAED,yEAAyE;QACzE,uEAAuE;QACvE,MAAM,gBAAgB,GAA2B,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;YACJ,CAAC;YACD,gBAAgB,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACpD,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,gBAAgB,CAAC,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3D,KAAK,EAAE,KAAK,CAAC,QAAQ;aACtB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;YACD,gBAAgB,CAAC,2BAA2B,GAAG,OAAO,CAAC;QACzD,CAAC;QAED,0DAA0D;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;YAClC,GAAG,EAAE,aAAa;YAClB,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,EAAE;YACzC,MAAM;SACP,CAAC,CAAC;QAEH,gEAAgE;QAChE,sCAAsC;QACtC,OAAO,IAAI,cAAc,CAAa;YACpC,KAAK,CAAC,KAAK,CAAC,UAAU;gBACpB,IAAI,gBAAgB,GAAG,KAAK,CAAC;gBAE7B,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBACjC,iCAAiC;wBACjC,IAAI,gBAAgB,EAAE,CAAC;4BACrB,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BAC7C,MAAM,gBAAgB,CAAC,KAAK,CAAC;gCAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gCACnC,IAAI,EAAE,OAAO;gCACb,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gCAC3C,IAAI;6BACL,CAAC,CAAC;wBACL,CAAC;wBAED,0BAA0B;wBAC1B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5B,CAAC;oBAED,2CAA2C;oBAC3C,IAAI,gBAAgB,EAAE,CAAC;wBACrB,MAAM,gBAAgB,CAAC,KAAK,CAAC;4BAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BACnC,IAAI,EAAE,KAAK;yBACZ,CAAC,CAAC;oBACL,CAAC;oBAED,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,gBAAgB,GAAG,IAAI,CAAC;gBAC1B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,GACX,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;wBACvD,CAAC,OAAO,YAAY,KAAK,WAAW;4BAClC,KAAK,YAAY,YAAY;4BAC7B,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;wBAC9B,CAAC,KAAK,YAAY,KAAK;4BACrB,MAAM,IAAI,KAAK;4BACf,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;oBAE9B,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACN,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACzD,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;wBACnD,IAAI,gBAAgB,EAAE,CAAC;4BACrB,MAAM,gBAAgB,CAAC,KAAK,CAAC;gCAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gCACnC,IAAI,EAAE,OAAO;gCACb,IAAI,EAAE,YAAY;6BACnB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAED,kEAAkE;oBAClE,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;wBAClC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC1B,CAAC;yBAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBAC7B,UAAU,CAAC,KAAK,EAAE,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,KAA4D,EAC5D,SAAS,GAAG,YAAY;QAExB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;CACF"}
|
package/dist/daemon-health.d.ts
CHANGED
|
@@ -1,16 +1,32 @@
|
|
|
1
1
|
import type { ExecOptions, SandboxHandle } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Closed set of per-attempt failure classifications, for diagnostics only.
|
|
4
|
+
* Never exposed as a new success state — every non-`ok` value still resolves
|
|
5
|
+
* the attempt (and therefore the probe) to boolean `false`.
|
|
6
|
+
*/
|
|
7
|
+
export type DaemonHealthAttemptReason = "ok" | "http-non-200" | "transport-error" | "probe-timeout";
|
|
8
|
+
/** Diagnostic record for a single probe attempt, passed to `onAttempt`. */
|
|
9
|
+
export interface DaemonHealthAttemptInfo {
|
|
10
|
+
/** 1-based attempt number within this `isBunnyAgentDaemonHealthy` call. */
|
|
11
|
+
attempt: number;
|
|
12
|
+
/** Wall-clock latency of this attempt, in milliseconds. */
|
|
13
|
+
latencyMs: number;
|
|
14
|
+
reason: DaemonHealthAttemptReason;
|
|
15
|
+
/** True only when `reason === "ok"`. */
|
|
16
|
+
healthy: boolean;
|
|
17
|
+
}
|
|
2
18
|
export type IsBunnyAgentDaemonHealthyOptions = ExecOptions & {
|
|
3
19
|
/** Default 1 — avoid retry storms on every SDK stream. */
|
|
4
20
|
maxAttempts?: number;
|
|
5
21
|
/** Delay between attempts (default 0). */
|
|
6
22
|
delayMs?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Diagnostic hook invoked after every attempt settles (success or not).
|
|
25
|
+
* Not part of the success/failure contract — purely for the caller's own
|
|
26
|
+
* logging. Must not throw; thrown errors are swallowed so a logging bug
|
|
27
|
+
* can never affect probe behavior.
|
|
28
|
+
*/
|
|
29
|
+
onAttempt?: (info: DaemonHealthAttemptInfo) => void;
|
|
7
30
|
};
|
|
8
|
-
/**
|
|
9
|
-
* Runs `curl` against `<base>/healthz` inside the sandbox via the handle's `exec` method.
|
|
10
|
-
* Returns true only when the HTTP status line is **200** (`-w '%{http_code}'`).
|
|
11
|
-
*
|
|
12
|
-
* Defaults: **one attempt**, **~4s** budget, and curl `--connect-timeout` / `--max-time` so the
|
|
13
|
-
* command cannot hang much longer than `timeout` even if the adapter is loose.
|
|
14
|
-
*/
|
|
15
31
|
export declare function isBunnyAgentDaemonHealthy(handle: SandboxHandle, daemonBaseUrl: string, opts?: IsBunnyAgentDaemonHealthyOptions): Promise<boolean>;
|
|
16
32
|
//# sourceMappingURL=daemon-health.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-health.d.ts","sourceRoot":"","sources":["../src/daemon-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-health.d.ts","sourceRoot":"","sources":["../src/daemon-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAkC7D;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GACjC,IAAI,GACJ,cAAc,GACd,iBAAiB,GACjB,eAAe,CAAC;AAEpB,2EAA2E;AAC3E,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,yBAAyB,CAAC;IAClC,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,gCAAgC,GAAG,WAAW,GAAG;IAC3D,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;CACrD,CAAC;AA2MF,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,gCAAgC,GACtC,OAAO,CAAC,OAAO,CAAC,CAyHlB"}
|
package/dist/daemon-health.js
CHANGED
|
@@ -4,10 +4,22 @@ function daemonHealthzUrl(daemonBaseUrl) {
|
|
|
4
4
|
const withoutHealthz = normalized.replace(/\/healthz$/i, "");
|
|
5
5
|
return `${withoutHealthz}${HEALTHZ_PATH}`;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Hard cap on bytes collected from `handle.exec`'s stdout. The curl invocation
|
|
9
|
+
* here only ever prints a short status code (e.g. `"200"`), so a well-behaved
|
|
10
|
+
* exec produces a handful of bytes — this cap only guards against a
|
|
11
|
+
* misbehaving/adversarial adapter streaming unbounded output and growing this
|
|
12
|
+
* buffer without limit.
|
|
13
|
+
*/
|
|
14
|
+
const MAX_COLLECTED_BYTES = 4096;
|
|
7
15
|
async function collectExecUtf8(iterable) {
|
|
8
16
|
const decoder = new TextDecoder();
|
|
9
17
|
let out = "";
|
|
18
|
+
let collectedBytes = 0;
|
|
10
19
|
for await (const chunk of iterable) {
|
|
20
|
+
collectedBytes += chunk.byteLength;
|
|
21
|
+
if (collectedBytes > MAX_COLLECTED_BYTES)
|
|
22
|
+
break;
|
|
11
23
|
out += decoder.decode(chunk, { stream: true });
|
|
12
24
|
}
|
|
13
25
|
out += decoder.decode();
|
|
@@ -15,22 +27,42 @@ async function collectExecUtf8(iterable) {
|
|
|
15
27
|
}
|
|
16
28
|
/** Default exec + curl wall clock for one health probe (ms). */
|
|
17
29
|
const DEFAULT_DAEMON_HEALTH_TIMEOUT_MS = 4000;
|
|
30
|
+
function monotonicNowMs() {
|
|
31
|
+
return Number(process.hrtime.bigint() / 1000000n);
|
|
32
|
+
}
|
|
33
|
+
function reportAttempt(onAttempt, info) {
|
|
34
|
+
if (!onAttempt)
|
|
35
|
+
return;
|
|
36
|
+
try {
|
|
37
|
+
onAttempt(info);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Diagnostics must never affect probe behavior.
|
|
41
|
+
}
|
|
42
|
+
}
|
|
18
43
|
/**
|
|
19
|
-
* Runs `curl` against `<base>/healthz` inside the sandbox
|
|
20
|
-
*
|
|
44
|
+
* Runs one `curl` attempt against `<base>/healthz` inside the sandbox, bounded by
|
|
45
|
+
* `timeoutMs` on the CALLER's side — a promise-level wait bound, not a guarantee
|
|
46
|
+
* the underlying `handle.exec` call actually terminates. On timeout, an
|
|
47
|
+
* `AbortController` is aborted and passed through `ExecOptions.signal` so
|
|
48
|
+
* adapters that honor `AbortSignal` actually stop the underlying command;
|
|
49
|
+
* adapters that don't are left running (same as before this change), but the
|
|
50
|
+
* attempt itself always settles at or shortly after `timeoutMs`.
|
|
21
51
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
52
|
+
* Returns both the boolean outcome and the attempt's failure classification,
|
|
53
|
+
* plus (when it timed out) the still-pending inner exec promise so the caller
|
|
54
|
+
* can track it instead of treating an unconfirmed attempt as safe to retry.
|
|
24
55
|
*/
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
const maxAttempts = Math.max(1, opts?.maxAttempts ?? 1);
|
|
28
|
-
const delayMs = Math.max(0, opts?.delayMs ?? 0);
|
|
29
|
-
const timeout = Math.min(30_000, Math.max(500, opts?.timeout ?? DEFAULT_DAEMON_HEALTH_TIMEOUT_MS));
|
|
30
|
-
const cwd = opts?.cwd ?? handle.getWorkdir();
|
|
31
|
-
const maxTimeSec = Math.max(1, Math.ceil(timeout / 1000));
|
|
56
|
+
async function runOneAttempt(handle, healthzUrl, cwd, timeoutMs, signal, env) {
|
|
57
|
+
const maxTimeSec = Math.max(1, Math.ceil(timeoutMs / 1000));
|
|
32
58
|
const connectTimeoutSec = Math.min(maxTimeSec, 5);
|
|
33
|
-
|
|
59
|
+
const controller = new AbortController();
|
|
60
|
+
const forwardAbort = () => controller.abort();
|
|
61
|
+
signal?.addEventListener("abort", forwardAbort, { once: true });
|
|
62
|
+
if (signal?.aborted)
|
|
63
|
+
controller.abort();
|
|
64
|
+
let innerSettled = false;
|
|
65
|
+
const innerPromise = (async () => {
|
|
34
66
|
try {
|
|
35
67
|
const text = await collectExecUtf8(handle.exec([
|
|
36
68
|
"curl",
|
|
@@ -46,21 +78,202 @@ export async function isBunnyAgentDaemonHealthy(handle, daemonBaseUrl, opts) {
|
|
|
46
78
|
healthzUrl,
|
|
47
79
|
], {
|
|
48
80
|
cwd,
|
|
49
|
-
timeout,
|
|
50
|
-
signal:
|
|
51
|
-
env
|
|
81
|
+
timeout: timeoutMs,
|
|
82
|
+
signal: controller.signal,
|
|
83
|
+
env,
|
|
52
84
|
}));
|
|
53
85
|
if (text.trim() === "200") {
|
|
54
|
-
return true;
|
|
86
|
+
return { healthy: true, reason: "ok" };
|
|
55
87
|
}
|
|
88
|
+
return { healthy: false, reason: "http-non-200" };
|
|
56
89
|
}
|
|
57
90
|
catch {
|
|
58
|
-
// Connection failure, spawn error,
|
|
91
|
+
// Connection failure, spawn error, abort, etc. An abort triggered by
|
|
92
|
+
// our own timeout is reported as probe-timeout below, not here — this
|
|
93
|
+
// branch's classification only matters when it wins the race.
|
|
94
|
+
return { healthy: false, reason: "transport-error" };
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
innerSettled = true;
|
|
98
|
+
}
|
|
99
|
+
})();
|
|
100
|
+
let timer;
|
|
101
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
102
|
+
timer = setTimeout(() => {
|
|
103
|
+
controller.abort();
|
|
104
|
+
resolve("timeout");
|
|
105
|
+
}, timeoutMs);
|
|
106
|
+
});
|
|
107
|
+
try {
|
|
108
|
+
const result = await Promise.race([innerPromise, timeoutPromise]);
|
|
109
|
+
if (result === "timeout") {
|
|
110
|
+
// Lost the race to our own timeout. innerSettled is checked (not
|
|
111
|
+
// assumed) because `controller.abort()` above can let the inner exec
|
|
112
|
+
// reject synchronously-enough to settle in the same microtask batch —
|
|
113
|
+
// in that case report its real outcome instead of a spurious timeout.
|
|
114
|
+
if (innerSettled)
|
|
115
|
+
return await innerPromise;
|
|
116
|
+
// Attach a no-op consumer so this never becomes an unhandled
|
|
117
|
+
// rejection, and hand the still-pending promise back to the caller so
|
|
118
|
+
// it can track the outstanding attempt instead of assuming it's done.
|
|
119
|
+
innerPromise.catch(() => { });
|
|
120
|
+
return { healthy: false, reason: "probe-timeout", pending: innerPromise };
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
clearTimeout(timer);
|
|
126
|
+
signal?.removeEventListener("abort", forwardAbort);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Runs `curl` against `<base>/healthz` inside the sandbox via the handle's `exec` method.
|
|
131
|
+
* Returns true only when the HTTP status line is **200** (`-w '%{http_code}'`).
|
|
132
|
+
*
|
|
133
|
+
* Defaults: **one attempt**, **~4s** budget, and curl `--connect-timeout` / `--max-time` so the
|
|
134
|
+
* command cannot hang much longer than `timeout` even if the adapter is loose. Each attempt is
|
|
135
|
+
* additionally bounded by its own `AbortController`-backed race (see `runOneAttempt`) so a
|
|
136
|
+
* sandbox adapter that does not honor `exec`'s `timeout`/`signal` options cannot stall this
|
|
137
|
+
* promise past `timeout` — though the underlying exec call itself may keep running; this is a
|
|
138
|
+
* promise-level wait bound, not a guarantee of the exec's actual lifetime.
|
|
139
|
+
*/
|
|
140
|
+
function finiteOr(value, fallback) {
|
|
141
|
+
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
142
|
+
}
|
|
143
|
+
/** Hard clamp on attempts so a caller-supplied value can't build an unbounded total deadline. */
|
|
144
|
+
const MAX_ATTEMPTS_CAP = 100;
|
|
145
|
+
/**
|
|
146
|
+
* Cross-call outstanding-exec tracker, keyed by `SandboxHandle` instance then
|
|
147
|
+
* normalized `/healthz` URL. A single `isBunnyAgentDaemonHealthy` call already
|
|
148
|
+
* refuses to start attempt N+1 while attempt N's exec is unconfirmed (see the
|
|
149
|
+
* `outstanding` local below) — this map extends that same no-overlapping-exec
|
|
150
|
+
* rule across SEPARATE calls: if call A's last attempt timed out without
|
|
151
|
+
* confirmed settlement and returned `false`, a subsequent call B for the same
|
|
152
|
+
* handle+endpoint must not start a brand new exec while A's is still
|
|
153
|
+
* potentially running in the sandbox. The `WeakMap` on `SandboxHandle` means
|
|
154
|
+
* entries for a garbage-collected handle are reclaimed automatically; the
|
|
155
|
+
* inner `Map` is capped so an adapter that churns through many distinct
|
|
156
|
+
* endpoint strings for one handle can't grow it without bound.
|
|
157
|
+
*/
|
|
158
|
+
const MAX_TRACKED_ENDPOINTS_PER_HANDLE = 50;
|
|
159
|
+
const crossCallOutstanding = new WeakMap();
|
|
160
|
+
function takeCrossCallOutstanding(handle, url) {
|
|
161
|
+
return crossCallOutstanding.get(handle)?.get(url) ?? null;
|
|
162
|
+
}
|
|
163
|
+
function setCrossCallOutstanding(handle, url, p) {
|
|
164
|
+
let byUrl = crossCallOutstanding.get(handle);
|
|
165
|
+
if (!byUrl) {
|
|
166
|
+
byUrl = new Map();
|
|
167
|
+
crossCallOutstanding.set(handle, byUrl);
|
|
168
|
+
}
|
|
169
|
+
// Never evict an unconfirmed operation: doing so would permit a duplicate
|
|
170
|
+
// exec for its endpoint. New endpoints are refused at capacity before exec.
|
|
171
|
+
byUrl.set(url, p);
|
|
172
|
+
p.then(() => clearCrossCallOutstanding(handle, url, p), () => clearCrossCallOutstanding(handle, url, p));
|
|
173
|
+
}
|
|
174
|
+
function clearCrossCallOutstanding(handle, url, expected) {
|
|
175
|
+
const byUrl = crossCallOutstanding.get(handle);
|
|
176
|
+
if (!byUrl)
|
|
177
|
+
return;
|
|
178
|
+
// Only clear if this is still the entry we set — a newer call may have
|
|
179
|
+
// already replaced it (shouldn't happen given the fail-closed check below,
|
|
180
|
+
// but guards against a stale callback mutating a successor's entry).
|
|
181
|
+
if (byUrl.get(url) === expected)
|
|
182
|
+
byUrl.delete(url);
|
|
183
|
+
}
|
|
184
|
+
export async function isBunnyAgentDaemonHealthy(handle, daemonBaseUrl, opts) {
|
|
185
|
+
const healthzUrl = daemonHealthzUrl(daemonBaseUrl);
|
|
186
|
+
const maxAttempts = Math.min(MAX_ATTEMPTS_CAP, Math.max(1, Math.trunc(finiteOr(opts?.maxAttempts, 1))));
|
|
187
|
+
const delayMs = Math.max(0, finiteOr(opts?.delayMs, 0));
|
|
188
|
+
const timeout = Math.min(30_000, Math.max(500, finiteOr(opts?.timeout, DEFAULT_DAEMON_HEALTH_TIMEOUT_MS)));
|
|
189
|
+
const cwd = opts?.cwd ?? handle.getWorkdir();
|
|
190
|
+
// This call's own total deadline — computed once, up front, from the
|
|
191
|
+
// worst-case schedule (every attempt using its full timeout, every
|
|
192
|
+
// inter-attempt delay elapsing in full). Bounds the whole call, including
|
|
193
|
+
// time spent waiting on a prior attempt's unconfirmed exec, so a
|
|
194
|
+
// non-cooperating adapter can stall at most one call's worth of time
|
|
195
|
+
// instead of accumulating unbounded waits across retries.
|
|
196
|
+
const totalDeadlineAt = monotonicNowMs() +
|
|
197
|
+
timeout * maxAttempts +
|
|
198
|
+
delayMs * Math.max(0, maxAttempts - 1);
|
|
199
|
+
const remainingBudgetMs = () => Math.max(0, totalDeadlineAt - monotonicNowMs());
|
|
200
|
+
// Pre-aborted callers must never start a new exec at all — not even the
|
|
201
|
+
// first attempt. A signal that is already aborted when we're called means
|
|
202
|
+
// the caller has already given up on this probe.
|
|
203
|
+
if (opts?.signal?.aborted)
|
|
204
|
+
return false;
|
|
205
|
+
// A previous, separate call to this function for the same handle+endpoint
|
|
206
|
+
// left its last attempt unconfirmed. Starting a brand new exec here would
|
|
207
|
+
// overlap it in the sandbox — fail closed for this call instead (same
|
|
208
|
+
// no-overlapping-exec rule as the in-call `outstanding` tracker below, just
|
|
209
|
+
// extended across calls).
|
|
210
|
+
const crossCallPrior = takeCrossCallOutstanding(handle, healthzUrl);
|
|
211
|
+
if (crossCallPrior)
|
|
212
|
+
return false;
|
|
213
|
+
if ((crossCallOutstanding.get(handle)?.size ?? 0) >=
|
|
214
|
+
MAX_TRACKED_ENDPOINTS_PER_HANDLE) {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
// A timed-out-but-unconfirmed attempt's inner exec promise. While this is
|
|
218
|
+
// set, no new exec is issued for this call — issuing one would overlap a
|
|
219
|
+
// still-potentially-running exec in the sandbox for the same identity
|
|
220
|
+
// (the no-overlapping-exec rule). Registering it cross-call (below)
|
|
221
|
+
// attaches a no-op consumer so it never becomes an unhandled rejection
|
|
222
|
+
// even if this function returns before it settles.
|
|
223
|
+
let outstanding = null;
|
|
224
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
225
|
+
if (outstanding) {
|
|
226
|
+
// Bound the wait on the prior attempt's unconfirmed exec by the same
|
|
227
|
+
// per-attempt timeout used for a fresh attempt — this function has no
|
|
228
|
+
// wider deadline of its own to bound against (callers layering an
|
|
229
|
+
// overall deadline on top, e.g. embedded-daemon.ts's poll loop, do
|
|
230
|
+
// their own bounding via their own Deadline). Waiting forever here
|
|
231
|
+
// would turn a single non-cooperating adapter into a hang instead of
|
|
232
|
+
// the documented "resolves false at or shortly after timeout" contract.
|
|
233
|
+
const outcome = await Promise.race([
|
|
234
|
+
outstanding.then(() => "settled"),
|
|
235
|
+
new Promise((r) => setTimeout(() => r("wait-expired"), Math.min(timeout, remainingBudgetMs()))),
|
|
236
|
+
]);
|
|
237
|
+
if (outcome === "wait-expired") {
|
|
238
|
+
// The prior exec STILL hasn't confirmed settlement. Starting a new
|
|
239
|
+
// exec here would violate the no-overlapping-exec rule — the whole
|
|
240
|
+
// point of tracking `outstanding` across iterations. Give up for
|
|
241
|
+
// this call instead of launching a duplicate, registering it in the
|
|
242
|
+
// cross-call map so a subsequent SEPARATE call also waits.
|
|
243
|
+
setCrossCallOutstanding(handle, healthzUrl, outstanding);
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
outstanding = null;
|
|
247
|
+
}
|
|
248
|
+
if (remainingBudgetMs() <= 0)
|
|
249
|
+
break;
|
|
250
|
+
const attemptStart = monotonicNowMs();
|
|
251
|
+
const { healthy, reason, pending } = await runOneAttempt(handle, healthzUrl, cwd, Math.min(timeout, remainingBudgetMs()), opts?.signal, opts?.env);
|
|
252
|
+
reportAttempt(opts?.onAttempt, {
|
|
253
|
+
attempt,
|
|
254
|
+
latencyMs: monotonicNowMs() - attemptStart,
|
|
255
|
+
reason,
|
|
256
|
+
healthy,
|
|
257
|
+
});
|
|
258
|
+
if (healthy)
|
|
259
|
+
return true;
|
|
260
|
+
if (pending) {
|
|
261
|
+
// This attempt timed out without confirmed settlement. Do not start
|
|
262
|
+
// attempt N+1's exec until it resolves (checked at the top of the next
|
|
263
|
+
// loop iteration) — even if that means skipping the inter-attempt delay.
|
|
264
|
+
outstanding = pending;
|
|
265
|
+
continue;
|
|
59
266
|
}
|
|
60
267
|
if (attempt < maxAttempts && delayMs > 0) {
|
|
61
|
-
await new Promise((r) => setTimeout(r, delayMs));
|
|
268
|
+
await new Promise((r) => setTimeout(r, Math.min(delayMs, remainingBudgetMs())));
|
|
62
269
|
}
|
|
63
270
|
}
|
|
271
|
+
// Never block the final return on an outstanding attempt that may never
|
|
272
|
+
// settle — register it cross-call (so a subsequent SEPARATE call for this
|
|
273
|
+
// handle+endpoint also refuses to overlap it) and consume it quietly in
|
|
274
|
+
// the background.
|
|
275
|
+
if (outstanding)
|
|
276
|
+
setCrossCallOutstanding(handle, healthzUrl, outstanding);
|
|
64
277
|
return false;
|
|
65
278
|
}
|
|
66
279
|
//# sourceMappingURL=daemon-health.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-health.js","sourceRoot":"","sources":["../src/daemon-health.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,SAAS,gBAAgB,CAAC,aAAqB;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,GAAG,cAAc,GAAG,YAAY,EAAE,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,QAAmC;IAEnC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QACnC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-health.js","sourceRoot":"","sources":["../src/daemon-health.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,SAAS,gBAAgB,CAAC,aAAqB;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,GAAG,cAAc,GAAG,YAAY,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,KAAK,UAAU,eAAe,CAC5B,QAAmC;IAEnC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QACnC,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,cAAc,GAAG,mBAAmB;YAAE,MAAM;QAChD,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;AAsCD,gEAAgE;AAChE,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAE9C,SAAS,cAAc;IACrB,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,QAAU,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CACpB,SAAgE,EAChE,IAA6B;IAE7B,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,aAAa,CAC1B,MAAqB,EACrB,UAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,MAA+B,EAC/B,GAAuC;IAOvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC9C,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,IAAI,MAAM,EAAE,OAAO;QAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IAExC,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,MAAM,YAAY,GAAG,CAAC,KAAK,IAGxB,EAAE;QACH,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAChC,MAAM,CAAC,IAAI,CACT;gBACE,MAAM;gBACN,KAAK;gBACL,IAAI;gBACJ,WAAW;gBACX,IAAI;gBACJ,cAAc;gBACd,mBAAmB;gBACnB,MAAM,CAAC,iBAAiB,CAAC;gBACzB,YAAY;gBACZ,MAAM,CAAC,UAAU,CAAC;gBAClB,UAAU;aACX,EACD;gBACE,GAAG;gBACH,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,GAAG;aACJ,CACF,CACF,CAAC;YACF,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;gBAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACzC,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,sEAAsE;YACtE,8DAA8D;YAC9D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;QACvD,CAAC;gBAAS,CAAC;YACT,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,IAAI,KAAiC,CAAC;IACtC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE;QACxD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;QAClE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,iEAAiE;YACjE,qEAAqE;YACrE,sEAAsE;YACtE,sEAAsE;YACtE,IAAI,YAAY;gBAAE,OAAO,MAAM,YAAY,CAAC;YAC5C,6DAA6D;YAC7D,sEAAsE;YACtE,sEAAsE;YACtE,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC5E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,QAAQ,CAAmB,KAAoB,EAAE,QAAW;IACnE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,iGAAiG;AACjG,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAC5C,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAGrC,CAAC;AAEJ,SAAS,wBAAwB,CAC/B,MAAqB,EACrB,GAAW;IAEX,OAAO,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC5D,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAqB,EACrB,GAAW,EACX,CAAmB;IAEnB,IAAI,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAClB,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,0EAA0E;IAC1E,4EAA4E;IAC5E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,IAAI,CACJ,GAAG,EAAE,CAAC,yBAAyB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAC/C,GAAG,EAAE,CAAC,yBAAyB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,MAAqB,EACrB,GAAW,EACX,QAA0B;IAE1B,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,uEAAuE;IACvE,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;QAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAqB,EACrB,aAAqB,EACrB,IAAuC;IAEvC,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,gBAAgB,EAChB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CACxD,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,MAAM,EACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,gCAAgC,CAAC,CAAC,CACzE,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IAE7C,qEAAqE;IACrE,mEAAmE;IACnE,0EAA0E;IAC1E,iEAAiE;IACjE,qEAAqE;IACrE,0DAA0D;IAC1D,MAAM,eAAe,GACnB,cAAc,EAAE;QAChB,OAAO,GAAG,WAAW;QACrB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,cAAc,EAAE,CAAC,CAAC;IAElD,wEAAwE;IACxE,0EAA0E;IAC1E,iDAAiD;IACjD,IAAI,IAAI,EAAE,MAAM,EAAE,OAAO;QAAE,OAAO,KAAK,CAAC;IAExC,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,4EAA4E;IAC5E,0BAA0B;IAC1B,MAAM,cAAc,GAAG,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpE,IAAI,cAAc;QAAE,OAAO,KAAK,CAAC;IACjC,IACE,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;QAC7C,gCAAgC,EAChC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,sEAAsE;IACtE,oEAAoE;IACpE,uEAAuE;IACvE,mDAAmD;IACnD,IAAI,WAAW,GAA4B,IAAI,CAAC;IAEhD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,qEAAqE;YACrE,sEAAsE;YACtE,kEAAkE;YAClE,mEAAmE;YACnE,mEAAmE;YACnE,qEAAqE;YACrE,wEAAwE;YACxE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAkB,CAAC;gBAC1C,IAAI,OAAO,CAAiB,CAAC,CAAC,EAAE,EAAE,CAChC,UAAU,CACR,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,EACvB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC,CACvC,CACF;aACF,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;gBAC/B,mEAAmE;gBACnE,mEAAmE;gBACnE,iEAAiE;gBACjE,oEAAoE;gBACpE,2DAA2D;gBAC3D,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBACzD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,iBAAiB,EAAE,IAAI,CAAC;YAAE,MAAM;QAEpC,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;QACtC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CACtD,MAAM,EACN,UAAU,EACV,GAAG,EACH,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC,EACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,CACV,CAAC;QACF,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE;YAC7B,OAAO;YACP,SAAS,EAAE,cAAc,EAAE,GAAG,YAAY;YAC1C,MAAM;YACN,OAAO;SACR,CAAC,CAAC;QACH,IAAI,OAAO;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,OAAO,EAAE,CAAC;YACZ,oEAAoE;YACpE,uEAAuE;YACvE,yEAAyE;YACzE,WAAW,GAAG,OAAO,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,GAAG,WAAW,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CACtD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,0EAA0E;IAC1E,wEAAwE;IACxE,kBAAkB;IAClB,IAAI,WAAW;QAAE,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/env.d.ts
CHANGED
|
@@ -32,6 +32,9 @@ export interface RunnerEnvParams {
|
|
|
32
32
|
/** Web search (cross-runner) */
|
|
33
33
|
BRAVE_API_KEY?: string;
|
|
34
34
|
TAVILY_API_KEY?: string;
|
|
35
|
+
/** Web search endpoint overrides (gateways/proxies); vendor defaults when unset. */
|
|
36
|
+
BRAVE_SEARCH_URL?: string;
|
|
37
|
+
TAVILY_SEARCH_URL?: string;
|
|
35
38
|
/** image generation */
|
|
36
39
|
IMAGE_GENERATION_MODEL?: string;
|
|
37
40
|
/**
|
package/dist/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACpD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAmGD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACpD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAmGD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsCxB"}
|
package/dist/env.js
CHANGED
|
@@ -106,6 +106,14 @@ export function buildRunnerEnv(params) {
|
|
|
106
106
|
env.BRAVE_API_KEY = braveKey;
|
|
107
107
|
if (tavilyKey)
|
|
108
108
|
env.TAVILY_API_KEY = tavilyKey;
|
|
109
|
+
// Web search endpoint overrides are optional config (not secrets), so they
|
|
110
|
+
// also fall back to the host environment like IMAGE_GENERATION_MODEL.
|
|
111
|
+
const braveSearchUrl = params.BRAVE_SEARCH_URL || process.env.BRAVE_SEARCH_URL;
|
|
112
|
+
const tavilySearchUrl = params.TAVILY_SEARCH_URL || process.env.TAVILY_SEARCH_URL;
|
|
113
|
+
if (braveSearchUrl)
|
|
114
|
+
env.BRAVE_SEARCH_URL = braveSearchUrl;
|
|
115
|
+
if (tavilySearchUrl)
|
|
116
|
+
env.TAVILY_SEARCH_URL = tavilySearchUrl;
|
|
109
117
|
const imageModel = params.IMAGE_GENERATION_MODEL || process.env.IMAGE_GENERATION_MODEL;
|
|
110
118
|
if (imageModel) {
|
|
111
119
|
env.IMAGE_GENERATION_MODEL = imageModel;
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,9 @@ export type { IsBunnyAgentDaemonHealthyOptions } from "./daemon-health.js";
|
|
|
8
8
|
export { isBunnyAgentDaemonHealthy } from "./daemon-health.js";
|
|
9
9
|
export type { RunnerEnvParams, RunnerType } from "./env.js";
|
|
10
10
|
export { buildRunnerEnv } from "./env.js";
|
|
11
|
+
export type { SandboxExecErrorCode } from "./sandbox-exec-error.js";
|
|
12
|
+
export { ExecDiagnostics, SandboxExecError, validateExecInput, } from "./sandbox-exec-error.js";
|
|
13
|
+
export { posixShellQuote } from "./shell-escape.js";
|
|
11
14
|
export { ConsoleTranscriptWriter, JsonlTranscriptWriter, MemoryTranscriptWriter, MultiTranscriptWriter, } from "./transcript.js";
|
|
12
15
|
export type { BunnyAgentCodingRunBody, BunnyAgentOptions, ExecOptions, McpConfig, McpHttpServerConfig, McpLifecycle, McpServerConfig, McpServerOptions, McpSettings, McpStdioServerConfig, Message, RunnerSpec, SandboxAdapter, SandboxHandle, StreamInput, ToolInputSchema, ToolRef, ToolRuntime, TranscriptEntry, TranscriptWriter, Volume, } from "./types.js";
|
|
13
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sCAAsC,EACtC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sCAAsC,EACtC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,OAAO,EACP,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,MAAM,GACP,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,10 @@ export { DEFAULT_BUNNY_AGENT_DAEMON_URL } from "./constants.js";
|
|
|
6
6
|
export { isBunnyAgentDaemonHealthy } from "./daemon-health.js";
|
|
7
7
|
// Env helpers
|
|
8
8
|
export { buildRunnerEnv } from "./env.js";
|
|
9
|
+
export { ExecDiagnostics, SandboxExecError, validateExecInput, } from "./sandbox-exec-error.js";
|
|
10
|
+
// Shared POSIX shell quoting for adapters that must build a shell command
|
|
11
|
+
// string instead of using independent argv/env channels.
|
|
12
|
+
export { posixShellQuote } from "./shell-escape.js";
|
|
9
13
|
// Local adapters live in their own packages, mirroring the cloud adapters:
|
|
10
14
|
// @bunny-agent/sandbox-local (LocalMachine — NO isolation) and
|
|
11
15
|
// @bunny-agent/sandbox-srt (SrtSandbox — OS-level isolation via
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sCAAsC,EACtC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,cAAc;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sCAAsC,EACtC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,cAAc;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,0EAA0E;AAC1E,yDAAyD;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,2EAA2E;AAC3E,+DAA+D;AAC/D,gEAAgE;AAChE,iEAAiE;AACjE,oCAAoC;AACpC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
|