@opengeni/contracts 5.5.0 → 5.5.2-canary.40656248492001

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 (543) hide show
  1. package/dist/agent-authored-durable-text.d.ts +9 -9
  2. package/dist/agent-config.d.ts +148 -37
  3. package/dist/api-key-presets.d.ts +19 -0
  4. package/dist/app-action-catalog-types.d.ts +32 -0
  5. package/dist/app-action-catalog.gen.d.ts +2 -0
  6. package/dist/app-actions.d.ts +91 -0
  7. package/dist/app-actions.js +10130 -0
  8. package/dist/app-actions.js.map +1 -0
  9. package/dist/app-shot.d.ts +55 -0
  10. package/dist/artifact-catalog.d.ts +33 -0
  11. package/dist/artifacts.d.ts +166 -0
  12. package/dist/atlassian-native-retirement.d.ts +16 -0
  13. package/dist/atlassian-native-retirement.js +30 -0
  14. package/dist/atlassian-native-retirement.js.map +1 -0
  15. package/dist/atlassian.js +48 -23
  16. package/dist/automation-templates.d.ts +434 -0
  17. package/dist/automation-templates.js +31 -0
  18. package/dist/automation-templates.js.map +1 -0
  19. package/dist/billing-subscriptions.d.ts +61 -0
  20. package/dist/bots.d.ts +583 -0
  21. package/dist/bundled-skills.d.ts +58 -2
  22. package/dist/canonical-human-identities.js +3 -1
  23. package/dist/child-lifecycle-notice-protocol.d.ts +45 -0
  24. package/dist/chunk-2QKIEAGY.js +396 -0
  25. package/dist/chunk-2QKIEAGY.js.map +1 -0
  26. package/dist/chunk-2WOWEWXV.js +426 -0
  27. package/dist/chunk-2WOWEWXV.js.map +1 -0
  28. package/dist/chunk-2ZIHHL72.js +153 -0
  29. package/dist/chunk-2ZIHHL72.js.map +1 -0
  30. package/dist/chunk-32U6NKQQ.js +389 -0
  31. package/dist/chunk-32U6NKQQ.js.map +1 -0
  32. package/dist/chunk-4YDDHSO2.js +799 -0
  33. package/dist/chunk-4YDDHSO2.js.map +1 -0
  34. package/dist/chunk-56SNIMDO.js +9 -0
  35. package/dist/chunk-56SNIMDO.js.map +1 -0
  36. package/dist/chunk-5RWB6QVL.js +101 -0
  37. package/dist/chunk-5RWB6QVL.js.map +1 -0
  38. package/dist/chunk-5UGUOT3L.js +243 -0
  39. package/dist/chunk-5UGUOT3L.js.map +1 -0
  40. package/dist/chunk-6LAT33BH.js +130 -0
  41. package/dist/chunk-6LAT33BH.js.map +1 -0
  42. package/dist/chunk-7272KVWZ.js +60 -0
  43. package/dist/chunk-7272KVWZ.js.map +1 -0
  44. package/dist/chunk-72QC2GTL.js +36 -0
  45. package/dist/chunk-72QC2GTL.js.map +1 -0
  46. package/dist/chunk-7EQGGZBY.js +105 -0
  47. package/dist/chunk-7EQGGZBY.js.map +1 -0
  48. package/dist/chunk-A3LXWVYU.js +382 -0
  49. package/dist/chunk-A3LXWVYU.js.map +1 -0
  50. package/dist/chunk-AQYDZUJV.js +34 -0
  51. package/dist/chunk-AQYDZUJV.js.map +1 -0
  52. package/dist/chunk-BHCEVVUP.js +93 -0
  53. package/dist/chunk-BHCEVVUP.js.map +1 -0
  54. package/dist/chunk-BMUTAZX5.js +486 -0
  55. package/dist/chunk-BMUTAZX5.js.map +1 -0
  56. package/dist/chunk-DGG6IBBK.js +150 -0
  57. package/dist/chunk-DGG6IBBK.js.map +1 -0
  58. package/dist/{chunk-YBW5JSA3.js → chunk-FBCTUMHI.js} +123 -102
  59. package/dist/chunk-FBCTUMHI.js.map +1 -0
  60. package/dist/chunk-G2KJTFIC.js +97 -0
  61. package/dist/chunk-G2KJTFIC.js.map +1 -0
  62. package/dist/chunk-G4RKARXZ.js +1167 -0
  63. package/dist/chunk-G4RKARXZ.js.map +1 -0
  64. package/dist/chunk-H6UJJIUM.js +350 -0
  65. package/dist/chunk-H6UJJIUM.js.map +1 -0
  66. package/dist/chunk-JOTHDW4H.js +18 -0
  67. package/dist/chunk-JOTHDW4H.js.map +1 -0
  68. package/dist/chunk-L4GUEP7K.js +56480 -0
  69. package/dist/chunk-L4GUEP7K.js.map +1 -0
  70. package/dist/{chunk-SIOU2K4U.js → chunk-LJH2EYGT.js} +23 -23
  71. package/dist/chunk-MTJKSIGA.js +161 -0
  72. package/dist/chunk-MTJKSIGA.js.map +1 -0
  73. package/dist/chunk-MYHMB6GZ.js +202 -0
  74. package/dist/chunk-MYHMB6GZ.js.map +1 -0
  75. package/dist/chunk-PI5VIKJY.js +660 -0
  76. package/dist/chunk-PI5VIKJY.js.map +1 -0
  77. package/dist/{chunk-RIY7GYQS.js → chunk-PTSROVDG.js} +2 -2
  78. package/dist/chunk-PUIUXIOL.js +189 -0
  79. package/dist/chunk-PUIUXIOL.js.map +1 -0
  80. package/dist/chunk-R6VXJIMB.js +19 -0
  81. package/dist/chunk-R6VXJIMB.js.map +1 -0
  82. package/dist/chunk-RLJUNVAM.js +15 -0
  83. package/dist/chunk-RLJUNVAM.js.map +1 -0
  84. package/dist/chunk-RR6APCBK.js +213 -0
  85. package/dist/chunk-RR6APCBK.js.map +1 -0
  86. package/dist/{chunk-TXTQIYCV.js → chunk-RUQ4I6DO.js} +59 -13
  87. package/dist/chunk-RUQ4I6DO.js.map +1 -0
  88. package/dist/{chunk-WYBDERIY.js → chunk-RWEEUDHD.js} +53 -42
  89. package/dist/chunk-RWEEUDHD.js.map +1 -0
  90. package/dist/chunk-S7MSQQL6.js +158 -0
  91. package/dist/chunk-S7MSQQL6.js.map +1 -0
  92. package/dist/{chunk-5Q54VCCH.js → chunk-SHO4YO4B.js} +20 -36
  93. package/dist/chunk-SHO4YO4B.js.map +1 -0
  94. package/dist/{chunk-HHZSZYYF.js → chunk-T3HSWMA5.js} +20 -4
  95. package/dist/chunk-T3HSWMA5.js.map +1 -0
  96. package/dist/{chunk-YRKRZ6OF.js → chunk-TOOJIBJC.js} +2 -2
  97. package/dist/chunk-UCUOTRS6.js +431 -0
  98. package/dist/chunk-UCUOTRS6.js.map +1 -0
  99. package/dist/chunk-UH4K7GP7.js +424 -0
  100. package/dist/chunk-UH4K7GP7.js.map +1 -0
  101. package/dist/chunk-UIZWGPHV.js +120 -0
  102. package/dist/chunk-UIZWGPHV.js.map +1 -0
  103. package/dist/chunk-VLUKBV6Y.js +1170 -0
  104. package/dist/chunk-VLUKBV6Y.js.map +1 -0
  105. package/dist/chunk-W2QQ5Y6K.js +55 -0
  106. package/dist/chunk-W2QQ5Y6K.js.map +1 -0
  107. package/dist/{chunk-Y3KNXVTD.js → chunk-W3NBPR4E.js} +131 -31
  108. package/dist/chunk-W3NBPR4E.js.map +1 -0
  109. package/dist/{chunk-NRMCVHAU.js → chunk-WMGO4HJU.js} +11 -9
  110. package/dist/chunk-WMGO4HJU.js.map +1 -0
  111. package/dist/{chunk-MYBZRDTY.js → chunk-WQI7VNN4.js} +19 -9
  112. package/dist/chunk-WQI7VNN4.js.map +1 -0
  113. package/dist/{chunk-PX3VCKAU.js → chunk-WVCFSOUZ.js} +1 -1
  114. package/dist/{chunk-PX3VCKAU.js.map → chunk-WVCFSOUZ.js.map} +1 -1
  115. package/dist/chunk-XB6GQLBH.js +76 -0
  116. package/dist/chunk-XB6GQLBH.js.map +1 -0
  117. package/dist/{chunk-D2HKF2EF.js → chunk-XP5M3IKT.js} +2 -2
  118. package/dist/{chunk-O77VSFYZ.js → chunk-ZMPU5BWE.js} +12 -2
  119. package/dist/chunk-ZMPU5BWE.js.map +1 -0
  120. package/dist/{chunk-3SIZGL3O.js → chunk-ZYVEJFNU.js} +22 -18
  121. package/dist/chunk-ZYVEJFNU.js.map +1 -0
  122. package/dist/claude-provider-account-authority.d.ts +18 -0
  123. package/dist/claude-subscription-oauth.d.ts +25 -0
  124. package/dist/claude-subscription-usage.d.ts +95 -1
  125. package/dist/client-error-report.d.ts +154 -8
  126. package/dist/client-error-report.js +157 -2
  127. package/dist/client-error-report.js.map +1 -1
  128. package/dist/code-search.d.ts +1 -1
  129. package/dist/code-search.js.map +1 -1
  130. package/dist/codex-provider-account-authority.js +23 -12
  131. package/dist/codex-provider-account-authority.js.map +1 -1
  132. package/dist/company-profile.d.ts +144 -0
  133. package/dist/connect.d.ts +38 -0
  134. package/dist/connect.js +244 -164
  135. package/dist/connect.js.map +1 -1
  136. package/dist/connection-account-label.d.ts +2 -0
  137. package/dist/connection-account-label.js +34 -0
  138. package/dist/connection-account-label.js.map +1 -0
  139. package/dist/connection-authority.js +49 -24
  140. package/dist/connector-attachments.js +3 -1
  141. package/dist/connector-destinations.js +3 -1
  142. package/dist/connector-tool-permissions.d.ts +68 -4
  143. package/dist/credential-profiles.d.ts +166 -0
  144. package/dist/cua-desktop-tools.d.ts +19 -0
  145. package/dist/define-schema.d.ts +8 -0
  146. package/dist/desktop-app.d.ts +28 -0
  147. package/dist/direct-model-provider.d.ts +38 -0
  148. package/dist/document-artifact-commands.js +2 -2
  149. package/dist/document-artifact-query.js +2 -2
  150. package/dist/editable-artifact-binary.d.ts +7 -0
  151. package/dist/editable-artifact-causal-frontier.js +2 -2
  152. package/dist/editable-artifact-codec-registry.js +7 -7
  153. package/dist/editable-artifact-committed-transaction.js +4 -2
  154. package/dist/editable-artifact-live.js +8 -8
  155. package/dist/editable-artifact-serialized-commit.js +9 -9
  156. package/dist/editable-artifact-versions.d.ts +7 -1
  157. package/dist/editable-artifact-versions.js +1 -1
  158. package/dist/editable-artifacts.js +49 -43
  159. package/dist/event-preview.d.ts +22 -0
  160. package/dist/event-triggers.d.ts +1253 -0
  161. package/dist/event-triggers.js +148 -0
  162. package/dist/event-triggers.js.map +1 -0
  163. package/dist/external-identities.d.ts +34 -0
  164. package/dist/external-identities.js +4 -2
  165. package/dist/feedback.d.ts +181 -0
  166. package/dist/file-access.d.ts +23 -0
  167. package/dist/first-party-tool-authorization.d.ts +852 -0
  168. package/dist/github-repository-contracts.js +64 -43
  169. package/dist/github-repository-contracts.js.map +1 -1
  170. package/dist/google-drive-native-retirement.d.ts +12 -0
  171. package/dist/google-drive-native-retirement.js +20 -0
  172. package/dist/google-drive-native-retirement.js.map +1 -0
  173. package/dist/google-drive.d.ts +1 -1
  174. package/dist/google-drive.js +323 -239
  175. package/dist/google-drive.js.map +1 -1
  176. package/dist/host-mcp-bindings.js +250 -198
  177. package/dist/host-mcp-bindings.js.map +1 -1
  178. package/dist/index.d.ts +29072 -20593
  179. package/dist/index.js +2432 -366
  180. package/dist/inference-residency.d.ts +22 -0
  181. package/dist/insights-usage.d.ts +948 -0
  182. package/dist/insights-usage.js +608 -0
  183. package/dist/insights-usage.js.map +1 -0
  184. package/dist/integration-capability-id.d.ts +8 -0
  185. package/dist/interaction-action-deadline.d.ts +48 -0
  186. package/dist/interaction-driver-diagnostic.d.ts +28 -0
  187. package/dist/interaction.d.ts +2126 -881
  188. package/dist/knowledge-entries.d.ts +38 -0
  189. package/dist/knowledge-preparation.d.ts +4 -0
  190. package/dist/learning-refusal.d.ts +43 -0
  191. package/dist/learning-refusal.js +49 -0
  192. package/dist/learning-refusal.js.map +1 -0
  193. package/dist/managed-auth-session-sets.d.ts +1 -0
  194. package/dist/managed-auth-session-sets.js +207 -146
  195. package/dist/managed-auth-session-sets.js.map +1 -1
  196. package/dist/managed-sign-in-methods.d.ts +96 -0
  197. package/dist/managed-sign-in-methods.js +157 -35
  198. package/dist/managed-sign-in-methods.js.map +1 -1
  199. package/dist/mcp-structured-content.d.ts +25 -0
  200. package/dist/message-time-zone.d.ts +38 -0
  201. package/dist/message-time-zone.js +19 -0
  202. package/dist/message-time-zone.js.map +1 -0
  203. package/dist/modal-native-proof-v2.d.ts +587 -0
  204. package/dist/modal-native-proof-v2.js +39 -0
  205. package/dist/modal-native-proof-v2.js.map +1 -0
  206. package/dist/model-account-choice.d.ts +237 -0
  207. package/dist/model-account-settings.d.ts +422 -0
  208. package/dist/model-availability.d.ts +15 -0
  209. package/dist/model-connection-access.d.ts +13 -0
  210. package/dist/model-context-inspector.d.ts +8 -0
  211. package/dist/model-display.d.ts +43 -0
  212. package/dist/model-display.js +17 -0
  213. package/dist/model-display.js.map +1 -0
  214. package/dist/model-picker-order.js.map +1 -1
  215. package/dist/model-residency.d.ts +304 -0
  216. package/dist/organization-access.d.ts +416 -0
  217. package/dist/organization-access.js +40 -0
  218. package/dist/organization-access.js.map +1 -0
  219. package/dist/organization-integration-policy.d.ts +18 -0
  220. package/dist/organization-membership-lifecycle.d.ts +66 -0
  221. package/dist/organization-model-usage.d.ts +146 -0
  222. package/dist/organization-model-usage.js +87 -0
  223. package/dist/organization-model-usage.js.map +1 -0
  224. package/dist/organization-recovery.js +3 -1
  225. package/dist/organization-usage.d.ts +12 -0
  226. package/dist/passkey-only-account.d.ts +14 -0
  227. package/dist/passkey-only-account.js +13 -0
  228. package/dist/passkey-only-account.js.map +1 -0
  229. package/dist/permissions.d.ts +19 -0
  230. package/dist/personal-github.js +220 -148
  231. package/dist/personal-github.js.map +1 -1
  232. package/dist/personal-integration-setup.d.ts +81 -0
  233. package/dist/personal-integration-setup.js +42 -0
  234. package/dist/personal-integration-setup.js.map +1 -0
  235. package/dist/prepared-mcp-setup.d.ts +54 -0
  236. package/dist/prepared-mcp-setup.js +13 -0
  237. package/dist/prepared-mcp-setup.js.map +1 -0
  238. package/dist/presentation-artifact-commands.js +2 -2
  239. package/dist/presentation-artifact-query.js +2 -2
  240. package/dist/primitives.d.ts +18 -0
  241. package/dist/product-analytics.d.ts +27 -10
  242. package/dist/product-lifecycle-facts.d.ts +26 -3
  243. package/dist/prompt-cache-diagnostics.d.ts +92 -0
  244. package/dist/recordings.d.ts +1371 -0
  245. package/dist/remember.d.ts +98 -2
  246. package/dist/retained-output.d.ts +4 -2
  247. package/dist/sandbox-file-artifacts.d.ts +19 -2
  248. package/dist/sandbox-provider-command.d.ts +5 -44
  249. package/dist/sandbox-recovery.d.ts +139 -8
  250. package/dist/secret-generator.d.ts +44 -0
  251. package/dist/secret-mask-strings.d.ts +32 -0
  252. package/dist/secret-references.d.ts +90 -0
  253. package/dist/secret-resolution.d.ts +143 -0
  254. package/dist/secret-shape-masking.d.ts +52 -0
  255. package/dist/secret-shape-masking.js +19 -0
  256. package/dist/secret-shape-masking.js.map +1 -0
  257. package/dist/secret-totp.d.ts +41 -0
  258. package/dist/secret-use-approval-question.d.ts +11 -0
  259. package/dist/secret-use-approval-question.js +11 -0
  260. package/dist/secret-use-approval-question.js.map +1 -0
  261. package/dist/secret-use-approvals.d.ts +106 -0
  262. package/dist/secret-value-masking.d.ts +299 -0
  263. package/dist/secret-value-masking.js +62 -0
  264. package/dist/secret-value-masking.js.map +1 -0
  265. package/dist/secret-value.d.ts +19 -0
  266. package/dist/session-history-import.d.ts +444 -8
  267. package/dist/session-history.d.ts +111 -0
  268. package/dist/session-history.js +35 -0
  269. package/dist/session-history.js.map +1 -0
  270. package/dist/session-list-entries.d.ts +8 -0
  271. package/dist/session-list-entries.js +61 -0
  272. package/dist/session-list-entries.js.map +1 -0
  273. package/dist/session-mcp-projections.d.ts +13 -1
  274. package/dist/session-mcp-tool-permissions.d.ts +62 -0
  275. package/dist/session-target.d.ts +18 -0
  276. package/dist/session-titles.d.ts +8 -0
  277. package/dist/session-titles.js +5 -1
  278. package/dist/session-usage-limit-refusal.d.ts +34 -0
  279. package/dist/session-usage-limit-refusal.js +15 -0
  280. package/dist/session-usage-limit-refusal.js.map +1 -0
  281. package/dist/session-usage-limits.d.ts +127 -0
  282. package/dist/session-usage-limits.js +43 -0
  283. package/dist/session-usage-limits.js.map +1 -0
  284. package/dist/site-data.d.ts +286 -0
  285. package/dist/site-operations.d.ts +39 -0
  286. package/dist/site-publishing.d.ts +813 -0
  287. package/dist/site-session-http.d.ts +103 -4
  288. package/dist/site-session-http.js +27 -1
  289. package/dist/site-sql.d.ts +425 -0
  290. package/dist/skills.d.ts +38 -0
  291. package/dist/slack-bot-scopes.d.ts +9 -7
  292. package/dist/slack-bot-scopes.js +6 -3
  293. package/dist/slack-rest-mcp.d.ts +36 -0
  294. package/dist/slack-rest-mcp.js +25 -0
  295. package/dist/slack-rest-mcp.js.map +1 -0
  296. package/dist/spreadsheet-artifact-commands.d.ts +14 -1
  297. package/dist/spreadsheet-artifact-commands.js +9 -2
  298. package/dist/spreadsheet-artifact-query.d.ts +13 -6
  299. package/dist/spreadsheet-artifact-query.js +4 -3
  300. package/dist/subscription-account-actions.d.ts +83 -0
  301. package/dist/subscription-account-pools.d.ts +326 -0
  302. package/dist/subscription-personal-authority-v2.d.ts +28 -0
  303. package/dist/subscription-personal-authority-v2.js +13 -0
  304. package/dist/subscription-personal-authority-v2.js.map +1 -0
  305. package/dist/subscription-plans.d.ts +38 -0
  306. package/dist/subscription-usage-pool.d.ts +89 -0
  307. package/dist/tool-action-review.d.ts +141 -0
  308. package/dist/tool-catalog.d.ts +479 -0
  309. package/dist/tool-policy.d.ts +5 -0
  310. package/dist/tool-review-presentation.d.ts +29 -0
  311. package/dist/tool-review-presentation.js +21 -0
  312. package/dist/tool-review-presentation.js.map +1 -0
  313. package/dist/turn-serving-policy.d.ts +223 -0
  314. package/dist/usage-allowances.d.ts +30 -0
  315. package/dist/usage-allowances.js +5 -1
  316. package/dist/values.d.ts +11 -0
  317. package/dist/values.js +19 -0
  318. package/dist/values.js.map +1 -0
  319. package/dist/vault-provider-wire.d.ts +907 -0
  320. package/dist/vault-provider-wire.js +74 -0
  321. package/dist/vault-provider-wire.js.map +1 -0
  322. package/dist/vaults.d.ts +2185 -0
  323. package/dist/video-generation.d.ts +75 -0
  324. package/dist/video-generation.js +8 -1
  325. package/dist/workspace-control-event.d.ts +18 -0
  326. package/dist/workspace-control-event.js +18 -0
  327. package/dist/workspace-control-event.js.map +1 -0
  328. package/dist/workspace-governance-context.d.ts +18 -0
  329. package/dist/workspace-integration-wire.d.ts +1 -1
  330. package/dist/workspace-integration-wire.js +1 -1
  331. package/dist/workspace-integrations.d.ts +212 -12
  332. package/dist/xai-provider-account-authority.js +3 -1
  333. package/package.json +121 -4
  334. package/src/agent-authored-durable-text.ts +14 -11
  335. package/src/agent-config.ts +382 -203
  336. package/src/agent-instruction-changes.ts +94 -74
  337. package/src/agent-learning.ts +94 -66
  338. package/src/agent-topology.ts +58 -52
  339. package/src/api-key-presets.ts +28 -0
  340. package/src/app-action-catalog-types.ts +32 -0
  341. package/src/app-action-catalog.gen.ts +9905 -0
  342. package/src/app-actions.ts +365 -0
  343. package/src/app-shot.ts +176 -0
  344. package/src/artifact-catalog.ts +81 -46
  345. package/src/artifacts.ts +360 -227
  346. package/src/atlassian-native-retirement.ts +33 -0
  347. package/src/atlassian.ts +136 -108
  348. package/src/automation-templates.ts +201 -0
  349. package/src/billing-subscriptions.ts +48 -0
  350. package/src/bots.ts +238 -0
  351. package/src/bundled-skills.ts +79 -22
  352. package/src/canonical-human-identities.ts +65 -62
  353. package/src/child-lifecycle-notice-protocol.gen.json +1310 -0
  354. package/src/child-lifecycle-notice-protocol.ts +224 -0
  355. package/src/claude-provider-account-authority.ts +12 -0
  356. package/src/claude-subscription-oauth.ts +61 -19
  357. package/src/claude-subscription-usage.ts +64 -35
  358. package/src/client-error-report.ts +344 -9
  359. package/src/code-search.ts +1 -1
  360. package/src/codex-provider-account-authority.ts +22 -16
  361. package/src/company-brain-governed-writes.ts +265 -244
  362. package/src/company-brain.ts +165 -154
  363. package/src/company-profile.ts +362 -297
  364. package/src/connect.ts +222 -173
  365. package/src/connection-account-label.ts +45 -0
  366. package/src/connection-authority.ts +172 -152
  367. package/src/connector-attachments.ts +139 -123
  368. package/src/connector-destinations.ts +48 -43
  369. package/src/connector-tool-permissions.ts +104 -46
  370. package/src/credential-profiles.ts +161 -0
  371. package/src/cua-desktop-tools.gen.json +6722 -0
  372. package/src/cua-desktop-tools.linux.gen.json +6798 -0
  373. package/src/cua-desktop-tools.ts +42 -0
  374. package/src/cua-desktop-tools.windows.gen.json +6739 -0
  375. package/src/define-schema.ts +10 -0
  376. package/src/desktop-app.ts +50 -0
  377. package/src/direct-model-provider.ts +112 -0
  378. package/src/editable-artifact-binary.ts +29 -8
  379. package/src/editable-artifact-committed-transaction.ts +19 -18
  380. package/src/editable-artifact-serialized-commit.ts +8 -2
  381. package/src/editable-artifact-versions.ts +7 -1
  382. package/src/event-preview.ts +53 -3
  383. package/src/event-triggers.ts +891 -0
  384. package/src/external-identities.ts +239 -195
  385. package/src/feedback.ts +125 -30
  386. package/src/file-access.ts +26 -0
  387. package/src/first-party-tool-authorization.ts +383 -0
  388. package/src/github-repository-contracts.ts +78 -64
  389. package/src/google-drive-native-retirement.ts +20 -0
  390. package/src/google-drive.ts +286 -234
  391. package/src/governed-learning-activation.ts +159 -137
  392. package/src/governed-learning-evaluator.ts +141 -133
  393. package/src/host-mcp-bindings.ts +244 -221
  394. package/src/image-generation.ts +105 -95
  395. package/src/index.ts +13928 -9899
  396. package/src/inference-residency.ts +36 -0
  397. package/src/insights-usage.ts +774 -0
  398. package/src/integration-capability-id.ts +16 -0
  399. package/src/interaction-action-deadline.ts +143 -0
  400. package/src/interaction-driver-diagnostic.ts +89 -0
  401. package/src/interaction.ts +3527 -2427
  402. package/src/knowledge-entries.ts +386 -299
  403. package/src/knowledge-preparation.ts +49 -41
  404. package/src/knowledge.ts +242 -213
  405. package/src/learning-refusal.ts +90 -0
  406. package/src/managed-auth-session-sets.ts +180 -133
  407. package/src/managed-sign-in-methods.ts +156 -34
  408. package/src/mcp-oauth.ts +58 -46
  409. package/src/mcp-receipts.ts +199 -194
  410. package/src/mcp-structured-content.ts +81 -0
  411. package/src/memory-slack-delivery.ts +172 -142
  412. package/src/message-time-zone.ts +109 -0
  413. package/src/modal-native-proof-v2.ts +430 -0
  414. package/src/model-account-choice.ts +178 -0
  415. package/src/model-account-settings.ts +210 -0
  416. package/src/model-availability.ts +22 -0
  417. package/src/model-connection-access.ts +62 -14
  418. package/src/model-context-inspector.ts +130 -109
  419. package/src/model-display.ts +221 -0
  420. package/src/model-picker-order.ts +1 -1
  421. package/src/model-residency.ts +535 -0
  422. package/src/organization-access.ts +216 -0
  423. package/src/organization-integration-policy.ts +47 -28
  424. package/src/organization-membership-lifecycle.ts +558 -384
  425. package/src/organization-model-usage.ts +82 -0
  426. package/src/organization-recovery.ts +148 -135
  427. package/src/organization-usage.ts +84 -52
  428. package/src/passkey-only-account.ts +29 -0
  429. package/src/permissions.ts +94 -52
  430. package/src/personal-github.ts +211 -171
  431. package/src/personal-integration-setup.ts +150 -0
  432. package/src/preference-registry.ts +319 -263
  433. package/src/prepared-mcp-setup.ts +190 -0
  434. package/src/primitives.ts +22 -0
  435. package/src/product-analytics.ts +40 -15
  436. package/src/product-lifecycle-facts.ts +50 -20
  437. package/src/prompt-cache-diagnostics.ts +212 -0
  438. package/src/recordings.ts +1153 -0
  439. package/src/remember.ts +184 -172
  440. package/src/retained-output.ts +181 -168
  441. package/src/sandbox-file-artifacts.ts +78 -57
  442. package/src/sandbox-provider-command.ts +55 -72
  443. package/src/sandbox-recovery.ts +163 -77
  444. package/src/scoped-knowledge.ts +62 -43
  445. package/src/secret-generator.ts +156 -0
  446. package/src/secret-mask-strings.ts +175 -0
  447. package/src/secret-references.ts +414 -0
  448. package/src/secret-resolution.ts +322 -0
  449. package/src/secret-shape-masking.ts +573 -0
  450. package/src/secret-totp.ts +188 -0
  451. package/src/secret-use-approval-question.ts +22 -0
  452. package/src/secret-use-approvals.ts +219 -0
  453. package/src/secret-value-masking.ts +1283 -0
  454. package/src/secret-value.ts +22 -0
  455. package/src/session-goal-reports.ts +55 -49
  456. package/src/session-history-import.ts +84 -68
  457. package/src/session-history.ts +197 -0
  458. package/src/session-list-entries.ts +106 -0
  459. package/src/session-mcp-projections.ts +21 -3
  460. package/src/session-mcp-tool-permissions.ts +109 -0
  461. package/src/session-message-search.ts +46 -38
  462. package/src/session-target.ts +58 -0
  463. package/src/session-titles.ts +40 -4
  464. package/src/session-topology-primitives.ts +20 -12
  465. package/src/session-usage-limit-refusal.ts +101 -0
  466. package/src/session-usage-limits.ts +169 -0
  467. package/src/signup-attribution.ts +20 -15
  468. package/src/site-data.ts +337 -0
  469. package/src/site-operations.ts +154 -0
  470. package/src/site-publishing.ts +903 -0
  471. package/src/site-session-http.ts +344 -16
  472. package/src/site-sql.ts +1120 -0
  473. package/src/skill-use.ts +18 -17
  474. package/src/skills.ts +105 -50
  475. package/src/slack-bot-scopes.ts +18 -35
  476. package/src/slack-rest-mcp.ts +222 -0
  477. package/src/slack-task-policy.ts +97 -73
  478. package/src/spreadsheet-artifact-commands.ts +74 -13
  479. package/src/spreadsheet-artifact-query.ts +188 -50
  480. package/src/subscription-account-actions.ts +103 -0
  481. package/src/subscription-account-pools.ts +74 -0
  482. package/src/subscription-personal-authority-v2.ts +69 -0
  483. package/src/subscription-plans.ts +51 -0
  484. package/src/subscription-usage-pool.ts +44 -0
  485. package/src/task-notes.ts +70 -68
  486. package/src/tool-action-review.ts +271 -0
  487. package/src/tool-catalog.ts +694 -379
  488. package/src/tool-policy.ts +82 -0
  489. package/src/tool-result-spill.ts +13 -9
  490. package/src/tool-review-presentation.ts +643 -0
  491. package/src/turn-serving-policy.ts +167 -0
  492. package/src/usage-allowances.ts +212 -136
  493. package/src/values.ts +25 -0
  494. package/src/vault-provider-wire.ts +580 -0
  495. package/src/vaults.ts +1296 -0
  496. package/src/video-generation.ts +430 -361
  497. package/src/work-claims.ts +183 -166
  498. package/src/workspace-control-event.ts +134 -0
  499. package/src/workspace-governance-context.ts +63 -0
  500. package/src/workspace-instruction-policies.ts +346 -279
  501. package/src/workspace-integration-wire.ts +10 -0
  502. package/src/workspace-integrations.ts +488 -398
  503. package/src/workspace-learning-administration.ts +58 -44
  504. package/src/workspace-learning-policy.ts +126 -99
  505. package/src/workspace-state.ts +239 -220
  506. package/src/xai-provider-account-authority.ts +23 -17
  507. package/dist/chunk-3SIZGL3O.js.map +0 -1
  508. package/dist/chunk-566IFOVP.js +0 -26133
  509. package/dist/chunk-566IFOVP.js.map +0 -1
  510. package/dist/chunk-5IXYF6XN.js +0 -728
  511. package/dist/chunk-5IXYF6XN.js.map +0 -1
  512. package/dist/chunk-5Q54VCCH.js.map +0 -1
  513. package/dist/chunk-BCS7WHCK.js +0 -139
  514. package/dist/chunk-BCS7WHCK.js.map +0 -1
  515. package/dist/chunk-EK7NDGFR.js +0 -128
  516. package/dist/chunk-EK7NDGFR.js.map +0 -1
  517. package/dist/chunk-GRG7PHWQ.js +0 -25
  518. package/dist/chunk-GRG7PHWQ.js.map +0 -1
  519. package/dist/chunk-HHZSZYYF.js.map +0 -1
  520. package/dist/chunk-ICDZGUX2.js +0 -186
  521. package/dist/chunk-ICDZGUX2.js.map +0 -1
  522. package/dist/chunk-JUFK3T4Q.js +0 -80
  523. package/dist/chunk-JUFK3T4Q.js.map +0 -1
  524. package/dist/chunk-MYBZRDTY.js.map +0 -1
  525. package/dist/chunk-NRMCVHAU.js.map +0 -1
  526. package/dist/chunk-O77VSFYZ.js.map +0 -1
  527. package/dist/chunk-P3HLDT77.js +0 -59
  528. package/dist/chunk-P3HLDT77.js.map +0 -1
  529. package/dist/chunk-TXTQIYCV.js.map +0 -1
  530. package/dist/chunk-WYBDERIY.js.map +0 -1
  531. package/dist/chunk-Y3KNXVTD.js.map +0 -1
  532. package/dist/chunk-YBW5JSA3.js.map +0 -1
  533. package/dist/chunk-YRXAWWCU.js +0 -45
  534. package/dist/chunk-YRXAWWCU.js.map +0 -1
  535. package/dist/chunk-YWMOIZ6A.js +0 -185
  536. package/dist/chunk-YWMOIZ6A.js.map +0 -1
  537. package/dist/site-request-headers.test.d.ts +0 -1
  538. package/dist/transcription-recordings.d.ts +0 -300
  539. package/src/transcription-recordings.ts +0 -169
  540. /package/dist/{chunk-SIOU2K4U.js.map → chunk-LJH2EYGT.js.map} +0 -0
  541. /package/dist/{chunk-RIY7GYQS.js.map → chunk-PTSROVDG.js.map} +0 -0
  542. /package/dist/{chunk-YRKRZ6OF.js.map → chunk-TOOJIBJC.js.map} +0 -0
  543. /package/dist/{chunk-D2HKF2EF.js.map → chunk-XP5M3IKT.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/event-triggers.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { defineSchema } from \"./define-schema\";\n\n/**\n * Event sources, normalized events and event triggers.\n *\n * An event source delivers events into a workspace: a webhook endpoint a person\n * pastes into another app, an app Opengeni receives events from directly, or an\n * MCP connection whose server offers the MCP Events extension. Every source\n * produces the same normalized event. An automation (a scheduled task) runs\n * when one of its event triggers matches an event.\n *\n * This module must not import `./index`: the scheduled-task schemas there\n * embed these schemas.\n */\n\n/**\n * `workspace` is \"This workspace\": things that happen in Opengeni itself, such\n * as a meeting's transcript becoming ready, as one person may see them.\n */\nexport const EVENT_SOURCE_KINDS = [\n \"webhook\",\n \"github\",\n \"slack\",\n \"gmail\",\n \"mcp\",\n \"workspace\",\n] as const;\nexport const EventSourceKind = /* @__PURE__ */ defineSchema(() => z.enum(EVENT_SOURCE_KINDS));\nexport type EventSourceKind = z.infer<typeof EventSourceKind>;\n\n/**\n * How a webhook endpoint verifies and reads deliveries: `standard` is\n * Opengeni's own format (Standard Webhooks with an Opengeni secret), `linear`\n * and `sentry` are those apps' webhooks, and `custom` reads any other app's\n * webhooks as the source's `format` describes.\n */\nexport const WEBHOOK_EVENT_ADAPTERS = [\"standard\", \"linear\", \"sentry\", \"custom\"] as const;\nexport const WebhookEventAdapter = /* @__PURE__ */ defineSchema(() =>\n z.enum(WEBHOOK_EVENT_ADAPTERS),\n);\nexport type WebhookEventAdapter = z.infer<typeof WebhookEventAdapter>;\n\n/** An HTTP header name, matched without regard to case. */\nexport const WebhookHeaderName = /* @__PURE__ */ defineSchema(() =>\n z.string().regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]{1,100}$/u, \"A header name such as X-Signature\"),\n);\n\n/** A dot-separated path into a JSON object, such as `data.object.id`. */\nexport const WebhookJsonPath = /* @__PURE__ */ defineSchema(() =>\n z\n .string()\n .max(200)\n .regex(/^[^.\\s]+(?:\\.[^.\\s]+)*$/u, \"A dot-separated path such as data.object.id\"),\n);\n\n/** Where a value comes from: a JSON path in the event, or a request header. */\nexport const WebhookValueSource = /* @__PURE__ */ defineSchema(() =>\n z.union([\n z.object({ path: WebhookJsonPath }).strict(),\n z.object({ header: WebhookHeaderName }).strict(),\n ]),\n);\nexport type WebhookValueSource = z.infer<typeof WebhookValueSource>;\n\n/**\n * How a custom webhook proves it came from the app, always over the exact raw\n * body and with the source's secret:\n * - `standard_webhooks`: Standard Webhooks (`webhook-id`, `webhook-timestamp`,\n * `webhook-signature`) with a `whsec_` secret, as Svix-based apps send.\n * - `hmac_sha256`: the HMAC-SHA256 of the body in `header`, hex or base64,\n * after an optional `prefix` such as `sha256=`.\n * - `timestamped_hmac_sha256`: a `t=<unix seconds>,v1=<hex>` header whose\n * signature is the HMAC-SHA256 of `<t>.<body>`, as Stripe and Tailscale\n * send; deliveries signed more than `toleranceSeconds` away are refused.\n * - `token`: the secret itself in `header`, after an optional `prefix` such\n * as `Bearer ` (a shared token, as GitLab sends).\n */\nexport const WebhookSignatureFormat = /* @__PURE__ */ defineSchema(() =>\n z.discriminatedUnion(\"scheme\", [\n z.object({ scheme: z.literal(\"standard_webhooks\") }).strict(),\n z\n .object({\n scheme: z.literal(\"hmac_sha256\"),\n header: WebhookHeaderName,\n encoding: z.enum([\"hex\", \"base64\"]).default(\"hex\"),\n prefix: z.string().max(32).default(\"\"),\n })\n .strict(),\n z\n .object({\n scheme: z.literal(\"timestamped_hmac_sha256\"),\n header: WebhookHeaderName,\n toleranceSeconds: z.number().int().min(60).max(3600).default(300),\n })\n .strict(),\n z\n .object({\n scheme: z.literal(\"token\"),\n header: WebhookHeaderName,\n prefix: z.string().max(32).default(\"\"),\n })\n .strict(),\n ]),\n);\nexport type WebhookSignatureFormat = z.infer<typeof WebhookSignatureFormat>;\n\nexport const EventSourceStatus = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"active\", \"disabled\", \"blocked\"]),\n);\nexport type EventSourceStatus = z.infer<typeof EventSourceStatus>;\n\n/**\n * Why an event source or trigger is not active, or why a source can't send\n * an event type, as a code clients word in their own language. Each comes\n * with the same reason as an English sentence (`statusReason`,\n * `unavailableReason`) and, for some, what the app or server said\n * (`…Detail`). The wire carries a plain string: a client reads a code it\n * doesn't know, or none, as \"show the sentence\".\n *\n * - `turned_off`: someone turned it off.\n * - `awaiting_secret`: a pasted Linear, Sentry or custom webhook waits for its signing secret.\n * - `reconnect`: the owner's connection to the app has to be signed in again.\n * - `missing_permission`: the connection no longer allows reading what the events need.\n * - `app_not_enabled`: the app isn't turned on for the connected account.\n * - `account_changed`: the connection now signs in as another account (the detail names it).\n * - `connector_removed`: the app or connector is no longer added to the workspace.\n * - `host_sign_in`: the server signs in through the app that embeds Opengeni, which automations can't use.\n * - `events_unsupported`: the server doesn't offer events.\n * - `event_type_gone`: the server no longer offers this event type.\n * - `forbidden`: the server won't let the owner's account receive these events with these settings.\n * - `invalid_arguments`: the server rejected the trigger's subscription arguments.\n * - `needs_public_address`: the server sends this type only to a public https address, which the deployment lacks.\n * - `push_only`: the server sends this type only over a held-open connection, which isn't supported yet.\n * - `delivery_mode_unsupported`: the server won't send this type in a way the deployment can receive.\n * - `callback_unreachable`: the server can't reach the deployment's webhook address.\n * - `not_answering`: the app or server hasn't answered for over an hour.\n * - `github_event_not_subscribed`: the GitHub App isn't subscribed to the event (the detail names it).\n * - `unavailable`: the source can't receive events for another reason.\n */\nexport const EVENT_STATUS_REASON_CODES = [\n \"turned_off\",\n \"awaiting_secret\",\n \"reconnect\",\n \"missing_permission\",\n \"app_not_enabled\",\n \"account_changed\",\n \"connector_removed\",\n \"host_sign_in\",\n \"events_unsupported\",\n \"event_type_gone\",\n \"forbidden\",\n \"invalid_arguments\",\n \"needs_public_address\",\n \"push_only\",\n \"delivery_mode_unsupported\",\n \"callback_unreachable\",\n \"not_answering\",\n \"github_event_not_subscribed\",\n \"unavailable\",\n] as const;\nexport type EventStatusReasonCode = (typeof EVENT_STATUS_REASON_CODES)[number];\n\n/** Whether `code` is one this version of the contract knows. */\nexport function isEventStatusReasonCode(code: unknown): code is EventStatusReasonCode {\n return (\n typeof code === \"string\" && (EVENT_STATUS_REASON_CODES as readonly string[]).includes(code)\n );\n}\n\n/** Who can use a source and see its events: only its owner, or the workspace. */\nexport const EventSourceVisibility = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"private\", \"workspace\"]),\n);\nexport type EventSourceVisibility = z.infer<typeof EventSourceVisibility>;\n\nexport const EVENT_SOURCE_NAME_MAX_LENGTH = 120;\nexport const EVENT_TYPE_MAX_LENGTH = 200;\nexport const EVENT_SUMMARY_MAX_LENGTH = 500;\nexport const EVENT_SUBJECT_MAX_LENGTH = 300;\n/** Serialized UTF-8 bytes of an event's stored `data`; larger data is cut. */\nexport const EVENT_DATA_MAX_BYTES = 64 * 1024;\n/** Raw request bodies above this size are refused before verification. */\nexport const EVENT_DELIVERY_BODY_MAX_BYTES = 1024 * 1024;\nexport const EVENT_TRIGGERS_PER_AUTOMATION_MAX = 16;\nexport const EVENT_TRIGGER_TYPES_MAX = 32;\nexport const EVENT_TRIGGER_CONDITIONS_MAX = 16;\nexport const DEFAULT_EVENT_RUNS_PER_HOUR = 30;\nexport const MAX_EVENT_RUNS_PER_HOUR = 1000;\n/** Raw delivery bodies are deleted after this many days; delivery rows stay. */\nexport const EVENT_DELIVERY_BODY_RETENTION_DAYS = 7;\n/** Normalized events and delivery rows are deleted after this many days. */\nexport const EVENT_RETENTION_DAYS = 30;\n\nconst Uuid = /* @__PURE__ */ defineSchema(() => z.string().uuid());\nconst Timestamp = /* @__PURE__ */ defineSchema(() => z.string());\n\nexport const EventSourceName = /* @__PURE__ */ defineSchema(() =>\n z.string().trim().min(1).max(EVENT_SOURCE_NAME_MAX_LENGTH),\n);\n\nexport const EventTypeName = /* @__PURE__ */ defineSchema(() =>\n z\n .string()\n .min(1)\n .max(EVENT_TYPE_MAX_LENGTH)\n .regex(/^[\\x21-\\x7e]+$/u, \"Event types are printable ASCII without spaces\"),\n);\n\n/**\n * How a custom webhook source reads another app's deliveries. Paths are read\n * in each event: the body, or each item of the list `batch` names.\n */\nexport const WebhookFormat = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n /** The preset that filled this in, such as `tailscale`: names the app and its documented event types. */\n preset: z\n .string()\n .regex(/^[a-z0-9][a-z0-9-]{0,63}$/u)\n .optional(),\n signature: WebhookSignatureFormat,\n /**\n * Present when one delivery holds several events: the body is a JSON\n * list of them, or holds one at `path`. Absent: the body is one event.\n */\n batch: z.object({ path: WebhookJsonPath.optional() }).strict().optional(),\n /** The event type: a path or header, or one `value` for every delivery. */\n type: z.union([\n z.object({ path: WebhookJsonPath }).strict(),\n z.object({ header: WebhookHeaderName }).strict(),\n z.object({ value: EventTypeName }).strict(),\n ]),\n /** The delivery's id, so a retried delivery is kept once; else the body's hash. */\n deliveryId: WebhookValueSource.optional(),\n /** Each event's own id, so an event delivered twice runs automations once. */\n eventId: WebhookJsonPath.optional(),\n /** When it happened: an ISO time or Unix seconds or milliseconds. */\n occurredAt: WebhookJsonPath.optional(),\n /** A one-line description; the event type when absent. */\n summary: WebhookJsonPath.optional(),\n /** What it is about, such as a device or order name. */\n subject: WebhookJsonPath.optional(),\n /** A link to it in the app. */\n url: WebhookJsonPath.optional(),\n /** Who did it. */\n actor: WebhookJsonPath.optional(),\n })\n .strict(),\n);\nexport type WebhookFormat = z.infer<typeof WebhookFormat>;\nexport type WebhookFormatInput = z.input<typeof WebhookFormat>;\n\n/**\n * Formats for apps whose webhooks are well known, keyed by their `preset`.\n * A custom source made with one is the same as one that spells it out.\n */\nexport const WEBHOOK_FORMAT_PRESETS = {\n /** Tailscale: a JSON list of events, signed `t=…,v1=…` over `<t>.<body>`. */\n tailscale: {\n preset: \"tailscale\",\n signature: { scheme: \"timestamped_hmac_sha256\", header: \"Tailscale-Webhook-Signature\" },\n batch: {},\n type: { path: \"type\" },\n occurredAt: \"timestamp\",\n summary: \"message\",\n subject: \"data.deviceName\",\n url: \"data.url\",\n actor: \"data.actor\",\n },\n} as const satisfies Record<string, WebhookFormatInput>;\nexport type WebhookFormatPreset = keyof typeof WEBHOOK_FORMAT_PRESETS;\n\nexport const EventSourceMcpBinding = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n /** The MCP server id as configured for the workspace. */\n serverId: z.string().min(1).max(256),\n /** The owner's connection used for every events/* request. */\n connectionId: Uuid.nullable(),\n })\n .strict(),\n);\nexport type EventSourceMcpBinding = z.infer<typeof EventSourceMcpBinding>;\n\nexport const EventSource = /* @__PURE__ */ defineSchema(() =>\n z.object({\n id: Uuid,\n workspaceId: Uuid,\n kind: EventSourceKind,\n /** Webhook sources only. */\n adapter: WebhookEventAdapter.nullable(),\n /** How a `custom` webhook source reads its app's deliveries; null otherwise. */\n format: WebhookFormat.nullable().default(null),\n name: z.string(),\n /** The person the source belongs to; null for workspace app sources. */\n ownerSubjectId: z.string().nullable(),\n visibility: EventSourceVisibility,\n status: EventSourceStatus,\n /** Why the source is blocked or disabled, in plain language. */\n statusReason: z.string().nullable(),\n /**\n * The same reason as a code (`EVENT_STATUS_REASON_CODES`) a client words\n * in its own language; null when active or from an older server.\n */\n statusReasonCode: z.string().nullable().default(null),\n /** What the app or server said about it, verbatim, when it said something. */\n statusReasonDetail: z.string().nullable().default(null),\n /** The URL to paste into the sending app. Webhook sources only. */\n webhookUrl: z.string().nullable(),\n /**\n * A Linear, Sentry or custom webhook whose secret is not pasted yet: it\n * refuses deliveries until the secret is set with an update.\n */\n awaitingSigningSecret: z.boolean().default(false),\n /** MCP sources only. */\n mcp: EventSourceMcpBinding.nullable(),\n lastDeliveryAt: Timestamp.nullable(),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n /**\n * What the reading person can do with the source: `manage` (its owner or\n * a workspace admin: edit, rotate, test, replay, delete) or `use` (point\n * triggers at it and read its log). Set on REST reads.\n */\n viewerAccess: z.enum([\"manage\", \"use\"]).optional(),\n }),\n);\nexport type EventSource = z.infer<typeof EventSource>;\n\n/**\n * Linear and Sentry generate the secret once they have the webhook URL, so it\n * is pasted on create or afterwards; a custom webhook takes the secret its app\n * shows or the one a person chose there. Standard sources get one from\n * Opengeni.\n */\nexport const EventSourceSigningSecretInput = /* @__PURE__ */ defineSchema(() =>\n z.string().min(8).max(512),\n);\n\nexport const CreateEventSourceRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"webhook\"),\n adapter: WebhookEventAdapter,\n name: EventSourceName,\n visibility: EventSourceVisibility.default(\"private\"),\n signingSecret: EventSourceSigningSecretInput.optional(),\n /** Required for, and only for, the `custom` adapter. */\n format: WebhookFormat.optional(),\n })\n .strict(),\n z\n .object({\n kind: z.enum([\"github\", \"slack\"]),\n name: EventSourceName.optional(),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"gmail\"),\n /** The mailbox connection; defaults to the caller's only Gmail connection. */\n connectionId: Uuid.optional(),\n name: EventSourceName.optional(),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"mcp\"),\n serverId: z.string().min(1).max(256),\n connectionId: Uuid.optional(),\n name: EventSourceName.optional(),\n })\n .strict(),\n z\n .object({\n /**\n * The caller's own \"This workspace\" source. There is one per person,\n * so creating it again returns the existing one.\n */\n kind: z.literal(\"workspace\"),\n name: EventSourceName.optional(),\n })\n .strict(),\n ])\n .superRefine((value, context) => {\n if (\n value.kind === \"webhook\" &&\n value.adapter === \"standard\" &&\n value.signingSecret !== undefined\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"signingSecret\"],\n message: \"Opengeni generates the signing secret for standard webhooks\",\n });\n }\n if (\n value.kind === \"webhook\" &&\n (value.adapter === \"custom\") !== (value.format !== undefined)\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"format\"],\n message:\n value.adapter === \"custom\"\n ? \"A custom webhook needs a format\"\n : \"Only a custom webhook takes a format\",\n });\n }\n }),\n);\n/** What a caller sends; a webhook source's `visibility` defaults to `private`. */\nexport type CreateEventSourceRequest = z.input<typeof CreateEventSourceRequest>;\nexport type ParsedCreateEventSourceRequest = z.output<typeof CreateEventSourceRequest>;\n\nexport const CreateEventSourceResponse = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n source: EventSource,\n /** Standard webhook sources only; shown once. */\n signingSecret: z.string().optional(),\n })\n .strict(),\n);\nexport type CreateEventSourceResponse = z.infer<typeof CreateEventSourceResponse>;\n\nexport const UpdateEventSourceRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n name: EventSourceName.optional(),\n visibility: EventSourceVisibility.optional(),\n status: z.enum([\"active\", \"disabled\"]).optional(),\n /** Replace a pasted Linear, Sentry or custom webhook secret. */\n signingSecret: EventSourceSigningSecretInput.optional(),\n /** Replace a custom webhook's format. */\n format: WebhookFormat.optional(),\n })\n .strict()\n .refine((value) => Object.keys(value).length > 0, \"Supply at least one field\"),\n);\nexport type UpdateEventSourceRequest = z.infer<typeof UpdateEventSourceRequest>;\n\nexport const RotateEventSourceSecretResponse = /* @__PURE__ */ defineSchema(() =>\n z.object({ signingSecret: z.string() }).strict(),\n);\nexport type RotateEventSourceSecretResponse = z.infer<typeof RotateEventSourceSecretResponse>;\n\nexport const ListEventSourcesResponse = /* @__PURE__ */ defineSchema(() =>\n z.object({ sources: z.array(EventSource) }).strict(),\n);\nexport type ListEventSourcesResponse = z.infer<typeof ListEventSourcesResponse>;\n\n/**\n * Sources that need no setting up, named by a key until they are used: an\n * MCP server the person is signed in to that offers events\n * (`mcp-server:<serverId>`), a Gmail account they connected\n * (`gmail:<connectionId>`), and \"This workspace\" (`workspace`). A trigger may\n * name one by its key: the person's own source is added the first time it is\n * used, and using the key again finds that same source.\n */\nexport const READY_EVENT_SOURCE_KINDS = [\"mcp\", \"gmail\", \"workspace\"] as const;\nexport type ReadyEventSourceKind = (typeof READY_EVENT_SOURCE_KINDS)[number];\n\n/** What adds a ready source: the matching create request. */\nexport type ReadyEventSourceRequest =\n | { kind: \"mcp\"; serverId: string }\n | { kind: \"gmail\"; connectionId: string }\n | { kind: \"workspace\" };\n\nconst MCP_SERVER_KEY_PREFIX = \"mcp-server:\";\nconst GMAIL_KEY_PREFIX = \"gmail:\";\nconst WORKSPACE_KEY = \"workspace\";\nconst UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;\nconst SERVER_ID_MAX_LENGTH = 256;\n\nexport function readyEventSourceKey(request: ReadyEventSourceRequest): string {\n if (request.kind === \"mcp\") return `${MCP_SERVER_KEY_PREFIX}${request.serverId}`;\n if (request.kind === \"gmail\") return `${GMAIL_KEY_PREFIX}${request.connectionId}`;\n return WORKSPACE_KEY;\n}\n\n/** The source a key names, or null when it is not a ready source's key. */\nexport function readyEventSourceRequest(key: string): ReadyEventSourceRequest | null {\n if (key === WORKSPACE_KEY) return { kind: \"workspace\" };\n if (key.startsWith(MCP_SERVER_KEY_PREFIX)) {\n const serverId = key.slice(MCP_SERVER_KEY_PREFIX.length);\n return serverId.length > 0 && serverId.length <= SERVER_ID_MAX_LENGTH\n ? { kind: \"mcp\", serverId }\n : null;\n }\n if (key.startsWith(GMAIL_KEY_PREFIX)) {\n const connectionId = key.slice(GMAIL_KEY_PREFIX.length);\n return UUID_PATTERN.test(connectionId) ? { kind: \"gmail\", connectionId } : null;\n }\n return null;\n}\n\nexport const ReadyEventSource = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n /** Use it wherever a trigger names a source; see `readyEventSourceRequest`. */\n key: z.string(),\n kind: z.enum(READY_EVENT_SOURCE_KINDS),\n name: z.string(),\n })\n .strict(),\n);\nexport type ReadyEventSource = z.infer<typeof ReadyEventSource>;\n\nexport const ListReadyEventSourcesResponse = /* @__PURE__ */ defineSchema(() =>\n z.object({ sources: z.array(ReadyEventSource) }).strict(),\n);\nexport type ListReadyEventSourcesResponse = z.infer<typeof ListReadyEventSourcesResponse>;\n\n/** A source's id, or a ready source's key. */\nexport const EventSourceRef = /* @__PURE__ */ defineSchema(() =>\n z\n .string()\n .min(1)\n .max(MCP_SERVER_KEY_PREFIX.length + SERVER_ID_MAX_LENGTH)\n .refine(\n (ref) => UUID_PATTERN.test(ref) || readyEventSourceRequest(ref) !== null,\n \"Use an event source's id or a ready source's key\",\n ),\n);\n\n/** Whether a trigger's source names a ready source by its key rather than an id. */\nexport function isReadyEventSourceKey(ref: string): boolean {\n return !UUID_PATTERN.test(ref) && readyEventSourceRequest(ref) !== null;\n}\n\n/**\n * Who caused an event. `opengeni` marks Opengeni's own identities (its GitHub\n * App bot, its Slack bot); triggers ignore those events unless they opt in.\n */\nexport const EventActorKind = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"person\", \"bot\", \"opengeni\", \"unknown\"]),\n);\nexport type EventActorKind = z.infer<typeof EventActorKind>;\n\nexport const EventActor = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n kind: EventActorKind,\n name: z.string().max(200).nullable(),\n })\n .strict(),\n);\nexport type EventActor = z.infer<typeof EventActor>;\n\nexport const InboundEvent = /* @__PURE__ */ defineSchema(() =>\n z.object({\n id: Uuid,\n sourceId: Uuid,\n sourceKind: EventSourceKind,\n type: z.string(),\n occurredAt: Timestamp,\n receivedAt: Timestamp,\n /** What the event is about, such as `acme/api#42`. */\n subject: z.string().nullable(),\n /** One line a person or agent can read. */\n summary: z.string(),\n /** A link to the thing in its app, when known. */\n url: z.string().nullable(),\n actor: EventActor,\n data: z.record(z.string(), z.unknown()),\n /** The source's data was larger than the stored budget and was cut. */\n dataTruncated: z.boolean(),\n /** Events from this source may have been missed just before this one. */\n gapBefore: z.boolean(),\n }),\n);\nexport type InboundEvent = z.infer<typeof InboundEvent>;\n\nexport const InboundEventSummary = /* @__PURE__ */ defineSchema(() =>\n InboundEvent.pick({\n id: true,\n sourceId: true,\n sourceKind: true,\n type: true,\n occurredAt: true,\n subject: true,\n summary: true,\n url: true,\n actor: true,\n }),\n);\nexport type InboundEventSummary = z.infer<typeof InboundEventSummary>;\n\nexport const ListInboundEventsResponse = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n events: z.array(InboundEvent),\n nextCursor: z.string().nullable(),\n })\n .strict(),\n);\nexport type ListInboundEventsResponse = z.infer<typeof ListInboundEventsResponse>;\n\nexport const EventDeliveryStatus = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"accepted\", \"ignored\", \"rejected\", \"failed\"]),\n);\nexport type EventDeliveryStatus = z.infer<typeof EventDeliveryStatus>;\n\nexport const EventDelivery = /* @__PURE__ */ defineSchema(() =>\n z.object({\n id: Uuid,\n sourceId: Uuid,\n receivedAt: Timestamp,\n status: EventDeliveryStatus,\n /** Why a delivery was ignored, rejected or failed, in plain language. */\n reason: z.string().nullable(),\n eventIds: z.array(Uuid),\n /** The types of the events it became, each once, in order. */\n eventTypes: z.array(z.string()),\n bodyBytes: z.number().int().nonnegative(),\n /** The raw body is kept for a few days so a delivery can be replayed. */\n bodyRetained: z.boolean(),\n /** How many times the sender delivered this same delivery again. */\n duplicateCount: z.number().int().nonnegative(),\n replayOfDeliveryId: Uuid.nullable(),\n }),\n);\nexport type EventDelivery = z.infer<typeof EventDelivery>;\n\nexport const ListEventDeliveriesResponse = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n deliveries: z.array(EventDelivery),\n nextCursor: z.string().nullable(),\n })\n .strict(),\n);\nexport type ListEventDeliveriesResponse = z.infer<typeof ListEventDeliveriesResponse>;\n\nexport const ReplayEventDeliveryResponse = /* @__PURE__ */ defineSchema(() =>\n z.object({ delivery: EventDelivery }).strict(),\n);\nexport type ReplayEventDeliveryResponse = z.infer<typeof ReplayEventDeliveryResponse>;\n\nexport const SendTestEventRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n type: EventTypeName.default(\"opengeni.test\"),\n data: z.record(z.string(), z.unknown()).default({}),\n })\n .strict(),\n);\n/** What a caller sends; `type` defaults to `opengeni.test` and `data` to `{}`. */\nexport type SendTestEventRequest = z.input<typeof SendTestEventRequest>;\nexport type ParsedSendTestEventRequest = z.output<typeof SendTestEventRequest>;\n\nexport const SendTestEventResponse = /* @__PURE__ */ defineSchema(() =>\n z.object({ event: InboundEvent, matchedAutomationIds: z.array(Uuid) }).strict(),\n);\nexport type SendTestEventResponse = z.infer<typeof SendTestEventResponse>;\n\n/** A field an event condition can read. */\nexport const EVENT_CONDITION_FIELD_PATTERN =\n /^(?:type|subject|summary|url|actor\\.kind|actor\\.name|data(?:\\.[A-Za-z0-9_@$-]{1,64}){1,8})$/u;\n\nexport const EventConditionOperator = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"equals\", \"not_equals\", \"in\", \"not_in\", \"contains\", \"exists\", \"not_exists\"]),\n);\nexport type EventConditionOperator = z.infer<typeof EventConditionOperator>;\n\nconst EventConditionScalar = /* @__PURE__ */ defineSchema(() =>\n z.union([z.string().max(500), z.number().finite(), z.boolean(), z.null()]),\n);\n\nexport const EventCondition = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n /** `type`, `subject`, `summary`, `url`, `actor.kind`, `actor.name`, or `data.<path>`. */\n field: z.string().regex(EVENT_CONDITION_FIELD_PATTERN, \"Unsupported event field\"),\n op: EventConditionOperator,\n value: z.union([EventConditionScalar, z.array(EventConditionScalar).max(50)]).optional(),\n })\n .strict()\n .superRefine((condition, context) => {\n const presence = condition.op === \"exists\" || condition.op === \"not_exists\";\n const list = condition.op === \"in\" || condition.op === \"not_in\";\n if (presence && condition.value !== undefined) {\n context.addIssue({\n code: \"custom\",\n path: [\"value\"],\n message: `${condition.op} takes no value`,\n });\n }\n if (!presence && condition.value === undefined) {\n context.addIssue({\n code: \"custom\",\n path: [\"value\"],\n message: `${condition.op} needs a value`,\n });\n }\n if (list && !Array.isArray(condition.value)) {\n context.addIssue({\n code: \"custom\",\n path: [\"value\"],\n message: `${condition.op} needs a list`,\n });\n }\n if (!list && Array.isArray(condition.value)) {\n context.addIssue({\n code: \"custom\",\n path: [\"value\"],\n message: `${condition.op} needs one value`,\n });\n }\n }),\n);\nexport type EventCondition = z.infer<typeof EventCondition>;\n\nexport const EventTriggerInput = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n /** The source's id, or a ready source's key: the owner's source is added on first use. */\n sourceId: EventSourceRef,\n /** Event types that fire the trigger. An MCP trigger names exactly one. */\n eventTypes: z.array(EventTypeName).min(1).max(EVENT_TRIGGER_TYPES_MAX),\n /** All conditions must hold. */\n conditions: z.array(EventCondition).max(EVENT_TRIGGER_CONDITIONS_MAX).default([]),\n /** Also fire on events made by Opengeni's own bots. */\n includeOwnEvents: z.boolean().default(false),\n /** MCP subscription arguments, validated against the event type's inputSchema. */\n arguments: z.record(z.string(), z.unknown()).optional(),\n })\n .strict(),\n);\nexport type EventTriggerInput = z.input<typeof EventTriggerInput>;\nexport type ParsedEventTriggerInput = z.output<typeof EventTriggerInput>;\n\nexport const EventTriggerStatus = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"active\", \"blocked\", \"disabled\"]),\n);\nexport type EventTriggerStatus = z.infer<typeof EventTriggerStatus>;\n\nexport const EventTrigger = /* @__PURE__ */ defineSchema(() =>\n z.object({\n id: Uuid,\n sourceId: Uuid,\n sourceKind: EventSourceKind,\n eventTypes: z.array(z.string()),\n conditions: z.array(EventCondition),\n includeOwnEvents: z.boolean(),\n arguments: z.record(z.string(), z.unknown()).nullable(),\n status: EventTriggerStatus,\n statusReason: z.string().nullable(),\n /** The reason as a code a client words itself; see `EVENT_STATUS_REASON_CODES`. */\n statusReasonCode: z.string().nullable().default(null),\n /** What the source's server said about it, verbatim, when it said something. */\n statusReasonDetail: z.string().nullable().default(null),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n }),\n);\nexport type EventTrigger = z.infer<typeof EventTrigger>;\n\n/**\n * What the automations that continue a chat are waiting for, as the chat list\n * and header show it: the soonest scheduled run and the events that can start\n * a run. Only automations the reader can see contribute; a chat that waits\n * only on someone else's private automation has none.\n */\nexport const SessionAutomationWaitSummary = /* @__PURE__ */ defineSchema(() => {\n const waitEvent = z\n .object({\n source: z.object({ kind: EventSourceKind, name: z.string() }).strict().nullable(),\n eventTypes: z.array(z.string()),\n })\n .strict();\n return z\n .object({\n /** The soonest scheduled run into the chat, or null when none is ahead. */\n nextRunAt: z.string().datetime({ offset: true }).nullable(),\n /**\n * The first active event trigger that can start a run: its event types\n * and its source, null when the reader can't see the source. Null when\n * no event can start a run. `events` names them all.\n */\n event: waitEvent.nullable(),\n /**\n * Every event that can start a run, one entry per source in the order\n * the automations were made: the event types its active triggers wait\n * for (just `*` when one takes every event). Sources the reader can't\n * see share one entry with a null source. Empty when no event can start\n * a run; absent from servers that only send `event`.\n */\n events: z.array(waitEvent).optional(),\n /** How many automations can still start a run in the chat, this one included. */\n automations: z.number().int().positive(),\n })\n .strict();\n});\nexport type SessionAutomationWaitSummary = z.infer<typeof SessionAutomationWaitSummary>;\n\n/** Event triggers and the event run policy of an automation. */\nexport const ScheduledTaskEventsInput = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n triggers: z.array(EventTriggerInput).max(EVENT_TRIGGERS_PER_AUTOMATION_MAX),\n /** Storm guard: at most this many event runs in a rolling hour. */\n maxRunsPerHour: z.number().int().min(1).max(MAX_EVENT_RUNS_PER_HOUR).optional(),\n /** Finish the automation after its first run, whichever trigger fires first. */\n once: z.boolean().optional(),\n })\n .strict(),\n);\nexport type ScheduledTaskEventsInput = z.input<typeof ScheduledTaskEventsInput>;\nexport type ParsedScheduledTaskEventsInput = z.output<typeof ScheduledTaskEventsInput>;\n\nexport const ScheduledTaskEvents = /* @__PURE__ */ defineSchema(() =>\n z.object({\n triggers: z.array(EventTrigger),\n maxRunsPerHour: z.number().int(),\n once: z.boolean(),\n /** When a once-automation finished. */\n completedAt: Timestamp.nullable(),\n /** When the storm guard last held events back; null when it is not holding any. */\n throttledSince: Timestamp.nullable(),\n }),\n);\nexport type ScheduledTaskEvents = z.infer<typeof ScheduledTaskEvents>;\n\n/** The events an event run carried. */\nexport const ScheduledTaskRunEventOccurrence = /* @__PURE__ */ defineSchema(() =>\n z.object({\n triggerIds: z.array(Uuid),\n eventCount: z.number().int().nonnegative(),\n events: z.array(InboundEventSummary),\n }),\n);\nexport type ScheduledTaskRunEventOccurrence = z.infer<typeof ScheduledTaskRunEventOccurrence>;\n\n/** Bytes of a run's chat update spent on its events at most. */\nexport const SCHEDULED_OCCURRENCE_EVENTS_MAX_BYTES = 12 * 1024;\n/** Bytes of one carried event's `data` at most; the full event stays fetchable by id. */\nexport const SCHEDULED_OCCURRENCE_EVENT_DATA_MAX_BYTES = 2 * 1024;\n\nexport const ScheduledOccurrenceEvent = /* @__PURE__ */ defineSchema(() =>\n InboundEventSummary.extend({\n data: z.record(z.string(), z.unknown()),\n /** The data was cut to fit; the stored event has more. */\n dataTruncated: z.boolean(),\n }),\n);\nexport type ScheduledOccurrenceEvent = z.infer<typeof ScheduledOccurrenceEvent>;\n\n/**\n * The events an event run delivers into its chat, bounded to fit the chat\n * update. `events` holds the oldest that fit; `eventCount` counts them all.\n */\nexport const ScheduledOccurrenceEvents = /* @__PURE__ */ defineSchema(() =>\n z.object({\n occurrenceId: Uuid,\n eventCount: z.number().int().nonnegative(),\n events: z.array(ScheduledOccurrenceEvent),\n /** The source may have missed events just before these. */\n gapBefore: z.boolean(),\n }),\n);\nexport type ScheduledOccurrenceEvents = z.infer<typeof ScheduledOccurrenceEvents>;\n\n/** An event type a source offers, for trigger pickers and agents. */\nexport const EventTypeDescriptor = /* @__PURE__ */ defineSchema(() =>\n z.object({\n type: z.string(),\n description: z.string(),\n /** Fields worth matching in conditions, such as `data.repository`. */\n fields: z.array(z.object({ field: z.string(), description: z.string() })),\n /** MCP sources: the subscription arguments the server accepts. */\n argumentsSchema: z.record(z.string(), z.unknown()).nullable(),\n /** False when Opengeni cannot receive this type from this source. */\n available: z.boolean(),\n unavailableReason: z.string().nullable(),\n /** The reason as a code a client words itself; see `EVENT_STATUS_REASON_CODES`. */\n unavailableReasonCode: z.string().nullable().default(null),\n /** What the reason names, such as the GitHub App event to subscribe to. */\n unavailableReasonDetail: z.string().nullable().default(null),\n }),\n);\nexport type EventTypeDescriptor = z.infer<typeof EventTypeDescriptor>;\n\nexport const ListEventTypesResponse = /* @__PURE__ */ defineSchema(() =>\n z.object({ sourceId: Uuid, eventTypes: z.array(EventTypeDescriptor) }).strict(),\n);\nexport type ListEventTypesResponse = z.infer<typeof ListEventTypesResponse>;\n"],"mappings":"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","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  encodeCountedEnvelope,
6
6
  equalBytes,
7
7
  strictUtf8
8
- } from "./chunk-MYBZRDTY.js";
8
+ } from "./chunk-WQI7VNN4.js";
9
9
 
10
10
  // src/document-artifact-commands.ts
11
11
  var DOCUMENT_ARTIFACT_COMMAND_VERSION = 1;
@@ -1201,4 +1201,4 @@ export {
1201
1201
  decodeDocumentArtifactQueryResponse,
1202
1202
  assertCanonicalDocumentArtifactQueryResponseBytes
1203
1203
  };
1204
- //# sourceMappingURL=chunk-RIY7GYQS.js.map
1204
+ //# sourceMappingURL=chunk-PTSROVDG.js.map
@@ -0,0 +1,189 @@
1
+ // src/slack-rest-mcp.ts
2
+ var OFFICIAL_SLACK_MCP_URL = "https://mcp.slack.com/mcp";
3
+ var SLACK_REST_API_BASE = "https://slack.com/api/";
4
+ var SLACK_PRIVATE_FILE_ORIGIN = "https://files.slack.com";
5
+ var SLACK_PRIVATE_FILE_PATH_PREFIX = "/files-pri/";
6
+ function isSlackPrivateFileUrl(value) {
7
+ try {
8
+ const url = new URL(value);
9
+ return url.origin === SLACK_PRIVATE_FILE_ORIGIN && !url.username && !url.password && !url.hash && url.pathname.startsWith(SLACK_PRIVATE_FILE_PATH_PREFIX) && !url.pathname.split("/").some((segment) => segment === "." || segment === "..");
10
+ } catch {
11
+ return false;
12
+ }
13
+ }
14
+ var OPENGENI_SLACK_REST_USER_SCOPES = [
15
+ "channels:read",
16
+ "groups:read",
17
+ "im:read",
18
+ "mpim:read",
19
+ "channels:history",
20
+ "groups:history",
21
+ "im:history",
22
+ "mpim:history",
23
+ "users:read",
24
+ "files:read",
25
+ "im:write",
26
+ "chat:write"
27
+ ];
28
+ function normalizeSlackScopes(scopes) {
29
+ return [
30
+ ...new Set(
31
+ (typeof scopes === "string" ? [scopes] : scopes ?? []).flatMap((entry) => entry.split(/[\s,]+/u)).filter(Boolean)
32
+ )
33
+ ].sort();
34
+ }
35
+ var conversationScopes = ["channels:read", "groups:read", "im:read", "mpim:read"];
36
+ var historyScopes = ["channels:history", "groups:history", "im:history", "mpim:history"];
37
+ var channel = { type: "string", description: "Slack conversation ID, such as C123 or D123." };
38
+ var cursor = { type: "string", maxLength: 4096, description: "Cursor from the previous page." };
39
+ var directoryPage = { type: "integer", minimum: 1, maximum: 100, default: 100 };
40
+ var historyPage = { type: "integer", minimum: 1, maximum: 15, default: 15 };
41
+ var timestamp = { type: "string", pattern: "^[0-9]+\\.[0-9]+$" };
42
+ function tool(name, description, properties, required = [], mutation = false) {
43
+ return {
44
+ name,
45
+ description,
46
+ inputSchema: { type: "object", properties, required, additionalProperties: false },
47
+ annotations: {
48
+ readOnlyHint: !mutation,
49
+ destructiveHint: false,
50
+ idempotentHint: !mutation,
51
+ openWorldHint: true
52
+ }
53
+ };
54
+ }
55
+ var SLACK_REST_MCP_TOOLS = [
56
+ tool(
57
+ "slack_list_channels",
58
+ "Lists one page of conversations visible to your connected Slack account. Conversation types without a granted read scope are omitted.",
59
+ {
60
+ types: {
61
+ type: "array",
62
+ items: { type: "string", enum: ["public_channel", "private_channel", "im", "mpim"] },
63
+ minItems: 1,
64
+ maxItems: 4
65
+ },
66
+ cursor,
67
+ limit: directoryPage,
68
+ exclude_archived: { type: "boolean", default: true }
69
+ }
70
+ ),
71
+ tool(
72
+ "slack_get_channel_info",
73
+ "Gets metadata for one conversation visible to your connected Slack account.",
74
+ { channel },
75
+ ["channel"]
76
+ ),
77
+ tool(
78
+ "slack_list_channel_members",
79
+ "Lists one page of members in a visible channel or group conversation.",
80
+ { channel, cursor, limit: directoryPage },
81
+ ["channel"]
82
+ ),
83
+ tool("slack_list_users", "Lists one page of users in the connected Slack workspace.", {
84
+ cursor,
85
+ limit: directoryPage
86
+ }),
87
+ tool(
88
+ "slack_get_user_info",
89
+ "Gets a user's profile by their Slack user ID. Email is included only when Slack has granted that scope.",
90
+ { user: { type: "string" } },
91
+ ["user"]
92
+ ),
93
+ tool(
94
+ "slack_read_channel",
95
+ "Reads one page of at most 15 messages from a selected conversation. Slack history limits are shared across the workspace. No automatic pagination or backfill.",
96
+ {
97
+ channel,
98
+ cursor,
99
+ limit: historyPage,
100
+ oldest: timestamp,
101
+ latest: timestamp,
102
+ inclusive: { type: "boolean", default: false }
103
+ },
104
+ ["channel"]
105
+ ),
106
+ tool(
107
+ "slack_read_thread",
108
+ "Reads one page of at most 15 messages in a selected thread. Slack thread limits are shared across the workspace. No automatic pagination or backfill.",
109
+ {
110
+ channel,
111
+ ts: { ...timestamp, description: "Thread root message timestamp." },
112
+ cursor,
113
+ limit: historyPage
114
+ },
115
+ ["channel", "ts"]
116
+ ),
117
+ tool(
118
+ "slack_download_file",
119
+ "Downloads one file shared in Slack, such as a PDF or image, into your workspace like an attachment and returns its path. Use the file ID (F...) from a message's files.",
120
+ { file: { type: "string", pattern: "^F[A-Z0-9]+$", description: "Slack file ID." } },
121
+ ["file"]
122
+ ),
123
+ tool(
124
+ "slack_open_dm",
125
+ "Opens or resumes a direct message with one Slack user as your connected account.",
126
+ { user: { type: "string" } },
127
+ ["user"],
128
+ true
129
+ ),
130
+ tool(
131
+ "slack_send_message",
132
+ "Sends a message as your connected Slack account. Supply thread_ts to reply in a thread. Review the recipient and text before approving. An uncertain submission is never automatically retried.",
133
+ {
134
+ channel,
135
+ text: { type: "string", minLength: 1, maxLength: 4e4 },
136
+ thread_ts: { ...timestamp, description: "Optional thread root timestamp for a reply." },
137
+ unfurl_links: { type: "boolean", default: false },
138
+ unfurl_media: { type: "boolean", default: false }
139
+ },
140
+ ["channel", "text"],
141
+ true
142
+ )
143
+ ];
144
+ var REQUIRED_ANY_SCOPES = {
145
+ slack_list_channels: conversationScopes,
146
+ slack_get_channel_info: conversationScopes,
147
+ slack_list_channel_members: ["channels:read", "groups:read", "mpim:read"],
148
+ slack_list_users: ["users:read"],
149
+ slack_get_user_info: ["users:read"],
150
+ slack_read_channel: historyScopes,
151
+ slack_read_thread: historyScopes,
152
+ slack_download_file: ["files:read"],
153
+ slack_open_dm: ["im:write"],
154
+ slack_send_message: ["chat:write"]
155
+ };
156
+ function slackRestMcpToolsForScopes(scopes) {
157
+ const granted = new Set(normalizeSlackScopes(scopes));
158
+ return SLACK_REST_MCP_TOOLS.filter(
159
+ (entry) => REQUIRED_ANY_SCOPES[entry.name]?.some((scope) => granted.has(scope))
160
+ ).map((entry) => ({
161
+ ...entry,
162
+ inputSchema: {
163
+ ...entry.inputSchema,
164
+ required: [...entry.inputSchema.required],
165
+ properties: { ...entry.inputSchema.properties }
166
+ },
167
+ annotations: { ...entry.annotations }
168
+ }));
169
+ }
170
+ var SLACK_CONVERSATION_READ_SCOPE_BY_TYPE = {
171
+ public_channel: "channels:read",
172
+ private_channel: "groups:read",
173
+ im: "im:read",
174
+ mpim: "mpim:read"
175
+ };
176
+
177
+ export {
178
+ OFFICIAL_SLACK_MCP_URL,
179
+ SLACK_REST_API_BASE,
180
+ SLACK_PRIVATE_FILE_ORIGIN,
181
+ SLACK_PRIVATE_FILE_PATH_PREFIX,
182
+ isSlackPrivateFileUrl,
183
+ OPENGENI_SLACK_REST_USER_SCOPES,
184
+ normalizeSlackScopes,
185
+ SLACK_REST_MCP_TOOLS,
186
+ slackRestMcpToolsForScopes,
187
+ SLACK_CONVERSATION_READ_SCOPE_BY_TYPE
188
+ };
189
+ //# sourceMappingURL=chunk-PUIUXIOL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/slack-rest-mcp.ts"],"sourcesContent":["/** The catalog and OAuth identity stay stable while calls use the ordinary Web API. */\nexport const OFFICIAL_SLACK_MCP_URL = \"https://mcp.slack.com/mcp\";\nexport const SLACK_REST_API_BASE = \"https://slack.com/api/\";\n/** Private Slack file bytes are served only from this origin and path. */\nexport const SLACK_PRIVATE_FILE_ORIGIN = \"https://files.slack.com\";\nexport const SLACK_PRIVATE_FILE_PATH_PREFIX = \"/files-pri/\";\n\n/** A private Slack file download URL that may carry a Slack user token. */\nexport function isSlackPrivateFileUrl(value: string | URL): boolean {\n try {\n const url = new URL(value);\n return (\n url.origin === SLACK_PRIVATE_FILE_ORIGIN &&\n !url.username &&\n !url.password &&\n !url.hash &&\n url.pathname.startsWith(SLACK_PRIVATE_FILE_PATH_PREFIX) &&\n !url.pathname.split(\"/\").some((segment) => segment === \".\" || segment === \"..\")\n );\n } catch {\n return false;\n }\n}\n\nexport const OPENGENI_SLACK_REST_USER_SCOPES = [\n \"channels:read\",\n \"groups:read\",\n \"im:read\",\n \"mpim:read\",\n \"channels:history\",\n \"groups:history\",\n \"im:history\",\n \"mpim:history\",\n \"users:read\",\n \"files:read\",\n \"im:write\",\n \"chat:write\",\n] as const;\n\n/** Slack returns comma-delimited scopes, including in existing saved grants. */\nexport function normalizeSlackScopes(\n scopes: readonly string[] | string | undefined | null,\n): string[] {\n return [\n ...new Set(\n (typeof scopes === \"string\" ? [scopes] : (scopes ?? []))\n .flatMap((entry) => entry.split(/[\\s,]+/u))\n .filter(Boolean),\n ),\n ].sort();\n}\n\nexport type SlackRestMcpTool = {\n name: string;\n description: string;\n inputSchema: {\n type: \"object\";\n properties: Record<string, unknown>;\n required: string[];\n additionalProperties: false;\n };\n annotations: {\n readOnlyHint: boolean;\n destructiveHint: false;\n idempotentHint: boolean;\n openWorldHint: true;\n };\n};\n\nconst conversationScopes = [\"channels:read\", \"groups:read\", \"im:read\", \"mpim:read\"];\nconst historyScopes = [\"channels:history\", \"groups:history\", \"im:history\", \"mpim:history\"];\nconst channel = { type: \"string\", description: \"Slack conversation ID, such as C123 or D123.\" };\nconst cursor = { type: \"string\", maxLength: 4096, description: \"Cursor from the previous page.\" };\nconst directoryPage = { type: \"integer\", minimum: 1, maximum: 100, default: 100 };\nconst historyPage = { type: \"integer\", minimum: 1, maximum: 15, default: 15 };\nconst timestamp = { type: \"string\", pattern: \"^[0-9]+\\\\.[0-9]+$\" };\n\nfunction tool(\n name: string,\n description: string,\n properties: Record<string, unknown>,\n required: string[] = [],\n mutation = false,\n): SlackRestMcpTool {\n return {\n name,\n description,\n inputSchema: { type: \"object\", properties, required, additionalProperties: false },\n annotations: {\n readOnlyHint: !mutation,\n destructiveHint: false,\n idempotentHint: !mutation,\n openWorldHint: true,\n },\n };\n}\n\n/** Static reviewed pilot surface. Each call reads only one explicitly requested page. */\nexport const SLACK_REST_MCP_TOOLS: SlackRestMcpTool[] = [\n tool(\n \"slack_list_channels\",\n \"Lists one page of conversations visible to your connected Slack account. Conversation types without a granted read scope are omitted.\",\n {\n types: {\n type: \"array\",\n items: { type: \"string\", enum: [\"public_channel\", \"private_channel\", \"im\", \"mpim\"] },\n minItems: 1,\n maxItems: 4,\n },\n cursor,\n limit: directoryPage,\n exclude_archived: { type: \"boolean\", default: true },\n },\n ),\n tool(\n \"slack_get_channel_info\",\n \"Gets metadata for one conversation visible to your connected Slack account.\",\n { channel },\n [\"channel\"],\n ),\n tool(\n \"slack_list_channel_members\",\n \"Lists one page of members in a visible channel or group conversation.\",\n { channel, cursor, limit: directoryPage },\n [\"channel\"],\n ),\n tool(\"slack_list_users\", \"Lists one page of users in the connected Slack workspace.\", {\n cursor,\n limit: directoryPage,\n }),\n tool(\n \"slack_get_user_info\",\n \"Gets a user's profile by their Slack user ID. Email is included only when Slack has granted that scope.\",\n { user: { type: \"string\" } },\n [\"user\"],\n ),\n tool(\n \"slack_read_channel\",\n \"Reads one page of at most 15 messages from a selected conversation. Slack history limits are shared across the workspace. No automatic pagination or backfill.\",\n {\n channel,\n cursor,\n limit: historyPage,\n oldest: timestamp,\n latest: timestamp,\n inclusive: { type: \"boolean\", default: false },\n },\n [\"channel\"],\n ),\n tool(\n \"slack_read_thread\",\n \"Reads one page of at most 15 messages in a selected thread. Slack thread limits are shared across the workspace. No automatic pagination or backfill.\",\n {\n channel,\n ts: { ...timestamp, description: \"Thread root message timestamp.\" },\n cursor,\n limit: historyPage,\n },\n [\"channel\", \"ts\"],\n ),\n tool(\n \"slack_download_file\",\n \"Downloads one file shared in Slack, such as a PDF or image, into your workspace like an attachment and returns its path. Use the file ID (F...) from a message's files.\",\n { file: { type: \"string\", pattern: \"^F[A-Z0-9]+$\", description: \"Slack file ID.\" } },\n [\"file\"],\n ),\n tool(\n \"slack_open_dm\",\n \"Opens or resumes a direct message with one Slack user as your connected account.\",\n { user: { type: \"string\" } },\n [\"user\"],\n true,\n ),\n tool(\n \"slack_send_message\",\n \"Sends a message as your connected Slack account. Supply thread_ts to reply in a thread. Review the recipient and text before approving. An uncertain submission is never automatically retried.\",\n {\n channel,\n text: { type: \"string\", minLength: 1, maxLength: 40000 },\n thread_ts: { ...timestamp, description: \"Optional thread root timestamp for a reply.\" },\n unfurl_links: { type: \"boolean\", default: false },\n unfurl_media: { type: \"boolean\", default: false },\n },\n [\"channel\", \"text\"],\n true,\n ),\n];\n\nconst REQUIRED_ANY_SCOPES: Readonly<Record<string, readonly string[]>> = {\n slack_list_channels: conversationScopes,\n slack_get_channel_info: conversationScopes,\n slack_list_channel_members: [\"channels:read\", \"groups:read\", \"mpim:read\"],\n slack_list_users: [\"users:read\"],\n slack_get_user_info: [\"users:read\"],\n slack_read_channel: historyScopes,\n slack_read_thread: historyScopes,\n slack_download_file: [\"files:read\"],\n slack_open_dm: [\"im:write\"],\n slack_send_message: [\"chat:write\"],\n};\n\nexport function slackRestMcpToolsForScopes(scopes: readonly string[] | string): SlackRestMcpTool[] {\n const granted = new Set(normalizeSlackScopes(scopes));\n return SLACK_REST_MCP_TOOLS.filter((entry) =>\n REQUIRED_ANY_SCOPES[entry.name]?.some((scope) => granted.has(scope)),\n ).map((entry) => ({\n ...entry,\n inputSchema: {\n ...entry.inputSchema,\n required: [...entry.inputSchema.required],\n properties: { ...entry.inputSchema.properties },\n },\n annotations: { ...entry.annotations },\n }));\n}\n\nexport const SLACK_CONVERSATION_READ_SCOPE_BY_TYPE = {\n public_channel: \"channels:read\",\n private_channel: \"groups:read\",\n im: \"im:read\",\n mpim: \"mpim:read\",\n} as const;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,19 @@
1
+ // src/passkey-only-account.ts
2
+ var PASSKEY_ONLY_ACCOUNT_EMAIL_DOMAIN = "passkey.invalid";
3
+ function passkeyOnlyAccountEmail(authUserId) {
4
+ return `${authUserId.toLowerCase()}@${PASSKEY_ONLY_ACCOUNT_EMAIL_DOMAIN}`;
5
+ }
6
+ function isPasskeyOnlyAccountEmail(email) {
7
+ return typeof email === "string" && email.toLowerCase().endsWith(`@${PASSKEY_ONLY_ACCOUNT_EMAIL_DOMAIN}`);
8
+ }
9
+ function accountContactEmail(email) {
10
+ return email && !isPasskeyOnlyAccountEmail(email) ? email : null;
11
+ }
12
+
13
+ export {
14
+ PASSKEY_ONLY_ACCOUNT_EMAIL_DOMAIN,
15
+ passkeyOnlyAccountEmail,
16
+ isPasskeyOnlyAccountEmail,
17
+ accountContactEmail
18
+ };
19
+ //# sourceMappingURL=chunk-R6VXJIMB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/passkey-only-account.ts"],"sourcesContent":["// Kept free of schema imports: the always-loaded app shell uses this check,\n// and pulling the schema library into the first page load costs every visit.\n\n/**\n * Accounts created with only a passkey have no email address. Their stored\n * address is a unique placeholder under this reserved `.invalid` domain\n * (RFC 2606), which no mail can reach and no person or organization domain\n * can match. Never show it; show the person's name instead.\n */\nexport const PASSKEY_ONLY_ACCOUNT_EMAIL_DOMAIN = \"passkey.invalid\";\n\nexport function passkeyOnlyAccountEmail(authUserId: string): string {\n return `${authUserId.toLowerCase()}@${PASSKEY_ONLY_ACCOUNT_EMAIL_DOMAIN}`;\n}\n\nexport function isPasskeyOnlyAccountEmail(email: string | null | undefined): boolean {\n return (\n typeof email === \"string\" &&\n email.toLowerCase().endsWith(`@${PASSKEY_ONLY_ACCOUNT_EMAIL_DOMAIN}`)\n );\n}\n\n/**\n * The account's real email address, or null when it has none. Use it wherever\n * an address is shown, used as a label or handed to another service.\n */\nexport function accountContactEmail(email: string | null | undefined): string | null {\n return email && !isPasskeyOnlyAccountEmail(email) ? email : null;\n}\n"],"mappings":";AASO,IAAM,oCAAoC;AAE1C,SAAS,wBAAwB,YAA4B;AAClE,SAAO,GAAG,WAAW,YAAY,CAAC,IAAI,iCAAiC;AACzE;AAEO,SAAS,0BAA0B,OAA2C;AACnF,SACE,OAAO,UAAU,YACjB,MAAM,YAAY,EAAE,SAAS,IAAI,iCAAiC,EAAE;AAExE;AAMO,SAAS,oBAAoB,OAAiD;AACnF,SAAO,SAAS,CAAC,0BAA0B,KAAK,IAAI,QAAQ;AAC9D;","names":[]}
@@ -0,0 +1,15 @@
1
+ // src/integration-capability-id.ts
2
+ var INTEGRATION_DEFINITION_CAPABILITY_PREFIX = "api:integration:";
3
+ function integrationDefinitionCapabilityId(definitionId) {
4
+ return `${INTEGRATION_DEFINITION_CAPABILITY_PREFIX}${definitionId}`;
5
+ }
6
+ function integrationDefinitionIdFromCapabilityId(capabilityId) {
7
+ return capabilityId.startsWith(INTEGRATION_DEFINITION_CAPABILITY_PREFIX) ? capabilityId.slice(INTEGRATION_DEFINITION_CAPABILITY_PREFIX.length) || null : null;
8
+ }
9
+
10
+ export {
11
+ INTEGRATION_DEFINITION_CAPABILITY_PREFIX,
12
+ integrationDefinitionCapabilityId,
13
+ integrationDefinitionIdFromCapabilityId
14
+ };
15
+ //# sourceMappingURL=chunk-RLJUNVAM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/integration-capability-id.ts"],"sourcesContent":["/**\n * Agents recommend a deployment's reviewed integration definition (Outlook\n * Mail, OneDrive, ...) with this capability id prefix; the rest is the\n * definition id, which is also its Connect provider id.\n */\nexport const INTEGRATION_DEFINITION_CAPABILITY_PREFIX = \"api:integration:\";\n\nexport function integrationDefinitionCapabilityId(definitionId: string): string {\n return `${INTEGRATION_DEFINITION_CAPABILITY_PREFIX}${definitionId}`;\n}\n\nexport function integrationDefinitionIdFromCapabilityId(capabilityId: string): string | null {\n return capabilityId.startsWith(INTEGRATION_DEFINITION_CAPABILITY_PREFIX)\n ? capabilityId.slice(INTEGRATION_DEFINITION_CAPABILITY_PREFIX.length) || null\n : null;\n}\n"],"mappings":";AAKO,IAAM,2CAA2C;AAEjD,SAAS,kCAAkC,cAA8B;AAC9E,SAAO,GAAG,wCAAwC,GAAG,YAAY;AACnE;AAEO,SAAS,wCAAwC,cAAqC;AAC3F,SAAO,aAAa,WAAW,wCAAwC,IACnE,aAAa,MAAM,yCAAyC,MAAM,KAAK,OACvE;AACN;","names":[]}
@@ -0,0 +1,213 @@
1
+ import {
2
+ ConnectionKind,
3
+ SessionTenancyVisibility
4
+ } from "./chunk-L4GUEP7K.js";
5
+ import {
6
+ nullableUuid,
7
+ positiveInteger,
8
+ string,
9
+ uuid
10
+ } from "./chunk-AQYDZUJV.js";
11
+ import {
12
+ defineSchema
13
+ } from "./chunk-56SNIMDO.js";
14
+
15
+ // src/connection-authority.ts
16
+ import { z } from "zod";
17
+ var ConnectionAuthoritySelectionSource = /* @__PURE__ */ defineSchema(
18
+ () => z.enum(["explicit_workspace", "sender"])
19
+ );
20
+ var ConnectionUseSelectionSource = /* @__PURE__ */ defineSchema(
21
+ () => z.string().min(1).max(128).regex(/^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$/u)
22
+ );
23
+ var AcceptedConnectionWork = /* @__PURE__ */ defineSchema(
24
+ () => z.discriminatedUnion("kind", [
25
+ z.object({
26
+ kind: z.literal("turn"),
27
+ turnId: uuid
28
+ }).strict(),
29
+ z.object({
30
+ kind: z.literal("scheduled_task"),
31
+ taskId: uuid,
32
+ taskAuthorityRevision: positiveInteger,
33
+ runId: uuid
34
+ }).strict()
35
+ ])
36
+ );
37
+ var ConnectionUseAuthoritySnapshot = /* @__PURE__ */ defineSchema(
38
+ () => z.object({
39
+ organizationId: uuid,
40
+ originWorkspaceId: uuid,
41
+ targetWorkspaceId: uuid,
42
+ targetSessionId: uuid,
43
+ targetSessionVisibility: SessionTenancyVisibility,
44
+ targetSessionAuthorityEpoch: positiveInteger,
45
+ acceptedWork: AcceptedConnectionWork,
46
+ connectionId: uuid,
47
+ connectionGeneration: positiveInteger,
48
+ connectionStatus: z.literal("active"),
49
+ providerDomain: z.string().min(1).max(2048),
50
+ connectionKind: ConnectionKind,
51
+ scope: z.enum(["workspace", "user"]),
52
+ ownerSubjectId: z.string().min(1).max(512).nullable(),
53
+ ownerOrganizationMembershipId: nullableUuid,
54
+ ownerMembershipAuthorizationRevision: z.number().int().positive().nullable().default(null),
55
+ authoritySource: ConnectionAuthoritySelectionSource,
56
+ selectionSources: z.array(ConnectionUseSelectionSource).min(1).max(128),
57
+ userDelegation: z.null()
58
+ }).strict().superRefine((value, context) => {
59
+ const ownedBySubject = value.scope !== "workspace";
60
+ const delegated = value.scope === "user";
61
+ if (ownedBySubject !== (value.ownerSubjectId !== null)) {
62
+ context.addIssue({
63
+ code: "custom",
64
+ path: ["ownerSubjectId"],
65
+ message: "personal connections retain an owner subject"
66
+ });
67
+ }
68
+ if (delegated !== (value.ownerOrganizationMembershipId !== null)) {
69
+ context.addIssue({
70
+ code: "custom",
71
+ path: ["ownerOrganizationMembershipId"],
72
+ message: "only user connections retain an owner membership"
73
+ });
74
+ }
75
+ if (delegated !== (value.ownerMembershipAuthorizationRevision !== null)) {
76
+ context.addIssue({
77
+ code: "custom",
78
+ path: ["ownerMembershipAuthorizationRevision"],
79
+ message: "only user connections retain an owner membership revision"
80
+ });
81
+ }
82
+ if (delegated && value.authoritySource !== "sender") {
83
+ context.addIssue({
84
+ code: "custom",
85
+ path: ["authoritySource"],
86
+ message: "user connections require authenticated sender provenance"
87
+ });
88
+ }
89
+ if (!delegated && value.authoritySource === "sender") {
90
+ context.addIssue({
91
+ code: "custom",
92
+ path: ["authoritySource"],
93
+ message: "workspace connections cannot claim sender provenance"
94
+ });
95
+ }
96
+ if (!delegated && value.originWorkspaceId !== value.targetWorkspaceId) {
97
+ context.addIssue({
98
+ code: "custom",
99
+ path: ["originWorkspaceId"],
100
+ message: "workspace connections must be owned by the target workspace"
101
+ });
102
+ }
103
+ })
104
+ );
105
+ var ConnectionUseDenialReason = /* @__PURE__ */ defineSchema(
106
+ () => z.enum([
107
+ "tenant_mismatch",
108
+ "workspace_access_inactive",
109
+ "session_inactive",
110
+ "session_identity_changed",
111
+ "session_visibility_changed",
112
+ "session_authority_epoch_changed",
113
+ "accepted_attempt_authority_required",
114
+ "accepted_snapshot_digest_changed",
115
+ "connection_missing",
116
+ "connection_identity_changed",
117
+ "connection_generation_changed",
118
+ "connection_status_inactive",
119
+ "connection_owner_changed",
120
+ "owner_membership_inactive",
121
+ "authority_missing",
122
+ "authority_identity_changed",
123
+ "authority_generation_changed",
124
+ "authority_status_inactive",
125
+ "grant_missing",
126
+ "grant_identity_changed",
127
+ "grant_generation_changed",
128
+ "grant_status_inactive",
129
+ "grant_expired",
130
+ "grant_already_consumed"
131
+ ])
132
+ );
133
+ var ConnectionUseAttributionFields = /* @__PURE__ */ defineSchema(
134
+ () => z.object({
135
+ organizationId: uuid,
136
+ workspaceId: uuid,
137
+ sessionId: uuid,
138
+ connectionId: uuid,
139
+ connectionGeneration: positiveInteger,
140
+ scope: z.enum(["workspace", "user", "legacy_user"]),
141
+ ownerSubjectId: z.string().min(1).max(512).nullable(),
142
+ authorityId: nullableUuid,
143
+ grantId: nullableUuid
144
+ }).strict()
145
+ );
146
+ function refineConnectionUseAttribution(value, context) {
147
+ const personal = value.scope !== "workspace";
148
+ for (const field of ["ownerSubjectId"]) {
149
+ if (personal !== (value[field] !== null)) {
150
+ context.addIssue({
151
+ code: "custom",
152
+ path: [field],
153
+ message: personal ? `personal attribution requires ${field}` : `workspace attribution cannot carry ${field}`
154
+ });
155
+ }
156
+ }
157
+ const owned = value.scope === "user";
158
+ for (const field of ["authorityId"]) {
159
+ if (owned !== (value[field] !== null)) {
160
+ context.addIssue({
161
+ code: "custom",
162
+ path: [field],
163
+ message: owned ? `personal attribution requires ${field}` : `non-personal attribution cannot carry ${field}`
164
+ });
165
+ }
166
+ }
167
+ if (!owned && value.grantId !== null) {
168
+ context.addIssue({
169
+ code: "custom",
170
+ path: ["grantId"],
171
+ message: "only historical personal attribution can carry a grant"
172
+ });
173
+ }
174
+ }
175
+ var ConnectionUseAttribution = /* @__PURE__ */ defineSchema(
176
+ () => ConnectionUseAttributionFields.extend({
177
+ scope: z.enum(["workspace", "user"]),
178
+ grantId: z.null()
179
+ }).superRefine(refineConnectionUseAttribution)
180
+ );
181
+ var ConnectionUseAuditFact = /* @__PURE__ */ defineSchema(
182
+ () => ConnectionUseAttributionFields.extend({
183
+ outcome: z.enum(["authorized", "denied"]),
184
+ denialReason: ConnectionUseDenialReason.nullable(),
185
+ occurredAt: string.datetime({ offset: true })
186
+ }).superRefine((value, context) => {
187
+ refineConnectionUseAttribution(value, context);
188
+ if (value.outcome === "denied" !== (value.denialReason !== null)) {
189
+ context.addIssue({
190
+ code: "custom",
191
+ path: ["denialReason"],
192
+ message: "only denied connection use carries a denial reason"
193
+ });
194
+ }
195
+ })
196
+ );
197
+ var ConnectionUseAuthorizationResult = /* @__PURE__ */ defineSchema(
198
+ () => z.discriminatedUnion("status", [
199
+ z.object({ status: z.literal("authorized"), attribution: ConnectionUseAttribution }).strict(),
200
+ z.object({ status: z.literal("denied"), reason: ConnectionUseDenialReason }).strict()
201
+ ])
202
+ );
203
+
204
+ export {
205
+ ConnectionAuthoritySelectionSource,
206
+ ConnectionUseSelectionSource,
207
+ ConnectionUseAuthoritySnapshot,
208
+ ConnectionUseDenialReason,
209
+ ConnectionUseAttribution,
210
+ ConnectionUseAuditFact,
211
+ ConnectionUseAuthorizationResult
212
+ };
213
+ //# sourceMappingURL=chunk-RR6APCBK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connection-authority.ts"],"sourcesContent":["import * as primitives from \"./primitives\";\nimport { defineSchema } from \"./define-schema\";\nimport { z } from \"zod\";\nimport { ConnectionKind, SessionTenancyVisibility } from \"./index\";\n\nexport const ConnectionAuthoritySelectionSource = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"explicit_workspace\", \"sender\"]),\n);\nexport type ConnectionAuthoritySelectionSource = z.infer<typeof ConnectionAuthoritySelectionSource>;\n\nexport const ConnectionUseSelectionSource = /* @__PURE__ */ defineSchema(() =>\n z\n .string()\n .min(1)\n .max(128)\n .regex(/^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$/u),\n);\nexport type ConnectionUseSelectionSource = z.infer<typeof ConnectionUseSelectionSource>;\n\nconst AcceptedConnectionWork = /* @__PURE__ */ defineSchema(() =>\n z.discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"turn\"),\n turnId: primitives.uuid,\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"scheduled_task\"),\n taskId: primitives.uuid,\n taskAuthorityRevision: primitives.positiveInteger,\n runId: primitives.uuid,\n })\n .strict(),\n ]),\n);\n\n/**\n * Internal, credential-free authority frozen when work is accepted. Personal\n * owner identity is retained only for live authorization and usage/audit\n * attribution; it is never part of the public delegation envelope.\n */\nexport const ConnectionUseAuthoritySnapshot = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n organizationId: primitives.uuid,\n originWorkspaceId: primitives.uuid,\n targetWorkspaceId: primitives.uuid,\n targetSessionId: primitives.uuid,\n targetSessionVisibility: SessionTenancyVisibility,\n targetSessionAuthorityEpoch: primitives.positiveInteger,\n acceptedWork: AcceptedConnectionWork,\n connectionId: primitives.uuid,\n connectionGeneration: primitives.positiveInteger,\n connectionStatus: z.literal(\"active\"),\n providerDomain: z.string().min(1).max(2048),\n connectionKind: ConnectionKind,\n scope: z.enum([\"workspace\", \"user\"]),\n ownerSubjectId: z.string().min(1).max(512).nullable(),\n ownerOrganizationMembershipId: primitives.nullableUuid,\n ownerMembershipAuthorizationRevision: z.number().int().positive().nullable().default(null),\n authoritySource: ConnectionAuthoritySelectionSource,\n selectionSources: z.array(ConnectionUseSelectionSource).min(1).max(128),\n userDelegation: z.null(),\n })\n .strict()\n .superRefine((value, context) => {\n const ownedBySubject = value.scope !== \"workspace\";\n const delegated = value.scope === \"user\";\n if (ownedBySubject !== (value.ownerSubjectId !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerSubjectId\"],\n message: \"personal connections retain an owner subject\",\n });\n }\n if (delegated !== (value.ownerOrganizationMembershipId !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerOrganizationMembershipId\"],\n message: \"only user connections retain an owner membership\",\n });\n }\n if (delegated !== (value.ownerMembershipAuthorizationRevision !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerMembershipAuthorizationRevision\"],\n message: \"only user connections retain an owner membership revision\",\n });\n }\n if (delegated && value.authoritySource !== \"sender\") {\n context.addIssue({\n code: \"custom\",\n path: [\"authoritySource\"],\n message: \"user connections require authenticated sender provenance\",\n });\n }\n if (!delegated && value.authoritySource === \"sender\") {\n context.addIssue({\n code: \"custom\",\n path: [\"authoritySource\"],\n message: \"workspace connections cannot claim sender provenance\",\n });\n }\n if (!delegated && value.originWorkspaceId !== value.targetWorkspaceId) {\n context.addIssue({\n code: \"custom\",\n path: [\"originWorkspaceId\"],\n message: \"workspace connections must be owned by the target workspace\",\n });\n }\n }),\n);\nexport type ConnectionUseAuthoritySnapshot = z.infer<typeof ConnectionUseAuthoritySnapshot>;\n\nexport const ConnectionUseDenialReason = /* @__PURE__ */ defineSchema(() =>\n z.enum([\n \"tenant_mismatch\",\n \"workspace_access_inactive\",\n \"session_inactive\",\n \"session_identity_changed\",\n \"session_visibility_changed\",\n \"session_authority_epoch_changed\",\n \"accepted_attempt_authority_required\",\n \"accepted_snapshot_digest_changed\",\n \"connection_missing\",\n \"connection_identity_changed\",\n \"connection_generation_changed\",\n \"connection_status_inactive\",\n \"connection_owner_changed\",\n \"owner_membership_inactive\",\n \"authority_missing\",\n \"authority_identity_changed\",\n \"authority_generation_changed\",\n \"authority_status_inactive\",\n \"grant_missing\",\n \"grant_identity_changed\",\n \"grant_generation_changed\",\n \"grant_status_inactive\",\n \"grant_expired\",\n \"grant_already_consumed\",\n ]),\n);\nexport type ConnectionUseDenialReason = z.infer<typeof ConnectionUseDenialReason>;\n\nconst ConnectionUseAttributionFields = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n organizationId: primitives.uuid,\n workspaceId: primitives.uuid,\n sessionId: primitives.uuid,\n connectionId: primitives.uuid,\n connectionGeneration: primitives.positiveInteger,\n scope: z.enum([\"workspace\", \"user\", \"legacy_user\"]),\n ownerSubjectId: z.string().min(1).max(512).nullable(),\n authorityId: primitives.nullableUuid,\n grantId: primitives.nullableUuid,\n })\n .strict(),\n);\n\nfunction refineConnectionUseAttribution(\n value: z.infer<typeof ConnectionUseAttributionFields>,\n context: z.RefinementCtx,\n): void {\n const personal = value.scope !== \"workspace\";\n for (const field of [\"ownerSubjectId\"] as const) {\n if (personal !== (value[field] !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [field],\n message: personal\n ? `personal attribution requires ${field}`\n : `workspace attribution cannot carry ${field}`,\n });\n }\n }\n const owned = value.scope === \"user\";\n for (const field of [\"authorityId\"] as const) {\n if (owned !== (value[field] !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [field],\n message: owned\n ? `personal attribution requires ${field}`\n : `non-personal attribution cannot carry ${field}`,\n });\n }\n }\n if (!owned && value.grantId !== null) {\n context.addIssue({\n code: \"custom\",\n path: [\"grantId\"],\n message: \"only historical personal attribution can carry a grant\",\n });\n }\n}\n\n/** Metadata-only attribution emitted after pre-use authorization. */\nexport const ConnectionUseAttribution = /* @__PURE__ */ defineSchema(() =>\n ConnectionUseAttributionFields.extend({\n scope: z.enum([\"workspace\", \"user\"]),\n grantId: z.null(),\n }).superRefine(refineConnectionUseAttribution),\n);\nexport type ConnectionUseAttribution = z.infer<typeof ConnectionUseAttribution>;\n\nexport const ConnectionUseAuditFact = /* @__PURE__ */ defineSchema(() =>\n ConnectionUseAttributionFields.extend({\n outcome: z.enum([\"authorized\", \"denied\"]),\n denialReason: ConnectionUseDenialReason.nullable(),\n occurredAt: primitives.string.datetime({ offset: true }),\n }).superRefine((value, context) => {\n refineConnectionUseAttribution(value, context);\n if ((value.outcome === \"denied\") !== (value.denialReason !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"denialReason\"],\n message: \"only denied connection use carries a denial reason\",\n });\n }\n }),\n);\nexport type ConnectionUseAuditFact = z.infer<typeof ConnectionUseAuditFact>;\n\nexport const ConnectionUseAuthorizationResult = /* @__PURE__ */ defineSchema(() =>\n z.discriminatedUnion(\"status\", [\n z.object({ status: z.literal(\"authorized\"), attribution: ConnectionUseAttribution }).strict(),\n z.object({ status: z.literal(\"denied\"), reason: ConnectionUseDenialReason }).strict(),\n ]),\n);\nexport type ConnectionUseAuthorizationResult = z.infer<typeof ConnectionUseAuthorizationResult>;\n"],"mappings":"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","names":[]}