libre-webui 0.20.0 → 0.21.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 (175) hide show
  1. package/README.md +31 -21
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +2 -0
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/index.d.ts.map +1 -1
  6. package/backend/dist/index.js +2 -0
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/routes/chat.d.ts.map +1 -1
  9. package/backend/dist/routes/chat.js +97 -10
  10. package/backend/dist/routes/chat.js.map +1 -1
  11. package/backend/dist/routes/libreClaw.d.ts.map +1 -1
  12. package/backend/dist/routes/libreClaw.js +41 -0
  13. package/backend/dist/routes/libreClaw.js.map +1 -1
  14. package/backend/dist/routes/ollama.d.ts.map +1 -1
  15. package/backend/dist/routes/ollama.js +52 -2
  16. package/backend/dist/routes/ollama.js.map +1 -1
  17. package/backend/dist/routes/search.d.ts +3 -0
  18. package/backend/dist/routes/search.d.ts.map +1 -0
  19. package/backend/dist/routes/search.js +143 -0
  20. package/backend/dist/routes/search.js.map +1 -0
  21. package/backend/dist/services/agentAccessService.d.ts +6 -0
  22. package/backend/dist/services/agentAccessService.d.ts.map +1 -0
  23. package/backend/dist/services/agentAccessService.js +58 -0
  24. package/backend/dist/services/agentAccessService.js.map +1 -0
  25. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  26. package/backend/dist/services/agentCliService.js +2 -1
  27. package/backend/dist/services/agentCliService.js.map +1 -1
  28. package/backend/dist/services/authService.d.ts +1 -0
  29. package/backend/dist/services/authService.d.ts.map +1 -1
  30. package/backend/dist/services/authService.js +2 -0
  31. package/backend/dist/services/authService.js.map +1 -1
  32. package/backend/dist/services/documentService.d.ts +2 -0
  33. package/backend/dist/services/documentService.d.ts.map +1 -1
  34. package/backend/dist/services/documentService.js +51 -23
  35. package/backend/dist/services/documentService.js.map +1 -1
  36. package/backend/dist/services/modelAccessService.d.ts +12 -0
  37. package/backend/dist/services/modelAccessService.d.ts.map +1 -0
  38. package/backend/dist/services/modelAccessService.js +66 -0
  39. package/backend/dist/services/modelAccessService.js.map +1 -0
  40. package/backend/dist/services/webSearchService.d.ts +64 -0
  41. package/backend/dist/services/webSearchService.d.ts.map +1 -0
  42. package/backend/dist/services/webSearchService.js +230 -0
  43. package/backend/dist/services/webSearchService.js.map +1 -0
  44. package/backend/dist/services/workAgentGuidance.d.ts +1 -0
  45. package/backend/dist/services/workAgentGuidance.d.ts.map +1 -1
  46. package/backend/dist/services/workAgentGuidance.js +3 -0
  47. package/backend/dist/services/workAgentGuidance.js.map +1 -1
  48. package/backend/dist/services/workAgentService.d.ts +6 -0
  49. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  50. package/backend/dist/services/workAgentService.js +199 -11
  51. package/backend/dist/services/workAgentService.js.map +1 -1
  52. package/backend/dist/services/workPolicyService.d.ts.map +1 -1
  53. package/backend/dist/services/workPolicyService.js +61 -11
  54. package/backend/dist/services/workPolicyService.js.map +1 -1
  55. package/backend/dist/storage.d.ts.map +1 -1
  56. package/backend/dist/storage.js +3 -3
  57. package/backend/dist/storage.js.map +1 -1
  58. package/backend/dist/storageMappers.d.ts +1 -0
  59. package/backend/dist/storageMappers.d.ts.map +1 -1
  60. package/backend/dist/storageMappers.js +1 -0
  61. package/backend/dist/storageMappers.js.map +1 -1
  62. package/backend/dist/types/index.d.ts +1 -0
  63. package/backend/dist/types/index.d.ts.map +1 -1
  64. package/backend/dist/types/index.js.map +1 -1
  65. package/backend/dist/utils/chatDocumentContext.d.ts +7 -0
  66. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  67. package/backend/dist/utils/chatDocumentContext.js +38 -30
  68. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  69. package/backend/dist/websocketServer.d.ts.map +1 -1
  70. package/backend/dist/websocketServer.js +79 -15
  71. package/backend/dist/websocketServer.js.map +1 -1
  72. package/backend/package.json +1 -1
  73. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  74. package/frontend/dist/assets/index-0wfi-EpC.js +40 -0
  75. package/frontend/dist/assets/index-D7m1zWWg.css +1 -0
  76. package/frontend/dist/index.html +12 -12
  77. package/frontend/dist/js/ArtifactContainer-DPRPcuES.js +1 -0
  78. package/frontend/dist/js/{ArtifactDemoPage-BOlB1lS-.js → ArtifactDemoPage-DzwPlz9J.js} +1 -1
  79. package/frontend/dist/js/{ArtifactSandboxFrame-DqU5GDrI.js → ArtifactSandboxFrame-CKi4mSTH.js} +2 -2
  80. package/frontend/dist/js/{ArtifactSlideOutPanel-B0I-hCux.js → ArtifactSlideOutPanel-BskRCzP0.js} +1 -1
  81. package/frontend/dist/js/ChatPage-DRutCyJ5.js +16 -0
  82. package/frontend/dist/js/FirstTimeSetup-DU50YWrE.js +1 -0
  83. package/frontend/dist/js/GalleryPage-DxXIUesf.js +1 -0
  84. package/frontend/dist/js/HomePage-Bew9kMKx.js +1 -0
  85. package/frontend/dist/js/{LibreClawPage-DUd3tjQE.js → LibreClawPage-Cy9y3YlF.js} +1 -1
  86. package/frontend/dist/js/{ModelManagerModals-D9j9RECi.js → ModelManagerModals-D-NxeVvV.js} +1 -1
  87. package/frontend/dist/js/ModelSelector-DXDcDmDR.js +1 -0
  88. package/frontend/dist/js/ModelsPage-Bj2reiF9.js +2 -0
  89. package/frontend/dist/js/{NotesPage-CTutDN50.js → NotesPage-CJKEbj3J.js} +1 -1
  90. package/frontend/dist/js/{PersonasPage-C6iTMI3N.js → PersonasPage-bgWF9S7b.js} +2 -2
  91. package/frontend/dist/js/{PluginUsagePage-BQQ0-_PP.js → PluginUsagePage-CRkD1Tz6.js} +1 -1
  92. package/frontend/dist/js/{RichMessageContent-DPqeqxkQ.js → RichMessageContent-DeNjCiyN.js} +1 -1
  93. package/frontend/dist/js/SettingsModal-BUUlkZcv.js +1 -0
  94. package/frontend/dist/js/SystemPage-DcO51urv.js +1 -0
  95. package/frontend/dist/js/UserManagementPage-DLiYw6xG.js +1 -0
  96. package/frontend/dist/js/WorkPage-MMQ0Y0U5.js +5 -0
  97. package/frontend/dist/js/{api-iCpOEijB.js → api-CZURQtuc.js} +4 -4
  98. package/frontend/dist/js/{appStore-DTd6dWg2.js → appStore-sGaWMSDr.js} +2 -2
  99. package/frontend/dist/js/ar-Bm27TCMQ.js +2 -0
  100. package/frontend/dist/js/{authStore-CuK4HUVh.js → authStore-uaj0hswV.js} +3 -3
  101. package/frontend/dist/js/bn-C7CHC42H.js +2 -0
  102. package/frontend/dist/js/chatStore-tRx0Ulq0.js +2 -0
  103. package/frontend/dist/js/{config--Xp9rZtJ.js → config-D-jxRG52.js} +1 -1
  104. package/frontend/dist/js/cs-zGEtwQn_.js +2 -0
  105. package/frontend/dist/js/da-B-0sHNTu.js +2 -0
  106. package/frontend/dist/js/de-UZNE6t2h.js +2 -0
  107. package/frontend/dist/js/es-CPLnFYIw.js +2 -0
  108. package/frontend/dist/js/{estree-BAQkciRX.js → estree-CRuerC6a.js} +1 -1
  109. package/frontend/dist/js/fr-Br1o0WVz.js +2 -0
  110. package/frontend/dist/js/hi-BcEvNEpb.js +2 -0
  111. package/frontend/dist/js/{html-DxA-Bcvi.js → html-BYKlz3Jp.js} +1 -1
  112. package/frontend/dist/js/i18n-DJTg6xWw.js +2 -0
  113. package/frontend/dist/js/id-C30L2DoT.js +2 -0
  114. package/frontend/dist/js/is-BAEhfi5Z.js +2 -0
  115. package/frontend/dist/js/it-HWnfQXZY.js +2 -0
  116. package/frontend/dist/js/ja-Dvux1mon.js +2 -0
  117. package/frontend/dist/js/ko-agDQ__KP.js +2 -0
  118. package/frontend/dist/js/{markdown-IsZpJ5ke.js → markdown-DFy8bILU.js} +1 -1
  119. package/frontend/dist/js/{messageCodeStyles-CsV3zwyK.js → messageCodeStyles-_gGirbe-.js} +2 -2
  120. package/frontend/dist/js/ms-aNRa2QX7.js +2 -0
  121. package/frontend/dist/js/nl-BtkiDUn-.js +2 -0
  122. package/frontend/dist/js/pl-SEO0lBnX.js +2 -0
  123. package/frontend/dist/js/pt-BYtjmvq1.js +2 -0
  124. package/frontend/dist/js/ru-B-ynj2hU.js +2 -0
  125. package/frontend/dist/js/{standalone-CK3b5Ktq.js → standalone-jOqWoOmp.js} +1 -1
  126. package/frontend/dist/js/sv-CliKR15U.js +2 -0
  127. package/frontend/dist/js/th-DJQyDr9J.js +2 -0
  128. package/frontend/dist/js/tr-BBGKZ1la.js +2 -0
  129. package/frontend/dist/js/{typescript-BMYmVohw.js → typescript-TwGXpgeF.js} +1 -1
  130. package/frontend/dist/js/{ui-C2kNYwfG.js → ui-DSFUl2vT.js} +2 -2
  131. package/frontend/dist/js/{ui-vendor-D_pYT79f.js → ui-vendor-xUzKqAXI.js} +1 -1
  132. package/frontend/dist/js/uk-C1GcFWxE.js +2 -0
  133. package/frontend/dist/js/vi-CIxgICOQ.js +2 -0
  134. package/frontend/dist/js/{workApi-C33ZrPws.js → workApi-kClHFVkJ.js} +2 -2
  135. package/frontend/dist/js/zh-Cm7vsQ9s.js +2 -0
  136. package/package.json +2 -2
  137. package/frontend/dist/assets/index-Z4-oLWDC.js +0 -2
  138. package/frontend/dist/assets/index-tBUyDbHh.css +0 -1
  139. package/frontend/dist/js/ArtifactContainer-DQRF4rh-.js +0 -1
  140. package/frontend/dist/js/ChatPage-DyV0_oCt.js +0 -16
  141. package/frontend/dist/js/FirstTimeSetup-ButTmjp0.js +0 -1
  142. package/frontend/dist/js/GalleryPage-CaT63b-s.js +0 -1
  143. package/frontend/dist/js/HomePage-BWyg3nHu.js +0 -1
  144. package/frontend/dist/js/ModelSelector-COFcJnMJ.js +0 -1
  145. package/frontend/dist/js/ModelsPage-BRbTEXNL.js +0 -2
  146. package/frontend/dist/js/SettingsModal-C_1k75Kv.js +0 -1
  147. package/frontend/dist/js/SystemPage-CUecyRPh.js +0 -1
  148. package/frontend/dist/js/UserManagementPage-CZ4KMOY9.js +0 -1
  149. package/frontend/dist/js/WorkPage-BqDcfXV6.js +0 -5
  150. package/frontend/dist/js/ar-C8YV99Y-.js +0 -2
  151. package/frontend/dist/js/bn-C9dcls7_.js +0 -2
  152. package/frontend/dist/js/chatStore-VNT0eHRB.js +0 -2
  153. package/frontend/dist/js/cs-DtL8VeeX.js +0 -2
  154. package/frontend/dist/js/da-U3aNn1aF.js +0 -2
  155. package/frontend/dist/js/de-DzuyeVpX.js +0 -2
  156. package/frontend/dist/js/es-OiU8plii.js +0 -2
  157. package/frontend/dist/js/fr-DDa3R8bs.js +0 -2
  158. package/frontend/dist/js/hi-D8Y0hl34.js +0 -2
  159. package/frontend/dist/js/i18n-BqWNFeNo.js +0 -2
  160. package/frontend/dist/js/id-BwcWtkBv.js +0 -2
  161. package/frontend/dist/js/is-DzfQHQih.js +0 -2
  162. package/frontend/dist/js/it-C5VU3_Je.js +0 -2
  163. package/frontend/dist/js/ja-DLhOhxvf.js +0 -2
  164. package/frontend/dist/js/ko-CCKiyQD6.js +0 -2
  165. package/frontend/dist/js/ms-CXXkPvWw.js +0 -2
  166. package/frontend/dist/js/nl-CA_e0Epl.js +0 -2
  167. package/frontend/dist/js/pl-BG32wdpx.js +0 -2
  168. package/frontend/dist/js/pt-BzRGWQXO.js +0 -2
  169. package/frontend/dist/js/ru-DBjn_Q-Q.js +0 -2
  170. package/frontend/dist/js/sv-Hz_iRGdF.js +0 -2
  171. package/frontend/dist/js/th-MsyXlGH9.js +0 -2
  172. package/frontend/dist/js/tr-Cofmy_ef.js +0 -2
  173. package/frontend/dist/js/uk-B2o05LCR.js +0 -2
  174. package/frontend/dist/js/vi-CZh8uJgV.js +0 -2
  175. package/frontend/dist/js/zh-DhKXi8ZA.js +0 -2
@@ -1,5 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/babel-CmENXdZw.js","js/router-vendor-Ca9zqOqT.js","js/rolldown-runtime-hePW80VL.js","js/markdown-core-DHnR5Hw8.js","js/estree-BAQkciRX.js","assets/index-Z4-oLWDC.js","js/react-vendor-DPNXrO-8.js","js/useTranslation-CdeLZqSW.js","js/i18n-BqWNFeNo.js","js/i18next-DgmgtwsV.js","js/ui-vendor-D_pYT79f.js","js/utils-vendor-1zob7nK9.js","js/logger-DSXjF4ye.js","js/config--Xp9rZtJ.js","js/api-iCpOEijB.js","js/workApi-C33ZrPws.js","js/utils-BhpNrGnR.js","js/chatStore-VNT0eHRB.js","js/authStore-CuK4HUVh.js","js/appStore-DTd6dWg2.js","js/welcomePrompts-to5mv_gx.js","js/messageCodeStyles-CsV3zwyK.js","js/Button-X9TT9gTD.js","js/ui-C2kNYwfG.js","assets/index-tBUyDbHh.css","js/typescript-BMYmVohw.js","js/postcss-B5WIGhAY.js","js/html-DxA-Bcvi.js","js/markdown-IsZpJ5ke.js","js/yaml-QD4znPfZ.js","js/standalone-CK3b5Ktq.js","js/OptimizedSyntaxHighlighter-CWYUn9Oe.js","js/syntax-highlight-Ca9bHsaz.js","assets/xterm-DHcfr8qj.css"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{d as t,f as n}from"./markdown-core-DHnR5Hw8.js";import{d as r,f as i,i as a,l as o,u as s}from"./router-vendor-Ca9zqOqT.js";import{t as c}from"./useTranslation-CdeLZqSW.js";import{i as l}from"./i18n-BqWNFeNo.js";import{$t as u,B as d,Bt as f,C as p,Ct as m,Dt as h,F as g,It as _,L as v,Mt as y,N as b,Nt as x,Q as S,R as C,Sn as w,St as T,T as E,Tn as D,V as O,Vt as k,an as A,c as j,dn as M,i as ee,in as te,kt as N,m as ne,n as P,on as re,pn as ie,st as F,tt as ae,vn as oe,vt as se,x as ce,yn as le}from"./ui-vendor-D_pYT79f.js";import{t as I}from"./config--Xp9rZtJ.js";import{t as L}from"./workApi-C33ZrPws.js";import{s as ue}from"./api-iCpOEijB.js";import{t as R}from"./utils-BhpNrGnR.js";import{t as z}from"./chatStore-VNT0eHRB.js";import{a as de,i as fe,l as pe,n as me,o as he,s as ge}from"./authStore-CuK4HUVh.js";import{t as _e}from"./appStore-DTd6dWg2.js";import{t as B}from"./Button-X9TT9gTD.js";import{u as ve}from"./ui-C2kNYwfG.js";import{c as ye,l as be}from"../assets/index-Z4-oLWDC.js";import{t as xe}from"./RichMessageContent-DPqeqxkQ.js";import{t as Se}from"./ModelSelector-COFcJnMJ.js";import{n as Ce,t as V}from"./work-DVgm81bJ.js";var H=e(n(),1),U=t(),we=e=>Ce({model:e.name,providerType:e.isPlugin?`plugin`:`ollama`,providerId:e.isPlugin?e.pluginId:void 0}),W=e=>{let t=e.name.split(`/`).filter(Boolean),n=t[t.length-1]||e.name;return t.length>1?n.replace(/[-_]+/g,` `):n},G=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 Te({models:e,selectorModels:t,modelKey:n,running:r,loading:i,variant:a=`task`,disabled:o=!1,remoteDisclosureDismissed:s,remoteDisclosureSaving:l,onModelChange:d,onDismissRemoteDisclosure:f,onModelsRefresh:p,onSubmit:m,onCancel:h}){let{t:g}=c(),[_,v]=(0,H.useState)(``),y=(0,H.useRef)(null),x=(0,H.useRef)(null),S=(0,H.useRef)(null),C=e.find(e=>e.key===n),w=C?.remote===!0,T=a===`landing`,E=(0,H.useMemo)(()=>{let n=new Set(t.map(we)),r=e.filter(e=>!n.has(e.key)).map(G);return[...t,...r]},[e,t]);(0,H.useEffect)(()=>{let e=y.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,160)}px`)},[_]);let D=async()=>{await f()&&([x.current,S.current].find(e=>e&&e.offsetParent!==null)||x.current)?.focus()},O=t=>{let n=e.find(e=>e.key===t)||e.find(e=>e.providerType===`ollama`&&e.model===t);n&&d(n.key)},k=async()=>{let e=_.trim();!e||i||r||o||!C||await m(e)&&v(``)};return(0,U.jsxs)(`div`,{"data-testid":T?`work-landing-composer`:`work-task-composer`,"data-variant":a,className:R(`relative shrink-0`,T?`mt-10 w-full`:`border-t border-line bg-surface/95 px-3 py-3 backdrop-blur md:px-5`),children:[w&&!s&&(0,U.jsx)(`div`,{className:R(`absolute inset-x-3 z-30 mx-auto max-w-3xl md:inset-x-5`,`bottom-full mb-3`),children:(0,U.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,U.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,U.jsx)(P,{className:`h-4 w-4`})}),(0,U.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,U.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,U.jsx)(u,{"data-testid":`work-provider-disclosure-accent`,className:`h-4 w-4 text-warning-500`,"aria-hidden":`true`})}),(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsx)(`p`,{id:`work-provider-disclosure-title`,className:`text-sm font-semibold text-ink`,children:g(`work.composer.remoteTitle`,{defaultValue:`Remote provider`})}),(0,U.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,U.jsx)(`div`,{className:`mt-2.5 flex justify-end`,children:(0,U.jsx)(B,{"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,U.jsx)(`form`,{className:`mx-auto w-full max-w-3xl`,onSubmit:e=>{e.preventDefault(),k()},children:(0,U.jsxs)(`div`,{"data-testid":`work-composer-surface`,className:R(`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,U.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,U.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(),k())},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,U.jsx)(`div`,{className:`hidden shrink-0 sm:block`,children:(0,U.jsx)(Se,{models:E,selectedModel:n,onModelChange:e=>O(e.target.value),onModelsRefresh:()=>void p(),getModelValue:we,getModelLabel:W,getModelTitle:e=>e.name,triggerRef:x,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,U.jsx)(B,{"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 h(),children:i?(0,U.jsx)(F,{className:`h-4 w-4 animate-spin`}):(0,U.jsx)(ce,{className:`h-4 w-4 fill-current`})}):(0,U.jsx)(B,{"data-testid":`work-submit-button`,type:`submit`,variant:`ghost`,size:`sm`,disabled:i||o||!_.trim()||!C,className:R(`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,U.jsx)(F,{className:`h-4 w-4 animate-spin`}):(0,U.jsx)(b,{className:`h-4 w-4`})})]})}),(0,U.jsx)(`div`,{className:`mx-auto mt-3 w-full max-w-3xl sm:hidden`,children:(0,U.jsx)(Se,{models:E,selectedModel:n,onModelChange:e=>O(e.target.value),onModelsRefresh:()=>void p(),getModelValue:we,getModelLabel:W,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 Ee=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`},Oe=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 ke({run:e}){let[t,n]=(0,H.useState)();if((0,H.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,U.jsx)(`span`,{dir:`ltr`,className:`tabular-nums text-ink-subtle`,"aria-hidden":`true`,children:De(r-e.startedAt)}):null}function Ae({tool:e,expandedByDefault:t}){let{t:n}=c(),[r]=(0,H.useState)(e.status),[i,a]=(0,H.useState)(null),o=(0,H.useMemo)(()=>Ee(e.arguments),[e.arguments]),s=e.output||null,l=!!(o||s),d=e.status===`error`,f=e.status===`running`,p=(0,H.useId)(),m=d?n(`work.activity.kinds.error`,{defaultValue:`Error`}):f?n(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}):n(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),h=i??(e.status===r?t:e.status===`error`);return(0,U.jsxs)(`div`,{"data-testid":`work-live-tool`,"data-tool-id":e.id,className:R(`overflow-hidden rounded-xl border bg-surface-raised transition-colors`,d?`border-error-500/30`:`border-line`),children:[(0,U.jsxs)(`button`,{type:`button`,disabled:!l,onClick:()=>{a(!h)},"aria-expanded":l?h:void 0,"aria-controls":l?p:void 0,"aria-label":`${m}: ${e.name}`,className:`flex min-h-10 w-full items-center gap-2 px-3 py-2 text-start outline-none hover:bg-surface-subtle focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-[#ff7b52] disabled:cursor-default disabled:hover:bg-transparent`,children:[(0,U.jsx)(`span`,{className:`flex h-5 w-5 shrink-0 items-center justify-center`,children:d?(0,U.jsx)(u,{className:`h-3.5 w-3.5 text-error-500`}):f?(0,U.jsx)(F,{className:`h-3.5 w-3.5 animate-spin text-[rgb(48,121,255)] motion-reduce:animate-none`}):(0,U.jsx)(re,{className:`h-3.5 w-3.5 text-[rgb(76,212,117)]`})}),(0,U.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,U.jsx)(`span`,{className:`shrink-0 text-[10px] tabular-nums text-ink-subtle`,children:De(e.durationMs)}),l&&(0,U.jsx)(A,{"aria-hidden":`true`,className:R(`h-3.5 w-3.5 shrink-0 text-ink-subtle transition-transform`,h&&`rotate-180`)})]}),l&&h&&(0,U.jsxs)(`div`,{id:p,className:`border-t border-line bg-surface-subtle/50`,children:[o&&(0,U.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,U.jsx)(`pre`,{dir:`ltr`,className:R(`max-h-64 overflow-auto whitespace-pre-wrap break-words border-t border-line px-3 py-2.5 text-left font-mono text-[11px] leading-relaxed`,d?`text-error-600`:`text-ink-muted`),children:s})]})]})}var K=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 q({content:e,streaming:t}){let{t:n}=c(),[r,i]=(0,H.useState)(!1),a=t&&!r?K(e):``;return(0,U.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,U.jsxs)(`summary`,{className:`flex cursor-pointer list-none flex-col gap-1 px-3 py-2 marker:hidden [&::-webkit-details-marker]:hidden`,children:[(0,U.jsxs)(`span`,{className:`flex items-center justify-between gap-3 text-xs font-medium text-ink-muted`,children:[(0,U.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,U.jsx)(M,{className:R(`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`,t&&`animate-pulse-subtle motion-reduce:animate-none`)}),t?(0,U.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,U.jsx)(`span`,{className:`truncate`,children:n(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})})]}),(0,U.jsx)(A,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),a&&(0,U.jsx)(`span`,{dir:`auto`,"data-testid":`work-live-reasoning-preview`,className:`block truncate text-[11px] leading-relaxed text-ink-subtle`,children:a})]}),(0,U.jsx)(`div`,{className:`border-t border-line px-3 py-2.5`,children:(0,U.jsx)(ve,{content:e,isStreaming:t,className:`text-xs text-ink-muted`})})]})}var je=(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`}),Me=(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 Ne({run:e,variant:t=`conversation`}){let{t:n}=c(),r=[...e.tools].reverse().find(e=>e.status===`running`),i=Me(e.connection,n)||je(e.phase,n,r),a=!e.terminal,o=e.usage?.outputTokens,s=e.reasoning+e.response,l=o!==void 0&&o>0?o:s?Oe(s):o,d=(o===void 0||o===0)&&!!s&&l!==void 0,f=e.usage?.tokensPerSecond;return(0,U.jsxs)(`section`,{"data-testid":`work-live-run`,"data-run-id":e.runId,"data-phase":e.phase,"aria-busy":a||void 0,className:R(`min-w-0`,t===`activity`&&`rounded-2xl border border-line bg-surface p-3 shadow-subtle`),children:[(0,U.jsxs)(`div`,{className:`mb-3 flex min-h-6 items-center gap-2 text-xs`,children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:R(`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,U.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,U.jsx)(`span`,{dir:`ltr`,className:`shrink-0 tabular-nums text-ink-subtle`,children:e.roundLimit===void 0?`#${e.round}`:`${e.round}/${e.roundLimit}`}),(0,U.jsx)(ke,{run:e})]}),t===`conversation`&&(0,U.jsx)(`span`,{className:`sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:i}),e.skills.length>0&&(0,U.jsx)(`div`,{className:`mb-3 flex flex-wrap gap-1.5`,children:(0,U.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,U.jsx)(E,{className:`h-3 w-3 text-[#ff7b52]`,"aria-hidden":`true`}),(0,U.jsx)(`span`,{dir:`auto`,children:n(`work.live.skillsLoaded`,{count:e.skills.length,defaultValue:`Workspace skills · {{count}}`})})]})}),t===`conversation`?e.timeline.length>0&&(0,U.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,U.jsx)(q,{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,U.jsx)(Ae,{tool:n,expandedByDefault:n.status===`error`},n.id):null}return(0,U.jsx)(ve,{content:t.text,isStreaming:a&&r,className:`text-ink`},`segment-${n}`)})}):e.tools.length>0&&(0,U.jsx)(`div`,{"data-testid":`work-live-tools`,className:`space-y-1.5`,children:e.tools.map(e=>(0,U.jsx)(Ae,{tool:e,expandedByDefault:e.status===`running`||e.status===`error`},e.id))}),e.error&&(0,U.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,U.jsx)(u,{className:`mt-0.5 h-3.5 w-3.5 shrink-0`}),(0,U.jsx)(`span`,{children:e.error})]}),(l!==void 0||f!==void 0)&&(0,U.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,U.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.generatedTokens`,{defaultValue:`Generated tokens:`}),` `,(0,U.jsxs)(`bdi`,{dir:`ltr`,children:[d&&`≈`,l.toLocaleString()]})]}),f!==void 0&&(0,U.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.speed`,{defaultValue:`Speed:`}),` `,(0,U.jsxs)(`bdi`,{dir:`ltr`,children:[f.toFixed(1),` t/s`]})]})]}),a&&!e.reasoning&&!e.response&&e.tools.length===0&&(0,U.jsxs)(`div`,{"aria-hidden":`true`,className:`flex h-5 items-center gap-1 text-[rgb(48,121,255)]`,children:[(0,U.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current motion-reduce:animate-none`}),(0,U.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current [animation-delay:160ms] motion-reduce:animate-none`}),(0,U.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,U.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-ink-muted`,children:[(0,U.jsx)(p,{className:`h-3.5 w-3.5`}),n(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]})]})}function Pe({role:e,user:t,size:n=`message`}){let[r,i]=(0,H.useState)(null);if(e===`assistant`)return(0,U.jsx)(`div`,{role:`img`,"aria-label":`Libre WebUI`,"data-testid":`work-assistant-avatar`,className:R(`flex shrink-0 items-center justify-center rounded-full border border-line bg-surface-raised text-ink shadow-subtle`,n===`empty`?`mx-auto mb-4 h-12 w-12`:`mt-0.5 h-8 w-8`),children:(0,U.jsx)(be,{label:null,className:R(n===`empty`?`h-6 w-6`:`h-4 w-4`)})});let a=t?.username||`User`,o=t?.avatar?.trim()||``,s=!!o&&o!==r;return(0,U.jsx)(`div`,{role:s?void 0:`img`,"aria-label":s?void 0:a,"data-testid":`work-user-avatar`,className:R(`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,U.jsx)(`img`,{src:o,alt:a,className:`h-full w-full object-cover`,onError:()=>i(o)}):t?(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`text-xs font-medium uppercase leading-none`,children:t.username.charAt(0)}):(0,U.jsx)(j,{"aria-hidden":`true`,className:`h-4 w-4`})})}var Fe=(e,t)=>{let n=e.metadata,r=n?.name??n?.toolName??n?.tool??n?.command;return typeof r==`string`&&r?r:t},Ie=e=>{let t=e.metadata?.toolCallId;return typeof t==`string`&&t?t:null},J=(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?Fe(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}},Le=(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=Ie(a);if(a.kind===`tool_call`&&e){let o=i(J(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]=J(i.call,a,t),r.delete(e);continue}}}i(J(a.kind===`tool_call`?a:void 0,a.kind===`tool_call`?void 0:a,t),a.id)}return n};function Re({message:e}){let{t}=c();return(0,U.jsxs)(`details`,{"data-testid":`work-provider-reasoning`,className:`group ms-14 overflow-hidden rounded-xl border border-line bg-surface-subtle/70`,children:[(0,U.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,U.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,U.jsx)(M,{className:`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`}),(0,U.jsx)(`span`,{className:`truncate`,children:t(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})})]}),(0,U.jsx)(A,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),(0,U.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 ze({task:e,user:t,loading:n,loadingOlder:r,liveRun:i,onLoadOlder:a}){let{t:o}=c(),s=(0,H.useRef)(null),l=(0,H.useRef)(!0),[u,d]=(0,H.useState)(!1),f=(0,H.useMemo)(()=>[...e.messages||[]].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id)),[e.messages]),p=i?.runId,m=(0,H.useMemo)(()=>Le(f.filter(e=>!(p&&e.runId===p&&e.role!==`user`)),o(`work.activity.toolActivity`,{defaultValue:`Tool activity`})),[p,f,o]),h=[...f].reverse().find(e=>e.role===`assistant`&&e.kind===`message`)?.id;(0,H.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,H.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 g=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,U.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center text-ink-muted`,children:(0,U.jsx)(F,{className:`h-6 w-6 animate-spin`})}):(0,U.jsxs)(`div`,{className:`relative flex min-h-0 flex-1`,children:[(0,U.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,U.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,U.jsxs)(`div`,{className:`m-auto max-w-md text-center`,children:[(0,U.jsx)(Pe,{role:`assistant`,size:`empty`}),(0,U.jsx)(`h2`,{className:`text-lg font-semibold tracking-tight text-ink`,children:o(`work.conversation.ready`,{defaultValue:`Workspace ready`})}),(0,U.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,U.jsxs)(`div`,{className:`space-y-6`,children:[e.hasMoreMessages&&(0,U.jsx)(`div`,{className:`flex justify-center`,children:(0,U.jsxs)(`button`,{type:`button`,"data-testid":`work-load-older-messages`,disabled:r,onClick:()=>void g(),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,U.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),o(`work.conversation.loadOlder`,{defaultValue:`Load older messages`})]})}),m.map(({key:n,item:r})=>{if(r.type===`reasoning`)return(0,U.jsx)(Re,{message:r.message},n);if(r.type===`tools`)return(0,U.jsx)(`div`,{className:`ms-14 space-y-1.5`,children:r.tools.map(e=>(0,U.jsx)(Ae,{tool:e,expandedByDefault:!1},e.id))},n);let i=r.message,a=i.role===`user`,o=!a&&e.status===`running`&&i.id===h&&i.runId===e.activeRun?.id;return(0,U.jsxs)(`article`,{className:R(`flex gap-3`,a&&`flex-row-reverse`),children:[(0,U.jsx)(Pe,{role:a?`user`:`assistant`,user:a?t:void 0}),(0,U.jsx)(`div`,{className:R(`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,U.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap break-words text-sm leading-relaxed`,children:i.content}):o?(0,U.jsx)(ve,{content:i.content,className:`text-ink`}):(0,U.jsx)(xe,{content:i.content,className:`text-sm text-ink`})})]},i.id)}),i&&(0,U.jsxs)(`article`,{className:`flex gap-3`,"data-testid":`work-live-run-message`,children:[(0,U.jsx)(Pe,{role:`assistant`}),(0,U.jsx)(`div`,{className:`min-w-0 max-w-[92%] flex-1`,children:(0,U.jsx)(Ne,{run:i})})]}),!i&&(e.status===`preparing`||e.status===`running`)&&(0,U.jsxs)(`div`,{className:`flex items-center gap-2 ps-14 text-xs text-ink-muted`,children:[(0,U.jsx)(F,{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,U.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,U.jsx)(le,{className:`h-3.5 w-3.5`}),o(`work.live.newActivity`,{defaultValue:`New activity`})]})]})}var Be=45,Ve=30,He=70,Ue=360,We=480,Y=9,Ge=2,Ke=10,qe=`libre-webui-work-split:`,Je=(e,t,n)=>Math.min(n,Math.max(t,e)),Ye=e=>`${qe}${encodeURIComponent(e||`local`)}`,Xe=e=>{if(typeof window>`u`)return Be;try{let t=window.localStorage.getItem(e);if(t===null||t.trim()===``)return Be;let n=Number(t);return Number.isFinite(n)?Je(n,Ve,He):Be}catch{return Be}},Ze=(e,t)=>{if(!(typeof window>`u`))try{window.localStorage.setItem(e,t.toFixed(2))}catch{}},Qe=e=>{let t=Math.max(0,e-Y);if(t===0)return{min:Ve,max:He};let n=Math.max(Ve,Ue/t*100),r=Math.min(He,(t-We)/t*100);if(n<=r)return{min:n,max:r};let i=Je(Ue/840*100,Ve,He);return{min:i,max:i}},$e=(e,t)=>Je(e,t.min,t.max);function et({conversation:e,workspace:t,userId:n,mobileSurface:r=`conversation`,className:i}){let{t:a,i18n:o}=c(),s=l(o.language),u=Ye(n),[d,f]=(0,H.useState)(()=>({storageKey:u,percent:Xe(u)})),[p,m]=(0,H.useState)(0),[h,g]=(0,H.useState)(!1),_=(0,H.useRef)(null),v=(0,H.useRef)(null),y=(0,H.useRef)(null),b=(0,H.useRef)(u),x=(0,H.useRef)(d.percent),S=(0,H.useRef)(null),C=d.storageKey===u?d.percent:Xe(u),w=(0,H.useMemo)(()=>Qe(p),[p]),T=$e(C,w),E=Math.round(T),D=100-E,O=(0,H.useCallback)(e=>{f({storageKey:u,percent:e})},[u]),k=(0,H.useCallback)(e=>{let t=$e(e,Qe(_.current?.getBoundingClientRect().width??0));x.current=t,S.current===null&&(S.current=window.requestAnimationFrame(()=>{S.current=null,O(x.current)}))},[O]),A=(0,H.useCallback)(()=>{if(y.current===null&&!h)return;S.current!==null&&(window.cancelAnimationFrame(S.current),S.current=null);let e=_.current?.getBoundingClientRect().width??0,t=$e(x.current,Qe(e));x.current=t,O(t),Ze(b.current,t);let n=y.current;y.current=null,n!==null&&v.current?.hasPointerCapture(n)&&v.current.releasePointerCapture(n),g(!1)},[h,O]),j=(0,H.useCallback)(e=>{let t=_.current?.getBoundingClientRect();if(!t)return x.current;let n=Math.max(1,t.width-Y);return((s?t.right-e:e-t.left)-Y/2)/n*100},[s]),M=e=>{e.button!==0||!e.isPrimary||(e.preventDefault(),e.stopPropagation(),y.current=e.pointerId,b.current=u,x.current=T,e.currentTarget.setPointerCapture(e.pointerId),g(!0))},ee=(0,H.useCallback)(e=>{let t=$e(e,w);x.current=t,O(t),Ze(u,t)},[w,O,u]),te=(0,H.useCallback)(()=>{ee(Be)},[ee]),N=e=>{let t=e.shiftKey?Ke:Ge,n=null;e.key===`ArrowLeft`?n=T+(s?t:-t):e.key===`ArrowRight`?n=T+(s?-t:t):e.key===`Home`?n=w.min:e.key===`End`?n=w.max:e.key===`Enter`&&(n=Be),n!==null&&(e.preventDefault(),ee(n))};(0,H.useEffect)(()=>{let e=_.current;if(!e)return;if(typeof ResizeObserver>`u`){let t=()=>m(e.getBoundingClientRect().width);return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)}let t=new ResizeObserver(e=>{let t=e[0];t&&m(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]),(0,H.useEffect)(()=>{if(!h)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===y.current&&(e.preventDefault(),k(j(e.clientX)))},r=e=>{e.pointerId===y.current&&A()};return window.addEventListener(`pointermove`,n,{passive:!1}),window.addEventListener(`pointerup`,r),window.addEventListener(`pointercancel`,r),window.addEventListener(`blur`,A),()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r),window.removeEventListener(`pointercancel`,r),window.removeEventListener(`blur`,A),document.body.style.cursor=e,document.body.style.userSelect=t}},[A,h,j,k]),(0,H.useEffect)(()=>()=>{S.current!==null&&window.cancelAnimationFrame(S.current),y.current!==null&&Ze(b.current,x.current)},[]);let ne={gridTemplateColumns:`minmax(0, ${T}fr) ${Y}px minmax(0, ${100-T}fr)`};return(0,U.jsxs)(`div`,{ref:_,"data-testid":`work-split-pane`,"data-split-percent":T.toFixed(2),"data-resizing":h?`true`:`false`,className:R(`relative flex min-h-0 min-w-0 flex-1 overflow-hidden xl:grid`,i),style:ne,children:[(0,U.jsx)(`section`,{id:`work-conversation-panel`,"data-testid":`work-conversation-panel`,className:R(`min-h-0 min-w-0 flex-1 flex-col bg-transparent xl:flex`,r===`conversation`?`flex`:`hidden`),children:e}),(0,U.jsxs)(`div`,{ref:v,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(w.min),"aria-valuemax":Math.round(w.max),"aria-valuenow":E,"aria-valuetext":a(`work.workspace.splitSize`,{conversation:E,workspace:D,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:M,onDoubleClick:te,onKeyDown:N,className:R(`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,U.jsx)(`span`,{"aria-hidden":`true`,className:R(`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]`,h&&`bg-[#ff7b52]`)}),(0,U.jsx)(`span`,{"aria-hidden":`true`,className:R(`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`,h&&`h-20 bg-[#ff7b52] opacity-100`)})]}),(0,U.jsx)(`section`,{id:`work-workspace-panel`,"data-testid":`work-workspace-panel`,className:R(`min-h-0 min-w-0 flex-1 flex-col bg-surface-raised/85 backdrop-blur-xl xl:flex`,r===`workspace`?`flex`:`hidden`),children:t}),h&&(0,U.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 tt=1e5,nt=4e3,rt={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`},it={".bashrc":`bash`,".zshrc":`bash`},X={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`}},at=e=>e.split(/[\\/]/).pop()?.toLowerCase()??``,ot=e=>{let t=at(e),n=t.lastIndexOf(`.`);return n>-1?t.slice(n+1):``},st=e=>it[at(e)]??rt[ot(e)]??`text`,ct=e=>X[ot(e)],lt=e=>ct(e)!==void 0,ut=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,dt=async(e,t)=>{switch(e.family){case`babel`:return Promise.all([Z(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),Z(a(()=>import(`./estree-BAQkciRX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))]);case`typescript`:return Promise.all([Z(a(()=>import(`./typescript-BMYmVohw.js`),__vite__mapDeps([25,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),Z(a(()=>import(`./estree-BAQkciRX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))]);case`postcss`:return[await Z(a(()=>import(`./postcss-B5WIGhAY.js`),__vite__mapDeps([26,1,2,3])))];case`html`:{let e=[await Z(a(()=>import(`./html-DxA-Bcvi.js`),__vite__mapDeps([27,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))];return/<script\b/i.test(t)&&e.push(await Z(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),await Z(a(()=>import(`./estree-BAQkciRX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))),/<script\b[^>]*\blang\s*=\s*["']?(?:ts|typescript)/i.test(t)&&e.push(await Z(a(()=>import(`./typescript-BMYmVohw.js`),__vite__mapDeps([25,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))),/<style\b/i.test(t)&&e.push(await Z(a(()=>import(`./postcss-B5WIGhAY.js`),__vite__mapDeps([26,1,2,3])))),[...new Set(e)]}case`markdown`:{let n=[await Z(a(()=>import(`./markdown-IsZpJ5ke.js`),__vite__mapDeps([28,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))],r=e=>RegExp(`^(?: {0,3})(?:\`{3,}|~{3,})\\s*(?:${e})(?:\\s|$)`,`im`).test(t);return e.parser===`mdx`&&n.push(await Z(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),await Z(a(()=>import(`./estree-BAQkciRX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))),r(`js|jsx|javascript|json|json5|jsonc`)&&n.push(await Z(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),await Z(a(()=>import(`./estree-BAQkciRX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))),r(`ts|tsx|typescript`)&&n.push(await Z(a(()=>import(`./typescript-BMYmVohw.js`),__vite__mapDeps([25,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),await Z(a(()=>import(`./estree-BAQkciRX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])))),r(`css|scss|less`)&&n.push(await Z(a(()=>import(`./postcss-B5WIGhAY.js`),__vite__mapDeps([26,1,2,3])))),r(`html`)&&n.push(await Z(a(()=>import(`./html-DxA-Bcvi.js`),__vite__mapDeps([27,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),await Z(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),await Z(a(()=>import(`./estree-BAQkciRX.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),await Z(a(()=>import(`./typescript-BMYmVohw.js`),__vite__mapDeps([25,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),await Z(a(()=>import(`./postcss-B5WIGhAY.js`),__vite__mapDeps([26,1,2,3])))),r(`yaml|yml`)&&n.push(await Z(a(()=>import(`./yaml-QD4znPfZ.js`),__vite__mapDeps([29,1,2,3])))),[...new Set(n)]}case`yaml`:return[await Z(a(()=>import(`./yaml-QD4znPfZ.js`),__vite__mapDeps([29,1,2,3])))]}},ft=async(e,t)=>{let n=ct(e);if(!n)throw Error(`Formatting is not supported for “${at(e)||e}”.`);if(!ut(t))throw Error(`Could not format “${at(e)||e}”: files are limited to ${tt.toLocaleString()} characters and ${nt.toLocaleString()} lines.`);try{let[{format:e},r]=await Promise.all([a(()=>import(`./standalone-CK3b5Ktq.js`),__vite__mapDeps([30,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])),dt(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 “${at(e)||e}”: ${n}`)}},pt=(0,H.lazy)(async()=>({default:(await a(()=>import(`./OptimizedSyntaxHighlighter-CWYUn9Oe.js`).then(e=>e.n),__vite__mapDeps([31,2,3,32]))).OptimizedSyntaxHighlighter})),mt=8e3,ht=400,gt=500;function _t({path:e,value:t,ariaLabel:n,disabled:r=!1,onChange:i,onSaveShortcut:a,onFormatShortcut:o}){let{t:s}=c(),l=_e(e=>e.theme.mode===`dark`),u=(0,H.useRef)(null),d=(0,H.useRef)(null),[f,p]=(0,H.useState)(``),m=(0,H.useMemo)(()=>st(e),[e]),h=(0,H.useMemo)(()=>{if(t.length>mt)return 401;let e=1;for(let n=0;n<t.length&&!(t.charCodeAt(n)===10&&(e+=1,e>ht));n+=1);return e},[t]),g=t.length>mt||h>ht,_=m!==`text`&&!g,v=_&&f===t;return(0,H.useEffect)(()=>{if(!_)return;let e=window.setTimeout(()=>p(t),gt);return()=>window.clearTimeout(e)},[_,e,t]),(0,H.useLayoutEffect)(()=>{!v||!u.current||!d.current||(u.current.style.transform=`translate3d(${-d.current.scrollLeft}px, ${-d.current.scrollTop}px, 0)`)},[v,e]),(0,U.jsxs)(`div`,{dir:`ltr`,className:R(`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,U.jsx)(`div`,{"aria-hidden":`true`,"data-testid":`work-file-highlight`,className:`pointer-events-none absolute inset-0 z-0 overflow-hidden`,children:(0,U.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,U.jsx)(H.Suspense,{fallback:(0,U.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,U.jsx)(pt,{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,U.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:R(`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,U.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 vt=4e6,yt=e=>{if(e===``)return[];let t=e.split(`
4
- `);return t[t.length-1]===``&&t.pop(),t},Q=(e,t)=>{let n=yt(e),r=yt(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=bt(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},bt=(e,t)=>{if(e.length===0&&t.length===0)return[];if(e.length>0&&t.length>0&&e.length*t.length>vt)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},xt=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}},St=3,$=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-St),i=Math.min(e.length-1,n+St);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 Ct({lines:e,ariaLabel:t}){let{t:n}=c(),r=(0,H.useMemo)(()=>$(e),[e]);return(0,U.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,U.jsx)(`table`,{className:`w-full border-collapse`,children:(0,U.jsx)(`tbody`,{children:r.map((e,t)=>e.type===`fold`?(0,U.jsx)(`tr`,{children:(0,U.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,U.jsxs)(`tr`,{className:R(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,U.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,U.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,U.jsxs)(`td`,{className:`w-full whitespace-pre-wrap break-all px-3 align-top`,children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:R(`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 wt=(e,t)=>{if(e.success&&e.data)return e.data;throw Error(e.error||t)},Tt=(e,t)=>{let n=e?.response?.data?.error;return typeof n==`string`&&n?n:e instanceof Error&&e.message?e.message:t};function Et({taskId:e,mutationsDisabled:t=!1,disabledReason:n}){let{t:r}=c(),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(!0),[l,u]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[h,g]=(0,H.useState)([]),[y,b]=(0,H.useState)(``),[x,S]=(0,H.useState)(``),[w,T]=(0,H.useState)(null),[E,O]=(0,H.useState)(!1),k=(0,H.useRef)(0),A=(0,H.useCallback)(async()=>{let t=++k.current;s(!0),p(null);try{let n=wt(await L.getGitStatus(e),r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`}));if(t!==k.current)return;a(n),g([])}catch(e){if(t!==k.current)return;p(Tt(e,r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`})))}finally{t===k.current&&s(!1)}},[r,e]);(0,H.useEffect)(()=>{let e=window.setTimeout(()=>void A(),0);return()=>{window.clearTimeout(e),k.current+=1}},[A]);let j=async(e,n)=>{if(t||l)return!1;u(!0),p(null);try{let t=wt(await e(),r(`work.git.actionFailed`,{defaultValue:`Git action failed.`}));return a(t),g([]),T(null),D.success(n),!0}catch(e){let t=Tt(e,r(`work.git.actionFailed`,{defaultValue:`Git action failed.`}));return p(t),D.error(t),!1}finally{u(!1)}},M=async t=>{O(!0),p(null);try{T(wt(await L.getGitDiff(e,t),r(`work.git.diffFailed`,{defaultValue:`Could not load this diff.`})))}catch(e){p(Tt(e,r(`work.git.diffFailed`,{defaultValue:`Could not load this diff.`})))}finally{O(!1)}};if(o&&!i)return(0,U.jsx)(`div`,{className:`flex h-full items-center justify-center text-ink-muted`,children:(0,U.jsx)(F,{className:`h-5 w-5 animate-spin`})});if(!i)return(0,U.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center`,children:[(0,U.jsx)(m,{className:`mb-3 h-8 w-8 text-error-500`}),(0,U.jsx)(`p`,{className:`max-w-sm text-xs leading-relaxed text-error-600`,children:f||r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`})}),(0,U.jsxs)(B,{size:`sm`,variant:`secondary`,className:`mt-4`,onClick:()=>void A(),children:[(0,U.jsx)(C,{className:`h-3.5 w-3.5`}),r(`common.retry`,{defaultValue:`Retry`})]})]});if(!i.initialized)return(0,U.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center`,children:[(0,U.jsx)(m,{className:`mb-3 h-8 w-8 text-ink-subtle`}),(0,U.jsx)(`h3`,{className:`text-sm font-medium text-ink`,children:r(`work.git.notInitialized`,{defaultValue:`Git is not initialized`})}),(0,U.jsx)(`p`,{className:`mt-1 max-w-sm text-xs leading-relaxed text-ink-muted`,children:r(`work.git.initializeDescription`,{defaultValue:`Create a local repository for status, diffs, branches, and commits. No remote credentials are connected.`})}),f&&(0,U.jsx)(`p`,{className:`mt-3 text-xs text-error-600`,children:f}),(0,U.jsxs)(B,{"data-testid":`work-git-init-button`,size:`sm`,className:`mt-4 bg-[#ff7b52] text-[#3d120c] hover:bg-[#ff7b52]/90`,disabled:t||l,onClick:()=>void j(()=>L.initializeGit(e),r(`work.git.initialized`,{defaultValue:`Git repository initialized.`})),children:[l?(0,U.jsx)(F,{className:`me-2 h-3.5 w-3.5 animate-spin`}):(0,U.jsx)(d,{className:`me-2 h-3.5 w-3.5`}),r(`work.git.initialize`,{defaultValue:`Initialize Git`})]}),t&&n&&(0,U.jsx)(`p`,{className:`mt-2 text-[11px] text-ink-subtle`,children:n})]});let ee=i.changes.filter(e=>e.staged).length,te=i.changes.length>0;return(0,U.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,"data-testid":`work-git-panel`,children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-b border-line px-3 py-2`,children:[(0,U.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 rounded-lg bg-surface-subtle px-2 py-1 font-mono text-[11px] text-ink`,children:[(0,U.jsx)(m,{className:`h-3.5 w-3.5 shrink-0`}),(0,U.jsx)(`span`,{className:`truncate`,children:i.detached?r(`work.git.detached`,{defaultValue:`detached HEAD`}):i.branch||`main`})]}),(i.ahead>0||i.behind>0)&&(0,U.jsxs)(`span`,{className:`text-[10px] text-ink-muted`,children:[`↑`,i.ahead,` ↓`,i.behind]}),(0,U.jsxs)(`select`,{"data-testid":`work-git-branch-select`,"aria-label":r(`work.git.switchBranch`,{defaultValue:`Switch local branch`}),value:i.branch||``,disabled:t||l||te,onChange:t=>{let n=t.target.value;!n||n===i.branch||j(()=>L.switchGitBranch(e,n),r(`work.git.branchSwitched`,{name:n,defaultValue:`Switched to {{name}}.`}))},className:`h-7 max-w-44 rounded-lg border border-line bg-surface px-2 text-[11px] text-ink outline-none disabled:opacity-50`,children:[i.detached&&(0,U.jsx)(`option`,{value:``,disabled:!0,children:r(`work.git.detached`,{defaultValue:`detached HEAD`})}),i.branches.map(e=>(0,U.jsx)(`option`,{value:e,children:e},e))]}),(0,U.jsxs)(`div`,{className:`flex min-w-44 flex-1 items-center gap-1`,children:[(0,U.jsx)(`input`,{"data-testid":`work-git-branch-input`,value:x,maxLength:200,onChange:e=>S(e.target.value),placeholder:r(`work.git.newBranch`,{defaultValue:`New local branch`}),className:`h-7 min-w-0 flex-1 rounded-lg border border-line bg-surface px-2 font-mono text-[11px] text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,U.jsxs)(B,{"data-testid":`work-git-create-branch-button`,size:`sm`,variant:`ghost`,className:`h-7 px-2`,disabled:t||l||!i.head||!x.trim(),onClick:()=>{let t=x.trim();j(()=>L.createGitBranch(e,t),r(`work.git.branchCreated`,{name:t,defaultValue:`Created {{name}}.`})).then(e=>{e&&S(``)})},children:[(0,U.jsx)(d,{className:`h-3.5 w-3.5`}),(0,U.jsx)(`span`,{className:`hidden sm:inline`,children:r(`work.git.createBranch`,{defaultValue:`Create`})})]})]}),(0,U.jsx)(`button`,{type:`button`,onClick:()=>void A(),disabled:o||l,"aria-label":r(`common.refresh`,{defaultValue:`Refresh`}),className:`inline-flex h-7 w-7 items-center justify-center rounded-lg text-ink-muted hover:bg-surface-subtle hover:text-ink disabled:opacity-50`,children:(0,U.jsx)(C,{className:R(`h-3.5 w-3.5`,o&&`animate-spin`)})})]}),f&&(0,U.jsx)(`div`,{className:`border-b border-error-200 bg-error-50 px-3 py-2 text-xs text-error-700 dark:border-error-900/60 dark:bg-error-900/30 dark:text-error-300`,children:f}),t&&n&&(0,U.jsx)(`div`,{className:`border-b border-line px-3 py-1.5 text-[11px] text-ink-subtle`,children:n}),(0,U.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 lg:grid-cols-[minmax(14rem,0.8fr)_minmax(18rem,1.2fr)_minmax(13rem,0.8fr)]`,children:[(0,U.jsxs)(`section`,{className:`flex min-h-0 flex-col border-b border-line lg:border-b-0 lg:border-e`,children:[(0,U.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2`,children:[(0,U.jsxs)(`h3`,{className:`text-xs font-medium text-ink`,children:[r(`work.git.changes`,{defaultValue:`Changes`}),` `,(0,U.jsx)(`span`,{className:`text-ink-subtle`,children:i.changes.length})]}),(0,U.jsxs)(B,{"data-testid":`work-git-stage-button`,size:`sm`,variant:`ghost`,className:`h-7 px-2 text-[11px]`,disabled:t||l||h.length===0&&i.changes.length===0,onClick:()=>{let t=h.length>0?h:i.changes.map(e=>e.path);j(()=>L.stageGitPaths(e,t),r(`work.git.staged`,{defaultValue:`Changes staged.`}))},children:[(0,U.jsx)(re,{className:`h-3.5 w-3.5`}),h.length>0?r(`work.git.stageSelected`,{count:h.length,defaultValue:`Stage {{count}}`}):r(`work.git.stageAll`,{defaultValue:`Stage all`})]})]}),(0,U.jsx)(`div`,{className:`min-h-32 flex-1 overflow-y-auto px-2 pb-2`,children:i.changes.length===0?(0,U.jsx)(`p`,{className:`px-2 py-8 text-center text-xs text-ink-muted`,children:r(`work.git.clean`,{defaultValue:`Working tree is clean.`})}):i.changes.map(e=>(0,U.jsxs)(`div`,{className:`flex items-center gap-1 rounded-lg hover:bg-surface-subtle`,children:[(0,U.jsx)(`input`,{type:`checkbox`,"aria-label":r(`work.git.selectPath`,{path:e.path,defaultValue:`Select {{path}}`}),checked:h.includes(e.path),onChange:t=>g(n=>t.target.checked?[...n,e.path]:n.filter(t=>t!==e.path)),className:`ms-2 h-3.5 w-3.5 accent-[#ff7b52]`}),(0,U.jsxs)(`button`,{type:`button`,"data-testid":`work-git-change`,onClick:()=>void M(e.path),className:`flex min-w-0 flex-1 items-center gap-2 px-1.5 py-2 text-start`,children:[(0,U.jsxs)(`span`,{dir:`ltr`,className:R(`w-5 shrink-0 font-mono text-[10px] font-semibold`,e.staged?`text-emerald-600`:`text-amber-600`),children:[e.indexStatus,e.workingTreeStatus]}),(0,U.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink`,title:e.path,children:e.path})]})]},`${e.path}:${e.originalPath||``}`))}),(0,U.jsxs)(`div`,{className:`border-t border-line p-2`,children:[(0,U.jsx)(`textarea`,{"data-testid":`work-git-commit-input`,value:y,maxLength:4e3,rows:2,onChange:e=>b(e.target.value),placeholder:r(`work.git.commitMessage`,{defaultValue:`Commit message`}),className:`w-full resize-none rounded-lg border border-line bg-surface px-2.5 py-2 text-xs text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,U.jsxs)(B,{"data-testid":`work-git-commit-button`,size:`sm`,className:`mt-1.5 w-full bg-[#ff7b52] text-[#3d120c] hover:bg-[#ff7b52]/90`,disabled:t||l||ee===0||!y.trim(),onClick:()=>{let t=y.trim();j(()=>L.commitGit(e,t),r(`work.git.committed`,{defaultValue:`Commit created.`})).then(e=>{e&&b(``)})},children:[l&&(0,U.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),r(`work.git.commit`,{defaultValue:`Commit staged changes`})]})]})]}),(0,U.jsxs)(`section`,{className:`flex min-h-48 min-w-0 flex-col border-b border-line lg:border-b-0 lg:border-e`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 text-xs font-medium text-ink`,children:[(0,U.jsx)(_,{className:`h-3.5 w-3.5`}),w?.path||r(`work.git.diff`,{defaultValue:`Diff preview`})]}),E?(0,U.jsx)(F,{className:`m-auto h-5 w-5 animate-spin text-ink-muted`}):w?w.patch?(0,U.jsxs)(`pre`,{"data-testid":`work-git-diff`,dir:`ltr`,className:`min-h-0 flex-1 overflow-auto whitespace-pre p-3 text-left font-mono text-[11px] leading-relaxed text-ink`,children:[w.patch,w.truncated&&`
5
- … diff truncated …`]}):(0,U.jsx)(`p`,{className:`m-auto px-5 text-center text-xs text-ink-muted`,children:r(`work.git.noDiff`,{defaultValue:`No textual diff is available yet. Untracked files appear after staging.`})}):(0,U.jsx)(`p`,{className:`m-auto px-5 text-center text-xs text-ink-muted`,children:r(`work.git.selectChange`,{defaultValue:`Select a changed file to inspect its diff.`})})]}),(0,U.jsxs)(`section`,{className:`min-h-36 overflow-y-auto p-3`,children:[(0,U.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-xs font-medium text-ink`,children:[(0,U.jsx)(v,{className:`h-3.5 w-3.5`}),r(`work.git.history`,{defaultValue:`Local history`})]}),i.commits.length===0?(0,U.jsx)(`p`,{className:`py-6 text-center text-xs text-ink-muted`,children:r(`work.git.noCommits`,{defaultValue:`No commits yet.`})}):(0,U.jsx)(`ol`,{className:`space-y-2`,children:i.commits.map(e=>(0,U.jsxs)(`li`,{className:`rounded-lg border border-line bg-surface px-2.5 py-2`,children:[(0,U.jsx)(`p`,{dir:`auto`,className:`text-xs text-ink`,children:e.subject}),(0,U.jsxs)(`p`,{className:`mt-1 flex flex-wrap gap-x-2 text-[10px] text-ink-subtle`,children:[(0,U.jsx)(`span`,{dir:`ltr`,className:`font-mono`,children:e.shortHash}),(0,U.jsx)(`span`,{dir:`auto`,children:e.author}),(0,U.jsx)(`time`,{dateTime:e.authoredAt,children:new Date(e.authoredAt).toLocaleDateString()})]})]},e.hash))}),(0,U.jsx)(`p`,{className:`mt-4 border-t border-line pt-3 text-[10px] leading-relaxed text-ink-subtle`,children:r(`work.git.localOnly`,{defaultValue:`Local Git only. Push, pull, and pull requests require a separate trusted credential broker.`})})]})]})]})}var Dt=`/ws/work-terminal`;function Ot(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}${Dt}`);return r.searchParams.set(`taskId`,e),t.token&&r.searchParams.set(`token`,t.token),r.toString()}function kt(e){return Ot(e,{protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,production:!0,token:localStorage.getItem(`auth-token`)})}var At={background:`#ffffff`,foreground:`#1f2328`,cursor:`#1f2328`,selectionBackground:`rgba(255, 123, 82, 0.28)`},jt={background:`#0f1115`,foreground:`#e6e6e6`,cursor:`#ff7b52`,selectionBackground:`rgba(255, 123, 82, 0.32)`};function Mt({taskId:e,active:t,disabledReason:n}){let{t:r}=c(),i=_e(e=>e.theme.mode===`dark`),o=(0,H.useRef)(null),s=(0,H.useRef)(null),l=(0,H.useRef)(null),u=(0,H.useRef)(null),[d,f]=(0,H.useState)(`idle`),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(0),v=(0,H.useCallback)(()=>{let e=u.current,t=l.current,n=s.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,H.useEffect)(()=>{if(!t||n)return;let r=!1,c,d;return(async()=>{f(`connecting`),h(null);let[{Terminal:t},{FitAddon:n}]=await Promise.all([a(()=>import(`./xterm-Da5ppSVt.js`),[]),a(()=>import(`./addon-fit-DIOBYJe3.js`),[])]);if(await a(()=>Promise.resolve({}),__vite__mapDeps([33])),r||!o.current)return;c=new t({allowProposedApi:!0,convertEol:!1,cursorBlink:!0,fontFamily:`ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,fontSize:12,scrollback:5e3,theme:i?jt:At});let p=new n;c.loadAddon(p),c.open(o.current),l.current=c,u.current=p;try{p.fit()}catch{}d=new WebSocket(kt(e)),d.binaryType=`arraybuffer`,s.current=d;let m=new TextDecoder;d.onmessage=e=>{if(typeof e.data!=`string`){c?.write(m.decode(new Uint8Array(e.data)));return}try{let t=JSON.parse(e.data);if(t.type===`ready`){f(`connected`),v(),c?.focus();return}if(t.type===`error`){f(`error`),h(t.message||null);return}t.type===`exit`&&f(`closed`)}catch{}},d.onclose=()=>{r||f(e=>e===`error`||e===`closed`?e:`closed`)},d.onerror=()=>{r||f(`error`)},c.onData(e=>{d?.readyState===WebSocket.OPEN&&d.send(JSON.stringify({type:`input`,data:e}))})})(),()=>{r=!0,d?.close(),s.current=null,c?.dispose(),l.current=null,u.current=null}},[t,n,g,i,v,e]),(0,H.useEffect)(()=>{let e=o.current;if(!e||!t)return;let n=new ResizeObserver(()=>v());return n.observe(e),()=>n.disconnect()},[t,v]);let y=()=>{s.current?.close(),_(e=>e+1)},b=n??(d===`error`?m??r(`work.terminal.failed`,{defaultValue:`The terminal session could not start.`}):d===`closed`?r(`work.terminal.closed`,{defaultValue:`Terminal session ended.`}):null);return(0,U.jsxs)(`div`,{"data-testid":`work-terminal-panel`,"data-status":n?`unavailable`:d,className:`relative flex min-h-0 flex-1 flex-col bg-surface`,children:[!n&&(0,U.jsx)(`div`,{ref:o,"data-testid":`work-terminal-surface`,dir:`ltr`,className:R(`min-h-0 flex-1 overflow-hidden p-2 text-left`,d!==`connected`&&`opacity-60`)}),d===`connecting`&&!n&&(0,U.jsxs)(`div`,{className:`pointer-events-none absolute inset-0 flex items-center justify-center gap-2 text-xs text-ink-muted`,children:[(0,U.jsx)(F,{className:`h-4 w-4 animate-spin`}),r(`work.terminal.connecting`,{defaultValue:`Opening a shell in the sandbox…`})]}),b&&(0,U.jsxs)(`div`,{role:d===`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,U.jsx)(p,{className:`h-6 w-6 text-ink-subtle`}),(0,U.jsx)(`p`,{dir:`auto`,"data-testid":`work-terminal-status`,className:`max-w-md text-xs leading-relaxed text-ink-muted`,children:b}),!n&&(0,U.jsx)(B,{size:`sm`,"data-testid":`work-terminal-reconnect-button`,className:`h-8 rounded-lg bg-[#ff7b52] px-3 text-[#3d120c] hover:bg-[#ff7b52]/90`,onClick:y,children:r(`work.terminal.reconnect`,{defaultValue:`Reconnect`})})]})]})}var Nt=e=>{if(!e)return null;if(/^\/api\/work\/previews\/[A-Za-z0-9-]{1,100}\/\d{1,5}\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}\//.test(e))try{let t=new URL(I,window.location.origin).origin;return new URL(e,`${t}/`).toString()}catch{return null}return null},Pt=e=>{let t=e.split(`/`).filter(Boolean);return t.pop(),t.join(`/`)},Ft=(e,t)=>{let n=e.metadata?.name??e.metadata?.toolName??e.metadata?.tool??e.metadata?.command;return typeof n==`string`&&n?n:t};function It({task:e,liveRun:t,files:n,selectedFile:r,loadingFiles:i,actionLoading:a,onLoadFiles:o,onLoadFile:s,onClearSelectedFile:u,onSaveFile:d,onStartPreview:_,onStopPreview:v,onDirtyChange:b,terminal:E}){let{t:k,i18n:A}=c(),j=l(A.language),[M,te]=(0,H.useState)(`files`),[N,ne]=(0,H.useState)(``),[P,re]=(0,H.useState)(``),[ie,ae]=(0,H.useState)(),[se,le]=(0,H.useState)(``),[I,L]=(0,H.useState)(!1),[ue,z]=(0,H.useState)(!1),de=(0,H.useRef)(new Map),[pe,me]=(0,H.useState)(()=>new Map),_e=Nt(e.previewUrl),ve=t?.runId,ye=t?.error,be=t?.tools,xe=(0,H.useMemo)(()=>{let t=new Set(be?.map(e=>e.id)||[]);return(e.messages||[]).filter(e=>{if(e.kind===`reasoning`||e.role!==`tool`&&e.kind===`message`)return!1;if(!ve||e.runId!==ve)return!0;if(e.kind===`error`&&ye)return!1;let n=e.metadata?.toolCallId;return typeof n!=`string`||!t.has(n)})},[ye,ve,be,e.messages]),Se=xe.length+(be?.length||0),Ce=!!r&&P!==(r?.content??``),V=e.status===`preparing`||e.status===`running`,we=(0,H.useRef)(V),W=(0,H.useRef)(0),G=(0,H.useRef)(P),Te=(0,H.useRef)(ie),Ee=(0,H.useRef)(r),De=(0,H.useRef)(e.id),Oe=(0,H.useRef)(o),ke=(0,H.useRef)(s),Ae=(0,H.useRef)(b),K=(0,H.useRef)(!0),q=r?pe.get(r.path):void 0,je=(0,H.useMemo)(()=>r&&q!==void 0&&q!==r.content?Q(q,r.content):null,[q,r]),Me=(0,H.useMemo)(()=>je?xt(je):null,[je]),Pe=!!(Me&&(Me.added>0||Me.removed>0)),Fe=r?lt(r.path):!1,Ie=!r||ut(P),J=Fe&&Ie;(0,H.useEffect)(()=>{G.current=P,Te.current=ie,Ee.current=r,De.current=e.id,Ae.current=b},[ie,P,b,r,e.id]),(0,H.useEffect)(()=>{Oe.current=o,ke.current=s},[s,o]),(0,H.useEffect)(()=>(K.current=!0,()=>{K.current=!1,W.current+=1,Ae.current(!1)}),[]),(0,H.useEffect)(()=>{if(!we.current&&V&&me(new Map(de.current)),we.current&&!V&&(Oe.current(N),r&&!Ce)){let e=++W.current,t=r.path,n=G.current,i=Te.current;ke.current(t).then(r=>{if(!K.current||e!==W.current||r.path!==t||G.current!==n||Te.current!==i)return;de.current.set(r.path,r.content);let a=pe.get(r.path);a!==void 0&&a!==r.content&&z(!0),G.current=r.content,Te.current=r.updatedAt??r.modifiedAt,re(r.content),ae(r.updatedAt??r.modifiedAt)}).catch(()=>void 0)}we.current=V},[N,Ce,r,V,pe]);let Le=()=>!Ce||window.confirm(k(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),Re=()=>{r&&fe(e.id,r.path)},ze=async e=>{Le()&&(W.current+=1,Re(),u(),b(!1),z(!1),ne(e),await o(e).catch(()=>void 0))},Be=async t=>{if(!Le())return;let n=++W.current;Re();let r=await s(t).catch(()=>void 0);if(!K.current||!r||n!==W.current)return;de.current.set(r.path,r.content);let i=pe.get(r.path);z(i!==void 0&&i!==r.content);let a=he(e.id,r.path),o=a?.content??r.content,c=a?.baseUpdatedAt??r.updatedAt??r.modifiedAt;G.current=o,Te.current=c,re(o),ae(c),b(a!==null&&a.content!==r.content)},Ve=()=>{Le()&&(W.current+=1,Re(),u(),b(!1),z(!1))},He=t=>{r&&(G.current=t,re(t),t===r.content?fe(e.id,r.path):ge(e.id,r.path,{content:t,baseUpdatedAt:ie??r.updatedAt??r.modifiedAt}),b(t!==r.content))},Ue=async()=>{if(!r)return;let t=e.id,n=r.path,i=P,a=W.current,o=await d(n,i,ie).catch(()=>!1);if(!K.current||o===!1||a!==W.current||De.current!==t||Ee.current?.path!==n)return;let s=o.updatedAt??o.modifiedAt;de.current.set(n,typeof o.content==`string`?o.content:i),Te.current=s,ae(s);let c=G.current;if(c===i){fe(t,n),b(!1);return}ge(t,n,{content:c,baseUpdatedAt:s}),b(!0)},We=async()=>{if(!r||V||I||!J)return;L(!0);let e=W.current,t=r.path,n=G.current;try{let r=await ft(t,n);if(!K.current||e!==W.current||Ee.current?.path!==t||G.current!==n)return;He(r),D.success(k(`work.files.formatted`,{defaultValue:`Code formatted.`}))}catch(r){if(!K.current||e!==W.current||Ee.current?.path!==t||G.current!==n)return;D.error(r instanceof Error?r.message:k(`work.files.formatFailed`,{defaultValue:`Could not format this file.`}))}finally{K.current&&L(!1)}},Y=[{id:`files`,label:k(`work.workspace.files`,{defaultValue:`Files`}),icon:x,testId:`work-files-tab`},{id:`activity`,label:k(`work.workspace.activity`,{defaultValue:`Activity`}),icon:w,testId:`work-activity-tab`},{id:`git`,label:k(`work.workspace.git`,{defaultValue:`Git`}),icon:m,testId:`work-git-tab`},{id:`terminal`,label:k(`work.workspace.terminal`,{defaultValue:`Terminal`}),icon:p,testId:`work-terminal-tab`},{id:`preview`,label:k(`work.workspace.preview`,{defaultValue:`Preview`}),icon:S,testId:`work-preview-tab`}],Ge=(e,t)=>{let n=null;if(e.key===`ArrowRight`&&(n=(t+(j?-1:1)+Y.length)%Y.length),e.key===`ArrowLeft`&&(n=(t+(j?1:-1)+Y.length)%Y.length),e.key===`Home`&&(n=0),e.key===`End`&&(n=Y.length-1),n===null)return;e.preventDefault();let r=Y[n];te(r.id),e.currentTarget.parentElement?.querySelector(`#work-workspace-tab-${r.id}`)?.focus()};return(0,U.jsxs)(`section`,{className:`flex h-full min-h-0 flex-col bg-transparent`,children:[(0,U.jsxs)(`div`,{"data-testid":`work-workspace-toolbar`,className:`flex h-12 shrink-0 items-center gap-2 border-b border-line bg-surface-raised/75 px-2 backdrop-blur-xl`,children:[(0,U.jsx)(`div`,{role:`tablist`,"aria-orientation":`horizontal`,"aria-label":k(`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:Y.map((e,t)=>{let n=e.icon;return(0,U.jsxs)(`button`,{type:`button`,role:`tab`,id:`work-workspace-tab-${e.id}`,"aria-selected":M===e.id,"aria-controls":M===e.id?`work-workspace-panel-${e.id}`:void 0,"aria-label":e.label,tabIndex:M===e.id?0:-1,title:e.label,"data-testid":e.testId,onClick:()=>te(e.id),onKeyDown:e=>Ge(e,t),className:R(`flex h-7 items-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow]`,M===e.id?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:text-ink`),children:[(0,U.jsx)(n,{className:`h-3.5 w-3.5 shrink-0`}),(0,U.jsx)(`span`,{className:`hidden xs:inline`,children:e.label}),e.id===`activity`&&Se>0&&(0,U.jsx)(`span`,{className:`rounded-full bg-surface px-1.5 text-[10px] text-ink-muted`,children:Se})]},e.id)})}),M===`files`&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1.5`,children:[r&&(0,U.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":k(`work.files.back`,{defaultValue:`Back to files`}),children:(0,U.jsx)(oe,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,U.jsxs)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,title:r?.path??`/workspace${N?`/${N}`:``}`,children:[r?.path??`/workspace${N?`/${N}`:``}`,Ce&&` •`]})]}),(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,U.jsx)(`button`,{type:`button`,disabled:!N,onClick:()=>void ze(Pt(N)),className:R(`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":k(`work.files.up`,{defaultValue:`Parent folder`}),title:k(`work.files.up`,{defaultValue:`Parent folder`}),children:(0,U.jsx)(oe,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,U.jsx)(`button`,{type:`button`,"data-testid":`work-refresh-files-button`,onClick:()=>void o(N).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":k(`common.refresh`,{defaultValue:`Refresh`}),title:k(`common.refresh`,{defaultValue:`Refresh`}),children:(0,U.jsx)(C,{className:R(`h-3.5 w-3.5`,i&&`animate-spin`)})}),r&&Pe&&Me&&(0,U.jsxs)(`button`,{type:`button`,"data-testid":`work-diff-toggle-button`,"aria-pressed":ue,onClick:()=>z(e=>!e),title:k(`work.files.changesSince`,{defaultValue:`What changed since the last turn`}),className:R(`inline-flex h-8 items-center gap-1.5 rounded-lg border px-2 text-[11px] font-medium transition-colors`,ue?`border-transparent bg-ink text-ink-inverse`:`border-line text-ink-muted hover:bg-surface-subtle hover:text-ink`),children:[(0,U.jsx)(T,{className:`h-3.5 w-3.5 shrink-0`}),(0,U.jsx)(`span`,{className:`hidden sm:inline`,children:k(`work.files.changes`,{defaultValue:`Changes`})}),(0,U.jsxs)(`span`,{dir:`ltr`,className:`tabular-nums`,children:[(0,U.jsxs)(`span`,{className:ue?void 0:`text-[rgb(46,164,79)]`,children:[`+`,Me.added]}),` `,(0,U.jsxs)(`span`,{className:ue?void 0:`text-[rgb(255,61,129)]`,children:[`−`,Me.removed]})]})]}),r&&!ue&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(B,{"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:V||I||!J,onClick:()=>void We(),"aria-busy":I||void 0,title:J?k(`work.files.formatShortcut`,{defaultValue:`Format (Shift+Alt+F)`}):Fe?k(`work.files.formatTooLarge`,{defaultValue:`Formatting is limited to files under 100,000 characters and 4,000 lines.`}):k(`work.files.formatUnsupported`,{defaultValue:`Formatting is not available for this file type.`}),"aria-label":k(`work.files.format`,{defaultValue:`Format file`}),children:[I?(0,U.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}):(0,U.jsx)(ee,{className:`h-3.5 w-3.5`}),(0,U.jsx)(`span`,{className:`hidden 2xl:inline`,children:k(`work.files.format`,{defaultValue:`Format`})})]}),(0,U.jsxs)(B,{"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:!Ce||V||I||a,onClick:()=>void Ue(),"aria-busy":a||void 0,title:k(`work.files.saveShortcut`,{defaultValue:`Save (⌘/Ctrl+S)`}),"aria-label":k(`common.save`),children:[a?(0,U.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}):(0,U.jsx)(g,{className:`h-3.5 w-3.5`}),(0,U.jsx)(`span`,{className:`hidden 2xl:inline`,children:k(`common.save`)})]})]})]})]}),(M===`activity`||M===`git`)&&(0,U.jsx)(`div`,{className:`min-w-0 flex-1`}),M===`terminal`&&(0,U.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,U.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,children:`/workspace`}),V&&(0,U.jsx)(`span`,{className:`shrink-0 text-[10px] text-ink-subtle`,children:k(`work.terminal.taskRunning`,{defaultValue:`Model turn in progress`})})]}),M===`preview`&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`input`,{dir:`auto`,value:se,onChange:e=>le(e.target.value),placeholder:k(`work.preview.command`,{defaultValue:`Optional start command`}),"aria-label":k(`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,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[e.previewStatus===`running`||e.previewStatus===`starting`?(0,U.jsxs)(B,{"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 v(),"aria-busy":a||void 0,"aria-label":k(`work.preview.stop`,{defaultValue:`Stop preview`}),children:[a?(0,U.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}):(0,U.jsx)(ce,{className:`h-3.5 w-3.5 fill-current`}),(0,U.jsx)(`span`,{className:`hidden 2xl:inline`,children:k(`work.preview.stop`,{defaultValue:`Stop preview`})})]}):(0,U.jsxs)(B,{"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 _(se.trim()||void 0),"aria-busy":a||void 0,"aria-label":k(`work.preview.start`,{defaultValue:`Start preview`}),children:[a?(0,U.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}):(0,U.jsx)(O,{className:`h-3.5 w-3.5 fill-current`}),(0,U.jsx)(`span`,{className:`hidden 2xl:inline`,children:k(`work.preview.start`,{defaultValue:`Start preview`})})]}),_e&&(0,U.jsx)(`a`,{href:_e,target:`_blank`,rel:`noopener noreferrer`,"aria-label":k(`work.preview.open`,{defaultValue:`Open`}),title:k(`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,U.jsx)(f,{className:`h-3.5 w-3.5`})})]})]})]}),M===`files`&&(0,U.jsxs)(`div`,{id:`work-workspace-panel-files`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-files`,className:`flex min-h-0 flex-1`,children:[(0,U.jsx)(`div`,{className:R(`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,U.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-1.5`,children:i&&n.length===0?(0,U.jsx)(`div`,{className:`flex justify-center py-8 text-ink-muted`,children:(0,U.jsx)(F,{className:`h-5 w-5 animate-spin`})}):n.length===0?(0,U.jsx)(`p`,{className:`px-3 py-8 text-center text-xs text-ink-muted`,children:k(`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,U.jsxs)(`button`,{type:`button`,"data-testid":`work-file-item`,"data-path":e.path,onClick:()=>{e.type===`directory`?ze(e.path):Be(e.path)},className:R(`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,U.jsx)(h,{className:`h-3.5 w-3.5 shrink-0 text-amber-500`}):(0,U.jsx)(y,{className:`h-3.5 w-3.5 shrink-0`}),(0,U.jsx)(`span`,{dir:`auto`,className:`truncate`,children:e.name})]},e.path))})}),(0,U.jsx)(`div`,{className:R(`min-h-0 min-w-0 flex-1 flex-col`,r?`flex`:`hidden sm:flex`),children:r&&ue&&je?(0,U.jsx)(Ct,{lines:je,ariaLabel:k(`work.files.diffLabel`,{path:r.path,defaultValue:`Changes since the last turn: {{path}}`})}):r?(0,U.jsx)(_t,{path:r.path,value:P,ariaLabel:k(`work.files.editorLabel`,{path:r.path,defaultValue:`File editor: {{path}}`}),onChange:He,onSaveShortcut:()=>{Ce&&!V&&!a&&!I&&Ue()},onFormatShortcut:()=>void We(),disabled:V||I}):(0,U.jsxs)(`div`,{className:`m-auto px-6 text-center text-xs text-ink-muted`,children:[(0,U.jsx)(y,{className:`mx-auto mb-3 h-7 w-7 text-ink-subtle`}),k(`work.files.select`,{defaultValue:`Select a file to inspect and edit it.`})]})})]}),M===`activity`&&(0,U.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,U.jsx)(`div`,{className:`mb-3`,children:(0,U.jsx)(Ne,{run:t,variant:`activity`})}),xe.length===0&&!t?(0,U.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center text-xs text-ink-muted`,children:[(0,U.jsx)(p,{className:`mb-3 h-7 w-7 text-ink-subtle`}),k(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]}):(0,U.jsx)(`div`,{className:`space-y-2`,children:xe.map(e=>(0,U.jsxs)(`div`,{className:`rounded-xl border border-line bg-surface p-3`,children:[(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,U.jsx)(`span`,{dir:`auto`,className:`truncate font-mono text-xs font-medium text-ink`,children:Ft(e,k(`work.activity.toolActivity`,{defaultValue:`Tool activity`}))}),(0,U.jsx)(`span`,{className:`shrink-0 text-[10px] uppercase tracking-wide text-ink-subtle rtl:tracking-normal`,children:{message:k(`work.activity.kinds.message`,{defaultValue:`Message`}),reasoning:k(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`}),tool_call:k(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}),tool_result:k(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),error:k(`work.activity.kinds.error`,{defaultValue:`Error`})}[e.kind]})]}),e.content&&(0,U.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))})]}),M===`git`&&(0,U.jsx)(`div`,{id:`work-workspace-panel-git`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-git`,className:`min-h-0 flex-1`,children:(0,U.jsx)(Et,{taskId:e.id,mutationsDisabled:V||e.previewStatus===`starting`||e.previewStatus===`running`,disabledReason:V?k(`work.git.blockedByRun`,{defaultValue:`Git write actions unlock when the model turn finishes.`}):e.previewStatus===`starting`||e.previewStatus===`running`?k(`work.git.blockedByPreview`,{defaultValue:`Stop the preview before changing Git state.`}):void 0})}),M===`terminal`&&(0,U.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,U.jsx)(Mt,{taskId:e.id,active:M===`terminal`,disabledReason:E&&!E.available?E.reason??k(`work.terminal.unavailable`,{defaultValue:`The interactive terminal is not available in this deployment.`}):V?k(`work.terminal.blockedByRun`,{defaultValue:`The model is using this container. The terminal opens when the turn finishes.`}):void 0})}),M===`preview`&&(0,U.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,U.jsxs)(`div`,{className:`m-auto flex items-center gap-2 text-xs text-ink-muted`,children:[(0,U.jsx)(F,{className:`h-4 w-4 animate-spin`}),k(`work.preview.starting`,{defaultValue:`Starting preview…`})]}):_e&&e.previewStatus===`running`?(0,U.jsx)(`iframe`,{"data-testid":`work-preview-frame`,title:k(`work.preview.frameTitle`,{defaultValue:`Workspace preview`}),src:_e,sandbox:`allow-scripts allow-forms allow-modals allow-downloads`,referrerPolicy:`no-referrer`,className:`min-h-0 flex-1 border-0 bg-white`}):(0,U.jsxs)(`div`,{className:`m-auto max-w-sm px-6 text-center text-xs leading-relaxed text-ink-muted`,children:[(0,U.jsx)(S,{className:`mx-auto mb-3 h-8 w-8 text-ink-subtle`}),e.previewStatus===`failed`?k(`work.preview.failed`,{defaultValue:`The preview could not start. Check Activity, then try another command.`}):k(`work.preview.empty`,{defaultValue:`Start the app inside this workspace to inspect it here.`})]})})]})}var Lt=e=>{let t=e.trim().toLowerCase();return!!t&&!t.includes(`embed`)},Rt=(e,t)=>e instanceof Error&&e.message?e.message:t,zt=(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 Bt(){let{t:e}=c(),t=s(),n=r(),{taskId:a}=i(),l=_e(e=>e.preferences),d=_e(e=>e.setPreferences),f=me(e=>e.user),p=f?.id??null,[m,h]=(0,H.useState)(!1),g=z(e=>e.models),_=z(e=>e.selectedModel),v=z(e=>e.selectedProviderType),y=z(e=>e.selectedProviderId),b=z(e=>e.loadModels),{capabilities:x,tasks:C,selectedTask:w,files:T,selectedFile:E,liveRuns:O,loadingTask:A,loadingOlderMessages:j,loadingFiles:M,actionLoading:ee,error:P,loadCapabilities:re,loadTasks:F,selectTask:oe,loadTask:ce,loadOlderMessages:le,createTask:I,updateTask:he,deleteTask:ge,startRun:B,cancelRun:ve,beginLiveRun:be,applyRunEvents:xe,setLiveRunConnection:Se,clearLiveRun:we,loadFiles:W,loadFile:G,clearSelectedFile:Ee,saveFile:De,startPreview:Oe,stopPreview:ke,clearError:Ae}=pe(),K=(0,H.useMemo)(()=>g.filter(e=>!e.isPersona&&!e.isAgent&&Lt(e.name)&&(!e.isPlugin||!!e.pluginId)),[g]),q=(0,H.useMemo)(()=>K.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:Ce(i),label:e.isPlugin&&e.pluginName?`${e.name} · ${e.pluginName}`:e.name,remote:e.isPlugin||r.endsWith(`:cloud`)||r.endsWith(`-cloud`)}]}),[K]),[je,Me]=(0,H.useState)(``),[Ne,Pe]=(0,H.useState)({locationKey:t.key,value:`conversation`}),Fe=Ne.locationKey===t.key?Ne.value:`conversation`,Ie=e=>Pe({locationKey:t.key,value:e}),[J,Le]=(0,H.useState)(!1),[Re,Be]=(0,H.useState)(``),Ve=x?.hostWorkspaces?.enabled===!0,He=x?.hostWorkspaces?.roots??[],[Ue,We]=(0,H.useState)([]),[Y,Ge]=(0,H.useState)(``);(0,H.useEffect)(()=>{let e=!1;return L.listPolicies().then(t=>{!e&&t.success&&t.data&&We(t.data)}).catch(()=>{}),()=>{e=!0}},[]);let[Ke,qe]=(0,H.useState)({taskId:null,open:!1}),Je=Ke.open&&Ke.taskId===w?.id,Ye=(0,H.useRef)(null),Xe=(0,H.useRef)(null),Ze=(0,H.useRef)(null),Qe=(0,H.useCallback)((e=!1)=>{qe(e=>({...e,open:!1})),e&&window.requestAnimationFrame(()=>Xe.current?.focus())},[]);(0,H.useEffect)(()=>{if(!Je)return;let e=window.requestAnimationFrame(()=>{Ze.current?.querySelector(`[role="menuitem"]`)?.focus()}),t=e=>{e.target instanceof Node&&!Ye.current?.contains(e.target)&&Qe()},n=e=>{e.key===`Escape`&&(e.preventDefault(),Qe(!0))};return document.addEventListener(`pointerdown`,t),document.addEventListener(`keydown`,n),()=>{window.cancelAnimationFrame(e),document.removeEventListener(`pointerdown`,t),document.removeEventListener(`keydown`,n)}},[Qe,Je]);let $e=e=>{if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),Qe(!0);return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`&&e.key!==`Home`&&e.key!==`End`)return;let t=[...Ze.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,H.useEffect)(()=>{re(),F()},[re,F]),(0,H.useEffect)(()=>{if(!a){oe(null);return}oe(a),ce(a).catch(()=>void 0),W(a,``).catch(()=>void 0)},[a,W,ce,oe]);let tt=q.find(e=>e.key===je)||q.find(e=>e.model===_&&(v===`plugin`?e.providerType===`plugin`&&e.providerId===y:e.providerType===`ollama`))||q[0],nt=a?C.find(e=>e.id===a):void 0,rt=nt?.status??w?.status,it=w?.activeRun??nt?.activeRun??null,X=it?.id,at=it?.status===`queued`||it?.status===`preparing`||it?.status===`running`,ot=a&&O[a]?.runId===X?O[a]:void 0,st=rt===`preparing`||rt===`running`?1e3:4e3;(0,H.useEffect)(()=>{let e,t=!1,n=async()=>{await F(!0),t||(e=setTimeout(n,st))};return e=setTimeout(n,st),()=>{t=!0,e&&clearTimeout(e)}},[F,st]);let ct=(0,H.useRef)(null);(0,H.useEffect)(()=>{if(!a||!rt){ct.current=null;return}let e=ct.current;ct.current={taskId:a,status:rt},e?.taskId===a&&(e.status===`preparing`||e.status===`running`)&&rt!==`preparing`&&rt!==`running`&&(ce(a,!0).catch(()=>void 0),W(a,``).catch(()=>void 0))},[W,ce,rt,a]),(0,H.useEffect)(()=>{if(!a||!X||!at)return;let e=new AbortController,t=!1,n=0,r=pe.getState().liveRuns[a]?.runId===X&&pe.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=[],xe(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 be(a,X,it?.startedAt||void 0),(async()=>{for(;!t&&!e.signal.aborted&&!i;){Se(a,X,n>=3?`error`:n===0?`connecting`:`reconnecting`);let o=Date.now();try{if(await L.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,Se(a,X,n>=3?`error`:`reconnecting`,n>=3?Rt(r,`Live updates are reconnecting in the background.`):void 0),await zt(Math.min(4e3,250*2**Math.min(n,4)),e.signal)}}if(c(),!(!i||e.signal.aborted)){Se(a,X,`closed`);try{await Promise.all([ce(a,!0),W(a,``),F(!0)])}catch{}finally{we(a,X)}}})(),()=>{t=!0,e.abort(),c()}},[xe,be,we,W,ce,F,it?.startedAt,at,X,Se,a]),(0,H.useEffect)(()=>{if(!J)return;let e=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[J]);let lt=(0,H.useCallback)(()=>!J||window.confirm(e(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),[e,J]),ut=(0,H.useCallback)(()=>!J||window.confirm(e(`work.files.leaveWithDraft`,{defaultValue:`Leave this file? Your unsaved edit will remain as a browser draft.`})),[e,J]),Z=()=>{w&&E&&fe(w.id,E.path)},dt=o(({currentLocation:e,nextLocation:t})=>{let n=t.state;return J&&n?.deletedWorkTaskId!==a&&`${e.pathname}${e.search}${e.hash}`!=`${t.pathname}${t.search}${t.hash}`});(0,H.useEffect)(()=>{if(dt.state!==`blocked`)return;if(!ut()){dt.reset();return}let e=dt.proceed,t=window.setTimeout(()=>{Le(!1),window.setTimeout(e,0)},0);return()=>window.clearTimeout(t)},[ut,dt]);let ft=()=>{Ae(),Ie(`conversation`),n(`/work`)},pt=async t=>{if(w&&!lt())return!1;w&&J&&(Z(),Ee(),Le(!1));try{if(w)await B(w.id,{message:t,model:w.model,providerType:w.providerType,providerId:w.providerId||void 0});else{if(!tt)throw Error(e(`work.composer.noModelSelected`,{defaultValue:`No Work-compatible model is selected.`}));let r=await I({message:t,model:tt.model,providerType:tt.providerType,providerId:tt.providerId,networkEnabled:!0,...Ve&&Re.trim()?{hostPath:Re.trim()}:{},...Y?{policyId:Y}:{}});n(`/work/${r.id}`)}return!0}catch(t){return D.error(Rt(t,e(`work.toasts.runFailed`,{defaultValue:`Could not start the Work task.`}))),!1}},mt=async t=>{let n=Tt.find(e=>e.key===t);if(n){if(!w){Me(t);return}try{await he(w.id,{model:n.model,providerType:n.providerType,providerId:n.providerId})}catch(t){D.error(Rt(t,e(`work.toasts.updateFailed`,{defaultValue:`Could not update this task.`})))}}},ht=async()=>{if(w)try{await ve(w.id),D.success(e(`work.toasts.cancelled`,{defaultValue:`Work run stopped.`}))}catch(t){D.error(Rt(t,e(`work.toasts.cancelFailed`,{defaultValue:`Could not stop the Work run.`})))}},gt=async t=>{let r=C.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&&J;i&&Le(!1);try{await ge(t),de(t),a===t&&n(`/work`)}catch(t){i&&Le(!0),D.error(Rt(t,e(`work.toasts.deleteFailed`,{defaultValue:`Could not delete this Work task.`})))}},_t=async t=>{if(!w)return!1;let n=t.trim();if(!n||n===w.title)return!!n;try{return await he(w.id,{title:n}),!0}catch(t){return D.error(Rt(t,e(`work.toasts.renameFailed`,{defaultValue:`Could not rename this task.`}))),!1}},vt=async(e,t,n)=>{try{return await e(),n&&D.success(n),!0}catch(e){return D.error(Rt(e,t)),!1}},yt=async(t,n,r)=>{if(!w)return!1;let i=w.id;try{let a=await De(i,t,n,r);return pe.getState().selectedTaskId===i&&D.success(e(`work.toasts.saved`,{defaultValue:`File saved.`})),a}catch(t){return pe.getState().selectedTaskId===i&&D.error(Rt(t,e(`work.toasts.saveFailed`,{defaultValue:`Could not save this file.`}))),!1}},Q=x?.available===!1,bt=x?.pluginAvailable?x.ollamaAvailable?e(`work.runtime.readyHybrid`,{defaultValue:`Docker + models ready`}):e(`work.runtime.readyPlugin`,{defaultValue:`Docker + plugin ready`}):e(`work.runtime.readyOllama`,{defaultValue:`Docker ready`}),xt=e(`work.runtime.ready`,{defaultValue:`Runtime ready`}),St=w?V(w):!1,$=w?{model:w.model,providerType:w.providerType,providerId:w.providerId||void 0}:void 0,Ct=$?Ce($):tt?.key||``,wt=$&&!q.some(e=>e.key===Ct)?{...$,key:Ct,label:`${$.model} · ${$.providerType===`plugin`?$.providerId||`plugin`:`Ollama`}`,remote:$.providerType===`plugin`||$.model.toLowerCase().endsWith(`:cloud`)||$.model.toLowerCase().endsWith(`-cloud`)}:void 0,Tt=wt?[wt,...q]:q,Et=ye[w?.status??`idle`],Dt=e(Et.labelKey,{defaultValue:Et.label}),Ot=async()=>{if(l.workRemoteProviderDisclosureDismissed||m)return!1;let t=p;h(!0);try{let n=await ue.updatePreferences({workRemoteProviderDisclosureDismissed:!0});if(!n.success)throw Error(n.error||e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`}));return(me.getState().user?.id??null)===t&&(d({workRemoteProviderDisclosureDismissed:!0}),!0)}catch{return D.error(e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`})),!1}finally{h(!1)}};return(0,U.jsx)(`div`,{"data-testid":`work-page`,className:`relative flex h-full min-h-0 overflow-hidden bg-transparent`,children:(0,U.jsxs)(`main`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,U.jsxs)(`header`,{className:`flex h-16 shrink-0 items-center gap-3 border-b border-line bg-surface/55 px-3 backdrop-blur-xl md:px-4`,children:[w?(0,U.jsx)(`input`,{"data-testid":`work-task-title`,dir:`auto`,defaultValue:w.title,onBlur:e=>{let t=e.currentTarget;if(!t.value.trim()){t.value=w.title;return}_t(t.value).then(e=>{e||(t.value=w.title)})},onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&(e.currentTarget.value=w.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`})},`${w.id}:${w.title}`):(0,U.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,U.jsx)(`h1`,{className:`truncate text-sm font-semibold text-ink`,children:e(`work.title`,{defaultValue:`Work`})})}),w?.hostPath&&(0,U.jsxs)(`span`,{"data-testid":`work-host-path-chip`,title:w.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,U.jsx)(N,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,U.jsx)(`span`,{className:`max-w-[16rem] truncate`,children:w.hostPath})]}),w&&(0,U.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:Dt,defaultValue:`Status: {{status}}`}),title:e(`work.tasks.status`,{status:Dt,defaultValue:`Status: {{status}}`}),children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-compact-status-indicator`,className:R(`h-1.5 w-1.5 rounded-full`,Et.animated&&`animate-pulse`,w.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:Et.color}}),(0,U.jsx)(`span`,{className:`hidden md:inline`,children:Dt})]}),w&&(0,U.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,U.jsxs)(`button`,{type:`button`,onClick:()=>Ie(`conversation`),"aria-label":e(`work.mobile.conversation`,{defaultValue:`Conversation`}),"aria-pressed":Fe===`conversation`,className:R(`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`,Fe===`conversation`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,U.jsx)(ae,{className:`h-3.5 w-3.5 shrink-0`}),(0,U.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.conversation`,{defaultValue:`Conversation`})})]}),(0,U.jsxs)(`button`,{type:`button`,onClick:()=>Ie(`workspace`),"aria-label":e(`work.mobile.workspace`,{defaultValue:`Workspace`}),"aria-pressed":Fe===`workspace`,className:R(`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`,Fe===`workspace`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,U.jsx)(S,{className:`h-3.5 w-3.5 shrink-0`}),(0,U.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.workspace`,{defaultValue:`Workspace`})})]})]}),(0,U.jsxs)(`div`,{className:R(`ms-auto hidden min-w-0 items-center gap-2`,w?`xl:flex`:`sm:flex`),children:[w&&(0,U.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,U.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-status-indicator`,className:R(`h-1.5 w-1.5 rounded-full`,Et.animated&&`animate-pulse`,w.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:Et.color}}),Dt]}),(0,U.jsxs)(`span`,{"data-testid":`work-runtime-status`,className:R(`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?x?.reason||e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):x?.image?`${bt} · ${x.image}`:bt,children:[(0,U.jsx)(ie,{className:`h-3.5 w-3.5`}),Q?e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):xt]}),w&&(0,U.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,U.jsx)(se,{className:`h-3.5 w-3.5 shrink-0`}),(0,U.jsx)(`span`,{dir:`ltr`,className:`truncate`,children:w.model})]})]}),w&&(0,U.jsxs)(`div`,{ref:Ye,className:`relative shrink-0`,children:[(0,U.jsx)(`button`,{ref:Xe,id:`work-task-actions-trigger`,type:`button`,"data-testid":`work-task-actions-button`,onClick:()=>qe(e=>({taskId:w.id,open:e.taskId!==w.id||!e.open})),onKeyDown:e=>{(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),qe({taskId:w.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":Je,"aria-controls":Je?`work-task-actions-menu`:void 0,children:(0,U.jsx)(k,{className:`h-4 w-4`})}),Je&&(0,U.jsx)(`div`,{ref:Ze,id:`work-task-actions-menu`,role:`menu`,"aria-labelledby":`work-task-actions-trigger`,onKeyDown:$e,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,U.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`work-delete-task-button`,onClick:()=>{Qe(!0),gt(w.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,U.jsx)(ne,{className:`h-3.5 w-3.5`}),e(`work.tasks.delete`,{defaultValue:`Delete task`})]})})]})]}),(Q||P)&&(0,U.jsxs)(`div`,{className:R(`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,U.jsx)(u,{className:`h-4 w-4 shrink-0`}),(0,U.jsx)(`span`,{dir:`auto`,className:`min-w-0 flex-1`,children:Q?x?.reason||e(`work.runtime.reason`,{defaultValue:`Docker and an available Ollama or plugin model provider are required.`}):P}),P&&!Q&&(0,U.jsx)(`button`,{type:`button`,className:`rounded-md p-1 hover:bg-black/5`,onClick:Ae,"aria-label":e(`common.close`),children:`×`})]}),a?w?(0,U.jsx)(et,{userId:p,mobileSurface:Fe,conversation:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(ze,{task:w,user:f,liveRun:ot,loading:A,loadingOlder:j,onLoadOlder:()=>le(w.id)}),(0,U.jsx)(Te,{models:Tt,selectorModels:K,modelKey:Ct,running:St,loading:ee,disabled:Q,remoteDisclosureDismissed:l.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:m,onModelChange:mt,onDismissRemoteDisclosure:Ot,onModelsRefresh:b,onSubmit:pt,onCancel:ht},w.id)]}),workspace:(0,U.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1`,children:(0,U.jsx)(It,{task:w,liveRun:ot,files:T,selectedFile:E,loadingFiles:M,actionLoading:ee,onLoadFiles:e=>W(w.id,e),onLoadFile:e=>G(w.id,e),onClearSelectedFile:Ee,onSaveFile:yt,onStartPreview:t=>vt(()=>Oe(w.id,t),e(`work.toasts.previewFailed`,{defaultValue:`Could not start the preview.`})),onStopPreview:()=>vt(()=>ke(w.id),e(`work.toasts.previewStopFailed`,{defaultValue:`Could not stop the preview.`})),onDirtyChange:Le,terminal:x?.terminal},w.id)})}):(0,U.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col items-center justify-center px-6 text-center`,children:A?(0,U.jsx)(`div`,{className:`text-sm text-ink-muted`,children:e(`work.tasks.loading`,{defaultValue:`Loading task…`})}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(u,{className:`mb-3 h-8 w-8 text-ink-subtle`}),(0,U.jsx)(`h2`,{className:`text-lg font-semibold text-ink`,children:e(`work.tasks.notFound`,{defaultValue:`This Work task is unavailable`})}),(0,U.jsxs)(`button`,{type:`button`,onClick:ft,className:`mt-4 inline-flex items-center gap-1.5 text-sm font-medium text-primary-600 hover:text-primary-700`,children:[(0,U.jsx)(te,{className:`h-4 w-4 rtl:rotate-180`}),e(`work.tasks.back`,{defaultValue:`Start a new task`})]})]})}):(0,U.jsxs)(`div`,{className:`relative min-h-0 flex-1 overflow-y-auto`,children:[(0,U.jsxs)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-0`,children:[(0,U.jsx)(`div`,{className:`absolute left-[12%] top-[18%] h-56 w-56 rounded-full bg-primary-500/[0.035] blur-3xl dark:bg-primary-400/[0.04]`}),(0,U.jsx)(`div`,{className:`absolute bottom-[16%] right-[10%] h-72 w-72 rounded-full bg-gray-900/[0.025] blur-3xl dark:bg-white/[0.025]`}),(0,U.jsx)(`div`,{className:`absolute left-1/2 top-0 h-16 w-px bg-gray-300/60 dark:bg-white/10`})]}),(0,U.jsxs)(`section`,{"data-testid":`work-landing`,className:`relative z-[1] 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,U.jsxs)(`div`,{className:`flex flex-col items-center text-center`,children:[(0,U.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,U.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.`})})]}),Ue.length>0&&(0,U.jsxs)(`div`,{className:`mt-8 w-full max-w-2xl`,children:[(0,U.jsx)(`label`,{htmlFor:`work-policy`,className:`mb-1.5 block text-xs font-medium text-ink-muted`,children:e(`work.policy.label`,{defaultValue:`Runtime policy`})}),(0,U.jsxs)(`select`,{id:`work-policy`,"data-testid":`work-policy`,value:Y,onChange:e=>Ge(e.target.value),className:`w-full rounded-xl border border-line bg-surface px-3 py-2 text-[13px] text-ink outline-none transition-colors focus:border-line-strong focus-visible:ring-2 focus-visible:ring-primary-500/30`,children:[(0,U.jsx)(`option`,{value:``,children:e(`work.policy.default`,{defaultValue:`Default (global limits)`})}),Ue.map(e=>(0,U.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),Ve&&(0,U.jsxs)(`div`,{className:`mt-8 w-full max-w-2xl`,children:[(0,U.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,U.jsx)(`input`,{id:`work-host-path`,"data-testid":`work-host-path`,value:Re,onChange:e=>Be(e.target.value),spellCheck:!1,placeholder:He[0]?`${He[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,U.jsx)(`p`,{className:`mt-1.5 text-[11px] leading-relaxed text-ink-subtle`,children:Re.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,U.jsx)(Te,{variant:`landing`,models:q,selectorModels:K,modelKey:tt?.key||``,running:!1,loading:ee,disabled:Q,remoteDisclosureDismissed:l.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:m,onModelChange:mt,onDismissRemoteDisclosure:Ot,onModelsRefresh:b,onSubmit:pt,onCancel:ht}),(0,U.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,U.jsx)(ie,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,U.jsx)(`span`,{children:e(`work.composer.hint`,{defaultValue:`Each task keeps its own files and history. Review model output before using it.`})})]})]})]})]})})}export{Bt as default};
@@ -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`,approvalPending:`حسابك في انتظار موافقة المسؤول.`},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 أحرف على الأقل`,approvalPending:`تم استلام التسجيل. يجب أن يوافق المسؤول على حسابك.`,awaitingApproval:`في انتظار الموافقة`,awaitingApprovalDescription:`تم إنشاء حسابك، ولكن يجب أن يقوم المسؤول بتفعيله قبل أن تتمكن من تسجيل الدخول.`,backToSignIn:`العودة لتسجيل الدخول`},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:`المزود`,tagline:`يجب أن يخضع مكدس الذكاء الاصطناعي الخاص بك لك.`,selfHosted:`مستضاف ذاتيًا · Apache 2.0`,highlights:{local:{title:`محلي أولاً`,body:`تبقى محادثاتك وملفاتك على الجهاز الذي تشغل هذا عليه.`},providers:{title:`أي مزود`,body:`نماذج محلية عبر Ollama، بالإضافة إلى المزودين عن بُعد الذين تختار إضافتهم.`},work:{title:`عمل معزول`,body:`امنح النموذج مساحة عمل معزولة بالملفات والطرفية والمعاينة.`}}},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 الخاص بك`,approvalUnexpected:`تعذر تفعيل المسؤول الأولي. يرجى المحاولة مرة أخرى.`},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:`تصبح على خير`},followUp:`متابعة`,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:`إيقاف التوليد`,menu:{uploadImages:`رفع صور`,attachDocument:`إرفاق مستند`,attachWebpage:`إرفاق صفحة ويب`,structuredOutput:`إخراج منظم`,attach:`إرفاق`,documentAttached:`تم إرفاق المستند`,webpageAttached:`تم إرفاق صفحة الويب`,attachFailed:`تعذر الإرفاق`,attachKnowledge:`إرفاق معرفة`,noCollections:`لا توجد مجموعات بعد — أنشئ واحدة في الإعدادات ← المستندات`},voiceInput:`إدخال صوتي`,voiceStop:`إيقاف الاستماع`},session:{new:`محادثة جديدة`,work:`العمل`,chat:`محادثة`,private:`خاص`,privateMode:`الوضع الخاص`,privateDescription:`لن يتم حفظ هذه المحادثة`,privateTooltip:`ابدأ محادثة خاصة لن يتم حفظها`,deleteConfirm:`هل أنت متأكد من حذف هذه المحادثة؟`,generatingTitle:`جاري توليد العنوان`,noChats:`لا توجد محادثات بعد`,createFirst:`أنشئ أول محادثة أعلاه`,chats:`المحادثات`,renameChat:`إعادة تسمية المحادثة`,deleteChat:`حذف المحادثة`,incognito:`دردشة مخفية`,archiveChat:`أرشفة المحادثة`,groups:{today:`اليوم`,yesterday:`أمس`,previous7Days:`آخر 7 أيام`,previous30Days:`آخر 30 يومًا`,older:`أقدم`},folder:{new:`مجلد جديد`,namePlaceholder:`اسم المجلد`,move:`نقل إلى مجلد`,remove:`إزالة من المجلد`,delete:`حذف المجلد`,deleteConfirm:`حذف هذا المجلد؟ ستبقى المحادثات بداخله.`}},persona:{applied:`تم تطبيق الشخصية`,label:`الشخصية`,removeFailed:`فشل في إزالة الشخصية`},model:{updated:`تم تحديث النموذج`,noModels:`لا توجد نماذج متاحة`,noModelsDescription:`لا توجد نماذج متاحة. تأكد من تشغيل Ollama وتثبيت النماذج.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`لا توجد نماذج متاحة. يرجى التأكد من تشغيل Ollama وتثبيت النماذج.`,selectBeforePrivateChat:`اختر نموذجاً متاحاً قبل بدء محادثة خاصة`,selectBeforeSending:`اختر نموذجاً متاحاً قبل الإرسال`},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:`تم تفعيل المخرجات المنظمة`},controls:{title:`عناصر تحكم المحادثة`,systemPrompt:`موجه النظام`,systemPromptPlaceholder:`تعليمات تنطبق على هذه المحادثة فقط…`,advancedParams:`معلمات متقدمة`,advancedParamsDescription:`تجاوزات لهذه المحادثة. الحقول الفارغة تستخدم الإعدادات العامة.`,fromModel:`من النموذج`,fromModelHint:`هذه القيمة مأخوذة من الإعدادات التي يوصي بها النموذج نفسه.`,contextCapped:`تم تحديد السياق عند {{context}} من أصل {{trained}} تم تدريب النموذج عليها، حتى يظل قابلاً للتحميل.`,saved:`تم حفظ عناصر التحكم`,saveFailed:`تعذر حفظ عناصر التحكم`,params:{temperature:`درجة الحرارة`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`أقصى عدد رموز`,repeatPenalty:`عقوبة التكرار`,seed:`البذرة`,contextLength:`طول السياق`}}},sidebar:{navigation:{chat:`محادثة`,models:`النماذج`,personas:`الشخصيات`,imagine:`تخيّل`,work:`العمل`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,signOut:`تسجيل الخروج`,agents:`الوكلاء`,exploreLabel:`استكشاف`,usageAnalytics:`استخدام المزود`,system:`النظام`,notes:`الملاحظات`},toggleSize:`تبديل حجم الشريط الجانبي`,expandSidebar:`توسيع الشريط الجانبي`},user:{menu:{changePicture:`تغيير الصورة`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,logout:`تسجيل الخروج`,usageAnalytics:`استخدام المزود`,system:`النظام`},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":"البيانات","shortcuts":"الاختصارات","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":"عرض اسم المستخدم في رسائل المحادثة","followUpSuggestions":"اقتراحات المتابعة","followUpSuggestionsDescription":"اقتراح ردود سريعة بعد كل استجابة","hapticFeedback":"ردود فعل لمسية (Android)","hapticFeedbackDescription":"استخدام اهتزاز خفيف للإجراءات المهمة على الهاتف"},"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}} نماذج","specializedModels":"نماذج متخصصة","visionModel":"نموذج الرؤية","selectVisionModel":"استخدام نموذج الدردشة الحالي","visionModelDescription":"يُستخدم تلقائيًا كلما احتوى سياق الدردشة الصادر على صور. اختر نموذجًا يدعم إدخال الصور.","visionModelUpdateFailed":"فشل تحديث نموذج الرؤية: {{error}}","visionModelNoProvider":"نموذج الرؤية هذا ليس له هوية مزوّد. اختر نموذجاً متاحاً."},"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","providerConnections":"اتصالات المزود","providerConnectionsDescription":"اتصل، وقم بتكوين، وفحص مزودي النماذج عبر الإضافات.","providers":"المزودون","searchProviders":"ابحث عن المزودين","noProvidersFound":"لا يوجد مزودون يطابقون بحثك.","selectProvider":"اختر مزودًا","selectProviderDescription":"اختر مزودًا لفحص اتصاله وكتالوج النماذج الخاص به.","apiKeyDescription":"قم بتخزين مفتاح API شخصي لـ {{name}}.","showApiKey":"إظهار مفتاح API","hideApiKey":"إخفاء مفتاح API","configure":"تكوين","providerSettings":"إعدادات المزود","status":"الحالة","defaultEndpoint":"نقطة النهاية الافتراضية","modelCatalog":"كتالوج النماذج","modelCatalogDescription":"النماذج المكتشفة والمكونة لهذا المزود وقدراته.","refreshModels":"تحديث النماذج","noModelsConfigured":"لا توجد نماذج مكونة لهذا المزود.","modelId":"معرف النموذج","capabilities":"القدرات","modelCatalogUpdated":"تم تحديث كتالوج النماذج: {{count}} نماذج.","modelCatalogUnchanged":"كتالوج النماذج محدث بالفعل.","modelCatalogNeedsApiKey":"أضف مفتاح API صالح لهذا المزود لتحميل قائمة نماذجه المباشرة.","modelCatalogUnavailable":"تعذر تحميل قائمة نماذج المزود.","modelCatalogRefreshFailed":"فشل تحديث كتالوج النماذج","capability":{"chat":"دردشة","embedding":"تضمين","image":"صورة","speech":"كلام","transcription":"نسخ"},"exportPlugin":"تصدير الإضافة","deletePlugin":"حذف الإضافة"},"generation":{"title":"خيارات التوليد","description":"إعداد كيفية توليد الذكاء الاصطناعي للاستجابات","scopeLabel":"يُطبَّق على","scopeAll":"كل النماذج","scopeModel":"{{model}} فقط","scopeAllHint":"القيم التي يستخدمها كل نموذج ما لم يكن له إعداد خاص به.","scopeModelHint":"يُحفظ لهذا النموذج وحده، ويتجاوز الإعدادات العامة.","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":"تفعيل تضمين المستندات","advancedSettings":"إعدادات التوليد المتقدمة","advancedSettingsDescription":"أخذ العينات، وحدود الرموز، والسياق، والعقوبات، وتسلسلات الإيقاف"},"documents":{"title":"إعدادات المستندات","embeddings":{"title":"التضمينات","enable":"تفعيل تضمين المستندات","model":"نموذج التضمين","modelDescription":"اختر النموذج المستخدم لتضمين المستندات","chunkSize":"حجم القطعة","chunkSizeInTokens":"(بالرموز)","chunkSizeDescription":"حجم قطع النص للتضمين","chunkOverlap":"تداخل القطع","chunkOverlapInTokens":"(بالرموز)","chunkOverlapDescription":"التداخل بين القطع المتتالية","similarityThreshold":"عتبة التشابه","similarityDescription":"الحد الأدنى لدرجة التشابه لتضمين النتائج","status":"حالة التضمين","statusLabel":"الحالة","available":"متاح","unavailable":"غير متاح","chunksWithEmbeddings":"قطع مع تضمينات","coverage":"التغطية","regenerate":"إعادة توليد التضمينات","regenerating":"جاري إعادة التوليد..."},"collections":{"title":"مجموعات المعرفة","description":"اجمع المستندات في مجموعات وأرفقها بأي محادثة.","namePlaceholder":"اسم المجموعة","create":"إنشاء","none":"بدون مجموعة","deleteConfirm":"حذف هذه المجموعة؟ ستبقى المستندات بداخلها."}},"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":"أخطاء","archivedChats":{"title":"المحادثات المؤرشفة","empty":"لا توجد محادثات مؤرشفة","unarchive":"إلغاء الأرشفة"}},"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:`التنقل`,general:`عام`,chat:`المحادثة`,workspace:`مساحة العمل`},actions:{sendMessage:`إرسال الرسالة`,newLine:`سطر جديد في الرسالة`,saveEdit:`حفظ الرسالة المعدّلة`,cancelEdit:`إلغاء التعديل`,saveFile:`حفظ الملف`,formatCode:`تنسيق الشيفرة`},description:`كل اختصارات لوحة المفاتيح المتاحة في Libre WebUI.`,newChat:`محادثة جديدة`,newWork:`جلسة عمل جديدة`,openPalette:`فتح لوحة الأوامر`},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:`فشل تحديث المستخدم`},approval:{title:`الموافقات المعلقة`,description:`راجع التسجيلات الجديدة قبل السماح لها بالدخول إلى هذا المثيل.`,registered:`مسجل`,activate:`تفعيل الحساب`,reject:`رفض التسجيل`,approved:`يمكن لـ {{name}} الآن تسجيل الدخول.`,failed:`تعذر الموافقة على الحساب.`,notification:`{{count}} تسجيل ينتظر موافقتك.`,notificationBadge:`{{count}} موافقات مستخدمين معلقة`},workAccess:{title:`الوصول إلى Work`,description:`السماح لجميع المستخدمين النشطين بإنشاء مهام Work وتشغيلها في بيئات معزولة. يتمتع المسؤولون بالوصول دائمًا؛ وتبقى مجلدات المضيف مقصورة على المسؤولين.`,saved:`تم تحديث الوصول إلى Work`,saveFailed:`تعذر تحديث الوصول إلى Work`},workPolicies:{title:`سياسات Work`,description:`إعدادات تشغيل مسماة (الصورة، الحدود، الإيقاف عند الخمول) يمكن إنشاء المهام وفقها. الحقول الفارغة ترث الإعدادات العامة.`,add:`إضافة سياسة`,name:`الاسم`,image:`الصورة`,memory:`الذاكرة`,cpu:`المعالجات`,pids:`حد PID`,workspaceSize:`حجم مساحة العمل`,idleMinutes:`الإيقاف عند الخمول (دقائق)`,networkDefault:`الشبكة الافتراضية`,networkInherit:`وراثة الافتراضي`,networkOn:`مفعّلة`,networkOff:`معطّلة`,save:`حفظ`,cancel:`إلغاء`,edit:`تعديل السياسة`,delete:`حذف السياسة`,deleteConfirm:`هل تريد حذف هذه السياسة؟ ستعود المهام التي تستخدمها إلى الإعدادات العامة.`,empty:`لا توجد سياسات بعد. تستخدم المهام إعدادات التشغيل العامة.`,saved:`تم حفظ سياسة Work`,deleted:`تم حذف سياسة Work`,failed:`تعذر حفظ سياسة Work`}},chatHistory:{label:`سجل المحادثة`,jumpToTurn:`الانتقال إلى الدور {{index}} من {{total}}`},chatMessage:{you:`أنت`,assistant:`المساعد`,system:`النظام`,copy:`نسخ`,copyMessage:`نسخ الرسالة`,copied:`تم النسخ!`,regenerate:`إعادة التوليد`,regenerateResponse:`إعادة توليد الاستجابة`,edit:`تعديل`,editSystemMessage:`تعديل رسالة النظام`,saveChanges:`حفظ التغييرات`,cancelEditing:`إلغاء التعديل`,saveAndSubmit:`حفظ وإرسال`,goodResponse:`رد جيد`,badResponse:`رد سيئ`,delete:`حذف`,deleteConfirm:`حذف هذه الرسالة؟`,branch:`تفرع`,speaking:`جاري التحدث...`,speakMessage:`نطق الرسالة`,stopSpeaking:`إيقاف التحدث`,showMore:`عرض المزيد`,showLess:`عرض أقل`,thinking:`يفكر`,thoughtFor:`فكّر لمدة {{duration}}`,hiddenLines:`الأسطر المخفية: {{count}}`,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.`,versionOf:`الإصدار {{current}} من {{total}}`,previousVersion:`الإصدار السابق`,nextVersion:`الإصدار التالي`},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:`تم تعيين القيمة (أدخل قيمة جديدة للتغيير)`,resetFailed:`فشل إعادة تعيين المتغيرات`,showValue:`إظهار قيمة {{label}}`,hideValue:`إخفاء قيمة {{label}}`,connection:`اتصال`,advanced:`معلمات متقدمة`,inherited:`استخدام افتراضي للمزود`,inheritedValue:`استخدام افتراضي للمزود ({{value}})`,enabled:`ممكّن`,disabled:`معطّل`,required:`القيمة مطلوبة`,fullApiEndpoint:`URL كامل لنقطة نهاية API`,endpointHelp:`أدخل URL الطلب الكامل، بما في ذلك مسار العملية الخاص به (على سبيل المثال، /v1/chat/completions)، وليس فقط URL الأساسي للمزود.`,invalidUrl:`أدخل URL كامل وصالح لنقطة نهاية API، على سبيل المثال https://provider.example/v1/chat/completions`,insecureUrl:`يجب أن تستخدم نقاط نهاية API بروتوكول HTTP أو HTTPS.`,httpWarning:`لا يقوم HTTP بتشفير بيانات الاعتماد أو حركة المرور. استخدمه فقط على شبكة موثوقة.`,invalidBaseUrl:`لا يمكن أن تحتوي عناوين URL الأساسية على سلسلة استعلام أو جزء.`,invalidApiPath:`يجب أن يبدأ بـ / وألا يحتوي على URL أو استعلام أو جزء أو مقطع ..`,tooLong:`القيمة طويلة جدًا`}},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:`دور النموذج قيد التنفيذ`},policy:{label:`سياسة التشغيل`,default:`افتراضي (الحدود العامة)`}},usageAnalytics:{eyebrow:`الإدارة`,title:`استخدام المزود`,description:`تابع مكالمات API الصادرة واستهلاك النماذج عبر الإضافات الممكّنة في هذا المثيل.`,days:`{{count}} أيام`,refresh:`تحديث الاستخدام`,loadFailed:`تعذر تحميل استخدام المزود.`,metrics:{calls:`المكالمات`,tokens:`الرموز`},cards:{calls:`مكالمات API`,callsDetail:`عبر {{count}} مستخدم نشط`,tokens:`الرموز المُبلغ عنها`,tokensDetail:`الاستخدام المُبلغ عنه في {{count}} مكالمة`,success:`معدل النجاح`,successDetail:`{{count}} مكالمة فاشلة`,latency:`متوسط زمن الاستجابة`,latencyDetail:`وقت المزود من البداية للنهاية`},activity:{title:`الاستهلاك بمرور الوقت`,callsDescription:`الطلبات الصادرة اليومية للإضافات الممكّنة`,tokensDescription:`إجمالي الرموز اليومية التي أبلغ عنها المزودون`,chartLabel:`مخطط {{metric}} اليومي للمزود`},models:{title:`استهلاك النموذج`,description:`النماذج التي تحمل أكبر قدر من حركة المرور في هذه الفترة.`,model:`النموذج`,success:`النجاح`,latency:`زمن الاستجابة`},providers:{title:`حركة مرور الإضافات الممكّنة`},capabilities:{title:`مزيج القدرات`,characters:`{{count}} حرف`,images:`{{count}} صورة`,jobs:`{{count}} مهمة فيديو`,inputs:`{{count}} مدخل`,reportedTokens:`{{count}} رمز مُبلغ عنه`},empty:{title:`لا توجد مكالمات مزود بعد`,description:`ستظهر المكالمات هنا بعد أن تعالج إضافة ممكّنة طلبات الدردشة، أو العمل، أو التضمين، أو الصورة، أو الكلام، أو الصوت، أو الفيديو.`},privacyNote:`يتم قياس الاستخدام على الخادم عند حدود الإضافة الصادرة. يخزن Libre WebUI المزود، والنموذج، والتوقيت، والحالة، والعدادات المُبلغ عنها — وليس المطالبات، أو الاستجابات، أو نقاط النهاية، أو بيانات الاعتماد، أو هيئات أخطاء المزود. تشمل إجماليات الرموز فقط المكالمات التي أعاد فيها المزود بيانات الاستخدام الوصفية.`,heatmap:{title:`عام من النشاط`,description:`استدعاءات المزوّد اليومية خلال العام الماضي، ملوّنة حسب النموذج الأكثر استخدامًا في كل يوم.`,calls:`استدعاءات`,noCalls:`لا استدعاءات`,other:`نماذج أخرى`,less:`أقل`,more:`أكثر`,yearTotal:`{{formatted}} استدعاءً خلال العام الماضي`}},systemPage:{eyebrow:`الإدارة`,title:`النظام`,description:`راقب الجهاز ووقت التشغيل الذي يستضيف مثيل Libre WebUI هذا.`,updated:`تم التحديث {{date}}`,refresh:`تحديث معلومات النظام`,loadFailed:`تعذر تحميل معلومات النظام.`,cards:{uptime:`وقت تشغيل المضيف`,uptimeDetail:`يعمل منذ {{date}}`,memory:`الذاكرة المستخدمة`,memoryDetail:`{{used}} من {{total}}`,freeSpace:`مساحة فارغة`,freeSpaceDetail:`{{label}} · {{total}} الإجمالي`,containers:`الحاويات قيد التشغيل`,containersDetail:`{{total}} حاوية معروفة لـ Docker`,dockerUnavailable:`Docker غير متاح`,unavailable:`غير متاح`},host:{title:`المضيف ووقت التشغيل`,description:`تفاصيل نظام التشغيل والمعالج وعملية Libre WebUI.`,container:`وقت تشغيل الحاوية`,native:`وقت تشغيل أصلي`,hostname:`اسم المضيف`,operatingSystem:`نظام التشغيل`,processor:`المعالج`,logicalCpus:`وحدات CPU منطقية`,loadAverage:`متوسط الحمل · 1 / 5 / 15 دقيقة`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`العملية`,workingDirectory:`دليل العمل`},memory:{title:`الذاكرة`,description:`ذاكرة النظام المرئية لوقت التشغيل واستخدام عملية التطبيق.`,usedOf:`{{used}} مستخدمة من {{total}}`,free:`{{value}} فارغة`,processRss:`RSS العملية`,heapUsed:`كومة V8 المستخدمة`,heapTotal:`إجمالي كومة V8`,external:`ذاكرة خارجية`},storage:{title:`التخزين`,description:`المساحة المتاحة لنظام ملفات وقت التشغيل وبيانات التطبيق الدائمة.`,used:`{{value}} مستخدمة`,free:`{{value}} فارغة`,empty:`معلومات نظام الملفات غير متاحة في وقت التشغيل هذا.`},docker:{title:`Docker`,description:`حالة Docker Engine للقراءة فقط وقائمة مختصرة من الحاويات.`,connected:`متصل`,unavailable:`غير متاح`,unavailableDetail:`تشخيصات Docker Engine غير متاحة.`,socketStatus:`مقبس محلي: {{status}}`,mounted:`مُثبت`,notMounted:`غير مُثبت`,running:`قيد التشغيل`,stopped:`متوقف`,paused:`متوقف مؤقتًا`,total:`الإجمالي`,version:`الإصدار`,host:`المضيف`,architecture:`البنية`,cpus:`وحدات CPU`,memory:`الذاكرة`,container:`الحاوية`,image:`الصورة`,state:`الحالة`,created:`تم الإنشاء`,empty:`Docker متصل ولا توجد حاويات مدرجة حاليًا.`},network:{title:`الشبكة`,description:`الواجهات والعناوين وعدادات حركة مرور Linux المرئية لوقت التشغيل.`,internal:`داخلي`,empty:`لا توجد واجهات شبكة مرئية لوقت تشغيل التطبيق.`},securityNote:`هذه الصفحة مخصصة للمسؤولين فقط. يُرجع الخادم ملخصات تشغيلية فقط: فهو لا يكشف متغيرات البيئة، أو بيانات الاعتماد، أو تسميات Docker، أو التثبيتات، أو أوامر الحاوية، أو حمولات الفحص. عندما يعمل Libre WebUI في حاوية، تأتي تفاصيل CPU والذاكرة على مستوى المضيف من Docker Engine عندما يكون مقبسه المحلي متاحًا؛ تصف القيم الأخرى وقت تشغيل التطبيق.`,work:{title:`Work`,description:`بيئات معزولة لجميع المستخدمين`,access:`الوصول`,accessAdmins:`المسؤولون فقط`,accessAllUsers:`جميع المستخدمين`,runtimeAvailable:`متاح`,runtimeUnavailable:`غير متاح`,activeRuntimes:`بيئات التشغيل النشطة`,pendingCleanups:`عمليات تنظيف معلقة`,orphans:`حاويات يتيمة`,owner:`المالك`,task:`المهمة`,state:`الحالة`,preview:`المعاينة`,terminals:`الطرفيات`,updated:`آخر تحديث`,stateRunning:`قيد التشغيل`,stateStopped:`متوقف`,stateStarting:`قيد البدء`,stateUnknown:`غير معروف`,noTasks:`لا توجد مهام Work بعد.`}},mediaGeneration:{title:`توليد الوسائط`,description:`أنشئ فيديو أو صوتًا أو موسيقى أو كلامًا باستخدام مزود وسائط مُفعّل.`,image:`صورة`,video:`فيديو`,audio:`صوت`,sound:`صوت`,speech:`كلام`,model:`النموذج`,voice:`الصوت أو معرف الصوت`,resolution:`الدقة`,aspectRatio:`نسبة العرض إلى الارتفاع`,duration:`المدة`,providerDefault:`افتراضي للمزود`,generateAudio:`توليد صوت مع الفيديو عند الدعم`,prompt:`المطالبة`,text:`النص للتحدث`,videoPlaceholder:`صف المشهد، والحركة، والكاميرا، والإضاءة...`,audioPlaceholder:`أدخل النص الذي تريد للصوت أن ينطقه...`,soundPlaceholder:`صف الصوت، أو الموسيقى، أو الأجواء، أو الاستجابة المنطوقة التي تريدها...`,generate:`توليد`,generating:`جارٍ التوليد… قد يستغرق هذا عدة دقائق`,success:`تم توليد الوسائط وحفظها في Imagine`,failed:`فشل توليد الوسائط`,loadFailed:`فشل تحميل مزودي الوسائط`,noModels:`لا تتوفر نماذج {{kind}}. قم بتفعيل مزود متوافق واحفظ بيانات اعتماده أولاً.`},mediaGallery:{itemCount:`{{count}} عناصر`,empty:`لا توجد وسائط مولدة بعد`,emptyHint:`قم بتوليد صورة أو فيديو أو مقطع صوتي وسيظهر هنا.`,filters:{all:`الكل`,image:`الصور`,video:`مقاطع الفيديو`,audio:`الصوت`}},whatsNew:{title:`ما الجديد`,releaseNotes:`ملاحظات الإصدار`,cta:`حسنًا، هيا بنا`},notes:{title:`الملاحظات`,new:`ملاحظة جديدة`,untitled:`بدون عنوان`,empty:`لا توجد ملاحظات بعد`,selectOrCreate:`اختر ملاحظة أو أنشئ واحدة جديدة`,contentPlaceholder:`اكتب بصيغة ماركداون…`,saved:`تم الحفظ`,saveFailed:`تعذر حفظ الملاحظة`,createFailed:`تعذر إنشاء ملاحظة`,deleteConfirm:`حذف هذه الملاحظة؟`,deleteFailed:`تعذر حذف الملاحظة`}};export{e as default};