@opengeni/sdk 7.1.0 → 7.1.1

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 (47) hide show
  1. package/README.md +6 -0
  2. package/dist/artifacts.js +5 -5
  3. package/dist/browser.d.ts +1 -1
  4. package/dist/browser.js +3 -3
  5. package/dist/chat/index.js +6 -6
  6. package/dist/{chunk-MG4QFBKR.js → chunk-B7S4YVGX.js} +2 -2
  7. package/dist/{chunk-LSO66LQA.js → chunk-E5WAYGHT.js} +1 -1
  8. package/dist/chunk-E5WAYGHT.js.map +1 -0
  9. package/dist/{chunk-YHF66FWZ.js → chunk-MPN5UJWE.js} +2 -2
  10. package/dist/{chunk-Y7DRKEFZ.js → chunk-NP7DDXHK.js} +94 -5
  11. package/dist/chunk-NP7DDXHK.js.map +1 -0
  12. package/dist/{chunk-ZN6WWXAX.js → chunk-PCVFOBSV.js} +2 -2
  13. package/dist/{chunk-X6Y2JCAN.js → chunk-RAG3P2UV.js} +2 -2
  14. package/dist/{chunk-QTBAMHEF.js → chunk-YUOPVPZW.js} +25 -1
  15. package/dist/chunk-YUOPVPZW.js.map +1 -0
  16. package/dist/client.d.ts +10 -2
  17. package/dist/core.js +4 -4
  18. package/dist/document-authority.js +4 -4
  19. package/dist/editable-artifacts.js +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +7 -7
  22. package/dist/interaction.d.ts +35 -0
  23. package/dist/interaction.js +1 -1
  24. package/dist/knowledge.d.ts +1 -1
  25. package/dist/knowledge.js.map +1 -1
  26. package/dist/session-message-search.d.ts +12 -0
  27. package/dist/site-browser-runtime.gen.d.ts +1 -1
  28. package/dist/site-document.js +1 -1
  29. package/dist/site-document.js.map +1 -1
  30. package/dist/site.js +4 -4
  31. package/dist/types.d.ts +3 -3
  32. package/package.json +2 -2
  33. package/src/browser.ts +2 -0
  34. package/src/client.ts +146 -2
  35. package/src/index.ts +2 -0
  36. package/src/interaction.ts +102 -0
  37. package/src/knowledge.ts +1 -0
  38. package/src/session-message-search.ts +8 -0
  39. package/src/site-browser-runtime.gen.ts +1 -1
  40. package/src/types.ts +5 -0
  41. package/dist/chunk-LSO66LQA.js.map +0 -1
  42. package/dist/chunk-QTBAMHEF.js.map +0 -1
  43. package/dist/chunk-Y7DRKEFZ.js.map +0 -1
  44. /package/dist/{chunk-MG4QFBKR.js.map → chunk-B7S4YVGX.js.map} +0 -0
  45. /package/dist/{chunk-YHF66FWZ.js.map → chunk-MPN5UJWE.js.map} +0 -0
  46. /package/dist/{chunk-ZN6WWXAX.js.map → chunk-PCVFOBSV.js.map} +0 -0
  47. /package/dist/{chunk-X6Y2JCAN.js.map → chunk-RAG3P2UV.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OpenGeniClient
3
- } from "./chunk-Y7DRKEFZ.js";
3
+ } from "./chunk-NP7DDXHK.js";
4
4
 
5
5
  // src/document-authority-client.ts
6
6
  var OpenGeniDocumentAuthorityClient = class extends OpenGeniClient {
@@ -132,4 +132,4 @@ var OpenGeniDocumentAuthorityClient = class extends OpenGeniClient {
132
132
  export {
133
133
  OpenGeniDocumentAuthorityClient
134
134
  };
135
- //# sourceMappingURL=chunk-ZN6WWXAX.js.map
135
+ //# sourceMappingURL=chunk-PCVFOBSV.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OpenGeniDocumentAuthorityClient
3
- } from "./chunk-ZN6WWXAX.js";
3
+ } from "./chunk-PCVFOBSV.js";
4
4
 
5
5
  // src/artifact-client.ts
6
6
  var OpenGeniClient = class extends OpenGeniDocumentAuthorityClient {
@@ -121,4 +121,4 @@ var OpenGeniClient = class extends OpenGeniDocumentAuthorityClient {
121
121
  export {
122
122
  OpenGeniClient
123
123
  };
124
- //# sourceMappingURL=chunk-X6Y2JCAN.js.map
124
+ //# sourceMappingURL=chunk-RAG3P2UV.js.map
@@ -390,6 +390,30 @@ var BrowserSessionResource = class {
390
390
  async observe(targetId, options = {}) {
391
391
  return await this.transport.observeBrowserTarget(this.workspaceId, this.id, targetId, options);
392
392
  }
393
+ async targetState(targetId, options = {}) {
394
+ return await this.transport.getBrowserTargetState(this.workspaceId, this.id, targetId, options);
395
+ }
396
+ async readDom(targetId, request, options = {}) {
397
+ return await this.transport.readBrowserDom(
398
+ this.workspaceId,
399
+ this.id,
400
+ targetId,
401
+ request,
402
+ options
403
+ );
404
+ }
405
+ async capture(targetId, options = {}, captureOptions = {}) {
406
+ return await this.transport.captureBrowserTarget(
407
+ this.workspaceId,
408
+ this.id,
409
+ targetId,
410
+ options,
411
+ captureOptions
412
+ );
413
+ }
414
+ async screenshot(targetId, captureOptions = {}, options = {}) {
415
+ return await this.capture(targetId, options, captureOptions);
416
+ }
393
417
  async act(request, options = {}) {
394
418
  return await this.transport.actInBrowser(this.workspaceId, this.id, request, options);
395
419
  }
@@ -1060,4 +1084,4 @@ export {
1060
1084
  parseComputerFrameMetadata,
1061
1085
  decodeComputerFrameMetadataHeader
1062
1086
  };
1063
- //# sourceMappingURL=chunk-QTBAMHEF.js.map
1087
+ //# sourceMappingURL=chunk-YUOPVPZW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/interaction.ts"],"sourcesContent":["import type { OpenGeniRequestOptions } from \"./client\";\nimport type {\n BrowserDomReadRequest,\n BrowserDomReadResponse,\n BrowserTargetState,\n} from \"@opengeni/contracts\";\nexport type {\n BrowserDomReadRequest,\n BrowserDomReadResponse,\n BrowserDomSafeAttribute,\n BrowserTargetState,\n} from \"@opengeni/contracts\";\nimport { OpenGeniApiError } from \"./errors\";\nimport type { RetainedArtifactReference } from \"./types\";\n\n/** Public Browser/Computer protocol version. Driver and provider details stay private. */\nexport const INTERACTION_PROTOCOL_VERSION = 1 as const;\nexport const BROWSER_CONTROL_WEBSOCKET_PROTOCOL = \"opengeni.browser.v1\" as const;\nexport const COMPUTER_CONTROL_WEBSOCKET_PROTOCOL = \"opengeni.computer.v1\" as const;\nexport const BROWSER_CONTROL_WEBSOCKET_BEARER_PREFIX = \"opengeni.auth.\" as const;\nexport const BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES = 64 * 1024;\nexport const BROWSER_FRAME_MAX_BYTES = 24 * 1024 * 1024;\nexport const BROWSER_FRAME_MAX_DIMENSION = 32_768;\nexport const BROWSER_FRAME_MAX_PIXELS = 100_000_000;\n\n/** Latest-wins invalidation cursor for workspace Browser/Computer resources. */\nexport type WorkspaceInteractionRevisionEvent = {\n workspaceId: string;\n sequence: number;\n revision: number;\n type: \"workspace.interaction.changed\";\n occurredAt: string;\n};\n\nexport type InteractionJsonValue =\n | null\n | string\n | number\n | boolean\n | InteractionJsonValue[]\n | { [key: string]: InteractionJsonValue };\n\nexport type InteractionControlFailureCode =\n | \"unknown\"\n | \"unsupported\"\n | \"os\"\n | \"not_found\"\n | \"consent_required\"\n | \"timeout\"\n | \"draining\"\n | \"protocol\"\n | \"stream\"\n | \"agent_offline\"\n | \"fenced\"\n | \"payload_too_large\";\n\nexport type InteractionControlFailure = {\n layer: \"connected_machine\";\n surface: \"browser\" | \"computer\";\n code: InteractionControlFailureCode;\n retryable: boolean;\n outcomeUnknown: boolean;\n requestId: string | undefined;\n controlRequestId: string | undefined;\n message: string;\n};\n\n/** Decodes the bounded typed control-failure details emitted by OpenGeni. Raw\n * provider/OS detail is intentionally absent; both correlation ids are opaque. */\nexport function interactionControlFailureFromError(\n error: unknown,\n): InteractionControlFailure | null {\n if (!(error instanceof OpenGeniApiError)) return null;\n const details = error.details;\n if (!details || details.interactionLayer !== \"connected_machine\") return null;\n const surface = details.interactionSurface;\n const code = details.controlFailureCode;\n if ((surface !== \"browser\" && surface !== \"computer\") || !isControlFailureCode(code)) {\n return null;\n }\n const controlRequestId = boundedOpaqueCorrelation(details.controlRequestId);\n return {\n layer: \"connected_machine\",\n surface,\n code,\n retryable: error.retryable,\n outcomeUnknown: error.outcomeUnknown,\n requestId: error.correlationId,\n controlRequestId,\n message: error.message,\n };\n}\n\nfunction isControlFailureCode(value: unknown): value is InteractionControlFailureCode {\n return (\n typeof value === \"string\" &&\n [\n \"unknown\",\n \"unsupported\",\n \"os\",\n \"not_found\",\n \"consent_required\",\n \"timeout\",\n \"draining\",\n \"protocol\",\n \"stream\",\n \"agent_offline\",\n \"fenced\",\n \"payload_too_large\",\n ].includes(value)\n );\n}\n\nfunction boundedOpaqueCorrelation(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length <= 128 && /^[A-Za-z0-9._:-]+$/u.test(value)\n ? value\n : undefined;\n}\n\nexport type InteractionPlacement =\n | { kind: \"sandbox_group\"; sandboxGroupId: string }\n | { kind: \"connected_machine\"; sandboxId: string }\n | { kind: \"attached_device\"; deviceId: string }\n | { kind: \"external_provider\"; providerId: string; placementId: string };\n\nexport type AttachedBrowserDeviceCapabilities = {\n tabInventory: boolean;\n debuggerAttachment: boolean;\n semanticObservation: boolean;\n screenshots: boolean;\n liveFrames: boolean;\n humanInput: boolean;\n diagnostics: boolean;\n rawCdp: boolean;\n linkedComputer: boolean;\n};\n\n/** One live browser-profile endpoint on an enrolled machine. Saved, reusable\n * login state is represented separately by BrowserIdentity. */\nexport type AttachedBrowserDevice = {\n id: string;\n accountId: string;\n workspaceId: string;\n enrollmentId: string;\n name: string;\n profileLabel: string | null;\n browserName: string;\n browserVersion: string;\n extensionVersion: string;\n platform: \"linux\" | \"macos\" | \"windows\";\n architecture: \"x64\" | \"arm64\";\n state: \"connected\" | \"disconnected\";\n connectionGeneration: string;\n inventoryRevision: number;\n tabCount: number;\n capabilities: AttachedBrowserDeviceCapabilities;\n lastSeenAt: string;\n disconnectedAt: string | null;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type AttachedBrowserBridge = {\n enrollmentId: string;\n state: \"online\" | \"offline\";\n bridgeGeneration: string;\n inventoryRevision: number;\n connectedProfileCount: number;\n lastSeenAt: string;\n};\n\nexport type AttachedBrowserDeviceListResponse = {\n revision: number;\n bridges: AttachedBrowserBridge[];\n devices: AttachedBrowserDevice[];\n};\n\nexport type InteractionControllerBinding = {\n controllerId: string;\n controllerGeneration: string;\n placementInstanceId: string;\n};\n\nexport type InteractionAssociation = {\n sessionId: string;\n turnId: string | null;\n attemptId: string | null;\n relationship: \"created\" | \"using\" | \"observing\" | \"related\";\n actorSubjectId: string;\n lastUsedAt: string;\n};\n\nexport type InteractionLifecycle =\n | \"starting\"\n | \"active\"\n | \"suspending\"\n | \"suspended\"\n | \"restoring\"\n | \"repair_required\"\n | \"lost\"\n | \"ending\"\n | \"ended\"\n | \"failed\";\n\nexport type BrowserSessionCapabilities = {\n semanticObservation: boolean;\n screenshots: boolean;\n liveFrames: boolean;\n humanInput: boolean;\n tabs: boolean;\n downloads: boolean;\n uploads: boolean;\n clipboard: boolean;\n permissions: boolean;\n diagnostics: boolean;\n rawCdp: boolean;\n linkedComputer: boolean;\n privateCheckpoint: boolean;\n identityPublication: boolean;\n parallelTargets: boolean;\n};\n\nexport type BrowserSession = {\n id: string;\n accountId: string;\n workspaceId: string;\n name: string;\n lifecycle: InteractionLifecycle;\n placement: InteractionPlacement;\n controller: InteractionControllerBinding | null;\n driverId: string;\n engine: \"chromium\" | \"chrome\" | \"firefox\" | \"webkit\" | \"lightpanda\" | \"external\";\n engineVersion: string | null;\n headless: boolean;\n identityId: string | null;\n baseRevisionId: string | null;\n networkRouteId: string | null;\n linkedComputerSessionId: string | null;\n capabilities: BrowserSessionCapabilities;\n associations: InteractionAssociation[];\n createdBySubjectId: string;\n createdAt: string;\n lastUsedAt: string;\n failureCode: string | null;\n};\n\nexport type BrowserClipboard = {\n browserSessionId: string;\n controllerGeneration: string;\n revision: number;\n text: string;\n source: \"empty\" | \"write\" | \"clear\" | \"copy\" | \"paste\";\n sourceTargetId: string | null;\n updatedAt: string | null;\n};\n\nexport type InteractionCredentialAuthorityRef = {\n connectionId: string;\n connectionSubjectId: string | null;\n providerDomain: string;\n};\n\nexport type NetworkRouteConfiguration =\n | { kind: \"direct\" }\n | {\n kind: \"proxy\";\n protocol: \"http\" | \"https\" | \"socks5\";\n host: string;\n port: number;\n credential: InteractionCredentialAuthorityRef | null;\n }\n | {\n kind: \"managed\";\n providerId: string;\n routeId: string;\n egressClass: \"datacenter\" | \"residential\" | \"isp\";\n region: string | null;\n credential: InteractionCredentialAuthorityRef | null;\n }\n | { kind: \"tunnel\"; placement: InteractionPlacement; tunnelId: string };\n\nexport type NetworkRouteConsistency = {\n dns: \"placement\" | \"proxy\" | \"provider\";\n expectedPublicIp: string | null;\n expectedRegion: string | null;\n locale: string | null;\n timezone: string | null;\n geolocation: {\n latitude: number;\n longitude: number;\n accuracyMeters: number;\n } | null;\n webRtc: \"default\" | \"disable_non_proxied_udp\" | \"proxy_only\";\n stability: \"session\" | \"sticky\" | \"persistent\";\n};\n\nexport type NetworkRoute = {\n id: string;\n accountId: string;\n workspaceId: string;\n name: string;\n status: \"active\" | \"archived\";\n configuration: NetworkRouteConfiguration;\n consistency: NetworkRouteConsistency;\n version: number;\n createdBySubjectId: string;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type NetworkRouteListResponse = { revision: number; routes: NetworkRoute[] };\nexport type CreateNetworkRouteRequest = {\n operationId: string;\n name: string;\n configuration: NetworkRouteConfiguration;\n consistency: NetworkRouteConsistency;\n};\nexport type UpdateNetworkRouteRequest = {\n operationId: string;\n expectedVersion: number;\n name?: string | undefined;\n status?: \"active\" | \"archived\" | undefined;\n configuration?: NetworkRouteConfiguration | undefined;\n consistency?: NetworkRouteConsistency | undefined;\n};\nexport type NetworkRouteMutationResponse = {\n route: NetworkRoute;\n operationId: string;\n replayed: boolean;\n};\n\nexport type SiteAuthFieldPurpose = \"identifier\" | \"password\" | \"secret\" | \"totp\";\nexport type SiteAuthAuthority =\n | {\n id: string;\n kind: \"connection_fields\";\n label: string;\n credential: InteractionCredentialAuthorityRef;\n fields: Array<{\n id: string;\n purpose: SiteAuthFieldPurpose;\n credentialKey: string;\n digits?: number | undefined;\n periodSeconds?: number | undefined;\n algorithm?: \"sha1\" | \"sha256\" | \"sha512\" | undefined;\n }>;\n }\n | {\n id: string;\n kind: \"human\";\n label: string;\n fields: Array<{ id: string; purpose: SiteAuthFieldPurpose }>;\n }\n | {\n id: string;\n kind: \"external_provider\";\n label: string;\n adapterId: string;\n connectionId: string;\n credential: InteractionCredentialAuthorityRef | null;\n };\n\nexport type SiteAuthMethod = {\n id: string;\n kind: \"password\" | \"sso\" | \"magic_link\" | \"passkey\" | \"external\";\n label: string;\n authorityIds: string[];\n};\n\nexport type SiteAuthHealthPolicy = {\n mode: \"on_use\" | \"maintained\";\n intervalSeconds: number | null;\n automaticRepair: boolean;\n};\n\nexport type SiteAuthConnectionConfiguration = {\n name: string;\n accountLabel: string;\n origins: string[];\n loginUrl: string | null;\n verificationUrlPrefixes: string[];\n authorities: SiteAuthAuthority[];\n methods: SiteAuthMethod[];\n preferredIdentityId: string | null;\n preferredPlacement: InteractionPlacement | null;\n preferredNetworkRouteId: string | null;\n healthPolicy: SiteAuthHealthPolicy;\n};\n\nexport type SiteAuthConnection = SiteAuthConnectionConfiguration & {\n id: string;\n accountId: string;\n workspaceId: string;\n status: \"active\" | \"archived\";\n verificationState: \"unknown\" | \"verified\" | \"needs_repair\" | \"failed\";\n lastVerifiedAt: string | null;\n lastVerifiedUrl: string | null;\n lastCheckedAt: string | null;\n nextCheckAt: string | null;\n maintenance: {\n action: \"health_check\" | \"repair\";\n sessionId: string | null;\n dueAt: string;\n startedAt: string | null;\n } | null;\n repairCode: string | null;\n version: number;\n createdBySubjectId: string;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type SiteAuthConnectionListResponse = {\n revision: number;\n connections: SiteAuthConnection[];\n};\nexport type CreateSiteAuthConnectionRequest = SiteAuthConnectionConfiguration & {\n operationId: string;\n};\nexport type UpdateSiteAuthConnectionRequest = Partial<SiteAuthConnectionConfiguration> & {\n operationId: string;\n expectedVersion: number;\n status?: \"active\" | \"archived\" | undefined;\n};\nexport type SiteAuthConnectionMutationResponse = {\n connection: SiteAuthConnection;\n operationId: string;\n replayed: boolean;\n};\n\nexport type AuthRun = {\n id: string;\n accountId: string;\n workspaceId: string;\n siteAuthConnectionId: string;\n browserSessionId: string;\n targetId: string;\n controllerGeneration: string;\n targetGeneration: string;\n documentGeneration: string | null;\n purpose: \"authenticate\" | \"health_check\" | \"repair\";\n methodId: string | null;\n authorityId: string | null;\n state:\n | \"discovering\"\n | \"awaiting_choice\"\n | \"awaiting_secret\"\n | \"awaiting_external_action\"\n | \"working\"\n | \"verified\"\n | \"failed\"\n | \"cancelled\";\n choices: Array<{ id: string; label: string; methodId: string }>;\n pendingFields: Array<{ id: string; label: string; purpose: SiteAuthFieldPurpose }>;\n externalAction: {\n kind: \"push\" | \"security_key\" | \"passkey\" | \"device\" | \"human\" | \"other\";\n label: string;\n expiresAt: string | null;\n } | null;\n interventionId: string | null;\n verifiedUrl: string | null;\n failureCode: string | null;\n version: number;\n operationId: string;\n createdBySubjectId: string;\n createdAt: string;\n updatedAt: string;\n settledAt: string | null;\n};\n\nexport type AuthRunListResponse = { runs: AuthRun[] };\nexport type AuthRunMutationResponse = { run: AuthRun; operationId: string; replayed: boolean };\nexport type StartAuthRunRequest = {\n operationId: string;\n siteAuthConnectionId: string;\n targetId: string;\n expectedTargetGeneration: string;\n expectedDocumentGeneration: string | null;\n purpose?: \"authenticate\" | \"health_check\" | \"repair\" | undefined;\n methodId?: string | undefined;\n authorityId?: string | undefined;\n};\nexport type ReportAuthRunRequest = {\n operationId: string;\n expectedVersion: number;\n methodId?: string | undefined;\n authorityId?: string | undefined;\n state:\n | \"awaiting_choice\"\n | \"awaiting_secret\"\n | \"awaiting_external_action\"\n | \"working\"\n | \"failed\"\n | \"cancelled\";\n choices?: AuthRun[\"choices\"] | undefined;\n pendingFields?: AuthRun[\"pendingFields\"] | undefined;\n externalAction?: AuthRun[\"externalAction\"] | undefined;\n failureCode?: string | null | undefined;\n};\nexport type ProtectedAuthFillRequest = {\n operationId: string;\n expectedVersion: number;\n expectedTargetGeneration: string;\n expectedDocumentGeneration: string | null;\n expectedFrameId: string | null;\n authorityId: string;\n fields: Array<{ fieldId: string; locator: BrowserLocator }>;\n submit:\n | { type: \"none\" }\n | { type: \"click\"; locator: BrowserLocator }\n | { type: \"press\"; key: string; locator?: BrowserLocator | undefined };\n};\nexport type ProtectedAuthFillResponse = {\n run: AuthRun;\n status: \"submitted\" | \"working\" | \"needs_human\" | \"stale\" | \"failed\";\n operationId: string;\n replayed: boolean;\n};\nexport type ExternalAuthRunRequest = {\n operationId: string;\n expectedVersion: number;\n action: \"start\" | \"poll\";\n};\nexport type ExternalAuthRunResponse = {\n run: AuthRun;\n status: \"working\" | \"needs_human\" | \"ready_to_verify\" | \"failed\";\n operationId: string;\n replayed: boolean;\n};\nexport type ExternalAuthInteractiveRequest = {\n operationId: string;\n expectedVersion: number;\n};\nexport type ExternalAuthInteractiveResponse = {\n authRunId: string;\n url: string;\n expiresAt: string | null;\n};\nexport type VerifyAuthRunRequest = { operationId: string; expectedVersion: number };\n\nexport type InteractionIntervention = {\n id: string;\n accountId: string;\n workspaceId: string;\n resourceKind: \"browser_session\" | \"computer_session\";\n resourceId: string;\n targetId: string;\n controllerGeneration: string;\n targetGeneration: string;\n documentGeneration: string | null;\n kind: \"manual_login\" | \"mfa\" | \"external_action\" | \"confirmation\" | \"other\";\n reason: string;\n status: \"open\" | \"completed\" | \"dismissed\" | \"expired\" | \"cancelled\";\n authRunId: string | null;\n originatingSessionId: string;\n originatingTurnId: string | null;\n originatingAttemptId: string | null;\n originatingToolOperationId: string | null;\n responseActorSubjectId: string | null;\n version: number;\n operationId: string;\n expiresAt: string;\n createdAt: string;\n updatedAt: string;\n settledAt: string | null;\n};\nexport type InteractionInterventionListResponse = {\n interventions: InteractionIntervention[];\n};\nexport type CreateInteractionInterventionRequest = {\n operationId: string;\n resourceKind: \"browser_session\" | \"computer_session\";\n resourceId: string;\n targetId: string;\n expectedControllerGeneration: string;\n expectedTargetGeneration: string;\n expectedDocumentGeneration: string | null;\n kind: InteractionIntervention[\"kind\"];\n reason: string;\n authRunId?: string | undefined;\n expiresInSeconds?: number | undefined;\n};\nexport type ResolveInteractionInterventionRequest = {\n operationId: string;\n expectedVersion: number;\n outcome: \"completed\" | \"dismissed\";\n};\nexport type InteractionInterventionMutationResponse = {\n intervention: InteractionIntervention;\n operationId: string;\n replayed: boolean;\n};\n\nexport type BrowserIdentityStatus = \"active\" | \"archived\";\nexport type BrowserRevisionComponentKind =\n | \"chromium_profile\"\n | \"normalized_web_state\"\n | \"provider_snapshot\";\nexport type BrowserRevisionPortability = \"portable\" | \"provider_bound\" | \"placement_bound\";\n\nexport type BrowserRevisionMaterialization = {\n portability: BrowserRevisionPortability;\n reason: string | null;\n platform: \"linux\" | \"macos\" | \"windows\" | null;\n architecture: \"x64\" | \"arm64\" | null;\n engine: \"chromium\" | \"chrome\" | \"firefox\" | \"webkit\" | \"lightpanda\" | \"external\";\n engineVersion: string | null;\n driverId: string;\n driverSchemaVersion: number;\n profileCrypto: \"chromium_basic\" | \"chromium_mock_keychain\" | \"platform_bound\";\n providerId: string | null;\n placement: InteractionPlacement | null;\n};\n\nexport type BrowserRevisionComponent = {\n id: string;\n kind: BrowserRevisionComponentKind;\n format: string;\n artifactDigest: string;\n sizeBytes: number;\n materialization: BrowserRevisionMaterialization;\n};\n\nexport type BrowserRevision = {\n id: string;\n accountId: string;\n workspaceId: string;\n identityId: string;\n parentRevisionId: string | null;\n ordinal: number;\n sourceBrowserSessionId: string;\n manifestDigest: string;\n components: BrowserRevisionComponent[];\n createdBySubjectId: string;\n createdAt: string;\n};\n\nexport type BrowserIdentity = {\n id: string;\n accountId: string;\n workspaceId: string;\n name: string;\n status: BrowserIdentityStatus;\n version: number;\n defaultRevisionId: string | null;\n headGeneration: number;\n revisionCount: number;\n createdBySubjectId: string;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type BrowserIdentityListResponse = {\n revision: number;\n identities: BrowserIdentity[];\n};\n\nexport type BrowserRevisionListResponse = {\n identity: BrowserIdentity;\n revisions: BrowserRevision[];\n};\n\nexport type CreateBrowserIdentityRequest = {\n operationId: string;\n name: string;\n};\n\nexport type UpdateBrowserIdentityRequest = {\n operationId: string;\n expectedVersion: number;\n name?: string | undefined;\n status?: BrowserIdentityStatus | undefined;\n defaultRevisionId?: string | undefined;\n};\n\nexport type BrowserIdentityMutationResponse = {\n identity: BrowserIdentity;\n operationId: string;\n replayed: boolean;\n};\n\nexport type PublishBrowserRevisionRequest = {\n operationId: string;\n identityId: string;\n expectedHeadGeneration: number;\n advanceDefault?: boolean | undefined;\n};\n\nexport type PublishBrowserRevisionResponse = {\n identity: BrowserIdentity;\n revision: BrowserRevision;\n outcome: \"saved_as_default\" | \"saved_not_default\";\n replayed: boolean;\n};\n\nexport type BrowserTarget = {\n id: string;\n browserSessionId: string;\n controllerGeneration: string;\n targetGeneration: string;\n documentGeneration: string | null;\n kind: \"page\" | \"popup\" | \"background_page\" | \"worker\";\n title: string;\n url: string;\n selected: boolean;\n attached: boolean;\n createdAt: string;\n};\n\nexport type BrowserDownloadStatus =\n | \"in_progress\"\n | \"completed\"\n | \"cancelled\"\n | \"failed\"\n | \"unavailable\";\n\n/** One browser-produced file. Its bytes remain private to the exact browser\n * controller until an explicit save publishes them into the workspace. */\nexport type BrowserDownload = {\n id: string;\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string | null;\n filename: string;\n status: BrowserDownloadStatus;\n receivedBytes: number;\n totalBytes: number | null;\n sha256: string | null;\n version: number;\n startedAt: string;\n settledAt: string | null;\n failureCode: string | null;\n};\n\nexport type BrowserDownloadListResponse = {\n browserSessionId: string;\n controllerGeneration: string;\n downloads: BrowserDownload[];\n};\n\nexport type BrowserDownloadSaveRequest = {\n operationId: string;\n destinationPath: string;\n overwrite?: boolean | undefined;\n};\n\nexport type BrowserDownloadSaveResponse = {\n download: BrowserDownload;\n destinationPath: string;\n fileId: string;\n operationId: string;\n replayed: boolean;\n};\n\nexport type InteractionRect = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type InteractionRedactedValue = {\n redacted: true;\n reason: \"password\" | \"payment\" | \"private\" | \"policy\";\n};\n\nexport type InteractionSemanticNode = {\n ref: string;\n role: string;\n identifier?: string | undefined;\n name?: string | undefined;\n description?: string | undefined;\n value?: string | InteractionRedactedValue | undefined;\n states: string[];\n bounds?: InteractionRect | undefined;\n actions: string[];\n children?: InteractionSemanticNode[] | undefined;\n native?: { platform: \"dom\" | \"mac_ax\" | \"at_spi\" | \"uia\"; data: unknown } | undefined;\n};\n\nexport type InteractionSemanticSnapshot = {\n kind: \"snapshot\";\n roots: InteractionSemanticNode[];\n nodeCount: number;\n};\n\nexport type InteractionSemanticDiff = {\n kind: \"diff\";\n baseObservationId: string;\n removedRefs: string[];\n changed: InteractionSemanticNode[];\n};\n\nexport type InteractionDiagnosticSummary = {\n consoleErrorCount: number;\n failedRequestCount: number;\n downloadCount: number;\n pageErrorCount: number;\n};\n\nexport type BrowserDialog = {\n type: \"alert\" | \"confirm\" | \"prompt\" | \"beforeunload\";\n message: string;\n defaultPrompt: string;\n openedAt: string;\n};\n\nexport type BrowserObservation = {\n protocolVersion: typeof INTERACTION_PROTOCOL_VERSION;\n observationId: string;\n browserSessionId: string;\n target: BrowserTarget;\n frameId: string | null;\n semantic: InteractionSemanticSnapshot | InteractionSemanticDiff | null;\n screenshot: RetainedArtifactReference | null;\n viewport?:\n | {\n width: number;\n height: number;\n visualWidth: number;\n visualHeight: number;\n deviceScaleFactor: number;\n maxTouchPoints: number;\n }\n | null\n | undefined;\n focusedRef: string | null;\n changedRegions: InteractionRect[];\n diagnostics: InteractionDiagnosticSummary;\n dialog: BrowserDialog | null;\n observedAt: string;\n};\n\nexport type BrowserDiagnosticKind = \"console\" | \"page_error\" | \"failed_request\" | \"download\";\n\nexport type BrowserDiagnosticEntry = {\n sequence: number;\n kind: BrowserDiagnosticKind;\n level: \"debug\" | \"info\" | \"warning\" | \"error\" | null;\n message: string;\n url: string | null;\n method: string | null;\n status: number | null;\n filename: string | null;\n occurredAt: string;\n};\n\nexport type BrowserDiagnosticBatch = {\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string;\n targetGeneration: string;\n entries: BrowserDiagnosticEntry[];\n cursor: number;\n truncated: boolean;\n};\n\nexport type BrowserLocator =\n | { kind: \"ref\"; ref: string }\n | {\n kind: \"role\";\n role: string;\n name?: string | undefined;\n exact?: boolean | undefined;\n }\n | { kind: \"label\"; text: string }\n | { kind: \"text\"; text: string }\n | { kind: \"placeholder\"; text: string }\n | { kind: \"test_id\"; value: string }\n | { kind: \"css\"; selector: string };\n\nexport type BrowserPermission =\n | \"geolocation\"\n | \"notifications\"\n | \"camera\"\n | \"microphone\"\n | \"midi\"\n | \"midi_sysex\"\n | \"sensors\"\n | \"idle_detection\"\n | \"local_fonts\"\n | \"window_management\";\n\nexport type BrowserPermissionSetting = \"granted\" | \"denied\" | \"prompt\";\n\nexport type BrowserAction =\n | { type: \"navigate\"; url: string }\n | { type: \"history\"; direction: \"back\" | \"forward\" }\n | { type: \"activate\" }\n | {\n type: \"viewport\";\n width: number;\n height: number;\n mobile: boolean;\n deviceScaleFactor?: number | undefined;\n }\n | {\n type: \"click\";\n locator: BrowserLocator;\n button?: \"left\" | \"right\" | \"middle\" | undefined;\n }\n | { type: \"double_click\"; locator: BrowserLocator }\n | { type: \"hover\"; locator: BrowserLocator }\n | { type: \"fill\"; locator: BrowserLocator; value: string }\n | { type: \"type\"; locator?: BrowserLocator | undefined; text: string }\n | { type: \"press\"; locator?: BrowserLocator | undefined; key: string }\n | { type: \"select\"; locator: BrowserLocator; values: string[] }\n | { type: \"check\"; locator: BrowserLocator; checked: boolean }\n | {\n type: \"scroll\";\n locator?: BrowserLocator | undefined;\n deltaX: number;\n deltaY: number;\n }\n | { type: \"drag\"; from: BrowserLocator; to: BrowserLocator }\n | {\n type: \"pointer\";\n action: \"click\" | \"double_click\" | \"move\" | \"scroll\" | \"drag\";\n x: number;\n y: number;\n endX?: number | undefined;\n endY?: number | undefined;\n deltaX?: number | undefined;\n deltaY?: number | undefined;\n button?: \"left\" | \"right\" | \"middle\" | undefined;\n clickCount?: 1 | 2 | undefined;\n }\n | {\n type: \"handle_dialog\";\n response: \"accept\" | \"dismiss\";\n promptText?: string | undefined;\n }\n | { type: \"upload\"; locator: BrowserLocator; workspaceFileIds: string[] }\n | {\n type: \"clipboard\";\n operation: \"write\" | \"clear\" | \"copy\" | \"paste\";\n text?: string | undefined;\n locator?: BrowserLocator | undefined;\n content?: \"selection\" | \"value\" | \"text\" | undefined;\n }\n | {\n type: \"permission\";\n permission: BrowserPermission;\n setting: BrowserPermissionSetting;\n }\n | {\n type: \"wait\";\n condition: \"load\" | \"network_idle\" | \"visible\" | \"hidden\";\n locator?: BrowserLocator | undefined;\n timeoutMs?: number | undefined;\n };\n\nexport type BrowserActionBatch = { type: \"batch\"; actions: BrowserAction[] };\n\nexport type InteractionError = {\n code:\n | \"resource_not_found\"\n | \"resource_unavailable\"\n | \"controller_stale\"\n | \"target_not_found\"\n | \"target_stale\"\n | \"observation_stale\"\n | \"document_stale\"\n | \"frame_stale\"\n | \"locator_not_found\"\n | \"locator_ambiguous\"\n | \"unsupported\"\n | \"permission_denied\"\n | \"machine_locked\"\n | \"attempt_stale\"\n | \"operation_conflict\"\n | \"outcome_unknown\"\n | \"invalid_action\"\n | \"timeout\"\n | \"controller_lost\"\n | \"driver_failed\";\n message: string;\n retryable: boolean;\n details?: Record<string, InteractionJsonValue> | undefined;\n};\n\nexport type InteractionOperationState =\n | \"prepared\"\n | \"dispatched\"\n | \"completed\"\n | \"failed\"\n | \"outcome_unknown\";\n\nexport type InteractionLifecycleOperationReceipt = {\n operationId: string;\n resourceKind: \"browser_session\" | \"computer_session\";\n resourceId: string;\n kind: \"create\" | \"resume\" | \"suspend\" | \"end\" | \"publish\";\n state: InteractionOperationState;\n replayed: boolean;\n error: InteractionError | null;\n createdAt: string;\n dispatchedAt: string | null;\n settledAt: string | null;\n};\n\nexport type CreateBrowserSessionRequest = {\n operationId: string;\n sessionId: string;\n name?: string | undefined;\n initialUrl?: string | undefined;\n headless?: boolean | undefined;\n engine?: \"chromium\" | \"lightpanda\" | undefined;\n placement?: InteractionPlacement | undefined;\n identityId?: string | undefined;\n baseRevisionId?: string | undefined;\n networkRouteId?: string | undefined;\n linkedComputerSessionId?: string | undefined;\n};\n\nexport type BrowserSessionListResponse = {\n revision: number;\n sessions: BrowserSession[];\n};\n\nexport type BrowserSessionMutationResponse = {\n session: BrowserSession;\n operation: InteractionLifecycleOperationReceipt;\n};\n\nexport type BrowserSessionLifecycleRequest = { operationId: string };\nexport type BrowserOpenTargetRequest = { url?: string | undefined };\n\nexport type BrowserTargetListResponse = {\n browserSessionId: string;\n controllerGeneration: string;\n targets: BrowserTarget[];\n};\n\nexport type InteractionFrameStreamAttachment<RelayKind extends 3 | 4 = 3 | 4> =\n | { kind: \"direct_websocket\"; url: string; protocols: string[] }\n | {\n kind: \"relay\";\n url: string;\n token: string;\n channel: {\n channelId: string;\n workspaceId: string;\n agentId: string;\n kind: RelayKind;\n port: number;\n };\n };\n\nexport type ComputerFrameStreamAttachment =\n | InteractionFrameStreamAttachment<4>\n | { kind: \"direct_rfb\"; url: string; protocols: string[] };\n\nexport type BrowserSessionAttachment = {\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string;\n stream: InteractionFrameStreamAttachment<3>;\n expiresAt: string;\n};\n\nexport type BrowserSessionAttachmentRequest = {\n targetId: string;\n expiresInSeconds?: number | undefined;\n stream?: BrowserFrameStreamOptions | undefined;\n};\n\nexport type BrowserActionRequest = {\n operationId: string;\n targetId: string;\n expectedTargetGeneration: string;\n expectedDocumentGeneration: string | null;\n expectedFrameId: string | null;\n observationMode?: \"full\" | \"none\" | undefined;\n action: BrowserAction | BrowserActionBatch;\n};\n\nexport type BrowserActionReceipt = {\n protocolVersion: typeof INTERACTION_PROTOCOL_VERSION;\n operationId: string;\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string;\n state: InteractionOperationState;\n dispatchedAt: string | null;\n settledAt: string | null;\n observation: BrowserObservation | null;\n error: InteractionError | null;\n};\n\nexport type BrowserSessionHeartbeatResponse = {\n browserSessionId: string;\n controllerGeneration: string;\n alive: true;\n};\n\nexport type ComputerSessionCapabilities = {\n semanticObservation: boolean;\n appDiscovery: boolean;\n appLaunch: boolean;\n windowCapture: boolean;\n screenCapture: boolean;\n semanticActions: boolean;\n pointerInput: boolean;\n keyboardInput: boolean;\n clipboard: boolean;\n backgroundActions: boolean;\n parallelApps: boolean;\n};\n\nexport type ComputerClipboard = {\n computerSessionId: string;\n controllerGeneration: string;\n text: string | null;\n truncated: boolean;\n observedAt: string;\n};\n\nexport type ComputerSession = {\n id: string;\n accountId: string;\n workspaceId: string;\n name: string;\n lifecycle: InteractionLifecycle;\n placement: InteractionPlacement;\n controller: InteractionControllerBinding | null;\n platform: \"linux\" | \"macos\" | \"windows\" | null;\n adapter: string | null;\n seatId: string | null;\n displayId: string | null;\n capabilities: ComputerSessionCapabilities | null;\n associations: InteractionAssociation[];\n createdBySubjectId: string;\n createdAt: string;\n lastUsedAt: string;\n failureCode: string | null;\n};\n\nexport type ComputerTarget = {\n id: string;\n computerSessionId: string;\n controllerGeneration: string;\n targetGeneration: string;\n kind: \"app\" | \"window\" | \"screen\";\n applicationId: string | null;\n processId: number | null;\n title: string;\n bounds: InteractionRect | null;\n focused: boolean;\n};\n\nexport type ComputerObservation = {\n protocolVersion: typeof INTERACTION_PROTOCOL_VERSION;\n observationId: string;\n computerSessionId: string;\n target: ComputerTarget;\n frameId: string | null;\n semantic: InteractionSemanticSnapshot | InteractionSemanticDiff | null;\n screenshot: RetainedArtifactReference | null;\n focusedRef: string | null;\n changedRegions: InteractionRect[];\n observedAt: string;\n};\n\nexport type ComputerLocator =\n | { kind: \"ref\"; ref: string }\n | {\n kind: \"role\";\n role: string;\n name?: string | undefined;\n exact?: boolean | undefined;\n }\n | { kind: \"label\"; text: string; exact?: boolean | undefined }\n | { kind: \"text\"; text: string; exact?: boolean | undefined }\n | { kind: \"identifier\"; value: string };\n\nexport type ComputerAction =\n | {\n type: \"semantic\";\n locator: ComputerLocator;\n action:\n | \"invoke\"\n | \"focus\"\n | \"set_value\"\n | \"increment\"\n | \"decrement\"\n | \"select\"\n | \"deselect\"\n | \"expand\"\n | \"collapse\"\n | \"show_menu\"\n | \"scroll_into_view\";\n value?: string | number | boolean | undefined;\n }\n | {\n type: \"pointer\";\n frameId: string;\n action: \"click\" | \"double_click\" | \"move\" | \"scroll\" | \"drag\";\n x: number;\n y: number;\n endX?: number | undefined;\n endY?: number | undefined;\n deltaX?: number | undefined;\n deltaY?: number | undefined;\n button?: \"left\" | \"right\" | \"middle\" | undefined;\n }\n | { type: \"keyboard\"; action: \"type\" | \"press\"; value: string }\n | {\n type: \"clipboard\";\n operation: \"write\" | \"clear\" | \"copy\" | \"paste\";\n text?: string | undefined;\n }\n | { type: \"focus\"; targetId: string }\n | { type: \"launch\"; applicationId: string };\n\nexport type CreateComputerSessionRequest = {\n operationId: string;\n sessionId: string;\n name?: string | undefined;\n placement?: InteractionPlacement | undefined;\n};\n\nexport type ComputerSessionListResponse = {\n revision: number;\n sessions: ComputerSession[];\n};\n\nexport type ComputerSessionMutationResponse = {\n session: ComputerSession;\n operation: InteractionLifecycleOperationReceipt;\n};\n\nexport type ComputerSessionLifecycleRequest = { operationId: string };\n\nexport type ComputerTargetListResponse = {\n computerSessionId: string;\n controllerGeneration: string;\n targets: ComputerTarget[];\n};\n\nexport type InteractionFrameStreamOptions = {\n format?: \"jpeg\" | \"png\" | undefined;\n quality?: number | undefined;\n maxWidth?: number | undefined;\n maxHeight?: number | undefined;\n everyNthFrame?: number | undefined;\n};\n\nexport type ComputerFrameStreamOptions = InteractionFrameStreamOptions;\n\nexport type ComputerSessionAttachment = {\n computerSessionId: string;\n controllerGeneration: string;\n targetId: string;\n stream: ComputerFrameStreamAttachment;\n expiresAt: string;\n};\n\nexport type ComputerSessionAttachmentRequest = {\n targetId: string;\n expiresInSeconds?: number | undefined;\n stream?: ComputerFrameStreamOptions | undefined;\n};\n\nexport type ComputerActionRequest = {\n operationId: string;\n targetId: string;\n expectedTargetGeneration: string;\n expectedObservationId: string | null;\n expectedFrameId: string | null;\n action: ComputerAction;\n};\n\nexport type ComputerActionReceipt = {\n protocolVersion: typeof INTERACTION_PROTOCOL_VERSION;\n operationId: string;\n computerSessionId: string;\n controllerGeneration: string;\n targetId: string;\n state: InteractionOperationState;\n dispatchedAt: string | null;\n settledAt: string | null;\n observation: ComputerObservation | null;\n error: InteractionError | null;\n};\n\nexport type ComputerSessionHeartbeatResponse = {\n computerSessionId: string;\n controllerGeneration: string;\n alive: true;\n};\n\nexport type BrowserDiagnosticsOptions = {\n kinds?: BrowserDiagnosticKind[] | undefined;\n after?: number | undefined;\n limit?: number | undefined;\n signal?: AbortSignal | undefined;\n};\n\n/** The exact HTTP surface needed by the framework-free interaction client. */\nexport interface InteractionTransport {\n listNetworkRoutes(\n workspaceId: string,\n options?: NetworkRouteListOptions,\n ): Promise<NetworkRouteListResponse>;\n getNetworkRoute(\n workspaceId: string,\n networkRouteId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<NetworkRoute>;\n createNetworkRoute(\n workspaceId: string,\n request: CreateNetworkRouteRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<NetworkRouteMutationResponse>;\n updateNetworkRoute(\n workspaceId: string,\n networkRouteId: string,\n request: UpdateNetworkRouteRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<NetworkRouteMutationResponse>;\n listSiteAuthConnections(\n workspaceId: string,\n options?: SiteAuthConnectionListOptions,\n ): Promise<SiteAuthConnectionListResponse>;\n getSiteAuthConnection(\n workspaceId: string,\n siteAuthConnectionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<SiteAuthConnection>;\n createSiteAuthConnection(\n workspaceId: string,\n request: CreateSiteAuthConnectionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<SiteAuthConnectionMutationResponse>;\n updateSiteAuthConnection(\n workspaceId: string,\n siteAuthConnectionId: string,\n request: UpdateSiteAuthConnectionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<SiteAuthConnectionMutationResponse>;\n listAuthRuns(workspaceId: string, options?: AuthRunListOptions): Promise<AuthRunListResponse>;\n getAuthRun(\n workspaceId: string,\n authRunId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<AuthRun>;\n startBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n request: StartAuthRunRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<AuthRunMutationResponse>;\n reportBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ReportAuthRunRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<AuthRunMutationResponse>;\n protectedBrowserAuthFill(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ProtectedAuthFillRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ProtectedAuthFillResponse>;\n advanceExternalBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ExternalAuthRunRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ExternalAuthRunResponse>;\n openExternalBrowserAuthFlow(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ExternalAuthInteractiveRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ExternalAuthInteractiveResponse>;\n verifyBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: VerifyAuthRunRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<AuthRunMutationResponse>;\n listInteractionInterventions(\n workspaceId: string,\n options?: InteractionInterventionListOptions,\n ): Promise<InteractionInterventionListResponse>;\n getInteractionIntervention(\n workspaceId: string,\n interventionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<InteractionIntervention>;\n createInteractionIntervention(\n workspaceId: string,\n request: CreateInteractionInterventionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<InteractionInterventionMutationResponse>;\n resolveInteractionIntervention(\n workspaceId: string,\n interventionId: string,\n request: ResolveInteractionInterventionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<InteractionInterventionMutationResponse>;\n listAttachedBrowsers(\n workspaceId: string,\n options?: AttachedBrowserDeviceListOptions,\n ): Promise<AttachedBrowserDeviceListResponse>;\n getAttachedBrowser(\n workspaceId: string,\n deviceId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<AttachedBrowserDevice>;\n listBrowserIdentities(\n workspaceId: string,\n options?: BrowserIdentityListOptions,\n ): Promise<BrowserIdentityListResponse>;\n getBrowserIdentity(\n workspaceId: string,\n identityId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserIdentity>;\n createBrowserIdentity(\n workspaceId: string,\n request: CreateBrowserIdentityRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserIdentityMutationResponse>;\n updateBrowserIdentity(\n workspaceId: string,\n identityId: string,\n request: UpdateBrowserIdentityRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserIdentityMutationResponse>;\n listBrowserRevisions(\n workspaceId: string,\n identityId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserRevisionListResponse>;\n listBrowserSessions(\n workspaceId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionListResponse>;\n getBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSession>;\n readBrowserClipboard(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserClipboard>;\n listBrowserDownloads(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserDownloadListResponse>;\n getBrowserDownload(\n workspaceId: string,\n browserSessionId: string,\n downloadId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserDownload>;\n saveBrowserDownload(\n workspaceId: string,\n browserSessionId: string,\n downloadId: string,\n request: BrowserDownloadSaveRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserDownloadSaveResponse>;\n createBrowserSession(\n workspaceId: string,\n request: CreateBrowserSessionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionMutationResponse>;\n listBrowserTargets(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserTargetListResponse>;\n openBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n request?: BrowserOpenTargetRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserObservation>;\n selectBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserObservation>;\n closeBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserTargetListResponse>;\n observeBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserObservation>;\n getBrowserTargetState(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserTargetState>;\n readBrowserDom(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n request: BrowserDomReadRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserDomReadResponse>;\n captureBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n captureOptions?: BrowserScreenshotOptions,\n ): Promise<BrowserFrame>;\n actInBrowser(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserActionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserActionReceipt>;\n getBrowserActionReceipt(\n workspaceId: string,\n browserSessionId: string,\n operationId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserActionReceipt>;\n listBrowserDiagnostics(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options?: BrowserDiagnosticsOptions,\n ): Promise<BrowserDiagnosticBatch>;\n attachBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionAttachmentRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionAttachment>;\n heartbeatBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionHeartbeatResponse>;\n publishBrowserRevision(\n workspaceId: string,\n browserSessionId: string,\n request: PublishBrowserRevisionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<PublishBrowserRevisionResponse>;\n suspendBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionMutationResponse>;\n resumeBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionMutationResponse>;\n endBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<BrowserSessionMutationResponse>;\n listComputerSessions(\n workspaceId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionListResponse>;\n getComputerSession(\n workspaceId: string,\n computerSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSession>;\n readComputerClipboard(\n workspaceId: string,\n computerSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerClipboard>;\n createComputerSession(\n workspaceId: string,\n request: CreateComputerSessionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionMutationResponse>;\n listComputerTargets(\n workspaceId: string,\n computerSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerTargetListResponse>;\n observeComputerTarget(\n workspaceId: string,\n computerSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerObservation>;\n captureComputerTarget(\n workspaceId: string,\n computerSessionId: string,\n targetId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerFrame>;\n actInComputer(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerActionRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerActionReceipt>;\n getComputerActionReceipt(\n workspaceId: string,\n computerSessionId: string,\n operationId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerActionReceipt>;\n attachComputerSession(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerSessionAttachmentRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionAttachment>;\n heartbeatComputerSession(\n workspaceId: string,\n computerSessionId: string,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionHeartbeatResponse>;\n endComputerSession(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerSessionLifecycleRequest,\n options?: OpenGeniRequestOptions,\n ): Promise<ComputerSessionMutationResponse>;\n}\n\n/** @deprecated Use InteractionTransport. */\nexport type BrowserInteractionTransport = InteractionTransport;\n\nexport type BrowserIdentityListOptions = OpenGeniRequestOptions & {\n includeArchived?: boolean | undefined;\n};\n\nexport type NetworkRouteListOptions = OpenGeniRequestOptions & {\n includeArchived?: boolean | undefined;\n};\n\nexport type SiteAuthConnectionListOptions = OpenGeniRequestOptions & {\n includeArchived?: boolean | undefined;\n};\n\nexport type AuthRunListOptions = OpenGeniRequestOptions & {\n browserSessionId?: string | undefined;\n siteAuthConnectionId?: string | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type InteractionInterventionListOptions = OpenGeniRequestOptions & {\n resourceKind?: \"browser_session\" | \"computer_session\" | undefined;\n resourceId?: string | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type AttachedBrowserDeviceListOptions = OpenGeniRequestOptions & {\n includeDisconnected?: boolean | undefined;\n};\n\nexport type BrowserDownloadSaveOptions = OpenGeniRequestOptions & {\n operationId?: string | undefined;\n overwrite?: boolean | undefined;\n};\n\nexport type CurrentOrOpenBrowserOptions = {\n workspaceId: string;\n associationSessionId: string;\n operationId?: string | undefined;\n name?: string | undefined;\n initialUrl?: string | undefined;\n headless?: boolean | undefined;\n placement?: InteractionPlacement | undefined;\n identityId?: string | undefined;\n baseRevisionId?: string | undefined;\n networkRouteId?: string | undefined;\n linkedComputerSessionId?: string | undefined;\n signal?: AbortSignal | undefined;\n};\n\nexport type CurrentOrOpenComputerOptions = {\n workspaceId: string;\n associationSessionId: string;\n operationId?: string | undefined;\n name?: string | undefined;\n placement?: InteractionPlacement | undefined;\n signal?: AbortSignal | undefined;\n};\n\n/** Framework-free resource facade over the public interaction HTTP API. */\nexport class OpenGeniInteractionClient {\n readonly attachedBrowsers: AttachedBrowserDeviceCollection;\n readonly authRuns: AuthRunCollection;\n readonly browsers: BrowserSessionCollection;\n readonly computers: ComputerSessionCollection;\n readonly identities: BrowserIdentityCollection;\n readonly interventions: InteractionInterventionCollection;\n readonly networkRoutes: NetworkRouteCollection;\n readonly siteAuthConnections: SiteAuthConnectionCollection;\n\n constructor(transport: BrowserInteractionTransport) {\n this.attachedBrowsers = new AttachedBrowserDeviceCollection(transport);\n this.authRuns = new AuthRunCollection(transport);\n this.browsers = new BrowserSessionCollection(transport);\n this.computers = new ComputerSessionCollection(transport);\n this.identities = new BrowserIdentityCollection(transport);\n this.interventions = new InteractionInterventionCollection(transport);\n this.networkRoutes = new NetworkRouteCollection(transport);\n this.siteAuthConnections = new SiteAuthConnectionCollection(transport);\n }\n}\n\nexport class NetworkRouteCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: NetworkRouteListOptions = {},\n ): Promise<NetworkRouteListResponse> {\n return await this.transport.listNetworkRoutes(workspaceId, options);\n }\n\n route(workspaceId: string, networkRouteId: string): NetworkRouteResource {\n return new NetworkRouteResource(this.transport, workspaceId, networkRouteId);\n }\n\n async create(\n workspaceId: string,\n request: CreateNetworkRouteRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRouteResource> {\n const response = await this.transport.createNetworkRoute(workspaceId, request, options);\n return this.route(workspaceId, response.route.id);\n }\n}\n\nexport class NetworkRouteResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<NetworkRoute> {\n return await this.transport.getNetworkRoute(this.workspaceId, this.id, options);\n }\n\n async update(\n request: UpdateNetworkRouteRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRouteMutationResponse> {\n return await this.transport.updateNetworkRoute(this.workspaceId, this.id, request, options);\n }\n}\n\nexport class SiteAuthConnectionCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: SiteAuthConnectionListOptions = {},\n ): Promise<SiteAuthConnectionListResponse> {\n return await this.transport.listSiteAuthConnections(workspaceId, options);\n }\n\n connection(workspaceId: string, connectionId: string): SiteAuthConnectionResource {\n return new SiteAuthConnectionResource(this.transport, workspaceId, connectionId);\n }\n\n async create(\n workspaceId: string,\n request: CreateSiteAuthConnectionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnectionResource> {\n const response = await this.transport.createSiteAuthConnection(workspaceId, request, options);\n return this.connection(workspaceId, response.connection.id);\n }\n}\n\nexport class SiteAuthConnectionResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<SiteAuthConnection> {\n return await this.transport.getSiteAuthConnection(this.workspaceId, this.id, options);\n }\n\n async update(\n request: UpdateSiteAuthConnectionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnectionMutationResponse> {\n return await this.transport.updateSiteAuthConnection(\n this.workspaceId,\n this.id,\n request,\n options,\n );\n }\n}\n\nexport class AuthRunCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(workspaceId: string, options: AuthRunListOptions = {}): Promise<AuthRunListResponse> {\n return await this.transport.listAuthRuns(workspaceId, options);\n }\n\n async get(\n workspaceId: string,\n authRunId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRun> {\n return await this.transport.getAuthRun(workspaceId, authRunId, options);\n }\n\n run(workspaceId: string, browserSessionId: string, authRunId: string): AuthRunResource {\n return new AuthRunResource(this.transport, workspaceId, browserSessionId, authRunId);\n }\n}\n\nexport class BrowserAuthRunCollection {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n ) {}\n\n async list(\n options: Omit<AuthRunListOptions, \"browserSessionId\"> = {},\n ): Promise<AuthRunListResponse> {\n return await this.transport.listAuthRuns(this.workspaceId, {\n ...options,\n browserSessionId: this.browserSessionId,\n });\n }\n\n run(authRunId: string): AuthRunResource {\n return new AuthRunResource(this.transport, this.workspaceId, this.browserSessionId, authRunId);\n }\n\n async start(\n request: StartAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunResource> {\n const response = await this.transport.startBrowserAuthRun(\n this.workspaceId,\n this.browserSessionId,\n request,\n options,\n );\n return this.run(response.run.id);\n }\n}\n\nexport class AuthRunResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<AuthRun> {\n const run = await this.transport.getAuthRun(this.workspaceId, this.id, options);\n if (run.browserSessionId !== this.browserSessionId) {\n throw new Error(\"AuthRun belongs to another BrowserSession\");\n }\n return run;\n }\n\n async report(\n request: ReportAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.transport.reportBrowserAuthRun(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n\n async protectedFill(\n request: ProtectedAuthFillRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ProtectedAuthFillResponse> {\n return await this.transport.protectedBrowserAuthFill(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n\n async advanceExternal(\n request: ExternalAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ExternalAuthRunResponse> {\n return await this.transport.advanceExternalBrowserAuthRun(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n\n /** Human-session helper. Hosted provider URLs never appear in model tools. */\n async openExternalFlow(\n request: ExternalAuthInteractiveRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ExternalAuthInteractiveResponse> {\n return await this.transport.openExternalBrowserAuthFlow(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n\n async verify(\n request: VerifyAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.transport.verifyBrowserAuthRun(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n request,\n options,\n );\n }\n}\n\nexport class InteractionInterventionCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: InteractionInterventionListOptions = {},\n ): Promise<InteractionInterventionListResponse> {\n return await this.transport.listInteractionInterventions(workspaceId, options);\n }\n\n intervention(workspaceId: string, interventionId: string): InteractionInterventionResource {\n return new InteractionInterventionResource(this.transport, workspaceId, interventionId);\n }\n\n async create(\n workspaceId: string,\n request: CreateInteractionInterventionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionInterventionResource> {\n const response = await this.transport.createInteractionIntervention(\n workspaceId,\n request,\n options,\n );\n return this.intervention(workspaceId, response.intervention.id);\n }\n}\n\nexport class InteractionInterventionResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<InteractionIntervention> {\n return await this.transport.getInteractionIntervention(this.workspaceId, this.id, options);\n }\n\n async resolve(\n request: ResolveInteractionInterventionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionInterventionMutationResponse> {\n return await this.transport.resolveInteractionIntervention(\n this.workspaceId,\n this.id,\n request,\n options,\n );\n }\n}\n\nexport class AttachedBrowserDeviceCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: AttachedBrowserDeviceListOptions = {},\n ): Promise<AttachedBrowserDeviceListResponse> {\n return await this.transport.listAttachedBrowsers(workspaceId, options);\n }\n\n device(workspaceId: string, deviceId: string): AttachedBrowserDeviceResource {\n return new AttachedBrowserDeviceResource(this.transport, workspaceId, deviceId);\n }\n}\n\nexport class AttachedBrowserDeviceResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<AttachedBrowserDevice> {\n return await this.transport.getAttachedBrowser(this.workspaceId, this.id, options);\n }\n}\n\nexport class BrowserIdentityCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: BrowserIdentityListOptions = {},\n ): Promise<BrowserIdentityListResponse> {\n return await this.transport.listBrowserIdentities(workspaceId, options);\n }\n\n identity(workspaceId: string, identityId: string): BrowserIdentityResource {\n return new BrowserIdentityResource(this.transport, workspaceId, identityId);\n }\n\n async create(\n workspaceId: string,\n request: CreateBrowserIdentityRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentityResource> {\n const response = await this.transport.createBrowserIdentity(workspaceId, request, options);\n return this.identity(workspaceId, response.identity.id);\n }\n}\n\nexport class BrowserIdentityResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<BrowserIdentity> {\n return await this.transport.getBrowserIdentity(this.workspaceId, this.id, options);\n }\n\n async revisions(options: OpenGeniRequestOptions = {}): Promise<BrowserRevisionListResponse> {\n return await this.transport.listBrowserRevisions(this.workspaceId, this.id, options);\n }\n\n async update(\n request: UpdateBrowserIdentityRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentityMutationResponse> {\n return await this.transport.updateBrowserIdentity(this.workspaceId, this.id, request, options);\n }\n}\n\nexport class BrowserSessionCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionListResponse> {\n return await this.transport.listBrowserSessions(workspaceId, options);\n }\n\n session(workspaceId: string, browserSessionId: string): BrowserSessionResource {\n return new BrowserSessionResource(this.transport, workspaceId, browserSessionId);\n }\n\n async open(\n workspaceId: string,\n request: CreateBrowserSessionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionResource> {\n const response = await this.transport.createBrowserSession(workspaceId, request, options);\n return this.session(workspaceId, response.session.id);\n }\n\n async currentOrOpen(options: CurrentOrOpenBrowserOptions): Promise<BrowserSessionResource> {\n const requestOptions = options.signal ? { signal: options.signal } : {};\n const listed = await this.list(options.workspaceId, requestOptions);\n const current = newestRelevantBrowser(listed.sessions, options.associationSessionId);\n if (current) {\n const resource = this.session(options.workspaceId, current.id);\n if (current.lifecycle === \"suspended\") {\n await resource.resume(\n { operationId: options.operationId ?? crypto.randomUUID() },\n requestOptions,\n );\n }\n return resource;\n }\n return await this.open(\n options.workspaceId,\n {\n operationId: options.operationId ?? crypto.randomUUID(),\n sessionId: options.associationSessionId,\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(options.initialUrl !== undefined ? { initialUrl: options.initialUrl } : {}),\n ...(options.headless !== undefined ? { headless: options.headless } : {}),\n ...(options.placement !== undefined ? { placement: options.placement } : {}),\n ...(options.identityId !== undefined ? { identityId: options.identityId } : {}),\n ...(options.baseRevisionId !== undefined ? { baseRevisionId: options.baseRevisionId } : {}),\n ...(options.networkRouteId !== undefined ? { networkRouteId: options.networkRouteId } : {}),\n ...(options.linkedComputerSessionId !== undefined\n ? { linkedComputerSessionId: options.linkedComputerSessionId }\n : {}),\n },\n requestOptions,\n );\n }\n}\n\nexport class BrowserSessionResource {\n readonly auth: BrowserAuthRunCollection;\n readonly clipboard: BrowserClipboardResource;\n readonly downloads: BrowserDownloadCollection;\n readonly tabs: BrowserTargetCollection;\n /** Alias for hosts that prefer the protocol term. */\n readonly targets: BrowserTargetCollection;\n\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {\n this.auth = new BrowserAuthRunCollection(transport, workspaceId, id);\n this.clipboard = new BrowserClipboardResource(transport, workspaceId, id);\n this.downloads = new BrowserDownloadCollection(transport, workspaceId, id);\n this.tabs = new BrowserTargetCollection(transport, workspaceId, id);\n this.targets = this.tabs;\n }\n\n async get(options: OpenGeniRequestOptions = {}): Promise<BrowserSession> {\n return await this.transport.getBrowserSession(this.workspaceId, this.id, options);\n }\n\n async observe(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.transport.observeBrowserTarget(this.workspaceId, this.id, targetId, options);\n }\n\n async targetState(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetState> {\n return await this.transport.getBrowserTargetState(this.workspaceId, this.id, targetId, options);\n }\n\n async readDom(\n targetId: string,\n request: BrowserDomReadRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserDomReadResponse> {\n return await this.transport.readBrowserDom(\n this.workspaceId,\n this.id,\n targetId,\n request,\n options,\n );\n }\n\n async capture(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n captureOptions: BrowserScreenshotOptions = {},\n ): Promise<BrowserFrame> {\n return await this.transport.captureBrowserTarget(\n this.workspaceId,\n this.id,\n targetId,\n options,\n captureOptions,\n );\n }\n\n async screenshot(\n targetId: string,\n captureOptions: BrowserScreenshotOptions = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserFrame> {\n return await this.capture(targetId, options, captureOptions);\n }\n\n async act(\n request: BrowserActionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserActionReceipt> {\n return await this.transport.actInBrowser(this.workspaceId, this.id, request, options);\n }\n\n async receipt(\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserActionReceipt> {\n return await this.transport.getBrowserActionReceipt(\n this.workspaceId,\n this.id,\n operationId,\n options,\n );\n }\n\n async diagnostics(\n targetId: string,\n options: BrowserDiagnosticsOptions = {},\n ): Promise<BrowserDiagnosticBatch> {\n return await this.transport.listBrowserDiagnostics(\n this.workspaceId,\n this.id,\n targetId,\n options,\n );\n }\n\n async attach(\n request: BrowserSessionAttachmentRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionAttachment> {\n return await this.transport.attachBrowserSession(this.workspaceId, this.id, request, options);\n }\n\n async heartbeat(options: OpenGeniRequestOptions = {}): Promise<BrowserSessionHeartbeatResponse> {\n return await this.transport.heartbeatBrowserSession(this.workspaceId, this.id, options);\n }\n\n async publishRevision(\n request: PublishBrowserRevisionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<PublishBrowserRevisionResponse> {\n return await this.transport.publishBrowserRevision(this.workspaceId, this.id, request, options);\n }\n\n async suspend(\n request: BrowserSessionLifecycleRequest = {\n operationId: crypto.randomUUID(),\n },\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.transport.suspendBrowserSession(this.workspaceId, this.id, request, options);\n }\n\n async resume(\n request: BrowserSessionLifecycleRequest = {\n operationId: crypto.randomUUID(),\n },\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.transport.resumeBrowserSession(this.workspaceId, this.id, request, options);\n }\n\n async end(\n request: BrowserSessionLifecycleRequest = {\n operationId: crypto.randomUUID(),\n },\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.transport.endBrowserSession(this.workspaceId, this.id, request, options);\n }\n}\n\nexport class BrowserClipboardResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n ) {}\n\n async read(options: OpenGeniRequestOptions = {}): Promise<BrowserClipboard> {\n const clipboard = await this.transport.readBrowserClipboard(\n this.workspaceId,\n this.browserSessionId,\n options,\n );\n if (clipboard.browserSessionId !== this.browserSessionId) {\n throw new Error(\"Browser clipboard belongs to another BrowserSession\");\n }\n return clipboard;\n }\n}\n\nexport class BrowserDownloadCollection {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n ) {}\n\n async list(options: OpenGeniRequestOptions = {}): Promise<BrowserDownloadListResponse> {\n return await this.transport.listBrowserDownloads(\n this.workspaceId,\n this.browserSessionId,\n options,\n );\n }\n\n download(downloadId: string): BrowserDownloadResource {\n return new BrowserDownloadResource(\n this.transport,\n this.workspaceId,\n this.browserSessionId,\n downloadId,\n );\n }\n}\n\nexport class BrowserDownloadResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly browserSessionId: string,\n readonly id: string,\n ) {}\n\n async get(options: OpenGeniRequestOptions = {}): Promise<BrowserDownload> {\n const download = await this.transport.getBrowserDownload(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n options,\n );\n if (download.browserSessionId !== this.browserSessionId) {\n throw new Error(\"BrowserDownload belongs to another BrowserSession\");\n }\n return download;\n }\n\n /** Publish this exact private browser download into the source session's\n * workspace. Pass an operationId when the caller needs retry identity across\n * process boundaries; otherwise one is generated for this call. */\n async saveToWorkspace(\n destinationPath: string,\n options: BrowserDownloadSaveOptions = {},\n ): Promise<BrowserDownloadSaveResponse> {\n const { operationId = crypto.randomUUID(), overwrite = false, ...requestOptions } = options;\n const response = await this.transport.saveBrowserDownload(\n this.workspaceId,\n this.browserSessionId,\n this.id,\n { operationId, destinationPath, overwrite },\n requestOptions,\n );\n if (\n response.download.id !== this.id ||\n response.download.browserSessionId !== this.browserSessionId\n ) {\n throw new Error(\"BrowserDownload save returned another resource\");\n }\n return response;\n }\n}\n\nexport class BrowserTargetCollection {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n private readonly workspaceId: string,\n private readonly browserSessionId: string,\n ) {}\n\n async list(options: OpenGeniRequestOptions = {}): Promise<BrowserTargetListResponse> {\n return await this.transport.listBrowserTargets(\n this.workspaceId,\n this.browserSessionId,\n options,\n );\n }\n\n async open(url?: string, options: OpenGeniRequestOptions = {}): Promise<BrowserObservation> {\n return await this.transport.openBrowserTarget(\n this.workspaceId,\n this.browserSessionId,\n url === undefined ? {} : { url },\n options,\n );\n }\n\n async select(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.transport.selectBrowserTarget(\n this.workspaceId,\n this.browserSessionId,\n targetId,\n options,\n );\n }\n\n async close(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetListResponse> {\n return await this.transport.closeBrowserTarget(\n this.workspaceId,\n this.browserSessionId,\n targetId,\n options,\n );\n }\n}\n\nexport class ComputerSessionCollection {\n constructor(private readonly transport: BrowserInteractionTransport) {}\n\n async list(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionListResponse> {\n return await this.transport.listComputerSessions(workspaceId, options);\n }\n\n session(workspaceId: string, computerSessionId: string): ComputerSessionResource {\n return new ComputerSessionResource(this.transport, workspaceId, computerSessionId);\n }\n\n async open(\n workspaceId: string,\n request: CreateComputerSessionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionResource> {\n const response = await this.transport.createComputerSession(workspaceId, request, options);\n return this.session(workspaceId, response.session.id);\n }\n\n async currentOrOpen(options: CurrentOrOpenComputerOptions): Promise<ComputerSessionResource> {\n const requestOptions = options.signal ? { signal: options.signal } : {};\n const listed = await this.list(options.workspaceId, requestOptions);\n const current = newestRelevantComputer(listed.sessions, options.associationSessionId);\n if (current) {\n return this.session(options.workspaceId, current.id);\n }\n return await this.open(\n options.workspaceId,\n {\n operationId: options.operationId ?? crypto.randomUUID(),\n sessionId: options.associationSessionId,\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(options.placement !== undefined ? { placement: options.placement } : {}),\n },\n requestOptions,\n );\n }\n}\n\nexport class ComputerSessionResource {\n readonly targets: ComputerTargetCollection;\n /** Native application/window targets are also the public app collection. */\n readonly apps: ComputerTargetCollection;\n readonly clipboard: ComputerClipboardResource;\n\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly id: string,\n ) {\n this.targets = new ComputerTargetCollection(transport, workspaceId, id);\n this.apps = this.targets;\n this.clipboard = new ComputerClipboardResource(transport, workspaceId, id);\n }\n\n async get(options: OpenGeniRequestOptions = {}): Promise<ComputerSession> {\n return await this.transport.getComputerSession(this.workspaceId, this.id, options);\n }\n\n async observe(\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerObservation> {\n return await this.transport.observeComputerTarget(this.workspaceId, this.id, targetId, options);\n }\n\n async capture(targetId: string, options: OpenGeniRequestOptions = {}): Promise<ComputerFrame> {\n return await this.transport.captureComputerTarget(this.workspaceId, this.id, targetId, options);\n }\n\n async act(\n request: ComputerActionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerActionReceipt> {\n return await this.transport.actInComputer(this.workspaceId, this.id, request, options);\n }\n\n async receipt(\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerActionReceipt> {\n return await this.transport.getComputerActionReceipt(\n this.workspaceId,\n this.id,\n operationId,\n options,\n );\n }\n\n async attach(\n request: ComputerSessionAttachmentRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionAttachment> {\n return await this.transport.attachComputerSession(this.workspaceId, this.id, request, options);\n }\n\n async heartbeat(options: OpenGeniRequestOptions = {}): Promise<ComputerSessionHeartbeatResponse> {\n return await this.transport.heartbeatComputerSession(this.workspaceId, this.id, options);\n }\n\n async end(\n request: ComputerSessionLifecycleRequest = { operationId: crypto.randomUUID() },\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionMutationResponse> {\n return await this.transport.endComputerSession(this.workspaceId, this.id, request, options);\n }\n}\n\nexport class ComputerClipboardResource {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n readonly workspaceId: string,\n readonly computerSessionId: string,\n ) {}\n\n async read(options: OpenGeniRequestOptions = {}): Promise<ComputerClipboard> {\n const clipboard = await this.transport.readComputerClipboard(\n this.workspaceId,\n this.computerSessionId,\n options,\n );\n if (clipboard.computerSessionId !== this.computerSessionId) {\n throw new Error(\"Computer clipboard belongs to another ComputerSession\");\n }\n return clipboard;\n }\n}\n\nexport class ComputerTargetCollection {\n constructor(\n private readonly transport: BrowserInteractionTransport,\n private readonly workspaceId: string,\n private readonly computerSessionId: string,\n ) {}\n\n async list(options: OpenGeniRequestOptions = {}): Promise<ComputerTargetListResponse> {\n return await this.transport.listComputerTargets(\n this.workspaceId,\n this.computerSessionId,\n options,\n );\n }\n}\n\nexport type BrowserFrameMetadata = {\n frameId: string;\n browserSessionId: string;\n controllerGeneration: string;\n targetId: string;\n targetGeneration: string;\n documentGeneration: string;\n sequence: number;\n mediaType: \"image/jpeg\" | \"image/png\";\n width: number;\n height: number;\n deviceScaleFactor: number;\n scrollX: number;\n scrollY: number;\n capturedAt: string;\n};\n\nexport type BrowserFrame = BrowserFrameMetadata & { data: Uint8Array };\n\nexport type BrowserScreenshotOptions = {\n /** Capture the document content instead of the visible viewport. */\n fullPage?: boolean;\n format?: \"jpeg\" | \"png\";\n /** JPEG quality, from 1 to 100. Ignored for PNG. */\n quality?: number;\n};\n\nexport type ComputerFrameMetadata = {\n frameId: string;\n computerSessionId: string;\n controllerGeneration: string;\n targetId: string;\n targetGeneration: string;\n sequence: number;\n mediaType: \"image/jpeg\" | \"image/png\";\n width: number;\n height: number;\n capturedAt: string;\n sha256: string;\n};\n\nexport type ComputerFrame = ComputerFrameMetadata & { data: Uint8Array };\n\nexport type BrowserFrameStreamOptions = InteractionFrameStreamOptions;\n\n/** Convert a short-lived HTTP attachment URL into its browser WebSocket URL. */\nexport function browserFrameSocketUrl(\n attachment: BrowserSessionAttachment,\n options: BrowserFrameStreamOptions = {},\n): string {\n if (attachment.stream.kind !== \"direct_websocket\") {\n throw new Error(\"relay browser attachments are opened through the relay protocol\");\n }\n const url = new URL(attachment.stream.url);\n if (url.protocol === \"http:\") url.protocol = \"ws:\";\n else if (url.protocol === \"https:\") url.protocol = \"wss:\";\n else if (url.protocol !== \"ws:\" && url.protocol !== \"wss:\") {\n throw new Error(\"browser frame attachment did not contain an HTTP or WebSocket URL\");\n }\n upgradeMixedContentWebSocket(url);\n if (options.format !== undefined) url.searchParams.set(\"format\", options.format);\n setBoundedIntegerQuery(url, \"quality\", options.quality, 1, 100);\n setBoundedIntegerQuery(url, \"maxWidth\", options.maxWidth, 1, 4_096);\n setBoundedIntegerQuery(url, \"maxHeight\", options.maxHeight, 1, 4_096);\n setBoundedIntegerQuery(url, \"everyNthFrame\", options.everyNthFrame, 1, 60);\n return url.toString();\n}\n\n/** Convert a direct ComputerSession attachment into its WebSocket URL. */\nexport function computerFrameSocketUrl(\n attachment: ComputerSessionAttachment,\n options: ComputerFrameStreamOptions = {},\n): string {\n if (attachment.stream.kind !== \"direct_websocket\") {\n throw new Error(\"relay computer attachments are opened through the relay protocol\");\n }\n const url = new URL(attachment.stream.url);\n if (url.protocol === \"http:\") url.protocol = \"ws:\";\n else if (url.protocol === \"https:\") url.protocol = \"wss:\";\n else if (url.protocol !== \"ws:\" && url.protocol !== \"wss:\") {\n throw new Error(\"computer frame attachment did not contain an HTTP or WebSocket URL\");\n }\n upgradeMixedContentWebSocket(url);\n if (options.format !== undefined) url.searchParams.set(\"format\", options.format);\n setBoundedIntegerQuery(url, \"quality\", options.quality, 1, 100);\n setBoundedIntegerQuery(url, \"maxWidth\", options.maxWidth, 1, 4_096);\n setBoundedIntegerQuery(url, \"maxHeight\", options.maxHeight, 1, 4_096);\n setBoundedIntegerQuery(url, \"everyNthFrame\", options.everyNthFrame, 1, 60);\n return url.toString();\n}\n\n/** Decode one bounded binary frame message from the placement controller. */\nexport function decodeBrowserFrameMessage(message: ArrayBuffer | Uint8Array): BrowserFrame {\n const bytes = message instanceof Uint8Array ? message : new Uint8Array(message);\n if (\n bytes.byteLength < 5 ||\n bytes.byteLength > 4 + BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES + BROWSER_FRAME_MAX_BYTES\n ) {\n throw new Error(\"browser frame message is truncated or too large\");\n }\n const metadataLength = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(\n 0,\n false,\n );\n if (\n metadataLength < 1 ||\n metadataLength > BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES ||\n metadataLength + 4 >= bytes.byteLength\n ) {\n throw new Error(\"browser frame metadata length is invalid\");\n }\n let value: unknown;\n try {\n value = JSON.parse(\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes.subarray(4, 4 + metadataLength)),\n );\n } catch {\n throw new Error(\"browser frame metadata is invalid JSON\");\n }\n const metadata = parseBrowserFrameMetadata(value);\n const data = bytes.slice(4 + metadataLength);\n if (data.byteLength < 1 || data.byteLength > BROWSER_FRAME_MAX_BYTES) {\n throw new Error(\"browser frame image is empty or too large\");\n }\n const dimensions = imageDimensions(data, metadata.mediaType);\n if (dimensions.width !== metadata.width || dimensions.height !== metadata.height) {\n throw new Error(\"browser frame image dimensions do not match metadata\");\n }\n return { ...metadata, data };\n}\n\n/** Decode and authenticate one bounded ComputerSession frame. Computer frames\n * carry a content digest because native capture adapters may cross process and\n * relay boundaries before reaching the SDK. */\nexport async function decodeComputerFrameMessage(\n message: ArrayBuffer | Uint8Array,\n): Promise<ComputerFrame> {\n const bytes = message instanceof Uint8Array ? message : new Uint8Array(message);\n if (\n bytes.byteLength < 5 ||\n bytes.byteLength > 4 + BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES + BROWSER_FRAME_MAX_BYTES\n ) {\n throw new Error(\"computer frame message is truncated or too large\");\n }\n const metadataLength = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(\n 0,\n false,\n );\n if (\n metadataLength < 1 ||\n metadataLength > BROWSER_CONTROL_MAX_FRAME_HEADER_BYTES ||\n metadataLength + 4 >= bytes.byteLength\n ) {\n throw new Error(\"computer frame metadata length is invalid\");\n }\n let value: unknown;\n try {\n value = JSON.parse(\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes.subarray(4, 4 + metadataLength)),\n );\n } catch {\n throw new Error(\"computer frame metadata is invalid JSON\");\n }\n const metadata = parseComputerFrameMetadata(value);\n const data = bytes.slice(4 + metadataLength);\n if (data.byteLength < 1 || data.byteLength > BROWSER_FRAME_MAX_BYTES) {\n throw new Error(\"computer frame image is empty or too large\");\n }\n const dimensions = imageDimensions(data, metadata.mediaType);\n if (dimensions.width !== metadata.width || dimensions.height !== metadata.height) {\n throw new Error(\"computer frame image dimensions do not match metadata\");\n }\n if ((await sha256Hex(data)) !== metadata.sha256) {\n throw new Error(\"computer frame digest does not match image\");\n }\n return { ...metadata, data };\n}\n\nexport function parseBrowserFrameMetadata(value: unknown): BrowserFrameMetadata {\n if (!isRecord(value)) throw new Error(\"browser frame metadata is invalid\");\n const allowed = new Set([\n \"frameId\",\n \"browserSessionId\",\n \"controllerGeneration\",\n \"targetId\",\n \"targetGeneration\",\n \"documentGeneration\",\n \"sequence\",\n \"mediaType\",\n \"width\",\n \"height\",\n \"deviceScaleFactor\",\n \"scrollX\",\n \"scrollY\",\n \"capturedAt\",\n ]);\n if (Object.keys(value).some((key) => !allowed.has(key))) {\n throw new Error(\"browser frame metadata contains unknown fields\");\n }\n const strings = [\n \"frameId\",\n \"browserSessionId\",\n \"controllerGeneration\",\n \"targetId\",\n \"targetGeneration\",\n \"documentGeneration\",\n \"mediaType\",\n \"capturedAt\",\n ] as const;\n for (const key of strings) {\n const item = value[key];\n const max = key === \"targetId\" ? 512 : key === \"capturedAt\" ? 128 : 256;\n if (typeof item !== \"string\" || item.length < 1 || utf8Bytes(item) > max) {\n throw new Error(\"browser frame metadata is invalid\");\n }\n }\n const numbers = [\n \"sequence\",\n \"width\",\n \"height\",\n \"deviceScaleFactor\",\n \"scrollX\",\n \"scrollY\",\n ] as const;\n for (const key of numbers) {\n if (typeof value[key] !== \"number\" || !Number.isFinite(value[key])) {\n throw new Error(\"browser frame metadata is invalid\");\n }\n }\n const metadata = value as unknown as BrowserFrameMetadata;\n if (\n !Number.isSafeInteger(metadata.sequence) ||\n metadata.sequence < 0 ||\n !Number.isSafeInteger(metadata.width) ||\n !Number.isSafeInteger(metadata.height)\n ) {\n throw new Error(\"browser frame metadata integers are invalid\");\n }\n assertImageDimensions(metadata.width, metadata.height);\n if (\n metadata.deviceScaleFactor <= 0 ||\n metadata.deviceScaleFactor > 16 ||\n Math.abs(metadata.scrollX) > 1_000_000_000 ||\n Math.abs(metadata.scrollY) > 1_000_000_000\n ) {\n throw new Error(\"browser frame geometry metadata is invalid\");\n }\n if (metadata.mediaType !== \"image/jpeg\" && metadata.mediaType !== \"image/png\") {\n throw new Error(\"browser frame media type is invalid\");\n }\n if (!isUuid(metadata.browserSessionId)) throw new Error(\"browser frame session id is invalid\");\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u.test(metadata.controllerGeneration)) {\n throw new Error(\"browser frame controller generation is invalid\");\n }\n if (!Number.isFinite(new Date(metadata.capturedAt).valueOf())) {\n throw new Error(\"browser frame timestamp is invalid\");\n }\n return metadata;\n}\n\nexport function parseComputerFrameMetadata(value: unknown): ComputerFrameMetadata {\n if (!isRecord(value)) throw new Error(\"computer frame metadata is invalid\");\n const allowed = new Set([\n \"frameId\",\n \"computerSessionId\",\n \"controllerGeneration\",\n \"targetId\",\n \"targetGeneration\",\n \"sequence\",\n \"mediaType\",\n \"width\",\n \"height\",\n \"capturedAt\",\n \"sha256\",\n ]);\n if (Object.keys(value).some((key) => !allowed.has(key))) {\n throw new Error(\"computer frame metadata contains unknown fields\");\n }\n const strings = [\n \"frameId\",\n \"computerSessionId\",\n \"controllerGeneration\",\n \"targetId\",\n \"targetGeneration\",\n \"mediaType\",\n \"capturedAt\",\n \"sha256\",\n ] as const;\n for (const key of strings) {\n const item = value[key];\n const max = key === \"targetId\" ? 512 : key === \"capturedAt\" ? 128 : 256;\n if (typeof item !== \"string\" || item.length < 1 || utf8Bytes(item) > max) {\n throw new Error(\"computer frame metadata is invalid\");\n }\n }\n const metadata = value as unknown as ComputerFrameMetadata;\n if (\n !Number.isSafeInteger(metadata.sequence) ||\n metadata.sequence < 0 ||\n !Number.isSafeInteger(metadata.width) ||\n !Number.isSafeInteger(metadata.height)\n ) {\n throw new Error(\"computer frame metadata integers are invalid\");\n }\n assertImageDimensions(metadata.width, metadata.height);\n if (metadata.mediaType !== \"image/jpeg\" && metadata.mediaType !== \"image/png\") {\n throw new Error(\"computer frame media type is invalid\");\n }\n if (!isUuid(metadata.computerSessionId)) {\n throw new Error(\"computer frame session id is invalid\");\n }\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u.test(metadata.controllerGeneration)) {\n throw new Error(\"computer frame controller generation is invalid\");\n }\n if (!Number.isFinite(new Date(metadata.capturedAt).valueOf())) {\n throw new Error(\"computer frame timestamp is invalid\");\n }\n if (!/^[0-9a-f]{64}$/u.test(metadata.sha256)) {\n throw new Error(\"computer frame digest is invalid\");\n }\n return metadata;\n}\n\nexport function decodeComputerFrameMetadataHeader(value: string): ComputerFrameMetadata {\n if (!value || value.length > 32 * 1024 || !/^[A-Za-z0-9_-]+$/u.test(value)) {\n throw new Error(\"computer frame metadata header is invalid\");\n }\n const normalized = value.replace(/-/gu, \"+\").replace(/_/gu, \"/\");\n const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, \"=\");\n let decoded: string;\n try {\n decoded = atob(padded);\n } catch {\n throw new Error(\"computer frame metadata header is invalid\");\n }\n const bytes = Uint8Array.from(decoded, (character) => character.charCodeAt(0));\n let metadata: unknown;\n try {\n metadata = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n } catch {\n throw new Error(\"computer frame metadata header is invalid\");\n }\n return parseComputerFrameMetadata(metadata);\n}\n\nfunction newestRelevantBrowser(\n sessions: readonly BrowserSession[],\n associationSessionId: string,\n): BrowserSession | null {\n const live = sessions.filter(\n (session) =>\n ![\"ending\", \"ended\", \"failed\", \"lost\"].includes(session.lifecycle) &&\n session.associations.some((association) => association.sessionId === associationSessionId),\n );\n live.sort(\n (left, right) =>\n browserRelevance(right, associationSessionId) - browserRelevance(left, associationSessionId),\n );\n return live[0] ?? null;\n}\n\nfunction newestRelevantComputer(\n sessions: readonly ComputerSession[],\n associationSessionId: string,\n): ComputerSession | null {\n const live = sessions.filter(\n (session) =>\n [\"starting\", \"active\", \"restoring\"].includes(session.lifecycle) &&\n session.associations.some((association) => association.sessionId === associationSessionId),\n );\n live.sort(\n (left, right) =>\n computerRelevance(right, associationSessionId) -\n computerRelevance(left, associationSessionId),\n );\n return live[0] ?? null;\n}\n\nfunction browserRelevance(session: BrowserSession, associationSessionId: string): number {\n const association = session.associations\n .filter((item) => item.sessionId === associationSessionId)\n .map((item) => Date.parse(item.lastUsedAt))\n .filter(Number.isFinite)\n .reduce((best, timestamp) => Math.max(best, timestamp), 0);\n const used = Date.parse(session.lastUsedAt);\n return Math.max(association, Number.isFinite(used) ? used : 0);\n}\n\nfunction computerRelevance(session: ComputerSession, associationSessionId: string): number {\n const association = session.associations\n .filter((item) => item.sessionId === associationSessionId)\n .map((item) => Date.parse(item.lastUsedAt))\n .filter(Number.isFinite)\n .reduce((best, timestamp) => Math.max(best, timestamp), 0);\n const used = Date.parse(session.lastUsedAt);\n return Math.max(association, Number.isFinite(used) ? used : 0);\n}\n\nfunction upgradeMixedContentWebSocket(url: URL): void {\n const protocol = (globalThis as { location?: { protocol?: string } }).location?.protocol;\n if (protocol === \"https:\" && url.protocol === \"ws:\") url.protocol = \"wss:\";\n}\n\nfunction setBoundedIntegerQuery(\n url: URL,\n name: string,\n value: number | undefined,\n min: number,\n max: number,\n): void {\n if (value === undefined) return;\n if (!Number.isSafeInteger(value) || value < min || value > max) {\n throw new Error(`browser frame ${name} must be an integer between ${min} and ${max}`);\n }\n url.searchParams.set(name, String(value));\n}\n\nfunction imageDimensions(\n data: Uint8Array,\n mediaType: BrowserFrameMetadata[\"mediaType\"],\n): { width: number; height: number } {\n const dimensions = mediaType === \"image/png\" ? pngDimensions(data) : jpegDimensions(data);\n assertImageDimensions(dimensions.width, dimensions.height);\n return dimensions;\n}\n\nfunction assertImageDimensions(width: number, height: number): void {\n if (\n !Number.isSafeInteger(width) ||\n !Number.isSafeInteger(height) ||\n width < 1 ||\n height < 1 ||\n width > BROWSER_FRAME_MAX_DIMENSION ||\n height > BROWSER_FRAME_MAX_DIMENSION ||\n width * height > BROWSER_FRAME_MAX_PIXELS\n ) {\n throw new Error(\"browser image dimensions exceed their bounded envelope\");\n }\n}\n\nfunction pngDimensions(data: Uint8Array): { width: number; height: number } {\n const signature = [137, 80, 78, 71, 13, 10, 26, 10];\n if (\n data.byteLength < 24 ||\n !signature.every((byte, index) => data[index] === byte) ||\n String.fromCharCode(...data.slice(12, 16)) !== \"IHDR\"\n ) {\n throw new Error(\"browser returned an invalid PNG image\");\n }\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return { width: view.getUint32(16), height: view.getUint32(20) };\n}\n\nfunction jpegDimensions(data: Uint8Array): { width: number; height: number } {\n if (data.byteLength < 4 || data[0] !== 0xff || data[1] !== 0xd8) {\n throw new Error(\"browser returned an invalid JPEG image\");\n }\n let offset = 2;\n while (offset + 3 < data.byteLength) {\n if (data[offset] !== 0xff) {\n offset += 1;\n continue;\n }\n let marker = data[offset + 1]!;\n while (marker === 0xff) {\n offset += 1;\n marker = data[offset + 1]!;\n }\n if (\n marker === 0xd8 ||\n marker === 0xd9 ||\n marker === 0x01 ||\n (marker >= 0xd0 && marker <= 0xd7)\n ) {\n offset += 2;\n continue;\n }\n if (offset + 3 >= data.byteLength) break;\n const length = (data[offset + 2]! << 8) | data[offset + 3]!;\n if (length < 2 || offset + 2 + length > data.byteLength) break;\n if (isJpegStartOfFrame(marker)) {\n if (length < 7 || offset + 8 >= data.byteLength) break;\n return {\n height: (data[offset + 5]! << 8) | data[offset + 6]!,\n width: (data[offset + 7]! << 8) | data[offset + 8]!,\n };\n }\n offset += 2 + length;\n }\n throw new Error(\"browser returned a JPEG without dimensions\");\n}\n\nfunction isJpegStartOfFrame(marker: number): boolean {\n return (\n (marker >= 0xc0 && marker <= 0xc3) ||\n (marker >= 0xc5 && marker <= 0xc7) ||\n (marker >= 0xc9 && marker <= 0xcb) ||\n (marker >= 0xcd && marker <= 0xcf)\n );\n}\n\nfunction utf8Bytes(value: string): number {\n return new TextEncoder().encode(value).byteLength;\n}\n\nasync function sha256Hex(value: Uint8Array): Promise<string> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) throw new Error(\"computer frame digest verification is unavailable\");\n const copy = new Uint8Array(value.byteLength);\n copy.set(value);\n const digest = new Uint8Array(await subtle.digest(\"SHA-256\", copy));\n return [...digest].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction isUuid(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":";;;;;AAgBO,IAAM,+BAA+B;AACrC,IAAM,qCAAqC;AAC3C,IAAM,sCAAsC;AAC5C,IAAM,0CAA0C;AAChD,IAAM,yCAAyC,KAAK;AACpD,IAAM,0BAA0B,KAAK,OAAO;AAC5C,IAAM,8BAA8B;AACpC,IAAM,2BAA2B;AA8CjC,SAAS,mCACd,OACkC;AAClC,MAAI,EAAE,iBAAiB,kBAAmB,QAAO;AACjD,QAAM,UAAU,MAAM;AACtB,MAAI,CAAC,WAAW,QAAQ,qBAAqB,oBAAqB,QAAO;AACzE,QAAM,UAAU,QAAQ;AACxB,QAAM,OAAO,QAAQ;AACrB,MAAK,YAAY,aAAa,YAAY,cAAe,CAAC,qBAAqB,IAAI,GAAG;AACpF,WAAO;AAAA,EACT;AACA,QAAM,mBAAmB,yBAAyB,QAAQ,gBAAgB;AAC1E,SAAO;AAAA,IACL,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,gBAAgB,MAAM;AAAA,IACtB,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,SAAS,MAAM;AAAA,EACjB;AACF;AAEA,SAAS,qBAAqB,OAAwD;AACpF,SACE,OAAO,UAAU,YACjB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,KAAK;AAEpB;AAEA,SAAS,yBAAyB,OAAoC;AACpE,SAAO,OAAO,UAAU,YAAY,MAAM,UAAU,OAAO,sBAAsB,KAAK,KAAK,IACvF,QACA;AACN;AAwjDO,IAAM,4BAAN,MAAgC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,WAAwC;AAClD,SAAK,mBAAmB,IAAI,gCAAgC,SAAS;AACrE,SAAK,WAAW,IAAI,kBAAkB,SAAS;AAC/C,SAAK,WAAW,IAAI,yBAAyB,SAAS;AACtD,SAAK,YAAY,IAAI,0BAA0B,SAAS;AACxD,SAAK,aAAa,IAAI,0BAA0B,SAAS;AACzD,SAAK,gBAAgB,IAAI,kCAAkC,SAAS;AACpE,SAAK,gBAAgB,IAAI,uBAAuB,SAAS;AACzD,SAAK,sBAAsB,IAAI,6BAA6B,SAAS;AAAA,EACvE;AACF;AAEO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,MAAM,KACJ,aACA,UAAmC,CAAC,GACD;AACnC,WAAO,MAAM,KAAK,UAAU,kBAAkB,aAAa,OAAO;AAAA,EACpE;AAAA,EAEA,MAAM,aAAqB,gBAA8C;AACvE,WAAO,IAAI,qBAAqB,KAAK,WAAW,aAAa,cAAc;AAAA,EAC7E;AAAA,EAEA,MAAM,OACJ,aACA,SACA,UAAkC,CAAC,GACJ;AAC/B,UAAM,WAAW,MAAM,KAAK,UAAU,mBAAmB,aAAa,SAAS,OAAO;AACtF,WAAO,KAAK,MAAM,aAAa,SAAS,MAAM,EAAE;AAAA,EAClD;AACF;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YACmB,WACR,aACA,IACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,IAAI,UAAkC,CAAC,GAA0B;AACrE,WAAO,MAAM,KAAK,UAAU,gBAAgB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EAChF;AAAA,EAEA,MAAM,OACJ,SACA,UAAkC,CAAC,GACI;AACvC,WAAO,MAAM,KAAK,UAAU,mBAAmB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAC5F;AACF;AAEO,IAAM,+BAAN,MAAmC;AAAA,EACxC,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,MAAM,KACJ,aACA,UAAyC,CAAC,GACD;AACzC,WAAO,MAAM,KAAK,UAAU,wBAAwB,aAAa,OAAO;AAAA,EAC1E;AAAA,EAEA,WAAW,aAAqB,cAAkD;AAChF,WAAO,IAAI,2BAA2B,KAAK,WAAW,aAAa,YAAY;AAAA,EACjF;AAAA,EAEA,MAAM,OACJ,aACA,SACA,UAAkC,CAAC,GACE;AACrC,UAAM,WAAW,MAAM,KAAK,UAAU,yBAAyB,aAAa,SAAS,OAAO;AAC5F,WAAO,KAAK,WAAW,aAAa,SAAS,WAAW,EAAE;AAAA,EAC5D;AACF;AAEO,IAAM,6BAAN,MAAiC;AAAA,EACtC,YACmB,WACR,aACA,IACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,IAAI,UAAkC,CAAC,GAAgC;AAC3E,WAAO,MAAM,KAAK,UAAU,sBAAsB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EACtF;AAAA,EAEA,MAAM,OACJ,SACA,UAAkC,CAAC,GACU;AAC7C,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,MAAM,KAAK,aAAqB,UAA8B,CAAC,GAAiC;AAC9F,WAAO,MAAM,KAAK,UAAU,aAAa,aAAa,OAAO;AAAA,EAC/D;AAAA,EAEA,MAAM,IACJ,aACA,WACA,UAAkC,CAAC,GACjB;AAClB,WAAO,MAAM,KAAK,UAAU,WAAW,aAAa,WAAW,OAAO;AAAA,EACxE;AAAA,EAEA,IAAI,aAAqB,kBAA0B,WAAoC;AACrF,WAAO,IAAI,gBAAgB,KAAK,WAAW,aAAa,kBAAkB,SAAS;AAAA,EACrF;AACF;AAEO,IAAM,2BAAN,MAA+B;AAAA,EACpC,YACmB,WACR,aACA,kBACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,KACJ,UAAwD,CAAC,GAC3B;AAC9B,WAAO,MAAM,KAAK,UAAU,aAAa,KAAK,aAAa;AAAA,MACzD,GAAG;AAAA,MACH,kBAAkB,KAAK;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,WAAoC;AACtC,WAAO,IAAI,gBAAgB,KAAK,WAAW,KAAK,aAAa,KAAK,kBAAkB,SAAS;AAAA,EAC/F;AAAA,EAEA,MAAM,MACJ,SACA,UAAkC,CAAC,GACT;AAC1B,UAAM,WAAW,MAAM,KAAK,UAAU;AAAA,MACpC,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AACA,WAAO,KAAK,IAAI,SAAS,IAAI,EAAE;AAAA,EACjC;AACF;AAEO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YACmB,WACR,aACA,kBACA,IACT;AAJiB;AACR;AACA;AACA;AAAA,EACR;AAAA,EAEH,MAAM,IAAI,UAAkC,CAAC,GAAqB;AAChE,UAAM,MAAM,MAAM,KAAK,UAAU,WAAW,KAAK,aAAa,KAAK,IAAI,OAAO;AAC9E,QAAI,IAAI,qBAAqB,KAAK,kBAAkB;AAClD,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OACJ,SACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,SACA,UAAkC,CAAC,GACC;AACpC,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,SACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBACJ,SACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OACJ,SACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,oCAAN,MAAwC;AAAA,EAC7C,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,MAAM,KACJ,aACA,UAA8C,CAAC,GACD;AAC9C,WAAO,MAAM,KAAK,UAAU,6BAA6B,aAAa,OAAO;AAAA,EAC/E;AAAA,EAEA,aAAa,aAAqB,gBAAyD;AACzF,WAAO,IAAI,gCAAgC,KAAK,WAAW,aAAa,cAAc;AAAA,EACxF;AAAA,EAEA,MAAM,OACJ,aACA,SACA,UAAkC,CAAC,GACO;AAC1C,UAAM,WAAW,MAAM,KAAK,UAAU;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO,KAAK,aAAa,aAAa,SAAS,aAAa,EAAE;AAAA,EAChE;AACF;AAEO,IAAM,kCAAN,MAAsC;AAAA,EAC3C,YACmB,WACR,aACA,IACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,IAAI,UAAkC,CAAC,GAAqC;AAChF,WAAO,MAAM,KAAK,UAAU,2BAA2B,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EAC3F;AAAA,EAEA,MAAM,QACJ,SACA,UAAkC,CAAC,GACe;AAClD,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,kCAAN,MAAsC;AAAA,EAC3C,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,MAAM,KACJ,aACA,UAA4C,CAAC,GACD;AAC5C,WAAO,MAAM,KAAK,UAAU,qBAAqB,aAAa,OAAO;AAAA,EACvE;AAAA,EAEA,OAAO,aAAqB,UAAiD;AAC3E,WAAO,IAAI,8BAA8B,KAAK,WAAW,aAAa,QAAQ;AAAA,EAChF;AACF;AAEO,IAAM,gCAAN,MAAoC;AAAA,EACzC,YACmB,WACR,aACA,IACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,IAAI,UAAkC,CAAC,GAAmC;AAC9E,WAAO,MAAM,KAAK,UAAU,mBAAmB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EACnF;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,MAAM,KACJ,aACA,UAAsC,CAAC,GACD;AACtC,WAAO,MAAM,KAAK,UAAU,sBAAsB,aAAa,OAAO;AAAA,EACxE;AAAA,EAEA,SAAS,aAAqB,YAA6C;AACzE,WAAO,IAAI,wBAAwB,KAAK,WAAW,aAAa,UAAU;AAAA,EAC5E;AAAA,EAEA,MAAM,OACJ,aACA,SACA,UAAkC,CAAC,GACD;AAClC,UAAM,WAAW,MAAM,KAAK,UAAU,sBAAsB,aAAa,SAAS,OAAO;AACzF,WAAO,KAAK,SAAS,aAAa,SAAS,SAAS,EAAE;AAAA,EACxD;AACF;AAEO,IAAM,0BAAN,MAA8B;AAAA,EACnC,YACmB,WACR,aACA,IACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,IAAI,UAAkC,CAAC,GAA6B;AACxE,WAAO,MAAM,KAAK,UAAU,mBAAmB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EACnF;AAAA,EAEA,MAAM,UAAU,UAAkC,CAAC,GAAyC;AAC1F,WAAO,MAAM,KAAK,UAAU,qBAAqB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EACrF;AAAA,EAEA,MAAM,OACJ,SACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK,UAAU,sBAAsB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAC/F;AACF;AAEO,IAAM,2BAAN,MAA+B;AAAA,EACpC,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,MAAM,KACJ,aACA,UAAkC,CAAC,GACE;AACrC,WAAO,MAAM,KAAK,UAAU,oBAAoB,aAAa,OAAO;AAAA,EACtE;AAAA,EAEA,QAAQ,aAAqB,kBAAkD;AAC7E,WAAO,IAAI,uBAAuB,KAAK,WAAW,aAAa,gBAAgB;AAAA,EACjF;AAAA,EAEA,MAAM,KACJ,aACA,SACA,UAAkC,CAAC,GACF;AACjC,UAAM,WAAW,MAAM,KAAK,UAAU,qBAAqB,aAAa,SAAS,OAAO;AACxF,WAAO,KAAK,QAAQ,aAAa,SAAS,QAAQ,EAAE;AAAA,EACtD;AAAA,EAEA,MAAM,cAAc,SAAuE;AACzF,UAAM,iBAAiB,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AACtE,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,aAAa,cAAc;AAClE,UAAM,UAAU,sBAAsB,OAAO,UAAU,QAAQ,oBAAoB;AACnF,QAAI,SAAS;AACX,YAAM,WAAW,KAAK,QAAQ,QAAQ,aAAa,QAAQ,EAAE;AAC7D,UAAI,QAAQ,cAAc,aAAa;AACrC,cAAM,SAAS;AAAA,UACb,EAAE,aAAa,QAAQ,eAAe,OAAO,WAAW,EAAE;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,WAAO,MAAM,KAAK;AAAA,MAChB,QAAQ;AAAA,MACR;AAAA,QACE,aAAa,QAAQ,eAAe,OAAO,WAAW;AAAA,QACtD,WAAW,QAAQ;AAAA,QACnB,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,QAC3D,GAAI,QAAQ,eAAe,SAAY,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,QAC7E,GAAI,QAAQ,aAAa,SAAY,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,QACvE,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,QAC1E,GAAI,QAAQ,eAAe,SAAY,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,QAC7E,GAAI,QAAQ,mBAAmB,SAAY,EAAE,gBAAgB,QAAQ,eAAe,IAAI,CAAC;AAAA,QACzF,GAAI,QAAQ,mBAAmB,SAAY,EAAE,gBAAgB,QAAQ,eAAe,IAAI,CAAC;AAAA,QACzF,GAAI,QAAQ,4BAA4B,SACpC,EAAE,yBAAyB,QAAQ,wBAAwB,IAC3D,CAAC;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,yBAAN,MAA6B;AAAA,EAQlC,YACmB,WACR,aACA,IACT;AAHiB;AACR;AACA;AAET,SAAK,OAAO,IAAI,yBAAyB,WAAW,aAAa,EAAE;AACnE,SAAK,YAAY,IAAI,yBAAyB,WAAW,aAAa,EAAE;AACxE,SAAK,YAAY,IAAI,0BAA0B,WAAW,aAAa,EAAE;AACzE,SAAK,OAAO,IAAI,wBAAwB,WAAW,aAAa,EAAE;AAClE,SAAK,UAAU,KAAK;AAAA,EACtB;AAAA,EAjBS;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EAcT,MAAM,IAAI,UAAkC,CAAC,GAA4B;AACvE,WAAO,MAAM,KAAK,UAAU,kBAAkB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EAClF;AAAA,EAEA,MAAM,QACJ,UACA,UAAkC,CAAC,GACN;AAC7B,WAAO,MAAM,KAAK,UAAU,qBAAqB,KAAK,aAAa,KAAK,IAAI,UAAU,OAAO;AAAA,EAC/F;AAAA,EAEA,MAAM,YACJ,UACA,UAAkC,CAAC,GACN;AAC7B,WAAO,MAAM,KAAK,UAAU,sBAAsB,KAAK,aAAa,KAAK,IAAI,UAAU,OAAO;AAAA,EAChG;AAAA,EAEA,MAAM,QACJ,UACA,SACA,UAAkC,CAAC,GACF;AACjC,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,QACJ,UACA,UAAkC,CAAC,GACnC,iBAA2C,CAAC,GACrB;AACvB,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,UACA,iBAA2C,CAAC,GAC5C,UAAkC,CAAC,GACZ;AACvB,WAAO,MAAM,KAAK,QAAQ,UAAU,SAAS,cAAc;AAAA,EAC7D;AAAA,EAEA,MAAM,IACJ,SACA,UAAkC,CAAC,GACJ;AAC/B,WAAO,MAAM,KAAK,UAAU,aAAa,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EACtF;AAAA,EAEA,MAAM,QACJ,aACA,UAAkC,CAAC,GACJ;AAC/B,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YACJ,UACA,UAAqC,CAAC,GACL;AACjC,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OACJ,SACA,UAAkC,CAAC,GACA;AACnC,WAAO,MAAM,KAAK,UAAU,qBAAqB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAC9F;AAAA,EAEA,MAAM,UAAU,UAAkC,CAAC,GAA6C;AAC9F,WAAO,MAAM,KAAK,UAAU,wBAAwB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EACxF;AAAA,EAEA,MAAM,gBACJ,SACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK,UAAU,uBAAuB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAChG;AAAA,EAEA,MAAM,QACJ,UAA0C;AAAA,IACxC,aAAa,OAAO,WAAW;AAAA,EACjC,GACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK,UAAU,sBAAsB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAC/F;AAAA,EAEA,MAAM,OACJ,UAA0C;AAAA,IACxC,aAAa,OAAO,WAAW;AAAA,EACjC,GACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK,UAAU,qBAAqB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAC9F;AAAA,EAEA,MAAM,IACJ,UAA0C;AAAA,IACxC,aAAa,OAAO,WAAW;AAAA,EACjC,GACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK,UAAU,kBAAkB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAC3F;AACF;AAEO,IAAM,2BAAN,MAA+B;AAAA,EACpC,YACmB,WACR,aACA,kBACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,KAAK,UAAkC,CAAC,GAA8B;AAC1E,UAAM,YAAY,MAAM,KAAK,UAAU;AAAA,MACrC,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AACA,QAAI,UAAU,qBAAqB,KAAK,kBAAkB;AACxD,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AACA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YACmB,WACR,aACA,kBACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,KAAK,UAAkC,CAAC,GAAyC;AACrF,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,YAA6C;AACpD,WAAO,IAAI;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,0BAAN,MAA8B;AAAA,EACnC,YACmB,WACR,aACA,kBACA,IACT;AAJiB;AACR;AACA;AACA;AAAA,EACR;AAAA,EAEH,MAAM,IAAI,UAAkC,CAAC,GAA6B;AACxE,UAAM,WAAW,MAAM,KAAK,UAAU;AAAA,MACpC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AACA,QAAI,SAAS,qBAAqB,KAAK,kBAAkB;AACvD,YAAM,IAAI,MAAM,mDAAmD;AAAA,IACrE;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBACJ,iBACA,UAAsC,CAAC,GACD;AACtC,UAAM,EAAE,cAAc,OAAO,WAAW,GAAG,YAAY,OAAO,GAAG,eAAe,IAAI;AACpF,UAAM,WAAW,MAAM,KAAK,UAAU;AAAA,MACpC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,EAAE,aAAa,iBAAiB,UAAU;AAAA,MAC1C;AAAA,IACF;AACA,QACE,SAAS,SAAS,OAAO,KAAK,MAC9B,SAAS,SAAS,qBAAqB,KAAK,kBAC5C;AACA,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,0BAAN,MAA8B;AAAA,EACnC,YACmB,WACA,aACA,kBACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAEH,MAAM,KAAK,UAAkC,CAAC,GAAuC;AACnF,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,KAAc,UAAkC,CAAC,GAAgC;AAC1F,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ,SAAY,CAAC,IAAI,EAAE,IAAI;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OACJ,UACA,UAAkC,CAAC,GACN;AAC7B,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MACJ,UACA,UAAkC,CAAC,GACC;AACpC,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,MAAM,KACJ,aACA,UAAkC,CAAC,GACG;AACtC,WAAO,MAAM,KAAK,UAAU,qBAAqB,aAAa,OAAO;AAAA,EACvE;AAAA,EAEA,QAAQ,aAAqB,mBAAoD;AAC/E,WAAO,IAAI,wBAAwB,KAAK,WAAW,aAAa,iBAAiB;AAAA,EACnF;AAAA,EAEA,MAAM,KACJ,aACA,SACA,UAAkC,CAAC,GACD;AAClC,UAAM,WAAW,MAAM,KAAK,UAAU,sBAAsB,aAAa,SAAS,OAAO;AACzF,WAAO,KAAK,QAAQ,aAAa,SAAS,QAAQ,EAAE;AAAA,EACtD;AAAA,EAEA,MAAM,cAAc,SAAyE;AAC3F,UAAM,iBAAiB,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AACtE,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,aAAa,cAAc;AAClE,UAAM,UAAU,uBAAuB,OAAO,UAAU,QAAQ,oBAAoB;AACpF,QAAI,SAAS;AACX,aAAO,KAAK,QAAQ,QAAQ,aAAa,QAAQ,EAAE;AAAA,IACrD;AACA,WAAO,MAAM,KAAK;AAAA,MAChB,QAAQ;AAAA,MACR;AAAA,QACE,aAAa,QAAQ,eAAe,OAAO,WAAW;AAAA,QACtD,WAAW,QAAQ;AAAA,QACnB,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,QAC3D,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,MAC5E;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,0BAAN,MAA8B;AAAA,EAMnC,YACmB,WACR,aACA,IACT;AAHiB;AACR;AACA;AAET,SAAK,UAAU,IAAI,yBAAyB,WAAW,aAAa,EAAE;AACtE,SAAK,OAAO,KAAK;AACjB,SAAK,YAAY,IAAI,0BAA0B,WAAW,aAAa,EAAE;AAAA,EAC3E;AAAA,EAbS;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EAYT,MAAM,IAAI,UAAkC,CAAC,GAA6B;AACxE,WAAO,MAAM,KAAK,UAAU,mBAAmB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EACnF;AAAA,EAEA,MAAM,QACJ,UACA,UAAkC,CAAC,GACL;AAC9B,WAAO,MAAM,KAAK,UAAU,sBAAsB,KAAK,aAAa,KAAK,IAAI,UAAU,OAAO;AAAA,EAChG;AAAA,EAEA,MAAM,QAAQ,UAAkB,UAAkC,CAAC,GAA2B;AAC5F,WAAO,MAAM,KAAK,UAAU,sBAAsB,KAAK,aAAa,KAAK,IAAI,UAAU,OAAO;AAAA,EAChG;AAAA,EAEA,MAAM,IACJ,SACA,UAAkC,CAAC,GACH;AAChC,WAAO,MAAM,KAAK,UAAU,cAAc,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EACvF;AAAA,EAEA,MAAM,QACJ,aACA,UAAkC,CAAC,GACH;AAChC,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OACJ,SACA,UAAkC,CAAC,GACC;AACpC,WAAO,MAAM,KAAK,UAAU,sBAAsB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAC/F;AAAA,EAEA,MAAM,UAAU,UAAkC,CAAC,GAA8C;AAC/F,WAAO,MAAM,KAAK,UAAU,yBAAyB,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,EACzF;AAAA,EAEA,MAAM,IACJ,UAA2C,EAAE,aAAa,OAAO,WAAW,EAAE,GAC9E,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK,UAAU,mBAAmB,KAAK,aAAa,KAAK,IAAI,SAAS,OAAO;AAAA,EAC5F;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YACmB,WACR,aACA,mBACT;AAHiB;AACR;AACA;AAAA,EACR;AAAA,EAEH,MAAM,KAAK,UAAkC,CAAC,GAA+B;AAC3E,UAAM,YAAY,MAAM,KAAK,UAAU;AAAA,MACrC,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AACA,QAAI,UAAU,sBAAsB,KAAK,mBAAmB;AAC1D,YAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AACA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,2BAAN,MAA+B;AAAA,EACpC,YACmB,WACA,aACA,mBACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAEH,MAAM,KAAK,UAAkC,CAAC,GAAwC;AACpF,WAAO,MAAM,KAAK,UAAU;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF;AAgDO,SAAS,sBACd,YACA,UAAqC,CAAC,GAC9B;AACR,MAAI,WAAW,OAAO,SAAS,oBAAoB;AACjD,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AACA,QAAM,MAAM,IAAI,IAAI,WAAW,OAAO,GAAG;AACzC,MAAI,IAAI,aAAa,QAAS,KAAI,WAAW;AAAA,WACpC,IAAI,aAAa,SAAU,KAAI,WAAW;AAAA,WAC1C,IAAI,aAAa,SAAS,IAAI,aAAa,QAAQ;AAC1D,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,+BAA6B,GAAG;AAChC,MAAI,QAAQ,WAAW,OAAW,KAAI,aAAa,IAAI,UAAU,QAAQ,MAAM;AAC/E,yBAAuB,KAAK,WAAW,QAAQ,SAAS,GAAG,GAAG;AAC9D,yBAAuB,KAAK,YAAY,QAAQ,UAAU,GAAG,IAAK;AAClE,yBAAuB,KAAK,aAAa,QAAQ,WAAW,GAAG,IAAK;AACpE,yBAAuB,KAAK,iBAAiB,QAAQ,eAAe,GAAG,EAAE;AACzE,SAAO,IAAI,SAAS;AACtB;AAGO,SAAS,uBACd,YACA,UAAsC,CAAC,GAC/B;AACR,MAAI,WAAW,OAAO,SAAS,oBAAoB;AACjD,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,QAAM,MAAM,IAAI,IAAI,WAAW,OAAO,GAAG;AACzC,MAAI,IAAI,aAAa,QAAS,KAAI,WAAW;AAAA,WACpC,IAAI,aAAa,SAAU,KAAI,WAAW;AAAA,WAC1C,IAAI,aAAa,SAAS,IAAI,aAAa,QAAQ;AAC1D,UAAM,IAAI,MAAM,oEAAoE;AAAA,EACtF;AACA,+BAA6B,GAAG;AAChC,MAAI,QAAQ,WAAW,OAAW,KAAI,aAAa,IAAI,UAAU,QAAQ,MAAM;AAC/E,yBAAuB,KAAK,WAAW,QAAQ,SAAS,GAAG,GAAG;AAC9D,yBAAuB,KAAK,YAAY,QAAQ,UAAU,GAAG,IAAK;AAClE,yBAAuB,KAAK,aAAa,QAAQ,WAAW,GAAG,IAAK;AACpE,yBAAuB,KAAK,iBAAiB,QAAQ,eAAe,GAAG,EAAE;AACzE,SAAO,IAAI,SAAS;AACtB;AAGO,SAAS,0BAA0B,SAAiD;AACzF,QAAM,QAAQ,mBAAmB,aAAa,UAAU,IAAI,WAAW,OAAO;AAC9E,MACE,MAAM,aAAa,KACnB,MAAM,aAAa,IAAI,yCAAyC,yBAChE;AACA,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AACA,QAAM,iBAAiB,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU,EAAE;AAAA,IACpF;AAAA,IACA;AAAA,EACF;AACA,MACE,iBAAiB,KACjB,iBAAiB,0CACjB,iBAAiB,KAAK,MAAM,YAC5B;AACA,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,MAAI;AACJ,MAAI;AACF,YAAQ,KAAK;AAAA,MACX,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC;AAAA,IACxF;AAAA,EACF,QAAQ;AACN,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,QAAM,WAAW,0BAA0B,KAAK;AAChD,QAAM,OAAO,MAAM,MAAM,IAAI,cAAc;AAC3C,MAAI,KAAK,aAAa,KAAK,KAAK,aAAa,yBAAyB;AACpE,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,QAAM,aAAa,gBAAgB,MAAM,SAAS,SAAS;AAC3D,MAAI,WAAW,UAAU,SAAS,SAAS,WAAW,WAAW,SAAS,QAAQ;AAChF,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AACA,SAAO,EAAE,GAAG,UAAU,KAAK;AAC7B;AAKA,eAAsB,2BACpB,SACwB;AACxB,QAAM,QAAQ,mBAAmB,aAAa,UAAU,IAAI,WAAW,OAAO;AAC9E,MACE,MAAM,aAAa,KACnB,MAAM,aAAa,IAAI,yCAAyC,yBAChE;AACA,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AACA,QAAM,iBAAiB,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU,EAAE;AAAA,IACpF;AAAA,IACA;AAAA,EACF;AACA,MACE,iBAAiB,KACjB,iBAAiB,0CACjB,iBAAiB,KAAK,MAAM,YAC5B;AACA,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,MAAI;AACJ,MAAI;AACF,YAAQ,KAAK;AAAA,MACX,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC;AAAA,IACxF;AAAA,EACF,QAAQ;AACN,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,QAAM,WAAW,2BAA2B,KAAK;AACjD,QAAM,OAAO,MAAM,MAAM,IAAI,cAAc;AAC3C,MAAI,KAAK,aAAa,KAAK,KAAK,aAAa,yBAAyB;AACpE,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,QAAM,aAAa,gBAAgB,MAAM,SAAS,SAAS;AAC3D,MAAI,WAAW,UAAU,SAAS,SAAS,WAAW,WAAW,SAAS,QAAQ;AAChF,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACA,MAAK,MAAM,UAAU,IAAI,MAAO,SAAS,QAAQ;AAC/C,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,SAAO,EAAE,GAAG,UAAU,KAAK;AAC7B;AAEO,SAAS,0BAA0B,OAAsC;AAC9E,MAAI,CAAC,SAAS,KAAK,EAAG,OAAM,IAAI,MAAM,mCAAmC;AACzE,QAAM,UAAU,oBAAI,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG;AACvD,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,aAAW,OAAO,SAAS;AACzB,UAAM,OAAO,MAAM,GAAG;AACtB,UAAM,MAAM,QAAQ,aAAa,MAAM,QAAQ,eAAe,MAAM;AACpE,QAAI,OAAO,SAAS,YAAY,KAAK,SAAS,KAAK,UAAU,IAAI,IAAI,KAAK;AACxE,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAAA,EACF;AACA,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,aAAW,OAAO,SAAS;AACzB,QAAI,OAAO,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,CAAC,GAAG;AAClE,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAAA,EACF;AACA,QAAM,WAAW;AACjB,MACE,CAAC,OAAO,cAAc,SAAS,QAAQ,KACvC,SAAS,WAAW,KACpB,CAAC,OAAO,cAAc,SAAS,KAAK,KACpC,CAAC,OAAO,cAAc,SAAS,MAAM,GACrC;AACA,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACA,wBAAsB,SAAS,OAAO,SAAS,MAAM;AACrD,MACE,SAAS,qBAAqB,KAC9B,SAAS,oBAAoB,MAC7B,KAAK,IAAI,SAAS,OAAO,IAAI,OAC7B,KAAK,IAAI,SAAS,OAAO,IAAI,KAC7B;AACA,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,MAAI,SAAS,cAAc,gBAAgB,SAAS,cAAc,aAAa;AAC7E,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,MAAI,CAAC,OAAO,SAAS,gBAAgB,EAAG,OAAM,IAAI,MAAM,qCAAqC;AAC7F,MAAI,CAAC,iCAAiC,KAAK,SAAS,oBAAoB,GAAG;AACzE,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,MAAI,CAAC,OAAO,SAAS,IAAI,KAAK,SAAS,UAAU,EAAE,QAAQ,CAAC,GAAG;AAC7D,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AACA,SAAO;AACT;AAEO,SAAS,2BAA2B,OAAuC;AAChF,MAAI,CAAC,SAAS,KAAK,EAAG,OAAM,IAAI,MAAM,oCAAoC;AAC1E,QAAM,UAAU,oBAAI,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG;AACvD,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AACA,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,aAAW,OAAO,SAAS;AACzB,UAAM,OAAO,MAAM,GAAG;AACtB,UAAM,MAAM,QAAQ,aAAa,MAAM,QAAQ,eAAe,MAAM;AACpE,QAAI,OAAO,SAAS,YAAY,KAAK,SAAS,KAAK,UAAU,IAAI,IAAI,KAAK;AACxE,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AAAA,EACF;AACA,QAAM,WAAW;AACjB,MACE,CAAC,OAAO,cAAc,SAAS,QAAQ,KACvC,SAAS,WAAW,KACpB,CAAC,OAAO,cAAc,SAAS,KAAK,KACpC,CAAC,OAAO,cAAc,SAAS,MAAM,GACrC;AACA,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,wBAAsB,SAAS,OAAO,SAAS,MAAM;AACrD,MAAI,SAAS,cAAc,gBAAgB,SAAS,cAAc,aAAa;AAC7E,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,MAAI,CAAC,OAAO,SAAS,iBAAiB,GAAG;AACvC,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,MAAI,CAAC,iCAAiC,KAAK,SAAS,oBAAoB,GAAG;AACzE,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AACA,MAAI,CAAC,OAAO,SAAS,IAAI,KAAK,SAAS,UAAU,EAAE,QAAQ,CAAC,GAAG;AAC7D,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,MAAI,CAAC,kBAAkB,KAAK,SAAS,MAAM,GAAG;AAC5C,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACA,SAAO;AACT;AAEO,SAAS,kCAAkC,OAAsC;AACtF,MAAI,CAAC,SAAS,MAAM,SAAS,KAAK,QAAQ,CAAC,oBAAoB,KAAK,KAAK,GAAG;AAC1E,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,QAAM,aAAa,MAAM,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG;AAC/D,QAAM,SAAS,WAAW,OAAO,KAAK,KAAK,WAAW,SAAS,CAAC,IAAI,GAAG,GAAG;AAC1E,MAAI;AACJ,MAAI;AACF,cAAU,KAAK,MAAM;AAAA,EACvB,QAAQ;AACN,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,QAAM,QAAQ,WAAW,KAAK,SAAS,CAAC,cAAc,UAAU,WAAW,CAAC,CAAC;AAC7E,MAAI;AACJ,MAAI;AACF,eAAW,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;AAAA,EAC/E,QAAQ;AACN,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,SAAO,2BAA2B,QAAQ;AAC5C;AAEA,SAAS,sBACP,UACA,sBACuB;AACvB,QAAM,OAAO,SAAS;AAAA,IACpB,CAAC,YACC,CAAC,CAAC,UAAU,SAAS,UAAU,MAAM,EAAE,SAAS,QAAQ,SAAS,KACjE,QAAQ,aAAa,KAAK,CAAC,gBAAgB,YAAY,cAAc,oBAAoB;AAAA,EAC7F;AACA,OAAK;AAAA,IACH,CAAC,MAAM,UACL,iBAAiB,OAAO,oBAAoB,IAAI,iBAAiB,MAAM,oBAAoB;AAAA,EAC/F;AACA,SAAO,KAAK,CAAC,KAAK;AACpB;AAEA,SAAS,uBACP,UACA,sBACwB;AACxB,QAAM,OAAO,SAAS;AAAA,IACpB,CAAC,YACC,CAAC,YAAY,UAAU,WAAW,EAAE,SAAS,QAAQ,SAAS,KAC9D,QAAQ,aAAa,KAAK,CAAC,gBAAgB,YAAY,cAAc,oBAAoB;AAAA,EAC7F;AACA,OAAK;AAAA,IACH,CAAC,MAAM,UACL,kBAAkB,OAAO,oBAAoB,IAC7C,kBAAkB,MAAM,oBAAoB;AAAA,EAChD;AACA,SAAO,KAAK,CAAC,KAAK;AACpB;AAEA,SAAS,iBAAiB,SAAyB,sBAAsC;AACvF,QAAM,cAAc,QAAQ,aACzB,OAAO,CAAC,SAAS,KAAK,cAAc,oBAAoB,EACxD,IAAI,CAAC,SAAS,KAAK,MAAM,KAAK,UAAU,CAAC,EACzC,OAAO,OAAO,QAAQ,EACtB,OAAO,CAAC,MAAM,cAAc,KAAK,IAAI,MAAM,SAAS,GAAG,CAAC;AAC3D,QAAM,OAAO,KAAK,MAAM,QAAQ,UAAU;AAC1C,SAAO,KAAK,IAAI,aAAa,OAAO,SAAS,IAAI,IAAI,OAAO,CAAC;AAC/D;AAEA,SAAS,kBAAkB,SAA0B,sBAAsC;AACzF,QAAM,cAAc,QAAQ,aACzB,OAAO,CAAC,SAAS,KAAK,cAAc,oBAAoB,EACxD,IAAI,CAAC,SAAS,KAAK,MAAM,KAAK,UAAU,CAAC,EACzC,OAAO,OAAO,QAAQ,EACtB,OAAO,CAAC,MAAM,cAAc,KAAK,IAAI,MAAM,SAAS,GAAG,CAAC;AAC3D,QAAM,OAAO,KAAK,MAAM,QAAQ,UAAU;AAC1C,SAAO,KAAK,IAAI,aAAa,OAAO,SAAS,IAAI,IAAI,OAAO,CAAC;AAC/D;AAEA,SAAS,6BAA6B,KAAgB;AACpD,QAAM,WAAY,WAAoD,UAAU;AAChF,MAAI,aAAa,YAAY,IAAI,aAAa,MAAO,KAAI,WAAW;AACtE;AAEA,SAAS,uBACP,KACA,MACA,OACA,KACA,KACM;AACN,MAAI,UAAU,OAAW;AACzB,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK;AAC9D,UAAM,IAAI,MAAM,iBAAiB,IAAI,+BAA+B,GAAG,QAAQ,GAAG,EAAE;AAAA,EACtF;AACA,MAAI,aAAa,IAAI,MAAM,OAAO,KAAK,CAAC;AAC1C;AAEA,SAAS,gBACP,MACA,WACmC;AACnC,QAAM,aAAa,cAAc,cAAc,cAAc,IAAI,IAAI,eAAe,IAAI;AACxF,wBAAsB,WAAW,OAAO,WAAW,MAAM;AACzD,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAe,QAAsB;AAClE,MACE,CAAC,OAAO,cAAc,KAAK,KAC3B,CAAC,OAAO,cAAc,MAAM,KAC5B,QAAQ,KACR,SAAS,KACT,QAAQ,+BACR,SAAS,+BACT,QAAQ,SAAS,0BACjB;AACA,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AACF;AAEA,SAAS,cAAc,MAAqD;AAC1E,QAAM,YAAY,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAClD,MACE,KAAK,aAAa,MAClB,CAAC,UAAU,MAAM,CAAC,MAAM,UAAU,KAAK,KAAK,MAAM,IAAI,KACtD,OAAO,aAAa,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,QAC/C;AACA,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,QAAM,OAAO,IAAI,SAAS,KAAK,QAAQ,KAAK,YAAY,KAAK,UAAU;AACvE,SAAO,EAAE,OAAO,KAAK,UAAU,EAAE,GAAG,QAAQ,KAAK,UAAU,EAAE,EAAE;AACjE;AAEA,SAAS,eAAe,MAAqD;AAC3E,MAAI,KAAK,aAAa,KAAK,KAAK,CAAC,MAAM,OAAQ,KAAK,CAAC,MAAM,KAAM;AAC/D,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,MAAI,SAAS;AACb,SAAO,SAAS,IAAI,KAAK,YAAY;AACnC,QAAI,KAAK,MAAM,MAAM,KAAM;AACzB,gBAAU;AACV;AAAA,IACF;AACA,QAAI,SAAS,KAAK,SAAS,CAAC;AAC5B,WAAO,WAAW,KAAM;AACtB,gBAAU;AACV,eAAS,KAAK,SAAS,CAAC;AAAA,IAC1B;AACA,QACE,WAAW,OACX,WAAW,OACX,WAAW,KACV,UAAU,OAAQ,UAAU,KAC7B;AACA,gBAAU;AACV;AAAA,IACF;AACA,QAAI,SAAS,KAAK,KAAK,WAAY;AACnC,UAAM,SAAU,KAAK,SAAS,CAAC,KAAM,IAAK,KAAK,SAAS,CAAC;AACzD,QAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,WAAY;AACzD,QAAI,mBAAmB,MAAM,GAAG;AAC9B,UAAI,SAAS,KAAK,SAAS,KAAK,KAAK,WAAY;AACjD,aAAO;AAAA,QACL,QAAS,KAAK,SAAS,CAAC,KAAM,IAAK,KAAK,SAAS,CAAC;AAAA,QAClD,OAAQ,KAAK,SAAS,CAAC,KAAM,IAAK,KAAK,SAAS,CAAC;AAAA,MACnD;AAAA,IACF;AACA,cAAU,IAAI;AAAA,EAChB;AACA,QAAM,IAAI,MAAM,4CAA4C;AAC9D;AAEA,SAAS,mBAAmB,QAAyB;AACnD,SACG,UAAU,OAAQ,UAAU,OAC5B,UAAU,OAAQ,UAAU,OAC5B,UAAU,OAAQ,UAAU,OAC5B,UAAU,OAAQ,UAAU;AAEjC;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE;AACzC;AAEA,eAAe,UAAU,OAAoC;AAC3D,QAAM,SAAS,WAAW,QAAQ;AAClC,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,mDAAmD;AAChF,QAAM,OAAO,IAAI,WAAW,MAAM,UAAU;AAC5C,OAAK,IAAI,KAAK;AACd,QAAM,SAAS,IAAI,WAAW,MAAM,OAAO,OAAO,WAAW,IAAI,CAAC;AAClE,SAAO,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC9E;AAEA,SAAS,OAAO,OAAwB;AACtC,SAAO,8EAA8E,KAAK,KAAK;AACjG;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;","names":[]}
package/dist/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { ArtifactCatalogListOptions, ArtifactCatalogListResponse } from "./artifact-catalog.js";
2
- import type { SessionMessageSearchRequest, SessionMessageSearchResponse } from "./session-message-search.js";
2
+ import type { SessionMessageSearchRequest, SessionMessageSearchResponse, SessionMessagePreview, SessionMessagePreviewReference } from "./session-message-search.js";
3
3
  import type { KnowledgeOriginalFileDownload, AgentLearningContext, AgentLearningSettingsRecord, AgentLearningOverrideRecord, SaveAgentLearningSettingsRequest, KnowledgeEntryListRequest, KnowledgeEntryListResponse, KnowledgeReviewBatchListRequest, KnowledgeReviewBatchListResponse, KnowledgeEntryRecord, KnowledgeEntrySaveRequest, KnowledgeEntryWriteReceipt, KnowledgeEntryReviewRequest, KnowledgeEntryBatchReviewRequest, KnowledgeEntryRestoreRequest, AgentInstructionReviewRequest, AgentInstructionReceipt, AgentInstructionReviewListResponse } from "./knowledge.js";
4
4
  import type { RollbackWorkspaceArtifactRequest, SetWorkspaceArtifactStatusRequest, WorkspaceArtifactDetailResponse, WorkspaceArtifactListOptions, WorkspaceArtifactListResponse, WorkspaceArtifactMutationResponse } from "./workspace-artifacts.js";
5
5
  import type { CreateFeedbackRequest, Feedback, FeedbackSubmissionResponse } from "./feedback.js";
@@ -10,7 +10,7 @@ import type { SkillRecord, SkillSummary, SkillWriteReceipt, SaveWorkspaceSkillRe
10
10
  import { type WorkspaceControlStreamTransport } from "./workspace-control-stream.js";
11
11
  import { type WorkspaceInteractionRevisionStreamTransport } from "./interaction-revision-stream.js";
12
12
  import { type WorkspaceLiveStreamOptions, type WorkspaceLiveStreamTransport } from "./workspace-live-stream.js";
13
- import { OpenGeniInteractionClient, type AuthRun, type AuthRunListOptions, type AuthRunListResponse, type AuthRunMutationResponse, type AttachedBrowserDevice, type AttachedBrowserDeviceListOptions, type AttachedBrowserDeviceListResponse, type BrowserActionReceipt, type BrowserActionRequest, type BrowserClipboard, type BrowserDiagnosticBatch, type BrowserDiagnosticsOptions, type BrowserDownload, type BrowserDownloadListResponse, type BrowserDownloadSaveRequest, type BrowserDownloadSaveResponse, type BrowserIdentity, type BrowserIdentityListOptions, type BrowserIdentityListResponse, type BrowserIdentityMutationResponse, type BrowserObservation, type BrowserOpenTargetRequest, type BrowserSession, type BrowserSessionAttachment, type BrowserSessionAttachmentRequest, type BrowserSessionHeartbeatResponse, type BrowserSessionLifecycleRequest, type BrowserSessionListResponse, type BrowserSessionMutationResponse, type BrowserTargetListResponse, type BrowserRevisionListResponse, type ComputerActionReceipt, type ComputerActionRequest, type ComputerClipboard, type ComputerFrame, type ComputerObservation, type ComputerSession, type ComputerSessionAttachment, type ComputerSessionAttachmentRequest, type ComputerSessionHeartbeatResponse, type ComputerSessionLifecycleRequest, type ComputerSessionListResponse, type ComputerSessionMutationResponse, type ComputerTargetListResponse, type CreateBrowserIdentityRequest, type CreateBrowserSessionRequest, type CreateComputerSessionRequest, type CreateInteractionInterventionRequest, type CreateNetworkRouteRequest, type CreateSiteAuthConnectionRequest, type ExternalAuthInteractiveRequest, type ExternalAuthInteractiveResponse, type ExternalAuthRunRequest, type ExternalAuthRunResponse, type InteractionIntervention, type InteractionInterventionListOptions, type InteractionInterventionListResponse, type InteractionInterventionMutationResponse, type NetworkRoute, type NetworkRouteListOptions, type NetworkRouteListResponse, type NetworkRouteMutationResponse, type ProtectedAuthFillRequest, type ProtectedAuthFillResponse, type PublishBrowserRevisionRequest, type PublishBrowserRevisionResponse, type ReportAuthRunRequest, type ResolveInteractionInterventionRequest, type SiteAuthConnection, type SiteAuthConnectionListOptions, type SiteAuthConnectionListResponse, type SiteAuthConnectionMutationResponse, type StartAuthRunRequest, type UpdateNetworkRouteRequest, type UpdateBrowserIdentityRequest, type UpdateSiteAuthConnectionRequest, type VerifyAuthRunRequest, type WorkspaceInteractionRevisionEvent } from "./interaction.js";
13
+ import { OpenGeniInteractionClient, type AuthRun, type AuthRunListOptions, type AuthRunListResponse, type AuthRunMutationResponse, type AttachedBrowserDevice, type AttachedBrowserDeviceListOptions, type AttachedBrowserDeviceListResponse, type BrowserActionReceipt, type BrowserActionRequest, type BrowserScreenshotOptions, type BrowserClipboard, type BrowserDiagnosticBatch, type BrowserDomReadRequest, type BrowserDomReadResponse, type BrowserDiagnosticsOptions, type BrowserDownload, type BrowserDownloadListResponse, type BrowserDownloadSaveRequest, type BrowserDownloadSaveResponse, type BrowserIdentity, type BrowserIdentityListOptions, type BrowserIdentityListResponse, type BrowserIdentityMutationResponse, type BrowserObservation, type BrowserFrame, type BrowserOpenTargetRequest, type BrowserSession, type BrowserSessionAttachment, type BrowserSessionAttachmentRequest, type BrowserSessionHeartbeatResponse, type BrowserSessionLifecycleRequest, type BrowserSessionListResponse, type BrowserSessionMutationResponse, type BrowserTargetState, type BrowserTargetListResponse, type BrowserRevisionListResponse, type ComputerActionReceipt, type ComputerActionRequest, type ComputerClipboard, type ComputerFrame, type ComputerObservation, type ComputerSession, type ComputerSessionAttachment, type ComputerSessionAttachmentRequest, type ComputerSessionHeartbeatResponse, type ComputerSessionLifecycleRequest, type ComputerSessionListResponse, type ComputerSessionMutationResponse, type ComputerTargetListResponse, type CreateBrowserIdentityRequest, type CreateBrowserSessionRequest, type CreateComputerSessionRequest, type CreateInteractionInterventionRequest, type CreateNetworkRouteRequest, type CreateSiteAuthConnectionRequest, type ExternalAuthInteractiveRequest, type ExternalAuthInteractiveResponse, type ExternalAuthRunRequest, type ExternalAuthRunResponse, type InteractionIntervention, type InteractionInterventionListOptions, type InteractionInterventionListResponse, type InteractionInterventionMutationResponse, type NetworkRoute, type NetworkRouteListOptions, type NetworkRouteListResponse, type NetworkRouteMutationResponse, type ProtectedAuthFillRequest, type ProtectedAuthFillResponse, type PublishBrowserRevisionRequest, type PublishBrowserRevisionResponse, type ReportAuthRunRequest, type ResolveInteractionInterventionRequest, type SiteAuthConnection, type SiteAuthConnectionListOptions, type SiteAuthConnectionListResponse, type SiteAuthConnectionMutationResponse, type StartAuthRunRequest, type UpdateNetworkRouteRequest, type UpdateBrowserIdentityRequest, type UpdateSiteAuthConnectionRequest, type VerifyAuthRunRequest, type WorkspaceInteractionRevisionEvent } from "./interaction.js";
14
14
  import type { AccessContext, ActivateCodexRealtimeConnectionRequest, AddWorkspaceMemberRequest, ApiKey, BillingEntitlementsResponse, CodexAccount, CodexAccountsResponse, SessionCodexAccountsResponse, CodexAppsUpdate, CodexRotationSettings, CodexOverviewResponse, CodexAllocatorUpdate, CodexConnectionStatus, CodexRealtimeWebrtcRequest, CodexRealtimeWebrtcResponse, GatewayRealtimeConnectRequest, GatewayRealtimeConnectResponse, CodexConnectPoll, CodexConnectStart, CodexUsage, CodexUsageMap, ModelConnectionAccessPolicy, ModelConnectionAccessResponse, SuperGrokAccount, SuperGrokAccountsResponse, SuperGrokAccountScope, SuperGrokAllocatorUpdate, SuperGrokConnectionStatus, SuperGrokConnectPoll, SuperGrokConnectStart, SuperGrokRotationSettings, BillingSummary, BillingUsageResponse, InsightsRange, WorkspaceInsightsResponse, BeginSessionRealtimeRequest, CapabilityCatalogItem, CapabilityCatalogResponse, ConnectorToolPermissionsResponse, UpdateConnectorToolPermissionsRequest, CapabilityInstallation, ApiIntegrationPreview, ApiIntegrationOAuthStartRequest, ApiIntegrationUninstallPreview, InstallApiIntegrationRequest, InstalledApiIntegration, IntegrationFacetMutationResult, IntegrationFacetRemovalResult, IntegrationInstanceFacetsResponse, ListIntegrationDefinitionsResponse, ListApiIntegrationsResponse, MutateIntegrationFacetRequest, PreviewApiIntegrationRequest, UninstallApiIntegrationRequest, UninstallApiIntegrationResult, UpsertIntegrationFacetRequest, PreviewPluginRequest, PluginPreview, InstallPluginRequest, InstalledPlugin, ListInstalledPluginsResponse, PluginUninstallPreview, UninstallPluginRequest, UninstallPluginResult, AddDocumentRequest, CreateKnowledgeDropRequest, MoveDocumentRequest, ClientConfig, WorkspaceModelAccessPolicy, WorkspaceModelCatalogResponse, WorkspaceGatewayCustomModel, WorkspaceGatewayCustomModelsResponse, CreateWorkspaceGatewayCustomModelRequest, DeleteWorkspaceGatewayCustomModelRequest, WorkspaceOpenRouterCustomModel, WorkspaceOpenRouterCustomModelsResponse, CreateWorkspaceOpenRouterCustomModelRequest, DeleteWorkspaceOpenRouterCustomModelRequest, OrganizationModelProviderKind, OrganizationModelProviderConnection, UpsertOrganizationModelProviderConnectionRequest, RevokeOrganizationModelProviderConnectionRequest, OrganizationProviderCustomModel, OrganizationProviderCustomModelsResponse, CreateOrganizationProviderCustomModelRequest, DeleteOrganizationProviderCustomModelRequest, WorkspaceRealtimeModelCatalogResponse, ClientSessionEventInput, UserMessageEventInput, CompactSessionContextResult, ConnectionMetadata, PersonalGitHubConnectionStatusResponse, PersonalGitHubDisconnectRequest, PersonalGitHubOAuthStartRequest, PersonalGitHubOAuthStartResponse, ListPersonalGitHubRepositoriesOptions, ListPersonalGitHubRepositoriesResponse, PersonalGitHubRepositorySelectionState, ReplacePersonalGitHubRepositorySelectionsRequest, VerifyPersonalGitHubRepositorySelectionsRequest, CreateApiKeyRequest, CreateApiKeyResponse, CreateOrganizationApiKeyRequest, CreateCapabilityCatalogItemRequest, InstallSkillRequest, InstallLibrarySkillRequest, InstalledSkill, ListInstalledSkillsResponse, CreateBillingPortalRequest, CreateBillingPortalResponse, CreateCheckoutRequest, CreateCheckoutResponse, OpenGeniSlackBotInstallRequest, OpenGeniSlackBotInstallStart, SlackChannelRouteListResponse, SlackReactionChannelListResponse, UpdateSlackChannelRoutesRequest, FikenInstallRequest, FikenOAuthStartRequest, FikenOAuthStartResponse, CreateConnectionRequest, CreateDocumentBaseRequest, CreateFileUploadRequest, CreateFileUploadResponse, CreateGitHubAppManifestRequest, CreateGitHubAppManifestResponse, CreateScheduledTaskRequest, CreateSessionRequest, CreateSessionResponse, CreateVariableSetRequest, ResolveVariableSetAttachmentsRequest, ResolveVariableSetAttachmentsResponse, CreateRigRequest, CreateWorkspaceRequest, EnsureWorkspaceRequest, EnsureWorkspaceResponse, DeviceEnrollmentApproveRequest, DeviceEnrollmentApproveResponse, DeviceEnrollmentDenyResponse, DeviceEnrollmentLookupResponse, MintEnrollTokenResponse, EndSessionRealtimeRequest, DiscoverMcpCapabilitiesResponse, Document, DocumentBase, EnableCapabilityRequest, FileAsset, FileDownloadUrlResponse, GitHubActionPoliciesResponse, GitHubActionPolicyActorState, GitHubAppInfo, GitHubRepositoriesResponse, GoogleDriveBrowseResponse, GoogleDriveDisconnectRequest, SaveGoogleDriveIntegrationSourceRequest, GoogleDriveLifecycleActionRequest, ListOrganizationSessionsOptions, ListManagedOrganizationMembershipsResponse, ListUserResourceAuthoritiesOptions, ListUserResourceAuthoritiesResponse, UpdateGitHubActionPolicyRequest, RevokeUserResourceGrantResponse, ListOrganizationInvitationsPageResponse, ListOrganizationAdministrationMembersResponse, AcceptOrganizationInvitationRequest, AcceptOrganizationInvitationResponse, AcceptOrganizationRecoveryCustodyRequest, ConfigureOrganizationRecoveryPolicyRequest, CreateOrganizationInvitationRequest, CreateAdditionalOrganizationRequest, CreateAdditionalOrganizationResponse, CreateOrganizationRequest, CreateOrganizationResponse, CreateOrganizationWorkspaceRequest, OrganizationInvitation, OrganizationAdministrationOverview, OrganizationMember, OrganizationRecoveryMutationResponse, OrganizationRecoveryOperationCommandRequest, OrganizationRecoveryOverview, OrganizationSessionListResponse, OrganizationWorkspaceAccess, OrganizationWorkspaceAccessMember, OrganizationRetentionPolicy, OrganizationSummary, RevokeOrganizationInvitationRequest, RevokeOrganizationWorkspaceMemberRequest, RevokeOrganizationWorkspaceMemberResponse, PutOrganizationWorkspaceMemberRequest, UpdateOrganizationMemberRequest, UpdateOrganizationNameRequest, DisableOrganizationRecoveryPolicyRequest, StartOrganizationRecoveryOperationRequest, UpdateOrganizationWorkspaceRequest, UpdateOrganizationRetentionPolicyRequest, MachinesResponse, MetricSample, RemoveEnrollmentRequest, RemoveEnrollmentResponse, MachineOperationPolicy, UpdateMachineOperationPolicyRequest, UpdateMachineAgentResponse, SwapActiveSandboxRequest, SwapActiveSandboxResponse, PrepareSlackUserLinkAccessRequest, SlackUserLinkAccessMutationRequest, SlackUserLinkAccessRequest, ApproveSlackUserLinkAccessRequest, RetainedScreenshotDownload, RetainedScreenshotDownloadOptions, RetainedArtifactDownload, RetainedArtifactDownloadOptions, RetainedArtifactReference, RetainedArtifactContent, RetainedArtifactContentOptions, RetainedArtifactMetadata, UpdateVideoGenerationPolicyRequest, VideoArtifactPlaybackSource, VideoGenerationOperationSummary, VideoGenerationPolicy, WorkspaceVideoGenerationSettings, PreviewSkillImportRequest, ScheduledTask, ScheduledTaskRun, ForkSessionRequest, ForkSessionResponse, Session, SessionStatus, WorkClaimSubjectType, SessionBackgroundCommandListResponse, CancelSessionBackgroundCommandResult, SessionListResponse, SessionTenancyCreateCapabilities, AgentTopologyPageResponse, UpdateSessionChannelRequest, UpdateSessionAttentionRequest, UpdateSessionArchiveRequest, UpdateSessionPinRequest, UpdateSessionVisibilityRequest, UpdateSessionVisibilityResponse, SessionScopeSubjectId, SessionEvent, SessionEventCompactResult, SessionEventCompactResultOptions, SessionEventListOptions, SessionEventPage, SessionGoal, SessionGoalRevision, ListSessionGoalRevisionsOptions, ListSessionGoalRevisionsResponse, RejectSessionGoalRevisionRequest, RejectSessionGoalRevisionResponse, RollbackSessionGoalRevisionRequest, SessionHumanInputRequest, SessionLineageResponse, SessionRealtimeMutationResponse, SyncSessionRealtimeLedgerRequest, SyncSessionRealtimeLedgerResponse, RenewSessionRealtimeRequest, UpdateSessionMcpApprovalPolicyRequest, UpdateSessionMcpApprovalPolicyResponse, SessionQueueSnapshot, SessionQueueMutationResponse, SessionCommandReceipt, SessionPromptRouting, ComposerDraft, DeleteSessionQueueItemRequest, EditSessionQueueItemRequest, MoveSessionQueueItemRequest, NewSessionDraft, SaveComposerDraftRequest, SubmitComposerDraftRequest, SubmitComposerDraftResponse, SaveNewSessionDraftRequest, SteerSessionQueueItemRequest, SessionControlResponse, SessionRetryRequest, SandboxRecoveryProjection, SandboxRecoveryRequest, SandboxRecoveryResponse, SessionRetryResponse, WorkspaceInferenceControlResponse, WorkspaceControlEvent, SessionTurn, SubmitHumanInputResponseRequest, SessionCapabilities, AttachViewerRequest, AttachViewerResponse, AcknowledgeStreamRequest, AcknowledgeStreamResponse, ViewerHeartbeatRequest, ViewerHeartbeatResponse, FsListRequest, FsListResponse, FsListBatchRequest, FsListBatchResponse, FsReadRequest, FsReadResponse, PublishSandboxFileArtifactRequest, SandboxFileArtifactReceipt, FsWriteRequest, FsWriteResponse, FsDeleteRequest, FsDeleteResponse, FsMoveRequest, FsMoveResponse, FsMkdirRequest, FsMkdirResponse, GitStatusRequest, GitStatusResponse, GitDiffRequest, GitDiffResponse, GitReadBatchRequest, GitReadBatchResponse, GitLogRequest, GitLogResponse, GitShowRequest, GitShowResponse, GetWorkspaceCaptureResponse, GetWorkspaceCaptureFileResponse, TerminalExecRequest, TerminalExecResponse, PtyOpenRequest, PtyOpenResponse, PtyWriteRequest, PtyResizeRequest, PtyCloseRequest, TranscribeAudioResponse, TranscriptionRecordingListResponse, TranscriptionRecordingResponse, UploadTranscriptionRecordingChunkResponse, UpdateConnectionRequest, UpdateScheduledTaskRequest, UpdateSessionGoalRequest, ApplySessionGoalRevisionRequest, UpdateSessionRequest, UpdateSessionVariableSetsRequest, UpdateSessionToolPolicyRequest, UpdateVariableSetRequest, UpdateRigRequest, UpdateWorkspaceMemberRequest, UpdateWorkspaceModelAccessPolicyRequest, UpdateWorkspaceRequest, UpdateWorkspaceSettingsRequest, SetWorkspaceDefaultRigRequest, UploadFileInput, VariableSet, VariableSetSecret, VariableSetVariableMetadata, Channel, CreateChannelRequest, ReorderChannelsRequest, UpdateChannelRequest, Rig, RigVersion, RigChange, ProposeRigChangeRequest, WorkspaceMember, WorkspaceMemberCandidate, Workspace, SlackInstallationBinding, OAuthStartRequest, OAuthStartResponse, SocialConnection, SocialOAuthStartRequest, SkillImportPreview, SkillUninstallPreview, UninstallSkillRequest, UninstallSkillResult } from "./types.js";
15
15
  import type { ActivateWorkspaceInstructionPolicyRequest, CreateWorkspaceInstructionPolicyDraftRequest, CreateWorkspaceInstructionPolicyOnboardingProposalRequest, ImportLegacyWorkspaceInstructionPolicyDraftRequest, RollbackWorkspaceInstructionPolicyRequest, WorkspaceInstructionPolicyActivationResponse, WorkspaceInstructionPolicyDiffRequest, WorkspaceInstructionPolicyDiffResponse, WorkspaceInstructionPolicyListOptions, WorkspaceInstructionPolicyListResponse, WorkspaceInstructionPolicyOnboardingProposal, WorkspaceInstructionPolicyOnboardingProposalListOptions, WorkspaceInstructionPolicyOnboardingProposalListResponse, WorkspaceInstructionPolicyRevision } from "./workspace-instruction-policies.js";
16
16
  import type { GovernedLearningActivationUndoReceipt, WorkspaceLearningHistoryOptions, WorkspaceLearningHistoryResponse } from "./workspace-learning.js";
@@ -224,6 +224,11 @@ export declare class OpenGeniClient {
224
224
  * older servers. Use listEventPage before/after the returned sequence for context.
225
225
  */
226
226
  searchSessionMessages(workspaceId: string, request: SessionMessageSearchRequest, options?: OpenGeniRequestOptions): Promise<SessionMessageSearchResponse>;
227
+ /** Read one selected search result's complete visible text when <=12,000
228
+ * UTF-16 units. Stale, duplicate or non-message references fail with 404.
229
+ * The response never includes audit payload fields such as modelContext.
230
+ */
231
+ getSessionMessagePreview(workspaceId: string, sessionId: string, reference: SessionMessagePreviewReference, options?: OpenGeniRequestOptions): Promise<SessionMessagePreview>;
227
232
  listSessions(workspaceId: string, options?: {
228
233
  originSiteId?: string;
229
234
  limit?: number;
@@ -645,8 +650,11 @@ export declare class OpenGeniClient {
645
650
  listBrowserTargets(workspaceId: string, browserSessionId: string, options?: OpenGeniRequestOptions): Promise<BrowserTargetListResponse>;
646
651
  openBrowserTarget(workspaceId: string, browserSessionId: string, request?: BrowserOpenTargetRequest, options?: OpenGeniRequestOptions): Promise<BrowserObservation>;
647
652
  selectBrowserTarget(workspaceId: string, browserSessionId: string, targetId: string, options?: OpenGeniRequestOptions): Promise<BrowserObservation>;
653
+ captureBrowserTarget(workspaceId: string, browserSessionId: string, targetId: string, options?: OpenGeniRequestOptions, captureOptions?: BrowserScreenshotOptions): Promise<BrowserFrame>;
648
654
  closeBrowserTarget(workspaceId: string, browserSessionId: string, targetId: string, options?: OpenGeniRequestOptions): Promise<BrowserTargetListResponse>;
649
655
  observeBrowserTarget(workspaceId: string, browserSessionId: string, targetId: string, options?: OpenGeniRequestOptions): Promise<BrowserObservation>;
656
+ getBrowserTargetState(workspaceId: string, browserSessionId: string, targetId: string, options?: OpenGeniRequestOptions): Promise<BrowserTargetState>;
657
+ readBrowserDom(workspaceId: string, browserSessionId: string, targetId: string, request: BrowserDomReadRequest, options?: OpenGeniRequestOptions): Promise<BrowserDomReadResponse>;
650
658
  actInBrowser(workspaceId: string, browserSessionId: string, request: BrowserActionRequest, options?: OpenGeniRequestOptions): Promise<BrowserActionReceipt>;
651
659
  getBrowserActionReceipt(workspaceId: string, browserSessionId: string, operationId: string, options?: OpenGeniRequestOptions): Promise<BrowserActionReceipt>;
652
660
  listBrowserDiagnostics(workspaceId: string, browserSessionId: string, targetId: string, options?: BrowserDiagnosticsOptions): Promise<BrowserDiagnosticBatch>;
package/dist/core.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OpenGeniDocumentAuthorityClient
3
- } from "./chunk-ZN6WWXAX.js";
3
+ } from "./chunk-PCVFOBSV.js";
4
4
  import {
5
5
  resolveWorkspaceVoiceInputEnabled
6
6
  } from "./chunk-VYCTL62C.js";
@@ -9,12 +9,12 @@ import {
9
9
  OpenGeniToolReapprovalRequiredError,
10
10
  OpenGeniToolsClient
11
11
  } from "./chunk-FMLDFJ2Q.js";
12
- import "./chunk-Y7DRKEFZ.js";
12
+ import "./chunk-NP7DDXHK.js";
13
13
  import {
14
14
  OPENGENI_API_CONTRACT_HEADER,
15
15
  OPENGENI_API_CONTRACT_REVISION
16
- } from "./chunk-LSO66LQA.js";
17
- import "./chunk-QTBAMHEF.js";
16
+ } from "./chunk-E5WAYGHT.js";
17
+ import "./chunk-YUOPVPZW.js";
18
18
  import {
19
19
  OpenGeniApiContractMismatchError,
20
20
  OpenGeniApiError,
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  OpenGeniDocumentAuthorityClient
3
- } from "./chunk-ZN6WWXAX.js";
4
- import "./chunk-Y7DRKEFZ.js";
5
- import "./chunk-LSO66LQA.js";
6
- import "./chunk-QTBAMHEF.js";
3
+ } from "./chunk-PCVFOBSV.js";
4
+ import "./chunk-NP7DDXHK.js";
5
+ import "./chunk-E5WAYGHT.js";
6
+ import "./chunk-YUOPVPZW.js";
7
7
  import "./chunk-OO5LPTO7.js";
8
8
  export {
9
9
  OpenGeniDocumentAuthorityClient
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  OPENGENI_API_CONTRACT_HEADER,
3
3
  OPENGENI_API_CONTRACT_REVISION
4
- } from "./chunk-LSO66LQA.js";
4
+ } from "./chunk-E5WAYGHT.js";
5
5
  import {
6
6
  DEFAULT_ARTIFACT_WORKER_RPC_LIMITS,
7
7
  decodeArtifactWorkerRpcMessage,
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type { ArtifactCatalogKind, ArtifactCatalogItem, ArtifactCatalogListOptions, ArtifactCatalogListResponse, } from "./artifact-catalog.js";
2
- export type { SessionMessageSearchRequest, SessionMessageSearchMatch, SessionMessageSearchResponse, } from "./session-message-search.js";
2
+ export type { SessionMessageSearchRequest, SessionMessageSearchMatch, SessionMessageSearchResponse, SessionMessagePreview, SessionMessagePreviewReference, } from "./session-message-search.js";
3
3
  export { OpenGeniEmbeddingClient as OpenGeniClient } from "./embedding-client.js";
4
4
  export { pluginMcpUnavailableReason } from "@opengeni/contracts/plugin-discovery";
5
5
  export type { ToolDisplayMetadata } from "@opengeni/contracts";
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  OpenGeniEmbeddingClient
3
- } from "./chunk-MG4QFBKR.js";
4
- import "./chunk-X6Y2JCAN.js";
5
- import "./chunk-ZN6WWXAX.js";
3
+ } from "./chunk-B7S4YVGX.js";
4
+ import "./chunk-RAG3P2UV.js";
5
+ import "./chunk-PCVFOBSV.js";
6
6
  import {
7
7
  DEFAULT_WORKSPACE_TRANSCRIPTION_POLICY,
8
8
  authorizeTranscriptionAdapter,
@@ -43,7 +43,7 @@ import {
43
43
  isOpenGeniSiteBridgeRequestMessage,
44
44
  isSiteCatalogStaleError,
45
45
  sanitizeOpenGeniSiteToolCallRequest
46
- } from "./chunk-YHF66FWZ.js";
46
+ } from "./chunk-MPN5UJWE.js";
47
47
  import {
48
48
  OpenGeniToolCallError,
49
49
  OpenGeniToolReapprovalRequiredError,
@@ -65,7 +65,7 @@ import {
65
65
  streamWorkspaceControlEvents,
66
66
  streamWorkspaceInteractionRevisions,
67
67
  streamWorkspaceLiveEvents
68
- } from "./chunk-Y7DRKEFZ.js";
68
+ } from "./chunk-NP7DDXHK.js";
69
69
  import {
70
70
  DEFAULT_FILE_RESOURCE_MOUNT_ROOT,
71
71
  GENERATED_VIDEO_MAX_BYTES,
@@ -80,7 +80,7 @@ import {
80
80
  RETAINED_OUTPUT_MAX_PAGE_BYTES,
81
81
  SANDBOX_FILE_ARTIFACT_MAX_BYTES,
82
82
  SESSION_EVENT_TYPES
83
- } from "./chunk-LSO66LQA.js";
83
+ } from "./chunk-E5WAYGHT.js";
84
84
  import {
85
85
  AttachedBrowserDeviceCollection,
86
86
  AttachedBrowserDeviceResource,
@@ -122,7 +122,7 @@ import {
122
122
  interactionControlFailureFromError,
123
123
  parseBrowserFrameMetadata,
124
124
  parseComputerFrameMetadata
125
- } from "./chunk-QTBAMHEF.js";
125
+ } from "./chunk-YUOPVPZW.js";
126
126
  import {
127
127
  OpenGeniApiContractMismatchError,
128
128
  OpenGeniApiError,