@opengeni/api-router 0.30.3 → 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 (434) 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-source-session.d.ts +3 -0
  35. package/dist/editable-artifact-websocket.d.ts +10 -18
  36. package/dist/editable-artifact-workspace-files.d.ts +1 -1
  37. package/dist/fatal-process-boundary.d.ts +25 -0
  38. package/dist/github-access.d.ts +31 -2
  39. package/dist/http/acting-person.d.ts +24 -0
  40. package/dist/http/api-contract-compat.d.ts +19 -0
  41. package/dist/http/api-error.d.ts +27 -1
  42. package/dist/http/cors.d.ts +17 -0
  43. package/dist/http/deprecation.d.ts +42 -0
  44. package/dist/http/interaction-control-error.d.ts +13 -0
  45. package/dist/http/keyed-admission.d.ts +12 -0
  46. package/dist/http/local-browser-boundary.d.ts +72 -0
  47. package/dist/http/metrics-listener.d.ts +22 -0
  48. package/dist/http/path-identifier.d.ts +17 -0
  49. package/dist/http/registered-route-label.d.ts +16 -0
  50. package/dist/http/request-body.d.ts +27 -0
  51. package/dist/http/request-source.d.ts +52 -0
  52. package/dist/http/sse.d.ts +17 -6
  53. package/dist/http/unmatched-route.d.ts +18 -0
  54. package/dist/http/user-content.d.ts +36 -0
  55. package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
  56. package/dist/index.d.ts +10 -3
  57. package/dist/index.js +1091 -162
  58. package/dist/index.js.map +1 -1
  59. package/dist/integration-endpoint-test.d.ts +20 -0
  60. package/dist/integrations/api-integrations.d.ts +2 -2
  61. package/dist/integrations/atlassian.d.ts +29 -3
  62. package/dist/integrations/connect-authority.d.ts +1 -0
  63. package/dist/integrations/connect-callback-return.d.ts +6 -0
  64. package/dist/integrations/fiken.d.ts +16 -2
  65. package/dist/integrations/github-app-connect.d.ts +47 -0
  66. package/dist/integrations/github-installation-proof.d.ts +3 -0
  67. package/dist/integrations/github-lens-connect.d.ts +116 -0
  68. package/dist/integrations/github-skill-source.d.ts +1 -5
  69. package/dist/integrations/google-drive.d.ts +24 -0
  70. package/dist/integrations/integration-commit-authority.d.ts +13 -0
  71. package/dist/integrations/marketplace-plugin.d.ts +2691 -0
  72. package/dist/integrations/oauth-client.d.ts +178 -18
  73. package/dist/integrations/oauth-profiles.d.ts +222 -0
  74. package/dist/integrations/oauth-return-path.d.ts +1 -0
  75. package/dist/integrations/personal-github-repositories.d.ts +84 -0
  76. package/dist/integrations/personal-github.d.ts +42 -0
  77. package/dist/integrations/pr-review-provider.d.ts +22 -0
  78. package/dist/integrations/provider-oauth.d.ts +19 -1
  79. package/dist/integrations/slack-app-home.d.ts +24 -0
  80. package/dist/integrations/slack-bot.d.ts +367 -12
  81. package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
  82. package/dist/integrations/slack-install.d.ts +20 -0
  83. package/dist/integrations/slack-interactions.d.ts +107 -9
  84. package/dist/integrations/slack-mrkdwn.d.ts +41 -0
  85. package/dist/integrations/slack-routing.d.ts +120 -0
  86. package/dist/integrations/slack-session-defaults.d.ts +58 -0
  87. package/dist/integrations/slack-task-file-upload.d.ts +36 -0
  88. package/dist/integrations/social-oauth.d.ts +7 -0
  89. package/dist/interaction-agent-access.d.ts +15 -0
  90. package/dist/interaction-frame-proxy.d.ts +68 -0
  91. package/dist/interaction-metrics.d.ts +2 -0
  92. package/dist/mcp/action-catalog-types.d.ts +9 -0
  93. package/dist/mcp/action-catalog.gen.d.ts +2 -0
  94. package/dist/mcp/capability-account-readiness.d.ts +7 -0
  95. package/dist/mcp/child-read-evidence.d.ts +9 -0
  96. package/dist/mcp/command-read.d.ts +24 -0
  97. package/dist/mcp/company-profile-agent-admin.d.ts +44 -0
  98. package/dist/mcp/contract-input.d.ts +11 -0
  99. package/dist/mcp/documents.d.ts +7 -5
  100. package/dist/mcp/files.d.ts +2 -2
  101. package/dist/mcp/first-party-tool-permissions.d.ts +650 -0
  102. package/dist/mcp/knowledge-entries.d.ts +5 -0
  103. package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
  104. package/dist/mcp/receipts.d.ts +9 -0
  105. package/dist/mcp/request-abort.d.ts +19 -0
  106. package/dist/mcp/scheduled-task-input.d.ts +1189 -0
  107. package/dist/mcp/scheduled-task-view.d.ts +22 -4
  108. package/dist/mcp/server.d.ts +255 -3
  109. package/dist/mcp/session-event-view.d.ts +94 -0
  110. package/dist/mcp/session-view.d.ts +66 -2
  111. package/dist/mcp/session-wait.d.ts +174 -0
  112. package/dist/mcp-oauth.d.ts +52 -0
  113. package/dist/model-catalog.d.ts +11 -31
  114. package/dist/observability.d.ts +3 -1
  115. package/dist/organization-mcp.d.ts +52 -0
  116. package/dist/organization-recovery-notifications.d.ts +41 -0
  117. package/dist/routes/analytics-consent.d.ts +26 -0
  118. package/dist/routes/api-integrations.d.ts +25 -0
  119. package/dist/routes/api-keys.d.ts +17 -0
  120. package/dist/routes/artifact-catalog.d.ts +6 -0
  121. package/dist/routes/automations.d.ts +19 -0
  122. package/dist/routes/billing.d.ts +49 -0
  123. package/dist/routes/browser-sessions.d.ts +59 -2
  124. package/dist/routes/claude-subscription-accounts.d.ts +3 -0
  125. package/dist/routes/claude-subscription-oauth.d.ts +3 -0
  126. package/dist/routes/client-errors.d.ts +146 -0
  127. package/dist/routes/codex.d.ts +76 -2
  128. package/dist/routes/company-brain.d.ts +3 -0
  129. package/dist/routes/company-profile.d.ts +2 -1
  130. package/dist/routes/computer-sessions.d.ts +14 -0
  131. package/dist/routes/connect.d.ts +5 -0
  132. package/dist/routes/editable-artifacts.d.ts +2 -0
  133. package/dist/routes/external-identity-links.d.ts +6 -0
  134. package/dist/routes/feedback.d.ts +3 -0
  135. package/dist/routes/github-browser-pages.d.ts +12 -0
  136. package/dist/routes/github.d.ts +2 -0
  137. package/dist/routes/insights-response-cache.d.ts +10 -0
  138. package/dist/routes/insights-usage.d.ts +12 -0
  139. package/dist/routes/insights.d.ts +30 -1
  140. package/dist/routes/knowledge.d.ts +3 -0
  141. package/dist/routes/managed-auth-session-sets.d.ts +26 -0
  142. package/dist/routes/managed-onboarding.d.ts +29 -0
  143. package/dist/routes/managed-sign-in-methods.d.ts +6 -0
  144. package/dist/routes/model-connection-access.d.ts +3 -0
  145. package/dist/routes/organization-integration-policy.d.ts +3 -0
  146. package/dist/routes/organization-integrations.d.ts +6 -0
  147. package/dist/routes/organization-mcp-connections.d.ts +3 -0
  148. package/dist/routes/organization-model-providers.d.ts +3 -0
  149. package/dist/routes/organization-recovery.d.ts +19 -0
  150. package/dist/routes/organization-service-accounts.d.ts +3 -0
  151. package/dist/routes/organization-sessions.d.ts +26 -0
  152. package/dist/routes/personal-github-git-broker.d.ts +29 -0
  153. package/dist/routes/personal-github.d.ts +3 -0
  154. package/dist/routes/pr-review-github.d.ts +3 -0
  155. package/dist/routes/pr-review.d.ts +3 -0
  156. package/dist/routes/session-artifact-associations.d.ts +4 -0
  157. package/dist/routes/session-history-imports.d.ts +9 -0
  158. package/dist/routes/sessions.d.ts +44 -6
  159. package/dist/routes/skill-content.d.ts +4 -0
  160. package/dist/routes/skill-install-authority.d.ts +6 -0
  161. package/dist/routes/subscription-account-pools.d.ts +34 -0
  162. package/dist/routes/subscription-pool-access.d.ts +16 -0
  163. package/dist/routes/supergrok.d.ts +6 -1
  164. package/dist/routes/usage-allowances.d.ts +12 -0
  165. package/dist/routes/user-resource-authorities.d.ts +3 -0
  166. package/dist/routes/workspace-artifacts.d.ts +2 -1
  167. package/dist/routes/workspace-capture.d.ts +10 -2
  168. package/dist/routes/workspace-integrations.d.ts +35 -0
  169. package/dist/routes/workspace-learning.d.ts +3 -0
  170. package/dist/routes/workspace-model-providers.d.ts +4 -0
  171. package/dist/routes/workspaces.d.ts +29 -0
  172. package/dist/sandbox/auth-callout.d.ts +8 -0
  173. package/dist/sandbox/channel-a.d.ts +19 -1
  174. package/dist/sandbox/connection-authority.d.ts +3 -0
  175. package/dist/sandbox/enrollment.d.ts +9 -1
  176. package/dist/sandbox/machines.d.ts +5 -2
  177. package/dist/sandbox/metrics-ingestion.d.ts +28 -20
  178. package/dist/sandbox/rematerialize.d.ts +2 -0
  179. package/dist/sandbox/session-attach-variable-sets.d.ts +30 -0
  180. package/dist/sandbox/viewer.d.ts +26 -1
  181. package/dist/sandbox-file-artifacts.d.ts +50 -0
  182. package/dist/scheduled-task-deletion.d.ts +13 -0
  183. package/dist/session-create-observability.d.ts +5 -0
  184. package/dist/session-event-view-MPS2OZD3.js +292 -0
  185. package/dist/session-event-view-MPS2OZD3.js.map +1 -0
  186. package/dist/site-session-origin.d.ts +13 -0
  187. package/dist/site-uploads.d.ts +41 -0
  188. package/dist/slack-reaction-files.d.ts +1 -1
  189. package/dist/temporal-schedule-cleanup.d.ts +1 -0
  190. package/dist/temporal-schedule-sync.d.ts +26 -0
  191. package/dist/transcription/providers/xai-subscription.d.ts +1 -0
  192. package/dist/transcription/service.d.ts +2 -1
  193. package/dist/work-discovery-observability.d.ts +33 -0
  194. package/dist/workspace-artifact-content.d.ts +28 -0
  195. package/dist/workspace-artifact-provenance.d.ts +7 -0
  196. package/dist/workspace-delete-observability.d.ts +10 -0
  197. package/dist/workspace-deletion.d.ts +6 -0
  198. package/dist/workspace-state-projection.d.ts +3 -5
  199. package/dist/workspace-tool-gateway-observability.d.ts +17 -0
  200. package/dist/workspace-tool-gateway.d.ts +123 -0
  201. package/dist/workspace-webhook-dispatch.d.ts +26 -0
  202. package/package.json +23 -19
  203. package/src/access-grant-rls.ts +75 -0
  204. package/src/admission-trace.ts +14 -0
  205. package/src/api-websocket.ts +23 -0
  206. package/src/app.ts +1967 -252
  207. package/src/artifact-catalog-cursor.ts +60 -0
  208. package/src/auth/managed-auth-attempt-context.ts +70 -0
  209. package/src/auth/managed-auth-rate-limits.ts +252 -0
  210. package/src/auth/managed-auth-session-adapter.ts +222 -0
  211. package/src/auth/managed-auth.ts +536 -60
  212. package/src/auth/managed-email.ts +174 -0
  213. package/src/auth/managed-sign-in-notifications.ts +81 -0
  214. package/src/auth/new-signups-gate.ts +49 -0
  215. package/src/auth/organization-user-setup.ts +307 -0
  216. package/src/auth/signup-funnel-metrics.ts +164 -0
  217. package/src/browser-controller-authority.ts +1 -186
  218. package/src/browser-ephemeral.ts +39 -0
  219. package/src/browser-state-authority.ts +1 -236
  220. package/src/claude-subscription-account-conflicts.ts +12 -0
  221. package/src/claude-subscription-account-usage.ts +48 -0
  222. package/src/claude-subscription-oauth.ts +362 -0
  223. package/src/claude-subscription-profile.ts +73 -0
  224. package/src/claude-subscription-usage.ts +97 -0
  225. package/src/claude-workspace-connection.ts +82 -0
  226. package/src/codemode.ts +194 -30
  227. package/src/codex-realtime.ts +8 -2
  228. package/src/company-brain-okf.ts +340 -0
  229. package/src/connected-machine-computer-access.ts +33 -0
  230. package/src/connection-ownership.ts +199 -0
  231. package/src/controller-data-plane.ts +81 -0
  232. package/src/editable-artifact-native-kernel.ts +26 -15
  233. package/src/editable-artifact-office-import.ts +28 -3
  234. package/src/editable-artifact-production.ts +23 -7
  235. package/src/editable-artifact-source-session.ts +123 -0
  236. package/src/editable-artifact-websocket.ts +27 -21
  237. package/src/editable-artifact-workspace-files.ts +31 -6
  238. package/src/fatal-process-boundary.ts +246 -0
  239. package/src/gateway-realtime.ts +1 -1
  240. package/src/github-access.ts +147 -5
  241. package/src/http/acting-person.ts +71 -0
  242. package/src/http/api-contract-compat.ts +49 -0
  243. package/src/http/api-error.ts +115 -1
  244. package/src/http/auth.ts +48 -0
  245. package/src/http/cors.ts +67 -0
  246. package/src/http/deprecation.ts +118 -0
  247. package/src/http/interaction-control-error.ts +164 -0
  248. package/src/http/keyed-admission.ts +29 -0
  249. package/src/http/local-browser-boundary.ts +343 -0
  250. package/src/http/metrics-listener.ts +57 -0
  251. package/src/http/path-identifier.ts +54 -0
  252. package/src/http/registered-route-label.ts +34 -0
  253. package/src/http/request-body.ts +127 -0
  254. package/src/http/request-source.ts +178 -0
  255. package/src/http/sse.ts +486 -132
  256. package/src/http/unmatched-route.ts +60 -0
  257. package/src/http/user-content.ts +158 -0
  258. package/src/http/websocket-upgrade-dispatch.ts +29 -0
  259. package/src/index.ts +157 -52
  260. package/src/integration-endpoint-test.ts +291 -0
  261. package/src/integrations/api-integrations.ts +98 -11
  262. package/src/integrations/atlassian.ts +474 -136
  263. package/src/integrations/connect-authority.ts +2 -0
  264. package/src/integrations/connect-callback-return.ts +86 -0
  265. package/src/integrations/fiken.ts +354 -64
  266. package/src/integrations/github-app-connect.ts +435 -0
  267. package/src/integrations/github-installation-proof.ts +60 -0
  268. package/src/integrations/github-lens-connect.ts +76 -0
  269. package/src/integrations/github-skill-source.ts +2 -142
  270. package/src/integrations/google-drive.ts +717 -225
  271. package/src/integrations/integration-commit-authority.ts +69 -0
  272. package/src/integrations/marketplace-plugin.ts +48 -0
  273. package/src/integrations/oauth-client.ts +1356 -459
  274. package/src/integrations/oauth-profiles.ts +537 -0
  275. package/src/integrations/oauth-return-path.ts +18 -0
  276. package/src/integrations/personal-github-repositories.ts +674 -0
  277. package/src/integrations/personal-github.ts +825 -0
  278. package/src/integrations/pr-review-provider.ts +246 -0
  279. package/src/integrations/provider-oauth.ts +250 -22
  280. package/src/integrations/slack-app-home.ts +300 -0
  281. package/src/integrations/slack-bot.ts +963 -239
  282. package/src/integrations/slack-file-upload-flow.ts +147 -0
  283. package/src/integrations/slack-install.ts +83 -0
  284. package/src/integrations/slack-interactions.ts +3167 -474
  285. package/src/integrations/slack-mrkdwn.ts +193 -0
  286. package/src/integrations/slack-routing.ts +337 -0
  287. package/src/integrations/slack-session-defaults.ts +224 -0
  288. package/src/integrations/slack-task-file-upload.ts +323 -0
  289. package/src/integrations/social-oauth.ts +213 -15
  290. package/src/interaction-agent-access.ts +48 -0
  291. package/src/interaction-frame-proxy.ts +409 -0
  292. package/src/interaction-metrics.ts +30 -0
  293. package/src/mcp/action-catalog-types.ts +9 -0
  294. package/src/mcp/action-catalog.gen.ts +6696 -0
  295. package/src/mcp/capability-account-readiness.ts +17 -0
  296. package/src/mcp/child-read-evidence.ts +19 -0
  297. package/src/mcp/command-read.ts +109 -0
  298. package/src/mcp/company-profile-agent-admin.ts +198 -0
  299. package/src/mcp/contract-input.ts +141 -0
  300. package/src/mcp/documents.ts +65 -377
  301. package/src/mcp/editable-artifacts.ts +12 -6
  302. package/src/mcp/files.ts +80 -43
  303. package/src/mcp/first-party-tool-permissions.ts +305 -0
  304. package/src/mcp/knowledge-entries.ts +322 -0
  305. package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
  306. package/src/mcp/receipts.ts +34 -0
  307. package/src/mcp/request-abort.ts +44 -0
  308. package/src/mcp/scheduled-task-input.ts +76 -0
  309. package/src/mcp/scheduled-task-view.ts +44 -3
  310. package/src/mcp/server.ts +3030 -1267
  311. package/src/mcp/session-event-view.ts +383 -0
  312. package/src/mcp/session-view.ts +84 -3
  313. package/src/mcp/session-wait.ts +665 -0
  314. package/src/mcp-oauth.ts +1123 -0
  315. package/src/model-catalog.ts +91 -333
  316. package/src/observability.ts +15 -1
  317. package/src/organization-mcp.ts +397 -0
  318. package/src/organization-recovery-notifications.ts +103 -0
  319. package/src/routes/analytics-consent.ts +123 -0
  320. package/src/routes/api-integrations.ts +364 -74
  321. package/src/routes/api-keys.ts +336 -10
  322. package/src/routes/artifact-catalog.ts +279 -0
  323. package/src/routes/automations.ts +768 -0
  324. package/src/routes/billing.ts +461 -46
  325. package/src/routes/browser-sessions.ts +780 -112
  326. package/src/routes/canonical-human-identities.ts +90 -14
  327. package/src/routes/capabilities.ts +107 -6
  328. package/src/routes/channels.ts +20 -3
  329. package/src/routes/claude-subscription-accounts.ts +334 -0
  330. package/src/routes/claude-subscription-oauth.ts +142 -0
  331. package/src/routes/client-errors.ts +362 -0
  332. package/src/routes/codex.ts +833 -116
  333. package/src/routes/company-brain.ts +322 -0
  334. package/src/routes/company-profile.ts +65 -1
  335. package/src/routes/computer-sessions.ts +557 -106
  336. package/src/routes/connect.ts +1938 -0
  337. package/src/routes/connections.ts +1039 -349
  338. package/src/routes/documents.ts +488 -287
  339. package/src/routes/editable-artifacts.ts +79 -9
  340. package/src/routes/enrollments.ts +135 -39
  341. package/src/routes/environments.ts +154 -58
  342. package/src/routes/external-identity-links.ts +201 -0
  343. package/src/routes/feedback.ts +113 -0
  344. package/src/routes/files.ts +267 -33
  345. package/src/routes/github-browser-pages.ts +162 -0
  346. package/src/routes/github.ts +446 -144
  347. package/src/routes/insights-response-cache.ts +83 -0
  348. package/src/routes/insights-usage.ts +345 -0
  349. package/src/routes/insights.ts +153 -19
  350. package/src/routes/install.ts +133 -38
  351. package/src/routes/integration-facets.ts +107 -33
  352. package/src/routes/interaction-resources.ts +30 -3
  353. package/src/routes/knowledge.ts +488 -0
  354. package/src/routes/machines.ts +313 -15
  355. package/src/routes/managed-auth-session-sets.ts +1218 -0
  356. package/src/routes/managed-onboarding.ts +337 -0
  357. package/src/routes/managed-sign-in-methods.ts +433 -0
  358. package/src/routes/memory-slack-publications.ts +3 -2
  359. package/src/routes/model-connection-access.ts +208 -0
  360. package/src/routes/organization-integration-policy.ts +116 -0
  361. package/src/routes/organization-integrations.ts +326 -0
  362. package/src/routes/organization-mcp-connections.ts +178 -0
  363. package/src/routes/organization-memberships.ts +1019 -27
  364. package/src/routes/organization-model-providers.ts +293 -0
  365. package/src/routes/organization-recovery.ts +325 -0
  366. package/src/routes/organization-service-accounts.ts +128 -0
  367. package/src/routes/organization-sessions.ts +350 -0
  368. package/src/routes/personal-github-git-broker.ts +785 -0
  369. package/src/routes/personal-github.ts +370 -0
  370. package/src/routes/plugins.ts +251 -22
  371. package/src/routes/pr-review-github.ts +881 -0
  372. package/src/routes/pr-review.ts +622 -0
  373. package/src/routes/preference-registry.ts +12 -93
  374. package/src/routes/rigs.ts +167 -50
  375. package/src/routes/scheduled-tasks.ts +346 -41
  376. package/src/routes/session-artifact-associations.ts +87 -0
  377. package/src/routes/session-history-imports.ts +280 -0
  378. package/src/routes/sessions.ts +2306 -264
  379. package/src/routes/skill-content.ts +297 -0
  380. package/src/routes/skill-install-authority.ts +64 -0
  381. package/src/routes/skills.ts +62 -9
  382. package/src/routes/social.ts +46 -18
  383. package/src/routes/subscription-account-pools.ts +436 -0
  384. package/src/routes/subscription-pool-access.ts +126 -0
  385. package/src/routes/supergrok.ts +219 -303
  386. package/src/routes/transcription-recordings.ts +38 -3
  387. package/src/routes/transcriptions.ts +4 -0
  388. package/src/routes/usage-allowances.ts +378 -0
  389. package/src/routes/user-resource-authorities.ts +138 -0
  390. package/src/routes/video-generation.ts +14 -10
  391. package/src/routes/workspace-artifacts.ts +275 -69
  392. package/src/routes/workspace-capture.ts +21 -0
  393. package/src/routes/workspace-integrations.ts +576 -0
  394. package/src/routes/workspace-learning.ts +159 -0
  395. package/src/routes/workspace-model-providers.ts +148 -0
  396. package/src/routes/workspace-state.ts +38 -25
  397. package/src/routes/workspaces.ts +1004 -127
  398. package/src/sandbox/auth-callout.ts +96 -19
  399. package/src/sandbox/channel-a.ts +323 -24
  400. package/src/sandbox/connection-authority.ts +3 -0
  401. package/src/sandbox/enrollment.ts +81 -6
  402. package/src/sandbox/machines.ts +218 -76
  403. package/src/sandbox/metrics-ingestion.ts +411 -62
  404. package/src/sandbox/rematerialize.ts +121 -19
  405. package/src/sandbox/session-attach-variable-sets.ts +131 -0
  406. package/src/sandbox/viewer.ts +280 -25
  407. package/src/sandbox-file-artifacts.ts +413 -0
  408. package/src/scheduled-task-deletion.ts +138 -0
  409. package/src/session-create-observability.ts +46 -0
  410. package/src/session-realtime-context.ts +6 -3
  411. package/src/site-session-origin.ts +48 -0
  412. package/src/site-uploads.ts +224 -0
  413. package/src/slack-reaction-files.ts +16 -5
  414. package/src/temporal-schedule-cleanup.ts +13 -0
  415. package/src/temporal-schedule-sync.ts +74 -0
  416. package/src/transcription/providers/codex-subscription.ts +2 -0
  417. package/src/transcription/providers/openai.ts +1 -0
  418. package/src/transcription/providers/xai-subscription.ts +49 -3
  419. package/src/transcription/segmenter.ts +8 -2
  420. package/src/transcription/service.ts +43 -6
  421. package/src/work-discovery-observability.ts +121 -0
  422. package/src/workspace-artifact-content.ts +144 -0
  423. package/src/workspace-artifact-provenance.ts +104 -0
  424. package/src/workspace-delete-observability.ts +75 -0
  425. package/src/workspace-deletion.ts +73 -0
  426. package/src/workspace-state-projection.ts +18 -148
  427. package/src/workspace-tool-gateway-observability.ts +100 -0
  428. package/src/workspace-tool-gateway.ts +870 -0
  429. package/src/workspace-webhook-dispatch.ts +190 -0
  430. package/src/xai-subscription-auth.ts +9 -2
  431. package/dist/chunk-WCXHI3FF.js +0 -49920
  432. package/dist/chunk-WCXHI3FF.js.map +0 -1
  433. package/dist/routes/packs.d.ts +0 -3
  434. package/src/routes/packs.ts +0 -729
@@ -1,4 +1,5 @@
1
1
  import type { Settings } from "@opengeni/config";
2
+ import { parseWorkspaceArchiveObjectRef } from "@opengeni/contracts";
2
3
  import {
3
4
  adoptLegacyModalCheckpointArtifact,
4
5
  beginSandboxRematerialization,
@@ -6,6 +7,7 @@ import {
6
7
  failSandboxRematerialization,
7
8
  failWarmingToCold,
8
9
  markSandboxRestoreVerifying,
10
+ sessionHoldsFreshWorkspaceRecovery,
9
11
  recordWarmingSandboxCreated,
10
12
  SandboxLeaseRecoveryBlockedError,
11
13
  SandboxLeaseSupersededError,
@@ -13,6 +15,7 @@ import {
13
15
  type LeaseSnapshot,
14
16
  } from "@opengeni/db";
15
17
  import {
18
+ inlineWorkspaceArchiveForRestore,
16
19
  describeLegacyNativeSnapshotArchive,
17
20
  establishSandboxSessionFromEnvelope,
18
21
  isProviderSandboxNotFoundError,
@@ -30,17 +33,68 @@ import {
30
33
  type EstablishedSandboxSession,
31
34
  type WorkspaceArchiveDescriptor,
32
35
  } from "@opengeni/runtime/sandbox";
36
+ import {
37
+ downloadWorkspaceArchiveSpool,
38
+ WorkspaceArchiveStorageError,
39
+ type ObjectStorage,
40
+ } from "@opengeni/storage";
33
41
 
34
42
  function hasWorkspaceArchive(envelope: Record<string, unknown> | null): boolean {
35
43
  const sessionState =
36
- envelope?.sessionState && typeof envelope.sessionState === "object"
44
+ envelope?.sessionState &&
45
+ typeof envelope.sessionState === "object" &&
46
+ !Array.isArray(envelope.sessionState)
37
47
  ? (envelope.sessionState as Record<string, unknown>)
38
48
  : null;
39
49
  return (
40
- typeof sessionState?.workspaceArchive === "string" && sessionState.workspaceArchive.length > 0
50
+ (typeof sessionState?.workspaceArchive === "string" &&
51
+ sessionState.workspaceArchive.length > 0) ||
52
+ parseWorkspaceArchiveObjectRef(sessionState?.workspaceArchiveRef) !== null
41
53
  );
42
54
  }
43
55
 
56
+ async function materializeArchiveObjectRef(
57
+ envelope: Record<string, unknown> | null,
58
+ objectStorage: ObjectStorage | null | undefined,
59
+ ): Promise<Record<string, unknown> | null> {
60
+ if (!envelope) return null;
61
+ const sessionState =
62
+ envelope.sessionState &&
63
+ typeof envelope.sessionState === "object" &&
64
+ !Array.isArray(envelope.sessionState)
65
+ ? (envelope.sessionState as Record<string, unknown>)
66
+ : null;
67
+ if (!sessionState) return envelope;
68
+ if (sessionState.workspaceArchiveRef == null) return envelope;
69
+ if (!parseWorkspaceArchiveObjectRef(sessionState.workspaceArchiveRef)) {
70
+ throw new WorkspaceArchiveIntegrityError(
71
+ "archive_metadata_invalid",
72
+ "workspace archive object reference is malformed",
73
+ );
74
+ }
75
+ if (!objectStorage) {
76
+ throw new WorkspaceArchiveIntegrityError(
77
+ "archive_storage_unavailable",
78
+ "workspace archive object storage is not configured",
79
+ { retryable: true },
80
+ );
81
+ }
82
+ const descriptor = parseWorkspaceArchiveDescriptor(sessionState.workspaceArchiveMeta);
83
+ if (
84
+ process.platform === "linux" &&
85
+ descriptor?.version === 1 &&
86
+ descriptor.workspace.projection === "sdk_local_archive_v1"
87
+ ) {
88
+ return envelope;
89
+ }
90
+ return {
91
+ ...envelope,
92
+ sessionState: await inlineWorkspaceArchiveForRestore(sessionState, (key) =>
93
+ objectStorage.getObjectBytes(key),
94
+ ),
95
+ };
96
+ }
97
+
44
98
  function legacyNativeArchiveFromEnvelope(envelope: Record<string, unknown> | null) {
45
99
  const sessionState =
46
100
  envelope?.sessionState && typeof envelope.sessionState === "object"
@@ -82,14 +136,31 @@ export async function establishApiSandboxSpawner(input: {
82
136
  acquiredLease: LeaseSnapshot;
83
137
  fallbackEnvelope: Record<string, unknown> | null;
84
138
  dataPlaneUrl: string | null;
139
+ objectStorage?: ObjectStorage | null;
85
140
  }): Promise<{ established: EstablishedSandboxSession; lease: LeaseSnapshot }> {
141
+ // An audited decision to continue a definitively lost workspace on a new
142
+ // EMPTY box: hydrate nothing, including a per-session legacy archive, and
143
+ // never resume a prior provider identity. Commit verifies the decision.
144
+ const freshWorkspaceRecoveryId = input.acquiredLease.freshWorkspaceRecoveryId ?? null;
145
+ // Backstop: a session already told its workspace is empty never gets a
146
+ // legacy per-session archive back, even if the lease marker was lost.
147
+ const legacyFallbackRefused =
148
+ !freshWorkspaceRecoveryId &&
149
+ input.acquiredLease.recovery.archive.status === "none" &&
150
+ hasWorkspaceArchive(input.fallbackEnvelope) &&
151
+ (await sessionHoldsFreshWorkspaceRecovery(input.db, input.workspaceId, input.sessionId));
86
152
  const fallbackArchiveEnvelope =
153
+ !freshWorkspaceRecoveryId &&
154
+ !legacyFallbackRefused &&
87
155
  input.acquiredLease.recovery.archive.status === "none" &&
88
156
  hasWorkspaceArchive(input.fallbackEnvelope)
89
157
  ? withoutSandboxProviderIdentity(input.fallbackEnvelope)
90
158
  : null;
91
- let spawnEnvelope =
92
- fallbackArchiveEnvelope ?? input.acquiredLease.resumeState ?? input.fallbackEnvelope;
159
+ let spawnEnvelope = freshWorkspaceRecoveryId
160
+ ? null
161
+ : legacyFallbackRefused
162
+ ? (input.acquiredLease.resumeState ?? null)
163
+ : (fallbackArchiveEnvelope ?? input.acquiredLease.resumeState ?? input.fallbackEnvelope);
93
164
  const archiveSource =
94
165
  input.acquiredLease.recovery.archive.status === "none"
95
166
  ? fallbackArchiveEnvelope
@@ -108,9 +179,12 @@ export async function establishApiSandboxSpawner(input: {
108
179
  const continuityRecovery = input.acquiredLease.recovery.continuity;
109
180
  try {
110
181
  if (
111
- (input.acquiredLease.recovery.archive.status === "available" &&
112
- input.acquiredLease.archiveComplete) ||
113
- (input.acquiredLease.recovery.archive.status === "none" && hasWorkspaceArchive(archiveSource))
182
+ !freshWorkspaceRecoveryId &&
183
+ ((input.acquiredLease.recovery.archive.status === "available" &&
184
+ (input.acquiredLease.archiveComplete ||
185
+ input.acquiredLease.historicalRecoveryAuthorized === true)) ||
186
+ (input.acquiredLease.recovery.archive.status === "none" &&
187
+ hasWorkspaceArchive(archiveSource)))
114
188
  ) {
115
189
  const id = crypto.randomUUID();
116
190
  const legacyNativeArchive = legacyNativeArchiveFromEnvelope(archiveSource);
@@ -153,7 +227,11 @@ export async function establishApiSandboxSpawner(input: {
153
227
  legacyCheckpoint: begun.checkpointArtifact === null ? legacyNativeArchive : null,
154
228
  legacyProviderBinding: null,
155
229
  };
156
- } else if (input.acquiredLease.recovery.archive.status !== "none" && !continuityRecovery) {
230
+ } else if (
231
+ !freshWorkspaceRecoveryId &&
232
+ input.acquiredLease.recovery.archive.status !== "none" &&
233
+ !continuityRecovery
234
+ ) {
157
235
  throw new SandboxLeaseRecoveryBlockedError(
158
236
  input.sandboxGroupId,
159
237
  input.expectedEpoch,
@@ -162,10 +240,32 @@ export async function establishApiSandboxSpawner(input: {
162
240
  );
163
241
  }
164
242
 
243
+ const hydrateEnvelope = await materializeArchiveObjectRef(spawnEnvelope, input.objectStorage);
244
+
165
245
  const providerCreateStartedAt = new Date();
166
- established = await establishSandboxSessionFromEnvelope(input.settings, spawnEnvelope, {
246
+ established = await establishSandboxSessionFromEnvelope(input.settings, hydrateEnvelope, {
167
247
  sessionId: input.sessionId,
168
248
  recovery: "create-or-restore",
249
+ ...(input.objectStorage
250
+ ? {
251
+ loadHostWorkspaceArchive: async (ref) => {
252
+ try {
253
+ return await downloadWorkspaceArchiveSpool(input.objectStorage!, ref.key, {
254
+ bytes: ref.bytes,
255
+ sha256: ref.sha256,
256
+ });
257
+ } catch (error) {
258
+ if (error instanceof WorkspaceArchiveStorageError) {
259
+ throw new WorkspaceArchiveIntegrityError(error.code, error.message, {
260
+ retryable: error.retryable,
261
+ cause: error,
262
+ });
263
+ }
264
+ throw error;
265
+ }
266
+ },
267
+ }
268
+ : {}),
169
269
  backendOverride: input.backend as never,
170
270
  environment: input.environment,
171
271
  onSandboxCreated: async (created) => {
@@ -308,16 +408,18 @@ export async function establishApiSandboxSpawner(input: {
308
408
  dataPlaneUrl: input.dataPlaneUrl,
309
409
  resumeBackendId: established.backendId,
310
410
  resumeState,
311
- ...(established.providerContinuity
312
- ? { continuityRecovery: established.providerContinuity }
313
- : rematerialization
314
- ? {
315
- rematerialization: {
316
- id: rematerialization.id,
317
- verifiedRevision: rematerialization.selectedRevision,
318
- },
319
- }
320
- : {}),
411
+ ...(freshWorkspaceRecoveryId
412
+ ? { freshWorkspace: { operationId: freshWorkspaceRecoveryId } }
413
+ : established.providerContinuity
414
+ ? { continuityRecovery: established.providerContinuity }
415
+ : rematerialization
416
+ ? {
417
+ rematerialization: {
418
+ id: rematerialization.id,
419
+ verifiedRevision: rematerialization.selectedRevision,
420
+ },
421
+ }
422
+ : {}),
321
423
  leaseTtlMs: input.settings.sandboxLeaseTtlMs,
322
424
  });
323
425
  if (!committed.committed || !committed.lease) {
@@ -0,0 +1,131 @@
1
+ import type { Settings } from "@opengeni/config";
2
+ import {
3
+ getScheduledScopedRigVersionMetadata,
4
+ loadWorkspaceEnvironmentForRun,
5
+ nestedPostgresSqlState,
6
+ type Database,
7
+ } from "@opengeni/db";
8
+ import { ApiHttpError } from "../http/api-error";
9
+
10
+ export type SessionAttachVariableSetSession = {
11
+ id: string;
12
+ rigId?: string | null | undefined;
13
+ rigVersionId?: string | null | undefined;
14
+ variableSetIds?: readonly string[] | null | undefined;
15
+ /** Legacy final-entry alias for projections that predate the plural field. */
16
+ variableSetId?: string | null | undefined;
17
+ };
18
+
19
+ type VariableSetSource = "sandbox_environment_default" | "session_selection";
20
+
21
+ /**
22
+ * Decrypted Variable Set values for a direct session attach (terminal, Files,
23
+ * Git, desktop viewer), in the same order and precedence as the worker turn:
24
+ * the frozen Sandbox Environment version defaults first, then the session's
25
+ * own selection, so a box first warmed by an attach declares exactly the
26
+ * environment the next turn declares.
27
+ *
28
+ * A Variable Set the session can no longer use (the database seam answers
29
+ * 42501 and records a `variable_set.materialize.denied` fact) becomes a 403
30
+ * instead of a bare 500. Every failure is logged with the session, set, source
31
+ * and SQLSTATE, never a value.
32
+ */
33
+ export async function loadSessionAttachVariableSetValues(
34
+ db: Database,
35
+ settings: Settings,
36
+ input: {
37
+ accountId: string;
38
+ workspaceId: string;
39
+ session: SessionAttachVariableSetSession;
40
+ /** The authenticated route subject driving the attach; null records the
41
+ * legacy service sentinel on the materialization audit fact. */
42
+ subjectId: string | null;
43
+ },
44
+ ): Promise<Record<string, string>> {
45
+ const { accountId, workspaceId, session, subjectId } = input;
46
+ const values: Record<string, string> = {};
47
+ let defaultVariableSetIds: readonly string[] = [];
48
+ if (session.rigId && session.rigVersionId) {
49
+ try {
50
+ const rigVersion = await getScheduledScopedRigVersionMetadata(
51
+ db,
52
+ { accountId, workspaceId, subjectId: subjectId ?? "session-attach" },
53
+ session.rigId,
54
+ session.rigVersionId,
55
+ );
56
+ defaultVariableSetIds = rigVersion?.version.defaultVariableSetIds ?? [];
57
+ } catch (error) {
58
+ logAttachFailure("sandbox environment lookup failed", error, {
59
+ sessionId: session.id,
60
+ rigId: session.rigId,
61
+ rigVersionId: session.rigVersionId,
62
+ });
63
+ throw error;
64
+ }
65
+ }
66
+ // Older persisted/test projections can omit the plural field. Preserve the
67
+ // legacy final alias as the single explicit selection.
68
+ const selectedVariableSetIds =
69
+ session.variableSetIds ?? (session.variableSetId ? [session.variableSetId] : []);
70
+ const ordered: Array<{ variableSetId: string; source: VariableSetSource }> = [
71
+ ...defaultVariableSetIds.map((variableSetId) => ({
72
+ variableSetId,
73
+ source: "sandbox_environment_default" as const,
74
+ })),
75
+ ...selectedVariableSetIds.map((variableSetId) => ({
76
+ variableSetId,
77
+ source: "session_selection" as const,
78
+ })),
79
+ ];
80
+ for (const { variableSetId, source } of ordered) {
81
+ try {
82
+ const loaded = await loadWorkspaceEnvironmentForRun(db, settings, {
83
+ accountId,
84
+ workspaceId,
85
+ variableSetId,
86
+ authority: { kind: "session_attach", sessionId: session.id, subjectId },
87
+ });
88
+ Object.assign(values, loaded?.values ?? {});
89
+ } catch (error) {
90
+ logAttachFailure("variable set materialization failed", error, {
91
+ sessionId: session.id,
92
+ variableSetId,
93
+ source,
94
+ });
95
+ if (nestedPostgresSqlState(error) === "42501") {
96
+ throw new ApiHttpError(403, {
97
+ code: "forbidden",
98
+ message:
99
+ source === "sandbox_environment_default"
100
+ ? "A default Variable Set of this session's Sandbox Environment is not available to this session."
101
+ : "A Variable Set selected for this session is not available to this session.",
102
+ retryable: false,
103
+ details: { variableSetId, source },
104
+ });
105
+ }
106
+ throw error;
107
+ }
108
+ }
109
+ return values;
110
+ }
111
+
112
+ function logAttachFailure(message: string, error: unknown, context: Record<string, string>): void {
113
+ const sqlState = nestedPostgresSqlState(error);
114
+ console.warn(`[session-attach] ${message}`, {
115
+ ...context,
116
+ ...(sqlState ? { sqlState } : {}),
117
+ error: rootCauseMessage(error),
118
+ });
119
+ }
120
+
121
+ /** The innermost cause's message: the database's own reason rather than the
122
+ * query-builder wrapper that repeats the statement text. */
123
+ function rootCauseMessage(error: unknown): string {
124
+ let current: unknown = error;
125
+ for (let depth = 0; depth < 8; depth += 1) {
126
+ const cause = current instanceof Error ? current.cause : undefined;
127
+ if (!(cause instanceof Error)) break;
128
+ current = cause;
129
+ }
130
+ return current instanceof Error ? current.message : String(current);
131
+ }