@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
@@ -26,6 +26,15 @@ export type RegisterCompanyProfileAgentAdminToolsInput = {
26
26
  db: Database;
27
27
  attempt: CompanyProfileAgentAttempt;
28
28
  authorize: () => Promise<void>;
29
+ /**
30
+ * The refusal for a caller that may not administer the organization
31
+ * profile even with the owner's authority (an agent started from a Site
32
+ * page), or null.
33
+ */
34
+ refuseSiteAgent: () => Promise<{
35
+ isError: true;
36
+ content: Array<{ type: "text"; text: string }>;
37
+ } | null>;
29
38
  json: JsonResult;
30
39
  router?: Pick<ReturnType<typeof createCompanyProfileAgentAdminRouter>, "propose" | "confirm">;
31
40
  };
@@ -137,6 +146,8 @@ export function registerCompanyProfileAgentAdminTools(
137
146
  },
138
147
  async (request) => {
139
148
  await input.authorize();
149
+ const refused = await input.refuseSiteAgent();
150
+ if (refused) return refused;
140
151
  const parsed = AgentAuthoredCompanyProfileContent.safeParse({
141
152
  identity: request.identity,
142
153
  mission: request.mission,
@@ -185,6 +196,8 @@ export function registerCompanyProfileAgentAdminTools(
185
196
  },
186
197
  async (request) => {
187
198
  await input.authorize();
199
+ const refused = await input.refuseSiteAgent();
200
+ if (refused) return refused;
188
201
  try {
189
202
  return input.json(await router.confirm({ attempt: input.attempt, request }));
190
203
  } catch (error) {
@@ -0,0 +1,165 @@
1
+ import * as z from "zod/v4";
2
+
3
+ /**
4
+ * Publish the input side of a contract, validate it, and retain the exact call.
5
+ * MCP parsing must not insert defaults, trim text, or erase omitted fields before
6
+ * the application applies presence-sensitive inheritance and authority rules.
7
+ * A narrower projection may hide host-only fields; validation retains the full
8
+ * contract's preprocessors and cross-field checks.
9
+ */
10
+ export function contractToolInput<T extends z.ZodObject>(
11
+ projection: T,
12
+ validation: z.ZodType = projection,
13
+ options: { jsonObjectFields?: readonly string[] } = {},
14
+ ): z.ZodType<z.input<T>, z.input<T>> {
15
+ const inputProjection = projection.strict();
16
+ const jsonSchema = z.toJSONSchema(inputProjection, {
17
+ io: "input",
18
+ target: "draft-7",
19
+ });
20
+ assertDescribedToolInput(jsonSchema);
21
+ for (const field of options.jsonObjectFields ?? []) {
22
+ const property = (jsonSchema.properties as Record<string, { type?: string }>)[field];
23
+ if (property?.type !== "object") {
24
+ throw new Error(`JSON string normalization requires an object-only input: ${field}`);
25
+ }
26
+ }
27
+ const normalizeObject = (value: unknown): unknown => {
28
+ if (typeof value !== "string") return value;
29
+ try {
30
+ const parsed: unknown = JSON.parse(value);
31
+ if (parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) return parsed;
32
+ } catch {
33
+ // The normal value-free contract error reports the expected object.
34
+ }
35
+ return value;
36
+ };
37
+ // MCP's SDK only publishes recognized object schemas. A passthrough object
38
+ // keeps the call intact, while metadata supplies the projected JSON Schema.
39
+ return z
40
+ .object(
41
+ Object.fromEntries(
42
+ (options.jsonObjectFields ?? []).map((field) => [
43
+ field,
44
+ z.preprocess(normalizeObject, z.unknown()).optional(),
45
+ ]),
46
+ ),
47
+ )
48
+ .catchall(z.unknown())
49
+ .superRefine((args, context) => {
50
+ const projected = inputProjection.safeParse(args);
51
+ const parsed = projected.success ? validation.safeParse(args) : projected;
52
+ if (!parsed.success) {
53
+ for (const issue of inputIssues(parsed.error.issues)) context.addIssue({ ...issue });
54
+ }
55
+ })
56
+ .meta(jsonSchema) as unknown as z.ZodType<z.input<T>, z.input<T>>;
57
+ }
58
+
59
+ /** Every named input and array element needs a schema. Dictionary values may be arbitrary JSON. */
60
+ export function assertDescribedToolInput(schema: unknown, tool = "tool"): void {
61
+ const activeRefs = new Set<string>();
62
+ function visit(value: unknown, path: string, allowOpaque = false): void {
63
+ if (value === false) return;
64
+ if (value === true && allowOpaque) return;
65
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
66
+ throw new Error(`${tool}: invalid input schema at ${path}`);
67
+ }
68
+ const node = value as Record<string, unknown>;
69
+ const constraints = ["type", "$ref", "enum", "const", "anyOf", "oneOf", "allOf", "not"];
70
+ if (!constraints.some((key) => Object.hasOwn(node, key))) {
71
+ if (allowOpaque) return;
72
+ throw new Error(`${tool}: input ${path} has no declared structure; use its contract schema`);
73
+ }
74
+ if (typeof node.$ref === "string" && node.$ref.startsWith("#/") && !activeRefs.has(node.$ref)) {
75
+ const ref = node.$ref;
76
+ let target = schema;
77
+ for (const part of ref.slice(2).split("/")) {
78
+ target = (target as Record<string, unknown>)?.[
79
+ part.replace(/~1/g, "/").replace(/~0/g, "~")
80
+ ];
81
+ }
82
+ activeRefs.add(ref);
83
+ visit(target, path, allowOpaque);
84
+ activeRefs.delete(ref);
85
+ }
86
+ for (const [key, child] of Object.entries((node.properties ?? {}) as Record<string, unknown>)) {
87
+ visit(child, `${path}.${key}`);
88
+ }
89
+ if (node.type === "array" && node.items === undefined && node.prefixItems === undefined) {
90
+ throw new Error(
91
+ `${tool}: input ${path}[] has no declared structure; use its contract schema`,
92
+ );
93
+ }
94
+ if (Array.isArray(node.items)) {
95
+ node.items.forEach((child, index) => visit(child, `${path}[${index}]`));
96
+ if (node.additionalItems !== undefined) visit(node.additionalItems, `${path}[...]`);
97
+ else if (typeof node.maxItems !== "number" || node.maxItems > node.items.length) {
98
+ throw new Error(
99
+ `${tool}: input ${path}[...] has no declared structure; use its contract schema`,
100
+ );
101
+ }
102
+ } else if (node.items !== undefined) visit(node.items, `${path}[]`);
103
+ if (Array.isArray(node.prefixItems)) {
104
+ node.prefixItems.forEach((child, index) => visit(child, `${path}[${index}]`));
105
+ if (
106
+ node.items === undefined &&
107
+ (typeof node.maxItems !== "number" || node.maxItems > node.prefixItems.length)
108
+ ) {
109
+ throw new Error(
110
+ `${tool}: input ${path}[...] has no declared structure; use its contract schema`,
111
+ );
112
+ }
113
+ }
114
+ // An unconstrained dictionary is intentional extension data. If its values
115
+ // declare a structure, check that structure's fields just like named inputs.
116
+ const dictionary = node.additionalProperties;
117
+ if (dictionary && typeof dictionary === "object" && Object.keys(dictionary).length > 0) {
118
+ visit(dictionary, `${path}.*`, true);
119
+ }
120
+ for (const [key, child] of Object.entries(
121
+ (node.patternProperties ?? {}) as Record<string, unknown>,
122
+ )) {
123
+ if (child && typeof child === "object" && Object.keys(child).length === 0) continue;
124
+ visit(child, `${path}.[${key}]`, true);
125
+ }
126
+ for (const keyword of ["anyOf", "oneOf", "allOf"]) {
127
+ for (const [index, child] of ((node[keyword] ?? []) as unknown[]).entries()) {
128
+ visit(child, `${path}.${keyword}[${index}]`, allowOpaque);
129
+ }
130
+ }
131
+ }
132
+ visit(schema, "arguments");
133
+ }
134
+
135
+ /** Only raw contract preflight errors, never downstream provider or storage exceptions. */
136
+ function inputIssues(issues: readonly z.core.$ZodIssue[]): z.core.$ZodIssueCustom[] {
137
+ const result: z.core.$ZodIssueCustom[] = [];
138
+ for (const issue of issues.slice(0, 8)) {
139
+ const path = [...issue.path];
140
+ let message: string;
141
+ if (issue.code === "invalid_type") message = `expected ${issue.expected}`;
142
+ else if (issue.code === "invalid_value")
143
+ message = `allowed values: ${JSON.stringify(issue.values)}`;
144
+ else if (issue.code === "invalid_union" && issue.errors.length === 0 && issue.discriminator) {
145
+ if (path.at(-1) !== issue.discriminator) path.push(issue.discriminator);
146
+ message = `allowed values: ${JSON.stringify("options" in issue ? issue.options : [])}`;
147
+ } else if (issue.code === "invalid_union") {
148
+ // These are alternatives, never cumulative requirements.
149
+ message = "does not match any of the declared alternative input formats";
150
+ } else if (issue.code === "unrecognized_keys")
151
+ message = `fields not declared by this tool: ${JSON.stringify(issue.keys)}`;
152
+ else if (issue.code === "too_small") message = `must meet minimum ${issue.minimum}`;
153
+ else if (issue.code === "too_big") message = `must meet maximum ${issue.maximum}`;
154
+ else message = issue.message;
155
+ result.push({ code: "custom", path, message });
156
+ }
157
+ if (issues.length > 8) {
158
+ result.push({
159
+ code: "custom",
160
+ path: [],
161
+ message: `${issues.length - 8} additional input problems`,
162
+ });
163
+ }
164
+ return result;
165
+ }
@@ -1,4 +1,5 @@
1
1
  import { searchKnowledgeEntries } from "@opengeni/core";
2
+ import type { Settings } from "@opengeni/config";
2
3
  import { KnowledgeEntryListRequest } from "@opengeni/contracts";
3
4
  import type { DocumentServices } from "@opengeni/documents";
4
5
  import {
@@ -17,7 +18,7 @@ export function buildDocumentsMcpServer(
17
18
  accountId: string,
18
19
  workspaceId: string,
19
20
  documentServices: DocumentServices,
20
- options: { knowledge: KnowledgeContext },
21
+ options: { knowledge: KnowledgeContext; settings?: Settings },
21
22
  ): McpServer {
22
23
  const context = options.knowledge;
23
24
  if (context.accountId !== accountId || context.workspaceId !== workspaceId)
@@ -39,7 +40,13 @@ export function buildDocumentsMcpServer(
39
40
  {
40
41
  type: "text",
41
42
  text: JSON.stringify(
42
- await searchKnowledgeEntries(db, context, input, () => documentServices.embedder),
43
+ await searchKnowledgeEntries(
44
+ db,
45
+ context,
46
+ input,
47
+ () => documentServices.embedder,
48
+ options.settings,
49
+ ),
43
50
  ),
44
51
  },
45
52
  ],
@@ -19,6 +19,7 @@ import * as z from "zod/v4";
19
19
  import type { ApiRouteDeps } from "@opengeni/core";
20
20
  import { editableArtifactActorForGrant } from "../routes/editable-artifacts";
21
21
  import { EditableArtifactQueryRequestSchema } from "./editable-artifact-query-schema";
22
+ import { siteAgentEditableArtifactRefusal } from "./site-agent-clamp-tools";
22
23
 
23
24
  const ArtifactId = z
24
25
  .string()
@@ -32,12 +33,13 @@ const ArtifactCommand = z
32
33
  .object({ kind: z.string().min(1).max(128) })
33
34
  .passthrough()
34
35
  .describe(
35
- "One canonical modality command. Use the exact OpenGeni document, spreadsheet, or presentation skill command contract; never send local-file facade calls here.",
36
+ "One canonical modality command. Use the exact Opengeni document, spreadsheet, or presentation skill command contract; never send local-file facade calls here.",
36
37
  );
37
38
 
38
39
  const ArtifactMetadata = z
39
40
  .object({
40
41
  id: ArtifactId,
42
+ artifactReference: z.string(),
41
43
  modality: Modality,
42
44
  title: z.string(),
43
45
  lifecycle: z.enum(["active", "archived"]),
@@ -100,6 +102,13 @@ export function registerEditableArtifactAgentTools(
100
102
  await input.authorize();
101
103
  return jsonResult(await operation());
102
104
  };
105
+ /** Writes: an agent started from a Site page edits only what the Site declared. */
106
+ const executeWrite = async <T>(operation: () => Promise<T>, artifactId?: string) => {
107
+ await input.authorize();
108
+ const refused = await siteAgentEditableArtifactRefusal(input.deps, input.grant, artifactId);
109
+ if (refused) return refused;
110
+ return jsonResult(await operation());
111
+ };
103
112
 
104
113
  input.server.registerTool(
105
114
  "editable_artifact_list",
@@ -135,7 +144,7 @@ export function registerEditableArtifactAgentTools(
135
144
  },
136
145
  async ({ modality, title }, extra) => {
137
146
  const invocation = context("editable_artifact_create", extra);
138
- return await execute(
147
+ return await executeWrite(
139
148
  async () =>
140
149
  await application().create({
141
150
  ...invocation,
@@ -164,7 +173,7 @@ export function registerEditableArtifactAgentTools(
164
173
  },
165
174
  async ({ fileId, modality, title }, extra) => {
166
175
  const invocation = context("editable_artifact_import", extra);
167
- return await execute(
176
+ return await executeWrite(
168
177
  async () =>
169
178
  await application().import({
170
179
  ...invocation,
@@ -203,13 +212,17 @@ export function registerEditableArtifactAgentTools(
203
212
  {
204
213
  title: "Inspect editable artifact",
205
214
  description:
206
- "Query the artifact's current canonical head through the same native kernel used by the browser. Use bounded modality queries; results are current, not a sandbox-file snapshot.",
215
+ "Query the artifact's current canonical head through the same native kernel used by the browser. Use bounded modality queries; results are current, not a sandbox-file snapshot. Native document queries return a server-issued inspectionReceiptId; use a post-edit body inspection receipt for declared report completion. If the document changes during inspection, retry against its current head.",
207
216
  inputSchema: {
208
217
  artifactId: ArtifactId,
209
218
  modality: Modality,
210
219
  request: EditableArtifactQueryRequestSchema,
211
220
  },
212
- outputSchema: { artifact: ArtifactMetadata, projection: z.unknown() },
221
+ outputSchema: {
222
+ artifact: ArtifactMetadata,
223
+ projection: z.unknown(),
224
+ inspectionReceiptId: z.string().uuid().optional(),
225
+ },
213
226
  annotations: readOnlyAnnotations("Inspect editable artifact"),
214
227
  },
215
228
  async ({ artifactId, modality, request }, extra) =>
@@ -244,7 +257,7 @@ export function registerEditableArtifactAgentTools(
244
257
  },
245
258
  async ({ artifactId, modality, expectedHeadSequence, expectedStateHash, commands }, extra) => {
246
259
  const invocation = context("editable_artifact_apply", extra);
247
- return await execute(
260
+ return await executeWrite(
248
261
  async () =>
249
262
  await application().apply({
250
263
  ...invocation,
@@ -254,6 +267,7 @@ export function registerEditableArtifactAgentTools(
254
267
  expectedStateHash,
255
268
  batch: { modality, commands } as EditableArtifactAgentCommandBatch,
256
269
  }),
270
+ artifactId,
257
271
  );
258
272
  },
259
273
  );
@@ -262,11 +276,12 @@ export function registerEditableArtifactAgentTools(
262
276
  "editable_artifact_export",
263
277
  {
264
278
  title: "Export editable artifact",
265
- description:
266
- "Pin the current artifact head and start an immutable Office/PDF/image export. This does not write into the sandbox. Poll opengeni__editable_artifact_export_status for the resulting workspace file ID.",
279
+ description: `Pin the current artifact head and start an immutable file export. ${input.deps.editableArtifactAgent?.describeExportFormats?.() ?? "No exporter capability description is available; query this deployment before promising a format."} This does not write into the sandbox. Poll opengeni__editable_artifact_export_status for the resulting workspace file ID.`,
267
280
  inputSchema: {
268
281
  artifactId: ArtifactId,
269
- format: Format,
282
+ format: Format.describe(
283
+ "Target file format. Only the formats listed in this tool's description are served; any other combination is refused with unsupported_format.",
284
+ ),
270
285
  options: JsonRecord.optional(),
271
286
  },
272
287
  outputSchema: {
@@ -281,7 +296,8 @@ export function registerEditableArtifactAgentTools(
281
296
  },
282
297
  async ({ artifactId, format, options }, extra) => {
283
298
  const invocation = context("editable_artifact_export", extra);
284
- return await execute(
299
+ // HTTP refuses the matching materialization for the same agent.
300
+ return await executeWrite(
285
301
  async () =>
286
302
  await application().startExport({
287
303
  ...invocation,
@@ -291,6 +307,7 @@ export function registerEditableArtifactAgentTools(
291
307
  ...(options ? { options } : {}),
292
308
  signal: extra.signal,
293
309
  }),
310
+ artifactId,
294
311
  );
295
312
  },
296
313
  );
@@ -319,7 +336,7 @@ export function registerEditableArtifactAgentTools(
319
336
  annotations: mutationAnnotations("Get artifact export", { idempotent: true }),
320
337
  },
321
338
  async ({ artifactId, versionId, jobId }, extra) =>
322
- await execute(
339
+ await executeWrite(
323
340
  async () =>
324
341
  await application().exportStatus({
325
342
  ...context("editable_artifact_export_status", extra),
@@ -328,6 +345,7 @@ export function registerEditableArtifactAgentTools(
328
345
  jobId,
329
346
  signal: extra.signal,
330
347
  }),
348
+ artifactId,
331
349
  ),
332
350
  );
333
351
  }
package/src/mcp/files.ts CHANGED
@@ -9,6 +9,7 @@ import {
9
9
  } from "@opengeni/core";
10
10
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
11
  import * as z from "zod/v4";
12
+ import { userContentSignedGetUrlOptions } from "../http/user-content";
12
13
 
13
14
  /** Dedicated file MCP surface. The broad `opengeni` server never registers it. */
14
15
  export function buildFilesMcpServer(
@@ -63,7 +64,10 @@ export function buildFilesMcpServer(
63
64
  if (file.status !== "ready") {
64
65
  throw new Error(`file is ${file.status}`);
65
66
  }
66
- const signed = await deps.objectStorage.createGetUrl({ key: file.objectKey });
67
+ const signed = await deps.objectStorage.createGetUrl({
68
+ key: file.objectKey,
69
+ ...userContentSignedGetUrlOptions(file.contentType, file.filename),
70
+ });
67
71
  // Principal-facing signed URL issuance is a metadata-only audit
68
72
  // fact, awaited before the URL leaves the platform. Never the URL/key.
69
73
  await recordAuditEvent(deps.db, {