@opengeni/react 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (863) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +89 -11
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-BO2IWXVK.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3UZCWK46.js +298 -0
  27. package/dist/chunk-3UZCWK46.js.map +1 -0
  28. package/dist/chunk-47CKUXTW.js +293 -0
  29. package/dist/chunk-47CKUXTW.js.map +1 -0
  30. package/dist/chunk-4QYP6QUI.js +109 -0
  31. package/dist/chunk-4QYP6QUI.js.map +1 -0
  32. package/dist/chunk-5EY26VZ7.js +1053 -0
  33. package/dist/chunk-5EY26VZ7.js.map +1 -0
  34. package/dist/chunk-5I4VRWBB.js +56 -0
  35. package/dist/chunk-5I4VRWBB.js.map +1 -0
  36. package/dist/chunk-5WOR7UCL.js +191 -0
  37. package/dist/chunk-5WOR7UCL.js.map +1 -0
  38. package/dist/chunk-5YJLGOM5.js +51 -0
  39. package/dist/chunk-5YJLGOM5.js.map +1 -0
  40. package/dist/chunk-6JFN3OWG.js +386 -0
  41. package/dist/chunk-6JFN3OWG.js.map +1 -0
  42. package/dist/chunk-7QJT5O4S.js +35 -0
  43. package/dist/chunk-7QJT5O4S.js.map +1 -0
  44. package/dist/chunk-A55KV72M.js +402 -0
  45. package/dist/chunk-A55KV72M.js.map +1 -0
  46. package/dist/chunk-ADWCLI4G.js +2028 -0
  47. package/dist/chunk-ADWCLI4G.js.map +1 -0
  48. package/dist/chunk-B27E3V37.js +29 -0
  49. package/dist/chunk-B27E3V37.js.map +1 -0
  50. package/dist/chunk-B7TC2A33.js +83 -0
  51. package/dist/chunk-B7TC2A33.js.map +1 -0
  52. package/dist/chunk-BLL56F7R.js +385 -0
  53. package/dist/chunk-BLL56F7R.js.map +1 -0
  54. package/dist/chunk-BOFEQC6K.js +162 -0
  55. package/dist/chunk-BOFEQC6K.js.map +1 -0
  56. package/dist/chunk-CM7LVUKC.js +35 -0
  57. package/dist/chunk-CM7LVUKC.js.map +1 -0
  58. package/dist/chunk-CORUP6JB.js +122 -0
  59. package/dist/chunk-CORUP6JB.js.map +1 -0
  60. package/dist/chunk-CSX5FFKZ.js +35 -0
  61. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  62. package/dist/chunk-EGVHJKGJ.js +3125 -0
  63. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  64. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  65. package/dist/chunk-G76LSA76.js.map +1 -0
  66. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  67. package/dist/chunk-GQMRL52F.js.map +1 -0
  68. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  69. package/dist/chunk-GUUXOISA.js.map +1 -0
  70. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  71. package/dist/chunk-I7X2P4FU.js.map +1 -0
  72. package/dist/chunk-IGFZFLI2.js +1390 -0
  73. package/dist/chunk-IGFZFLI2.js.map +1 -0
  74. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  75. package/dist/chunk-IMSUVYQB.js.map +1 -0
  76. package/dist/chunk-IOYHDEP3.js +38 -0
  77. package/dist/chunk-IOYHDEP3.js.map +1 -0
  78. package/dist/chunk-IZV5FTJC.js +55 -0
  79. package/dist/chunk-IZV5FTJC.js.map +1 -0
  80. package/dist/chunk-KF33GTWN.js +343 -0
  81. package/dist/chunk-KF33GTWN.js.map +1 -0
  82. package/dist/chunk-KSGQ5ODA.js +457 -0
  83. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  84. package/dist/{chunk-OAM4WAAM.js → chunk-KZC6QRNR.js} +1513 -697
  85. package/dist/chunk-KZC6QRNR.js.map +1 -0
  86. package/dist/chunk-LJUMYUBO.js +218 -0
  87. package/dist/chunk-LJUMYUBO.js.map +1 -0
  88. package/dist/chunk-LSW2OJVV.js +380 -0
  89. package/dist/chunk-LSW2OJVV.js.map +1 -0
  90. package/dist/chunk-M357MHH3.js +2 -0
  91. package/dist/chunk-M357MHH3.js.map +1 -0
  92. package/dist/chunk-MK2TQO4Y.js +24 -0
  93. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  94. package/dist/chunk-N7S72EXK.js +25 -0
  95. package/dist/chunk-N7S72EXK.js.map +1 -0
  96. package/dist/{chunk-XXWH2JLC.js → chunk-NKMYZFHA.js} +616 -621
  97. package/dist/chunk-NKMYZFHA.js.map +1 -0
  98. package/dist/chunk-NX4ADH73.js +14 -0
  99. package/dist/chunk-NX4ADH73.js.map +1 -0
  100. package/dist/chunk-O7F6UJO4.js +71 -0
  101. package/dist/chunk-O7F6UJO4.js.map +1 -0
  102. package/dist/chunk-OVB5WIG5.js +14064 -0
  103. package/dist/chunk-OVB5WIG5.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-VIUEOHXY.js +394 -0
  137. package/dist/chunk-VIUEOHXY.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/fleet-tile.d.ts +2 -2
  200. package/dist/components/grok-mark.d.ts +26 -0
  201. package/dist/components/human-input-form.d.ts +28 -32
  202. package/dist/components/human-input-surface.d.ts +7 -2
  203. package/dist/components/linkified-text.d.ts +18 -0
  204. package/dist/components/machine-input-display.d.ts +22 -1
  205. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  206. package/dist/components/machines/machine-detail.d.ts +7 -1
  207. package/dist/components/machines/machine-status.d.ts +48 -0
  208. package/dist/components/markdown-table-layout.d.ts +18 -0
  209. package/dist/components/markdown.d.ts +37 -4
  210. package/dist/components/message-timeline.d.ts +86 -7
  211. package/dist/components/model-mark.d.ts +29 -0
  212. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  213. package/dist/components/model-policy-picker.d.ts +41 -25
  214. package/dist/components/new-conversation.d.ts +32 -0
  215. package/dist/components/open-geni-chat.d.ts +73 -0
  216. package/dist/components/open-geni-links.d.ts +68 -0
  217. package/dist/components/openrouter-mark.d.ts +6 -0
  218. package/dist/components/opper-mark.d.ts +7 -0
  219. package/dist/components/preview-loading.d.ts +2 -0
  220. package/dist/components/provider-recovery-notice.d.ts +16 -0
  221. package/dist/components/queue-item-content.d.ts +9 -0
  222. package/dist/components/rehype-secret-refs.d.ts +23 -0
  223. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  224. package/dist/components/sandbox-files.d.ts +3 -1
  225. package/dist/components/sandbox-workspace.d.ts +18 -0
  226. package/dist/components/secret-question-field.d.ts +31 -0
  227. package/dist/components/secret-ref-chip.d.ts +35 -0
  228. package/dist/components/session-capability-frame.d.ts +37 -0
  229. package/dist/components/session-chrome.d.ts +57 -8
  230. package/dist/components/session-commands-panel.d.ts +6 -0
  231. package/dist/components/session-commands.d.ts +6 -0
  232. package/dist/components/session-connection-request.d.ts +8 -0
  233. package/dist/components/session-conversation.d.ts +157 -0
  234. package/dist/components/session-list.d.ts +39 -0
  235. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  236. package/dist/components/session-proxy-scope.d.ts +35 -0
  237. package/dist/components/session-status.d.ts +4 -1
  238. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  239. package/dist/components/timeline-anchor.d.ts +24 -0
  240. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  241. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  242. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  243. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  244. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  245. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  246. package/dist/components/timeline-annotations.d.ts +13 -3
  247. package/dist/components/timeline-reading-progress.d.ts +11 -0
  248. package/dist/components/timeline-search.d.ts +34 -0
  249. package/dist/components/timeline-settlement.d.ts +16 -0
  250. package/dist/components/tip-follow.d.ts +16 -0
  251. package/dist/components/tool-action-review.d.ts +47 -0
  252. package/dist/components/tool-review-history.d.ts +25 -0
  253. package/dist/components/usage-limit-notice.d.ts +49 -0
  254. package/dist/components/usage-member-list.d.ts +91 -0
  255. package/dist/components/usage-meter.d.ts +73 -0
  256. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  257. package/dist/components/user-message-body.d.ts +10 -1
  258. package/dist/composer-messages.d.ts +74 -0
  259. package/dist/composer-messages.js +9 -0
  260. package/dist/composer-messages.js.map +1 -0
  261. package/dist/composer-voice-events.d.ts +8 -0
  262. package/dist/composer.d.ts +5 -4
  263. package/dist/composer.js +26 -13
  264. package/dist/computer-viewer-GMLDXPON.js +20 -0
  265. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  266. package/dist/connect-account-identity.d.ts +8 -0
  267. package/dist/connect-accounts.d.ts +15 -0
  268. package/dist/connect-chooser.d.ts +18 -0
  269. package/dist/connect-panel.d.ts +18 -0
  270. package/dist/connect-setup.d.ts +18 -0
  271. package/dist/connect.d.ts +21 -0
  272. package/dist/connect.js +2149 -0
  273. package/dist/connect.js.map +1 -0
  274. package/dist/connection-catalog.d.ts +38 -0
  275. package/dist/connection-discovery.d.ts +12 -0
  276. package/dist/connection-installed.d.ts +17 -0
  277. package/dist/connection-logo.d.ts +9 -0
  278. package/dist/connection-service-logo.d.ts +8 -0
  279. package/dist/connection-service-presentation.d.ts +13 -0
  280. package/dist/connection-skeleton.d.ts +5 -0
  281. package/dist/connection-type-picker.d.ts +6 -0
  282. package/dist/conversation-timeline.d.ts +5 -0
  283. package/dist/desktop.d.ts +7 -0
  284. package/dist/desktop.js +27 -0
  285. package/dist/desktop.js.map +1 -0
  286. package/dist/device-authorization.d.ts +23 -0
  287. package/dist/diffs.d.ts +8 -0
  288. package/dist/diffs.js +15 -0
  289. package/dist/diffs.js.map +1 -0
  290. package/dist/discovery-cache.d.ts +5 -0
  291. package/dist/editor.d.ts +7 -0
  292. package/dist/editor.js +22 -0
  293. package/dist/editor.js.map +1 -0
  294. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  295. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  296. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  297. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  298. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  299. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  300. package/dist/hooks/latest-question.d.ts +25 -0
  301. package/dist/hooks/shared-machines-list.d.ts +4 -0
  302. package/dist/hooks/shared-query.d.ts +113 -0
  303. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  304. package/dist/hooks/use-auth-runs.d.ts +1 -4
  305. package/dist/hooks/use-available-models.d.ts +1 -1
  306. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  307. package/dist/hooks/use-browser-session.d.ts +12 -1
  308. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  309. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  310. package/dist/hooks/use-composer.d.ts +24 -2
  311. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  312. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  313. package/dist/hooks/use-computer-session.d.ts +4 -0
  314. package/dist/hooks/use-connect.d.ts +23 -0
  315. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  316. package/dist/hooks/use-file-attachments.d.ts +12 -0
  317. package/dist/hooks/use-goal.d.ts +2 -1
  318. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  319. package/dist/hooks/use-new-conversation.d.ts +56 -0
  320. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  321. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  322. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  323. package/dist/hooks/use-session-conversation.d.ts +49 -0
  324. package/dist/hooks/use-session-events.d.ts +28 -7
  325. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  326. package/dist/hooks/use-session-model-account.d.ts +48 -0
  327. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  328. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  329. package/dist/hooks/use-usage.d.ts +40 -0
  330. package/dist/hooks/use-vaults.d.ts +53 -0
  331. package/dist/hooks/use-voice-input.d.ts +8 -1
  332. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  333. package/dist/hooks/use-workspace-sessions.d.ts +22 -5
  334. package/dist/human-input-model.d.ts +122 -0
  335. package/dist/identity-link-accounts.d.ts +11 -0
  336. package/dist/identity-link-consent.d.ts +18 -0
  337. package/dist/index.d.ts +82 -20
  338. package/dist/index.js +2350 -6605
  339. package/dist/index.js.map +1 -1
  340. package/dist/interaction.d.ts +1 -1
  341. package/dist/interaction.js +14 -24
  342. package/dist/interaction.js.map +1 -1
  343. package/dist/latest-question-R77KWSUP.js +118 -0
  344. package/dist/latest-question-R77KWSUP.js.map +1 -0
  345. package/dist/lib/clipboard.d.ts +7 -0
  346. package/dist/lib/error-message.d.ts +7 -0
  347. package/dist/lib/format.d.ts +58 -4
  348. package/dist/lib/host-theme.d.ts +77 -0
  349. package/dist/lib/interaction-errors.d.ts +3 -0
  350. package/dist/lib/menu-styles.d.ts +22 -0
  351. package/dist/lib/notify-observer.d.ts +2 -0
  352. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  353. package/dist/lib/provider-recovery.d.ts +55 -0
  354. package/dist/lib/scrollbars.d.ts +11 -0
  355. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  356. package/dist/lib/transient-retry.d.ts +25 -0
  357. package/dist/lib/workbench-peers.d.ts +36 -0
  358. package/dist/lib/xterm-theme.d.ts +7 -5
  359. package/dist/machines.js +9 -5
  360. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  361. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  362. package/dist/mcp-connection-status.d.ts +14 -0
  363. package/dist/model-mark-paths.d.ts +34 -0
  364. package/dist/model-mark-paths.js +16 -0
  365. package/dist/model-mark-paths.js.map +1 -0
  366. package/dist/model-picker-model.d.ts +111 -0
  367. package/dist/model-picker-model.js +25 -0
  368. package/dist/model-picker-model.js.map +1 -0
  369. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  370. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  371. package/dist/model-policy.d.ts +30 -3
  372. package/dist/model-policy.js +14 -1
  373. package/dist/native-previews.d.ts +28 -0
  374. package/dist/native-previews.js +82 -0
  375. package/dist/native-previews.js.map +1 -0
  376. package/dist/new-session-draft.d.ts +7 -0
  377. package/dist/new-session-draft.js +639 -0
  378. package/dist/new-session-draft.js.map +1 -0
  379. package/dist/notification-text.d.ts +27 -0
  380. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  381. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  382. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  383. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  384. package/dist/older-history.d.ts +3 -2
  385. package/dist/organization-model.d.ts +32 -0
  386. package/dist/organization-model.js +65 -0
  387. package/dist/organization-model.js.map +1 -0
  388. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  389. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  390. package/dist/plugin-details.d.ts +14 -0
  391. package/dist/plugin-discovery.d.ts +25 -0
  392. package/dist/preview-loading-paint.d.ts +20 -0
  393. package/dist/provider.d.ts +25 -2
  394. package/dist/queue-presentation-model.d.ts +72 -0
  395. package/dist/queue-presentation-model.js +38 -0
  396. package/dist/queue-presentation-model.js.map +1 -0
  397. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  398. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  399. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  400. package/dist/realtime/embedded-voice.d.ts +1 -0
  401. package/dist/realtime/realtime-control.d.ts +4 -65
  402. package/dist/realtime/session-realtime.d.ts +78 -0
  403. package/dist/realtime.js +25 -1294
  404. package/dist/realtime.js.map +1 -1
  405. package/dist/sandbox-files-O27IPOZW.js +21 -0
  406. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  407. package/dist/sandbox-label-model.d.ts +30 -0
  408. package/dist/sandbox-label-model.js +20 -0
  409. package/dist/sandbox-label-model.js.map +1 -0
  410. package/dist/scrollbars.d.ts +1 -0
  411. package/dist/scrollbars.js +10 -0
  412. package/dist/scrollbars.js.map +1 -0
  413. package/dist/secret-reference-label.d.ts +14 -0
  414. package/dist/secrets-ui.d.ts +57 -0
  415. package/dist/session-agents-model.d.ts +10 -0
  416. package/dist/session-agents-model.js +25 -0
  417. package/dist/session-agents-model.js.map +1 -0
  418. package/dist/session-attention-model.d.ts +8 -0
  419. package/dist/session-attention-model.js +47 -0
  420. package/dist/session-attention-model.js.map +1 -0
  421. package/dist/session-auth-recommendation.d.ts +5 -0
  422. package/dist/session-capability-policy.d.ts +31 -0
  423. package/dist/session-feedback-model.d.ts +20 -0
  424. package/dist/session-feedback-model.js +56 -0
  425. package/dist/session-feedback-model.js.map +1 -0
  426. package/dist/session-list-model.d.ts +138 -0
  427. package/dist/session-list-model.js +274 -0
  428. package/dist/session-list-model.js.map +1 -0
  429. package/dist/session-realtime-7DJOIHQW.js +21 -0
  430. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  431. package/dist/session-realtime.d.ts +7 -0
  432. package/dist/session-realtime.js +19 -0
  433. package/dist/session-realtime.js.map +1 -0
  434. package/dist/session-status-model.d.ts +36 -0
  435. package/dist/session-ui.d.ts +39 -1
  436. package/dist/session-ui.js +126 -12
  437. package/dist/session-ui.js.map +1 -1
  438. package/dist/session.d.ts +8 -2
  439. package/dist/session.js +35 -20
  440. package/dist/site-snapshot.d.ts +14 -0
  441. package/dist/sites-ui.d.ts +24 -0
  442. package/dist/sites.d.ts +3 -0
  443. package/dist/sites.js +14 -0
  444. package/dist/sites.js.map +1 -0
  445. package/dist/skill-discovery.d.ts +47 -0
  446. package/dist/terminal.d.ts +8 -0
  447. package/dist/terminal.js +32 -0
  448. package/dist/terminal.js.map +1 -0
  449. package/dist/testing/session-scenarios.d.ts +10 -0
  450. package/dist/testing/session-scenarios.js +367 -0
  451. package/dist/testing/session-scenarios.js.map +1 -0
  452. package/dist/timeline/activity-rail.d.ts +11 -2
  453. package/dist/timeline/agent-identity.d.ts +30 -0
  454. package/dist/timeline/agent-row.d.ts +31 -0
  455. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  456. package/dist/timeline/compaction-copy.d.ts +46 -0
  457. package/dist/timeline/entrance.d.ts +13 -1
  458. package/dist/timeline/focus-sequence.d.ts +9 -0
  459. package/dist/timeline/genie-copy.d.ts +3 -0
  460. package/dist/timeline/genie-loading.d.ts +47 -0
  461. package/dist/timeline/index.d.ts +10 -5
  462. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  463. package/dist/timeline/message-sender.d.ts +19 -0
  464. package/dist/timeline/notice-presentation.d.ts +13 -0
  465. package/dist/timeline/parsers.d.ts +11 -0
  466. package/dist/timeline/patch-apply-command.d.ts +18 -0
  467. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  468. package/dist/timeline/platform-activity-row.d.ts +1 -2
  469. package/dist/timeline/presented-image.d.ts +11 -0
  470. package/dist/timeline/projection.d.ts +31 -2
  471. package/dist/timeline/provider-logo.d.ts +15 -0
  472. package/dist/timeline/question-nav-model.d.ts +23 -0
  473. package/dist/timeline/registry.d.ts +12 -1
  474. package/dist/timeline/retained-image.d.ts +18 -0
  475. package/dist/timeline/retained-loaders.d.ts +27 -0
  476. package/dist/timeline/rolling-activity.d.ts +11 -0
  477. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  478. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  479. package/dist/timeline/shared.d.ts +4 -1
  480. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  481. package/dist/timeline/startup-preference.d.ts +3 -0
  482. package/dist/timeline/startup-timings.d.ts +4 -0
  483. package/dist/timeline/tool-display-name.d.ts +5 -2
  484. package/dist/timeline/tool-presentation.d.ts +172 -0
  485. package/dist/timeline/turn-summary-model.d.ts +95 -0
  486. package/dist/timeline/turn-summary.d.ts +20 -54
  487. package/dist/timeline/types.d.ts +179 -7
  488. package/dist/timeline/work-presentation.d.ts +60 -0
  489. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  490. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  491. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  492. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  493. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  494. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  495. package/dist/timeline-model.d.ts +29 -0
  496. package/dist/timeline-model.js +254 -0
  497. package/dist/timeline-model.js.map +1 -0
  498. package/dist/usage/allowance-copy.d.ts +25 -0
  499. package/dist/usage/session-usage-limit.d.ts +88 -0
  500. package/dist/usage/summary.d.ts +35 -0
  501. package/dist/usage.d.ts +17 -0
  502. package/dist/usage.js +1187 -0
  503. package/dist/usage.js.map +1 -0
  504. package/dist/voice-recording-owner.d.ts +7 -0
  505. package/package.json +107 -7
  506. package/src/accounts.tsx +116 -14
  507. package/src/approvals.ts +8 -1
  508. package/src/artifacts-spreadsheet.ts +1 -0
  509. package/src/artifacts.ts +44 -0
  510. package/src/assets/README.md +8 -0
  511. package/src/assets/gmail.ico +0 -0
  512. package/src/assets/outlook.ico +0 -0
  513. package/src/capability-catalog-row.tsx +94 -0
  514. package/src/capability-logo-fallback.ts +22 -0
  515. package/src/client.ts +20 -31
  516. package/src/commands/registry.ts +18 -15
  517. package/src/commands/types.ts +2 -0
  518. package/src/components/anthropic-mark.tsx +10 -0
  519. package/src/components/approval-surface.tsx +401 -138
  520. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  521. package/src/components/artifacts/artifact-sandbox.tsx +189 -0
  522. package/src/components/artifacts/artifact-surface.tsx +40 -20
  523. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  524. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  525. package/src/components/artifacts/document-editor.tsx +141 -16
  526. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  527. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  528. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  529. package/src/components/artifacts/editable-document.tsx +37 -36
  530. package/src/components/artifacts/editable-presentation.tsx +36 -18
  531. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  532. package/src/components/artifacts/index.ts +45 -0
  533. package/src/components/artifacts/inline-html-document.ts +24 -0
  534. package/src/components/artifacts/latest-task-runner.ts +49 -0
  535. package/src/components/artifacts/presentation-editor.tsx +323 -67
  536. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  537. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  538. package/src/components/artifacts/site-view.tsx +121 -0
  539. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  540. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  541. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  542. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  543. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  544. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  545. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  546. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  547. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  548. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  549. package/src/components/browser-select-control.tsx +312 -0
  550. package/src/components/browser-viewer.tsx +778 -318
  551. package/src/components/chat-composer.tsx +47 -5
  552. package/src/components/child-session-link.tsx +36 -0
  553. package/src/components/claude-mark.tsx +11 -0
  554. package/src/components/code-editor.tsx +13 -16
  555. package/src/components/composer-transcription-control.tsx +128 -30
  556. package/src/components/composer.tsx +404 -195
  557. package/src/components/computer-viewer.tsx +880 -253
  558. package/src/components/copy-button.tsx +13 -5
  559. package/src/components/desktop-viewer.tsx +1 -1
  560. package/src/components/enrollment-consent.tsx +1 -1
  561. package/src/components/enrollment-device-flow.tsx +1 -1
  562. package/src/components/file-browser.tsx +10 -14
  563. package/src/components/fleet-tile.tsx +9 -18
  564. package/src/components/generated-video-player.tsx +4 -2
  565. package/src/components/grok-mark.tsx +34 -0
  566. package/src/components/human-input-form.tsx +590 -283
  567. package/src/components/human-input-surface.tsx +11 -0
  568. package/src/components/interaction-intervention-banner.tsx +2 -2
  569. package/src/components/linkified-text.tsx +79 -0
  570. package/src/components/machine-card.tsx +35 -78
  571. package/src/components/machine-dock-bar.tsx +1 -1
  572. package/src/components/machine-input-display.ts +197 -3
  573. package/src/components/machines/agent-status-icon.tsx +31 -0
  574. package/src/components/machines/machine-detail.tsx +200 -31
  575. package/src/components/machines/machine-operation-policy.tsx +1 -1
  576. package/src/components/machines/machine-status.ts +241 -0
  577. package/src/components/machines-dashboard.tsx +2 -17
  578. package/src/components/markdown-table-layout.ts +143 -0
  579. package/src/components/markdown.tsx +466 -129
  580. package/src/components/message-timeline.tsx +2567 -728
  581. package/src/components/model-mark.tsx +102 -0
  582. package/src/components/model-picker.tsx +15 -4
  583. package/src/components/model-policy-picker-menu.tsx +371 -0
  584. package/src/components/model-policy-picker.tsx +256 -412
  585. package/src/components/new-conversation.tsx +221 -0
  586. package/src/components/open-geni-chat.tsx +309 -0
  587. package/src/components/open-geni-links.tsx +179 -0
  588. package/src/components/openrouter-mark.tsx +13 -0
  589. package/src/components/opper-mark.tsx +18 -0
  590. package/src/components/pierre-diff.tsx +41 -16
  591. package/src/components/pierre-file.tsx +35 -10
  592. package/src/components/preview-loading.tsx +109 -0
  593. package/src/components/provider-recovery-notice.tsx +49 -0
  594. package/src/components/queue-item-content.ts +14 -0
  595. package/src/components/queue-surface-implementation.tsx +51 -356
  596. package/src/components/queue-surface-state.tsx +3 -1
  597. package/src/components/rehype-secret-refs.ts +98 -0
  598. package/src/components/remark-soft-line-breaks.ts +166 -0
  599. package/src/components/sandbox-files.tsx +91 -15
  600. package/src/components/sandbox-terminal.tsx +84 -13
  601. package/src/components/sandbox-workspace.tsx +147 -51
  602. package/src/components/secret-question-field.tsx +324 -0
  603. package/src/components/secret-ref-chip.tsx +185 -0
  604. package/src/components/session-capability-frame.tsx +197 -0
  605. package/src/components/session-chrome.tsx +842 -251
  606. package/src/components/session-commands-panel.tsx +126 -0
  607. package/src/components/session-commands.tsx +18 -0
  608. package/src/components/session-connection-request.tsx +97 -0
  609. package/src/components/session-conversation.tsx +876 -0
  610. package/src/components/session-list.tsx +257 -0
  611. package/src/components/session-mcp-capability-card.tsx +680 -0
  612. package/src/components/session-proxy-scope.tsx +153 -0
  613. package/src/components/session-status.tsx +26 -17
  614. package/src/components/session-usage-limit-notice.tsx +174 -0
  615. package/src/components/timeline-anchor.tsx +119 -0
  616. package/src/components/timeline-annotation-chrome.tsx +196 -0
  617. package/src/components/timeline-annotation-layout.ts +268 -0
  618. package/src/components/timeline-annotation-markers.tsx +185 -0
  619. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  620. package/src/components/timeline-annotation-selection.tsx +106 -54
  621. package/src/components/timeline-annotation-shared.ts +245 -0
  622. package/src/components/timeline-annotations-dialog.tsx +185 -128
  623. package/src/components/timeline-annotations.tsx +189 -45
  624. package/src/components/timeline-reading-progress.ts +80 -0
  625. package/src/components/timeline-search.tsx +168 -0
  626. package/src/components/timeline-settlement.ts +60 -0
  627. package/src/components/tip-follow.ts +52 -0
  628. package/src/components/tool-action-review.tsx +650 -0
  629. package/src/components/tool-review-history.tsx +88 -0
  630. package/src/components/tooltip.tsx +38 -5
  631. package/src/components/usage-limit-notice.tsx +179 -0
  632. package/src/components/usage-member-list.tsx +792 -0
  633. package/src/components/usage-meter.tsx +382 -0
  634. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  635. package/src/components/user-message-body.tsx +27 -2
  636. package/src/components/workspace-dock.tsx +18 -1
  637. package/src/composer-messages.ts +150 -0
  638. package/src/composer-voice-events.ts +12 -0
  639. package/src/composer.ts +6 -1
  640. package/src/connect-account-identity.tsx +34 -0
  641. package/src/connect-accounts.tsx +233 -0
  642. package/src/connect-chooser.tsx +336 -0
  643. package/src/connect-panel.tsx +99 -0
  644. package/src/connect-setup.tsx +355 -0
  645. package/src/connect.ts +60 -0
  646. package/src/connection-assets.d.ts +4 -0
  647. package/src/connection-catalog.tsx +162 -0
  648. package/src/connection-discovery.tsx +238 -0
  649. package/src/connection-installed.tsx +51 -0
  650. package/src/connection-logo.tsx +37 -0
  651. package/src/connection-service-logo.tsx +55 -0
  652. package/src/connection-service-presentation.ts +46 -0
  653. package/src/connection-skeleton.tsx +16 -0
  654. package/src/connection-type-picker.tsx +36 -0
  655. package/src/conversation-timeline.ts +92 -0
  656. package/src/desktop.ts +24 -0
  657. package/src/device-authorization.tsx +98 -0
  658. package/src/diffs.ts +16 -0
  659. package/src/discovery-cache.ts +42 -0
  660. package/src/editor.ts +13 -0
  661. package/src/hooks/internal.ts +3 -2
  662. package/src/hooks/latest-question.ts +164 -0
  663. package/src/hooks/shared-machines-list.ts +34 -1
  664. package/src/hooks/shared-query.ts +721 -0
  665. package/src/hooks/use-attached-browsers.ts +1 -1
  666. package/src/hooks/use-auth-runs.ts +0 -27
  667. package/src/hooks/use-available-models.ts +21 -15
  668. package/src/hooks/use-browser-frame-stream.ts +19 -2
  669. package/src/hooks/use-browser-session.ts +680 -205
  670. package/src/hooks/use-browser-sessions.ts +32 -1
  671. package/src/hooks/use-client-config-flags.ts +118 -0
  672. package/src/hooks/use-codex-accounts.ts +247 -47
  673. package/src/hooks/use-composer.ts +276 -47
  674. package/src/hooks/use-computer-frame-stream.ts +25 -7
  675. package/src/hooks/use-computer-input-posture.ts +94 -0
  676. package/src/hooks/use-computer-session.ts +409 -95
  677. package/src/hooks/use-connect.ts +23 -0
  678. package/src/hooks/use-desktop-stream.ts +19 -28
  679. package/src/hooks/use-file-attachments.ts +80 -4
  680. package/src/hooks/use-goal.ts +107 -13
  681. package/src/hooks/use-last-started-turn-policy.ts +46 -14
  682. package/src/hooks/use-machines.ts +4 -0
  683. package/src/hooks/use-new-conversation.ts +374 -0
  684. package/src/hooks/use-new-session-draft.ts +813 -0
  685. package/src/hooks/use-realtime-voice-models.ts +46 -0
  686. package/src/hooks/use-sandbox-files.ts +68 -20
  687. package/src/hooks/use-session-background-commands.ts +22 -11
  688. package/src/hooks/use-session-capabilities.ts +3 -2
  689. package/src/hooks/use-session-conversation.ts +150 -0
  690. package/src/hooks/use-session-events.ts +703 -382
  691. package/src/hooks/use-session-lineage.ts +20 -16
  692. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  693. package/src/hooks/use-session-model-account.ts +174 -0
  694. package/src/hooks/use-session.ts +53 -21
  695. package/src/hooks/use-slash-commands.ts +6 -11
  696. package/src/hooks/use-supergrok-accounts.ts +22 -8
  697. package/src/hooks/use-terminal-stream.ts +153 -27
  698. package/src/hooks/use-transcription.ts +6 -0
  699. package/src/hooks/use-turn-queue.ts +2 -1
  700. package/src/hooks/use-usage.ts +100 -0
  701. package/src/hooks/use-vaults.ts +153 -0
  702. package/src/hooks/use-video-artifact-playback.ts +1 -1
  703. package/src/hooks/use-voice-input.ts +127 -19
  704. package/src/hooks/use-workspace-capture.ts +3 -2
  705. package/src/hooks/use-workspace-edit.ts +23 -5
  706. package/src/hooks/use-workspace-sessions.ts +97 -32
  707. package/src/human-input-model.ts +359 -0
  708. package/src/identity-link-accounts.tsx +148 -0
  709. package/src/identity-link-consent.tsx +192 -0
  710. package/src/index.ts +262 -16
  711. package/src/interaction.ts +1 -0
  712. package/src/lib/clipboard.ts +29 -0
  713. package/src/lib/error-message.ts +37 -0
  714. package/src/lib/format.ts +213 -16
  715. package/src/lib/host-theme.ts +529 -0
  716. package/src/lib/interaction-errors.ts +15 -0
  717. package/src/lib/menu-styles.ts +44 -0
  718. package/src/lib/notify-observer.ts +15 -0
  719. package/src/lib/pierre-diffs-loader.ts +53 -0
  720. package/src/lib/provider-recovery.ts +243 -0
  721. package/src/lib/scrollbars.ts +30 -0
  722. package/src/lib/terminal-input-readiness.ts +51 -0
  723. package/src/lib/transient-retry.ts +99 -0
  724. package/src/lib/workbench-peers.ts +62 -0
  725. package/src/lib/xterm-theme.ts +23 -21
  726. package/src/mcp-connection-status.ts +35 -0
  727. package/src/model-mark-paths.ts +53 -0
  728. package/src/model-picker-model.ts +330 -0
  729. package/src/model-policy.ts +299 -74
  730. package/src/native-previews.ts +100 -0
  731. package/src/new-session-draft.ts +22 -0
  732. package/src/notification-text.ts +81 -0
  733. package/src/older-history.ts +22 -4
  734. package/src/organization-model.ts +118 -0
  735. package/src/plugin-details.tsx +185 -0
  736. package/src/plugin-discovery.tsx +196 -0
  737. package/src/preview-loading-paint.ts +68 -0
  738. package/src/provider.tsx +74 -15
  739. package/src/queue-presentation-model.ts +464 -0
  740. package/src/realtime/dropdown-menu.tsx +19 -12
  741. package/src/realtime/embedded-new-voice.tsx +1 -0
  742. package/src/realtime/embedded-voice.tsx +3 -0
  743. package/src/realtime/realtime-control.tsx +138 -501
  744. package/src/realtime/session-realtime.ts +566 -0
  745. package/src/sandbox-label-model.ts +53 -0
  746. package/src/scrollbars.ts +3 -0
  747. package/src/secret-reference-label.ts +43 -0
  748. package/src/secrets-ui.tsx +59 -0
  749. package/src/session-agents-model.ts +33 -0
  750. package/src/session-attention-model.ts +62 -0
  751. package/src/session-auth-recommendation.ts +48 -0
  752. package/src/session-capability-policy.ts +196 -0
  753. package/src/session-context.ts +3 -4
  754. package/src/session-feedback-model.ts +95 -0
  755. package/src/session-list-model.ts +434 -0
  756. package/src/session-realtime.ts +18 -0
  757. package/src/session-status-model.ts +99 -0
  758. package/src/session-ui.ts +98 -1
  759. package/src/session.ts +17 -1
  760. package/src/site-snapshot.ts +74 -0
  761. package/src/sites-ui.tsx +348 -0
  762. package/src/sites.ts +3 -0
  763. package/src/skill-discovery.tsx +208 -0
  764. package/src/terminal.ts +26 -0
  765. package/src/testing/session-scenarios.ts +404 -0
  766. package/src/timeline/activity-rail.tsx +242 -101
  767. package/src/timeline/agent-identity.tsx +84 -0
  768. package/src/timeline/agent-row.tsx +231 -0
  769. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  770. package/src/timeline/compaction-copy.ts +115 -0
  771. package/src/timeline/entrance.tsx +28 -3
  772. package/src/timeline/fleet-decision-projection.ts +2 -1
  773. package/src/timeline/fleet-decision-row.tsx +1 -0
  774. package/src/timeline/focus-sequence.ts +44 -0
  775. package/src/timeline/genie-copy.ts +19 -0
  776. package/src/timeline/genie-loading.tsx +143 -0
  777. package/src/timeline/index.ts +30 -2
  778. package/src/timeline/knowledge-receipt.tsx +100 -0
  779. package/src/timeline/message-sender.tsx +71 -0
  780. package/src/timeline/notice-presentation.ts +48 -0
  781. package/src/timeline/parsers.ts +42 -2
  782. package/src/timeline/patch-apply-command.tsx +135 -0
  783. package/src/timeline/platform-activity-presentation.ts +166 -0
  784. package/src/timeline/platform-activity-row.tsx +15 -90
  785. package/src/timeline/presented-image.ts +63 -0
  786. package/src/timeline/projection.ts +1746 -76
  787. package/src/timeline/provider-logo.tsx +53 -0
  788. package/src/timeline/question-nav-model.ts +28 -0
  789. package/src/timeline/registry.ts +26 -4
  790. package/src/timeline/retained-image.ts +97 -0
  791. package/src/timeline/retained-loaders.ts +91 -0
  792. package/src/timeline/rolling-activity.tsx +80 -0
  793. package/src/timeline/screenshot-lightbox.tsx +228 -5
  794. package/src/timeline/session-usage-limit-row.tsx +42 -0
  795. package/src/timeline/shared.tsx +42 -15
  796. package/src/timeline/startup-dispatch-details.tsx +36 -0
  797. package/src/timeline/startup-preference.ts +33 -0
  798. package/src/timeline/startup-timings.tsx +145 -0
  799. package/src/timeline/tool-display-name.ts +19 -7
  800. package/src/timeline/tool-presentation.ts +1316 -0
  801. package/src/timeline/tool-renderers.tsx +835 -1138
  802. package/src/timeline/turn-summary-model.ts +343 -0
  803. package/src/timeline/turn-summary.tsx +272 -365
  804. package/src/timeline/types.ts +189 -6
  805. package/src/timeline/work-presentation.ts +189 -0
  806. package/src/timeline-model.ts +143 -0
  807. package/src/usage/allowance-copy.ts +64 -0
  808. package/src/usage/session-usage-limit.ts +266 -0
  809. package/src/usage/summary.ts +93 -0
  810. package/src/usage.ts +70 -0
  811. package/src/voice-recording-owner.ts +22 -0
  812. package/styles/compiled.css +2319 -748
  813. package/styles/connect.css +290 -0
  814. package/styles/connect.d.ts +1 -0
  815. package/styles/effective-tokens.css +1 -0
  816. package/styles/index.css +309 -9
  817. package/styles/responsive.css +99 -7
  818. package/styles/session-capability.css +44 -0
  819. package/styles/tokens.css +134 -66
  820. package/dist/browser-viewer-AEFHUYZK.js +0 -14
  821. package/dist/chunk-4MDLEHXL.js.map +0 -1
  822. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  823. package/dist/chunk-D3UIAJKY.js.map +0 -1
  824. package/dist/chunk-ELIYWBZR.js.map +0 -1
  825. package/dist/chunk-H5YGYNXS.js.map +0 -1
  826. package/dist/chunk-HQVCKCLG.js +0 -9458
  827. package/dist/chunk-HQVCKCLG.js.map +0 -1
  828. package/dist/chunk-HUIKIDM5.js.map +0 -1
  829. package/dist/chunk-ICA6R6TW.js.map +0 -1
  830. package/dist/chunk-JVYQRRC4.js.map +0 -1
  831. package/dist/chunk-KCGXPP5V.js.map +0 -1
  832. package/dist/chunk-KZ73RL76.js.map +0 -1
  833. package/dist/chunk-LAKLF4PA.js +0 -141
  834. package/dist/chunk-LAKLF4PA.js.map +0 -1
  835. package/dist/chunk-MZ2G2XBA.js.map +0 -1
  836. package/dist/chunk-NEXLLTP4.js.map +0 -1
  837. package/dist/chunk-OAM4WAAM.js.map +0 -1
  838. package/dist/chunk-PEI6RANI.js.map +0 -1
  839. package/dist/chunk-RGALCTWO.js.map +0 -1
  840. package/dist/chunk-W6NFJXSA.js +0 -454
  841. package/dist/chunk-W6NFJXSA.js.map +0 -1
  842. package/dist/chunk-WSK7G5LE.js +0 -170
  843. package/dist/chunk-WSK7G5LE.js.map +0 -1
  844. package/dist/chunk-X4A66EWZ.js +0 -223
  845. package/dist/chunk-X4A66EWZ.js.map +0 -1
  846. package/dist/chunk-XXWH2JLC.js.map +0 -1
  847. package/dist/chunk-YFKJ7VZH.js +0 -268
  848. package/dist/chunk-YFKJ7VZH.js.map +0 -1
  849. package/dist/chunk-YJFGAFBD.js.map +0 -1
  850. package/dist/computer-viewer-FWEZISW4.js +0 -16
  851. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  852. package/dist/hooks/use-environments.d.ts +0 -41
  853. package/dist/hooks/use-packs.d.ts +0 -32
  854. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  855. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  856. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  857. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  858. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  859. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  860. package/src/hooks/use-environments.ts +0 -182
  861. package/src/hooks/use-packs.ts +0 -157
  862. /package/dist/{browser-viewer-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  863. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.js.map} +0 -0
package/dist/accounts.js CHANGED
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  // src/accounts.tsx
2
4
  import {
3
5
  createContext,
@@ -73,6 +75,7 @@ function BrowserAccountsProvider({
73
75
  const completionOperationRef = useRef(null);
74
76
  const cancelOperationRef = useRef(null);
75
77
  const pendingCommitSequenceRef = useRef(null);
78
+ const pendingServerMutationSequenceRef = useRef(null);
76
79
  const invalidatedDuringPendingCommitRef = useRef(false);
77
80
  const sequenceRef = useRef(0);
78
81
  const transitionAbortRef = useRef(null);
@@ -122,7 +125,7 @@ function BrowserAccountsProvider({
122
125
  setTransaction(null);
123
126
  }, []);
124
127
  const settleActorTransition = useCallback(
125
- async (kind, from, accepted, sequence, publish, authorityResetConfirmed = false) => {
128
+ async (kind, from, accepted, sequence, publish, authorityResetConfirmed = false, initiatingSurfaceFenced = false) => {
126
129
  let source = from;
127
130
  let target = accepted;
128
131
  if (!authorityResetConfirmed && from && target && isOlderProjection(target, from)) {
@@ -132,7 +135,7 @@ function BrowserAccountsProvider({
132
135
  throw new Error("Browser account response regressed the accepted actor epoch");
133
136
  }
134
137
  }
135
- if (sameSelectedActor(source, target)) {
138
+ if (!initiatingSurfaceFenced && sameSelectedActor(source, target)) {
136
139
  setProjection(target);
137
140
  setPhase("ready");
138
141
  setError(null);
@@ -144,7 +147,13 @@ function BrowserAccountsProvider({
144
147
  transitionAbortRef.current = controller;
145
148
  if (publish) publishActorHint(target);
146
149
  setPhase("loading");
147
- await onActorTransition({ kind, from: source, to: target, signal: controller.signal });
150
+ await onActorTransition({
151
+ kind,
152
+ from: initiatingSurfaceFenced ? null : source,
153
+ to: target,
154
+ signal: controller.signal
155
+ });
156
+ initiatingSurfaceFenced = false;
148
157
  if (controller.signal.aborted || sequenceRef.current !== sequence) return null;
149
158
  if (!target) {
150
159
  setProjection(null);
@@ -234,16 +243,34 @@ function BrowserAccountsProvider({
234
243
  pending.expectedGeneration = expectedGeneration;
235
244
  const sequence = ++sequenceRef.current;
236
245
  pendingCommitSequenceRef.current = sequence;
246
+ pendingServerMutationSequenceRef.current = null;
237
247
  invalidatedDuringPendingCommitRef.current = false;
238
248
  pendingRef.current = pending;
239
249
  setPhase("committing");
240
250
  setError(null);
241
251
  const changesActor = pending.changesActor(current);
242
- if (changesActor) {
243
- publishActorHold(pending.operationId, current);
244
- await yieldToCrossTabActorHold();
245
- }
252
+ let initiatingActorFenced = false;
246
253
  try {
254
+ if (changesActor) {
255
+ publishActorHold(pending.operationId, current);
256
+ transitionAbortRef.current?.abort();
257
+ const controller = new AbortController();
258
+ transitionAbortRef.current = controller;
259
+ projectionRef.current = null;
260
+ setProjection(null);
261
+ setPhase("loading");
262
+ initiatingActorFenced = true;
263
+ await onActorTransition({
264
+ kind: pending.kind,
265
+ from: current,
266
+ to: null,
267
+ signal: controller.signal
268
+ });
269
+ if (controller.signal.aborted || sequenceRef.current !== sequence) return false;
270
+ await yieldToCrossTabActorHold();
271
+ if (controller.signal.aborted || sequenceRef.current !== sequence) return false;
272
+ }
273
+ pendingServerMutationSequenceRef.current = sequence;
247
274
  let accepted;
248
275
  try {
249
276
  accepted = await pending.execute(expectedGeneration);
@@ -259,7 +286,14 @@ function BrowserAccountsProvider({
259
286
  if (sequenceRef.current !== sequence) return false;
260
287
  }
261
288
  pendingRef.current = null;
262
- if (!authorityResetConfirmed && sameSelectedActor(current, accepted)) {
289
+ if (pendingServerMutationSequenceRef.current === sequence) {
290
+ pendingServerMutationSequenceRef.current = null;
291
+ }
292
+ if (pendingCommitSequenceRef.current === sequence) {
293
+ pendingCommitSequenceRef.current = null;
294
+ invalidatedDuringPendingCommitRef.current = false;
295
+ }
296
+ if (!initiatingActorFenced && !authorityResetConfirmed && sameSelectedActor(current, accepted)) {
263
297
  setProjection(accepted);
264
298
  setPhase("ready");
265
299
  setError(null);
@@ -270,21 +304,58 @@ function BrowserAccountsProvider({
270
304
  accepted,
271
305
  sequence,
272
306
  true,
273
- authorityResetConfirmed
307
+ authorityResetConfirmed,
308
+ initiatingActorFenced
274
309
  );
275
310
  }
276
311
  return true;
277
312
  } catch (caught) {
313
+ if (initiatingActorFenced) {
314
+ let authorityRestored = false;
315
+ try {
316
+ const restored = await client.reconcileSessionSetAuthority();
317
+ if (sequenceRef.current !== sequence) return false;
318
+ await settleActorTransition(
319
+ pending.kind,
320
+ current,
321
+ restored,
322
+ sequence,
323
+ false,
324
+ true,
325
+ true
326
+ );
327
+ if (sequenceRef.current !== sequence) return false;
328
+ authorityRestored = true;
329
+ } catch {
330
+ }
331
+ if (authorityRestored) {
332
+ const restoredError = accountError(caught);
333
+ setError(restoredError);
334
+ setPhase("recoverable_error");
335
+ throw restoredError;
336
+ }
337
+ }
278
338
  return await fail(caught, pending.kind);
279
339
  } finally {
280
340
  if (changesActor) publishActorRelease(pending.operationId);
341
+ if (pendingServerMutationSequenceRef.current === sequence) {
342
+ pendingServerMutationSequenceRef.current = null;
343
+ }
281
344
  if (pendingCommitSequenceRef.current === sequence) {
282
345
  pendingCommitSequenceRef.current = null;
283
346
  invalidatedDuringPendingCommitRef.current = false;
284
347
  }
285
348
  }
286
349
  },
287
- [client, fail, inspectBlockers, publishActorHold, publishActorRelease, settleActorTransition]
350
+ [
351
+ client,
352
+ fail,
353
+ inspectBlockers,
354
+ onActorTransition,
355
+ publishActorHold,
356
+ publishActorRelease,
357
+ settleActorTransition
358
+ ]
288
359
  );
289
360
  const refresh = useCallback(async () => {
290
361
  try {
@@ -317,11 +388,18 @@ function BrowserAccountsProvider({
317
388
  [clearLoginTransactionState, onActorTransition]
318
389
  );
319
390
  const invalidateActor = useCallback(async () => {
320
- if (pendingCommitSequenceRef.current !== null) {
391
+ const pendingCommitSequence = pendingCommitSequenceRef.current;
392
+ if (pendingCommitSequence !== null && pendingServerMutationSequenceRef.current === pendingCommitSequence) {
321
393
  invalidatedDuringPendingCommitRef.current = true;
322
394
  await beginNeutralActorInvalidation(projectionRef.current);
323
395
  return null;
324
396
  }
397
+ if (pendingCommitSequence !== null) {
398
+ pendingCommitSequenceRef.current = null;
399
+ pendingServerMutationSequenceRef.current = null;
400
+ invalidatedDuringPendingCommitRef.current = false;
401
+ pendingRef.current = null;
402
+ }
325
403
  const sequence = ++sequenceRef.current;
326
404
  const before = projectionRef.current;
327
405
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/accounts.tsx"],"sourcesContent":["import type {\n BrowserAccountsClientLike,\n ManagedAuthDeepLinkResolution,\n ManagedAuthLoginTransaction,\n ManagedAuthSessionSetProjection,\n} from \"@opengeni/sdk/accounts\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nexport type BrowserAccountTransitionPhase =\n | \"preflight\"\n | \"blocked\"\n | \"committing\"\n | \"loading\"\n | \"ready\"\n | \"recoverable_error\";\n\nexport type BrowserAccountTransitionKind =\n | \"add\"\n | \"select\"\n | \"logout_one\"\n | \"logout_all\"\n | \"reauth\"\n | \"cross_tab\";\n\nexport type BrowserAccountTransitionBlocker = {\n id: string;\n label: string;\n detail?: string | undefined;\n};\n\nexport type BrowserAccountTransition = {\n kind: BrowserAccountTransitionKind;\n from: ManagedAuthSessionSetProjection | null;\n to: ManagedAuthSessionSetProjection | null;\n signal: AbortSignal;\n};\n\nexport type BrowserAccountsProviderProps = {\n client: BrowserAccountsClientLike;\n /**\n * Hide the authenticated tree, abort old actor work, clear tenant-bound\n * state, recreate credentials/clients, and refetch principal access here.\n * Cross-tab/server invalidation first calls this with `to: null` as a\n * neutral fence before authority is reread, then calls it with the accepted\n * projection after the new actor is known.\n */\n onActorTransition: (transition: BrowserAccountTransition) => Promise<void>;\n children?: ReactNode;\n broadcastChannelName?: string | null | undefined;\n /** Adopt the already-authenticated legacy provider session during dual-mode rollout. */\n bootstrapLegacySession?: boolean | undefined;\n};\n\ntype BlockerInspector = () => BrowserAccountTransitionBlocker | null;\n\ntype PendingNonSecretTransition = {\n kind: Exclude<BrowserAccountTransitionKind, \"add\" | \"reauth\" | \"cross_tab\">;\n operationId: string;\n expectedGeneration: string | null;\n changesActor: (projection: ManagedAuthSessionSetProjection) => boolean;\n execute: (expectedGeneration: string) => Promise<ManagedAuthSessionSetProjection>;\n};\n\nexport type BrowserAccountsContextValue = {\n projection: ManagedAuthSessionSetProjection | null;\n phase: BrowserAccountTransitionPhase;\n blockers: BrowserAccountTransitionBlocker[];\n error: Error | null;\n transaction: ManagedAuthLoginTransaction | null;\n hasPendingTransition: boolean;\n refresh: () => Promise<ManagedAuthSessionSetProjection | null>;\n invalidateActor: () => Promise<ManagedAuthSessionSetProjection | null>;\n registerTransitionBlocker: (id: string, inspect: BlockerInspector) => () => void;\n continueTransition: () => Promise<boolean>;\n cancelPendingTransition: () => void;\n beginAdd: (returnIntent?: string | undefined) => Promise<ManagedAuthLoginTransaction>;\n beginReauth: (\n slotId: string,\n returnIntent?: string | undefined,\n ) => Promise<ManagedAuthLoginTransaction>;\n completeEmailPassword: (input: { email: string; password: string }) => Promise<boolean>;\n settleExternalLoginTransaction: (transactionId: string) => Promise<boolean>;\n cancelLoginTransaction: () => Promise<void>;\n selectSlot: (slotId: string) => Promise<boolean>;\n logoutSlot: (slotId: string, replacementSlotId: string | null) => Promise<boolean>;\n logoutAll: () => Promise<boolean>;\n resolveDeepLink: (path: string) => Promise<ManagedAuthDeepLinkResolution>;\n};\n\nconst BrowserAccountsContext = createContext<BrowserAccountsContextValue | null>(null);\nconst DEFAULT_CHANNEL = \"opengeni:browser-account-epoch:v1\";\nconst CROSS_TAB_ACTOR_HOLD_MS = 30_000;\n\nasync function yieldToCrossTabActorHold(): Promise<void> {\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n}\n\nfunction operationId(): string {\n return crypto.randomUUID();\n}\n\nfunction sameActor(\n left: ManagedAuthSessionSetProjection | null,\n right: ManagedAuthSessionSetProjection | null,\n): boolean {\n return (\n left?.generation === right?.generation &&\n left?.actorEpoch === right?.actorEpoch &&\n left?.selectedSlotId === right?.selectedSlotId &&\n left?.state === right?.state\n );\n}\n\nfunction sameSelectedActor(\n left: ManagedAuthSessionSetProjection | null,\n right: ManagedAuthSessionSetProjection | null,\n): boolean {\n return (\n left !== null &&\n right !== null &&\n left.actorEpoch === right.actorEpoch &&\n left.selectedSlotId === right.selectedSlotId &&\n left.state === right.state\n );\n}\n\nfunction compareCounter(left: string, right: string): number {\n const leftValue = BigInt(left);\n const rightValue = BigInt(right);\n return leftValue < rightValue ? -1 : leftValue > rightValue ? 1 : 0;\n}\n\nfunction isOlderProjection(\n candidate: ManagedAuthSessionSetProjection,\n current: ManagedAuthSessionSetProjection,\n): boolean {\n const epoch = compareCounter(candidate.actorEpoch, current.actorEpoch);\n return epoch < 0 || (epoch === 0 && compareCounter(candidate.generation, current.generation) < 0);\n}\n\nfunction accountError(error: unknown): Error {\n return error instanceof Error ? error : new Error(\"Browser account operation failed\");\n}\n\nfunction supersededOperationError(): Error {\n const error = new Error(\"Browser account operation was superseded by an actor change\");\n error.name = \"AbortError\";\n return error;\n}\n\nfunction errorCode(error: unknown): string | null {\n if (!error || typeof error !== \"object\") return null;\n const code = (error as { code?: unknown }).code;\n return typeof code === \"string\" ? code : null;\n}\n\nfunction needsReconciliation(error: unknown): boolean {\n return new Set([\"actor_change_required\", \"generation_conflict\", \"operation_outcome_unknown\"]).has(\n errorCode(error) ?? \"\",\n );\n}\n\nexport function BrowserAccountsProvider({\n client,\n onActorTransition,\n children,\n broadcastChannelName = DEFAULT_CHANNEL,\n bootstrapLegacySession = false,\n}: BrowserAccountsProviderProps) {\n const [projection, setProjection] = useState<ManagedAuthSessionSetProjection | null>(null);\n const [phase, setPhase] = useState<BrowserAccountTransitionPhase>(\"loading\");\n const [blockers, setBlockers] = useState<BrowserAccountTransitionBlocker[]>([]);\n const [error, setError] = useState<Error | null>(null);\n const [transaction, setTransaction] = useState<ManagedAuthLoginTransaction | null>(null);\n const projectionRef = useRef(projection);\n const transactionRef = useRef(transaction);\n const blockerInspectorsRef = useRef(new Map<string, BlockerInspector>());\n const pendingRef = useRef<PendingNonSecretTransition | null>(null);\n const transactionTargetSlotIdRef = useRef<string | null>(null);\n const beginOperationRef = useRef<{ signature: string; operationId: string } | null>(null);\n const bootstrapOperationRef = useRef<{ generation: string; operationId: string } | null>(null);\n const completionOperationRef = useRef<{\n operationId: string;\n expectedGeneration: string;\n } | null>(null);\n const cancelOperationRef = useRef<{\n operationId: string;\n expectedGeneration: string;\n } | null>(null);\n const pendingCommitSequenceRef = useRef<number | null>(null);\n const invalidatedDuringPendingCommitRef = useRef(false);\n const sequenceRef = useRef(0);\n const transitionAbortRef = useRef<AbortController | null>(null);\n const channelRef = useRef<BroadcastChannel | null>(null);\n const crossTabActorHoldsRef = useRef(new Map<string, ReturnType<typeof setTimeout>>());\n projectionRef.current = projection;\n transactionRef.current = transaction;\n\n const inspectBlockers = useCallback((): BrowserAccountTransitionBlocker[] => {\n const current = [...blockerInspectorsRef.current.entries()]\n .map(([id, inspect]) => {\n const blocker = inspect();\n return blocker ? { ...blocker, id } : null;\n })\n .filter((value): value is BrowserAccountTransitionBlocker => value !== null)\n .sort((left, right) => left.id.localeCompare(right.id));\n setBlockers(current);\n return current;\n }, []);\n\n const publishActorHint = useCallback((next: ManagedAuthSessionSetProjection | null) => {\n if (!next) return;\n channelRef.current?.postMessage({\n type: \"actor-epoch-changed\",\n generation: next.generation,\n actorEpoch: next.actorEpoch,\n });\n }, []);\n\n const publishActorHold = useCallback(\n (transitionId: string, current: ManagedAuthSessionSetProjection) => {\n channelRef.current?.postMessage({\n type: \"actor-transition-pending\",\n transitionId,\n generation: current.generation,\n actorEpoch: current.actorEpoch,\n });\n },\n [],\n );\n\n const publishActorRelease = useCallback((transitionId: string) => {\n channelRef.current?.postMessage({\n type: \"actor-transition-released\",\n transitionId,\n });\n }, []);\n\n const clearLoginTransactionState = useCallback(() => {\n transactionRef.current = null;\n beginOperationRef.current = null;\n completionOperationRef.current = null;\n cancelOperationRef.current = null;\n transactionTargetSlotIdRef.current = null;\n setTransaction(null);\n }, []);\n\n const settleActorTransition = useCallback(\n async (\n kind: BrowserAccountTransitionKind,\n from: ManagedAuthSessionSetProjection | null,\n accepted: ManagedAuthSessionSetProjection | null,\n sequence: number,\n publish: boolean,\n authorityResetConfirmed = false,\n ): Promise<ManagedAuthSessionSetProjection | null> => {\n let source = from;\n let target = accepted;\n if (!authorityResetConfirmed && from && target && isOlderProjection(target, from)) {\n target = await client.getSessionSet();\n if (sequenceRef.current !== sequence) return null;\n if (isOlderProjection(target, from)) {\n throw new Error(\"Browser account response regressed the accepted actor epoch\");\n }\n }\n if (sameSelectedActor(source, target)) {\n setProjection(target);\n setPhase(\"ready\");\n setError(null);\n return target;\n }\n while (true) {\n transitionAbortRef.current?.abort();\n const controller = new AbortController();\n transitionAbortRef.current = controller;\n // The accepted mutation is already server authority. Notify peers now,\n // before this tab waits for its own auth/access reload, so they can hide\n // and abort old-actor work throughout that entire window.\n if (publish) publishActorHint(target);\n setPhase(\"loading\");\n await onActorTransition({ kind, from: source, to: target, signal: controller.signal });\n if (controller.signal.aborted || sequenceRef.current !== sequence) return null;\n if (!target) {\n setProjection(null);\n setPhase(\"ready\");\n setError(null);\n return null;\n }\n const confirmed = await client.reconcileSessionSetAuthority();\n if (controller.signal.aborted || sequenceRef.current !== sequence) return null;\n if (sameActor(target, confirmed) || sameSelectedActor(target, confirmed)) {\n setProjection(confirmed);\n setPhase(\"ready\");\n setError(null);\n return confirmed;\n }\n // Tenant state was loaded for an authority that rotated again while\n // the host callback was pending. The explicit two-probe result is the\n // new authority even when its counters are lower, so keep the actor\n // hidden and settle that authority before exposing ready state.\n source = target;\n target = confirmed;\n }\n },\n [client, onActorTransition, publishActorHint],\n );\n\n const reconcile = useCallback(\n async (kind: BrowserAccountTransitionKind, publish = false) => {\n const sequence = ++sequenceRef.current;\n const before = projectionRef.current;\n setPhase(\"loading\");\n let first = await client.reconcileSessionSetAuthority();\n if (sequenceRef.current !== sequence) return null;\n if (\n bootstrapLegacySession &&\n first.mode === \"dual\" &&\n first.selectedSlotId === null &&\n first.slots.length === 0\n ) {\n const bootstrapOperation =\n bootstrapOperationRef.current?.generation === first.generation\n ? bootstrapOperationRef.current.operationId\n : operationId();\n bootstrapOperationRef.current = {\n generation: first.generation,\n operationId: bootstrapOperation,\n };\n try {\n first = await client.bootstrapSessionSet({\n operationId: bootstrapOperation,\n expectedGeneration: first.generation,\n });\n bootstrapOperationRef.current = null;\n } catch (caught) {\n if (!needsReconciliation(caught)) throw caught;\n const reconciled = await client.getSessionSet();\n if (sequenceRef.current !== sequence) return null;\n if (reconciled.selectedSlotId === null || reconciled.slots.length === 0) throw caught;\n first = reconciled;\n bootstrapOperationRef.current = null;\n }\n }\n if (sameActor(before, first) || sameSelectedActor(before, first)) {\n setProjection(first);\n setPhase(\"ready\");\n setError(null);\n return first;\n }\n if (kind === \"cross_tab\") clearLoginTransactionState();\n return await settleActorTransition(kind, before, first, sequence, publish, true);\n },\n [bootstrapLegacySession, clearLoginTransactionState, client, settleActorTransition],\n );\n\n const fail = useCallback(\n async (caught: unknown, kind: BrowserAccountTransitionKind): Promise<never> => {\n const nextError = accountError(caught);\n if (needsReconciliation(caught)) {\n try {\n await reconcile(kind);\n } catch {\n // Preserve the original typed failure; a manual refresh remains available.\n }\n }\n setError(nextError);\n setPhase(\"recoverable_error\");\n throw nextError;\n },\n [reconcile],\n );\n\n const executePending = useCallback(\n async (pending: PendingNonSecretTransition): Promise<boolean> => {\n const blocked = inspectBlockers();\n if (blocked.length > 0) {\n pendingRef.current = pending;\n setPhase(\"blocked\");\n return false;\n }\n const current = projectionRef.current;\n if (!current) throw new Error(\"Browser session set is not loaded\");\n const expectedGeneration = pending.expectedGeneration ?? current.generation;\n pending.expectedGeneration = expectedGeneration;\n const sequence = ++sequenceRef.current;\n pendingCommitSequenceRef.current = sequence;\n invalidatedDuringPendingCommitRef.current = false;\n pendingRef.current = pending;\n setPhase(\"committing\");\n setError(null);\n const changesActor = pending.changesActor(current);\n if (changesActor) {\n // Peers must hide and abort the old actor before this request can be\n // accepted. Yielding one task after the secret-free hold lets queued\n // BroadcastChannel delivery run before the network mutation starts;\n // a peer that was already dispatching remains an ordinary pre-commit\n // in-flight request and is still fenced by the server epoch.\n publishActorHold(pending.operationId, current);\n await yieldToCrossTabActorHold();\n }\n try {\n let accepted: ManagedAuthSessionSetProjection;\n try {\n accepted = await pending.execute(expectedGeneration);\n } catch (caught) {\n if (errorCode(caught) !== \"operation_outcome_unknown\") throw caught;\n // The command may already be durable. Replay exactly once before a\n // generic authority read so a response-lost terminal mutation can\n // recover its receipt with the frozen operation and admission data.\n accepted = await pending.execute(expectedGeneration);\n }\n if (sequenceRef.current !== sequence) return false;\n // A successful logout-all response is itself an authority-rotation\n // receipt; every other lower-clock adoption must come from the SDK's\n // explicit two-probe reconciliation path below.\n let authorityResetConfirmed = pending.kind === \"logout_all\";\n if (invalidatedDuringPendingCommitRef.current) {\n accepted = await client.reconcileSessionSetAuthority();\n authorityResetConfirmed = true;\n if (sequenceRef.current !== sequence) return false;\n }\n pendingRef.current = null;\n if (!authorityResetConfirmed && sameSelectedActor(current, accepted)) {\n setProjection(accepted);\n setPhase(\"ready\");\n setError(null);\n } else {\n await settleActorTransition(\n pending.kind,\n current,\n accepted,\n sequence,\n true,\n authorityResetConfirmed,\n );\n }\n return true;\n } catch (caught) {\n return await fail(caught, pending.kind);\n } finally {\n if (changesActor) publishActorRelease(pending.operationId);\n if (pendingCommitSequenceRef.current === sequence) {\n pendingCommitSequenceRef.current = null;\n invalidatedDuringPendingCommitRef.current = false;\n }\n }\n },\n [client, fail, inspectBlockers, publishActorHold, publishActorRelease, settleActorTransition],\n );\n\n const refresh = useCallback(async () => {\n try {\n return await reconcile(\"cross_tab\");\n } catch (caught) {\n const nextError = accountError(caught);\n setError(nextError);\n setPhase(\"recoverable_error\");\n throw nextError;\n }\n }, [reconcile]);\n\n const beginNeutralActorInvalidation = useCallback(\n async (before: ManagedAuthSessionSetProjection | null): Promise<AbortController> => {\n transitionAbortRef.current?.abort();\n const controller = new AbortController();\n transitionAbortRef.current = controller;\n projectionRef.current = null;\n setProjection(null);\n clearLoginTransactionState();\n setPhase(\"loading\");\n setError(null);\n // Do not wait for the authority reread before asking the host to remove\n // and abort the prior actor. A response that was already in flight can\n // otherwise commit old tenant state during the cross-tab hint/read race.\n await onActorTransition({\n kind: \"cross_tab\",\n from: before,\n to: null,\n signal: controller.signal,\n });\n return controller;\n },\n [clearLoginTransactionState, onActorTransition],\n );\n\n const invalidateActor = useCallback(async () => {\n if (pendingCommitSequenceRef.current !== null) {\n invalidatedDuringPendingCommitRef.current = true;\n await beginNeutralActorInvalidation(projectionRef.current);\n return null;\n }\n const sequence = ++sequenceRef.current;\n const before = projectionRef.current;\n try {\n const neutral = await beginNeutralActorInvalidation(before);\n if (neutral.signal.aborted || sequenceRef.current !== sequence) return null;\n const accepted = await client.reconcileSessionSetAuthority();\n if (sequenceRef.current !== sequence) return null;\n return await settleActorTransition(\"cross_tab\", before, accepted, sequence, false, true);\n } catch (caught) {\n if (sequenceRef.current !== sequence) return null;\n const nextError = accountError(caught);\n setError(nextError);\n setPhase(\"recoverable_error\");\n throw nextError;\n }\n }, [beginNeutralActorInvalidation, client, settleActorTransition]);\n\n const registerTransitionBlocker = useCallback((id: string, inspect: BlockerInspector) => {\n if (!id.trim()) throw new Error(\"Browser account transition blocker id is required\");\n blockerInspectorsRef.current.set(id, inspect);\n return () => {\n if (blockerInspectorsRef.current.get(id) === inspect) {\n blockerInspectorsRef.current.delete(id);\n }\n };\n }, []);\n\n const continueTransition = useCallback(async (): Promise<boolean> => {\n const pending = pendingRef.current;\n return pending ? await executePending(pending) : false;\n }, [executePending]);\n\n const cancelPendingTransition = useCallback(() => {\n pendingRef.current = null;\n setBlockers([]);\n setPhase(projectionRef.current ? \"ready\" : \"loading\");\n }, []);\n\n const beginLogin = useCallback(\n async (kind: \"add\" | \"reauth\", slotId?: string, returnIntent?: string) => {\n const current = projectionRef.current;\n if (!current) throw new Error(\"Browser session set is not loaded\");\n if (kind === \"reauth\" && slotId === current.selectedSlotId && inspectBlockers().length > 0) {\n setPhase(\"blocked\");\n throw new Error(\"Settle account transition blockers before re-authenticating\");\n }\n const sequence = ++sequenceRef.current;\n setPhase(\"committing\");\n setError(null);\n const signature = JSON.stringify([\n kind,\n slotId ?? null,\n returnIntent ?? null,\n current.generation,\n ]);\n const beginOperation =\n beginOperationRef.current?.signature === signature\n ? beginOperationRef.current.operationId\n : operationId();\n beginOperationRef.current = { signature, operationId: beginOperation };\n let next: ManagedAuthLoginTransaction;\n try {\n next = await client.beginLoginTransaction({\n operationId: beginOperation,\n expectedGeneration: current.generation,\n kind,\n ...(slotId ? { slotId } : {}),\n ...(returnIntent ? { returnIntent } : {}),\n });\n } catch (caught) {\n if (sequenceRef.current !== sequence) {\n if (beginOperationRef.current?.operationId === beginOperation) {\n beginOperationRef.current = null;\n }\n throw supersededOperationError();\n }\n return await fail(caught, kind);\n }\n if (sequenceRef.current !== sequence) {\n if (beginOperationRef.current?.operationId === beginOperation) {\n beginOperationRef.current = null;\n }\n throw supersededOperationError();\n }\n beginOperationRef.current = null;\n transactionTargetSlotIdRef.current = slotId ?? null;\n completionOperationRef.current = null;\n cancelOperationRef.current = null;\n setTransaction(next);\n setPhase(\"ready\");\n return next;\n },\n [client, fail, inspectBlockers],\n );\n\n const beginAdd = useCallback(\n async (returnIntent?: string) => await beginLogin(\"add\", undefined, returnIntent),\n [beginLogin],\n );\n const beginReauth = useCallback(\n async (slotId: string, returnIntent?: string) =>\n await beginLogin(\"reauth\", slotId, returnIntent),\n [beginLogin],\n );\n\n const completeEmailPassword = useCallback(\n async (input: { email: string; password: string }): Promise<boolean> => {\n const current = projectionRef.current;\n const activeTransaction = transactionRef.current;\n if (!current || !activeTransaction) throw new Error(\"No browser login transaction is active\");\n const selectedReauth =\n activeTransaction.kind === \"reauth\" &&\n transactionTargetSlotIdRef.current !== null &&\n transactionTargetSlotIdRef.current === current.selectedSlotId;\n if (selectedReauth && inspectBlockers().length > 0) {\n setPhase(\"blocked\");\n return false;\n }\n const sequence = ++sequenceRef.current;\n setPhase(\"committing\");\n setError(null);\n const completionOperation = completionOperationRef.current ?? {\n operationId: operationId(),\n expectedGeneration: current.generation,\n };\n completionOperationRef.current = completionOperation;\n try {\n const completed = await client.completeEmailPasswordTransaction({\n operationId: completionOperation.operationId,\n expectedGeneration: completionOperation.expectedGeneration,\n transactionId: activeTransaction.id,\n email: input.email,\n password: input.password,\n });\n if (sequenceRef.current !== sequence) return false;\n completionOperationRef.current = null;\n cancelOperationRef.current = null;\n transactionTargetSlotIdRef.current = null;\n setTransaction(null);\n const actorChanged = completed.projection.actorEpoch !== current.actorEpoch;\n if (actorChanged) {\n await settleActorTransition(\n activeTransaction.kind,\n current,\n completed.projection,\n sequence,\n true,\n );\n } else {\n setProjection(completed.projection);\n setPhase(\"ready\");\n }\n return true;\n } catch (caught) {\n return await fail(caught, activeTransaction.kind);\n }\n },\n [client, fail, inspectBlockers, settleActorTransition],\n );\n\n const settleExternalLoginTransaction = useCallback(\n async (transactionId: string): Promise<boolean> => {\n const activeTransaction = transactionRef.current;\n if (!activeTransaction || activeTransaction.id !== transactionId) return false;\n try {\n await reconcile(activeTransaction.kind, true);\n if (transactionRef.current?.id !== transactionId) return false;\n completionOperationRef.current = null;\n cancelOperationRef.current = null;\n transactionTargetSlotIdRef.current = null;\n setTransaction(null);\n return true;\n } catch (caught) {\n const nextError = accountError(caught);\n setError(nextError);\n setPhase(\"recoverable_error\");\n throw nextError;\n }\n },\n [reconcile],\n );\n\n const cancelLoginTransaction = useCallback(async () => {\n const current = projectionRef.current;\n const activeTransaction = transactionRef.current;\n if (!current || !activeTransaction) return;\n const sequence = ++sequenceRef.current;\n setPhase(\"committing\");\n const cancelOperation = cancelOperationRef.current ?? {\n operationId: operationId(),\n expectedGeneration: current.generation,\n };\n cancelOperationRef.current = cancelOperation;\n let next: ManagedAuthSessionSetProjection;\n try {\n next = await client.cancelLoginTransaction({\n operationId: cancelOperation.operationId,\n expectedGeneration: cancelOperation.expectedGeneration,\n transactionId: activeTransaction.id,\n });\n } catch (caught) {\n if (sequenceRef.current !== sequence) {\n if (cancelOperationRef.current?.operationId === cancelOperation.operationId) {\n cancelOperationRef.current = null;\n }\n throw supersededOperationError();\n }\n await fail(caught, activeTransaction.kind);\n return;\n }\n if (sequenceRef.current !== sequence) {\n if (cancelOperationRef.current?.operationId === cancelOperation.operationId) {\n cancelOperationRef.current = null;\n }\n throw supersededOperationError();\n }\n clearLoginTransactionState();\n setProjection(next);\n setPhase(\"ready\");\n setError(null);\n }, [clearLoginTransactionState, client, fail]);\n\n const selectSlot = useCallback(\n async (slotId: string) => {\n const id = operationId();\n return await executePending({\n kind: \"select\",\n operationId: id,\n expectedGeneration: null,\n changesActor: (current) => current.selectedSlotId !== slotId,\n execute: async (expectedGeneration) =>\n await client.selectLoginSlot({\n operationId: id,\n expectedGeneration,\n slotId,\n }),\n });\n },\n [client, executePending],\n );\n\n const logoutSlot = useCallback(\n async (slotId: string, replacementSlotId: string | null) => {\n const id = operationId();\n return await executePending({\n kind: \"logout_one\",\n operationId: id,\n expectedGeneration: null,\n changesActor: (current) => current.selectedSlotId === slotId,\n execute: async (expectedGeneration) =>\n await client.logoutLoginSlot({\n operationId: id,\n expectedGeneration,\n slotId,\n replacementSlotId,\n }),\n });\n },\n [client, executePending],\n );\n\n const logoutAll = useCallback(async () => {\n const id = operationId();\n return await executePending({\n kind: \"logout_all\",\n operationId: id,\n expectedGeneration: null,\n // Logout-all always rotates the browser-set authority, even when the set\n // is neutral but still contains slots. Peers must therefore enter the\n // same precommit hold and reconciliation boundary unconditionally.\n changesActor: () => true,\n execute: async (expectedGeneration) => {\n await client.logoutSessionSet({ operationId: id, expectedGeneration });\n return await client.getSessionSet();\n },\n });\n }, [client, executePending]);\n\n const resolveDeepLink = useCallback(\n async (path: string) => await client.resolveDeepLink({ path }),\n [client],\n );\n\n useEffect(() => {\n const sequence = sequenceRef;\n const transitionAbort = transitionAbortRef;\n void refresh().catch((caught) => {\n setError(accountError(caught));\n setPhase(\"recoverable_error\");\n });\n return () => {\n ++sequence.current;\n transitionAbort.current?.abort();\n };\n }, [client, refresh]);\n\n useEffect(() => {\n if (!broadcastChannelName || typeof BroadcastChannel === \"undefined\") return;\n const channel = new BroadcastChannel(broadcastChannelName);\n const actorHolds = crossTabActorHoldsRef.current;\n channelRef.current = channel;\n channel.onmessage = (event: MessageEvent<unknown>) => {\n const value = event.data;\n if (!value || typeof value !== \"object\") return;\n const hint = value as {\n type?: unknown;\n transitionId?: unknown;\n actorEpoch?: unknown;\n generation?: unknown;\n };\n if (hint.type === \"actor-transition-pending\") {\n if (\n typeof hint.transitionId !== \"string\" ||\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(\n hint.transitionId,\n ) ||\n typeof hint.actorEpoch !== \"string\" ||\n typeof hint.generation !== \"string\" ||\n crossTabActorHoldsRef.current.has(hint.transitionId)\n ) {\n return;\n }\n const current = projectionRef.current;\n if (\n current &&\n (current.actorEpoch !== hint.actorEpoch || current.generation !== hint.generation)\n ) {\n return;\n }\n if (!current && crossTabActorHoldsRef.current.size === 0) return;\n const firstHold = crossTabActorHoldsRef.current.size === 0;\n const timeout = setTimeout(() => {\n if (!crossTabActorHoldsRef.current.delete(hint.transitionId as string)) return;\n if (crossTabActorHoldsRef.current.size === 0) {\n void invalidateActor().catch(() => undefined);\n }\n }, CROSS_TAB_ACTOR_HOLD_MS);\n crossTabActorHoldsRef.current.set(hint.transitionId, timeout);\n if (firstHold) {\n if (pendingCommitSequenceRef.current !== null) {\n invalidatedDuringPendingCommitRef.current = true;\n } else {\n ++sequenceRef.current;\n }\n void beginNeutralActorInvalidation(current).catch(() => undefined);\n }\n return;\n }\n if (hint.type === \"actor-transition-released\") {\n if (typeof hint.transitionId !== \"string\") return;\n const timeout = crossTabActorHoldsRef.current.get(hint.transitionId);\n if (timeout === undefined) return;\n clearTimeout(timeout);\n crossTabActorHoldsRef.current.delete(hint.transitionId);\n if (crossTabActorHoldsRef.current.size === 0) {\n void invalidateActor().catch(() => undefined);\n }\n return;\n }\n if (\n hint.type !== \"actor-epoch-changed\" ||\n typeof hint.actorEpoch !== \"string\" ||\n typeof hint.generation !== \"string\" ||\n (hint.actorEpoch === projectionRef.current?.actorEpoch &&\n hint.generation === projectionRef.current?.generation)\n ) {\n return;\n }\n for (const timeout of crossTabActorHoldsRef.current.values()) clearTimeout(timeout);\n crossTabActorHoldsRef.current.clear();\n void invalidateActor().catch(() => undefined);\n };\n return () => {\n for (const timeout of actorHolds.values()) clearTimeout(timeout);\n actorHolds.clear();\n channel.close();\n if (channelRef.current === channel) channelRef.current = null;\n };\n }, [beginNeutralActorInvalidation, broadcastChannelName, invalidateActor]);\n\n const value = useMemo<BrowserAccountsContextValue>(\n () => ({\n projection,\n phase,\n blockers,\n error,\n transaction,\n hasPendingTransition: pendingRef.current !== null,\n refresh,\n invalidateActor,\n registerTransitionBlocker,\n continueTransition,\n cancelPendingTransition,\n beginAdd,\n beginReauth,\n completeEmailPassword,\n settleExternalLoginTransaction,\n cancelLoginTransaction,\n selectSlot,\n logoutSlot,\n logoutAll,\n resolveDeepLink,\n }),\n [\n projection,\n phase,\n blockers,\n error,\n transaction,\n refresh,\n invalidateActor,\n registerTransitionBlocker,\n continueTransition,\n cancelPendingTransition,\n beginAdd,\n beginReauth,\n completeEmailPassword,\n settleExternalLoginTransaction,\n cancelLoginTransaction,\n selectSlot,\n logoutSlot,\n logoutAll,\n resolveDeepLink,\n ],\n );\n\n return (\n <BrowserAccountsContext.Provider value={value}>{children}</BrowserAccountsContext.Provider>\n );\n}\n\nexport function useBrowserAccounts(): BrowserAccountsContextValue {\n const context = useContext(BrowserAccountsContext);\n if (!context) {\n throw new Error(\n \"@opengeni/react/accounts: wrap the tree in <BrowserAccountsProvider> before using account hooks\",\n );\n }\n return context;\n}\n\n/** Read the optional controller without requiring non-legacy hosts to mount it. */\nexport function useOptionalBrowserAccounts(): BrowserAccountsContextValue | null {\n return useContext(BrowserAccountsContext);\n}\n\nexport function useBrowserAccountTransitionBlocker(id: string, inspect: BlockerInspector): void {\n const { registerTransitionBlocker } = useBrowserAccounts();\n const inspectRef = useRef(inspect);\n inspectRef.current = inspect;\n useEffect(\n () => registerTransitionBlocker(id, () => inspectRef.current()),\n [id, registerTransitionBlocker],\n );\n}\n\n/** No-op on legacy hosts that do not mount the optional accounts provider. */\nexport function useOptionalBrowserAccountTransitionBlocker(\n id: string,\n inspect: BlockerInspector,\n): void {\n const context = useContext(BrowserAccountsContext);\n const registerTransitionBlocker = context?.registerTransitionBlocker;\n const inspectRef = useRef(inspect);\n inspectRef.current = inspect;\n useEffect(() => {\n if (!registerTransitionBlocker) return;\n return registerTransitionBlocker(id, () => inspectRef.current());\n }, [id, registerTransitionBlocker]);\n}\n"],"mappings":"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","names":["value"]}
1
+ {"version":3,"sources":["../src/accounts.tsx"],"sourcesContent":["import type {\n BrowserAccountsClientLike,\n ManagedAuthDeepLinkResolution,\n ManagedAuthLoginTransaction,\n ManagedAuthSessionSetProjection,\n} from \"@opengeni/sdk/accounts\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nexport type BrowserAccountTransitionPhase =\n | \"preflight\"\n | \"blocked\"\n | \"committing\"\n | \"loading\"\n | \"ready\"\n | \"recoverable_error\";\n\nexport type BrowserAccountTransitionKind =\n | \"add\"\n | \"select\"\n | \"logout_one\"\n | \"logout_all\"\n | \"reauth\"\n | \"cross_tab\";\n\nexport type BrowserAccountTransitionBlocker = {\n id: string;\n label: string;\n detail?: string | undefined;\n};\n\nexport type BrowserAccountTransition = {\n kind: BrowserAccountTransitionKind;\n from: ManagedAuthSessionSetProjection | null;\n to: ManagedAuthSessionSetProjection | null;\n signal: AbortSignal;\n};\n\nexport type BrowserAccountsProviderProps = {\n client: BrowserAccountsClientLike;\n /**\n * Hide the authenticated tree, abort old actor work, clear tenant-bound\n * state, recreate credentials/clients, and refetch principal access here.\n * Cross-tab/server invalidation first calls this with `to: null` as a\n * neutral fence before authority is reread, then calls it with the accepted\n * projection after the new actor is known.\n */\n onActorTransition: (transition: BrowserAccountTransition) => Promise<void>;\n children?: ReactNode;\n broadcastChannelName?: string | null | undefined;\n /** Adopt the already-authenticated legacy provider session during dual-mode rollout. */\n bootstrapLegacySession?: boolean | undefined;\n};\n\ntype BlockerInspector = () => BrowserAccountTransitionBlocker | null;\n\ntype PendingNonSecretTransition = {\n kind: Exclude<BrowserAccountTransitionKind, \"add\" | \"reauth\" | \"cross_tab\">;\n operationId: string;\n expectedGeneration: string | null;\n changesActor: (projection: ManagedAuthSessionSetProjection) => boolean;\n execute: (expectedGeneration: string) => Promise<ManagedAuthSessionSetProjection>;\n};\n\nexport type BrowserAccountsContextValue = {\n projection: ManagedAuthSessionSetProjection | null;\n phase: BrowserAccountTransitionPhase;\n blockers: BrowserAccountTransitionBlocker[];\n error: Error | null;\n transaction: ManagedAuthLoginTransaction | null;\n hasPendingTransition: boolean;\n refresh: () => Promise<ManagedAuthSessionSetProjection | null>;\n invalidateActor: () => Promise<ManagedAuthSessionSetProjection | null>;\n registerTransitionBlocker: (id: string, inspect: BlockerInspector) => () => void;\n continueTransition: () => Promise<boolean>;\n cancelPendingTransition: () => void;\n beginAdd: (returnIntent?: string | undefined) => Promise<ManagedAuthLoginTransaction>;\n beginReauth: (\n slotId: string,\n returnIntent?: string | undefined,\n ) => Promise<ManagedAuthLoginTransaction>;\n completeEmailPassword: (input: { email: string; password: string }) => Promise<boolean>;\n settleExternalLoginTransaction: (transactionId: string) => Promise<boolean>;\n cancelLoginTransaction: () => Promise<void>;\n selectSlot: (slotId: string) => Promise<boolean>;\n logoutSlot: (slotId: string, replacementSlotId: string | null) => Promise<boolean>;\n logoutAll: () => Promise<boolean>;\n resolveDeepLink: (path: string) => Promise<ManagedAuthDeepLinkResolution>;\n};\n\nconst BrowserAccountsContext = createContext<BrowserAccountsContextValue | null>(null);\nconst DEFAULT_CHANNEL = \"opengeni:browser-account-epoch:v1\";\nconst CROSS_TAB_ACTOR_HOLD_MS = 30_000;\n\nasync function yieldToCrossTabActorHold(): Promise<void> {\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n}\n\nfunction operationId(): string {\n return crypto.randomUUID();\n}\n\nfunction sameActor(\n left: ManagedAuthSessionSetProjection | null,\n right: ManagedAuthSessionSetProjection | null,\n): boolean {\n return (\n left?.generation === right?.generation &&\n left?.actorEpoch === right?.actorEpoch &&\n left?.selectedSlotId === right?.selectedSlotId &&\n left?.state === right?.state\n );\n}\n\nfunction sameSelectedActor(\n left: ManagedAuthSessionSetProjection | null,\n right: ManagedAuthSessionSetProjection | null,\n): boolean {\n return (\n left !== null &&\n right !== null &&\n left.actorEpoch === right.actorEpoch &&\n left.selectedSlotId === right.selectedSlotId &&\n left.state === right.state\n );\n}\n\nfunction compareCounter(left: string, right: string): number {\n const leftValue = BigInt(left);\n const rightValue = BigInt(right);\n return leftValue < rightValue ? -1 : leftValue > rightValue ? 1 : 0;\n}\n\nfunction isOlderProjection(\n candidate: ManagedAuthSessionSetProjection,\n current: ManagedAuthSessionSetProjection,\n): boolean {\n const epoch = compareCounter(candidate.actorEpoch, current.actorEpoch);\n return epoch < 0 || (epoch === 0 && compareCounter(candidate.generation, current.generation) < 0);\n}\n\nfunction accountError(error: unknown): Error {\n return error instanceof Error ? error : new Error(\"Browser account operation failed\");\n}\n\nfunction supersededOperationError(): Error {\n const error = new Error(\"Browser account operation was superseded by an actor change\");\n error.name = \"AbortError\";\n return error;\n}\n\nfunction errorCode(error: unknown): string | null {\n if (!error || typeof error !== \"object\") return null;\n const code = (error as { code?: unknown }).code;\n return typeof code === \"string\" ? code : null;\n}\n\nfunction needsReconciliation(error: unknown): boolean {\n return new Set([\"actor_change_required\", \"generation_conflict\", \"operation_outcome_unknown\"]).has(\n errorCode(error) ?? \"\",\n );\n}\n\nexport function BrowserAccountsProvider({\n client,\n onActorTransition,\n children,\n broadcastChannelName = DEFAULT_CHANNEL,\n bootstrapLegacySession = false,\n}: BrowserAccountsProviderProps) {\n const [projection, setProjection] = useState<ManagedAuthSessionSetProjection | null>(null);\n const [phase, setPhase] = useState<BrowserAccountTransitionPhase>(\"loading\");\n const [blockers, setBlockers] = useState<BrowserAccountTransitionBlocker[]>([]);\n const [error, setError] = useState<Error | null>(null);\n const [transaction, setTransaction] = useState<ManagedAuthLoginTransaction | null>(null);\n const projectionRef = useRef(projection);\n const transactionRef = useRef(transaction);\n const blockerInspectorsRef = useRef(new Map<string, BlockerInspector>());\n const pendingRef = useRef<PendingNonSecretTransition | null>(null);\n const transactionTargetSlotIdRef = useRef<string | null>(null);\n const beginOperationRef = useRef<{ signature: string; operationId: string } | null>(null);\n const bootstrapOperationRef = useRef<{ generation: string; operationId: string } | null>(null);\n const completionOperationRef = useRef<{\n operationId: string;\n expectedGeneration: string;\n } | null>(null);\n const cancelOperationRef = useRef<{\n operationId: string;\n expectedGeneration: string;\n } | null>(null);\n const pendingCommitSequenceRef = useRef<number | null>(null);\n const pendingServerMutationSequenceRef = useRef<number | null>(null);\n const invalidatedDuringPendingCommitRef = useRef(false);\n const sequenceRef = useRef(0);\n const transitionAbortRef = useRef<AbortController | null>(null);\n const channelRef = useRef<BroadcastChannel | null>(null);\n const crossTabActorHoldsRef = useRef(new Map<string, ReturnType<typeof setTimeout>>());\n projectionRef.current = projection;\n transactionRef.current = transaction;\n\n const inspectBlockers = useCallback((): BrowserAccountTransitionBlocker[] => {\n const current = [...blockerInspectorsRef.current.entries()]\n .map(([id, inspect]) => {\n const blocker = inspect();\n return blocker ? { ...blocker, id } : null;\n })\n .filter((value): value is BrowserAccountTransitionBlocker => value !== null)\n .sort((left, right) => left.id.localeCompare(right.id));\n setBlockers(current);\n return current;\n }, []);\n\n const publishActorHint = useCallback((next: ManagedAuthSessionSetProjection | null) => {\n if (!next) return;\n channelRef.current?.postMessage({\n type: \"actor-epoch-changed\",\n generation: next.generation,\n actorEpoch: next.actorEpoch,\n });\n }, []);\n\n const publishActorHold = useCallback(\n (transitionId: string, current: ManagedAuthSessionSetProjection) => {\n channelRef.current?.postMessage({\n type: \"actor-transition-pending\",\n transitionId,\n generation: current.generation,\n actorEpoch: current.actorEpoch,\n });\n },\n [],\n );\n\n const publishActorRelease = useCallback((transitionId: string) => {\n channelRef.current?.postMessage({\n type: \"actor-transition-released\",\n transitionId,\n });\n }, []);\n\n const clearLoginTransactionState = useCallback(() => {\n transactionRef.current = null;\n beginOperationRef.current = null;\n completionOperationRef.current = null;\n cancelOperationRef.current = null;\n transactionTargetSlotIdRef.current = null;\n setTransaction(null);\n }, []);\n\n const settleActorTransition = useCallback(\n async (\n kind: BrowserAccountTransitionKind,\n from: ManagedAuthSessionSetProjection | null,\n accepted: ManagedAuthSessionSetProjection | null,\n sequence: number,\n publish: boolean,\n authorityResetConfirmed = false,\n initiatingSurfaceFenced = false,\n ): Promise<ManagedAuthSessionSetProjection | null> => {\n let source = from;\n let target = accepted;\n if (!authorityResetConfirmed && from && target && isOlderProjection(target, from)) {\n target = await client.getSessionSet();\n if (sequenceRef.current !== sequence) return null;\n if (isOlderProjection(target, from)) {\n throw new Error(\"Browser account response regressed the accepted actor epoch\");\n }\n }\n if (!initiatingSurfaceFenced && sameSelectedActor(source, target)) {\n setProjection(target);\n setPhase(\"ready\");\n setError(null);\n return target;\n }\n while (true) {\n transitionAbortRef.current?.abort();\n const controller = new AbortController();\n transitionAbortRef.current = controller;\n // The accepted mutation is already server authority. Notify peers now,\n // before this tab waits for its own auth/access reload, so they can hide\n // and abort old-actor work throughout that entire window.\n if (publish) publishActorHint(target);\n setPhase(\"loading\");\n await onActorTransition({\n kind,\n from: initiatingSurfaceFenced ? null : source,\n to: target,\n signal: controller.signal,\n });\n initiatingSurfaceFenced = false;\n if (controller.signal.aborted || sequenceRef.current !== sequence) return null;\n if (!target) {\n setProjection(null);\n setPhase(\"ready\");\n setError(null);\n return null;\n }\n const confirmed = await client.reconcileSessionSetAuthority();\n if (controller.signal.aborted || sequenceRef.current !== sequence) return null;\n if (sameActor(target, confirmed) || sameSelectedActor(target, confirmed)) {\n setProjection(confirmed);\n setPhase(\"ready\");\n setError(null);\n return confirmed;\n }\n // Tenant state was loaded for an authority that rotated again while\n // the host callback was pending. The explicit two-probe result is the\n // new authority even when its counters are lower, so keep the actor\n // hidden and settle that authority before exposing ready state.\n source = target;\n target = confirmed;\n }\n },\n [client, onActorTransition, publishActorHint],\n );\n\n const reconcile = useCallback(\n async (kind: BrowserAccountTransitionKind, publish = false) => {\n const sequence = ++sequenceRef.current;\n const before = projectionRef.current;\n setPhase(\"loading\");\n let first = await client.reconcileSessionSetAuthority();\n if (sequenceRef.current !== sequence) return null;\n if (\n bootstrapLegacySession &&\n first.mode === \"dual\" &&\n first.selectedSlotId === null &&\n first.slots.length === 0\n ) {\n const bootstrapOperation =\n bootstrapOperationRef.current?.generation === first.generation\n ? bootstrapOperationRef.current.operationId\n : operationId();\n bootstrapOperationRef.current = {\n generation: first.generation,\n operationId: bootstrapOperation,\n };\n try {\n first = await client.bootstrapSessionSet({\n operationId: bootstrapOperation,\n expectedGeneration: first.generation,\n });\n bootstrapOperationRef.current = null;\n } catch (caught) {\n if (!needsReconciliation(caught)) throw caught;\n const reconciled = await client.getSessionSet();\n if (sequenceRef.current !== sequence) return null;\n if (reconciled.selectedSlotId === null || reconciled.slots.length === 0) throw caught;\n first = reconciled;\n bootstrapOperationRef.current = null;\n }\n }\n if (sameActor(before, first) || sameSelectedActor(before, first)) {\n setProjection(first);\n setPhase(\"ready\");\n setError(null);\n return first;\n }\n if (kind === \"cross_tab\") clearLoginTransactionState();\n return await settleActorTransition(kind, before, first, sequence, publish, true);\n },\n [bootstrapLegacySession, clearLoginTransactionState, client, settleActorTransition],\n );\n\n const fail = useCallback(\n async (caught: unknown, kind: BrowserAccountTransitionKind): Promise<never> => {\n const nextError = accountError(caught);\n if (needsReconciliation(caught)) {\n try {\n await reconcile(kind);\n } catch {\n // Preserve the original typed failure; a manual refresh remains available.\n }\n }\n setError(nextError);\n setPhase(\"recoverable_error\");\n throw nextError;\n },\n [reconcile],\n );\n\n const executePending = useCallback(\n async (pending: PendingNonSecretTransition): Promise<boolean> => {\n const blocked = inspectBlockers();\n if (blocked.length > 0) {\n pendingRef.current = pending;\n setPhase(\"blocked\");\n return false;\n }\n const current = projectionRef.current;\n if (!current) throw new Error(\"Browser session set is not loaded\");\n const expectedGeneration = pending.expectedGeneration ?? current.generation;\n pending.expectedGeneration = expectedGeneration;\n const sequence = ++sequenceRef.current;\n pendingCommitSequenceRef.current = sequence;\n pendingServerMutationSequenceRef.current = null;\n invalidatedDuringPendingCommitRef.current = false;\n pendingRef.current = pending;\n setPhase(\"committing\");\n setError(null);\n const changesActor = pending.changesActor(current);\n let initiatingActorFenced = false;\n try {\n if (changesActor) {\n // Every tab, including the initiator, must hide and abort the old actor\n // before this request can be accepted. Otherwise a response-lost\n // logout can leave the initiating route alive long enough for its\n // event stream to reconnect with the newly revoked cookie.\n publishActorHold(pending.operationId, current);\n transitionAbortRef.current?.abort();\n const controller = new AbortController();\n transitionAbortRef.current = controller;\n projectionRef.current = null;\n setProjection(null);\n setPhase(\"loading\");\n // The host can synchronously clear its actor surface before its\n // transition promise later rejects. From this point on, every\n // failure must reconcile and restore authority even though the\n // account mutation has not started yet.\n initiatingActorFenced = true;\n await onActorTransition({\n kind: pending.kind,\n from: current,\n to: null,\n signal: controller.signal,\n });\n if (controller.signal.aborted || sequenceRef.current !== sequence) return false;\n // Yield one task after the secret-free hold so queued BroadcastChannel\n // delivery can fence peers before the network mutation starts.\n await yieldToCrossTabActorHold();\n if (controller.signal.aborted || sequenceRef.current !== sequence) return false;\n }\n pendingServerMutationSequenceRef.current = sequence;\n let accepted: ManagedAuthSessionSetProjection;\n try {\n accepted = await pending.execute(expectedGeneration);\n } catch (caught) {\n if (errorCode(caught) !== \"operation_outcome_unknown\") throw caught;\n // The command may already be durable. Replay exactly once before a\n // generic authority read so a response-lost terminal mutation can\n // recover its receipt with the frozen operation and admission data.\n accepted = await pending.execute(expectedGeneration);\n }\n if (sequenceRef.current !== sequence) return false;\n // A successful logout-all response is itself an authority-rotation\n // receipt; every other lower-clock adoption must come from the SDK's\n // explicit two-probe reconciliation path below.\n let authorityResetConfirmed = pending.kind === \"logout_all\";\n if (invalidatedDuringPendingCommitRef.current) {\n accepted = await client.reconcileSessionSetAuthority();\n authorityResetConfirmed = true;\n if (sequenceRef.current !== sequence) return false;\n }\n pendingRef.current = null;\n // The server response and any invalidation reconciliation are now\n // authoritative. Release commit ownership before host settlement so a\n // later invalidation starts its own reconciliation instead of relying\n // on the already-consumed check above.\n if (pendingServerMutationSequenceRef.current === sequence) {\n pendingServerMutationSequenceRef.current = null;\n }\n if (pendingCommitSequenceRef.current === sequence) {\n pendingCommitSequenceRef.current = null;\n invalidatedDuringPendingCommitRef.current = false;\n }\n if (\n !initiatingActorFenced &&\n !authorityResetConfirmed &&\n sameSelectedActor(current, accepted)\n ) {\n setProjection(accepted);\n setPhase(\"ready\");\n setError(null);\n } else {\n await settleActorTransition(\n pending.kind,\n current,\n accepted,\n sequence,\n true,\n authorityResetConfirmed,\n initiatingActorFenced,\n );\n }\n return true;\n } catch (caught) {\n if (initiatingActorFenced) {\n let authorityRestored = false;\n try {\n const restored = await client.reconcileSessionSetAuthority();\n if (sequenceRef.current !== sequence) return false;\n await settleActorTransition(\n pending.kind,\n current,\n restored,\n sequence,\n false,\n true,\n true,\n );\n if (sequenceRef.current !== sequence) return false;\n authorityRestored = true;\n } catch {\n // If authority itself cannot be reconciled, retain the existing\n // fail-closed provider error path and its manual retry surface.\n }\n if (authorityRestored) {\n // Restore transport provenance before retaining the existing\n // fail-closed retry surface. The retry screen keeps tenant data\n // hidden, while refresh can safely reveal this reconciled actor.\n const restoredError = accountError(caught);\n setError(restoredError);\n setPhase(\"recoverable_error\");\n throw restoredError;\n }\n }\n return await fail(caught, pending.kind);\n } finally {\n if (changesActor) publishActorRelease(pending.operationId);\n if (pendingServerMutationSequenceRef.current === sequence) {\n pendingServerMutationSequenceRef.current = null;\n }\n if (pendingCommitSequenceRef.current === sequence) {\n pendingCommitSequenceRef.current = null;\n invalidatedDuringPendingCommitRef.current = false;\n }\n }\n },\n [\n client,\n fail,\n inspectBlockers,\n onActorTransition,\n publishActorHold,\n publishActorRelease,\n settleActorTransition,\n ],\n );\n\n const refresh = useCallback(async () => {\n try {\n return await reconcile(\"cross_tab\");\n } catch (caught) {\n const nextError = accountError(caught);\n setError(nextError);\n setPhase(\"recoverable_error\");\n throw nextError;\n }\n }, [reconcile]);\n\n const beginNeutralActorInvalidation = useCallback(\n async (before: ManagedAuthSessionSetProjection | null): Promise<AbortController> => {\n transitionAbortRef.current?.abort();\n const controller = new AbortController();\n transitionAbortRef.current = controller;\n projectionRef.current = null;\n setProjection(null);\n clearLoginTransactionState();\n setPhase(\"loading\");\n setError(null);\n // Do not wait for the authority reread before asking the host to remove\n // and abort the prior actor. A response that was already in flight can\n // otherwise commit old tenant state during the cross-tab hint/read race.\n await onActorTransition({\n kind: \"cross_tab\",\n from: before,\n to: null,\n signal: controller.signal,\n });\n return controller;\n },\n [clearLoginTransactionState, onActorTransition],\n );\n\n const invalidateActor = useCallback(async () => {\n const pendingCommitSequence = pendingCommitSequenceRef.current;\n if (\n pendingCommitSequence !== null &&\n pendingServerMutationSequenceRef.current === pendingCommitSequence\n ) {\n invalidatedDuringPendingCommitRef.current = true;\n await beginNeutralActorInvalidation(projectionRef.current);\n return null;\n }\n // An authority hint that arrives while the initiating host fence is still\n // pending supersedes the not-yet-dispatched mutation. Reconcile it here;\n // otherwise aborting that fence makes executePending return early while no\n // operation remains to restore the neutral actor surface.\n if (pendingCommitSequence !== null) {\n pendingCommitSequenceRef.current = null;\n pendingServerMutationSequenceRef.current = null;\n invalidatedDuringPendingCommitRef.current = false;\n pendingRef.current = null;\n }\n const sequence = ++sequenceRef.current;\n const before = projectionRef.current;\n try {\n const neutral = await beginNeutralActorInvalidation(before);\n if (neutral.signal.aborted || sequenceRef.current !== sequence) return null;\n const accepted = await client.reconcileSessionSetAuthority();\n if (sequenceRef.current !== sequence) return null;\n return await settleActorTransition(\"cross_tab\", before, accepted, sequence, false, true);\n } catch (caught) {\n if (sequenceRef.current !== sequence) return null;\n const nextError = accountError(caught);\n setError(nextError);\n setPhase(\"recoverable_error\");\n throw nextError;\n }\n }, [beginNeutralActorInvalidation, client, settleActorTransition]);\n\n const registerTransitionBlocker = useCallback((id: string, inspect: BlockerInspector) => {\n if (!id.trim()) throw new Error(\"Browser account transition blocker id is required\");\n blockerInspectorsRef.current.set(id, inspect);\n return () => {\n if (blockerInspectorsRef.current.get(id) === inspect) {\n blockerInspectorsRef.current.delete(id);\n }\n };\n }, []);\n\n const continueTransition = useCallback(async (): Promise<boolean> => {\n const pending = pendingRef.current;\n return pending ? await executePending(pending) : false;\n }, [executePending]);\n\n const cancelPendingTransition = useCallback(() => {\n pendingRef.current = null;\n setBlockers([]);\n setPhase(projectionRef.current ? \"ready\" : \"loading\");\n }, []);\n\n const beginLogin = useCallback(\n async (kind: \"add\" | \"reauth\", slotId?: string, returnIntent?: string) => {\n const current = projectionRef.current;\n if (!current) throw new Error(\"Browser session set is not loaded\");\n if (kind === \"reauth\" && slotId === current.selectedSlotId && inspectBlockers().length > 0) {\n setPhase(\"blocked\");\n throw new Error(\"Settle account transition blockers before re-authenticating\");\n }\n const sequence = ++sequenceRef.current;\n setPhase(\"committing\");\n setError(null);\n const signature = JSON.stringify([\n kind,\n slotId ?? null,\n returnIntent ?? null,\n current.generation,\n ]);\n const beginOperation =\n beginOperationRef.current?.signature === signature\n ? beginOperationRef.current.operationId\n : operationId();\n beginOperationRef.current = { signature, operationId: beginOperation };\n let next: ManagedAuthLoginTransaction;\n try {\n next = await client.beginLoginTransaction({\n operationId: beginOperation,\n expectedGeneration: current.generation,\n kind,\n ...(slotId ? { slotId } : {}),\n ...(returnIntent ? { returnIntent } : {}),\n });\n } catch (caught) {\n if (sequenceRef.current !== sequence) {\n if (beginOperationRef.current?.operationId === beginOperation) {\n beginOperationRef.current = null;\n }\n throw supersededOperationError();\n }\n return await fail(caught, kind);\n }\n if (sequenceRef.current !== sequence) {\n if (beginOperationRef.current?.operationId === beginOperation) {\n beginOperationRef.current = null;\n }\n throw supersededOperationError();\n }\n beginOperationRef.current = null;\n transactionTargetSlotIdRef.current = slotId ?? null;\n completionOperationRef.current = null;\n cancelOperationRef.current = null;\n setTransaction(next);\n setPhase(\"ready\");\n return next;\n },\n [client, fail, inspectBlockers],\n );\n\n const beginAdd = useCallback(\n async (returnIntent?: string) => await beginLogin(\"add\", undefined, returnIntent),\n [beginLogin],\n );\n const beginReauth = useCallback(\n async (slotId: string, returnIntent?: string) =>\n await beginLogin(\"reauth\", slotId, returnIntent),\n [beginLogin],\n );\n\n const completeEmailPassword = useCallback(\n async (input: { email: string; password: string }): Promise<boolean> => {\n const current = projectionRef.current;\n const activeTransaction = transactionRef.current;\n if (!current || !activeTransaction) throw new Error(\"No browser login transaction is active\");\n const selectedReauth =\n activeTransaction.kind === \"reauth\" &&\n transactionTargetSlotIdRef.current !== null &&\n transactionTargetSlotIdRef.current === current.selectedSlotId;\n if (selectedReauth && inspectBlockers().length > 0) {\n setPhase(\"blocked\");\n return false;\n }\n const sequence = ++sequenceRef.current;\n setPhase(\"committing\");\n setError(null);\n const completionOperation = completionOperationRef.current ?? {\n operationId: operationId(),\n expectedGeneration: current.generation,\n };\n completionOperationRef.current = completionOperation;\n try {\n const completed = await client.completeEmailPasswordTransaction({\n operationId: completionOperation.operationId,\n expectedGeneration: completionOperation.expectedGeneration,\n transactionId: activeTransaction.id,\n email: input.email,\n password: input.password,\n });\n if (sequenceRef.current !== sequence) return false;\n completionOperationRef.current = null;\n cancelOperationRef.current = null;\n transactionTargetSlotIdRef.current = null;\n setTransaction(null);\n const actorChanged = completed.projection.actorEpoch !== current.actorEpoch;\n if (actorChanged) {\n await settleActorTransition(\n activeTransaction.kind,\n current,\n completed.projection,\n sequence,\n true,\n );\n } else {\n setProjection(completed.projection);\n setPhase(\"ready\");\n }\n return true;\n } catch (caught) {\n return await fail(caught, activeTransaction.kind);\n }\n },\n [client, fail, inspectBlockers, settleActorTransition],\n );\n\n const settleExternalLoginTransaction = useCallback(\n async (transactionId: string): Promise<boolean> => {\n const activeTransaction = transactionRef.current;\n if (!activeTransaction || activeTransaction.id !== transactionId) return false;\n try {\n await reconcile(activeTransaction.kind, true);\n if (transactionRef.current?.id !== transactionId) return false;\n completionOperationRef.current = null;\n cancelOperationRef.current = null;\n transactionTargetSlotIdRef.current = null;\n setTransaction(null);\n return true;\n } catch (caught) {\n const nextError = accountError(caught);\n setError(nextError);\n setPhase(\"recoverable_error\");\n throw nextError;\n }\n },\n [reconcile],\n );\n\n const cancelLoginTransaction = useCallback(async () => {\n const current = projectionRef.current;\n const activeTransaction = transactionRef.current;\n if (!current || !activeTransaction) return;\n const sequence = ++sequenceRef.current;\n setPhase(\"committing\");\n const cancelOperation = cancelOperationRef.current ?? {\n operationId: operationId(),\n expectedGeneration: current.generation,\n };\n cancelOperationRef.current = cancelOperation;\n let next: ManagedAuthSessionSetProjection;\n try {\n next = await client.cancelLoginTransaction({\n operationId: cancelOperation.operationId,\n expectedGeneration: cancelOperation.expectedGeneration,\n transactionId: activeTransaction.id,\n });\n } catch (caught) {\n if (sequenceRef.current !== sequence) {\n if (cancelOperationRef.current?.operationId === cancelOperation.operationId) {\n cancelOperationRef.current = null;\n }\n throw supersededOperationError();\n }\n await fail(caught, activeTransaction.kind);\n return;\n }\n if (sequenceRef.current !== sequence) {\n if (cancelOperationRef.current?.operationId === cancelOperation.operationId) {\n cancelOperationRef.current = null;\n }\n throw supersededOperationError();\n }\n clearLoginTransactionState();\n setProjection(next);\n setPhase(\"ready\");\n setError(null);\n }, [clearLoginTransactionState, client, fail]);\n\n const selectSlot = useCallback(\n async (slotId: string) => {\n const id = operationId();\n return await executePending({\n kind: \"select\",\n operationId: id,\n expectedGeneration: null,\n changesActor: (current) => current.selectedSlotId !== slotId,\n execute: async (expectedGeneration) =>\n await client.selectLoginSlot({\n operationId: id,\n expectedGeneration,\n slotId,\n }),\n });\n },\n [client, executePending],\n );\n\n const logoutSlot = useCallback(\n async (slotId: string, replacementSlotId: string | null) => {\n const id = operationId();\n return await executePending({\n kind: \"logout_one\",\n operationId: id,\n expectedGeneration: null,\n changesActor: (current) => current.selectedSlotId === slotId,\n execute: async (expectedGeneration) =>\n await client.logoutLoginSlot({\n operationId: id,\n expectedGeneration,\n slotId,\n replacementSlotId,\n }),\n });\n },\n [client, executePending],\n );\n\n const logoutAll = useCallback(async () => {\n const id = operationId();\n return await executePending({\n kind: \"logout_all\",\n operationId: id,\n expectedGeneration: null,\n // Logout-all always rotates the browser-set authority, even when the set\n // is neutral but still contains slots. Peers must therefore enter the\n // same precommit hold and reconciliation boundary unconditionally.\n changesActor: () => true,\n execute: async (expectedGeneration) => {\n await client.logoutSessionSet({ operationId: id, expectedGeneration });\n return await client.getSessionSet();\n },\n });\n }, [client, executePending]);\n\n const resolveDeepLink = useCallback(\n async (path: string) => await client.resolveDeepLink({ path }),\n [client],\n );\n\n useEffect(() => {\n const sequence = sequenceRef;\n const transitionAbort = transitionAbortRef;\n void refresh().catch((caught) => {\n setError(accountError(caught));\n setPhase(\"recoverable_error\");\n });\n return () => {\n ++sequence.current;\n transitionAbort.current?.abort();\n };\n }, [client, refresh]);\n\n useEffect(() => {\n if (!broadcastChannelName || typeof BroadcastChannel === \"undefined\") return;\n const channel = new BroadcastChannel(broadcastChannelName);\n const actorHolds = crossTabActorHoldsRef.current;\n channelRef.current = channel;\n channel.onmessage = (event: MessageEvent<unknown>) => {\n const value = event.data;\n if (!value || typeof value !== \"object\") return;\n const hint = value as {\n type?: unknown;\n transitionId?: unknown;\n actorEpoch?: unknown;\n generation?: unknown;\n };\n if (hint.type === \"actor-transition-pending\") {\n if (\n typeof hint.transitionId !== \"string\" ||\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(\n hint.transitionId,\n ) ||\n typeof hint.actorEpoch !== \"string\" ||\n typeof hint.generation !== \"string\" ||\n crossTabActorHoldsRef.current.has(hint.transitionId)\n ) {\n return;\n }\n const current = projectionRef.current;\n if (\n current &&\n (current.actorEpoch !== hint.actorEpoch || current.generation !== hint.generation)\n ) {\n return;\n }\n if (!current && crossTabActorHoldsRef.current.size === 0) return;\n const firstHold = crossTabActorHoldsRef.current.size === 0;\n const timeout = setTimeout(() => {\n if (!crossTabActorHoldsRef.current.delete(hint.transitionId as string)) return;\n if (crossTabActorHoldsRef.current.size === 0) {\n void invalidateActor().catch(() => undefined);\n }\n }, CROSS_TAB_ACTOR_HOLD_MS);\n crossTabActorHoldsRef.current.set(hint.transitionId, timeout);\n if (firstHold) {\n if (pendingCommitSequenceRef.current !== null) {\n invalidatedDuringPendingCommitRef.current = true;\n } else {\n ++sequenceRef.current;\n }\n void beginNeutralActorInvalidation(current).catch(() => undefined);\n }\n return;\n }\n if (hint.type === \"actor-transition-released\") {\n if (typeof hint.transitionId !== \"string\") return;\n const timeout = crossTabActorHoldsRef.current.get(hint.transitionId);\n if (timeout === undefined) return;\n clearTimeout(timeout);\n crossTabActorHoldsRef.current.delete(hint.transitionId);\n if (crossTabActorHoldsRef.current.size === 0) {\n void invalidateActor().catch(() => undefined);\n }\n return;\n }\n if (\n hint.type !== \"actor-epoch-changed\" ||\n typeof hint.actorEpoch !== \"string\" ||\n typeof hint.generation !== \"string\" ||\n (hint.actorEpoch === projectionRef.current?.actorEpoch &&\n hint.generation === projectionRef.current?.generation)\n ) {\n return;\n }\n for (const timeout of crossTabActorHoldsRef.current.values()) clearTimeout(timeout);\n crossTabActorHoldsRef.current.clear();\n void invalidateActor().catch(() => undefined);\n };\n return () => {\n for (const timeout of actorHolds.values()) clearTimeout(timeout);\n actorHolds.clear();\n channel.close();\n if (channelRef.current === channel) channelRef.current = null;\n };\n }, [beginNeutralActorInvalidation, broadcastChannelName, invalidateActor]);\n\n const value = useMemo<BrowserAccountsContextValue>(\n () => ({\n projection,\n phase,\n blockers,\n error,\n transaction,\n hasPendingTransition: pendingRef.current !== null,\n refresh,\n invalidateActor,\n registerTransitionBlocker,\n continueTransition,\n cancelPendingTransition,\n beginAdd,\n beginReauth,\n completeEmailPassword,\n settleExternalLoginTransaction,\n cancelLoginTransaction,\n selectSlot,\n logoutSlot,\n logoutAll,\n resolveDeepLink,\n }),\n [\n projection,\n phase,\n blockers,\n error,\n transaction,\n refresh,\n invalidateActor,\n registerTransitionBlocker,\n continueTransition,\n cancelPendingTransition,\n beginAdd,\n beginReauth,\n completeEmailPassword,\n settleExternalLoginTransaction,\n cancelLoginTransaction,\n selectSlot,\n logoutSlot,\n logoutAll,\n resolveDeepLink,\n ],\n );\n\n return (\n <BrowserAccountsContext.Provider value={value}>{children}</BrowserAccountsContext.Provider>\n );\n}\n\nexport function useBrowserAccounts(): BrowserAccountsContextValue {\n const context = useContext(BrowserAccountsContext);\n if (!context) {\n throw new Error(\n \"@opengeni/react/accounts: wrap the tree in <BrowserAccountsProvider> before using account hooks\",\n );\n }\n return context;\n}\n\n/** Read the optional controller without requiring non-legacy hosts to mount it. */\nexport function useOptionalBrowserAccounts(): BrowserAccountsContextValue | null {\n return useContext(BrowserAccountsContext);\n}\n\nexport function useBrowserAccountTransitionBlocker(id: string, inspect: BlockerInspector): void {\n const { registerTransitionBlocker } = useBrowserAccounts();\n const inspectRef = useRef(inspect);\n inspectRef.current = inspect;\n useEffect(\n () => registerTransitionBlocker(id, () => inspectRef.current()),\n [id, registerTransitionBlocker],\n );\n}\n\n/** No-op on legacy hosts that do not mount the optional accounts provider. */\nexport function useOptionalBrowserAccountTransitionBlocker(\n id: string,\n inspect: BlockerInspector,\n): void {\n const context = useContext(BrowserAccountsContext);\n const registerTransitionBlocker = context?.registerTransitionBlocker;\n const inspectRef = useRef(inspect);\n inspectRef.current = inspect;\n useEffect(() => {\n if (!registerTransitionBlocker) return;\n return registerTransitionBlocker(id, () => inspectRef.current());\n }, [id, registerTransitionBlocker]);\n}\n"],"mappings":";;;AAMA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAs/BH;AAn6BJ,IAAM,yBAAyB,cAAkD,IAAI;AACrF,IAAM,kBAAkB;AACxB,IAAM,0BAA0B;AAEhC,eAAe,2BAA0C;AACvD,QAAM,IAAI,QAAc,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AAC7D;AAEA,SAAS,cAAsB;AAC7B,SAAO,OAAO,WAAW;AAC3B;AAEA,SAAS,UACP,MACA,OACS;AACT,SACE,MAAM,eAAe,OAAO,cAC5B,MAAM,eAAe,OAAO,cAC5B,MAAM,mBAAmB,OAAO,kBAChC,MAAM,UAAU,OAAO;AAE3B;AAEA,SAAS,kBACP,MACA,OACS;AACT,SACE,SAAS,QACT,UAAU,QACV,KAAK,eAAe,MAAM,cAC1B,KAAK,mBAAmB,MAAM,kBAC9B,KAAK,UAAU,MAAM;AAEzB;AAEA,SAAS,eAAe,MAAc,OAAuB;AAC3D,QAAM,YAAY,OAAO,IAAI;AAC7B,QAAM,aAAa,OAAO,KAAK;AAC/B,SAAO,YAAY,aAAa,KAAK,YAAY,aAAa,IAAI;AACpE;AAEA,SAAS,kBACP,WACA,SACS;AACT,QAAM,QAAQ,eAAe,UAAU,YAAY,QAAQ,UAAU;AACrE,SAAO,QAAQ,KAAM,UAAU,KAAK,eAAe,UAAU,YAAY,QAAQ,UAAU,IAAI;AACjG;AAEA,SAAS,aAAa,OAAuB;AAC3C,SAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,kCAAkC;AACtF;AAEA,SAAS,2BAAkC;AACzC,QAAM,QAAQ,IAAI,MAAM,6DAA6D;AACrF,QAAM,OAAO;AACb,SAAO;AACT;AAEA,SAAS,UAAU,OAA+B;AAChD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,OAAQ,MAA6B;AAC3C,SAAO,OAAO,SAAS,WAAW,OAAO;AAC3C;AAEA,SAAS,oBAAoB,OAAyB;AACpD,UAAO,oBAAI,IAAI,CAAC,yBAAyB,uBAAuB,2BAA2B,CAAC,GAAE;AAAA,IAC5F,UAAU,KAAK,KAAK;AAAA,EACtB;AACF;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA,uBAAuB;AAAA,EACvB,yBAAyB;AAC3B,GAAiC;AAC/B,QAAM,CAAC,YAAY,aAAa,IAAI,SAAiD,IAAI;AACzF,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwC,SAAS;AAC3E,QAAM,CAAC,UAAU,WAAW,IAAI,SAA4C,CAAC,CAAC;AAC9E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB,IAAI;AACrD,QAAM,CAAC,aAAa,cAAc,IAAI,SAA6C,IAAI;AACvF,QAAM,gBAAgB,OAAO,UAAU;AACvC,QAAM,iBAAiB,OAAO,WAAW;AACzC,QAAM,uBAAuB,OAAO,oBAAI,IAA8B,CAAC;AACvE,QAAM,aAAa,OAA0C,IAAI;AACjE,QAAM,6BAA6B,OAAsB,IAAI;AAC7D,QAAM,oBAAoB,OAA0D,IAAI;AACxF,QAAM,wBAAwB,OAA2D,IAAI;AAC7F,QAAM,yBAAyB,OAGrB,IAAI;AACd,QAAM,qBAAqB,OAGjB,IAAI;AACd,QAAM,2BAA2B,OAAsB,IAAI;AAC3D,QAAM,mCAAmC,OAAsB,IAAI;AACnE,QAAM,oCAAoC,OAAO,KAAK;AACtD,QAAM,cAAc,OAAO,CAAC;AAC5B,QAAM,qBAAqB,OAA+B,IAAI;AAC9D,QAAM,aAAa,OAAgC,IAAI;AACvD,QAAM,wBAAwB,OAAO,oBAAI,IAA2C,CAAC;AACrF,gBAAc,UAAU;AACxB,iBAAe,UAAU;AAEzB,QAAM,kBAAkB,YAAY,MAAyC;AAC3E,UAAM,UAAU,CAAC,GAAG,qBAAqB,QAAQ,QAAQ,CAAC,EACvD,IAAI,CAAC,CAAC,IAAI,OAAO,MAAM;AACtB,YAAM,UAAU,QAAQ;AACxB,aAAO,UAAU,EAAE,GAAG,SAAS,GAAG,IAAI;AAAA,IACxC,CAAC,EACA,OAAO,CAACA,WAAoDA,WAAU,IAAI,EAC1E,KAAK,CAAC,MAAM,UAAU,KAAK,GAAG,cAAc,MAAM,EAAE,CAAC;AACxD,gBAAY,OAAO;AACnB,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,mBAAmB,YAAY,CAAC,SAAiD;AACrF,QAAI,CAAC,KAAM;AACX,eAAW,SAAS,YAAY;AAAA,MAC9B,MAAM;AAAA,MACN,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,IACnB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,mBAAmB;AAAA,IACvB,CAAC,cAAsB,YAA6C;AAClE,iBAAW,SAAS,YAAY;AAAA,QAC9B,MAAM;AAAA,QACN;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB,YAAY,QAAQ;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,sBAAsB,YAAY,CAAC,iBAAyB;AAChE,eAAW,SAAS,YAAY;AAAA,MAC9B,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,6BAA6B,YAAY,MAAM;AACnD,mBAAe,UAAU;AACzB,sBAAkB,UAAU;AAC5B,2BAAuB,UAAU;AACjC,uBAAmB,UAAU;AAC7B,+BAA2B,UAAU;AACrC,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,CAAC;AAEL,QAAM,wBAAwB;AAAA,IAC5B,OACE,MACA,MACA,UACA,UACA,SACA,0BAA0B,OAC1B,0BAA0B,UAC0B;AACpD,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,CAAC,2BAA2B,QAAQ,UAAU,kBAAkB,QAAQ,IAAI,GAAG;AACjF,iBAAS,MAAM,OAAO,cAAc;AACpC,YAAI,YAAY,YAAY,SAAU,QAAO;AAC7C,YAAI,kBAAkB,QAAQ,IAAI,GAAG;AACnC,gBAAM,IAAI,MAAM,6DAA6D;AAAA,QAC/E;AAAA,MACF;AACA,UAAI,CAAC,2BAA2B,kBAAkB,QAAQ,MAAM,GAAG;AACjE,sBAAc,MAAM;AACpB,iBAAS,OAAO;AAChB,iBAAS,IAAI;AACb,eAAO;AAAA,MACT;AACA,aAAO,MAAM;AACX,2BAAmB,SAAS,MAAM;AAClC,cAAM,aAAa,IAAI,gBAAgB;AACvC,2BAAmB,UAAU;AAI7B,YAAI,QAAS,kBAAiB,MAAM;AACpC,iBAAS,SAAS;AAClB,cAAM,kBAAkB;AAAA,UACtB;AAAA,UACA,MAAM,0BAA0B,OAAO;AAAA,UACvC,IAAI;AAAA,UACJ,QAAQ,WAAW;AAAA,QACrB,CAAC;AACD,kCAA0B;AAC1B,YAAI,WAAW,OAAO,WAAW,YAAY,YAAY,SAAU,QAAO;AAC1E,YAAI,CAAC,QAAQ;AACX,wBAAc,IAAI;AAClB,mBAAS,OAAO;AAChB,mBAAS,IAAI;AACb,iBAAO;AAAA,QACT;AACA,cAAM,YAAY,MAAM,OAAO,6BAA6B;AAC5D,YAAI,WAAW,OAAO,WAAW,YAAY,YAAY,SAAU,QAAO;AAC1E,YAAI,UAAU,QAAQ,SAAS,KAAK,kBAAkB,QAAQ,SAAS,GAAG;AACxE,wBAAc,SAAS;AACvB,mBAAS,OAAO;AAChB,mBAAS,IAAI;AACb,iBAAO;AAAA,QACT;AAKA,iBAAS;AACT,iBAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,mBAAmB,gBAAgB;AAAA,EAC9C;AAEA,QAAM,YAAY;AAAA,IAChB,OAAO,MAAoC,UAAU,UAAU;AAC7D,YAAM,WAAW,EAAE,YAAY;AAC/B,YAAM,SAAS,cAAc;AAC7B,eAAS,SAAS;AAClB,UAAI,QAAQ,MAAM,OAAO,6BAA6B;AACtD,UAAI,YAAY,YAAY,SAAU,QAAO;AAC7C,UACE,0BACA,MAAM,SAAS,UACf,MAAM,mBAAmB,QACzB,MAAM,MAAM,WAAW,GACvB;AACA,cAAM,qBACJ,sBAAsB,SAAS,eAAe,MAAM,aAChD,sBAAsB,QAAQ,cAC9B,YAAY;AAClB,8BAAsB,UAAU;AAAA,UAC9B,YAAY,MAAM;AAAA,UAClB,aAAa;AAAA,QACf;AACA,YAAI;AACF,kBAAQ,MAAM,OAAO,oBAAoB;AAAA,YACvC,aAAa;AAAA,YACb,oBAAoB,MAAM;AAAA,UAC5B,CAAC;AACD,gCAAsB,UAAU;AAAA,QAClC,SAAS,QAAQ;AACf,cAAI,CAAC,oBAAoB,MAAM,EAAG,OAAM;AACxC,gBAAM,aAAa,MAAM,OAAO,cAAc;AAC9C,cAAI,YAAY,YAAY,SAAU,QAAO;AAC7C,cAAI,WAAW,mBAAmB,QAAQ,WAAW,MAAM,WAAW,EAAG,OAAM;AAC/E,kBAAQ;AACR,gCAAsB,UAAU;AAAA,QAClC;AAAA,MACF;AACA,UAAI,UAAU,QAAQ,KAAK,KAAK,kBAAkB,QAAQ,KAAK,GAAG;AAChE,sBAAc,KAAK;AACnB,iBAAS,OAAO;AAChB,iBAAS,IAAI;AACb,eAAO;AAAA,MACT;AACA,UAAI,SAAS,YAAa,4BAA2B;AACrD,aAAO,MAAM,sBAAsB,MAAM,QAAQ,OAAO,UAAU,SAAS,IAAI;AAAA,IACjF;AAAA,IACA,CAAC,wBAAwB,4BAA4B,QAAQ,qBAAqB;AAAA,EACpF;AAEA,QAAM,OAAO;AAAA,IACX,OAAO,QAAiB,SAAuD;AAC7E,YAAM,YAAY,aAAa,MAAM;AACrC,UAAI,oBAAoB,MAAM,GAAG;AAC/B,YAAI;AACF,gBAAM,UAAU,IAAI;AAAA,QACtB,QAAQ;AAAA,QAER;AAAA,MACF;AACA,eAAS,SAAS;AAClB,eAAS,mBAAmB;AAC5B,YAAM;AAAA,IACR;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,iBAAiB;AAAA,IACrB,OAAO,YAA0D;AAC/D,YAAM,UAAU,gBAAgB;AAChC,UAAI,QAAQ,SAAS,GAAG;AACtB,mBAAW,UAAU;AACrB,iBAAS,SAAS;AAClB,eAAO;AAAA,MACT;AACA,YAAM,UAAU,cAAc;AAC9B,UAAI,CAAC,QAAS,OAAM,IAAI,MAAM,mCAAmC;AACjE,YAAM,qBAAqB,QAAQ,sBAAsB,QAAQ;AACjE,cAAQ,qBAAqB;AAC7B,YAAM,WAAW,EAAE,YAAY;AAC/B,+BAAyB,UAAU;AACnC,uCAAiC,UAAU;AAC3C,wCAAkC,UAAU;AAC5C,iBAAW,UAAU;AACrB,eAAS,YAAY;AACrB,eAAS,IAAI;AACb,YAAM,eAAe,QAAQ,aAAa,OAAO;AACjD,UAAI,wBAAwB;AAC5B,UAAI;AACF,YAAI,cAAc;AAKhB,2BAAiB,QAAQ,aAAa,OAAO;AAC7C,6BAAmB,SAAS,MAAM;AAClC,gBAAM,aAAa,IAAI,gBAAgB;AACvC,6BAAmB,UAAU;AAC7B,wBAAc,UAAU;AACxB,wBAAc,IAAI;AAClB,mBAAS,SAAS;AAKlB,kCAAwB;AACxB,gBAAM,kBAAkB;AAAA,YACtB,MAAM,QAAQ;AAAA,YACd,MAAM;AAAA,YACN,IAAI;AAAA,YACJ,QAAQ,WAAW;AAAA,UACrB,CAAC;AACD,cAAI,WAAW,OAAO,WAAW,YAAY,YAAY,SAAU,QAAO;AAG1E,gBAAM,yBAAyB;AAC/B,cAAI,WAAW,OAAO,WAAW,YAAY,YAAY,SAAU,QAAO;AAAA,QAC5E;AACA,yCAAiC,UAAU;AAC3C,YAAI;AACJ,YAAI;AACF,qBAAW,MAAM,QAAQ,QAAQ,kBAAkB;AAAA,QACrD,SAAS,QAAQ;AACf,cAAI,UAAU,MAAM,MAAM,4BAA6B,OAAM;AAI7D,qBAAW,MAAM,QAAQ,QAAQ,kBAAkB;AAAA,QACrD;AACA,YAAI,YAAY,YAAY,SAAU,QAAO;AAI7C,YAAI,0BAA0B,QAAQ,SAAS;AAC/C,YAAI,kCAAkC,SAAS;AAC7C,qBAAW,MAAM,OAAO,6BAA6B;AACrD,oCAA0B;AAC1B,cAAI,YAAY,YAAY,SAAU,QAAO;AAAA,QAC/C;AACA,mBAAW,UAAU;AAKrB,YAAI,iCAAiC,YAAY,UAAU;AACzD,2CAAiC,UAAU;AAAA,QAC7C;AACA,YAAI,yBAAyB,YAAY,UAAU;AACjD,mCAAyB,UAAU;AACnC,4CAAkC,UAAU;AAAA,QAC9C;AACA,YACE,CAAC,yBACD,CAAC,2BACD,kBAAkB,SAAS,QAAQ,GACnC;AACA,wBAAc,QAAQ;AACtB,mBAAS,OAAO;AAChB,mBAAS,IAAI;AAAA,QACf,OAAO;AACL,gBAAM;AAAA,YACJ,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT,SAAS,QAAQ;AACf,YAAI,uBAAuB;AACzB,cAAI,oBAAoB;AACxB,cAAI;AACF,kBAAM,WAAW,MAAM,OAAO,6BAA6B;AAC3D,gBAAI,YAAY,YAAY,SAAU,QAAO;AAC7C,kBAAM;AAAA,cACJ,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,gBAAI,YAAY,YAAY,SAAU,QAAO;AAC7C,gCAAoB;AAAA,UACtB,QAAQ;AAAA,UAGR;AACA,cAAI,mBAAmB;AAIrB,kBAAM,gBAAgB,aAAa,MAAM;AACzC,qBAAS,aAAa;AACtB,qBAAS,mBAAmB;AAC5B,kBAAM;AAAA,UACR;AAAA,QACF;AACA,eAAO,MAAM,KAAK,QAAQ,QAAQ,IAAI;AAAA,MACxC,UAAE;AACA,YAAI,aAAc,qBAAoB,QAAQ,WAAW;AACzD,YAAI,iCAAiC,YAAY,UAAU;AACzD,2CAAiC,UAAU;AAAA,QAC7C;AACA,YAAI,yBAAyB,YAAY,UAAU;AACjD,mCAAyB,UAAU;AACnC,4CAAkC,UAAU;AAAA,QAC9C;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,YAAY,YAAY;AACtC,QAAI;AACF,aAAO,MAAM,UAAU,WAAW;AAAA,IACpC,SAAS,QAAQ;AACf,YAAM,YAAY,aAAa,MAAM;AACrC,eAAS,SAAS;AAClB,eAAS,mBAAmB;AAC5B,YAAM;AAAA,IACR;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,gCAAgC;AAAA,IACpC,OAAO,WAA6E;AAClF,yBAAmB,SAAS,MAAM;AAClC,YAAM,aAAa,IAAI,gBAAgB;AACvC,yBAAmB,UAAU;AAC7B,oBAAc,UAAU;AACxB,oBAAc,IAAI;AAClB,iCAA2B;AAC3B,eAAS,SAAS;AAClB,eAAS,IAAI;AAIb,YAAM,kBAAkB;AAAA,QACtB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,QAAQ,WAAW;AAAA,MACrB,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IACA,CAAC,4BAA4B,iBAAiB;AAAA,EAChD;AAEA,QAAM,kBAAkB,YAAY,YAAY;AAC9C,UAAM,wBAAwB,yBAAyB;AACvD,QACE,0BAA0B,QAC1B,iCAAiC,YAAY,uBAC7C;AACA,wCAAkC,UAAU;AAC5C,YAAM,8BAA8B,cAAc,OAAO;AACzD,aAAO;AAAA,IACT;AAKA,QAAI,0BAA0B,MAAM;AAClC,+BAAyB,UAAU;AACnC,uCAAiC,UAAU;AAC3C,wCAAkC,UAAU;AAC5C,iBAAW,UAAU;AAAA,IACvB;AACA,UAAM,WAAW,EAAE,YAAY;AAC/B,UAAM,SAAS,cAAc;AAC7B,QAAI;AACF,YAAM,UAAU,MAAM,8BAA8B,MAAM;AAC1D,UAAI,QAAQ,OAAO,WAAW,YAAY,YAAY,SAAU,QAAO;AACvE,YAAM,WAAW,MAAM,OAAO,6BAA6B;AAC3D,UAAI,YAAY,YAAY,SAAU,QAAO;AAC7C,aAAO,MAAM,sBAAsB,aAAa,QAAQ,UAAU,UAAU,OAAO,IAAI;AAAA,IACzF,SAAS,QAAQ;AACf,UAAI,YAAY,YAAY,SAAU,QAAO;AAC7C,YAAM,YAAY,aAAa,MAAM;AACrC,eAAS,SAAS;AAClB,eAAS,mBAAmB;AAC5B,YAAM;AAAA,IACR;AAAA,EACF,GAAG,CAAC,+BAA+B,QAAQ,qBAAqB,CAAC;AAEjE,QAAM,4BAA4B,YAAY,CAAC,IAAY,YAA8B;AACvF,QAAI,CAAC,GAAG,KAAK,EAAG,OAAM,IAAI,MAAM,mDAAmD;AACnF,yBAAqB,QAAQ,IAAI,IAAI,OAAO;AAC5C,WAAO,MAAM;AACX,UAAI,qBAAqB,QAAQ,IAAI,EAAE,MAAM,SAAS;AACpD,6BAAqB,QAAQ,OAAO,EAAE;AAAA,MACxC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAqB,YAAY,YAA8B;AACnE,UAAM,UAAU,WAAW;AAC3B,WAAO,UAAU,MAAM,eAAe,OAAO,IAAI;AAAA,EACnD,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,0BAA0B,YAAY,MAAM;AAChD,eAAW,UAAU;AACrB,gBAAY,CAAC,CAAC;AACd,aAAS,cAAc,UAAU,UAAU,SAAS;AAAA,EACtD,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa;AAAA,IACjB,OAAO,MAAwB,QAAiB,iBAA0B;AACxE,YAAM,UAAU,cAAc;AAC9B,UAAI,CAAC,QAAS,OAAM,IAAI,MAAM,mCAAmC;AACjE,UAAI,SAAS,YAAY,WAAW,QAAQ,kBAAkB,gBAAgB,EAAE,SAAS,GAAG;AAC1F,iBAAS,SAAS;AAClB,cAAM,IAAI,MAAM,6DAA6D;AAAA,MAC/E;AACA,YAAM,WAAW,EAAE,YAAY;AAC/B,eAAS,YAAY;AACrB,eAAS,IAAI;AACb,YAAM,YAAY,KAAK,UAAU;AAAA,QAC/B;AAAA,QACA,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,QAAQ;AAAA,MACV,CAAC;AACD,YAAM,iBACJ,kBAAkB,SAAS,cAAc,YACrC,kBAAkB,QAAQ,cAC1B,YAAY;AAClB,wBAAkB,UAAU,EAAE,WAAW,aAAa,eAAe;AACrE,UAAI;AACJ,UAAI;AACF,eAAO,MAAM,OAAO,sBAAsB;AAAA,UACxC,aAAa;AAAA,UACb,oBAAoB,QAAQ;AAAA,UAC5B;AAAA,UACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,UAC3B,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,QACzC,CAAC;AAAA,MACH,SAAS,QAAQ;AACf,YAAI,YAAY,YAAY,UAAU;AACpC,cAAI,kBAAkB,SAAS,gBAAgB,gBAAgB;AAC7D,8BAAkB,UAAU;AAAA,UAC9B;AACA,gBAAM,yBAAyB;AAAA,QACjC;AACA,eAAO,MAAM,KAAK,QAAQ,IAAI;AAAA,MAChC;AACA,UAAI,YAAY,YAAY,UAAU;AACpC,YAAI,kBAAkB,SAAS,gBAAgB,gBAAgB;AAC7D,4BAAkB,UAAU;AAAA,QAC9B;AACA,cAAM,yBAAyB;AAAA,MACjC;AACA,wBAAkB,UAAU;AAC5B,iCAA2B,UAAU,UAAU;AAC/C,6BAAuB,UAAU;AACjC,yBAAmB,UAAU;AAC7B,qBAAe,IAAI;AACnB,eAAS,OAAO;AAChB,aAAO;AAAA,IACT;AAAA,IACA,CAAC,QAAQ,MAAM,eAAe;AAAA,EAChC;AAEA,QAAM,WAAW;AAAA,IACf,OAAO,iBAA0B,MAAM,WAAW,OAAO,QAAW,YAAY;AAAA,IAChF,CAAC,UAAU;AAAA,EACb;AACA,QAAM,cAAc;AAAA,IAClB,OAAO,QAAgB,iBACrB,MAAM,WAAW,UAAU,QAAQ,YAAY;AAAA,IACjD,CAAC,UAAU;AAAA,EACb;AAEA,QAAM,wBAAwB;AAAA,IAC5B,OAAO,UAAiE;AACtE,YAAM,UAAU,cAAc;AAC9B,YAAM,oBAAoB,eAAe;AACzC,UAAI,CAAC,WAAW,CAAC,kBAAmB,OAAM,IAAI,MAAM,wCAAwC;AAC5F,YAAM,iBACJ,kBAAkB,SAAS,YAC3B,2BAA2B,YAAY,QACvC,2BAA2B,YAAY,QAAQ;AACjD,UAAI,kBAAkB,gBAAgB,EAAE,SAAS,GAAG;AAClD,iBAAS,SAAS;AAClB,eAAO;AAAA,MACT;AACA,YAAM,WAAW,EAAE,YAAY;AAC/B,eAAS,YAAY;AACrB,eAAS,IAAI;AACb,YAAM,sBAAsB,uBAAuB,WAAW;AAAA,QAC5D,aAAa,YAAY;AAAA,QACzB,oBAAoB,QAAQ;AAAA,MAC9B;AACA,6BAAuB,UAAU;AACjC,UAAI;AACF,cAAM,YAAY,MAAM,OAAO,iCAAiC;AAAA,UAC9D,aAAa,oBAAoB;AAAA,UACjC,oBAAoB,oBAAoB;AAAA,UACxC,eAAe,kBAAkB;AAAA,UACjC,OAAO,MAAM;AAAA,UACb,UAAU,MAAM;AAAA,QAClB,CAAC;AACD,YAAI,YAAY,YAAY,SAAU,QAAO;AAC7C,+BAAuB,UAAU;AACjC,2BAAmB,UAAU;AAC7B,mCAA2B,UAAU;AACrC,uBAAe,IAAI;AACnB,cAAM,eAAe,UAAU,WAAW,eAAe,QAAQ;AACjE,YAAI,cAAc;AAChB,gBAAM;AAAA,YACJ,kBAAkB;AAAA,YAClB;AAAA,YACA,UAAU;AAAA,YACV;AAAA,YACA;AAAA,UACF;AAAA,QACF,OAAO;AACL,wBAAc,UAAU,UAAU;AAClC,mBAAS,OAAO;AAAA,QAClB;AACA,eAAO;AAAA,MACT,SAAS,QAAQ;AACf,eAAO,MAAM,KAAK,QAAQ,kBAAkB,IAAI;AAAA,MAClD;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,MAAM,iBAAiB,qBAAqB;AAAA,EACvD;AAEA,QAAM,iCAAiC;AAAA,IACrC,OAAO,kBAA4C;AACjD,YAAM,oBAAoB,eAAe;AACzC,UAAI,CAAC,qBAAqB,kBAAkB,OAAO,cAAe,QAAO;AACzE,UAAI;AACF,cAAM,UAAU,kBAAkB,MAAM,IAAI;AAC5C,YAAI,eAAe,SAAS,OAAO,cAAe,QAAO;AACzD,+BAAuB,UAAU;AACjC,2BAAmB,UAAU;AAC7B,mCAA2B,UAAU;AACrC,uBAAe,IAAI;AACnB,eAAO;AAAA,MACT,SAAS,QAAQ;AACf,cAAM,YAAY,aAAa,MAAM;AACrC,iBAAS,SAAS;AAClB,iBAAS,mBAAmB;AAC5B,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,yBAAyB,YAAY,YAAY;AACrD,UAAM,UAAU,cAAc;AAC9B,UAAM,oBAAoB,eAAe;AACzC,QAAI,CAAC,WAAW,CAAC,kBAAmB;AACpC,UAAM,WAAW,EAAE,YAAY;AAC/B,aAAS,YAAY;AACrB,UAAM,kBAAkB,mBAAmB,WAAW;AAAA,MACpD,aAAa,YAAY;AAAA,MACzB,oBAAoB,QAAQ;AAAA,IAC9B;AACA,uBAAmB,UAAU;AAC7B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,OAAO,uBAAuB;AAAA,QACzC,aAAa,gBAAgB;AAAA,QAC7B,oBAAoB,gBAAgB;AAAA,QACpC,eAAe,kBAAkB;AAAA,MACnC,CAAC;AAAA,IACH,SAAS,QAAQ;AACf,UAAI,YAAY,YAAY,UAAU;AACpC,YAAI,mBAAmB,SAAS,gBAAgB,gBAAgB,aAAa;AAC3E,6BAAmB,UAAU;AAAA,QAC/B;AACA,cAAM,yBAAyB;AAAA,MACjC;AACA,YAAM,KAAK,QAAQ,kBAAkB,IAAI;AACzC;AAAA,IACF;AACA,QAAI,YAAY,YAAY,UAAU;AACpC,UAAI,mBAAmB,SAAS,gBAAgB,gBAAgB,aAAa;AAC3E,2BAAmB,UAAU;AAAA,MAC/B;AACA,YAAM,yBAAyB;AAAA,IACjC;AACA,+BAA2B;AAC3B,kBAAc,IAAI;AAClB,aAAS,OAAO;AAChB,aAAS,IAAI;AAAA,EACf,GAAG,CAAC,4BAA4B,QAAQ,IAAI,CAAC;AAE7C,QAAM,aAAa;AAAA,IACjB,OAAO,WAAmB;AACxB,YAAM,KAAK,YAAY;AACvB,aAAO,MAAM,eAAe;AAAA,QAC1B,MAAM;AAAA,QACN,aAAa;AAAA,QACb,oBAAoB;AAAA,QACpB,cAAc,CAAC,YAAY,QAAQ,mBAAmB;AAAA,QACtD,SAAS,OAAO,uBACd,MAAM,OAAO,gBAAgB;AAAA,UAC3B,aAAa;AAAA,UACb;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IACA,CAAC,QAAQ,cAAc;AAAA,EACzB;AAEA,QAAM,aAAa;AAAA,IACjB,OAAO,QAAgB,sBAAqC;AAC1D,YAAM,KAAK,YAAY;AACvB,aAAO,MAAM,eAAe;AAAA,QAC1B,MAAM;AAAA,QACN,aAAa;AAAA,QACb,oBAAoB;AAAA,QACpB,cAAc,CAAC,YAAY,QAAQ,mBAAmB;AAAA,QACtD,SAAS,OAAO,uBACd,MAAM,OAAO,gBAAgB;AAAA,UAC3B,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IACA,CAAC,QAAQ,cAAc;AAAA,EACzB;AAEA,QAAM,YAAY,YAAY,YAAY;AACxC,UAAM,KAAK,YAAY;AACvB,WAAO,MAAM,eAAe;AAAA,MAC1B,MAAM;AAAA,MACN,aAAa;AAAA,MACb,oBAAoB;AAAA;AAAA;AAAA;AAAA,MAIpB,cAAc,MAAM;AAAA,MACpB,SAAS,OAAO,uBAAuB;AACrC,cAAM,OAAO,iBAAiB,EAAE,aAAa,IAAI,mBAAmB,CAAC;AACrE,eAAO,MAAM,OAAO,cAAc;AAAA,MACpC;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,cAAc,CAAC;AAE3B,QAAM,kBAAkB;AAAA,IACtB,OAAO,SAAiB,MAAM,OAAO,gBAAgB,EAAE,KAAK,CAAC;AAAA,IAC7D,CAAC,MAAM;AAAA,EACT;AAEA,YAAU,MAAM;AACd,UAAM,WAAW;AACjB,UAAM,kBAAkB;AACxB,SAAK,QAAQ,EAAE,MAAM,CAAC,WAAW;AAC/B,eAAS,aAAa,MAAM,CAAC;AAC7B,eAAS,mBAAmB;AAAA,IAC9B,CAAC;AACD,WAAO,MAAM;AACX,QAAE,SAAS;AACX,sBAAgB,SAAS,MAAM;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,YAAU,MAAM;AACd,QAAI,CAAC,wBAAwB,OAAO,qBAAqB,YAAa;AACtE,UAAM,UAAU,IAAI,iBAAiB,oBAAoB;AACzD,UAAM,aAAa,sBAAsB;AACzC,eAAW,UAAU;AACrB,YAAQ,YAAY,CAAC,UAAiC;AACpD,YAAMA,SAAQ,MAAM;AACpB,UAAI,CAACA,UAAS,OAAOA,WAAU,SAAU;AACzC,YAAM,OAAOA;AAMb,UAAI,KAAK,SAAS,4BAA4B;AAC5C,YACE,OAAO,KAAK,iBAAiB,YAC7B,CAAC,8EAA8E;AAAA,UAC7E,KAAK;AAAA,QACP,KACA,OAAO,KAAK,eAAe,YAC3B,OAAO,KAAK,eAAe,YAC3B,sBAAsB,QAAQ,IAAI,KAAK,YAAY,GACnD;AACA;AAAA,QACF;AACA,cAAM,UAAU,cAAc;AAC9B,YACE,YACC,QAAQ,eAAe,KAAK,cAAc,QAAQ,eAAe,KAAK,aACvE;AACA;AAAA,QACF;AACA,YAAI,CAAC,WAAW,sBAAsB,QAAQ,SAAS,EAAG;AAC1D,cAAM,YAAY,sBAAsB,QAAQ,SAAS;AACzD,cAAM,UAAU,WAAW,MAAM;AAC/B,cAAI,CAAC,sBAAsB,QAAQ,OAAO,KAAK,YAAsB,EAAG;AACxE,cAAI,sBAAsB,QAAQ,SAAS,GAAG;AAC5C,iBAAK,gBAAgB,EAAE,MAAM,MAAM,MAAS;AAAA,UAC9C;AAAA,QACF,GAAG,uBAAuB;AAC1B,8BAAsB,QAAQ,IAAI,KAAK,cAAc,OAAO;AAC5D,YAAI,WAAW;AACb,cAAI,yBAAyB,YAAY,MAAM;AAC7C,8CAAkC,UAAU;AAAA,UAC9C,OAAO;AACL,cAAE,YAAY;AAAA,UAChB;AACA,eAAK,8BAA8B,OAAO,EAAE,MAAM,MAAM,MAAS;AAAA,QACnE;AACA;AAAA,MACF;AACA,UAAI,KAAK,SAAS,6BAA6B;AAC7C,YAAI,OAAO,KAAK,iBAAiB,SAAU;AAC3C,cAAM,UAAU,sBAAsB,QAAQ,IAAI,KAAK,YAAY;AACnE,YAAI,YAAY,OAAW;AAC3B,qBAAa,OAAO;AACpB,8BAAsB,QAAQ,OAAO,KAAK,YAAY;AACtD,YAAI,sBAAsB,QAAQ,SAAS,GAAG;AAC5C,eAAK,gBAAgB,EAAE,MAAM,MAAM,MAAS;AAAA,QAC9C;AACA;AAAA,MACF;AACA,UACE,KAAK,SAAS,yBACd,OAAO,KAAK,eAAe,YAC3B,OAAO,KAAK,eAAe,YAC1B,KAAK,eAAe,cAAc,SAAS,cAC1C,KAAK,eAAe,cAAc,SAAS,YAC7C;AACA;AAAA,MACF;AACA,iBAAW,WAAW,sBAAsB,QAAQ,OAAO,EAAG,cAAa,OAAO;AAClF,4BAAsB,QAAQ,MAAM;AACpC,WAAK,gBAAgB,EAAE,MAAM,MAAM,MAAS;AAAA,IAC9C;AACA,WAAO,MAAM;AACX,iBAAW,WAAW,WAAW,OAAO,EAAG,cAAa,OAAO;AAC/D,iBAAW,MAAM;AACjB,cAAQ,MAAM;AACd,UAAI,WAAW,YAAY,QAAS,YAAW,UAAU;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC,+BAA+B,sBAAsB,eAAe,CAAC;AAEzE,QAAM,QAAQ;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,sBAAsB,WAAW,YAAY;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SACE,oBAAC,uBAAuB,UAAvB,EAAgC,OAAe,UAAS;AAE7D;AAEO,SAAS,qBAAkD;AAChE,QAAM,UAAU,WAAW,sBAAsB;AACjD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,6BAAiE;AAC/E,SAAO,WAAW,sBAAsB;AAC1C;AAEO,SAAS,mCAAmC,IAAY,SAAiC;AAC9F,QAAM,EAAE,0BAA0B,IAAI,mBAAmB;AACzD,QAAM,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AACrB;AAAA,IACE,MAAM,0BAA0B,IAAI,MAAM,WAAW,QAAQ,CAAC;AAAA,IAC9D,CAAC,IAAI,yBAAyB;AAAA,EAChC;AACF;AAGO,SAAS,2CACd,IACA,SACM;AACN,QAAM,UAAU,WAAW,sBAAsB;AACjD,QAAM,4BAA4B,SAAS;AAC3C,QAAM,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AACrB,YAAU,MAAM;AACd,QAAI,CAAC,0BAA2B;AAChC,WAAO,0BAA0B,IAAI,MAAM,WAAW,QAAQ,CAAC;AAAA,EACjE,GAAG,CAAC,IAAI,yBAAyB,CAAC;AACpC;","names":["value"]}
@@ -1,9 +1,10 @@
1
- import type { SessionEvent } from "@opengeni/sdk";
1
+ import { type ToolDisplayMetadata, type SessionEvent } from "@opengeni/sdk";
2
2
  export type PendingApproval = {
3
3
  /** The id to send back via `user.approvalDecision` (`approvalId`). */
4
4
  id: string;
5
5
  /** Tool/function name awaiting the decision. */
6
6
  name: string;
7
+ display?: ToolDisplayMetadata;
7
8
  arguments?: unknown;
8
9
  /** The raw approval entry from the `session.requiresAction` payload. */
9
10
  raw?: unknown;
@@ -1,12 +1,14 @@
1
+ "use client";
1
2
  import {
2
3
  DocumentArtifactSurface,
3
4
  DocumentEditor,
4
5
  DocumentProjectionArtifactSurface,
5
6
  DocumentProjectionEditor,
6
7
  EditableDocumentArtifactSurface
7
- } from "./chunk-HUIKIDM5.js";
8
- import "./chunk-KCGXPP5V.js";
9
- import "./chunk-22KP6LR5.js";
8
+ } from "./chunk-I7X2P4FU.js";
9
+ import "./chunk-2DDJ6YH6.js";
10
+ import "./chunk-PYEOPA4M.js";
11
+ import "./chunk-TXS65BB2.js";
10
12
  export {
11
13
  DocumentArtifactSurface,
12
14
  DocumentEditor,
@@ -1,12 +1,14 @@
1
+ "use client";
1
2
  import {
2
3
  EditablePresentationArtifactSurface,
3
4
  PresentationArtifactSurface,
4
5
  PresentationEditor,
5
6
  PresentationProjectionArtifactSurface,
6
7
  PresentationProjectionEditor
7
- } from "./chunk-PEI6RANI.js";
8
- import "./chunk-KCGXPP5V.js";
9
- import "./chunk-22KP6LR5.js";
8
+ } from "./chunk-GQMRL52F.js";
9
+ import "./chunk-2DDJ6YH6.js";
10
+ import "./chunk-PYEOPA4M.js";
11
+ import "./chunk-TXS65BB2.js";
10
12
  export {
11
13
  EditablePresentationArtifactSurface,
12
14
  PresentationArtifactSurface,
@@ -1,3 +1,3 @@
1
1
  /** Spreadsheet-only artifact surface. Import from `@opengeni/react/artifacts/spreadsheet`. */
2
- export { SpreadsheetArtifactSurface, SpreadsheetGrid, SpreadsheetProjectionGrid, type SpreadsheetArtifactSurfaceProps, type SpreadsheetCommit, type SpreadsheetRangeCommit, type SpreadsheetGridProps, type SpreadsheetGridProjection, type SpreadsheetProjectionCell, type SpreadsheetProjectionGridProps, type SpreadsheetSelection, type SpreadsheetViewport, } from "./components/artifacts/spreadsheet-grid.js";
2
+ export { SpreadsheetArtifactSurface, SpreadsheetGrid, SpreadsheetProjectionGrid, type SpreadsheetArtifactSurfaceProps, type SpreadsheetCommit, type SpreadsheetDimensionCommit, type SpreadsheetRangeCommit, type SpreadsheetGridProps, type SpreadsheetGridProjection, type SpreadsheetProjectionCell, type SpreadsheetProjectionGridProps, type SpreadsheetSelection, type SpreadsheetViewport, } from "./components/artifacts/spreadsheet-grid.js";
3
3
  export { EditableSpreadsheetArtifactSurface, EditableSpreadsheetGrid, type EditableSpreadsheetArtifactSurfaceProps, type EditableSpreadsheetGridProps, } from "./components/artifacts/editable-spreadsheet.js";
@@ -1,12 +1,14 @@
1
+ "use client";
1
2
  import {
2
3
  EditableSpreadsheetArtifactSurface,
3
4
  EditableSpreadsheetGrid,
4
5
  SpreadsheetArtifactSurface,
5
6
  SpreadsheetGrid,
6
7
  SpreadsheetProjectionGrid
7
- } from "./chunk-ICA6R6TW.js";
8
- import "./chunk-KCGXPP5V.js";
9
- import "./chunk-22KP6LR5.js";
8
+ } from "./chunk-WNN7NO2N.js";
9
+ import "./chunk-PYEOPA4M.js";
10
+ import "./chunk-TGXK4BAZ.js";
11
+ import "./chunk-TXS65BB2.js";
10
12
  export {
11
13
  EditableSpreadsheetArtifactSurface,
12
14
  EditableSpreadsheetGrid,
@@ -1,2 +1,6 @@
1
+ export { inlineHtmlDocument } from "./components/artifacts/inline-html-document.js";
2
+ export { isRetainedImageContentType, useRetainedImageObjectUrl } from "./timeline/retained-image.js";
3
+ export { PatchApplyCommand, isPatchFilename } from "./timeline/patch-apply-command.js";
4
+ export { ArtifactBadge, ArtifactLabelsProvider, DEFAULT_ARTIFACT_LABELS, useArtifactLabels, type ArtifactLabels, ArtifactButton, ArtifactLoading, ArtifactProblem, ArtifactSelect, ArtifactViewerHeader, artifactKindIcon, artifactKindSubtitle, artifactLoadErrorMessage, artifactLoadErrorView, type ArtifactKind, type ArtifactLoadErrorKind, type ArtifactLoadErrorView, ArtifactSandbox, type ArtifactSandboxProps, DeferredChatMedia, SiteView, type SiteViewProps, ChatInteractiveBlock, type ChatInteractiveBlockProps, type SiteSnapshotClient, type SiteToolBridgeFactory, type SiteToolScope, EditableArtifactView, type EditableArtifactRuntimes, type EditableArtifactViewProps, type OpenedEditableArtifact, SessionArtifactViewer, type SessionArtifactTarget, type SessionArtifactViewerLabels, type SessionArtifactViewerProps, } from "./components/artifacts/index.js";
1
5
  /** Public artifact surfaces. Import from `@opengeni/react/artifacts`. */
2
- export { ArtifactSurface, DocumentArtifactSurface, DocumentEditor, DocumentProjectionArtifactSurface, DocumentProjectionEditor, BrowserEditableArtifactWorkbench, EditableDocumentArtifactSurface, EditableArtifactWorkbench, EditableArtifactWorkbenchHost, EditablePresentationArtifactSurface, EditableSpreadsheetArtifactSurface, EditableSpreadsheetGrid, PresentationArtifactSurface, PresentationEditor, PresentationProjectionArtifactSurface, PresentationProjectionEditor, PublishedHtmlArtifactFrame, PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX, SpreadsheetArtifactSurface, SpreadsheetGrid, SpreadsheetProjectionGrid, type ArtifactModality, type ArtifactSurfaceProps, type DocumentArtifactSurfaceProps, type DocumentCommit, type DocumentCommitHandler, type DocumentEditorProps, type DocumentEditorProjection, type DocumentLayoutMode, type DocumentProjectionArtifactSurfaceProps, type DocumentProjectionBlock, type DocumentProjectionChange, type DocumentProjectionComment, type DocumentProjectionEditorProps, type DocumentProjectionPageBreak, type DocumentProjectionPageGeometry, type DocumentProjectionParagraph, type DocumentProjectionParagraphStyle, type DocumentProjectionSection, type DocumentProjectionTable, type DocumentProjectionTextRun, type DocumentProjectionTextStyle, type DocumentSelection, type BrowserEditableArtifactWorkbenchOptions, type BrowserEditableArtifactWorkbenchProps, type EditableDocumentArtifactSurfaceProps, type EditableArtifactWorkbenchHostProps, type EditableArtifactWorkbenchProps, type EditablePresentationArtifactSurfaceProps, type EditableSpreadsheetArtifactSurfaceProps, type EditableSpreadsheetGridProps, type PresentationArtifactSurfaceProps, type PresentationCommit, type PresentationCommitHandler, type PresentationEditorProps, type PresentationEditorProjection, type PresentationProjectionArtifactSurfaceProps, type PresentationProjectionChart, type PresentationProjectionChartSeries, type PresentationProjectionConnector, type PresentationProjectionEditorProps, type PublishedHtmlArtifactFrameProps, type PresentationProjectionElementMetadata, type PresentationProjectionElement, type PresentationProjectionFill, type PresentationProjectionGroup, type PresentationProjectionImage, type PresentationProjectionLine, type PresentationProjectionPosition, type PresentationProjectionRichText, type PresentationProjectionShape, type PresentationProjectionTable, type PresentationProjectionTableCell, type PresentationProjectionTextParagraph, type PresentationProjectionTextRun, type PresentationProjectionTextStyle, type PresentationSlideProjection, type SpreadsheetArtifactSurfaceProps, type SpreadsheetCommit, type SpreadsheetRangeCommit, type SpreadsheetGridProps, type SpreadsheetGridProjection, type SpreadsheetProjectionCell, type SpreadsheetProjectionGridProps, type SpreadsheetSelection, type SpreadsheetViewport, } from "./components/artifacts/index.js";
6
+ export { ArtifactSurface, DocumentArtifactSurface, DocumentEditor, DocumentProjectionArtifactSurface, DocumentProjectionEditor, BrowserEditableArtifactWorkbench, EditableDocumentArtifactSurface, EditableArtifactWorkbench, EditableArtifactWorkbenchHost, EditablePresentationArtifactSurface, EditableSpreadsheetArtifactSurface, EditableSpreadsheetGrid, PresentationArtifactSurface, PresentationEditor, PresentationProjectionArtifactSurface, PresentationProjectionEditor, PublishedHtmlArtifactFrame, PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX, openGeniSiteBridgePortFromBootstrap, publishedHtmlArtifactDocument, SpreadsheetArtifactSurface, SpreadsheetGrid, SpreadsheetProjectionGrid, type ArtifactModality, type ArtifactSurfaceProps, type DocumentArtifactSurfaceProps, type DocumentCommit, type DocumentCommitHandler, type DocumentEditorProps, type DocumentEditorProjection, type DocumentLayoutMode, type DocumentProjectionArtifactSurfaceProps, type DocumentProjectionBlock, type DocumentProjectionChange, type DocumentProjectionComment, type DocumentProjectionEditorProps, type DocumentProjectionPageBreak, type DocumentProjectionPageGeometry, type DocumentProjectionParagraph, type DocumentProjectionParagraphStyle, type DocumentProjectionSection, type DocumentProjectionTable, type DocumentProjectionTextRun, type DocumentProjectionTextStyle, type DocumentSelection, type BrowserEditableArtifactWorkbenchOptions, type BrowserEditableArtifactWorkbenchProps, type EditableDocumentArtifactSurfaceProps, type EditableArtifactWorkbenchHostProps, type EditableArtifactWorkbenchProps, type EditablePresentationArtifactSurfaceProps, type EditableSpreadsheetArtifactSurfaceProps, type EditableSpreadsheetGridProps, type PresentationArtifactSurfaceProps, type PresentationCommit, type PresentationCommitHandler, type PresentationEditorProps, type PresentationEditorProjection, type PresentationProjectionArtifactSurfaceProps, type PresentationProjectionChart, type PresentationProjectionChartSeries, type PresentationProjectionConnector, type PresentationProjectionEditorProps, type PublishedHtmlArtifactFrameProps, type PublishedHtmlArtifactToolBridge, type PresentationProjectionElementMetadata, type PresentationProjectionElement, type PresentationProjectionFill, type PresentationProjectionGroup, type PresentationProjectionImage, type PresentationProjectionLine, type PresentationProjectionPosition, type PresentationProjectionRichText, type PresentationProjectionShape, type PresentationProjectionTable, type PresentationProjectionTableCell, type PresentationProjectionTextParagraph, type PresentationProjectionTextRun, type PresentationProjectionTextStyle, type PresentationSlideProjection, type SpreadsheetArtifactSurfaceProps, type SpreadsheetCommit, type SpreadsheetDimensionCommit, type SpreadsheetRangeCommit, type SpreadsheetGridProps, type SpreadsheetGridProjection, type SpreadsheetProjectionCell, type SpreadsheetProjectionGridProps, type SpreadsheetSelection, type SpreadsheetViewport, } from "./components/artifacts/index.js";