@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
@@ -5,9 +5,10 @@
5
5
  // (default OFF → 404, invisible). Both routes need perm enrollments:read.
6
6
  //
7
7
  // GET /v1/workspaces/:ws/machines[?sessionId=...] -> MachinesResponse
8
- // The dashboard list: the workspace's enrolled selfhosted machines (state +
9
- // latest metrics + sharedSessionCount) and, when sessionId is supplied, the
10
- // session's synthetic Modal group box + the active-sandbox pointer.
8
+ // The dashboard list: the workspace's enrolled selfhosted machines (heartbeat
9
+ // state + latest metrics + sharedSessionCount) and, when sessionId is
10
+ // supplied, the session's synthetic Modal group box + the active-sandbox
11
+ // pointer. This GET does not ControlRpc-ping.
11
12
  //
12
13
  // GET /v1/workspaces/:ws/machines/:enrollmentId/metrics/series?window=1h
13
14
  // -> { samples: MetricSample[] }
@@ -15,18 +16,39 @@
15
16
 
16
17
  import {
17
18
  MachineMetricsSeriesResponse,
19
+ MachineOperationPolicy,
18
20
  MachinesResponse,
19
21
  SwapActiveSandboxRequest,
20
22
  SwapActiveSandboxResponse,
23
+ UpdateMachineOperationPolicyRequest,
24
+ UpdateMachineAgentResponse,
21
25
  } from "@opengeni/contracts";
22
- import { getEnrollment, readMachineMetricsSeries, requireSession } from "@opengeni/db";
26
+ import {
27
+ advanceEnrollmentAgentUpdate,
28
+ beginEnrollmentAgentUpdate,
29
+ getLiveEnrollmentConnection,
30
+ listEnrollments,
31
+ readMachineMetricsSeries,
32
+ requireSession,
33
+ updateEnrollmentOperationPolicy,
34
+ } from "@opengeni/db";
23
35
  import type { Hono } from "hono";
24
36
  import { HTTPException } from "hono/http-exception";
25
- import { requireAccessGrant } from "@opengeni/core";
37
+ import {
38
+ grantHasAgentAttemptAuthority,
39
+ requireAccessGrant,
40
+ requireAccessGrantAuthorization,
41
+ requireSessionAuthorization,
42
+ SessionAuthorizationDeniedError,
43
+ SessionAuthorizationUnavailableError,
44
+ } from "@opengeni/core";
26
45
  import type { ApiRouteDeps } from "@opengeni/core";
27
46
  import { buildFleetContextForSession, swapActiveSandbox } from "@opengeni/core";
28
- import { listMachines, metricRowToSample } from "../sandbox/machines";
47
+ import { listMachines, machineUpdateBlockedReason, metricRowToSample } from "../sandbox/machines";
29
48
  import { ensureSessionGroupReady as ensureViewerSessionGroupReady } from "../sandbox/viewer";
49
+ import { ControlRequest, ErrorCode } from "@opengeni/agent-proto";
50
+ import { NatsControlRpc, subjectFor } from "@opengeni/runtime/sandbox";
51
+ import { parseRequestJson } from "../http/request-body";
30
52
 
31
53
  // The supported series windows → milliseconds. An unknown/absent window defaults
32
54
  // to 1h (the default). Bounded so a caller cannot request an unbounded
@@ -52,33 +74,55 @@ export function registerMachineRoutes(app: Hono, deps: ApiRouteDeps): void {
52
74
  }
53
75
  }
54
76
 
77
+ async function requireScopedEnrollment(
78
+ grant: Awaited<ReturnType<typeof requireAccessGrant>>,
79
+ enrollmentId: string,
80
+ ) {
81
+ const enrollment = (await listEnrollments(db, grant, { status: "active" })).find(
82
+ (candidate) => candidate.id === enrollmentId,
83
+ );
84
+ if (!enrollment) {
85
+ throw new HTTPException(404, { message: "machine not found in this access scope" });
86
+ }
87
+ return enrollment;
88
+ }
89
+
55
90
  // ── GET /workspaces/:ws/machines (the dashboard list) ───────────────────────
56
91
  app.get("/v1/workspaces/:workspaceId/machines", async (c) => {
57
92
  const workspaceId = c.req.param("workspaceId");
58
- await requireAccessGrant(c, deps, workspaceId, "enrollments:read");
93
+ const grant = await requireAccessGrant(c, deps, workspaceId, "enrollments:read");
59
94
  assertSelfhostedEnabled();
60
95
  // sessionId is OPTIONAL: present → an in-session view (synthetic group box +
61
96
  // active pointer); absent → the pure workspace dashboard.
62
97
  const sessionId = c.req.query("sessionId") ?? null;
63
- const response = await listMachines({ db, settings, bus }, { workspaceId, sessionId });
98
+ const response = await listMachines(
99
+ { db, settings },
100
+ {
101
+ accountId: grant.accountId,
102
+ workspaceId,
103
+ subjectId: grant.subjectId,
104
+ sessionId,
105
+ },
106
+ );
64
107
  return c.json(MachinesResponse.parse(response));
65
108
  });
66
109
 
67
110
  // ── GET /workspaces/:ws/machines/:enrollmentId/metrics/series ───────────────
68
111
  app.get("/v1/workspaces/:workspaceId/machines/:enrollmentId/metrics/series", async (c) => {
69
112
  const workspaceId = c.req.param("workspaceId");
70
- await requireAccessGrant(c, deps, workspaceId, "enrollments:read");
113
+ const grant = await requireAccessGrant(c, deps, workspaceId, "enrollments:read");
71
114
  assertSelfhostedEnabled();
72
115
  const enrollmentId = c.req.param("enrollmentId");
73
116
  // Validate the machine belongs to this workspace (RLS already scopes the read,
74
117
  // but a clear 404 beats an empty series for an unknown/cross-workspace id).
75
- const enrollment = await getEnrollment(db, workspaceId, enrollmentId);
76
- if (!enrollment || enrollment.status !== "active") {
77
- throw new HTTPException(404, { message: "machine not found in this workspace" });
78
- }
118
+ const enrollment = await requireScopedEnrollment(grant, enrollmentId);
79
119
  const windowMs = SERIES_WINDOWS_MS[c.req.query("window") ?? ""] ?? DEFAULT_SERIES_WINDOW_MS;
80
120
  const since = new Date(Date.now() - windowMs);
81
- const rows = await readMachineMetricsSeries(db, { workspaceId, enrollmentId, since });
121
+ const rows = await readMachineMetricsSeries(db, {
122
+ workspaceId: enrollment.workspaceId,
123
+ enrollmentId,
124
+ since,
125
+ });
82
126
  return c.json(
83
127
  MachineMetricsSeriesResponse.parse({
84
128
  samples: rows.map(metricRowToSample),
@@ -86,6 +130,234 @@ export function registerMachineRoutes(app: Hono, deps: ApiRouteDeps): void {
86
130
  );
87
131
  });
88
132
 
133
+ // ── PATCH /workspaces/:ws/machines/:enrollmentId/operation-policy ──────────
134
+ // Null limits deliberately mean unrestricted. The revision is an optimistic
135
+ // concurrency fence so two operators cannot silently overwrite each other.
136
+ app.patch("/v1/workspaces/:workspaceId/machines/:enrollmentId/operation-policy", async (c) => {
137
+ const workspaceId = c.req.param("workspaceId");
138
+ const authorization = await requireAccessGrantAuthorization(
139
+ c,
140
+ deps,
141
+ workspaceId,
142
+ "enrollments:manage",
143
+ );
144
+ const grant = authorization.grant;
145
+ assertSelfhostedEnabled();
146
+ const enrollmentId = c.req.param("enrollmentId");
147
+ let json: unknown;
148
+ try {
149
+ json = await c.req.json();
150
+ } catch {
151
+ throw new HTTPException(400, {
152
+ message: "operation policy body must be valid JSON",
153
+ });
154
+ }
155
+ const parsed = UpdateMachineOperationPolicyRequest.safeParse(json);
156
+ if (!parsed.success) {
157
+ throw new HTTPException(400, {
158
+ message: "invalid machine operation policy",
159
+ });
160
+ }
161
+ const body = parsed.data;
162
+ const current = await requireScopedEnrollment(grant, enrollmentId);
163
+ if (
164
+ current.scope === "organization" &&
165
+ authorization.accountGrant?.permissions.includes("account:admin") !== true
166
+ ) {
167
+ throw new HTTPException(403, { message: "missing permission: account:admin" });
168
+ }
169
+ const updated = await updateEnrollmentOperationPolicy(db, {
170
+ accountId: grant.accountId,
171
+ workspaceId: current.workspaceId,
172
+ enrollmentId,
173
+ subjectId: grant.subjectId,
174
+ expectedRevision: body.expectedRevision,
175
+ memoryMaxBytes: body.memoryMaxBytes,
176
+ memoryHighBytes: body.memoryHighBytes,
177
+ ...(body.cpuMaxMillicores !== undefined ? { cpuMaxMillicores: body.cpuMaxMillicores } : {}),
178
+ });
179
+ if (!updated) {
180
+ throw new HTTPException(409, {
181
+ message: "machine operation policy changed; refresh and retry",
182
+ });
183
+ }
184
+ return c.json(MachineOperationPolicy.parse(updated.operationPolicy));
185
+ });
186
+
187
+ // ── POST /workspaces/:ws/machines/:enrollmentId/update ─────────────────────
188
+ // Reserve one exact-generation operation, ask the authoritative runner to
189
+ // drain and apply the signed promoted release, then let progress events + the
190
+ // successor Hello drive the durable state to completion.
191
+ app.post("/v1/workspaces/:workspaceId/machines/:enrollmentId/update", async (c) => {
192
+ const workspaceId = c.req.param("workspaceId");
193
+ const authorization = await requireAccessGrantAuthorization(
194
+ c,
195
+ deps,
196
+ workspaceId,
197
+ "enrollments:manage",
198
+ );
199
+ const grant = authorization.grant;
200
+ assertSelfhostedEnabled();
201
+ const enrollmentId = c.req.param("enrollmentId");
202
+ const visibleEnrollment = await requireScopedEnrollment(grant, enrollmentId);
203
+ if (
204
+ visibleEnrollment.scope === "organization" &&
205
+ authorization.accountGrant?.permissions.includes("account:admin") !== true
206
+ ) {
207
+ throw new HTTPException(403, { message: "missing permission: account:admin" });
208
+ }
209
+ const originWorkspaceId = visibleEnrollment.workspaceId;
210
+ const live = await getLiveEnrollmentConnection(
211
+ db,
212
+ visibleEnrollment.scope === "user" ? grant : originWorkspaceId,
213
+ enrollmentId,
214
+ );
215
+ if (!live?.connectionInstanceId || !live.agentVersion) {
216
+ throw new HTTPException(409, {
217
+ message: "machine has no authoritative live agent build",
218
+ });
219
+ }
220
+ const blockedReason = machineUpdateBlockedReason(live.os, live.agentVersion);
221
+ if (blockedReason) {
222
+ throw new HTTPException(422, { message: blockedReason });
223
+ }
224
+ const channel = live.agentUpdateChannel ?? "stable";
225
+ const targetVersion =
226
+ channel === "beta"
227
+ ? (settings.agentBetaVersion ?? settings.agentStableVersion)
228
+ : settings.agentStableVersion;
229
+ const reusableRequest =
230
+ live.agentUpdate?.status === "requested" &&
231
+ live.agentUpdate.targetVersion === targetVersion &&
232
+ live.agentUpdate.connectionInstanceId === live.connectionInstanceId &&
233
+ live.agentUpdate.connectionGeneration === live.connectionGeneration
234
+ ? live.agentUpdate
235
+ : null;
236
+ if (
237
+ !reusableRequest &&
238
+ live.agentVersion === targetVersion &&
239
+ live.agentUpdate?.status !== "failed"
240
+ ) {
241
+ throw new HTTPException(409, {
242
+ message: "machine already runs the promoted version",
243
+ });
244
+ }
245
+ const operationId = reusableRequest?.operationId ?? crypto.randomUUID();
246
+ if (!reusableRequest) {
247
+ const reserved = await beginEnrollmentAgentUpdate(db, {
248
+ accountId: grant.accountId,
249
+ workspaceId: originWorkspaceId,
250
+ enrollmentId,
251
+ connectionInstanceId: live.connectionInstanceId,
252
+ connectionGeneration: live.connectionGeneration,
253
+ operationId,
254
+ targetVersion,
255
+ });
256
+ if (!reserved) {
257
+ throw new HTTPException(409, {
258
+ message: "machine update state changed; refresh and retry",
259
+ });
260
+ }
261
+ }
262
+
263
+ const rpc = new NatsControlRpc(async () => bus?.getRequestConnection() ?? null);
264
+ const request: ControlRequest = {
265
+ requestId: operationId,
266
+ // The subject already selects the exact authoritative process instance.
267
+ // `epoch` is the sandbox lease epoch, not the enrollment connection
268
+ // generation, so this process-scoped operation intentionally leaves it 0.
269
+ epoch: 0,
270
+ resourcePolicy: undefined,
271
+ op: {
272
+ $case: "agentUpdateApply",
273
+ agentUpdateApply: {
274
+ operationId,
275
+ targetVersion,
276
+ channel,
277
+ expectedCurrentVersion: live.agentVersion,
278
+ expectedCurrentSha256: live.agentBinarySha256 ?? "",
279
+ releaseBaseUrl: (settings.publicBaseUrl ?? new URL(c.req.url).origin).replace(/\/+$/, ""),
280
+ },
281
+ },
282
+ };
283
+ let response = await rpc.request(
284
+ subjectFor(originWorkspaceId, enrollmentId, live.connectionInstanceId),
285
+ request,
286
+ { timeoutMs: 10_000 },
287
+ );
288
+ // The operation id is idempotent. One retry heals an ambiguous lost reply;
289
+ // the agent returns the same acceptance and never starts a second update.
290
+ if (response.error?.code === ErrorCode.ERROR_CODE_TIMEOUT) {
291
+ response = await rpc.request(
292
+ subjectFor(originWorkspaceId, enrollmentId, live.connectionInstanceId),
293
+ request,
294
+ { timeoutMs: 10_000 },
295
+ );
296
+ }
297
+ if (response.error) {
298
+ // A second timeout remains ambiguous: progress/Hello may still prove the
299
+ // operation. Keep it requested rather than racing a false terminal failure.
300
+ if (response.error.code !== ErrorCode.ERROR_CODE_TIMEOUT) {
301
+ await advanceEnrollmentAgentUpdate(db, {
302
+ accountId: grant.accountId,
303
+ workspaceId: originWorkspaceId,
304
+ enrollmentId,
305
+ connectionInstanceId: live.connectionInstanceId,
306
+ connectionGeneration: live.connectionGeneration,
307
+ operationId,
308
+ status: "failed",
309
+ errorCode:
310
+ response.error.detail.failure_code ??
311
+ (response.error.code === ErrorCode.ERROR_CODE_AGENT_OFFLINE
312
+ ? "agent_offline"
313
+ : "update_dispatch_rejected"),
314
+ retryable: response.error.retryable,
315
+ rolledBack: false,
316
+ });
317
+ throw new HTTPException(response.error.retryable ? 409 : 422, {
318
+ message: response.error.message,
319
+ });
320
+ }
321
+ } else if (
322
+ response.result?.$case !== "agentUpdateApply" ||
323
+ !response.result.agentUpdateApply.accepted
324
+ ) {
325
+ await advanceEnrollmentAgentUpdate(db, {
326
+ accountId: grant.accountId,
327
+ workspaceId: originWorkspaceId,
328
+ enrollmentId,
329
+ connectionInstanceId: live.connectionInstanceId,
330
+ connectionGeneration: live.connectionGeneration,
331
+ operationId,
332
+ status: "failed",
333
+ errorCode: "invalid_agent_response",
334
+ retryable: true,
335
+ rolledBack: false,
336
+ });
337
+ throw new HTTPException(502, {
338
+ message: "agent returned an invalid update response",
339
+ });
340
+ } else {
341
+ await advanceEnrollmentAgentUpdate(db, {
342
+ accountId: grant.accountId,
343
+ workspaceId: originWorkspaceId,
344
+ enrollmentId,
345
+ connectionInstanceId: live.connectionInstanceId,
346
+ connectionGeneration: live.connectionGeneration,
347
+ operationId,
348
+ status: "accepted",
349
+ });
350
+ }
351
+ return c.json(
352
+ UpdateMachineAgentResponse.parse({
353
+ operationId,
354
+ accepted: true,
355
+ targetVersion,
356
+ }),
357
+ 202,
358
+ );
359
+ });
360
+
89
361
  // ── POST /workspaces/:ws/sessions/:sessionId/active-sandbox (swap) ───────────
90
362
  // The user-authenticated equivalent of the M7 `sandbox_swap` MCP tool: repoint
91
363
  // a session's active sandbox under the epoch fence. Same perm as PATCH session
@@ -97,11 +369,36 @@ export function registerMachineRoutes(app: Hono, deps: ApiRouteDeps): void {
97
369
  const grant = await requireAccessGrant(c, deps, workspaceId, "sessions:control");
98
370
  assertSelfhostedEnabled();
99
371
  const sessionId = c.req.param("sessionId");
100
- const body = SwapActiveSandboxRequest.parse(await c.req.json());
372
+ // Registered before the session route module, so its authorization
373
+ // middleware does not cover this path: an agent attempt must pass the
374
+ // core seam (including the 0426 agent-access scope) before it may repoint
375
+ // another session's compute.
376
+ if (grantHasAgentAttemptAuthority(grant)) {
377
+ try {
378
+ await requireSessionAuthorization(deps, grant, {
379
+ sessionId,
380
+ operation: "session.control",
381
+ surface: "http",
382
+ });
383
+ } catch (error) {
384
+ if (error instanceof SessionAuthorizationDeniedError) {
385
+ throw new HTTPException(404, { message: "session not found", cause: error });
386
+ }
387
+ if (error instanceof SessionAuthorizationUnavailableError) {
388
+ throw new HTTPException(503, {
389
+ message: "session authorization is unavailable",
390
+ cause: error,
391
+ });
392
+ }
393
+ throw error;
394
+ }
395
+ }
396
+ const body = await parseRequestJson(c, SwapActiveSandboxRequest);
101
397
  const ctx = await buildFleetContextForSession(deps, {
102
398
  accountId: grant.accountId,
103
399
  workspaceId,
104
400
  sessionId,
401
+ subjectId: grant.subjectId,
105
402
  });
106
403
  const result = await swapActiveSandbox(
107
404
  {
@@ -116,6 +413,7 @@ export function registerMachineRoutes(app: Hono, deps: ApiRouteDeps): void {
116
413
  accountId: fleetCtx.accountId,
117
414
  workspaceId: fleetCtx.workspaceId,
118
415
  session,
416
+ subjectId: fleetCtx.subjectId ?? null,
119
417
  },
120
418
  );
121
419
  },