@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,19 +1,46 @@
1
+ import {
2
+ clearsLegacyVariableSet,
3
+ rejectLegacyVariableSetFields,
4
+ } from "../http/variable-sets-removed";
1
5
  import { z } from "zod";
2
6
  import {
3
7
  CreateScheduledTaskRequest,
8
+ ListPrivateScheduledTaskSummariesResponse,
9
+ PrivateScheduledTaskSummary,
10
+ RefreshScheduledTaskAccessRequest,
11
+ ScheduledTaskSlackChannelId,
12
+ ScheduledTaskSlackChannelListResponse,
4
13
  TriggerScheduledTaskRequest,
5
14
  UpdateScheduledTaskRequest,
15
+ type AccessGrant,
6
16
  } from "@opengeni/contracts";
7
- import { listScheduledTaskRuns, listScheduledTasks } from "@opengeni/db";
17
+ import {
18
+ getScheduledTaskBlockers,
19
+ getScheduledTaskIncludingDeleted,
20
+ getScheduledTaskRevisionAuthoritySubject,
21
+ listPrivateScheduledTaskSummaries,
22
+ listScheduledTaskRuns,
23
+ listScheduledTasks,
24
+ } from "@opengeni/db";
8
25
  import type { Hono } from "hono";
26
+ import type { ScheduledTask } from "@opengeni/contracts";
9
27
  import { HTTPException } from "hono/http-exception";
10
28
  import {
29
+ isAuthenticatedPersonAuthorization,
11
30
  requireAccessGrant,
12
31
  requireAccessGrantAuthorization,
32
+ requirePermission,
13
33
  resolveWorkspaceCatalogSettings,
34
+ validateOpenGeniSlackBotConnectionSelection,
35
+ type ScheduledTaskSlackChannelVerifier,
36
+ } from "@opengeni/core";
37
+ import {
38
+ recordWorkspaceUsage,
39
+ requireLimit,
40
+ resolveScheduledTaskPreflightModel,
14
41
  } from "@opengeni/core";
15
- import { recordWorkspaceUsage, requireLimit } from "@opengeni/core";
16
42
  import type { ApiRouteDeps } from "@opengeni/core";
43
+ import { assertNotSiteClampedAgent } from "@opengeni/core";
17
44
  import {
18
45
  captureScheduledTaskRestoreState,
19
46
  createValidatedScheduledTask,
@@ -23,19 +50,173 @@ import {
23
50
  scheduledTaskForGrant,
24
51
  scheduledTaskRunForGrant,
25
52
  scheduledTaskTriggerToken,
26
- requireScheduledTaskForApi,
53
+ pauseScheduledTaskAsAdmin,
54
+ pausePrivateScheduledTaskAsAdmin,
55
+ requirePausableScheduledTask,
56
+ requireVisibleScheduledTask,
57
+ scheduledTaskAccess,
58
+ scheduledTaskViewerForGrant,
27
59
  syncCreatedScheduledTask,
28
60
  syncUpdatedScheduledTask,
29
61
  updateScheduledTaskForApi,
62
+ triggerScheduledTaskForGrant,
30
63
  validateScheduledTaskMachineTarget,
31
64
  validateScheduledTaskTarget,
32
65
  validatedScheduledTaskUpdate,
66
+ listScheduledTaskAccessAttention,
67
+ refreshScheduledTaskAccess,
68
+ scheduledTaskAccessSource,
69
+ withScheduledTaskPolicyDrift,
70
+ withScheduledTaskRunAccessFailures,
33
71
  } from "@opengeni/core";
72
+ import type { AccessGrantAuthorization } from "@opengeni/core";
34
73
  import { boundedLimit } from "../http/common";
74
+ import { permissionsRequiredByFirstPartyTools } from "../mcp/first-party-tool-permissions";
75
+ import {
76
+ createOpenGeniSlackBotInteractionClient,
77
+ verifyScheduledTaskSlackChannel,
78
+ } from "../integrations/slack-bot";
35
79
  import { deleteScheduledTaskWithDurableCleanup } from "../scheduled-task-deletion";
80
+ import { parseRequestBody, readRequestJson } from "../http/request-body";
36
81
 
37
82
  export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void {
38
83
  const { db, workflowClient, objectStorage } = deps;
84
+ const slackChannelVerifier =
85
+ (grant: AccessGrant): ScheduledTaskSlackChannelVerifier =>
86
+ async ({ connectionId, channelId }) =>
87
+ await verifyScheduledTaskSlackChannel(deps, {
88
+ accountId: grant.accountId,
89
+ workspaceId: grant.workspaceId,
90
+ subjectId: grant.subjectId,
91
+ connectionId,
92
+ channelId,
93
+ });
94
+
95
+ // Channels a person may choose as a task's fixed Slack destination: active,
96
+ // non-shared channels the selected Opengeni bot already belongs to.
97
+ app.get("/v1/workspaces/:workspaceId/scheduled-task-slack-channels", async (c) => {
98
+ const workspaceId = c.req.param("workspaceId");
99
+ const authorization = await requireAccessGrantAuthorization(
100
+ c,
101
+ deps,
102
+ workspaceId,
103
+ "scheduled_tasks:manage",
104
+ );
105
+ const grant = authorization.grant;
106
+ requirePermission(grant, "connections:write");
107
+ if (!isAuthenticatedPersonAuthorization(authorization)) {
108
+ throw new HTTPException(403, {
109
+ message: "Only a person can choose the Slack channel a scheduled task posts to",
110
+ });
111
+ }
112
+ const connectionId = c.req.query("connectionId");
113
+ if (!connectionId || !z.string().uuid().safeParse(connectionId).success) {
114
+ throw new HTTPException(400, { message: "connectionId is required" });
115
+ }
116
+ const cursor = c.req.query("cursor");
117
+ if (cursor !== undefined && cursor.length > 1_024) {
118
+ throw new HTTPException(400, { message: "invalid cursor" });
119
+ }
120
+ await validateOpenGeniSlackBotConnectionSelection(db, grant, workspaceId, connectionId);
121
+ const client = await createOpenGeniSlackBotInteractionClient(deps, {
122
+ accountId: grant.accountId,
123
+ workspaceId,
124
+ connectionId,
125
+ subjectId: grant.subjectId,
126
+ });
127
+ const result = await client.listChannels({ limit: 200, ...(cursor ? { cursor } : {}) });
128
+ c.header("cache-control", "private, no-store");
129
+ return c.json(
130
+ ScheduledTaskSlackChannelListResponse.parse({
131
+ channels: result.channels
132
+ .filter(
133
+ (channel) =>
134
+ channel.isMember &&
135
+ !channel.isArchived &&
136
+ !channel.isShared &&
137
+ !channel.isExternallyShared &&
138
+ !channel.isOrgShared &&
139
+ ScheduledTaskSlackChannelId.safeParse(channel.id).success,
140
+ )
141
+ .map((channel) => ({ id: channel.id, name: channel.name, isPrivate: channel.isPrivate })),
142
+ nextCursor: result.nextCursor || null,
143
+ }),
144
+ );
145
+ });
146
+
147
+ // Drift is advisory: it is attached for viewers who can act on a task and
148
+ // never fails the read it decorates.
149
+ async function withPolicyDrift(
150
+ authorization: AccessGrantAuthorization,
151
+ tasks: ScheduledTask[],
152
+ ): Promise<ScheduledTask[]> {
153
+ if (!tasks.some((task) => scheduledTaskAccessSource(task, authorization.grant))) {
154
+ return tasks;
155
+ }
156
+ const catalogSettings = (
157
+ await resolveWorkspaceCatalogSettings(db, deps.settings, {
158
+ accountId: authorization.grant.accountId,
159
+ workspaceId: authorization.grant.workspaceId,
160
+ })
161
+ ).settings;
162
+ return await withScheduledTaskPolicyDrift({
163
+ db,
164
+ settings: catalogSettings,
165
+ authorization,
166
+ tasks,
167
+ permissionsRequiredByTools: permissionsRequiredByFirstPartyTools,
168
+ onError: (error) => {
169
+ deps.observability?.warn("Scheduled task access drift could not be computed", {
170
+ errorClass: error instanceof Error ? error.name : "ScheduledTaskPolicyDriftError",
171
+ origin: "api",
172
+ });
173
+ },
174
+ });
175
+ }
176
+
177
+ // Why a schedule paused itself or why its owner was told about it. Like
178
+ // drift, this decorates a read and never fails it.
179
+ async function withBlockers(tasks: ScheduledTask[]): Promise<ScheduledTask[]> {
180
+ const workspaceId = tasks[0]?.workspaceId;
181
+ if (!workspaceId) return tasks;
182
+ try {
183
+ const blockers = await getScheduledTaskBlockers(
184
+ db,
185
+ workspaceId,
186
+ tasks.map((task) => task.id),
187
+ );
188
+ return tasks.map((task) => {
189
+ const blocker = blockers.get(task.id);
190
+ return blocker ? { ...task, blocker } : task;
191
+ });
192
+ } catch (error) {
193
+ deps.observability?.warn("Scheduled task blockers could not be read", {
194
+ errorClass: error instanceof Error ? error.name : "ScheduledTaskBlockerReadError",
195
+ origin: "api",
196
+ });
197
+ return tasks;
198
+ }
199
+ }
200
+
201
+ // Registered before `/:taskId` so the literal segment is never read as an id.
202
+ app.get("/v1/workspaces/:workspaceId/scheduled-tasks/attention", async (c) => {
203
+ const workspaceId = c.req.param("workspaceId");
204
+ const grant = await requireAccessGrant(c, deps, workspaceId, "scheduled_tasks:run");
205
+ // The account plan reads only the MCP registry and tool defaults, which the
206
+ // model catalog does not change, so the deployment settings suffice here.
207
+ const tasks = await listScheduledTaskAccessAttention({
208
+ db,
209
+ settings: deps.settings,
210
+ grant,
211
+ onError: (error) => {
212
+ deps.observability?.warn("Scheduled task account availability could not be computed", {
213
+ errorClass: error instanceof Error ? error.name : "ScheduledTaskAccessAttentionError",
214
+ origin: "api",
215
+ });
216
+ },
217
+ });
218
+ return c.json({ tasks });
219
+ });
39
220
 
40
221
  app.post("/v1/workspaces/:workspaceId/scheduled-tasks", async (c) => {
41
222
  const workspaceId = c.req.param("workspaceId");
@@ -46,7 +227,9 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
46
227
  "scheduled_tasks:manage",
47
228
  );
48
229
  const grant = authorization.grant;
49
- const rawPayload = await c.req.json();
230
+ const legacy = rejectLegacyVariableSetFields(c, await readRequestJson(c));
231
+ if ("response" in legacy) return legacy.response;
232
+ const rawPayload = legacy.payload;
50
233
  const parsedPayload = CreateScheduledTaskRequest.safeParse(rawPayload);
51
234
  if (!parsedPayload.success) {
52
235
  throw new HTTPException(400, {
@@ -76,6 +259,7 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
76
259
  toolsProvided: scheduledTaskToolsProvided(rawPayload),
77
260
  sessionAuthorization: deps.sessionAuthorization,
78
261
  authorizationSurface: "http",
262
+ verifySlackChannel: slackChannelVerifier(grant),
79
263
  });
80
264
  await syncCreatedScheduledTask({ db, workflowClient, task });
81
265
  return c.json(scheduledTaskForGrant(task, grant), 201);
@@ -83,7 +267,13 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
83
267
 
84
268
  app.get("/v1/workspaces/:workspaceId/scheduled-tasks", async (c) => {
85
269
  const workspaceId = c.req.param("workspaceId");
86
- const grant = await requireAccessGrant(c, deps, workspaceId, "scheduled_tasks:run");
270
+ const authorization = await requireAccessGrantAuthorization(
271
+ c,
272
+ deps,
273
+ workspaceId,
274
+ "scheduled_tasks:run",
275
+ );
276
+ const grant = authorization.grant;
87
277
  const sessionId = c.req.query("sessionId");
88
278
  const offset = Number(c.req.query("offset") ?? 0);
89
279
  if (!Number.isSafeInteger(offset) || offset < 0) {
@@ -95,21 +285,109 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
95
285
  }
96
286
  await requireAccessGrant(c, deps, workspaceId, "sessions:control");
97
287
  }
288
+ const viewer = await scheduledTaskViewerForGrant(db, grant, deps.settings);
98
289
  const tasks = await listScheduledTasks(
99
290
  db,
100
291
  workspaceId,
101
292
  boundedLimit(c.req.query("limit")),
102
293
  offset,
103
294
  sessionId,
295
+ viewer.subjectId,
296
+ );
297
+ return c.json(
298
+ (await withBlockers(await withPolicyDrift(authorization, tasks))).map((task) =>
299
+ scheduledTaskForGrant(task, grant),
300
+ ),
104
301
  );
105
- return c.json(tasks.map((task) => scheduledTaskForGrant(task, grant)));
106
302
  });
107
303
 
304
+ // Registered before `/:taskId`. Admins see that other people's Only me
305
+ // schedules exist: owner, how often, last run and cost. Never their name,
306
+ // prompt, settings or runs.
307
+ app.get("/v1/workspaces/:workspaceId/scheduled-tasks/private-summaries", async (c) => {
308
+ const workspaceId = c.req.param("workspaceId");
309
+ const grant = await requireAccessGrant(c, deps, workspaceId, "workspace:admin");
310
+ const viewer = await scheduledTaskViewerForGrant(db, grant, deps.settings);
311
+ // The organization can choose that admins don't see these at all.
312
+ const schedules = viewer.seesPrivateSummaries
313
+ ? await listPrivateScheduledTaskSummaries(db, {
314
+ workspaceId,
315
+ excludeOwnerSubjectId: viewer.subjectId,
316
+ })
317
+ : [];
318
+ return c.json(ListPrivateScheduledTaskSummariesResponse.parse({ schedules }));
319
+ });
320
+
321
+ // An admin pauses someone else's Only me schedule from its summary. Only its
322
+ // owner can change, run or resume it.
323
+ app.post(
324
+ "/v1/workspaces/:workspaceId/scheduled-tasks/private-summaries/:taskId/pause",
325
+ async (c) => {
326
+ const workspaceId = c.req.param("workspaceId");
327
+ const grant = await requireAccessGrant(c, deps, workspaceId, "workspace:admin");
328
+ const viewer = await scheduledTaskViewerForGrant(db, grant, deps.settings);
329
+ const pausable = await requirePausableScheduledTask(db, grant, c.req.param("taskId"), viewer);
330
+ if (pausable.access !== "summary")
331
+ throw new HTTPException(404, { message: "scheduled task not found" });
332
+ const summary =
333
+ pausable.summary.status === "paused"
334
+ ? pausable.summary
335
+ : await pausePrivateScheduledTaskAsAdmin(db, grant, pausable.summary.id, viewer);
336
+ return c.json(PrivateScheduledTaskSummary.parse(summary));
337
+ },
338
+ );
339
+
108
340
  app.get("/v1/workspaces/:workspaceId/scheduled-tasks/:taskId", async (c) => {
109
341
  const workspaceId = c.req.param("workspaceId");
110
- const grant = await requireAccessGrant(c, deps, workspaceId, "scheduled_tasks:run");
111
- const task = await requireScheduledTaskForApi(db, workspaceId, c.req.param("taskId"));
112
- return c.json(scheduledTaskForGrant(task, grant));
342
+ const authorization = await requireAccessGrantAuthorization(
343
+ c,
344
+ deps,
345
+ workspaceId,
346
+ "scheduled_tasks:run",
347
+ );
348
+ const grant = authorization.grant;
349
+ const task = await requireVisibleScheduledTask(db, grant, c.req.param("taskId"));
350
+ const [decorated] = await withBlockers(await withPolicyDrift(authorization, [task]));
351
+ return c.json(scheduledTaskForGrant(decorated ?? task, grant));
352
+ });
353
+
354
+ // The owner's explicit access refresh: re-freeze connectors, connector
355
+ // accounts and an agent-created task's Opengeni tools with the calling
356
+ // person's current authority. It changes neither the schedule nor its
357
+ // status, so the Temporal schedule is untouched.
358
+ app.post("/v1/workspaces/:workspaceId/scheduled-tasks/:taskId/refresh-access", async (c) => {
359
+ const workspaceId = c.req.param("workspaceId");
360
+ const authorization = await requireAccessGrantAuthorization(
361
+ c,
362
+ deps,
363
+ workspaceId,
364
+ "scheduled_tasks:manage",
365
+ );
366
+ const parsed = RefreshScheduledTaskAccessRequest.safeParse(
367
+ await c.req.json().catch(() => null),
368
+ );
369
+ if (!parsed.success) {
370
+ throw new HTTPException(400, { message: "invalid scheduled task access refresh request" });
371
+ }
372
+ const catalogSettings = (
373
+ await resolveWorkspaceCatalogSettings(db, deps.settings, {
374
+ accountId: authorization.grant.accountId,
375
+ workspaceId,
376
+ })
377
+ ).settings;
378
+ const task = await refreshScheduledTaskAccess({
379
+ settings: catalogSettings,
380
+ db,
381
+ objectStorage,
382
+ authorization,
383
+ taskId: c.req.param("taskId"),
384
+ request: parsed.data,
385
+ permissionsRequiredByTools: permissionsRequiredByFirstPartyTools,
386
+ sessionAuthorization: deps.sessionAuthorization,
387
+ authorizationSurface: "http",
388
+ });
389
+ const [withDrift] = await withPolicyDrift(authorization, [task]);
390
+ return c.json(scheduledTaskForGrant(withDrift ?? task, authorization.grant));
113
391
  });
114
392
 
115
393
  app.patch("/v1/workspaces/:workspaceId/scheduled-tasks/:taskId", async (c) => {
@@ -122,16 +400,23 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
122
400
  );
123
401
  const grant = authorization.grant;
124
402
  const taskId = c.req.param("taskId");
125
- const existing = await requireScheduledTaskForApi(db, workspaceId, taskId);
403
+ const existing = await requireVisibleScheduledTask(db, grant, taskId);
126
404
  const previous = await captureScheduledTaskRestoreState(db, existing);
127
- const rawPayload = await c.req.json();
405
+ const body = await readRequestJson(c);
406
+ const legacy = rejectLegacyVariableSetFields(c, body);
407
+ if ("response" in legacy) return legacy.response;
408
+ const rawPayload = legacy.payload;
128
409
  const parsedPayload = UpdateScheduledTaskRequest.safeParse(rawPayload);
129
410
  if (!parsedPayload.success) {
130
411
  throw new HTTPException(400, {
131
412
  message: "invalid scheduled task update request",
132
413
  });
133
414
  }
134
- const payload = parsedPayload.data;
415
+ // `variableSetId: null` / `variableSetIds: []` still clear an old link, so a
416
+ // task tied to a set that is gone can be fixed without recreating it.
417
+ const payload = clearsLegacyVariableSet(body)
418
+ ? { ...parsedPayload.data, variableSetId: null }
419
+ : parsedPayload.data;
135
420
  const catalogSettings = (
136
421
  await resolveWorkspaceCatalogSettings(db, deps.settings, {
137
422
  accountId: grant.accountId,
@@ -149,10 +434,11 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
149
434
  toolsProvided: scheduledTaskToolsProvided(rawPayload),
150
435
  sessionAuthorization: deps.sessionAuthorization,
151
436
  authorizationSurface: "http",
437
+ verifySlackChannel: slackChannelVerifier(grant),
152
438
  });
153
439
  const task = await updateScheduledTaskForApi(
154
440
  db,
155
- workspaceId,
441
+ grant,
156
442
  taskId,
157
443
  update,
158
444
  payload.agentLearning
@@ -166,11 +452,15 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
166
452
  app.post("/v1/workspaces/:workspaceId/scheduled-tasks/:taskId/pause", async (c) => {
167
453
  const workspaceId = c.req.param("workspaceId");
168
454
  const grant = await requireAccessGrant(c, deps, workspaceId, "scheduled_tasks:manage");
169
- const existing = await requireScheduledTaskForApi(db, workspaceId, c.req.param("taskId"));
455
+ const viewer = await scheduledTaskViewerForGrant(db, grant, deps.settings);
456
+ const existing = await requireVisibleScheduledTask(db, grant, c.req.param("taskId"), viewer);
170
457
  const previous = await captureScheduledTaskRestoreState(db, existing);
171
- const task = await updateScheduledTaskForApi(db, workspaceId, existing.id, {
172
- status: "paused",
173
- });
458
+ const ownerPause = viewer.subjectId !== null && existing.ownerSubjectId === viewer.subjectId;
459
+ const adminPause = viewer.admin && !ownerPause;
460
+ if (adminPause) await assertNotSiteClampedAgent(db, grant, "schedules");
461
+ const task = adminPause
462
+ ? await pauseScheduledTaskAsAdmin(db, workspaceId, existing.id)
463
+ : await updateScheduledTaskForApi(db, grant, existing.id, { status: "paused" });
174
464
  await syncUpdatedScheduledTask({ db, workflowClient, previous, task });
175
465
  return c.json(scheduledTaskForGrant(task, grant));
176
466
  });
@@ -184,7 +474,7 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
184
474
  "scheduled_tasks:manage",
185
475
  );
186
476
  const grant = authorization.grant;
187
- const existing = await requireScheduledTaskForApi(db, workspaceId, c.req.param("taskId"));
477
+ const existing = await requireVisibleScheduledTask(db, grant, c.req.param("taskId"));
188
478
  const previous = await captureScheduledTaskRestoreState(db, existing);
189
479
  const catalogSettings = (
190
480
  await resolveWorkspaceCatalogSettings(db, deps.settings, {
@@ -203,7 +493,7 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
203
493
  sessionAuthorization: deps.sessionAuthorization,
204
494
  authorizationSurface: "http",
205
495
  });
206
- const task = await updateScheduledTaskForApi(db, workspaceId, existing.id, update);
496
+ const task = await updateScheduledTaskForApi(db, grant, existing.id, update);
207
497
  await syncUpdatedScheduledTask({ db, workflowClient, previous, task });
208
498
  return c.json(scheduledTaskForGrant(task, grant));
209
499
  });
@@ -213,7 +503,7 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
213
503
  const grant = await requireAccessGrant(c, deps, workspaceId, "scheduled_tasks:run");
214
504
  // Load the task before the gate so a codex-model scheduled task can be
215
505
  // recognised as codex-billed and skip the credit/cost gates at the edge.
216
- const task = await requireScheduledTaskForApi(db, workspaceId, c.req.param("taskId"));
506
+ const task = await requireVisibleScheduledTask(db, grant, c.req.param("taskId"));
217
507
  if (task.action.kind === "agent_turn") {
218
508
  const catalogSettings = (
219
509
  await resolveWorkspaceCatalogSettings(db, deps.settings, {
@@ -239,30 +529,45 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
239
529
  grant,
240
530
  runMode: task.runMode,
241
531
  agentConfig: task.agentConfig,
532
+ audience: task.visibility === "private" ? "user_private" : "workspace_shared",
242
533
  requireOnline: true,
243
534
  });
535
+ const taskAuthoritySubjectId = await getScheduledTaskRevisionAuthoritySubject(db, {
536
+ accountId: task.accountId,
537
+ workspaceId: task.workspaceId,
538
+ taskId: task.id,
539
+ taskAuthorityRevision: task.authorityRevision,
540
+ });
244
541
  await requireLimit(
245
542
  { ...deps, settings: catalogSettings },
246
543
  {
247
544
  accountId: grant.accountId,
248
545
  workspaceId,
546
+ // A manual trigger does not transfer the task's frozen human to
547
+ // the triggering administrator. Unavailable authority is refused
548
+ // visibly by worker dispatch; this edge still checks the workspace.
549
+ initiatingHumanSubjectId:
550
+ taskAuthoritySubjectId === task.ownerSubjectId ? taskAuthoritySubjectId : null,
249
551
  action: "agent_run:create",
250
552
  quantity: 1,
251
- model: task.agentConfig.model ?? catalogSettings.openaiModel,
553
+ // A model-less task is checked against the model its occurrence
554
+ // will run (a connected subscription, the credits default, or the
555
+ // deployment default), not always the deployment default.
556
+ model: await resolveScheduledTaskPreflightModel(db, catalogSettings, task),
252
557
  },
253
558
  );
254
559
  }
255
560
  // Body is optional (a bare POST is still a valid trigger); only a present,
256
561
  // non-empty body must parse against the contract.
257
562
  const body = await c.req.json().catch(() => ({}));
258
- const { triggerId } = TriggerScheduledTaskRequest.parse(body ?? {});
563
+ const { triggerId } = parseRequestBody(TriggerScheduledTaskRequest, body ?? {});
259
564
  const triggerToken = scheduledTaskTriggerToken(triggerId);
260
565
  const agentRunUsageIdempotencyKey =
261
566
  task.action.kind === "agent_turn"
262
567
  ? manualScheduledTaskTriggerUsageKey(workspaceId, task.id, triggerToken)
263
568
  : `knowledge-source-sync:manual:${workspaceId}:${task.id}:${triggerToken}`;
264
569
  const triggerWorkflowId = manualScheduledTaskTriggerWorkflowId(task.id, triggerToken);
265
- await workflowClient.triggerScheduledTask({
570
+ await triggerScheduledTaskForGrant(db, grant, workflowClient, {
266
571
  task,
267
572
  agentRunUsageIdempotencyKey,
268
573
  triggerWorkflowId,
@@ -287,10 +592,18 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
287
592
  app.delete("/v1/workspaces/:workspaceId/scheduled-tasks/:taskId", async (c) => {
288
593
  const workspaceId = c.req.param("workspaceId");
289
594
  const grant = await requireAccessGrant(c, deps, workspaceId, "scheduled_tasks:manage");
595
+ // Deleting stays idempotent, but someone else's Only me schedule is
596
+ // indistinguishable from a missing one.
597
+ const target = await getScheduledTaskIncludingDeleted(db, workspaceId, c.req.param("taskId"));
598
+ if (
599
+ target &&
600
+ scheduledTaskAccess(await scheduledTaskViewerForGrant(db, grant, deps.settings), target) !==
601
+ "full"
602
+ )
603
+ throw new HTTPException(404, { message: "scheduled task not found" });
290
604
  await deleteScheduledTaskWithDurableCleanup(deps, {
291
- workspaceId,
605
+ grant,
292
606
  taskId: c.req.param("taskId"),
293
- subjectId: grant.subjectId,
294
607
  });
295
608
  return c.json({ ok: true });
296
609
  });
@@ -298,13 +611,20 @@ export function registerScheduledTaskRoutes(app: Hono, deps: ApiRouteDeps): void
298
611
  app.get("/v1/workspaces/:workspaceId/scheduled-tasks/:taskId/runs", async (c) => {
299
612
  const workspaceId = c.req.param("workspaceId");
300
613
  const grant = await requireAccessGrant(c, deps, workspaceId, "scheduled_tasks:run");
301
- const task = await requireScheduledTaskForApi(db, workspaceId, c.req.param("taskId"));
614
+ const task = await requireVisibleScheduledTask(db, grant, c.req.param("taskId"));
302
615
  const taskRuns = await listScheduledTaskRuns(
303
616
  db,
304
617
  workspaceId,
305
618
  task.id,
306
619
  boundedLimit(c.req.query("limit")),
307
620
  );
308
- return c.json(taskRuns.map((run) => scheduledTaskRunForGrant(run, grant)));
621
+ const runs = await withScheduledTaskRunAccessFailures({
622
+ db,
623
+ settings: deps.settings,
624
+ grant,
625
+ task,
626
+ runs: taskRuns,
627
+ });
628
+ return c.json(runs.map((run) => scheduledTaskRunForGrant(run, grant)));
309
629
  });
310
630
  }