@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-preview.ts","../src/workspace-control-event.ts"],"sourcesContent":["/**\n * Canonical bounded representation for explicit session-event previews.\n *\n * Canonical session-event payloads are stored in full. This helper derives a\n * bounded monitoring/public projection without writing that projection back\n * over canonical data. It deliberately has no server-only dependency so the\n * DB, realtime transports, SDK/React, and tests can share one wire contract.\n */\n\nimport {\n retainedOutputUnavailable,\n validateRetainedOutputEvidence,\n type RetainedOutputEvidence,\n} from \"./retained-output\";\n\nexport const SESSION_EVENT_PAYLOAD_MAX_BYTES = 64 * 1024;\n\n/**\n * Durable ceiling for one `agent.toolCall.output` event. The event is the\n * human/audit record of a tool result; model history keeps its own truncated\n * copy separately. A tool can return far more than anyone ever sees (a shell\n * command printing a 45 MB line, for example), and storing that inline made\n * every later history read load it whole. The budget comfortably exceeds the\n * model-facing tool-output truncation, so the timeline never shows less than\n * the model saw.\n */\nexport const TOOL_CALL_OUTPUT_EVENT_MAX_BYTES = 256 * 1024;\nconst TOOL_CALL_OUTPUT_EVENT_STRING_BYTES = 64 * 1024;\n\nconst TARGET_PAYLOAD_BYTES = 60 * 1024;\nconst DEFAULT_STRING_BYTES = 8 * 1024;\nconst RETRY_STRING_BYTES = 1024;\nconst DEFAULT_ARRAY_ENTRIES = 40;\nconst RETRY_ARRAY_ENTRIES = 12;\nconst DEFAULT_OBJECT_FIELDS = 80;\nconst RETRY_OBJECT_FIELDS = 32;\nconst MAX_PREVIEW_DEPTH = 12;\nconst MAX_PREVIEW_NODES = 512;\nconst MAX_MEASUREMENT_NODES = 2_048;\nconst MAX_MEASUREMENT_DEPTH = 64;\nconst MAX_DETAIL_RECORDS = 24;\nconst APPROX_BYTES_PER_TOKEN = 4;\nconst encoder = new TextEncoder();\n\nconst IDENTITY_FIELDS = new Set([\n \"id\",\n \"callId\",\n \"call_id\",\n \"name\",\n \"toolName\",\n \"type\",\n \"status\",\n \"code\",\n \"isError\",\n \"stream\",\n \"commandId\",\n \"sequence\",\n]);\n\nexport type SessionEventBoundarySurface =\n | \"durable_audit\"\n | \"database_guard\"\n | \"database_read_projection\"\n | \"http_projection\"\n | \"nats_legacy_guard\"\n | \"sse_legacy_guard\"\n | \"browser_legacy_guard\";\n\nexport type SessionEventPayloadTruncation = {\n truncated: true;\n surface: SessionEventBoundarySurface;\n reason:\n | \"payload_bytes_exceeded\"\n | \"payload_not_serializable\"\n | \"payload_measurement_bounded\"\n | \"inline_media_not_retained\"\n | \"database_guard\";\n originalBytes: number | null;\n deliveredBytes: number;\n omittedBytes: number | null;\n estimatedOriginalTokens: number | null;\n estimatedDeliveredTokens: number;\n fullEvidence: RetainedOutputEvidence;\n details: Array<{\n path: string;\n kind:\n | \"string\"\n | \"array\"\n | \"object\"\n | \"depth\"\n | \"budget\"\n | \"media\"\n | \"binary\"\n | \"unserializable\";\n originalBytes?: number;\n deliveredBytes?: number;\n omittedEntries?: number | null;\n mediaType?: string;\n }>;\n};\n\nexport type BoundSessionEventPayloadOptions = {\n surface?: SessionEventBoundarySurface;\n maxBytes?: number;\n /**\n * Per-string head+tail budget once the payload must be bounded. Defaults to\n * the compact preview budget; larger budgets keep the byte target at maxBytes.\n */\n stringBytes?: number;\n /**\n * Separately trusted durable receipt. Producer payload fields never populate\n * this slot; invalid values fail closed to not_retained.\n */\n fullEvidence?: unknown;\n};\n\nexport type SessionEventJsonMeasurement =\n | { bytes: number; reason: null }\n | {\n bytes: null;\n reason: \"payload_not_serializable\" | \"payload_measurement_bounded\";\n };\n\nexport type SessionEventMediaPreview = {\n type: \"media_preview\";\n mediaType: string;\n inlineBytes: number | null;\n fullOutputAvailable: false;\n preview: string;\n};\n\ntype PreviewState = {\n changed: boolean;\n sawMedia: boolean;\n details: SessionEventPayloadTruncation[\"details\"];\n stringBytes: number;\n arrayEntries: number;\n objectFields: number;\n remainingNodes: number;\n};\n\n/** UTF-8 bytes used by the JSON wire/storage representation. */\nexport function sessionEventJsonBytes(value: unknown): number {\n return encoder.encode(stringifyForBoundary(value)).byteLength;\n}\n\n/**\n * Inspect a prospective event value without invoking accessors, custom\n * serializers, or allocating its complete JSON representation. A null byte\n * count is explicit: the traversal stopped at the global work/depth boundary\n * or found serialization behavior that must first be normalized.\n */\nexport function measureSessionEventJson(value: unknown): SessionEventJsonMeasurement {\n return measureJsonBytes(value);\n}\n\n/** The same deliberately coarse bytes/4 token estimate used by Codex parity code. */\nexport function approximateSessionEventTokens(bytes: number): number {\n return Math.ceil(Math.max(0, bytes) / APPROX_BYTES_PER_TOKEN);\n}\n\n/** Truthful audit fact for inline media whose source bytes are not durably retained. */\nexport function sessionEventMediaPreview(\n mediaType: string,\n inlineBytes: number | null,\n): SessionEventMediaPreview {\n return {\n type: \"media_preview\",\n mediaType: mediaType || \"application/octet-stream\",\n inlineBytes:\n inlineBytes === null\n ? null\n : Math.max(0, Math.floor(Number.isFinite(inlineBytes) ? inlineBytes : 0)),\n fullOutputAvailable: false,\n preview: \"Inline media omitted from the audit timeline; source bytes were not retained.\",\n };\n}\n\n/** Parse a base64 data URL into a compact audit fact without decoding/copying its bytes. */\nexport function sessionEventMediaPreviewFromDataUrl(\n value: string,\n): SessionEventMediaPreview | null {\n const match = /^data:([^;,]+)(?:;[^,]*)?;base64,/i.exec(value);\n if (!match) return null;\n const encodedLength = Math.max(0, value.length - match[0].length);\n const padding = value.endsWith(\"==\") ? 2 : value.endsWith(\"=\") ? 1 : 0;\n return sessionEventMediaPreview(\n match[1] ?? \"application/octet-stream\",\n Math.max(0, Math.floor((encodedLength * 3) / 4) - padding),\n );\n}\n\n/** Read explicit truncation metadata from a bounded object payload. */\nexport function sessionEventPayloadTruncation(\n payload: unknown,\n): SessionEventPayloadTruncation | null {\n if (!isPlainRecord(payload)) return null;\n const value = payload.truncation;\n if (!isPlainRecord(value) || value.truncated !== true) return null;\n return value as SessionEventPayloadTruncation;\n}\n\n/**\n * Return a byte-bounded preview payload. Unchanged ordinary payloads retain their\n * reference. Oversized strings/containers get deterministic head+tail previews;\n * inline images/binary values become metadata because `session_events` does not\n * durably retain their source bytes as independently retrievable evidence.\n */\nexport function boundSessionEventPayload<T>(\n payload: T,\n options: BoundSessionEventPayloadOptions = {},\n): T {\n const maxBytes = Math.max(1024, Math.floor(options.maxBytes ?? SESSION_EVENT_PAYLOAD_MAX_BYTES));\n const surface = options.surface ?? \"durable_audit\";\n const customStringBytes =\n options.stringBytes === undefined\n ? null\n : Math.max(RETRY_STRING_BYTES, Math.floor(options.stringBytes));\n const stringBytes = customStringBytes ?? DEFAULT_STRING_BYTES;\n const retryStringBytes =\n customStringBytes === null\n ? RETRY_STRING_BYTES\n : Math.max(RETRY_STRING_BYTES, Math.floor(customStringBytes / 8));\n const targetBytes =\n customStringBytes === null ? Math.min(maxBytes, TARGET_PAYLOAD_BYTES) : maxBytes;\n const fullEvidence =\n validateRetainedOutputEvidence(options.fullEvidence) ?? retainedOutputUnavailable();\n const originalMeasurement = measureJsonBytes(payload);\n const originalBytes = originalMeasurement.bytes;\n\n let state = previewState(stringBytes, DEFAULT_ARRAY_ENTRIES, DEFAULT_OBJECT_FIELDS);\n let preview = previewValue(payload, state, \"$\", 0);\n if (!state.changed && originalBytes !== null && originalBytes <= maxBytes) {\n return payload;\n }\n\n let reason = payloadTruncationReason(originalMeasurement, state);\n let bounded = attachTruncation(\n preview,\n boundaryMetadata(surface, reason, originalBytes, state, fullEvidence),\n );\n\n if (sessionEventJsonBytes(bounded) > targetBytes) {\n state = previewState(retryStringBytes, RETRY_ARRAY_ENTRIES, RETRY_OBJECT_FIELDS);\n preview = previewValue(payload, state, \"$\", 0);\n reason = payloadTruncationReason(originalMeasurement, state);\n bounded = attachTruncation(\n preview,\n boundaryMetadata(surface, reason, originalBytes, state, fullEvidence),\n );\n }\n\n if (sessionEventJsonBytes(bounded) > maxBytes) {\n const identity = identityPreview(payload);\n state.changed = true;\n recordDetail(state, {\n path: \"$\",\n kind: \"object\",\n ...(originalBytes === null ? {} : { originalBytes }),\n });\n bounded = attachTruncation(\n {\n ...identity,\n preview: \"[event payload omitted: bounded audit preview exceeded the storage envelope]\",\n },\n boundaryMetadata(surface, reason, originalBytes, state, fullEvidence),\n );\n }\n\n settleDeliveredSizes(bounded, maxBytes);\n return bounded as T;\n}\n\n/**\n * Write-time bound for durable session events. Only tool-call output has an\n * unbounded producer; it is kept intact up to TOOL_CALL_OUTPUT_EVENT_MAX_BYTES\n * and otherwise stored as an explicit head+tail preview whose `truncation`\n * records the original size. Every other event type is returned unchanged.\n */\nexport function boundSessionEventPayloadForWrite<T>(type: string, payload: T): T {\n if (type !== \"agent.toolCall.output\") return payload;\n let bytes: number | null;\n try {\n bytes = sessionEventJsonBytes(payload);\n } catch {\n bytes = null;\n }\n if (bytes !== null && bytes <= TOOL_CALL_OUTPUT_EVENT_MAX_BYTES) return payload;\n return boundSessionEventPayload(payload, {\n surface: \"durable_audit\",\n maxBytes: TOOL_CALL_OUTPUT_EVENT_MAX_BYTES,\n stringBytes: TOOL_CALL_OUTPUT_EVENT_STRING_BYTES,\n });\n}\n\nfunction previewState(\n stringBytes: number,\n arrayEntries: number,\n objectFields: number,\n): PreviewState {\n return {\n changed: false,\n sawMedia: false,\n details: [],\n stringBytes,\n arrayEntries,\n objectFields,\n remainingNodes: MAX_PREVIEW_NODES,\n };\n}\n\nfunction payloadTruncationReason(\n measurement: JsonMeasurement,\n state: PreviewState,\n): SessionEventPayloadTruncation[\"reason\"] {\n if (state.sawMedia) return \"inline_media_not_retained\";\n return measurement.bytes === null ? measurement.reason : \"payload_bytes_exceeded\";\n}\n\nfunction previewValue(value: unknown, state: PreviewState, path: string, depth: number): unknown {\n if (state.remainingNodes <= 0) {\n state.changed = true;\n recordDetail(state, { path, kind: \"budget\" });\n return \"[nested value omitted at audit preview traversal boundary]\";\n }\n state.remainingNodes -= 1;\n if (typeof value === \"string\") {\n const media = inlineMediaFact(value);\n if (media) {\n state.changed = true;\n state.sawMedia = true;\n recordDetail(state, {\n path,\n kind: \"media\",\n originalBytes: utf8Bytes(value),\n deliveredBytes: sessionEventJsonBytes(media),\n mediaType: media.mediaType,\n });\n return media;\n }\n const originalBytes = utf8Bytes(value);\n if (originalBytes <= state.stringBytes) return value;\n state.changed = true;\n const delivered = truncateUtf8Middle(value, state.stringBytes, originalBytes);\n recordDetail(state, {\n path,\n kind: \"string\",\n originalBytes,\n deliveredBytes: utf8Bytes(delivered),\n });\n return delivered;\n }\n if (typeof value === \"bigint\" || typeof value === \"function\" || typeof value === \"symbol\") {\n state.changed = true;\n recordDetail(state, { path, kind: \"unserializable\" });\n return `[${typeof value} value omitted at audit serialization boundary]`;\n }\n if (value === null || typeof value !== \"object\") return value;\n\n const binary = binaryFact(value);\n if (binary) {\n state.changed = true;\n recordDetail(state, {\n path,\n kind: \"binary\",\n originalBytes: binary.originalBytes,\n deliveredBytes: sessionEventJsonBytes(binary.preview),\n });\n return binary.preview;\n }\n\n if (depth >= MAX_PREVIEW_DEPTH) {\n state.changed = true;\n recordDetail(state, { path, kind: \"depth\" });\n return \"[nested value omitted at audit preview depth boundary]\";\n }\n\n if (Array.isArray(value)) {\n const keep = Math.max(2, state.arrayEntries);\n if (value.length <= keep) {\n return Array.from({ length: value.length }, (_, index) =>\n previewArrayEntry(value, index, state, path, depth),\n );\n }\n state.changed = true;\n const head = Math.ceil(keep / 2);\n const tail = Math.floor(keep / 2);\n const omitted = value.length - head - tail;\n recordDetail(state, { path, kind: \"array\", omittedEntries: omitted });\n return [\n ...Array.from({ length: head }, (_, index) =>\n previewArrayEntry(value, index, state, path, depth),\n ),\n { omittedEntries: omitted, preview: \"[middle array entries omitted]\" },\n ...Array.from({ length: tail }, (_, index) =>\n previewArrayEntry(value, value.length - tail + index, state, path, depth),\n ),\n ];\n }\n\n if (value instanceof Date) {\n if (!hasCanonicalDateSerialization(value)) {\n state.changed = true;\n recordDetail(state, { path, kind: \"unserializable\" });\n return \"[Date value with custom serialization omitted at audit boundary]\";\n }\n try {\n const epoch = Date.prototype.getTime.call(value);\n return Number.isFinite(epoch) ? Date.prototype.toISOString.call(value) : null;\n } catch {\n state.changed = true;\n recordDetail(state, { path, kind: \"unserializable\" });\n return \"[Date value omitted at audit serialization boundary]\";\n }\n }\n\n const record = value as Record<string, unknown>;\n const { entries, omitted, accessorKeys } = selectObjectEntries(record, state.objectFields);\n for (const key of accessorKeys) {\n state.changed = true;\n recordDetail(state, {\n path: `${path}.${key}`,\n kind: \"unserializable\",\n });\n }\n if (omitted) {\n state.changed = true;\n recordDetail(state, {\n path,\n kind: \"object\",\n // Counting every remaining field would defeat the traversal bound. `null`\n // is deliberate: at least one field was omitted, but its exact count is\n // unknown because the source was not fully enumerated.\n omittedEntries: null,\n });\n }\n const out: Record<string, unknown> = {};\n for (const [key, entry] of entries) {\n out[key] = previewValue(entry, state, `${path}.${key}`, depth + 1);\n }\n if (omitted) {\n out.omittedFields = \"additional fields omitted; exact count not measured\";\n }\n return out;\n}\n\nfunction previewArrayEntry(\n value: unknown[],\n index: number,\n state: PreviewState,\n path: string,\n depth: number,\n): unknown {\n let descriptor: PropertyDescriptor | undefined;\n try {\n descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n } catch {\n state.changed = true;\n recordDetail(state, { path: `${path}[${index}]`, kind: \"unserializable\" });\n return \"[array element omitted at audit serialization boundary]\";\n }\n if (descriptor && !(\"value\" in descriptor)) {\n state.changed = true;\n recordDetail(state, { path: `${path}[${index}]`, kind: \"unserializable\" });\n return \"[array accessor value omitted at audit serialization boundary]\";\n }\n return previewValue(\n descriptor && \"value\" in descriptor ? descriptor.value : undefined,\n state,\n `${path}[${index}]`,\n depth + 1,\n );\n}\n\nfunction selectObjectEntries(\n record: Record<string, unknown>,\n maxFields: number,\n): {\n entries: Array<[string, unknown]>;\n omitted: boolean;\n accessorKeys: string[];\n} {\n const entries: Array<[string, unknown]> = [];\n const selected = new Set<string>();\n const accessorKeys: string[] = [];\n const select = (key: string): boolean => {\n const descriptor = Object.getOwnPropertyDescriptor(record, key);\n if (!descriptor?.enumerable) return false;\n selected.add(key);\n if (\"value\" in descriptor) {\n entries.push([key, descriptor.value]);\n } else {\n entries.push([key, \"[accessor value omitted at audit serialization boundary]\"]);\n accessorKeys.push(key);\n }\n return true;\n };\n try {\n for (const key of IDENTITY_FIELDS) {\n if (entries.length >= maxFields) break;\n select(key);\n }\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key) || selected.has(key)) continue;\n if (entries.length >= maxFields) {\n return { entries, omitted: true, accessorKeys };\n }\n select(key);\n }\n } catch {\n return { entries, omitted: true, accessorKeys };\n }\n return { entries, omitted: false, accessorKeys };\n}\n\nfunction attachTruncation(\n preview: unknown,\n truncation: SessionEventPayloadTruncation,\n): Record<string, unknown> {\n if (isPlainRecord(preview)) {\n // `truncation` is reserved boundary metadata. A producer-supplied value is\n // intentionally replaced when the boundary actually omits content.\n return { ...preview, truncation };\n }\n return { value: preview, truncation };\n}\n\nfunction boundaryMetadata(\n surface: SessionEventBoundarySurface,\n reason: SessionEventPayloadTruncation[\"reason\"],\n originalBytes: number | null,\n state: PreviewState,\n fullEvidence: RetainedOutputEvidence,\n): SessionEventPayloadTruncation {\n return {\n truncated: true,\n surface,\n reason,\n originalBytes,\n deliveredBytes: 0,\n omittedBytes: originalBytes,\n estimatedOriginalTokens:\n originalBytes === null ? null : approximateSessionEventTokens(originalBytes),\n estimatedDeliveredTokens: 0,\n fullEvidence,\n details: state.details,\n };\n}\n\nfunction settleDeliveredSizes(payload: Record<string, unknown>, maxBytes: number): void {\n const truncation = payload.truncation as SessionEventPayloadTruncation;\n convergeDeliveredSizes(payload, truncation);\n // This should only be reachable when a caller supplies an unusually tiny\n // custom maxBytes. Preserve explicit metadata over an accidental overshoot.\n if (sessionEventJsonBytes(payload) > maxBytes) {\n payload.preview = \"[event payload omitted at audit byte boundary]\";\n for (const key of Object.keys(payload)) {\n if (key !== \"preview\" && key !== \"truncation\" && IDENTITY_FIELDS.has(key) === false) {\n delete payload[key];\n }\n }\n truncation.details = truncation.details.slice(0, 4);\n convergeDeliveredSizes(payload, truncation);\n }\n}\n\nfunction convergeDeliveredSizes(\n payload: Record<string, unknown>,\n truncation: SessionEventPayloadTruncation,\n): void {\n for (let attempt = 0; attempt < 16; attempt += 1) {\n const deliveredBytes = sessionEventJsonBytes(payload);\n const omittedBytes =\n truncation.originalBytes === null\n ? null\n : Math.max(0, truncation.originalBytes - deliveredBytes);\n const estimatedDeliveredTokens = approximateSessionEventTokens(deliveredBytes);\n if (\n truncation.deliveredBytes === deliveredBytes &&\n truncation.omittedBytes === omittedBytes &&\n truncation.estimatedDeliveredTokens === estimatedDeliveredTokens\n ) {\n return;\n }\n truncation.deliveredBytes = deliveredBytes;\n truncation.omittedBytes = omittedBytes;\n truncation.estimatedDeliveredTokens = estimatedDeliveredTokens;\n }\n throw new RangeError(\"Session event byte accounting did not converge\");\n}\n\nfunction recordDetail(\n state: PreviewState,\n detail: SessionEventPayloadTruncation[\"details\"][number],\n): void {\n if (state.details.length < MAX_DETAIL_RECORDS) state.details.push(detail);\n}\n\nfunction identityPreview(value: unknown): Record<string, unknown> {\n if (!isPlainRecord(value)) return {};\n const out: Record<string, unknown> = {};\n for (const key of IDENTITY_FIELDS) {\n let field: unknown;\n try {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor?.enumerable || !(\"value\" in descriptor)) continue;\n field = descriptor.value;\n } catch {\n continue;\n }\n if (typeof field === \"string\") {\n out[key] = truncateUtf8Middle(field, 256, utf8Bytes(field));\n } else if (typeof field === \"number\" || typeof field === \"boolean\" || field === null) {\n out[key] = field;\n }\n }\n return out;\n}\n\nfunction inlineMediaFact(value: string): SessionEventMediaPreview | null {\n return sessionEventMediaPreviewFromDataUrl(value);\n}\n\nfunction binaryFact(value: object): {\n originalBytes: number;\n preview: {\n type: \"binary_preview\";\n byteLength: number;\n fullOutputAvailable: false;\n preview: string;\n };\n} | null {\n if (ArrayBuffer.isView(value)) {\n return {\n originalBytes: value.byteLength,\n preview: {\n type: \"binary_preview\",\n byteLength: value.byteLength,\n fullOutputAvailable: false,\n preview: \"Inline binary value omitted from the audit timeline; bytes were not retained.\",\n },\n };\n }\n if (value instanceof ArrayBuffer) {\n return {\n originalBytes: value.byteLength,\n preview: {\n type: \"binary_preview\",\n byteLength: value.byteLength,\n fullOutputAvailable: false,\n preview: \"Inline binary value omitted from the audit timeline; bytes were not retained.\",\n },\n };\n }\n return null;\n}\n\nfunction truncateUtf8Middle(\n value: string,\n maxBytes: number,\n knownBytes = utf8Bytes(value),\n): string {\n if (knownBytes <= maxBytes) return value;\n let omittedBytes = Math.max(0, knownBytes - maxBytes);\n for (let attempt = 0; attempt < 4; attempt += 1) {\n const marker = `…[${omittedBytes} bytes omitted]…`;\n const contentBudget = Math.max(0, maxBytes - utf8Bytes(marker));\n if (contentBudget === 0) return marker;\n const left = utf8Prefix(value, Math.floor(contentBudget / 2));\n const right = utf8Suffix(value, contentBudget - left.bytes);\n const exactOmittedBytes = Math.max(0, knownBytes - left.bytes - right.bytes);\n if (exactOmittedBytes === omittedBytes) {\n return `${value.slice(0, left.end)}${marker}${value.slice(right.start)}`;\n }\n omittedBytes = exactOmittedBytes;\n }\n\n const marker = `…[${omittedBytes} bytes omitted]…`;\n const contentBudget = Math.max(0, maxBytes - utf8Bytes(marker));\n const left = utf8Prefix(value, Math.floor(contentBudget / 2));\n const right = utf8Suffix(value, contentBudget - left.bytes);\n return `${value.slice(0, left.end)}${marker}${value.slice(right.start)}`;\n}\n\nfunction utf8Prefix(value: string, maxBytes: number): { end: number; bytes: number } {\n let end = 0;\n let bytes = 0;\n while (end < value.length) {\n const unit = utf8UnitAt(value, end);\n if (bytes + unit.bytes > maxBytes) break;\n bytes += unit.bytes;\n end += unit.codeUnits;\n }\n return { end, bytes };\n}\n\nfunction utf8Suffix(value: string, maxBytes: number): { start: number; bytes: number } {\n let start = value.length;\n let bytes = 0;\n while (start > 0) {\n const unit = utf8UnitBefore(value, start);\n if (bytes + unit.bytes > maxBytes) break;\n bytes += unit.bytes;\n start -= unit.codeUnits;\n }\n return { start, bytes };\n}\n\nfunction utf8UnitAt(value: string, index: number): { codeUnits: number; bytes: number } {\n const code = value.charCodeAt(index);\n if (code <= 0x7f) return { codeUnits: 1, bytes: 1 };\n if (code <= 0x7ff) return { codeUnits: 1, bytes: 2 };\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = index + 1 < value.length ? value.charCodeAt(index + 1) : 0;\n if (next >= 0xdc00 && next <= 0xdfff) {\n return { codeUnits: 2, bytes: 4 };\n }\n }\n return { codeUnits: 1, bytes: 3 };\n}\n\nfunction utf8UnitBefore(value: string, end: number): { codeUnits: number; bytes: number } {\n const code = value.charCodeAt(end - 1);\n if (code >= 0xdc00 && code <= 0xdfff && end >= 2) {\n const previous = value.charCodeAt(end - 2);\n if (previous >= 0xd800 && previous <= 0xdbff) {\n return { codeUnits: 2, bytes: 4 };\n }\n }\n if (code <= 0x7f) return { codeUnits: 1, bytes: 1 };\n if (code <= 0x7ff) return { codeUnits: 1, bytes: 2 };\n return { codeUnits: 1, bytes: 3 };\n}\n\nfunction utf8Bytes(value: string): number {\n let bytes = 0;\n for (let index = 0; index < value.length;) {\n const unit = utf8UnitAt(value, index);\n bytes += unit.bytes;\n index += unit.codeUnits;\n }\n return bytes;\n}\n\n/**\n * Count the JSON wire bytes without first allocating the complete JSON string.\n * A global node budget prevents an adversarial broad graph from moving the\n * durable 64 KiB bound into an unbounded measurement pass. `null` means exact\n * source size is unknown; callers expose that truth instead of measuring a\n * placeholder or claiming a lower bound is exact.\n */\ntype JsonMeasurement = SessionEventJsonMeasurement;\n\nfunction measureJsonBytes(value: unknown): JsonMeasurement {\n const state: JsonMeasurementState = {\n remainingNodes: MAX_MEASUREMENT_NODES,\n seen: new WeakSet<object>(),\n failureReason: null,\n };\n try {\n const bytes = measureJsonValue(value, state, \"top\", 0);\n return bytes === null\n ? {\n bytes: null,\n reason: state.failureReason ?? \"payload_measurement_bounded\",\n }\n : { bytes, reason: null };\n } catch {\n return { bytes: null, reason: \"payload_measurement_bounded\" };\n }\n}\n\ntype JsonMeasurementState = {\n remainingNodes: number;\n seen: WeakSet<object>;\n failureReason: \"payload_not_serializable\" | \"payload_measurement_bounded\" | null;\n};\n\nfunction measureJsonValue(\n value: unknown,\n state: JsonMeasurementState,\n position: \"top\" | \"array\" | \"object\",\n depth: number,\n): number | null {\n if (state.remainingNodes <= 0 || depth > MAX_MEASUREMENT_DEPTH) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n state.remainingNodes -= 1;\n if (value === null) return 4;\n if (typeof value === \"string\") return jsonStringBytes(value);\n if (typeof value === \"boolean\") return value ? 4 : 5;\n if (typeof value === \"number\") {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? null : serialized.length;\n }\n if (typeof value === \"undefined\" || typeof value === \"function\" || typeof value === \"symbol\") {\n return position === \"array\" ? 4 : failJsonMeasurement(state, \"payload_not_serializable\");\n }\n if (typeof value === \"bigint\") {\n return failJsonMeasurement(state, \"payload_not_serializable\");\n }\n if (typeof value !== \"object\") {\n return failJsonMeasurement(state, \"payload_not_serializable\");\n }\n if (value instanceof Date) {\n if (!hasCanonicalDateSerialization(value)) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n try {\n const epoch = Date.prototype.getTime.call(value);\n return Number.isFinite(epoch) ? jsonStringBytes(Date.prototype.toISOString.call(value)) : 4;\n } catch {\n return failJsonMeasurement(state, \"payload_not_serializable\");\n }\n }\n if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n if (state.seen.has(value)) {\n return failJsonMeasurement(state, \"payload_not_serializable\");\n }\n state.seen.add(value);\n try {\n if (Array.isArray(value)) {\n if (Object.getPrototypeOf(value) !== Array.prototype) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n const toJson = Object.getOwnPropertyDescriptor(value, \"toJSON\");\n if (toJson && (\"get\" in toJson || typeof toJson.value === \"function\")) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n if (value.length > state.remainingNodes) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n let bytes = 2;\n for (let index = 0; index < value.length; index += 1) {\n if (index > 0) bytes += 1;\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (descriptor && !(\"value\" in descriptor)) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n const entry = descriptor && \"value\" in descriptor ? descriptor.value : undefined;\n const measured = measureJsonValue(entry, state, \"array\", depth + 1);\n if (measured === null) return null;\n bytes += measured;\n }\n return bytes;\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n const toJson = Object.getOwnPropertyDescriptor(value, \"toJSON\");\n if (toJson && (\"get\" in toJson || typeof toJson.value === \"function\")) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n let bytes = 2;\n let fields = 0;\n try {\n for (const key in value as Record<string, unknown>) {\n if (!Object.prototype.hasOwnProperty.call(value, key)) continue;\n if (state.remainingNodes <= 0) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n // A property consumes traversal work even when JSON.stringify would\n // omit its value. Without this decrement a broad object containing\n // only undefined/functions/symbols bypasses the global node budget.\n state.remainingNodes -= 1;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor)) {\n return failJsonMeasurement(state, \"payload_measurement_bounded\");\n }\n const entry = descriptor.value;\n if (\n typeof entry === \"undefined\" ||\n typeof entry === \"function\" ||\n typeof entry === \"symbol\"\n ) {\n continue;\n }\n const measured = measureJsonValue(entry, state, \"object\", depth + 1);\n if (measured === null) return null;\n if (fields > 0) bytes += 1;\n bytes += jsonStringBytes(key) + 1 + measured;\n fields += 1;\n }\n } catch {\n return null;\n }\n return bytes;\n } finally {\n state.seen.delete(value);\n }\n}\n\nfunction hasCanonicalDateSerialization(value: Date): boolean {\n try {\n if (Object.getPrototypeOf(value) !== Date.prototype) return false;\n // JSON.stringify performs an ordinary property lookup for toJSON. Any own\n // shadow (data or accessor) changes that behavior and must not be invoked.\n return Object.getOwnPropertyDescriptor(value, \"toJSON\") === undefined;\n } catch {\n return false;\n }\n}\n\nfunction failJsonMeasurement(\n state: JsonMeasurementState,\n reason: Exclude<JsonMeasurement, { bytes: number }>[\"reason\"],\n): null {\n state.failureReason ??= reason;\n return null;\n}\n\nfunction jsonStringBytes(value: string): number {\n let bytes = 2;\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (\n code === 0x22 ||\n code === 0x5c ||\n code === 0x08 ||\n code === 0x09 ||\n code === 0x0a ||\n code === 0x0c ||\n code === 0x0d\n ) {\n bytes += 2;\n } else if (code <= 0x1f) {\n bytes += 6;\n } else if (code <= 0x7f) {\n bytes += 1;\n } else if (code <= 0x7ff) {\n bytes += 2;\n } else if (code >= 0xd800 && code <= 0xdbff) {\n const next = index + 1 < value.length ? value.charCodeAt(index + 1) : 0;\n if (next >= 0xdc00 && next <= 0xdfff) {\n bytes += 4;\n index += 1;\n } else {\n // JSON.stringify escapes lone surrogates as six ASCII bytes.\n bytes += 6;\n }\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n bytes += 6;\n } else {\n bytes += 3;\n }\n }\n return bytes;\n}\n\nfunction serializeForBoundary(value: unknown): {\n value: string;\n serializable: boolean;\n} {\n try {\n const serialized = JSON.stringify(value);\n return {\n value: serialized === undefined ? \"null\" : serialized,\n serializable: serialized !== undefined,\n };\n } catch {\n return {\n value: JSON.stringify(\"[unserializable event payload omitted]\"),\n serializable: false,\n };\n }\n}\n\nfunction stringifyForBoundary(value: unknown): string {\n return serializeForBoundary(value).value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","import type { WorkspaceControlEvent, WorkspaceControlEventTruncation } from \"./index\";\nimport { sessionEventJsonBytes } from \"./event-preview\";\nexport const WORKSPACE_CONTROL_REASON_MAX_BYTES = 8 * 1024;\n\nexport const WORKSPACE_CONTROL_ACTOR_MAX_BYTES = 1024;\n\nexport const WORKSPACE_CONTROL_EVENT_MAX_BYTES = 16 * 1024;\n\nexport type WorkspaceControlBoundarySurface = WorkspaceControlEventTruncation[\"surface\"];\n\nexport type BoundWorkspaceControlEventOptions = {\n surface?: WorkspaceControlBoundarySurface;\n reasonOriginalBytes?: number | null;\n actorOriginalBytes?: number | null;\n};\n\n/** UTF-8 byte count used by workspace-control storage and transport guards. */\nexport function workspaceControlUtf8Bytes(value: string): number {\n return new TextEncoder().encode(value).byteLength;\n}\n\n/**\n * Canonical bounded invalidation event. The event is not a full evidence store:\n * when a producer or legacy row exceeds a field cap, the retained head carries\n * a visible marker and structured exact byte-loss facts.\n */\nexport function boundWorkspaceControlEvent(\n event: WorkspaceControlEvent,\n options: BoundWorkspaceControlEventOptions = {},\n): WorkspaceControlEvent {\n const existingFields = new Map(\n (event.truncation?.fields ?? []).map((field) => [field.field, field] as const),\n );\n const reason =\n event.reason === null\n ? null\n : boundWorkspaceControlText(event.reason, WORKSPACE_CONTROL_REASON_MAX_BYTES);\n const actor = boundWorkspaceControlText(event.actor, WORKSPACE_CONTROL_ACTOR_MAX_BYTES);\n const reasonBytes = reason === null ? 0 : workspaceControlUtf8Bytes(reason);\n const actorBytes = workspaceControlUtf8Bytes(actor);\n const reasonOriginalBytes =\n event.reason === null\n ? null\n : Math.max(\n workspaceControlUtf8Bytes(event.reason),\n normalizedWorkspaceControlOriginalBytes(options.reasonOriginalBytes),\n existingFields.get(\"reason\")?.originalBytes ?? 0,\n );\n const actorOriginalBytes = Math.max(\n workspaceControlUtf8Bytes(event.actor),\n normalizedWorkspaceControlOriginalBytes(options.actorOriginalBytes),\n existingFields.get(\"actor\")?.originalBytes ?? 0,\n );\n const fields: WorkspaceControlEventTruncation[\"fields\"] = [];\n if (reasonOriginalBytes !== null && reasonOriginalBytes > reasonBytes) {\n fields.push({\n field: \"reason\",\n originalBytes: reasonOriginalBytes,\n deliveredBytes: reasonBytes,\n omittedBytes: reasonOriginalBytes - reasonBytes,\n });\n }\n if (actorOriginalBytes > actorBytes) {\n fields.push({\n field: \"actor\",\n originalBytes: actorOriginalBytes,\n deliveredBytes: actorBytes,\n omittedBytes: actorOriginalBytes - actorBytes,\n });\n }\n if (fields.length === 0 && event.truncation == null) {\n if (sessionEventJsonBytes(event) > WORKSPACE_CONTROL_EVENT_MAX_BYTES) {\n throw new RangeError(\"Workspace control event exceeds its bounded envelope\");\n }\n return event;\n }\n\n const truncation: WorkspaceControlEventTruncation = {\n truncated: true,\n surface: event.truncation?.surface ?? options.surface ?? \"durable_control\",\n deliveredBytes: 0,\n fields,\n fullEvidence: { available: false, reason: \"not_retained\" },\n };\n const bounded: WorkspaceControlEvent = {\n ...event,\n reason,\n actor,\n truncation,\n };\n settleWorkspaceControlDeliveredBytes(bounded, truncation);\n const deliveredBytes = sessionEventJsonBytes(bounded);\n if (deliveredBytes > WORKSPACE_CONTROL_EVENT_MAX_BYTES) {\n throw new RangeError(\n `Bounded workspace control event exceeds its final envelope (${deliveredBytes} > ${WORKSPACE_CONTROL_EVENT_MAX_BYTES} bytes)`,\n );\n }\n return bounded;\n}\n\nfunction boundWorkspaceControlText(value: string, maxBytes: number): string {\n const encoder = new TextEncoder();\n const decoder = new TextDecoder();\n const bytes = encoder.encode(value);\n if (bytes.byteLength <= maxBytes) return value;\n const marker = \"…[truncated]\";\n const prefixBudget = Math.max(0, maxBytes - encoder.encode(marker).byteLength);\n let prefixEnd = Math.min(prefixBudget, bytes.byteLength);\n while (prefixEnd > 0 && prefixEnd < bytes.byteLength && (bytes[prefixEnd]! & 0xc0) === 0x80) {\n prefixEnd -= 1;\n }\n return `${decoder.decode(bytes.subarray(0, prefixEnd))}${marker}`;\n}\n\nfunction normalizedWorkspaceControlOriginalBytes(value: number | null | undefined): number {\n return value === null || value === undefined || !Number.isFinite(value)\n ? 0\n : Math.max(0, Math.floor(value));\n}\n\nfunction settleWorkspaceControlDeliveredBytes(\n event: WorkspaceControlEvent,\n truncation: WorkspaceControlEventTruncation,\n): void {\n for (let attempt = 0; attempt < 16; attempt += 1) {\n const deliveredBytes = sessionEventJsonBytes(event);\n if (truncation.deliveredBytes === deliveredBytes) return;\n truncation.deliveredBytes = deliveredBytes;\n }\n const deliveredBytes = sessionEventJsonBytes(event);\n if (truncation.deliveredBytes !== deliveredBytes) {\n throw new RangeError(\"Workspace control event byte accounting did not converge\");\n }\n}\n"],"mappings":"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","names":["omitted","marker","contentBudget","left","right","toJson","bytes","encoder","deliveredBytes"]}
@@ -0,0 +1,9 @@
1
+ // src/define-schema.ts
2
+ function defineSchema(factory) {
3
+ return factory();
4
+ }
5
+
6
+ export {
7
+ defineSchema
8
+ };
9
+ //# sourceMappingURL=chunk-56SNIMDO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/define-schema.ts"],"sourcesContent":["/**\n * Construct a schema eagerly, but give bundlers one removable boundary around\n * the whole initializer (including nested schemas and chained builders).\n * Annotate calls with @__PURE__ only when the factory has no effects beyond\n * constructing its returned schema. This is not lazy validation: used schemas\n * are created once, in the same module evaluation order as ordinary constants.\n */\nexport function defineSchema<Schema>(factory: () => Schema): Schema {\n return factory();\n}\n"],"mappings":";AAOO,SAAS,aAAqB,SAA+B;AAClE,SAAO,QAAQ;AACjB;","names":[]}
@@ -0,0 +1,101 @@
1
+ import {
2
+ boolean,
3
+ nonnegativeInteger,
4
+ string,
5
+ uuid
6
+ } from "./chunk-AQYDZUJV.js";
7
+
8
+ // src/session-usage-limits.ts
9
+ import { z } from "zod";
10
+ var SESSION_USAGE_LIMIT_BASIS = "model_api_equivalent_v1";
11
+ var SessionUsageLimitBasis = z.literal(SESSION_USAGE_LIMIT_BASIS);
12
+ var SESSION_USAGE_LIMIT_MICROS_PER_DOLLAR = 1e6;
13
+ var SESSION_USAGE_LIMIT_MAX_MICROS = 1e7 * SESSION_USAGE_LIMIT_MICROS_PER_DOLLAR;
14
+ var SessionUsageLimitMicros = nonnegativeInteger.safe().max(SESSION_USAGE_LIMIT_MAX_MICROS);
15
+ var UsageMicros = nonnegativeInteger.safe();
16
+ var Count = nonnegativeInteger.safe();
17
+ var Version = nonnegativeInteger.safe();
18
+ var OperationId = z.string().min(1).max(256).refine(
19
+ (value) => value.trim().length > 0 && !value.includes("\0") && !/[\uD800-\uDFFF]/u.test(value) && new TextEncoder().encode(value).byteLength <= 256
20
+ );
21
+ var SessionUsageLimitStatus = z.enum([
22
+ "unlimited",
23
+ "within",
24
+ "reached",
25
+ "preparing",
26
+ "unavailable"
27
+ ]);
28
+ var SessionUsageLimitHistory = z.enum(["complete", "legacy_partial", "preparing"]);
29
+ var SessionUsageLimit = z.object({
30
+ basis: SessionUsageLimitBasis,
31
+ /** The task root whose limit applies. Equal to the session id for a root. */
32
+ rootSessionId: uuid,
33
+ /** True when this projection was read through a descendant: edit the root's limit instead. */
34
+ inherited: boolean,
35
+ status: SessionUsageLimitStatus,
36
+ /** Configured limit; null means no limit. Meaningless while `status` is `unavailable`. */
37
+ limitMicros: SessionUsageLimitMicros.nullable(),
38
+ /**
39
+ * Recorded known (priced or known-free) usage of the whole task tree, in USD
40
+ * micros. Null while `preparing` or `unavailable`: never render it as $0.
41
+ * May exceed `limitMicros`.
42
+ */
43
+ usedMicros: UsageMicros.nullable(),
44
+ /** Configuration version for compare-and-set writes. Survives clearing. */
45
+ version: Version,
46
+ /** Monotonic usage revision; increases whenever a usage receipt changes the total or coverage. */
47
+ usageRevision: Version,
48
+ history: SessionUsageLimitHistory,
49
+ /** `partial` when any usage has unknown cost or history is legacy/preparing: show "at least". */
50
+ coverage: z.enum(["complete", "partial"]),
51
+ pricedCalls: Count,
52
+ /** Responses with a known price of zero; they count as zero, unlike unpriced usage. */
53
+ freeCalls: Count,
54
+ /** Responses whose cost is unknown; they are excluded from `usedMicros`. */
55
+ unpricedCalls: Count,
56
+ updatedAt: string.datetime({ offset: true }).nullable()
57
+ }).strict();
58
+ var SetSessionUsageLimitRequest = z.object({
59
+ limitMicros: SessionUsageLimitMicros.nullable(),
60
+ expectedVersion: Version,
61
+ operationId: OperationId
62
+ }).strict();
63
+ var SessionUsageLimitReachedRefusal = z.object({
64
+ code: z.literal("session_usage_limit_reached"),
65
+ basis: SessionUsageLimitBasis,
66
+ rootSessionId: uuid,
67
+ limitMicros: SessionUsageLimitMicros,
68
+ usedMicros: UsageMicros,
69
+ message: z.string().max(1024)
70
+ }).strict();
71
+ var SessionUsageLimitErrorCode = z.enum([
72
+ "session_usage_limit_reached",
73
+ "session_usage_limit_conflict",
74
+ "session_usage_limit_not_root",
75
+ "session_usage_limit_preparing",
76
+ "session_usage_limit_unavailable",
77
+ "session_usage_limit_disabled",
78
+ "session_usage_limit_forbidden"
79
+ ]);
80
+ var SessionUsageLimitUpdatedPayload = z.object({
81
+ basis: SessionUsageLimitBasis,
82
+ limitMicros: SessionUsageLimitMicros.nullable(),
83
+ previousLimitMicros: SessionUsageLimitMicros.nullable(),
84
+ version: Version
85
+ }).strict();
86
+
87
+ export {
88
+ SESSION_USAGE_LIMIT_BASIS,
89
+ SessionUsageLimitBasis,
90
+ SESSION_USAGE_LIMIT_MICROS_PER_DOLLAR,
91
+ SESSION_USAGE_LIMIT_MAX_MICROS,
92
+ SessionUsageLimitMicros,
93
+ SessionUsageLimitStatus,
94
+ SessionUsageLimitHistory,
95
+ SessionUsageLimit,
96
+ SetSessionUsageLimitRequest,
97
+ SessionUsageLimitReachedRefusal,
98
+ SessionUsageLimitErrorCode,
99
+ SessionUsageLimitUpdatedPayload
100
+ };
101
+ //# sourceMappingURL=chunk-5RWB6QVL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/session-usage-limits.ts"],"sourcesContent":["import * as primitives from \"./primitives\";\nimport { z } from \"zod\";\n\n/**\n * Per-task (root session) usage limits.\n *\n * One optional limit belongs to a root session and is shared by every\n * descendant. It is measured in integer USD micros ($1 = 1,000,000) of the\n * canonical pre-margin API-equivalent model cost (`estimatedProviderCostMicros`)\n * recorded when a model response settles, whatever funds the call (Opengeni\n * credits, a connected subscription or a workspace-owned key).\n *\n * The limit is checked before each new model request; it is not a reservation.\n * Requests already admitted may finish and take recorded usage above the\n * limit, and concurrently admitted requests may overshoot together. Usage\n * without a known price is excluded from the total and disclosed as partial\n * coverage instead of being valued at zero. It is not an invoice cap.\n */\n\n/** Versioned measurement basis, exposed so a future basis cannot be confused with this one. */\nexport const SESSION_USAGE_LIMIT_BASIS = \"model_api_equivalent_v1\" as const;\nexport const SessionUsageLimitBasis = z.literal(SESSION_USAGE_LIMIT_BASIS);\nexport type SessionUsageLimitBasis = z.infer<typeof SessionUsageLimitBasis>;\n\nexport const SESSION_USAGE_LIMIT_MICROS_PER_DOLLAR = 1_000_000;\n/** $10M: the largest configurable limit, far inside safe integers. Usage itself is never clamped. */\nexport const SESSION_USAGE_LIMIT_MAX_MICROS = 10_000_000 * SESSION_USAGE_LIMIT_MICROS_PER_DOLLAR;\n\n/** A configured limit. Zero is a valid immediate stop; `null` (not this schema) means no limit. */\nexport const SessionUsageLimitMicros = primitives.nonnegativeInteger\n .safe()\n .max(SESSION_USAGE_LIMIT_MAX_MICROS);\nexport type SessionUsageLimitMicros = z.infer<typeof SessionUsageLimitMicros>;\n\n/** Recorded usage is a non-negative safe integer and may exceed the configured maximum. */\nconst UsageMicros = primitives.nonnegativeInteger.safe();\nconst Count = primitives.nonnegativeInteger.safe();\nconst Version = primitives.nonnegativeInteger.safe();\n\nconst OperationId = z\n .string()\n .min(1)\n .max(256)\n .refine(\n (value) =>\n value.trim().length > 0 &&\n !value.includes(\"\\0\") &&\n !/[\\uD800-\\uDFFF]/u.test(value) &&\n new TextEncoder().encode(value).byteLength <= 256,\n );\n\n/**\n * - `unlimited`: no limit is configured; usage is still recorded.\n * - `within`: a limit is configured and recorded usage is below it.\n * - `reached`: recorded usage is at or above the limit; new model requests are refused.\n * - `preparing`: historical usage for a task created before this feature is\n * still being imported; the total is not yet meaningful and a new limit\n * cannot be set until it finishes.\n * - `unavailable`: the usage state could not be read. Never treat it as zero or unlimited.\n */\nexport const SessionUsageLimitStatus = z.enum([\n \"unlimited\",\n \"within\",\n \"reached\",\n \"preparing\",\n \"unavailable\",\n]);\nexport type SessionUsageLimitStatus = z.infer<typeof SessionUsageLimitStatus>;\n\n/**\n * `complete`: every recorded model response of this task was metered live.\n * `legacy_partial`: the task predates usage limits; available historical cost\n * snapshots were imported, but older usage may be missing. This never upgrades\n * to complete, because a missing old record is not proof of no usage.\n * `preparing`: the historical import has not finished.\n */\nexport const SessionUsageLimitHistory = z.enum([\"complete\", \"legacy_partial\", \"preparing\"]);\nexport type SessionUsageLimitHistory = z.infer<typeof SessionUsageLimitHistory>;\n\nexport const SessionUsageLimit = z\n .object({\n basis: SessionUsageLimitBasis,\n /** The task root whose limit applies. Equal to the session id for a root. */\n rootSessionId: primitives.uuid,\n /** True when this projection was read through a descendant: edit the root's limit instead. */\n inherited: primitives.boolean,\n status: SessionUsageLimitStatus,\n /** Configured limit; null means no limit. Meaningless while `status` is `unavailable`. */\n limitMicros: SessionUsageLimitMicros.nullable(),\n /**\n * Recorded known (priced or known-free) usage of the whole task tree, in USD\n * micros. Null while `preparing` or `unavailable`: never render it as $0.\n * May exceed `limitMicros`.\n */\n usedMicros: UsageMicros.nullable(),\n /** Configuration version for compare-and-set writes. Survives clearing. */\n version: Version,\n /** Monotonic usage revision; increases whenever a usage receipt changes the total or coverage. */\n usageRevision: Version,\n history: SessionUsageLimitHistory,\n /** `partial` when any usage has unknown cost or history is legacy/preparing: show \"at least\". */\n coverage: z.enum([\"complete\", \"partial\"]),\n pricedCalls: Count,\n /** Responses with a known price of zero; they count as zero, unlike unpriced usage. */\n freeCalls: Count,\n /** Responses whose cost is unknown; they are excluded from `usedMicros`. */\n unpricedCalls: Count,\n updatedAt: primitives.string.datetime({ offset: true }).nullable(),\n })\n .strict();\nexport type SessionUsageLimit = z.infer<typeof SessionUsageLimit>;\n\n/**\n * Compare-and-set write of a root task's limit. `expectedVersion` is the\n * `version` the caller last read; a stale version returns 409. A replay of the\n * same `operationId` with the same request returns the committed result.\n */\nexport const SetSessionUsageLimitRequest = z\n .object({\n limitMicros: SessionUsageLimitMicros.nullable(),\n expectedVersion: Version,\n operationId: OperationId,\n })\n .strict();\nexport type SetSessionUsageLimitRequest = z.infer<typeof SetSessionUsageLimitRequest>;\n\n/** Typed refusal for a fresh model request, message or goal resume after the limit is reached. */\nexport const SessionUsageLimitReachedRefusal = z\n .object({\n code: z.literal(\"session_usage_limit_reached\"),\n basis: SessionUsageLimitBasis,\n rootSessionId: primitives.uuid,\n limitMicros: SessionUsageLimitMicros,\n usedMicros: UsageMicros,\n message: z.string().max(1_024),\n })\n .strict();\nexport type SessionUsageLimitReachedRefusal = z.infer<typeof SessionUsageLimitReachedRefusal>;\n\n/** Typed error codes for the usage-limit routes. */\nexport const SessionUsageLimitErrorCode = z.enum([\n \"session_usage_limit_reached\",\n \"session_usage_limit_conflict\",\n \"session_usage_limit_not_root\",\n \"session_usage_limit_preparing\",\n \"session_usage_limit_unavailable\",\n \"session_usage_limit_disabled\",\n \"session_usage_limit_forbidden\",\n]);\nexport type SessionUsageLimitErrorCode = z.infer<typeof SessionUsageLimitErrorCode>;\n\n/** The durable event appended to a root's stream when an authorized person changes its limit. */\nexport const SessionUsageLimitUpdatedPayload = z\n .object({\n basis: SessionUsageLimitBasis,\n limitMicros: SessionUsageLimitMicros.nullable(),\n previousLimitMicros: SessionUsageLimitMicros.nullable(),\n version: Version,\n })\n .strict();\nexport type SessionUsageLimitUpdatedPayload = z.infer<typeof SessionUsageLimitUpdatedPayload>;\n\nexport {\n formatSessionUsageMicros,\n parseSessionUsageLimitReachedRefusal,\n SESSION_USAGE_LIMIT_SEGMENT,\n SESSION_USAGE_LIMIT_GOAL_PAUSED_REASON,\n sessionUsageLimitReachedMessage,\n} from \"./session-usage-limit-refusal\";\n"],"mappings":";;;;;;;;AACA,SAAS,SAAS;AAmBX,IAAM,4BAA4B;AAClC,IAAM,yBAAyB,EAAE,QAAQ,yBAAyB;AAGlE,IAAM,wCAAwC;AAE9C,IAAM,iCAAiC,MAAa;AAGpD,IAAM,0BAAqC,mBAC/C,KAAK,EACL,IAAI,8BAA8B;AAIrC,IAAM,cAAyB,mBAAmB,KAAK;AACvD,IAAM,QAAmB,mBAAmB,KAAK;AACjD,IAAM,UAAqB,mBAAmB,KAAK;AAEnD,IAAM,cAAc,EACjB,OAAO,EACP,IAAI,CAAC,EACL,IAAI,GAAG,EACP;AAAA,EACC,CAAC,UACC,MAAM,KAAK,EAAE,SAAS,KACtB,CAAC,MAAM,SAAS,IAAI,KACpB,CAAC,mBAAmB,KAAK,KAAK,KAC9B,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE,cAAc;AAClD;AAWK,IAAM,0BAA0B,EAAE,KAAK;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAUM,IAAM,2BAA2B,EAAE,KAAK,CAAC,YAAY,kBAAkB,WAAW,CAAC;AAGnF,IAAM,oBAAoB,EAC9B,OAAO;AAAA,EACN,OAAO;AAAA;AAAA,EAEP,eAA0B;AAAA;AAAA,EAE1B,WAAsB;AAAA,EACtB,QAAQ;AAAA;AAAA,EAER,aAAa,wBAAwB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9C,YAAY,YAAY,SAAS;AAAA;AAAA,EAEjC,SAAS;AAAA;AAAA,EAET,eAAe;AAAA,EACf,SAAS;AAAA;AAAA,EAET,UAAU,EAAE,KAAK,CAAC,YAAY,SAAS,CAAC;AAAA,EACxC,aAAa;AAAA;AAAA,EAEb,WAAW;AAAA;AAAA,EAEX,eAAe;AAAA,EACf,WAAsB,OAAO,SAAS,EAAE,QAAQ,KAAK,CAAC,EAAE,SAAS;AACnE,CAAC,EACA,OAAO;AAQH,IAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,aAAa,wBAAwB,SAAS;AAAA,EAC9C,iBAAiB;AAAA,EACjB,aAAa;AACf,CAAC,EACA,OAAO;AAIH,IAAM,kCAAkC,EAC5C,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,6BAA6B;AAAA,EAC7C,OAAO;AAAA,EACP,eAA0B;AAAA,EAC1B,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,SAAS,EAAE,OAAO,EAAE,IAAI,IAAK;AAC/B,CAAC,EACA,OAAO;AAIH,IAAM,6BAA6B,EAAE,KAAK;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAIM,IAAM,kCAAkC,EAC5C,OAAO;AAAA,EACN,OAAO;AAAA,EACP,aAAa,wBAAwB,SAAS;AAAA,EAC9C,qBAAqB,wBAAwB,SAAS;AAAA,EACtD,SAAS;AACX,CAAC,EACA,OAAO;","names":[]}
@@ -0,0 +1,243 @@
1
+ import {
2
+ Permission
3
+ } from "./chunk-G2KJTFIC.js";
4
+ import {
5
+ boolean,
6
+ nonEmptyString,
7
+ nullableUuid,
8
+ optionalUuid,
9
+ positiveInteger,
10
+ string,
11
+ uuid
12
+ } from "./chunk-AQYDZUJV.js";
13
+ import {
14
+ defineSchema
15
+ } from "./chunk-56SNIMDO.js";
16
+
17
+ // src/external-identities.ts
18
+ import { z } from "zod";
19
+ var encoder = new TextEncoder();
20
+ function opaqueText(maxBytes) {
21
+ return nonEmptyString.max(maxBytes).refine(
22
+ (value) => !value.includes("\0") && !/[\uD800-\uDFFF]/u.test(value) && encoder.encode(value).byteLength <= maxBytes,
23
+ {
24
+ message: `Identifier must be valid PostgreSQL Unicode text of at most ${maxBytes} UTF-8 bytes`
25
+ }
26
+ );
27
+ }
28
+ var externalId = opaqueText(1024);
29
+ var source = opaqueText(200);
30
+ var externalSubject = /* @__PURE__ */ defineSchema(
31
+ () => string.regex(
32
+ /^external_user:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$(?![\s\S])/
33
+ )
34
+ );
35
+ var nativeSubject = /* @__PURE__ */ defineSchema(
36
+ () => z.string().min(1).max(1024).regex(/^user:[^\r\n]+$(?![\s\S])/)
37
+ );
38
+ var ExternalIdentityReference = /* @__PURE__ */ defineSchema(
39
+ () => z.object({
40
+ externalId,
41
+ source: source.default("default")
42
+ }).strict()
43
+ );
44
+ var AddExternalWorkspaceMemberRequest = /* @__PURE__ */ defineSchema(
45
+ () => z.object({
46
+ identity: ExternalIdentityReference,
47
+ permissions: z.array(Permission).min(1).max(Permission.options.length),
48
+ /** Opt-in durable operation identity; unkeyed legacy requests are not cancellable. */
49
+ operationId: optionalUuid
50
+ }).strict()
51
+ );
52
+ var ExternalIdentityLookup = /* @__PURE__ */ defineSchema(
53
+ () => z.discriminatedUnion("found", [
54
+ z.object({ found: z.literal(false) }).strict(),
55
+ z.object({
56
+ found: z.literal(true),
57
+ subjectId: externalSubject,
58
+ organizationMembershipId: uuid,
59
+ identityStatus: z.enum(["active", "disabled", "revoked"]),
60
+ identityAuthorizationRevision: positiveInteger.safe(),
61
+ membershipStatus: z.enum(["provisioning", "active", "suspended", "revoked"]),
62
+ membershipAuthorizationRevision: positiveInteger.safe()
63
+ }).strict()
64
+ ])
65
+ );
66
+ var CancelExternalWorkspaceMemberGrantRequest = /* @__PURE__ */ defineSchema(
67
+ () => z.object({
68
+ operationId: uuid,
69
+ cancelGrantOperationId: uuid
70
+ }).strict().refine((value) => value.operationId !== value.cancelGrantOperationId, {
71
+ message: "Revocation and grant must use different operation identities"
72
+ })
73
+ );
74
+ var CancelExternalWorkspaceMemberGrantResponse = /* @__PURE__ */ defineSchema(
75
+ () => z.object({
76
+ removed: boolean,
77
+ replay: boolean,
78
+ fencedGrantOperationId: uuid
79
+ }).strict()
80
+ );
81
+ var UpdateExternalWorkspaceMemberRequest = /* @__PURE__ */ defineSchema(
82
+ () => z.object({
83
+ permissions: z.array(Permission).min(1).max(Permission.options.length),
84
+ operationId: uuid
85
+ }).strict()
86
+ );
87
+ var UpdateExternalWorkspaceMemberResponse = /* @__PURE__ */ defineSchema(
88
+ () => z.object({
89
+ subjectId: string,
90
+ organizationMembershipId: uuid,
91
+ permissions: z.array(Permission),
92
+ /** True when a previously held permission was removed. */
93
+ narrowed: boolean,
94
+ replay: boolean
95
+ }).strict()
96
+ );
97
+ var UpdateExternalIdentityMembershipRequest = /* @__PURE__ */ defineSchema(
98
+ () => z.object({
99
+ kind: z.enum(["suspend", "reactivate", "offboard"]),
100
+ expectedAuthorizationRevision: positiveInteger.safe(),
101
+ operationId: uuid,
102
+ reason: z.string().max(512).optional()
103
+ }).strict()
104
+ );
105
+ var ExternalActorSelection = /* @__PURE__ */ defineSchema(
106
+ () => z.discriminatedUnion("mode", [
107
+ z.object({ mode: z.literal("external"), identity: ExternalIdentityReference }).strict(),
108
+ z.object({
109
+ mode: z.literal("linked_native"),
110
+ identity: ExternalIdentityReference,
111
+ linkId: uuid,
112
+ expectedLinkRevision: positiveInteger.safe()
113
+ }).strict()
114
+ ])
115
+ );
116
+ var ExternalIdentity = /* @__PURE__ */ defineSchema(
117
+ () => z.object({
118
+ id: uuid,
119
+ accountId: uuid,
120
+ source,
121
+ externalId,
122
+ subjectId: externalSubject,
123
+ organizationMembershipId: uuid,
124
+ personalWorkspaceId: uuid,
125
+ status: z.enum(["active", "disabled", "revoked"]),
126
+ authorizationRevision: positiveInteger.safe()
127
+ }).strict()
128
+ );
129
+ var ExternalActorAttribution = /* @__PURE__ */ defineSchema(
130
+ () => z.object({
131
+ accountId: uuid,
132
+ authenticatingApiKeyId: uuid,
133
+ externalIdentityId: uuid,
134
+ externalSubjectId: externalSubject,
135
+ externalAuthorizationRevision: positiveInteger.safe(),
136
+ effectiveSubjectId: z.string().min(1).max(1024),
137
+ actingMode: z.enum(["external", "linked_native"]),
138
+ linkId: optionalUuid,
139
+ linkRevision: positiveInteger.safe().optional()
140
+ }).strict().superRefine((value, context) => {
141
+ if (value.actingMode === "external") {
142
+ if (value.effectiveSubjectId !== value.externalSubjectId || value.linkId !== void 0 || value.linkRevision !== void 0) {
143
+ context.addIssue({
144
+ code: "custom",
145
+ message: "External mode cannot delegate native identity"
146
+ });
147
+ }
148
+ } else if (!value.linkId || !value.linkRevision || !nativeSubject.safeParse(value.effectiveSubjectId).success) {
149
+ context.addIssue({
150
+ code: "custom",
151
+ message: "Linked mode requires exact native delegation provenance"
152
+ });
153
+ }
154
+ })
155
+ );
156
+ var ExternalActorContinuation = /* @__PURE__ */ defineSchema(
157
+ () => z.object({
158
+ identity: ExternalIdentityReference,
159
+ actor: ExternalActorAttribution
160
+ }).strict()
161
+ );
162
+ var ExternalIdentityLink = /* @__PURE__ */ defineSchema(
163
+ () => z.object({
164
+ id: uuid,
165
+ accountId: uuid,
166
+ externalIdentityId: uuid,
167
+ externalIdentity: ExternalIdentityReference.optional(),
168
+ nativeSubjectId: nativeSubject.nullable(),
169
+ status: z.enum(["pending", "active", "revoked", "expired"]),
170
+ revision: positiveInteger.safe(),
171
+ permissions: z.array(Permission).max(Permission.options.length),
172
+ expiresAt: string.datetime({ offset: true }).nullable()
173
+ }).strict().refine(
174
+ (value) => value.status !== "active" || value.nativeSubjectId !== null,
175
+ "An active link requires a confirmed native identity"
176
+ )
177
+ );
178
+ var ExternalIdentityLinkPage = /* @__PURE__ */ defineSchema(
179
+ () => z.object({
180
+ links: z.array(ExternalIdentityLink).max(50),
181
+ nextCursor: nullableUuid
182
+ }).strict()
183
+ );
184
+ var BeginExternalIdentityLinkRequest = /* @__PURE__ */ defineSchema(
185
+ () => z.object({
186
+ permissions: z.array(Permission).min(1).max(Permission.options.length),
187
+ expiresAt: string.datetime({ offset: true }).nullable().default(null)
188
+ }).strict()
189
+ );
190
+ var ConfirmExternalIdentityLinkRequest = /* @__PURE__ */ defineSchema(
191
+ () => z.object({
192
+ challenge: string.regex(/^[A-Za-z0-9_-]{43}$/),
193
+ expectedRevision: positiveInteger.safe(),
194
+ permissions: z.array(Permission).min(1).max(Permission.options.length)
195
+ }).strict()
196
+ );
197
+ var BeginExternalIdentityLinkResponse = /* @__PURE__ */ defineSchema(
198
+ () => z.object({
199
+ link: ExternalIdentityLink,
200
+ challenge: string.regex(/^[A-Za-z0-9_-]{43}$/),
201
+ confirmBefore: string.datetime({ offset: true })
202
+ }).strict()
203
+ );
204
+ var ExternalIdentityLinkPreview = /* @__PURE__ */ defineSchema(
205
+ () => z.object({
206
+ link: ExternalIdentityLink,
207
+ externalIdentity: ExternalIdentityReference,
208
+ nativeSubjectId: nativeSubject,
209
+ organizationId: uuid
210
+ }).strict()
211
+ );
212
+ var ExternalLinkWorkSnapshot = /* @__PURE__ */ defineSchema(
213
+ () => z.object({
214
+ identity: ExternalIdentityReference,
215
+ actor: ExternalActorAttribution.refine((value) => value.actingMode === "linked_native"),
216
+ permissions: z.array(Permission).max(Permission.options.length),
217
+ /** Absent on historical snapshots, whose legacy semantics are preserved. */
218
+ permissionMode: z.enum(["legacy", "explicit"]).optional()
219
+ }).strict()
220
+ );
221
+
222
+ export {
223
+ ExternalIdentityReference,
224
+ AddExternalWorkspaceMemberRequest,
225
+ ExternalIdentityLookup,
226
+ CancelExternalWorkspaceMemberGrantRequest,
227
+ CancelExternalWorkspaceMemberGrantResponse,
228
+ UpdateExternalWorkspaceMemberRequest,
229
+ UpdateExternalWorkspaceMemberResponse,
230
+ UpdateExternalIdentityMembershipRequest,
231
+ ExternalActorSelection,
232
+ ExternalIdentity,
233
+ ExternalActorAttribution,
234
+ ExternalActorContinuation,
235
+ ExternalIdentityLink,
236
+ ExternalIdentityLinkPage,
237
+ BeginExternalIdentityLinkRequest,
238
+ ConfirmExternalIdentityLinkRequest,
239
+ BeginExternalIdentityLinkResponse,
240
+ ExternalIdentityLinkPreview,
241
+ ExternalLinkWorkSnapshot
242
+ };
243
+ //# sourceMappingURL=chunk-5UGUOT3L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/external-identities.ts"],"sourcesContent":["import * as primitives from \"./primitives\";\nimport { defineSchema } from \"./define-schema\";\nimport { z } from \"zod\";\nimport { Permission } from \"./permissions\";\n\n// External identifiers are opaque, case-sensitive strings. In particular a\n// native-looking identifier is still host data, never a native subject claim.\n// Bound bytes, not just JS code units: these values share a PostgreSQL B-tree\n// index entry. Never normalize/truncate an identifier to make it fit, and reject\n// text that the driver would replace or PostgreSQL cannot represent.\nconst encoder = new TextEncoder();\nfunction opaqueText(maxBytes: number) {\n return primitives.nonEmptyString\n .max(maxBytes)\n .refine(\n (value) =>\n !value.includes(\"\\0\") &&\n !/[\\uD800-\\uDFFF]/u.test(value) &&\n encoder.encode(value).byteLength <= maxBytes,\n {\n message: `Identifier must be valid PostgreSQL Unicode text of at most ${maxBytes} UTF-8 bytes`,\n },\n );\n}\nconst externalId = opaqueText(1024);\nconst source = opaqueText(200);\nconst externalSubject = /* @__PURE__ */ defineSchema(() =>\n primitives.string.regex(\n /^external_user:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$(?![\\s\\S])/,\n ),\n);\nconst nativeSubject = /* @__PURE__ */ defineSchema(() =>\n z\n .string()\n .min(1)\n .max(1024)\n .regex(/^user:[^\\r\\n]+$(?![\\s\\S])/),\n);\nexport const ExternalIdentityReference = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n externalId,\n source: source.default(\"default\"),\n })\n .strict(),\n);\nexport type ExternalIdentityReference = z.infer<typeof ExternalIdentityReference>;\n\nexport const AddExternalWorkspaceMemberRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n identity: ExternalIdentityReference,\n permissions: z.array(Permission).min(1).max(Permission.options.length),\n /** Opt-in durable operation identity; unkeyed legacy requests are not cancellable. */\n operationId: primitives.optionalUuid,\n })\n .strict(),\n);\nexport type AddExternalWorkspaceMemberRequest = z.infer<typeof AddExternalWorkspaceMemberRequest>;\n\n/** Content-free service lookup, including identities which can no longer act. */\nexport const ExternalIdentityLookup = /* @__PURE__ */ defineSchema(() =>\n z.discriminatedUnion(\"found\", [\n z.object({ found: z.literal(false) }).strict(),\n z\n .object({\n found: z.literal(true),\n subjectId: externalSubject,\n organizationMembershipId: primitives.uuid,\n identityStatus: z.enum([\"active\", \"disabled\", \"revoked\"]),\n identityAuthorizationRevision: primitives.positiveInteger.safe(),\n membershipStatus: z.enum([\"provisioning\", \"active\", \"suspended\", \"revoked\"]),\n membershipAuthorizationRevision: primitives.positiveInteger.safe(),\n })\n .strict(),\n ]),\n);\nexport type ExternalIdentityLookup = z.infer<typeof ExternalIdentityLookup>;\n\n/** Terminal withdrawal of this external member's workspace access, also fencing\n * an exact earlier onboarding operation whether or not it has reached the API. */\nexport const CancelExternalWorkspaceMemberGrantRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n operationId: primitives.uuid,\n cancelGrantOperationId: primitives.uuid,\n })\n .strict()\n .refine((value) => value.operationId !== value.cancelGrantOperationId, {\n message: \"Revocation and grant must use different operation identities\",\n }),\n);\nexport type CancelExternalWorkspaceMemberGrantRequest = z.infer<\n typeof CancelExternalWorkspaceMemberGrantRequest\n>;\nexport const CancelExternalWorkspaceMemberGrantResponse = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n removed: primitives.boolean,\n replay: primitives.boolean,\n fencedGrantOperationId: primitives.uuid,\n })\n .strict(),\n);\nexport type CancelExternalWorkspaceMemberGrantResponse = z.infer<\n typeof CancelExternalWorkspaceMemberGrantResponse\n>;\n\n/** Replace an existing external member's permissions in one shared workspace.\n * Keyed and idempotent like a grant; narrowing forces live authority to\n * re-check but never cancels or tears down work. */\nexport const UpdateExternalWorkspaceMemberRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n permissions: z.array(Permission).min(1).max(Permission.options.length),\n operationId: primitives.uuid,\n })\n .strict(),\n);\nexport type UpdateExternalWorkspaceMemberRequest = z.infer<\n typeof UpdateExternalWorkspaceMemberRequest\n>;\nexport const UpdateExternalWorkspaceMemberResponse = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n subjectId: primitives.string,\n organizationMembershipId: primitives.uuid,\n permissions: z.array(Permission),\n /** True when a previously held permission was removed. */\n narrowed: primitives.boolean,\n replay: primitives.boolean,\n })\n .strict(),\n);\nexport type UpdateExternalWorkspaceMemberResponse = z.infer<\n typeof UpdateExternalWorkspaceMemberResponse\n>;\n\n/** Uses the organization membership ID returned by lazy identity admission.\n * Reactivation restores admission only, not revoked work or workspace grants. */\nexport const UpdateExternalIdentityMembershipRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n kind: z.enum([\"suspend\", \"reactivate\", \"offboard\"]),\n expectedAuthorizationRevision: primitives.positiveInteger.safe(),\n operationId: primitives.uuid,\n reason: z.string().max(512).optional(),\n })\n .strict(),\n);\nexport type UpdateExternalIdentityMembershipRequest = z.infer<\n typeof UpdateExternalIdentityMembershipRequest\n>;\n\nexport const ExternalActorSelection = /* @__PURE__ */ defineSchema(() =>\n z.discriminatedUnion(\"mode\", [\n z.object({ mode: z.literal(\"external\"), identity: ExternalIdentityReference }).strict(),\n z\n .object({\n mode: z.literal(\"linked_native\"),\n identity: ExternalIdentityReference,\n linkId: primitives.uuid,\n expectedLinkRevision: primitives.positiveInteger.safe(),\n })\n .strict(),\n ]),\n);\nexport type ExternalActorSelection = z.infer<typeof ExternalActorSelection>;\n\nexport const ExternalIdentity = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n id: primitives.uuid,\n accountId: primitives.uuid,\n source,\n externalId,\n subjectId: externalSubject,\n organizationMembershipId: primitives.uuid,\n personalWorkspaceId: primitives.uuid,\n status: z.enum([\"active\", \"disabled\", \"revoked\"]),\n authorizationRevision: primitives.positiveInteger.safe(),\n })\n .strict(),\n);\nexport type ExternalIdentity = z.infer<typeof ExternalIdentity>;\n\n// Audit attribution, not authentication. Only the canonical access resolver\n// may establish provenance; accepting this JSON from a browser proves nothing.\nexport const ExternalActorAttribution = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n accountId: primitives.uuid,\n authenticatingApiKeyId: primitives.uuid,\n externalIdentityId: primitives.uuid,\n externalSubjectId: externalSubject,\n externalAuthorizationRevision: primitives.positiveInteger.safe(),\n effectiveSubjectId: z.string().min(1).max(1024),\n actingMode: z.enum([\"external\", \"linked_native\"]),\n linkId: primitives.optionalUuid,\n linkRevision: primitives.positiveInteger.safe().optional(),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.actingMode === \"external\") {\n if (\n value.effectiveSubjectId !== value.externalSubjectId ||\n value.linkId !== undefined ||\n value.linkRevision !== undefined\n ) {\n context.addIssue({\n code: \"custom\",\n message: \"External mode cannot delegate native identity\",\n });\n }\n } else if (\n !value.linkId ||\n !value.linkRevision ||\n !nativeSubject.safeParse(value.effectiveSubjectId).success\n ) {\n context.addIssue({\n code: \"custom\",\n message: \"Linked mode requires exact native delegation provenance\",\n });\n }\n }),\n);\nexport type ExternalActorAttribution = z.infer<typeof ExternalActorAttribution>;\n\n/** Server-signed/encrypted continuation data, never sufficient live authority. */\nexport const ExternalActorContinuation = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n identity: ExternalIdentityReference,\n actor: ExternalActorAttribution,\n })\n .strict(),\n);\nexport type ExternalActorContinuation = z.infer<typeof ExternalActorContinuation>;\n\nexport const ExternalIdentityLink = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n id: primitives.uuid,\n accountId: primitives.uuid,\n externalIdentityId: primitives.uuid,\n externalIdentity: ExternalIdentityReference.optional(),\n nativeSubjectId: nativeSubject.nullable(),\n status: z.enum([\"pending\", \"active\", \"revoked\", \"expired\"]),\n revision: primitives.positiveInteger.safe(),\n permissions: z.array(Permission).max(Permission.options.length),\n expiresAt: primitives.string.datetime({ offset: true }).nullable(),\n })\n .strict()\n .refine(\n (value) => value.status !== \"active\" || value.nativeSubjectId !== null,\n \"An active link requires a confirmed native identity\",\n ),\n);\nexport type ExternalIdentityLink = z.infer<typeof ExternalIdentityLink>;\n\nexport const ExternalIdentityLinkPage = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n links: z.array(ExternalIdentityLink).max(50),\n nextCursor: primitives.nullableUuid,\n })\n .strict(),\n);\nexport type ExternalIdentityLinkPage = z.infer<typeof ExternalIdentityLinkPage>;\n\n/** A native confirmation may narrow this request, never broaden it. The\n * challenge is delivered once to the host and is not an authentication token. */\nexport const BeginExternalIdentityLinkRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n permissions: z.array(Permission).min(1).max(Permission.options.length),\n expiresAt: primitives.string.datetime({ offset: true }).nullable().default(null),\n })\n .strict(),\n);\nexport type BeginExternalIdentityLinkRequest = z.input<typeof BeginExternalIdentityLinkRequest>;\nexport const ConfirmExternalIdentityLinkRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n challenge: primitives.string.regex(/^[A-Za-z0-9_-]{43}$/),\n expectedRevision: primitives.positiveInteger.safe(),\n permissions: z.array(Permission).min(1).max(Permission.options.length),\n })\n .strict(),\n);\nexport type ConfirmExternalIdentityLinkRequest = z.infer<typeof ConfirmExternalIdentityLinkRequest>;\nexport const BeginExternalIdentityLinkResponse = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n link: ExternalIdentityLink,\n challenge: primitives.string.regex(/^[A-Za-z0-9_-]{43}$/),\n confirmBefore: primitives.string.datetime({ offset: true }),\n })\n .strict(),\n);\nexport type BeginExternalIdentityLinkResponse = z.infer<typeof BeginExternalIdentityLinkResponse>;\nexport const ExternalIdentityLinkPreview = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n link: ExternalIdentityLink,\n externalIdentity: ExternalIdentityReference,\n nativeSubjectId: nativeSubject,\n organizationId: primitives.uuid,\n })\n .strict(),\n);\nexport type ExternalIdentityLinkPreview = z.infer<typeof ExternalIdentityLinkPreview>;\n\n/** Immutable accepted-work restriction, not a browser credential. Original key\n * identity remains audit-only; durable use validates the live link and members. */\nexport const ExternalLinkWorkSnapshot = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n identity: ExternalIdentityReference,\n actor: ExternalActorAttribution.refine((value) => value.actingMode === \"linked_native\"),\n permissions: z.array(Permission).max(Permission.options.length),\n /** Absent on historical snapshots, whose legacy semantics are preserved. */\n permissionMode: z.enum([\"legacy\", \"explicit\"]).optional(),\n })\n .strict(),\n);\nexport type ExternalLinkWorkSnapshot = z.infer<typeof ExternalLinkWorkSnapshot>;\n"],"mappings":"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","names":[]}