@opengeni/runtime 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/agent-LJT5NPWT.js +9 -0
  2. package/dist/assets/codemode-client.json +1 -1
  3. package/dist/browser-current-tab.d.ts +46 -0
  4. package/dist/browser-model-text.d.ts +126 -0
  5. package/dist/{chunk-XRX57ZQO.js → chunk-3DFH3ZHU.js} +784 -121
  6. package/dist/chunk-3DFH3ZHU.js.map +1 -0
  7. package/dist/{chunk-HJSIPTFA.js → chunk-4XDJ4TJA.js} +2 -2
  8. package/dist/{chunk-XQ23VCZ4.js → chunk-6FQ6KEII.js} +3 -3
  9. package/dist/{chunk-7LJ7KDPI.js → chunk-ERD4ICVB.js} +4 -3
  10. package/dist/{chunk-EK7IW2FR.js → chunk-ETTCGPBT.js} +224 -6
  11. package/dist/chunk-ETTCGPBT.js.map +1 -0
  12. package/dist/{chunk-7OUG7WBV.js → chunk-GWRBALGQ.js} +181 -13
  13. package/dist/chunk-GWRBALGQ.js.map +1 -0
  14. package/dist/{chunk-YG26XE7B.js → chunk-JYDG2A7H.js} +2 -2
  15. package/dist/{chunk-RSHQSLEJ.js → chunk-KIL4FGX5.js} +3 -3
  16. package/dist/{chunk-NWS4HPB7.js → chunk-MIAL5I4O.js} +2 -2
  17. package/dist/{chunk-Z5U6WE22.js → chunk-PRZPGRIK.js} +2 -2
  18. package/dist/{chunk-KCPW4K7L.js → chunk-PZQUUBEB.js} +2 -2
  19. package/dist/{chunk-5WJOPANS.js → chunk-Y5THZH5N.js} +7 -7
  20. package/dist/codex-tool-search.d.ts +9 -0
  21. package/dist/gmail-rest-mcp.js +8 -8
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.js +14 -12
  24. package/dist/interaction-tool-json-schema.d.ts +27 -0
  25. package/dist/{lazy-manifest-AJ6XPJ4F.js → lazy-manifest-BLZ3UZLX.js} +4 -4
  26. package/dist/lazy-tool-transport.d.ts +10 -0
  27. package/dist/{localSources-SSIEH5F5.js → localSources-I6SIQ6CX.js} +6 -6
  28. package/dist/model-call.js +3 -3
  29. package/dist/sandbox/browser-control-client.d.ts +77 -0
  30. package/dist/sandbox/index.d.ts +1 -1
  31. package/dist/sandbox/index.js +7 -7
  32. package/dist/sandbox/selfhosted/session.d.ts +3 -0
  33. package/dist/slack-rest-mcp.js +8 -8
  34. package/dist/workspace-tool-gateway.js +12 -12
  35. package/package.json +14 -14
  36. package/src/browser-current-tab.ts +139 -0
  37. package/src/browser-model-text.ts +378 -0
  38. package/src/codex-tool-search.ts +53 -0
  39. package/src/index.ts +39 -1
  40. package/src/interaction-tool-json-schema.ts +281 -0
  41. package/src/interaction-tools.ts +425 -235
  42. package/src/lazy-tool-transport.ts +229 -10
  43. package/src/model-input.ts +12 -1
  44. package/src/sandbox/browser-control-client.ts +336 -0
  45. package/src/sandbox/index.ts +4 -0
  46. package/src/sandbox/selfhosted/session.ts +38 -0
  47. package/dist/agent-CTPLA3HP.js +0 -9
  48. package/dist/browser-action-json-schema.d.ts +0 -4
  49. package/dist/chunk-7OUG7WBV.js.map +0 -1
  50. package/dist/chunk-EK7IW2FR.js.map +0 -1
  51. package/dist/chunk-XRX57ZQO.js.map +0 -1
  52. package/src/browser-action-json-schema.ts +0 -10
  53. /package/dist/{agent-CTPLA3HP.js.map → agent-LJT5NPWT.js.map} +0 -0
  54. /package/dist/{chunk-HJSIPTFA.js.map → chunk-4XDJ4TJA.js.map} +0 -0
  55. /package/dist/{chunk-XQ23VCZ4.js.map → chunk-6FQ6KEII.js.map} +0 -0
  56. /package/dist/{chunk-7LJ7KDPI.js.map → chunk-ERD4ICVB.js.map} +0 -0
  57. /package/dist/{chunk-YG26XE7B.js.map → chunk-JYDG2A7H.js.map} +0 -0
  58. /package/dist/{chunk-RSHQSLEJ.js.map → chunk-KIL4FGX5.js.map} +0 -0
  59. /package/dist/{chunk-NWS4HPB7.js.map → chunk-MIAL5I4O.js.map} +0 -0
  60. /package/dist/{chunk-Z5U6WE22.js.map → chunk-PRZPGRIK.js.map} +0 -0
  61. /package/dist/{chunk-KCPW4K7L.js.map → chunk-PZQUUBEB.js.map} +0 -0
  62. /package/dist/{chunk-5WJOPANS.js.map → chunk-Y5THZH5N.js.map} +0 -0
  63. /package/dist/{lazy-manifest-AJ6XPJ4F.js.map → lazy-manifest-BLZ3UZLX.js.map} +0 -0
  64. /package/dist/{localSources-SSIEH5F5.js.map → localSources-I6SIQ6CX.js.map} +0 -0
@@ -18,7 +18,7 @@ import {
18
18
  shellQuote,
19
19
  tool,
20
20
  withSandboxSpan
21
- } from "./chunk-7LJ7KDPI.js";
21
+ } from "./chunk-ERD4ICVB.js";
22
22
 
23
23
  // ../../node_modules/.bun/@openai+agents-core@0.14.3+933c5e7db4cd33c2/node_modules/@openai/agents-core/dist/sandbox/capabilities/transport.mjs
24
24
  function supportsResponsesCompactionTransport(modelInstance) {
@@ -999,4 +999,4 @@ export {
999
999
  probeSandboxPathExists,
1000
1000
  SandboxAgent
1001
1001
  };
1002
- //# sourceMappingURL=chunk-HJSIPTFA.js.map
1002
+ //# sourceMappingURL=chunk-4XDJ4TJA.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  connectorAttachmentFileName
3
- } from "./chunk-Z5U6WE22.js";
3
+ } from "./chunk-PRZPGRIK.js";
4
4
  import {
5
5
  isRoutingMutationOutcomeUnknownError
6
- } from "./chunk-5WJOPANS.js";
6
+ } from "./chunk-Y5THZH5N.js";
7
7
 
8
8
  // src/gmail-rest-mcp.ts
9
9
  import {
@@ -2258,4 +2258,4 @@ export {
2258
2258
  gmailRestToolIsMutation,
2259
2259
  gmailRestResultOutcome
2260
2260
  };
2261
- //# sourceMappingURL=chunk-XQ23VCZ4.js.map
2261
+ //# sourceMappingURL=chunk-6FQ6KEII.js.map
@@ -27556,7 +27556,7 @@ var SandboxMemoryGenerationManager = class {
27556
27556
  if (!transcript) {
27557
27557
  throw new UserError(`Memory rollout transcript was not found: ${transcriptPath}`);
27558
27558
  }
27559
- const { SandboxAgent } = await import("./agent-CTPLA3HP.js");
27559
+ const { SandboxAgent } = await import("./agent-LJT5NPWT.js");
27560
27560
  const phaseOneAgent = new SandboxAgent({
27561
27561
  name: "sandbox-memory-phase-one",
27562
27562
  instructions: renderRolloutExtractionInstructions(generate.extraPrompt),
@@ -27617,7 +27617,7 @@ var SandboxMemoryGenerationManager = class {
27617
27617
  })) {
27618
27618
  return;
27619
27619
  }
27620
- const { SandboxAgent } = await import("./agent-CTPLA3HP.js");
27620
+ const { SandboxAgent } = await import("./agent-LJT5NPWT.js");
27621
27621
  const phaseTwoAgent = new SandboxAgent({
27622
27622
  name: "sandbox-memory-phase-two",
27623
27623
  model: generate.phaseTwoModel,
@@ -43273,6 +43273,7 @@ export {
43273
43273
  setTraceProcessors,
43274
43274
  setTracingDisabled,
43275
43275
  normalizeHostedMcpRequireApproval,
43276
+ defineToolInputGuardrail,
43276
43277
  ToolGuardrailFunctionOutputFactory,
43277
43278
  applyPatchTool,
43278
43279
  attachClientToolSearchExecutor,
@@ -43358,4 +43359,4 @@ export {
43358
43359
  Runner,
43359
43360
  Agent
43360
43361
  };
43361
- //# sourceMappingURL=chunk-7LJ7KDPI.js.map
43362
+ //# sourceMappingURL=chunk-ERD4ICVB.js.map
@@ -107,7 +107,7 @@ import {
107
107
  withNativeSynchronousCommandCollection,
108
108
  withProviderError,
109
109
  withSandboxProviderCapture
110
- } from "./chunk-5WJOPANS.js";
110
+ } from "./chunk-Y5THZH5N.js";
111
111
  import {
112
112
  applyLocalSourceManifestEntryToState,
113
113
  applyLocalSourceManifestToState,
@@ -122,13 +122,13 @@ import {
122
122
  truncateOutput,
123
123
  validateCredentialPair,
124
124
  validateRemoteSandboxPathForManifest
125
- } from "./chunk-YG26XE7B.js";
125
+ } from "./chunk-JYDG2A7H.js";
126
126
  import {
127
127
  NoopSnapshotSpec,
128
128
  normalizeSandboxClientCreateArgs,
129
129
  resolveSandboxArchiveLimits,
130
130
  validateSandboxArchiveLimits
131
- } from "./chunk-NWS4HPB7.js";
131
+ } from "./chunk-MIAL5I4O.js";
132
132
  import {
133
133
  Manifest,
134
134
  Permissions,
@@ -160,7 +160,7 @@ import {
160
160
  serializeRuntimeEnvironmentForPersistence,
161
161
  shellQuote,
162
162
  withSandboxSpan
163
- } from "./chunk-7LJ7KDPI.js";
163
+ } from "./chunk-ERD4ICVB.js";
164
164
 
165
165
  // src/sandbox/index.ts
166
166
  import { collectSandboxEnvironment, parseExposedPorts } from "@opengeni/config";
@@ -11572,6 +11572,23 @@ var SelfhostedSession = class {
11572
11572
  reason: null,
11573
11573
  retryable: false
11574
11574
  });
11575
+ if (!terminalProof && !adoptedCommandId && !controlError.neverSent && machineStoppedAnswering(controlError) && this.adoptBackgroundCommand) {
11576
+ try {
11577
+ notifyDurableOpOwnershipTransferStarted(opId);
11578
+ const abandoned = await this.adoptBackgroundCommand({
11579
+ controlWorkspaceId: admission.controlWorkspaceId,
11580
+ enrollmentId: this.agentId,
11581
+ connectionInstanceId: admission.connectionInstanceId,
11582
+ opId,
11583
+ command,
11584
+ abandoned: true
11585
+ });
11586
+ adoptedCommandId = abandoned.commandId;
11587
+ notifyDurableOpOwnershipTransferred(opId);
11588
+ } catch {
11589
+ notifyDurableOpOwnershipTransferFailed(opId);
11590
+ }
11591
+ }
11575
11592
  this.emitOp({
11576
11593
  op: "exec",
11577
11594
  outcome: "failed",
@@ -12540,6 +12557,10 @@ function mediaTypeFromPath(path) {
12540
12557
  if (p.endsWith(".svg") || p.endsWith(".svgz")) return "image/svg+xml";
12541
12558
  return void 0;
12542
12559
  }
12560
+ function machineStoppedAnswering(error) {
12561
+ const faultClass = selfhostedFaultClass(error);
12562
+ return faultClass === "offline" || faultClass === "reconnecting" || faultClass === "draining";
12563
+ }
12543
12564
  function randomNonce() {
12544
12565
  return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER));
12545
12566
  }
@@ -14562,6 +14583,28 @@ function placementControllerWorkdir(session) {
14562
14583
  if (!session.ensureBrowserControl) return MANAGED_PLACEMENT_CONTROLLER_WORKDIR;
14563
14584
  return session.controllerHostOs?.() === "windows" ? "." : NATIVE_PLACEMENT_CONTROLLER_WORKDIR;
14564
14585
  }
14586
+ var BROWSER_WORKING_COPY_REFUSALS = [
14587
+ "unsupported_platform",
14588
+ "browser_running",
14589
+ "working_copy_invalid",
14590
+ "receipt_not_adoptable",
14591
+ "authority_changed",
14592
+ "process_state_unknown",
14593
+ "adoption_not_needed",
14594
+ "adoption_unresolved"
14595
+ ];
14596
+ var BROWSER_WORKING_COPY_ADOPTION_PHASES = [
14597
+ "intent",
14598
+ "copied",
14599
+ "receipt",
14600
+ "source_preserved",
14601
+ "adopted",
14602
+ "interrupted",
14603
+ "failed",
14604
+ "collision",
14605
+ "reverting",
14606
+ "reverted"
14607
+ ];
14565
14608
  var BrowserControlTransportError = class extends Error {
14566
14609
  name = "BrowserControlTransportError";
14567
14610
  retryable = true;
@@ -14743,7 +14786,8 @@ var BrowserControlClient = class {
14743
14786
  }
14744
14787
  return {
14745
14788
  ...returnedReference,
14746
- observation: BrowserObservation.parse(data.observation)
14789
+ observation: BrowserObservation.parse(data.observation),
14790
+ ...creationTargets(data.targets, returnedReference)
14747
14791
  };
14748
14792
  }
14749
14793
  async createComputerSession(input) {
@@ -14926,6 +14970,86 @@ var BrowserControlClient = class {
14926
14970
  }
14927
14971
  return receipt;
14928
14972
  }
14973
+ /** Read-only evidence about a preserved working copy whose controller
14974
+ * memory was lost: the exact digest of its bytes and whether it can be
14975
+ * adopted. Hashing a large profile can take minutes. */
14976
+ async inspectWorkingCopy(input) {
14977
+ const reference = parseReference(input);
14978
+ const data = await this.requestJson({
14979
+ method: "POST",
14980
+ path: `/v1/browser-sessions/${reference.browserSessionId}/working-copy/inspection`,
14981
+ token: this.adminToken,
14982
+ body: workingCopyAuthorityBody(reference, input),
14983
+ timeoutMs: BROWSER_STATE_TRANSFER_TIMEOUT_MS
14984
+ });
14985
+ return parseWorkingCopyInspection(data, reference);
14986
+ }
14987
+ /** Adopt the exact inspected bytes of a preserved working copy. A lost reply
14988
+ * is checked with {@link workingCopyAdoption}. Sending the same operation id
14989
+ * again never repeats a side effect: it only settles what that operation
14990
+ * already did, under the authority that approved it. */
14991
+ async adoptWorkingCopy(input) {
14992
+ const reference = parseReference(input);
14993
+ const operationId = requireUuid(input.operationId, "working copy adoption id");
14994
+ const data = await this.requestJson({
14995
+ method: "POST",
14996
+ path: `/v1/browser-sessions/${reference.browserSessionId}/working-copy/adoptions`,
14997
+ token: this.adminToken,
14998
+ body: {
14999
+ ...workingCopyAuthorityBody(reference, input),
15000
+ operationId,
15001
+ manifestDigest: sha2563(input.manifestDigest, "working copy manifest digest")
15002
+ },
15003
+ timeoutMs: BROWSER_STATE_TRANSFER_TIMEOUT_MS
15004
+ });
15005
+ const adoption = parseWorkingCopyAdoption(data, reference, "current");
15006
+ if (adoption.operationId !== operationId) {
15007
+ throw new BrowserControlProtocolError("browser controller returned another adoption");
15008
+ }
15009
+ return adoption;
15010
+ }
15011
+ /** The recorded state of one adoption, read without changing it. */
15012
+ async workingCopyAdoption(reference, operationId) {
15013
+ const binding2 = parseReference(reference);
15014
+ const id = requireUuid(operationId, "working copy adoption id");
15015
+ const data = await this.requestJson({
15016
+ method: "GET",
15017
+ path: `/v1/browser-sessions/${binding2.browserSessionId}/working-copy/adoptions/${id}`,
15018
+ token: this.adminToken
15019
+ });
15020
+ if (!isRecord2(data) || typeof data.inFlight !== "boolean") {
15021
+ throw new BrowserControlProtocolError(
15022
+ "browser controller returned malformed adoption status"
15023
+ );
15024
+ }
15025
+ const adoption = data.adoption === null ? null : parseWorkingCopyAdoption(data.adoption, binding2, "recorded");
15026
+ if (adoption && adoption.operationId !== id) {
15027
+ throw new BrowserControlProtocolError("browser controller returned another adoption");
15028
+ }
15029
+ return { inFlight: data.inFlight, adoption };
15030
+ }
15031
+ /** Revert one unfinished adoption under the browser's current authority:
15032
+ * its own directory goes back to the live path and the staged copy is
15033
+ * kept. Retrying the same revert finishes one that stopped part way. */
15034
+ async revertWorkingCopyAdoption(input) {
15035
+ const reference = parseReference(input);
15036
+ const id = requireUuid(input.operationId, "working copy adoption id");
15037
+ const data = await this.requestJson({
15038
+ method: "POST",
15039
+ path: `/v1/browser-sessions/${reference.browserSessionId}/working-copy/adoptions/${id}/revert`,
15040
+ token: this.adminToken,
15041
+ body: workingCopyAuthorityBody(reference, input),
15042
+ timeoutMs: BROWSER_STATE_TRANSFER_TIMEOUT_MS
15043
+ });
15044
+ if (!isRecord2(data) || typeof data.inFlight !== "boolean") {
15045
+ throw new BrowserControlProtocolError("browser controller returned malformed revert status");
15046
+ }
15047
+ const adoption = data.adoption === null ? null : parseWorkingCopyAdoption(data.adoption, reference, "recorded");
15048
+ if (adoption && adoption.operationId !== id) {
15049
+ throw new BrowserControlProtocolError("browser controller returned another adoption");
15050
+ }
15051
+ return { inFlight: data.inFlight, adoption };
15052
+ }
14929
15053
  sessionClient(input) {
14930
15054
  return new BrowserControlSessionClient(this, input);
14931
15055
  }
@@ -16291,6 +16415,17 @@ function parseReference(value) {
16291
16415
  controllerGeneration: requireGeneration(value.controllerGeneration)
16292
16416
  };
16293
16417
  }
16418
+ function creationTargets(value, reference) {
16419
+ if (!Array.isArray(value) || value.length > 1e4) return {};
16420
+ const targets = [];
16421
+ for (const entry of value) {
16422
+ const parsed = BrowserTarget.safeParse(entry);
16423
+ if (!parsed.success || parsed.data.browserSessionId !== reference.browserSessionId || parsed.data.controllerGeneration !== reference.controllerGeneration)
16424
+ return {};
16425
+ targets.push(parsed.data);
16426
+ }
16427
+ return { targets };
16428
+ }
16294
16429
  function parseComputerReference(value) {
16295
16430
  if (!isRecord2(value)) {
16296
16431
  throw new BrowserControlProtocolError("computer session binding is invalid");
@@ -16427,6 +16562,81 @@ function boundedProxyUrl(value) {
16427
16562
  }
16428
16563
  return url.toString();
16429
16564
  }
16565
+ function workingCopyAuthorityBody(reference, input) {
16566
+ return {
16567
+ controllerGeneration: reference.controllerGeneration,
16568
+ tokenGeneration: positiveSafeInteger(input.tokenGeneration, "token generation"),
16569
+ controlToken: requireToken(input.controlToken, "control token"),
16570
+ viewToken: requireToken(input.viewToken, "view token")
16571
+ };
16572
+ }
16573
+ function parseWorkingCopyAdoption(value, reference, generation) {
16574
+ if (!isRecord2(value) || value.browserSessionId !== reference.browserSessionId || generation === "current" && value.controllerGeneration !== reference.controllerGeneration || !BROWSER_WORKING_COPY_ADOPTION_PHASES.includes(
16575
+ value.phase
16576
+ ) || !(value.failureCode === null || typeof value.failureCode === "string") || !Array.isArray(value.retainedDirectories) || value.retainedDirectories.length > 64 || !value.retainedDirectories.every(
16577
+ (name) => typeof name === "string" && /^[A-Za-z0-9][A-Za-z0-9._-]{0,255}$/u.test(name)
16578
+ )) {
16579
+ throw new BrowserControlProtocolError("browser controller returned a malformed adoption");
16580
+ }
16581
+ return {
16582
+ browserSessionId: reference.browserSessionId,
16583
+ controllerGeneration: generation === "current" ? reference.controllerGeneration : requireGeneration(value.controllerGeneration),
16584
+ operationId: requireUuid(value.operationId, "working copy adoption id"),
16585
+ manifestDigest: sha2563(value.manifestDigest, "working copy manifest digest"),
16586
+ phase: value.phase,
16587
+ failureCode: value.failureCode === null ? null : requireOpaqueId(value.failureCode, "failure code"),
16588
+ retainedDirectories: value.retainedDirectories,
16589
+ createdAt: timestamp(value.createdAt, "adoption created at"),
16590
+ updatedAt: timestamp(value.updatedAt, "adoption updated at")
16591
+ };
16592
+ }
16593
+ function parseWorkingCopyInspection(value, reference) {
16594
+ if (!isRecord2(value) || value.browserSessionId !== reference.browserSessionId || value.controllerGeneration !== reference.controllerGeneration || typeof value.platformSupported !== "boolean" || typeof value.profileIdentityMatches !== "boolean" || !(value.profileInUse === null || typeof value.profileInUse === "boolean") || !(value.refusal === null || BROWSER_WORKING_COPY_REFUSALS.includes(value.refusal))) {
16595
+ throw new BrowserControlProtocolError("browser controller returned a malformed inspection");
16596
+ }
16597
+ let manifest = null;
16598
+ if (value.manifest !== null) {
16599
+ if (!isRecord2(value.manifest)) {
16600
+ throw new BrowserControlProtocolError("browser controller returned a malformed manifest");
16601
+ }
16602
+ manifest = {
16603
+ digest: sha2563(value.manifest.digest, "working copy manifest digest"),
16604
+ entries: nonnegativeSafeInteger(value.manifest.entries, "working copy entries"),
16605
+ bytes: nonnegativeSafeInteger(value.manifest.bytes, "working copy bytes"),
16606
+ excluded: excludedWorkingCopyEntries(value.manifest.excluded)
16607
+ };
16608
+ }
16609
+ let receipt = null;
16610
+ if (value.receipt !== null) {
16611
+ const raw = value.receipt;
16612
+ if (!isRecord2(raw) || !["launch", "suspend", "retire", "adopt"].includes(raw.intent) || typeof raw.state !== "string" || typeof raw.directoryLaunchAllowed !== "boolean" || typeof raw.authorityMatches !== "boolean" || !(raw.restoreAuthorityDigest === null || typeof raw.restoreAuthorityDigest === "string") || !(raw.adoption === null || isRecord2(raw.adoption))) {
16613
+ throw new BrowserControlProtocolError("browser controller returned a malformed receipt");
16614
+ }
16615
+ receipt = {
16616
+ operationId: requireUuid(raw.operationId, "working runtime receipt id"),
16617
+ intent: raw.intent,
16618
+ state: requireOpaqueId(raw.state, "working runtime receipt state"),
16619
+ directoryLaunchAllowed: raw.directoryLaunchAllowed,
16620
+ authorityMatches: raw.authorityMatches,
16621
+ launchedFromCheckpoint: raw.restoreAuthorityDigest !== null,
16622
+ adoption: isRecord2(raw.adoption) ? {
16623
+ operationId: requireUuid(raw.adoption.operationId, "working copy adoption id"),
16624
+ manifestDigest: sha2563(raw.adoption.manifestDigest, "working copy manifest digest")
16625
+ } : null
16626
+ };
16627
+ }
16628
+ return {
16629
+ browserSessionId: reference.browserSessionId,
16630
+ controllerGeneration: reference.controllerGeneration,
16631
+ platformSupported: value.platformSupported,
16632
+ refusal: value.refusal,
16633
+ manifest,
16634
+ profileIdentityMatches: value.profileIdentityMatches,
16635
+ profileInUse: value.profileInUse,
16636
+ receipt,
16637
+ activeAdoption: value.activeAdoption === null || value.activeAdoption === void 0 ? null : parseWorkingCopyAdoption(value.activeAdoption, reference, "recorded")
16638
+ };
16639
+ }
16430
16640
  function parseStateCaptureReceipt(value) {
16431
16641
  if (!isRecord2(value) || !isRecord2(value.manifest)) {
16432
16642
  throw new BrowserControlProtocolError(
@@ -17022,6 +17232,14 @@ function nonnegativeSafeInteger(value, label) {
17022
17232
  }
17023
17233
  return value;
17024
17234
  }
17235
+ function excludedWorkingCopyEntries(value) {
17236
+ if (!Array.isArray(value) || value.length > 16 || !value.every((entry) => typeof entry === "string" && entry.length > 0 && entry.length <= 256)) {
17237
+ throw new BrowserControlProtocolError(
17238
+ "browser controller returned malformed working copy exclusions"
17239
+ );
17240
+ }
17241
+ return [...value];
17242
+ }
17025
17243
  function parseUnsignedInteger(value, label) {
17026
17244
  const trimmed = value.trim();
17027
17245
  if (!/^(0|[1-9][0-9]*)$/u.test(trimmed)) {
@@ -20554,4 +20772,4 @@ export {
20554
20772
  collectSandboxEnvironment2 as collectSandboxEnvironment,
20555
20773
  parseExposedPorts2 as parseExposedPorts
20556
20774
  };
20557
- //# sourceMappingURL=chunk-EK7IW2FR.js.map
20775
+ //# sourceMappingURL=chunk-ETTCGPBT.js.map