@opengeni/contracts 0.44.1 → 1.0.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/dist/agent-authored-durable-text.d.ts +70 -0
- package/dist/agent-config.d.ts +869 -0
- package/dist/agent-instruction-changes.d.ts +110 -0
- package/dist/agent-learning.d.ts +243 -0
- package/dist/agent-topology.d.ts +292 -0
- package/dist/allowance-refusal.d.ts +9 -0
- package/dist/allowance-refusal.js +50 -0
- package/dist/allowance-refusal.js.map +1 -0
- package/dist/analytics-consent-report.d.ts +19 -0
- package/dist/analytics-consent-report.js +10 -0
- package/dist/analytics-consent-report.js.map +1 -0
- package/dist/api-key-presets.d.ts +19 -0
- package/dist/artifact-catalog.d.ts +161 -0
- package/dist/artifacts.d.ts +135 -11
- package/dist/atlassian-native-retirement.d.ts +16 -0
- package/dist/atlassian-native-retirement.js +30 -0
- package/dist/atlassian-native-retirement.js.map +1 -0
- package/dist/atlassian.d.ts +2 -0
- package/dist/atlassian.js +27 -11
- package/dist/browser-storage.d.ts +5 -0
- package/dist/browser-storage.js +9 -0
- package/dist/browser-storage.js.map +1 -0
- package/dist/bundled-skills.d.ts +40 -0
- package/dist/canonical-human-identities.d.ts +157 -0
- package/dist/canonical-human-identities.js +23 -0
- package/dist/canonical-human-identities.js.map +1 -0
- package/dist/chunk-2ACYHZFB.js +292 -0
- package/dist/chunk-2ACYHZFB.js.map +1 -0
- package/dist/chunk-2VORLN2R.js +353 -0
- package/dist/chunk-2VORLN2R.js.map +1 -0
- package/dist/{chunk-Y3MLSLB4.js → chunk-3SIZGL3O.js} +42 -30
- package/dist/chunk-3SIZGL3O.js.map +1 -0
- package/dist/chunk-46KLD2UH.js +186 -0
- package/dist/chunk-46KLD2UH.js.map +1 -0
- package/dist/chunk-4JGHSSB7.js +11 -0
- package/dist/chunk-4JGHSSB7.js.map +1 -0
- package/dist/{chunk-52SGB2QO.js → chunk-5IXYF6XN.js} +50 -10
- package/dist/chunk-5IXYF6XN.js.map +1 -0
- package/dist/chunk-BCS7WHCK.js +139 -0
- package/dist/chunk-BCS7WHCK.js.map +1 -0
- package/dist/chunk-EK7NDGFR.js +128 -0
- package/dist/chunk-EK7NDGFR.js.map +1 -0
- package/dist/{chunk-5UDNP7AO.js → chunk-FZ6BXQHL.js} +78 -38
- package/dist/chunk-FZ6BXQHL.js.map +1 -0
- package/dist/chunk-GRG7PHWQ.js +25 -0
- package/dist/chunk-GRG7PHWQ.js.map +1 -0
- package/dist/chunk-JUFK3T4Q.js +80 -0
- package/dist/chunk-JUFK3T4Q.js.map +1 -0
- package/dist/chunk-KHHZTBP7.js +11 -0
- package/dist/chunk-KHHZTBP7.js.map +1 -0
- package/dist/chunk-KR2V42UZ.js +187 -0
- package/dist/chunk-KR2V42UZ.js.map +1 -0
- package/dist/chunk-MZLBPKFE.js +168 -0
- package/dist/chunk-MZLBPKFE.js.map +1 -0
- package/dist/{chunk-H5BVCZKF.js → chunk-NRMCVHAU.js} +6 -5
- package/dist/chunk-NRMCVHAU.js.map +1 -0
- package/dist/{chunk-TZ6YEYN4.js → chunk-NVJMJWLL.js} +3 -1
- package/dist/chunk-NVJMJWLL.js.map +1 -0
- package/dist/chunk-O77VSFYZ.js +70 -0
- package/dist/chunk-O77VSFYZ.js.map +1 -0
- package/dist/chunk-PX3VCKAU.js +29 -0
- package/dist/chunk-PX3VCKAU.js.map +1 -0
- package/dist/chunk-QR5D2IQC.js +61 -0
- package/dist/chunk-QR5D2IQC.js.map +1 -0
- package/dist/chunk-RJ76DRPO.js +117 -0
- package/dist/chunk-RJ76DRPO.js.map +1 -0
- package/dist/chunk-RKX3NQYS.js +28 -0
- package/dist/chunk-RKX3NQYS.js.map +1 -0
- package/dist/{chunk-FJBG5E4O.js → chunk-SIOU2K4U.js} +45 -22
- package/dist/chunk-SIOU2K4U.js.map +1 -0
- package/dist/chunk-TSCDAGET.js +75 -0
- package/dist/chunk-TSCDAGET.js.map +1 -0
- package/dist/{chunk-LSB7GRLG.js → chunk-TXTQIYCV.js} +15 -11
- package/dist/chunk-TXTQIYCV.js.map +1 -0
- package/dist/chunk-X7ETVO4P.js +26544 -0
- package/dist/chunk-X7ETVO4P.js.map +1 -0
- package/dist/{chunk-CADSX6UN.js → chunk-Y3KNXVTD.js} +2 -2
- package/dist/chunk-YBW5JSA3.js +251 -0
- package/dist/chunk-YBW5JSA3.js.map +1 -0
- package/dist/chunk-YRXAWWCU.js +45 -0
- package/dist/chunk-YRXAWWCU.js.map +1 -0
- package/dist/claude-provider-account-authority.d.ts +18 -0
- package/dist/claude-subscription-oauth.d.ts +42 -0
- package/dist/claude-subscription-usage.d.ts +159 -0
- package/dist/client-error-report.d.ts +109 -0
- package/dist/client-error-report.js +87 -0
- package/dist/client-error-report.js.map +1 -0
- package/dist/code-search.d.ts +52 -0
- package/dist/code-search.js +40 -0
- package/dist/code-search.js.map +1 -0
- package/dist/codex-provider-account-authority.d.ts +23 -0
- package/dist/codex-provider-account-authority.js +23 -0
- package/dist/codex-provider-account-authority.js.map +1 -0
- package/dist/company-brain-governed-writes.d.ts +475 -0
- package/dist/company-brain.d.ts +336 -0
- package/dist/company-profile.d.ts +566 -0
- package/dist/connect.d.ts +325 -0
- package/dist/connect.js +191 -0
- package/dist/connect.js.map +1 -0
- package/dist/connection-account-label.d.ts +2 -0
- package/dist/connection-account-label.js +35 -0
- package/dist/connection-account-label.js.map +1 -0
- package/dist/connection-authority.d.ts +193 -0
- package/dist/connection-authority.js +50 -0
- package/dist/connection-authority.js.map +1 -0
- package/dist/connector-attachments.d.ts +95 -0
- package/dist/connector-attachments.js +51 -0
- package/dist/connector-attachments.js.map +1 -0
- package/dist/connector-tool-permissions.d.ts +73 -0
- package/dist/direct-model-provider.d.ts +36 -0
- package/dist/editable-artifact-codec-registry.d.ts +16 -7
- package/dist/editable-artifact-codec-registry.js +19 -9
- package/dist/editable-artifact-committed-transaction.d.ts +2 -2
- package/dist/editable-artifact-committed-transaction.js +2 -2
- package/dist/editable-artifact-live.d.ts +11 -12
- package/dist/editable-artifact-live.js +110 -45
- package/dist/editable-artifact-live.js.map +1 -1
- package/dist/editable-artifact-serialized-commit.d.ts +2 -1
- package/dist/editable-artifact-serialized-commit.js +8 -7
- package/dist/editable-artifact-versions.d.ts +20 -5
- package/dist/editable-artifact-versions.js +23 -5
- package/dist/editable-artifacts.d.ts +2 -0
- package/dist/editable-artifacts.js +48 -36
- package/dist/external-identities.d.ts +784 -0
- package/dist/external-identities.js +44 -0
- package/dist/external-identities.js.map +1 -0
- package/dist/feedback.d.ts +51 -0
- package/dist/github-repository-contracts.d.ts +36 -0
- package/dist/github-repository-contracts.js +59 -0
- package/dist/github-repository-contracts.js.map +1 -0
- package/dist/github-repository.d.ts +14 -0
- package/dist/github-repository.js +36 -0
- package/dist/github-repository.js.map +1 -0
- package/dist/google-drive.d.ts +90 -1
- package/dist/google-drive.js +91 -15
- package/dist/google-drive.js.map +1 -1
- package/dist/governed-learning-activation.d.ts +154 -0
- package/dist/governed-learning-evaluator.d.ts +152 -0
- package/dist/host-mcp-bindings.d.ts +326 -0
- package/dist/host-mcp-bindings.js +252 -0
- package/dist/host-mcp-bindings.js.map +1 -0
- package/dist/image-generation.d.ts +1 -0
- package/dist/index.d.ts +27574 -5374
- package/dist/index.js +2531 -177
- package/dist/insights-usage.d.ts +877 -0
- package/dist/insights-usage.js +509 -0
- package/dist/insights-usage.js.map +1 -0
- package/dist/interaction.d.ts +1752 -13
- package/dist/knowledge-entries.d.ts +982 -0
- package/dist/knowledge-preparation.d.ts +237 -0
- package/dist/knowledge.d.ts +740 -0
- package/dist/managed-auth-session-sets.d.ts +241 -0
- package/dist/managed-auth-session-sets.js +191 -0
- package/dist/managed-auth-session-sets.js.map +1 -0
- package/dist/managed-sign-in-methods.d.ts +56 -0
- package/dist/managed-sign-in-methods.js +46 -0
- package/dist/managed-sign-in-methods.js.map +1 -0
- package/dist/mcp-catalog-limits.d.ts +2 -0
- package/dist/mcp-endpoint.d.ts +7 -0
- package/dist/mcp-endpoint.js +9 -0
- package/dist/mcp-endpoint.js.map +1 -0
- package/dist/mcp-oauth.d.ts +71 -0
- package/dist/modal-native-proof-v2.d.ts +587 -0
- package/dist/modal-native-proof-v2.js +37 -0
- package/dist/modal-native-proof-v2.js.map +1 -0
- package/dist/model-availability.d.ts +15 -0
- package/dist/model-connection-access.d.ts +24 -0
- package/dist/model-context-inspector.d.ts +329 -0
- package/dist/model-display.d.ts +38 -0
- package/dist/model-display.js +134 -0
- package/dist/model-display.js.map +1 -0
- package/dist/model-picker-order.d.ts +25 -0
- package/dist/model-picker-order.js +42 -0
- package/dist/model-picker-order.js.map +1 -0
- package/dist/organization-access.d.ts +231 -0
- package/dist/organization-access.js +34 -0
- package/dist/organization-access.js.map +1 -0
- package/dist/organization-integration-policy.d.ts +27 -0
- package/dist/organization-membership-lifecycle.d.ts +1022 -0
- package/dist/organization-model-usage.d.ts +146 -0
- package/dist/organization-model-usage.js +67 -0
- package/dist/organization-model-usage.js.map +1 -0
- package/dist/organization-recovery.d.ts +337 -0
- package/dist/organization-recovery.js +37 -0
- package/dist/organization-recovery.js.map +1 -0
- package/dist/organization-usage.d.ts +138 -0
- package/dist/permissions.d.ts +54 -0
- package/dist/personal-github.d.ts +320 -0
- package/dist/personal-github.js +222 -0
- package/dist/personal-github.js.map +1 -0
- package/dist/plugin-discovery.d.ts +35 -0
- package/dist/plugin-discovery.js +7 -0
- package/dist/plugin-discovery.js.map +1 -0
- package/dist/preference-registry.d.ts +44 -1
- package/dist/product-analytics.d.ts +113 -0
- package/dist/product-lifecycle-facts.d.ts +73 -0
- package/dist/remember.d.ts +350 -0
- package/dist/retained-output.d.ts +8 -0
- package/dist/sandbox-file-artifacts.d.ts +57 -0
- package/dist/sandbox-provider-command.d.ts +113 -0
- package/dist/sandbox-recovery.d.ts +146 -0
- package/dist/sandbox-snapshots.d.ts +39 -0
- package/dist/session-final-reply.d.ts +6 -0
- package/dist/session-final-reply.js +9 -0
- package/dist/session-final-reply.js.map +1 -0
- package/dist/session-goal-reports.d.ts +21 -0
- package/dist/session-history-import.d.ts +947 -0
- package/dist/session-list-entries.d.ts +4 -0
- package/dist/session-list-entries.js +51 -0
- package/dist/session-list-entries.js.map +1 -0
- package/dist/session-mcp-projections.d.ts +215 -0
- package/dist/session-message-search.d.ts +68 -0
- package/dist/session-titles.d.ts +68 -0
- package/dist/session-titles.js +25 -0
- package/dist/session-titles.js.map +1 -0
- package/dist/session-topology-primitives.d.ts +22 -0
- package/dist/signup-attribution.d.ts +39 -0
- package/dist/site-request-headers.test.d.ts +1 -0
- package/dist/site-session-http.d.ts +11 -0
- package/dist/site-session-http.js +11 -0
- package/dist/site-session-http.js.map +1 -0
- package/dist/skill-catalog-context.d.ts +7 -0
- package/dist/skill-files.d.ts +12 -0
- package/dist/skill-metadata.d.ts +9 -0
- package/dist/skill-use.d.ts +61 -0
- package/dist/skills.d.ts +185 -0
- package/dist/slack-bot-scopes.d.ts +46 -21
- package/dist/slack-bot-scopes.js +14 -3
- package/dist/slack-rest-mcp.d.ts +31 -0
- package/dist/slack-rest-mcp.js +19 -0
- package/dist/slack-rest-mcp.js.map +1 -0
- package/dist/slack-task-policy.d.ts +294 -0
- package/dist/spreadsheet-artifact-commands.d.ts +2 -3
- package/dist/spreadsheet-artifact-commands.js +4 -2
- package/dist/spreadsheet-artifact-query.js +3 -2
- package/dist/subscription-account-pools.d.ts +292 -0
- package/dist/task-notes.d.ts +169 -0
- package/dist/tool-catalog.d.ts +286 -0
- package/dist/tool-result-spill.d.ts +16 -0
- package/dist/usage-allowances.d.ts +285 -0
- package/dist/usage-allowances.js +49 -0
- package/dist/usage-allowances.js.map +1 -0
- package/dist/video-generation.d.ts +51 -0
- package/dist/video-generation.js +9 -1
- package/dist/work-claims.d.ts +411 -0
- package/dist/workspace-instruction-policies.d.ts +94 -0
- package/dist/workspace-integration-wire.d.ts +36 -0
- package/dist/workspace-integration-wire.js +23 -0
- package/dist/workspace-integration-wire.js.map +1 -0
- package/dist/workspace-integrations.d.ts +948 -0
- package/dist/workspace-learning-administration.d.ts +289 -0
- package/dist/workspace-learning-policy.d.ts +1 -1
- package/dist/workspace-state.d.ts +85 -416
- package/dist/xai-provider-account-authority.d.ts +26 -0
- package/dist/xai-provider-account-authority.js +9 -0
- package/dist/xai-provider-account-authority.js.map +1 -0
- package/package.json +146 -1
- package/src/agent-authored-durable-text.ts +116 -0
- package/src/agent-config.ts +1527 -0
- package/src/agent-instruction-changes.ts +98 -0
- package/src/agent-learning.ts +161 -0
- package/src/agent-topology.ts +69 -0
- package/src/allowance-refusal.ts +81 -0
- package/src/analytics-consent-report.ts +20 -0
- package/src/api-key-presets.ts +25 -0
- package/src/artifact-catalog.ts +60 -0
- package/src/artifacts.ts +146 -18
- package/src/atlassian-native-retirement.ts +33 -0
- package/src/browser-storage.ts +10 -0
- package/src/bundled-skills.ts +73 -0
- package/src/canonical-human-identities.ts +93 -0
- package/src/claude-provider-account-authority.ts +12 -0
- package/src/claude-subscription-oauth.ts +62 -0
- package/src/claude-subscription-usage.ts +59 -0
- package/src/client-error-report.ts +184 -0
- package/src/code-search.ts +105 -0
- package/src/codex-provider-account-authority.ts +37 -0
- package/src/company-brain-governed-writes.ts +356 -0
- package/src/company-brain.ts +201 -0
- package/src/company-profile.ts +167 -1
- package/src/connect.ts +202 -0
- package/src/connection-account-label.ts +46 -0
- package/src/connection-authority.ts +213 -0
- package/src/connector-attachments.ts +327 -0
- package/src/connector-tool-permissions.ts +60 -0
- package/src/direct-model-provider.ts +98 -0
- package/src/editable-artifact-codec-registry.ts +55 -17
- package/src/editable-artifact-committed-transaction.ts +44 -31
- package/src/editable-artifact-live.ts +123 -57
- package/src/editable-artifact-serialized-commit.ts +2 -1
- package/src/editable-artifact-versions.ts +26 -5
- package/src/editable-artifacts.ts +2 -0
- package/src/external-identities.ts +285 -0
- package/src/feedback.ts +39 -0
- package/src/github-repository-contracts.ts +85 -0
- package/src/github-repository.ts +59 -0
- package/src/google-drive.ts +76 -4
- package/src/governed-learning-activation.ts +191 -0
- package/src/governed-learning-evaluator.ts +176 -0
- package/src/host-mcp-bindings.ts +298 -0
- package/src/image-generation.ts +8 -2
- package/src/index.ts +8019 -1799
- package/src/insights-usage.ts +679 -0
- package/src/interaction.ts +1102 -6
- package/src/knowledge-entries.ts +375 -0
- package/src/knowledge-preparation.ts +50 -0
- package/src/knowledge.ts +335 -0
- package/src/managed-auth-session-sets.ts +253 -0
- package/src/managed-sign-in-methods.ts +37 -0
- package/src/mcp-catalog-limits.ts +2 -0
- package/src/mcp-endpoint.ts +30 -0
- package/src/mcp-oauth.ts +66 -0
- package/src/modal-native-proof-v2.ts +398 -0
- package/src/model-availability.ts +22 -0
- package/src/model-connection-access.ts +17 -0
- package/src/model-context-inspector.ts +139 -0
- package/src/model-display.ts +195 -0
- package/src/model-picker-order.ts +97 -0
- package/src/organization-access.ts +176 -0
- package/src/organization-integration-policy.ts +54 -0
- package/src/organization-membership-lifecycle.ts +559 -0
- package/src/organization-model-usage.ts +72 -0
- package/src/organization-recovery.ts +186 -0
- package/src/organization-usage.ts +79 -0
- package/src/permissions.ts +58 -0
- package/src/personal-github.ts +267 -0
- package/src/plugin-discovery.ts +33 -0
- package/src/preference-registry.ts +20 -1
- package/src/product-analytics.ts +253 -0
- package/src/product-lifecycle-facts.ts +121 -0
- package/src/remember.ts +243 -0
- package/src/retained-output.ts +20 -3
- package/src/sandbox-file-artifacts.ts +73 -0
- package/src/sandbox-provider-command.ts +82 -0
- package/src/sandbox-recovery.ts +116 -0
- package/src/sandbox-snapshots.ts +142 -0
- package/src/session-final-reply.ts +16 -0
- package/src/session-goal-reports.ts +55 -0
- package/src/session-history-import.ts +159 -0
- package/src/session-list-entries.ts +91 -0
- package/src/session-mcp-projections.ts +273 -0
- package/src/session-message-search.ts +54 -0
- package/src/session-titles.ts +467 -0
- package/src/session-topology-primitives.ts +21 -0
- package/src/signup-attribution.ts +81 -0
- package/src/site-request-headers.test.ts +28 -0
- package/src/site-session-http.ts +63 -0
- package/src/skill-catalog-context.ts +50 -0
- package/src/skill-files.ts +52 -0
- package/src/skill-metadata.ts +40 -0
- package/src/skill-use.ts +77 -0
- package/src/skills.ts +136 -0
- package/src/slack-bot-scopes.ts +106 -42
- package/src/slack-rest-mcp.ts +194 -0
- package/src/slack-task-policy.ts +215 -0
- package/src/spreadsheet-artifact-commands.ts +12 -13
- package/src/subscription-account-pools.ts +44 -0
- package/src/task-notes.ts +105 -0
- package/src/tool-catalog.ts +155 -0
- package/src/tool-result-spill.ts +35 -0
- package/src/usage-allowances.ts +187 -0
- package/src/video-generation.ts +43 -6
- package/src/work-claims.ts +266 -0
- package/src/workspace-instruction-policies.ts +31 -0
- package/src/workspace-integration-wire.ts +99 -0
- package/src/workspace-integrations.ts +640 -0
- package/src/workspace-learning-administration.ts +88 -0
- package/src/workspace-learning-policy.ts +4 -3
- package/src/workspace-state.ts +16 -126
- package/src/xai-provider-account-authority.ts +38 -0
- package/dist/chunk-52SGB2QO.js.map +0 -1
- package/dist/chunk-5UDNP7AO.js.map +0 -1
- package/dist/chunk-BVGIYW7D.js +0 -11
- package/dist/chunk-BVGIYW7D.js.map +0 -1
- package/dist/chunk-FJBG5E4O.js.map +0 -1
- package/dist/chunk-H5BVCZKF.js.map +0 -1
- package/dist/chunk-LSB7GRLG.js.map +0 -1
- package/dist/chunk-TZ6YEYN4.js.map +0 -1
- package/dist/chunk-VA22KRHS.js +0 -15177
- package/dist/chunk-VA22KRHS.js.map +0 -1
- package/dist/chunk-Y3MLSLB4.js.map +0 -1
- /package/dist/{chunk-CADSX6UN.js.map → chunk-Y3KNXVTD.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editable-artifact-committed-transaction.ts"],"sourcesContent":["/**\n * Strict, allocation-bounded inspection of canonical OGACO002 transactions.\n *\n * The Rust kernel remains the authority for applying operations. This decoder\n * validates the complete envelope and every typed operation so metadata after\n * the operation stream cannot be located by trusting attacker-controlled\n * lengths. It intentionally does not construct an editable artifact model.\n */\n\nimport { COMMITTED_TRANSACTION_PROTOCOL_VERSION } from \"./editable-artifact-versions\";\n\nexport { COMMITTED_TRANSACTION_PROTOCOL_VERSION } from \"./editable-artifact-versions\";\nexport const MAX_COMMITTED_TRANSACTION_BYTES = 8 * 1024 * 1024;\nexport const MAX_COMMITTED_TRANSACTION_OPERATIONS = 4_096;\nexport const MAX_COMMITTED_TRANSACTION_CAUSAL_REPLICAS = 100_000;\nexport const MAX_COMMITTED_TRANSACTION_CELLS = 1_000_000;\n\nconst MAGIC = new Uint8Array([0x4f, 0x47, 0x41, 0x43, 0x4f, 0x30, 0x30, 0x32]); // OGACO002\nconst HEADER_BYTES = 24;\nconst CHECKSUM_BYTES = 8;\nconst HASH_BYTES = 32;\nconst STABLE_ID_BYTES = 16;\nconst MAX_OPERATION_STRING_BYTES = 4 * 1024 * 1024;\nconst MAX_SAFE_U64_HIGH = 0x1f_ffff;\nconst U32_SIZE = 0x1_0000_0000;\nconst U32_MAX = 0xffff_ffff;\nconst MAX_DATE_MILLISECONDS = 8_640_000_000_000_000n;\nconst FNV_OFFSET_LOW = 0x8422_2325;\nconst FNV_OFFSET_HIGH = 0xcbf2_9ce4;\nconst FNV_PRIME_LOW = 0x01b3;\n\nconst HEX = Array.from({ length: 256 }, (_, value) => value.toString(16).padStart(2, \"0\"));\n\nexport type CommittedTransactionCausalEntry = Readonly<{\n replicaId: string;\n counter: number;\n}>;\n\nexport type CommittedTransactionSummary = Readonly<{\n operationProtocolVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;\n transactionId: string;\n dot: CommittedTransactionCausalEntry;\n resolvedCausalBase: readonly CommittedTransactionCausalEntry[];\n operationIds: readonly string[];\n priorStateHash: string;\n resultingCausalFrontier: readonly CommittedTransactionCausalEntry[];\n stateHash: string;\n}>;\n\n/**\n * Decodes only the metadata of one exact canonical OGACO002 byte envelope.\n *\n * This function is synchronous and never mutates or retains `bytes`. The\n * caller remains the owner of the exact canonical envelope.\n */\nexport function decodeCommittedTransactionSummary(bytes: Uint8Array): CommittedTransactionSummary {\n assertInput(bytes);\n if (bytes.byteLength > MAX_COMMITTED_TRANSACTION_BYTES) {\n throw new RangeError(\"OGACO002 envelope exceeds its byte limit\");\n }\n if (bytes.byteLength < HEADER_BYTES + CHECKSUM_BYTES) {\n throw new TypeError(\"truncated OGACO002 envelope\");\n }\n\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n for (let index = 0; index < MAGIC.byteLength; index += 1) {\n if (bytes[index] !== MAGIC[index]) throw new TypeError(\"invalid OGACO002 magic\");\n }\n\n const version = view.getUint16(8, true);\n if (version !== COMMITTED_TRANSACTION_PROTOCOL_VERSION) {\n throw new TypeError(`unsupported OGACO002 version: ${version}`);\n }\n if (view.getUint16(10, true) !== 0) {\n throw new TypeError(\"reserved OGACO002 header bits are set\");\n }\n\n const operationCount = view.getUint32(12, true);\n if (operationCount === 0 || operationCount > MAX_COMMITTED_TRANSACTION_OPERATIONS) {\n throw new RangeError(\"OGACO002 operation count is outside its canonical bounds\");\n }\n\n const payloadLength = safeU64At(view, 16, \"OGACO002 payload length\", false);\n const payloadEnd = checkedAdd(HEADER_BYTES, payloadLength, \"OGACO002 payload length\");\n const expectedLength = checkedAdd(payloadEnd, CHECKSUM_BYTES, \"OGACO002 envelope length\");\n if (bytes.byteLength !== expectedLength) {\n throw new TypeError(\n bytes.byteLength < expectedLength\n ? \"truncated OGACO002 payload\"\n : \"trailing bytes after OGACO002 envelope\",\n );\n }\n\n const [checksumLow, checksumHigh] = fnv1a64(bytes, payloadEnd);\n if (\n view.getUint32(payloadEnd, true) !== checksumLow ||\n view.getUint32(payloadEnd + 4, true) !== checksumHigh\n ) {\n throw new TypeError(\"OGACO002 checksum mismatch\");\n }\n\n const reader = new Reader(bytes, HEADER_BYTES, payloadEnd);\n const transactionId = reader.stableId(\"transaction id\");\n const dot = Object.freeze({\n replicaId: reader.replicaId(\"transaction dot replica\"),\n counter: reader.safeU64(\"transaction dot counter\", true),\n });\n const resolvedCausalBase = reader.frontier(\"resolved causal base\");\n const priorStateHash = reader.stateHash(\"prior state hash\");\n\n const operationIds: string[] = [];\n const seenOperationIds = new Set<string>();\n let totalCells = 0;\n for (let index = 0; index < operationCount; index += 1) {\n const operationId = reader.stableId(`operation ${index} id`);\n if (seenOperationIds.has(operationId)) {\n throw new TypeError(\"OGACO002 operation ids must be unique\");\n }\n seenOperationIds.add(operationId);\n operationIds.push(operationId);\n totalCells = reader.skipCommand(totalCells);\n }\n\n const resultingCausalFrontier = reader.frontier(\"resulting causal frontier\");\n const stateHash = reader.stateHash(\"resulting state hash\");\n reader.done();\n\n return Object.freeze({\n operationProtocolVersion: COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n transactionId,\n dot,\n resolvedCausalBase,\n operationIds: Object.freeze(operationIds),\n priorStateHash,\n resultingCausalFrontier,\n stateHash,\n });\n}\n\nclass Reader {\n readonly #bytes: Uint8Array;\n readonly #view: DataView;\n readonly #end: number;\n #offset: number;\n\n constructor(bytes: Uint8Array, offset: number, end: number) {\n this.#bytes = bytes;\n this.#view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n this.#offset = offset;\n this.#end = end;\n }\n\n take(length: number, label: string): Uint8Array {\n const offset = this.reserve(length, label);\n return this.#bytes.subarray(offset, offset + length);\n }\n\n reserve(length: number, label: string): number {\n if (!Number.isSafeInteger(length) || length < 0) {\n throw new RangeError(`${label} has an invalid byte length`);\n }\n const offset = this.#offset;\n const end = checkedAdd(offset, length, `${label} byte range`);\n if (end > this.#end) throw new TypeError(`truncated ${label}`);\n this.#offset = end;\n return offset;\n }\n\n u8(label: string): number {\n return this.#bytes[this.reserve(1, label)]!;\n }\n\n u32(label: string): number {\n const offset = this.reserve(4, label);\n return this.#view.getUint32(offset, true);\n }\n\n safeU64(label: string, positive: boolean): number {\n const offset = this.reserve(8, label);\n const value = safeU64At(this.#view, offset, label, positive);\n return value;\n }\n\n replicaId(label: string): string {\n const offset = this.reserve(8, label);\n const low = this.#view.getUint32(offset, true);\n const high = this.#view.getUint32(offset + 4, true);\n if (low === 0 && high === 0) throw new TypeError(`${label} must be nonzero`);\n return hexU64(high, low);\n }\n\n stableId(label: string): string {\n const offset = this.reserve(STABLE_ID_BYTES, label);\n const counterLow = this.#view.getUint32(offset, true);\n const counterHigh = this.#view.getUint32(offset + 4, true);\n const namespaceLow = this.#view.getUint32(offset + 8, true);\n const namespaceHigh = this.#view.getUint32(offset + 12, true);\n if (counterLow === 0 && counterHigh === 0 && namespaceLow === 0 && namespaceHigh === 0) {\n throw new TypeError(`${label} reserves the all-zero value`);\n }\n return `${hexU64(namespaceHigh, namespaceLow)}${hexU64(counterHigh, counterLow)}`;\n }\n\n sheetObjectId(label: string): string {\n const offset = this.#offset;\n const id = this.stableId(label);\n const counterIsZero =\n this.#view.getUint32(offset, true) === 0 && this.#view.getUint32(offset + 4, true) === 0;\n const namespaceIsZero =\n this.#view.getUint32(offset + 8, true) === 0 && this.#view.getUint32(offset + 12, true) === 0;\n if (counterIsZero || namespaceIsZero) {\n throw new TypeError(`${label} requires nonzero namespace and counter`);\n }\n return id;\n }\n\n stateHash(label: string): string {\n return `sha256:${hexBytes(this.take(HASH_BYTES, label))}`;\n }\n\n frontier(label: string): readonly CommittedTransactionCausalEntry[] {\n const count = this.u32(`${label} count`);\n if (count > MAX_COMMITTED_TRANSACTION_CAUSAL_REPLICAS) {\n throw new RangeError(`${label} exceeds its replica limit`);\n }\n const entries: CommittedTransactionCausalEntry[] = [];\n let previousLow = 0;\n let previousHigh = 0;\n let hasPrevious = false;\n for (let index = 0; index < count; index += 1) {\n const replicaOffset = this.#offset;\n const replicaId = this.replicaId(`${label} replica ${index}`);\n const replicaLow = this.#view.getUint32(replicaOffset, true);\n const replicaHigh = this.#view.getUint32(replicaOffset + 4, true);\n if (\n hasPrevious &&\n (replicaHigh < previousHigh || (replicaHigh === previousHigh && replicaLow <= previousLow))\n ) {\n throw new TypeError(`${label} replicas must be unique and strictly ordered`);\n }\n const counter = this.safeU64(`${label} counter ${index}`, true);\n entries.push(Object.freeze({ replicaId, counter }));\n previousLow = replicaLow;\n previousHigh = replicaHigh;\n hasPrevious = true;\n }\n return Object.freeze(entries);\n }\n\n skipCommand(totalCells: number): number {\n const tag = this.u8(\"collaboration command tag\");\n switch (tag) {\n case 0: {\n this.sheetObjectId(\"created sheet id\");\n this.skipString(\"created sheet name\");\n const after = this.u8(\"created sheet predecessor flag\");\n if (after === 1) this.skipGeneration(\"created sheet predecessor\");\n else if (after !== 0) throw new TypeError(\"invalid created sheet predecessor flag\");\n return totalCells;\n }\n case 1:\n this.skipGeneration(\"renamed sheet generation\");\n this.skipString(\"renamed sheet name\");\n return totalCells;\n case 2:\n this.skipGeneration(\"deleted sheet generation\");\n return totalCells;\n case 3:\n return this.skipSetCells(totalCells);\n case 4: {\n this.skipGeneration(\"cleared sheet generation\");\n const startRow = this.u32(\"clear range start row\");\n const startColumn = this.u32(\"clear range start column\");\n const endRow = this.u32(\"clear range end row\");\n const endColumn = this.u32(\"clear range end column\");\n if (startRow > endRow || startColumn > endColumn) {\n throw new TypeError(\"OGACO002 clear range is not normalized\");\n }\n return totalCells;\n }\n case 5:\n this.stableId(\"selective undo target\");\n return totalCells;\n default:\n throw new TypeError(`invalid OGACO002 collaboration command tag: ${tag}`);\n }\n }\n\n skipSetCells(totalCells: number): number {\n this.skipGeneration(\"cell block sheet generation\");\n const anchorRow = this.u32(\"cell block anchor row\");\n const anchorColumn = this.u32(\"cell block anchor column\");\n const rows = this.u32(\"cell block rows\");\n const columns = this.u32(\"cell block columns\");\n if (rows === 0 || columns === 0) {\n throw new TypeError(\"OGACO002 cell block dimensions must be nonzero\");\n }\n if (anchorRow > U32_MAX - (rows - 1) || anchorColumn > U32_MAX - (columns - 1)) {\n throw new RangeError(\"OGACO002 cell block coordinates overflow u32\");\n }\n if (rows > Math.floor(MAX_COMMITTED_TRANSACTION_CELLS / columns)) {\n throw new RangeError(\"OGACO002 cell block exceeds its cell limit\");\n }\n const cellCount = rows * columns;\n const nextTotal = totalCells + cellCount;\n if (nextTotal > MAX_COMMITTED_TRANSACTION_CELLS) {\n throw new RangeError(\"OGACO002 transaction exceeds its cell limit\");\n }\n for (let index = 0; index < cellCount; index += 1) this.skipCell();\n return nextTotal;\n }\n\n skipCell(): void {\n const formulaTag = this.u8(\"cell formula tag\");\n if (formulaTag === 1) {\n if (this.skipString(\"cell formula\") === 0) {\n throw new TypeError(\"OGACO002 formula must not be empty\");\n }\n return;\n } else if (formulaTag !== 0) {\n throw new TypeError(`invalid OGACO002 cell formula tag: ${formulaTag}`);\n }\n\n const valueTag = this.u8(\"cell value tag\");\n switch (valueTag) {\n case 0:\n case 1:\n case 2:\n return;\n case 3:\n this.skipNumber();\n return;\n case 4:\n this.skipString(\"cell text\");\n return;\n case 5:\n this.skipFormulaError();\n return;\n case 6:\n this.skipDate();\n return;\n default:\n throw new TypeError(`invalid OGACO002 cell value tag: ${valueTag}`);\n }\n }\n\n skipNumber(): void {\n const offset = this.reserve(8, \"cell number\");\n const low = this.#view.getUint32(offset, true);\n const high = this.#view.getUint32(offset + 4, true);\n if (low === 0 && high === 0x8000_0000) {\n throw new TypeError(\"OGACO002 cell number uses negative zero\");\n }\n if ((high & 0x7ff0_0000) === 0x7ff0_0000) {\n throw new TypeError(\"OGACO002 cell numbers must be finite\");\n }\n }\n\n skipDate(): void {\n const offset = this.reserve(8, \"cell date\");\n const milliseconds = this.#view.getBigInt64(offset, true);\n if (milliseconds < -MAX_DATE_MILLISECONDS || milliseconds > MAX_DATE_MILLISECONDS) {\n throw new TypeError(\"OGACO002 cell date is outside the ECMAScript range\");\n }\n }\n\n skipFormulaError(): void {\n const tag = this.u8(\"formula error tag\");\n if (tag <= 8) return;\n if (tag === 9) {\n this.skipString(\"custom formula error\");\n return;\n }\n throw new TypeError(`invalid OGACO002 formula error tag: ${tag}`);\n }\n\n skipGeneration(label: string): void {\n this.sheetObjectId(`${label} sheet id`);\n this.stableId(`${label} creation operation id`);\n }\n\n skipString(label: string): number {\n const length = this.u32(`${label} length`);\n if (length > MAX_OPERATION_STRING_BYTES) {\n throw new RangeError(`${label} exceeds its byte limit`);\n }\n const value = this.take(length, label);\n assertUtf8(value, label);\n return length;\n }\n\n done(): void {\n if (this.#offset !== this.#end) throw new TypeError(\"trailing bytes in OGACO002 payload\");\n }\n}\n\nfunction assertInput(bytes: Uint8Array): void {\n if (!(bytes instanceof Uint8Array)) {\n throw new TypeError(\"OGACO002 bytes must be a Uint8Array\");\n }\n if (typeof SharedArrayBuffer !== \"undefined\" && bytes.buffer instanceof SharedArrayBuffer) {\n throw new TypeError(\"OGACO002 bytes must not use shared mutable memory\");\n }\n}\n\nfunction safeU64At(view: DataView, offset: number, label: string, positive: boolean): number {\n const low = view.getUint32(offset, true);\n const high = view.getUint32(offset + 4, true);\n if (high > MAX_SAFE_U64_HIGH)\n throw new RangeError(`${label} exceeds JavaScript safe integer range`);\n const value = high * U32_SIZE + low;\n if (positive && value === 0) throw new TypeError(`${label} must be nonzero`);\n return value;\n}\n\nfunction checkedAdd(left: number, right: number, label: string): number {\n const result = left + right;\n if (!Number.isSafeInteger(result)) throw new RangeError(`${label} exceeds safe integer range`);\n return result;\n}\n\n/** Allocation-free UTF-8 scalar validation equivalent to Rust `str::from_utf8`. */\nfunction assertUtf8(bytes: Uint8Array, label: string): void {\n for (let index = 0; index < bytes.length;) {\n const first = bytes[index]!;\n if (first <= 0x7f) {\n index += 1;\n continue;\n }\n const second = bytes[index + 1];\n if (first >= 0xc2 && first <= 0xdf && continuation(second)) {\n index += 2;\n continue;\n }\n const third = bytes[index + 2];\n if (\n ((first === 0xe0 && between(second, 0xa0, 0xbf)) ||\n (first >= 0xe1 && first <= 0xec && continuation(second)) ||\n (first === 0xed && between(second, 0x80, 0x9f)) ||\n (first >= 0xee && first <= 0xef && continuation(second))) &&\n continuation(third)\n ) {\n index += 3;\n continue;\n }\n const fourth = bytes[index + 3];\n if (\n ((first === 0xf0 && between(second, 0x90, 0xbf)) ||\n (first >= 0xf1 && first <= 0xf3 && continuation(second)) ||\n (first === 0xf4 && between(second, 0x80, 0x8f))) &&\n continuation(third) &&\n continuation(fourth)\n ) {\n index += 4;\n continue;\n }\n throw new TypeError(`${label} is not canonical UTF-8`);\n }\n}\n\nfunction continuation(value: number | undefined): boolean {\n return value !== undefined && value >= 0x80 && value <= 0xbf;\n}\n\nfunction between(value: number | undefined, minimum: number, maximum: number): boolean {\n return value !== undefined && value >= minimum && value <= maximum;\n}\n\nfunction hexU64(high: number, low: number): string {\n return `${high.toString(16).padStart(8, \"0\")}${low.toString(16).padStart(8, \"0\")}`;\n}\n\nfunction hexBytes(bytes: Uint8Array): string {\n let result = \"\";\n for (const byte of bytes) result += HEX[byte];\n return result;\n}\n\n/** FNV-1a-64 using exact 32-bit limbs; avoids a BigInt allocation per byte. */\nfunction fnv1a64(bytes: Uint8Array, end: number): readonly [low: number, high: number] {\n let low = FNV_OFFSET_LOW;\n let high = FNV_OFFSET_HIGH;\n for (let index = 0; index < end; index += 1) {\n low = (low ^ bytes[index]!) >>> 0;\n const lowProduct = low * FNV_PRIME_LOW;\n const carry = Math.floor(lowProduct / U32_SIZE);\n high = (high * FNV_PRIME_LOW + carry + low * 0x100) >>> 0;\n low = lowProduct >>> 0;\n }\n return [low, high];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ConnectionKind,
|
|
3
|
+
SessionTenancyVisibility
|
|
4
|
+
} from "./chunk-X7ETVO4P.js";
|
|
5
|
+
|
|
6
|
+
// src/connection-authority.ts
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
var ConnectionAuthoritySelectionSource = z.enum(["explicit_workspace", "sender"]);
|
|
9
|
+
var ConnectionUseSelectionSource = z.string().min(1).max(128).regex(/^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$/u);
|
|
10
|
+
var AcceptedConnectionWork = z.discriminatedUnion("kind", [
|
|
11
|
+
z.object({
|
|
12
|
+
kind: z.literal("turn"),
|
|
13
|
+
turnId: z.string().uuid()
|
|
14
|
+
}).strict(),
|
|
15
|
+
z.object({
|
|
16
|
+
kind: z.literal("scheduled_task"),
|
|
17
|
+
taskId: z.string().uuid(),
|
|
18
|
+
taskAuthorityRevision: z.number().int().positive(),
|
|
19
|
+
runId: z.string().uuid()
|
|
20
|
+
}).strict()
|
|
21
|
+
]);
|
|
22
|
+
var ConnectionUseAuthoritySnapshot = z.object({
|
|
23
|
+
organizationId: z.string().uuid(),
|
|
24
|
+
originWorkspaceId: z.string().uuid(),
|
|
25
|
+
targetWorkspaceId: z.string().uuid(),
|
|
26
|
+
targetSessionId: z.string().uuid(),
|
|
27
|
+
targetSessionVisibility: SessionTenancyVisibility,
|
|
28
|
+
targetSessionAuthorityEpoch: z.number().int().positive(),
|
|
29
|
+
acceptedWork: AcceptedConnectionWork,
|
|
30
|
+
connectionId: z.string().uuid(),
|
|
31
|
+
connectionGeneration: z.number().int().positive(),
|
|
32
|
+
connectionStatus: z.literal("active"),
|
|
33
|
+
providerDomain: z.string().min(1).max(2048),
|
|
34
|
+
connectionKind: ConnectionKind,
|
|
35
|
+
scope: z.enum(["workspace", "user"]),
|
|
36
|
+
ownerSubjectId: z.string().min(1).max(512).nullable(),
|
|
37
|
+
ownerOrganizationMembershipId: z.string().uuid().nullable(),
|
|
38
|
+
ownerMembershipAuthorizationRevision: z.number().int().positive().nullable().default(null),
|
|
39
|
+
authoritySource: ConnectionAuthoritySelectionSource,
|
|
40
|
+
selectionSources: z.array(ConnectionUseSelectionSource).min(1).max(128),
|
|
41
|
+
userDelegation: z.null()
|
|
42
|
+
}).strict().superRefine((value, context) => {
|
|
43
|
+
const ownedBySubject = value.scope !== "workspace";
|
|
44
|
+
const delegated = value.scope === "user";
|
|
45
|
+
if (ownedBySubject !== (value.ownerSubjectId !== null)) {
|
|
46
|
+
context.addIssue({
|
|
47
|
+
code: "custom",
|
|
48
|
+
path: ["ownerSubjectId"],
|
|
49
|
+
message: "personal connections retain an owner subject"
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (delegated !== (value.ownerOrganizationMembershipId !== null)) {
|
|
53
|
+
context.addIssue({
|
|
54
|
+
code: "custom",
|
|
55
|
+
path: ["ownerOrganizationMembershipId"],
|
|
56
|
+
message: "only user connections retain an owner membership"
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (delegated !== (value.ownerMembershipAuthorizationRevision !== null)) {
|
|
60
|
+
context.addIssue({
|
|
61
|
+
code: "custom",
|
|
62
|
+
path: ["ownerMembershipAuthorizationRevision"],
|
|
63
|
+
message: "only user connections retain an owner membership revision"
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (delegated && value.authoritySource !== "sender") {
|
|
67
|
+
context.addIssue({
|
|
68
|
+
code: "custom",
|
|
69
|
+
path: ["authoritySource"],
|
|
70
|
+
message: "user connections require authenticated sender provenance"
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (!delegated && value.authoritySource === "sender") {
|
|
74
|
+
context.addIssue({
|
|
75
|
+
code: "custom",
|
|
76
|
+
path: ["authoritySource"],
|
|
77
|
+
message: "workspace connections cannot claim sender provenance"
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (!delegated && value.originWorkspaceId !== value.targetWorkspaceId) {
|
|
81
|
+
context.addIssue({
|
|
82
|
+
code: "custom",
|
|
83
|
+
path: ["originWorkspaceId"],
|
|
84
|
+
message: "workspace connections must be owned by the target workspace"
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
var ConnectionUseDenialReason = z.enum([
|
|
89
|
+
"tenant_mismatch",
|
|
90
|
+
"workspace_access_inactive",
|
|
91
|
+
"session_inactive",
|
|
92
|
+
"session_identity_changed",
|
|
93
|
+
"session_visibility_changed",
|
|
94
|
+
"session_authority_epoch_changed",
|
|
95
|
+
"accepted_attempt_authority_required",
|
|
96
|
+
"accepted_snapshot_digest_changed",
|
|
97
|
+
"connection_missing",
|
|
98
|
+
"connection_identity_changed",
|
|
99
|
+
"connection_generation_changed",
|
|
100
|
+
"connection_status_inactive",
|
|
101
|
+
"connection_owner_changed",
|
|
102
|
+
"owner_membership_inactive",
|
|
103
|
+
"authority_missing",
|
|
104
|
+
"authority_identity_changed",
|
|
105
|
+
"authority_generation_changed",
|
|
106
|
+
"authority_status_inactive",
|
|
107
|
+
"grant_missing",
|
|
108
|
+
"grant_identity_changed",
|
|
109
|
+
"grant_generation_changed",
|
|
110
|
+
"grant_status_inactive",
|
|
111
|
+
"grant_expired",
|
|
112
|
+
"grant_already_consumed"
|
|
113
|
+
]);
|
|
114
|
+
var ConnectionUseAttributionFields = z.object({
|
|
115
|
+
organizationId: z.string().uuid(),
|
|
116
|
+
workspaceId: z.string().uuid(),
|
|
117
|
+
sessionId: z.string().uuid(),
|
|
118
|
+
connectionId: z.string().uuid(),
|
|
119
|
+
connectionGeneration: z.number().int().positive(),
|
|
120
|
+
scope: z.enum(["workspace", "user", "legacy_user"]),
|
|
121
|
+
ownerSubjectId: z.string().min(1).max(512).nullable(),
|
|
122
|
+
authorityId: z.string().uuid().nullable(),
|
|
123
|
+
grantId: z.string().uuid().nullable()
|
|
124
|
+
}).strict();
|
|
125
|
+
function refineConnectionUseAttribution(value, context) {
|
|
126
|
+
const personal = value.scope !== "workspace";
|
|
127
|
+
for (const field of ["ownerSubjectId"]) {
|
|
128
|
+
if (personal !== (value[field] !== null)) {
|
|
129
|
+
context.addIssue({
|
|
130
|
+
code: "custom",
|
|
131
|
+
path: [field],
|
|
132
|
+
message: personal ? `personal attribution requires ${field}` : `workspace attribution cannot carry ${field}`
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const owned = value.scope === "user";
|
|
137
|
+
for (const field of ["authorityId"]) {
|
|
138
|
+
if (owned !== (value[field] !== null)) {
|
|
139
|
+
context.addIssue({
|
|
140
|
+
code: "custom",
|
|
141
|
+
path: [field],
|
|
142
|
+
message: owned ? `personal attribution requires ${field}` : `non-personal attribution cannot carry ${field}`
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (!owned && value.grantId !== null) {
|
|
147
|
+
context.addIssue({
|
|
148
|
+
code: "custom",
|
|
149
|
+
path: ["grantId"],
|
|
150
|
+
message: "only historical personal attribution can carry a grant"
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
var ConnectionUseAttribution = ConnectionUseAttributionFields.extend({
|
|
155
|
+
scope: z.enum(["workspace", "user"]),
|
|
156
|
+
grantId: z.null()
|
|
157
|
+
}).superRefine(refineConnectionUseAttribution);
|
|
158
|
+
var ConnectionUseAuditFact = ConnectionUseAttributionFields.extend({
|
|
159
|
+
outcome: z.enum(["authorized", "denied"]),
|
|
160
|
+
denialReason: ConnectionUseDenialReason.nullable(),
|
|
161
|
+
occurredAt: z.string().datetime({ offset: true })
|
|
162
|
+
}).superRefine((value, context) => {
|
|
163
|
+
refineConnectionUseAttribution(value, context);
|
|
164
|
+
if (value.outcome === "denied" !== (value.denialReason !== null)) {
|
|
165
|
+
context.addIssue({
|
|
166
|
+
code: "custom",
|
|
167
|
+
path: ["denialReason"],
|
|
168
|
+
message: "only denied connection use carries a denial reason"
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
var ConnectionUseAuthorizationResult = z.discriminatedUnion("status", [
|
|
173
|
+
z.object({ status: z.literal("authorized"), attribution: ConnectionUseAttribution }).strict(),
|
|
174
|
+
z.object({ status: z.literal("denied"), reason: ConnectionUseDenialReason }).strict()
|
|
175
|
+
]);
|
|
176
|
+
|
|
177
|
+
export {
|
|
178
|
+
ConnectionAuthoritySelectionSource,
|
|
179
|
+
ConnectionUseSelectionSource,
|
|
180
|
+
ConnectionUseAuthoritySnapshot,
|
|
181
|
+
ConnectionUseDenialReason,
|
|
182
|
+
ConnectionUseAttribution,
|
|
183
|
+
ConnectionUseAuditFact,
|
|
184
|
+
ConnectionUseAuthorizationResult
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=chunk-46KLD2UH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connection-authority.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { ConnectionKind, SessionTenancyVisibility } from \"./index\";\n\nexport const ConnectionAuthoritySelectionSource = z.enum([\"explicit_workspace\", \"sender\"]);\nexport type ConnectionAuthoritySelectionSource = z.infer<typeof ConnectionAuthoritySelectionSource>;\n\nexport const ConnectionUseSelectionSource = z\n .string()\n .min(1)\n .max(128)\n .regex(/^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$/u);\nexport type ConnectionUseSelectionSource = z.infer<typeof ConnectionUseSelectionSource>;\n\nconst AcceptedConnectionWork = z.discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"turn\"),\n turnId: z.string().uuid(),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"scheduled_task\"),\n taskId: z.string().uuid(),\n taskAuthorityRevision: z.number().int().positive(),\n runId: z.string().uuid(),\n })\n .strict(),\n]);\n\n/**\n * Internal, credential-free authority frozen when work is accepted. Personal\n * owner identity is retained only for live authorization and usage/audit\n * attribution; it is never part of the public delegation envelope.\n */\nexport const ConnectionUseAuthoritySnapshot = z\n .object({\n organizationId: z.string().uuid(),\n originWorkspaceId: z.string().uuid(),\n targetWorkspaceId: z.string().uuid(),\n targetSessionId: z.string().uuid(),\n targetSessionVisibility: SessionTenancyVisibility,\n targetSessionAuthorityEpoch: z.number().int().positive(),\n acceptedWork: AcceptedConnectionWork,\n connectionId: z.string().uuid(),\n connectionGeneration: z.number().int().positive(),\n connectionStatus: z.literal(\"active\"),\n providerDomain: z.string().min(1).max(2048),\n connectionKind: ConnectionKind,\n scope: z.enum([\"workspace\", \"user\"]),\n ownerSubjectId: z.string().min(1).max(512).nullable(),\n ownerOrganizationMembershipId: z.string().uuid().nullable(),\n ownerMembershipAuthorizationRevision: z.number().int().positive().nullable().default(null),\n authoritySource: ConnectionAuthoritySelectionSource,\n selectionSources: z.array(ConnectionUseSelectionSource).min(1).max(128),\n userDelegation: z.null(),\n })\n .strict()\n .superRefine((value, context) => {\n const ownedBySubject = value.scope !== \"workspace\";\n const delegated = value.scope === \"user\";\n if (ownedBySubject !== (value.ownerSubjectId !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerSubjectId\"],\n message: \"personal connections retain an owner subject\",\n });\n }\n if (delegated !== (value.ownerOrganizationMembershipId !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerOrganizationMembershipId\"],\n message: \"only user connections retain an owner membership\",\n });\n }\n if (delegated !== (value.ownerMembershipAuthorizationRevision !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerMembershipAuthorizationRevision\"],\n message: \"only user connections retain an owner membership revision\",\n });\n }\n if (delegated && value.authoritySource !== \"sender\") {\n context.addIssue({\n code: \"custom\",\n path: [\"authoritySource\"],\n message: \"user connections require authenticated sender provenance\",\n });\n }\n if (!delegated && value.authoritySource === \"sender\") {\n context.addIssue({\n code: \"custom\",\n path: [\"authoritySource\"],\n message: \"workspace connections cannot claim sender provenance\",\n });\n }\n if (!delegated && value.originWorkspaceId !== value.targetWorkspaceId) {\n context.addIssue({\n code: \"custom\",\n path: [\"originWorkspaceId\"],\n message: \"workspace connections must be owned by the target workspace\",\n });\n }\n });\nexport type ConnectionUseAuthoritySnapshot = z.infer<typeof ConnectionUseAuthoritySnapshot>;\n\nexport const ConnectionUseDenialReason = z.enum([\n \"tenant_mismatch\",\n \"workspace_access_inactive\",\n \"session_inactive\",\n \"session_identity_changed\",\n \"session_visibility_changed\",\n \"session_authority_epoch_changed\",\n \"accepted_attempt_authority_required\",\n \"accepted_snapshot_digest_changed\",\n \"connection_missing\",\n \"connection_identity_changed\",\n \"connection_generation_changed\",\n \"connection_status_inactive\",\n \"connection_owner_changed\",\n \"owner_membership_inactive\",\n \"authority_missing\",\n \"authority_identity_changed\",\n \"authority_generation_changed\",\n \"authority_status_inactive\",\n \"grant_missing\",\n \"grant_identity_changed\",\n \"grant_generation_changed\",\n \"grant_status_inactive\",\n \"grant_expired\",\n \"grant_already_consumed\",\n]);\nexport type ConnectionUseDenialReason = z.infer<typeof ConnectionUseDenialReason>;\n\nconst ConnectionUseAttributionFields = z\n .object({\n organizationId: z.string().uuid(),\n workspaceId: z.string().uuid(),\n sessionId: z.string().uuid(),\n connectionId: z.string().uuid(),\n connectionGeneration: z.number().int().positive(),\n scope: z.enum([\"workspace\", \"user\", \"legacy_user\"]),\n ownerSubjectId: z.string().min(1).max(512).nullable(),\n authorityId: z.string().uuid().nullable(),\n grantId: z.string().uuid().nullable(),\n })\n .strict();\n\nfunction refineConnectionUseAttribution(\n value: z.infer<typeof ConnectionUseAttributionFields>,\n context: z.RefinementCtx,\n): void {\n const personal = value.scope !== \"workspace\";\n for (const field of [\"ownerSubjectId\"] as const) {\n if (personal !== (value[field] !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [field],\n message: personal\n ? `personal attribution requires ${field}`\n : `workspace attribution cannot carry ${field}`,\n });\n }\n }\n const owned = value.scope === \"user\";\n for (const field of [\"authorityId\"] as const) {\n if (owned !== (value[field] !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [field],\n message: owned\n ? `personal attribution requires ${field}`\n : `non-personal attribution cannot carry ${field}`,\n });\n }\n }\n if (!owned && value.grantId !== null) {\n context.addIssue({\n code: \"custom\",\n path: [\"grantId\"],\n message: \"only historical personal attribution can carry a grant\",\n });\n }\n}\n\n/** Metadata-only attribution emitted after pre-use authorization. */\nexport const ConnectionUseAttribution = ConnectionUseAttributionFields.extend({\n scope: z.enum([\"workspace\", \"user\"]),\n grantId: z.null(),\n}).superRefine(refineConnectionUseAttribution);\nexport type ConnectionUseAttribution = z.infer<typeof ConnectionUseAttribution>;\n\nexport const ConnectionUseAuditFact = ConnectionUseAttributionFields.extend({\n outcome: z.enum([\"authorized\", \"denied\"]),\n denialReason: ConnectionUseDenialReason.nullable(),\n occurredAt: z.string().datetime({ offset: true }),\n}).superRefine((value, context) => {\n refineConnectionUseAttribution(value, context);\n if ((value.outcome === \"denied\") !== (value.denialReason !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"denialReason\"],\n message: \"only denied connection use carries a denial reason\",\n });\n }\n});\nexport type ConnectionUseAuditFact = z.infer<typeof ConnectionUseAuditFact>;\n\nexport const ConnectionUseAuthorizationResult = z.discriminatedUnion(\"status\", [\n z.object({ status: z.literal(\"authorized\"), attribution: ConnectionUseAttribution }).strict(),\n z.object({ status: z.literal(\"denied\"), reason: ConnectionUseDenialReason }).strict(),\n]);\nexport type ConnectionUseAuthorizationResult = z.infer<typeof ConnectionUseAuthorizationResult>;\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// src/browser-storage.ts
|
|
2
|
+
var EPHEMERAL_CHROMIUM_DRIVER_ID = "opengeni.cdp.ephemeral-context.v1";
|
|
3
|
+
function browserSessionStorageMode(session) {
|
|
4
|
+
return session.driverId === EPHEMERAL_CHROMIUM_DRIVER_ID ? "ephemeral_context" : "private_profile";
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
EPHEMERAL_CHROMIUM_DRIVER_ID,
|
|
9
|
+
browserSessionStorageMode
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-4JGHSSB7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/browser-storage.ts"],"sourcesContent":["/** Persisted discriminator; null identity alone never implies ephemeral storage. */\nexport const EPHEMERAL_CHROMIUM_DRIVER_ID = \"opengeni.cdp.ephemeral-context.v1\" as const;\n\nexport function browserSessionStorageMode(session: {\n driverId: string;\n}): \"private_profile\" | \"ephemeral_context\" {\n return session.driverId === EPHEMERAL_CHROMIUM_DRIVER_ID\n ? \"ephemeral_context\"\n : \"private_profile\";\n}\n"],"mappings":";AACO,IAAM,+BAA+B;AAErC,SAAS,0BAA0B,SAEE;AAC1C,SAAO,QAAQ,aAAa,+BACxB,sBACA;AACN;","names":[]}
|
|
@@ -25,6 +25,7 @@ var RetainedOutputKind = z.enum([
|
|
|
25
25
|
"internal_update",
|
|
26
26
|
"event_media",
|
|
27
27
|
"computer_screenshot",
|
|
28
|
+
"browser_screenshot",
|
|
28
29
|
"generated_image",
|
|
29
30
|
"generated_video",
|
|
30
31
|
"file"
|
|
@@ -87,7 +88,7 @@ var RetainedArtifactReferenceSchema = z.object({
|
|
|
87
88
|
message: "retrieval path must be a workspace/session API content path for this artifact"
|
|
88
89
|
});
|
|
89
90
|
}
|
|
90
|
-
if (value.kind === "computer_screenshot" || value.kind === "generated_image" || value.kind === "generated_video") {
|
|
91
|
+
if (value.kind === "computer_screenshot" || value.kind === "browser_screenshot" || value.kind === "generated_image" || value.kind === "generated_video") {
|
|
91
92
|
if (!value.dimensions) {
|
|
92
93
|
ctx.addIssue({
|
|
93
94
|
code: "custom",
|
|
@@ -134,12 +135,12 @@ var RetainedArtifactReferenceSchema = z.object({
|
|
|
134
135
|
});
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
|
-
if (value.kind === "computer_screenshot") {
|
|
138
|
+
if (value.kind === "computer_screenshot" || value.kind === "browser_screenshot") {
|
|
138
139
|
if (value.retention.policy !== "session_screenshot" || !sessionMatch) {
|
|
139
140
|
ctx.addIssue({
|
|
140
141
|
code: "custom",
|
|
141
142
|
path: ["retention"],
|
|
142
|
-
message: "
|
|
143
|
+
message: "session screenshots require session-scoped expiring retrieval"
|
|
143
144
|
});
|
|
144
145
|
}
|
|
145
146
|
}
|
|
@@ -163,6 +164,13 @@ var RetainedArtifactMetadataSchema = z.union([
|
|
|
163
164
|
RetainedArtifactReferenceSchema,
|
|
164
165
|
RetainedArtifactUnavailableSchema
|
|
165
166
|
]);
|
|
167
|
+
function retainedSessionScreenshotKindFromObjectKey(objectKey) {
|
|
168
|
+
const match = /^workspaces\/[0-9a-f-]+\/files\/[0-9a-f-]+\/retained\/(session-image|computer-screenshot|screenshot|browser-screenshot)\.(png|jpg|webp)$/.exec(
|
|
169
|
+
objectKey
|
|
170
|
+
);
|
|
171
|
+
if (!match) return null;
|
|
172
|
+
return match[1] === "browser-screenshot" ? "browser_screenshot" : "computer_screenshot";
|
|
173
|
+
}
|
|
166
174
|
function retainedArtifactReferenceFromFile(file, kind = "file") {
|
|
167
175
|
if (file.status !== "ready" || !file.sha256) return null;
|
|
168
176
|
const value = {
|
|
@@ -192,7 +200,7 @@ function retainedScreenshotReferenceFromFile(file) {
|
|
|
192
200
|
const value = {
|
|
193
201
|
available: true,
|
|
194
202
|
artifactId: file.id,
|
|
195
|
-
kind: "computer_screenshot",
|
|
203
|
+
kind: file.kind ?? "computer_screenshot",
|
|
196
204
|
contentType: canonicalRetainedContentType(file.contentType),
|
|
197
205
|
originalBytes: file.sizeBytes,
|
|
198
206
|
sha256: file.sha256,
|
|
@@ -373,6 +381,7 @@ function unsatisfiableRange(reason, totalBytes) {
|
|
|
373
381
|
// src/video-generation.ts
|
|
374
382
|
var VIDEO_GENERATION_SCHEMA_VERSION = 1;
|
|
375
383
|
var SEEDANCE_2_5_MODEL_ID = "bytedance/seedance-2.5";
|
|
384
|
+
var GROK_IMAGINE_VIDEO_1_5_MODEL_ID = "xai/grok-imagine-video-1.5";
|
|
376
385
|
var VideoGenerationSourceMode = z2.enum([
|
|
377
386
|
"text",
|
|
378
387
|
"first_frame",
|
|
@@ -381,7 +390,11 @@ var VideoGenerationSourceMode = z2.enum([
|
|
|
381
390
|
"video_reference"
|
|
382
391
|
]);
|
|
383
392
|
var VideoGenerationResolution = z2.enum(["480p", "720p"]);
|
|
384
|
-
var VideoGenerationFundingSource = z2.enum([
|
|
393
|
+
var VideoGenerationFundingSource = z2.enum([
|
|
394
|
+
"opengeni_credits",
|
|
395
|
+
"workspace_gateway",
|
|
396
|
+
"supergrok_subscription"
|
|
397
|
+
]);
|
|
385
398
|
var VideoGenerationAspectRatio = z2.enum([
|
|
386
399
|
"16:9",
|
|
387
400
|
"4:3",
|
|
@@ -449,7 +462,11 @@ var VideoGenerationCapabilities = z2.object({
|
|
|
449
462
|
}).strict().superRefine((value, ctx) => {
|
|
450
463
|
const ids = new Set(value.models.map((model) => model.modelId));
|
|
451
464
|
if (ids.size !== value.models.length) {
|
|
452
|
-
ctx.addIssue({
|
|
465
|
+
ctx.addIssue({
|
|
466
|
+
code: "custom",
|
|
467
|
+
path: ["models"],
|
|
468
|
+
message: "model ids must be unique"
|
|
469
|
+
});
|
|
453
470
|
}
|
|
454
471
|
if (!ids.has(value.defaultModelId)) {
|
|
455
472
|
ctx.addIssue({
|
|
@@ -506,15 +523,15 @@ var VideoGenerationFundingOption = z2.object({
|
|
|
506
523
|
var WorkspaceVideoGenerationSettings = z2.object({
|
|
507
524
|
schemaVersion: z2.literal(VIDEO_GENERATION_SCHEMA_VERSION),
|
|
508
525
|
policy: VideoGenerationPolicy,
|
|
509
|
-
fundingOptions: z2.array(VideoGenerationFundingOption).length(
|
|
526
|
+
fundingOptions: z2.array(VideoGenerationFundingOption).length(3),
|
|
510
527
|
availableModels: z2.array(VideoGenerationModelCapability).max(16),
|
|
511
528
|
capabilities: VideoGenerationCapabilities.nullable()
|
|
512
529
|
}).strict().superRefine((value, ctx) => {
|
|
513
|
-
if (new Set(value.fundingOptions.map((option) => option.source)).size !==
|
|
530
|
+
if (new Set(value.fundingOptions.map((option) => option.source)).size !== 3 || !value.fundingOptions.some((option) => option.source === "opengeni_credits") || !value.fundingOptions.some((option) => option.source === "workspace_gateway") || !value.fundingOptions.some((option) => option.source === "supergrok_subscription")) {
|
|
514
531
|
ctx.addIssue({
|
|
515
532
|
code: "custom",
|
|
516
533
|
path: ["fundingOptions"],
|
|
517
|
-
message: "
|
|
534
|
+
message: "all funding sources must be described exactly once"
|
|
518
535
|
});
|
|
519
536
|
}
|
|
520
537
|
const selected = value.fundingOptions.find(
|
|
@@ -539,6 +556,24 @@ var VideoGenerationAcceptedReceipt = z2.object({
|
|
|
539
556
|
status: z2.literal("accepted"),
|
|
540
557
|
operationId: z2.string().uuid()
|
|
541
558
|
}).strict();
|
|
559
|
+
var VideoGenerationRejectedCode = z2.enum([
|
|
560
|
+
"invalid_reference_path",
|
|
561
|
+
"reference_not_stable",
|
|
562
|
+
"reference_too_large",
|
|
563
|
+
"reference_media_type_mismatch",
|
|
564
|
+
"unsupported_reference_media"
|
|
565
|
+
]);
|
|
566
|
+
var VideoGenerationRejectedResult = z2.object({
|
|
567
|
+
schemaVersion: z2.literal(VIDEO_GENERATION_SCHEMA_VERSION),
|
|
568
|
+
status: z2.literal("rejected"),
|
|
569
|
+
code: VideoGenerationRejectedCode,
|
|
570
|
+
message: z2.string().min(1).max(512),
|
|
571
|
+
operationCreated: z2.literal(false)
|
|
572
|
+
}).strict();
|
|
573
|
+
var VideoGenerationToolResult = z2.discriminatedUnion("status", [
|
|
574
|
+
VideoGenerationAcceptedReceipt,
|
|
575
|
+
VideoGenerationRejectedResult
|
|
576
|
+
]);
|
|
542
577
|
var GeneratedVideoFacts = z2.object({
|
|
543
578
|
durationSeconds: z2.number().positive().max(120),
|
|
544
579
|
width: z2.number().int().positive().max(8192),
|
|
@@ -654,6 +689,7 @@ export {
|
|
|
654
689
|
RetainedOutputEvidenceSchema,
|
|
655
690
|
RetainedArtifactUnavailableSchema,
|
|
656
691
|
RetainedArtifactMetadataSchema,
|
|
692
|
+
retainedSessionScreenshotKindFromObjectKey,
|
|
657
693
|
retainedArtifactReferenceFromFile,
|
|
658
694
|
retainedScreenshotReferenceFromFile,
|
|
659
695
|
retainedGeneratedImageReferenceFromFile,
|
|
@@ -663,6 +699,7 @@ export {
|
|
|
663
699
|
resolveRetainedOutputRange,
|
|
664
700
|
VIDEO_GENERATION_SCHEMA_VERSION,
|
|
665
701
|
SEEDANCE_2_5_MODEL_ID,
|
|
702
|
+
GROK_IMAGINE_VIDEO_1_5_MODEL_ID,
|
|
666
703
|
VideoGenerationSourceMode,
|
|
667
704
|
VideoGenerationResolution,
|
|
668
705
|
VideoGenerationFundingSource,
|
|
@@ -677,6 +714,9 @@ export {
|
|
|
677
714
|
VideoGenerationFundingOption,
|
|
678
715
|
WorkspaceVideoGenerationSettings,
|
|
679
716
|
VideoGenerationAcceptedReceipt,
|
|
717
|
+
VideoGenerationRejectedCode,
|
|
718
|
+
VideoGenerationRejectedResult,
|
|
719
|
+
VideoGenerationToolResult,
|
|
680
720
|
GeneratedVideoFacts,
|
|
681
721
|
GeneratedVideoReceipt,
|
|
682
722
|
VideoGenerationTerminalFailureStatus,
|
|
@@ -685,4 +725,4 @@ export {
|
|
|
685
725
|
VideoGenerationOperationSummary,
|
|
686
726
|
VideoArtifactPlaybackSource
|
|
687
727
|
};
|
|
688
|
-
//# sourceMappingURL=chunk-
|
|
728
|
+
//# sourceMappingURL=chunk-5IXYF6XN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/video-generation.ts","../src/retained-output.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n GENERATED_VIDEO_MAX_BYTES,\n RETAINED_OUTPUT_MAX_PAGE_BYTES,\n RetainedArtifactReferenceSchema,\n} from \"./retained-output\";\n\nexport const VIDEO_GENERATION_SCHEMA_VERSION = 1 as const;\nexport const SEEDANCE_2_5_MODEL_ID = \"bytedance/seedance-2.5\" as const;\nexport const GROK_IMAGINE_VIDEO_1_5_MODEL_ID = \"xai/grok-imagine-video-1.5\" as const;\n\nexport const VideoGenerationSourceMode = z.enum([\n \"text\",\n \"first_frame\",\n \"first_and_last_frames\",\n \"image_reference\",\n \"video_reference\",\n]);\nexport type VideoGenerationSourceMode = z.infer<typeof VideoGenerationSourceMode>;\n\nexport const VideoGenerationResolution = z.enum([\"480p\", \"720p\"]);\nexport type VideoGenerationResolution = z.infer<typeof VideoGenerationResolution>;\n\nexport const VideoGenerationFundingSource = z.enum([\n \"opengeni_credits\",\n \"workspace_gateway\",\n \"supergrok_subscription\",\n]);\nexport type VideoGenerationFundingSource = z.infer<typeof VideoGenerationFundingSource>;\n\nexport const VideoGenerationAspectRatio = z.enum([\n \"16:9\",\n \"4:3\",\n \"1:1\",\n \"3:4\",\n \"9:16\",\n \"21:9\",\n \"adaptive\",\n]);\nexport type VideoGenerationAspectRatio = z.infer<typeof VideoGenerationAspectRatio>;\n\nconst SandboxVideoReferencePath = z\n .string()\n .min(1)\n .max(1_024)\n .refine((value) => value.startsWith(\"/workspace/\"), {\n message: \"video references must use an absolute /workspace path\",\n });\n\nexport const VideoGenerationSource = z.discriminatedUnion(\"mode\", [\n z.object({ mode: z.literal(\"text\") }).strict(),\n z\n .object({\n mode: z.literal(\"first_frame\"),\n imagePath: SandboxVideoReferencePath,\n })\n .strict(),\n z\n .object({\n mode: z.literal(\"first_and_last_frames\"),\n firstFramePath: SandboxVideoReferencePath,\n lastFramePath: SandboxVideoReferencePath,\n })\n .strict()\n .refine((value) => value.firstFramePath !== value.lastFramePath, {\n path: [\"lastFramePath\"],\n message: \"first and last frame paths must differ\",\n }),\n z\n .object({\n mode: z.literal(\"image_reference\"),\n imagePath: SandboxVideoReferencePath,\n })\n .strict(),\n z\n .object({\n mode: z.literal(\"video_reference\"),\n videoPath: SandboxVideoReferencePath,\n })\n .strict(),\n]);\nexport type VideoGenerationSource = z.infer<typeof VideoGenerationSource>;\n\n/** Stable provider-neutral function-tool input. Dynamic capability facts never enter this schema. */\nexport const GenerateVideoToolInput = z\n .object({\n prompt: z\n .string()\n .min(1)\n .max(32_000)\n .refine((value) => value.trim().length > 0),\n modelId: z.string().min(1).max(256).optional(),\n source: VideoGenerationSource.optional(),\n durationSeconds: z.number().int().min(4).max(30).optional(),\n aspectRatio: VideoGenerationAspectRatio.optional(),\n resolution: VideoGenerationResolution.optional(),\n generateAudio: z.boolean().optional(),\n })\n .strict();\nexport type GenerateVideoToolInput = z.infer<typeof GenerateVideoToolInput>;\n\nexport const GetVideoGenerationCapabilitiesToolInput = z.object({}).strict();\nexport type GetVideoGenerationCapabilitiesToolInput = z.infer<\n typeof GetVideoGenerationCapabilitiesToolInput\n>;\n\nexport const VideoGenerationModelCapability = z\n .object({\n modelId: z.string().min(1).max(256),\n label: z.string().min(1).max(128),\n providerLabel: z.string().min(1).max(128),\n sourceModes: z.array(VideoGenerationSourceMode).min(1).max(5),\n resolutions: z.array(VideoGenerationResolution).min(1).max(2),\n aspectRatios: z.array(VideoGenerationAspectRatio).min(1).max(7),\n duration: z\n .object({\n minSeconds: z.number().int().positive(),\n maxSeconds: z.number().int().positive(),\n stepSeconds: z.number().int().positive(),\n })\n .strict()\n .refine((value) => value.maxSeconds >= value.minSeconds),\n supportsAudio: z.boolean(),\n })\n .strict();\nexport type VideoGenerationModelCapability = z.infer<typeof VideoGenerationModelCapability>;\n\nexport const VideoGenerationCapabilities = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n capabilityRevision: z.string().min(1).max(128),\n defaultModelId: z.string().min(1).max(256),\n models: z.array(VideoGenerationModelCapability).min(1).max(16),\n })\n .strict()\n .superRefine((value, ctx) => {\n const ids = new Set(value.models.map((model) => model.modelId));\n if (ids.size !== value.models.length) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"models\"],\n message: \"model ids must be unique\",\n });\n }\n if (!ids.has(value.defaultModelId)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"defaultModelId\"],\n message: \"default model must be present in the enabled model list\",\n });\n }\n });\nexport type VideoGenerationCapabilities = z.infer<typeof VideoGenerationCapabilities>;\n\nexport const VideoGenerationPolicy = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n revision: z.number().int().nonnegative().safe(),\n fundingSource: VideoGenerationFundingSource,\n enabledModelIds: z.array(z.string().min(1).max(256)).max(16),\n defaultModelId: z.string().min(1).max(256).nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const ids = new Set(value.enabledModelIds);\n if (ids.size !== value.enabledModelIds.length) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"enabledModelIds\"],\n message: \"enabled model ids must be unique\",\n });\n }\n if (value.defaultModelId !== null && !ids.has(value.defaultModelId)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"defaultModelId\"],\n message: \"default model must be enabled\",\n });\n }\n });\nexport type VideoGenerationPolicy = z.infer<typeof VideoGenerationPolicy>;\n\nexport const UpdateVideoGenerationPolicyRequest = z\n .object({\n expectedRevision: z.number().int().nonnegative().safe(),\n fundingSource: VideoGenerationFundingSource,\n enabledModelIds: z.array(z.string().min(1).max(256)).max(16),\n defaultModelId: z.string().min(1).max(256).nullable(),\n })\n .strict();\nexport type UpdateVideoGenerationPolicyRequest = z.infer<typeof UpdateVideoGenerationPolicyRequest>;\n\nexport const VideoGenerationFundingOption = z\n .object({\n source: VideoGenerationFundingSource,\n label: z.string().min(1).max(128),\n description: z.string().min(1).max(256),\n available: z.boolean(),\n unavailableReason: z.string().min(1).max(256).nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (value.available !== (value.unavailableReason === null)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"unavailableReason\"],\n message: \"available funding options cannot have an unavailable reason\",\n });\n }\n });\nexport type VideoGenerationFundingOption = z.infer<typeof VideoGenerationFundingOption>;\n\nexport const WorkspaceVideoGenerationSettings = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n policy: VideoGenerationPolicy,\n fundingOptions: z.array(VideoGenerationFundingOption).length(3),\n availableModels: z.array(VideoGenerationModelCapability).max(16),\n capabilities: VideoGenerationCapabilities.nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (\n new Set(value.fundingOptions.map((option) => option.source)).size !== 3 ||\n !value.fundingOptions.some((option) => option.source === \"opengeni_credits\") ||\n !value.fundingOptions.some((option) => option.source === \"workspace_gateway\") ||\n !value.fundingOptions.some((option) => option.source === \"supergrok_subscription\")\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"fundingOptions\"],\n message: \"all funding sources must be described exactly once\",\n });\n }\n const selected = value.fundingOptions.find(\n (option) => option.source === value.policy.fundingSource,\n );\n if (!selected) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"fundingOptions\"],\n message: \"the selected funding source must be described\",\n });\n } else if (!selected.available && value.capabilities !== null) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"capabilities\"],\n message: \"unavailable funding cannot expose executable capabilities\",\n });\n }\n });\nexport type WorkspaceVideoGenerationSettings = z.infer<typeof WorkspaceVideoGenerationSettings>;\n\nexport const VideoGenerationAcceptedReceipt = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"accepted\"),\n operationId: z.string().uuid(),\n })\n .strict();\nexport type VideoGenerationAcceptedReceipt = z.infer<typeof VideoGenerationAcceptedReceipt>;\n\nexport const VideoGenerationRejectedCode = z.enum([\n \"invalid_reference_path\",\n \"reference_not_stable\",\n \"reference_too_large\",\n \"reference_media_type_mismatch\",\n \"unsupported_reference_media\",\n]);\nexport type VideoGenerationRejectedCode = z.infer<typeof VideoGenerationRejectedCode>;\n\n/** Deterministic pre-admission rejection: no provider request or durable operation was created. */\nexport const VideoGenerationRejectedResult = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"rejected\"),\n code: VideoGenerationRejectedCode,\n message: z.string().min(1).max(512),\n operationCreated: z.literal(false),\n })\n .strict();\nexport type VideoGenerationRejectedResult = z.infer<typeof VideoGenerationRejectedResult>;\n\nexport const VideoGenerationToolResult = z.discriminatedUnion(\"status\", [\n VideoGenerationAcceptedReceipt,\n VideoGenerationRejectedResult,\n]);\nexport type VideoGenerationToolResult = z.infer<typeof VideoGenerationToolResult>;\n\nexport const GeneratedVideoFacts = z\n .object({\n durationSeconds: z.number().positive().max(120),\n width: z.number().int().positive().max(8_192),\n height: z.number().int().positive().max(8_192),\n fps: z.number().positive().max(120),\n hasAudio: z.boolean(),\n videoCodec: z.literal(\"h264\"),\n audioCodec: z.literal(\"aac\").nullable(),\n })\n .strict();\nexport type GeneratedVideoFacts = z.infer<typeof GeneratedVideoFacts>;\n\nexport const GeneratedVideoReceipt = z\n .object({\n type: z.literal(\"generated_video\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n operationId: z.string().uuid(),\n artifact: RetainedArtifactReferenceSchema,\n video: GeneratedVideoFacts,\n sandboxPath: z\n .string()\n .max(256)\n .regex(\n /^\\/workspace\\/generated-videos\\/generated-video-[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\.mp4$/,\n ),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (\n value.artifact.kind !== \"generated_video\" ||\n value.artifact.contentType !== \"video/mp4\" ||\n value.artifact.originalBytes <= 0 ||\n value.artifact.originalBytes > GENERATED_VIDEO_MAX_BYTES ||\n value.artifact.retention.policy !== \"workspace_file\" ||\n value.artifact.retrieval.maxRangeBytes !== RETAINED_OUTPUT_MAX_PAGE_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"artifact\"],\n message: \"generated-video artifact metadata is invalid\",\n });\n }\n if (\n value.artifact.dimensions?.width !== value.video.width ||\n value.artifact.dimensions?.height !== value.video.height\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"video\"],\n message: \"video dimensions must match the retained artifact\",\n });\n }\n if (\n value.sandboxPath !==\n `/workspace/generated-videos/generated-video-${value.artifact.artifactId}.mp4`\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"sandboxPath\"],\n message: \"generated-video sandbox path does not match its artifact\",\n });\n }\n });\nexport type GeneratedVideoReceipt = z.infer<typeof GeneratedVideoReceipt>;\n\nexport const VideoGenerationTerminalFailureStatus = z.enum([\n \"provider_failed\",\n \"retention_failed\",\n \"cancelled_before_submit\",\n \"outcome_unknown\",\n]);\nexport type VideoGenerationTerminalFailureStatus = z.infer<\n typeof VideoGenerationTerminalFailureStatus\n>;\n\nexport const MediaGenerationResult = z.discriminatedUnion(\"status\", [\n z\n .object({\n type: z.literal(\"media_generation_result\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"ready\"),\n operationId: z.string().uuid(),\n receipt: GeneratedVideoReceipt,\n })\n .strict()\n .refine((value) => value.receipt.operationId === value.operationId, {\n path: [\"receipt\", \"operationId\"],\n message: \"terminal receipt must match its operation\",\n }),\n z\n .object({\n type: z.literal(\"media_generation_result\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: VideoGenerationTerminalFailureStatus,\n operationId: z.string().uuid(),\n boundedPublicReason: z.string().min(1).max(1_000),\n })\n .strict(),\n]);\nexport type MediaGenerationResult = z.infer<typeof MediaGenerationResult>;\n\nexport const VideoGenerationPublicStatus = z.enum([\n \"preparing\",\n \"prepared\",\n \"accepted\",\n \"provider_started\",\n \"retaining\",\n \"completed\",\n \"provider_failed\",\n \"cancelled_before_submit\",\n \"outcome_unknown\",\n \"retention_failed\",\n]);\nexport type VideoGenerationPublicStatus = z.infer<typeof VideoGenerationPublicStatus>;\n\nexport const VideoGenerationOperationSummary = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n operationId: z.string().uuid(),\n modelId: z.string().min(1).max(256),\n status: VideoGenerationPublicStatus,\n createdAt: z.string().datetime({ offset: true }),\n updatedAt: z.string().datetime({ offset: true }),\n terminal: MediaGenerationResult.nullable(),\n })\n .strict();\nexport type VideoGenerationOperationSummary = z.infer<typeof VideoGenerationOperationSummary>;\n\nexport const VideoArtifactPlaybackSource = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n artifactId: z.string().uuid(),\n url: z.string().url().max(8_192),\n expiresAt: z.string().datetime({ offset: true }),\n contentType: z.literal(\"video/mp4\"),\n sizeBytes: z.number().int().positive().max(GENERATED_VIDEO_MAX_BYTES),\n sha256: z.string().regex(/^[0-9a-f]{64}$/),\n acceptRanges: z.literal(\"bytes\"),\n })\n .strict();\nexport type VideoArtifactPlaybackSource = z.infer<typeof VideoArtifactPlaybackSource>;\n","import { z } from \"zod\";\n\n/** Hard server-side ceiling for one retained-output response body. */\nexport const RETAINED_OUTPUT_MAX_PAGE_BYTES = 1024 * 1024;\n/** Default first page when the client does not send a Range header. */\nexport const RETAINED_OUTPUT_DEFAULT_PAGE_BYTES = 256 * 1024;\n/** Receipts are timeline references, never an extensible metadata bag. */\nexport const RETAINED_OUTPUT_RECEIPT_MAX_BYTES = 2 * 1024;\n\n/** Screenshot bytes are accounted separately from the 10k-token text policy. */\nexport const COMPUTER_SCREENSHOT_MAX_BYTES = 32 * 1024 * 1024;\nexport const COMPUTER_SCREENSHOT_MAX_DIMENSION = 16_384;\nexport const COMPUTER_SCREENSHOT_MAX_PIXELS = 67_108_864;\n/** Canonical ready-object retention window: 30 days from successful settlement. */\nexport const COMPUTER_SCREENSHOT_RETENTION_MS = 30 * 24 * 60 * 60 * 1_000;\n/** Hard workspace reservation across pending + ready screenshot artifacts. */\nexport const COMPUTER_SCREENSHOT_WORKSPACE_QUOTA_BYTES = 5 * 1024 * 1024 * 1024;\n/** Generated images are permanent workspace files, never inline history blobs. */\nexport const GENERATED_IMAGE_MAX_BYTES = 64 * 1024 * 1024;\n/** Generated videos are permanent workspace files and are always streamed. */\nexport const GENERATED_VIDEO_MAX_BYTES = 512 * 1024 * 1024;\n\nconst encoder = new TextEncoder();\nconst LOWERCASE_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 LOWERCASE_SHA256 = /^[0-9a-f]{64}$/;\nconst CANONICAL_MEDIA_TYPE = /^[a-z0-9][a-z0-9!#$&^_.+-]{0,62}\\/[a-z0-9][a-z0-9!#$&^_.+-]{0,62}$/;\nconst WORKSPACE_RETRIEVAL_PATH =\n /^\\/v1\\/workspaces\\/([0-9a-f-]+)\\/artifacts\\/([0-9a-f-]+)\\/content$/;\nconst SESSION_RETRIEVAL_PATH =\n /^\\/v1\\/workspaces\\/([0-9a-f-]+)\\/sessions\\/([0-9a-f-]+)\\/artifacts\\/([0-9a-f-]+)\\/content$/;\n\nexport const RetainedOutputKind = z.enum([\n \"tool_result\",\n \"assistant_completion\",\n \"internal_update\",\n \"event_media\",\n \"computer_screenshot\",\n \"browser_screenshot\",\n \"generated_image\",\n \"generated_video\",\n \"file\",\n]);\nexport type RetainedOutputKind = z.infer<typeof RetainedOutputKind>;\n\nexport const RetainedOutputUnavailableReason = z.enum([\n \"not_retained\",\n \"pending\",\n \"failed\",\n \"expired\",\n \"deleted\",\n \"missing_storage\",\n \"storage_write_failed\",\n \"quota_exceeded\",\n \"invalid_content\",\n \"oversized\",\n \"unsupported\",\n]);\nexport type RetainedOutputUnavailableReason = z.infer<typeof RetainedOutputUnavailableReason>;\n\nconst RetainedOutputUnavailableEvidenceSchema = z\n .object({\n available: z.literal(false),\n reason: RetainedOutputUnavailableReason,\n })\n .strict();\n\nexport const RetainedArtifactReferenceSchema = z\n .object({\n available: z.literal(true),\n artifactId: z.string().regex(LOWERCASE_UUID),\n kind: RetainedOutputKind,\n contentType: z.string().max(127).regex(CANONICAL_MEDIA_TYPE),\n originalBytes: z.number().int().nonnegative().safe(),\n sha256: z.string().regex(LOWERCASE_SHA256),\n retainedAt: z.string().datetime({ offset: true }),\n dimensions: z\n .object({\n width: z.number().int().positive().max(COMPUTER_SCREENSHOT_MAX_DIMENSION),\n height: z.number().int().positive().max(COMPUTER_SCREENSHOT_MAX_DIMENSION),\n })\n .strict()\n .optional(),\n retention: z.union([\n z\n .object({\n policy: z.literal(\"workspace_file\"),\n expiresAt: z.null(),\n })\n .strict(),\n z\n .object({\n policy: z.literal(\"session_screenshot\"),\n expiresAt: z.string().datetime({ offset: true }),\n })\n .strict(),\n ]),\n retrieval: z\n .object({\n method: z.literal(\"GET\"),\n path: z.string().max(256),\n acceptRanges: z.literal(\"bytes\"),\n maxRangeBytes: z.number().int().positive().max(RETAINED_OUTPUT_MAX_PAGE_BYTES),\n })\n .strict(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const workspaceMatch = WORKSPACE_RETRIEVAL_PATH.exec(value.retrieval.path);\n const sessionMatch = SESSION_RETRIEVAL_PATH.exec(value.retrieval.path);\n const workspaceId = workspaceMatch?.[1] ?? sessionMatch?.[1];\n const sessionId = sessionMatch?.[2];\n const artifactId = workspaceMatch?.[2] ?? sessionMatch?.[3];\n if (\n !workspaceId ||\n !LOWERCASE_UUID.test(workspaceId) ||\n (sessionId !== undefined && !LOWERCASE_UUID.test(sessionId)) ||\n artifactId !== value.artifactId\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retrieval\", \"path\"],\n message: \"retrieval path must be a workspace/session API content path for this artifact\",\n });\n }\n\n if (\n value.kind === \"computer_screenshot\" ||\n value.kind === \"browser_screenshot\" ||\n value.kind === \"generated_image\" ||\n value.kind === \"generated_video\"\n ) {\n if (!value.dimensions) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"dimensions\"],\n message: `${value.kind} receipts require exact dimensions`,\n });\n } else if (\n value.dimensions.width * value.dimensions.height >\n COMPUTER_SCREENSHOT_MAX_PIXELS\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"dimensions\"],\n message: `${value.kind} dimensions exceed the pixel limit`,\n });\n }\n }\n\n if (value.kind === \"generated_image\") {\n if (value.retention.policy !== \"workspace_file\" || !workspaceMatch || sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"generated images require permanent workspace-file retrieval\",\n });\n }\n if (\n ![\"image/png\", \"image/jpeg\", \"image/webp\"].includes(value.contentType) ||\n value.originalBytes <= 0 ||\n value.originalBytes > GENERATED_IMAGE_MAX_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"contentType\"],\n message: \"generated image media metadata is invalid\",\n });\n }\n }\n\n if (value.kind === \"generated_video\") {\n if (value.retention.policy !== \"workspace_file\" || !workspaceMatch || sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"generated videos require permanent workspace-file retrieval\",\n });\n }\n if (\n value.contentType !== \"video/mp4\" ||\n value.originalBytes <= 0 ||\n value.originalBytes > GENERATED_VIDEO_MAX_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"contentType\"],\n message: \"generated video media metadata is invalid\",\n });\n }\n }\n\n if (value.kind === \"computer_screenshot\" || value.kind === \"browser_screenshot\") {\n if (value.retention.policy !== \"session_screenshot\" || !sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"session screenshots require session-scoped expiring retrieval\",\n });\n }\n }\n\n if (encoder.encode(JSON.stringify(value)).byteLength > RETAINED_OUTPUT_RECEIPT_MAX_BYTES) {\n ctx.addIssue({\n code: \"custom\",\n message: \"retained-output receipt exceeds its byte envelope\",\n });\n }\n });\n\n/**\n * Canonical evidence fact carried by bounded audit/NATS/SSE/UI previews.\n *\n * The available variant is intentionally provider-neutral and closed: no bucket,\n * object key, signed URL, arbitrary metadata, or producer-controlled labels can\n * cross this boundary.\n */\nexport const RetainedOutputEvidenceSchema = z.discriminatedUnion(\"available\", [\n RetainedOutputUnavailableEvidenceSchema,\n RetainedArtifactReferenceSchema,\n]);\nexport type RetainedOutputEvidence = z.infer<typeof RetainedOutputEvidenceSchema>;\nexport type RetainedArtifactReference = z.infer<typeof RetainedArtifactReferenceSchema>;\n/** @deprecated use RetainedArtifactReference. */\nexport type RetainedOutputAvailableEvidence = RetainedArtifactReference;\n\nexport const RetainedArtifactUnavailableSchema = z\n .object({\n available: z.literal(false),\n artifactId: z.string().regex(LOWERCASE_UUID),\n reason: RetainedOutputUnavailableReason,\n })\n .strict();\nexport type RetainedArtifactUnavailable = z.infer<typeof RetainedArtifactUnavailableSchema>;\n\n/** Authenticated metadata result for one opaque workspace file identity. */\nexport const RetainedArtifactMetadataSchema = z.union([\n RetainedArtifactReferenceSchema,\n RetainedArtifactUnavailableSchema,\n]);\nexport type RetainedArtifactMetadata = z.infer<typeof RetainedArtifactMetadataSchema>;\n\nexport type RetainedArtifactFileInput = {\n id: string;\n workspaceId: string;\n status: string;\n contentType: string;\n sizeBytes: number;\n sha256: string | null;\n updatedAt: string;\n};\n\nexport type RetainedScreenshotArtifactInput = RetainedArtifactFileInput & {\n sessionId: string;\n width: number;\n height: number;\n expiresAt: string;\n kind?: \"computer_screenshot\" | \"browser_screenshot\";\n};\n\nexport type RetainedSessionScreenshotKind = \"computer_screenshot\" | \"browser_screenshot\";\n\n/** The persisted, server-authored storage key distinguishes browser captures from legacy computer captures. */\nexport function retainedSessionScreenshotKindFromObjectKey(\n objectKey: string,\n): RetainedSessionScreenshotKind | null {\n const match =\n /^workspaces\\/[0-9a-f-]+\\/files\\/[0-9a-f-]+\\/retained\\/(session-image|computer-screenshot|screenshot|browser-screenshot)\\.(png|jpg|webp)$/.exec(\n objectKey,\n );\n if (!match) return null;\n return match[1] === \"browser-screenshot\" ? \"browser_screenshot\" : \"computer_screenshot\";\n}\n\nexport type RetainedGeneratedImageArtifactInput = RetainedArtifactFileInput & {\n width: number;\n height: number;\n};\n\nexport type RetainedGeneratedVideoArtifactInput = RetainedArtifactFileInput & {\n width: number;\n height: number;\n};\n\n/**\n * Convert a ready, integrity-addressed workspace file into the only available\n * retained-output receipt shape. Invalid, pending, or checksum-less files fail\n * closed instead of implying that full evidence is retrievable.\n */\nexport function retainedArtifactReferenceFromFile(\n file: RetainedArtifactFileInput,\n kind: RetainedOutputKind = \"file\",\n): RetainedArtifactReference | null {\n if (file.status !== \"ready\" || !file.sha256) return null;\n const value = {\n available: true as const,\n artifactId: file.id,\n kind,\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the closed, session-scoped receipt for one ready screenshot file. */\nexport function retainedScreenshotReferenceFromFile(\n file: RetainedScreenshotArtifactInput,\n): RetainedArtifactReference | null {\n if (file.status !== \"ready\" || !file.sha256 || file.sizeBytes <= 0) return null;\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: file.kind ?? \"computer_screenshot\",\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"session_screenshot\" as const,\n expiresAt: file.expiresAt,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/sessions/${file.sessionId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the permanent workspace receipt for one validated generated image. */\nexport function retainedGeneratedImageReferenceFromFile(\n file: RetainedGeneratedImageArtifactInput,\n): RetainedArtifactReference | null {\n if (\n file.status !== \"ready\" ||\n !file.sha256 ||\n file.sizeBytes <= 0 ||\n file.sizeBytes > GENERATED_IMAGE_MAX_BYTES\n ) {\n return null;\n }\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: \"generated_image\" as const,\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the permanent workspace receipt for one validated generated video. */\nexport function retainedGeneratedVideoReferenceFromFile(\n file: RetainedGeneratedVideoArtifactInput,\n): RetainedArtifactReference | null {\n if (\n file.status !== \"ready\" ||\n file.contentType !== \"video/mp4\" ||\n !file.sha256 ||\n file.sizeBytes <= 0 ||\n file.sizeBytes > GENERATED_VIDEO_MAX_BYTES\n ) {\n return null;\n }\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: \"generated_video\" as const,\n contentType: \"video/mp4\" as const,\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\nfunction canonicalRetainedContentType(value: string): string {\n const mediaType = value.split(\";\", 1)[0]?.trim().toLowerCase() ?? \"\";\n return CANONICAL_MEDIA_TYPE.test(mediaType) ? mediaType : \"application/octet-stream\";\n}\n\n/** Parse and clone a trusted server receipt; invalid/untrusted data fails closed. */\nexport function validateRetainedOutputEvidence(value: unknown): RetainedOutputEvidence | null {\n const parsed = RetainedOutputEvidenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\nexport function retainedOutputUnavailable(\n reason: RetainedOutputUnavailableReason = \"not_retained\",\n): RetainedOutputEvidence {\n return { available: false, reason };\n}\n\nexport type RetainedOutputResolvedRange = {\n kind: \"range\";\n start: number;\n end: number;\n length: number;\n totalBytes: number;\n status: 200 | 206;\n contentRange: string | null;\n acceptRanges: \"bytes\";\n};\n\nexport type RetainedOutputRangeResolution =\n | RetainedOutputResolvedRange\n | {\n kind: \"empty\";\n length: 0;\n totalBytes: 0;\n status: 200;\n contentRange: null;\n acceptRanges: \"bytes\";\n }\n | {\n kind: \"invalid\";\n reason: \"malformed\" | \"multipart_not_supported\" | \"numeric_overflow\" | \"range_too_large\";\n maxPageBytes: number;\n }\n | {\n kind: \"unsatisfiable\";\n reason: \"empty_artifact\" | \"start_out_of_bounds\" | \"end_before_start\" | \"zero_suffix\";\n totalBytes: number;\n contentRange: string;\n };\n\n/**\n * Resolve one RFC-style bytes range without ever licensing a response larger\n * than `maxPageBytes`. Multipart ranges and oversized explicit/suffix requests\n * fail closed. An omitted or open-ended range becomes one resumable bounded page.\n */\nexport function resolveRetainedOutputRange(\n rangeHeader: string | null | undefined,\n totalBytes: number,\n maxPageBytes = RETAINED_OUTPUT_DEFAULT_PAGE_BYTES,\n): RetainedOutputRangeResolution {\n assertRangeInputs(totalBytes, maxPageBytes);\n\n if (rangeHeader === null || rangeHeader === undefined || rangeHeader === \"\") {\n if (totalBytes === 0) {\n return {\n kind: \"empty\",\n length: 0,\n totalBytes: 0,\n status: 200,\n contentRange: null,\n acceptRanges: \"bytes\",\n };\n }\n const end = Math.min(totalBytes - 1, maxPageBytes - 1);\n const partial = end + 1 < totalBytes;\n return resolvedRange(0, end, totalBytes, partial ? 206 : 200);\n }\n\n if (rangeHeader.length > 128 || /[^\\x20-\\x7e]/.test(rangeHeader)) {\n return invalidRange(\"malformed\", maxPageBytes);\n }\n if (rangeHeader.includes(\",\")) {\n return invalidRange(\"multipart_not_supported\", maxPageBytes);\n }\n const match = /^bytes=(\\d*)-(\\d*)$/.exec(rangeHeader);\n if (!match || (!match[1] && !match[2])) {\n return invalidRange(\"malformed\", maxPageBytes);\n }\n\n const first = parseRangeInteger(match[1]);\n const second = parseRangeInteger(match[2]);\n if (first === \"overflow\" || second === \"overflow\") {\n return invalidRange(\"numeric_overflow\", maxPageBytes);\n }\n\n if (first === null) {\n const suffixLength = second;\n if (suffixLength === null) return invalidRange(\"malformed\", maxPageBytes);\n if (suffixLength === 0) return unsatisfiableRange(\"zero_suffix\", totalBytes);\n if (suffixLength > maxPageBytes) return invalidRange(\"range_too_large\", maxPageBytes);\n if (totalBytes === 0) return unsatisfiableRange(\"empty_artifact\", totalBytes);\n const length = Math.min(suffixLength, totalBytes);\n return resolvedRange(totalBytes - length, totalBytes - 1, totalBytes, 206);\n }\n\n if (totalBytes === 0) return unsatisfiableRange(\"empty_artifact\", totalBytes);\n if (first >= totalBytes) return unsatisfiableRange(\"start_out_of_bounds\", totalBytes);\n\n if (second === null) {\n const end = Math.min(totalBytes - 1, first + maxPageBytes - 1);\n return resolvedRange(first, end, totalBytes, 206);\n }\n if (second < first) return unsatisfiableRange(\"end_before_start\", totalBytes);\n if (second - first >= maxPageBytes) {\n return invalidRange(\"range_too_large\", maxPageBytes);\n }\n return resolvedRange(first, Math.min(second, totalBytes - 1), totalBytes, 206);\n}\n\nfunction assertRangeInputs(totalBytes: number, maxPageBytes: number): void {\n if (!Number.isSafeInteger(totalBytes) || totalBytes < 0) {\n throw new RangeError(\"totalBytes must be a nonnegative safe integer\");\n }\n if (\n !Number.isSafeInteger(maxPageBytes) ||\n maxPageBytes <= 0 ||\n maxPageBytes > RETAINED_OUTPUT_MAX_PAGE_BYTES\n ) {\n throw new RangeError(\n `maxPageBytes must be an integer between 1 and ${RETAINED_OUTPUT_MAX_PAGE_BYTES}`,\n );\n }\n}\n\nfunction parseRangeInteger(value: string | undefined): number | null | \"overflow\" {\n if (!value) return null;\n // Avoid both precision loss and work proportional to an adversarial digit run.\n if (value.length > 16) return \"overflow\";\n const parsed = Number(value);\n return Number.isSafeInteger(parsed) ? parsed : \"overflow\";\n}\n\nfunction resolvedRange(\n start: number,\n end: number,\n totalBytes: number,\n status: 200 | 206,\n): RetainedOutputResolvedRange {\n return {\n kind: \"range\",\n start,\n end,\n length: end - start + 1,\n totalBytes,\n status,\n contentRange: status === 206 ? `bytes ${start}-${end}/${totalBytes}` : null,\n acceptRanges: \"bytes\",\n };\n}\n\nfunction invalidRange(\n reason: Extract<RetainedOutputRangeResolution, { kind: \"invalid\" }>[\"reason\"],\n maxPageBytes: number,\n): RetainedOutputRangeResolution {\n return { kind: \"invalid\", reason, maxPageBytes };\n}\n\nfunction unsatisfiableRange(\n reason: Extract<RetainedOutputRangeResolution, { kind: \"unsatisfiable\" }>[\"reason\"],\n totalBytes: number,\n): RetainedOutputRangeResolution {\n return {\n kind: \"unsatisfiable\",\n reason,\n totalBytes,\n contentRange: `bytes */${totalBytes}`,\n };\n}\n"],"mappings":"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","names":["z","z"]}
|