@opengeni/react 3.3.2 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (855) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +2 -0
  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-4EUKJXUO.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-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -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-3RJKUVCA.js +14068 -0
  27. package/dist/chunk-3RJKUVCA.js.map +1 -0
  28. package/dist/chunk-3UZCWK46.js +298 -0
  29. package/dist/chunk-3UZCWK46.js.map +1 -0
  30. package/dist/chunk-47CKUXTW.js +293 -0
  31. package/dist/chunk-47CKUXTW.js.map +1 -0
  32. package/dist/chunk-4QYP6QUI.js +109 -0
  33. package/dist/chunk-4QYP6QUI.js.map +1 -0
  34. package/dist/chunk-5EY26VZ7.js +1053 -0
  35. package/dist/chunk-5EY26VZ7.js.map +1 -0
  36. package/dist/chunk-5I4VRWBB.js +56 -0
  37. package/dist/chunk-5I4VRWBB.js.map +1 -0
  38. package/dist/chunk-5WOR7UCL.js +191 -0
  39. package/dist/chunk-5WOR7UCL.js.map +1 -0
  40. package/dist/chunk-5YJLGOM5.js +51 -0
  41. package/dist/chunk-5YJLGOM5.js.map +1 -0
  42. package/dist/chunk-6JFN3OWG.js +386 -0
  43. package/dist/chunk-6JFN3OWG.js.map +1 -0
  44. package/dist/chunk-7QJT5O4S.js +35 -0
  45. package/dist/chunk-7QJT5O4S.js.map +1 -0
  46. package/dist/chunk-A55KV72M.js +402 -0
  47. package/dist/chunk-A55KV72M.js.map +1 -0
  48. package/dist/chunk-ADWCLI4G.js +2028 -0
  49. package/dist/chunk-ADWCLI4G.js.map +1 -0
  50. package/dist/chunk-B27E3V37.js +29 -0
  51. package/dist/chunk-B27E3V37.js.map +1 -0
  52. package/dist/chunk-B7TC2A33.js +83 -0
  53. package/dist/chunk-B7TC2A33.js.map +1 -0
  54. package/dist/chunk-BLL56F7R.js +385 -0
  55. package/dist/chunk-BLL56F7R.js.map +1 -0
  56. package/dist/chunk-BOFEQC6K.js +162 -0
  57. package/dist/chunk-BOFEQC6K.js.map +1 -0
  58. package/dist/chunk-CM7LVUKC.js +35 -0
  59. package/dist/chunk-CM7LVUKC.js.map +1 -0
  60. package/dist/chunk-CORUP6JB.js +122 -0
  61. package/dist/chunk-CORUP6JB.js.map +1 -0
  62. package/dist/chunk-CSX5FFKZ.js +35 -0
  63. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  64. package/dist/chunk-EGVHJKGJ.js +3125 -0
  65. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  66. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  67. package/dist/chunk-G76LSA76.js.map +1 -0
  68. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  69. package/dist/chunk-GQMRL52F.js.map +1 -0
  70. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  71. package/dist/chunk-GUUXOISA.js.map +1 -0
  72. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  73. package/dist/chunk-I7X2P4FU.js.map +1 -0
  74. package/dist/chunk-IGFZFLI2.js +1390 -0
  75. package/dist/chunk-IGFZFLI2.js.map +1 -0
  76. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  77. package/dist/chunk-IMSUVYQB.js.map +1 -0
  78. package/dist/chunk-IOYHDEP3.js +38 -0
  79. package/dist/chunk-IOYHDEP3.js.map +1 -0
  80. package/dist/chunk-IZV5FTJC.js +55 -0
  81. package/dist/chunk-IZV5FTJC.js.map +1 -0
  82. package/dist/chunk-KF33GTWN.js +343 -0
  83. package/dist/chunk-KF33GTWN.js.map +1 -0
  84. package/dist/chunk-KSGQ5ODA.js +457 -0
  85. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  86. package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
  87. package/dist/chunk-KZC6QRNR.js.map +1 -0
  88. package/dist/chunk-LJUMYUBO.js +218 -0
  89. package/dist/chunk-LJUMYUBO.js.map +1 -0
  90. package/dist/chunk-LSW2OJVV.js +380 -0
  91. package/dist/chunk-LSW2OJVV.js.map +1 -0
  92. package/dist/chunk-M357MHH3.js +2 -0
  93. package/dist/chunk-M357MHH3.js.map +1 -0
  94. package/dist/chunk-MK2TQO4Y.js +24 -0
  95. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  96. package/dist/chunk-N7S72EXK.js +25 -0
  97. package/dist/chunk-N7S72EXK.js.map +1 -0
  98. package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
  99. package/dist/chunk-NKMYZFHA.js.map +1 -0
  100. package/dist/chunk-NX4ADH73.js +14 -0
  101. package/dist/chunk-NX4ADH73.js.map +1 -0
  102. package/dist/chunk-O7F6UJO4.js +71 -0
  103. package/dist/chunk-O7F6UJO4.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-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-WBJY57A3.js +402 -0
  137. package/dist/chunk-WBJY57A3.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-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
  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/grok-mark.d.ts +26 -0
  200. package/dist/components/human-input-form.d.ts +28 -32
  201. package/dist/components/human-input-surface.d.ts +7 -2
  202. package/dist/components/linkified-text.d.ts +18 -0
  203. package/dist/components/machine-input-display.d.ts +22 -1
  204. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  205. package/dist/components/machines/machine-detail.d.ts +7 -1
  206. package/dist/components/machines/machine-status.d.ts +48 -0
  207. package/dist/components/markdown-table-layout.d.ts +18 -0
  208. package/dist/components/markdown.d.ts +37 -4
  209. package/dist/components/message-timeline.d.ts +86 -7
  210. package/dist/components/model-mark.d.ts +29 -0
  211. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  212. package/dist/components/model-policy-picker.d.ts +35 -28
  213. package/dist/components/new-conversation.d.ts +32 -0
  214. package/dist/components/open-geni-chat.d.ts +73 -0
  215. package/dist/components/open-geni-links.d.ts +68 -0
  216. package/dist/components/openrouter-mark.d.ts +6 -0
  217. package/dist/components/opper-mark.d.ts +7 -0
  218. package/dist/components/preview-loading.d.ts +2 -0
  219. package/dist/components/provider-recovery-notice.d.ts +16 -0
  220. package/dist/components/queue-item-content.d.ts +9 -0
  221. package/dist/components/rehype-secret-refs.d.ts +23 -0
  222. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  223. package/dist/components/sandbox-files.d.ts +3 -1
  224. package/dist/components/sandbox-workspace.d.ts +18 -0
  225. package/dist/components/secret-question-field.d.ts +31 -0
  226. package/dist/components/secret-ref-chip.d.ts +35 -0
  227. package/dist/components/session-capability-frame.d.ts +37 -0
  228. package/dist/components/session-chrome.d.ts +57 -8
  229. package/dist/components/session-commands-panel.d.ts +6 -0
  230. package/dist/components/session-commands.d.ts +6 -0
  231. package/dist/components/session-connection-request.d.ts +8 -0
  232. package/dist/components/session-conversation.d.ts +157 -0
  233. package/dist/components/session-list.d.ts +39 -0
  234. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  235. package/dist/components/session-proxy-scope.d.ts +35 -0
  236. package/dist/components/session-status.d.ts +4 -1
  237. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  238. package/dist/components/timeline-anchor.d.ts +24 -0
  239. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  240. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  241. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  242. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  243. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  244. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  245. package/dist/components/timeline-annotations.d.ts +13 -3
  246. package/dist/components/timeline-reading-progress.d.ts +11 -0
  247. package/dist/components/timeline-search.d.ts +34 -0
  248. package/dist/components/timeline-settlement.d.ts +16 -0
  249. package/dist/components/tool-action-review.d.ts +47 -0
  250. package/dist/components/tool-review-history.d.ts +25 -0
  251. package/dist/components/usage-limit-notice.d.ts +49 -0
  252. package/dist/components/usage-member-list.d.ts +91 -0
  253. package/dist/components/usage-meter.d.ts +73 -0
  254. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  255. package/dist/components/user-message-body.d.ts +10 -1
  256. package/dist/composer-messages.d.ts +74 -0
  257. package/dist/composer-messages.js +9 -0
  258. package/dist/composer-messages.js.map +1 -0
  259. package/dist/composer-voice-events.d.ts +8 -0
  260. package/dist/composer.d.ts +5 -4
  261. package/dist/composer.js +26 -13
  262. package/dist/computer-viewer-GMLDXPON.js +20 -0
  263. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  264. package/dist/connect-account-identity.d.ts +8 -0
  265. package/dist/connect-accounts.d.ts +15 -0
  266. package/dist/connect-chooser.d.ts +18 -0
  267. package/dist/connect-panel.d.ts +18 -0
  268. package/dist/connect-setup.d.ts +18 -0
  269. package/dist/connect.d.ts +21 -0
  270. package/dist/connect.js +2149 -0
  271. package/dist/connect.js.map +1 -0
  272. package/dist/connection-catalog.d.ts +38 -0
  273. package/dist/connection-discovery.d.ts +12 -0
  274. package/dist/connection-installed.d.ts +17 -0
  275. package/dist/connection-logo.d.ts +9 -0
  276. package/dist/connection-service-logo.d.ts +8 -0
  277. package/dist/connection-service-presentation.d.ts +13 -0
  278. package/dist/connection-skeleton.d.ts +5 -0
  279. package/dist/connection-type-picker.d.ts +6 -0
  280. package/dist/conversation-timeline.d.ts +5 -0
  281. package/dist/desktop.d.ts +7 -0
  282. package/dist/desktop.js +27 -0
  283. package/dist/desktop.js.map +1 -0
  284. package/dist/device-authorization.d.ts +23 -0
  285. package/dist/diffs.d.ts +8 -0
  286. package/dist/diffs.js +15 -0
  287. package/dist/diffs.js.map +1 -0
  288. package/dist/discovery-cache.d.ts +5 -0
  289. package/dist/editor.d.ts +7 -0
  290. package/dist/editor.js +22 -0
  291. package/dist/editor.js.map +1 -0
  292. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  293. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  294. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  295. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  296. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  297. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  298. package/dist/hooks/latest-question.d.ts +25 -0
  299. package/dist/hooks/shared-machines-list.d.ts +4 -0
  300. package/dist/hooks/shared-query.d.ts +113 -0
  301. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  302. package/dist/hooks/use-auth-runs.d.ts +1 -4
  303. package/dist/hooks/use-available-models.d.ts +1 -1
  304. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  305. package/dist/hooks/use-browser-session.d.ts +12 -1
  306. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  307. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  308. package/dist/hooks/use-composer.d.ts +24 -2
  309. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  310. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  311. package/dist/hooks/use-computer-session.d.ts +4 -0
  312. package/dist/hooks/use-connect.d.ts +23 -0
  313. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  314. package/dist/hooks/use-file-attachments.d.ts +12 -0
  315. package/dist/hooks/use-goal.d.ts +2 -1
  316. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  317. package/dist/hooks/use-new-conversation.d.ts +56 -0
  318. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  319. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  320. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  321. package/dist/hooks/use-session-conversation.d.ts +49 -0
  322. package/dist/hooks/use-session-events.d.ts +26 -5
  323. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  324. package/dist/hooks/use-session-model-account.d.ts +48 -0
  325. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  326. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  327. package/dist/hooks/use-usage.d.ts +40 -0
  328. package/dist/hooks/use-vaults.d.ts +53 -0
  329. package/dist/hooks/use-voice-input.d.ts +8 -1
  330. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  331. package/dist/hooks/use-workspace-sessions.d.ts +24 -5
  332. package/dist/human-input-model.d.ts +122 -0
  333. package/dist/identity-link-accounts.d.ts +11 -0
  334. package/dist/identity-link-consent.d.ts +18 -0
  335. package/dist/index.d.ts +82 -20
  336. package/dist/index.js +2340 -6603
  337. package/dist/index.js.map +1 -1
  338. package/dist/interaction.d.ts +1 -1
  339. package/dist/interaction.js +14 -24
  340. package/dist/interaction.js.map +1 -1
  341. package/dist/latest-question-R77KWSUP.js +118 -0
  342. package/dist/latest-question-R77KWSUP.js.map +1 -0
  343. package/dist/lib/clipboard.d.ts +7 -0
  344. package/dist/lib/error-message.d.ts +7 -0
  345. package/dist/lib/format.d.ts +58 -4
  346. package/dist/lib/host-theme.d.ts +77 -0
  347. package/dist/lib/interaction-errors.d.ts +3 -0
  348. package/dist/lib/menu-styles.d.ts +22 -0
  349. package/dist/lib/notify-observer.d.ts +2 -0
  350. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  351. package/dist/lib/provider-recovery.d.ts +55 -0
  352. package/dist/lib/scrollbars.d.ts +11 -0
  353. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  354. package/dist/lib/transient-retry.d.ts +25 -0
  355. package/dist/lib/workbench-peers.d.ts +36 -0
  356. package/dist/lib/xterm-theme.d.ts +7 -5
  357. package/dist/machines.js +9 -5
  358. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  359. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  360. package/dist/mcp-connection-status.d.ts +14 -0
  361. package/dist/model-mark-paths.d.ts +34 -0
  362. package/dist/model-mark-paths.js +16 -0
  363. package/dist/model-mark-paths.js.map +1 -0
  364. package/dist/model-picker-model.d.ts +111 -0
  365. package/dist/model-picker-model.js +25 -0
  366. package/dist/model-picker-model.js.map +1 -0
  367. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  368. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  369. package/dist/model-policy.d.ts +30 -3
  370. package/dist/model-policy.js +14 -1
  371. package/dist/native-previews.d.ts +28 -0
  372. package/dist/native-previews.js +82 -0
  373. package/dist/native-previews.js.map +1 -0
  374. package/dist/new-session-draft.d.ts +7 -0
  375. package/dist/new-session-draft.js +639 -0
  376. package/dist/new-session-draft.js.map +1 -0
  377. package/dist/notification-text.d.ts +27 -0
  378. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  379. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  380. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  381. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  382. package/dist/older-history.d.ts +3 -2
  383. package/dist/organization-model.d.ts +32 -0
  384. package/dist/organization-model.js +65 -0
  385. package/dist/organization-model.js.map +1 -0
  386. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  387. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  388. package/dist/plugin-details.d.ts +14 -0
  389. package/dist/plugin-discovery.d.ts +25 -0
  390. package/dist/preview-loading-paint.d.ts +20 -0
  391. package/dist/provider.d.ts +25 -2
  392. package/dist/queue-presentation-model.d.ts +72 -0
  393. package/dist/queue-presentation-model.js +38 -0
  394. package/dist/queue-presentation-model.js.map +1 -0
  395. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  396. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  397. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  398. package/dist/realtime/embedded-voice.d.ts +1 -0
  399. package/dist/realtime/realtime-control.d.ts +4 -65
  400. package/dist/realtime/session-realtime.d.ts +78 -0
  401. package/dist/realtime.js +25 -1333
  402. package/dist/realtime.js.map +1 -1
  403. package/dist/sandbox-files-O27IPOZW.js +21 -0
  404. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  405. package/dist/sandbox-label-model.d.ts +30 -0
  406. package/dist/sandbox-label-model.js +20 -0
  407. package/dist/sandbox-label-model.js.map +1 -0
  408. package/dist/scrollbars.d.ts +1 -0
  409. package/dist/scrollbars.js +10 -0
  410. package/dist/scrollbars.js.map +1 -0
  411. package/dist/secret-reference-label.d.ts +14 -0
  412. package/dist/secrets-ui.d.ts +57 -0
  413. package/dist/session-agents-model.d.ts +10 -0
  414. package/dist/session-agents-model.js +25 -0
  415. package/dist/session-agents-model.js.map +1 -0
  416. package/dist/session-attention-model.d.ts +8 -0
  417. package/dist/session-attention-model.js +47 -0
  418. package/dist/session-attention-model.js.map +1 -0
  419. package/dist/session-auth-recommendation.d.ts +5 -0
  420. package/dist/session-capability-policy.d.ts +31 -0
  421. package/dist/session-feedback-model.d.ts +20 -0
  422. package/dist/session-feedback-model.js +56 -0
  423. package/dist/session-feedback-model.js.map +1 -0
  424. package/dist/session-list-model.d.ts +138 -0
  425. package/dist/session-list-model.js +274 -0
  426. package/dist/session-list-model.js.map +1 -0
  427. package/dist/session-realtime-7DJOIHQW.js +21 -0
  428. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  429. package/dist/session-realtime.d.ts +7 -0
  430. package/dist/session-realtime.js +19 -0
  431. package/dist/session-realtime.js.map +1 -0
  432. package/dist/session-status-model.d.ts +36 -0
  433. package/dist/session-ui.d.ts +39 -1
  434. package/dist/session-ui.js +126 -12
  435. package/dist/session-ui.js.map +1 -1
  436. package/dist/session.d.ts +8 -2
  437. package/dist/session.js +35 -20
  438. package/dist/site-snapshot.d.ts +14 -0
  439. package/dist/sites-ui.d.ts +24 -0
  440. package/dist/sites.d.ts +3 -0
  441. package/dist/sites.js +14 -0
  442. package/dist/sites.js.map +1 -0
  443. package/dist/skill-discovery.d.ts +47 -0
  444. package/dist/terminal.d.ts +8 -0
  445. package/dist/terminal.js +32 -0
  446. package/dist/terminal.js.map +1 -0
  447. package/dist/testing/session-scenarios.d.ts +10 -0
  448. package/dist/testing/session-scenarios.js +367 -0
  449. package/dist/testing/session-scenarios.js.map +1 -0
  450. package/dist/timeline/activity-rail.d.ts +11 -2
  451. package/dist/timeline/agent-identity.d.ts +30 -0
  452. package/dist/timeline/agent-row.d.ts +31 -0
  453. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  454. package/dist/timeline/compaction-copy.d.ts +46 -0
  455. package/dist/timeline/focus-sequence.d.ts +9 -0
  456. package/dist/timeline/genie-copy.d.ts +3 -0
  457. package/dist/timeline/genie-loading.d.ts +47 -0
  458. package/dist/timeline/index.d.ts +10 -5
  459. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  460. package/dist/timeline/message-sender.d.ts +19 -0
  461. package/dist/timeline/notice-presentation.d.ts +13 -0
  462. package/dist/timeline/parsers.d.ts +11 -0
  463. package/dist/timeline/patch-apply-command.d.ts +18 -0
  464. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  465. package/dist/timeline/platform-activity-row.d.ts +1 -2
  466. package/dist/timeline/presented-image.d.ts +11 -0
  467. package/dist/timeline/projection.d.ts +31 -2
  468. package/dist/timeline/provider-logo.d.ts +15 -0
  469. package/dist/timeline/question-nav-model.d.ts +23 -0
  470. package/dist/timeline/registry.d.ts +12 -1
  471. package/dist/timeline/retained-image.d.ts +18 -0
  472. package/dist/timeline/retained-loaders.d.ts +27 -0
  473. package/dist/timeline/rolling-activity.d.ts +11 -0
  474. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  475. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  476. package/dist/timeline/shared.d.ts +4 -1
  477. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  478. package/dist/timeline/startup-preference.d.ts +3 -0
  479. package/dist/timeline/startup-timings.d.ts +4 -0
  480. package/dist/timeline/tool-display-name.d.ts +5 -2
  481. package/dist/timeline/tool-presentation.d.ts +172 -0
  482. package/dist/timeline/turn-summary-model.d.ts +95 -0
  483. package/dist/timeline/turn-summary.d.ts +20 -54
  484. package/dist/timeline/types.d.ts +179 -7
  485. package/dist/timeline/work-presentation.d.ts +60 -0
  486. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  487. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  488. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  489. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  490. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  491. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  492. package/dist/timeline-model.d.ts +29 -0
  493. package/dist/timeline-model.js +254 -0
  494. package/dist/timeline-model.js.map +1 -0
  495. package/dist/usage/allowance-copy.d.ts +25 -0
  496. package/dist/usage/session-usage-limit.d.ts +88 -0
  497. package/dist/usage/summary.d.ts +35 -0
  498. package/dist/usage.d.ts +17 -0
  499. package/dist/usage.js +1187 -0
  500. package/dist/usage.js.map +1 -0
  501. package/dist/voice-recording-owner.d.ts +7 -0
  502. package/package.json +106 -7
  503. package/src/approvals.ts +8 -1
  504. package/src/artifacts-spreadsheet.ts +1 -0
  505. package/src/artifacts.ts +44 -0
  506. package/src/assets/README.md +8 -0
  507. package/src/assets/gmail.ico +0 -0
  508. package/src/assets/outlook.ico +0 -0
  509. package/src/capability-catalog-row.tsx +94 -0
  510. package/src/capability-logo-fallback.ts +22 -0
  511. package/src/client.ts +20 -31
  512. package/src/commands/registry.ts +18 -15
  513. package/src/commands/types.ts +2 -0
  514. package/src/components/anthropic-mark.tsx +10 -0
  515. package/src/components/approval-surface.tsx +401 -138
  516. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  517. package/src/components/artifacts/artifact-sandbox.tsx +193 -0
  518. package/src/components/artifacts/artifact-surface.tsx +40 -20
  519. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  520. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  521. package/src/components/artifacts/document-editor.tsx +141 -16
  522. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  523. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  524. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  525. package/src/components/artifacts/editable-document.tsx +37 -36
  526. package/src/components/artifacts/editable-presentation.tsx +36 -18
  527. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  528. package/src/components/artifacts/index.ts +45 -0
  529. package/src/components/artifacts/inline-html-document.ts +24 -0
  530. package/src/components/artifacts/latest-task-runner.ts +49 -0
  531. package/src/components/artifacts/presentation-editor.tsx +323 -67
  532. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  533. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  534. package/src/components/artifacts/site-view.tsx +121 -0
  535. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  536. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  537. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  538. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  539. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  540. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  541. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  542. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  543. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  544. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  545. package/src/components/browser-select-control.tsx +312 -0
  546. package/src/components/browser-viewer.tsx +778 -318
  547. package/src/components/chat-composer.tsx +47 -5
  548. package/src/components/child-session-link.tsx +36 -0
  549. package/src/components/claude-mark.tsx +11 -0
  550. package/src/components/code-editor.tsx +13 -16
  551. package/src/components/composer-transcription-control.tsx +128 -30
  552. package/src/components/composer.tsx +404 -195
  553. package/src/components/computer-viewer.tsx +880 -253
  554. package/src/components/copy-button.tsx +13 -5
  555. package/src/components/desktop-viewer.tsx +1 -1
  556. package/src/components/enrollment-consent.tsx +1 -1
  557. package/src/components/enrollment-device-flow.tsx +1 -1
  558. package/src/components/file-browser.tsx +10 -14
  559. package/src/components/fleet-tile.tsx +5 -3
  560. package/src/components/generated-video-player.tsx +4 -2
  561. package/src/components/grok-mark.tsx +34 -0
  562. package/src/components/human-input-form.tsx +590 -283
  563. package/src/components/human-input-surface.tsx +11 -0
  564. package/src/components/interaction-intervention-banner.tsx +2 -2
  565. package/src/components/linkified-text.tsx +79 -0
  566. package/src/components/machine-card.tsx +35 -78
  567. package/src/components/machine-dock-bar.tsx +1 -1
  568. package/src/components/machine-input-display.ts +197 -3
  569. package/src/components/machines/agent-status-icon.tsx +31 -0
  570. package/src/components/machines/machine-detail.tsx +200 -31
  571. package/src/components/machines/machine-operation-policy.tsx +1 -1
  572. package/src/components/machines/machine-status.ts +241 -0
  573. package/src/components/machines-dashboard.tsx +2 -17
  574. package/src/components/markdown-table-layout.ts +143 -0
  575. package/src/components/markdown.tsx +466 -129
  576. package/src/components/message-timeline.tsx +2370 -667
  577. package/src/components/model-mark.tsx +102 -0
  578. package/src/components/model-picker.tsx +15 -4
  579. package/src/components/model-policy-picker-menu.tsx +371 -0
  580. package/src/components/model-policy-picker.tsx +252 -429
  581. package/src/components/new-conversation.tsx +221 -0
  582. package/src/components/open-geni-chat.tsx +309 -0
  583. package/src/components/open-geni-links.tsx +179 -0
  584. package/src/components/openrouter-mark.tsx +13 -0
  585. package/src/components/opper-mark.tsx +18 -0
  586. package/src/components/pierre-diff.tsx +41 -16
  587. package/src/components/pierre-file.tsx +35 -10
  588. package/src/components/preview-loading.tsx +109 -0
  589. package/src/components/provider-recovery-notice.tsx +49 -0
  590. package/src/components/queue-item-content.ts +14 -0
  591. package/src/components/queue-surface-implementation.tsx +51 -356
  592. package/src/components/queue-surface-state.tsx +3 -1
  593. package/src/components/rehype-secret-refs.ts +98 -0
  594. package/src/components/remark-soft-line-breaks.ts +166 -0
  595. package/src/components/sandbox-files.tsx +91 -15
  596. package/src/components/sandbox-terminal.tsx +84 -13
  597. package/src/components/sandbox-workspace.tsx +147 -51
  598. package/src/components/secret-question-field.tsx +324 -0
  599. package/src/components/secret-ref-chip.tsx +185 -0
  600. package/src/components/session-capability-frame.tsx +197 -0
  601. package/src/components/session-chrome.tsx +842 -251
  602. package/src/components/session-commands-panel.tsx +126 -0
  603. package/src/components/session-commands.tsx +18 -0
  604. package/src/components/session-connection-request.tsx +97 -0
  605. package/src/components/session-conversation.tsx +876 -0
  606. package/src/components/session-list.tsx +257 -0
  607. package/src/components/session-mcp-capability-card.tsx +680 -0
  608. package/src/components/session-proxy-scope.tsx +153 -0
  609. package/src/components/session-status.tsx +26 -17
  610. package/src/components/session-usage-limit-notice.tsx +174 -0
  611. package/src/components/timeline-anchor.tsx +119 -0
  612. package/src/components/timeline-annotation-chrome.tsx +196 -0
  613. package/src/components/timeline-annotation-layout.ts +268 -0
  614. package/src/components/timeline-annotation-markers.tsx +185 -0
  615. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  616. package/src/components/timeline-annotation-selection.tsx +106 -54
  617. package/src/components/timeline-annotation-shared.ts +245 -0
  618. package/src/components/timeline-annotations-dialog.tsx +185 -128
  619. package/src/components/timeline-annotations.tsx +189 -45
  620. package/src/components/timeline-reading-progress.ts +80 -0
  621. package/src/components/timeline-search.tsx +168 -0
  622. package/src/components/timeline-settlement.ts +60 -0
  623. package/src/components/tool-action-review.tsx +650 -0
  624. package/src/components/tool-review-history.tsx +88 -0
  625. package/src/components/usage-limit-notice.tsx +179 -0
  626. package/src/components/usage-member-list.tsx +792 -0
  627. package/src/components/usage-meter.tsx +382 -0
  628. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  629. package/src/components/user-message-body.tsx +27 -2
  630. package/src/components/workspace-dock.tsx +18 -1
  631. package/src/composer-messages.ts +150 -0
  632. package/src/composer-voice-events.ts +12 -0
  633. package/src/composer.ts +6 -1
  634. package/src/connect-account-identity.tsx +34 -0
  635. package/src/connect-accounts.tsx +233 -0
  636. package/src/connect-chooser.tsx +336 -0
  637. package/src/connect-panel.tsx +99 -0
  638. package/src/connect-setup.tsx +355 -0
  639. package/src/connect.ts +60 -0
  640. package/src/connection-assets.d.ts +4 -0
  641. package/src/connection-catalog.tsx +162 -0
  642. package/src/connection-discovery.tsx +238 -0
  643. package/src/connection-installed.tsx +51 -0
  644. package/src/connection-logo.tsx +37 -0
  645. package/src/connection-service-logo.tsx +55 -0
  646. package/src/connection-service-presentation.ts +46 -0
  647. package/src/connection-skeleton.tsx +16 -0
  648. package/src/connection-type-picker.tsx +36 -0
  649. package/src/conversation-timeline.ts +92 -0
  650. package/src/desktop.ts +24 -0
  651. package/src/device-authorization.tsx +98 -0
  652. package/src/diffs.ts +16 -0
  653. package/src/discovery-cache.ts +42 -0
  654. package/src/editor.ts +13 -0
  655. package/src/hooks/internal.ts +3 -2
  656. package/src/hooks/latest-question.ts +164 -0
  657. package/src/hooks/shared-machines-list.ts +34 -1
  658. package/src/hooks/shared-query.ts +721 -0
  659. package/src/hooks/use-attached-browsers.ts +1 -1
  660. package/src/hooks/use-auth-runs.ts +0 -27
  661. package/src/hooks/use-available-models.ts +2 -2
  662. package/src/hooks/use-browser-frame-stream.ts +19 -2
  663. package/src/hooks/use-browser-session.ts +680 -205
  664. package/src/hooks/use-browser-sessions.ts +32 -1
  665. package/src/hooks/use-client-config-flags.ts +118 -0
  666. package/src/hooks/use-codex-accounts.ts +247 -47
  667. package/src/hooks/use-composer.ts +227 -44
  668. package/src/hooks/use-computer-frame-stream.ts +25 -7
  669. package/src/hooks/use-computer-input-posture.ts +94 -0
  670. package/src/hooks/use-computer-session.ts +409 -95
  671. package/src/hooks/use-connect.ts +23 -0
  672. package/src/hooks/use-desktop-stream.ts +19 -28
  673. package/src/hooks/use-file-attachments.ts +80 -4
  674. package/src/hooks/use-goal.ts +79 -9
  675. package/src/hooks/use-last-started-turn-policy.ts +37 -11
  676. package/src/hooks/use-machines.ts +4 -0
  677. package/src/hooks/use-new-conversation.ts +374 -0
  678. package/src/hooks/use-new-session-draft.ts +813 -0
  679. package/src/hooks/use-realtime-voice-models.ts +46 -0
  680. package/src/hooks/use-sandbox-files.ts +68 -20
  681. package/src/hooks/use-session-background-commands.ts +22 -11
  682. package/src/hooks/use-session-capabilities.ts +3 -2
  683. package/src/hooks/use-session-conversation.ts +150 -0
  684. package/src/hooks/use-session-events.ts +531 -335
  685. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  686. package/src/hooks/use-session-model-account.ts +174 -0
  687. package/src/hooks/use-session.ts +30 -2
  688. package/src/hooks/use-slash-commands.ts +6 -11
  689. package/src/hooks/use-supergrok-accounts.ts +22 -8
  690. package/src/hooks/use-terminal-stream.ts +153 -27
  691. package/src/hooks/use-transcription.ts +6 -0
  692. package/src/hooks/use-turn-queue.ts +2 -1
  693. package/src/hooks/use-usage.ts +100 -0
  694. package/src/hooks/use-vaults.ts +153 -0
  695. package/src/hooks/use-video-artifact-playback.ts +1 -1
  696. package/src/hooks/use-voice-input.ts +127 -19
  697. package/src/hooks/use-workspace-capture.ts +3 -2
  698. package/src/hooks/use-workspace-edit.ts +23 -5
  699. package/src/hooks/use-workspace-sessions.ts +74 -7
  700. package/src/human-input-model.ts +359 -0
  701. package/src/identity-link-accounts.tsx +148 -0
  702. package/src/identity-link-consent.tsx +192 -0
  703. package/src/index.ts +262 -16
  704. package/src/interaction.ts +1 -0
  705. package/src/lib/clipboard.ts +29 -0
  706. package/src/lib/error-message.ts +37 -0
  707. package/src/lib/format.ts +205 -10
  708. package/src/lib/host-theme.ts +529 -0
  709. package/src/lib/interaction-errors.ts +15 -0
  710. package/src/lib/menu-styles.ts +44 -0
  711. package/src/lib/notify-observer.ts +15 -0
  712. package/src/lib/pierre-diffs-loader.ts +53 -0
  713. package/src/lib/provider-recovery.ts +243 -0
  714. package/src/lib/scrollbars.ts +30 -0
  715. package/src/lib/terminal-input-readiness.ts +51 -0
  716. package/src/lib/transient-retry.ts +99 -0
  717. package/src/lib/workbench-peers.ts +62 -0
  718. package/src/lib/xterm-theme.ts +23 -21
  719. package/src/mcp-connection-status.ts +35 -0
  720. package/src/model-mark-paths.ts +53 -0
  721. package/src/model-picker-model.ts +330 -0
  722. package/src/model-policy.ts +299 -74
  723. package/src/native-previews.ts +100 -0
  724. package/src/new-session-draft.ts +22 -0
  725. package/src/notification-text.ts +81 -0
  726. package/src/older-history.ts +22 -4
  727. package/src/organization-model.ts +118 -0
  728. package/src/plugin-details.tsx +185 -0
  729. package/src/plugin-discovery.tsx +196 -0
  730. package/src/preview-loading-paint.ts +68 -0
  731. package/src/provider.tsx +74 -15
  732. package/src/queue-presentation-model.ts +464 -0
  733. package/src/realtime/dropdown-menu.tsx +19 -12
  734. package/src/realtime/embedded-new-voice.tsx +1 -0
  735. package/src/realtime/embedded-voice.tsx +3 -0
  736. package/src/realtime/realtime-control.tsx +138 -550
  737. package/src/realtime/session-realtime.ts +566 -0
  738. package/src/sandbox-label-model.ts +53 -0
  739. package/src/scrollbars.ts +3 -0
  740. package/src/secret-reference-label.ts +43 -0
  741. package/src/secrets-ui.tsx +59 -0
  742. package/src/session-agents-model.ts +33 -0
  743. package/src/session-attention-model.ts +62 -0
  744. package/src/session-auth-recommendation.ts +48 -0
  745. package/src/session-capability-policy.ts +196 -0
  746. package/src/session-context.ts +3 -4
  747. package/src/session-feedback-model.ts +95 -0
  748. package/src/session-list-model.ts +434 -0
  749. package/src/session-realtime.ts +18 -0
  750. package/src/session-status-model.ts +99 -0
  751. package/src/session-ui.ts +98 -1
  752. package/src/session.ts +17 -1
  753. package/src/site-snapshot.ts +74 -0
  754. package/src/sites-ui.tsx +348 -0
  755. package/src/sites.ts +3 -0
  756. package/src/skill-discovery.tsx +208 -0
  757. package/src/terminal.ts +26 -0
  758. package/src/testing/session-scenarios.ts +404 -0
  759. package/src/timeline/activity-rail.tsx +242 -101
  760. package/src/timeline/agent-identity.tsx +84 -0
  761. package/src/timeline/agent-row.tsx +231 -0
  762. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  763. package/src/timeline/compaction-copy.ts +115 -0
  764. package/src/timeline/fleet-decision-projection.ts +2 -1
  765. package/src/timeline/fleet-decision-row.tsx +1 -0
  766. package/src/timeline/focus-sequence.ts +44 -0
  767. package/src/timeline/genie-copy.ts +19 -0
  768. package/src/timeline/genie-loading.tsx +143 -0
  769. package/src/timeline/index.ts +30 -2
  770. package/src/timeline/knowledge-receipt.tsx +100 -0
  771. package/src/timeline/message-sender.tsx +71 -0
  772. package/src/timeline/notice-presentation.ts +48 -0
  773. package/src/timeline/parsers.ts +42 -2
  774. package/src/timeline/patch-apply-command.tsx +135 -0
  775. package/src/timeline/platform-activity-presentation.ts +166 -0
  776. package/src/timeline/platform-activity-row.tsx +15 -90
  777. package/src/timeline/presented-image.ts +63 -0
  778. package/src/timeline/projection.ts +1742 -76
  779. package/src/timeline/provider-logo.tsx +53 -0
  780. package/src/timeline/question-nav-model.ts +28 -0
  781. package/src/timeline/registry.ts +26 -4
  782. package/src/timeline/retained-image.ts +97 -0
  783. package/src/timeline/retained-loaders.ts +91 -0
  784. package/src/timeline/rolling-activity.tsx +80 -0
  785. package/src/timeline/screenshot-lightbox.tsx +228 -5
  786. package/src/timeline/session-usage-limit-row.tsx +42 -0
  787. package/src/timeline/shared.tsx +42 -15
  788. package/src/timeline/startup-dispatch-details.tsx +36 -0
  789. package/src/timeline/startup-preference.ts +33 -0
  790. package/src/timeline/startup-timings.tsx +145 -0
  791. package/src/timeline/tool-display-name.ts +19 -7
  792. package/src/timeline/tool-presentation.ts +1316 -0
  793. package/src/timeline/tool-renderers.tsx +835 -1138
  794. package/src/timeline/turn-summary-model.ts +343 -0
  795. package/src/timeline/turn-summary.tsx +272 -365
  796. package/src/timeline/types.ts +189 -6
  797. package/src/timeline/work-presentation.ts +189 -0
  798. package/src/timeline-model.ts +143 -0
  799. package/src/usage/allowance-copy.ts +64 -0
  800. package/src/usage/session-usage-limit.ts +266 -0
  801. package/src/usage/summary.ts +93 -0
  802. package/src/usage.ts +70 -0
  803. package/src/voice-recording-owner.ts +22 -0
  804. package/styles/compiled.css +2319 -748
  805. package/styles/connect.css +290 -0
  806. package/styles/connect.d.ts +1 -0
  807. package/styles/effective-tokens.css +1 -0
  808. package/styles/index.css +309 -9
  809. package/styles/responsive.css +99 -7
  810. package/styles/session-capability.css +44 -0
  811. package/styles/tokens.css +134 -66
  812. package/dist/browser-viewer-MKKFRRRV.js +0 -14
  813. package/dist/chunk-2DZVYHVO.js +0 -470
  814. package/dist/chunk-2DZVYHVO.js.map +0 -1
  815. package/dist/chunk-3AGBGTRT.js.map +0 -1
  816. package/dist/chunk-4MDLEHXL.js.map +0 -1
  817. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  818. package/dist/chunk-7EAFGICR.js +0 -302
  819. package/dist/chunk-7EAFGICR.js.map +0 -1
  820. package/dist/chunk-ELIYWBZR.js.map +0 -1
  821. package/dist/chunk-H5YGYNXS.js.map +0 -1
  822. package/dist/chunk-HUIKIDM5.js.map +0 -1
  823. package/dist/chunk-ICA6R6TW.js.map +0 -1
  824. package/dist/chunk-IOLVN74D.js.map +0 -1
  825. package/dist/chunk-JAQ5K7W6.js.map +0 -1
  826. package/dist/chunk-JVYQRRC4.js.map +0 -1
  827. package/dist/chunk-KCGXPP5V.js.map +0 -1
  828. package/dist/chunk-KZ73RL76.js.map +0 -1
  829. package/dist/chunk-NEXLLTP4.js.map +0 -1
  830. package/dist/chunk-PEI6RANI.js.map +0 -1
  831. package/dist/chunk-VTOREEXF.js +0 -142
  832. package/dist/chunk-VTOREEXF.js.map +0 -1
  833. package/dist/chunk-WSK7G5LE.js +0 -170
  834. package/dist/chunk-WSK7G5LE.js.map +0 -1
  835. package/dist/chunk-X4A66EWZ.js +0 -223
  836. package/dist/chunk-X4A66EWZ.js.map +0 -1
  837. package/dist/chunk-XYRDDSXF.js.map +0 -1
  838. package/dist/chunk-YG4QEQF5.js +0 -9557
  839. package/dist/chunk-YG4QEQF5.js.map +0 -1
  840. package/dist/chunk-YVCHAQZY.js.map +0 -1
  841. package/dist/chunk-ZPBTI3TE.js.map +0 -1
  842. package/dist/computer-viewer-FWEZISW4.js +0 -16
  843. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  844. package/dist/hooks/use-environments.d.ts +0 -41
  845. package/dist/hooks/use-packs.d.ts +0 -32
  846. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  847. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  848. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  849. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  850. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  851. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  852. package/src/hooks/use-environments.ts +0 -182
  853. package/src/hooks/use-packs.ts +0 -157
  854. /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  855. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-new-session-draft.ts","../src/lib/transient-retry.ts"],"sourcesContent":["import type {\n FileAsset,\n NewSessionDraft,\n NewSessionSelectionHistory,\n OpenGeniClient,\n ResourceRef,\n SaveNewSessionDraftRequest,\n} from \"@opengeni/sdk\";\nimport { OpenGeniApiError } from \"@opengeni/sdk\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n isTransientServiceFailure,\n retryTransient,\n TRANSIENT_RECONNECT_INTERVAL_MS,\n TRANSIENT_RETRY_DELAYS_MS,\n} from \"../lib/transient-retry\";\n\nexport type NewSessionDraftEditable = Omit<SaveNewSessionDraftRequest, \"expectedRevision\">;\n\nexport type UseNewSessionDraftOptions = {\n workspaceId: string;\n client: Pick<OpenGeniClient, \"getNewSessionDraft\" | \"saveNewSessionDraft\" | \"getFile\">;\n /** The complete browser-visible value. It must contain ready file refs only. */\n value: NewSessionDraftEditable;\n /** Apply a remote value to the controlled text/model/tool/options state. */\n onApplyRemote: (\n value: NewSessionDraftEditable,\n selectionHistory: NewSessionSelectionHistory,\n ) => void;\n /** Replace finalized attachments with freshly revalidated server assets. */\n restoreReadyFiles: (files: Iterable<FileAsset>) => void;\n /** Revalidate non-file resource identities against the current UI catalog. */\n hydrateResources?: (resources: ResourceRef[]) => ResourceRef[] | Promise<ResourceRef[]>;\n /** Keep the first read pending until catalogs needed for hydration are ready. */\n resourceHydrationReady?: boolean;\n /** A create in flight owns the exact clicked snapshot; resume autosave on settlement. */\n suspendAutosave?: boolean;\n /** Test seam for the quiet retry backoff and the background reconnect pace. */\n transientRetry?: { delaysMs?: readonly number[]; reconnectIntervalMs?: number };\n};\n\nexport type FlushedNewSessionDraft = {\n revision: number;\n /** Signature of the exact local snapshot acknowledged by this revision. */\n signature: string;\n};\n\nexport type AcknowledgeConsumedNewSessionDraftResult =\n | { kind: \"consumed\" }\n | { kind: \"preserved\"; flushed: FlushedNewSessionDraft };\n\nexport type UseNewSessionDraftResult = {\n draft: NewSessionDraft | null;\n revision: number;\n loading: boolean;\n saving: boolean;\n conflict: Error | null;\n error: Error | null;\n /**\n * `error` only says Opengeni was briefly unreachable (a deploy or database\n * restart). Show the calm updating notice instead of the error; the hook\n * keeps reconnecting in the background and clears this on success.\n */\n unavailable: boolean;\n /** The latest failure, readable right after an awaited call (state lags a render). */\n currentError: () => Error | null;\n /** Mark Opengeni unreachable after a transient failure elsewhere in the send path. */\n reportUnavailable: (cause: unknown) => boolean;\n flush: () => Promise<FlushedNewSessionDraft | null>;\n /** Send the visible snapshot, rebasing a stale draft revision without replacing the composer. */\n flushForSend: (snapshot?: NewSessionDraftEditable) => Promise<FlushedNewSessionDraft | null>;\n isCurrentSignature: (signature: string) => boolean;\n /**\n * Fence the exact acknowledged snapshot after session creation consumes it,\n * preserving a genuinely newer local value against the safe-seed row.\n */\n acknowledgeConsumed: (\n flushed: FlushedNewSessionDraft,\n visibleSignature?: string,\n ) => Promise<AcknowledgeConsumedNewSessionDraftResult | null>;\n reload: () => Promise<void>;\n /** Surface a create-time OCC rejection through the ordinary draft recovery UI. */\n captureConflict: (cause: unknown) => boolean;\n resolveConflict: (choice: \"keep_mine\" | \"use_remote\") => Promise<void>;\n clearError: () => void;\n};\n\ntype ValidatedRemoteDraft = {\n draft: NewSessionDraft;\n editable: NewSessionDraftEditable;\n files: FileAsset[];\n};\n\n/**\n * Actor-private, server-authoritative state for the composer shown before a\n * session exists. Reads and writes are fenced to one client/workspace target;\n * writes serialize and acquire the latest acknowledged revision at execution\n * time, so a stale closure can never invent its own OCC base.\n */\nexport function useNewSessionDraft(options: UseNewSessionDraftOptions): UseNewSessionDraftResult {\n const { client, workspaceId } = options;\n const resourceHydrationReady = options.resourceHydrationReady ?? true;\n const suspendAutosave = options.suspendAutosave ?? false;\n const hydrateResources = options.hydrateResources;\n const retryDelaysMs = options.transientRetry?.delaysMs ?? TRANSIENT_RETRY_DELAYS_MS;\n const reconnectIntervalMs =\n options.transientRetry?.reconnectIntervalMs ?? TRANSIENT_RECONNECT_INTERVAL_MS;\n const [draft, setDraft] = useState<NewSessionDraft | null>(null);\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [conflict, setConflict] = useState<Error | null>(null);\n const [error, setErrorState] = useState<Error | null>(null);\n const errorRef = useRef<Error | null>(null);\n const setError = useCallback((next: Error | null) => {\n errorRef.current = next;\n setErrorState(next);\n }, []);\n /**\n * Composer value when a first load failed. A background reconnect may apply\n * the remote draft only while the person has not edited since then.\n */\n const unloadedValueSignature = useRef<string | null>(null);\n const valueRef = useRef(options.value);\n valueRef.current = options.value;\n const onApplyRemoteRef = useRef(options.onApplyRemote);\n onApplyRemoteRef.current = options.onApplyRemote;\n const restoreReadyFilesRef = useRef(options.restoreReadyFiles);\n restoreReadyFilesRef.current = options.restoreReadyFiles;\n const draftRef = useRef<NewSessionDraft | null>(null);\n const lastSavedSignature = useRef<string | null>(null);\n const passiveProjectionSignature = useRef<string | null>(null);\n const pendingHydratedBaselineGeneration = useRef<number | null>(null);\n const targetGeneration = useRef(0);\n const persistenceEpoch = useRef(0);\n const saveChain = useRef<Promise<void>>(Promise.resolve());\n const autosaveTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const conflictRef = useRef<Error | null>(null);\n const loadingRef = useRef(true);\n const activeRemoteReads = useRef(new Set<AbortController>());\n const targetKey = `${workspaceId}\\u0000${clientIdentity(client)}`;\n const targetKeyRef = useRef(targetKey);\n\n const setCurrentConflict = useCallback((next: Error | null) => {\n conflictRef.current = next;\n setConflict(next);\n }, []);\n\n const captureConflict = useCallback(\n (cause: unknown): boolean => {\n if (!isNewSessionDraftConflict(cause)) return false;\n const problem = asError(cause);\n setCurrentConflict(problem);\n setError(problem);\n return true;\n },\n [setCurrentConflict, setError],\n );\n\n const abortActiveRemoteReads = useCallback(() => {\n for (const controller of activeRemoteReads.current) controller.abort();\n activeRemoteReads.current.clear();\n }, []);\n\n const validateRemoteDraft = useCallback(\n async (\n remote: NewSessionDraft,\n generation: number,\n signal: AbortSignal,\n ): Promise<ValidatedRemoteDraft | null> => {\n if (!resourceHydrationReady || signal.aborted) return null;\n const hydratedResources = hydrateResources\n ? await hydrateResources(remote.resources)\n : remote.resources;\n if (generation !== targetGeneration.current || signal.aborted) return null;\n const seen = new Set<string>();\n const fileRefs = hydratedResources.flatMap((resource) => {\n if (resource.kind !== \"file\" || seen.has(resource.fileId)) return [];\n seen.add(resource.fileId);\n return [resource];\n });\n const settled = await Promise.allSettled(\n fileRefs.map((resource) =>\n retryTransient(() => client.getFile(workspaceId, resource.fileId, { signal }), {\n signal,\n delaysMs: retryDelaysMs,\n }),\n ),\n );\n if (generation !== targetGeneration.current || signal.aborted) return null;\n const files = settled.flatMap((result, index) => {\n if (result.status !== \"fulfilled\") return [];\n const file = result.value;\n const expected = fileRefs[index]?.fileId;\n return file.id === expected && file.workspaceId === workspaceId && file.status === \"ready\"\n ? [file]\n : [];\n });\n return {\n draft: remote,\n editable: {\n text: remote.text,\n resources: [\n ...hydratedResources.filter((resource) => resource.kind === \"repository\"),\n ...files.map(\n (file): ResourceRef => ({\n kind: \"file\",\n fileId: file.id,\n }),\n ),\n ],\n tools: remote.tools,\n toolsProvided: remote.toolsProvided,\n model: remote.model,\n reasoningEffort: remote.reasoningEffort,\n latencyMode: remote.latencyMode ?? \"standard\",\n ...(remote.modelProvided !== undefined ? { modelProvided: remote.modelProvided } : {}),\n ...(Object.hasOwn(remote, \"selectedProjectChannelId\")\n ? { selectedProjectChannelId: remote.selectedProjectChannelId }\n : {}),\n options: remote.options,\n },\n files,\n };\n },\n [client, hydrateResources, resourceHydrationReady, retryDelaysMs, workspaceId],\n );\n\n const readRemote = useCallback(\n async (quietRetries = true): Promise<ValidatedRemoteDraft | null> => {\n const controller = new AbortController();\n activeRemoteReads.current.add(controller);\n const generation = targetGeneration.current;\n try {\n // A deploy or database restart answers 502/503 for a few seconds; the\n // read is safe to repeat, so retry it quietly before reporting anything.\n const remote = normalizeLegacyNewSessionDraft(\n await retryTransient(\n () => client.getNewSessionDraft(workspaceId, { signal: controller.signal }),\n {\n signal: controller.signal,\n shouldContinue: () => generation === targetGeneration.current,\n delaysMs: quietRetries ? retryDelaysMs : [],\n },\n ),\n );\n if (generation !== targetGeneration.current || controller.signal.aborted) return null;\n return await validateRemoteDraft(remote, generation, controller.signal);\n } finally {\n activeRemoteReads.current.delete(controller);\n }\n },\n [client, retryDelaysMs, validateRemoteDraft, workspaceId],\n );\n\n const applyRemote = useCallback(\n (remote: ValidatedRemoteDraft): void => {\n draftRef.current = remote.draft;\n // A GET may project away revoked files, repositories, or tools without\n // changing the stored row. This signature suppresses passive autosave;\n // explicit Send always writes its exact snapshot before create.\n lastSavedSignature.current = draftSignature(remote.editable);\n passiveProjectionSignature.current = null;\n pendingHydratedBaselineGeneration.current = targetGeneration.current;\n unloadedValueSignature.current = null;\n setDraft(remote.draft);\n setCurrentConflict(null);\n setError(null);\n restoreReadyFilesRef.current(remote.files);\n onApplyRemoteRef.current(remote.editable, remote.draft.selectionHistory);\n },\n [setCurrentConflict, setError],\n );\n\n const reload = useCallback(async (): Promise<void> => {\n if (!resourceHydrationReady) return;\n const generation = targetGeneration.current;\n const valueAtStart = draftSignature(valueRef.current);\n loadingRef.current = true;\n setLoading(true);\n try {\n const remote = await readRemote();\n if (remote && generation === targetGeneration.current) applyRemote(remote);\n } catch (cause) {\n if (generation === targetGeneration.current) {\n if (!draftRef.current) unloadedValueSignature.current = valueAtStart;\n setError(asError(cause));\n }\n } finally {\n if (generation === targetGeneration.current) {\n loadingRef.current = false;\n setLoading(false);\n }\n }\n }, [applyRemote, readRemote, resourceHydrationReady, setError]);\n\n // `reload` intentionally follows resource hydration callbacks, but those\n // callbacks can change identity when a catalog refresh publishes a new\n // snapshot. Keep the effect below targeted to durable authority (the actor,\n // workspace/client, and readiness), not to an incidental callback identity.\n const reloadRef = useRef(reload);\n reloadRef.current = reload;\n\n // A client replacement represents a new authenticated actor. Reset all OCC\n // state before the first await, so no effect in this commit can persist the\n // prior actor/workspace value under the new target.\n useEffect(() => {\n if (targetKeyRef.current !== targetKey) {\n targetKeyRef.current = targetKey;\n }\n targetGeneration.current += 1;\n abortActiveRemoteReads();\n persistenceEpoch.current += 1;\n draftRef.current = null;\n lastSavedSignature.current = null;\n passiveProjectionSignature.current = null;\n pendingHydratedBaselineGeneration.current = null;\n unloadedValueSignature.current = null;\n saveChain.current = Promise.resolve();\n if (autosaveTimer.current) clearTimeout(autosaveTimer.current);\n autosaveTimer.current = null;\n setDraft(null);\n setCurrentConflict(null);\n setError(null);\n setSaving(false);\n loadingRef.current = true;\n setLoading(true);\n return () => {\n targetGeneration.current += 1;\n abortActiveRemoteReads();\n if (autosaveTimer.current) clearTimeout(autosaveTimer.current);\n autosaveTimer.current = null;\n };\n }, [abortActiveRemoteReads, setCurrentConflict, setError, targetKey]);\n\n // Initial/target reads wait for the catalogs required to validate resources.\n // A later catalog refresh keeps this boolean true and therefore does not\n // restart the read or fence a local/in-flight edit.\n useEffect(() => {\n if (resourceHydrationReady) void reloadRef.current();\n }, [resourceHydrationReady, targetKey]);\n\n const persistSnapshot = useCallback(\n (snapshot: NewSessionDraftEditable, force = false): Promise<FlushedNewSessionDraft | null> => {\n const generation = targetGeneration.current;\n const epoch = persistenceEpoch.current;\n const signature = draftSignature(snapshot);\n const run = async (): Promise<FlushedNewSessionDraft | null> => {\n if (generation !== targetGeneration.current || epoch !== persistenceEpoch.current) {\n return null;\n }\n const current = draftRef.current;\n if (!current) return null;\n if (!force && signature === lastSavedSignature.current) {\n return { revision: current.revision, signature };\n }\n setSaving(true);\n try {\n const save = () =>\n client.saveNewSessionDraft(workspaceId, {\n ...snapshot,\n expectedRevision: current.revision,\n });\n // Send's save is idempotent by construction: it writes one exact\n // snapshot against one expected revision. If an unconfirmed attempt\n // did commit, the repeat is a revision conflict that flushForSend\n // already reconciles by rereading, so it can never apply twice.\n const saved = force\n ? await retryTransient(save, {\n shouldContinue: () =>\n generation === targetGeneration.current && epoch === persistenceEpoch.current,\n delaysMs: retryDelaysMs,\n })\n : await save();\n if (generation !== targetGeneration.current || epoch !== persistenceEpoch.current) {\n return null;\n }\n draftRef.current = saved;\n lastSavedSignature.current = signature;\n passiveProjectionSignature.current = null;\n setDraft(saved);\n setCurrentConflict(null);\n setError(null);\n return { revision: saved.revision, signature };\n } catch (cause) {\n if (generation !== targetGeneration.current || epoch !== persistenceEpoch.current) {\n return null;\n }\n const problem = asError(cause);\n if (isNewSessionDraftConflict(cause)) setCurrentConflict(problem);\n setError(problem);\n return null;\n } finally {\n if (generation === targetGeneration.current && epoch === persistenceEpoch.current) {\n setSaving(false);\n }\n }\n };\n const operation = saveChain.current.then(run, run);\n saveChain.current = operation.then(\n () => undefined,\n () => undefined,\n );\n return operation;\n },\n [client, retryDelaysMs, setCurrentConflict, setError, workspaceId],\n );\n\n const valueSignature = draftSignature(options.value);\n useEffect(() => {\n if (\n !loading &&\n draftRef.current &&\n pendingHydratedBaselineGeneration.current === targetGeneration.current\n ) {\n // Route hydration may deliberately project the durable row through newer\n // route intent (Recents/Default/named project) and therefore change its\n // compute/provenance representation. The first complete controlled value\n // after onApplyRemote is a passive-autosave baseline only. It is not a\n // durable acknowledgement: an immediate create-time flush must persist\n // this projection against the remote revision before exact create.\n pendingHydratedBaselineGeneration.current = null;\n passiveProjectionSignature.current = valueSignature;\n return;\n }\n if (\n loading ||\n suspendAutosave ||\n !draftRef.current ||\n conflictRef.current ||\n valueSignature === lastSavedSignature.current ||\n valueSignature === passiveProjectionSignature.current\n ) {\n return;\n }\n passiveProjectionSignature.current = null;\n const snapshot = cloneEditable(valueRef.current);\n autosaveTimer.current = setTimeout(() => {\n autosaveTimer.current = null;\n void persistSnapshot(snapshot);\n }, 500);\n return () => {\n if (autosaveTimer.current) clearTimeout(autosaveTimer.current);\n autosaveTimer.current = null;\n };\n }, [loading, persistSnapshot, suspendAutosave, valueSignature]);\n\n const flush = useCallback(async (): Promise<FlushedNewSessionDraft | null> => {\n if (loadingRef.current || conflictRef.current || !draftRef.current) return null;\n if (autosaveTimer.current) clearTimeout(autosaveTimer.current);\n autosaveTimer.current = null;\n return await persistSnapshot(cloneEditable(valueRef.current));\n }, [persistSnapshot]);\n\n const flushForSend = useCallback(\n async (sendSnapshot?: NewSessionDraftEditable): Promise<FlushedNewSessionDraft | null> => {\n if (loadingRef.current) return null;\n if (autosaveTimer.current) clearTimeout(autosaveTimer.current);\n autosaveTimer.current = null;\n const snapshot = cloneEditable(sendSnapshot ?? valueRef.current);\n const generation = targetGeneration.current;\n if (!draftRef.current) {\n // A consumed draft can be followed by a newer local edit. Reacquire\n // the safe seed before preserving that edit.\n try {\n const remote = await readRemote();\n if (!remote || generation !== targetGeneration.current) return null;\n draftRef.current = remote.draft;\n lastSavedSignature.current = draftSignature(remote.editable);\n setDraft(remote.draft);\n } catch (cause) {\n if (generation === targetGeneration.current) setError(asError(cause));\n return null;\n }\n }\n // A sibling can save between our read and write. Retry a bounded number of\n // times; only the explicit Send may choose the visible snapshot over it.\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if (generation !== targetGeneration.current) return null;\n if (conflictRef.current) {\n await saveChain.current;\n try {\n const remote = await readRemote();\n if (!remote || generation !== targetGeneration.current) return null;\n draftRef.current = remote.draft;\n lastSavedSignature.current = draftSignature(remote.editable);\n passiveProjectionSignature.current = null;\n setDraft(remote.draft);\n setCurrentConflict(null);\n setError(null);\n } catch (cause) {\n if (generation === targetGeneration.current) setError(asError(cause));\n return null;\n }\n }\n // GET can be a sanitized projection of a different stored row. An\n // explicit Send always writes its clicked snapshot, even when its\n // signature appears unchanged, before exact create consumes it.\n const flushed = await persistSnapshot(snapshot, true);\n if (flushed) return flushed;\n if (!conflictRef.current) return null;\n }\n return null;\n },\n [persistSnapshot, readRemote, setCurrentConflict, setError],\n );\n\n const isCurrentSignature = useCallback(\n (signature: string): boolean => draftSignature(valueRef.current) === signature,\n [],\n );\n\n const acknowledgeConsumed = useCallback(\n async (\n flushed: FlushedNewSessionDraft,\n visibleSignature = flushed.signature,\n ): Promise<AcknowledgeConsumedNewSessionDraftResult | null> => {\n const current = draftRef.current;\n if (\n !current ||\n current.revision !== flushed.revision ||\n lastSavedSignature.current !== flushed.signature\n ) {\n return null;\n }\n\n if (autosaveTimer.current) clearTimeout(autosaveTimer.current);\n autosaveTimer.current = null;\n\n const generation = targetGeneration.current;\n const epoch = persistenceEpoch.current + 1;\n persistenceEpoch.current = epoch;\n const priorSaves = saveChain.current;\n\n // Session creation accepted this exact server revision. Invalidate every\n // save that captured the old row as its OCC base, then wait for its\n // physical response before reading the safe seed. A late response must\n // not restore stale persistence authority or race the seed read.\n setCurrentConflict(null);\n setError(null);\n\n const run = async (): Promise<AcknowledgeConsumedNewSessionDraftResult | null> => {\n if (generation !== targetGeneration.current || epoch !== persistenceEpoch.current) {\n return null;\n }\n setSaving(true);\n try {\n await priorSaves;\n if (generation !== targetGeneration.current || epoch !== persistenceEpoch.current) {\n return null;\n }\n const remote = await readRemote();\n if (!remote || generation !== targetGeneration.current) return null;\n\n // A successful create turns the accepted revision into exactly one\n // newer safe seed. A larger revision proves that a sibling/in-flight\n // edit won after the create; never overwrite that newer authority.\n const expectedSeedRevision = flushed.revision + 1;\n if (remote.draft.revision > expectedSeedRevision) {\n const problem = new Error(\n \"New-session defaults changed in another client while the session was created\",\n );\n draftRef.current = remote.draft;\n lastSavedSignature.current = draftSignature(remote.editable);\n passiveProjectionSignature.current = null;\n setDraft(remote.draft);\n setCurrentConflict(problem);\n setError(problem);\n return null;\n }\n if (remote.draft.revision < expectedSeedRevision) {\n const problem = new Error(\"New-session defaults were not seeded yet\");\n setError(problem);\n return null;\n }\n\n draftRef.current = remote.draft;\n lastSavedSignature.current = draftSignature(remote.editable);\n passiveProjectionSignature.current = null;\n setDraft(remote.draft);\n // Typing may continue while the safe-seed fetch is pending.\n const snapshot = cloneEditable(valueRef.current);\n const signature = draftSignature(snapshot);\n if (signature === visibleSignature) {\n // The server now owns the safe seed. Keep the post-create composer\n // UI-only until the next page load instead of persisting the\n // route's deliberate clear as a new empty draft.\n draftRef.current = null;\n lastSavedSignature.current = null;\n passiveProjectionSignature.current = null;\n setDraft(null);\n return { kind: \"consumed\" };\n }\n\n // A newer local edit is the next draft. It may be saved only against\n // the exact safe-seed revision; OCC still fences a concurrent sibling\n // save that lands between this read and this write.\n const saved = await client.saveNewSessionDraft(workspaceId, {\n ...snapshot,\n expectedRevision: remote.draft.revision,\n });\n if (generation !== targetGeneration.current || epoch !== persistenceEpoch.current) {\n return null;\n }\n draftRef.current = saved;\n lastSavedSignature.current = signature;\n passiveProjectionSignature.current = null;\n setDraft(saved);\n setCurrentConflict(null);\n setError(null);\n return {\n kind: \"preserved\",\n flushed: { revision: saved.revision, signature },\n };\n } catch (cause) {\n if (generation !== targetGeneration.current || epoch !== persistenceEpoch.current) {\n return null;\n }\n const problem = asError(cause);\n if (isNewSessionDraftConflict(cause)) setCurrentConflict(problem);\n setError(problem);\n return null;\n } finally {\n if (generation === targetGeneration.current && epoch === persistenceEpoch.current) {\n setSaving(false);\n }\n }\n };\n\n const operation = saveChain.current.then(run, run);\n saveChain.current = operation.then(\n () => undefined,\n () => undefined,\n );\n return await operation;\n },\n [client, readRemote, setCurrentConflict, setError, workspaceId],\n );\n\n const resolveConflict = useCallback(\n async (choice: \"keep_mine\" | \"use_remote\"): Promise<void> => {\n if (choice === \"use_remote\") {\n await reload();\n return;\n }\n const mine = cloneEditable(valueRef.current);\n const generation = targetGeneration.current;\n loadingRef.current = true;\n setLoading(true);\n try {\n const remote = await readRemote();\n if (!remote || generation !== targetGeneration.current) return;\n draftRef.current = remote.draft;\n lastSavedSignature.current = draftSignature(remote.editable);\n passiveProjectionSignature.current = null;\n setDraft(remote.draft);\n setCurrentConflict(null);\n await persistSnapshot(mine);\n } catch (cause) {\n if (generation === targetGeneration.current) setError(asError(cause));\n } finally {\n if (generation === targetGeneration.current) {\n loadingRef.current = false;\n setLoading(false);\n }\n }\n },\n [persistSnapshot, readRemote, reload, setCurrentConflict, setError],\n );\n\n const unavailable = error !== null && conflict === null && isTransientServiceFailure(error);\n\n /**\n * Re-read after Opengeni was unreachable. The remote draft replaces the\n * composer only when the first load never succeeded and nothing was typed\n * since; otherwise it only becomes the save base, so local text survives and\n * an unconfirmed save is reconciled by what the server actually holds.\n */\n const reconnect = useCallback(async (): Promise<void> => {\n if (!resourceHydrationReady) return;\n const generation = targetGeneration.current;\n try {\n // One attempt per tick: the loop itself is the retry.\n const remote = await readRemote(false);\n if (!remote || generation !== targetGeneration.current) return;\n if (\n !draftRef.current &&\n unloadedValueSignature.current !== null &&\n unloadedValueSignature.current === draftSignature(valueRef.current)\n ) {\n applyRemote(remote);\n return;\n }\n unloadedValueSignature.current = null;\n draftRef.current = remote.draft;\n lastSavedSignature.current = draftSignature(remote.editable);\n passiveProjectionSignature.current = null;\n setDraft(remote.draft);\n setError(null);\n } catch (cause) {\n if (generation === targetGeneration.current) setError(asError(cause));\n }\n }, [applyRemote, readRemote, resourceHydrationReady, setError]);\n const reconnectRef = useRef(reconnect);\n reconnectRef.current = reconnect;\n\n useEffect(() => {\n if (!unavailable) return;\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const tick = () => {\n timer = setTimeout(() => {\n if (stopped) return;\n void reconnectRef.current().finally(() => {\n if (!stopped) tick();\n });\n }, reconnectIntervalMs);\n };\n tick();\n return () => {\n stopped = true;\n if (timer !== undefined) clearTimeout(timer);\n };\n }, [unavailable, reconnectIntervalMs, targetKey]);\n\n return {\n draft,\n revision: draft?.revision ?? 0,\n loading,\n saving,\n conflict,\n error,\n unavailable,\n currentError: useCallback(() => errorRef.current, []),\n reportUnavailable: useCallback(\n (cause: unknown): boolean => {\n if (!isTransientServiceFailure(cause)) return false;\n setError(asError(cause));\n return true;\n },\n [setError],\n ),\n flush,\n flushForSend,\n isCurrentSignature,\n acknowledgeConsumed,\n reload,\n captureConflict,\n resolveConflict,\n clearError: useCallback(() => {\n setError(null);\n setCurrentConflict(null);\n }, [setCurrentConflict, setError]),\n };\n}\n\nfunction cloneEditable(value: NewSessionDraftEditable): NewSessionDraftEditable {\n return structuredClone(value);\n}\n\nfunction normalizeLegacyNewSessionDraft(remote: NewSessionDraft): NewSessionDraft {\n // Old servers returned the tools array without the explicitness marker. The\n // old request contract made that array the user's complete selection, so an\n // absent marker must remain explicit (including an empty array) on a new\n // client rather than inheriting current workspace defaults.\n return {\n ...remote,\n toolsProvided: Object.hasOwn(remote, \"toolsProvided\") ? remote.toolsProvided : true,\n latencyMode: remote.latencyMode ?? \"standard\",\n selectionHistory: remote.selectionHistory ?? { projects: [] },\n };\n}\n\nfunction draftSignature(value: NewSessionDraftEditable): string {\n return JSON.stringify(sortedJson(value));\n}\n\n/** Key-sorted copy so equal drafts compare equal regardless of key order. */\nfunction sortedJson(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortedJson);\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, nested]) => [key, sortedJson(nested)]),\n );\n }\n return value;\n}\n\nfunction clientIdentity(client: object): number {\n let identity = clientIdentities.get(client);\n if (identity === undefined) {\n identity = nextClientIdentity;\n nextClientIdentity += 1;\n clientIdentities.set(client, identity);\n }\n return identity;\n}\n\nconst clientIdentities = new WeakMap<object, number>();\nlet nextClientIdentity = 1;\n\nexport function isNewSessionDraftConflict(cause: unknown): boolean {\n return (\n cause instanceof OpenGeniApiError &&\n cause.status === 409 &&\n cause.code === \"NEW_SESSION_DRAFT_CONFLICT\"\n );\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n","import { OpenGeniApiError } from \"@opengeni/sdk\";\n\n/*\n * A deploy, failover or database restart makes the API answer 502/503/504 (or a\n * retryable 500) for a few seconds, or drops the connection outright. Reads\n * behind the new-chat composer retry those quietly before anything is shown;\n * the person keeps typing and never sees a raw \"service unavailable\" line.\n */\n\n/** Backoff between attempts: about ten seconds in all before anything is shown. */\nexport const TRANSIENT_RETRY_DELAYS_MS: readonly number[] = [1_000, 2_000, 3_000, 4_000];\n\n/** After the quiet retries give up, try once at this pace until Opengeni answers. */\nexport const TRANSIENT_RECONNECT_INTERVAL_MS = 3_000;\n\n/** The one line shown while Opengeni is briefly unreachable. */\nexport const OPENGENI_UPDATING_NOTICE = \"Opengeni is updating. We'll reconnect automatically.\";\n\nconst NETWORK_FAILURE =\n /failed to fetch|fetch failed|networkerror|load failed|network request failed/iu;\n\n/**\n * True for a failure that says the service is briefly unreachable, not that\n * the request was wrong: a gateway or availability status, a 500 the API marks\n * retryable, or a request that never got a response.\n */\nexport function isTransientServiceFailure(error: unknown): boolean {\n if (isAbort(error)) return false;\n if (error instanceof OpenGeniApiError) {\n if (error.status === 502 || error.status === 503 || error.status === 504) return true;\n if (error.status === 500) return error.retryable;\n // The SDK reports a mutation whose response never arrived as status 0.\n return error.status === 0 && error.code === \"network_error\";\n }\n return error instanceof TypeError && NETWORK_FAILURE.test(error.message);\n}\n\nexport type RetryTransientOptions = {\n /** Stop waiting (and rethrow the last failure) once this returns false. */\n shouldContinue?: () => boolean;\n signal?: AbortSignal;\n delaysMs?: readonly number[];\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n};\n\n/**\n * Run a read, retrying only transient service failures with backoff. Never use\n * this for a request whose repeat could apply twice: it is for reads and for\n * writes that are idempotent by construction.\n */\nexport async function retryTransient<T>(\n operation: () => Promise<T>,\n options: RetryTransientOptions = {},\n): Promise<T> {\n const delays = options.delaysMs ?? TRANSIENT_RETRY_DELAYS_MS;\n const sleep = options.sleep ?? abortableSleep;\n for (let attempt = 0; ; attempt += 1) {\n try {\n return await operation();\n } catch (error) {\n const delay = delays[attempt];\n if (\n delay === undefined ||\n !isTransientServiceFailure(error) ||\n options.signal?.aborted ||\n options.shouldContinue?.() === false\n ) {\n throw error;\n }\n await sleep(delay, options.signal);\n if (options.signal?.aborted || options.shouldContinue?.() === false) throw error;\n }\n }\n}\n\nfunction abortableSleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve();\n return;\n }\n const done = () => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n };\n const timer = setTimeout(done, ms);\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n\nfunction isAbort(error: unknown): boolean {\n return (\n (typeof DOMException !== \"undefined\" &&\n error instanceof DOMException &&\n error.name === \"AbortError\") ||\n (error instanceof Error && error.name === \"AbortError\")\n );\n}\n"],"mappings":"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","names":["OpenGeniApiError","OpenGeniApiError"]}
@@ -0,0 +1,27 @@
1
+ export type NotificationSpan = {
2
+ kind: "text";
3
+ text: string;
4
+ } | {
5
+ kind: "bold";
6
+ text: string;
7
+ } | {
8
+ kind: "code";
9
+ text: string;
10
+ } | {
11
+ kind: "link";
12
+ text: string;
13
+ href: string;
14
+ };
15
+ export type NotificationBlock = {
16
+ kind: "paragraph";
17
+ spans: NotificationSpan[];
18
+ } | {
19
+ kind: "bullets";
20
+ items: NotificationSpan[][];
21
+ };
22
+ /** One line's spans. Only https links become links. */
23
+ export declare function parseNotificationInline(line: string): NotificationSpan[];
24
+ /** Paragraphs (blank-line separated; single line breaks kept) and bullet lists. */
25
+ export declare function parseNotificationText(text: string): NotificationBlock[];
26
+ /** The text as one plain line, for previews that clamp to a line or two. */
27
+ export declare function notificationPlainText(text: string): string;
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  // src/lib/noto-sans-arabic-loader.ts
2
4
  import fontUrl from "@fontsource-variable/noto-sans-arabic/files/noto-sans-arabic-arabic-wght-normal.woff2";
3
5
  import unicodeRanges from "@fontsource-variable/noto-sans-arabic/unicode.json";
@@ -18,4 +20,4 @@ function loadNotoSansArabic() {
18
20
  export {
19
21
  loadNotoSansArabic
20
22
  };
21
- //# sourceMappingURL=noto-sans-arabic-loader-IA2T4X2A.js.map
23
+ //# sourceMappingURL=noto-sans-arabic-loader-XSH2KYWJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/noto-sans-arabic-loader.ts"],"sourcesContent":["import fontUrl from \"@fontsource-variable/noto-sans-arabic/files/noto-sans-arabic-arabic-wght-normal.woff2\";\nimport unicodeRanges from \"@fontsource-variable/noto-sans-arabic/unicode.json\";\n\nlet loading: Promise<void> | undefined;\n\nexport function loadNotoSansArabic(): Promise<void> {\n loading ??= new FontFace(\n \"Noto Sans Arabic Variable\",\n `url(\"${fontUrl}\") format(\"woff2-variations\")`,\n { style: \"normal\", weight: \"100 900\", unicodeRange: unicodeRanges.arabic },\n )\n .load()\n .then((font) => {\n document.fonts.add(font);\n })\n .catch((error: unknown) => {\n loading = undefined;\n throw error;\n });\n return loading;\n}\n"],"mappings":";AAAA,OAAO,aAAa;AACpB,OAAO,mBAAmB;AAE1B,IAAI;AAEG,SAAS,qBAAoC;AAClD,cAAY,IAAI;AAAA,IACd;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,EAAE,OAAO,UAAU,QAAQ,WAAW,cAAc,cAAc,OAAO;AAAA,EAC3E,EACG,KAAK,EACL,KAAK,CAAC,SAAS;AACd,aAAS,MAAM,IAAI,IAAI;AAAA,EACzB,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,cAAU;AACV,UAAM;AAAA,EACR,CAAC;AACH,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/lib/noto-sans-arabic-loader.ts"],"sourcesContent":["import fontUrl from \"@fontsource-variable/noto-sans-arabic/files/noto-sans-arabic-arabic-wght-normal.woff2\";\nimport unicodeRanges from \"@fontsource-variable/noto-sans-arabic/unicode.json\";\n\nlet loading: Promise<void> | undefined;\n\nexport function loadNotoSansArabic(): Promise<void> {\n loading ??= new FontFace(\n \"Noto Sans Arabic Variable\",\n `url(\"${fontUrl}\") format(\"woff2-variations\")`,\n { style: \"normal\", weight: \"100 900\", unicodeRange: unicodeRanges.arabic },\n )\n .load()\n .then((font) => {\n document.fonts.add(font);\n })\n .catch((error: unknown) => {\n loading = undefined;\n throw error;\n });\n return loading;\n}\n"],"mappings":";;;AAAA,OAAO,aAAa;AACpB,OAAO,mBAAmB;AAE1B,IAAI;AAEG,SAAS,qBAAoC;AAClD,cAAY,IAAI;AAAA,IACd;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,EAAE,OAAO,UAAU,QAAQ,WAAW,cAAc,cAAc,OAAO;AAAA,EAC3E,EACG,KAAK,EACL,KAAK,CAAC,SAAS;AACd,aAAS,MAAM,IAAI,IAAI;AAAA,EACzB,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,cAAU;AACV,UAAM;AAAA,EACR,CAAC;AACH,SAAO;AACT;","names":[]}
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  // src/lib/noto-sans-jp-loader.generated.ts
2
4
  import unicodeRanges from "@fontsource-variable/noto-sans-jp/unicode.json";
3
5
  import font0 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-0-wght-normal.woff2";
@@ -289,4 +291,4 @@ function rangeContains(range, codePoint) {
289
291
  export {
290
292
  loadNotoSansJp
291
293
  };
292
- //# sourceMappingURL=noto-sans-jp-loader.generated-HFGLYBR3.js.map
294
+ //# sourceMappingURL=noto-sans-jp-loader.generated-MR5L6V7K.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/noto-sans-jp-loader.generated.ts"],"sourcesContent":["/* This file is generated by scripts/generate-noto-jp-loader.ts. */\nimport unicodeRanges from \"@fontsource-variable/noto-sans-jp/unicode.json\";\nimport font0 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-0-wght-normal.woff2\";\nimport font1 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-1-wght-normal.woff2\";\nimport font2 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-2-wght-normal.woff2\";\nimport font3 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-3-wght-normal.woff2\";\nimport font4 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-4-wght-normal.woff2\";\nimport font5 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-5-wght-normal.woff2\";\nimport font6 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-6-wght-normal.woff2\";\nimport font7 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-7-wght-normal.woff2\";\nimport font8 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-8-wght-normal.woff2\";\nimport font9 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-9-wght-normal.woff2\";\nimport font10 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-10-wght-normal.woff2\";\nimport font11 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-11-wght-normal.woff2\";\nimport font12 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-12-wght-normal.woff2\";\nimport font13 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-13-wght-normal.woff2\";\nimport font14 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-14-wght-normal.woff2\";\nimport font15 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-15-wght-normal.woff2\";\nimport font16 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-16-wght-normal.woff2\";\nimport font17 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-17-wght-normal.woff2\";\nimport font18 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-18-wght-normal.woff2\";\nimport font19 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-19-wght-normal.woff2\";\nimport font20 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-20-wght-normal.woff2\";\nimport font21 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-21-wght-normal.woff2\";\nimport font22 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-22-wght-normal.woff2\";\nimport font23 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-23-wght-normal.woff2\";\nimport font24 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-24-wght-normal.woff2\";\nimport font25 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-25-wght-normal.woff2\";\nimport font26 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-26-wght-normal.woff2\";\nimport font27 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-27-wght-normal.woff2\";\nimport font28 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-28-wght-normal.woff2\";\nimport font29 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-29-wght-normal.woff2\";\nimport font30 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-30-wght-normal.woff2\";\nimport font31 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-31-wght-normal.woff2\";\nimport font32 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-32-wght-normal.woff2\";\nimport font33 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-33-wght-normal.woff2\";\nimport font34 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-34-wght-normal.woff2\";\nimport font35 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-35-wght-normal.woff2\";\nimport font36 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-36-wght-normal.woff2\";\nimport font37 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-37-wght-normal.woff2\";\nimport font38 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-38-wght-normal.woff2\";\nimport font39 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-39-wght-normal.woff2\";\nimport font40 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-40-wght-normal.woff2\";\nimport font41 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-41-wght-normal.woff2\";\nimport font42 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-42-wght-normal.woff2\";\nimport font43 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-43-wght-normal.woff2\";\nimport font44 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-44-wght-normal.woff2\";\nimport font45 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-45-wght-normal.woff2\";\nimport font46 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-46-wght-normal.woff2\";\nimport font47 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-47-wght-normal.woff2\";\nimport font48 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-48-wght-normal.woff2\";\nimport font49 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-49-wght-normal.woff2\";\nimport font50 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-50-wght-normal.woff2\";\nimport font51 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-51-wght-normal.woff2\";\nimport font52 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-52-wght-normal.woff2\";\nimport font53 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-53-wght-normal.woff2\";\nimport font54 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-54-wght-normal.woff2\";\nimport font55 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-55-wght-normal.woff2\";\nimport font56 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-56-wght-normal.woff2\";\nimport font57 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-57-wght-normal.woff2\";\nimport font58 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-58-wght-normal.woff2\";\nimport font59 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-59-wght-normal.woff2\";\nimport font60 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-60-wght-normal.woff2\";\nimport font61 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-61-wght-normal.woff2\";\nimport font62 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-62-wght-normal.woff2\";\nimport font63 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-63-wght-normal.woff2\";\nimport font64 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-64-wght-normal.woff2\";\nimport font65 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-65-wght-normal.woff2\";\nimport font66 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-66-wght-normal.woff2\";\nimport font67 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-67-wght-normal.woff2\";\nimport font68 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-68-wght-normal.woff2\";\nimport font69 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-69-wght-normal.woff2\";\nimport font70 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-70-wght-normal.woff2\";\nimport font71 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-71-wght-normal.woff2\";\nimport font72 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-72-wght-normal.woff2\";\nimport font73 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-73-wght-normal.woff2\";\nimport font74 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-74-wght-normal.woff2\";\nimport font75 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-75-wght-normal.woff2\";\nimport font76 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-76-wght-normal.woff2\";\nimport font77 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-77-wght-normal.woff2\";\nimport font78 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-78-wght-normal.woff2\";\nimport font79 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-79-wght-normal.woff2\";\nimport font80 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-80-wght-normal.woff2\";\nimport font81 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-81-wght-normal.woff2\";\nimport font82 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-82-wght-normal.woff2\";\nimport font83 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-83-wght-normal.woff2\";\nimport font84 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-84-wght-normal.woff2\";\nimport font85 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-85-wght-normal.woff2\";\nimport font86 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-86-wght-normal.woff2\";\nimport font87 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-87-wght-normal.woff2\";\nimport font88 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-88-wght-normal.woff2\";\nimport font89 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-89-wght-normal.woff2\";\nimport font90 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-90-wght-normal.woff2\";\nimport font91 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-91-wght-normal.woff2\";\nimport font92 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-92-wght-normal.woff2\";\nimport font93 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-93-wght-normal.woff2\";\nimport font94 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-94-wght-normal.woff2\";\nimport font95 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-95-wght-normal.woff2\";\nimport font96 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-96-wght-normal.woff2\";\nimport font97 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-97-wght-normal.woff2\";\nimport font98 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-98-wght-normal.woff2\";\nimport font99 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-99-wght-normal.woff2\";\nimport font100 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-100-wght-normal.woff2\";\nimport font101 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-101-wght-normal.woff2\";\nimport font102 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-102-wght-normal.woff2\";\nimport font103 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-103-wght-normal.woff2\";\nimport font104 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-104-wght-normal.woff2\";\nimport font105 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-105-wght-normal.woff2\";\nimport font106 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-106-wght-normal.woff2\";\nimport font107 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-107-wght-normal.woff2\";\nimport font108 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-108-wght-normal.woff2\";\nimport font109 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-109-wght-normal.woff2\";\nimport font110 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-110-wght-normal.woff2\";\nimport font111 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-111-wght-normal.woff2\";\nimport font112 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-112-wght-normal.woff2\";\nimport font113 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-113-wght-normal.woff2\";\nimport font114 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-114-wght-normal.woff2\";\nimport font115 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-115-wght-normal.woff2\";\nimport font116 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-116-wght-normal.woff2\";\nimport font117 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-117-wght-normal.woff2\";\nimport font118 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-118-wght-normal.woff2\";\nimport font119 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-119-wght-normal.woff2\";\n\nconst fontUrls: Record<string, string> = {\n \"[0]\": font0,\n \"[1]\": font1,\n \"[2]\": font2,\n \"[3]\": font3,\n \"[4]\": font4,\n \"[5]\": font5,\n \"[6]\": font6,\n \"[7]\": font7,\n \"[8]\": font8,\n \"[9]\": font9,\n \"[10]\": font10,\n \"[11]\": font11,\n \"[12]\": font12,\n \"[13]\": font13,\n \"[14]\": font14,\n \"[15]\": font15,\n \"[16]\": font16,\n \"[17]\": font17,\n \"[18]\": font18,\n \"[19]\": font19,\n \"[20]\": font20,\n \"[21]\": font21,\n \"[22]\": font22,\n \"[23]\": font23,\n \"[24]\": font24,\n \"[25]\": font25,\n \"[26]\": font26,\n \"[27]\": font27,\n \"[28]\": font28,\n \"[29]\": font29,\n \"[30]\": font30,\n \"[31]\": font31,\n \"[32]\": font32,\n \"[33]\": font33,\n \"[34]\": font34,\n \"[35]\": font35,\n \"[36]\": font36,\n \"[37]\": font37,\n \"[38]\": font38,\n \"[39]\": font39,\n \"[40]\": font40,\n \"[41]\": font41,\n \"[42]\": font42,\n \"[43]\": font43,\n \"[44]\": font44,\n \"[45]\": font45,\n \"[46]\": font46,\n \"[47]\": font47,\n \"[48]\": font48,\n \"[49]\": font49,\n \"[50]\": font50,\n \"[51]\": font51,\n \"[52]\": font52,\n \"[53]\": font53,\n \"[54]\": font54,\n \"[55]\": font55,\n \"[56]\": font56,\n \"[57]\": font57,\n \"[58]\": font58,\n \"[59]\": font59,\n \"[60]\": font60,\n \"[61]\": font61,\n \"[62]\": font62,\n \"[63]\": font63,\n \"[64]\": font64,\n \"[65]\": font65,\n \"[66]\": font66,\n \"[67]\": font67,\n \"[68]\": font68,\n \"[69]\": font69,\n \"[70]\": font70,\n \"[71]\": font71,\n \"[72]\": font72,\n \"[73]\": font73,\n \"[74]\": font74,\n \"[75]\": font75,\n \"[76]\": font76,\n \"[77]\": font77,\n \"[78]\": font78,\n \"[79]\": font79,\n \"[80]\": font80,\n \"[81]\": font81,\n \"[82]\": font82,\n \"[83]\": font83,\n \"[84]\": font84,\n \"[85]\": font85,\n \"[86]\": font86,\n \"[87]\": font87,\n \"[88]\": font88,\n \"[89]\": font89,\n \"[90]\": font90,\n \"[91]\": font91,\n \"[92]\": font92,\n \"[93]\": font93,\n \"[94]\": font94,\n \"[95]\": font95,\n \"[96]\": font96,\n \"[97]\": font97,\n \"[98]\": font98,\n \"[99]\": font99,\n \"[100]\": font100,\n \"[101]\": font101,\n \"[102]\": font102,\n \"[103]\": font103,\n \"[104]\": font104,\n \"[105]\": font105,\n \"[106]\": font106,\n \"[107]\": font107,\n \"[108]\": font108,\n \"[109]\": font109,\n \"[110]\": font110,\n \"[111]\": font111,\n \"[112]\": font112,\n \"[113]\": font113,\n \"[114]\": font114,\n \"[115]\": font115,\n \"[116]\": font116,\n \"[117]\": font117,\n \"[118]\": font118,\n \"[119]\": font119,\n};\nconst loads = new Map<string, Promise<void>>();\n\nexport async function loadNotoSansJp(text: string): Promise<void> {\n const required = new Set<string>();\n for (const character of text) {\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined) continue;\n for (const [key, range] of Object.entries(unicodeRanges)) {\n if (!fontUrls[key]) continue;\n if (rangeContains(range, codePoint)) {\n required.add(key);\n break;\n }\n }\n }\n await Promise.all([...required].map(loadShard));\n}\n\nfunction loadShard(key: string): Promise<void> {\n const existing = loads.get(key);\n if (existing) return existing;\n const url = fontUrls[key];\n const unicodeRange = (unicodeRanges as Record<string, string>)[key];\n if (!url || !unicodeRange) throw new Error(`Missing Noto Sans JP shard ${key}`);\n const loading = new FontFace(\n \"Noto Sans JP Variable\",\n `url(\"${url}\") format(\"woff2-variations\")`,\n { style: \"normal\", weight: \"100 900\", unicodeRange },\n )\n .load()\n .then((font) => {\n document.fonts.add(font);\n })\n .catch((error: unknown) => {\n loads.delete(key);\n throw error;\n });\n loads.set(key, loading);\n return loading;\n}\n\nfunction rangeContains(range: string, codePoint: number): boolean {\n for (const token of range.split(\",\")) {\n const [startText, endText = startText] = token.trim().slice(2).split(\"-\");\n const start = Number.parseInt(startText ?? \"\", 16);\n const end = Number.parseInt(endText ?? \"\", 16);\n if (Number.isFinite(start) && codePoint >= start && codePoint <= end) return true;\n }\n return false;\n}\n"],"mappings":";AACA,OAAO,mBAAmB;AAC1B,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AAEpB,IAAM,WAAmC;AAAA,EACvC,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AACA,IAAM,QAAQ,oBAAI,IAA2B;AAE7C,eAAsB,eAAe,MAA6B;AAChE,QAAM,WAAW,oBAAI,IAAY;AACjC,aAAW,aAAa,MAAM;AAC5B,UAAM,YAAY,UAAU,YAAY,CAAC;AACzC,QAAI,cAAc,OAAW;AAC7B,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,aAAa,GAAG;AACxD,UAAI,CAAC,SAAS,GAAG,EAAG;AACpB,UAAI,cAAc,OAAO,SAAS,GAAG;AACnC,iBAAS,IAAI,GAAG;AAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAE,IAAI,SAAS,CAAC;AAChD;AAEA,SAAS,UAAU,KAA4B;AAC7C,QAAM,WAAW,MAAM,IAAI,GAAG;AAC9B,MAAI,SAAU,QAAO;AACrB,QAAM,MAAM,SAAS,GAAG;AACxB,QAAM,eAAgB,cAAyC,GAAG;AAClE,MAAI,CAAC,OAAO,CAAC,aAAc,OAAM,IAAI,MAAM,8BAA8B,GAAG,EAAE;AAC9E,QAAM,UAAU,IAAI;AAAA,IAClB;AAAA,IACA,QAAQ,GAAG;AAAA,IACX,EAAE,OAAO,UAAU,QAAQ,WAAW,aAAa;AAAA,EACrD,EACG,KAAK,EACL,KAAK,CAAC,SAAS;AACd,aAAS,MAAM,IAAI,IAAI;AAAA,EACzB,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,UAAM,OAAO,GAAG;AAChB,UAAM;AAAA,EACR,CAAC;AACH,QAAM,IAAI,KAAK,OAAO;AACtB,SAAO;AACT;AAEA,SAAS,cAAc,OAAe,WAA4B;AAChE,aAAW,SAAS,MAAM,MAAM,GAAG,GAAG;AACpC,UAAM,CAAC,WAAW,UAAU,SAAS,IAAI,MAAM,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;AACxE,UAAM,QAAQ,OAAO,SAAS,aAAa,IAAI,EAAE;AACjD,UAAM,MAAM,OAAO,SAAS,WAAW,IAAI,EAAE;AAC7C,QAAI,OAAO,SAAS,KAAK,KAAK,aAAa,SAAS,aAAa,IAAK,QAAO;AAAA,EAC/E;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/lib/noto-sans-jp-loader.generated.ts"],"sourcesContent":["/* This file is generated by scripts/generate-noto-jp-loader.ts. */\nimport unicodeRanges from \"@fontsource-variable/noto-sans-jp/unicode.json\";\nimport font0 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-0-wght-normal.woff2\";\nimport font1 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-1-wght-normal.woff2\";\nimport font2 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-2-wght-normal.woff2\";\nimport font3 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-3-wght-normal.woff2\";\nimport font4 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-4-wght-normal.woff2\";\nimport font5 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-5-wght-normal.woff2\";\nimport font6 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-6-wght-normal.woff2\";\nimport font7 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-7-wght-normal.woff2\";\nimport font8 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-8-wght-normal.woff2\";\nimport font9 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-9-wght-normal.woff2\";\nimport font10 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-10-wght-normal.woff2\";\nimport font11 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-11-wght-normal.woff2\";\nimport font12 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-12-wght-normal.woff2\";\nimport font13 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-13-wght-normal.woff2\";\nimport font14 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-14-wght-normal.woff2\";\nimport font15 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-15-wght-normal.woff2\";\nimport font16 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-16-wght-normal.woff2\";\nimport font17 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-17-wght-normal.woff2\";\nimport font18 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-18-wght-normal.woff2\";\nimport font19 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-19-wght-normal.woff2\";\nimport font20 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-20-wght-normal.woff2\";\nimport font21 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-21-wght-normal.woff2\";\nimport font22 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-22-wght-normal.woff2\";\nimport font23 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-23-wght-normal.woff2\";\nimport font24 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-24-wght-normal.woff2\";\nimport font25 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-25-wght-normal.woff2\";\nimport font26 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-26-wght-normal.woff2\";\nimport font27 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-27-wght-normal.woff2\";\nimport font28 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-28-wght-normal.woff2\";\nimport font29 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-29-wght-normal.woff2\";\nimport font30 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-30-wght-normal.woff2\";\nimport font31 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-31-wght-normal.woff2\";\nimport font32 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-32-wght-normal.woff2\";\nimport font33 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-33-wght-normal.woff2\";\nimport font34 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-34-wght-normal.woff2\";\nimport font35 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-35-wght-normal.woff2\";\nimport font36 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-36-wght-normal.woff2\";\nimport font37 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-37-wght-normal.woff2\";\nimport font38 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-38-wght-normal.woff2\";\nimport font39 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-39-wght-normal.woff2\";\nimport font40 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-40-wght-normal.woff2\";\nimport font41 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-41-wght-normal.woff2\";\nimport font42 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-42-wght-normal.woff2\";\nimport font43 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-43-wght-normal.woff2\";\nimport font44 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-44-wght-normal.woff2\";\nimport font45 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-45-wght-normal.woff2\";\nimport font46 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-46-wght-normal.woff2\";\nimport font47 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-47-wght-normal.woff2\";\nimport font48 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-48-wght-normal.woff2\";\nimport font49 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-49-wght-normal.woff2\";\nimport font50 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-50-wght-normal.woff2\";\nimport font51 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-51-wght-normal.woff2\";\nimport font52 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-52-wght-normal.woff2\";\nimport font53 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-53-wght-normal.woff2\";\nimport font54 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-54-wght-normal.woff2\";\nimport font55 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-55-wght-normal.woff2\";\nimport font56 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-56-wght-normal.woff2\";\nimport font57 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-57-wght-normal.woff2\";\nimport font58 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-58-wght-normal.woff2\";\nimport font59 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-59-wght-normal.woff2\";\nimport font60 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-60-wght-normal.woff2\";\nimport font61 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-61-wght-normal.woff2\";\nimport font62 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-62-wght-normal.woff2\";\nimport font63 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-63-wght-normal.woff2\";\nimport font64 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-64-wght-normal.woff2\";\nimport font65 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-65-wght-normal.woff2\";\nimport font66 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-66-wght-normal.woff2\";\nimport font67 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-67-wght-normal.woff2\";\nimport font68 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-68-wght-normal.woff2\";\nimport font69 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-69-wght-normal.woff2\";\nimport font70 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-70-wght-normal.woff2\";\nimport font71 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-71-wght-normal.woff2\";\nimport font72 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-72-wght-normal.woff2\";\nimport font73 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-73-wght-normal.woff2\";\nimport font74 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-74-wght-normal.woff2\";\nimport font75 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-75-wght-normal.woff2\";\nimport font76 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-76-wght-normal.woff2\";\nimport font77 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-77-wght-normal.woff2\";\nimport font78 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-78-wght-normal.woff2\";\nimport font79 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-79-wght-normal.woff2\";\nimport font80 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-80-wght-normal.woff2\";\nimport font81 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-81-wght-normal.woff2\";\nimport font82 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-82-wght-normal.woff2\";\nimport font83 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-83-wght-normal.woff2\";\nimport font84 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-84-wght-normal.woff2\";\nimport font85 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-85-wght-normal.woff2\";\nimport font86 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-86-wght-normal.woff2\";\nimport font87 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-87-wght-normal.woff2\";\nimport font88 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-88-wght-normal.woff2\";\nimport font89 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-89-wght-normal.woff2\";\nimport font90 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-90-wght-normal.woff2\";\nimport font91 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-91-wght-normal.woff2\";\nimport font92 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-92-wght-normal.woff2\";\nimport font93 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-93-wght-normal.woff2\";\nimport font94 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-94-wght-normal.woff2\";\nimport font95 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-95-wght-normal.woff2\";\nimport font96 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-96-wght-normal.woff2\";\nimport font97 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-97-wght-normal.woff2\";\nimport font98 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-98-wght-normal.woff2\";\nimport font99 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-99-wght-normal.woff2\";\nimport font100 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-100-wght-normal.woff2\";\nimport font101 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-101-wght-normal.woff2\";\nimport font102 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-102-wght-normal.woff2\";\nimport font103 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-103-wght-normal.woff2\";\nimport font104 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-104-wght-normal.woff2\";\nimport font105 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-105-wght-normal.woff2\";\nimport font106 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-106-wght-normal.woff2\";\nimport font107 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-107-wght-normal.woff2\";\nimport font108 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-108-wght-normal.woff2\";\nimport font109 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-109-wght-normal.woff2\";\nimport font110 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-110-wght-normal.woff2\";\nimport font111 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-111-wght-normal.woff2\";\nimport font112 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-112-wght-normal.woff2\";\nimport font113 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-113-wght-normal.woff2\";\nimport font114 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-114-wght-normal.woff2\";\nimport font115 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-115-wght-normal.woff2\";\nimport font116 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-116-wght-normal.woff2\";\nimport font117 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-117-wght-normal.woff2\";\nimport font118 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-118-wght-normal.woff2\";\nimport font119 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-119-wght-normal.woff2\";\n\nconst fontUrls: Record<string, string> = {\n \"[0]\": font0,\n \"[1]\": font1,\n \"[2]\": font2,\n \"[3]\": font3,\n \"[4]\": font4,\n \"[5]\": font5,\n \"[6]\": font6,\n \"[7]\": font7,\n \"[8]\": font8,\n \"[9]\": font9,\n \"[10]\": font10,\n \"[11]\": font11,\n \"[12]\": font12,\n \"[13]\": font13,\n \"[14]\": font14,\n \"[15]\": font15,\n \"[16]\": font16,\n \"[17]\": font17,\n \"[18]\": font18,\n \"[19]\": font19,\n \"[20]\": font20,\n \"[21]\": font21,\n \"[22]\": font22,\n \"[23]\": font23,\n \"[24]\": font24,\n \"[25]\": font25,\n \"[26]\": font26,\n \"[27]\": font27,\n \"[28]\": font28,\n \"[29]\": font29,\n \"[30]\": font30,\n \"[31]\": font31,\n \"[32]\": font32,\n \"[33]\": font33,\n \"[34]\": font34,\n \"[35]\": font35,\n \"[36]\": font36,\n \"[37]\": font37,\n \"[38]\": font38,\n \"[39]\": font39,\n \"[40]\": font40,\n \"[41]\": font41,\n \"[42]\": font42,\n \"[43]\": font43,\n \"[44]\": font44,\n \"[45]\": font45,\n \"[46]\": font46,\n \"[47]\": font47,\n \"[48]\": font48,\n \"[49]\": font49,\n \"[50]\": font50,\n \"[51]\": font51,\n \"[52]\": font52,\n \"[53]\": font53,\n \"[54]\": font54,\n \"[55]\": font55,\n \"[56]\": font56,\n \"[57]\": font57,\n \"[58]\": font58,\n \"[59]\": font59,\n \"[60]\": font60,\n \"[61]\": font61,\n \"[62]\": font62,\n \"[63]\": font63,\n \"[64]\": font64,\n \"[65]\": font65,\n \"[66]\": font66,\n \"[67]\": font67,\n \"[68]\": font68,\n \"[69]\": font69,\n \"[70]\": font70,\n \"[71]\": font71,\n \"[72]\": font72,\n \"[73]\": font73,\n \"[74]\": font74,\n \"[75]\": font75,\n \"[76]\": font76,\n \"[77]\": font77,\n \"[78]\": font78,\n \"[79]\": font79,\n \"[80]\": font80,\n \"[81]\": font81,\n \"[82]\": font82,\n \"[83]\": font83,\n \"[84]\": font84,\n \"[85]\": font85,\n \"[86]\": font86,\n \"[87]\": font87,\n \"[88]\": font88,\n \"[89]\": font89,\n \"[90]\": font90,\n \"[91]\": font91,\n \"[92]\": font92,\n \"[93]\": font93,\n \"[94]\": font94,\n \"[95]\": font95,\n \"[96]\": font96,\n \"[97]\": font97,\n \"[98]\": font98,\n \"[99]\": font99,\n \"[100]\": font100,\n \"[101]\": font101,\n \"[102]\": font102,\n \"[103]\": font103,\n \"[104]\": font104,\n \"[105]\": font105,\n \"[106]\": font106,\n \"[107]\": font107,\n \"[108]\": font108,\n \"[109]\": font109,\n \"[110]\": font110,\n \"[111]\": font111,\n \"[112]\": font112,\n \"[113]\": font113,\n \"[114]\": font114,\n \"[115]\": font115,\n \"[116]\": font116,\n \"[117]\": font117,\n \"[118]\": font118,\n \"[119]\": font119,\n};\nconst loads = new Map<string, Promise<void>>();\n\nexport async function loadNotoSansJp(text: string): Promise<void> {\n const required = new Set<string>();\n for (const character of text) {\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined) continue;\n for (const [key, range] of Object.entries(unicodeRanges)) {\n if (!fontUrls[key]) continue;\n if (rangeContains(range, codePoint)) {\n required.add(key);\n break;\n }\n }\n }\n await Promise.all([...required].map(loadShard));\n}\n\nfunction loadShard(key: string): Promise<void> {\n const existing = loads.get(key);\n if (existing) return existing;\n const url = fontUrls[key];\n const unicodeRange = (unicodeRanges as Record<string, string>)[key];\n if (!url || !unicodeRange) throw new Error(`Missing Noto Sans JP shard ${key}`);\n const loading = new FontFace(\n \"Noto Sans JP Variable\",\n `url(\"${url}\") format(\"woff2-variations\")`,\n { style: \"normal\", weight: \"100 900\", unicodeRange },\n )\n .load()\n .then((font) => {\n document.fonts.add(font);\n })\n .catch((error: unknown) => {\n loads.delete(key);\n throw error;\n });\n loads.set(key, loading);\n return loading;\n}\n\nfunction rangeContains(range: string, codePoint: number): boolean {\n for (const token of range.split(\",\")) {\n const [startText, endText = startText] = token.trim().slice(2).split(\"-\");\n const start = Number.parseInt(startText ?? \"\", 16);\n const end = Number.parseInt(endText ?? \"\", 16);\n if (Number.isFinite(start) && codePoint >= start && codePoint <= end) return true;\n }\n return false;\n}\n"],"mappings":";;;AACA,OAAO,mBAAmB;AAC1B,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AAEpB,IAAM,WAAmC;AAAA,EACvC,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AACA,IAAM,QAAQ,oBAAI,IAA2B;AAE7C,eAAsB,eAAe,MAA6B;AAChE,QAAM,WAAW,oBAAI,IAAY;AACjC,aAAW,aAAa,MAAM;AAC5B,UAAM,YAAY,UAAU,YAAY,CAAC;AACzC,QAAI,cAAc,OAAW;AAC7B,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,aAAa,GAAG;AACxD,UAAI,CAAC,SAAS,GAAG,EAAG;AACpB,UAAI,cAAc,OAAO,SAAS,GAAG;AACnC,iBAAS,IAAI,GAAG;AAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAE,IAAI,SAAS,CAAC;AAChD;AAEA,SAAS,UAAU,KAA4B;AAC7C,QAAM,WAAW,MAAM,IAAI,GAAG;AAC9B,MAAI,SAAU,QAAO;AACrB,QAAM,MAAM,SAAS,GAAG;AACxB,QAAM,eAAgB,cAAyC,GAAG;AAClE,MAAI,CAAC,OAAO,CAAC,aAAc,OAAM,IAAI,MAAM,8BAA8B,GAAG,EAAE;AAC9E,QAAM,UAAU,IAAI;AAAA,IAClB;AAAA,IACA,QAAQ,GAAG;AAAA,IACX,EAAE,OAAO,UAAU,QAAQ,WAAW,aAAa;AAAA,EACrD,EACG,KAAK,EACL,KAAK,CAAC,SAAS;AACd,aAAS,MAAM,IAAI,IAAI;AAAA,EACzB,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,UAAM,OAAO,GAAG;AAChB,UAAM;AAAA,EACR,CAAC;AACH,QAAM,IAAI,KAAK,OAAO;AACtB,SAAO;AACT;AAEA,SAAS,cAAc,OAAe,WAA4B;AAChE,aAAW,SAAS,MAAM,MAAM,GAAG,GAAG;AACpC,UAAM,CAAC,WAAW,UAAU,SAAS,IAAI,MAAM,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;AACxE,UAAM,QAAQ,OAAO,SAAS,aAAa,IAAI,EAAE;AACjD,UAAM,MAAM,OAAO,SAAS,WAAW,IAAI,EAAE;AAC7C,QAAI,OAAO,SAAS,KAAK,KAAK,aAAa,SAAS,aAAa,IAAK,QAAO;AAAA,EAC/E;AACA,SAAO;AACT;","names":[]}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  export type OlderHistoryLoadReceipt = Promise<boolean> & {
10
10
  readonly committed: boolean;
11
+ readonly tailPreserved?: boolean;
11
12
  };
12
13
  /**
13
14
  * Source-compatible public callback accepted by MessageTimeline.
@@ -20,10 +21,10 @@ export type OlderHistoryLoadReceipt = Promise<boolean> & {
20
21
  export type OlderHistoryLoader = () => unknown;
21
22
  type OlderHistoryReceiptCapture = (receipt: OlderHistoryLoadReceipt) => void;
22
23
  /** Bind a receipt before a synchronous forwarding stack can publish state. */
23
- export declare function invokeOlderHistoryLoaderWithReceiptCapture(load: OlderHistoryLoader, capture: OlderHistoryReceiptCapture): unknown;
24
+ export declare function invokeOlderHistoryLoaderWithReceiptCapture(load: OlderHistoryLoader, capture: OlderHistoryReceiptCapture, preserveTail?: boolean): unknown;
24
25
  /**
25
26
  * Build an await-compatible older-history receipt for custom timeline hosts.
26
27
  * Call `markCommitted` immediately before publishing an accepted older window.
27
28
  */
28
- export declare function createOlderHistoryLoadReceipt(load: (markCommitted: () => void) => boolean | Promise<boolean>): OlderHistoryLoadReceipt;
29
+ export declare function createOlderHistoryLoadReceipt(load: (markCommitted: () => void, preserveTail: boolean, markTailPreserved: () => void) => boolean | Promise<boolean>): OlderHistoryLoadReceipt;
29
30
  export {};
@@ -0,0 +1,32 @@
1
+ import type { AccessContext, AccountGrant, Workspace } from "@opengeni/sdk";
2
+ export type OrgOption = {
3
+ accountId: string;
4
+ label: string;
5
+ /** Whether the subject has the owner/admin authority required by organization settings. */
6
+ canManage: boolean;
7
+ };
8
+ /** Organizations the subject administers (owner or admin), sorted by id. */
9
+ export declare function organizationAdministrationAccountIds(accessContext: AccessContext): string[];
10
+ /** A short, stable id fragment for an account that has no human name. */
11
+ export declare function shortAccountId(accountId: string): string;
12
+ /** The organization's real name, or null when the API sent none. */
13
+ export declare function orgName(accountId: string, grants: AccountGrant[]): string | null;
14
+ /** Human label for an organization: the grant's subjectLabel, else a short id. */
15
+ export declare function orgLabel(accountId: string, grants: AccountGrant[]): string;
16
+ /**
17
+ * The organizations the subject belongs to, in a stable order (default org
18
+ * first, then by name). Derived from account grants, unioned with the accounts
19
+ * that own the accessible workspaces so an org always shows even without an
20
+ * explicit grant.
21
+ */
22
+ export declare function organizationsForSubject(context: AccessContext, workspaces: Workspace[]): OrgOption[];
23
+ /** Workspaces that belong to a given organization, ordered by name. */
24
+ export declare function workspacesInOrg(workspaces: Workspace[], accountId: string): Workspace[];
25
+ /** Organization settings remain anchored to an accessible workspace in that organization. */
26
+ export declare function organizationSettingsWorkspaceId(workspaces: Workspace[], accountId: string, activeWorkspaceId: string): string | null;
27
+ /**
28
+ * Where switching to an organization lands: the workspace last used there
29
+ * while it is still open to the person, else its first shared workspace, else
30
+ * their Personal workspace there. Null when nothing in it is open to them.
31
+ */
32
+ export declare function organizationLandingWorkspaceId(workspaces: Workspace[], accountId: string, rememberedWorkspaceId?: string | null): string | null;
@@ -0,0 +1,65 @@
1
+ "use client";
2
+
3
+ // src/organization-model.ts
4
+ function organizationAdministrationAccountIds(accessContext) {
5
+ return accessContext.accountGrants.filter(
6
+ (grant) => grant.subjectId === accessContext.subjectId && (grant.role === "owner" || grant.role === "admin")
7
+ ).map((grant) => grant.accountId).sort();
8
+ }
9
+ function shortAccountId(accountId) {
10
+ return accountId.length > 8 ? accountId.slice(0, 8) : accountId;
11
+ }
12
+ function orgName(accountId, grants) {
13
+ const grant = grants.find((candidate) => candidate.accountId === accountId);
14
+ const label = grant?.metadata && typeof grant.metadata.accountName === "string" ? grant.metadata.accountName : void 0;
15
+ return label?.trim() || null;
16
+ }
17
+ function orgLabel(accountId, grants) {
18
+ return orgName(accountId, grants) ?? `Org ${shortAccountId(accountId)}`;
19
+ }
20
+ function organizationsForSubject(context, workspaces) {
21
+ const administeredIds = new Set(organizationAdministrationAccountIds(context));
22
+ const ids = /* @__PURE__ */ new Set();
23
+ for (const grant of context.accountGrants) {
24
+ ids.add(grant.accountId);
25
+ }
26
+ for (const workspace of workspaces) {
27
+ ids.add(workspace.accountId);
28
+ }
29
+ const options = [...ids].map((accountId) => ({
30
+ accountId,
31
+ label: orgLabel(accountId, context.accountGrants),
32
+ canManage: administeredIds.has(accountId)
33
+ }));
34
+ return options.sort((a, b) => {
35
+ if (a.accountId === context.defaultAccountId) {
36
+ return -1;
37
+ }
38
+ if (b.accountId === context.defaultAccountId) {
39
+ return 1;
40
+ }
41
+ return a.label.localeCompare(b.label) || a.accountId.localeCompare(b.accountId);
42
+ });
43
+ }
44
+ function workspacesInOrg(workspaces, accountId) {
45
+ return workspaces.filter((workspace) => workspace.accountId === accountId).sort((a, b) => a.name.localeCompare(b.name));
46
+ }
47
+ function organizationSettingsWorkspaceId(workspaces, accountId, activeWorkspaceId) {
48
+ const candidates = workspacesInOrg(workspaces, accountId);
49
+ return candidates.find((workspace) => workspace.id === activeWorkspaceId)?.id ?? candidates[0]?.id ?? null;
50
+ }
51
+ function organizationLandingWorkspaceId(workspaces, accountId, rememberedWorkspaceId) {
52
+ const candidates = workspacesInOrg(workspaces, accountId);
53
+ return candidates.find((workspace) => workspace.id === rememberedWorkspaceId)?.id ?? candidates.find((workspace) => workspace.kind !== "personal")?.id ?? candidates[0]?.id ?? null;
54
+ }
55
+ export {
56
+ orgLabel,
57
+ orgName,
58
+ organizationAdministrationAccountIds,
59
+ organizationLandingWorkspaceId,
60
+ organizationSettingsWorkspaceId,
61
+ organizationsForSubject,
62
+ shortAccountId,
63
+ workspacesInOrg
64
+ };
65
+ //# sourceMappingURL=organization-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/organization-model.ts"],"sourcesContent":["// Pure organization and workspace selection rules shared by the web rail's\n// switcher and native renderers. The wire model has no account *name*, so a\n// display label is derived from the access grant — preferring the account\n// name, falling back to a short, stable id fragment. No DOM, no React.\nimport type { AccessContext, AccountGrant, Workspace } from \"@opengeni/sdk\";\n\nexport type OrgOption = {\n accountId: string;\n label: string;\n /** Whether the subject has the owner/admin authority required by organization settings. */\n canManage: boolean;\n};\n\n/** Organizations the subject administers (owner or admin), sorted by id. */\nexport function organizationAdministrationAccountIds(accessContext: AccessContext): string[] {\n return accessContext.accountGrants\n .filter(\n (grant) =>\n grant.subjectId === accessContext.subjectId &&\n (grant.role === \"owner\" || grant.role === \"admin\"),\n )\n .map((grant) => grant.accountId)\n .sort();\n}\n\n/** A short, stable id fragment for an account that has no human name. */\nexport function shortAccountId(accountId: string): string {\n return accountId.length > 8 ? accountId.slice(0, 8) : accountId;\n}\n\n/** The organization's real name, or null when the API sent none. */\nexport function orgName(accountId: string, grants: AccountGrant[]): string | null {\n const grant = grants.find((candidate) => candidate.accountId === accountId);\n const label =\n grant?.metadata && typeof grant.metadata.accountName === \"string\"\n ? grant.metadata.accountName\n : undefined;\n return label?.trim() || null;\n}\n\n/** Human label for an organization: the grant's subjectLabel, else a short id. */\nexport function orgLabel(accountId: string, grants: AccountGrant[]): string {\n return orgName(accountId, grants) ?? `Org ${shortAccountId(accountId)}`;\n}\n\n/**\n * The organizations the subject belongs to, in a stable order (default org\n * first, then by name). Derived from account grants, unioned with the accounts\n * that own the accessible workspaces so an org always shows even without an\n * explicit grant.\n */\nexport function organizationsForSubject(\n context: AccessContext,\n workspaces: Workspace[],\n): OrgOption[] {\n const administeredIds = new Set(organizationAdministrationAccountIds(context));\n const ids = new Set<string>();\n for (const grant of context.accountGrants) {\n ids.add(grant.accountId);\n }\n for (const workspace of workspaces) {\n ids.add(workspace.accountId);\n }\n const options = [...ids].map((accountId) => ({\n accountId,\n label: orgLabel(accountId, context.accountGrants),\n canManage: administeredIds.has(accountId),\n }));\n return options.sort((a, b) => {\n if (a.accountId === context.defaultAccountId) {\n return -1;\n }\n if (b.accountId === context.defaultAccountId) {\n return 1;\n }\n return a.label.localeCompare(b.label) || a.accountId.localeCompare(b.accountId);\n });\n}\n\n/** Workspaces that belong to a given organization, ordered by name. */\nexport function workspacesInOrg(workspaces: Workspace[], accountId: string): Workspace[] {\n return workspaces\n .filter((workspace) => workspace.accountId === accountId)\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/** Organization settings remain anchored to an accessible workspace in that organization. */\nexport function organizationSettingsWorkspaceId(\n workspaces: Workspace[],\n accountId: string,\n activeWorkspaceId: string,\n): string | null {\n const candidates = workspacesInOrg(workspaces, accountId);\n return (\n candidates.find((workspace) => workspace.id === activeWorkspaceId)?.id ??\n candidates[0]?.id ??\n null\n );\n}\n\n/**\n * Where switching to an organization lands: the workspace last used there\n * while it is still open to the person, else its first shared workspace, else\n * their Personal workspace there. Null when nothing in it is open to them.\n */\nexport function organizationLandingWorkspaceId(\n workspaces: Workspace[],\n accountId: string,\n rememberedWorkspaceId?: string | null,\n): string | null {\n const candidates = workspacesInOrg(workspaces, accountId);\n return (\n candidates.find((workspace) => workspace.id === rememberedWorkspaceId)?.id ??\n candidates.find((workspace) => workspace.kind !== \"personal\")?.id ??\n candidates[0]?.id ??\n null\n );\n}\n"],"mappings":";;;AAcO,SAAS,qCAAqC,eAAwC;AAC3F,SAAO,cAAc,cAClB;AAAA,IACC,CAAC,UACC,MAAM,cAAc,cAAc,cACjC,MAAM,SAAS,WAAW,MAAM,SAAS;AAAA,EAC9C,EACC,IAAI,CAAC,UAAU,MAAM,SAAS,EAC9B,KAAK;AACV;AAGO,SAAS,eAAe,WAA2B;AACxD,SAAO,UAAU,SAAS,IAAI,UAAU,MAAM,GAAG,CAAC,IAAI;AACxD;AAGO,SAAS,QAAQ,WAAmB,QAAuC;AAChF,QAAM,QAAQ,OAAO,KAAK,CAAC,cAAc,UAAU,cAAc,SAAS;AAC1E,QAAM,QACJ,OAAO,YAAY,OAAO,MAAM,SAAS,gBAAgB,WACrD,MAAM,SAAS,cACf;AACN,SAAO,OAAO,KAAK,KAAK;AAC1B;AAGO,SAAS,SAAS,WAAmB,QAAgC;AAC1E,SAAO,QAAQ,WAAW,MAAM,KAAK,OAAO,eAAe,SAAS,CAAC;AACvE;AAQO,SAAS,wBACd,SACA,YACa;AACb,QAAM,kBAAkB,IAAI,IAAI,qCAAqC,OAAO,CAAC;AAC7E,QAAM,MAAM,oBAAI,IAAY;AAC5B,aAAW,SAAS,QAAQ,eAAe;AACzC,QAAI,IAAI,MAAM,SAAS;AAAA,EACzB;AACA,aAAW,aAAa,YAAY;AAClC,QAAI,IAAI,UAAU,SAAS;AAAA,EAC7B;AACA,QAAM,UAAU,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,eAAe;AAAA,IAC3C;AAAA,IACA,OAAO,SAAS,WAAW,QAAQ,aAAa;AAAA,IAChD,WAAW,gBAAgB,IAAI,SAAS;AAAA,EAC1C,EAAE;AACF,SAAO,QAAQ,KAAK,CAAC,GAAG,MAAM;AAC5B,QAAI,EAAE,cAAc,QAAQ,kBAAkB;AAC5C,aAAO;AAAA,IACT;AACA,QAAI,EAAE,cAAc,QAAQ,kBAAkB;AAC5C,aAAO;AAAA,IACT;AACA,WAAO,EAAE,MAAM,cAAc,EAAE,KAAK,KAAK,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,EAChF,CAAC;AACH;AAGO,SAAS,gBAAgB,YAAyB,WAAgC;AACvF,SAAO,WACJ,OAAO,CAAC,cAAc,UAAU,cAAc,SAAS,EACvD,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAChD;AAGO,SAAS,gCACd,YACA,WACA,mBACe;AACf,QAAM,aAAa,gBAAgB,YAAY,SAAS;AACxD,SACE,WAAW,KAAK,CAAC,cAAc,UAAU,OAAO,iBAAiB,GAAG,MACpE,WAAW,CAAC,GAAG,MACf;AAEJ;AAOO,SAAS,+BACd,YACA,WACA,uBACe;AACf,QAAM,aAAa,gBAAgB,YAAY,SAAS;AACxD,SACE,WAAW,KAAK,CAAC,cAAc,UAAU,OAAO,qBAAqB,GAAG,MACxE,WAAW,KAAK,CAAC,cAAc,UAAU,SAAS,UAAU,GAAG,MAC/D,WAAW,CAAC,GAAG,MACf;AAEJ;","names":[]}
@@ -1,3 +1,11 @@
1
+ "use client";
2
+ import {
3
+ STARTUP_WAIT_TITLES,
4
+ sandboxRowTitle,
5
+ startupDuration,
6
+ startupPhaseTitle
7
+ } from "./chunk-CORUP6JB.js";
8
+
1
9
  // src/timeline/platform-activity-row.tsx
2
10
  function PlatformActivityRow({
3
11
  item,
@@ -6,7 +14,6 @@ function PlatformActivityRow({
6
14
  t: displayName,
7
15
  b: BotIcon,
8
16
  m: Markdown,
9
- r: truncate,
10
17
  j,
11
18
  s
12
19
  }) {
@@ -19,7 +26,11 @@ function PlatformActivityRow({
19
26
  children: "Thought"
20
27
  }),
21
28
  running: item.streaming,
22
- preview: truncate(item.text, 110),
29
+ compactPreview: item.text.replace(/\*\*|__|`/g, "").replace(/\s+/g, " "),
30
+ preview: j("span", {
31
+ className: "og-reasoning-preview",
32
+ children: j(Markdown, { streaming: item.streaming, children: item.text })
33
+ }),
23
34
  children: j("div", {
24
35
  className: "text-og-base leading-6 text-og-fg-muted [&_strong]:text-og-fg-muted",
25
36
  children: j(Markdown, { streaming: item.streaming, children: item.text })
@@ -47,8 +58,8 @@ function PlatformActivityRow({
47
58
  return j(ActivityDisclosure, {
48
59
  icon: j(BotIcon, { className: "size-3.5" }),
49
60
  iconTone: failed ? "failed" : running ? "running" : "muted",
50
- title: startupPhaseTitle(item.phase, item.status, item.outcome),
51
- preview: item.phase === "model_preparation" ? "Includes overlapping sandbox, rig, repository, and runtime setup shown below." : void 0,
61
+ title: item.blockedReason ? STARTUP_WAIT_TITLES[item.blockedReason] : startupPhaseTitle(item.phase, item.status, item.outcome),
62
+ preview: item.phase === "model_preparation" ? "Includes overlapping sandbox startup, custom environment setup, repository preparation, and runtime setup shown below." : void 0,
52
63
  running,
53
64
  failed,
54
65
  cancelled: item.status === "cancelled",
@@ -90,80 +101,7 @@ function lucideIcon(j, s, name, children) {
90
101
  children
91
102
  });
92
103
  }
93
- function sandboxRowTitle(item, displayName) {
94
- if (item.name === "sandbox.provision") {
95
- return startupPhaseTitle(
96
- "sandbox",
97
- item.status === "cancelled" ? "complete" : item.status,
98
- item.origin ?? null
99
- );
100
- }
101
- return displayName(item.name);
102
- }
103
- function startupPhaseTitle(phase, status, outcome) {
104
- if (status === "complete" && phase === "sandbox" && outcome && outcome !== "skipped") {
105
- return `Sandbox ${outcome === "resumed" ? "reattached" : outcome}`;
106
- }
107
- if (status === "complete" && phase === "rig" && outcome === "skipped") {
108
- return "Rig already ready";
109
- }
110
- const statusIndex = status === "running" ? 0 : status === "failed" ? 1 : status === "cancelled" ? 2 : 3;
111
- return STARTUP_PHASE_TITLES[phase][statusIndex];
112
- }
113
- var STARTUP_PHASE_TITLES = {
114
- queue: [
115
- "Waiting for a worker",
116
- "Worker startup failed",
117
- "Worker wait interrupted",
118
- "Worker started"
119
- ],
120
- sandbox: [
121
- "Starting sandbox",
122
- "Sandbox didn\u2019t start",
123
- "Sandbox startup interrupted",
124
- "Sandbox ready"
125
- ],
126
- rig: ["Setting up rig", "Rig setup failed", "Rig setup interrupted", "Rig ready"],
127
- repository: [
128
- "Preparing repository",
129
- "Repository preparation failed",
130
- "Repository preparation interrupted",
131
- "Repository ready"
132
- ],
133
- files: [
134
- "Preparing files",
135
- "File preparation failed",
136
- "File preparation interrupted",
137
- "Files ready"
138
- ],
139
- tools: [
140
- "Connecting tools",
141
- "Tool connection failed",
142
- "Tool connection interrupted",
143
- "Tools ready"
144
- ],
145
- model_preparation: [
146
- "Preparing runtime and model request",
147
- "Runtime/model preparation failed",
148
- "Runtime/model preparation interrupted",
149
- "Model request dispatched"
150
- ],
151
- provider_first_byte: [
152
- "Waiting for model",
153
- "Model didn\u2019t respond",
154
- "Model wait interrupted",
155
- "Model started responding"
156
- ]
157
- };
158
- function startupDuration(durationMs) {
159
- if (durationMs === null || !Number.isFinite(durationMs) || durationMs < 0) return null;
160
- if (durationMs < 1e3) return `${Math.round(durationMs)}ms`;
161
- if (durationMs < 6e4) return `${(durationMs / 1e3).toFixed(1)}s`;
162
- const minutes = Math.floor(durationMs / 6e4);
163
- const seconds = Math.round(durationMs % 6e4 / 1e3);
164
- return `${minutes}m ${String(seconds).padStart(2, "0")}s`;
165
- }
166
104
  export {
167
105
  PlatformActivityRow as default
168
106
  };
169
- //# sourceMappingURL=platform-activity-row-BJHUHXAT.js.map
107
+ //# sourceMappingURL=platform-activity-row-5OCKOQWZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/timeline/platform-activity-row.tsx"],"sourcesContent":["import {\n sandboxRowTitle,\n startupDuration,\n startupPhaseTitle,\n STARTUP_WAIT_TITLES,\n} from \"./platform-activity-presentation\";\nimport type { ReasoningItem, SandboxItem, StartupPhaseItem } from \"./types\";\n\ntype RowJsx = typeof import(\"react/jsx-runtime\").jsx;\ntype RowJsxs = typeof import(\"react/jsx-runtime\").jsxs;\n\nexport default function PlatformActivityRow({\n item,\n d: ActivityDisclosure,\n p: PayloadBlock,\n t: displayName,\n b: BotIcon,\n m: Markdown,\n j,\n s,\n}: {\n item: ReasoningItem | SandboxItem | StartupPhaseItem;\n d: typeof import(\"./shared\").ActivityDisclosure;\n p: typeof import(\"./shared\").PayloadBlock;\n t: (name: string) => string;\n b: typeof import(\"lucide-react\").BotIcon;\n m: typeof import(\"../components/markdown\").Markdown;\n j: RowJsx;\n s: RowJsxs;\n}) {\n if (item.kind === \"reasoning\") {\n return j(ActivityDisclosure, {\n icon: brainIcon(j, s),\n iconTone: \"muted\",\n title: item.streaming\n ? \"Thinking\"\n : j(\"span\", {\n className: \"font-normal italic text-og-fg-subtle\",\n children: \"Thought\",\n }),\n running: item.streaming,\n compactPreview: item.text.replace(/\\*\\*|__|`/g, \"\").replace(/\\s+/g, \" \"),\n preview: j(\"span\", {\n className: \"og-reasoning-preview\",\n children: j(Markdown, { streaming: item.streaming, children: item.text }),\n }),\n children: j(\"div\", {\n className: \"text-og-base leading-6 text-og-fg-muted [&_strong]:text-og-fg-muted\",\n children: j(Markdown, { streaming: item.streaming, children: item.text }),\n }),\n });\n }\n if (item.kind === \"sandbox\") {\n return s(ActivityDisclosure, {\n icon: terminalIcon(j, s),\n iconTone:\n item.status === \"failed\" ? \"failed\" : item.status === \"running\" ? \"running\" : \"muted\",\n title: sandboxRowTitle(item, displayName),\n running: item.status === \"running\",\n failed: item.status === \"failed\",\n cancelled: item.status === \"cancelled\",\n preview: item.command ?? undefined,\n children: [\n item.command ? j(PayloadBlock, { label: \"Command\", value: item.command }, \"command\") : null,\n item.output ? j(PayloadBlock, { label: \"Output\", value: item.output }, \"output\") : null,\n ],\n });\n }\n\n const failed = item.status === \"failed\";\n const running = item.status === \"running\";\n const duration = startupDuration(item.durationMs);\n return j(ActivityDisclosure, {\n icon: j(BotIcon, { className: \"size-3.5\" }),\n iconTone: failed ? \"failed\" : running ? \"running\" : \"muted\",\n title: item.blockedReason\n ? STARTUP_WAIT_TITLES[item.blockedReason]\n : startupPhaseTitle(item.phase, item.status, item.outcome),\n preview:\n item.phase === \"model_preparation\"\n ? \"Includes overlapping sandbox startup, custom environment setup, repository preparation, and runtime setup shown below.\"\n : undefined,\n running,\n failed,\n cancelled: item.status === \"cancelled\",\n chip: duration ? { tone: failed ? \"bad\" : \"muted\", text: duration } : undefined,\n expandable: false,\n });\n}\n\nfunction brainIcon(j: RowJsx, s: RowJsxs) {\n return lucideIcon(j, s, \"brain\", [\n j(\"path\", { d: \"M 12 18V5\" }, \"spine\"),\n j(\"path\", { d: \"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\" }, \"center\"),\n j(\"path\", { d: \"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\" }, \"top\"),\n j(\"path\", { d: \"M17.997 5.125a4 4 0 0 1 2.526 5.77\" }, \"upper-right\"),\n j(\"path\", { d: \"M18 18a4 4 0 0 0 2-7.464\" }, \"right\"),\n j(\"path\", { d: \"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\" }, \"base\"),\n j(\"path\", { d: \"M6 18a4 4 0 0 1-2-7.464\" }, \"left\"),\n j(\"path\", { d: \"M6.003 5.125a4 4 0 0 0-2.526 5.77\" }, \"upper-left\"),\n ]);\n}\n\nfunction terminalIcon(j: RowJsx, s: RowJsxs) {\n return lucideIcon(j, s, \"square-terminal\", [\n j(\"path\", { d: \"m7 11 2-2-2-2\" }, \"prompt\"),\n j(\"path\", { d: \"M11 13h4\" }, \"cursor\"),\n j(\"rect\", { width: 18, height: 18, x: 3, y: 3, rx: 2, ry: 2 }, \"frame\"),\n ]);\n}\n\nfunction lucideIcon(j: RowJsx, s: RowJsxs, name: string, children: ReturnType<RowJsx>[]) {\n return s(\"svg\", {\n \"aria-hidden\": \"true\",\n className: `lucide lucide-${name} size-3.5`,\n fill: \"none\",\n height: 24,\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n viewBox: \"0 0 24 24\",\n width: 24,\n children,\n });\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,14 @@
1
+ import { type PluginDiscoveryItem } from "@opengeni/sdk";
2
+ /** Embeddable plugin overview. Hosts own the dialog and installation actions. */
3
+ export declare function PluginDetails({ item, onInstall, busy, installed, error, connections, onConnect, }: {
4
+ item: PluginDiscoveryItem;
5
+ onInstall?: () => void;
6
+ busy?: boolean;
7
+ installed?: boolean;
8
+ error?: string | null;
9
+ connections?: Record<string, boolean>;
10
+ onConnect?: (server: {
11
+ name: string;
12
+ endpoint: string | null;
13
+ }) => void;
14
+ }): import("react").JSX.Element;