@opengeni/sdk 4.4.1 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/dist/adapters/next.js +2 -2
- package/dist/artifacts.js +4 -4
- package/dist/browser.d.ts +2 -0
- package/dist/browser.js +5 -3
- package/dist/chat/index.js +5 -5
- package/dist/{chunk-3BWTS2MJ.js → chunk-ARDVIZIJ.js} +2 -2
- package/dist/{chunk-PVWOBYAZ.js → chunk-BXMNDWAN.js} +256 -78
- package/dist/chunk-BXMNDWAN.js.map +1 -0
- package/dist/{chunk-IVHLADZ7.js → chunk-GRUMGFK6.js} +2 -2
- package/dist/{chunk-2RVPHF37.js → chunk-JBAGMSN2.js} +66 -10
- package/dist/chunk-JBAGMSN2.js.map +1 -0
- package/dist/{chunk-35S72HAE.js → chunk-U4JUWOZV.js} +5 -5
- package/dist/{chunk-BLID3DCD.js → chunk-V4AIZAFF.js} +1 -1
- package/dist/chunk-V4AIZAFF.js.map +1 -0
- package/dist/{chunk-ALXDFL6C.js → chunk-VSOXNL3T.js} +2 -2
- package/dist/{chunk-CT6P2W2C.js → chunk-WI3WUT5H.js} +2 -2
- package/dist/client.d.ts +24 -1
- package/dist/codex-realtime-controller.js +1 -1
- package/dist/core.d.ts +2 -0
- package/dist/core.js +5 -3
- package/dist/document-authority.js +3 -3
- package/dist/editable-artifacts.js +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +35 -33
- package/dist/index.js.map +1 -1
- package/dist/read-retry.d.ts +61 -0
- package/dist/realtime.js +5 -5
- package/dist/session-proxy.d.ts +6 -1
- package/dist/session-proxy.js +2 -2
- package/dist/site-bridge-host.js +3 -3
- package/dist/site-browser-runtime.gen.d.ts +1 -1
- package/dist/site-document.js +1 -1
- package/dist/site-document.js.map +1 -1
- package/dist/site.js +3 -3
- package/dist/types.d.ts +40 -0
- package/dist/workspace-artifacts.d.ts +5 -0
- package/dist/workspace-live-stream.d.ts +7 -0
- package/package.json +3 -3
- package/src/browser.ts +2 -0
- package/src/client.ts +191 -73
- package/src/core.ts +2 -0
- package/src/index.ts +4 -0
- package/src/read-retry.ts +207 -0
- package/src/session-proxy.ts +95 -4
- package/src/site-browser-runtime.gen.ts +1 -1
- package/src/types.ts +38 -0
- package/src/workspace-artifacts.ts +6 -0
- package/src/workspace-live-stream.ts +12 -1
- package/dist/chunk-2RVPHF37.js.map +0 -1
- package/dist/chunk-BLID3DCD.js.map +0 -1
- package/dist/chunk-PVWOBYAZ.js.map +0 -1
- /package/dist/{chunk-3BWTS2MJ.js.map → chunk-ARDVIZIJ.js.map} +0 -0
- /package/dist/{chunk-IVHLADZ7.js.map → chunk-GRUMGFK6.js.map} +0 -0
- /package/dist/{chunk-35S72HAE.js.map → chunk-U4JUWOZV.js.map} +0 -0
- /package/dist/{chunk-ALXDFL6C.js.map → chunk-VSOXNL3T.js.map} +0 -0
- /package/dist/{chunk-CT6P2W2C.js.map → chunk-WI3WUT5H.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../contracts/src/session-history.ts","../src/vaults-api.ts","../src/deprecation.ts","../src/workspace-control-stream.ts","../src/interaction-revision-stream.ts","../src/workspace-live-stream.ts","../src/retained-artifacts.ts","../src/client.ts"],"sourcesContent":["/**\n * Conversation-first session history: which durable events are the steps of a\n * turn, and which tool results stay visible without opening those steps.\n * Dependency-free so browser packages can import it without the schema bundle.\n */\n/**\n * The bulk of a long agent turn: tool calls, their outputs and streamed\n * reasoning or command output. A turn whose window skips any of these has\n * steps a reader can open.\n */\nexport const SESSION_EVENT_CONTENT_STEP_TYPES = [\n \"agent.toolCall.created\",\n \"agent.toolCall.output\",\n \"agent.reasoning.delta\",\n \"sandbox.command.output.delta\",\n \"terminal.pty.output.delta\",\n] as const;\n\n/**\n * Turn bookkeeping that renders nothing in the conversation: a turn writes a\n * few `agent.model.request` rows and an `agent.model.usage` row per model\n * call. Only a turn's request rows up to its first model response draw\n * anything (the \"first model response\" startup phase); a conversation-filter\n * server keeps those, and every bookkeeping row of a turn without other\n * steps, so it never looks like it has steps to open.\n */\nexport const SESSION_EVENT_BOOKKEEPING_STEP_TYPES = [\n \"agent.model.request\",\n \"agent.model.usage\",\n] as const;\n\n/**\n * Everything conversation-first history reads exclude and load per turn, only\n * when a reader asks for that turn's steps.\n */\nexport const SESSION_EVENT_STEP_TYPES = [\n ...SESSION_EVENT_CONTENT_STEP_TYPES,\n ...SESSION_EVENT_BOOKKEEPING_STEP_TYPES,\n] as const;\n\n/**\n * The conversation-filter behavior a server applies to a read that sends\n * `presentedToolCalls=include`, announced in the `X-OpenGeni-Conversation-Filter`\n * response header. Version 2 keeps presented tool calls and the bookkeeping\n * rows described by {@link SESSION_EVENT_BOOKKEEPING_STEP_TYPES}; excluded\n * turnless output (PTY and command output) stays out, for the sandbox dock to\n * read itself. A server without the header may ignore `presentedToolCalls`\n * entirely.\n */\nexport const SESSION_EVENT_CONVERSATION_FILTER_VERSION = 2;\nexport const SESSION_EVENT_CONVERSATION_FILTER_HEADER = \"X-OpenGeni-Conversation-Filter\";\n\n/**\n * What a reader excludes from a conversation read when the server has not\n * announced {@link SESSION_EVENT_CONVERSATION_FILTER_VERSION}: tool calls stay\n * in (an older server would otherwise drop presented calls with them) and the\n * reader drops the ones that are not presented.\n */\nexport const SESSION_EVENT_COMPAT_EXCLUDED_STEP_TYPES = [\n \"agent.toolCall.output\",\n \"agent.reasoning.delta\",\n \"sandbox.command.output.delta\",\n \"terminal.pty.output.delta\",\n] as const;\n\n/**\n * Whether an `agent.model.request` phase is the model's first response. A\n * turn's request rows after its first response no longer change what the\n * conversation draws.\n */\nexport function isSessionModelResponsePhase(phase: unknown): boolean {\n return phase === \"first_byte\" || phase === \"first_event\";\n}\n\n/**\n * Tools whose result is primary output a reader sees without opening the\n * turn's steps: presented images and published files, Skill changes that may\n * need review, learning writes whose refusal is told outside the folded work\n * row, and worker spawns or messages that a turn's wait counts. Matched on the\n * tool name's leaf (`x__leaf` or `leaf`).\n */\nexport const SESSION_EVENT_PRESENTED_TOOL_LEAVES = [\n \"generate_image\",\n \"image_generation_call\",\n \"sandbox_file_publish\",\n \"skill_save\",\n \"skill_remove\",\n \"skill_install\",\n \"skill_publish\",\n \"instruction_policy_save\",\n \"knowledge_save\",\n \"knowledge_retain_file\",\n \"knowledge_retain_message\",\n \"knowledge_archive\",\n \"task_note_promote_knowledge\",\n \"remember_confirm\",\n \"session_create\",\n \"session_send_message\",\n] as const;\n\n/** Whether a tool name is one of {@link SESSION_EVENT_PRESENTED_TOOL_LEAVES}. */\nexport function isPresentedSessionToolName(name: unknown): boolean {\n if (typeof name !== \"string\" || name.length === 0) return false;\n return SESSION_EVENT_PRESENTED_TOOL_LEAVES.some(\n (leaf) => name === leaf || name.endsWith(`__${leaf}`),\n );\n}\n","import type { OpenGeniClient } from \"./client\";\nimport type { VaultPolicy } from \"./types\";\nimport type {\n CreateManagedProviderVaultRequest,\n CreateVaultItemRequest,\n CreateVaultRequest,\n DisconnectOnePasswordResponse,\n InstallOnePasswordRequest,\n InstallOnePasswordResponse,\n LinkProviderVaultRequest,\n ListVaultItemsQuery,\n MoveVaultItemRequest,\n OnePasswordConnectionSummary,\n ProviderVaultMeta,\n ReplaceOnePasswordTokenRequest,\n RevealVaultFieldResponse,\n SessionSecretsView,\n UpdateVaultItemRequest,\n UpdateVaultRequest,\n VaultErrorCode,\n VaultFieldVersionMeta,\n VaultItem,\n VaultItemSummary,\n VaultSummary,\n InstallVaultProviderRequest,\n InstallVaultProviderResponse,\n ReplaceVaultProviderCredentialsRequest,\n VaultProviderConnectionSummary,\n ListVaultProviderConnectionsResponse,\n DisconnectVaultProviderResponse,\n} from \"./vault-types\";\n\n/**\n * Vault REST routes over the client's JSON transport. Responses carry metadata\n * only; plaintext comes back only from `revealField`, and callers keep it in\n * memory for as long as they need it, never in a cache.\n */\nexport type VaultClientLike = Pick<OpenGeniClient, \"requestJson\">;\n\n/**\n * The client's JSON transport. A client without one still renders (a disabled\n * hook never calls it); each request then fails with a clear error.\n */\nexport function asVaultClient(client: unknown): VaultClientLike {\n if (\n client &&\n typeof client === \"object\" &&\n \"requestJson\" in client &&\n typeof (client as { requestJson: unknown }).requestJson === \"function\"\n ) {\n return client as VaultClientLike;\n }\n return {\n requestJson: (() =>\n Promise.reject(\n new Error(\"Vaults need a client with requestJson.\"),\n )) as VaultClientLike[\"requestJson\"],\n };\n}\n\nconst enc = encodeURIComponent;\n\nfunction itemsQuery(query: ListVaultItemsQuery): Record<string, string> {\n const out: Record<string, string> = {};\n if (query.q) out.q = query.q;\n if (query.type) out.type = query.type;\n if (query.includeArchived) out.includeArchived = \"true\";\n if (query.cursor) out.cursor = query.cursor;\n if (query.limit) out.limit = String(query.limit);\n return out;\n}\n\nexport function vaultsApi(client: VaultClientLike, workspaceId: string) {\n const base = `/v1/workspaces/${enc(workspaceId)}`;\n const vault = (vaultId: string) => `${base}/vaults/${enc(vaultId)}`;\n const item = (vaultId: string, itemId: string) => `${vault(vaultId)}/items/${enc(itemId)}`;\n const field = (vaultId: string, itemId: string, fieldId: string) =>\n `${item(vaultId, itemId)}/fields/${enc(fieldId)}`;\n const json = <T>(\n method: string,\n path: string,\n body?: unknown,\n query?: Record<string, string>,\n signal?: AbortSignal,\n ) => client.requestJson<T>(method, path, body, query ?? {}, signal ? { signal } : {});\n return {\n listVaults: async (signal?: AbortSignal) =>\n (await json<{ vaults: VaultSummary[] }>(\"GET\", `${base}/vaults`, undefined, {}, signal))\n .vaults,\n getVault: (vaultId: string, signal?: AbortSignal) =>\n json<VaultSummary>(\"GET\", vault(vaultId), undefined, {}, signal),\n createVault: (request: CreateVaultRequest) =>\n json<VaultSummary>(\"POST\", `${base}/vaults`, request),\n updateVault: (vaultId: string, request: UpdateVaultRequest) =>\n json<VaultSummary>(\"PATCH\", vault(vaultId), request),\n deleteVault: (vaultId: string, confirmName: string) =>\n client.requestJson<void>(\n \"DELETE\",\n vault(vaultId),\n { confirmName },\n {},\n { responseType: \"void\" },\n ),\n syncVault: (vaultId: string) => json<VaultSummary>(\"POST\", `${vault(vaultId)}/sync`, {}),\n listItems: (vaultId: string, query: ListVaultItemsQuery = {}, signal?: AbortSignal) =>\n json<{ items: VaultItemSummary[]; nextCursor: string | null }>(\n \"GET\",\n `${vault(vaultId)}/items`,\n undefined,\n itemsQuery(query),\n signal,\n ),\n getItem: (vaultId: string, itemId: string, signal?: AbortSignal) =>\n json<VaultItem>(\"GET\", item(vaultId, itemId), undefined, {}, signal),\n createItem: (vaultId: string, request: CreateVaultItemRequest) =>\n json<VaultItem>(\"POST\", `${vault(vaultId)}/items`, request),\n updateItem: (vaultId: string, itemId: string, request: UpdateVaultItemRequest) =>\n json<VaultItem>(\"PATCH\", item(vaultId, itemId), request),\n /** Archives; `permanent` deletes an archived item. */\n deleteItem: (vaultId: string, itemId: string, permanent = false) =>\n client.requestJson<void>(\n \"DELETE\",\n item(vaultId, itemId),\n undefined,\n permanent ? { permanent: \"true\" } : {},\n { responseType: \"void\" },\n ),\n restoreItem: (vaultId: string, itemId: string) =>\n json<VaultItem>(\"POST\", `${item(vaultId, itemId)}/restore`, {}),\n moveItem: (vaultId: string, itemId: string, request: MoveVaultItemRequest) =>\n json<VaultItem>(\"POST\", `${item(vaultId, itemId)}/move`, request),\n /** Plaintext. Audited server-side. Never cache the result. */\n revealField: (vaultId: string, itemId: string, fieldId: string, version?: number) =>\n json<RevealVaultFieldResponse>(\n \"POST\",\n `${field(vaultId, itemId, fieldId)}/reveal`,\n version === undefined ? {} : { version },\n ),\n listFieldVersions: async (\n vaultId: string,\n itemId: string,\n fieldId: string,\n signal?: AbortSignal,\n ) =>\n (\n await json<{ versions: VaultFieldVersionMeta[] }>(\n \"GET\",\n `${field(vaultId, itemId, fieldId)}/versions`,\n undefined,\n {},\n signal,\n )\n ).versions,\n restoreFieldVersion: (vaultId: string, itemId: string, fieldId: string, version: number) =>\n json<VaultItem>(\"POST\", `${field(vaultId, itemId, fieldId)}/restore`, { version }),\n getSessionSecrets: (sessionId: string, signal?: AbortSignal) =>\n json<SessionSecretsView>(\n \"GET\",\n `${base}/sessions/${enc(sessionId)}/secrets`,\n undefined,\n {},\n signal,\n ),\n setSessionVaultPolicy: (sessionId: string, policy: VaultPolicy) =>\n json<SessionSecretsView>(\"PUT\", `${base}/sessions/${enc(sessionId)}/vault-policy`, {\n policy,\n }),\n installOnePassword: (request: InstallOnePasswordRequest) =>\n json<InstallOnePasswordResponse>(\"POST\", `${base}/connections/1password/install`, request),\n /** The 1Password connections the caller can see. */\n listOnePasswordConnections: async (signal?: AbortSignal) =>\n (\n await json<{ connections: OnePasswordConnectionSummary[] }>(\n \"GET\",\n `${base}/connections/1password/service-accounts`,\n undefined,\n {},\n signal,\n )\n ).connections,\n /** Checks a new service account token and stores it on the same connection. */\n replaceOnePasswordToken: (connectionId: string, request: ReplaceOnePasswordTokenRequest) =>\n json<InstallOnePasswordResponse>(\n \"PUT\",\n `${base}/connections/${enc(connectionId)}/1password/token`,\n request,\n ),\n /** Unlinks the connection's vaults (nothing is deleted in 1Password) and removes its token. */\n disconnectOnePassword: (connectionId: string) =>\n json<DisconnectOnePasswordResponse>(\n \"DELETE\",\n `${base}/connections/${enc(connectionId)}/1password`,\n ),\n listProviderVaults: async (connectionId: string, signal?: AbortSignal) =>\n (\n await json<{ vaults: ProviderVaultMeta[] }>(\n \"GET\",\n `${base}/connections/${enc(connectionId)}/provider-vaults`,\n undefined,\n {},\n signal,\n )\n ).vaults,\n installVaultProvider: (request: InstallVaultProviderRequest) =>\n json<InstallVaultProviderResponse>(\"POST\", `${base}/vault-providers/connections`, request),\n /** Connections plus configured providers, even before the first connection. */\n getVaultProviderCatalog: (signal?: AbortSignal) =>\n json<ListVaultProviderConnectionsResponse>(\n \"GET\",\n `${base}/vault-providers/connections`,\n undefined,\n {},\n signal,\n ),\n listVaultProviderConnections: async (signal?: AbortSignal) =>\n (\n await json<{ connections: VaultProviderConnectionSummary[] }>(\n \"GET\",\n `${base}/vault-providers/connections`,\n undefined,\n {},\n signal,\n )\n ).connections,\n replaceVaultProviderCredentials: (\n connectionId: string,\n request: ReplaceVaultProviderCredentialsRequest,\n ) =>\n json<InstallVaultProviderResponse>(\n \"PUT\",\n `${base}/vault-providers/connections/${enc(connectionId)}/credentials`,\n request,\n ),\n disconnectVaultProvider: (connectionId: string) =>\n json<DisconnectVaultProviderResponse>(\n \"DELETE\",\n `${base}/vault-providers/connections/${enc(connectionId)}`,\n ),\n /** Continue verification using the saved credentials, without replaying setup tokens. */\n verifyVaultProviderConnection: (connectionId: string) =>\n json<InstallVaultProviderResponse>(\n \"POST\",\n `${base}/vault-providers/connections/${enc(connectionId)}/verify`,\n {},\n ),\n linkProviderVault: (request: LinkProviderVaultRequest) =>\n json<VaultSummary>(\"POST\", `${base}/vaults/link`, request),\n createManagedProviderVault: (\n connectionId: string,\n request: CreateManagedProviderVaultRequest,\n ) =>\n json<VaultSummary>(\n \"POST\",\n `${base}/connections/${enc(connectionId)}/managed-vaults`,\n request,\n ),\n };\n}\n\nexport type VaultsApi = ReturnType<typeof vaultsApi>;\n\nconst VAULT_ERROR_CODES: ReadonlySet<string> = new Set<VaultErrorCode>([\n \"vault_not_found\",\n \"vault_item_not_found\",\n \"vault_field_not_found\",\n \"vault_name_conflict\",\n \"vault_item_name_conflict\",\n \"vault_limit_reached\",\n \"vault_read_only\",\n \"vault_generation_conflict\",\n \"vault_permission_denied\",\n \"vault_reveal_requires_human\",\n \"vault_policy_outside_parent\",\n \"encryption_key_missing\",\n \"provider_auth_invalid\",\n \"provider_auth_expired\",\n \"provider_rate_limited\",\n \"provider_unavailable\",\n \"provider_conflict\",\n \"provider_locked\",\n \"provider_inventory_incomplete\",\n \"provider_outcome_unknown\",\n \"variable_sets_removed\",\n \"secret_save_forbidden\",\n \"invalid_secret_name\",\n \"secret_value_too_large\",\n \"human_auth_required\",\n \"secret_search_cursor_invalid\",\n]);\n\n/**\n * The vault error code of a failed call, from either `{error: {code}}` or the\n * vault routes' `{error: \"<code>\", message}` body. Null for anything else.\n */\nexport function vaultErrorCode(error: unknown): VaultErrorCode | null {\n if (!error || typeof error !== \"object\") return null;\n const record = error as { code?: unknown; body?: unknown; details?: unknown };\n if (typeof record.code === \"string\" && VAULT_ERROR_CODES.has(record.code)) {\n return record.code as VaultErrorCode;\n }\n if (typeof record.body === \"string\" && record.body) {\n try {\n const parsed = JSON.parse(record.body) as { error?: unknown };\n const candidate =\n typeof parsed.error === \"string\"\n ? parsed.error\n : parsed.error && typeof parsed.error === \"object\"\n ? (parsed.error as { code?: unknown }).code\n : undefined;\n if (typeof candidate === \"string\" && VAULT_ERROR_CODES.has(candidate)) {\n return candidate as VaultErrorCode;\n }\n } catch {\n return null;\n }\n }\n return null;\n}\n\n/** Server-side detail of a vault error (for example `retryAt` on a rate limit). */\nexport function vaultErrorDetail(error: unknown, key: string): unknown {\n if (!error || typeof error !== \"object\") return undefined;\n const record = error as { details?: Record<string, unknown>; body?: unknown };\n if (record.details && key in record.details) return record.details[key];\n if (typeof record.body === \"string\" && record.body) {\n try {\n const parsed = JSON.parse(record.body) as Record<string, unknown>;\n const nested =\n parsed.error && typeof parsed.error === \"object\"\n ? (parsed.error as Record<string, unknown>)\n : parsed;\n const details = (nested.details ?? parsed.details) as Record<string, unknown> | undefined;\n return details?.[key] ?? nested[key];\n } catch {\n return undefined;\n }\n }\n return undefined;\n}\n","/**\n * Deprecation notices advertised by the Opengeni API.\n *\n * Per the public API compatibility policy, a route whose behaviour is scheduled\n * for removal answers with the standard `Deprecation` (RFC 9745) and `Sunset`\n * (RFC 8594) headers plus `Link: <notes>; rel=\"deprecation\"`. The client\n * surfaces them through `OpenGeniClientOptions.onDeprecation`, or by default\n * as a one-time `console.warn` per route, so an integrator pinned to an older\n * SDK learns about a removal well before it happens.\n */\n\nexport type OpenGeniDeprecationNotice = {\n /** Request method, upper case. */\n method: string;\n /** Request path with ids collapsed (`/v1/workspaces/:id/...`), stable per route. */\n route: string;\n /** Exact request path. */\n path: string;\n /** When the deprecation was announced, if the header carried a date. */\n deprecatedAt: Date | null;\n /** Earliest removal on the server, if advertised. */\n sunset: Date | null;\n /** Migration notes (`rel=\"deprecation\"`), if advertised. */\n link: string | null;\n /** Replacement (`rel=\"successor-version\"`), if advertised. */\n successor: string | null;\n};\n\n/** `false` silences notices; a function receives each route's notice once per client. */\nexport type OpenGeniDeprecationHandler = (notice: OpenGeniDeprecationNotice) => void;\n\ntype HeaderBag = { get(name: string): string | null };\n\nconst ID_SEGMENT =\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|\\d+|[A-Za-z0-9_-]{20,})$/i;\n\nfunction routeKey(path: string): string {\n return path\n .split(\"/\")\n .map((segment) => (ID_SEGMENT.test(segment) ? \":id\" : segment))\n .join(\"/\");\n}\n\nfunction parseDeprecationDate(value: string): Date | null {\n const trimmed = value.trim();\n // RFC 9745 structured date `@<unix seconds>`; older drafts used `true` or an HTTP-date.\n const structured = /^@(-?\\d+)$/.exec(trimmed);\n if (structured) return new Date(Number(structured[1]) * 1000);\n const parsed = Date.parse(trimmed);\n return Number.isNaN(parsed) ? null : new Date(parsed);\n}\n\nfunction parseLinks(value: string | null): Map<string, string> {\n const links = new Map<string, string>();\n if (!value) return links;\n for (const match of value.matchAll(/<([^>]*)>\\s*((?:;\\s*[^;,]+)*)/g)) {\n const rel = /;\\s*rel=\"?([^\";,]+)\"?/i.exec(match[2] ?? \"\")?.[1];\n if (!rel) continue;\n for (const name of rel.toLowerCase().split(/\\s+/)) {\n if (!links.has(name)) links.set(name, match[1]!);\n }\n }\n return links;\n}\n\n/** Read a deprecation notice from response headers; `null` when none is advertised. */\nexport function parseDeprecationNotice(\n method: string,\n url: string,\n headers: HeaderBag,\n): OpenGeniDeprecationNotice | null {\n const deprecation = headers.get(\"deprecation\");\n const sunsetHeader = headers.get(\"sunset\");\n if (!deprecation && !sunsetHeader) return null;\n let path = url;\n try {\n path = new URL(url, \"http://opengeni.invalid\").pathname;\n } catch {\n // Keep the raw value; the notice is advisory.\n }\n const sunset = sunsetHeader ? Date.parse(sunsetHeader) : Number.NaN;\n const links = parseLinks(headers.get(\"link\"));\n return {\n method: method.toUpperCase(),\n route: routeKey(path),\n path,\n deprecatedAt: deprecation ? parseDeprecationDate(deprecation) : null,\n sunset: Number.isNaN(sunset) ? null : new Date(sunset),\n link: links.get(\"deprecation\") ?? links.get(\"sunset\") ?? null,\n successor: links.get(\"successor-version\") ?? null,\n };\n}\n\nconst warnedRoutes = new Set<string>();\n\n/** The default handler: one `console.warn` per route per process. */\nexport function warnDeprecationOnce(notice: OpenGeniDeprecationNotice): void {\n const key = `${notice.method} ${notice.route}`;\n if (warnedRoutes.has(key)) return;\n warnedRoutes.add(key);\n const sunset = notice.sunset ? ` and will be removed after ${notice.sunset.toISOString()}` : \"\";\n const notes = notice.link ? ` Migration notes: ${notice.link}.` : \"\";\n console.warn(\n `[@opengeni/sdk] ${key} is deprecated${sunset}.${notes} Upgrade @opengeni/sdk, or pass onDeprecation to handle this notice.`,\n );\n}\n\ntype FetchFunction<R extends { headers: HeaderBag }> = (\n input: string | URL | Request,\n init?: RequestInit,\n) => Promise<R>;\n\n/**\n * Wrap a fetch implementation so every response is inspected for a deprecation\n * notice. The handler runs at most once per route for this wrapper and never\n * affects the request: a throwing handler is swallowed.\n */\nexport function withDeprecationNotices<R extends { headers: HeaderBag }>(\n fetchImpl: FetchFunction<R>,\n handler: OpenGeniDeprecationHandler | false | undefined,\n): FetchFunction<R> {\n if (handler === false) return fetchImpl;\n const notify = handler ?? warnDeprecationOnce;\n const seen = new Set<string>();\n return async (input, init) => {\n const response = await fetchImpl(input, init);\n try {\n const headers = response.headers;\n if (headers && (headers.get(\"deprecation\") || headers.get(\"sunset\"))) {\n const method =\n init?.method ??\n (typeof Request !== \"undefined\" && input instanceof Request ? input.method : \"GET\");\n const url =\n typeof input === \"string\" ? input : input instanceof URL ? input.href : input.url;\n const notice = parseDeprecationNotice(method, url, headers);\n if (notice) {\n const key = `${notice.method} ${notice.route}`;\n if (!seen.has(key)) {\n seen.add(key);\n notify(notice);\n }\n }\n }\n } catch {\n // Deprecation notices are advisory and must never fail a request.\n }\n return response;\n };\n}\n","import { isAbortError, isRetryableStreamError, OpenGeniStreamError } from \"./errors\";\nimport { parseSseStream } from \"./sse\";\nimport {\n jitteredDelay,\n runBeforeLive,\n type StreamSessionEventsOptions,\n withStreamInactivityTimeout,\n} from \"./stream\";\nimport type { WorkspaceControlEvent } from \"./types\";\n\nexport type WorkspaceControlStreamTransport = {\n /** The server replays every durable event after the cursor before going live. */\n openStream: (\n after: number,\n signal: AbortSignal | undefined,\n ) => Promise<ReadableStream<Uint8Array>>;\n};\n\n/**\n * Reconnecting workspace invalidation stream. Control revisions are monotonic\n * but can begin above one after the one-way migration, so unlike conversation\n * events this stream intentionally permits sparse sequence values.\n */\nexport async function* streamWorkspaceControlEvents(\n transport: WorkspaceControlStreamTransport,\n options: StreamSessionEventsOptions = {},\n): AsyncGenerator<WorkspaceControlEvent, void, void> {\n const signal = options.signal;\n const reconnect = options.reconnect ?? true;\n const baseDelayMs = options.reconnectDelayMs ?? 500;\n const maxDelayMs = options.maxReconnectDelayMs ?? 10_000;\n const jitterRatio = options.reconnectJitterRatio ?? 0.2;\n const beforeLiveTimeoutMs = options.beforeLiveTimeoutMs ?? 15_000;\n const heartbeatTimeoutMs = options.heartbeatTimeoutMs ?? 45_000;\n const maxAttempts = options.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;\n let cursor = options.after ?? 0;\n let failures = 0;\n let delayMs = baseDelayMs;\n let everConnected = false;\n\n for (;;) {\n if (signal?.aborted) return;\n options.onStateChange?.(everConnected || failures > 0 ? \"reconnecting\" : \"connecting\");\n const cursorAtOpen = cursor;\n try {\n const body = await transport.openStream(cursor, signal);\n everConnected = true;\n failures = 0;\n delayMs = baseDelayMs;\n await runBeforeLive(options.beforeLive, beforeLiveTimeoutMs, signal);\n options.onStateChange?.(\"live\");\n for await (const message of parseSseStream(\n withStreamInactivityTimeout(body, heartbeatTimeoutMs, signal),\n )) {\n if (signal?.aborted) return;\n const event = parseWorkspaceControlEvent(message.data);\n if (!event || event.sequence <= cursor) continue;\n cursor = event.sequence;\n yield event;\n }\n if (!reconnect) return;\n if (cursor === cursorAtOpen) await sleep(jitteredDelay(baseDelayMs, jitterRatio), signal);\n continue;\n } catch (error) {\n if (signal?.aborted || isAbortError(error)) return;\n if (!reconnect || !isRetryableStreamError(error)) throw error;\n failures += 1;\n if (failures > maxAttempts) {\n throw new OpenGeniStreamError(\n `workspace control stream gave up after ${maxAttempts} reconnect attempts: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n await sleep(jitteredDelay(delayMs, jitterRatio), signal);\n delayMs = Math.min(Math.max(delayMs * 2, baseDelayMs), maxDelayMs);\n }\n}\n\nfunction parseWorkspaceControlEvent(data: string): WorkspaceControlEvent | null {\n let value: unknown;\n try {\n value = JSON.parse(data);\n } catch {\n return null;\n }\n if (\n typeof value !== \"object\" ||\n value === null ||\n (value as { type?: unknown }).type !== \"workspace.control.changed\" ||\n typeof (value as { id?: unknown }).id !== \"string\" ||\n typeof (value as { sequence?: unknown }).sequence !== \"number\"\n ) {\n return null;\n }\n return value as WorkspaceControlEvent;\n}\n\nasync function sleep(delayMs: number, signal: AbortSignal | undefined): Promise<void> {\n if (signal?.aborted || delayMs <= 0) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n function done() {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n }\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n","import { isAbortError, isRetryableStreamError, OpenGeniStreamError } from \"./errors\";\nimport type { WorkspaceInteractionRevisionEvent } from \"./interaction\";\nimport { parseSseStream } from \"./sse\";\nimport {\n jitteredDelay,\n runBeforeLive,\n type StreamSessionEventsOptions,\n withStreamInactivityTimeout,\n} from \"./stream\";\n\nexport type WorkspaceInteractionRevisionStreamTransport = {\n openStream: (\n after: number,\n signal: AbortSignal | undefined,\n ) => Promise<ReadableStream<Uint8Array>>;\n};\n\n/**\n * Reconnecting latest-revision stream. Revisions may skip because intermediate\n * invalidations carry no independent evidence; every delivered value means\n * \"refetch any interaction resources older than this cursor\".\n */\nexport async function* streamWorkspaceInteractionRevisions(\n transport: WorkspaceInteractionRevisionStreamTransport,\n options: StreamSessionEventsOptions = {},\n): AsyncGenerator<WorkspaceInteractionRevisionEvent, void, void> {\n const signal = options.signal;\n const reconnect = options.reconnect ?? true;\n const baseDelayMs = options.reconnectDelayMs ?? 500;\n const maxDelayMs = options.maxReconnectDelayMs ?? 10_000;\n const jitterRatio = options.reconnectJitterRatio ?? 0.2;\n const beforeLiveTimeoutMs = options.beforeLiveTimeoutMs ?? 15_000;\n const heartbeatTimeoutMs = options.heartbeatTimeoutMs ?? 45_000;\n const maxAttempts = options.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;\n let cursor = options.after ?? 0;\n let failures = 0;\n let delayMs = baseDelayMs;\n let everConnected = false;\n\n for (;;) {\n if (signal?.aborted) return;\n options.onStateChange?.(everConnected || failures > 0 ? \"reconnecting\" : \"connecting\");\n const cursorAtOpen = cursor;\n try {\n const body = await transport.openStream(cursor, signal);\n everConnected = true;\n failures = 0;\n delayMs = baseDelayMs;\n await runBeforeLive(options.beforeLive, beforeLiveTimeoutMs, signal);\n options.onStateChange?.(\"live\");\n for await (const message of parseSseStream(\n withStreamInactivityTimeout(body, heartbeatTimeoutMs, signal),\n )) {\n if (signal?.aborted) return;\n const event = parseWorkspaceInteractionRevision(message.data);\n if (!event || event.sequence <= cursor) continue;\n cursor = event.sequence;\n yield event;\n }\n if (!reconnect) return;\n if (cursor === cursorAtOpen) await sleep(jitteredDelay(baseDelayMs, jitterRatio), signal);\n continue;\n } catch (error) {\n if (signal?.aborted || isAbortError(error)) return;\n if (!reconnect || !isRetryableStreamError(error)) throw error;\n failures += 1;\n if (failures > maxAttempts) {\n throw new OpenGeniStreamError(\n `workspace interaction stream gave up after ${maxAttempts} reconnect attempts: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n await sleep(jitteredDelay(delayMs, jitterRatio), signal);\n delayMs = Math.min(Math.max(delayMs * 2, baseDelayMs), maxDelayMs);\n }\n}\n\nfunction parseWorkspaceInteractionRevision(data: string): WorkspaceInteractionRevisionEvent | null {\n let value: unknown;\n try {\n value = JSON.parse(data);\n } catch {\n return null;\n }\n if (\n !isRecord(value) ||\n value.type !== \"workspace.interaction.changed\" ||\n typeof value.workspaceId !== \"string\" ||\n typeof value.sequence !== \"number\" ||\n !Number.isSafeInteger(value.sequence) ||\n value.sequence < 0 ||\n value.revision !== value.sequence ||\n typeof value.occurredAt !== \"string\"\n ) {\n return null;\n }\n return value as WorkspaceInteractionRevisionEvent;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function sleep(delayMs: number, signal: AbortSignal | undefined): Promise<void> {\n if (signal?.aborted || delayMs <= 0) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n function done() {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n }\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n","import { isAbortError, isRetryableStreamError, OpenGeniStreamError } from \"./errors\";\nimport type { WorkspaceInteractionRevisionEvent } from \"./interaction\";\nimport { parseSseStream } from \"./sse\";\nimport {\n jitteredDelay,\n runBeforeLive,\n type StreamSessionEventsOptions,\n withStreamInactivityTimeout,\n} from \"./stream\";\nimport type { WorkspaceControlEvent } from \"./types\";\n\n/** Transient hints have no replay cursor; every reconnection reconciles lists. */\nexport type WorkspaceSessionListEvent = {\n type: \"workspace.sessions.changed\";\n workspaceId: string;\n available: boolean;\n sessionIds: string[] | null;\n};\n\nexport type WorkspaceLiveEvent =\n | WorkspaceControlEvent\n | WorkspaceInteractionRevisionEvent\n | WorkspaceSessionListEvent;\n\nexport type WorkspaceLiveStreamOptions = Omit<StreamSessionEventsOptions, \"after\"> & {\n controlAfter?: number;\n interactionAfter?: number;\n};\n\nexport type WorkspaceLiveStreamTransport = {\n openStream: (\n controlAfter: number,\n interactionAfter: number,\n signal: AbortSignal | undefined,\n ) => Promise<ReadableStream<Uint8Array>>;\n};\n\n/** One reconnecting SSE connection with independent durable cursors. */\nexport async function* streamWorkspaceLiveEvents(\n transport: WorkspaceLiveStreamTransport,\n options: WorkspaceLiveStreamOptions = {},\n): AsyncGenerator<WorkspaceLiveEvent, void, void> {\n const signal = options.signal;\n const reconnect = options.reconnect ?? true;\n const baseDelayMs = options.reconnectDelayMs ?? 500;\n const maxDelayMs = options.maxReconnectDelayMs ?? 10_000;\n const jitterRatio = options.reconnectJitterRatio ?? 0.2;\n const beforeLiveTimeoutMs = options.beforeLiveTimeoutMs ?? 15_000;\n const heartbeatTimeoutMs = options.heartbeatTimeoutMs ?? 45_000;\n const maxAttempts = options.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;\n let controlCursor = options.controlAfter ?? 0;\n let interactionCursor = options.interactionAfter ?? 0;\n let failures = 0;\n let delayMs = baseDelayMs;\n let everConnected = false;\n\n for (;;) {\n if (signal?.aborted) return;\n options.onStateChange?.(everConnected || failures > 0 ? \"reconnecting\" : \"connecting\");\n const cursorsAtOpen = `${controlCursor}:${interactionCursor}`;\n try {\n const body = await transport.openStream(controlCursor, interactionCursor, signal);\n everConnected = true;\n failures = 0;\n delayMs = baseDelayMs;\n await runBeforeLive(options.beforeLive, beforeLiveTimeoutMs, signal);\n options.onStateChange?.(\"live\");\n for await (const message of parseSseStream(\n withStreamInactivityTimeout(body, heartbeatTimeoutMs, signal),\n )) {\n if (signal?.aborted) return;\n const event = parseWorkspaceLiveEvent(message.data);\n if (!event) continue;\n if (event.type === \"workspace.control.changed\") {\n if (event.sequence <= controlCursor) continue;\n controlCursor = event.sequence;\n } else if (event.type === \"workspace.interaction.changed\") {\n if (event.sequence <= interactionCursor) continue;\n interactionCursor = event.sequence;\n }\n yield event;\n }\n if (!reconnect) return;\n if (`${controlCursor}:${interactionCursor}` === cursorsAtOpen) {\n await sleep(jitteredDelay(baseDelayMs, jitterRatio), signal);\n }\n continue;\n } catch (error) {\n if (signal?.aborted || isAbortError(error)) return;\n if (!reconnect || !isRetryableStreamError(error)) throw error;\n failures += 1;\n if (failures > maxAttempts) {\n throw new OpenGeniStreamError(\n `workspace live stream gave up after ${maxAttempts} reconnect attempts: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n await sleep(jitteredDelay(delayMs, jitterRatio), signal);\n delayMs = Math.min(Math.max(delayMs * 2, baseDelayMs), maxDelayMs);\n }\n}\n\nexport function parseWorkspaceLiveEvent(data: string): WorkspaceLiveEvent | null {\n let value: unknown;\n try {\n value = JSON.parse(data);\n } catch {\n return null;\n }\n if (!isRecord(value)) return null;\n if (\n value.type === \"workspace.sessions.changed\" &&\n typeof value.workspaceId === \"string\" &&\n typeof value.available === \"boolean\" &&\n (value.sessionIds === null ||\n (Array.isArray(value.sessionIds) && value.sessionIds.every((id) => typeof id === \"string\")))\n ) {\n return value as WorkspaceSessionListEvent;\n }\n if (typeof value.sequence !== \"number\") return null;\n if (\n value.type === \"workspace.control.changed\" &&\n typeof value.id === \"string\" &&\n Number.isSafeInteger(value.sequence)\n ) {\n return value as WorkspaceControlEvent;\n }\n if (\n value.type === \"workspace.interaction.changed\" &&\n typeof value.workspaceId === \"string\" &&\n Number.isSafeInteger(value.sequence) &&\n value.sequence >= 0 &&\n value.revision === value.sequence &&\n typeof value.occurredAt === \"string\"\n ) {\n return value as WorkspaceInteractionRevisionEvent;\n }\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function sleep(delayMs: number, signal: AbortSignal | undefined): Promise<void> {\n if (signal?.aborted || delayMs <= 0) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n function done() {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n }\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n","import type {\n GeneratedImageReceipt,\n GeneratedVideoReceipt,\n MediaGenerationResult,\n RetainedArtifactReference,\n SandboxFileArtifactReceipt,\n} from \"./types\";\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\nconst SHA256 = /^[0-9a-f]{64}$/;\nconst ISO_DATETIME_WITH_OFFSET =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/;\nconst WORKSPACE_PATH = /^\\/v1\\/workspaces\\/([0-9a-f-]+)\\/artifacts\\/([0-9a-f-]+)\\/content$/;\nconst MAX_BYTES = 64 * 1024 * 1024;\nconst MAX_VIDEO_BYTES = 512 * 1024 * 1024;\nconst MAX_DIMENSION = 16_384;\nconst MAX_PIXELS = 67_108_864;\nconst MAX_RANGE_BYTES = 1024 * 1024;\nconst MAX_SANDBOX_FILE_BYTES = 5_000_000_000;\n\n/** Zero-dependency validation for a permanent generic workspace-file receipt. */\nexport function parseRetainedWorkspaceFileReference(\n value: unknown,\n expectedWorkspaceId?: string,\n): RetainedArtifactReference | null {\n if (!recordWithKeys(value, WORKSPACE_FILE_REFERENCE_KEYS)) return null;\n const artifact = value as Record<string, unknown>;\n if (\n artifact.available !== true ||\n artifact.kind !== \"file\" ||\n typeof artifact.artifactId !== \"string\" ||\n !UUID.test(artifact.artifactId) ||\n typeof artifact.contentType !== \"string\" ||\n !/^[a-z0-9][a-z0-9!#$&^_.+-]{0,62}\\/[a-z0-9][a-z0-9!#$&^_.+-]{0,62}$/.test(\n artifact.contentType,\n ) ||\n !safeIntegerBetween(artifact.originalBytes, 1, MAX_SANDBOX_FILE_BYTES) ||\n typeof artifact.sha256 !== \"string\" ||\n !SHA256.test(artifact.sha256) ||\n typeof artifact.retainedAt !== \"string\" ||\n artifact.retainedAt.length > 64 ||\n !ISO_DATETIME_WITH_OFFSET.test(artifact.retainedAt) ||\n !Number.isFinite(Date.parse(artifact.retainedAt)) ||\n !recordWithKeys(artifact.retention, RETENTION_KEYS) ||\n !recordWithKeys(artifact.retrieval, RETRIEVAL_KEYS)\n ) {\n return null;\n }\n const retention = artifact.retention as Record<string, unknown>;\n if (retention.policy !== \"workspace_file\" || retention.expiresAt !== null) return null;\n const retrieval = artifact.retrieval as Record<string, unknown>;\n if (\n retrieval.method !== \"GET\" ||\n retrieval.acceptRanges !== \"bytes\" ||\n retrieval.maxRangeBytes !== MAX_RANGE_BYTES ||\n typeof retrieval.path !== \"string\" ||\n retrieval.path.length > 256\n ) {\n return null;\n }\n const match = WORKSPACE_PATH.exec(retrieval.path);\n if (\n !match ||\n !UUID.test(match[1] ?? \"\") ||\n match[2] !== artifact.artifactId ||\n (expectedWorkspaceId !== undefined && match[1] !== expectedWorkspaceId)\n ) {\n return null;\n }\n return value as RetainedArtifactReference;\n}\n\n/** Parse the closed result returned by sandbox_file_publish and the session API. */\nexport function parseSandboxFileArtifactReceipt(\n value: unknown,\n expectedWorkspaceId?: string,\n): SandboxFileArtifactReceipt | null {\n if (typeof value === \"string\" && value.length <= 8_192) {\n try {\n return parseSandboxFileArtifactReceipt(JSON.parse(value), expectedWorkspaceId);\n } catch {\n return null;\n }\n }\n if (\n !recordWithKeys(value, SANDBOX_FILE_RECEIPT_KEYS) &&\n !recordWithKeys(value, SANDBOX_FILE_RECEIPT_WITH_ACCESS_KEYS)\n )\n return null;\n if (value.access !== undefined && !isFileAccess(value.access)) return null;\n const artifact = parseRetainedWorkspaceFileReference(value.artifact, expectedWorkspaceId);\n const pathSegments = typeof value.sandboxPath === \"string\" ? value.sandboxPath.split(\"/\") : [];\n if (\n value.type !== \"sandbox_file\" ||\n typeof value.sandboxPath !== \"string\" ||\n !value.sandboxPath.startsWith(\"/workspace/\") ||\n value.sandboxPath.length > 4_096 ||\n value.sandboxPath.includes(\"\\0\") ||\n pathSegments.some(\n (segment, index) => index > 1 && (!segment || segment === \".\" || segment === \"..\"),\n ) ||\n typeof value.filename !== \"string\" ||\n value.filename.length < 1 ||\n value.filename.length > 1_024 ||\n pathSegments.at(-1) !== value.filename ||\n !artifact\n ) {\n return null;\n }\n return value as SandboxFileArtifactReceipt;\n}\n\n/** Zero-dependency validation for the SDK's permanent generated-image wire receipt. */\nexport function parseRetainedGeneratedImageReference(\n value: unknown,\n expectedWorkspaceId?: string,\n): RetainedArtifactReference | null {\n if (!recordWithKeys(value, GENERATED_IMAGE_REFERENCE_KEYS)) return null;\n const artifact = value as Record<string, unknown>;\n if (\n artifact.available !== true ||\n artifact.kind !== \"generated_image\" ||\n typeof artifact.artifactId !== \"string\" ||\n !UUID.test(artifact.artifactId) ||\n ![\"image/png\", \"image/jpeg\", \"image/webp\"].includes(String(artifact.contentType)) ||\n !safeIntegerBetween(artifact.originalBytes, 1, MAX_BYTES) ||\n typeof artifact.sha256 !== \"string\" ||\n !SHA256.test(artifact.sha256) ||\n typeof artifact.retainedAt !== \"string\" ||\n artifact.retainedAt.length > 64 ||\n !ISO_DATETIME_WITH_OFFSET.test(artifact.retainedAt) ||\n !Number.isFinite(Date.parse(artifact.retainedAt)) ||\n !recordWithKeys(artifact.dimensions, DIMENSION_KEYS) ||\n !recordWithKeys(artifact.retention, RETENTION_KEYS) ||\n !recordWithKeys(artifact.retrieval, RETRIEVAL_KEYS)\n ) {\n return null;\n }\n const dimensions = artifact.dimensions as Record<string, unknown>;\n if (\n !safeIntegerBetween(dimensions.width, 1, MAX_DIMENSION) ||\n !safeIntegerBetween(dimensions.height, 1, MAX_DIMENSION) ||\n Number(dimensions.width) * Number(dimensions.height) > MAX_PIXELS\n ) {\n return null;\n }\n const retention = artifact.retention as Record<string, unknown>;\n if (retention.policy !== \"workspace_file\" || retention.expiresAt !== null) return null;\n const retrieval = artifact.retrieval as Record<string, unknown>;\n if (\n retrieval.method !== \"GET\" ||\n retrieval.acceptRanges !== \"bytes\" ||\n retrieval.maxRangeBytes !== MAX_RANGE_BYTES ||\n typeof retrieval.path !== \"string\" ||\n retrieval.path.length > 256\n ) {\n return null;\n }\n const match = WORKSPACE_PATH.exec(retrieval.path);\n if (\n !match ||\n !UUID.test(match[1] ?? \"\") ||\n match[2] !== artifact.artifactId ||\n (expectedWorkspaceId !== undefined && match[1] !== expectedWorkspaceId)\n ) {\n return null;\n }\n return value as RetainedArtifactReference;\n}\n\nexport function generatedImageSandboxPathMatches(\n artifact: RetainedArtifactReference,\n sandboxPath: unknown,\n): sandboxPath is string {\n if (typeof sandboxPath !== \"string\") return false;\n const extension =\n artifact.contentType === \"image/png\"\n ? \"png\"\n : artifact.contentType === \"image/jpeg\"\n ? \"jpg\"\n : artifact.contentType === \"image/webp\"\n ? \"webp\"\n : null;\n return (\n extension !== null &&\n sandboxPath ===\n `/workspace/generated-images/generated-image-${artifact.artifactId}.${extension}`\n );\n}\n\n/** Parse the complete closed generated-image tool result. */\nexport function parseGeneratedImageReceipt(\n value: unknown,\n expectedWorkspaceId?: string,\n): GeneratedImageReceipt | null {\n if (typeof value === \"string\" && value.length <= 4_096) {\n try {\n return parseGeneratedImageReceipt(JSON.parse(value), expectedWorkspaceId);\n } catch {\n return null;\n }\n }\n if (!recordWithKeys(value, GENERATED_IMAGE_RECEIPT_KEYS)) return null;\n if (value.type !== \"generated_image\") return null;\n const artifact = parseRetainedGeneratedImageReference(value.artifact, expectedWorkspaceId);\n if (!artifact || !generatedImageSandboxPathMatches(artifact, value.sandboxPath)) return null;\n return { type: \"generated_image\", artifact, sandboxPath: value.sandboxPath };\n}\n\n/** Zero-dependency validation for a permanent generated-video reference. */\nexport function parseRetainedGeneratedVideoReference(\n value: unknown,\n expectedWorkspaceId?: string,\n): RetainedArtifactReference | null {\n if (!recordWithKeys(value, GENERATED_IMAGE_REFERENCE_KEYS)) return null;\n const artifact = value as Record<string, unknown>;\n if (\n artifact.available !== true ||\n artifact.kind !== \"generated_video\" ||\n typeof artifact.artifactId !== \"string\" ||\n !UUID.test(artifact.artifactId) ||\n artifact.contentType !== \"video/mp4\" ||\n !safeIntegerBetween(artifact.originalBytes, 1, MAX_VIDEO_BYTES) ||\n typeof artifact.sha256 !== \"string\" ||\n !SHA256.test(artifact.sha256) ||\n typeof artifact.retainedAt !== \"string\" ||\n artifact.retainedAt.length > 64 ||\n !ISO_DATETIME_WITH_OFFSET.test(artifact.retainedAt) ||\n !Number.isFinite(Date.parse(artifact.retainedAt)) ||\n !recordWithKeys(artifact.dimensions, DIMENSION_KEYS) ||\n !recordWithKeys(artifact.retention, RETENTION_KEYS) ||\n !recordWithKeys(artifact.retrieval, RETRIEVAL_KEYS)\n ) {\n return null;\n }\n const dimensions = artifact.dimensions as Record<string, unknown>;\n if (\n !safeIntegerBetween(dimensions.width, 1, 8_192) ||\n !safeIntegerBetween(dimensions.height, 1, 8_192)\n ) {\n return null;\n }\n const retention = artifact.retention as Record<string, unknown>;\n if (retention.policy !== \"workspace_file\" || retention.expiresAt !== null) return null;\n const retrieval = artifact.retrieval as Record<string, unknown>;\n if (\n retrieval.method !== \"GET\" ||\n retrieval.acceptRanges !== \"bytes\" ||\n retrieval.maxRangeBytes !== MAX_RANGE_BYTES ||\n typeof retrieval.path !== \"string\" ||\n retrieval.path.length > 256\n ) {\n return null;\n }\n const match = WORKSPACE_PATH.exec(retrieval.path);\n if (\n !match ||\n !UUID.test(match[1] ?? \"\") ||\n match[2] !== artifact.artifactId ||\n (expectedWorkspaceId !== undefined && match[1] !== expectedWorkspaceId)\n ) {\n return null;\n }\n return value as RetainedArtifactReference;\n}\n\n/** Parse the compact successful video result placed in model/timeline history. */\nexport function parseGeneratedVideoReceipt(\n value: unknown,\n expectedWorkspaceId?: string,\n): GeneratedVideoReceipt | null {\n if (typeof value === \"string\" && value.length <= 8_192) {\n try {\n return parseGeneratedVideoReceipt(JSON.parse(value), expectedWorkspaceId);\n } catch {\n return null;\n }\n }\n if (!recordWithKeys(value, GENERATED_VIDEO_RECEIPT_KEYS)) return null;\n if (\n value.type !== \"generated_video\" ||\n value.schemaVersion !== 1 ||\n typeof value.operationId !== \"string\" ||\n !UUID.test(value.operationId) ||\n !recordWithKeys(value.video, GENERATED_VIDEO_FACT_KEYS)\n ) {\n return null;\n }\n const artifact = parseRetainedGeneratedVideoReference(value.artifact, expectedWorkspaceId);\n const video = value.video as Record<string, unknown>;\n if (\n !artifact ||\n typeof value.sandboxPath !== \"string\" ||\n value.sandboxPath !==\n `/workspace/generated-videos/generated-video-${artifact.artifactId}.mp4` ||\n typeof video.durationSeconds !== \"number\" ||\n !Number.isFinite(video.durationSeconds) ||\n video.durationSeconds <= 0 ||\n video.durationSeconds > 120 ||\n video.width !== artifact.dimensions?.width ||\n video.height !== artifact.dimensions?.height ||\n typeof video.fps !== \"number\" ||\n !Number.isFinite(video.fps) ||\n video.fps <= 0 ||\n video.fps > 120 ||\n typeof video.hasAudio !== \"boolean\" ||\n video.videoCodec !== \"h264\" ||\n (video.audioCodec !== null && video.audioCodec !== \"aac\")\n ) {\n return null;\n }\n return value as GeneratedVideoReceipt;\n}\n\n/** Parse one closed terminal envelope; failures never fabricate an artifact. */\nexport function parseMediaGenerationResult(\n value: unknown,\n expectedWorkspaceId?: string,\n): MediaGenerationResult | null {\n if (typeof value === \"string\" && value.length <= 12_000) {\n try {\n return parseMediaGenerationResult(JSON.parse(value), expectedWorkspaceId);\n } catch {\n return null;\n }\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n const result = value as Record<string, unknown>;\n if (\n result.type !== \"media_generation_result\" ||\n result.schemaVersion !== 1 ||\n typeof result.operationId !== \"string\" ||\n !UUID.test(result.operationId)\n ) {\n return null;\n }\n if (result.status === \"ready\") {\n if (!recordWithKeys(result, MEDIA_RESULT_READY_KEYS)) return null;\n const receipt = parseGeneratedVideoReceipt(result.receipt, expectedWorkspaceId);\n if (!receipt || receipt.operationId !== result.operationId) return null;\n return value as MediaGenerationResult;\n }\n if (\n ![\"provider_failed\", \"retention_failed\", \"cancelled_before_submit\", \"outcome_unknown\"].includes(\n String(result.status),\n ) ||\n !recordWithKeys(result, MEDIA_RESULT_FAILURE_KEYS) ||\n typeof result.boundedPublicReason !== \"string\" ||\n result.boundedPublicReason.length < 1 ||\n result.boundedPublicReason.length > 1_000\n ) {\n return null;\n }\n return value as MediaGenerationResult;\n}\n\nconst GENERATED_IMAGE_REFERENCE_KEYS = new Set([\n \"available\",\n \"artifactId\",\n \"kind\",\n \"contentType\",\n \"originalBytes\",\n \"sha256\",\n \"retainedAt\",\n \"dimensions\",\n \"retention\",\n \"retrieval\",\n]);\nconst WORKSPACE_FILE_REFERENCE_KEYS = new Set([\n \"available\",\n \"artifactId\",\n \"kind\",\n \"contentType\",\n \"originalBytes\",\n \"sha256\",\n \"retainedAt\",\n \"retention\",\n \"retrieval\",\n]);\nconst DIMENSION_KEYS = new Set([\"width\", \"height\"]);\nconst RETENTION_KEYS = new Set([\"policy\", \"expiresAt\"]);\nconst RETRIEVAL_KEYS = new Set([\"method\", \"path\", \"acceptRanges\", \"maxRangeBytes\"]);\nconst GENERATED_IMAGE_RECEIPT_KEYS = new Set([\"type\", \"artifact\", \"sandboxPath\"]);\nconst SANDBOX_FILE_RECEIPT_KEYS = new Set([\"type\", \"sandboxPath\", \"filename\", \"artifact\"]);\n/** Receipts from servers where files have audiences also say who can open them. */\nconst SANDBOX_FILE_RECEIPT_WITH_ACCESS_KEYS = new Set([...SANDBOX_FILE_RECEIPT_KEYS, \"access\"]);\nconst FILE_ACCESS_KEYS = new Set([\"visibility\", \"whoCanOpen\"]);\n\nfunction isFileAccess(value: unknown): boolean {\n return (\n recordWithKeys(value, FILE_ACCESS_KEYS) &&\n (value.visibility === \"private\" || value.visibility === \"workspace\") &&\n typeof value.whoCanOpen === \"string\" &&\n value.whoCanOpen.length >= 1 &&\n value.whoCanOpen.length <= 512\n );\n}\nconst GENERATED_VIDEO_RECEIPT_KEYS = new Set([\n \"type\",\n \"schemaVersion\",\n \"operationId\",\n \"artifact\",\n \"video\",\n \"sandboxPath\",\n]);\nconst GENERATED_VIDEO_FACT_KEYS = new Set([\n \"durationSeconds\",\n \"width\",\n \"height\",\n \"fps\",\n \"hasAudio\",\n \"videoCodec\",\n \"audioCodec\",\n]);\nconst MEDIA_RESULT_READY_KEYS = new Set([\n \"type\",\n \"schemaVersion\",\n \"status\",\n \"operationId\",\n \"receipt\",\n]);\nconst MEDIA_RESULT_FAILURE_KEYS = new Set([\n \"type\",\n \"schemaVersion\",\n \"status\",\n \"operationId\",\n \"boundedPublicReason\",\n]);\n\nfunction recordWithKeys(\n value: unknown,\n allowed: ReadonlySet<string>,\n): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.keys(value).length === allowed.size &&\n Object.keys(value).every((key) => allowed.has(key))\n );\n}\n\nfunction safeIntegerBetween(value: unknown, min: number, max: number): boolean {\n return Number.isSafeInteger(value) && Number(value) >= min && Number(value) <= max;\n}\n","import {\n copyObservedSessionSequence,\n recordObservedSessionSequence,\n SESSION_SEQUENCE_HEADER,\n} from \"./session-sequence\";\nimport type { ComputerNativeCallRequest, ComputerNativeReceipt } from \"@opengeni/contracts\";\nimport { SESSION_EVENT_CONVERSATION_FILTER_HEADER } from \"@opengeni/contracts/session-history\";\nimport type { WorkspaceBackgroundCommandListResponse } from \"./types\";\nimport type {\n InsightsSiteUsageQuery,\n InsightsSiteUsageResponse,\n} from \"@opengeni/contracts/insights-usage\";\nimport type {\n ClaudeSubscriptionAccountsResponse,\n ClaudeSubscriptionAccount,\n ClaudeSubscriptionOAuthStartRequest,\n ClaudeSubscriptionSetupTokenRequest,\n SubscriptionPoolSettings,\n SubscriptionUsagePoolsResponse,\n} from \"@opengeni/contracts\";\nimport {\n insightsUsageQueryString,\n type WorkspaceInsightsUsageOptions,\n type OrganizationInsightsUsageOptions,\n type WorkspaceInsightsCallsOptions,\n type OrganizationInsightsCallsOptions,\n type InsightsCallsScope,\n type InsightsUsageResponse,\n type InsightsCallsResponse,\n} from \"./insights-usage\";\nimport type {\n ArtifactCatalogKind,\n ArtifactCatalogListOptions,\n ArtifactCatalogListResponse,\n ArtifactPinResponse,\n} from \"./artifact-catalog\";\nimport type { ToolActionReview, ToolReviewDetailsPage } from \"@opengeni/contracts\";\nimport type {\n SiteDataCollectionDefinitionRequest,\n SiteDataCollectionResponse,\n SiteDataDescribeResponse,\n SiteDataFileListResponse,\n SiteDataFileUrlResponse,\n SiteDataImportRequest,\n SiteDataImportResponse,\n SiteDataQueryRequest,\n SiteDataQueryResponse,\n SiteDataWriteRequest,\n SiteDataWriteResponse,\n} from \"@opengeni/contracts\";\nimport type {\n SiteSqlDescribeResponse,\n SiteSqlExportFormat,\n SiteSqlImportRequest,\n SiteSqlImportResponse,\n SiteSqlInspectResponse,\n SiteSqlMigrateResponse,\n SiteSqlMigrationRequest,\n SiteSqlQueryDefinitionRequest,\n SiteSqlQueryResponse,\n SiteSqlResetResponse,\n SiteSqlRunRequest,\n SiteSqlRunResponse,\n SiteSqlSettingsRequest,\n SiteSqlStatementRequest,\n} from \"@opengeni/contracts\";\nimport type {\n SiteAbuseReport,\n SiteAuthAuthorizeRequest,\n SiteAuthAuthorizeResponse,\n SiteHostnameAvailability,\n SiteLimitProfile,\n SitePlatformUsage,\n SitePublication,\n SitePublishWarningFix,\n SiteTakedownRequest,\n UpsertSitePublicationRequest,\n} from \"@opengeni/contracts\";\nimport type {\n SessionMessageSearchRequest,\n SessionMessageSearchResponse,\n SessionMessagePreview,\n SessionMessagePreviewReference,\n} from \"./session-message-search\";\nimport type {\n KnowledgeOriginalFileDownload,\n AgentLearningContext,\n AgentLearningSettingsRecord,\n AgentLearningOverrideRecord,\n SaveAgentLearningSettingsRequest,\n KnowledgeEntryListRequest,\n KnowledgeEntryListResponse,\n KnowledgeReviewBatchListRequest,\n KnowledgeReviewBatchListResponse,\n KnowledgeEntryRecord,\n KnowledgeEntrySaveRequest,\n KnowledgeEntryWriteReceipt,\n KnowledgeEntryReviewRequest,\n KnowledgeEntryBatchReviewRequest,\n KnowledgeEntryRestoreRequest,\n AgentInstructionReviewRequest,\n AgentInstructionReceipt,\n AgentInstructionReviewListResponse,\n} from \"./knowledge\";\nimport type {\n DuplicateWorkspaceArtifactRequest,\n RollbackWorkspaceArtifactRequest,\n SetWorkspaceArtifactStatusRequest,\n UpdateWorkspaceArtifactVisibilityRequest,\n UpdateWorkspaceArtifactVisibilityResponse,\n WorkspaceArtifactDetailResponse,\n WorkspaceArtifactListOptions,\n WorkspaceArtifactListResponse,\n WorkspaceArtifactMutationResponse,\n} from \"./workspace-artifacts\";\nimport type { CreateFeedbackRequest, Feedback, FeedbackSubmissionResponse } from \"./feedback\";\nimport type {\n CreateWorkspaceWebhookRequest,\n CreateWorkspaceWebhookResponse,\n GetWorkspaceCredentialProviderResponse,\n ListWorkspaceWebhookDeliveriesResponse,\n ListWorkspaceWebhooksResponse,\n PutWorkspaceCredentialProviderRequest,\n PutWorkspaceCredentialProviderResponse,\n UpdateWorkspaceWebhookRequest,\n WorkspaceSandboxImages,\n WorkspaceWebhook,\n WorkspaceWebhookDelivery,\n} from \"./workspace-integrations\";\nimport {\n OpenGeniApiContractMismatchError,\n OpenGeniApiError,\n OpenGeniSetupError,\n OpenGeniAllowanceExhaustedError,\n OpenGeniSessionUsageLimitReachedError,\n OpenGeniSessionUsageLimitUnsupportedError,\n allowanceExhaustedFields,\n rejectsStartModeField,\n sessionUsageLimitNotConfirmed,\n sessionUsageLimitReachedFields,\n OpenGeniSecureContextRequiredError,\n OpenGeniSessionListCursorError,\n} from \"./errors\";\nimport type { OpenGeniToolsFacade, OpenGeniToolTransport, OpenGeniWorkspaceTools } from \"./tools\";\nimport { vaultsApi, type VaultsApi } from \"./vaults-api\";\nimport {\n streamSessionEvents,\n type SessionEventStreamTransport,\n type StreamSessionEventsOptions,\n} from \"./stream\";\nimport type { SessionModelContextResponse } from \"./model-context\";\nimport { withDeprecationNotices, type OpenGeniDeprecationHandler } from \"./deprecation\";\nimport type {\n SkillRecord,\n SkillSummary,\n SkillWriteReceipt,\n SaveWorkspaceSkillRequest,\n RemoveWorkspaceSkillRequest,\n ApplyWorkspaceSkillRevisionRequest,\n} from \"./skills\";\nimport {\n streamWorkspaceControlEvents,\n type WorkspaceControlStreamTransport,\n} from \"./workspace-control-stream\";\nimport {\n streamWorkspaceInteractionRevisions,\n type WorkspaceInteractionRevisionStreamTransport,\n} from \"./interaction-revision-stream\";\nimport {\n streamWorkspaceLiveEvents,\n type WorkspaceLiveStreamOptions,\n type WorkspaceLiveStreamTransport,\n} from \"./workspace-live-stream\";\nimport {\n OpenGeniInteractionClient,\n decodeComputerFrameMetadataHeader,\n parseBrowserFrameMetadata,\n type AuthRun,\n type AuthRunListOptions,\n type AuthRunListResponse,\n type AuthRunMutationResponse,\n type AttachedBrowserDevice,\n type AttachedBrowserDeviceListOptions,\n type AttachedBrowserDeviceListResponse,\n type BrowserActionReceipt,\n type BrowserActionRequest,\n type BrowserScreenshotOptions,\n type BrowserClipboard,\n type BrowserDiagnosticBatch,\n type BrowserDomReadRequest,\n type BrowserDomReadResponse,\n type BrowserDiagnosticsOptions,\n type BrowserDownload,\n type BrowserDownloadListResponse,\n type BrowserDownloadSaveRequest,\n type BrowserDownloadSaveResponse,\n type BrowserRecordingSaveRequest,\n type BrowserRecordingSaveResponse,\n type BrowserRecordingSummary,\n type BrowserIdentity,\n type BrowserIdentityListOptions,\n type BrowserIdentityListResponse,\n type BrowserIdentityMutationResponse,\n type BrowserObservation,\n type BrowserFrame,\n type BrowserFrameMetadata,\n type BrowserOpenTargetRequest,\n type BrowserSession,\n type BrowserSessionAttachment,\n type BrowserSessionAttachmentRequest,\n type BrowserSessionHeartbeatResponse,\n type BrowserSessionLifecycleRequest,\n type BrowserSessionListResponse,\n type BrowserSessionMutationResponse,\n type BrowserTargetState,\n type BrowserTargetListResponse,\n type BrowserWorkingCopyAdoptionRequest,\n type BrowserWorkingCopyAdoptionResponse,\n type BrowserWorkingCopyInspection,\n type BrowserRevisionListResponse,\n type ComputerActionReceipt,\n type ComputerActionRequest,\n type ComputerClipboard,\n type ComputerFrame,\n type ComputerObservation,\n type ComputerSession,\n type ComputerSessionAttachment,\n type ComputerSessionAttachmentRequest,\n type ComputerSessionHeartbeatResponse,\n type ComputerSessionInputPosture,\n type ComputerSessionLifecycleRequest,\n type ComputerSessionListResponse,\n type ComputerSessionMutationResponse,\n type ComputerTargetListResponse,\n type CreateBrowserIdentityRequest,\n type CreateBrowserSessionRequest,\n type CreateComputerSessionRequest,\n type CreateInteractionInterventionRequest,\n type CreateNetworkRouteRequest,\n type CreateSiteAuthConnectionRequest,\n type ExternalAuthInteractiveRequest,\n type ExternalAuthInteractiveResponse,\n type ExternalAuthRunRequest,\n type ExternalAuthRunResponse,\n type InteractionIntervention,\n type InteractionInterventionListOptions,\n type InteractionInterventionListResponse,\n type InteractionInterventionMutationResponse,\n type NetworkRoute,\n type NetworkRouteListOptions,\n type NetworkRouteListResponse,\n type NetworkRouteMutationResponse,\n type PublishBrowserRevisionRequest,\n type PublishBrowserRevisionResponse,\n type ReportAuthRunRequest,\n type ResolveInteractionInterventionRequest,\n type SiteAuthConnection,\n type SiteAuthConnectionListOptions,\n type SiteAuthConnectionListResponse,\n type SiteAuthConnectionMutationResponse,\n type StartAuthRunRequest,\n type UpdateNetworkRouteRequest,\n type UpdateBrowserIdentityRequest,\n type UpdateSiteAuthConnectionRequest,\n type VerifyAuthRunRequest,\n type WorkspaceInteractionRevisionEvent,\n} from \"./interaction\";\nimport type {\n AccessContext,\n ActivateCodexRealtimeConnectionRequest,\n AddWorkspaceMemberRequest,\n ApiKey,\n BillingEntitlementsResponse,\n CodexAccount,\n CodexAccountsResponse,\n SessionCodexAccountsResponse,\n CodexAppsUpdate,\n CodexRotationSettings,\n CodexOverviewResponse,\n CodexAllocatorUpdate,\n CodexConnectionStatus,\n CodexRealtimeWebrtcRequest,\n CodexRealtimeWebrtcResponse,\n GatewayRealtimeConnectRequest,\n GatewayRealtimeConnectResponse,\n SessionRealtimeWebsocketRequest,\n SessionRealtimeWebsocketResponse,\n CodexConnectPoll,\n CodexConnectStart,\n CodexUsage,\n CodexUsageMap,\n ModelConnectionAccessKind,\n ModelConnectionAccessPolicy,\n ModelConnectionAccessResponse,\n SuperGrokAccount,\n SuperGrokAccountsResponse,\n SuperGrokAccountScope,\n SuperGrokAllocatorUpdate,\n SuperGrokConnectionStatus,\n SuperGrokConnectPoll,\n SuperGrokConnectStart,\n SuperGrokRotationSettings,\n BillingSummary,\n BillingUsageResponse,\n InsightsRange,\n WorkspaceInsightsResponse,\n BeginSessionRealtimeRequest,\n CapabilityCatalogItem,\n CapabilityCatalogResponse,\n ConnectorToolPermissionsResponse,\n UpdateConnectorToolPermissionsRequest,\n SessionMcpToolPermissionsResponse,\n UpdateSessionMcpToolPermissionsRequest,\n CapabilityInstallation,\n ApiIntegrationPreview,\n ApiIntegrationOAuthStartRequest,\n ApiIntegrationUninstallPreview,\n InstallApiIntegrationRequest,\n InstalledApiIntegration,\n IntegrationFacetMutationResult,\n IntegrationFacetRemovalResult,\n IntegrationInstanceFacetsResponse,\n ListIntegrationDefinitionsResponse,\n ListApiIntegrationsResponse,\n MutateIntegrationFacetRequest,\n PreviewApiIntegrationRequest,\n UninstallApiIntegrationRequest,\n UninstallApiIntegrationResult,\n UpsertIntegrationFacetRequest,\n PreviewPluginRequest,\n PluginPreview,\n InstallPluginRequest,\n InstalledPlugin,\n ListInstalledPluginsResponse,\n PluginUninstallPreview,\n UninstallPluginRequest,\n UninstallPluginResult,\n AddDocumentRequest,\n CreateKnowledgeDropRequest,\n MoveDocumentRequest,\n ClientConfig,\n WorkspaceModelAccessPolicy,\n OrganizationModelDefaults,\n UpdateOrganizationModelDefaultsRequest,\n ModelAccountSettingsOverview,\n OrganizationModelAccountSettings,\n UpdateOrganizationModelAccountSettingsRequest,\n UpdateWorkspaceModelAccountSettingsRequest,\n WorkspaceModelAccountSettings,\n ModelAccountPreferences,\n SessionModelAccountChoiceResponse,\n SessionUsageLimit,\n SetSessionUsageLimitRequest,\n SetSessionModelAccountChoiceRequest,\n SetSessionModelAccountChoiceResponse,\n UpdateModelAccountPreferencesRequest,\n OrganizationAgentAdminAccess,\n UpdateOrganizationAgentAdminAccessRequest,\n OrganizationPrivacySettings,\n UpdateOrganizationPrivacySettingsRequest,\n SessionAdminAccess,\n GrantSessionAdminAccessRequest,\n WorkspaceModelCatalogResponse,\n WorkspaceGatewayCustomModel,\n WorkspaceGatewayCustomModelsResponse,\n CreateWorkspaceGatewayCustomModelRequest,\n DeleteWorkspaceGatewayCustomModelRequest,\n WorkspaceOpenRouterCustomModel,\n WorkspaceOpenRouterCustomModelsResponse,\n CreateWorkspaceOpenRouterCustomModelRequest,\n DeleteWorkspaceOpenRouterCustomModelRequest,\n WorkspaceOpperCustomModel,\n WorkspaceOpperCustomModelsResponse,\n CreateWorkspaceOpperCustomModelRequest,\n DeleteWorkspaceOpperCustomModelRequest,\n OrganizationModelProviderKind,\n ClaudeSubscriptionUsage,\n ClaudeSubscriptionOAuthStartResponse,\n ClaudeSubscriptionOAuthCompleteRequest,\n ClaudeSubscriptionOAuthCompleteResponse,\n OrganizationModelProviderConnection,\n UpsertOrganizationModelProviderConnectionRequest,\n RevokeOrganizationModelProviderConnectionRequest,\n OrganizationProviderCustomModel,\n OrganizationProviderCustomModelsResponse,\n CreateOrganizationProviderCustomModelRequest,\n DeleteOrganizationProviderCustomModelRequest,\n WorkspaceRealtimeModelCatalogResponse,\n ClientSessionEventInput,\n UserMessageEventInput,\n CompactSessionContextResult,\n CompleteFileUploadResponse,\n UpdateFileVisibilityRequest,\n UpdateFileVisibilityResponse,\n ConnectionMetadata,\n PersonalGitHubConnectionStatusResponse,\n PersonalGitHubDisconnectRequest,\n PersonalGitHubOAuthStartRequest,\n PersonalGitHubOAuthStartResponse,\n ListPersonalGitHubRepositoriesOptions,\n ListPersonalGitHubRepositoriesResponse,\n PersonalGitHubRepositorySelectionState,\n ReplacePersonalGitHubRepositorySelectionsRequest,\n VerifyPersonalGitHubRepositorySelectionsRequest,\n CreateApiKeyRequest,\n CreateApiKeyResponse,\n CreateOrganizationApiKeyRequest,\n OrganizationMcpConnection,\n CreatePersonalApiKeyRequest,\n CreatePersonalApiKeyResponse,\n ListPersonalApiKeysResponse,\n OrganizationMcpConnectionList,\n OrganizationServiceAccount,\n ListOrganizationServiceAccountsResponse,\n CreateOrganizationServiceAccountRequest,\n UpdateOrganizationServiceAccountRequest,\n UpdateOrganizationMcpConnectionRequest,\n McpConnectionRequest,\n McpConnectionDecision,\n NativeAppAuthorizeInput,\n NativeAppTokenInput,\n NativeAppToken,\n InboxItem,\n InboxSettings,\n MemberNotificationsSetting,\n SessionInboxMute,\n ListInboxResponse,\n UpdateInboxItemInput,\n NativePushDevice,\n RegisterNativePushDeviceInput,\n CreateCapabilityCatalogItemRequest,\n InstallSkillRequest,\n InstallLibrarySkillRequest,\n InstalledSkill,\n ListInstalledSkillsResponse,\n CreateBillingPortalRequest,\n BillingSubscriptionCatalog,\n CreateSubscriptionCheckoutRequest,\n CreateSubscriptionCheckoutResponse,\n ChangeBillingSubscriptionRequest,\n CancelBillingSubscriptionRequest,\n BillingSubscriptionChange,\n CreateBillingPortalResponse,\n CreateCheckoutRequest,\n BillingCheckoutStatus,\n CreateCheckoutResponse,\n OpenGeniSlackBotInstallRequest,\n AvailableOpenGeniSlackBots,\n OpenGeniSlackBotOrganizationAccess,\n UpdateOpenGeniSlackBotOrganizationAccess,\n OpenGeniSlackBotInstallStart,\n SlackChannelRouteListResponse,\n SlackReactionChannelListResponse,\n UpdateSlackChannelRoutesRequest,\n FikenInstallRequest,\n FikenOAuthStartRequest,\n FikenOAuthStartResponse,\n CreateConnectionRequest,\n CreateDocumentBaseRequest,\n CreateFileUploadRequest,\n CreateFileUploadResponse,\n CreateGitHubAppManifestRequest,\n CreateGitHubAppManifestResponse,\n CreateScheduledTaskRequest,\n CreateSessionRequest,\n CreateSessionResponse,\n CreateRigRequest,\n CreateWorkspaceRequest,\n EnsureWorkspaceRequest,\n EnsureWorkspaceResponse,\n DeviceEnrollmentApproveRequest,\n DeviceEnrollmentApproveResponse,\n DeviceEnrollmentDenyResponse,\n DeviceEnrollmentLookupResponse,\n MintEnrollTokenRequest,\n MintEnrollTokenResponse,\n EndSessionRealtimeRequest,\n DiscoverMcpCapabilitiesResponse,\n Document,\n DocumentBase,\n EnableCapabilityRequest,\n FileAsset,\n FileDownloadUrlResponse,\n GitHubActionPoliciesResponse,\n GitHubActionPolicyActorState,\n GitHubAppInfo,\n GitHubRepositoriesResponse,\n GoogleDriveBrowseResponse,\n GoogleDriveDisconnectRequest,\n SaveGoogleDriveIntegrationSourceRequest,\n GoogleDriveLifecycleActionRequest,\n ListApiKeysResponse,\n ListOrganizationSessionsOptions,\n ListManagedOrganizationMembershipsResponse,\n ListUserResourceAuthoritiesOptions,\n ListUserResourceAuthoritiesResponse,\n UpdateGitHubActionPolicyRequest,\n RevokeUserResourceGrantResponse,\n ListOrganizationInvitationsPageResponse,\n ListOrganizationAdministrationMembersResponse,\n AcceptOrganizationInvitationRequest,\n AcceptOrganizationInvitationResponse,\n AcceptOrganizationRecoveryCustodyRequest,\n ConfigureOrganizationRecoveryPolicyRequest,\n CreateOrganizationInvitationRequest,\n CreateAdditionalOrganizationRequest,\n CreateAdditionalOrganizationResponse,\n CreateOrganizationRequest,\n CreateOrganizationResponse,\n CreateOrganizationWorkspaceRequest,\n OrganizationInvitation,\n OrganizationAdministrationOverview,\n OrganizationMember,\n OrganizationRecoveryMutationResponse,\n OrganizationRecoveryOperationCommandRequest,\n OrganizationRecoveryOverview,\n OrganizationSessionListResponse,\n OrganizationWorkspaceAccess,\n OrganizationWorkspaceAccessMember,\n OrganizationRetentionPolicy,\n OrganizationSummary,\n RevokeOrganizationInvitationRequest,\n RevokeOrganizationWorkspaceMemberRequest,\n RevokeOrganizationWorkspaceMemberResponse,\n PutOrganizationWorkspaceMemberRequest,\n UpdateOrganizationMemberRequest,\n UpdateOrganizationNameRequest,\n DisableOrganizationRecoveryPolicyRequest,\n StartOrganizationRecoveryOperationRequest,\n UpdateOrganizationWorkspaceRequest,\n UpdateOrganizationRetentionPolicyRequest,\n MachinesResponse,\n MetricSample,\n MachineMetricsSeriesResponse,\n RemoveEnrollmentRequest,\n RemoveEnrollmentResponse,\n MachineOperationPolicy,\n UpdateMachineOperationPolicyRequest,\n UpdateMachineAgentResponse,\n EnableMachineScreenControlResponse,\n ChangeMachineAudienceRequest,\n ChangeMachineAudienceResponse,\n MachineAudiencePreview,\n MachineAudiencePreviewRequest,\n OpenMachinePrivacySettingsRequest,\n OpenMachinePrivacySettingsResponse,\n SwapActiveSandboxRequest,\n SwapActiveSandboxResponse,\n ListWorkspaceMembersResponse,\n ListWorkspaceMemberCandidatesResponse,\n ListSlackUserLinkAccessRequestsResponse,\n PrepareSlackUserLinkAccessRequest,\n SlackUserLinkAccessMutationRequest,\n SlackUserLinkAccessRequest,\n ApproveSlackUserLinkAccessRequest,\n RetainedScreenshotDownload,\n RetainedScreenshotDownloadOptions,\n RetainedArtifactDownload,\n RetainedArtifactDownloadOptions,\n RetainedArtifactReference,\n RetainedArtifactContent,\n RetainedArtifactContentOptions,\n RetainedArtifactMetadata,\n UpdateVideoGenerationPolicyRequest,\n VideoArtifactPlaybackSource,\n VideoGenerationOperationSummary,\n VideoGenerationPolicy,\n WorkspaceVideoGenerationSettings,\n PreviewSkillImportRequest,\n PrivateScheduledTaskSummary,\n ScheduledTask,\n ScheduledTaskAccessAttention,\n ScheduledTaskRun,\n ForkSessionRequest,\n ForkSessionResponse,\n Session,\n SessionStatus,\n WorkClaimSubjectType,\n SessionBackgroundCommandListResponse,\n CancelSessionBackgroundCommandResult,\n SessionListResponse,\n SessionListEntryResponse,\n SessionTenancyCreateCapabilities,\n AgentTopologyPageResponse,\n UpdateSessionChannelRequest,\n UpdateSessionAttentionRequest,\n UpdateSessionArchiveRequest,\n UpdateSessionRetentionRequest,\n UpdateSessionPinRequest,\n UpdateSessionVisibilityRequest,\n UpdateSessionVisibilityResponse,\n SessionVisibility,\n SessionVisibilityChangePreview,\n SessionScopeSubjectId,\n SessionEvent,\n SessionEventCompactResult,\n SessionEventCompactResultOptions,\n SessionEventListOptions,\n SessionEventPage,\n SessionGoal,\n SessionGoalRevision,\n ListSessionGoalRevisionsOptions,\n ListSessionGoalRevisionsResponse,\n RejectSessionGoalRevisionRequest,\n RejectSessionGoalRevisionResponse,\n RollbackSessionGoalRevisionRequest,\n SessionHumanInputRequest,\n SessionLineageResponse,\n SessionRealtimeMutationResponse,\n SyncSessionRealtimeLedgerRequest,\n SyncSessionRealtimeLedgerResponse,\n RenewSessionRealtimeRequest,\n UpdateSessionMcpApprovalPolicyRequest,\n UpdateSessionMcpApprovalPolicyResponse,\n SessionQueueSnapshot,\n SessionQueueMutationResponse,\n SessionCommandReceipt,\n SessionPromptRouting,\n ComposerDraft,\n DeleteSessionQueueItemRequest,\n EditSessionQueueItemRequest,\n MoveSessionQueueItemRequest,\n NewSessionDraft,\n SaveComposerDraftRequest,\n SubmitComposerDraftRequest,\n SubmitComposerDraftResponse,\n SaveNewSessionDraftRequest,\n SteerSessionQueueItemRequest,\n SessionControlResponse,\n SessionRetryRequest,\n SandboxRecoveryProjection,\n SandboxRecoveryRequest,\n SandboxRecoveryResponse,\n SessionRetryResponse,\n WorkspaceInferenceControlResponse,\n WorkspaceControlEvent,\n SessionTurn,\n SubmitHumanInputResponseRequest,\n SessionCapabilities,\n AttachViewerRequest,\n AttachViewerResponse,\n AcknowledgeStreamRequest,\n AcknowledgeStreamResponse,\n ViewerHeartbeatRequest,\n ViewerHeartbeatResponse,\n FsListRequest,\n FsListResponse,\n FsListBatchRequest,\n FsListBatchResponse,\n FsReadRequest,\n FsReadResponse,\n PublishSandboxFileArtifactRequest,\n SandboxFileArtifactReceipt,\n FsWriteRequest,\n FsWriteResponse,\n FsDeleteRequest,\n FsDeleteResponse,\n FsMoveRequest,\n FsMoveResponse,\n FsMkdirRequest,\n FsMkdirResponse,\n GitStatusRequest,\n GitStatusResponse,\n GitDiffRequest,\n GitDiffResponse,\n GitReadBatchRequest,\n GitReadBatchResponse,\n GitLogRequest,\n GitLogResponse,\n GitShowRequest,\n GitShowResponse,\n GetWorkspaceCaptureResponse,\n GetWorkspaceCaptureFileResponse,\n TerminalExecRequest,\n TerminalExecResponse,\n PtyOpenRequest,\n PtyOpenResponse,\n PtyWriteRequest,\n PtyResizeRequest,\n PtyCloseRequest,\n TranscribeAudioResponse,\n TranscriptionRecordingListResponse,\n TranscriptionRecordingResponse,\n UploadTranscriptionRecordingChunkResponse,\n UpdateConnectionRequest,\n RefreshScheduledTaskAccessRequest,\n UpdateScheduledTaskRequest,\n UpdateSessionGoalRequest,\n ApplySessionGoalRevisionRequest,\n UpdateSessionRequest,\n UpdateSessionToolPolicyRequest,\n UpdateSessionAgentRequest,\n UpdateSessionSkillsRequest,\n UpdateRigRequest,\n UpdateWorkspaceMemberRequest,\n UpdateWorkspaceModelAccessPolicyRequest,\n UpdateWorkspaceRequest,\n UpdateWorkspaceSettingsRequest,\n SetWorkspaceDefaultRigRequest,\n UploadFileInput,\n Channel,\n CreateChannelRequest,\n ReorderChannelsRequest,\n UpdateChannelRequest,\n Rig,\n RigVersion,\n RigChange,\n ProposeRigChangeRequest,\n WorkspaceMember,\n WorkspaceMemberCandidate,\n Workspace,\n ListConnectionsResponse,\n ListSlackInstallationBindingsResponse,\n SlackInstallationBinding,\n ConnectionResponse,\n OAuthStartRequest,\n OAuthStartResponse,\n SocialConnection,\n SocialOAuthStartRequest,\n SkillImportPreview,\n SkillUninstallPreview,\n UninstallSkillRequest,\n UninstallSkillResult,\n OfficeWorkbook,\n OfficeWorkbookTicket,\n} from \"./types\";\nimport { GENERATED_VIDEO_MAX_BYTES } from \"./types\";\nimport {\n parseRetainedGeneratedImageReference,\n parseRetainedWorkspaceFileReference,\n} from \"./retained-artifacts\";\nimport type {\n ActivateWorkspaceInstructionPolicyRequest,\n CreateWorkspaceInstructionPolicyDraftRequest,\n CreateWorkspaceInstructionPolicyOnboardingProposalRequest,\n ImportLegacyWorkspaceInstructionPolicyDraftRequest,\n RollbackWorkspaceInstructionPolicyRequest,\n WorkspaceInstructionPolicyActivationResponse,\n WorkspaceInstructionPolicyDiffRequest,\n WorkspaceInstructionPolicyDiffResponse,\n WorkspaceInstructionPolicyListOptions,\n WorkspaceInstructionPolicyListResponse,\n WorkspaceInstructionPolicyOnboardingProposal,\n WorkspaceInstructionPolicyOnboardingProposalListOptions,\n WorkspaceInstructionPolicyOnboardingProposalListResponse,\n WorkspaceInstructionPolicyRevision,\n} from \"./workspace-instruction-policies\";\nimport type {\n GovernedLearningActivationUndoReceipt,\n WorkspaceLearningHistoryOptions,\n WorkspaceLearningHistoryResponse,\n} from \"./workspace-learning\";\nimport type {\n ActivateCompanyProfileRevisionRequest,\n CompanyProfileAgentPolicy,\n CompanyProfileDiffRequest,\n CompanyProfileDiffResponse,\n CompanyProfileListOptions,\n CompanyProfileListResponse,\n CompanyProfileMutationResponse,\n CompanyProfileRevision,\n RollbackCompanyProfileRequest,\n UpdateCompanyProfileRequest,\n UpdateCompanyProfileAgentPolicyRequest,\n} from \"./company-profile\";\nimport type {\n WorkspaceStateExportResponse,\n WorkspaceStateGetOptions,\n WorkspaceStateResponse,\n} from \"./workspace-state\";\nimport type {\n ActivatePreferenceRegistryRevisionRequest,\n ChangePreferenceRegistryScopeRequest,\n CorrectPreferenceRegistryRequest,\n CreatePreferenceRegistryProposalRequest,\n DeactivatePreferenceRegistryRequest,\n PreferenceRegistryDetailResponse,\n PreferenceRegistryFullContent,\n PreferenceRegistryListOptions,\n PreferenceRegistryListResponse,\n PreferenceRegistryMutationResponse,\n PreferenceRegistryRecord,\n PreferenceRegistrySnapshot,\n RejectPreferenceRegistryProposalRequest,\n SupersedePreferenceRegistryRequest,\n} from \"./preference-registry\";\nimport {\n OPENGENI_API_CONTRACT_HEADER,\n OPENGENI_API_CONTRACT_REVISION,\n OPENGENI_CORRELATION_HEADER,\n COMPUTER_SCREENSHOT_MAX_BYTES,\n RETAINED_OUTPUT_MAX_PAGE_BYTES,\n} from \"./types\";\n\nfunction sessionListQuery(options: {\n siteAccessId?: string;\n originSiteId?: string;\n limit?: number;\n parentSessionId?: string | null;\n scopeSubjectId?: SessionScopeSubjectId;\n}): Record<string, string> {\n const { limit, parentSessionId, scopeSubjectId } = options;\n const query: Record<string, string> = {};\n if (options.originSiteId) query.originSiteId = options.originSiteId;\n if (options.siteAccessId) query.siteAccessId = options.siteAccessId;\n if (limit !== undefined) query.limit = String(limit);\n if (parentSessionId !== undefined) query.parentSessionId = parentSessionId ?? \"null\";\n if (scopeSubjectId !== undefined) query.scopeSubjectId = scopeSubjectId;\n return query;\n}\n\nexport type SessionListPageOptions = {\n /** Chats available to this viewer in a private console Site; \"current\" inside its frame. */\n siteAccessId?: string;\n /** Complete content-free totals for an authorized root page. */\n includeTotals?: boolean;\n /** Filter attention rows before pagination. */\n needsYouOnly?: boolean;\n /** Only read-only sessions moved to the idle-session archive. */\n contentArchivedOnly?: boolean;\n /**\n * Only workstreams the caller started or messaged directly (any session in\n * the tree). Agent-relayed messages do not count.\n */\n mineOnly?: boolean;\n /** Created through this Site. In a Site-bound client, \"current\" resolves to its own Site. */\n originSiteId?: string;\n limit?: number;\n parentSessionId?: string | null;\n /** Only sessions carrying this exact opaque end-user label. */\n scopeSubjectId?: SessionScopeSubjectId;\n cursor?: string;\n search?: string;\n /** Restrict rows to one workspace project; null selects unfiled rows. */\n channelId?: string | null;\n /** Restrict rows to the exact frozen session creator identity. */\n createdBy?: { kind: \"subject\" | \"service\"; subjectId: string };\n /** Inclusive ISO-8601 activity lower bound. */\n updatedFrom?: string;\n /** Exclusive ISO-8601 activity upper bound. */\n updatedBefore?: string;\n /** Inclusive ISO-8601 creation lower bound. */\n createdFrom?: string;\n /** Exclusive ISO-8601 creation upper bound. */\n createdBefore?: string;\n /** Return only the complete personal pinned projection. */\n pinsOnly?: boolean;\n /** Skip pinned details when the pinned section is loaded separately. Defaults to true. */\n includePinned?: boolean;\n /** Return archived root chats instead of the active session list. */\n archivedOnly?: boolean;\n sortBy?: \"updatedAt\" | \"createdAt\" | \"name\";\n archiveStatus?: \"active\" | \"archived\" | \"all\";\n /** Stop this caller's finite page read when its owning route is abandoned. */\n signal?: AbortSignal | undefined;\n};\n\nconst SESSION_PAGE_FILTER_KEYS = [\n \"siteAccessId\",\n \"originSiteId\",\n \"channelId\",\n \"createdBy\",\n \"updatedFrom\",\n \"updatedBefore\",\n \"createdFrom\",\n \"createdBefore\",\n] as const;\nconst SESSION_PAGE_STRING_QUERY_KEYS = [\n \"updatedFrom\",\n \"updatedBefore\",\n \"createdFrom\",\n \"createdBefore\",\n \"sortBy\",\n \"archiveStatus\",\n] as const;\n\nfunction hasSessionPageFilters(options: SessionListPageOptions): boolean {\n return (\n Boolean(options.needsYouOnly) ||\n Boolean(options.contentArchivedOnly) ||\n Boolean(options.mineOnly) ||\n SESSION_PAGE_FILTER_KEYS.some((key) => options[key] !== undefined)\n );\n}\n\nfunction unsupportedSessionPage(feature: string): Error {\n return new Error(`The connected API does not support ${feature}`);\n}\n\nfunction sessionPath(workspaceId: string, sessionId: string): string {\n return `/v1/workspaces/${workspaceId}/sessions/${sessionId}`;\n}\n\n/**\n * Web-standard fetch response accepted by the SDK.\n *\n * The project global `Response` type includes Bun's non-standard `textStream()`\n * method and the newer `bytes()` method. Fetch implementations such as Expo do\n * not necessarily provide either member, and the SDK does not use them, so\n * they must not be part of the adapter boundary.\n */\nexport type FetchResponse = Omit<Response, \"bytes\" | \"clone\" | \"textStream\"> & {\n clone(): FetchResponse;\n};\n\nexport type FetchLike = (\n input: string | URL | Request,\n init?: RequestInit,\n) => Promise<FetchResponse>;\n\nexport type WorkspaceControlEventPage = {\n events: WorkspaceControlEvent[];\n bytes: number;\n truncated: boolean;\n nextAfter: number | null;\n};\n\nexport type OpenGeniClientOptions = {\n /** Explicit compatibility for an API predating targeted tool calls. No automatic downgrade. */\n toolGatewayMode?: \"target\" | \"catalog\";\n /** Base URL of the Opengeni API, e.g. `https://api.example.com`. */\n baseUrl: string;\n /** Opengeni API key, sent as `Authorization: Bearer <apiKey>`. */\n apiKey?: string;\n /**\n * Receives a notice (once per route per client) when the API advertises a\n * `Deprecation`/`Sunset` header on a response. Defaults to a one-time\n * `console.warn` per route; pass `false` to silence notices.\n */\n onDeprecation?: OpenGeniDeprecationHandler | false | undefined;\n /** Extra headers (static or computed per request) merged into every call. */\n headers?: Record<string, string> | (() => Record<string, string>);\n /** Custom fetch implementation. Defaults to the global `fetch`. */\n fetch?: FetchLike;\n /**\n * Optional causal clock for shared session projection GETs. The selected\n * request generation is retained for observers that join after launch.\n */\n beginSharedRead?: (() => number) | undefined;\n /** Positive deadline for interactive session commands. Defaults to 15 seconds. */\n sessionCommandTimeoutMs?: number;\n /**\n * How this client treats an API that advertises a different\n * `x-opengeni-api-contract` revision.\n *\n * - `\"strict\"`: fail with `OpenGeniApiContractMismatchError` so a browser\n * page served alongside the API can reload onto the matching bundle.\n * - `\"compatible\"`: keep working. Within a major release train the API is\n * additive (see the compatibility policy), and the API admits bearer\n * (API key / delegated token) mutations from older SDK revisions, so a\n * backend pinned to an older SDK is not broken by every deployment.\n *\n * Defaults to `\"strict\"` in a browser client without an `apiKey`, and to\n * `\"compatible\"` everywhere else.\n */\n apiContract?: \"strict\" | \"compatible\" | undefined;\n};\n\nfunction defaultApiContractMode(options: OpenGeniClientOptions): \"strict\" | \"compatible\" {\n if (options.apiContract) return options.apiContract;\n const browser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n return browser && !options.apiKey ? \"strict\" : \"compatible\";\n}\n\n/** Per-request cancellation for operations whose caller owns an AbortSignal. */\nexport type OpenGeniRequestOptions = {\n signal?: AbortSignal | undefined;\n timeoutMs?: number | undefined;\n /** Opt-in void response handling for focused helpers using the shared transport. */\n responseType?: \"json\" | \"void\";\n};\n\n/** Narrowing filters for BrowserSession/ComputerSession inventories. Filters\n * never grant access; omitted filters return the complete workspace history. */\nexport type InteractionSessionListOptions = OpenGeniRequestOptions & {\n /** Only sessions associated with this agent session. */\n associatedSessionId?: string | undefined;\n /** false omits ended and failed sessions. */\n includeTerminal?: boolean | undefined;\n};\n\nfunction interactionSessionListQuery(options: InteractionSessionListOptions): {\n query: Record<string, string>;\n request: OpenGeniRequestOptions;\n} {\n const { associatedSessionId, includeTerminal, ...request } = options;\n return {\n query: {\n ...(associatedSessionId ? { associatedSessionId } : {}),\n ...(includeTerminal !== undefined ? { includeTerminal: String(includeTerminal) } : {}),\n },\n request,\n };\n}\n\nexport type SharedSessionReadOptions = {\n /**\n * Observe the selected shared network GET's actual start. A caller joining\n * an already-started request receives its retained generation when the\n * client has a `beginSharedRead` clock.\n */\n onRequestStart?: ((readGeneration?: number) => void) | undefined;\n /**\n * Stop this caller's interest in the shared read. The native request is\n * aborted only after every caller that joined the same generation has\n * stopped waiting for it.\n */\n signal?: AbortSignal | undefined;\n};\n\nexport type GetSessionOptions = SharedSessionReadOptions & {\n /**\n * Require a network read generation that starts no earlier than this call.\n * Concurrent callers targeting the same successor generation still share it.\n */\n fresh?: boolean;\n};\n\nexport type GetSessionLineageOptions = SharedSessionReadOptions;\n\ntype SingleFlightReadEntry = {\n controller: AbortController;\n consumers: number;\n generation: number;\n promise: Promise<unknown>;\n resolve: (value: unknown) => void;\n reject: (reason?: unknown) => void;\n started: boolean;\n stamp?: number | undefined;\n listeners: Set<(readGeneration?: number) => void>;\n};\n\nfunction createSingleFlightReadEntry(\n generation: number,\n onRequestStart?: (readGeneration?: number) => void,\n): SingleFlightReadEntry {\n let resolve!: (value: unknown) => void;\n let reject!: (reason?: unknown) => void;\n const promise = new Promise<unknown>((entryResolve, entryReject) => {\n resolve = entryResolve;\n reject = entryReject;\n });\n return {\n controller: new AbortController(),\n consumers: 0,\n generation,\n promise,\n resolve,\n reject,\n started: false,\n listeners: new Set(onRequestStart ? [onRequestStart] : []),\n };\n}\n\n/** Follow-up prompt fields accepted by both queue and Steer. Session tools are updated separately. */\nexport type SendMessageInput = UserMessageEventInput[\"payload\"] & {\n clientEventId?: string;\n};\n\nfunction assertNoMessageTools(input: object): void {\n if (Object.prototype.hasOwnProperty.call(input, \"tools\")) {\n throw new TypeError(\n \"Message-level tools are not supported; update the session tool policy before sending.\",\n );\n }\n}\n\nexport type SteerMessageResult = {\n /** The accepted `user.message` event. */\n accepted: SessionEvent;\n /** The exact turn created for this message in the same server transaction. */\n turn: SessionTurn;\n /** Durable proof that this exact operation committed. */\n receipt: SessionCommandReceipt;\n /** Server-owned destination at admission time. */\n routing: SessionPromptRouting;\n /** Number of live attempts durably asked to stop by this atomic Steer. */\n interruptionCount: number;\n /** True when this response came from the command's immutable idempotency receipt. */\n replay: boolean;\n};\n\nexport type TranscribeAudioInput = {\n audio: Blob | File | Uint8Array;\n mimeType: string;\n durationSeconds?: number | undefined;\n signal?: AbortSignal | undefined;\n};\n\nexport type CreateTranscriptionRecordingInput = {\n recordingId: string;\n mimeType: string;\n signal?: AbortSignal | undefined;\n};\n\nexport type UploadTranscriptionRecordingChunkInput = {\n audio: Blob | File | Uint8Array;\n mimeType: string;\n sha256: string;\n startMilliseconds: number;\n durationMilliseconds: number;\n signal?: AbortSignal | undefined;\n};\n\nexport type FinalizeTranscriptionRecordingInput = {\n chunkCount: number;\n totalBytes: number;\n totalDurationMilliseconds: number;\n signal?: AbortSignal | undefined;\n};\n\nfunction normalizeScheduledTaskMachineTarget<\n T extends CreateScheduledTaskRequest | UpdateScheduledTaskRequest,\n>(request: T): T {\n if (!(\"agentConfig\" in request) || !request.agentConfig?.machineTarget) {\n return request;\n }\n const { workingDir, ...machineTarget } = request.agentConfig.machineTarget;\n if (workingDir === undefined) {\n return request;\n }\n const normalizedWorkingDir = workingDir.trim();\n return {\n ...request,\n agentConfig: {\n ...request.agentConfig,\n machineTarget: {\n ...machineTarget,\n ...(normalizedWorkingDir ? { workingDir: normalizedWorkingDir } : {}),\n },\n },\n };\n}\n\n/**\n * Typed client for the Opengeni public API. Framework-agnostic: only needs\n * WHATWG `fetch` + streams, so it runs in Node 18+, Bun, Deno, browsers, and\n * edge runtimes.\n */\nfunction createLazyToolsFacade(transport: OpenGeniToolTransport): OpenGeniToolsFacade {\n return {\n forWorkspace(workspaceId: string): OpenGeniWorkspaceTools {\n const normalizedWorkspaceId = workspaceId.trim();\n if (!normalizedWorkspaceId) throw new TypeError(\"workspaceId is required\");\n let workspaceTools: Promise<OpenGeniWorkspaceTools> | undefined;\n const load = (): Promise<OpenGeniWorkspaceTools> =>\n (workspaceTools ??= import(\"./tools\").then(({ OpenGeniToolsClient }) =>\n new OpenGeniToolsClient(transport).forWorkspace(normalizedWorkspaceId),\n ));\n const node = (path: readonly string[]): OpenGeniWorkspaceTools =>\n new Proxy(\n (async (...args: unknown[]) => {\n let target: unknown = await load();\n for (const segment of path) {\n target = (target as Record<string, unknown>)[segment];\n }\n if (typeof target !== \"function\") throw new TypeError(\"Tool path is not callable\");\n return await Reflect.apply(target, undefined, args);\n }) as unknown as OpenGeniWorkspaceTools,\n {\n get: (_target, property) => {\n if (property === \"then\") return undefined;\n if (typeof property !== \"string\") return undefined;\n return node([...path, property]);\n },\n },\n );\n return new Proxy(Object.create(null) as OpenGeniWorkspaceTools, {\n get: (_target, property) => {\n if (property === \"$targetProtocol\")\n return transport.toolGatewayMode === \"catalog\" ? undefined : 1;\n if (property === \"then\") return undefined;\n if (typeof property !== \"string\") return undefined;\n return node([property]);\n },\n });\n },\n };\n}\n\nexport class OpenGeniClient {\n get toolGatewayMode(): \"target\" | \"catalog\" {\n return this.options.toolGatewayMode ?? \"target\";\n }\n protected externalActorHeader?: string;\n protected serviceInitiatorHeader?: string | undefined;\n protected serviceContextHeader?: string | undefined;\n private readonly baseUrl: string;\n protected readonly options: OpenGeniClientOptions;\n private readonly fetchImpl: FetchLike;\n private readonly sessionCommandTimeoutMs: number;\n private readonly apiContractStrict: boolean;\n private readonly active = new Map<string, SingleFlightReadEntry>();\n private readonly generations = new Map<string, number>();\n private readonly queued = new Map<string, SingleFlightReadEntry>();\n /** Resource-oriented Browser/Computer facade over this exact authenticated client. */\n readonly interaction: OpenGeniInteractionClient;\n /** Dynamic typed tool facade backed by the canonical workspace gateway. */\n readonly tools: OpenGeniToolsFacade;\n\n constructor(options: OpenGeniClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\");\n this.options = options;\n // Bind lazily so variable sets that polyfill fetch after module load work.\n this.fetchImpl = withDeprecationNotices<FetchResponse>(\n options.fetch ?? ((input, init) => fetch(input, init)),\n options.onDeprecation,\n );\n const sessionCommandTimeoutMs = options.sessionCommandTimeoutMs ?? 15_000;\n if (!Number.isFinite(sessionCommandTimeoutMs) || sessionCommandTimeoutMs <= 0) {\n throw new RangeError(\"sessionCommandTimeoutMs must be a finite positive number\");\n }\n this.sessionCommandTimeoutMs = sessionCommandTimeoutMs;\n this.apiContractStrict = defaultApiContractMode(options) === \"strict\";\n this.interaction = new OpenGeniInteractionClient(this);\n this.tools = createLazyToolsFacade(this);\n }\n\n // --- Session lifecycle ---------------------------------------------------\n\n /** Make one finalization attempt for a recording; callers may retry retained audio. */\n async transcribeAudio(\n workspaceId: string,\n input: TranscribeAudioInput,\n ): Promise<TranscribeAudioResponse> {\n const correlationId = crypto.randomUUID();\n const form = new FormData();\n const filename = filenameForAudioMimeType(input.mimeType);\n const audio =\n input.audio instanceof File\n ? input.audio\n : input.audio instanceof Uint8Array\n ? new File([Uint8Array.from(input.audio)], filename, {\n type: input.mimeType,\n })\n : new File([input.audio], filename, {\n type: input.mimeType || input.audio.type,\n });\n form.append(\"audio\", audio, filename);\n form.append(\"mimeType\", input.mimeType);\n if (input.durationSeconds !== undefined) {\n form.append(\"durationSeconds\", String(input.durationSeconds));\n }\n let response: FetchResponse;\n try {\n response = await this.fetchImpl(this.url(`/v1/workspaces/${workspaceId}/transcriptions`), {\n method: \"POST\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/json\",\n },\n body: form,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n } catch (error) {\n if (input.signal?.aborted) throw error;\n throw mutationTransportError(correlationId);\n }\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok)\n throw await apiErrorFromResponse(response, {\n method: \"POST\",\n correlationId,\n });\n await assertJsonResponse(response, { method: \"POST\", correlationId });\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n throw new OpenGeniApiError(response.status, \"Invalid transcription response.\", {\n code: \"invalid_response\",\n mutation: true,\n correlationId,\n });\n }\n if (!isTranscribeAudioResponse(body)) {\n throw new OpenGeniApiError(response.status, \"Invalid transcription response.\", {\n code: \"invalid_response\",\n mutation: true,\n correlationId,\n });\n }\n return body;\n }\n\n async createTranscriptionRecording(\n workspaceId: string,\n input: CreateTranscriptionRecordingInput,\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/transcription-recordings`,\n { recordingId: input.recordingId, mimeType: input.mimeType },\n {},\n input.signal ? { signal: input.signal } : {},\n ),\n );\n }\n\n async getTranscriptionRecording(\n workspaceId: string,\n recordingId: string,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}`,\n undefined,\n {},\n options.signal ? { signal: options.signal } : {},\n ),\n );\n }\n\n async listTranscriptionRecordings(\n workspaceId: string,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<TranscriptionRecordingListResponse> {\n const body = await this.requestJson<unknown>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/transcription-recordings`,\n undefined,\n {},\n options.signal ? { signal: options.signal } : {},\n );\n if (!isTranscriptionRecordingListResponse(body)) {\n throw new OpenGeniApiError(502, \"Invalid transcription recording list response.\", {\n code: \"invalid_response\",\n });\n }\n return body;\n }\n\n async uploadTranscriptionRecordingChunk(\n workspaceId: string,\n recordingId: string,\n chunkNumber: number,\n input: UploadTranscriptionRecordingChunkInput,\n ): Promise<UploadTranscriptionRecordingChunkResponse> {\n const correlationId = crypto.randomUUID();\n let response: FetchResponse;\n try {\n response = await this.fetchImpl(\n this.url(\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}/chunks/${chunkNumber}`,\n ),\n {\n method: \"PUT\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/json\",\n \"Content-Type\": input.mimeType,\n \"x-opengeni-chunk-sha256\": input.sha256,\n \"x-opengeni-chunk-start-milliseconds\": String(input.startMilliseconds),\n \"x-opengeni-chunk-duration-milliseconds\": String(input.durationMilliseconds),\n },\n body: input.audio instanceof Uint8Array ? Uint8Array.from(input.audio) : input.audio,\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n } catch (error) {\n if (input.signal?.aborted) throw error;\n throw mutationTransportError(correlationId);\n }\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok)\n throw await apiErrorFromResponse(response, {\n method: \"PUT\",\n correlationId,\n });\n await assertJsonResponse(response, { method: \"PUT\", correlationId });\n const body = await response.json().catch(() => null);\n if (!isUploadTranscriptionRecordingChunkResponse(body)) {\n throw new OpenGeniApiError(response.status, \"Invalid transcription chunk response.\", {\n code: \"invalid_response\",\n mutation: true,\n correlationId,\n });\n }\n return body;\n }\n\n async finalizeTranscriptionRecording(\n workspaceId: string,\n recordingId: string,\n input: FinalizeTranscriptionRecordingInput,\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}/finalize`,\n {\n chunkCount: input.chunkCount,\n totalBytes: input.totalBytes,\n totalDurationMilliseconds: input.totalDurationMilliseconds,\n },\n {},\n input.signal ? { signal: input.signal } : {},\n ),\n );\n }\n\n async processNextTranscriptionRecordingSegment(\n workspaceId: string,\n recordingId: string,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}/process-next`,\n {},\n {},\n options.signal ? { signal: options.signal } : {},\n ),\n );\n }\n\n async discardTranscriptionRecording(\n workspaceId: string,\n recordingId: string,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}`,\n undefined,\n {},\n options.signal ? { signal: options.signal } : {},\n ),\n );\n }\n\n async createSession(\n workspaceId: string,\n request: CreateSessionRequest,\n ): Promise<CreateSessionResponse> {\n const limited = request.usageLimitMicros !== undefined && request.usageLimitMicros !== null;\n // A limited create spells out the default start mode. Servers that\n // predate usage limits accept only `realtime` there, so they reject the\n // whole request before creating or starting anything, rather than\n // dropping the unknown limit and starting uncapped work.\n const body: CreateSessionRequest =\n limited && request.startMode === undefined ? { ...request, startMode: \"standard\" } : request;\n let created: CreateSessionResponse;\n try {\n created = await this.requestJson<CreateSessionResponse>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/sessions`,\n body,\n );\n } catch (error) {\n if (\n limited &&\n body.startMode === \"standard\" &&\n error instanceof OpenGeniApiError &&\n rejectsStartModeField(error)\n ) {\n throw new OpenGeniSessionUsageLimitUnsupportedError(\n \"This server does not support task usage limits, so the session was not created. Create it without a usage limit, or upgrade the server.\",\n { sessionId: null, cause: error },\n );\n }\n throw error;\n }\n assertSessionUsageLimitEcho(request.usageLimitMicros, created);\n return created;\n }\n\n /**\n * The task's usage limit and recorded API-equivalent model usage. A child\n * session returns its root's state with `inherited: true`. Servers that\n * predate usage limits return 404.\n */\n async getSessionUsageLimit(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionUsageLimit> {\n return await this.requestJson<SessionUsageLimit>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}/usage-limit`,\n undefined,\n {},\n options,\n );\n }\n\n /**\n * Set (`limitMicros`), lower, raise or clear (`limitMicros: null`) a root\n * task's usage limit with compare-and-set on `expectedVersion`. Person or\n * trusted host only; agents are refused. Changing the limit never resumes\n * paused work. Returns the committed state; 409 on a stale version.\n */\n async setSessionUsageLimit(\n workspaceId: string,\n sessionId: string,\n request: SetSessionUsageLimitRequest,\n ): Promise<SessionUsageLimit> {\n const committed = await this.requestJson<SessionUsageLimit>(\n \"PUT\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}/usage-limit`,\n request,\n );\n if (committed.limitMicros !== request.limitMicros) {\n throw sessionUsageLimitNotConfirmed(sessionId);\n }\n return committed;\n }\n\n async getNewSessionDraft(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<NewSessionDraft> {\n return await this.requestJson<NewSessionDraft>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/new-session-draft`,\n undefined,\n {},\n options,\n );\n }\n\n async saveNewSessionDraft(\n workspaceId: string,\n request: SaveNewSessionDraftRequest,\n ): Promise<NewSessionDraft> {\n return await this.requestJson<NewSessionDraft>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/new-session-draft`,\n request,\n );\n }\n\n /** The workspace's HTTP credential provider, or null when none is configured. */\n async getWorkspaceCredentialProvider(\n workspaceId: string,\n ): Promise<GetWorkspaceCredentialProviderResponse> {\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/credential-provider`);\n }\n\n /**\n * Create or update the workspace credential provider. The signing secret is\n * returned only when the provider is first created; store it then.\n */\n async putWorkspaceCredentialProvider(\n workspaceId: string,\n request: PutWorkspaceCredentialProviderRequest,\n ): Promise<PutWorkspaceCredentialProviderResponse> {\n return this.requestJson(\"PUT\", `/v1/workspaces/${workspaceId}/credential-provider`, request);\n }\n\n async deleteWorkspaceCredentialProvider(workspaceId: string): Promise<void> {\n await this.requestVoid(\"DELETE\", `/v1/workspaces/${workspaceId}/credential-provider`);\n }\n\n async listWorkspaceWebhooks(workspaceId: string): Promise<ListWorkspaceWebhooksResponse> {\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/webhooks`);\n }\n\n /** Create a webhook. The signing secret is returned only in this response. */\n async createWorkspaceWebhook(\n workspaceId: string,\n request: CreateWorkspaceWebhookRequest,\n ): Promise<CreateWorkspaceWebhookResponse> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/webhooks`, request);\n }\n\n async updateWorkspaceWebhook(\n workspaceId: string,\n webhookId: string,\n request: UpdateWorkspaceWebhookRequest,\n ): Promise<WorkspaceWebhook> {\n return this.requestJson(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/webhooks/${webhookId}`,\n request,\n );\n }\n\n async deleteWorkspaceWebhook(workspaceId: string, webhookId: string): Promise<void> {\n await this.requestVoid(\"DELETE\", `/v1/workspaces/${workspaceId}/webhooks/${webhookId}`);\n }\n\n async listWorkspaceWebhookDeliveries(\n workspaceId: string,\n webhookId: string,\n options: { limit?: number } = {},\n ): Promise<ListWorkspaceWebhookDeliveriesResponse> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/webhooks/${webhookId}/deliveries`,\n undefined,\n options.limit !== undefined ? { limit: String(options.limit) } : {},\n );\n }\n\n /** Queue a delivered or failed delivery again with a fresh attempt budget. */\n async redeliverWorkspaceWebhookDelivery(\n workspaceId: string,\n webhookId: string,\n deliveryId: string,\n ): Promise<WorkspaceWebhookDelivery> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/webhooks/${webhookId}/deliveries/${deliveryId}/redeliver`,\n );\n }\n\n /** Images this deployment lets a workspace choose as its default sandbox image. */\n async listWorkspaceSandboxImages(workspaceId: string): Promise<WorkspaceSandboxImages> {\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/sandbox-images`);\n }\n\n /** Submit general feedback or a session/turn rating. Retain the key when retrying. */\n async createFeedback(\n workspaceId: string,\n request: CreateFeedbackRequest,\n ): Promise<FeedbackSubmissionResponse> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/feedback`, request);\n }\n\n /** Only this principal's submissions. No session filter means general feedback only. */\n async listOwnFeedback(\n workspaceId: string,\n options: {\n sessionId?: string;\n limit?: number;\n includeTurns?: boolean;\n } = {},\n ): Promise<{ feedback: Feedback[] }> {\n const query = new URLSearchParams();\n if (options.sessionId) query.set(\"sessionId\", options.sessionId);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.includeTurns !== undefined) query.set(\"includeTurns\", String(options.includeTurns));\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/feedback${query.size ? `?${query}` : \"\"}`,\n );\n }\n\n async getSession(\n workspaceId: string,\n sessionId: string,\n options: GetSessionOptions = {},\n ): Promise<Session> {\n const path = sessionPath(workspaceId, sessionId);\n return await this.sharedRead(\n path,\n (signal) => this.requestJson<Session>(\"GET\", path, undefined, {}, { signal }),\n options,\n );\n }\n\n async getToolActionReview(\n workspaceId: string,\n sessionId: string,\n approvalId: string,\n ): Promise<ToolActionReview> {\n return await this.requestJson(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/tool-reviews/${encodeURIComponent(approvalId)}`,\n );\n }\n\n async getToolReviewDetails(\n workspaceId: string,\n sessionId: string,\n approvalId: string,\n options: { actionDigest: string; path?: string; offset?: number },\n ): Promise<ToolReviewDetailsPage> {\n const query = new URLSearchParams({\n actionDigest: options.actionDigest,\n path: options.path ?? \"\",\n offset: String(options.offset ?? 0),\n });\n return await this.requestJson(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/tool-reviews/${encodeURIComponent(approvalId)}/details?${query}`,\n );\n }\n\n /** Exact model-visible prefix captured from the latest provider request. */\n async getSessionModelContext(\n workspaceId: string,\n sessionId: string,\n ): Promise<SessionModelContextResponse> {\n return await this.requestJson<SessionModelContextResponse>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/model-context`,\n );\n }\n\n async updateSession(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\"PATCH\", sessionPath(workspaceId, sessionId), request);\n }\n\n /** Whether this exact authenticated principal may atomically create a private session. */\n async getSessionTenancyCreateCapabilities(\n workspaceId: string,\n ): Promise<SessionTenancyCreateCapabilities> {\n return await this.requestJson<SessionTenancyCreateCapabilities>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/session-tenancy/capabilities`,\n );\n }\n\n /**\n * Change an owned session between private and workspace visibility. Leftover\n * records never block it; work in progress needs `stopActiveWork`.\n */\n async updateSessionVisibility(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionVisibilityRequest,\n ): Promise<UpdateSessionVisibilityResponse> {\n return await this.requestJson<UpdateSessionVisibilityResponse>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/visibility`,\n request,\n );\n }\n\n /** Owner-only preview: what changing the audience would stop and what would still refuse it. */\n async previewSessionVisibilityChange(\n workspaceId: string,\n sessionId: string,\n visibility: SessionVisibility,\n ): Promise<SessionVisibilityChangePreview> {\n return await this.requestJson<SessionVisibilityChangePreview>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/visibility/preview?visibility=${encodeURIComponent(visibility)}`,\n );\n }\n\n /** Create an independent same-workspace fork with explicit destination visibility. */\n async forkSession(\n workspaceId: string,\n sessionId: string,\n request: ForkSessionRequest,\n ): Promise<ForkSessionResponse> {\n return await this.requestJson<ForkSessionResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/forks`,\n request,\n );\n }\n\n /** Replace the durable tool policy or explicitly adopt workspace defaults. */\n async updateSessionToolPolicy(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionToolPolicyRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/tool-policy`,\n request,\n );\n }\n\n /**\n * Replace the session's agent configuration (capabilities, identity,\n * instructions alias, renderer). Omitted fields keep their current values.\n * Uses the tool-policy version (409 when stale) and applies from the next\n * turn. A legacy session converts from its current effective state.\n */\n async updateSessionAgent(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionAgentRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/agent`,\n request,\n );\n }\n\n /**\n * Replace every Skill the session carries itself (an empty list removes\n * them). Uses the tool-policy version (409 when stale) and applies from the\n * next turn; a running turn keeps the Skills it started with.\n */\n async updateSessionSkills(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionSkillsRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/skills`,\n request,\n );\n }\n\n /**\n * Replace one attached MCP server's approval policy. The change is captured\n * by the next claimed attempt; already-claimed work keeps its immutable\n * policy snapshot.\n */\n async updateSessionMcpApprovalPolicy(\n workspaceId: string,\n sessionId: string,\n serverId: string,\n request: UpdateSessionMcpApprovalPolicyRequest,\n ): Promise<UpdateSessionMcpApprovalPolicyResponse> {\n return await this.requestJson<UpdateSessionMcpApprovalPolicyResponse>(\n \"PATCH\",\n `${sessionPath(workspaceId, sessionId)}/mcp-servers/${encodeURIComponent(serverId)}/approval-policy`,\n request,\n );\n }\n\n /** Search durable visible user/assistant text, including unloaded history.\n * Pages may be empty with hasMore=true. Never fall back to title search on\n * older servers. Use listEventPage before/after the returned sequence for context.\n */\n async searchSessionMessages(\n workspaceId: string,\n request: SessionMessageSearchRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionMessageSearchResponse> {\n return this.requestJson<SessionMessageSearchResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/session-message-search`,\n undefined,\n {\n query: request.query,\n ...(request.sessionId !== undefined ? { sessionId: request.sessionId } : {}),\n ...(request.groupBy !== undefined ? { groupBy: request.groupBy } : {}),\n ...(request.archiveStatus !== undefined ? { archiveStatus: request.archiveStatus } : {}),\n ...(request.limit !== undefined ? { limit: String(request.limit) } : {}),\n ...(request.cursor !== undefined ? { cursor: request.cursor } : {}),\n },\n options,\n );\n }\n\n /** Read one selected search result's complete visible text when <=12,000\n * UTF-16 units. Stale, duplicate or non-message references fail with 404.\n * The response never includes audit payload fields such as modelContext.\n */\n async getSessionMessagePreview(\n workspaceId: string,\n sessionId: string,\n reference: SessionMessagePreviewReference,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionMessagePreview> {\n return this.requestJson<SessionMessagePreview>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}/events/${encodeURIComponent(reference.eventId)}/message-preview`,\n undefined,\n { sequence: String(reference.sequence) },\n options,\n );\n }\n\n async listSessions(\n workspaceId: string,\n options: {\n originSiteId?: string;\n limit?: number;\n parentSessionId?: string | null;\n search?: string;\n /** Only sessions carrying this exact opaque end-user label. */\n scopeSubjectId?: SessionScopeSubjectId;\n } = {},\n ): Promise<Session[]> {\n // Search and Site filtering use the pin-aware page endpoint. An older API silently\n // ignores unknown query parameters on the historical array endpoint, which\n // would turn a search into a plausible-looking unfiltered result. Route\n // these calls through listSessionPage so its rolling-version shape check can\n // fail explicitly on an older server; retain the array endpoint for every\n // pre-existing call shape.\n if (options.search?.trim() || options.originSiteId) {\n const page = await this.listSessionPage(workspaceId, options);\n return [...page.pinned, ...page.sessions];\n }\n return await this.requestJson<Session[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions`,\n undefined,\n sessionListQuery(options),\n );\n }\n\n /** Running and stopping commands only; settled results remain in session history. */\n async listSessionBackgroundCommands(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionBackgroundCommandListResponse> {\n return await this.requestJson<SessionBackgroundCommandListResponse>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/background-commands`,\n undefined,\n {},\n options,\n );\n }\n\n /** @internal Console-only workspace projection; cancellation uses the ordinary session path. */\n async listWorkspaceBackgroundCommands(\n workspaceId: string,\n options: OpenGeniRequestOptions & { cursor?: string } = {},\n ): Promise<WorkspaceBackgroundCommandListResponse> {\n const response = await this.requestJson<WorkspaceBackgroundCommandListResponse>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/sessions`,\n undefined,\n { view: \"running_commands\", ...(options.cursor ? { cursor: options.cursor } : {}) },\n options,\n );\n // An older server ignores the view and returns ordinary sessions. Never\n // present that incompatible response as a plausible empty command list.\n if (!response || !Array.isArray(response.commands) || !(\"nextCursor\" in response))\n throw new Error(\"This server does not support the workspace running commands view.\");\n return response;\n }\n\n async cancelSessionBackgroundCommand(\n workspaceId: string,\n sessionId: string,\n commandId: string,\n ): Promise<CancelSessionBackgroundCommandResult> {\n return await this.requestJson<CancelSessionBackgroundCommandResult>(\n \"DELETE\",\n `${sessionPath(workspaceId, sessionId)}/background-commands/${commandId}`,\n );\n }\n\n /** Pin-aware ordinary-session page with a stable keyset cursor. */\n async listSessionPage(\n workspaceId: string,\n options: SessionListPageOptions = {},\n ): Promise<SessionListResponse> {\n const response = await this.requestSessionPage(\n `/v1/workspaces/${workspaceId}/sessions`,\n options,\n );\n if (\"projection\" in response) throw unsupportedSessionPage(\"full session details\");\n return response;\n }\n\n /** Compact rail records; safely projects full pages from older APIs. */\n async listSessionSummaryPage(\n workspaceId: string,\n options: SessionListPageOptions = {},\n ): Promise<SessionListEntryResponse> {\n const response = await this.requestSessionPage(\n `/v1/workspaces/${workspaceId}/sessions`,\n options,\n true,\n );\n if (\"projection\" in response) return response;\n const { sessionListEntry } = await import(\"./session-list-entries\");\n return {\n ...response,\n projection: \"summary\",\n pinned: response.pinned.map(sessionListEntry),\n sessions: response.sessions.map(sessionListEntry),\n };\n }\n\n private async requestSessionPage(\n path: string,\n options: SessionListPageOptions,\n summary = false,\n ): Promise<SessionListResponse | SessionListEntryResponse> {\n const search = options.search?.trim();\n let result: SessionListResponse | SessionListEntryResponse | Session[];\n try {\n const query: Record<string, string> = { view: \"page\", ...sessionListQuery(options) };\n if (summary) query.projection = \"summary\";\n if (options.cursor !== undefined) query.cursor = options.cursor;\n if (search) query.search = search;\n if (options.channelId !== undefined) query.channelId = options.channelId ?? \"null\";\n if (options.createdBy) {\n query.createdByKind = options.createdBy.kind;\n query.createdBySubjectId = options.createdBy.subjectId;\n }\n for (const key of SESSION_PAGE_STRING_QUERY_KEYS) {\n const value = options[key];\n if (value) query[key] = value;\n }\n if (options.pinsOnly) query.pinsOnly = \"true\";\n if (options.includeTotals) query.includeTotals = \"true\";\n if (options.needsYouOnly) query.needsYouOnly = \"true\";\n if (options.contentArchivedOnly) query.contentArchivedOnly = \"true\";\n if (options.mineOnly) query.mineOnly = \"true\";\n if (options.includePinned === false) query.includePinned = \"false\";\n if (options.archivedOnly) query.archivedOnly = \"true\";\n result = await this.requestJson<SessionListResponse | SessionListEntryResponse | Session[]>(\n \"GET\",\n path,\n undefined,\n query,\n { signal: options.signal },\n );\n } catch (error) {\n if (error instanceof OpenGeniApiError && error.status === 410) {\n throw new OpenGeniSessionListCursorError(error.status, error.body, {\n ...(error.code ? { code: error.code } : {}),\n retryable: error.retryable,\n ...(error.correlationId ? { correlationId: error.correlationId } : {}),\n outcomeUnknown: error.outcomeUnknown,\n displayMessage: \"The session list changed — refresh and try again.\",\n });\n }\n throw error;\n }\n const response = result;\n const legacy = Array.isArray(response);\n const filtered = hasSessionPageFilters(options);\n if (\n (options.sortBy !== undefined && (legacy || response.sortBy !== options.sortBy)) ||\n (options.archiveStatus !== undefined &&\n (legacy || response.archiveStatus !== options.archiveStatus))\n ) {\n throw unsupportedSessionPage(\"the requested session sorting/archive filter\");\n }\n if (legacy) {\n // Rolling/same-major compatibility: an older API ignores `view=page` and\n // returns the historical array. That is an honest one-page projection;\n // never pretend it honored a cursor supplied directly by a caller.\n // Older APIs ignore unknown query parameters. Treating their unfiltered\n // array as a successful search would be worse than an explicit rolling-\n // upgrade error (and client-side filtering cannot recover matches beyond\n // the old endpoint's bounded first page).\n const unsupported = options.includeTotals\n ? \"complete session totals\"\n : options.cursor\n ? \"stable session-page cursors\"\n : search\n ? \"session search\"\n : options.pinsOnly\n ? \"pins-only session lists\"\n : options.archivedOnly\n ? \"archived session lists\"\n : filtered\n ? \"filtered session lists\"\n : null;\n if (unsupported) throw unsupportedSessionPage(unsupported);\n return { pinned: [], sessions: response, nextCursor: null };\n }\n if (options.includeTotals && response.totals === undefined)\n throw unsupportedSessionPage(\"complete session totals\");\n if (options.needsYouOnly && response.needsYouOnly !== true)\n throw unsupportedSessionPage(\"attention session filtering\");\n if (options.contentArchivedOnly && response.contentArchivedOnly !== true)\n throw unsupportedSessionPage(\"read-only session filtering\");\n if (options.mineOnly && response.mineOnly !== true)\n throw unsupportedSessionPage(\"your-sessions filtering\");\n if (filtered && response.filtersApplied !== true) {\n throw unsupportedSessionPage(\"filtered session lists\");\n }\n if (\n options.originSiteId &&\n (!response.originSiteId ||\n (options.originSiteId !== \"current\" && response.originSiteId !== options.originSiteId))\n ) {\n throw unsupportedSessionPage(\"Site-filtered session lists\");\n }\n if (\n options.siteAccessId &&\n (!response.siteAccessId ||\n (options.siteAccessId !== \"current\" && options.siteAccessId !== response.siteAccessId))\n )\n throw unsupportedSessionPage(\"Site access-filtered session lists\");\n return response;\n }\n\n /** Console/owner-authorized agent only. Never available through the Site frame bridge. */\n async listSiteSessionAccess(\n workspaceId: string,\n siteId: string,\n ): Promise<{ sessionIds: string[] }> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(siteId)}/session-access`,\n );\n }\n\n async setSiteSessionAccess(\n workspaceId: string,\n siteId: string,\n sessionId: string,\n allowed: boolean,\n ): Promise<{ siteId: string; sessionId: string; allowed: boolean }> {\n return this.requestJson(\n allowed ? \"PUT\" : \"DELETE\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(siteId)}/session-access/${encodeURIComponent(sessionId)}`,\n );\n }\n\n /** Compact, bounded workspace agent hierarchy page. */\n async listAgentTopology(\n workspaceId: string,\n options: {\n limit?: number;\n parentSessionId?: string | null;\n rootSessionId?: string;\n cursor?: string;\n query?: string;\n /** @deprecated use query. */\n search?: string;\n statuses?: SessionStatus[];\n activeOnly?: boolean;\n recentHours?: number;\n subject?: {\n namespace: string;\n type: WorkClaimSubjectType;\n canonicalKey: string;\n };\n claimLimit?: number;\n } = {},\n ): Promise<AgentTopologyPageResponse> {\n const query = options.query?.trim() || options.search?.trim();\n if (query && options.subject) {\n throw new TypeError(\"listAgentTopology query cannot be combined with an exact subject\");\n }\n const params = sessionListQuery(options);\n if (options.rootSessionId) params.rootSessionId = options.rootSessionId;\n if (options.cursor) params.cursor = options.cursor;\n if (query) params.query = query;\n if (options.statuses?.length) params.statuses = options.statuses.join(\",\");\n if (options.activeOnly !== undefined) params.activeOnly = options.activeOnly ? \"true\" : \"false\";\n if (options.recentHours !== undefined) params.recentHours = String(options.recentHours);\n if (options.subject) {\n params.subjectNamespace = options.subject.namespace;\n params.subjectType = options.subject.type;\n params.subjectKey = options.subject.canonicalKey;\n }\n if (options.claimLimit !== undefined) params.claimLimit = String(options.claimLimit);\n return await this.requestJson<AgentTopologyPageResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/agent-topology`,\n undefined,\n params,\n );\n }\n\n /** Set this authenticated member's personal workspace pin for a session. */\n async updateSessionPin(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionPinRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/pin`,\n request,\n );\n }\n\n /** Set this authenticated member's explicit read/actively-working state. */\n async updateSessionAttention(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionAttentionRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/attention`,\n request,\n );\n }\n\n /** Archive or restore this authenticated member's root chat. */\n async updateSessionArchive(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionArchiveRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/archive`,\n request,\n );\n }\n\n /**\n * Keep a session out of the idle-session archive (or allow archiving again).\n * Fails with 409 SESSION_ARCHIVED_READ_ONLY once the session is archived.\n */\n async updateSessionRetention(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionRetentionRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/retention`,\n request,\n );\n }\n\n /** Permanently delete one quiescent root session and its full descendant tree. */\n async deleteSession(\n workspaceId: string,\n sessionId: string,\n ): Promise<{ deletedSessionCount: number }> {\n return await this.requestJson<{ deletedSessionCount: number }>(\n \"DELETE\",\n sessionPath(workspaceId, sessionId),\n );\n }\n\n async getSessionLineage(\n workspaceId: string,\n sessionId: string,\n options: GetSessionLineageOptions = {},\n ): Promise<SessionLineageResponse> {\n const path = `${sessionPath(workspaceId, sessionId)}/lineage`;\n return await this.sharedRead(\n path,\n (signal) => this.requestJson<SessionLineageResponse>(\"GET\", path, undefined, {}, { signal }),\n options,\n );\n }\n\n private sharedRead<T>(\n key: string,\n read: (signal: AbortSignal) => Promise<T>,\n options: GetSessionOptions = {},\n ): Promise<T> {\n if (options.signal?.aborted) {\n return Promise.reject(\n options.signal.reason ?? new DOMException(\"Request aborted\", \"AbortError\"),\n );\n }\n const existing = this.active.get(key);\n if (existing) {\n if (!options.fresh) {\n this.observeRead(existing, options.onRequestStart);\n return this.consumeSharedRead(key, existing, options.signal);\n }\n const requiredGeneration = existing.generation + 1;\n const queued = this.queued.get(key);\n if (queued && queued.generation >= requiredGeneration) {\n this.observeRead(queued, options.onRequestStart);\n return this.consumeSharedRead(key, queued, options.signal);\n }\n const predecessor = queued?.promise ?? existing.promise;\n return this.queueRead(key, predecessor, requiredGeneration, read, options);\n }\n // The active entry clears in its finally before reactions on its public\n // promise run. During that settlement gap a successor may already be\n // queued but not yet launched; every caller must join that exact successor\n // instead of bypassing it with a competing GET for the same generation.\n const queued = this.queued.get(key);\n if (queued && (!options.fresh || !queued.started)) {\n this.observeRead(queued, options.onRequestStart);\n return this.consumeSharedRead(key, queued, options.signal);\n }\n if (queued) {\n return this.queueRead(key, queued.promise, queued.generation + 1, read, options);\n }\n const generation = (this.generations.get(key) ?? 0) + 1;\n const entry = createSingleFlightReadEntry(generation, options.onRequestStart);\n const consumed = this.consumeSharedRead<T>(key, entry, options.signal);\n this.launchRead(key, entry, read);\n return consumed;\n }\n\n private queueRead<T>(\n key: string,\n predecessor: Promise<unknown>,\n generation: number,\n read: (signal: AbortSignal) => Promise<T>,\n options: GetSessionOptions,\n ): Promise<T> {\n const entry = createSingleFlightReadEntry(generation, options.onRequestStart);\n const consumed = this.consumeSharedRead<T>(key, entry, options.signal);\n this.queued.set(key, entry);\n const launch = () => this.launchRead(key, entry, read);\n void predecessor.then(launch, launch);\n const clear = () => {\n if (this.queued.get(key) !== entry) return;\n this.queued.delete(key);\n if (!this.active.has(key)) this.generations.delete(key);\n };\n void entry.promise.then(clear, clear);\n return consumed;\n }\n\n private launchRead<T>(\n key: string,\n entry: SingleFlightReadEntry,\n read: (signal: AbortSignal) => Promise<T>,\n ): void {\n if (entry.controller.signal.aborted) return;\n entry.started = true;\n this.generations.set(key, entry.generation);\n this.active.set(key, entry);\n try {\n entry.stamp = this.options.beginSharedRead?.();\n } catch {\n // Causal metadata cannot cancel or replace the selected network GET.\n }\n for (const listener of entry.listeners) {\n try {\n listener(entry.stamp);\n } catch {\n // Read metadata observers cannot cancel or replace the selected GET.\n }\n }\n entry.listeners.clear();\n const settle = () => {\n if (this.active.get(key) !== entry) return;\n this.active.delete(key);\n if (!this.queued.has(key)) this.generations.delete(key);\n };\n let request: Promise<T>;\n try {\n request = read(entry.controller.signal);\n } catch (error) {\n settle();\n entry.reject(error);\n return;\n }\n void request.then(\n (value) => {\n settle();\n entry.resolve(value);\n },\n (error: unknown) => {\n settle();\n entry.reject(error);\n },\n );\n }\n\n private consumeSharedRead<T>(\n key: string,\n entry: SingleFlightReadEntry,\n signal: AbortSignal | undefined,\n ): Promise<T> {\n entry.consumers += 1;\n let released = false;\n const release = () => {\n if (released) return;\n released = true;\n entry.consumers -= 1;\n if (!signal?.aborted || entry.consumers > 0) return;\n const reason = signal.reason;\n entry.controller.abort(reason);\n if (this.active.get(key) === entry) this.active.delete(key);\n if (this.queued.get(key) === entry) this.queued.delete(key);\n if (!this.active.has(key) && !this.queued.has(key)) this.generations.delete(key);\n entry.reject(reason);\n };\n signal?.addEventListener(\"abort\", release, { once: true });\n const consumed = awaitWithAbort(entry.promise as Promise<T>, signal);\n return consumed.finally(() => {\n signal?.removeEventListener(\"abort\", release);\n release();\n });\n }\n\n private observeRead(\n entry: SingleFlightReadEntry,\n listener: ((readGeneration?: number) => void) | undefined,\n ): void {\n if (!listener) return;\n if (!entry.started) {\n entry.listeners.add(listener);\n return;\n }\n // Without a client-wide clock there is no launch-time identity to replay;\n // invoking the observer now would fabricate a causally later generation.\n if (entry.stamp === undefined) return;\n try {\n listener(entry.stamp);\n } catch {\n // Read metadata observers cannot cancel or replace the selected GET.\n }\n }\n\n /** Negotiate one server-mediated connected-Codex GPT-Live V3 WebRTC call. */\n async negotiateCodexRealtimeWebrtc(\n workspaceId: string,\n sessionId: string,\n request: CodexRealtimeWebrtcRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<CodexRealtimeWebrtcResponse> {\n return await this.requestJson<CodexRealtimeWebrtcResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/realtime/webrtc`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /**\n * Open (or rotate) the provider WebSocket of an active realtime mode. The\n * response carries a short-lived client secret and the provider session.\n */\n async negotiateRealtimeWebsocket(\n workspaceId: string,\n sessionId: string,\n request: SessionRealtimeWebsocketRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<SessionRealtimeWebsocketResponse> {\n return await this.requestJson<SessionRealtimeWebsocketResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/realtime/websocket`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /** @deprecated Use negotiateRealtimeWebsocket; this alias route is served by the same handler. */\n async negotiateGatewayRealtime(\n workspaceId: string,\n sessionId: string,\n request: GatewayRealtimeConnectRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<GatewayRealtimeConnectResponse> {\n return await this.requestJson<GatewayRealtimeConnectResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/realtime/gateway`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /** @deprecated Use negotiateRealtimeWebsocket; this alias route is served by the same handler. */\n async negotiateXaiSubscriptionRealtime(\n workspaceId: string,\n sessionId: string,\n request: GatewayRealtimeConnectRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<GatewayRealtimeConnectResponse> {\n return await this.requestJson<GatewayRealtimeConnectResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/realtime/supergrok`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /** Promote a negotiated connection only after its browser data channel is ready. */\n async activateCodexRealtimeConnection(\n workspaceId: string,\n sessionId: string,\n realtimeId: string,\n connectionId: string,\n request: ActivateCodexRealtimeConnectionRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<SessionRealtimeMutationResponse> {\n return await this.requestJson<SessionRealtimeMutationResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/realtime/${realtimeId}/connections/${connectionId}/activate`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /** Atomically enter realtime mode for this ordinary session. */\n async beginSessionRealtime(\n workspaceId: string,\n sessionId: string,\n request: BeginSessionRealtimeRequest,\n ): Promise<SessionRealtimeMutationResponse> {\n return await this.requestJson<SessionRealtimeMutationResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/realtime`,\n request,\n );\n }\n\n /** Renew the exact authenticated browser owner's realtime lease. */\n async heartbeatSessionRealtime(\n workspaceId: string,\n sessionId: string,\n realtimeId: string,\n request: RenewSessionRealtimeRequest,\n ): Promise<SessionRealtimeMutationResponse> {\n return await this.requestJson<SessionRealtimeMutationResponse>(\n \"PATCH\",\n `${sessionPath(workspaceId, sessionId)}/realtime/${realtimeId}/heartbeat`,\n request,\n );\n }\n\n /** Persist finalized V3 events, acknowledge delivery, and replay pending outbound context. */\n async syncSessionRealtimeLedger(\n workspaceId: string,\n sessionId: string,\n realtimeId: string,\n request: SyncSessionRealtimeLedgerRequest,\n ): Promise<SyncSessionRealtimeLedgerResponse> {\n return await this.requestJson<SyncSessionRealtimeLedgerResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/realtime/${realtimeId}/sync`,\n request,\n );\n }\n\n /** End realtime mode and restore ordinary text workflow admission. */\n async endSessionRealtime(\n workspaceId: string,\n sessionId: string,\n realtimeId: string,\n request: EndSessionRealtimeRequest,\n ): Promise<SessionRealtimeMutationResponse> {\n return await this.requestJson<SessionRealtimeMutationResponse>(\n \"DELETE\",\n `${sessionPath(workspaceId, sessionId)}/realtime/${realtimeId}`,\n request,\n );\n }\n\n async listTurns(\n workspaceId: string,\n sessionId: string,\n options: {\n limit?: number;\n latestStarted?: boolean;\n signal?: AbortSignal | undefined;\n } = {},\n ): Promise<SessionTurn[]> {\n return await this.requestJson<SessionTurn[]>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/turns`,\n undefined,\n {\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n ...(options.latestStarted ? { latestStarted: \"1\" } : {}),\n },\n { signal: options.signal },\n );\n }\n\n /** Newest turn that durably emitted `turn.started`, or null before any admission. */\n async getLatestStartedTurn(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionTurn | null> {\n const turns = await this.listTurns(workspaceId, sessionId, {\n latestStarted: true,\n signal: options.signal,\n });\n return turns[0] ?? null;\n }\n\n // --- Bring-your-own-compute: Machines dashboard + metrics (M10) ------------\n\n /**\n * List the workspace's machines (the Machines dashboard). Each enrolled\n * selfhosted machine carries its derived state + latest metrics +\n * sharedSessionCount. Pass `sessionId` for an in-session view, which adds the\n * session's synthetic Modal group box + the active-sandbox pointer.\n */\n async listMachines(\n workspaceId: string,\n options: { sessionId?: string; signal?: AbortSignal } = {},\n ): Promise<MachinesResponse> {\n return await this.requestJson<MachinesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/machines`,\n undefined,\n {\n ...(options.sessionId !== undefined ? { sessionId: options.sessionId } : {}),\n },\n { signal: options.signal },\n );\n }\n\n /** Ask one authoritative Connected Machine runner to drain accepted work and\n * install the exact signed version promoted for its channel. Progress is read\n * from `listMachines`; completion requires the successor build identity. */\n async updateMachineAgent(\n workspaceId: string,\n enrollmentId: string,\n ): Promise<UpdateMachineAgentResponse> {\n return await this.requestJson<UpdateMachineAgentResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/update`,\n );\n }\n\n /** Turn screen control on for one connected machine, in place: the consent is\n * recorded and the live agent refreshes its own credentials. Safe to repeat. */\n async enableMachineScreenControl(\n workspaceId: string,\n enrollmentId: string,\n ): Promise<EnableMachineScreenControlResponse> {\n return await this.requestJson<EnableMachineScreenControlResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/screen-control`,\n {},\n );\n }\n\n /** Open one macOS Privacy & Security pane on a connected Mac, so the person\n * only has to flip the permission for Opengeni. */\n async openMachinePrivacySettings(\n workspaceId: string,\n enrollmentId: string,\n input: OpenMachinePrivacySettingsRequest,\n ): Promise<OpenMachinePrivacySettingsResponse> {\n return await this.requestJson<OpenMachinePrivacySettingsResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/privacy-settings`,\n input,\n );\n }\n\n /** List what changing who can use a Connected Machine (Workspace or Only me)\n * would affect, with the given chat choices applied. Reads only. */\n async previewMachineAudience(\n workspaceId: string,\n enrollmentId: string,\n input: MachineAudiencePreviewRequest,\n ): Promise<MachineAudiencePreview> {\n return await this.requestJson<MachineAudiencePreview>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/audience/preview`,\n input,\n );\n }\n\n /** Change who can use a Connected Machine in place, at the previewed\n * generation. The machine keeps its sandbox ID, credentials and connection.\n * A 409 means something changed or still needs a decision: preview again. */\n async changeMachineAudience(\n workspaceId: string,\n enrollmentId: string,\n input: ChangeMachineAudienceRequest,\n ): Promise<ChangeMachineAudienceResponse> {\n return await this.requestJson<ChangeMachineAudienceResponse>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/audience`,\n input,\n );\n }\n\n /** Revision-fenced update of a Connected Machine's optional command memory\n * policy. Null byte limits preserve unrestricted machine access. */\n async updateMachineOperationPolicy(\n workspaceId: string,\n enrollmentId: string,\n request: UpdateMachineOperationPolicyRequest,\n ): Promise<MachineOperationPolicy> {\n return await this.requestJson<MachineOperationPolicy>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/operation-policy`,\n request,\n );\n }\n\n /**\n * Read the downsampled (~1/min) metrics series for ONE machine over a time\n * window (default 1h). The samples are oldest-first (a left-to-right chart).\n */\n async machineMetricsSeries(\n workspaceId: string,\n enrollmentId: string,\n options: { window?: \"15m\" | \"1h\" | \"6h\" | \"24h\" } = {},\n ): Promise<MetricSample[]> {\n const response = await this.requestJson<MachineMetricsSeriesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/metrics/series`,\n undefined,\n { ...(options.window !== undefined ? { window: options.window } : {}) },\n );\n return response.samples;\n }\n\n /**\n * Remove one connected self-hosted machine enrollment. The control-plane\n * operation works while the agent is offline, revokes future reconnects,\n * retains history, and atomically detaches the sessions that point at it,\n * including ones with a queued, paused or recovering turn (a machine-home\n * session becomes `backend:none`). Only a live machine lease or pending lease\n * recovery remains a typed blocker. `idempotencyKey` is replay-safe.\n */\n async removeEnrollment(\n workspaceId: string,\n enrollmentId: string,\n request: RemoveEnrollmentRequest = {},\n ): Promise<RemoveEnrollmentResponse> {\n return await this.requestJson<RemoveEnrollmentResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/enrollments/${enrollmentId}/revoke`,\n request,\n );\n }\n\n // --- Self-hosted enrollment UX (design 11) --------------------------------\n\n /**\n * Resolve a pending device-enrollment flow by its user_code for the click-Grant\n * approve page (EnrollmentConsent). NO workspace in the path — the server\n * resolves the workspace from the (globally-unique-among-pending) code, then\n * authorizes the caller against it (enrollments:read). Rejects (404) when the\n * code is unknown/expired OR the caller lacks the grant — the two are\n * indistinguishable by design (no cross-workspace disclosure). Does not consume\n * the request.\n */\n async lookupDeviceEnrollment(userCode: string): Promise<DeviceEnrollmentLookupResponse> {\n return await this.requestJson<DeviceEnrollmentLookupResponse>(\n \"POST\",\n \"/v1/enrollments/device/lookup\",\n { userCode },\n );\n }\n\n /**\n * Approve a pending device-enrollment flow (the LOUD consent step). `allowScreenControl`\n * is the authoritative screen-control consent (whole-machine is mandatory/implicit).\n * Lands an enrollment + a selfhosted sandbox and unblocks the agent's poll.\n */\n async approveDeviceEnrollment(\n workspaceId: string,\n request: DeviceEnrollmentApproveRequest,\n ): Promise<DeviceEnrollmentApproveResponse> {\n return await this.requestJson<DeviceEnrollmentApproveResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/enrollments/device/approve`,\n {\n userCode: request.userCode,\n allowScreenControl: request.allowScreenControl ?? false,\n ...(request.scope ? { scope: request.scope } : {}),\n },\n );\n }\n\n /** Deny a pending device-enrollment flow (the explicit \"no\" at the approve page). */\n async denyDeviceEnrollment(\n workspaceId: string,\n request: { userCode: string },\n ): Promise<DeviceEnrollmentDenyResponse> {\n return await this.requestJson<DeviceEnrollmentDenyResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/enrollments/device/deny`,\n { userCode: request.userCode },\n );\n }\n\n /**\n * Mint a short-TTL headless enroll token (the `oget_` token) for the fleet /\n * non-interactive enroll path. The returned `token` is SECRET — surface it once\n * with a copy-now warning; it cannot be re-read. `allowScreenControl` bakes the\n * screen-control consent into the token. `scope: \"user\"` connects the signed-in\n * person's own machine; `\"workspace\"` (or omitted) shares it with the workspace.\n * Check the response's `scope` before showing a command: an older server ignores\n * the request and mints a workspace-shared token.\n */\n async mintEnrollToken(\n workspaceId: string,\n // The published `{ allowScreenControl }` shape stays in the union so the\n // signature only widens; MintEnrollTokenRequest is its superset.\n request: { allowScreenControl?: boolean } | MintEnrollTokenRequest = {},\n ): Promise<MintEnrollTokenResponse> {\n const scope = \"scope\" in request ? request.scope : undefined;\n return await this.requestJson<MintEnrollTokenResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/enrollments/token`,\n {\n allowScreenControl: request.allowScreenControl ?? false,\n ...(scope ? { scope } : {}),\n },\n );\n }\n\n /**\n * Swap a session's active sandbox (the user-authenticated equivalent of the\n * M7 `sandbox_swap` MCP tool). `target` is a `MachineView.sandboxId` from\n * `listMachines`, or \"session\"/\"default\" to swap back to the session's own\n * group box. Validation (ownership/liveness/epoch fence) is server-side; the\n * result echoes the resulting pointer (`swapped: false` + `reason` on a\n * rejected target or a lost epoch fence).\n */\n async swapActiveSandbox(\n workspaceId: string,\n sessionId: string,\n request: SwapActiveSandboxRequest,\n ): Promise<SwapActiveSandboxResponse> {\n return await this.requestJson<SwapActiveSandboxResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/active-sandbox`,\n request,\n );\n }\n\n // --- Scheduled tasks -------------------------------------------------------\n\n async listScheduledTasks(\n workspaceId: string,\n options: { limit?: number; offset?: number; sessionId?: string } = {},\n ): Promise<ScheduledTask[]> {\n return await this.requestJson<ScheduledTask[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks`,\n undefined,\n {\n ...(options.offset !== undefined ? { offset: String(options.offset) } : {}),\n ...(options.sessionId ? { sessionId: options.sessionId } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n );\n }\n\n async getScheduledTask(workspaceId: string, taskId: string): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}`,\n );\n }\n\n /**\n * Channels a person may choose as a scheduled task's fixed Slack destination:\n * active, non-shared channels the selected Opengeni bot already belongs to.\n */\n async listScheduledTaskSlackChannels(\n workspaceId: string,\n connectionId: string,\n cursor?: string,\n ): Promise<SlackReactionChannelListResponse> {\n const query = new URLSearchParams({ connectionId });\n if (cursor) query.set(\"cursor\", cursor);\n return await this.requestJson<SlackReactionChannelListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/scheduled-task-slack-channels?${query}`,\n );\n }\n\n // --- Events: replay, send, stream ----------------------------------------\n\n /**\n * Return the events from one bounded page. With no cursor, this uses the safe\n * semantic monitoring tail; pass explicit forensic options and a cursor for\n * retained audit replay. Use `listEventPage` when projection, coverage, or\n * resume-cursor facts are required.\n */\n async listEvents(\n workspaceId: string,\n sessionId: string,\n options: SessionEventListOptions = {},\n ): Promise<SessionEvent[]> {\n return (await this.listEventPage(workspaceId, sessionId, options)).events;\n }\n\n /** Bounded durable/monitoring page plus exact projection and cursor facts. */\n async listEventPage(\n workspaceId: string,\n sessionId: string,\n options: SessionEventCompactResultOptions,\n ): Promise<SessionEventCompactResult | null>;\n async listEventPage(\n workspaceId: string,\n sessionId: string,\n options?: SessionEventListOptions,\n ): Promise<SessionEventPage>;\n async listEventPage(\n workspaceId: string,\n sessionId: string,\n options: SessionEventListOptions | SessionEventCompactResultOptions = {},\n ): Promise<SessionEventPage | SessionEventCompactResult | null> {\n if (\n options.latest &&\n [\"includeTypes\", \"excludeTypes\", \"includeClasses\", \"excludeClasses\"].some((name) =>\n Object.prototype.hasOwnProperty.call(options, name),\n )\n ) {\n throw new TypeError(\"latest cannot be combined with event filters\");\n }\n if (options.resultMode === \"compact\" && !options.latest) {\n throw new TypeError(\"resultMode=compact requires latest\");\n }\n const listOptions: SessionEventListOptions | null =\n options.resultMode === \"compact\" ? null : options;\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`${sessionPath(workspaceId, sessionId)}/events`, {\n ...(listOptions?.after !== undefined ? { after: String(listOptions.after) } : {}),\n ...(listOptions?.before !== undefined ? { before: String(listOptions.before) } : {}),\n ...(listOptions?.limit !== undefined ? { limit: String(listOptions.limit) } : {}),\n ...(listOptions?.compact ? { compact: \"1\" } : {}),\n ...(options.mode ? { mode: options.mode } : {}),\n ...(listOptions?.direction ? { direction: listOptions.direction } : {}),\n ...(options.payloadMode ? { payloadMode: options.payloadMode } : {}),\n ...(options.resultMode ? { resultMode: options.resultMode } : {}),\n ...(listOptions?.includeTypes?.length\n ? { includeTypes: listOptions.includeTypes.join(\",\") }\n : {}),\n ...(listOptions?.excludeTypes?.length\n ? { excludeTypes: listOptions.excludeTypes.join(\",\") }\n : {}),\n ...(listOptions?.includeClasses?.length\n ? { includeClasses: listOptions.includeClasses.join(\",\") }\n : {}),\n ...(listOptions?.excludeClasses?.length\n ? { excludeClasses: listOptions.excludeClasses.join(\",\") }\n : {}),\n ...(listOptions?.presentedToolCalls === \"include\" ? { presentedToolCalls: \"include\" } : {}),\n ...(listOptions?.toolOutputs === \"preview\" ? { toolOutputs: \"preview\" } : {}),\n ...(options.latest ? { latest: options.latest } : {}),\n }),\n {\n method: \"GET\",\n headers: { ...this.headers(correlationId), Accept: \"application/json\" },\n },\n );\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n await assertJsonResponse(response, { method: \"GET\", correlationId });\n const body = await response.json();\n if (options.resultMode === \"compact\") {\n return body as SessionEventCompactResult;\n }\n const events = body as SessionEvent[];\n const integerHeader = (name: string): number | null => {\n const raw = response.headers.get(name);\n if (raw === null) return null;\n const value = Number(raw);\n return Number.isSafeInteger(value) && value >= 0 ? value : null;\n };\n const mode =\n response.headers.get(\"X-OpenGeni-Event-Mode\") === \"forensic\" ? \"forensic\" : \"monitoring\";\n const direction =\n response.headers.get(\"X-OpenGeni-Event-Direction\") === \"after\" ? \"after\" : \"before\";\n const payloadHeader = response.headers.get(\"X-OpenGeni-Payload-Mode\");\n const payloadMode =\n payloadHeader === \"none\" || payloadHeader === \"full\" ? payloadHeader : \"summary\";\n const first = integerHeader(\"X-OpenGeni-Covered-First\");\n const last = integerHeader(\"X-OpenGeni-Covered-Last\");\n const bytes =\n integerHeader(\"X-OpenGeni-Page-Bytes\") ??\n new TextEncoder().encode(JSON.stringify(events)).byteLength;\n const maxBytes = integerHeader(\"X-OpenGeni-Page-Max-Bytes\") ?? 1024 * 1024;\n const truncatedByHeader = response.headers.get(\"X-OpenGeni-Truncated-By\");\n const truncatedBy =\n truncatedByHeader === \"count\" ||\n truncatedByHeader === \"bytes\" ||\n truncatedByHeader === \"http_bytes\"\n ? truncatedByHeader\n : null;\n return {\n events,\n mode,\n payloadMode,\n direction,\n bytes,\n maxBytes,\n truncated: response.headers.get(\"X-OpenGeni-Page-Truncated\") === \"true\",\n hasMore: response.headers.get(\"X-OpenGeni-Has-More\") === \"true\",\n truncatedBy,\n coveredSequence: first === null || last === null ? null : { first, last },\n nextAfter: integerHeader(\"X-OpenGeni-Next-After\"),\n nextBefore: integerHeader(\"X-OpenGeni-Next-Before\"),\n forensicExact: response.headers.get(\"X-OpenGeni-Forensic-Exact\") === \"true\",\n conversationFilter: integerHeader(SESSION_EVENT_CONVERSATION_FILTER_HEADER),\n };\n }\n\n /**\n * Fetch the authoritative newest-sequence semantic result directly. This is\n * the callback-loss recovery path: it reads one compact durable result and\n * never creates a model turn. `latest: \"receipt\"` aliases `tool_receipt`;\n * turn generation remains scoped retry metadata.\n */\n async getLatestEventResult(\n workspaceId: string,\n sessionId: string,\n options: Omit<SessionEventCompactResultOptions, \"resultMode\"> = {\n latest: \"terminal\",\n },\n ): Promise<SessionEventCompactResult | null> {\n return await this.listEventPage(workspaceId, sessionId, {\n ...options,\n resultMode: \"compact\",\n });\n }\n\n /** POST a user/control event to the session. Returns the accepted event. */\n async sendEvent(\n workspaceId: string,\n sessionId: string,\n event: ClientSessionEventInput,\n ): Promise<SessionEvent> {\n return await this.requestSessionCommand<SessionEvent>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/events`,\n event,\n );\n }\n\n async sendMessage(\n workspaceId: string,\n sessionId: string,\n message: string | SendMessageInput,\n ): Promise<SessionEvent> {\n const input = typeof message === \"string\" ? { text: message } : message;\n assertNoMessageTools(input);\n const { clientEventId, ...payload } = input;\n return await this.sendEvent(workspaceId, sessionId, {\n type: \"user.message\",\n ...(clientEventId !== undefined ? { clientEventId } : {}),\n payload,\n });\n }\n\n async pauseSession(\n workspaceId: string,\n sessionId: string,\n options: {\n reason?: string;\n clientEventId?: string;\n expectedControlEtag?: string;\n } = {},\n ): Promise<SessionControlResponse> {\n return await this.controlSession(workspaceId, sessionId, {\n action: \"pause\",\n clientEventId: options.clientEventId ?? crypto.randomUUID(),\n ...(options.reason ? { reason: options.reason } : {}),\n ...(options.expectedControlEtag ? { expectedControlEtag: options.expectedControlEtag } : {}),\n });\n }\n\n async sendApprovalDecision(\n workspaceId: string,\n sessionId: string,\n decision: {\n approvalId: string;\n decision: \"approve\" | \"reject\";\n message?: string;\n clientEventId?: string;\n },\n ): Promise<SessionEvent> {\n const { clientEventId, ...payload } = decision;\n return await this.sendEvent(workspaceId, sessionId, {\n type: \"user.approvalDecision\",\n ...(clientEventId !== undefined ? { clientEventId } : {}),\n payload,\n });\n }\n\n async listHumanInputRequests(\n workspaceId: string,\n sessionId: string,\n options: {\n status?: SessionHumanInputRequest[\"status\"];\n } = {},\n ): Promise<SessionHumanInputRequest[]> {\n const result = await this.requestJson<{\n requests: SessionHumanInputRequest[];\n }>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/human-input-requests`,\n undefined,\n options.status ? { status: options.status } : undefined,\n );\n copyObservedSessionSequence(result, result.requests);\n return result.requests;\n }\n\n async getHumanInputRequest(\n workspaceId: string,\n sessionId: string,\n requestId: string,\n ): Promise<SessionHumanInputRequest> {\n return await this.requestJson<SessionHumanInputRequest>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/human-input-requests/${requestId}`,\n );\n }\n\n async submitHumanInputResponse(\n workspaceId: string,\n sessionId: string,\n requestId: string,\n response: SubmitHumanInputResponseRequest,\n options: { clientEventId?: string } = {},\n ): Promise<SessionEvent> {\n return await this.sendEvent(workspaceId, sessionId, {\n type: \"user.humanInputResponse\",\n ...(options.clientEventId ? { clientEventId: options.clientEventId } : {}),\n payload: { requestId, response },\n });\n }\n\n /**\n * Live-stream a session's events with automatic reconnect, resume from the\n * last seen sequence, gap backfill, and duplicate suppression. See\n * {@link streamSessionEvents} for the delivery guarantees.\n */\n streamEvents(\n workspaceId: string,\n sessionId: string,\n options: StreamSessionEventsOptions = {},\n ): AsyncGenerator<SessionEvent, void, void> {\n return streamSessionEvents(this.eventStreamTransport(workspaceId, sessionId), options);\n }\n\n /** The transport `streamEvents` runs on; useful for custom streaming layers. */\n eventStreamTransport(workspaceId: string, sessionId: string): SessionEventStreamTransport {\n return {\n openStream: async (after, signal) =>\n await this.openEventStream(workspaceId, sessionId, {\n after,\n ...(signal ? { signal } : {}),\n }),\n listEvents: async (after, limit) =>\n await this.listEvents(workspaceId, sessionId, { after, limit }),\n };\n }\n\n /** Open one raw SSE connection (no reconnect). Most callers want `streamEvents`. */\n async openEventStream(\n workspaceId: string,\n sessionId: string,\n options: { after?: number; signal?: AbortSignal } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const url = this.url(`${sessionPath(workspaceId, sessionId)}/events/stream`, {\n after: String(options.after ?? 0),\n });\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(url, {\n method: \"GET\",\n headers: { ...this.headers(correlationId), Accept: \"text/event-stream\" },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (!response.body) {\n throw new OpenGeniApiError(response.status, \"SSE response did not include a readable body\");\n }\n return response.body;\n }\n\n // --- Turn queue ------------------------------------------------------------\n\n async getQueue(workspaceId: string, sessionId: string): Promise<SessionQueueSnapshot> {\n const path = `${sessionPath(workspaceId, sessionId)}/queue`;\n return await this.sharedRead(path, () =>\n this.requestSessionCommand<SessionQueueSnapshot>(\"GET\", path),\n );\n }\n\n async moveQueueItem(\n workspaceId: string,\n sessionId: string,\n turnId: string,\n request: MoveSessionQueueItemRequest,\n ): Promise<SessionQueueMutationResponse> {\n return await this.requestSessionCommand<SessionQueueMutationResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/queue/${turnId}/move`,\n request,\n );\n }\n\n async editQueueItem(\n workspaceId: string,\n sessionId: string,\n turnId: string,\n request: EditSessionQueueItemRequest,\n ): Promise<SessionQueueMutationResponse> {\n return await this.requestSessionCommand<SessionQueueMutationResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/queue/${turnId}/edit`,\n request,\n );\n }\n\n async steerQueueItem(\n workspaceId: string,\n sessionId: string,\n turnId: string,\n request: SteerSessionQueueItemRequest,\n ): Promise<SessionQueueMutationResponse> {\n return await this.requestSessionCommand<SessionQueueMutationResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/queue/${turnId}/steer`,\n request,\n );\n }\n\n async deleteQueueItem(\n workspaceId: string,\n sessionId: string,\n turnId: string,\n request: DeleteSessionQueueItemRequest,\n ): Promise<SessionQueueMutationResponse> {\n return await this.requestSessionCommand<SessionQueueMutationResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/queue/${turnId}/delete`,\n request,\n );\n }\n\n async getComposerDraft(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComposerDraft> {\n return await this.requestSessionCommand<ComposerDraft>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/composer-draft`,\n undefined,\n options,\n );\n }\n\n async saveComposerDraft(\n workspaceId: string,\n sessionId: string,\n request: SaveComposerDraftRequest,\n ): Promise<ComposerDraft> {\n return await this.requestSessionCommand<ComposerDraft>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/composer-draft`,\n request,\n );\n }\n\n async submitComposerDraft(\n workspaceId: string,\n sessionId: string,\n request: SubmitComposerDraftRequest,\n ): Promise<SubmitComposerDraftResponse> {\n return await this.requestSessionCommand<SubmitComposerDraftResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/composer-draft/submit`,\n request,\n );\n }\n\n /** Inspect bounded checkpoint recovery eligibility without changing session state. */\n async getSandboxRecovery(\n workspaceId: string,\n sessionId: string,\n ): Promise<SandboxRecoveryProjection> {\n return this.requestJson(\"GET\", `${sessionPath(workspaceId, sessionId)}/sandbox-recovery`);\n }\n\n /** Restore only the explicitly selected checkpoint; never retry a command. */\n async recoverSandbox(\n workspaceId: string,\n sessionId: string,\n request: SandboxRecoveryRequest,\n ): Promise<SandboxRecoveryResponse> {\n return this.requestSessionCommand(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/sandbox-recovery`,\n request,\n );\n }\n\n /** Retry the exact failed turn. Keep clientEventId unchanged on transport retries. */\n async retrySession(\n workspaceId: string,\n sessionId: string,\n request: SessionRetryRequest,\n ): Promise<SessionRetryResponse> {\n return await this.requestSessionCommand<SessionRetryResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/retry`,\n request,\n );\n }\n\n async controlSession(\n workspaceId: string,\n sessionId: string,\n request: {\n action: \"pause\" | \"resume\" | \"cancel\";\n reason?: string;\n clientEventId: string;\n expectedControlEtag?: string;\n },\n ): Promise<SessionControlResponse> {\n return await this.requestSessionCommand<SessionControlResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/control`,\n request,\n );\n }\n\n async resumeSession(\n workspaceId: string,\n sessionId: string,\n options: {\n reason?: string;\n clientEventId?: string;\n expectedControlEtag?: string;\n } = {},\n ): Promise<SessionControlResponse> {\n return await this.controlSession(workspaceId, sessionId, {\n action: \"resume\",\n clientEventId: options.clientEventId ?? crypto.randomUUID(),\n ...(options.reason ? { reason: options.reason } : {}),\n ...(options.expectedControlEtag ? { expectedControlEtag: options.expectedControlEtag } : {}),\n });\n }\n\n /**\n * Terminally cancel a session subtree. Unlike pause, cancellation drains\n * queued work and permanently fences new prompts for the session and every\n * descendant.\n */\n async cancelSession(\n workspaceId: string,\n sessionId: string,\n options: {\n reason?: string;\n clientEventId?: string;\n expectedControlEtag?: string;\n } = {},\n ): Promise<SessionControlResponse> {\n return await this.controlSession(workspaceId, sessionId, {\n action: \"cancel\",\n clientEventId: options.clientEventId ?? crypto.randomUUID(),\n ...(options.reason ? { reason: options.reason } : {}),\n ...(options.expectedControlEtag ? { expectedControlEtag: options.expectedControlEtag } : {}),\n });\n }\n\n async setWorkspacePauseTimer(\n workspaceId: string,\n request: import(\"./types\").WorkspacePauseTimerRequest,\n ): Promise<{ ok: boolean }> {\n return await this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/pause-timer`, request);\n }\n\n async setWorkspaceInferenceState(\n workspaceId: string,\n request: {\n action: \"pause\" | \"resume\";\n reason?: string;\n clientEventId: string;\n expectedRevision?: number;\n },\n ): Promise<WorkspaceInferenceControlResponse> {\n return await this.requestJson<WorkspaceInferenceControlResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/inference-control`,\n request,\n );\n }\n\n async listWorkspaceControlEvents(\n workspaceId: string,\n options: { after?: number; limit?: number } = {},\n ): Promise<WorkspaceControlEvent[]> {\n return (await this.listWorkspaceControlEventPage(workspaceId, options)).events;\n }\n\n /** Count/byte-bounded page plus an explicit continuation cursor. */\n async listWorkspaceControlEventPage(\n workspaceId: string,\n options: { after?: number; limit?: number } = {},\n ): Promise<WorkspaceControlEventPage> {\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/control-events`, {\n ...(options.after !== undefined ? { after: String(options.after) } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n }),\n {\n method: \"GET\",\n headers: { ...this.headers(correlationId), Accept: \"application/json\" },\n },\n );\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n await assertJsonResponse(response, { method: \"GET\", correlationId });\n const events = (await response.json()) as WorkspaceControlEvent[];\n const bytesHeader = response.headers.get(\"X-OpenGeni-Page-Bytes\");\n const nextHeader = response.headers.get(\"X-OpenGeni-Next-After\");\n const parsedBytes = bytesHeader === null ? Number.NaN : Number(bytesHeader);\n const parsedNext = nextHeader === null ? null : Number(nextHeader);\n return {\n events,\n bytes:\n Number.isSafeInteger(parsedBytes) && parsedBytes >= 0\n ? parsedBytes\n : new TextEncoder().encode(JSON.stringify(events)).byteLength,\n truncated: response.headers.get(\"X-OpenGeni-Page-Truncated\") === \"true\",\n nextAfter:\n parsedNext !== null && Number.isSafeInteger(parsedNext) && parsedNext >= 0\n ? parsedNext\n : null,\n };\n }\n\n streamWorkspaceControlEvents(\n workspaceId: string,\n options: StreamSessionEventsOptions = {},\n ): AsyncGenerator<WorkspaceControlEvent, void, void> {\n return streamWorkspaceControlEvents(this.workspaceControlStreamTransport(workspaceId), options);\n }\n\n /**\n * Multiplex workspace control and interaction invalidations over one HTTP\n * connection while retaining an independent durable cursor for each domain.\n */\n streamWorkspaceLiveEvents(workspaceId: string, options: WorkspaceLiveStreamOptions = {}) {\n return streamWorkspaceLiveEvents(this.workspaceLiveStreamTransport(workspaceId), options);\n }\n\n workspaceLiveStreamTransport(workspaceId: string): WorkspaceLiveStreamTransport {\n return {\n openStream: async (controlAfter, interactionAfter, signal) =>\n await this.openWorkspaceLiveEventStream(workspaceId, {\n controlAfter,\n interactionAfter,\n ...(signal ? { signal } : {}),\n }),\n };\n }\n\n async openWorkspaceLiveEventStream(\n workspaceId: string,\n options: {\n controlAfter?: number;\n interactionAfter?: number;\n signal?: AbortSignal;\n } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/live-events/stream`, {\n controlAfter: String(options.controlAfter ?? 0),\n interactionAfter: String(options.interactionAfter ?? 0),\n }),\n {\n method: \"GET\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"text/event-stream\",\n },\n ...(options.signal ? { signal: options.signal } : {}),\n },\n );\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (!response.body) {\n throw new OpenGeniApiError(response.status, \"SSE response did not include a readable body\");\n }\n return response.body;\n }\n\n workspaceControlStreamTransport(workspaceId: string): WorkspaceControlStreamTransport {\n return {\n openStream: async (after, signal) =>\n await this.openWorkspaceControlEventStream(workspaceId, {\n after,\n ...(signal ? { signal } : {}),\n }),\n };\n }\n\n async openWorkspaceControlEventStream(\n workspaceId: string,\n options: { after?: number; signal?: AbortSignal } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/control-events/stream`, {\n after: String(options.after ?? 0),\n }),\n {\n method: \"GET\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"text/event-stream\",\n },\n ...(options.signal ? { signal: options.signal } : {}),\n },\n );\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (!response.body) {\n throw new OpenGeniApiError(response.status, \"SSE response did not include a readable body\");\n }\n return response.body;\n }\n\n /**\n * Steer: atomically put this prompt at the head and supersede the current\n * inference. The client performs one request and renders server order.\n */\n async steerMessage(\n workspaceId: string,\n sessionId: string,\n message: string | SendMessageInput,\n ): Promise<SteerMessageResult> {\n const input = typeof message === \"string\" ? { text: message } : message;\n assertNoMessageTools(input);\n return await this.requestSessionCommand<SteerMessageResult>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/steer`,\n input,\n );\n }\n\n // --- Goals -------------------------------------------------------------------\n\n /** The session's goal. 404s when the session never had one. */\n async getGoal(\n workspaceId: string,\n sessionId: string,\n options: SharedSessionReadOptions = {},\n ): Promise<SessionGoal> {\n const path = `${sessionPath(workspaceId, sessionId)}/goal`;\n return await this.sharedRead(\n path,\n (signal) => this.requestJson<SessionGoal>(\"GET\", path, undefined, {}, { signal }),\n options,\n );\n }\n\n /**\n * The session's goal, or `null` when the session has none. Unlike\n * {@link getGoal}, a goal-less session is a successful read (`?absent=null`\n * answers 200 `null`), so browsers log no failed request. Servers that\n * predate the opt-in ignore it and still answer 404; a missing session is\n * always a 404.\n */\n async findGoal(\n workspaceId: string,\n sessionId: string,\n options: SharedSessionReadOptions = {},\n ): Promise<SessionGoal | null> {\n const path = `${sessionPath(workspaceId, sessionId)}/goal`;\n const query = { absent: \"null\" };\n return await this.sharedRead(\n `${path}?absent=null`,\n (signal) => this.requestJson<SessionGoal | null>(\"GET\", path, undefined, query, { signal }),\n options,\n );\n }\n\n async updateGoal(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionGoalRequest,\n ): Promise<SessionGoal> {\n return await this.requestJson<SessionGoal>(\n \"PATCH\",\n `${sessionPath(workspaceId, sessionId)}/goal`,\n request,\n );\n }\n\n async listGoalRevisions(workspaceId: string, sessionId: string): Promise<SessionGoalRevision[]> {\n return await this.requestJson<SessionGoalRevision[]>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/goal/revisions`,\n );\n }\n\n async listGoalRevisionPage(\n workspaceId: string,\n sessionId: string,\n options: ListSessionGoalRevisionsOptions = {},\n ): Promise<ListSessionGoalRevisionsResponse> {\n const query = new URLSearchParams();\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.before !== undefined) query.set(\"before\", options.before);\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<ListSessionGoalRevisionsResponse>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/goal/revisions/page${suffix}`,\n );\n }\n\n async rejectGoalRevision(\n workspaceId: string,\n sessionId: string,\n revisionId: string,\n request: RejectSessionGoalRevisionRequest,\n ): Promise<RejectSessionGoalRevisionResponse> {\n return await this.requestJson<RejectSessionGoalRevisionResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/goal/revisions/${revisionId}/reject`,\n request,\n );\n }\n\n async rollbackGoalRevision(\n workspaceId: string,\n sessionId: string,\n revisionId: string,\n request: RollbackSessionGoalRevisionRequest,\n ): Promise<SessionGoal> {\n return await this.requestJson<SessionGoal>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/goal/revisions/${revisionId}/rollback`,\n request,\n );\n }\n\n async applyGoalRevision(\n workspaceId: string,\n sessionId: string,\n revisionId: string,\n request: ApplySessionGoalRevisionRequest,\n ): Promise<SessionGoal> {\n return await this.requestJson<SessionGoal>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/goal/revisions/${revisionId}/apply`,\n request,\n );\n }\n\n async deleteGoal(workspaceId: string, sessionId: string): Promise<void> {\n await this.requestVoid(\"DELETE\", `${sessionPath(workspaceId, sessionId)}/goal`);\n }\n\n /** Pause the goal loop: the session stops self-continuing until resumed. */\n async pauseGoal(\n workspaceId: string,\n sessionId: string,\n options: { rationale?: string } = {},\n ): Promise<SessionGoal> {\n return await this.updateGoal(workspaceId, sessionId, {\n status: \"paused\",\n ...(options.rationale !== undefined ? { rationale: options.rationale } : {}),\n });\n }\n\n /** Resume a paused goal: resets counters and re-arms the continuation loop. */\n async resumeGoal(workspaceId: string, sessionId: string): Promise<SessionGoal> {\n return await this.updateGoal(workspaceId, sessionId, { status: \"active\" });\n }\n\n // --- Operator context controls (/clear, /compact) ---------------------------\n\n /**\n * Clear the session's conversation context. Destructive and audit-preserving:\n * the server supersedes (never deletes) the live history and emits a\n * `session.context.cleared` event. Refused (409) while a turn is in flight or\n * awaiting action. `confirm:true` is sent so an accidental call cannot wipe\n * context — the destructive intent is explicit on the wire.\n */\n async clearSessionContext(workspaceId: string, sessionId: string): Promise<void> {\n await this.requestVoid(\"POST\", `${sessionPath(workspaceId, sessionId)}/context/clear`, {\n confirm: true,\n });\n }\n\n /** Request one durable portable compaction at the next safe model boundary. */\n async compactSessionContext(\n workspaceId: string,\n sessionId: string,\n ): Promise<CompactSessionContextResult> {\n return await this.requestJson<CompactSessionContextResult>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/context/compact`,\n {},\n );\n }\n\n // --- Channel-A structured services (P4.4) ------------------------------------\n // FileSystem (Pierre tree), Git (Pierre diff), Terminal (exec + PTY). Each is a\n // synchronous API-direct point query; the fs.changed/git.changed/terminal.pty.*\n // notifications + the PTY output stream arrive on the existing event SSE.\n\n /** FileSystem: list a directory tree (feeds the Pierre file tree). */\n async fsList(\n workspaceId: string,\n sessionId: string,\n request: FsListRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<FsListResponse> {\n return await this.requestJson<FsListResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/fs/list`,\n request,\n {},\n options,\n );\n }\n\n /** FileSystem: hydrate several independent directories behind one sandbox lease. */\n async fsListBatch(\n workspaceId: string,\n sessionId: string,\n request: FsListBatchRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<FsListBatchResponse> {\n return await this.requestJson<FsListBatchResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/fs/list-batch`,\n request,\n {},\n options,\n );\n }\n\n /** FileSystem: read a file (text or base64; binary-safe, size-capped). */\n async fsRead(\n workspaceId: string,\n sessionId: string,\n request: FsReadRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<FsReadResponse> {\n return await this.requestJson<FsReadResponse>(\n \"POST\",\n request.workspaceOnly\n ? `${sessionPath(workspaceId, sessionId)}/fs/read-workspace`\n : `${sessionPath(workspaceId, sessionId)}/fs/read`,\n request,\n {},\n options,\n );\n }\n\n /** Publish one exact sandbox file into permanent workspace artifact storage. */\n async publishSandboxFileArtifact(\n workspaceId: string,\n sessionId: string,\n request: PublishSandboxFileArtifactRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SandboxFileArtifactReceipt> {\n return await this.requestJson<SandboxFileArtifactReceipt>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/artifacts/publish`,\n request,\n {},\n options,\n );\n }\n\n /** FileSystem: write a file (last-writer-wins; emits fs.changed). */\n async fsWrite(\n workspaceId: string,\n sessionId: string,\n request: FsWriteRequest,\n ): Promise<FsWriteResponse> {\n return await this.requestJson<FsWriteResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/fs/write`,\n request,\n );\n }\n\n /** FileSystem: delete a path (emits fs.changed). */\n async fsDelete(\n workspaceId: string,\n sessionId: string,\n request: FsDeleteRequest,\n ): Promise<FsDeleteResponse> {\n return await this.requestJson<FsDeleteResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/fs/delete`,\n request,\n );\n }\n\n /** FileSystem: move/rename a path (emits fs.changed; 409 if destination exists and overwrite is false). */\n async fsMove(\n workspaceId: string,\n sessionId: string,\n request: FsMoveRequest,\n ): Promise<FsMoveResponse> {\n return await this.requestJson<FsMoveResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/fs/move`,\n request,\n );\n }\n\n /** FileSystem: create a directory (emits fs.changed; recursive defaults to true). */\n async fsMkdir(\n workspaceId: string,\n sessionId: string,\n request: FsMkdirRequest,\n ): Promise<FsMkdirResponse> {\n return await this.requestJson<FsMkdirResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/fs/mkdir`,\n request,\n );\n }\n\n /** Git: working-tree/index status (the Pierre file-status feed). */\n async gitStatus(\n workspaceId: string,\n sessionId: string,\n request: GitStatusRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<GitStatusResponse> {\n return await this.requestJson<GitStatusResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/git/status`,\n request,\n {},\n options,\n );\n }\n\n /** Git: structured diff hunks (the Pierre diff feed). */\n async gitDiff(\n workspaceId: string,\n sessionId: string,\n request: GitDiffRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<GitDiffResponse> {\n return await this.requestJson<GitDiffResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/git/diff`,\n request,\n {},\n options,\n );\n }\n\n /** Git: read status and optional diffs for several repositories behind one sandbox lease. */\n async gitReadBatch(\n workspaceId: string,\n sessionId: string,\n request: GitReadBatchRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<GitReadBatchResponse> {\n return await this.requestJson<GitReadBatchResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/git/read-batch`,\n request,\n {},\n options,\n );\n }\n\n /** Git: commit log. */\n async gitLog(\n workspaceId: string,\n sessionId: string,\n request: GitLogRequest = {},\n ): Promise<GitLogResponse> {\n return await this.requestJson<GitLogResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/git/log`,\n request,\n );\n }\n\n /** Git: show a commit (diff vs first parent) or fetch a raw blob at a ref. */\n async gitShow(\n workspaceId: string,\n sessionId: string,\n request: GitShowRequest,\n ): Promise<GitShowResponse> {\n return await this.requestJson<GitShowResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/git/show`,\n request,\n );\n }\n\n /** Workspace capture: the latest turn-end snapshot of the session's workspace\n * (tree + per-repo diff + file after-image refs), served from durable storage\n * WITHOUT warming a machine — the workbench cold-paint source. Returns\n * `{available:false}` when no capture exists yet (fall back to the live path). */\n async getWorkspaceCapture(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<GetWorkspaceCaptureResponse> {\n return await this.requestJson<GetWorkspaceCaptureResponse>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/workspace/capture`,\n undefined,\n {},\n options,\n );\n }\n\n /** Workspace capture: a single file's after-image from the capture (revision\n * pins a specific one; omitted → latest). Content is inline for small files,\n * else a short-TTL signed URL; a tooLarge file returns metadata only. */\n async getWorkspaceCaptureFile(\n workspaceId: string,\n sessionId: string,\n path: string,\n revision?: number,\n options: OpenGeniRequestOptions = {},\n ): Promise<GetWorkspaceCaptureFileResponse> {\n const query: Record<string, string> = { path };\n if (revision !== undefined) query.revision = String(revision);\n return await this.requestJson<GetWorkspaceCaptureFileResponse>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/workspace/capture/file`,\n undefined,\n query,\n options,\n );\n }\n\n /** Terminal: run a bounded command, returning buffered stdout/stderr inline. */\n async terminalExec(\n workspaceId: string,\n sessionId: string,\n request: TerminalExecRequest,\n ): Promise<TerminalExecResponse> {\n return await this.requestJson<TerminalExecResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/terminal/exec`,\n request,\n );\n }\n\n /** Terminal: open an interactive PTY. Output streams on the event SSE as\n * terminal.pty.output.delta; drive it with terminalPtyWrite. */\n async terminalPtyOpen(\n workspaceId: string,\n sessionId: string,\n request: PtyOpenRequest = {},\n ): Promise<PtyOpenResponse> {\n return await this.requestJson<PtyOpenResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/terminal/pty`,\n request,\n );\n }\n\n /** Terminal: send stdin to an open PTY (output rides A1). */\n async terminalPtyWrite(\n workspaceId: string,\n sessionId: string,\n request: PtyWriteRequest,\n ): Promise<void> {\n await this.requestVoid(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/terminal/pty/write`,\n request,\n );\n }\n\n /** Terminal: resize an open PTY. */\n async terminalPtyResize(\n workspaceId: string,\n sessionId: string,\n request: PtyResizeRequest,\n ): Promise<void> {\n await this.requestVoid(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/terminal/pty/resize`,\n request,\n );\n }\n\n /** Terminal: close an open PTY (idempotent). */\n async terminalPtyClose(\n workspaceId: string,\n sessionId: string,\n request: PtyCloseRequest,\n ): Promise<void> {\n await this.requestVoid(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/terminal/pty/close`,\n request,\n );\n }\n\n // --- Stream surfacing: capability negotiation + viewer lifecycle (Phase 5) ---\n // The capability doc is the single source of UI truth (degradation is always a\n // value, never a crash). The desktop pixel plane (Channel B) is gated behind an\n // un-redacted-acknowledgment + a viewer holder; the structured terminal/files/\n // git surfaces (Channel A) ride the methods above and the event SSE.\n\n /** Read the negotiated capability doc for a session WITHOUT acquiring a viewer\n * holder (no warm, no spawn). Drives capability-gated rendering: which\n * surfaces mount, the per-surface unavailability reasons, and the lease\n * liveness the client polls on while `cold`/`warming`. The desktop URL/token\n * are minted in-process only when the box is warm AND the principal has\n * acknowledged the un-redacted plane. */\n async getStreamCapabilities(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionCapabilities> {\n return await this.requestJson<SessionCapabilities>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/stream-capabilities`,\n undefined,\n {},\n options,\n );\n }\n\n /** Record the calling principal's acknowledgment of the un-redacted desktop\n * pixel plane (and, when the box is shared, the shared-exposure disclosure).\n * The desktop viewer-attach path returns 409 until this is recorded. */\n async acknowledgeStream(\n workspaceId: string,\n sessionId: string,\n request: AcknowledgeStreamRequest = {},\n ): Promise<AcknowledgeStreamResponse> {\n return await this.requestJson<AcknowledgeStreamResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/stream-capabilities/acknowledge`,\n request,\n );\n }\n\n /** Attach a viewer holder (refcounted liveness — keeps the box warm while\n * watched/used), spinning the box up in-process when cold. Exact plane flags\n * mint only the requested short-lived credentials and enforce that plane's\n * permission. `desktop:true` alone carries the un-redacted/shared consent\n * gate. An entirely omitted plane set retains the legacy terminal-only\n * meaning; current clients should send all three flags. */\n async attachViewer(\n workspaceId: string,\n sessionId: string,\n request: AttachViewerRequest = {},\n ): Promise<AttachViewerResponse> {\n return await this.requestJson<AttachViewerResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/viewers`,\n request,\n );\n }\n\n /** Heartbeat a viewer holder (Channel-A app-level liveness). A closed laptop\n * stops sending these → the reaper drops the holder within ~90s. Echoes\n * `leaseEpoch` so a superseded epoch is rejected (`alive:false` → re-attach). */\n async heartbeatViewer(\n workspaceId: string,\n sessionId: string,\n viewerId: string,\n request: ViewerHeartbeatRequest,\n ): Promise<ViewerHeartbeatResponse> {\n return await this.requestJson<ViewerHeartbeatResponse>(\n \"POST\",\n `${sessionPath(workspaceId, sessionId)}/viewers/${viewerId}/heartbeat`,\n request,\n );\n }\n\n /** Detach a viewer (delete this holder; idempotent delete-my-row). */\n async detachViewer(workspaceId: string, sessionId: string, viewerId: string): Promise<void> {\n await this.requestVoid(\"DELETE\", `${sessionPath(workspaceId, sessionId)}/viewers/${viewerId}`);\n }\n\n // --- Browser / Computer interaction resources --------------------------------\n\n streamWorkspaceInteractionRevisions(\n workspaceId: string,\n options: StreamSessionEventsOptions = {},\n ): AsyncGenerator<WorkspaceInteractionRevisionEvent, void, void> {\n return streamWorkspaceInteractionRevisions(\n this.workspaceInteractionRevisionStreamTransport(workspaceId),\n options,\n );\n }\n\n workspaceInteractionRevisionStreamTransport(\n workspaceId: string,\n ): WorkspaceInteractionRevisionStreamTransport {\n return {\n openStream: async (after, signal) =>\n await this.openWorkspaceInteractionRevisionStream(workspaceId, {\n after,\n ...(signal ? { signal } : {}),\n }),\n };\n }\n\n async openWorkspaceInteractionRevisionStream(\n workspaceId: string,\n options: { after?: number; signal?: AbortSignal } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/interaction-events/stream`, {\n after: String(options.after ?? 0),\n }),\n {\n method: \"GET\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"text/event-stream\",\n },\n ...(options.signal ? { signal: options.signal } : {}),\n },\n );\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (!response.body) {\n throw new OpenGeniApiError(response.status, \"SSE response did not include a readable body\");\n }\n return response.body;\n }\n\n async listNetworkRoutes(\n workspaceId: string,\n options: NetworkRouteListOptions = {},\n ): Promise<NetworkRouteListResponse> {\n return await this.requestJson<NetworkRouteListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/network-routes`,\n undefined,\n options.includeArchived ? { includeArchived: \"true\" } : {},\n options,\n );\n }\n\n async getNetworkRoute(\n workspaceId: string,\n networkRouteId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRoute> {\n return await this.requestJson<NetworkRoute>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/network-routes/${encodeURIComponent(networkRouteId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async createNetworkRoute(\n workspaceId: string,\n request: CreateNetworkRouteRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRouteMutationResponse> {\n return await this.requestJson<NetworkRouteMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/network-routes`,\n request,\n {},\n options,\n );\n }\n\n async updateNetworkRoute(\n workspaceId: string,\n networkRouteId: string,\n request: UpdateNetworkRouteRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRouteMutationResponse> {\n return await this.requestJson<NetworkRouteMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/network-routes/${encodeURIComponent(networkRouteId)}`,\n request,\n {},\n options,\n );\n }\n\n async listSiteAuthConnections(\n workspaceId: string,\n options: SiteAuthConnectionListOptions = {},\n ): Promise<SiteAuthConnectionListResponse> {\n return await this.requestJson<SiteAuthConnectionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/site-auth-connections`,\n undefined,\n options.includeArchived ? { includeArchived: \"true\" } : {},\n options,\n );\n }\n\n async getSiteAuthConnection(\n workspaceId: string,\n siteAuthConnectionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnection> {\n return await this.requestJson<SiteAuthConnection>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/site-auth-connections/${encodeURIComponent(siteAuthConnectionId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async createSiteAuthConnection(\n workspaceId: string,\n request: CreateSiteAuthConnectionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnectionMutationResponse> {\n return await this.requestJson<SiteAuthConnectionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/site-auth-connections`,\n request,\n {},\n options,\n );\n }\n\n async updateSiteAuthConnection(\n workspaceId: string,\n siteAuthConnectionId: string,\n request: UpdateSiteAuthConnectionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnectionMutationResponse> {\n return await this.requestJson<SiteAuthConnectionMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/site-auth-connections/${encodeURIComponent(siteAuthConnectionId)}`,\n request,\n {},\n options,\n );\n }\n\n async listAuthRuns(\n workspaceId: string,\n options: AuthRunListOptions = {},\n ): Promise<AuthRunListResponse> {\n return await this.requestJson<AuthRunListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/auth-runs`,\n undefined,\n {\n ...(options.browserSessionId ? { browserSessionId: options.browserSessionId } : {}),\n ...(options.siteAuthConnectionId\n ? { siteAuthConnectionId: options.siteAuthConnectionId }\n : {}),\n ...(options.includeSettled ? { includeSettled: \"true\" } : {}),\n },\n options,\n );\n }\n\n async getAuthRun(\n workspaceId: string,\n authRunId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRun> {\n return await this.requestJson<AuthRun>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/auth-runs/${encodeURIComponent(authRunId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async startBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n request: StartAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.requestJson<AuthRunMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs`,\n request,\n {},\n options,\n );\n }\n\n async reportBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ReportAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.requestJson<AuthRunMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/report`,\n request,\n {},\n options,\n );\n }\n\n async advanceExternalBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ExternalAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ExternalAuthRunResponse> {\n return await this.requestJson<ExternalAuthRunResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/external-auth`,\n request,\n {},\n options,\n );\n }\n\n async openExternalBrowserAuthFlow(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ExternalAuthInteractiveRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ExternalAuthInteractiveResponse> {\n return await this.requestJson<ExternalAuthInteractiveResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/external-auth/interactive`,\n request,\n {},\n options,\n );\n }\n\n async verifyBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: VerifyAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.requestJson<AuthRunMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/verify`,\n request,\n {},\n options,\n );\n }\n\n async listInteractionInterventions(\n workspaceId: string,\n options: InteractionInterventionListOptions = {},\n ): Promise<InteractionInterventionListResponse> {\n return await this.requestJson<InteractionInterventionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/interaction-interventions`,\n undefined,\n {\n ...(options.resourceKind ? { resourceKind: options.resourceKind } : {}),\n ...(options.resourceId ? { resourceId: options.resourceId } : {}),\n ...(options.includeSettled ? { includeSettled: \"true\" } : {}),\n },\n options,\n );\n }\n\n async getInteractionIntervention(\n workspaceId: string,\n interventionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionIntervention> {\n return await this.requestJson<InteractionIntervention>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/interaction-interventions/${encodeURIComponent(interventionId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async createInteractionIntervention(\n workspaceId: string,\n request: CreateInteractionInterventionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionInterventionMutationResponse> {\n return await this.requestJson<InteractionInterventionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/interaction-interventions`,\n request,\n {},\n options,\n );\n }\n\n async resolveInteractionIntervention(\n workspaceId: string,\n interventionId: string,\n request: ResolveInteractionInterventionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionInterventionMutationResponse> {\n return await this.requestJson<InteractionInterventionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/interaction-interventions/${encodeURIComponent(interventionId)}/resolve`,\n request,\n {},\n options,\n );\n }\n\n async listAttachedBrowsers(\n workspaceId: string,\n options: AttachedBrowserDeviceListOptions = {},\n ): Promise<AttachedBrowserDeviceListResponse> {\n return await this.requestJson<AttachedBrowserDeviceListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/attached-browsers`,\n undefined,\n options.includeDisconnected ? { includeDisconnected: \"true\" } : {},\n options,\n );\n }\n\n async getAttachedBrowser(\n workspaceId: string,\n deviceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<AttachedBrowserDevice> {\n return await this.requestJson<AttachedBrowserDevice>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/attached-browsers/${encodeURIComponent(deviceId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async listBrowserIdentities(\n workspaceId: string,\n options: BrowserIdentityListOptions = {},\n ): Promise<BrowserIdentityListResponse> {\n return await this.requestJson<BrowserIdentityListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-identities`,\n undefined,\n options.includeArchived ? { includeArchived: \"true\" } : {},\n options,\n );\n }\n\n async getBrowserIdentity(\n workspaceId: string,\n identityId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentity> {\n return await this.requestJson<BrowserIdentity>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-identities/${encodeURIComponent(identityId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async createBrowserIdentity(\n workspaceId: string,\n request: CreateBrowserIdentityRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentityMutationResponse> {\n return await this.requestJson<BrowserIdentityMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-identities`,\n request,\n {},\n options,\n );\n }\n\n async updateBrowserIdentity(\n workspaceId: string,\n identityId: string,\n request: UpdateBrowserIdentityRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentityMutationResponse> {\n return await this.requestJson<BrowserIdentityMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/browser-identities/${encodeURIComponent(identityId)}`,\n request,\n {},\n options,\n );\n }\n\n async listBrowserRevisions(\n workspaceId: string,\n identityId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserRevisionListResponse> {\n return await this.requestJson<BrowserRevisionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-identities/${encodeURIComponent(identityId)}/revisions`,\n undefined,\n {},\n options,\n );\n }\n\n /** Workspace-wide BrowserSession inventory. Associations express relevance,\n * not access: peers and child agents intentionally remain discoverable. */\n async listBrowserSessions(\n workspaceId: string,\n options: OpenGeniRequestOptions | InteractionSessionListOptions = {},\n ): Promise<BrowserSessionListResponse> {\n const { query, request } = interactionSessionListQuery(options);\n return await this.requestJson<BrowserSessionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions`,\n undefined,\n query,\n request,\n );\n }\n\n async getBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSession> {\n return await this.requestJson<BrowserSession>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async readBrowserClipboard(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserClipboard> {\n return await this.requestJson<BrowserClipboard>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/clipboard`,\n undefined,\n {},\n options,\n );\n }\n\n async listBrowserDownloads(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserDownloadListResponse> {\n return await this.requestJson<BrowserDownloadListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/downloads`,\n undefined,\n {},\n options,\n );\n }\n\n async getBrowserDownload(\n workspaceId: string,\n browserSessionId: string,\n downloadId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserDownload> {\n return await this.requestJson<BrowserDownload>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/downloads/${encodeURIComponent(downloadId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async saveBrowserDownload(\n workspaceId: string,\n browserSessionId: string,\n downloadId: string,\n request: BrowserDownloadSaveRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserDownloadSaveResponse> {\n return await this.requestJson<BrowserDownloadSaveResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/downloads/${encodeURIComponent(downloadId)}/save`,\n request,\n {},\n options,\n );\n }\n\n /** Starts recording one tab of a browser session as a video. The recording\n * follows the agent to other tabs it acts on, opens or selects. */\n async startBrowserRecording(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserRecordingSummary> {\n return await this.requestJson<BrowserRecordingSummary>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/recordings`,\n { targetId },\n {},\n options,\n );\n }\n\n async getBrowserRecording(\n workspaceId: string,\n browserSessionId: string,\n recordingId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserRecordingSummary> {\n return await this.requestJson<BrowserRecordingSummary>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/recordings/${encodeURIComponent(recordingId)}`,\n undefined,\n {},\n options,\n );\n }\n\n /** Stops a recording and saves it as an MP4 plus an action log in the\n * browser's source session workspace; the MP4 is also a retained artifact. */\n async saveBrowserRecording(\n workspaceId: string,\n browserSessionId: string,\n recordingId: string,\n request: BrowserRecordingSaveRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserRecordingSaveResponse> {\n return await this.requestJson<BrowserRecordingSaveResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/recordings/${encodeURIComponent(recordingId)}/save`,\n request,\n {},\n options,\n );\n }\n\n async createBrowserSession(\n workspaceId: string,\n request: CreateBrowserSessionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.requestJson<BrowserSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions`,\n request,\n {},\n options,\n );\n }\n\n async listBrowserTargets(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetListResponse> {\n return await this.requestJson<BrowserTargetListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets`,\n undefined,\n {},\n options,\n );\n }\n\n async openBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserOpenTargetRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.requestJson<BrowserObservation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets`,\n request,\n {},\n options,\n );\n }\n\n /** Opens a tab and returns inventory without collecting page content. */\n async openBrowserTargetWithInventory(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserOpenTargetRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetListResponse> {\n return await this.requestJson<BrowserTargetListResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/open-with-inventory`,\n request,\n {},\n options,\n );\n }\n\n async selectBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.requestJson<BrowserObservation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/select`,\n {},\n {},\n options,\n );\n }\n\n async captureBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n captureOptions: BrowserScreenshotOptions = {},\n ): Promise<BrowserFrame> {\n const query = new URLSearchParams();\n if (captureOptions.fullPage !== undefined) {\n if (typeof captureOptions.fullPage !== \"boolean\") {\n throw new TypeError(\"browser screenshot fullPage must be a boolean\");\n }\n query.set(\"fullPage\", String(captureOptions.fullPage));\n }\n if (captureOptions.format !== undefined) {\n if (captureOptions.format !== \"jpeg\" && captureOptions.format !== \"png\") {\n throw new TypeError(\"browser screenshot format must be jpeg or png\");\n }\n query.set(\"format\", captureOptions.format);\n }\n if (captureOptions.quality !== undefined) {\n if (\n !Number.isSafeInteger(captureOptions.quality) ||\n captureOptions.quality < 1 ||\n captureOptions.quality > 100\n ) {\n throw new RangeError(\"browser screenshot quality must be an integer from 1 to 100\");\n }\n query.set(\"quality\", String(captureOptions.quality));\n }\n const suffix = query.size > 0 ? `?${query}` : \"\";\n const response = await this.requestResponse(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/screenshot${suffix}`,\n {},\n options,\n );\n const mediaType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim().toLowerCase();\n const header = response.headers.get(\"x-opengeni-browser-frame\");\n if (\n (mediaType !== \"image/jpeg\" && mediaType !== \"image/png\") ||\n !header ||\n header.length > 64 * 1024\n ) {\n await cancelResponseBody(response, \"browser frame metadata is invalid\");\n throw new OpenGeniApiError(502, \"browser frame metadata is invalid\");\n }\n let metadata: BrowserFrameMetadata;\n try {\n metadata = parseBrowserFrameMetadata(\n JSON.parse(atob(header.replace(/-/gu, \"+\").replace(/_/gu, \"/\"))),\n );\n } catch {\n await cancelResponseBody(response, \"browser frame metadata is invalid\");\n throw new OpenGeniApiError(502, \"browser frame metadata is invalid\");\n }\n const data = await readBoundedResponseBytes(response, 24 * 1024 * 1024, null);\n if (\n metadata.browserSessionId !== browserSessionId ||\n metadata.targetId !== targetId ||\n metadata.mediaType !== mediaType\n ) {\n throw new OpenGeniApiError(502, \"browser frame evidence does not match its request\");\n }\n return { ...metadata, data };\n }\n\n async closeBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetListResponse> {\n return await this.requestJson<BrowserTargetListResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async observeBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.requestJson<BrowserObservation>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/observation`,\n undefined,\n {},\n options,\n );\n }\n\n async getBrowserTargetState(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetState> {\n const state = await this.requestJson<BrowserTargetState>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/state`,\n undefined,\n {},\n options,\n );\n if (state.browserSessionId !== browserSessionId || state.targetId !== targetId) {\n throw new OpenGeniApiError(502, \"browser target state belongs to another binding\");\n }\n return state;\n }\n\n async readBrowserDom(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n request: BrowserDomReadRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserDomReadResponse> {\n const result = await this.requestJson<BrowserDomReadResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/dom-read`,\n request,\n {},\n options,\n );\n if (\n result.browserSessionId !== browserSessionId ||\n result.targetId !== targetId ||\n result.kind !== request.kind ||\n result.targetGeneration !== request.expectedTargetGeneration ||\n result.documentGeneration !== request.expectedDocumentGeneration ||\n result.frameId !== request.expectedFrameId\n ) {\n throw new OpenGeniApiError(502, \"browser DOM read belongs to another binding\");\n }\n return result;\n }\n\n async actInBrowser(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserActionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserActionReceipt> {\n return await this.requestJson<BrowserActionReceipt>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/actions`,\n request,\n {},\n options,\n );\n }\n\n async getBrowserActionReceipt(\n workspaceId: string,\n browserSessionId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserActionReceipt> {\n return await this.requestJson<BrowserActionReceipt>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/operations/${encodeURIComponent(operationId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async listBrowserDiagnostics(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: BrowserDiagnosticsOptions = {},\n ): Promise<BrowserDiagnosticBatch> {\n return await this.requestJson<BrowserDiagnosticBatch>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/diagnostics`,\n undefined,\n {\n ...(options.kinds?.length ? { kinds: options.kinds.join(\",\") } : {}),\n ...(options.after !== undefined ? { after: String(options.after) } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n options.signal ? { signal: options.signal } : {},\n );\n }\n\n async attachBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionAttachmentRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionAttachment> {\n return await this.requestJson<BrowserSessionAttachment>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/attachments`,\n request,\n {},\n options,\n );\n }\n\n async heartbeatBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionHeartbeatResponse> {\n return await this.requestJson<BrowserSessionHeartbeatResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/heartbeat`,\n {},\n {},\n options,\n );\n }\n\n async publishBrowserRevision(\n workspaceId: string,\n browserSessionId: string,\n request: PublishBrowserRevisionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<PublishBrowserRevisionResponse> {\n return await this.requestJson<PublishBrowserRevisionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/revisions`,\n request,\n {},\n options,\n );\n }\n\n async suspendBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.requestJson<BrowserSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/suspend`,\n request,\n {},\n options,\n );\n }\n\n async resumeBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.requestJson<BrowserSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/resume`,\n request,\n {},\n options,\n );\n }\n\n async endBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.requestJson<BrowserSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/end`,\n request,\n {},\n options,\n );\n }\n\n /** Inspect an active browser's preserved working copy after its controller\n * lost it, for example when its machine's disk was restored from a copy.\n * Read-only; returns the exact manifest digest an adoption must name. */\n async inspectBrowserSessionWorkingCopy(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserWorkingCopyInspection> {\n return await this.requestJson<BrowserWorkingCopyInspection>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/working-copy/inspection`,\n {},\n {},\n options,\n );\n }\n\n /** Adopt the exact inspected bytes of a preserved working copy as the\n * browser's state. If the reply is lost, read the recorded outcome of the\n * same operationId instead of sending again. */\n async adoptBrowserSessionWorkingCopy(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserWorkingCopyAdoptionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserWorkingCopyAdoptionResponse> {\n return await this.requestJson<BrowserWorkingCopyAdoptionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/working-copy/adoptions`,\n request,\n {},\n options,\n );\n }\n\n async getBrowserSessionWorkingCopyAdoption(\n workspaceId: string,\n browserSessionId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserWorkingCopyAdoptionResponse> {\n return await this.requestJson<BrowserWorkingCopyAdoptionResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/working-copy/adoptions/${encodeURIComponent(operationId)}`,\n undefined,\n {},\n options,\n );\n }\n\n /** Revert an unfinished adoption: the browser's own directory goes back in\n * place and the staged copy is kept, never used. The supported way out of\n * a collision or of an adoption nobody wants finished. Retrying the same\n * revert finishes one that stopped part way. */\n async revertBrowserSessionWorkingCopyAdoption(\n workspaceId: string,\n browserSessionId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserWorkingCopyAdoptionResponse> {\n return await this.requestJson<BrowserWorkingCopyAdoptionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/working-copy/adoptions/${encodeURIComponent(operationId)}/revert`,\n {},\n {},\n options,\n );\n }\n\n /** Workspace-wide ComputerSession inventory. Associations express\n * relevance, not access; peer sessions intentionally remain discoverable. */\n async listComputerSessions(\n workspaceId: string,\n options: OpenGeniRequestOptions | InteractionSessionListOptions = {},\n ): Promise<ComputerSessionListResponse> {\n const { query, request } = interactionSessionListQuery(options);\n return await this.requestJson<ComputerSessionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions`,\n undefined,\n query,\n request,\n );\n }\n\n async getComputerSession(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSession> {\n return await this.requestJson<ComputerSession>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async readComputerClipboard(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerClipboard> {\n return await this.requestJson<ComputerClipboard>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/clipboard`,\n undefined,\n {},\n options,\n );\n }\n\n async getComputerInputPosture(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionInputPosture> {\n return await this.requestJson<ComputerSessionInputPosture>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/input-posture`,\n undefined,\n {},\n options,\n );\n }\n\n async createComputerSession(\n workspaceId: string,\n request: CreateComputerSessionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionMutationResponse> {\n return await this.requestJson<ComputerSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions`,\n request,\n {},\n options,\n );\n }\n\n async listComputerTargets(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerTargetListResponse> {\n return await this.requestJson<ComputerTargetListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/targets`,\n undefined,\n {},\n options,\n );\n }\n\n async observeComputerTarget(\n workspaceId: string,\n computerSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerObservation> {\n return await this.requestJson<ComputerObservation>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/targets/${encodeURIComponent(targetId)}/observation`,\n undefined,\n {},\n options,\n );\n }\n\n async captureComputerTarget(\n workspaceId: string,\n computerSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerFrame> {\n const response = await this.requestResponse(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/targets/${encodeURIComponent(targetId)}/screenshot`,\n {},\n options,\n );\n const mediaType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim().toLowerCase();\n if (mediaType !== \"image/jpeg\" && mediaType !== \"image/png\") {\n await cancelResponseBody(response, \"computer frame media type is invalid\");\n throw new OpenGeniApiError(502, \"computer frame media type is invalid\");\n }\n const metadataHeader = response.headers.get(\"x-opengeni-computer-frame\");\n if (!metadataHeader || metadataHeader.length > 32 * 1024) {\n await cancelResponseBody(response, \"computer frame metadata is invalid\");\n throw new OpenGeniApiError(502, \"computer frame metadata is invalid\");\n }\n let metadata: ReturnType<typeof decodeComputerFrameMetadataHeader>;\n try {\n metadata = decodeComputerFrameMetadataHeader(metadataHeader);\n } catch {\n await cancelResponseBody(response, \"computer frame metadata is invalid\");\n throw new OpenGeniApiError(502, \"computer frame metadata is invalid\");\n }\n const bytes = await readBoundedResponseBytes(response, 256 * 1024, null);\n const mismatchReason = computerFrameEvidenceMismatchReason(metadata, {\n computerSessionId,\n targetId,\n mediaType,\n sha256: await sha256Hex(bytes),\n });\n if (mismatchReason) {\n throw new OpenGeniApiError(502, \"computer frame evidence does not match its request\");\n }\n return { ...metadata, data: bytes };\n }\n\n async callNativeComputerTool(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerNativeCallRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerNativeReceipt> {\n return await this.requestJson<ComputerNativeReceipt>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/native-calls`,\n request,\n {},\n options,\n );\n }\n\n async actInComputer(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerActionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerActionReceipt> {\n return await this.requestJson<ComputerActionReceipt>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/actions`,\n request,\n {},\n options,\n );\n }\n\n async getNativeComputerToolReceipt(\n workspaceId: string,\n computerSessionId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerNativeReceipt> {\n const receipt = await this.requestJson<ComputerNativeReceipt>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/operations/${encodeURIComponent(operationId)}`,\n undefined,\n {},\n options,\n );\n // The shared receipt endpoint can return either operation kind. Keep the\n // SDK's native/browser bundle schema-free while refusing the wrong kind.\n if (receipt?.targetId !== null) throw new Error(\"Expected a native computer receipt\");\n return receipt;\n }\n\n async getComputerActionReceipt(\n workspaceId: string,\n computerSessionId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerActionReceipt> {\n const receipt = await this.requestJson<ComputerActionReceipt>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/operations/${encodeURIComponent(operationId)}`,\n undefined,\n {},\n options,\n );\n if (typeof receipt?.targetId !== \"string\")\n throw new Error(\"Expected a computer action receipt\");\n return receipt;\n }\n\n async attachComputerSession(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerSessionAttachmentRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionAttachment> {\n const attachment = await this.requestJson<ComputerSessionAttachment>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/attachments`,\n request,\n {},\n options,\n );\n if (attachment.stream.kind === \"direct_rfb\") {\n return {\n ...attachment,\n stream: { ...attachment.stream, inputAllowed: attachment.stream.inputAllowed === true },\n };\n }\n return attachment;\n }\n\n async heartbeatComputerSession(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionHeartbeatResponse> {\n return await this.requestJson<ComputerSessionHeartbeatResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/heartbeat`,\n {},\n {},\n options,\n );\n }\n\n async endComputerSession(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerSessionLifecycleRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionMutationResponse> {\n return await this.requestJson<ComputerSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/end`,\n request,\n {},\n options,\n );\n }\n\n // --- Access + workspaces -----------------------------------------------------\n\n /**\n * The deployment's public client bootstrap config: the host-exposed models\n * (provider-grouped in `models`, flat in `allowedModels` for back-compat),\n * reasoning efforts, MCP servers, file-upload limits, and how the client is\n * expected to authenticate. Drives a composer's model picker without prior\n * knowledge of the host setup; safe to call before any auth is established.\n * Authenticated calls resolve the caller's default workspace, or the exact\n * `workspaceId` option, using the same selection rules as fresh session create.\n */\n async getClientConfig(\n options: OpenGeniRequestOptions & { workspaceId?: string } = {},\n ): Promise<ClientConfig> {\n const config = await this.requestJson<ClientConfig>(\n \"GET\",\n \"/v1/config/client\",\n undefined,\n options.workspaceId === undefined ? {} : { workspaceId: options.workspaceId },\n options,\n );\n if (this.apiContractStrict && config.apiContractRevision !== OPENGENI_API_CONTRACT_REVISION) {\n throw new OpenGeniApiContractMismatchError(\n OPENGENI_API_CONTRACT_REVISION,\n String(config.apiContractRevision || \"(missing)\"),\n );\n }\n return config;\n }\n\n /** Authenticated model definitions plus workspace-specific selectability. */\n async getWorkspaceModelCatalog(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceModelCatalogResponse> {\n return await this.requestJson<WorkspaceModelCatalogResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/model-catalog`,\n undefined,\n {},\n options,\n );\n }\n\n /** List workspace-owned unpinned Vercel AI Gateway model slugs. */\n async listWorkspaceGatewayCustomModels(\n workspaceId: string,\n ): Promise<WorkspaceGatewayCustomModelsResponse> {\n return await this.requestJson<WorkspaceGatewayCustomModelsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/gateway-custom-models`,\n );\n }\n\n /** Add one exact upstream Vercel AI Gateway slug. */\n async createWorkspaceGatewayCustomModel(\n workspaceId: string,\n request: CreateWorkspaceGatewayCustomModelRequest,\n ): Promise<WorkspaceGatewayCustomModel> {\n return await this.requestJson<WorkspaceGatewayCustomModel>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/gateway-custom-models`,\n request,\n );\n }\n\n /** Remove one workspace custom Gateway model by its stable row id. */\n async deleteWorkspaceGatewayCustomModel(\n workspaceId: string,\n customModelId: string,\n request: DeleteWorkspaceGatewayCustomModelRequest,\n ): Promise<void> {\n if (\n !/^[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(\n customModelId,\n )\n ) {\n throw new TypeError(\"customModelId must be a UUID\");\n }\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/gateway-custom-models/${encodeURIComponent(customModelId)}`,\n request,\n );\n }\n\n /** List workspace-owned unpinned OpenRouter model slugs. */\n async listWorkspaceOpenRouterCustomModels(\n workspaceId: string,\n ): Promise<WorkspaceOpenRouterCustomModelsResponse> {\n return await this.requestJson<WorkspaceOpenRouterCustomModelsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/openrouter-custom-models`,\n );\n }\n\n /** Add one exact upstream OpenRouter slug. */\n async createWorkspaceOpenRouterCustomModel(\n workspaceId: string,\n request: CreateWorkspaceOpenRouterCustomModelRequest,\n ): Promise<WorkspaceOpenRouterCustomModel> {\n return await this.requestJson<WorkspaceOpenRouterCustomModel>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/openrouter-custom-models`,\n request,\n );\n }\n\n /** Remove one workspace custom OpenRouter model by its stable row id. */\n async deleteWorkspaceOpenRouterCustomModel(\n workspaceId: string,\n customModelId: string,\n request: DeleteWorkspaceOpenRouterCustomModelRequest,\n ): Promise<void> {\n if (\n !/^[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(\n customModelId,\n )\n ) {\n throw new TypeError(\"customModelId must be a UUID\");\n }\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/openrouter-custom-models/${encodeURIComponent(customModelId)}`,\n request,\n );\n }\n\n /** List workspace-owned exact Opper model ids (pools or provider/model routes). */\n async listWorkspaceOpperCustomModels(\n workspaceId: string,\n ): Promise<WorkspaceOpperCustomModelsResponse> {\n return await this.requestJson<WorkspaceOpperCustomModelsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/opper-custom-models`,\n );\n }\n\n /** Add one exact upstream Opper model id. */\n async createWorkspaceOpperCustomModel(\n workspaceId: string,\n request: CreateWorkspaceOpperCustomModelRequest,\n ): Promise<WorkspaceOpperCustomModel> {\n return await this.requestJson<WorkspaceOpperCustomModel>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/opper-custom-models`,\n request,\n );\n }\n\n /** Remove one workspace custom Opper model by its stable row id. */\n async deleteWorkspaceOpperCustomModel(\n workspaceId: string,\n customModelId: string,\n request: DeleteWorkspaceOpperCustomModelRequest,\n ): Promise<void> {\n if (\n !/^[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(\n customModelId,\n )\n ) {\n throw new TypeError(\"customModelId must be a UUID\");\n }\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/opper-custom-models/${encodeURIComponent(customModelId)}`,\n request,\n );\n }\n\n /** Read metadata for one organization-owned model-provider connection. */\n async getWorkspaceClaudeSubscriptionUsage(workspaceId: string): Promise<ClaudeSubscriptionUsage> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/model-providers/claude_subscription/usage`,\n );\n }\n\n /** Pooled account limits and forecasts; does not contact providers. */\n async getWorkspaceSubscriptionUsagePools(\n workspaceId: string,\n ): Promise<SubscriptionUsagePoolsResponse> {\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/subscription-usage-pools`);\n }\n\n /** Organization subscription limits; uses the account-list administrator boundary. */\n async getOrganizationSubscriptionUsagePools(\n organizationId: string,\n ): Promise<SubscriptionUsagePoolsResponse> {\n return this.requestJson(\"GET\", `/v1/organizations/${organizationId}/subscription-usage-pools`);\n }\n\n async listClaudeSubscriptionAccounts(\n workspaceId: string,\n ): Promise<ClaudeSubscriptionAccountsResponse> {\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/claude/accounts`);\n }\n async activateClaudeSubscriptionAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ activated: boolean; accountId: string }> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/claude/accounts/${encodeURIComponent(accountId)}/activate`,\n {},\n );\n }\n async setClaudeSubscriptionRotationSettings(\n workspaceId: string,\n request: { rotationEnabled: boolean },\n ): Promise<SubscriptionPoolSettings> {\n return this.requestJson(\"PATCH\", `/v1/workspaces/${workspaceId}/claude/settings`, request);\n }\n async setClaudeSubscriptionAccountAllocator(\n workspaceId: string,\n accountId: string,\n request: { enabled: boolean; expectedVersion: number },\n ): Promise<unknown> {\n return this.requestJson(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/claude/accounts/${encodeURIComponent(accountId)}/allocator`,\n request,\n );\n }\n async renameClaudeSubscriptionAccount(\n workspaceId: string,\n accountId: string,\n label: string | null,\n ): Promise<ClaudeSubscriptionAccount> {\n return this.requestJson(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/claude/accounts/${encodeURIComponent(accountId)}`,\n { label },\n );\n }\n async disconnectClaudeSubscriptionAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<unknown> {\n return this.requestJson(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/claude/accounts/${encodeURIComponent(accountId)}`,\n {},\n );\n }\n async getClaudeSubscriptionAccountUsage(\n workspaceId: string,\n accountId: string,\n ): Promise<ClaudeSubscriptionUsage> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/claude/accounts/${encodeURIComponent(accountId)}/usage`,\n );\n }\n async refreshClaudeSubscriptionAccountUsage(\n workspaceId: string,\n accountId: string,\n ): Promise<ClaudeSubscriptionUsage> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/claude/accounts/${encodeURIComponent(accountId)}/usage/refresh`,\n {},\n );\n }\n\n async listOrganizationClaudeSubscriptionAccounts(\n organizationId: string,\n ): Promise<ClaudeSubscriptionAccountsResponse> {\n return this.requestJson(\"GET\", `/v1/organizations/${organizationId}/claude/accounts`);\n }\n async activateOrganizationClaudeSubscriptionAccount(\n organizationId: string,\n accountId: string,\n ): Promise<{ updated: boolean }> {\n return this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/claude/accounts/${encodeURIComponent(accountId)}/activate`,\n {},\n );\n }\n async setOrganizationClaudeSubscriptionRotationSettings(\n organizationId: string,\n request: { rotationEnabled: boolean },\n ): Promise<SubscriptionPoolSettings> {\n return this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/claude/settings`,\n request,\n );\n }\n async setOrganizationClaudeSubscriptionAccountAllocator(\n organizationId: string,\n accountId: string,\n request: { enabled: boolean; expectedVersion: number },\n ): Promise<unknown> {\n return this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/claude/accounts/${encodeURIComponent(accountId)}/allocator`,\n request,\n );\n }\n async renameOrganizationClaudeSubscriptionAccount(\n organizationId: string,\n accountId: string,\n label: string | null,\n ): Promise<{ updated: boolean }> {\n return this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/claude/accounts/${encodeURIComponent(accountId)}`,\n { label },\n );\n }\n async disconnectOrganizationClaudeSubscriptionAccount(\n organizationId: string,\n accountId: string,\n ): Promise<unknown> {\n return this.requestJson(\n \"DELETE\",\n `/v1/organizations/${organizationId}/claude/accounts/${encodeURIComponent(accountId)}`,\n {},\n );\n }\n async getOrganizationClaudeSubscriptionAccountUsage(\n organizationId: string,\n accountId: string,\n ): Promise<ClaudeSubscriptionUsage> {\n return this.requestJson(\n \"GET\",\n `/v1/organizations/${organizationId}/claude/accounts/${encodeURIComponent(accountId)}/usage`,\n );\n }\n async refreshOrganizationClaudeSubscriptionAccountUsage(\n organizationId: string,\n accountId: string,\n ): Promise<ClaudeSubscriptionUsage> {\n return this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/claude/accounts/${encodeURIComponent(accountId)}/usage/refresh`,\n {},\n );\n }\n\n async connectClaudeSubscriptionSetupToken(\n workspaceId: string,\n request: Omit<ClaudeSubscriptionSetupTokenRequest, \"scope\"> & { scope?: \"workspace\" | \"user\" },\n ): Promise<ClaudeSubscriptionOAuthCompleteResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/claude/accounts/setup-token`,\n request,\n );\n }\n async connectOrganizationClaudeSubscriptionSetupToken(\n organizationId: string,\n request: Omit<ClaudeSubscriptionSetupTokenRequest, \"scope\">,\n ): Promise<ClaudeSubscriptionOAuthCompleteResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/claude/accounts/setup-token`,\n request,\n );\n }\n /** Sign in with model and profile access; no inference request is made. */\n async startWorkspaceClaudeSubscriptionOAuth(\n workspaceId: string,\n request: Partial<ClaudeSubscriptionOAuthStartRequest> = {},\n ): Promise<ClaudeSubscriptionOAuthStartResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/model-providers/claude_subscription/oauth/start`,\n request,\n );\n }\n\n async completeWorkspaceClaudeSubscriptionOAuth(\n workspaceId: string,\n request: ClaudeSubscriptionOAuthCompleteRequest,\n ): Promise<ClaudeSubscriptionOAuthCompleteResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/model-providers/claude_subscription/oauth/complete`,\n request,\n );\n }\n\n async startOrganizationClaudeSubscriptionOAuth(\n organizationId: string,\n request: Pick<ClaudeSubscriptionOAuthStartRequest, \"reconnectAccountId\"> = {},\n ): Promise<ClaudeSubscriptionOAuthStartResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/model-providers/claude_subscription/oauth/start`,\n request,\n );\n }\n\n async completeOrganizationClaudeSubscriptionOAuth(\n organizationId: string,\n request: ClaudeSubscriptionOAuthCompleteRequest,\n ): Promise<ClaudeSubscriptionOAuthCompleteResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/model-providers/claude_subscription/oauth/complete`,\n request,\n );\n }\n\n async refreshWorkspaceClaudeSubscriptionUsage(\n workspaceId: string,\n ): Promise<ClaudeSubscriptionUsage> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/model-providers/claude_subscription/usage/refresh`,\n {},\n );\n }\n\n async getOrganizationClaudeSubscriptionUsage(\n organizationId: string,\n ): Promise<ClaudeSubscriptionUsage> {\n return this.requestJson(\n \"GET\",\n `/v1/organizations/${organizationId}/model-providers/claude_subscription/usage`,\n );\n }\n\n async refreshOrganizationClaudeSubscriptionUsage(\n organizationId: string,\n ): Promise<ClaudeSubscriptionUsage> {\n return this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/model-providers/claude_subscription/usage/refresh`,\n {},\n );\n }\n\n /** Read metadata for one organization-owned model-provider connection. */\n async getOrganizationModelProviderConnection(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n ): Promise<OrganizationModelProviderConnection | null> {\n return await this.requestJson<OrganizationModelProviderConnection | null>(\n \"GET\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}`,\n );\n }\n\n /** Connect or rotate one organization-owned provider credential. */\n async upsertOrganizationModelProviderConnection(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n request: UpsertOrganizationModelProviderConnectionRequest,\n ): Promise<OrganizationModelProviderConnection> {\n return await this.requestJson<OrganizationModelProviderConnection>(\n \"PUT\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}`,\n request,\n );\n }\n\n /** Revoke one organization-owned provider credential. */\n async revokeOrganizationModelProviderConnection(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n request: RevokeOrganizationModelProviderConnectionRequest,\n ): Promise<OrganizationModelProviderConnection> {\n return await this.requestJson<OrganizationModelProviderConnection>(\n \"DELETE\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}`,\n request,\n );\n }\n\n /** List workspace-owned Claude model slugs. */\n async listWorkspaceClaudeCustomModels(\n workspaceId: string,\n providerKind: \"anthropic\" | \"claude_subscription\",\n ): Promise<WorkspaceGatewayCustomModelsResponse> {\n return await this.requestJson<WorkspaceGatewayCustomModelsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/model-providers/${providerKind}/custom-models`,\n );\n }\n\n /** Add an immutable workspace-owned Claude model generation. */\n async createWorkspaceClaudeCustomModel(\n workspaceId: string,\n providerKind: \"anthropic\" | \"claude_subscription\",\n request: CreateWorkspaceGatewayCustomModelRequest,\n ): Promise<WorkspaceGatewayCustomModel> {\n return await this.requestJson<WorkspaceGatewayCustomModel>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/model-providers/${providerKind}/custom-models`,\n request,\n );\n }\n\n /** Retire a workspace-owned Claude model generation. */\n async deleteWorkspaceClaudeCustomModel(\n workspaceId: string,\n providerKind: \"anthropic\" | \"claude_subscription\",\n customModelId: string,\n request: DeleteWorkspaceGatewayCustomModelRequest,\n ): Promise<void> {\n if (\n !/^[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(\n customModelId,\n )\n )\n throw new TypeError(\"customModelId must be a UUID\");\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/model-providers/${providerKind}/custom-models/${encodeURIComponent(customModelId)}`,\n request,\n );\n }\n\n /** List organization-owned exact upstream model slugs. */\n async listOrganizationProviderCustomModels(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n ): Promise<OrganizationProviderCustomModelsResponse> {\n return await this.requestJson<OrganizationProviderCustomModelsResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models`,\n );\n }\n\n /** Add one organization-owned exact upstream model slug. */\n async createOrganizationProviderCustomModel(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n request: CreateOrganizationProviderCustomModelRequest,\n ): Promise<OrganizationProviderCustomModel> {\n return await this.requestJson<OrganizationProviderCustomModel>(\n \"POST\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models`,\n request,\n );\n }\n\n /** Retire one organization-owned custom model. */\n async deleteOrganizationProviderCustomModel(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n customModelId: string,\n request: DeleteOrganizationProviderCustomModelRequest,\n ): Promise<OrganizationProviderCustomModel> {\n if (\n !/^[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(\n customModelId,\n )\n ) {\n throw new TypeError(\"customModelId must be a UUID\");\n }\n return await this.requestJson<OrganizationProviderCustomModel>(\n \"DELETE\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models/${encodeURIComponent(customModelId)}`,\n request,\n );\n }\n\n /** Read the workspace's hard provider/model allowlist. */\n async getWorkspaceModelAccessPolicy(workspaceId: string): Promise<WorkspaceModelAccessPolicy> {\n return await this.requestJson<WorkspaceModelAccessPolicy>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/model-policy`,\n );\n }\n\n /** Remove the workspace's own allowlist so it follows its organization's default. */\n async deleteWorkspaceModelAccessPolicy(workspaceId: string): Promise<WorkspaceModelAccessPolicy> {\n return await this.requestJson<WorkspaceModelAccessPolicy>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/model-policy`,\n );\n }\n\n /** The model defaults every workspace in the organization follows (owners and admins). */\n async getOrganizationModelDefaults(organizationId: string): Promise<OrganizationModelDefaults> {\n return await this.requestJson<OrganizationModelDefaults>(\n \"GET\",\n `/v1/organizations/${organizationId}/model-defaults`,\n );\n }\n\n /** Change organization model defaults, field by field (owners and admins). */\n async updateOrganizationModelDefaults(\n organizationId: string,\n request: UpdateOrganizationModelDefaultsRequest,\n ): Promise<OrganizationModelDefaults> {\n return await this.requestJson<OrganizationModelDefaults>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/model-defaults`,\n request,\n );\n }\n\n /** Organization model-account settings and locks (owners and admins). */\n async getOrganizationModelAccountSettings(\n organizationId: string,\n ): Promise<OrganizationModelAccountSettings> {\n return await this.requestJson<OrganizationModelAccountSettings>(\n \"GET\",\n `/v1/organizations/${organizationId}/model-account-settings`,\n );\n }\n\n /** Change organization model-account settings or locks (owners and admins). */\n async updateOrganizationModelAccountSettings(\n organizationId: string,\n request: UpdateOrganizationModelAccountSettingsRequest,\n ): Promise<OrganizationModelAccountSettings> {\n return await this.requestJson<OrganizationModelAccountSettings>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/model-account-settings`,\n request,\n );\n }\n\n /** Every shared workspace's effective model-account settings and their sources (owners and admins). */\n async getModelAccountSettingsOverview(\n organizationId: string,\n options: { after?: string; limit?: number } = {},\n ): Promise<ModelAccountSettingsOverview> {\n const query = new URLSearchParams();\n if (options.after !== undefined) query.set(\"after\", options.after);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n return await this.requestJson<ModelAccountSettingsOverview>(\n \"GET\",\n `/v1/organizations/${organizationId}/model-account-settings/overview${query.size ? `?${query}` : \"\"}`,\n );\n }\n\n /** A workspace's effective model-account settings, sources and overrides. */\n async getWorkspaceModelAccountSettings(\n workspaceId: string,\n ): Promise<WorkspaceModelAccountSettings> {\n return await this.requestJson<WorkspaceModelAccountSettings>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/model-account-settings`,\n );\n }\n\n /** Override, or follow again, the organization's unlocked settings (workspace admins). */\n async updateWorkspaceModelAccountSettings(\n workspaceId: string,\n request: UpdateWorkspaceModelAccountSettingsRequest,\n ): Promise<WorkspaceModelAccountSettings> {\n return await this.requestJson<WorkspaceModelAccountSettings>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/model-account-settings`,\n request,\n );\n }\n\n /** The session's model account, the accounts it may switch to, and the personal settings. */\n async getSessionModelAccount(\n workspaceId: string,\n sessionId: string,\n ): Promise<SessionModelAccountChoiceResponse> {\n return await this.requestJson<SessionModelAccountChoiceResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/model-account`,\n );\n }\n\n /** Choose the session's model account, or `connectionId: null` for automatic selection. */\n async setSessionModelAccount(\n workspaceId: string,\n sessionId: string,\n request: SetSessionModelAccountChoiceRequest,\n ): Promise<SetSessionModelAccountChoiceResponse> {\n return await this.requestJson<SetSessionModelAccountChoiceResponse>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/model-account`,\n request,\n );\n }\n\n /**\n * Your own model-account preferences in an organization. For a person (a\n * signed-in browser, or an agent acting as one); other callers get 404.\n */\n async getModelAccountPreferences(organizationId: string): Promise<ModelAccountPreferences> {\n return await this.requestJson<ModelAccountPreferences>(\n \"GET\",\n `/v1/organizations/${organizationId}/me/model-account-preferences`,\n );\n }\n\n /**\n * Change your own personal-fallback opt-in in an organization. Only a person\n * can: a same-origin browser, or an agent acting as one with full access.\n */\n async updateModelAccountPreferences(\n organizationId: string,\n request: UpdateModelAccountPreferencesRequest,\n ): Promise<ModelAccountPreferences> {\n return await this.requestJson<ModelAccountPreferences>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/me/model-account-preferences`,\n request,\n );\n }\n\n /** Whether owners and admins may give agent sessions admin access (owners and admins). */\n async getOrganizationAgentAdminAccess(\n organizationId: string,\n ): Promise<OrganizationAgentAdminAccess> {\n return await this.requestJson<OrganizationAgentAdminAccess>(\n \"GET\",\n `/v1/organizations/${organizationId}/agent-admin-access`,\n );\n }\n\n /**\n * Allow or stop admin access for agent sessions. Turning it off ends every\n * session's admin access. An owner or admin, in the app.\n */\n async updateOrganizationAgentAdminAccess(\n organizationId: string,\n request: UpdateOrganizationAgentAdminAccessRequest,\n ): Promise<OrganizationAgentAdminAccess> {\n return await this.requestJson<OrganizationAgentAdminAccess>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/agent-admin-access`,\n request,\n );\n }\n\n /**\n * The organization's privacy choices: who sees new chats and schedules by\n * default, and whether admins see that other people's Only me schedules\n * exist. `limits` reports what this deployment fixes. An owner or admin.\n */\n async getOrganizationPrivacySettings(\n organizationId: string,\n ): Promise<OrganizationPrivacySettings> {\n return await this.requestJson<OrganizationPrivacySettings>(\n \"GET\",\n `/v1/organizations/${organizationId}/privacy-settings`,\n );\n }\n\n /** Change the organization's privacy choices, within the deployment's limits. */\n async updateOrganizationPrivacySettings(\n organizationId: string,\n request: UpdateOrganizationPrivacySettingsRequest,\n ): Promise<OrganizationPrivacySettings> {\n return await this.requestJson<OrganizationPrivacySettings>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/privacy-settings`,\n request,\n );\n }\n\n /** Fully replace the workspace's hard provider/model allowlist. */\n async updateWorkspaceModelAccessPolicy(\n workspaceId: string,\n request: UpdateWorkspaceModelAccessPolicyRequest,\n ): Promise<WorkspaceModelAccessPolicy> {\n return await this.requestJson<WorkspaceModelAccessPolicy>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/model-policy`,\n request,\n );\n }\n\n /** Authenticated realtime voice models and credential readiness. */\n async getWorkspaceRealtimeModelCatalog(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceRealtimeModelCatalogResponse> {\n return await this.requestJson<WorkspaceRealtimeModelCatalogResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/realtime-model-catalog`,\n undefined,\n {},\n options,\n );\n }\n\n /**\n * The caller's subject, grants, defaults, and optional direct API-key authority.\n * `credential.effectiveWorkspacePermissions` expands workspace admin only for\n * legacy keys; explicit policies retain exactly their selected grants. Full\n * organization keys can provision shared workspaces, external members, and\n * `asUser` sessions; user requests additionally need live membership.\n * Organization-key scope excludes Personal workspaces. Neither key kind bypasses\n * session visibility or the explicit `secrets:read` permission requirement. Credential\n * metadata is omitted for `asUser`/external actors, humans, delegated tokens,\n * other caller contexts, and older servers.\n */\n async getAccessContext(): Promise<AccessContext> {\n return await this.requestJson<AccessContext>(\"GET\", \"/v1/access/me\");\n }\n\n /** Active organization memberships proven by the current managed-human session. */\n async listOrganizationMemberships(): Promise<ListManagedOrganizationMembershipsResponse> {\n return await this.requestJson<ListManagedOrganizationMembershipsResponse>(\n \"GET\",\n \"/v1/organization-memberships\",\n );\n }\n\n /** Bounded owner-only personal-resource authority page for one exact resource kind. */\n async listUserResourceAuthorities(\n workspaceId: string,\n options: ListUserResourceAuthoritiesOptions,\n ): Promise<ListUserResourceAuthoritiesResponse> {\n const query = new URLSearchParams({\n scope: \"user\",\n resourceKind: options.resourceKind,\n });\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n return await this.requestJson<ListUserResourceAuthoritiesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/user-resource-authorities?${query.toString()}`,\n );\n }\n\n /** Revoke an owner grant through the exact workspace it targets. */\n async revokeUserResourceGrant(\n workspaceId: string,\n grantId: string,\n ): Promise<RevokeUserResourceGrantResponse> {\n return await this.requestJson<RevokeUserResourceGrantResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/user-resource-authorities/grants/${grantId}?scope=user`,\n );\n }\n\n /** Create a new organization owned by the current managed human. */\n async createOrganization(\n request: CreateOrganizationRequest,\n ): Promise<CreateOrganizationResponse> {\n return await this.requestJson<CreateOrganizationResponse>(\"POST\", \"/v1/organizations\", request);\n }\n\n /** Create another organization owned by the current managed human. */\n async createAdditionalOrganization(\n request: CreateAdditionalOrganizationRequest,\n ): Promise<CreateAdditionalOrganizationResponse> {\n return await this.requestJson<CreateAdditionalOrganizationResponse>(\n \"POST\",\n \"/v1/organizations/additional\",\n request,\n );\n }\n\n /** Pending and historical invitations addressed to the current managed human. */\n async listOrganizationInvitations(\n options: { cursor?: string; limit?: number } = {},\n ): Promise<ListOrganizationInvitationsPageResponse> {\n const query = new URLSearchParams();\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<ListOrganizationInvitationsPageResponse>(\n \"GET\",\n `/v1/organization-invitations${suffix}`,\n );\n }\n\n /** Admin-only deterministic page of invitations for one organization. */\n async listOrganizationInvitationsForOrganization(\n organizationId: string,\n options: { cursor?: string; limit?: number } = {},\n ): Promise<ListOrganizationInvitationsPageResponse> {\n const query = new URLSearchParams();\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<ListOrganizationInvitationsPageResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/invitations${suffix}`,\n );\n }\n\n async createOrganizationInvitation(\n organizationId: string,\n request: CreateOrganizationInvitationRequest,\n ): Promise<OrganizationInvitation> {\n return await this.requestJson<OrganizationInvitation>(\n \"POST\",\n `/v1/organizations/${organizationId}/invitations`,\n request,\n );\n }\n\n async acceptOrganizationInvitation(\n invitationId: string,\n request: AcceptOrganizationInvitationRequest,\n ): Promise<AcceptOrganizationInvitationResponse> {\n return await this.requestJson<AcceptOrganizationInvitationResponse>(\n \"POST\",\n `/v1/organization-invitations/${invitationId}/accept`,\n request,\n );\n }\n\n async revokeOrganizationInvitation(\n organizationId: string,\n invitationId: string,\n request: RevokeOrganizationInvitationRequest,\n ): Promise<OrganizationInvitation> {\n return await this.requestJson<OrganizationInvitation>(\n \"POST\",\n `/v1/organizations/${organizationId}/invitations/${invitationId}/revoke`,\n request,\n );\n }\n\n async listOrganizationAdministrationMembers(\n organizationId: string,\n ): Promise<ListOrganizationAdministrationMembersResponse> {\n return await this.requestJson<ListOrganizationAdministrationMembersResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/members`,\n );\n }\n\n /** @deprecated Use listOrganizationAdministrationMembers for its privacy-safe projection. */\n async listOrganizationMembers(\n organizationId: string,\n ): Promise<ListOrganizationAdministrationMembersResponse> {\n return await this.listOrganizationAdministrationMembers(organizationId);\n }\n\n /** Canonical organization identity and every non-personal workspace access roster. */\n async getOrganizationAdministrationOverview(\n organizationId: string,\n ): Promise<OrganizationAdministrationOverview> {\n return await this.requestJson<OrganizationAdministrationOverview>(\n \"GET\",\n `/v1/organizations/${organizationId}/overview`,\n );\n }\n\n /** Create a shared workspace and grant its creator explicit workspace-admin access. */\n async createOrganizationWorkspace(\n organizationId: string,\n request: CreateOrganizationWorkspaceRequest,\n ): Promise<OrganizationWorkspaceAccess> {\n return await this.requestJson<OrganizationWorkspaceAccess>(\n \"POST\",\n `/v1/organizations/${organizationId}/workspaces`,\n request,\n );\n }\n\n /** Rename one shared workspace under an exact optimistic-concurrency fence. */\n async updateOrganizationWorkspace(\n organizationId: string,\n workspaceId: string,\n request: UpdateOrganizationWorkspaceRequest,\n ): Promise<OrganizationWorkspaceAccess> {\n return await this.requestJson<OrganizationWorkspaceAccess>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}`,\n request,\n );\n }\n\n async updateOrganizationWorkspaceSettings(\n organizationId: string,\n workspaceId: string,\n request: UpdateWorkspaceSettingsRequest,\n ): Promise<Workspace> {\n return await this.requestJson<Workspace>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}/settings`,\n request,\n );\n }\n\n /**\n * Delete an organization (shared) workspace. Accepts an organization owner\n * session or an organization API key with `workspace:admin` (for tenant\n * offboarding); never deletes a Personal workspace. 409 until quiescent.\n */\n async deleteOrganizationWorkspace(organizationId: string, workspaceId: string): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}`,\n );\n }\n\n async putOrganizationWorkspaceMember(\n organizationId: string,\n workspaceId: string,\n membershipId: string,\n request: PutOrganizationWorkspaceMemberRequest,\n ): Promise<OrganizationWorkspaceAccessMember> {\n return await this.requestJson<OrganizationWorkspaceAccessMember>(\n \"PUT\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}/members/${membershipId}`,\n request,\n );\n }\n\n async revokeOrganizationWorkspaceMember(\n organizationId: string,\n workspaceId: string,\n membershipId: string,\n request: RevokeOrganizationWorkspaceMemberRequest,\n ): Promise<RevokeOrganizationWorkspaceMemberResponse> {\n return await this.requestJson<RevokeOrganizationWorkspaceMemberResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}/members/${membershipId}/revoke`,\n request,\n );\n }\n\n /** Rename the organization under an exact optimistic-concurrency fence. */\n async updateOrganizationName(\n organizationId: string,\n request: UpdateOrganizationNameRequest,\n ): Promise<OrganizationSummary> {\n return await this.requestJson<OrganizationSummary>(\n \"PATCH\",\n `/v1/organizations/${organizationId}`,\n request,\n );\n }\n\n async updateOrganizationMember(\n organizationId: string,\n membershipId: string,\n request: UpdateOrganizationMemberRequest,\n ): Promise<OrganizationMember> {\n return await this.requestJson<OrganizationMember>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/members/${membershipId}`,\n request,\n );\n }\n\n async getOrganizationRetentionPolicy(\n organizationId: string,\n ): Promise<OrganizationRetentionPolicy> {\n return await this.requestJson<OrganizationRetentionPolicy>(\n \"GET\",\n `/v1/organizations/${organizationId}/retention-policy`,\n );\n }\n\n async updateOrganizationRetentionPolicy(\n organizationId: string,\n request: UpdateOrganizationRetentionPolicyRequest,\n ): Promise<OrganizationRetentionPolicy> {\n return await this.requestJson<OrganizationRetentionPolicy>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/retention-policy`,\n request,\n );\n }\n\n async getOrganizationRecovery(organizationId: string): Promise<OrganizationRecoveryOverview> {\n return await this.requestJson<OrganizationRecoveryOverview>(\n \"GET\",\n `/v1/organizations/${organizationId}/recovery`,\n );\n }\n\n async configureOrganizationRecoveryPolicy(\n organizationId: string,\n request: ConfigureOrganizationRecoveryPolicyRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"PUT\",\n `/v1/organizations/${organizationId}/recovery/policy`,\n request,\n );\n }\n\n async acceptOrganizationRecoveryCustody(\n organizationId: string,\n request: AcceptOrganizationRecoveryCustodyRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/policy/accept`,\n request,\n );\n }\n\n async disableOrganizationRecoveryPolicy(\n organizationId: string,\n request: DisableOrganizationRecoveryPolicyRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/policy/disable`,\n request,\n );\n }\n\n async startOrganizationRecoveryOperation(\n organizationId: string,\n request: StartOrganizationRecoveryOperationRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/operations`,\n request,\n );\n }\n\n async approveOrganizationRecoveryOperation(\n organizationId: string,\n recoveryOperationId: string,\n request: OrganizationRecoveryOperationCommandRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/operations/${recoveryOperationId}/approve`,\n request,\n );\n }\n\n async cancelOrganizationRecoveryOperation(\n organizationId: string,\n recoveryOperationId: string,\n request: OrganizationRecoveryOperationCommandRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/operations/${recoveryOperationId}/cancel`,\n request,\n );\n }\n\n async executeOrganizationRecoveryOperation(\n organizationId: string,\n recoveryOperationId: string,\n request: OrganizationRecoveryOperationCommandRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/operations/${recoveryOperationId}/execute`,\n request,\n );\n }\n\n async searchPublicSkills(workspaceId: string, query: string) {\n return this.requestJson<{\n provider: \"skills_sh\";\n query: string;\n items: Array<{\n id: string;\n name: string;\n source: string;\n skillId: string;\n url: string;\n installs: number;\n }>;\n nextCursor: null;\n }>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/skills/search?q=${encodeURIComponent(query)}`,\n );\n }\n\n async listWorkspaces(): Promise<Workspace[]> {\n return await this.requestJson<Workspace[]>(\"GET\", \"/v1/workspaces\");\n }\n\n /** Uses this client's fixed actor and standard contract/error/abort handling.\n * Disconnect revokes Opengeni connection access, not upstream provider consent. */\n\n connectTransport(): import(\"@opengeni/connect\").ConnectTransport {\n const root = (workspaceId: string) =>\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/connect`;\n return {\n catalog: (workspaceId, options) =>\n this.requestJson(\"GET\", `${root(workspaceId)}/catalog`, undefined, undefined, options),\n accounts: (workspaceId, options) =>\n this.requestJson(\"GET\", `${root(workspaceId)}/accounts`, undefined, undefined, options),\n pending: (workspaceId, options) =>\n this.requestJson(\"GET\", `${root(workspaceId)}/attempts`, undefined, undefined, options),\n begin: (workspaceId, input, options) =>\n this.requestJson(\"POST\", `${root(workspaceId)}/attempts`, input, undefined, options),\n get: (workspaceId, id, options) =>\n this.requestJson(\n \"GET\",\n `${root(workspaceId)}/attempts/${encodeURIComponent(id)}`,\n undefined,\n undefined,\n options,\n ),\n advance: (workspaceId, id, input, options) =>\n this.requestJson(\n \"POST\",\n `${root(workspaceId)}/attempts/${encodeURIComponent(id)}/advance`,\n input,\n undefined,\n options,\n ),\n cancel: (workspaceId, id, input, options) =>\n this.requestJson(\n \"POST\",\n `${root(workspaceId)}/attempts/${encodeURIComponent(id)}/cancel`,\n input,\n undefined,\n options,\n ),\n disconnect: async (workspaceId, id, options) => {\n if (id.startsWith(\"social:\")) {\n const connectionId = id.slice(\"social:\".length);\n if (!/^[0-9a-f-]{36}$/i.test(connectionId)) throw new Error(\"Invalid social account ID\");\n await this.disconnectSocialConnection(workspaceId, connectionId);\n return;\n }\n if (id.startsWith(\"lens-registration:\")) {\n const registrationId = id.slice(\"lens-registration:\".length);\n if (\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(registrationId)\n )\n throw new Error(\"Invalid Lens registration ID\");\n await this.requestJson(\n \"DELETE\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/pr-review/registrations/${registrationId}`,\n undefined,\n undefined,\n options,\n );\n return;\n }\n if (id.startsWith(\"github-installation:\")) {\n const installationId = id.slice(\"github-installation:\".length);\n if (\n !/^[1-9][0-9]*$/.test(installationId) ||\n !Number.isSafeInteger(Number(installationId))\n )\n throw new Error(\"Invalid GitHub installation ID\");\n await this.requestJson(\n \"DELETE\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/github/installations/${installationId}`,\n undefined,\n undefined,\n options,\n );\n return;\n }\n const expectedVersion = options?.expectedVersion;\n if (\n expectedVersion !== undefined &&\n (!Number.isSafeInteger(expectedVersion) || expectedVersion < 1)\n ) {\n throw new Error(\"invalid expected connection version\");\n }\n const query = expectedVersion === undefined ? \"\" : `?expectedVersion=${expectedVersion}`;\n await this.requestJson(\n \"DELETE\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/connections/${encodeURIComponent(id)}${query}`,\n undefined,\n undefined,\n options,\n );\n },\n };\n }\n\n /** Browse first-party Atlassian sources without choosing or starting sync. */\n async browseAtlassianSources(\n workspaceId: string,\n connectionId: string,\n ): Promise<import(\"@opengeni/contracts/atlassian\").AtlassianBrowseResponse> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/atlassian/${connectionId}/browse`,\n );\n }\n\n async saveAtlassianSources(\n workspaceId: string,\n connectionId: string,\n request: import(\"@opengeni/contracts/atlassian\").SaveAtlassianSourcesRequest,\n ): Promise<import(\"./types\").ConnectionResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/atlassian/${connectionId}/source`,\n request,\n );\n }\n\n async setAtlassianLifecycle(\n workspaceId: string,\n connectionId: string,\n request: import(\"@opengeni/contracts/atlassian\").AtlassianLifecycleActionRequest,\n ): Promise<import(\"./types\").ConnectionResponse> {\n return this.requestJson(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/connections/atlassian/${connectionId}/lifecycle`,\n request,\n );\n }\n\n /** Begin durable setup. Completion requirements are provider-specific. */\n beginConnect(\n workspaceId: string,\n request: {\n providerId: string;\n ownership: \"personal\" | \"workspace\";\n returnUrl: string;\n idempotencyKey: string;\n reconnectAccountId?: string;\n installationTarget?: import(\"@opengeni/contracts/connect\").ConnectInstallationTarget;\n },\n ): Promise<import(\"@opengeni/contracts/connect\").ConnectAttempt>;\n beginConnect(\n workspaceId: string,\n request: import(\"@opengeni/contracts/connect\").BeginConnectRequest,\n ): Promise<import(\"@opengeni/contracts/connect\").ConnectAttempt>;\n async beginConnect(\n workspaceId: string,\n request: {\n providerId: string;\n ownership: \"personal\" | \"workspace\";\n returnUrl: string;\n idempotencyKey: string;\n reconnectAccountId?: string;\n installationTarget?: import(\"@opengeni/contracts/connect\").ConnectInstallationTarget;\n mcpSetup?: import(\"@opengeni/contracts/connect\").PreparedMcpSetup;\n },\n ): Promise<import(\"@opengeni/contracts/connect\").ConnectAttempt> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/connect/attempts`, request);\n }\n\n async createWorkspace(request: CreateWorkspaceRequest): Promise<Workspace> {\n return await this.requestJson<Workspace>(\"POST\", \"/v1/workspaces\", request);\n }\n\n /**\n * Create an organization workspace once for a stable external tenant\n * identity, or return the existing workspace without overwriting it.\n */\n async ensureWorkspace(request: EnsureWorkspaceRequest): Promise<EnsureWorkspaceResponse> {\n return await this.requestJson<EnsureWorkspaceResponse>(\n \"PUT\",\n \"/v1/workspaces/external\",\n request,\n );\n }\n\n async getWorkspace(workspaceId: string): Promise<Workspace> {\n return await this.requestJson<Workspace>(\"GET\", `/v1/workspaces/${workspaceId}`);\n }\n\n /** Read-time, secret-safe inventory of policy heads and visible workspace knowledge. */\n async getWorkspaceState(\n workspaceId: string,\n options: WorkspaceStateGetOptions = {},\n ): Promise<WorkspaceStateResponse> {\n const params = new URLSearchParams();\n if (options.attemptId) params.set(\"attemptId\", options.attemptId);\n const query = params.size > 0 ? `?${params.toString()}` : \"\";\n return await this.requestJson<WorkspaceStateResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/workspace-state${query}`,\n );\n }\n\n /** Download the canonical, explicitly sanitized Workspace State export. */\n async exportWorkspaceState(\n workspaceId: string,\n options: WorkspaceStateGetOptions = {},\n ): Promise<WorkspaceStateExportResponse> {\n const params = new URLSearchParams();\n if (options.attemptId) params.set(\"attemptId\", options.attemptId);\n const query = params.size > 0 ? `?${params.toString()}` : \"\";\n return await this.requestJson<WorkspaceStateExportResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/workspace-state/export${query}`,\n );\n }\n\n async updateWorkspace(workspaceId: string, request: UpdateWorkspaceRequest): Promise<Workspace> {\n return await this.requestJson<Workspace>(\"PATCH\", `/v1/workspaces/${workspaceId}`, request);\n }\n\n /** Inspect immutable instruction-policy history, active heads, and activation audit evidence. */\n async listWorkspaceInstructionPolicies(\n workspaceId: string,\n options: WorkspaceInstructionPolicyListOptions = {},\n ): Promise<WorkspaceInstructionPolicyListResponse> {\n const params = new URLSearchParams();\n if (options.kind !== undefined) params.set(\"kind\", options.kind);\n if (options.scope !== undefined) params.set(\"scope\", options.scope);\n if (options.roleKey !== undefined) params.set(\"roleKey\", options.roleKey);\n if (options.afterRevision !== undefined) {\n params.set(\"afterRevision\", String(options.afterRevision));\n }\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<WorkspaceInstructionPolicyListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/instruction-policies${query ? `?${query}` : \"\"}`,\n );\n }\n\n /** Inspect the bounded, permission-filtered governed-learning timeline. */\n async getWorkspaceLearningHistory(\n workspaceId: string,\n options: WorkspaceLearningHistoryOptions = {},\n ): Promise<WorkspaceLearningHistoryResponse> {\n const params = new URLSearchParams();\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<WorkspaceLearningHistoryResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/learning${query ? `?${query}` : \"\"}`,\n );\n }\n\n async undoGovernedLearningActivation(\n workspaceId: string,\n activationReceiptId: string,\n request: { operationId?: string } = {},\n ): Promise<GovernedLearningActivationUndoReceipt> {\n return await this.requestJson<GovernedLearningActivationUndoReceipt>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/learning/activations/${encodeURIComponent(activationReceiptId)}/undo`,\n request,\n );\n }\n\n async getWorkspaceInstructionPolicyRevision(\n workspaceId: string,\n revisionId: string,\n ): Promise<WorkspaceInstructionPolicyRevision> {\n return await this.requestJson<WorkspaceInstructionPolicyRevision>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/instruction-policies/${encodeURIComponent(revisionId)}`,\n );\n }\n\n async createWorkspaceInstructionPolicyDraft(\n workspaceId: string,\n request: CreateWorkspaceInstructionPolicyDraftRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceInstructionPolicyRevision> {\n return await this.requestSessionCommand<WorkspaceInstructionPolicyRevision>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/drafts`,\n request,\n options,\n );\n }\n\n /** List the newest immutable onboarding proposals and their inactive policy drafts. */\n async listWorkspaceInstructionPolicyOnboardingProposals(\n workspaceId: string,\n options: WorkspaceInstructionPolicyOnboardingProposalListOptions = {},\n ): Promise<WorkspaceInstructionPolicyOnboardingProposalListResponse> {\n const params = new URLSearchParams();\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<WorkspaceInstructionPolicyOnboardingProposalListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/instruction-policies/onboarding-proposals${query ? `?${query}` : \"\"}`,\n );\n }\n\n /** Create one draft-only proposal against an exact active-policy baseline. */\n async createWorkspaceInstructionPolicyOnboardingProposal(\n workspaceId: string,\n request: CreateWorkspaceInstructionPolicyOnboardingProposalRequest,\n ): Promise<WorkspaceInstructionPolicyOnboardingProposal> {\n return await this.requestJson<WorkspaceInstructionPolicyOnboardingProposal>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/onboarding-proposals`,\n request,\n );\n }\n\n /** Import the stored legacy workspace override as an inactive charter draft. */\n async importLegacyWorkspaceInstructionPolicyDraft(\n workspaceId: string,\n request: ImportLegacyWorkspaceInstructionPolicyDraftRequest = {},\n ): Promise<WorkspaceInstructionPolicyRevision> {\n return await this.requestJson<WorkspaceInstructionPolicyRevision>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/import-legacy`,\n request,\n );\n }\n\n async diffWorkspaceInstructionPolicyRevisions(\n workspaceId: string,\n request: WorkspaceInstructionPolicyDiffRequest,\n ): Promise<WorkspaceInstructionPolicyDiffResponse> {\n const params = new URLSearchParams({\n fromRevisionId: request.fromRevisionId,\n toRevisionId: request.toRevisionId,\n });\n return await this.requestJson<WorkspaceInstructionPolicyDiffResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/instruction-policies/diff?${params}`,\n );\n }\n\n async activateWorkspaceInstructionPolicyRevision(\n workspaceId: string,\n revisionId: string,\n request: ActivateWorkspaceInstructionPolicyRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceInstructionPolicyActivationResponse> {\n return await this.requestSessionCommand<WorkspaceInstructionPolicyActivationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/${encodeURIComponent(revisionId)}/activate`,\n request,\n options,\n );\n }\n\n async rollbackWorkspaceInstructionPolicyRevision(\n workspaceId: string,\n request: RollbackWorkspaceInstructionPolicyRequest,\n ): Promise<WorkspaceInstructionPolicyActivationResponse> {\n return await this.requestJson<WorkspaceInstructionPolicyActivationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/rollback`,\n request,\n );\n }\n\n /** Read the current organization profile plus immutable revision and activation history. */\n async listCompanyProfile(\n workspaceId: string,\n options: CompanyProfileListOptions = {},\n ): Promise<CompanyProfileListResponse> {\n const params = new URLSearchParams();\n if (options.afterRevision !== undefined)\n params.set(\"afterRevision\", String(options.afterRevision));\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<CompanyProfileListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-profile${query ? `?${query}` : \"\"}`,\n );\n }\n\n async getCompanyProfileRevision(\n workspaceId: string,\n revisionId: string,\n ): Promise<CompanyProfileRevision> {\n return await this.requestJson<CompanyProfileRevision>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-profile/revisions/${encodeURIComponent(revisionId)}`,\n );\n }\n\n async getCompanyProfileAgentPolicy(workspaceId: string): Promise<CompanyProfileAgentPolicy> {\n return await this.requestJson<CompanyProfileAgentPolicy>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-profile/agent-policy`,\n );\n }\n\n async updateCompanyProfileAgentPolicy(\n workspaceId: string,\n request: UpdateCompanyProfileAgentPolicyRequest,\n ): Promise<CompanyProfileAgentPolicy> {\n return await this.requestJson<CompanyProfileAgentPolicy>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/company-profile/agent-policy`,\n request,\n );\n }\n\n async updateCompanyProfile(\n workspaceId: string,\n request: UpdateCompanyProfileRequest,\n ): Promise<CompanyProfileMutationResponse> {\n return await this.requestJson<CompanyProfileMutationResponse>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/company-profile`,\n request,\n );\n }\n\n async diffCompanyProfileRevisions(\n workspaceId: string,\n request: CompanyProfileDiffRequest,\n ): Promise<CompanyProfileDiffResponse> {\n const params = new URLSearchParams(request);\n return await this.requestJson<CompanyProfileDiffResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-profile/diff?${params}`,\n );\n }\n\n async activateCompanyProfileRevision(\n workspaceId: string,\n revisionId: string,\n request: ActivateCompanyProfileRevisionRequest,\n ): Promise<CompanyProfileMutationResponse> {\n return await this.requestJson<CompanyProfileMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/company-profile/revisions/${encodeURIComponent(revisionId)}/activate`,\n request,\n );\n }\n\n async rollbackCompanyProfile(\n workspaceId: string,\n request: RollbackCompanyProfileRequest,\n ): Promise<CompanyProfileMutationResponse> {\n return await this.requestJson<CompanyProfileMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/company-profile/rollback`,\n request,\n );\n }\n\n async listPreferenceRegistry(\n workspaceId: string,\n options: PreferenceRegistryListOptions = {},\n ): Promise<PreferenceRegistryListResponse> {\n const params = new URLSearchParams();\n if (options.scope) params.set(\"scope\", options.scope);\n if (options.status) params.set(\"status\", options.status);\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<PreferenceRegistryListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/preferences${query ? `?${query}` : \"\"}`,\n );\n }\n\n async getPreferenceRegistry(\n workspaceId: string,\n preferenceId: string,\n ): Promise<PreferenceRegistryDetailResponse> {\n return await this.requestJson<PreferenceRegistryDetailResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}`,\n );\n }\n\n async createPreferenceRegistryProposal(\n workspaceId: string,\n request: CreatePreferenceRegistryProposalRequest,\n ): Promise<PreferenceRegistryRecord> {\n return await this.requestJson<PreferenceRegistryRecord>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/proposals`,\n request,\n );\n }\n\n async activatePreferenceRegistryRevision(\n workspaceId: string,\n preferenceId: string,\n request: ActivatePreferenceRegistryRevisionRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/activate`,\n request,\n );\n }\n\n async correctPreferenceRegistry(\n workspaceId: string,\n preferenceId: string,\n request: CorrectPreferenceRegistryRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/correct`,\n request,\n );\n }\n\n async changePreferenceRegistryScope(\n workspaceId: string,\n preferenceId: string,\n request: ChangePreferenceRegistryScopeRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/scope`,\n request,\n );\n }\n\n async deactivatePreferenceRegistry(\n workspaceId: string,\n preferenceId: string,\n request: DeactivatePreferenceRegistryRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/deactivate`,\n request,\n );\n }\n\n async supersedePreferenceRegistry(\n workspaceId: string,\n preferenceId: string,\n request: SupersedePreferenceRegistryRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/supersede`,\n request,\n );\n }\n\n async rejectPreferenceRegistryProposal(\n workspaceId: string,\n preferenceId: string,\n request: RejectPreferenceRegistryProposalRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/reject`,\n request,\n );\n }\n\n async getPreferenceRegistrySummary(workspaceId: string): Promise<PreferenceRegistrySnapshot> {\n return await this.requestJson<PreferenceRegistrySnapshot>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/preferences/summary`,\n );\n }\n\n async getPreferenceRegistryFullContent(\n workspaceId: string,\n retrievalHandle: string,\n ): Promise<PreferenceRegistryFullContent> {\n return await this.requestJson<PreferenceRegistryFullContent>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/full-content`,\n { retrievalHandle },\n );\n }\n\n /**\n * Delete a workspace and everything in it. Refused (409) for the account's\n * only workspace and while it still has a running session. Irreversible.\n */\n async deleteWorkspace(workspaceId: string): Promise<void> {\n await this.requestVoid(\"DELETE\", `/v1/workspaces/${workspaceId}`);\n }\n\n // --- Members (\"People with access\") -------------------------------------------\n\n /** The workspace's members (user + api_key subjects). */\n async listWorkspaceMembers(workspaceId: string): Promise<WorkspaceMember[]> {\n const response = await this.requestJson<ListWorkspaceMembersResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/members`,\n );\n return response.members;\n }\n\n /** Active organization members who can be added to this workspace. */\n async listWorkspaceMemberCandidates(workspaceId: string): Promise<WorkspaceMemberCandidate[]> {\n const response = await this.requestJson<ListWorkspaceMemberCandidatesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/member-candidates`,\n );\n return response.members;\n }\n\n /**\n * Add one active member selected from the workspace candidate inventory.\n */\n async addWorkspaceMember(\n workspaceId: string,\n request: AddWorkspaceMemberRequest,\n ): Promise<WorkspaceMember> {\n return await this.requestJson<WorkspaceMember>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/members`,\n request,\n );\n }\n\n async updateWorkspaceMember(\n workspaceId: string,\n subjectId: string,\n request: UpdateWorkspaceMemberRequest,\n ): Promise<WorkspaceMember> {\n return await this.requestJson<WorkspaceMember>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/members/${encodeURIComponent(subjectId)}`,\n request,\n );\n }\n\n /**\n * Remove a member. Refused (409) for your own membership and for the last\n * member who can still manage the workspace.\n */\n async removeWorkspaceMember(workspaceId: string, subjectId: string): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/members/${encodeURIComponent(subjectId)}`,\n );\n }\n\n /** Exchange one signed Slack bearer for durable, token-free continuation state. */\n async prepareSlackUserLinkAccess(\n workspaceId: string,\n request: PrepareSlackUserLinkAccessRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/slack/user-link-intents`,\n request,\n );\n }\n\n async getSlackUserLinkAccess(\n workspaceId: string,\n requestId: string,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/slack/user-link-intents/${requestId}`,\n );\n }\n\n async requestSlackUserLinkWorkspaceAccess(\n workspaceId: string,\n requestId: string,\n request: SlackUserLinkAccessMutationRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/slack/user-link-intents/${requestId}/request-access`,\n request,\n );\n }\n\n async cancelSlackUserLinkAccess(\n workspaceId: string,\n requestId: string,\n request: SlackUserLinkAccessMutationRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/slack/user-link-intents/${requestId}/cancel`,\n request,\n );\n }\n\n async listSlackUserLinkAccessRequests(\n workspaceId: string,\n ): Promise<SlackUserLinkAccessRequest[]> {\n const response = await this.requestJson<ListSlackUserLinkAccessRequestsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/members/access-requests/slack`,\n );\n return response.requests;\n }\n\n async approveSlackUserLinkAccessRequest(\n workspaceId: string,\n requestId: string,\n request: ApproveSlackUserLinkAccessRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/members/access-requests/slack/${requestId}/approve`,\n request,\n );\n }\n\n async denySlackUserLinkAccessRequest(\n workspaceId: string,\n requestId: string,\n request: SlackUserLinkAccessMutationRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/members/access-requests/slack/${requestId}/deny`,\n request,\n );\n }\n\n // --- Scheduled tasks (write + runs) -------------------------------------------\n\n async createScheduledTask(\n workspaceId: string,\n request: CreateScheduledTaskRequest,\n ): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks`,\n normalizeScheduledTaskMachineTarget(request),\n );\n }\n\n async updateScheduledTask(\n workspaceId: string,\n taskId: string,\n request: UpdateScheduledTaskRequest,\n ): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}`,\n normalizeScheduledTaskMachineTarget(request),\n );\n }\n\n async pauseScheduledTask(workspaceId: string, taskId: string): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/pause`,\n );\n }\n\n /** Admins: other people's Only me schedules, as summaries without names or prompts. */\n async listPrivateScheduledTaskSummaries(\n workspaceId: string,\n ): Promise<{ schedules: PrivateScheduledTaskSummary[] }> {\n return await this.requestJson<{ schedules: PrivateScheduledTaskSummary[] }>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/private-summaries`,\n );\n }\n\n /** Admins: pause someone else's Only me schedule. Only its owner can resume it. */\n async pausePrivateScheduledTask(\n workspaceId: string,\n taskId: string,\n ): Promise<PrivateScheduledTaskSummary> {\n return await this.requestJson<PrivateScheduledTaskSummary>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/private-summaries/${taskId}/pause`,\n );\n }\n\n async resumeScheduledTask(workspaceId: string, taskId: string): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/resume`,\n );\n }\n\n /**\n * Fire the task immediately (manual trigger), independent of its schedule.\n * Pass a stable `triggerId` to make a retried trigger idempotent — the same\n * token charges once and starts one run. Omit it and each call is distinct.\n */\n async triggerScheduledTask(\n workspaceId: string,\n taskId: string,\n options: { triggerId?: string } = {},\n ): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/trigger`,\n options.triggerId ? { triggerId: options.triggerId } : undefined,\n );\n }\n\n async deleteScheduledTask(workspaceId: string, taskId: string): Promise<void> {\n await this.requestJson<unknown>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}`,\n );\n }\n\n async listScheduledTaskRuns(\n workspaceId: string,\n taskId: string,\n options: { limit?: number } = {},\n ): Promise<ScheduledTaskRun[]> {\n return await this.requestJson<ScheduledTaskRun[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/runs`,\n undefined,\n {\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n );\n }\n\n /**\n * Re-freeze a task's connectors, connector accounts and Opengeni tool policy\n * with the signed-in caller's current authority. Pass the `executionDigest`\n * of the task whose `policyDrift` was reviewed; a changed task returns 409.\n */\n async refreshScheduledTaskAccess(\n workspaceId: string,\n taskId: string,\n request: RefreshScheduledTaskAccessRequest,\n ): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/refresh-access`,\n request,\n );\n }\n\n /** Schedules the caller can act on whose latest run could not use a connector. */\n async listScheduledTaskAccessAttention(\n workspaceId: string,\n ): Promise<ScheduledTaskAccessAttention[]> {\n const response = await this.requestJson<{\n tasks: ScheduledTaskAccessAttention[];\n }>(\"GET\", `/v1/workspaces/${workspaceId}/scheduled-tasks/attention`);\n return response.tasks;\n }\n\n // --- Vaults ---------------------------------------------------------------\n // Metadata reads never carry values; `revealField` is the one audited\n // plaintext route. `{{secret:…}}` references resolve at execution time.\n\n /** Vault, item, field-history, session-policy and 1Password routes for one workspace. */\n vaults(workspaceId: string): VaultsApi {\n return vaultsApi(this, workspaceId);\n }\n\n // --- Channels --------------------------------------------------------------\n // Workspace-shared rail organization for root sessions. sessions:read gates\n // list; sessions:create gates create / update / delete; sessions:control\n // gates re-filing a session.\n\n async listChannels(workspaceId: string): Promise<Channel[]> {\n return await this.requestJson<Channel[]>(\"GET\", `/v1/workspaces/${workspaceId}/channels`);\n }\n\n async createChannel(workspaceId: string, request: CreateChannelRequest): Promise<Channel> {\n return await this.requestJson<Channel>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/channels`,\n request,\n );\n }\n\n async updateChannel(\n workspaceId: string,\n channelId: string,\n request: UpdateChannelRequest,\n ): Promise<Channel> {\n return await this.requestJson<Channel>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/channels/${channelId}`,\n request,\n );\n }\n\n async reorderChannels(workspaceId: string, request: ReorderChannelsRequest): Promise<Channel[]> {\n return await this.requestJson<Channel[]>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/channels/order`,\n request,\n );\n }\n\n async deleteChannel(workspaceId: string, channelId: string): Promise<void> {\n await this.requestJson<unknown>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/channels/${channelId}`,\n );\n }\n\n /** Re-file a session into a channel (null = back to the unfiled inbox). */\n async updateSessionChannel(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionChannelRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/channel`,\n request,\n );\n }\n\n // --- Rigs ------------------------------------------------------------------\n // Workspace-scoped, versioned sandbox machine definitions. rigs:use gates read\n // + proposeRigChange; rigs:manage gates create / update / delete / activate.\n\n async listRigs(workspaceId: string): Promise<Rig[]> {\n return await this.requestJson<Rig[]>(\"GET\", `/v1/workspaces/${workspaceId}/rigs`);\n }\n\n async createRig(workspaceId: string, request: CreateRigRequest): Promise<Rig> {\n return await this.requestJson<Rig>(\"POST\", `/v1/workspaces/${workspaceId}/rigs`, request);\n }\n\n async getRig(workspaceId: string, rigId: string): Promise<Rig> {\n return await this.requestJson<Rig>(\"GET\", `/v1/workspaces/${workspaceId}/rigs/${rigId}`);\n }\n\n async updateRig(workspaceId: string, rigId: string, request: UpdateRigRequest): Promise<Rig> {\n return await this.requestJson<Rig>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}`,\n request,\n );\n }\n\n async deleteRig(workspaceId: string, rigId: string): Promise<void> {\n await this.requestJson<unknown>(\"DELETE\", `/v1/workspaces/${workspaceId}/rigs/${rigId}`);\n }\n\n async listRigVersions(workspaceId: string, rigId: string): Promise<RigVersion[]> {\n return await this.requestJson<RigVersion[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/versions`,\n );\n }\n\n /** Roll the active version to an existing one (rollback / promote-activate). */\n async activateRigVersion(\n workspaceId: string,\n rigId: string,\n versionId: string,\n ): Promise<RigVersion> {\n return await this.requestJson<RigVersion>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/versions/${versionId}/activate`,\n );\n }\n\n async listRigChanges(workspaceId: string, rigId: string): Promise<RigChange[]> {\n return await this.requestJson<RigChange[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes`,\n );\n }\n\n /** Propose a change against the rig's active version (rigs:use). */\n async proposeRigChange(\n workspaceId: string,\n rigId: string,\n request: ProposeRigChangeRequest,\n ): Promise<RigChange> {\n return await this.requestJson<RigChange>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes`,\n request,\n );\n }\n\n async getRigChange(workspaceId: string, rigId: string, changeId: string): Promise<RigChange> {\n return await this.requestJson<RigChange>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes/${changeId}`,\n );\n }\n\n /**\n * Re-run verification for a change (rigs:use). Verification is asynchronous:\n * this returns the change immediately with status `verifying`; poll\n * `getRigChange`/`listRigChanges` for the terminal outcome + logs.\n */\n async verifyRigChange(workspaceId: string, rigId: string, changeId: string): Promise<RigChange> {\n return await this.requestJson<RigChange>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes/${changeId}/verify`,\n );\n }\n\n /**\n * Promote a verified `definition_edit` change into a new active rig version\n * (rigs:manage). Only valid once the change's verification passed; returns the\n * newly minted version.\n */\n async promoteRigChange(\n workspaceId: string,\n rigId: string,\n changeId: string,\n ): Promise<RigVersion> {\n return await this.requestJson<RigVersion>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes/${changeId}/promote`,\n );\n }\n\n /**\n * Re-run the active version's checks in a clean throwaway sandbox (rigs:use).\n * Asynchronous — returns the version id being verified; the outcome lands on\n * the version's audit trail.\n */\n async verifyRig(workspaceId: string, rigId: string): Promise<{ ok: boolean; versionId: string }> {\n return await this.requestJson<{ ok: boolean; versionId: string }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/verify`,\n );\n }\n\n // --- Files -----------------------------------------------------------------------\n\n /** Step 1 of the upload flow: returns the pre-signed PUT target. */\n async beginFileUpload(\n workspaceId: string,\n request: CreateFileUploadRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<CreateFileUploadResponse> {\n return await this.requestJson<CreateFileUploadResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/files/uploads`,\n request,\n {},\n options,\n );\n }\n\n /** Step 3 of the upload flow: server verifies the object and marks it ready. */\n async completeFileUpload(\n workspaceId: string,\n uploadId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<FileAsset> {\n const response = await this.requestJson<CompleteFileUploadResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/files/uploads/${uploadId}/complete`,\n undefined,\n {},\n options,\n );\n return response.file;\n }\n\n /**\n * The whole upload flow as one call: begin -> PUT the bytes to the signed\n * URL (with its required headers; no API auth is sent to object storage)\n * -> complete. Returns the ready `FileAsset`.\n */\n async uploadFile(workspaceId: string, input: UploadFileInput): Promise<FileAsset> {\n if (\n input.timeoutMs !== undefined &&\n (!Number.isFinite(input.timeoutMs) || input.timeoutMs <= 0)\n ) {\n throw new Error(\"File upload timeout must be a positive number\");\n }\n assertBrowserFileUploadSecureContext();\n const withTimeout = async <T>(\n timeoutMs: number,\n operation: (signal: AbortSignal) => Promise<T>,\n ): Promise<T> => {\n const controller = new AbortController();\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const timedOut = new Promise<never>((_resolve, reject) => {\n timeout = setTimeout(() => {\n controller.abort();\n reject(new Error(\"File upload timed out. Retry the upload.\"));\n }, timeoutMs);\n });\n try {\n return await Promise.race([operation(controller.signal), timedOut]);\n } finally {\n if (timeout !== undefined) clearTimeout(timeout);\n }\n };\n // Snapshot mutable inputs before hashing so the digest always describes the\n // exact bytes later sent to object storage. Copy Uint8Array views into a\n // Blob so byte offsets/shared buffers can't leak surrounding bytes.\n const body: Blob | ArrayBuffer | string =\n input.data instanceof Uint8Array\n ? new Blob([input.data.slice()])\n : input.data instanceof ArrayBuffer\n ? input.data.slice(0)\n : input.data;\n const sizeBytes =\n typeof body === \"string\"\n ? new TextEncoder().encode(body).byteLength\n : body instanceof Blob\n ? body.size\n : body.byteLength;\n const sha256 = input.sha256 ?? (await sha256ForUpload(body));\n const upload = await withTimeout(\n 30_000,\n async (signal) =>\n await this.beginFileUpload(\n workspaceId,\n {\n filename: input.filename,\n contentType: input.contentType,\n ...(input.scope ? { scope: input.scope } : {}),\n sizeBytes,\n sha256,\n ...(input.appShot ? { appShot: input.appShot } : {}),\n },\n { signal },\n ),\n );\n // Give large valid uploads enough time at a conservative 256 KiB/s while\n // still bounding an object-storage request that never settles.\n const transferTimeoutMs =\n input.timeoutMs ?? Math.max(120_000, Math.ceil(sizeBytes / (256 * 1024)) * 1_000);\n const putResponse = await withTimeout(\n transferTimeoutMs,\n async (signal) =>\n await this.fetchImpl(upload.putUrl, {\n method: \"PUT\",\n // Signed object-storage URLs carry their own short-lived authority.\n // Browser cookies and HTTP auth must never accompany this cross-origin\n // request: credentialed fetches are incompatible with wildcard CORS and\n // can leak ambient credentials to a caller-selected storage endpoint.\n credentials: \"omit\",\n // The backend's requiredHeaders already carry the canonical lowercase\n // `content-type` for every storage backend (Azure/S3/GCS). Do NOT also set\n // a `Content-Type` key here: WHATWG Headers treats the two casings as the\n // same header and comma-joins their values (e.g. \"text/plain, text/plain\"),\n // which the object store persists verbatim and COMPLETE then rejects (422),\n // and which breaks S3's presigned-URL signature.\n headers: { ...upload.requiredHeaders },\n body,\n signal,\n }),\n );\n if (!putResponse.ok) {\n throw await apiErrorFromResponse(putResponse, { method: \"PUT\" });\n }\n return await withTimeout(\n 30_000,\n async (signal) => await this.completeFileUpload(workspaceId, upload.uploadId, { signal }),\n );\n }\n\n async listFiles(\n workspaceId: string,\n options: import(\"./types\").FileListRequest = {},\n ): Promise<import(\"./types\").FileListResponse> {\n const query = new URLSearchParams();\n if (options.scope) query.set(\"scope\", options.scope);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.cursor) query.set(\"cursor\", options.cursor);\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/files${query.size ? `?${query}` : \"\"}`,\n );\n }\n\n /**\n * Change who can open a file: everyone in the workspace, or only you (Only\n * me). Only the file's owner can.\n */\n async updateFileVisibility(\n workspaceId: string,\n fileId: string,\n request: UpdateFileVisibilityRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<UpdateFileVisibilityResponse> {\n return await this.requestJson<UpdateFileVisibilityResponse>(\n \"PUT\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/files/${encodeURIComponent(fileId)}/visibility`,\n request,\n undefined,\n options,\n );\n }\n\n async getFile(\n workspaceId: string,\n fileId: string,\n options: OpenGeniRequestOptions & { sessionId?: string | undefined } = {},\n ): Promise<FileAsset> {\n return await this.requestJson<FileAsset>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/files/${fileId}${options.sessionId ? `?sessionId=${encodeURIComponent(options.sessionId)}` : \"\"}`,\n undefined,\n {},\n options,\n );\n }\n\n /** Read provider-neutral retained evidence metadata; never returns a storage location. */\n async getRetainedArtifact(\n workspaceId: string,\n artifactId: string,\n ): Promise<RetainedArtifactMetadata> {\n return await this.requestJson<RetainedArtifactMetadata>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/artifacts/${artifactId}`,\n );\n }\n\n /**\n * Read at most one authenticated retained-evidence range from the API. This\n * deliberately does not use the ordinary signed file-download URL.\n */\n async getRetainedArtifactContent(\n workspaceId: string,\n artifactId: string,\n options: RetainedArtifactContentOptions = {},\n ): Promise<RetainedArtifactContent> {\n return await this.getRetainedArtifactContentAtPath(\n `/v1/workspaces/${workspaceId}/artifacts/${artifactId}/content`,\n options,\n );\n }\n\n async getSessionRetainedArtifact(\n workspaceId: string,\n sessionId: string,\n artifactId: string,\n ): Promise<RetainedArtifactMetadata> {\n return await this.requestJson<RetainedArtifactMetadata>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/artifacts/${artifactId}`,\n );\n }\n\n async getSessionRetainedArtifactContent(\n workspaceId: string,\n sessionId: string,\n artifactId: string,\n options: RetainedArtifactContentOptions = {},\n ): Promise<RetainedArtifactContent> {\n return await this.getRetainedArtifactContentAtPath(\n `${sessionPath(workspaceId, sessionId)}/artifacts/${artifactId}/content`,\n options,\n );\n }\n\n /** Assemble one permanent image or file artifact from bounded authenticated ranges. */\n async downloadRetainedArtifact(\n workspaceId: string,\n artifact: RetainedArtifactReference,\n options: RetainedArtifactDownloadOptions = {},\n ): Promise<RetainedArtifactDownload> {\n assertRetainedWorkspaceArtifactReceipt(workspaceId, artifact);\n const bytes = await this.downloadRetainedArtifactBytes(artifact, options);\n return { artifact, bytes };\n }\n\n /** Mint a short-lived, zero-copy browser source for a validated workspace artifact. */\n async createRetainedArtifactDownloadUrl(\n workspaceId: string,\n artifact: RetainedArtifactReference,\n options: OpenGeniRequestOptions = {},\n ): Promise<FileDownloadUrlResponse> {\n assertRetainedWorkspaceArtifactReceipt(workspaceId, artifact);\n const download = await this.createFileDownloadUrl(workspaceId, artifact.artifactId, options);\n assertSafeArtifactDownloadUrl(download);\n return download;\n }\n\n /** Assemble one retained screenshot from bounded authenticated API ranges. */\n async downloadRetainedScreenshot(\n workspaceId: string,\n sessionId: string,\n artifactId: string,\n options: RetainedScreenshotDownloadOptions = {},\n ): Promise<RetainedScreenshotDownload> {\n const metadata = await this.getSessionRetainedArtifact(workspaceId, sessionId, artifactId);\n if (!metadata.available) return { metadata, bytes: null };\n const supportedScreenshot =\n (metadata.kind === \"computer_screenshot\" || metadata.kind === \"browser_screenshot\") &&\n [\"image/png\", \"image/jpeg\", \"image/webp\"].includes(metadata.contentType);\n if (\n !supportedScreenshot ||\n !metadata.dimensions ||\n metadata.originalBytes <= 0 ||\n metadata.originalBytes > COMPUTER_SCREENSHOT_MAX_BYTES\n ) {\n throw new OpenGeniApiError(502, \"retained screenshot metadata is invalid\");\n }\n const bytes = await this.downloadRetainedArtifactBytes(metadata, options);\n return { metadata, bytes };\n }\n\n private async downloadRetainedArtifactBytes(\n artifact: RetainedArtifactReference,\n options: RetainedArtifactDownloadOptions,\n ): Promise<Uint8Array> {\n const maxRetries = options.maxRetries ?? 2;\n if (!Number.isInteger(maxRetries) || maxRetries < 0 || maxRetries > 3) {\n throw new RangeError(\"retained artifact maxRetries must be an integer from 0 to 3\");\n }\n const bytes = new Uint8Array(artifact.originalBytes);\n const pageBytes = Math.min(artifact.retrieval.maxRangeBytes, RETAINED_OUTPUT_MAX_PAGE_BYTES);\n if (!Number.isSafeInteger(pageBytes) || pageBytes <= 0) {\n throw new OpenGeniApiError(502, \"retained artifact range metadata is invalid\");\n }\n for (let start = 0; start < bytes.byteLength; start += pageBytes) {\n options.signal?.throwIfAborted();\n const end = Math.min(start + pageBytes, bytes.byteLength) - 1;\n let page: RetainedArtifactContent | null = null;\n for (let attempt = 0; attempt <= maxRetries; attempt += 1) {\n try {\n page = await this.getRetainedArtifactContentAtPath(artifact.retrieval.path, {\n range: `bytes=${start}-${end}`,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n break;\n } catch (error) {\n options.signal?.throwIfAborted();\n if (\n attempt >= maxRetries ||\n (error instanceof OpenGeniApiError && error.status >= 400 && error.status < 500)\n ) {\n throw error;\n }\n }\n }\n if (!page) throw new OpenGeniApiError(502, \"retained artifact range retry exhausted\");\n const expectedLength = end - start + 1;\n if (\n page.status !== 206 ||\n page.contentType !== artifact.contentType ||\n page.contentLength !== expectedLength ||\n page.contentRange !== `bytes ${start}-${end}/${artifact.originalBytes}`\n ) {\n throw new OpenGeniApiError(502, \"retained artifact range response is invalid\");\n }\n bytes.set(page.bytes, start);\n }\n if ((await sha256Hex(bytes)) !== artifact.sha256) {\n throw new OpenGeniApiError(502, \"retained artifact checksum mismatch\");\n }\n return bytes;\n }\n\n private async getRetainedArtifactContentAtPath(\n path: string,\n options: RetainedArtifactContentOptions,\n ): Promise<RetainedArtifactContent> {\n if (options.range && (options.range.length > 128 || /[^\\x20-\\x7e]/.test(options.range))) {\n throw new RangeError(\"retained artifact range must be at most 128 printable ASCII bytes\");\n }\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(this.url(path), {\n method: \"GET\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/octet-stream\",\n ...(options.range ? { Range: options.range } : {}),\n },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n try {\n assertApiContractResponse(response, this.apiContractStrict);\n } catch (error) {\n await cancelResponseBody(response, \"retained artifact API contract mismatch\");\n throw error;\n }\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (response.status !== 200 && response.status !== 206) {\n await cancelResponseBody(response, \"unexpected retained artifact response status\");\n throw new OpenGeniApiError(response.status, \"unexpected retained artifact response status\");\n }\n if (response.headers.get(\"accept-ranges\") !== \"bytes\") {\n await cancelResponseBody(response, \"retained artifact response omitted byte-range support\");\n throw new OpenGeniApiError(502, \"retained artifact response omitted byte-range support\");\n }\n let declaredLength: number | null;\n try {\n declaredLength = parseBoundedContentLength(response.headers.get(\"content-length\"));\n } catch (error) {\n await cancelResponseBody(response, \"invalid retained artifact content-length\");\n throw error;\n }\n const bytes = await readBoundedResponseBytes(\n response,\n RETAINED_OUTPUT_MAX_PAGE_BYTES,\n declaredLength,\n );\n return {\n bytes,\n status: response.status,\n contentType: response.headers.get(\"content-type\") ?? \"application/octet-stream\",\n contentLength: bytes.byteLength,\n contentRange: response.headers.get(\"content-range\"),\n acceptRanges: \"bytes\",\n };\n }\n\n /** Mint a short-lived signed download URL for a ready file. */\n async createFileDownloadUrl(\n workspaceId: string,\n fileId: string,\n options: OpenGeniRequestOptions & { sessionId?: string | undefined } = {},\n ): Promise<FileDownloadUrlResponse> {\n return await this.requestJson<FileDownloadUrlResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/files/${fileId}/download-url${options.sessionId ? `?sessionId=${encodeURIComponent(options.sessionId)}` : \"\"}`,\n undefined,\n {},\n options,\n );\n }\n\n // --- Video generation ---------------------------------------------------------------\n\n /** Read the effective workspace policy and executable Seedance capabilities. */\n async getVideoGenerationSettings(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceVideoGenerationSettings> {\n return await this.requestJson<WorkspaceVideoGenerationSettings>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/video-generation`,\n undefined,\n {},\n options,\n );\n }\n\n /** Replace the enabled video models/default under optimistic policy revision control. */\n async updateVideoGenerationPolicy(\n workspaceId: string,\n request: UpdateVideoGenerationPolicyRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<VideoGenerationPolicy> {\n return await this.requestJson<VideoGenerationPolicy>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/video-generation/policy`,\n request,\n {},\n options,\n );\n }\n\n /** Read durable progress for one accepted video generation operation. */\n async getVideoGenerationOperation(\n workspaceId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<VideoGenerationOperationSummary> {\n return await this.requestJson<VideoGenerationOperationSummary>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/video-generation/operations/${operationId}`,\n undefined,\n {},\n options,\n );\n }\n\n /** Mint a short-lived zero-copy URL for native Range-based video playback. */\n async createVideoArtifactPlaybackSource(\n workspaceId: string,\n artifactId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<VideoArtifactPlaybackSource> {\n const source = await this.requestJson<VideoArtifactPlaybackSource>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/artifacts/${artifactId}/playback-source`,\n undefined,\n {},\n options,\n );\n assertSafeVideoArtifactPlaybackSource(source, artifactId);\n return source;\n }\n\n // --- Documents ----------------------------------------------------------------------\n\n async createDocumentBase(\n workspaceId: string,\n request: CreateDocumentBaseRequest,\n ): Promise<DocumentBase> {\n return await this.requestJson<DocumentBase>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/document-bases`,\n request,\n );\n }\n\n async getDocumentBase(workspaceId: string, baseId: string): Promise<DocumentBase> {\n return await this.requestJson<DocumentBase>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}`,\n );\n }\n\n /** Index an uploaded file into the base. The file must be `ready`. */\n async addDocument(\n workspaceId: string,\n baseId: string,\n request: AddDocumentRequest,\n ): Promise<Document> {\n return await this.requestJson<Document>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}/documents`,\n request,\n );\n }\n\n async listDocuments(workspaceId: string, baseId: string): Promise<Document[]> {\n return await this.requestJson<Document[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}/documents`,\n );\n }\n\n /** Read the immutable source file through the Document's effective authority. */\n async getDocumentOriginalFile(workspaceId: string, documentId: string): Promise<FileAsset> {\n return await this.requestJson<FileAsset>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/documents/${documentId}/original-file`,\n );\n }\n\n /**\n * Drop raw text or an already-uploaded file into the workspace's Default\n * base. When curation is enabled, it may name, summarize, categorize, and\n * (confidence permitting) file the document into the best-matching base;\n * provider=none leaves caller metadata and Default placement unchanged.\n */\n async createKnowledgeDrop(\n workspaceId: string,\n request: CreateKnowledgeDropRequest,\n ): Promise<Document> {\n return await this.requestJson<Document>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/drops`,\n request,\n );\n }\n\n /**\n * Move a document (and its indexed chunks) to another base. With no\n * targetBaseId, applies the document's stored curation suggestion.\n */\n async moveDocument(\n workspaceId: string,\n documentId: string,\n request: MoveDocumentRequest = {},\n ): Promise<Document> {\n return await this.requestJson<Document>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/documents/${documentId}/move`,\n request,\n );\n }\n\n /**\n * Delete a document from a base. Removes the document row and its indexed\n * chunks while leaving the uploaded file asset available for other uses.\n */\n async deleteDocument(workspaceId: string, baseId: string, documentId: string): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}/documents/${documentId}`,\n );\n }\n\n /** Unified retained sources, findings and groups. Only published entries are returned by default. */\n async listKnowledgeEntries(\n workspaceId: string,\n request: KnowledgeEntryListRequest = {},\n ): Promise<KnowledgeEntryListResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/entries/search`,\n request,\n );\n }\n\n async getKnowledgeEntry(\n workspaceId: string,\n entryId: string,\n options: {\n revisionId?: string;\n view?: \"published\" | \"needs_review\" | \"archived\" | \"rejected\";\n } = {},\n ): Promise<KnowledgeEntryRecord> {\n const search = new URLSearchParams();\n if (options.revisionId !== undefined) search.set(\"revisionId\", options.revisionId);\n if (options.view !== undefined) search.set(\"view\", options.view);\n const query = search.toString();\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/knowledge/entries/${entryId}${query ? `?${query}` : \"\"}`,\n );\n }\n\n /** Open the original file associated with an accessible retained source revision. */\n async createKnowledgeFileDownloadUrl(\n workspaceId: string,\n entryId: string,\n revisionId?: string,\n ): Promise<KnowledgeOriginalFileDownload> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/entries/${entryId}/file/download-url`,\n revisionId ? { revisionId } : {},\n );\n }\n\n async saveKnowledgeEntry(\n workspaceId: string,\n request: KnowledgeEntrySaveRequest,\n ): Promise<KnowledgeEntryWriteReceipt> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/knowledge/entries`, request);\n }\n\n async reviewKnowledgeEntry(\n workspaceId: string,\n request: KnowledgeEntryReviewRequest,\n ): Promise<KnowledgeEntryWriteReceipt> {\n const { entryId, ...body } = request;\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/entries/${entryId}/review`,\n body,\n );\n }\n\n async listKnowledgeReviewBatches(\n workspaceId: string,\n options: KnowledgeReviewBatchListRequest = {},\n ): Promise<KnowledgeReviewBatchListResponse> {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(options))\n if (value !== undefined) query.set(key, String(value));\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/knowledge/review-groups?${query}`,\n );\n }\n\n /** Atomically review up to 100 selected entries, including their pending dependencies. */\n async reviewKnowledgeEntries(\n workspaceId: string,\n request: KnowledgeEntryBatchReviewRequest,\n ): Promise<{ receipts: KnowledgeEntryWriteReceipt[] }> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/entries/review`,\n request,\n );\n }\n\n async listKnowledgeEntryHistory(\n workspaceId: string,\n entryId: string,\n beforeRevision?: number,\n ): Promise<{\n entries: KnowledgeEntryListResponse[\"entries\"];\n beforeRevision: number | null;\n }> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/knowledge/entries/${entryId}/history${beforeRevision ? `?beforeRevision=${beforeRevision}` : \"\"}`,\n );\n }\n\n async restoreKnowledgeEntry(\n workspaceId: string,\n request: KnowledgeEntryRestoreRequest,\n ): Promise<KnowledgeEntryWriteReceipt> {\n const { entryId, ...body } = request;\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/entries/${entryId}/restore`,\n body,\n );\n }\n\n async archiveKnowledgeEntry(\n workspaceId: string,\n entryId: string,\n request: {\n operationId: string;\n expectedVersion: number;\n },\n ): Promise<KnowledgeEntryWriteReceipt> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/entries/${entryId}/archive`,\n request,\n );\n }\n\n async getAgentLearningSettings(\n workspaceId: string,\n scope: \"workspace\" | \"personal\" | \"context\",\n source?: AgentLearningContext,\n ): Promise<AgentLearningSettingsRecord> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/agent-learning/read`, {\n scope,\n source,\n });\n }\n\n async saveAgentLearningSettings(\n workspaceId: string,\n request: SaveAgentLearningSettingsRequest,\n ): Promise<AgentLearningSettingsRecord> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/agent-learning`, request);\n }\n\n async listAgentLearningOverrides(\n workspaceId: string,\n scope: \"workspace\" | \"personal\",\n ): Promise<AgentLearningOverrideRecord[]> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/agent-learning/overrides?scope=${scope}`,\n );\n }\n\n async reviewAgentInstruction(\n workspaceId: string,\n request: AgentInstructionReviewRequest,\n ): Promise<AgentInstructionReceipt> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/agent-learning/instructions/review`,\n request,\n );\n }\n\n async listAgentInstructionReviews(\n workspaceId: string,\n cursor?: string,\n ): Promise<AgentInstructionReviewListResponse> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/agent-learning/instructions/reviews${cursor ? `?cursor=${encodeURIComponent(cursor)}` : \"\"}`,\n );\n }\n\n /** Deep-merge a settings patch into the workspace (preserves unknown keys). */\n async updateWorkspaceSettings(\n workspaceId: string,\n request: UpdateWorkspaceSettingsRequest,\n ): Promise<Workspace> {\n return await this.requestJson<Workspace>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/settings`,\n request,\n );\n }\n\n async setWorkspaceDefaultRig(\n workspaceId: string,\n request: SetWorkspaceDefaultRigRequest,\n ): Promise<Workspace> {\n return await this.requestJson<Workspace>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/default-rig`,\n request,\n );\n }\n\n /** Resolve pinned components, Variable Set, and Rig requirements before installation. */\n\n // --- Capabilities -------------------------------------------------------------------------\n\n async listCapabilities(workspaceId: string): Promise<CapabilityCatalogResponse> {\n return await this.requestJson<CapabilityCatalogResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/capabilities`,\n );\n }\n\n /** Add a manual capability catalog item (e.g. a remote MCP server). */\n async createCapability(\n workspaceId: string,\n request: CreateCapabilityCatalogItemRequest,\n ): Promise<CapabilityCatalogItem> {\n return await this.requestJson<CapabilityCatalogItem>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/capabilities`,\n request,\n );\n }\n\n getConnectorToolPermissions(\n workspaceId: string,\n capabilityId: string,\n options?: { signal?: AbortSignal },\n ): Promise<ConnectorToolPermissionsResponse>;\n getConnectorToolPermissions(\n workspaceId: string,\n capabilityId: string,\n options?: { signal?: AbortSignal; connectionId?: string; instanceKey?: string },\n ): Promise<ConnectorToolPermissionsResponse>;\n async getConnectorToolPermissions(\n workspaceId: string,\n capabilityId: string,\n options: { signal?: AbortSignal; connectionId?: string; instanceKey?: string } = {},\n ): Promise<ConnectorToolPermissionsResponse> {\n const query = new URLSearchParams();\n if (options.connectionId) query.set(\"connectionId\", options.connectionId);\n if (options.instanceKey) query.set(\"instanceKey\", options.instanceKey);\n return await this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/capabilities/${encodeURIComponent(capabilityId)}/tool-permissions${query.size ? `?${query}` : \"\"}`,\n undefined,\n {},\n options,\n );\n }\n\n async updateConnectorToolPermissions(\n workspaceId: string,\n capabilityId: string,\n request: UpdateConnectorToolPermissionsRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<{ saved: boolean }> {\n return await this.requestJson(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/capabilities/${encodeURIComponent(capabilityId)}/tool-permissions`,\n request,\n {},\n options,\n );\n }\n\n /**\n * Read the workspace's saved Allow/Ask/Block rules for a session MCP server\n * this host attaches (same `id` and exact `url` as in `mcpServers`).\n */\n async getSessionMcpToolPermissions(\n workspaceId: string,\n server: { serverId: string; url: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionMcpToolPermissionsResponse> {\n const query = new URLSearchParams({ serverId: server.serverId, url: server.url });\n return await this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/session-mcp-tool-permissions?${query}`,\n undefined,\n {},\n options,\n );\n }\n\n /**\n * Set or reset Allow/Ask/Block for a session MCP server's default or named\n * tools. Requires `capabilities:manage`; agents and service principals are\n * refused. Rules apply from each session's next attempt.\n */\n async updateSessionMcpToolPermissions(\n workspaceId: string,\n request: UpdateSessionMcpToolPermissionsRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<{ saved: boolean }> {\n return await this.requestJson(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/session-mcp-tool-permissions`,\n request,\n {},\n options,\n );\n }\n\n async enableCapability(\n workspaceId: string,\n capabilityId: string,\n request: EnableCapabilityRequest = {},\n ): Promise<CapabilityInstallation> {\n return await this.requestJson<CapabilityInstallation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/capabilities/${encodeURIComponent(capabilityId)}/enable`,\n request,\n );\n }\n\n async disableCapability(\n workspaceId: string,\n capabilityId: string,\n ): Promise<CapabilityInstallation> {\n return await this.requestJson<CapabilityInstallation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/capabilities/${encodeURIComponent(capabilityId)}/disable`,\n );\n }\n\n /** Read-only, permission-filtered workspace or session output discovery. */\n async listArtifactCatalog(\n workspaceId: string,\n options: ArtifactCatalogListOptions & { signal?: AbortSignal } = {},\n ): Promise<ArtifactCatalogListResponse> {\n const query = new URLSearchParams();\n for (const key of [\n \"sourceSessionId\",\n \"q\",\n \"kind\",\n \"sort\",\n \"status\",\n \"limit\",\n \"cursor\",\n ] as const) {\n if (options[key] !== undefined) query.set(key, String(options[key]));\n }\n const suffix = query.size ? `?${query.toString()}` : \"\";\n return this.requestJson<ArtifactCatalogListResponse>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/artifact-catalog${suffix}`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Idempotently set a workspace-shared pin; refresh the catalog after completion. */\n async updateArtifactPin(\n workspaceId: string,\n kind: ArtifactCatalogKind,\n artifactId: string,\n pinned: boolean,\n options: { signal?: AbortSignal } = {},\n ): Promise<ArtifactPinResponse> {\n return this.requestJson<ArtifactPinResponse>(\n \"PUT\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/artifact-catalog/${encodeURIComponent(kind)}/${encodeURIComponent(artifactId)}/pin`,\n { pinned },\n undefined,\n options,\n );\n }\n\n async listWorkspaceArtifacts(\n workspaceId: string,\n options: WorkspaceArtifactListOptions & { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactListResponse> {\n const query = new URLSearchParams();\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.status) query.set(\"status\", options.status);\n if (options.sourceSessionId) query.set(\"sourceSessionId\", options.sourceSessionId);\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<WorkspaceArtifactListResponse>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts${suffix}`,\n undefined,\n undefined,\n options,\n );\n }\n\n async getWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactDetailResponse> {\n return await this.requestJson<WorkspaceArtifactDetailResponse>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Display-only HTML delivery: do not download the retained source bundle to render a Site. */\n async getWorkspaceArtifactHtml(\n workspaceId: string,\n artifactId: string,\n options: { versionId: string; signal?: AbortSignal },\n ): Promise<string> {\n const response = await this.requestResponse(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/html`,\n { versionId: options.versionId },\n options,\n );\n return response.text();\n }\n\n async rollbackWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n request: RollbackWorkspaceArtifactRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/rollback`,\n request,\n undefined,\n options,\n );\n }\n\n /** Copies a Site's current version into a new Site you own, with the same visibility. */\n async duplicateWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n request: DuplicateWorkspaceArtifactRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/duplicate`,\n request,\n undefined,\n options,\n );\n }\n\n async setWorkspaceArtifactStatus(\n workspaceId: string,\n artifactId: string,\n request: SetWorkspaceArtifactStatusRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/status`,\n request,\n undefined,\n options,\n );\n }\n\n /** Change who can see a Site: the whole workspace, or only you. Only its owner can. */\n async updateWorkspaceArtifactVisibility(\n workspaceId: string,\n artifactId: string,\n request: UpdateWorkspaceArtifactVisibilityRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<UpdateWorkspaceArtifactVisibilityResponse> {\n return await this.requestJson<UpdateWorkspaceArtifactVisibilityResponse>(\n \"PUT\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/visibility`,\n request,\n undefined,\n options,\n );\n }\n\n /** A Site's data collections, usage and limits. Needs a manager of the Site. */\n async getSiteData(\n workspaceId: string,\n siteId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteDataDescribeResponse> {\n return await this.requestJson<SiteDataDescribeResponse>(\n \"GET\",\n `${siteDataPath(workspaceId, siteId)}/data`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Create or change a Site Data collection. Needs a manager of the Site. */\n async defineSiteDataCollection(\n workspaceId: string,\n siteId: string,\n name: string,\n request: SiteDataCollectionDefinitionRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteDataCollectionResponse> {\n return await this.requestJson<SiteDataCollectionResponse>(\n \"PUT\",\n `${siteDataPath(workspaceId, siteId)}/data/collections/${encodeURIComponent(name)}`,\n request,\n undefined,\n options,\n );\n }\n\n /** Delete a collection and all of its records. */\n async deleteSiteDataCollection(\n workspaceId: string,\n siteId: string,\n name: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<{ deletedRecords: number }> {\n return await this.requestJson<{ deletedRecords: number }>(\n \"DELETE\",\n `${siteDataPath(workspaceId, siteId)}/data/collections/${encodeURIComponent(name)}`,\n undefined,\n { confirm: \"true\" },\n options,\n );\n }\n\n /** Remove every record from a collection and keep its definition. */\n async resetSiteDataCollection(\n workspaceId: string,\n siteId: string,\n name: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<{ deletedRecords: number }> {\n return await this.requestJson<{ deletedRecords: number }>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/data/collections/${encodeURIComponent(name)}/reset`,\n { confirm: true },\n undefined,\n options,\n );\n }\n\n /** Query records with the caller's access to the collection. */\n async querySiteData(\n workspaceId: string,\n siteId: string,\n request: SiteDataQueryRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteDataQueryResponse> {\n return await this.requestJson<SiteDataQueryResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/data/query`,\n request,\n undefined,\n options,\n );\n }\n\n /** Apply up to 100 record operations together or not at all. */\n async writeSiteData(\n workspaceId: string,\n siteId: string,\n request: SiteDataWriteRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteDataWriteResponse> {\n return await this.requestJson<SiteDataWriteResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/data/write`,\n request,\n undefined,\n options,\n );\n }\n\n /** Import JSON or CSV records into a collection. */\n async importSiteData(\n workspaceId: string,\n siteId: string,\n name: string,\n request: SiteDataImportRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteDataImportResponse> {\n return await this.requestJson<SiteDataImportResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/data/collections/${encodeURIComponent(name)}/import`,\n request,\n undefined,\n options,\n );\n }\n\n /** Export a collection as JSON or CSV text (bounded; check `truncated`). */\n async exportSiteData(\n workspaceId: string,\n siteId: string,\n name: string,\n options: { format?: \"json\" | \"csv\"; signal?: AbortSignal } = {},\n ): Promise<{ content: string; contentType: string; truncated: boolean }> {\n const format = options.format ?? \"json\";\n const response = await this.requestResponse(\n \"GET\",\n `${siteDataPath(workspaceId, siteId)}/data/collections/${encodeURIComponent(name)}/export`,\n { format },\n { ...options, accept: format === \"csv\" ? \"text/csv\" : \"application/json\" },\n );\n return {\n content: await response.text(),\n contentType: response.headers.get(\"content-type\") ?? \"\",\n truncated: response.headers.get(\"x-opengeni-export-truncated\") === \"true\",\n };\n }\n\n /** Files stored with a Site that the caller may see. */\n async listSiteDataFiles(\n workspaceId: string,\n siteId: string,\n options: { limit?: number; cursor?: string; signal?: AbortSignal } = {},\n ): Promise<SiteDataFileListResponse> {\n return await this.requestJson<SiteDataFileListResponse>(\n \"GET\",\n `${siteDataPath(workspaceId, siteId)}/files`,\n undefined,\n {\n ...(options.limit === undefined ? {} : { limit: String(options.limit) }),\n ...(options.cursor ? { cursor: options.cursor } : {}),\n },\n options,\n );\n }\n\n /** A short-lived download URL for one Site file. */\n async getSiteDataFileUrl(\n workspaceId: string,\n siteId: string,\n fileId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteDataFileUrlResponse> {\n return await this.requestJson<SiteDataFileUrlResponse>(\n \"GET\",\n `${siteDataPath(workspaceId, siteId)}/files/${encodeURIComponent(fileId)}`,\n undefined,\n undefined,\n options,\n );\n }\n\n async deleteSiteDataFile(\n workspaceId: string,\n siteId: string,\n fileId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<{ deleted: { id: string } }> {\n return await this.requestJson<{ deleted: { id: string } }>(\n \"DELETE\",\n `${siteDataPath(workspaceId, siteId)}/files/${encodeURIComponent(fileId)}`,\n undefined,\n undefined,\n options,\n );\n }\n\n /**\n * A Site's SQL database (optional Cloudflare storage): availability, whether\n * it is on, migrations, named queries, usage and limits. Needs a manager.\n */\n async getSiteSql(\n workspaceId: string,\n siteId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlDescribeResponse> {\n return await this.requestJson<SiteSqlDescribeResponse>(\n \"GET\",\n `${siteDataPath(workspaceId, siteId)}/sql`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Turn a Site's SQL database on or off; turning it off keeps its data. */\n async updateSiteSqlSettings(\n workspaceId: string,\n siteId: string,\n request: SiteSqlSettingsRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlDescribeResponse> {\n return await this.requestJson<SiteSqlDescribeResponse>(\n \"PUT\",\n `${siteDataPath(workspaceId, siteId)}/sql/settings`,\n request,\n undefined,\n options,\n );\n }\n\n /** Add a named schema migration to a Site's SQL database. */\n async migrateSiteSql(\n workspaceId: string,\n siteId: string,\n request: SiteSqlMigrationRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlMigrateResponse> {\n return await this.requestJson<SiteSqlMigrateResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/sql/migrations`,\n request,\n undefined,\n options,\n );\n }\n\n /** Create or replace a named query Site pages run with site.sql.run. */\n async defineSiteSqlQuery(\n workspaceId: string,\n siteId: string,\n name: string,\n request: SiteSqlQueryDefinitionRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlQueryResponse> {\n return await this.requestJson<SiteSqlQueryResponse>(\n \"PUT\",\n `${siteDataPath(workspaceId, siteId)}/sql/queries/${encodeURIComponent(name)}`,\n request,\n undefined,\n options,\n );\n }\n\n async deleteSiteSqlQuery(\n workspaceId: string,\n siteId: string,\n name: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<{ deleted: boolean }> {\n return await this.requestJson<{ deleted: boolean }>(\n \"DELETE\",\n `${siteDataPath(workspaceId, siteId)}/sql/queries/${encodeURIComponent(name)}`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Run a named query with the caller's access (its audience decides who may). */\n async runSiteSqlQuery(\n workspaceId: string,\n siteId: string,\n name: string,\n request: SiteSqlRunRequest = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlRunResponse> {\n return await this.requestJson<SiteSqlRunResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/sql/queries/${encodeURIComponent(name)}`,\n request,\n undefined,\n options,\n );\n }\n\n /** Run one read-only statement on a Site's SQL database. Needs a manager. */\n async querySiteSql(\n workspaceId: string,\n siteId: string,\n request: SiteSqlStatementRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlRunResponse> {\n return await this.requestJson<SiteSqlRunResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/sql/query`,\n request,\n undefined,\n options,\n );\n }\n\n /** Run one data-changing statement on a Site's SQL database. Needs a manager. */\n async executeSiteSql(\n workspaceId: string,\n siteId: string,\n request: SiteSqlStatementRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlRunResponse> {\n return await this.requestJson<SiteSqlRunResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/sql/execute`,\n request,\n undefined,\n options,\n );\n }\n\n /** Tables, columns, row counts and applied migrations of a Site's SQL database. */\n async inspectSiteSql(\n workspaceId: string,\n siteId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlInspectResponse> {\n return await this.requestJson<SiteSqlInspectResponse>(\n \"GET\",\n `${siteDataPath(workspaceId, siteId)}/sql/inspect`,\n undefined,\n undefined,\n options,\n );\n }\n\n /**\n * Export a Site's SQL database as SQL, CSV (one table) or JSON. One call\n * returns at most `maxBytes` (16 MiB at most); when `nextCursor` is set,\n * call again with it as `cursor` and append the pieces in order.\n */\n async exportSiteSql(\n workspaceId: string,\n siteId: string,\n options: {\n format?: SiteSqlExportFormat;\n table?: string;\n cursor?: string;\n maxBytes?: number;\n signal?: AbortSignal;\n } = {},\n ): Promise<{\n content: string;\n contentType: string;\n truncated: boolean;\n nextCursor: string | null;\n }> {\n const format = options.format ?? \"sql\";\n const response = await this.requestResponse(\n \"GET\",\n `${siteDataPath(workspaceId, siteId)}/sql/export`,\n {\n format,\n ...(options.table ? { table: options.table } : {}),\n ...(options.cursor ? { cursor: options.cursor } : {}),\n ...(options.maxBytes !== undefined ? { maxBytes: String(options.maxBytes) } : {}),\n },\n { ...options, accept: format === \"json\" ? \"application/json\" : \"*/*\" },\n );\n return {\n content: await response.text(),\n contentType: response.headers.get(\"content-type\") ?? \"\",\n truncated: response.headers.get(\"x-opengeni-export-truncated\") === \"true\",\n nextCursor: response.headers.get(\"x-opengeni-export-next-cursor\") || null,\n };\n }\n\n /** Import SQL statements, CSV or JSON rows into a Site's SQL database. */\n async importSiteSql(\n workspaceId: string,\n siteId: string,\n request: SiteSqlImportRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlImportResponse> {\n return await this.requestJson<SiteSqlImportResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/sql/import`,\n request,\n undefined,\n options,\n );\n }\n\n /** Empty a Site's SQL database, keeping (rebuilding) or dropping its schema. */\n async resetSiteSql(\n workspaceId: string,\n siteId: string,\n request: { schema?: \"keep\" | \"drop\" } = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteSqlResetResponse> {\n return await this.requestJson<SiteSqlResetResponse>(\n \"POST\",\n `${siteDataPath(workspaceId, siteId)}/sql/reset`,\n { confirm: true, ...request },\n undefined,\n options,\n );\n }\n\n /**\n * A Site's web publication: hostname, access, embedded agent, limits,\n * status and moderation. 404 when the Site was never published; 503\n * `sites_publishing_disabled` when the deployment has no Sites domain.\n */\n async getSitePublication(\n workspaceId: string,\n siteId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SitePublication> {\n return await this.requestJson<SitePublication>(\n \"GET\",\n sitePublicationPath(workspaceId, siteId),\n undefined,\n undefined,\n options,\n );\n }\n\n /**\n * Publish a Site on its own hostname or change its publication. Omitted\n * fields keep their current values. 409 `site_hostname_taken` when the\n * label belongs to another Site; 403 when the Site is Only me or the\n * caller cannot manage it.\n */\n async updateSitePublication(\n workspaceId: string,\n siteId: string,\n request: UpsertSitePublicationRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SitePublication> {\n return await this.requestJson<SitePublication>(\n \"PUT\",\n sitePublicationPath(workspaceId, siteId),\n request,\n undefined,\n options,\n );\n }\n\n /** Stop serving a published Site. Its hostname stays held for the workspace. */\n async unpublishSite(\n workspaceId: string,\n siteId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SitePublication> {\n return await this.requestJson<SitePublication>(\n \"DELETE\",\n sitePublicationPath(workspaceId, siteId),\n undefined,\n undefined,\n options,\n );\n }\n\n /**\n * Apply a readiness warning's one-click fix (`publication.warnings[].fix`):\n * a Site Data collection's guest access or a Site SQL query's audience.\n * Answers the publication with fresh warnings. 404\n * `site_fix_target_missing` when the collection or query no longer exists.\n */\n async applySitePublicationFix(\n workspaceId: string,\n siteId: string,\n fix: SitePublishWarningFix,\n options: { signal?: AbortSignal } = {},\n ): Promise<SitePublication> {\n return await this.requestJson<SitePublication>(\n \"POST\",\n `${sitePublicationPath(workspaceId, siteId)}/fixes`,\n fix,\n undefined,\n options,\n );\n }\n\n /**\n * This month's Site platform usage of the workspace (gateway requests,\n * Site SQL rows read and written, Site SQL and Site Data storage) against\n * its monthly allowance, with the billing mode and the Opengeni-wide\n * brake state.\n */\n async getSitePlatformUsage(\n workspaceId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SitePlatformUsage> {\n return await this.requestJson<SitePlatformUsage>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/site-platform-usage`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Whether a hostname label is valid and free for a Site in this workspace. */\n async checkSiteHostname(\n workspaceId: string,\n label: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteHostnameAvailability> {\n return await this.requestJson<SiteHostnameAvailability>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/site-hostnames/${encodeURIComponent(label)}`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Take a published Site down at once; visitors see a takedown notice. */\n async takeDownSite(\n workspaceId: string,\n siteId: string,\n request: SiteTakedownRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SitePublication> {\n return await this.requestJson<SitePublication>(\n \"POST\",\n `${sitePublicationPath(workspaceId, siteId)}/takedown`,\n request,\n undefined,\n options,\n );\n }\n\n /** Serve a Site that was taken down again. */\n async restoreSite(\n workspaceId: string,\n siteId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SitePublication> {\n return await this.requestJson<SitePublication>(\n \"POST\",\n `${sitePublicationPath(workspaceId, siteId)}/restore`,\n {},\n undefined,\n options,\n );\n }\n\n /** Abuse reports visitors filed against a published Site. */\n async listSiteAbuseReports(\n workspaceId: string,\n siteId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<{ reports: SiteAbuseReport[] }> {\n return await this.requestJson<{ reports: SiteAbuseReport[] }>(\n \"GET\",\n `${sitePublicationPath(workspaceId, siteId)}/reports`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Close an abuse report as dismissed or actioned. */\n async updateSiteAbuseReport(\n workspaceId: string,\n siteId: string,\n reportId: string,\n request: { status: \"dismissed\" | \"actioned\" },\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteAbuseReport> {\n return await this.requestJson<SiteAbuseReport>(\n \"PATCH\",\n `${sitePublicationPath(workspaceId, siteId)}/reports/${encodeURIComponent(reportId)}`,\n request,\n undefined,\n options,\n );\n }\n\n /** The workspace's default limit profile for published Sites. */\n async getSiteLimitProfile(\n workspaceId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteLimitProfile> {\n return await this.requestJson<SiteLimitProfile>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/site-limit-profile`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Change the workspace's default limit profile for published Sites. Needs a workspace admin. */\n async updateSiteLimitProfile(\n workspaceId: string,\n profile: SiteLimitProfile,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteLimitProfile> {\n return await this.requestJson<SiteLimitProfile>(\n \"PUT\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/site-limit-profile`,\n profile,\n undefined,\n options,\n );\n }\n\n /**\n * Let the signed-in person open a published Site: returns a one-time code,\n * bound to the Site host, PKCE challenge and redirect, inside `redirectTo`.\n * 403 `site_access_denied` when they may not open the Site.\n */\n async authorizeSiteViewer(\n request: SiteAuthAuthorizeRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<SiteAuthAuthorizeResponse> {\n return await this.requestJson<SiteAuthAuthorizeResponse>(\n \"POST\",\n \"/v1/site-auth/authorize\",\n request,\n undefined,\n options,\n );\n }\n\n /** Search the official MCP registry for installable capabilities. */\n async discoverMcpCapabilities(\n workspaceId: string,\n options: { query?: string; limit?: number } = {},\n ): Promise<DiscoverMcpCapabilitiesResponse> {\n return await this.requestJson<DiscoverMcpCapabilitiesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/capabilities/discovery/mcp-registry`,\n undefined,\n {\n ...(options.query !== undefined ? { query: options.query } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n );\n }\n\n async discoverPlugins(\n workspaceId: string,\n options: {\n id?: string;\n query?: string;\n provider?: string;\n offset?: number;\n } = {},\n ): Promise<import(\"@opengeni/contracts\").PluginDiscoveryPage> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/capabilities/discovery/plugins`,\n undefined,\n {\n ...(options.id ? { id: options.id } : {}),\n\n ...(options.query ? { query: options.query } : {}),\n ...(options.provider ? { provider: options.provider } : {}),\n ...(options.offset !== undefined ? { offset: String(options.offset) } : {}),\n },\n );\n }\n\n async inspectMcpAuthentication(\n workspaceId: string,\n url: string,\n ): Promise<{\n kind: \"oauth2\" | \"none\" | \"unknown\";\n message?: string;\n }> {\n return await this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/capabilities/discovery/mcp-auth`,\n { url },\n );\n }\n\n /** List installed protocol-neutral OpenAPI and GraphQL Integrations. */\n async listApiIntegrations(workspaceId: string): Promise<ListApiIntegrationsResponse> {\n return await this.requestJson<ListApiIntegrationsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations`,\n );\n }\n\n /** List curated provider definitions without exposing deployment OAuth credentials. */\n async listIntegrationDefinitions(\n workspaceId: string,\n ): Promise<ListIntegrationDefinitionsResponse> {\n return await this.requestJson<ListIntegrationDefinitionsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/definitions`,\n );\n }\n\n /** Detect and compile an Integration without mutating workspace state. */\n async previewApiIntegration(\n workspaceId: string,\n request: PreviewApiIntegrationRequest,\n ): Promise<ApiIntegrationPreview> {\n return await this.requestJson<ApiIntegrationPreview>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/preview`,\n request,\n );\n }\n\n /** Start a signed PKCE OAuth flow for a built-in Google or Microsoft definition. */\n async startApiIntegrationOAuth(\n workspaceId: string,\n request: ApiIntegrationOAuthStartRequest,\n ): Promise<OAuthStartResponse> {\n return await this.requestJson<OAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/oauth/start`,\n request,\n );\n }\n\n /** Install only the exact immutable revision and digest accepted in preview. */\n async installApiIntegration(\n workspaceId: string,\n request: InstallApiIntegrationRequest,\n ): Promise<InstalledApiIntegration> {\n return await this.requestJson<InstalledApiIntegration>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/install`,\n request,\n );\n }\n\n async previewApiIntegrationUninstall(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n ): Promise<ApiIntegrationUninstallPreview> {\n return await this.requestJson<ApiIntegrationUninstallPreview>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/uninstall-preview`,\n );\n }\n\n /** Remove one Integration instance without deleting its Connection or sibling instances. */\n async uninstallApiIntegration(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n request: UninstallApiIntegrationRequest,\n ): Promise<UninstallApiIntegrationResult> {\n return await this.requestJson<UninstallApiIntegrationResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}`,\n request,\n );\n }\n\n /** List immutable provider facets and their exact per-account bindings. */\n async listIntegrationFacets(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n ): Promise<IntegrationInstanceFacetsResponse> {\n return await this.requestJson<IntegrationInstanceFacetsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets`,\n );\n }\n\n /** Configure or OCC-update one adapter-owned facet on an Integration instance. */\n async configureIntegrationFacet(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: UpsertIntegrationFacetRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.requestJson<IntegrationFacetMutationResult>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}`,\n request,\n );\n }\n\n /** Browse source metadata through one exact Google Drive Integration instance. */\n async browseGoogleDriveFacetSource(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n options: {\n parentId?: string | undefined;\n pageToken?: string | undefined;\n } = {},\n ): Promise<GoogleDriveBrowseResponse> {\n const query = new URLSearchParams();\n if (options.parentId) query.set(\"parentId\", options.parentId);\n if (options.pageToken) query.set(\"pageToken\", options.pageToken);\n const suffix = query.size > 0 ? `?${query}` : \"\";\n return await this.requestJson<GoogleDriveBrowseResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}/browse${suffix}`,\n );\n }\n\n /** Verify and bind document sources to one exact Google Drive Integration instance. */\n async saveGoogleDriveFacetSource(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: SaveGoogleDriveIntegrationSourceRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.requestJson<IntegrationFacetMutationResult>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}/source`,\n request,\n );\n }\n\n async pauseIntegrationFacet(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: MutateIntegrationFacetRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.mutateIntegrationFacetLifecycle(\n workspaceId,\n capabilityId,\n instanceKey,\n facetKey,\n \"pause\",\n request,\n );\n }\n\n async resumeIntegrationFacet(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: MutateIntegrationFacetRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.mutateIntegrationFacetLifecycle(\n workspaceId,\n capabilityId,\n instanceKey,\n facetKey,\n \"resume\",\n request,\n );\n }\n\n async removeIntegrationFacet(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: MutateIntegrationFacetRequest,\n ): Promise<IntegrationFacetRemovalResult> {\n return await this.requestJson<IntegrationFacetRemovalResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}`,\n request,\n );\n }\n\n private async mutateIntegrationFacetLifecycle(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n action: \"pause\" | \"resume\",\n request: MutateIntegrationFacetRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.requestJson<IntegrationFacetMutationResult>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}/${action}`,\n request,\n );\n }\n\n async previewPlugin(workspaceId: string, request: PreviewPluginRequest): Promise<PluginPreview> {\n return await this.requestJson<PluginPreview>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/plugins/preview`,\n request,\n );\n }\n\n async getInstalledPluginDetails(\n workspaceId: string,\n pluginKey: string,\n ): Promise<import(\"@opengeni/contracts\").PluginDiscoveryItem> {\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/plugins/details`, undefined, {\n pluginKey,\n });\n }\n\n async listInstalledPlugins(workspaceId: string): Promise<ListInstalledPluginsResponse> {\n return await this.requestJson<ListInstalledPluginsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/plugins`,\n );\n }\n\n async installPlugin(\n workspaceId: string,\n request: InstallPluginRequest,\n ): Promise<InstalledPlugin> {\n return await this.requestJson<InstalledPlugin>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/plugins/install`,\n request,\n );\n }\n\n async previewPluginUninstall(\n workspaceId: string,\n pluginKey: string,\n ): Promise<PluginUninstallPreview> {\n return await this.requestJson<PluginUninstallPreview>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/plugins/${encodeURIComponent(pluginKey)}/uninstall-preview`,\n );\n }\n\n async uninstallPlugin(\n workspaceId: string,\n pluginKey: string,\n request: UninstallPluginRequest,\n ): Promise<UninstallPluginResult> {\n return await this.requestJson<UninstallPluginResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/plugins/${encodeURIComponent(pluginKey)}`,\n request,\n );\n }\n\n /** Resolve one public skills.sh or GitHub Skill folder to an immutable review preview. */\n async previewSkillImport(\n workspaceId: string,\n request: PreviewSkillImportRequest,\n ): Promise<SkillImportPreview> {\n return await this.requestJson<SkillImportPreview>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/preview`,\n request,\n );\n }\n\n /** Install only the exact commit and full-content digest accepted during preview. */\n async installSkill(workspaceId: string, request: InstallSkillRequest): Promise<InstalledSkill> {\n return await this.requestJson<InstalledSkill>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/install`,\n request,\n );\n }\n\n /** List Skills from the authoritative Plugin/Skill-Facet installation ledger. */\n async listInstalledSkills(workspaceId: string): Promise<ListInstalledSkillsResponse> {\n return await this.requestJson<ListInstalledSkillsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/skills`,\n );\n }\n\n /** Shared authored/installed catalog metadata. File bodies are read on demand. */\n async listWorkspaceSkills(\n workspaceId: string,\n options: { cursor?: string; limit?: number; sessionId?: string } = {},\n ): Promise<{ skills: SkillSummary[]; nextCursor: string | null }> {\n const query = new URLSearchParams();\n if (options.cursor !== undefined) query.set(\"cursor\", options.cursor);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.sessionId !== undefined) query.set(\"sessionId\", options.sessionId);\n const suffix = query.size ? `?${query.toString()}` : \"\";\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/skills/content${suffix}`);\n }\n\n async readWorkspaceSkill(\n workspaceId: string,\n skillId: string,\n revisionId?: string,\n ): Promise<SkillRecord> {\n const query = revisionId ? `?revisionId=${encodeURIComponent(revisionId)}` : \"\";\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/skills/content/${encodeURIComponent(skillId)}${query}`,\n );\n }\n\n async saveWorkspaceSkill(\n workspaceId: string,\n request: SaveWorkspaceSkillRequest,\n ): Promise<SkillWriteReceipt> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/skills/content/save`, request);\n }\n\n /** Permanently remove a personal/workspace Skill and all its saved revisions. */\n async removeWorkspaceSkill(\n workspaceId: string,\n skillId: string,\n request: RemoveWorkspaceSkillRequest,\n ): Promise<SkillWriteReceipt> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/content/${encodeURIComponent(skillId)}/remove`,\n request,\n );\n }\n\n async approveWorkspaceSkill(\n workspaceId: string,\n skillId: string,\n request: ApplyWorkspaceSkillRevisionRequest,\n ): Promise<SkillWriteReceipt> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/content/${encodeURIComponent(skillId)}/approve`,\n request,\n );\n }\n\n async restoreWorkspaceSkill(\n workspaceId: string,\n skillId: string,\n request: ApplyWorkspaceSkillRevisionRequest,\n ): Promise<SkillWriteReceipt> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/content/${encodeURIComponent(skillId)}/restore`,\n request,\n );\n }\n\n async rejectWorkspaceSkill(\n workspaceId: string,\n skillId: string,\n request: ApplyWorkspaceSkillRevisionRequest,\n ): Promise<SkillWriteReceipt> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/content/${encodeURIComponent(skillId)}/reject`,\n request,\n );\n }\n\n /** Install one exact reviewed curated-library Skill through the Skill domain. */\n async installLibrarySkill(\n workspaceId: string,\n libraryId: string,\n request: InstallLibrarySkillRequest,\n ): Promise<InstalledSkill> {\n return await this.requestJson<InstalledSkill>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/library/${encodeURIComponent(libraryId)}/install`,\n request,\n );\n }\n\n async previewSkillUninstall(\n workspaceId: string,\n capabilityId: string,\n ): Promise<SkillUninstallPreview> {\n return await this.requestJson<SkillUninstallPreview>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/skills/${encodeURIComponent(capabilityId)}/uninstall-preview`,\n );\n }\n\n /** Remove the direct owner under an optimistic installation-version fence. */\n async uninstallSkill(\n workspaceId: string,\n capabilityId: string,\n request: UninstallSkillRequest,\n ): Promise<UninstallSkillResult> {\n return await this.requestJson<UninstallSkillResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/skills/${encodeURIComponent(capabilityId)}`,\n request,\n );\n }\n\n // --- Connections -------------------------------------------------------------------------------\n\n /** This authenticated user's accounts across the organization, plus current-workspace shared accounts.\n * Inactive accounts are opt-in for settings display; execution pickers keep the active default. */\n async listOwnConnectionAccounts(\n workspaceId: string,\n options: { includeInactive?: boolean } = {},\n ): Promise<ConnectionMetadata[]> {\n const response = await this.requestJson<ListConnectionsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/accounts`,\n undefined,\n options.includeInactive === true ? { includeInactive: \"true\" } : {},\n );\n return response.connections;\n }\n\n async listConnections(workspaceId: string): Promise<ConnectionMetadata[]> {\n const response = await this.requestJson<ListConnectionsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections`,\n );\n return response.connections;\n }\n\n /** Secret-free status for the caller's exact personal GitHub connection. */\n async personalGitHubStatus(workspaceId: string): Promise<PersonalGitHubConnectionStatusResponse> {\n return await this.requestJson<PersonalGitHubConnectionStatusResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/github`,\n );\n }\n\n /** Start the dedicated personal GitHub authorization-code + PKCE flow. */\n async startPersonalGitHubOAuth(\n workspaceId: string,\n request: Omit<PersonalGitHubOAuthStartRequest, \"connectionId\"> = {},\n ): Promise<PersonalGitHubOAuthStartResponse> {\n return await this.requestJson<PersonalGitHubOAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/github/oauth/start`,\n request,\n );\n }\n\n /** Re-authorize one exact personal GitHub Connection generation in place. */\n async reconnectPersonalGitHub(\n workspaceId: string,\n connectionId: string,\n request: Omit<PersonalGitHubOAuthStartRequest, \"connectionId\"> = {},\n ): Promise<PersonalGitHubOAuthStartResponse> {\n return await this.requestJson<PersonalGitHubOAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/github/reconnect`,\n request,\n );\n }\n\n /** Revoke one exact generation through an idempotent owner-only disconnect. */\n async disconnectPersonalGitHub(\n workspaceId: string,\n connectionId: string,\n request: PersonalGitHubDisconnectRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}`,\n request,\n );\n return response.connection;\n }\n\n /** Browse one bounded page of repositories visible to one exact owner connection. */\n async listPersonalGitHubRepositories(\n workspaceId: string,\n connectionId: string,\n options: ListPersonalGitHubRepositoriesOptions = {},\n ): Promise<ListPersonalGitHubRepositoriesResponse> {\n return await this.requestJson<ListPersonalGitHubRepositoriesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/github/repositories`,\n undefined,\n {\n ...(options.cursor !== undefined ? { cursor: String(options.cursor) } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n );\n }\n\n /** Atomically replace the exact owner connection's selected repository set. */\n async replacePersonalGitHubRepositorySelections(\n workspaceId: string,\n connectionId: string,\n request: ReplacePersonalGitHubRepositorySelectionsRequest,\n ): Promise<PersonalGitHubRepositorySelectionState> {\n return await this.requestJson<PersonalGitHubRepositorySelectionState>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/github/repositories`,\n request,\n );\n }\n\n /** Revalidate every selected repository without accepting provider URLs from the caller. */\n async verifyPersonalGitHubRepositorySelections(\n workspaceId: string,\n connectionId: string,\n request: VerifyPersonalGitHubRepositorySelectionsRequest,\n ): Promise<PersonalGitHubRepositorySelectionState> {\n return await this.requestJson<PersonalGitHubRepositorySelectionState>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/github/repositories/verify`,\n request,\n );\n }\n\n /** List the secret-free Slack team -> Opengeni tenant routing authority. */\n async listSlackInstallationBindings(workspaceId: string): Promise<SlackInstallationBinding[]> {\n const response = await this.requestJson<ListSlackInstallationBindingsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/slack-bot/bindings`,\n );\n return response.bindings;\n }\n\n async createConnection(\n workspaceId: string,\n request: CreateConnectionRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections`,\n request,\n );\n return response.connection;\n }\n\n /**\n * Verify a pasted Fiken personal API token and store it as the\n * workspace-shared Fiken connection (or rewrite an existing one in place).\n */\n async installFikenConnection(\n workspaceId: string,\n request: FikenInstallRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/fiken/install`,\n request,\n );\n return response.connection;\n }\n\n /** Start the Fiken OAuth flow for the workspace-shared Fiken connection. */\n async startFikenOAuth(\n workspaceId: string,\n request: FikenOAuthStartRequest = {},\n ): Promise<FikenOAuthStartResponse> {\n return await this.requestJson<FikenOAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/fiken/oauth/start`,\n request,\n );\n }\n\n /** List verified local and explicitly organization-shared bots, excluding personal accounts. */\n async listAvailableOpenGeniSlackBots(workspaceId: string): Promise<AvailableOpenGeniSlackBots> {\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/connections/slack-bot/available`);\n }\n\n /** Read configured sharing independently of installation credential health. */\n async getOpenGeniSlackBotOrganizationAccess(\n workspaceId: string,\n connectionId: string,\n ): Promise<OpenGeniSlackBotOrganizationAccess> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/slack-bot/organization-access`,\n );\n }\n\n /** An organization administrator may share an installed bot with authorized workspaces. */\n async setOpenGeniSlackBotOrganizationAccess(\n workspaceId: string,\n connectionId: string,\n request: UpdateOpenGeniSlackBotOrganizationAccess,\n ): Promise<OpenGeniSlackBotOrganizationAccess> {\n return this.requestJson(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/slack-bot/organization-access`,\n request,\n );\n }\n\n /** Start the public Slack installation flow for the workspace-shared Opengeni bot. */\n async startOpenGeniSlackBotInstall(\n workspaceId: string,\n request: OpenGeniSlackBotInstallRequest = {},\n ): Promise<OpenGeniSlackBotInstallStart> {\n return await this.requestJson<OpenGeniSlackBotInstallStart>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/slack-bot/install`,\n request,\n );\n }\n\n async listOpenGeniSlackReactionChannels(\n workspaceId: string,\n connectionId: string,\n cursor?: string,\n ): Promise<SlackReactionChannelListResponse> {\n const query = new URLSearchParams({ connectionId });\n if (cursor) query.set(\"cursor\", cursor);\n return await this.requestJson<SlackReactionChannelListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/slack/reaction-channels?${query}`,\n );\n }\n\n async listOpenGeniSlackChannelRoutes(\n workspaceId: string,\n connectionId: string,\n ): Promise<SlackChannelRouteListResponse> {\n const query = new URLSearchParams({ connectionId });\n return await this.requestJson<SlackChannelRouteListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/slack/channel-routes?${query}`,\n );\n }\n\n async updateOpenGeniSlackChannelRoutes(\n workspaceId: string,\n request: UpdateSlackChannelRoutesRequest,\n ): Promise<void> {\n await this.requestJson<{ ok: boolean }>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/integrations/slack/channel-routes`,\n request,\n );\n }\n\n async updateConnection(\n workspaceId: string,\n connectionId: string,\n request: UpdateConnectionRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}`,\n request,\n );\n return response.connection;\n }\n\n async deleteConnection(workspaceId: string, connectionId: string): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}`,\n );\n return response.connection;\n }\n\n async disconnectGoogleDriveConnection(\n workspaceId: string,\n connectionId: string,\n request: GoogleDriveDisconnectRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}`,\n request,\n );\n return response.connection;\n }\n\n async transitionGoogleDriveLifecycle(\n workspaceId: string,\n connectionId: string,\n request: GoogleDriveLifecycleActionRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/connections/google-drive/${connectionId}/lifecycle`,\n request,\n );\n return response.connection;\n }\n\n /** Start an OAuth connection flow; redirect the user to the returned `authorizationUrl`. */\n async startConnectionOAuth(\n workspaceId: string,\n request: OAuthStartRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<OAuthStartResponse> {\n return await this.requestJson<OAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/oauth/start`,\n request,\n {},\n options,\n );\n }\n\n /**\n * Start a first-party social OAuth flow (X / Reddit); redirect the user to\n * the returned `authorizationUrl`. The completed connection lands in\n * `listSocialConnections`.\n */\n async startSocialOAuth(\n workspaceId: string,\n request: SocialOAuthStartRequest,\n ): Promise<OAuthStartResponse> {\n return await this.requestJson<OAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/social/oauth/start`,\n request,\n );\n }\n\n /** Connected social accounts (X / Reddit / pushed custom providers). */\n async listSocialConnections(workspaceId: string): Promise<SocialConnection[]> {\n return await this.requestJson<SocialConnection[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/social/connections`,\n );\n }\n\n /** Drop the stored social OAuth credential and disable the connection. */\n async disconnectSocialConnection(\n workspaceId: string,\n connectionId: string,\n ): Promise<SocialConnection> {\n return await this.requestJson<SocialConnection>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/social/connections/${connectionId}`,\n );\n }\n\n /** Public, immutably-cached URL for a catalog item's logo, or null when the item has none. */\n catalogAssetUrl(logoAssetPath: string | null): string | null {\n return logoAssetPath ? `${this.baseUrl}/v1/${logoAssetPath}` : null;\n }\n\n /** Read a passive catalog mark through this client's authenticated transport.\n * Useful when an embedding backend protects even public upstream assets. */\n async downloadCatalogAsset(\n logoAssetPath: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<Blob> {\n if (\n !/^catalog-assets\\/[a-zA-Z0-9_./-]+$/.test(logoAssetPath) ||\n logoAssetPath.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n )\n throw new TypeError(\"A catalog asset path is required\");\n const response = await this.requestResponse(\"GET\", `/v1/${logoAssetPath}`, {}, options);\n const type = response.headers.get(\"content-type\")?.split(\";\")[0] ?? \"\";\n if (!type.startsWith(\"image/\")) {\n await response.body?.cancel();\n throw new Error(\"The catalog asset is not an image\");\n }\n const bytes = await readBoundedResponseBytes(response, 2_000_000, null);\n return new Blob([Uint8Array.from(bytes)], { type });\n }\n\n // --- GitHub ----------------------------------------------------------------------------------\n\n /** GitHub App server configuration plus truthful workspace binding status. */\n async getGitHubApp(\n workspaceId: string,\n options: { returnPath?: string } = {},\n ): Promise<GitHubAppInfo> {\n return await this.requestJson<GitHubAppInfo>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/github/app`,\n undefined,\n options.returnPath ? { returnPath: options.returnPath } : undefined,\n );\n }\n\n /** Build the GitHub owner-consent entry URL for fresh workspace-bound state. */\n githubConnectUrl(workspaceId: string, state: string): string {\n return this.url(`/v1/workspaces/${workspaceId}/github/connect`, { state });\n }\n\n async listGitHubRepositories(workspaceId: string): Promise<GitHubRepositoriesResponse> {\n return await this.requestJson<GitHubRepositoriesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/github/repositories`,\n );\n }\n\n /** Effective confirmation policy for each GitHub identity available to this caller. */\n async getGitHubActionPolicies(workspaceId: string): Promise<GitHubActionPoliciesResponse> {\n return await this.requestJson<GitHubActionPoliciesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/github/action-policies`,\n );\n }\n\n /** Change one GitHub action group without broadening review or merge policy. */\n async updateGitHubActionPolicy(\n workspaceId: string,\n request: UpdateGitHubActionPolicyRequest,\n ): Promise<GitHubActionPolicyActorState> {\n return await this.requestJson<GitHubActionPolicyActorState>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/github/action-policies`,\n request,\n );\n }\n\n /** Re-sync the installation's repository list from GitHub. */\n async syncGitHubRepositories(workspaceId: string): Promise<GitHubRepositoriesResponse> {\n return await this.requestJson<GitHubRepositoriesResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/github/repositories/sync`,\n );\n }\n\n /** Remove one workspace binding without uninstalling the GitHub App itself. */\n async unlinkGitHubInstallation(workspaceId: string, installationId: number): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/github/installations/${installationId}`,\n );\n }\n\n /** Build a GitHub App manifest + the GitHub URL to submit it to. */\n async createGitHubAppManifest(\n workspaceId: string,\n request: CreateGitHubAppManifestRequest = {},\n ): Promise<CreateGitHubAppManifestResponse> {\n return await this.requestJson<CreateGitHubAppManifestResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/github/app-manifest`,\n request,\n );\n }\n\n // --- API keys ----------------------------------------------------------------------------------\n\n async listApiKeys(workspaceId: string): Promise<ApiKey[]> {\n const response = await this.requestJson<ListApiKeysResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/api-keys`,\n );\n return response.apiKeys;\n }\n\n /** The returned `token` is shown once; only its prefix is stored. */\n async createApiKey(\n workspaceId: string,\n request: CreateApiKeyRequest,\n ): Promise<CreateApiKeyResponse> {\n return await this.requestJson<CreateApiKeyResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/api-keys`,\n request,\n );\n }\n\n /** Revoke an API key. Returns the revoked key. */\n async deleteApiKey(workspaceId: string, apiKeyId: string): Promise<ApiKey> {\n return await this.requestJson<ApiKey>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/api-keys/${apiKeyId}`,\n );\n }\n\n async listOrganizationApiKeys(organizationId: string): Promise<ApiKey[]> {\n const response = await this.requestJson<ListApiKeysResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/api-keys`,\n );\n return response.apiKeys;\n }\n\n /** The returned `token` is shown once; only its prefix is stored. */\n async createOrganizationApiKey(\n organizationId: string,\n request: CreateOrganizationApiKeyRequest,\n ): Promise<CreateApiKeyResponse> {\n return await this.requestJson<CreateApiKeyResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/api-keys`,\n request,\n );\n }\n\n /** Revoke an organization-scoped API key. Returns the revoked key. */\n async deleteOrganizationApiKey(organizationId: string, apiKeyId: string): Promise<ApiKey> {\n return await this.requestJson<ApiKey>(\n \"DELETE\",\n `/v1/organizations/${organizationId}/api-keys/${apiKeyId}`,\n );\n }\n\n // --- Connected agents (organization MCP server) ------------------------------------------------\n\n /**\n * Agents people connected to the organization MCP server (`/v1/mcp`).\n * Everyone sees their own; owners and admins see everyone's. Browser only:\n * keys and agents are refused, so an agent can't widen its own access.\n */\n async listOrganizationMcpConnections(\n organizationId: string,\n ): Promise<OrganizationMcpConnectionList> {\n return await this.requestJson<OrganizationMcpConnectionList>(\n \"GET\",\n `/v1/organizations/${organizationId}/mcp-connections`,\n );\n }\n\n /** Change what a connected agent can do and where; its next request uses it. Only its person. */\n async updateOrganizationMcpConnection(\n organizationId: string,\n connectionId: string,\n request: UpdateOrganizationMcpConnectionRequest,\n ): Promise<OrganizationMcpConnection> {\n return await this.requestJson<OrganizationMcpConnection>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/mcp-connections/${connectionId}`,\n request,\n );\n }\n\n /** Disconnect an agent: every token it holds is refused from now on. */\n async deleteOrganizationMcpConnection(\n organizationId: string,\n connectionId: string,\n ): Promise<void> {\n // JSON even without fields: the route admits browsers only as same-origin JSON.\n await this.requestVoid(\n \"DELETE\",\n `/v1/organizations/${organizationId}/mcp-connections/${connectionId}`,\n {},\n );\n }\n\n // --- Personal API keys -----------------------------------------------------------------------\n\n /**\n * Keys that act as the person who created them, with their live access in\n * this organization capped by each key's access setting. Everyone sees their\n * own; owners and admins see everyone's.\n */\n async listPersonalApiKeys(organizationId: string): Promise<ListPersonalApiKeysResponse> {\n return await this.requestJson<ListPersonalApiKeysResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/personal-api-keys`,\n );\n }\n\n /** Create a key that acts as you. The token is returned once. */\n async createPersonalApiKey(\n organizationId: string,\n request: CreatePersonalApiKeyRequest,\n ): Promise<CreatePersonalApiKeyResponse> {\n return await this.requestJson<CreatePersonalApiKeyResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/personal-api-keys`,\n request,\n );\n }\n\n /** Revoke a personal key: its next request is refused. Its person, or an admin. */\n async revokePersonalApiKey(organizationId: string, apiKeyId: string): Promise<void> {\n // JSON even without fields: the route admits browsers only as same-origin JSON.\n await this.requestVoid(\n \"DELETE\",\n `/v1/organizations/${organizationId}/personal-api-keys/${apiKeyId}`,\n {},\n );\n }\n\n /** Service accounts: organization identities with no person behind them. */\n async listOrganizationServiceAccounts(\n organizationId: string,\n ): Promise<ListOrganizationServiceAccountsResponse> {\n return await this.requestJson<ListOrganizationServiceAccountsResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/service-accounts`,\n );\n }\n\n async getOrganizationServiceAccount(\n organizationId: string,\n serviceAccountId: string,\n ): Promise<OrganizationServiceAccount> {\n return await this.requestJson<OrganizationServiceAccount>(\n \"GET\",\n `/v1/organizations/${organizationId}/service-accounts/${serviceAccountId}`,\n );\n }\n\n /** Create a service account; give it keys with `createOrganizationApiKey({ serviceAccountId })`. */\n async createOrganizationServiceAccount(\n organizationId: string,\n request: CreateOrganizationServiceAccountRequest,\n ): Promise<OrganizationServiceAccount> {\n return await this.requestJson<OrganizationServiceAccount>(\n \"POST\",\n `/v1/organizations/${organizationId}/service-accounts`,\n request,\n );\n }\n\n /** Rename it or change its role; making it a member narrows its keys at once. */\n async updateOrganizationServiceAccount(\n organizationId: string,\n serviceAccountId: string,\n request: UpdateOrganizationServiceAccountRequest,\n ): Promise<OrganizationServiceAccount> {\n return await this.requestJson<OrganizationServiceAccount>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/service-accounts/${serviceAccountId}`,\n request,\n );\n }\n\n /** Delete a service account; every key it holds is revoked at once. */\n async deleteOrganizationServiceAccount(\n organizationId: string,\n serviceAccountId: string,\n ): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/organizations/${organizationId}/service-accounts/${serviceAccountId}`,\n );\n }\n\n /** The pending sign-in an agent started; read by the web app's sign-in page. */\n async getMcpConnectionRequest(requestToken: string): Promise<McpConnectionRequest> {\n return await this.requestJson<McpConnectionRequest>(\n \"GET\",\n `/v1/mcp-connections/requests/${encodeURIComponent(requestToken)}`,\n );\n }\n\n /** Allow or deny an agent's sign-in. Returns where to send the browser next. */\n async answerMcpConnectionRequest(\n requestToken: string,\n decision: McpConnectionDecision,\n ): Promise<{ redirectTo: string }> {\n return await this.requestJson<{ redirectTo: string }>(\n \"POST\",\n `/v1/mcp-connections/requests/${encodeURIComponent(requestToken)}`,\n decision,\n );\n }\n\n // --- Inbox --------------------------------------------------------------------------------------\n\n /**\n * What waits on the signed-in person across their workspaces, newest first.\n * Pass a workspace to see only its items.\n */\n async listInbox(options: { workspaceId?: string } = {}): Promise<ListInboxResponse> {\n const query = options.workspaceId\n ? `?workspaceId=${encodeURIComponent(options.workspaceId)}`\n : \"\";\n return await this.requestJson<ListInboxResponse>(\"GET\", `/v1/inbox${query}`);\n }\n\n /** Mark an item seen, snooze it, or dismiss it. */\n async updateInboxItem(itemId: InboxItem[\"id\"], input: UpdateInboxItemInput): Promise<void> {\n await this.requestJson<unknown>(\n \"PATCH\",\n `/v1/inbox/items/${encodeURIComponent(itemId)}`,\n input,\n );\n }\n\n async getInboxSettings(): Promise<InboxSettings> {\n return await this.requestJson<InboxSettings>(\"GET\", \"/v1/inbox/settings\");\n }\n\n async updateInboxSettings(input: InboxSettings): Promise<InboxSettings> {\n return await this.requestJson<InboxSettings>(\"PUT\", \"/v1/inbox/settings\", input);\n }\n\n /** Whether other members' agents may notify the signed-in person in this workspace. */\n async getMemberNotifications(workspaceId: string): Promise<MemberNotificationsSetting> {\n return await this.requestJson<MemberNotificationsSetting>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/inbox/member-notifications`,\n );\n }\n\n /** Let other members' agents notify the signed-in person in this workspace, or stop them. */\n async updateMemberNotifications(\n workspaceId: string,\n input: MemberNotificationsSetting,\n ): Promise<MemberNotificationsSetting> {\n return await this.requestJson<MemberNotificationsSetting>(\n \"PUT\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/inbox/member-notifications`,\n input,\n );\n }\n\n /** Whether the signed-in person muted this session's replies. */\n async getSessionInboxMute(workspaceId: string, sessionId: string): Promise<SessionInboxMute> {\n return await this.requestJson<SessionInboxMute>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/inbox-mute`,\n );\n }\n\n /**\n * Mute or unmute this session's replies for the signed-in person. Its\n * notifications, questions and approvals still arrive.\n */\n async setSessionInboxMute(\n workspaceId: string,\n sessionId: string,\n input: SessionInboxMute,\n ): Promise<SessionInboxMute> {\n return await this.requestJson<SessionInboxMute>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/inbox-mute`,\n input,\n );\n }\n\n /** This session's admin access, and what the viewer may change about it. */\n async getSessionAdminAccess(workspaceId: string, sessionId: string): Promise<SessionAdminAccess> {\n return await this.requestJson<SessionAdminAccess>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/admin-access`,\n );\n }\n\n /**\n * Give your own session admin access: its agent can then do what you can\n * manage across the organization. An owner or admin, in the app, when the\n * organization allows it. It lasts one hour unless `durationHours` says\n * otherwise (1 to 720), or null for no time limit; giving it again while it\n * is on sets a new time limit from now.\n */\n async grantSessionAdminAccess(\n workspaceId: string,\n sessionId: string,\n input: GrantSessionAdminAccessRequest = {},\n ): Promise<SessionAdminAccess> {\n return await this.requestJson<SessionAdminAccess>(\n \"PUT\",\n `${sessionPath(workspaceId, sessionId)}/admin-access`,\n input,\n );\n }\n\n /** End this session's admin access. */\n async revokeSessionAdminAccess(\n workspaceId: string,\n sessionId: string,\n ): Promise<SessionAdminAccess> {\n return await this.requestJson<SessionAdminAccess>(\n \"DELETE\",\n `${sessionPath(workspaceId, sessionId)}/admin-access`,\n );\n }\n\n // --- Native app sign-in ------------------------------------------------------------------------\n\n /**\n * Approve a native app sign-in from the signed-in browser. Returns the app's\n * callback (`<scheme>://auth/callback?code=…&state=…`) to navigate to.\n */\n async authorizeNativeApp(input: NativeAppAuthorizeInput): Promise<{ redirectUrl: string }> {\n return await this.requestJson<{ redirectUrl: string }>(\n \"POST\",\n \"/v1/native-app/authorize\",\n input,\n );\n }\n\n /** Exchange a native app sign-in code and its PKCE verifier for the app's credential. */\n async exchangeNativeAppCode(input: NativeAppTokenInput): Promise<NativeAppToken> {\n return await this.requestJson<NativeAppToken>(\"POST\", \"/v1/native-app/token\", input);\n }\n\n /**\n * A ticket an Office add-in uses to connect the open workbook to this\n * workspace for the signed-in person (see `@opengeni/sdk/office`).\n */\n async createOfficeWorkbookTicket(workspaceId: string): Promise<OfficeWorkbookTicket> {\n return await this.requestJson<OfficeWorkbookTicket>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/office/workbook-tickets`,\n {},\n );\n }\n\n /** The caller's open workbooks in this workspace, newest first. */\n async listOfficeWorkbooks(workspaceId: string): Promise<OfficeWorkbook[]> {\n const { workbooks } = await this.requestJson<{ workbooks: OfficeWorkbook[] }>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/office/workbooks`,\n );\n return workbooks;\n }\n\n /** Revoke the native app credential this client signs in with. */\n async signOutNativeApp(): Promise<void> {\n await this.requestJson<unknown>(\"POST\", \"/v1/native-app/sign-out\", {});\n }\n\n /** This app credential's push registration, or null when it gets no pushes. */\n async getNativePushDevice(): Promise<NativePushDevice | null> {\n const { device } = await this.requestJson<{ device: NativePushDevice | null }>(\n \"GET\",\n \"/v1/native-app/push-device\",\n );\n return device;\n }\n\n /** Register (or update) this device's push token and rules for this app credential. */\n async registerNativePushDevice(input: RegisterNativePushDeviceInput): Promise<NativePushDevice> {\n const { device } = await this.requestJson<{ device: NativePushDevice }>(\n \"PUT\",\n \"/v1/native-app/push-device\",\n input,\n );\n return device;\n }\n\n /** Stop pushes to this device for this app credential. */\n async unregisterNativePushDevice(): Promise<void> {\n await this.requestJson<unknown>(\"DELETE\", \"/v1/native-app/push-device\");\n }\n\n // --- Organization-wide sessions ----------------------------------------------------------------\n\n /**\n * One page of sessions across every shared workspace of the organization the\n * caller may read within its live workspace scope (an organization API key or\n * organization owner). Each row carries its `workspaceId`; read events,\n * history, and files through the ordinary workspace methods. Personal\n * workspaces are never included and private sessions stay invisible.\n */\n async listOrganizationSessions(\n organizationId: string,\n options: ListOrganizationSessionsOptions = {},\n ): Promise<OrganizationSessionListResponse> {\n return await this.requestJson<OrganizationSessionListResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/sessions`,\n undefined,\n {\n ...(options.limit === undefined ? {} : { limit: String(options.limit) }),\n ...(options.cursor === undefined ? {} : { cursor: options.cursor }),\n ...(options.scopeSubjectId ? { scopeSubjectId: options.scopeSubjectId } : {}),\n ...(options.status === undefined ? {} : { status: options.status }),\n },\n { signal: options.signal },\n );\n }\n\n /**\n * Every session `listOrganizationSessions` would return, following\n * `nextCursor` page by page until the organization is exhausted. A page may\n * be shorter than `limit` while more pages remain, so callers must not treat\n * a short page as the end.\n */\n async *iterateOrganizationSessions(\n organizationId: string,\n options: Omit<ListOrganizationSessionsOptions, \"cursor\"> = {},\n ): AsyncGenerator<Session, void, undefined> {\n let cursor: string | undefined;\n do {\n const page: OrganizationSessionListResponse = await this.listOrganizationSessions(\n organizationId,\n { ...options, ...(cursor === undefined ? {} : { cursor }) },\n );\n for (const session of page.sessions) {\n yield session;\n }\n cursor = page.nextCursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n // --- Billing (account-scoped) --------------------------------------------------------------------\n\n async getBilling(options: { accountId?: string } = {}): Promise<BillingSummary> {\n return await this.requestJson<BillingSummary>(\"GET\", \"/v1/billing\", undefined, {\n ...(options.accountId !== undefined ? { accountId: options.accountId } : {}),\n });\n }\n\n async getOrganizationUsageSummary(\n options: {\n accountId: string;\n period?: import(\"@opengeni/contracts\").OrganizationUsagePeriod;\n },\n requestOptions: OpenGeniRequestOptions = {},\n ): Promise<import(\"@opengeni/contracts\").OrganizationUsageSummary> {\n return await this.requestJson(\n \"GET\",\n \"/v1/billing/usage-summary\",\n undefined,\n {\n accountId: options.accountId,\n period: options.period ?? \"month\",\n },\n requestOptions,\n );\n }\n\n async getOrganizationModelUsage(\n options: {\n accountId: string;\n period?: import(\"@opengeni/contracts\").OrganizationUsagePeriod;\n afterWorkspaceId?: string;\n },\n requestOptions: OpenGeniRequestOptions = {},\n ): Promise<import(\"@opengeni/contracts/organization-model-usage\").OrganizationModelUsage> {\n return await this.requestJson(\n \"GET\",\n \"/v1/billing/usage-models\",\n undefined,\n {\n accountId: options.accountId,\n period: options.period ?? \"month\",\n ...(options.afterWorkspaceId ? { afterWorkspaceId: options.afterWorkspaceId } : {}),\n },\n requestOptions,\n );\n }\n\n async getOrganizationUsageWorkspacePage(\n options: {\n accountId: string;\n period?: import(\"@opengeni/contracts\").OrganizationUsagePeriod;\n until: string;\n afterWorkspaceId?: string;\n },\n requestOptions: OpenGeniRequestOptions = {},\n ): Promise<import(\"@opengeni/contracts\").OrganizationUsageWorkspacePage> {\n return await this.requestJson(\n \"GET\",\n \"/v1/billing/usage-workspaces\",\n undefined,\n {\n accountId: options.accountId,\n period: options.period ?? \"month\",\n until: options.until,\n ...(options.afterWorkspaceId ? { afterWorkspaceId: options.afterWorkspaceId } : {}),\n },\n requestOptions,\n );\n }\n\n async getBillingUsage(\n options: { accountId?: string; workspaceId?: string } = {},\n ): Promise<BillingUsageResponse> {\n return await this.requestJson<BillingUsageResponse>(\"GET\", \"/v1/billing/usage\", undefined, {\n ...(options.accountId !== undefined ? { accountId: options.accountId } : {}),\n ...(options.workspaceId !== undefined ? { workspaceId: options.workspaceId } : {}),\n });\n }\n\n async getWorkspaceInsights(\n workspaceId: string,\n options: {\n range?: InsightsRange;\n provider?: string;\n model?: string;\n rootSessionId?: string;\n sessionId?: string;\n signal?: AbortSignal;\n } = {},\n ): Promise<WorkspaceInsightsResponse> {\n return await this.requestJson<WorkspaceInsightsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/insights`,\n undefined,\n {\n range: options.range ?? \"week\",\n ...(options.provider !== undefined ? { provider: options.provider } : {}),\n ...(options.model !== undefined ? { model: options.model } : {}),\n ...(options.rootSessionId !== undefined ? { rootSessionId: options.rootSessionId } : {}),\n ...(options.sessionId !== undefined ? { sessionId: options.sessionId } : {}),\n },\n { signal: options.signal },\n );\n }\n\n /** Shared usage under the existing workspace access gate. */\n async getWorkspaceInsightsSiteUsage(\n workspaceId: string,\n options: Partial<InsightsSiteUsageQuery> = {},\n requestOptions: OpenGeniRequestOptions = {},\n ): Promise<InsightsSiteUsageResponse> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/insights/sites`,\n undefined,\n { range: options.range ?? \"month\" },\n requestOptions,\n );\n }\n\n /** Shared usage under the existing workspace access gate. */\n async getWorkspaceInsightsUsage(\n workspaceId: string,\n options: WorkspaceInsightsUsageOptions = {},\n requestOptions: OpenGeniRequestOptions = {},\n ): Promise<InsightsUsageResponse> {\n return await this.requestJson(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/insights/usage${insightsUsageQueryString(options)}`,\n undefined,\n {},\n requestOptions,\n );\n }\n\n /** Shared usage under the existing organization access gate. */\n async getOrganizationInsightsUsage(\n accountId: string,\n options: OrganizationInsightsUsageOptions = {},\n requestOptions: OpenGeniRequestOptions = {},\n ): Promise<InsightsUsageResponse> {\n return await this.requestJson(\n \"GET\",\n `/v1/organizations/${encodeURIComponent(accountId)}/insights/usage${insightsUsageQueryString(options)}`,\n undefined,\n {},\n requestOptions,\n );\n }\n\n /** Visible calls only; a filter never grants access to hidden call facts. */\n async listInsightsCalls(\n scope: Extract<InsightsCallsScope, { kind: \"workspace\" }>,\n options?: WorkspaceInsightsCallsOptions,\n requestOptions?: OpenGeniRequestOptions,\n ): Promise<InsightsCallsResponse>;\n async listInsightsCalls(\n scope: Extract<InsightsCallsScope, { kind: \"organization\" }>,\n options?: OrganizationInsightsCallsOptions,\n requestOptions?: OpenGeniRequestOptions,\n ): Promise<InsightsCallsResponse>;\n async listInsightsCalls(\n scope: InsightsCallsScope,\n options: OrganizationInsightsCallsOptions = {},\n requestOptions: OpenGeniRequestOptions = {},\n ): Promise<InsightsCallsResponse> {\n const path =\n scope.kind === \"workspace\"\n ? `/v1/workspaces/${encodeURIComponent(scope.workspaceId)}/insights/calls`\n : `/v1/organizations/${encodeURIComponent(scope.accountId)}/insights/calls`;\n return await this.requestJson(\n \"GET\",\n `${path}${insightsUsageQueryString(options)}`,\n undefined,\n {},\n requestOptions,\n );\n }\n\n async getBillingEntitlements(\n options: { accountId?: string } = {},\n ): Promise<BillingEntitlementsResponse> {\n return await this.requestJson<BillingEntitlementsResponse>(\n \"GET\",\n \"/v1/billing/entitlements\",\n undefined,\n {\n ...(options.accountId !== undefined ? { accountId: options.accountId } : {}),\n },\n );\n }\n\n /** Start a Stripe checkout for prepaid credits. */\n async createBillingCheckout(request: CreateCheckoutRequest): Promise<CreateCheckoutResponse> {\n return await this.requestJson<CreateCheckoutResponse>(\"POST\", \"/v1/billing/checkout\", request);\n }\n\n /**\n * Where one checkout stands, and whether its credits reached the balance.\n * Poll it after the customer returns from Stripe Checkout.\n */\n async getBillingCheckout(\n checkoutSessionId: string,\n options: { accountId?: string } = {},\n ): Promise<BillingCheckoutStatus> {\n return await this.requestJson(\n \"GET\",\n `/v1/billing/checkout/${encodeURIComponent(checkoutSessionId)}`,\n undefined,\n {\n ...(options.accountId !== undefined ? { accountId: options.accountId } : {}),\n },\n );\n }\n\n /** Open Stripe's hosted portal for invoices and payment information. */\n async createBillingPortalSession(\n request: CreateBillingPortalRequest = {},\n ): Promise<CreateBillingPortalResponse> {\n return await this.requestJson<CreateBillingPortalResponse>(\n \"POST\",\n \"/v1/billing/portal\",\n request,\n );\n }\n\n /** Current runtime catalog, USD prices, self-service availability and plan balance. */\n async getBillingSubscriptionPlans(\n options: { accountId?: string } = {},\n ): Promise<BillingSubscriptionCatalog> {\n return await this.requestJson(\"GET\", \"/v1/billing/subscription/plans\", undefined, options);\n }\n\n async createSubscriptionCheckout(\n request: CreateSubscriptionCheckoutRequest,\n ): Promise<CreateSubscriptionCheckoutResponse> {\n return await this.requestJson(\"POST\", \"/v1/billing/subscription/checkout\", request);\n }\n\n /** Charge immediately, reset the monthly anchor and replace plan credit after payment. */\n async upgradeBillingSubscription(\n request: ChangeBillingSubscriptionRequest,\n ): Promise<BillingSubscriptionChange> {\n return await this.requestJson(\"POST\", \"/v1/billing/subscription/upgrade\", request);\n }\n\n /** Schedule a lower-priced plan at the end of the already-paid period. */\n async changeBillingSubscription(\n request: ChangeBillingSubscriptionRequest,\n ): Promise<BillingSubscriptionChange> {\n return await this.requestJson(\"POST\", \"/v1/billing/subscription/change\", request);\n }\n\n async cancelBillingSubscription(\n request: CancelBillingSubscriptionRequest,\n ): Promise<BillingSubscriptionChange> {\n return await this.requestJson(\"POST\", \"/v1/billing/subscription/cancel\", request);\n }\n\n async createSubscriptionPortalSession(\n request: CreateBillingPortalRequest = {},\n ): Promise<CreateBillingPortalResponse> {\n return await this.requestJson(\"POST\", \"/v1/billing/subscription/portal\", request);\n }\n\n // --- Embedding transport -----------------------------------------------------\n\n /** The URL of an API path on this client's base (relative when the base is relative). */\n apiUrl(path: string): string {\n if (!path.startsWith(\"/\")) throw new TypeError(\"API path must start with /\");\n return `${this.baseUrl}${path}`;\n }\n\n /**\n * A client of the same class that adds `headers` to every request, keeping\n * this client's base URL, fetch, credentials, and actor attribution. Used to\n * scope a surface (for example an artifact viewer) to one host context.\n */\n withHeaders(headers: Readonly<Record<string, string>>): this {\n const extra = { ...headers };\n const base = this.options.headers;\n const Client = this.constructor as new (options: OpenGeniClientOptions) => this;\n const client = new Client({\n ...this.options,\n headers: () => ({ ...(typeof base === \"function\" ? base() : base), ...extra }),\n });\n if (this.externalActorHeader !== undefined) {\n client.externalActorHeader = this.externalActorHeader;\n }\n client.serviceInitiatorHeader = this.serviceInitiatorHeader;\n client.serviceContextHeader = this.serviceContextHeader;\n return client;\n }\n\n /**\n * Fetch an absolute URL under this client's base URL through its fetch and\n * headers. For transports the SDK builds itself (the editable-artifact live\n * transport), so host authentication stays in one place. A URL outside the\n * base is refused: credentials never leave the configured API.\n */\n async fetchApi(input: string | URL, init: RequestInit = {}): Promise<Response> {\n const origin =\n typeof globalThis.location?.href === \"string\" ? globalThis.location.href : undefined;\n const base = new URL(this.baseUrl.endsWith(\"/\") ? this.baseUrl : `${this.baseUrl}/`, origin);\n const target = new URL(input, base);\n if (target.origin !== base.origin || !`${target.pathname}/`.startsWith(base.pathname)) {\n throw new TypeError(\"fetchApi only reaches this client's API base URL\");\n }\n const headers = new Headers(init.headers);\n for (const [name, value] of Object.entries(this.headers())) {\n if (!headers.has(name)) headers.set(name, value);\n }\n return (await this.fetchImpl(target.href, { ...init, headers })) as Response;\n }\n\n // --- Internals -------------------------------------------------------------\n\n private headers(correlationId?: string): Record<string, string> {\n const extra =\n typeof this.options.headers === \"function\" ? this.options.headers() : this.options.headers;\n const headers: Record<string, string> = {\n ...(this.options.apiKey ? { Authorization: `Bearer ${this.options.apiKey}` } : {}),\n ...extra,\n [OPENGENI_API_CONTRACT_HEADER]: OPENGENI_API_CONTRACT_REVISION,\n ...(correlationId ? { [OPENGENI_CORRELATION_HEADER]: correlationId } : {}),\n };\n const headerNames = Object.keys(headers).map((key) => key.toLowerCase());\n const hasUser =\n this.externalActorHeader !== undefined || headerNames.includes(\"x-opengeni-external-actor\");\n const hasService =\n this.serviceInitiatorHeader !== undefined ||\n headerNames.includes(\"x-opengeni-service-initiator\") ||\n headerNames.includes(\"x-opengeni-service-context\");\n if (hasUser && hasService)\n throw new Error(\"asUser and asService attribution headers are mutually exclusive\");\n if (this.externalActorHeader) {\n for (const key of Object.keys(headers)) {\n if (key.toLowerCase() === \"x-opengeni-external-actor\") delete headers[key];\n }\n headers[\"x-opengeni-external-actor\"] = this.externalActorHeader;\n }\n if (this.serviceInitiatorHeader !== undefined) {\n for (const key of Object.keys(headers)) {\n const name = key.toLowerCase();\n if (name === \"x-opengeni-service-initiator\" || name === \"x-opengeni-service-context\")\n delete headers[key];\n }\n headers[\"x-opengeni-service-initiator\"] = this.serviceInitiatorHeader;\n if (this.serviceContextHeader !== undefined)\n headers[\"x-opengeni-service-context\"] = this.serviceContextHeader;\n }\n return headers;\n }\n\n private url(path: string, query: Record<string, string> = {}): string {\n const params = new URLSearchParams(query).toString();\n return `${this.baseUrl}${path}${params ? `?${params}` : \"\"}`;\n }\n\n // --- Codex (ChatGPT) subscription (workspace-scoped) --------------------------------------------\n\n /** Connection state + the codex models the workspace may select (empty until connected). */\n async codexStatus(workspaceId: string): Promise<CodexConnectionStatus> {\n return await this.requestJson<CodexConnectionStatus>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/codex/status`,\n );\n }\n\n /** Begin device-code login: show `userCode` at `verificationUri`, then poll with `state`. */\n async codexConnectStart(workspaceId: string): Promise<CodexConnectStart> {\n // A JSON body even though the route reads none: signed-in browsers are\n // admitted to subscription mutations only as same-origin JSON requests.\n return await this.requestJson<CodexConnectStart>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/connect/start`,\n {},\n );\n }\n\n /** Poll device-code authorization with the `state` from {@link codexConnectStart}. */\n async codexConnectPoll(workspaceId: string, state: string): Promise<CodexConnectPoll> {\n return await this.requestJson<CodexConnectPoll>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/connect/poll`,\n { state },\n );\n }\n\n /** Remaining usage / limits for the connected (ACTIVE) subscription. Back-compat. */\n async codexUsage(workspaceId: string): Promise<CodexUsage> {\n return await this.requestJson<CodexUsage>(\"GET\", `/v1/workspaces/${workspaceId}/codex/usage`);\n }\n\n /** Live per-account usage read (refreshes THIS account's bearer; writes the cache). */\n async codexAccountUsage(workspaceId: string, accountId: string): Promise<CodexUsage> {\n return await this.requestJson<CodexUsage>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}/usage`,\n );\n }\n\n /** Inspect an organization account even when it is paused or assigned nowhere. */\n async organizationCodexAccountUsage(\n organizationId: string,\n accountId: string,\n ): Promise<CodexUsage> {\n return await this.requestJson<CodexUsage>(\n \"GET\",\n `/v1/organizations/${organizationId}/codex/accounts/${encodeURIComponent(accountId)}/usage`,\n );\n }\n\n /** Batched live refresh across every connected account, keyed by credential id. */\n async refreshCodexUsage(workspaceId: string): Promise<{ usage: CodexUsageMap }> {\n return await this.requestJson<{ usage: CodexUsageMap }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/usage/refresh`,\n );\n }\n\n /** Live independently-settled quota + reset-credit overview for every account. */\n async codexOverview(workspaceId: string): Promise<CodexOverviewResponse> {\n return await this.requestJson<CodexOverviewResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/codex/overview`,\n );\n }\n\n /** Disconnect ALL accounts (legacy workspace-wide). Prefer `disconnectCodexAccount`. */\n async codexDisconnect(workspaceId: string): Promise<{ disconnected: boolean }> {\n return await this.requestJson<{ disconnected: boolean }>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/codex`,\n );\n }\n\n /** List every connected Codex account + the workspace active pointer + settings. */\n async listCodexAccounts(workspaceId: string): Promise<CodexAccountsResponse> {\n return await this.requestJson<CodexAccountsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/codex/accounts`,\n );\n }\n\n /**\n * Session-authorized Codex choices plus the current accepted account.\n * @deprecated Use getSessionModelAccount for provider-neutral choices.\n */\n async listSessionCodexAccounts(\n workspaceId: string,\n sessionId: string,\n ): Promise<SessionCodexAccountsResponse> {\n return await this.requestJson<SessionCodexAccountsResponse>(\n \"GET\",\n `${sessionPath(workspaceId, sessionId)}/codex-accounts`,\n );\n }\n\n /** Switch the workspace ACTIVE Codex account (the one unpinned sessions use). */\n async activateCodexAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ activated: boolean; accountId: string }> {\n return await this.requestJson<{ activated: boolean; accountId: string }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}/activate`,\n );\n }\n\n /** Designate one owner-connected subscription for Apps only. */\n async designateCodexAppsAccount(\n workspaceId: string,\n accountId: string,\n expectedVersion: number,\n ): Promise<CodexAppsUpdate> {\n return await this.requestJson<CodexAppsUpdate>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/apps`,\n { accountId, expectedVersion },\n );\n }\n\n /** Clear the Apps credential without changing any inference selection. */\n async clearCodexAppsAccount(\n workspaceId: string,\n expectedVersion: number,\n ): Promise<CodexAppsUpdate> {\n return await this.requestJson<CodexAppsUpdate>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/codex/apps`,\n { expectedVersion },\n );\n }\n\n /** Enable or disable Codex auto-rotation. Returns the effective settings. */\n async setCodexRotationSettings(\n workspaceId: string,\n patch: {\n rotationEnabled?: boolean;\n /** @deprecated Rotation now has one effective sharded strategy. */\n rotationStrategy?: CodexRotationSettings[\"rotationStrategy\"];\n },\n ): Promise<CodexRotationSettings> {\n return await this.requestJson<CodexRotationSettings>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/codex/settings`,\n patch,\n );\n }\n\n /** Toggle only NEW automatic allocations under independent allocator OCC. */\n async setCodexAccountAllocator(\n workspaceId: string,\n accountId: string,\n input: { enabled: boolean; expectedVersion: number },\n ): Promise<CodexAllocatorUpdate> {\n return await this.requestJson<CodexAllocatorUpdate>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}/allocator`,\n input,\n );\n }\n\n /** Disconnect ONE Codex account by id (re-picks active when the removed one was active). */\n async disconnectCodexAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ disconnected: boolean; newActiveId: string | null }> {\n return await this.requestJson<{\n disconnected: boolean;\n newActiveId: string | null;\n }>(\"DELETE\", `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}`);\n }\n\n /** Rename a Codex account (label only in P1). */\n async renameCodexAccount(\n workspaceId: string,\n accountId: string,\n label: string | null,\n ): Promise<CodexAccount> {\n return await this.requestJson<CodexAccount>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}`,\n { label },\n );\n }\n\n /**\n * Pin/unpin a Codex account without changing another provider's binding.\n * @deprecated Use setSessionModelAccount with provider: \"codex\" and\n * connectionId: null for Automatic, or the selected account id.\n */\n async pinSessionCodexAccount(\n workspaceId: string,\n sessionId: string,\n target: string,\n ): Promise<{ pinned: string; appliedTo?: \"waiting_turn\" | \"next_turn\" }> {\n return await this.requestJson<{\n pinned: string;\n appliedTo?: \"waiting_turn\" | \"next_turn\";\n }>(\"POST\", `${sessionPath(workspaceId, sessionId)}/codex-account`, { target });\n }\n\n // --- SuperGrok/xAI connected subscriptions ------------------------------------------------------\n\n /** Organization subscription management requires an administrator browser session. */\n async getModelConnectionAccess(target: {\n scope: \"organizations\" | \"workspaces\";\n scopeId: string;\n kind:\n | \"codex\"\n | \"supergrok\"\n | \"vercel_gateway\"\n | \"openrouter\"\n | \"anthropic\"\n | \"claude_subscription\";\n connectionId: string;\n }): Promise<ModelConnectionAccessResponse>;\n async getModelConnectionAccess(target: {\n scope: \"organizations\" | \"workspaces\";\n scopeId: string;\n kind: ModelConnectionAccessKind;\n connectionId: string;\n }): Promise<ModelConnectionAccessResponse>;\n async getModelConnectionAccess(target: {\n scope: \"organizations\" | \"workspaces\";\n scopeId: string;\n kind: ModelConnectionAccessKind;\n connectionId: string;\n }): Promise<ModelConnectionAccessResponse> {\n return await this.requestJson(\n \"GET\",\n `/v1/${target.scope}/${encodeURIComponent(target.scopeId)}/model-connections/${target.kind}/${encodeURIComponent(target.connectionId)}/access`,\n );\n }\n\n async updateModelConnectionAccess(\n target: {\n scope: \"organizations\" | \"workspaces\";\n scopeId: string;\n kind:\n | \"codex\"\n | \"supergrok\"\n | \"vercel_gateway\"\n | \"openrouter\"\n | \"anthropic\"\n | \"claude_subscription\";\n connectionId: string;\n },\n policy: ModelConnectionAccessPolicy,\n ): Promise<ModelConnectionAccessPolicy>;\n async updateModelConnectionAccess(\n target: {\n scope: \"organizations\" | \"workspaces\";\n scopeId: string;\n kind: ModelConnectionAccessKind;\n connectionId: string;\n },\n policy: ModelConnectionAccessPolicy,\n ): Promise<ModelConnectionAccessPolicy>;\n async updateModelConnectionAccess(\n target: {\n scope: \"organizations\" | \"workspaces\";\n scopeId: string;\n kind: ModelConnectionAccessKind;\n connectionId: string;\n },\n policy: ModelConnectionAccessPolicy,\n ): Promise<ModelConnectionAccessPolicy> {\n return await this.requestJson(\n \"PUT\",\n `/v1/${target.scope}/${encodeURIComponent(target.scopeId)}/model-connections/${target.kind}/${encodeURIComponent(target.connectionId)}/access`,\n policy,\n );\n }\n\n async listOrganizationSuperGrokAccounts(\n organizationId: string,\n ): Promise<SuperGrokAccountsResponse> {\n return await this.requestJson(\"GET\", `/v1/organizations/${organizationId}/supergrok/accounts`);\n }\n async organizationSupergrokConnectStart(organizationId: string): Promise<SuperGrokConnectStart> {\n return await this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/supergrok/connect/start`,\n {},\n );\n }\n async organizationSupergrokConnectPoll(\n organizationId: string,\n state: string,\n ): Promise<SuperGrokConnectPoll> {\n return await this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/supergrok/connect/poll`,\n { state },\n );\n }\n async activateOrganizationSuperGrokAccount(\n organizationId: string,\n accountId: string,\n ): Promise<{ updated: boolean }> {\n return await this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/supergrok/accounts/${accountId}/activate`,\n {},\n );\n }\n async setOrganizationSuperGrokRotationSettings(\n organizationId: string,\n patch: { rotationEnabled: boolean },\n ): Promise<SuperGrokRotationSettings> {\n return await this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/supergrok/settings`,\n patch,\n );\n }\n async setOrganizationSuperGrokAccountAllocator(\n organizationId: string,\n accountId: string,\n input: { enabled: boolean; expectedVersion: number },\n ): Promise<{ updated: boolean }> {\n return await this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/supergrok/accounts/${accountId}/allocator`,\n input,\n );\n }\n async renameOrganizationSuperGrokAccount(\n organizationId: string,\n accountId: string,\n label: string | null,\n ): Promise<{ updated: boolean }> {\n return await this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/supergrok/accounts/${accountId}`,\n { label },\n );\n }\n async disconnectOrganizationSuperGrokAccount(\n organizationId: string,\n accountId: string,\n ): Promise<{ disconnected: boolean }> {\n return await this.requestJson(\n \"DELETE\",\n `/v1/organizations/${organizationId}/supergrok/accounts/${accountId}`,\n {},\n );\n }\n\n async supergrokStatus(workspaceId: string): Promise<SuperGrokConnectionStatus> {\n return await this.requestJson<SuperGrokConnectionStatus>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/supergrok/status`,\n );\n }\n\n async supergrokConnectStart(\n workspaceId: string,\n scope: Exclude<SuperGrokAccountScope, \"organization\"> = \"workspace\",\n ): Promise<SuperGrokConnectStart> {\n return await this.requestJson<SuperGrokConnectStart>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/supergrok/connect/start`,\n { scope },\n );\n }\n\n async supergrokConnectPoll(workspaceId: string, state: string): Promise<SuperGrokConnectPoll> {\n return await this.requestJson<SuperGrokConnectPoll>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/supergrok/connect/poll`,\n { state },\n );\n }\n\n async listSuperGrokAccounts(workspaceId: string): Promise<SuperGrokAccountsResponse> {\n return await this.requestJson<SuperGrokAccountsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/supergrok/accounts`,\n );\n }\n\n async activateSuperGrokAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ activated: boolean; accountId: string }> {\n return await this.requestJson<{ activated: boolean; accountId: string }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/supergrok/accounts/${accountId}/activate`,\n {},\n );\n }\n\n async setSuperGrokRotationSettings(\n workspaceId: string,\n patch: { rotationEnabled: boolean },\n ): Promise<SuperGrokRotationSettings> {\n return await this.requestJson<SuperGrokRotationSettings>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/supergrok/settings`,\n patch,\n );\n }\n\n async setSuperGrokAccountAllocator(\n workspaceId: string,\n accountId: string,\n input: { enabled: boolean; expectedVersion: number },\n ): Promise<SuperGrokAllocatorUpdate> {\n return await this.requestJson<SuperGrokAllocatorUpdate>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/supergrok/accounts/${accountId}/allocator`,\n input,\n );\n }\n\n async renameSuperGrokAccount(\n workspaceId: string,\n accountId: string,\n label: string | null,\n ): Promise<SuperGrokAccount> {\n return await this.requestJson<SuperGrokAccount>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/supergrok/accounts/${accountId}`,\n { label },\n );\n }\n\n async disconnectSuperGrokAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ disconnected: boolean; newActiveId: string | null }> {\n return await this.requestJson<{\n disconnected: boolean;\n newActiveId: string | null;\n }>(\"DELETE\", `/v1/workspaces/${workspaceId}/supergrok/accounts/${accountId}`, {});\n }\n\n /** Contract-checked JSON transport shared by opt-in typed SDK clients. */\n private async requestSessionCommand<T>(\n method: string,\n path: string,\n body?: unknown,\n options: OpenGeniRequestOptions = {},\n ): Promise<T> {\n return await this.requestJson<T>(\n method,\n path,\n body,\n {},\n {\n signal: options.signal,\n timeoutMs: options.timeoutMs ?? this.sessionCommandTimeoutMs,\n },\n );\n }\n\n /** Contract-checked JSON transport shared by opt-in typed SDK clients. */\n async requestJson<T>(\n method: string,\n path: string,\n body?: unknown,\n query: Record<string, string> = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<T> {\n const correlationId = crypto.randomUUID();\n const abort = requestAbortSignal(options);\n try {\n if (abort.signal?.aborted) {\n throw abort.signal.reason ?? new DOMException(\"Request aborted\", \"AbortError\");\n }\n const headers = this.headers(correlationId);\n let response: FetchResponse;\n try {\n response = await awaitWithAbort(\n this.fetchImpl(this.url(path, query), {\n method,\n headers: {\n ...headers,\n Accept: \"application/json\",\n ...(body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n ...(abort.signal ? { signal: abort.signal } : {}),\n }),\n abort.signal,\n );\n } catch (error) {\n if (options.signal?.aborted) throw error;\n if (isMutationMethod(method)) {\n throw mutationTransportError(correlationId);\n }\n throw error;\n }\n assertApiContractResponse(response, this.apiContractStrict);\n try {\n if (!response.ok) {\n throw await awaitWithAbort(\n apiErrorFromResponse(response, { method, correlationId }),\n abort.signal,\n );\n }\n if (options.responseType === \"void\") {\n await awaitWithAbort(\n cancelResponseBody(response, \"discarding void API response\"),\n abort.signal,\n );\n return undefined as T;\n }\n await awaitWithAbort(assertJsonResponse(response, { method, correlationId }), abort.signal);\n const value = await awaitWithAbort(response.json(), abort.signal);\n recordObservedSessionSequence(value, response.headers.get(SESSION_SEQUENCE_HEADER));\n return value as T;\n } catch (error) {\n if (options.signal?.aborted) throw error;\n if (error instanceof OpenGeniApiError) throw error;\n if (isMutationMethod(method)) {\n throw mutationTransportError(correlationId);\n }\n throw error;\n }\n } finally {\n abort.dispose();\n }\n }\n\n /** Authenticated, contract-checked response for bounded streaming downloads. */\n protected async requestResponse(\n method: string,\n path: string,\n query: Record<string, string> = {},\n options: OpenGeniRequestOptions & { accept?: string } = {},\n ): Promise<FetchResponse> {\n const correlationId = crypto.randomUUID();\n const headers = this.headers(correlationId);\n let response: FetchResponse;\n try {\n response = await this.fetchImpl(this.url(path, query), {\n method,\n headers: {\n ...headers,\n Accept: options.accept ?? \"application/octet-stream\",\n },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n } catch (error) {\n if (isMutationMethod(method)) throw mutationTransportError(correlationId);\n throw error;\n }\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, { method, correlationId });\n }\n return response;\n }\n\n /** Contract-checked transport shared by opt-in typed SDK clients for 204 responses. */\n async requestVoid(method: string, path: string, body?: unknown): Promise<void> {\n const correlationId = crypto.randomUUID();\n const headers = this.headers(correlationId);\n let response: FetchResponse;\n try {\n response = await this.fetchImpl(this.url(path), {\n method,\n headers: {\n ...headers,\n Accept: \"application/json\",\n ...(body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n });\n } catch (error) {\n if (isMutationMethod(method)) {\n throw mutationTransportError(correlationId);\n }\n throw error;\n }\n assertApiContractResponse(response, this.apiContractStrict);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, { method, correlationId });\n }\n }\n}\n\nfunction assertApiContractResponse(response: FetchResponse, strict: boolean): void {\n if (!strict) return;\n const actual = response.headers.get(OPENGENI_API_CONTRACT_HEADER);\n if (actual && actual !== OPENGENI_API_CONTRACT_REVISION) {\n throw new OpenGeniApiContractMismatchError(OPENGENI_API_CONTRACT_REVISION, actual);\n }\n}\n\nfunction isTranscribeAudioResponse(value: unknown): value is TranscribeAudioResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n return (\n typeof record.text === \"string\" &&\n Array.isArray(record.languages) &&\n record.languages.every((language) => typeof language === \"string\")\n );\n}\n\nfunction isUploadTranscriptionRecordingChunkResponse(\n value: unknown,\n): value is UploadTranscriptionRecordingChunkResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n if (\n !isTranscriptionRecordingResponse({\n recording: record.recording,\n segments: [],\n })\n ) {\n return false;\n }\n if (!record.chunk || typeof record.chunk !== \"object\" || Array.isArray(record.chunk)) {\n return false;\n }\n const chunk = record.chunk as Record<string, unknown>;\n return (\n typeof chunk.chunkNumber === \"number\" &&\n typeof chunk.byteLength === \"number\" &&\n typeof chunk.sha256 === \"string\" &&\n typeof chunk.startMilliseconds === \"number\" &&\n typeof chunk.durationMilliseconds === \"number\" &&\n typeof chunk.deduplicated === \"boolean\"\n );\n}\n\nfunction isTranscriptionRecordingResponse(value: unknown): value is TranscriptionRecordingResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const response = value as Record<string, unknown>;\n if (\n !response.recording ||\n typeof response.recording !== \"object\" ||\n Array.isArray(response.recording)\n ) {\n return false;\n }\n const recording = response.recording as Record<string, unknown>;\n return (\n typeof recording.id === \"string\" &&\n typeof recording.workspaceId === \"string\" &&\n typeof recording.mimeType === \"string\" &&\n typeof recording.state === \"string\" &&\n typeof recording.nextChunkNumber === \"number\" &&\n typeof recording.chunkCount === \"number\" &&\n typeof recording.totalBytes === \"number\" &&\n typeof recording.totalDurationMilliseconds === \"number\" &&\n typeof recording.segmentCount === \"number\" &&\n typeof recording.completedSegmentCount === \"number\" &&\n (recording.transcriptText === null || typeof recording.transcriptText === \"string\") &&\n Array.isArray(recording.languages) &&\n (recording.errorCode === null || typeof recording.errorCode === \"string\") &&\n typeof recording.retryable === \"boolean\" &&\n typeof recording.objectsCleaned === \"boolean\" &&\n typeof recording.createdAt === \"string\" &&\n typeof recording.updatedAt === \"string\" &&\n typeof recording.expiresAt === \"string\" &&\n (response.retryAfterMilliseconds === undefined ||\n (typeof response.retryAfterMilliseconds === \"number\" &&\n Number.isInteger(response.retryAfterMilliseconds) &&\n response.retryAfterMilliseconds > 0 &&\n response.retryAfterMilliseconds <= 60_000)) &&\n Array.isArray(response.segments)\n );\n}\n\nfunction transcriptionRecordingResponse(value: unknown): TranscriptionRecordingResponse {\n if (isTranscriptionRecordingResponse(value)) return value;\n throw new OpenGeniApiError(502, \"Invalid transcription recording response.\", {\n code: \"invalid_response\",\n });\n}\n\nfunction isTranscriptionRecordingListResponse(\n value: unknown,\n): value is TranscriptionRecordingListResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const recordings = (value as Record<string, unknown>).recordings;\n return (\n Array.isArray(recordings) &&\n recordings.length <= 50 &&\n recordings.every((recording) => isTranscriptionRecordingResponse({ recording, segments: [] }))\n );\n}\n\nfunction filenameForAudioMimeType(mimeType: string): string {\n const bare = mimeType.trim().toLowerCase().split(\";\")[0] ?? \"audio/webm\";\n switch (bare) {\n case \"audio/mp4\":\n case \"audio/m4a\":\n return \"audio.mp4\";\n case \"audio/ogg\":\n return \"audio.ogg\";\n case \"audio/mpeg\":\n case \"audio/mp3\":\n return \"audio.mp3\";\n case \"audio/wav\":\n case \"audio/x-wav\":\n return \"audio.wav\";\n case \"audio/webm\":\n default:\n return \"audio.webm\";\n }\n}\n\nconst API_ERROR_MAX_BYTES = 16 * 1024;\n\nfunction requestAbortSignal(options: OpenGeniRequestOptions): {\n signal: AbortSignal | undefined;\n dispose: () => void;\n} {\n const timeoutMs = options.timeoutMs ?? 0;\n if (timeoutMs <= 0) {\n return { signal: options.signal, dispose: () => undefined };\n }\n const controller = new AbortController();\n const onCallerAbort = () => controller.abort(options.signal?.reason);\n if (options.signal?.aborted) {\n onCallerAbort();\n } else {\n options.signal?.addEventListener(\"abort\", onCallerAbort, { once: true });\n }\n const timer = setTimeout(\n () => controller.abort(new DOMException(\"Request timed out\", \"TimeoutError\")),\n timeoutMs,\n );\n return {\n signal: controller.signal,\n dispose: () => {\n clearTimeout(timer);\n options.signal?.removeEventListener(\"abort\", onCallerAbort);\n },\n };\n}\n\nasync function awaitWithAbort<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T> {\n if (!signal) return await promise;\n if (signal.aborted) {\n throw signal.reason ?? new DOMException(\"Request aborted\", \"AbortError\");\n }\n return await new Promise<T>((resolve, reject) => {\n const onAbort = () => {\n cleanup();\n reject(signal.reason ?? new DOMException(\"Request aborted\", \"AbortError\"));\n };\n const cleanup = () => signal.removeEventListener(\"abort\", onAbort);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n promise.then(\n (value) => {\n cleanup();\n resolve(value);\n },\n (cause) => {\n cleanup();\n reject(cause);\n },\n );\n });\n}\n\n/**\n * Servers without usage limits strip the unknown create field. A requested\n * limit that is not echoed back would silently run unlimited, so fail loudly.\n */\nfunction assertSessionUsageLimitEcho(\n requested: number | null | undefined,\n created: CreateSessionResponse,\n): void {\n if (requested === undefined || requested === null) return;\n if (created.usageLimit?.limitMicros === requested) return;\n throw new OpenGeniSessionUsageLimitUnsupportedError(\n `The session ${created.id} was created, but the server did not confirm its usage limit; it may not support usage limits. Set the limit with setSessionUsageLimit before sending work, or treat the task as unlimited.`,\n { sessionId: created.id },\n );\n}\n\ntype ApiErrorRequestContext = {\n method: string;\n correlationId?: string | undefined;\n};\n\nasync function apiErrorFromResponse(\n response: FetchResponse,\n context: ApiErrorRequestContext,\n): Promise<OpenGeniApiError> {\n const body = await readBoundedJsonErrorBody(response);\n const ErrorType = allowanceExhaustedFields(body)\n ? OpenGeniAllowanceExhaustedError\n : sessionUsageLimitReachedFields(body)\n ? OpenGeniSessionUsageLimitReachedError\n : OpenGeniApiError;\n const error = new ErrorType(response.status, body, {\n correlationId: response.headers.get(OPENGENI_CORRELATION_HEADER) ?? context.correlationId,\n mutation: isMutationMethod(context.method),\n });\n return error.status >= 400 &&\n error.status < 500 &&\n (error.code === \"SESSION_TENANCY_NOT_ACTIVATED\" || error.code === \"OPENGENI_SETUP_REQUIRED\")\n ? new OpenGeniSetupError(error)\n : error;\n}\n\nasync function assertJsonResponse(\n response: FetchResponse,\n context: ApiErrorRequestContext,\n): Promise<void> {\n if (isJsonContentType(response.headers.get(\"content-type\"))) return;\n await cancelResponseBody(response, \"unexpected non-JSON API response\");\n throw new OpenGeniApiError(502, \"\", {\n code: \"upstream_unavailable\",\n retryable: true,\n correlationId: response.headers.get(OPENGENI_CORRELATION_HEADER) ?? context.correlationId,\n outcomeUnknown: isMutationMethod(context.method),\n displayMessage: \"The workspace is temporarily unavailable — retry.\",\n });\n}\n\nasync function readBoundedJsonErrorBody(response: FetchResponse): Promise<string> {\n if (!isJsonContentType(response.headers.get(\"content-type\"))) {\n await cancelResponseBody(response, \"discarding API error body\");\n return \"\";\n }\n if (Number(response.headers.get(\"content-length\")) > API_ERROR_MAX_BYTES) {\n await cancelResponseBody(response, \"discarding API error body\");\n return \"\";\n }\n try {\n return new TextDecoder().decode(\n await readBoundedResponseBytes(response, API_ERROR_MAX_BYTES, null),\n );\n } catch {\n return \"\";\n }\n}\n\nfunction isJsonContentType(value: string | null): boolean {\n return /^(application\\/json|[^;]+\\+json)\\s*(;|$)/i.test(value ?? \"\");\n}\n\nfunction isMutationMethod(method: string): boolean {\n return method !== \"GET\" && method !== \"HEAD\" && method !== \"OPTIONS\";\n}\n\nfunction mutationTransportError(correlationId: string): OpenGeniApiError {\n return new OpenGeniApiError(0, \"\", {\n code: \"network_error\",\n retryable: true,\n correlationId,\n outcomeUnknown: true,\n mutation: true,\n displayMessage: \"The request could not be confirmed — reconcile before retrying.\",\n });\n}\n\nfunction assertBrowserFileUploadSecureContext(): void {\n const secureContext =\n typeof window !== \"undefined\"\n ? window.isSecureContext\n : typeof globalThis.isSecureContext === \"boolean\"\n ? globalThis.isSecureContext\n : undefined;\n // The framework-agnostic SDK also runs in Node, Bun, Deno, and edge\n // runtimes. Preserve their existing upload behavior; this typed HTTPS error\n // is only meaningful where the browser exposes a secure-context state.\n if (secureContext === undefined) return;\n if (!secureContext) {\n throw new OpenGeniSecureContextRequiredError(\"insecure_context\");\n }\n if (\n typeof globalThis.crypto === \"undefined\" ||\n typeof globalThis.crypto.subtle?.digest !== \"function\"\n ) {\n throw new OpenGeniSecureContextRequiredError(\"web_crypto_unavailable\");\n }\n}\n\nasync function sha256ForUpload(body: Blob | ArrayBuffer | string): Promise<string> {\n const bytes =\n typeof body === \"string\"\n ? new TextEncoder().encode(body)\n : body instanceof Blob\n ? new Uint8Array(await body.arrayBuffer())\n : new Uint8Array(body);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", bytes);\n return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nasync function sha256Hex(bytes: Uint8Array): Promise<string> {\n const owned = Uint8Array.from(bytes);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", owned.buffer);\n return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\ntype ComputerFrameEvidenceMismatchReason =\n | \"frame_session_mismatch\"\n | \"frame_target_mismatch\"\n | \"frame_media_mismatch\"\n | \"frame_digest_mismatch\";\n\nfunction computerFrameEvidenceMismatchReason(\n metadata: ReturnType<typeof decodeComputerFrameMetadataHeader>,\n expected: {\n computerSessionId: string;\n targetId: string;\n mediaType: \"image/jpeg\" | \"image/png\";\n sha256: string;\n },\n): ComputerFrameEvidenceMismatchReason | null {\n if (metadata.computerSessionId !== expected.computerSessionId) {\n return \"frame_session_mismatch\";\n }\n if (metadata.targetId !== expected.targetId) return \"frame_target_mismatch\";\n if (metadata.mediaType !== expected.mediaType) return \"frame_media_mismatch\";\n if (metadata.sha256 !== expected.sha256) return \"frame_digest_mismatch\";\n return null;\n}\n\nasync function cancelResponseBody(response: FetchResponse, reason: string): Promise<void> {\n await response.body?.cancel(reason).catch(() => undefined);\n}\n\nfunction assertRetainedWorkspaceArtifactReceipt(\n workspaceId: string,\n artifact: RetainedArtifactReference,\n): void {\n if (\n !parseRetainedGeneratedImageReference(artifact, workspaceId) &&\n !parseRetainedWorkspaceFileReference(artifact, workspaceId)\n ) {\n throw new OpenGeniApiError(502, \"retained workspace artifact receipt is invalid\");\n }\n}\n\nfunction assertSafeArtifactDownloadUrl(value: FileDownloadUrlResponse): void {\n if (\n !value ||\n typeof value.url !== \"string\" ||\n typeof value.expiresAt !== \"string\" ||\n !Number.isFinite(Date.parse(value.expiresAt))\n ) {\n throw new OpenGeniApiError(502, \"retained artifact download URL is invalid\");\n }\n let parsed: URL;\n try {\n parsed = new URL(value.url);\n } catch {\n throw new OpenGeniApiError(502, \"retained artifact download URL is invalid\");\n }\n if (![\"http:\", \"https:\"].includes(parsed.protocol) || parsed.username || parsed.password) {\n throw new OpenGeniApiError(502, \"retained artifact download URL is unsafe\");\n }\n}\n\nfunction assertSafeVideoArtifactPlaybackSource(\n value: VideoArtifactPlaybackSource,\n expectedArtifactId: string,\n): void {\n if (\n !value ||\n value.schemaVersion !== 1 ||\n value.artifactId !== expectedArtifactId ||\n value.contentType !== \"video/mp4\" ||\n value.acceptRanges !== \"bytes\" ||\n !Number.isSafeInteger(value.sizeBytes) ||\n value.sizeBytes <= 0 ||\n value.sizeBytes > GENERATED_VIDEO_MAX_BYTES ||\n !/^[0-9a-f]{64}$/.test(value.sha256)\n ) {\n throw new OpenGeniApiError(502, \"generated-video playback source is invalid\");\n }\n assertSafeArtifactDownloadUrl({ url: value.url, expiresAt: value.expiresAt });\n}\n\nfunction parseBoundedContentLength(value: string | null): number | null {\n if (value === null) return null;\n if (!/^\\d+$/.test(value)) {\n throw new OpenGeniApiError(502, \"invalid retained artifact content-length\");\n }\n const length = Number(value);\n if (!Number.isSafeInteger(length) || length > RETAINED_OUTPUT_MAX_PAGE_BYTES) {\n throw new OpenGeniApiError(502, \"retained artifact response exceeds the SDK byte limit\");\n }\n return length;\n}\n\nasync function readBoundedResponseBytes(\n response: FetchResponse,\n maxBytes: number,\n expectedBytes: number | null,\n): Promise<Uint8Array> {\n if (!response.body) {\n if (expectedBytes !== null && expectedBytes !== 0) {\n throw new OpenGeniApiError(502, \"retained artifact response length mismatch\");\n }\n return new Uint8Array();\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let totalBytes = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n totalBytes += value.byteLength;\n if (totalBytes > maxBytes) {\n await reader\n .cancel(\"retained artifact response exceeded the SDK byte limit\")\n .catch(() => undefined);\n throw new OpenGeniApiError(502, \"retained artifact response exceeds the SDK byte limit\");\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n if (expectedBytes !== null && totalBytes !== expectedBytes) {\n throw new OpenGeniApiError(502, \"retained artifact response length mismatch\");\n }\n const bytes = new Uint8Array(totalBytes);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nfunction siteDataPath(workspaceId: string, siteId: string): string {\n return `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(siteId)}`;\n}\n\nfunction sitePublicationPath(workspaceId: string, siteId: string): string {\n return `${siteDataPath(workspaceId, siteId)}/publication`;\n}\n"],"mappings":"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","names":["sleep","sleep","isRecord","queued"]}
|