@opengeni/api-router 3.0.1 → 3.1.2
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/access-grant-rls.d.ts +8 -1
- package/dist/admission-trace.d.ts +8 -0
- package/dist/app.d.ts +50 -3
- package/dist/app.js +10 -1
- package/dist/artifact-catalog-cursor.d.ts +1 -0
- package/dist/attached-browser-viewer.d.ts +11 -0
- package/dist/auth/managed-auth-attempt-context.d.ts +2 -0
- package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
- package/dist/auth/managed-auth-session-adapter.d.ts +9 -1
- package/dist/auth/managed-auth.d.ts +72 -5
- package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
- package/dist/auth/new-signups-gate.d.ts +23 -0
- package/dist/auth/signup-funnel-metrics.d.ts +44 -0
- package/dist/azure-live.d.ts +28 -0
- package/dist/browser-action-fences.d.ts +13 -0
- package/dist/browser-controller-authority.d.ts +1 -61
- package/dist/browser-ephemeral.d.ts +5 -0
- package/dist/browser-lost-runtime-end.d.ts +24 -0
- package/dist/browser-state-authority.d.ts +1 -27
- package/dist/chunk-OGQDXVXY.js +18 -0
- package/dist/chunk-OGQDXVXY.js.map +1 -0
- package/dist/{chunk-AJ62T5QN.js → chunk-OT56OY4V.js} +80503 -39869
- package/dist/chunk-OT56OY4V.js.map +1 -0
- package/dist/claude-default-models.d.ts +19 -0
- package/dist/claude-subscription-core.d.ts +50 -0
- package/dist/claude-subscription-oauth.d.ts +36 -0
- package/dist/claude-subscription-profile.d.ts +9 -0
- package/dist/claude-subscription-usage.d.ts +6 -0
- package/dist/claude-workspace-connection.d.ts +15 -0
- package/dist/codemode.d.ts +40 -5
- package/dist/codex-realtime.d.ts +29 -3
- package/dist/codex-session-pointers.d.ts +19 -0
- package/dist/connection-ownership.d.ts +6 -3
- package/dist/controller-data-plane.d.ts +16 -0
- package/dist/credit-promotion-snapshot.d.ts +6 -0
- package/dist/editable-artifact-source-session.d.ts +3 -0
- package/dist/editable-artifact-websocket.d.ts +5 -3
- package/dist/fatal-process-boundary.d.ts +9 -1
- package/dist/github-access.d.ts +7 -1
- package/dist/github-browser-flow.d.ts +1 -1
- package/dist/http/acting-person.d.ts +36 -0
- package/dist/http/api-contract-compat.d.ts +19 -0
- package/dist/http/api-error.d.ts +50 -1
- package/dist/http/auth.d.ts +8 -1
- package/dist/http/cors.d.ts +12 -0
- package/dist/http/deprecation.d.ts +42 -0
- package/dist/http/keyed-admission.d.ts +12 -0
- package/dist/http/local-browser-boundary.d.ts +72 -0
- package/dist/http/metrics-listener.d.ts +22 -0
- package/dist/http/path-identifier.d.ts +17 -0
- package/dist/http/registered-route-label.d.ts +16 -0
- package/dist/http/rejection-telemetry.d.ts +34 -0
- package/dist/http/request-body.d.ts +27 -0
- package/dist/http/request-source.d.ts +41 -3
- package/dist/http/sse.d.ts +12 -1
- package/dist/http/unmatched-route.d.ts +18 -0
- package/dist/http/user-content.d.ts +36 -0
- package/dist/http/variable-sets-removed.d.ts +41 -0
- package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
- package/dist/index.js +1279 -108
- package/dist/index.js.map +1 -1
- package/dist/integration-connect-metrics.d.ts +35 -0
- package/dist/integration-endpoint-test.d.ts +20 -0
- package/dist/integrations/api-integrations.d.ts +2 -2
- package/dist/integrations/atlassian.d.ts +8 -3
- package/dist/integrations/fiken.d.ts +3 -1
- package/dist/integrations/github-lens-connect.d.ts +37 -66
- package/dist/integrations/google-drive.d.ts +2 -0
- package/dist/integrations/integration-commit-authority.d.ts +13 -0
- package/dist/integrations/marketplace-plugin.d.ts +43 -43
- package/dist/integrations/oauth-client.d.ts +171 -12
- package/dist/integrations/oauth-profiles.d.ts +42 -13
- package/dist/integrations/onepassword-vault-provider.d.ts +9 -0
- package/dist/integrations/slack-bot.d.ts +285 -7
- package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
- package/dist/integrations/slack-interactions.d.ts +89 -10
- package/dist/integrations/slack-mrkdwn.d.ts +41 -0
- package/dist/integrations/slack-routing.d.ts +1 -1
- package/dist/integrations/slack-session-defaults.d.ts +58 -0
- package/dist/integrations/slack-task-file-upload.d.ts +36 -0
- package/dist/integrations/slack-tool-review.d.ts +5 -0
- package/dist/interaction-agent-access.d.ts +13 -8
- package/dist/interaction-agent-version.d.ts +21 -0
- package/dist/interaction-holder-heartbeat.d.ts +5 -0
- package/dist/interaction-metrics.d.ts +27 -2
- package/dist/interaction-route-stages.d.ts +25 -0
- package/dist/interaction-secrets-vault.d.ts +20 -0
- package/dist/interaction-secrets.d.ts +103 -0
- package/dist/mcp/action-catalog-types.d.ts +14 -0
- package/dist/mcp/action-catalog.gen.d.ts +2 -0
- package/dist/mcp/action-descriptions.d.ts +4 -0
- package/dist/mcp/action-schema-imports.gen.d.ts +1 -0
- package/dist/mcp/capability-account-readiness.d.ts +7 -0
- package/dist/mcp/child-read-evidence.d.ts +9 -0
- package/dist/mcp/company-profile-agent-admin.d.ts +12 -0
- package/dist/mcp/contract-input.d.ts +13 -0
- package/dist/mcp/documents.d.ts +2 -0
- package/dist/mcp/first-party-tool-permissions.d.ts +3 -606
- package/dist/mcp/notification-tools.d.ts +26 -0
- package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
- package/dist/mcp/scheduled-task-input.d.ts +1309 -0
- package/dist/mcp/scheduled-task-view.d.ts +217 -3
- package/dist/mcp/secret-tools.d.ts +14 -0
- package/dist/mcp/server.d.ts +108 -5
- package/dist/mcp/session-admin-access-tools.d.ts +33 -0
- package/dist/mcp/session-event-errors.d.ts +28 -0
- package/dist/mcp/session-event-view.d.ts +62 -0
- package/dist/mcp/session-view.d.ts +15 -0
- package/dist/mcp/session-wait.d.ts +18 -0
- package/dist/mcp/site-agent-clamp-tools.d.ts +38 -0
- package/dist/mcp/site-data-tools.d.ts +22 -0
- package/dist/mcp/site-publication-tools.d.ts +19 -0
- package/dist/mcp/site-sql-tools.d.ts +27 -0
- package/dist/mcp-oauth.d.ts +37 -4
- package/dist/model-calls/chat-completions.d.ts +87 -0
- package/dist/model-calls/pending-usage-settlements.d.ts +57 -0
- package/dist/model-calls/service.d.ts +36 -0
- package/dist/model-catalog.d.ts +9 -3
- package/dist/native-push-dispatch.d.ts +69 -0
- package/dist/observability.d.ts +3 -1
- package/dist/organization-mcp.d.ts +82 -0
- package/dist/prepared-mcp-actor.d.ts +77 -0
- package/dist/prepared-mcp-permissions.d.ts +8 -0
- package/dist/routes/analytics-consent.d.ts +26 -0
- package/dist/routes/api-integrations.d.ts +11 -0
- package/dist/routes/api-keys.d.ts +7 -7
- package/dist/routes/automations.d.ts +2 -0
- package/dist/routes/billing.d.ts +59 -0
- package/dist/routes/browser-sessions.d.ts +65 -2
- package/dist/routes/chat-completions.d.ts +11 -0
- package/dist/routes/claude-core-usage.d.ts +20 -0
- package/dist/routes/claude-subscription-accounts.d.ts +3 -0
- package/dist/routes/claude-subscription-oauth.d.ts +3 -0
- package/dist/routes/client-errors.d.ts +182 -0
- package/dist/routes/codex-core.d.ts +401 -0
- package/dist/routes/codex.d.ts +64 -2
- package/dist/routes/computer-sessions.d.ts +6 -1
- package/dist/routes/desktop-distribution.d.ts +32 -0
- package/dist/routes/github-browser-fonts.gen.d.ts +2 -0
- package/dist/routes/github-browser-pages.d.ts +27 -0
- package/dist/routes/inbox.d.ts +13 -0
- package/dist/routes/insights-response-cache.d.ts +10 -0
- package/dist/routes/insights-usage.d.ts +12 -0
- package/dist/routes/insights.d.ts +28 -0
- package/dist/routes/interaction-placement-message.d.ts +7 -0
- package/dist/routes/managed-sign-in-methods.d.ts +6 -0
- package/dist/routes/model-account-choice.d.ts +13 -0
- package/dist/routes/model-account-settings.d.ts +19 -0
- package/dist/routes/native-app-auth.d.ts +12 -0
- package/dist/routes/organization-integration-policy.d.ts +8 -0
- package/dist/routes/organization-integrations.d.ts +6 -0
- package/dist/routes/organization-mcp-connections.d.ts +3 -0
- package/dist/routes/organization-model-defaults.d.ts +9 -0
- package/dist/routes/organization-service-accounts.d.ts +3 -0
- package/dist/routes/personal-api-keys.d.ts +3 -0
- package/dist/routes/session-admin-access.d.ts +3 -0
- package/dist/routes/session-artifact-associations.d.ts +4 -0
- package/dist/routes/session-history-imports.d.ts +20 -0
- package/dist/routes/sessions.d.ts +38 -2
- package/dist/routes/site-data.d.ts +18 -0
- package/dist/routes/site-publishing.d.ts +5 -0
- package/dist/routes/site-runtime.d.ts +31 -0
- package/dist/routes/site-sql.d.ts +16 -0
- package/dist/routes/slack-bot-access.d.ts +3 -0
- package/dist/routes/subscription-account-pools.d.ts +21 -0
- package/dist/routes/subscription-core-http.d.ts +5 -0
- package/dist/routes/subscription-pool-access.d.ts +37 -0
- package/dist/routes/subscription-pool-core.d.ts +153 -0
- package/dist/routes/supergrok.d.ts +6 -6
- package/dist/routes/usage-allowances.d.ts +12 -0
- package/dist/routes/variable-sets-removed.d.ts +2 -0
- package/dist/routes/vault-providers.d.ts +34 -0
- package/dist/routes/vaults.d.ts +3 -0
- package/dist/routes/workspace-integrations.d.ts +35 -0
- package/dist/routes/workspace-model-providers.d.ts +4 -0
- package/dist/routes/workspaces.d.ts +11 -2
- package/dist/sandbox/agent-update.d.ts +64 -0
- package/dist/sandbox/auth-callout.d.ts +8 -0
- package/dist/sandbox/channel-a.d.ts +15 -1
- package/dist/sandbox/enrollment.d.ts +26 -4
- package/dist/sandbox/machine-audience.d.ts +29 -0
- package/dist/sandbox/machines.d.ts +15 -2
- package/dist/sandbox/metrics-ingestion.d.ts +6 -2
- package/dist/sandbox/screen-control.d.ts +85 -0
- package/dist/sandbox/viewer.d.ts +5 -1
- package/dist/sandbox-file-artifacts.d.ts +17 -1
- package/dist/scheduled-task-blockers.d.ts +39 -0
- package/dist/scheduled-task-deletion.d.ts +3 -4
- package/dist/scheduled-task-lifecycle.d.ts +14 -0
- package/dist/secret-answers.d.ts +40 -0
- package/dist/session-create-observability.d.ts +5 -0
- package/dist/session-event-view-36GO3IL7.js +528 -0
- package/dist/session-event-view-36GO3IL7.js.map +1 -0
- package/dist/signed-state-secret.d.ts +18 -0
- package/dist/site-agent-guard.d.ts +53 -0
- package/dist/site-data/operations.d.ts +103 -0
- package/dist/site-data/service.d.ts +203 -0
- package/dist/site-frame-guard.d.ts +32 -0
- package/dist/site-publishing/agent-data-tools.d.ts +84 -0
- package/dist/site-publishing/agent-model.d.ts +58 -0
- package/dist/site-publishing/agent-session.d.ts +16 -0
- package/dist/site-publishing/content-scanner.d.ts +31 -0
- package/dist/site-publishing/edge-sync.d.ts +48 -0
- package/dist/site-publishing/gateway-signature.d.ts +56 -0
- package/dist/site-publishing/limits.d.ts +63 -0
- package/dist/site-publishing/page-tool-authority.d.ts +30 -0
- package/dist/site-publishing/platform-usage.d.ts +113 -0
- package/dist/site-publishing/platform.d.ts +21 -0
- package/dist/site-publishing/readiness.d.ts +62 -0
- package/dist/site-publishing/runtime.d.ts +179 -0
- package/dist/site-publishing/service.d.ts +264 -0
- package/dist/site-publishing/session-events.d.ts +22 -0
- package/dist/site-publishing/session-views.d.ts +36 -0
- package/dist/site-publishing/viewer.d.ts +40 -0
- package/dist/site-session-origin.d.ts +31 -6
- package/dist/site-sql/format.d.ts +47 -0
- package/dist/site-sql/gateway.d.ts +50 -0
- package/dist/site-sql/service.d.ts +213 -0
- package/dist/temporal-schedule-sync.d.ts +26 -0
- package/dist/transcription/billing-refusal.d.ts +8 -0
- package/dist/transcription/normalize.d.ts +23 -0
- package/dist/transcription/providers/azure-mai.d.ts +12 -0
- package/dist/transcription/providers/azure-openai.d.ts +4 -0
- package/dist/transcription/providers/openai.d.ts +16 -0
- package/dist/transcription/providers/subscription-core.d.ts +39 -0
- package/dist/transcription/service.d.ts +10 -1
- package/dist/transcription/wav-duration.d.ts +8 -0
- package/dist/workspace-tool-gateway-attestations.d.ts +37 -0
- package/dist/workspace-tool-gateway-observability.d.ts +16 -0
- package/dist/workspace-tool-gateway-secrets.d.ts +27 -0
- package/dist/workspace-tool-gateway.d.ts +102 -6
- package/dist/workspace-tool-target-fence.d.ts +116 -0
- package/dist/workspace-tool-target.d.ts +225 -0
- package/dist/workspace-webhook-dispatch.d.ts +26 -0
- package/dist/xai-subscription-core.d.ts +60 -0
- package/package.json +25 -20
- package/src/access-grant-rls.ts +64 -14
- package/src/admission-trace.ts +14 -0
- package/src/app.ts +1684 -252
- package/src/artifact-catalog-cursor.ts +1 -0
- package/src/attached-browser-viewer.ts +26 -0
- package/src/auth/managed-auth-attempt-context.ts +9 -0
- package/src/auth/managed-auth-rate-limits.ts +252 -0
- package/src/auth/managed-auth-session-adapter.ts +64 -29
- package/src/auth/managed-auth.ts +303 -35
- package/src/auth/managed-email.ts +18 -1
- package/src/auth/managed-sign-in-notifications.ts +81 -0
- package/src/auth/new-signups-gate.ts +49 -0
- package/src/auth/organization-user-setup.ts +3 -3
- package/src/auth/signup-funnel-metrics.ts +164 -0
- package/src/azure-live.ts +103 -0
- package/src/browser-action-fences.ts +45 -0
- package/src/browser-controller-authority.ts +1 -186
- package/src/browser-ephemeral.ts +39 -0
- package/src/browser-lost-runtime-end.ts +71 -0
- package/src/browser-state-authority.ts +1 -236
- package/src/claude-default-models.ts +37 -0
- package/src/claude-subscription-core.ts +154 -0
- package/src/claude-subscription-oauth.ts +352 -0
- package/src/claude-subscription-profile.ts +73 -0
- package/src/claude-subscription-usage.ts +51 -0
- package/src/claude-workspace-connection.ts +82 -0
- package/src/codemode.ts +236 -39
- package/src/codex-realtime.ts +181 -53
- package/src/codex-session-pointers.ts +80 -0
- package/src/company-brain-okf.ts +1 -1
- package/src/connected-machine-computer-access.ts +2 -1
- package/src/connection-ownership.ts +19 -13
- package/src/controller-data-plane.ts +34 -0
- package/src/credit-promotion-snapshot.ts +36 -0
- package/src/editable-artifact-production.ts +10 -0
- package/src/editable-artifact-source-session.ts +123 -0
- package/src/editable-artifact-websocket.ts +16 -3
- package/src/fatal-process-boundary.ts +67 -3
- package/src/gateway-realtime.ts +12 -8
- package/src/github-access.ts +31 -5
- package/src/github-browser-flow.ts +1 -1
- package/src/http/acting-person.ts +105 -0
- package/src/http/api-contract-compat.ts +49 -0
- package/src/http/api-error.ts +210 -2
- package/src/http/auth.ts +68 -4
- package/src/http/cors.ts +37 -5
- package/src/http/deprecation.ts +118 -0
- package/src/http/keyed-admission.ts +29 -0
- package/src/http/local-browser-boundary.ts +343 -0
- package/src/http/metrics-listener.ts +57 -0
- package/src/http/path-identifier.ts +54 -0
- package/src/http/registered-route-label.ts +34 -0
- package/src/http/rejection-telemetry.ts +120 -0
- package/src/http/request-body.ts +127 -0
- package/src/http/request-source.ts +154 -13
- package/src/http/sse.ts +88 -28
- package/src/http/unmatched-route.ts +60 -0
- package/src/http/user-content.ts +158 -0
- package/src/http/variable-sets-removed.ts +122 -0
- package/src/http/websocket-upgrade-dispatch.ts +29 -0
- package/src/index.ts +107 -57
- package/src/integration-connect-metrics.ts +228 -0
- package/src/integration-endpoint-test.ts +291 -0
- package/src/integrations/api-integrations.ts +81 -7
- package/src/integrations/atlassian.ts +202 -83
- package/src/integrations/fiken.ts +66 -38
- package/src/integrations/github-app-connect.ts +64 -18
- package/src/integrations/github-lens-connect.ts +8 -29
- package/src/integrations/google-drive.ts +448 -152
- package/src/integrations/integration-commit-authority.ts +69 -0
- package/src/integrations/marketplace-plugin.ts +1 -1
- package/src/integrations/oauth-client.ts +733 -193
- package/src/integrations/oauth-profiles.ts +116 -45
- package/src/integrations/onepassword-vault-provider.ts +16 -0
- package/src/integrations/personal-github-repositories.ts +1 -1
- package/src/integrations/personal-github.ts +61 -35
- package/src/integrations/provider-oauth.ts +67 -85
- package/src/integrations/slack-app-home.ts +5 -5
- package/src/integrations/slack-bot.ts +893 -201
- package/src/integrations/slack-file-upload-flow.ts +147 -0
- package/src/integrations/slack-install.ts +7 -7
- package/src/integrations/slack-interactions.ts +1589 -299
- package/src/integrations/slack-mrkdwn.ts +193 -0
- package/src/integrations/slack-routing.ts +2 -2
- package/src/integrations/slack-session-defaults.ts +224 -0
- package/src/integrations/slack-task-file-upload.ts +323 -0
- package/src/integrations/slack-tool-review.ts +65 -0
- package/src/integrations/social-oauth.ts +90 -58
- package/src/interaction-agent-access.ts +40 -20
- package/src/interaction-agent-version.ts +85 -0
- package/src/interaction-holder-heartbeat.ts +24 -8
- package/src/interaction-metrics.ts +164 -2
- package/src/interaction-route-stages.ts +94 -0
- package/src/interaction-secrets-vault.ts +213 -0
- package/src/interaction-secrets.ts +426 -0
- package/src/mcp/action-catalog-types.ts +14 -0
- package/src/mcp/action-catalog.gen.ts +8014 -0
- package/src/mcp/action-descriptions.ts +299 -0
- package/src/mcp/action-schema-imports.gen.ts +304 -0
- package/src/mcp/capability-account-readiness.ts +17 -0
- package/src/mcp/child-read-evidence.ts +19 -0
- package/src/mcp/company-profile-agent-admin.ts +13 -0
- package/src/mcp/contract-input.ts +165 -0
- package/src/mcp/documents.ts +9 -2
- package/src/mcp/editable-artifacts.ts +29 -11
- package/src/mcp/files.ts +5 -1
- package/src/mcp/first-party-tool-permissions.ts +7 -285
- package/src/mcp/knowledge-entries.ts +108 -34
- package/src/mcp/notification-tools.ts +480 -0
- package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
- package/src/mcp/scheduled-task-input.ts +89 -0
- package/src/mcp/scheduled-task-view.ts +63 -3
- package/src/mcp/secret-tools.ts +185 -0
- package/src/mcp/server.ts +2213 -1116
- package/src/mcp/session-admin-access-tools.ts +163 -0
- package/src/mcp/session-event-errors.ts +123 -0
- package/src/mcp/session-event-view.ts +395 -13
- package/src/mcp/session-view.ts +3 -0
- package/src/mcp/session-wait.ts +67 -7
- package/src/mcp/site-agent-clamp-tools.ts +140 -0
- package/src/mcp/site-data-tools.ts +339 -0
- package/src/mcp/site-publication-tools.ts +201 -0
- package/src/mcp/site-sql-tools.ts +427 -0
- package/src/mcp-oauth.ts +635 -45
- package/src/model-calls/chat-completions.ts +352 -0
- package/src/model-calls/pending-usage-settlements.ts +125 -0
- package/src/model-calls/service.ts +694 -0
- package/src/model-catalog.ts +68 -17
- package/src/native-push-dispatch.ts +457 -0
- package/src/observability.ts +15 -1
- package/src/organization-mcp.ts +485 -0
- package/src/prepared-mcp-actor.ts +154 -0
- package/src/prepared-mcp-permissions.ts +38 -0
- package/src/routes/analytics-consent.ts +123 -0
- package/src/routes/api-integrations.ts +268 -9
- package/src/routes/api-keys.ts +164 -25
- package/src/routes/artifact-catalog.ts +111 -0
- package/src/routes/automations.ts +163 -90
- package/src/routes/billing.ts +535 -59
- package/src/routes/browser-sessions.ts +966 -342
- package/src/routes/canonical-human-identities.ts +61 -0
- package/src/routes/capabilities.ts +112 -5
- package/src/routes/channels.ts +4 -3
- package/src/routes/chat-completions.ts +235 -0
- package/src/routes/claude-core-usage.ts +147 -0
- package/src/routes/claude-subscription-accounts.ts +233 -0
- package/src/routes/claude-subscription-oauth.ts +175 -0
- package/src/routes/client-errors.ts +394 -0
- package/src/routes/codex-core.ts +687 -0
- package/src/routes/codex.ts +1277 -1119
- package/src/routes/company-brain.ts +4 -0
- package/src/routes/computer-sessions.ts +319 -85
- package/src/routes/connect.ts +277 -175
- package/src/routes/connections.ts +690 -363
- package/src/routes/desktop-distribution.ts +217 -0
- package/src/routes/documents.ts +13 -7
- package/src/routes/editable-artifacts.ts +74 -4
- package/src/routes/enrollments.ts +110 -16
- package/src/routes/external-identity-links.ts +13 -12
- package/src/routes/files.ts +41 -16
- package/src/routes/github-browser-fonts.gen.ts +12 -0
- package/src/routes/github-browser-pages.ts +258 -0
- package/src/routes/github.ts +200 -75
- package/src/routes/inbox.ts +353 -0
- package/src/routes/insights-response-cache.ts +83 -0
- package/src/routes/insights-usage.ts +345 -0
- package/src/routes/insights.ts +103 -8
- package/src/routes/install.ts +51 -10
- package/src/routes/integration-facets.ts +70 -28
- package/src/routes/interaction-placement-message.ts +12 -0
- package/src/routes/knowledge.ts +136 -27
- package/src/routes/machines.ts +189 -135
- package/src/routes/managed-auth-session-sets.ts +43 -10
- package/src/routes/managed-onboarding.ts +39 -19
- package/src/routes/managed-sign-in-methods.ts +433 -0
- package/src/routes/memory-slack-publications.ts +3 -2
- package/src/routes/model-account-choice.ts +194 -0
- package/src/routes/model-account-settings.ts +235 -0
- package/src/routes/model-connection-access.ts +210 -48
- package/src/routes/native-app-auth.ts +296 -0
- package/src/routes/organization-integration-policy.ts +116 -0
- package/src/routes/organization-integrations.ts +326 -0
- package/src/routes/organization-mcp-connections.ts +183 -0
- package/src/routes/organization-memberships.ts +205 -19
- package/src/routes/organization-model-defaults.ts +110 -0
- package/src/routes/organization-model-providers.ts +74 -3
- package/src/routes/organization-service-accounts.ts +128 -0
- package/src/routes/organization-sessions.ts +21 -5
- package/src/routes/personal-api-keys.ts +184 -0
- package/src/routes/personal-github-git-broker.ts +2 -2
- package/src/routes/personal-github.ts +9 -4
- package/src/routes/plugins.ts +46 -7
- package/src/routes/pr-review-github.ts +105 -118
- package/src/routes/pr-review.ts +88 -82
- package/src/routes/preference-registry.ts +18 -0
- package/src/routes/rigs.ts +48 -13
- package/src/routes/scheduled-tasks.ts +347 -27
- package/src/routes/session-admin-access.ts +271 -0
- package/src/routes/session-artifact-associations.ts +164 -0
- package/src/routes/session-history-imports.ts +305 -0
- package/src/routes/sessions.ts +1682 -363
- package/src/routes/site-data.ts +340 -0
- package/src/routes/site-publishing.ts +584 -0
- package/src/routes/site-runtime.ts +1944 -0
- package/src/routes/site-sql.ts +263 -0
- package/src/routes/skill-content.ts +72 -7
- package/src/routes/skills.ts +5 -4
- package/src/routes/slack-bot-access.ts +108 -0
- package/src/routes/social.ts +27 -15
- package/src/routes/subscription-account-pools.ts +209 -0
- package/src/routes/subscription-core-http.ts +18 -0
- package/src/routes/subscription-pool-access.ts +180 -0
- package/src/routes/subscription-pool-core.ts +552 -0
- package/src/routes/supergrok.ts +174 -655
- package/src/routes/transcription-recordings.ts +71 -4
- package/src/routes/transcriptions.ts +26 -2
- package/src/routes/usage-allowances.ts +381 -0
- package/src/routes/variable-sets-removed.ts +19 -0
- package/src/routes/vault-providers.ts +782 -0
- package/src/routes/vaults.ts +421 -0
- package/src/routes/video-generation.ts +30 -12
- package/src/routes/workspace-artifacts.ts +165 -53
- package/src/routes/workspace-integrations.ts +576 -0
- package/src/routes/workspace-model-providers.ts +148 -0
- package/src/routes/workspace-state.ts +4 -0
- package/src/routes/workspaces.ts +625 -117
- package/src/sandbox/agent-update.ts +315 -0
- package/src/sandbox/auth-callout.ts +104 -21
- package/src/sandbox/channel-a.ts +165 -55
- package/src/sandbox/enrollment.ts +131 -22
- package/src/sandbox/machine-audience.ts +192 -0
- package/src/sandbox/machines.ts +75 -31
- package/src/sandbox/metrics-ingestion.ts +133 -2
- package/src/sandbox/rematerialize.ts +51 -21
- package/src/sandbox/screen-control.ts +289 -0
- package/src/sandbox/viewer.ts +33 -58
- package/src/sandbox-file-artifacts.ts +53 -27
- package/src/scheduled-task-blockers.ts +293 -0
- package/src/scheduled-task-deletion.ts +13 -3
- package/src/scheduled-task-lifecycle.ts +84 -0
- package/src/secret-answers.ts +119 -0
- package/src/session-create-observability.ts +46 -0
- package/src/session-realtime-context.ts +26 -4
- package/src/signed-state-secret.ts +58 -0
- package/src/site-agent-guard.ts +261 -0
- package/src/site-data/operations.ts +777 -0
- package/src/site-data/service.ts +1043 -0
- package/src/site-frame-guard.ts +107 -0
- package/src/site-publishing/agent-data-tools.ts +250 -0
- package/src/site-publishing/agent-model.ts +127 -0
- package/src/site-publishing/agent-session.ts +148 -0
- package/src/site-publishing/content-scanner.ts +93 -0
- package/src/site-publishing/edge-sync.ts +148 -0
- package/src/site-publishing/gateway-signature.ts +198 -0
- package/src/site-publishing/limits.ts +315 -0
- package/src/site-publishing/page-tool-authority.ts +111 -0
- package/src/site-publishing/platform-usage.ts +479 -0
- package/src/site-publishing/platform.ts +98 -0
- package/src/site-publishing/readiness.ts +330 -0
- package/src/site-publishing/runtime.ts +831 -0
- package/src/site-publishing/service.ts +1282 -0
- package/src/site-publishing/session-events.ts +262 -0
- package/src/site-publishing/session-views.ts +262 -0
- package/src/site-publishing/viewer.ts +75 -0
- package/src/site-session-origin.ts +91 -6
- package/src/site-sql/format.ts +134 -0
- package/src/site-sql/gateway.ts +168 -0
- package/src/site-sql/service.ts +1636 -0
- package/src/site-uploads.ts +27 -5
- package/src/temporal-schedule-sync.ts +74 -0
- package/src/transcription/billing-refusal.ts +14 -0
- package/src/transcription/normalize.ts +77 -0
- package/src/transcription/providers/azure-mai.ts +98 -0
- package/src/transcription/providers/azure-openai.ts +16 -7
- package/src/transcription/providers/codex-subscription.ts +190 -67
- package/src/transcription/providers/openai.ts +79 -5
- package/src/transcription/providers/subscription-core.ts +125 -0
- package/src/transcription/providers/xai-subscription.ts +81 -83
- package/src/transcription/segmenter.ts +7 -1
- package/src/transcription/service.ts +239 -10
- package/src/transcription/wav-duration.ts +39 -0
- package/src/workspace-deletion.ts +25 -1
- package/src/workspace-tool-gateway-attestations.ts +133 -0
- package/src/workspace-tool-gateway-observability.ts +64 -0
- package/src/workspace-tool-gateway-secrets.ts +104 -0
- package/src/workspace-tool-gateway.ts +921 -103
- package/src/workspace-tool-target-fence.ts +380 -0
- package/src/workspace-tool-target.ts +554 -0
- package/src/workspace-webhook-dispatch.ts +225 -0
- package/src/xai-realtime.ts +85 -81
- package/src/xai-subscription-core.ts +172 -0
- package/dist/browser-auth-broker.d.ts +0 -20
- package/dist/chunk-AJ62T5QN.js.map +0 -1
- package/dist/connection-authority-owner.d.ts +0 -59
- package/dist/routes/connection-authorities.d.ts +0 -3
- package/dist/routes/environments.d.ts +0 -5
- package/dist/routes/host-mcp-bindings.d.ts +0 -5
- package/dist/routes/host-mcp-resolvers.d.ts +0 -3
- package/dist/routes/packs.d.ts +0 -3
- package/dist/session-event-view-MU3HMNV3.js +0 -264
- package/dist/session-event-view-MU3HMNV3.js.map +0 -1
- package/dist/xai-subscription-auth.d.ts +0 -23
- package/src/browser-auth-broker.ts +0 -155
- package/src/connection-authority-owner.ts +0 -61
- package/src/routes/connection-authorities.ts +0 -139
- package/src/routes/environments.ts +0 -388
- package/src/routes/host-mcp-bindings.ts +0 -122
- package/src/routes/host-mcp-resolvers.ts +0 -41
- package/src/routes/packs.ts +0 -784
- package/src/xai-subscription-auth.ts +0 -139
package/src/sandbox/channel-a.ts
CHANGED
|
@@ -22,19 +22,17 @@ import {
|
|
|
22
22
|
hasGitCredentialRepositorySelection,
|
|
23
23
|
hasGitHubRepositorySelection,
|
|
24
24
|
sandboxLifecycleTransitionWaitMs,
|
|
25
|
+
sandboxWarmRateMicrosPerSecond,
|
|
25
26
|
stableSandboxEnvironmentForRun,
|
|
26
27
|
type Settings,
|
|
27
28
|
} from "@opengeni/config";
|
|
28
29
|
import { githubAppBotIdentity } from "@opengeni/github";
|
|
29
|
-
import type { Session } from "@opengeni/contracts";
|
|
30
|
+
import type { AccessGrant, Session } from "@opengeni/contracts";
|
|
30
31
|
import {
|
|
31
32
|
acquireLease,
|
|
32
33
|
getSandboxSessionEnvelope,
|
|
33
|
-
getLiveEnrollmentConnection,
|
|
34
34
|
getSandbox,
|
|
35
|
-
getScheduledScopedRigVersionMetadata,
|
|
36
35
|
touchLeaseHolder,
|
|
37
|
-
loadWorkspaceEnvironmentForRun,
|
|
38
36
|
markWarmLeaseInstanceLost,
|
|
39
37
|
readActiveSandbox,
|
|
40
38
|
readLease,
|
|
@@ -42,15 +40,18 @@ import {
|
|
|
42
40
|
SandboxImageConflictError,
|
|
43
41
|
SandboxProviderReadLockUnavailableError,
|
|
44
42
|
SandboxRigConflictError,
|
|
43
|
+
SandboxPaidComputeAdmissionError,
|
|
45
44
|
withSandboxProviderReadLock,
|
|
46
45
|
type Database,
|
|
47
46
|
type LeaseSnapshot,
|
|
48
47
|
} from "@opengeni/db";
|
|
49
48
|
import { appendAndPublishEvents, type EventBus } from "@opengeni/events";
|
|
50
49
|
import {
|
|
50
|
+
errorCauseAttributes,
|
|
51
51
|
recordTenancyCompatibilityLaneUse,
|
|
52
52
|
sandboxLeaseTelemetryKey,
|
|
53
53
|
sandboxOperationMetricObserver,
|
|
54
|
+
sandboxCaptureWaitMetricObserver,
|
|
54
55
|
type Observability,
|
|
55
56
|
} from "@opengeni/observability";
|
|
56
57
|
import { HTTPException } from "hono/http-exception";
|
|
@@ -67,6 +68,7 @@ import {
|
|
|
67
68
|
SandboxResumeIdentityMismatchError,
|
|
68
69
|
SandboxResumeIdentityUnavailableError,
|
|
69
70
|
RoutingActiveRouteChangedError,
|
|
71
|
+
RoutingMutationOutputRejectedError,
|
|
70
72
|
RoutingWorkspaceRootChangedError,
|
|
71
73
|
SelfhostedWorkspaceRootChangedError,
|
|
72
74
|
ChannelAConflictError,
|
|
@@ -74,6 +76,7 @@ import {
|
|
|
74
76
|
ChannelANotFoundError,
|
|
75
77
|
ChannelAUnsupportedError,
|
|
76
78
|
ChannelAUnavailableError,
|
|
79
|
+
SynchronousCommandOutcomeUnknownError,
|
|
77
80
|
ChannelAValidationError,
|
|
78
81
|
BrowserControlRequestError,
|
|
79
82
|
BrowserControlTransportError,
|
|
@@ -89,12 +92,16 @@ import {
|
|
|
89
92
|
type RoutingSandboxSession,
|
|
90
93
|
} from "@opengeni/runtime/sandbox";
|
|
91
94
|
import {
|
|
95
|
+
grantHasAgentAttemptAuthority,
|
|
92
96
|
managedSessionGroupBackend,
|
|
93
97
|
managedSessionGroupOs,
|
|
94
98
|
providerSettingsForSessionSandboxRuntime,
|
|
95
99
|
relayConfigFromSettings,
|
|
100
|
+
requireLiveAgentAttemptAuthorization,
|
|
101
|
+
resolveChannelAMachineConnection,
|
|
96
102
|
resolveSessionSandboxRuntime,
|
|
97
103
|
wrapChannelABoxWithRouting,
|
|
104
|
+
type ChannelAMachineAuthority,
|
|
98
105
|
} from "@opengeni/core";
|
|
99
106
|
import { establishApiSandboxSpawner } from "./rematerialize";
|
|
100
107
|
|
|
@@ -147,6 +154,9 @@ export type ChannelAContext = {
|
|
|
147
154
|
session: Session;
|
|
148
155
|
// The principal that drives the op (for emit attribution + pty opened_by).
|
|
149
156
|
subjectId: string;
|
|
157
|
+
/** The authenticated route grant, when one drives the op. It resolves the
|
|
158
|
+
* session's Sandbox Environment for an agent attempt as its initiating human. */
|
|
159
|
+
grant?: AccessGrant | undefined;
|
|
150
160
|
/** Cancel lifecycle waiting when the originating HTTP request disconnects. */
|
|
151
161
|
waitSignal?: AbortSignal | undefined;
|
|
152
162
|
/** Bounded route identity for metrics and safe operator diagnostics. */
|
|
@@ -156,6 +166,10 @@ export type ChannelAContext = {
|
|
|
156
166
|
* provider handle and replay the request. Tab/lifecycle mutations that lack
|
|
157
167
|
* a controller operation id must never opt into this recovery. */
|
|
158
168
|
retryControllerTransport?: boolean | undefined;
|
|
169
|
+
/** Ephemeral browser callbacks must never replay after an ambiguous result. */
|
|
170
|
+
allowOperationReplay?: boolean | undefined;
|
|
171
|
+
/** Exact existing interaction provider; may not spawn/rotate on image drift. */
|
|
172
|
+
retainedInstanceId?: string | undefined;
|
|
159
173
|
};
|
|
160
174
|
|
|
161
175
|
export type ChannelAOperationFailureReason =
|
|
@@ -189,6 +203,10 @@ export type ChannelAHandle = {
|
|
|
189
203
|
* active-sandbox pointer and is safe for placement-bound controllers. */
|
|
190
204
|
homeSession: ChannelASession;
|
|
191
205
|
routingSession: RoutingSandboxSession;
|
|
206
|
+
/** Whose access this request uses to reach a Connected Machine: the person
|
|
207
|
+
* who started an agent's turn, or the calling person. Routes that look up
|
|
208
|
+
* the routed machine again must use it rather than the raw caller grant. */
|
|
209
|
+
machineAuthority: () => Promise<ChannelAMachineAuthority>;
|
|
192
210
|
requestId: string;
|
|
193
211
|
};
|
|
194
212
|
|
|
@@ -403,6 +421,8 @@ type ChannelAReadRecoveryOptions = {
|
|
|
403
421
|
/** Modal may expose one more stale command-router route after the first
|
|
404
422
|
* successful handle rebuild. Keep this closed and statically bounded. */
|
|
405
423
|
maxFreshHandleRetries?: 1 | 2;
|
|
424
|
+
/** Explicit opt-out overrides every transport/provider retry classification. */
|
|
425
|
+
allowOperationReplay?: boolean | undefined;
|
|
406
426
|
/** Never start another provider attempt after the originating request ends. */
|
|
407
427
|
waitSignal?: AbortSignal | undefined;
|
|
408
428
|
/** Additional callback-specific failure that is safe to replay. */
|
|
@@ -429,7 +449,11 @@ export async function runChannelAReadWithFreshHandleRetry<T>(
|
|
|
429
449
|
} catch (error) {
|
|
430
450
|
const retryable =
|
|
431
451
|
error instanceof ChannelAUnavailableError || options.retryableError?.(error) === true;
|
|
432
|
-
if (
|
|
452
|
+
if (
|
|
453
|
+
options.allowOperationReplay === false ||
|
|
454
|
+
!retryable ||
|
|
455
|
+
retries >= maxFreshHandleRetries
|
|
456
|
+
) {
|
|
433
457
|
throw error;
|
|
434
458
|
}
|
|
435
459
|
options.waitSignal?.throwIfAborted();
|
|
@@ -521,6 +545,36 @@ export async function withChannelARead<T>(
|
|
|
521
545
|
return await withChannelAOperation(services, ctx, true, fn);
|
|
522
546
|
}
|
|
523
547
|
|
|
548
|
+
/**
|
|
549
|
+
* Whose access this request uses to reach a Connected Machine. A person uses
|
|
550
|
+
* their own. An agent acts for the person who started its turn (as swap and
|
|
551
|
+
* run_on do), so the machines that person can use stay usable from browser,
|
|
552
|
+
* computer, file and terminal requests; a personal machine also needs the
|
|
553
|
+
* attempt's own per-chat permission, checked by the connection resolver.
|
|
554
|
+
*/
|
|
555
|
+
async function channelAMachineAuthority(
|
|
556
|
+
db: Database,
|
|
557
|
+
ctx: ChannelAContext,
|
|
558
|
+
): Promise<ChannelAMachineAuthority> {
|
|
559
|
+
const grant = ctx.grant;
|
|
560
|
+
const callerSessionId = grant?.metadata?.["sessionId"];
|
|
561
|
+
if (!grant || !grantHasAgentAttemptAuthority(grant) || typeof callerSessionId !== "string") {
|
|
562
|
+
return { subjectId: ctx.subjectId, personalMachineAttempt: null };
|
|
563
|
+
}
|
|
564
|
+
const actor = await requireLiveAgentAttemptAuthorization(db, grant, callerSessionId);
|
|
565
|
+
if (!actor.initiatingHumanSubjectId) {
|
|
566
|
+
return { subjectId: ctx.subjectId, personalMachineAttempt: null };
|
|
567
|
+
}
|
|
568
|
+
return {
|
|
569
|
+
subjectId: actor.initiatingHumanSubjectId,
|
|
570
|
+
personalMachineAttempt: {
|
|
571
|
+
turnId: actor.turnId,
|
|
572
|
+
attemptId: actor.attemptId,
|
|
573
|
+
executionGeneration: actor.executionGeneration,
|
|
574
|
+
},
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
|
|
524
578
|
async function withChannelAOperation<T>(
|
|
525
579
|
services: ChannelAServices,
|
|
526
580
|
ctx: ChannelAContext,
|
|
@@ -531,62 +585,39 @@ async function withChannelAOperation<T>(
|
|
|
531
585
|
const onSandboxOperation = services.observability
|
|
532
586
|
? sandboxOperationMetricObserver(services.observability)
|
|
533
587
|
: undefined;
|
|
588
|
+
const onSandboxCaptureWait = services.observability
|
|
589
|
+
? sandboxCaptureWaitMetricObserver(services.observability)
|
|
590
|
+
: undefined;
|
|
534
591
|
const { accountId, workspaceId, session } = ctx;
|
|
535
592
|
|
|
536
|
-
if (session.sandboxBackend === "none") {
|
|
537
|
-
throw new HTTPException(409, { message: "sandbox not available" });
|
|
538
|
-
}
|
|
539
|
-
|
|
540
593
|
const sandboxGroupId = session.sandboxGroupId;
|
|
541
594
|
const requestId = crypto.randomUUID();
|
|
542
595
|
const holderId = `direct:${requestId}`;
|
|
543
596
|
const operationStartedAt = performance.now();
|
|
544
597
|
const operation = ctx.operation ?? (readOnly ? "read" : "mutation");
|
|
545
598
|
const leaseTtlMs = settings.sandboxLeaseTtlMs;
|
|
599
|
+
let machineAuthorityResult: Promise<ChannelAMachineAuthority> | undefined;
|
|
600
|
+
const machineAuthority = (): Promise<ChannelAMachineAuthority> =>
|
|
601
|
+
(machineAuthorityResult ??= channelAMachineAuthority(db, ctx));
|
|
546
602
|
|
|
547
603
|
// The STABLE run-environment used by both a cloud home and a machine home.
|
|
548
|
-
// It also carries the per-session Codemode pointer selected below.
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
},
|
|
559
|
-
session.rigId,
|
|
560
|
-
session.rigVersionId,
|
|
561
|
-
)
|
|
562
|
-
: null;
|
|
563
|
-
for (const variableSetId of rigVersion?.version.defaultVariableSetIds ?? []) {
|
|
564
|
-
const workspaceEnvironment = await loadWorkspaceEnvironmentForRun(db, settings, {
|
|
565
|
-
accountId,
|
|
566
|
-
workspaceId,
|
|
567
|
-
variableSetId,
|
|
568
|
-
authority: { kind: "session_attach", sessionId: session.id, subjectId: ctx.subjectId },
|
|
569
|
-
});
|
|
570
|
-
Object.assign(workspaceEnvironmentValues, workspaceEnvironment?.values ?? {});
|
|
571
|
-
}
|
|
572
|
-
for (const variableSetId of session.variableSetIds) {
|
|
573
|
-
const workspaceEnvironment = await loadWorkspaceEnvironmentForRun(db, settings, {
|
|
574
|
-
accountId,
|
|
575
|
-
workspaceId,
|
|
576
|
-
variableSetId,
|
|
577
|
-
authority: { kind: "session_attach", sessionId: session.id, subjectId: ctx.subjectId },
|
|
578
|
-
});
|
|
579
|
-
Object.assign(workspaceEnvironmentValues, workspaceEnvironment?.values ?? {});
|
|
604
|
+
// It also carries the per-session Codemode pointer selected below. Constants
|
|
605
|
+
// only: user secrets are resolved per command (W1), never seeded here.
|
|
606
|
+
// `none` describes only the durable home. A session without a home sandbox
|
|
607
|
+
// that attached a Connected Machine runs its turns there (the worker gives
|
|
608
|
+
// such a turn the effective selfhosted backend), so its direct operations,
|
|
609
|
+
// such as opening a computer or browser on that machine, follow the same
|
|
610
|
+
// active pointer.
|
|
611
|
+
const machineOnlyHome = session.sandboxBackend === "none";
|
|
612
|
+
if (machineOnlyHome && !(await readActiveSandbox(db, workspaceId, session.id))?.activeSandboxId) {
|
|
613
|
+
throw new HTTPException(409, { message: "sandbox not available" });
|
|
580
614
|
}
|
|
615
|
+
const effectiveBackend = machineOnlyHome ? "selfhosted" : session.sandboxBackend;
|
|
581
616
|
const settingsForSession =
|
|
582
|
-
|
|
583
|
-
? { ...settings, sandboxBackend:
|
|
617
|
+
effectiveBackend !== settings.sandboxBackend
|
|
618
|
+
? { ...settings, sandboxBackend: effectiveBackend }
|
|
584
619
|
: settings;
|
|
585
|
-
const environment = stableSandboxEnvironmentForRun(
|
|
586
|
-
settingsForSession,
|
|
587
|
-
workspaceEnvironmentValues,
|
|
588
|
-
{ workspaceId },
|
|
589
|
-
);
|
|
620
|
+
const environment = stableSandboxEnvironmentForRun(settingsForSession, { workspaceId });
|
|
590
621
|
if (hasGitCredentialRepositorySelection(session.resources)) {
|
|
591
622
|
applyGitAuthPointerEnvironment(
|
|
592
623
|
environment,
|
|
@@ -635,6 +666,7 @@ async function withChannelAOperation<T>(
|
|
|
635
666
|
lease,
|
|
636
667
|
homeSession,
|
|
637
668
|
routingSession,
|
|
669
|
+
machineAuthority,
|
|
638
670
|
requestId,
|
|
639
671
|
});
|
|
640
672
|
// The direct request has accepted the result in memory. Finalize every
|
|
@@ -647,12 +679,15 @@ async function withChannelAOperation<T>(
|
|
|
647
679
|
// A machine-targeted top-level session has an honest selfhosted HOME label.
|
|
648
680
|
// It has no cloud provider box and therefore must not acquire or establish a
|
|
649
681
|
// phantom home lease before following its active machine pointer.
|
|
650
|
-
if (
|
|
682
|
+
if (effectiveBackend === "selfhosted") {
|
|
651
683
|
let established: EstablishedSandboxSession | undefined;
|
|
652
684
|
try {
|
|
653
685
|
ctx.waitSignal?.throwIfAborted();
|
|
654
686
|
const pointer = await readActiveSandbox(db, workspaceId, session.id);
|
|
655
687
|
if (!pointer?.activeSandboxId) {
|
|
688
|
+
if (machineOnlyHome) {
|
|
689
|
+
throw new HTTPException(409, { message: "sandbox not available" });
|
|
690
|
+
}
|
|
656
691
|
// A machine-home session with no selected machine uses the deployment's
|
|
657
692
|
// managed group box, exactly like the worker turn path. Keep the durable
|
|
658
693
|
// home label honest; only this request's effective backend changes.
|
|
@@ -679,9 +714,10 @@ async function withChannelAOperation<T>(
|
|
|
679
714
|
message: "machine-home session has no active Connected Machine or managed sandbox",
|
|
680
715
|
});
|
|
681
716
|
}
|
|
717
|
+
const requestMachineAuthority = await machineAuthority();
|
|
682
718
|
const sandbox = await getSandbox(
|
|
683
719
|
db,
|
|
684
|
-
{ accountId: ctx.accountId, workspaceId, subjectId:
|
|
720
|
+
{ accountId: ctx.accountId, workspaceId, subjectId: requestMachineAuthority.subjectId },
|
|
685
721
|
pointer.activeSandboxId,
|
|
686
722
|
);
|
|
687
723
|
if (sandbox?.kind !== "selfhosted" || !sandbox.enrollmentId) {
|
|
@@ -690,10 +726,16 @@ async function withChannelAOperation<T>(
|
|
|
690
726
|
});
|
|
691
727
|
}
|
|
692
728
|
const originWorkspaceId = sandbox.workspaceId;
|
|
693
|
-
const enrollment = await
|
|
729
|
+
const enrollment = await resolveChannelAMachineConnection(
|
|
694
730
|
db,
|
|
695
|
-
{
|
|
696
|
-
|
|
731
|
+
{
|
|
732
|
+
accountId,
|
|
733
|
+
workspaceId,
|
|
734
|
+
sessionId: session.id,
|
|
735
|
+
machineWorkspaceId: originWorkspaceId,
|
|
736
|
+
enrollmentId: sandbox.enrollmentId,
|
|
737
|
+
},
|
|
738
|
+
requestMachineAuthority,
|
|
697
739
|
);
|
|
698
740
|
if (!enrollment?.connectionInstanceId) {
|
|
699
741
|
// Preserve causal machine liveness through Channel-A. Generic callers
|
|
@@ -753,6 +795,7 @@ async function withChannelAOperation<T>(
|
|
|
753
795
|
settings,
|
|
754
796
|
bus,
|
|
755
797
|
...(onSandboxOperation ? { onSandboxOperation } : {}),
|
|
798
|
+
...(onSandboxCaptureWait ? { onSandboxCaptureWait } : {}),
|
|
756
799
|
...(ctx.waitSignal ? { waitSignal: ctx.waitSignal } : {}),
|
|
757
800
|
},
|
|
758
801
|
{
|
|
@@ -760,6 +803,7 @@ async function withChannelAOperation<T>(
|
|
|
760
803
|
workspaceId,
|
|
761
804
|
sessionId: session.id,
|
|
762
805
|
resourceSubjectId: ctx.subjectId,
|
|
806
|
+
machineAuthority,
|
|
763
807
|
pinnedSelfhosted: {
|
|
764
808
|
sandboxId: sandbox.id,
|
|
765
809
|
epoch: pointer.activeEpoch,
|
|
@@ -787,9 +831,14 @@ async function withChannelAOperation<T>(
|
|
|
787
831
|
|
|
788
832
|
// One session has one logical runtime across turns and every API-direct
|
|
789
833
|
// surface. Without this, Terminal/Files/Browser/Computer/viewers could rearm
|
|
790
|
-
|
|
834
|
+
|
|
791
835
|
// deployment image for the same durable sandbox group.
|
|
792
|
-
const sandboxRuntime = await resolveSessionSandboxRuntime(
|
|
836
|
+
const sandboxRuntime = await resolveSessionSandboxRuntime(
|
|
837
|
+
db,
|
|
838
|
+
settings,
|
|
839
|
+
session,
|
|
840
|
+
ctx.grant ? { grant: ctx.grant } : { subjectId: ctx.subjectId },
|
|
841
|
+
);
|
|
793
842
|
|
|
794
843
|
const release = async (): Promise<void> => {
|
|
795
844
|
await releaseLeaseHolder(db, {
|
|
@@ -818,8 +867,14 @@ async function withChannelAOperation<T>(
|
|
|
818
867
|
holderId,
|
|
819
868
|
subjectId: session.id,
|
|
820
869
|
backend: session.sandboxBackend,
|
|
870
|
+
warmBilling: {
|
|
871
|
+
mode: settings.sandboxWarmBillingMode,
|
|
872
|
+
rateMicrosPerSecond: sandboxWarmRateMicrosPerSecond(settings, session.sandboxBackend),
|
|
873
|
+
},
|
|
821
874
|
os: session.sandboxOs,
|
|
822
875
|
image: sandboxRuntime.image,
|
|
876
|
+
imagePolicy: "new_creates_only",
|
|
877
|
+
...(ctx.retainedInstanceId ? { retainedInstanceId: ctx.retainedInstanceId } : {}),
|
|
823
878
|
rigVersionId: session.rigVersionId,
|
|
824
879
|
leaseTtlMs,
|
|
825
880
|
warmingLeaseTtlMs: settings.sandboxWarmingTimeoutMs,
|
|
@@ -1060,6 +1115,7 @@ async function withChannelAOperation<T>(
|
|
|
1060
1115
|
settings,
|
|
1061
1116
|
bus,
|
|
1062
1117
|
...(onSandboxOperation ? { onSandboxOperation } : {}),
|
|
1118
|
+
...(onSandboxCaptureWait ? { onSandboxCaptureWait } : {}),
|
|
1063
1119
|
...(ctx.waitSignal ? { waitSignal: ctx.waitSignal } : {}),
|
|
1064
1120
|
},
|
|
1065
1121
|
{
|
|
@@ -1067,6 +1123,7 @@ async function withChannelAOperation<T>(
|
|
|
1067
1123
|
workspaceId,
|
|
1068
1124
|
sessionId: session.id,
|
|
1069
1125
|
resourceSubjectId: ctx.subjectId,
|
|
1126
|
+
machineAuthority,
|
|
1070
1127
|
homeLease: {
|
|
1071
1128
|
sandboxGroupId,
|
|
1072
1129
|
leaseEpoch: leaseSnapshot.leaseEpoch,
|
|
@@ -1168,6 +1225,7 @@ async function withChannelAOperation<T>(
|
|
|
1168
1225
|
},
|
|
1169
1226
|
{
|
|
1170
1227
|
maxFreshHandleRetries: session.sandboxBackend === "modal" ? 2 : 1,
|
|
1228
|
+
allowOperationReplay: ctx.allowOperationReplay,
|
|
1171
1229
|
...(ctx.waitSignal ? { waitSignal: ctx.waitSignal } : {}),
|
|
1172
1230
|
...(ctx.retryControllerTransport
|
|
1173
1231
|
? { retryableError: isRetryableControllerTransport }
|
|
@@ -1204,6 +1262,8 @@ async function withChannelAOperation<T>(
|
|
|
1204
1262
|
* already-HTTPException unchanged. */
|
|
1205
1263
|
export function mapChannelAError(error: unknown, waitSignal?: AbortSignal): unknown {
|
|
1206
1264
|
if (error instanceof HTTPException) return error;
|
|
1265
|
+
if (error instanceof SandboxPaidComputeAdmissionError)
|
|
1266
|
+
return new HTTPException(402, { message: error.message, cause: error });
|
|
1207
1267
|
if (isChannelARequestCancellation(error, waitSignal))
|
|
1208
1268
|
return new HTTPException(499 as never, {
|
|
1209
1269
|
message: "request cancelled",
|
|
@@ -1214,6 +1274,20 @@ export function mapChannelAError(error: unknown, waitSignal?: AbortSignal): unkn
|
|
|
1214
1274
|
error instanceof SandboxResumeIdentityUnavailableError
|
|
1215
1275
|
)
|
|
1216
1276
|
return new HTTPException(409, { message: error.message });
|
|
1277
|
+
if (error instanceof RoutingMutationOutputRejectedError) {
|
|
1278
|
+
const revoked = error.reasonCode === "authority_revoked";
|
|
1279
|
+
return new ApiHttpError(revoked ? 403 : 409, {
|
|
1280
|
+
code: revoked ? "forbidden" : "conflict",
|
|
1281
|
+
message: error.message,
|
|
1282
|
+
retryable: false,
|
|
1283
|
+
outcomeUnknown: false,
|
|
1284
|
+
details: {
|
|
1285
|
+
code: error.code,
|
|
1286
|
+
reasonCode: error.reasonCode,
|
|
1287
|
+
physicalOutcome: "resolved",
|
|
1288
|
+
},
|
|
1289
|
+
});
|
|
1290
|
+
}
|
|
1217
1291
|
if (
|
|
1218
1292
|
error instanceof RoutingActiveRouteChangedError ||
|
|
1219
1293
|
error instanceof RoutingWorkspaceRootChangedError ||
|
|
@@ -1235,8 +1309,27 @@ export function mapChannelAError(error: unknown, waitSignal?: AbortSignal): unkn
|
|
|
1235
1309
|
});
|
|
1236
1310
|
if (error instanceof SelfhostedControlError && error.agentOffline)
|
|
1237
1311
|
return new HTTPException(409, { message: error.message, cause: error });
|
|
1312
|
+
if (error instanceof SelfhostedControlError && error.payloadTooLarge) {
|
|
1313
|
+
const outbound = error.detail.direction === "request";
|
|
1314
|
+
// Project only the bounded direction. Native free-form diagnostics can
|
|
1315
|
+
// contain file contents or private paths. A large reply is not evidence
|
|
1316
|
+
// that the operation failed before execution, and must not invite replay.
|
|
1317
|
+
return new ApiHttpError(outbound ? 413 : 502, {
|
|
1318
|
+
code: "limit_exceeded",
|
|
1319
|
+
message: outbound
|
|
1320
|
+
? "The request exceeds the connected machine's per-message size limit. Large file content requires a machine that supports bounded file transfers."
|
|
1321
|
+
: "The connected machine's reply exceeds its per-message size limit. The operation may have completed; inspect its result before repeating it. Read large files in bounded ranges.",
|
|
1322
|
+
retryable: false,
|
|
1323
|
+
details: {
|
|
1324
|
+
code: "machine_transport_payload_too_large",
|
|
1325
|
+
direction: outbound ? "request" : "response",
|
|
1326
|
+
},
|
|
1327
|
+
});
|
|
1328
|
+
}
|
|
1238
1329
|
if (error instanceof ChannelAUnavailableError)
|
|
1239
1330
|
return new HTTPException(503, { message: error.message });
|
|
1331
|
+
if (error instanceof SynchronousCommandOutcomeUnknownError)
|
|
1332
|
+
return new HTTPException(409, { message: error.message });
|
|
1240
1333
|
if (error instanceof ChannelAValidationError)
|
|
1241
1334
|
return new HTTPException(400, { message: error.message });
|
|
1242
1335
|
if (error instanceof ChannelANotFoundError)
|
|
@@ -1292,6 +1385,13 @@ export function channelAOperationFailureDiagnostic(
|
|
|
1292
1385
|
errorCode: "sandbox_channel_a_cancelled",
|
|
1293
1386
|
};
|
|
1294
1387
|
}
|
|
1388
|
+
if (error instanceof RoutingMutationOutputRejectedError) {
|
|
1389
|
+
return {
|
|
1390
|
+
reason: "request_rejected",
|
|
1391
|
+
status: error.reasonCode === "authority_revoked" ? 403 : 409,
|
|
1392
|
+
errorCode: "sandbox_channel_a_operation_failed",
|
|
1393
|
+
};
|
|
1394
|
+
}
|
|
1295
1395
|
if (error instanceof SandboxProviderReadLockUnavailableError) {
|
|
1296
1396
|
return {
|
|
1297
1397
|
reason: "provider_read_busy",
|
|
@@ -1299,6 +1399,13 @@ export function channelAOperationFailureDiagnostic(
|
|
|
1299
1399
|
errorCode: "sandbox_channel_a_provider_busy",
|
|
1300
1400
|
};
|
|
1301
1401
|
}
|
|
1402
|
+
if (error instanceof SelfhostedControlError && error.payloadTooLarge) {
|
|
1403
|
+
return {
|
|
1404
|
+
reason: error.detail.direction === "request" ? "request_rejected" : "provider_unavailable",
|
|
1405
|
+
status: error.detail.direction === "request" ? 413 : 502,
|
|
1406
|
+
errorCode: "sandbox_channel_a_operation_failed",
|
|
1407
|
+
};
|
|
1408
|
+
}
|
|
1302
1409
|
if (error instanceof SandboxImageConflictError || error instanceof SandboxRigConflictError) {
|
|
1303
1410
|
return {
|
|
1304
1411
|
reason: "lifecycle_conflict",
|
|
@@ -1398,6 +1505,9 @@ export function observeChannelAOperationFailure(
|
|
|
1398
1505
|
errorClass: "SandboxChannelAOperationError",
|
|
1399
1506
|
errorCode: diagnostic.errorCode,
|
|
1400
1507
|
origin: "api",
|
|
1508
|
+
// Which component refused it (controller, machine, database), as reviewed
|
|
1509
|
+
// closed values only; "unexpected" alone cannot be diagnosed after the fact.
|
|
1510
|
+
...errorCauseAttributes(input.error),
|
|
1401
1511
|
} as const;
|
|
1402
1512
|
try {
|
|
1403
1513
|
services.observability.incrementCounter({
|