@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,784 +0,0 @@
1
- import { createHash } from "node:crypto";
2
-
3
- import {
4
- EnablePackRequest,
5
- InstallPackRequest,
6
- MarketingDailyAnalysisTaskRequest,
7
- PackInstallation,
8
- PackInstallationPreview,
9
- PackUninstallPreview,
10
- PreviewPackInstallationRequest,
11
- RegisterCapabilityPackRequest,
12
- UninstallPackRequest,
13
- UninstallPackResult,
14
- stableJson,
15
- type SocialConnection,
16
- } from "@opengeni/contracts";
17
- import {
18
- adoptPackComponentReferences,
19
- CapabilityComponentVersionConflictError,
20
- deferPackInstallationOperation,
21
- deleteWorkspacePack,
22
- disableCapabilityInstallation,
23
- enablePackInstallation,
24
- finalizePackComponentOwnership,
25
- finalizePackInstallationOperation,
26
- finalizePackUninstallOperation,
27
- getCapabilityInstallation,
28
- getPackInstallation,
29
- getWorkspacePack,
30
- getSocialConnection,
31
- installPortableSkill,
32
- SkillSourceRemovalAuthorityError,
33
- listPackInstallations,
34
- listSocialConnections,
35
- PackManifestChangedError,
36
- PackComponentResolutionError,
37
- PackInstallationVersionConflictError,
38
- PackInstallationVersionRequiredError,
39
- PackOperationClaimLostError,
40
- PackOperationIdempotencyError,
41
- PackOperationInProgressError,
42
- preparePackInstallationOperation,
43
- preparePackUninstallOperation,
44
- previewPackComponentRelease,
45
- recordPackInlineSkillComponent,
46
- registerWorkspacePack,
47
- releasePackComponents,
48
- touchPackInstallationOperation,
49
- updatePackInstallationStatus,
50
- } from "@opengeni/db";
51
- import { getDocumentBase } from "@opengeni/documents";
52
- import type { Hono } from "hono";
53
- import { HTTPException } from "hono/http-exception";
54
- import { requireAccessGrant, requireAccessGrantAuthorization } from "@opengeni/core";
55
- import { skillInstallerActor, skillRemovalActor } from "./skill-install-authority";
56
- import { requireLimit } from "@opengeni/core";
57
- import type { ApiRouteDeps } from "@opengeni/core";
58
- import { validateVariableSetAttachment } from "@opengeni/core";
59
- import {
60
- assertPackSandboxImageCompatible,
61
- buildMarketingDailyAnalysisAgentConfig,
62
- capabilityPackRequiresInstallationPlan,
63
- inlinePackSkillInstall,
64
- isBuiltInCapabilityPack,
65
- listWorkspaceCapabilityPacks,
66
- MARKETING_SOCIAL_PACK_ID,
67
- previewCapabilityPackInstallation,
68
- resolveCapabilityPack,
69
- } from "@opengeni/core";
70
- import { createValidatedScheduledTask, syncCreatedScheduledTask } from "@opengeni/core";
71
-
72
- export function registerPackRoutes(app: Hono, deps: ApiRouteDeps): void {
73
- const { settings, db, objectStorage, workflowClient } = deps;
74
-
75
- app.get("/v1/workspaces/:workspaceId/packs", async (c) => {
76
- const workspaceId = c.req.param("workspaceId");
77
- await requireAccessGrant(c, deps, workspaceId, "workspace:read");
78
- return c.json({
79
- packs: await listWorkspaceCapabilityPacks(db, workspaceId),
80
- installations: await listPackInstallations(db, workspaceId),
81
- });
82
- });
83
-
84
- // Registers (or replaces) a workspace-scoped pack from a manifest payload.
85
- // Built-in pack ids stay reserved so a registration can never shadow them.
86
- app.post("/v1/workspaces/:workspaceId/packs", async (c) => {
87
- const workspaceId = c.req.param("workspaceId");
88
- const grant = await requireAccessGrant(c, deps, workspaceId, "capabilities:manage");
89
- const manifest = RegisterCapabilityPackRequest.parse(await c.req.json());
90
- if (isBuiltInCapabilityPack(manifest.id)) {
91
- throw new HTTPException(409, {
92
- message: `pack id ${manifest.id} is a built-in pack and cannot be replaced`,
93
- });
94
- }
95
- const { pack, created } = await registerWorkspacePack(db, {
96
- accountId: grant.accountId,
97
- workspaceId,
98
- pack: manifest,
99
- });
100
- return c.json(pack, created ? 201 : 200);
101
- });
102
-
103
- app.delete("/v1/workspaces/:workspaceId/packs/:packId", async (c) => {
104
- const workspaceId = c.req.param("workspaceId");
105
- await requireAccessGrant(c, deps, workspaceId, "capabilities:manage");
106
- const packId = c.req.param("packId");
107
- if (isBuiltInCapabilityPack(packId)) {
108
- throw new HTTPException(409, {
109
- message: "built-in packs cannot be unregistered",
110
- });
111
- }
112
- if (!(await getWorkspacePack(db, workspaceId, packId))) {
113
- throw new HTTPException(404, { message: "pack not found" });
114
- }
115
- // V2 Packs own explicit components. Unregistering before the ownership
116
- // ledger is safely released would orphan those components, so require the
117
- // dedicated uninstall flow first. Legacy installations retain the old
118
- // disable-before-delete behavior for compatibility.
119
- const installation = await getPackInstallation(db, workspaceId, packId);
120
- if (
121
- installation &&
122
- installation.status !== "disabled" &&
123
- (installation.manifestDigest !== null || installation.manifestSnapshot !== null)
124
- ) {
125
- throw new HTTPException(409, {
126
- message: "uninstall this Pack before unregistering it",
127
- });
128
- }
129
- if (installation && installation.status === "active") {
130
- await updatePackInstallationStatus(db, workspaceId, packId, "disabled");
131
- }
132
- const capabilityInstallation = await getCapabilityInstallation(
133
- db,
134
- workspaceId,
135
- `pack:${packId}`,
136
- );
137
- if (capabilityInstallation && capabilityInstallation.status === "active") {
138
- await disableCapabilityInstallation(db, workspaceId, `pack:${packId}`);
139
- }
140
- await deleteWorkspacePack(db, workspaceId, packId);
141
- return c.body(null, 204);
142
- });
143
-
144
- app.get("/v1/workspaces/:workspaceId/packs/installations", async (c) => {
145
- const workspaceId = c.req.param("workspaceId");
146
- await requireAccessGrant(c, deps, workspaceId, "workspace:read");
147
- return c.json(await listPackInstallations(db, workspaceId));
148
- });
149
-
150
- app.get("/v1/workspaces/:workspaceId/packs/:packId", async (c) => {
151
- const workspaceId = c.req.param("workspaceId");
152
- await requireAccessGrant(c, deps, workspaceId, "workspace:read");
153
- const pack = await requirePack(db, workspaceId, c.req.param("packId"));
154
- return c.json({
155
- pack,
156
- installation: await getPackInstallation(db, workspaceId, pack.id),
157
- });
158
- });
159
-
160
- app.post("/v1/workspaces/:workspaceId/packs/:packId/installation-preview", async (c) => {
161
- const workspaceId = c.req.param("workspaceId");
162
- const grant = await requireAccessGrant(c, deps, workspaceId, "workspace:read");
163
- const pack = await requirePack(db, workspaceId, c.req.param("packId"));
164
- const payload = PreviewPackInstallationRequest.parse(await c.req.json());
165
- return c.json(
166
- PackInstallationPreview.parse(
167
- await previewCapabilityPackInstallation(db, grant, pack, {
168
- ...(payload.rigId ? { rigId: payload.rigId } : {}),
169
- ...(payload.variableSetId ? { variableSetId: payload.variableSetId } : {}),
170
- }),
171
- ),
172
- );
173
- });
174
-
175
- app.post("/v1/workspaces/:workspaceId/packs/:packId/install", async (c) => {
176
- const workspaceId = c.req.param("workspaceId");
177
- const access = await requireAccessGrantAuthorization(
178
- c,
179
- deps,
180
- workspaceId,
181
- "capabilities:manage",
182
- );
183
- const { grant } = access;
184
- const pack = await requirePack(db, workspaceId, c.req.param("packId"));
185
- const skillActor = pack.skills.length ? skillInstallerActor(access) : undefined;
186
- const payload = InstallPackRequest.parse(await c.req.json());
187
- const preview = PackInstallationPreview.parse(
188
- await previewCapabilityPackInstallation(db, grant, pack, {
189
- ...(payload.rigId ? { rigId: payload.rigId } : {}),
190
- ...(payload.variableSetId ? { variableSetId: payload.variableSetId } : {}),
191
- }),
192
- );
193
- if (preview.manifestDigest !== payload.expectedManifestDigest) {
194
- throw new HTTPException(409, {
195
- message: "The Pack manifest changed after preview. Review the updated installation plan.",
196
- });
197
- }
198
- if (!preview.ready) {
199
- throw new HTTPException(422, {
200
- message: `The Pack is not ready to install: ${preview.blockers.join("; ")}`,
201
- });
202
- }
203
- if (preview.variableSetId) {
204
- await validateVariableSetAttachment(
205
- { settings, db },
206
- grant,
207
- workspaceId,
208
- preview.variableSetId,
209
- { preauthorized: payload.variableSetId === undefined },
210
- );
211
- }
212
- const metadata = {
213
- ...payload.metadata,
214
- platformVersion: 2,
215
- packVersion: pack.version,
216
- ...(preview.variableSetId ? { variableSetId: preview.variableSetId } : {}),
217
- };
218
- const requestDigest = sha256(
219
- stableJson({
220
- packId: pack.id,
221
- manifestDigest: preview.manifestDigest,
222
- expectedInstallationVersion: payload.expectedInstallationVersion ?? null,
223
- selectedRigId: preview.rig.rigId,
224
- variableSetId: preview.variableSetId,
225
- metadata,
226
- }),
227
- );
228
- let prepared: Awaited<ReturnType<typeof preparePackInstallationOperation>>;
229
- try {
230
- prepared = await preparePackInstallationOperation(db, {
231
- accountId: grant.accountId,
232
- workspaceId,
233
- subjectId: grant.subjectId,
234
- pack,
235
- manifestDigest: preview.manifestDigest,
236
- selectedRigId: preview.rig.rigId,
237
- metadata,
238
- idempotencyKey: payload.idempotencyKey,
239
- requestDigest,
240
- ...(!isBuiltInCapabilityPack(pack.id)
241
- ? { registeredManifestDigest: preview.manifestDigest }
242
- : {}),
243
- ...(payload.expectedInstallationVersion !== undefined
244
- ? { expectedInstallationVersion: payload.expectedInstallationVersion }
245
- : {}),
246
- });
247
- } catch (error) {
248
- throw packMutationHttpError(error);
249
- }
250
- if (prepared.replayResult) {
251
- const replayed = await getPackInstallation(db, workspaceId, pack.id);
252
- if (!replayed) {
253
- throw new HTTPException(500, {
254
- message: "The completed Pack operation lost its installation record",
255
- });
256
- }
257
- return c.json(
258
- PackInstallation.parse({
259
- ...replayed,
260
- ...(Array.isArray(prepared.replayResult.skillWrites)
261
- ? { skillWrites: prepared.replayResult.skillWrites }
262
- : {}),
263
- ...(Array.isArray(prepared.replayResult.skillReleases)
264
- ? { skillReleases: prepared.replayResult.skillReleases }
265
- : {}),
266
- }),
267
- 200,
268
- );
269
- }
270
-
271
- const retainedComponentKeys: string[] = [];
272
- const skillWrites: import("@opengeni/contracts").SkillWriteReceipt[] = [];
273
- const retainedFacetInstallationIds: string[] = [];
274
- const retainedBindingIds: string[] = [];
275
- let activeComponentKey = "manifest";
276
- const heartbeat = async (): Promise<void> =>
277
- await touchPackInstallationOperation(db, {
278
- accountId: grant.accountId,
279
- workspaceId,
280
- operationId: prepared.operationId,
281
- operationVersion: prepared.operationVersion,
282
- });
283
- try {
284
- for (const skill of pack.skills) {
285
- if (!skillActor)
286
- throw new HTTPException(403, { message: "Skill installer authority is missing" });
287
- await heartbeat();
288
- const inline = inlinePackSkillInstall(pack, skill);
289
- activeComponentKey = inline.componentKey;
290
- const installed = await installPortableSkill(db, {
291
- skillActor,
292
- accountId: grant.accountId,
293
- workspaceId,
294
- subjectId: grant.subjectId,
295
- capabilityId: inline.capabilityId,
296
- pluginKey: inline.pluginKey,
297
- source: "pack",
298
- sourceUrl: inline.sourceUrl,
299
- repositoryUrl: inline.repositoryUrl,
300
- sourceCommit: inline.sourceCommit,
301
- sourcePath: inline.sourcePath,
302
- name: inline.name,
303
- description: inline.description,
304
- activationMode: inline.activationMode,
305
- contentSha256: inline.contentSha256,
306
- totalBytes: inline.totalBytes,
307
- files: inline.files,
308
- owner: {
309
- kind: "pack",
310
- id: prepared.installation.id,
311
- removable: true,
312
- },
313
- });
314
- skillWrites.push(installed.skillReceipt);
315
- await heartbeat();
316
- await recordPackInlineSkillComponent(db, {
317
- accountId: grant.accountId,
318
- workspaceId,
319
- packInstallationId: prepared.installation.id,
320
- componentKey: inline.componentKey,
321
- capabilityId: inline.capabilityId,
322
- facetInstallationId: installed.facetInstallationId,
323
- contentSha256: inline.contentSha256,
324
- name: inline.name,
325
- });
326
- retainedComponentKeys.push(inline.componentKey);
327
- retainedFacetInstallationIds.push(installed.facetInstallationId);
328
- }
329
-
330
- activeComponentKey = "pinned-components";
331
- await heartbeat();
332
- const adopted = await adoptPackComponentReferences(db, {
333
- accountId: grant.accountId,
334
- workspaceId,
335
- packInstallationId: prepared.installation.id,
336
- references: pack.components,
337
- });
338
- retainedComponentKeys.push(...adopted.components.map((component) => component.key));
339
- retainedFacetInstallationIds.push(...adopted.retainedFacetInstallationIds);
340
- retainedBindingIds.push(...adopted.retainedBindingIds);
341
-
342
- activeComponentKey = "ownership-finalize";
343
- await heartbeat();
344
- const removalActor = skillRemovalActor(access);
345
- const { skillReleases } = await finalizePackComponentOwnership(db, {
346
- ...(removalActor ? { skillActor: removalActor } : {}),
347
- accountId: grant.accountId,
348
- workspaceId,
349
- packInstallationId: prepared.installation.id,
350
- retainedComponentKeys,
351
- retainedFacetInstallationIds,
352
- retainedBindingIds,
353
- });
354
- await heartbeat();
355
- const finalized = await finalizePackInstallationOperation(db, {
356
- accountId: grant.accountId,
357
- workspaceId,
358
- operationId: prepared.operationId,
359
- operationVersion: prepared.operationVersion,
360
- packInstallationId: prepared.installation.id,
361
- packId: pack.id,
362
- result: {
363
- status: "installed",
364
- ...(skillWrites.length ? { skillWrites } : {}),
365
- packId: pack.id,
366
- manifestDigest: preview.manifestDigest,
367
- componentCount: retainedComponentKeys.length,
368
- ...(skillReleases.length ? { skillReleases } : {}),
369
- },
370
- });
371
- return c.json(
372
- PackInstallation.parse({
373
- ...finalized,
374
- ...(skillWrites.length ? { skillWrites } : {}),
375
- ...(skillReleases.length ? { skillReleases } : {}),
376
- }),
377
- preview.installationVersion === null ? 201 : 200,
378
- );
379
- } catch (error) {
380
- await deferPackInstallationOperation(db, {
381
- accountId: grant.accountId,
382
- workspaceId,
383
- operationId: prepared.operationId,
384
- operationVersion: prepared.operationVersion,
385
- packInstallationId: prepared.installation.id,
386
- phase: `component_failed:${activeComponentKey}`,
387
- errorCode: packFailureCode(error),
388
- }).catch(() => undefined);
389
- if (error instanceof PackComponentResolutionError) {
390
- throw new HTTPException(409, {
391
- message: `Pack component ${error.componentKey} changed after preview. Review the installation plan and retry with the same idempotency key.`,
392
- });
393
- }
394
- if (error instanceof CapabilityComponentVersionConflictError) {
395
- throw new HTTPException(409, {
396
- message: `Pack component ${activeComponentKey} is pinned by another installed owner. Resolve that version conflict and retry with the same idempotency key.`,
397
- });
398
- }
399
- if (
400
- error instanceof PackOperationClaimLostError ||
401
- error instanceof SkillSourceRemovalAuthorityError
402
- ) {
403
- throw packMutationHttpError(error);
404
- }
405
- if (error instanceof HTTPException) throw error;
406
- throw new HTTPException(422, {
407
- message: `Pack component ${activeComponentKey} could not be installed. No Pack-owned component is active until the operation completes; retry with the same idempotency key.`,
408
- });
409
- }
410
- });
411
-
412
- app.get("/v1/workspaces/:workspaceId/packs/:packId/uninstall-preview", async (c) => {
413
- const workspaceId = c.req.param("workspaceId");
414
- await requireAccessGrant(c, deps, workspaceId, "workspace:read");
415
- const pack = await requirePack(db, workspaceId, c.req.param("packId"));
416
- const installation = await getPackInstallation(db, workspaceId, pack.id);
417
- const installed = Boolean(installation && installation.status !== "disabled");
418
- const components = installed
419
- ? await previewPackComponentRelease(db, workspaceId, installation!.id)
420
- : [];
421
- return c.json(
422
- PackUninstallPreview.parse({
423
- packId: pack.id,
424
- installed,
425
- installationVersion: installation?.version ?? null,
426
- components,
427
- }),
428
- );
429
- });
430
-
431
- app.delete("/v1/workspaces/:workspaceId/packs/:packId/installation", async (c) => {
432
- const workspaceId = c.req.param("workspaceId");
433
- const access = await requireAccessGrantAuthorization(
434
- c,
435
- deps,
436
- workspaceId,
437
- "capabilities:manage",
438
- );
439
- const { grant } = access;
440
- const skillActor = skillRemovalActor(access);
441
- const pack = await requirePack(db, workspaceId, c.req.param("packId"));
442
- const payload = UninstallPackRequest.parse(await c.req.json());
443
- const requestDigest = sha256(
444
- stableJson({
445
- packId: pack.id,
446
- expectedInstallationVersion: payload.expectedInstallationVersion,
447
- }),
448
- );
449
- let prepared: Awaited<ReturnType<typeof preparePackUninstallOperation>>;
450
- try {
451
- prepared = await preparePackUninstallOperation(db, {
452
- accountId: grant.accountId,
453
- workspaceId,
454
- subjectId: grant.subjectId,
455
- packId: pack.id,
456
- expectedInstallationVersion: payload.expectedInstallationVersion,
457
- idempotencyKey: payload.idempotencyKey,
458
- requestDigest,
459
- });
460
- } catch (error) {
461
- throw packMutationHttpError(error);
462
- }
463
- if (!("installation" in prepared)) {
464
- return c.json(
465
- UninstallPackResult.parse({
466
- packId: pack.id,
467
- status:
468
- prepared.replayResult.status === "not_installed" ? "not_installed" : "uninstalled",
469
- retainedComponents: Array.isArray(prepared.replayResult.retainedComponents)
470
- ? prepared.replayResult.retainedComponents
471
- : [],
472
- ...(Array.isArray(prepared.replayResult.skillReleases)
473
- ? { skillReleases: prepared.replayResult.skillReleases }
474
- : {}),
475
- }),
476
- );
477
- }
478
- try {
479
- await touchPackInstallationOperation(db, {
480
- accountId: grant.accountId,
481
- workspaceId,
482
- operationId: prepared.operationId,
483
- operationVersion: prepared.operationVersion,
484
- });
485
- const released = await releasePackComponents(db, {
486
- ...(skillActor ? { skillActor } : {}),
487
- accountId: grant.accountId,
488
- workspaceId,
489
- packInstallationId: prepared.installation.id,
490
- });
491
- await touchPackInstallationOperation(db, {
492
- accountId: grant.accountId,
493
- workspaceId,
494
- operationId: prepared.operationId,
495
- operationVersion: prepared.operationVersion,
496
- });
497
- const result = UninstallPackResult.parse({
498
- packId: pack.id,
499
- status: "uninstalled",
500
- retainedComponents: [...new Set(released.retainedComponents)],
501
- ...(released.skillReleases?.length ? { skillReleases: released.skillReleases } : {}),
502
- });
503
- await finalizePackUninstallOperation(db, {
504
- accountId: grant.accountId,
505
- workspaceId,
506
- operationId: prepared.operationId,
507
- operationVersion: prepared.operationVersion,
508
- packInstallationId: prepared.installation.id,
509
- packId: pack.id,
510
- result,
511
- });
512
- return c.json(result);
513
- } catch (error) {
514
- await deferPackInstallationOperation(db, {
515
- accountId: grant.accountId,
516
- workspaceId,
517
- operationId: prepared.operationId,
518
- operationVersion: prepared.operationVersion,
519
- packInstallationId: prepared.installation.id,
520
- phase: "uninstall_failed",
521
- errorCode: packFailureCode(error),
522
- }).catch(() => undefined);
523
- if (
524
- error instanceof PackOperationClaimLostError ||
525
- error instanceof SkillSourceRemovalAuthorityError
526
- ) {
527
- throw packMutationHttpError(error);
528
- }
529
- if (error instanceof HTTPException) throw error;
530
- throw new HTTPException(422, {
531
- message: "The Pack could not be safely uninstalled. Retry with the same idempotency key.",
532
- });
533
- }
534
- });
535
-
536
- app.post("/v1/workspaces/:workspaceId/packs/:packId/enable", async (c) => {
537
- const workspaceId = c.req.param("workspaceId");
538
- const grant = await requireAccessGrant(c, deps, workspaceId, "capabilities:manage");
539
- const pack = await requirePack(db, workspaceId, c.req.param("packId"));
540
- if (capabilityPackRequiresInstallationPlan(pack)) {
541
- throw new HTTPException(409, {
542
- message:
543
- "This Pack uses component or Rig requirements. Preview and install it through the Pack installation flow.",
544
- });
545
- }
546
- await assertPackSandboxImageCompatible(db, workspaceId, pack);
547
- const existing = await getPackInstallation(db, workspaceId, pack.id);
548
- const payload = EnablePackRequest.parse(await c.req.json());
549
- // Re-enabling without variableSetId keeps the stored attachment instead of
550
- // silently dropping it; the inherited attachment is re-validated below in
551
- // case the variableSet was deleted or its variables changed since. The
552
- // inherited attachment was authorized with variableSets:use when it was
553
- // first attached, so only a fresh attachment re-checks that permission.
554
- // Back-compat: installations enabled before the Variable Set rename stored
555
- // the attachment under `metadata.environmentId`; read it as a fallback so a
556
- // re-enable without an explicit id still inherits the existing attachment.
557
- const storedVariableSetId =
558
- typeof existing?.metadata.variableSetId === "string"
559
- ? existing.metadata.variableSetId
560
- : typeof existing?.metadata.environmentId === "string"
561
- ? existing.metadata.environmentId
562
- : undefined;
563
- const variableSetId = payload.variableSetId ?? storedVariableSetId;
564
- if (pack.variableSet?.required && !variableSetId) {
565
- throw new HTTPException(422, {
566
- message: "this pack requires a variableSet attachment; pass variableSetId",
567
- });
568
- }
569
- if (variableSetId) {
570
- const variableSet = await validateVariableSetAttachment(
571
- { settings, db },
572
- grant,
573
- workspaceId,
574
- variableSetId,
575
- { preauthorized: !payload.variableSetId },
576
- );
577
- const missing = (pack.variableSet?.requiredVariables ?? []).filter(
578
- (name) => !variableSet.variables.some((variable) => variable.name === name),
579
- );
580
- if (missing.length > 0) {
581
- throw new HTTPException(422, {
582
- message: `variableSet is missing required variable(s): ${missing.join(", ")}`,
583
- });
584
- }
585
- }
586
- const installation = await enablePackInstallation(db, {
587
- accountId: grant.accountId,
588
- workspaceId,
589
- packId: pack.id,
590
- metadata: {
591
- ...payload.metadata,
592
- packVersion: pack.version,
593
- ...(variableSetId ? { variableSetId } : {}),
594
- },
595
- });
596
- return c.json(installation, existing ? 200 : 201);
597
- });
598
-
599
- app.post(
600
- "/v1/workspaces/:workspaceId/packs/marketing-social-daily-analysis/scheduled-tasks",
601
- async (c) => {
602
- const workspaceId = c.req.param("workspaceId");
603
- const grant = await requireAccessGrant(c, deps, workspaceId, "scheduled_tasks:manage");
604
- const pack = await requirePack(db, workspaceId, MARKETING_SOCIAL_PACK_ID);
605
- const installation = await getPackInstallation(db, workspaceId, pack.id);
606
- if (installation?.status !== "active") {
607
- throw new HTTPException(409, {
608
- message: "enable the marketing social pack before creating its scheduled tasks",
609
- });
610
- }
611
- const payload = MarketingDailyAnalysisTaskRequest.parse(await c.req.json());
612
- await requireLimit(deps, {
613
- accountId: grant.accountId,
614
- workspaceId,
615
- action: "schedule:create",
616
- quantity: 1,
617
- });
618
- const connections = await resolveSocialConnections(
619
- db,
620
- workspaceId,
621
- payload.connectionIds,
622
- grant.subjectId,
623
- );
624
- if (connections.length === 0) {
625
- throw new HTTPException(422, {
626
- message: "at least one connected social account is required",
627
- });
628
- }
629
- await validateDocumentBaseIds(db, workspaceId, payload.documentBaseIds);
630
- const agentConfig = buildMarketingDailyAnalysisAgentConfig({
631
- connections,
632
- documentBaseIds: payload.documentBaseIds,
633
- ...(payload.promptInstructions ? { promptInstructions: payload.promptInstructions } : {}),
634
- });
635
- // Installation-inherited variableSet attachment: it was authorized with
636
- // variableSets:use at pack-enable time, so the scheduled_tasks:manage
637
- // caller here is not re-checked for that permission.
638
- const installationVariableSetId =
639
- typeof installation.metadata.variableSetId === "string"
640
- ? installation.metadata.variableSetId
641
- : typeof installation.metadata.environmentId === "string"
642
- ? installation.metadata.environmentId
643
- : undefined;
644
- const task = await createValidatedScheduledTask({
645
- settings,
646
- db,
647
- objectStorage,
648
- grant,
649
- variableSetPreauthorized: true,
650
- payload: {
651
- name: payload.name ?? "Daily social media analysis",
652
- status: payload.status,
653
- action: { kind: "agent_turn" },
654
- connectionAuthorities: [],
655
- schedule: {
656
- type: "calendar",
657
- timeZone: payload.timeZone,
658
- hour: payload.hour,
659
- minute: payload.minute,
660
- },
661
- runMode: payload.runMode,
662
- overlapPolicy: payload.overlapPolicy,
663
- agentConfig,
664
- ...(installationVariableSetId ? { variableSetId: installationVariableSetId } : {}),
665
- ...(installation.selectedRigId ? { rigId: installation.selectedRigId } : {}),
666
- metadata: {
667
- packId: pack.id,
668
- packVersion: pack.version,
669
- packTemplateId: "daily-social-analysis",
670
- socialConnectionIds: connections.map((connection) => connection.id),
671
- documentBaseIds: payload.documentBaseIds,
672
- },
673
- },
674
- });
675
- await syncCreatedScheduledTask({ db, workflowClient, task });
676
- return c.json(task, 201);
677
- },
678
- );
679
- }
680
-
681
- function packMutationHttpError(error: unknown): HTTPException {
682
- if (error instanceof SkillSourceRemovalAuthorityError)
683
- return new HTTPException(403, { message: error.message });
684
- if (error instanceof PackManifestChangedError) {
685
- return new HTTPException(409, {
686
- message: "The Pack manifest changed after preview. Review the updated installation plan.",
687
- });
688
- }
689
- if (error instanceof PackOperationClaimLostError) {
690
- return new HTTPException(409, {
691
- message: "This Pack operation was recovered by another request; review the current state",
692
- });
693
- }
694
- if (error instanceof PackOperationIdempotencyError) {
695
- return new HTTPException(409, {
696
- message: "Pack idempotency key was already used",
697
- });
698
- }
699
- if (error instanceof PackOperationInProgressError) {
700
- return new HTTPException(409, {
701
- message: "Another Pack operation is still running; wait for it to finish, then review again",
702
- });
703
- }
704
- if (error instanceof PackInstallationVersionConflictError) {
705
- return new HTTPException(409, {
706
- message: "Pack installation changed after preview",
707
- });
708
- }
709
- if (error instanceof PackInstallationVersionRequiredError) {
710
- return new HTTPException(400, {
711
- message: "Updating or repairing a Pack requires the previewed installation version",
712
- });
713
- }
714
- if (error instanceof HTTPException) return error;
715
- return new HTTPException(422, {
716
- message: error instanceof Error ? error.message : "Pack mutation failed",
717
- });
718
- }
719
-
720
- function packFailureCode(error: unknown): string {
721
- if (error instanceof HTTPException) return `http_${error.status}`;
722
- if (error instanceof PackComponentResolutionError) return `component_${error.status}`;
723
- if (error instanceof CapabilityComponentVersionConflictError) return "component_version_conflict";
724
- return "component_install_failed";
725
- }
726
-
727
- function sha256(value: string): string {
728
- return createHash("sha256").update(value).digest("hex");
729
- }
730
-
731
- async function requirePack(db: ApiRouteDeps["db"], workspaceId: string, packId: string) {
732
- const pack = await resolveCapabilityPack(db, workspaceId, packId);
733
- if (!pack) {
734
- throw new HTTPException(404, { message: "pack not found" });
735
- }
736
- return pack;
737
- }
738
-
739
- async function resolveSocialConnections(
740
- db: ApiRouteDeps["db"],
741
- workspaceId: string,
742
- connectionIds: string[],
743
- subjectId: string,
744
- ): Promise<SocialConnection[]> {
745
- const ids = [...new Set(connectionIds)];
746
- const connections =
747
- ids.length > 0
748
- ? await Promise.all(
749
- ids.map(async (id) => {
750
- const connection = await getSocialConnection(db, workspaceId, id, subjectId);
751
- if (!connection) {
752
- throw new HTTPException(422, {
753
- message: `unknown social connection: ${id}`,
754
- });
755
- }
756
- return connection;
757
- }),
758
- )
759
- : (await listSocialConnections(db, workspaceId, 500, subjectId)).filter(
760
- (connection) => connection.status === "connected",
761
- );
762
- const inactive = connections.find((connection) => connection.status !== "connected");
763
- if (inactive) {
764
- throw new HTTPException(422, {
765
- message: `social connection ${inactive.id} is ${inactive.status}`,
766
- });
767
- }
768
- return connections;
769
- }
770
-
771
- async function validateDocumentBaseIds(
772
- db: ApiRouteDeps["db"],
773
- workspaceId: string,
774
- documentBaseIds: string[],
775
- ): Promise<void> {
776
- for (const baseId of [...new Set(documentBaseIds)]) {
777
- const base = await getDocumentBase(db, workspaceId, baseId);
778
- if (!base) {
779
- throw new HTTPException(422, {
780
- message: `unknown document base: ${baseId}`,
781
- });
782
- }
783
- }
784
- }