@opengeni/api-router 0.30.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-grant-rls.d.ts +3 -0
- package/dist/admission-trace.d.ts +8 -0
- package/dist/api-websocket.d.ts +18 -0
- package/dist/app.d.ts +50 -2
- package/dist/app.js +12 -1
- package/dist/artifact-catalog-cursor.d.ts +27 -0
- package/dist/auth/managed-auth-attempt-context.d.ts +10 -0
- package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
- package/dist/auth/managed-auth-session-adapter.d.ts +6 -0
- package/dist/auth/managed-auth.d.ts +102 -3
- package/dist/auth/managed-email.d.ts +29 -0
- package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
- package/dist/auth/new-signups-gate.d.ts +23 -0
- package/dist/auth/organization-user-setup.d.ts +80 -0
- package/dist/auth/signup-funnel-metrics.d.ts +44 -0
- package/dist/browser-controller-authority.d.ts +1 -61
- package/dist/browser-ephemeral.d.ts +5 -0
- package/dist/browser-state-authority.d.ts +1 -27
- package/dist/chunk-6TZ5LG3O.js +123948 -0
- package/dist/chunk-6TZ5LG3O.js.map +1 -0
- package/dist/chunk-OGQDXVXY.js +18 -0
- package/dist/chunk-OGQDXVXY.js.map +1 -0
- package/dist/claude-subscription-account-conflicts.d.ts +1 -0
- package/dist/claude-subscription-account-usage.d.ts +39 -0
- package/dist/claude-subscription-oauth.d.ts +25 -0
- package/dist/claude-subscription-profile.d.ts +9 -0
- package/dist/claude-subscription-usage.d.ts +44 -0
- package/dist/claude-workspace-connection.d.ts +15 -0
- package/dist/codemode.d.ts +32 -1
- package/dist/company-brain-okf.d.ts +24 -0
- package/dist/connected-machine-computer-access.d.ts +11 -0
- package/dist/connection-ownership.d.ts +54 -0
- package/dist/controller-data-plane.d.ts +32 -0
- package/dist/editable-artifact-source-session.d.ts +3 -0
- package/dist/editable-artifact-websocket.d.ts +10 -18
- package/dist/editable-artifact-workspace-files.d.ts +1 -1
- package/dist/fatal-process-boundary.d.ts +25 -0
- package/dist/github-access.d.ts +31 -2
- package/dist/http/acting-person.d.ts +24 -0
- package/dist/http/api-contract-compat.d.ts +19 -0
- package/dist/http/api-error.d.ts +27 -1
- package/dist/http/cors.d.ts +17 -0
- package/dist/http/deprecation.d.ts +42 -0
- package/dist/http/interaction-control-error.d.ts +13 -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/request-body.d.ts +27 -0
- package/dist/http/request-source.d.ts +52 -0
- package/dist/http/sse.d.ts +17 -6
- package/dist/http/unmatched-route.d.ts +18 -0
- package/dist/http/user-content.d.ts +36 -0
- package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.js +1091 -162
- package/dist/index.js.map +1 -1
- package/dist/integration-endpoint-test.d.ts +20 -0
- package/dist/integrations/api-integrations.d.ts +2 -2
- package/dist/integrations/atlassian.d.ts +29 -3
- package/dist/integrations/connect-authority.d.ts +1 -0
- package/dist/integrations/connect-callback-return.d.ts +6 -0
- package/dist/integrations/fiken.d.ts +16 -2
- package/dist/integrations/github-app-connect.d.ts +47 -0
- package/dist/integrations/github-installation-proof.d.ts +3 -0
- package/dist/integrations/github-lens-connect.d.ts +116 -0
- package/dist/integrations/github-skill-source.d.ts +1 -5
- package/dist/integrations/google-drive.d.ts +24 -0
- package/dist/integrations/integration-commit-authority.d.ts +13 -0
- package/dist/integrations/marketplace-plugin.d.ts +2691 -0
- package/dist/integrations/oauth-client.d.ts +178 -18
- package/dist/integrations/oauth-profiles.d.ts +222 -0
- package/dist/integrations/oauth-return-path.d.ts +1 -0
- package/dist/integrations/personal-github-repositories.d.ts +84 -0
- package/dist/integrations/personal-github.d.ts +42 -0
- package/dist/integrations/pr-review-provider.d.ts +22 -0
- package/dist/integrations/provider-oauth.d.ts +19 -1
- package/dist/integrations/slack-app-home.d.ts +24 -0
- package/dist/integrations/slack-bot.d.ts +367 -12
- package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
- package/dist/integrations/slack-install.d.ts +20 -0
- package/dist/integrations/slack-interactions.d.ts +107 -9
- package/dist/integrations/slack-mrkdwn.d.ts +41 -0
- package/dist/integrations/slack-routing.d.ts +120 -0
- package/dist/integrations/slack-session-defaults.d.ts +58 -0
- package/dist/integrations/slack-task-file-upload.d.ts +36 -0
- package/dist/integrations/social-oauth.d.ts +7 -0
- package/dist/interaction-agent-access.d.ts +15 -0
- package/dist/interaction-frame-proxy.d.ts +68 -0
- package/dist/interaction-metrics.d.ts +2 -0
- package/dist/mcp/action-catalog-types.d.ts +9 -0
- package/dist/mcp/action-catalog.gen.d.ts +2 -0
- package/dist/mcp/capability-account-readiness.d.ts +7 -0
- package/dist/mcp/child-read-evidence.d.ts +9 -0
- package/dist/mcp/command-read.d.ts +24 -0
- package/dist/mcp/company-profile-agent-admin.d.ts +44 -0
- package/dist/mcp/contract-input.d.ts +11 -0
- package/dist/mcp/documents.d.ts +7 -5
- package/dist/mcp/files.d.ts +2 -2
- package/dist/mcp/first-party-tool-permissions.d.ts +650 -0
- package/dist/mcp/knowledge-entries.d.ts +5 -0
- package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
- package/dist/mcp/receipts.d.ts +9 -0
- package/dist/mcp/request-abort.d.ts +19 -0
- package/dist/mcp/scheduled-task-input.d.ts +1189 -0
- package/dist/mcp/scheduled-task-view.d.ts +22 -4
- package/dist/mcp/server.d.ts +255 -3
- package/dist/mcp/session-event-view.d.ts +94 -0
- package/dist/mcp/session-view.d.ts +66 -2
- package/dist/mcp/session-wait.d.ts +174 -0
- package/dist/mcp-oauth.d.ts +52 -0
- package/dist/model-catalog.d.ts +11 -31
- package/dist/observability.d.ts +3 -1
- package/dist/organization-mcp.d.ts +52 -0
- package/dist/organization-recovery-notifications.d.ts +41 -0
- package/dist/routes/analytics-consent.d.ts +26 -0
- package/dist/routes/api-integrations.d.ts +25 -0
- package/dist/routes/api-keys.d.ts +17 -0
- package/dist/routes/artifact-catalog.d.ts +6 -0
- package/dist/routes/automations.d.ts +19 -0
- package/dist/routes/billing.d.ts +49 -0
- package/dist/routes/browser-sessions.d.ts +59 -2
- 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 +146 -0
- package/dist/routes/codex.d.ts +76 -2
- package/dist/routes/company-brain.d.ts +3 -0
- package/dist/routes/company-profile.d.ts +2 -1
- package/dist/routes/computer-sessions.d.ts +14 -0
- package/dist/routes/connect.d.ts +5 -0
- package/dist/routes/editable-artifacts.d.ts +2 -0
- package/dist/routes/external-identity-links.d.ts +6 -0
- package/dist/routes/feedback.d.ts +3 -0
- package/dist/routes/github-browser-pages.d.ts +12 -0
- package/dist/routes/github.d.ts +2 -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 +30 -1
- package/dist/routes/knowledge.d.ts +3 -0
- package/dist/routes/managed-auth-session-sets.d.ts +26 -0
- package/dist/routes/managed-onboarding.d.ts +29 -0
- package/dist/routes/managed-sign-in-methods.d.ts +6 -0
- package/dist/routes/model-connection-access.d.ts +3 -0
- package/dist/routes/organization-integration-policy.d.ts +3 -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-providers.d.ts +3 -0
- package/dist/routes/organization-recovery.d.ts +19 -0
- package/dist/routes/organization-service-accounts.d.ts +3 -0
- package/dist/routes/organization-sessions.d.ts +26 -0
- package/dist/routes/personal-github-git-broker.d.ts +29 -0
- package/dist/routes/personal-github.d.ts +3 -0
- package/dist/routes/pr-review-github.d.ts +3 -0
- package/dist/routes/pr-review.d.ts +3 -0
- package/dist/routes/session-artifact-associations.d.ts +4 -0
- package/dist/routes/session-history-imports.d.ts +9 -0
- package/dist/routes/sessions.d.ts +44 -6
- package/dist/routes/skill-content.d.ts +4 -0
- package/dist/routes/skill-install-authority.d.ts +6 -0
- package/dist/routes/subscription-account-pools.d.ts +34 -0
- package/dist/routes/subscription-pool-access.d.ts +16 -0
- package/dist/routes/supergrok.d.ts +6 -1
- package/dist/routes/usage-allowances.d.ts +12 -0
- package/dist/routes/user-resource-authorities.d.ts +3 -0
- package/dist/routes/workspace-artifacts.d.ts +2 -1
- package/dist/routes/workspace-capture.d.ts +10 -2
- package/dist/routes/workspace-integrations.d.ts +35 -0
- package/dist/routes/workspace-learning.d.ts +3 -0
- package/dist/routes/workspace-model-providers.d.ts +4 -0
- package/dist/routes/workspaces.d.ts +29 -0
- package/dist/sandbox/auth-callout.d.ts +8 -0
- package/dist/sandbox/channel-a.d.ts +19 -1
- package/dist/sandbox/connection-authority.d.ts +3 -0
- package/dist/sandbox/enrollment.d.ts +9 -1
- package/dist/sandbox/machines.d.ts +5 -2
- package/dist/sandbox/metrics-ingestion.d.ts +28 -20
- package/dist/sandbox/rematerialize.d.ts +2 -0
- package/dist/sandbox/session-attach-variable-sets.d.ts +30 -0
- package/dist/sandbox/viewer.d.ts +26 -1
- package/dist/sandbox-file-artifacts.d.ts +50 -0
- package/dist/scheduled-task-deletion.d.ts +13 -0
- package/dist/session-create-observability.d.ts +5 -0
- package/dist/session-event-view-MPS2OZD3.js +292 -0
- package/dist/session-event-view-MPS2OZD3.js.map +1 -0
- package/dist/site-session-origin.d.ts +13 -0
- package/dist/site-uploads.d.ts +41 -0
- package/dist/slack-reaction-files.d.ts +1 -1
- package/dist/temporal-schedule-cleanup.d.ts +1 -0
- package/dist/temporal-schedule-sync.d.ts +26 -0
- package/dist/transcription/providers/xai-subscription.d.ts +1 -0
- package/dist/transcription/service.d.ts +2 -1
- package/dist/work-discovery-observability.d.ts +33 -0
- package/dist/workspace-artifact-content.d.ts +28 -0
- package/dist/workspace-artifact-provenance.d.ts +7 -0
- package/dist/workspace-delete-observability.d.ts +10 -0
- package/dist/workspace-deletion.d.ts +6 -0
- package/dist/workspace-state-projection.d.ts +3 -5
- package/dist/workspace-tool-gateway-observability.d.ts +17 -0
- package/dist/workspace-tool-gateway.d.ts +123 -0
- package/dist/workspace-webhook-dispatch.d.ts +26 -0
- package/package.json +23 -19
- package/src/access-grant-rls.ts +75 -0
- package/src/admission-trace.ts +14 -0
- package/src/api-websocket.ts +23 -0
- package/src/app.ts +1967 -252
- package/src/artifact-catalog-cursor.ts +60 -0
- package/src/auth/managed-auth-attempt-context.ts +70 -0
- package/src/auth/managed-auth-rate-limits.ts +252 -0
- package/src/auth/managed-auth-session-adapter.ts +222 -0
- package/src/auth/managed-auth.ts +536 -60
- package/src/auth/managed-email.ts +174 -0
- 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 +307 -0
- package/src/auth/signup-funnel-metrics.ts +164 -0
- package/src/browser-controller-authority.ts +1 -186
- package/src/browser-ephemeral.ts +39 -0
- package/src/browser-state-authority.ts +1 -236
- package/src/claude-subscription-account-conflicts.ts +12 -0
- package/src/claude-subscription-account-usage.ts +48 -0
- package/src/claude-subscription-oauth.ts +362 -0
- package/src/claude-subscription-profile.ts +73 -0
- package/src/claude-subscription-usage.ts +97 -0
- package/src/claude-workspace-connection.ts +82 -0
- package/src/codemode.ts +194 -30
- package/src/codex-realtime.ts +8 -2
- package/src/company-brain-okf.ts +340 -0
- package/src/connected-machine-computer-access.ts +33 -0
- package/src/connection-ownership.ts +199 -0
- package/src/controller-data-plane.ts +81 -0
- package/src/editable-artifact-native-kernel.ts +26 -15
- package/src/editable-artifact-office-import.ts +28 -3
- package/src/editable-artifact-production.ts +23 -7
- package/src/editable-artifact-source-session.ts +123 -0
- package/src/editable-artifact-websocket.ts +27 -21
- package/src/editable-artifact-workspace-files.ts +31 -6
- package/src/fatal-process-boundary.ts +246 -0
- package/src/gateway-realtime.ts +1 -1
- package/src/github-access.ts +147 -5
- package/src/http/acting-person.ts +71 -0
- package/src/http/api-contract-compat.ts +49 -0
- package/src/http/api-error.ts +115 -1
- package/src/http/auth.ts +48 -0
- package/src/http/cors.ts +67 -0
- package/src/http/deprecation.ts +118 -0
- package/src/http/interaction-control-error.ts +164 -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/request-body.ts +127 -0
- package/src/http/request-source.ts +178 -0
- package/src/http/sse.ts +486 -132
- package/src/http/unmatched-route.ts +60 -0
- package/src/http/user-content.ts +158 -0
- package/src/http/websocket-upgrade-dispatch.ts +29 -0
- package/src/index.ts +157 -52
- package/src/integration-endpoint-test.ts +291 -0
- package/src/integrations/api-integrations.ts +98 -11
- package/src/integrations/atlassian.ts +474 -136
- package/src/integrations/connect-authority.ts +2 -0
- package/src/integrations/connect-callback-return.ts +86 -0
- package/src/integrations/fiken.ts +354 -64
- package/src/integrations/github-app-connect.ts +435 -0
- package/src/integrations/github-installation-proof.ts +60 -0
- package/src/integrations/github-lens-connect.ts +76 -0
- package/src/integrations/github-skill-source.ts +2 -142
- package/src/integrations/google-drive.ts +717 -225
- package/src/integrations/integration-commit-authority.ts +69 -0
- package/src/integrations/marketplace-plugin.ts +48 -0
- package/src/integrations/oauth-client.ts +1356 -459
- package/src/integrations/oauth-profiles.ts +537 -0
- package/src/integrations/oauth-return-path.ts +18 -0
- package/src/integrations/personal-github-repositories.ts +674 -0
- package/src/integrations/personal-github.ts +825 -0
- package/src/integrations/pr-review-provider.ts +246 -0
- package/src/integrations/provider-oauth.ts +250 -22
- package/src/integrations/slack-app-home.ts +300 -0
- package/src/integrations/slack-bot.ts +963 -239
- package/src/integrations/slack-file-upload-flow.ts +147 -0
- package/src/integrations/slack-install.ts +83 -0
- package/src/integrations/slack-interactions.ts +3167 -474
- package/src/integrations/slack-mrkdwn.ts +193 -0
- package/src/integrations/slack-routing.ts +337 -0
- package/src/integrations/slack-session-defaults.ts +224 -0
- package/src/integrations/slack-task-file-upload.ts +323 -0
- package/src/integrations/social-oauth.ts +213 -15
- package/src/interaction-agent-access.ts +48 -0
- package/src/interaction-frame-proxy.ts +409 -0
- package/src/interaction-metrics.ts +30 -0
- package/src/mcp/action-catalog-types.ts +9 -0
- package/src/mcp/action-catalog.gen.ts +6696 -0
- package/src/mcp/capability-account-readiness.ts +17 -0
- package/src/mcp/child-read-evidence.ts +19 -0
- package/src/mcp/command-read.ts +109 -0
- package/src/mcp/company-profile-agent-admin.ts +198 -0
- package/src/mcp/contract-input.ts +141 -0
- package/src/mcp/documents.ts +65 -377
- package/src/mcp/editable-artifacts.ts +12 -6
- package/src/mcp/files.ts +80 -43
- package/src/mcp/first-party-tool-permissions.ts +305 -0
- package/src/mcp/knowledge-entries.ts +322 -0
- package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
- package/src/mcp/receipts.ts +34 -0
- package/src/mcp/request-abort.ts +44 -0
- package/src/mcp/scheduled-task-input.ts +76 -0
- package/src/mcp/scheduled-task-view.ts +44 -3
- package/src/mcp/server.ts +3030 -1267
- package/src/mcp/session-event-view.ts +383 -0
- package/src/mcp/session-view.ts +84 -3
- package/src/mcp/session-wait.ts +665 -0
- package/src/mcp-oauth.ts +1123 -0
- package/src/model-catalog.ts +91 -333
- package/src/observability.ts +15 -1
- package/src/organization-mcp.ts +397 -0
- package/src/organization-recovery-notifications.ts +103 -0
- package/src/routes/analytics-consent.ts +123 -0
- package/src/routes/api-integrations.ts +364 -74
- package/src/routes/api-keys.ts +336 -10
- package/src/routes/artifact-catalog.ts +279 -0
- package/src/routes/automations.ts +768 -0
- package/src/routes/billing.ts +461 -46
- package/src/routes/browser-sessions.ts +780 -112
- package/src/routes/canonical-human-identities.ts +90 -14
- package/src/routes/capabilities.ts +107 -6
- package/src/routes/channels.ts +20 -3
- package/src/routes/claude-subscription-accounts.ts +334 -0
- package/src/routes/claude-subscription-oauth.ts +142 -0
- package/src/routes/client-errors.ts +362 -0
- package/src/routes/codex.ts +833 -116
- package/src/routes/company-brain.ts +322 -0
- package/src/routes/company-profile.ts +65 -1
- package/src/routes/computer-sessions.ts +557 -106
- package/src/routes/connect.ts +1938 -0
- package/src/routes/connections.ts +1039 -349
- package/src/routes/documents.ts +488 -287
- package/src/routes/editable-artifacts.ts +79 -9
- package/src/routes/enrollments.ts +135 -39
- package/src/routes/environments.ts +154 -58
- package/src/routes/external-identity-links.ts +201 -0
- package/src/routes/feedback.ts +113 -0
- package/src/routes/files.ts +267 -33
- package/src/routes/github-browser-pages.ts +162 -0
- package/src/routes/github.ts +446 -144
- package/src/routes/insights-response-cache.ts +83 -0
- package/src/routes/insights-usage.ts +345 -0
- package/src/routes/insights.ts +153 -19
- package/src/routes/install.ts +133 -38
- package/src/routes/integration-facets.ts +107 -33
- package/src/routes/interaction-resources.ts +30 -3
- package/src/routes/knowledge.ts +488 -0
- package/src/routes/machines.ts +313 -15
- package/src/routes/managed-auth-session-sets.ts +1218 -0
- package/src/routes/managed-onboarding.ts +337 -0
- package/src/routes/managed-sign-in-methods.ts +433 -0
- package/src/routes/memory-slack-publications.ts +3 -2
- package/src/routes/model-connection-access.ts +208 -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 +178 -0
- package/src/routes/organization-memberships.ts +1019 -27
- package/src/routes/organization-model-providers.ts +293 -0
- package/src/routes/organization-recovery.ts +325 -0
- package/src/routes/organization-service-accounts.ts +128 -0
- package/src/routes/organization-sessions.ts +350 -0
- package/src/routes/personal-github-git-broker.ts +785 -0
- package/src/routes/personal-github.ts +370 -0
- package/src/routes/plugins.ts +251 -22
- package/src/routes/pr-review-github.ts +881 -0
- package/src/routes/pr-review.ts +622 -0
- package/src/routes/preference-registry.ts +12 -93
- package/src/routes/rigs.ts +167 -50
- package/src/routes/scheduled-tasks.ts +346 -41
- package/src/routes/session-artifact-associations.ts +87 -0
- package/src/routes/session-history-imports.ts +280 -0
- package/src/routes/sessions.ts +2306 -264
- package/src/routes/skill-content.ts +297 -0
- package/src/routes/skill-install-authority.ts +64 -0
- package/src/routes/skills.ts +62 -9
- package/src/routes/social.ts +46 -18
- package/src/routes/subscription-account-pools.ts +436 -0
- package/src/routes/subscription-pool-access.ts +126 -0
- package/src/routes/supergrok.ts +219 -303
- package/src/routes/transcription-recordings.ts +38 -3
- package/src/routes/transcriptions.ts +4 -0
- package/src/routes/usage-allowances.ts +378 -0
- package/src/routes/user-resource-authorities.ts +138 -0
- package/src/routes/video-generation.ts +14 -10
- package/src/routes/workspace-artifacts.ts +275 -69
- package/src/routes/workspace-capture.ts +21 -0
- package/src/routes/workspace-integrations.ts +576 -0
- package/src/routes/workspace-learning.ts +159 -0
- package/src/routes/workspace-model-providers.ts +148 -0
- package/src/routes/workspace-state.ts +38 -25
- package/src/routes/workspaces.ts +1004 -127
- package/src/sandbox/auth-callout.ts +96 -19
- package/src/sandbox/channel-a.ts +323 -24
- package/src/sandbox/connection-authority.ts +3 -0
- package/src/sandbox/enrollment.ts +81 -6
- package/src/sandbox/machines.ts +218 -76
- package/src/sandbox/metrics-ingestion.ts +411 -62
- package/src/sandbox/rematerialize.ts +121 -19
- package/src/sandbox/session-attach-variable-sets.ts +131 -0
- package/src/sandbox/viewer.ts +280 -25
- package/src/sandbox-file-artifacts.ts +413 -0
- package/src/scheduled-task-deletion.ts +138 -0
- package/src/session-create-observability.ts +46 -0
- package/src/session-realtime-context.ts +6 -3
- package/src/site-session-origin.ts +48 -0
- package/src/site-uploads.ts +224 -0
- package/src/slack-reaction-files.ts +16 -5
- package/src/temporal-schedule-cleanup.ts +13 -0
- package/src/temporal-schedule-sync.ts +74 -0
- package/src/transcription/providers/codex-subscription.ts +2 -0
- package/src/transcription/providers/openai.ts +1 -0
- package/src/transcription/providers/xai-subscription.ts +49 -3
- package/src/transcription/segmenter.ts +8 -2
- package/src/transcription/service.ts +43 -6
- package/src/work-discovery-observability.ts +121 -0
- package/src/workspace-artifact-content.ts +144 -0
- package/src/workspace-artifact-provenance.ts +104 -0
- package/src/workspace-delete-observability.ts +75 -0
- package/src/workspace-deletion.ts +73 -0
- package/src/workspace-state-projection.ts +18 -148
- package/src/workspace-tool-gateway-observability.ts +100 -0
- package/src/workspace-tool-gateway.ts +870 -0
- package/src/workspace-webhook-dispatch.ts +190 -0
- package/src/xai-subscription-auth.ts +9 -2
- package/dist/chunk-WCXHI3FF.js +0 -49920
- package/dist/chunk-WCXHI3FF.js.map +0 -1
- package/dist/routes/packs.d.ts +0 -3
- package/src/routes/packs.ts +0 -729
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import {
|
|
3
|
+
assistantMessagePhase,
|
|
4
|
+
type SessionEvent,
|
|
5
|
+
type SessionEventType,
|
|
6
|
+
} from "@opengeni/contracts";
|
|
7
|
+
import type {
|
|
8
|
+
SessionEventSliceOptions,
|
|
9
|
+
SessionEventSlicePage,
|
|
10
|
+
} from "@opengeni/db/session-event-slices";
|
|
11
|
+
|
|
12
|
+
export const SESSION_EVENT_VIEW_MAX_BYTES = 16 * 1024;
|
|
13
|
+
const selectionSchema = z.object({
|
|
14
|
+
sessionId: z.string().uuid(),
|
|
15
|
+
view: z.enum(["conversation", "results", "tools"]),
|
|
16
|
+
includeArguments: z.boolean(),
|
|
17
|
+
includeOutput: z.boolean(),
|
|
18
|
+
callId: z
|
|
19
|
+
.string()
|
|
20
|
+
.max(512)
|
|
21
|
+
.refine(
|
|
22
|
+
(value) => Buffer.byteLength(JSON.stringify(value), "utf8") <= 2048,
|
|
23
|
+
"callId exceeds the encoded cursor budget",
|
|
24
|
+
)
|
|
25
|
+
.nullable(),
|
|
26
|
+
toolName: z
|
|
27
|
+
.string()
|
|
28
|
+
.min(1)
|
|
29
|
+
.max(256)
|
|
30
|
+
.refine(
|
|
31
|
+
(value) => Buffer.byteLength(JSON.stringify(value), "utf8") <= 512,
|
|
32
|
+
"toolName exceeds the encoded cursor budget",
|
|
33
|
+
)
|
|
34
|
+
.nullable()
|
|
35
|
+
.default(null),
|
|
36
|
+
limit: z.number().int().min(1).max(50).optional(),
|
|
37
|
+
direction: z.enum(["before", "after"]),
|
|
38
|
+
after: z.number().int().nonnegative(),
|
|
39
|
+
before: z.number().int().positive().nullable(),
|
|
40
|
+
});
|
|
41
|
+
const cursorSchema = z.object({
|
|
42
|
+
v: z.union([z.literal(1), z.literal(2)]),
|
|
43
|
+
selection: selectionSchema,
|
|
44
|
+
sequence: z.number().int().positive().nullable(),
|
|
45
|
+
offset: z.number().int().nonnegative().max(2_147_483_647),
|
|
46
|
+
});
|
|
47
|
+
type Selection = z.infer<typeof selectionSchema>;
|
|
48
|
+
export type SessionEventViewInput = {
|
|
49
|
+
sessionId: string;
|
|
50
|
+
view?: Selection["view"] | undefined;
|
|
51
|
+
after?: number | undefined;
|
|
52
|
+
before?: number | undefined;
|
|
53
|
+
direction?: Selection["direction"] | undefined;
|
|
54
|
+
limit?: number | undefined;
|
|
55
|
+
cursor?: string | undefined;
|
|
56
|
+
callId?: string | undefined;
|
|
57
|
+
toolName?: string | undefined;
|
|
58
|
+
includeArguments?: boolean | undefined;
|
|
59
|
+
includeOutput?: boolean | undefined;
|
|
60
|
+
};
|
|
61
|
+
type Item = { sequence: number; turnId?: string; role?: string; text?: string } & Record<
|
|
62
|
+
string,
|
|
63
|
+
unknown
|
|
64
|
+
>;
|
|
65
|
+
type ReadPage = (options: SessionEventSliceOptions) => Promise<SessionEventSlicePage>;
|
|
66
|
+
const types: Record<Selection["view"], SessionEventType[]> = {
|
|
67
|
+
conversation: ["user.message", "agent.message.completed"],
|
|
68
|
+
// Final turn output is authoritative: do not repeat message.completed text.
|
|
69
|
+
results: ["turn.completed", "turn.failed", "goal.completed", "goal.paused", "tool.auth_needed"],
|
|
70
|
+
tools: ["agent.toolCall.created", "agent.toolCall.output"],
|
|
71
|
+
};
|
|
72
|
+
const record = (value: unknown): Record<string, unknown> =>
|
|
73
|
+
value !== null && typeof value === "object" && !Array.isArray(value)
|
|
74
|
+
? (value as Record<string, unknown>)
|
|
75
|
+
: {};
|
|
76
|
+
const bytes = (value: unknown) => Buffer.byteLength(JSON.stringify(value, null, 2), "utf8");
|
|
77
|
+
const encode = (selection: Selection, sequence: number | null = null, offset = 0, v = 2) =>
|
|
78
|
+
Buffer.from(JSON.stringify({ v, selection, sequence, offset })).toString("base64url");
|
|
79
|
+
|
|
80
|
+
/** A cursor is a bounded selector, never authority. The caller reauthorizes every read. */
|
|
81
|
+
export function resolveSessionEventView(input: SessionEventViewInput) {
|
|
82
|
+
let continuation: z.infer<typeof cursorSchema> | null = null;
|
|
83
|
+
if (input.cursor !== undefined) {
|
|
84
|
+
if (input.cursor.length > 4096)
|
|
85
|
+
throw new Error("session_events cursor exceeds 4096 characters");
|
|
86
|
+
try {
|
|
87
|
+
continuation = cursorSchema.parse(
|
|
88
|
+
JSON.parse(Buffer.from(input.cursor, "base64url").toString()),
|
|
89
|
+
);
|
|
90
|
+
} catch {
|
|
91
|
+
throw new Error("Invalid session_events cursor");
|
|
92
|
+
}
|
|
93
|
+
const previous = continuation.selection;
|
|
94
|
+
for (const key of [
|
|
95
|
+
"sessionId",
|
|
96
|
+
"view",
|
|
97
|
+
"includeArguments",
|
|
98
|
+
"includeOutput",
|
|
99
|
+
"callId",
|
|
100
|
+
"toolName",
|
|
101
|
+
"direction",
|
|
102
|
+
"after",
|
|
103
|
+
"before",
|
|
104
|
+
] as const) {
|
|
105
|
+
if (input[key] !== undefined && input[key] !== previous[key]) {
|
|
106
|
+
throw new Error(`session_events cursor cannot change ${key}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const selection =
|
|
111
|
+
continuation?.selection ??
|
|
112
|
+
selectionSchema.parse({
|
|
113
|
+
sessionId: input.sessionId,
|
|
114
|
+
view: input.view ?? "conversation",
|
|
115
|
+
includeArguments: input.includeArguments ?? false,
|
|
116
|
+
includeOutput: input.includeOutput ?? false,
|
|
117
|
+
callId: input.callId ?? null,
|
|
118
|
+
toolName: input.toolName ?? null,
|
|
119
|
+
direction:
|
|
120
|
+
input.direction ??
|
|
121
|
+
(input.before !== undefined || input.after === undefined ? "before" : "after"),
|
|
122
|
+
after: input.after ?? 0,
|
|
123
|
+
before: input.before ?? null,
|
|
124
|
+
});
|
|
125
|
+
selection.limit = z
|
|
126
|
+
.number()
|
|
127
|
+
.int()
|
|
128
|
+
.min(1)
|
|
129
|
+
.max(50)
|
|
130
|
+
.parse(input.limit ?? selection.limit ?? 10);
|
|
131
|
+
if (selection.toolName && selection.includeOutput)
|
|
132
|
+
throw new Error(
|
|
133
|
+
"toolName selects named calls. Read a result with its callId and includeOutput=true.",
|
|
134
|
+
);
|
|
135
|
+
if (
|
|
136
|
+
selection.view !== "tools" &&
|
|
137
|
+
(selection.callId ||
|
|
138
|
+
selection.toolName ||
|
|
139
|
+
selection.includeArguments ||
|
|
140
|
+
selection.includeOutput)
|
|
141
|
+
) {
|
|
142
|
+
throw new Error("callId/toolName/includeArguments/includeOutput require view=tools");
|
|
143
|
+
}
|
|
144
|
+
if (
|
|
145
|
+
continuation &&
|
|
146
|
+
((continuation.sequence === null && continuation.offset !== 0) ||
|
|
147
|
+
(continuation.sequence !== null &&
|
|
148
|
+
(continuation.sequence <= selection.after ||
|
|
149
|
+
(selection.before !== null && continuation.sequence >= selection.before))))
|
|
150
|
+
)
|
|
151
|
+
throw new Error("Invalid session_events cursor position");
|
|
152
|
+
return { selection, continuation };
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function project(event: SessionEvent, selection: Selection): Item | null {
|
|
156
|
+
if (event.duplicateOfEventId || (event.turnAssociation && event.turnAssociation !== "current"))
|
|
157
|
+
return null;
|
|
158
|
+
const p = record(event.payload);
|
|
159
|
+
const base = { sequence: event.sequence, ...(event.turnId ? { turnId: event.turnId } : {}) };
|
|
160
|
+
if (selection.view === "conversation") {
|
|
161
|
+
// Commentary stays in the conversation, labelled so a reader can tell a
|
|
162
|
+
// progress note from an answer.
|
|
163
|
+
const phase = event.type === "agent.message.completed" ? assistantMessagePhase(p) : null;
|
|
164
|
+
return typeof p.text === "string" && p.text.length > 0
|
|
165
|
+
? {
|
|
166
|
+
...base,
|
|
167
|
+
role: event.type === "user.message" ? "user" : "assistant",
|
|
168
|
+
...(phase ? { phase } : {}),
|
|
169
|
+
text: p.text,
|
|
170
|
+
}
|
|
171
|
+
: null;
|
|
172
|
+
}
|
|
173
|
+
if (selection.view === "results") {
|
|
174
|
+
if (event.type === "turn.completed" && ("maintenance" in p || "segmentLimit" in p)) return null;
|
|
175
|
+
const value = event.type === "turn.completed" ? (p.output ?? p.result) : p;
|
|
176
|
+
if (value === undefined || value === "") return null;
|
|
177
|
+
return {
|
|
178
|
+
...base,
|
|
179
|
+
type: event.type,
|
|
180
|
+
text: typeof value === "string" ? value : JSON.stringify(value),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (
|
|
184
|
+
selection.toolName &&
|
|
185
|
+
(event.type !== "agent.toolCall.created" || p.name !== selection.toolName)
|
|
186
|
+
)
|
|
187
|
+
return null;
|
|
188
|
+
const callId = p.callId ?? p.call_id ?? p.id;
|
|
189
|
+
if (selection.callId !== null && selection.callId !== callId) return null;
|
|
190
|
+
const output = event.type === "agent.toolCall.output";
|
|
191
|
+
// Choose one canonical slot. Never ship the raw receipt beside its parsed copy.
|
|
192
|
+
const value = output ? p.output : (p.arguments ?? p.args);
|
|
193
|
+
return {
|
|
194
|
+
...base,
|
|
195
|
+
callId,
|
|
196
|
+
kind: output ? "result" : "call",
|
|
197
|
+
...(typeof p.name === "string" ? { name: p.name } : {}),
|
|
198
|
+
...(p.identityOmitted === true ? { identityOmitted: true } : {}),
|
|
199
|
+
...(p.isError === true || record(value).isError === true ? { isError: true } : {}),
|
|
200
|
+
...((output ? selection.includeOutput : selection.includeArguments) && value !== undefined
|
|
201
|
+
? {
|
|
202
|
+
text: typeof value === "string" ? value : JSON.stringify(value),
|
|
203
|
+
encoding: typeof value === "string" ? "text" : "json",
|
|
204
|
+
}
|
|
205
|
+
: {}),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** Read-only projection over the existing RLS/audit query. No command observations. */
|
|
210
|
+
export async function readSessionEventView(input: SessionEventViewInput, read: ReadPage) {
|
|
211
|
+
const { selection, continuation } = resolveSessionEventView(input);
|
|
212
|
+
const limit = selection.limit!;
|
|
213
|
+
let after =
|
|
214
|
+
continuation?.sequence && selection.direction === "after"
|
|
215
|
+
? continuation.sequence - 1
|
|
216
|
+
: selection.after;
|
|
217
|
+
let before =
|
|
218
|
+
continuation?.sequence && selection.direction === "before"
|
|
219
|
+
? continuation.sequence + 1
|
|
220
|
+
: selection.before;
|
|
221
|
+
const events: Item[] = [];
|
|
222
|
+
let hasMore = false;
|
|
223
|
+
let nextCursor: string | null = null;
|
|
224
|
+
let sourceExact = true;
|
|
225
|
+
let edge: number | null = null;
|
|
226
|
+
let legacyActive = continuation?.v === 1 && continuation.sequence !== null;
|
|
227
|
+
const page = () => ({
|
|
228
|
+
view: selection.view,
|
|
229
|
+
effectiveLimit: limit,
|
|
230
|
+
direction: selection.direction,
|
|
231
|
+
events,
|
|
232
|
+
nextAfter: selection.direction === "after" ? (edge ?? selection.after) : null,
|
|
233
|
+
nextBefore: selection.direction === "before" ? (edge ?? selection.before) : null,
|
|
234
|
+
hasMore,
|
|
235
|
+
nextCursor,
|
|
236
|
+
sourceExact,
|
|
237
|
+
...(!sourceExact
|
|
238
|
+
? {
|
|
239
|
+
sourceLoss: {
|
|
240
|
+
reason: "structured_value_exceeds_budget" as const,
|
|
241
|
+
completeTextAvailable: false as const,
|
|
242
|
+
message:
|
|
243
|
+
"An oversized structured value was omitted. Scalar text remains retrievable through continuation; omitted structured values are not complete JSON results.",
|
|
244
|
+
},
|
|
245
|
+
}
|
|
246
|
+
: {}),
|
|
247
|
+
maxBytes: SESSION_EVENT_VIEW_MAX_BYTES,
|
|
248
|
+
});
|
|
249
|
+
const resume = (sequence: number, offset = 0) => {
|
|
250
|
+
hasMore = true;
|
|
251
|
+
nextCursor = encode(
|
|
252
|
+
{ ...selection, after, before },
|
|
253
|
+
sequence,
|
|
254
|
+
offset,
|
|
255
|
+
legacyActive && sequence === continuation?.sequence ? 1 : 2,
|
|
256
|
+
);
|
|
257
|
+
};
|
|
258
|
+
// Bound work even when a sparse exact callId lookup matches nothing. The
|
|
259
|
+
// returned cursor advances the scan without claiming the lookup is exhausted.
|
|
260
|
+
for (let scan = 0; scan < 64; scan += 1) {
|
|
261
|
+
const source = await read({
|
|
262
|
+
after,
|
|
263
|
+
...(before === null ? {} : { before }),
|
|
264
|
+
direction: selection.direction,
|
|
265
|
+
limit: 8,
|
|
266
|
+
includeTypes: selection.toolName ? ["agent.toolCall.created"] : types[selection.view],
|
|
267
|
+
...(selection.toolName ? { toolName: selection.toolName } : {}),
|
|
268
|
+
...(selection.callId ? { callId: selection.callId } : {}),
|
|
269
|
+
payloadMode: "full",
|
|
270
|
+
excludeUnclaimedHumanPrompts: true,
|
|
271
|
+
maxBytes: 1024 * 1024,
|
|
272
|
+
legacyUtf16: legacyActive,
|
|
273
|
+
view: selection.view,
|
|
274
|
+
includeArguments: selection.includeArguments,
|
|
275
|
+
includeOutput: selection.includeOutput,
|
|
276
|
+
...(continuation?.sequence
|
|
277
|
+
? { sourceSequence: continuation.sequence, sourceOffset: continuation.offset }
|
|
278
|
+
: {}),
|
|
279
|
+
});
|
|
280
|
+
sourceExact &&= source.fullPayloadsExact;
|
|
281
|
+
const ordered = selection.direction === "before" ? [...source.events].reverse() : source.events;
|
|
282
|
+
for (const event of ordered) {
|
|
283
|
+
const slice = source.slices?.[event.sequence];
|
|
284
|
+
const item = project(event, selection);
|
|
285
|
+
if (item) {
|
|
286
|
+
const offset = continuation?.sequence === event.sequence ? continuation.offset : 0;
|
|
287
|
+
if (slice?.omitted) {
|
|
288
|
+
delete item.text;
|
|
289
|
+
item.sourceOmitted = { reason: "structured_value_exceeds_budget", complete: false };
|
|
290
|
+
}
|
|
291
|
+
const advance = (text: string) =>
|
|
292
|
+
slice?.unit === "codepoint" ? Array.from(text).length : text.length;
|
|
293
|
+
if (!slice && offset > (item.text?.length ?? 0))
|
|
294
|
+
throw new Error("Invalid message continuation offset");
|
|
295
|
+
if (
|
|
296
|
+
!slice &&
|
|
297
|
+
offset > 0 &&
|
|
298
|
+
item.text &&
|
|
299
|
+
/[\uD800-\uDBFF]/.test(item.text[offset - 1]!) &&
|
|
300
|
+
/[\uDC00-\uDFFF]/.test(item.text[offset] ?? "")
|
|
301
|
+
) {
|
|
302
|
+
throw new Error("Invalid message continuation offset: splits a surrogate pair");
|
|
303
|
+
}
|
|
304
|
+
if (!slice && offset > 0 && item.text) item.text = item.text.slice(offset);
|
|
305
|
+
events.push(item);
|
|
306
|
+
// Reserve enough for the bounded cursor and fragment facts.
|
|
307
|
+
if (bytes(page()) > SESSION_EVENT_VIEW_MAX_BYTES - 4096) {
|
|
308
|
+
events.pop();
|
|
309
|
+
if (events.length > 0) {
|
|
310
|
+
resume(event.sequence, offset);
|
|
311
|
+
if (selection.direction === "before") events.reverse();
|
|
312
|
+
return page();
|
|
313
|
+
}
|
|
314
|
+
if (!item.text) throw new Error("Session event identity exceeds page budget");
|
|
315
|
+
const text = item.text;
|
|
316
|
+
let low = 0;
|
|
317
|
+
let high = text.length;
|
|
318
|
+
while (low < high) {
|
|
319
|
+
const mid = Math.ceil((low + high) / 2);
|
|
320
|
+
if (bytes({ ...item, text: text.slice(0, mid) }) <= SESSION_EVENT_VIEW_MAX_BYTES - 6000)
|
|
321
|
+
low = mid;
|
|
322
|
+
else high = mid - 1;
|
|
323
|
+
}
|
|
324
|
+
// Do not split a UTF-16 surrogate pair (UTF-8 remains lossless).
|
|
325
|
+
if (low > 0 && /[\uD800-\uDBFF]/.test(text[low - 1]!)) low -= 1;
|
|
326
|
+
if (low === 0) throw new Error("Session event identity exceeds page budget");
|
|
327
|
+
events.push({
|
|
328
|
+
...item,
|
|
329
|
+
text: text.slice(0, low),
|
|
330
|
+
fragment: {
|
|
331
|
+
offset,
|
|
332
|
+
nextOffset: offset + advance(text.slice(0, low)),
|
|
333
|
+
complete: false,
|
|
334
|
+
unit: slice?.unit ?? "utf16",
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
resume(event.sequence, offset + advance(text.slice(0, low)));
|
|
338
|
+
return page();
|
|
339
|
+
}
|
|
340
|
+
const nextOffset = offset + advance(item.text ?? "");
|
|
341
|
+
if (slice && !slice.omitted && nextOffset < slice.total) {
|
|
342
|
+
item.fragment = { offset, nextOffset, complete: false, unit: slice.unit };
|
|
343
|
+
resume(event.sequence, nextOffset);
|
|
344
|
+
if (selection.direction === "before") events.reverse();
|
|
345
|
+
return page();
|
|
346
|
+
}
|
|
347
|
+
if (offset > 0)
|
|
348
|
+
item.fragment = {
|
|
349
|
+
offset,
|
|
350
|
+
nextOffset,
|
|
351
|
+
complete: true,
|
|
352
|
+
unit: slice?.unit ?? "utf16",
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
edge = event.sequence;
|
|
356
|
+
legacyActive = false;
|
|
357
|
+
if (selection.direction === "after") after = event.sequence;
|
|
358
|
+
else before = event.sequence;
|
|
359
|
+
if (events.length >= limit) {
|
|
360
|
+
hasMore = source.hasMore || event !== ordered.at(-1);
|
|
361
|
+
nextCursor = hasMore ? encode({ ...selection, after, before }) : null;
|
|
362
|
+
if (selection.direction === "before") events.reverse();
|
|
363
|
+
return page();
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
// Metadata selection can advance over stale/duplicate rows without a
|
|
367
|
+
// projected payload. Use its covered edge rather than repeating the page.
|
|
368
|
+
if (source.coveredSequence) {
|
|
369
|
+
if (selection.direction === "after") after = Math.max(after, source.coveredSequence.last);
|
|
370
|
+
else before = Math.min(before ?? Infinity, source.coveredSequence.first);
|
|
371
|
+
}
|
|
372
|
+
if (!source.hasMore) {
|
|
373
|
+
hasMore = false;
|
|
374
|
+
nextCursor = null;
|
|
375
|
+
if (selection.direction === "before") events.reverse();
|
|
376
|
+
return page();
|
|
377
|
+
}
|
|
378
|
+
hasMore = true;
|
|
379
|
+
nextCursor = encode({ ...selection, after, before });
|
|
380
|
+
}
|
|
381
|
+
if (selection.direction === "before") events.reverse();
|
|
382
|
+
return page();
|
|
383
|
+
}
|
package/src/mcp/session-view.ts
CHANGED
|
@@ -17,11 +17,14 @@ import type {
|
|
|
17
17
|
SessionEventPayloadMode,
|
|
18
18
|
SessionEventReadDirection,
|
|
19
19
|
SessionEventReadMode,
|
|
20
|
+
SessionMcpMonitoringSource,
|
|
21
|
+
SessionQueueSnapshot,
|
|
20
22
|
} from "@opengeni/contracts";
|
|
21
23
|
import {
|
|
22
24
|
boundSessionEventPayload,
|
|
23
25
|
measureSessionEventJson,
|
|
24
26
|
sessionEventJsonBytes,
|
|
27
|
+
compactSessionMcpDetail,
|
|
25
28
|
} from "@opengeni/contracts";
|
|
26
29
|
|
|
27
30
|
export const SESSION_EVENT_MCP_MAX_BYTES = 64 * 1024;
|
|
@@ -479,12 +482,82 @@ function projectMonitoringContainer(
|
|
|
479
482
|
};
|
|
480
483
|
}
|
|
481
484
|
|
|
482
|
-
|
|
485
|
+
const SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT = 12;
|
|
486
|
+
|
|
487
|
+
function projectEffectiveToolPolicy(value: Session["effectiveToolPolicy"]): {
|
|
488
|
+
value: unknown;
|
|
489
|
+
fact: SessionDetailFieldFact;
|
|
490
|
+
details: string[];
|
|
491
|
+
} {
|
|
492
|
+
if (!value) return projectMonitoringContainer(null, 16_000);
|
|
493
|
+
const sample = (ids: string[]) => ids.slice(0, SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT);
|
|
494
|
+
const sampled =
|
|
495
|
+
value.selectedIds.length > SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT ||
|
|
496
|
+
value.effectiveIds.length > SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT ||
|
|
497
|
+
value.mandatoryIds.length > SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT ||
|
|
498
|
+
value.lazyRouter.deferredIds.length > SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT ||
|
|
499
|
+
value.configuredIds.length > SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT ||
|
|
500
|
+
value.droppedIds.length > SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT;
|
|
501
|
+
const bounded = {
|
|
502
|
+
...value,
|
|
503
|
+
selectedIds: sample(value.selectedIds),
|
|
504
|
+
effectiveIds: sample(value.effectiveIds),
|
|
505
|
+
mandatoryIds: sample(value.mandatoryIds),
|
|
506
|
+
lazyRouter: { ...value.lazyRouter, deferredIds: sample(value.lazyRouter.deferredIds) },
|
|
507
|
+
configuredIds: sample(value.configuredIds),
|
|
508
|
+
droppedIds: sample(value.droppedIds),
|
|
509
|
+
idsTruncated: value.idsTruncated || sampled,
|
|
510
|
+
};
|
|
511
|
+
const projected = projectMonitoringContainer(bounded, 16_000);
|
|
512
|
+
const sourceMeasurement = measureSessionEventJson(value);
|
|
513
|
+
return {
|
|
514
|
+
...projected,
|
|
515
|
+
fact: {
|
|
516
|
+
...projected.fact,
|
|
517
|
+
truncated:
|
|
518
|
+
sampled ||
|
|
519
|
+
projected.fact.truncated ||
|
|
520
|
+
sourceMeasurement.bytes === null ||
|
|
521
|
+
sourceMeasurement.bytes !== projected.fact.deliveredBytes,
|
|
522
|
+
originalBytes: sourceMeasurement.bytes,
|
|
523
|
+
...(sourceMeasurement.bytes === null ? { measurementBounded: true } : {}),
|
|
524
|
+
},
|
|
525
|
+
details: sampled
|
|
526
|
+
? [
|
|
527
|
+
`effectiveToolPolicy: ids sampled at ${SESSION_DETAIL_EFFECTIVE_TOOL_POLICY_ID_LIMIT} per set; counts remain exact`,
|
|
528
|
+
...projected.details,
|
|
529
|
+
]
|
|
530
|
+
: projected.details,
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
/** Compact management state; configuration is deliberately excluded, not truncated. */
|
|
535
|
+
export function boundSessionCompactDetailMcp(
|
|
536
|
+
session: Session,
|
|
537
|
+
monitoring: SessionMcpMonitoringSource,
|
|
538
|
+
queue: SessionQueueSnapshot | null,
|
|
539
|
+
maxBytes = SESSION_DETAIL_MCP_MAX_BYTES,
|
|
540
|
+
) {
|
|
541
|
+
const result = compactSessionMcpDetail(session, monitoring, queue);
|
|
542
|
+
// Never drop a goal outcome or blocker to fit. The ordinary closed shape fits;
|
|
543
|
+
// an unsupported envelope must fail explicitly rather than erase management truth.
|
|
544
|
+
if (prettyJsonBytes(result) > maxBytes) {
|
|
545
|
+
throw new RangeError(`session_get compact projection exceeds its ${maxBytes}-byte envelope`);
|
|
546
|
+
}
|
|
547
|
+
return result;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
/** Legacy bounded configuration projection for explicit `session_get detail=full`. */
|
|
483
551
|
export function boundSessionDetailMcp(
|
|
484
552
|
session: Session,
|
|
485
553
|
effectiveControl: unknown = session.effectiveControl,
|
|
486
554
|
maxBytes = SESSION_DETAIL_MCP_MAX_BYTES,
|
|
487
555
|
) {
|
|
556
|
+
const variableSetIds = session.variableSetIds;
|
|
557
|
+
// The plural selection is authoritative. Keep the singular/environment
|
|
558
|
+
// fields only as final-entry compatibility aliases so they cannot be read as
|
|
559
|
+
// complete attachment membership by newer consumers.
|
|
560
|
+
const variableSetId = variableSetIds.at(-1) ?? null;
|
|
488
561
|
const title = session.title === null ? null : modelStringProjection(session.title, 512);
|
|
489
562
|
const initialMessage = modelStringProjection(session.initialMessage, 4_000);
|
|
490
563
|
const instructions =
|
|
@@ -494,6 +567,7 @@ export function boundSessionDetailMcp(
|
|
|
494
567
|
const tools = projectMonitoringContainer(session.tools, 4_000);
|
|
495
568
|
const mcpServers = projectMonitoringContainer(session.mcpServers, 3_000);
|
|
496
569
|
const permissions = projectMonitoringContainer(session.firstPartyMcpPermissions, 1_500);
|
|
570
|
+
const effectiveToolPolicy = projectEffectiveToolPolicy(session.effectiveToolPolicy);
|
|
497
571
|
const control = projectMonitoringContainer(effectiveControl, 2_000);
|
|
498
572
|
const fieldFacts: Record<string, SessionDetailFieldFact> = {
|
|
499
573
|
title: title?.fact ?? {
|
|
@@ -512,6 +586,7 @@ export function boundSessionDetailMcp(
|
|
|
512
586
|
tools: tools.fact,
|
|
513
587
|
mcpServers: mcpServers.fact,
|
|
514
588
|
firstPartyMcpPermissions: permissions.fact,
|
|
589
|
+
effectiveToolPolicy: effectiveToolPolicy.fact,
|
|
515
590
|
effectiveControl: control.fact,
|
|
516
591
|
};
|
|
517
592
|
const details = [
|
|
@@ -520,6 +595,7 @@ export function boundSessionDetailMcp(
|
|
|
520
595
|
...tools.details,
|
|
521
596
|
...mcpServers.details,
|
|
522
597
|
...permissions.details,
|
|
598
|
+
...effectiveToolPolicy.details,
|
|
523
599
|
...control.details,
|
|
524
600
|
].slice(0, 32);
|
|
525
601
|
const result = {
|
|
@@ -535,16 +611,20 @@ export function boundSessionDetailMcp(
|
|
|
535
611
|
tools: tools.value,
|
|
536
612
|
metadata: metadata.value,
|
|
537
613
|
model: modelStringProjection(session.model, 512).value,
|
|
614
|
+
reasoningEffort: session.reasoningEffort,
|
|
615
|
+
latencyMode: session.latencyMode,
|
|
538
616
|
sandboxBackend: modelStringProjection(session.sandboxBackend, 128).value,
|
|
539
617
|
sandboxOs: session.sandboxOs,
|
|
540
618
|
sandboxGroupId: session.sandboxGroupId,
|
|
541
619
|
activeSandboxId: session.activeSandboxId,
|
|
542
620
|
activeEpoch: session.activeEpoch,
|
|
543
|
-
|
|
544
|
-
|
|
621
|
+
variableSetIds,
|
|
622
|
+
variableSetId,
|
|
623
|
+
environmentId: variableSetId,
|
|
545
624
|
rigId: session.rigId,
|
|
546
625
|
rigVersionId: session.rigVersionId,
|
|
547
626
|
firstPartyMcpPermissions: permissions.value,
|
|
627
|
+
effectiveToolPolicy: effectiveToolPolicy.value,
|
|
548
628
|
mcpServers: mcpServers.value,
|
|
549
629
|
parentSessionId: session.parentSessionId,
|
|
550
630
|
createIdempotencyKey:
|
|
@@ -594,6 +674,7 @@ export function boundSessionDetailMcp(
|
|
|
594
674
|
["mcpServers", fieldFacts.mcpServers!],
|
|
595
675
|
["effectiveControl", fieldFacts.effectiveControl!],
|
|
596
676
|
["firstPartyMcpPermissions", fieldFacts.firstPartyMcpPermissions!],
|
|
677
|
+
["effectiveToolPolicy", fieldFacts.effectiveToolPolicy!],
|
|
597
678
|
];
|
|
598
679
|
for (const [field, fact] of fallbackContainers) {
|
|
599
680
|
if (result.projection.bytes <= maxBytes) break;
|