@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,488 @@
1
+ import { retryWhileMissing } from "@opengeni/storage";
2
+ import { allowedFirstPartyMcpToolsForSession } from "@opengeni/config";
3
+ import {
4
+ type FirstPartyMcpToolName,
5
+ AgentLearningContext,
6
+ AgentLearningOverridePatch,
7
+ KnowledgeEntryListRequest,
8
+ KnowledgeSavePreparationRequest,
9
+ KnowledgeReviewBatchListRequest,
10
+ KnowledgeEntryBatchReviewRequest,
11
+ AgentInstructionReviewRequest,
12
+ KnowledgeEntryReviewRequest,
13
+ KnowledgeEntryRestoreRequest,
14
+ KnowledgeEntrySaveRequest,
15
+ KnowledgeOriginalFileDownload,
16
+ } from "@opengeni/contracts";
17
+ import {
18
+ prepareKnowledgeFile,
19
+ prepareKnowledgeSave,
20
+ searchKnowledgeEntries,
21
+ KnowledgeVectorFundingError,
22
+ KnowledgeVectorQueryRejectedError,
23
+ hasPermission,
24
+ knowledgeContextForAccess,
25
+ requireAccessGrantAuthorization,
26
+ requireSessionAuthorization,
27
+ requireWorkspaceSettingsGrant,
28
+ type ApiRouteDeps,
29
+ } from "@opengeni/core";
30
+ import {
31
+ getKnowledgeOriginalFile,
32
+ recordAuditEvent,
33
+ archiveKnowledgeEntry,
34
+ getAgentLearningSettings,
35
+ getKnowledgeEntry,
36
+ listAgentLearningOverrides,
37
+ listKnowledgeEntryHistory,
38
+ listKnowledgeReviewBatches,
39
+ nestedPostgresSqlState,
40
+ restoreKnowledgeEntry,
41
+ reviewKnowledgeEntry,
42
+ saveAgentLearningSettings,
43
+ saveKnowledgeEntry,
44
+ reviewKnowledgeEntries,
45
+ reviewAgentInstruction,
46
+ listAgentInstructionReviews,
47
+ KnowledgeEntryIdRequiredError,
48
+ KnowledgeEntryIdTakenError,
49
+ } from "@opengeni/db";
50
+ import type { Context, Hono } from "hono";
51
+ import { HTTPException } from "hono/http-exception";
52
+ import { z } from "zod";
53
+ import { withAccessGrantSessionRlsContext } from "../access-grant-rls";
54
+ import { ApiHttpError } from "../http/api-error";
55
+ import { userContentSignedGetUrlOptions } from "../http/user-content";
56
+ import { parseRequestJson } from "../http/request-body";
57
+
58
+ const ReadSettings = z
59
+ .object({
60
+ scope: z.enum(["workspace", "personal", "context"]).default("workspace"),
61
+ source: AgentLearningContext.optional(),
62
+ })
63
+ .strict();
64
+ const WriteSettings = ReadSettings.extend({
65
+ scope: z.enum(["workspace", "personal"]).default("workspace"),
66
+ operationId: z.uuid(),
67
+ expectedVersion: z.number().int().nonnegative(),
68
+ settings: AgentLearningOverridePatch,
69
+ });
70
+ const Id = z.uuid();
71
+ function knowledgeHttpError(error: unknown): never {
72
+ if (error instanceof HTTPException) throw error;
73
+ if (error instanceof KnowledgeVectorFundingError)
74
+ throw new ApiHttpError(402, {
75
+ code: "payment_required",
76
+ message: error.message,
77
+ details: { code: error.code, keywordAvailable: true },
78
+ });
79
+ if (error instanceof KnowledgeVectorQueryRejectedError)
80
+ throw new ApiHttpError(error.code === "quota" ? 429 : 422, {
81
+ code: error.code === "quota" ? "limit_exceeded" : "validation_failed",
82
+ message: error.message,
83
+ details: { code: error.code, keywordAvailable: true },
84
+ });
85
+ if (error instanceof KnowledgeEntryIdTakenError)
86
+ throw new ApiHttpError(409, {
87
+ code: "conflict",
88
+ message: error.message,
89
+ details: { code: error.code },
90
+ });
91
+ if (error instanceof KnowledgeEntryIdRequiredError)
92
+ throw new ApiHttpError(422, {
93
+ code: "validation_failed",
94
+ message: error.message,
95
+ details: { code: error.code },
96
+ });
97
+ if (error instanceof z.ZodError)
98
+ throw new HTTPException(422, {
99
+ message: error.issues[0]?.message ?? "Invalid Knowledge request",
100
+ });
101
+ const state = nestedPostgresSqlState(error);
102
+ if (state === "40001" || state === "23505")
103
+ throw new HTTPException(409, { message: "This item changed. Refresh it and try again." });
104
+ if (state === "42501")
105
+ throw new HTTPException(403, {
106
+ message: "This Knowledge operation is not available with your access or learning settings.",
107
+ });
108
+ if (state === "22023" || state === "23514")
109
+ throw new HTTPException(422, { message: "Invalid Knowledge operation or reference." });
110
+ throw error;
111
+ }
112
+
113
+ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
114
+ const base = "/v1/workspaces/:workspaceId/knowledge/entries";
115
+ async function run<T>(
116
+ c: Context,
117
+ write: boolean,
118
+ fn: (context: Awaited<ReturnType<typeof knowledgeContextForAccess>>) => Promise<T>,
119
+ readPermission: "documents:search" | "workspace:read" = "documents:search",
120
+ ) {
121
+ try {
122
+ const access = await requireAccessGrantAuthorization(
123
+ c,
124
+ deps,
125
+ c.req.param("workspaceId")!,
126
+ write
127
+ ? "documents:manage"
128
+ : readPermission === "workspace:read"
129
+ ? undefined
130
+ : readPermission,
131
+ );
132
+ // Preserve existing document-reader access to the settings read while
133
+ // admitting workspace readers to that one endpoint as well.
134
+ const permission = write
135
+ ? "documents:manage"
136
+ : readPermission === "workspace:read" &&
137
+ hasPermission(access.grant.permissions, "documents:search")
138
+ ? "documents:search"
139
+ : readPermission;
140
+ return await withAccessGrantSessionRlsContext(deps, access.grant, async () => {
141
+ const context = await knowledgeContextForAccess(deps, access, permission);
142
+ c.header("cache-control", "private, no-store");
143
+ return fn(context);
144
+ });
145
+ } catch (error) {
146
+ knowledgeHttpError(error);
147
+ }
148
+ }
149
+ app.post("/v1/workspaces/:workspaceId/knowledge/files/:fileId/prepare", (c) =>
150
+ run(c, false, async (context) => {
151
+ const access = await requireAccessGrantAuthorization(
152
+ c,
153
+ deps,
154
+ context.workspaceId,
155
+ "files:read",
156
+ );
157
+ const selected = access.grant.metadata?.firstPartyMcpTools as
158
+ | FirstPartyMcpToolName[]
159
+ | undefined;
160
+ if (
161
+ context.actor.kind !== "agent" ||
162
+ !selected ||
163
+ !allowedFirstPartyMcpToolsForSession(deps.settings, selected).includes(
164
+ "knowledge_retain_file",
165
+ )
166
+ )
167
+ throw new HTTPException(403, {
168
+ message: "Source preparation is unavailable for this task",
169
+ });
170
+ const body = await c.req.text();
171
+ let input: unknown = {};
172
+ try {
173
+ input = body ? JSON.parse(body) : {};
174
+ } catch {
175
+ throw new HTTPException(400, { message: "Invalid source preparation JSON" });
176
+ }
177
+ const { purpose } = z
178
+ .object({ purpose: z.enum(["evidence", "reference"]).default("evidence") })
179
+ .strict()
180
+ .parse(input);
181
+ return c.json(
182
+ await prepareKnowledgeFile(deps, context, Id.parse(c.req.param("fileId")), purpose),
183
+ );
184
+ }),
185
+ );
186
+ app.post(`${base}/:entryId/file/download-url`, (c) =>
187
+ run(c, false, async (context) => {
188
+ const access = await requireAccessGrantAuthorization(
189
+ c,
190
+ deps,
191
+ context.workspaceId,
192
+ "files:read",
193
+ );
194
+ const { revisionId } = await parseRequestJson(
195
+ c,
196
+ z.object({ revisionId: z.uuid().optional() }).strict(),
197
+ );
198
+ const entryId = Id.parse(c.req.param("entryId"));
199
+ const file = await getKnowledgeOriginalFile(deps.db, context, entryId, revisionId);
200
+ if (!file) throw new HTTPException(404, { message: "Original file unavailable" });
201
+ if (!deps.objectStorage)
202
+ throw new HTTPException(503, { message: "File storage is unavailable" });
203
+ if (
204
+ !(await retryWhileMissing(async () =>
205
+ (await deps.objectStorage!.fileExists(file)) ? true : null,
206
+ ))
207
+ )
208
+ throw new HTTPException(410, { message: "Original file bytes are unavailable" });
209
+ const signed = await deps.objectStorage.createGetUrl({
210
+ key: file.objectKey,
211
+ ...userContentSignedGetUrlOptions(file.contentType, file.filename),
212
+ });
213
+ await recordAuditEvent(deps.db, {
214
+ accountId: context.accountId,
215
+ workspaceId: context.workspaceId,
216
+ subjectId: access.grant.subjectId,
217
+ action: "file.signed_url.issued",
218
+ targetType: "knowledge_entry",
219
+ targetId: entryId,
220
+ metadata: { fileId: file.id, kind: "download", expiresAt: signed.expiresAt.toISOString() },
221
+ });
222
+ return c.json(
223
+ KnowledgeOriginalFileDownload.parse({
224
+ url: signed.url,
225
+ expiresAt: signed.expiresAt.toISOString(),
226
+ fileId: file.id,
227
+ filename: file.filename,
228
+ contentType: file.contentType,
229
+ sizeBytes: file.sizeBytes,
230
+ }),
231
+ );
232
+ }),
233
+ );
234
+ app.post(`${base}/prepare-save`, (c) =>
235
+ run(c, false, async (context) => {
236
+ if (context.actor.kind === "agent") {
237
+ const access = await requireAccessGrantAuthorization(
238
+ c,
239
+ deps,
240
+ context.workspaceId,
241
+ "documents:search",
242
+ );
243
+ const selected = access.grant.metadata?.firstPartyMcpTools as
244
+ | FirstPartyMcpToolName[]
245
+ | undefined;
246
+ if (
247
+ !selected ||
248
+ !allowedFirstPartyMcpToolsForSession(deps.settings, selected).includes(
249
+ "knowledge_prepare_save",
250
+ )
251
+ )
252
+ throw new HTTPException(403, {
253
+ message: "Knowledge preparation is unavailable for this task",
254
+ });
255
+ }
256
+ return c.json(
257
+ await prepareKnowledgeSave(
258
+ deps.db,
259
+ context,
260
+ await parseRequestJson(c, KnowledgeSavePreparationRequest),
261
+ () => deps.getDocumentServices().embedder,
262
+ undefined,
263
+ deps.settings,
264
+ ),
265
+ );
266
+ }),
267
+ );
268
+ app.post(`${base}/search`, (c) =>
269
+ run(c, false, async (context) =>
270
+ c.json(
271
+ await searchKnowledgeEntries(
272
+ deps.db,
273
+ context,
274
+ await parseRequestJson(c, KnowledgeEntryListRequest),
275
+ () => deps.getDocumentServices().embedder,
276
+ deps.settings,
277
+ ),
278
+ ),
279
+ ),
280
+ );
281
+ app.get("/v1/workspaces/:workspaceId/knowledge/review-groups", (c) =>
282
+ run(c, true, async (context) => {
283
+ const query = c.req.query();
284
+ return c.json(
285
+ await listKnowledgeReviewBatches(
286
+ deps.db,
287
+ context,
288
+ KnowledgeReviewBatchListRequest.parse({
289
+ ...query,
290
+ ...(query.limit ? { limit: Number(query.limit) } : {}),
291
+ }),
292
+ ),
293
+ );
294
+ }),
295
+ );
296
+ app.post(`${base}/review`, (c) =>
297
+ run(c, true, async (context) =>
298
+ c.json(
299
+ await reviewKnowledgeEntries(
300
+ deps.db,
301
+ context,
302
+ await parseRequestJson(c, KnowledgeEntryBatchReviewRequest),
303
+ ),
304
+ ),
305
+ ),
306
+ );
307
+ app.get(base, (c) =>
308
+ run(c, false, async (context) => {
309
+ const query = c.req.query();
310
+ return c.json(
311
+ await searchKnowledgeEntries(
312
+ deps.db,
313
+ context,
314
+ KnowledgeEntryListRequest.parse({
315
+ ...query,
316
+ ...(query.limit ? { limit: Number(query.limit) } : {}),
317
+ }),
318
+ () => deps.getDocumentServices().embedder,
319
+ deps.settings,
320
+ ),
321
+ );
322
+ }),
323
+ );
324
+ app.post(base, (c) =>
325
+ run(c, true, async (context) => {
326
+ const result = await saveKnowledgeEntry(
327
+ deps.db,
328
+ context,
329
+ await parseRequestJson(c, KnowledgeEntrySaveRequest),
330
+ );
331
+ return c.json(result, result.replayed ? 200 : 201);
332
+ }),
333
+ );
334
+ app.get(`${base}/:entryId/history`, (c) =>
335
+ run(c, false, async (context) =>
336
+ c.json(
337
+ await listKnowledgeEntryHistory(
338
+ deps.db,
339
+ context,
340
+ Id.parse(c.req.param("entryId")),
341
+ c.req.query("beforeRevision")
342
+ ? z.coerce.number().int().positive().parse(c.req.query("beforeRevision"))
343
+ : undefined,
344
+ ),
345
+ ),
346
+ ),
347
+ );
348
+ app.get(`${base}/:entryId`, (c) =>
349
+ run(c, false, async (context) => {
350
+ const options = z
351
+ .object({
352
+ revisionId: Id.optional(),
353
+ view: z.enum(["published", "needs_review", "archived", "rejected"]).optional(),
354
+ })
355
+ .strict()
356
+ .parse(c.req.query());
357
+ const entry = await getKnowledgeEntry(
358
+ deps.db,
359
+ context,
360
+ Id.parse(c.req.param("entryId")),
361
+ options,
362
+ );
363
+ if (!entry) throw new HTTPException(404, { message: "Knowledge entry not found" });
364
+ return c.json(entry);
365
+ }),
366
+ );
367
+ app.post(`${base}/:entryId/review`, (c) =>
368
+ run(c, true, async (context) => {
369
+ const request = KnowledgeEntryReviewRequest.parse({
370
+ ...(await c.req.json()),
371
+ entryId: c.req.param("entryId"),
372
+ });
373
+ return c.json(await reviewKnowledgeEntry(deps.db, context, request));
374
+ }),
375
+ );
376
+ app.post(`${base}/:entryId/restore`, (c) =>
377
+ run(c, true, async (context) => {
378
+ const request = KnowledgeEntryRestoreRequest.parse({
379
+ ...(await c.req.json()),
380
+ entryId: c.req.param("entryId"),
381
+ });
382
+ return c.json(await restoreKnowledgeEntry(deps.db, context, request));
383
+ }),
384
+ );
385
+ app.post(`${base}/:entryId/archive`, (c) =>
386
+ run(c, true, async (context) => {
387
+ const request = await parseRequestJson(
388
+ c,
389
+ z.object({ operationId: Id, expectedVersion: z.number().int().positive() }).strict(),
390
+ );
391
+ return c.json(
392
+ await archiveKnowledgeEntry(deps.db, context, {
393
+ ...request,
394
+ entryId: Id.parse(c.req.param("entryId")),
395
+ }),
396
+ );
397
+ }),
398
+ );
399
+
400
+ const learning = "/v1/workspaces/:workspaceId/agent-learning";
401
+ async function instructionReviewContext(
402
+ c: Context,
403
+ context: Awaited<ReturnType<typeof knowledgeContextForAccess>>,
404
+ ) {
405
+ if (context.actor.kind !== "human")
406
+ throw new HTTPException(403, {
407
+ message: "Instruction review requires an authenticated person",
408
+ });
409
+ await requireWorkspaceSettingsGrant(c, deps, context.workspaceId);
410
+ context.actor.settingsScopes = ["workspace"];
411
+ return context;
412
+ }
413
+ app.get(`${learning}/instructions/reviews`, (c) =>
414
+ run(c, false, async (context) =>
415
+ c.json(
416
+ await listAgentInstructionReviews(
417
+ deps.db,
418
+ await instructionReviewContext(c, context),
419
+ c.req.query("cursor"),
420
+ ),
421
+ ),
422
+ ),
423
+ );
424
+ app.post(`${learning}/instructions/review`, (c) =>
425
+ run(c, false, async (context) =>
426
+ c.json(
427
+ await reviewAgentInstruction(
428
+ deps.db,
429
+ await instructionReviewContext(c, context),
430
+ await parseRequestJson(c, AgentInstructionReviewRequest),
431
+ ),
432
+ ),
433
+ ),
434
+ );
435
+ app.post(`${learning}/read`, (c) =>
436
+ // Members can inspect the settings relevant to their admitted workspace or
437
+ // owner context without gaining Knowledge search or settings-write access.
438
+ // The database still requires a human and checks each source's owner layer.
439
+ run(
440
+ c,
441
+ false,
442
+ async (context) => {
443
+ const request = await parseRequestJson(c, ReadSettings);
444
+ return c.json(
445
+ await getAgentLearningSettings(deps.db, context, request.scope, request.source),
446
+ );
447
+ },
448
+ "workspace:read",
449
+ ),
450
+ );
451
+ app.get(`${learning}/overrides`, (c) =>
452
+ run(c, false, async (context) => {
453
+ const scope = z
454
+ .enum(["workspace", "personal"])
455
+ .default("workspace")
456
+ .parse(c.req.query("scope"));
457
+ return c.json(await listAgentLearningOverrides(deps.db, context, scope));
458
+ }),
459
+ );
460
+ app.post(learning, (c) =>
461
+ run(c, false, async (context) => {
462
+ const request = await parseRequestJson(c, WriteSettings);
463
+ if (context.actor.kind !== "human")
464
+ throw new HTTPException(403, { message: "Agents cannot change learning settings" });
465
+ const access = await requireAccessGrantAuthorization(c, deps, context.workspaceId);
466
+ if (request.source?.kind === "chat") {
467
+ if (!hasPermission(access.grant.permissions, "sessions:control"))
468
+ throw new HTTPException(403, { message: "Chat settings require session control" });
469
+ await requireSessionAuthorization(deps, access.grant, {
470
+ sessionId: request.source.id,
471
+ operation: "session.context.write",
472
+ surface: "http",
473
+ });
474
+ context.actor.settingsScopes = [request.scope];
475
+ } else if (request.source?.kind === "scheduled_task") {
476
+ if (!hasPermission(access.grant.permissions, "scheduled_tasks:manage"))
477
+ throw new HTTPException(403, {
478
+ message: "Scheduled task settings require task management",
479
+ });
480
+ context.actor.settingsScopes = [request.scope];
481
+ } else if (request.scope === "workspace") {
482
+ await requireWorkspaceSettingsGrant(c, deps, context.workspaceId);
483
+ context.actor.settingsScopes = ["workspace"];
484
+ }
485
+ return c.json(await saveAgentLearningSettings(deps.db, context, request));
486
+ }),
487
+ );
488
+ }