@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.
Files changed (546) hide show
  1. package/dist/access-grant-rls.d.ts +8 -1
  2. package/dist/admission-trace.d.ts +8 -0
  3. package/dist/app.d.ts +50 -3
  4. package/dist/app.js +10 -1
  5. package/dist/artifact-catalog-cursor.d.ts +1 -0
  6. package/dist/attached-browser-viewer.d.ts +11 -0
  7. package/dist/auth/managed-auth-attempt-context.d.ts +2 -0
  8. package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
  9. package/dist/auth/managed-auth-session-adapter.d.ts +9 -1
  10. package/dist/auth/managed-auth.d.ts +72 -5
  11. package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
  12. package/dist/auth/new-signups-gate.d.ts +23 -0
  13. package/dist/auth/signup-funnel-metrics.d.ts +44 -0
  14. package/dist/azure-live.d.ts +28 -0
  15. package/dist/browser-action-fences.d.ts +13 -0
  16. package/dist/browser-controller-authority.d.ts +1 -61
  17. package/dist/browser-ephemeral.d.ts +5 -0
  18. package/dist/browser-lost-runtime-end.d.ts +24 -0
  19. package/dist/browser-state-authority.d.ts +1 -27
  20. package/dist/chunk-OGQDXVXY.js +18 -0
  21. package/dist/chunk-OGQDXVXY.js.map +1 -0
  22. package/dist/{chunk-AJ62T5QN.js → chunk-OT56OY4V.js} +80503 -39869
  23. package/dist/chunk-OT56OY4V.js.map +1 -0
  24. package/dist/claude-default-models.d.ts +19 -0
  25. package/dist/claude-subscription-core.d.ts +50 -0
  26. package/dist/claude-subscription-oauth.d.ts +36 -0
  27. package/dist/claude-subscription-profile.d.ts +9 -0
  28. package/dist/claude-subscription-usage.d.ts +6 -0
  29. package/dist/claude-workspace-connection.d.ts +15 -0
  30. package/dist/codemode.d.ts +40 -5
  31. package/dist/codex-realtime.d.ts +29 -3
  32. package/dist/codex-session-pointers.d.ts +19 -0
  33. package/dist/connection-ownership.d.ts +6 -3
  34. package/dist/controller-data-plane.d.ts +16 -0
  35. package/dist/credit-promotion-snapshot.d.ts +6 -0
  36. package/dist/editable-artifact-source-session.d.ts +3 -0
  37. package/dist/editable-artifact-websocket.d.ts +5 -3
  38. package/dist/fatal-process-boundary.d.ts +9 -1
  39. package/dist/github-access.d.ts +7 -1
  40. package/dist/github-browser-flow.d.ts +1 -1
  41. package/dist/http/acting-person.d.ts +36 -0
  42. package/dist/http/api-contract-compat.d.ts +19 -0
  43. package/dist/http/api-error.d.ts +50 -1
  44. package/dist/http/auth.d.ts +8 -1
  45. package/dist/http/cors.d.ts +12 -0
  46. package/dist/http/deprecation.d.ts +42 -0
  47. package/dist/http/keyed-admission.d.ts +12 -0
  48. package/dist/http/local-browser-boundary.d.ts +72 -0
  49. package/dist/http/metrics-listener.d.ts +22 -0
  50. package/dist/http/path-identifier.d.ts +17 -0
  51. package/dist/http/registered-route-label.d.ts +16 -0
  52. package/dist/http/rejection-telemetry.d.ts +34 -0
  53. package/dist/http/request-body.d.ts +27 -0
  54. package/dist/http/request-source.d.ts +41 -3
  55. package/dist/http/sse.d.ts +12 -1
  56. package/dist/http/unmatched-route.d.ts +18 -0
  57. package/dist/http/user-content.d.ts +36 -0
  58. package/dist/http/variable-sets-removed.d.ts +41 -0
  59. package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
  60. package/dist/index.js +1279 -108
  61. package/dist/index.js.map +1 -1
  62. package/dist/integration-connect-metrics.d.ts +35 -0
  63. package/dist/integration-endpoint-test.d.ts +20 -0
  64. package/dist/integrations/api-integrations.d.ts +2 -2
  65. package/dist/integrations/atlassian.d.ts +8 -3
  66. package/dist/integrations/fiken.d.ts +3 -1
  67. package/dist/integrations/github-lens-connect.d.ts +37 -66
  68. package/dist/integrations/google-drive.d.ts +2 -0
  69. package/dist/integrations/integration-commit-authority.d.ts +13 -0
  70. package/dist/integrations/marketplace-plugin.d.ts +43 -43
  71. package/dist/integrations/oauth-client.d.ts +171 -12
  72. package/dist/integrations/oauth-profiles.d.ts +42 -13
  73. package/dist/integrations/onepassword-vault-provider.d.ts +9 -0
  74. package/dist/integrations/slack-bot.d.ts +285 -7
  75. package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
  76. package/dist/integrations/slack-interactions.d.ts +89 -10
  77. package/dist/integrations/slack-mrkdwn.d.ts +41 -0
  78. package/dist/integrations/slack-routing.d.ts +1 -1
  79. package/dist/integrations/slack-session-defaults.d.ts +58 -0
  80. package/dist/integrations/slack-task-file-upload.d.ts +36 -0
  81. package/dist/integrations/slack-tool-review.d.ts +5 -0
  82. package/dist/interaction-agent-access.d.ts +13 -8
  83. package/dist/interaction-agent-version.d.ts +21 -0
  84. package/dist/interaction-holder-heartbeat.d.ts +5 -0
  85. package/dist/interaction-metrics.d.ts +27 -2
  86. package/dist/interaction-route-stages.d.ts +25 -0
  87. package/dist/interaction-secrets-vault.d.ts +20 -0
  88. package/dist/interaction-secrets.d.ts +103 -0
  89. package/dist/mcp/action-catalog-types.d.ts +14 -0
  90. package/dist/mcp/action-catalog.gen.d.ts +2 -0
  91. package/dist/mcp/action-descriptions.d.ts +4 -0
  92. package/dist/mcp/action-schema-imports.gen.d.ts +1 -0
  93. package/dist/mcp/capability-account-readiness.d.ts +7 -0
  94. package/dist/mcp/child-read-evidence.d.ts +9 -0
  95. package/dist/mcp/company-profile-agent-admin.d.ts +12 -0
  96. package/dist/mcp/contract-input.d.ts +13 -0
  97. package/dist/mcp/documents.d.ts +2 -0
  98. package/dist/mcp/first-party-tool-permissions.d.ts +3 -606
  99. package/dist/mcp/notification-tools.d.ts +26 -0
  100. package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
  101. package/dist/mcp/scheduled-task-input.d.ts +1309 -0
  102. package/dist/mcp/scheduled-task-view.d.ts +217 -3
  103. package/dist/mcp/secret-tools.d.ts +14 -0
  104. package/dist/mcp/server.d.ts +108 -5
  105. package/dist/mcp/session-admin-access-tools.d.ts +33 -0
  106. package/dist/mcp/session-event-errors.d.ts +28 -0
  107. package/dist/mcp/session-event-view.d.ts +62 -0
  108. package/dist/mcp/session-view.d.ts +15 -0
  109. package/dist/mcp/session-wait.d.ts +18 -0
  110. package/dist/mcp/site-agent-clamp-tools.d.ts +38 -0
  111. package/dist/mcp/site-data-tools.d.ts +22 -0
  112. package/dist/mcp/site-publication-tools.d.ts +19 -0
  113. package/dist/mcp/site-sql-tools.d.ts +27 -0
  114. package/dist/mcp-oauth.d.ts +37 -4
  115. package/dist/model-calls/chat-completions.d.ts +87 -0
  116. package/dist/model-calls/pending-usage-settlements.d.ts +57 -0
  117. package/dist/model-calls/service.d.ts +36 -0
  118. package/dist/model-catalog.d.ts +9 -3
  119. package/dist/native-push-dispatch.d.ts +69 -0
  120. package/dist/observability.d.ts +3 -1
  121. package/dist/organization-mcp.d.ts +82 -0
  122. package/dist/prepared-mcp-actor.d.ts +77 -0
  123. package/dist/prepared-mcp-permissions.d.ts +8 -0
  124. package/dist/routes/analytics-consent.d.ts +26 -0
  125. package/dist/routes/api-integrations.d.ts +11 -0
  126. package/dist/routes/api-keys.d.ts +7 -7
  127. package/dist/routes/automations.d.ts +2 -0
  128. package/dist/routes/billing.d.ts +59 -0
  129. package/dist/routes/browser-sessions.d.ts +65 -2
  130. package/dist/routes/chat-completions.d.ts +11 -0
  131. package/dist/routes/claude-core-usage.d.ts +20 -0
  132. package/dist/routes/claude-subscription-accounts.d.ts +3 -0
  133. package/dist/routes/claude-subscription-oauth.d.ts +3 -0
  134. package/dist/routes/client-errors.d.ts +182 -0
  135. package/dist/routes/codex-core.d.ts +401 -0
  136. package/dist/routes/codex.d.ts +64 -2
  137. package/dist/routes/computer-sessions.d.ts +6 -1
  138. package/dist/routes/desktop-distribution.d.ts +32 -0
  139. package/dist/routes/github-browser-fonts.gen.d.ts +2 -0
  140. package/dist/routes/github-browser-pages.d.ts +27 -0
  141. package/dist/routes/inbox.d.ts +13 -0
  142. package/dist/routes/insights-response-cache.d.ts +10 -0
  143. package/dist/routes/insights-usage.d.ts +12 -0
  144. package/dist/routes/insights.d.ts +28 -0
  145. package/dist/routes/interaction-placement-message.d.ts +7 -0
  146. package/dist/routes/managed-sign-in-methods.d.ts +6 -0
  147. package/dist/routes/model-account-choice.d.ts +13 -0
  148. package/dist/routes/model-account-settings.d.ts +19 -0
  149. package/dist/routes/native-app-auth.d.ts +12 -0
  150. package/dist/routes/organization-integration-policy.d.ts +8 -0
  151. package/dist/routes/organization-integrations.d.ts +6 -0
  152. package/dist/routes/organization-mcp-connections.d.ts +3 -0
  153. package/dist/routes/organization-model-defaults.d.ts +9 -0
  154. package/dist/routes/organization-service-accounts.d.ts +3 -0
  155. package/dist/routes/personal-api-keys.d.ts +3 -0
  156. package/dist/routes/session-admin-access.d.ts +3 -0
  157. package/dist/routes/session-artifact-associations.d.ts +4 -0
  158. package/dist/routes/session-history-imports.d.ts +20 -0
  159. package/dist/routes/sessions.d.ts +38 -2
  160. package/dist/routes/site-data.d.ts +18 -0
  161. package/dist/routes/site-publishing.d.ts +5 -0
  162. package/dist/routes/site-runtime.d.ts +31 -0
  163. package/dist/routes/site-sql.d.ts +16 -0
  164. package/dist/routes/slack-bot-access.d.ts +3 -0
  165. package/dist/routes/subscription-account-pools.d.ts +21 -0
  166. package/dist/routes/subscription-core-http.d.ts +5 -0
  167. package/dist/routes/subscription-pool-access.d.ts +37 -0
  168. package/dist/routes/subscription-pool-core.d.ts +153 -0
  169. package/dist/routes/supergrok.d.ts +6 -6
  170. package/dist/routes/usage-allowances.d.ts +12 -0
  171. package/dist/routes/variable-sets-removed.d.ts +2 -0
  172. package/dist/routes/vault-providers.d.ts +34 -0
  173. package/dist/routes/vaults.d.ts +3 -0
  174. package/dist/routes/workspace-integrations.d.ts +35 -0
  175. package/dist/routes/workspace-model-providers.d.ts +4 -0
  176. package/dist/routes/workspaces.d.ts +11 -2
  177. package/dist/sandbox/agent-update.d.ts +64 -0
  178. package/dist/sandbox/auth-callout.d.ts +8 -0
  179. package/dist/sandbox/channel-a.d.ts +15 -1
  180. package/dist/sandbox/enrollment.d.ts +26 -4
  181. package/dist/sandbox/machine-audience.d.ts +29 -0
  182. package/dist/sandbox/machines.d.ts +15 -2
  183. package/dist/sandbox/metrics-ingestion.d.ts +6 -2
  184. package/dist/sandbox/screen-control.d.ts +85 -0
  185. package/dist/sandbox/viewer.d.ts +5 -1
  186. package/dist/sandbox-file-artifacts.d.ts +17 -1
  187. package/dist/scheduled-task-blockers.d.ts +39 -0
  188. package/dist/scheduled-task-deletion.d.ts +3 -4
  189. package/dist/scheduled-task-lifecycle.d.ts +14 -0
  190. package/dist/secret-answers.d.ts +40 -0
  191. package/dist/session-create-observability.d.ts +5 -0
  192. package/dist/session-event-view-36GO3IL7.js +528 -0
  193. package/dist/session-event-view-36GO3IL7.js.map +1 -0
  194. package/dist/signed-state-secret.d.ts +18 -0
  195. package/dist/site-agent-guard.d.ts +53 -0
  196. package/dist/site-data/operations.d.ts +103 -0
  197. package/dist/site-data/service.d.ts +203 -0
  198. package/dist/site-frame-guard.d.ts +32 -0
  199. package/dist/site-publishing/agent-data-tools.d.ts +84 -0
  200. package/dist/site-publishing/agent-model.d.ts +58 -0
  201. package/dist/site-publishing/agent-session.d.ts +16 -0
  202. package/dist/site-publishing/content-scanner.d.ts +31 -0
  203. package/dist/site-publishing/edge-sync.d.ts +48 -0
  204. package/dist/site-publishing/gateway-signature.d.ts +56 -0
  205. package/dist/site-publishing/limits.d.ts +63 -0
  206. package/dist/site-publishing/page-tool-authority.d.ts +30 -0
  207. package/dist/site-publishing/platform-usage.d.ts +113 -0
  208. package/dist/site-publishing/platform.d.ts +21 -0
  209. package/dist/site-publishing/readiness.d.ts +62 -0
  210. package/dist/site-publishing/runtime.d.ts +179 -0
  211. package/dist/site-publishing/service.d.ts +264 -0
  212. package/dist/site-publishing/session-events.d.ts +22 -0
  213. package/dist/site-publishing/session-views.d.ts +36 -0
  214. package/dist/site-publishing/viewer.d.ts +40 -0
  215. package/dist/site-session-origin.d.ts +31 -6
  216. package/dist/site-sql/format.d.ts +47 -0
  217. package/dist/site-sql/gateway.d.ts +50 -0
  218. package/dist/site-sql/service.d.ts +213 -0
  219. package/dist/temporal-schedule-sync.d.ts +26 -0
  220. package/dist/transcription/billing-refusal.d.ts +8 -0
  221. package/dist/transcription/normalize.d.ts +23 -0
  222. package/dist/transcription/providers/azure-mai.d.ts +12 -0
  223. package/dist/transcription/providers/azure-openai.d.ts +4 -0
  224. package/dist/transcription/providers/openai.d.ts +16 -0
  225. package/dist/transcription/providers/subscription-core.d.ts +39 -0
  226. package/dist/transcription/service.d.ts +10 -1
  227. package/dist/transcription/wav-duration.d.ts +8 -0
  228. package/dist/workspace-tool-gateway-attestations.d.ts +37 -0
  229. package/dist/workspace-tool-gateway-observability.d.ts +16 -0
  230. package/dist/workspace-tool-gateway-secrets.d.ts +27 -0
  231. package/dist/workspace-tool-gateway.d.ts +102 -6
  232. package/dist/workspace-tool-target-fence.d.ts +116 -0
  233. package/dist/workspace-tool-target.d.ts +225 -0
  234. package/dist/workspace-webhook-dispatch.d.ts +26 -0
  235. package/dist/xai-subscription-core.d.ts +60 -0
  236. package/package.json +25 -20
  237. package/src/access-grant-rls.ts +64 -14
  238. package/src/admission-trace.ts +14 -0
  239. package/src/app.ts +1684 -252
  240. package/src/artifact-catalog-cursor.ts +1 -0
  241. package/src/attached-browser-viewer.ts +26 -0
  242. package/src/auth/managed-auth-attempt-context.ts +9 -0
  243. package/src/auth/managed-auth-rate-limits.ts +252 -0
  244. package/src/auth/managed-auth-session-adapter.ts +64 -29
  245. package/src/auth/managed-auth.ts +303 -35
  246. package/src/auth/managed-email.ts +18 -1
  247. package/src/auth/managed-sign-in-notifications.ts +81 -0
  248. package/src/auth/new-signups-gate.ts +49 -0
  249. package/src/auth/organization-user-setup.ts +3 -3
  250. package/src/auth/signup-funnel-metrics.ts +164 -0
  251. package/src/azure-live.ts +103 -0
  252. package/src/browser-action-fences.ts +45 -0
  253. package/src/browser-controller-authority.ts +1 -186
  254. package/src/browser-ephemeral.ts +39 -0
  255. package/src/browser-lost-runtime-end.ts +71 -0
  256. package/src/browser-state-authority.ts +1 -236
  257. package/src/claude-default-models.ts +37 -0
  258. package/src/claude-subscription-core.ts +154 -0
  259. package/src/claude-subscription-oauth.ts +352 -0
  260. package/src/claude-subscription-profile.ts +73 -0
  261. package/src/claude-subscription-usage.ts +51 -0
  262. package/src/claude-workspace-connection.ts +82 -0
  263. package/src/codemode.ts +236 -39
  264. package/src/codex-realtime.ts +181 -53
  265. package/src/codex-session-pointers.ts +80 -0
  266. package/src/company-brain-okf.ts +1 -1
  267. package/src/connected-machine-computer-access.ts +2 -1
  268. package/src/connection-ownership.ts +19 -13
  269. package/src/controller-data-plane.ts +34 -0
  270. package/src/credit-promotion-snapshot.ts +36 -0
  271. package/src/editable-artifact-production.ts +10 -0
  272. package/src/editable-artifact-source-session.ts +123 -0
  273. package/src/editable-artifact-websocket.ts +16 -3
  274. package/src/fatal-process-boundary.ts +67 -3
  275. package/src/gateway-realtime.ts +12 -8
  276. package/src/github-access.ts +31 -5
  277. package/src/github-browser-flow.ts +1 -1
  278. package/src/http/acting-person.ts +105 -0
  279. package/src/http/api-contract-compat.ts +49 -0
  280. package/src/http/api-error.ts +210 -2
  281. package/src/http/auth.ts +68 -4
  282. package/src/http/cors.ts +37 -5
  283. package/src/http/deprecation.ts +118 -0
  284. package/src/http/keyed-admission.ts +29 -0
  285. package/src/http/local-browser-boundary.ts +343 -0
  286. package/src/http/metrics-listener.ts +57 -0
  287. package/src/http/path-identifier.ts +54 -0
  288. package/src/http/registered-route-label.ts +34 -0
  289. package/src/http/rejection-telemetry.ts +120 -0
  290. package/src/http/request-body.ts +127 -0
  291. package/src/http/request-source.ts +154 -13
  292. package/src/http/sse.ts +88 -28
  293. package/src/http/unmatched-route.ts +60 -0
  294. package/src/http/user-content.ts +158 -0
  295. package/src/http/variable-sets-removed.ts +122 -0
  296. package/src/http/websocket-upgrade-dispatch.ts +29 -0
  297. package/src/index.ts +107 -57
  298. package/src/integration-connect-metrics.ts +228 -0
  299. package/src/integration-endpoint-test.ts +291 -0
  300. package/src/integrations/api-integrations.ts +81 -7
  301. package/src/integrations/atlassian.ts +202 -83
  302. package/src/integrations/fiken.ts +66 -38
  303. package/src/integrations/github-app-connect.ts +64 -18
  304. package/src/integrations/github-lens-connect.ts +8 -29
  305. package/src/integrations/google-drive.ts +448 -152
  306. package/src/integrations/integration-commit-authority.ts +69 -0
  307. package/src/integrations/marketplace-plugin.ts +1 -1
  308. package/src/integrations/oauth-client.ts +733 -193
  309. package/src/integrations/oauth-profiles.ts +116 -45
  310. package/src/integrations/onepassword-vault-provider.ts +16 -0
  311. package/src/integrations/personal-github-repositories.ts +1 -1
  312. package/src/integrations/personal-github.ts +61 -35
  313. package/src/integrations/provider-oauth.ts +67 -85
  314. package/src/integrations/slack-app-home.ts +5 -5
  315. package/src/integrations/slack-bot.ts +893 -201
  316. package/src/integrations/slack-file-upload-flow.ts +147 -0
  317. package/src/integrations/slack-install.ts +7 -7
  318. package/src/integrations/slack-interactions.ts +1589 -299
  319. package/src/integrations/slack-mrkdwn.ts +193 -0
  320. package/src/integrations/slack-routing.ts +2 -2
  321. package/src/integrations/slack-session-defaults.ts +224 -0
  322. package/src/integrations/slack-task-file-upload.ts +323 -0
  323. package/src/integrations/slack-tool-review.ts +65 -0
  324. package/src/integrations/social-oauth.ts +90 -58
  325. package/src/interaction-agent-access.ts +40 -20
  326. package/src/interaction-agent-version.ts +85 -0
  327. package/src/interaction-holder-heartbeat.ts +24 -8
  328. package/src/interaction-metrics.ts +164 -2
  329. package/src/interaction-route-stages.ts +94 -0
  330. package/src/interaction-secrets-vault.ts +213 -0
  331. package/src/interaction-secrets.ts +426 -0
  332. package/src/mcp/action-catalog-types.ts +14 -0
  333. package/src/mcp/action-catalog.gen.ts +8014 -0
  334. package/src/mcp/action-descriptions.ts +299 -0
  335. package/src/mcp/action-schema-imports.gen.ts +304 -0
  336. package/src/mcp/capability-account-readiness.ts +17 -0
  337. package/src/mcp/child-read-evidence.ts +19 -0
  338. package/src/mcp/company-profile-agent-admin.ts +13 -0
  339. package/src/mcp/contract-input.ts +165 -0
  340. package/src/mcp/documents.ts +9 -2
  341. package/src/mcp/editable-artifacts.ts +29 -11
  342. package/src/mcp/files.ts +5 -1
  343. package/src/mcp/first-party-tool-permissions.ts +7 -285
  344. package/src/mcp/knowledge-entries.ts +108 -34
  345. package/src/mcp/notification-tools.ts +480 -0
  346. package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
  347. package/src/mcp/scheduled-task-input.ts +89 -0
  348. package/src/mcp/scheduled-task-view.ts +63 -3
  349. package/src/mcp/secret-tools.ts +185 -0
  350. package/src/mcp/server.ts +2213 -1116
  351. package/src/mcp/session-admin-access-tools.ts +163 -0
  352. package/src/mcp/session-event-errors.ts +123 -0
  353. package/src/mcp/session-event-view.ts +395 -13
  354. package/src/mcp/session-view.ts +3 -0
  355. package/src/mcp/session-wait.ts +67 -7
  356. package/src/mcp/site-agent-clamp-tools.ts +140 -0
  357. package/src/mcp/site-data-tools.ts +339 -0
  358. package/src/mcp/site-publication-tools.ts +201 -0
  359. package/src/mcp/site-sql-tools.ts +427 -0
  360. package/src/mcp-oauth.ts +635 -45
  361. package/src/model-calls/chat-completions.ts +352 -0
  362. package/src/model-calls/pending-usage-settlements.ts +125 -0
  363. package/src/model-calls/service.ts +694 -0
  364. package/src/model-catalog.ts +68 -17
  365. package/src/native-push-dispatch.ts +457 -0
  366. package/src/observability.ts +15 -1
  367. package/src/organization-mcp.ts +485 -0
  368. package/src/prepared-mcp-actor.ts +154 -0
  369. package/src/prepared-mcp-permissions.ts +38 -0
  370. package/src/routes/analytics-consent.ts +123 -0
  371. package/src/routes/api-integrations.ts +268 -9
  372. package/src/routes/api-keys.ts +164 -25
  373. package/src/routes/artifact-catalog.ts +111 -0
  374. package/src/routes/automations.ts +163 -90
  375. package/src/routes/billing.ts +535 -59
  376. package/src/routes/browser-sessions.ts +966 -342
  377. package/src/routes/canonical-human-identities.ts +61 -0
  378. package/src/routes/capabilities.ts +112 -5
  379. package/src/routes/channels.ts +4 -3
  380. package/src/routes/chat-completions.ts +235 -0
  381. package/src/routes/claude-core-usage.ts +147 -0
  382. package/src/routes/claude-subscription-accounts.ts +233 -0
  383. package/src/routes/claude-subscription-oauth.ts +175 -0
  384. package/src/routes/client-errors.ts +394 -0
  385. package/src/routes/codex-core.ts +687 -0
  386. package/src/routes/codex.ts +1277 -1119
  387. package/src/routes/company-brain.ts +4 -0
  388. package/src/routes/computer-sessions.ts +319 -85
  389. package/src/routes/connect.ts +277 -175
  390. package/src/routes/connections.ts +690 -363
  391. package/src/routes/desktop-distribution.ts +217 -0
  392. package/src/routes/documents.ts +13 -7
  393. package/src/routes/editable-artifacts.ts +74 -4
  394. package/src/routes/enrollments.ts +110 -16
  395. package/src/routes/external-identity-links.ts +13 -12
  396. package/src/routes/files.ts +41 -16
  397. package/src/routes/github-browser-fonts.gen.ts +12 -0
  398. package/src/routes/github-browser-pages.ts +258 -0
  399. package/src/routes/github.ts +200 -75
  400. package/src/routes/inbox.ts +353 -0
  401. package/src/routes/insights-response-cache.ts +83 -0
  402. package/src/routes/insights-usage.ts +345 -0
  403. package/src/routes/insights.ts +103 -8
  404. package/src/routes/install.ts +51 -10
  405. package/src/routes/integration-facets.ts +70 -28
  406. package/src/routes/interaction-placement-message.ts +12 -0
  407. package/src/routes/knowledge.ts +136 -27
  408. package/src/routes/machines.ts +189 -135
  409. package/src/routes/managed-auth-session-sets.ts +43 -10
  410. package/src/routes/managed-onboarding.ts +39 -19
  411. package/src/routes/managed-sign-in-methods.ts +433 -0
  412. package/src/routes/memory-slack-publications.ts +3 -2
  413. package/src/routes/model-account-choice.ts +194 -0
  414. package/src/routes/model-account-settings.ts +235 -0
  415. package/src/routes/model-connection-access.ts +210 -48
  416. package/src/routes/native-app-auth.ts +296 -0
  417. package/src/routes/organization-integration-policy.ts +116 -0
  418. package/src/routes/organization-integrations.ts +326 -0
  419. package/src/routes/organization-mcp-connections.ts +183 -0
  420. package/src/routes/organization-memberships.ts +205 -19
  421. package/src/routes/organization-model-defaults.ts +110 -0
  422. package/src/routes/organization-model-providers.ts +74 -3
  423. package/src/routes/organization-service-accounts.ts +128 -0
  424. package/src/routes/organization-sessions.ts +21 -5
  425. package/src/routes/personal-api-keys.ts +184 -0
  426. package/src/routes/personal-github-git-broker.ts +2 -2
  427. package/src/routes/personal-github.ts +9 -4
  428. package/src/routes/plugins.ts +46 -7
  429. package/src/routes/pr-review-github.ts +105 -118
  430. package/src/routes/pr-review.ts +88 -82
  431. package/src/routes/preference-registry.ts +18 -0
  432. package/src/routes/rigs.ts +48 -13
  433. package/src/routes/scheduled-tasks.ts +347 -27
  434. package/src/routes/session-admin-access.ts +271 -0
  435. package/src/routes/session-artifact-associations.ts +164 -0
  436. package/src/routes/session-history-imports.ts +305 -0
  437. package/src/routes/sessions.ts +1682 -363
  438. package/src/routes/site-data.ts +340 -0
  439. package/src/routes/site-publishing.ts +584 -0
  440. package/src/routes/site-runtime.ts +1944 -0
  441. package/src/routes/site-sql.ts +263 -0
  442. package/src/routes/skill-content.ts +72 -7
  443. package/src/routes/skills.ts +5 -4
  444. package/src/routes/slack-bot-access.ts +108 -0
  445. package/src/routes/social.ts +27 -15
  446. package/src/routes/subscription-account-pools.ts +209 -0
  447. package/src/routes/subscription-core-http.ts +18 -0
  448. package/src/routes/subscription-pool-access.ts +180 -0
  449. package/src/routes/subscription-pool-core.ts +552 -0
  450. package/src/routes/supergrok.ts +174 -655
  451. package/src/routes/transcription-recordings.ts +71 -4
  452. package/src/routes/transcriptions.ts +26 -2
  453. package/src/routes/usage-allowances.ts +381 -0
  454. package/src/routes/variable-sets-removed.ts +19 -0
  455. package/src/routes/vault-providers.ts +782 -0
  456. package/src/routes/vaults.ts +421 -0
  457. package/src/routes/video-generation.ts +30 -12
  458. package/src/routes/workspace-artifacts.ts +165 -53
  459. package/src/routes/workspace-integrations.ts +576 -0
  460. package/src/routes/workspace-model-providers.ts +148 -0
  461. package/src/routes/workspace-state.ts +4 -0
  462. package/src/routes/workspaces.ts +625 -117
  463. package/src/sandbox/agent-update.ts +315 -0
  464. package/src/sandbox/auth-callout.ts +104 -21
  465. package/src/sandbox/channel-a.ts +165 -55
  466. package/src/sandbox/enrollment.ts +131 -22
  467. package/src/sandbox/machine-audience.ts +192 -0
  468. package/src/sandbox/machines.ts +75 -31
  469. package/src/sandbox/metrics-ingestion.ts +133 -2
  470. package/src/sandbox/rematerialize.ts +51 -21
  471. package/src/sandbox/screen-control.ts +289 -0
  472. package/src/sandbox/viewer.ts +33 -58
  473. package/src/sandbox-file-artifacts.ts +53 -27
  474. package/src/scheduled-task-blockers.ts +293 -0
  475. package/src/scheduled-task-deletion.ts +13 -3
  476. package/src/scheduled-task-lifecycle.ts +84 -0
  477. package/src/secret-answers.ts +119 -0
  478. package/src/session-create-observability.ts +46 -0
  479. package/src/session-realtime-context.ts +26 -4
  480. package/src/signed-state-secret.ts +58 -0
  481. package/src/site-agent-guard.ts +261 -0
  482. package/src/site-data/operations.ts +777 -0
  483. package/src/site-data/service.ts +1043 -0
  484. package/src/site-frame-guard.ts +107 -0
  485. package/src/site-publishing/agent-data-tools.ts +250 -0
  486. package/src/site-publishing/agent-model.ts +127 -0
  487. package/src/site-publishing/agent-session.ts +148 -0
  488. package/src/site-publishing/content-scanner.ts +93 -0
  489. package/src/site-publishing/edge-sync.ts +148 -0
  490. package/src/site-publishing/gateway-signature.ts +198 -0
  491. package/src/site-publishing/limits.ts +315 -0
  492. package/src/site-publishing/page-tool-authority.ts +111 -0
  493. package/src/site-publishing/platform-usage.ts +479 -0
  494. package/src/site-publishing/platform.ts +98 -0
  495. package/src/site-publishing/readiness.ts +330 -0
  496. package/src/site-publishing/runtime.ts +831 -0
  497. package/src/site-publishing/service.ts +1282 -0
  498. package/src/site-publishing/session-events.ts +262 -0
  499. package/src/site-publishing/session-views.ts +262 -0
  500. package/src/site-publishing/viewer.ts +75 -0
  501. package/src/site-session-origin.ts +91 -6
  502. package/src/site-sql/format.ts +134 -0
  503. package/src/site-sql/gateway.ts +168 -0
  504. package/src/site-sql/service.ts +1636 -0
  505. package/src/site-uploads.ts +27 -5
  506. package/src/temporal-schedule-sync.ts +74 -0
  507. package/src/transcription/billing-refusal.ts +14 -0
  508. package/src/transcription/normalize.ts +77 -0
  509. package/src/transcription/providers/azure-mai.ts +98 -0
  510. package/src/transcription/providers/azure-openai.ts +16 -7
  511. package/src/transcription/providers/codex-subscription.ts +190 -67
  512. package/src/transcription/providers/openai.ts +79 -5
  513. package/src/transcription/providers/subscription-core.ts +125 -0
  514. package/src/transcription/providers/xai-subscription.ts +81 -83
  515. package/src/transcription/segmenter.ts +7 -1
  516. package/src/transcription/service.ts +239 -10
  517. package/src/transcription/wav-duration.ts +39 -0
  518. package/src/workspace-deletion.ts +25 -1
  519. package/src/workspace-tool-gateway-attestations.ts +133 -0
  520. package/src/workspace-tool-gateway-observability.ts +64 -0
  521. package/src/workspace-tool-gateway-secrets.ts +104 -0
  522. package/src/workspace-tool-gateway.ts +921 -103
  523. package/src/workspace-tool-target-fence.ts +380 -0
  524. package/src/workspace-tool-target.ts +554 -0
  525. package/src/workspace-webhook-dispatch.ts +225 -0
  526. package/src/xai-realtime.ts +85 -81
  527. package/src/xai-subscription-core.ts +172 -0
  528. package/dist/browser-auth-broker.d.ts +0 -20
  529. package/dist/chunk-AJ62T5QN.js.map +0 -1
  530. package/dist/connection-authority-owner.d.ts +0 -59
  531. package/dist/routes/connection-authorities.d.ts +0 -3
  532. package/dist/routes/environments.d.ts +0 -5
  533. package/dist/routes/host-mcp-bindings.d.ts +0 -5
  534. package/dist/routes/host-mcp-resolvers.d.ts +0 -3
  535. package/dist/routes/packs.d.ts +0 -3
  536. package/dist/session-event-view-MU3HMNV3.js +0 -264
  537. package/dist/session-event-view-MU3HMNV3.js.map +0 -1
  538. package/dist/xai-subscription-auth.d.ts +0 -23
  539. package/src/browser-auth-broker.ts +0 -155
  540. package/src/connection-authority-owner.ts +0 -61
  541. package/src/routes/connection-authorities.ts +0 -139
  542. package/src/routes/environments.ts +0 -388
  543. package/src/routes/host-mcp-bindings.ts +0 -122
  544. package/src/routes/host-mcp-resolvers.ts +0 -41
  545. package/src/routes/packs.ts +0 -784
  546. 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 backfills this exact
13
- * policy onto every pre-cutover session reserved by a Slack interaction.
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
- * on demand. Connector tools are explicit-only, so freeze that narrow context
19
- * selection at session creation while keeping Slack mutations out of the model
20
- * surface; interaction delivery remains owned by the durable delivery pump.
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 const SLACK_TASK_FIRST_PARTY_MCP_TOOLS: ("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_identity" | "browser_lifecycle" | "browser_observe" | "browser_open" | "browser_publish" | "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_remove" | "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" | "instruction_policy_get" | "instruction_policy_propose" | "instruction_policy_save" | "interaction_discover" | "interaction_request_human" | "knowledge_archive" | "knowledge_browse" | "knowledge_correct" | "knowledge_get" | "knowledge_propose" | "knowledge_retain_file" | "knowledge_retain_message" | "knowledge_save" | "knowledge_search" | "memory_correct" | "memory_save" | "memory_search" | "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" | "session_create" | "session_events" | "session_get" | "session_human_input_respond" | "session_pause" | "session_resume" | "session_send_message" | "session_set_project" | "session_steer" | "session_wait" | "sessions_list" | "set_other_session_title" | "set_session_title" | "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_search" | "slack_bot_thread_replies" | "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")[];
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 slackPostSeed(interaction: Pick<SlackInteraction, "routedWorkspaceLabel">, seed: string): string;
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
- export declare function slackInvocationModelContext(invocationTimestamp: string, context: SlackInvocationMessageContext): string;
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 OpenGeni stores it verbatim. The workspace
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
- * Narrow a workspace-wide BrowserSession/ComputerSession inventory to the
10
- * entries a live agent attempt may reach. Every attach-by-id route already
11
- * authorizes the exact source session through the core seam; the list is the
12
- * discovery surface behind `interaction_discover scope=workspace`, so it must
13
- * apply the same seam (private sessions, Slack ownership, and the 0426
14
- * agent-access scope) to each associated session instead of exposing every
15
- * peer's identity. Humans, API keys, and service principals keep the complete
16
- * workspace inventory exactly as before.
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, ProtectedAuthFillResponse } from "@opengeni/contracts";
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 | ProtectedAuthFillResponse;
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,2 @@
1
+ import type { ActionCatalogEntry } from "./action-catalog-types.js";
2
+ export declare const ACTION_CATALOG: readonly ActionCatalogEntry[];
@@ -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
+ };