@opengeni/api-router 0.30.1 → 1.0.0

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 (436) hide show
  1. package/dist/access-grant-rls.d.ts +3 -0
  2. package/dist/admission-trace.d.ts +8 -0
  3. package/dist/api-websocket.d.ts +18 -0
  4. package/dist/app.d.ts +50 -2
  5. package/dist/app.js +12 -1
  6. package/dist/artifact-catalog-cursor.d.ts +27 -0
  7. package/dist/auth/managed-auth-attempt-context.d.ts +10 -0
  8. package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
  9. package/dist/auth/managed-auth-session-adapter.d.ts +6 -0
  10. package/dist/auth/managed-auth.d.ts +102 -3
  11. package/dist/auth/managed-email.d.ts +29 -0
  12. package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
  13. package/dist/auth/new-signups-gate.d.ts +23 -0
  14. package/dist/auth/organization-user-setup.d.ts +80 -0
  15. package/dist/auth/signup-funnel-metrics.d.ts +44 -0
  16. package/dist/browser-controller-authority.d.ts +1 -61
  17. package/dist/browser-ephemeral.d.ts +5 -0
  18. package/dist/browser-state-authority.d.ts +1 -27
  19. package/dist/chunk-6TZ5LG3O.js +123948 -0
  20. package/dist/chunk-6TZ5LG3O.js.map +1 -0
  21. package/dist/chunk-OGQDXVXY.js +18 -0
  22. package/dist/chunk-OGQDXVXY.js.map +1 -0
  23. package/dist/claude-subscription-account-conflicts.d.ts +1 -0
  24. package/dist/claude-subscription-account-usage.d.ts +39 -0
  25. package/dist/claude-subscription-oauth.d.ts +25 -0
  26. package/dist/claude-subscription-profile.d.ts +9 -0
  27. package/dist/claude-subscription-usage.d.ts +44 -0
  28. package/dist/claude-workspace-connection.d.ts +15 -0
  29. package/dist/codemode.d.ts +32 -1
  30. package/dist/company-brain-okf.d.ts +24 -0
  31. package/dist/connected-machine-computer-access.d.ts +11 -0
  32. package/dist/connection-ownership.d.ts +54 -0
  33. package/dist/controller-data-plane.d.ts +32 -0
  34. package/dist/editable-artifact-office-import.d.ts +7 -4
  35. package/dist/editable-artifact-source-session.d.ts +3 -0
  36. package/dist/editable-artifact-websocket.d.ts +10 -18
  37. package/dist/editable-artifact-workspace-files.d.ts +1 -1
  38. package/dist/fatal-process-boundary.d.ts +25 -0
  39. package/dist/github-access.d.ts +31 -2
  40. package/dist/http/acting-person.d.ts +24 -0
  41. package/dist/http/api-contract-compat.d.ts +19 -0
  42. package/dist/http/api-error.d.ts +27 -1
  43. package/dist/http/cors.d.ts +17 -0
  44. package/dist/http/deprecation.d.ts +42 -0
  45. package/dist/http/interaction-control-error.d.ts +13 -0
  46. package/dist/http/keyed-admission.d.ts +12 -0
  47. package/dist/http/local-browser-boundary.d.ts +72 -0
  48. package/dist/http/metrics-listener.d.ts +22 -0
  49. package/dist/http/path-identifier.d.ts +17 -0
  50. package/dist/http/registered-route-label.d.ts +16 -0
  51. package/dist/http/request-body.d.ts +27 -0
  52. package/dist/http/request-source.d.ts +52 -0
  53. package/dist/http/sse.d.ts +17 -6
  54. package/dist/http/unmatched-route.d.ts +18 -0
  55. package/dist/http/user-content.d.ts +36 -0
  56. package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
  57. package/dist/index.d.ts +10 -3
  58. package/dist/index.js +1129 -166
  59. package/dist/index.js.map +1 -1
  60. package/dist/integration-endpoint-test.d.ts +20 -0
  61. package/dist/integrations/api-integrations.d.ts +2 -2
  62. package/dist/integrations/atlassian.d.ts +29 -3
  63. package/dist/integrations/connect-authority.d.ts +1 -0
  64. package/dist/integrations/connect-callback-return.d.ts +6 -0
  65. package/dist/integrations/fiken.d.ts +16 -2
  66. package/dist/integrations/github-app-connect.d.ts +47 -0
  67. package/dist/integrations/github-installation-proof.d.ts +3 -0
  68. package/dist/integrations/github-lens-connect.d.ts +116 -0
  69. package/dist/integrations/github-skill-source.d.ts +1 -5
  70. package/dist/integrations/google-drive.d.ts +25 -0
  71. package/dist/integrations/integration-commit-authority.d.ts +13 -0
  72. package/dist/integrations/marketplace-plugin.d.ts +2691 -0
  73. package/dist/integrations/oauth-client.d.ts +178 -18
  74. package/dist/integrations/oauth-profiles.d.ts +222 -0
  75. package/dist/integrations/oauth-return-path.d.ts +1 -0
  76. package/dist/integrations/personal-github-repositories.d.ts +84 -0
  77. package/dist/integrations/personal-github.d.ts +42 -0
  78. package/dist/integrations/pr-review-provider.d.ts +22 -0
  79. package/dist/integrations/provider-oauth.d.ts +19 -1
  80. package/dist/integrations/slack-app-home.d.ts +24 -0
  81. package/dist/integrations/slack-bot.d.ts +367 -12
  82. package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
  83. package/dist/integrations/slack-install.d.ts +20 -0
  84. package/dist/integrations/slack-interactions.d.ts +113 -10
  85. package/dist/integrations/slack-mrkdwn.d.ts +41 -0
  86. package/dist/integrations/slack-routing.d.ts +120 -0
  87. package/dist/integrations/slack-session-defaults.d.ts +58 -0
  88. package/dist/integrations/slack-task-file-upload.d.ts +36 -0
  89. package/dist/integrations/social-oauth.d.ts +7 -0
  90. package/dist/interaction-agent-access.d.ts +15 -0
  91. package/dist/interaction-frame-proxy.d.ts +68 -0
  92. package/dist/interaction-metrics.d.ts +2 -0
  93. package/dist/mcp/action-catalog-types.d.ts +9 -0
  94. package/dist/mcp/action-catalog.gen.d.ts +2 -0
  95. package/dist/mcp/capability-account-readiness.d.ts +7 -0
  96. package/dist/mcp/child-read-evidence.d.ts +9 -0
  97. package/dist/mcp/command-read.d.ts +24 -0
  98. package/dist/mcp/company-profile-agent-admin.d.ts +44 -0
  99. package/dist/mcp/contract-input.d.ts +11 -0
  100. package/dist/mcp/documents.d.ts +7 -5
  101. package/dist/mcp/files.d.ts +2 -2
  102. package/dist/mcp/first-party-tool-permissions.d.ts +650 -0
  103. package/dist/mcp/knowledge-entries.d.ts +5 -0
  104. package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
  105. package/dist/mcp/receipts.d.ts +9 -0
  106. package/dist/mcp/request-abort.d.ts +19 -0
  107. package/dist/mcp/scheduled-task-input.d.ts +1189 -0
  108. package/dist/mcp/scheduled-task-view.d.ts +22 -4
  109. package/dist/mcp/server.d.ts +255 -3
  110. package/dist/mcp/session-event-view.d.ts +94 -0
  111. package/dist/mcp/session-view.d.ts +66 -2
  112. package/dist/mcp/session-wait.d.ts +174 -0
  113. package/dist/mcp-oauth.d.ts +52 -0
  114. package/dist/model-catalog.d.ts +11 -31
  115. package/dist/observability.d.ts +3 -1
  116. package/dist/organization-mcp.d.ts +52 -0
  117. package/dist/organization-recovery-notifications.d.ts +41 -0
  118. package/dist/routes/analytics-consent.d.ts +26 -0
  119. package/dist/routes/api-integrations.d.ts +25 -0
  120. package/dist/routes/api-keys.d.ts +17 -0
  121. package/dist/routes/artifact-catalog.d.ts +6 -0
  122. package/dist/routes/automations.d.ts +19 -0
  123. package/dist/routes/billing.d.ts +49 -0
  124. package/dist/routes/browser-sessions.d.ts +71 -3
  125. package/dist/routes/claude-subscription-accounts.d.ts +3 -0
  126. package/dist/routes/claude-subscription-oauth.d.ts +3 -0
  127. package/dist/routes/client-errors.d.ts +146 -0
  128. package/dist/routes/codex.d.ts +76 -2
  129. package/dist/routes/company-brain.d.ts +3 -0
  130. package/dist/routes/company-profile.d.ts +2 -1
  131. package/dist/routes/computer-sessions.d.ts +14 -0
  132. package/dist/routes/connect.d.ts +5 -0
  133. package/dist/routes/editable-artifacts.d.ts +2 -0
  134. package/dist/routes/external-identity-links.d.ts +6 -0
  135. package/dist/routes/feedback.d.ts +3 -0
  136. package/dist/routes/files.d.ts +4 -0
  137. package/dist/routes/github-browser-pages.d.ts +12 -0
  138. package/dist/routes/github.d.ts +2 -0
  139. package/dist/routes/insights-response-cache.d.ts +10 -0
  140. package/dist/routes/insights-usage.d.ts +12 -0
  141. package/dist/routes/insights.d.ts +30 -1
  142. package/dist/routes/knowledge.d.ts +3 -0
  143. package/dist/routes/managed-auth-session-sets.d.ts +26 -0
  144. package/dist/routes/managed-onboarding.d.ts +29 -0
  145. package/dist/routes/managed-sign-in-methods.d.ts +6 -0
  146. package/dist/routes/model-connection-access.d.ts +3 -0
  147. package/dist/routes/organization-integration-policy.d.ts +3 -0
  148. package/dist/routes/organization-integrations.d.ts +6 -0
  149. package/dist/routes/organization-mcp-connections.d.ts +3 -0
  150. package/dist/routes/organization-model-providers.d.ts +3 -0
  151. package/dist/routes/organization-recovery.d.ts +19 -0
  152. package/dist/routes/organization-service-accounts.d.ts +3 -0
  153. package/dist/routes/organization-sessions.d.ts +26 -0
  154. package/dist/routes/personal-github-git-broker.d.ts +29 -0
  155. package/dist/routes/personal-github.d.ts +3 -0
  156. package/dist/routes/pr-review-github.d.ts +3 -0
  157. package/dist/routes/pr-review.d.ts +3 -0
  158. package/dist/routes/session-artifact-associations.d.ts +4 -0
  159. package/dist/routes/session-history-imports.d.ts +9 -0
  160. package/dist/routes/sessions.d.ts +44 -6
  161. package/dist/routes/skill-content.d.ts +4 -0
  162. package/dist/routes/skill-install-authority.d.ts +6 -0
  163. package/dist/routes/subscription-account-pools.d.ts +34 -0
  164. package/dist/routes/subscription-pool-access.d.ts +16 -0
  165. package/dist/routes/supergrok.d.ts +6 -1
  166. package/dist/routes/usage-allowances.d.ts +12 -0
  167. package/dist/routes/user-resource-authorities.d.ts +3 -0
  168. package/dist/routes/workspace-artifacts.d.ts +2 -1
  169. package/dist/routes/workspace-capture.d.ts +10 -2
  170. package/dist/routes/workspace-integrations.d.ts +35 -0
  171. package/dist/routes/workspace-learning.d.ts +3 -0
  172. package/dist/routes/workspace-model-providers.d.ts +4 -0
  173. package/dist/routes/workspaces.d.ts +29 -0
  174. package/dist/sandbox/auth-callout.d.ts +8 -0
  175. package/dist/sandbox/channel-a.d.ts +19 -1
  176. package/dist/sandbox/connection-authority.d.ts +3 -0
  177. package/dist/sandbox/enrollment.d.ts +9 -1
  178. package/dist/sandbox/machines.d.ts +5 -2
  179. package/dist/sandbox/metrics-ingestion.d.ts +28 -20
  180. package/dist/sandbox/rematerialize.d.ts +2 -0
  181. package/dist/sandbox/session-attach-variable-sets.d.ts +30 -0
  182. package/dist/sandbox/viewer.d.ts +26 -1
  183. package/dist/sandbox-file-artifacts.d.ts +50 -0
  184. package/dist/scheduled-task-deletion.d.ts +13 -0
  185. package/dist/session-create-observability.d.ts +5 -0
  186. package/dist/session-event-view-MPS2OZD3.js +292 -0
  187. package/dist/session-event-view-MPS2OZD3.js.map +1 -0
  188. package/dist/site-session-origin.d.ts +13 -0
  189. package/dist/site-uploads.d.ts +41 -0
  190. package/dist/slack-reaction-files.d.ts +1 -1
  191. package/dist/temporal-schedule-cleanup.d.ts +1 -0
  192. package/dist/temporal-schedule-sync.d.ts +26 -0
  193. package/dist/transcription/providers/xai-subscription.d.ts +1 -0
  194. package/dist/transcription/service.d.ts +2 -1
  195. package/dist/work-discovery-observability.d.ts +33 -0
  196. package/dist/workspace-artifact-content.d.ts +28 -0
  197. package/dist/workspace-artifact-provenance.d.ts +7 -0
  198. package/dist/workspace-delete-observability.d.ts +10 -0
  199. package/dist/workspace-deletion.d.ts +6 -0
  200. package/dist/workspace-state-projection.d.ts +3 -5
  201. package/dist/workspace-tool-gateway-observability.d.ts +17 -0
  202. package/dist/workspace-tool-gateway.d.ts +123 -0
  203. package/dist/workspace-webhook-dispatch.d.ts +26 -0
  204. package/package.json +23 -19
  205. package/src/access-grant-rls.ts +75 -0
  206. package/src/admission-trace.ts +14 -0
  207. package/src/api-websocket.ts +23 -0
  208. package/src/app.ts +1974 -256
  209. package/src/artifact-catalog-cursor.ts +60 -0
  210. package/src/auth/managed-auth-attempt-context.ts +70 -0
  211. package/src/auth/managed-auth-rate-limits.ts +252 -0
  212. package/src/auth/managed-auth-session-adapter.ts +222 -0
  213. package/src/auth/managed-auth.ts +536 -60
  214. package/src/auth/managed-email.ts +174 -0
  215. package/src/auth/managed-sign-in-notifications.ts +81 -0
  216. package/src/auth/new-signups-gate.ts +49 -0
  217. package/src/auth/organization-user-setup.ts +307 -0
  218. package/src/auth/signup-funnel-metrics.ts +164 -0
  219. package/src/browser-controller-authority.ts +1 -186
  220. package/src/browser-ephemeral.ts +39 -0
  221. package/src/browser-state-authority.ts +1 -236
  222. package/src/claude-subscription-account-conflicts.ts +12 -0
  223. package/src/claude-subscription-account-usage.ts +48 -0
  224. package/src/claude-subscription-oauth.ts +362 -0
  225. package/src/claude-subscription-profile.ts +73 -0
  226. package/src/claude-subscription-usage.ts +97 -0
  227. package/src/claude-workspace-connection.ts +82 -0
  228. package/src/codemode.ts +194 -30
  229. package/src/codex-realtime.ts +8 -2
  230. package/src/company-brain-okf.ts +340 -0
  231. package/src/connected-machine-computer-access.ts +33 -0
  232. package/src/connection-ownership.ts +199 -0
  233. package/src/controller-data-plane.ts +81 -0
  234. package/src/editable-artifact-native-kernel.ts +26 -15
  235. package/src/editable-artifact-office-import.ts +77 -9
  236. package/src/editable-artifact-production.ts +23 -7
  237. package/src/editable-artifact-source-session.ts +123 -0
  238. package/src/editable-artifact-websocket.ts +27 -21
  239. package/src/editable-artifact-workspace-files.ts +31 -6
  240. package/src/fatal-process-boundary.ts +246 -0
  241. package/src/gateway-realtime.ts +1 -1
  242. package/src/github-access.ts +147 -5
  243. package/src/http/acting-person.ts +71 -0
  244. package/src/http/api-contract-compat.ts +49 -0
  245. package/src/http/api-error.ts +115 -1
  246. package/src/http/auth.ts +48 -0
  247. package/src/http/cors.ts +67 -0
  248. package/src/http/deprecation.ts +118 -0
  249. package/src/http/interaction-control-error.ts +164 -0
  250. package/src/http/keyed-admission.ts +29 -0
  251. package/src/http/local-browser-boundary.ts +343 -0
  252. package/src/http/metrics-listener.ts +57 -0
  253. package/src/http/path-identifier.ts +54 -0
  254. package/src/http/registered-route-label.ts +34 -0
  255. package/src/http/request-body.ts +127 -0
  256. package/src/http/request-source.ts +178 -0
  257. package/src/http/sse.ts +486 -132
  258. package/src/http/unmatched-route.ts +60 -0
  259. package/src/http/user-content.ts +158 -0
  260. package/src/http/websocket-upgrade-dispatch.ts +29 -0
  261. package/src/index.ts +157 -52
  262. package/src/integration-endpoint-test.ts +291 -0
  263. package/src/integrations/api-integrations.ts +98 -11
  264. package/src/integrations/atlassian.ts +474 -136
  265. package/src/integrations/connect-authority.ts +2 -0
  266. package/src/integrations/connect-callback-return.ts +86 -0
  267. package/src/integrations/fiken.ts +354 -64
  268. package/src/integrations/github-app-connect.ts +435 -0
  269. package/src/integrations/github-installation-proof.ts +60 -0
  270. package/src/integrations/github-lens-connect.ts +76 -0
  271. package/src/integrations/github-skill-source.ts +2 -142
  272. package/src/integrations/google-drive.ts +820 -222
  273. package/src/integrations/integration-commit-authority.ts +69 -0
  274. package/src/integrations/marketplace-plugin.ts +48 -0
  275. package/src/integrations/oauth-client.ts +1356 -459
  276. package/src/integrations/oauth-profiles.ts +537 -0
  277. package/src/integrations/oauth-return-path.ts +18 -0
  278. package/src/integrations/personal-github-repositories.ts +674 -0
  279. package/src/integrations/personal-github.ts +825 -0
  280. package/src/integrations/pr-review-provider.ts +246 -0
  281. package/src/integrations/provider-oauth.ts +250 -22
  282. package/src/integrations/slack-app-home.ts +300 -0
  283. package/src/integrations/slack-bot.ts +963 -239
  284. package/src/integrations/slack-file-upload-flow.ts +147 -0
  285. package/src/integrations/slack-install.ts +83 -0
  286. package/src/integrations/slack-interactions.ts +3170 -474
  287. package/src/integrations/slack-mrkdwn.ts +193 -0
  288. package/src/integrations/slack-routing.ts +337 -0
  289. package/src/integrations/slack-session-defaults.ts +224 -0
  290. package/src/integrations/slack-task-file-upload.ts +323 -0
  291. package/src/integrations/social-oauth.ts +213 -15
  292. package/src/interaction-agent-access.ts +48 -0
  293. package/src/interaction-frame-proxy.ts +409 -0
  294. package/src/interaction-metrics.ts +30 -0
  295. package/src/mcp/action-catalog-types.ts +9 -0
  296. package/src/mcp/action-catalog.gen.ts +6696 -0
  297. package/src/mcp/capability-account-readiness.ts +17 -0
  298. package/src/mcp/child-read-evidence.ts +19 -0
  299. package/src/mcp/command-read.ts +109 -0
  300. package/src/mcp/company-profile-agent-admin.ts +198 -0
  301. package/src/mcp/contract-input.ts +141 -0
  302. package/src/mcp/documents.ts +65 -377
  303. package/src/mcp/editable-artifacts.ts +12 -6
  304. package/src/mcp/files.ts +80 -38
  305. package/src/mcp/first-party-tool-permissions.ts +305 -0
  306. package/src/mcp/knowledge-entries.ts +322 -0
  307. package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
  308. package/src/mcp/receipts.ts +34 -0
  309. package/src/mcp/request-abort.ts +44 -0
  310. package/src/mcp/scheduled-task-input.ts +76 -0
  311. package/src/mcp/scheduled-task-view.ts +44 -3
  312. package/src/mcp/server.ts +3030 -1267
  313. package/src/mcp/session-event-view.ts +383 -0
  314. package/src/mcp/session-view.ts +84 -3
  315. package/src/mcp/session-wait.ts +665 -0
  316. package/src/mcp-oauth.ts +1123 -0
  317. package/src/model-catalog.ts +91 -333
  318. package/src/observability.ts +15 -1
  319. package/src/organization-mcp.ts +397 -0
  320. package/src/organization-recovery-notifications.ts +103 -0
  321. package/src/routes/analytics-consent.ts +123 -0
  322. package/src/routes/api-integrations.ts +364 -74
  323. package/src/routes/api-keys.ts +336 -10
  324. package/src/routes/artifact-catalog.ts +279 -0
  325. package/src/routes/automations.ts +768 -0
  326. package/src/routes/billing.ts +461 -46
  327. package/src/routes/browser-sessions.ts +839 -131
  328. package/src/routes/canonical-human-identities.ts +90 -14
  329. package/src/routes/capabilities.ts +107 -6
  330. package/src/routes/channels.ts +20 -3
  331. package/src/routes/claude-subscription-accounts.ts +334 -0
  332. package/src/routes/claude-subscription-oauth.ts +142 -0
  333. package/src/routes/client-errors.ts +362 -0
  334. package/src/routes/codex.ts +833 -116
  335. package/src/routes/company-brain.ts +322 -0
  336. package/src/routes/company-profile.ts +65 -1
  337. package/src/routes/computer-sessions.ts +557 -106
  338. package/src/routes/connect.ts +1938 -0
  339. package/src/routes/connections.ts +1040 -349
  340. package/src/routes/documents.ts +488 -287
  341. package/src/routes/editable-artifacts.ts +79 -9
  342. package/src/routes/enrollments.ts +135 -39
  343. package/src/routes/environments.ts +154 -58
  344. package/src/routes/external-identity-links.ts +201 -0
  345. package/src/routes/feedback.ts +113 -0
  346. package/src/routes/files.ts +337 -39
  347. package/src/routes/github-browser-pages.ts +162 -0
  348. package/src/routes/github.ts +446 -144
  349. package/src/routes/insights-response-cache.ts +83 -0
  350. package/src/routes/insights-usage.ts +345 -0
  351. package/src/routes/insights.ts +153 -19
  352. package/src/routes/install.ts +133 -38
  353. package/src/routes/integration-facets.ts +107 -33
  354. package/src/routes/interaction-resources.ts +30 -3
  355. package/src/routes/knowledge.ts +488 -0
  356. package/src/routes/machines.ts +313 -15
  357. package/src/routes/managed-auth-session-sets.ts +1218 -0
  358. package/src/routes/managed-onboarding.ts +337 -0
  359. package/src/routes/managed-sign-in-methods.ts +433 -0
  360. package/src/routes/memory-slack-publications.ts +3 -2
  361. package/src/routes/model-connection-access.ts +208 -0
  362. package/src/routes/organization-integration-policy.ts +116 -0
  363. package/src/routes/organization-integrations.ts +326 -0
  364. package/src/routes/organization-mcp-connections.ts +178 -0
  365. package/src/routes/organization-memberships.ts +1019 -27
  366. package/src/routes/organization-model-providers.ts +293 -0
  367. package/src/routes/organization-recovery.ts +325 -0
  368. package/src/routes/organization-service-accounts.ts +128 -0
  369. package/src/routes/organization-sessions.ts +350 -0
  370. package/src/routes/personal-github-git-broker.ts +785 -0
  371. package/src/routes/personal-github.ts +370 -0
  372. package/src/routes/plugins.ts +251 -22
  373. package/src/routes/pr-review-github.ts +881 -0
  374. package/src/routes/pr-review.ts +622 -0
  375. package/src/routes/preference-registry.ts +12 -93
  376. package/src/routes/rigs.ts +167 -50
  377. package/src/routes/scheduled-tasks.ts +346 -41
  378. package/src/routes/session-artifact-associations.ts +87 -0
  379. package/src/routes/session-history-imports.ts +280 -0
  380. package/src/routes/sessions.ts +2306 -264
  381. package/src/routes/skill-content.ts +297 -0
  382. package/src/routes/skill-install-authority.ts +64 -0
  383. package/src/routes/skills.ts +62 -9
  384. package/src/routes/social.ts +46 -18
  385. package/src/routes/subscription-account-pools.ts +436 -0
  386. package/src/routes/subscription-pool-access.ts +126 -0
  387. package/src/routes/supergrok.ts +219 -303
  388. package/src/routes/transcription-recordings.ts +38 -3
  389. package/src/routes/transcriptions.ts +4 -0
  390. package/src/routes/usage-allowances.ts +378 -0
  391. package/src/routes/user-resource-authorities.ts +138 -0
  392. package/src/routes/video-generation.ts +14 -10
  393. package/src/routes/workspace-artifacts.ts +275 -69
  394. package/src/routes/workspace-capture.ts +21 -0
  395. package/src/routes/workspace-integrations.ts +576 -0
  396. package/src/routes/workspace-learning.ts +159 -0
  397. package/src/routes/workspace-model-providers.ts +148 -0
  398. package/src/routes/workspace-state.ts +38 -25
  399. package/src/routes/workspaces.ts +1004 -127
  400. package/src/sandbox/auth-callout.ts +96 -19
  401. package/src/sandbox/channel-a.ts +323 -24
  402. package/src/sandbox/connection-authority.ts +3 -0
  403. package/src/sandbox/enrollment.ts +81 -6
  404. package/src/sandbox/machines.ts +218 -76
  405. package/src/sandbox/metrics-ingestion.ts +411 -62
  406. package/src/sandbox/rematerialize.ts +121 -19
  407. package/src/sandbox/session-attach-variable-sets.ts +131 -0
  408. package/src/sandbox/viewer.ts +280 -25
  409. package/src/sandbox-file-artifacts.ts +413 -0
  410. package/src/scheduled-task-deletion.ts +138 -0
  411. package/src/session-create-observability.ts +46 -0
  412. package/src/session-realtime-context.ts +6 -3
  413. package/src/site-session-origin.ts +48 -0
  414. package/src/site-uploads.ts +224 -0
  415. package/src/slack-reaction-files.ts +16 -5
  416. package/src/temporal-schedule-cleanup.ts +13 -0
  417. package/src/temporal-schedule-sync.ts +74 -0
  418. package/src/transcription/providers/codex-subscription.ts +2 -0
  419. package/src/transcription/providers/openai.ts +1 -0
  420. package/src/transcription/providers/xai-subscription.ts +49 -3
  421. package/src/transcription/segmenter.ts +8 -2
  422. package/src/transcription/service.ts +43 -6
  423. package/src/work-discovery-observability.ts +121 -0
  424. package/src/workspace-artifact-content.ts +144 -0
  425. package/src/workspace-artifact-provenance.ts +104 -0
  426. package/src/workspace-delete-observability.ts +75 -0
  427. package/src/workspace-deletion.ts +73 -0
  428. package/src/workspace-state-projection.ts +18 -148
  429. package/src/workspace-tool-gateway-observability.ts +100 -0
  430. package/src/workspace-tool-gateway.ts +870 -0
  431. package/src/workspace-webhook-dispatch.ts +190 -0
  432. package/src/xai-subscription-auth.ts +9 -2
  433. package/dist/chunk-2PQMSRCB.js +0 -49759
  434. package/dist/chunk-2PQMSRCB.js.map +0 -1
  435. package/dist/routes/packs.d.ts +0 -3
  436. package/src/routes/packs.ts +0 -729
@@ -0,0 +1,18 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+
15
+ export {
16
+ __reExport
17
+ };
18
+ //# sourceMappingURL=chunk-OGQDXVXY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1 @@
1
+ export declare function claudeAccountMutationFailure(error: unknown): never;
@@ -0,0 +1,39 @@
1
+ import { type Settings } from "@opengeni/config";
2
+ import { type ClaudeAccountUsageAuthority, type Database } from "@opengeni/db";
3
+ /** Profile quota requests never run inference and never select a different account. */
4
+ export declare function refreshClaudeAccountUsage(db: Database, settings: Settings, authority: ClaudeAccountUsageAuthority, fetchImpl?: typeof fetch): Promise<{
5
+ connected: boolean;
6
+ credentialVersion: number | null;
7
+ windows: {
8
+ id: "five_hour" | "overage" | "seven_day" | "seven_day_opus" | "seven_day_overage_included" | "seven_day_sonnet";
9
+ usedPercent: number | null;
10
+ resetsAt: string | null;
11
+ status: "allowed" | "allowed_warning" | "rejected" | null;
12
+ observedAt: string;
13
+ source?: "provider" | "response_headers" | undefined;
14
+ }[];
15
+ observedAt: string | null;
16
+ source: "provider" | "response_headers" | null;
17
+ refreshStatus: "available" | "not_checked" | "reconnect" | "scope_required" | "unavailable";
18
+ refreshCheckedAt: string | null;
19
+ requestStatus?: {
20
+ status: "allowed" | "allowed_warning" | "rejected" | null;
21
+ resetsAt: string | null;
22
+ representativeClaim: "five_hour" | "overage" | "seven_day" | "seven_day_opus" | "seven_day_overage_included" | "seven_day_sonnet" | null;
23
+ overageStatus: "allowed" | "allowed_warning" | "rejected" | null;
24
+ overageResetsAt: string | null;
25
+ upstreamModelId: string | null;
26
+ observedAt: string;
27
+ source?: "provider" | "response_headers" | undefined;
28
+ } | null | undefined;
29
+ requestRestrictions?: {
30
+ status: "allowed" | "allowed_warning" | "rejected" | null;
31
+ resetsAt: string | null;
32
+ representativeClaim: "five_hour" | "overage" | "seven_day" | "seven_day_opus" | "seven_day_overage_included" | "seven_day_sonnet" | null;
33
+ overageStatus: "allowed" | "allowed_warning" | "rejected" | null;
34
+ overageResetsAt: string | null;
35
+ upstreamModelId: string | null;
36
+ observedAt: string;
37
+ source?: "provider" | "response_headers" | undefined;
38
+ }[] | undefined;
39
+ }>;
@@ -0,0 +1,25 @@
1
+ import { type ApiRouteDeps } from "@opengeni/core";
2
+ export type ClaudeOAuthScope = {
3
+ accountId: string;
4
+ workspaceId: string | null;
5
+ actorSubjectId: string;
6
+ browserSessionHash: string;
7
+ };
8
+ export declare function startClaudeSubscriptionOAuth(deps: ApiRouteDeps, scope: ClaudeOAuthScope, input?: {
9
+ scope?: "workspace" | "user" | undefined;
10
+ reconnectAccountId?: string | undefined;
11
+ }): Promise<{
12
+ attemptId: string;
13
+ authorizationUrl: string;
14
+ expiresAt: string;
15
+ }>;
16
+ /** Each attempt adds one account or reconnects one exact, generation-fenced target. */
17
+ export declare function completeClaudeSubscriptionOAuth(deps: ApiRouteDeps, scope: ClaudeOAuthScope, input: {
18
+ attemptId: string;
19
+ code: string;
20
+ }, reauthorize: (poolScope?: "workspace" | "user" | "organization") => Promise<void>, fetchImpl?: typeof fetch): Promise<{
21
+ connected: true;
22
+ accountId: string;
23
+ scope: "organization" | "user" | "workspace";
24
+ credentialVersion: number;
25
+ }>;
@@ -0,0 +1,9 @@
1
+ export type ClaudeSubscriptionProfile = {
2
+ accountUuid: string;
3
+ email: string | null;
4
+ plan: string | null;
5
+ };
6
+ /** Only provider-reported identity; never derive email from a token or an organization name. */
7
+ export declare function parseClaudeSubscriptionProfile(value: unknown): ClaudeSubscriptionProfile | null;
8
+ /** Optional profile read. A profile outage must not discard a valid sign-in. */
9
+ export declare function fetchClaudeSubscriptionProfile(token: string, scopes: readonly string[], fetchImpl?: typeof fetch): Promise<ClaudeSubscriptionProfile | null>;
@@ -0,0 +1,44 @@
1
+ import { type Settings } from "@opengeni/config";
2
+ import { type ClaudeUsageScope, type Database } from "@opengeni/db";
3
+ export declare function requestClaudeUsage(token: string, fetchImpl?: typeof fetch): Promise<{
4
+ status: "available" | "reconnect" | "scope_required" | "unavailable";
5
+ observation: import("@opengeni/config").ClaudeUsageObservation | null;
6
+ checkedAt: string;
7
+ }>;
8
+ /** No inference calls. Inference-only setup tokens retain their response-header cache. */
9
+ export declare function refreshClaudeSubscriptionUsage(db: Database, settings: Settings, scope: ClaudeUsageScope, fetchImpl?: typeof fetch): Promise<{
10
+ connected: boolean;
11
+ credentialVersion: number | null;
12
+ windows: {
13
+ id: "five_hour" | "overage" | "seven_day" | "seven_day_opus" | "seven_day_overage_included" | "seven_day_sonnet";
14
+ usedPercent: number | null;
15
+ resetsAt: string | null;
16
+ status: "allowed" | "allowed_warning" | "rejected" | null;
17
+ observedAt: string;
18
+ source?: "provider" | "response_headers" | undefined;
19
+ }[];
20
+ observedAt: string | null;
21
+ source: "provider" | "response_headers" | null;
22
+ refreshStatus: "available" | "not_checked" | "reconnect" | "scope_required" | "unavailable";
23
+ refreshCheckedAt: string | null;
24
+ requestStatus?: {
25
+ status: "allowed" | "allowed_warning" | "rejected" | null;
26
+ resetsAt: string | null;
27
+ representativeClaim: "five_hour" | "overage" | "seven_day" | "seven_day_opus" | "seven_day_overage_included" | "seven_day_sonnet" | null;
28
+ overageStatus: "allowed" | "allowed_warning" | "rejected" | null;
29
+ overageResetsAt: string | null;
30
+ upstreamModelId: string | null;
31
+ observedAt: string;
32
+ source?: "provider" | "response_headers" | undefined;
33
+ } | null | undefined;
34
+ requestRestrictions?: {
35
+ status: "allowed" | "allowed_warning" | "rejected" | null;
36
+ resetsAt: string | null;
37
+ representativeClaim: "five_hour" | "overage" | "seven_day" | "seven_day_opus" | "seven_day_overage_included" | "seven_day_sonnet" | null;
38
+ overageStatus: "allowed" | "allowed_warning" | "rejected" | null;
39
+ overageResetsAt: string | null;
40
+ upstreamModelId: string | null;
41
+ observedAt: string;
42
+ source?: "provider" | "response_headers" | undefined;
43
+ }[] | undefined;
44
+ }>;
@@ -0,0 +1,15 @@
1
+ import { type Settings } from "@opengeni/config";
2
+ /** Validate the canonical model lane before it bypasses integration acquisition. */
3
+ export declare function assertClaudeWorkspaceCredential(settings: Pick<Settings, "claudeSubscriptionEnabled">, input: {
4
+ subjectId: string | null;
5
+ providerDomain: string;
6
+ kind: string;
7
+ metadata?: Record<string, unknown>;
8
+ credential: unknown;
9
+ }): void;
10
+ /** Stable installation identity; setup tokens do not grant profile access. */
11
+ export declare function prepareClaudeSubscriptionCredential(settings: Settings, scope: string, token: string, identity?: {
12
+ accountUuid: string;
13
+ deviceId: string;
14
+ }): string;
15
+ export declare function prepareClaudeWorkspaceCredential(settings: Settings, workspaceId: string, metadata: Record<string, unknown> | undefined, credential: Record<string, unknown>): Record<string, unknown>;
@@ -1,5 +1,22 @@
1
1
  import { type AccessGrant, type AttemptToolCatalog, type CodemodeCallSubmission as CodemodeCallSubmissionValue, type CodemodeOperation } from "@opengeni/contracts";
2
2
  import type { ApiRouteDeps } from "@opengeni/core";
3
+ import { type SessionTurnForExecution } from "@opengeni/db";
4
+ import { type Settings } from "@opengeni/config";
5
+ import { type Permission, type Session } from "@opengeni/contracts";
6
+ /** The REST authority a Codemode SDK proxy token may ever carry. */
7
+ export declare const CODEMODE_SESSION_PROXY_PERMISSION_CEILING: readonly ["workspace:read", "sessions:read", "sessions:create", "sessions:control"];
8
+ /**
9
+ * Proxy permissions = the session's effective first-party permissions, cut
10
+ * down to what its exact model-visible tool selection could actually
11
+ * exercise (plus workspace:read for the context routes), under the fixed
12
+ * ceiling above. A session whose selection has no session_* tool therefore
13
+ * gets only workspace:read and every proxied /sessions handler refuses it,
14
+ * exactly as its MCP surface would.
15
+ */
16
+ export declare function codemodeSessionProxyPermissions(settings: Pick<Settings, "defaultFirstPartyMcpTools" | "allowedFirstPartyMcpTools">, session: Pick<Session, "firstPartyMcpTools" | "firstPartyMcpPermissions">): Permission[];
17
+ /** Reuse normal REST handlers, including their resource/command authorization.
18
+ * The exact attempt is checked before issuing this internal-only credential. */
19
+ export declare function codemodeSessionRequest(deps: ApiRouteDeps, grant: AccessGrant, request: Request, path: string, resolveProxySettings?: (session: Session) => Pick<Settings, "defaultFirstPartyMcpTools" | "allowedFirstPartyMcpTools">): Promise<Request>;
3
20
  export type CodemodeGrantAuthority = {
4
21
  accountId: string;
5
22
  workspaceId: string;
@@ -9,15 +26,29 @@ export type CodemodeGrantAuthority = {
9
26
  executionGeneration: number;
10
27
  subjectId: string;
11
28
  };
29
+ export type CodemodeAuthorityFailureReason = "invalid_grant" | "inactive_attempt" | "catalog_mismatch";
12
30
  export declare class CodemodeAuthorityError extends Error {
13
- readonly code = "codemode_authority_invalid";
31
+ readonly reason: CodemodeAuthorityFailureReason;
32
+ readonly code: `codemode_${CodemodeAuthorityFailureReason}`;
33
+ constructor(reason: CodemodeAuthorityFailureReason);
34
+ }
35
+ export declare class CodemodeCatalogNotReadyError extends Error {
36
+ readonly code = "codemode_catalog_not_ready";
37
+ constructor();
38
+ }
39
+ export declare class CodemodeCatalogStaleError extends Error {
40
+ readonly code = "codemode_catalog_stale";
14
41
  constructor();
15
42
  }
16
43
  export declare function codemodeAuthorityForGrant(grant: AccessGrant): CodemodeGrantAuthority | null;
17
44
  export declare function isCodemodeGrant(grant: AccessGrant): boolean;
45
+ export declare function requireMatchingCodemodeCatalog(authority: CodemodeGrantAuthority, catalog: AttemptToolCatalog | null): AttemptToolCatalog;
18
46
  export declare function requireActiveCodemodeCatalog(deps: ApiRouteDeps, grant: AccessGrant): Promise<{
19
47
  authority: CodemodeGrantAuthority;
20
48
  catalog: AttemptToolCatalog;
49
+ turn: SessionTurnForExecution;
21
50
  }>;
22
51
  export declare function submitAndDispatchCodemodeCall(deps: ApiRouteDeps, grant: AccessGrant, rawRequest: unknown): Promise<CodemodeCallSubmissionValue>;
52
+ export declare function codemodeOperationNeedsDispatch(operation: CodemodeOperation): boolean;
23
53
  export declare function readCodemodeOperation(deps: ApiRouteDeps, grant: AccessGrant, operationId: string): Promise<CodemodeOperation | null>;
54
+ export declare function refreshAdmittedCodemodeOperation(admitted: CodemodeOperation, read: () => Promise<CodemodeOperation | null>): Promise<CodemodeOperation>;
@@ -0,0 +1,24 @@
1
+ import { type CompanyBrainGuidanceEntry, type CompanyBrainOkfPackage as CompanyBrainOkfPackageType, type CompanyProfileListResponse, type WorkspaceInstructionPolicyListResponse, type WorkspaceInstructionPolicyRevision, type WorkspaceStateKnowledge } from "@opengeni/contracts";
2
+ import type { CompanyBrainPreferenceGuidancePage } from "@opengeni/db";
3
+ export declare function boundCompanyBrainGuidanceEntries(entries: CompanyBrainGuidanceEntry[]): {
4
+ entries: CompanyBrainGuidanceEntry[];
5
+ itemCountTruncated: boolean;
6
+ contentBytesTruncated: boolean;
7
+ };
8
+ export declare function createCompanyBrainOkfPackage(input: {
9
+ workspaceId: string;
10
+ generatedAt: string;
11
+ companyProfile: CompanyProfileListResponse;
12
+ instructionPolicies: WorkspaceInstructionPolicyListResponse;
13
+ activeInstructionPolicyRevisions: WorkspaceInstructionPolicyRevision[];
14
+ activatedInstructionPolicyRevisionIds: string[];
15
+ preferences: CompanyBrainPreferenceGuidancePage;
16
+ knowledge: WorkspaceStateKnowledge;
17
+ }): CompanyBrainOkfPackageType;
18
+ /**
19
+ * JSON is a strict subset of YAML 1.2. Keeping the payload in one fenced YAML
20
+ * block gives humans a readable Markdown package while making arbitrary
21
+ * guidance Markdown structurally inert and exactly round-trippable.
22
+ */
23
+ export declare function serializeCompanyBrainOkf(value: CompanyBrainOkfPackageType): string;
24
+ export declare function parseCompanyBrainOkf(markdown: string): CompanyBrainOkfPackageType;
@@ -0,0 +1,11 @@
1
+ export type ConnectedMachineComputerAccessState = {
2
+ hasDisplay: boolean;
3
+ desktopUnavailableReason: string | null;
4
+ allowScreenControl: boolean;
5
+ };
6
+ export type ConnectedMachineComputerAccessError = {
7
+ status: 403 | 409;
8
+ message: string;
9
+ };
10
+ /** Keep passive desktop viewing separate from input consent. */
11
+ export declare function connectedMachineComputerAccessError(state: ConnectedMachineComputerAccessState, requiresControl: boolean): ConnectedMachineComputerAccessError | null;
@@ -0,0 +1,54 @@
1
+ import type { ConnectionOwnership } from "@opengeni/contracts";
2
+ import { type AccessGrantAuthorization } from "@opengeni/core";
3
+ /** Signing in to a third-party provider is the person's own step in the
4
+ * browser; an agent acting as them through the organization MCP server is told
5
+ * to finish it there. */
6
+ export declare function requireProviderConsentInBrowser(access: AccessGrantAuthorization): void;
7
+ /** A verified external actor must not enter a native callback that has no
8
+ * corresponding key/identity reauthorization proof. Remove at an entry point
9
+ * only when that provider's signed continuation and commit fence are wired. */
10
+ export declare function requireLegacyOAuthActor(access: AccessGrantAuthorization): void;
11
+ /** True only for an exact authenticated managed human. Unknown provenance fails closed. */
12
+ export declare function isPersonalConnectionOwnerPrincipal(access: AccessGrantAuthorization): boolean;
13
+ /** Rejects an OpenGeni-minted machine subject; see the namespace list's rationale. */
14
+ export declare function isPersonalConnectionOwnerSubject(subjectId: string): boolean;
15
+ export declare const PERSONAL_CONNECTION_PRINCIPAL_MESSAGE: string;
16
+ /** Personal-only connectors cannot degrade to workspace ownership, so they say so exactly. */
17
+ export declare function personalOnlyConnectionPrincipalMessage(label: string): string;
18
+ /**
19
+ * Rejects a non-human principal before a personal Connection is created.
20
+ * `label` names a personal-only connector, whose message must not suggest a
21
+ * workspace-owned alternative that its provider profile forbids.
22
+ *
23
+ * This shares that helper's core caller-integrity checks, then additionally
24
+ * rejects every reserved machine-subject namespace as defence-in-depth. The
25
+ * sibling guards a self-service authority surface where the caller claims to
26
+ * *be* the owner (403 "not you"), while this one rejects an ownership *value*
27
+ * that is unavailable to the caller (422).
28
+ */
29
+ export declare function assertPersonalConnectionOwnerPrincipal(access: AccessGrantAuthorization, label?: string): void;
30
+ /** The same fence expressed for a flow that resolves ownership after admission. */
31
+ export declare function assertConnectionOwnershipAllowedForPrincipal(ownership: ConnectionOwnership, personalOwnershipAllowed: boolean): void;
32
+ /**
33
+ * The claim a start path mints into its HMAC-signed OAuth state when it has
34
+ * verified the live principal may own a personal Connection.
35
+ *
36
+ * An OAuth callback carries signed state, not a live principal, so it cannot
37
+ * re-evaluate `principalKind`. Requiring this claim makes the callback enforce
38
+ * exactly what the start path decided with the full signal, instead of guessing
39
+ * from the subject's shape. A state minted before this claim existed simply
40
+ * lacks it and fails closed for personal ownership - which is precisely the
41
+ * in-flight rolling-deploy window these fences exist to close.
42
+ */
43
+ export declare const PERSONAL_OWNER_VERIFIED_STATE_CLAIM: "personalOwnerVerified";
44
+ /** True only for an explicit boolean `true` claim; absent or malformed fails closed. */
45
+ export declare function personalOwnerVerifiedInState(payload: Record<string, unknown>): boolean;
46
+ /**
47
+ * Callback-side fence for every path that persists a personal owner. Requires
48
+ * both the signed start-time verification and a non-machine subject.
49
+ */
50
+ export declare function personalOwnerStateAccepted(state: {
51
+ ownership: ConnectionOwnership;
52
+ subjectId: string;
53
+ personalOwnerVerified: boolean;
54
+ }): boolean;
@@ -1,3 +1,21 @@
1
+ import type { InteractionPlacement } from "@opengeni/contracts";
2
+ import type { ChannelAOperation } from "./sandbox/channel-a.js";
3
+ /** Modal/Daytona/Blaxel tunnels serve browserd at `/`, so a cached
4
+ * controller-only session can host-fetch JSON. OpenSandbox's lifecycle proxy
5
+ * prefixes `/v1/sandboxes/<id>/proxy/<port>` and rewrites Authorization; JSON
6
+ * must stay on an exec-capable in-box curl session. OSEP-0011 signed URIs are
7
+ * Authorization-preserving and host-fetch like a native tunnel, but they are
8
+ * not durable cache keys. */
9
+ export declare function controllerCacheAllowsHostFetch(url: string): boolean;
10
+ export declare function isOpenSandboxSignedControllerUrl(url: string): boolean;
11
+ /** Signed Channel B URLs expire. Do not treat a lease-cached signed URI as an
12
+ * infinite controller endpoint. Unsigned native `/` tunnels stay cacheable. */
13
+ export declare function controllerCachedUrlIsUsable(url: string, nowMs?: number): boolean;
14
+ export declare function shouldPersistControllerDataPlaneUrl(input: {
15
+ backend: string | null | undefined;
16
+ signedEndpoints: boolean;
17
+ url: string;
18
+ }): boolean;
1
19
  /** Prefer a lease-fenced controller endpoint for the idempotent create path.
2
20
  * Only a transport-class failure invalidates the cache and provisions once;
3
21
  * semantic failures belong to the caller and must never be replayed. */
@@ -10,3 +28,17 @@ export declare function withCachedController<C, T>(options: {
10
28
  use: (client: C) => Promise<T>;
11
29
  }): Promise<T>;
12
30
  export declare function isRetryableControllerTransport(error: unknown): boolean;
31
+ /** A stopped sidecar needs provisioning on its original, fenced placement.
32
+ * Only reads and journaled actions may recover, once across provider retries.
33
+ * Revalidate controller authority before starting the sidecar. */
34
+ export declare function withControllerTransportRecovery<T>(options: {
35
+ channelOperation: ChannelAOperation;
36
+ placementKind: InteractionPlacement["kind"];
37
+ recoveryState: {
38
+ attempted: boolean;
39
+ };
40
+ transportAlreadyFailed: boolean;
41
+ use: () => Promise<T>;
42
+ admitRecovery: () => Promise<void>;
43
+ recover: () => Promise<T>;
44
+ }): Promise<T>;
@@ -1,6 +1,6 @@
1
1
  import { prepareArtifactOfficeImport } from "@opengeni/artifact-tool/office-import";
2
- import { type EditableArtifactOfficeImportPort } from "@opengeni/core/editable-artifacts";
3
- import { getFile } from "@opengeni/db";
2
+ import { type EditableArtifactActor, type EditableArtifactOfficeImportPort, type EditableArtifactScope } from "@opengeni/core/editable-artifacts";
3
+ import { getFilesForSubject } from "@opengeni/db";
4
4
  import { type BoundedImmutableObjectWritePort, type ObjectStorage } from "@opengeni/storage";
5
5
  import type { Database } from "@opengeni/db";
6
6
  import type { VerifiedNativeArtifactRuntimeBinding } from "./editable-artifact-native-kernel.js";
@@ -10,13 +10,16 @@ export type EditableArtifactOfficeImportAdapterDependencies = Readonly<{
10
10
  runtime: VerifiedNativeArtifactRuntimeBinding;
11
11
  sourceObjects: BoundedImmutableObjectWritePort;
12
12
  snapshotObjects: BoundedImmutableObjectWritePort;
13
- readFile?: typeof getFile;
13
+ readFiles?: typeof getFilesForSubject;
14
+ resolveFileAuthoritySubjectId?: typeof editableArtifactFileAuthoritySubjectId;
14
15
  prepareOffice?: typeof prepareArtifactOfficeImport;
15
16
  }>;
16
17
  /** Trusted import boundary from one ready workspace file into native sequence-zero state. */
17
18
  export declare class EditableArtifactOfficeImportAdapter implements EditableArtifactOfficeImportPort {
18
19
  private readonly dependencies;
19
- private readonly readFile;
20
+ private readonly readFiles;
21
+ private readonly resolveFileAuthoritySubjectId;
20
22
  constructor(dependencies: EditableArtifactOfficeImportAdapterDependencies);
21
23
  prepare(input: Parameters<EditableArtifactOfficeImportPort["prepare"]>[0]): ReturnType<EditableArtifactOfficeImportPort["prepare"]>;
22
24
  }
25
+ export declare function editableArtifactFileAuthoritySubjectId(db: Database, scope: EditableArtifactScope, actor: EditableArtifactActor): Promise<string | null>;
@@ -0,0 +1,3 @@
1
+ import { type ApiRouteDeps, type OpenEditableArtifactLiveInput } from "@opengeni/core";
2
+ /** Supplied by the API adapter, so mounted hosts use their canonical live port. */
3
+ export declare function editableArtifactSourceSessionAuthorizer(deps: ApiRouteDeps): NonNullable<OpenEditableArtifactLiveInput["authorizeSourceSession"]>;
@@ -1,20 +1,10 @@
1
- import { type EditableArtifactApplicationPort, type EditableArtifactLiveClose, type EditableArtifactLiveServerFrame, type EditableArtifactLiveSinkPort } from "@opengeni/core";
1
+ import { type EditableArtifactApplicationPort, type EditableArtifactLiveClose, type EditableArtifactLiveServerFrame, type EditableArtifactLiveSinkPort, type OpenEditableArtifactLiveInput } from "@opengeni/core";
2
+ import type { ApiWebSocketConnection, ApiWebSocketLike, ApiWebSocketUpgradeServer } from "./api-websocket.js";
2
3
  export declare const EDITABLE_ARTIFACT_LIVE_WEBSOCKET_PATH = "/v1/editable-artifacts/live";
3
- export declare const EDITABLE_ARTIFACT_LIVE_WEBSOCKET_PROTOCOL = "opengeni-artifact-v1";
4
+ export declare const EDITABLE_ARTIFACT_LIVE_WEBSOCKET_PROTOCOL = "opengeni-artifact-v2";
4
5
  export declare const EDITABLE_ARTIFACT_LIVE_WEBSOCKET_MAX_MESSAGE_BYTES: number;
5
- export type EditableArtifactWebSocketLike = Readonly<{
6
- data: EditableArtifactWebSocketConnection;
7
- send(data: Uint8Array, compress?: boolean): number;
8
- close(code?: number, reason?: string): void;
9
- readonly bufferedAmount?: number;
10
- getBufferedAmount?(): number;
11
- }>;
12
- export type EditableArtifactWebSocketUpgradeServer = Readonly<{
13
- upgrade(request: Request, options: Readonly<{
14
- data: EditableArtifactWebSocketConnection;
15
- headers: HeadersInit;
16
- }>): boolean;
17
- }>;
6
+ export type EditableArtifactWebSocketLike = ApiWebSocketLike;
7
+ export type EditableArtifactWebSocketUpgradeServer = ApiWebSocketUpgradeServer;
18
8
  export type EditableArtifactWebSocketHandler = Readonly<{
19
9
  open(socket: EditableArtifactWebSocketLike): void;
20
10
  message(socket: EditableArtifactWebSocketLike, message: string | Uint8Array | ArrayBuffer): void;
@@ -22,21 +12,23 @@ export type EditableArtifactWebSocketHandler = Readonly<{
22
12
  }>;
23
13
  export declare class EditableArtifactWebSocketTransport {
24
14
  private readonly application;
15
+ private readonly authorizeSourceSession?;
25
16
  readonly websocket: EditableArtifactWebSocketHandler;
26
- constructor(application: EditableArtifactApplicationPort | undefined);
17
+ constructor(application: EditableArtifactApplicationPort | undefined, authorizeSourceSession?: OpenEditableArtifactLiveInput["authorizeSourceSession"]);
27
18
  handles(request: Request): boolean;
28
19
  upgrade(request: Request, server: EditableArtifactWebSocketUpgradeServer): Response | undefined;
29
20
  }
30
21
  /** One socket, one consumed ticket, one stream epoch. */
31
- export declare class EditableArtifactWebSocketConnection implements EditableArtifactLiveSinkPort {
22
+ export declare class EditableArtifactWebSocketConnection implements EditableArtifactLiveSinkPort, ApiWebSocketConnection {
32
23
  private readonly application;
24
+ private readonly authorizeSourceSession?;
33
25
  private socket;
34
26
  private session;
35
27
  private work;
36
28
  private queuedMessages;
37
29
  private queuedBytes;
38
30
  private terminal;
39
- constructor(application: EditableArtifactApplicationPort);
31
+ constructor(application: EditableArtifactApplicationPort, authorizeSourceSession?: OpenEditableArtifactLiveInput["authorizeSourceSession"]);
40
32
  attach(socket: EditableArtifactWebSocketLike): void;
41
33
  receive(message: string | Uint8Array | ArrayBuffer): void;
42
34
  send(frame: EditableArtifactLiveServerFrame): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  import { type EditableArtifactAgentWorkspaceFilePort, type EditableArtifactDurableExportService } from "@opengeni/core/editable-artifacts";
2
2
  import { completeFileUpload, prepareGeneratedWorkspaceFile, type Database } from "@opengeni/db";
3
- import type { ObjectStorage } from "@opengeni/storage";
3
+ import { type ObjectStorage } from "@opengeni/storage";
4
4
  export type EditableArtifactWorkspaceFileAdapterDependencies = Readonly<{
5
5
  db: Database;
6
6
  objectStorage: ObjectStorage;
@@ -0,0 +1,25 @@
1
+ import type { Observability } from "@opengeni/observability";
2
+ export type ApiFatalEvent = "startup_failure" | "unhandled_rejection" | "uncaught_exception";
3
+ export type ApiFatalPhase = "startup" | "running";
4
+ export type ApiFatalReasonKind = "bigint" | "boolean" | "error" | "function" | "null" | "number" | "object" | "string" | "symbol" | "undefined";
5
+ type ApiFatalObservability = Pick<Observability, "error" | "flush" | "startSpan"> & Partial<Pick<Observability, "recordFailureDiagnostic">>;
6
+ type ApiFatalProcess = {
7
+ on: (event: "unhandledRejection" | "uncaughtException", listener: (reason: unknown) => void) => void;
8
+ off: (event: "unhandledRejection" | "uncaughtException", listener: (reason: unknown) => void) => void;
9
+ exit: (code: number) => void;
10
+ };
11
+ export type ApiFatalProcessBoundaryOptions = {
12
+ process?: ApiFatalProcess;
13
+ observability?: ApiFatalObservability;
14
+ flushTimeoutMs?: number;
15
+ correlationId?: () => string;
16
+ fallbackLog?: (message: string) => void;
17
+ };
18
+ export type ApiFatalProcessBoundary = {
19
+ attachObservability: (observability: ApiFatalObservability) => void;
20
+ markRunning: () => void;
21
+ reportStartupFailure: (reason: unknown) => Promise<void>;
22
+ dispose: () => void;
23
+ };
24
+ export declare function installApiFatalProcessBoundary(options?: ApiFatalProcessBoundaryOptions): ApiFatalProcessBoundary;
25
+ export {};
@@ -1,6 +1,22 @@
1
- import type { GitHubBindingStatus, GitHubInstallationBinding, GitHubRepository } from "@opengeni/contracts";
2
- import { listGitHubInstallationAccessForWorkspace } from "@opengeni/db";
1
+ import { type GitHubAppRepositoryBranchPage, type GitHubBindingStatus, type GitHubInstallationBinding, type GitHubRepository, type RepositoryResourceRef } from "@opengeni/contracts";
2
+ import { type GitHubRepositoryBranchesResponse, type ListGitHubRepositoryBranchesQuery } from "@opengeni/contracts/github-repository-contracts";
3
+ import { areGitHubRepositoriesAllowedForWorkspace, listGitHubInstallationAccessForWorkspace } from "@opengeni/db";
3
4
  import type { ApiRouteDeps } from "@opengeni/core";
5
+ export type GitHubRepositoryBranchAuthorityErrorCode = "changed" | "not_authorized";
6
+ export declare class GitHubRepositoryBranchAuthorityError extends Error {
7
+ readonly code: GitHubRepositoryBranchAuthorityErrorCode;
8
+ constructor(code: GitHubRepositoryBranchAuthorityErrorCode);
9
+ }
10
+ export type WorkspaceGitHubRepositoryBranchServices = {
11
+ listInstallationAccess: typeof listGitHubInstallationAccessForWorkspace;
12
+ areRepositoriesAllowed: typeof areGitHubRepositoriesAllowedForWorkspace;
13
+ listProviderBranches: (deps: ApiRouteDeps, input: {
14
+ installationId: number;
15
+ repositoryId: number;
16
+ page: number;
17
+ limit: number;
18
+ }) => Promise<GitHubAppRepositoryBranchPage | null>;
19
+ };
4
20
  export declare function listWorkspaceGitHubInstallationBindings(deps: ApiRouteDeps, workspaceId: string): Promise<GitHubInstallationBinding[]>;
5
21
  export declare function githubBindingStatus(configured: boolean, installations: GitHubInstallationBinding[]): GitHubBindingStatus;
6
22
  export type LiveGitHubInstallation = {
@@ -10,3 +26,16 @@ export type LiveGitHubInstallation = {
10
26
  };
11
27
  export declare function githubInstallationBindingLifecycle(stored: Awaited<ReturnType<typeof listGitHubInstallationAccessForWorkspace>>[number], liveById: Map<number, LiveGitHubInstallation | null>, installationId: number, lifecycleVerified: boolean): GitHubInstallationBinding["lifecycle"];
12
28
  export declare function listWorkspaceGitHubRepositories(deps: ApiRouteDeps, workspaceId: string): Promise<GitHubRepository[]>;
29
+ /**
30
+ * The exact session repository resource for one workspace GitHub App
31
+ * repository: its default branch, a canonical clone URI, and the installation
32
+ * identity that platform-brokered Git auth and create-time validation check.
33
+ */
34
+ export declare function githubRepositoryResourceRef(repository: GitHubRepository): RepositoryResourceRef;
35
+ export declare function listWorkspaceGitHubRepositoryBranches(deps: ApiRouteDeps, input: {
36
+ accountId: string;
37
+ workspaceId: string;
38
+ installationId: number;
39
+ repositoryId: number;
40
+ query: ListGitHubRepositoryBranchesQuery;
41
+ }, services?: WorkspaceGitHubRepositoryBranchServices): Promise<GitHubRepositoryBranchesResponse>;
@@ -0,0 +1,24 @@
1
+ import type { Permission } from "@opengeni/contracts";
2
+ import type { Context } from "hono";
3
+ export type ActingPerson = {
4
+ subjectId: string;
5
+ };
6
+ /** True when this request is an agent acting as a person. */
7
+ export declare function isAgentActingAsPerson(c: Context): boolean;
8
+ /**
9
+ * The person this agent acts as, for an action in `organizationId` that needs
10
+ * `permission`; null when the request is not an agent acting as a person.
11
+ * Another organization reads as not found; a permission the connection's
12
+ * access setting leaves out is refused.
13
+ */
14
+ export declare function agentActingAsPerson(c: Context, organizationId: string, permission: Permission): ActingPerson | null;
15
+ /**
16
+ * The person an agent acts as, with no organization or permission check here:
17
+ * only for a route that next requires this same person's workspace grant,
18
+ * which carries the connection's organization, workspaces and access.
19
+ */
20
+ export declare function agentActingAsPersonBeforeGrantCheck(c: Context): ActingPerson | null;
21
+ /** Organization settings: reading needs account:read, changing needs account:admin. */
22
+ export declare function organizationSettingsPermission(c: Context): Permission;
23
+ /** Refuse an agent on a browser-only step (provider consent, cross-organization actions). */
24
+ export declare function requireNotAgent(c: Context, what: string): void;
@@ -0,0 +1,19 @@
1
+ import type { MiddlewareHandler } from "hono";
2
+ /**
3
+ * Keep published SDKs working across additive contract-revision bumps.
4
+ *
5
+ * Every `@opengeni/sdk` release up to 7.x throws `OpenGeniApiContractMismatchError`
6
+ * on ANY response whose `x-opengeni-api-contract` header differs from the
7
+ * revision it was built with, reads included. The header exists to make a
8
+ * stale first-party browser tab reload (docs/design/api-compatibility-policy.md
9
+ * (e)); a backend integration pinned to an SDK version cannot reload, so the
10
+ * next additive revision bump would break every call it makes.
11
+ *
12
+ * For a bearer-authenticated caller (API key, delegated token) that announced a
13
+ * different revision, the response therefore omits the header instead of
14
+ * advertising one the caller is known to reject. Cookie/unauthenticated
15
+ * callers (the stock web app) keep it, and so does an explicit
16
+ * `API_CONTRACT_CHANGED` refusal, so a refused client can still explain the
17
+ * mismatch. This is not an authorization boundary: routes authorize as usual.
18
+ */
19
+ export declare function bearerApiContractHeaderCompatibility(): MiddlewareHandler;
@@ -1,16 +1,42 @@
1
- import type { ErrorCode } from "@opengeni/contracts";
1
+ import { type ErrorCode } from "@opengeni/contracts";
2
2
  import { HTTPException } from "hono/http-exception";
3
3
  type ApiHttpErrorOptions = {
4
4
  code: ErrorCode;
5
5
  message: string;
6
6
  retryable?: boolean;
7
+ outcomeUnknown?: boolean;
7
8
  details?: Record<string, unknown>;
8
9
  };
9
10
  /** A public, structured API failure whose message and details are safe for clients. */
10
11
  export declare class ApiHttpError extends HTTPException {
11
12
  readonly code: ErrorCode;
12
13
  readonly retryable: boolean | undefined;
14
+ readonly outcomeUnknown: boolean | undefined;
13
15
  readonly details: Record<string, unknown> | undefined;
14
16
  constructor(status: number, options: ApiHttpErrorOptions);
15
17
  }
18
+ export declare function scheduledTaskTargetAccessHttpError(error: unknown): ApiHttpError | null;
19
+ /** Preserve typed admission details through the common public error envelope. */
20
+ export declare function allowanceExhaustedHttpError(error: unknown): ApiHttpError | null;
21
+ /**
22
+ * A request-scoped session/workspace mutation could not enter the workspace
23
+ * control prefix within its bounded wait. The transaction rolled back before
24
+ * any write, so the outcome is known and the client may retry. `app.onError`
25
+ * applies this once for every route; Slack interactions keep the raw typed
26
+ * error so their retry classifier treats it as transient.
27
+ */
28
+ export declare function workspaceControlBusyHttpError(error: unknown): ApiHttpError | null;
29
+ /**
30
+ * A typed agent-configuration failure (capability unavailable, conflict,
31
+ * widening, not enabled). Rendered as 422 validation_failed with the specific
32
+ * code in `details.code` so clients can branch without parsing messages.
33
+ */
34
+ export declare function agentConfigHttpError(error: unknown): ApiHttpError | null;
35
+ /**
36
+ * The requested or stored model is not in the live catalog. Rendered as the
37
+ * same 422 `validation_failed` with its historical message, plus
38
+ * `details.code: "model_unavailable"` and the model id so clients can ask for
39
+ * another model rather than offer a retry that cannot succeed.
40
+ */
41
+ export declare function modelUnavailableHttpError(error: unknown): ApiHttpError | null;
16
42
  export {};
@@ -1 +1,18 @@
1
1
  export declare function allowedCorsOrigin(pattern: string, origin: string): boolean;
2
+ export declare function validateInteractionRequestOrigin(value: string | undefined, input: {
3
+ corsAllowOriginRegex: string;
4
+ publicBaseUrl?: string | undefined;
5
+ webBaseUrl?: string | undefined;
6
+ }): string | null;
7
+ type BrowserOriginSettings = {
8
+ corsAllowOriginRegex: string;
9
+ publicBaseUrl?: string | undefined;
10
+ webBaseUrl?: string | undefined;
11
+ };
12
+ /**
13
+ * Whether a present `Origin` header names a browser origin this deployment
14
+ * serves its web app from: the CORS allowlist, the public base URL, or the
15
+ * separate web base URL. `null` and malformed values are never allowed.
16
+ */
17
+ export declare function isAllowedBrowserOrigin(value: string, input: BrowserOriginSettings): boolean;
18
+ export {};