@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.
@@ -109,5 +109,422 @@ describe("isBunnyAgentDaemonHealthy", () => {
109
109
  delayMs: 0,
110
110
  })).resolves.toBe(false);
111
111
  });
112
+ describe("maxAttempts > 1 with delayMs > 0", () => {
113
+ it("retries after a first-attempt failure and returns true on the second attempt's success, waiting the configured delay in between", async () => {
114
+ let calls = 0;
115
+ const handle = mockHandle(async function* () {
116
+ calls += 1;
117
+ if (calls === 1) {
118
+ yield new TextEncoder().encode("503");
119
+ return;
120
+ }
121
+ yield new TextEncoder().encode("200");
122
+ });
123
+ const start = Date.now();
124
+ await expect(isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
125
+ maxAttempts: 2,
126
+ delayMs: 50,
127
+ })).resolves.toBe(true);
128
+ const elapsed = Date.now() - start;
129
+ expect(calls).toBe(2);
130
+ // Scheduler jitter tolerance only — no added fixed margin.
131
+ expect(elapsed).toBeGreaterThanOrEqual(45);
132
+ });
133
+ it("does not wait the inter-attempt delay after the final attempt", async () => {
134
+ const handle = mockHandle(async function* () {
135
+ yield new TextEncoder().encode("503");
136
+ });
137
+ const start = Date.now();
138
+ await expect(isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
139
+ maxAttempts: 1,
140
+ delayMs: 5_000,
141
+ })).resolves.toBe(false);
142
+ expect(Date.now() - start).toBeLessThan(1_000);
143
+ });
144
+ it("exhausts all attempts and returns false when every attempt fails", async () => {
145
+ let calls = 0;
146
+ const handle = mockHandle(async function* () {
147
+ calls += 1;
148
+ yield new TextEncoder().encode("503");
149
+ });
150
+ await expect(isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
151
+ maxAttempts: 3,
152
+ delayMs: 1,
153
+ })).resolves.toBe(false);
154
+ expect(calls).toBe(3);
155
+ });
156
+ });
157
+ describe("attempt-level timeout independent of handle.exec", () => {
158
+ it("resolves false at or shortly after the configured timeout when exec never settles, and aborts the signal", async () => {
159
+ let observedSignal;
160
+ const handle = {
161
+ getSandboxId: () => "mock",
162
+ getVolumes: () => null,
163
+ getWorkdir: () => "/workspace",
164
+ exec: vi.fn((_cmd, opts) => {
165
+ observedSignal = opts?.signal;
166
+ return {
167
+ [Symbol.asyncIterator]() {
168
+ // Never resolves and never rejects — simulates an adapter that
169
+ // does not honor the timeout/signal it was given.
170
+ return { next: () => new Promise(() => { }) };
171
+ },
172
+ };
173
+ }),
174
+ upload: vi.fn(),
175
+ readFile: vi.fn(),
176
+ destroy: vi.fn(),
177
+ };
178
+ const start = Date.now();
179
+ await expect(isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
180
+ maxAttempts: 1,
181
+ delayMs: 0,
182
+ timeout: 500,
183
+ })).resolves.toBe(false);
184
+ const elapsed = Date.now() - start;
185
+ // Bounded by the timeout plus only scheduler jitter — not an added
186
+ // fixed margin, and not hanging indefinitely.
187
+ expect(elapsed).toBeGreaterThanOrEqual(450);
188
+ expect(elapsed).toBeLessThan(1_500);
189
+ expect(observedSignal).toBeInstanceOf(AbortSignal);
190
+ expect(observedSignal?.aborted).toBe(true);
191
+ });
192
+ it("reports probe-timeout via onAttempt when exec never settles", async () => {
193
+ const handle = {
194
+ getSandboxId: () => "mock",
195
+ getVolumes: () => null,
196
+ getWorkdir: () => "/workspace",
197
+ exec: vi.fn(() => ({
198
+ [Symbol.asyncIterator]() {
199
+ return { next: () => new Promise(() => { }) };
200
+ },
201
+ })),
202
+ upload: vi.fn(),
203
+ readFile: vi.fn(),
204
+ destroy: vi.fn(),
205
+ };
206
+ const attempts = [];
207
+ await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
208
+ maxAttempts: 1,
209
+ delayMs: 0,
210
+ timeout: 300,
211
+ onAttempt: (info) => attempts.push({ reason: info.reason, healthy: info.healthy }),
212
+ });
213
+ expect(attempts).toEqual([{ reason: "probe-timeout", healthy: false }]);
214
+ });
215
+ it("still resolves true when the daemon responds within the timeout", async () => {
216
+ const handle = mockHandle(async function* () {
217
+ yield new TextEncoder().encode("200");
218
+ });
219
+ await expect(isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
220
+ maxAttempts: 1,
221
+ delayMs: 0,
222
+ timeout: 500,
223
+ })).resolves.toBe(true);
224
+ });
225
+ });
226
+ describe("no-overlapping-exec rule across maxAttempts > 1 (real exec concurrency, not a mocked boolean)", () => {
227
+ it("never calls handle.exec a second time while the first attempt's exec is still pending", async () => {
228
+ let concurrentExecs = 0;
229
+ let maxConcurrentExecs = 0;
230
+ let releaseFirst;
231
+ let callCount = 0;
232
+ const handle = {
233
+ getSandboxId: () => "mock",
234
+ getVolumes: () => null,
235
+ getWorkdir: () => "/workspace",
236
+ exec: vi.fn(() => {
237
+ callCount += 1;
238
+ concurrentExecs += 1;
239
+ maxConcurrentExecs = Math.max(maxConcurrentExecs, concurrentExecs);
240
+ const isFirstCall = callCount === 1;
241
+ return {
242
+ [Symbol.asyncIterator]() {
243
+ return {
244
+ next: () => new Promise((resolve) => {
245
+ if (isFirstCall) {
246
+ // Never settles on its own — only resolved once the
247
+ // test explicitly calls releaseFirst() below. Combined
248
+ // with a tiny attempt timeout, this simulates a stuck
249
+ // exec that the adapter does not honor the abort for.
250
+ releaseFirst = () => {
251
+ concurrentExecs -= 1;
252
+ resolve({ done: true, value: undefined });
253
+ };
254
+ return;
255
+ }
256
+ concurrentExecs -= 1;
257
+ resolve({
258
+ done: false,
259
+ value: new TextEncoder().encode("200"),
260
+ });
261
+ }),
262
+ };
263
+ },
264
+ };
265
+ }),
266
+ upload: vi.fn(),
267
+ readFile: vi.fn(),
268
+ destroy: vi.fn(),
269
+ };
270
+ const resultPromise = isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
271
+ maxAttempts: 2,
272
+ delayMs: 0,
273
+ timeout: 100,
274
+ });
275
+ // Let the first attempt time out (timeout=100ms) without its exec
276
+ // settling, then give the loop a chance to (incorrectly, if the bug
277
+ // were present) start a second exec immediately afterward.
278
+ await new Promise((r) => setTimeout(r, 250));
279
+ // The real regression this guards: attempt 2 must NOT have started
280
+ // its exec while attempt 1's exec is still outstanding.
281
+ expect(callCount).toBe(1);
282
+ expect(maxConcurrentExecs).toBe(1);
283
+ releaseFirst?.();
284
+ await resultPromise;
285
+ expect(maxConcurrentExecs).toBe(1);
286
+ });
287
+ it("with maxAttempts=3 and an exec that never settles, never issues a second exec for the whole call", async () => {
288
+ // Regression test for the actual bug: the retry loop raced `outstanding`
289
+ // against a wait-timer bounded by `timeout`, then unconditionally set
290
+ // `outstanding = null` regardless of which side won — so once the wait
291
+ // timer (not the real exec) won the race, the loop proceeded to launch
292
+ // attempt 2's exec anyway, overlapping the still-running attempt 1 exec.
293
+ // With a never-settling exec and maxAttempts=3, a correct implementation
294
+ // must call handle.exec exactly once for the ENTIRE call, not once per
295
+ // attempt.
296
+ let callCount = 0;
297
+ const handle = {
298
+ getSandboxId: () => "mock",
299
+ getVolumes: () => null,
300
+ getWorkdir: () => "/workspace",
301
+ exec: vi.fn(() => {
302
+ callCount += 1;
303
+ return {
304
+ [Symbol.asyncIterator]() {
305
+ // Never resolves and never rejects for the lifetime of the test.
306
+ return { next: () => new Promise(() => { }) };
307
+ },
308
+ };
309
+ }),
310
+ upload: vi.fn(),
311
+ readFile: vi.fn(),
312
+ destroy: vi.fn(),
313
+ };
314
+ const result = await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
315
+ maxAttempts: 3,
316
+ delayMs: 0,
317
+ timeout: 100,
318
+ });
319
+ expect(result).toBe(false);
320
+ // Exactly one exec for the whole call: attempt 1's exec times out
321
+ // without confirming settlement, and the no-overlapping-exec rule must
322
+ // refuse to start attempt 2's (or attempt 3's) exec while it's still
323
+ // outstanding — the call gives up rather than launching a duplicate.
324
+ expect(callCount).toBe(1);
325
+ });
326
+ it("refuses to start a new exec on a second, separate call for the same handle+endpoint while the first call's exec is still outstanding", async () => {
327
+ let callCount = 0;
328
+ const handle = {
329
+ getSandboxId: () => "mock",
330
+ getVolumes: () => null,
331
+ getWorkdir: () => "/workspace",
332
+ exec: vi.fn(() => {
333
+ callCount += 1;
334
+ return {
335
+ [Symbol.asyncIterator]() {
336
+ return { next: () => new Promise(() => { }) };
337
+ },
338
+ };
339
+ }),
340
+ upload: vi.fn(),
341
+ readFile: vi.fn(),
342
+ destroy: vi.fn(),
343
+ };
344
+ const first = await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
345
+ maxAttempts: 1,
346
+ timeout: 100,
347
+ });
348
+ expect(first).toBe(false);
349
+ expect(callCount).toBe(1);
350
+ // A second, separate call for the SAME handle and the same endpoint,
351
+ // issued right after the first call returns, must not start a new exec
352
+ // while the first call's exec is still unconfirmed in the background.
353
+ const second = await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
354
+ maxAttempts: 1,
355
+ timeout: 100,
356
+ });
357
+ expect(second).toBe(false);
358
+ expect(callCount).toBe(1);
359
+ });
360
+ it("does not start any exec when the signal is already aborted before the call", async () => {
361
+ const exec = vi.fn();
362
+ const handle = {
363
+ getSandboxId: () => "mock",
364
+ getVolumes: () => null,
365
+ getWorkdir: () => "/workspace",
366
+ exec,
367
+ upload: vi.fn(),
368
+ readFile: vi.fn(),
369
+ destroy: vi.fn(),
370
+ };
371
+ const controller = new AbortController();
372
+ controller.abort();
373
+ const result = await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
374
+ maxAttempts: 3,
375
+ signal: controller.signal,
376
+ });
377
+ expect(result).toBe(false);
378
+ expect(exec).not.toHaveBeenCalled();
379
+ });
380
+ });
381
+ describe("bounded stdout collection", () => {
382
+ it("does not hang or grow without bound when exec streams far more than a status code", async () => {
383
+ const handle = {
384
+ getSandboxId: () => "mock",
385
+ getVolumes: () => null,
386
+ getWorkdir: () => "/workspace",
387
+ exec: vi.fn(() => {
388
+ async function* huge() {
389
+ // Stream well past the internal cap, interleaved with a trailing
390
+ // "200" that must NOT be allowed to flip the result to healthy —
391
+ // once the cap is exceeded, excess output is dropped.
392
+ for (let i = 0; i < 50; i += 1) {
393
+ yield new TextEncoder().encode("x".repeat(200));
394
+ }
395
+ yield new TextEncoder().encode("200");
396
+ }
397
+ return huge();
398
+ }),
399
+ upload: vi.fn(),
400
+ readFile: vi.fn(),
401
+ destroy: vi.fn(),
402
+ };
403
+ const result = await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
404
+ maxAttempts: 1,
405
+ timeout: 2_000,
406
+ });
407
+ expect(result).toBe(false);
408
+ });
409
+ });
410
+ describe("non-finite option inputs do not poison the deadline/attempt math", () => {
411
+ it("falls back to defaults for NaN timeout/maxAttempts/delayMs instead of hanging forever", async () => {
412
+ const handle = mockHandle(async function* () {
413
+ yield new TextEncoder().encode("200");
414
+ });
415
+ const start = Date.now();
416
+ await expect(isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
417
+ maxAttempts: Number.NaN,
418
+ delayMs: Number.NaN,
419
+ timeout: Number.NaN,
420
+ })).resolves.toBe(true);
421
+ expect(Date.now() - start).toBeLessThan(5_000);
422
+ });
423
+ });
424
+ describe("failure classification via onAttempt (internal diagnostics, not part of the boolean contract)", () => {
425
+ it("classifies a non-200 response as http-non-200", async () => {
426
+ const handle = mockHandle(async function* () {
427
+ yield new TextEncoder().encode("503");
428
+ });
429
+ const attempts = [];
430
+ await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
431
+ maxAttempts: 1,
432
+ delayMs: 0,
433
+ onAttempt: (info) => attempts.push(info.reason),
434
+ });
435
+ expect(attempts).toEqual(["http-non-200"]);
436
+ });
437
+ it("classifies a synchronous exec throw as transport-error", async () => {
438
+ const handle = {
439
+ getSandboxId: () => "mock",
440
+ getVolumes: () => null,
441
+ getWorkdir: () => "/workspace",
442
+ exec: vi.fn(() => {
443
+ throw new Error("spawn curl ENOENT");
444
+ }),
445
+ upload: vi.fn(),
446
+ readFile: vi.fn(),
447
+ destroy: vi.fn(),
448
+ };
449
+ const attempts = [];
450
+ await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
451
+ maxAttempts: 1,
452
+ delayMs: 0,
453
+ onAttempt: (info) => attempts.push(info.reason),
454
+ });
455
+ expect(attempts).toEqual(["transport-error"]);
456
+ });
457
+ it("classifies an async-iterator rejection as transport-error", async () => {
458
+ const handle = mockHandle(() => ({
459
+ [Symbol.asyncIterator]() {
460
+ return {
461
+ next() {
462
+ return Promise.reject(new Error("curl failed"));
463
+ },
464
+ };
465
+ },
466
+ }));
467
+ const attempts = [];
468
+ await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
469
+ maxAttempts: 1,
470
+ delayMs: 0,
471
+ onAttempt: (info) => attempts.push(info.reason),
472
+ });
473
+ expect(attempts).toEqual(["transport-error"]);
474
+ });
475
+ it("classifies a successful 200 response as ok", async () => {
476
+ const handle = mockHandle(async function* () {
477
+ yield new TextEncoder().encode("200");
478
+ });
479
+ const attempts = [];
480
+ await isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
481
+ maxAttempts: 1,
482
+ delayMs: 0,
483
+ onAttempt: (info) => attempts.push({ reason: info.reason, healthy: info.healthy }),
484
+ });
485
+ expect(attempts).toEqual([{ reason: "ok", healthy: true }]);
486
+ });
487
+ it("distinguishes http-non-200 from transport-error across separate calls, both returning false", async () => {
488
+ const httpFailureHandle = mockHandle(async function* () {
489
+ yield new TextEncoder().encode("503");
490
+ });
491
+ const transportFailureHandle = {
492
+ getSandboxId: () => "mock",
493
+ getVolumes: () => null,
494
+ getWorkdir: () => "/workspace",
495
+ exec: vi.fn(() => {
496
+ throw new Error("spawn curl ENOENT");
497
+ }),
498
+ upload: vi.fn(),
499
+ readFile: vi.fn(),
500
+ destroy: vi.fn(),
501
+ };
502
+ const httpReasons = [];
503
+ const transportReasons = [];
504
+ const httpResult = await isBunnyAgentDaemonHealthy(httpFailureHandle, "http://127.0.0.1:3080", {
505
+ maxAttempts: 1,
506
+ onAttempt: (info) => httpReasons.push(info.reason),
507
+ });
508
+ const transportResult = await isBunnyAgentDaemonHealthy(transportFailureHandle, "http://127.0.0.1:3080", {
509
+ maxAttempts: 1,
510
+ onAttempt: (info) => transportReasons.push(info.reason),
511
+ });
512
+ expect(httpResult).toBe(false);
513
+ expect(transportResult).toBe(false);
514
+ expect(httpReasons).toEqual(["http-non-200"]);
515
+ expect(transportReasons).toEqual(["transport-error"]);
516
+ });
517
+ it("never lets an onAttempt callback that throws affect the probe's own result", async () => {
518
+ const handle = mockHandle(async function* () {
519
+ yield new TextEncoder().encode("200");
520
+ });
521
+ await expect(isBunnyAgentDaemonHealthy(handle, "http://127.0.0.1:3080", {
522
+ maxAttempts: 1,
523
+ onAttempt: () => {
524
+ throw new Error("logging bug");
525
+ },
526
+ })).resolves.toBe(true);
527
+ });
528
+ });
112
529
  });
113
530
  //# sourceMappingURL=daemon-health.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-health.test.js","sourceRoot":"","sources":["../../src/__tests__/daemon-health.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon-health.test.js","sourceRoot":"","sources":["../../src/__tests__/daemon-health.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sandbox-exec-error.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-exec-error.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sandbox-exec-error.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { ExecDiagnostics, SandboxExecError, validateExecInput, } from "../sandbox-exec-error.js";
3
+ describe("SandboxExecError", () => {
4
+ it("bounds a single huge multibyte callback and its truncation suffix", () => {
5
+ const diagnostics = new ExecDiagnostics();
6
+ diagnostics.append("界".repeat(100000));
7
+ expect(Buffer.byteLength(diagnostics.text())).toBeLessThanOrEqual(4096);
8
+ expect(diagnostics.text()).not.toContain("\ufffd");
9
+ expect(diagnostics.text()).toContain("[truncated]");
10
+ });
11
+ it("redacts split and truncated secrets, messages, and omits unsafe causes", () => {
12
+ const diagnostics = new ExecDiagnostics({ TOKEN: "secret-value" });
13
+ diagnostics.append("secret-");
14
+ diagnostics.append("value\n");
15
+ expect(diagnostics.text()).toBe("[redacted]\n");
16
+ const failure = diagnostics.failure(new Error("failed secret-value", { cause: new Error("secret-value") }));
17
+ expect(failure.message).toBe("failed [redacted]");
18
+ expect(failure.cause).toBeUndefined();
19
+ const truncated = new ExecDiagnostics({ TOKEN: "secret-value" });
20
+ truncated.append("x".repeat(4090) + "secret-value");
21
+ expect(truncated.text()).not.toContain("secret");
22
+ expect(Buffer.byteLength(truncated.text())).toBeLessThanOrEqual(4096);
23
+ });
24
+ it("rejects empty executable and invalid env keys before execution", () => {
25
+ for (const command of [[], [""], [" "]])
26
+ expect(() => validateExecInput(command, {})).toThrow(SandboxExecError);
27
+ expect(() => validateExecInput(["echo"], { "BAD;KEY": "value" })).toThrow(SandboxExecError);
28
+ expect(() => validateExecInput(["echo", ""], { VALID_KEY: "value" })).not.toThrow();
29
+ });
30
+ it("is an instance of Error", () => {
31
+ const err = new SandboxExecError("boom", { code: "nonzero_exit" });
32
+ expect(err).toBeInstanceOf(Error);
33
+ expect(err.name).toBe("SandboxExecError");
34
+ expect(err.message).toBe("boom");
35
+ });
36
+ it("is always retryable: false, regardless of code", () => {
37
+ const codes = [
38
+ "spawn_failed",
39
+ "shell_parse_error",
40
+ "nonzero_exit",
41
+ "timeout",
42
+ "aborted",
43
+ ];
44
+ for (const code of codes) {
45
+ const err = new SandboxExecError("x", { code });
46
+ expect(err.retryable).toBe(false);
47
+ }
48
+ });
49
+ it("defaults exitCode to null when omitted", () => {
50
+ const err = new SandboxExecError("x", { code: "spawn_failed" });
51
+ expect(err.exitCode).toBeNull();
52
+ });
53
+ it("carries the provided exitCode", () => {
54
+ const err = new SandboxExecError("x", {
55
+ code: "nonzero_exit",
56
+ exitCode: 127,
57
+ });
58
+ expect(err.exitCode).toBe(127);
59
+ });
60
+ it("leaves stderr undefined when not provided", () => {
61
+ const err = new SandboxExecError("x", { code: "nonzero_exit" });
62
+ expect(err.stderr).toBeUndefined();
63
+ });
64
+ it("keeps short stderr untouched", () => {
65
+ const err = new SandboxExecError("x", {
66
+ code: "nonzero_exit",
67
+ stderr: "short error output",
68
+ });
69
+ expect(err.stderr).toBe("short error output");
70
+ });
71
+ it("truncates stderr beyond the 4 KiB cap", () => {
72
+ const huge = "x".repeat(5000);
73
+ const err = new SandboxExecError("x", {
74
+ code: "nonzero_exit",
75
+ stderr: huge,
76
+ });
77
+ expect(err.stderr?.length).toBeLessThan(huge.length);
78
+ expect(err.stderr).toContain("[truncated]");
79
+ });
80
+ it("sets cause when provided", () => {
81
+ const cause = new Error("underlying transport failure");
82
+ const err = new SandboxExecError("x", {
83
+ code: "nonzero_exit",
84
+ cause,
85
+ });
86
+ expect(err.cause).toBe(cause);
87
+ });
88
+ it("omits cause entirely when not provided (no cause: undefined noise)", () => {
89
+ const err = new SandboxExecError("x", { code: "nonzero_exit" });
90
+ expect("cause" in err).toBe(false);
91
+ });
92
+ it("survives JSON.stringify without throwing (diagnostics logging path)", () => {
93
+ const err = new SandboxExecError("x", {
94
+ code: "nonzero_exit",
95
+ exitCode: 1,
96
+ stderr: "boom",
97
+ });
98
+ expect(() => JSON.stringify({ message: err.message, code: err.code })).not.toThrow();
99
+ });
100
+ });
101
+ //# sourceMappingURL=sandbox-exec-error.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-exec-error.test.js","sourceRoot":"","sources":["../../src/__tests__/sandbox-exec-error.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shell-escape.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-escape.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/shell-escape.test.ts"],"names":[],"mappings":""}