@opengeni/api-router 0.30.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/dist/access-grant-rls.d.ts +3 -0
  2. package/dist/admission-trace.d.ts +8 -0
  3. package/dist/api-websocket.d.ts +18 -0
  4. package/dist/app.d.ts +50 -2
  5. package/dist/app.js +12 -1
  6. package/dist/artifact-catalog-cursor.d.ts +27 -0
  7. package/dist/auth/managed-auth-attempt-context.d.ts +10 -0
  8. package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
  9. package/dist/auth/managed-auth-session-adapter.d.ts +6 -0
  10. package/dist/auth/managed-auth.d.ts +102 -3
  11. package/dist/auth/managed-email.d.ts +29 -0
  12. package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
  13. package/dist/auth/new-signups-gate.d.ts +23 -0
  14. package/dist/auth/organization-user-setup.d.ts +80 -0
  15. package/dist/auth/signup-funnel-metrics.d.ts +44 -0
  16. package/dist/browser-controller-authority.d.ts +1 -61
  17. package/dist/browser-ephemeral.d.ts +5 -0
  18. package/dist/browser-state-authority.d.ts +1 -27
  19. package/dist/chunk-6TZ5LG3O.js +123948 -0
  20. package/dist/chunk-6TZ5LG3O.js.map +1 -0
  21. package/dist/chunk-OGQDXVXY.js +18 -0
  22. package/dist/chunk-OGQDXVXY.js.map +1 -0
  23. package/dist/claude-subscription-account-conflicts.d.ts +1 -0
  24. package/dist/claude-subscription-account-usage.d.ts +39 -0
  25. package/dist/claude-subscription-oauth.d.ts +25 -0
  26. package/dist/claude-subscription-profile.d.ts +9 -0
  27. package/dist/claude-subscription-usage.d.ts +44 -0
  28. package/dist/claude-workspace-connection.d.ts +15 -0
  29. package/dist/codemode.d.ts +32 -1
  30. package/dist/company-brain-okf.d.ts +24 -0
  31. package/dist/connected-machine-computer-access.d.ts +11 -0
  32. package/dist/connection-ownership.d.ts +54 -0
  33. package/dist/controller-data-plane.d.ts +32 -0
  34. package/dist/editable-artifact-office-import.d.ts +7 -4
  35. package/dist/editable-artifact-source-session.d.ts +3 -0
  36. package/dist/editable-artifact-websocket.d.ts +10 -18
  37. package/dist/editable-artifact-workspace-files.d.ts +1 -1
  38. package/dist/fatal-process-boundary.d.ts +25 -0
  39. package/dist/github-access.d.ts +31 -2
  40. package/dist/http/acting-person.d.ts +24 -0
  41. package/dist/http/api-contract-compat.d.ts +19 -0
  42. package/dist/http/api-error.d.ts +27 -1
  43. package/dist/http/cors.d.ts +17 -0
  44. package/dist/http/deprecation.d.ts +42 -0
  45. package/dist/http/interaction-control-error.d.ts +13 -0
  46. package/dist/http/keyed-admission.d.ts +12 -0
  47. package/dist/http/local-browser-boundary.d.ts +72 -0
  48. package/dist/http/metrics-listener.d.ts +22 -0
  49. package/dist/http/path-identifier.d.ts +17 -0
  50. package/dist/http/registered-route-label.d.ts +16 -0
  51. package/dist/http/request-body.d.ts +27 -0
  52. package/dist/http/request-source.d.ts +52 -0
  53. package/dist/http/sse.d.ts +17 -6
  54. package/dist/http/unmatched-route.d.ts +18 -0
  55. package/dist/http/user-content.d.ts +36 -0
  56. package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
  57. package/dist/index.d.ts +10 -3
  58. package/dist/index.js +1129 -166
  59. package/dist/index.js.map +1 -1
  60. package/dist/integration-endpoint-test.d.ts +20 -0
  61. package/dist/integrations/api-integrations.d.ts +2 -2
  62. package/dist/integrations/atlassian.d.ts +29 -3
  63. package/dist/integrations/connect-authority.d.ts +1 -0
  64. package/dist/integrations/connect-callback-return.d.ts +6 -0
  65. package/dist/integrations/fiken.d.ts +16 -2
  66. package/dist/integrations/github-app-connect.d.ts +47 -0
  67. package/dist/integrations/github-installation-proof.d.ts +3 -0
  68. package/dist/integrations/github-lens-connect.d.ts +116 -0
  69. package/dist/integrations/github-skill-source.d.ts +1 -5
  70. package/dist/integrations/google-drive.d.ts +25 -0
  71. package/dist/integrations/integration-commit-authority.d.ts +13 -0
  72. package/dist/integrations/marketplace-plugin.d.ts +2691 -0
  73. package/dist/integrations/oauth-client.d.ts +178 -18
  74. package/dist/integrations/oauth-profiles.d.ts +222 -0
  75. package/dist/integrations/oauth-return-path.d.ts +1 -0
  76. package/dist/integrations/personal-github-repositories.d.ts +84 -0
  77. package/dist/integrations/personal-github.d.ts +42 -0
  78. package/dist/integrations/pr-review-provider.d.ts +22 -0
  79. package/dist/integrations/provider-oauth.d.ts +19 -1
  80. package/dist/integrations/slack-app-home.d.ts +24 -0
  81. package/dist/integrations/slack-bot.d.ts +367 -12
  82. package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
  83. package/dist/integrations/slack-install.d.ts +20 -0
  84. package/dist/integrations/slack-interactions.d.ts +113 -10
  85. package/dist/integrations/slack-mrkdwn.d.ts +41 -0
  86. package/dist/integrations/slack-routing.d.ts +120 -0
  87. package/dist/integrations/slack-session-defaults.d.ts +58 -0
  88. package/dist/integrations/slack-task-file-upload.d.ts +36 -0
  89. package/dist/integrations/social-oauth.d.ts +7 -0
  90. package/dist/interaction-agent-access.d.ts +15 -0
  91. package/dist/interaction-frame-proxy.d.ts +68 -0
  92. package/dist/interaction-metrics.d.ts +2 -0
  93. package/dist/mcp/action-catalog-types.d.ts +9 -0
  94. package/dist/mcp/action-catalog.gen.d.ts +2 -0
  95. package/dist/mcp/capability-account-readiness.d.ts +7 -0
  96. package/dist/mcp/child-read-evidence.d.ts +9 -0
  97. package/dist/mcp/command-read.d.ts +24 -0
  98. package/dist/mcp/company-profile-agent-admin.d.ts +44 -0
  99. package/dist/mcp/contract-input.d.ts +11 -0
  100. package/dist/mcp/documents.d.ts +7 -5
  101. package/dist/mcp/files.d.ts +2 -2
  102. package/dist/mcp/first-party-tool-permissions.d.ts +650 -0
  103. package/dist/mcp/knowledge-entries.d.ts +5 -0
  104. package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
  105. package/dist/mcp/receipts.d.ts +9 -0
  106. package/dist/mcp/request-abort.d.ts +19 -0
  107. package/dist/mcp/scheduled-task-input.d.ts +1189 -0
  108. package/dist/mcp/scheduled-task-view.d.ts +22 -4
  109. package/dist/mcp/server.d.ts +255 -3
  110. package/dist/mcp/session-event-view.d.ts +94 -0
  111. package/dist/mcp/session-view.d.ts +66 -2
  112. package/dist/mcp/session-wait.d.ts +174 -0
  113. package/dist/mcp-oauth.d.ts +52 -0
  114. package/dist/model-catalog.d.ts +11 -31
  115. package/dist/observability.d.ts +3 -1
  116. package/dist/organization-mcp.d.ts +52 -0
  117. package/dist/organization-recovery-notifications.d.ts +41 -0
  118. package/dist/routes/analytics-consent.d.ts +26 -0
  119. package/dist/routes/api-integrations.d.ts +25 -0
  120. package/dist/routes/api-keys.d.ts +17 -0
  121. package/dist/routes/artifact-catalog.d.ts +6 -0
  122. package/dist/routes/automations.d.ts +19 -0
  123. package/dist/routes/billing.d.ts +49 -0
  124. package/dist/routes/browser-sessions.d.ts +71 -3
  125. package/dist/routes/claude-subscription-accounts.d.ts +3 -0
  126. package/dist/routes/claude-subscription-oauth.d.ts +3 -0
  127. package/dist/routes/client-errors.d.ts +146 -0
  128. package/dist/routes/codex.d.ts +76 -2
  129. package/dist/routes/company-brain.d.ts +3 -0
  130. package/dist/routes/company-profile.d.ts +2 -1
  131. package/dist/routes/computer-sessions.d.ts +14 -0
  132. package/dist/routes/connect.d.ts +5 -0
  133. package/dist/routes/editable-artifacts.d.ts +2 -0
  134. package/dist/routes/external-identity-links.d.ts +6 -0
  135. package/dist/routes/feedback.d.ts +3 -0
  136. package/dist/routes/files.d.ts +4 -0
  137. package/dist/routes/github-browser-pages.d.ts +12 -0
  138. package/dist/routes/github.d.ts +2 -0
  139. package/dist/routes/insights-response-cache.d.ts +10 -0
  140. package/dist/routes/insights-usage.d.ts +12 -0
  141. package/dist/routes/insights.d.ts +30 -1
  142. package/dist/routes/knowledge.d.ts +3 -0
  143. package/dist/routes/managed-auth-session-sets.d.ts +26 -0
  144. package/dist/routes/managed-onboarding.d.ts +29 -0
  145. package/dist/routes/managed-sign-in-methods.d.ts +6 -0
  146. package/dist/routes/model-connection-access.d.ts +3 -0
  147. package/dist/routes/organization-integration-policy.d.ts +3 -0
  148. package/dist/routes/organization-integrations.d.ts +6 -0
  149. package/dist/routes/organization-mcp-connections.d.ts +3 -0
  150. package/dist/routes/organization-model-providers.d.ts +3 -0
  151. package/dist/routes/organization-recovery.d.ts +19 -0
  152. package/dist/routes/organization-service-accounts.d.ts +3 -0
  153. package/dist/routes/organization-sessions.d.ts +26 -0
  154. package/dist/routes/personal-github-git-broker.d.ts +29 -0
  155. package/dist/routes/personal-github.d.ts +3 -0
  156. package/dist/routes/pr-review-github.d.ts +3 -0
  157. package/dist/routes/pr-review.d.ts +3 -0
  158. package/dist/routes/session-artifact-associations.d.ts +4 -0
  159. package/dist/routes/session-history-imports.d.ts +9 -0
  160. package/dist/routes/sessions.d.ts +44 -6
  161. package/dist/routes/skill-content.d.ts +4 -0
  162. package/dist/routes/skill-install-authority.d.ts +6 -0
  163. package/dist/routes/subscription-account-pools.d.ts +34 -0
  164. package/dist/routes/subscription-pool-access.d.ts +16 -0
  165. package/dist/routes/supergrok.d.ts +6 -1
  166. package/dist/routes/usage-allowances.d.ts +12 -0
  167. package/dist/routes/user-resource-authorities.d.ts +3 -0
  168. package/dist/routes/workspace-artifacts.d.ts +2 -1
  169. package/dist/routes/workspace-capture.d.ts +10 -2
  170. package/dist/routes/workspace-integrations.d.ts +35 -0
  171. package/dist/routes/workspace-learning.d.ts +3 -0
  172. package/dist/routes/workspace-model-providers.d.ts +4 -0
  173. package/dist/routes/workspaces.d.ts +29 -0
  174. package/dist/sandbox/auth-callout.d.ts +8 -0
  175. package/dist/sandbox/channel-a.d.ts +19 -1
  176. package/dist/sandbox/connection-authority.d.ts +3 -0
  177. package/dist/sandbox/enrollment.d.ts +9 -1
  178. package/dist/sandbox/machines.d.ts +5 -2
  179. package/dist/sandbox/metrics-ingestion.d.ts +28 -20
  180. package/dist/sandbox/rematerialize.d.ts +2 -0
  181. package/dist/sandbox/session-attach-variable-sets.d.ts +30 -0
  182. package/dist/sandbox/viewer.d.ts +26 -1
  183. package/dist/sandbox-file-artifacts.d.ts +50 -0
  184. package/dist/scheduled-task-deletion.d.ts +13 -0
  185. package/dist/session-create-observability.d.ts +5 -0
  186. package/dist/session-event-view-MPS2OZD3.js +292 -0
  187. package/dist/session-event-view-MPS2OZD3.js.map +1 -0
  188. package/dist/site-session-origin.d.ts +13 -0
  189. package/dist/site-uploads.d.ts +41 -0
  190. package/dist/slack-reaction-files.d.ts +1 -1
  191. package/dist/temporal-schedule-cleanup.d.ts +1 -0
  192. package/dist/temporal-schedule-sync.d.ts +26 -0
  193. package/dist/transcription/providers/xai-subscription.d.ts +1 -0
  194. package/dist/transcription/service.d.ts +2 -1
  195. package/dist/work-discovery-observability.d.ts +33 -0
  196. package/dist/workspace-artifact-content.d.ts +28 -0
  197. package/dist/workspace-artifact-provenance.d.ts +7 -0
  198. package/dist/workspace-delete-observability.d.ts +10 -0
  199. package/dist/workspace-deletion.d.ts +6 -0
  200. package/dist/workspace-state-projection.d.ts +3 -5
  201. package/dist/workspace-tool-gateway-observability.d.ts +17 -0
  202. package/dist/workspace-tool-gateway.d.ts +123 -0
  203. package/dist/workspace-webhook-dispatch.d.ts +26 -0
  204. package/package.json +23 -19
  205. package/src/access-grant-rls.ts +75 -0
  206. package/src/admission-trace.ts +14 -0
  207. package/src/api-websocket.ts +23 -0
  208. package/src/app.ts +1974 -256
  209. package/src/artifact-catalog-cursor.ts +60 -0
  210. package/src/auth/managed-auth-attempt-context.ts +70 -0
  211. package/src/auth/managed-auth-rate-limits.ts +252 -0
  212. package/src/auth/managed-auth-session-adapter.ts +222 -0
  213. package/src/auth/managed-auth.ts +536 -60
  214. package/src/auth/managed-email.ts +174 -0
  215. package/src/auth/managed-sign-in-notifications.ts +81 -0
  216. package/src/auth/new-signups-gate.ts +49 -0
  217. package/src/auth/organization-user-setup.ts +307 -0
  218. package/src/auth/signup-funnel-metrics.ts +164 -0
  219. package/src/browser-controller-authority.ts +1 -186
  220. package/src/browser-ephemeral.ts +39 -0
  221. package/src/browser-state-authority.ts +1 -236
  222. package/src/claude-subscription-account-conflicts.ts +12 -0
  223. package/src/claude-subscription-account-usage.ts +48 -0
  224. package/src/claude-subscription-oauth.ts +362 -0
  225. package/src/claude-subscription-profile.ts +73 -0
  226. package/src/claude-subscription-usage.ts +97 -0
  227. package/src/claude-workspace-connection.ts +82 -0
  228. package/src/codemode.ts +194 -30
  229. package/src/codex-realtime.ts +8 -2
  230. package/src/company-brain-okf.ts +340 -0
  231. package/src/connected-machine-computer-access.ts +33 -0
  232. package/src/connection-ownership.ts +199 -0
  233. package/src/controller-data-plane.ts +81 -0
  234. package/src/editable-artifact-native-kernel.ts +26 -15
  235. package/src/editable-artifact-office-import.ts +77 -9
  236. package/src/editable-artifact-production.ts +23 -7
  237. package/src/editable-artifact-source-session.ts +123 -0
  238. package/src/editable-artifact-websocket.ts +27 -21
  239. package/src/editable-artifact-workspace-files.ts +31 -6
  240. package/src/fatal-process-boundary.ts +246 -0
  241. package/src/gateway-realtime.ts +1 -1
  242. package/src/github-access.ts +147 -5
  243. package/src/http/acting-person.ts +71 -0
  244. package/src/http/api-contract-compat.ts +49 -0
  245. package/src/http/api-error.ts +115 -1
  246. package/src/http/auth.ts +48 -0
  247. package/src/http/cors.ts +67 -0
  248. package/src/http/deprecation.ts +118 -0
  249. package/src/http/interaction-control-error.ts +164 -0
  250. package/src/http/keyed-admission.ts +29 -0
  251. package/src/http/local-browser-boundary.ts +343 -0
  252. package/src/http/metrics-listener.ts +57 -0
  253. package/src/http/path-identifier.ts +54 -0
  254. package/src/http/registered-route-label.ts +34 -0
  255. package/src/http/request-body.ts +127 -0
  256. package/src/http/request-source.ts +178 -0
  257. package/src/http/sse.ts +486 -132
  258. package/src/http/unmatched-route.ts +60 -0
  259. package/src/http/user-content.ts +158 -0
  260. package/src/http/websocket-upgrade-dispatch.ts +29 -0
  261. package/src/index.ts +157 -52
  262. package/src/integration-endpoint-test.ts +291 -0
  263. package/src/integrations/api-integrations.ts +98 -11
  264. package/src/integrations/atlassian.ts +474 -136
  265. package/src/integrations/connect-authority.ts +2 -0
  266. package/src/integrations/connect-callback-return.ts +86 -0
  267. package/src/integrations/fiken.ts +354 -64
  268. package/src/integrations/github-app-connect.ts +435 -0
  269. package/src/integrations/github-installation-proof.ts +60 -0
  270. package/src/integrations/github-lens-connect.ts +76 -0
  271. package/src/integrations/github-skill-source.ts +2 -142
  272. package/src/integrations/google-drive.ts +820 -222
  273. package/src/integrations/integration-commit-authority.ts +69 -0
  274. package/src/integrations/marketplace-plugin.ts +48 -0
  275. package/src/integrations/oauth-client.ts +1356 -459
  276. package/src/integrations/oauth-profiles.ts +537 -0
  277. package/src/integrations/oauth-return-path.ts +18 -0
  278. package/src/integrations/personal-github-repositories.ts +674 -0
  279. package/src/integrations/personal-github.ts +825 -0
  280. package/src/integrations/pr-review-provider.ts +246 -0
  281. package/src/integrations/provider-oauth.ts +250 -22
  282. package/src/integrations/slack-app-home.ts +300 -0
  283. package/src/integrations/slack-bot.ts +963 -239
  284. package/src/integrations/slack-file-upload-flow.ts +147 -0
  285. package/src/integrations/slack-install.ts +83 -0
  286. package/src/integrations/slack-interactions.ts +3170 -474
  287. package/src/integrations/slack-mrkdwn.ts +193 -0
  288. package/src/integrations/slack-routing.ts +337 -0
  289. package/src/integrations/slack-session-defaults.ts +224 -0
  290. package/src/integrations/slack-task-file-upload.ts +323 -0
  291. package/src/integrations/social-oauth.ts +213 -15
  292. package/src/interaction-agent-access.ts +48 -0
  293. package/src/interaction-frame-proxy.ts +409 -0
  294. package/src/interaction-metrics.ts +30 -0
  295. package/src/mcp/action-catalog-types.ts +9 -0
  296. package/src/mcp/action-catalog.gen.ts +6696 -0
  297. package/src/mcp/capability-account-readiness.ts +17 -0
  298. package/src/mcp/child-read-evidence.ts +19 -0
  299. package/src/mcp/command-read.ts +109 -0
  300. package/src/mcp/company-profile-agent-admin.ts +198 -0
  301. package/src/mcp/contract-input.ts +141 -0
  302. package/src/mcp/documents.ts +65 -377
  303. package/src/mcp/editable-artifacts.ts +12 -6
  304. package/src/mcp/files.ts +80 -38
  305. package/src/mcp/first-party-tool-permissions.ts +305 -0
  306. package/src/mcp/knowledge-entries.ts +322 -0
  307. package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
  308. package/src/mcp/receipts.ts +34 -0
  309. package/src/mcp/request-abort.ts +44 -0
  310. package/src/mcp/scheduled-task-input.ts +76 -0
  311. package/src/mcp/scheduled-task-view.ts +44 -3
  312. package/src/mcp/server.ts +3030 -1267
  313. package/src/mcp/session-event-view.ts +383 -0
  314. package/src/mcp/session-view.ts +84 -3
  315. package/src/mcp/session-wait.ts +665 -0
  316. package/src/mcp-oauth.ts +1123 -0
  317. package/src/model-catalog.ts +91 -333
  318. package/src/observability.ts +15 -1
  319. package/src/organization-mcp.ts +397 -0
  320. package/src/organization-recovery-notifications.ts +103 -0
  321. package/src/routes/analytics-consent.ts +123 -0
  322. package/src/routes/api-integrations.ts +364 -74
  323. package/src/routes/api-keys.ts +336 -10
  324. package/src/routes/artifact-catalog.ts +279 -0
  325. package/src/routes/automations.ts +768 -0
  326. package/src/routes/billing.ts +461 -46
  327. package/src/routes/browser-sessions.ts +839 -131
  328. package/src/routes/canonical-human-identities.ts +90 -14
  329. package/src/routes/capabilities.ts +107 -6
  330. package/src/routes/channels.ts +20 -3
  331. package/src/routes/claude-subscription-accounts.ts +334 -0
  332. package/src/routes/claude-subscription-oauth.ts +142 -0
  333. package/src/routes/client-errors.ts +362 -0
  334. package/src/routes/codex.ts +833 -116
  335. package/src/routes/company-brain.ts +322 -0
  336. package/src/routes/company-profile.ts +65 -1
  337. package/src/routes/computer-sessions.ts +557 -106
  338. package/src/routes/connect.ts +1938 -0
  339. package/src/routes/connections.ts +1040 -349
  340. package/src/routes/documents.ts +488 -287
  341. package/src/routes/editable-artifacts.ts +79 -9
  342. package/src/routes/enrollments.ts +135 -39
  343. package/src/routes/environments.ts +154 -58
  344. package/src/routes/external-identity-links.ts +201 -0
  345. package/src/routes/feedback.ts +113 -0
  346. package/src/routes/files.ts +337 -39
  347. package/src/routes/github-browser-pages.ts +162 -0
  348. package/src/routes/github.ts +446 -144
  349. package/src/routes/insights-response-cache.ts +83 -0
  350. package/src/routes/insights-usage.ts +345 -0
  351. package/src/routes/insights.ts +153 -19
  352. package/src/routes/install.ts +133 -38
  353. package/src/routes/integration-facets.ts +107 -33
  354. package/src/routes/interaction-resources.ts +30 -3
  355. package/src/routes/knowledge.ts +488 -0
  356. package/src/routes/machines.ts +313 -15
  357. package/src/routes/managed-auth-session-sets.ts +1218 -0
  358. package/src/routes/managed-onboarding.ts +337 -0
  359. package/src/routes/managed-sign-in-methods.ts +433 -0
  360. package/src/routes/memory-slack-publications.ts +3 -2
  361. package/src/routes/model-connection-access.ts +208 -0
  362. package/src/routes/organization-integration-policy.ts +116 -0
  363. package/src/routes/organization-integrations.ts +326 -0
  364. package/src/routes/organization-mcp-connections.ts +178 -0
  365. package/src/routes/organization-memberships.ts +1019 -27
  366. package/src/routes/organization-model-providers.ts +293 -0
  367. package/src/routes/organization-recovery.ts +325 -0
  368. package/src/routes/organization-service-accounts.ts +128 -0
  369. package/src/routes/organization-sessions.ts +350 -0
  370. package/src/routes/personal-github-git-broker.ts +785 -0
  371. package/src/routes/personal-github.ts +370 -0
  372. package/src/routes/plugins.ts +251 -22
  373. package/src/routes/pr-review-github.ts +881 -0
  374. package/src/routes/pr-review.ts +622 -0
  375. package/src/routes/preference-registry.ts +12 -93
  376. package/src/routes/rigs.ts +167 -50
  377. package/src/routes/scheduled-tasks.ts +346 -41
  378. package/src/routes/session-artifact-associations.ts +87 -0
  379. package/src/routes/session-history-imports.ts +280 -0
  380. package/src/routes/sessions.ts +2306 -264
  381. package/src/routes/skill-content.ts +297 -0
  382. package/src/routes/skill-install-authority.ts +64 -0
  383. package/src/routes/skills.ts +62 -9
  384. package/src/routes/social.ts +46 -18
  385. package/src/routes/subscription-account-pools.ts +436 -0
  386. package/src/routes/subscription-pool-access.ts +126 -0
  387. package/src/routes/supergrok.ts +219 -303
  388. package/src/routes/transcription-recordings.ts +38 -3
  389. package/src/routes/transcriptions.ts +4 -0
  390. package/src/routes/usage-allowances.ts +378 -0
  391. package/src/routes/user-resource-authorities.ts +138 -0
  392. package/src/routes/video-generation.ts +14 -10
  393. package/src/routes/workspace-artifacts.ts +275 -69
  394. package/src/routes/workspace-capture.ts +21 -0
  395. package/src/routes/workspace-integrations.ts +576 -0
  396. package/src/routes/workspace-learning.ts +159 -0
  397. package/src/routes/workspace-model-providers.ts +148 -0
  398. package/src/routes/workspace-state.ts +38 -25
  399. package/src/routes/workspaces.ts +1004 -127
  400. package/src/sandbox/auth-callout.ts +96 -19
  401. package/src/sandbox/channel-a.ts +323 -24
  402. package/src/sandbox/connection-authority.ts +3 -0
  403. package/src/sandbox/enrollment.ts +81 -6
  404. package/src/sandbox/machines.ts +218 -76
  405. package/src/sandbox/metrics-ingestion.ts +411 -62
  406. package/src/sandbox/rematerialize.ts +121 -19
  407. package/src/sandbox/session-attach-variable-sets.ts +131 -0
  408. package/src/sandbox/viewer.ts +280 -25
  409. package/src/sandbox-file-artifacts.ts +413 -0
  410. package/src/scheduled-task-deletion.ts +138 -0
  411. package/src/session-create-observability.ts +46 -0
  412. package/src/session-realtime-context.ts +6 -3
  413. package/src/site-session-origin.ts +48 -0
  414. package/src/site-uploads.ts +224 -0
  415. package/src/slack-reaction-files.ts +16 -5
  416. package/src/temporal-schedule-cleanup.ts +13 -0
  417. package/src/temporal-schedule-sync.ts +74 -0
  418. package/src/transcription/providers/codex-subscription.ts +2 -0
  419. package/src/transcription/providers/openai.ts +1 -0
  420. package/src/transcription/providers/xai-subscription.ts +49 -3
  421. package/src/transcription/segmenter.ts +8 -2
  422. package/src/transcription/service.ts +43 -6
  423. package/src/work-discovery-observability.ts +121 -0
  424. package/src/workspace-artifact-content.ts +144 -0
  425. package/src/workspace-artifact-provenance.ts +104 -0
  426. package/src/workspace-delete-observability.ts +75 -0
  427. package/src/workspace-deletion.ts +73 -0
  428. package/src/workspace-state-projection.ts +18 -148
  429. package/src/workspace-tool-gateway-observability.ts +100 -0
  430. package/src/workspace-tool-gateway.ts +870 -0
  431. package/src/workspace-webhook-dispatch.ts +190 -0
  432. package/src/xai-subscription-auth.ts +9 -2
  433. package/dist/chunk-2PQMSRCB.js +0 -49759
  434. package/dist/chunk-2PQMSRCB.js.map +0 -1
  435. package/dist/routes/packs.d.ts +0 -3
  436. package/src/routes/packs.ts +0 -729
@@ -1,5 +1,5 @@
1
- import { ClientSessionEvent, SteerSessionMessageRequest, type SessionGoalRevision, type SessionAuthorizationOperation } from "@opengeni/contracts";
2
- import { type SessionDiscoveryCursor } from "@opengeni/db";
1
+ import { ClientSessionEvent, SessionScopeSubjectId, SteerSessionMessageRequest, type SessionStatus, type WorkClaimSubjectFilter, type SessionGoalRevision, type SessionAuthorizationOperation } from "@opengeni/contracts";
2
+ import { decodeSessionListCursor, type SessionDiscoveryCursor } from "@opengeni/db";
3
3
  import type { Context, Hono } from "hono";
4
4
  import type { ApiRouteDeps } from "@opengeni/core";
5
5
  import { type ViewerServices } from "../sandbox/viewer.js";
@@ -12,16 +12,54 @@ export declare function goalProposalMatchesExpectedRevision(revision: Pick<Sessi
12
12
  * host-managed mode; standalone deployments never consult this classifier.
13
13
  */
14
14
  export declare function sessionAuthorizationOperationForHttp(method: string, pathname: string, sessionId: string): SessionAuthorizationOperation | null;
15
+ export declare function sessionTenancyHttpError(error: unknown): Error;
16
+ export declare function sessionListQuery(query: Record<string, string>, allowCursor?: boolean): {
17
+ originSiteId: string | undefined;
18
+ limit: string | undefined;
19
+ parentSessionId: string | null | undefined;
20
+ cursor: ReturnType<typeof decodeSessionListCursor> | undefined;
21
+ search: string | undefined;
22
+ pinsOnly: boolean;
23
+ includePinned: boolean;
24
+ includeTotals: boolean;
25
+ needsYouOnly: boolean;
26
+ archivedOnly: boolean;
27
+ sortBy: "updatedAt" | "createdAt" | "name" | undefined;
28
+ archiveStatus: "active" | "archived" | "all" | undefined;
29
+ channelId: string | null | undefined;
30
+ createdBy: {
31
+ kind: "subject" | "service";
32
+ subjectId: string;
33
+ } | undefined;
34
+ updatedFrom: Date | undefined;
35
+ updatedBefore: Date | undefined;
36
+ createdFrom: Date | undefined;
37
+ createdBefore: Date | undefined;
38
+ scopeSubjectId: SessionScopeSubjectId | undefined;
39
+ hasPageFilters: boolean;
40
+ };
15
41
  export type AgentTopologyCursorEnvelope = {
16
42
  cursor: SessionDiscoveryCursor;
17
- parentSessionId: string | null;
18
- search: string | null;
43
+ parentSessionId: string | null | "all";
44
+ rootSessionId: string | null;
45
+ query: string | null;
46
+ statuses: SessionStatus[];
47
+ activeOnly: boolean;
48
+ recentHours: number | null;
49
+ subject: WorkClaimSubjectFilter | null;
50
+ claimLimit: number | null;
19
51
  };
20
52
  export declare function encodeAgentTopologyCursor(value: AgentTopologyCursorEnvelope): string;
21
53
  export declare function agentTopologyQuery(query: Record<string, string>): {
22
54
  limit: number;
23
- parentSessionId: string | null;
24
- search: string | undefined;
55
+ parentSessionId: string | null | undefined;
56
+ rootSessionId: string | undefined;
57
+ query: string | undefined;
58
+ statuses: SessionStatus[] | undefined;
59
+ activeOnly: boolean;
60
+ recentHours: number | undefined;
61
+ subject: WorkClaimSubjectFilter | undefined;
62
+ claimLimit: number | undefined;
25
63
  cursor: SessionDiscoveryCursor | undefined;
26
64
  };
27
65
  /** Stable, value-free JSON errors for only the create-session boundary. */
@@ -0,0 +1,4 @@
1
+ import type { Hono } from "hono";
2
+ import { type ApiRouteDeps } from "@opengeni/core";
3
+ /** Human folder editing and the legacy Skill admin share scope authorization. */
4
+ export declare function registerSkillContentRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -0,0 +1,6 @@
1
+ import { type SkillActor as SkillActorType } from "@opengeni/contracts";
2
+ import { type AccessGrantAuthorization } from "@opengeni/core";
3
+ /** Use authenticated request provenance, never a caller-supplied actor or subject alone. */
4
+ export declare function skillInstallerActor(access: AccessGrantAuthorization): SkillActorType;
5
+ /** Non-Skill component removals remain available to their existing callers. */
6
+ export declare function skillRemovalActor(access: AccessGrantAuthorization): SkillActorType | undefined;
@@ -0,0 +1,34 @@
1
+ import type { listOrganizationXaiSubscriptions, updateOrganizationXaiSubscription, updateOrganizationXaiRotation, listXaiSubscriptionAccountsMetadata, getXaiRotationSettings, ensureXaiRotationSettings, getXaiSubscriptionAccountAuthoritySnapshot, resolveXaiProviderAccountAuthoritySnapshotForAcceptance, setActiveXaiCredential, updateXaiRotationSettings, updateXaiAllocatorEligibility, renameXaiSubscriptionAccount, disconnectXaiSubscriptionCredentialAndRepick, wakeXaiCapacityWaiters, XaiSubscriptionAccountMetadata } from "@opengeni/db";
2
+ import { type ApiRouteDeps } from "@opengeni/core";
3
+ import type { Hono } from "hono";
4
+ type PoolRepository = {
5
+ listOrganizationSubscriptions: typeof listOrganizationXaiSubscriptions;
6
+ updateOrganizationSubscription: typeof updateOrganizationXaiSubscription;
7
+ updateOrganizationSubscriptionRotation: typeof updateOrganizationXaiRotation;
8
+ listSubscriptionAccountsMetadata: typeof listXaiSubscriptionAccountsMetadata;
9
+ getSubscriptionRotationSettings: typeof getXaiRotationSettings;
10
+ ensureSubscriptionRotationSettings: typeof ensureXaiRotationSettings;
11
+ getSubscriptionAccountAuthoritySnapshot: typeof getXaiSubscriptionAccountAuthoritySnapshot;
12
+ resolveSubscriptionProviderAccountAuthoritySnapshotForAcceptance: typeof resolveXaiProviderAccountAuthoritySnapshotForAcceptance;
13
+ setActiveSubscriptionCredential: typeof setActiveXaiCredential;
14
+ updateSubscriptionRotationSettings: typeof updateXaiRotationSettings;
15
+ updateSubscriptionAllocatorEligibility: typeof updateXaiAllocatorEligibility;
16
+ renameSubscriptionAccount: typeof renameXaiSubscriptionAccount;
17
+ disconnectSubscriptionCredentialAndRepick: typeof disconnectXaiSubscriptionCredentialAndRepick;
18
+ wakeSubscriptionCapacityWaiters: typeof wakeXaiCapacityWaiters;
19
+ };
20
+ /** Account CRUD uses one authority, allocator and wake contract for every pool. */
21
+ export declare function registerSubscriptionAccountPoolRoutes(app: Hono, deps: ApiRouteDeps, options: {
22
+ provider: "xai" | "claude";
23
+ route: "supergrok" | "claude";
24
+ displayName: "SuperGrok" | "Claude";
25
+ enabled: () => boolean;
26
+ repository: PoolRepository;
27
+ accountJson: (account: XaiSubscriptionAccountMetadata, activeId: string | null) => Record<string, unknown>;
28
+ projectAccounts?: (accounts: XaiSubscriptionAccountMetadata[], activeId: string | null, authority: {
29
+ accountId: string;
30
+ workspaceId: string | null;
31
+ subjectId: string;
32
+ }) => Promise<Record<string, unknown>[]>;
33
+ }): void;
34
+ export {};
@@ -0,0 +1,16 @@
1
+ import { type ApiRouteDeps } from "@opengeni/core";
2
+ import type { Context } from "hono";
3
+ type ManagedCookieHuman = {
4
+ subjectId: string;
5
+ };
6
+ export declare function managedCookieHuman(c: Context, deps: ApiRouteDeps): Promise<ManagedCookieHuman | null>;
7
+ export declare function requireSameOriginBrowserMutation(c: Context, deps: ApiRouteDeps): void;
8
+ export declare function requirePrivateSubscriptionHuman(c: Context, deps: ApiRouteDeps, workspaceId: string, displayName: string): Promise<{
9
+ accountId: string;
10
+ subjectId: string;
11
+ }>;
12
+ export declare function requireSubscriptionScopeMutation(c: Context, deps: ApiRouteDeps, workspaceId: string, scope: "workspace" | "user" | "organization", displayName: string): Promise<{
13
+ accountId: string;
14
+ subjectId: string;
15
+ }>;
16
+ export {};
@@ -1,3 +1,8 @@
1
+ export { managedCookieHuman } from "./subscription-pool-access.js";
1
2
  import { type ApiRouteDeps } from "@opengeni/core";
2
- import type { Hono } from "hono";
3
+ import type { Context, Hono } from "hono";
4
+ export declare const requireScopeMutation: (c: Context, deps: ApiRouteDeps, workspaceId: string, scope: "workspace" | "user" | "organization") => Promise<{
5
+ accountId: string;
6
+ subjectId: string;
7
+ }>;
3
8
  export declare function registerSuperGrokRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -0,0 +1,12 @@
1
+ import type { Hono } from "hono";
2
+ import { type AccessContext } from "@opengeni/contracts";
3
+ import { type AccessGrantAuthorization, type ApiRouteDeps } from "@opengeni/core";
4
+ type Authority = {
5
+ authorization: AccessGrantAuthorization;
6
+ context: AccessContext;
7
+ };
8
+ type Operation = "read" | "budget-read" | "workspace-write" | "member-write" | "own";
9
+ /** No workspace wildcard, service initiator, or actor label can confer budget authority. */
10
+ export declare function requireAllowanceAuthority({ authorization, context }: Authority, operation: Operation): void;
11
+ export declare function registerUsageAllowanceRoutes(app: Hono, deps: ApiRouteDeps): void;
12
+ export {};
@@ -0,0 +1,3 @@
1
+ import { type ApiRouteDeps } from "@opengeni/core";
2
+ import type { Hono } from "hono";
3
+ export declare function registerUserResourceAuthorityRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -1,3 +1,4 @@
1
1
  import { type ApiRouteDeps } from "@opengeni/core";
2
- import type { Hono } from "hono";
2
+ import type { Context, Hono } from "hono";
3
+ export declare function workspaceArtifactErrorResponse(context: Context, error: unknown): Response;
3
4
  export declare function registerWorkspaceArtifactRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -46,7 +46,15 @@ export declare class WorkspaceCaptureManifestCache {
46
46
  * manifest blob has been GC'd (all graceful cold-fallback states — never errors).
47
47
  * Inline manifest for ≤2MB, signed URL above.
48
48
  */
49
- export declare function serveWorkspaceCapture(row: WorkspaceCaptureRow | null, storage: CaptureStoragePort, cache?: WorkspaceCaptureManifestCache): Promise<GetWorkspaceCaptureResponse>;
49
+ /** Awaited before a signed capture URL is returned to the caller: the route
50
+ * records the metadata-only issuance audit fact. A throwing recorder fails
51
+ * the serve closed - no recorded fact, no bearer capability. */
52
+ export type CaptureSignedUrlIssuanceRecorder = (fact: {
53
+ kind: "capture_manifest" | "capture_file";
54
+ revision: number;
55
+ expiresAt: string;
56
+ }) => Promise<void>;
57
+ export declare function serveWorkspaceCapture(row: WorkspaceCaptureRow | null, storage: CaptureStoragePort, cache?: WorkspaceCaptureManifestCache, onSignedUrlIssued?: CaptureSignedUrlIssuanceRecorder): Promise<GetWorkspaceCaptureResponse>;
50
58
  /**
51
59
  * Shape the GET …/workspace/capture/file response from a loaded row (the row
52
60
  * already resolved to the requested revision, or the latest). Throws
@@ -55,5 +63,5 @@ export declare function serveWorkspaceCapture(row: WorkspaceCaptureRow | null, s
55
63
  * a captured file whose after-image blob is missing). Inline content for ≤256KB,
56
64
  * signed URL above.
57
65
  */
58
- export declare function serveWorkspaceCaptureFile(row: WorkspaceCaptureRow | null, path: string, storage: CaptureStoragePort): Promise<GetWorkspaceCaptureFileResponse>;
66
+ export declare function serveWorkspaceCaptureFile(row: WorkspaceCaptureRow | null, path: string, storage: CaptureStoragePort, onSignedUrlIssued?: CaptureSignedUrlIssuanceRecorder): Promise<GetWorkspaceCaptureFileResponse>;
59
67
  export {};
@@ -0,0 +1,35 @@
1
+ import { WorkspaceWebhookDelivery, type AccessGrant } from "@opengeni/contracts";
2
+ import { type ApiRouteDeps } from "@opengeni/core";
3
+ import { type WorkspaceCredentialProviderRow, type WorkspaceWebhookDeliveryRow, type WorkspaceWebhookRow } from "@opengeni/db";
4
+ import { type pinnedFetch } from "@opengeni/network";
5
+ import type { Context, Hono } from "hono";
6
+ import { z } from "zod";
7
+ export declare function newIntegrationSecret(prefix: string): string;
8
+ export declare function integrationWebhookFields(row: Omit<WorkspaceWebhookRow, "workspaceId">): {
9
+ id: string;
10
+ url: string;
11
+ eventTypes: string[];
12
+ enabled: boolean;
13
+ description: string | null;
14
+ createdAt: string;
15
+ updatedAt: string;
16
+ };
17
+ export declare function integrationDeliveryProjection(row: WorkspaceWebhookDeliveryRow): WorkspaceWebhookDelivery;
18
+ export declare function integrationProviderFields(row: Omit<WorkspaceCredentialProviderRow, "workspaceId">): {
19
+ url: string;
20
+ enabled: boolean;
21
+ timeoutMs: number;
22
+ createdAt: string;
23
+ updatedAt: string;
24
+ };
25
+ export declare function integrationBody<T extends z.ZodTypeAny>(c: Context, schema: T, invalidStatus?: 400 | 422): Promise<z.output<T>>;
26
+ export declare function integrationRouteConfiguration(deps: ApiRouteDeps, scope: "workspace" | "organization"): {
27
+ requireKey(): Uint8Array;
28
+ requireDeployableUrl(url: string): void;
29
+ };
30
+ export declare function isIntegrationAgent(grant: Pick<AccessGrant, "principalKind" | "metadata">): boolean;
31
+ export type WorkspaceIntegrationRouteOptions = {
32
+ /** Tests inject a fetch; production uses the pinned outbound client. */
33
+ fetch?: typeof pinnedFetch;
34
+ };
35
+ export declare function registerWorkspaceIntegrationRoutes(app: Hono, deps: ApiRouteDeps, options?: WorkspaceIntegrationRouteOptions): void;
@@ -0,0 +1,3 @@
1
+ import { type ApiRouteDeps } from "@opengeni/core";
2
+ import type { Hono } from "hono";
3
+ export declare function registerWorkspaceLearningRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -0,0 +1,4 @@
1
+ import { type ApiRouteDeps } from "@opengeni/core";
2
+ import type { Hono } from "hono";
3
+ /** Workspace-owned Claude models use the same immutable-generation protocol as gateway models. */
4
+ export declare function registerWorkspaceModelProviderRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -1,5 +1,34 @@
1
+ import { type AccessContext, type WorkspaceMember as WorkspaceMemberValue } from "@opengeni/contracts";
1
2
  import type { Hono } from "hono";
2
3
  import type { ApiRouteDeps } from "@opengeni/core";
3
4
  import { type Settings } from "@opengeni/config";
4
5
  export declare function canonicalWorkspacePolicyModelIds(settings: Settings, modelIds: string[] | null | undefined): string[] | null;
6
+ type WorkspaceMemberProjectionInput = Omit<WorkspaceMemberValue, "permissions"> & {
7
+ permissions: unknown;
8
+ };
9
+ /**
10
+ * Keep the roster readable across stored-permission contract changes. Unknown
11
+ * values are never re-authorized: they are omitted from the public projection,
12
+ * while every currently recognized permission is preserved in stored order.
13
+ */
14
+ export declare function workspaceMembersResponse(members: readonly WorkspaceMemberProjectionInput[]): {
15
+ members: {
16
+ subjectId: string;
17
+ subjectLabel: string | null;
18
+ role: string;
19
+ permissions: ("account:admin" | "account:read" | "api_keys:manage" | "artifacts:publish" | "artifacts:read" | "billing:manage" | "billing:read" | "capabilities:manage" | "codemode:call" | "connections:read" | "connections:write" | "documents:manage" | "documents:search" | "enrollments:manage" | "enrollments:read" | "environments:manage" | "environments:use" | "files:read" | "files:upload" | "files:write" | "github:manage" | "github:use" | "goals:manage" | "mcp_servers:attach" | "members:manage" | "rigs:manage" | "rigs:use" | "scheduled_tasks:manage" | "scheduled_tasks:run" | "secrets:list" | "secrets:read" | "secrets:write" | "sessions:control" | "sessions:create" | "sessions:read" | "stream:acknowledge" | "stream:control" | "stream:view" | "terminal:attach" | "usage_allowances:manage" | "variable-sets:attach" | "variable-sets:list" | "variable-sets:manage" | "variable-sets:read" | "variable-sets:use" | "variable-sets:write" | "workspace:admin" | "workspace:create" | "workspace:read")[];
20
+ createdAt: string;
21
+ }[];
22
+ };
23
+ export declare function workspaceUpdateRequestsSettings(value: unknown): boolean;
24
+ export declare function workspaceUpdateRequestsAccountTransfer(value: unknown): boolean;
25
+ /**
26
+ * Owning organization for `PUT /v1/workspaces/external`. An organization API
27
+ * key can only ever create workspaces in its own organization, so an omitted
28
+ * `accountId` resolves to that organization. Every other caller - notably a
29
+ * human who may belong to several organizations - must name it explicitly;
30
+ * guessing a default there could create the workspace in the wrong tenant.
31
+ */
32
+ export declare function externalWorkspaceAccountId(context: AccessContext, requested: string | undefined): string;
5
33
  export declare function registerWorkspaceRoutes(app: Hono, deps: ApiRouteDeps): void;
34
+ export {};
@@ -1,3 +1,4 @@
1
+ import { type LogThrottle } from "@opengeni/observability";
1
2
  import { type NatsCalloutConfig, type Settings } from "@opengeni/config";
2
3
  import { type Database } from "@opengeni/db";
3
4
  import { type ResponderConnection } from "@opengeni/events";
@@ -11,7 +12,14 @@ export interface AuthCalloutDeps {
11
12
  settings: Settings;
12
13
  callout: NatsCalloutConfig;
13
14
  observability?: Observability;
15
+ /** Bounds repeated denial warnings; defaults to one process-wide throttle. */
16
+ denialWarningThrottle?: LogThrottle;
14
17
  }
18
+ /** A stale or revoked machine re-dials on its reconnect backoff forever, so an
19
+ * unthrottled denial warning repeats every few seconds per machine. Log each
20
+ * distinct machine's first denial, then at most once per interval with the
21
+ * count of denials it hid. The denial decision itself is never throttled. */
22
+ export declare const AUTH_CALLOUT_DENIAL_WARNING_INTERVAL_MS = 60000;
15
23
  /**
16
24
  * The pure validate→scoped-JWT decision, isolated from the NATS transport so it is
17
25
  * unit-testable. Given the raw authorization-request JWT bytes, returns the signed
@@ -3,14 +3,16 @@ import type { Session } from "@opengeni/contracts";
3
3
  import { type Database, type LeaseSnapshot } from "@opengeni/db";
4
4
  import { type EventBus } from "@opengeni/events";
5
5
  import { type Observability } from "@opengeni/observability";
6
+ import type { ObjectStorage } from "@opengeni/storage";
6
7
  import { SandboxChannelAService, type ChannelASession, type EstablishedSandboxSession, type RoutingSandboxSession } from "@opengeni/runtime/sandbox";
7
8
  export type ChannelAServices = {
8
9
  db: Database;
9
10
  settings: Settings;
10
11
  bus: EventBus;
12
+ objectStorage?: ObjectStorage | null;
11
13
  observability?: Observability | undefined;
12
14
  };
13
- export type ChannelAOperation = "fs.list" | "fs.list-batch" | "fs.read" | "fs.write" | "fs.delete" | "fs.move" | "fs.mkdir" | "git.status" | "git.diff" | "git.read-batch" | "git.log" | "git.show" | "terminal.exec" | "terminal.pty.open" | "terminal.pty.write" | "terminal.pty.resize" | "terminal.pty.close" | "browser.create" | "browser.resume" | "browser.suspend" | "browser.end" | "browser.read" | "browser.action" | "browser.control" | "browser.download.save" | "browser.attach" | "computer.create" | "computer.end" | "computer.read" | "computer.action" | "computer.control" | "computer.attach";
15
+ export type ChannelAOperation = "fs.list" | "fs.list-batch" | "fs.read" | "artifact.publish" | "fs.write" | "fs.delete" | "fs.move" | "fs.mkdir" | "git.status" | "git.diff" | "git.read-batch" | "git.log" | "git.show" | "terminal.exec" | "terminal.pty.open" | "terminal.pty.write" | "terminal.pty.resize" | "terminal.pty.close" | "browser.create" | "browser.resume" | "browser.suspend" | "browser.end" | "browser.read" | "browser.action" | "browser.control" | "browser.download.save" | "browser.attach" | "computer.create" | "computer.end" | "computer.read" | "computer.action" | "computer.control" | "computer.attach";
14
16
  export type ChannelAContext = {
15
17
  accountId: string;
16
18
  workspaceId: string;
@@ -25,6 +27,10 @@ export type ChannelAContext = {
25
27
  * provider handle and replay the request. Tab/lifecycle mutations that lack
26
28
  * a controller operation id must never opt into this recovery. */
27
29
  retryControllerTransport?: boolean | undefined;
30
+ /** Ephemeral browser callbacks must never replay after an ambiguous result. */
31
+ allowOperationReplay?: boolean | undefined;
32
+ /** Exact existing interaction provider; may not spawn/rotate on image drift. */
33
+ retainedInstanceId?: string | undefined;
28
34
  };
29
35
  export type ChannelAOperationFailureReason = "request_cancelled" | "provider_read_busy" | "provider_unavailable" | "lifecycle_conflict" | "request_rejected" | "unexpected";
30
36
  export type ChannelAOperationFailureDiagnostic = {
@@ -63,6 +69,8 @@ type ChannelAReadRecoveryOptions = {
63
69
  /** Modal may expose one more stale command-router route after the first
64
70
  * successful handle rebuild. Keep this closed and statically bounded. */
65
71
  maxFreshHandleRetries?: 1 | 2;
72
+ /** Explicit opt-out overrides every transport/provider retry classification. */
73
+ allowOperationReplay?: boolean | undefined;
66
74
  /** Never start another provider attempt after the originating request ends. */
67
75
  waitSignal?: AbortSignal | undefined;
68
76
  /** Additional callback-specific failure that is safe to replay. */
@@ -100,4 +108,14 @@ export declare function isChannelARequestCancellation(error: unknown, waitSignal
100
108
  /** Structural classification only: exact provider exception text, codes, URLs,
101
109
  * and identifiers never cross the telemetry boundary. */
102
110
  export declare function channelAOperationFailureDiagnostic(error: unknown, waitSignal?: AbortSignal): ChannelAOperationFailureDiagnostic;
111
+ /** Exported for the telemetry contract tests; not a route surface. */
112
+ export declare function observeChannelAOperationFailure(services: ChannelAServices, input: {
113
+ workspaceId: string;
114
+ sandboxGroupId: string;
115
+ backend: string;
116
+ operation: string;
117
+ durationMs: number;
118
+ error: unknown;
119
+ waitSignal?: AbortSignal | undefined;
120
+ }): void;
103
121
  export {};
@@ -0,0 +1,3 @@
1
+ /** Five-second heartbeats get four missed intervals before another daemon may
2
+ * claim the enrollment. Server time is authoritative. */
3
+ export declare const AGENT_CONNECTION_LEASE_MS = 20000;
@@ -1,10 +1,16 @@
1
1
  import { type Settings } from "@opengeni/config";
2
- import { type DeviceEnrollmentLookupResponse, type DeviceEnrollmentPollResponse, type DeviceEnrollmentStartResponse, type EnrollTokenExchangeResponse, type MintEnrollTokenResponse } from "@opengeni/contracts";
2
+ import { type RenewEnrollmentRequest, type DeviceEnrollmentLookupResponse, type DeviceEnrollmentPollResponse, type DeviceEnrollmentStartResponse, type EnrollmentCredentialsResponse, type EnrollTokenExchangeResponse, type MintEnrollTokenResponse } from "@opengeni/contracts";
3
3
  import { type Database, type DeviceEnrollmentRequestRecord, type EnrollmentOs } from "@opengeni/db";
4
4
  export declare const DEVICE_CODE_TTL_SECONDS = 600;
5
5
  export declare const DEVICE_POLL_INTERVAL_SECONDS = 5;
6
6
  export declare const ENROLLMENT_BEARER_TTL_SECONDS: number;
7
7
  export declare const RELAY_TOKEN_TTL_SECONDS: number;
8
+ /** Renew an existing grant, including after a long offline interval. The expired
9
+ * bearer is only an authenticated enrollment/generation locator here: current
10
+ * install-key possession and live enrollment authority are both required. Normal
11
+ * NATS/relay authentication continues to reject expired transport credentials.
12
+ * Nothing creates/reactivates an enrollment or changes its consent or scope. */
13
+ export declare function renewEnrollmentCredentials(services: EnrollmentServices, input: RenewEnrollmentRequest, nowSeconds?: number): Promise<EnrollmentCredentialsResponse | null>;
8
14
  export declare const ENROLL_TOKEN_TTL_SECONDS = 3600;
9
15
  export type EnrollmentServices = {
10
16
  db: Database;
@@ -35,6 +41,8 @@ export declare function startDeviceEnrollment(services: EnrollmentServices, inpu
35
41
  export declare function approveDeviceEnrollment(services: EnrollmentServices, input: {
36
42
  accountId: string;
37
43
  workspaceId: string;
44
+ scope?: "organization" | "workspace" | "user";
45
+ allowOrganization?: boolean;
38
46
  userCode: string;
39
47
  allowScreenControl: boolean;
40
48
  approvedBySubjectId: string;
@@ -1,12 +1,13 @@
1
1
  import type { Settings } from "@opengeni/config";
2
2
  import { type Database, type MachineMetricsRow } from "@opengeni/db";
3
- import type { EventBus } from "@opengeni/events";
4
3
  import { MetricSample, type MachinesResponse } from "@opengeni/contracts";
5
4
  export type MachinesServices = {
6
5
  db: Database;
7
6
  settings: Settings;
8
- bus?: EventBus;
9
7
  };
8
+ /** Older Mac updaters replace a single file inside a sealed app. They must
9
+ * bootstrap once through the official whole-app installer, never an RPC swap. */
10
+ export declare function machineUpdateBlockedReason(os: string, version: string | null): string | null;
10
11
  /**
11
12
  * Project a stored `machine_metrics_latest` row to the contract `MetricSample`.
12
13
  * The DB carries `gpuUtilPercent` + `gpuMemUsedBytes`/`gpuMemTotalBytes`; the wire
@@ -24,6 +25,8 @@ export declare function metricRowToSample(row: MachineMetricsRow): MetricSample;
24
25
  * the enrolled machines are listed.
25
26
  */
26
27
  export declare function listMachines(services: MachinesServices, input: {
28
+ accountId?: string;
27
29
  workspaceId: string;
30
+ subjectId?: string;
28
31
  sessionId?: string | null;
29
32
  }): Promise<MachinesResponse>;
@@ -4,18 +4,36 @@ import { type EventBus } from "@opengeni/events";
4
4
  import type { Observability } from "@opengeni/observability";
5
5
  import { Hello, type AttachedBrowserInventorySnapshot as WireAttachedBrowserInventorySnapshot, type MetricsSample } from "@opengeni/agent-proto";
6
6
  /** The wildcard subject the agent event plane publishes heartbeats on. */
7
- export declare const AGENT_EVENTS_SUBJECT = "agent.*.*.events";
7
+ export declare const AGENT_EVENTS_SUBJECT = "agent.*.*.connection.*.events";
8
8
  /** The wildcard subject the agent publishes its connect Hello on. */
9
- export declare const AGENT_HELLO_SUBJECT = "agent.*.*.hello";
10
- /** Parse `agent.<ws>.<id>.events` → `{ workspaceId, agentId }` (heartbeat plane). */
9
+ export declare const AGENT_HELLO_SUBJECT = "agent.*.*.connection.*.hello";
10
+ export type AgentEventIngestionScheduler = {
11
+ enqueue: (payload: Uint8Array, subject: string) => void;
12
+ whenIdle: () => Promise<void>;
13
+ close: () => void;
14
+ };
15
+ /**
16
+ * Drain agent events without making every Connected Machine wait behind one
17
+ * deployment-wide serial DB queue. Each exact process subject retains FIFO order;
18
+ * separate subjects drain concurrently. Consecutive pending heartbeats for one
19
+ * subject are latest-wins because they are point-in-time liveness/metrics samples,
20
+ * while GoingOffline and update-progress events remain ordered barriers.
21
+ */
22
+ export declare function createAgentEventIngestionScheduler(handler: (payload: Uint8Array, subject: string) => void | Promise<void>, options?: {
23
+ maxConcurrentSubjects?: number;
24
+ onHeartbeatCoalesced?: () => void;
25
+ }): AgentEventIngestionScheduler;
26
+ /** Parse the exact process events subject (heartbeat plane). */
11
27
  export declare function parseAgentEventSubject(subject: string): {
12
28
  workspaceId: string;
13
29
  agentId: string;
30
+ connectionInstanceId: string;
14
31
  } | null;
15
- /** Parse `agent.<ws>.<id>.hello` → `{ workspaceId, agentId }` (connect plane). */
32
+ /** Parse the exact process hello subject (connect plane). */
16
33
  export declare function parseAgentHelloSubject(subject: string): {
17
34
  workspaceId: string;
18
35
  agentId: string;
36
+ connectionInstanceId: string;
19
37
  } | null;
20
38
  /**
21
39
  * Project a wire `MetricsSample` (proto, ms-stamped, GPU as a repeated list) to
@@ -32,20 +50,6 @@ export declare function wireSampleToDbSample(wire: MetricsSample): MachineMetric
32
50
  * discovery. Unknown enum values and unsafe uint64 counters reject the whole
33
51
  * authoritative snapshot instead of partially disconnecting good endpoints. */
34
52
  export declare function wireAttachedBrowserInventoryToContract(wire: WireAttachedBrowserInventorySnapshot): AttachedBrowserInventoryContractValue;
35
- /**
36
- * Ingest ONE decoded heartbeat for an enrolled machine. Resolves the enrollment's
37
- * accountId (needed for the RLS-scoped writes) from the enrollment row; an
38
- * unknown/cross-workspace agentId is ignored (no row → no write). Touches
39
- * last-seen + upserts latest + downsamples the series.
40
- */
41
- export declare function ingestHeartbeat(db: Database, input: {
42
- workspaceId: string;
43
- agentId: string;
44
- sample: MetricsSample;
45
- }): Promise<{
46
- ingested: boolean;
47
- seriesAppended: boolean;
48
- }>;
49
53
  /**
50
54
  * Decode a raw `AgentEvent` payload + ingest it (the per-message handler). A
51
55
  * heartbeat carrying a metrics sample is ingested; a going-offline records the
@@ -55,7 +59,7 @@ export declare function ingestHeartbeat(db: Database, input: {
55
59
  */
56
60
  export declare function handleAgentEventPayload(db: Database, observability: Observability | undefined, payload: Uint8Array, subject: string, bus?: EventBus): Promise<void>;
57
61
  /**
58
- * Start the metrics-ingestion consumer: subscribe `agent.*.*.events` and ingest
62
+ * Start the metrics-ingestion consumer: subscribe exact process events and ingest
59
63
  * every heartbeat. Gated by sandboxSelfhostedEnabled (the caller checks the flag;
60
64
  * a disabled deployment never starts the consumer). Returns the unsubscribe fn.
61
65
  */
@@ -82,6 +86,7 @@ export declare function helloReportsDisplay(hello: Hello): boolean;
82
86
  export declare function helloDesktopUnavailableReason(hello: Hello): string | null;
83
87
  /** Whether the runner's current Hello advertises the op-stream engine. */
84
88
  export declare function helloReportsOpStream(hello: Hello): boolean;
89
+ export declare function helloRuntimeCapabilities(hello: Hello): Record<string, boolean>;
85
90
  /**
86
91
  * Reconcile `enrollments.has_display` (+ the capture-blocked reason) to what a Hello
87
92
  * reports. Resolves the enrollment (the accountId is the RLS principal + the
@@ -95,6 +100,8 @@ export declare function refreshEnrollmentDisplay(db: Database, input: {
95
100
  agentId: string;
96
101
  hasDisplay: boolean;
97
102
  desktopUnavailableReason?: string | null;
103
+ runtimeDesktop?: boolean;
104
+ connectionInstanceId?: string;
98
105
  }): Promise<{
99
106
  updated: boolean;
100
107
  }>;
@@ -108,6 +115,7 @@ export declare function refreshEnrollmentOpStream(db: Database, input: {
108
115
  workspaceId: string;
109
116
  agentId: string;
110
117
  opStream: boolean;
118
+ connectionInstanceId?: string;
111
119
  }): Promise<{
112
120
  updated: boolean;
113
121
  }>;
@@ -121,7 +129,7 @@ export declare function refreshEnrollmentOpStream(db: Database, input: {
121
129
  */
122
130
  export declare function handleHelloPayload(db: Database, observability: Observability | undefined, payload: Uint8Array, subject: string, bus?: EventBus): Promise<void>;
123
131
  /**
124
- * Start the Hello display-refresh consumer: subscribe `agent.*.*.hello` and
132
+ * Start the Hello display-refresh consumer: subscribe exact process hellos and
125
133
  * reconcile `has_display` to the live capability the agent reports on every
126
134
  * connect. Gated by sandboxSelfhostedEnabled (the caller checks the flag). Returns
127
135
  * the unsubscribe fn.
@@ -1,6 +1,7 @@
1
1
  import type { Settings } from "@opengeni/config";
2
2
  import { type Database, type LeaseSnapshot } from "@opengeni/db";
3
3
  import { type EstablishedSandboxSession } from "@opengeni/runtime/sandbox";
4
+ import { type ObjectStorage } from "@opengeni/storage";
4
5
  /** The sole API-direct cold->warming owner path used by Channel A and viewer
5
6
  * attach. It never publishes warm until archive identity, hydrated tree, command
6
7
  * routing, provider identity, and the selected rematerialization attempt all
@@ -18,6 +19,7 @@ export declare function establishApiSandboxSpawner(input: {
18
19
  acquiredLease: LeaseSnapshot;
19
20
  fallbackEnvelope: Record<string, unknown> | null;
20
21
  dataPlaneUrl: string | null;
22
+ objectStorage?: ObjectStorage | null;
21
23
  }): Promise<{
22
24
  established: EstablishedSandboxSession;
23
25
  lease: LeaseSnapshot;
@@ -0,0 +1,30 @@
1
+ import type { Settings } from "@opengeni/config";
2
+ import { type Database } from "@opengeni/db";
3
+ export type SessionAttachVariableSetSession = {
4
+ id: string;
5
+ rigId?: string | null | undefined;
6
+ rigVersionId?: string | null | undefined;
7
+ variableSetIds?: readonly string[] | null | undefined;
8
+ /** Legacy final-entry alias for projections that predate the plural field. */
9
+ variableSetId?: string | null | undefined;
10
+ };
11
+ /**
12
+ * Decrypted Variable Set values for a direct session attach (terminal, Files,
13
+ * Git, desktop viewer), in the same order and precedence as the worker turn:
14
+ * the frozen Sandbox Environment version defaults first, then the session's
15
+ * own selection, so a box first warmed by an attach declares exactly the
16
+ * environment the next turn declares.
17
+ *
18
+ * A Variable Set the session can no longer use (the database seam answers
19
+ * 42501 and records a `variable_set.materialize.denied` fact) becomes a 403
20
+ * instead of a bare 500. Every failure is logged with the session, set, source
21
+ * and SQLSTATE, never a value.
22
+ */
23
+ export declare function loadSessionAttachVariableSetValues(db: Database, settings: Settings, input: {
24
+ accountId: string;
25
+ workspaceId: string;
26
+ session: SessionAttachVariableSetSession;
27
+ /** The authenticated route subject driving the attach; null records the
28
+ * legacy service sentinel on the materialization audit fact. */
29
+ subjectId: string | null;
30
+ }): Promise<Record<string, string>>;