@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
@@ -0,0 +1,362 @@
1
+ // Minimal first-party web-client error beacon.
2
+ //
3
+ // The browser reports only a closed error kind, the matched route PATTERN
4
+ // (never a concrete URL), and its bundle revision. No message, stack, URL,
5
+ // identifier, user content, or credential is accepted, and the route admits
6
+ // anonymous callers so a failure before sign-in is still counted. Each
7
+ // accepted report increments one closed-label counter and writes one bounded
8
+ // structured log line. This is an operational lower bound, not exception
9
+ // capture: blocked requests, closed tabs, and the per-process admission bound
10
+ // all drop reports. Because the route is anonymous, any HTTP client that omits
11
+ // or forges `Origin` can still send reports up to the admission ceiling, so
12
+ // alert on rates and ratios, not on absolute counts.
13
+ //
14
+ // The same route admits closed operational signals discriminated by a
15
+ // `signal` field: key requests that failed before any HTTP response
16
+ // (`opengeni_client_request_failures_total{action,reason}`), live-stream health
17
+ // (`opengeni_client_stream_events_total{stream,event}`), and web vitals
18
+ // (`opengeni_client_web_vital{metric,page}`). They carry the same closed-value
19
+ // guarantees and have their own per-key admission buckets, so a burst of one
20
+ // signal never spends the error kinds' budget.
21
+ import type { Settings } from "@opengeni/config";
22
+ import {
23
+ CLIENT_ERROR_KINDS,
24
+ CLIENT_ERROR_REPORT_MAX_BYTES,
25
+ CLIENT_ERROR_REVISION_PATTERN,
26
+ CLIENT_ERROR_ROUTE_PATTERN,
27
+ CLIENT_ERRORS_PATH,
28
+ CLIENT_PAGES,
29
+ CLIENT_REQUEST_ACTIONS,
30
+ CLIENT_REQUEST_FAILURE_REASONS,
31
+ CLIENT_SIGNALS,
32
+ CLIENT_STREAM_EVENTS,
33
+ CLIENT_STREAMS,
34
+ CLIENT_WEB_VITAL_MAX_VALUE,
35
+ CLIENT_WEB_VITAL_METRICS,
36
+ type ClientErrorKind,
37
+ type ClientSignal,
38
+ } from "@opengeni/contracts/client-error-report";
39
+ import type { Observability } from "@opengeni/observability";
40
+ import type { Context, Hono } from "hono";
41
+ import { bodyLimit } from "hono/body-limit";
42
+ import { z } from "zod";
43
+
44
+ import { isAllowedBrowserOrigin } from "../http/cors";
45
+ import { createKeyedAdmission, type KeyedAdmission } from "../http/keyed-admission";
46
+
47
+ export {
48
+ CLIENT_ERROR_KINDS,
49
+ CLIENT_ERROR_REPORT_MAX_BYTES,
50
+ CLIENT_ERRORS_PATH,
51
+ type ClientErrorKind,
52
+ };
53
+
54
+ const CLIENT_ERROR_REJECTION_REASONS = ["invalid", "too_large", "origin", "rate_limited"] as const;
55
+ type ClientErrorRejectionReason = (typeof CLIENT_ERROR_REJECTION_REASONS)[number];
56
+
57
+ export const ClientErrorReport = z
58
+ .object({
59
+ kind: z.enum(CLIENT_ERROR_KINDS),
60
+ route: z.string().regex(CLIENT_ERROR_ROUTE_PATTERN),
61
+ revision: z.string().regex(CLIENT_ERROR_REVISION_PATTERN),
62
+ })
63
+ .strict();
64
+ export type ClientErrorReport = z.infer<typeof ClientErrorReport>;
65
+
66
+ const route = z.string().regex(CLIENT_ERROR_ROUTE_PATTERN);
67
+ const revision = z.string().regex(CLIENT_ERROR_REVISION_PATTERN);
68
+
69
+ export const ClientSignalReport = z.discriminatedUnion("signal", [
70
+ z
71
+ .object({
72
+ signal: z.literal("request_failure"),
73
+ action: z.enum(CLIENT_REQUEST_ACTIONS),
74
+ reason: z.enum(CLIENT_REQUEST_FAILURE_REASONS),
75
+ route,
76
+ revision,
77
+ })
78
+ .strict(),
79
+ z
80
+ .object({
81
+ signal: z.literal("stream"),
82
+ stream: z.enum(CLIENT_STREAMS),
83
+ event: z.enum(CLIENT_STREAM_EVENTS),
84
+ route,
85
+ revision,
86
+ })
87
+ .strict(),
88
+ z
89
+ .object({
90
+ signal: z.literal("web_vital"),
91
+ metric: z.enum(CLIENT_WEB_VITAL_METRICS),
92
+ page: z.enum(CLIENT_PAGES),
93
+ value: z.number().finite().nonnegative(),
94
+ revision,
95
+ })
96
+ .strict()
97
+ .refine((report) => report.value <= CLIENT_WEB_VITAL_MAX_VALUE[report.metric]),
98
+ ]);
99
+ export type ClientSignalReport = z.infer<typeof ClientSignalReport>;
100
+ export type ClientBeaconReport = ClientErrorReport | ClientSignalReport;
101
+
102
+ const CLIENT_ERRORS_METRIC = {
103
+ name: "opengeni_client_errors_total",
104
+ help: "Web client errors reported by browsers, by closed kind. Admission is bounded per API process, so this is a lower bound.",
105
+ } as const;
106
+ const CLIENT_ERROR_REJECTIONS_METRIC = {
107
+ name: "opengeni_client_error_reports_rejected_total",
108
+ help: 'Web client error reports the API refused, by closed reason and kind ("unknown" when the body was not read or not valid).',
109
+ } as const;
110
+
111
+ const CLIENT_REQUEST_FAILURES_METRIC = {
112
+ name: "opengeni_client_request_failures_total",
113
+ help: "Key web client requests that failed before any HTTP response, by closed action and reason (network, timeout, offline). Admission is bounded per API process, so this is a lower bound.",
114
+ } as const;
115
+ const CLIENT_STREAM_EVENTS_METRIC = {
116
+ name: "opengeni_client_stream_events_total",
117
+ help: "Web client live-stream health events, by stream (session, workspace) and closed event (reconnect, reconnect_exhausted, long_disconnect). Admission is bounded per API process, so this is a lower bound.",
118
+ } as const;
119
+ const CLIENT_WEB_VITAL_METRIC = {
120
+ name: "opengeni_client_web_vital",
121
+ help: "Web vitals reported by browsers, by metric and closed page label. lcp, inp and ttfb are seconds; cls is the unitless layout-shift score.",
122
+ } as const;
123
+ /**
124
+ * Bucket bounds cover the published good/poor thresholds of every metric:
125
+ * CLS 0.1/0.25, INP 0.2/0.5 s, TTFB 0.8/1.8 s, LCP 2.5/4 s.
126
+ */
127
+ export const CLIENT_WEB_VITAL_BUCKETS = [
128
+ 0.01, 0.025, 0.05, 0.1, 0.2, 0.25, 0.5, 0.8, 1, 1.8, 2.5, 4, 6, 10, 20, 60,
129
+ ];
130
+
131
+ export type ClientErrorAdmission = KeyedAdmission<ClientErrorKind>;
132
+ /** Keyed by `<signal>:<closed dimension>`, a finite set of buckets. */
133
+ export type ClientSignalAdmission = KeyedAdmission<string>;
134
+
135
+ /** Same bounds as the error kinds: one bucket per closed signal key. */
136
+ export function createClientSignalAdmission(
137
+ options: { capacity?: number; refillPerSecond?: number; now?: () => number } = {},
138
+ ): ClientSignalAdmission {
139
+ return createKeyedAdmission<string>(options);
140
+ }
141
+
142
+ /**
143
+ * Web vitals arrive from every page load rather than only on failure, so they
144
+ * get a much larger dedicated bucket per metric (burst 1,200, then 20 a
145
+ * second per process). The browser samples vitals before sending.
146
+ */
147
+ export function createClientWebVitalAdmission(
148
+ options: { capacity?: number; refillPerSecond?: number; now?: () => number } = {},
149
+ ): ClientSignalAdmission {
150
+ return createKeyedAdmission<string>({ capacity: 1_200, refillPerSecond: 20, ...options });
151
+ }
152
+
153
+ function signalAdmissionKey(report: ClientSignalReport): string {
154
+ switch (report.signal) {
155
+ case "request_failure":
156
+ return `request_failure:${report.action}`;
157
+ case "stream":
158
+ return `stream:${report.stream}:${report.event}`;
159
+ case "web_vital":
160
+ return `web_vital:${report.metric}`;
161
+ }
162
+ }
163
+
164
+ /**
165
+ * One token bucket per closed kind bounds counter inflation and log volume
166
+ * from any caller, including an anonymous one, without per-client state.
167
+ */
168
+ export function createClientErrorAdmission(
169
+ options: { capacity?: number; refillPerSecond?: number; now?: () => number } = {},
170
+ ): ClientErrorAdmission {
171
+ return createKeyedAdmission<ClientErrorKind>(options);
172
+ }
173
+
174
+ export function parseClientErrorReport(body: string | null): ClientErrorReport | null {
175
+ const report = parseClientBeaconReport(body);
176
+ return report && !isClientSignalReport(report) ? report : null;
177
+ }
178
+
179
+ /** Parse any accepted beacon body: an error report or a closed signal report. */
180
+ export function parseClientBeaconReport(body: string | null): ClientBeaconReport | null {
181
+ if (body === null || new TextEncoder().encode(body).byteLength > CLIENT_ERROR_REPORT_MAX_BYTES) {
182
+ return null;
183
+ }
184
+ let value: unknown;
185
+ try {
186
+ value = JSON.parse(body);
187
+ } catch {
188
+ return null;
189
+ }
190
+ const error = ClientErrorReport.safeParse(value);
191
+ if (error.success) return error.data;
192
+ const signal = ClientSignalReport.safeParse(value);
193
+ return signal.success ? signal.data : null;
194
+ }
195
+
196
+ export function isClientSignalReport(report: ClientBeaconReport): report is ClientSignalReport {
197
+ return "signal" in report;
198
+ }
199
+
200
+ /**
201
+ * The exact beacon request. The app-wide request-body limit skips it because
202
+ * the route enforces its own 512-byte limit on the streamed body; the generic
203
+ * ceiling would otherwise buffer a chunked body of many megabytes on an
204
+ * anonymous route before this one could refuse it.
205
+ */
206
+ export function isClientErrorReportRequest(method: string, pathname: string): boolean {
207
+ return method === "POST" && pathname === CLIENT_ERRORS_PATH;
208
+ }
209
+
210
+ export function registerClientErrorRoutes(
211
+ app: Hono,
212
+ deps: {
213
+ observability: Observability;
214
+ settings: Pick<Settings, "corsAllowOriginRegex" | "publicBaseUrl" | "webBaseUrl">;
215
+ admission?: ClientErrorAdmission;
216
+ signalAdmission?: ClientSignalAdmission;
217
+ webVitalAdmission?: ClientSignalAdmission;
218
+ },
219
+ ): void {
220
+ const { observability, settings } = deps;
221
+ const admission = deps.admission ?? createClientErrorAdmission();
222
+ const signalAdmission = deps.signalAdmission ?? createClientSignalAdmission();
223
+ const webVitalAdmission = deps.webVitalAdmission ?? createClientWebVitalAdmission();
224
+ // Publish the finite series at zero so the first failure after a deploy is
225
+ // an increase from a baseline rather than a series appearing from nothing.
226
+ for (const kind of CLIENT_ERROR_KINDS) {
227
+ observability.incrementCounter({ ...CLIENT_ERRORS_METRIC, labels: { kind }, amount: 0 });
228
+ observability.incrementCounter({
229
+ ...CLIENT_ERROR_REJECTIONS_METRIC,
230
+ labels: { reason: "rate_limited", kind },
231
+ amount: 0,
232
+ });
233
+ }
234
+ for (const action of CLIENT_REQUEST_ACTIONS) {
235
+ for (const reason of CLIENT_REQUEST_FAILURE_REASONS) {
236
+ observability.incrementCounter({
237
+ ...CLIENT_REQUEST_FAILURES_METRIC,
238
+ labels: { action, reason },
239
+ amount: 0,
240
+ });
241
+ }
242
+ }
243
+ for (const stream of CLIENT_STREAMS) {
244
+ for (const event of CLIENT_STREAM_EVENTS) {
245
+ observability.incrementCounter({
246
+ ...CLIENT_STREAM_EVENTS_METRIC,
247
+ labels: { stream, event },
248
+ amount: 0,
249
+ });
250
+ }
251
+ }
252
+ // A rate-limited signal report is counted under its signal name as `kind`.
253
+ for (const signal of CLIENT_SIGNALS) {
254
+ observability.incrementCounter({
255
+ ...CLIENT_ERROR_REJECTIONS_METRIC,
256
+ labels: { reason: "rate_limited", kind: signal },
257
+ amount: 0,
258
+ });
259
+ }
260
+ for (const reason of CLIENT_ERROR_REJECTION_REASONS) {
261
+ if (reason === "rate_limited") continue;
262
+ observability.incrementCounter({
263
+ ...CLIENT_ERROR_REJECTIONS_METRIC,
264
+ labels: { reason, kind: "unknown" },
265
+ amount: 0,
266
+ });
267
+ }
268
+ // A rate-limited refusal keeps its kind, so accepted plus rejected is the
269
+ // true per-kind arrival rate even while a bucket is empty.
270
+ const reject = (
271
+ c: Context,
272
+ reason: ClientErrorRejectionReason,
273
+ status: 400 | 403 | 413 | 429,
274
+ kind: ClientErrorKind | ClientSignal | "unknown" = "unknown",
275
+ ) => {
276
+ observability.incrementCounter({ ...CLIENT_ERROR_REJECTIONS_METRIC, labels: { reason, kind } });
277
+ c.header("cache-control", "no-store");
278
+ return c.body(null, status);
279
+ };
280
+
281
+ app.post(
282
+ CLIENT_ERRORS_PATH,
283
+ // Enforced on the streamed body, so a chunked request without a
284
+ // Content-Length is refused after 512 bytes rather than buffered.
285
+ bodyLimit({
286
+ maxSize: CLIENT_ERROR_REPORT_MAX_BYTES,
287
+ onError: (c) => reject(c, "too_large", 413),
288
+ }),
289
+ async (c) => {
290
+ c.header("cache-control", "no-store");
291
+ // Browsers always send Origin on this cross- or same-origin POST. A
292
+ // foreign page therefore cannot spend the admission budget or inflate
293
+ // the counter through its visitors' browsers.
294
+ const origin = c.req.header("origin");
295
+ if (origin !== undefined && !isAllowedBrowserOrigin(origin, settings)) {
296
+ return reject(c, "origin", 403);
297
+ }
298
+ const report = parseClientBeaconReport(await c.req.text().catch(() => null));
299
+ if (!report) return reject(c, "invalid", 400);
300
+ if (isClientSignalReport(report)) {
301
+ const bucket = report.signal === "web_vital" ? webVitalAdmission : signalAdmission;
302
+ if (!bucket.admit(signalAdmissionKey(report))) {
303
+ return reject(c, "rate_limited", 429, report.signal);
304
+ }
305
+ recordClientSignal(observability, report);
306
+ return c.body(null, 204);
307
+ }
308
+ if (!admission.admit(report.kind)) return reject(c, "rate_limited", 429, report.kind);
309
+ observability.incrementCounter({ ...CLIENT_ERRORS_METRIC, labels: { kind: report.kind } });
310
+ observability.warn("Web client error reported", {
311
+ surface: "web",
312
+ reason: report.kind,
313
+ clientRoute: report.route,
314
+ clientRevision: report.revision,
315
+ });
316
+ return c.body(null, 204);
317
+ },
318
+ );
319
+ }
320
+
321
+ function recordClientSignal(observability: Observability, report: ClientSignalReport): void {
322
+ switch (report.signal) {
323
+ case "request_failure":
324
+ observability.incrementCounter({
325
+ ...CLIENT_REQUEST_FAILURES_METRIC,
326
+ labels: { action: report.action, reason: report.reason },
327
+ });
328
+ observability.warn("Web client request failed before a response", {
329
+ surface: "web",
330
+ op: report.action,
331
+ reason: report.reason,
332
+ clientRoute: report.route,
333
+ clientRevision: report.revision,
334
+ });
335
+ return;
336
+ case "stream":
337
+ observability.incrementCounter({
338
+ ...CLIENT_STREAM_EVENTS_METRIC,
339
+ labels: { stream: report.stream, event: report.event },
340
+ });
341
+ // An ordinary reconnect is routine; only a stream that gave up or stayed
342
+ // down is worth a log line.
343
+ if (report.event !== "reconnect") {
344
+ observability.warn("Web client live stream degraded", {
345
+ surface: "web",
346
+ op: report.stream,
347
+ reason: report.event,
348
+ clientRoute: report.route,
349
+ clientRevision: report.revision,
350
+ });
351
+ }
352
+ return;
353
+ case "web_vital":
354
+ observability.observeHistogram({
355
+ ...CLIENT_WEB_VITAL_METRIC,
356
+ labels: { metric: report.metric, page: report.page },
357
+ value: report.value,
358
+ buckets: CLIENT_WEB_VITAL_BUCKETS,
359
+ });
360
+ return;
361
+ }
362
+ }