libre-webui 0.33.0 → 0.34.1

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 (274) hide show
  1. package/backend/dist/db.d.ts +2 -2
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +14 -6
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/env.d.ts.map +1 -1
  6. package/backend/dist/env.js +21 -9
  7. package/backend/dist/env.js.map +1 -1
  8. package/backend/dist/index.d.ts.map +1 -1
  9. package/backend/dist/index.js +24 -35
  10. package/backend/dist/index.js.map +1 -1
  11. package/backend/dist/middleware/cors.d.ts +28 -0
  12. package/backend/dist/middleware/cors.d.ts.map +1 -0
  13. package/backend/dist/middleware/cors.js +70 -0
  14. package/backend/dist/middleware/cors.js.map +1 -0
  15. package/backend/dist/middleware/preferencesBody.d.ts +4 -0
  16. package/backend/dist/middleware/preferencesBody.d.ts.map +1 -0
  17. package/backend/dist/middleware/preferencesBody.js +43 -0
  18. package/backend/dist/middleware/preferencesBody.js.map +1 -0
  19. package/backend/dist/models/personaModel.d.ts.map +1 -1
  20. package/backend/dist/models/personaModel.js +2 -2
  21. package/backend/dist/models/personaModel.js.map +1 -1
  22. package/backend/dist/models/userModel.d.ts.map +1 -1
  23. package/backend/dist/models/userModel.js +3 -3
  24. package/backend/dist/models/userModel.js.map +1 -1
  25. package/backend/dist/persistence/postgresResourceRepositories.js +3 -3
  26. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
  27. package/backend/dist/persistence/sqliteResourceRepositories.js +3 -3
  28. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
  29. package/backend/dist/routes/calendar.js +2 -2
  30. package/backend/dist/routes/calendar.js.map +1 -1
  31. package/backend/dist/routes/documents.js +2 -2
  32. package/backend/dist/routes/documents.js.map +1 -1
  33. package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
  34. package/backend/dist/routes/huggingfaceHub.js +47 -21
  35. package/backend/dist/routes/huggingfaceHub.js.map +1 -1
  36. package/backend/dist/routes/preferences.d.ts.map +1 -1
  37. package/backend/dist/routes/preferences.js +2 -1
  38. package/backend/dist/routes/preferences.js.map +1 -1
  39. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  40. package/backend/dist/services/agentCliService.js +3 -1
  41. package/backend/dist/services/agentCliService.js.map +1 -1
  42. package/backend/dist/services/automationService.d.ts.map +1 -1
  43. package/backend/dist/services/automationService.js +3 -4
  44. package/backend/dist/services/automationService.js.map +1 -1
  45. package/backend/dist/services/chatService.d.ts.map +1 -1
  46. package/backend/dist/services/chatService.js +11 -11
  47. package/backend/dist/services/chatService.js.map +1 -1
  48. package/backend/dist/services/chatToolRuntimeService.d.ts +11 -0
  49. package/backend/dist/services/chatToolRuntimeService.d.ts.map +1 -1
  50. package/backend/dist/services/chatToolRuntimeService.js +2 -13
  51. package/backend/dist/services/chatToolRuntimeService.js.map +1 -1
  52. package/backend/dist/services/codexOAuthService.js +11 -7
  53. package/backend/dist/services/codexOAuthService.js.map +1 -1
  54. package/backend/dist/services/documentService.d.ts.map +1 -1
  55. package/backend/dist/services/documentService.js +3 -3
  56. package/backend/dist/services/documentService.js.map +1 -1
  57. package/backend/dist/services/galleryService.d.ts.map +1 -1
  58. package/backend/dist/services/galleryService.js +2 -2
  59. package/backend/dist/services/galleryService.js.map +1 -1
  60. package/backend/dist/services/libreClawService.d.ts +1 -1
  61. package/backend/dist/services/libreClawService.d.ts.map +1 -1
  62. package/backend/dist/services/libreClawService.js +16 -16
  63. package/backend/dist/services/libreClawService.js.map +1 -1
  64. package/backend/dist/services/memoryService.d.ts.map +1 -1
  65. package/backend/dist/services/memoryService.js +2 -2
  66. package/backend/dist/services/memoryService.js.map +1 -1
  67. package/backend/dist/services/mutationEngineService.js +2 -2
  68. package/backend/dist/services/mutationEngineService.js.map +1 -1
  69. package/backend/dist/services/ollamaService.d.ts +7 -2
  70. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  71. package/backend/dist/services/ollamaService.js +120 -98
  72. package/backend/dist/services/ollamaService.js.map +1 -1
  73. package/backend/dist/services/ollamaSettingsService.js +1 -1
  74. package/backend/dist/services/ollamaSettingsService.js.map +1 -1
  75. package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -1
  76. package/backend/dist/services/pluginAudioGenerationService.js +24 -11
  77. package/backend/dist/services/pluginAudioGenerationService.js.map +1 -1
  78. package/backend/dist/services/pluginCredentialsService.js +2 -2
  79. package/backend/dist/services/pluginCredentialsService.js.map +1 -1
  80. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  81. package/backend/dist/services/pluginEmbeddingService.js +20 -16
  82. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  83. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  84. package/backend/dist/services/pluginImageGenerationService.js +93 -62
  85. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  86. package/backend/dist/services/pluginSTTService.d.ts.map +1 -1
  87. package/backend/dist/services/pluginSTTService.js +15 -11
  88. package/backend/dist/services/pluginSTTService.js.map +1 -1
  89. package/backend/dist/services/pluginService.d.ts.map +1 -1
  90. package/backend/dist/services/pluginService.js +26 -23
  91. package/backend/dist/services/pluginService.js.map +1 -1
  92. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  93. package/backend/dist/services/pluginTTSService.js +34 -27
  94. package/backend/dist/services/pluginTTSService.js.map +1 -1
  95. package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
  96. package/backend/dist/services/pluginVariablesService.js +2 -2
  97. package/backend/dist/services/pluginVariablesService.js.map +1 -1
  98. package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -1
  99. package/backend/dist/services/pluginVideoGenerationService.js +33 -24
  100. package/backend/dist/services/pluginVideoGenerationService.js.map +1 -1
  101. package/backend/dist/services/preferencesService.d.ts +5 -0
  102. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  103. package/backend/dist/services/preferencesService.js +15 -10
  104. package/backend/dist/services/preferencesService.js.map +1 -1
  105. package/backend/dist/services/promptService.d.ts.map +1 -1
  106. package/backend/dist/services/promptService.js +4 -4
  107. package/backend/dist/services/promptService.js.map +1 -1
  108. package/backend/dist/services/skillService.d.ts.map +1 -1
  109. package/backend/dist/services/skillService.js +6 -6
  110. package/backend/dist/services/skillService.js.map +1 -1
  111. package/backend/dist/services/toolApprovalService.d.ts.map +1 -1
  112. package/backend/dist/services/toolApprovalService.js +2 -3
  113. package/backend/dist/services/toolApprovalService.js.map +1 -1
  114. package/backend/dist/services/toolServerService.d.ts.map +1 -1
  115. package/backend/dist/services/toolServerService.js +4 -5
  116. package/backend/dist/services/toolServerService.js.map +1 -1
  117. package/backend/dist/services/workApprovalService.d.ts.map +1 -1
  118. package/backend/dist/services/workApprovalService.js +3 -3
  119. package/backend/dist/services/workApprovalService.js.map +1 -1
  120. package/backend/dist/services/workModelProviderService.d.ts +13 -2
  121. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  122. package/backend/dist/services/workModelProviderService.js +16 -5
  123. package/backend/dist/services/workModelProviderService.js.map +1 -1
  124. package/backend/dist/services/workPolicyService.d.ts.map +1 -1
  125. package/backend/dist/services/workPolicyService.js +2 -2
  126. package/backend/dist/services/workPolicyService.js.map +1 -1
  127. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  128. package/backend/dist/services/workTaskService.js +7 -7
  129. package/backend/dist/services/workTaskService.js.map +1 -1
  130. package/backend/dist/storage.d.ts.map +1 -1
  131. package/backend/dist/storage.js +2 -2
  132. package/backend/dist/storage.js.map +1 -1
  133. package/backend/dist/types/index.d.ts +1 -0
  134. package/backend/dist/types/index.d.ts.map +1 -1
  135. package/backend/dist/types/index.js.map +1 -1
  136. package/backend/dist/utils/backgroundSettings.d.ts +7 -0
  137. package/backend/dist/utils/backgroundSettings.d.ts.map +1 -0
  138. package/backend/dist/utils/backgroundSettings.js +39 -0
  139. package/backend/dist/utils/backgroundSettings.js.map +1 -0
  140. package/backend/dist/utils/hash.js +1 -1
  141. package/backend/dist/utils/hash.js.map +1 -1
  142. package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
  143. package/backend/dist/utils/providerFetch.d.ts +90 -0
  144. package/backend/dist/utils/providerFetch.d.ts.map +1 -0
  145. package/backend/dist/utils/providerFetch.js +316 -0
  146. package/backend/dist/utils/providerFetch.js.map +1 -0
  147. package/backend/dist/utils/websocketCloseCodes.d.ts +31 -0
  148. package/backend/dist/utils/websocketCloseCodes.d.ts.map +1 -0
  149. package/backend/dist/utils/websocketCloseCodes.js +134 -0
  150. package/backend/dist/utils/websocketCloseCodes.js.map +1 -0
  151. package/backend/dist/workScreenServer.d.ts.map +1 -1
  152. package/backend/dist/workScreenServer.js +7 -2
  153. package/backend/dist/workScreenServer.js.map +1 -1
  154. package/backend/package.json +5 -14
  155. package/bin/cli-args.js +71 -0
  156. package/bin/cli.js +14 -3
  157. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  158. package/frontend/dist/assets/index-Bv773ECu.js +17 -0
  159. package/frontend/dist/assets/index-CxFIHoRc.css +1 -0
  160. package/frontend/dist/index.html +26 -25
  161. package/frontend/dist/js/{ArtifactContainer-BB6A8cT5.js → ArtifactContainer-Cdrv0kJM.js} +1 -1
  162. package/frontend/dist/js/{ArtifactDemoPage-Bf1dW5Z3.js → ArtifactDemoPage-BcXPfD-W.js} +1 -1
  163. package/frontend/dist/js/{ArtifactSandboxFrame-DsZW0Axy.js → ArtifactSandboxFrame-5qM5QELi.js} +1 -1
  164. package/frontend/dist/js/ArtifactSlideOutPanel-tuGsj_HW.js +1 -0
  165. package/frontend/dist/js/AutomationModal-DL9kNzgL.js +1 -0
  166. package/frontend/dist/js/AutomationsPage-BMtR7wCN.js +1 -0
  167. package/frontend/dist/js/{AvatarUpload-gfZ9QWR3.js → AvatarUpload-DrfSzzOZ.js} +1 -1
  168. package/frontend/dist/js/{Button-BQ5JnUVj.js → Button-BxwbQ5xw.js} +1 -1
  169. package/frontend/dist/js/CalendarPage-BBkLlXa5.js +1 -0
  170. package/frontend/dist/js/ChannelsPage-C2KWU3sZ.js +1 -0
  171. package/frontend/dist/js/ChatPage-CWsAjCPP.js +14 -0
  172. package/frontend/dist/js/ConnectModels-flyZgito.js +1 -0
  173. package/frontend/dist/js/{EvaluationsPage-Cydglp6R.js → EvaluationsPage-DUntWRVo.js} +2 -2
  174. package/frontend/dist/js/{FirstTimeSetup-C5cc-bc9.js → FirstTimeSetup-CMQ000Hh.js} +1 -1
  175. package/frontend/dist/js/{GalleryPage-Dvq2GVoH.js → GalleryPage-DNSo3Q0p.js} +1 -1
  176. package/frontend/dist/js/HomePage-BOXsuk3g.js +1 -0
  177. package/frontend/dist/js/LanguageSwitcher-BIrE0C-N.js +1 -0
  178. package/frontend/dist/js/LibreClawPage-D97-90n6.js +1 -0
  179. package/frontend/dist/js/{Logo-BlcOFpac.js → Logo-BHz_QQlV.js} +1 -1
  180. package/frontend/dist/js/{LogoMark-CNeQ6eO9.js → LogoMark-BDqTSfCe.js} +1 -1
  181. package/frontend/dist/js/ModelManagerModals-DzEVkCuT.js +1 -0
  182. package/frontend/dist/js/NotesPage-VBGqE4aV.js +3 -0
  183. package/frontend/dist/js/{PasswordStrengthMeter-DVFLKG_-.js → PasswordStrengthMeter-DLQ5jaO_.js} +1 -1
  184. package/frontend/dist/js/{PersonasPage-DK9-SDZQ.js → PersonasPage-D8-4PyoM.js} +2 -2
  185. package/frontend/dist/js/PluginUsagePage-CHcweo11.js +1 -0
  186. package/frontend/dist/js/RichMessageContent-D7wqrY68.js +1 -0
  187. package/frontend/dist/js/RichMessageContent-yWLHf4YS.js +3 -0
  188. package/frontend/dist/js/SettingsModal-CxVt1ObR.js +19 -0
  189. package/frontend/dist/js/SettingsToggle-DdhWCK7-.js +1 -0
  190. package/frontend/dist/js/{ShareDialog-CZpU1itx.js → ShareDialog-J5zbwIWY.js} +1 -1
  191. package/frontend/dist/js/{SystemPage-BVaaKTRs.js → SystemPage-CEjZpR5I.js} +1 -1
  192. package/frontend/dist/js/UserManagementPanel-Dhwk4I0s.js +1 -0
  193. package/frontend/dist/js/{WhatsNewModal-CoFCdUpf.js → WhatsNewModal-5lCndkFc.js} +1 -1
  194. package/frontend/dist/js/WorkPage-c8xOdYyy.js +7 -0
  195. package/frontend/dist/js/api-CHEuZtwG.js +1 -0
  196. package/frontend/dist/js/{api-DQdJeQjd.js → api-DEOxp9DN.js} +1 -1
  197. package/frontend/dist/js/{appNavigation-DRM2Jr4r.js → appNavigation-DToyRu19.js} +1 -1
  198. package/frontend/dist/js/appStore-Bsxed1km.js +2 -0
  199. package/frontend/dist/js/appVersion-CgCvuf4s.js +1 -0
  200. package/frontend/dist/js/{ar-C8Izi_rT.js → ar-DNI77Stn.js} +1 -1
  201. package/frontend/dist/js/authStore-8w9Idb5o.js +4 -0
  202. package/frontend/dist/js/authStore-DwmcyHDN.js +1 -0
  203. package/frontend/dist/js/{bn-BJJgi-6Q.js → bn-u6oyZr4U.js} +1 -1
  204. package/frontend/dist/js/{chatStore-8jYk48hC.js → chatStore-lyGhYu24.js} +3 -3
  205. package/frontend/dist/js/composerStyles-DqJg-2vE.js +1 -0
  206. package/frontend/dist/js/{config-D4dduT3C.js → config-B5SBQwEe.js} +1 -1
  207. package/frontend/dist/js/{cs-DheVrMUl.js → cs-BIkJ6jwb.js} +1 -1
  208. package/frontend/dist/js/{da-BLszIs3a.js → da-DV3V6XJ_.js} +1 -1
  209. package/frontend/dist/js/{de-BvWdcr7T.js → de-DdcTQ-vn.js} +1 -1
  210. package/frontend/dist/js/{es-CQ8Yauda.js → es-Cw-ozFaX.js} +1 -1
  211. package/frontend/dist/js/{evaluationsApi-CBKjxZUn.js → evaluationsApi-BvkmhMgQ.js} +1 -1
  212. package/frontend/dist/js/{fr-BD5h-w8z.js → fr-Y2NfnlYR.js} +1 -1
  213. package/frontend/dist/js/{hi-IlRhC5IE.js → hi-BKU62_1Y.js} +1 -1
  214. package/frontend/dist/js/{id-DalGMQEJ.js → id-q6wo4InR.js} +1 -1
  215. package/frontend/dist/js/{is-DuQqmHeS.js → is-_B6QblCu.js} +1 -1
  216. package/frontend/dist/js/{it-DDaqAdB1.js → it-NUupXhzK.js} +1 -1
  217. package/frontend/dist/js/{ja-CYCu9F9Y.js → ja-BUvl9RXq.js} +1 -1
  218. package/frontend/dist/js/{ko-P3JZPOXE.js → ko-df4leR83.js} +1 -1
  219. package/frontend/dist/js/{messageCodeStyles-0_YpQDk4.js → messageCodeStyles-DchDafYE.js} +2 -2
  220. package/frontend/dist/js/{ms-B3ZIqlUn.js → ms-CN-7Q9S2.js} +1 -1
  221. package/frontend/dist/js/{nl-1Qpsmmz1.js → nl-OEm4uNIo.js} +1 -1
  222. package/frontend/dist/js/{pl-ErrMri3_.js → pl-B9pHpjg7.js} +1 -1
  223. package/frontend/dist/js/{pt-0T0R9AtX.js → pt-D3uaEKud.js} +1 -1
  224. package/frontend/dist/js/{ru-B34INyPg.js → ru-z9H07lhi.js} +1 -1
  225. package/frontend/dist/js/{sv-BSqDwAur.js → sv-GkQDA4wx.js} +1 -1
  226. package/frontend/dist/js/{teamEventStream-RoMYo102.js → teamEventStream-C0_UAzCG.js} +1 -1
  227. package/frontend/dist/js/{th-DK9M4-Iy.js → th-0hzCkDzt.js} +1 -1
  228. package/frontend/dist/js/{tr-DUrkEwr1.js → tr-CZDobfHQ.js} +1 -1
  229. package/frontend/dist/js/ui-BQojEu4t.js +2 -0
  230. package/frontend/dist/js/{ui-vendor-6y6qiSk5.js → ui-vendor-BvD5yGW1.js} +1 -1
  231. package/frontend/dist/js/{uk-B5DYTi0e.js → uk-BwspIPCI.js} +1 -1
  232. package/frontend/dist/js/{useChat-ImXXcy0q.js → useChat-CDllZR7C.js} +1 -1
  233. package/frontend/dist/js/useDialogFocus-BQLdAGYH.js +1 -0
  234. package/frontend/dist/js/{useTranslation-D0mJ4NnO.js → useTranslation-rdLmo6zV.js} +1 -1
  235. package/frontend/dist/js/{utils-Bn0RE9_8.js → utils-CKWltgs8.js} +1 -1
  236. package/frontend/dist/js/utils-vendor-Bla8iz2s.js +1 -0
  237. package/frontend/dist/js/{vi-CrtPQUIM.js → vi-Dipdv5ta.js} +1 -1
  238. package/frontend/dist/js/workApi-0L8fBGq1.js +6 -0
  239. package/frontend/dist/js/workApi-BjDBLsFh.js +1 -0
  240. package/frontend/dist/js/{zh-gbOKajYe.js → zh-CgdWmtP_.js} +1 -1
  241. package/package.json +6 -16
  242. package/plugins/codex-oauth.json +1 -0
  243. package/frontend/dist/assets/index-DegYzMyw.js +0 -70
  244. package/frontend/dist/assets/index-gKj8Y1JB.css +0 -1
  245. package/frontend/dist/js/ArtifactSlideOutPanel-Cartcixp.js +0 -1
  246. package/frontend/dist/js/AutomationModal-BI_3nFeg.js +0 -1
  247. package/frontend/dist/js/AutomationsPage-ChMXj4UG.js +0 -1
  248. package/frontend/dist/js/CalendarPage-Ce1ud5St.js +0 -1
  249. package/frontend/dist/js/ChannelsPage-kl8zJ2HA.js +0 -1
  250. package/frontend/dist/js/ChatPage-Bj98c6rc.js +0 -14
  251. package/frontend/dist/js/ConnectModels-CPftHmE3.js +0 -1
  252. package/frontend/dist/js/HomePage-zVjADRoX.js +0 -1
  253. package/frontend/dist/js/LibreClawPage-x0Qmtcnc.js +0 -1
  254. package/frontend/dist/js/ModelManagerModals-K1oiXMTv.js +0 -1
  255. package/frontend/dist/js/NotesPage-BnqBv-n1.js +0 -3
  256. package/frontend/dist/js/PluginUsagePage-DX9uxdRr.js +0 -1
  257. package/frontend/dist/js/RichMessageContent-BzfhfzQ4.js +0 -1
  258. package/frontend/dist/js/RichMessageContent-XMkRvBen.js +0 -3
  259. package/frontend/dist/js/SettingsModal-CMOwEhkG.js +0 -19
  260. package/frontend/dist/js/SettingsToggle-B7UynBmZ.js +0 -1
  261. package/frontend/dist/js/UserManagementPanel-BxAvybHj.js +0 -1
  262. package/frontend/dist/js/WorkPage-Du6llCSU.js +0 -7
  263. package/frontend/dist/js/api-CatP45JH.js +0 -1
  264. package/frontend/dist/js/appStore-BXbVcTeo.js +0 -2
  265. package/frontend/dist/js/appVersion-BUroqcki.js +0 -1
  266. package/frontend/dist/js/authStore-DkqtNSYP.js +0 -4
  267. package/frontend/dist/js/authStore-bqAN5v4N.js +0 -1
  268. package/frontend/dist/js/axios-CYkJpKn8.js +0 -1
  269. package/frontend/dist/js/ui-UU79S5lB.js +0 -2
  270. package/frontend/dist/js/useDictation-eMIAncoT.js +0 -1
  271. package/frontend/dist/js/utils-vendor-BbPbaAuC.js +0 -9
  272. package/frontend/dist/js/webauthnClient-CPSq528Q.js +0 -1
  273. package/frontend/dist/js/workApi-BM8qVq_w.js +0 -1
  274. package/frontend/dist/js/workApi-xhF57amo.js +0 -6
@@ -0,0 +1,7 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/OptimizedSyntaxHighlighter-SkJc7ZMe.js","js/OptimizedSyntaxHighlighter-CtQ_FGCX.js","js/rolldown-runtime-hePW80VL.js","js/react-vendor-D0Ec-185.js","js/syntax-highlight-DTWfgxYh.js","js/markdown-core-D067gSd8.js","assets/xterm-B8QFf3JU.css"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-vendor-D0Ec-185.js";import{d as r,f as i,l as a,u as o}from"./router-vendor-CMbYTGdh.js";import{o as s,r as c}from"./logger-DnuT4jgB.js";import{t as l}from"./useTranslation-rdLmo6zV.js";import{t as u}from"./utils-CKWltgs8.js";import{T as d,t as f}from"./chatStore-lyGhYu24.js";import{A as p,Ct as m,Et as h,Ft as g,G as _,Hn as v,Jn as y,Jt as b,L as x,Ln as S,M as C,O as w,Sn as T,Un as E,Y as D,Yn as O,Yt as k,Z as A,Zt as j,_n as M,a as N,c as P,ct as F,et as ee,fn as I,fr as L,gt as R,hr as z,i as te,ir as B,l as V,mn as H,mr as ne,n as re,nr as ie,o as ae,pn as oe,q as se,qn as ce,rn as le,rt as ue,sn as de,tn as fe,un as pe,v as me,vr as he,vt as ge,wn as _e,xr as U,xt as ve,z as ye}from"./ui-vendor-BvD5yGW1.js";import{t as be}from"./config-B5SBQwEe.js";import{n as W,t as G}from"./workApi-0L8fBGq1.js";import{T as K,_ as q,f as xe,g as Se,h as Ce,s as we}from"./api-DEOxp9DN.js";import{a as Te,c as Ee,d as De,f as J,i as Oe,l as ke,o as Ae,r as je,s as Me,t as Ne}from"./authStore-8w9Idb5o.js";import{t as Pe}from"./appStore-Bsxed1km.js";import{t as Y}from"./Button-BxwbQ5xw.js";import{h as Fe,s as Ie}from"./ui-BQojEu4t.js";import{t as Le}from"./LogoMark-BDqTSfCe.js";import{t as Re}from"./workStatus-CcO9Fg41.js";import{t as ze}from"./RichMessageContent-yWLHf4YS.js";import{n as Be,t as Ve}from"./AutomationModal-DL9kNzgL.js";import{i as He,n as Ue,r as We,t as Ge}from"./composerStyles-DqJg-2vE.js";import{n as Ke,t as qe}from"./work-DVgm81bJ.js";var X=e(t(),1),Z=n(),Je=e=>Ke({model:e.name,providerType:e.isPlugin?`plugin`:`ollama`,providerId:e.isPlugin?e.pluginId:void 0}),Ye=e=>{let t=e.name.split(`/`).filter(Boolean),n=t[t.length-1]||e.name;return t.length>1?n.replace(/[-_]+/g,` `):n},Xe=e=>{let t=`${e.model} · `;return{name:e.model,model:e.model,size:0,digest:``,modified_at:``,details:{},isPlugin:e.providerType===`plugin`,pluginId:e.providerId,pluginName:e.providerType===`plugin`?e.label.startsWith(t)?e.label.slice(t.length):e.providerId:void 0}};function Ze({models:e,selectorModels:t,modelKey:n,running:r,loading:i,variant:a=`task`,disabled:o=!1,mentionAgents:s,dictationOwnerKey:c,remoteDisclosureDismissed:d,remoteDisclosureSaving:f,onModelChange:p,onDismissRemoteDisclosure:h,onModelsRefresh:_,onSubmit:y,onCancel:b}){let{t:x}=l(),[S,C]=(0,X.useState)(``),T=(0,X.useRef)(null),E=(0,X.useRef)(``),D=We({onStart:()=>{E.current=T.current?.value??``},onText:e=>{let t=E.current;C(t?`${t} ${e}`:e)},ownerKey:c}),O=D.phase!==`idle`,k=(0,X.useRef)(null),A=(0,X.useRef)(null),j=e.find(e=>e.key===n),M=j?.remote===!0,N=a===`landing`,P=(0,X.useMemo)(()=>{let n=new Set(t.map(Je)),r=e.filter(e=>!n.has(e.key)).map(Xe);return[...t,...r]},[e,t]);(0,X.useEffect)(()=>{let e=T.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,160)}px`)},[S]);let F=async()=>{await h()&&([k.current,A.current].find(e=>e&&e.offsetParent!==null)||k.current)?.focus()},ee=t=>{let n=e.find(e=>e.key===t)||e.find(e=>e.providerType===`ollama`&&e.model===t);n&&p(n.key)},I=async()=>{let e=S.trim();!e||i||o||!r&&!j||await y(e)&&C(``)},[R,z]=(0,X.useState)(null),[te,B]=(0,X.useState)(0),V=(e,t)=>{if(!s?.length){z(null);return}let n=/(?:^|\s)@([^\n@]{0,60})$/.exec(e.slice(0,t));if(!n){z(null);return}let r=n[1];z({start:t-r.length-1,end:t,query:r}),B(0)},H=R===null?[]:(s??[]).filter(e=>e.name.toLowerCase().startsWith(R.query.trimStart().toLowerCase())),ne=R!==null&&H.length>0,ie=e=>{if(!R)return;let t=`${S.slice(0,R.start)}@${e.name} ${S.slice(R.end)}`,n=R.start+e.name.length+2;C(t),z(null),requestAnimationFrame(()=>{let e=T.current;e&&(e.focus(),e.setSelectionRange(n,n))})};return(0,Z.jsxs)(`div`,{"data-testid":N?`work-landing-composer`:`work-task-composer`,"data-variant":a,className:u(`relative shrink-0`,N?`mt-6 w-full`:`border-t border-line bg-surface/95 px-3 py-3 backdrop-blur md:px-5`),children:[M&&!d&&(0,Z.jsx)(`div`,{className:u(`mx-auto mb-3 max-w-3xl`,!N&&`absolute inset-x-3 bottom-full z-30 md:inset-x-5`),children:(0,Z.jsxs)(`aside`,{"data-testid":`work-provider-disclosure-popover`,"aria-labelledby":`work-provider-disclosure-title`,"aria-live":`polite`,className:`relative rounded-2xl border border-warning-500/40 bg-surface-overlay p-3 pe-10 shadow-overlay backdrop-blur dark:border-warning-500/45`,children:[(0,Z.jsx)(`button`,{type:`button`,onClick:()=>void F(),disabled:f,className:`absolute end-2 top-2 inline-flex h-7 w-7 items-center justify-center rounded-lg text-ink-muted transition-colors hover:bg-warning-500/20 hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-warning-500 disabled:cursor-wait disabled:opacity-50`,"aria-label":x(`work.composer.remoteDismissLabel`,{defaultValue:`Dismiss remote provider notice`}),children:(0,Z.jsx)(re,{className:`h-4 w-4`})}),(0,Z.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Z.jsx)(`div`,{className:`mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-warning-500/20`,children:(0,Z.jsx)(v,{"data-testid":`work-provider-disclosure-accent`,className:`h-4 w-4 text-warning-500`,"aria-hidden":`true`})}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`p`,{id:`work-provider-disclosure-title`,className:`text-sm font-semibold text-ink`,children:x(`work.composer.remoteTitle`,{defaultValue:`Remote provider`})}),(0,Z.jsx)(`p`,{className:`mt-0.5 text-xs leading-relaxed text-ink-muted`,children:x(`work.composer.remoteHint`,{defaultValue:`Conversation and tool output are sent to the configured service. One autonomous run can make multiple provider calls and may incur charges. Workspace files stay local unless a tool returns their contents.`})}),(0,Z.jsx)(`div`,{className:`mt-2.5 flex justify-end`,children:(0,Z.jsx)(Y,{"data-testid":`work-provider-disclosure-dismiss`,type:`button`,variant:`ghost`,size:`sm`,loading:f,className:`h-7 border-warning-500 bg-warning-500 px-2.5 text-xs text-[#3d120c] hover:bg-warning-500/90 hover:text-[#3d120c]`,onClick:()=>void F(),children:x(`work.composer.remoteDismiss`,{defaultValue:`Dismiss`})})})]})]})]})}),(0,Z.jsxs)(`form`,{className:`relative mx-auto w-full max-w-3xl`,onSubmit:e=>{e.preventDefault(),I()},children:[ne&&(0,Z.jsx)(`div`,{"data-testid":`work-mention-menu`,role:`listbox`,"aria-label":x(`work.composer.mentionAgents`,{defaultValue:`Mention an agent`}),className:`absolute bottom-full start-2 z-40 mb-2 w-64 overflow-hidden rounded-xl border border-line bg-surface-overlay shadow-overlay backdrop-blur`,children:H.slice(0,6).map((e,t)=>(0,Z.jsx)(`button`,{type:`button`,role:`option`,"aria-selected":t===te,"data-testid":`work-mention-option`,className:u(`flex w-full items-center gap-2 px-3 py-2 text-start text-sm transition-colors`,t===te?`bg-primary-500/10 text-ink`:`text-ink-muted hover:bg-surface-subtle hover:text-ink`),onMouseDown:t=>{t.preventDefault(),ie(e)},children:(0,Z.jsxs)(`span`,{dir:`auto`,className:`truncate`,children:[`@`,e.name]})},e.id))}),(0,Z.jsxs)(`div`,{"data-testid":`work-composer-surface`,className:Ue,children:[(0,Z.jsx)(`textarea`,{ref:T,"data-testid":`work-composer-input`,dir:`auto`,value:S,onChange:e=>{C(e.target.value),V(e.target.value,e.target.selectionStart??e.target.value.length)},onClick:e=>V(e.currentTarget.value,e.currentTarget.selectionStart??e.currentTarget.value.length),onBlur:()=>z(null),onKeyDown:e=>{if(ne){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=Math.min(H.length,6);B(n=>e.key===`ArrowDown`?(n+1)%t:(n-1+t)%t);return}if(e.key===`Enter`||e.key===`Tab`){e.preventDefault(),ie(H[te]);return}if(e.key===`Escape`){e.preventDefault(),z(null);return}}e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),I())},disabled:o,rows:1,className:u(`m-0 block max-h-[160px] w-full resize-none overflow-y-auto rounded-none border-0 bg-transparent px-2 pt-1.5 pb-2 text-[0.9375rem] leading-relaxed text-ink shadow-none outline-none placeholder:text-ink-subtle focus:border-0 focus:bg-transparent focus:ring-0 disabled:cursor-not-allowed disabled:opacity-60`,N?`min-h-20`:`min-h-9`),placeholder:x(`work.composer.placeholder`,{defaultValue:`Describe what you want to build or change…`})}),(0,Z.jsxs)(`div`,{className:`mt-1 flex min-w-0 items-center gap-2`,children:[(0,Z.jsx)(`div`,{className:`hidden min-w-0 flex-1 sm:block`,children:(0,Z.jsx)(He,{models:P,selectedModel:n,onModelChange:e=>ee(e.target.value),onModelsRefresh:()=>void _(),getModelValue:Je,getModelLabel:Ye,getModelTitle:e=>e.name,triggerRef:k,triggerTestId:`work-model-selector-trigger`,selectTestId:`work-model-select`,ariaLabel:x(`work.composer.model`,{defaultValue:`Work model`}),disabled:r||e.length===0,className:`min-w-0 w-full max-w-[230px]`,compact:!0})}),(0,Z.jsx)(`div`,{className:`min-w-0 flex-1 sm:hidden`,children:(0,Z.jsx)(He,{models:P,selectedModel:n,onModelChange:e=>ee(e.target.value),onModelsRefresh:()=>void _(),getModelValue:Je,getModelLabel:Ye,getModelTitle:e=>e.name,triggerRef:A,triggerTestId:`work-model-selector-trigger-mobile`,selectTestId:`work-model-select-mobile`,ariaLabel:x(`work.composer.model`,{defaultValue:`Work model`}),disabled:r||e.length===0,className:`min-w-0 w-full`,compact:!0})}),D.supported&&(0,Z.jsx)(Y,{"data-testid":`work-voice-input`,type:`button`,variant:`ghost`,size:`sm`,disabled:o,"aria-pressed":O,className:u(`flex h-9 w-9 shrink-0 touch-manipulation items-center justify-center rounded-full p-0 transition-colors duration-150`,O?`animate-pulse bg-red-50 text-red-500 dark:bg-red-900/20`:`text-ink-muted hover:bg-surface-subtle hover:text-ink`),title:x(O?`chat.input.voiceStop`:`chat.input.voiceInput`),"aria-label":x(O?`chat.input.voiceStop`:`chat.input.voiceInput`),onClick:()=>void D.toggle(),children:D.phase===`starting`?(0,Z.jsx)(g,{className:`h-4 w-4 animate-spin`}):D.phase===`transcribing`?(0,Z.jsx)(w,{className:`h-4 w-4 fill-current`}):(0,Z.jsx)(m,{className:`h-4 w-4`})}),r&&(0,Z.jsx)(Y,{"data-testid":`work-cancel-button`,type:`button`,variant:`ghost`,size:`sm`,disabled:i,className:`flex h-9 w-9 shrink-0 touch-manipulation items-center justify-center rounded-full bg-error-500/15 p-0 text-error-600 transition-colors duration-150 hover:bg-error-500/25 dark:text-error-400`,title:x(`work.composer.cancel`,{defaultValue:`Stop`}),"aria-label":x(`work.composer.cancel`,{defaultValue:`Stop`}),onClick:()=>void b(),children:i?(0,Z.jsx)(g,{className:`h-4 w-4 animate-spin`}):(0,Z.jsx)(w,{className:`h-4 w-4 fill-current`})}),(0,Z.jsx)(Y,{"data-testid":`work-submit-button`,type:`submit`,variant:`primary`,size:`sm`,disabled:i||o||!S.trim()||!r&&!j,className:Ge,title:x(`work.composer.send`,{defaultValue:`Run`}),"aria-label":x(`work.composer.send`,{defaultValue:`Run`}),children:i?(0,Z.jsx)(g,{className:`h-4 w-4 animate-spin`}):(0,Z.jsx)(L,{className:`h-4 w-4`})})]})]})]})]})}var Qe=e=>{let t=e.summary??{},n=[];for(let e of[`command`,`path`,`from`,`to`,`actions`]){let r=t[e];typeof r==`string`&&r&&n.push(`${e}: ${r}`)}return typeof t.actionCount==`number`&&n.push(`actions: ${t.actionCount}`),t.recursive===!0&&n.push(`recursive: true`),n.join(`
3
+ `)||e.name},$e=({taskId:e,approval:t,className:n})=>{let{t:r}=l(),[i,a]=(0,X.useState)(!1),o=async(n,i)=>{a(!0);try{await G.decideApproval(e,t.approvalId,n,i)}catch{a(!1),U.error(r(`work.approval.failed`))}};return(0,Z.jsxs)(`div`,{role:`alertdialog`,"aria-label":r(`work.approval.title`),"data-testid":`work-approval-card`,className:u(`rounded-lg border border-primary-300/70 bg-primary-50 p-3 text-sm dark:border-primary-700/60 dark:bg-primary-900/20`,n),children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 font-medium text-primary-800 dark:text-primary-200`,children:[(0,Z.jsx)(x,{className:`h-4 w-4 shrink-0`}),r(`work.approval.title`)]}),(0,Z.jsx)(`p`,{className:`mt-1 text-primary-800/90 dark:text-primary-100/80`,children:r(`work.approval.description`,{tool:t.name})}),(0,Z.jsx)(`pre`,{dir:`ltr`,className:`mt-2 max-h-32 overflow-auto whitespace-pre-wrap rounded bg-white/70 p-2 font-mono text-xs text-gray-700 dark:bg-dark-100 dark:text-gray-300`,children:Qe(t)}),(0,Z.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,Z.jsx)(Y,{size:`sm`,disabled:i,"data-testid":`work-approval-allow-once`,onClick:()=>void o(!0,`once`),children:r(`work.approval.allowOnce`)}),(0,Z.jsx)(Y,{size:`sm`,variant:`secondary`,disabled:i,"data-testid":`work-approval-allow-always`,onClick:()=>void o(!0,`always`),children:r(`work.approval.allowAlways`)}),(0,Z.jsx)(Y,{size:`sm`,variant:`ghost`,disabled:i,"data-testid":`work-approval-deny`,onClick:()=>void o(!1,`once`),children:r(`work.approval.deny`)})]})]})};function et({stats:e,budgetReason:t,className:n}){let{t:r}=l(),i=[[`rounds`,r(`work.live.stats.rounds`,{defaultValue:`Rounds`})],[`toolCalls`,r(`work.live.stats.toolCalls`,{defaultValue:`Tool calls`})],[`screenshots`,r(`work.live.stats.screenshots`,{defaultValue:`Screenshots`})],[`fences`,r(`work.live.stats.fences`,{defaultValue:`Fences`})],[`expectationsPassed`,r(`work.live.stats.checksPassed`,{defaultValue:`Checks passed`})],[`expectationsPending`,r(`work.live.stats.checksPending`,{defaultValue:`Checks pending`})],[`stallNudges`,r(`work.live.stats.stallNudges`,{defaultValue:`Stall nudges`})],[`ambiguityNudges`,r(`work.live.stats.ambiguityNudges`,{defaultValue:`Re-grounding nudges`})]].flatMap(([t,n])=>{let r=e[t];return typeof r==`number`&&r>0?[{key:t,label:n,value:r}]:[]});return i.length===0&&!t?null:(0,Z.jsxs)(`div`,{"data-testid":`work-run-stats`,className:u(`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-ink-subtle`,n),children:[(0,Z.jsx)(`span`,{className:`font-medium uppercase tracking-wide`,children:r(`work.live.stats.title`,{defaultValue:`Run summary`})}),i.map(e=>(0,Z.jsxs)(`span`,{className:`whitespace-nowrap`,children:[e.label,` `,(0,Z.jsx)(`span`,{className:`font-medium text-ink-muted`,children:e.value})]},e.key)),t&&(0,Z.jsxs)(`span`,{className:`whitespace-nowrap`,children:[r(`work.live.stats.stoppedBy`,{defaultValue:`Stopped by`}),` `,(0,Z.jsx)(`span`,{className:`font-medium text-ink-muted`,children:t})]})]})}async function tt(e){return{viewOnlyPassword:(await W.post(`/work/tasks/${encodeURIComponent(e)}/computer/start`)).data.data?.viewOnlyPassword}}async function nt(e){return(await W.get(`/work/tasks/${encodeURIComponent(e)}/computer/control`)).data.data??{agentWaiting:!1}}async function rt(e){let t=(await W.post(`/work/tasks/${encodeURIComponent(e)}/computer/control`)).data.data;if(!t?.controlPassword)throw Error(`The server did not grant screen control.`);return t}async function it(e){await W.delete(`/work/tasks/${encodeURIComponent(e)}/computer/control`)}async function at(e,t,n){await W.post(`/work/computer/skills/${encodeURIComponent(e)}/trace`,{outcome:t,...n?{note:n}:{}})}async function ot(e,t,n){return(await W.post(`/work/tasks/${encodeURIComponent(e)}/computer/anchor`,{x:t,y:n})).data.data??{}}async function st(e,t){let n=(await W.post(`/work/tasks/${encodeURIComponent(e)}/computer/teach`,t)).data.data;if(!n?.skill)throw Error(`The server did not save the recording.`);return{slug:n.skill.slug,name:n.skill.name,steps:n.steps,redactions:n.redactions}}async function ct(e){return ut(e,Oe)}async function lt(e){return ut(e,je)}async function ut(e,t){let n=(await W.post(`/auth/websocket-ticket`,{audience:`work-screen`,taskId:e})).data.data?.ticket;if(!n)throw Error(`The server did not issue a screen ticket.`);return t(e,n,{protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,websocketBaseUrl:void 0,production:!0})}var dt=e=>{if(e==null||e===``)return null;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}},ft=e=>{if(e<1e3)return`${Math.max(0,Math.round(e))}ms`;let t=Math.max(0,Math.round(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?`${n}:${String(r).padStart(2,`0`)}`:`${r}s`},pt=e=>{if(!e)return 0;let t=Array.from(e).length,n=e.trim()?e.trim().split(/\s+/u).length:0;return Math.max(n,Math.ceil(t/4))};function mt({run:e}){let[t,n]=(0,X.useState)();if((0,X.useEffect)(()=>{if(e.terminal||!e.startedAt)return;let t=window.setInterval(()=>n(Date.now()),1e3);return()=>window.clearInterval(t)},[e.startedAt,e.terminal]),!e.startedAt)return null;let r=e.finishedAt||t;return r?(0,Z.jsx)(`span`,{dir:`ltr`,className:`tabular-nums text-ink-subtle`,"aria-hidden":`true`,children:ft(r-e.startedAt)}):null}function ht({tool:e,expandedByDefault:t}){let{t:n}=l(),[r]=(0,X.useState)(e.status),[i,a]=(0,X.useState)(null),o=(0,X.useMemo)(()=>dt(e.arguments),[e.arguments]),s=e.output||null,c=!!(o||s),d=e.status===`error`,f=e.status===`running`,p=(0,X.useId)(),m=d?n(`work.activity.kinds.error`,{defaultValue:`Error`}):f?n(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}):n(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),h=i??(e.status===r?t:e.status===`error`);return(0,Z.jsxs)(`div`,{"data-testid":`work-live-tool`,"data-tool-id":e.id,className:u(`overflow-hidden rounded-xl border bg-surface-raised transition-colors`,d?`border-error-500/30`:`border-line`),children:[(0,Z.jsxs)(`button`,{type:`button`,disabled:!c,onClick:()=>{a(!h)},"aria-expanded":c?h:void 0,"aria-controls":c?p:void 0,"aria-label":`${m}: ${e.name}`,className:`flex min-h-10 w-full items-center gap-2 px-3 py-2 text-start outline-none hover:bg-surface-subtle focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500 disabled:cursor-default disabled:hover:bg-transparent`,children:[(0,Z.jsx)(`span`,{className:`flex h-5 w-5 shrink-0 items-center justify-center`,children:d?(0,Z.jsx)(v,{className:`h-3.5 w-3.5 text-error-500`}):f?(0,Z.jsx)(g,{className:`h-3.5 w-3.5 animate-spin text-[rgb(48,121,255)] motion-reduce:animate-none`}):(0,Z.jsx)(O,{className:`h-3.5 w-3.5 text-[rgb(76,212,117)]`})}),(0,Z.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-xs text-ink`,children:e.name}),e.durationMs!==void 0&&(0,Z.jsx)(`span`,{className:`shrink-0 text-[10px] tabular-nums text-ink-subtle`,children:ft(e.durationMs)}),c&&(0,Z.jsx)(y,{"aria-hidden":`true`,className:u(`h-3.5 w-3.5 shrink-0 text-ink-subtle transition-transform`,h&&`rotate-180`)})]}),c&&h&&(0,Z.jsxs)(`div`,{id:p,className:`border-t border-line bg-surface-subtle/50`,children:[o&&(0,Z.jsx)(`pre`,{dir:`ltr`,className:`max-h-48 overflow-auto whitespace-pre-wrap break-words px-3 py-2.5 text-left font-mono text-[11px] leading-relaxed text-ink-muted`,children:o}),s&&(0,Z.jsx)(`pre`,{dir:`ltr`,className:u(`max-h-64 overflow-auto whitespace-pre-wrap break-words border-t border-line px-3 py-2.5 text-left font-mono text-[11px] leading-relaxed`,d?`text-error-600`:`text-ink-muted`),children:s})]})]})}var gt=e=>{let t=e.split(`
4
+ `);for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n)return n}return``};function _t({content:e,streaming:t}){let{t:n}=l(),[r,i]=(0,X.useState)(!1),a=t&&!r?gt(e):``;return(0,Z.jsxs)(`details`,{"data-testid":`work-live-reasoning`,open:r,onToggle:e=>i(e.currentTarget.open),className:`group overflow-hidden rounded-xl border border-line bg-surface-subtle/70`,children:[(0,Z.jsxs)(`summary`,{className:`flex cursor-pointer list-none flex-col gap-1 px-3 py-2 marker:hidden [&::-webkit-details-marker]:hidden`,children:[(0,Z.jsxs)(`span`,{className:`flex items-center justify-between gap-3 text-xs font-medium text-ink-muted`,children:[(0,Z.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,Z.jsx)(ie,{className:u(`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`,t&&`animate-pulse-subtle motion-reduce:animate-none`)}),t?(0,Z.jsxs)(`span`,{className:`animate-shimmer truncate bg-gradient-to-r from-ink-subtle via-ink to-ink-subtle bg-[length:200%_100%] bg-clip-text text-transparent motion-reduce:animate-none motion-reduce:bg-none motion-reduce:text-ink-muted`,children:[n(`work.statusLabels.thinking`,{defaultValue:`Thinking`}),`…`]}):(0,Z.jsx)(`span`,{className:`truncate`,children:n(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})})]}),(0,Z.jsx)(y,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),a&&(0,Z.jsx)(`span`,{dir:`auto`,"data-testid":`work-live-reasoning-preview`,className:`block truncate text-[11px] leading-relaxed text-ink-subtle`,children:a})]}),(0,Z.jsx)(`div`,{className:`border-t border-line px-3 py-2.5`,children:(0,Z.jsx)(Fe,{content:e,isStreaming:t,className:`text-xs text-ink-muted`})})]})}var vt=(e,t,n)=>e===`queued`||e===`preparing`?t(`work.status.preparing`,{defaultValue:`Preparing isolated workspace…`}):e===`using_tool`?n?.name?`${t(`work.activity.toolActivity`,{defaultValue:`Tool activity`})} · ${n.name}`:t(`work.activity.toolActivity`,{defaultValue:`Tool activity`}):e===`completed`?t(`work.statusLabels.complete`,{defaultValue:`Complete`}):e===`needs_input`?t(`work.statusLabels.needsInput`,{defaultValue:`Needs input`}):e===`failed`?t(`work.statusLabels.error`,{defaultValue:`Error`}):e===`cancelled`?t(`work.statusLabels.needsInput`,{defaultValue:`Needs input`}):e===`responding`?t(`work.status.running`,{defaultValue:`Working in the local workspace…`}):t(`work.statusLabels.thinking`,{defaultValue:`Thinking`}),yt=(e,t)=>{if(e===`connecting`)return t(`work.live.connecting`,{defaultValue:`Connecting to live updates…`});if(e===`reconnecting`)return t(`work.live.reconnecting`,{defaultValue:`Reconnecting to live updates…`});if(e===`error`)return t(`work.live.unavailable`,{defaultValue:`Live updates unavailable`})};function bt({run:e,variant:t=`conversation`}){let{t:n}=l(),r=[...e.tools].reverse().find(e=>e.status===`running`),i=yt(e.connection,n)||vt(e.phase,n,r),a=!e.terminal,[o,s]=(0,X.useState)({}),c=(0,X.useCallback)((e,t)=>{s(n=>({...n,[e]:t})),at(e,t).catch(()=>{s(t=>{let n={...t};return delete n[e],n})})},[]),d=e.usage?.outputTokens,f=e.reasoning+e.response,m=d!==void 0&&d>0?d:f?pt(f):d,h=(d===void 0||d===0)&&!!f&&m!==void 0,g=e.usage?.tokensPerSecond;return(0,Z.jsxs)(`section`,{"data-testid":`work-live-run`,"data-run-id":e.runId,"data-phase":e.phase,"aria-busy":a||void 0,className:u(`min-w-0`,t===`activity`&&`rounded-2xl border border-line bg-surface p-3 shadow-subtle`),children:[(0,Z.jsxs)(`div`,{className:`mb-3 flex min-h-6 items-center gap-2 text-xs`,children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:u(`h-2 w-2 shrink-0 rounded-full`,e.phase===`failed`?`bg-[rgb(255,61,129)]`:e.phase===`completed`?`bg-[rgb(76,212,117)]`:e.phase===`needs_input`||e.phase===`cancelled`?`bg-[rgb(255,204,0)]`:e.connection===`error`?`bg-[rgb(255,61,129)]`:`bg-[rgb(48,121,255)]`,a&&`animate-pulse motion-reduce:animate-none`)}),(0,Z.jsx)(`span`,{dir:`auto`,title:e.connectionError,className:`min-w-0 flex-1 truncate font-medium text-ink-muted`,children:i}),e.round!==void 0&&(0,Z.jsx)(`span`,{dir:`ltr`,className:`shrink-0 tabular-nums text-ink-subtle`,children:e.roundLimit===void 0?`#${e.round}`:`${e.round}/${e.roundLimit}`}),(0,Z.jsx)(mt,{run:e})]}),t===`conversation`&&(0,Z.jsx)(`span`,{className:`sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:i}),e.skills.length>0&&(0,Z.jsxs)(`div`,{className:`mb-3 flex flex-wrap items-center gap-1.5`,children:[(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-line bg-surface-raised px-2 py-1 text-[10px] text-ink-muted`,children:[(0,Z.jsx)(C,{className:`h-3 w-3 text-primary-500`,"aria-hidden":`true`}),(0,Z.jsx)(`span`,{dir:`auto`,children:n(`work.live.skillsLoaded`,{count:e.skills.length,defaultValue:`Workspace skills · {{count}}`})})]}),e.terminal&&e.skills.filter(e=>e.id.startsWith(`taught:`)).map(e=>{let t=e.id.slice(7),r=o[t];return(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-line bg-surface-raised px-2 py-1 text-[10px] text-ink-muted`,children:[(0,Z.jsx)(`span`,{dir:`auto`,children:e.name}),r?(0,Z.jsx)(`span`,{className:`text-primary-500`,children:n(`work.live.skillTraceSaved`,{defaultValue:`noted`})}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`button`,{type:`button`,"data-testid":`skill-trace-success-${t}`,"aria-label":n(`work.live.skillWorked`,{defaultValue:`This procedure worked`}),title:n(`work.live.skillWorked`,{defaultValue:`This procedure worked`}),onClick:()=>c(t,`success`),className:`rounded px-1 hover:text-primary-600`,children:`✓`}),(0,Z.jsx)(`button`,{type:`button`,"data-testid":`skill-trace-failure-${t}`,"aria-label":n(`work.live.skillFailed`,{defaultValue:`This procedure failed`}),title:n(`work.live.skillFailed`,{defaultValue:`This procedure failed`}),onClick:()=>c(t,`failure`),className:`rounded px-1 hover:text-red-600`,children:`✕`})]})]},e.id)})]}),t===`conversation`?e.timeline.length>0&&(0,Z.jsx)(`div`,{"data-testid":`work-live-timeline`,className:`space-y-2`,children:e.timeline.map((t,n)=>{let r=n===e.timeline.length-1;if(t.kind===`reasoning`)return(0,Z.jsx)(_t,{content:t.text,streaming:a&&r},`segment-${n}`);if(t.kind===`tool`){let n=e.tools.find(e=>e.id===t.toolId);return n?(0,Z.jsx)(ht,{tool:n,expandedByDefault:n.status===`error`},n.id):null}return(0,Z.jsx)(Fe,{content:t.text,isStreaming:a&&r,className:`text-ink`},`segment-${n}`)})}):e.tools.length>0&&(0,Z.jsx)(`div`,{"data-testid":`work-live-tools`,className:`space-y-1.5`,children:e.tools.map(e=>(0,Z.jsx)(ht,{tool:e,expandedByDefault:e.status===`running`||e.status===`error`},e.id))}),e.error&&(0,Z.jsxs)(`div`,{role:`alert`,dir:`auto`,className:`mt-3 flex items-start gap-2 rounded-xl border border-error-500/30 bg-error-500/10 px-3 py-2.5 text-xs leading-relaxed text-error-600`,children:[(0,Z.jsx)(v,{className:`mt-0.5 h-3.5 w-3.5 shrink-0`}),(0,Z.jsx)(`span`,{children:e.error})]}),(m!==void 0||g!==void 0)&&(0,Z.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 border-t border-line pt-2 text-[10px] tabular-nums text-ink-subtle`,children:[m!==void 0&&(0,Z.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.generatedTokens`,{defaultValue:`Generated tokens:`}),` `,(0,Z.jsxs)(`bdi`,{dir:`ltr`,children:[h&&`≈`,m.toLocaleString()]})]}),g!==void 0&&(0,Z.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.speed`,{defaultValue:`Speed:`}),` `,(0,Z.jsxs)(`bdi`,{dir:`ltr`,children:[g.toFixed(1),` t/s`]})]})]}),e.terminal&&e.loopStats&&(0,Z.jsx)(et,{stats:e.loopStats,budgetReason:e.budgetReason,className:`mt-2`}),a&&!e.reasoning&&!e.response&&e.tools.length===0&&(0,Z.jsxs)(`div`,{"aria-hidden":`true`,className:`flex h-5 items-center gap-1 text-[rgb(48,121,255)]`,children:[(0,Z.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current motion-reduce:animate-none`}),(0,Z.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current [animation-delay:160ms] motion-reduce:animate-none`}),(0,Z.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current [animation-delay:320ms] motion-reduce:animate-none`})]}),t===`activity`&&e.tools.length===0&&(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-ink-muted`,children:[(0,Z.jsx)(p,{className:`h-3.5 w-3.5`}),n(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]})]})}var xt=e=>typeof e==`object`&&e?e:void 0;function St(e){let t=[];for(let n of e){let e=xt(n.metadata)??xt(n.arguments);if(!e)continue;let r=n.name===`write_file`?e.path:n.name===`move_file`?e.to:void 0;typeof r==`string`&&r&&!t.includes(r)&&t.push(r)}return t}function Ct({role:e,user:t,persona:n,size:r=`message`}){let[i,a]=(0,X.useState)(null);if(e===`assistant`)return n?(0,Z.jsx)(`img`,{src:Se(n,64),alt:n.name,"data-testid":`work-assistant-avatar`,onError:e=>q(e.currentTarget,n.name,64),className:u(`shrink-0 rounded-lg object-cover`,r===`empty`?`mx-auto mb-4 h-12 w-12`:`mt-0.5 h-8 w-8`)}):(0,Z.jsx)(`div`,{role:`img`,"aria-label":`Libre WebUI`,"data-testid":`work-assistant-avatar`,className:u(`flex shrink-0 items-center justify-center rounded-full border border-line bg-surface-raised text-ink shadow-subtle`,r===`empty`?`mx-auto mb-4 h-12 w-12`:`mt-0.5 h-8 w-8`),children:(0,Z.jsx)(Le,{label:null,className:u(r===`empty`?`h-6 w-6`:`h-4 w-4`)})});let o=t?.username||`User`,s=t?.avatar?.trim()||``,c=!!s&&s!==i;return(0,Z.jsx)(`div`,{role:c?void 0:`img`,"aria-label":c?void 0:o,"data-testid":`work-user-avatar`,className:u(`mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full`,c?`border border-line bg-surface-raised`:`bg-ink text-ink-inverse`),title:o,children:c?(0,Z.jsx)(`img`,{src:s,alt:o,className:`h-full w-full object-cover`,onError:()=>a(s)}):t?(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:`text-xs font-medium uppercase leading-none`,children:t.username.charAt(0)}):(0,Z.jsx)(P,{"aria-hidden":`true`,className:`h-4 w-4`})})}var wt=(e,t)=>{let n=e.metadata,r=n?.name??n?.toolName??n?.tool??n?.command;return typeof r==`string`&&r?r:t},Tt=e=>{let t=e.metadata?.toolCallId;return typeof t==`string`&&t?t:null},Et=(e,t,n)=>{let r=e??t,i=t?.kind===`error`||t?.metadata?.isError===!0||!t&&r?.kind===`error`,a=t?.metadata?.durationMs;return{id:(e??t)?.id??`tool`,name:r?wt(r,n):n,status:i?`error`:`completed`,arguments:e?.metadata,output:t?.content||(!t&&e?e.content:void 0),durationMs:typeof a==`number`?a:void 0}},Dt=(e,t)=>{let n=[],r=new Map,i=(e,t)=>{let r=n[n.length-1];return r?.item.type===`tools`?(r.item.tools.push(e),r.item.tools.length-1):(n.push({key:t,item:{type:`tools`,tools:[e]}}),0)};for(let a of e){if(a.kind===`reasoning`){n.push({key:a.id,item:{type:`reasoning`,message:a}});continue}if(a.role!==`tool`&&a.kind===`message`){n.push({key:a.id,item:{type:`message`,message:a}});continue}let e=Tt(a);if(a.kind===`tool_call`&&e){let o=i(Et(a,void 0,t),a.id);r.set(e,{itemIndex:n.length-1,toolIndex:o,call:a});continue}if(a.kind===`tool_result`&&e){let i=r.get(e);if(i){let o=n[i.itemIndex];if(o.item.type===`tools`){o.item.tools[i.toolIndex]=Et(i.call,a,t),r.delete(e);continue}}}i(Et(a.kind===`tool_call`?a:void 0,a.kind===`tool_call`?void 0:a,t),a.id)}return n};function Ot({message:e}){let{t}=l();return(0,Z.jsxs)(`details`,{"data-testid":`work-provider-reasoning`,className:`group ms-14 overflow-hidden rounded-xl border border-line bg-surface-subtle/70`,children:[(0,Z.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-2 text-xs font-medium text-ink-muted marker:hidden [&::-webkit-details-marker]:hidden`,children:[(0,Z.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,Z.jsx)(ie,{className:`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`}),(0,Z.jsx)(`span`,{className:`truncate`,children:t(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})})]}),(0,Z.jsx)(y,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),(0,Z.jsx)(`div`,{dir:`auto`,className:`border-t border-line px-3 py-2.5 text-xs leading-relaxed text-ink-muted`,children:(0,Z.jsx)(ze,{content:e.content,className:`text-xs`})})]})}function kt({task:e,user:t,loading:n,loadingOlder:r,liveRun:i,onLoadOlder:a,onOpenFile:o}){let{t:s}=l(),c=(0,X.useRef)(null),d=(0,X.useRef)(!0),[p,m]=(0,X.useState)(!1),h=f(e=>e.personas),_=e.personaId??(e.model?.startsWith(`persona:`)?e.model.slice(8):null),v=_?h[_]??null:null,y=(0,X.useMemo)(()=>[...e.messages||[]].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id)),[e.messages]),b=i?.runId,x=(0,X.useMemo)(()=>Dt(y.filter(e=>!(b&&e.runId===b&&e.role!==`user`)),s(`work.activity.toolActivity`,{defaultValue:`Tool activity`})),[b,y,s]),S=[...y].reverse().find(e=>e.role===`assistant`&&e.kind===`message`)?.id;(0,X.useEffect)(()=>{d.current=!0;let e=c.current;e&&(e.scrollTop=e.scrollHeight);let t=window.requestAnimationFrame(()=>m(!1));return()=>window.cancelAnimationFrame(t)},[e.id]),(0,X.useEffect)(()=>{let e=c.current,t;return e&&d.current?(e.scrollTop=e.scrollHeight,t=window.requestAnimationFrame(()=>m(!1))):e&&i&&(t=window.requestAnimationFrame(()=>m(!0))),()=>{t!==void 0&&window.cancelAnimationFrame(t)}},[i,y,e.status]);let C=async()=>{let e=c.current,t=e?.scrollHeight??0,n=e?.scrollTop??0;d.current=!1;try{await a(),requestAnimationFrame(()=>{let e=c.current;e&&(e.scrollTop=n+e.scrollHeight-t)})}catch{}};return n&&y.length===0?(0,Z.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center text-ink-muted`,children:(0,Z.jsx)(g,{className:`h-6 w-6 animate-spin`})}):(0,Z.jsxs)(`div`,{className:`relative flex min-h-0 flex-1`,children:[(0,Z.jsx)(`div`,{ref:c,onScroll:e=>{let t=e.currentTarget;d.current=t.scrollHeight-t.scrollTop-t.clientHeight<80,d.current&&m(!1)},className:`min-h-0 flex-1 overflow-y-auto`,children:(0,Z.jsx)(`div`,{className:`mx-auto flex min-h-full max-w-3xl flex-col px-4 py-6 md:px-6`,children:y.length===0&&!i?(0,Z.jsxs)(`div`,{className:`m-auto max-w-md text-center`,children:[(0,Z.jsx)(Ct,{role:`assistant`,persona:v,size:`empty`}),(0,Z.jsx)(`h2`,{className:`text-lg font-semibold tracking-tight text-ink`,children:s(`work.conversation.ready`,{defaultValue:`Workspace ready`})}),(0,Z.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed text-ink-muted`,children:s(`work.conversation.empty`,{defaultValue:`Continue the task below. This conversation and its files stay attached to this workspace.`})})]}):(0,Z.jsxs)(`div`,{className:`space-y-6`,children:[e.hasMoreMessages&&(0,Z.jsx)(`div`,{className:`flex justify-center`,children:(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-load-older-messages`,disabled:r,onClick:()=>void C(),className:`inline-flex items-center gap-2 rounded-lg border border-line bg-surface-raised px-3 py-1.5 text-xs font-medium text-ink-muted transition-colors hover:bg-surface-subtle hover:text-ink disabled:cursor-not-allowed disabled:opacity-60`,children:[r&&(0,Z.jsx)(g,{className:`h-3.5 w-3.5 animate-spin`}),s(`work.conversation.loadOlder`,{defaultValue:`Load older messages`})]})}),x.map(({key:n,item:r})=>{if(r.type===`reasoning`)return(0,Z.jsx)(Ot,{message:r.message},n);if(r.type===`tools`){let e=o?St(r.tools):[];return(0,Z.jsxs)(`div`,{className:`ms-14 space-y-1.5`,children:[r.tools.map(e=>(0,Z.jsx)(ht,{tool:e,expandedByDefault:!1},e.id)),e.length>0&&(0,Z.jsx)(`div`,{"data-testid":`work-file-chips`,className:`flex flex-wrap gap-1.5 pt-0.5`,children:e.map(e=>{let t=e.split(`/`).filter(Boolean).pop()??e;return(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-file-chip`,"data-path":e,onClick:()=>o?.(e),title:e,"aria-label":s(`work.conversation.openFile`,{defaultValue:`Open {{name}}`,name:t}),className:`flex max-w-full items-center gap-1.5 rounded-lg border border-line bg-surface px-2 py-1 text-[11px] text-ink transition-colors hover:border-line-strong hover:bg-surface-subtle`,children:[(0,Z.jsx)(H,{className:`h-3 w-3 shrink-0 text-ink-muted`}),(0,Z.jsx)(`span`,{className:`truncate`,dir:`ltr`,children:t})]},e)})})]},n)}let i=r.message,a=i.role===`user`,c=!a&&e.status===`running`&&i.id===S&&i.runId===e.activeRun?.id,l=e=>e&&typeof e==`object`&&typeof e.fromAgent==`string`?e.fromAgent:void 0,d=l(i.metadata?.delegation),f=l(i.metadata?.delegationReport),p=J(i.metadata?.loopStats);return(0,Z.jsxs)(`article`,{className:u(`flex gap-3`,a&&`flex-row-reverse`),children:[(0,Z.jsx)(Ct,{role:a?`user`:`assistant`,user:a?t:void 0,persona:a?void 0:v}),(0,Z.jsxs)(`div`,{className:u(`min-w-0 max-w-[88%]`,a&&`rounded-2xl rounded-se-md bg-ink px-4 py-2.5 text-ink-inverse`),children:[a?(0,Z.jsxs)(Z.Fragment,{children:[(d||f)&&(0,Z.jsx)(`p`,{"data-testid":`work-delegation-label`,className:`mb-1 text-[11px] font-medium uppercase tracking-wide opacity-70`,children:d?s(`work.conversation.delegatedBy`,{defaultValue:`Delegated by {{agent}}`,agent:d}):s(`work.conversation.reportFrom`,{defaultValue:`Report from {{agent}}`,agent:f})}),(0,Z.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap break-words text-sm leading-relaxed`,children:i.content})]}):c?(0,Z.jsx)(Fe,{content:i.content,className:`text-ink`}):(0,Z.jsx)(ze,{content:i.content,className:`text-sm text-ink`}),!a&&p&&(0,Z.jsx)(et,{stats:p,budgetReason:typeof i.metadata?.budgetReason==`string`?i.metadata.budgetReason:void 0,className:`mt-1.5`})]})]},i.id)}),i&&(0,Z.jsxs)(`article`,{className:`flex gap-3`,"data-testid":`work-live-run-message`,children:[(0,Z.jsx)(Ct,{role:`assistant`,persona:v}),(0,Z.jsxs)(`div`,{className:`min-w-0 max-w-[92%] flex-1`,children:[(0,Z.jsx)(bt,{run:i}),i.pendingApproval&&(0,Z.jsx)($e,{taskId:e.id,approval:i.pendingApproval,className:`mt-2`})]})]}),!i&&(e.status===`preparing`||e.status===`running`)&&(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 ps-14 text-xs text-ink-muted`,children:[(0,Z.jsx)(g,{className:`h-3.5 w-3.5 animate-spin`}),e.status===`preparing`?s(`work.status.preparing`,{defaultValue:`Preparing isolated workspace…`}):s(`work.status.running`,{defaultValue:`Working in the local workspace…`})]})]})})}),p&&(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-new-activity-button`,onClick:()=>{let e=c.current;e&&(e.scrollTop=e.scrollHeight),d.current=!0,m(!1)},className:`absolute bottom-4 left-1/2 z-10 inline-flex -translate-x-1/2 items-center gap-1.5 rounded-full border border-line bg-surface-overlay/95 px-3 py-2 text-xs font-medium text-ink shadow-overlay backdrop-blur transition-colors hover:bg-surface-raised`,children:[(0,Z.jsx)(z,{className:`h-3.5 w-3.5`}),s(`work.live.newActivity`,{defaultValue:`New activity`})]})]})}var At=45,jt=30,Mt=70,Nt=360,Pt=480,Ft=9,It=2,Lt=10,Rt=`libre-webui-work-split:`,zt=(e,t,n)=>Math.min(n,Math.max(t,e)),Bt=e=>`${Rt}${encodeURIComponent(e||`local`)}`,Vt=e=>{if(typeof window>`u`)return At;try{let t=window.localStorage.getItem(e);if(t===null||t.trim()===``)return At;let n=Number(t);return Number.isFinite(n)?zt(n,jt,Mt):At}catch{return At}},Ht=(e,t)=>{if(!(typeof window>`u`))try{window.localStorage.setItem(e,t.toFixed(2))}catch{}},Q=e=>{let t=Math.max(0,e-Ft);if(t===0)return{min:jt,max:Mt};let n=Math.max(jt,Nt/t*100),r=Math.min(Mt,(t-Pt)/t*100);if(n<=r)return{min:n,max:r};let i=zt(Nt/840*100,jt,Mt);return{min:i,max:i}},Ut=(e,t)=>zt(e,t.min,t.max);function Wt({conversation:e,workspace:t,userId:n,mobileSurface:r=`conversation`,className:i}){let{t:a,i18n:o}=l(),s=d(o.language),c=Bt(n),[f,p]=(0,X.useState)(()=>({storageKey:c,percent:Vt(c)})),[m,h]=(0,X.useState)(0),[g,_]=(0,X.useState)(!1),v=(0,X.useRef)(null),y=(0,X.useRef)(null),b=(0,X.useRef)(null),x=(0,X.useRef)(c),S=(0,X.useRef)(f.percent),C=(0,X.useRef)(null),w=f.storageKey===c?f.percent:Vt(c),T=(0,X.useMemo)(()=>Q(m),[m]),E=Ut(w,T),D=Math.round(E),O=100-D,k=(0,X.useCallback)(e=>{p({storageKey:c,percent:e})},[c]),A=(0,X.useCallback)(e=>{let t=Ut(e,Q(v.current?.getBoundingClientRect().width??0));S.current=t,C.current===null&&(C.current=window.requestAnimationFrame(()=>{C.current=null,k(S.current)}))},[k]),j=(0,X.useCallback)(()=>{if(b.current===null&&!g)return;C.current!==null&&(window.cancelAnimationFrame(C.current),C.current=null);let e=v.current?.getBoundingClientRect().width??0,t=Ut(S.current,Q(e));S.current=t,k(t),Ht(x.current,t);let n=b.current;b.current=null,n!==null&&y.current?.hasPointerCapture(n)&&y.current.releasePointerCapture(n),_(!1)},[g,k]),M=(0,X.useCallback)(e=>{let t=v.current?.getBoundingClientRect();if(!t)return S.current;let n=Math.max(1,t.width-Ft);return((s?t.right-e:e-t.left)-Ft/2)/n*100},[s]),N=e=>{e.button!==0||!e.isPrimary||(e.preventDefault(),e.stopPropagation(),b.current=e.pointerId,x.current=c,S.current=E,e.currentTarget.setPointerCapture(e.pointerId),_(!0))},P=(0,X.useCallback)(e=>{let t=Ut(e,T);S.current=t,k(t),Ht(c,t)},[T,k,c]),F=(0,X.useCallback)(()=>{P(At)},[P]),ee=e=>{let t=e.shiftKey?Lt:It,n=null;e.key===`ArrowLeft`?n=E+(s?t:-t):e.key===`ArrowRight`?n=E+(s?-t:t):e.key===`Home`?n=T.min:e.key===`End`?n=T.max:e.key===`Enter`&&(n=At),n!==null&&(e.preventDefault(),P(n))};(0,X.useEffect)(()=>{let e=v.current;if(!e)return;if(typeof ResizeObserver>`u`){let t=()=>h(e.getBoundingClientRect().width);return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)}let t=new ResizeObserver(e=>{let t=e[0];t&&h(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]),(0,X.useEffect)(()=>{if(!g)return;let e=document.body.style.cursor,t=document.body.style.userSelect;document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`;let n=e=>{e.pointerId===b.current&&(e.preventDefault(),A(M(e.clientX)))},r=e=>{e.pointerId===b.current&&j()};return window.addEventListener(`pointermove`,n,{passive:!1}),window.addEventListener(`pointerup`,r),window.addEventListener(`pointercancel`,r),window.addEventListener(`blur`,j),()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r),window.removeEventListener(`pointercancel`,r),window.removeEventListener(`blur`,j),document.body.style.cursor=e,document.body.style.userSelect=t}},[j,g,M,A]),(0,X.useEffect)(()=>()=>{C.current!==null&&window.cancelAnimationFrame(C.current),b.current!==null&&Ht(x.current,S.current)},[]);let I={gridTemplateColumns:`minmax(0, ${E}fr) ${Ft}px minmax(0, ${100-E}fr)`};return(0,Z.jsxs)(`div`,{ref:v,"data-testid":`work-split-pane`,"data-split-percent":E.toFixed(2),"data-resizing":g?`true`:`false`,className:u(`relative flex min-h-0 min-w-0 flex-1 overflow-hidden xl:grid`,i),style:I,children:[(0,Z.jsx)(`section`,{id:`work-conversation-panel`,"data-testid":`work-conversation-panel`,className:u(`min-h-0 min-w-0 flex-1 flex-col bg-transparent xl:flex`,r===`conversation`?`flex`:`hidden`),children:e}),(0,Z.jsxs)(`div`,{ref:y,role:`separator`,"aria-orientation":`vertical`,"aria-controls":`work-conversation-panel work-workspace-panel`,"aria-label":a(`work.workspace.resize`,{defaultValue:`Resize conversation and workspace`}),"aria-valuemin":Math.round(T.min),"aria-valuemax":Math.round(T.max),"aria-valuenow":D,"aria-valuetext":a(`work.workspace.splitSize`,{conversation:D,workspace:O,defaultValue:`Conversation {{conversation}}%, workspace {{workspace}}%`}),title:a(`work.workspace.resizeHint`,{defaultValue:`Drag to resize. Use arrow keys for precise control. Double-click or press Enter to reset.`}),tabIndex:0,"data-testid":`work-split-resizer`,onPointerDown:N,onDoubleClick:F,onKeyDown:ee,className:u(`group relative z-40 hidden h-full cursor-col-resize touch-none select-none items-center justify-center outline-none xl:flex`,`focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500`),children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:u(`pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-line transition-colors`,`group-hover:bg-primary-500 group-focus-visible:bg-primary-500`,g&&`bg-primary-500`)}),(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:u(`pointer-events-none relative h-14 w-1 rounded-full bg-ink-subtle/50 opacity-60 transition-[height,background-color,opacity]`,`group-hover:h-20 group-hover:bg-primary-500 group-hover:opacity-100`,`group-focus-visible:h-20 group-focus-visible:bg-primary-500 group-focus-visible:opacity-100`,g&&`h-20 bg-primary-500 opacity-100`)})]}),(0,Z.jsx)(`section`,{id:`work-workspace-panel`,"data-testid":`work-workspace-panel`,className:u(`min-h-0 min-w-0 flex-1 flex-col bg-surface-raised/85 backdrop-blur-xl xl:flex`,r===`workspace`?`flex`:`hidden`),children:t}),g&&(0,Z.jsx)(`div`,{"data-testid":`work-split-drag-shield`,"aria-hidden":`true`,className:`absolute inset-0 z-30 hidden cursor-col-resize select-none xl:block`})]})}var Gt=`/assets/workAudioProcessor-CLKlf7Jk.js`,Kt=44100,qt=2;async function Jt(e,t){let n=new AudioContext,r;try{await n.audioWorklet.addModule(Gt),r=new AudioWorkletNode(n,`libre-work-audio`,{outputChannelCount:[2],processorOptions:{sourceRate:Kt}}),r.connect(n.destination),await n.resume()}catch(e){throw await n.close().catch(()=>void 0),e}let i;try{i=new WebSocket(e)}catch(e){throw r.disconnect(),await n.close().catch(()=>void 0),e}i.binaryType=`arraybuffer`;let a=new Uint8Array;i.onmessage=e=>{if(!(e.data instanceof ArrayBuffer))return;let t=new Uint8Array(e.data),n=new Uint8Array(a.length+t.length);n.set(a,0),n.set(t,a.length);let i=n.length-n.length%4;if(a=n.slice(i),i===0)return;let o=new Int16Array(n.buffer,0,i/2),s=o.length/qt,c=new Float32Array(s),l=new Float32Array(s);for(let e=0;e<s;e++)c[e]=o[e*qt]/32768,l[e]=o[e*qt+1]/32768;r.port.postMessage({left:c,right:l},[c.buffer,l.buffer])};let o=()=>{i.onmessage=null,i.onclose=null;try{i.close()}catch{}r.disconnect(),n.close().catch(()=>void 0)};return i.onclose=()=>{o(),t()},i.onerror=()=>{o(),t()},{stop:o}}var Yt=3e3,Xt=6e4,Zt=5e3;function Qt({taskId:e,active:t,variant:n=`full`,onExpand:r}){let{t:i}=l(),a=(0,X.useRef)(null),o=(0,X.useRef)(null),[u,d]=(0,X.useState)(`view`),[f,p]=(0,X.useState)(0),[m,h]=(0,X.useState)(()=>({taskId:e,active:t,attempt:f,mode:u,state:t?`starting`:`idle`,error:null})),_=m.taskId===e&&m.active===t&&m.attempt===f&&m.mode===u,v=_?m:{taskId:e,active:t,attempt:f,mode:u,state:t?`starting`:`idle`,error:null};_||h(v);let{state:y,error:b}=v,x=(0,X.useCallback)(n=>{h(r=>r.taskId!==e||r.active!==t||r.attempt!==f||r.mode!==u?r:{...r,...n})},[e,t,f,u]),[C,w]=(0,X.useState)({agentWaiting:!1}),[T,E]=(0,X.useState)(!1),[D,O]=(0,X.useState)(`idle`),[M,P]=(0,X.useState)(``),[F,ee]=(0,X.useState)(null),I=(0,X.useRef)([]),L=(0,X.useRef)(0),z=(0,X.useRef)(null),[te,B]=(0,X.useState)(!1),V=(0,X.useRef)(null),H=(0,X.useRef)(0),ne=(0,X.useCallback)(()=>{H.current+=1;let e=V.current;V.current=null,e?.stop(),B(!1)},[]),re=(0,X.useCallback)(async()=>{if(V.current){ne();return}let t=H.current+1;H.current=t;try{let n=await lt(e);if(H.current!==t)return;let r=await Jt(n,()=>{H.current===t&&(H.current+=1,V.current=null,B(!1))});if(H.current!==t){r.stop();return}V.current=r,B(!0)}catch(e){if(H.current!==t)return;c.warn(`Work screen audio failed to start:`,e),ne()}},[e,ne]);(0,X.useEffect)(()=>{if(!(!t||y!==`connected`))return ne},[t,y,ne]);let ie=(0,X.useCallback)(()=>{try{o.current?.disconnect()}catch{}o.current=null},[]);(0,X.useEffect)(()=>{if(!t)return;let n=!1,r;return(async()=>{try{let t=await tt(e);n||E(!!t.viewOnlyPassword);let i=t.viewOnlyPassword;u===`control`&&(i=(await rt(e)).controlPassword,r=setInterval(()=>{rt(e).catch(e=>{c.warn(`Screen control renewal failed:`,e),n||d(`view`)})},Xt));let[{default:l},f]=await Promise.all([s(()=>import(`./rfb-NV_fh9Db.js`),[]),ct(e)]);if(n||!a.current)return;let p=new l(a.current,f,{shared:!0,...i?{credentials:{password:i}}:{}});p.viewOnly=u!==`control`,p.scaleViewport=!0,p.background=`transparent`,p.addEventListener(`connect`,()=>{n||x({state:`connected`})}),p.addEventListener(`disconnect`,()=>{n||x({state:`disconnected`})}),o.current=p}catch(e){if(c.error(`Work screen connection failed:`,e),n)return;x({error:e.response?.data?.message??null,state:`disconnected`}),u===`control`&&d(`view`)}})(),()=>{n=!0,r&&clearInterval(r),ie(),u===`control`&&it(e).catch(()=>void 0)}},[e,t,f,u,ie,x]),(0,X.useEffect)(()=>{if(!t||n===`mini`)return;let r=!1,i=async()=>{try{let t=await nt(e);r||w(t)}catch{}};i();let a=setInterval(i,Yt);return()=>{r=!0,clearInterval(a)}},[e,t,n]),(0,X.useEffect)(()=>{if(D!==`recording`||y!==`connected`||u!==`control`)return;let t=a.current;if(!t)return;L.current=performance.now(),I.current=[];let n=(e,n)=>{let r=t.querySelector(`canvas`);if(!r)return;let i=r.getBoundingClientRect();if(i.width<=0||i.height<=0)return;z.current={width:r.width,height:r.height};let a=(e,t)=>Math.max(0,Math.min(t,Math.round(e)));return{x:a((e-i.left)*r.width/i.width,r.width),y:a((n-i.top)*r.height/i.height,r.height)}},r=()=>Math.round(performance.now()-L.current),i=e=>{I.current.length<Zt&&I.current.push(e)},o=t=>a=>{let o=n(a.clientX,a.clientY);if(!o)return;let s={t:r(),kind:t,...o,button:a.button};i(s),t===`down`&&ot(e,o.x,o.y).then(({anchor:e,url:t})=>{e&&(s.anchor=e),t&&(s.url=t)}).catch(()=>void 0)},s=e=>{let t=n(e.clientX,e.clientY);t&&i({t:r(),kind:`wheel`,...t,dy:Math.sign(e.deltaY)})},c=e=>{i({t:r(),kind:`key`,key:e.key,...e.ctrlKey?{ctrl:!0}:{},...e.altKey?{alt:!0}:{},...e.metaKey?{meta:!0}:{},...e.shiftKey?{shift:!0}:{}})},l=o(`down`),d=o(`up`);return t.addEventListener(`pointerdown`,l,!0),t.addEventListener(`pointerup`,d,!0),t.addEventListener(`wheel`,s,!0),t.addEventListener(`keydown`,c,!0),()=>{t.removeEventListener(`pointerdown`,l,!0),t.removeEventListener(`pointerup`,d,!0),t.removeEventListener(`wheel`,s,!0),t.removeEventListener(`keydown`,c,!0)}},[D,y,u,e]);let oe=(0,X.useCallback)(()=>{d(`control`)},[]),se=(0,X.useCallback)(()=>{it(e).catch(()=>void 0),d(`view`)},[e]),ce=(0,X.useCallback)(()=>{ee(null),O(`recording`),d(`control`)},[]),le=(0,X.useCallback)(()=>{it(e).catch(()=>void 0),d(`view`),O(`naming`)},[e]),ue=(0,X.useCallback)(()=>{I.current=[],P(``),O(`idle`),u===`control`&&(it(e).catch(()=>void 0),d(`view`))},[e,u]),de=(0,X.useCallback)(async()=>{let t=M.trim();if(t){O(`saving`);try{let n=await st(e,{name:t,events:I.current,...z.current?{screenWidth:z.current.width,screenHeight:z.current.height}:{}});I.current=[],P(``),O(`idle`),ee(n.name),setTimeout(()=>ee(null),6e3)}catch(e){c.error(`Saving the demonstration failed:`,e),x({error:e.response?.data?.message??null}),O(`naming`)}}},[e,M,x]),fe=u===`control`&&y===`connected`,pe=C.holder!==void 0&&!C.holder.you,me=C.takeoverEnabled!==!1,he=T&&me&&y===`connected`&&u===`view`&&!pe,ge=D===`recording`&&y===`connected`,_e=`flex items-center gap-1.5 rounded-lg border border-line px-2.5 py-1 text-xs text-ink transition-colors hover:bg-surface-subtle`;return n===`mini`?(0,Z.jsxs)(`div`,{className:`relative aspect-[8/5] w-full overflow-hidden rounded-xl border border-line bg-canvas`,"data-testid":`work-screen-mini`,children:[(0,Z.jsx)(`div`,{ref:a,className:`h-full w-full`}),y!==`connected`&&(0,Z.jsx)(`div`,{className:`pointer-events-none absolute inset-0 flex flex-col items-center justify-center gap-2 bg-canvas px-4 text-center`,children:y===`starting`?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(g,{size:16,className:`animate-spin text-ink-muted`}),(0,Z.jsx)(`p`,{className:`text-xs text-ink`,children:i(`work.screen.starting`)})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(ve,{size:18,className:`text-ink-muted`}),(0,Z.jsx)(`p`,{className:`text-xs text-ink`,children:b??i(`work.screen.disconnected`)})]})}),(0,Z.jsx)(`button`,{type:`button`,"data-testid":`work-screen-mini-expand`,onClick:r,"aria-label":i(`work.agent.openScreen`,{defaultValue:`Open the full screen view`}),className:`absolute inset-0 cursor-pointer bg-transparent transition-colors hover:bg-white/5 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500/60`})]}):(0,Z.jsxs)(`div`,{className:`flex h-full min-h-[16rem] w-full flex-col`,"data-testid":`work-screen`,children:[(0,Z.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2 border-b border-line bg-surface px-3 py-2`,children:[(0,Z.jsx)(`div`,{className:`rounded-md px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide ${ge?`bg-red-500/15 text-red-500`:fe?`bg-emerald-500/15 text-emerald-500`:`bg-surface-subtle text-ink-muted`}`,"data-testid":`work-screen-mode`,children:ge?i(`work.screen.recording`):fe?i(`work.screen.youHaveControl`):pe?i(`work.screen.otherHasControl`,{name:C.holder?.username??`…`}):i(`work.screen.viewOnly`)}),F&&(0,Z.jsx)(`div`,{className:`rounded-md bg-emerald-500/15 px-2 py-0.5 text-[11px] text-emerald-500`,children:i(`work.screen.teachSaved`,{name:F})}),(0,Z.jsx)(`div`,{className:`min-w-0 flex-1`}),(0,Z.jsx)(`button`,{type:`button`,"data-testid":`work-screen-audio`,onClick:()=>void re(),disabled:y!==`connected`,"aria-label":i(te?`work.screen.mute`:`work.screen.unmute`),className:`${_e} disabled:opacity-40 ${te?`border-emerald-500/50 text-emerald-500`:``}`,children:te?(0,Z.jsx)(ae,{size:13}):(0,Z.jsx)(N,{size:13})}),he&&D===`idle`&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-screen-take-over`,onClick:oe,className:_e,children:[(0,Z.jsx)(R,{size:13}),i(`work.screen.takeOver`)]}),(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-screen-teach`,onClick:ce,className:_e,children:[(0,Z.jsx)(j,{size:13}),i(`work.screen.teach`)]})]}),fe&&D===`idle`&&(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-screen-hand-back`,onClick:se,className:`${_e} border-emerald-500/50 text-emerald-500`,children:[(0,Z.jsx)(k,{size:13}),i(`work.screen.handBack`)]}),fe&&D===`recording`&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-screen-teach-stop`,onClick:le,className:`${_e} border-red-500/50 text-red-500`,children:[(0,Z.jsx)(S,{size:9,className:`animate-pulse fill-current`}),i(`work.screen.teachSave`)]}),(0,Z.jsx)(`button`,{type:`button`,onClick:ue,className:_e,children:i(`work.screen.teachDiscard`)})]})]}),(0,Z.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 items-center justify-center overflow-hidden bg-canvas ${ge?`ring-2 ring-inset ring-red-500`:fe?`ring-2 ring-inset ring-emerald-500`:``}`,children:[ge&&(0,Z.jsxs)(`div`,{className:`absolute inset-x-0 top-0 z-10 flex items-center justify-center gap-2 bg-red-600/95 py-1 text-[11px] font-medium text-white`,"data-testid":`work-screen-watching-banner`,children:[(0,Z.jsx)(S,{size:8,className:`animate-pulse fill-current`}),i(`work.screen.watchingLearning`)]}),(0,Z.jsx)(`div`,{ref:a,className:`h-full w-full`}),y!==`connected`&&(0,Z.jsx)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-canvas px-6 text-center`,children:y===`starting`?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(g,{size:20,className:`animate-spin text-ink-muted`}),(0,Z.jsx)(`p`,{className:`text-sm text-ink`,children:i(`work.screen.starting`)})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(ve,{size:22,className:`text-ink-muted`}),(0,Z.jsx)(`p`,{className:`text-sm text-ink`,children:b??i(`work.screen.disconnected`)}),(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-screen-reconnect`,onClick:()=>p(e=>e+1),className:`flex items-center gap-2 rounded-lg border border-line px-3 py-1.5 text-xs text-ink transition-colors hover:bg-surface-subtle`,children:[(0,Z.jsx)(A,{size:12}),i(`work.screen.reconnect`)]})]})}),(D===`naming`||D===`saving`)&&(0,Z.jsx)(`div`,{className:`absolute inset-0 z-20 flex items-center justify-center bg-black/60`,children:(0,Z.jsxs)(`div`,{className:`flex w-72 flex-col gap-3 rounded-xl border border-line bg-surface-raised p-4 shadow-xl`,children:[(0,Z.jsx)(`input`,{autoFocus:!0,value:M,onChange:e=>P(e.target.value),onKeyDown:e=>{e.key===`Enter`&&de()},placeholder:i(`work.screen.teachNamePlaceholder`),"data-testid":`work-screen-teach-name`,className:`rounded-lg border border-line bg-surface px-3 py-2 text-sm text-ink outline-none placeholder:text-ink-subtle focus:border-line-strong`}),(0,Z.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Z.jsx)(`button`,{type:`button`,onClick:ue,disabled:D===`saving`,className:`rounded-lg px-3 py-1.5 text-xs text-ink-muted transition-colors hover:bg-surface-subtle`,children:i(`work.screen.teachDiscard`)}),(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-screen-teach-confirm`,onClick:()=>void de(),disabled:D===`saving`||!M.trim(),className:`flex items-center gap-2 rounded-lg bg-emerald-600 px-3 py-1.5 text-xs text-white transition-colors hover:bg-emerald-500 disabled:opacity-50`,children:[D===`saving`&&(0,Z.jsx)(g,{size:12,className:`animate-spin`}),i(`work.screen.teachSave`)]})]})]})}),C.agentWaiting&&!fe&&y===`connected`&&(0,Z.jsxs)(`div`,{className:`absolute bottom-3 left-1/2 flex max-w-[90%] -translate-x-1/2 items-center gap-3 rounded-lg bg-amber-500/90 px-3 py-2 text-xs text-black shadow-lg backdrop-blur`,"data-testid":`work-screen-agent-waiting`,children:[(0,Z.jsx)(`span`,{className:`font-medium`,children:i(`work.screen.agentWaiting`)}),C.agentWaitingReason&&(0,Z.jsx)(`span`,{className:`truncate opacity-80`,children:C.agentWaitingReason}),T&&me&&!pe&&(0,Z.jsx)(`button`,{type:`button`,onClick:oe,className:`shrink-0 rounded-md bg-black/80 px-2 py-1 text-[11px] text-white transition-colors hover:bg-black`,children:i(`work.screen.takeOver`)})]})]})]})}var $t=`taught-`,en=`mb-2 text-[11px] font-medium uppercase tracking-wide text-ink-subtle`;function tn({task:e,persona:t,active:n,onOpenScreen:r}){let{t:i,i18n:a}=l(),o=Re[e.status],s=i(o.labelKey,{defaultValue:o.label}),[c,d]=(0,X.useState)([]),[f,p]=(0,X.useState)(!1),[m,h]=(0,X.useState)(null),[g,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!1),[b,x]=(0,X.useState)([]),[S,C]=(0,X.useState)(!1),[w,T]=(0,X.useState)(null),[E,D]=(0,X.useState)(!1),O=(0,X.useCallback)(async()=>{try{let t=await K.getAutomations();t.success&&Array.isArray(t.data)&&d(t.data.filter(t=>t.workTaskId===e.id))}catch{}finally{p(!0)}},[e.id]),k=(0,X.useCallback)(async()=>{try{let e=await xe.list();e.success&&Array.isArray(e.data)&&x(e.data.filter(e=>e.slug.startsWith($t)))}catch{}finally{C(!0)}},[]),A=(0,X.useCallback)(async()=>{try{let t=await G.getApprovals(e.id);t.success&&t.data&&T(t.data)}catch{}finally{D(!0)}},[e.id]);(0,X.useEffect)(()=>{if(!n)return;let e=window.setTimeout(()=>{O(),k(),A()},0);return()=>window.clearTimeout(e)},[n,O,k,A]);let M=async t=>{let n=w;T(e=>e&&{...e,approvalsEnabled:t});try{await G.setApprovalsEnabled(e.id,t?!0:null)}catch{T(n),U.error(i(`work.agent.approvalsToggleFailed`,{defaultValue:`Could not update approvals.`}))}},N=async t=>{try{await G.deleteApprovalRule(e.id,t),await A()}catch{U.error(i(`work.agent.approvalRuleDeleteFailed`,{defaultValue:`Could not remove the rule.`}))}},P=async e=>{h(e.id);try{let t=e.status===`active`?await K.pauseAutomation(e.id):await K.resumeAutomation(e.id);if(!t.success)throw Error(t.message);await O()}catch{U.error(i(`work.agent.routineToggleFailed`,{defaultValue:`Could not update the routine.`}))}finally{h(null)}},I=async e=>{y(!0);try{let t=await K.createAutomation(e);if(!t.success)throw Error(t.message);_(!1),await O()}catch{U.error(i(`work.agent.routineSaveFailed`,{defaultValue:`Could not save the routine.`}))}finally{y(!1)}},L=async(e,t)=>{x(n=>n.map(n=>n.id===e.id?{...n,enabled:t}:n));try{await xe.update(e.id,{enabled:t})}catch{x(t=>t.map(t=>t.id===e.id?{...t,enabled:e.enabled}:t)),U.error(i(`work.agent.skillToggleFailed`,{defaultValue:`Could not update the skill.`}))}};return(0,Z.jsxs)(`div`,{"data-testid":`work-agent-panel`,className:`flex flex-col gap-6 p-4 sm:p-5`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Z.jsxs)(`span`,{className:`relative shrink-0`,children:[(0,Z.jsx)(`img`,{src:t?Se(t,96):Ce(e.title,96),alt:``,"aria-hidden":`true`,"data-testid":`work-agent-avatar`,onError:n=>q(n.currentTarget,t?.name??e.title,96),className:`h-12 w-12 rounded-xl object-cover`}),(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:u(`absolute -bottom-0.5 -end-0.5 h-3 w-3 rounded-full border-2 border-surface`,o.animated&&`animate-pulse`),style:{backgroundColor:o.color}})]}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`h3`,{dir:`auto`,className:`truncate text-[15px] font-medium leading-6 text-ink`,title:e.title,children:e.title}),(0,Z.jsx)(`p`,{className:`text-xs text-ink-muted`,children:t?i(`work.agent.personaLine`,{defaultValue:`Persona: {{name}}`,name:t.name}):s}),e.statusBlurb&&(0,Z.jsx)(`p`,{dir:`auto`,"data-testid":`work-agent-blurb`,className:`mt-1 text-[13px] leading-5 text-ink-subtle`,children:e.statusBlurb})]})]}),e.computerAvailable&&(0,Z.jsxs)(`section`,{children:[(0,Z.jsx)(`h4`,{className:en,children:i(`work.agent.screen`,{defaultValue:`Screen`})}),(0,Z.jsx)(Qt,{taskId:e.id,active:n,variant:`mini`,onExpand:r})]}),(0,Z.jsxs)(`section`,{"data-testid":`work-agent-routines`,children:[(0,Z.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,Z.jsx)(`h4`,{className:u(en,`mb-0`),children:i(`work.agent.routines`,{defaultValue:`Routines`})}),(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-agent-add-routine`,onClick:()=>_(!0),className:`flex items-center gap-1 rounded-lg px-2 py-1 text-[12px] font-medium text-primary-600 transition-colors hover:bg-primary-500/10 dark:text-primary-400`,children:[(0,Z.jsx)(ee,{className:`h-3.5 w-3.5`}),i(`work.agent.addRoutine`,{defaultValue:`Routine`})]})]}),c.length===0?(0,Z.jsx)(`p`,{className:`text-xs leading-relaxed text-ink-subtle`,children:f?i(`work.agent.noRoutines`,{defaultValue:`No routines yet. A routine runs an instruction on a schedule, inside this agent’s workspace.`}):`…`}):(0,Z.jsx)(`ul`,{className:`space-y-1`,children:c.map(e=>(0,Z.jsxs)(`li`,{"data-testid":`work-agent-routine`,className:`flex items-center gap-3 rounded-xl border border-line bg-surface px-3 py-2`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`p`,{dir:`auto`,className:u(`truncate text-[13px] leading-5`,e.status===`active`?`text-ink`:`text-ink-subtle line-through decoration-ink-subtle/40`),title:e.name,children:e.name}),(0,Z.jsx)(`p`,{className:`truncate text-[11px] text-ink-subtle`,children:Be(e.triggers,a.language,i)})]}),(0,Z.jsx)(`button`,{type:`button`,"data-testid":`work-agent-routine-toggle`,disabled:m===e.id,onClick:()=>void P(e),"aria-label":e.status===`active`?i(`automations.pause`,{defaultValue:`Pause`}):i(`automations.resume`,{defaultValue:`Resume`}),className:`flex h-7 w-7 shrink-0 items-center justify-center rounded-lg text-ink-muted transition-colors hover:bg-surface-subtle hover:text-ink disabled:opacity-40`,children:e.status===`active`?(0,Z.jsx)(F,{className:`h-3.5 w-3.5`}):(0,Z.jsx)(ue,{className:`h-3.5 w-3.5`})})]},e.id))})]}),(0,Z.jsxs)(`section`,{"data-testid":`work-agent-approvals`,children:[(0,Z.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,Z.jsx)(`h4`,{className:u(en,`mb-0`),children:i(`work.agent.approvals`,{defaultValue:`Auto Review`})}),(0,Z.jsx)(Ie,{checked:w?.policyRequired===!0||w?.approvalsEnabled===!0,disabled:!E||w?.policyRequired===!0,onChange:e=>void M(e)})]}),(0,Z.jsx)(`p`,{className:`text-xs leading-relaxed text-ink-subtle`,children:w?.policyRequired===!0?i(`work.agent.approvalsPolicyForced`,{defaultValue:`This agent’s Work policy requires approval for side-effecting actions.`}):i(`work.agent.approvalsHint`,{defaultValue:`When on, commands, file deletions and moves, and computer actions pause until you approve them.`})}),w&&w.rules.length>0&&(0,Z.jsx)(`ul`,{className:`mt-2 space-y-1`,children:w.rules.map(e=>(0,Z.jsxs)(`li`,{"data-testid":`work-agent-approval-rule`,className:`flex items-center gap-3 rounded-xl border border-line bg-surface px-3 py-2`,children:[(0,Z.jsx)(ye,{className:`h-4 w-4 shrink-0 text-ink-muted`}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsxs)(`p`,{className:`truncate text-[13px] leading-5 text-ink`,children:[(0,Z.jsx)(`code`,{dir:`ltr`,children:e.toolName}),e.pattern&&(0,Z.jsxs)(Z.Fragment,{children:[` · `,(0,Z.jsx)(`code`,{dir:`ltr`,children:e.pattern})]})]}),(0,Z.jsx)(`p`,{className:`truncate text-[11px] text-ink-subtle`,children:i(`work.agent.approvalRuleLine`,{defaultValue:`Always allowed`})})]}),(0,Z.jsx)(`button`,{type:`button`,"data-testid":`work-agent-approval-rule-delete`,onClick:()=>void N(e.id),"aria-label":i(`work.agent.approvalRuleDelete`,{defaultValue:`Remove rule`}),className:`flex h-7 w-7 shrink-0 items-center justify-center rounded-lg text-ink-muted transition-colors hover:bg-surface-subtle hover:text-ink`,children:(0,Z.jsx)(re,{className:`h-3.5 w-3.5`})})]},e.id))})]}),(0,Z.jsxs)(`section`,{"data-testid":`work-agent-skills`,children:[(0,Z.jsx)(`h4`,{className:en,children:i(`work.agent.skills`,{defaultValue:`Taught skills`})}),b.length===0?(0,Z.jsx)(`p`,{className:`text-xs leading-relaxed text-ink-subtle`,children:S?i(`work.agent.noSkills`,{defaultValue:`Nothing taught yet. Use Teach on the Screen tab to demonstrate a procedure once; it becomes a replayable skill.`}):`…`}):(0,Z.jsx)(`ul`,{className:`space-y-1`,children:b.map(e=>(0,Z.jsxs)(`li`,{"data-testid":`work-agent-skill`,className:`flex items-center gap-3 rounded-xl border border-line bg-surface px-3 py-2`,children:[(0,Z.jsx)(j,{className:`h-4 w-4 shrink-0 text-ink-muted`}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`p`,{dir:`auto`,className:`truncate text-[13px] leading-5 text-ink`,title:e.name,children:e.name}),e.description&&(0,Z.jsx)(`p`,{className:`truncate text-[11px] text-ink-subtle`,children:e.description})]}),(0,Z.jsx)(Ie,{checked:e.enabled,onChange:t=>void L(e,t)})]},e.id))})]}),(0,Z.jsx)(Ve,{open:g,automation:null,fixedWorkTaskId:e.id,models:[],saving:v,onClose:()=>_(!1),onSave:e=>void I(e)})]})}var nn=1e5,rn=4e3,an={bash:`bash`,c:`c`,cc:`cpp`,cjs:`javascript`,cpp:`cpp`,cs:`csharp`,csh:`bash`,css:`css`,cts:`typescript`,cxx:`cpp`,diff:`diff`,go:`go`,h:`c`,hpp:`cpp`,htm:`markup`,html:`markup`,java:`java`,js:`javascript`,json:`json`,json5:`json`,jsonc:`json`,jsx:`jsx`,kt:`kotlin`,kts:`kotlin`,less:`css`,md:`markdown`,mdx:`markdown`,mjs:`javascript`,mts:`typescript`,patch:`diff`,php:`php`,py:`python`,rb:`ruby`,rs:`rust`,scss:`css`,sh:`bash`,sql:`sql`,svg:`markup`,swift:`swift`,ts:`typescript`,tsx:`tsx`,xml:`markup`,yaml:`yaml`,yml:`yaml`,zsh:`bash`},on={".bashrc":`bash`,".zshrc":`bash`},sn={cjs:{family:`babel`,parser:`babel`},css:{family:`postcss`,parser:`css`},cts:{family:`typescript`,parser:`typescript`},htm:{family:`html`,parser:`html`},html:{family:`html`,parser:`html`},js:{family:`babel`,parser:`babel`},json:{family:`babel`,parser:`json`},json5:{family:`babel`,parser:`json5`},jsonc:{family:`babel`,parser:`json`},jsx:{family:`babel`,parser:`babel`},less:{family:`postcss`,parser:`less`},md:{family:`markdown`,parser:`markdown`},mdx:{family:`markdown`,parser:`mdx`},mjs:{family:`babel`,parser:`babel`},mts:{family:`typescript`,parser:`typescript`},scss:{family:`postcss`,parser:`scss`},ts:{family:`typescript`,parser:`typescript`},tsx:{family:`typescript`,parser:`typescript`},yaml:{family:`yaml`,parser:`yaml`},yml:{family:`yaml`,parser:`yaml`}},cn=e=>e.split(/[\\/]/).pop()?.toLowerCase()??``,ln=e=>{let t=cn(e),n=t.lastIndexOf(`.`);return n>-1?t.slice(n+1):``},un=e=>on[cn(e)]??an[ln(e)]??`text`,dn=e=>sn[ln(e)],fn=e=>dn(e)!==void 0,pn=e=>{if(e.length>1e5)return!1;let t=1;for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)===10&&(t+=1,t>4e3))return!1;return!0},$=async e=>(await e).default,mn=async(e,t)=>{switch(e.family){case`babel`:return Promise.all([$(s(()=>import(`./babel-CY5KOv-I.js`),[])),$(s(()=>import(`./estree-CuT_pB8K.js`),[]))]);case`typescript`:return Promise.all([$(s(()=>import(`./typescript-BPrdIZ70.js`),[])),$(s(()=>import(`./estree-CuT_pB8K.js`),[]))]);case`postcss`:return[await $(s(()=>import(`./postcss-CifRAFe1.js`),[]))];case`html`:{let e=[await $(s(()=>import(`./html-Cdnr2qzU.js`),[]))];return/<script\b/i.test(t)&&e.push(await $(s(()=>import(`./babel-CY5KOv-I.js`),[])),await $(s(()=>import(`./estree-CuT_pB8K.js`),[]))),/<script\b[^>]*\blang\s*=\s*["']?(?:ts|typescript)/i.test(t)&&e.push(await $(s(()=>import(`./typescript-BPrdIZ70.js`),[]))),/<style\b/i.test(t)&&e.push(await $(s(()=>import(`./postcss-CifRAFe1.js`),[]))),[...new Set(e)]}case`markdown`:{let n=[await $(s(()=>import(`./markdown-CByV-4CU.js`),[]))],r=e=>RegExp(`^(?: {0,3})(?:\`{3,}|~{3,})\\s*(?:${e})(?:\\s|$)`,`im`).test(t);return e.parser===`mdx`&&n.push(await $(s(()=>import(`./babel-CY5KOv-I.js`),[])),await $(s(()=>import(`./estree-CuT_pB8K.js`),[]))),r(`js|jsx|javascript|json|json5|jsonc`)&&n.push(await $(s(()=>import(`./babel-CY5KOv-I.js`),[])),await $(s(()=>import(`./estree-CuT_pB8K.js`),[]))),r(`ts|tsx|typescript`)&&n.push(await $(s(()=>import(`./typescript-BPrdIZ70.js`),[])),await $(s(()=>import(`./estree-CuT_pB8K.js`),[]))),r(`css|scss|less`)&&n.push(await $(s(()=>import(`./postcss-CifRAFe1.js`),[]))),r(`html`)&&n.push(await $(s(()=>import(`./html-Cdnr2qzU.js`),[])),await $(s(()=>import(`./babel-CY5KOv-I.js`),[])),await $(s(()=>import(`./estree-CuT_pB8K.js`),[])),await $(s(()=>import(`./typescript-BPrdIZ70.js`),[])),await $(s(()=>import(`./postcss-CifRAFe1.js`),[]))),r(`yaml|yml`)&&n.push(await $(s(()=>import(`./yaml-9ltHPDNO.js`),[]))),[...new Set(n)]}case`yaml`:return[await $(s(()=>import(`./yaml-9ltHPDNO.js`),[]))]}},hn=async(e,t)=>{let n=dn(e);if(!n)throw Error(`Formatting is not supported for “${cn(e)||e}”.`);if(!pn(t))throw Error(`Could not format “${cn(e)||e}”: files are limited to ${nn.toLocaleString()} characters and ${rn.toLocaleString()} lines.`);try{let[{format:e},r]=await Promise.all([s(()=>import(`./standalone-6z5x8CWe.js`),[]),mn(n,t)]);return await e(t,{parser:n.parser,plugins:r,tabWidth:2,useTabs:!1})}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Could not format “${cn(e)||e}”: ${n}`)}},gn=(0,X.lazy)(async()=>({default:(await s(()=>import(`./OptimizedSyntaxHighlighter-SkJc7ZMe.js`),__vite__mapDeps([0,1,2,3,4,5]))).OptimizedSyntaxHighlighter})),_n=8e3,vn=400,yn=500;function bn({path:e,value:t,ariaLabel:n,disabled:r=!1,onChange:i,onSaveShortcut:a,onFormatShortcut:o}){let{t:s}=l(),c=Pe(e=>e.theme.mode!==`light`),d=(0,X.useRef)(null),f=(0,X.useRef)(null),[p,m]=(0,X.useState)(``),h=(0,X.useMemo)(()=>un(e),[e]),g=(0,X.useMemo)(()=>{if(t.length>_n)return 401;let e=1;for(let n=0;n<t.length&&!(t.charCodeAt(n)===10&&(e+=1,e>vn));n+=1);return e},[t]),_=t.length>_n||g>vn,v=h!==`text`&&!_,y=v&&p===t;return(0,X.useEffect)(()=>{if(!v)return;let e=window.setTimeout(()=>m(t),yn);return()=>window.clearTimeout(e)},[v,e,t]),(0,X.useLayoutEffect)(()=>{!y||!d.current||!f.current||(d.current.style.transform=`translate3d(${-f.current.scrollLeft}px, ${-f.current.scrollTop}px, 0)`)},[y,e]),(0,Z.jsxs)(`div`,{dir:`ltr`,className:u(`relative min-h-0 flex-1 overflow-hidden bg-surface focus-within:ring-1 focus-within:ring-inset focus-within:ring-primary-500/60`,r&&`opacity-60`),"data-language":h,"data-highlighted":y?`true`:`false`,children:[y&&(0,Z.jsx)(`div`,{"aria-hidden":`true`,"data-testid":`work-file-highlight`,className:`pointer-events-none absolute inset-0 z-0 overflow-hidden`,children:(0,Z.jsx)(`div`,{ref:d,"data-testid":`work-file-highlight-content`,className:`min-h-full min-w-full origin-top-left will-change-transform`,children:(0,Z.jsx)(X.Suspense,{fallback:(0,Z.jsx)(`pre`,{className:`m-0 min-h-full min-w-full whitespace-pre p-4 text-left font-mono text-[12px] leading-5 text-ink`,children:t||`​`}),children:(0,Z.jsx)(gn,{language:h,isDark:c,codeTheme:`night`,backgroundColor:`transparent`,borderRadius:0,customStyle:{margin:0,minHeight:`100%`,minWidth:`100%`,width:`max-content`,overflow:`visible`,padding:`1rem`,fontSize:`12px`,lineHeight:`20px`,tabSize:2,whiteSpace:`pre`},children:p||`​`})})})}),(0,Z.jsx)(`textarea`,{ref:f,"data-testid":`work-file-editor`,"data-language":h,"aria-label":n,value:t,onChange:e=>i(e.target.value),onScroll:e=>{d.current&&(d.current.style.transform=`translate3d(${-e.currentTarget.scrollLeft}px, ${-e.currentTarget.scrollTop}px, 0)`)},onKeyDown:e=>{let t=e.key.toLowerCase();if((e.metaKey||e.ctrlKey)&&t===`s`){e.preventDefault(),a();return}e.altKey&&e.shiftKey&&t===`f`&&(e.preventDefault(),o())},disabled:r,spellCheck:!1,wrap:`off`,className:u(`absolute inset-0 z-10 h-full w-full resize-none overflow-auto whitespace-pre border-0 bg-transparent p-4 text-left font-mono text-[12px] leading-5 outline-none selection:bg-primary-500/25 disabled:cursor-not-allowed`,y?`text-transparent caret-ink`:`text-ink`),style:y?{WebkitTextFillColor:`transparent`,caretColor:`rgb(var(--color-ink))`,tabSize:2}:{tabSize:2}}),_&&(0,Z.jsx)(`span`,{dir:`auto`,className:`pointer-events-none absolute bottom-2 end-3 z-20 rounded-md border border-line bg-surface-overlay/90 px-2 py-1 text-[10px] text-ink-muted shadow-subtle`,title:s(`work.files.highlightPaused`,{defaultValue:`Live highlighting is paused for large files to keep editing responsive.`}),children:s(`work.files.plainTextLarge`,{defaultValue:`Plain text · large file`})})]})}var xn=4e6,Sn=e=>{if(e===``)return[];let t=e.split(`
5
+ `);return t[t.length-1]===``&&t.pop(),t},Cn=(e,t)=>{let n=Sn(e),r=Sn(t),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i+=1;let a=0;for(;a<n.length-i&&a<r.length-i&&n[n.length-1-a]===r[r.length-1-a];)a+=1;let o=n.slice(i,n.length-a),s=r.slice(i,r.length-a),c=[];for(let e=0;e<i;e+=1)c.push({type:`context`,text:n[e],beforeLine:e+1,afterLine:e+1});let l=wn(o,s);for(let e of l){let t={type:e.type,text:e.text};e.beforeLine!==void 0&&(t.beforeLine=e.beforeLine+i),e.afterLine!==void 0&&(t.afterLine=e.afterLine+i),c.push(t)}for(let e=0;e<a;e+=1){let t=n.length-a+e,i=r.length-a+e;c.push({type:`context`,text:n[t],beforeLine:t+1,afterLine:i+1})}return c},wn=(e,t)=>{if(e.length===0&&t.length===0)return[];if(e.length>0&&t.length>0&&e.length*t.length>xn)return[...e.map((e,t)=>({type:`removed`,text:e,beforeLine:t+1})),...t.map((e,t)=>({type:`added`,text:e,afterLine:t+1}))];let n=e.length+1,r=t.length+1,i=new Uint32Array(n*r);for(let n=e.length-1;n>=0;--n)for(let a=t.length-1;a>=0;--a)i[n*r+a]=e[n]===t[a]?i[(n+1)*r+a+1]+1:Math.max(i[(n+1)*r+a],i[n*r+a+1]);let a=[],o=0,s=0;for(;o<e.length&&s<t.length;)e[o]===t[s]?(a.push({type:`context`,text:e[o],beforeLine:o+1,afterLine:s+1}),o+=1,s+=1):i[(o+1)*r+s]>=i[o*r+s+1]?(a.push({type:`removed`,text:e[o],beforeLine:o+1}),o+=1):(a.push({type:`added`,text:t[s],afterLine:s+1}),s+=1);for(;o<e.length;)a.push({type:`removed`,text:e[o],beforeLine:o+1}),o+=1;for(;s<t.length;)a.push({type:`added`,text:t[s],afterLine:s+1}),s+=1;return a},Tn=e=>{let t=0,n=0;for(let r of e)r.type===`added`&&(t+=1),r.type===`removed`&&(n+=1);return{added:t,removed:n}},En=3,Dn=e=>{let t=Array(e.length).fill(!1);for(let n=0;n<e.length;n+=1){if(e[n].type===`context`)continue;let r=Math.max(0,n-En),i=Math.min(e.length-1,n+En);for(let e=r;e<=i;e+=1)t[e]=!0}let n=[],r=[];for(let i=0;i<e.length;i+=1){if(!t[i]){r.push(e[i]);continue}r.length>0&&(n.push({type:`fold`,count:r.length,lines:r}),r=[]),n.push({type:`line`,line:e[i]})}return r.length>0&&n.push({type:`fold`,count:r.length,lines:r}),n};function On({line:e}){return(0,Z.jsxs)(`tr`,{className:u(e.type===`added`&&`bg-[rgb(76,212,117)]/[0.12] text-ink`,e.type===`removed`&&`bg-[rgb(255,61,129)]/[0.10] text-ink-muted`,e.type===`context`&&`text-ink-muted`),children:[(0,Z.jsx)(`td`,{className:`w-10 select-none px-2 text-right align-top text-[10px] tabular-nums text-ink-subtle`,children:e.beforeLine??``}),(0,Z.jsx)(`td`,{className:`w-10 select-none px-2 text-right align-top text-[10px] tabular-nums text-ink-subtle`,children:e.afterLine??``}),(0,Z.jsxs)(`td`,{className:`w-full whitespace-pre-wrap break-all px-3 align-top`,children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:u(`me-2 inline-block w-3 select-none text-center`,e.type===`added`&&`text-[rgb(46,164,79)]`,e.type===`removed`&&`text-[rgb(255,61,129)]`),children:e.type===`added`?`+`:e.type===`removed`?`−`:``}),e.text||`​`]})]})}var kn=new Set,An=e=>{let t=null;return e.map(e=>{let n=e.type===`line`?e.line:e.lines[0],r=t;return t=e.type===`line`?e.line:e.lines[e.lines.length-1],!r||!n?0:n.beforeLine!==void 0&&r.beforeLine!==void 0?n.beforeLine-r.beforeLine-1:n.afterLine!==void 0&&r.afterLine!==void 0?n.afterLine-r.afterLine-1:0})};function jn({lines:e}){let{t}=l(),n=(0,X.useMemo)(()=>Dn(e),[e]),r=(0,X.useMemo)(()=>An(n),[n]),[i,a]=(0,X.useState)({rows:null,set:kn}),o=i.rows===n?i.set:kn,s=e=>a({rows:n,set:new Set(o).add(e)});return(0,Z.jsx)(`table`,{className:`w-full border-collapse`,children:(0,Z.jsx)(`tbody`,{children:n.map((e,n)=>{let i=r[n];return(0,Z.jsxs)(X.Fragment,{children:[i>0&&(0,Z.jsx)(`tr`,{"data-testid":`work-diff-gap`,children:(0,Z.jsx)(`td`,{colSpan:3,className:`select-none border-y border-line bg-surface-subtle/70 px-4 py-1 text-center text-[11px] text-ink-subtle`,children:t(`work.files.diffFolded`,{count:i,defaultValue:`{{count}} unchanged lines`})})}),c(e,n)]},`row-${n}`)})})});function c(e,n){return e.type===`fold`?o.has(n)?(0,Z.jsx)(X.Fragment,{children:e.lines.map((e,t)=>(0,Z.jsx)(On,{line:e},t))},`fold-${n}`):(0,Z.jsx)(`tr`,{children:(0,Z.jsx)(`td`,{colSpan:3,className:`p-0`,children:(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-diff-fold`,onClick:()=>s(n),className:`flex w-full select-none items-center justify-center gap-1.5 border-y border-line bg-surface-subtle/70 px-4 py-1 text-[11px] text-ink-subtle transition-colors hover:bg-surface-subtle hover:text-ink`,children:[(0,Z.jsx)(E,{className:`h-3 w-3 shrink-0`}),t(`work.files.diffFolded`,{count:e.count,defaultValue:`{{count}} unchanged lines`})]})})},`fold-${n}`):(0,Z.jsx)(On,{line:e.line},`line-${n}`)}}function Mn({lines:e,ariaLabel:t}){return(0,Z.jsx)(`div`,{dir:`ltr`,role:`region`,"aria-label":t,"data-testid":`work-file-diff`,className:`min-h-0 flex-1 overflow-auto bg-surface font-mono text-[12px] leading-5`,children:(0,Z.jsx)(jn,{lines:e})})}var Nn=e=>{if(!e.startsWith(`"`)||!e.endsWith(`"`)||e.length<2)return e;let t=e.slice(1,-1),n=``;for(let e=0;e<t.length;e+=1){let r=t[e];if(r!==`\\`||e===t.length-1){n+=r;continue}e+=1;let i=t[e];if(i===`n`)n+=`
6
+ `;else if(i===`t`)n+=` `;else if(i===`\\`||i===`"`)n+=i;else if(i>=`0`&&i<=`7`){let r=i;for(;r.length<3&&e+1<t.length&&t[e+1]>=`0`&&t[e+1]<=`7`;)e+=1,r+=t[e];n+=String.fromCharCode(parseInt(r,8))}else n+=`\\${i}`}return n},Pn=e=>{let t=Nn(e);return t.startsWith(`a/`)||t.startsWith(`b/`)?t.slice(2):t},Fn=e=>{let t=e.slice(11).trim();if(t.startsWith(`"`)){let e=t.indexOf(`" `,1);return e===-1?null:{oldPath:Pn(t.slice(0,e+1)),newPath:Pn(t.slice(e+2).trim())}}let n=t.lastIndexOf(` b/`);if(n===-1){let e=t.indexOf(` `);return e===-1?null:{oldPath:Pn(t.slice(0,e)),newPath:Pn(t.slice(e+1))}}return{oldPath:Pn(t.slice(0,n)),newPath:Pn(t.slice(n+1))}},In=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/,Ln=e=>({path:e.status===`deleted`?e.oldPath:e.newPath,...e.status===`renamed`&&e.oldPath!==e.newPath?{oldPath:e.oldPath}:{},status:e.status,binary:e.binary,lines:e.lines,stats:Tn(e.lines)}),Rn=e=>{let t=[],n=null;for(let r of e.split(`
7
+ `)){if(r.startsWith(`diff --git `)){n&&t.push(Ln(n));let e=Fn(r);n={oldPath:e?.oldPath??``,newPath:e?.newPath??e?.oldPath??``,status:`modified`,binary:!1,lines:[]};continue}if(!n)continue;if(r.startsWith(`new file mode`)){n.status=`added`;continue}if(r.startsWith(`deleted file mode`)){n.status=`deleted`;continue}if(r.startsWith(`rename from `)){n.status=`renamed`,n.oldPath=Nn(r.slice(12));continue}if(r.startsWith(`rename to `)){n.status=`renamed`,n.newPath=Nn(r.slice(10));continue}if(r.startsWith(`Binary files `)||r===`GIT binary patch`){n.binary=!0;continue}if(r.startsWith(`--- `)){let e=r.slice(4).trim();e!==`/dev/null`&&n.status!==`renamed`&&(n.oldPath=Pn(e));continue}if(r.startsWith(`+++ `)){let e=r.slice(4).trim();e!==`/dev/null`&&n.status!==`renamed`&&(n.newPath=Pn(e));continue}let e=r.match(In);if(e){n.beforeLine=parseInt(e[1],10),n.afterLine=parseInt(e[2],10);continue}if(!(r.startsWith(`index `)||r.startsWith(`similarity index`)||r.startsWith(`dissimilarity index`)||r.startsWith(`old mode`)||r.startsWith(`new mode`)||r.startsWith(`copy from`)||r.startsWith(`copy to`)||r.startsWith(`\\`))){if(r.startsWith(`+`)){n.lines.push({type:`added`,text:r.slice(1),...n.afterLine===void 0?{}:{afterLine:n.afterLine++}});continue}if(r.startsWith(`-`)){n.lines.push({type:`removed`,text:r.slice(1),...n.beforeLine===void 0?{}:{beforeLine:n.beforeLine++}});continue}if(r.startsWith(` `)){n.lines.push({type:`context`,text:r.slice(1),...n.beforeLine===void 0?{}:{beforeLine:n.beforeLine++},...n.afterLine===void 0?{}:{afterLine:n.afterLine++}});continue}}}return n&&t.push(Ln(n)),t},zn=e=>{let t=0,n=0;for(let r of e)t+=r.stats.added,n+=r.stats.removed;return{added:t,removed:n}},Bn=(e,t)=>{if(e.success&&e.data)return e.data;throw Error(e.error||t)},Vn=(e,t)=>{let n=e?.response?.data?.error;return typeof n==`string`&&n?n:e instanceof Error&&e.message?e.message:t},Hn=e=>e.indexStatus===`?`,Un=e=>Hn(e)?`U`:e.workingTreeStatus===`.`?e.indexStatus:e.workingTreeStatus,Wn=e=>({modified:`M`,added:`A`,deleted:`D`,renamed:`R`})[e],Gn=e=>e===`A`||e===`U`?`text-[rgb(46,164,79)]`:e===`D`?`text-[rgb(255,61,129)]`:e===`R`||e===`C`?`text-sky-600 dark:text-sky-400`:`text-amber-600 dark:text-amber-500`,Kn=e=>{let t=e.lastIndexOf(`/`);return t===-1?{name:e,directory:``}:{name:e.slice(t+1),directory:e.slice(0,t)}};function qn({added:e,removed:t,muted:n=!1}){return(0,Z.jsxs)(`span`,{dir:`ltr`,className:`shrink-0 font-mono text-[10px] tabular-nums`,children:[(0,Z.jsxs)(`span`,{className:n?`text-ink-subtle`:`text-[rgb(46,164,79)]`,children:[`+`,e]}),` `,(0,Z.jsxs)(`span`,{className:n?`text-ink-subtle`:`text-[rgb(255,61,129)]`,children:[`−`,t]})]})}function Jn({letter:e,path:t,oldPath:n,added:r,removed:i}){return(0,Z.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b border-line bg-surface-raised/95 px-3 py-1.5 backdrop-blur`,children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:u(`w-4 shrink-0 text-center font-mono text-[11px] font-semibold`,Gn(e)),children:e}),(0,Z.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate text-start font-mono text-[11px] text-ink`,title:n?`${n} → ${t}`:t,children:n?`${n} → ${t}`:t}),(0,Z.jsx)(qn,{added:r,removed:i})]})}function Yn({taskId:e,mutationsDisabled:t=!1,disabledReason:n}){let{t:r}=l(),[i,a]=(0,X.useState)(null),[o,s]=(0,X.useState)(!0),[c,d]=(0,X.useState)(!1),[f,p]=(0,X.useState)(null),[m,h]=(0,X.useState)([]),[v,y]=(0,X.useState)(``),[b,x]=(0,X.useState)(``),[S,C]=(0,X.useState)(``),[w,T]=(0,X.useState)(null),[E,k]=(0,X.useState)(!1),[j,N]=(0,X.useState)(null),[P,F]=(0,X.useState)(!1),I=(0,X.useRef)(0),L=(0,X.useRef)(0),R=(0,X.useCallback)(async()=>{let t=++I.current;s(!0),p(null);try{let n=Bn(await G.getGitStatus(e),r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`}));if(t!==I.current)return;a(n),h([])}catch(e){if(t!==I.current)return;p(Vn(e,r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`})))}finally{t===I.current&&s(!1)}},[r,e]);(0,X.useEffect)(()=>{let e=window.setTimeout(()=>void R(),0);return()=>{window.clearTimeout(e),I.current+=1}},[R]),(0,X.useEffect)(()=>{let t=!1,n=window.setTimeout(async()=>{if(!i?.initialized){N(null);return}if(!i.changes.some(e=>!Hn(e))){N(i.changes.length>0?{files:[],truncated:!1}:null);return}F(!0);try{let n=await G.getGitDiff(e);if(t||!n.success||!n.data)return;N({files:Rn(n.data.patch),truncated:n.data.truncated})}catch{}finally{t||F(!1)}},0);return()=>{t=!0,window.clearTimeout(n)}},[i,e]);let z=async(e,n)=>{if(t||c)return!1;d(!0),p(null);try{let t=Bn(await e(),r(`work.git.actionFailed`,{defaultValue:`Git action failed.`}));return L.current+=1,a(t),h([]),T(null),U.success(n),!0}catch(e){let t=Vn(e,r(`work.git.actionFailed`,{defaultValue:`Git action failed.`}));return p(t),U.error(t),!1}finally{d(!1)}},te=async t=>{let n=++L.current;k(!0),p(null);try{if(Hn(t)){let i=Bn(await G.getFile(e,t.path),r(`work.git.diffFailed`,{defaultValue:`Could not load this diff.`}));if(n!==L.current)return;T({path:t.path,status:`added`,lines:Cn(``,i.content),binary:!1,truncated:!1})}else{let i=Bn(await G.getGitDiff(e,t.path),r(`work.git.diffFailed`,{defaultValue:`Could not load this diff.`}));if(n!==L.current)return;let a=Rn(i.patch)[0];T({path:t.path,status:a?.status??`modified`,lines:a?.lines??[],binary:a?.binary??!1,truncated:i.truncated})}}catch(e){if(n!==L.current)return;p(Vn(e,r(`work.git.diffFailed`,{defaultValue:`Could not load this diff.`})))}finally{n===L.current&&k(!1)}},B=(0,X.useMemo)(()=>{let e=new Map;for(let t of j?.files??[])e.set(t.path,t);return e},[j]),V=(0,X.useMemo)(()=>zn(j?.files??[]),[j]),H=S.trim().toLowerCase(),re=(0,X.useMemo)(()=>{let e=i?.changes??[];return H?e.filter(e=>e.path.toLowerCase().includes(H)):e},[H,i]);if(o&&!i)return(0,Z.jsx)(`div`,{className:`flex h-full items-center justify-center text-ink-muted`,children:(0,Z.jsx)(g,{className:`h-5 w-5 animate-spin`})});if(!i)return(0,Z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center`,children:[(0,Z.jsx)(le,{className:`mb-3 h-8 w-8 text-error-500`}),(0,Z.jsx)(`p`,{className:`max-w-sm text-xs leading-relaxed text-error-600`,children:f||r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`})}),(0,Z.jsxs)(Y,{size:`sm`,variant:`secondary`,className:`mt-4`,onClick:()=>void R(),children:[(0,Z.jsx)(A,{className:`h-3.5 w-3.5`}),r(`common.retry`,{defaultValue:`Retry`})]})]});if(!i.initialized)return(0,Z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center`,children:[(0,Z.jsx)(le,{className:`mb-3 h-8 w-8 text-ink-subtle`}),(0,Z.jsx)(`h3`,{className:`text-sm font-medium text-ink`,children:r(`work.git.notInitialized`,{defaultValue:`Git is not initialized`})}),(0,Z.jsx)(`p`,{className:`mt-1 max-w-sm text-xs leading-relaxed text-ink-muted`,children:r(`work.git.initializeDescription`,{defaultValue:`Create a local repository for status, diffs, branches, and commits. No remote credentials are connected.`})}),f&&(0,Z.jsx)(`p`,{className:`mt-3 text-xs text-error-600`,children:f}),(0,Z.jsxs)(Y,{"data-testid":`work-git-init-button`,size:`sm`,className:`mt-4 bg-primary-600 text-white hover:bg-primary-500`,disabled:t||c,onClick:()=>void z(()=>G.initializeGit(e),r(`work.git.initialized`,{defaultValue:`Git repository initialized.`})),children:[c?(0,Z.jsx)(g,{className:`me-2 h-3.5 w-3.5 animate-spin`}):(0,Z.jsx)(ee,{className:`me-2 h-3.5 w-3.5`}),r(`work.git.initialize`,{defaultValue:`Initialize Git`})]}),t&&n&&(0,Z.jsx)(`p`,{className:`mt-2 text-[11px] text-ink-subtle`,children:n})]});let ie=i.changes.filter(e=>e.staged).length,ae=i.changes.length>0,oe=re.filter(Hn),se=H?(j?.files??[]).filter(e=>e.path.toLowerCase().includes(H)):j?.files??[];return(0,Z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,"data-testid":`work-git-panel`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-b border-line px-3 py-2`,children:[(0,Z.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 rounded-lg bg-surface-subtle px-2 py-1 font-mono text-[11px] text-ink`,children:[(0,Z.jsx)(le,{className:`h-3.5 w-3.5 shrink-0`}),(0,Z.jsx)(`span`,{className:`truncate`,children:i.detached?r(`work.git.detached`,{defaultValue:`detached HEAD`}):i.branch||`main`})]}),j&&(V.added>0||V.removed>0)&&(0,Z.jsxs)(`span`,{"data-testid":`work-git-total-stats`,dir:`ltr`,className:`font-mono text-[11px] font-medium tabular-nums`,children:[(0,Z.jsxs)(`span`,{className:`text-[rgb(46,164,79)]`,children:[`+`,V.added]}),` `,(0,Z.jsxs)(`span`,{className:`text-[rgb(255,61,129)]`,children:[`−`,V.removed]})]}),(i.ahead>0||i.behind>0)&&(0,Z.jsxs)(`span`,{className:`text-[10px] text-ink-muted`,children:[`↑`,i.ahead,` ↓`,i.behind]}),(0,Z.jsxs)(`select`,{"data-testid":`work-git-branch-select`,"aria-label":r(`work.git.switchBranch`,{defaultValue:`Switch local branch`}),value:i.branch||``,disabled:t||c||ae,onChange:t=>{let n=t.target.value;!n||n===i.branch||z(()=>G.switchGitBranch(e,n),r(`work.git.branchSwitched`,{name:n,defaultValue:`Switched to {{name}}.`}))},className:`h-7 max-w-44 rounded-lg border border-line bg-surface px-2 text-[11px] text-ink outline-none disabled:opacity-50`,children:[i.detached&&(0,Z.jsx)(`option`,{value:``,disabled:!0,children:r(`work.git.detached`,{defaultValue:`detached HEAD`})}),i.branches.map(e=>(0,Z.jsx)(`option`,{value:e,children:e},e))]}),(0,Z.jsxs)(`div`,{className:`flex min-w-44 flex-1 items-center gap-1`,children:[(0,Z.jsx)(`input`,{"data-testid":`work-git-branch-input`,value:b,maxLength:200,onChange:e=>x(e.target.value),placeholder:r(`work.git.newBranch`,{defaultValue:`New local branch`}),className:`h-7 min-w-0 flex-1 rounded-lg border border-line bg-surface px-2 font-mono text-[11px] text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,Z.jsxs)(Y,{"data-testid":`work-git-create-branch-button`,size:`sm`,variant:`ghost`,className:`h-7 px-2`,disabled:t||c||!i.head||!b.trim(),onClick:()=>{let t=b.trim();z(()=>G.createGitBranch(e,t),r(`work.git.branchCreated`,{name:t,defaultValue:`Created {{name}}.`})).then(e=>{e&&x(``)})},children:[(0,Z.jsx)(ee,{className:`h-3.5 w-3.5`}),(0,Z.jsx)(`span`,{className:`hidden sm:inline`,children:r(`work.git.createBranch`,{defaultValue:`Create`})})]})]}),(0,Z.jsx)(`button`,{type:`button`,onClick:()=>void R(),disabled:o||c,"aria-label":r(`common.refresh`,{defaultValue:`Refresh`}),className:`inline-flex h-7 w-7 items-center justify-center rounded-lg text-ink-muted hover:bg-surface-subtle hover:text-ink disabled:opacity-50`,children:(0,Z.jsx)(A,{className:u(`h-3.5 w-3.5`,o&&`animate-spin`)})})]}),f&&(0,Z.jsx)(`div`,{className:`border-b border-error-200 bg-error-50 px-3 py-2 text-xs text-error-700 dark:border-error-900/60 dark:bg-error-900/30 dark:text-error-300`,children:f}),t&&n&&(0,Z.jsx)(`div`,{className:`border-b border-line px-3 py-1.5 text-[11px] text-ink-subtle`,children:n}),(0,Z.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 lg:grid-cols-[minmax(15rem,0.75fr)_minmax(0,2.25fr)]`,children:[(0,Z.jsxs)(`section`,{className:`flex min-h-0 flex-col border-b border-line lg:border-b-0 lg:border-e`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-2`,children:[(0,Z.jsxs)(`h3`,{className:`text-xs font-medium text-ink`,children:[r(`work.git.changes`,{defaultValue:`Changes`}),` `,(0,Z.jsx)(`span`,{className:`text-ink-subtle`,children:i.changes.length})]}),(0,Z.jsxs)(Y,{"data-testid":`work-git-stage-button`,size:`sm`,variant:`ghost`,className:`h-7 px-2 text-[11px]`,disabled:t||c||m.length===0&&i.changes.length===0,onClick:()=>{let t=m.length>0?m:i.changes.map(e=>e.path);z(()=>G.stageGitPaths(e,t),r(`work.git.staged`,{defaultValue:`Changes staged.`}))},children:[(0,Z.jsx)(O,{className:`h-3.5 w-3.5`}),m.length>0?r(`work.git.stageSelected`,{count:m.length,defaultValue:`Stage {{count}}`}):r(`work.git.stageAll`,{defaultValue:`Stage all`})]})]}),i.changes.length>0&&(0,Z.jsxs)(`div`,{className:`relative px-2 pb-1.5`,children:[(0,Z.jsx)(_,{className:`pointer-events-none absolute start-4 top-1/2 h-3 w-3 -translate-y-[calc(50%+3px)] text-ink-subtle`}),(0,Z.jsx)(`input`,{"data-testid":`work-git-filter`,value:S,maxLength:500,onChange:e=>C(e.target.value),placeholder:r(`work.git.filterFiles`,{defaultValue:`Filter changed files`}),"aria-label":r(`work.git.filterFiles`,{defaultValue:`Filter changed files`}),className:`h-7 w-full rounded-lg border border-line bg-surface pe-2 ps-7 text-[11px] text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`})]}),(0,Z.jsx)(`div`,{className:`min-h-32 flex-1 overflow-y-auto px-2 pb-2`,children:i.changes.length===0?(0,Z.jsx)(`p`,{className:`px-2 py-8 text-center text-xs text-ink-muted`,children:r(`work.git.clean`,{defaultValue:`Working tree is clean.`})}):re.length===0?(0,Z.jsx)(`p`,{className:`px-2 py-8 text-center text-xs text-ink-muted`,children:r(`work.git.noFilterMatches`,{defaultValue:`No changed files match this filter.`})}):re.map(e=>{let t=Un(e),{name:n,directory:i}=Kn(e.path),a=B.get(e.path);return(0,Z.jsxs)(`div`,{className:u(`flex items-center gap-1 rounded-lg hover:bg-surface-subtle`,w?.path===e.path&&`bg-surface-subtle`),children:[(0,Z.jsx)(`input`,{type:`checkbox`,"aria-label":r(`work.git.selectPath`,{path:e.path,defaultValue:`Select {{path}}`}),checked:m.includes(e.path),onChange:t=>h(n=>t.target.checked?[...n,e.path]:n.filter(t=>t!==e.path)),className:`ms-2 h-3.5 w-3.5 accent-primary-600`}),(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-git-change`,onClick:()=>void te(e),className:`flex min-w-0 flex-1 items-center gap-2 px-1.5 py-2 text-start`,title:e.path,children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:u(`w-3.5 shrink-0 text-center font-mono text-[10px] font-semibold`,Gn(t),e.staged&&`underline underline-offset-2`),children:t}),(0,Z.jsxs)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate text-start font-mono text-[11px]`,children:[(0,Z.jsx)(`span`,{className:`text-ink`,children:n}),i&&(0,Z.jsxs)(`span`,{className:`text-ink-subtle`,children:[` `,i]})]}),a&&(a.stats.added>0||a.stats.removed>0)&&(0,Z.jsx)(qn,{added:a.stats.added,removed:a.stats.removed})]})]},`${e.path}:${e.originalPath||``}`)})}),(0,Z.jsxs)(`div`,{className:`border-t border-line p-2`,children:[(0,Z.jsx)(`textarea`,{"data-testid":`work-git-commit-input`,value:v,maxLength:4e3,rows:2,onChange:e=>y(e.target.value),placeholder:r(`work.git.commitMessage`,{defaultValue:`Commit message`}),className:`w-full resize-none rounded-lg border border-line bg-surface px-2.5 py-2 text-xs text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,Z.jsxs)(Y,{"data-testid":`work-git-commit-button`,size:`sm`,className:`mt-1.5 w-full bg-primary-600 text-white hover:bg-primary-500`,disabled:t||c||ie===0||!v.trim(),onClick:()=>{let t=v.trim();z(()=>G.commitGit(e,t),r(`work.git.committed`,{defaultValue:`Commit created.`})).then(e=>{e&&y(``)})},children:[c&&(0,Z.jsx)(g,{className:`h-3.5 w-3.5 animate-spin`}),r(`work.git.commit`,{defaultValue:`Commit staged changes`})]})]}),(0,Z.jsxs)(`div`,{className:`max-h-56 shrink-0 overflow-y-auto border-t border-line p-3`,children:[(0,Z.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-xs font-medium text-ink`,children:[(0,Z.jsx)(D,{className:`h-3.5 w-3.5`}),r(`work.git.history`,{defaultValue:`Local history`})]}),i.commits.length===0?(0,Z.jsx)(`p`,{className:`py-3 text-center text-xs text-ink-muted`,children:r(`work.git.noCommits`,{defaultValue:`No commits yet.`})}):(0,Z.jsx)(`ol`,{className:`space-y-2`,children:i.commits.map(e=>(0,Z.jsxs)(`li`,{className:`rounded-lg border border-line bg-surface px-2.5 py-2`,children:[(0,Z.jsx)(`p`,{dir:`auto`,className:`text-xs text-ink`,children:e.subject}),(0,Z.jsxs)(`p`,{className:`mt-1 flex flex-wrap gap-x-2 text-[10px] text-ink-subtle`,children:[(0,Z.jsx)(`span`,{dir:`ltr`,className:`font-mono`,children:e.shortHash}),(0,Z.jsx)(`span`,{dir:`auto`,children:e.author}),(0,Z.jsx)(`time`,{dateTime:e.authoredAt,children:new Date(e.authoredAt).toLocaleDateString()})]})]},e.hash))}),(0,Z.jsx)(`p`,{className:`mt-3 border-t border-line pt-2 text-[10px] leading-relaxed text-ink-subtle`,children:r(`work.git.localOnly`,{defaultValue:`Local Git only. Push, pull, and pull requests require a separate trusted credential broker.`})})]})]}),(0,Z.jsx)(`section`,{className:`flex min-h-48 min-w-0 flex-col`,children:w||E?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5 border-b border-line px-2 py-1.5`,children:[(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-git-all-changes-button`,onClick:()=>{L.current+=1,T(null),k(!1)},className:`inline-flex h-6 shrink-0 items-center gap-1 rounded-lg px-1.5 text-[11px] text-ink-muted hover:bg-surface-subtle hover:text-ink`,children:[(0,Z.jsx)(ne,{className:`h-3 w-3 rtl:rotate-180`}),r(`work.git.allChanges`,{defaultValue:`All changes`})]}),w&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:u(`w-4 shrink-0 text-center font-mono text-[11px] font-semibold`,Gn(Wn(w.status))),children:Wn(w.status)}),(0,Z.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink`,title:w.path,children:w.path}),!w.binary&&(0,Z.jsx)(qn,{added:w.lines.filter(e=>e.type===`added`).length,removed:w.lines.filter(e=>e.type===`removed`).length})]})]}),E?(0,Z.jsx)(g,{className:`m-auto h-5 w-5 animate-spin text-ink-muted`}):w?(0,Z.jsxs)(`div`,{"data-testid":`work-git-diff`,dir:`ltr`,className:`min-h-0 flex-1 overflow-auto bg-surface font-mono text-[12px] leading-5`,children:[w.truncated&&(0,Z.jsx)(`p`,{className:`border-b border-line bg-surface-subtle/70 px-3 py-1.5 text-center font-sans text-[11px] text-ink-subtle`,children:r(`work.git.diffTruncated`,{defaultValue:`This diff is truncated.`})}),w.binary?(0,Z.jsx)(`p`,{className:`px-5 py-10 text-center font-sans text-xs text-ink-muted`,children:r(`work.git.binaryFile`,{defaultValue:`Binary file, no text diff.`})}):w.lines.length===0?(0,Z.jsx)(`p`,{className:`px-5 py-10 text-center font-sans text-xs text-ink-muted`,children:r(`work.git.noDiff`,{defaultValue:`No textual diff is available yet. Untracked files appear after staging.`})}):(0,Z.jsx)(jn,{lines:w.lines})]}):null]}):i.changes.length===0?(0,Z.jsx)(`p`,{className:`m-auto px-5 text-center text-xs text-ink-muted`,children:r(`work.git.clean`,{defaultValue:`Working tree is clean.`})}):P&&!j?(0,Z.jsx)(g,{className:`m-auto h-5 w-5 animate-spin text-ink-muted`}):(0,Z.jsxs)(`div`,{"data-testid":`work-git-review`,dir:`ltr`,className:`min-h-0 flex-1 overflow-auto bg-surface font-mono text-[12px] leading-5`,children:[j?.truncated&&(0,Z.jsx)(`p`,{className:`border-b border-line bg-surface-subtle/70 px-3 py-1.5 text-center font-sans text-[11px] text-ink-subtle`,children:r(`work.git.diffTruncated`,{defaultValue:`This diff is truncated.`})}),se.map(e=>(0,Z.jsxs)(`div`,{"data-testid":`work-git-review-file`,children:[(0,Z.jsx)(Jn,{letter:Wn(e.status),path:e.path,oldPath:e.oldPath,added:e.stats.added,removed:e.stats.removed}),e.binary?(0,Z.jsx)(`p`,{className:`px-5 py-6 text-center font-sans text-xs text-ink-muted`,children:r(`work.git.binaryFile`,{defaultValue:`Binary file, no text diff.`})}):(0,Z.jsx)(jn,{lines:e.lines})]},e.path)),oe.map(e=>(0,Z.jsx)(`div`,{"data-testid":`work-git-review-file`,children:(0,Z.jsxs)(`button`,{type:`button`,onClick:()=>void te(e),title:e.path,className:`flex w-full items-center gap-2 border-b border-line px-3 py-1.5 text-start hover:bg-surface-subtle`,children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:`w-4 shrink-0 text-center font-mono text-[11px] font-semibold text-[rgb(46,164,79)]`,children:`U`}),(0,Z.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink`,children:e.path}),(0,Z.jsx)(M,{className:`h-3 w-3 shrink-0 text-ink-subtle`})]})},e.path)),se.length===0&&oe.length===0&&(0,Z.jsx)(`p`,{className:`px-5 py-10 text-center font-sans text-xs text-ink-muted`,children:H?r(`work.git.noFilterMatches`,{defaultValue:`No changed files match this filter.`}):r(`work.git.selectChange`,{defaultValue:`Select a changed file to inspect its diff.`})})]})})]})]})}function Xn(e,t){return Te(e,t.ticket,t)}async function Zn(e){let t=(await W.post(`/auth/websocket-ticket`,{audience:`work-terminal`,taskId:e})).data.data?.ticket;if(!t)throw Error(`The server did not issue a terminal ticket.`);return Xn(e,{protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,websocketBaseUrl:void 0,production:!0,ticket:t})}var Qn=(e,t)=>{let n=getComputedStyle(document.documentElement).getPropertyValue(`--color-primary-${e}`).trim();if(!n)return t===void 0?`#4176e6`:`rgba(65, 118, 230, ${t})`;let[r,i,a]=n.split(/\s+/);return t===void 0?`rgb(${r}, ${i}, ${a})`:`rgba(${r}, ${i}, ${a}, ${t})`},$n=()=>({background:`#ffffff`,foreground:`#1f2328`,cursor:`#1f2328`,selectionBackground:Qn(500,.28)}),er=()=>({background:`#0f1115`,foreground:`#e6e6e6`,cursor:Qn(400),selectionBackground:Qn(500,.32)});function tr({taskId:e,active:t,disabledReason:n}){let{t:r}=l(),i=Pe(e=>e.theme.mode!==`light`),a=(0,X.useRef)(null),o=(0,X.useRef)(null),c=(0,X.useRef)(null),d=(0,X.useRef)(null),[f,m]=(0,X.useState)(`idle`),[h,_]=(0,X.useState)(null),[v,y]=(0,X.useState)(0),b=(0,X.useCallback)(()=>{let e=d.current,t=c.current,n=o.current;if(!(!e||!t||!n||n.readyState!==WebSocket.OPEN)){try{e.fit()}catch{return}n.send(JSON.stringify({type:`resize`,cols:t.cols,rows:t.rows}))}},[]);(0,X.useEffect)(()=>{if(!t||n)return;let r=!1,l,u;return(async()=>{m(`connecting`),_(null);let[{Terminal:t},{FitAddon:n}]=await Promise.all([s(()=>import(`./xterm-C3BHN0de.js`),[]),s(()=>import(`./addon-fit-DIOBYJe3.js`),[])]);if(await s(()=>Promise.resolve({}),__vite__mapDeps([6])),r||!a.current)return;l=new t({allowProposedApi:!0,convertEol:!1,cursorBlink:!0,fontFamily:`ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,fontSize:12,scrollback:5e3,theme:i?er():$n()});let f=new n;l.loadAddon(f),l.open(a.current),c.current=l,d.current=f;try{f.fit()}catch{}let p;try{p=await Zn(e)}catch(e){r||(m(`error`),_(e instanceof Error?e.message:null));return}if(r)return;u=new WebSocket(p),u.binaryType=`arraybuffer`,o.current=u;let h=new TextDecoder;u.onmessage=e=>{if(typeof e.data!=`string`){l?.write(h.decode(new Uint8Array(e.data)));return}try{let t=JSON.parse(e.data);if(t.type===`ready`){m(`connected`),b(),l?.focus();return}if(t.type===`error`){m(`error`),_(t.message||null);return}t.type===`exit`&&m(`closed`)}catch{}},u.onclose=()=>{r||m(e=>e===`error`||e===`closed`?e:`closed`)},u.onerror=()=>{r||m(`error`)},l.onData(e=>{u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify({type:`input`,data:e}))})})(),()=>{r=!0,u?.close(),o.current=null,l?.dispose(),c.current=null,d.current=null}},[t,n,v,i,b,e]),(0,X.useEffect)(()=>{let e=a.current;if(!e||!t)return;let n=new ResizeObserver(()=>b());return n.observe(e),()=>n.disconnect()},[t,b]);let x=()=>{o.current?.close(),y(e=>e+1)},S=n??(f===`error`?h??r(`work.terminal.failed`,{defaultValue:`The terminal session could not start.`}):f===`closed`?r(`work.terminal.closed`,{defaultValue:`Terminal session ended.`}):null);return(0,Z.jsxs)(`div`,{"data-testid":`work-terminal-panel`,"data-status":n?`unavailable`:f,className:`relative flex min-h-0 flex-1 flex-col bg-surface`,children:[!n&&(0,Z.jsx)(`div`,{ref:a,"data-testid":`work-terminal-surface`,dir:`ltr`,className:u(`min-h-0 flex-1 overflow-hidden p-2 text-left`,f!==`connected`&&`opacity-60`)}),f===`connecting`&&!n&&(0,Z.jsxs)(`div`,{className:`pointer-events-none absolute inset-0 flex items-center justify-center gap-2 text-xs text-ink-muted`,children:[(0,Z.jsx)(g,{className:`h-4 w-4 animate-spin`}),r(`work.terminal.connecting`,{defaultValue:`Opening a shell in the sandbox…`})]}),S&&(0,Z.jsxs)(`div`,{role:f===`error`?`alert`:void 0,className:`flex flex-col items-center gap-3 border-t border-line bg-surface-raised px-6 py-4 text-center`,children:[(0,Z.jsx)(p,{className:`h-6 w-6 text-ink-subtle`}),(0,Z.jsx)(`p`,{dir:`auto`,"data-testid":`work-terminal-status`,className:`max-w-md text-xs leading-relaxed text-ink-muted`,children:S}),!n&&(0,Z.jsx)(Y,{size:`sm`,"data-testid":`work-terminal-reconnect-button`,className:`h-8 rounded-lg bg-primary-600 px-3 text-white hover:bg-primary-500`,onClick:x,children:r(`work.terminal.reconnect`,{defaultValue:`Reconnect`})})]})]})}var nr=e=>{if(!e)return null;if(/^\/api\/work\/previews\/[A-Za-z0-9-]{1,100}\/\d{1,5}\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}\//.test(e))try{let t=new URL(be,window.location.origin).origin;return new URL(e,`${t}/`).toString()}catch{return null}return null},rr=e=>{let t=e.split(`/`).filter(Boolean);return t.pop(),t.join(`/`)},ir=(e,t)=>{let n=e.metadata?.name??e.metadata?.toolName??e.metadata?.tool??e.metadata?.command;return typeof n==`string`&&n?n:t};function ar({task:e,persona:t,openFileRequest:n,liveRun:r,files:i,selectedFile:a,loadingFiles:o,actionLoading:s,onLoadFiles:c,onLoadFile:f,onClearSelectedFile:m,onSaveFile:h,onStartPreview:_,onStopPreview:v,onDirtyChange:y,terminal:b}){let{t:x,i18n:S}=l(),C=d(S.language),[E,D]=(0,X.useState)(e.isAgent?`agent`:`files`),[O,k]=(0,X.useState)(``),[j,M]=(0,X.useState)(``),[N,P]=(0,X.useState)(),[F,ee]=(0,X.useState)(``),[L,R]=(0,X.useState)(!1),[z,B]=(0,X.useState)(!1),H=(0,X.useRef)(new Map),[re,ie]=(0,X.useState)(()=>new Map),ae=nr(e.previewUrl),ce=r?.runId,pe=r?.error,me=r?.tools,_e=(0,X.useMemo)(()=>{let t=new Set(me?.map(e=>e.id)||[]);return(e.messages||[]).filter(e=>{if(e.kind===`reasoning`||e.role!==`tool`&&e.kind===`message`)return!1;if(!ce||e.runId!==ce)return!0;if(e.kind===`error`&&pe)return!1;let n=e.metadata?.toolCallId;return typeof n!=`string`||!t.has(n)})},[pe,ce,me,e.messages]),ye=_e.length+(me?.length||0),be=!!a&&j!==(a?.content??``),W=e.status===`preparing`||e.status===`running`,G=(0,X.useRef)(W),K=(0,X.useRef)(0),q=(0,X.useRef)(j),xe=(0,X.useRef)(N),Se=(0,X.useRef)(a),Ce=(0,X.useRef)(e.id),we=(0,X.useRef)(c),Te=(0,X.useRef)(f),De=(0,X.useRef)(y),J=(0,X.useRef)(!0),Oe=a?re.get(a.path):void 0,je=(0,X.useMemo)(()=>a&&Oe!==void 0&&Oe!==a.content?Cn(Oe,a.content):null,[Oe,a]),Me=(0,X.useMemo)(()=>je?Tn(je):null,[je]),Ne=!!(Me&&(Me.added>0||Me.removed>0)),Pe=a?fn(a.path):!1,Fe=!a||pn(j),Ie=Pe&&Fe;(0,X.useEffect)(()=>{q.current=j,xe.current=N,Se.current=a,Ce.current=e.id,De.current=y},[N,j,y,a,e.id]),(0,X.useEffect)(()=>{we.current=c,Te.current=f},[f,c]),(0,X.useEffect)(()=>(J.current=!0,()=>{J.current=!1,K.current+=1,De.current(!1)}),[]),(0,X.useEffect)(()=>{if(!G.current&&W&&ie(new Map(H.current)),G.current&&!W&&(we.current(O),a&&!be)){let e=++K.current,t=a.path,n=q.current,r=xe.current;Te.current(t).then(i=>{if(!J.current||e!==K.current||i.path!==t||q.current!==n||xe.current!==r)return;H.current.set(i.path,i.content);let a=re.get(i.path);a!==void 0&&a!==i.content&&B(!0),q.current=i.content,xe.current=i.updatedAt??i.modifiedAt,M(i.content),P(i.updatedAt??i.modifiedAt)}).catch(()=>void 0)}G.current=W},[O,be,a,W,re]);let Le=()=>!be||window.confirm(x(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),Re=()=>{a&&Ae(e.id,a.path)},ze=async e=>{Le()&&(K.current+=1,Re(),m(),y(!1),B(!1),k(e),await c(e).catch(()=>void 0))},Be=async t=>{if(!Le())return;let n=++K.current;Re();let r=await f(t).catch(()=>void 0);if(!J.current||!r||n!==K.current)return;H.current.set(r.path,r.content);let i=re.get(r.path);B(i!==void 0&&i!==r.content);let a=Ee(e.id,r.path),o=a?.content??r.content,s=a?.baseUpdatedAt??r.updatedAt??r.modifiedAt;q.current=o,xe.current=s,M(o),P(s),y(a!==null&&a.content!==r.content)},Ve=(0,X.useRef)(0);(0,X.useEffect)(()=>{!n||n.nonce===Ve.current||(Ve.current=n.nonce,D(`files`),Be(n.path))},[n]);let He=()=>{Le()&&(K.current+=1,Re(),m(),y(!1),B(!1))},Ue=t=>{a&&(q.current=t,M(t),t===a.content?Ae(e.id,a.path):ke(e.id,a.path,{content:t,baseUpdatedAt:N??a.updatedAt??a.modifiedAt}),y(t!==a.content))},We=async()=>{if(!a)return;let t=e.id,n=a.path,r=j,i=K.current,o=await h(n,r,N).catch(()=>!1);if(!J.current||o===!1||i!==K.current||Ce.current!==t||Se.current?.path!==n)return;let s=o.updatedAt??o.modifiedAt;H.current.set(n,typeof o.content==`string`?o.content:r),xe.current=s,P(s);let c=q.current;if(c===r){Ae(t,n),y(!1);return}ke(t,n,{content:c,baseUpdatedAt:s}),y(!0)},Ge=async()=>{if(!a||W||L||!Ie)return;R(!0);let e=K.current,t=a.path,n=q.current;try{let r=await hn(t,n);if(!J.current||e!==K.current||Se.current?.path!==t||q.current!==n)return;Ue(r),U.success(x(`work.files.formatted`,{defaultValue:`Code formatted.`}))}catch(r){if(!J.current||e!==K.current||Se.current?.path!==t||q.current!==n)return;U.error(r instanceof Error?r.message:x(`work.files.formatFailed`,{defaultValue:`Could not format this file.`}))}finally{J.current&&R(!1)}},Ke=[...e.isAgent?[{id:`agent`,label:x(`work.workspace.agent`,{defaultValue:`Agent`}),icon:V,testId:`work-agent-tab`}]:[],{id:`files`,label:x(`work.workspace.files`,{defaultValue:`Files`}),icon:I,testId:`work-files-tab`},{id:`activity`,label:x(`work.workspace.activity`,{defaultValue:`Activity`}),icon:he,testId:`work-activity-tab`},{id:`git`,label:x(`work.workspace.git`,{defaultValue:`Git`}),icon:le,testId:`work-git-tab`},{id:`terminal`,label:x(`work.workspace.terminal`,{defaultValue:`Terminal`}),icon:p,testId:`work-terminal-tab`},{id:`preview`,label:x(`work.workspace.preview`,{defaultValue:`Preview`}),icon:ge,testId:`work-preview-tab`},...e.computerAvailable?[{id:`screen`,label:x(`work.workspace.screen`,{defaultValue:`Screen`}),icon:ve,testId:`work-screen-tab`}]:[]],qe=(e,t)=>{let n=null;if(e.key===`ArrowRight`&&(n=(t+(C?-1:1)+Ke.length)%Ke.length),e.key===`ArrowLeft`&&(n=(t+(C?1:-1)+Ke.length)%Ke.length),e.key===`Home`&&(n=0),e.key===`End`&&(n=Ke.length-1),n===null)return;e.preventDefault();let r=Ke[n];D(r.id),e.currentTarget.parentElement?.querySelector(`#work-workspace-tab-${r.id}`)?.focus()};return(0,Z.jsxs)(`section`,{className:`flex h-full min-h-0 flex-col bg-transparent`,children:[(0,Z.jsxs)(`div`,{"data-testid":`work-workspace-toolbar`,className:`flex h-12 shrink-0 items-center gap-2 border-b border-line bg-surface-raised/75 px-2 backdrop-blur-xl`,children:[(0,Z.jsx)(`div`,{role:`tablist`,"aria-orientation":`horizontal`,"aria-label":x(`work.workspace.label`,{defaultValue:`Workspace views`}),className:`flex min-w-0 items-center overflow-x-auto rounded-xl border border-line bg-surface-subtle p-0.5 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:Ke.map((e,t)=>{let n=e.icon;return(0,Z.jsxs)(`button`,{type:`button`,role:`tab`,id:`work-workspace-tab-${e.id}`,"aria-selected":E===e.id,"aria-controls":E===e.id?`work-workspace-panel-${e.id}`:void 0,"aria-label":e.label,tabIndex:E===e.id?0:-1,title:e.label,"data-testid":e.testId,onClick:()=>D(e.id),onKeyDown:e=>qe(e,t),className:u(`flex h-7 items-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow]`,E===e.id?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:text-ink`),children:[(0,Z.jsx)(n,{className:`h-3.5 w-3.5 shrink-0`}),(0,Z.jsx)(`span`,{className:`hidden xs:inline`,children:e.label}),e.id===`activity`&&ye>0&&(0,Z.jsx)(`span`,{className:`rounded-full bg-surface px-1.5 text-[10px] text-ink-muted`,children:ye})]},e.id)})}),E===`files`&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1.5`,children:[a&&(0,Z.jsx)(`button`,{type:`button`,className:`inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-ink-muted hover:bg-surface-subtle hover:text-ink sm:hidden`,onClick:He,"aria-label":x(`work.files.back`,{defaultValue:`Back to files`}),children:(0,Z.jsx)(ne,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,Z.jsxs)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,title:a?.path??`/workspace${O?`/${O}`:``}`,children:[a?.path??`/workspace${O?`/${O}`:``}`,be&&` •`]})]}),(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,Z.jsx)(`button`,{type:`button`,disabled:!O,onClick:()=>void ze(rr(O)),className:u(`hidden h-8 w-8 items-center justify-center rounded-lg border border-transparent text-ink-muted hover:border-line hover:bg-surface-subtle hover:text-ink disabled:opacity-30 sm:inline-flex`,!a&&`inline-flex`),"aria-label":x(`work.files.up`,{defaultValue:`Parent folder`}),title:x(`work.files.up`,{defaultValue:`Parent folder`}),children:(0,Z.jsx)(ne,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,Z.jsx)(`button`,{type:`button`,"data-testid":`work-refresh-files-button`,onClick:()=>void c(O).catch(()=>void 0),className:`inline-flex h-8 w-8 items-center justify-center rounded-lg border border-transparent text-ink-muted hover:border-line hover:bg-surface-subtle hover:text-ink`,"aria-label":x(`common.refresh`,{defaultValue:`Refresh`}),title:x(`common.refresh`,{defaultValue:`Refresh`}),children:(0,Z.jsx)(A,{className:u(`h-3.5 w-3.5`,o&&`animate-spin`)})}),a&&Ne&&Me&&(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-diff-toggle-button`,"aria-pressed":z,onClick:()=>B(e=>!e),title:x(`work.files.changesSince`,{defaultValue:`What changed since the last turn`}),className:u(`inline-flex h-8 items-center gap-1.5 rounded-lg border px-2 text-[11px] font-medium transition-colors`,z?`border-transparent bg-ink text-ink-inverse`:`border-line text-ink-muted hover:bg-surface-subtle hover:text-ink`),children:[(0,Z.jsx)(fe,{className:`h-3.5 w-3.5 shrink-0`}),(0,Z.jsx)(`span`,{className:`hidden sm:inline`,children:x(`work.files.changes`,{defaultValue:`Changes`})}),(0,Z.jsxs)(`span`,{dir:`ltr`,className:`tabular-nums`,children:[(0,Z.jsxs)(`span`,{className:z?void 0:`text-[rgb(46,164,79)]`,children:[`+`,Me.added]}),` `,(0,Z.jsxs)(`span`,{className:z?void 0:`text-[rgb(255,61,129)]`,children:[`−`,Me.removed]})]})]}),a&&!z&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(Y,{"data-testid":`work-format-file-button`,size:`sm`,variant:`ghost`,className:`h-8 w-8 rounded-lg px-0 sm:w-auto sm:px-2.5`,disabled:W||L||!Ie,onClick:()=>void Ge(),"aria-busy":L||void 0,title:Ie?x(`work.files.formatShortcut`,{defaultValue:`Format (Shift+Alt+F)`}):Pe?x(`work.files.formatTooLarge`,{defaultValue:`Formatting is limited to files under 100,000 characters and 4,000 lines.`}):x(`work.files.formatUnsupported`,{defaultValue:`Formatting is not available for this file type.`}),"aria-label":x(`work.files.format`,{defaultValue:`Format file`}),children:[L?(0,Z.jsx)(g,{className:`h-3.5 w-3.5 animate-spin`}):(0,Z.jsx)(te,{className:`h-3.5 w-3.5`}),(0,Z.jsx)(`span`,{className:`hidden 2xl:inline`,children:x(`work.files.format`,{defaultValue:`Format`})})]}),(0,Z.jsxs)(Y,{"data-testid":`work-save-file-button`,size:`sm`,className:`h-8 w-8 rounded-lg bg-primary-600 px-0 text-white hover:bg-primary-500 sm:w-auto sm:px-2.5`,disabled:!be||W||L||s,onClick:()=>void We(),"aria-busy":s||void 0,title:x(`work.files.saveShortcut`,{defaultValue:`Save (⌘/Ctrl+S)`}),"aria-label":x(`common.save`),children:[s?(0,Z.jsx)(g,{className:`h-3.5 w-3.5 animate-spin`}):(0,Z.jsx)(se,{className:`h-3.5 w-3.5`}),(0,Z.jsx)(`span`,{className:`hidden 2xl:inline`,children:x(`common.save`)})]})]})]})]}),(E===`activity`||E===`git`||E===`screen`)&&(0,Z.jsx)(`div`,{className:`min-w-0 flex-1`}),E===`terminal`&&(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,Z.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,children:`/workspace`}),W&&(0,Z.jsx)(`span`,{className:`shrink-0 text-[10px] text-ink-subtle`,children:x(`work.terminal.taskRunning`,{defaultValue:`Model turn in progress`})})]}),E===`preview`&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`input`,{dir:`auto`,value:F,onChange:e=>ee(e.target.value),placeholder:x(`work.preview.command`,{defaultValue:`Optional start command`}),"aria-label":x(`work.preview.command`,{defaultValue:`Optional start command`}),className:`h-8 min-w-0 flex-1 rounded-lg border border-line bg-surface px-2.5 font-mono text-[11px] text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[e.previewStatus===`running`||e.previewStatus===`starting`?(0,Z.jsxs)(Y,{"data-testid":`work-stop-preview-button`,variant:`danger`,size:`sm`,className:`h-8 w-8 rounded-lg px-0 sm:w-auto sm:px-2.5`,disabled:s,onClick:()=>void v(),"aria-busy":s||void 0,"aria-label":x(`work.preview.stop`,{defaultValue:`Stop preview`}),children:[s?(0,Z.jsx)(g,{className:`h-3.5 w-3.5 animate-spin`}):(0,Z.jsx)(w,{className:`h-3.5 w-3.5 fill-current`}),(0,Z.jsx)(`span`,{className:`hidden 2xl:inline`,children:x(`work.preview.stop`,{defaultValue:`Stop preview`})})]}):(0,Z.jsxs)(Y,{"data-testid":`work-start-preview-button`,size:`sm`,className:`h-8 w-8 rounded-lg bg-primary-600 px-0 text-white hover:bg-primary-500 sm:w-auto sm:px-2.5`,disabled:s,onClick:()=>void _(F.trim()||void 0),"aria-busy":s||void 0,"aria-label":x(`work.preview.start`,{defaultValue:`Start preview`}),children:[s?(0,Z.jsx)(g,{className:`h-3.5 w-3.5 animate-spin`}):(0,Z.jsx)(ue,{className:`h-3.5 w-3.5 fill-current`}),(0,Z.jsx)(`span`,{className:`hidden 2xl:inline`,children:x(`work.preview.start`,{defaultValue:`Start preview`})})]}),ae&&(0,Z.jsx)(`a`,{href:ae,target:`_blank`,rel:`noopener noreferrer`,"aria-label":x(`work.preview.open`,{defaultValue:`Open`}),title:x(`work.preview.open`,{defaultValue:`Open`}),className:`inline-flex h-8 w-8 items-center justify-center rounded-lg border border-line text-ink-muted hover:bg-surface-subtle hover:text-ink`,children:(0,Z.jsx)(T,{className:`h-3.5 w-3.5`})})]})]})]}),E===`files`&&(0,Z.jsxs)(`div`,{id:`work-workspace-panel-files`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-files`,className:`flex min-h-0 flex-1`,children:[(0,Z.jsx)(`div`,{className:u(`flex min-h-0 w-full flex-col border-e border-line bg-surface-raised`,a?`hidden sm:flex sm:w-52 xl:w-60`:`flex`),children:(0,Z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-1.5`,children:o&&i.length===0?(0,Z.jsx)(`div`,{className:`flex justify-center py-8 text-ink-muted`,children:(0,Z.jsx)(g,{className:`h-5 w-5 animate-spin`})}):i.length===0?(0,Z.jsx)(`p`,{className:`px-3 py-8 text-center text-xs text-ink-muted`,children:x(`work.files.empty`,{defaultValue:`No files in this folder yet.`})}):[...i].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1).map(e=>(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-file-item`,"data-path":e.path,onClick:()=>{e.type===`directory`?ze(e.path):Be(e.path)},className:u(`flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-start text-xs hover:bg-surface-subtle`,a?.path===e.path?`bg-surface-subtle text-ink`:`text-ink-muted`),children:[e.type===`directory`?(0,Z.jsx)(de,{className:`h-3.5 w-3.5 shrink-0 text-amber-500`}):(0,Z.jsx)(oe,{className:`h-3.5 w-3.5 shrink-0`}),(0,Z.jsx)(`span`,{dir:`auto`,className:`truncate`,children:e.name})]},e.path))})}),(0,Z.jsx)(`div`,{className:u(`min-h-0 min-w-0 flex-1 flex-col`,a?`flex`:`hidden sm:flex`),children:a&&z&&je?(0,Z.jsx)(Mn,{lines:je,ariaLabel:x(`work.files.diffLabel`,{path:a.path,defaultValue:`Changes since the last turn: {{path}}`})}):a?(0,Z.jsx)(bn,{path:a.path,value:j,ariaLabel:x(`work.files.editorLabel`,{path:a.path,defaultValue:`File editor: {{path}}`}),onChange:Ue,onSaveShortcut:()=>{be&&!W&&!s&&!L&&We()},onFormatShortcut:()=>void Ge(),disabled:W||L}):(0,Z.jsxs)(`div`,{className:`m-auto px-6 text-center text-xs text-ink-muted`,children:[(0,Z.jsx)(oe,{className:`mx-auto mb-3 h-7 w-7 text-ink-subtle`}),x(`work.files.select`,{defaultValue:`Select a file to inspect and edit it.`})]})})]}),E===`activity`&&(0,Z.jsxs)(`div`,{id:`work-workspace-panel-activity`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-activity`,className:`min-h-0 flex-1 overflow-y-auto p-3`,children:[r&&(0,Z.jsx)(`div`,{className:`mb-3`,children:(0,Z.jsx)(bt,{run:r,variant:`activity`})}),_e.length===0&&!r?(0,Z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center text-xs text-ink-muted`,children:[(0,Z.jsx)(p,{className:`mb-3 h-7 w-7 text-ink-subtle`}),x(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]}):(0,Z.jsx)(`div`,{className:`space-y-2`,children:_e.map(e=>(0,Z.jsxs)(`div`,{className:`rounded-xl border border-line bg-surface p-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Z.jsx)(`span`,{dir:`auto`,className:`truncate font-mono text-xs font-medium text-ink`,children:ir(e,x(`work.activity.toolActivity`,{defaultValue:`Tool activity`}))}),(0,Z.jsx)(`span`,{className:`shrink-0 text-[10px] uppercase tracking-wide text-ink-subtle rtl:tracking-normal`,children:{message:x(`work.activity.kinds.message`,{defaultValue:`Message`}),reasoning:x(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`}),tool_call:x(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}),tool_result:x(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),error:x(`work.activity.kinds.error`,{defaultValue:`Error`})}[e.kind]})]}),e.content&&(0,Z.jsx)(`pre`,{dir:`ltr`,className:`mt-2 max-h-56 overflow-auto whitespace-pre-wrap break-words text-left font-mono text-[11px] leading-relaxed text-ink-muted`,children:e.content})]},e.id))})]}),E===`git`&&(0,Z.jsx)(`div`,{id:`work-workspace-panel-git`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-git`,className:`min-h-0 flex-1`,children:(0,Z.jsx)(Yn,{taskId:e.id,mutationsDisabled:W||e.previewStatus===`starting`||e.previewStatus===`running`,disabledReason:W?x(`work.git.blockedByRun`,{defaultValue:`Git write actions unlock when the model turn finishes.`}):e.previewStatus===`starting`||e.previewStatus===`running`?x(`work.git.blockedByPreview`,{defaultValue:`Stop the preview before changing Git state.`}):void 0})}),E===`agent`&&(0,Z.jsx)(`div`,{id:`work-workspace-panel-agent`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-agent`,className:`min-h-0 flex-1 overflow-y-auto scrollbar-thin`,children:(0,Z.jsx)(tn,{task:e,persona:t,active:E===`agent`,onOpenScreen:()=>D(`screen`)})}),E===`screen`&&(0,Z.jsx)(`div`,{id:`work-workspace-panel-screen`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-screen`,className:`flex min-h-0 flex-1 flex-col`,children:(0,Z.jsx)(Qt,{taskId:e.id,active:E===`screen`})}),E===`terminal`&&(0,Z.jsx)(`div`,{id:`work-workspace-panel-terminal`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-terminal`,className:`flex min-h-0 flex-1 flex-col`,children:(0,Z.jsx)(tr,{taskId:e.id,active:E===`terminal`,disabledReason:b&&!b.available?b.reason??x(`work.terminal.unavailable`,{defaultValue:`The interactive terminal is not available in this deployment.`}):W?x(`work.terminal.blockedByRun`,{defaultValue:`The model is using this container. The terminal opens when the turn finishes.`}):void 0})}),E===`preview`&&(0,Z.jsx)(`div`,{id:`work-workspace-panel-preview`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-preview`,className:`flex min-h-0 flex-1 flex-col`,children:e.previewStatus===`starting`?(0,Z.jsxs)(`div`,{className:`m-auto flex items-center gap-2 text-xs text-ink-muted`,children:[(0,Z.jsx)(g,{className:`h-4 w-4 animate-spin`}),x(`work.preview.starting`,{defaultValue:`Starting preview…`})]}):ae&&e.previewStatus===`running`?(0,Z.jsx)(`iframe`,{"data-testid":`work-preview-frame`,title:x(`work.preview.frameTitle`,{defaultValue:`Workspace preview`}),src:ae,sandbox:`allow-scripts allow-forms allow-modals allow-downloads allow-pointer-lock`,referrerPolicy:`no-referrer`,className:`min-h-0 flex-1 border-0 bg-white`}):(0,Z.jsxs)(`div`,{className:`m-auto max-w-sm px-6 text-center text-xs leading-relaxed text-ink-muted`,children:[(0,Z.jsx)(ge,{className:`mx-auto mb-3 h-8 w-8 text-ink-subtle`}),e.previewStatus===`failed`?x(`work.preview.failed`,{defaultValue:`The preview could not start. Check Activity, then try another command.`}):x(`work.preview.empty`,{defaultValue:`Start the app inside this workspace to inspect it here.`})]})})]})}var or=e=>{let t=e.trim().toLowerCase();return!!t&&!t.includes(`embed`)},sr=(e,t)=>e instanceof Error&&e.message?e.message:t,cr=(e,t)=>new Promise(n=>{if(t.aborted){n();return}let r,i=()=>{r!==void 0&&window.clearTimeout(r),t.removeEventListener(`abort`,i),n()};r=window.setTimeout(i,e),t.addEventListener(`abort`,i,{once:!0})});function lr(){let{t:e}=l(),t=o(),n=r(),{taskId:s}=i(),c=Pe(e=>e.preferences),d=Pe(e=>e.setPreferences),p=Ne(e=>e.user),m=p?.id??null,[g,_]=(0,X.useState)(!1),y=f(e=>e.models),x=f(e=>e.selectedModel),S=f(e=>e.selectedProviderType),C=f(e=>e.selectedProviderId),w=f(e=>e.loadModels),{capabilities:T,tasks:E,selectedTask:D,files:O,selectedFile:k,liveRuns:A,loadingTask:j,loadingOlderMessages:M,loadingFiles:N,actionLoading:P,error:F,loadCapabilities:ee,loadTasks:I,selectTask:L,loadTask:R,loadOlderMessages:z,createTask:te,updateTask:V,deleteTask:H,markTaskSeen:ne,startRun:re,cancelRun:ie,beginLiveRun:ae,applyRunEvents:oe,setLiveRunConnection:se,clearLiveRun:le,loadFiles:ue,loadFile:de,clearSelectedFile:fe,saveFile:he,startPreview:ve,stopPreview:ye,clearError:be}=De(),W=(0,X.useMemo)(()=>y.filter(e=>!e.isPersona&&!e.isAgent&&or(e.name)&&(!e.isPlugin||!!e.pluginId)),[y]),K=(0,X.useMemo)(()=>W.flatMap(e=>{if(e.isPlugin&&!e.pluginId)return[];let t=e.isPlugin?`plugin`:`ollama`,n=e.isPlugin?e.pluginId:void 0,r=e.name.trim().toLowerCase(),i={model:e.name,providerType:t,providerId:n};return[{...i,key:Ke(i),label:e.isPlugin&&e.pluginName?`${e.name} · ${e.pluginName}`:e.name,remote:e.isPlugin||r.endsWith(`:cloud`)||r.endsWith(`-cloud`)}]}),[W]),[q,xe]=(0,X.useState)(``),[Se,Ce]=(0,X.useState)({locationKey:t.key,value:`conversation`}),Te=Se.locationKey===t.key?Se.value:`conversation`,Ee=(0,X.useCallback)(e=>Ce({locationKey:t.key,value:e}),[t.key]),[J,Oe]=(0,X.useState)(!1),[ke,je]=(0,X.useState)(null),Y=ke?.locationKey===t.key&&ke.taskId===s?ke:null;ke&&!Y&&je(null);let Fe=(0,X.useCallback)(e=>{s&&(Ee(`workspace`),je(n=>({locationKey:t.key,taskId:s,path:e,nonce:n?.locationKey===t.key&&n.taskId===s?n.nonce+1:1})))},[t.key,Ee,s]),[Ie,ze]=(0,X.useState)(``),Be=T?.hostWorkspaces?.enabled===!0,Ve=T?.hostWorkspaces?.roots??[],[He,Ue]=(0,X.useState)([]),[We,Ge]=(0,X.useState)(``),Je=f(e=>e.personas),Ye=f(e=>e.loadPersonas),[Xe,Qe]=(0,X.useState)(``),$e=(0,X.useMemo)(()=>Object.values(Je).sort((e,t)=>e.name.localeCompare(t.name)),[Je]);Xe&&$e.length>0&&!Je[Xe]&&Qe(``);let et=!D;(0,X.useEffect)(()=>{if(!et)return;let e=!1;return G.listPolicies().then(t=>{if(e||!t.success||!t.data)return;let n=t.data;Ue(n),Ge(e=>e&&!n.some(t=>t.id===e)?``:e)}).catch(()=>{}),()=>{e=!0}},[et]),(0,X.useEffect)(()=>{et&&Ye().catch(()=>{})},[et,Ye]);let[tt,nt]=(0,X.useState)(!1),[rt,it]=(0,X.useState)(null),at=He.some(e=>e.guiEnabled===!0),ot=(0,X.useCallback)(async()=>{nt(!0),it(null);try{let e=(await G.startComputerSetup()).data;for(;e?.building;)await new Promise(e=>window.setTimeout(e,4e3)),e=(await G.getComputerSetup()).data;if(e?.buildError){it(e.buildError);return}let t=await G.listPolicies();t.success&&t.data&&(Ue(t.data),e?.policyId&&Ge(e.policyId))}catch(e){it(sr(e,`The Work Computer could not be set up.`))}finally{nt(!1)}},[]),st=D?.id,ct=D?.previewStatus===`running`||D?.previewStatus===`starting`;(0,X.useEffect)(()=>{if(!st||!ct)return;let e=window.setInterval(()=>{document.visibilityState===`visible`&&R(st,!0).catch(()=>{})},3e4);return()=>window.clearInterval(e)},[st,ct,R]);let[lt,ut]=(0,X.useState)({taskId:null,open:!1}),dt=lt.open&&lt.taskId===D?.id,ft=(0,X.useRef)(null),pt=(0,X.useRef)(null),mt=(0,X.useRef)(null),ht=(0,X.useCallback)((e=!1)=>{ut(e=>({...e,open:!1})),e&&window.requestAnimationFrame(()=>pt.current?.focus())},[]);(0,X.useEffect)(()=>{if(!dt)return;let e=window.requestAnimationFrame(()=>{mt.current?.querySelector(`[role="menuitem"]`)?.focus()}),t=e=>{e.target instanceof Node&&!ft.current?.contains(e.target)&&ht()},n=e=>{e.key===`Escape`&&(e.preventDefault(),ht(!0))};return document.addEventListener(`pointerdown`,t),document.addEventListener(`keydown`,n),()=>{window.cancelAnimationFrame(e),document.removeEventListener(`pointerdown`,t),document.removeEventListener(`keydown`,n)}},[ht,dt]);let gt=e=>{if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),ht(!0);return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`&&e.key!==`Home`&&e.key!==`End`)return;let t=[...mt.current?.querySelectorAll(`[role="menuitem"]:not(:disabled)`)??[]];if(t.length===0)return;e.preventDefault();let n=t.indexOf(document.activeElement);t[e.key===`Home`?0:e.key===`End`?t.length-1:e.key===`ArrowUp`?(n-1+t.length)%t.length:(n+1)%t.length]?.focus()};(0,X.useEffect)(()=>{ee(),I()},[ee,I]),(0,X.useEffect)(()=>{if(!s){L(null);return}L(s),R(s).catch(()=>void 0),ue(s,``).catch(()=>void 0)},[s,ue,R,L]);let _t=K.find(e=>e.key===q)||K.find(e=>e.model===x&&(S===`plugin`?e.providerType===`plugin`&&e.providerId===C:e.providerType===`ollama`))||K[0],vt=s?E.find(e=>e.id===s):void 0,yt=vt?.status??D?.status;(0,X.useEffect)(()=>{s&&ne(s)},[s,yt,ne]);let bt=D?.activeRun??vt?.activeRun??null,xt=bt?.id,St=bt?.status===`queued`||bt?.status===`preparing`||bt?.status===`running`,Ct=s&&A[s]?.runId===xt?A[s]:void 0,wt=yt===`preparing`||yt===`running`?1e3:4e3;(0,X.useEffect)(()=>{let e,t=!1,n=async()=>{await I(!0),t||(e=setTimeout(n,wt))};return e=setTimeout(n,wt),()=>{t=!0,e&&clearTimeout(e)}},[I,wt]);let Tt=(0,X.useRef)(null);(0,X.useEffect)(()=>{if(!s||!yt){Tt.current=null;return}let e=Tt.current;Tt.current={taskId:s,status:yt},e?.taskId===s&&(e.status===`preparing`||e.status===`running`)&&yt!==`preparing`&&yt!==`running`&&(R(s,!0).catch(()=>void 0),ue(s,``).catch(()=>void 0))},[ue,R,yt,s]),(0,X.useEffect)(()=>{if(!s||!xt||!St)return;let e=new AbortController,t=!1,n=0,r=De.getState().liveRuns[s]?.runId===xt&&De.getState().liveRuns[s]?.lastEventId||0,i=!1,a=[],o=null,c=()=>{if(o!==null&&(window.cancelAnimationFrame(o),o=null),a.length===0)return;let e=a;a=[],oe(e)},l=e=>{if(e.type!==`snapshot`&&(n=0),r=Math.max(r,e.id),a.push(e),e.type===`done`||e.type===`error`&&e.data.terminal!==!1){i=!0,c();return}o===null&&(o=window.requestAnimationFrame(c))};return ae(s,xt,bt?.startedAt||void 0),(async()=>{for(;!t&&!e.signal.aborted&&!i;){se(s,xt,n>=3?`error`:n===0?`connecting`:`reconnecting`);let a=Date.now();try{if(await G.streamRunEvents({taskId:s,runId:xt,after:r,signal:e.signal,onEvent:l}),c(),i||t||e.signal.aborted)break;throw Error(`The live Work connection closed.`)}catch(r){if(c(),t||e.signal.aborted)return;Date.now()-a>=5e3&&(n=0),n+=1,se(s,xt,n>=3?`error`:`reconnecting`,n>=3?sr(r,`Live updates are reconnecting in the background.`):void 0),await cr(Math.min(4e3,250*2**Math.min(n,4)),e.signal)}}if(c(),!(!i||e.signal.aborted)){se(s,xt,`closed`);try{await Promise.all([R(s,!0),ue(s,``),I(!0)])}catch{}finally{le(s,xt)}}})(),()=>{t=!0,e.abort(),c()}},[oe,ae,le,ue,R,I,bt?.startedAt,St,xt,se,s]),(0,X.useEffect)(()=>{if(!J)return;let e=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[J]);let Et=(0,X.useCallback)(()=>!J||window.confirm(e(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),[e,J]),Dt=(0,X.useCallback)(()=>!J||window.confirm(e(`work.files.leaveWithDraft`,{defaultValue:`Leave this file? Your unsaved edit will remain as a browser draft.`})),[e,J]),Ot=()=>{D&&k&&Ae(D.id,k.path)},At=a(({currentLocation:e,nextLocation:t})=>{let n=t.state;return J&&n?.deletedWorkTaskId!==s&&`${e.pathname}${e.search}${e.hash}`!=`${t.pathname}${t.search}${t.hash}`});(0,X.useEffect)(()=>{if(At.state!==`blocked`)return;if(!Dt()){At.reset();return}let e=At.proceed,t=window.setTimeout(()=>{Oe(!1),window.setTimeout(e,0)},0);return()=>window.clearTimeout(t)},[Dt,At]);let jt=()=>{be(),Ee(`conversation`),n(`/work`)},Mt=async t=>{if(D&&!Et())return!1;D&&J&&(Ot(),fe(),Oe(!1));try{if(D&&qe(D)){let e=await G.sendRunMessage(D.id,t);if(!e.success)throw Error(e.message||`The message could not be sent.`);await R(D.id)}else if(D)await re(D.id,{message:t,model:D.model,providerType:D.providerType,providerId:D.providerId||void 0});else{if(!_t)throw Error(e(`work.composer.noModelSelected`,{defaultValue:`No Work-compatible model is selected.`}));let r=await te({message:t,model:_t.model,providerType:_t.providerType,providerId:_t.providerId,networkEnabled:!0,...Be&&Ie.trim()?{hostPath:Ie.trim()}:{},...We?{policyId:We}:{},...Xe?{personaId:Xe,isAgent:!0}:{}});n(`/work/${r.id}`)}return!0}catch(t){return U.error(sr(t,e(`work.toasts.runFailed`,{defaultValue:`Could not start the Work task.`}))),!1}},Nt=async t=>{let n=Kt.find(e=>e.key===t);if(n){if(!D){xe(t);return}try{await V(D.id,{model:n.model,providerType:n.providerType,providerId:n.providerId})}catch(t){U.error(sr(t,e(`work.toasts.updateFailed`,{defaultValue:`Could not update this task.`})))}}},Pt=async()=>{if(D)try{await ie(D.id),U.success(e(`work.toasts.cancelled`,{defaultValue:`Work run stopped.`}))}catch(t){U.error(sr(t,e(`work.toasts.cancelFailed`,{defaultValue:`Could not stop the Work run.`})))}},Ft=async t=>{let r=E.find(e=>e.id===t);if(!window.confirm(e(`work.tasks.deleteConfirm`,{defaultValue:`Delete “{{title}}” and its workspace permanently?`,title:r?.title||e(`work.tasks.untitled`,{defaultValue:`Untitled task`})})))return;let i=s===t&&J;i&&Oe(!1);try{await H(t),Me(t),s===t&&n(`/work`)}catch(t){i&&Oe(!0),U.error(sr(t,e(`work.toasts.deleteFailed`,{defaultValue:`Could not delete this Work task.`})))}},It=async t=>{if(!D)return!1;let n=t.trim();if(!n||n===D.title)return!!n;try{return await V(D.id,{title:n}),!0}catch(t){return U.error(sr(t,e(`work.toasts.renameFailed`,{defaultValue:`Could not rename this task.`}))),!1}},Lt=async(e,t,n)=>{try{return await e(),n&&U.success(n),!0}catch(e){return U.error(sr(e,t)),!1}},Rt=async(t,n,r)=>{if(!D)return!1;let i=D.id;try{let a=await he(i,t,n,r);return De.getState().selectedTaskId===i&&U.success(e(`work.toasts.saved`,{defaultValue:`File saved.`})),a}catch(t){return De.getState().selectedTaskId===i&&U.error(sr(t,e(`work.toasts.saveFailed`,{defaultValue:`Could not save this file.`}))),!1}},zt=T?.available===!1,Bt=e(`work.runtime.ready`,{defaultValue:`Runtime ready`}),Vt=T?.runtime===`kubernetes`?`Kubernetes · ${Bt}`:T?.pluginAvailable?T.ollamaAvailable?e(`work.runtime.readyHybrid`,{defaultValue:`Docker + models ready`}):e(`work.runtime.readyPlugin`,{defaultValue:`Docker + plugin ready`}):e(`work.runtime.readyOllama`,{defaultValue:`Docker ready`}),Ht=D?qe(D):!1,Q=D?{model:D.model,providerType:D.providerType,providerId:D.providerId||void 0}:void 0,Ut=Q?Ke(Q):_t?.key||``,Gt=Q&&!K.some(e=>e.key===Ut)?{...Q,key:Ut,label:`${Q.model} · ${Q.providerType===`plugin`?Q.providerId||`plugin`:`Ollama`}`,remote:Q.providerType===`plugin`||Q.model.toLowerCase().endsWith(`:cloud`)||Q.model.toLowerCase().endsWith(`-cloud`)}:void 0,Kt=Gt?[Gt,...K]:K,qt=Re[D?.status??`idle`],Jt=e(qt.labelKey,{defaultValue:qt.label}),Yt=async()=>{if(c.workRemoteProviderDisclosureDismissed||g)return!1;let t=m;_(!0);try{let n=await we.updatePreferences({workRemoteProviderDisclosureDismissed:!0});if(!n.success)throw Error(n.error||e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`}));return(Ne.getState().user?.id??null)===t&&(d({workRemoteProviderDisclosureDismissed:!0}),!0)}catch{return U.error(e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`})),!1}finally{_(!1)}};return(0,Z.jsx)(`div`,{"data-testid":`work-page`,className:`relative flex h-full min-h-0 overflow-hidden bg-transparent`,children:(0,Z.jsxs)(`main`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,Z.jsxs)(`header`,{className:`relative z-50 flex h-16 shrink-0 items-center gap-3 border-b border-line bg-surface/55 px-3 backdrop-blur-xl md:px-4`,children:[D?(0,Z.jsx)(`input`,{"data-testid":`work-task-title`,dir:`auto`,defaultValue:D.title,onBlur:e=>{let t=e.currentTarget;if(!t.value.trim()){t.value=D.title;return}It(t.value).then(e=>{e||(t.value=D.title)})},onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&(e.currentTarget.value=D.title,e.currentTarget.blur())},className:`min-w-0 max-w-sm flex-1 truncate rounded-lg border border-transparent bg-transparent px-2 py-1 text-sm font-semibold text-ink outline-none hover:border-line focus:border-primary-500 focus:bg-surface`,"aria-label":e(`work.tasks.rename`,{defaultValue:`Task title`})},`${D.id}:${D.title}`):(0,Z.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,Z.jsx)(`h1`,{className:`truncate text-sm font-semibold text-ink`,children:e(`work.title`,{defaultValue:`Work`})})}),D?.hostPath&&(0,Z.jsxs)(`span`,{"data-testid":`work-host-path-chip`,title:D.hostPath,className:`hidden h-7 shrink-0 items-center gap-1.5 rounded-full border border-line bg-surface px-2.5 font-mono text-[11px] text-ink-muted sm:inline-flex`,children:[(0,Z.jsx)(pe,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,Z.jsx)(`span`,{className:`max-w-[16rem] truncate`,children:D.hostPath})]}),D&&(0,Z.jsxs)(`span`,{"data-testid":`work-compact-status`,className:`inline-flex h-7 shrink-0 items-center gap-1.5 rounded-full border border-line bg-surface px-2 text-[11px] font-medium text-ink-muted xl:hidden`,"aria-label":e(`work.tasks.status`,{status:Jt,defaultValue:`Status: {{status}}`}),title:e(`work.tasks.status`,{status:Jt,defaultValue:`Status: {{status}}`}),children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-compact-status-indicator`,className:u(`h-1.5 w-1.5 rounded-full`,qt.animated&&`animate-pulse`,D.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:qt.color}}),(0,Z.jsx)(`span`,{className:`hidden md:inline`,children:Jt})]}),D&&(0,Z.jsxs)(`div`,{className:`ms-auto inline-flex h-9 shrink-0 items-center rounded-xl border border-line bg-surface-subtle p-1 shadow-subtle xl:hidden`,role:`group`,"aria-label":e(`work.mobile.surface`,{defaultValue:`Task surface`}),children:[(0,Z.jsxs)(`button`,{type:`button`,onClick:()=>Ee(`conversation`),"aria-label":e(`work.mobile.conversation`,{defaultValue:`Conversation`}),"aria-pressed":Te===`conversation`,className:u(`inline-flex h-7 items-center justify-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow] sm:px-2.5`,Te===`conversation`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,Z.jsx)(h,{className:`h-3.5 w-3.5 shrink-0`}),(0,Z.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.conversation`,{defaultValue:`Conversation`})})]}),(0,Z.jsxs)(`button`,{type:`button`,onClick:()=>Ee(`workspace`),"aria-label":e(`work.mobile.workspace`,{defaultValue:`Workspace`}),"aria-pressed":Te===`workspace`,className:u(`inline-flex h-7 items-center justify-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow] sm:px-2.5`,Te===`workspace`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,Z.jsx)(ge,{className:`h-3.5 w-3.5 shrink-0`}),(0,Z.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.workspace`,{defaultValue:`Workspace`})})]})]}),(0,Z.jsxs)(`div`,{className:u(`ms-auto hidden min-w-0 items-center gap-2`,D?`xl:flex`:`sm:flex`),children:[D&&(0,Z.jsxs)(`span`,{"data-testid":`work-status`,className:`inline-flex h-7 items-center gap-1.5 rounded-full border border-line bg-surface px-2.5 text-[11px] font-medium text-ink-muted`,children:[(0,Z.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-status-indicator`,className:u(`h-1.5 w-1.5 rounded-full`,qt.animated&&`animate-pulse`,D.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:qt.color}}),Jt]}),(0,Z.jsxs)(`span`,{"data-testid":`work-runtime-status`,className:u(`inline-flex h-7 items-center gap-1.5 rounded-full border px-2.5 text-[11px] font-medium`,zt?`border-transparent bg-error-500 text-[#0D0D0C]`:`border-transparent bg-success-500 text-[#0D0D0C]`),title:zt?T?.reason||e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):T?.image?`${Vt} · ${T.image}`:Vt,children:[(0,Z.jsx)(B,{className:`h-3.5 w-3.5`}),zt?e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):Bt]}),D&&(0,Z.jsxs)(`span`,{className:`hidden h-7 max-w-44 items-center gap-1.5 truncate rounded-full border border-line bg-surface px-2.5 text-[11px] font-medium text-ink-muted md:inline-flex`,children:[(0,Z.jsx)(b,{className:`h-3.5 w-3.5 shrink-0`}),(0,Z.jsx)(`span`,{dir:`ltr`,className:`truncate`,children:D.model})]})]}),D&&(0,Z.jsxs)(`div`,{ref:ft,className:`relative shrink-0`,children:[(0,Z.jsx)(`button`,{ref:pt,id:`work-task-actions-trigger`,type:`button`,"data-testid":`work-task-actions-button`,onClick:()=>ut(e=>({taskId:D.id,open:e.taskId!==D.id||!e.open})),onKeyDown:e=>{(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),ut({taskId:D.id,open:!0}))},className:`inline-flex h-9 w-9 items-center justify-center rounded-lg text-ink-muted transition-colors hover:bg-surface-subtle hover:text-ink`,"aria-label":e(`work.tasks.actions`,{defaultValue:`Task actions`}),"aria-haspopup":`menu`,"aria-expanded":dt,"aria-controls":dt?`work-task-actions-menu`:void 0,children:(0,Z.jsx)(_e,{className:`h-4 w-4`})}),dt&&(0,Z.jsx)(`div`,{ref:mt,id:`work-task-actions-menu`,role:`menu`,"aria-labelledby":`work-task-actions-trigger`,onKeyDown:gt,className:`absolute end-0 top-10 z-40 min-w-44 rounded-xl border border-line bg-surface-overlay p-1.5 shadow-overlay`,children:(0,Z.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`work-delete-task-button`,onClick:()=>{ht(!0),Ft(D.id)},className:`flex h-9 w-full items-center gap-2 rounded-lg px-2.5 text-start text-xs font-medium text-error-600 transition-colors hover:bg-error-500/10`,children:[(0,Z.jsx)(me,{className:`h-3.5 w-3.5`}),e(`work.tasks.delete`,{defaultValue:`Delete task`})]})})]})]}),(zt||F)&&(0,Z.jsxs)(`div`,{className:u(`flex shrink-0 items-center gap-2 border-b px-4 py-2 text-xs`,zt?`border-error-500/20 bg-error-500/10 text-error-700`:`border-amber-500/20 bg-amber-500/10 text-ink`),children:[(0,Z.jsx)(v,{className:`h-4 w-4 shrink-0`}),(0,Z.jsx)(`span`,{dir:`auto`,className:`min-w-0 flex-1`,children:zt?T?.reason||e(`work.runtime.reason`,{defaultValue:`A Work runtime and an available Ollama or plugin model provider are required.`}):F}),F&&!zt&&(0,Z.jsx)(`button`,{type:`button`,className:`rounded-md p-1 hover:bg-black/5`,onClick:be,"aria-label":e(`common.close`),children:`×`})]}),s?D?(0,Z.jsx)(Wt,{userId:m,mobileSurface:Te,conversation:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(kt,{task:D,user:p,liveRun:Ct,loading:j,loadingOlder:M,onLoadOlder:()=>z(D.id),onOpenFile:Fe}),(0,Z.jsx)(Ze,{dictationOwnerKey:D.id,mentionAgents:E.filter(e=>e.isAgent===!0&&e.id!==D.id).map(e=>({id:e.id,name:e.title})),models:Kt,selectorModels:W,modelKey:Ut,running:Ht,loading:P,disabled:zt,remoteDisclosureDismissed:c.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:g,onModelChange:Nt,onDismissRemoteDisclosure:Yt,onModelsRefresh:w,onSubmit:Mt,onCancel:Pt},D.id)]}),workspace:(0,Z.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1`,children:(0,Z.jsx)(ar,{task:D,openFileRequest:Y?.taskId===D.id?Y:null,persona:D.personaId?Je[D.personaId]:void 0,liveRun:Ct,files:O,selectedFile:k,loadingFiles:N,actionLoading:P,onLoadFiles:e=>ue(D.id,e),onLoadFile:e=>de(D.id,e),onClearSelectedFile:fe,onSaveFile:Rt,onStartPreview:t=>Lt(()=>ve(D.id,t),e(`work.toasts.previewFailed`,{defaultValue:`Could not start the preview.`})),onStopPreview:()=>Lt(()=>ye(D.id),e(`work.toasts.previewStopFailed`,{defaultValue:`Could not stop the preview.`})),onDirtyChange:Oe,terminal:T?.terminal},D.id)})}):(0,Z.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col items-center justify-center px-6 text-center`,children:j?(0,Z.jsx)(`div`,{className:`text-sm text-ink-muted`,children:e(`work.tasks.loading`,{defaultValue:`Loading task…`})}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(v,{className:`mb-3 h-8 w-8 text-ink-subtle`}),(0,Z.jsx)(`h2`,{className:`text-lg font-semibold text-ink`,children:e(`work.tasks.notFound`,{defaultValue:`This Work task is unavailable`})}),(0,Z.jsxs)(`button`,{type:`button`,onClick:jt,className:`mt-4 inline-flex items-center gap-1.5 text-sm font-medium text-primary-600 hover:text-primary-700`,children:[(0,Z.jsx)(ce,{className:`h-4 w-4 rtl:rotate-180`}),e(`work.tasks.back`,{defaultValue:`Start a new task`})]})]})}):(0,Z.jsx)(`div`,{className:`relative min-h-0 flex-1 overflow-y-auto`,children:(0,Z.jsxs)(`section`,{"data-testid":`work-landing`,className:`mx-auto flex min-h-full w-full max-w-3xl flex-col items-center justify-center px-4 py-6 sm:px-8 sm:py-12`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col items-center text-center`,children:[(0,Z.jsxs)(`div`,{className:`mb-3 flex items-center justify-center gap-3`,children:[(0,Z.jsx)(Le,{size:`sm`,label:null,className:`h-9 w-9 shrink-0 p-0 text-ink`}),(0,Z.jsx)(`h2`,{className:`max-w-3xl text-balance text-[clamp(1.75rem,3.5vw,2.35rem)] font-medium leading-tight tracking-[-0.02em] text-ink rtl:tracking-normal`,children:e(`work.landing.title`,{defaultValue:`Start a new Work task`})})]}),(0,Z.jsx)(`p`,{className:`max-w-xl text-balance text-[15px] leading-relaxed text-ink-subtle`,children:e(`work.landing.description`,{defaultValue:`Give a local model a durable, isolated workspace. It can inspect files, run tools, and continue where it left off when you return.`})})]}),(He.length>0||$e.length>0||!at&&p?.role===`admin`||Be)&&(0,Z.jsxs)(`div`,{"data-testid":`work-landing-options`,className:`mt-6 grid w-full min-w-0 grid-cols-1 gap-4 sm:grid-cols-2`,children:[He.length>0&&(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`label`,{htmlFor:`work-policy`,className:`mb-1.5 block text-xs font-medium text-ink-muted`,children:e(`work.policy.label`,{defaultValue:`Runtime policy`})}),(0,Z.jsxs)(`select`,{id:`work-policy`,"data-testid":`work-policy`,value:We,onChange:e=>Ge(e.target.value),className:`w-full min-w-0 rounded-xl border border-line bg-surface px-3 py-2 text-[13px] text-ink outline-none transition-colors focus:border-line-strong focus-visible:ring-2 focus-visible:ring-primary-500/30`,children:[(0,Z.jsx)(`option`,{value:``,children:e(`work.policy.default`,{defaultValue:`Default (global limits)`})}),He.map(e=>(0,Z.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),$e.length>0&&(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`label`,{htmlFor:`work-persona`,className:`mb-1.5 block text-xs font-medium text-ink-muted`,children:e(`work.persona.label`,{defaultValue:`Hire as an agent (optional)`})}),(0,Z.jsxs)(`select`,{id:`work-persona`,"data-testid":`work-persona`,value:Xe,onChange:e=>Qe(e.target.value),className:`w-full min-w-0 rounded-xl border border-line bg-surface px-3 py-2 text-[13px] text-ink outline-none transition-colors focus:border-line-strong focus-visible:ring-2 focus-visible:ring-primary-500/30`,children:[(0,Z.jsx)(`option`,{value:``,children:e(`work.persona.none`,{defaultValue:`No persona (one-off task)`})}),$e.map(e=>(0,Z.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,Z.jsx)(`p`,{className:`mt-1.5 text-xs leading-relaxed text-ink-muted`,children:Xe?e(`work.persona.hint`,{defaultValue:`This task becomes a named agent: it keeps the persona, stays pinned in the sidebar, and reports a one-line status after each run.`}):e(`work.persona.description`,{defaultValue:`Pick a persona to turn this task into a persistent agent with its own identity.`})})]}),!at&&p?.role===`admin`&&(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center justify-between gap-3 rounded-xl border border-line bg-surface px-4 py-3 sm:col-span-2`,"data-testid":`work-policy-setup-hint`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1 basis-48`,children:[(0,Z.jsx)(`p`,{className:`text-[13px] font-medium text-ink`,children:e(`work.computerSetup.title`)}),(0,Z.jsx)(`p`,{className:`mt-0.5 text-xs text-ink-muted`,children:rt??e(tt?`work.computerSetup.building`:`work.computerSetup.description`)})]}),(0,Z.jsxs)(`button`,{type:`button`,"data-testid":`work-computer-enable`,onClick:()=>void ot(),disabled:tt,className:`flex shrink-0 items-center gap-2 rounded-lg border border-line bg-surface-raised px-3 py-1.5 text-xs font-medium text-ink transition-colors hover:bg-surface-subtle disabled:opacity-60`,children:[tt&&(0,Z.jsx)(`span`,{className:`h-3 w-3 animate-spin rounded-full border border-ink/20 border-t-ink`}),e(rt?`work.computerSetup.retry`:`work.computerSetup.enable`)]})]}),Be&&(0,Z.jsxs)(`div`,{className:`min-w-0 sm:col-span-2`,children:[(0,Z.jsx)(`label`,{htmlFor:`work-host-path`,className:`mb-1.5 block text-xs font-medium text-ink-muted`,children:e(`work.hostWorkspace.label`,{defaultValue:`Workspace folder (optional)`})}),(0,Z.jsx)(`input`,{id:`work-host-path`,"data-testid":`work-host-path`,dir:`ltr`,value:Ie,onChange:e=>ze(e.target.value),spellCheck:!1,placeholder:Ve[0]?`${Ve[0]}/my-project`:`/path/to/folder`,className:`w-full min-w-0 rounded-xl border border-line bg-surface px-3 py-2 font-mono text-[13px] text-ink outline-none transition-colors placeholder:text-ink-subtle focus:border-line-strong focus-visible:ring-2 focus-visible:ring-primary-500/30`}),(0,Z.jsx)(`p`,{className:`mt-1.5 text-xs leading-relaxed text-ink-muted`,children:Ie.trim()?e(`work.hostWorkspace.warning`,{defaultValue:`The task can read and write this folder directly. Leave blank to use an isolated workspace instead.`}):e(`work.hostWorkspace.hint`,{defaultValue:`Leave blank for an isolated workspace, or point the task at a folder on this machine.`})})]})]}),(0,Z.jsx)(Ze,{variant:`landing`,dictationOwnerKey:`landing`,models:K,selectorModels:W,modelKey:_t?.key||``,running:!1,loading:P,disabled:zt,remoteDisclosureDismissed:c.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:g,onModelChange:Nt,onDismissRemoteDisclosure:Yt,onModelsRefresh:w,onSubmit:Mt,onCancel:Pt}),(0,Z.jsxs)(`div`,{"data-testid":`work-workspace-note`,role:`note`,className:`mt-4 flex max-w-2xl flex-wrap items-center justify-center gap-x-2 gap-y-1 text-center text-[10px] leading-relaxed text-ink-subtle`,children:[(0,Z.jsx)(B,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,Z.jsx)(`span`,{children:e(`work.composer.hint`,{defaultValue:`Each task keeps its own files and history. Review model output before using it.`})})]})]})})]})})}export{lr as default};
@@ -0,0 +1 @@
1
+ import"./workApi-0L8fBGq1.js";import{m as e,s as t,z as n}from"./api-DEOxp9DN.js";import"./imageGenModels-Dx_QMLJQ.js";export{n as agentCliApi,e as personaApi,t as preferencesApi};
@@ -1,4 +1,4 @@
1
- import{a as e}from"./logger-DnuT4jgB.js";import{t}from"./config-D4dduT3C.js";import{i as n,n as r,r as i}from"./workApi-xhF57amo.js";var a={getModels:()=>e()?i([]):r.get(`/agent-clis/models`).then(e=>e.data)},o=[{name:`llama3.2:3b`,size:2048e6,digest:`demo-digest-1`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`llama`,families:[`llama`],parameter_size:`3B`,quantization_level:`Q4_0`}},{name:`qwen2.5:7b`,size:4096e6,digest:`demo-digest-2`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`qwen`,families:[`qwen`],parameter_size:`7B`,quantization_level:`Q4_0`}}],s=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:o[0].name,providerType:`ollama`,providerId:null,messages:[{id:`demo-msg-1`,role:`user`,content:`Hello! Can you tell me about this demo?`,timestamp:Date.now()},{id:`demo-msg-2`,role:`assistant`,content:`This is a demo of Libre WebUI! In a real deployment, I would be powered by Ollama running locally on your machine. This demo shows the beautiful interface and features without the backend connection.`,timestamp:Date.now()}],createdAt:Date.now(),updatedAt:Date.now()}],c=s(),l={theme:{mode:`celestial`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2:3b`,defaultProviderType:`ollama`,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:`You are a helpful assistant.`,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,hapticFeedbackEnabled:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},u={...l,theme:{...l.theme},generationOptions:{...l.generationOptions},embeddingSettings:{...l.embeddingSettings},titleSettings:{...l.titleSettings},backgroundSettings:{...l.backgroundSettings}},d=()=>u,f=e=>{let t=u.backgroundSettings||l.backgroundSettings;return u={...u,...e,theme:{...u.theme,...e.theme},generationOptions:{...u.generationOptions,...e.generationOptions},embeddingSettings:{...u.embeddingSettings,...e.embeddingSettings},titleSettings:e.titleSettings?{...u.titleSettings||l.titleSettings,...e.titleSettings}:u.titleSettings,backgroundSettings:e.backgroundSettings?{...t,...e.backgroundSettings}:u.backgroundSettings},u},p=`0.33.0`,m=[`chat`,`models`,`documents`,`notes`,`personas`,`media`,`work`,`admin`],h=e=>!!e&&e.mfaRequired===!0,ee={login:t=>e()?i({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:p}}):r.post(`/auth/login`,t).then(e=>e.data),signup:t=>e()?i({user:{id:`demo-user-new`,username:t.username,email:t.email||``,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:p,turnstile:{enabled:!1}}}):r.post(`/auth/signup`,t).then(e=>e.data),logout:()=>e()?i(void 0):r.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(n.debug(`getSystemInfo called, demo mode:`,e()),e()?i({requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:p,turnstile:{enabled:!1},defaultTheme:l.theme}):(n.debug(`Making API call to:`,t+`/auth/system-info`),n.debug(`Full URL from:`,window.location.origin,`-> API:`,t+`/auth/system-info`),r.get(`/auth/system-info`).then(e=>(n.debug(`getSystemInfo response:`,e.data),e.data)).catch(e=>{throw n.debug(`getSystemInfo error:`,e),e.response&&(n.debug(`Error response data:`,e.response.data),n.debug(`Error status:`,e.response.status),n.debug(`Error headers:`,e.response.headers)),e.request&&n.debug(`Network error - no response received:`,e.request),n.debug(`Error config:`,e.config),e}))),verifyToken:()=>e()?i({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>e()?i({encryptionKey:`demo-encryption-key-not-real`}):r.get(`/auth/encryption-key`).then(e=>e.data),getSessions:()=>e()?i([{id:`demo-session`,kind:`password`,userAgent:navigator.userAgent,createdAt:new Date().toISOString(),lastSeenAt:new Date().toISOString(),expiresAt:null,revokedAt:null,current:!0}]):r.get(`/auth/sessions`).then(e=>e.data),revokeSession:t=>e()?i(void 0):r.delete(`/auth/sessions/${t}`).then(e=>e.data),revokeOtherSessions:()=>e()?i({revokedCount:0}):r.post(`/auth/sessions/revoke-others`).then(e=>e.data),listApiTokens:()=>e()?i([]):r.get(`/auth/tokens`).then(e=>e.data),createApiToken:t=>e()?i({token:`lwui_demo_not_a_real_token`,record:{id:`demo-token-`+Date.now(),name:t.name,tokenPrefix:`lwui_demo`,scopes:t.scopes,createdAt:new Date().toISOString(),expiresAt:null,lastUsedAt:null,revokedAt:null}}):r.post(`/auth/tokens`,t).then(e=>e.data),revokeApiToken:t=>e()?i(void 0):r.delete(`/auth/tokens/${t}`).then(e=>e.data),mfaVerify:e=>r.post(`/auth/mfa/verify`,e).then(e=>e.data),mfaEnrollChallenge:e=>r.post(`/auth/mfa/enroll-challenge`,e).then(e=>e.data),mfaActivateChallenge:e=>r.post(`/auth/mfa/activate-challenge`,e).then(e=>e.data),getMfaStatus:()=>e()?i({totpEnabled:!1,totpPending:!1,recoveryCodesRemaining:0,required:!1,requiredModeLocked:!1,passkeys:[]}):r.get(`/auth/mfa`).then(e=>e.data),mfaEnroll:()=>r.post(`/auth/mfa/enroll`).then(e=>e.data),mfaActivate:e=>r.post(`/auth/mfa/activate`,e).then(e=>e.data),mfaRegenerateRecoveryCodes:e=>r.post(`/auth/mfa/recovery-codes`,e).then(e=>e.data),mfaDisable:e=>r.post(`/auth/mfa/disable`,e).then(e=>e.data),getMfaPolicy:()=>e()?i({mode:`optional`,locked:!1}):r.get(`/auth/mfa/policy`).then(e=>e.data),setMfaPolicy:e=>r.put(`/auth/mfa/policy`,{mode:e}).then(e=>e.data),passkeyRegisterOptions:()=>r.post(`/auth/passkeys/register-options`).then(e=>e.data),passkeyRegister:e=>r.post(`/auth/passkeys/register`,e).then(e=>e.data),listPasskeys:()=>e()?i([]):r.get(`/auth/passkeys`).then(e=>e.data),deletePasskey:e=>r.delete(`/auth/passkeys/${e}`).then(e=>e.data),passkeyLoginOptions:()=>r.post(`/auth/passkeys/login-options`).then(e=>e.data),passkeyLogin:e=>r.post(`/auth/passkeys/login`,e).then(e=>e.data)},te={getUsers:()=>e()?i([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):r.get(`/users`).then(e=>e.data),createUser:t=>e()?i({id:`new-user-`+Date.now(),username:t.username,email:t.email,role:t.role,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.post(`/users`,t).then(e=>e.data),updateUser:(t,n)=>e()?i({id:t,username:n.username||`demo`,email:n.email||`demo@example.com`,role:n.role||`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.patch(`/users/${t}`,n).then(e=>e.data),deleteUser:t=>e()?i(void 0):r.delete(`/users/${t}`).then(e=>e.data),getPendingApprovals:()=>e()?i({count:0,latestCreatedAt:null}):r.get(`/users/pending-approvals`).then(e=>e.data),approveUser:t=>e()?i({id:t,username:`demo-user`,email:`demo@example.com`,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.patch(`/users/${t}/approve`).then(e=>e.data),resetUserMfa:e=>r.post(`/users/${e}/mfa/reset`).then(e=>e.data),updateMyAvatar:t=>e()?i({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,avatar:t,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.patch(`/users/me/avatar`,{avatar:t}).then(e=>e.data)},ne={getGroups:()=>e()?i([]):r.get(`/groups`).then(e=>e.data),createGroup:t=>e()?i({id:`demo-group-`+Date.now(),name:t.name,description:t.description??null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):r.post(`/groups`,t).then(e=>e.data),updateGroup:(t,n)=>e()?i({id:t,name:n.name??`demo-group`,description:n.description??null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):r.patch(`/groups/${t}`,n).then(e=>e.data),deleteGroup:t=>e()?i(void 0):r.delete(`/groups/${t}`).then(e=>e.data),addGroupMember:(t,n)=>e()?i({id:t,name:`demo-group`,description:null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):r.post(`/groups/${t}/members`,{userId:n}).then(e=>e.data),removeGroupMember:(t,n)=>e()?i(void 0):r.delete(`/groups/${t}/members/${n}`).then(e=>e.data),getEffectiveAccess:t=>e()?i({userId:t,username:`demo`,role:`admin`,status:`active`,groups:[],features:{work:!0,"model-download":!0,"web-search":!0,agents:!0},grants:[]}):r.get(`/groups/effective/${t}`).then(e=>e.data),getAuditEvents:(t={})=>{if(e())return i([]);let n=new URLSearchParams;t.action&&n.set(`action`,t.action),t.actor&&n.set(`actor`,t.actor),t.result&&n.set(`result`,t.result),t.limit&&n.set(`limit`,String(t.limit));let a=n.toString()?`?${n.toString()}`:``;return r.get(`/audit${a}`).then(e=>e.data)}},g={getSessions:()=>r.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n,i,a)=>r.post(`/chat/sessions`,{model:e,title:t,personaId:n,providerType:i,providerId:a}).then(e=>e.data),getSession:t=>{if(e()){let e=s().find(e=>e.id===t);return e?i(e):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return r.get(`/chat/sessions/${t}`).then(e=>e.data)},updateSession:(t,n)=>{if(e()){let e=c.findIndex(e=>e.id===t),r=c[e];if(r){let t={...r,...n,updatedAt:Date.now()};return c[e]=t,i(t)}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return r.put(`/chat/sessions/${t}`,n).then(e=>e.data)},forkSession:(e,t={})=>r.post(`/chat/sessions/${e}/fork`,t).then(e=>e.data),enqueuePrompt:(e,t)=>r.post(`/chat/sessions/${e}/queue`,{content:t}).then(e=>e.data),updateQueuedPrompt:(e,t,n)=>r.put(`/chat/sessions/${e}/queue/${t}`,{content:n}).then(e=>e.data),reorderPromptQueue:(e,t)=>r.put(`/chat/sessions/${e}/queue`,{order:t}).then(e=>e.data),claimQueuedPrompt:(e,t)=>r.delete(`/chat/sessions/${e}/queue/${t}`).then(e=>e.data),truncateMessagesFrom:(t,n)=>{if(e()){let e=c.find(e=>e.id===t);if(e){let t=e.messages.findIndex(e=>e.id===n);return t===-1?Promise.resolve({success:!1,error:`Message not found in demo mode`}):(e.messages=e.messages.slice(0,t),e.updatedAt=Date.now(),i(e))}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return r.post(`/chat/sessions/${t}/messages/${n}/truncate`).then(e=>e.data)},deleteSession:t=>e()?i(null):r.delete(`/chat/sessions/${t}`).then(e=>e.data),clearAllSessions:()=>r.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(t,n,a,o,s)=>{if(e()){let e=a.substring(0,30)+(a.length>30?`...`:``);return i({title:e,source:`fallback`,updatedAt:Date.now()})}return r.post(`/chat/sessions/${t}/generate-title`,{model:n,message:a,providerType:o,providerId:s}).then(e=>e.data)},getFolders:()=>e()?i([]):r.get(`/chat/folders`).then(e=>e.data),createFolder:e=>r.post(`/chat/folders`,{name:e}).then(e=>e.data),renameFolder:(e,t)=>r.put(`/chat/folders/${e}`,{name:t}).then(e=>e.data),deleteFolder:e=>r.delete(`/chat/folders/${e}`).then(e=>e.data),generateFollowUps:t=>e()?i({suggestions:[]}):r.post(`/chat/sessions/${t}/followups`).then(e=>e.data),sendMessage:(e,t,n)=>r.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>r.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(t,n,a)=>e()?i({}):r.put(`/chat/sessions/${t}/messages/${n}`,a).then(e=>e.data),generateChatResponse:(e,t,n)=>r.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,r,i)=>({subscribe:async(a,o,s)=>{try{let c=await fetch(`${t}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:r,options:i})});if(!c.ok)throw Error(`HTTP error! status: ${c.status}`);let l=c.body?.getReader();if(!l)throw Error(`No response body reader available`);let u=new TextDecoder,d=``,f=()=>{l.read().then(({done:e,value:t})=>{if(e){s?.();return}d+=u.decode(t,{stream:!0});let r=d.split(`
1
+ import{a as e}from"./logger-DnuT4jgB.js";import{t}from"./config-B5SBQwEe.js";import{i as n,n as r,r as i}from"./workApi-0L8fBGq1.js";var a={getModels:()=>e()?i([]):r.get(`/agent-clis/models`).then(e=>e.data)},o=[{name:`llama3.2:3b`,size:2048e6,digest:`demo-digest-1`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`llama`,families:[`llama`],parameter_size:`3B`,quantization_level:`Q4_0`}},{name:`qwen2.5:7b`,size:4096e6,digest:`demo-digest-2`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`qwen`,families:[`qwen`],parameter_size:`7B`,quantization_level:`Q4_0`}}],s=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:o[0].name,providerType:`ollama`,providerId:null,messages:[{id:`demo-msg-1`,role:`user`,content:`Hello! Can you tell me about this demo?`,timestamp:Date.now()},{id:`demo-msg-2`,role:`assistant`,content:`This is a demo of Libre WebUI! In a real deployment, I would be powered by Ollama running locally on your machine. This demo shows the beautiful interface and features without the backend connection.`,timestamp:Date.now()}],createdAt:Date.now(),updatedAt:Date.now()}],c=s(),l={theme:{mode:`celestial`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2:3b`,defaultProviderType:`ollama`,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:`You are a helpful assistant.`,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,hapticFeedbackEnabled:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},u={...l,theme:{...l.theme},generationOptions:{...l.generationOptions},embeddingSettings:{...l.embeddingSettings},titleSettings:{...l.titleSettings},backgroundSettings:{...l.backgroundSettings}},d=()=>u,f=e=>{let t=u.backgroundSettings||l.backgroundSettings;return u={...u,...e,theme:{...u.theme,...e.theme},generationOptions:{...u.generationOptions,...e.generationOptions},embeddingSettings:{...u.embeddingSettings,...e.embeddingSettings},titleSettings:e.titleSettings?{...u.titleSettings||l.titleSettings,...e.titleSettings}:u.titleSettings,backgroundSettings:e.backgroundSettings?{...t,...e.backgroundSettings}:u.backgroundSettings},u},p=`0.34.1`,m=[`chat`,`models`,`documents`,`notes`,`personas`,`media`,`work`,`admin`],h=e=>!!e&&e.mfaRequired===!0,ee={login:t=>e()?i({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:p}}):r.post(`/auth/login`,t).then(e=>e.data),signup:t=>e()?i({user:{id:`demo-user-new`,username:t.username,email:t.email||``,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:p,turnstile:{enabled:!1}}}):r.post(`/auth/signup`,t).then(e=>e.data),logout:()=>e()?i(void 0):r.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(n.debug(`getSystemInfo called, demo mode:`,e()),e()?i({requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:p,turnstile:{enabled:!1},defaultTheme:l.theme}):(n.debug(`Making API call to:`,t+`/auth/system-info`),n.debug(`Full URL from:`,window.location.origin,`-> API:`,t+`/auth/system-info`),r.get(`/auth/system-info`).then(e=>(n.debug(`getSystemInfo response:`,e.data),e.data)).catch(e=>{throw n.debug(`getSystemInfo error:`,e),e.response&&(n.debug(`Error response data:`,e.response.data),n.debug(`Error status:`,e.response.status),n.debug(`Error headers:`,e.response.headers)),e.request&&n.debug(`Network error - no response received:`,e.request),n.debug(`Error config:`,e.config),e}))),verifyToken:()=>e()?i({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>e()?i({encryptionKey:`demo-encryption-key-not-real`}):r.get(`/auth/encryption-key`).then(e=>e.data),getSessions:()=>e()?i([{id:`demo-session`,kind:`password`,userAgent:navigator.userAgent,createdAt:new Date().toISOString(),lastSeenAt:new Date().toISOString(),expiresAt:null,revokedAt:null,current:!0}]):r.get(`/auth/sessions`).then(e=>e.data),revokeSession:t=>e()?i(void 0):r.delete(`/auth/sessions/${t}`).then(e=>e.data),revokeOtherSessions:()=>e()?i({revokedCount:0}):r.post(`/auth/sessions/revoke-others`).then(e=>e.data),listApiTokens:()=>e()?i([]):r.get(`/auth/tokens`).then(e=>e.data),createApiToken:t=>e()?i({token:`lwui_demo_not_a_real_token`,record:{id:`demo-token-`+Date.now(),name:t.name,tokenPrefix:`lwui_demo`,scopes:t.scopes,createdAt:new Date().toISOString(),expiresAt:null,lastUsedAt:null,revokedAt:null}}):r.post(`/auth/tokens`,t).then(e=>e.data),revokeApiToken:t=>e()?i(void 0):r.delete(`/auth/tokens/${t}`).then(e=>e.data),mfaVerify:e=>r.post(`/auth/mfa/verify`,e).then(e=>e.data),mfaEnrollChallenge:e=>r.post(`/auth/mfa/enroll-challenge`,e).then(e=>e.data),mfaActivateChallenge:e=>r.post(`/auth/mfa/activate-challenge`,e).then(e=>e.data),getMfaStatus:()=>e()?i({totpEnabled:!1,totpPending:!1,recoveryCodesRemaining:0,required:!1,requiredModeLocked:!1,passkeys:[]}):r.get(`/auth/mfa`).then(e=>e.data),mfaEnroll:()=>r.post(`/auth/mfa/enroll`).then(e=>e.data),mfaActivate:e=>r.post(`/auth/mfa/activate`,e).then(e=>e.data),mfaRegenerateRecoveryCodes:e=>r.post(`/auth/mfa/recovery-codes`,e).then(e=>e.data),mfaDisable:e=>r.post(`/auth/mfa/disable`,e).then(e=>e.data),getMfaPolicy:()=>e()?i({mode:`optional`,locked:!1}):r.get(`/auth/mfa/policy`).then(e=>e.data),setMfaPolicy:e=>r.put(`/auth/mfa/policy`,{mode:e}).then(e=>e.data),passkeyRegisterOptions:()=>r.post(`/auth/passkeys/register-options`).then(e=>e.data),passkeyRegister:e=>r.post(`/auth/passkeys/register`,e).then(e=>e.data),listPasskeys:()=>e()?i([]):r.get(`/auth/passkeys`).then(e=>e.data),deletePasskey:e=>r.delete(`/auth/passkeys/${e}`).then(e=>e.data),passkeyLoginOptions:()=>r.post(`/auth/passkeys/login-options`).then(e=>e.data),passkeyLogin:e=>r.post(`/auth/passkeys/login`,e).then(e=>e.data)},te={getUsers:()=>e()?i([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):r.get(`/users`).then(e=>e.data),createUser:t=>e()?i({id:`new-user-`+Date.now(),username:t.username,email:t.email,role:t.role,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.post(`/users`,t).then(e=>e.data),updateUser:(t,n)=>e()?i({id:t,username:n.username||`demo`,email:n.email||`demo@example.com`,role:n.role||`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.patch(`/users/${t}`,n).then(e=>e.data),deleteUser:t=>e()?i(void 0):r.delete(`/users/${t}`).then(e=>e.data),getPendingApprovals:()=>e()?i({count:0,latestCreatedAt:null}):r.get(`/users/pending-approvals`).then(e=>e.data),approveUser:t=>e()?i({id:t,username:`demo-user`,email:`demo@example.com`,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.patch(`/users/${t}/approve`).then(e=>e.data),resetUserMfa:e=>r.post(`/users/${e}/mfa/reset`).then(e=>e.data),updateMyAvatar:t=>e()?i({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,avatar:t,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):r.patch(`/users/me/avatar`,{avatar:t}).then(e=>e.data)},ne={getGroups:()=>e()?i([]):r.get(`/groups`).then(e=>e.data),createGroup:t=>e()?i({id:`demo-group-`+Date.now(),name:t.name,description:t.description??null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):r.post(`/groups`,t).then(e=>e.data),updateGroup:(t,n)=>e()?i({id:t,name:n.name??`demo-group`,description:n.description??null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):r.patch(`/groups/${t}`,n).then(e=>e.data),deleteGroup:t=>e()?i(void 0):r.delete(`/groups/${t}`).then(e=>e.data),addGroupMember:(t,n)=>e()?i({id:t,name:`demo-group`,description:null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):r.post(`/groups/${t}/members`,{userId:n}).then(e=>e.data),removeGroupMember:(t,n)=>e()?i(void 0):r.delete(`/groups/${t}/members/${n}`).then(e=>e.data),getEffectiveAccess:t=>e()?i({userId:t,username:`demo`,role:`admin`,status:`active`,groups:[],features:{work:!0,"model-download":!0,"web-search":!0,agents:!0},grants:[]}):r.get(`/groups/effective/${t}`).then(e=>e.data),getAuditEvents:(t={})=>{if(e())return i([]);let n=new URLSearchParams;t.action&&n.set(`action`,t.action),t.actor&&n.set(`actor`,t.actor),t.result&&n.set(`result`,t.result),t.limit&&n.set(`limit`,String(t.limit));let a=n.toString()?`?${n.toString()}`:``;return r.get(`/audit${a}`).then(e=>e.data)}},g={getSessions:()=>r.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n,i,a)=>r.post(`/chat/sessions`,{model:e,title:t,personaId:n,providerType:i,providerId:a}).then(e=>e.data),getSession:t=>{if(e()){let e=s().find(e=>e.id===t);return e?i(e):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return r.get(`/chat/sessions/${t}`).then(e=>e.data)},updateSession:(t,n)=>{if(e()){let e=c.findIndex(e=>e.id===t),r=c[e];if(r){let t={...r,...n,updatedAt:Date.now()};return c[e]=t,i(t)}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return r.put(`/chat/sessions/${t}`,n).then(e=>e.data)},forkSession:(e,t={})=>r.post(`/chat/sessions/${e}/fork`,t).then(e=>e.data),enqueuePrompt:(e,t)=>r.post(`/chat/sessions/${e}/queue`,{content:t}).then(e=>e.data),updateQueuedPrompt:(e,t,n)=>r.put(`/chat/sessions/${e}/queue/${t}`,{content:n}).then(e=>e.data),reorderPromptQueue:(e,t)=>r.put(`/chat/sessions/${e}/queue`,{order:t}).then(e=>e.data),claimQueuedPrompt:(e,t)=>r.delete(`/chat/sessions/${e}/queue/${t}`).then(e=>e.data),truncateMessagesFrom:(t,n)=>{if(e()){let e=c.find(e=>e.id===t);if(e){let t=e.messages.findIndex(e=>e.id===n);return t===-1?Promise.resolve({success:!1,error:`Message not found in demo mode`}):(e.messages=e.messages.slice(0,t),e.updatedAt=Date.now(),i(e))}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return r.post(`/chat/sessions/${t}/messages/${n}/truncate`).then(e=>e.data)},deleteSession:t=>e()?i(null):r.delete(`/chat/sessions/${t}`).then(e=>e.data),clearAllSessions:()=>r.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(t,n,a,o,s)=>{if(e()){let e=a.substring(0,30)+(a.length>30?`...`:``);return i({title:e,source:`fallback`,updatedAt:Date.now()})}return r.post(`/chat/sessions/${t}/generate-title`,{model:n,message:a,providerType:o,providerId:s}).then(e=>e.data)},getFolders:()=>e()?i([]):r.get(`/chat/folders`).then(e=>e.data),createFolder:e=>r.post(`/chat/folders`,{name:e}).then(e=>e.data),renameFolder:(e,t)=>r.put(`/chat/folders/${e}`,{name:t}).then(e=>e.data),deleteFolder:e=>r.delete(`/chat/folders/${e}`).then(e=>e.data),generateFollowUps:t=>e()?i({suggestions:[]}):r.post(`/chat/sessions/${t}/followups`).then(e=>e.data),sendMessage:(e,t,n)=>r.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>r.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(t,n,a)=>e()?i({}):r.put(`/chat/sessions/${t}/messages/${n}`,a).then(e=>e.data),generateChatResponse:(e,t,n)=>r.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,r,i)=>({subscribe:async(a,o,s)=>{try{let c=await fetch(`${t}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:r,options:i})});if(!c.ok)throw Error(`HTTP error! status: ${c.status}`);let l=c.body?.getReader();if(!l)throw Error(`No response body reader available`);let u=new TextDecoder,d=``,f=()=>{l.read().then(({done:e,value:t})=>{if(e){s?.();return}d+=u.decode(t,{stream:!0});let r=d.split(`
2
2
  `);d=r.pop()||``;for(let e of r){let t=e.trim();if(t.startsWith(`data: `)){let e=t.slice(6);if(e===`[DONE]`){s?.();return}try{let t=JSON.parse(e);if(a(t),t.type===`done`||t.type===`error`){t.type===`error`?o?.(t.error):s?.();return}}catch(e){n.error(`Failed to parse SSE data:`,e)}}}f()}).catch(e=>{o?.(e instanceof Error?e:Error(String(e)))})};return f(),()=>l.cancel()}catch(e){return o?.(e instanceof Error?e:Error(String(e))),()=>{}}}}),getMessageBranches:(t,n)=>e()?i([]):r.get(`/chat/sessions/${t}/messages/${n}/branches`).then(e=>e.data),switchMessageBranch:(t,n,a)=>e()?i({}):r.post(`/chat/sessions/${t}/messages/${n}/branch`,{branchIndex:a}).then(e=>e.data),createMessageBranch:(t,n,a)=>e()?i({}):r.post(`/chat/sessions/${t}/messages/${n}/branches`,{...a}).then(e=>e.data),restoreCompaction:(e,t)=>r.post(`/chat/sessions/${e}/compaction/${t}/restore`).then(e=>e.data),getContextPolicy:()=>e()?i({windowMessages:10}):r.get(`/chat/context-policy`).then(e=>e.data),getCompactionConfig:()=>e()?i({enabled:!1,thresholdTokens:8e3,keepRecentMessages:8,model:``,prompt:``}):r.get(`/chat/compaction-config`).then(e=>e.data),setCompactionConfig:t=>e()?i({enabled:!1,thresholdTokens:8e3,keepRecentMessages:8,model:``,prompt:``},!1):r.put(`/chat/compaction-config`,t).then(e=>e.data)},_={uploadDocument:(t,n)=>{if(e())return i({id:`demo-doc-`+Date.now(),filename:t.name,fileType:t.name.endsWith(`.pdf`)?`pdf`:`txt`,size:t.size,sessionId:n,uploadedAt:Date.now()});let a=new FormData;return a.append(`document`,t),n&&a.append(`sessionId`,n),r.post(`/documents/upload`,a).then(e=>e.data)},getCollections:()=>e()?i([]):r.get(`/documents/collections`).then(e=>e.data),createCollection:e=>r.post(`/documents/collections`,{name:e}).then(e=>e.data),deleteCollection:e=>r.delete(`/documents/collections/${e}`).then(e=>e.data),setDocumentCollection:(e,t)=>r.put(`/documents/${e}/collection`,{collectionId:t}).then(e=>e.data),fetchWebpage:(t,n)=>e()?i({id:`demo-doc-`+Date.now(),filename:`demo-webpage.txt`,fileType:`txt`,size:0,sessionId:n,uploadedAt:Date.now()}):r.post(`/documents/fetch-url`,{url:t,sessionId:n}).then(e=>e.data),getDocuments:t=>{if(e())return i([]);let n=t?`/documents/session/${t}`:`/documents`;return r.get(n).then(e=>e.data)},getDocument:t=>e()?i({id:t,filename:`demo-document.pdf`,fileType:`pdf`,size:1024,content:`Demo document content...`,uploadedAt:Date.now()}):r.get(`/documents/${t}`).then(e=>e.data),searchDocuments:(t,n,a)=>e()?i([]):r.post(`/documents/search`,{query:t,sessionId:n,limit:a}).then(e=>e.data),deleteDocument:t=>e()?i(void 0):r.delete(`/documents/${t}`).then(e=>e.data),getEmbeddingStatus:()=>e()?i({available:!1,model:`nomic-embed-text`,chunksWithEmbeddings:0,totalChunks:0}):r.get(`/documents/embeddings/status`).then(e=>e.data),regenerateEmbeddings:()=>e()?i({documentsTotal:0,documentsRegenerated:0,documentsSkipped:0,chunksTotal:0,chunksEmbedded:0,model:`nomic-embed-text`,version:`v1`}):r.post(`/documents/embeddings/regenerate`).then(e=>e.data)},v={getModels:()=>e()?i([{id:`nomic-embed-text`,name:`nomic-embed-text`,description:`Ollama - Default embedding model`,provider:`ollama`,dimensions:0,isDetectedEmbedding:!0}]):r.get(`/embeddings/models`).then(e=>e.data)},y={getNotes:()=>e()?i([]):r.get(`/notes`).then(e=>e.data),getNote:e=>r.get(`/notes/${e}`).then(e=>e.data),createNote:(e,t)=>r.post(`/notes`,{title:e,content:t}).then(e=>e.data),updateNote:(e,t)=>r.put(`/notes/${e}`,t).then(e=>e.data),deleteNote:e=>r.delete(`/notes/${e}`).then(e=>e.data),getRevisions:e=>r.get(`/notes/${e}/revisions`).then(e=>e.data),restoreRevision:(e,t)=>r.post(`/notes/${e}/revisions/${t}/restore`).then(e=>e.data),getAttachments:e=>r.get(`/notes/${e}/attachments`).then(e=>e.data),uploadAttachment:(e,t)=>{let n=new FormData;return n.append(`attachment`,t),r.post(`/notes/${e}/attachments`,n,{headers:{"Content-Type":`multipart/form-data`}}).then(e=>e.data)},downloadAttachment:(e,t)=>r.get(`/notes/${e}/attachments/${t}`,{responseType:`blob`}).then(e=>e.data),deleteAttachment:(e,t)=>r.delete(`/notes/${e}/attachments/${t}`).then(e=>e.data),assist:(e,t)=>r.post(`/notes/${e}/assist`,t).then(e=>e.data)},b={listGrants:(e,t)=>r.get(`/access/grants`,{params:{type:e,id:t}}).then(e=>e.data),createGrant:e=>r.post(`/access/grants`,e).then(e=>e.data),deleteGrant:e=>r.delete(`/access/grants/${e}`).then(e=>e.data),resolvePrincipal:e=>r.get(`/access/principals`,{params:{username:e}}).then(e=>e.data),resolveGroup:e=>r.get(`/access/principals/groups`,{params:{name:e}}).then(e=>e.data)},x={getEvents:(t,n)=>e()?i([]):r.get(`/calendar/events?from=${t}&to=${n}`).then(e=>e.data),createEvent:e=>r.post(`/calendar/events`,e).then(e=>e.data),updateEvent:(e,t)=>r.put(`/calendar/events/${e}`,t).then(e=>e.data),deleteEvent:e=>r.delete(`/calendar/events/${e}`).then(e=>e.data),getCalendars:()=>e()?i([]):r.get(`/calendar/calendars`).then(e=>e.data),createCalendar:e=>r.post(`/calendar/calendars`,e).then(e=>e.data),updateCalendar:(e,t)=>r.put(`/calendar/calendars/${e}`,t).then(e=>e.data),deleteCalendar:e=>r.delete(`/calendar/calendars/${e}`).then(e=>e.data),exportIcs:e=>r.get(e?`/calendar/export?calendarId=${encodeURIComponent(e)}`:`/calendar/export`,{responseType:`blob`}).then(e=>e.data),importIcs:(e,t)=>r.post(`/calendar/import`,{ics:e,...t?{calendarId:t}:{}}).then(e=>e.data)},S={listMine:()=>e()?i([]):r.get(`/channels`).then(e=>e.data),listPublic:()=>e()?i([]):r.get(`/channels/public`).then(e=>e.data),create:e=>r.post(`/channels`,e).then(e=>e.data),openDm:e=>r.post(`/channels/dm`,{userId:e}).then(e=>e.data),get:e=>r.get(`/channels/${e}`).then(e=>e.data),update:(e,t)=>r.patch(`/channels/${e}`,t).then(e=>e.data),delete:e=>r.delete(`/channels/${e}`).then(e=>e.data),join:e=>r.post(`/channels/${e}/join`).then(e=>e.data),listMembers:e=>r.get(`/channels/${e}/members`).then(e=>e.data),addMember:(e,t)=>r.post(`/channels/${e}/members`,{userId:t}).then(e=>e.data),removeMember:(e,t)=>r.delete(`/channels/${e}/members/${encodeURIComponent(t)}`).then(e=>e.data),listMessages:(e,t={})=>{let n=new URLSearchParams;t.before&&n.set(`before`,t.before),t.after&&n.set(`after`,t.after),t.limit&&n.set(`limit`,String(t.limit));let i=n.size>0?`?${n.toString()}`:``;return r.get(`/channels/${e}/messages${i}`).then(e=>e.data)},postMessage:(e,t)=>r.post(`/channels/${e}/messages`,t).then(e=>e.data),listPins:e=>r.get(`/channels/${e}/pins`).then(e=>e.data),markRead:e=>r.post(`/channels/${e}/read`,{}).then(e=>e.data),thread:e=>r.get(`/channels/messages/${e}/thread`).then(e=>e.data),editMessage:(e,t)=>r.patch(`/channels/messages/${e}`,{content:t}).then(e=>e.data),deleteMessage:e=>r.delete(`/channels/messages/${e}`).then(e=>e.data),setPinned:(e,t)=>r.post(`/channels/messages/${e}/pin`,{pinned:t}).then(e=>e.data),addReaction:(e,t)=>r.post(`/channels/messages/${e}/reactions`,{emoji:t}).then(e=>e.data),removeReaction:(e,t)=>r.delete(`/channels/messages/${e}/reactions/${encodeURIComponent(t)}`).then(e=>e.data),uploadAttachment:(e,t)=>{let n=new FormData;return n.append(`attachment`,t),r.post(`/channels/${e}/attachments`,n,{headers:{"Content-Type":`multipart/form-data`}}).then(e=>e.data)},downloadAttachment:e=>r.get(`/channels/attachments/${e}`,{responseType:`blob`}).then(e=>e.data)},C={list:(t={})=>{if(e())return i([]);let n=new URLSearchParams;t.before&&n.set(`before`,String(t.before)),t.limit&&n.set(`limit`,String(t.limit));let a=n.size>0?`?${n.toString()}`:``;return r.get(`/notifications${a}`).then(e=>e.data)},unreadCount:()=>e()?i({count:0}):r.get(`/notifications/unread-count`).then(e=>e.data),markRead:e=>r.post(`/notifications/${e}/read`).then(e=>e.data),markAllRead:()=>r.post(`/notifications/read-all`).then(e=>e.data),delete:e=>r.delete(`/notifications/${e}`).then(e=>e.data)},re={getAutomations:()=>e()?i([]):r.get(`/automations`).then(e=>e.data),createAutomation:e=>r.post(`/automations`,e).then(e=>e.data),updateAutomation:(e,t)=>r.put(`/automations/${e}`,t).then(e=>e.data),deleteAutomation:e=>r.delete(`/automations/${e}`).then(e=>e.data),pauseAutomation:e=>r.post(`/automations/${e}/pause`).then(e=>e.data),resumeAutomation:e=>r.post(`/automations/${e}/resume`).then(e=>e.data),runAutomationNow:e=>r.post(`/automations/${e}/run`).then(e=>e.data),rotateWebhookSecret:e=>r.post(`/automations/${e}/webhook-secret`).then(e=>e.data),disableWebhook:e=>r.delete(`/automations/${e}/webhook-secret`).then(e=>e.data),getOccurrences:(t,n)=>e()?i([]):r.get(`/automations/occurrences?from=${t}&to=${n}`).then(e=>e.data),getRuns:t=>{if(e())return i([]);let n=new URLSearchParams;t?.automationId&&n.set(`automationId`,t.automationId),t?.from!==void 0&&n.set(`from`,String(t.from)),t?.to!==void 0&&n.set(`to`,String(t.to));let a=n.size>0?`?${n.toString()}`:``;return r.get(`/automations/runs${a}`).then(e=>e.data)},getRunsSummary:()=>e()?i({unseenCount:0,days:Array.from({length:30},()=>({succeeded:0,failed:0}))}):r.get(`/automations/runs/summary`).then(e=>e.data),markRunsSeen:()=>r.post(`/automations/runs/seen`).then(e=>e.data)},ie={getConfig:()=>e()?i({enabled:!1,available:!1,allowed:!1}):r.get(`/search/config`).then(e=>e.data),getAccess:()=>e()?i({mode:`admins`,allowed:!1}):r.get(`/search/access`).then(e=>e.data),setAccess:t=>e()?i({mode:t}):r.put(`/search/access`,{mode:t}).then(e=>e.data),setConfig:(t,n,a)=>e()?i({enabled:t,available:t,allowed:!1,url:n}):r.put(`/search/config`,{enabled:t,url:n,...a??{}}).then(e=>e.data),searchApp:t=>e()?i({sessions:[],notes:[],documents:[]}):r.get(`/search/app`,{params:{q:t}}).then(e=>e.data),test:()=>e()?i({ok:!1,results:0},!1):r.post(`/search/test`).then(e=>e.data)},w={getModels:t=>e()?i([{id:`meta-llama/Llama-3.3-70B-Instruct`,modelId:`meta-llama/Llama-3.3-70B-Instruct`,author:`meta-llama`,downloads:1e6,likes:5e3,tags:[`text-generation`,`llama`],pipeline_tag:`text-generation`,gated:!1}]):r.get(`/huggingface-hub/models`,{params:t}).then(e=>e.data),getTrending:t=>e()?i([]):r.get(`/huggingface-hub/trending`,{params:t}).then(e=>e.data),getModel:(t,n)=>e()?i({id:`${t}/${n}`,modelId:`${t}/${n}`,author:t,downloads:0,likes:0,tags:[],gated:!1}):r.get(`/huggingface-hub/models/${t}/${n}`).then(e=>e.data),getTasks:()=>e()?i([`text-generation`,`text-to-speech`,`text-to-image`]):r.get(`/huggingface-hub/tasks`).then(e=>e.data),clearCache:()=>e()?i(!0):r.post(`/huggingface-hub/cache/clear`).then(e=>e.data),getGgufFiles:(t,n)=>e()?i([{filename:`model-Q4_K_M.gguf`,size:45e8,sizeFormatted:`4.19 GB`,quantization:`Q4_K_M`,url:`https://huggingface.co/${t}/${n}/resolve/main/model-Q4_K_M.gguf`,ollamaCommand:`hf.co/${t}/${n}:Q4_K_M`}]):r.get(`/huggingface-hub/models/${t}/${n}/gguf`).then(e=>e.data),hasGgufFiles:(t,n)=>e()?i({hasGguf:!1,count:0}):r.get(`/huggingface-hub/models/${t}/${n}/has-gguf`).then(e=>e.data)};function T(e,t){return t?t.aborted?Promise.reject(t.reason??new DOMException(`The operation was aborted`,`AbortError`)):new Promise((n,r)=>{let i=()=>{r(t.reason??new DOMException(`The operation was aborted`,`AbortError`))};t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})}):e}var E={getModels:()=>e()?i([{model:`gpt-image-2`,plugin:`openai`,config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):r.get(`/image-gen/models`).then(e=>e.data),getPlugins:()=>e()?i([{id:`openai`,name:`OpenAI GPT Image`,models:[`gpt-image-2`,`gpt-image-1.5`,`gpt-image-1`,`gpt-image-1-mini`],config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):r.get(`/image-gen/plugins`).then(e=>e.data),getConfig:t=>e()?i({sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}):r.get(`/image-gen/config/${t}`).then(e=>e.data),generate:(t,n)=>e()?T(i({images:[{url:`https://placehold.co/1024x1024/purple/white?text=Demo+Image`,revised_prompt:t.prompt}],model:t.model,pluginId:t.pluginId}),n):r.post(`/image-gen/generate`,t,{signal:n}).then(e=>e.data),getGallery:t=>e()?i({images:[],total:0}):r.get(`/image-gen/gallery`,{params:t}).then(e=>e.data),getGalleryImage:t=>e()?i({id:t,userId:`demo`,prompt:`Demo image prompt`,model:`dall-e-3`,imageData:`https://placehold.co/1024x1024/purple/white?text=Demo`,createdAt:Date.now()}):r.get(`/image-gen/gallery/${t}`).then(e=>e.data),deleteGalleryImage:t=>e()?i(void 0):r.delete(`/image-gen/gallery/${t}`).then(e=>e.data)},D={connected:!1,baseUrl:`http://127.0.0.1:8766`,dashboardUrl:`http://127.0.0.1:8766/dashboard`,error:`Libre Claw daemon is not connected in demo mode.`},O={access:()=>e()?i({enabled:!1,lockedByEnv:!1}):r.get(`/libre-claw/access`).then(e=>e.data),setAccess:t=>e()?i({enabled:t,lockedByEnv:!1}):r.put(`/libre-claw/access`,{enabled:t}).then(e=>e.data),status:()=>e()?i(D):r.get(`/libre-claw/status`).then(e=>e.data),dashboard:()=>e()?i({url:D.dashboardUrl}):r.get(`/libre-claw/dashboard`).then(e=>e.data),currentModel:()=>e()?i({provider:`openrouter`,model:`openrouter/auto`}):r.get(`/libre-claw/config/model`).then(e=>e.data),updateModel:(t,n,a=!1)=>e()?i({provider:t,model:n,persist_global:a}):r.patch(`/libre-claw/config/model`,{provider:t,model:n,persist_global:a}).then(e=>e.data),currentFallback:()=>e()?i({enabled:!1,routes:[]}):r.get(`/libre-claw/config/fallback`).then(e=>e.data),updateFallback:t=>e()?i(t):r.patch(`/libre-claw/config/fallback`,t).then(e=>e.data),updateTheme:(t,n=!0)=>e()?i({theme:t,label:t,persist_global:n}):r.patch(`/libre-claw/config/theme`,{theme:t,persist_global:n}).then(e=>e.data),usage:(t=``,n=250)=>{let a=new URLSearchParams({limit:String(n)});return t&&a.set(`provider`,t),e()?i({summary:{},records:[],text:``}):r.get(`/libre-claw/usage?${a.toString()}`).then(e=>e.data)},listRuns:(t=20)=>e()?i({runs:[]}):r.get(`/libre-claw/runs?limit=${t}`).then(e=>e.data),startRun:t=>{if(e()){let e=new Date().toISOString();return i({run:{run_id:`demo-${Date.now()}`,state:`queued`,title:t.message.slice(0,80)||`Libre Claw demo run`,kind:t.kind||`chat`,provider:t.provider||`openrouter`,model:t.model||`openrouter/auto`,working_directory:``,created_at:e,updated_at:e}})}return r.post(`/libre-claw/runs`,t).then(e=>e.data)},getRun:t=>e()?i({run_id:t}):r.get(`/libre-claw/runs/${encodeURIComponent(t)}`).then(e=>e.data),getEvents:(t,n=0)=>e()?i({events:[]}):r.get(`/libre-claw/runs/${encodeURIComponent(t)}/events?after=${n}`).then(e=>e.data),cancelRun:t=>e()?i({run_id:t,cancelled:!0}):r.post(`/libre-claw/runs/${encodeURIComponent(t)}/cancel`).then(e=>e.data),resolvePermission:(t,n,a)=>e()?i({run_id:t,tool_call_id:n,resolution:a}):r.post(`/libre-claw/runs/${encodeURIComponent(t)}/permissions/${encodeURIComponent(n)}`,{resolution:a}).then(e=>e.data),listAutomations:(t=50)=>e()?i({automations:[]}):r.get(`/libre-claw/automations?limit=${t}`).then(e=>e.data),createAutomation:t=>e()?i({...t,automation_id:`demo-${Date.now()}`}):r.post(`/libre-claw/automations`,t).then(e=>e.data),updateAutomation:(t,n)=>e()?i({...n,automation_id:t}):r.patch(`/libre-claw/automations/${encodeURIComponent(t)}`,n).then(e=>e.data),pauseAutomation:t=>e()?i({automation_id:t,status:`paused`}):r.post(`/libre-claw/automations/${encodeURIComponent(t)}/pause`).then(e=>e.data),resumeAutomation:t=>e()?i({automation_id:t,status:`active`}):r.post(`/libre-claw/automations/${encodeURIComponent(t)}/resume`).then(e=>e.data),runAutomationNow:t=>e()?i({automation_id:t,run:!0}):r.post(`/libre-claw/automations/${encodeURIComponent(t)}/run`).then(e=>e.data),deleteAutomation:t=>e()?i({automation_id:t,deleted:!0}):r.delete(`/libre-claw/automations/${encodeURIComponent(t)}`).then(e=>e.data)},k={getModels:()=>r.get(`/media/models`).then(e=>e.data),generateAudio:(e,t)=>r.post(`/media/audio/generate`,e,{signal:t}).then(e=>e.data),cloneVoice:(e,t)=>{let n=new FormData;return n.set(`model`,e.model),n.set(`pluginId`,e.pluginId),n.set(`input`,e.input),n.set(`reference_audio`,e.referenceAudio),e.referenceText&&n.set(`reference_text`,e.referenceText),e.responseFormat&&n.set(`response_format`,e.responseFormat),e.saveVoiceName&&n.set(`saveVoiceName`,e.saveVoiceName),e.consentToStore&&n.set(`consentToStore`,`true`),e.consentTtlDays!==void 0&&n.set(`consentTtlDays`,String(e.consentTtlDays)),r.post(`/media/audio/voice-clone`,n,{signal:t}).then(e=>e.data)},generateSound:(e,t)=>r.post(`/media/sound/generate`,e,{signal:t}).then(e=>e.data),generateVideo:(e,t)=>r.post(`/media/video/generate`,e,{signal:t}).then(e=>e.data),getVideoJob:(e,t)=>r.get(`/media/video/jobs/${e}`,{signal:t}).then(e=>e.data),listVideoJobs:e=>r.get(`/media/video/jobs`,{params:e}).then(e=>e.data),resumeVideoJob:(e,t)=>r.post(`/media/video/jobs/${encodeURIComponent(e)}/resume`,void 0,{signal:t}).then(e=>e.data),cancelVideoJob:e=>r.delete(`/media/video/jobs/${encodeURIComponent(e)}`).then(e=>e.data),getGallery:e=>r.get(`/media/gallery`,{params:e}).then(e=>e.data),deleteGalleryItem:e=>r.delete(`/media/gallery/${e}`).then(e=>e.data),editImage:(e,t)=>{let n=new FormData;n.set(`model`,e.model),n.set(`pluginId`,e.pluginId),n.set(`prompt`,e.prompt),e.size&&n.set(`size`,e.size),e.sourceMediaId&&n.set(`sourceMediaId`,e.sourceMediaId);for(let t of e.images??[])n.append(`images`,t);return e.mask&&n.append(`mask`,e.mask,`mask.png`),r.post(`/media/image/edit`,n,{signal:t}).then(e=>e.data)},getGalleryContent:e=>r.get(`/media/gallery/${e}/content`,{responseType:`blob`}).then(e=>e.data)},A=(e,t,n)=>{let r=new AbortController,i=localStorage.getItem(`auth-token`);return(async()=>{try{let n=await fetch(e,{headers:{Accept:`text/event-stream`,...i?{Authorization:`Bearer ${i}`}:{}},cache:`no-store`,credentials:`same-origin`,signal:r.signal});if(!n.ok){let e=`Request failed with status ${n.status}`;try{let t=await n.json();typeof t.error==`string`?e=t.error:typeof t.message==`string`&&(e=t.message)}catch{}throw Error(e)}if(!n.body)throw Error(`Response stream is unavailable`);let a=n.body.getReader(),o=new TextDecoder,s=``;try{for(;!r.signal.aborted;){let{done:e,value:n}=await a.read();s+=o.decode(n,{stream:!e});let r=s.split(/\r?\n\r?\n/);s=r.pop()||``;for(let e of r){let n=e.split(/\r?\n/).find(e=>e.startsWith(`data:`));n&&t(JSON.parse(n.slice(5).trim()))}if(e)break}}finally{a.releaseLock()}}catch(e){r.signal.aborted||n(e instanceof Error?e.message:`Connection lost`)}})(),()=>r.abort()},j=`libre:models-changed`,M=()=>{window.dispatchEvent(new Event(j))},N={checkHealth:()=>e()?i({status:`offline`},!1):r.get(`/ollama/health`).then(e=>e.data),getSettings:()=>e()?i({enabled:!0,baseUrl:`http://localhost:11434`}):r.get(`/ollama/settings`).then(e=>e.data),updateSettings:t=>e()?i({enabled:!0,baseUrl:`http://localhost:11434`}):r.put(`/ollama/settings`,t).then(e=>e.data),getModels:()=>e()?i(o):r.get(`/ollama/models`).then(e=>e.data),getModelAccess:()=>e()?i({mode:`admins`,allowed:!1}):r.get(`/ollama/models/access`).then(e=>e.data),setModelAccess:t=>e()?i({mode:t}):r.put(`/ollama/models/access`,{mode:t}).then(e=>e.data),getModelVisibility:()=>e()?i({hidden:[],order:[],starred:[],metadata:{}}):r.get(`/ollama/models/visibility`).then(e=>e.data),setModelVisibility:t=>e()?i({hidden:t.hidden??[],order:t.order??[],starred:t.starred??[],metadata:t.metadata??{}}):r.put(`/ollama/models/visibility`,t).then(e=>e.data),pullModel:t=>e()?i(null,!1):r.post(`/ollama/models/pull`,{name:t}).then(e=>(M(),e.data)),pullModelStream:(n,r,i,a)=>{if(e()){let e=0,t=setInterval(()=>{e+=Math.random()*20,e>=100?(e=100,r({status:`success`,total:100,completed:100,percent:100}),clearInterval(t),setTimeout(()=>{M(),i()},500)):r({status:`pulling`,total:100,completed:e,percent:Math.round(e)})},1e3);return()=>clearInterval(t)}let o=new URLSearchParams({model:n});return A(`${t}/ollama/pull/stream?${o.toString()}`,e=>{switch(e.type){case`progress`:r({status:typeof e.status==`string`?e.status:`pulling`,digest:typeof e.digest==`string`?e.digest:void 0,total:typeof e.total==`number`?e.total:void 0,completed:typeof e.completed==`number`?e.completed:void 0,percent:typeof e.percent==`number`?e.percent:void 0});break;case`complete`:M(),i();break;case`error`:a(String(e.error||`Model pull failed`))}},a)},deleteModel:t=>e()?i(null,!1):r.delete(`/ollama/models`,{params:{name:t}}).then(e=>(M(),e.data)),getModelDefaults:e=>r.get(`/ollama/models/${encodeURIComponent(e)}/defaults`).then(e=>e.data),showModel:(t,n=!1)=>{if(e()){let e=o.find(e=>e.name===t);return i(e||null,!!e)}return r.get(`/ollama/models/show`,{params:{name:t,verbose:n}}).then(e=>e.data)},createModel:t=>e()?i(null,!1):r.post(`/ollama/models`,t).then(e=>(M(),e.data)),copyModel:(t,n)=>e()?i(null,!1):r.post(`/ollama/models/copy`,{source:t,destination:n}).then(e=>(M(),e.data)),pushModel:t=>e()?i(null,!1):r.post(`/ollama/models/push`,{name:t}).then(e=>e.data),pullAllModels:()=>e()?i(null,!1):r.post(`/ollama/models/pull-all`).then(e=>e.data),pullAllModelsStream:(n,r,i)=>{if(e()){let e=o,t=0,i=setInterval(()=>{t++,t<=e.length&&n({current:t,total:e.length,modelName:e[t-1]?.name||`demo-model`,status:Math.random()>.1?`success`:`error`,error:Math.random()>.1?void 0:`Demo error`}),t>=e.length&&(clearInterval(i),setTimeout(()=>{M(),r()},500))},1e3);return}A(`${t}/ollama/models/pull-all/stream`,e=>{switch(e.type){case`progress`:{let t=e.status===`success`||e.status===`error`?e.status:`starting`;n({current:typeof e.current==`number`?e.current:0,total:typeof e.total==`number`?e.total:0,modelName:typeof e.modelName==`string`?e.modelName:`unknown`,status:t,error:typeof e.error==`string`?e.error:void 0});break}case`complete`:M(),r();break;case`error`:i(String(e.error||`Model update failed`))}},i)},generateEmbeddings:t=>e()?i({embeddings:[[]]},!1):r.post(`/ollama/embed`,t).then(e=>e.data),listRunningModels:()=>e()?i([]):r.get(`/ollama/running`).then(e=>e.data),unloadModel:t=>e()?i(null):r.post(`/ollama/models/unload`,{name:t}).then(e=>e.data),unloadAllModels:()=>e()?i(null):r.post(`/ollama/models/unload-all`).then(e=>e.data),getVersion:()=>e()?i({version:`demo-mode`},!1):r.get(`/ollama/version`).then(e=>e.data),chatCompletion:t=>e()?i({message:{content:`Demo response`,role:`assistant`}},!1):r.post(`/ollama/chat`,t).then(e=>e.data),checkBlobExists:t=>e()?Promise.resolve(!1):r.head(`/ollama/blobs/${t}`).then(()=>!0).catch(()=>!1),pushBlob:(t,n)=>e()?i(null,!1):r.post(`/ollama/blobs/${t}`,n,{headers:{"Content-Type":`application/octet-stream`}}).then(e=>e.data),generateLegacyEmbeddings:t=>e()?i({embedding:[]},!1):r.post(`/ollama/embeddings`,t).then(e=>e.data),getLibraryModels:t=>{if(e())return t?.category===`cloud`?i([{name:`gpt-oss:cloud`,description:`Demo cloud model using Ollama cloud naming`,category:`cloud`,sizes:[`cloud`],pulls:`Cloud`,tags:[`cloud`]}]):i([{name:`llama3.2`,description:`Meta's latest Llama model`,category:`general`,sizes:[`1b`,`3b`],pulls:`50M+`,tags:[`general`]},{name:`deepseek-r1`,description:`Open reasoning model`,category:`reasoning`,sizes:[`7b`,`14b`,`32b`],pulls:`200M+`,tags:[`reasoning`]}]);let n=new URLSearchParams;t?.search&&n.set(`search`,t.search),t?.sort&&n.set(`sort`,t.sort),t?.category&&n.set(`category`,t.category);let a=n.toString();return r.get(`/ollama/library${a?`?${a}`:``}`).then(e=>e.data)}},P=[[`#2563eb`,`#7c3aed`],[`#0891b2`,`#2563eb`],[`#0f766e`,`#2563eb`],[`#be123c`,`#7c3aed`],[`#ff7b52`,`#dc2626`]],F=e=>{let t=0;for(let n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)},I=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`),L=e=>{let t=e.trim().split(/[\s._-]+/).filter(Boolean);return t.length===0?`AI`:t.slice(0,2).map(e=>e[0]?.toUpperCase()).join(``)||`AI`},R=(e,t=128)=>{let n=e.trim()||`AI Persona`,r=F(n),[i,a]=P[r%P.length],o=I(L(n)),s=`persona-avatar-${r}-${t}`,c=t>=96?44:24,l=`
3
3
  <svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 ${t} ${t}" role="img" aria-label="${I(n)} avatar">
4
4
  <defs>
@@ -1 +1 @@
1
- import{t as e}from"./chatStore-8jYk48hC.js";import{d as t}from"./authStore-DkqtNSYP.js";import{n}from"./welcomePrompts-to5mv_gx.js";var r=t=>{n(),e.getState().setCurrentSession(null),sessionStorage.setItem(`forceWelcomeScreen`,`true`),t(`/chat`)},i=t=>{n(),e.getState().setCurrentSession(null),sessionStorage.removeItem(`pendingMessage`),sessionStorage.setItem(`forceWelcomeScreen`,`true`),t(`/chat?incognito=1`)},a=e=>{t.getState().clearError(),e(`/work`)};export{r as n,a as r,i as t};
1
+ import{t as e}from"./chatStore-lyGhYu24.js";import{d as t}from"./authStore-8w9Idb5o.js";import{n}from"./welcomePrompts-to5mv_gx.js";var r=t=>{n(),e.getState().setCurrentSession(null),sessionStorage.setItem(`forceWelcomeScreen`,`true`),t(`/chat`)},i=t=>{n(),e.getState().setCurrentSession(null),sessionStorage.removeItem(`pendingMessage`),sessionStorage.setItem(`forceWelcomeScreen`,`true`),t(`/chat?incognito=1`)},a=e=>{t.getState().clearError(),e(`/work`)};export{r as n,a as r,i as t};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-CHEuZtwG.js","js/workApi-0L8fBGq1.js","js/logger-DnuT4jgB.js","js/config-B5SBQwEe.js","js/api-DEOxp9DN.js","js/imageGenModels-Dx_QMLJQ.js"])))=>i.map(i=>d[i]);
2
+ import{a as e,i as t,o as n,t as r}from"./logger-DnuT4jgB.js";import{i,t as a}from"./utils-vendor-Bla8iz2s.js";var o=15e3,s=1440,c=(e,t,n)=>Math.min(Math.max(e,t),n),l=(e,t,n)=>e+(t-e)*n,u=(e,t,n)=>{let r=(t-e+540)%360-180;return r<-180&&(r+=360),(e+r*n+360)%360},d=(e,t,n)=>({h:u(e.h,t.h,n),s:l(e.s,t.s,n),l:l(e.l,t.l,n)}),f=(e,t,n)=>({h:e,s:t,l:n}),p=({h:e,s:t,l:n})=>{let r=c(t,0,100)/100,i=c(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),l=i-a/2,[u,d,f]=o<60?[a,s,0]:o<120?[s,a,0]:o<180?[0,a,s]:o<240?[0,s,a]:o<300?[s,0,a]:[a,0,s];return`#${[u,d,f].map(e=>c(Math.round((e+l)*255),0,255).toString(16).padStart(2,`0`)).join(``)}`},m=e=>e.getHours()*60+e.getMinutes()+e.getSeconds()/60,h=(e,t=!0)=>{let n=(Math.round(e)%s+s)%s,r=Math.floor(n/60),i=n%60,a=String(i).padStart(2,`0`);return t?`${r%12==0?12:r%12}:${a}${r<12?`am`:`pm`}`:`${String(r).padStart(2,`0`)}:${a}`},g=e=>{let t=new Date(e.getFullYear(),0,0);return Math.floor((e.getTime()-t.getTime())/864e5)},_=e=>{let t=new Date(e.getFullYear(),0,1).getTimezoneOffset(),n=new Date(e.getFullYear(),6,1).getTimezoneOffset();return e.getTimezoneOffset()<Math.max(t,n)};function v(e,t,n){let r=Math.PI/180,i=g(e),a=23.44*Math.sin(r*(360/365*(284+i))),o=n?n.latitude:45,l=c(n?(Math.sin(r*-.833)-Math.sin(r*o)*Math.sin(r*a))/(Math.cos(r*o)*Math.cos(r*a)):-Math.tan(r*o)*Math.tan(r*a),-1,1),u=2*Math.acos(l)/r/15*60,d;if(n){let t=2*Math.PI*(i-81)/364,r=9.87*Math.sin(2*t)-7.53*Math.cos(t)-1.5*Math.sin(t),a=-e.getTimezoneOffset();d=720-4*n.longitude-r+a,d=(d%s+s)%s}else d=(_(e)?13:12)*60;let f=d-u/2,p=d+u/2,h=t===void 0?m(e):(t%s+s)%s,v=h>=f&&h<=p,y,b;if(v)b=(h-f)/u,y=Math.sin(Math.PI*b);else{let e=s-u;b=(h>p?h-p:h+(s-p))/e,y=-Math.sin(Math.PI*b)}let x=29.530588853,S=((e.getTime()-Date.UTC(2e3,0,6,18,14))/864e5%x+x)%x/x;return{minutes:h,sunrise:f,sunset:p,solarNoon:d,altitude:y,isDay:v,progress:b,morning:h<d,moonPhase:S}}var y=[{at:-1,top:f(228,46,8),mid:f(224,40,13),horizon:f(214,34,19)},{at:-.35,top:f(229,44,11),mid:f(225,40,16),horizon:f(216,32,23)},{at:-.12,top:f(228,44,16),mid:f(222,40,26),horizon:f(212,44,36)},{at:0,top:f(220,42,34),mid:f(24,62,62),horizon:f(42,88,70)},{at:.22,top:f(206,58,62),mid:f(196,54,74),horizon:f(46,70,82)},{at:.6,top:f(206,70,58),mid:f(194,58,75),horizon:f(178,40,85)},{at:1,top:f(208,74,55),mid:f(196,60,72),horizon:f(168,36,87)}],b=[{at:-1,top:f(228,46,8),mid:f(224,40,13),horizon:f(214,34,19)},{at:-.35,top:f(232,44,11),mid:f(236,38,16),horizon:f(252,30,23)},{at:-.12,top:f(234,44,15),mid:f(258,40,26),horizon:f(300,34,34)},{at:0,top:f(226,40,30),mid:f(340,58,56),horizon:f(26,92,60)},{at:.22,top:f(210,56,60),mid:f(24,60,74),horizon:f(38,84,78)},{at:.6,top:f(206,68,58),mid:f(198,56,75),horizon:f(184,38,85)},{at:1,top:f(208,74,55),mid:f(196,60,72),horizon:f(168,36,87)}],x=(e,t)=>{let n=c(t,-1,1),r=0;for(;r<e.length-2&&n>e[r+1].at;)r+=1;let i=e[r],a=e[r+1],o=c((n-i.at)/(a.at-i.at),0,1);return{top:d(i.top,a.top,o),mid:d(i.mid,a.mid,o),horizon:d(i.horizon,a.horizon,o)}},S=[`canvas`,`sidebar`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],ee={canvas:[96,1],sidebar:[94,1],surface:[98,.9],"surface-subtle":[93,1],"surface-raised":[99,.8],"surface-overlay":[100,0],"surface-inverse":[10,.7],ink:[12,.45],"ink-muted":[30,.35],"ink-subtle":[40,.4],"ink-inverse":[98,.4],line:[86,.8],"line-strong":[75,.65]},te={canvas:[7,.9],sidebar:[9,1],surface:[9,.9],"surface-subtle":[12,1],"surface-raised":[15,1],"surface-overlay":[18,1],"surface-inverse":[96,.35],ink:[95,.3],"ink-muted":[76,.35],"ink-subtle":[62,.4],"ink-inverse":[8,.45],line:[20,.8],"line-strong":[30,.65]},ne=[`25`,`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],re={25:99,50:97,100:94,200:88,300:80,400:56,500:38,600:36,700:27,800:18,900:11,950:6},ie={25:13,50:4,100:7,200:10,300:16,400:27,500:56,600:74,700:82,800:89,900:95,950:99};function ae(e,t,n={}){let r=v(e,t,n.location),i=x(r.morning?y:b,r.altitude),a=r.altitude<-.05,o=c(-r.altitude/.35,0,1),s=c(1-Math.abs(r.altitude-.08)/.3,0,1),l=n.weather??null,u=l?l.cloudCover:0,d=l&&(l.kind===`rain`||l.kind===`thunder`||l.kind===`snow`)?1:0,m=e=>({h:e.h,s:e.s*(1-.6*u),l:a?e.l-2*u:e.l-9*u-4*d+(l?.kind===`snow`?6:0)});l&&(i.top=m(i.top),i.mid=m(i.mid),i.horizon=m(i.horizon));let h=s*(1-.8*u),g=i.mid.h,_=(a?10+8*(1-o):8+10*h)*(1-.5*u),ae=a?te:ee,oe=a?-3*o:-3*c(1-r.altitude,0,1),se={};for(let e of S){let[t,n]=ae[e],r=e.startsWith(`ink`)||e===`surface-inverse`?t:c(t+oe,0,100);se[e]=p(f(g,_*n,r))}let ce={},le={};for(let e of ne)ce[e]=p(f(g,_*.8,re[e])),le[e]=p(f(g,_*.8,c(ie[e]+oe/2,0,100)));return{solar:r,isDark:a,weather:l,cover:u,sky:{top:p(i.top),mid:p(i.mid),horizon:p(i.horizon)},glow:p(f(i.mid.h,c(i.mid.s+10,0,100),a?62:70)),roles:se,gray:ce,dark:le,night:o,golden:h}}function oe(e){let{solar:t,night:n,golden:r}=e,i=(e,t)=>({x:8+84*c(e,0,1),y:74-62*c(Math.abs(t),0,1)}),{weather:a,cover:o}=e,s=1-.75*o,l=t.isDay?{...i(t.progress,t.altitude),visible:!0,warmth:r,dim:s}:{x:50,y:100,visible:!1,warmth:0,dim:s},u=t.isDay?{x:50,y:100,visible:!1,phase:t.moonPhase,dim:s}:{...i(t.progress,t.altitude),visible:!0,phase:t.moonPhase,dim:s},d=a?.kind??`none`,f=d===`drizzle`?.35:d===`rain`?.75:+(d===`thunder`),p=a?c(f+Math.min(a.precipitation,4)/8,0,1)*+(f>0):0,m=d===`snow`?c(.5+Math.min(a?.precipitation??0,4)/6,0,1):0,h=+(d===`fog`),g=t.isDay?.55+.25*r:.18;return{sun:l,moon:u,stars:n*(1-.92*o),cloudTint:e.sky.horizon,cloudOpacity:a?c(g*(.3+1.2*o),.05,.95):g,haze:c(1-Math.abs(t.altitude),0,1)+h*.6,rain:p,snow:m,fog:h,thunder:d===`thunder`,wind:a?c(.6+a.windSpeed/25,.6,3):1,weatherKind:d}}var se=1e4,ce=`https://api.open-meteo.com/v1/forecast`,le=e=>e===0?`clear`:e<=2?`partly`:e===3?`overcast`:e===45||e===48?`fog`:e>=51&&e<=57?`drizzle`:e>=61&&e<=67||e>=80&&e<=82?`rain`:e>=71&&e<=77||e===85||e===86?`snow`:e>=95?`thunder`:`partly`,ue=e=>Math.round(e*100)/100,de=e=>!!e&&typeof e.latitude==`number`&&typeof e.longitude==`number`&&Number.isFinite(e.latitude)&&Number.isFinite(e.longitude)&&Math.abs(e.latitude)<=90&&Math.abs(e.longitude)<=180;async function fe(e,t){let n=new URL(ce);n.searchParams.set(`latitude`,String(e.latitude)),n.searchParams.set(`longitude`,String(e.longitude)),n.searchParams.set(`current`,`weather_code,cloud_cover,precipitation,wind_speed_10m`),n.searchParams.set(`timezone`,`auto`);let r=new AbortController,i=()=>r.abort(t?.reason);t?.aborted?i():t?.addEventListener(`abort`,i,{once:!0});let a=setTimeout(()=>r.abort(new DOMException(`Weather request timed out`,`TimeoutError`)),se);try{let e=await fetch(n.toString(),{signal:r.signal});if(!e.ok)throw Error(`weather ${e.status}`);let t=(await e.json())?.current;if(!t||![t.weather_code,t.cloud_cover,t.precipitation,t.wind_speed_10m].every(Number.isFinite))throw Error(`weather missing current conditions`);return{kind:le(t.weather_code),cloudCover:Math.min(1,Math.max(0,t.cloud_cover/100)),precipitation:Math.max(0,t.precipitation),windSpeed:Math.max(0,t.wind_speed_10m),fetchedAt:Date.now()}}finally{clearTimeout(a),t?.removeEventListener(`abort`,i)}}var pe=`libre-webui-celestial`,me=()=>{if(typeof localStorage>`u`)return{};try{let e=localStorage.getItem(pe),t=e?JSON.parse(e):{};return{location:de(t.location)?t.location:null,weatherEnabled:t.weatherEnabled===!0}}catch{return{}}},he=e=>{if(!(typeof localStorage>`u`))try{localStorage.setItem(pe,JSON.stringify(e))}catch{}},C=i((e,t)=>{let n=me(),r=null,i=0,a=15e3,o=()=>{r?.controller.abort(),r=null,i=0,a=15e3};return{active:!1,palette:null,scene:null,previewMinutes:null,location:n.location??null,weatherEnabled:n.weatherEnabled??!1,weather:null,weatherStatus:`idle`,activate:()=>e({active:!0}),refresh:()=>{if(!t().active)return;let{previewMinutes:n,location:r,weatherEnabled:i,weather:a}=t(),o=ae(new Date,n??void 0,{location:r,weather:i&&r?a:null});e({palette:o,scene:oe(o)})},setPreviewMinutes:n=>{e({previewMinutes:n}),t().refresh()},setLocation:n=>{o();let r=de(n)?{latitude:ue(n.latitude),longitude:ue(n.longitude)}:null;e({location:r,weather:null,weatherStatus:`idle`}),he({location:r,weatherEnabled:t().weatherEnabled}),t().refresh(),r&&t().weatherEnabled&&t().maybeRefreshWeather(!0)},requestBrowserLocation:()=>new Promise(e=>{if(typeof navigator>`u`||!navigator.geolocation){e(!1);return}navigator.geolocation.getCurrentPosition(n=>{t().setLocation({latitude:n.coords.latitude,longitude:n.coords.longitude}),e(!0)},()=>e(!1),{enableHighAccuracy:!1,maximumAge:36e5,timeout:12e3})}),setWeatherEnabled:n=>{n||o(),e({weatherEnabled:n,weatherStatus:n?t().weatherStatus:`idle`}),he({location:t().location,weatherEnabled:n}),t().refresh(),n&&t().maybeRefreshWeather(!0)},maybeRefreshWeather:async(n=!1)=>{let{weatherEnabled:o,location:s,weather:c}=t();if(!o||!s)return;let l=c&&Date.now()-c.fetchedAt<9e5;if(!n&&(l||Date.now()<i))return;if(r)return r.promise;let u=new AbortController,d={controller:u,promise:fe(s,u.signal).then(n=>{r===d&&(i=0,a=15e3,e({weather:n,weatherStatus:`ready`}),t().refresh())}).catch(()=>{r===d&&(i=Date.now()+a,a=Math.min(a*2,3e5),e({weatherStatus:`error`}))}).finally(()=>{r===d&&(r=null)})};return r=d,e({weatherStatus:`loading`}),d.promise},clear:()=>{o(),e({active:!1,palette:null,scene:null,previewMinutes:null,weatherStatus:t().weather?`ready`:`idle`})}}}),ge=`dark`,_e=`blue`,ve=`#4176e6`,w=[{id:`violet`,label:`Violet`,color:`#7c3aed`,foreground:`#ffffff`},{id:`blue`,label:`Blue`,color:`#4176e6`,foreground:`#ffffff`},{id:`cyan`,label:`Cyan`,color:`#0e7490`,foreground:`#ffffff`},{id:`teal`,label:`Teal`,color:`#0f766e`,foreground:`#ffffff`},{id:`emerald`,label:`Emerald`,color:`#15803d`,foreground:`#ffffff`},{id:`amber`,label:`Coral`,color:`#ff7b52`,foreground:`#3d120c`},{id:`rose`,label:`Rose`,color:`#e11d48`,foreground:`#ffffff`},{id:`slate`,label:`Slate`,color:`#475569`,foreground:`#ffffff`}],ye=[`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],be=[`25`,...ye],T=[`canvas`,`sidebar`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],xe={multiplier:.24,minimum:6,maximum:24},Se={multiplier:.36,minimum:6,maximum:32},Ce={25:99,50:97,100:94,200:88,300:80,400:66,500:48,600:36,700:27,800:18,900:11,950:6},we={25:13,50:4,100:7,200:10,300:16,400:27,500:46,600:65,700:82,800:89,900:95,950:99},Te={25:6,50:0,100:3,200:6,300:12,400:24,500:46,600:65,700:82,800:89,900:95,950:99},Ee={canvas:{lightness:96,saturationFactor:1},sidebar:{lightness:94,saturationFactor:1},surface:{lightness:98,saturationFactor:.9},"surface-subtle":{lightness:93,saturationFactor:1},"surface-raised":{lightness:99,saturationFactor:.8},"surface-overlay":{lightness:100,saturationFactor:0},"surface-inverse":{lightness:10,saturationFactor:.7},ink:{lightness:10,saturationFactor:.45},"ink-muted":{lightness:38,saturationFactor:.35},"ink-subtle":{lightness:54,saturationFactor:.4},"ink-inverse":{lightness:98,saturationFactor:.4},line:{lightness:86,saturationFactor:.8},"line-strong":{lightness:75,saturationFactor:.65}},De={canvas:{lightness:5,saturationFactor:.9},sidebar:{lightness:8,saturationFactor:1},surface:{lightness:7,saturationFactor:.9},"surface-subtle":{lightness:9,saturationFactor:1},"surface-raised":{lightness:11,saturationFactor:1},"surface-overlay":{lightness:13,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:7,saturationFactor:.45},line:{lightness:18,saturationFactor:.8},"line-strong":{lightness:28,saturationFactor:.65}},Oe={canvas:{lightness:0,saturationFactor:0},sidebar:{lightness:0,saturationFactor:0},surface:{lightness:0,saturationFactor:0},"surface-subtle":{lightness:4,saturationFactor:1},"surface-raised":{lightness:7,saturationFactor:1},"surface-overlay":{lightness:10,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:0,saturationFactor:0},line:{lightness:11,saturationFactor:.8},"line-strong":{lightness:20,saturationFactor:.65}},ke={violet:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#7c3aed`,600:`#6d28d9`,700:`#5b21b6`,800:`#4c1d95`,900:`#3b0764`,950:`#2e1065`},blue:{50:`#edf3fe`,100:`#e4edfd`,200:`#d3e2ff`,300:`#b7c8fe`,400:`#679efe`,500:`#4176e6`,600:`#4868b2`,700:`#2f4c8f`,800:`#34415b`,900:`#283142`,950:`#1e2635`},cyan:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#0e7490`,600:`#155e75`,700:`#164e63`,800:`#083344`,900:`#092f3f`,950:`#062634`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#0f766e`,600:`#0f625d`,700:`#115e59`,800:`#134e4a`,900:`#042f2e`,950:`#022c22`},emerald:{50:`#ecfdf5`,100:`#d1fae5`,200:`#a7f3d0`,300:`#6ee7b7`,400:`#34d399`,500:`#15803d`,600:`#166534`,700:`#14532d`,800:`#064e3b`,900:`#052e16`,950:`#022c22`},amber:{50:`#fff5f1`,100:`#ffe8df`,200:`#ffd0c2`,300:`#ffae96`,400:`#ff9273`,500:`#ff7b52`,600:`#c94a27`,700:`#a83a1f`,800:`#87301f`,900:`#70291e`,950:`#3d120c`},rose:{50:`#fff1f2`,100:`#ffe4e6`,200:`#fecdd3`,300:`#fda4af`,400:`#fb7185`,500:`#e11d48`,600:`#be123c`,700:`#9f1239`,800:`#881337`,900:`#4c0519`,950:`#2d0714`},slate:{50:`#f8fafc`,100:`#f1f5f9`,200:`#e2e8f0`,300:`#cbd5e1`,400:`#94a3b8`,500:`#475569`,600:`#334155`,700:`#1e293b`,800:`#0f172a`,900:`#020617`,950:`#010313`}},Ae={50:97,100:94,200:88,300:76,400:64,500:42,600:34,700:27,800:21,900:16,950:10},E=(e,t,n)=>Math.min(Math.max(e,t),n),D=e=>{if(!e)return null;let t=e.trim().match(/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i);if(!t)return null;let n=t[1];return`#${(n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n).toLowerCase()}`},O=e=>{let t=D(e)||`#4176e6`,n=parseInt(t.slice(1),16);return{r:n>>16&255,g:n>>8&255,b:n&255}},je=(e,t,n)=>`#${[e,t,n].map(e=>E(Math.round(e),0,255).toString(16).padStart(2,`0`)).join(``)}`,Me=(e,t,n)=>{let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2;if(o===s)return{h:0,s:0,l:c*100};let l=o-s,u=c>.5?l/(2-o-s):l/(o+s),d=0;return d=o===r?(i-a)/l+(i<a?6:0):o===i?(a-r)/l+2:(r-i)/l+4,{h:d*60,s:u*100,l:c*100}},k=(e,t,n)=>{let r=E(t,0,100)/100,i=E(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),c=i-a/2,l=0,u=0,d=0;return o<60?(l=a,u=s):o<120?(l=s,u=a):o<180?(u=a,d=s):o<240?(u=s,d=a):o<300?(l=s,d=a):(l=a,d=s),je((l+c)*255,(u+c)*255,(d+c)*255)},Ne=e=>{let{r:t,g:n,b:r}=O(e),i=[t,n,r].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return i[0]*.2126+i[1]*.7152+i[2]*.0722},Pe=(e,t)=>{let n=Ne(e),r=Ne(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)},Fe=(e,t,n)=>{let r=n,i=k(e,t,r);for(;Pe(`#ffffff`,i)<4.5&&r>12;)r-=2,i=k(e,t,r);return i},Ie=e=>{let{r:t,g:n,b:r}=O(D(e)||`#4176e6`),{h:i,s:a}=Me(t,n,r),o=a<8?a:E(a,42,88);return ye.reduce((e,t)=>{let n=Ae[t],r=Number(t)<300?o*.72:o;return e[t]=t===`500`||t===`600`?Fe(i,r,n):k(i,r,n),e},{})},A=e=>{let t=e?.mode===`light`?`light`:e?.mode===`amoled`?`amoled`:e?.mode===`celestial`?`celestial`:ge,n=e?.accent===`custom`?`custom`:e?.accent,r=w.some(e=>e.id===n)?n:_e,i=D(e?.customAccent)||`#4176e6`;return{mode:t,adaptToAccent:e?.adaptToAccent===!0,accent:n===`custom`?`custom`:r,customAccent:i}},Le=()=>A({mode:ge}),j=[`light`,`dark`,`amoled`,`celestial`],Re=e=>j[(j.indexOf(e)+1)%j.length],ze=`libre-webui-instance-theme`,Be=()=>{if(typeof localStorage>`u`)return null;try{let e=localStorage.getItem(ze);if(!e)return null;let t=JSON.parse(e);return t&&typeof t==`object`?A(t):null}catch{return null}},Ve=e=>{if(!(typeof localStorage>`u`))try{localStorage.setItem(ze,JSON.stringify(A(e)))}catch{}},He=()=>Be()??Le(),Ue=e=>{let t=A(e);return t.accent===`custom`?Ie(t.customAccent):ke[t.accent||`blue`]},We=e=>{let t=A(e);return t.accent===`custom`?t.customAccent||`#4176e6`:w.find(e=>e.id===t.accent)?.color||`#4176e6`},Ge=(e,t,n)=>t===0||e<8?e*t:E(e*n.multiplier*t,n.minimum*t,n.maximum*t),Ke=(e,t,n,r)=>be.reduce((i,a)=>(i[a]=k(e,Ge(t,1,r),n[a]),i),{}),qe=(e,t,n,r)=>T.reduce((i,a)=>{let o=n[a];return i[a]=k(e,Ge(t,o.saturationFactor,r),o.lightness),i},{}),M=(e,t,n)=>{let{r,g:i,b:a}=O(n);e.style.setProperty(t,`${r} ${i} ${a}`)},Je=e=>{for(let t of be)e.style.removeProperty(`--color-gray-${t}`),e.style.removeProperty(`--color-dark-${t}`);for(let t of T)e.style.removeProperty(`--color-${t}`)},Ye=(e,t)=>{let{r:n,g:r,b:i}=O(We(t)),{h:a,s:o}=Me(n,r,i),s=t.mode===`light`?Se:xe,c=Ke(a,o,Ce,s),l=Ke(a,o,t.mode===`amoled`?Te:we,xe),u=qe(a,o,t.mode===`light`?Ee:t.mode===`amoled`?Oe:De,s);for(let t of be)M(e,`--color-gray-${t}`,c[t]),M(e,`--color-dark-${t}`,l[t]);for(let t of T)M(e,`--color-${t}`,u[t])},N=null,P=null,F=null,Xe=()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(prefers-reduced-motion: reduce)`);if(e.matches)return;let t=document.documentElement,n=new Date,r=n.getHours()*60+n.getMinutes()+n.getSeconds()/60,i=performance.now();F&&cancelAnimationFrame(F),t.setAttribute(`data-sweep`,`true`);let a=()=>{F=null,C.getState().setPreviewMinutes(null),I(),t.removeAttribute(`data-sweep`)},o=t=>{if(e.matches){a();return}let n=Math.min(1,(t-i)/3200),s=1-(1-n)**3;C.getState().setPreviewMinutes(((r-360*(1-s))%1440+1440)%1440),I(),n<1?F=requestAnimationFrame(o):a()};F=requestAnimationFrame(o)},Ze=()=>{N&&=(clearInterval(N),null),typeof document<`u`&&document.removeEventListener(`visibilitychange`,Qe),C.getState().clear()};function Qe(){document.visibilityState===`visible`&&I()}var I=()=>{if(typeof document>`u`)return;let e=C.getState();e.maybeRefreshWeather(),e.refresh();let t=C.getState().palette;if(!t)return;let n=document.documentElement;n.classList.toggle(`dark`,t.isDark),n.style.colorScheme=t.isDark?`dark`:`light`;for(let e of S)M(n,`--color-${e}`,t.roles[e]);for(let e of ne)M(n,`--color-gray-${e}`,t.gray[e]),M(n,`--color-dark-${e}`,t.dark[e]);n.style.setProperty(`--celestial-sky-top`,t.sky.top),n.style.setProperty(`--celestial-sky-mid`,t.sky.mid),n.style.setProperty(`--celestial-sky-horizon`,t.sky.horizon),n.style.setProperty(`--celestial-glow`,t.glow),n.style.setProperty(`--celestial-night`,String(t.night))},$e=()=>{typeof document>`u`||(C.getState().activate(),I(),N||(N=setInterval(I,o),document.addEventListener(`visibilitychange`,Qe)))},et=e=>{F&&typeof document<`u`&&(cancelAnimationFrame(F),F=null,document.documentElement.removeAttribute(`data-sweep`)),C.getState().setPreviewMinutes(e),N&&I()},L=e=>{if(typeof document>`u`)return;let t=A(e),n=document.documentElement,r=Ue(t);n.classList.remove(`dark`,`amoled`,`ophelia`,`celestial`),t.mode!==`light`&&t.mode!==`celestial`&&n.classList.add(`dark`),t.mode===`amoled`&&n.classList.add(`amoled`),t.mode===`celestial`&&n.classList.add(`celestial`),n.style.colorScheme=t.mode===`light`?`light`:`dark`,n.dataset.accent=t.accent||`blue`,n.dataset.themeStyle=t.adaptToAccent?`accent`:`default`;for(let e of ye){let{r:t,g:i,b:a}=O(r[e]),o=`${t} ${i} ${a}`;n.style.setProperty(`--color-primary-${e}`,o),n.style.setProperty(`--color-accent-${e}`,o)}let i=t.mode===`celestial`&&P!==null&&P!==`celestial`;if(P=t.mode,t.mode===`celestial`){$e(),i&&Xe();return}F&&(cancelAnimationFrame(F),F=null,n.removeAttribute(`data-sweep`)),Ze();for(let e of[`--celestial-sky-top`,`--celestial-sky-mid`,`--celestial-sky-horizon`,`--celestial-glow`,`--celestial-night`])n.style.removeProperty(e);t.adaptToAccent?Ye(n,t):Je(n)},R={enabled:!1,imageUrl:``,blurAmount:10,opacity:.6,effect:`dither`},tt=(e,t,n)=>typeof e==`number`&&Number.isFinite(e)?Math.min(n,Math.max(0,e)):t;function z(e){return{enabled:e?.enabled===!0,imageUrl:typeof e?.imageUrl==`string`?e.imageUrl:``,blurAmount:tt(e?.blurAmount,10,30),opacity:tt(e?.opacity,.6,1),effect:e?.effect===`original`||e?.effect===`blur`?e.effect:`dither`}}var nt=r(`store:app-store`),rt=250,it=250,B=null,at=0,ot=0,V=0,H=0,U={...R},W=0,G=null,K=null,q=null,J=null,Y=null,st=()=>typeof localStorage>`u`?null:localStorage.getItem(`auth-token`),ct=()=>({epoch:at,token:st()}),X=e=>e.epoch===at&&e.token===st(),Z=()=>new DOMException(`Wallpaper operation superseded`,`AbortError`),lt=()=>{W+=1,G?.abort(),G=null,K?.(),K=null},ut=e=>$.setState(t=>({backgroundImage:e.imageUrl||null,preferences:{...t.preferences,backgroundSettings:e}})),Q=(e,t)=>{let n=e.waiters.splice(0);for(let e of n)t?e.reject(t):e.resolve()},dt=()=>{q&&clearTimeout(q),q=null,J&&Q(J,Z()),Y&&Q(Y,Z()),J=null,Y=null,lt()},ft=async()=>{if(Y||!J)return;let e=J;J=null,Y=e;try{let{preferencesApi:t}=await n(async()=>{let{preferencesApi:e}=await import(`./api-CHEuZtwG.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!X(e.scope))throw Z();let r=await t.updatePreferences({backgroundSettings:e.settings});if(!X(e.scope))throw Z();if(!r.success)throw Error(r.error||`Failed to save wallpaper`);e.revision>=H&&(U=e.settings,H=e.revision),Q(e)}catch(t){X(e.scope)&&e.revision===V&&!J&&ut(U),Q(e,t)}finally{Y===e&&(Y=null,J&&!q&&ft())}},pt=()=>{q&&clearTimeout(q),q=setTimeout(()=>{q=null,ft()},it)},$=i()(a((r,i)=>({theme:He(),themeSyncPending:!1,themeSource:`default`,applyInstanceTheme:e=>{if(!e)return;let t=A(e);Ve(t),i().themeSource!==`user`&&i().setTheme(t)},syncThemePreference:async t=>{if(B&&=(clearTimeout(B),null),!(!e()&&!localStorage.getItem(`auth-token`)))try{let{preferencesApi:e}=await n(async()=>{let{preferencesApi:e}=await import(`./api-CHEuZtwG.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!(await e.updatePreferences({theme:t})).success){nt.warn(`Failed to save theme preference to backend`);return}let a=A(i().theme),o=A(t);a.mode===o.mode&&a.adaptToAccent===o.adaptToAccent&&a.accent===o.accent&&a.customAccent===o.customAccent?r({themeSyncPending:!1}):(r({themeSyncPending:!0}),i().scheduleThemePreferenceSync())}catch(e){nt.warn(`Failed to save theme preference to backend:`,e)}},scheduleThemePreferenceSync:()=>{B&&clearTimeout(B),B=setTimeout(()=>{B=null,i().syncThemePreference(A(i().theme))},rt)},setTheme:e=>{let t=A(e);r(e=>({theme:t,preferences:{...e.preferences,theme:t}})),L(t)},updateTheme:e=>{let t=A(e);i().setTheme(t),r({themeSyncPending:!0,themeSource:`user`}),i().scheduleThemePreferenceSync()},toggleTheme:()=>{let e=i().theme;i().updateTheme({...e,mode:Re(e.mode)})},sidebarOpen:!0,sidebarCompact:!1,setSidebarOpen:e=>r({sidebarOpen:e}),setSidebarCompact:e=>r({sidebarCompact:e}),toggleSidebar:()=>r(e=>({sidebarOpen:!e.sidebarOpen})),toggleSidebarCompact:()=>r(e=>({sidebarCompact:!e.sidebarCompact})),artifactPanelOpen:!1,artifactPanelArtifact:null,artifactPanelWidth:600,artifactPanelResizing:!1,openArtifactPanel:e=>r({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>r({artifactPanelOpen:!1,artifactPanelArtifact:null}),setArtifactPanelWidth:e=>r({artifactPanelWidth:e}),setArtifactPanelResizing:e=>r({artifactPanelResizing:e}),preferences:{theme:Le(),defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,hapticFeedbackEnabled:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{...R}},setPreferences:e=>{let{backgroundSettings:t,...n}=e,i=n.theme?A(n.theme):null;r(e=>({...i&&{theme:i,themeSource:`user`},preferences:{...e.preferences,...n,...i&&{theme:i}}})),i&&L(i)},loadPreferences:async()=>{let e=ct(),t=++ot,r=V,a=!!(J||Y);try{let{preferencesApi:o}=await n(async()=>{let{preferencesApi:e}=await import(`./api-CHEuZtwG.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!X(e))return;let s=await o.getPreferences();if(!X(e)||t!==ot)return;if(s.success&&s.data){let e={...s.data};if(!a&&r===V&&!J&&!Y){let t=z(e.backgroundSettings);U=t,H=++V,ut(t)}let t=i().themeSyncPending?A(i().theme):null;i().setPreferences(t?{...e,theme:t}:e),t&&i().syncThemePreference(t)}}catch(t){X(e)&&nt.warn(`Failed to load preferences from backend:`,t)}},isGenerating:!1,setIsGenerating:e=>r({isGenerating:e}),pinnedAdminShortcuts:[],toggleAdminShortcut:e=>r(t=>({pinnedAdminShortcuts:t.pinnedAdminShortcuts.includes(e)?t.pinnedAdminShortcuts.filter(t=>t!==e):[...t.pinnedAdminShortcuts,e]})),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>r({hasSeenSettingsNotification:!0}),isDemoMode:e(),demoConfig:t(),setDemoMode:e=>{r({isDemoMode:e,demoConfig:t()})},backgroundImage:null,updateBackgroundSettings:e=>{(`imageUrl`in e||e.enabled===!1)&&lt();let t=z({...i().preferences.backgroundSettings,...e}),n=ct(),r=++V;return ut(t),new Promise((e,i)=>{let a=J&&X(J.scope)?J.waiters:[];J&&a!==J.waiters&&Q(J,Z()),J={scope:n,revision:r,settings:t,waiters:[...a,{resolve:e,reject:i}]},pt()})},setBackgroundImage:e=>i().updateBackgroundSettings({imageUrl:e||``,enabled:!!e}),uploadBackgroundImage:e=>{lt();let t=ct(),n=W,r=new FileReader;return G=r,new Promise((a,o)=>{r.onabort=()=>o(Z()),r.onerror=()=>{G===r&&(G=null),o(r.error||Error(`Failed to read wallpaper`))},r.onload=async()=>{if(G===r&&(G=null),!X(t)||n!==W){o(Z());return}let e=r.result;if(typeof e!=`string`){o(Error(`Failed to read wallpaper`));return}try{if(await new Promise((t,n)=>{let r=new Image,i=!1,a=e=>{i||(i=!0,r.onload=null,r.onerror=null,K===o&&(K=null),r.src=``,e?n(e):t())},o=()=>a(Z());K=o,r.onload=()=>a(r.naturalWidth>0&&r.naturalHeight>0?void 0:Error(`Wallpaper file is not a valid image`)),r.onerror=()=>a(Error(`Wallpaper file is not a valid image`)),r.src=e}),!X(t)||n!==W||(await i().setBackgroundImage(e),!X(t)||i().preferences.backgroundSettings?.imageUrl!==e))throw Z();a()}catch(e){o(e)}},r.readAsDataURL(e)})},removeBackgroundImage:()=>i().updateBackgroundSettings({enabled:!1,imageUrl:``}),clearUserState:()=>{at+=1,ot+=1,V+=1,H=V,U={...R},dt();let e=He();B&&=(clearTimeout(B),null),r({theme:e,themeSyncPending:!1,themeSource:`default`,backgroundImage:null,preferences:{theme:e,defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{...R}}}),L(e)}}),{name:`libre-webui-app-state`,onRehydrateStorage:()=>e=>{e&&e.setTheme(A(e.theme))},partialize:e=>{let{backgroundSettings:t,...n}=e.preferences;return{theme:e.theme,themeSyncPending:e.themeSyncPending,themeSource:e.themeSource,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,artifactPanelWidth:e.artifactPanelWidth,pinnedAdminShortcuts:e.pinnedAdminShortcuts,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=$.getState();t(e)})();export{ve as a,A as c,de as d,h as f,_e as i,et as l,z as n,Re as o,ae as p,w as r,We as s,$ as t,C as u};
@@ -0,0 +1 @@
1
+ function e(e,t=`0.34.1`){return t?.trim()||e?.trim()||``}export{e as t};