@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
@@ -22,19 +22,17 @@ import {
22
22
  hasGitCredentialRepositorySelection,
23
23
  hasGitHubRepositorySelection,
24
24
  sandboxLifecycleTransitionWaitMs,
25
+ sandboxWarmRateMicrosPerSecond,
25
26
  stableSandboxEnvironmentForRun,
26
27
  type Settings,
27
28
  } from "@opengeni/config";
28
29
  import { githubAppBotIdentity } from "@opengeni/github";
29
- import type { Session } from "@opengeni/contracts";
30
+ import type { AccessGrant, Session } from "@opengeni/contracts";
30
31
  import {
31
32
  acquireLease,
32
33
  getSandboxSessionEnvelope,
33
- getLiveEnrollmentConnection,
34
34
  getSandbox,
35
- getScheduledScopedRigVersionMetadata,
36
35
  touchLeaseHolder,
37
- loadWorkspaceEnvironmentForRun,
38
36
  markWarmLeaseInstanceLost,
39
37
  readActiveSandbox,
40
38
  readLease,
@@ -42,15 +40,18 @@ import {
42
40
  SandboxImageConflictError,
43
41
  SandboxProviderReadLockUnavailableError,
44
42
  SandboxRigConflictError,
43
+ SandboxPaidComputeAdmissionError,
45
44
  withSandboxProviderReadLock,
46
45
  type Database,
47
46
  type LeaseSnapshot,
48
47
  } from "@opengeni/db";
49
48
  import { appendAndPublishEvents, type EventBus } from "@opengeni/events";
50
49
  import {
50
+ errorCauseAttributes,
51
51
  recordTenancyCompatibilityLaneUse,
52
52
  sandboxLeaseTelemetryKey,
53
53
  sandboxOperationMetricObserver,
54
+ sandboxCaptureWaitMetricObserver,
54
55
  type Observability,
55
56
  } from "@opengeni/observability";
56
57
  import { HTTPException } from "hono/http-exception";
@@ -67,6 +68,7 @@ import {
67
68
  SandboxResumeIdentityMismatchError,
68
69
  SandboxResumeIdentityUnavailableError,
69
70
  RoutingActiveRouteChangedError,
71
+ RoutingMutationOutputRejectedError,
70
72
  RoutingWorkspaceRootChangedError,
71
73
  SelfhostedWorkspaceRootChangedError,
72
74
  ChannelAConflictError,
@@ -74,6 +76,7 @@ import {
74
76
  ChannelANotFoundError,
75
77
  ChannelAUnsupportedError,
76
78
  ChannelAUnavailableError,
79
+ SynchronousCommandOutcomeUnknownError,
77
80
  ChannelAValidationError,
78
81
  BrowserControlRequestError,
79
82
  BrowserControlTransportError,
@@ -89,12 +92,16 @@ import {
89
92
  type RoutingSandboxSession,
90
93
  } from "@opengeni/runtime/sandbox";
91
94
  import {
95
+ grantHasAgentAttemptAuthority,
92
96
  managedSessionGroupBackend,
93
97
  managedSessionGroupOs,
94
98
  providerSettingsForSessionSandboxRuntime,
95
99
  relayConfigFromSettings,
100
+ requireLiveAgentAttemptAuthorization,
101
+ resolveChannelAMachineConnection,
96
102
  resolveSessionSandboxRuntime,
97
103
  wrapChannelABoxWithRouting,
104
+ type ChannelAMachineAuthority,
98
105
  } from "@opengeni/core";
99
106
  import { establishApiSandboxSpawner } from "./rematerialize";
100
107
 
@@ -147,6 +154,9 @@ export type ChannelAContext = {
147
154
  session: Session;
148
155
  // The principal that drives the op (for emit attribution + pty opened_by).
149
156
  subjectId: string;
157
+ /** The authenticated route grant, when one drives the op. It resolves the
158
+ * session's Sandbox Environment for an agent attempt as its initiating human. */
159
+ grant?: AccessGrant | undefined;
150
160
  /** Cancel lifecycle waiting when the originating HTTP request disconnects. */
151
161
  waitSignal?: AbortSignal | undefined;
152
162
  /** Bounded route identity for metrics and safe operator diagnostics. */
@@ -156,6 +166,10 @@ export type ChannelAContext = {
156
166
  * provider handle and replay the request. Tab/lifecycle mutations that lack
157
167
  * a controller operation id must never opt into this recovery. */
158
168
  retryControllerTransport?: boolean | undefined;
169
+ /** Ephemeral browser callbacks must never replay after an ambiguous result. */
170
+ allowOperationReplay?: boolean | undefined;
171
+ /** Exact existing interaction provider; may not spawn/rotate on image drift. */
172
+ retainedInstanceId?: string | undefined;
159
173
  };
160
174
 
161
175
  export type ChannelAOperationFailureReason =
@@ -189,6 +203,10 @@ export type ChannelAHandle = {
189
203
  * active-sandbox pointer and is safe for placement-bound controllers. */
190
204
  homeSession: ChannelASession;
191
205
  routingSession: RoutingSandboxSession;
206
+ /** Whose access this request uses to reach a Connected Machine: the person
207
+ * who started an agent's turn, or the calling person. Routes that look up
208
+ * the routed machine again must use it rather than the raw caller grant. */
209
+ machineAuthority: () => Promise<ChannelAMachineAuthority>;
192
210
  requestId: string;
193
211
  };
194
212
 
@@ -403,6 +421,8 @@ type ChannelAReadRecoveryOptions = {
403
421
  /** Modal may expose one more stale command-router route after the first
404
422
  * successful handle rebuild. Keep this closed and statically bounded. */
405
423
  maxFreshHandleRetries?: 1 | 2;
424
+ /** Explicit opt-out overrides every transport/provider retry classification. */
425
+ allowOperationReplay?: boolean | undefined;
406
426
  /** Never start another provider attempt after the originating request ends. */
407
427
  waitSignal?: AbortSignal | undefined;
408
428
  /** Additional callback-specific failure that is safe to replay. */
@@ -429,7 +449,11 @@ export async function runChannelAReadWithFreshHandleRetry<T>(
429
449
  } catch (error) {
430
450
  const retryable =
431
451
  error instanceof ChannelAUnavailableError || options.retryableError?.(error) === true;
432
- if (!retryable || retries >= maxFreshHandleRetries) {
452
+ if (
453
+ options.allowOperationReplay === false ||
454
+ !retryable ||
455
+ retries >= maxFreshHandleRetries
456
+ ) {
433
457
  throw error;
434
458
  }
435
459
  options.waitSignal?.throwIfAborted();
@@ -521,6 +545,36 @@ export async function withChannelARead<T>(
521
545
  return await withChannelAOperation(services, ctx, true, fn);
522
546
  }
523
547
 
548
+ /**
549
+ * Whose access this request uses to reach a Connected Machine. A person uses
550
+ * their own. An agent acts for the person who started its turn (as swap and
551
+ * run_on do), so the machines that person can use stay usable from browser,
552
+ * computer, file and terminal requests; a personal machine also needs the
553
+ * attempt's own per-chat permission, checked by the connection resolver.
554
+ */
555
+ async function channelAMachineAuthority(
556
+ db: Database,
557
+ ctx: ChannelAContext,
558
+ ): Promise<ChannelAMachineAuthority> {
559
+ const grant = ctx.grant;
560
+ const callerSessionId = grant?.metadata?.["sessionId"];
561
+ if (!grant || !grantHasAgentAttemptAuthority(grant) || typeof callerSessionId !== "string") {
562
+ return { subjectId: ctx.subjectId, personalMachineAttempt: null };
563
+ }
564
+ const actor = await requireLiveAgentAttemptAuthorization(db, grant, callerSessionId);
565
+ if (!actor.initiatingHumanSubjectId) {
566
+ return { subjectId: ctx.subjectId, personalMachineAttempt: null };
567
+ }
568
+ return {
569
+ subjectId: actor.initiatingHumanSubjectId,
570
+ personalMachineAttempt: {
571
+ turnId: actor.turnId,
572
+ attemptId: actor.attemptId,
573
+ executionGeneration: actor.executionGeneration,
574
+ },
575
+ };
576
+ }
577
+
524
578
  async function withChannelAOperation<T>(
525
579
  services: ChannelAServices,
526
580
  ctx: ChannelAContext,
@@ -531,62 +585,39 @@ async function withChannelAOperation<T>(
531
585
  const onSandboxOperation = services.observability
532
586
  ? sandboxOperationMetricObserver(services.observability)
533
587
  : undefined;
588
+ const onSandboxCaptureWait = services.observability
589
+ ? sandboxCaptureWaitMetricObserver(services.observability)
590
+ : undefined;
534
591
  const { accountId, workspaceId, session } = ctx;
535
592
 
536
- if (session.sandboxBackend === "none") {
537
- throw new HTTPException(409, { message: "sandbox not available" });
538
- }
539
-
540
593
  const sandboxGroupId = session.sandboxGroupId;
541
594
  const requestId = crypto.randomUUID();
542
595
  const holderId = `direct:${requestId}`;
543
596
  const operationStartedAt = performance.now();
544
597
  const operation = ctx.operation ?? (readOnly ? "read" : "mutation");
545
598
  const leaseTtlMs = settings.sandboxLeaseTtlMs;
599
+ let machineAuthorityResult: Promise<ChannelAMachineAuthority> | undefined;
600
+ const machineAuthority = (): Promise<ChannelAMachineAuthority> =>
601
+ (machineAuthorityResult ??= channelAMachineAuthority(db, ctx));
546
602
 
547
603
  // The STABLE run-environment used by both a cloud home and a machine home.
548
- // It also carries the per-session Codemode pointer selected below.
549
- const workspaceEnvironmentValues: Record<string, string> = {};
550
- const rigVersion =
551
- session.rigId && session.rigVersionId
552
- ? await getScheduledScopedRigVersionMetadata(
553
- db,
554
- {
555
- accountId,
556
- workspaceId,
557
- subjectId: ctx.subjectId ?? "session-attach",
558
- },
559
- session.rigId,
560
- session.rigVersionId,
561
- )
562
- : null;
563
- for (const variableSetId of rigVersion?.version.defaultVariableSetIds ?? []) {
564
- const workspaceEnvironment = await loadWorkspaceEnvironmentForRun(db, settings, {
565
- accountId,
566
- workspaceId,
567
- variableSetId,
568
- authority: { kind: "session_attach", sessionId: session.id, subjectId: ctx.subjectId },
569
- });
570
- Object.assign(workspaceEnvironmentValues, workspaceEnvironment?.values ?? {});
571
- }
572
- for (const variableSetId of session.variableSetIds) {
573
- const workspaceEnvironment = await loadWorkspaceEnvironmentForRun(db, settings, {
574
- accountId,
575
- workspaceId,
576
- variableSetId,
577
- authority: { kind: "session_attach", sessionId: session.id, subjectId: ctx.subjectId },
578
- });
579
- Object.assign(workspaceEnvironmentValues, workspaceEnvironment?.values ?? {});
604
+ // It also carries the per-session Codemode pointer selected below. Constants
605
+ // only: user secrets are resolved per command (W1), never seeded here.
606
+ // `none` describes only the durable home. A session without a home sandbox
607
+ // that attached a Connected Machine runs its turns there (the worker gives
608
+ // such a turn the effective selfhosted backend), so its direct operations,
609
+ // such as opening a computer or browser on that machine, follow the same
610
+ // active pointer.
611
+ const machineOnlyHome = session.sandboxBackend === "none";
612
+ if (machineOnlyHome && !(await readActiveSandbox(db, workspaceId, session.id))?.activeSandboxId) {
613
+ throw new HTTPException(409, { message: "sandbox not available" });
580
614
  }
615
+ const effectiveBackend = machineOnlyHome ? "selfhosted" : session.sandboxBackend;
581
616
  const settingsForSession =
582
- session.sandboxBackend !== settings.sandboxBackend
583
- ? { ...settings, sandboxBackend: session.sandboxBackend }
617
+ effectiveBackend !== settings.sandboxBackend
618
+ ? { ...settings, sandboxBackend: effectiveBackend }
584
619
  : settings;
585
- const environment = stableSandboxEnvironmentForRun(
586
- settingsForSession,
587
- workspaceEnvironmentValues,
588
- { workspaceId },
589
- );
620
+ const environment = stableSandboxEnvironmentForRun(settingsForSession, { workspaceId });
590
621
  if (hasGitCredentialRepositorySelection(session.resources)) {
591
622
  applyGitAuthPointerEnvironment(
592
623
  environment,
@@ -635,6 +666,7 @@ async function withChannelAOperation<T>(
635
666
  lease,
636
667
  homeSession,
637
668
  routingSession,
669
+ machineAuthority,
638
670
  requestId,
639
671
  });
640
672
  // The direct request has accepted the result in memory. Finalize every
@@ -647,12 +679,15 @@ async function withChannelAOperation<T>(
647
679
  // A machine-targeted top-level session has an honest selfhosted HOME label.
648
680
  // It has no cloud provider box and therefore must not acquire or establish a
649
681
  // phantom home lease before following its active machine pointer.
650
- if (session.sandboxBackend === "selfhosted") {
682
+ if (effectiveBackend === "selfhosted") {
651
683
  let established: EstablishedSandboxSession | undefined;
652
684
  try {
653
685
  ctx.waitSignal?.throwIfAborted();
654
686
  const pointer = await readActiveSandbox(db, workspaceId, session.id);
655
687
  if (!pointer?.activeSandboxId) {
688
+ if (machineOnlyHome) {
689
+ throw new HTTPException(409, { message: "sandbox not available" });
690
+ }
656
691
  // A machine-home session with no selected machine uses the deployment's
657
692
  // managed group box, exactly like the worker turn path. Keep the durable
658
693
  // home label honest; only this request's effective backend changes.
@@ -679,9 +714,10 @@ async function withChannelAOperation<T>(
679
714
  message: "machine-home session has no active Connected Machine or managed sandbox",
680
715
  });
681
716
  }
717
+ const requestMachineAuthority = await machineAuthority();
682
718
  const sandbox = await getSandbox(
683
719
  db,
684
- { accountId: ctx.accountId, workspaceId, subjectId: ctx.subjectId },
720
+ { accountId: ctx.accountId, workspaceId, subjectId: requestMachineAuthority.subjectId },
685
721
  pointer.activeSandboxId,
686
722
  );
687
723
  if (sandbox?.kind !== "selfhosted" || !sandbox.enrollmentId) {
@@ -690,10 +726,16 @@ async function withChannelAOperation<T>(
690
726
  });
691
727
  }
692
728
  const originWorkspaceId = sandbox.workspaceId;
693
- const enrollment = await getLiveEnrollmentConnection(
729
+ const enrollment = await resolveChannelAMachineConnection(
694
730
  db,
695
- { accountId, workspaceId, subjectId: ctx.subjectId },
696
- sandbox.enrollmentId,
731
+ {
732
+ accountId,
733
+ workspaceId,
734
+ sessionId: session.id,
735
+ machineWorkspaceId: originWorkspaceId,
736
+ enrollmentId: sandbox.enrollmentId,
737
+ },
738
+ requestMachineAuthority,
697
739
  );
698
740
  if (!enrollment?.connectionInstanceId) {
699
741
  // Preserve causal machine liveness through Channel-A. Generic callers
@@ -753,6 +795,7 @@ async function withChannelAOperation<T>(
753
795
  settings,
754
796
  bus,
755
797
  ...(onSandboxOperation ? { onSandboxOperation } : {}),
798
+ ...(onSandboxCaptureWait ? { onSandboxCaptureWait } : {}),
756
799
  ...(ctx.waitSignal ? { waitSignal: ctx.waitSignal } : {}),
757
800
  },
758
801
  {
@@ -760,6 +803,7 @@ async function withChannelAOperation<T>(
760
803
  workspaceId,
761
804
  sessionId: session.id,
762
805
  resourceSubjectId: ctx.subjectId,
806
+ machineAuthority,
763
807
  pinnedSelfhosted: {
764
808
  sandboxId: sandbox.id,
765
809
  epoch: pointer.activeEpoch,
@@ -787,9 +831,14 @@ async function withChannelAOperation<T>(
787
831
 
788
832
  // One session has one logical runtime across turns and every API-direct
789
833
  // surface. Without this, Terminal/Files/Browser/Computer/viewers could rearm
790
- // a stale deployment image after the worker had resolved a newer Pack/Rig or
834
+
791
835
  // deployment image for the same durable sandbox group.
792
- const sandboxRuntime = await resolveSessionSandboxRuntime(db, settings, session);
836
+ const sandboxRuntime = await resolveSessionSandboxRuntime(
837
+ db,
838
+ settings,
839
+ session,
840
+ ctx.grant ? { grant: ctx.grant } : { subjectId: ctx.subjectId },
841
+ );
793
842
 
794
843
  const release = async (): Promise<void> => {
795
844
  await releaseLeaseHolder(db, {
@@ -818,8 +867,14 @@ async function withChannelAOperation<T>(
818
867
  holderId,
819
868
  subjectId: session.id,
820
869
  backend: session.sandboxBackend,
870
+ warmBilling: {
871
+ mode: settings.sandboxWarmBillingMode,
872
+ rateMicrosPerSecond: sandboxWarmRateMicrosPerSecond(settings, session.sandboxBackend),
873
+ },
821
874
  os: session.sandboxOs,
822
875
  image: sandboxRuntime.image,
876
+ imagePolicy: "new_creates_only",
877
+ ...(ctx.retainedInstanceId ? { retainedInstanceId: ctx.retainedInstanceId } : {}),
823
878
  rigVersionId: session.rigVersionId,
824
879
  leaseTtlMs,
825
880
  warmingLeaseTtlMs: settings.sandboxWarmingTimeoutMs,
@@ -1060,6 +1115,7 @@ async function withChannelAOperation<T>(
1060
1115
  settings,
1061
1116
  bus,
1062
1117
  ...(onSandboxOperation ? { onSandboxOperation } : {}),
1118
+ ...(onSandboxCaptureWait ? { onSandboxCaptureWait } : {}),
1063
1119
  ...(ctx.waitSignal ? { waitSignal: ctx.waitSignal } : {}),
1064
1120
  },
1065
1121
  {
@@ -1067,6 +1123,7 @@ async function withChannelAOperation<T>(
1067
1123
  workspaceId,
1068
1124
  sessionId: session.id,
1069
1125
  resourceSubjectId: ctx.subjectId,
1126
+ machineAuthority,
1070
1127
  homeLease: {
1071
1128
  sandboxGroupId,
1072
1129
  leaseEpoch: leaseSnapshot.leaseEpoch,
@@ -1168,6 +1225,7 @@ async function withChannelAOperation<T>(
1168
1225
  },
1169
1226
  {
1170
1227
  maxFreshHandleRetries: session.sandboxBackend === "modal" ? 2 : 1,
1228
+ allowOperationReplay: ctx.allowOperationReplay,
1171
1229
  ...(ctx.waitSignal ? { waitSignal: ctx.waitSignal } : {}),
1172
1230
  ...(ctx.retryControllerTransport
1173
1231
  ? { retryableError: isRetryableControllerTransport }
@@ -1204,6 +1262,8 @@ async function withChannelAOperation<T>(
1204
1262
  * already-HTTPException unchanged. */
1205
1263
  export function mapChannelAError(error: unknown, waitSignal?: AbortSignal): unknown {
1206
1264
  if (error instanceof HTTPException) return error;
1265
+ if (error instanceof SandboxPaidComputeAdmissionError)
1266
+ return new HTTPException(402, { message: error.message, cause: error });
1207
1267
  if (isChannelARequestCancellation(error, waitSignal))
1208
1268
  return new HTTPException(499 as never, {
1209
1269
  message: "request cancelled",
@@ -1214,6 +1274,20 @@ export function mapChannelAError(error: unknown, waitSignal?: AbortSignal): unkn
1214
1274
  error instanceof SandboxResumeIdentityUnavailableError
1215
1275
  )
1216
1276
  return new HTTPException(409, { message: error.message });
1277
+ if (error instanceof RoutingMutationOutputRejectedError) {
1278
+ const revoked = error.reasonCode === "authority_revoked";
1279
+ return new ApiHttpError(revoked ? 403 : 409, {
1280
+ code: revoked ? "forbidden" : "conflict",
1281
+ message: error.message,
1282
+ retryable: false,
1283
+ outcomeUnknown: false,
1284
+ details: {
1285
+ code: error.code,
1286
+ reasonCode: error.reasonCode,
1287
+ physicalOutcome: "resolved",
1288
+ },
1289
+ });
1290
+ }
1217
1291
  if (
1218
1292
  error instanceof RoutingActiveRouteChangedError ||
1219
1293
  error instanceof RoutingWorkspaceRootChangedError ||
@@ -1235,8 +1309,27 @@ export function mapChannelAError(error: unknown, waitSignal?: AbortSignal): unkn
1235
1309
  });
1236
1310
  if (error instanceof SelfhostedControlError && error.agentOffline)
1237
1311
  return new HTTPException(409, { message: error.message, cause: error });
1312
+ if (error instanceof SelfhostedControlError && error.payloadTooLarge) {
1313
+ const outbound = error.detail.direction === "request";
1314
+ // Project only the bounded direction. Native free-form diagnostics can
1315
+ // contain file contents or private paths. A large reply is not evidence
1316
+ // that the operation failed before execution, and must not invite replay.
1317
+ return new ApiHttpError(outbound ? 413 : 502, {
1318
+ code: "limit_exceeded",
1319
+ message: outbound
1320
+ ? "The request exceeds the connected machine's per-message size limit. Large file content requires a machine that supports bounded file transfers."
1321
+ : "The connected machine's reply exceeds its per-message size limit. The operation may have completed; inspect its result before repeating it. Read large files in bounded ranges.",
1322
+ retryable: false,
1323
+ details: {
1324
+ code: "machine_transport_payload_too_large",
1325
+ direction: outbound ? "request" : "response",
1326
+ },
1327
+ });
1328
+ }
1238
1329
  if (error instanceof ChannelAUnavailableError)
1239
1330
  return new HTTPException(503, { message: error.message });
1331
+ if (error instanceof SynchronousCommandOutcomeUnknownError)
1332
+ return new HTTPException(409, { message: error.message });
1240
1333
  if (error instanceof ChannelAValidationError)
1241
1334
  return new HTTPException(400, { message: error.message });
1242
1335
  if (error instanceof ChannelANotFoundError)
@@ -1292,6 +1385,13 @@ export function channelAOperationFailureDiagnostic(
1292
1385
  errorCode: "sandbox_channel_a_cancelled",
1293
1386
  };
1294
1387
  }
1388
+ if (error instanceof RoutingMutationOutputRejectedError) {
1389
+ return {
1390
+ reason: "request_rejected",
1391
+ status: error.reasonCode === "authority_revoked" ? 403 : 409,
1392
+ errorCode: "sandbox_channel_a_operation_failed",
1393
+ };
1394
+ }
1295
1395
  if (error instanceof SandboxProviderReadLockUnavailableError) {
1296
1396
  return {
1297
1397
  reason: "provider_read_busy",
@@ -1299,6 +1399,13 @@ export function channelAOperationFailureDiagnostic(
1299
1399
  errorCode: "sandbox_channel_a_provider_busy",
1300
1400
  };
1301
1401
  }
1402
+ if (error instanceof SelfhostedControlError && error.payloadTooLarge) {
1403
+ return {
1404
+ reason: error.detail.direction === "request" ? "request_rejected" : "provider_unavailable",
1405
+ status: error.detail.direction === "request" ? 413 : 502,
1406
+ errorCode: "sandbox_channel_a_operation_failed",
1407
+ };
1408
+ }
1302
1409
  if (error instanceof SandboxImageConflictError || error instanceof SandboxRigConflictError) {
1303
1410
  return {
1304
1411
  reason: "lifecycle_conflict",
@@ -1398,6 +1505,9 @@ export function observeChannelAOperationFailure(
1398
1505
  errorClass: "SandboxChannelAOperationError",
1399
1506
  errorCode: diagnostic.errorCode,
1400
1507
  origin: "api",
1508
+ // Which component refused it (controller, machine, database), as reviewed
1509
+ // closed values only; "unexpected" alone cannot be diagnosed after the fact.
1510
+ ...errorCauseAttributes(input.error),
1401
1511
  } as const;
1402
1512
  try {
1403
1513
  services.observability.incrementCounter({