@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/routes/pr-review.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { environmentsEncryptionKeyBytes } from "@opengeni/config";
|
|
2
|
+
import { withOrganizationIntegrationAcquisition } from "@opengeni/db/organization-integration-policy";
|
|
2
3
|
import {
|
|
3
4
|
CreatePrReviewAppRegistrationRequest,
|
|
4
5
|
CreatePrReviewRepositoryBindingRequest,
|
|
5
6
|
PrReviewAppRegistration,
|
|
6
7
|
PrReviewRepositoryBinding,
|
|
7
|
-
OPENGENI_PR_REVIEW_PACK_ID,
|
|
8
8
|
UpdatePrReviewAppRegistrationRequest,
|
|
9
9
|
UpdatePrReviewRepositoryBindingRequest,
|
|
10
10
|
} from "@opengeni/contracts";
|
|
@@ -12,17 +12,17 @@ import {
|
|
|
12
12
|
assertWorkspaceModelPolicyAllows,
|
|
13
13
|
canonicalConfiguredModel,
|
|
14
14
|
defaultPrReviewProviderBaseUrl,
|
|
15
|
-
getCapabilityPack,
|
|
16
15
|
workspaceCustomModelReference,
|
|
17
16
|
lockActiveCustomModelForAdmission,
|
|
17
|
+
modelUnavailableHttpException,
|
|
18
18
|
prReviewWebhookAuthKind,
|
|
19
19
|
normalizePrReviewProviderBaseUrl,
|
|
20
|
-
prReviewPackConnectorId,
|
|
21
|
-
PR_REVIEW_AUTOMATION_TEMPLATE_ID,
|
|
22
20
|
requireAccessGrant,
|
|
21
|
+
requireAccessGrantAuthorization,
|
|
23
22
|
requirePermission,
|
|
24
23
|
resolveWorkspaceCatalogSettings,
|
|
25
24
|
type ApiRouteDeps,
|
|
25
|
+
PR_REVIEW_AUTOMATION_SETUP,
|
|
26
26
|
} from "@opengeni/core";
|
|
27
27
|
import {
|
|
28
28
|
createPrReviewAppRegistration,
|
|
@@ -32,7 +32,6 @@ import {
|
|
|
32
32
|
decryptVariableSetValue,
|
|
33
33
|
encryptVariableSetValue,
|
|
34
34
|
getPrReviewAppRegistrationSecret,
|
|
35
|
-
getPackInstallation,
|
|
36
35
|
listPrReviewAppRegistrations,
|
|
37
36
|
listPrReviewRepositoryBindings,
|
|
38
37
|
nestedPostgresSqlState,
|
|
@@ -48,6 +47,8 @@ import {
|
|
|
48
47
|
verifyPrReviewProviderRepository,
|
|
49
48
|
} from "../integrations/pr-review-provider";
|
|
50
49
|
import { registerPrReviewGitHubRoutes } from "./pr-review-github";
|
|
50
|
+
import { integrationCommitGrant } from "../integrations/integration-commit-authority";
|
|
51
|
+
import { parseRequestJson } from "../http/request-body";
|
|
51
52
|
|
|
52
53
|
export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
53
54
|
const { db, settings } = deps;
|
|
@@ -56,7 +57,7 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
56
57
|
app.get("/v1/workspaces/:workspaceId/pr-review/registrations", async (c) => {
|
|
57
58
|
const workspaceId = c.req.param("workspaceId");
|
|
58
59
|
const grant = await requireAccessGrant(c, deps, workspaceId, "workspace:read");
|
|
59
|
-
|
|
60
|
+
|
|
60
61
|
return c.json({
|
|
61
62
|
registrations: await listPrReviewAppRegistrations(db, grant.accountId, workspaceId),
|
|
62
63
|
repositories: await listPrReviewRepositoryBindings(db, grant.accountId, workspaceId),
|
|
@@ -67,9 +68,9 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
67
68
|
const workspaceId = c.req.param("workspaceId");
|
|
68
69
|
const grant = await requireAccessGrant(c, deps, workspaceId, "workspace:admin");
|
|
69
70
|
requirePermission(grant, "secrets:write");
|
|
70
|
-
|
|
71
|
+
|
|
71
72
|
assertPrReviewSandboxBackend(deps);
|
|
72
|
-
const payload =
|
|
73
|
+
const payload = await parseRequestJson(c, CreatePrReviewAppRegistrationRequest);
|
|
73
74
|
const encryptionKey = requirePrReviewEncryptionKey(deps);
|
|
74
75
|
let providerBaseUrl: string;
|
|
75
76
|
try {
|
|
@@ -94,28 +95,32 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
94
95
|
});
|
|
95
96
|
}
|
|
96
97
|
const registration = await mapPrReviewUniqueConflict(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
98
|
+
withOrganizationIntegrationAcquisition(
|
|
99
|
+
db,
|
|
100
|
+
grant,
|
|
101
|
+
[prReviewIntegrationKey(payload.provider)],
|
|
102
|
+
(tx) =>
|
|
103
|
+
createPrReviewAppRegistration(tx, {
|
|
104
|
+
accountId: grant.accountId,
|
|
105
|
+
workspaceId,
|
|
106
|
+
name: payload.name,
|
|
107
|
+
provider: payload.provider,
|
|
108
|
+
providerBaseUrl,
|
|
109
|
+
appId: payload.appId ?? null,
|
|
110
|
+
credentialKind: payload.credentialKind,
|
|
111
|
+
credentialEncrypted: encryptVariableSetValue(
|
|
112
|
+
encryptionKey,
|
|
113
|
+
payload.privateKey ?? payload.accessToken!,
|
|
114
|
+
),
|
|
115
|
+
accessTokenExpiresAt: payload.accessTokenExpiresAt
|
|
116
|
+
? new Date(payload.accessTokenExpiresAt)
|
|
117
|
+
: null,
|
|
118
|
+
webhookAuthKind: prReviewWebhookAuthKind(payload.provider),
|
|
119
|
+
webhookSecretEncrypted: encryptVariableSetValue(encryptionKey, payload.webhookSecret),
|
|
120
|
+
webhookUsername: payload.webhookUsername ?? null,
|
|
121
|
+
createdBySubjectId: grant.subjectId,
|
|
122
|
+
}),
|
|
123
|
+
),
|
|
119
124
|
"A PR Review registration with this provider and name already exists",
|
|
120
125
|
);
|
|
121
126
|
await recordAuditEvent(db, {
|
|
@@ -138,8 +143,8 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
138
143
|
const workspaceId = c.req.param("workspaceId");
|
|
139
144
|
const grant = await requireAccessGrant(c, deps, workspaceId, "workspace:admin");
|
|
140
145
|
requirePermission(grant, "secrets:write");
|
|
141
|
-
|
|
142
|
-
const payload =
|
|
146
|
+
|
|
147
|
+
const payload = await parseRequestJson(c, UpdatePrReviewAppRegistrationRequest);
|
|
143
148
|
const existing = await getPrReviewAppRegistrationSecret(db, {
|
|
144
149
|
accountId: grant.accountId,
|
|
145
150
|
workspaceId,
|
|
@@ -158,12 +163,12 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
158
163
|
payload.accessTokenExpiresAt !== undefined
|
|
159
164
|
) {
|
|
160
165
|
throw new HTTPException(422, {
|
|
161
|
-
message: "
|
|
166
|
+
message: "Opengeni Lens credentials are managed by the deployment",
|
|
162
167
|
});
|
|
163
168
|
}
|
|
164
169
|
if (payload.status === "active") {
|
|
165
170
|
throw new HTTPException(409, {
|
|
166
|
-
message: "Reconnect
|
|
171
|
+
message: "Reconnect Opengeni Lens to reactivate and resync its repositories",
|
|
167
172
|
});
|
|
168
173
|
}
|
|
169
174
|
}
|
|
@@ -272,9 +277,13 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
272
277
|
|
|
273
278
|
app.post("/v1/workspaces/:workspaceId/pr-review/repositories", async (c) => {
|
|
274
279
|
const workspaceId = c.req.param("workspaceId");
|
|
275
|
-
const grant = await
|
|
276
|
-
|
|
277
|
-
|
|
280
|
+
const grant = await integrationCommitGrant(
|
|
281
|
+
await requireAccessGrantAuthorization(c, deps, workspaceId, "workspace:admin"),
|
|
282
|
+
["workspace:admin"],
|
|
283
|
+
{ settings: deps.settings, authorizationHeader: c.req.header("authorization") },
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
const payload = await parseRequestJson(c, CreatePrReviewRepositoryBindingRequest);
|
|
278
287
|
const registration = await getPrReviewAppRegistrationSecret(db, {
|
|
279
288
|
accountId: grant.accountId,
|
|
280
289
|
workspaceId,
|
|
@@ -284,6 +293,8 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
284
293
|
throw new HTTPException(404, {
|
|
285
294
|
message: "PR Review app registration not found",
|
|
286
295
|
});
|
|
296
|
+
const integrationKey = prReviewIntegrationKey(registration.provider);
|
|
297
|
+
await withOrganizationIntegrationAcquisition(db, grant, [integrationKey], async () => {});
|
|
287
298
|
const repositoryUrl = new URL(payload.repositoryUri);
|
|
288
299
|
let canonicalRepositoryUri = repositoryUrl.href;
|
|
289
300
|
let canonicalRepositoryFullName = payload.repositoryFullName;
|
|
@@ -406,35 +417,33 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
406
417
|
modelId: model,
|
|
407
418
|
})
|
|
408
419
|
: undefined;
|
|
409
|
-
const template =
|
|
410
|
-
|
|
411
|
-
);
|
|
412
|
-
if (!template) {
|
|
413
|
-
throw new HTTPException(503, { message: "PR Review automation template is unavailable" });
|
|
414
|
-
}
|
|
420
|
+
const template = PR_REVIEW_AUTOMATION_SETUP;
|
|
421
|
+
|
|
415
422
|
const binding = await mapPrReviewUniqueConflict(
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
423
|
+
withOrganizationIntegrationAcquisition(db, grant, [integrationKey], async (tx) => {
|
|
424
|
+
await grant.authorizeCommit(tx);
|
|
425
|
+
return createPrReviewRepositoryBinding(tx, {
|
|
426
|
+
accountId: grant.accountId,
|
|
427
|
+
workspaceId,
|
|
428
|
+
registrationId: registration.id,
|
|
429
|
+
provider: registration.provider,
|
|
430
|
+
repositoryUri: canonicalRepositoryUri,
|
|
431
|
+
repositoryFullName: canonicalRepositoryFullName,
|
|
432
|
+
providerRepositoryId: canonicalProviderRepositoryId,
|
|
433
|
+
installationId:
|
|
434
|
+
payload.installationId === undefined ? null : String(payload.installationId),
|
|
435
|
+
projectId: canonicalProjectId,
|
|
436
|
+
model,
|
|
437
|
+
additionalInstructions: payload.additionalInstructions ?? null,
|
|
438
|
+
status: payload.status,
|
|
439
|
+
createdBySubjectId: grant.subjectId,
|
|
440
|
+
|
|
441
|
+
adapterId: template.adapterId,
|
|
442
|
+
eventTypes: template.eventTypes,
|
|
443
|
+
configuration: template.configuration,
|
|
444
|
+
sessionTemplate: template.sessionTemplate,
|
|
445
|
+
...(beforeCreateCommit ? { beforeCreateCommit } : {}),
|
|
446
|
+
});
|
|
438
447
|
}),
|
|
439
448
|
"This repository is already bound to the selected PR Review registration",
|
|
440
449
|
);
|
|
@@ -457,8 +466,8 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
457
466
|
app.patch("/v1/workspaces/:workspaceId/pr-review/repositories/:bindingId", async (c) => {
|
|
458
467
|
const workspaceId = c.req.param("workspaceId");
|
|
459
468
|
const grant = await requireAccessGrant(c, deps, workspaceId, "workspace:admin");
|
|
460
|
-
|
|
461
|
-
const payload =
|
|
469
|
+
|
|
470
|
+
const payload = await parseRequestJson(c, UpdatePrReviewRepositoryBindingRequest);
|
|
462
471
|
const catalogSettings = (
|
|
463
472
|
await resolveWorkspaceCatalogSettings(db, deps.settings, {
|
|
464
473
|
accountId: grant.accountId,
|
|
@@ -547,6 +556,12 @@ export function registerPrReviewRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
547
556
|
});
|
|
548
557
|
}
|
|
549
558
|
|
|
559
|
+
/** PR Review's server-owned provider, not a repository URL or user label,
|
|
560
|
+
* establishes Lens identity. Other providers have no curated acquisition key. */
|
|
561
|
+
function prReviewIntegrationKey(provider: string): "github-lens" | null {
|
|
562
|
+
return provider === "github" ? "github-lens" : null;
|
|
563
|
+
}
|
|
564
|
+
|
|
550
565
|
function prReviewCustomModelCommitGuard(input: {
|
|
551
566
|
settings: ApiRouteDeps["settings"];
|
|
552
567
|
accountId: string;
|
|
@@ -560,11 +575,12 @@ function prReviewCustomModelCommitGuard(input: {
|
|
|
560
575
|
accountId: input.accountId,
|
|
561
576
|
workspaceId: input.workspaceId,
|
|
562
577
|
reference,
|
|
578
|
+
// Review runs carry no accepted Claude authority, so an organization
|
|
579
|
+
// Claude model is refused here (unchanged behaviour).
|
|
580
|
+
claudeAuthority: null,
|
|
563
581
|
});
|
|
564
582
|
if (!active) {
|
|
565
|
-
throw
|
|
566
|
-
message: `model is not available: ${input.modelId}`,
|
|
567
|
-
});
|
|
583
|
+
throw modelUnavailableHttpException(input.modelId);
|
|
568
584
|
}
|
|
569
585
|
};
|
|
570
586
|
}
|
|
@@ -573,26 +589,16 @@ function assertPrReviewSandboxBackend(deps: ApiRouteDeps): void {
|
|
|
573
589
|
if (deps.settings.sandboxBackend === "selfhosted") {
|
|
574
590
|
throw new HTTPException(409, {
|
|
575
591
|
message:
|
|
576
|
-
"
|
|
577
|
-
});
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
async function requirePrReviewPackActive(db: ApiRouteDeps["db"], workspaceId: string) {
|
|
582
|
-
const installation = await getPackInstallation(db, workspaceId, OPENGENI_PR_REVIEW_PACK_ID);
|
|
583
|
-
if (installation?.status !== "active") {
|
|
584
|
-
throw new HTTPException(409, {
|
|
585
|
-
message: "Install and enable the OpenGeni Review Bot Pack first",
|
|
592
|
+
"Opengeni Review Bot requires managed compute so it can materialize and verify the exact pull-request head",
|
|
586
593
|
});
|
|
587
594
|
}
|
|
588
|
-
return installation;
|
|
589
595
|
}
|
|
590
596
|
|
|
591
597
|
function requirePrReviewEncryptionKey(deps: ApiRouteDeps): Uint8Array {
|
|
592
598
|
const key = environmentsEncryptionKeyBytes(deps.settings);
|
|
593
599
|
if (!key) {
|
|
594
600
|
throw new HTTPException(503, {
|
|
595
|
-
message: "
|
|
601
|
+
message: "Opengeni Review Bot requires configured secret encryption",
|
|
596
602
|
});
|
|
597
603
|
}
|
|
598
604
|
return key;
|
|
@@ -97,6 +97,7 @@ function requiredAttemptClaims(grant: AccessGrant): PreferenceRegistryAttemptCla
|
|
|
97
97
|
|
|
98
98
|
function requireHumanMutation(access: AccessGrantAuthorization): void {
|
|
99
99
|
const { grant } = access;
|
|
100
|
+
if (isDeploymentKeyOperator(access)) return;
|
|
100
101
|
if (
|
|
101
102
|
!access.contextIntegrity ||
|
|
102
103
|
access.authenticatedSubjectId !== grant.subjectId ||
|
|
@@ -112,6 +113,23 @@ function requireHumanMutation(access: AccessGrantAuthorization): void {
|
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
|
|
116
|
+
/**
|
|
117
|
+
* A key-only (configured) deployment has no Opengeni sign-in: whoever holds the
|
|
118
|
+
* deployment key is its operator, so a request made with the key itself counts
|
|
119
|
+
* as the person. Agents never hold the key and stay refused.
|
|
120
|
+
*/
|
|
121
|
+
function isDeploymentKeyOperator(access: AccessGrantAuthorization): boolean {
|
|
122
|
+
const { grant } = access;
|
|
123
|
+
return (
|
|
124
|
+
access.contextIntegrity &&
|
|
125
|
+
access.authenticatedSubjectId === grant.subjectId &&
|
|
126
|
+
grant.principalKind === "configured_key" &&
|
|
127
|
+
exactAttemptClaims(grant) === null &&
|
|
128
|
+
!grant.serviceInitiator &&
|
|
129
|
+
!grant.serviceInitiatorContext
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
115
133
|
export function authorizePreferenceRegistryScopeMutation(
|
|
116
134
|
access: AccessGrantAuthorization,
|
|
117
135
|
scope: PreferenceRegistryScope,
|
package/src/routes/rigs.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { legacyVariableSetFields, VariableSetsRemovedError } from "../http/variable-sets-removed";
|
|
1
2
|
import {
|
|
2
3
|
CreateRigRequest,
|
|
3
4
|
ProposeRigChangeRequest,
|
|
@@ -42,6 +43,21 @@ async function parseRigRequest<T>(c: Context, schema: ZodType<T>, label: string)
|
|
|
42
43
|
bodyRecord?.payload && typeof bodyRecord.payload === "object"
|
|
43
44
|
? (bodyRecord.payload as Record<string, unknown>)
|
|
44
45
|
: null;
|
|
46
|
+
// RM-1: rig default Variable Sets were removed with Variable Sets.
|
|
47
|
+
const legacyFields = [
|
|
48
|
+
...legacyVariableSetFields(bodyRecord),
|
|
49
|
+
...legacyVariableSetFields(payloadRecord).map((field) => `payload.${field}`),
|
|
50
|
+
];
|
|
51
|
+
if (legacyFields.length > 0) {
|
|
52
|
+
throw new VariableSetsRemovedError(legacyFields);
|
|
53
|
+
}
|
|
54
|
+
// An explicit [] still clears an old version's defaults; null means "unchanged".
|
|
55
|
+
if (bodyRecord && !Array.isArray(bodyRecord.defaultVariableSetIds)) {
|
|
56
|
+
delete bodyRecord.defaultVariableSetIds;
|
|
57
|
+
}
|
|
58
|
+
if (payloadRecord && !Array.isArray(payloadRecord.defaultVariableSetIds)) {
|
|
59
|
+
delete payloadRecord.defaultVariableSetIds;
|
|
60
|
+
}
|
|
45
61
|
const imageOverrideUnsupported = Boolean(
|
|
46
62
|
(bodyRecord && Object.hasOwn(bodyRecord, "image")) ||
|
|
47
63
|
(payloadRecord && Object.hasOwn(payloadRecord, "image")),
|
|
@@ -51,7 +67,7 @@ async function parseRigRequest<T>(c: Context, schema: ZodType<T>, label: string)
|
|
|
51
67
|
throw new ApiHttpError(422, {
|
|
52
68
|
code: "validation_failed",
|
|
53
69
|
message: imageOverrideUnsupported
|
|
54
|
-
? "
|
|
70
|
+
? "Sandbox Environment base-image overrides are not supported; Sandbox Environments use the deployment-managed platform sandbox."
|
|
55
71
|
: `Invalid ${label}.`,
|
|
56
72
|
retryable: false,
|
|
57
73
|
details: {
|
|
@@ -77,7 +93,7 @@ export function registerRigRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
77
93
|
const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId, permission);
|
|
78
94
|
const rigId = c.req.param("rigId");
|
|
79
95
|
if (!rigId) {
|
|
80
|
-
throw new HTTPException(400, { message: "
|
|
96
|
+
throw new HTTPException(400, { message: "sandbox environment id is required" });
|
|
81
97
|
}
|
|
82
98
|
const rig = await requireRigForApi(db, authorization.grant, rigId);
|
|
83
99
|
if (
|
|
@@ -126,7 +142,7 @@ export function registerRigRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
126
142
|
// The verifying transition already committed. Keep its deterministic
|
|
127
143
|
// attempt identity retryable instead of reporting an opaque 5xx after a
|
|
128
144
|
// durable mutation or inventing a second attempt after an ambiguous start.
|
|
129
|
-
deps.observability?.warn("
|
|
145
|
+
deps.observability?.warn("sandbox environment change verification start failed", {
|
|
130
146
|
workspaceId,
|
|
131
147
|
changeId,
|
|
132
148
|
attempt,
|
|
@@ -163,11 +179,14 @@ export function registerRigRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
163
179
|
// Creation already committed. The rig remains fully usable through its
|
|
164
180
|
// runtime setup fallback and can be re-verified explicitly; never turn a
|
|
165
181
|
// successful create into an unretryable 5xx because Temporal was down.
|
|
166
|
-
deps.observability?.warn(
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
182
|
+
deps.observability?.warn(
|
|
183
|
+
"initial sandbox environment provider-image verification start failed",
|
|
184
|
+
{
|
|
185
|
+
workspaceId,
|
|
186
|
+
versionId,
|
|
187
|
+
error: error instanceof Error ? error.message : String(error),
|
|
188
|
+
},
|
|
189
|
+
);
|
|
171
190
|
return false;
|
|
172
191
|
}
|
|
173
192
|
}
|
|
@@ -183,7 +202,11 @@ export function registerRigRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
183
202
|
const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
|
|
184
203
|
const grant = authorization.grant;
|
|
185
204
|
requirePermission(grant, "rigs:manage");
|
|
186
|
-
const payload = await parseRigRequest(
|
|
205
|
+
const payload = await parseRigRequest(
|
|
206
|
+
c,
|
|
207
|
+
CreateRigRequest,
|
|
208
|
+
"Sandbox Environment create request",
|
|
209
|
+
);
|
|
187
210
|
const allowOrganization =
|
|
188
211
|
payload.scope === "organization" &&
|
|
189
212
|
authorization.accountGrant?.permissions.includes("account:admin") === true;
|
|
@@ -222,7 +245,11 @@ export function registerRigRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
222
245
|
message: "missing permission: account:admin",
|
|
223
246
|
});
|
|
224
247
|
}
|
|
225
|
-
const payload = await parseRigRequest(
|
|
248
|
+
const payload = await parseRigRequest(
|
|
249
|
+
c,
|
|
250
|
+
UpdateRigRequest,
|
|
251
|
+
"Sandbox Environment update request",
|
|
252
|
+
);
|
|
226
253
|
return c.json(await updateRigForApi({ db }, grant, rig, payload, { allowOrganization }));
|
|
227
254
|
});
|
|
228
255
|
|
|
@@ -254,7 +281,11 @@ export function registerRigRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
254
281
|
app.post("/v1/workspaces/:workspaceId/rigs/:rigId/versions", async (c) => {
|
|
255
282
|
const workspaceId = c.req.param("workspaceId");
|
|
256
283
|
const { grant, rig } = await requireRigMutation(c, workspaceId, "rigs:manage");
|
|
257
|
-
const payload = await parseRigRequest(
|
|
284
|
+
const payload = await parseRigRequest(
|
|
285
|
+
c,
|
|
286
|
+
RigDefinitionEditPayload,
|
|
287
|
+
"Sandbox Environment version request",
|
|
288
|
+
);
|
|
258
289
|
const version = await createRigVersionForApi({ db }, grant, rig, payload);
|
|
259
290
|
const started = await tryStartInitialVersionVerification(rig.workspaceId, version.id);
|
|
260
291
|
if (!started) c.header("OpenGeni-Rig-Verification", "deferred");
|
|
@@ -289,7 +320,11 @@ export function registerRigRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
289
320
|
app.post("/v1/workspaces/:workspaceId/rigs/:rigId/changes", async (c) => {
|
|
290
321
|
const workspaceId = c.req.param("workspaceId");
|
|
291
322
|
const { grant, rig } = await requireRigMutation(c, workspaceId, "rigs:use");
|
|
292
|
-
const request = await parseRigRequest(
|
|
323
|
+
const request = await parseRigRequest(
|
|
324
|
+
c,
|
|
325
|
+
ProposeRigChangeRequest,
|
|
326
|
+
"Sandbox Environment change request",
|
|
327
|
+
);
|
|
293
328
|
const change = await proposeRigChangeForApi({ db }, grant, rig, request);
|
|
294
329
|
const verification = await startChangeVerification(rig.workspaceId, change.id);
|
|
295
330
|
if (!verification.started) c.header("OpenGeni-Rig-Verification", "deferred");
|
|
@@ -336,7 +371,7 @@ export function registerRigRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
|
336
371
|
const workspaceId = c.req.param("workspaceId");
|
|
337
372
|
const { rig } = await requireRigMutation(c, workspaceId, "rigs:use");
|
|
338
373
|
if (!rig.activeVersion) {
|
|
339
|
-
return c.json({ error: "
|
|
374
|
+
return c.json({ error: "sandbox environment has no active version" }, 422);
|
|
340
375
|
}
|
|
341
376
|
await startVersionVerification(rig.workspaceId, rig.activeVersion.id);
|
|
342
377
|
return c.json({ ok: true, versionId: rig.activeVersion.id }, 202);
|