@opengeni/contracts 3.1.0-canary.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 (434) hide show
  1. package/dist/agent-authored-durable-text.d.ts +9 -9
  2. package/dist/agent-config.d.ts +971 -0
  3. package/dist/agent-instruction-changes.d.ts +110 -0
  4. package/dist/agent-learning.d.ts +243 -0
  5. package/dist/allowance-refusal.d.ts +9 -0
  6. package/dist/allowance-refusal.js +50 -0
  7. package/dist/allowance-refusal.js.map +1 -0
  8. package/dist/analytics-consent-report.d.ts +19 -0
  9. package/dist/analytics-consent-report.js +10 -0
  10. package/dist/analytics-consent-report.js.map +1 -0
  11. package/dist/api-key-presets.d.ts +19 -0
  12. package/dist/artifact-catalog.d.ts +188 -0
  13. package/dist/artifacts.d.ts +86 -0
  14. package/dist/atlassian-native-retirement.d.ts +16 -0
  15. package/dist/atlassian-native-retirement.js +30 -0
  16. package/dist/atlassian-native-retirement.js.map +1 -0
  17. package/dist/atlassian.d.ts +1 -0
  18. package/dist/atlassian.js +34 -19
  19. package/dist/browser-storage.d.ts +5 -0
  20. package/dist/browser-storage.js +9 -0
  21. package/dist/browser-storage.js.map +1 -0
  22. package/dist/bundled-skills.d.ts +24 -1
  23. package/dist/canonical-human-identities.js +2 -1
  24. package/dist/chunk-2ZIHHL72.js +153 -0
  25. package/dist/chunk-2ZIHHL72.js.map +1 -0
  26. package/dist/{chunk-5LYFSZ7O.js → chunk-352X6ENP.js} +31 -31
  27. package/dist/chunk-4JGHSSB7.js +11 -0
  28. package/dist/chunk-4JGHSSB7.js.map +1 -0
  29. package/dist/chunk-4QO6GJUX.js +85 -0
  30. package/dist/chunk-4QO6GJUX.js.map +1 -0
  31. package/dist/chunk-4VDMHLLL.js +49 -0
  32. package/dist/chunk-4VDMHLLL.js.map +1 -0
  33. package/dist/chunk-56SNIMDO.js +9 -0
  34. package/dist/chunk-56SNIMDO.js.map +1 -0
  35. package/dist/chunk-6C2HKFTU.js +207 -0
  36. package/dist/chunk-6C2HKFTU.js.map +1 -0
  37. package/dist/chunk-6IXO76Z6.js +72 -0
  38. package/dist/chunk-6IXO76Z6.js.map +1 -0
  39. package/dist/chunk-7272KVWZ.js +60 -0
  40. package/dist/chunk-7272KVWZ.js.map +1 -0
  41. package/dist/{chunk-7ABONTXE.js → chunk-E3GGUBHS.js} +49 -5
  42. package/dist/chunk-E3GGUBHS.js.map +1 -0
  43. package/dist/chunk-EFZYKUE2.js +767 -0
  44. package/dist/chunk-EFZYKUE2.js.map +1 -0
  45. package/dist/chunk-EKWNTOG3.js +154 -0
  46. package/dist/chunk-EKWNTOG3.js.map +1 -0
  47. package/dist/chunk-HABQ7ADB.js +234 -0
  48. package/dist/chunk-HABQ7ADB.js.map +1 -0
  49. package/dist/chunk-HRRU4QPI.js +91 -0
  50. package/dist/chunk-HRRU4QPI.js.map +1 -0
  51. package/dist/{chunk-3SIZGL3O.js → chunk-IK36LXKC.js} +18 -2
  52. package/dist/chunk-IK36LXKC.js.map +1 -0
  53. package/dist/{chunk-TXTQIYCV.js → chunk-ILJ72KPO.js} +56 -3
  54. package/dist/chunk-ILJ72KPO.js.map +1 -0
  55. package/dist/chunk-J4HQ3UKY.js +93 -0
  56. package/dist/chunk-J4HQ3UKY.js.map +1 -0
  57. package/dist/chunk-KHHZTBP7.js +11 -0
  58. package/dist/chunk-KHHZTBP7.js.map +1 -0
  59. package/dist/{chunk-WYBDERIY.js → chunk-LZ2LAHIX.js} +47 -41
  60. package/dist/chunk-LZ2LAHIX.js.map +1 -0
  61. package/dist/chunk-NDZHPTCL.js +400 -0
  62. package/dist/chunk-NDZHPTCL.js.map +1 -0
  63. package/dist/chunk-OF6OKOBF.js +54793 -0
  64. package/dist/chunk-OF6OKOBF.js.map +1 -0
  65. package/dist/chunk-OL23ARTF.js +94 -0
  66. package/dist/chunk-OL23ARTF.js.map +1 -0
  67. package/dist/chunk-PUIUXIOL.js +189 -0
  68. package/dist/chunk-PUIUXIOL.js.map +1 -0
  69. package/dist/{chunk-WBYTNVIW.js → chunk-RKX3NQYS.js} +1 -1
  70. package/dist/{chunk-Y3KNXVTD.js → chunk-RMWXDZEO.js} +128 -21
  71. package/dist/chunk-RMWXDZEO.js.map +1 -0
  72. package/dist/{chunk-MRWYRAS5.js → chunk-SHO4YO4B.js} +27 -35
  73. package/dist/chunk-SHO4YO4B.js.map +1 -0
  74. package/dist/chunk-SWRN2DJ3.js +153 -0
  75. package/dist/chunk-SWRN2DJ3.js.map +1 -0
  76. package/dist/chunk-TCXCRBPF.js +267 -0
  77. package/dist/chunk-TCXCRBPF.js.map +1 -0
  78. package/dist/chunk-TLU3UEMD.js +324 -0
  79. package/dist/chunk-TLU3UEMD.js.map +1 -0
  80. package/dist/chunk-TSWWZMUS.js +186 -0
  81. package/dist/chunk-TSWWZMUS.js.map +1 -0
  82. package/dist/{chunk-PX3VCKAU.js → chunk-WVCFSOUZ.js} +1 -1
  83. package/dist/{chunk-PX3VCKAU.js.map → chunk-WVCFSOUZ.js.map} +1 -1
  84. package/dist/chunk-XDLAGX66.js +127 -0
  85. package/dist/chunk-XDLAGX66.js.map +1 -0
  86. package/dist/chunk-YKZ4WU4P.js +33 -0
  87. package/dist/chunk-YKZ4WU4P.js.map +1 -0
  88. package/dist/{chunk-O5LEQHDM.js → chunk-Z7WEVGCL.js} +3 -3
  89. package/dist/{chunk-YBW5JSA3.js → chunk-ZDCRWCGZ.js} +119 -101
  90. package/dist/chunk-ZDCRWCGZ.js.map +1 -0
  91. package/dist/claude-provider-account-authority.d.ts +18 -0
  92. package/dist/claude-subscription-oauth.d.ts +42 -0
  93. package/dist/claude-subscription-usage.d.ts +159 -0
  94. package/dist/client-error-report.d.ts +158 -0
  95. package/dist/client-error-report.js +164 -0
  96. package/dist/client-error-report.js.map +1 -0
  97. package/dist/code-search.d.ts +52 -0
  98. package/dist/code-search.js +40 -0
  99. package/dist/code-search.js.map +1 -0
  100. package/dist/codex-provider-account-authority.js +20 -12
  101. package/dist/codex-provider-account-authority.js.map +1 -1
  102. package/dist/company-brain.d.ts +19 -81
  103. package/dist/company-profile.d.ts +144 -6
  104. package/dist/connect.d.ts +37 -0
  105. package/dist/connect.js +216 -159
  106. package/dist/connect.js.map +1 -1
  107. package/dist/connection-account-label.d.ts +2 -0
  108. package/dist/connection-account-label.js +35 -0
  109. package/dist/connection-account-label.js.map +1 -0
  110. package/dist/connection-authority.d.ts +9 -317
  111. package/dist/connection-authority.js +37 -42
  112. package/dist/connector-attachments.js +2 -1
  113. package/dist/connector-destinations.js +2 -1
  114. package/dist/connector-tool-permissions.d.ts +137 -0
  115. package/dist/cua-desktop-tools.d.ts +17 -0
  116. package/dist/define-schema.d.ts +8 -0
  117. package/dist/direct-model-provider.d.ts +36 -0
  118. package/dist/editable-artifact-codec-registry.js +5 -5
  119. package/dist/editable-artifact-committed-transaction.js +3 -2
  120. package/dist/editable-artifact-live.js +5 -5
  121. package/dist/editable-artifact-serialized-commit.js +6 -6
  122. package/dist/editable-artifact-versions.d.ts +7 -1
  123. package/dist/editable-artifact-versions.js +1 -1
  124. package/dist/editable-artifacts.js +62 -56
  125. package/dist/event-preview.d.ts +22 -0
  126. package/dist/external-identities.d.ts +174 -0
  127. package/dist/external-identities.js +15 -4
  128. package/dist/first-party-tool-authorization.d.ts +815 -0
  129. package/dist/github-repository-contracts.js +60 -43
  130. package/dist/github-repository-contracts.js.map +1 -1
  131. package/dist/google-drive.d.ts +2 -1
  132. package/dist/google-drive.js +305 -238
  133. package/dist/google-drive.js.map +1 -1
  134. package/dist/host-mcp-bindings.d.ts +39 -10
  135. package/dist/host-mcp-bindings.js +256 -171
  136. package/dist/host-mcp-bindings.js.map +1 -1
  137. package/dist/image-generation.d.ts +1 -0
  138. package/dist/index.d.ts +15715 -3850
  139. package/dist/index.js +2088 -289
  140. package/dist/insights-usage.d.ts +877 -0
  141. package/dist/insights-usage.js +559 -0
  142. package/dist/insights-usage.js.map +1 -0
  143. package/dist/interaction.d.ts +1176 -829
  144. package/dist/knowledge-entries.d.ts +984 -0
  145. package/dist/knowledge-preparation.d.ts +239 -0
  146. package/dist/managed-auth-session-sets.d.ts +7 -0
  147. package/dist/managed-auth-session-sets.js +198 -132
  148. package/dist/managed-auth-session-sets.js.map +1 -1
  149. package/dist/managed-sign-in-methods.d.ts +56 -0
  150. package/dist/managed-sign-in-methods.js +64 -0
  151. package/dist/managed-sign-in-methods.js.map +1 -0
  152. package/dist/mcp-catalog-limits.d.ts +2 -0
  153. package/dist/mcp-endpoint.js +9 -0
  154. package/dist/mcp-endpoint.js.map +1 -0
  155. package/dist/mcp-oauth.d.ts +2 -2
  156. package/dist/mcp-structured-content.d.ts +25 -0
  157. package/dist/modal-native-proof-v2.d.ts +587 -0
  158. package/dist/modal-native-proof-v2.js +38 -0
  159. package/dist/modal-native-proof-v2.js.map +1 -0
  160. package/dist/model-account-choice.d.ts +235 -0
  161. package/dist/model-account-settings.d.ts +422 -0
  162. package/dist/model-availability.d.ts +15 -0
  163. package/dist/model-connection-access.d.ts +13 -0
  164. package/dist/model-context-inspector.d.ts +98 -0
  165. package/dist/model-display.d.ts +43 -0
  166. package/dist/model-display.js +17 -0
  167. package/dist/model-display.js.map +1 -0
  168. package/dist/model-picker-order.d.ts +3 -1
  169. package/dist/model-picker-order.js +3 -0
  170. package/dist/model-picker-order.js.map +1 -1
  171. package/dist/organization-access.d.ts +412 -0
  172. package/dist/organization-access.js +39 -0
  173. package/dist/organization-access.js.map +1 -0
  174. package/dist/organization-integration-policy.d.ts +27 -0
  175. package/dist/organization-membership-lifecycle.d.ts +38 -0
  176. package/dist/organization-model-usage.d.ts +146 -0
  177. package/dist/organization-model-usage.js +78 -0
  178. package/dist/organization-model-usage.js.map +1 -0
  179. package/dist/organization-recovery.js +2 -1
  180. package/dist/organization-usage.d.ts +138 -0
  181. package/dist/permissions.d.ts +18 -0
  182. package/dist/personal-github.d.ts +1 -0
  183. package/dist/personal-github.js +199 -144
  184. package/dist/personal-github.js.map +1 -1
  185. package/dist/plugin-discovery.js +1 -1
  186. package/dist/prepared-mcp-setup.d.ts +54 -0
  187. package/dist/prepared-mcp-setup.js +12 -0
  188. package/dist/prepared-mcp-setup.js.map +1 -0
  189. package/dist/product-analytics.d.ts +116 -0
  190. package/dist/product-lifecycle-facts.d.ts +73 -0
  191. package/dist/remember.d.ts +98 -6
  192. package/dist/retained-output.d.ts +8 -0
  193. package/dist/sandbox-file-artifacts.d.ts +1 -0
  194. package/dist/sandbox-provider-command.d.ts +91 -1
  195. package/dist/sandbox-recovery.d.ts +146 -0
  196. package/dist/secret-generator.d.ts +44 -0
  197. package/dist/secret-references.d.ts +90 -0
  198. package/dist/secret-resolution.d.ts +111 -0
  199. package/dist/secret-totp.d.ts +41 -0
  200. package/dist/session-final-reply.d.ts +6 -0
  201. package/dist/session-final-reply.js +9 -0
  202. package/dist/session-final-reply.js.map +1 -0
  203. package/dist/session-goal-reports.d.ts +21 -0
  204. package/dist/session-history-import.d.ts +1272 -0
  205. package/dist/session-list-entries.d.ts +4 -0
  206. package/dist/session-list-entries.js +56 -0
  207. package/dist/session-list-entries.js.map +1 -0
  208. package/dist/session-mcp-projections.d.ts +6 -0
  209. package/dist/session-mcp-tool-permissions.d.ts +62 -0
  210. package/dist/session-message-search.d.ts +68 -0
  211. package/dist/session-target.d.ts +18 -0
  212. package/dist/session-titles.d.ts +8 -0
  213. package/dist/session-titles.js +5 -1
  214. package/dist/session-usage-limit-refusal.d.ts +34 -0
  215. package/dist/session-usage-limit-refusal.js +15 -0
  216. package/dist/session-usage-limit-refusal.js.map +1 -0
  217. package/dist/session-usage-limits.d.ts +127 -0
  218. package/dist/session-usage-limits.js +41 -0
  219. package/dist/session-usage-limits.js.map +1 -0
  220. package/dist/signup-attribution.d.ts +39 -0
  221. package/dist/site-data.d.ts +286 -0
  222. package/dist/site-operations.d.ts +39 -0
  223. package/dist/site-publishing.d.ts +778 -0
  224. package/dist/site-session-http.d.ts +89 -4
  225. package/dist/site-session-http.js +25 -1
  226. package/dist/site-sql.d.ts +421 -0
  227. package/dist/skill-catalog-context.d.ts +7 -0
  228. package/dist/skill-files.d.ts +1 -1
  229. package/dist/skill-use.d.ts +61 -0
  230. package/dist/skills.d.ts +15 -0
  231. package/dist/slack-bot-scopes.d.ts +17 -12
  232. package/dist/slack-bot-scopes.js +10 -3
  233. package/dist/slack-rest-mcp.d.ts +36 -0
  234. package/dist/slack-rest-mcp.js +25 -0
  235. package/dist/slack-rest-mcp.js.map +1 -0
  236. package/dist/spreadsheet-artifact-commands.d.ts +14 -1
  237. package/dist/spreadsheet-artifact-commands.js +8 -2
  238. package/dist/spreadsheet-artifact-query.d.ts +13 -6
  239. package/dist/spreadsheet-artifact-query.js +3 -3
  240. package/dist/subscription-account-actions.d.ts +64 -0
  241. package/dist/subscription-account-pools.d.ts +292 -0
  242. package/dist/subscription-personal-authority-v2.d.ts +28 -0
  243. package/dist/subscription-personal-authority-v2.js +12 -0
  244. package/dist/subscription-personal-authority-v2.js.map +1 -0
  245. package/dist/tool-action-review.d.ts +132 -0
  246. package/dist/tool-catalog.d.ts +408 -0
  247. package/dist/tool-policy.d.ts +5 -0
  248. package/dist/tool-review-presentation.d.ts +12 -0
  249. package/dist/tool-review-presentation.js +17 -0
  250. package/dist/tool-review-presentation.js.map +1 -0
  251. package/dist/transcription-recordings.d.ts +21 -0
  252. package/dist/turn-serving-policy.d.ts +221 -0
  253. package/dist/usage-allowances.d.ts +314 -0
  254. package/dist/usage-allowances.js +52 -0
  255. package/dist/usage-allowances.js.map +1 -0
  256. package/dist/vaults.d.ts +1286 -0
  257. package/dist/video-generation.d.ts +3 -0
  258. package/dist/video-generation.js +2 -1
  259. package/dist/workspace-instruction-policies.d.ts +13 -0
  260. package/dist/workspace-integration-wire.d.ts +36 -0
  261. package/dist/workspace-integration-wire.js +23 -0
  262. package/dist/workspace-integration-wire.js.map +1 -0
  263. package/dist/workspace-integrations.d.ts +1028 -0
  264. package/dist/workspace-state.d.ts +85 -416
  265. package/dist/xai-provider-account-authority.js +2 -1
  266. package/package.json +98 -2
  267. package/src/agent-authored-durable-text.ts +14 -11
  268. package/src/agent-config.ts +1698 -0
  269. package/src/agent-instruction-changes.ts +115 -0
  270. package/src/agent-learning.ts +188 -0
  271. package/src/agent-topology.ts +57 -52
  272. package/src/allowance-refusal.ts +81 -0
  273. package/src/analytics-consent-report.ts +20 -0
  274. package/src/api-key-presets.ts +28 -0
  275. package/src/artifact-catalog.ts +82 -0
  276. package/src/artifacts.ts +299 -227
  277. package/src/atlassian-native-retirement.ts +33 -0
  278. package/src/atlassian.ts +135 -108
  279. package/src/browser-storage.ts +10 -0
  280. package/src/bundled-skills.ts +60 -17
  281. package/src/canonical-human-identities.ts +60 -58
  282. package/src/claude-provider-account-authority.ts +12 -0
  283. package/src/claude-subscription-oauth.ts +73 -0
  284. package/src/claude-subscription-usage.ts +68 -0
  285. package/src/client-error-report.ts +343 -0
  286. package/src/code-search.ts +105 -0
  287. package/src/codex-provider-account-authority.ts +21 -16
  288. package/src/company-brain-governed-writes.ts +255 -233
  289. package/src/company-brain.ts +164 -153
  290. package/src/company-profile.ts +365 -292
  291. package/src/connect.ts +212 -173
  292. package/src/connection-account-label.ts +46 -0
  293. package/src/connection-authority.ts +183 -364
  294. package/src/connector-attachments.ts +137 -122
  295. package/src/connector-destinations.ts +46 -42
  296. package/src/connector-tool-permissions.ts +117 -0
  297. package/src/cua-desktop-tools.gen.json +6512 -0
  298. package/src/cua-desktop-tools.linux.gen.json +6600 -0
  299. package/src/cua-desktop-tools.ts +36 -0
  300. package/src/cua-desktop-tools.windows.gen.json +6353 -0
  301. package/src/define-schema.ts +10 -0
  302. package/src/direct-model-provider.ts +108 -0
  303. package/src/editable-artifact-committed-transaction.ts +17 -0
  304. package/src/editable-artifact-versions.ts +7 -1
  305. package/src/event-preview.ts +53 -3
  306. package/src/external-identities.ts +262 -145
  307. package/src/feedback.ts +43 -30
  308. package/src/first-party-tool-authorization.ts +356 -0
  309. package/src/github-repository-contracts.ts +78 -64
  310. package/src/google-drive.ts +285 -234
  311. package/src/governed-learning-activation.ts +152 -131
  312. package/src/governed-learning-evaluator.ts +140 -133
  313. package/src/host-mcp-bindings.ts +292 -198
  314. package/src/image-generation.ts +104 -95
  315. package/src/index.ts +13354 -8654
  316. package/src/insights-usage.ts +727 -0
  317. package/src/interaction.ts +3070 -2326
  318. package/src/knowledge-entries.ts +428 -0
  319. package/src/knowledge-preparation.ts +57 -0
  320. package/src/knowledge.ts +246 -213
  321. package/src/managed-auth-session-sets.ts +220 -144
  322. package/src/managed-sign-in-methods.ts +52 -0
  323. package/src/mcp-catalog-limits.ts +2 -0
  324. package/src/mcp-oauth.ts +43 -34
  325. package/src/mcp-receipts.ts +192 -192
  326. package/src/mcp-structured-content.ts +81 -0
  327. package/src/memory-slack-delivery.ts +171 -142
  328. package/src/modal-native-proof-v2.ts +429 -0
  329. package/src/model-account-choice.ts +177 -0
  330. package/src/model-account-settings.ts +210 -0
  331. package/src/model-availability.ts +22 -0
  332. package/src/model-connection-access.ts +61 -14
  333. package/src/model-context-inspector.ts +133 -99
  334. package/src/model-display.ts +221 -0
  335. package/src/model-picker-order.ts +12 -1
  336. package/src/organization-access.ts +217 -0
  337. package/src/organization-integration-policy.ts +63 -0
  338. package/src/organization-membership-lifecycle.ts +528 -382
  339. package/src/organization-model-usage.ts +81 -0
  340. package/src/organization-recovery.ts +147 -135
  341. package/src/organization-usage.ts +94 -0
  342. package/src/permissions.ts +88 -52
  343. package/src/personal-github.ts +210 -171
  344. package/src/preference-registry.ts +314 -258
  345. package/src/prepared-mcp-setup.ts +189 -0
  346. package/src/product-analytics.ts +261 -0
  347. package/src/product-lifecycle-facts.ts +122 -0
  348. package/src/remember.ts +181 -167
  349. package/src/retained-output.ts +194 -165
  350. package/src/sandbox-file-artifacts.ts +60 -47
  351. package/src/sandbox-provider-command.ts +88 -20
  352. package/src/sandbox-recovery.ts +129 -0
  353. package/src/scoped-knowledge.ts +61 -43
  354. package/src/secret-generator.ts +155 -0
  355. package/src/secret-references.ts +414 -0
  356. package/src/secret-resolution.ts +274 -0
  357. package/src/secret-totp.ts +188 -0
  358. package/src/session-final-reply.ts +16 -0
  359. package/src/session-goal-reports.ts +64 -0
  360. package/src/session-history-import.ts +177 -0
  361. package/src/session-list-entries.ts +96 -0
  362. package/src/session-mcp-projections.ts +11 -0
  363. package/src/session-mcp-tool-permissions.ts +108 -0
  364. package/src/session-message-search.ts +61 -0
  365. package/src/session-target.ts +57 -0
  366. package/src/session-titles.ts +80 -10
  367. package/src/session-topology-primitives.ts +19 -12
  368. package/src/session-usage-limit-refusal.ts +101 -0
  369. package/src/session-usage-limits.ts +171 -0
  370. package/src/signup-attribution.ts +86 -0
  371. package/src/site-data.ts +339 -0
  372. package/src/site-operations.ts +154 -0
  373. package/src/site-publishing.ts +876 -0
  374. package/src/site-session-http.ts +294 -16
  375. package/src/site-sql.ts +1123 -0
  376. package/src/skill-catalog-context.ts +50 -0
  377. package/src/skill-files.ts +3 -3
  378. package/src/skill-use.ts +80 -0
  379. package/src/skills.ts +82 -54
  380. package/src/slack-bot-scopes.ts +31 -39
  381. package/src/slack-rest-mcp.ts +222 -0
  382. package/src/slack-task-policy.ts +96 -73
  383. package/src/spreadsheet-artifact-commands.ts +73 -2
  384. package/src/spreadsheet-artifact-query.ts +187 -39
  385. package/src/subscription-account-actions.ts +84 -0
  386. package/src/subscription-account-pools.ts +53 -0
  387. package/src/subscription-personal-authority-v2.ts +66 -0
  388. package/src/task-notes.ts +55 -51
  389. package/src/tool-action-review.ts +258 -0
  390. package/src/tool-catalog.ts +609 -372
  391. package/src/tool-policy.ts +82 -0
  392. package/src/tool-result-spill.ts +12 -9
  393. package/src/tool-review-presentation.ts +385 -0
  394. package/src/transcription-recordings.ts +145 -131
  395. package/src/turn-serving-policy.ts +166 -0
  396. package/src/usage-allowances.ts +248 -0
  397. package/src/vaults.ts +850 -0
  398. package/src/video-generation.ts +385 -360
  399. package/src/work-claims.ts +173 -149
  400. package/src/workspace-instruction-policies.ts +349 -275
  401. package/src/workspace-integration-wire.ts +101 -0
  402. package/src/workspace-integrations.ts +724 -0
  403. package/src/workspace-learning-administration.ts +57 -44
  404. package/src/workspace-learning-policy.ts +127 -96
  405. package/src/workspace-state.ts +253 -333
  406. package/src/xai-provider-account-authority.ts +22 -17
  407. package/dist/chunk-3SIZGL3O.js.map +0 -1
  408. package/dist/chunk-7ABONTXE.js.map +0 -1
  409. package/dist/chunk-BCS7WHCK.js +0 -139
  410. package/dist/chunk-BCS7WHCK.js.map +0 -1
  411. package/dist/chunk-GRG7PHWQ.js +0 -25
  412. package/dist/chunk-GRG7PHWQ.js.map +0 -1
  413. package/dist/chunk-JUFK3T4Q.js +0 -80
  414. package/dist/chunk-JUFK3T4Q.js.map +0 -1
  415. package/dist/chunk-M5ZGRVIQ.js +0 -719
  416. package/dist/chunk-M5ZGRVIQ.js.map +0 -1
  417. package/dist/chunk-MRWYRAS5.js.map +0 -1
  418. package/dist/chunk-OSBYTE3O.js +0 -348
  419. package/dist/chunk-OSBYTE3O.js.map +0 -1
  420. package/dist/chunk-P3HLDT77.js +0 -59
  421. package/dist/chunk-P3HLDT77.js.map +0 -1
  422. package/dist/chunk-TEMFILR7.js +0 -143
  423. package/dist/chunk-TEMFILR7.js.map +0 -1
  424. package/dist/chunk-TXTQIYCV.js.map +0 -1
  425. package/dist/chunk-UR2GFYIE.js +0 -22598
  426. package/dist/chunk-UR2GFYIE.js.map +0 -1
  427. package/dist/chunk-WYBDERIY.js.map +0 -1
  428. package/dist/chunk-Y3KNXVTD.js.map +0 -1
  429. package/dist/chunk-YBW5JSA3.js.map +0 -1
  430. package/dist/chunk-YRXAWWCU.js +0 -45
  431. package/dist/chunk-YRXAWWCU.js.map +0 -1
  432. /package/dist/{chunk-5LYFSZ7O.js.map → chunk-352X6ENP.js.map} +0 -0
  433. /package/dist/{chunk-WBYTNVIW.js.map → chunk-RKX3NQYS.js.map} +0 -0
  434. /package/dist/{chunk-O5LEQHDM.js.map → chunk-Z7WEVGCL.js.map} +0 -0
@@ -0,0 +1,724 @@
1
+ import { defineSchema } from "./define-schema";
2
+ import { z } from "zod";
3
+ import {
4
+ NotificationFact,
5
+ NotificationLink,
6
+ NotificationUndeliveredReason,
7
+ NotificationUrgency,
8
+ type TurnInitiator,
9
+ type TurnInitiatorContext,
10
+ } from "./index";
11
+
12
+ import {
13
+ OPENGENI_WEBHOOK_TEST_EVENT_TYPE,
14
+ WORKSPACE_WEBHOOK_EVENT_TYPES,
15
+ } from "./workspace-integration-wire";
16
+ import {
17
+ UsageAllowancePeriod,
18
+ UsageAllowanceStatus,
19
+ UsageAllowanceWindow,
20
+ } from "./usage-allowances";
21
+
22
+ export * from "./workspace-integration-wire";
23
+
24
+ /**
25
+ * Workspace integration primitives for embedding hosts: signed outbound
26
+ * webhooks and one signed HTTP credential provider per workspace. Both
27
+ * directions share one signature scheme so a host verifies every Opengeni
28
+ * request with the same helper.
29
+ */
30
+
31
+ export const WorkspaceWebhookEventType = /* @__PURE__ */ defineSchema(() =>
32
+ z.enum(WORKSPACE_WEBHOOK_EVENT_TYPES),
33
+ );
34
+ export type WorkspaceWebhookEventType = z.infer<typeof WorkspaceWebhookEventType>;
35
+
36
+ export const WORKSPACE_WEBHOOK_LIMIT_PER_WORKSPACE = 10;
37
+ export const ORGANIZATION_WEBHOOK_LIMIT_PER_ORGANIZATION = 10;
38
+
39
+ /** Scoping convenience, never authority. Null means all non-personal workspaces. */
40
+ export const IntegrationWorkspaceFilter = /* @__PURE__ */ defineSchema(() =>
41
+ z
42
+ .object({
43
+ externalSource: z
44
+ .string()
45
+ .min(1)
46
+ .max(200)
47
+ .refine(
48
+ (value) =>
49
+ !value.includes("\0") &&
50
+ !/[\uD800-\uDFFF]/u.test(value) &&
51
+ new TextEncoder().encode(value).byteLength <= 200,
52
+ "External source must be valid PostgreSQL text of at most 200 UTF-8 bytes",
53
+ ),
54
+ })
55
+ .strict(),
56
+ );
57
+ export type IntegrationWorkspaceFilter = z.infer<typeof IntegrationWorkspaceFilter>;
58
+
59
+ /** Informational attribution only. It never supplies or changes authorization. */
60
+ export const InitiatingHuman = /* @__PURE__ */ defineSchema(() =>
61
+ z.object({
62
+ subjectId: z.string(),
63
+ externalIdentity: z.object({ source: z.string(), externalId: z.string() }).nullable(),
64
+ }),
65
+ );
66
+ export type InitiatingHuman = z.infer<typeof InitiatingHuman>;
67
+
68
+ const HttpUrl = /* @__PURE__ */ defineSchema(() =>
69
+ z
70
+ .string()
71
+ .trim()
72
+ .min(8)
73
+ .max(2048)
74
+ .url()
75
+ .refine((value) => /^https?:\/\//i.test(value), "URL must use http or https"),
76
+ );
77
+
78
+ const EventTypes = /* @__PURE__ */ defineSchema(() =>
79
+ z
80
+ .array(WorkspaceWebhookEventType)
81
+ .min(1)
82
+ .max(WORKSPACE_WEBHOOK_EVENT_TYPES.length)
83
+ .transform((types) => [...new Set(types)]),
84
+ );
85
+
86
+ export const WorkspaceWebhook = /* @__PURE__ */ defineSchema(() =>
87
+ z
88
+ .object({
89
+ id: z.string().uuid(),
90
+ workspaceId: z.string().uuid(),
91
+ url: z.string(),
92
+ eventTypes: z.array(WorkspaceWebhookEventType),
93
+ enabled: z.boolean(),
94
+ description: z.string().nullable(),
95
+ createdAt: z.string(),
96
+ updatedAt: z.string(),
97
+ })
98
+ .strict(),
99
+ );
100
+ export type WorkspaceWebhook = z.infer<typeof WorkspaceWebhook>;
101
+
102
+ export const CreateWorkspaceWebhookRequest = /* @__PURE__ */ defineSchema(() =>
103
+ z
104
+ .object({
105
+ url: HttpUrl,
106
+ eventTypes: EventTypes,
107
+ enabled: z.boolean().optional(),
108
+ description: z.string().trim().max(500).nullable().optional(),
109
+ })
110
+ .strict(),
111
+ );
112
+ export type CreateWorkspaceWebhookRequest = z.input<typeof CreateWorkspaceWebhookRequest>;
113
+
114
+ /** The signing secret is returned exactly once, at creation. */
115
+ export const CreateWorkspaceWebhookResponse = /* @__PURE__ */ defineSchema(() =>
116
+ z.object({ webhook: WorkspaceWebhook, secret: z.string() }).strict(),
117
+ );
118
+ export type CreateWorkspaceWebhookResponse = z.infer<typeof CreateWorkspaceWebhookResponse>;
119
+
120
+ export const UpdateWorkspaceWebhookRequest = /* @__PURE__ */ defineSchema(() =>
121
+ z
122
+ .object({
123
+ url: HttpUrl.optional(),
124
+ eventTypes: EventTypes.optional(),
125
+ enabled: z.boolean().optional(),
126
+ description: z.string().trim().max(500).nullable().optional(),
127
+ })
128
+ .strict(),
129
+ );
130
+ export type UpdateWorkspaceWebhookRequest = z.input<typeof UpdateWorkspaceWebhookRequest>;
131
+
132
+ export const ListWorkspaceWebhooksResponse = /* @__PURE__ */ defineSchema(() =>
133
+ z.object({ webhooks: z.array(WorkspaceWebhook) }).strict(),
134
+ );
135
+ export type ListWorkspaceWebhooksResponse = z.infer<typeof ListWorkspaceWebhooksResponse>;
136
+
137
+ /** Organization webhooks fan out session events only; usage events are per-workspace. */
138
+ export const OrganizationWebhookEventType = WorkspaceWebhookEventType.exclude([
139
+ "usage.threshold_reached",
140
+ "usage.exhausted",
141
+ "usage.period_reset",
142
+ ]);
143
+ export type OrganizationWebhookEventType = z.infer<typeof OrganizationWebhookEventType>;
144
+ const OrganizationEventTypes = /* @__PURE__ */ defineSchema(() =>
145
+ z
146
+ .array(WorkspaceWebhookEventType)
147
+ .min(1)
148
+ .max(WorkspaceWebhookEventType.options.length)
149
+ .refine((types) => types.every((type) => !type.startsWith("usage.")), {
150
+ message:
151
+ "Organization webhooks accept session events only; subscribe to usage events on a workspace webhook.",
152
+ })
153
+ .transform((types) => [...new Set(types)]),
154
+ );
155
+
156
+ export const OrganizationWebhook = /* @__PURE__ */ defineSchema(() =>
157
+ WorkspaceWebhook.omit({ workspaceId: true }).extend({
158
+ organizationId: z.string().uuid(),
159
+ eventTypes: z
160
+ .array(WorkspaceWebhookEventType)
161
+ .refine((types) => types.every((type) => !type.startsWith("usage.")), {
162
+ message:
163
+ "Organization webhooks accept session events only; subscribe to usage events on a workspace webhook.",
164
+ }),
165
+ workspaceFilter: IntegrationWorkspaceFilter.nullable(),
166
+ }),
167
+ );
168
+ export type OrganizationWebhook = z.infer<typeof OrganizationWebhook>;
169
+
170
+ export const CreateOrganizationWebhookRequest = /* @__PURE__ */ defineSchema(() =>
171
+ CreateWorkspaceWebhookRequest.extend({
172
+ eventTypes: OrganizationEventTypes,
173
+ workspaceFilter: IntegrationWorkspaceFilter.nullable(),
174
+ }),
175
+ );
176
+ export type CreateOrganizationWebhookRequest = z.input<typeof CreateOrganizationWebhookRequest>;
177
+
178
+ export const UpdateOrganizationWebhookRequest = /* @__PURE__ */ defineSchema(() =>
179
+ UpdateWorkspaceWebhookRequest.extend({
180
+ eventTypes: OrganizationEventTypes.optional(),
181
+ /** Explicit on every update: null covers all non-personal workspaces. */
182
+ workspaceFilter: IntegrationWorkspaceFilter.nullable(),
183
+ }),
184
+ );
185
+ export type UpdateOrganizationWebhookRequest = z.input<typeof UpdateOrganizationWebhookRequest>;
186
+
187
+ export const CreateOrganizationWebhookResponse = /* @__PURE__ */ defineSchema(() =>
188
+ z.object({ webhook: OrganizationWebhook, secret: z.string() }).strict(),
189
+ );
190
+ export type CreateOrganizationWebhookResponse = z.infer<typeof CreateOrganizationWebhookResponse>;
191
+
192
+ export const ListOrganizationWebhooksResponse = /* @__PURE__ */ defineSchema(() =>
193
+ z.object({ webhooks: z.array(OrganizationWebhook) }).strict(),
194
+ );
195
+ export type ListOrganizationWebhooksResponse = z.infer<typeof ListOrganizationWebhooksResponse>;
196
+
197
+ export const WorkspaceWebhookDeliveryStatus = /* @__PURE__ */ defineSchema(() =>
198
+ z.enum(["pending", "delivered", "failed"]),
199
+ );
200
+ export type WorkspaceWebhookDeliveryStatus = z.infer<typeof WorkspaceWebhookDeliveryStatus>;
201
+
202
+ export const WorkspaceWebhookDelivery = /* @__PURE__ */ defineSchema(() =>
203
+ z
204
+ .object({
205
+ id: z.string().uuid(),
206
+ webhookId: z.string().uuid(),
207
+ eventId: z.string().uuid(),
208
+ eventType: z.string(),
209
+ status: WorkspaceWebhookDeliveryStatus,
210
+ attempts: z.number().int(),
211
+ lastStatus: z.number().int().nullable(),
212
+ lastError: z.string().nullable(),
213
+ nextAttemptAt: z.string().nullable(),
214
+ deliveredAt: z.string().nullable(),
215
+ failedAt: z.string().nullable(),
216
+ createdAt: z.string(),
217
+ })
218
+ .strict(),
219
+ );
220
+ export type WorkspaceWebhookDelivery = z.infer<typeof WorkspaceWebhookDelivery>;
221
+
222
+ export const ListWorkspaceWebhookDeliveriesResponse = /* @__PURE__ */ defineSchema(() =>
223
+ z.object({ deliveries: z.array(WorkspaceWebhookDelivery) }).strict(),
224
+ );
225
+ export type ListWorkspaceWebhookDeliveriesResponse = z.infer<
226
+ typeof ListWorkspaceWebhookDeliveriesResponse
227
+ >;
228
+
229
+ export const OrganizationWebhookDelivery = WorkspaceWebhookDelivery;
230
+ export type OrganizationWebhookDelivery = z.infer<typeof OrganizationWebhookDelivery>;
231
+ export const ListOrganizationWebhookDeliveriesResponse = ListWorkspaceWebhookDeliveriesResponse;
232
+ export type ListOrganizationWebhookDeliveriesResponse = z.infer<
233
+ typeof ListOrganizationWebhookDeliveriesResponse
234
+ >;
235
+
236
+ /**
237
+ * The body POSTed to a webhook endpoint. Lifecycle events identify what
238
+ * changed; notification events also include their bounded display content.
239
+ */
240
+ export const SessionWorkspaceWebhookEvent = /* @__PURE__ */ defineSchema(() =>
241
+ z.object({
242
+ lane: z.enum(["organization", "workspace"]).default("workspace"),
243
+ id: z.string().uuid(),
244
+ type: z.string(),
245
+ workspaceId: z.string().uuid(),
246
+ /** Present on new deliveries; optional for receivers of pre-upgrade deliveries. */
247
+ workspace: z
248
+ .object({
249
+ id: z.string().uuid(),
250
+ externalSource: z.string().nullable(),
251
+ externalId: z.string().nullable(),
252
+ })
253
+ .optional(),
254
+ sessionId: z.string().uuid(),
255
+ turnId: z.string().uuid().nullable(),
256
+ sequence: z.number().int(),
257
+ occurredAt: z.string(),
258
+ initiatingHuman: InitiatingHuman.nullable().optional(),
259
+ data: z
260
+ .object({
261
+ status: z.string().optional(),
262
+ reason: z.string().optional(),
263
+ /** Notification fields are optional for pre-upgrade thin deliveries. */
264
+ key: z.string().optional(),
265
+ title: z.string().optional(),
266
+ subtitle: z.string().optional(),
267
+ body: z.string().optional(),
268
+ facts: z.array(z.lazy(() => NotificationFact)).optional(),
269
+ link: z.lazy(() => NotificationLink).optional(),
270
+ urgency: z.lazy(() => NotificationUrgency).optional(),
271
+ replaced: z.boolean().optional(),
272
+ recipientSubjectId: z.string().optional(),
273
+ sender: z.object({ subjectId: z.string(), label: z.string() }).optional(),
274
+ /** Present when Opengeni notified no one, so the receiver may deliver it. */
275
+ undeliveredReason: z.lazy(() => NotificationUndeliveredReason).optional(),
276
+ })
277
+ .passthrough(),
278
+ }),
279
+ );
280
+ export type SessionWorkspaceWebhookEvent = z.infer<typeof SessionWorkspaceWebhookEvent>;
281
+ /** Workspace allowance events have no synthetic session or turn identity.
282
+ * Optional null context fields let transport adapters share an envelope. */
283
+ export const WorkspaceUsageWebhookEvent = /* @__PURE__ */ defineSchema(() =>
284
+ z.object({
285
+ lane: z.literal("workspace").default("workspace"),
286
+ id: z.string().uuid(),
287
+ type: z.enum(["usage.threshold_reached", "usage.exhausted", "usage.period_reset"]),
288
+ workspaceId: z.string().uuid(),
289
+ workspace: z
290
+ .object({
291
+ id: z.string().uuid(),
292
+ externalSource: z.string().nullable(),
293
+ externalId: z.string().nullable(),
294
+ })
295
+ .optional(),
296
+ sessionId: z.null().optional(),
297
+ turnId: z.null().optional(),
298
+ sequence: z.number().int().nonnegative().optional(),
299
+ occurredAt: z.string(),
300
+ data: z
301
+ .object({
302
+ scope: z.enum(["workspace", "member"]).optional(),
303
+ subjectId: z.string().nullable().optional(),
304
+ threshold: z.number().finite().optional(),
305
+ fraction: z.number().finite().nullable().optional(),
306
+ resetsAt: z.string().nullable().optional(),
307
+ status: UsageAllowanceStatus.optional(),
308
+ period: z.union([UsageAllowanceWindow, UsageAllowancePeriod, z.literal("*")]).optional(),
309
+ })
310
+ .passthrough(),
311
+ }),
312
+ );
313
+ export type WorkspaceUsageWebhookEvent = z.infer<typeof WorkspaceUsageWebhookEvent>;
314
+ /**
315
+ * "Send test event": proves the endpoint is reachable and verifies the
316
+ * signature. It names the workspace but no session, turn or sequence.
317
+ */
318
+ export const WorkspaceTestWebhookEvent = /* @__PURE__ */ defineSchema(() =>
319
+ z.object({
320
+ lane: z.enum(["organization", "workspace"]).default("workspace"),
321
+ id: z.string().uuid(),
322
+ type: z.literal(OPENGENI_WEBHOOK_TEST_EVENT_TYPE),
323
+ workspaceId: z.string().uuid(),
324
+ workspace: z
325
+ .object({
326
+ id: z.string().uuid(),
327
+ externalSource: z.string().nullable(),
328
+ externalId: z.string().nullable(),
329
+ })
330
+ .optional(),
331
+ sessionId: z.null().optional(),
332
+ turnId: z.null().optional(),
333
+ occurredAt: z.string(),
334
+ data: z.object({ webhookId: z.string().uuid().optional() }).passthrough(),
335
+ }),
336
+ );
337
+ export type WorkspaceTestWebhookEvent = z.infer<typeof WorkspaceTestWebhookEvent>;
338
+ export const WorkspaceWebhookEvent = /* @__PURE__ */ defineSchema(() =>
339
+ z.union([SessionWorkspaceWebhookEvent, WorkspaceUsageWebhookEvent, WorkspaceTestWebhookEvent]),
340
+ );
341
+ export type WorkspaceWebhookEvent = z.infer<typeof WorkspaceWebhookEvent>;
342
+
343
+ export const WorkspaceCredentialProvider = /* @__PURE__ */ defineSchema(() =>
344
+ z
345
+ .object({
346
+ workspaceId: z.string().uuid(),
347
+ url: z.string(),
348
+ enabled: z.boolean(),
349
+ timeoutMs: z.number().int(),
350
+ createdAt: z.string(),
351
+ updatedAt: z.string(),
352
+ })
353
+ .strict(),
354
+ );
355
+ export type WorkspaceCredentialProvider = z.infer<typeof WorkspaceCredentialProvider>;
356
+
357
+ export const PutWorkspaceCredentialProviderRequest = /* @__PURE__ */ defineSchema(() =>
358
+ z
359
+ .object({
360
+ url: HttpUrl,
361
+ enabled: z.boolean().optional(),
362
+ timeoutMs: z.number().int().min(1000).max(30000).optional(),
363
+ })
364
+ .strict(),
365
+ );
366
+ export type PutWorkspaceCredentialProviderRequest = z.input<
367
+ typeof PutWorkspaceCredentialProviderRequest
368
+ >;
369
+
370
+ /** `secret` is present only when the provider was first created. */
371
+ export const PutWorkspaceCredentialProviderResponse = /* @__PURE__ */ defineSchema(() =>
372
+ z.object({ provider: WorkspaceCredentialProvider, secret: z.string().optional() }).strict(),
373
+ );
374
+ export type PutWorkspaceCredentialProviderResponse = z.infer<
375
+ typeof PutWorkspaceCredentialProviderResponse
376
+ >;
377
+
378
+ export const GetWorkspaceCredentialProviderResponse = /* @__PURE__ */ defineSchema(() =>
379
+ z.object({ provider: WorkspaceCredentialProvider.nullable() }).strict(),
380
+ );
381
+ export type GetWorkspaceCredentialProviderResponse = z.infer<
382
+ typeof GetWorkspaceCredentialProviderResponse
383
+ >;
384
+
385
+ export const OrganizationCredentialProvider = /* @__PURE__ */ defineSchema(() =>
386
+ WorkspaceCredentialProvider.omit({
387
+ workspaceId: true,
388
+ }).extend({
389
+ organizationId: z.string().uuid(),
390
+ workspaceFilter: IntegrationWorkspaceFilter.nullable(),
391
+ }),
392
+ );
393
+ export type OrganizationCredentialProvider = z.infer<typeof OrganizationCredentialProvider>;
394
+
395
+ export const PutOrganizationCredentialProviderRequest =
396
+ /* @__PURE__ */ defineSchema(() =>
397
+ PutWorkspaceCredentialProviderRequest.extend({
398
+ /** Required; null explicitly covers all non-personal workspaces. PUT replaces configuration. */
399
+ workspaceFilter: IntegrationWorkspaceFilter.nullable(),
400
+ }),
401
+ );
402
+ export type PutOrganizationCredentialProviderRequest = z.input<
403
+ typeof PutOrganizationCredentialProviderRequest
404
+ >;
405
+
406
+ export const PutOrganizationCredentialProviderResponse = /* @__PURE__ */ defineSchema(() =>
407
+ z.object({ provider: OrganizationCredentialProvider, secret: z.string().optional() }).strict(),
408
+ );
409
+ export type PutOrganizationCredentialProviderResponse = z.infer<
410
+ typeof PutOrganizationCredentialProviderResponse
411
+ >;
412
+
413
+ export const GetOrganizationCredentialProviderResponse = /* @__PURE__ */ defineSchema(() =>
414
+ z.object({ provider: OrganizationCredentialProvider.nullable() }).strict(),
415
+ );
416
+ export type GetOrganizationCredentialProviderResponse = z.infer<
417
+ typeof GetOrganizationCredentialProviderResponse
418
+ >;
419
+
420
+ /** Exact accepted-turn provenance, never an authorization grant. */
421
+ export type CredentialProviderInitiatorContext = {
422
+ /** Agent delegation is identified by the newest frozen `via` hop. */
423
+ kind: "human" | "service" | "agent";
424
+ /** Full frozen causal identity, including an accepted service's display label. */
425
+ initiator: TurnInitiator;
426
+ /** Unmodified accepted context, including bounded `via` and coalesced `updateIds`. */
427
+ context: TurnInitiatorContext;
428
+ };
429
+
430
+ /** The body Opengeni POSTs to a workspace credential provider. */
431
+ export type CredentialProviderRequest = {
432
+ type: "credentials.request";
433
+ lane: "organization" | "workspace";
434
+ /** Selected session-attached remote targets; providers must authorize each exact URL. */
435
+ mcpServers: { id: string; url: string }[];
436
+ /**
437
+ * `test` comes from an administrator's "Test connection": it is not a run,
438
+ * so `sessionId`, `rootSessionId`, `turnId` and `attemptId` are the nil
439
+ * UUID. Answer it as you would a run in this workspace (Opengeni shows only
440
+ * the names of what you return, never the values), or `not_applicable`.
441
+ */
442
+ purpose: "provision" | "renewal" | "test";
443
+ forceRefresh: boolean;
444
+ accountId: string;
445
+ workspaceId: string;
446
+ sessionId: string;
447
+ rootSessionId: string;
448
+ parentSessionId: string | null;
449
+ turnId: string;
450
+ attemptId: string;
451
+ initiator: { kind: string; subjectId?: string };
452
+ /** Informational, signed with the body. Optional only for pre-upgrade senders. */
453
+ initiatorContext?: CredentialProviderInitiatorContext;
454
+ initiatingHumanSubjectId: string | null;
455
+ /** Informational, not authority. Optional only for pre-upgrade senders. */
456
+ initiatingHuman?: InitiatingHuman | null;
457
+ sandboxBackend: string;
458
+ sandboxOs: string;
459
+ };
460
+
461
+ const ProviderAuthNeeded = /* @__PURE__ */ defineSchema(() =>
462
+ z.object({
463
+ reason: z.enum(["missing_connection", "expired", "insufficient_scope", "refresh_failed"]),
464
+ providerDomain: z.string().optional(),
465
+ connectionId: z.string().optional(),
466
+ scopes: z.array(z.string()).optional(),
467
+ resource: z.string().optional(),
468
+ authorizationUrl: z.string().optional(),
469
+ message: z.string().optional(),
470
+ }),
471
+ );
472
+
473
+ /**
474
+ * HTTPS Git credentials the host wants available to `git` in the sandbox.
475
+ * Opengeni stores them in a renewable file and points a credential helper at
476
+ * it, so a refreshed token applies to the next git command.
477
+ */
478
+ const ProviderGitCredential = /* @__PURE__ */ defineSchema(() =>
479
+ z.object({
480
+ host: z
481
+ .string()
482
+ .trim()
483
+ .min(1)
484
+ .max(253)
485
+ .regex(/^[A-Za-z0-9.-]+(:\d{1,5})?$/, "host must be a bare hostname"),
486
+ username: z.string().min(1).max(256).optional(),
487
+ password: z.string().min(1).max(16384),
488
+ }),
489
+ );
490
+
491
+ const FORBIDDEN_MCP_HEADERS = new Set([
492
+ "host",
493
+ "connection",
494
+ "keep-alive",
495
+ "proxy-authenticate",
496
+ "proxy-authorization",
497
+ "te",
498
+ "trailer",
499
+ "transfer-encoding",
500
+ "upgrade",
501
+ "content-length",
502
+ "mcp-session-id",
503
+ "mcp-protocol-version",
504
+ "content-type",
505
+ "accept",
506
+ ]);
507
+
508
+ /** Exact WHATWG normalization; IDs, URL credentials and fragments are never targets. */
509
+ export function normalizeCredentialProviderMcpUrl(value: string): string {
510
+ const url = new URL(value);
511
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password || url.hash) {
512
+ throw new Error("MCP credential URL must be an HTTP endpoint without credentials or fragment");
513
+ }
514
+ return url.href;
515
+ }
516
+
517
+ const ProviderMcpUrl = /* @__PURE__ */ defineSchema(() =>
518
+ z
519
+ .string()
520
+ .min(8)
521
+ .max(2048)
522
+ .refine((value) => {
523
+ try {
524
+ normalizeCredentialProviderMcpUrl(value);
525
+ return true;
526
+ } catch {
527
+ return false;
528
+ }
529
+ }, "MCP credential url must be an HTTP endpoint without credentials or fragment")
530
+ .transform(normalizeCredentialProviderMcpUrl),
531
+ );
532
+
533
+ /** Secret, turn-local headers for one session-attached remote MCP, by normalized URL only. */
534
+ export const CredentialProviderMcpHeaders = /* @__PURE__ */ defineSchema(() =>
535
+ z
536
+ .object({
537
+ url: ProviderMcpUrl,
538
+ headers: z.record(z.string(), z.string()),
539
+ expiresAt: z.iso.datetime({ offset: true }).optional(),
540
+ })
541
+ .strict()
542
+ .superRefine((entry, context) => {
543
+ const headers = Object.entries(entry.headers);
544
+ const seen = new Set<string>();
545
+ let bytes = 0;
546
+ if (headers.length === 0 || headers.length > 32) {
547
+ context.addIssue({ code: "custom", message: "MCP headers must contain 1–32 entries" });
548
+ }
549
+ for (const [name, value] of headers) {
550
+ const lower = name.toLowerCase();
551
+ if (
552
+ name.length > 128 ||
553
+ name.length === 0 ||
554
+ /[^!#$%&'*+.^_`|~0-9A-Za-z-]/.test(name) ||
555
+ FORBIDDEN_MCP_HEADERS.has(lower) ||
556
+ seen.has(lower)
557
+ ) {
558
+ context.addIssue({ code: "custom", message: "Invalid or duplicate MCP header name" });
559
+ }
560
+ seen.add(lower);
561
+ const valueBytes = new TextEncoder().encode(value).byteLength;
562
+ bytes += name.length + valueBytes;
563
+ if (valueBytes > 16384 || /[^\t\u0020-\u007e\u0080-\u00ff]/.test(value)) {
564
+ context.addIssue({ code: "custom", message: "Invalid or oversized MCP header value" });
565
+ }
566
+ }
567
+ if (bytes > 65536) {
568
+ context.addIssue({ code: "custom", message: "MCP header material exceeds 64 KiB" });
569
+ }
570
+ }),
571
+ );
572
+ export type CredentialProviderMcpHeaders = z.infer<typeof CredentialProviderMcpHeaders>;
573
+
574
+ export const CredentialProviderMcpMaterial = /* @__PURE__ */ defineSchema(() =>
575
+ z
576
+ .array(CredentialProviderMcpHeaders)
577
+ .max(32)
578
+ .superRefine((entries, context) => {
579
+ if (new Set(entries.map((entry) => entry.url)).size !== entries.length) {
580
+ context.addIssue({ code: "custom", message: "Duplicate MCP server target" });
581
+ }
582
+ }),
583
+ );
584
+ export type CredentialProviderMcpMaterial = z.infer<typeof CredentialProviderMcpMaterial>;
585
+
586
+ /** What a credential provider returns. Scope echoes are added by Opengeni. */
587
+ export const CredentialProviderResponse = /* @__PURE__ */ defineSchema(() =>
588
+ z.discriminatedUnion("status", [
589
+ z.object({
590
+ status: z.literal("ok"),
591
+ environment: z.record(z.string(), z.string()).optional(),
592
+ files: z
593
+ .array(
594
+ z.object({
595
+ path: z.string(),
596
+ content: z.string(),
597
+ mode: z.enum(["0400", "0600"]).optional(),
598
+ }),
599
+ )
600
+ .optional(),
601
+ fileEnvironment: z.record(z.string(), z.string()).optional(),
602
+ git: z.array(ProviderGitCredential).max(16).optional(),
603
+ mcp: CredentialProviderMcpMaterial.optional(),
604
+ expiresAt: z.string().nullable().optional(),
605
+ authNeeded: z.array(ProviderAuthNeeded).optional(),
606
+ }),
607
+ z.object({ status: z.literal("not_applicable") }),
608
+ z.object({ status: z.literal("auth_needed"), authNeeded: z.array(ProviderAuthNeeded).min(1) }),
609
+ ]),
610
+ );
611
+ export type CredentialProviderResponse = z.infer<typeof CredentialProviderResponse>;
612
+
613
+ /** Immediate signing-secret rotation; the new secret is returned once. */
614
+ export const RotateWorkspaceCredentialProviderSecretResponse = /* @__PURE__ */ defineSchema(() =>
615
+ z.object({ provider: WorkspaceCredentialProvider, secret: z.string() }).strict(),
616
+ );
617
+ export type RotateWorkspaceCredentialProviderSecretResponse = z.infer<
618
+ typeof RotateWorkspaceCredentialProviderSecretResponse
619
+ >;
620
+ export const RotateOrganizationCredentialProviderSecretResponse = /* @__PURE__ */ defineSchema(() =>
621
+ z.object({ provider: OrganizationCredentialProvider, secret: z.string() }).strict(),
622
+ );
623
+ export type RotateOrganizationCredentialProviderSecretResponse = z.infer<
624
+ typeof RotateOrganizationCredentialProviderSecretResponse
625
+ >;
626
+ export const RotateWorkspaceWebhookSecretResponse = CreateWorkspaceWebhookResponse;
627
+ export type RotateWorkspaceWebhookSecretResponse = z.infer<
628
+ typeof RotateWorkspaceWebhookSecretResponse
629
+ >;
630
+ export const RotateOrganizationWebhookSecretResponse = CreateOrganizationWebhookResponse;
631
+ export type RotateOrganizationWebhookSecretResponse = z.infer<
632
+ typeof RotateOrganizationWebhookSecretResponse
633
+ >;
634
+
635
+ /**
636
+ * The outcome of one test request to a webhook or credential-provider
637
+ * endpoint. Nothing is stored: the request is sent once, synchronously.
638
+ * Credential values never appear; `credentials` names what a run would get.
639
+ */
640
+ export const IntegrationEndpointTestResult = /* @__PURE__ */ defineSchema(() =>
641
+ z
642
+ .object({
643
+ /** A 2xx answer (for a provider, also a valid response body). */
644
+ ok: z.boolean(),
645
+ /** The HTTP status, or null when the endpoint was not reached. */
646
+ status: z.number().int().nullable(),
647
+ durationMs: z.number().int().nonnegative(),
648
+ /** What went wrong, in one sentence, or null. */
649
+ error: z.string().nullable(),
650
+ /** The exact JSON body Opengeni signed and sent. */
651
+ request: z.string(),
652
+ /** The start of the endpoint's answer. Omitted for a successful provider answer. */
653
+ responseBody: z.string().nullable(),
654
+ credentials: z
655
+ .object({
656
+ status: z.enum(["ok", "not_applicable", "auth_needed"]),
657
+ environment: z.array(z.string()),
658
+ files: z.array(z.string()),
659
+ git: z.array(z.string()),
660
+ mcp: z.array(z.string()),
661
+ expiresAt: z.string().nullable(),
662
+ authNeeded: z.array(
663
+ z.object({
664
+ reason: z.string(),
665
+ providerDomain: z.string().nullable(),
666
+ message: z.string().nullable(),
667
+ }),
668
+ ),
669
+ })
670
+ .strict()
671
+ .nullable(),
672
+ })
673
+ .strict(),
674
+ );
675
+ export type IntegrationEndpointTestResult = z.infer<typeof IntegrationEndpointTestResult>;
676
+
677
+ export const TestWorkspaceWebhookResponse = /* @__PURE__ */ defineSchema(() =>
678
+ z.object({ result: IntegrationEndpointTestResult }).strict(),
679
+ );
680
+ export type TestWorkspaceWebhookResponse = z.infer<typeof TestWorkspaceWebhookResponse>;
681
+
682
+ /** Tests the provider runs in this workspace would use: its own, else the organization's. */
683
+ export const TestWorkspaceCredentialProviderResponse = /* @__PURE__ */ defineSchema(() =>
684
+ z
685
+ .object({
686
+ lane: z.enum(["workspace", "organization"]),
687
+ url: z.string(),
688
+ result: IntegrationEndpointTestResult,
689
+ })
690
+ .strict(),
691
+ );
692
+ export type TestWorkspaceCredentialProviderResponse = z.infer<
693
+ typeof TestWorkspaceCredentialProviderResponse
694
+ >;
695
+
696
+ /**
697
+ * Organization registrations that apply to one workspace, for workspace
698
+ * administrators: an enabled organization provider whose filter matches
699
+ * (even when this workspace overrides it) and the enabled organization
700
+ * webhooks that also receive this workspace's events. Never secrets.
701
+ */
702
+ export const WorkspaceInheritedIntegrationsResponse = /* @__PURE__ */ defineSchema(() =>
703
+ z
704
+ .object({
705
+ credentialProvider: z
706
+ .object({ url: z.string(), timeoutMs: z.number().int(), updatedAt: z.string() })
707
+ .strict()
708
+ .nullable(),
709
+ webhooks: z.array(
710
+ z
711
+ .object({
712
+ id: z.string().uuid(),
713
+ url: z.string(),
714
+ eventTypes: z.array(WorkspaceWebhookEventType),
715
+ description: z.string().nullable(),
716
+ })
717
+ .strict(),
718
+ ),
719
+ })
720
+ .strict(),
721
+ );
722
+ export type WorkspaceInheritedIntegrationsResponse = z.infer<
723
+ typeof WorkspaceInheritedIntegrationsResponse
724
+ >;