@b4run/testing 0.8.31 → 0.8.32

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/harness.d.ts CHANGED
@@ -26,7 +26,9 @@ export interface AgentHarness {
26
26
  fixtures?: FixtureSet | ScriptBuilder;
27
27
  }): Promise<AgentRunResult>;
28
28
  reset(): void;
29
- close(): Promise<void>;
29
+ close(options?: {
30
+ readonly destroyWorkspaces?: boolean;
31
+ }): Promise<void>;
30
32
  [Symbol.asyncDispose](): Promise<void>;
31
33
  /** Fixtures captured from the most recent run() (record mode only); re-keyed for replay. */
32
34
  getRecordedFixtures(): FixtureSet;
@@ -1 +1 @@
1
- {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../src/harness.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EASnB,MAAM,oBAAoB,CAAA;AAI3B,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAErE,OAAO,EAAE,KAAK,cAAc,EAAoB,MAAM,iBAAiB,CAAA;AA0BvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;IAC9B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,uFAAuF;IACvF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,yFAAyF;IACzF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,GAAG,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC5F,MAAM,CAAC,IAAI,EAAE;QACX,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;QAChC,QAAQ,CAAC,EAAE,UAAU,GAAG,aAAa,CAAA;KACtC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC3B,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,4FAA4F;IAC5F,mBAAmB,IAAI,UAAU,CAAA;CAClC;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA2L5F"}
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../src/harness.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EASnB,MAAM,oBAAoB,CAAA;AAI3B,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAErE,OAAO,EAAE,KAAK,cAAc,EAAoB,MAAM,iBAAiB,CAAA;AA0BvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;IAC9B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,uFAAuF;IACvF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,yFAAyF;IACzF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,GAAG,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC5F,MAAM,CAAC,IAAI,EAAE;QACX,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;QAChC,QAAQ,CAAC,EAAE,UAAU,GAAG,aAAa,CAAA;KACtC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC3B,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,4FAA4F;IAC5F,mBAAmB,IAAI,UAAU,CAAA;CAClC;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAoM5F"}
package/dist/harness.js CHANGED
@@ -83,6 +83,7 @@ export async function createAgentHarness(options) {
83
83
  }
84
84
  const baseUrl = aimock.baseUrl;
85
85
  let threadId = randomUUID();
86
+ const ownedThreads = new Set([threadId]);
86
87
  let closed = false;
87
88
  let lastRunJournalStart = 0;
88
89
  let lastRunFixtureStart = 0;
@@ -153,6 +154,7 @@ export async function createAgentHarness(options) {
153
154
  },
154
155
  reset() {
155
156
  threadId = randomUUID();
157
+ ownedThreads.add(threadId);
156
158
  // Start each scenario from a clean fixture set. Fixtures are registered
157
159
  // additively per run() and findFixture is first-match-in-array-order, so
158
160
  // without this a loosely-matched fixture from a prior scenario (e.g. a raw
@@ -168,12 +170,19 @@ export async function createAgentHarness(options) {
168
170
  getRecordedFixtures() {
169
171
  return recordingsToFixtures(aimock.getRecordingsSince(lastRunJournalStart, lastRunFixtureStart));
170
172
  },
171
- async close() {
173
+ async close(closeOptions) {
172
174
  if (closed)
173
175
  return;
174
- closed = true;
176
+ if (closeOptions?.destroyWorkspaces && sandboxManager) {
177
+ for (const id of ownedThreads) {
178
+ await sandboxManager.destroyThread(id);
179
+ await (await resolveCheckpointer(options.appRoot)).deleteThread(id);
180
+ sandboxManager.completeDelete(id);
181
+ }
182
+ }
175
183
  if (sandboxManager)
176
184
  await sandboxManager.releaseAll();
185
+ closed = true;
177
186
  await aimock.close();
178
187
  // restore env to avoid cross-test bleed
179
188
  if (prevBaseUrl === undefined)