@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,159 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import {
3
+ UndoGovernedLearningActivationHttpRequest,
4
+ WorkspaceLearningHistoryResponse,
5
+ WorkspaceLearningPolicyHistoryQuery,
6
+ } from "@opengeni/contracts";
7
+ import {
8
+ publishGovernedLearningEventToSlack,
9
+ requireAccessGrant,
10
+ requireWorkspaceSettingsGrant,
11
+ type ApiRouteDeps,
12
+ } from "@opengeni/core";
13
+ import {
14
+ GovernedLearningActivationAuthorityError,
15
+ GovernedLearningActivationConflictError,
16
+ GovernedLearningActivationInvalidOperationError,
17
+ GovernedLearningEvaluationAuthorityError,
18
+ listGovernedLearningActivationHistory,
19
+ listGovernedLearningDecisionReceipts,
20
+ listWorkspaceLearningPolicyHistory,
21
+ undoGovernedLearningActivation,
22
+ WorkspaceLearningPolicyAuthorityError,
23
+ WorkspaceLearningPolicyConflictError,
24
+ WorkspaceLearningPolicyInvalidOperationError,
25
+ WorkspaceLearningPolicyNotFoundError,
26
+ WorkspaceLearningPolicyOperationReuseError,
27
+ } from "@opengeni/db";
28
+ import type { Context, Hono } from "hono";
29
+ import { HTTPException } from "hono/http-exception";
30
+ import { z } from "zod";
31
+
32
+ async function parseBody<S extends z.ZodType>(context: Context, schema: S): Promise<z.infer<S>> {
33
+ const parsed = schema.safeParse(await context.req.json().catch(() => null));
34
+ if (!parsed.success) {
35
+ throw new HTTPException(422, { message: "Invalid workspace learning request" });
36
+ }
37
+ return parsed.data;
38
+ }
39
+
40
+ function learningError(error: unknown): never {
41
+ if (
42
+ error instanceof WorkspaceLearningPolicyAuthorityError ||
43
+ error instanceof GovernedLearningEvaluationAuthorityError ||
44
+ error instanceof GovernedLearningActivationAuthorityError
45
+ ) {
46
+ throw new HTTPException(403, { message: error.message });
47
+ }
48
+ if (error instanceof WorkspaceLearningPolicyNotFoundError) {
49
+ throw new HTTPException(404, { message: error.message });
50
+ }
51
+ if (
52
+ error instanceof WorkspaceLearningPolicyConflictError ||
53
+ error instanceof WorkspaceLearningPolicyOperationReuseError ||
54
+ error instanceof GovernedLearningActivationConflictError
55
+ ) {
56
+ throw new HTTPException(409, { message: error.message });
57
+ }
58
+ if (
59
+ error instanceof WorkspaceLearningPolicyInvalidOperationError ||
60
+ error instanceof GovernedLearningActivationInvalidOperationError
61
+ ) {
62
+ throw new HTTPException(422, { message: error.message });
63
+ }
64
+ throw error;
65
+ }
66
+
67
+ export function registerWorkspaceLearningRoutes(app: Hono, deps: ApiRouteDeps): void {
68
+ const base = "/v1/workspaces/:workspaceId/learning";
69
+
70
+ app.get(base, async (context) => {
71
+ const workspaceId = context.req.param("workspaceId");
72
+ const grant = await requireAccessGrant(context, deps, workspaceId, "workspace:read");
73
+ const query = WorkspaceLearningPolicyHistoryQuery.safeParse({
74
+ limit: context.req.query("limit"),
75
+ });
76
+ if (!query.success) {
77
+ throw new HTTPException(422, { message: "Invalid workspace learning history query" });
78
+ }
79
+ try {
80
+ const [policy, decisions, lifecycle] = await Promise.all([
81
+ listWorkspaceLearningPolicyHistory(deps.db, {
82
+ accountId: grant.accountId,
83
+ workspaceId,
84
+ limit: query.data.limit,
85
+ }),
86
+ listGovernedLearningDecisionReceipts(deps.db, {
87
+ workspaceId,
88
+ subjectId: grant.subjectId,
89
+ principalKind: grant.principalKind ?? "",
90
+ limit: query.data.limit,
91
+ }),
92
+ listGovernedLearningActivationHistory(deps.db, {
93
+ workspaceId,
94
+ subjectId: grant.subjectId,
95
+ principalKind: grant.principalKind ?? "",
96
+ limit: query.data.limit,
97
+ }),
98
+ ]);
99
+ return context.json(
100
+ WorkspaceLearningHistoryResponse.parse({
101
+ head: policy.head,
102
+ revisions: policy.revisions,
103
+ policyEvents: policy.events,
104
+ decisions: decisions.receipts,
105
+ activations: lifecycle.activations,
106
+ undos: lifecycle.undos,
107
+ truncated: policy.truncated || decisions.truncated || lifecycle.truncated,
108
+ effectiveBoundary: "next_accepted_attempt",
109
+ }),
110
+ );
111
+ } catch (error) {
112
+ learningError(error);
113
+ }
114
+ });
115
+
116
+ for (const path of ["/revisions", "/revisions/:revisionId/activate", "/rollback"]) {
117
+ app.post(`${base}${path}`, async (context) => {
118
+ await requireWorkspaceSettingsGrant(context, deps, context.req.param("workspaceId")!);
119
+ return context.json(
120
+ {
121
+ error: {
122
+ code: "learning_settings_replaced",
123
+ message: "Configure Knowledge, instructions and Skills in Agent learning settings.",
124
+ },
125
+ },
126
+ 410,
127
+ );
128
+ });
129
+ }
130
+
131
+ app.post(`${base}/activations/:activationReceiptId/undo`, async (context) => {
132
+ const workspaceId = context.req.param("workspaceId");
133
+ const activationReceiptId = z
134
+ .string()
135
+ .uuid()
136
+ .safeParse(context.req.param("activationReceiptId"));
137
+ if (!activationReceiptId.success) {
138
+ throw new HTTPException(422, { message: "Invalid activation receipt id" });
139
+ }
140
+ const grant = await requireWorkspaceSettingsGrant(context, deps, workspaceId);
141
+ const request = await parseBody(context, UndoGovernedLearningActivationHttpRequest);
142
+ try {
143
+ const undo = await undoGovernedLearningActivation(deps.db, {
144
+ caller: { workspaceId, subjectId: grant.subjectId },
145
+ request: {
146
+ operationId: request.operationId ?? randomUUID(),
147
+ activationReceiptId: activationReceiptId.data,
148
+ },
149
+ });
150
+ // Best-effort notification; the undo receipt is already durable.
151
+ await publishGovernedLearningEventToSlack(deps.db, { kind: "undone", receipt: undo }).catch(
152
+ () => undefined,
153
+ );
154
+ return context.json(undo);
155
+ } catch (error) {
156
+ learningError(error);
157
+ }
158
+ });
159
+ }
@@ -0,0 +1,148 @@
1
+ import { claudeProviderId } from "@opengeni/config";
2
+ import { requireSameOriginBrowserMutation } from "./codex";
3
+ import { createHash } from "node:crypto";
4
+ import {
5
+ CreateWorkspaceGatewayCustomModelRequest,
6
+ DeleteWorkspaceGatewayCustomModelRequest,
7
+ WorkspaceGatewayCustomModel,
8
+ WorkspaceGatewayCustomModelsResponse,
9
+ } from "@opengeni/contracts";
10
+ import {
11
+ requireAccessGrant,
12
+ requireWorkspaceSettingsGrant,
13
+ type ApiRouteDeps,
14
+ } from "@opengeni/core";
15
+ import {
16
+ createWorkspaceProviderCustomModel,
17
+ deleteWorkspaceProviderCustomModel,
18
+ listWorkspaceProviderCustomModels,
19
+ replayWorkspaceProviderCustomModelCreate,
20
+ nestedPostgresSqlState,
21
+ WorkspaceClaudeCustomModelLimitError,
22
+ type WorkspaceProviderCustomModel,
23
+ } from "@opengeni/db";
24
+ import type { Context, Hono } from "hono";
25
+ import { HTTPException } from "hono/http-exception";
26
+ import { z } from "zod";
27
+
28
+ const Kind = z.enum(["anthropic", "claude_subscription"]);
29
+ function requestHash(value: unknown): string {
30
+ return createHash("sha256").update(JSON.stringify(value)).digest("hex");
31
+ }
32
+ function modelJson(model: WorkspaceProviderCustomModel) {
33
+ return WorkspaceGatewayCustomModel.parse({
34
+ ...model,
35
+ createdAt: model.createdAt.toISOString(),
36
+ updatedAt: model.updatedAt.toISOString(),
37
+ });
38
+ }
39
+
40
+ /** Workspace-owned Claude models use the same immutable-generation protocol as gateway models. */
41
+ export function registerWorkspaceModelProviderRoutes(app: Hono, deps: ApiRouteDeps): void {
42
+ const path = "/v1/workspaces/:workspaceId/model-providers/:providerKind/custom-models";
43
+ async function scope(c: Context, mutate: boolean) {
44
+ const parsedKind = Kind.safeParse(c.req.param("providerKind"));
45
+ if (!parsedKind.success) throw new HTTPException(404, { message: "Model provider not found" });
46
+ const providerKind = parsedKind.data;
47
+ if (providerKind === "claude_subscription" && !deps.settings.claudeSubscriptionEnabled)
48
+ throw new HTTPException(404, { message: "Claude subscriptions are not enabled" });
49
+ const workspaceId = c.req.param("workspaceId")!;
50
+ const grant = mutate
51
+ ? await requireWorkspaceSettingsGrant(c, deps, workspaceId)
52
+ : await requireAccessGrant(c, deps, workspaceId, "workspace:read");
53
+ c.header("cache-control", "private, no-store");
54
+ return { accountId: grant.accountId, workspaceId, providerKind, subjectId: grant.subjectId };
55
+ }
56
+ app.get(path, async (c) => {
57
+ const input = await scope(c, false);
58
+ const models = await listWorkspaceProviderCustomModels(deps.db, input);
59
+ return c.json(WorkspaceGatewayCustomModelsResponse.parse({ models: models.map(modelJson) }));
60
+ });
61
+ const usagePath = "/v1/workspaces/:workspaceId/model-providers/:providerKind/usage";
62
+ app.get(usagePath, async (c) => {
63
+ const input = await scope(c, false);
64
+ if (input.providerKind !== "claude_subscription")
65
+ throw new HTTPException(404, { message: "Usage not available for this provider" });
66
+ throw new HTTPException(410, { message: "Check usage on the individual Claude account." });
67
+ });
68
+ app.post(`${usagePath}/refresh`, async (c) => {
69
+ requireSameOriginBrowserMutation(c, deps);
70
+ const input = await scope(c, false);
71
+ if (input.providerKind !== "claude_subscription")
72
+ throw new HTTPException(404, { message: "Usage not available for this provider" });
73
+ await requireAccessGrant(c, deps, input.workspaceId, "connections:write");
74
+ throw new HTTPException(410, { message: "Check usage on the individual Claude account." });
75
+ });
76
+ app.post(path, async (c) => {
77
+ const input = await scope(c, true);
78
+ const parsed = CreateWorkspaceGatewayCustomModelRequest.safeParse(
79
+ await c.req.json().catch(() => null),
80
+ );
81
+ if (!parsed.success) throw new HTTPException(422, { message: "Invalid custom model" });
82
+ const payload = parsed.data;
83
+ if (
84
+ `${claudeProviderId(input.providerKind, "workspace")}/${payload.upstreamModelId}`.length > 256
85
+ )
86
+ throw new HTTPException(422, { message: "Claude model ID is too long" });
87
+ const hash = requestHash({
88
+ action: "create",
89
+ upstreamModelId: payload.upstreamModelId,
90
+ label: payload.label ?? null,
91
+ });
92
+ const replay = await replayWorkspaceProviderCustomModelCreate(deps.db, {
93
+ ...input,
94
+ operationId: payload.operationId,
95
+ requestHash: hash,
96
+ });
97
+ if (replay.outcome === "conflict")
98
+ throw new HTTPException(409, {
99
+ message: "Custom model operation conflicts with current state",
100
+ });
101
+ if (replay.outcome === "success") return c.json(modelJson(replay.model), 201);
102
+ try {
103
+ const model = await createWorkspaceProviderCustomModel(deps.db, {
104
+ ...input,
105
+ ...payload,
106
+ label: payload.label ?? null,
107
+ requestHash: hash,
108
+ createdBySubjectId: input.subjectId,
109
+ });
110
+ if (!model || model.retiredAt)
111
+ throw new HTTPException(409, {
112
+ message: "Custom model operation conflicts with current state",
113
+ });
114
+ return c.json(modelJson(model), 201);
115
+ } catch (error) {
116
+ if (error instanceof WorkspaceClaudeCustomModelLimitError)
117
+ throw new HTTPException(422, { message: error.message });
118
+ if (nestedPostgresSqlState(error) === "23505")
119
+ throw new HTTPException(422, { message: "Custom model already exists" });
120
+ throw error;
121
+ }
122
+ });
123
+ app.delete(`${path}/:customModelId`, async (c) => {
124
+ const input = await scope(c, true);
125
+ const id = z.string().uuid().safeParse(c.req.param("customModelId"));
126
+ const parsed = DeleteWorkspaceGatewayCustomModelRequest.safeParse(
127
+ await c.req.json().catch(() => null),
128
+ );
129
+ if (!id.success || !parsed.success)
130
+ throw new HTTPException(422, { message: "Invalid custom model deletion" });
131
+ const customModelId = id.data;
132
+ const removed = await deleteWorkspaceProviderCustomModel(deps.db, {
133
+ ...input,
134
+ ...parsed.data,
135
+ customModelId,
136
+ requestHash: requestHash({
137
+ action: "delete",
138
+ customModelId,
139
+ expectedVersion: parsed.data.expectedVersion,
140
+ }),
141
+ });
142
+ if (removed.outcome === "not_found")
143
+ throw new HTTPException(404, { message: "Custom model not found" });
144
+ if (removed.outcome === "conflict")
145
+ throw new HTTPException(409, { message: "Custom model changed; reload and retry" });
146
+ return c.body(null, 204);
147
+ });
148
+ }
@@ -1,32 +1,37 @@
1
+ import { withAccessGrantSessionRlsContext } from "../access-grant-rls";
1
2
  import {
2
- WORKSPACE_STATE_MAX_BASES,
3
- WORKSPACE_STATE_MAX_TOPICS,
4
- WORKSPACE_STATE_TOPIC_MAX_CHARS,
3
+ WORKSPACE_STATE_KNOWLEDGE_SAMPLE_LIMIT,
5
4
  WorkspaceStateQuery,
6
5
  WorkspaceStateResponse,
7
- type AccessGrant,
8
6
  type WorkspaceStateQuery as WorkspaceStateQueryType,
9
7
  } from "@opengeni/contracts";
10
- import { hasPermission, requireAccessGrant, type ApiRouteDeps } from "@opengeni/core";
8
+ import {
9
+ hasPermission,
10
+ requireAccessGrantAuthorization,
11
+ knowledgeContextForAccess,
12
+ type AccessGrantAuthorization,
13
+ type ApiRouteDeps,
14
+ } from "@opengeni/core";
11
15
  import {
12
16
  getWorkspace,
13
17
  getCurrentPreferenceRegistryGovernanceMetadata,
14
18
  getWorkspaceStateAcceptedAttemptGovernance,
15
- listWorkspaceStateMemoryRecords,
19
+ listKnowledgeEntries,
16
20
  listWorkspaceInstructionPolicyRevisions,
17
21
  } from "@opengeni/db";
18
- import { getDocumentInventory } from "@opengeni/documents";
19
22
  import type { Hono } from "hono";
20
23
  import { HTTPException } from "hono/http-exception";
21
24
 
22
25
  import { serializeWorkspaceStateExport } from "../workspace-state-export";
23
26
  import { projectWorkspaceState } from "../workspace-state-projection";
27
+ import { USER_CONTENT_SECURITY_HEADERS } from "../http/user-content";
24
28
 
25
29
  async function readWorkspaceState(
26
30
  deps: ApiRouteDeps,
27
- input: { workspaceId: string; query: WorkspaceStateQueryType; grant: AccessGrant },
31
+ input: { workspaceId: string; query: WorkspaceStateQueryType; access: AccessGrantAuthorization },
28
32
  ) {
29
- const { workspaceId, query, grant } = input;
33
+ const { workspaceId, query, access } = input;
34
+ const { grant } = access;
30
35
  const generatedAt = new Date().toISOString();
31
36
  const canInspectKnowledge = hasPermission(grant.permissions, "documents:search");
32
37
 
@@ -34,18 +39,13 @@ async function readWorkspaceState(
34
39
  getWorkspace(deps.db, workspaceId),
35
40
  listWorkspaceInstructionPolicyRevisions(deps.db, workspaceId, { limit: 1 }),
36
41
  canInspectKnowledge
37
- ? (async () => {
38
- const [documents, memories] = await Promise.all([
39
- getDocumentInventory(deps.db, workspaceId, {
40
- baseLimit: WORKSPACE_STATE_MAX_BASES,
41
- topicLimit: WORKSPACE_STATE_MAX_TOPICS,
42
- topicMaxChars: WORKSPACE_STATE_TOPIC_MAX_CHARS,
43
- access: { viewerSubjectId: grant.subjectId },
44
- }),
45
- listWorkspaceStateMemoryRecords(deps.db, workspaceId),
46
- ]);
47
- return { documents, memories };
48
- })()
42
+ ? withAccessGrantSessionRlsContext(deps, grant, async () =>
43
+ listKnowledgeEntries(
44
+ deps.db,
45
+ await knowledgeContextForAccess(deps, access, "documents:search"),
46
+ { limit: WORKSPACE_STATE_KNOWLEDGE_SAMPLE_LIMIT, view: "published" },
47
+ ),
48
+ )
49
49
  : Promise.resolve(null),
50
50
  getCurrentPreferenceRegistryGovernanceMetadata(deps.db, {
51
51
  workspaceId,
@@ -109,8 +109,13 @@ export function registerWorkspaceStateRoutes(app: Hono, deps: ApiRouteDeps): voi
109
109
  app.get(base, async (context) => {
110
110
  const workspaceId = context.req.param("workspaceId");
111
111
  const query = WorkspaceStateQuery.parse(context.req.query());
112
- const grant = await requireAccessGrant(context, deps, workspaceId, "workspace:read");
113
- const state = await readWorkspaceState(deps, { workspaceId, query, grant });
112
+ const access = await requireAccessGrantAuthorization(
113
+ context,
114
+ deps,
115
+ workspaceId,
116
+ "workspace:read",
117
+ );
118
+ const state = await readWorkspaceState(deps, { workspaceId, query, access });
114
119
  context.header("cache-control", "private, no-store");
115
120
  return context.json(state);
116
121
  });
@@ -118,14 +123,22 @@ export function registerWorkspaceStateRoutes(app: Hono, deps: ApiRouteDeps): voi
118
123
  app.get(`${base}/export`, async (context) => {
119
124
  const workspaceId = context.req.param("workspaceId");
120
125
  const query = WorkspaceStateQuery.parse(context.req.query());
121
- const grant = await requireAccessGrant(context, deps, workspaceId, "workspace:read");
122
- const state = await readWorkspaceState(deps, { workspaceId, query, grant });
126
+ const access = await requireAccessGrantAuthorization(
127
+ context,
128
+ deps,
129
+ workspaceId,
130
+ "workspace:read",
131
+ );
132
+ const state = await readWorkspaceState(deps, { workspaceId, query, access });
123
133
  context.header("cache-control", "private, no-store");
124
134
  context.header("content-type", "application/json; charset=utf-8");
125
135
  context.header(
126
136
  "content-disposition",
127
137
  `attachment; filename="workspace-state-${workspaceId}-sanitized.json"`,
128
138
  );
139
+ for (const [name, value] of Object.entries(USER_CONTENT_SECURITY_HEADERS)) {
140
+ context.header(name, value);
141
+ }
129
142
  return context.body(serializeWorkspaceStateExport(state));
130
143
  });
131
144
  }