@bunny-agent/manager 0.9.61-release.7 → 0.9.61-release.8

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.
@@ -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;IAwIrE;;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"}
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"}
@@ -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
- throw new Error("Operation was aborted");
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 && /abort/i.test(error.message));
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
  }
@@ -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":"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"}
@@ -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;AAsB7D,MAAM,MAAM,gCAAgC,GAAG,WAAW,GAAG;IAC3D,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAKF;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,gCAAgC,GACtC,OAAO,CAAC,OAAO,CAAC,CAiDlB"}
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"}
@@ -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 via the handle's `exec` method.
20
- * Returns true only when the HTTP status line is **200** (`-w '%{http_code}'`).
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
- * Defaults: **one attempt**, **~4s** budget, and curl `--connect-timeout` / `--max-time` so the
23
- * command cannot hang much longer than `timeout` even if the adapter is loose.
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
- export async function isBunnyAgentDaemonHealthy(handle, daemonBaseUrl, opts) {
26
- const healthzUrl = daemonHealthzUrl(daemonBaseUrl);
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
- for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
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: opts?.signal,
51
- env: opts?.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, timeout, abort, etc.
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":"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"}
1
+ {"version":3,"file":"daemon-health.js","sourceRoot":"","sources":["../src/daemon-health.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
@@ -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;AAM1C,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"}
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;AAC1C,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"}
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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Deterministic sandbox exec failure classification.
3
+ *
4
+ * - `spawn_failed`: the executable could not be started at all (e.g. ENOENT,
5
+ * EACCES) — only reachable on adapters that spawn without an intermediate
6
+ * shell (e.g. {@link @bunny-agent/sandbox-local}).
7
+ * - `shell_parse_error`: the generated shell string itself failed to parse
8
+ * (e.g. unclosed quote) before any user command could run.
9
+ * - `nonzero_exit`: the command (or the wrapping shell) ran to completion
10
+ * and exited non-zero.
11
+ * - `timeout`: {@link ExecOptions.timeout} elapsed before the command exited.
12
+ * - `aborted`: {@link ExecOptions.signal} fired before the command exited.
13
+ */
14
+ export type SandboxExecErrorCode = "spawn_failed" | "shell_parse_error" | "nonzero_exit" | "timeout" | "aborted";
15
+ /** Bounded capture; partial secrets at the capture boundary are also redacted. */
16
+ export declare class ExecDiagnostics {
17
+ private captured;
18
+ private truncated;
19
+ private readonly secrets;
20
+ constructor(env?: Record<string, string | undefined>);
21
+ append(chunk: string): void;
22
+ redact(value: string): string;
23
+ text(): string;
24
+ failure(error: unknown): SandboxExecError;
25
+ }
26
+ /** Reject invalid inputs before any execution or shell interpolation. */
27
+ export declare function validateExecInput(command: string[], env: Record<string, string | undefined>): void;
28
+ /**
29
+ * Structured error for deterministic sandbox exec startup failures (bad
30
+ * command, shell syntax error, missing executable, nonzero exit).
31
+ *
32
+ * `retryable` is always `false`: replaying an execution after partial output
33
+ * or a transport failure can duplicate side effects. This is a contract for
34
+ * consumers, not an enforcement mechanism for external retry layers. Rethrown unmodified
35
+ * by {@link streamCodingRunFromSandbox} and {@link BunnyAgent.stream}, so it
36
+ * reaches SDK consumers intact instead of being replaced by an "unexpected
37
+ * stream end" error.
38
+ */
39
+ export declare class SandboxExecError extends Error {
40
+ readonly code: SandboxExecErrorCode;
41
+ readonly exitCode: number | null;
42
+ readonly stderr?: string;
43
+ readonly signal?: string | null;
44
+ readonly retryable: false;
45
+ constructor(message: string, options: {
46
+ code: SandboxExecErrorCode;
47
+ exitCode?: number | null;
48
+ stderr?: string;
49
+ cause?: unknown;
50
+ signal?: string | null;
51
+ });
52
+ }
53
+ //# sourceMappingURL=sandbox-exec-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-exec-error.d.ts","sourceRoot":"","sources":["../src/sandbox-exec-error.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,mBAAmB,GACnB,cAAc,GACd,SAAS,GACT,SAAS,CAAC;AA0Bd,kFAAkF;AAClF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;gBAEvB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAM;IAMxD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO3B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAM7B,IAAI,IAAI,MAAM;IAoBd,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;CAgB1C;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,IAAI,CAWN;AAED;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAG,KAAK,CAAU;gBAGlC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,IAAI,EAAE,oBAAoB,CAAC;QAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB;CAaJ"}