@opengeni/api-router 3.0.1 → 3.1.2

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 (546) hide show
  1. package/dist/access-grant-rls.d.ts +8 -1
  2. package/dist/admission-trace.d.ts +8 -0
  3. package/dist/app.d.ts +50 -3
  4. package/dist/app.js +10 -1
  5. package/dist/artifact-catalog-cursor.d.ts +1 -0
  6. package/dist/attached-browser-viewer.d.ts +11 -0
  7. package/dist/auth/managed-auth-attempt-context.d.ts +2 -0
  8. package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
  9. package/dist/auth/managed-auth-session-adapter.d.ts +9 -1
  10. package/dist/auth/managed-auth.d.ts +72 -5
  11. package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
  12. package/dist/auth/new-signups-gate.d.ts +23 -0
  13. package/dist/auth/signup-funnel-metrics.d.ts +44 -0
  14. package/dist/azure-live.d.ts +28 -0
  15. package/dist/browser-action-fences.d.ts +13 -0
  16. package/dist/browser-controller-authority.d.ts +1 -61
  17. package/dist/browser-ephemeral.d.ts +5 -0
  18. package/dist/browser-lost-runtime-end.d.ts +24 -0
  19. package/dist/browser-state-authority.d.ts +1 -27
  20. package/dist/chunk-OGQDXVXY.js +18 -0
  21. package/dist/chunk-OGQDXVXY.js.map +1 -0
  22. package/dist/{chunk-AJ62T5QN.js → chunk-OT56OY4V.js} +80503 -39869
  23. package/dist/chunk-OT56OY4V.js.map +1 -0
  24. package/dist/claude-default-models.d.ts +19 -0
  25. package/dist/claude-subscription-core.d.ts +50 -0
  26. package/dist/claude-subscription-oauth.d.ts +36 -0
  27. package/dist/claude-subscription-profile.d.ts +9 -0
  28. package/dist/claude-subscription-usage.d.ts +6 -0
  29. package/dist/claude-workspace-connection.d.ts +15 -0
  30. package/dist/codemode.d.ts +40 -5
  31. package/dist/codex-realtime.d.ts +29 -3
  32. package/dist/codex-session-pointers.d.ts +19 -0
  33. package/dist/connection-ownership.d.ts +6 -3
  34. package/dist/controller-data-plane.d.ts +16 -0
  35. package/dist/credit-promotion-snapshot.d.ts +6 -0
  36. package/dist/editable-artifact-source-session.d.ts +3 -0
  37. package/dist/editable-artifact-websocket.d.ts +5 -3
  38. package/dist/fatal-process-boundary.d.ts +9 -1
  39. package/dist/github-access.d.ts +7 -1
  40. package/dist/github-browser-flow.d.ts +1 -1
  41. package/dist/http/acting-person.d.ts +36 -0
  42. package/dist/http/api-contract-compat.d.ts +19 -0
  43. package/dist/http/api-error.d.ts +50 -1
  44. package/dist/http/auth.d.ts +8 -1
  45. package/dist/http/cors.d.ts +12 -0
  46. package/dist/http/deprecation.d.ts +42 -0
  47. package/dist/http/keyed-admission.d.ts +12 -0
  48. package/dist/http/local-browser-boundary.d.ts +72 -0
  49. package/dist/http/metrics-listener.d.ts +22 -0
  50. package/dist/http/path-identifier.d.ts +17 -0
  51. package/dist/http/registered-route-label.d.ts +16 -0
  52. package/dist/http/rejection-telemetry.d.ts +34 -0
  53. package/dist/http/request-body.d.ts +27 -0
  54. package/dist/http/request-source.d.ts +41 -3
  55. package/dist/http/sse.d.ts +12 -1
  56. package/dist/http/unmatched-route.d.ts +18 -0
  57. package/dist/http/user-content.d.ts +36 -0
  58. package/dist/http/variable-sets-removed.d.ts +41 -0
  59. package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
  60. package/dist/index.js +1279 -108
  61. package/dist/index.js.map +1 -1
  62. package/dist/integration-connect-metrics.d.ts +35 -0
  63. package/dist/integration-endpoint-test.d.ts +20 -0
  64. package/dist/integrations/api-integrations.d.ts +2 -2
  65. package/dist/integrations/atlassian.d.ts +8 -3
  66. package/dist/integrations/fiken.d.ts +3 -1
  67. package/dist/integrations/github-lens-connect.d.ts +37 -66
  68. package/dist/integrations/google-drive.d.ts +2 -0
  69. package/dist/integrations/integration-commit-authority.d.ts +13 -0
  70. package/dist/integrations/marketplace-plugin.d.ts +43 -43
  71. package/dist/integrations/oauth-client.d.ts +171 -12
  72. package/dist/integrations/oauth-profiles.d.ts +42 -13
  73. package/dist/integrations/onepassword-vault-provider.d.ts +9 -0
  74. package/dist/integrations/slack-bot.d.ts +285 -7
  75. package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
  76. package/dist/integrations/slack-interactions.d.ts +89 -10
  77. package/dist/integrations/slack-mrkdwn.d.ts +41 -0
  78. package/dist/integrations/slack-routing.d.ts +1 -1
  79. package/dist/integrations/slack-session-defaults.d.ts +58 -0
  80. package/dist/integrations/slack-task-file-upload.d.ts +36 -0
  81. package/dist/integrations/slack-tool-review.d.ts +5 -0
  82. package/dist/interaction-agent-access.d.ts +13 -8
  83. package/dist/interaction-agent-version.d.ts +21 -0
  84. package/dist/interaction-holder-heartbeat.d.ts +5 -0
  85. package/dist/interaction-metrics.d.ts +27 -2
  86. package/dist/interaction-route-stages.d.ts +25 -0
  87. package/dist/interaction-secrets-vault.d.ts +20 -0
  88. package/dist/interaction-secrets.d.ts +103 -0
  89. package/dist/mcp/action-catalog-types.d.ts +14 -0
  90. package/dist/mcp/action-catalog.gen.d.ts +2 -0
  91. package/dist/mcp/action-descriptions.d.ts +4 -0
  92. package/dist/mcp/action-schema-imports.gen.d.ts +1 -0
  93. package/dist/mcp/capability-account-readiness.d.ts +7 -0
  94. package/dist/mcp/child-read-evidence.d.ts +9 -0
  95. package/dist/mcp/company-profile-agent-admin.d.ts +12 -0
  96. package/dist/mcp/contract-input.d.ts +13 -0
  97. package/dist/mcp/documents.d.ts +2 -0
  98. package/dist/mcp/first-party-tool-permissions.d.ts +3 -606
  99. package/dist/mcp/notification-tools.d.ts +26 -0
  100. package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
  101. package/dist/mcp/scheduled-task-input.d.ts +1309 -0
  102. package/dist/mcp/scheduled-task-view.d.ts +217 -3
  103. package/dist/mcp/secret-tools.d.ts +14 -0
  104. package/dist/mcp/server.d.ts +108 -5
  105. package/dist/mcp/session-admin-access-tools.d.ts +33 -0
  106. package/dist/mcp/session-event-errors.d.ts +28 -0
  107. package/dist/mcp/session-event-view.d.ts +62 -0
  108. package/dist/mcp/session-view.d.ts +15 -0
  109. package/dist/mcp/session-wait.d.ts +18 -0
  110. package/dist/mcp/site-agent-clamp-tools.d.ts +38 -0
  111. package/dist/mcp/site-data-tools.d.ts +22 -0
  112. package/dist/mcp/site-publication-tools.d.ts +19 -0
  113. package/dist/mcp/site-sql-tools.d.ts +27 -0
  114. package/dist/mcp-oauth.d.ts +37 -4
  115. package/dist/model-calls/chat-completions.d.ts +87 -0
  116. package/dist/model-calls/pending-usage-settlements.d.ts +57 -0
  117. package/dist/model-calls/service.d.ts +36 -0
  118. package/dist/model-catalog.d.ts +9 -3
  119. package/dist/native-push-dispatch.d.ts +69 -0
  120. package/dist/observability.d.ts +3 -1
  121. package/dist/organization-mcp.d.ts +82 -0
  122. package/dist/prepared-mcp-actor.d.ts +77 -0
  123. package/dist/prepared-mcp-permissions.d.ts +8 -0
  124. package/dist/routes/analytics-consent.d.ts +26 -0
  125. package/dist/routes/api-integrations.d.ts +11 -0
  126. package/dist/routes/api-keys.d.ts +7 -7
  127. package/dist/routes/automations.d.ts +2 -0
  128. package/dist/routes/billing.d.ts +59 -0
  129. package/dist/routes/browser-sessions.d.ts +65 -2
  130. package/dist/routes/chat-completions.d.ts +11 -0
  131. package/dist/routes/claude-core-usage.d.ts +20 -0
  132. package/dist/routes/claude-subscription-accounts.d.ts +3 -0
  133. package/dist/routes/claude-subscription-oauth.d.ts +3 -0
  134. package/dist/routes/client-errors.d.ts +182 -0
  135. package/dist/routes/codex-core.d.ts +401 -0
  136. package/dist/routes/codex.d.ts +64 -2
  137. package/dist/routes/computer-sessions.d.ts +6 -1
  138. package/dist/routes/desktop-distribution.d.ts +32 -0
  139. package/dist/routes/github-browser-fonts.gen.d.ts +2 -0
  140. package/dist/routes/github-browser-pages.d.ts +27 -0
  141. package/dist/routes/inbox.d.ts +13 -0
  142. package/dist/routes/insights-response-cache.d.ts +10 -0
  143. package/dist/routes/insights-usage.d.ts +12 -0
  144. package/dist/routes/insights.d.ts +28 -0
  145. package/dist/routes/interaction-placement-message.d.ts +7 -0
  146. package/dist/routes/managed-sign-in-methods.d.ts +6 -0
  147. package/dist/routes/model-account-choice.d.ts +13 -0
  148. package/dist/routes/model-account-settings.d.ts +19 -0
  149. package/dist/routes/native-app-auth.d.ts +12 -0
  150. package/dist/routes/organization-integration-policy.d.ts +8 -0
  151. package/dist/routes/organization-integrations.d.ts +6 -0
  152. package/dist/routes/organization-mcp-connections.d.ts +3 -0
  153. package/dist/routes/organization-model-defaults.d.ts +9 -0
  154. package/dist/routes/organization-service-accounts.d.ts +3 -0
  155. package/dist/routes/personal-api-keys.d.ts +3 -0
  156. package/dist/routes/session-admin-access.d.ts +3 -0
  157. package/dist/routes/session-artifact-associations.d.ts +4 -0
  158. package/dist/routes/session-history-imports.d.ts +20 -0
  159. package/dist/routes/sessions.d.ts +38 -2
  160. package/dist/routes/site-data.d.ts +18 -0
  161. package/dist/routes/site-publishing.d.ts +5 -0
  162. package/dist/routes/site-runtime.d.ts +31 -0
  163. package/dist/routes/site-sql.d.ts +16 -0
  164. package/dist/routes/slack-bot-access.d.ts +3 -0
  165. package/dist/routes/subscription-account-pools.d.ts +21 -0
  166. package/dist/routes/subscription-core-http.d.ts +5 -0
  167. package/dist/routes/subscription-pool-access.d.ts +37 -0
  168. package/dist/routes/subscription-pool-core.d.ts +153 -0
  169. package/dist/routes/supergrok.d.ts +6 -6
  170. package/dist/routes/usage-allowances.d.ts +12 -0
  171. package/dist/routes/variable-sets-removed.d.ts +2 -0
  172. package/dist/routes/vault-providers.d.ts +34 -0
  173. package/dist/routes/vaults.d.ts +3 -0
  174. package/dist/routes/workspace-integrations.d.ts +35 -0
  175. package/dist/routes/workspace-model-providers.d.ts +4 -0
  176. package/dist/routes/workspaces.d.ts +11 -2
  177. package/dist/sandbox/agent-update.d.ts +64 -0
  178. package/dist/sandbox/auth-callout.d.ts +8 -0
  179. package/dist/sandbox/channel-a.d.ts +15 -1
  180. package/dist/sandbox/enrollment.d.ts +26 -4
  181. package/dist/sandbox/machine-audience.d.ts +29 -0
  182. package/dist/sandbox/machines.d.ts +15 -2
  183. package/dist/sandbox/metrics-ingestion.d.ts +6 -2
  184. package/dist/sandbox/screen-control.d.ts +85 -0
  185. package/dist/sandbox/viewer.d.ts +5 -1
  186. package/dist/sandbox-file-artifacts.d.ts +17 -1
  187. package/dist/scheduled-task-blockers.d.ts +39 -0
  188. package/dist/scheduled-task-deletion.d.ts +3 -4
  189. package/dist/scheduled-task-lifecycle.d.ts +14 -0
  190. package/dist/secret-answers.d.ts +40 -0
  191. package/dist/session-create-observability.d.ts +5 -0
  192. package/dist/session-event-view-36GO3IL7.js +528 -0
  193. package/dist/session-event-view-36GO3IL7.js.map +1 -0
  194. package/dist/signed-state-secret.d.ts +18 -0
  195. package/dist/site-agent-guard.d.ts +53 -0
  196. package/dist/site-data/operations.d.ts +103 -0
  197. package/dist/site-data/service.d.ts +203 -0
  198. package/dist/site-frame-guard.d.ts +32 -0
  199. package/dist/site-publishing/agent-data-tools.d.ts +84 -0
  200. package/dist/site-publishing/agent-model.d.ts +58 -0
  201. package/dist/site-publishing/agent-session.d.ts +16 -0
  202. package/dist/site-publishing/content-scanner.d.ts +31 -0
  203. package/dist/site-publishing/edge-sync.d.ts +48 -0
  204. package/dist/site-publishing/gateway-signature.d.ts +56 -0
  205. package/dist/site-publishing/limits.d.ts +63 -0
  206. package/dist/site-publishing/page-tool-authority.d.ts +30 -0
  207. package/dist/site-publishing/platform-usage.d.ts +113 -0
  208. package/dist/site-publishing/platform.d.ts +21 -0
  209. package/dist/site-publishing/readiness.d.ts +62 -0
  210. package/dist/site-publishing/runtime.d.ts +179 -0
  211. package/dist/site-publishing/service.d.ts +264 -0
  212. package/dist/site-publishing/session-events.d.ts +22 -0
  213. package/dist/site-publishing/session-views.d.ts +36 -0
  214. package/dist/site-publishing/viewer.d.ts +40 -0
  215. package/dist/site-session-origin.d.ts +31 -6
  216. package/dist/site-sql/format.d.ts +47 -0
  217. package/dist/site-sql/gateway.d.ts +50 -0
  218. package/dist/site-sql/service.d.ts +213 -0
  219. package/dist/temporal-schedule-sync.d.ts +26 -0
  220. package/dist/transcription/billing-refusal.d.ts +8 -0
  221. package/dist/transcription/normalize.d.ts +23 -0
  222. package/dist/transcription/providers/azure-mai.d.ts +12 -0
  223. package/dist/transcription/providers/azure-openai.d.ts +4 -0
  224. package/dist/transcription/providers/openai.d.ts +16 -0
  225. package/dist/transcription/providers/subscription-core.d.ts +39 -0
  226. package/dist/transcription/service.d.ts +10 -1
  227. package/dist/transcription/wav-duration.d.ts +8 -0
  228. package/dist/workspace-tool-gateway-attestations.d.ts +37 -0
  229. package/dist/workspace-tool-gateway-observability.d.ts +16 -0
  230. package/dist/workspace-tool-gateway-secrets.d.ts +27 -0
  231. package/dist/workspace-tool-gateway.d.ts +102 -6
  232. package/dist/workspace-tool-target-fence.d.ts +116 -0
  233. package/dist/workspace-tool-target.d.ts +225 -0
  234. package/dist/workspace-webhook-dispatch.d.ts +26 -0
  235. package/dist/xai-subscription-core.d.ts +60 -0
  236. package/package.json +25 -20
  237. package/src/access-grant-rls.ts +64 -14
  238. package/src/admission-trace.ts +14 -0
  239. package/src/app.ts +1684 -252
  240. package/src/artifact-catalog-cursor.ts +1 -0
  241. package/src/attached-browser-viewer.ts +26 -0
  242. package/src/auth/managed-auth-attempt-context.ts +9 -0
  243. package/src/auth/managed-auth-rate-limits.ts +252 -0
  244. package/src/auth/managed-auth-session-adapter.ts +64 -29
  245. package/src/auth/managed-auth.ts +303 -35
  246. package/src/auth/managed-email.ts +18 -1
  247. package/src/auth/managed-sign-in-notifications.ts +81 -0
  248. package/src/auth/new-signups-gate.ts +49 -0
  249. package/src/auth/organization-user-setup.ts +3 -3
  250. package/src/auth/signup-funnel-metrics.ts +164 -0
  251. package/src/azure-live.ts +103 -0
  252. package/src/browser-action-fences.ts +45 -0
  253. package/src/browser-controller-authority.ts +1 -186
  254. package/src/browser-ephemeral.ts +39 -0
  255. package/src/browser-lost-runtime-end.ts +71 -0
  256. package/src/browser-state-authority.ts +1 -236
  257. package/src/claude-default-models.ts +37 -0
  258. package/src/claude-subscription-core.ts +154 -0
  259. package/src/claude-subscription-oauth.ts +352 -0
  260. package/src/claude-subscription-profile.ts +73 -0
  261. package/src/claude-subscription-usage.ts +51 -0
  262. package/src/claude-workspace-connection.ts +82 -0
  263. package/src/codemode.ts +236 -39
  264. package/src/codex-realtime.ts +181 -53
  265. package/src/codex-session-pointers.ts +80 -0
  266. package/src/company-brain-okf.ts +1 -1
  267. package/src/connected-machine-computer-access.ts +2 -1
  268. package/src/connection-ownership.ts +19 -13
  269. package/src/controller-data-plane.ts +34 -0
  270. package/src/credit-promotion-snapshot.ts +36 -0
  271. package/src/editable-artifact-production.ts +10 -0
  272. package/src/editable-artifact-source-session.ts +123 -0
  273. package/src/editable-artifact-websocket.ts +16 -3
  274. package/src/fatal-process-boundary.ts +67 -3
  275. package/src/gateway-realtime.ts +12 -8
  276. package/src/github-access.ts +31 -5
  277. package/src/github-browser-flow.ts +1 -1
  278. package/src/http/acting-person.ts +105 -0
  279. package/src/http/api-contract-compat.ts +49 -0
  280. package/src/http/api-error.ts +210 -2
  281. package/src/http/auth.ts +68 -4
  282. package/src/http/cors.ts +37 -5
  283. package/src/http/deprecation.ts +118 -0
  284. package/src/http/keyed-admission.ts +29 -0
  285. package/src/http/local-browser-boundary.ts +343 -0
  286. package/src/http/metrics-listener.ts +57 -0
  287. package/src/http/path-identifier.ts +54 -0
  288. package/src/http/registered-route-label.ts +34 -0
  289. package/src/http/rejection-telemetry.ts +120 -0
  290. package/src/http/request-body.ts +127 -0
  291. package/src/http/request-source.ts +154 -13
  292. package/src/http/sse.ts +88 -28
  293. package/src/http/unmatched-route.ts +60 -0
  294. package/src/http/user-content.ts +158 -0
  295. package/src/http/variable-sets-removed.ts +122 -0
  296. package/src/http/websocket-upgrade-dispatch.ts +29 -0
  297. package/src/index.ts +107 -57
  298. package/src/integration-connect-metrics.ts +228 -0
  299. package/src/integration-endpoint-test.ts +291 -0
  300. package/src/integrations/api-integrations.ts +81 -7
  301. package/src/integrations/atlassian.ts +202 -83
  302. package/src/integrations/fiken.ts +66 -38
  303. package/src/integrations/github-app-connect.ts +64 -18
  304. package/src/integrations/github-lens-connect.ts +8 -29
  305. package/src/integrations/google-drive.ts +448 -152
  306. package/src/integrations/integration-commit-authority.ts +69 -0
  307. package/src/integrations/marketplace-plugin.ts +1 -1
  308. package/src/integrations/oauth-client.ts +733 -193
  309. package/src/integrations/oauth-profiles.ts +116 -45
  310. package/src/integrations/onepassword-vault-provider.ts +16 -0
  311. package/src/integrations/personal-github-repositories.ts +1 -1
  312. package/src/integrations/personal-github.ts +61 -35
  313. package/src/integrations/provider-oauth.ts +67 -85
  314. package/src/integrations/slack-app-home.ts +5 -5
  315. package/src/integrations/slack-bot.ts +893 -201
  316. package/src/integrations/slack-file-upload-flow.ts +147 -0
  317. package/src/integrations/slack-install.ts +7 -7
  318. package/src/integrations/slack-interactions.ts +1589 -299
  319. package/src/integrations/slack-mrkdwn.ts +193 -0
  320. package/src/integrations/slack-routing.ts +2 -2
  321. package/src/integrations/slack-session-defaults.ts +224 -0
  322. package/src/integrations/slack-task-file-upload.ts +323 -0
  323. package/src/integrations/slack-tool-review.ts +65 -0
  324. package/src/integrations/social-oauth.ts +90 -58
  325. package/src/interaction-agent-access.ts +40 -20
  326. package/src/interaction-agent-version.ts +85 -0
  327. package/src/interaction-holder-heartbeat.ts +24 -8
  328. package/src/interaction-metrics.ts +164 -2
  329. package/src/interaction-route-stages.ts +94 -0
  330. package/src/interaction-secrets-vault.ts +213 -0
  331. package/src/interaction-secrets.ts +426 -0
  332. package/src/mcp/action-catalog-types.ts +14 -0
  333. package/src/mcp/action-catalog.gen.ts +8014 -0
  334. package/src/mcp/action-descriptions.ts +299 -0
  335. package/src/mcp/action-schema-imports.gen.ts +304 -0
  336. package/src/mcp/capability-account-readiness.ts +17 -0
  337. package/src/mcp/child-read-evidence.ts +19 -0
  338. package/src/mcp/company-profile-agent-admin.ts +13 -0
  339. package/src/mcp/contract-input.ts +165 -0
  340. package/src/mcp/documents.ts +9 -2
  341. package/src/mcp/editable-artifacts.ts +29 -11
  342. package/src/mcp/files.ts +5 -1
  343. package/src/mcp/first-party-tool-permissions.ts +7 -285
  344. package/src/mcp/knowledge-entries.ts +108 -34
  345. package/src/mcp/notification-tools.ts +480 -0
  346. package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
  347. package/src/mcp/scheduled-task-input.ts +89 -0
  348. package/src/mcp/scheduled-task-view.ts +63 -3
  349. package/src/mcp/secret-tools.ts +185 -0
  350. package/src/mcp/server.ts +2213 -1116
  351. package/src/mcp/session-admin-access-tools.ts +163 -0
  352. package/src/mcp/session-event-errors.ts +123 -0
  353. package/src/mcp/session-event-view.ts +395 -13
  354. package/src/mcp/session-view.ts +3 -0
  355. package/src/mcp/session-wait.ts +67 -7
  356. package/src/mcp/site-agent-clamp-tools.ts +140 -0
  357. package/src/mcp/site-data-tools.ts +339 -0
  358. package/src/mcp/site-publication-tools.ts +201 -0
  359. package/src/mcp/site-sql-tools.ts +427 -0
  360. package/src/mcp-oauth.ts +635 -45
  361. package/src/model-calls/chat-completions.ts +352 -0
  362. package/src/model-calls/pending-usage-settlements.ts +125 -0
  363. package/src/model-calls/service.ts +694 -0
  364. package/src/model-catalog.ts +68 -17
  365. package/src/native-push-dispatch.ts +457 -0
  366. package/src/observability.ts +15 -1
  367. package/src/organization-mcp.ts +485 -0
  368. package/src/prepared-mcp-actor.ts +154 -0
  369. package/src/prepared-mcp-permissions.ts +38 -0
  370. package/src/routes/analytics-consent.ts +123 -0
  371. package/src/routes/api-integrations.ts +268 -9
  372. package/src/routes/api-keys.ts +164 -25
  373. package/src/routes/artifact-catalog.ts +111 -0
  374. package/src/routes/automations.ts +163 -90
  375. package/src/routes/billing.ts +535 -59
  376. package/src/routes/browser-sessions.ts +966 -342
  377. package/src/routes/canonical-human-identities.ts +61 -0
  378. package/src/routes/capabilities.ts +112 -5
  379. package/src/routes/channels.ts +4 -3
  380. package/src/routes/chat-completions.ts +235 -0
  381. package/src/routes/claude-core-usage.ts +147 -0
  382. package/src/routes/claude-subscription-accounts.ts +233 -0
  383. package/src/routes/claude-subscription-oauth.ts +175 -0
  384. package/src/routes/client-errors.ts +394 -0
  385. package/src/routes/codex-core.ts +687 -0
  386. package/src/routes/codex.ts +1277 -1119
  387. package/src/routes/company-brain.ts +4 -0
  388. package/src/routes/computer-sessions.ts +319 -85
  389. package/src/routes/connect.ts +277 -175
  390. package/src/routes/connections.ts +690 -363
  391. package/src/routes/desktop-distribution.ts +217 -0
  392. package/src/routes/documents.ts +13 -7
  393. package/src/routes/editable-artifacts.ts +74 -4
  394. package/src/routes/enrollments.ts +110 -16
  395. package/src/routes/external-identity-links.ts +13 -12
  396. package/src/routes/files.ts +41 -16
  397. package/src/routes/github-browser-fonts.gen.ts +12 -0
  398. package/src/routes/github-browser-pages.ts +258 -0
  399. package/src/routes/github.ts +200 -75
  400. package/src/routes/inbox.ts +353 -0
  401. package/src/routes/insights-response-cache.ts +83 -0
  402. package/src/routes/insights-usage.ts +345 -0
  403. package/src/routes/insights.ts +103 -8
  404. package/src/routes/install.ts +51 -10
  405. package/src/routes/integration-facets.ts +70 -28
  406. package/src/routes/interaction-placement-message.ts +12 -0
  407. package/src/routes/knowledge.ts +136 -27
  408. package/src/routes/machines.ts +189 -135
  409. package/src/routes/managed-auth-session-sets.ts +43 -10
  410. package/src/routes/managed-onboarding.ts +39 -19
  411. package/src/routes/managed-sign-in-methods.ts +433 -0
  412. package/src/routes/memory-slack-publications.ts +3 -2
  413. package/src/routes/model-account-choice.ts +194 -0
  414. package/src/routes/model-account-settings.ts +235 -0
  415. package/src/routes/model-connection-access.ts +210 -48
  416. package/src/routes/native-app-auth.ts +296 -0
  417. package/src/routes/organization-integration-policy.ts +116 -0
  418. package/src/routes/organization-integrations.ts +326 -0
  419. package/src/routes/organization-mcp-connections.ts +183 -0
  420. package/src/routes/organization-memberships.ts +205 -19
  421. package/src/routes/organization-model-defaults.ts +110 -0
  422. package/src/routes/organization-model-providers.ts +74 -3
  423. package/src/routes/organization-service-accounts.ts +128 -0
  424. package/src/routes/organization-sessions.ts +21 -5
  425. package/src/routes/personal-api-keys.ts +184 -0
  426. package/src/routes/personal-github-git-broker.ts +2 -2
  427. package/src/routes/personal-github.ts +9 -4
  428. package/src/routes/plugins.ts +46 -7
  429. package/src/routes/pr-review-github.ts +105 -118
  430. package/src/routes/pr-review.ts +88 -82
  431. package/src/routes/preference-registry.ts +18 -0
  432. package/src/routes/rigs.ts +48 -13
  433. package/src/routes/scheduled-tasks.ts +347 -27
  434. package/src/routes/session-admin-access.ts +271 -0
  435. package/src/routes/session-artifact-associations.ts +164 -0
  436. package/src/routes/session-history-imports.ts +305 -0
  437. package/src/routes/sessions.ts +1682 -363
  438. package/src/routes/site-data.ts +340 -0
  439. package/src/routes/site-publishing.ts +584 -0
  440. package/src/routes/site-runtime.ts +1944 -0
  441. package/src/routes/site-sql.ts +263 -0
  442. package/src/routes/skill-content.ts +72 -7
  443. package/src/routes/skills.ts +5 -4
  444. package/src/routes/slack-bot-access.ts +108 -0
  445. package/src/routes/social.ts +27 -15
  446. package/src/routes/subscription-account-pools.ts +209 -0
  447. package/src/routes/subscription-core-http.ts +18 -0
  448. package/src/routes/subscription-pool-access.ts +180 -0
  449. package/src/routes/subscription-pool-core.ts +552 -0
  450. package/src/routes/supergrok.ts +174 -655
  451. package/src/routes/transcription-recordings.ts +71 -4
  452. package/src/routes/transcriptions.ts +26 -2
  453. package/src/routes/usage-allowances.ts +381 -0
  454. package/src/routes/variable-sets-removed.ts +19 -0
  455. package/src/routes/vault-providers.ts +782 -0
  456. package/src/routes/vaults.ts +421 -0
  457. package/src/routes/video-generation.ts +30 -12
  458. package/src/routes/workspace-artifacts.ts +165 -53
  459. package/src/routes/workspace-integrations.ts +576 -0
  460. package/src/routes/workspace-model-providers.ts +148 -0
  461. package/src/routes/workspace-state.ts +4 -0
  462. package/src/routes/workspaces.ts +625 -117
  463. package/src/sandbox/agent-update.ts +315 -0
  464. package/src/sandbox/auth-callout.ts +104 -21
  465. package/src/sandbox/channel-a.ts +165 -55
  466. package/src/sandbox/enrollment.ts +131 -22
  467. package/src/sandbox/machine-audience.ts +192 -0
  468. package/src/sandbox/machines.ts +75 -31
  469. package/src/sandbox/metrics-ingestion.ts +133 -2
  470. package/src/sandbox/rematerialize.ts +51 -21
  471. package/src/sandbox/screen-control.ts +289 -0
  472. package/src/sandbox/viewer.ts +33 -58
  473. package/src/sandbox-file-artifacts.ts +53 -27
  474. package/src/scheduled-task-blockers.ts +293 -0
  475. package/src/scheduled-task-deletion.ts +13 -3
  476. package/src/scheduled-task-lifecycle.ts +84 -0
  477. package/src/secret-answers.ts +119 -0
  478. package/src/session-create-observability.ts +46 -0
  479. package/src/session-realtime-context.ts +26 -4
  480. package/src/signed-state-secret.ts +58 -0
  481. package/src/site-agent-guard.ts +261 -0
  482. package/src/site-data/operations.ts +777 -0
  483. package/src/site-data/service.ts +1043 -0
  484. package/src/site-frame-guard.ts +107 -0
  485. package/src/site-publishing/agent-data-tools.ts +250 -0
  486. package/src/site-publishing/agent-model.ts +127 -0
  487. package/src/site-publishing/agent-session.ts +148 -0
  488. package/src/site-publishing/content-scanner.ts +93 -0
  489. package/src/site-publishing/edge-sync.ts +148 -0
  490. package/src/site-publishing/gateway-signature.ts +198 -0
  491. package/src/site-publishing/limits.ts +315 -0
  492. package/src/site-publishing/page-tool-authority.ts +111 -0
  493. package/src/site-publishing/platform-usage.ts +479 -0
  494. package/src/site-publishing/platform.ts +98 -0
  495. package/src/site-publishing/readiness.ts +330 -0
  496. package/src/site-publishing/runtime.ts +831 -0
  497. package/src/site-publishing/service.ts +1282 -0
  498. package/src/site-publishing/session-events.ts +262 -0
  499. package/src/site-publishing/session-views.ts +262 -0
  500. package/src/site-publishing/viewer.ts +75 -0
  501. package/src/site-session-origin.ts +91 -6
  502. package/src/site-sql/format.ts +134 -0
  503. package/src/site-sql/gateway.ts +168 -0
  504. package/src/site-sql/service.ts +1636 -0
  505. package/src/site-uploads.ts +27 -5
  506. package/src/temporal-schedule-sync.ts +74 -0
  507. package/src/transcription/billing-refusal.ts +14 -0
  508. package/src/transcription/normalize.ts +77 -0
  509. package/src/transcription/providers/azure-mai.ts +98 -0
  510. package/src/transcription/providers/azure-openai.ts +16 -7
  511. package/src/transcription/providers/codex-subscription.ts +190 -67
  512. package/src/transcription/providers/openai.ts +79 -5
  513. package/src/transcription/providers/subscription-core.ts +125 -0
  514. package/src/transcription/providers/xai-subscription.ts +81 -83
  515. package/src/transcription/segmenter.ts +7 -1
  516. package/src/transcription/service.ts +239 -10
  517. package/src/transcription/wav-duration.ts +39 -0
  518. package/src/workspace-deletion.ts +25 -1
  519. package/src/workspace-tool-gateway-attestations.ts +133 -0
  520. package/src/workspace-tool-gateway-observability.ts +64 -0
  521. package/src/workspace-tool-gateway-secrets.ts +104 -0
  522. package/src/workspace-tool-gateway.ts +921 -103
  523. package/src/workspace-tool-target-fence.ts +380 -0
  524. package/src/workspace-tool-target.ts +554 -0
  525. package/src/workspace-webhook-dispatch.ts +225 -0
  526. package/src/xai-realtime.ts +85 -81
  527. package/src/xai-subscription-core.ts +172 -0
  528. package/dist/browser-auth-broker.d.ts +0 -20
  529. package/dist/chunk-AJ62T5QN.js.map +0 -1
  530. package/dist/connection-authority-owner.d.ts +0 -59
  531. package/dist/routes/connection-authorities.d.ts +0 -3
  532. package/dist/routes/environments.d.ts +0 -5
  533. package/dist/routes/host-mcp-bindings.d.ts +0 -5
  534. package/dist/routes/host-mcp-resolvers.d.ts +0 -3
  535. package/dist/routes/packs.d.ts +0 -3
  536. package/dist/session-event-view-MU3HMNV3.js +0 -264
  537. package/dist/session-event-view-MU3HMNV3.js.map +0 -1
  538. package/dist/xai-subscription-auth.d.ts +0 -23
  539. package/src/browser-auth-broker.ts +0 -155
  540. package/src/connection-authority-owner.ts +0 -61
  541. package/src/routes/connection-authorities.ts +0 -139
  542. package/src/routes/environments.ts +0 -388
  543. package/src/routes/host-mcp-bindings.ts +0 -122
  544. package/src/routes/host-mcp-resolvers.ts +0 -41
  545. package/src/routes/packs.ts +0 -784
  546. package/src/xai-subscription-auth.ts +0 -139
@@ -1,10 +1,13 @@
1
1
  import {
2
+ assertOrganizationIntegrationAllowed,
2
3
  IntegrationFacetMutationResult,
3
4
  IntegrationFacetRemovalResult,
4
5
  IntegrationInstanceFacetsResponse,
5
6
  MutateIntegrationFacetRequest,
6
7
  UpsertIntegrationFacetRequest,
7
8
  } from "@opengeni/contracts";
9
+ import { withOrganizationIntegrationPolicyFence } from "@opengeni/db/organization-integration-policy";
10
+ import { CORE_INTEGRATION_DEFINITIONS } from "@opengeni/capabilities";
8
11
  import {
9
12
  hasPermission,
10
13
  requireAccessGrant,
@@ -25,6 +28,7 @@ import {
25
28
  removeIntegrationFacet,
26
29
  replayCompletedIntegrationFacetOperation,
27
30
  setIntegrationFacetLifecycle,
31
+ type IntegrationFacetAcquisitionAuthorizer,
28
32
  } from "@opengeni/db";
29
33
  import type { Hono } from "hono";
30
34
  import { HTTPException } from "hono/http-exception";
@@ -33,6 +37,7 @@ import {
33
37
  browseGoogleDriveFacetSource,
34
38
  saveGoogleDriveFacetSource,
35
39
  } from "../integrations/google-drive";
40
+ import { parseRequestJson } from "../http/request-body";
36
41
 
37
42
  export function registerIntegrationFacetRoutes(app: Hono, deps: ApiRouteDeps): void {
38
43
  app.get(
@@ -126,7 +131,7 @@ export function registerIntegrationFacetRoutes(app: Hono, deps: ApiRouteDeps): v
126
131
  async (c) => {
127
132
  const workspaceId = c.req.param("workspaceId");
128
133
  const grant = await requireAccessGrant(c, deps, workspaceId, "capabilities:manage");
129
- const payload = UpsertIntegrationFacetRequest.parse(await c.req.json());
134
+ const payload = await parseRequestJson(c, UpsertIntegrationFacetRequest);
130
135
  const capabilityId = decoded(c.req.param("capabilityId"));
131
136
  const instanceKey = decoded(c.req.param("instanceKey"));
132
137
  const facetKey = decoded(c.req.param("facetKey"));
@@ -179,20 +184,30 @@ export function registerIntegrationFacetRoutes(app: Hono, deps: ApiRouteDeps): v
179
184
  }
180
185
  return c.json(
181
186
  IntegrationFacetMutationResult.parse(
182
- await configureIntegrationFacet(deps.db, {
183
- accountId: grant.accountId,
184
- workspaceId,
185
- subjectId: grant.subjectId,
186
- capabilityId,
187
- instanceKey,
188
- facetKey,
189
- displayName: payload.displayName,
190
- config: payload.config,
191
- ...(payload.expectedVersion !== undefined
192
- ? { expectedVersion: payload.expectedVersion }
193
- : {}),
194
- idempotencyKey: payload.idempotencyKey,
195
- }),
187
+ await withOrganizationIntegrationPolicyFence(
188
+ deps.db,
189
+ { accountId: grant.accountId, workspaceId },
190
+ (tx, policy) =>
191
+ configureIntegrationFacet(tx, {
192
+ accountId: grant.accountId,
193
+ workspaceId,
194
+ subjectId: grant.subjectId,
195
+ capabilityId,
196
+ instanceKey,
197
+ facetKey,
198
+ displayName: payload.displayName,
199
+ config: payload.config,
200
+ ...(payload.expectedVersion !== undefined
201
+ ? { expectedVersion: payload.expectedVersion }
202
+ : {}),
203
+ idempotencyKey: payload.idempotencyKey,
204
+ beforeAcquire: async (_db, context) =>
205
+ assertOrganizationIntegrationAllowed(
206
+ policy,
207
+ installedFacetIntegrationKey(context),
208
+ ),
209
+ }),
210
+ ),
196
211
  ),
197
212
  payload.expectedVersion === undefined ? 201 : 200,
198
213
  );
@@ -208,21 +223,31 @@ export function registerIntegrationFacetRoutes(app: Hono, deps: ApiRouteDeps): v
208
223
  async (c) => {
209
224
  const workspaceId = c.req.param("workspaceId");
210
225
  const grant = await requireAccessGrant(c, deps, workspaceId, "capabilities:manage");
211
- const payload = MutateIntegrationFacetRequest.parse(await c.req.json());
226
+ const payload = await parseRequestJson(c, MutateIntegrationFacetRequest);
212
227
  try {
213
228
  return c.json(
214
229
  IntegrationFacetMutationResult.parse(
215
- await setIntegrationFacetLifecycle(deps.db, {
216
- accountId: grant.accountId,
217
- workspaceId,
218
- subjectId: grant.subjectId,
219
- capabilityId: decoded(c.req.param("capabilityId")),
220
- instanceKey: decoded(c.req.param("instanceKey")),
221
- facetKey: decoded(c.req.param("facetKey")),
222
- action,
223
- expectedVersion: payload.expectedVersion,
224
- idempotencyKey: payload.idempotencyKey,
225
- }),
230
+ await withOrganizationIntegrationPolicyFence(
231
+ deps.db,
232
+ { accountId: grant.accountId, workspaceId },
233
+ (tx, policy) =>
234
+ setIntegrationFacetLifecycle(tx, {
235
+ accountId: grant.accountId,
236
+ workspaceId,
237
+ subjectId: grant.subjectId,
238
+ capabilityId: decoded(c.req.param("capabilityId")),
239
+ instanceKey: decoded(c.req.param("instanceKey")),
240
+ facetKey: decoded(c.req.param("facetKey")),
241
+ action,
242
+ expectedVersion: payload.expectedVersion,
243
+ idempotencyKey: payload.idempotencyKey,
244
+ beforeAcquire: async (_db, context) =>
245
+ assertOrganizationIntegrationAllowed(
246
+ policy,
247
+ installedFacetIntegrationKey(context),
248
+ ),
249
+ }),
250
+ ),
226
251
  ),
227
252
  );
228
253
  } catch (error) {
@@ -237,7 +262,7 @@ export function registerIntegrationFacetRoutes(app: Hono, deps: ApiRouteDeps): v
237
262
  async (c) => {
238
263
  const workspaceId = c.req.param("workspaceId");
239
264
  const grant = await requireAccessGrant(c, deps, workspaceId, "capabilities:manage");
240
- const payload = MutateIntegrationFacetRequest.parse(await c.req.json());
265
+ const payload = await parseRequestJson(c, MutateIntegrationFacetRequest);
241
266
  try {
242
267
  return c.json(
243
268
  IntegrationFacetRemovalResult.parse(
@@ -264,6 +289,23 @@ function decoded(value: string): string {
264
289
  return decodeURIComponent(value);
265
290
  }
266
291
 
292
+ /** The DB context comes from the matching installed API facet and immutable
293
+ * server-authored version manifest, never request metadata or a provider domain.
294
+ */
295
+ function installedFacetIntegrationKey(
296
+ context: Parameters<IntegrationFacetAcquisitionAuthorizer>[1],
297
+ ): string | null {
298
+ if (context.apiProtocol !== "openapi" && context.apiProtocol !== "graphql") return null;
299
+ if (context.definitionProvenance === "workspace") return `custom:${context.apiProtocol}`;
300
+ if (
301
+ context.definitionProvenance === "curated" &&
302
+ CORE_INTEGRATION_DEFINITIONS.some((definition) => definition.id === context.definitionId)
303
+ ) {
304
+ return context.definitionId;
305
+ }
306
+ return null;
307
+ }
308
+
267
309
  function facetHttpError(error: unknown): HTTPException {
268
310
  if (error instanceof HTTPException) return error;
269
311
  if (error instanceof IntegrationFacetNotFoundError) {
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The 422 a session gets when it asks for a computer or browser on a Connected
3
+ * Machine it is not currently placed on. Name the exact way to get there so an
4
+ * agent switches itself over instead of delegating or giving up, and keep it
5
+ * conditional because not every session is allowed to swap.
6
+ */
7
+ export function wrongInteractionPlacementMessage(targetSandboxId: string): string {
8
+ return (
9
+ "The requested Connected Machine is not this session's current placement. " +
10
+ `Move the session to that machine before creating an interaction resource: if sandbox_swap is available, call it with target "${targetSandboxId}", retry, and swap back (target "session") when done.`
11
+ );
12
+ }
@@ -5,6 +5,7 @@ import {
5
5
  AgentLearningContext,
6
6
  AgentLearningOverridePatch,
7
7
  KnowledgeEntryListRequest,
8
+ KnowledgeSavePreparationRequest,
8
9
  KnowledgeReviewBatchListRequest,
9
10
  KnowledgeEntryBatchReviewRequest,
10
11
  AgentInstructionReviewRequest,
@@ -15,7 +16,11 @@ import {
15
16
  } from "@opengeni/contracts";
16
17
  import {
17
18
  prepareKnowledgeFile,
19
+ prepareKnowledgeSave,
18
20
  searchKnowledgeEntries,
21
+ KnowledgeVectorCreditsDisabledError,
22
+ KnowledgeVectorFundingError,
23
+ KnowledgeVectorQueryRejectedError,
19
24
  hasPermission,
20
25
  knowledgeContextForAccess,
21
26
  requireAccessGrantAuthorization,
@@ -40,11 +45,16 @@ import {
40
45
  reviewKnowledgeEntries,
41
46
  reviewAgentInstruction,
42
47
  listAgentInstructionReviews,
48
+ KnowledgeEntryIdRequiredError,
49
+ KnowledgeEntryIdTakenError,
43
50
  } from "@opengeni/db";
44
51
  import type { Context, Hono } from "hono";
45
52
  import { HTTPException } from "hono/http-exception";
46
53
  import { z } from "zod";
47
54
  import { withAccessGrantSessionRlsContext } from "../access-grant-rls";
55
+ import { ApiHttpError } from "../http/api-error";
56
+ import { userContentSignedGetUrlOptions } from "../http/user-content";
57
+ import { parseRequestJson } from "../http/request-body";
48
58
 
49
59
  const ReadSettings = z
50
60
  .object({
@@ -61,6 +71,36 @@ const WriteSettings = ReadSettings.extend({
61
71
  const Id = z.uuid();
62
72
  function knowledgeHttpError(error: unknown): never {
63
73
  if (error instanceof HTTPException) throw error;
74
+ if (error instanceof KnowledgeVectorFundingError)
75
+ throw new ApiHttpError(402, {
76
+ code: "payment_required",
77
+ message: error.message,
78
+ details: { code: error.code, keywordAvailable: true },
79
+ });
80
+ if (error instanceof KnowledgeVectorCreditsDisabledError)
81
+ throw new ApiHttpError(403, {
82
+ code: "forbidden",
83
+ message: error.message,
84
+ details: { code: error.code, keywordAvailable: true },
85
+ });
86
+ if (error instanceof KnowledgeVectorQueryRejectedError)
87
+ throw new ApiHttpError(error.code === "quota" ? 429 : 422, {
88
+ code: error.code === "quota" ? "limit_exceeded" : "validation_failed",
89
+ message: error.message,
90
+ details: { code: error.code, keywordAvailable: true },
91
+ });
92
+ if (error instanceof KnowledgeEntryIdTakenError)
93
+ throw new ApiHttpError(409, {
94
+ code: "conflict",
95
+ message: error.message,
96
+ details: { code: error.code },
97
+ });
98
+ if (error instanceof KnowledgeEntryIdRequiredError)
99
+ throw new ApiHttpError(422, {
100
+ code: "validation_failed",
101
+ message: error.message,
102
+ details: { code: error.code },
103
+ });
64
104
  if (error instanceof z.ZodError)
65
105
  throw new HTTPException(422, {
66
106
  message: error.issues[0]?.message ?? "Invalid Knowledge request",
@@ -83,20 +123,29 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
83
123
  c: Context,
84
124
  write: boolean,
85
125
  fn: (context: Awaited<ReturnType<typeof knowledgeContextForAccess>>) => Promise<T>,
126
+ readPermission: "documents:search" | "workspace:read" = "documents:search",
86
127
  ) {
87
128
  try {
88
129
  const access = await requireAccessGrantAuthorization(
89
130
  c,
90
131
  deps,
91
132
  c.req.param("workspaceId")!,
92
- write ? "documents:manage" : "documents:search",
133
+ write
134
+ ? "documents:manage"
135
+ : readPermission === "workspace:read"
136
+ ? undefined
137
+ : readPermission,
93
138
  );
139
+ // Preserve existing document-reader access to the settings read while
140
+ // admitting workspace readers to that one endpoint as well.
141
+ const permission = write
142
+ ? "documents:manage"
143
+ : readPermission === "workspace:read" &&
144
+ hasPermission(access.grant.permissions, "documents:search")
145
+ ? "documents:search"
146
+ : readPermission;
94
147
  return await withAccessGrantSessionRlsContext(deps, access.grant, async () => {
95
- const context = await knowledgeContextForAccess(
96
- deps,
97
- access,
98
- write ? "documents:manage" : "documents:search",
99
- );
148
+ const context = await knowledgeContextForAccess(deps, access, permission);
100
149
  c.header("cache-control", "private, no-store");
101
150
  return fn(context);
102
151
  });
@@ -125,7 +174,20 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
125
174
  throw new HTTPException(403, {
126
175
  message: "Source preparation is unavailable for this task",
127
176
  });
128
- return c.json(await prepareKnowledgeFile(deps, context, Id.parse(c.req.param("fileId"))));
177
+ const body = await c.req.text();
178
+ let input: unknown = {};
179
+ try {
180
+ input = body ? JSON.parse(body) : {};
181
+ } catch {
182
+ throw new HTTPException(400, { message: "Invalid source preparation JSON" });
183
+ }
184
+ const { purpose } = z
185
+ .object({ purpose: z.enum(["evidence", "reference"]).default("evidence") })
186
+ .strict()
187
+ .parse(input);
188
+ return c.json(
189
+ await prepareKnowledgeFile(deps, context, Id.parse(c.req.param("fileId")), purpose),
190
+ );
129
191
  }),
130
192
  );
131
193
  app.post(`${base}/:entryId/file/download-url`, (c) =>
@@ -136,10 +198,10 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
136
198
  context.workspaceId,
137
199
  "files:read",
138
200
  );
139
- const { revisionId } = z
140
- .object({ revisionId: z.uuid().optional() })
141
- .strict()
142
- .parse(await c.req.json());
201
+ const { revisionId } = await parseRequestJson(
202
+ c,
203
+ z.object({ revisionId: z.uuid().optional() }).strict(),
204
+ );
143
205
  const entryId = Id.parse(c.req.param("entryId"));
144
206
  const file = await getKnowledgeOriginalFile(deps.db, context, entryId, revisionId);
145
207
  if (!file) throw new HTTPException(404, { message: "Original file unavailable" });
@@ -151,7 +213,10 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
151
213
  ))
152
214
  )
153
215
  throw new HTTPException(410, { message: "Original file bytes are unavailable" });
154
- const signed = await deps.objectStorage.createGetUrl({ key: file.objectKey });
216
+ const signed = await deps.objectStorage.createGetUrl({
217
+ key: file.objectKey,
218
+ ...userContentSignedGetUrlOptions(file.contentType, file.filename),
219
+ });
155
220
  await recordAuditEvent(deps.db, {
156
221
  accountId: context.accountId,
157
222
  workspaceId: context.workspaceId,
@@ -173,14 +238,49 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
173
238
  );
174
239
  }),
175
240
  );
241
+ app.post(`${base}/prepare-save`, (c) =>
242
+ run(c, false, async (context) => {
243
+ if (context.actor.kind === "agent") {
244
+ const access = await requireAccessGrantAuthorization(
245
+ c,
246
+ deps,
247
+ context.workspaceId,
248
+ "documents:search",
249
+ );
250
+ const selected = access.grant.metadata?.firstPartyMcpTools as
251
+ | FirstPartyMcpToolName[]
252
+ | undefined;
253
+ if (
254
+ !selected ||
255
+ !allowedFirstPartyMcpToolsForSession(deps.settings, selected).includes(
256
+ "knowledge_prepare_save",
257
+ )
258
+ )
259
+ throw new HTTPException(403, {
260
+ message: "Knowledge preparation is unavailable for this task",
261
+ });
262
+ }
263
+ return c.json(
264
+ await prepareKnowledgeSave(
265
+ deps.db,
266
+ context,
267
+ await parseRequestJson(c, KnowledgeSavePreparationRequest),
268
+ () => deps.getDocumentServices().embedder,
269
+ undefined,
270
+ deps.settings,
271
+ ),
272
+ );
273
+ }),
274
+ );
176
275
  app.post(`${base}/search`, (c) =>
177
276
  run(c, false, async (context) =>
178
277
  c.json(
179
278
  await searchKnowledgeEntries(
180
279
  deps.db,
181
280
  context,
182
- KnowledgeEntryListRequest.parse(await c.req.json()),
281
+ await parseRequestJson(c, KnowledgeEntryListRequest),
183
282
  () => deps.getDocumentServices().embedder,
283
+ deps.settings,
184
284
  ),
185
285
  ),
186
286
  ),
@@ -206,7 +306,7 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
206
306
  await reviewKnowledgeEntries(
207
307
  deps.db,
208
308
  context,
209
- KnowledgeEntryBatchReviewRequest.parse(await c.req.json()),
309
+ await parseRequestJson(c, KnowledgeEntryBatchReviewRequest),
210
310
  ),
211
311
  ),
212
312
  ),
@@ -223,6 +323,7 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
223
323
  ...(query.limit ? { limit: Number(query.limit) } : {}),
224
324
  }),
225
325
  () => deps.getDocumentServices().embedder,
326
+ deps.settings,
226
327
  ),
227
328
  );
228
329
  }),
@@ -232,7 +333,7 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
232
333
  const result = await saveKnowledgeEntry(
233
334
  deps.db,
234
335
  context,
235
- KnowledgeEntrySaveRequest.parse(await c.req.json()),
336
+ await parseRequestJson(c, KnowledgeEntrySaveRequest),
236
337
  );
237
338
  return c.json(result, result.replayed ? 200 : 201);
238
339
  }),
@@ -290,10 +391,10 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
290
391
  );
291
392
  app.post(`${base}/:entryId/archive`, (c) =>
292
393
  run(c, true, async (context) => {
293
- const request = z
294
- .object({ operationId: Id, expectedVersion: z.number().int().positive() })
295
- .strict()
296
- .parse(await c.req.json());
394
+ const request = await parseRequestJson(
395
+ c,
396
+ z.object({ operationId: Id, expectedVersion: z.number().int().positive() }).strict(),
397
+ );
297
398
  return c.json(
298
399
  await archiveKnowledgeEntry(deps.db, context, {
299
400
  ...request,
@@ -333,18 +434,26 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
333
434
  await reviewAgentInstruction(
334
435
  deps.db,
335
436
  await instructionReviewContext(c, context),
336
- AgentInstructionReviewRequest.parse(await c.req.json()),
437
+ await parseRequestJson(c, AgentInstructionReviewRequest),
337
438
  ),
338
439
  ),
339
440
  ),
340
441
  );
341
442
  app.post(`${learning}/read`, (c) =>
342
- run(c, false, async (context) => {
343
- const request = ReadSettings.parse(await c.req.json());
344
- return c.json(
345
- await getAgentLearningSettings(deps.db, context, request.scope, request.source),
346
- );
347
- }),
443
+ // Members can inspect the settings relevant to their admitted workspace or
444
+ // owner context without gaining Knowledge search or settings-write access.
445
+ // The database still requires a human and checks each source's owner layer.
446
+ run(
447
+ c,
448
+ false,
449
+ async (context) => {
450
+ const request = await parseRequestJson(c, ReadSettings);
451
+ return c.json(
452
+ await getAgentLearningSettings(deps.db, context, request.scope, request.source),
453
+ );
454
+ },
455
+ "workspace:read",
456
+ ),
348
457
  );
349
458
  app.get(`${learning}/overrides`, (c) =>
350
459
  run(c, false, async (context) => {
@@ -357,7 +466,7 @@ export function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps) {
357
466
  );
358
467
  app.post(learning, (c) =>
359
468
  run(c, false, async (context) => {
360
- const request = WriteSettings.parse(await c.req.json());
469
+ const request = await parseRequestJson(c, WriteSettings);
361
470
  if (context.actor.kind !== "human")
362
471
  throw new HTTPException(403, { message: "Agents cannot change learning settings" });
363
472
  const access = await requireAccessGrantAuthorization(c, deps, context.workspaceId);