@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,291 @@
1
+ import {
2
+ CredentialProviderResponse,
3
+ OPENGENI_SIGNATURE_HEADER,
4
+ signOpenGeniPayload,
5
+ type IntegrationEndpointTestResult,
6
+ } from "@opengeni/contracts";
7
+ import {
8
+ DestinationPolicyError,
9
+ pinnedFetch,
10
+ type OutboundNetworkSettings,
11
+ } from "@opengeni/network";
12
+
13
+ /**
14
+ * One synchronous, signed test request to an integration endpoint, sent
15
+ * through the same pinned outbound policy as real deliveries. Nothing is
16
+ * stored. A provider's credential values never leave this function: only
17
+ * their names are returned.
18
+ */
19
+
20
+ const RESPONSE_EXCERPT_BYTES = 1024;
21
+ /** A provider answer is parsed in full, like a real run's (5 MiB). */
22
+ const PROVIDER_RESPONSE_BYTES = 5 * 1024 * 1024;
23
+
24
+ export type IntegrationEndpointTestInput = {
25
+ kind: "webhook" | "credential-provider";
26
+ url: string;
27
+ secret: string;
28
+ /** The exact body to sign and send. */
29
+ body: string;
30
+ /** Extra identity headers (the webhook event id). */
31
+ headers?: Record<string, string>;
32
+ timeoutMs: number;
33
+ settings: OutboundNetworkSettings;
34
+ fetch?: typeof pinnedFetch;
35
+ now?: () => number;
36
+ };
37
+
38
+ function causeCode(error: unknown): string | null {
39
+ let current: unknown = error;
40
+ for (let depth = 0; depth < 4 && current && typeof current === "object"; depth += 1) {
41
+ const code = (current as { code?: unknown }).code;
42
+ if (typeof code === "string") return code;
43
+ current = (current as { cause?: unknown }).cause;
44
+ }
45
+ return null;
46
+ }
47
+
48
+ /** What went wrong reaching the endpoint, in words an administrator can act on. */
49
+ export function integrationTestNetworkError(error: unknown): string {
50
+ if (error instanceof DestinationPolicyError) {
51
+ if (error.reason === "https_required") return "The URL must use https.";
52
+ if (error.reason === "dns_failed" || error.reason === "dns_empty") {
53
+ return "The hostname couldn't be resolved. Check the URL.";
54
+ }
55
+ if (error.reason === "private_or_special_use") {
56
+ return "The URL points to a private network address, which this server doesn't allow.";
57
+ }
58
+ return `${error.message}.`;
59
+ }
60
+ if (error instanceof Error && (error.name === "TimeoutError" || error.name === "AbortError")) {
61
+ return "The endpoint didn't answer in time.";
62
+ }
63
+ switch (causeCode(error)) {
64
+ case "ECONNREFUSED":
65
+ return "The connection was refused. Check that the service is running.";
66
+ case "ECONNRESET":
67
+ return "The connection was reset before the endpoint answered.";
68
+ case "ENOTFOUND":
69
+ case "EAI_AGAIN":
70
+ return "The hostname couldn't be resolved. Check the URL.";
71
+ case "CERT_HAS_EXPIRED":
72
+ case "DEPTH_ZERO_SELF_SIGNED_CERT":
73
+ case "SELF_SIGNED_CERT_IN_CHAIN":
74
+ case "UNABLE_TO_VERIFY_LEAF_SIGNATURE":
75
+ case "ERR_TLS_CERT_ALTNAME_INVALID":
76
+ return "The endpoint's TLS certificate isn't trusted.";
77
+ default:
78
+ return "The endpoint couldn't be reached.";
79
+ }
80
+ }
81
+
82
+ async function readUpTo(
83
+ response: Response,
84
+ maxBytes: number,
85
+ ): Promise<{ text: string; truncated: boolean }> {
86
+ const reader = response.body?.getReader();
87
+ if (!reader) return { text: "", truncated: false };
88
+ const chunks: Uint8Array[] = [];
89
+ let total = 0;
90
+ let truncated = false;
91
+ for (;;) {
92
+ const { done, value } = await reader.read();
93
+ if (done) break;
94
+ if (total + value.byteLength > maxBytes) {
95
+ chunks.push(value.subarray(0, maxBytes - total));
96
+ total = maxBytes;
97
+ truncated = true;
98
+ await reader.cancel().catch(() => undefined);
99
+ break;
100
+ }
101
+ chunks.push(value);
102
+ total += value.byteLength;
103
+ }
104
+ return { text: new TextDecoder().decode(Buffer.concat(chunks)), truncated };
105
+ }
106
+
107
+ function excerpt(text: string, truncated: boolean): string | null {
108
+ const trimmed = text.trim();
109
+ if (!trimmed) return null;
110
+ const bounded = new TextDecoder().decode(
111
+ new TextEncoder().encode(trimmed).subarray(0, RESPONSE_EXCERPT_BYTES),
112
+ );
113
+ return truncated || bounded.length < trimmed.length ? `${bounded}…` : bounded;
114
+ }
115
+
116
+ /** The names of what a run would receive. Values are dropped here. */
117
+ export function credentialProviderTestSummary(
118
+ response: CredentialProviderResponse,
119
+ ): NonNullable<IntegrationEndpointTestResult["credentials"]> {
120
+ const authNeeded = (response.status === "not_applicable" ? [] : (response.authNeeded ?? [])).map(
121
+ (entry) => ({
122
+ reason: entry.reason,
123
+ providerDomain: entry.providerDomain ?? null,
124
+ message: entry.message ?? null,
125
+ }),
126
+ );
127
+ if (response.status !== "ok") {
128
+ return {
129
+ status: response.status,
130
+ environment: [],
131
+ files: [],
132
+ git: [],
133
+ mcp: [],
134
+ expiresAt: null,
135
+ authNeeded,
136
+ };
137
+ }
138
+ return {
139
+ status: "ok",
140
+ environment: Object.keys(response.environment ?? {}).sort(),
141
+ files: (response.files ?? []).map((file) => file.path),
142
+ git: (response.git ?? []).map((entry) => entry.host.toLowerCase()),
143
+ mcp: (response.mcp ?? []).map((entry) => entry.url),
144
+ expiresAt: response.expiresAt ?? null,
145
+ authNeeded,
146
+ };
147
+ }
148
+
149
+ function statusAdvice(kind: IntegrationEndpointTestInput["kind"], status: number): string {
150
+ if (status >= 300 && status < 400) {
151
+ return `The endpoint answered HTTP ${status}. Redirects aren't followed: use the final URL.`;
152
+ }
153
+ if (status === 401 || status === 403) {
154
+ return `The endpoint refused the request (HTTP ${status}). Check that it verifies with this ${
155
+ kind === "webhook" ? "webhook's" : "provider's"
156
+ } signing secret.`;
157
+ }
158
+ if (status === 404 || status === 405) {
159
+ return `The endpoint answered HTTP ${status}. Check the URL and that it accepts POST.`;
160
+ }
161
+ return `The endpoint answered HTTP ${status}.`;
162
+ }
163
+
164
+ export async function sendIntegrationEndpointTest(
165
+ input: IntegrationEndpointTestInput,
166
+ ): Promise<IntegrationEndpointTestResult> {
167
+ const now = input.now ?? Date.now;
168
+ const started = now();
169
+ const elapsed = () => Math.max(0, Math.round(now() - started));
170
+ const base = { request: input.body, credentials: null };
171
+ let response: Response;
172
+ try {
173
+ response = await (input.fetch ?? pinnedFetch)(
174
+ input.url,
175
+ {
176
+ method: "POST",
177
+ headers: {
178
+ "content-type": "application/json",
179
+ "user-agent":
180
+ input.kind === "webhook" ? "OpenGeni-Webhooks/1" : "OpenGeni-CredentialProvider/1",
181
+ [OPENGENI_SIGNATURE_HEADER]: await signOpenGeniPayload(input.secret, input.body),
182
+ ...input.headers,
183
+ },
184
+ body: input.body,
185
+ signal: AbortSignal.timeout(input.timeoutMs),
186
+ },
187
+ input.settings,
188
+ {
189
+ label: input.kind === "webhook" ? "Webhook" : "Credential provider",
190
+ requireHttpsOutsideLocalTest: true,
191
+ },
192
+ );
193
+ } catch (error) {
194
+ return {
195
+ ...base,
196
+ ok: false,
197
+ status: null,
198
+ durationMs: elapsed(),
199
+ error: integrationTestNetworkError(error),
200
+ responseBody: null,
201
+ };
202
+ }
203
+ const status = response.status;
204
+ const success = status >= 200 && status < 300;
205
+ let read: { text: string; truncated: boolean };
206
+ try {
207
+ read = await readUpTo(
208
+ response,
209
+ success && input.kind === "credential-provider"
210
+ ? PROVIDER_RESPONSE_BYTES
211
+ : RESPONSE_EXCERPT_BYTES,
212
+ );
213
+ } catch (error) {
214
+ return {
215
+ ...base,
216
+ ok: false,
217
+ status,
218
+ durationMs: elapsed(),
219
+ error: integrationTestNetworkError(error),
220
+ responseBody: null,
221
+ };
222
+ }
223
+ const durationMs = elapsed();
224
+ if (!success) {
225
+ return {
226
+ ...base,
227
+ ok: false,
228
+ status,
229
+ durationMs,
230
+ error: statusAdvice(input.kind, status),
231
+ responseBody: excerpt(read.text, read.truncated),
232
+ };
233
+ }
234
+ if (input.kind === "webhook") {
235
+ return {
236
+ ...base,
237
+ ok: true,
238
+ status,
239
+ durationMs,
240
+ error: null,
241
+ responseBody: excerpt(read.text, read.truncated),
242
+ };
243
+ }
244
+ // A successful provider answer may carry credentials: never echo its bytes.
245
+ if (read.truncated) {
246
+ return {
247
+ ...base,
248
+ ok: false,
249
+ status,
250
+ durationMs,
251
+ error: "The answer is larger than 5 MB.",
252
+ responseBody: null,
253
+ };
254
+ }
255
+ let json: unknown;
256
+ try {
257
+ json = JSON.parse(read.text);
258
+ } catch {
259
+ return {
260
+ ...base,
261
+ ok: false,
262
+ status,
263
+ durationMs,
264
+ error:
265
+ 'The answer isn\'t JSON. Return a credential response such as {"status":"not_applicable"}.',
266
+ responseBody: null,
267
+ };
268
+ }
269
+ const parsed = CredentialProviderResponse.safeParse(json);
270
+ if (!parsed.success) {
271
+ const issue = parsed.error.issues[0];
272
+ const where = issue?.path.length ? ` at ${issue.path.join(".")}` : "";
273
+ return {
274
+ ...base,
275
+ ok: false,
276
+ status,
277
+ durationMs,
278
+ error: `The answer isn't a valid credential response${where}: ${issue?.message ?? "invalid"}.`,
279
+ responseBody: null,
280
+ };
281
+ }
282
+ return {
283
+ ...base,
284
+ ok: true,
285
+ status,
286
+ durationMs,
287
+ error: null,
288
+ responseBody: null,
289
+ credentials: credentialProviderTestSummary(parsed.data),
290
+ };
291
+ }
@@ -10,6 +10,7 @@ import {
10
10
  googleDiscoveryToOpenApi,
11
11
  integrationDefinitionById,
12
12
  parseOpenApiDocument,
13
+ MAX_CURATED_INTEGRATION_SPEC_BYTES,
13
14
  type IntegrationCredentialResolver,
14
15
  type IntegrationInvocationAuthority,
15
16
  type IntegrationTransport,
@@ -18,12 +19,12 @@ import {
18
19
  import {
19
20
  ApiIntegrationPreview,
20
21
  type ApiIntegrationAuthPreview,
21
- type IntegrationSource,
22
+ type InlineOpenApiDocumentSource,
23
+ type IntegrationSourceInput,
24
+ type IntegrationSourceProjection,
22
25
  } from "@opengeni/contracts";
23
26
  import type { StoredApiIntegrationRevision } from "@opengeni/db";
24
27
 
25
- const MAX_CURATED_DEFINITION_SOURCE_BYTES = 64 * 1024 * 1024;
26
-
27
28
  export type ApiIntegrationConnectionDescriptor = {
28
29
  id: string;
29
30
  kind: "oauth2" | "api_key" | "app_install" | "delegated";
@@ -41,7 +42,7 @@ export type ResolvedApiIntegrationPreview = {
41
42
  };
42
43
 
43
44
  export async function resolveApiIntegrationPreview(input: {
44
- source: IntegrationSource;
45
+ source: IntegrationSourceInput;
45
46
  connection: ApiIntegrationConnectionDescriptor | null;
46
47
  transport: IntegrationTransport;
47
48
  credentialResolver?: IntegrationCredentialResolver;
@@ -56,6 +57,9 @@ export async function resolveApiIntegrationPreview(input: {
56
57
  if (input.source.kind === "openapi") {
57
58
  return await resolveOpenApi(input, input.source.url, input.source.baseUrl);
58
59
  }
60
+ if (input.source.kind === "openapi_document") {
61
+ return resolveInlineOpenApiDocument(input, input.source);
62
+ }
59
63
  let openApiFailure: unknown;
60
64
  try {
61
65
  return await resolveOpenApi(input, input.source.url, input.source.baseUrl);
@@ -86,13 +90,18 @@ async function resolveDefinition(
86
90
  const bytes = await fetchIntegrationSourceDocument(
87
91
  input.transport,
88
92
  definition.source.url,
89
- MAX_CURATED_DEFINITION_SOURCE_BYTES,
93
+ MAX_CURATED_INTEGRATION_SPEC_BYTES,
90
94
  );
91
95
  let document: Record<string, unknown>;
92
96
  if (definition.source.kind === "google_discovery") {
93
97
  document = googleDiscoveryToOpenApi(JSON.parse(new TextDecoder().decode(bytes)));
94
98
  } else {
95
- document = filterOpenApiDocumentForDefinition(parseOpenApiDocument(bytes), definition);
99
+ document = filterOpenApiDocumentForDefinition(
100
+ parseOpenApiDocument(bytes, {
101
+ maxBytes: MAX_CURATED_INTEGRATION_SPEC_BYTES,
102
+ }),
103
+ definition,
104
+ );
96
105
  }
97
106
  const identity = integrationInstallationIdentity("openapi", definition.id, definition.source.url);
98
107
  const revision = compileOpenApiRevision(document, {
@@ -100,6 +109,9 @@ async function resolveDefinition(
100
109
  sourceUrl: definition.source.url,
101
110
  baseUrl: definition.baseUrl,
102
111
  provider: definition.provider.id,
112
+ ...(definition.source.kind === "openapi" && definition.source.schemaMode
113
+ ? { schemaMode: definition.source.schemaMode }
114
+ : {}),
103
115
  });
104
116
  const baseUrl = firstOpenApiServerUrl(revision);
105
117
  const providerDomain = definition.provider.domain;
@@ -109,7 +121,7 @@ async function resolveDefinition(
109
121
  scopes: [...definition.authentication.scopes],
110
122
  };
111
123
  return resolvedPreview({
112
- source: input.source,
124
+ source: storedSourceProjection(input.source),
113
125
  definitionId: definition.id,
114
126
  definitionProvenance: "curated",
115
127
  identity,
@@ -153,7 +165,7 @@ async function resolveOpenApi(
153
165
  const discovered = discoverOpenApiAuth(document);
154
166
  const auth = authPreview(discovered, providerDomain, input.connection);
155
167
  return resolvedPreview({
156
- source: input.source,
168
+ source: storedSourceProjection(input.source),
157
169
  definitionId: identity.sourceDerivedDefinitionId,
158
170
  definitionProvenance: "workspace",
159
171
  identity,
@@ -171,6 +183,75 @@ async function resolveOpenApi(
171
183
  });
172
184
  }
173
185
 
186
+ /** URL/definition sources echo exactly; inline documents never reach here. */
187
+ function storedSourceProjection(source: IntegrationSourceInput): IntegrationSourceProjection {
188
+ if (source.kind === "openapi_document") {
189
+ throw new Error("Inline OpenAPI documents are projected by their digest");
190
+ }
191
+ return source;
192
+ }
193
+
194
+ /**
195
+ * An inline document has no URL: identity comes from the caller's stable
196
+ * `sourceKey`, relative server URLs cannot resolve (absolute servers or
197
+ * `baseUrl` are required), and the preview echoes only the document digest.
198
+ * Execution uses the same pinned transport and network policy as any other
199
+ * custom Integration.
200
+ */
201
+ function resolveInlineOpenApiDocument(
202
+ input: Parameters<typeof resolveApiIntegrationPreview>[0],
203
+ source: InlineOpenApiDocumentSource,
204
+ ): ResolvedApiIntegrationPreview {
205
+ const document = parseOpenApiDocument(source.document);
206
+ const identity = integrationInstallationIdentity(
207
+ "openapi",
208
+ source.sourceKey,
209
+ `document:${source.sourceKey}`,
210
+ );
211
+ let revision: ReturnType<typeof compileOpenApiRevision>;
212
+ try {
213
+ revision = compileOpenApiRevision(document, {
214
+ definitionId: identity.sourceDerivedDefinitionId,
215
+ ...(source.baseUrl ? { baseUrl: source.baseUrl } : {}),
216
+ });
217
+ } catch (error) {
218
+ const code = (error as { code?: unknown }).code;
219
+ if (code === "openapi_server_invalid" || code === "openapi_server_missing") {
220
+ throw new Error(
221
+ "An inline OpenAPI document needs absolute servers[].url values or an explicit baseUrl",
222
+ { cause: error },
223
+ );
224
+ }
225
+ throw error;
226
+ }
227
+ const resolvedBaseUrl = firstOpenApiServerUrl(revision);
228
+ const providerDomain = new URL(resolvedBaseUrl).hostname.toLowerCase();
229
+ const discovered = discoverOpenApiAuth(document);
230
+ const auth = authPreview(discovered, providerDomain, input.connection);
231
+ return resolvedPreview({
232
+ source: {
233
+ kind: "openapi_document",
234
+ sourceKey: source.sourceKey,
235
+ documentSha256: createHash("sha256").update(source.document, "utf8").digest("hex"),
236
+ ...(source.baseUrl ? { baseUrl: source.baseUrl } : {}),
237
+ },
238
+ definitionId: identity.sourceDerivedDefinitionId,
239
+ definitionProvenance: "workspace",
240
+ identity,
241
+ revision,
242
+ provider: null,
243
+ providerDomain,
244
+ baseUrl: resolvedBaseUrl,
245
+ sourceUrl: null,
246
+ name: revision.title,
247
+ description: revision.description ?? null,
248
+ auth,
249
+ connection: input.connection,
250
+ requiredScopes: auth.kind === "oauth2" ? auth.scopes : [],
251
+ authScheme: discovered,
252
+ });
253
+ }
254
+
174
255
  async function resolveGraphql(
175
256
  input: Parameters<typeof resolveApiIntegrationPreview>[0],
176
257
  endpoint: string,
@@ -194,7 +275,7 @@ async function resolveGraphql(
194
275
  ? connectionAuthPreview(input.connection, providerDomain)
195
276
  : ({ kind: "none" } as const);
196
277
  return resolvedPreview({
197
- source: input.source,
278
+ source: storedSourceProjection(input.source),
198
279
  definitionId: identity.sourceDerivedDefinitionId,
199
280
  definitionProvenance: "workspace",
200
281
  identity,
@@ -213,7 +294,7 @@ async function resolveGraphql(
213
294
  }
214
295
 
215
296
  function resolvedPreview(input: {
216
- source: IntegrationSource;
297
+ source: IntegrationSourceProjection;
217
298
  definitionId: string;
218
299
  definitionProvenance: "curated" | "workspace";
219
300
  identity: ReturnType<typeof integrationInstallationIdentity>;
@@ -221,7 +302,7 @@ function resolvedPreview(input: {
221
302
  provider: string | null;
222
303
  providerDomain: string;
223
304
  baseUrl: string;
224
- sourceUrl: string;
305
+ sourceUrl: string | null;
225
306
  name: string;
226
307
  description: string | null;
227
308
  auth: ApiIntegrationAuthPreview;
@@ -229,6 +310,12 @@ function resolvedPreview(input: {
229
310
  requiredScopes: string[];
230
311
  authScheme: Record<string, unknown>;
231
312
  }): ResolvedApiIntegrationPreview {
313
+ // Include whitespace headroom for PostgreSQL jsonb::text when estimating size.
314
+ // The database constraint remains authoritative. Refuse during preview,
315
+ // before the execute-once installation claims an operation it cannot persist.
316
+ if (Buffer.byteLength(JSON.stringify(input.revision, null, 2), "utf8") > 4 * 1024 * 1024) {
317
+ throw new Error("Compiled integration exceeds the supported 4 MiB storage limit");
318
+ }
232
319
  const deprecated = input.revision.tools.filter((tool) => tool.deprecated).length;
233
320
  const warnings = [
234
321
  ...(deprecated > 0