@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
@@ -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
+ }