@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
|
@@ -1,25 +1,47 @@
|
|
|
1
|
-
import { type FileResourceRef, type WorkspaceSlackReactionSummonSettings } from "@opengeni/contracts";
|
|
1
|
+
import { type FileResourceRef, type FirstPartyMcpToolName, type WorkspaceSlackReactionSummonSettings } from "@opengeni/contracts";
|
|
2
|
+
import { type ParsedSessionUsageLimitReachedRefusal } from "@opengeni/contracts/session-usage-limit-refusal";
|
|
3
|
+
import { type Settings } from "@opengeni/config";
|
|
2
4
|
import { type SlackInstallationRoute, type SlackInteraction, type SlackInteractionInboxEntry, type SlackInteractionTriggerKind } from "@opengeni/db";
|
|
3
5
|
import { type ApiRouteDeps } from "@opengeni/core";
|
|
4
6
|
import type { Hono } from "hono";
|
|
7
|
+
import { HTTPException } from "hono/http-exception";
|
|
5
8
|
import { type OpenGeniSlackBotClient, type SlackMessageBlock } from "./slack-bot.js";
|
|
6
9
|
import { type ImportedSlackReactionImage } from "../slack-reaction-files.js";
|
|
7
10
|
export declare const SLACK_INTERACTION_MAX_BODY_BYTES: number;
|
|
8
11
|
export declare const SLACK_SIGNATURE_REPLAY_WINDOW_SECONDS = 300;
|
|
9
12
|
export declare const SLACK_DELIVERY_EVENT_TYPES: readonly ["agent.message.completed", "session.humanInput.requested", "session.requiresAction", "turn.completed", "turn.failed", "turn.cancelled", "session.status.changed", "system.update.pending", "goal.paused"];
|
|
13
|
+
/**
|
|
14
|
+
* The thread line when a task stops at its usage limit: the amounts when the
|
|
15
|
+
* stop marker carries them, what a person can do, and a link to the task.
|
|
16
|
+
* API-equivalent model usage, never credits, billing or a monthly reset.
|
|
17
|
+
*/
|
|
18
|
+
export declare function slackSessionUsageLimitStopText(input: {
|
|
19
|
+
mention: string;
|
|
20
|
+
refusal: Pick<ParsedSessionUsageLimitReachedRefusal, "limitMicros" | "usedMicros"> | null;
|
|
21
|
+
link: string | null;
|
|
22
|
+
}): string;
|
|
10
23
|
/**
|
|
11
24
|
* Slack delivery restrictions are durable session-level authority, not
|
|
12
|
-
* attacker-adjacent user-message context. Migration 0240
|
|
13
|
-
* policy onto
|
|
25
|
+
* attacker-adjacent user-message context. Migration 0240 backfilled the original
|
|
26
|
+
* policy onto pre-cutover Slack sessions. Changes here apply to new sessions;
|
|
27
|
+
* historical stored instructions require a separately reviewed migration.
|
|
14
28
|
*/
|
|
15
29
|
export declare const SLACK_SESSION_INSTRUCTIONS: string;
|
|
16
30
|
/**
|
|
17
31
|
* Slack-originated tasks may retrieve the workspace bot's bounded read surface
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
32
|
+
* and explicitly deliver a retained task file to their own thread. These tools
|
|
33
|
+
* are guaranteed on top of the defaults a Slack session follows; ordinary
|
|
34
|
+
* interaction messages remain owned by the durable delivery pump.
|
|
35
|
+
*/
|
|
36
|
+
export declare const SLACK_TASK_FIRST_PARTY_MCP_TOOLS: ("admin_action_call" | "admin_action_describe" | "admin_actions_search" | "artifacts_archive" | "artifacts_create" | "artifacts_get_source" | "artifacts_list" | "artifacts_prepare_upload" | "artifacts_publish" | "artifacts_restore" | "artifacts_rollback" | "atlassian_get" | "atlassian_search" | "atlassian_sources_list" | "browser_act" | "browser_auth" | "browser_clipboard" | "browser_debug" | "browser_download_save" | "browser_downloads" | "browser_identity" | "browser_lifecycle" | "browser_observe" | "browser_open" | "browser_publish" | "browser_read" | "browser_screenshot" | "browser_tabs" | "capability_authorization_request" | "capability_catalog_search" | "command_read" | "command_wait" | "company_profile_confirm" | "company_profile_propose" | "computer_act" | "computer_clipboard" | "computer_lifecycle" | "computer_observe" | "computer_open" | "computer_targets" | "connected_machine_enable_screen_control" | "connected_machine_enroll_token" | "connected_machine_remove" | "custom_mcp_setup_request" | "editable_artifact_apply" | "editable_artifact_create" | "editable_artifact_export" | "editable_artifact_export_status" | "editable_artifact_get" | "editable_artifact_import" | "editable_artifact_inspect" | "editable_artifact_list" | "environment_list" | "environment_set_variable" | "fiken_bank_accounts_list" | "fiken_companies_list" | "fiken_contact_create" | "fiken_contacts_list" | "fiken_invoice_draft_create" | "fiken_invoice_get" | "fiken_invoices_list" | "fiken_products_list" | "fiken_purchases_list" | "fiken_sales_list" | "github_connect_link" | "github_repositories_list" | "goal_complete" | "goal_pause" | "goal_progress" | "goal_resume" | "goal_set" | "goal_update" | "inbox_tidy" | "instruction_policy_get" | "instruction_policy_propose" | "instruction_policy_save" | "interaction_discover" | "interaction_request_human" | "knowledge_archive" | "knowledge_browse" | "knowledge_correct" | "knowledge_get" | "knowledge_prepare_save" | "knowledge_propose" | "knowledge_retain_file" | "knowledge_retain_message" | "knowledge_save" | "knowledge_search" | "memory_correct" | "memory_save" | "memory_search" | "notification_withdraw" | "notify_user" | "preference_propose" | "preference_registry_get" | "preference_registry_summary" | "project_create" | "project_delete" | "project_get" | "project_list" | "project_reorder" | "project_update" | "reddit_accounts_list" | "reddit_mentions_live" | "reddit_post_reply" | "reddit_posts_sync" | "reddit_search_live" | "reddit_thread_fetch" | "remember" | "remember_confirm" | "rig_get" | "rig_list" | "rig_promote" | "rig_propose_change" | "rig_verify" | "run_on" | "sandbox_attach" | "sandbox_file_publish" | "sandbox_provision" | "sandbox_swap" | "sandboxes_list" | "scheduled_task_runs_list" | "scheduled_tasks_create" | "scheduled_tasks_delete" | "scheduled_tasks_get" | "scheduled_tasks_list" | "scheduled_tasks_pause" | "scheduled_tasks_resume" | "scheduled_tasks_trigger" | "scheduled_tasks_update" | "secret_delete" | "secret_get" | "secret_move" | "secret_save" | "secret_search" | "session_create" | "session_events" | "session_get" | "session_human_input_respond" | "session_message_status" | "session_pause" | "session_resume" | "session_send_message" | "session_set_model" | "session_set_project" | "session_steer" | "session_target_get" | "session_target_set" | "session_wait" | "sessions_list" | "set_other_session_title" | "set_session_title" | "site_data_define_collection" | "site_data_describe" | "site_data_export" | "site_data_import" | "site_data_query" | "site_data_reset" | "site_data_write" | "site_files_delete" | "site_files_list" | "site_files_upload" | "site_hostname_check" | "site_publication_apply_fix" | "site_publication_get" | "site_publication_update" | "site_sql_define_query" | "site_sql_enable" | "site_sql_execute" | "site_sql_export" | "site_sql_import" | "site_sql_inspect" | "site_sql_migrate" | "site_sql_query" | "site_sql_reset" | "site_sql_run" | "slack_bot_channel_history" | "slack_bot_delete_message" | "slack_bot_file_content" | "slack_bot_file_info" | "slack_bot_list_channels" | "slack_bot_list_files" | "slack_bot_list_users" | "slack_bot_post_message" | "slack_bot_prepare_message" | "slack_bot_search" | "slack_bot_send_prepared_message" | "slack_bot_thread_replies" | "slack_bot_upload_file" | "social_connections_list" | "social_daily_analysis_context" | "social_mentions_live" | "social_post_reply" | "social_posts_recent" | "social_posts_sync" | "social_search_live" | "social_thread_fetch" | "task_note_archive" | "task_note_promote_instruction_policy" | "task_note_promote_knowledge" | "task_note_promote_preference" | "task_note_replace" | "task_note_save" | "task_notes_list" | "variable_set_get_variable" | "variable_set_list" | "variable_set_set_variable" | "wait_for_input" | "work_claim_release" | "work_claim_upsert" | "x_accounts_list" | "x_mentions_live" | "x_post_reply" | "x_posts_sync" | "x_search_live" | "x_thread_fetch")[];
|
|
37
|
+
/** The Slack task tools that are not already default built-in tools. */
|
|
38
|
+
export declare const SLACK_TASK_ADDITIONAL_FIRST_PARTY_MCP_TOOLS: readonly FirstPartyMcpToolName[];
|
|
39
|
+
/**
|
|
40
|
+
* The workspace's default first-party selection (or the deployment default)
|
|
41
|
+
* plus the bounded Slack task tools. These are added whatever the base is, then
|
|
42
|
+
* intersected with deployment policy; existing accepted selections stay frozen.
|
|
21
43
|
*/
|
|
22
|
-
export declare
|
|
44
|
+
export declare function slackTaskFirstPartyMcpTools(settings: Settings, workspaceSettings: unknown): FirstPartyMcpToolName[];
|
|
23
45
|
export type NormalizedSlackInteraction = {
|
|
24
46
|
providerEventId: string;
|
|
25
47
|
providerMessageId: string;
|
|
@@ -84,14 +106,69 @@ export declare function withWorkspaceLine(label: string | null, text: string, bl
|
|
|
84
106
|
* id on the label rather than on the release: a labelled interaction can only
|
|
85
107
|
* have been created by an image that already renders the line, and every
|
|
86
108
|
* pre-existing and unlabelled interaction keeps its exact ledger identity.
|
|
109
|
+
*
|
|
110
|
+
* A compact interaction (one with a frozen `startMessageLine`) names its
|
|
111
|
+
* workspace once, on its first message, and nowhere else. For a labelled one
|
|
112
|
+
* that is again different bytes from what an older image renders for the same
|
|
113
|
+
* message, so its ids move once more, to `:v3`. Unlabelled interactions render
|
|
114
|
+
* the same bytes in both formats and keep their ids.
|
|
115
|
+
*/
|
|
116
|
+
export declare function slackPostSeed(interaction: Pick<SlackInteraction, "routedWorkspaceLabel" | "startMessageLine">, seed: string): string;
|
|
117
|
+
/**
|
|
118
|
+
* The acknowledgement seed for interactions that already carry a frozen
|
|
119
|
+
* "Using" line from before new acknowledgements stopped including it.
|
|
120
|
+
*
|
|
121
|
+
* The old line was written once at session bind and never changes, so a
|
|
122
|
+
* historical retry must keep the same ledger identity and bytes. New
|
|
123
|
+
* interactions bind no line and use the original acknowledgement seed.
|
|
124
|
+
*/
|
|
125
|
+
export declare function slackDefaultsLinePostSeed(interaction: Pick<SlackInteraction, "sessionDefaultsLine">, seed: string): string;
|
|
126
|
+
/**
|
|
127
|
+
* The post operation of an interaction's first message.
|
|
128
|
+
*
|
|
129
|
+
* A compact first message shares no bytes with anything an older image renders
|
|
130
|
+
* for the same interaction, so it has its own seed: an older image repairing it
|
|
131
|
+
* during a rolling deploy posts a second message rather than wedging on a digest
|
|
132
|
+
* conflict. Every handle on the first message carries this id.
|
|
133
|
+
*/
|
|
134
|
+
export declare function slackAcknowledgementOperationId(interaction: Pick<SlackInteraction, "id" | "routedWorkspaceLabel" | "sessionDefaultsLine" | "startMessageLine">): string;
|
|
135
|
+
/** Where a compact task's first message says the task came from. */
|
|
136
|
+
export type SlackStartMessageOrigin = {
|
|
137
|
+
kind: "task";
|
|
138
|
+
} | {
|
|
139
|
+
kind: "private_dm_message";
|
|
140
|
+
} | {
|
|
141
|
+
kind: "private_conversation";
|
|
142
|
+
} | {
|
|
143
|
+
kind: "reaction";
|
|
144
|
+
emoji: string;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* The opening sentence of a new task's first Slack message.
|
|
148
|
+
*
|
|
149
|
+
* The sentence itself links to the session, and a routed workspace is named
|
|
150
|
+
* inline, here and on no other message. The private variants keep their privacy
|
|
151
|
+
* sentence, and the reaction variant keeps its how-to, because a reaction-started
|
|
152
|
+
* task has no button and never shows the one-time hint.
|
|
153
|
+
*
|
|
154
|
+
* Rendered once when the session binds and frozen as `startMessageLine`, so a
|
|
155
|
+
* later change to the web base URL or the workspace name cannot change the bytes
|
|
156
|
+
* of a message the post and update ledgers already hold.
|
|
87
157
|
*/
|
|
88
|
-
export declare function
|
|
158
|
+
export declare function renderSlackStartMessageLine(input: {
|
|
159
|
+
sessionUrl: string;
|
|
160
|
+
routedWorkspaceLabel: string | null;
|
|
161
|
+
origin: SlackStartMessageOrigin;
|
|
162
|
+
}): string;
|
|
89
163
|
export type SlackInvocationMessageContext = {
|
|
90
164
|
messages: Awaited<ReturnType<OpenGeniSlackBotClient["threadReplies"]>>["messages"];
|
|
91
165
|
nextCursor: string | null;
|
|
92
166
|
kind: "thread" | "channel";
|
|
167
|
+
unavailable?: "rate_limited" | "attachments_only";
|
|
93
168
|
};
|
|
94
|
-
|
|
169
|
+
/** Context is optional; only Slack's explicit history throttling may be omitted. */
|
|
170
|
+
export declare function loadSlackInvocationMessageContext(client: Pick<OpenGeniSlackBotClient, "threadReplies" | "channelHistory">, entry: Pick<SlackInteractionInboxEntry, "slackChannelId" | "slackThreadTs" | "slackMessageTs">, authorizeRead?: () => Promise<void>, exactMessageOnly?: boolean): Promise<SlackInvocationMessageContext>;
|
|
171
|
+
export declare function slackInvocationModelContext(invocationTimestamp: string, context: SlackInvocationMessageContext, channelId?: string): string;
|
|
95
172
|
type SlackReactionMessageContext = Awaited<ReturnType<OpenGeniSlackBotClient["reactionMessageContext"]>>;
|
|
96
173
|
type PreparedSlackReactionTask = Readonly<{
|
|
97
174
|
resources: FileResourceRef[];
|
|
@@ -99,9 +176,10 @@ type PreparedSlackReactionTask = Readonly<{
|
|
|
99
176
|
omissionCodes: string[];
|
|
100
177
|
omittedCount: number;
|
|
101
178
|
}>;
|
|
102
|
-
export declare function slackReactionTaskText(context: SlackReactionMessageContext, prepared?: PreparedSlackReactionTask): string;
|
|
179
|
+
export declare function slackReactionTaskText(context: SlackReactionMessageContext, prepared?: PreparedSlackReactionTask, channelId?: string): string;
|
|
103
180
|
export declare function slackDeliveryTextsCoalesce(left: string, right: string): boolean;
|
|
104
181
|
export declare function normalizedBlockActionInteraction(payload: Record<string, unknown>): NormalizedSlackInteraction;
|
|
182
|
+
export declare function slackSecretAnswerRefusalText(sessionUrl: string | null): string;
|
|
105
183
|
export declare function isSlackInfoCommand(text: string): boolean;
|
|
106
184
|
type SlackUserLinkToken = {
|
|
107
185
|
workspaceId: string;
|
|
@@ -112,4 +190,5 @@ type SlackUserLinkToken = {
|
|
|
112
190
|
};
|
|
113
191
|
export declare function createSlackUserLinkToken(signingSecret: string, entry: Pick<SlackInteractionInboxEntry, "workspaceId" | "connectionId" | "slackTeamId" | "slackUserId">, nowMs?: number): string;
|
|
114
192
|
export declare function verifySlackUserLinkToken(signingSecret: string, token: string, nowMs?: number): SlackUserLinkToken | null;
|
|
193
|
+
export declare function slackAdmissionFailureText(error: HTTPException): string;
|
|
115
194
|
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown to Slack mrkdwn for model-authored text Opengeni posts to Slack.
|
|
3
|
+
*
|
|
4
|
+
* Agents write ordinary Markdown because the same reply renders as Markdown in
|
|
5
|
+
* the Opengeni console. Slack message text does not render Markdown headings,
|
|
6
|
+
* `**bold**`, or `[label](url)` links, so a reply that reads well in the
|
|
7
|
+
* console arrives in Slack full of literal syntax. This rewrites only that
|
|
8
|
+
* syntax, only for the bytes handed to Slack: stored session events, model
|
|
9
|
+
* history, and every other surface keep the model's exact text. It is
|
|
10
|
+
* formatting at a third-party sink, not content classification or redaction.
|
|
11
|
+
*
|
|
12
|
+
* Code is never rewritten: fenced code blocks keep every line between their
|
|
13
|
+
* fences, and inline code spans are copied as they are.
|
|
14
|
+
*
|
|
15
|
+
* The output is part of the Slack post and update ledgers' request digest, so a
|
|
16
|
+
* change to it changes the bytes an in-flight operation is bound to. Delivery
|
|
17
|
+
* (`deliverSlackModelText` in `slack-interactions.ts`) falls back only to the
|
|
18
|
+
* unformatted text; a later output change must keep the previous rendering
|
|
19
|
+
* reachable the same way, or operations started before the deploy conflict on
|
|
20
|
+
* every retry.
|
|
21
|
+
*/
|
|
22
|
+
/** Remove provider citation handles and any stray citation delimiters. */
|
|
23
|
+
export declare function stripProviderCitationMarkers(text: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Rewrite common Markdown as Slack mrkdwn.
|
|
26
|
+
*
|
|
27
|
+
* - `# Heading` (any level) becomes a bold line.
|
|
28
|
+
* - `**bold**` and `__bold__` become `*bold*`, `***both***` becomes `*_both_*`,
|
|
29
|
+
* and `~~struck~~` becomes `~struck~`.
|
|
30
|
+
* - `[label](https://...)` becomes `<https://...|label>`.
|
|
31
|
+
* - `-`, `*`, and `+` bullets become Slack's `•` bullet, keeping indentation;
|
|
32
|
+
* numbered lists and block quotes are already Slack syntax and stay as they are.
|
|
33
|
+
* - Fenced code blocks, at any indentation, keep their contents byte for byte.
|
|
34
|
+
* The opening fence loses its language tag, which Slack would otherwise print
|
|
35
|
+
* as the first code line, and an unclosed block is closed so Slack still
|
|
36
|
+
* renders it as code.
|
|
37
|
+
* - Provider citation handles are removed.
|
|
38
|
+
*
|
|
39
|
+
* Text that uses none of this syntax comes back unchanged.
|
|
40
|
+
*/
|
|
41
|
+
export declare function slackMrkdwnFromMarkdown(markdown: string): string;
|
|
@@ -48,7 +48,7 @@ export declare function isSlackDirectMessageConversation(entry: Pick<SlackIntera
|
|
|
48
48
|
* Split a leading bot mention off the message text.
|
|
49
49
|
*
|
|
50
50
|
* Slack delivers an `app_mention` with the mention still in the text
|
|
51
|
-
* (`<@U123> do the thing`), and
|
|
51
|
+
* (`<@U123> do the thing`), and Opengeni stores it verbatim. The workspace
|
|
52
52
|
* prefix is only an override when it is the first thing the person typed, so it
|
|
53
53
|
* is parsed after the mention rather than at byte 0 of the raw text. Everything
|
|
54
54
|
* split off here is put back, so the message the model sees is unchanged apart
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type AccessGrant, type GitHubRepository, type RepositoryResourceRef } from "@opengeni/contracts";
|
|
2
|
+
import { type ApiRouteDeps } from "@opengeni/core";
|
|
3
|
+
/**
|
|
4
|
+
* A Slack task starts with at most this many repositories. Each one is a
|
|
5
|
+
* shallow, blob-filtered fetch before the first command, so the set stays
|
|
6
|
+
* small: the person's own most recently used repositories, not a catalog.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SLACK_SESSION_RECENT_REPOSITORY_LIMIT = 5;
|
|
9
|
+
/** How far back the person's own sessions count as recent use. */
|
|
10
|
+
export declare const SLACK_SESSION_RECENT_REPOSITORY_WINDOW_MS: number;
|
|
11
|
+
/**
|
|
12
|
+
* Pick a Slack task's repositories: the person's recently used repositories,
|
|
13
|
+
* in recency order, that the workspace GitHub App catalog still offers them.
|
|
14
|
+
*
|
|
15
|
+
* `recent` is a usage signal only, and only repositories the person attached
|
|
16
|
+
* themselves count: an automatically attached (`optional`) one never does. A
|
|
17
|
+
* repository reaches the task only through its current catalog entry (the
|
|
18
|
+
* same catalog and `github:use` permission as the website picker), on its
|
|
19
|
+
* default branch, so a Slack task never reaches a repository the person could
|
|
20
|
+
* not attach on the website today. Archived and
|
|
21
|
+
* empty repositories are skipped when GitHub reported that, because a clone of
|
|
22
|
+
* an empty repository has nothing to check out. Every returned resource is
|
|
23
|
+
* best effort (`optional`): one failed clone warns instead of failing setup.
|
|
24
|
+
*/
|
|
25
|
+
export declare function selectRecentRepositoryResources(recent: readonly RepositoryResourceRef[], catalog: readonly GitHubRepository[], limit?: number): RepositoryResourceRef[];
|
|
26
|
+
/**
|
|
27
|
+
* The repositories a new Slack task starts with: the person's own recently
|
|
28
|
+
* used repositories in this workspace (their own top-level sessions active in
|
|
29
|
+
* the last 30 days, most recent first, at most five), limited to what the
|
|
30
|
+
* workspace GitHub App catalog offers them now. None when they have none; the
|
|
31
|
+
* agent can still find and clone repositories through its GitHub tools.
|
|
32
|
+
*
|
|
33
|
+
* GitHub is asked only when there is something to look up. A GitHub outage or
|
|
34
|
+
* an unconfigured App starts the task without repositories instead of failing
|
|
35
|
+
* it, with a log line for diagnosis.
|
|
36
|
+
*/
|
|
37
|
+
export declare function slackRecentRepositoryResources(deps: ApiRouteDeps, grant: Pick<AccessGrant, "permissions" | "subjectId">, workspaceId: string, now?: Date): Promise<RepositoryResourceRef[]>;
|
|
38
|
+
export type OtherDeploymentLink = {
|
|
39
|
+
url: string;
|
|
40
|
+
host: string;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Opengeni workspace or session links in `text` that point at a sibling
|
|
44
|
+
* deployment of this one (for example staging versus production).
|
|
45
|
+
*
|
|
46
|
+
* A sibling is a different host under the same parent domain as this
|
|
47
|
+
* deployment's web origin, carrying Opengeni's own route shape. Anything else
|
|
48
|
+
* is left alone: an unrelated product's URL must never be described as
|
|
49
|
+
* another Opengeni.
|
|
50
|
+
*/
|
|
51
|
+
export declare function otherDeploymentLinks(text: string, webBaseUrl: string | null | undefined): OtherDeploymentLink[];
|
|
52
|
+
/**
|
|
53
|
+
* Model context for links to another Opengeni deployment. A session id from
|
|
54
|
+
* one deployment does not exist in another, so without this the agent reports
|
|
55
|
+
* "Session not found or access denied" and asks for access that no grant in
|
|
56
|
+
* this deployment can give.
|
|
57
|
+
*/
|
|
58
|
+
export declare function otherDeploymentLinkContext(text: string, webBaseUrl: string | null | undefined): string | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type AccessGrant } from "@opengeni/contracts";
|
|
2
|
+
import { type ApiRouteDeps } from "@opengeni/core";
|
|
3
|
+
import { type SlackInteraction } from "@opengeni/db";
|
|
4
|
+
export declare const SLACK_TASK_FILE_UPLOAD_MAX_BYTES: number;
|
|
5
|
+
/** The source and destination are canonical authorities, never a URL or channel supplied by the model. */
|
|
6
|
+
export declare function uploadSlackTaskFile(deps: ApiRouteDeps, input: {
|
|
7
|
+
grant: AccessGrant;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
fileId: string;
|
|
10
|
+
operationId: string;
|
|
11
|
+
authorize: () => Promise<void>;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
slackFileId: string;
|
|
14
|
+
replayed: boolean;
|
|
15
|
+
status: "uploaded";
|
|
16
|
+
fileId: string;
|
|
17
|
+
channelId: string;
|
|
18
|
+
threadTimestamp: string;
|
|
19
|
+
receipt: {
|
|
20
|
+
credentialRole: "opengeni_slack_bot";
|
|
21
|
+
credentialLabel: "OpenGeni Slack bot";
|
|
22
|
+
connectionId: string;
|
|
23
|
+
slackTeamId: string;
|
|
24
|
+
operation: string;
|
|
25
|
+
operationId: string;
|
|
26
|
+
};
|
|
27
|
+
}>;
|
|
28
|
+
export declare function slackTaskRequesterCanReceiveFile(permissions: AccessGrant["permissions"]): boolean;
|
|
29
|
+
/** Private shortcuts bind a runnable session before its bot-DM route commits. */
|
|
30
|
+
export declare function assertSlackTaskUploadTarget(interaction: Pick<SlackInteraction, "visibility" | "slackChannelId" | "slackThreadTs" | "routeKey" | "ackSlackMessageTs">): void;
|
|
31
|
+
export declare function assertSlackTaskUploadFile(file: {
|
|
32
|
+
status: string;
|
|
33
|
+
scope?: string | undefined;
|
|
34
|
+
sizeBytes: number;
|
|
35
|
+
sha256: string | null;
|
|
36
|
+
}, visibility: string): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ToolActionReview } from "@opengeni/contracts";
|
|
2
|
+
import type { SlackMessageBlock } from "./slack-bot.js";
|
|
3
|
+
/** Shared review facts, projected only into a proven private bot conversation. */
|
|
4
|
+
export declare function slackToolReviewCanDecide(review: ToolActionReview): boolean;
|
|
5
|
+
export declare function slackToolReviewBlocks(review: ToolActionReview, privateAudience: boolean): SlackMessageBlock[];
|
|
@@ -3,17 +3,22 @@ import { type ApiRouteDeps } from "@opengeni/core";
|
|
|
3
3
|
type AssociatedInteractionSession = {
|
|
4
4
|
associations: ReadonlyArray<{
|
|
5
5
|
sessionId: string;
|
|
6
|
+
relationship: string;
|
|
6
7
|
}>;
|
|
7
8
|
};
|
|
8
9
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
* Optional narrowing filters for BrowserSession/ComputerSession inventories,
|
|
11
|
+
* applied in SQL before per-source authorization. They narrow, never grant:
|
|
12
|
+
* every returned row still passes filterInteractionSessionsForGrant.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseInteractionSessionListQuery(query: Record<string, string>): {
|
|
15
|
+
associatedSessionId?: string;
|
|
16
|
+
includeTerminal?: boolean;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Apply the same source-chat authorization as get/control routes, for every
|
|
20
|
+
* caller. A later using/observing/related association never transfers ownership
|
|
21
|
+
* or makes a private interaction discoverable through another chat.
|
|
17
22
|
*/
|
|
18
23
|
export declare function filterInteractionSessionsForGrant<T extends AssociatedInteractionSession>(deps: Pick<ApiRouteDeps, "db" | "sessionAuthorization">, grant: AccessGrant, sessions: readonly T[]): Promise<T[]>;
|
|
19
24
|
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Saved-secret typing needs a controller that understands the private
|
|
3
|
+
* `secretValues` side map. Server-managed controllers always do; a Connected
|
|
4
|
+
* Machine or attached browser runs whatever agent its owner installed, and an
|
|
5
|
+
* agent built before the field existed rejects the whole command as malformed.
|
|
6
|
+
* Refuse before anything is resolved or dispatched, and say how to fix it.
|
|
7
|
+
*/
|
|
8
|
+
import type { AccessGrant, InteractionPlacement } from "@opengeni/contracts";
|
|
9
|
+
import { type Database } from "@opengeni/db";
|
|
10
|
+
import { ApiHttpError } from "./http/api-error.js";
|
|
11
|
+
/** The first agent release whose controller accepts `secretValues`. */
|
|
12
|
+
export declare const MINIMUM_AGENT_VERSION_FOR_SECRET_VALUES = "0.1.56";
|
|
13
|
+
/** True only when the installed version is known and predates secret values.
|
|
14
|
+
* An unknown or unparsable version is not refused on a guess. */
|
|
15
|
+
export declare function agentVersionRejectsSecretValues(agentVersion: string | null): boolean;
|
|
16
|
+
export declare function agentUpdateRequiredForSecretsError(agentVersion: string): ApiHttpError;
|
|
17
|
+
/** The installed agent version behind a device placement; null for
|
|
18
|
+
* server-managed placements or when the machine is not live. */
|
|
19
|
+
export declare function placementAgentVersion(db: Database, grant: AccessGrant, workspaceId: string, placement: InteractionPlacement | null): Promise<string | null>;
|
|
20
|
+
/** A `beforeResolve` hook for `resolveInteractionSecretValues`. */
|
|
21
|
+
export declare function requirePlacementAcceptsSecretValues(db: Database, grant: AccessGrant, workspaceId: string, placement: InteractionPlacement | null): () => Promise<void>;
|
|
@@ -14,4 +14,9 @@ export declare function withInteractionHolderHeartbeat<T>(deps: ApiRouteDeps, in
|
|
|
14
14
|
operationId: string;
|
|
15
15
|
resourceId: string;
|
|
16
16
|
controllerGeneration: string;
|
|
17
|
+
/** Continuing an expired browser resume on its retained generation: its
|
|
18
|
+
* operation is recorded only once the controller adopts the working copy,
|
|
19
|
+
* so the expired resume itself (still lost, still bound to this
|
|
20
|
+
* generation) is the authority until then. */
|
|
21
|
+
continuesExpiredBrowserResume?: true;
|
|
17
22
|
}, run: () => Promise<T>): Promise<T>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { AuthRunMutationResponse, BrowserActionReceipt, BrowserActionRequest, PublishBrowserRevisionResponse, BrowserSessionMutationResponse, ComputerActionReceipt, ComputerActionRequest, ComputerSessionMutationResponse, InteractionInterventionMutationResponse
|
|
1
|
+
import type { AuthRunMutationResponse, BrowserActionReceipt, BrowserActionRequest, PublishBrowserRevisionResponse, BrowserSessionMutationResponse, ComputerActionReceipt, ComputerActionRequest, ComputerSessionMutationResponse, InteractionInterventionMutationResponse } from "@opengeni/contracts";
|
|
2
2
|
import { type Observability } from "@opengeni/observability";
|
|
3
3
|
import type { ComputerFrameEvidenceMismatchReason } from "@opengeni/runtime/sandbox";
|
|
4
4
|
type InteractionLifecycleMutation = BrowserSessionMutationResponse | ComputerSessionMutationResponse;
|
|
5
|
-
type AuthMutation = AuthRunMutationResponse
|
|
5
|
+
type AuthMutation = AuthRunMutationResponse;
|
|
6
6
|
export declare function observeBrowserActionResult(observability: Observability | null | undefined, startedAtMs: number, request: BrowserActionRequest, receipt: BrowserActionReceipt): void;
|
|
7
7
|
export declare function observeComputerActionResult(observability: Observability | null | undefined, startedAtMs: number, request: ComputerActionRequest, receipt: ComputerActionReceipt): void;
|
|
8
8
|
export declare function observeComputerFrameEvidenceMismatch(observability: Observability | null | undefined, reason: ComputerFrameEvidenceMismatchReason): void;
|
|
@@ -10,4 +10,29 @@ export declare function observeLifecycleResult(observability: Observability | nu
|
|
|
10
10
|
export declare function observeBrowserRevisionPublication(observability: Observability | null | undefined, startedAtMs: number, response: PublishBrowserRevisionResponse): void;
|
|
11
11
|
export declare function observeAuthMutation(observability: Observability | null | undefined, startedAtMs: number, response: AuthMutation): void;
|
|
12
12
|
export declare function observeInterventionMutation(observability: Observability | null | undefined, response: InteractionInterventionMutationResponse): void;
|
|
13
|
+
type InteractionRouteOperation = {
|
|
14
|
+
resource: "browser" | "computer";
|
|
15
|
+
operation: string;
|
|
16
|
+
mode: string;
|
|
17
|
+
/** The handler already records its successful outcome from the receipt. */
|
|
18
|
+
successObservedByHandler: boolean;
|
|
19
|
+
};
|
|
20
|
+
export declare function interactionRouteOperation(method: string, route: string): InteractionRouteOperation | null;
|
|
21
|
+
/**
|
|
22
|
+
* Bounded failure reason for a refused or failed interaction route, derived
|
|
23
|
+
* only from the HTTP status and the content-free rejection classification.
|
|
24
|
+
*/
|
|
25
|
+
export declare function interactionRouteFailureReason(status: number, rejectionReason: string | undefined): string;
|
|
26
|
+
/**
|
|
27
|
+
* Observe the HTTP-level outcome of an interaction route. Routes whose handler
|
|
28
|
+
* already records success from its receipt are counted here only on failure,
|
|
29
|
+
* so every attempt is counted exactly once.
|
|
30
|
+
*/
|
|
31
|
+
export declare function observeInteractionRouteOutcome(observability: Observability | null | undefined, input: {
|
|
32
|
+
method: string;
|
|
33
|
+
route: string;
|
|
34
|
+
status: number;
|
|
35
|
+
durationMs: number;
|
|
36
|
+
rejectionReason?: string | undefined;
|
|
37
|
+
}): void;
|
|
13
38
|
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Observability } from "@opengeni/observability";
|
|
2
|
+
import type { Context } from "hono";
|
|
3
|
+
/** Fixed stage names, so the histogram label stays bounded. */
|
|
4
|
+
export type InteractionRouteStage = "auth" | "record" | "authorize" | "source_session" | "control" | "placement_cache" | "placement_resolve" | "placement_cache_write" | "placement" | "fences" | "passkey_pre" | "secrets" | "dispatch" | "passkey_post" | "replay_check" | "prepare" | "restore" | "network_route" | "holder" | "generation" | "provision" | "display" | "launch" | "activate";
|
|
5
|
+
export type InteractionRouteStageOperation = "act" | "observe" | "target_state" | "create";
|
|
6
|
+
/**
|
|
7
|
+
* Wall-clock split of one browser control request into its sequential stages.
|
|
8
|
+
* `mark(stage)` closes the stage that ran since the previous mark. Stages that
|
|
9
|
+
* run more than once (a recovery retry) accumulate. The split is reported as a
|
|
10
|
+
* content-free `Server-Timing` header and a per-stage histogram, so harness
|
|
11
|
+
* overhead around the controller's own work stays visible.
|
|
12
|
+
*/
|
|
13
|
+
export declare class InteractionRouteStages {
|
|
14
|
+
readonly operation: InteractionRouteStageOperation;
|
|
15
|
+
private readonly now;
|
|
16
|
+
private last;
|
|
17
|
+
private readonly durations;
|
|
18
|
+
constructor(operation: InteractionRouteStageOperation, now?: () => number);
|
|
19
|
+
mark(stage: InteractionRouteStage): void;
|
|
20
|
+
entries(): Array<[InteractionRouteStage, number]>;
|
|
21
|
+
serverTiming(): string;
|
|
22
|
+
observe(observability: Observability | null | undefined): void;
|
|
23
|
+
}
|
|
24
|
+
/** Attach the stage split to the response and the stage histogram. */
|
|
25
|
+
export declare function reportInteractionRouteStages(context: Context, observability: Observability | null | undefined, stages: InteractionRouteStages): void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The vault-backed `InteractionSecretsPort` (design §10B.4, Q-32, D20): the
|
|
3
|
+
* real secret resolver for agent Browser and Computer actions, and passkey
|
|
4
|
+
* items for the session's virtual authenticators.
|
|
5
|
+
*/
|
|
6
|
+
import type { VaultProviderRegistry } from "@opengeni/vaults";
|
|
7
|
+
import { type BrowserPasskeyCredentialMaterial } from "@opengeni/contracts";
|
|
8
|
+
import { type VaultService } from "@opengeni/core";
|
|
9
|
+
import { type Database } from "@opengeni/db";
|
|
10
|
+
import type { InteractionSecretsPort } from "./interaction-secrets.js";
|
|
11
|
+
export declare function passkeyItemName(credential: BrowserPasskeyCredentialMaterial): string;
|
|
12
|
+
export declare function createVaultInteractionSecretsPort(deps: {
|
|
13
|
+
db: Database;
|
|
14
|
+
/** The variable-set envelope key; null fails value reads like the vault API. */
|
|
15
|
+
encryptionKey: Uint8Array | null;
|
|
16
|
+
/** Defaults to a service over the same database and key. */
|
|
17
|
+
vaultService?: VaultService;
|
|
18
|
+
/** Connected vaults (1Password, host) for a workspace's acting subject. */
|
|
19
|
+
providersFor?: (workspaceId: string, subjectId: string | null) => VaultProviderRegistry;
|
|
20
|
+
}): InteractionSecretsPort;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `{{secret:…}}` references in Browser and Computer actions (design §10B.4,
|
|
3
|
+
* BR-1..3). Only agent attempts resolve: the API resolves the references in
|
|
4
|
+
* the secret-bearing fields of an action right before dispatch and sends the
|
|
5
|
+
* plaintext to the controller in the private `secretValues` side map. Human
|
|
6
|
+
* and service callers' text is always typed literally. Agent-owned passkeys
|
|
7
|
+
* ride the same seam: around every agent browser action the API loads the
|
|
8
|
+
* principal's leased passkeys into browserd and pulls registration and
|
|
9
|
+
* assertion events back into the vault.
|
|
10
|
+
*/
|
|
11
|
+
import { type AccessGrant, type BrowserPasskeyCredential, type BrowserPasskeyCredentialMaterial, type BrowserPasskeySyncRequest, type BrowserPasskeySyncResponse, type InteractionSecretValues, type SecretClock, SecretReferenceError, type SecretPrincipal, type SecretResolver, type SecretUseContext } from "@opengeni/contracts";
|
|
12
|
+
import { ApiHttpError } from "./http/api-error.js";
|
|
13
|
+
export type AttemptSecretPrincipal = Extract<SecretPrincipal, {
|
|
14
|
+
kind: "attempt";
|
|
15
|
+
}>;
|
|
16
|
+
/** Vault storage for agent-owned passkeys (F2: `lease_vault_passkeys`,
|
|
17
|
+
* `update_passkey_sign_count`, `release_vault_passkey_leases`). */
|
|
18
|
+
export interface InteractionPasskeyStore {
|
|
19
|
+
/** Lease every passkey item the principal may use and no other holder holds. */
|
|
20
|
+
lease(principal: AttemptSecretPrincipal, holder: string, ttlSeconds: number): Promise<BrowserPasskeyCredential[]>;
|
|
21
|
+
/** Save a passkey the agent just registered; returns the new item. */
|
|
22
|
+
saveRegistered(principal: AttemptSecretPrincipal, input: {
|
|
23
|
+
credential: BrowserPasskeyCredentialMaterial;
|
|
24
|
+
origin: string | null;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
itemId: string;
|
|
27
|
+
}>;
|
|
28
|
+
/** Monotonic write-back (`greatest(existing, new)`). */
|
|
29
|
+
updateSignCount(principal: AttemptSecretPrincipal, itemId: string, signCount: number): Promise<void>;
|
|
30
|
+
release(holder: string): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export interface InteractionSecretsPort {
|
|
33
|
+
/** The principal's resolver, or null when secrets are unavailable here.
|
|
34
|
+
* A resolver with `enabled: false` (capability off) also passes text through
|
|
35
|
+
* literally (Q-35). */
|
|
36
|
+
resolverFor(principal: AttemptSecretPrincipal): Promise<SecretResolver | null>;
|
|
37
|
+
passkeys: InteractionPasskeyStore | null;
|
|
38
|
+
clock?: SecretClock;
|
|
39
|
+
}
|
|
40
|
+
export type InteractionSecretsLog = (event: string, fields: Record<string, unknown>) => void;
|
|
41
|
+
/** The attempt principal of an agent grant. Human, service and incomplete
|
|
42
|
+
* grants have none, so their text is never resolved (BR-1). */
|
|
43
|
+
export declare function attemptSecretPrincipal(grant: AccessGrant): AttemptSecretPrincipal | null;
|
|
44
|
+
/** The public failure: nothing was dispatched. `details.secretReference` is
|
|
45
|
+
* the model-facing `{error, failures, askCard, hint}` object; it never
|
|
46
|
+
* contains values. */
|
|
47
|
+
export declare function secretReferenceHttpError(error: SecretReferenceError): ApiHttpError;
|
|
48
|
+
/** Every string in a JSON-like value (native desktop call arguments). */
|
|
49
|
+
export declare function collectStringsDeep(value: unknown, out?: string[], depth?: number): string[];
|
|
50
|
+
/**
|
|
51
|
+
* Resolve the references in `texts` for an agent grant. Returns undefined
|
|
52
|
+
* when the text must be dispatched literally (non-agent caller, no marker,
|
|
53
|
+
* secrets unavailable or off). Returns a (possibly empty) side map otherwise;
|
|
54
|
+
* an empty map still tells the controller to remove `\{{secret:…}}` escapes.
|
|
55
|
+
* TOTP codes are computed last, at dispatch (Q-33). Throws ApiHttpError(422)
|
|
56
|
+
* before anything is dispatched when any reference fails (I2).
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveInteractionSecretValues(input: {
|
|
59
|
+
port: InteractionSecretsPort | null | undefined;
|
|
60
|
+
grant: AccessGrant;
|
|
61
|
+
texts: readonly string[];
|
|
62
|
+
use: SecretUseContext;
|
|
63
|
+
/** Runs once the text is known to carry references for an agent with
|
|
64
|
+
* secrets enabled, before anything resolves: a controller that cannot
|
|
65
|
+
* accept secret values refuses here, with nothing used or dispatched. */
|
|
66
|
+
beforeResolve?: () => Promise<void>;
|
|
67
|
+
}): Promise<InteractionSecretValues | undefined>;
|
|
68
|
+
export declare const PASSKEY_LEASE_TTL_SECONDS = 600;
|
|
69
|
+
export declare function resetPasskeySessionCacheForTests(): void;
|
|
70
|
+
/** One lease holder per BrowserSession: every target in it shares the set. */
|
|
71
|
+
export declare function passkeyLeaseHolder(browserSessionId: string): string;
|
|
72
|
+
export type PasskeySyncClient = {
|
|
73
|
+
passkeySync(request: BrowserPasskeySyncRequest): Promise<BrowserPasskeySyncResponse>;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Load the principal's passkeys into the BrowserSession and write back what
|
|
77
|
+
* happened since the last sync. Best effort: a failure is logged and never
|
|
78
|
+
* fails the surrounding action. Unacknowledged events stay in browserd and
|
|
79
|
+
* are retried on the next sync.
|
|
80
|
+
*
|
|
81
|
+
* Syncs for one BrowserSession run one at a time, in call order, so a caller
|
|
82
|
+
* may start the write-back after an action without awaiting it: the next
|
|
83
|
+
* action's sync waits for it instead of racing it on the same events.
|
|
84
|
+
*/
|
|
85
|
+
export declare function syncBrowserPasskeys(input: PasskeySyncInput): Promise<PasskeySyncResult>;
|
|
86
|
+
type PasskeySyncResult = {
|
|
87
|
+
saved: number;
|
|
88
|
+
asserted: number;
|
|
89
|
+
} | null;
|
|
90
|
+
type PasskeySyncInput = {
|
|
91
|
+
port: InteractionSecretsPort | null | undefined;
|
|
92
|
+
grant: AccessGrant;
|
|
93
|
+
browserSessionId: string;
|
|
94
|
+
controllerGeneration: string;
|
|
95
|
+
client: PasskeySyncClient;
|
|
96
|
+
/** Lease again now (right before an action), taking over from any other browser. */
|
|
97
|
+
refresh?: boolean;
|
|
98
|
+
now?: () => number;
|
|
99
|
+
log?: InteractionSecretsLog;
|
|
100
|
+
};
|
|
101
|
+
/** Release the BrowserSession's passkey leases (session end). Best effort. */
|
|
102
|
+
export declare function releaseBrowserPasskeys(port: InteractionSecretsPort | null | undefined, browserSessionId: string): Promise<void>;
|
|
103
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ActionCatalogEntry = {
|
|
2
|
+
/** Stable name an agent calls: the SDK method ("listSessions"), else "METHOD /path". */
|
|
3
|
+
id: string;
|
|
4
|
+
method: string;
|
|
5
|
+
path: string;
|
|
6
|
+
/** Contract schema names for the JSON body and response, when known. */
|
|
7
|
+
request: string[];
|
|
8
|
+
response: string[];
|
|
9
|
+
/**
|
|
10
|
+
* Why no MCP caller can complete this action: it needs the person's own
|
|
11
|
+
* Opengeni browser session. Set only on such actions; the server hides them.
|
|
12
|
+
*/
|
|
13
|
+
browserOnly?: string;
|
|
14
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ActionCatalogEntry } from "./action-catalog-types.js";
|
|
2
|
+
/** Actions that must carry a description (subscription and model settings). */
|
|
3
|
+
export declare const DESCRIBED_ACTION_PATH: RegExp;
|
|
4
|
+
export declare function actionDescription(entry: Pick<ActionCatalogEntry, "method" | "path">): string | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ACTION_REQUEST_SCHEMAS: Readonly<Record<string, unknown>>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpConnectionAccountBinding } from "@opengeni/contracts";
|
|
2
|
+
/** Canonical readiness comes only from routes present in this exact attempt,
|
|
3
|
+
* joined to this turn's accepted bindings. It never grants account access. */
|
|
4
|
+
export declare function capabilityAccountReadiness(availableRoutes: Iterable<string>, bindings: readonly McpConnectionAccountBinding[] | null): {
|
|
5
|
+
available: Set<string>;
|
|
6
|
+
accepted: Set<string>;
|
|
7
|
+
};
|