@opengeni/react 1.4.0 → 1.4.4

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 (218) hide show
  1. package/README.md +8 -0
  2. package/dist/accounts.js +2 -0
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/artifacts-document.js +5 -4
  5. package/dist/artifacts-presentation.js +5 -4
  6. package/dist/artifacts-spreadsheet.js +4 -3
  7. package/dist/artifacts.js +14 -13
  8. package/dist/artifacts.js.map +1 -1
  9. package/dist/browser-viewer-5EEAS3IU.js +17 -0
  10. package/dist/chat-interactive-block-ZFHOKTMS.js +12 -0
  11. package/dist/{chunk-WEHMPOXK.js → chunk-2DDJ6YH6.js} +3 -1
  12. package/dist/{chunk-WEHMPOXK.js.map → chunk-2DDJ6YH6.js.map} +1 -1
  13. package/dist/{chunk-C5X5AJXK.js → chunk-2HVLQ26H.js} +5 -4
  14. package/dist/{chunk-C5X5AJXK.js.map → chunk-2HVLQ26H.js.map} +1 -1
  15. package/dist/{chunk-HDJWDK7W.js → chunk-2OQA3CPB.js} +300 -166
  16. package/dist/{chunk-HDJWDK7W.js.map → chunk-2OQA3CPB.js.map} +1 -1
  17. package/dist/{chunk-A4UJB2MM.js → chunk-32CGLXW2.js} +4 -3
  18. package/dist/{chunk-A4UJB2MM.js.map → chunk-32CGLXW2.js.map} +1 -1
  19. package/dist/{chunk-5CVXZA3Y.js → chunk-45NUOSXQ.js} +3 -2
  20. package/dist/{chunk-5CVXZA3Y.js.map → chunk-45NUOSXQ.js.map} +1 -1
  21. package/dist/{chunk-WUISZ3WU.js → chunk-53KJBGPZ.js} +5 -4
  22. package/dist/{chunk-WUISZ3WU.js.map → chunk-53KJBGPZ.js.map} +1 -1
  23. package/dist/{chunk-MBMPHOMA.js → chunk-55DXD22O.js} +3 -2
  24. package/dist/{chunk-MBMPHOMA.js.map → chunk-55DXD22O.js.map} +1 -1
  25. package/dist/{chunk-JT4JW7BC.js → chunk-5I4VRWBB.js} +3 -1
  26. package/dist/{chunk-JT4JW7BC.js.map → chunk-5I4VRWBB.js.map} +1 -1
  27. package/dist/{chunk-UK4TINKT.js → chunk-B27E3V37.js} +3 -1
  28. package/dist/{chunk-UK4TINKT.js.map → chunk-B27E3V37.js.map} +1 -1
  29. package/dist/{chunk-J6DBS4T3.js → chunk-BNKV5ZLF.js} +5 -4
  30. package/dist/{chunk-J6DBS4T3.js.map → chunk-BNKV5ZLF.js.map} +1 -1
  31. package/dist/{chunk-YM2DE7BQ.js → chunk-C5BF4L26.js} +13 -12
  32. package/dist/{chunk-YM2DE7BQ.js.map → chunk-C5BF4L26.js.map} +1 -1
  33. package/dist/{chunk-YBXQDQFX.js → chunk-C7CMD56T.js} +6 -5
  34. package/dist/{chunk-YBXQDQFX.js.map → chunk-C7CMD56T.js.map} +1 -1
  35. package/dist/{chunk-UGLEYEMP.js → chunk-CM7LVUKC.js} +3 -1
  36. package/dist/{chunk-UGLEYEMP.js.map → chunk-CM7LVUKC.js.map} +1 -1
  37. package/dist/{chunk-JVYQRRC4.js → chunk-CVYCLFMH.js} +3 -1
  38. package/dist/{chunk-JVYQRRC4.js.map → chunk-CVYCLFMH.js.map} +1 -1
  39. package/dist/{chunk-LJ2UTJJE.js → chunk-EAOSEIXB.js} +182 -97
  40. package/dist/chunk-EAOSEIXB.js.map +1 -0
  41. package/dist/{chunk-Y2PRMYLC.js → chunk-G3U2A6GS.js} +3 -2
  42. package/dist/{chunk-Y2PRMYLC.js.map → chunk-G3U2A6GS.js.map} +1 -1
  43. package/dist/{chunk-WZMYFJD3.js → chunk-G6YRCIYJ.js} +16 -7
  44. package/dist/{chunk-WZMYFJD3.js.map → chunk-G6YRCIYJ.js.map} +1 -1
  45. package/dist/{chunk-B3V6TG77.js → chunk-GC3PH6N7.js} +3 -1
  46. package/dist/{chunk-B3V6TG77.js.map → chunk-GC3PH6N7.js.map} +1 -1
  47. package/dist/{chunk-CJUO7J5Z.js → chunk-HXYOSSQO.js} +3 -2
  48. package/dist/{chunk-CJUO7J5Z.js.map → chunk-HXYOSSQO.js.map} +1 -1
  49. package/dist/{chunk-GYVRFZDY.js → chunk-I6OY3MWC.js} +310 -115
  50. package/dist/chunk-I6OY3MWC.js.map +1 -0
  51. package/dist/{chunk-BRM6FVZA.js → chunk-IEE7WCLN.js} +4 -3
  52. package/dist/{chunk-BRM6FVZA.js.map → chunk-IEE7WCLN.js.map} +1 -1
  53. package/dist/{chunk-DYWBUX5Q.js → chunk-IMSUVYQB.js} +6 -5
  54. package/dist/{chunk-DYWBUX5Q.js.map → chunk-IMSUVYQB.js.map} +1 -1
  55. package/dist/{chunk-LN6TCXD3.js → chunk-IUHHPMAX.js} +184 -48
  56. package/dist/chunk-IUHHPMAX.js.map +1 -0
  57. package/dist/{chunk-SGKD2OCN.js → chunk-IYQCWGU5.js} +6 -5
  58. package/dist/{chunk-SGKD2OCN.js.map → chunk-IYQCWGU5.js.map} +1 -1
  59. package/dist/{chunk-J2QWVSQY.js → chunk-JH7V627O.js} +8 -7
  60. package/dist/{chunk-J2QWVSQY.js.map → chunk-JH7V627O.js.map} +1 -1
  61. package/dist/{chunk-EESD3PY3.js → chunk-JHTIMBOL.js} +6 -5
  62. package/dist/{chunk-EESD3PY3.js.map → chunk-JHTIMBOL.js.map} +1 -1
  63. package/dist/{chunk-LNIRAOA3.js → chunk-L2J3PU7A.js} +7 -6
  64. package/dist/{chunk-LNIRAOA3.js.map → chunk-L2J3PU7A.js.map} +1 -1
  65. package/dist/{chunk-ZYRGEKWS.js → chunk-LJUMYUBO.js} +3 -1
  66. package/dist/{chunk-ZYRGEKWS.js.map → chunk-LJUMYUBO.js.map} +1 -1
  67. package/dist/{chunk-4RVYOY4O.js → chunk-LSW2OJVV.js} +4 -3
  68. package/dist/{chunk-4RVYOY4O.js.map → chunk-LSW2OJVV.js.map} +1 -1
  69. package/dist/{chunk-UTRTG6LH.js → chunk-LVS3MH5T.js} +3 -1
  70. package/dist/{chunk-UTRTG6LH.js.map → chunk-LVS3MH5T.js.map} +1 -1
  71. package/dist/chunk-M357MHH3.js +2 -0
  72. package/dist/{chunk-WRHIZYZF.js → chunk-MEQM4LI3.js} +6 -5
  73. package/dist/{chunk-WRHIZYZF.js.map → chunk-MEQM4LI3.js.map} +1 -1
  74. package/dist/chunk-NX4ADH73.js +14 -0
  75. package/dist/chunk-NX4ADH73.js.map +1 -0
  76. package/dist/{chunk-XCHWDJ22.js → chunk-OGTTUYNT.js} +3 -1
  77. package/dist/{chunk-XCHWDJ22.js.map → chunk-OGTTUYNT.js.map} +1 -1
  78. package/dist/{chunk-GIMRELBW.js → chunk-OYQQJL3J.js} +3 -1
  79. package/dist/{chunk-GIMRELBW.js.map → chunk-OYQQJL3J.js.map} +1 -1
  80. package/dist/{chunk-RSI7XYXL.js → chunk-PBCZL4JP.js} +6 -5
  81. package/dist/{chunk-RSI7XYXL.js.map → chunk-PBCZL4JP.js.map} +1 -1
  82. package/dist/{chunk-I7IWRQLN.js → chunk-PHBFJCEU.js} +17 -11
  83. package/dist/chunk-PHBFJCEU.js.map +1 -0
  84. package/dist/{chunk-3CTRFMAK.js → chunk-PKCAYHDC.js} +5 -4
  85. package/dist/{chunk-3CTRFMAK.js.map → chunk-PKCAYHDC.js.map} +1 -1
  86. package/dist/{chunk-K3HQAKQX.js → chunk-PMV53IMM.js} +3 -1
  87. package/dist/{chunk-K3HQAKQX.js.map → chunk-PMV53IMM.js.map} +1 -1
  88. package/dist/{chunk-YQEAA6LT.js → chunk-QHUE7E4N.js} +3 -2
  89. package/dist/{chunk-YQEAA6LT.js.map → chunk-QHUE7E4N.js.map} +1 -1
  90. package/dist/{chunk-OA6HFRQP.js → chunk-QMMCJGFI.js} +4 -3
  91. package/dist/{chunk-OA6HFRQP.js.map → chunk-QMMCJGFI.js.map} +1 -1
  92. package/dist/{chunk-YV4L3ILF.js → chunk-QV3DJVRZ.js} +3 -1
  93. package/dist/{chunk-YV4L3ILF.js.map → chunk-QV3DJVRZ.js.map} +1 -1
  94. package/dist/{chunk-447JLCBU.js → chunk-S2QH6EZ5.js} +3 -1
  95. package/dist/{chunk-447JLCBU.js.map → chunk-S2QH6EZ5.js.map} +1 -1
  96. package/dist/{chunk-PNY3JKBJ.js → chunk-SFH43JT2.js} +5 -4
  97. package/dist/{chunk-PNY3JKBJ.js.map → chunk-SFH43JT2.js.map} +1 -1
  98. package/dist/{chunk-AWZLIMKX.js → chunk-T46QZH3E.js} +3 -1
  99. package/dist/{chunk-AWZLIMKX.js.map → chunk-T46QZH3E.js.map} +1 -1
  100. package/dist/{chunk-5J4FOW6Q.js → chunk-TNEZNMSN.js} +3 -1
  101. package/dist/{chunk-5J4FOW6Q.js.map → chunk-TNEZNMSN.js.map} +1 -1
  102. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  103. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  104. package/dist/{chunk-H5X55XH7.js → chunk-UDPH5SLV.js} +4 -3
  105. package/dist/{chunk-H5X55XH7.js.map → chunk-UDPH5SLV.js.map} +1 -1
  106. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  107. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  108. package/dist/{chunk-5F4WR7X7.js → chunk-XS67YG5R.js} +3 -1
  109. package/dist/{chunk-5F4WR7X7.js.map → chunk-XS67YG5R.js.map} +1 -1
  110. package/dist/{chunk-TKOTKRWY.js → chunk-XTD7TZHW.js} +3 -1
  111. package/dist/{chunk-TKOTKRWY.js.map → chunk-XTD7TZHW.js.map} +1 -1
  112. package/dist/{chunk-A2PI6UMY.js → chunk-YSRBFJMQ.js} +3 -1
  113. package/dist/{chunk-A2PI6UMY.js.map → chunk-YSRBFJMQ.js.map} +1 -1
  114. package/dist/chunk-YVFRBXST.js +1420 -0
  115. package/dist/chunk-YVFRBXST.js.map +1 -0
  116. package/dist/{chunk-SCOTPE2I.js → chunk-YYLBXXTE.js} +3 -1
  117. package/dist/{chunk-SCOTPE2I.js.map → chunk-YYLBXXTE.js.map} +1 -1
  118. package/dist/{chunk-RHREZ7BO.js → chunk-ZUWF4NF7.js} +3 -1
  119. package/dist/{chunk-RHREZ7BO.js.map → chunk-ZUWF4NF7.js.map} +1 -1
  120. package/dist/clipboard.js +3 -2
  121. package/dist/components/composer-transcription-control.d.ts +4 -0
  122. package/dist/components/session-conversation.d.ts +6 -0
  123. package/dist/composer-voice-events.d.ts +8 -0
  124. package/dist/composer.js +15 -13
  125. package/dist/computer-viewer-ELNLZGHI.js +20 -0
  126. package/dist/connect.js +15 -12
  127. package/dist/connect.js.map +1 -1
  128. package/dist/desktop.js +6 -5
  129. package/dist/desktop.js.map +1 -1
  130. package/dist/diffs.js +2 -1
  131. package/dist/diffs.js.map +1 -1
  132. package/dist/editor.js +4 -3
  133. package/dist/editor.js.map +1 -1
  134. package/dist/embedded-voice-NIL4RDX3.js +69 -0
  135. package/dist/embedded-voice-NIL4RDX3.js.map +1 -0
  136. package/dist/{fleet-decision-row-YZ3ZKWMM.js → fleet-decision-row-SI63O5V4.js} +3 -1
  137. package/dist/{fleet-decision-row-YZ3ZKWMM.js.map → fleet-decision-row-SI63O5V4.js.map} +1 -1
  138. package/dist/hooks/use-client-config-flags.d.ts +6 -0
  139. package/dist/hooks/use-computer-session.d.ts +2 -0
  140. package/dist/hooks/use-realtime-voice-models.d.ts +9 -0
  141. package/dist/hooks/use-voice-input.d.ts +8 -1
  142. package/dist/index.js +47 -45
  143. package/dist/index.js.map +1 -1
  144. package/dist/interaction.js +14 -13
  145. package/dist/interaction.js.map +1 -1
  146. package/dist/{latest-question-GPYM2JNU.js → latest-question-2POFPYNB.js} +5 -4
  147. package/dist/{latest-question-GPYM2JNU.js.map → latest-question-2POFPYNB.js.map} +1 -1
  148. package/dist/machines.js +8 -7
  149. package/dist/{markdown-table-layout-QXSLK4BY.js → markdown-table-layout-DQ4DRNVT.js} +3 -1
  150. package/dist/{markdown-table-layout-QXSLK4BY.js.map → markdown-table-layout-DQ4DRNVT.js.map} +1 -1
  151. package/dist/model-policy-picker-menu-WRNSRFQC.js +15 -0
  152. package/dist/model-policy.js +2 -1
  153. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  154. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  155. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  156. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  157. package/dist/{platform-activity-row-627BFZ46.js → platform-activity-row-PJJVATTZ.js} +3 -1
  158. package/dist/{platform-activity-row-627BFZ46.js.map → platform-activity-row-PJJVATTZ.js.map} +1 -1
  159. package/dist/{queue-surface-implementation-ZHFI5JBP.js → queue-surface-implementation-67FS7FUI.js} +10 -9
  160. package/dist/{queue-surface-implementation-ZHFI5JBP.js.map → queue-surface-implementation-67FS7FUI.js.map} +1 -1
  161. package/dist/realtime/embedded-voice.d.ts +20 -0
  162. package/dist/realtime.js +22 -1353
  163. package/dist/realtime.js.map +1 -1
  164. package/dist/sandbox-files-34CJJNOY.js +21 -0
  165. package/dist/session-ui.js +32 -30
  166. package/dist/session-ui.js.map +1 -1
  167. package/dist/session.js +10 -9
  168. package/dist/sites.js +2 -1
  169. package/dist/terminal.js +6 -5
  170. package/dist/terminal.js.map +1 -1
  171. package/dist/{timeline-annotation-markers-GNDHTGBD.js → timeline-annotation-markers-U3G66KUD.js} +5 -4
  172. package/dist/{timeline-annotation-markers-GNDHTGBD.js.map → timeline-annotation-markers-U3G66KUD.js.map} +1 -1
  173. package/dist/{timeline-annotation-selection-DMLMM2TX.js → timeline-annotation-selection-BI7QTPTZ.js} +4 -3
  174. package/dist/{timeline-annotation-selection-DMLMM2TX.js.map → timeline-annotation-selection-BI7QTPTZ.js.map} +1 -1
  175. package/dist/{timeline-annotations-dialog-ELRDBHTS.js → timeline-annotations-dialog-FOMHSDTE.js} +7 -6
  176. package/dist/{timeline-annotations-dialog-ELRDBHTS.js.map → timeline-annotations-dialog-FOMHSDTE.js.map} +1 -1
  177. package/dist/usage.js +6 -5
  178. package/dist/usage.js.map +1 -1
  179. package/dist/voice-recording-owner.d.ts +7 -0
  180. package/package.json +3 -3
  181. package/src/components/composer-transcription-control.tsx +109 -27
  182. package/src/components/computer-viewer.tsx +139 -30
  183. package/src/components/markdown.tsx +7 -2
  184. package/src/components/message-timeline.tsx +10 -1
  185. package/src/components/session-conversation.tsx +44 -0
  186. package/src/components/session-list.tsx +1 -1
  187. package/src/components/session-proxy-scope.tsx +26 -5
  188. package/src/composer-voice-events.ts +12 -0
  189. package/src/connection-discovery.tsx +4 -1
  190. package/src/hooks/use-browser-session.ts +445 -168
  191. package/src/hooks/use-client-config-flags.ts +8 -0
  192. package/src/hooks/use-computer-session.ts +334 -98
  193. package/src/hooks/use-goal.ts +12 -1
  194. package/src/hooks/use-realtime-voice-models.ts +67 -0
  195. package/src/hooks/use-voice-input.ts +109 -18
  196. package/src/realtime/embedded-voice.tsx +81 -0
  197. package/src/realtime/realtime-control.tsx +82 -17
  198. package/src/voice-recording-owner.ts +22 -0
  199. package/styles/compiled.css +77 -18
  200. package/styles/index.css +49 -0
  201. package/styles/responsive.css +61 -4
  202. package/styles/session-capability.css +1 -1
  203. package/dist/browser-viewer-SHYKQRNX.js +0 -16
  204. package/dist/chat-interactive-block-UGBTNB3L.js +0 -11
  205. package/dist/chunk-GYVRFZDY.js.map +0 -1
  206. package/dist/chunk-I7IWRQLN.js.map +0 -1
  207. package/dist/chunk-IWIDV7SB.js +0 -1
  208. package/dist/chunk-LJ2UTJJE.js.map +0 -1
  209. package/dist/chunk-LN6TCXD3.js.map +0 -1
  210. package/dist/computer-viewer-6SRGWRUX.js +0 -19
  211. package/dist/model-policy-picker-menu-DXHUL73H.js +0 -14
  212. package/dist/sandbox-files-GORZOUUJ.js +0 -20
  213. /package/dist/{browser-viewer-SHYKQRNX.js.map → browser-viewer-5EEAS3IU.js.map} +0 -0
  214. /package/dist/{chat-interactive-block-UGBTNB3L.js.map → chat-interactive-block-ZFHOKTMS.js.map} +0 -0
  215. /package/dist/{chunk-IWIDV7SB.js.map → chunk-M357MHH3.js.map} +0 -0
  216. /package/dist/{computer-viewer-6SRGWRUX.js.map → computer-viewer-ELNLZGHI.js.map} +0 -0
  217. /package/dist/{model-policy-picker-menu-DXHUL73H.js.map → model-policy-picker-menu-WRNSRFQC.js.map} +0 -0
  218. /package/dist/{sandbox-files-GORZOUUJ.js.map → sandbox-files-34CJJNOY.js.map} +0 -0
package/dist/desktop.js CHANGED
@@ -1,13 +1,14 @@
1
+ "use client";
1
2
  import {
2
3
  DesktopViewer,
3
4
  useDesktopStream
4
- } from "./chunk-DYWBUX5Q.js";
5
- import "./chunk-RHREZ7BO.js";
6
- import "./chunk-5J4FOW6Q.js";
5
+ } from "./chunk-IMSUVYQB.js";
6
+ import "./chunk-ZUWF4NF7.js";
7
+ import "./chunk-TNEZNMSN.js";
7
8
  import {
8
9
  registerDesktopViewer
9
- } from "./chunk-JT4JW7BC.js";
10
- import "./chunk-22KP6LR5.js";
10
+ } from "./chunk-5I4VRWBB.js";
11
+ import "./chunk-TXS65BB2.js";
11
12
 
12
13
  // src/desktop.ts
13
14
  async function loadDesktop() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/desktop.ts"],"sourcesContent":["import type { DesktopRfbFactory, DesktopRfbLike } from \"@opengeni/sdk\";\nimport { registerDesktopViewer } from \"./lib/workbench-peers\";\n\nexport { DesktopViewer } from \"./components/desktop-viewer\";\nexport type { DesktopViewerProps } from \"./components/desktop-viewer\";\nexport { useDesktopStream } from \"./hooks/use-desktop-stream\";\nexport type { UseDesktopStreamOptions, UseDesktopStreamResult } from \"./hooks/use-desktop-stream\";\nexport { registerDesktopViewer } from \"./lib/workbench-peers\";\n\nasync function loadDesktop(): Promise<DesktopRfbFactory> {\n const mod = (await import(\"@novnc/novnc\")) as unknown as {\n default: new (\n target: HTMLElement,\n url: string,\n options: Parameters<DesktopRfbFactory>[2],\n ) => DesktopRfbLike;\n };\n return (target, url, options) => new mod.default(target, url, options);\n}\n\n/** Opt in once on a VNC route; relay-frame viewers need no noVNC peer. */\nexport function enableDesktopViewer(): void {\n registerDesktopViewer(loadDesktop);\n}\n"],"mappings":";;;;;;;;;;;;AASA,eAAe,cAA0C;AACvD,QAAM,MAAO,MAAM,OAAO,cAAc;AAOxC,SAAO,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,QAAQ,QAAQ,KAAK,OAAO;AACvE;AAGO,SAAS,sBAA4B;AAC1C,wBAAsB,WAAW;AACnC;","names":[]}
1
+ {"version":3,"sources":["../src/desktop.ts"],"sourcesContent":["import type { DesktopRfbFactory, DesktopRfbLike } from \"@opengeni/sdk\";\nimport { registerDesktopViewer } from \"./lib/workbench-peers\";\n\nexport { DesktopViewer } from \"./components/desktop-viewer\";\nexport type { DesktopViewerProps } from \"./components/desktop-viewer\";\nexport { useDesktopStream } from \"./hooks/use-desktop-stream\";\nexport type { UseDesktopStreamOptions, UseDesktopStreamResult } from \"./hooks/use-desktop-stream\";\nexport { registerDesktopViewer } from \"./lib/workbench-peers\";\n\nasync function loadDesktop(): Promise<DesktopRfbFactory> {\n const mod = (await import(\"@novnc/novnc\")) as unknown as {\n default: new (\n target: HTMLElement,\n url: string,\n options: Parameters<DesktopRfbFactory>[2],\n ) => DesktopRfbLike;\n };\n return (target, url, options) => new mod.default(target, url, options);\n}\n\n/** Opt in once on a VNC route; relay-frame viewers need no noVNC peer. */\nexport function enableDesktopViewer(): void {\n registerDesktopViewer(loadDesktop);\n}\n"],"mappings":";;;;;;;;;;;;;AASA,eAAe,cAA0C;AACvD,QAAM,MAAO,MAAM,OAAO,cAAc;AAOxC,SAAO,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,QAAQ,QAAQ,KAAK,OAAO;AACvE;AAGO,SAAS,sBAA4B;AAC1C,wBAAsB,WAAW;AACnC;","names":[]}
package/dist/diffs.js CHANGED
@@ -1,6 +1,7 @@
1
+ "use client";
1
2
  import {
2
3
  registerPierreDiffs
3
- } from "./chunk-A2PI6UMY.js";
4
+ } from "./chunk-YSRBFJMQ.js";
4
5
 
5
6
  // src/diffs.ts
6
7
  function enablePierreDiffs() {
package/dist/diffs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/diffs.ts"],"sourcesContent":["import { registerPierreDiffs } from \"./lib/pierre-diffs-loader\";\n\nexport { registerPierreDiffs, type PierreDiffsLoader } from \"./lib/pierre-diffs-loader\";\n\n/**\n * Enable Shiki-highlighted diffs and file views from the optional\n * `@pierre/diffs` peer. Call once at startup, only when the host installs it.\n * This is the only module in the package that names the peer, so hosts that\n * skip it build without `@pierre/diffs` and render plain-text diffs.\n */\nexport function enablePierreDiffs(): void {\n registerPierreDiffs(loadPierreDiffsModule);\n}\n\n// One stable loader identity, so repeated enable calls are no-ops.\nconst loadPierreDiffsModule = () => import(\"@pierre/diffs/react\");\n"],"mappings":";;;;;AAUO,SAAS,oBAA0B;AACxC,sBAAoB,qBAAqB;AAC3C;AAGA,IAAM,wBAAwB,MAAM,OAAO,qBAAqB;","names":[]}
1
+ {"version":3,"sources":["../src/diffs.ts"],"sourcesContent":["import { registerPierreDiffs } from \"./lib/pierre-diffs-loader\";\n\nexport { registerPierreDiffs, type PierreDiffsLoader } from \"./lib/pierre-diffs-loader\";\n\n/**\n * Enable Shiki-highlighted diffs and file views from the optional\n * `@pierre/diffs` peer. Call once at startup, only when the host installs it.\n * This is the only module in the package that names the peer, so hosts that\n * skip it build without `@pierre/diffs` and render plain-text diffs.\n */\nexport function enablePierreDiffs(): void {\n registerPierreDiffs(loadPierreDiffsModule);\n}\n\n// One stable loader identity, so repeated enable calls are no-ops.\nconst loadPierreDiffsModule = () => import(\"@pierre/diffs/react\");\n"],"mappings":";;;;;;AAUO,SAAS,oBAA0B;AACxC,sBAAoB,qBAAqB;AAC3C;AAGA,IAAM,wBAAwB,MAAM,OAAO,qBAAqB;","names":[]}
package/dist/editor.js CHANGED
@@ -1,11 +1,12 @@
1
+ "use client";
1
2
  import {
2
3
  CodeEditor,
3
4
  languageForPath
4
- } from "./chunk-4RVYOY4O.js";
5
+ } from "./chunk-LSW2OJVV.js";
5
6
  import {
6
7
  registerCodeEditor
7
- } from "./chunk-JT4JW7BC.js";
8
- import "./chunk-22KP6LR5.js";
8
+ } from "./chunk-5I4VRWBB.js";
9
+ import "./chunk-TXS65BB2.js";
9
10
 
10
11
  // src/editor.ts
11
12
  var loadEditor = async () => ({ module: await import("@uiw/react-codemirror") });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/editor.ts"],"sourcesContent":["import { registerCodeEditor, type CodeEditorLanguages } from \"./lib/workbench-peers\";\n\nexport { CodeEditor, languageForPath } from \"./components/code-editor\";\nexport type { CodeEditorProps } from \"./components/code-editor\";\nexport { registerCodeEditor } from \"./lib/workbench-peers\";\nexport type { CodeEditorLanguage, CodeEditorLanguages } from \"./lib/workbench-peers\";\n\nconst loadEditor = async () => ({ module: await import(\"@uiw/react-codemirror\") });\n\n/** Only name installed grammar peers in host-supplied language loaders. */\nexport function enableCodeEditor(languages?: CodeEditorLanguages): void {\n registerCodeEditor(languages ? async () => ({ ...(await loadEditor()), languages }) : loadEditor);\n}\n"],"mappings":";;;;;;;;;;AAOA,IAAM,aAAa,aAAa,EAAE,QAAQ,MAAM,OAAO,uBAAuB,EAAE;AAGzE,SAAS,iBAAiB,WAAuC;AACtE,qBAAmB,YAAY,aAAa,EAAE,GAAI,MAAM,WAAW,GAAI,UAAU,KAAK,UAAU;AAClG;","names":[]}
1
+ {"version":3,"sources":["../src/editor.ts"],"sourcesContent":["import { registerCodeEditor, type CodeEditorLanguages } from \"./lib/workbench-peers\";\n\nexport { CodeEditor, languageForPath } from \"./components/code-editor\";\nexport type { CodeEditorProps } from \"./components/code-editor\";\nexport { registerCodeEditor } from \"./lib/workbench-peers\";\nexport type { CodeEditorLanguage, CodeEditorLanguages } from \"./lib/workbench-peers\";\n\nconst loadEditor = async () => ({ module: await import(\"@uiw/react-codemirror\") });\n\n/** Only name installed grammar peers in host-supplied language loaders. */\nexport function enableCodeEditor(languages?: CodeEditorLanguages): void {\n registerCodeEditor(languages ? async () => ({ ...(await loadEditor()), languages }) : loadEditor);\n}\n"],"mappings":";;;;;;;;;;;AAOA,IAAM,aAAa,aAAa,EAAE,QAAQ,MAAM,OAAO,uBAAuB,EAAE;AAGzE,SAAS,iBAAiB,WAAuC;AACtE,qBAAmB,YAAY,aAAa,EAAE,GAAI,MAAM,WAAW,GAAI,UAAU,KAAK,UAAU;AAClG;","names":[]}
@@ -0,0 +1,69 @@
1
+ "use client";
2
+ import {
3
+ RealtimeVoiceControl,
4
+ useSessionRealtime
5
+ } from "./chunk-YVFRBXST.js";
6
+ import "./chunk-NX4ADH73.js";
7
+ import "./chunk-L2J3PU7A.js";
8
+ import "./chunk-PMV53IMM.js";
9
+ import "./chunk-XS67YG5R.js";
10
+ import "./chunk-XEA5BCMA.js";
11
+ import "./chunk-XTD7TZHW.js";
12
+ import "./chunk-TXS65BB2.js";
13
+
14
+ // src/realtime/embedded-voice.tsx
15
+ import { projectSessionRealtimeLifecycle } from "@opengeni/sdk/realtime";
16
+ import { useEffect, useMemo, useState } from "react";
17
+ import { jsx } from "react/jsx-runtime";
18
+ function EmbeddedRealtimeVoice(props) {
19
+ const lifecycle = useMemo(() => projectSessionRealtimeLifecycle(props.events), [props.events]);
20
+ const activeModel = lifecycle?.state === "active" && !(Date.parse(lifecycle.leaseExpiresAt) <= Date.now()) ? lifecycle.model : null;
21
+ const [chosen, setChosen] = useState(null);
22
+ const fallback = props.models.find((model) => model.recommended) ?? props.models[0];
23
+ const selected = props.models.find((model) => model.id === (activeModel ?? chosen)) ?? (activeModel ? { ...fallback, id: activeModel } : fallback);
24
+ const realtime = useSessionRealtime({
25
+ client: props.client,
26
+ workspaceId: props.workspaceId,
27
+ sessionId: props.sessionId,
28
+ sessionStatus: props.sessionStatus,
29
+ effectiveControl: props.effectiveControl,
30
+ events: props.events,
31
+ eventsReady: props.eventsReady,
32
+ codexConnected: false,
33
+ model: selected.id,
34
+ modelAvailable: selected.available,
35
+ modelUnavailableReason: selected.unavailableReason
36
+ });
37
+ const voiceActive = realtime.snapshot.mode?.state === "active";
38
+ const onVoiceActiveChange = props.onVoiceActiveChange;
39
+ useEffect(() => {
40
+ onVoiceActiveChange?.(voiceActive);
41
+ }, [onVoiceActiveChange, voiceActive]);
42
+ useEffect(() => () => onVoiceActiveChange?.(false), [onVoiceActiveChange]);
43
+ return /* @__PURE__ */ jsx(
44
+ RealtimeVoiceControl,
45
+ {
46
+ snapshot: realtime.snapshot,
47
+ canStart: realtime.canStart,
48
+ admissionBlocker: realtime.admissionBlocker,
49
+ modelAvailable: selected.available,
50
+ menuSide: "top",
51
+ modelMenu: "split",
52
+ showDiagnostics: false,
53
+ audioRef: realtime.audioRef,
54
+ selectedModel: selected,
55
+ models: props.models,
56
+ onSelectModel: realtime.lifecycleActive ? void 0 : setChosen,
57
+ onStart: realtime.start,
58
+ onStop: realtime.stop,
59
+ onRetry: realtime.retry,
60
+ onRetryAudibleOutput: realtime.retryAudibleOutput,
61
+ onSetInputMuted: realtime.setInputMuted,
62
+ onSetOutputMuted: realtime.setOutputMuted
63
+ }
64
+ );
65
+ }
66
+ export {
67
+ EmbeddedRealtimeVoice as default
68
+ };
69
+ //# sourceMappingURL=embedded-voice-NIL4RDX3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/realtime/embedded-voice.tsx"],"sourcesContent":["import type { EffectiveSessionControl, SessionEvent, SessionStatus } from \"@opengeni/sdk\";\nimport { projectSessionRealtimeLifecycle } from \"@opengeni/sdk/realtime\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nimport {\n RealtimeVoiceControl,\n useSessionRealtime,\n type RealtimeModelOption,\n} from \"./realtime-control\";\n\n/**\n * The stock conversation's live voice button (lazy chunk). The conversation\n * mounts it only when the workspace catalog offers an available voice model;\n * this owns choosing among those models and the call itself.\n */\nexport default function EmbeddedRealtimeVoice(props: {\n /** The conversation's client, which serves the realtime routes (or a proxy of them). */\n client: unknown;\n workspaceId: string;\n /** Available voice models, already filtered by the conversation. */\n models: readonly RealtimeModelOption[];\n sessionId: string;\n sessionStatus: SessionStatus;\n effectiveControl: EffectiveSessionControl;\n events: SessionEvent[];\n eventsReady: boolean;\n onVoiceActiveChange?: ((active: boolean) => void) | undefined;\n}) {\n const lifecycle = useMemo(() => projectSessionRealtimeLifecycle(props.events), [props.events]);\n // A call already running (this browser after reload, or another one) fixes the model.\n const activeModel =\n lifecycle?.state === \"active\" && !(Date.parse(lifecycle.leaseExpiresAt) <= Date.now())\n ? lifecycle.model\n : null;\n const [chosen, setChosen] = useState<string | null>(null);\n const fallback = props.models.find((model) => model.recommended) ?? props.models[0]!;\n const selected =\n props.models.find((model) => model.id === (activeModel ?? chosen)) ??\n (activeModel ? { ...fallback, id: activeModel } : fallback);\n const realtime = useSessionRealtime({\n client: props.client as Parameters<typeof useSessionRealtime>[0][\"client\"],\n workspaceId: props.workspaceId,\n sessionId: props.sessionId,\n sessionStatus: props.sessionStatus,\n effectiveControl: props.effectiveControl,\n events: props.events,\n eventsReady: props.eventsReady,\n codexConnected: false,\n model: selected.id,\n modelAvailable: selected.available,\n modelUnavailableReason: selected.unavailableReason,\n });\n const voiceActive = realtime.snapshot.mode?.state === \"active\";\n const onVoiceActiveChange = props.onVoiceActiveChange;\n useEffect(() => {\n onVoiceActiveChange?.(voiceActive);\n }, [onVoiceActiveChange, voiceActive]);\n useEffect(() => () => onVoiceActiveChange?.(false), [onVoiceActiveChange]);\n\n return (\n <RealtimeVoiceControl\n snapshot={realtime.snapshot}\n canStart={realtime.canStart}\n admissionBlocker={realtime.admissionBlocker}\n modelAvailable={selected.available}\n menuSide=\"top\"\n modelMenu=\"split\"\n showDiagnostics={false}\n audioRef={realtime.audioRef}\n selectedModel={selected}\n models={props.models}\n onSelectModel={realtime.lifecycleActive ? undefined : setChosen}\n onStart={realtime.start}\n onStop={realtime.stop}\n onRetry={realtime.retry}\n onRetryAudibleOutput={realtime.retryAudibleOutput}\n onSetInputMuted={realtime.setInputMuted}\n onSetOutputMuted={realtime.setOutputMuted}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AACA,SAAS,uCAAuC;AAChD,SAAS,WAAW,SAAS,gBAAgB;AA0DzC;AA7CW,SAAR,sBAAuC,OAY3C;AACD,QAAM,YAAY,QAAQ,MAAM,gCAAgC,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC;AAE7F,QAAM,cACJ,WAAW,UAAU,YAAY,EAAE,KAAK,MAAM,UAAU,cAAc,KAAK,KAAK,IAAI,KAChF,UAAU,QACV;AACN,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAwB,IAAI;AACxD,QAAM,WAAW,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,WAAW,KAAK,MAAM,OAAO,CAAC;AAClF,QAAM,WACJ,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,QAAQ,eAAe,OAAO,MAChE,cAAc,EAAE,GAAG,UAAU,IAAI,YAAY,IAAI;AACpD,QAAM,WAAW,mBAAmB;AAAA,IAClC,QAAQ,MAAM;AAAA,IACd,aAAa,MAAM;AAAA,IACnB,WAAW,MAAM;AAAA,IACjB,eAAe,MAAM;AAAA,IACrB,kBAAkB,MAAM;AAAA,IACxB,QAAQ,MAAM;AAAA,IACd,aAAa,MAAM;AAAA,IACnB,gBAAgB;AAAA,IAChB,OAAO,SAAS;AAAA,IAChB,gBAAgB,SAAS;AAAA,IACzB,wBAAwB,SAAS;AAAA,EACnC,CAAC;AACD,QAAM,cAAc,SAAS,SAAS,MAAM,UAAU;AACtD,QAAM,sBAAsB,MAAM;AAClC,YAAU,MAAM;AACd,0BAAsB,WAAW;AAAA,EACnC,GAAG,CAAC,qBAAqB,WAAW,CAAC;AACrC,YAAU,MAAM,MAAM,sBAAsB,KAAK,GAAG,CAAC,mBAAmB,CAAC;AAEzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,SAAS;AAAA,MACnB,UAAU,SAAS;AAAA,MACnB,kBAAkB,SAAS;AAAA,MAC3B,gBAAgB,SAAS;AAAA,MACzB,UAAS;AAAA,MACT,WAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,UAAU,SAAS;AAAA,MACnB,eAAe;AAAA,MACf,QAAQ,MAAM;AAAA,MACd,eAAe,SAAS,kBAAkB,SAAY;AAAA,MACtD,SAAS,SAAS;AAAA,MAClB,QAAQ,SAAS;AAAA,MACjB,SAAS,SAAS;AAAA,MAClB,sBAAsB,SAAS;AAAA,MAC/B,iBAAiB,SAAS;AAAA,MAC1B,kBAAkB,SAAS;AAAA;AAAA,EAC7B;AAEJ;","names":[]}
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  // src/timeline/fleet-decision-row.tsx
2
4
  function GaugeMark({ className, j, s }) {
3
5
  return s("svg", {
@@ -349,4 +351,4 @@ function formatFleetScore(value) {
349
351
  export {
350
352
  FleetDecisionRow as default
351
353
  };
352
- //# sourceMappingURL=fleet-decision-row-YZ3ZKWMM.js.map
354
+ //# sourceMappingURL=fleet-decision-row-SI63O5V4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/timeline/fleet-decision-row.tsx"],"sourcesContent":["import type { FleetDecisionItem } from \"./types\";\n\ntype RowJsx = typeof import(\"react/jsx-runtime\").jsx;\ntype RowJsxs = typeof import(\"react/jsx-runtime\").jsxs;\n\nfunction GaugeMark({ className, j, s }: { className: string; j: RowJsx; s: RowJsxs }) {\n return s(\"svg\", {\n \"aria-hidden\": \"true\",\n className,\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 j(\"path\", { d: \"m 12 14 4-4\" }, \"needle\"),\n j(\"path\", { d: \"M3.34 19a10 10 0 1 1 17.32 0\" }, \"arc\"),\n ],\n });\n}\n\nconst FLEET_ACTUAL_REASON_LABEL: Record<FleetDecisionItem[\"actualReason\"], string> = {\n lease_reused: \"Reused the fenced lease\",\n pin: \"Kept the session pin\",\n rotation: \"Rotated for capacity\",\n active: \"Used the active subscription\",\n all_capped: \"All observed subscriptions were capped\",\n allocator_disabled: \"The policy-selected subscription was disabled for new allocations\",\n none: \"No production candidate was selected\",\n};\n\nconst FLEET_SHADOW_REASON_LABEL: Record<FleetDecisionItem[\"shadowReason\"], string> = {\n fenced_in_flight: \"Kept the fenced in-flight assignment\",\n fenced_candidate_missing: \"The fenced assignment was missing from the snapshot\",\n admission_paced: \"Admission would have been paced\",\n no_eligible_candidate: \"No candidate passed the policy checks\",\n overlay_isolated_empty: \"Explicit isolation left no eligible candidate\",\n best_score: \"Selected the lowest-pressure candidate\",\n affinity_best: \"Session affinity was already best\",\n hysteresis_hold: \"Hysteresis avoided a low-value switch\",\n};\n\nconst FLEET_COMPARISON_LABEL: Record<FleetDecisionItem[\"comparison\"], string> = {\n match: \"Production and shadow matched\",\n different_candidate: \"Shadow preferred another candidate\",\n different_outcome: \"Production and shadow outcomes differed\",\n not_comparable_truncated: \"Comparison limited by bounded candidate data\",\n};\n\nconst FLEET_ADMISSION_REASON_LABEL: Record<FleetDecisionItem[\"admissionReason\"], string> = {\n fenced_in_flight: \"In-flight assignment was fenced\",\n pacing_disabled: \"Admission pacing was disabled\",\n capacity_unknown: \"Capacity was unknown, so work remained admissible\",\n capacity_available: \"Observed capacity was available\",\n work_conserving_borrow: \"Idle capacity was borrowed for standard work\",\n manager_priority: \"Standard work was paced for queued manager demand\",\n standard_starvation_bound: \"The standard-work starvation bound was reached\",\n capacity_saturated: \"Observed dynamic capacity was saturated\",\n emergency_fuse: \"The emergency fuse blocked new work\",\n};\n\nconst FLEET_REJECTION_LABEL: Record<\n Exclude<FleetDecisionItem[\"scores\"][number][\"rejectionReason\"], null>,\n string\n> = {\n allocator_disabled: \"Allocator disabled\",\n unavailable: \"Unavailable\",\n cooling: \"Cooling down\",\n quota_ceiling: \"Quota ceiling reached\",\n overlay_isolation: \"Outside explicit isolation\",\n};\n\nconst FLEET_CONFIDENCE_LABEL: Record<FleetDecisionItem[\"confidence\"], string> = {\n unknown: \"Unknown confidence\",\n low: \"Low confidence\",\n medium: \"Medium confidence\",\n high: \"High confidence\",\n};\n\nexport default function FleetDecisionRow({\n item,\n d: ActivityDisclosure,\n b: BodyNote,\n j,\n s,\n}: {\n item: FleetDecisionItem;\n d: typeof import(\"./shared\").ActivityDisclosure;\n b: typeof import(\"./shared\").BodyNote;\n j: RowJsx;\n s: RowJsxs;\n}) {\n const scoreRowsHidden = item.scoreRowsTruncatedCount > 0;\n const scores =\n item.scores.length > 0\n ? j(\n \"div\",\n {\n className: \"min-w-0\",\n children: [\n j(\n \"h4\",\n {\n className: \"text-og-sm font-medium text-og-fg\",\n children: \"Bounded candidate scores\",\n },\n \"heading\",\n ),\n j(\n \"p\",\n {\n className: \"mt-0.5 text-og-xs leading-5 text-og-fg-subtle\",\n children:\n \"Lower scores rank first. Candidate aliases are temporary and local to this event.\",\n },\n \"description\",\n ),\n j(\n \"ul\",\n {\n className: \"mt-2 flex min-w-0 flex-col gap-1.5\",\n \"aria-label\": \"Candidate scores\",\n children: item.scores.map((score) =>\n s(\n \"li\",\n {\n className:\n \"flex min-w-0 flex-col gap-1 rounded-og-sm bg-og-surface-1 px-2.5 py-2 text-og-sm sm:flex-row sm:items-center sm:gap-3\",\n children: [\n j(\n \"span\",\n {\n className: \"font-og-mono text-og-fg\",\n children: score.candidateKey,\n },\n \"candidate\",\n ),\n j(\n \"span\",\n {\n className: \"min-w-0 text-og-fg-muted sm:flex-1\",\n children: score.eligible\n ? \"Eligible\"\n : score.rejectionReason\n ? FLEET_REJECTION_LABEL[score.rejectionReason]\n : \"Unavailable\",\n },\n \"eligibility\",\n ),\n s(\n \"span\",\n {\n className: \"font-og-mono text-og-fg-subtle\",\n children: [\n \"score \",\n formatFleetScore(score.total),\n \" ·\",\n \" \",\n FLEET_CONFIDENCE_LABEL[score.confidence],\n ],\n },\n \"score\",\n ),\n ],\n },\n score.candidateKey,\n ),\n ),\n },\n \"rows\",\n ),\n ],\n },\n \"score-list\",\n )\n : null;\n const truncated =\n item.truncatedCandidateCount > 0\n ? j(\n BodyNote,\n {\n tone: \"muted\",\n children: [\n item.truncatedCandidateCount,\n \" additional \",\n item.truncatedCandidateCount === 1 ? \"candidate was\" : \"candidates were\",\n \" excluded from this bounded replay record.\",\n ],\n },\n \"truncated\",\n )\n : null;\n const hidden = scoreRowsHidden\n ? j(\n BodyNote,\n {\n tone: \"muted\",\n children: [\n item.scoreRowsTruncatedCount,\n \" additional \",\n item.scoreRowsTruncatedCount === 1 ? \"score row was\" : \"score rows were\",\n \" hidden by this view’s safety limit.\",\n ],\n },\n \"hidden\",\n )\n : null;\n return j(ActivityDisclosure, {\n icon: j(GaugeMark, { className: \"size-3.5\", j, s }),\n iconTone: \"muted\",\n title: \"Fleet policy shadow\",\n preview: FLEET_COMPARISON_LABEL[item.comparison],\n chip: {\n tone: \"muted\",\n text:\n item.comparison === \"match\"\n ? \"matched\"\n : item.comparison === \"not_comparable_truncated\"\n ? \"limited\"\n : \"different\",\n },\n children: s(\"section\", {\n \"aria-label\": \"Fleet policy shadow details\",\n className: \"flex min-w-0 flex-col gap-3\",\n children: [\n j(\n BodyNote,\n {\n tone: \"muted\",\n children:\n \"Shadow observation only — it did not change the subscription serving this turn.\",\n },\n \"observation\",\n ),\n j(\n \"dl\",\n {\n className: \"grid min-w-0 grid-cols-1 gap-x-5 gap-y-3 sm:grid-cols-2\",\n children: [\n j(\n FleetDetail,\n {\n term: \"Production\",\n value: fleetOutcomeLabel(item.actualOutcome, item.actualCandidateKey),\n note: FLEET_ACTUAL_REASON_LABEL[item.actualReason],\n j,\n s,\n },\n \"production\",\n ),\n j(\n FleetDetail,\n {\n term: \"Shadow policy\",\n value: fleetOutcomeLabel(item.shadowOutcome, item.shadowCandidateKey),\n note: FLEET_SHADOW_REASON_LABEL[item.shadowReason],\n j,\n s,\n },\n \"shadow\",\n ),\n j(\n FleetDetail,\n {\n term: \"Comparison\",\n value: FLEET_COMPARISON_LABEL[item.comparison],\n j,\n s,\n },\n \"comparison\",\n ),\n j(\n FleetDetail,\n {\n term: \"Decision confidence\",\n value: FLEET_CONFIDENCE_LABEL[item.confidence],\n j,\n s,\n },\n \"confidence\",\n ),\n j(\n FleetDetail,\n {\n term: \"Admission\",\n value:\n item.admissionOutcome === \"admit\"\n ? \"Would admit new work\"\n : \"Would pace new work\",\n note: FLEET_ADMISSION_REASON_LABEL[item.admissionReason],\n j,\n s,\n },\n \"admission\",\n ),\n j(\n FleetDetail,\n {\n term: \"Observed candidates\",\n value: `${item.candidateCount} in the bounded replay`,\n j,\n s,\n },\n \"candidate-count\",\n ),\n j(\n FleetDetail,\n {\n term: \"Idle-capacity borrowing\",\n value: item.borrowedIdleCapacity ? \"Borrowed for standard work\" : \"Not borrowed\",\n j,\n s,\n },\n \"idle-capacity\",\n ),\n j(\n FleetDetail,\n {\n term: \"Named-policy borrowing\",\n value: item.borrowedOverlayCapacity\n ? \"Borrowed outside the preferred group\"\n : \"Not borrowed\",\n j,\n s,\n },\n \"named-policy\",\n ),\n j(\n FleetDetail,\n {\n term: \"Stranded capacity\",\n value:\n item.strandedEligibleCount === 0\n ? \"None\"\n : `${item.strandedEligibleCount} eligible ${item.strandedEligibleCount === 1 ? \"candidate\" : \"candidates\"}`,\n note:\n item.strandedEligibleCount > 0\n ? \"Capacity excluded by explicit isolation; existing fenced turns are unchanged.\"\n : undefined,\n j,\n s,\n },\n \"stranded-capacity\",\n ),\n ],\n },\n \"details\",\n ),\n scores,\n truncated,\n hidden,\n ],\n }),\n });\n}\n\nfunction FleetDetail({\n term,\n value,\n note,\n j,\n s,\n}: {\n term: string;\n value: string;\n note?: string | undefined;\n j: RowJsx;\n s: RowJsxs;\n}) {\n return j(\"div\", {\n className: \"min-w-0\",\n children: [\n j(\n \"dt\",\n {\n className: \"text-og-xs font-medium uppercase tracking-wide text-og-fg-subtle\",\n children: term,\n },\n \"term\",\n ),\n s(\n \"dd\",\n {\n className: \"mt-0.5 break-words text-og-sm text-og-fg-muted\",\n children: [\n j(\"span\", { className: \"text-og-fg\", children: value }, \"value\"),\n note\n ? j(\"span\", { className: \"mt-0.5 block leading-5\", children: note }, \"note\")\n : null,\n ],\n },\n \"description\",\n ),\n ],\n });\n}\n\nfunction fleetOutcomeLabel(\n outcome: FleetDecisionItem[\"actualOutcome\"] | FleetDecisionItem[\"shadowOutcome\"],\n candidateKey: string | null,\n): string {\n if (outcome === \"selected\" && candidateKey) return `Selected ${candidateKey}`;\n if (outcome === \"waiting\") return \"Waiting for capacity\";\n if (outcome === \"paced\") return \"Paced before placement\";\n return \"No candidate selected\";\n}\n\nfunction formatFleetScore(value: number): string {\n return new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 2 }).format(value);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/timeline/fleet-decision-row.tsx"],"sourcesContent":["import type { FleetDecisionItem } from \"./types\";\n\ntype RowJsx = typeof import(\"react/jsx-runtime\").jsx;\ntype RowJsxs = typeof import(\"react/jsx-runtime\").jsxs;\n\nfunction GaugeMark({ className, j, s }: { className: string; j: RowJsx; s: RowJsxs }) {\n return s(\"svg\", {\n \"aria-hidden\": \"true\",\n className,\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 j(\"path\", { d: \"m 12 14 4-4\" }, \"needle\"),\n j(\"path\", { d: \"M3.34 19a10 10 0 1 1 17.32 0\" }, \"arc\"),\n ],\n });\n}\n\nconst FLEET_ACTUAL_REASON_LABEL: Record<FleetDecisionItem[\"actualReason\"], string> = {\n lease_reused: \"Reused the fenced lease\",\n pin: \"Kept the session pin\",\n rotation: \"Rotated for capacity\",\n active: \"Used the active subscription\",\n all_capped: \"All observed subscriptions were capped\",\n allocator_disabled: \"The policy-selected subscription was disabled for new allocations\",\n none: \"No production candidate was selected\",\n};\n\nconst FLEET_SHADOW_REASON_LABEL: Record<FleetDecisionItem[\"shadowReason\"], string> = {\n fenced_in_flight: \"Kept the fenced in-flight assignment\",\n fenced_candidate_missing: \"The fenced assignment was missing from the snapshot\",\n admission_paced: \"Admission would have been paced\",\n no_eligible_candidate: \"No candidate passed the policy checks\",\n overlay_isolated_empty: \"Explicit isolation left no eligible candidate\",\n best_score: \"Selected the lowest-pressure candidate\",\n affinity_best: \"Session affinity was already best\",\n hysteresis_hold: \"Hysteresis avoided a low-value switch\",\n};\n\nconst FLEET_COMPARISON_LABEL: Record<FleetDecisionItem[\"comparison\"], string> = {\n match: \"Production and shadow matched\",\n different_candidate: \"Shadow preferred another candidate\",\n different_outcome: \"Production and shadow outcomes differed\",\n not_comparable_truncated: \"Comparison limited by bounded candidate data\",\n};\n\nconst FLEET_ADMISSION_REASON_LABEL: Record<FleetDecisionItem[\"admissionReason\"], string> = {\n fenced_in_flight: \"In-flight assignment was fenced\",\n pacing_disabled: \"Admission pacing was disabled\",\n capacity_unknown: \"Capacity was unknown, so work remained admissible\",\n capacity_available: \"Observed capacity was available\",\n work_conserving_borrow: \"Idle capacity was borrowed for standard work\",\n manager_priority: \"Standard work was paced for queued manager demand\",\n standard_starvation_bound: \"The standard-work starvation bound was reached\",\n capacity_saturated: \"Observed dynamic capacity was saturated\",\n emergency_fuse: \"The emergency fuse blocked new work\",\n};\n\nconst FLEET_REJECTION_LABEL: Record<\n Exclude<FleetDecisionItem[\"scores\"][number][\"rejectionReason\"], null>,\n string\n> = {\n allocator_disabled: \"Allocator disabled\",\n unavailable: \"Unavailable\",\n cooling: \"Cooling down\",\n quota_ceiling: \"Quota ceiling reached\",\n overlay_isolation: \"Outside explicit isolation\",\n};\n\nconst FLEET_CONFIDENCE_LABEL: Record<FleetDecisionItem[\"confidence\"], string> = {\n unknown: \"Unknown confidence\",\n low: \"Low confidence\",\n medium: \"Medium confidence\",\n high: \"High confidence\",\n};\n\nexport default function FleetDecisionRow({\n item,\n d: ActivityDisclosure,\n b: BodyNote,\n j,\n s,\n}: {\n item: FleetDecisionItem;\n d: typeof import(\"./shared\").ActivityDisclosure;\n b: typeof import(\"./shared\").BodyNote;\n j: RowJsx;\n s: RowJsxs;\n}) {\n const scoreRowsHidden = item.scoreRowsTruncatedCount > 0;\n const scores =\n item.scores.length > 0\n ? j(\n \"div\",\n {\n className: \"min-w-0\",\n children: [\n j(\n \"h4\",\n {\n className: \"text-og-sm font-medium text-og-fg\",\n children: \"Bounded candidate scores\",\n },\n \"heading\",\n ),\n j(\n \"p\",\n {\n className: \"mt-0.5 text-og-xs leading-5 text-og-fg-subtle\",\n children:\n \"Lower scores rank first. Candidate aliases are temporary and local to this event.\",\n },\n \"description\",\n ),\n j(\n \"ul\",\n {\n className: \"mt-2 flex min-w-0 flex-col gap-1.5\",\n \"aria-label\": \"Candidate scores\",\n children: item.scores.map((score) =>\n s(\n \"li\",\n {\n className:\n \"flex min-w-0 flex-col gap-1 rounded-og-sm bg-og-surface-1 px-2.5 py-2 text-og-sm sm:flex-row sm:items-center sm:gap-3\",\n children: [\n j(\n \"span\",\n {\n className: \"font-og-mono text-og-fg\",\n children: score.candidateKey,\n },\n \"candidate\",\n ),\n j(\n \"span\",\n {\n className: \"min-w-0 text-og-fg-muted sm:flex-1\",\n children: score.eligible\n ? \"Eligible\"\n : score.rejectionReason\n ? FLEET_REJECTION_LABEL[score.rejectionReason]\n : \"Unavailable\",\n },\n \"eligibility\",\n ),\n s(\n \"span\",\n {\n className: \"font-og-mono text-og-fg-subtle\",\n children: [\n \"score \",\n formatFleetScore(score.total),\n \" ·\",\n \" \",\n FLEET_CONFIDENCE_LABEL[score.confidence],\n ],\n },\n \"score\",\n ),\n ],\n },\n score.candidateKey,\n ),\n ),\n },\n \"rows\",\n ),\n ],\n },\n \"score-list\",\n )\n : null;\n const truncated =\n item.truncatedCandidateCount > 0\n ? j(\n BodyNote,\n {\n tone: \"muted\",\n children: [\n item.truncatedCandidateCount,\n \" additional \",\n item.truncatedCandidateCount === 1 ? \"candidate was\" : \"candidates were\",\n \" excluded from this bounded replay record.\",\n ],\n },\n \"truncated\",\n )\n : null;\n const hidden = scoreRowsHidden\n ? j(\n BodyNote,\n {\n tone: \"muted\",\n children: [\n item.scoreRowsTruncatedCount,\n \" additional \",\n item.scoreRowsTruncatedCount === 1 ? \"score row was\" : \"score rows were\",\n \" hidden by this view’s safety limit.\",\n ],\n },\n \"hidden\",\n )\n : null;\n return j(ActivityDisclosure, {\n icon: j(GaugeMark, { className: \"size-3.5\", j, s }),\n iconTone: \"muted\",\n title: \"Fleet policy shadow\",\n preview: FLEET_COMPARISON_LABEL[item.comparison],\n chip: {\n tone: \"muted\",\n text:\n item.comparison === \"match\"\n ? \"matched\"\n : item.comparison === \"not_comparable_truncated\"\n ? \"limited\"\n : \"different\",\n },\n children: s(\"section\", {\n \"aria-label\": \"Fleet policy shadow details\",\n className: \"flex min-w-0 flex-col gap-3\",\n children: [\n j(\n BodyNote,\n {\n tone: \"muted\",\n children:\n \"Shadow observation only — it did not change the subscription serving this turn.\",\n },\n \"observation\",\n ),\n j(\n \"dl\",\n {\n className: \"grid min-w-0 grid-cols-1 gap-x-5 gap-y-3 sm:grid-cols-2\",\n children: [\n j(\n FleetDetail,\n {\n term: \"Production\",\n value: fleetOutcomeLabel(item.actualOutcome, item.actualCandidateKey),\n note: FLEET_ACTUAL_REASON_LABEL[item.actualReason],\n j,\n s,\n },\n \"production\",\n ),\n j(\n FleetDetail,\n {\n term: \"Shadow policy\",\n value: fleetOutcomeLabel(item.shadowOutcome, item.shadowCandidateKey),\n note: FLEET_SHADOW_REASON_LABEL[item.shadowReason],\n j,\n s,\n },\n \"shadow\",\n ),\n j(\n FleetDetail,\n {\n term: \"Comparison\",\n value: FLEET_COMPARISON_LABEL[item.comparison],\n j,\n s,\n },\n \"comparison\",\n ),\n j(\n FleetDetail,\n {\n term: \"Decision confidence\",\n value: FLEET_CONFIDENCE_LABEL[item.confidence],\n j,\n s,\n },\n \"confidence\",\n ),\n j(\n FleetDetail,\n {\n term: \"Admission\",\n value:\n item.admissionOutcome === \"admit\"\n ? \"Would admit new work\"\n : \"Would pace new work\",\n note: FLEET_ADMISSION_REASON_LABEL[item.admissionReason],\n j,\n s,\n },\n \"admission\",\n ),\n j(\n FleetDetail,\n {\n term: \"Observed candidates\",\n value: `${item.candidateCount} in the bounded replay`,\n j,\n s,\n },\n \"candidate-count\",\n ),\n j(\n FleetDetail,\n {\n term: \"Idle-capacity borrowing\",\n value: item.borrowedIdleCapacity ? \"Borrowed for standard work\" : \"Not borrowed\",\n j,\n s,\n },\n \"idle-capacity\",\n ),\n j(\n FleetDetail,\n {\n term: \"Named-policy borrowing\",\n value: item.borrowedOverlayCapacity\n ? \"Borrowed outside the preferred group\"\n : \"Not borrowed\",\n j,\n s,\n },\n \"named-policy\",\n ),\n j(\n FleetDetail,\n {\n term: \"Stranded capacity\",\n value:\n item.strandedEligibleCount === 0\n ? \"None\"\n : `${item.strandedEligibleCount} eligible ${item.strandedEligibleCount === 1 ? \"candidate\" : \"candidates\"}`,\n note:\n item.strandedEligibleCount > 0\n ? \"Capacity excluded by explicit isolation; existing fenced turns are unchanged.\"\n : undefined,\n j,\n s,\n },\n \"stranded-capacity\",\n ),\n ],\n },\n \"details\",\n ),\n scores,\n truncated,\n hidden,\n ],\n }),\n });\n}\n\nfunction FleetDetail({\n term,\n value,\n note,\n j,\n s,\n}: {\n term: string;\n value: string;\n note?: string | undefined;\n j: RowJsx;\n s: RowJsxs;\n}) {\n return j(\"div\", {\n className: \"min-w-0\",\n children: [\n j(\n \"dt\",\n {\n className: \"text-og-xs font-medium uppercase tracking-wide text-og-fg-subtle\",\n children: term,\n },\n \"term\",\n ),\n s(\n \"dd\",\n {\n className: \"mt-0.5 break-words text-og-sm text-og-fg-muted\",\n children: [\n j(\"span\", { className: \"text-og-fg\", children: value }, \"value\"),\n note\n ? j(\"span\", { className: \"mt-0.5 block leading-5\", children: note }, \"note\")\n : null,\n ],\n },\n \"description\",\n ),\n ],\n });\n}\n\nfunction fleetOutcomeLabel(\n outcome: FleetDecisionItem[\"actualOutcome\"] | FleetDecisionItem[\"shadowOutcome\"],\n candidateKey: string | null,\n): string {\n if (outcome === \"selected\" && candidateKey) return `Selected ${candidateKey}`;\n if (outcome === \"waiting\") return \"Waiting for capacity\";\n if (outcome === \"paced\") return \"Paced before placement\";\n return \"No candidate selected\";\n}\n\nfunction formatFleetScore(value: number): string {\n return new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 2 }).format(value);\n}\n"],"mappings":"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","names":[]}
@@ -12,6 +12,7 @@ export type ClientConfigFlagsSource = {
12
12
  sessionCreation?: boolean | undefined;
13
13
  archive?: boolean | undefined;
14
14
  voiceInput?: ClientVoiceInputConfig | undefined;
15
+ realtimeVoice?: boolean | undefined;
15
16
  }>;
16
17
  };
17
18
  export type ClientConfigFlags = {
@@ -32,6 +33,11 @@ export type ClientConfigFlags = {
32
33
  archive: boolean;
33
34
  /** Native voice input when the deployment can transcribe, else null. */
34
35
  voiceInput: ClientVoiceInputConfig | null;
36
+ /**
37
+ * Live voice. `false` until the config loads and when a session proxy turns
38
+ * it off; availability otherwise comes from the realtime model catalog.
39
+ */
40
+ realtimeVoice: boolean;
35
41
  };
36
42
  /** Deployment and session-proxy capabilities from the client config. */
37
43
  export declare function useClientConfigFlags(client: Partial<ClientConfigFlagsSource> | ClientConfigFlagsSource): ClientConfigFlags;
@@ -1,5 +1,7 @@
1
1
  import type { ComputerAction, ComputerActionReceipt, ComputerClipboard, ComputerFrame, ComputerObservation, ComputerSession, ComputerTarget } from "@opengeni/sdk/interaction";
2
2
  import { type EmbeddedComputerInteractionClientOverride } from "../session-context.js";
3
+ export declare function isStaleComputerActionResult(value: unknown): boolean;
4
+ export declare function computerActionReceiptError(receipt: ComputerActionReceipt): Error;
3
5
  export type UseComputerSessionOptions = EmbeddedComputerInteractionClientOverride & {
4
6
  computerSessionId: string | null;
5
7
  enabled?: boolean | undefined;
@@ -0,0 +1,9 @@
1
+ import type { WorkspaceRealtimeModelCatalogResponse } from "@opengeni/sdk";
2
+ type AvailableVoiceModels = WorkspaceRealtimeModelCatalogResponse["models"];
3
+ /**
4
+ * Voice models this user can start right now in the workspace, or an empty
5
+ * list while unknown, disabled, unsupported (older API or proxy), or failed.
6
+ * Availability is advisory; Opengeni still admits and meters every call.
7
+ */
8
+ export declare function useRealtimeVoiceModels(client: unknown, workspaceId: string, enabled: boolean): AvailableVoiceModels;
9
+ export {};
@@ -28,6 +28,10 @@ export type UseVoiceInputResult = {
28
28
  stream: MediaStream | null;
29
29
  recordingId: string | null;
30
30
  durationSeconds: number;
31
+ /** Wall-clock start of the current capture (epoch ms), or null when not recording. */
32
+ recordingStartedAt: number | null;
33
+ /** Capture stops and transcribes automatically after this many seconds. */
34
+ maxRecordingSeconds: number | null;
31
35
  locallySaved: boolean;
32
36
  hasRecoverableRecording: boolean;
33
37
  savedTranscript: string | null;
@@ -38,7 +42,10 @@ export type UseVoiceInputResult = {
38
42
  retry: () => void;
39
43
  /** Explicitly insert a durably saved transcript whose prior handoff may be uncertain. */
40
44
  insertSavedTranscript: () => Promise<void>;
41
- /** Cancel active work. A stopped/transcribing recording remains recoverable. */
45
+ /**
46
+ * Cancel active work without losing speech: a recording longer than a few
47
+ * seconds and any stopped/transcribing recording stay locally recoverable.
48
+ */
42
49
  cancel: () => void;
43
50
  /** Intentionally delete the current durable recording. */
44
51
  discard: () => Promise<void>;
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import {
2
3
  CapturedFileUnavailableError,
3
4
  FileBrowser,
@@ -8,14 +9,14 @@ import {
8
9
  useSandboxFiles,
9
10
  useUnicodeFallbackFonts,
10
11
  visibleFileTree
11
- } from "./chunk-YM2DE7BQ.js";
12
+ } from "./chunk-C5BF4L26.js";
12
13
  import {
13
14
  createEmbeddedSessionClient,
14
15
  isLineageRefreshEvent,
15
16
  isSessionMcpApprovalPolicyEvent,
16
17
  useSessionLineage,
17
18
  useSessionMcpApprovalPolicy
18
- } from "./chunk-H5X55XH7.js";
19
+ } from "./chunk-UDPH5SLV.js";
19
20
  import {
20
21
  CONNECTION_STATUS_META,
21
22
  ConnectionDot,
@@ -46,7 +47,7 @@ import {
46
47
  healthPulses,
47
48
  pointsFor,
48
49
  useMachines
49
- } from "./chunk-EESD3PY3.js";
50
+ } from "./chunk-JHTIMBOL.js";
50
51
  import {
51
52
  ActivityRail,
52
53
  ApprovalSurface,
@@ -111,18 +112,18 @@ import {
111
112
  useWorkspaceSessions,
112
113
  userMessageLikelyNeedsDisclosure,
113
114
  v4aToGitFileDiff
114
- } from "./chunk-LJ2UTJJE.js";
115
+ } from "./chunk-EAOSEIXB.js";
115
116
  import {
116
117
  useThemeType
117
- } from "./chunk-UK4TINKT.js";
118
- import "./chunk-J2QWVSQY.js";
119
- import "./chunk-C5X5AJXK.js";
120
- import "./chunk-ZYRGEKWS.js";
121
- import "./chunk-CJUO7J5Z.js";
118
+ } from "./chunk-B27E3V37.js";
119
+ import "./chunk-JH7V627O.js";
120
+ import "./chunk-2HVLQ26H.js";
121
+ import "./chunk-LJUMYUBO.js";
122
+ import "./chunk-HXYOSSQO.js";
122
123
  import {
123
124
  ArtifactLabelsProvider,
124
125
  DEFAULT_ARTIFACT_LABELS
125
- } from "./chunk-5CVXZA3Y.js";
126
+ } from "./chunk-45NUOSXQ.js";
126
127
  import {
127
128
  SESSION_EVENT_BROWSER_MAX_BYTES,
128
129
  SESSION_EVENT_BROWSER_MAX_COUNT,
@@ -146,20 +147,20 @@ import {
146
147
  useSessionControl,
147
148
  useSessionEvents,
148
149
  useTurnQueue
149
- } from "./chunk-WZMYFJD3.js";
150
+ } from "./chunk-G6YRCIYJ.js";
150
151
  import {
151
152
  buildTimeline,
152
153
  creditExhaustedFromEvents,
153
154
  extractSessionRef,
154
155
  groupTimeline,
155
156
  sessionStatusFromEvents
156
- } from "./chunk-OA6HFRQP.js";
157
+ } from "./chunk-QMMCJGFI.js";
157
158
  import {
158
159
  toolDisplayName
159
- } from "./chunk-AWZLIMKX.js";
160
+ } from "./chunk-T46QZH3E.js";
160
161
  import {
161
162
  OpenGeniProvider
162
- } from "./chunk-3CTRFMAK.js";
163
+ } from "./chunk-PKCAYHDC.js";
163
164
  import {
164
165
  McpConnectionCard,
165
166
  SessionCapabilityFrame,
@@ -168,7 +169,7 @@ import {
168
169
  attachSessionCapability,
169
170
  completeSessionCapabilityOAuth,
170
171
  prepareSessionCapabilityAccess
171
- } from "./chunk-MBMPHOMA.js";
172
+ } from "./chunk-55DXD22O.js";
172
173
  import {
173
174
  ActivityDisclosure,
174
175
  BodyNote,
@@ -185,32 +186,32 @@ import {
185
186
  retainedImageId,
186
187
  sandboxFileLocationFromHref,
187
188
  sandboxFilePathFromHref
188
- } from "./chunk-I7IWRQLN.js";
189
- import "./chunk-GIMRELBW.js";
190
- import "./chunk-447JLCBU.js";
189
+ } from "./chunk-PHBFJCEU.js";
190
+ import "./chunk-OYQQJL3J.js";
191
+ import "./chunk-S2QH6EZ5.js";
191
192
  import {
192
193
  OpenGeniLinkProvider,
193
194
  chainLinkResolvers,
194
195
  sessionLinkResolver,
195
196
  useOpenGeniLinkResolver,
196
197
  viewerLinkResolver
197
- } from "./chunk-XCHWDJ22.js";
198
+ } from "./chunk-OGTTUYNT.js";
198
199
  import {
199
200
  registerPierreDiffs
200
- } from "./chunk-A2PI6UMY.js";
201
+ } from "./chunk-YSRBFJMQ.js";
201
202
  import {
202
203
  copyTextToClipboard,
203
204
  tableElementToTsv
204
- } from "./chunk-JVYQRRC4.js";
205
+ } from "./chunk-CVYCLFMH.js";
205
206
  import {
206
207
  DesktopViewer,
207
208
  useDesktopStream,
208
209
  useRelayFrameStream
209
- } from "./chunk-DYWBUX5Q.js";
210
- import "./chunk-RHREZ7BO.js";
210
+ } from "./chunk-IMSUVYQB.js";
211
+ import "./chunk-ZUWF4NF7.js";
211
212
  import {
212
213
  ModelPolicyPickerMenu
213
- } from "./chunk-SGKD2OCN.js";
214
+ } from "./chunk-IYQCWGU5.js";
214
215
  import {
215
216
  CommandPalette,
216
217
  ComposerTranscriptionControl,
@@ -243,14 +244,14 @@ import {
243
244
  useSlashCommands,
244
245
  useTranscription,
245
246
  useVoiceInput
246
- } from "./chunk-LN6TCXD3.js";
247
+ } from "./chunk-IUHHPMAX.js";
247
248
  import {
248
249
  FILE_ONLY_MESSAGE_TEXT,
249
250
  composeSendInput,
250
251
  shouldSteerOnKey,
251
252
  shouldSubmitOnKey,
252
253
  useComposer
253
- } from "./chunk-RSI7XYXL.js";
254
+ } from "./chunk-PBCZL4JP.js";
254
255
  import {
255
256
  LightboxProvider,
256
257
  Tooltip,
@@ -259,7 +260,8 @@ import {
259
260
  TooltipTrigger,
260
261
  useLightbox,
261
262
  useLightboxOptional
262
- } from "./chunk-BRM6FVZA.js";
263
+ } from "./chunk-IEE7WCLN.js";
264
+ import "./chunk-NX4ADH73.js";
263
265
  import {
264
266
  BillingClassMark,
265
267
  ChatGptMark,
@@ -273,8 +275,8 @@ import {
273
275
  PickerNavRow,
274
276
  defaultModelPolicyPickerMessages,
275
277
  modelHasMark
276
- } from "./chunk-LNIRAOA3.js";
277
- import "./chunk-K3HQAKQX.js";
278
+ } from "./chunk-L2J3PU7A.js";
279
+ import "./chunk-PMV53IMM.js";
278
280
  import {
279
281
  advancedSourceSummary,
280
282
  availabilityReasonLabel,
@@ -293,8 +295,8 @@ import {
293
295
  projectPickerRows,
294
296
  runnableLatencyModesForModel,
295
297
  sortPickerRows
296
- } from "./chunk-5F4WR7X7.js";
297
- import "./chunk-VZTQ73XT.js";
298
+ } from "./chunk-XS67YG5R.js";
299
+ import "./chunk-XEA5BCMA.js";
298
300
  import {
299
301
  COMPOSER_MODEL_UNAVAILABLE_MESSAGE,
300
302
  COMPOSER_PAYMENT_REQUIRED_MESSAGE,
@@ -310,43 +312,43 @@ import {
310
312
  stringifyPayload,
311
313
  truncate,
312
314
  tryParseJson
313
- } from "./chunk-UTRTG6LH.js";
315
+ } from "./chunk-LVS3MH5T.js";
314
316
  import {
315
317
  SandboxTerminal,
316
318
  terminalCanAcquirePty,
317
319
  useTerminalStream,
318
320
  xtermThemeFromTokens
319
- } from "./chunk-WRHIZYZF.js";
321
+ } from "./chunk-MEQM4LI3.js";
320
322
  import {
321
323
  sandboxAcceptsLiveIo
322
- } from "./chunk-YV4L3ILF.js";
323
- import "./chunk-5J4FOW6Q.js";
324
- import "./chunk-B3V6TG77.js";
324
+ } from "./chunk-QV3DJVRZ.js";
325
+ import "./chunk-TNEZNMSN.js";
326
+ import "./chunk-GC3PH6N7.js";
325
327
  import {
326
328
  useMutationRunner,
327
329
  usePageLiveActivity,
328
330
  usePolledValue,
329
331
  useSessionEventTrigger
330
- } from "./chunk-YQEAA6LT.js";
332
+ } from "./chunk-QHUE7E4N.js";
331
333
  import {
332
334
  normalizeError
333
- } from "./chunk-UGLEYEMP.js";
335
+ } from "./chunk-CM7LVUKC.js";
334
336
  import {
335
337
  useOpenGeni,
336
338
  useOpenGeniClient
337
- } from "./chunk-TKOTKRWY.js";
339
+ } from "./chunk-XTD7TZHW.js";
338
340
  import {
339
341
  CodeEditor,
340
342
  languageForPath
341
- } from "./chunk-4RVYOY4O.js";
343
+ } from "./chunk-LSW2OJVV.js";
342
344
  import {
343
345
  registerCodeEditor,
344
346
  registerDesktopViewer,
345
347
  registerSandboxTerminal
346
- } from "./chunk-JT4JW7BC.js";
348
+ } from "./chunk-5I4VRWBB.js";
347
349
  import {
348
350
  cn
349
- } from "./chunk-22KP6LR5.js";
351
+ } from "./chunk-TXS65BB2.js";
350
352
 
351
353
  // src/session-auth-recommendation.ts
352
354
  function sessionAuthRecommendation(item, catalog) {
@@ -3766,7 +3768,7 @@ import {
3766
3768
  } from "lucide-react";
3767
3769
  import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
3768
3770
  var LazySandboxFiles = lazy(
3769
- () => import("./sandbox-files-GORZOUUJ.js").then(({ SandboxFiles: SandboxFiles2 }) => ({ default: SandboxFiles2 })).catch(() => ({ default: FilesLoadFailed }))
3771
+ () => import("./sandbox-files-34CJJNOY.js").then(({ SandboxFiles: SandboxFiles2 }) => ({ default: SandboxFiles2 })).catch(() => ({ default: FilesLoadFailed }))
3770
3772
  );
3771
3773
  function FilesLoadFailed() {
3772
3774
  return /* @__PURE__ */ jsxs5(CenteredState, { tone: "danger", icon: /* @__PURE__ */ jsx6(TriangleAlertIcon, { className: "size-5", "aria-hidden": true }), children: [
@@ -3781,11 +3783,11 @@ function FilesTabBody(props) {
3781
3783
  return /* @__PURE__ */ jsx6(Suspense, { fallback: /* @__PURE__ */ jsx6(WorkbenchSurfaceLoading, { name: "Files" }), children: /* @__PURE__ */ jsx6(LazySandboxFiles, { ...props }) });
3782
3784
  }
3783
3785
  var LazyBrowserViewer = lazy(async () => {
3784
- const { BrowserViewer } = await import("./browser-viewer-SHYKQRNX.js");
3786
+ const { BrowserViewer } = await import("./browser-viewer-5EEAS3IU.js");
3785
3787
  return { default: BrowserViewer };
3786
3788
  });
3787
3789
  var LazyComputerViewer = lazy(async () => {
3788
- const { ComputerViewer } = await import("./computer-viewer-6SRGWRUX.js");
3790
+ const { ComputerViewer } = await import("./computer-viewer-ELNLZGHI.js");
3789
3791
  return { default: ComputerViewer };
3790
3792
  });
3791
3793
  var WORKBENCH_TAB_CHANGES = "changes";