@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,7 +1,7 @@
1
1
  import { environmentsEncryptionKeyBytes } from "@opengeni/config";
2
+ import { withOrganizationIntegrationAcquisition } from "@opengeni/db/organization-integration-policy";
2
3
  import {
3
4
  AUTOMATION_WEBHOOK_MAX_BYTES,
4
- OPENGENI_PR_REVIEW_PACK_ID,
5
5
  PrReviewManagedGitHubSetup,
6
6
  type AccessGrant,
7
7
  type GitHubInstallationBindingCandidate,
@@ -9,22 +9,19 @@ import {
9
9
  } from "@opengeni/contracts";
10
10
  import {
11
11
  automationRequestDigest,
12
- getCapabilityPack,
13
12
  hasPermission,
14
- PR_REVIEW_AUTOMATION_TEMPLATE_ID,
15
- prReviewPackConnectorId,
16
13
  requireAutomationAdapter,
17
14
  requireAccessGrantAuthorization,
18
15
  externalActorContinuationForAuthorization,
19
16
  requirePermission,
20
17
  verifyPrReviewWebhook,
21
18
  type ApiRouteDeps,
19
+ PR_REVIEW_AUTOMATION_SETUP,
22
20
  } from "@opengeni/core";
23
21
  import {
24
22
  AutomationDeliveryConflictError,
25
23
  encryptVariableSetValue,
26
24
  getAutomationSourceSecret,
27
- getPackInstallation,
28
25
  listPrReviewAppRegistrations,
29
26
  listPrReviewRepositoryBindings,
30
27
  nestedPostgresSqlState,
@@ -49,9 +46,18 @@ import {
49
46
  } from "@opengeni/github";
50
47
  import type { Context, Hono } from "hono";
51
48
  import { requireLegacyOAuthActor } from "../connection-ownership";
49
+ import {
50
+ integrationCommitGrant,
51
+ type IntegrationCommitGrant,
52
+ } from "../integrations/integration-commit-authority";
52
53
  import { deleteCookie, setCookie } from "hono/cookie";
53
54
  import { HTTPException } from "hono/http-exception";
54
55
  import { githubBrowserBaseUrl } from "../github-browser-flow";
56
+ import {
57
+ prReviewInstallationChooserHtml,
58
+ prReviewSetupPendingHtml,
59
+ prReviewSetupSuccessHtml,
60
+ } from "./github-browser-pages";
55
61
  import { acceptAutomationEvent, readAutomationWebhookBody } from "./automations";
56
62
  import {
57
63
  completeGitHubAppConnect,
@@ -60,13 +66,13 @@ import {
60
66
 
61
67
  const stateCookie = "opengeni_pr_review_github_state";
62
68
  const bindingStateMaxAgeSeconds = 10 * 60;
63
- const appName = "OpenGeni Lens" as const;
69
+ const appName = "Opengeni Lens" as const;
64
70
 
65
71
  export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): void {
66
72
  app.post("/v1/webhooks/pr-review/github", async (c) => {
67
73
  const secret = deps.settings.prReviewGithubWebhookSecret?.trim();
68
74
  if (!secret) {
69
- throw new HTTPException(503, { message: "OpenGeni Lens webhook is unavailable" });
75
+ throw new HTTPException(503, { message: "Opengeni Lens webhook is unavailable" });
70
76
  }
71
77
  const rawBody = await readAutomationWebhookBody(c.req.raw, AUTOMATION_WEBHOOK_MAX_BYTES);
72
78
  if (
@@ -78,13 +84,13 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
78
84
  webhookUsername: null,
79
85
  })
80
86
  ) {
81
- throw new HTTPException(401, { message: "OpenGeni Lens signature is invalid" });
87
+ throw new HTTPException(401, { message: "Opengeni Lens signature is invalid" });
82
88
  }
83
89
  let payload: unknown;
84
90
  try {
85
91
  payload = JSON.parse(new TextDecoder().decode(rawBody));
86
92
  } catch {
87
- throw new HTTPException(400, { message: "OpenGeni Lens payload is invalid JSON" });
93
+ throw new HTTPException(400, { message: "Opengeni Lens payload is invalid JSON" });
88
94
  }
89
95
  const record = asRecord(payload);
90
96
  const installationId = positiveInteger(asRecord(record?.installation)?.id);
@@ -131,7 +137,7 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
131
137
  const workspaceId = c.req.param("workspaceId");
132
138
  const access = await requireAccessGrantAuthorization(c, deps, workspaceId, "workspace:read");
133
139
  const grant = access.grant;
134
- await requireActivePack(deps, workspaceId);
140
+
135
141
  const missing = prReviewGitHubAppMissingSettings(deps.settings);
136
142
  const configured = missing.length === 0;
137
143
  const registrations = (
@@ -200,10 +206,10 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
200
206
 
201
207
  app.get("/v1/workspaces/:workspaceId/pr-review/github/connect", async (c) => {
202
208
  const workspaceId = c.req.param("workspaceId");
203
- const state = requireStateQuery(c, "missing OpenGeni Lens installation state");
209
+ const state = requireStateQuery(c, "missing Opengeni Lens installation state");
204
210
  const payload = requireFreshState(state, deps, "pr_review_github_authority", workspaceId);
205
211
  await requirePrReviewManageGrant(c, deps, workspaceId, payload);
206
- await requireActivePack(deps, workspaceId);
212
+
207
213
  assertManagedCompute(deps);
208
214
  requireConfiguredApp(deps);
209
215
  const discoveryState = createSignedState(deps.githubStateSecret, {
@@ -227,13 +233,13 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
227
233
  async (c) => {
228
234
  const workspaceId = c.req.param("workspaceId");
229
235
  const installationId = positiveInteger(c.req.param("installationId"));
230
- const state = requireStateQuery(c, "missing OpenGeni Lens configuration state");
236
+ const state = requireStateQuery(c, "missing Opengeni Lens configuration state");
231
237
  const payload = requireFreshState(state, deps, "pr_review_github_install", workspaceId);
232
238
  if (installationId === null || payload.expectedInstallationId !== installationId) {
233
- throw new HTTPException(400, { message: "invalid OpenGeni Lens installation" });
239
+ throw new HTTPException(400, { message: "invalid Opengeni Lens installation" });
234
240
  }
235
241
  await requirePrReviewManageGrant(c, deps, workspaceId, payload);
236
- await requireActivePack(deps, workspaceId);
242
+
237
243
  assertManagedCompute(deps);
238
244
  const registrations = await listPrReviewAppRegistrations(
239
245
  deps.db,
@@ -246,7 +252,7 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
246
252
  candidate.installationId === String(installationId),
247
253
  );
248
254
  if (!registration) {
249
- throw new HTTPException(404, { message: "OpenGeni Lens installation is not connected" });
255
+ throw new HTTPException(404, { message: "Opengeni Lens installation is not connected" });
250
256
  }
251
257
  setStateCookie(c, deps, state);
252
258
  const configureUrl = githubInstallationSettingsUrl(
@@ -275,14 +281,14 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
275
281
  const payload = readSignedState(candidate, deps.githubStateSecret);
276
282
  return payload?.intent === "pr_review_github_install" && isFreshState(payload);
277
283
  });
278
- if (!state) throw new HTTPException(400, { message: "missing OpenGeni Lens state" });
284
+ if (!state) throw new HTTPException(400, { message: "missing Opengeni Lens state" });
279
285
  const payload = requireFreshState(state, deps, "pr_review_github_install");
280
286
  requireStateCookie(c, state);
281
287
  await requirePrReviewManageGrant(c, deps, payload.workspaceId!, payload);
282
- await requireActivePack(deps, payload.workspaceId!);
288
+
283
289
  assertManagedCompute(deps);
284
290
  const setupAction = c.req.query("setup_action");
285
- if (setupAction === "request") return c.html(setupPendingHtml());
291
+ if (setupAction === "request") return c.html(prReviewSetupPendingHtml());
286
292
  if (setupAction !== "install" && setupAction !== "update") {
287
293
  throw new HTTPException(400, { message: "unsupported GitHub setup action" });
288
294
  }
@@ -295,7 +301,7 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
295
301
  payload.expectedInstallationId !== installationId
296
302
  ) {
297
303
  throw new HTTPException(409, {
298
- message: "GitHub returned a different OpenGeni Lens installation",
304
+ message: "GitHub returned a different Opengeni Lens installation",
299
305
  });
300
306
  }
301
307
  requireConfiguredApp(deps);
@@ -331,15 +337,16 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
331
337
  const code = c.req.query("code");
332
338
  const state = c.req.query("state");
333
339
  if (!code || !state) {
334
- throw new HTTPException(400, { message: "missing OpenGeni Lens OAuth code or state" });
340
+ throw new HTTPException(400, { message: "missing Opengeni Lens OAuth code or state" });
335
341
  }
336
342
  const payload = requireFreshState(state, deps);
337
343
  requireStateCookie(c, state);
338
344
  const grant = await requirePrReviewManageGrant(c, deps, payload.workspaceId!, payload);
339
- const packInstallation = await requireActivePack(deps, grant.workspaceId);
345
+
340
346
  assertManagedCompute(deps);
341
347
  requireConfiguredApp(deps);
342
348
 
349
+ await withOrganizationIntegrationAcquisition(deps.db, grant, ["github-lens"], async () => {});
343
350
  if (payload.intent === "pr_review_github_discovery") {
344
351
  let candidates: GitHubInstallationBindingCandidate[] | null;
345
352
  try {
@@ -356,7 +363,7 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
356
363
  }
357
364
  if (!candidates || !consistentCandidates(candidates)) {
358
365
  throw new HTTPException(409, {
359
- message: "OpenGeni Lens could not prove owner-authorized installations",
366
+ message: "Opengeni Lens could not prove owner-authorized installations",
360
367
  });
361
368
  }
362
369
  const selectionState = createSignedState(deps.githubStateSecret, {
@@ -377,16 +384,20 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
377
384
  }
378
385
  setStateCookie(c, deps, selectionState);
379
386
  return c.html(
380
- installationChooserHtml(candidates, selectionState, grant.workspaceId, deps, c),
387
+ prReviewInstallationChooserHtml(
388
+ candidates,
389
+ selectionState,
390
+ `${openGeniBaseUrl(deps, c)}/v1/workspaces/${grant.workspaceId}/pr-review/github/installations/select`,
391
+ ),
381
392
  );
382
393
  }
383
394
 
384
395
  if (payload.intent !== "pr_review_github_oauth") {
385
- throw new HTTPException(400, { message: "invalid or expired OpenGeni Lens OAuth state" });
396
+ throw new HTTPException(400, { message: "invalid or expired Opengeni Lens OAuth state" });
386
397
  }
387
398
  const installationId = positiveInteger(payload.installationId);
388
399
  if (installationId === null) {
389
- throw new HTTPException(400, { message: "invalid OpenGeni Lens installation id" });
400
+ throw new HTTPException(400, { message: "invalid Opengeni Lens installation id" });
390
401
  }
391
402
  let proof: GitHubInstallationBindingProof | null;
392
403
  try {
@@ -403,53 +414,55 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
403
414
  }
404
415
  if (!proof || !consistentProof(proof, installationId)) {
405
416
  throw new HTTPException(409, {
406
- message: "OpenGeni Lens installation proof is stale or invalid",
417
+ message: "Opengeni Lens installation proof is stale or invalid",
407
418
  });
408
419
  }
409
420
  const repositoryIds = new Set(proof.repositories.map((repository) => repository.id));
410
421
  if (repositoryIds.size !== proof.repositories.length) {
411
422
  throw new HTTPException(409, { message: "GitHub returned duplicate repository identities" });
412
423
  }
413
- const template = getCapabilityPack(OPENGENI_PR_REVIEW_PACK_ID)?.automationTemplates?.find(
414
- (candidate) => candidate.id === PR_REVIEW_AUTOMATION_TEMPLATE_ID,
415
- );
416
- if (!template) {
417
- throw new HTTPException(503, { message: "PR Review automation template is unavailable" });
418
- }
424
+ const template = PR_REVIEW_AUTOMATION_SETUP;
425
+
419
426
  const encryptionKey = environmentsEncryptionKeyBytes(deps.settings);
420
427
  if (!encryptionKey) {
421
428
  throw new HTTPException(503, {
422
- message: "OpenGeni Lens requires configured secret encryption",
429
+ message: "Opengeni Lens requires configured secret encryption",
423
430
  });
424
431
  }
425
432
  let synchronized;
426
433
  try {
427
- synchronized = await syncManagedGitHubPrReviewInstallation(deps.db, {
428
- accountId: grant.accountId,
429
- workspaceId: grant.workspaceId,
430
- installationId,
431
- providerAccountLogin: proof.installation.accountLogin,
432
- providerAccountType: proof.installation.accountType as "User" | "Organization",
433
- githubActorId: proof.actorId,
434
- authorityKind: proof.authorityKind,
435
- authorityCheckedAt: new Date(),
436
- authorityExpiresAt: new Date((payload.iat + bindingStateMaxAgeSeconds) * 1_000),
437
- authorityNonce: payload.nonce,
438
- appId: deps.settings.prReviewGithubAppId!,
439
- webhookSecretEncrypted: encryptVariableSetValue(
440
- encryptionKey,
441
- deps.settings.prReviewGithubWebhookSecret!,
442
- ),
443
- repositories: proof.repositories,
444
- createdBySubjectId: grant.subjectId,
445
- packInstallationId: packInstallation.id,
446
- packConnectorId: prReviewPackConnectorId("github"),
447
- packTemplateId: template.id,
448
- adapterId: template.adapterId,
449
- eventTypes: template.eventTypes,
450
- configuration: template.configuration,
451
- sessionTemplate: template.sessionTemplate,
452
- });
434
+ synchronized = await withOrganizationIntegrationAcquisition(
435
+ deps.db,
436
+ grant,
437
+ ["github-lens"],
438
+ async (tx) => {
439
+ await grant.authorizeCommit(tx);
440
+ return syncManagedGitHubPrReviewInstallation(tx, {
441
+ accountId: grant.accountId,
442
+ workspaceId: grant.workspaceId,
443
+ installationId,
444
+ providerAccountLogin: proof.installation.accountLogin,
445
+ providerAccountType: proof.installation.accountType as "User" | "Organization",
446
+ githubActorId: proof.actorId,
447
+ authorityKind: proof.authorityKind,
448
+ authorityCheckedAt: new Date(),
449
+ authorityExpiresAt: new Date((payload.iat + bindingStateMaxAgeSeconds) * 1_000),
450
+ authorityNonce: payload.nonce,
451
+ appId: deps.settings.prReviewGithubAppId!,
452
+ webhookSecretEncrypted: encryptVariableSetValue(
453
+ encryptionKey,
454
+ deps.settings.prReviewGithubWebhookSecret!,
455
+ ),
456
+ repositories: proof.repositories,
457
+ createdBySubjectId: grant.subjectId,
458
+
459
+ adapterId: template.adapterId,
460
+ eventTypes: template.eventTypes,
461
+ configuration: template.configuration,
462
+ sessionTemplate: template.sessionTemplate,
463
+ });
464
+ },
465
+ );
453
466
  } catch (error) {
454
467
  if (error instanceof PrReviewDispatchAuthorityError) {
455
468
  throw new HTTPException(409, { message: error.message });
@@ -457,7 +470,7 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
457
470
  if (nestedPostgresSqlState(error) === "23505") {
458
471
  throw new HTTPException(409, {
459
472
  message:
460
- "One of these repositories is already connected to OpenGeni Lens in another workspace",
473
+ "One of these repositories is already connected to Opengeni Lens in another workspace",
461
474
  });
462
475
  }
463
476
  throw error;
@@ -479,7 +492,7 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
479
492
  });
480
493
  deleteCookie(c, stateCookie, { path: "/v1" });
481
494
  return c.html(
482
- setupSuccessHtml(
495
+ prReviewSetupSuccessHtml(
483
496
  proof.installation.accountLogin ?? `installation ${installationId}`,
484
497
  `${openGeniBaseUrl(deps, c)}/workspaces/${grant.workspaceId}/capabilities`,
485
498
  ),
@@ -488,11 +501,11 @@ export function registerPrReviewGitHubRoutes(app: Hono, deps: ApiRouteDeps): voi
488
501
 
489
502
  app.get("/v1/workspaces/:workspaceId/pr-review/github/installations/select", async (c) => {
490
503
  const workspaceId = c.req.param("workspaceId");
491
- const state = requireStateQuery(c, "missing OpenGeni Lens selection state");
504
+ const state = requireStateQuery(c, "missing Opengeni Lens selection state");
492
505
  const payload = requireFreshState(state, deps, "pr_review_github_selection", workspaceId);
493
506
  requireStateCookie(c, state);
494
507
  await requirePrReviewManageGrant(c, deps, workspaceId, payload);
495
- await requireActivePack(deps, workspaceId);
508
+
496
509
  const selected = c.req.query("installation_id");
497
510
  if (selected === "new") return redirectToInstallation(c, deps, state);
498
511
  const installationId = positiveInteger(selected);
@@ -513,24 +526,14 @@ function requireConfiguredApp(deps: ApiRouteDeps): void {
513
526
  const missing = prReviewGitHubAppMissingSettings(deps.settings);
514
527
  if (missing.length > 0) {
515
528
  throw new HTTPException(409, {
516
- message: JSON.stringify({ message: "OpenGeni Lens is not configured", missing }),
529
+ message: JSON.stringify({ message: "Opengeni Lens is not configured", missing }),
517
530
  });
518
531
  }
519
532
  }
520
533
 
521
- async function requireActivePack(deps: ApiRouteDeps, workspaceId: string) {
522
- const installation = await getPackInstallation(deps.db, workspaceId, OPENGENI_PR_REVIEW_PACK_ID);
523
- if (installation?.status !== "active") {
524
- throw new HTTPException(409, {
525
- message: "Install and enable the OpenGeni Review Bot Pack first",
526
- });
527
- }
528
- return installation;
529
- }
530
-
531
534
  function assertManagedCompute(deps: ApiRouteDeps): void {
532
535
  if (deps.settings.sandboxBackend === "selfhosted") {
533
- throw new HTTPException(409, { message: "OpenGeni Lens requires managed compute" });
536
+ throw new HTTPException(409, { message: "Opengeni Lens requires managed compute" });
534
537
  }
535
538
  }
536
539
 
@@ -539,21 +542,37 @@ async function requirePrReviewManageGrant(
539
542
  deps: ApiRouteDeps,
540
543
  workspaceId: string,
541
544
  state: GitHubSignedStatePayload,
542
- ): Promise<AccessGrant> {
543
- let grant: AccessGrant;
545
+ ): Promise<IntegrationCommitGrant> {
546
+ let grant: IntegrationCommitGrant;
544
547
  try {
545
548
  const access = await requireAccessGrantAuthorization(c, deps, workspaceId, "workspace:admin");
546
549
  requireLegacyOAuthActor(access);
547
- grant = access.grant;
550
+ grant = await integrationCommitGrant(access, ["workspace:admin", "secrets:write"], {
551
+ settings: deps.settings,
552
+ authorizationHeader: c.req.header("authorization"),
553
+ });
548
554
  } catch (error) {
549
555
  if (!(error instanceof HTTPException) || error.status !== 401) throw error;
550
556
  const handedOff = prReviewBrowserGrantFromState(deps, state, workspaceId);
551
557
  if (!handedOff) throw error;
552
- grant = handedOff;
558
+ grant = {
559
+ ...handedOff,
560
+ authorizeCommit: async () => {
561
+ const current = prReviewBrowserGrantFromState(deps, state, workspaceId);
562
+ if (
563
+ !current ||
564
+ current.accountId !== handedOff.accountId ||
565
+ current.subjectId !== handedOff.subjectId
566
+ )
567
+ throw new HTTPException(403, {
568
+ message: "Opengeni Lens browser handoff expired or changed",
569
+ });
570
+ },
571
+ };
553
572
  }
554
573
  requirePermission(grant, "secrets:write");
555
574
  if (grant.accountId !== state.accountId) {
556
- throw new HTTPException(403, { message: "OpenGeni Lens state does not match this workspace" });
575
+ throw new HTTPException(403, { message: "Opengeni Lens state does not match this workspace" });
557
576
  }
558
577
  return grant;
559
578
  }
@@ -615,7 +634,7 @@ function redirectToInstallation(c: Context, deps: ApiRouteDeps, sourceState: str
615
634
  const payload = readSignedState(sourceState, deps.githubStateSecret);
616
635
  const slug = deps.settings.prReviewGithubAppSlug?.trim();
617
636
  if (!payload?.accountId || !payload.workspaceId || !slug) {
618
- throw new HTTPException(409, { message: "OpenGeni Lens installation is unavailable" });
637
+ throw new HTTPException(409, { message: "Opengeni Lens installation is unavailable" });
619
638
  }
620
639
  const installState = createSignedState(deps.githubStateSecret, {
621
640
  accountId: payload.accountId,
@@ -638,7 +657,7 @@ function redirectToExactAuthorization(
638
657
  const payload = readSignedState(sourceState, deps.githubStateSecret);
639
658
  const clientId = deps.settings.prReviewGithubClientId?.trim();
640
659
  if (!payload?.accountId || !payload.workspaceId || !clientId) {
641
- throw new HTTPException(409, { message: "OpenGeni Lens authorization is unavailable" });
660
+ throw new HTTPException(409, { message: "Opengeni Lens authorization is unavailable" });
642
661
  }
643
662
  const oauthState = createSignedState(deps.githubStateSecret, {
644
663
  accountId: payload.accountId,
@@ -672,7 +691,7 @@ function requireFreshState(
672
691
  (intent !== undefined && payload.intent !== intent) ||
673
692
  (workspaceId !== undefined && payload.workspaceId !== workspaceId)
674
693
  ) {
675
- throw new HTTPException(400, { message: "invalid or expired OpenGeni Lens state" });
694
+ throw new HTTPException(400, { message: "invalid or expired Opengeni Lens state" });
676
695
  }
677
696
  return payload;
678
697
  }
@@ -703,7 +722,7 @@ function setStateCookie(c: Context, deps: ApiRouteDeps, state: string): void {
703
722
 
704
723
  function requireStateCookie(c: Context, state: string): void {
705
724
  if (!allCookieValues(c, stateCookie).includes(state)) {
706
- throw new HTTPException(400, { message: "invalid OpenGeni Lens browser state" });
725
+ throw new HTTPException(400, { message: "invalid Opengeni Lens browser state" });
707
726
  }
708
727
  }
709
728
 
@@ -794,7 +813,7 @@ function authorityHttpError(error: unknown): HTTPException {
794
813
  if (error instanceof GitHubAppApiError) {
795
814
  return new HTTPException(502, { message: error.message });
796
815
  }
797
- return new HTTPException(502, { message: "OpenGeni Lens authority verification failed" });
816
+ return new HTTPException(502, { message: "Opengeni Lens authority verification failed" });
798
817
  }
799
818
 
800
819
  function positiveInteger(value: unknown): number | null {
@@ -837,35 +856,3 @@ function githubInstallationSettingsUrl(
837
856
  function openGeniBaseUrl(deps: ApiRouteDeps, c: Context): string {
838
857
  return githubBrowserBaseUrl(deps.settings, new URL(c.req.url).origin);
839
858
  }
840
-
841
- function escapeHtml(value: string): string {
842
- return value.replace(
843
- /[&<>"']/g,
844
- (char) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[char]!,
845
- );
846
- }
847
-
848
- function installationChooserHtml(
849
- candidates: GitHubInstallationBindingCandidate[],
850
- state: string,
851
- workspaceId: string,
852
- deps: ApiRouteDeps,
853
- c: Context,
854
- ): string {
855
- const action = `${openGeniBaseUrl(deps, c)}/v1/workspaces/${workspaceId}/pr-review/github/installations/select`;
856
- const options = candidates
857
- .map(
858
- ({ installation, authorityKind }) =>
859
- `<label class="option"><input type="radio" name="installation_id" value="${installation.installationId}" required><span><strong>${escapeHtml(installation.accountLogin!)}</strong><small>${authorityKind === "personal_owner" ? "Personal account" : "Organization owner"}</small></span></label>`,
860
- )
861
- .join("");
862
- return `<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Choose GitHub account</title><style>body{font-family:system-ui,sans-serif;margin:0;min-height:100vh;display:grid;place-items:center;background:#0b0b0d;color:#f4f4f5}main{width:min(640px,calc(100vw - 32px));border:1px solid #27272a;border-radius:12px;padding:28px;background:#111114}h1{margin:0 0 10px;font-size:24px}p{color:#d4d4d8}.options{display:grid;gap:8px;margin-bottom:18px}.option{display:flex;gap:12px;border:1px solid #3f3f46;border-radius:8px;padding:12px}.option span{display:grid}.option small{color:#a1a1aa}button{min-height:38px;border-radius:7px;border:1px solid #3f3f46;padding:0 14px;font-weight:600}.secondary{margin-left:8px;background:transparent;color:#f4f4f5}</style></head><body><main><h1>Connect OpenGeni Lens</h1><p>Choose an account where GitHub proved you are the owner.</p><form method="get" action="${escapeHtml(action)}"><input type="hidden" name="state" value="${escapeHtml(state)}"><div class="options">${options}</div><button type="submit">Connect selected</button><button class="secondary" type="submit" name="installation_id" value="new" formnovalidate>Install on another account</button></form></main></body></html>`;
863
- }
864
-
865
- function setupSuccessHtml(account: string, returnUrl: string): string {
866
- return `<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>OpenGeni Lens Connected</title><style>body{font-family:system-ui,sans-serif;margin:0;min-height:100vh;display:grid;place-items:center;background:#0b0b0d;color:#f4f4f5}main{width:min(640px,calc(100vw - 32px));border:1px solid #27272a;border-radius:8px;padding:28px;background:#111114}p{color:#d4d4d8}.button{display:inline-flex;min-height:36px;align-items:center;border-radius:6px;padding:0 12px;background:#f4f4f5;color:#09090b;font-weight:600;text-decoration:none}</style></head><body><main><h1>OpenGeni Lens connected</h1><p>${escapeHtml(account)} and its selected repositories are ready for pull-request review.</p><a class="button" href="${escapeHtml(returnUrl)}">Back to OpenGeni</a></main></body></html>`;
867
- }
868
-
869
- function setupPendingHtml(): string {
870
- return `<!doctype html><html><head><meta charset="utf-8"><title>OpenGeni Lens Requested</title></head><body><main><h1>Installation requested</h1><p>A GitHub organization owner must approve OpenGeni Lens. No repository was connected yet.</p></main></body></html>`;
871
- }