libre-webui 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/backend/dist/db.d.ts.map +1 -1
  2. package/backend/dist/db.js +150 -6
  3. package/backend/dist/db.js.map +1 -1
  4. package/backend/dist/index.d.ts.map +1 -1
  5. package/backend/dist/index.js +15 -10
  6. package/backend/dist/index.js.map +1 -1
  7. package/backend/dist/middleware/auth.d.ts.map +1 -1
  8. package/backend/dist/middleware/auth.js +35 -3
  9. package/backend/dist/middleware/auth.js.map +1 -1
  10. package/backend/dist/models/userModel.d.ts +23 -0
  11. package/backend/dist/models/userModel.d.ts.map +1 -1
  12. package/backend/dist/models/userModel.js +89 -24
  13. package/backend/dist/models/userModel.js.map +1 -1
  14. package/backend/dist/routes/agentCli.d.ts.map +1 -1
  15. package/backend/dist/routes/agentCli.js +2 -0
  16. package/backend/dist/routes/agentCli.js.map +1 -1
  17. package/backend/dist/routes/auth.d.ts.map +1 -1
  18. package/backend/dist/routes/auth.js +46 -33
  19. package/backend/dist/routes/auth.js.map +1 -1
  20. package/backend/dist/routes/chat.d.ts.map +1 -1
  21. package/backend/dist/routes/chat.js +3 -1
  22. package/backend/dist/routes/chat.js.map +1 -1
  23. package/backend/dist/routes/documents.d.ts.map +1 -1
  24. package/backend/dist/routes/documents.js +49 -41
  25. package/backend/dist/routes/documents.js.map +1 -1
  26. package/backend/dist/routes/embeddings.js +2 -2
  27. package/backend/dist/routes/embeddings.js.map +1 -1
  28. package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
  29. package/backend/dist/routes/huggingfaceHub.js +3 -1
  30. package/backend/dist/routes/huggingfaceHub.js.map +1 -1
  31. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  32. package/backend/dist/routes/imageGen.js +2 -0
  33. package/backend/dist/routes/imageGen.js.map +1 -1
  34. package/backend/dist/routes/media.d.ts +3 -0
  35. package/backend/dist/routes/media.d.ts.map +1 -0
  36. package/backend/dist/routes/media.js +429 -0
  37. package/backend/dist/routes/media.js.map +1 -0
  38. package/backend/dist/routes/ollama.d.ts.map +1 -1
  39. package/backend/dist/routes/ollama.js +15 -83
  40. package/backend/dist/routes/ollama.js.map +1 -1
  41. package/backend/dist/routes/personas.d.ts.map +1 -1
  42. package/backend/dist/routes/personas.js +2 -0
  43. package/backend/dist/routes/personas.js.map +1 -1
  44. package/backend/dist/routes/plugins.d.ts.map +1 -1
  45. package/backend/dist/routes/plugins.js +28 -0
  46. package/backend/dist/routes/plugins.js.map +1 -1
  47. package/backend/dist/routes/systemDiagnostics.d.ts +3 -0
  48. package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -0
  49. package/backend/dist/routes/systemDiagnostics.js +49 -0
  50. package/backend/dist/routes/systemDiagnostics.js.map +1 -0
  51. package/backend/dist/routes/tts.d.ts.map +1 -1
  52. package/backend/dist/routes/tts.js +4 -0
  53. package/backend/dist/routes/tts.js.map +1 -1
  54. package/backend/dist/routes/users.d.ts.map +1 -1
  55. package/backend/dist/routes/users.js +58 -0
  56. package/backend/dist/routes/users.js.map +1 -1
  57. package/backend/dist/routes/work.d.ts.map +1 -1
  58. package/backend/dist/routes/work.js +84 -0
  59. package/backend/dist/routes/work.js.map +1 -1
  60. package/backend/dist/services/authService.d.ts +15 -9
  61. package/backend/dist/services/authService.d.ts.map +1 -1
  62. package/backend/dist/services/authService.js +34 -29
  63. package/backend/dist/services/authService.js.map +1 -1
  64. package/backend/dist/services/chatRequestService.d.ts +8 -2
  65. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  66. package/backend/dist/services/chatRequestService.js +30 -3
  67. package/backend/dist/services/chatRequestService.js.map +1 -1
  68. package/backend/dist/services/documentService.d.ts +11 -10
  69. package/backend/dist/services/documentService.d.ts.map +1 -1
  70. package/backend/dist/services/documentService.js +62 -54
  71. package/backend/dist/services/documentService.js.map +1 -1
  72. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  73. package/backend/dist/services/encryptionService.js +18 -8
  74. package/backend/dist/services/encryptionService.js.map +1 -1
  75. package/backend/dist/services/galleryService.d.ts +23 -1
  76. package/backend/dist/services/galleryService.d.ts.map +1 -1
  77. package/backend/dist/services/galleryService.js +125 -8
  78. package/backend/dist/services/galleryService.js.map +1 -1
  79. package/backend/dist/services/mediaGenerationJobService.d.ts +25 -0
  80. package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -0
  81. package/backend/dist/services/mediaGenerationJobService.js +82 -0
  82. package/backend/dist/services/mediaGenerationJobService.js.map +1 -0
  83. package/backend/dist/services/pluginAudioGenerationService.d.ts +34 -0
  84. package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -0
  85. package/backend/dist/services/pluginAudioGenerationService.js +211 -0
  86. package/backend/dist/services/pluginAudioGenerationService.js.map +1 -0
  87. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
  88. package/backend/dist/services/pluginCapabilityRegistryService.js +6 -0
  89. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
  90. package/backend/dist/services/pluginEmbeddingService.d.ts +2 -0
  91. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  92. package/backend/dist/services/pluginEmbeddingService.js +66 -35
  93. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  94. package/backend/dist/services/pluginImageGenerationService.d.ts +2 -0
  95. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  96. package/backend/dist/services/pluginImageGenerationService.js +63 -38
  97. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  98. package/backend/dist/services/pluginService.d.ts +38 -1
  99. package/backend/dist/services/pluginService.d.ts.map +1 -1
  100. package/backend/dist/services/pluginService.js +390 -69
  101. package/backend/dist/services/pluginService.js.map +1 -1
  102. package/backend/dist/services/pluginTTSService.d.ts +2 -0
  103. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  104. package/backend/dist/services/pluginTTSService.js +27 -2
  105. package/backend/dist/services/pluginTTSService.js.map +1 -1
  106. package/backend/dist/services/pluginUsageService.d.ts +82 -0
  107. package/backend/dist/services/pluginUsageService.d.ts.map +1 -0
  108. package/backend/dist/services/pluginUsageService.js +238 -0
  109. package/backend/dist/services/pluginUsageService.js.map +1 -0
  110. package/backend/dist/services/pluginVideoGenerationService.d.ts +45 -0
  111. package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -0
  112. package/backend/dist/services/pluginVideoGenerationService.js +198 -0
  113. package/backend/dist/services/pluginVideoGenerationService.js.map +1 -0
  114. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  115. package/backend/dist/services/preferencesService.js +15 -1
  116. package/backend/dist/services/preferencesService.js.map +1 -1
  117. package/backend/dist/services/registrationPolicy.d.ts +5 -0
  118. package/backend/dist/services/registrationPolicy.d.ts.map +1 -0
  119. package/backend/dist/services/registrationPolicy.js +21 -0
  120. package/backend/dist/services/registrationPolicy.js.map +1 -0
  121. package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
  122. package/backend/dist/services/simpleGitHubOAuth.js +8 -12
  123. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  124. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  125. package/backend/dist/services/simpleHuggingFaceOAuth.js +7 -12
  126. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  127. package/backend/dist/services/systemDiagnosticsService.d.ts +117 -0
  128. package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -0
  129. package/backend/dist/services/systemDiagnosticsService.js +326 -0
  130. package/backend/dist/services/systemDiagnosticsService.js.map +1 -0
  131. package/backend/dist/services/turnstileService.d.ts +2 -1
  132. package/backend/dist/services/turnstileService.d.ts.map +1 -1
  133. package/backend/dist/services/turnstileService.js +28 -2
  134. package/backend/dist/services/turnstileService.js.map +1 -1
  135. package/backend/dist/services/workModelProviderService.d.ts +3 -0
  136. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  137. package/backend/dist/services/workModelProviderService.js +37 -4
  138. package/backend/dist/services/workModelProviderService.js.map +1 -1
  139. package/backend/dist/services/workPreviewProxyService.d.ts +27 -0
  140. package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -0
  141. package/backend/dist/services/workPreviewProxyService.js +514 -0
  142. package/backend/dist/services/workPreviewProxyService.js.map +1 -0
  143. package/backend/dist/services/workRuntimeService.d.ts +22 -1
  144. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  145. package/backend/dist/services/workRuntimeService.js +287 -8
  146. package/backend/dist/services/workRuntimeService.js.map +1 -1
  147. package/backend/dist/storage.d.ts.map +1 -1
  148. package/backend/dist/storage.js +3 -3
  149. package/backend/dist/storage.js.map +1 -1
  150. package/backend/dist/types/index.d.ts +77 -1
  151. package/backend/dist/types/index.d.ts.map +1 -1
  152. package/backend/dist/types/index.js.map +1 -1
  153. package/backend/dist/types/work.d.ts +31 -0
  154. package/backend/dist/types/work.d.ts.map +1 -1
  155. package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
  156. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  157. package/backend/dist/utils/chatDocumentContext.js +4 -4
  158. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  159. package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
  160. package/backend/dist/utils/pluginValidation.d.ts +3 -2
  161. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  162. package/backend/dist/utils/pluginValidation.js +30 -2
  163. package/backend/dist/utils/pluginValidation.js.map +1 -1
  164. package/backend/dist/utils/workGit.d.ts +14 -0
  165. package/backend/dist/utils/workGit.d.ts.map +1 -0
  166. package/backend/dist/utils/workGit.js +207 -0
  167. package/backend/dist/utils/workGit.js.map +1 -0
  168. package/backend/dist/websocketServer.d.ts +1 -0
  169. package/backend/dist/websocketServer.d.ts.map +1 -1
  170. package/backend/dist/websocketServer.js +108 -24
  171. package/backend/dist/websocketServer.js.map +1 -1
  172. package/backend/dist/workTerminalServer.d.ts.map +1 -1
  173. package/backend/dist/workTerminalServer.js +3 -1
  174. package/backend/dist/workTerminalServer.js.map +1 -1
  175. package/backend/package.json +1 -1
  176. package/frontend/dist/assets/index-ChhWhug2.css +1 -0
  177. package/frontend/dist/assets/index-CmZntyR1.js +3 -0
  178. package/frontend/dist/index.html +26 -6
  179. package/frontend/dist/js/ArtifactContainer-CBAbdoIJ.js +1 -0
  180. package/frontend/dist/js/{ArtifactDemoPage-B4qsvUnF.js → ArtifactDemoPage-BWN0MWCx.js} +1 -1
  181. package/frontend/dist/js/ArtifactSlideOutPanel-D-AvYkfk.js +1 -0
  182. package/frontend/dist/js/ChatPage-w2FkF_fE.js +16 -0
  183. package/frontend/dist/js/FirstTimeSetup-CzBxl7UH.js +1 -0
  184. package/frontend/dist/js/GalleryPage-Cv8pniRW.js +1 -0
  185. package/frontend/dist/js/HomePage-Vyj4ndU4.js +1 -0
  186. package/frontend/dist/js/LibreClawPage-CYhLgQB-.js +1 -0
  187. package/frontend/dist/js/{ModelManagerModals-DMoEav1l.js → ModelManagerModals-C2rwHd01.js} +1 -1
  188. package/frontend/dist/js/ModelSelector-D7kDjZV9.js +1 -0
  189. package/frontend/dist/js/ModelsPage-BnUddkrs.js +2 -0
  190. package/frontend/dist/js/PersonasPage-BL5XlrEm.js +13 -0
  191. package/frontend/dist/js/PluginUsagePage-BXqweCCs.js +1 -0
  192. package/frontend/dist/js/{RichMessageContent-BJ49VN9j.js → RichMessageContent-nAEaPTpH.js} +2 -2
  193. package/frontend/dist/js/SettingsModal-DZYCI5-y.js +1 -0
  194. package/frontend/dist/js/SystemPage-jdHYfn9A.js +1 -0
  195. package/frontend/dist/js/UserManagementPage-BpOnt6os.js +1 -0
  196. package/frontend/dist/js/WorkPage-DAp1T1dl.js +5 -0
  197. package/frontend/dist/js/api-BCqWXjZI.js +19 -0
  198. package/frontend/dist/js/appStore-CDM6V5ny.js +2 -0
  199. package/frontend/dist/js/ar-DS8gs8WK.js +2 -0
  200. package/frontend/dist/js/{authStore-mOYH_AXI.js → authStore-Bl5ofD_h.js} +3 -3
  201. package/frontend/dist/js/bn-CrMPJwTR.js +2 -0
  202. package/frontend/dist/js/cs-BL116Ezu.js +2 -0
  203. package/frontend/dist/js/da-TDNaKzqy.js +2 -0
  204. package/frontend/dist/js/de-DkIqdAB5.js +2 -0
  205. package/frontend/dist/js/es-CHRXt6Fd.js +2 -0
  206. package/frontend/dist/js/{estree-0vwU39qX.js → estree-BFya-bSu.js} +1 -1
  207. package/frontend/dist/js/fr-8715yUKq.js +2 -0
  208. package/frontend/dist/js/hi-C2O08SBU.js +2 -0
  209. package/frontend/dist/js/{html-CApr2Bvi.js → html-DJot0Wwf.js} +1 -1
  210. package/frontend/dist/js/id-Dq7UXUEV.js +2 -0
  211. package/frontend/dist/js/is-B3dbbhSl.js +2 -0
  212. package/frontend/dist/js/it-CLSuu2K7.js +2 -0
  213. package/frontend/dist/js/ja-CthrqyCR.js +2 -0
  214. package/frontend/dist/js/ko-BJvFDJ82.js +2 -0
  215. package/frontend/dist/js/{markdown-C78Qc6xu.js → markdown-CXwWsPYG.js} +1 -1
  216. package/frontend/dist/js/ms-QV0202Mj.js +2 -0
  217. package/frontend/dist/js/nl-Dob1m1pV.js +2 -0
  218. package/frontend/dist/js/pl-urfOKnYI.js +2 -0
  219. package/frontend/dist/js/pt-D52Xkpi0.js +2 -0
  220. package/frontend/dist/js/ru-CwnW9Xe2.js +2 -0
  221. package/frontend/dist/js/{standalone-DmLfI4Qj.js → standalone-C0NjJpWr.js} +1 -1
  222. package/frontend/dist/js/sv-BNclj-Fo.js +2 -0
  223. package/frontend/dist/js/th-BlQ4PL57.js +2 -0
  224. package/frontend/dist/js/tr-B80aZ1px.js +2 -0
  225. package/frontend/dist/js/{typescript-Bcq62agC.js → typescript-d0TUM2-0.js} +1 -1
  226. package/frontend/dist/js/ui-vendor-ChfdHf5M.js +177 -0
  227. package/frontend/dist/js/uk-DZuuaI56.js +2 -0
  228. package/frontend/dist/js/vi-Bg42fPfF.js +2 -0
  229. package/frontend/dist/js/zh-BSt87zs6.js +2 -0
  230. package/package.json +3 -3
  231. package/plugins/openrouter.json +89 -0
  232. package/backend/dist/services/systemSettingsService.d.ts +0 -12
  233. package/backend/dist/services/systemSettingsService.d.ts.map +0 -1
  234. package/backend/dist/services/systemSettingsService.js +0 -70
  235. package/backend/dist/services/systemSettingsService.js.map +0 -1
  236. package/frontend/dist/assets/index-BqI0kezz.css +0 -1
  237. package/frontend/dist/assets/index-CRC6g6bL.js +0 -3
  238. package/frontend/dist/js/ArtifactContainer-Cdy-973y.js +0 -1
  239. package/frontend/dist/js/ArtifactSlideOutPanel-CmKgQ4eD.js +0 -1
  240. package/frontend/dist/js/ChatPage-CYT69oBR.js +0 -16
  241. package/frontend/dist/js/FirstTimeSetup-C8LdLP5J.js +0 -1
  242. package/frontend/dist/js/GalleryPage-Bm89pnS8.js +0 -1
  243. package/frontend/dist/js/HomePage-CeCYnMUG.js +0 -1
  244. package/frontend/dist/js/LibreClawPage-DGMEV6dm.js +0 -1
  245. package/frontend/dist/js/ModelSelector-DXPdGdQ_.js +0 -1
  246. package/frontend/dist/js/ModelsPage-D-FIy2x-.js +0 -2
  247. package/frontend/dist/js/PersonasPage-CIrEVFo5.js +0 -13
  248. package/frontend/dist/js/SettingsModal-CxtOXPY7.js +0 -1
  249. package/frontend/dist/js/UserManagementPage-BfyYGGFQ.js +0 -1
  250. package/frontend/dist/js/WorkPage-C7bW6Hxx.js +0 -4
  251. package/frontend/dist/js/api-DCD41-l9.js +0 -19
  252. package/frontend/dist/js/appStore-Bw-8Exsx.js +0 -2
  253. package/frontend/dist/js/ar-BAHlIvy0.js +0 -2
  254. package/frontend/dist/js/bn-BxquDVbd.js +0 -2
  255. package/frontend/dist/js/cs-C4DoKzRm.js +0 -2
  256. package/frontend/dist/js/da-CFslpGTw.js +0 -2
  257. package/frontend/dist/js/de-ChudoRh2.js +0 -2
  258. package/frontend/dist/js/es-B36fefE-.js +0 -2
  259. package/frontend/dist/js/fr-BSVeTM5W.js +0 -2
  260. package/frontend/dist/js/hi-BGoFbl5V.js +0 -2
  261. package/frontend/dist/js/id-BfYs2p_j.js +0 -2
  262. package/frontend/dist/js/is-DZ1MS-5A.js +0 -2
  263. package/frontend/dist/js/it-CXtrPCG1.js +0 -2
  264. package/frontend/dist/js/ja-FPJ_NK_y.js +0 -2
  265. package/frontend/dist/js/ko-DVwD4ZZF.js +0 -2
  266. package/frontend/dist/js/ms-PKPP0RX3.js +0 -2
  267. package/frontend/dist/js/nl-DWM5HJZ8.js +0 -2
  268. package/frontend/dist/js/pl-B9va8Tuf.js +0 -2
  269. package/frontend/dist/js/pt-P0IQi-Zr.js +0 -2
  270. package/frontend/dist/js/ru-Ca2bxYnc.js +0 -2
  271. package/frontend/dist/js/sv-DI4RDwyZ.js +0 -2
  272. package/frontend/dist/js/th-DN0bDS9d.js +0 -2
  273. package/frontend/dist/js/tr-ChqMv5Q4.js +0 -2
  274. package/frontend/dist/js/ui-vendor-DohPFHDW.js +0 -177
  275. package/frontend/dist/js/uk-Cr51h_XQ.js +0 -2
  276. package/frontend/dist/js/useBaseQuery-BAOlhjar.js +0 -1
  277. package/frontend/dist/js/useQuery-CcRqxveh.js +0 -1
  278. package/frontend/dist/js/vi-D4OhoVMH.js +0 -2
  279. package/frontend/dist/js/zh-Bvau7hlR.js +0 -2
@@ -1,4 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/babel-BnLuavNv.js","js/router-vendor-BjDI9mRe.js","js/rolldown-runtime-QTnfLwEv.js","js/markdown-core-GI9BPwrB.js","js/estree-0vwU39qX.js","assets/index-CRC6g6bL.js","js/react-vendor-DyG_ODzn.js","js/useTranslation-Cs6iTP4m.js","js/ui-vendor-DohPFHDW.js","js/utils-vendor-Cbaj0BC5.js","js/demoMode-BhEpMVh5.js","js/logger-DbNs3-DK.js","js/api-DCD41-l9.js","js/utils-DmZD5uA3.js","js/authStore-mOYH_AXI.js","js/appStore-Bw-8Exsx.js","js/Button-CRwzOaDZ.js","assets/index-BqI0kezz.css","js/typescript-Bcq62agC.js","js/postcss-DSDkwgFE.js","js/html-CApr2Bvi.js","js/markdown-C78Qc6xu.js","js/yaml-mLy9chOK.js","js/standalone-DmLfI4Qj.js","js/OptimizedSyntaxHighlighter-Ci9sRc78.js","js/syntax-highlight-pM1xnNpY.js","js/xterm-DKl1QLiw.js","js/addon-fit-Cj0_dfHF.js","assets/xterm-CmMoOwwu.css"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{d as t,f as n}from"./markdown-core-GI9BPwrB.js";import{d as r,f as i,i as a,l as o,u as s}from"./router-vendor-BjDI9mRe.js";import{t as c}from"./useTranslation-Cs6iTP4m.js";import{At as l,Bt as u,Ct as d,E as f,F as p,Ft as m,Gt as h,Ht as g,L as _,Lt as v,Pt as y,Rt as b,S as x,Tt as S,X as C,Yt as w,Zt as T,at as ee,d as E,en as D,et as O,g as k,it as te,k as A,kt as ne,n as j,ot as re,pt as ie,s as ae,st as oe,w as se,wt as M}from"./ui-vendor-DohPFHDW.js";import{o as ce,s as le}from"./api-DCD41-l9.js";import{t as N}from"./utils-DmZD5uA3.js";import{a as ue,i as de,l as P,n as fe,o as pe,s as me,u as F}from"./authStore-mOYH_AXI.js";import{t as he}from"./appStore-Bw-8Exsx.js";import{t as I}from"./Button-CRwzOaDZ.js";import{A as ge,g as _e,i as ve}from"../assets/index-CRC6g6bL.js";import{t as ye}from"./RichMessageContent-BJ49VN9j.js";import{t as be}from"./ModelSelector-DXPdGdQ_.js";import{n as xe,t as Se}from"./work-DVgm81bJ.js";var L=e(n(),1),R=t(),Ce=e=>xe({model:e.name,providerType:e.isPlugin?`plugin`:`ollama`,providerId:e.isPlugin?e.pluginId:void 0}),we=e=>{let t=e.name.split(`/`).filter(Boolean),n=t[t.length-1]||e.name;return t.length>1?n.replace(/[-_]+/g,` `):n},Te=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 Ee({models:e,selectorModels:t,modelKey:n,running:r,loading:i,variant:a=`task`,disabled:o=!1,remoteDisclosureDismissed:s,remoteDisclosureSaving:l,onModelChange:u,onDismissRemoteDisclosure:d,onModelsRefresh:f,onSubmit:p,onCancel:m}){let{t:g}=c(),[_,v]=(0,L.useState)(``),y=(0,L.useRef)(null),b=(0,L.useRef)(null),S=(0,L.useRef)(null),C=e.find(e=>e.key===n),w=C?.remote===!0,ee=a===`landing`,E=(0,L.useMemo)(()=>{let n=new Set(t.map(Ce)),r=e.filter(e=>!n.has(e.key)).map(Te);return[...t,...r]},[e,t]);(0,L.useEffect)(()=>{let e=y.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,160)}px`)},[_]);let D=async()=>{await d()&&([b.current,S.current].find(e=>e&&e.offsetParent!==null)||b.current)?.focus()},O=t=>{let n=e.find(e=>e.key===t)||e.find(e=>e.providerType===`ollama`&&e.model===t);n&&u(n.key)},te=async()=>{let e=_.trim();!e||i||r||o||!C||await p(e)&&v(``)};return(0,R.jsxs)(`div`,{"data-testid":ee?`work-landing-composer`:`work-task-composer`,"data-variant":a,className:N(`relative shrink-0`,ee?`mt-10 w-full`:`border-t border-line bg-surface/95 px-3 py-3 backdrop-blur md:px-5`),children:[w&&!s&&(0,R.jsx)(`div`,{className:N(`absolute inset-x-3 z-30 mx-auto max-w-3xl md:inset-x-5`,`bottom-full mb-3`),children:(0,R.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,R.jsx)(`button`,{type:`button`,onClick:()=>void D(),disabled:l,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":g(`work.composer.remoteDismissLabel`,{defaultValue:`Dismiss remote provider notice`}),children:(0,R.jsx)(j,{className:`h-4 w-4`})}),(0,R.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,R.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,R.jsx)(T,{"data-testid":`work-provider-disclosure-accent`,className:`h-4 w-4 text-warning-500`,"aria-hidden":`true`})}),(0,R.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,R.jsx)(`p`,{id:`work-provider-disclosure-title`,className:`text-sm font-semibold text-ink`,children:g(`work.composer.remoteTitle`,{defaultValue:`Remote provider`})}),(0,R.jsx)(`p`,{className:`mt-0.5 text-xs leading-relaxed text-ink-muted`,children:g(`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,R.jsx)(`div`,{className:`mt-2.5 flex justify-end`,children:(0,R.jsx)(I,{"data-testid":`work-provider-disclosure-dismiss`,type:`button`,variant:`ghost`,size:`sm`,loading:l,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 D(),children:g(`work.composer.remoteDismiss`,{defaultValue:`Dismiss`})})})]})]})]})}),(0,R.jsx)(`form`,{className:`mx-auto w-full max-w-3xl`,onSubmit:e=>{e.preventDefault(),te()},children:(0,R.jsxs)(`div`,{"data-testid":`work-composer-surface`,className:N(`flex items-end gap-2 rounded-[1.6rem] border p-2.5 transition-[border-color,box-shadow,background-color] duration-200 sm:p-3`,`border-black/[0.08] bg-surface/90 dark:border-white/[0.09] dark:bg-dark-200/90`,`shadow-[0_1px_2px_rgba(0,0,0,0.03),0_18px_50px_rgba(15,23,42,0.08)] backdrop-blur-xl`,`focus-within:border-primary-500/35 focus-within:shadow-[0_1px_2px_rgba(0,0,0,0.03),0_22px_65px_rgba(15,23,42,0.12)]`),children:[(0,R.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,R.jsx)(`textarea`,{ref:y,"data-testid":`work-composer-input`,dir:`auto`,value:_,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),te())},disabled:o||r,rows:1,className:`m-0 block max-h-[160px] min-h-10 w-full resize-none overflow-y-auto rounded-none border-0 bg-transparent p-2 text-base 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`,placeholder:g(`work.composer.placeholder`,{defaultValue:`Describe what you want to build or change…`})})}),(0,R.jsx)(`div`,{className:`hidden shrink-0 sm:block`,children:(0,R.jsx)(be,{models:E,selectedModel:n,onModelChange:e=>O(e.target.value),onModelsRefresh:()=>void f(),getModelValue:Ce,getModelLabel:we,getModelTitle:e=>e.name,triggerRef:b,triggerTestId:`work-model-selector-trigger`,selectTestId:`work-model-select`,ariaLabel:g(`work.composer.model`,{defaultValue:`Work model`}),disabled:r||e.length===0,className:`min-w-[150px] max-w-[230px]`,compact:!0})}),r?(0,R.jsx)(I,{"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 sm:h-10 sm:w-10`,title:g(`work.composer.cancel`,{defaultValue:`Stop`}),"aria-label":g(`work.composer.cancel`,{defaultValue:`Stop`}),onClick:()=>void m(),children:i?(0,R.jsx)(h,{className:`h-4 w-4 animate-spin`}):(0,R.jsx)(k,{className:`h-4 w-4 fill-current`})}):(0,R.jsx)(I,{"data-testid":`work-submit-button`,type:`submit`,variant:`ghost`,size:`sm`,disabled:i||o||!_.trim()||!C,className:N(`flex h-9 w-9 shrink-0 touch-manipulation items-center justify-center rounded-full p-0 transition-colors duration-150 sm:h-10 sm:w-10`,`bg-gray-950 text-white hover:bg-gray-800 dark:bg-white dark:text-gray-950 dark:hover:bg-gray-100`,`disabled:bg-gray-100 disabled:text-gray-400 disabled:hover:bg-gray-100 dark:disabled:bg-dark-300 dark:disabled:text-dark-500 dark:disabled:hover:bg-dark-300`,_.trim()&&C&&!o&&`shadow-sm`),title:g(`work.composer.send`,{defaultValue:`Run`}),"aria-label":g(`work.composer.send`,{defaultValue:`Run`}),children:i?(0,R.jsx)(h,{className:`h-4 w-4 animate-spin`}):(0,R.jsx)(x,{className:`h-4 w-4`})})]})}),(0,R.jsx)(`div`,{className:`mx-auto mt-3 w-full max-w-3xl sm:hidden`,children:(0,R.jsx)(be,{models:E,selectedModel:n,onModelChange:e=>O(e.target.value),onModelsRefresh:()=>void f(),getModelValue:Ce,getModelLabel:we,getModelTitle:e=>e.name,triggerRef:S,triggerTestId:`work-model-selector-trigger-mobile`,selectTestId:`work-model-select-mobile`,ariaLabel:g(`work.composer.model`,{defaultValue:`Work model`}),disabled:r||e.length===0,className:`w-full`,compact:!0})})]})}var z=e=>{if(e==null||e===``)return null;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}},De=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`},B=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 V({run:e}){let[t,n]=(0,L.useState)();if((0,L.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,R.jsx)(`span`,{dir:`ltr`,className:`tabular-nums text-ink-subtle`,"aria-hidden":`true`,children:De(r-e.startedAt)}):null}function H({tool:e,expandedByDefault:t}){let{t:n}=c(),[r]=(0,L.useState)(e.status),[i,a]=(0,L.useState)(null),o=(0,L.useMemo)(()=>z(e.arguments),[e.arguments]),s=e.output||null,l=!!(o||s),u=e.status===`error`,d=e.status===`running`,f=(0,L.useId)(),p=u?n(`work.activity.kinds.error`,{defaultValue:`Error`}):d?n(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}):n(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),m=i??(e.status===r?t:e.status===`error`);return(0,R.jsxs)(`div`,{"data-testid":`work-live-tool`,"data-tool-id":e.id,className:N(`overflow-hidden rounded-xl border bg-surface-raised transition-colors`,u?`border-error-500/30`:`border-line`),children:[(0,R.jsxs)(`button`,{type:`button`,disabled:!l,onClick:()=>{a(!m)},"aria-expanded":l?m:void 0,"aria-controls":l?f:void 0,"aria-label":`${p}: ${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-[#ff7b52] disabled:cursor-default disabled:hover:bg-transparent`,children:[(0,R.jsx)(`span`,{className:`flex h-5 w-5 shrink-0 items-center justify-center`,children:u?(0,R.jsx)(T,{className:`h-3.5 w-3.5 text-error-500`}):d?(0,R.jsx)(h,{className:`h-3.5 w-3.5 animate-spin text-[rgb(48,121,255)] motion-reduce:animate-none`}):(0,R.jsx)(S,{className:`h-3.5 w-3.5 text-[rgb(76,212,117)]`})}),(0,R.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,R.jsx)(`span`,{className:`shrink-0 text-[10px] tabular-nums text-ink-subtle`,children:De(e.durationMs)}),l&&(0,R.jsx)(M,{"aria-hidden":`true`,className:N(`h-3.5 w-3.5 shrink-0 text-ink-subtle transition-transform`,m&&`rotate-180`)})]}),l&&m&&(0,R.jsxs)(`div`,{id:f,className:`border-t border-line bg-surface-subtle/50`,children:[o&&(0,R.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,R.jsx)(`pre`,{dir:`ltr`,className:N(`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`,u?`text-error-600`:`text-ink-muted`),children:s})]})]})}var Oe=e=>{let t=e.split(`
3
- `);for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n)return n}return``};function ke({content:e,streaming:t}){let{t:n}=c(),[r,i]=(0,L.useState)(!1),a=t&&!r?Oe(e):``;return(0,R.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,R.jsxs)(`summary`,{className:`flex cursor-pointer list-none flex-col gap-1 px-3 py-2 marker:hidden [&::-webkit-details-marker]:hidden`,children:[(0,R.jsxs)(`span`,{className:`flex items-center justify-between gap-3 text-xs font-medium text-ink-muted`,children:[(0,R.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,R.jsx)(ne,{className:N(`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`,t&&`animate-pulse-subtle motion-reduce:animate-none`)}),t?(0,R.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,R.jsx)(`span`,{className:`truncate`,children:n(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})})]}),(0,R.jsx)(M,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),a&&(0,R.jsx)(`span`,{dir:`auto`,"data-testid":`work-live-reasoning-preview`,className:`block truncate text-[11px] leading-relaxed text-ink-subtle`,children:a})]}),(0,R.jsx)(`div`,{className:`border-t border-line px-3 py-2.5`,children:(0,R.jsx)(_e,{content:e,isStreaming:t,className:`text-xs text-ink-muted`})})]})}var Ae=(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`}),je=(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 Me({run:e,variant:t=`conversation`}){let{t:n}=c(),r=[...e.tools].reverse().find(e=>e.status===`running`),i=je(e.connection,n)||Ae(e.phase,n,r),a=!e.terminal,o=e.usage?.outputTokens,s=e.reasoning+e.response,l=o!==void 0&&o>0?o:s?B(s):o,d=(o===void 0||o===0)&&!!s&&l!==void 0,f=e.usage?.tokensPerSecond;return(0,R.jsxs)(`section`,{"data-testid":`work-live-run`,"data-run-id":e.runId,"data-phase":e.phase,"aria-busy":a||void 0,className:N(`min-w-0`,t===`activity`&&`rounded-2xl border border-line bg-surface p-3 shadow-subtle`),children:[(0,R.jsxs)(`div`,{className:`mb-3 flex min-h-6 items-center gap-2 text-xs`,children:[(0,R.jsx)(`span`,{"aria-hidden":`true`,className:N(`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,R.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,R.jsx)(`span`,{dir:`ltr`,className:`shrink-0 tabular-nums text-ink-subtle`,children:e.roundLimit===void 0?`#${e.round}`:`${e.round}/${e.roundLimit}`}),(0,R.jsx)(V,{run:e})]}),t===`conversation`&&(0,R.jsx)(`span`,{className:`sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:i}),e.skills.length>0&&(0,R.jsx)(`div`,{className:`mb-3 flex flex-wrap gap-1.5`,children:(0,R.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,R.jsx)(g,{className:`h-3 w-3 text-[#ff7b52]`,"aria-hidden":`true`}),(0,R.jsx)(`span`,{dir:`auto`,children:n(`work.live.skillsLoaded`,{count:e.skills.length,defaultValue:`Workspace skills · {{count}}`})})]})}),t===`conversation`?e.timeline.length>0&&(0,R.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,R.jsx)(ke,{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,R.jsx)(H,{tool:n,expandedByDefault:n.status===`error`},n.id):null}return(0,R.jsx)(_e,{content:t.text,isStreaming:a&&r,className:`text-ink`},`segment-${n}`)})}):e.tools.length>0&&(0,R.jsx)(`div`,{"data-testid":`work-live-tools`,className:`space-y-1.5`,children:e.tools.map(e=>(0,R.jsx)(H,{tool:e,expandedByDefault:e.status===`running`||e.status===`error`},e.id))}),e.error&&(0,R.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,R.jsx)(T,{className:`mt-0.5 h-3.5 w-3.5 shrink-0`}),(0,R.jsx)(`span`,{children:e.error})]}),(l!==void 0||f!==void 0)&&(0,R.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:[l!==void 0&&(0,R.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.generatedTokens`,{defaultValue:`Generated tokens:`}),` `,(0,R.jsxs)(`bdi`,{dir:`ltr`,children:[d&&`≈`,l.toLocaleString()]})]}),f!==void 0&&(0,R.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.speed`,{defaultValue:`Speed:`}),` `,(0,R.jsxs)(`bdi`,{dir:`ltr`,children:[f.toFixed(1),` t/s`]})]})]}),a&&!e.reasoning&&!e.response&&e.tools.length===0&&(0,R.jsxs)(`div`,{"aria-hidden":`true`,className:`flex h-5 items-center gap-1 text-[rgb(48,121,255)]`,children:[(0,R.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current motion-reduce:animate-none`}),(0,R.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current [animation-delay:160ms] motion-reduce:animate-none`}),(0,R.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,R.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-ink-muted`,children:[(0,R.jsx)(u,{className:`h-3.5 w-3.5`}),n(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]})]})}function Ne({role:e,user:t,size:n=`message`}){let[r,i]=(0,L.useState)(null);if(e===`assistant`)return(0,R.jsx)(`div`,{role:`img`,"aria-label":`Libre WebUI`,"data-testid":`work-assistant-avatar`,className:N(`flex shrink-0 items-center justify-center rounded-full border border-line bg-surface-raised shadow-subtle`,n===`empty`?`mx-auto mb-4 h-12 px-3`:`mt-0.5 h-8 px-2`),children:(0,R.jsx)(`span`,{"aria-hidden":`true`,className:N(`libre-brand text-ink`,n===`empty`?`text-sm`:`text-[11px]`),children:`Libre`})});let a=t?.username||`User`,o=t?.avatar?.trim()||``,s=!!o&&o!==r;return(0,R.jsx)(`div`,{role:s?void 0:`img`,"aria-label":s?void 0:a,"data-testid":`work-user-avatar`,className:N(`mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full`,s?`border border-line bg-surface-raised`:`bg-ink text-ink-inverse`),title:a,children:s?(0,R.jsx)(`img`,{src:o,alt:a,className:`h-full w-full object-cover`,onError:()=>i(o)}):t?(0,R.jsx)(`span`,{"aria-hidden":`true`,className:`text-xs font-medium uppercase leading-none`,children:t.username.charAt(0)}):(0,R.jsx)(ae,{"aria-hidden":`true`,className:`h-4 w-4`})})}var U=(e,t)=>{let n=e.metadata,r=n?.name??n?.toolName??n?.tool??n?.command;return typeof r==`string`&&r?r:t},W=e=>{let t=e.metadata?.toolCallId;return typeof t==`string`&&t?t:null},Pe=(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?U(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}},Fe=(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=W(a);if(a.kind===`tool_call`&&e){let o=i(Pe(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]=Pe(i.call,a,t),r.delete(e);continue}}}i(Pe(a.kind===`tool_call`?a:void 0,a.kind===`tool_call`?void 0:a,t),a.id)}return n};function Ie({message:e}){let{t}=c();return(0,R.jsxs)(`details`,{"data-testid":`work-provider-reasoning`,className:`group ms-14 overflow-hidden rounded-xl border border-line bg-surface-subtle/70`,children:[(0,R.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,R.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,R.jsx)(ne,{className:`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`}),(0,R.jsx)(`span`,{className:`truncate`,children:t(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})})]}),(0,R.jsx)(M,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),(0,R.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap break-words border-t border-line px-3 py-2.5 text-xs leading-relaxed text-ink-muted`,children:e.content})]})}function Le({task:e,user:t,loading:n,loadingOlder:r,liveRun:i,onLoadOlder:a}){let{t:o}=c(),s=(0,L.useRef)(null),l=(0,L.useRef)(!0),[u,d]=(0,L.useState)(!1),f=(0,L.useMemo)(()=>[...e.messages||[]].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id)),[e.messages]),p=i?.runId,g=(0,L.useMemo)(()=>Fe(f.filter(e=>!(p&&e.runId===p&&e.role!==`user`)),o(`work.activity.toolActivity`,{defaultValue:`Tool activity`})),[p,f,o]),_=[...f].reverse().find(e=>e.role===`assistant`&&e.kind===`message`)?.id;(0,L.useEffect)(()=>{l.current=!0;let e=s.current;e&&(e.scrollTop=e.scrollHeight);let t=window.requestAnimationFrame(()=>d(!1));return()=>window.cancelAnimationFrame(t)},[e.id]),(0,L.useEffect)(()=>{let e=s.current,t;return e&&l.current?(e.scrollTop=e.scrollHeight,t=window.requestAnimationFrame(()=>d(!1))):e&&i&&(t=window.requestAnimationFrame(()=>d(!0))),()=>{t!==void 0&&window.cancelAnimationFrame(t)}},[i,f,e.status]);let v=async()=>{let e=s.current,t=e?.scrollHeight??0,n=e?.scrollTop??0;l.current=!1;try{await a(),requestAnimationFrame(()=>{let e=s.current;e&&(e.scrollTop=n+e.scrollHeight-t)})}catch{}};return n&&f.length===0?(0,R.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center text-ink-muted`,children:(0,R.jsx)(h,{className:`h-6 w-6 animate-spin`})}):(0,R.jsxs)(`div`,{className:`relative flex min-h-0 flex-1`,children:[(0,R.jsx)(`div`,{ref:s,onScroll:e=>{let t=e.currentTarget;l.current=t.scrollHeight-t.scrollTop-t.clientHeight<80,l.current&&d(!1)},className:`min-h-0 flex-1 overflow-y-auto`,children:(0,R.jsx)(`div`,{className:`mx-auto flex min-h-full max-w-3xl flex-col px-4 py-6 md:px-6`,children:f.length===0&&!i?(0,R.jsxs)(`div`,{className:`m-auto max-w-md text-center`,children:[(0,R.jsx)(Ne,{role:`assistant`,size:`empty`}),(0,R.jsx)(`h2`,{className:`text-lg font-semibold tracking-tight text-ink`,children:o(`work.conversation.ready`,{defaultValue:`Workspace ready`})}),(0,R.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed text-ink-muted`,children:o(`work.conversation.empty`,{defaultValue:`Continue the task below. This conversation and its files stay attached to this workspace.`})})]}):(0,R.jsxs)(`div`,{className:`space-y-6`,children:[e.hasMoreMessages&&(0,R.jsx)(`div`,{className:`flex justify-center`,children:(0,R.jsxs)(`button`,{type:`button`,"data-testid":`work-load-older-messages`,disabled:r,onClick:()=>void v(),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,R.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}),o(`work.conversation.loadOlder`,{defaultValue:`Load older messages`})]})}),g.map(({key:n,item:r})=>{if(r.type===`reasoning`)return(0,R.jsx)(Ie,{message:r.message},n);if(r.type===`tools`)return(0,R.jsx)(`div`,{className:`ms-14 space-y-1.5`,children:r.tools.map(e=>(0,R.jsx)(H,{tool:e,expandedByDefault:!1},e.id))},n);let i=r.message,a=i.role===`user`,o=!a&&e.status===`running`&&i.id===_&&i.runId===e.activeRun?.id;return(0,R.jsxs)(`article`,{className:N(`flex gap-3`,a&&`flex-row-reverse`),children:[(0,R.jsx)(Ne,{role:a?`user`:`assistant`,user:a?t:void 0}),(0,R.jsx)(`div`,{className:N(`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,R.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap break-words text-sm leading-relaxed`,children:i.content}):o?(0,R.jsx)(_e,{content:i.content,className:`text-ink`}):(0,R.jsx)(ye,{content:i.content,className:`text-sm text-ink`})})]},i.id)}),i&&(0,R.jsxs)(`article`,{className:`flex gap-3`,"data-testid":`work-live-run-message`,children:[(0,R.jsx)(Ne,{role:`assistant`}),(0,R.jsx)(`div`,{className:`min-w-0 max-w-[92%] flex-1`,children:(0,R.jsx)(Me,{run:i})})]}),!i&&(e.status===`preparing`||e.status===`running`)&&(0,R.jsxs)(`div`,{className:`flex items-center gap-2 ps-14 text-xs text-ink-muted`,children:[(0,R.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}),e.status===`preparing`?o(`work.status.preparing`,{defaultValue:`Preparing isolated workspace…`}):o(`work.status.running`,{defaultValue:`Working in the local workspace…`})]})]})})}),u&&(0,R.jsxs)(`button`,{type:`button`,"data-testid":`work-new-activity-button`,onClick:()=>{let e=s.current;e&&(e.scrollTop=e.scrollHeight),l.current=!0,d(!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,R.jsx)(m,{className:`h-3.5 w-3.5`}),o(`work.live.newActivity`,{defaultValue:`New activity`})]})]})}var Re=45,G=30,K=70,q=360,ze=480,Be=9,Ve=2,He=10,Ue=`libre-webui-work-split:`,We=(e,t,n)=>Math.min(n,Math.max(t,e)),J=e=>`${Ue}${encodeURIComponent(e||`local`)}`,Ge=e=>{if(typeof window>`u`)return Re;try{let t=window.localStorage.getItem(e);if(t===null||t.trim()===``)return Re;let n=Number(t);return Number.isFinite(n)?We(n,G,K):Re}catch{return Re}},Ke=(e,t)=>{if(!(typeof window>`u`))try{window.localStorage.setItem(e,t.toFixed(2))}catch{}},qe=e=>{let t=Math.max(0,e-Be);if(t===0)return{min:G,max:K};let n=Math.max(G,q/t*100),r=Math.min(K,(t-ze)/t*100);if(n<=r)return{min:n,max:r};let i=We(q/840*100,G,K);return{min:i,max:i}},Je=(e,t)=>We(e,t.min,t.max);function Ye({conversation:e,workspace:t,userId:n,mobileSurface:r=`conversation`,className:i}){let{t:a,i18n:o}=c(),s=ge(o.language),l=J(n),[u,d]=(0,L.useState)(()=>({storageKey:l,percent:Ge(l)})),[f,p]=(0,L.useState)(0),[m,h]=(0,L.useState)(!1),g=(0,L.useRef)(null),_=(0,L.useRef)(null),v=(0,L.useRef)(null),y=(0,L.useRef)(l),b=(0,L.useRef)(u.percent),x=(0,L.useRef)(null),S=u.storageKey===l?u.percent:Ge(l),C=(0,L.useMemo)(()=>qe(f),[f]),w=Je(S,C),T=Math.round(w),ee=100-T,E=(0,L.useCallback)(e=>{d({storageKey:l,percent:e})},[l]),D=(0,L.useCallback)(e=>{b.current=Je(e,qe(g.current?.getBoundingClientRect().width??0)),x.current===null&&(x.current=window.requestAnimationFrame(()=>{x.current=null,E(b.current)}))},[E]),O=(0,L.useCallback)(()=>{if(v.current===null&&!m)return;x.current!==null&&(window.cancelAnimationFrame(x.current),x.current=null);let e=g.current?.getBoundingClientRect().width??0,t=Je(b.current,qe(e));b.current=t,E(t),Ke(y.current,t);let n=v.current;v.current=null,n!==null&&_.current?.hasPointerCapture(n)&&_.current.releasePointerCapture(n),h(!1)},[m,E]),k=(0,L.useCallback)(e=>{let t=g.current?.getBoundingClientRect();if(!t)return b.current;let n=Math.max(1,t.width-Be);return((s?t.right-e:e-t.left)-Be/2)/n*100},[s]),te=e=>{e.button!==0||!e.isPrimary||(e.preventDefault(),e.stopPropagation(),v.current=e.pointerId,y.current=l,b.current=w,e.currentTarget.setPointerCapture(e.pointerId),h(!0))},A=(0,L.useCallback)(e=>{let t=Je(e,C);b.current=t,E(t),Ke(l,t)},[C,E,l]),ne=(0,L.useCallback)(()=>{A(Re)},[A]),j=e=>{let t=e.shiftKey?He:Ve,n=null;e.key===`ArrowLeft`?n=w+(s?t:-t):e.key===`ArrowRight`?n=w+(s?-t:t):e.key===`Home`?n=C.min:e.key===`End`?n=C.max:e.key===`Enter`&&(n=Re),n!==null&&(e.preventDefault(),A(n))};(0,L.useEffect)(()=>{let e=g.current;if(!e)return;if(typeof ResizeObserver>`u`){let t=()=>p(e.getBoundingClientRect().width);return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)}let t=new ResizeObserver(e=>{let t=e[0];t&&p(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]),(0,L.useEffect)(()=>{if(!m)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===v.current&&(e.preventDefault(),D(k(e.clientX)))},r=e=>{e.pointerId===v.current&&O()};return window.addEventListener(`pointermove`,n,{passive:!1}),window.addEventListener(`pointerup`,r),window.addEventListener(`pointercancel`,r),window.addEventListener(`blur`,O),()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r),window.removeEventListener(`pointercancel`,r),window.removeEventListener(`blur`,O),document.body.style.cursor=e,document.body.style.userSelect=t}},[O,m,k,D]),(0,L.useEffect)(()=>()=>{x.current!==null&&window.cancelAnimationFrame(x.current),v.current!==null&&Ke(y.current,b.current)},[]);let re={gridTemplateColumns:`minmax(0, ${w}fr) ${Be}px minmax(0, ${100-w}fr)`};return(0,R.jsxs)(`div`,{ref:g,"data-testid":`work-split-pane`,"data-split-percent":w.toFixed(2),"data-resizing":m?`true`:`false`,className:N(`relative flex min-h-0 min-w-0 flex-1 overflow-hidden xl:grid`,i),style:re,children:[(0,R.jsx)(`section`,{id:`work-conversation-panel`,"data-testid":`work-conversation-panel`,className:N(`min-h-0 min-w-0 flex-1 flex-col bg-surface xl:flex`,r===`conversation`?`flex`:`hidden`),children:e}),(0,R.jsxs)(`div`,{ref:_,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(C.min),"aria-valuemax":Math.round(C.max),"aria-valuenow":T,"aria-valuetext":a(`work.workspace.splitSize`,{conversation:T,workspace:ee,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:te,onDoubleClick:ne,onKeyDown:j,className:N(`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-[#ff7b52]`),children:[(0,R.jsx)(`span`,{"aria-hidden":`true`,className:N(`pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-line transition-colors`,`group-hover:bg-[#ff7b52] group-focus-visible:bg-[#ff7b52]`,m&&`bg-[#ff7b52]`)}),(0,R.jsx)(`span`,{"aria-hidden":`true`,className:N(`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-[#ff7b52] group-hover:opacity-100`,`group-focus-visible:h-20 group-focus-visible:bg-[#ff7b52] group-focus-visible:opacity-100`,m&&`h-20 bg-[#ff7b52] opacity-100`)})]}),(0,R.jsx)(`section`,{id:`work-workspace-panel`,"data-testid":`work-workspace-panel`,className:N(`min-h-0 min-w-0 flex-1 flex-col bg-surface-raised xl:flex`,r===`workspace`?`flex`:`hidden`),children:t}),m&&(0,R.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 Xe=1e5,Ze=4e3,Qe={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`},$e={".bashrc":`bash`,".zshrc":`bash`},et={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`}},Y=e=>e.split(/[\\/]/).pop()?.toLowerCase()??``,X=e=>{let t=Y(e),n=t.lastIndexOf(`.`);return n>-1?t.slice(n+1):``},tt=e=>$e[Y(e)]??Qe[X(e)]??`text`,nt=e=>et[X(e)],rt=e=>nt(e)!==void 0,it=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},Z=async e=>(await e).default,at=async(e,t)=>{switch(e.family){case`babel`:return Promise.all([Z(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),Z(a(()=>import(`./estree-0vwU39qX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))]);case`typescript`:return Promise.all([Z(a(()=>import(`./typescript-Bcq62agC.js`),__vite__mapDeps([18,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17]))),Z(a(()=>import(`./estree-0vwU39qX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))]);case`postcss`:return[await Z(a(()=>import(`./postcss-DSDkwgFE.js`),__vite__mapDeps([19,1,2,3])))];case`html`:{let e=[await Z(a(()=>import(`./html-CApr2Bvi.js`),__vite__mapDeps([20,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))];return/<script\b/i.test(t)&&e.push(await Z(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),await Z(a(()=>import(`./estree-0vwU39qX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))),/<script\b[^>]*\blang\s*=\s*["']?(?:ts|typescript)/i.test(t)&&e.push(await Z(a(()=>import(`./typescript-Bcq62agC.js`),__vite__mapDeps([18,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))),/<style\b/i.test(t)&&e.push(await Z(a(()=>import(`./postcss-DSDkwgFE.js`),__vite__mapDeps([19,1,2,3])))),[...new Set(e)]}case`markdown`:{let n=[await Z(a(()=>import(`./markdown-C78Qc6xu.js`),__vite__mapDeps([21,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))],r=e=>RegExp(`^(?: {0,3})(?:\`{3,}|~{3,})\\s*(?:${e})(?:\\s|$)`,`im`).test(t);return e.parser===`mdx`&&n.push(await Z(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),await Z(a(()=>import(`./estree-0vwU39qX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))),r(`js|jsx|javascript|json|json5|jsonc`)&&n.push(await Z(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),await Z(a(()=>import(`./estree-0vwU39qX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))),r(`ts|tsx|typescript`)&&n.push(await Z(a(()=>import(`./typescript-Bcq62agC.js`),__vite__mapDeps([18,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17]))),await Z(a(()=>import(`./estree-0vwU39qX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])))),r(`css|scss|less`)&&n.push(await Z(a(()=>import(`./postcss-DSDkwgFE.js`),__vite__mapDeps([19,1,2,3])))),r(`html`)&&n.push(await Z(a(()=>import(`./html-CApr2Bvi.js`),__vite__mapDeps([20,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17]))),await Z(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),await Z(a(()=>import(`./estree-0vwU39qX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17]))),await Z(a(()=>import(`./typescript-Bcq62agC.js`),__vite__mapDeps([18,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17]))),await Z(a(()=>import(`./postcss-DSDkwgFE.js`),__vite__mapDeps([19,1,2,3])))),r(`yaml|yml`)&&n.push(await Z(a(()=>import(`./yaml-mLy9chOK.js`),__vite__mapDeps([22,1,2,3])))),[...new Set(n)]}case`yaml`:return[await Z(a(()=>import(`./yaml-mLy9chOK.js`),__vite__mapDeps([22,1,2,3])))]}},ot=async(e,t)=>{let n=nt(e);if(!n)throw Error(`Formatting is not supported for “${Y(e)||e}”.`);if(!it(t))throw Error(`Could not format “${Y(e)||e}”: files are limited to ${Xe.toLocaleString()} characters and ${Ze.toLocaleString()} lines.`);try{let[{format:e},r]=await Promise.all([a(()=>import(`./standalone-DmLfI4Qj.js`),__vite__mapDeps([23,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17])),at(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 “${Y(e)||e}”: ${n}`)}},st=(0,L.lazy)(async()=>({default:(await a(()=>import(`./OptimizedSyntaxHighlighter-Ci9sRc78.js`).then(e=>e.n),__vite__mapDeps([24,2,3,25]))).OptimizedSyntaxHighlighter})),ct=8e3,lt=400,ut=500;function dt({path:e,value:t,ariaLabel:n,disabled:r=!1,onChange:i,onSaveShortcut:a,onFormatShortcut:o}){let{t:s}=c(),l=he(e=>e.theme.mode===`dark`),u=(0,L.useRef)(null),d=(0,L.useRef)(null),[f,p]=(0,L.useState)(``),m=(0,L.useMemo)(()=>tt(e),[e]),h=(0,L.useMemo)(()=>{if(t.length>ct)return 401;let e=1;for(let n=0;n<t.length&&!(t.charCodeAt(n)===10&&(e+=1,e>lt));n+=1);return e},[t]),g=t.length>ct||h>lt,_=m!==`text`&&!g,v=_&&f===t;return(0,L.useEffect)(()=>{if(!_)return;let e=window.setTimeout(()=>p(t),ut);return()=>window.clearTimeout(e)},[_,e,t]),(0,L.useLayoutEffect)(()=>{!v||!u.current||!d.current||(u.current.style.transform=`translate3d(${-d.current.scrollLeft}px, ${-d.current.scrollTop}px, 0)`)},[v,e]),(0,R.jsxs)(`div`,{dir:`ltr`,className:N(`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":m,"data-highlighted":v?`true`:`false`,children:[v&&(0,R.jsx)(`div`,{"aria-hidden":`true`,"data-testid":`work-file-highlight`,className:`pointer-events-none absolute inset-0 z-0 overflow-hidden`,children:(0,R.jsx)(`div`,{ref:u,"data-testid":`work-file-highlight-content`,className:`min-h-full min-w-full origin-top-left will-change-transform`,children:(0,R.jsx)(L.Suspense,{fallback:(0,R.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,R.jsx)(st,{language:m,isDark:l,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:f||`​`})})})}),(0,R.jsx)(`textarea`,{ref:d,"data-testid":`work-file-editor`,"data-language":m,"aria-label":n,value:t,onChange:e=>i(e.target.value),onScroll:e=>{u.current&&(u.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:N(`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`,v?`text-transparent caret-ink`:`text-ink`),style:v?{WebkitTextFillColor:`transparent`,caretColor:`rgb(var(--color-ink))`,tabSize:2}:{tabSize:2}}),g&&(0,R.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 ft=4e6,pt=e=>{if(e===``)return[];let t=e.split(`
4
- `);return t[t.length-1]===``&&t.pop(),t},mt=(e,t)=>{let n=pt(e),r=pt(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=ht(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},ht=(e,t)=>{if(e.length===0&&t.length===0)return[];if(e.length>0&&t.length>0&&e.length*t.length>ft)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},Q=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}},gt=3,_t=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-gt),i=Math.min(e.length-1,n+gt);for(let e=r;e<=i;e+=1)t[e]=!0}let n=[],r=0;for(let i=0;i<e.length;i+=1){if(!t[i]){r+=1;continue}r>0&&(n.push({type:`fold`,count:r}),r=0),n.push({type:`line`,line:e[i]})}return r>0&&n.push({type:`fold`,count:r}),n};function vt({lines:e,ariaLabel:t}){let{t:n}=c();return(0,R.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,R.jsx)(`table`,{className:`w-full border-collapse`,children:(0,R.jsx)(`tbody`,{children:(0,L.useMemo)(()=>_t(e),[e]).map((e,t)=>e.type===`fold`?(0,R.jsx)(`tr`,{children:(0,R.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:n(`work.files.diffFolded`,{count:e.count,defaultValue:`{{count}} unchanged lines`})})},`fold-${t}`):(0,R.jsxs)(`tr`,{className:N(e.line.type===`added`&&`bg-[rgb(76,212,117)]/[0.12] text-ink`,e.line.type===`removed`&&`bg-[rgb(255,61,129)]/[0.10] text-ink-muted`,e.line.type===`context`&&`text-ink-muted`),children:[(0,R.jsx)(`td`,{className:`w-10 select-none px-2 text-right align-top text-[10px] tabular-nums text-ink-subtle`,children:e.line.beforeLine??``}),(0,R.jsx)(`td`,{className:`w-10 select-none px-2 text-right align-top text-[10px] tabular-nums text-ink-subtle`,children:e.line.afterLine??``}),(0,R.jsxs)(`td`,{className:`w-full whitespace-pre-wrap break-all px-3 align-top`,children:[(0,R.jsx)(`span`,{"aria-hidden":`true`,className:N(`me-2 inline-block w-3 select-none text-center`,e.line.type===`added`&&`text-[rgb(46,164,79)]`,e.line.type===`removed`&&`text-[rgb(255,61,129)]`),children:e.line.type===`added`?`+`:e.line.type===`removed`?`−`:``}),e.line.text||`​`]})]},`line-${t}`))})})})}var $=`/ws/work-terminal`;function yt(e,t){let n;if(t.protocol===`file:`)n=`ws://localhost:3001`;else if(t.apiBaseUrl)n=t.apiBaseUrl.replace(/\/api$/,``).replace(/^http:/,`ws:`).replace(/^https:/,`wss:`);else{let e=t.protocol===`https:`?`wss:`:`ws:`;n=t.production?`${e}//${t.host}`:`${e}//${t.hostname}:3001`}let r=new URL(`${n}${$}`);return r.searchParams.set(`taskId`,e),t.token&&r.searchParams.set(`token`,t.token),r.toString()}function bt(e){return yt(e,{protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,production:!0,token:localStorage.getItem(`auth-token`)})}var xt={background:`#ffffff`,foreground:`#1f2328`,cursor:`#1f2328`,selectionBackground:`rgba(255, 123, 82, 0.28)`},St={background:`#0f1115`,foreground:`#e6e6e6`,cursor:`#ff7b52`,selectionBackground:`rgba(255, 123, 82, 0.32)`};function Ct({taskId:t,active:n,disabledReason:r}){let{t:i}=c(),o=he(e=>e.theme.mode===`dark`),s=(0,L.useRef)(null),l=(0,L.useRef)(null),d=(0,L.useRef)(null),f=(0,L.useRef)(null),[p,m]=(0,L.useState)(`idle`),[g,_]=(0,L.useState)(null),[v,y]=(0,L.useState)(0),b=(0,L.useCallback)(()=>{let e=f.current,t=d.current,n=l.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,L.useEffect)(()=>{if(!n||r)return;let i=!1,c,u;return(async()=>{m(`connecting`),_(null);let[{Terminal:n},{FitAddon:r}]=await Promise.all([a(()=>import(`./xterm-DKl1QLiw.js`).then(t=>e(t.default,1)),__vite__mapDeps([26,2])),a(()=>import(`./addon-fit-Cj0_dfHF.js`).then(t=>e(t.default,1)),__vite__mapDeps([27,2]))]);if(await a(()=>Promise.resolve({}),__vite__mapDeps([28])),i||!s.current)return;c=new n({allowProposedApi:!0,convertEol:!1,cursorBlink:!0,fontFamily:`ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,fontSize:12,scrollback:5e3,theme:o?St:xt});let p=new r;c.loadAddon(p),c.open(s.current),d.current=c,f.current=p;try{p.fit()}catch{}u=new WebSocket(bt(t)),u.binaryType=`arraybuffer`,l.current=u;let h=new TextDecoder;u.onmessage=e=>{if(typeof e.data!=`string`){c?.write(h.decode(new Uint8Array(e.data)));return}try{let t=JSON.parse(e.data);if(t.type===`ready`){m(`connected`),b(),c?.focus();return}if(t.type===`error`){m(`error`),_(t.message||null);return}t.type===`exit`&&m(`closed`)}catch{}},u.onclose=()=>{i||m(e=>e===`error`||e===`closed`?e:`closed`)},u.onerror=()=>{i||m(`error`)},c.onData(e=>{u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify({type:`input`,data:e}))})})(),()=>{i=!0,u?.close(),l.current=null,c?.dispose(),d.current=null,f.current=null}},[n,r,v,o,b,t]),(0,L.useEffect)(()=>{let e=s.current;if(!e||!n)return;let t=new ResizeObserver(()=>b());return t.observe(e),()=>t.disconnect()},[n,b]);let x=()=>{l.current?.close(),y(e=>e+1)},S=r??(p===`error`?g??i(`work.terminal.failed`,{defaultValue:`The terminal session could not start.`}):p===`closed`?i(`work.terminal.closed`,{defaultValue:`Terminal session ended.`}):null);return(0,R.jsxs)(`div`,{"data-testid":`work-terminal-panel`,"data-status":r?`unavailable`:p,className:`relative flex min-h-0 flex-1 flex-col bg-surface`,children:[!r&&(0,R.jsx)(`div`,{ref:s,"data-testid":`work-terminal-surface`,dir:`ltr`,className:N(`min-h-0 flex-1 overflow-hidden p-2 text-left`,p!==`connected`&&`opacity-60`)}),p===`connecting`&&!r&&(0,R.jsxs)(`div`,{className:`pointer-events-none absolute inset-0 flex items-center justify-center gap-2 text-xs text-ink-muted`,children:[(0,R.jsx)(h,{className:`h-4 w-4 animate-spin`}),i(`work.terminal.connecting`,{defaultValue:`Opening a shell in the sandbox…`})]}),S&&(0,R.jsxs)(`div`,{role:p===`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,R.jsx)(u,{className:`h-6 w-6 text-ink-subtle`}),(0,R.jsx)(`p`,{dir:`auto`,"data-testid":`work-terminal-status`,className:`max-w-md text-xs leading-relaxed text-ink-muted`,children:S}),!r&&(0,R.jsx)(I,{size:`sm`,"data-testid":`work-terminal-reconnect-button`,className:`h-8 rounded-lg bg-[#ff7b52] px-3 text-[#3d120c] hover:bg-[#ff7b52]/90`,onClick:x,children:i(`work.terminal.reconnect`,{defaultValue:`Reconnect`})})]})]})}var wt=e=>{if(!e)return null;try{let t=new URL(e);return(t.hostname===`localhost`||t.hostname===`127.0.0.1`||t.hostname===`[::1]`)&&(t.protocol===`http:`||t.protocol===`https:`)?t.toString():null}catch{return null}},Tt=e=>{let t=e.split(`/`).filter(Boolean);return t.pop(),t.join(`/`)},Et=(e,t)=>{let n=e.metadata?.name??e.metadata?.toolName??e.metadata?.tool??e.metadata?.command;return typeof n==`string`&&n?n:t};function Dt({task:e,liveRun:t,files:n,selectedFile:r,loadingFiles:i,actionLoading:a,onLoadFiles:o,onLoadFile:s,onClearSelectedFile:l,onSaveFile:d,onStartPreview:m,onStopPreview:g,onDirtyChange:_,terminal:x}){let{t:S,i18n:C}=c(),w=ge(C.language),[T,ee]=(0,L.useState)(`files`),[E,ne]=(0,L.useState)(``),[j,ae]=(0,L.useState)(``),[M,ce]=(0,L.useState)(),[le,ue]=(0,L.useState)(``),[P,fe]=(0,L.useState)(!1),[F,he]=(0,L.useState)(!1),_e=(0,L.useRef)(new Map),[ve,ye]=(0,L.useState)(()=>new Map),be=wt(e.previewUrl),xe=t?.runId,Se=t?.error,Ce=t?.tools,we=(0,L.useMemo)(()=>{let t=new Set(Ce?.map(e=>e.id)||[]);return(e.messages||[]).filter(e=>{if(e.kind===`reasoning`||e.role!==`tool`&&e.kind===`message`)return!1;if(!xe||e.runId!==xe)return!0;if(e.kind===`error`&&Se)return!1;let n=e.metadata?.toolCallId;return typeof n!=`string`||!t.has(n)})},[Se,xe,Ce,e.messages]),Te=we.length+(Ce?.length||0),Ee=!!r&&j!==(r?.content??``),z=e.status===`preparing`||e.status===`running`,De=(0,L.useRef)(z),B=(0,L.useRef)(0),V=(0,L.useRef)(j),H=(0,L.useRef)(M),Oe=(0,L.useRef)(r),ke=(0,L.useRef)(e.id),Ae=(0,L.useRef)(o),je=(0,L.useRef)(s),Ne=(0,L.useRef)(_),U=(0,L.useRef)(!0),W=r?ve.get(r.path):void 0,Pe=(0,L.useMemo)(()=>r&&W!==void 0&&W!==r.content?mt(W,r.content):null,[W,r]),Fe=(0,L.useMemo)(()=>Pe?Q(Pe):null,[Pe]),Ie=!!(Fe&&(Fe.added>0||Fe.removed>0)),Le=r?rt(r.path):!1,Re=!r||it(j),G=Le&&Re;(0,L.useEffect)(()=>{V.current=j,H.current=M,Oe.current=r,ke.current=e.id,Ne.current=_},[M,j,_,r,e.id]),(0,L.useEffect)(()=>{Ae.current=o,je.current=s},[s,o]),(0,L.useEffect)(()=>(U.current=!0,()=>{U.current=!1,B.current+=1,Ne.current(!1)}),[]),(0,L.useEffect)(()=>{if(!De.current&&z&&ye(new Map(_e.current)),De.current&&!z&&(Ae.current(E),r&&!Ee)){let e=++B.current,t=r.path,n=V.current,i=H.current;je.current(t).then(r=>{if(!U.current||e!==B.current||r.path!==t||V.current!==n||H.current!==i)return;_e.current.set(r.path,r.content);let a=ve.get(r.path);a!==void 0&&a!==r.content&&he(!0),V.current=r.content,H.current=r.updatedAt??r.modifiedAt,ae(r.content),ce(r.updatedAt??r.modifiedAt)}).catch(()=>void 0)}De.current=z},[E,Ee,r,z,ve]);let K=()=>!Ee||window.confirm(S(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),q=()=>{r&&de(e.id,r.path)},ze=async e=>{K()&&(B.current+=1,q(),l(),_(!1),he(!1),ne(e),await o(e).catch(()=>void 0))},Be=async t=>{if(!K())return;let n=++B.current;q();let r=await s(t).catch(()=>void 0);if(!U.current||!r||n!==B.current)return;_e.current.set(r.path,r.content);let i=ve.get(r.path);he(i!==void 0&&i!==r.content);let a=pe(e.id,r.path),o=a?.content??r.content,c=a?.baseUpdatedAt??r.updatedAt??r.modifiedAt;V.current=o,H.current=c,ae(o),ce(c),_(a!==null&&a.content!==r.content)},Ve=()=>{K()&&(B.current+=1,q(),l(),_(!1),he(!1))},He=t=>{r&&(V.current=t,ae(t),t===r.content?de(e.id,r.path):me(e.id,r.path,{content:t,baseUpdatedAt:M??r.updatedAt??r.modifiedAt}),_(t!==r.content))},Ue=async()=>{if(!r)return;let t=e.id,n=r.path,i=j,a=B.current,o=await d(n,i,M).catch(()=>!1);if(!U.current||o===!1||a!==B.current||ke.current!==t||Oe.current?.path!==n)return;let s=o.updatedAt??o.modifiedAt;_e.current.set(n,typeof o.content==`string`?o.content:i),H.current=s,ce(s);let c=V.current;if(c===i){de(t,n),_(!1);return}me(t,n,{content:c,baseUpdatedAt:s}),_(!0)},We=async()=>{if(!r||z||P||!G)return;fe(!0);let e=B.current,t=r.path,n=V.current;try{let r=await ot(t,n);if(!U.current||e!==B.current||Oe.current?.path!==t||V.current!==n)return;He(r),D.success(S(`work.files.formatted`,{defaultValue:`Code formatted.`}))}catch(r){if(!U.current||e!==B.current||Oe.current?.path!==t||V.current!==n)return;D.error(r instanceof Error?r.message:S(`work.files.formatFailed`,{defaultValue:`Could not format this file.`}))}finally{U.current&&fe(!1)}},J=[{id:`files`,label:S(`work.workspace.files`,{defaultValue:`Files`}),icon:re,testId:`work-files-tab`},{id:`activity`,label:S(`work.workspace.activity`,{defaultValue:`Activity`}),icon:v,testId:`work-activity-tab`},{id:`terminal`,label:S(`work.workspace.terminal`,{defaultValue:`Terminal`}),icon:u,testId:`work-terminal-tab`},{id:`preview`,label:S(`work.workspace.preview`,{defaultValue:`Preview`}),icon:p,testId:`work-preview-tab`}],Ge=(e,t)=>{let n=null;if(e.key===`ArrowRight`&&(n=(t+(w?-1:1)+J.length)%J.length),e.key===`ArrowLeft`&&(n=(t+(w?1:-1)+J.length)%J.length),e.key===`Home`&&(n=0),e.key===`End`&&(n=J.length-1),n===null)return;e.preventDefault();let r=J[n];ee(r.id),e.currentTarget.parentElement?.querySelector(`#work-workspace-tab-${r.id}`)?.focus()};return(0,R.jsxs)(`section`,{className:`flex h-full min-h-0 flex-col bg-surface-raised`,children:[(0,R.jsxs)(`div`,{"data-testid":`work-workspace-toolbar`,className:`flex h-12 shrink-0 items-center gap-2 border-b border-line bg-surface-raised px-2`,children:[(0,R.jsx)(`div`,{role:`tablist`,"aria-orientation":`horizontal`,"aria-label":S(`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:J.map((e,t)=>{let n=e.icon;return(0,R.jsxs)(`button`,{type:`button`,role:`tab`,id:`work-workspace-tab-${e.id}`,"aria-selected":T===e.id,"aria-controls":T===e.id?`work-workspace-panel-${e.id}`:void 0,"aria-label":e.label,tabIndex:T===e.id?0:-1,title:e.label,"data-testid":e.testId,onClick:()=>ee(e.id),onKeyDown:e=>Ge(e,t),className:N(`flex h-7 items-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow]`,T===e.id?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:text-ink`),children:[(0,R.jsx)(n,{className:`h-3.5 w-3.5 shrink-0`}),(0,R.jsx)(`span`,{className:`hidden xs:inline`,children:e.label}),e.id===`activity`&&Te>0&&(0,R.jsx)(`span`,{className:`rounded-full bg-surface px-1.5 text-[10px] text-ink-muted`,children:Te})]},e.id)})}),T===`files`&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1.5`,children:[r&&(0,R.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:Ve,"aria-label":S(`work.files.back`,{defaultValue:`Back to files`}),children:(0,R.jsx)(y,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,R.jsxs)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,title:r?.path??`/workspace${E?`/${E}`:``}`,children:[r?.path??`/workspace${E?`/${E}`:``}`,Ee&&` •`]})]}),(0,R.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,R.jsx)(`button`,{type:`button`,disabled:!E,onClick:()=>void ze(Tt(E)),className:N(`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`,!r&&`inline-flex`),"aria-label":S(`work.files.up`,{defaultValue:`Parent folder`}),title:S(`work.files.up`,{defaultValue:`Parent folder`}),children:(0,R.jsx)(y,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,R.jsx)(`button`,{type:`button`,"data-testid":`work-refresh-files-button`,onClick:()=>void o(E).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":S(`common.refresh`,{defaultValue:`Refresh`}),title:S(`common.refresh`,{defaultValue:`Refresh`}),children:(0,R.jsx)(f,{className:N(`h-3.5 w-3.5`,i&&`animate-spin`)})}),r&&Ie&&Fe&&(0,R.jsxs)(`button`,{type:`button`,"data-testid":`work-diff-toggle-button`,"aria-pressed":F,onClick:()=>he(e=>!e),title:S(`work.files.changesSince`,{defaultValue:`What changed since the last turn`}),className:N(`inline-flex h-8 items-center gap-1.5 rounded-lg border px-2 text-[11px] font-medium transition-colors`,F?`border-transparent bg-ink text-ink-inverse`:`border-line text-ink-muted hover:bg-surface-subtle hover:text-ink`),children:[(0,R.jsx)(O,{className:`h-3.5 w-3.5 shrink-0`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:S(`work.files.changes`,{defaultValue:`Changes`})}),(0,R.jsxs)(`span`,{dir:`ltr`,className:`tabular-nums`,children:[(0,R.jsxs)(`span`,{className:F?void 0:`text-[rgb(46,164,79)]`,children:[`+`,Fe.added]}),` `,(0,R.jsxs)(`span`,{className:F?void 0:`text-[rgb(255,61,129)]`,children:[`−`,Fe.removed]})]})]}),r&&!F&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(I,{"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:z||P||!G,onClick:()=>void We(),"aria-busy":P||void 0,title:G?S(`work.files.formatShortcut`,{defaultValue:`Format (Shift+Alt+F)`}):Le?S(`work.files.formatTooLarge`,{defaultValue:`Formatting is limited to files under 100,000 characters and 4,000 lines.`}):S(`work.files.formatUnsupported`,{defaultValue:`Formatting is not available for this file type.`}),"aria-label":S(`work.files.format`,{defaultValue:`Format file`}),children:[P?(0,R.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,R.jsx)(b,{className:`h-3.5 w-3.5`}),(0,R.jsx)(`span`,{className:`hidden 2xl:inline`,children:S(`work.files.format`,{defaultValue:`Format`})})]}),(0,R.jsxs)(I,{"data-testid":`work-save-file-button`,size:`sm`,className:`h-8 w-8 rounded-lg bg-[#ff7b52] px-0 text-[#3d120c] hover:bg-[#ff7b52]/90 sm:w-auto sm:px-2.5`,disabled:!Ee||z||P||a,onClick:()=>void Ue(),"aria-busy":a||void 0,title:S(`work.files.saveShortcut`,{defaultValue:`Save (⌘/Ctrl+S)`}),"aria-label":S(`common.save`),children:[a?(0,R.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,R.jsx)(se,{className:`h-3.5 w-3.5`}),(0,R.jsx)(`span`,{className:`hidden 2xl:inline`,children:S(`common.save`)})]})]})]})]}),T===`activity`&&(0,R.jsx)(`div`,{className:`min-w-0 flex-1`}),T===`terminal`&&(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,R.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,children:`/workspace`}),z&&(0,R.jsx)(`span`,{className:`shrink-0 text-[10px] text-ink-subtle`,children:S(`work.terminal.taskRunning`,{defaultValue:`Model turn in progress`})})]}),T===`preview`&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`input`,{dir:`auto`,value:le,onChange:e=>ue(e.target.value),placeholder:S(`work.preview.command`,{defaultValue:`Optional start command`}),"aria-label":S(`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,R.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[e.previewStatus===`running`||e.previewStatus===`starting`?(0,R.jsxs)(I,{"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:a,onClick:()=>void g(),"aria-busy":a||void 0,"aria-label":S(`work.preview.stop`,{defaultValue:`Stop preview`}),children:[a?(0,R.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,R.jsx)(k,{className:`h-3.5 w-3.5 fill-current`}),(0,R.jsx)(`span`,{className:`hidden 2xl:inline`,children:S(`work.preview.stop`,{defaultValue:`Stop preview`})})]}):(0,R.jsxs)(I,{"data-testid":`work-start-preview-button`,size:`sm`,className:`h-8 w-8 rounded-lg bg-[#ff7b52] px-0 text-[#3d120c] hover:bg-[#ff7b52]/90 sm:w-auto sm:px-2.5`,disabled:a,onClick:()=>void m(le.trim()||void 0),"aria-busy":a||void 0,"aria-label":S(`work.preview.start`,{defaultValue:`Start preview`}),children:[a?(0,R.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,R.jsx)(A,{className:`h-3.5 w-3.5 fill-current`}),(0,R.jsx)(`span`,{className:`hidden 2xl:inline`,children:S(`work.preview.start`,{defaultValue:`Start preview`})})]}),be&&(0,R.jsx)(`a`,{href:be,target:`_blank`,rel:`noopener noreferrer`,"aria-label":S(`work.preview.open`,{defaultValue:`Open`}),title:S(`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,R.jsx)(ie,{className:`h-3.5 w-3.5`})})]})]})]}),T===`files`&&(0,R.jsxs)(`div`,{id:`work-workspace-panel-files`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-files`,className:`flex min-h-0 flex-1`,children:[(0,R.jsx)(`div`,{className:N(`flex min-h-0 w-full flex-col border-e border-line bg-surface-raised`,r?`hidden sm:flex sm:w-52 xl:w-60`:`flex`),children:(0,R.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-1.5`,children:i&&n.length===0?(0,R.jsx)(`div`,{className:`flex justify-center py-8 text-ink-muted`,children:(0,R.jsx)(h,{className:`h-5 w-5 animate-spin`})}):n.length===0?(0,R.jsx)(`p`,{className:`px-3 py-8 text-center text-xs text-ink-muted`,children:S(`work.files.empty`,{defaultValue:`No files in this folder yet.`})}):[...n].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1).map(e=>(0,R.jsxs)(`button`,{type:`button`,"data-testid":`work-file-item`,"data-path":e.path,onClick:()=>{e.type===`directory`?ze(e.path):Be(e.path)},className:N(`flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-start text-xs hover:bg-surface-subtle`,r?.path===e.path?`bg-surface-subtle text-ink`:`text-ink-muted`),children:[e.type===`directory`?(0,R.jsx)(te,{className:`h-3.5 w-3.5 shrink-0 text-amber-500`}):(0,R.jsx)(oe,{className:`h-3.5 w-3.5 shrink-0`}),(0,R.jsx)(`span`,{dir:`auto`,className:`truncate`,children:e.name})]},e.path))})}),(0,R.jsx)(`div`,{className:N(`min-h-0 min-w-0 flex-1 flex-col`,r?`flex`:`hidden sm:flex`),children:r&&F&&Pe?(0,R.jsx)(vt,{lines:Pe,ariaLabel:S(`work.files.diffLabel`,{path:r.path,defaultValue:`Changes since the last turn: {{path}}`})}):r?(0,R.jsx)(dt,{path:r.path,value:j,ariaLabel:S(`work.files.editorLabel`,{path:r.path,defaultValue:`File editor: {{path}}`}),onChange:He,onSaveShortcut:()=>{Ee&&!z&&!a&&!P&&Ue()},onFormatShortcut:()=>void We(),disabled:z||P}):(0,R.jsxs)(`div`,{className:`m-auto px-6 text-center text-xs text-ink-muted`,children:[(0,R.jsx)(oe,{className:`mx-auto mb-3 h-7 w-7 text-ink-subtle`}),S(`work.files.select`,{defaultValue:`Select a file to inspect and edit it.`})]})})]}),T===`activity`&&(0,R.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:[t&&(0,R.jsx)(`div`,{className:`mb-3`,children:(0,R.jsx)(Me,{run:t,variant:`activity`})}),we.length===0&&!t?(0,R.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center text-xs text-ink-muted`,children:[(0,R.jsx)(u,{className:`mb-3 h-7 w-7 text-ink-subtle`}),S(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]}):(0,R.jsx)(`div`,{className:`space-y-2`,children:we.map(e=>(0,R.jsxs)(`div`,{className:`rounded-xl border border-line bg-surface p-3`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,R.jsx)(`span`,{dir:`auto`,className:`truncate font-mono text-xs font-medium text-ink`,children:Et(e,S(`work.activity.toolActivity`,{defaultValue:`Tool activity`}))}),(0,R.jsx)(`span`,{className:`shrink-0 text-[10px] uppercase tracking-wide text-ink-subtle rtl:tracking-normal`,children:{message:S(`work.activity.kinds.message`,{defaultValue:`Message`}),reasoning:S(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`}),tool_call:S(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}),tool_result:S(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),error:S(`work.activity.kinds.error`,{defaultValue:`Error`})}[e.kind]})]}),e.content&&(0,R.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))})]}),T===`terminal`&&(0,R.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,R.jsx)(Ct,{taskId:e.id,active:T===`terminal`,disabledReason:x&&!x.available?x.reason??S(`work.terminal.unavailable`,{defaultValue:`The interactive terminal is not available in this deployment.`}):z?S(`work.terminal.blockedByRun`,{defaultValue:`The model is using this container. The terminal opens when the turn finishes.`}):void 0})}),T===`preview`&&(0,R.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,R.jsxs)(`div`,{className:`m-auto flex items-center gap-2 text-xs text-ink-muted`,children:[(0,R.jsx)(h,{className:`h-4 w-4 animate-spin`}),S(`work.preview.starting`,{defaultValue:`Starting preview…`})]}):be&&e.previewStatus===`running`?(0,R.jsx)(`iframe`,{"data-testid":`work-preview-frame`,title:S(`work.preview.frameTitle`,{defaultValue:`Workspace preview`}),src:be,sandbox:`allow-scripts allow-forms allow-modals allow-downloads`,referrerPolicy:`no-referrer`,className:`min-h-0 flex-1 border-0 bg-white`}):(0,R.jsxs)(`div`,{className:`m-auto max-w-sm px-6 text-center text-xs leading-relaxed text-ink-muted`,children:[(0,R.jsx)(p,{className:`mx-auto mb-3 h-8 w-8 text-ink-subtle`}),e.previewStatus===`failed`?S(`work.preview.failed`,{defaultValue:`The preview could not start. Check Activity, then try another command.`}):S(`work.preview.empty`,{defaultValue:`Start the app inside this workspace to inspect it here.`})]})})]})}var Ot=e=>{let t=e.trim().toLowerCase();return!!t&&!t.includes(`embed`)},kt=(e,t)=>e instanceof Error&&e.message?e.message:t,At=(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 jt(){let{t:e}=c(),t=s(),n=r(),{taskId:a}=i(),u=he(e=>e.preferences),f=he(e=>e.setPreferences),m=fe(e=>e.user),h=m?.id??null,[g,v]=(0,L.useState)(!1),y=F(e=>e.models),b=F(e=>e.selectedModel),x=F(e=>e.selectedProviderType),S=F(e=>e.selectedProviderId),O=F(e=>e.loadModels),{capabilities:k,tasks:te,selectedTask:A,files:ne,selectedFile:j,liveRuns:re,loadingTask:ie,loadingOlderMessages:ae,loadingFiles:oe,actionLoading:se,error:M,loadCapabilities:pe,loadTasks:me,selectTask:I,loadTask:ge,loadOlderMessages:_e,createTask:ye,updateTask:be,deleteTask:Ce,startRun:we,cancelRun:Te,beginLiveRun:z,applyRunEvents:De,setLiveRunConnection:B,clearLiveRun:V,loadFiles:H,loadFile:Oe,clearSelectedFile:ke,saveFile:Ae,startPreview:je,stopPreview:Me,clearError:Ne}=P(),U=(0,L.useMemo)(()=>y.filter(e=>!e.isPersona&&Ot(e.name)&&(!e.isPlugin||!!e.pluginId)),[y]),W=(0,L.useMemo)(()=>U.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:xe(i),label:e.isPlugin&&e.pluginName?`${e.name} · ${e.pluginName}`:e.name,remote:e.isPlugin||r.endsWith(`:cloud`)||r.endsWith(`-cloud`)}]}),[U]),[Pe,Fe]=(0,L.useState)(``),[Ie,Re]=(0,L.useState)({locationKey:t.key,value:`conversation`}),G=Ie.locationKey===t.key?Ie.value:`conversation`,K=e=>Re({locationKey:t.key,value:e}),[q,ze]=(0,L.useState)(!1),[Be,Ve]=(0,L.useState)(``),He=k?.hostWorkspaces?.enabled===!0,Ue=k?.hostWorkspaces?.roots??[],[We,J]=(0,L.useState)({taskId:null,open:!1}),Ge=We.open&&We.taskId===A?.id,Ke=(0,L.useRef)(null),qe=(0,L.useRef)(null),Je=(0,L.useRef)(null),Xe=(0,L.useCallback)((e=!1)=>{J(e=>({...e,open:!1})),e&&window.requestAnimationFrame(()=>qe.current?.focus())},[]);(0,L.useEffect)(()=>{if(!Ge)return;let e=window.requestAnimationFrame(()=>{Je.current?.querySelector(`[role="menuitem"]`)?.focus()}),t=e=>{e.target instanceof Node&&!Ke.current?.contains(e.target)&&Xe()},n=e=>{e.key===`Escape`&&(e.preventDefault(),Xe(!0))};return document.addEventListener(`pointerdown`,t),document.addEventListener(`keydown`,n),()=>{window.cancelAnimationFrame(e),document.removeEventListener(`pointerdown`,t),document.removeEventListener(`keydown`,n)}},[Xe,Ge]);let Ze=e=>{if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),Xe(!0);return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`&&e.key!==`Home`&&e.key!==`End`)return;let t=[...Je.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,L.useEffect)(()=>{pe(),me()},[pe,me]),(0,L.useEffect)(()=>{if(!a){I(null);return}I(a),ge(a).catch(()=>void 0),H(a,``).catch(()=>void 0)},[a,H,ge,I]);let Qe=W.find(e=>e.key===Pe)||W.find(e=>e.model===b&&(x===`plugin`?e.providerType===`plugin`&&e.providerId===S:e.providerType===`ollama`))||W[0],$e=a?te.find(e=>e.id===a):void 0,et=$e?.status??A?.status,Y=A?.activeRun??$e?.activeRun??null,X=Y?.id,tt=Y?.status===`queued`||Y?.status===`preparing`||Y?.status===`running`,nt=a&&re[a]?.runId===X?re[a]:void 0,rt=et===`preparing`||et===`running`?1e3:4e3;(0,L.useEffect)(()=>{let e,t=!1,n=async()=>{await me(!0),t||(e=setTimeout(n,rt))};return e=setTimeout(n,rt),()=>{t=!0,e&&clearTimeout(e)}},[me,rt]);let it=(0,L.useRef)(null);(0,L.useEffect)(()=>{if(!a||!et){it.current=null;return}let e=it.current;it.current={taskId:a,status:et},e?.taskId===a&&(e.status===`preparing`||e.status===`running`)&&et!==`preparing`&&et!==`running`&&(ge(a,!0).catch(()=>void 0),H(a,``).catch(()=>void 0))},[H,ge,et,a]),(0,L.useEffect)(()=>{if(!a||!X||!tt)return;let e=new AbortController,t=!1,n=0,r=P.getState().liveRuns[a]?.runId===X&&P.getState().liveRuns[a]?.lastEventId||0,i=!1,o=[],s=null,c=()=>{if(s!==null&&(window.cancelAnimationFrame(s),s=null),o.length===0)return;let e=o;o=[],De(e)},l=e=>{if(e.type!==`snapshot`&&(n=0),r=Math.max(r,e.id),o.push(e),e.type===`done`||e.type===`error`&&e.data.terminal!==!1){i=!0,c();return}s===null&&(s=window.requestAnimationFrame(c))};return z(a,X,Y?.startedAt||void 0),(async()=>{for(;!t&&!e.signal.aborted&&!i;){B(a,X,n>=3?`error`:n===0?`connecting`:`reconnecting`);let o=Date.now();try{if(await ce.streamRunEvents({taskId:a,runId:X,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()-o>=5e3&&(n=0),n+=1,B(a,X,n>=3?`error`:`reconnecting`,n>=3?kt(r,`Live updates are reconnecting in the background.`):void 0),await At(Math.min(4e3,250*2**Math.min(n,4)),e.signal)}}if(c(),!(!i||e.signal.aborted)){B(a,X,`closed`);try{await Promise.all([ge(a,!0),H(a,``),me(!0)])}catch{}finally{V(a,X)}}})(),()=>{t=!0,e.abort(),c()}},[De,z,V,H,ge,me,Y?.startedAt,tt,X,B,a]),(0,L.useEffect)(()=>{if(!q)return;let e=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[q]);let Z=(0,L.useCallback)(()=>!q||window.confirm(e(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),[e,q]),at=(0,L.useCallback)(()=>!q||window.confirm(e(`work.files.leaveWithDraft`,{defaultValue:`Leave this file? Your unsaved edit will remain as a browser draft.`})),[e,q]),ot=()=>{A&&j&&de(A.id,j.path)},st=o(({currentLocation:e,nextLocation:t})=>{let n=t.state;return q&&n?.deletedWorkTaskId!==a&&`${e.pathname}${e.search}${e.hash}`!=`${t.pathname}${t.search}${t.hash}`});(0,L.useEffect)(()=>{if(st.state!==`blocked`)return;if(!at()){st.reset();return}let e=st.proceed,t=window.setTimeout(()=>{ze(!1),window.setTimeout(e,0)},0);return()=>window.clearTimeout(t)},[at,st]);let ct=()=>{Ne(),K(`conversation`),n(`/work`)},lt=async t=>{if(A&&!Z())return!1;A&&q&&(ot(),ke(),ze(!1));try{if(A)await we(A.id,{message:t,model:A.model,providerType:A.providerType,providerId:A.providerId||void 0});else{if(!Qe)throw Error(e(`work.composer.noModelSelected`,{defaultValue:`No Work-compatible model is selected.`}));n(`/work/${(await ye({message:t,model:Qe.model,providerType:Qe.providerType,providerId:Qe.providerId,networkEnabled:!0,...He&&Be.trim()?{hostPath:Be.trim()}:{}})).id}`)}return!0}catch(t){return D.error(kt(t,e(`work.toasts.runFailed`,{defaultValue:`Could not start the Work task.`}))),!1}},ut=async t=>{let n=xt.find(e=>e.key===t);if(n){if(!A){Fe(t);return}try{await be(A.id,{model:n.model,providerType:n.providerType,providerId:n.providerId})}catch(t){D.error(kt(t,e(`work.toasts.updateFailed`,{defaultValue:`Could not update this task.`})))}}},dt=async()=>{if(A)try{await Te(A.id),D.success(e(`work.toasts.cancelled`,{defaultValue:`Work run stopped.`}))}catch(t){D.error(kt(t,e(`work.toasts.cancelFailed`,{defaultValue:`Could not stop the Work run.`})))}},ft=async t=>{let r=te.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=a===t&&q;i&&ze(!1);try{await Ce(t),ue(t),a===t&&n(`/work`)}catch(t){i&&ze(!0),D.error(kt(t,e(`work.toasts.deleteFailed`,{defaultValue:`Could not delete this Work task.`})))}},pt=async t=>{if(!A)return!1;let n=t.trim();if(!n||n===A.title)return!!n;try{return await be(A.id,{title:n}),!0}catch(t){return D.error(kt(t,e(`work.toasts.renameFailed`,{defaultValue:`Could not rename this task.`}))),!1}},mt=async(e,t,n)=>{try{return await e(),n&&D.success(n),!0}catch(e){return D.error(kt(e,t)),!1}},ht=async(t,n,r)=>{if(!A)return!1;let i=A.id;try{let a=await Ae(i,t,n,r);return P.getState().selectedTaskId===i&&D.success(e(`work.toasts.saved`,{defaultValue:`File saved.`})),a}catch(t){return P.getState().selectedTaskId===i&&D.error(kt(t,e(`work.toasts.saveFailed`,{defaultValue:`Could not save this file.`}))),!1}},Q=k?.available===!1,gt=k?.pluginAvailable?k.ollamaAvailable?e(`work.runtime.readyHybrid`,{defaultValue:`Docker + models ready`}):e(`work.runtime.readyPlugin`,{defaultValue:`Docker + plugin ready`}):e(`work.runtime.readyOllama`,{defaultValue:`Docker ready`}),_t=e(`work.runtime.ready`,{defaultValue:`Runtime ready`}),vt=A?Se(A):!1,$=A?{model:A.model,providerType:A.providerType,providerId:A.providerId||void 0}:void 0,yt=$?xe($):Qe?.key||``,bt=$&&!W.some(e=>e.key===yt)?{...$,key:yt,label:`${$.model} · ${$.providerType===`plugin`?$.providerId||`plugin`:`Ollama`}`,remote:$.providerType===`plugin`||$.model.toLowerCase().endsWith(`:cloud`)||$.model.toLowerCase().endsWith(`-cloud`)}:void 0,xt=bt?[bt,...W]:W,St=ve[A?.status??`idle`],Ct=e(St.labelKey,{defaultValue:St.label}),wt=async()=>{if(u.workRemoteProviderDisclosureDismissed||g)return!1;let t=h;v(!0);try{let n=await le.updatePreferences({workRemoteProviderDisclosureDismissed:!0});if(!n.success)throw Error(n.error||e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`}));return(fe.getState().user?.id??null)===t?(f({workRemoteProviderDisclosureDismissed:!0}),!0):!1}catch{return D.error(e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`})),!1}finally{v(!1)}};return(0,R.jsx)(`div`,{"data-testid":`work-page`,className:`relative flex h-full min-h-0 overflow-hidden bg-surface`,children:(0,R.jsxs)(`main`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,R.jsxs)(`header`,{className:`flex h-16 shrink-0 items-center gap-3 border-b border-line bg-surface px-3 md:px-4`,children:[A?(0,R.jsx)(`input`,{"data-testid":`work-task-title`,dir:`auto`,defaultValue:A.title,onBlur:e=>{let t=e.currentTarget;if(!t.value.trim()){t.value=A.title;return}pt(t.value).then(e=>{e||(t.value=A.title)})},onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&(e.currentTarget.value=A.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`})},`${A.id}:${A.title}`):(0,R.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,R.jsx)(`h1`,{className:`truncate text-sm font-semibold text-ink`,children:e(`work.title`,{defaultValue:`Work`})})}),A?.hostPath&&(0,R.jsxs)(`span`,{"data-testid":`work-host-path-chip`,title:A.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,R.jsx)(ee,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,R.jsx)(`span`,{className:`max-w-[16rem] truncate`,children:A.hostPath})]}),A&&(0,R.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:Ct,defaultValue:`Status: {{status}}`}),title:e(`work.tasks.status`,{status:Ct,defaultValue:`Status: {{status}}`}),children:[(0,R.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-compact-status-indicator`,className:N(`h-1.5 w-1.5 rounded-full`,St.animated&&`animate-pulse`,A.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:St.color}}),(0,R.jsx)(`span`,{className:`hidden md:inline`,children:Ct})]}),A&&(0,R.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,R.jsxs)(`button`,{type:`button`,onClick:()=>K(`conversation`),"aria-label":e(`work.mobile.conversation`,{defaultValue:`Conversation`}),"aria-pressed":G===`conversation`,className:N(`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`,G===`conversation`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,R.jsx)(_,{className:`h-3.5 w-3.5 shrink-0`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.conversation`,{defaultValue:`Conversation`})})]}),(0,R.jsxs)(`button`,{type:`button`,onClick:()=>K(`workspace`),"aria-label":e(`work.mobile.workspace`,{defaultValue:`Workspace`}),"aria-pressed":G===`workspace`,className:N(`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`,G===`workspace`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,R.jsx)(p,{className:`h-3.5 w-3.5 shrink-0`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.workspace`,{defaultValue:`Workspace`})})]})]}),(0,R.jsxs)(`div`,{className:N(`ms-auto hidden min-w-0 items-center gap-2`,A?`xl:flex`:`sm:flex`),children:[A&&(0,R.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,R.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-status-indicator`,className:N(`h-1.5 w-1.5 rounded-full`,St.animated&&`animate-pulse`,A.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:St.color}}),Ct]}),(0,R.jsxs)(`span`,{"data-testid":`work-runtime-status`,className:N(`inline-flex h-7 items-center gap-1.5 rounded-full border px-2.5 text-[11px] font-medium`,Q?`border-transparent bg-error-500 text-[#0D0D0C]`:`border-transparent bg-success-500 text-[#0D0D0C]`),title:Q?k?.reason||e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):k?.image?`${gt} · ${k.image}`:gt,children:[(0,R.jsx)(l,{className:`h-3.5 w-3.5`}),Q?e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):_t]}),A&&(0,R.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,R.jsx)(C,{className:`h-3.5 w-3.5 shrink-0`}),(0,R.jsx)(`span`,{dir:`ltr`,className:`truncate`,children:A.model})]})]}),A&&(0,R.jsxs)(`div`,{ref:Ke,className:`relative shrink-0`,children:[(0,R.jsx)(`button`,{ref:qe,id:`work-task-actions-trigger`,type:`button`,"data-testid":`work-task-actions-button`,onClick:()=>J(e=>({taskId:A.id,open:e.taskId===A.id?!e.open:!0})),onKeyDown:e=>{e.key!==`ArrowDown`&&e.key!==`ArrowUp`||(e.preventDefault(),J({taskId:A.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":Ge,"aria-controls":Ge?`work-task-actions-menu`:void 0,children:(0,R.jsx)(w,{className:`h-4 w-4`})}),Ge&&(0,R.jsx)(`div`,{ref:Je,id:`work-task-actions-menu`,role:`menu`,"aria-labelledby":`work-task-actions-trigger`,onKeyDown:Ze,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,R.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`work-delete-task-button`,onClick:()=>{Xe(!0),ft(A.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,R.jsx)(E,{className:`h-3.5 w-3.5`}),e(`work.tasks.delete`,{defaultValue:`Delete task`})]})})]})]}),(Q||M)&&(0,R.jsxs)(`div`,{className:N(`flex shrink-0 items-center gap-2 border-b px-4 py-2 text-xs`,Q?`border-error-500/20 bg-error-500/10 text-error-700`:`border-amber-500/20 bg-amber-500/10 text-ink`),children:[(0,R.jsx)(T,{className:`h-4 w-4 shrink-0`}),(0,R.jsx)(`span`,{dir:`auto`,className:`min-w-0 flex-1`,children:Q?k?.reason||e(`work.runtime.reason`,{defaultValue:`Docker and an available Ollama or plugin model provider are required.`}):M}),M&&!Q&&(0,R.jsx)(`button`,{type:`button`,className:`rounded-md p-1 hover:bg-black/5`,onClick:Ne,"aria-label":e(`common.close`),children:`×`})]}),a?A?(0,R.jsx)(Ye,{userId:h,mobileSurface:G,conversation:(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(Le,{task:A,user:m,liveRun:nt,loading:ie,loadingOlder:ae,onLoadOlder:()=>_e(A.id)}),(0,R.jsx)(Ee,{models:xt,selectorModels:U,modelKey:yt,running:vt,loading:se,disabled:Q,remoteDisclosureDismissed:u.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:g,onModelChange:ut,onDismissRemoteDisclosure:wt,onModelsRefresh:O,onSubmit:lt,onCancel:dt},A.id)]}),workspace:(0,R.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1`,children:(0,R.jsx)(Dt,{task:A,liveRun:nt,files:ne,selectedFile:j,loadingFiles:oe,actionLoading:se,onLoadFiles:e=>H(A.id,e),onLoadFile:e=>Oe(A.id,e),onClearSelectedFile:ke,onSaveFile:ht,onStartPreview:t=>mt(()=>je(A.id,t),e(`work.toasts.previewFailed`,{defaultValue:`Could not start the preview.`})),onStopPreview:()=>mt(()=>Me(A.id),e(`work.toasts.previewStopFailed`,{defaultValue:`Could not stop the preview.`})),onDirtyChange:ze,terminal:k?.terminal},A.id)})}):(0,R.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col items-center justify-center px-6 text-center`,children:ie?(0,R.jsx)(`div`,{className:`text-sm text-ink-muted`,children:e(`work.tasks.loading`,{defaultValue:`Loading task…`})}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(T,{className:`mb-3 h-8 w-8 text-ink-subtle`}),(0,R.jsx)(`h2`,{className:`text-lg font-semibold text-ink`,children:e(`work.tasks.notFound`,{defaultValue:`This Work task is unavailable`})}),(0,R.jsxs)(`button`,{type:`button`,onClick:ct,className:`mt-4 inline-flex items-center gap-1.5 text-sm font-medium text-primary-600 hover:text-primary-700`,children:[(0,R.jsx)(d,{className:`h-4 w-4 rtl:rotate-180`}),e(`work.tasks.back`,{defaultValue:`Start a new task`})]})]})}):(0,R.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,R.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-20 sm:px-8 sm:py-24`,children:[(0,R.jsxs)(`div`,{className:`flex flex-col items-center text-center`,children:[(0,R.jsx)(`h2`,{className:`max-w-3xl text-balance text-[clamp(2.65rem,7vw,5.25rem)] font-light leading-[0.98] tracking-[-0.055em] text-ink rtl:leading-[1.12] rtl:tracking-normal`,children:e(`work.landing.title`,{defaultValue:`Start a new Work task`})}),(0,R.jsx)(`p`,{className:`mt-4 max-w-xl text-balance text-base leading-relaxed text-ink-muted sm:text-lg`,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&&(0,R.jsxs)(`div`,{className:`mt-8 w-full max-w-2xl`,children:[(0,R.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,R.jsx)(`input`,{id:`work-host-path`,"data-testid":`work-host-path`,value:Be,onChange:e=>Ve(e.target.value),spellCheck:!1,placeholder:Ue[0]?`${Ue[0]}/my-project`:`/path/to/folder`,className:`w-full 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,R.jsx)(`p`,{className:`mt-1.5 text-[11px] leading-relaxed text-ink-subtle`,children:Be.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,R.jsx)(Ee,{variant:`landing`,models:W,selectorModels:U,modelKey:Qe?.key||``,running:!1,loading:se,disabled:Q,remoteDisclosureDismissed:u.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:g,onModelChange:ut,onDismissRemoteDisclosure:wt,onModelsRefresh:O,onSubmit:lt,onCancel:dt}),(0,R.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,R.jsx)(l,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,R.jsx)(`span`,{children:e(`work.composer.hint`,{defaultValue:`Each task keeps its own files and history. Review model output before using it.`})})]})]})})]})})}export{jt as default};
@@ -1,19 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/authStore-mOYH_AXI.js","js/rolldown-runtime-QTnfLwEv.js","js/router-vendor-BjDI9mRe.js","js/markdown-core-GI9BPwrB.js","js/ui-vendor-DohPFHDW.js","js/utils-vendor-Cbaj0BC5.js","js/demoMode-BhEpMVh5.js","js/logger-DbNs3-DK.js","js/utils-DmZD5uA3.js","js/appStore-Bw-8Exsx.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,p as n}from"./router-vendor-BjDI9mRe.js";import{a as r}from"./utils-vendor-Cbaj0BC5.js";import{n as i}from"./demoMode-BhEpMVh5.js";import{n as a,t as o}from"./logger-DbNs3-DK.js";var s=o(`config`),c=window.location.protocol===`file:`?`http://localhost:3001/api`:`${window.location.origin}/api`,l=a(),u=()=>{l&&(s.debug(`API_BASE_URL configured as:`,c),s.debug(`Window location:`,window.location),s.debug(`Environment variables:`,{BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_APP_VERSION:`0.17.0`}))},d=o(`api`);u(),d.debug(`User agent:`,navigator.userAgent),d.debug(`Demo mode detected:`,i());var f=(e,t=!0)=>new Promise(n=>{setTimeout(()=>{n({success:t,data:e,error:t?void 0:`Demo mode: Backend not available`})},500)}),p=r.create({baseURL:c,timeout:3e5});p.interceptors.request.use(e=>{let t=localStorage.getItem(`auth-token`);return t&&(e.headers.Authorization=`Bearer ${t}`),e},e=>Promise.reject(e)),p.interceptors.response.use(e=>e,e=>{if(e.response?.status===401){d.warn(`Session expired or unauthorized, logging out...`),localStorage.removeItem(`auth-token`),t(async()=>{let{useAuthStore:e}=await import(`./authStore-mOYH_AXI.js`).then(e=>e.t);return{useAuthStore:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(({useAuthStore:e})=>{e.getState().logout()});let e=window.location.protocol===`file:`;return(e?window.location.hash:window.location.pathname).includes(`/login`)||(window.location.href=e?`#/login`:`/login`),Promise.reject(Error(`Session expired`))}return d.error(`API Error:`,e),Promise.reject(e)});var ee={getModels:()=>i()?f([]):p.get(`/agent-clis/models`).then(e=>e.data)},m=`0.17.0`,h={login:e=>i()?f({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:m}}):p.post(`/auth/login`,e).then(e=>e.data),signup:e=>i()?f({user:{id:`demo-user-new`,username:e.username,email:e.email||``,role:`user`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:m,turnstile:{enabled:!1}}}):p.post(`/auth/signup`,e).then(e=>e.data),logout:()=>i()?f(void 0):p.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(d.debug(`getSystemInfo called, demo mode:`,i()),i()?f({requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:m,turnstile:{enabled:!1}}):(d.debug(`Making API call to:`,c+`/auth/system-info`),d.debug(`Full URL from:`,window.location.origin,`-> API:`,c+`/auth/system-info`),p.get(`/auth/system-info`).then(e=>(d.debug(`getSystemInfo response:`,e.data),e.data)).catch(e=>{throw d.debug(`getSystemInfo error:`,e),e.response&&(d.debug(`Error response data:`,e.response.data),d.debug(`Error status:`,e.response.status),d.debug(`Error headers:`,e.response.headers)),e.request&&d.debug(`Network error - no response received:`,e.request),d.debug(`Error config:`,e.config),e}))),verifyToken:()=>i()?f({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>i()?f({encryptionKey:`demo-encryption-key-not-real`}):p.get(`/auth/encryption-key`).then(e=>e.data),updateModelPullSetting:e=>i()?f({requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:e,version:m,turnstile:{enabled:!1}}):p.patch(`/auth/system-settings/model-pull`,{allowUserModelPull:e}).then(e=>e.data)},g={getUsers:()=>i()?f([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):p.get(`/users`).then(e=>e.data),createUser:e=>i()?f({id:`new-user-`+Date.now(),username:e.username,email:e.email,role:e.role,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.post(`/users`,e).then(e=>e.data),updateUser:(e,t)=>i()?f({id:e,username:t.username||`demo`,email:t.email||`demo@example.com`,role:t.role||`user`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/${e}`,t).then(e=>e.data),deleteUser:e=>i()?f(void 0):p.delete(`/users/${e}`).then(e=>e.data),updateMyAvatar:e=>i()?f({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,avatar:e,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/me/avatar`,{avatar:e}).then(e=>e.data)},_=[{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`}}],v=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:_[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()}],y=v(),b={theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2:3b`,defaultProviderType:`ollama`,defaultProviderId: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,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},x={...b,theme:{...b.theme},generationOptions:{...b.generationOptions},embeddingSettings:{...b.embeddingSettings},titleSettings:{...b.titleSettings},backgroundSettings:{...b.backgroundSettings}},te=()=>x,S=e=>{let t=x.backgroundSettings||b.backgroundSettings;return x={...x,...e,theme:{...x.theme,...e.theme},generationOptions:{...x.generationOptions,...e.generationOptions},embeddingSettings:{...x.embeddingSettings,...e.embeddingSettings},titleSettings:e.titleSettings?{...x.titleSettings||b.titleSettings,...e.titleSettings}:x.titleSettings,backgroundSettings:e.backgroundSettings?{...t,...e.backgroundSettings}:x.backgroundSettings},x},C={getSessions:()=>p.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n,r,i)=>p.post(`/chat/sessions`,{model:e,title:t,personaId:n,providerType:r,providerId:i}).then(e=>e.data),getSession:e=>{if(i()){let t=v().find(t=>t.id===e);return t?f(t):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return p.get(`/chat/sessions/${e}`).then(e=>e.data)},updateSession:(e,t)=>{if(i()){let n=y.findIndex(t=>t.id===e),r=y[n];if(r){let e={...r,...t,updatedAt:Date.now()};return y[n]=e,f(e)}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return p.put(`/chat/sessions/${e}`,t).then(e=>e.data)},deleteSession:e=>i()?f(null):p.delete(`/chat/sessions/${e}`).then(e=>e.data),clearAllSessions:()=>p.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(e,t,n,r,a)=>i()?f({title:n.substring(0,30)+(n.length>30?`...`:``),source:`fallback`,updatedAt:Date.now()}):p.post(`/chat/sessions/${e}/generate-title`,{model:t,message:n,providerType:r,providerId:a}).then(e=>e.data),sendMessage:(e,t,n)=>p.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>p.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(e,t,n)=>i()?f({}):p.put(`/chat/sessions/${e}/messages/${t}`,n).then(e=>e.data),generateChatResponse:(e,t,n)=>p.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,t,n)=>({subscribe:async(r,i,a)=>{try{let o=await fetch(`${c}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:t,options:n})});if(!o.ok)throw Error(`HTTP error! status: ${o.status}`);let s=o.body?.getReader();if(!s)throw Error(`No response body reader available`);let l=new TextDecoder,u=``,f=()=>{s.read().then(({done:e,value:t})=>{if(e){a?.();return}u+=l.decode(t,{stream:!0});let n=u.split(`
3
- `);u=n.pop()||``;for(let e of n){let t=e.trim();if(t.startsWith(`data: `)){let e=t.slice(6);if(e===`[DONE]`){a?.();return}try{let t=JSON.parse(e);if(r(t),t.type===`done`||t.type===`error`){t.type===`error`?i?.(t.error):a?.();return}}catch(e){d.error(`Failed to parse SSE data:`,e)}}}f()}).catch(e=>{i?.(e instanceof Error?e:Error(String(e)))})};return f(),()=>s.cancel()}catch(e){return i?.(e instanceof Error?e:Error(String(e))),()=>{}}}}),getMessageBranches:(e,t)=>i()?f([]):p.get(`/chat/sessions/${e}/messages/${t}/branches`).then(e=>e.data),switchMessageBranch:(e,t,n)=>i()?f({}):p.post(`/chat/sessions/${e}/messages/${t}/branch`,{branchIndex:n}).then(e=>e.data),createMessageBranch:(e,t,n)=>i()?f({}):p.post(`/chat/sessions/${e}/messages/${t}/branches`,{...n}).then(e=>e.data)},w={uploadDocument:(e,t)=>{if(i())return f({id:`demo-doc-`+Date.now(),filename:e.name,fileType:e.name.endsWith(`.pdf`)?`pdf`:`txt`,size:e.size,sessionId:t,uploadedAt:Date.now()});let n=new FormData;return n.append(`document`,e),t&&n.append(`sessionId`,t),p.post(`/documents/upload`,n).then(e=>e.data)},getDocuments:e=>{if(i())return f([]);let t=e?`/documents/session/${e}`:`/documents`;return p.get(t).then(e=>e.data)},getDocument:e=>i()?f({id:e,filename:`demo-document.pdf`,fileType:`pdf`,size:1024,content:`Demo document content...`,uploadedAt:Date.now()}):p.get(`/documents/${e}`).then(e=>e.data),searchDocuments:(e,t,n)=>i()?f([]):p.post(`/documents/search`,{query:e,sessionId:t,limit:n}).then(e=>e.data),deleteDocument:e=>i()?f(void 0):p.delete(`/documents/${e}`).then(e=>e.data),getEmbeddingStatus:()=>i()?f({available:!1,model:`nomic-embed-text`,chunksWithEmbeddings:0,totalChunks:0}):p.get(`/documents/embeddings/status`).then(e=>e.data),regenerateEmbeddings:()=>i()?f(void 0):p.post(`/documents/embeddings/regenerate`).then(e=>e.data)},ne={getModels:()=>i()?f([{id:`nomic-embed-text`,name:`nomic-embed-text`,description:`Ollama - Default embedding model`,provider:`ollama`,dimensions:0,isDetectedEmbedding:!0}]):p.get(`/embeddings/models`).then(e=>e.data)},re={getModels:e=>i()?f([{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}]):p.get(`/huggingface-hub/models`,{params:e}).then(e=>e.data),getTrending:e=>i()?f([]):p.get(`/huggingface-hub/trending`,{params:e}).then(e=>e.data),getModel:(e,t)=>i()?f({id:`${e}/${t}`,modelId:`${e}/${t}`,author:e,downloads:0,likes:0,tags:[],gated:!1}):p.get(`/huggingface-hub/models/${e}/${t}`).then(e=>e.data),getTasks:()=>i()?f([`text-generation`,`text-to-speech`,`text-to-image`]):p.get(`/huggingface-hub/tasks`).then(e=>e.data),clearCache:()=>i()?f(!0):p.post(`/huggingface-hub/cache/clear`).then(e=>e.data),getGgufFiles:(e,t)=>i()?f([{filename:`model-Q4_K_M.gguf`,size:45e8,sizeFormatted:`4.19 GB`,quantization:`Q4_K_M`,url:`https://huggingface.co/${e}/${t}/resolve/main/model-Q4_K_M.gguf`,ollamaCommand:`hf.co/${e}/${t}:Q4_K_M`}]):p.get(`/huggingface-hub/models/${e}/${t}/gguf`).then(e=>e.data),hasGgufFiles:(e,t)=>i()?f({hasGguf:!1,count:0}):p.get(`/huggingface-hub/models/${e}/${t}/has-gguf`).then(e=>e.data)},T=/^data:image\/[a-z0-9][a-z0-9.+-]*(?:;[a-z0-9!#$&^_.+-]+=[^;,]*)*;base64,[a-z0-9+/]+={0,2}$/i,E=/^data:(image\/[a-z0-9][a-z0-9.+-]*)(?:;[a-z0-9!#$&^_.+-]+=[^;,]*)*;base64,/i,D={"image/jpg":`image/jpeg`,"image/x-png":`image/png`},O=new Set([`image/apng`,`image/avif`,`image/bmp`,`image/gif`,`image/heic`,`image/heif`,`image/jpeg`,`image/png`,`image/tiff`,`image/vnd.microsoft.icon`,`image/webp`,`image/x-icon`]);function k(e){if(!e)return null;let t=e.split(`;`,1)[0].trim().toLowerCase(),n=D[t]||t;return O.has(n)?n:null}function A(e,t,n){if(t)return e.find(e=>e.model===t&&(!n||e.plugin===n))}function ie(e,t,n){let r=A(e,t,n);return r||n?r:e[0]}function ae(e,t){return t?.pluginId?e.find(e=>e.id===t.pluginId):(t?.model?e.find(e=>e.models.includes(t.model)):void 0)||e[0]}function j(e){let t=e.b64_json?.trim();if(t)return`data:${k(e.mime_type)||`image/png`};base64,${t}`;let n=e.url?.trim();if(!n)return null;let r=E.exec(n)?.[1];if(T.test(n)&&k(r))return n;try{let e=new URL(n);return e.protocol===`http:`||e.protocol===`https:`?n:null}catch{return null}}function M(e){switch(E.exec(e.trim())?.[1].toLowerCase()){case`image/jpeg`:case`image/jpg`:return`jpg`;case`image/webp`:return`webp`;case`image/gif`:return`gif`;case`image/avif`:return`avif`;default:return`png`}}function N(e){return`${encodeURIComponent(e.plugin)}::${encodeURIComponent(e.model)}`}function P(e,t,n,r){let i=(e??[]).filter(Boolean);return i.length===0?t||n||r:t&&i.includes(t)?t:n&&i.includes(n)?n:i[0]}var F={getModels:()=>i()?f([{model:`gpt-image-2`,plugin:`openai`,config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):p.get(`/image-gen/models`).then(e=>e.data),getPlugins:()=>i()?f([{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`}}]):p.get(`/image-gen/plugins`).then(e=>e.data),getConfig:e=>i()?f({sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}):p.get(`/image-gen/config/${e}`).then(e=>e.data),generate:e=>i()?f({images:[{url:`https://placehold.co/1024x1024/purple/white?text=Demo+Image`,revised_prompt:e.prompt}],model:e.model,pluginId:e.pluginId}):p.post(`/image-gen/generate`,e).then(e=>e.data),getGallery:e=>i()?f({images:[],total:0}):p.get(`/image-gen/gallery`,{params:e}).then(e=>e.data),getGalleryImage:e=>i()?f({id:e,userId:`demo`,prompt:`Demo image prompt`,model:`dall-e-3`,imageData:`https://placehold.co/1024x1024/purple/white?text=Demo`,createdAt:Date.now()}):p.get(`/image-gen/gallery/${e}`).then(e=>e.data),deleteGalleryImage:e=>i()?f(void 0):p.delete(`/image-gen/gallery/${e}`).then(e=>e.data)},I={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.`},L={status:()=>i()?f(I):p.get(`/libre-claw/status`).then(e=>e.data),dashboard:()=>i()?f({url:I.dashboardUrl}):p.get(`/libre-claw/dashboard`).then(e=>e.data),currentModel:()=>i()?f({provider:`openrouter`,model:`openrouter/auto`}):p.get(`/libre-claw/config/model`).then(e=>e.data),updateModel:(e,t,n=!1)=>i()?f({provider:e,model:t,persist_global:n}):p.patch(`/libre-claw/config/model`,{provider:e,model:t,persist_global:n}).then(e=>e.data),currentFallback:()=>i()?f({enabled:!1,routes:[]}):p.get(`/libre-claw/config/fallback`).then(e=>e.data),updateFallback:e=>i()?f(e):p.patch(`/libre-claw/config/fallback`,e).then(e=>e.data),updateTheme:(e,t=!0)=>i()?f({theme:e,label:e,persist_global:t}):p.patch(`/libre-claw/config/theme`,{theme:e,persist_global:t}).then(e=>e.data),usage:(e=``,t=250)=>{let n=new URLSearchParams({limit:String(t)});return e&&n.set(`provider`,e),i()?f({summary:{},records:[],text:``}):p.get(`/libre-claw/usage?${n.toString()}`).then(e=>e.data)},listRuns:(e=20)=>i()?f({runs:[]}):p.get(`/libre-claw/runs?limit=${e}`).then(e=>e.data),startRun:e=>{if(i()){let t=new Date().toISOString();return f({run:{run_id:`demo-${Date.now()}`,state:`queued`,title:e.message.slice(0,80)||`Libre Claw demo run`,kind:e.kind||`chat`,provider:e.provider||`openrouter`,model:e.model||`openrouter/auto`,working_directory:``,created_at:t,updated_at:t}})}return p.post(`/libre-claw/runs`,e).then(e=>e.data)},getRun:e=>i()?f({run_id:e}):p.get(`/libre-claw/runs/${encodeURIComponent(e)}`).then(e=>e.data),getEvents:(e,t=0)=>i()?f({events:[]}):p.get(`/libre-claw/runs/${encodeURIComponent(e)}/events?after=${t}`).then(e=>e.data),cancelRun:e=>i()?f({run_id:e,cancelled:!0}):p.post(`/libre-claw/runs/${encodeURIComponent(e)}/cancel`).then(e=>e.data),resolvePermission:(e,t,n)=>i()?f({run_id:e,tool_call_id:t,resolution:n}):p.post(`/libre-claw/runs/${encodeURIComponent(e)}/permissions/${encodeURIComponent(t)}`,{resolution:n}).then(e=>e.data),listAutomations:(e=50)=>i()?f({automations:[]}):p.get(`/libre-claw/automations?limit=${e}`).then(e=>e.data),createAutomation:e=>i()?f({...e,automation_id:`demo-${Date.now()}`}):p.post(`/libre-claw/automations`,e).then(e=>e.data),updateAutomation:(e,t)=>i()?f({...t,automation_id:e}):p.patch(`/libre-claw/automations/${encodeURIComponent(e)}`,t).then(e=>e.data),pauseAutomation:e=>i()?f({automation_id:e,status:`paused`}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/pause`).then(e=>e.data),resumeAutomation:e=>i()?f({automation_id:e,status:`active`}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/resume`).then(e=>e.data),runAutomationNow:e=>i()?f({automation_id:e,run:!0}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/run`).then(e=>e.data),deleteAutomation:e=>i()?f({automation_id:e,deleted:!0}):p.delete(`/libre-claw/automations/${encodeURIComponent(e)}`).then(e=>e.data)},R={checkHealth:()=>i()?f({status:`offline`},!1):p.get(`/ollama/health`).then(e=>e.data),getModels:()=>i()?f(_):p.get(`/ollama/models`).then(e=>e.data),pullModel:e=>i()?f(null,!1):p.post(`/ollama/models/pull`,{name:e}).then(e=>e.data),pullModelStream:(e,t,n,r)=>{if(i()){let e=0,r=setInterval(()=>{e+=Math.random()*20,e>=100?(e=100,t({status:`success`,total:100,completed:100,percent:100}),clearInterval(r),setTimeout(n,500)):t({status:`pulling`,total:100,completed:e,percent:Math.round(e)})},1e3);return()=>clearInterval(r)}let a=new URLSearchParams({model:e}),o=localStorage.getItem(`auth-token`);o&&a.set(`token`,o);let s=new EventSource(`${c}/ollama/pull/stream?${a.toString()}`);return s.onmessage=e=>{let i=JSON.parse(e.data);switch(i.type){case`progress`:t({status:i.status,digest:i.digest,total:i.total,completed:i.completed,percent:i.percent});break;case`complete`:s.close(),n();break;case`error`:s.close(),r(i.error);break}},s.onerror=()=>{s.close(),r(`Connection to server lost`)},()=>{s.close()}},deleteModel:e=>i()?f(null,!1):p.delete(`/ollama/models`,{params:{name:e}}).then(e=>e.data),showModel:(e,t=!1)=>{if(i()){let t=_.find(t=>t.name===e);return f(t||null,!!t)}return p.get(`/ollama/models/show`,{params:{name:e,verbose:t}}).then(e=>e.data)},createModel:e=>i()?f(null,!1):p.post(`/ollama/models`,e).then(e=>e.data),copyModel:(e,t)=>i()?f(null,!1):p.post(`/ollama/models/copy`,{source:e,destination:t}).then(e=>e.data),pushModel:e=>i()?f(null,!1):p.post(`/ollama/models/push`,{name:e}).then(e=>e.data),pullAllModels:()=>i()?f(null,!1):p.post(`/ollama/models/pull-all`).then(e=>e.data),pullAllModelsStream:(e,t,n)=>{if(i()){let n=_,r=0,i=setInterval(()=>{r++,r<=n.length&&e({current:r,total:n.length,modelName:n[r-1]?.name||`demo-model`,status:Math.random()>.1?`success`:`error`,error:Math.random()>.1?void 0:`Demo error`}),r>=n.length&&(clearInterval(i),setTimeout(t,500))},1e3);return}let r=new EventSource(`${c}/ollama/models/pull-all/stream`);r.onmessage=i=>{let a=JSON.parse(i.data);switch(a.type){case`progress`:e({current:a.current,total:a.total,modelName:a.modelName,status:a.status,error:a.error});break;case`complete`:r.close(),t();break;case`error`:r.close(),n(a.error);break}},r.onerror=()=>{r.close(),n(`Connection to server lost`)}},generateEmbeddings:e=>i()?f({embeddings:[[]]},!1):p.post(`/ollama/embed`,e).then(e=>e.data),listRunningModels:()=>i()?f([]):p.get(`/ollama/running`).then(e=>e.data),unloadModel:e=>i()?f(null):p.post(`/ollama/models/unload`,{name:e}).then(e=>e.data),unloadAllModels:()=>i()?f(null):p.post(`/ollama/models/unload-all`).then(e=>e.data),getVersion:()=>i()?f({version:`demo-mode`},!1):p.get(`/ollama/version`).then(e=>e.data),chatCompletion:e=>i()?f({message:{content:`Demo response`,role:`assistant`}},!1):p.post(`/ollama/chat`,e).then(e=>e.data),checkBlobExists:e=>i()?Promise.resolve(!1):p.head(`/ollama/blobs/${e}`).then(()=>!0).catch(()=>!1),pushBlob:(e,t)=>i()?f(null,!1):p.post(`/ollama/blobs/${e}`,t,{headers:{"Content-Type":`application/octet-stream`}}).then(e=>e.data),generateLegacyEmbeddings:e=>i()?f({embedding:[]},!1):p.post(`/ollama/embeddings`,e).then(e=>e.data),getLibraryModels:e=>{if(i())return e?.category===`cloud`?f([{name:`gpt-oss:cloud`,description:`Demo cloud model using Ollama cloud naming`,category:`cloud`,sizes:[`cloud`],pulls:`Cloud`,tags:[`cloud`]}]):f([{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 t=new URLSearchParams;e?.search&&t.set(`search`,e.search),e?.sort&&t.set(`sort`,e.sort),e?.category&&t.set(`category`,e.category);let n=t.toString();return p.get(`/ollama/library${n?`?${n}`:``}`).then(e=>e.data)}},z=[[`#2563eb`,`#7c3aed`],[`#0891b2`,`#2563eb`],[`#0f766e`,`#2563eb`],[`#be123c`,`#7c3aed`],[`#ff7b52`,`#dc2626`]],B=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)},V=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`),H=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`},U=(e,t=128)=>{let n=e.trim()||`AI Persona`,r=B(n),[i,a]=z[r%z.length],o=V(H(n)),s=`persona-avatar-${r}-${t}`,c=t>=96?44:24,l=`
4
- <svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 ${t} ${t}" role="img" aria-label="${V(n)} avatar">
5
- <defs>
6
- <linearGradient id="${s}" x1="0" y1="0" x2="1" y2="1">
7
- <stop offset="0%" stop-color="${i}" />
8
- <stop offset="100%" stop-color="${a}" />
9
- </linearGradient>
10
- </defs>
11
- <rect width="${t}" height="${t}" rx="${Math.round(t*.22)}" fill="url(#${s})" />
12
- <circle cx="${t*.22}" cy="${t*.22}" r="${t*.26}" fill="rgba(255,255,255,0.16)" />
13
- <text x="50%" y="52%" dominant-baseline="middle" text-anchor="middle" fill="white" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="${c}" font-weight="700">${o}</text>
14
- </svg>
15
- `;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(l)}`},W=(e,t=128)=>e.avatar?.trim()||U(e.name,t),G=(e,t,n=128)=>{e.onerror=null,e.src=U(t,n)},K={getPersonas:()=>i()?f([{id:`demo-1`,user_id:`default`,name:`Creative Assistant`,description:`Helpful assistant for creative tasks`,model:`llama3.3:latest`,parameters:{temperature:.8,top_p:.9,context_window:4096,system_prompt:`You are a creative and helpful assistant. Provide thoughtful and engaging responses.`},avatar:U(`Creative Assistant`,128),created_at:Date.now()-864e5,updated_at:Date.now()-864e5},{id:`demo-2`,user_id:`default`,name:`Research Assistant`,description:`Academic assistant for research and learning`,model:`qwen3:7b`,parameters:{temperature:.3,top_p:.8,context_window:8192,system_prompt:`You are a knowledgeable research assistant. Provide detailed, informative explanations.`},avatar:U(`Research Assistant`,128),created_at:Date.now()-1728e5,updated_at:Date.now()-1728e5}]):p.get(`/personas`).then(e=>e.data),getPersona:e=>i()?f({id:e,user_id:`default`,name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()}):p.get(`/personas/${e}`).then(e=>e.data),createPersona:e=>i()?f({id:`demo-`+Date.now(),user_id:`default`,...e,created_at:Date.now(),updated_at:Date.now()}):p.post(`/personas`,e).then(e=>e.data),updatePersona:(e,t)=>i()?f({id:e,user_id:`default`,name:t.name||`Updated Sample Assistant`,description:t.description,model:t.model||`llama3.2:latest`,parameters:t.parameters||{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},avatar:t.avatar,background:t.background,created_at:Date.now()-864e5,updated_at:Date.now()}):p.put(`/personas/${e}`,t).then(e=>e.data),deletePersona:e=>i()?f(void 0):p.delete(`/personas/${e}`).then(e=>e.data),exportPersona:e=>{if(i()){let e={name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,params:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},exportedAt:Date.now(),version:`1.0.0`};return Promise.resolve(e)}return p.get(`/personas/${e}/export`).then(e=>e.data)},importPersona:e=>i()?f({id:`demo-imported-`+Date.now(),user_id:`default`,name:e.name,description:e.description,model:e.model,parameters:e.params,avatar:e.avatar,background:e.background,created_at:Date.now(),updated_at:Date.now(),embedding_model:e.embedding_model,memory_settings:e.memory_settings,mutation_settings:e.mutation_settings}):p.post(`/personas/import`,e).then(e=>e.data),getPersonasCount:()=>i()?f({count:2}):p.get(`/personas/stats/count`).then(e=>e.data),getDefaultParameters:()=>i()?f({temperature:.7,top_p:.9,top_k:40,context_window:4096,max_tokens:1024,system_prompt:``,repeat_penalty:1.1,presence_penalty:0,frequency_penalty:0}):p.get(`/personas/defaults/parameters`).then(e=>e.data),getMemoryStatus:e=>i()?f({status:`active`,memory_count:42,last_backup:Date.now()-864e5,size_mb:2.3}):p.get(`/personas/${e}/memory/status`).then(e=>e.data),wipeMemories:e=>i()?f({deleted_count:42}):p.delete(`/personas/${e}/memory`).then(e=>e.data),backupPersona:e=>{if(i()){let t=JSON.stringify({persona_id:e,backup_date:new Date().toISOString(),data:`demo backup data`});return Promise.resolve(new Blob([t],{type:`application/json`}))}return p.get(`/personas/${e}/backup`,{responseType:`blob`}).then(e=>e.data)},exportPersonaDNA:e=>{if(i()){let t=JSON.stringify({persona_id:e,export_date:new Date().toISOString(),dna:`demo DNA data`,memories:[],learned_behaviors:{}});return Promise.resolve(new Blob([t],{type:`application/json`}))}return p.get(`/personas/${e}/export/dna`,{responseType:`blob`}).then(e=>e.data)},importPersonaDNA:e=>{if(i())return f({id:`demo-dna-`+Date.now(),user_id:`default`,name:`Imported Persona`,description:`Persona imported from DNA`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()});let t=new FormData;return t.append(`dnaFile`,e),p.post(`/personas/import/dna`,t).then(e=>e.data)},downloadPersona:async(e,t)=>{try{let n=await K.exportPersona(e),r=new Blob([JSON.stringify(n,null,2)],{type:`application/json`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${t}.json`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}catch(e){throw d.error(`Error while downloading persona:`,e),Error(`Failed to download persona: ${e instanceof Error?e.message:String(e)}`)}}},oe={getAllPlugins:()=>i()?f([]):p.get(`/plugins`).then(e=>e.data),discoverModels:e=>i()?f({models:[],outcome:`unavailable`}):p.post(`/plugins/discover/${encodeURIComponent(e)}`).then(e=>e.data),uploadPlugin:e=>{if(i())return f({},!1);let t=new FormData;return t.append(`plugin`,e),p.post(`/plugins/upload`,t).then(e=>e.data)},installPlugin:e=>i()?f({},!1):p.post(`/plugins/install`,e).then(e=>e.data),updatePlugin:(e,t)=>i()?f({},!1):p.put(`/plugins/${e}`,t).then(e=>e.data),deletePlugin:e=>i()?f(void 0):p.delete(`/plugins/${e}`).then(e=>e.data),activatePlugin:e=>i()?f(!1,!1):p.post(`/plugins/activate/${e}`).then(e=>e.data),deactivatePlugin:e=>{if(i())return f(void 0);let t=e?`/plugins/deactivate/${e}`:`/plugins/deactivate`;return p.post(t).then(e=>e.data)},getActivePlugin:()=>i()?f(null):p.get(`/plugins/active`).then(e=>e.data),getPluginStatus:()=>i()?f([]):p.get(`/plugins/status`).then(e=>e.data),exportPlugin:e=>i()?Promise.resolve(new Blob([`{}`],{type:`application/json`})):p.get(`/plugins/${e}/export`,{responseType:`blob`}).then(e=>e.data),getCredentials:()=>i()?f([]):p.get(`/plugins/credentials/all`).then(e=>e.data),setApiKey:(e,t)=>i()?f(!1,!1):p.post(`/plugins/${e}/credentials`,{api_key:t}).then(e=>e.data),deleteApiKey:e=>i()?f(!1,!1):p.delete(`/plugins/${e}/credentials`).then(e=>e.data),checkApiKey:e=>i()?f(!1):p.get(`/plugins/${e}/credentials/check`).then(e=>e.data),getVariables:e=>i()?f({}):p.get(`/plugins/${e}/variables`).then(e=>e.data),setVariables:(e,t,n=[])=>i()?f(!0):p.put(`/plugins/${e}/variables`,{variables:t,unset:n}).then(e=>e.data),resetVariables:e=>i()?f(!0):p.delete(`/plugins/${e}/variables`).then(e=>e.data)},q={getPreferences:()=>i()?f(te()):p.get(`/preferences`).then(e=>e.data),updatePreferences:e=>i()?f(S(e)):p.put(`/preferences`,e).then(e=>e.data),setDefaultModel:(e,t,n)=>i()?f(S({defaultModel:e,defaultProviderType:t,defaultProviderId:t===`plugin`?n:null})):p.put(`/preferences/default-model`,{model:e,providerType:t,providerId:n}).then(e=>e.data),setSystemMessage:e=>i()?f(S({systemMessage:e})):p.put(`/preferences/system-message`,{message:e}).then(e=>e.data),setGenerationOptions:e=>i()?f(S({generationOptions:e})):p.put(`/preferences/generation-options`,e).then(e=>e.data),resetGenerationOptions:()=>i()?f(S({generationOptions:b.generationOptions})):p.post(`/preferences/generation-options/reset`).then(e=>e.data),setEmbeddingSettings:e=>i()?f(S({embeddingSettings:e})):p.put(`/preferences/embedding-settings`,e).then(e=>e.data),resetEmbeddingSettings:()=>i()?f(S({embeddingSettings:b.embeddingSettings})):p.post(`/preferences/embedding-settings/reset`).then(e=>e.data),importData:(e,t=`replace`)=>i()?f({theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2`,systemMessage:`You are a helpful assistant.`,generationOptions:{},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},showUsername:!1,workRemoteProviderDisclosureDismissed:!1}):p.post(`/preferences/import`,{data:e,mergeStrategy:t}).then(e=>e.data)},se=new Set([`snapshot`,`run_state`,`reasoning_delta`,`assistant_delta`,`tool_call`,`tool_result`,`usage`,`skill_loaded`,`error`,`done`]),J=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,ce=e=>{if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=Number(e);if(Number.isFinite(t))return t;let n=Date.parse(e);if(Number.isFinite(n))return n}return Date.now()},Y=(e,t,n,r,i)=>{let a=J(e);if(!a)return;let o=Number(a.id??t),s=String(a.type??n??``),c=String(a.taskId??r),l=String(a.runId??i);if(!Number.isSafeInteger(o)||o<0||!se.has(s)||c!==r||l!==i)return;let u=a.data;return{id:o,type:s,taskId:c,runId:l,timestamp:ce(a.timestamp),data:J(u)||(u===void 0?{}:{content:u})}},X=(e,t,n)=>{let r,i,a=[];for(let t of e.split(`
16
- `)){if(!t||t.startsWith(`:`))continue;let e=t.indexOf(`:`),n=e===-1?t:t.slice(0,e),o=e===-1?``:t.slice(e+1),s=o.startsWith(` `)?o.slice(1):o;n===`id`&&(r=s),n===`event`&&(i=s),n===`data`&&a.push(s)}if(a.length===0)return;let o=a.join(`
17
- `);if(o===`[DONE]`)return Y({id:r,type:`done`,taskId:t,runId:n,timestamp:Date.now(),data:{}},r,i,t,n);try{return Y(JSON.parse(o),r,i,t,n)}catch{return}},le=class{constructor(e,t,r){n(this,`taskId`,void 0),n(this,`runId`,void 0),n(this,`onEvent`,void 0),n(this,`buffer`,``),this.taskId=e,this.runId=t,this.onEvent=r}push(e){e&&(this.buffer+=e,this.drain())}finish(e=``){if(this.buffer+=e,this.drain(),!this.buffer.trim()){this.buffer=``;return}let t=X(this.buffer.replace(/\r\n?/g,`
18
- `),this.taskId,this.runId);this.buffer=``,t&&this.onEvent(t)}drain(){let e=/\r?\n\r?\n/.exec(this.buffer);for(;e?.index!==void 0;){let t=this.buffer.slice(0,e.index).replace(/\r\n?/g,`
19
- `);this.buffer=this.buffer.slice(e.index+e[0].length);let n=X(t,this.taskId,this.runId);n&&this.onEvent(n),e=/\r?\n\r?\n/.exec(this.buffer)}}},ue=async e=>{try{let t=await e.json(),n=typeof t.error==`string`?t.error:typeof t.message==`string`?t.message:void 0;if(n)return Error(n)}catch{}return Error(`Work event stream failed with status ${e.status}.`)},de=async({taskId:e,runId:t,after:n,signal:r,onEvent:i})=>{let a=localStorage.getItem(`auth-token`),o=new URL(`${c}/work/tasks/${encodeURIComponent(e)}/runs/${encodeURIComponent(t)}/events`,window.location.origin);o.searchParams.set(`after`,String(Math.max(0,Math.trunc(n))));let s=await fetch(o,{method:`GET`,headers:{Accept:`text/event-stream`,...a?{Authorization:`Bearer ${a}`}:{}},cache:`no-store`,credentials:`same-origin`,signal:r});if(!s.ok)throw await ue(s);if(!s.body)throw Error(`Work event stream has no response body.`);let l=s.body.getReader(),u=new TextDecoder,d=new le(e,t,i);try{for(;!r.aborted;){let{done:e,value:t}=await l.read();if(e)break;d.push(u.decode(t,{stream:!0}))}d.finish(u.decode())}finally{l.releaseLock()}},Z=e=>`/work/tasks/${encodeURIComponent(e)}`,fe={capabilities:()=>p.get(`/work/capabilities`).then(e=>e.data),listTasks:()=>p.get(`/work/tasks`).then(e=>e.data),createTask:e=>p.post(`/work/tasks`,e).then(e=>e.data),getTask:e=>p.get(Z(e)).then(e=>e.data),getMessages:(e,t,n=200)=>p.get(`${Z(e)}/messages`,{params:{before:t,limit:n}}).then(e=>e.data),updateTask:(e,t)=>p.patch(Z(e),t).then(e=>e.data),deleteTask:e=>p.delete(Z(e)).then(e=>e.data),startRun:(e,t)=>p.post(`${Z(e)}/runs`,t).then(e=>e.data),cancelRun:e=>p.post(`${Z(e)}/cancel`).then(e=>e.data),streamRunEvents:e=>de(e),listFiles:(e,t=``)=>p.get(`${Z(e)}/files`,{params:{path:t}}).then(e=>{let t=e.data;return t.data&&!Array.isArray(t.data)?{...t,data:t.data.entries}:t}),getFile:(e,t)=>p.get(`${Z(e)}/file`,{params:{path:t}}).then(e=>e.data),saveFile:(e,t,n,r)=>p.put(`${Z(e)}/file`,{content:n,expectedUpdatedAt:r},{params:{path:t}}).then(e=>e.data),startPreview:(e,t)=>p.post(`${Z(e)}/preview/start`,t?{command:t}:{}).then(e=>e.data),stopPreview:e=>p.post(`${Z(e)}/preview/stop`).then(e=>e.data)};function Q(e,t,n){if(t)return e.find(e=>e.model===t&&(!n||e.plugin===n))}function pe(e,t,n){return Q(e,t,n)||e[0]}function me(e){return`${encodeURIComponent(e.plugin)}::${encodeURIComponent(e.model)}`}var $={getModels:()=>i()?f([{model:`tts-1`,plugin:`openai`,config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096}}]):p.get(`/tts/models`).then(e=>e.data),getPlugins:()=>i()?f([{id:`openai`,name:`OpenAI GPT`,models:[`tts-1`,`tts-1-hd`],config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`}}]):p.get(`/tts/plugins`).then(e=>e.data),getVoices:e=>i()?f({voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096,supports_streaming:!1}):p.get(`/tts/voices/${e}`).then(e=>e.data),generateBase64:e=>{if(i())return f({audio:``,format:e.response_format||`mp3`,mimeType:`audio/mpeg`,size:0});let t={...e,pluginId:e.pluginId||void 0};return p.post(`/tts/generate-base64`,t).then(e=>e.data)},generate:async e=>{if(i())return new Blob([],{type:`audio/mpeg`});let t={...e,pluginId:e.pluginId||void 0};return(await p.post(`/tts/generate`,t,{responseType:`blob`})).data},speak:async(e,t={})=>{try{t.onStart?.();let n=await $.generateBase64({model:t.model||`tts-1`,pluginId:t.pluginId,input:e,voice:t.voice,speed:t.speed,response_format:t.responseFormat});if(!n.success||!n.data?.audio)throw Error(n.message||`Failed to generate speech`);let r=`data:${n.data.mimeType};base64,${n.data.audio}`,i=new Audio(r);return i.onended=()=>t.onEnd?.(),i.onerror=()=>t.onError?.(Error(`Audio playback failed`)),await i.play(),i}catch(e){let n=e instanceof Error?e:Error(`Unknown error`);return t.onError?.(n),null}}},he=e({agentCliApi:()=>ee,personaApi:()=>K,preferencesApi:()=>q});export{w as C,g as D,h as E,c as O,re as S,C as T,M as _,$ as a,ie as b,oe as c,G as d,R as f,ae as g,A as h,pe as i,K as l,F as m,Q as n,fe as o,L as p,me as r,q as s,he as t,W as u,j as v,ne as w,P as x,N as y};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-DCD41-l9.js","js/rolldown-runtime-QTnfLwEv.js","js/router-vendor-BjDI9mRe.js","js/markdown-core-GI9BPwrB.js","js/utils-vendor-Cbaj0BC5.js","js/demoMode-BhEpMVh5.js","js/logger-DbNs3-DK.js"])))=>i.map(i=>d[i]);
2
- import{i as e}from"./router-vendor-BjDI9mRe.js";import{o as t,t as n}from"./utils-vendor-Cbaj0BC5.js";import{n as r,t as i}from"./demoMode-BhEpMVh5.js";import{t as a}from"./logger-DbNs3-DK.js";var o=`blue`,s=`#2563eb`,c=[{id:`violet`,label:`Violet`,color:`#7c3aed`,foreground:`#ffffff`},{id:`blue`,label:`Blue`,color:`#2563eb`,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`}],l=[`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],u=[`25`,...l],d=[`canvas`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],f={multiplier:.24,minimum:6,maximum:24},p={multiplier:.36,minimum:6,maximum:32},m={25:99,50:97,100:94,200:88,300:80,400:66,500:48,600:36,700:27,800:18,900:11,950:6},h={25:13,50:4,100:7,200:10,300:16,400:27,500:46,600:65,700:82,800:89,900:95,950:99},g={canvas:{lightness:96,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}},_={canvas:{lightness:5,saturationFactor:.9},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}},v={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:`#eff6ff`,100:`#dbeafe`,200:`#bfdbfe`,300:`#93c5fd`,400:`#60a5fa`,500:`#2563eb`,600:`#1d4ed8`,700:`#1e40af`,800:`#1e3a8a`,900:`#172554`,950:`#0f172a`},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`}},y={50:97,100:94,200:88,300:76,400:64,500:42,600:34,700:27,800:21,900:16,950:10},b=(e,t,n)=>Math.min(Math.max(e,t),n),x=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()}`},S=e=>{let t=x(e)||`#2563eb`,n=parseInt(t.slice(1),16);return{r:n>>16&255,g:n>>8&255,b:n&255}},C=(e,t,n)=>`#${[e,t,n].map(e=>b(Math.round(e),0,255).toString(16).padStart(2,`0`)).join(``)}`,w=(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}},T=(e,t,n)=>{let r=b(t,0,100)/100,i=b(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),C((l+c)*255,(u+c)*255,(d+c)*255)},E=e=>{let{r:t,g:n,b:r}=S(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},D=(e,t)=>{let n=E(e),r=E(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)},O=(e,t,n)=>{let r=n,i=T(e,t,r);for(;D(`#ffffff`,i)<4.5&&r>12;)r-=2,i=T(e,t,r);return i},k=e=>{let{r:t,g:n,b:r}=S(x(e)||`#2563eb`),{h:i,s:a}=w(t,n,r),o=a<8?a:b(a,42,88);return l.reduce((e,t)=>{let n=y[t],r=Number(t)<300?o*.72:o;return e[t]=t===`500`||t===`600`?O(i,r,n):T(i,r,n),e},{})},A=e=>{let t=e?.mode===`dark`?`dark`:`light`,n=e?.accent===`custom`?`custom`:e?.accent,r=c.some(e=>e.id===n)?n:o,i=x(e?.customAccent)||`#2563eb`;return{mode:t,adaptToAccent:e?.adaptToAccent===!0,accent:n===`custom`?`custom`:r,customAccent:i}},j=e=>{let t=A(e);return t.accent===`custom`?k(t.customAccent):v[t.accent||`blue`]},M=e=>{let t=A(e);return t.accent===`custom`?t.customAccent||`#2563eb`:c.find(e=>e.id===t.accent)?.color||`#2563eb`},N=(e,t,n)=>t===0||e<8?e*t:b(e*n.multiplier*t,n.minimum*t,n.maximum*t),P=(e,t,n,r)=>u.reduce((i,a)=>(i[a]=T(e,N(t,1,r),n[a]),i),{}),F=(e,t,n,r)=>d.reduce((i,a)=>{let o=n[a];return i[a]=T(e,N(t,o.saturationFactor,r),o.lightness),i},{}),I=(e,t,n)=>{let{r,g:i,b:a}=S(n);e.style.setProperty(t,`${r} ${i} ${a}`)},L=e=>{for(let t of u)e.style.removeProperty(`--color-gray-${t}`),e.style.removeProperty(`--color-dark-${t}`);for(let t of d)e.style.removeProperty(`--color-${t}`)},R=(e,t)=>{let{r:n,g:r,b:i}=S(M(t)),{h:a,s:o}=w(n,r,i),s=t.mode===`light`?p:f,c=P(a,o,m,s),l=P(a,o,h,f),v=F(a,o,t.mode===`dark`?_:g,s);for(let t of u)I(e,`--color-gray-${t}`,c[t]),I(e,`--color-dark-${t}`,l[t]);for(let t of d)I(e,`--color-${t}`,v[t])},z=e=>{if(typeof document>`u`)return;let t=A(e),n=document.documentElement,r=j(t);n.classList.remove(`dark`,`ophelia`),t.mode===`dark`&&n.classList.add(`dark`),n.style.colorScheme=t.mode,n.dataset.accent=t.accent||`blue`,n.dataset.themeStyle=t.adaptToAccent?`accent`:`default`;for(let e of l){let{r:t,g:i,b:a}=S(r[e]),o=`${t} ${i} ${a}`;n.style.setProperty(`--color-primary-${e}`,o),n.style.setProperty(`--color-accent-${e}`,o)}t.adaptToAccent?R(n,t):L(n)},B=a(`store:app-store`),V=250,H=null,U=t()(n((t,n)=>({theme:{mode:`light`,adaptToAccent:!1,accent:o,customAccent:s},themeSyncPending:!1,syncThemePreference:async i=>{if(H&&(clearTimeout(H),H=null),!(!r()&&!localStorage.getItem(`auth-token`)))try{let{preferencesApi:r}=await e(async()=>{let{preferencesApi:e}=await import(`./api-DCD41-l9.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6]));if(!(await r.updatePreferences({theme:i})).success){B.warn(`Failed to save theme preference to backend`);return}let a=A(n().theme),o=A(i);a.mode===o.mode&&a.adaptToAccent===o.adaptToAccent&&a.accent===o.accent&&a.customAccent===o.customAccent?t({themeSyncPending:!1}):(t({themeSyncPending:!0}),n().scheduleThemePreferenceSync())}catch(e){B.warn(`Failed to save theme preference to backend:`,e)}},scheduleThemePreferenceSync:()=>{H&&clearTimeout(H),H=setTimeout(()=>{H=null,n().syncThemePreference(A(n().theme))},V)},setTheme:e=>{let n=A(e);t(e=>({theme:n,preferences:{...e.preferences,theme:n}})),z(n)},updateTheme:e=>{let r=A(e);n().setTheme(r),t({themeSyncPending:!0}),n().scheduleThemePreferenceSync()},toggleTheme:()=>{let e=n().theme,t=e.mode===`dark`?`light`:`dark`;n().updateTheme({...e,mode:t})},sidebarOpen:!0,sidebarCompact:!1,setSidebarOpen:e=>t({sidebarOpen:e}),setSidebarCompact:e=>t({sidebarCompact:e}),toggleSidebar:()=>t(e=>({sidebarOpen:!e.sidebarOpen})),toggleSidebarCompact:()=>t(e=>({sidebarCompact:!e.sidebarCompact})),artifactPanelOpen:!1,artifactPanelArtifact:null,openArtifactPanel:e=>t({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>t({artifactPanelOpen:!1,artifactPanelArtifact:null}),preferences:{theme:{mode:`light`,adaptToAccent:!1,accent:o,customAccent:s},defaultModel:``,defaultProviderType:null,defaultProviderId: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:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},setPreferences:e=>{let n=e.theme?A(e.theme):null;t(t=>({...n&&{theme:n},preferences:{...t.preferences,...e,...n&&{theme:n}}})),n&&z(n)},loadPreferences:async()=>{try{let{preferencesApi:r}=await e(async()=>{let{preferencesApi:e}=await import(`./api-DCD41-l9.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6])),i=await r.getPreferences();if(i.success&&i.data){let e=i.data,r=n().themeSyncPending?A(n().theme):null;n().setPreferences(r?{...e,theme:r}:e),t({backgroundImage:e.backgroundSettings?.imageUrl||null}),r&&n().syncThemePreference(r)}}catch(e){B.warn(`Failed to load preferences from backend:`,e)}},isGenerating:!1,setIsGenerating:e=>t({isGenerating:e}),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>t({hasSeenSettingsNotification:!0}),isDemoMode:r(),demoConfig:i(),setDemoMode:e=>{t({isDemoMode:e,demoConfig:i()})},backgroundImage:null,setBackgroundImage:async r=>{if(t({backgroundImage:r}),r){let t=n(),i={...t.preferences,backgroundSettings:{enabled:!0,imageUrl:r,blurAmount:t.preferences.backgroundSettings?.blurAmount||10,opacity:t.preferences.backgroundSettings?.opacity||.6}};t.setPreferences(i);try{let{preferencesApi:t}=await e(async()=>{let{preferencesApi:e}=await import(`./api-DCD41-l9.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6]));await t.updatePreferences({backgroundSettings:i.backgroundSettings})}catch(e){B.warn(`Failed to save background settings to backend:`,e)}}},uploadBackgroundImage:async e=>{try{let t=new FileReader;return new Promise((r,i)=>{t.onload=async e=>{try{let t=e.target?.result;await n().setBackgroundImage(t),r()}catch(e){i(e)}},t.onerror=i,t.readAsDataURL(e)})}catch(e){throw B.error(`Failed to upload background image:`,e),e}},removeBackgroundImage:async()=>{t({backgroundImage:null});let r=n(),i={enabled:!1,imageUrl:``,blurAmount:r.preferences.backgroundSettings?.blurAmount||10,opacity:r.preferences.backgroundSettings?.opacity||.6};r.setPreferences({backgroundSettings:i});try{let{preferencesApi:t}=await e(async()=>{let{preferencesApi:e}=await import(`./api-DCD41-l9.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6]));await t.updatePreferences({backgroundSettings:i})}catch(e){B.warn(`Failed to save background removal to backend:`,e)}},clearUserState:()=>{let e=A({mode:`light`,adaptToAccent:!1,accent:o,customAccent:s});H&&(clearTimeout(H),H=null),t({theme:e,themeSyncPending:!1,backgroundImage:null,preferences:{theme:e,defaultModel:``,defaultProviderType:null,defaultProviderId: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:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}}}),z(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,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=U.getState();t(e)})();export{M as a,s as i,c as n,A as o,o as r,U as t};
@@ -1,2 +0,0 @@
1
- var e={common:{loading:`جاري التحميل...`,save:`حفظ`,saving:`جاري الحفظ...`,cancel:`إلغاء`,delete:`حذف`,edit:`تعديل`,close:`إغلاق`,back:`رجوع`,next:`التالي`,confirm:`تأكيد`,error:`خطأ`,success:`نجاح`,warning:`تحذير`,or:`أو`,optional:`اختياري`,enabled:`مُفعّل`,disabled:`معطّل`,on:`تشغيل`,off:`إيقاف`,yes:`نعم`,no:`لا`,search:`بحث`,noResults:`لم يتم العثور على نتائج`,retry:`إعادة المحاولة`,refresh:`تحديث`,download:`تحميل`,upload:`رفع`,export:`تصدير`,import:`استيراد`,reset:`إعادة تعيين`,apply:`تطبيق`,clear:`مسح`,all:`الكل`,none:`لا شيء`,default:`افتراضي`,custom:`مخصص`,remove:`إزالة`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`مرحباً بعودتك`,subtitle:`سجّل الدخول إلى حسابك للمتابعة`,username:`اسم المستخدم`,usernamePlaceholder:`أدخل اسم المستخدم`,password:`كلمة المرور`,passwordPlaceholder:`أدخل كلمة المرور`,signIn:`تسجيل الدخول`,signingIn:`جاري تسجيل الدخول...`,noAccount:`ليس لديك حساب؟`,signUpHere:`سجّل هنا`,loginSuccess:`تم تسجيل الدخول بنجاح!`,loginFailed:`فشل تسجيل الدخول`,checkCredentials:`فشل تسجيل الدخول. يرجى التحقق من بيانات الاعتماد.`,enterBoth:`يرجى إدخال اسم المستخدم وكلمة المرور`,githubSuccess:`تم تسجيل الدخول عبر GitHub بنجاح!`,githubFailed:`فشلت مصادقة GitHub`,githubVerifyFailed:`فشل التحقق من مصادقة GitHub`},signup:{title:`إنشاء حساب`,subtitle:`سجّل للحصول على حساب جديد`,username:`اسم المستخدم`,usernamePlaceholder:`اختر اسم مستخدم`,email:`البريد الإلكتروني`,emailPlaceholder:`your@email.com`,password:`كلمة المرور`,passwordPlaceholder:`اختر كلمة مرور`,confirmPassword:`تأكيد كلمة المرور`,confirmPasswordPlaceholder:`أكّد كلمة المرور`,createAccount:`إنشاء حساب`,creatingAccount:`جاري إنشاء الحساب...`,hasAccount:`لديك حساب بالفعل؟`,signInHere:`سجّل الدخول هنا`,signupSuccess:`تم إنشاء الحساب بنجاح!`,signupFailed:`فشل التسجيل`,tryAgain:`فشل التسجيل. يرجى المحاولة مرة أخرى.`,usernameRequired:`اسم المستخدم وكلمة المرور مطلوبان`,passwordMismatch:`كلمات المرور غير متطابقة`,passwordTooShort:`يجب أن تكون كلمة المرور 6 أحرف على الأقل`},logout:{button:`تسجيل الخروج`,success:`تم تسجيل الخروج بنجاح`},oauth:{continueWith:`المتابعة مع {{provider}}`,connectingTo:`جاري الاتصال بـ {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`جاري التحقق من المصادقة...`,welcome:`مرحباً`,noEmail:`لم يتم تقديم بريد إلكتروني`,role:`الدور`,id:`المعرف`,userId:`معرف المستخدم`,signInDescription:`سجّل الدخول بحساب GitHub الخاص بك للمتابعة`,signInWithGitHub:`تسجيل الدخول بواسطة GitHub`,jwtActive:`مصادقة JWT نشطة`,jwtDescription:`مصادقة JWT مع GitHub OAuth`,github:`GitHub`,provider:`المزود`},setup:{welcome:{title:`مرحباً بك في Libre WebUI`,subtitle:`لنبدأ`,description:`قم بإعداد Libre WebUI الخاص بك في خطوات قليلة`,createAdmin:`إنشاء حساب المسؤول`,features:{secure:{title:`آمن وخاص`,description:`محادثاتك تبقى على جهازك`},fast:{title:`سريع ومتجاوب`,description:`محسّن للسرعة والأداء`},openSource:{title:`مفتوح المصدر`,description:`برنامج مجاني ومفتوح المصدر`}}},admin:{title:`إنشاء حساب المسؤول`,subtitle:`إعداد المسؤول`,description:`أنشئ أول حساب مسؤول لـ Libre WebUI الخاص بك`,usernamePlaceholder:`أدخل اسم المسؤول`,passwordPlaceholder:`أدخل كلمة المرور (6 أحرف على الأقل)`,confirmPlaceholder:`أكّد كلمة المرور`,creating:`جاري الإنشاء...`,createAdmin:`إنشاء المسؤول`,success:`تم إنشاء حساب المسؤول بنجاح!`,failed:`فشل إنشاء حساب المسؤول`,fillAllFields:`يرجى ملء جميع الحقول`,note:`سيكون هذا حساب المسؤول الرئيسي لـ Libre WebUI الخاص بك`},encryptionKey:{title:`احفظ مفتاح التشفير`,subtitle:`مهم: احفظ هذا المفتاح`,description:`يحمي مفتاح التشفير هذا بياناتك الحساسة. احفظه بأمان - ستحتاجه إذا احتجت لاستعادة قاعدة البيانات.`,warning:`تحذير`,warningText:`إذا فقدت هذا المفتاح واحتجت لاستعادة قاعدة البيانات، ستكون بياناتك المشفرة (مفاتيح API، التفضيلات) غير قابلة للاسترداد.`,label:`مفتاح التشفير الخاص بك`,loading:`جاري التحميل...`,copyToClipboard:`نسخ إلى الحافظة`,copied:`تم نسخ مفتاح التشفير إلى الحافظة!`,copyFailed:`فشل نسخ المفتاح إلى الحافظة`,envNote:`هذا المفتاح محفوظ أيضاً في ملف backend/.env كـ ENCRYPTION_KEY`,acknowledgment:`لقد حفظت مفتاح التشفير في مكان آمن وأفهم أن فقدانه قد يؤدي إلى فقدان البيانات.`,confirmRequired:`يرجى التأكيد على أنك حفظت مفتاح التشفير`,continue:`المتابعة إلى Libre WebUI`}},chat:{greeting:{morning:`صباح الخير`,afternoon:`مساء الخير`,evening:`مساء الخير`,night:`تصبح على خير`},welcome:{helpToday:`كيف يمكنني مساعدتك اليوم؟`,helpTonight:`كيف يمكنني مساعدتك الليلة؟`,variety:{create:{title:`ماذا نصنع؟`,subtitle:`ابدأ بفكرة، أو رسم أولي، أو مشكلة عنيدة.`},explore:{title:`من أين نبدأ؟`,subtitle:`هات السؤال الذي لا يكفّ عن العودة إلى ذهنك.`},imagine:{title:`ما الذي تتخيّله؟`,subtitle:`يمكننا أن نمنحه شكلاً معًا.`},focus:{title:`ما الذي يستحق انتباهك؟`,subtitle:`لنجعل الخطوة التالية واضحة.`},untangle:{title:`ما الذي يبدو معقّدًا؟`,subtitle:`أعطني النسخة الفوضوية أولًا.`},momentum:{title:`لننطلق عندما تكون جاهزًا.`,subtitle:`تابع فكرة أو خطة أو خيطًا تركته دون إكمال.`},open:{title:`ما الذي يشغل بالك؟`,subtitle:`خاطرة صغيرة أو مشروع طموح. كلاهما مناسب.`},challenge:{title:`ما الذي نحاول حلّه؟`,subtitle:`أخبرني بما لا يعمل بعد.`},draft:{title:`لنبدأ من مكان ما.`,subtitle:`لا يشترط أن يكون مصقولًا.`},possibility:{title:`إلى ماذا يمكن أن يتحول هذا؟`,subtitle:`أرني المادة الخام.`},unexpected:{title:`لنصنع شيئًا غير متوقع.`,subtitle:`أعطني قيدًا، أو مزاجًا، أو فكرة لم تكتمل بعد.`}}},input:{placeholder:`أرسل رسالة`,messagePlaceholder:`رسالة...`,attachImages:`إرفاق صور`,attachments:`المرفقات والميزات المتقدمة`,sendMessage:`إرسال الرسالة`,stopGeneration:`إيقاف التوليد`},session:{new:`محادثة جديدة`,work:`العمل`,chat:`محادثة`,private:`خاص`,privateMode:`الوضع الخاص`,privateDescription:`لن يتم حفظ هذه المحادثة`,privateTooltip:`ابدأ محادثة خاصة لن يتم حفظها`,deleteConfirm:`هل أنت متأكد من حذف هذه المحادثة؟`,generatingTitle:`جاري توليد العنوان`,noChats:`لا توجد محادثات بعد`,createFirst:`أنشئ أول محادثة أعلاه`,chats:`المحادثات`,renameChat:`إعادة تسمية المحادثة`,deleteChat:`حذف المحادثة`},persona:{applied:`تم تطبيق الشخصية`,label:`الشخصية`},model:{updated:`تم تحديث النموذج`,noModels:`لا توجد نماذج متاحة`,noModelsDescription:`لا توجد نماذج متاحة. تأكد من تشغيل Ollama وتثبيت النماذج.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`لا توجد نماذج متاحة. يرجى التأكد من تشغيل Ollama وتثبيت النماذج.`},footer:{disclaimer:`قد يرتكب الذكاء الاصطناعي أخطاء - تحقق من المعلومات المهمة`,images:`{{count}} صورة`,images_plural:`{{count}} صور`,structuredOutput:`مخرجات منظمة`},mediaUpload:{dropImagesHere:`أفلت الصور هنا أو`,supportedFormats:`يدعم: JPG، PNG، GIF، WebP (حد أقصى 10 ميجابايت لكل صورة)`,browse:`تصفح`},structuredOutput:{title:`تنسيق الاستجابة`,none:`بدون (لغة طبيعية)`,noneDescription:`استجابة باللغة الطبيعية الافتراضية`,json:`JSON`,jsonDescription:`تنسيق JSON منظم`,list:`قائمة`,listDescription:`مصفوفة من العناصر`,summary:`ملخص`,summaryDescription:`ملخص المستند مع النقاط الرئيسية`,analysis:`تحليل`,analysisDescription:`تحليل منظم مع الإيجابيات والسلبيات`,custom:`مخطط مخصص`,customDescription:`حدد مخطط JSON الخاص بك`,customSchema:`مخطط JSON مخصص`,schemaPreview:`معاينة المخطط`,applySchema:`تطبيق المخطط`,cancel:`إلغاء`,enabled:`تم تفعيل المخرجات المنظمة`}},sidebar:{navigation:{chat:`محادثة`,models:`النماذج`,personas:`الشخصيات`,imagine:`تخيّل`,work:`العمل`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,signOut:`تسجيل الخروج`,agents:`الوكلاء`,exploreLabel:`استكشاف`},toggleSize:`تبديل حجم الشريط الجانبي`,expandSidebar:`توسيع الشريط الجانبي`},user:{menu:{changePicture:`تغيير الصورة`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,logout:`تسجيل الخروج`},avatar:{title:`تغيير صورة الملف الشخصي`,updated:`تم تحديث صورة الملف الشخصي`,updateFailed:`فشل تحديث صورة الملف الشخصي`,saving:`جاري الحفظ...`,label:`الصورة الرمزية`,uploadAvatarImage:`رفع صورة رمزية`,dragAndDrop:`اسحب وأفلت صورة أو انقر للتصفح`,chooseImage:`اختر صورة`,uploading:`جاري الرفع...`,enterImageUrl:`أو أدخل رابط الصورة`,supportedFormats:`الصيغ المدعومة: JPG، PNG، GIF، WebP (الحد الأقصى 2 ميجابايت). الصور المربعة تعمل بشكل أفضل.`,customAvatar:`صورة رمزية مخصصة`,clickToChange:`انقر للتغيير أو الإزالة`,removed:`تمت إزالة الصورة الرمزية`,uploaded:`تم رفع الصورة الرمزية بنجاح`,invalidFile:`يرجى اختيار ملف صورة صالح`,fileTooLarge:`يجب أن يكون حجم الصورة الرمزية أقل من 2 ميجابايت`,readFailed:`فشل قراءة ملف الصورة`,uploadFailed:`فشل رفع الصورة الرمزية`},profile:{noEmail:`لم يتم تقديم بريد إلكتروني`}},settings:JSON.parse(`{"title":"الإعدادات","tabs":{"appearance":"المظهر","model":"النموذج","systemMessage":"رسالة النظام","plugins":"الإضافات","generation":"التوليد","documents":"المستندات","tts":"تحويل النص إلى كلام","imageGen":"توليد الصور","data":"البيانات","about":"حول"},"appearance":{"title":"المظهر","language":{"title":"اللغة","description":"اختر لغتك المفضلة"},"theme":{"title":"السمة","light":"فاتح","dark":"داكن","amoled":"أسود نقي","system":"النظام"},"accent":{"title":"لون التمييز","custom":"لون مخصص","useColor":"استخدام {{color}} كلون تمييز","behaviorTitle":"لوحة ألوان الواجهة","behaviorDescription":"اختر ما إذا كان لون التمييز يقتصر على عناصر التحكم أو يكيّف الواجهة الفاتحة أو الداكنة بالكامل.","defaultStyle":"افتراضي","defaultStyleDescription":"الاحتفاظ بالأسطح المحايدة للوضعين الفاتح والداكن.","adaptedStyle":"التكيف مع لون التمييز","adaptedStyleDescription":"تلوين الأسطح والحدود والنصوص بلون التمييز."},"chatInterface":{"title":"واجهة المحادثة","showUsername":"إظهار اسم المستخدم","showUsernameDescription":"عرض اسم المستخدم في رسائل المحادثة"},"background":{"title":"صورة الخلفية","enable":"تفعيل صورة الخلفية","enableDescription":"عرض خلفية مخصصة مع تأثير التمويه","blur":"التمويه","opacity":"الشفافية","upload":"رفع صورة الخلفية","dragDrop":"اسحب وأفلت صورة أو انقر للتصفح","chooseImage":"اختر صورة"}},"saveSettings":"حفظ الإعدادات","model":{"title":"إعدادات النموذج","defaultModel":"النموذج الافتراضي","defaultModelDescription":"سيتم استخدام هذا النموذج افتراضياً للمحادثات الجديدة","selectModel":"اختر نموذجاً","updateAll":"تحديث جميع النماذج","updateAllDescription":"التحقق من التحديثات وسحب أحدث إصدارات جميع النماذج المثبتة","updateAllButton":"تحديث الكل","updating":"جاري تحديث النماذج...","currentModelInfo":"معلومات النموذج الحالي","name":"الاسم","size":"الحجم","family":"العائلة","format":"التنسيق","status":"الحالة","statusStarting":"جاري البدء...","statusComplete":"مكتمل","statusError":"خطأ","bulkOperations":"العمليات المجمعة","autoTitle":{"title":"توليد العنوان التلقائي","enable":"تفعيل العنوان التلقائي","enableDescription":"توليد عناوين تلقائياً للمحادثات الجديدة","taskModel":"نموذج المهام","selectTaskModel":"اختر نموذج المهام","taskModelDescription":"النموذج المستخدم لتوليد عناوين المحادثات"},"persona":"شخصية","updatingModel":"تحديث {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} من {{total}} نماذج","modelPullAccess":"وصول تثبيت النماذج","modelPullAccessDescription":"السماح للمستخدمين غير المسؤولين بسحب النماذج الجديدة وتثبيتها.","modelPullAccessSaved":"تم تحديث أذونات تثبيت النماذج","modelPullAccessSaveFailed":"فشل تحديث أذونات تثبيت النماذج"},"systemMessage":{"title":"رسالة النظام","description":"عيّن رسالة نظام مخصصة ستُستخدم لجميع المحادثات الجديدة.","placeholder":"أدخل رسالة النظام...","saved":"تم حفظ رسالة النظام","saveFailed":"فشل حفظ رسالة النظام"},"plugins":{"title":"الإضافات","description":"إدارة الإضافات المثبتة","addNew":"إضافة إضافة جديدة","upload":"رفع إضافة","addJson":"إضافة JSON","uploading":"جاري الرفع...","jsonPlaceholder":"الصق إعدادات JSON للإضافة...","install":"تثبيت الإضافة","noPlugins":"لا توجد إضافات مثبتة","noPluginsDescription":"أضف إضافة لتوسيع الوظائف","loading":"جاري تحميل الإضافات...","installed":"الإضافات المثبتة","active":"الإضافات النشطة","activeLabel":"نشط","inactive":"غير نشط","activate":"تفعيل","deactivate":"إلغاء التفعيل","models":"نماذج","apiKeySet":"تم تعيين مفتاح API","apiKeyConfiguration":"إعداد مفتاح API","apiKeyEnvAlternative":"بدلاً من ذلك، عيّن","environmentVariable":"متغير البيئة","apiKeyConfigured":"تم إعداد مفتاح API","apiKeyPlaceholder":"أدخل مفتاح API...","saveApiKey":"حفظ مفتاح API","apiKey":{"title":"مفتاح API","placeholder":"أدخل مفتاح API","save":"حفظ المفتاح","remove":"إزالة المفتاح","configured":"تم إعداد مفتاح API","notConfigured":"مفتاح API مطلوب","saved":"تم حفظ مفتاح API بنجاح","removed":"تم إزالة مفتاح API","saveFailed":"فشل حفظ مفتاح API","removeFailed":"فشل إزالة مفتاح API","enterKey":"يرجى إدخال مفتاح API"},"variables":"Variables"},"generation":{"title":"خيارات التوليد","description":"إعداد كيفية توليد الذكاء الاصطناعي للاستجابات","coreParameters":"المعلمات الأساسية","temperature":"درجة الحرارة","temperatureDescription":"يتحكم في العشوائية. القيم الأقل أكثر تركيزاً، والقيم الأعلى أكثر إبداعاً.","topP":"Top P","topPDescription":"يتحكم في التنوع عبر أخذ العينات النووية. القيم الأقل تركز على الرموز المحتملة.","topK":"Top K","topKDescription":"يحد اختيار الرموز لأكثر K رمز احتمالاً. عيّن 0 للتعطيل.","minP":"Min P","minPDescription":"الحد الأدنى لاحتمال اختيار الرمز.","generationControl":"التحكم في التوليد","maxTokens":"الحد الأقصى للرموز","maxTokensDescription":"الحد الأقصى لعدد الرموز المولدة في الاستجابة.","repeatPenalty":"عقوبة التكرار","repeatPenaltyDescription":"يعاقب الرموز المتكررة. القيم الأعلى تقلل التكرار.","contextLength":"طول السياق","contextLengthDescription":"الحد الأقصى لحجم نافذة السياق للمحادثات.","seed":"البذرة","optional":"اختياري","random":"عشوائي","seedDescription":"عيّن بذرة محددة للمخرجات القابلة للتكرار.","advancedOptions":"خيارات متقدمة","presencePenalty":"عقوبة الوجود","presencePenaltyDescription":"يعاقب الرموز التي تظهر في السياق.","frequencyPenalty":"عقوبة التكرار","frequencyPenaltyDescription":"يعاقب الرموز المستخدمة بشكل متكرر.","stopSequences":"تسلسلات الإيقاف","commaSeparated":"مفصولة بفواصل","stopSequencesDescription":"رموز مخصصة ستوقف التوليد عند مصادفتها.","resetDefaults":"إعادة تعيين الافتراضيات","saveOptions":"حفظ الخيارات","embeddingSettings":"إعدادات التضمين","enableEmbeddings":"تفعيل تضمين المستندات"},"documents":{"title":"إعدادات المستندات","embeddings":{"title":"التضمينات","enable":"تفعيل تضمين المستندات","model":"نموذج التضمين","modelDescription":"اختر النموذج المستخدم لتضمين المستندات","chunkSize":"حجم القطعة","chunkSizeInTokens":"(بالرموز)","chunkSizeDescription":"حجم قطع النص للتضمين","chunkOverlap":"تداخل القطع","chunkOverlapInTokens":"(بالرموز)","chunkOverlapDescription":"التداخل بين القطع المتتالية","similarityThreshold":"عتبة التشابه","similarityDescription":"الحد الأدنى لدرجة التشابه لتضمين النتائج","status":"حالة التضمين","statusLabel":"الحالة","available":"متاح","unavailable":"غير متاح","chunksWithEmbeddings":"قطع مع تضمينات","coverage":"التغطية","regenerate":"إعادة توليد التضمينات","regenerating":"جاري إعادة التوليد..."}},"tts":{"title":"تحويل النص إلى كلام","description":"إعداد إعدادات تحويل النص إلى كلام لقراءة الرسائل بصوت عالٍ","loadingProviders":"جاري تحميل مزودي TTS...","noProviders":"لا يوجد مزودو TTS","noProvidersDescription":"قم بإعداد إضافة مع دعم TTS لتفعيل تحويل النص إلى كلام","enable":"تفعيل TTS","enableDescription":"السماح بتحويل النص إلى كلام لرسائل المساعد","autoPlay":"تشغيل تلقائي للاستجابات","autoPlayDescription":"قراءة رسائل المساعد الجديدة بصوت عالٍ تلقائياً","streamSentences":"بث الجمل","streamSentencesDescription":"تشغيل الصوت جملة بجملة بدلاً من انتظار الرسالة الكاملة. موصى به لـ TTS المحلي لتجنب انتهاء المهلة في الرسائل الطويلة.","voiceConfiguration":"إعداد الصوت","model":"نموذج TTS","modelDescription":"اختر النموذج لتوليد الكلام","voice":"الصوت","selectVoice":"اختر صوتاً","voiceDescription":"اختر الصوت لتحويل النص إلى كلام","speed":"السرعة","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"المزودون المتاحون","models":"نماذج","test":"اختبار","testing":"جاري الاختبار...","stop":"إيقاف"},"imageGen":{"title":"توليد الصور","description":"إعداد إعدادات ومزودي توليد الصور","loadingProviders":"جاري تحميل مزودي توليد الصور...","noProviders":"لا يوجد مزودو توليد صور","noProvidersDescription":"قم بإعداد إضافة مع دعم توليد الصور","enable":"تفعيل توليد الصور","enableDescription":"السماح بتوليد الصور بالذكاء الاصطناعي في المحادثات","configuration":"الإعداد","model":"النموذج","modelDescription":"اختر النموذج لتوليد الصور","size":"الحجم","sizeDescription":"دقة الصور المولدة","quality":"الجودة","qualityDescription":"مستوى جودة الصور المولدة","style":"الأسلوب","styleDescription":"إعداد الأسلوب المسبق للصور المولدة","availableProviders":"المزودون المتاحون","models":"نماذج"},"data":{"title":"إدارة البيانات","export":"تصدير البيانات","exportDescription":"تحميل جميع بياناتك بما في ذلك التفضيلات والجلسات والمستندات.","exportAll":"تصدير جميع البيانات","import":"استيراد البيانات","importDescription":"استيراد البيانات من تصدير سابق.","importData":"استيراد البيانات","importing":"جاري الاستيراد...","clearSessions":"مسح الجلسات","clearSessionsDescription":"حذف جميع جلسات المحادثة. لا يمكن التراجع عن هذا الإجراء.","clearAll":"مسح الكل","clearing":"جاري المسح...","importOptions":"خيارات الاستيراد","importOptionsDescription":"اختر كيفية التعامل مع البيانات الموجودة","skipDuplicates":"تخطي المكررات","overwrite":"الكتابة فوق الموجود","importResults":"نتائج الاستيراد","preferences":"التفضيلات","imported":"تم الاستيراد","failed":"فشل","sessions":"الجلسات","importedLabel":"تم الاستيراد","skipped":"تم التخطي","documents":"المستندات","errors":"أخطاء"},"about":{"title":"حول","versionLabel":"الإصدار","ollama":{"title":"حالة Ollama","version":"الإصدار","healthy":"سليم","unhealthy":"غير سليم"},"stats":{"models":"النماذج","sessions":"الجلسات"},"features":{"privacy":{"title":"الخصوصية أولاً","description":"بياناتك تبقى على جهازك"},"openSource":{"title":"مفتوح المصدر","description":"برنامج مجاني ومفتوح المصدر"},"localInference":{"title":"استدلال محلي","description":"تشغيل نماذج الذكاء الاصطناعي محلياً مع Ollama"}},"openSourceBy":"مفتوح المصدر بواسطة {{company}}","links":{"title":"الروابط","github":"GitHub","githubDescription":"عرض الكود المصدري والمساهمة","website":"الموقع","websiteDescription":"زيارة موقعنا","ollama":"Ollama","ollamaDescription":"معرفة المزيد عن Ollama","documentation":"التوثيق","reportIssue":"الإبلاغ عن المشاكل","reportIssueDescription":"تقارير الأخطاء وطلبات الميزات","gitlab":"مرآة GitLab","gitlabDescription":"مستودع GitLab مستضاف ذاتياً","documentationDescription":"أدلة ودروس ومرجع API"},"version":"الإصدار {{version}}"},"groups":{"general":"عام","chat":"الدردشة","media":"الصوت والصور","connections":"الاتصالات"}}`),models:{title:`النماذج`,subtitle:`سحب وإدارة ومراقبة نماذج Ollama`,installed:`النماذج المثبتة`,available:`النماذج المتاحة`,pull:`سحب النموذج`,pulling:`جاري السحب...`,delete:`حذف النموذج`,deleting:`جاري الحذف...`,size:`الحجم`,modified:`تم التعديل`,family:`العائلة`,parameters:`المعلمات`,quantization:`التكميم`,noModels:`لا توجد نماذج مثبتة`,pullFirst:`اسحب نموذجاً للبدء`,noModelsFound:`لم يتم العثور على نماذج`},personas:{title:`الشخصيات`,create:`إنشاء شخصية`,edit:`تعديل الشخصية`,delete:`حذف الشخصية`,name:`الاسم`,description:`الوصف`,systemPrompt:`موجه النظام`,model:`النموذج`,avatar:`الصورة الرمزية`,background:`الخلفية`,noPersonas:`لم يتم إنشاء شخصيات`,createFirst:`أنشئ أول شخصية لتخصيص تجربة المحادثة`},gallery:{title:`المعرض`,subtitle:`معرض الصور المولدة بالذكاء الاصطناعي`,imageCount:`{{count}} صورة`,generate:`توليد صورة`,generateDescription:`إنشاء صور بالذكاء الاصطناعي`,generating:`جاري التوليد...`,prompt:`الموجه`,promptPlaceholder:`صف الصورة التي تريد توليدها...`,noImages:`لم يتم توليد صور بعد`,download:`تحميل`,delete:`حذف`,regenerate:`إعادة التوليد`,model:`النموذج`,size:`الحجم`,quality:`الجودة`,created:`تم الإنشاء`},errors:{generic:`حدث خطأ`,network:`خطأ في الشبكة. يرجى التحقق من الاتصال.`,unauthorized:`غير مصرح لك بتنفيذ هذا الإجراء.`,notFound:`لم يتم العثور على المورد المطلوب.`,serverError:`خطأ في الخادم. يرجى المحاولة لاحقاً.`,validation:`يرجى التحقق من المدخلات والمحاولة مرة أخرى.`},keyboard:{title:`اختصارات لوحة المفاتيح`,toggleSidebar:`تبديل الشريط الجانبي`,openSettings:`فتح الإعدادات`,toggleDarkMode:`تبديل الوضع الداكن`,showShortcuts:`إظهار اختصارات لوحة المفاتيح`,closeModals:`إغلاق النوافذ المنبثقة`,groups:{navigation:`التنقل`,settings:`الإعدادات`,general:`عام`,chat:`المحادثة`},actions:{sendMessage:`إرسال الرسالة`,newLine:`سطر جديد في الرسالة`},footer:`اضغط {{key1}} أو {{key2}} لإظهار هذه المساعدة`,tooltip:`اختصارات لوحة المفاتيح`},modelManager:{title:`النماذج`,loading:`جاري تحميل النماذج...`,systemStatus:{online:`Ollama متصل`,offline:`Ollama غير متصل`,models:`نموذج`,models_plural:`نماذج`,running:`قيد التشغيل`,vram:`VRAM`},sections:{pull:`سحب نموذج جديد`,library:`تصفح المكتبة`,running:`النماذج قيد التشغيل`,local:`النماذج المحلية`,advanced:`إجراءات متقدمة`,huggingface:`HuggingFace Hub`},pull:{placeholder:`أدخل اسم النموذج (مثل llama3.2:3b، deepseek-r1:14b)`,button:`سحب`,cancel:`إلغاء`,popular:`النماذج الشائعة:`,browseAll:`تصفح جميع النماذج على ollama.com`,success:`تم سحب النموذج {{name}} بنجاح`,cancelled:`تم إلغاء سحب النموذج`,failed:`فشل سحب النموذج`,enterName:`يرجى إدخال اسم النموذج`,restricted:`تثبيت النماذج مقصور على المسؤولين في هذا المثيل.`},progress:{starting:`جاري التهيئة...`,pulling:`جاري تحميل النموذج...`,pullingLayer:`تحميل`,verifying:`جاري التحقق من السلامة...`,verifyingDigest:`التحقق من تجزئة sha256`,writing:`جاري كتابة البيان...`,cleaning:`جاري التنظيف...`},library:{available:`متاح`,search:`البحث عن نماذج...`,noResults:`لم يتم العثور على نماذج تطابق معاييرك`,installed:`مثبت`,more:`+{{count}} المزيد`,refresh:`تحديث المكتبة`},local:{noModels:`لم يتم تثبيت نماذج بعد`,pullToStart:`اسحب نموذجاً أعلاه للبدء`,installed:`مثبت`,running:`قيد التشغيل`,info:`معلومات`,copy:`نسخ`,delete:`حذف`,deleteConfirm:`هل أنت متأكد من حذف النموذج "{{name}}"؟`,deleteSuccess:`تم حذف النموذج {{name}} بنجاح`,deleteFailed:`فشل حذف النموذج`},advanced:{createModel:`إنشاء نموذج`,fromModelfile:`من Modelfile`,copyModel:`نسخ نموذج`,duplicateExisting:`تكرار موجود`,testEmbeddings:`اختبار التضمينات`,generateVectors:`توليد المتجهات`,healthCheck:`فحص الصحة`,testConnection:`اختبار الاتصال`,healthy:`Ollama سليم!`},modals:{details:{title:`تفاصيل النموذج`,info:`معلومات النموذج`,family:`العائلة`,parameters:`المعلمات`,quantization:`التكميم`,format:`التنسيق`,systemPrompt:`موجه النظام`,template:`القالب`,license:`الترخيص`,modelfile:`Modelfile`,noDetails:`لا تتوفر تفاصيل`},copy:{title:`نسخ النموذج`,source:`النموذج المصدر`,selectModel:`اختر نموذجاً...`,newName:`اسم النموذج الجديد`,placeholder:`مثل my-custom-model`,copying:`جاري النسخ...`,button:`نسخ النموذج`,success:`تم نسخ النموذج إلى {{name}}`,failed:`فشل نسخ النموذج`,enterBoth:`يرجى إدخال أسماء المصدر والوجهة`},create:{title:`إنشاء نموذج مخصص`,name:`اسم النموذج`,namePlaceholder:`مثل my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
- SYSTEM You are a helpful assistant.`,see:`راجع`,docs:`توثيق Modelfile`,docsLink:`لمرجع الصيغة`,creating:`جاري الإنشاء...`,button:`إنشاء النموذج`,success:`تم إنشاء النموذج {{name}} بنجاح`,failed:`فشل إنشاء النموذج`,enterBoth:`يرجى إدخال اسم النموذج ومحتوى Modelfile`},embeddings:{title:`اختبار التضمينات`,model:`نموذج التضمين`,selectModel:`اختر نموذجاً...`,recommended:`موصى به: nomic-embed-text، mxbai-embed-large`,input:`نص الإدخال`,placeholder:`أدخل النص لتوليد التضمينات...`,generating:`جاري التوليد...`,button:`توليد التضمينات`,result:`النتيجة ({{count}} بُعد)`,success:`تم توليد متجه تضمين من {{count}} بُعد`,failed:`فشل توليد التضمينات`,enterBoth:`يرجى اختيار نموذج وإدخال نص`}},huggingface:{browseAll:`تصفح الكل على HuggingFace`,checkingGguf:`البحث عن ملفات GGUF...`,noGgufAvailable:`لا توجد ملفات GGUF متاحة للسحب المباشر من Ollama`,ggufFilesCount:`ملفات GGUF ({{count}}) - سحب مباشر إلى Ollama`,noModelsFound:`لم يتم العثور على نماذج`,noResults:`لم يتم العثور على نماذج. حاول تعديل البحث أو المرشحات.`,browseAllLink:`تصفح الكل`,search:`البحث في نماذج HuggingFace...`,by:`بواسطة`,gated:`وصول مقيد`,viewOnHF:`عرض على HuggingFace`,sortDownloads:`التنزيلات`,sortLikes:`الإعجابات`,sortRecent:`الأحدث`,taskTextGeneration:`توليد النص`,taskTextToSpeech:`تحويل النص إلى كلام`,taskTextToImage:`تحويل النص إلى صورة`,taskSpeechRecognition:`التعرف على الكلام`,tasks:{textGen:`توليد النص`,tts:`تحويل النص إلى كلام`,image:`تحويل النص إلى صورة`,stt:`التعرف على الكلام`},sort:{downloads:`الأكثر تنزيلاً`,likes:`الأكثر إعجاباً`,recent:`المحدثة مؤخراً`}}},personaManager:{title:`الشخصيات`,subtitle:`إنشاء وإدارة شخصيات الذكاء الاصطناعي مع شخصيات وذكريات وسلوكيات مخصصة`,loading:`جاري تحميل الشخصيات...`,createButton:`إنشاء شخصية`,importExport:`استيراد/تصدير`,stats:{title:`شخصياتك`,count:`تم إنشاء {{count}} شخصية`,count_plural:`تم إنشاء {{count}} شخصيات`},empty:{title:`لا توجد شخصيات بعد`,description:`أنشئ أول شخصية للبدء مع تفاعلات الذكاء الاصطناعي المخصصة`,button:`أنشئ شخصيتك الأولى`},deleteConfirm:`هل أنت متأكد من حذف "{{name}}"؟`,deleteSuccess:`تم حذف الشخصية "{{name}}" بنجاح`,downloadSuccess:`تم تحميل الشخصية "{{name}}" بنجاح`,failed:`فشل {{action}} الشخصية`},personaForm:{title:{create:`إنشاء شخصية جديدة`,edit:`تعديل الشخصية`},subtitle:{create:`أنشئ شخصية ذكاء اصطناعي جديدة مع شخصية مخصصة وأنظمة ذاكرة وقدرات تعلم تكيفية`,edit:`خصص شخصية الذكاء الاصطناعي مع ذاكرة متقدمة وتعلم تكيفي ومعلمات ذكية`},loading:`جاري تحميل النموذج...`,saved:`تم الحفظ`,tabs:{basic:`أساسي`,parameters:`المعلمات`,memory:`الذاكرة والتعلم`,advanced:`متقدم`},basic:{name:`الاسم`,namePlaceholder:`أدخل اسم الشخصية`,model:`النموذج`,selectModel:`اختر نموذجاً`,description:`الوصف`,descriptionPlaceholder:`صف شخصيتك...`,systemPrompt:`موجه النظام`,systemPromptPlaceholder:`أدخل موجه النظام الذي يحدد سلوك شخصيتك...`,systemPromptHint:`يحدد موجه النظام كيف ستتصرف شخصيتك وتستجيب.`},parameters:{temperature:`درجة الحرارة`,temperatureHint:`يتحكم في الإبداع مقابل الاتساق`,topP:`Top-P`,topPHint:`يتحكم في تنوع الاستجابة`,topK:`Top-K`,topKHint:`يحد المفردات لأعلى k رمز`,contextWindow:`نافذة السياق`,contextWindowHint:`الحد الأقصى لطول سجل المحادثة`,maxTokens:`الحد الأقصى للرموز`,maxTokensHint:`الحد الأقصى لطول الاستجابة`,repeatPenalty:`عقوبة التكرار`,repeatPenaltyHint:`يقلل الاستجابات المتكررة`},memory:{title:`نظام الذاكرة`,subtitle:`الشخصية تتذكر المحادثات بمرور الوقت`,enableHint:`فعّل نظام الذاكرة للسماح لشخصيتك بتذكر المحادثات وبناء السياق بمرور الوقت.`,loading:`جاري تحميل حالة الذاكرة...`,noData:`لا توجد بيانات ذاكرة بعد`,memories:`الذكريات`,mbUsed:`ميجابايت مستخدمة`,lastBackup:`آخر نسخة احتياطية`,never:`أبداً`,maxMemories:`الحد الأقصى للذكريات`,maxMemoriesHint:`كم ذكرى يمكن لهذه الشخصية تخزينها`,retention:`الاحتفاظ بالذاكرة`,retentionHint:`أيام الاحتفاظ بالذكريات قبل التنظيف`,autoCleanup:`تنظيف تلقائي للذكريات القديمة`,wipeAll:`مسح جميع الذكريات`,wipeCannot:`لا يمكن التراجع عن هذا`,wipeButton:`مسح`,wiping:`جاري المسح...`,wipeConfirm:`هل أنت متأكد من مسح جميع الذكريات؟ لا يمكن التراجع عن هذا.`,wipeSuccess:`تم مسح {{count}} ذكرى`},learning:{title:`التعلم التكيفي`,subtitle:`الشخصية تتطور بناءً على التفاعلات`,enableHint:`فعّل التعلم التكيفي للسماح لشخصيتك بالتطور وتخصيص الاستجابات بناءً على تفاعلاتك.`,speed:`سرعة التعلم`,slow:`بطيء`,slowDesc:`تغييرات تدريجية`,balanced:`متوازن`,balancedDesc:`وتيرة معتدلة`,fast:`سريع`,fastDesc:`تكيف سريع`,autoAdapt:`التكيف التلقائي مع تفضيلات المستخدم`,whatLearns:`ما تتعلمه الشخصية:`,conversationTone:`نبرة المحادثة`,responseStyle:`أسلوب الاستجابة`,userPreferences:`تفضيلات المستخدم`,topicInterests:`اهتمامات الموضوع`},advanced:{embeddingModel:`نموذج التضمين`,embeddingHint:`اختر النموذج المستخدم لتشفير الذاكرة والبحث الدلالي. يتم عرض نماذج التضمين أولاً، تليها النماذج الأخرى المتاحة.`,noModels:`لم يتم العثور على نماذج`,embeddingModels:`نماذج التضمين`,otherModels:`نماذج أخرى`,installHint:`ثبّت نموذج تضمين:`,recommended:`موصى به: nomic-embed-text، mxbai-embed-large، bge-m3، snowflake-arctic-embed`,aboutTitle:`حول الإعدادات المتقدمة`,aboutDescription:`يُستخدم نموذج التضمين بواسطة نظام الذاكرة لفهم المعنى الدلالي والعثور على الذكريات ذات الصلة أثناء المحادثات. اختر نموذجاً يتناسب مع حالة استخدامك والموارد المتاحة.`},actions:{cancel:`إلغاء`,save:`حفظ`,saving:`جاري الحفظ...`,saveClose:`حفظ وإغلاق`,create:`إنشاء`},success:{created:`تم إنشاء الشخصية`,updated:`تم تحديث الشخصية`},error:{saveFailed:`فشل الحفظ`}},personaCard:{enhanced:`محسّن`,systemPrompt:`موجه النظام`,memories:`ذكريات`,use:`استخدام`,editTooltip:`تعديل الشخصية`,downloadTooltip:`تحميل الشخصية`,backup:`نسخة احتياطية`,exportDNA:`تصدير DNA`,wipeMemories:`مسح الذكريات`,wipeConfirm:`هل أنت متأكد من مسح جميع ذكريات هذه الشخصية؟ لا يمكن التراجع عن هذا الإجراء.`,wipeSuccess:`تم مسح {{count}} ذكرى`,backupSuccess:`تم تحميل نسخة الشخصية الاحتياطية بنجاح`,dnaSuccess:`تم تصدير DNA الشخصية بنجاح`,failed:`فشل {{action}}`},userManager:{title:`إدارة المستخدمين`,subtitle:`إدارة حسابات المستخدمين والصلاحيات`,pageDescription:`إدارة حسابات المستخدمين والأذونات وعناصر التحكم في الوصول لمثيل Libre WebUI الخاص بك.`,loading:`جاري تحميل المستخدمين...`,createUser:`إنشاء مستخدم`,search:`البحث عن مستخدمين...`,noUsers:`لم يتم العثور على مستخدمين`,noUsersMatching:`لا يوجد مستخدمون يطابقون بحثك`,columns:{user:`المستخدم`,email:`البريد الإلكتروني`,role:`الدور`,created:`تم الإنشاء`,actions:`الإجراءات`},roles:{admin:`مسؤول`,user:`مستخدم`},noEmail:`لا يوجد بريد إلكتروني`,deleteConfirm:`هل أنت متأكد من حذف المستخدم "{{name}}"؟`,deleteSuccess:`تم حذف المستخدم بنجاح`,deleteFailed:`فشل حذف المستخدم`,cannotDeleteSelf:`لا يمكنك حذف حسابك الخاص`,form:{title:{create:`إنشاء مستخدم`,edit:`تعديل المستخدم`},username:`اسم المستخدم`,usernamePlaceholder:`أدخل اسم المستخدم`,email:`البريد الإلكتروني`,emailPlaceholder:`أدخل البريد الإلكتروني (اختياري)`,password:`كلمة المرور`,passwordPlaceholder:`أدخل كلمة المرور`,passwordHint:`اتركها فارغة للاحتفاظ بكلمة المرور الحالية`,role:`الدور`,creating:`جاري الإنشاء...`,updating:`جاري التحديث...`,createButton:`إنشاء مستخدم`,updateButton:`تحديث المستخدم`,createSuccess:`تم إنشاء المستخدم بنجاح`,updateSuccess:`تم تحديث المستخدم بنجاح`,createFailed:`فشل إنشاء المستخدم`,updateFailed:`فشل تحديث المستخدم`}},chatHistory:{label:`سجل المحادثة`,jumpToTurn:`الانتقال إلى الدور {{index}} من {{total}}`},chatMessage:{you:`أنت`,assistant:`المساعد`,system:`النظام`,copy:`نسخ`,copyMessage:`نسخ الرسالة`,copied:`تم النسخ!`,regenerate:`إعادة التوليد`,regenerateResponse:`إعادة توليد الاستجابة`,edit:`تعديل`,editSystemMessage:`تعديل رسالة النظام`,saveChanges:`حفظ التغييرات`,cancelEditing:`إلغاء التعديل`,delete:`حذف`,deleteConfirm:`حذف هذه الرسالة؟`,branch:`تفرع`,speaking:`جاري التحدث...`,speakMessage:`نطق الرسالة`,stopSpeaking:`إيقاف التحدث`,showMore:`عرض المزيد`,showLess:`عرض أقل`,thinking:`يفكر`,systemMessagePlaceholder:`أدخل رسالة النظام...`,fullSizeImage:`صورة بالحجم الكامل`,startConversation:`ابدأ محادثة`,startConversationDescription:`أرسل رسالة للبدء في الدردشة مع مساعدك الذكي. اطرح أسئلة، احصل على مساعدة في البرمجة، أو أجرِ محادثة طبيعية.`,scrollToBottom:`انتقل إلى الأسفل`,newMessages:`رسائل جديدة`},imageGallery:{title:`معرض الصور`,noImages:`لا توجد صور بعد`,noImagesHint:`ولّد أول صورة باستخدام اللوحة على اليمين`,delete:`حذف`,download:`تحميل`,deleteConfirm:`هل أنت متأكد من حذف هذه الصورة؟`,deleteSuccess:`تم حذف الصورة`,deleteFailed:`فشل حذف الصورة`,downloadFailed:`فشل تحميل الصورة`,loadMore:`تحميل المزيد ({{current}} من {{total}})`,loadFailed:`فشل تحميل المعرض`},imageGeneration:{title:`توليد صورة`,prompt:`الموجه`,promptPlaceholder:`صف الصورة التي تريد إنشاءها...`,model:`النموذج`,selectModel:`اختر نموذجاً`,noModels:`لا توجد نماذج توليد صور متاحة`,configurePlugin:`قم بإعداد إضافة مع دعم توليد الصور`,size:`الحجم`,quality:`الجودة`,style:`الأسلوب`,generate:`توليد`,generating:`جاري التوليد...`,success:`تم توليد الصورة بنجاح`,failed:`فشل توليد الصورة`,enterPrompt:`يرجى إدخال موجه`,promptTooLong:`يتجاوز النص الحد الأقصى البالغ {{max}} حرف`},errorBoundary:{title:`حدث خطأ ما`,description:`واجهنا خطأ غير متوقع. يرجى تحديث الصفحة.`,tryAgain:`تحديث الصفحة`,goHome:`الذهاب للرئيسية`,errorDetails:`تفاصيل الخطأ (التطوير)`},documents:{title:`المستندات`,upload:`رفع مستند`,uploading:`جاري الرفع...`,noDocuments:`لم يتم رفع مستندات`,uploadHint:`ارفع مستندات لاستخدامها في محادثاتك`,delete:`حذف`,deleteConfirm:`هل أنت متأكد من حذف هذا المستند؟`,deleteSuccess:`تم حذف المستند`,deleteFailed:`فشل حذف المستند`,uploadSuccess:`تم رفع المستند بنجاح`,uploadFailed:`فشل رفع المستند`,types:`مدعوم: PDF، TXT، MD، DOCX`,unsupportedFileType:`يتم دعم ملفات PDF وTXT فقط`,fileSizeTooLarge:`يجب أن يكون حجم الملف أقل من 10 ميجابايت`,uploadSuccessWithName:`تم رفع المستند "{{name}}" بنجاح`,removeSuccess:`تم إزالة المستند بنجاح`,removeFailed:`فشل إزالة المستند`,removeError:`حدث خطأ أثناء إزالة المستند`,clickToUpload:`انقر للرفع`,orDragAndDrop:`أو اسحب وأفلت`,fileTypesAndSize:`ملفات PDF أو TXT حتى 10 ميجابايت`,uploadedDocuments:`المستندات المرفوعة`,removeDocument:`إزالة المستند`},ttsButton:{speak:`تحدث`,stop:`إيقاف`,speaking:`جاري التحدث...`,generateFailed:`فشل توليد الكلام`,playbackFailed:`فشل تشغيل الصوت`,stopSpeaking:`إيقاف التحدث`,generatingSpeech:`جاري توليد الكلام...`,readAloud:`قراءة بصوت عالٍ`},artifacts:{title:`المخرجات`,code:`الكود`,preview:`معاينة`,copy:`نسخ الكود`,copied:`تم النسخ!`,download:`تحميل`,expand:`توسيع`,collapse:`طي`,openInNewTab:`فتح في علامة تبويب جديدة`,invalidSvg:`محتوى SVG غير صالح`,invalidJson:`محتوى JSON غير صالح`,previewMode:`وضع المعاينة`,codeMode:`وضع الكود`,copyContent:`نسخ المحتوى`,openInPanel:`فتح في اللوحة`,openInNewWindow:`فتح في نافذة جديدة`,created:`تم الإنشاء`,closePanelEsc:`إغلاق اللوحة (Esc)`,copyButton:`نسخ`,open:`فتح`,dragEdgeToResize:`اسحب الحافة لتغيير الحجم`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`},personaImportExport:{title:`استيراد وتصدير الشخصيات`,description:`صدّر شخصياتك لمشاركتها أو استورد شخصيات من الآخرين`,exportPersonas:`تصدير الشخصيات`,importPersonas:`استيراد الشخصيات`,noPersonasToExport:`لا توجد شخصيات للتصدير`,personasAvailable:`{{count}} شخصية متاحة`,personasAvailable_plural:`{{count}} شخصيات متاحة`,exportAll:`تصدير الكل`,uploadJsonFile:`رفع ملف JSON`,pasteJsonLabel:`لصق بيانات JSON`,pasteJsonPlaceholder:`الصق بيانات JSON للشخصية هنا...`,importing:`جاري الاستيراد...`,importButton:`استيراد الشخصية/الشخصيات`,expectedFormat:`تنسيق JSON المتوقع:`,exportSuccess:`تم تصدير الشخصية "{{name}}" بنجاح`,exportFailed:`فشل تصدير الشخصية`,exportAllSuccess:`تم تصدير جميع الشخصيات {{count}} بنجاح`,exportAllFailed:`فشل تصدير الشخصيات`,pasteJsonData:`يرجى لصق بيانات JSON للشخصية`,importMultipleSuccess:`تم استيراد {{count}} شخصيات بنجاح`,importMultipleFailed:`فشل استيراد {{count}} شخصيات`,importNoneFailed:`فشل استيراد أي شخصيات`,importSuccess:`تم استيراد الشخصية بنجاح`,importFailed:`فشل استيراد الشخصية`},generationStats:{details:`التفاصيل`,promptTokens:`رموز الإدخال:`,generatedTokens:`الرموز المولدة:`,totalTokens:`إجمالي الرموز:`,speed:`السرعة:`,promptEval:`تقييم الإدخال:`,generation:`التوليد:`,modelLoad:`تحميل النموذج:`,totalTime:`الوقت الإجمالي:`,generatedAt:`تم التوليد في:`},userMenu:{loggedOut:`تم تسجيل الخروج بنجاح`,pictureUpdated:`تم تحديث صورة الملف الشخصي`,failedUpdateAvatar:`فشل تحديث الصورة الرمزية`,failedUpdatePicture:`فشل تحديث صورة الملف الشخصي`,noEmail:`لم يتم تقديم بريد إلكتروني`,changePicture:`تغيير الصورة`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,signOut:`تسجيل الخروج`,changeProfilePicture:`تغيير صورة الملف الشخصي`},pluginManager:{title:`مدير الإضافات`,upload:`تحميل`,addJson:`إضافة JSON`,browseHF:`تصفح HF Hub`,confirmDelete:`هل أنت متأكد من حذف هذا الإضافة؟`,uploading:`جاري تحميل الإضافة...`,pasteJson:`الصق JSON الإضافة هنا...`,installPlugin:`تثبيت الإضافة`,loading:`جاري تحميل الإضافات...`,noPlugins:`لم يتم تثبيت أي إضافة`,noPluginsDescription:`قم بتحميل ملف إضافة أو أضف إضافة من JSON للبدء.`,active:`نشط`,id:`المعرف`,endpoint:`نقطة النهاية`,activate:`تفعيل`,deactivate:`تعطيل`,activePlugin:`الإضافة النشطة`,activePluginDescription:`سيتم توجيه جميع طلبات الدردشة عبر هذه الإضافة`,variables:{title:`المتغيرات`,save:`حفظ`,saving:`جاري الحفظ...`,saved:`تم حفظ المتغيرات`,saveFailed:`فشل حفظ المتغيرات`,resetDefaults:`إعادة التعيين للافتراضي`,reset:`تم إعادة تعيين المتغيرات`,sensitiveSet:`تم تعيين القيمة (أدخل قيمة جديدة للتغيير)`}},huggingface:{title:`متصفح نماذج HuggingFace`,subtitle:`تصفح واختيار النماذج من المركز`,searchPlaceholder:`البحث عن نماذج...`,filters:`عوامل التصفية`,task:`المهمة`,sortBy:`ترتيب حسب`,noModels:`لم يتم العثور على نماذج`,adjustSearch:`حاول ضبط البحث أو عوامل التصفية`,gated:`مقيد`,selected:`محدد`,select:`اختيار`,refresh:`تحديث`,modelsFound:`نماذج موجودة`},demoMode:{title:`وضع تجريبي`,github:`GitHub`},personaBackground:{label:`صورة الخلفية`,uploadBackgroundImage:`رفع صورة الخلفية`,dragAndDrop:`اسحب وأفلت صورة أو انقر للتصفح`,chooseImage:`اختيار صورة`,uploading:`جارٍ الرفع...`,enterImageUrl:`أو أدخل رابط الصورة`,supportedFormats:`يدعم: JPG, PNG, GIF, WebP (الحد الأقصى 5 ميجابايت). الصور العريضة الأفقية تعمل بشكل أفضل.`,customBackground:`صورة خلفية مخصصة`,clickToChange:`انقر للتغيير أو الإزالة`,removed:`تم إزالة الخلفية`,uploaded:`تم رفع الخلفية بنجاح`,invalidFile:`يرجى اختيار ملف صورة صالح`,fileTooLarge:`يجب أن يكون حجم صورة الخلفية أقل من 5 ميجابايت`,readFailed:`فشل في قراءة ملف الصورة`,uploadFailed:`فشل في رفع صورة الخلفية`},modelSelector:{searchInstalled:`البحث في النماذج المثبتة...`,searchOllama:`البحث في مكتبة Ollama...`,searchHuggingFace:`البحث في HuggingFace...`,selectModel:`اختر نموذجًا`,personas:`الشخصيات`,ollamaModels:`نماذج Ollama`,pluginModels:`نماذج الإضافات`,actions:`الإجراءات`,installed:`مثبت`,use:`استخدام`,pull:`تنزيل`,pullRestricted:`تثبيت النماذج مقصور على المسؤولين في هذا المثيل.`,adminOnlyPull:`للمسؤولين فقط`},libreClaw:{title:`الوكلاء`,subtitle:`يعمل الوكيل المحلي والموافقات والجداول الزمنية والذاكرة والأدوات والاستخدام.`,dashboard:`لوحة المعلومات`,connection:{disconnectedTitle:`خدمة Libre Claw غير متصلة`,disconnectedDescription:`ابدأ تشغيله محليًا باستخدام <command>libre-claw start</command> أو قم بتعيين <env>LIBRE_CLAW_BASE_URL</env> في بيئة الواجهة الخلفية.`},status:{connected:`متصل`,disconnected:`غير متصل`,activeRuns:`{{count}} نشط`,activeRuns_plural:`{{count}} نشط`},states:{queued:`في قائمة الانتظار`,running:`قيد التشغيل`,blocked:`محظور`,done:`تم`,failed:`فشل`,cancelled:`تم الإلغاء`},startRun:{title:`بدء تشغيل الوكيل`,placeholder:`اطلب من Libre Claw فحص الريبو، أو إصلاح الخلل، أو إجراء مراجعة، أو جدولة تقرير...`,chatRun:`تشغيل الدردشة`,goalMode:`وضع الهدف`,providerOverride:`تجاوز الموفر`,modelOverride:`تجاوز النموذج`,run:`تشغيل`},modelRoute:{title:`الطريق النموذجي`,providerPlaceholder:`مزود`,modelPlaceholder:`نموذج`,persistGlobal:`استمر في Libre Claw التكوين العام`,saveModel:`حفظ النموذج`,theme:`سمة Libre Claw`,saveTheme:`حفظ الموضوع`},runs:{title:`التشغيلات`,empty:`لا توجد تشغيلات Libre Claw بعد.`},timeline:{title:`الخط الزمني للتشغيل`,empty:`حدد تشغيلًا لتفقد أحداثه.`,streaming:`الجري...`,assistantResponse:`رد مساعد`,resultOk:`حسنا`,resultError:`خطأ`,labels:{userMessage:`رسالة المستخدم`,toolCall:`استدعاء الأداة`,toolResult:`نتيجة الأداة`,approvalRequest:`طلب الموافقة`,approvalResponse:`رد الموافقة`,runStarted:`بدأ التشغيل`,runFinished:`انتهى التشغيل`,usage:`الاستخدام`,error:`خطأ`}},approvals:{needed:`الموافقة مطلوبة`,allowOnce:`السماح مرة واحدة`,alwaysAllowTool:`السماح دائمًا بالأداة`,deny:`رفض`,toolApprovalRequested:`تم طلب الموافقة على الأداة`},automations:{title:`الأتمتة`,namePlaceholder:`الاسم`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`موجه الأتمتة`,create:`إنشاء`,empty:`لا توجد عمليات أتمتة مجدولة Libre Claw.`,runNow:`تشغيل الآن`,pause:`وقفة`,resume:`استئناف`,routes:{report:`تقرير`,telegram:`Telegram`},status:{active:`نشط`,paused:`متوقف مؤقتًا`}},usageFallback:{title:`الاستخدام والاحتياطي`,usage:`الاستخدام`,fallbackRoute:`الطريق الاحتياطي`,noUsage:`لا توجد سجلات استخدام حتى الآن.`},metrics:{provider:`مزود`,model:`نموذج`,input:`الإدخال`,output:`الإخراج`,cached:`مخبأة`,reasoning:`المنطق`,cost:`التكلفة`,tool:`أداة`,resolution:`القرار`,state:`الحالة`,stopReason:`سبب التوقف`,tokens:`{{formatted}} رمز مميز`,tokens_plural:`{{formatted}} الرموز`},fallbacks:{tool:`أداة`,unknown:`غير معروف`,resolved:`حلها`,unknownError:`خطأ غير معروف`},toasts:{loadStatusFailed:`لا يمكن تحميل حالة Libre Claw`,enterTask:`أدخل مهمة لـ Libre Claw`,runStarted:`بدأ تشغيل Libre Claw`,startRunFailed:`تعذر بدء تشغيل Libre Claw`,runCancelled:`تم إلغاء التشغيل`,cancelRunFailed:`تعذر إلغاء التشغيل`,approved:`تمت الموافقة عليه`,denied:`مرفوض`,resolvePermissionFailed:`لا يمكن حل الإذن`,providerModelRequired:`مطلوب الموفر والنموذج`,modelUpdated:`تم تحديث نموذج Libre Claw`,updateModelFailed:`لا يمكن تحديث النموذج`,themeUpdated:`تم تحديث سمة Libre Claw`,updateThemeFailed:`لا يمكن تحديث الموضوع`,automationRequired:`مطلوب اسم الأتمتة والجدول الزمني والموجه`,automationCreated:`تم إنشاء الأتمتة`,createAutomationFailed:`لا يمكن إنشاء الأتمتة`,automationUpdated:`تم تحديث الأتمتة`,updateAutomationFailed:`لا يمكن تحديث الأتمتة`}},work:{title:`العمل`,subtitle:`مساحات عمل معزولة للنماذج`,tasks:{title:`مهام العمل`,subtitle:`مساحات عمل محلية دائمة`,new:`مهمة جديدة`,emptyTitle:`لا توجد مهام عمل بعد`,empty:`ستظهر مهام العمل هنا بعد إرسال الرسالة الأولى.`,untitled:`مهمة بلا عنوان`,actions:`إجراءات المهمة`,delete:`حذف المهمة`,deleteNamed:`حذف ⁨{{title}}⁩`,deleteConfirm:`هل تريد حذف «⁨{{title}}⁩» ومساحة عملها نهائيًا؟`,close:`إغلاق مهام العمل`,open:`فتح مهام العمل`,rename:`عنوان المهمة`,loading:`جارٍ تحميل المهمة…`,notFound:`مهمة العمل هذه غير متاحة`,back:`بدء مهمة جديدة`,status:`الحالة: {{status}}`},landing:{title:`بدء مهمة عمل جديدة`,description:`امنح نموذجًا محليًا أو تابعًا لمزوّد مُعدّ مساحة عمل دائمة ومعزولة. يمكنه فحص الملفات وتشغيل الأدوات والمتابعة من حيث توقف عند عودتك.`,isolated:`معزولة`,isolatedBody:`لكل مهمة حاويتها وملفاتها الخاصة.`,durable:`دائمة`,durableBody:`يمكنك العودة إلى محادثتها ومساحة عملها لاحقًا.`,controlled:`مضبوطة`,controlledBody:`تبقى بيئة التشغيل وملفات المهمة معزولة عن النظام المضيف.`},composer:{placeholder:`صِف ما تريد بناءه أو تغييره…`,model:`نموذج العمل`,noModels:`لا توجد نماذج متوافقة مع وضع العمل`,cancel:`إيقاف`,send:`تشغيل`,hint:`تحتفظ كل مهمة بملفاتها وسجلها الخاصين. راجع مخرجات النموذج قبل استخدامها.`,remoteTitle:`مزوّد بعيد`,remoteHint:`تُرسل المحادثة ومخرجات الأدوات إلى الخدمة المُعدّة. قد يجري التشغيل المستقل الواحد عدة اتصالات بالمزوّد وقد تترتب عليه رسوم. تبقى ملفات مساحة العمل محلية ما لم تُرجع إحدى الأدوات محتوياتها.`,remoteDismiss:`تجاهل`,remoteDismissLabel:`تجاهل إشعار المزوّد البعيد`,remoteDismissFailed:`تعذّر حفظ تفضيل المزوّد البعيد.`,noModelSelected:`لم يتم اختيار نموذج متوافق مع وضع العمل.`},conversation:{ready:`مساحة العمل جاهزة`,empty:`تابع المهمة أدناه. تظل هذه المحادثة وملفاتها مرتبطة بمساحة العمل هذه.`,loadOlder:`تحميل الرسائل الأقدم`},status:{preparing:`جارٍ تجهيز مساحة العمل المعزولة…`,running:`جارٍ العمل داخل مساحة العمل المحلية…`},statusLabels:{idle:`خامل`,thinking:`يفكّر`,complete:`مكتمل`,needsInput:`بحاجة إلى إدخال`,error:`خطأ`},live:{connecting:`جارٍ الاتصال بالتحديثات المباشرة…`,reconnecting:`جارٍ إعادة الاتصال بالتحديثات المباشرة…`,unavailable:`التحديثات المباشرة غير متاحة`,newActivity:`نشاط جديد`,skillsLoaded:`مهارات مساحة العمل · {{count}}`},runtime:{unavailable:`بيئة التشغيل غير متاحة`,ready:`بيئة التشغيل جاهزة`,readyOllama:`Docker جاهز`,readyPlugin:`Docker والمكوّن الإضافي جاهزان`,readyHybrid:`Docker والنماذج جاهزة`,reason:`يلزم توفر Docker ومزوّد نماذج متاح عبر Ollama أو مكوّن إضافي.`},workspace:{label:`طرق عرض مساحة العمل`,files:`الملفات`,activity:`النشاط`,preview:`المعاينة`,resize:`تغيير حجم المحادثة ومساحة العمل`,resizeHint:`اسحب لتغيير الحجم. استخدم مفاتيح الأسهم للتحكم الدقيق. انقر نقرًا مزدوجًا أو اضغط Enter لإعادة التعيين.`,splitSize:`المحادثة {{conversation}}٪، مساحة العمل {{workspace}}٪`,terminal:`الطرفية`},files:{discard:`هل تريد تجاهل التغييرات غير المحفوظة في الملف؟`,leaveWithDraft:`هل تريد مغادرة هذا الملف؟ سيبقى تعديلك غير المحفوظ كمسودة في المتصفح.`,up:`المجلد الأصل`,back:`العودة إلى الملفات`,empty:`لا توجد ملفات في هذا المجلد بعد.`,select:`اختر ملفًا لفحصه وتعديله.`,editorLabel:`محرر الملف: {{path}}`,format:`تنسيق`,formatted:`تم تنسيق الشيفرة.`,formatFailed:`تعذّر تنسيق هذا الملف.`,formatShortcut:`تنسيق (Shift+Alt+F)`,formatTooLarge:`يقتصر التنسيق على الملفات التي تقل عن 100,000 محرف و4,000 سطر.`,formatUnsupported:`التنسيق غير متاح لهذا النوع من الملفات.`,saveShortcut:`حفظ (⌘/Ctrl+S)`,highlightPaused:`تم إيقاف التمييز المباشر مؤقتًا للملفات الكبيرة للحفاظ على استجابة المحرر.`,plainTextLarge:`نص عادي · ملف كبير`,changes:`التغييرات`,changesSince:`ما تغيّر منذ الدور الأخير`,diffLabel:`التغييرات منذ الدور الأخير: {{path}}`,diffFolded:`{{count}} سطرًا دون تغيير`},activity:{empty:`ستظهر الأوامر وعمليات الملفات ونتائج الأدوات هنا.`,toolActivity:`نشاط الأداة`,details:`التفاصيل`,kinds:{message:`رسالة`,toolCall:`استدعاء أداة`,toolResult:`نتيجة أداة`,error:`خطأ`}},preview:{command:`أمر تشغيل اختياري`,start:`بدء المعاينة`,stop:`إيقاف المعاينة`,open:`فتح`,starting:`جارٍ بدء المعاينة…`,frameTitle:`معاينة مساحة العمل`,failed:`تعذّر بدء المعاينة. راجع «النشاط»، ثم جرّب أمرًا آخر.`,empty:`شغّل التطبيق داخل مساحة العمل هذه لمعاينته هنا.`},mobile:{surface:`واجهة المهمة`,conversation:`المحادثة`,workspace:`مساحة العمل`},toasts:{runFailed:`تعذّر بدء مهمة العمل.`,updateFailed:`تعذّر تحديث هذه المهمة.`,renameFailed:`تعذّر تغيير اسم هذه المهمة.`,cancelled:`تم إيقاف تشغيل المهمة.`,cancelFailed:`تعذّر إيقاف تشغيل المهمة.`,deleteFailed:`تعذّر حذف مهمة العمل هذه.`,saveFailed:`تعذّر حفظ هذا الملف.`,saved:`تم حفظ الملف.`,previewFailed:`تعذّر بدء المعاينة.`,previewStopFailed:`تعذّر إيقاف المعاينة.`},terminal:{connecting:`جارٍ فتح صدفة داخل بيئة العزل…`,closed:`انتهت جلسة الطرفية.`,failed:`تعذّر بدء جلسة الطرفية.`,reconnect:`إعادة الاتصال`,unavailable:`الطرفية التفاعلية غير متاحة في هذا النشر.`,blockedByRun:`النموذج يستخدم هذه الحاوية. تفتح الطرفية عند انتهاء الدور.`,taskRunning:`دور النموذج قيد التنفيذ`}}};export{e as default};