libre-webui 0.14.3 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +117 -33
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +84 -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 +99 -35
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/middleware/auth.d.ts.map +1 -1
  9. package/backend/dist/middleware/auth.js +27 -2
  10. package/backend/dist/middleware/auth.js.map +1 -1
  11. package/backend/dist/routes/plugins.d.ts.map +1 -1
  12. package/backend/dist/routes/plugins.js +1 -1
  13. package/backend/dist/routes/plugins.js.map +1 -1
  14. package/backend/dist/routes/users.d.ts.map +1 -1
  15. package/backend/dist/routes/users.js +40 -6
  16. package/backend/dist/routes/users.js.map +1 -1
  17. package/backend/dist/routes/work.d.ts +3 -0
  18. package/backend/dist/routes/work.d.ts.map +1 -0
  19. package/backend/dist/routes/work.js +604 -0
  20. package/backend/dist/routes/work.js.map +1 -0
  21. package/backend/dist/services/ollamaService.d.ts +7 -2
  22. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  23. package/backend/dist/services/ollamaService.js +8 -8
  24. package/backend/dist/services/ollamaService.js.map +1 -1
  25. package/backend/dist/services/pluginService.d.ts.map +1 -1
  26. package/backend/dist/services/pluginService.js +15 -15
  27. package/backend/dist/services/pluginService.js.map +1 -1
  28. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  29. package/backend/dist/services/preferencesService.js +1 -0
  30. package/backend/dist/services/preferencesService.js.map +1 -1
  31. package/backend/dist/services/workAgentGuidance.d.ts +24 -0
  32. package/backend/dist/services/workAgentGuidance.d.ts.map +1 -0
  33. package/backend/dist/services/workAgentGuidance.js +131 -0
  34. package/backend/dist/services/workAgentGuidance.js.map +1 -0
  35. package/backend/dist/services/workAgentService.d.ts +33 -0
  36. package/backend/dist/services/workAgentService.d.ts.map +1 -0
  37. package/backend/dist/services/workAgentService.js +935 -0
  38. package/backend/dist/services/workAgentService.js.map +1 -0
  39. package/backend/dist/services/workEventService.d.ts +40 -0
  40. package/backend/dist/services/workEventService.d.ts.map +1 -0
  41. package/backend/dist/services/workEventService.js +324 -0
  42. package/backend/dist/services/workEventService.js.map +1 -0
  43. package/backend/dist/services/workModelProviderService.d.ts +51 -0
  44. package/backend/dist/services/workModelProviderService.d.ts.map +1 -0
  45. package/backend/dist/services/workModelProviderService.js +952 -0
  46. package/backend/dist/services/workModelProviderService.js.map +1 -0
  47. package/backend/dist/services/workRuntimeService.d.ts +143 -0
  48. package/backend/dist/services/workRuntimeService.d.ts.map +1 -0
  49. package/backend/dist/services/workRuntimeService.js +1860 -0
  50. package/backend/dist/services/workRuntimeService.js.map +1 -0
  51. package/backend/dist/services/workTaskService.d.ts +96 -0
  52. package/backend/dist/services/workTaskService.d.ts.map +1 -0
  53. package/backend/dist/services/workTaskService.js +718 -0
  54. package/backend/dist/services/workTaskService.js.map +1 -0
  55. package/backend/dist/types/index.d.ts +3 -0
  56. package/backend/dist/types/index.d.ts.map +1 -1
  57. package/backend/dist/types/index.js.map +1 -1
  58. package/backend/dist/types/work.d.ts +209 -0
  59. package/backend/dist/types/work.d.ts.map +1 -0
  60. package/backend/dist/types/work.js +18 -0
  61. package/backend/dist/types/work.js.map +1 -0
  62. package/backend/dist/utils/ollamaLibrary.d.ts.map +1 -1
  63. package/backend/dist/utils/ollamaLibrary.js +81 -8
  64. package/backend/dist/utils/ollamaLibrary.js.map +1 -1
  65. package/backend/dist/utils/pluginChatAdapter.d.ts +9 -0
  66. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  67. package/backend/dist/utils/pluginChatAdapter.js +32 -6
  68. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  69. package/backend/dist/utils/pluginStreamAdapter.d.ts +12 -0
  70. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
  71. package/backend/dist/utils/pluginStreamAdapter.js +168 -19
  72. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
  73. package/backend/dist/utils/pluginStreaming.d.ts +10 -0
  74. package/backend/dist/utils/pluginStreaming.d.ts.map +1 -1
  75. package/backend/dist/utils/pluginStreaming.js.map +1 -1
  76. package/backend/dist/utils/pluginValidation.d.ts +1 -0
  77. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  78. package/backend/dist/utils/pluginValidation.js +3 -0
  79. package/backend/dist/utils/pluginValidation.js.map +1 -1
  80. package/backend/package.json +1 -1
  81. package/electron/main.js +39 -16
  82. package/frontend/dist/assets/index-DkShhNBf.js +5 -0
  83. package/frontend/dist/assets/index-bdSWBsAM.css +1 -0
  84. package/frontend/dist/index.html +5 -4
  85. package/frontend/dist/js/{ArtifactContainer-CuvIIoHC.js → ArtifactContainer-BHSBrlQB.js} +1 -1
  86. package/frontend/dist/js/{ArtifactDemoPage-DI0QzAee.js → ArtifactDemoPage-BHGJmJAT.js} +1 -1
  87. package/frontend/dist/js/ArtifactSlideOutPanel-s8vcE5Ea.js +1 -0
  88. package/frontend/dist/js/ChatPage-B6Hm_pdu.js +16 -0
  89. package/frontend/dist/js/FirstTimeSetup-BYWAVAdE.js +1 -0
  90. package/frontend/dist/js/GalleryPage-CH4f65q8.js +1 -0
  91. package/frontend/dist/js/LibreClawPage-CcH7M3mJ.js +1 -0
  92. package/frontend/dist/js/{ModelManagerModals-DfgizeSq.js → ModelManagerModals-DltRprHU.js} +1 -1
  93. package/frontend/dist/js/ModelSelector-T1KZtIde.js +1 -0
  94. package/frontend/dist/js/ModelsPage-C1bM_Yoc.js +2 -0
  95. package/frontend/dist/js/PersonasPage-T_PrhnPG.js +13 -0
  96. package/frontend/dist/js/RichMessageContent-BdU5vXz9.js +3 -0
  97. package/frontend/dist/js/SettingsModal-BVj-D1L4.js +1 -0
  98. package/frontend/dist/js/UserManagementPage-Pix71oRW.js +1 -0
  99. package/frontend/dist/js/WorkPage-DdOVGyj_.js +2 -0
  100. package/frontend/dist/js/api-Do6u0tMM.js +19 -0
  101. package/frontend/dist/js/{ar-UnnZB1Qy.js → ar-KceI0PfT.js} +2 -2
  102. package/frontend/dist/js/babel-BnLuavNv.js +16 -0
  103. package/frontend/dist/js/{bn-uZXaDyeV.js → bn-DsKo2dzS.js} +2 -2
  104. package/frontend/dist/js/{cs-CCXlnUEB.js → cs-6UKhKj0A.js} +2 -2
  105. package/frontend/dist/js/{da--BpVVGPp.js → da-CJgZ3YuL.js} +2 -2
  106. package/frontend/dist/js/{de-DZd9lsBc.js → de-BZAmOuCT.js} +2 -2
  107. package/frontend/dist/js/{es-Bm968oUX.js → es-CD4u7no9.js} +2 -2
  108. package/frontend/dist/js/estree-Bu_-Wi6O.js +44 -0
  109. package/frontend/dist/js/fr-Cou2jOS3.js +2 -0
  110. package/frontend/dist/js/{hi-C6kwkL7d.js → hi-ZxkbNCyB.js} +2 -2
  111. package/frontend/dist/js/html-Ca764Rus.js +25 -0
  112. package/frontend/dist/js/{id-CDfqnnXS.js → id-DT9CqaWQ.js} +2 -2
  113. package/frontend/dist/js/{is-Dnd_7Jqv.js → is-BWSbAIoq.js} +2 -2
  114. package/frontend/dist/js/{it-BM0j6_Sz.js → it-CdNoTXm3.js} +2 -2
  115. package/frontend/dist/js/{ja-xGblKDDf.js → ja-CIuQg0xv.js} +2 -2
  116. package/frontend/dist/js/{ko-CQ2d_Oj0.js → ko-BWRUjDOH.js} +2 -2
  117. package/frontend/dist/js/markdown-DaiQGPEs.js +70 -0
  118. package/frontend/dist/js/{ms-CFpRuv_a.js → ms-gJstIj2a.js} +2 -2
  119. package/frontend/dist/js/{nl-D6oTztmP.js → nl-CydjVNUw.js} +2 -2
  120. package/frontend/dist/js/{pl-ByuvABul.js → pl-DPN9mAa5.js} +2 -2
  121. package/frontend/dist/js/postcss-DSDkwgFE.js +62 -0
  122. package/frontend/dist/js/{pt-CNFV21T7.js → pt-MRXGqIjQ.js} +2 -2
  123. package/frontend/dist/js/router-vendor-BjDI9mRe.js +1 -0
  124. package/frontend/dist/js/{ru-CRsSOntz.js → ru-CvQ9GkJF.js} +2 -2
  125. package/frontend/dist/js/standalone-DWWnsbIr.js +29 -0
  126. package/frontend/dist/js/{sv-BRkwjyS5.js → sv-BxS2fvhU.js} +2 -2
  127. package/frontend/dist/js/{th-DigqsQEB.js → th-DMxyn6e4.js} +2 -2
  128. package/frontend/dist/js/{tr-B5aMUMJE.js → tr-BTPldUaA.js} +2 -2
  129. package/frontend/dist/js/typescript-CatjJeHm.js +22 -0
  130. package/frontend/dist/js/ui-vendor-CAFEDSaO.js +177 -0
  131. package/frontend/dist/js/{uk-BUYi3llT.js → uk-BGxZOKgp.js} +2 -2
  132. package/frontend/dist/js/useBaseQuery-CVNuhuID.js +1 -0
  133. package/frontend/dist/js/useQuery-CYhC_da4.js +1 -0
  134. package/frontend/dist/js/{vi-hQIcXi3m.js → vi-82JkwFsQ.js} +2 -2
  135. package/frontend/dist/js/yaml-mLy9chOK.js +154 -0
  136. package/frontend/dist/js/{zh-CUDZ3JDv.js → zh-Bxxfwci3.js} +2 -2
  137. package/package.json +4 -2
  138. package/plugins/kimi-code.json +6 -37
  139. package/plugins/mlx-lm.json +55 -0
  140. package/frontend/dist/assets/index-BKzwVaAM.js +0 -16
  141. package/frontend/dist/assets/index-BPvF-fpc.css +0 -1
  142. package/frontend/dist/js/ArtifactSlideOutPanel-BzBemzHy.js +0 -1
  143. package/frontend/dist/js/ChatPage-DqpXctC2.js +0 -16
  144. package/frontend/dist/js/FirstTimeSetup-DRWeCsVI.js +0 -1
  145. package/frontend/dist/js/GalleryPage-CgD8fVx0.js +0 -1
  146. package/frontend/dist/js/LibreClawPage-B_Yon2fQ.js +0 -1
  147. package/frontend/dist/js/ModelsPage-CAKQ7J-b.js +0 -2
  148. package/frontend/dist/js/PersonasPage-Dj6Bka4I.js +0 -13
  149. package/frontend/dist/js/RichMessageContent-DP7XoxIa.js +0 -3
  150. package/frontend/dist/js/SettingsModal-BFyYhZYE.js +0 -1
  151. package/frontend/dist/js/UserManagementPage-CGMnhZr1.js +0 -1
  152. package/frontend/dist/js/fr-RlC0rD8I.js +0 -2
  153. package/frontend/dist/js/router-vendor-Bbvzv1ZC.js +0 -1
  154. package/frontend/dist/js/ui-vendor-CurEAeCe.js +0 -177
  155. package/frontend/dist/js/useBaseQuery-B1on3xcz.js +0 -1
  156. package/frontend/dist/js/useQuery-CXvo2RBT.js +0 -1
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/babel-BnLuavNv.js","js/router-vendor-BjDI9mRe.js","js/rolldown-runtime-QTnfLwEv.js","js/markdown-core-GI9BPwrB.js","js/estree-Bu_-Wi6O.js","assets/index-DkShhNBf.js","js/react-vendor-DyG_ODzn.js","js/useTranslation-Cs6iTP4m.js","js/ui-vendor-CAFEDSaO.js","js/utils-vendor-Cbaj0BC5.js","js/demoMode-BhEpMVh5.js","js/logger-DbNs3-DK.js","js/api-Do6u0tMM.js","js/utils-pTFqSV8c.js","js/Button-DBk-AREB.js","assets/index-bdSWBsAM.css","js/typescript-CatjJeHm.js","js/postcss-DSDkwgFE.js","js/html-Ca764Rus.js","js/markdown-DaiQGPEs.js","js/yaml-mLy9chOK.js","js/standalone-DWWnsbIr.js","js/OptimizedSyntaxHighlighter-Ci9sRc78.js","js/syntax-highlight-pM1xnNpY.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{d as t,f as n}from"./markdown-core-GI9BPwrB.js";import{d as r,f as i,i as a,l as o,u as s}from"./router-vendor-BjDI9mRe.js";import{t as c}from"./useTranslation-Cs6iTP4m.js";import{At as l,C as u,Et as d,F as f,Gt as p,It as m,J as h,N as g,Nt as _,O as v,Pt as y,Rt as b,T as x,Tt as S,Vt as C,Xt as w,bt as T,h as E,jt as D,lt as ee,n as O,nt as te,o as ne,qt as k,rt as re,tt as ie,u as ae,x as A,xt as oe,yt as se}from"./ui-vendor-CAFEDSaO.js";import{o as ce,s as le}from"./api-Do6u0tMM.js";import{t as j}from"./utils-pTFqSV8c.js";import{t as M}from"./Button-DBk-AREB.js";import{A as ue,F as de,H as N,M as fe,N as pe,O as me,V as P,W as he,j as ge,m as _e,n as ve}from"../assets/index-DkShhNBf.js";import{t as ye}from"./RichMessageContent-BdU5vXz9.js";import{t as be}from"./ModelSelector-T1KZtIde.js";var F=e(n(),1),xe=e=>e.status===`preparing`||e.status===`running`,I=e=>{let t=encodeURIComponent(e.model);return e.providerType===`plugin`?`plugin:${encodeURIComponent(e.providerId||``)}:${t}`:`ollama:${t}`},L=t(),Se=e=>I({model:e.name,providerType:e.isPlugin?`plugin`:`ollama`,providerId:e.isPlugin?e.pluginId:void 0}),R=e=>{let t=e.name.split(`/`).filter(Boolean),n=t[t.length-1]||e.name;return t.length>1?n.replace(/[-_]+/g,` `):n},z=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 Ce({models:e,selectorModels:t,modelKey:n,running:r,loading:i,variant:a=`task`,disabled:o=!1,remoteDisclosureDismissed:s,remoteDisclosureSaving:l,onModelChange:u,onDismissRemoteDisclosure:d,onModelsRefresh:f,onSubmit:p,onCancel:m}){let{t:h}=c(),[g,_]=(0,F.useState)(``),v=(0,F.useRef)(null),y=(0,F.useRef)(null),b=(0,F.useRef)(null),x=e.find(e=>e.key===n),S=x?.remote===!0,w=a===`landing`,T=(0,F.useMemo)(()=>{let n=new Set(t.map(Se)),r=e.filter(e=>!n.has(e.key)).map(z);return[...t,...r]},[e,t]);(0,F.useEffect)(()=>{let e=v.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,160)}px`)},[g]);let D=async()=>{await d()&&([y.current,b.current].find(e=>e&&e.offsetParent!==null)||y.current)?.focus()},ee=t=>{let n=e.find(e=>e.key===t)||e.find(e=>e.providerType===`ollama`&&e.model===t);n&&u(n.key)},te=async()=>{let e=g.trim();!e||i||r||o||!x||await p(e)&&_(``)};return(0,L.jsxs)(`div`,{"data-testid":w?`work-landing-composer`:`work-task-composer`,"data-variant":a,className:j(`relative shrink-0`,w?`mt-10 w-full`:`border-t border-line bg-surface/95 px-3 py-3 backdrop-blur md:px-5`),children:[S&&!s&&(0,L.jsx)(`div`,{className:j(`absolute inset-x-3 z-30 mx-auto max-w-3xl md:inset-x-5`,`bottom-full mb-3`),children:(0,L.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,L.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":h(`work.composer.remoteDismissLabel`,{defaultValue:`Dismiss remote provider notice`}),children:(0,L.jsx)(O,{className:`h-4 w-4`})}),(0,L.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,L.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,L.jsx)(k,{"data-testid":`work-provider-disclosure-accent`,className:`h-4 w-4 text-warning-500`,"aria-hidden":`true`})}),(0,L.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,L.jsx)(`p`,{id:`work-provider-disclosure-title`,className:`text-sm font-semibold text-ink`,children:h(`work.composer.remoteTitle`,{defaultValue:`Remote provider`})}),(0,L.jsx)(`p`,{className:`mt-0.5 text-xs leading-relaxed text-ink-muted`,children:h(`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,L.jsx)(`div`,{className:`mt-2.5 flex justify-end`,children:(0,L.jsx)(M,{"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:h(`work.composer.remoteDismiss`,{defaultValue:`Dismiss`})})})]})]})]})}),(0,L.jsx)(`form`,{className:`mx-auto w-full max-w-3xl`,onSubmit:e=>{e.preventDefault(),te()},children:(0,L.jsxs)(`div`,{"data-testid":`work-composer-surface`,className:j(`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,L.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,L.jsx)(`textarea`,{ref:v,"data-testid":`work-composer-input`,dir:`auto`,value:g,onChange:e=>_(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),te())},disabled:o||r,rows:1,className:`m-0 block max-h-[160px] min-h-10 w-full resize-none overflow-y-auto rounded-none border-0 bg-transparent p-2 text-base leading-relaxed text-ink shadow-none outline-none placeholder:text-ink-subtle focus:border-0 focus:bg-transparent focus:ring-0 disabled:cursor-not-allowed disabled:opacity-60`,placeholder:h(`work.composer.placeholder`,{defaultValue:`Describe what you want to build or change…`})})}),(0,L.jsx)(`div`,{className:`hidden shrink-0 sm:block`,children:(0,L.jsx)(be,{models:T,selectedModel:n,onModelChange:e=>ee(e.target.value),onModelsRefresh:()=>void f(),getModelValue:Se,getModelLabel:R,getModelTitle:e=>e.name,triggerRef:y,triggerTestId:`work-model-selector-trigger`,selectTestId:`work-model-select`,ariaLabel:h(`work.composer.model`,{defaultValue:`Work model`}),disabled:r||e.length===0,className:`min-w-[150px] max-w-[230px]`,compact:!0})}),r?(0,L.jsx)(M,{"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:h(`work.composer.cancel`,{defaultValue:`Stop`}),"aria-label":h(`work.composer.cancel`,{defaultValue:`Stop`}),onClick:()=>void m(),children:i?(0,L.jsx)(C,{className:`h-4 w-4 animate-spin`}):(0,L.jsx)(E,{className:`h-4 w-4 fill-current`})}):(0,L.jsx)(M,{"data-testid":`work-submit-button`,type:`submit`,variant:`ghost`,size:`sm`,disabled:i||o||!g.trim()||!x,className:j(`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`,g.trim()&&x&&!o&&`shadow-sm`),title:h(`work.composer.send`,{defaultValue:`Run`}),"aria-label":h(`work.composer.send`,{defaultValue:`Run`}),children:i?(0,L.jsx)(C,{className:`h-4 w-4 animate-spin`}):(0,L.jsx)(A,{className:`h-4 w-4`})})]})}),(0,L.jsx)(`div`,{className:`mx-auto mt-3 w-full max-w-3xl sm:hidden`,children:(0,L.jsx)(be,{models:T,selectedModel:n,onModelChange:e=>ee(e.target.value),onModelsRefresh:()=>void f(),getModelValue:Se,getModelLabel:R,getModelTitle:e=>e.name,triggerRef:b,triggerTestId:`work-model-selector-trigger-mobile`,selectTestId:`work-model-select-mobile`,ariaLabel:h(`work.composer.model`,{defaultValue:`Work model`}),disabled:r||e.length===0,className:`w-full`,compact:!0})})]})}var we=e=>{if(e==null||e===``)return null;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}},Te=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`},Ee=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 B({run:e}){let[t,n]=(0,F.useState)();if((0,F.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,L.jsx)(`span`,{dir:`ltr`,className:`tabular-nums text-ink-subtle`,"aria-hidden":`true`,children:Te(r-e.startedAt)}):null}function De({tool:e,expandedByDefault:t}){let{t:n}=c(),[r]=(0,F.useState)(e.status),[i,a]=(0,F.useState)(null),o=(0,F.useMemo)(()=>we(e.arguments),[e.arguments]),s=e.output||null,l=!!(o||s),u=e.status===`error`,d=e.status===`running`,f=(0,F.useId)(),p=u?n(`work.activity.kinds.error`,{defaultValue:`Error`}):d?n(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}):n(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),m=i??(e.status===r?t:e.status===`error`);return(0,L.jsxs)(`div`,{"data-testid":`work-live-tool`,"data-tool-id":e.id,className:j(`overflow-hidden rounded-xl border bg-surface-raised transition-colors`,u?`border-error-500/30`:`border-line`),children:[(0,L.jsxs)(`button`,{type:`button`,disabled:!l,onClick:()=>{a(!m)},"aria-expanded":l?m:void 0,"aria-controls":l?f:void 0,"aria-label":`${p}: ${e.name}`,className:`flex min-h-10 w-full items-center gap-2 px-3 py-2 text-start outline-none hover:bg-surface-subtle focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-[#ff7b52] disabled:cursor-default disabled:hover:bg-transparent`,children:[(0,L.jsx)(`span`,{className:`flex h-5 w-5 shrink-0 items-center justify-center`,children:u?(0,L.jsx)(k,{className:`h-3.5 w-3.5 text-error-500`}):d?(0,L.jsx)(C,{className:`h-3.5 w-3.5 animate-spin text-[rgb(48,121,255)] motion-reduce:animate-none`}):(0,L.jsx)(oe,{className:`h-3.5 w-3.5 text-[rgb(76,212,117)]`})}),(0,L.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,L.jsx)(`span`,{className:`shrink-0 text-[10px] tabular-nums text-ink-subtle`,children:Te(e.durationMs)}),l&&(0,L.jsx)(T,{"aria-hidden":`true`,className:j(`h-3.5 w-3.5 shrink-0 text-ink-subtle transition-transform`,m&&`rotate-180`)})]}),l&&m&&(0,L.jsxs)(`div`,{id:f,className:`border-t border-line bg-surface-subtle/50`,children:[o&&(0,L.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,L.jsx)(`pre`,{dir:`ltr`,className:j(`max-h-64 overflow-auto whitespace-pre-wrap break-words border-t border-line px-3 py-2.5 text-left font-mono text-[11px] leading-relaxed`,u?`text-error-600`:`text-ink-muted`),children:s})]})]})}function V({content:e,streaming:t}){let{t:n}=c(),[r,i]=(0,F.useState)(!0);return(0,L.jsxs)(`details`,{"data-testid":`work-live-reasoning`,open:r,onToggle:e=>i(e.currentTarget.open),className:`group mb-3 overflow-hidden rounded-xl border border-line bg-surface-subtle/70`,children:[(0,L.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,L.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,L.jsx)(S,{className:`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`}),(0,L.jsxs)(`span`,{className:`truncate`,children:[n(`libreClaw.metrics.provider`,{defaultValue:`Provider`}),` ·`,` `,n(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})]})]}),(0,L.jsx)(T,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),(0,L.jsx)(`div`,{className:`border-t border-line px-3 py-2.5`,children:(0,L.jsx)(_e,{content:e,isStreaming:t,className:`text-xs text-ink-muted`})})]})}var Oe=(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`}),ke=(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 Ae({run:e,variant:t=`conversation`}){let{t:n}=c(),r=[...e.tools].reverse().find(e=>e.status===`running`),i=ke(e.connection,n)||Oe(e.phase,n,r),a=!e.terminal,o=e.usage?.outputTokens,s=e.reasoning+e.response,l=o!==void 0&&o>0?o:s?Ee(s):o,u=(o===void 0||o===0)&&!!s&&l!==void 0,d=e.usage?.tokensPerSecond;return(0,L.jsxs)(`section`,{"data-testid":`work-live-run`,"data-run-id":e.runId,"data-phase":e.phase,"aria-busy":a||void 0,className:j(`min-w-0`,t===`activity`&&`rounded-2xl border border-line bg-surface p-3 shadow-subtle`),children:[(0,L.jsxs)(`div`,{className:`mb-3 flex min-h-6 items-center gap-2 text-xs`,children:[(0,L.jsx)(`span`,{"aria-hidden":`true`,className:j(`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,L.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,L.jsx)(`span`,{dir:`ltr`,className:`shrink-0 tabular-nums text-ink-subtle`,children:e.roundLimit===void 0?`#${e.round}`:`${e.round}/${e.roundLimit}`}),(0,L.jsx)(B,{run:e})]}),t===`conversation`&&(0,L.jsx)(`span`,{className:`sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:i}),e.skills.length>0&&(0,L.jsx)(`div`,{className:`mb-3 flex flex-wrap gap-1.5`,children:(0,L.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,L.jsx)(b,{className:`h-3 w-3 text-[#ff7b52]`,"aria-hidden":`true`}),(0,L.jsx)(`span`,{dir:`auto`,children:n(`work.live.skillsLoaded`,{count:e.skills.length,defaultValue:`Workspace skills · {{count}}`})})]})}),e.reasoning&&(0,L.jsx)(V,{content:e.reasoning,streaming:a&&e.phase!==`responding`}),e.tools.length>0&&(0,L.jsx)(`div`,{"data-testid":`work-live-tools`,className:j(`mb-3 space-y-1.5`,t===`activity`&&`mb-0`),children:e.tools.map(e=>(0,L.jsx)(De,{tool:e,expandedByDefault:e.status===`running`||e.status===`error`},e.id))}),t===`conversation`&&e.response&&(0,L.jsx)(_e,{content:e.response,isStreaming:a,className:`text-ink`}),e.error&&(0,L.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,L.jsx)(k,{className:`mt-0.5 h-3.5 w-3.5 shrink-0`}),(0,L.jsx)(`span`,{children:e.error})]}),(l!==void 0||d!==void 0)&&(0,L.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,L.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.generatedTokens`,{defaultValue:`Generated tokens:`}),` `,(0,L.jsxs)(`bdi`,{dir:`ltr`,children:[u&&`≈`,l.toLocaleString()]})]}),d!==void 0&&(0,L.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.speed`,{defaultValue:`Speed:`}),` `,(0,L.jsxs)(`bdi`,{dir:`ltr`,children:[d.toFixed(1),` t/s`]})]})]}),a&&!e.reasoning&&!e.response&&e.tools.length===0&&(0,L.jsxs)(`div`,{"aria-hidden":`true`,className:`flex h-5 items-center gap-1 text-[rgb(48,121,255)]`,children:[(0,L.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current motion-reduce:animate-none`}),(0,L.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current [animation-delay:160ms] motion-reduce:animate-none`}),(0,L.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,L.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-ink-muted`,children:[(0,L.jsx)(m,{className:`h-3.5 w-3.5`}),n(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]})]})}function je({role:e,user:t,size:n=`message`}){let[r,i]=(0,F.useState)(null);if(e===`assistant`)return(0,L.jsx)(`div`,{role:`img`,"aria-label":`Libre WebUI`,"data-testid":`work-assistant-avatar`,className:j(`flex shrink-0 items-center justify-center rounded-full border border-line bg-surface-raised shadow-subtle`,n===`empty`?`mx-auto mb-4 h-12 px-3`:`mt-0.5 h-8 px-2`),children:(0,L.jsx)(`span`,{"aria-hidden":`true`,className:j(`libre-brand text-ink`,n===`empty`?`text-sm`:`text-[11px]`),children:`Libre`})});let a=t?.username||`User`,o=t?.avatar?.trim()||``,s=!!o&&o!==r;return(0,L.jsx)(`div`,{role:s?void 0:`img`,"aria-label":s?void 0:a,"data-testid":`work-user-avatar`,className:j(`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,L.jsx)(`img`,{src:o,alt:a,className:`h-full w-full object-cover`,onError:()=>i(o)}):t?(0,L.jsx)(`span`,{"aria-hidden":`true`,className:`text-xs font-medium uppercase leading-none`,children:t.username.charAt(0)}):(0,L.jsx)(ne,{"aria-hidden":`true`,className:`h-4 w-4`})})}var Me=e=>{if(!e||Object.keys(e).length===0)return null;try{return JSON.stringify(e,null,2)}catch{return null}},H=(e,t)=>{let n=e.metadata,r=n?.name??n?.toolName??n?.tool??n?.command;return typeof r==`string`&&r?r:t};function Ne({message:e}){let{t}=c();return(0,L.jsxs)(`details`,{"data-testid":`work-provider-reasoning`,className:`group ms-14 overflow-hidden rounded-xl border border-line bg-surface-subtle/70`,children:[(0,L.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,L.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,L.jsx)(S,{className:`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`}),(0,L.jsxs)(`span`,{className:`truncate`,children:[t(`libreClaw.metrics.provider`,{defaultValue:`Provider`}),` ·`,` `,t(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})]})]}),(0,L.jsx)(T,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),(0,L.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 Pe({message:e}){let{t}=c(),n=Me(e.metadata),r=e.kind===`error`,i={message:t(`work.activity.kinds.message`,{defaultValue:`Message`}),reasoning:t(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`}),tool_call:t(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}),tool_result:t(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),error:t(`work.activity.kinds.error`,{defaultValue:`Error`})}[e.kind];return(0,L.jsxs)(`div`,{className:j(`rounded-xl border bg-surface-subtle`,r?`border-error-500/30`:`border-line`),children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-line px-3 py-2`,children:[r?(0,L.jsx)(k,{className:`h-4 w-4 text-error-500`}):(0,L.jsx)(m,{className:`h-4 w-4 text-ink-muted`}),(0,L.jsx)(`span`,{dir:`auto`,className:`min-w-0 flex-1 truncate font-mono text-xs font-medium text-ink`,children:H(e,t(`work.activity.toolActivity`,{defaultValue:`Tool activity`}))}),(0,L.jsx)(`span`,{className:`rounded-md bg-surface-raised px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-ink-muted rtl:tracking-normal`,children:i})]}),e.content&&(0,L.jsx)(`pre`,{dir:`ltr`,className:`max-h-56 overflow-auto whitespace-pre-wrap break-words px-3 py-2.5 text-left font-mono text-xs leading-relaxed text-ink-muted`,children:e.content}),n&&(0,L.jsxs)(`details`,{className:`border-t border-line px-3 py-2`,children:[(0,L.jsx)(`summary`,{className:`cursor-pointer text-[11px] font-medium text-ink-muted`,children:t(`work.activity.details`,{defaultValue:`Details`})}),(0,L.jsx)(`pre`,{dir:`ltr`,className:`mt-2 max-h-48 overflow-auto whitespace-pre-wrap break-all text-left font-mono text-[11px] text-ink-muted`,children:n})]})]})}function Fe({task:e,user:t,loading:n,loadingOlder:r,liveRun:i,onLoadOlder:a}){let{t:o}=c(),s=(0,F.useRef)(null),l=(0,F.useRef)(!0),[u,d]=(0,F.useState)(!1),f=(0,F.useMemo)(()=>[...e.messages||[]].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id)),[e.messages]),p=[...f].reverse().find(e=>e.role===`assistant`&&e.kind===`message`)?.id;(0,F.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,F.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 m=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,L.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center text-ink-muted`,children:(0,L.jsx)(C,{className:`h-6 w-6 animate-spin`})}):(0,L.jsxs)(`div`,{className:`relative flex min-h-0 flex-1`,children:[(0,L.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,L.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,L.jsxs)(`div`,{className:`m-auto max-w-md text-center`,children:[(0,L.jsx)(je,{role:`assistant`,size:`empty`}),(0,L.jsx)(`h2`,{className:`text-lg font-semibold tracking-tight text-ink`,children:o(`work.conversation.ready`,{defaultValue:`Workspace ready`})}),(0,L.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,L.jsxs)(`div`,{className:`space-y-6`,children:[e.hasMoreMessages&&(0,L.jsx)(`div`,{className:`flex justify-center`,children:(0,L.jsxs)(`button`,{type:`button`,"data-testid":`work-load-older-messages`,disabled:r,onClick:()=>void m(),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,L.jsx)(C,{className:`h-3.5 w-3.5 animate-spin`}),o(`work.conversation.loadOlder`,{defaultValue:`Load older messages`})]})}),f.map(n=>{if(i&&n.runId===i.runId&&n.role!==`user`)return null;if(n.kind===`reasoning`)return(0,L.jsx)(Ne,{message:n},n.id);if(n.role===`tool`||n.kind!==`message`)return(0,L.jsx)(Pe,{message:n},n.id);let r=n.role===`user`,a=!r&&e.status===`running`&&n.id===p&&n.runId===e.activeRun?.id;return(0,L.jsxs)(`article`,{className:j(`flex gap-3`,r&&`flex-row-reverse`),children:[(0,L.jsx)(je,{role:r?`user`:`assistant`,user:r?t:void 0}),(0,L.jsx)(`div`,{className:j(`min-w-0 max-w-[88%]`,r&&`rounded-2xl rounded-se-md bg-ink px-4 py-2.5 text-ink-inverse`),children:r?(0,L.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap break-words text-sm leading-relaxed`,children:n.content}):a?(0,L.jsx)(_e,{content:n.content,className:`text-ink`}):(0,L.jsx)(ye,{content:n.content,className:`text-sm text-ink`})})]},n.id)}),i&&(0,L.jsxs)(`article`,{className:`flex gap-3`,"data-testid":`work-live-run-message`,children:[(0,L.jsx)(je,{role:`assistant`}),(0,L.jsx)(`div`,{className:`min-w-0 max-w-[92%] flex-1`,children:(0,L.jsx)(Ae,{run:i})})]}),!i&&(e.status===`preparing`||e.status===`running`)&&(0,L.jsxs)(`div`,{className:`flex items-center gap-2 ps-14 text-xs text-ink-muted`,children:[(0,L.jsx)(C,{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,L.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,L.jsx)(D,{className:`h-3.5 w-3.5`}),o(`work.live.newActivity`,{defaultValue:`New activity`})]})]})}var U=45,Ie=30,W=70,G=360,K=480,q=9,Le=2,Re=10,ze=`libre-webui-work-split:`,Be=(e,t,n)=>Math.min(n,Math.max(t,e)),Ve=e=>`${ze}${encodeURIComponent(e||`local`)}`,He=e=>{if(typeof window>`u`)return U;try{let t=window.localStorage.getItem(e);if(t===null||t.trim()===``)return U;let n=Number(t);return Number.isFinite(n)?Be(n,Ie,W):U}catch{return U}},Ue=(e,t)=>{if(!(typeof window>`u`))try{window.localStorage.setItem(e,t.toFixed(2))}catch{}},We=e=>{let t=Math.max(0,e-q);if(t===0)return{min:Ie,max:W};let n=Math.max(Ie,G/t*100),r=Math.min(W,(t-K)/t*100);if(n<=r)return{min:n,max:r};let i=Be(G/840*100,Ie,W);return{min:i,max:i}},J=(e,t)=>Be(e,t.min,t.max);function Ge({conversation:e,workspace:t,userId:n,mobileSurface:r=`conversation`,className:i}){let{t:a,i18n:o}=c(),s=he(o.language),l=Ve(n),[u,d]=(0,F.useState)(()=>({storageKey:l,percent:He(l)})),[f,p]=(0,F.useState)(0),[m,h]=(0,F.useState)(!1),g=(0,F.useRef)(null),_=(0,F.useRef)(null),v=(0,F.useRef)(null),y=(0,F.useRef)(l),b=(0,F.useRef)(u.percent),x=(0,F.useRef)(null),S=u.storageKey===l?u.percent:He(l),C=(0,F.useMemo)(()=>We(f),[f]),w=J(S,C),T=Math.round(w),E=100-T,D=(0,F.useCallback)(e=>{d({storageKey:l,percent:e})},[l]),ee=(0,F.useCallback)(e=>{b.current=J(e,We(g.current?.getBoundingClientRect().width??0)),x.current===null&&(x.current=window.requestAnimationFrame(()=>{x.current=null,D(b.current)}))},[D]),O=(0,F.useCallback)(()=>{if(v.current===null&&!m)return;x.current!==null&&(window.cancelAnimationFrame(x.current),x.current=null);let e=g.current?.getBoundingClientRect().width??0,t=J(b.current,We(e));b.current=t,D(t),Ue(y.current,t);let n=v.current;v.current=null,n!==null&&_.current?.hasPointerCapture(n)&&_.current.releasePointerCapture(n),h(!1)},[m,D]),te=(0,F.useCallback)(e=>{let t=g.current?.getBoundingClientRect();if(!t)return b.current;let n=Math.max(1,t.width-q);return((s?t.right-e:e-t.left)-q/2)/n*100},[s]),ne=e=>{e.button!==0||!e.isPrimary||(e.preventDefault(),e.stopPropagation(),v.current=e.pointerId,y.current=l,b.current=w,e.currentTarget.setPointerCapture(e.pointerId),h(!0))},k=(0,F.useCallback)(e=>{let t=J(e,C);b.current=t,D(t),Ue(l,t)},[C,D,l]),re=(0,F.useCallback)(()=>{k(U)},[k]),ie=e=>{let t=e.shiftKey?Re:Le,n=null;e.key===`ArrowLeft`?n=w+(s?t:-t):e.key===`ArrowRight`?n=w+(s?-t:t):e.key===`Home`?n=C.min:e.key===`End`?n=C.max:e.key===`Enter`&&(n=U),n!==null&&(e.preventDefault(),k(n))};(0,F.useEffect)(()=>{let e=g.current;if(!e)return;if(typeof ResizeObserver>`u`){let t=()=>p(e.getBoundingClientRect().width);return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)}let t=new ResizeObserver(e=>{let t=e[0];t&&p(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]),(0,F.useEffect)(()=>{if(!m)return;let e=document.body.style.cursor,t=document.body.style.userSelect;document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`;let n=e=>{e.pointerId===v.current&&(e.preventDefault(),ee(te(e.clientX)))},r=e=>{e.pointerId===v.current&&O()};return window.addEventListener(`pointermove`,n,{passive:!1}),window.addEventListener(`pointerup`,r),window.addEventListener(`pointercancel`,r),window.addEventListener(`blur`,O),()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r),window.removeEventListener(`pointercancel`,r),window.removeEventListener(`blur`,O),document.body.style.cursor=e,document.body.style.userSelect=t}},[O,m,te,ee]),(0,F.useEffect)(()=>()=>{x.current!==null&&window.cancelAnimationFrame(x.current),v.current!==null&&Ue(y.current,b.current)},[]);let ae={gridTemplateColumns:`minmax(0, ${w}fr) ${q}px minmax(0, ${100-w}fr)`};return(0,L.jsxs)(`div`,{ref:g,"data-testid":`work-split-pane`,"data-split-percent":w.toFixed(2),"data-resizing":m?`true`:`false`,className:j(`relative flex min-h-0 min-w-0 flex-1 overflow-hidden xl:grid`,i),style:ae,children:[(0,L.jsx)(`section`,{id:`work-conversation-panel`,"data-testid":`work-conversation-panel`,className:j(`min-h-0 min-w-0 flex-1 flex-col bg-surface xl:flex`,r===`conversation`?`flex`:`hidden`),children:e}),(0,L.jsxs)(`div`,{ref:_,role:`separator`,"aria-orientation":`vertical`,"aria-controls":`work-conversation-panel work-workspace-panel`,"aria-label":a(`work.workspace.resize`,{defaultValue:`Resize conversation and workspace`}),"aria-valuemin":Math.round(C.min),"aria-valuemax":Math.round(C.max),"aria-valuenow":T,"aria-valuetext":a(`work.workspace.splitSize`,{conversation:T,workspace:E,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:ne,onDoubleClick:re,onKeyDown:ie,className:j(`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,L.jsx)(`span`,{"aria-hidden":`true`,className:j(`pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-line transition-colors`,`group-hover:bg-[#ff7b52] group-focus-visible:bg-[#ff7b52]`,m&&`bg-[#ff7b52]`)}),(0,L.jsx)(`span`,{"aria-hidden":`true`,className:j(`pointer-events-none relative h-14 w-1 rounded-full bg-ink-subtle/50 opacity-60 transition-[height,background-color,opacity]`,`group-hover:h-20 group-hover:bg-[#ff7b52] group-hover:opacity-100`,`group-focus-visible:h-20 group-focus-visible:bg-[#ff7b52] group-focus-visible:opacity-100`,m&&`h-20 bg-[#ff7b52] opacity-100`)})]}),(0,L.jsx)(`section`,{id:`work-workspace-panel`,"data-testid":`work-workspace-panel`,className:j(`min-h-0 min-w-0 flex-1 flex-col bg-surface-raised xl:flex`,r===`workspace`?`flex`:`hidden`),children:t}),m&&(0,L.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 Ke=1e5,qe=4e3,Je={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`},Y={".bashrc":`bash`,".zshrc":`bash`},Ye={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`}},Xe=e=>e.split(/[\\/]/).pop()?.toLowerCase()??``,Ze=e=>{let t=Xe(e),n=t.lastIndexOf(`.`);return n>-1?t.slice(n+1):``},Qe=e=>Y[Xe(e)]??Je[Ze(e)]??`text`,$e=e=>Ye[Ze(e)],et=e=>$e(e)!==void 0,tt=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},X=async e=>(await e).default,nt=async(e,t)=>{switch(e.family){case`babel`:return Promise.all([X(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),X(a(()=>import(`./estree-Bu_-Wi6O.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))]);case`typescript`:return Promise.all([X(a(()=>import(`./typescript-CatjJeHm.js`),__vite__mapDeps([16,1,2,3,5,6,7,8,9,10,11,12,13,14,15]))),X(a(()=>import(`./estree-Bu_-Wi6O.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))]);case`postcss`:return[await X(a(()=>import(`./postcss-DSDkwgFE.js`),__vite__mapDeps([17,1,2,3])))];case`html`:{let e=[await X(a(()=>import(`./html-Ca764Rus.js`),__vite__mapDeps([18,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))];return/<script\b/i.test(t)&&e.push(await X(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),await X(a(()=>import(`./estree-Bu_-Wi6O.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))),/<script\b[^>]*\blang\s*=\s*["']?(?:ts|typescript)/i.test(t)&&e.push(await X(a(()=>import(`./typescript-CatjJeHm.js`),__vite__mapDeps([16,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))),/<style\b/i.test(t)&&e.push(await X(a(()=>import(`./postcss-DSDkwgFE.js`),__vite__mapDeps([17,1,2,3])))),[...new Set(e)]}case`markdown`:{let n=[await X(a(()=>import(`./markdown-DaiQGPEs.js`),__vite__mapDeps([19,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))],r=e=>RegExp(`^(?: {0,3})(?:\`{3,}|~{3,})\\s*(?:${e})(?:\\s|$)`,`im`).test(t);return e.parser===`mdx`&&n.push(await X(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),await X(a(()=>import(`./estree-Bu_-Wi6O.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))),r(`js|jsx|javascript|json|json5|jsonc`)&&n.push(await X(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),await X(a(()=>import(`./estree-Bu_-Wi6O.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))),r(`ts|tsx|typescript`)&&n.push(await X(a(()=>import(`./typescript-CatjJeHm.js`),__vite__mapDeps([16,1,2,3,5,6,7,8,9,10,11,12,13,14,15]))),await X(a(()=>import(`./estree-Bu_-Wi6O.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15])))),r(`css|scss|less`)&&n.push(await X(a(()=>import(`./postcss-DSDkwgFE.js`),__vite__mapDeps([17,1,2,3])))),r(`html`)&&n.push(await X(a(()=>import(`./html-Ca764Rus.js`),__vite__mapDeps([18,1,2,3,5,6,7,8,9,10,11,12,13,14,15]))),await X(a(()=>import(`./babel-BnLuavNv.js`),__vite__mapDeps([0,1,2,3]))),await X(a(()=>import(`./estree-Bu_-Wi6O.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15]))),await X(a(()=>import(`./typescript-CatjJeHm.js`),__vite__mapDeps([16,1,2,3,5,6,7,8,9,10,11,12,13,14,15]))),await X(a(()=>import(`./postcss-DSDkwgFE.js`),__vite__mapDeps([17,1,2,3])))),r(`yaml|yml`)&&n.push(await X(a(()=>import(`./yaml-mLy9chOK.js`),__vite__mapDeps([20,1,2,3])))),[...new Set(n)]}case`yaml`:return[await X(a(()=>import(`./yaml-mLy9chOK.js`),__vite__mapDeps([20,1,2,3])))]}},rt=async(e,t)=>{let n=$e(e);if(!n)throw Error(`Formatting is not supported for “${Xe(e)||e}”.`);if(!tt(t))throw Error(`Could not format “${Xe(e)||e}”: files are limited to ${Ke.toLocaleString()} characters and ${qe.toLocaleString()} lines.`);try{let[{format:e},r]=await Promise.all([a(()=>import(`./standalone-DWWnsbIr.js`),__vite__mapDeps([21,1,2,3,5,6,7,8,9,10,11,12,13,14,15])),nt(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 “${Xe(e)||e}”: ${n}`)}},it=(0,F.lazy)(async()=>({default:(await a(()=>import(`./OptimizedSyntaxHighlighter-Ci9sRc78.js`).then(e=>e.n),__vite__mapDeps([22,2,3,23]))).OptimizedSyntaxHighlighter})),at=8e3,ot=400,st=500;function ct({path:e,value:t,ariaLabel:n,disabled:r=!1,onChange:i,onSaveShortcut:a,onFormatShortcut:o}){let{t:s}=c(),l=de(e=>e.theme.mode===`dark`),u=(0,F.useRef)(null),d=(0,F.useRef)(null),[f,p]=(0,F.useState)(``),m=(0,F.useMemo)(()=>Qe(e),[e]),h=(0,F.useMemo)(()=>{if(t.length>at)return 401;let e=1;for(let n=0;n<t.length&&!(t.charCodeAt(n)===10&&(e+=1,e>ot));n+=1);return e},[t]),g=t.length>at||h>ot,_=m!==`text`&&!g,v=_&&f===t;return(0,F.useEffect)(()=>{if(!_)return;let e=window.setTimeout(()=>p(t),st);return()=>window.clearTimeout(e)},[_,e,t]),(0,F.useLayoutEffect)(()=>{!v||!u.current||!d.current||(u.current.style.transform=`translate3d(${-d.current.scrollLeft}px, ${-d.current.scrollTop}px, 0)`)},[v,e]),(0,L.jsxs)(`div`,{dir:`ltr`,className:j(`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,L.jsx)(`div`,{"aria-hidden":`true`,"data-testid":`work-file-highlight`,className:`pointer-events-none absolute inset-0 z-0 overflow-hidden`,children:(0,L.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,L.jsx)(F.Suspense,{fallback:(0,L.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,L.jsx)(it,{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,L.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:j(`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,L.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 lt=e=>{if(!e)return null;try{let t=new URL(e);return(t.hostname===`localhost`||t.hostname===`127.0.0.1`||t.hostname===`[::1]`)&&(t.protocol===`http:`||t.protocol===`https:`)?t.toString():null}catch{return null}},Z=e=>{let t=e.split(`/`).filter(Boolean);return t.pop(),t.join(`/`)},ut=(e,t)=>{let n=e.metadata?.name??e.metadata?.toolName??e.metadata?.tool??e.metadata?.command;return typeof n==`string`&&n?n:t};function dt({task:e,liveRun:t,files:n,selectedFile:r,loadingFiles:i,actionLoading:a,onLoadFiles:o,onLoadFile:s,onClearSelectedFile:d,onSaveFile:f,onStartPreview:p,onStopPreview:h,onDirtyChange:b}){let{t:S,i18n:T}=c(),D=he(T.language),[O,ne]=(0,F.useState)(`files`),[k,ae]=(0,F.useState)(``),[A,oe]=(0,F.useState)(``),[se,ce]=(0,F.useState)(),[le,de]=(0,F.useState)(``),[N,me]=(0,F.useState)(!1),P=lt(e.previewUrl),ge=t?.runId,_e=t?.error,ve=t?.tools,ye=(0,F.useMemo)(()=>{let t=new Set(ve?.map(e=>e.id)||[]);return(e.messages||[]).filter(e=>{if(e.kind===`reasoning`||e.role!==`tool`&&e.kind===`message`)return!1;if(!ge||e.runId!==ge)return!0;if(e.kind===`error`&&_e)return!1;let n=e.metadata?.toolCallId;return typeof n!=`string`||!t.has(n)})},[_e,ge,ve,e.messages]),be=ye.length+(ve?.length||0),xe=!!r&&A!==(r?.content??``),I=e.status===`preparing`||e.status===`running`,Se=(0,F.useRef)(I),R=(0,F.useRef)(0),z=(0,F.useRef)(A),Ce=(0,F.useRef)(se),we=(0,F.useRef)(r),Te=(0,F.useRef)(e.id),Ee=(0,F.useRef)(o),B=(0,F.useRef)(s),De=(0,F.useRef)(b),V=(0,F.useRef)(!0),Oe=r?et(r.path):!1,ke=!r||tt(A),je=Oe&&ke;(0,F.useEffect)(()=>{z.current=A,Ce.current=se,we.current=r,Te.current=e.id,De.current=b},[se,A,b,r,e.id]),(0,F.useEffect)(()=>{Ee.current=o,B.current=s},[s,o]),(0,F.useEffect)(()=>(V.current=!0,()=>{V.current=!1,R.current+=1,De.current(!1)}),[]),(0,F.useEffect)(()=>{if(Se.current&&!I&&(Ee.current(k),r&&!xe)){let e=++R.current,t=r.path,n=z.current,i=Ce.current;B.current(t).then(r=>{!V.current||e!==R.current||r.path!==t||z.current!==n||Ce.current!==i||(z.current=r.content,Ce.current=r.updatedAt??r.modifiedAt,oe(r.content),ce(r.updatedAt??r.modifiedAt))}).catch(()=>void 0)}Se.current=I},[k,xe,r,I]);let Me=()=>!xe||window.confirm(S(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),H=()=>{r&&ue(e.id,r.path)},Ne=async e=>{Me()&&(R.current+=1,H(),d(),b(!1),ae(e),await o(e).catch(()=>void 0))},Pe=async t=>{if(!Me())return;let n=++R.current;H();let r=await s(t).catch(()=>void 0);if(!V.current||!r||n!==R.current)return;let i=fe(e.id,r.path),a=i?.content??r.content,o=i?.baseUpdatedAt??r.updatedAt??r.modifiedAt;z.current=a,Ce.current=o,oe(a),ce(o),b(i!==null&&i.content!==r.content)},Fe=()=>{Me()&&(R.current+=1,H(),d(),b(!1))},U=t=>{r&&(z.current=t,oe(t),t===r.content?ue(e.id,r.path):pe(e.id,r.path,{content:t,baseUpdatedAt:se??r.updatedAt??r.modifiedAt}),b(t!==r.content))},Ie=async()=>{if(!r)return;let t=e.id,n=r.path,i=A,a=R.current,o=await f(n,i,se).catch(()=>!1);if(!V.current||o===!1||a!==R.current||Te.current!==t||we.current?.path!==n)return;let s=o.updatedAt??o.modifiedAt;Ce.current=s,ce(s);let c=z.current;if(c===i){ue(t,n),b(!1);return}pe(t,n,{content:c,baseUpdatedAt:s}),b(!0)},W=async()=>{if(!r||I||N||!je)return;me(!0);let e=R.current,t=r.path,n=z.current;try{let r=await rt(t,n);if(!V.current||e!==R.current||we.current?.path!==t||z.current!==n)return;U(r),w.success(S(`work.files.formatted`,{defaultValue:`Code formatted.`}))}catch(r){if(!V.current||e!==R.current||we.current?.path!==t||z.current!==n)return;w.error(r instanceof Error?r.message:S(`work.files.formatFailed`,{defaultValue:`Could not format this file.`}))}finally{V.current&&me(!1)}},G=[{id:`files`,label:S(`work.workspace.files`,{defaultValue:`Files`}),icon:te,testId:`work-files-tab`},{id:`activity`,label:S(`work.workspace.activity`,{defaultValue:`Activity`}),icon:_,testId:`work-activity-tab`},{id:`preview`,label:S(`work.workspace.preview`,{defaultValue:`Preview`}),icon:g,testId:`work-preview-tab`}],K=(e,t)=>{let n=null;if(e.key===`ArrowRight`&&(n=(t+(D?-1:1)+G.length)%G.length),e.key===`ArrowLeft`&&(n=(t+(D?1:-1)+G.length)%G.length),e.key===`Home`&&(n=0),e.key===`End`&&(n=G.length-1),n===null)return;e.preventDefault();let r=G[n];ne(r.id),e.currentTarget.parentElement?.querySelector(`#work-workspace-tab-${r.id}`)?.focus()};return(0,L.jsxs)(`section`,{className:`flex h-full min-h-0 flex-col bg-surface-raised`,children:[(0,L.jsxs)(`div`,{"data-testid":`work-workspace-toolbar`,className:`flex h-12 shrink-0 items-center gap-2 border-b border-line bg-surface-raised px-2`,children:[(0,L.jsx)(`div`,{role:`tablist`,"aria-orientation":`horizontal`,"aria-label":S(`work.workspace.label`,{defaultValue:`Workspace views`}),className:`flex shrink-0 items-center rounded-xl border border-line bg-surface-subtle p-0.5`,children:G.map((e,t)=>{let n=e.icon;return(0,L.jsxs)(`button`,{type:`button`,role:`tab`,id:`work-workspace-tab-${e.id}`,"aria-selected":O===e.id,"aria-controls":O===e.id?`work-workspace-panel-${e.id}`:void 0,"aria-label":e.label,tabIndex:O===e.id?0:-1,title:e.label,"data-testid":e.testId,onClick:()=>ne(e.id),onKeyDown:e=>K(e,t),className:j(`flex h-7 items-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow]`,O===e.id?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:text-ink`),children:[(0,L.jsx)(n,{className:`h-3.5 w-3.5 shrink-0`}),(0,L.jsx)(`span`,{className:`hidden xs:inline`,children:e.label}),e.id===`activity`&&be>0&&(0,L.jsx)(`span`,{className:`rounded-full bg-surface px-1.5 text-[10px] text-ink-muted`,children:be})]},e.id)})}),O===`files`&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1.5`,children:[r&&(0,L.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:Fe,"aria-label":S(`work.files.back`,{defaultValue:`Back to files`}),children:(0,L.jsx)(l,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,L.jsxs)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,title:r?.path??`/workspace${k?`/${k}`:``}`,children:[r?.path??`/workspace${k?`/${k}`:``}`,xe&&` •`]})]}),(0,L.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,L.jsx)(`button`,{type:`button`,disabled:!k,onClick:()=>void Ne(Z(k)),className:j(`hidden h-8 w-8 items-center justify-center rounded-lg border border-transparent text-ink-muted hover:border-line hover:bg-surface-subtle hover:text-ink disabled:opacity-30 sm:inline-flex`,!r&&`inline-flex`),"aria-label":S(`work.files.up`,{defaultValue:`Parent folder`}),title:S(`work.files.up`,{defaultValue:`Parent folder`}),children:(0,L.jsx)(l,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,L.jsx)(`button`,{type:`button`,"data-testid":`work-refresh-files-button`,onClick:()=>void o(k).catch(()=>void 0),className:`inline-flex h-8 w-8 items-center justify-center rounded-lg border border-transparent text-ink-muted hover:border-line hover:bg-surface-subtle hover:text-ink`,"aria-label":S(`common.refresh`,{defaultValue:`Refresh`}),title:S(`common.refresh`,{defaultValue:`Refresh`}),children:(0,L.jsx)(x,{className:j(`h-3.5 w-3.5`,i&&`animate-spin`)})}),r&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(M,{"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:I||N||!je,onClick:()=>void W(),"aria-busy":N||void 0,title:je?S(`work.files.formatShortcut`,{defaultValue:`Format (Shift+Alt+F)`}):Oe?S(`work.files.formatTooLarge`,{defaultValue:`Formatting is limited to files under 100,000 characters and 4,000 lines.`}):S(`work.files.formatUnsupported`,{defaultValue:`Formatting is not available for this file type.`}),"aria-label":S(`work.files.format`,{defaultValue:`Format file`}),children:[N?(0,L.jsx)(C,{className:`h-3.5 w-3.5 animate-spin`}):(0,L.jsx)(y,{className:`h-3.5 w-3.5`}),(0,L.jsx)(`span`,{className:`hidden 2xl:inline`,children:S(`work.files.format`,{defaultValue:`Format`})})]}),(0,L.jsxs)(M,{"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:!xe||I||N||a,onClick:()=>void Ie(),"aria-busy":a||void 0,title:S(`work.files.saveShortcut`,{defaultValue:`Save (⌘/Ctrl+S)`}),"aria-label":S(`common.save`),children:[a?(0,L.jsx)(C,{className:`h-3.5 w-3.5 animate-spin`}):(0,L.jsx)(u,{className:`h-3.5 w-3.5`}),(0,L.jsx)(`span`,{className:`hidden 2xl:inline`,children:S(`common.save`)})]})]})]})]}),O===`activity`&&(0,L.jsx)(`div`,{className:`min-w-0 flex-1`}),O===`preview`&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`input`,{dir:`auto`,value:le,onChange:e=>de(e.target.value),placeholder:S(`work.preview.command`,{defaultValue:`Optional start command`}),"aria-label":S(`work.preview.command`,{defaultValue:`Optional start command`}),className:`h-8 min-w-0 flex-1 rounded-lg border border-line bg-surface px-2.5 font-mono text-[11px] text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,L.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[e.previewStatus===`running`||e.previewStatus===`starting`?(0,L.jsxs)(M,{"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 h(),"aria-busy":a||void 0,"aria-label":S(`work.preview.stop`,{defaultValue:`Stop preview`}),children:[a?(0,L.jsx)(C,{className:`h-3.5 w-3.5 animate-spin`}):(0,L.jsx)(E,{className:`h-3.5 w-3.5 fill-current`}),(0,L.jsx)(`span`,{className:`hidden 2xl:inline`,children:S(`work.preview.stop`,{defaultValue:`Stop preview`})})]}):(0,L.jsxs)(M,{"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 p(le.trim()||void 0),"aria-busy":a||void 0,"aria-label":S(`work.preview.start`,{defaultValue:`Start preview`}),children:[a?(0,L.jsx)(C,{className:`h-3.5 w-3.5 animate-spin`}):(0,L.jsx)(v,{className:`h-3.5 w-3.5 fill-current`}),(0,L.jsx)(`span`,{className:`hidden 2xl:inline`,children:S(`work.preview.start`,{defaultValue:`Start preview`})})]}),P&&(0,L.jsx)(`a`,{href:P,target:`_blank`,rel:`noopener noreferrer`,"aria-label":S(`work.preview.open`,{defaultValue:`Open`}),title:S(`work.preview.open`,{defaultValue:`Open`}),className:`inline-flex h-8 w-8 items-center justify-center rounded-lg border border-line text-ink-muted hover:bg-surface-subtle hover:text-ink`,children:(0,L.jsx)(ee,{className:`h-3.5 w-3.5`})})]})]})]}),O===`files`&&(0,L.jsxs)(`div`,{id:`work-workspace-panel-files`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-files`,className:`flex min-h-0 flex-1`,children:[(0,L.jsx)(`div`,{className:j(`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,L.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-1.5`,children:i&&n.length===0?(0,L.jsx)(`div`,{className:`flex justify-center py-8 text-ink-muted`,children:(0,L.jsx)(C,{className:`h-5 w-5 animate-spin`})}):n.length===0?(0,L.jsx)(`p`,{className:`px-3 py-8 text-center text-xs text-ink-muted`,children:S(`work.files.empty`,{defaultValue:`No files in this folder yet.`})}):[...n].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1).map(e=>(0,L.jsxs)(`button`,{type:`button`,"data-testid":`work-file-item`,"data-path":e.path,onClick:()=>{e.type===`directory`?Ne(e.path):Pe(e.path)},className:j(`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,L.jsx)(ie,{className:`h-3.5 w-3.5 shrink-0 text-amber-500`}):(0,L.jsx)(re,{className:`h-3.5 w-3.5 shrink-0`}),(0,L.jsx)(`span`,{dir:`auto`,className:`truncate`,children:e.name})]},e.path))})}),(0,L.jsx)(`div`,{className:j(`min-h-0 min-w-0 flex-1 flex-col`,r?`flex`:`hidden sm:flex`),children:r?(0,L.jsx)(ct,{path:r.path,value:A,ariaLabel:S(`work.files.editorLabel`,{path:r.path,defaultValue:`File editor: {{path}}`}),onChange:U,onSaveShortcut:()=>{xe&&!I&&!a&&!N&&Ie()},onFormatShortcut:()=>void W(),disabled:I||N}):(0,L.jsxs)(`div`,{className:`m-auto px-6 text-center text-xs text-ink-muted`,children:[(0,L.jsx)(re,{className:`mx-auto mb-3 h-7 w-7 text-ink-subtle`}),S(`work.files.select`,{defaultValue:`Select a file to inspect and edit it.`})]})})]}),O===`activity`&&(0,L.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,L.jsx)(`div`,{className:`mb-3`,children:(0,L.jsx)(Ae,{run:t,variant:`activity`})}),ye.length===0&&!t?(0,L.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center text-xs text-ink-muted`,children:[(0,L.jsx)(m,{className:`mb-3 h-7 w-7 text-ink-subtle`}),S(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]}):(0,L.jsx)(`div`,{className:`space-y-2`,children:ye.map(e=>(0,L.jsxs)(`div`,{className:`rounded-xl border border-line bg-surface p-3`,children:[(0,L.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,L.jsx)(`span`,{dir:`auto`,className:`truncate font-mono text-xs font-medium text-ink`,children:ut(e,S(`work.activity.toolActivity`,{defaultValue:`Tool activity`}))}),(0,L.jsx)(`span`,{className:`shrink-0 text-[10px] uppercase tracking-wide text-ink-subtle rtl:tracking-normal`,children:{message:S(`work.activity.kinds.message`,{defaultValue:`Message`}),reasoning:S(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`}),tool_call:S(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}),tool_result:S(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),error:S(`work.activity.kinds.error`,{defaultValue:`Error`})}[e.kind]})]}),e.content&&(0,L.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))})]}),O===`preview`&&(0,L.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,L.jsxs)(`div`,{className:`m-auto flex items-center gap-2 text-xs text-ink-muted`,children:[(0,L.jsx)(C,{className:`h-4 w-4 animate-spin`}),S(`work.preview.starting`,{defaultValue:`Starting preview…`})]}):P&&e.previewStatus===`running`?(0,L.jsx)(`iframe`,{"data-testid":`work-preview-frame`,title:S(`work.preview.frameTitle`,{defaultValue:`Workspace preview`}),src:P,sandbox:`allow-scripts allow-forms allow-modals allow-downloads`,referrerPolicy:`no-referrer`,className:`min-h-0 flex-1 border-0 bg-white`}):(0,L.jsxs)(`div`,{className:`m-auto max-w-sm px-6 text-center text-xs leading-relaxed text-ink-muted`,children:[(0,L.jsx)(g,{className:`mx-auto mb-3 h-8 w-8 text-ink-subtle`}),e.previewStatus===`failed`?S(`work.preview.failed`,{defaultValue:`The preview could not start. Check Activity, then try another command.`}):S(`work.preview.empty`,{defaultValue:`Start the app inside this workspace to inspect it here.`})]})})]})}var ft=e=>{let t=e.trim().toLowerCase();return!!t&&!t.includes(`embed`)},Q=(e,t)=>e instanceof Error&&e.message?e.message:t,pt=(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 mt(){let{t:e}=c(),t=s(),n=r(),{taskId:a}=i(),l=de(e=>e.preferences),u=de(e=>e.setPreferences),m=me(e=>e.user),_=m?.id??null,[v,y]=(0,F.useState)(!1),b=N(e=>e.models),x=N(e=>e.selectedModel),S=N(e=>e.loadModels),{capabilities:C,tasks:T,selectedTask:E,files:D,selectedFile:ee,liveRuns:O,loadingTask:te,loadingOlderMessages:ne,loadingFiles:re,actionLoading:ie,error:A,loadCapabilities:oe,loadTasks:M,selectTask:fe,loadTask:pe,loadOlderMessages:he,createTask:_e,updateTask:ye,deleteTask:be,startRun:Se,cancelRun:R,beginLiveRun:z,applyRunEvents:we,setLiveRunConnection:Te,clearLiveRun:Ee,loadFiles:B,loadFile:De,clearSelectedFile:V,saveFile:Oe,startPreview:ke,stopPreview:Ae,clearError:je}=P(),Me=(0,F.useMemo)(()=>b.filter(e=>!e.isPersona&&ft(e.name)&&(!e.isPlugin||!!e.pluginId)),[b]),H=(0,F.useMemo)(()=>Me.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:I(i),label:e.isPlugin&&e.pluginName?`${e.name} · ${e.pluginName}`:e.name,remote:e.isPlugin||r.endsWith(`:cloud`)||r.endsWith(`-cloud`)}]}),[Me]),[Ne,Pe]=(0,F.useState)(``),[U,Ie]=(0,F.useState)({locationKey:t.key,value:`conversation`}),W=U.locationKey===t.key?U.value:`conversation`,G=e=>Ie({locationKey:t.key,value:e}),[K,q]=(0,F.useState)(!1),[Le,Re]=(0,F.useState)({taskId:null,open:!1}),ze=Le.open&&Le.taskId===E?.id,Be=(0,F.useRef)(null),Ve=(0,F.useRef)(null),He=(0,F.useRef)(null),Ue=(0,F.useCallback)((e=!1)=>{Re(e=>({...e,open:!1})),e&&window.requestAnimationFrame(()=>Ve.current?.focus())},[]);(0,F.useEffect)(()=>{if(!ze)return;let e=window.requestAnimationFrame(()=>{He.current?.querySelector(`[role="menuitem"]`)?.focus()}),t=e=>{e.target instanceof Node&&!Be.current?.contains(e.target)&&Ue()},n=e=>{e.key===`Escape`&&(e.preventDefault(),Ue(!0))};return document.addEventListener(`pointerdown`,t),document.addEventListener(`keydown`,n),()=>{window.cancelAnimationFrame(e),document.removeEventListener(`pointerdown`,t),document.removeEventListener(`keydown`,n)}},[Ue,ze]);let We=e=>{if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),Ue(!0);return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`&&e.key!==`Home`&&e.key!==`End`)return;let t=[...He.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,F.useEffect)(()=>{oe(),M()},[oe,M]),(0,F.useEffect)(()=>{if(!a){fe(null);return}fe(a),pe(a).catch(()=>void 0),B(a,``).catch(()=>void 0)},[a,B,pe,fe]);let J=H.find(e=>e.key===Ne)||H.find(e=>e.providerType===`ollama`&&e.model===x)||H[0],Ke=a?T.find(e=>e.id===a):void 0,qe=Ke?.status??E?.status,Je=E?.activeRun??Ke?.activeRun??null,Y=Je?.id,Ye=Je?.status===`queued`||Je?.status===`preparing`||Je?.status===`running`,Xe=a&&O[a]?.runId===Y?O[a]:void 0,Ze=qe===`preparing`||qe===`running`?1e3:4e3;(0,F.useEffect)(()=>{let e,t=!1,n=async()=>{await M(!0),t||(e=setTimeout(n,Ze))};return e=setTimeout(n,Ze),()=>{t=!0,e&&clearTimeout(e)}},[M,Ze]);let Qe=(0,F.useRef)(null);(0,F.useEffect)(()=>{if(!a||!qe){Qe.current=null;return}let e=Qe.current;Qe.current={taskId:a,status:qe},e?.taskId===a&&(e.status===`preparing`||e.status===`running`)&&qe!==`preparing`&&qe!==`running`&&(pe(a,!0).catch(()=>void 0),B(a,``).catch(()=>void 0))},[B,pe,qe,a]),(0,F.useEffect)(()=>{if(!a||!Y||!Ye)return;let e=new AbortController,t=!1,n=0,r=P.getState().liveRuns[a]?.runId===Y&&P.getState().liveRuns[a]?.lastEventId||0,i=!1,o=[],s=null,c=()=>{if(s!==null&&(window.cancelAnimationFrame(s),s=null),o.length===0)return;let e=o;o=[],we(e)},l=e=>{if(e.type!==`snapshot`&&(n=0),r=Math.max(r,e.id),o.push(e),e.type===`done`||e.type===`error`&&e.data.terminal!==!1){i=!0,c();return}s===null&&(s=window.requestAnimationFrame(c))};return z(a,Y,Je?.startedAt||void 0),(async()=>{for(;!t&&!e.signal.aborted&&!i;){Te(a,Y,n>=3?`error`:n===0?`connecting`:`reconnecting`);let o=Date.now();try{if(await ce.streamRunEvents({taskId:a,runId:Y,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,Te(a,Y,n>=3?`error`:`reconnecting`,n>=3?Q(r,`Live updates are reconnecting in the background.`):void 0),await pt(Math.min(4e3,250*2**Math.min(n,4)),e.signal)}}if(c(),!(!i||e.signal.aborted)){Te(a,Y,`closed`);try{await Promise.all([pe(a,!0),B(a,``),M(!0)])}catch{}finally{Ee(a,Y)}}})(),()=>{t=!0,e.abort(),c()}},[we,z,Ee,B,pe,M,Je?.startedAt,Ye,Y,Te,a]),(0,F.useEffect)(()=>{if(!K)return;let e=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[K]);let $e=(0,F.useCallback)(()=>!K||window.confirm(e(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),[e,K]),et=(0,F.useCallback)(()=>!K||window.confirm(e(`work.files.leaveWithDraft`,{defaultValue:`Leave this file? Your unsaved edit will remain as a browser draft.`})),[e,K]),tt=()=>{E&&ee&&ue(E.id,ee.path)},X=o(({currentLocation:e,nextLocation:t})=>{let n=t.state;return K&&n?.deletedWorkTaskId!==a&&`${e.pathname}${e.search}${e.hash}`!=`${t.pathname}${t.search}${t.hash}`});(0,F.useEffect)(()=>{if(X.state!==`blocked`)return;if(!et()){X.reset();return}let e=X.proceed,t=window.setTimeout(()=>{q(!1),window.setTimeout(e,0)},0);return()=>window.clearTimeout(t)},[et,X]);let nt=()=>{je(),G(`conversation`),n(`/work`)},rt=async t=>{if(E&&!$e())return!1;E&&K&&(tt(),V(),q(!1));try{if(E)await Se(E.id,{message:t,model:E.model,providerType:E.providerType,providerId:E.providerId||void 0});else{if(!J)throw Error(e(`work.composer.noModelSelected`,{defaultValue:`No Work-compatible model is selected.`}));n(`/work/${(await _e({message:t,model:J.model,providerType:J.providerType,providerId:J.providerId,networkEnabled:!0})).id}`)}return!0}catch(t){return w.error(Q(t,e(`work.toasts.runFailed`,{defaultValue:`Could not start the Work task.`}))),!1}},it=async t=>{let n=vt.find(e=>e.key===t);if(n){if(!E){Pe(t);return}try{await ye(E.id,{model:n.model,providerType:n.providerType,providerId:n.providerId})}catch(t){w.error(Q(t,e(`work.toasts.updateFailed`,{defaultValue:`Could not update this task.`})))}}},at=async()=>{if(E)try{await R(E.id),w.success(e(`work.toasts.cancelled`,{defaultValue:`Work run stopped.`}))}catch(t){w.error(Q(t,e(`work.toasts.cancelFailed`,{defaultValue:`Could not stop the Work run.`})))}},ot=async t=>{let r=T.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&&K;i&&q(!1);try{await be(t),ge(t),a===t&&n(`/work`)}catch(t){i&&q(!0),w.error(Q(t,e(`work.toasts.deleteFailed`,{defaultValue:`Could not delete this Work task.`})))}},st=async t=>{if(!E)return!1;let n=t.trim();if(!n||n===E.title)return!!n;try{return await ye(E.id,{title:n}),!0}catch(t){return w.error(Q(t,e(`work.toasts.renameFailed`,{defaultValue:`Could not rename this task.`}))),!1}},ct=async(e,t,n)=>{try{return await e(),n&&w.success(n),!0}catch(e){return w.error(Q(e,t)),!1}},lt=async(t,n,r)=>{if(!E)return!1;let i=E.id;try{let a=await Oe(i,t,n,r);return P.getState().selectedTaskId===i&&w.success(e(`work.toasts.saved`,{defaultValue:`File saved.`})),a}catch(t){return P.getState().selectedTaskId===i&&w.error(Q(t,e(`work.toasts.saveFailed`,{defaultValue:`Could not save this file.`}))),!1}},Z=C?.available===!1,ut=C?.pluginAvailable?C.ollamaAvailable?e(`work.runtime.readyHybrid`,{defaultValue:`Docker + models ready`}):e(`work.runtime.readyPlugin`,{defaultValue:`Docker + plugin ready`}):e(`work.runtime.readyOllama`,{defaultValue:`Docker ready`}),mt=e(`work.runtime.ready`,{defaultValue:`Runtime ready`}),ht=E?xe(E):!1,$=E?{model:E.model,providerType:E.providerType,providerId:E.providerId||void 0}:void 0,gt=$?I($):J?.key||``,_t=$&&!H.some(e=>e.key===gt)?{...$,key:gt,label:`${$.model} · ${$.providerType===`plugin`?$.providerId||`plugin`:`Ollama`}`,remote:$.providerType===`plugin`||$.model.toLowerCase().endsWith(`:cloud`)||$.model.toLowerCase().endsWith(`-cloud`)}:void 0,vt=_t?[_t,...H]:H,yt=ve[E?.status??`idle`],bt=e(yt.labelKey,{defaultValue:yt.label}),xt=async()=>{if(l.workRemoteProviderDisclosureDismissed||v)return!1;let t=_;y(!0);try{let n=await le.updatePreferences({workRemoteProviderDisclosureDismissed:!0});if(!n.success)throw Error(n.error||e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`}));return(me.getState().user?.id??null)===t?(u({workRemoteProviderDisclosureDismissed:!0}),!0):!1}catch{return w.error(e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`})),!1}finally{y(!1)}};return(0,L.jsx)(`div`,{"data-testid":`work-page`,className:`relative flex h-full min-h-0 overflow-hidden bg-surface`,children:(0,L.jsxs)(`main`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,L.jsxs)(`header`,{className:`flex h-16 shrink-0 items-center gap-3 border-b border-line bg-surface px-3 md:px-4`,children:[E?(0,L.jsx)(`input`,{"data-testid":`work-task-title`,dir:`auto`,defaultValue:E.title,onBlur:e=>{let t=e.currentTarget;if(!t.value.trim()){t.value=E.title;return}st(t.value).then(e=>{e||(t.value=E.title)})},onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&(e.currentTarget.value=E.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`})},`${E.id}:${E.title}`):(0,L.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,L.jsx)(`h1`,{className:`truncate text-sm font-semibold text-ink`,children:e(`work.title`,{defaultValue:`Work`})})}),E&&(0,L.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:bt,defaultValue:`Status: {{status}}`}),title:e(`work.tasks.status`,{status:bt,defaultValue:`Status: {{status}}`}),children:[(0,L.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-compact-status-indicator`,className:j(`h-1.5 w-1.5 rounded-full`,yt.animated&&`animate-pulse`,E.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:yt.color}}),(0,L.jsx)(`span`,{className:`hidden md:inline`,children:bt})]}),E&&(0,L.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,L.jsxs)(`button`,{type:`button`,onClick:()=>G(`conversation`),"aria-label":e(`work.mobile.conversation`,{defaultValue:`Conversation`}),"aria-pressed":W===`conversation`,className:j(`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`,W===`conversation`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,L.jsx)(f,{className:`h-3.5 w-3.5 shrink-0`}),(0,L.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.conversation`,{defaultValue:`Conversation`})})]}),(0,L.jsxs)(`button`,{type:`button`,onClick:()=>G(`workspace`),"aria-label":e(`work.mobile.workspace`,{defaultValue:`Workspace`}),"aria-pressed":W===`workspace`,className:j(`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`,W===`workspace`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,L.jsx)(g,{className:`h-3.5 w-3.5 shrink-0`}),(0,L.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.workspace`,{defaultValue:`Workspace`})})]})]}),(0,L.jsxs)(`div`,{className:j(`ms-auto hidden min-w-0 items-center gap-2`,E?`xl:flex`:`sm:flex`),children:[E&&(0,L.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,L.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-status-indicator`,className:j(`h-1.5 w-1.5 rounded-full`,yt.animated&&`animate-pulse`,E.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:yt.color}}),bt]}),(0,L.jsxs)(`span`,{"data-testid":`work-runtime-status`,className:j(`inline-flex h-7 items-center gap-1.5 rounded-full border px-2.5 text-[11px] font-medium`,Z?`border-transparent bg-error-500 text-[#0D0D0C]`:`border-transparent bg-success-500 text-[#0D0D0C]`),title:Z?C?.reason||e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):C?.image?`${ut} · ${C.image}`:ut,children:[(0,L.jsx)(d,{className:`h-3.5 w-3.5`}),Z?e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):mt]}),E&&(0,L.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,L.jsx)(h,{className:`h-3.5 w-3.5 shrink-0`}),(0,L.jsx)(`span`,{dir:`ltr`,className:`truncate`,children:E.model})]})]}),E&&(0,L.jsxs)(`div`,{ref:Be,className:`relative shrink-0`,children:[(0,L.jsx)(`button`,{ref:Ve,id:`work-task-actions-trigger`,type:`button`,"data-testid":`work-task-actions-button`,onClick:()=>Re(e=>({taskId:E.id,open:e.taskId===E.id?!e.open:!0})),onKeyDown:e=>{e.key!==`ArrowDown`&&e.key!==`ArrowUp`||(e.preventDefault(),Re({taskId:E.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":ze,"aria-controls":ze?`work-task-actions-menu`:void 0,children:(0,L.jsx)(p,{className:`h-4 w-4`})}),ze&&(0,L.jsx)(`div`,{ref:He,id:`work-task-actions-menu`,role:`menu`,"aria-labelledby":`work-task-actions-trigger`,onKeyDown:We,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,L.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`work-delete-task-button`,onClick:()=>{Ue(!0),ot(E.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,L.jsx)(ae,{className:`h-3.5 w-3.5`}),e(`work.tasks.delete`,{defaultValue:`Delete task`})]})})]})]}),(Z||A)&&(0,L.jsxs)(`div`,{className:j(`flex shrink-0 items-center gap-2 border-b px-4 py-2 text-xs`,Z?`border-error-500/20 bg-error-500/10 text-error-700`:`border-amber-500/20 bg-amber-500/10 text-ink`),children:[(0,L.jsx)(k,{className:`h-4 w-4 shrink-0`}),(0,L.jsx)(`span`,{dir:`auto`,className:`min-w-0 flex-1`,children:Z?C?.reason||e(`work.runtime.reason`,{defaultValue:`Docker and an available Ollama or plugin model provider are required.`}):A}),A&&!Z&&(0,L.jsx)(`button`,{type:`button`,className:`rounded-md p-1 hover:bg-black/5`,onClick:je,"aria-label":e(`common.close`),children:`×`})]}),a?E?(0,L.jsx)(Ge,{userId:_,mobileSurface:W,conversation:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Fe,{task:E,user:m,liveRun:Xe,loading:te,loadingOlder:ne,onLoadOlder:()=>he(E.id)}),(0,L.jsx)(Ce,{models:vt,selectorModels:Me,modelKey:gt,running:ht,loading:ie,disabled:Z,remoteDisclosureDismissed:l.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:v,onModelChange:it,onDismissRemoteDisclosure:xt,onModelsRefresh:S,onSubmit:rt,onCancel:at},E.id)]}),workspace:(0,L.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1`,children:(0,L.jsx)(dt,{task:E,liveRun:Xe,files:D,selectedFile:ee,loadingFiles:re,actionLoading:ie,onLoadFiles:e=>B(E.id,e),onLoadFile:e=>De(E.id,e),onClearSelectedFile:V,onSaveFile:lt,onStartPreview:t=>ct(()=>ke(E.id,t),e(`work.toasts.previewFailed`,{defaultValue:`Could not start the preview.`})),onStopPreview:()=>ct(()=>Ae(E.id),e(`work.toasts.previewStopFailed`,{defaultValue:`Could not stop the preview.`})),onDirtyChange:q},E.id)})}):(0,L.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col items-center justify-center px-6 text-center`,children:te?(0,L.jsx)(`div`,{className:`text-sm text-ink-muted`,children:e(`work.tasks.loading`,{defaultValue:`Loading task…`})}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(k,{className:`mb-3 h-8 w-8 text-ink-subtle`}),(0,L.jsx)(`h2`,{className:`text-lg font-semibold text-ink`,children:e(`work.tasks.notFound`,{defaultValue:`This Work task is unavailable`})}),(0,L.jsxs)(`button`,{type:`button`,onClick:nt,className:`mt-4 inline-flex items-center gap-1.5 text-sm font-medium text-primary-600 hover:text-primary-700`,children:[(0,L.jsx)(se,{className:`h-4 w-4 rtl:rotate-180`}),e(`work.tasks.back`,{defaultValue:`Start a new task`})]})]})}):(0,L.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,L.jsxs)(`section`,{"data-testid":`work-landing`,className:`mx-auto flex min-h-full w-full max-w-3xl flex-col items-center justify-center px-4 py-20 sm:px-8 sm:py-24`,children:[(0,L.jsxs)(`div`,{className:`flex flex-col items-center text-center`,children:[(0,L.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,L.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.`})})]}),(0,L.jsx)(Ce,{variant:`landing`,models:H,selectorModels:Me,modelKey:J?.key||``,running:!1,loading:ie,disabled:Z,remoteDisclosureDismissed:l.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:v,onModelChange:it,onDismissRemoteDisclosure:xt,onModelsRefresh:S,onSubmit:rt,onCancel:at}),(0,L.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,L.jsx)(d,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,L.jsx)(`span`,{children:e(`work.composer.hint`,{defaultValue:`Each task keeps its own files and history. Review model output before using it.`})})]})]})})]})})}export{mt as default};
@@ -0,0 +1,19 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DkShhNBf.js","js/rolldown-runtime-QTnfLwEv.js","js/markdown-core-GI9BPwrB.js","js/react-vendor-DyG_ODzn.js","js/router-vendor-BjDI9mRe.js","js/useTranslation-Cs6iTP4m.js","js/ui-vendor-CAFEDSaO.js","js/utils-vendor-Cbaj0BC5.js","js/demoMode-BhEpMVh5.js","js/logger-DbNs3-DK.js","js/utils-pTFqSV8c.js","js/Button-DBk-AREB.js","assets/index-bdSWBsAM.css"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,p as n}from"./router-vendor-BjDI9mRe.js";import{a as r}from"./utils-vendor-Cbaj0BC5.js";import{n as i}from"./demoMode-BhEpMVh5.js";import{n as a,t as o}from"./logger-DbNs3-DK.js";var s=o(`config`),c=window.location.protocol===`file:`?`http://localhost:3001/api`:`${window.location.origin}/api`,l=a(),u=()=>{l&&(s.debug(`API_BASE_URL configured as:`,c),s.debug(`Window location:`,window.location),s.debug(`Environment variables:`,{BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_APP_VERSION:`0.15.1`}))},d=o(`api`);u(),d.debug(`User agent:`,navigator.userAgent),d.debug(`Demo mode detected:`,i());var f=(e,t=!0)=>new Promise(n=>{setTimeout(()=>{n({success:t,data:e,error:t?void 0:`Demo mode: Backend not available`})},500)}),p=r.create({baseURL:c,timeout:3e5});p.interceptors.request.use(e=>{let t=localStorage.getItem(`auth-token`);return t&&(e.headers.Authorization=`Bearer ${t}`),e},e=>Promise.reject(e)),p.interceptors.response.use(e=>e,e=>{if(e.response?.status===401){d.warn(`Session expired or unauthorized, logging out...`),localStorage.removeItem(`auth-token`),t(async()=>{let{useAuthStore:e}=await import(`../assets/index-DkShhNBf.js`).then(e=>e.D);return{useAuthStore:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])).then(({useAuthStore:e})=>{e.getState().logout()});let e=window.location.protocol===`file:`;return(e?window.location.hash:window.location.pathname).includes(`/login`)||(window.location.href=e?`#/login`:`/login`),Promise.reject(Error(`Session expired`))}return d.error(`API Error:`,e),Promise.reject(e)});var m=`0.15.1`,h={login:e=>i()?f({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:m}}):p.post(`/auth/login`,e).then(e=>e.data),signup:e=>i()?f({user:{id:`demo-user-new`,username:e.username,email:e.email||``,role:`user`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:m,turnstile:{enabled:!1}}}):p.post(`/auth/signup`,e).then(e=>e.data),logout:()=>i()?f(void 0):p.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(d.debug(`getSystemInfo called, demo mode:`,i()),i()?f({requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:m,turnstile:{enabled:!1}}):(d.debug(`Making API call to:`,c+`/auth/system-info`),d.debug(`Full URL from:`,window.location.origin,`-> API:`,c+`/auth/system-info`),p.get(`/auth/system-info`).then(e=>(d.debug(`getSystemInfo response:`,e.data),e.data)).catch(e=>{throw d.debug(`getSystemInfo error:`,e),e.response&&(d.debug(`Error response data:`,e.response.data),d.debug(`Error status:`,e.response.status),d.debug(`Error headers:`,e.response.headers)),e.request&&d.debug(`Network error - no response received:`,e.request),d.debug(`Error config:`,e.config),e}))),verifyToken:()=>i()?f({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>i()?f({encryptionKey:`demo-encryption-key-not-real`}):p.get(`/auth/encryption-key`).then(e=>e.data),updateModelPullSetting:e=>i()?f({requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:e,version:m,turnstile:{enabled:!1}}):p.patch(`/auth/system-settings/model-pull`,{allowUserModelPull:e}).then(e=>e.data)},g={getUsers:()=>i()?f([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):p.get(`/users`).then(e=>e.data),createUser:e=>i()?f({id:`new-user-`+Date.now(),username:e.username,email:e.email,role:e.role,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.post(`/users`,e).then(e=>e.data),updateUser:(e,t)=>i()?f({id:e,username:t.username||`demo`,email:t.email||`demo@example.com`,role:t.role||`user`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/${e}`,t).then(e=>e.data),deleteUser:e=>i()?f(void 0):p.delete(`/users/${e}`).then(e=>e.data),updateMyAvatar:e=>i()?f({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,avatar:e,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/me/avatar`,{avatar:e}).then(e=>e.data)},_=[{name:`llama3.2:3b`,size:2048e6,digest:`demo-digest-1`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`llama`,families:[`llama`],parameter_size:`3B`,quantization_level:`Q4_0`}},{name:`qwen2.5:7b`,size:4096e6,digest:`demo-digest-2`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`qwen`,families:[`qwen`],parameter_size:`7B`,quantization_level:`Q4_0`}}],v=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:_[0].name,messages:[{id:`demo-msg-1`,role:`user`,content:`Hello! Can you tell me about this demo?`,timestamp:Date.now()},{id:`demo-msg-2`,role:`assistant`,content:`This is a demo of Libre WebUI! In a real deployment, I would be powered by Ollama running locally on your machine. This demo shows the beautiful interface and features without the backend connection.`,timestamp:Date.now()}],createdAt:Date.now(),updatedAt:Date.now()}],y=v(),b={theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2:3b`,systemMessage:`You are a helpful assistant.`,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},titleSettings:{autoTitle:!1,taskModel:``},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},x={...b,theme:{...b.theme},generationOptions:{...b.generationOptions},embeddingSettings:{...b.embeddingSettings},titleSettings:{...b.titleSettings},backgroundSettings:{...b.backgroundSettings}},S=()=>x,C=e=>{let t=x.backgroundSettings||b.backgroundSettings;return x={...x,...e,theme:{...x.theme,...e.theme},generationOptions:{...x.generationOptions,...e.generationOptions},embeddingSettings:{...x.embeddingSettings,...e.embeddingSettings},titleSettings:e.titleSettings?{...x.titleSettings||b.titleSettings,...e.titleSettings}:x.titleSettings,backgroundSettings:e.backgroundSettings?{...t,...e.backgroundSettings}:x.backgroundSettings},x},w={getSessions:()=>p.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n)=>p.post(`/chat/sessions`,{model:e,title:t,personaId:n}).then(e=>e.data),getSession:e=>{if(i()){let t=v().find(t=>t.id===e);return t?f(t):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return p.get(`/chat/sessions/${e}`).then(e=>e.data)},updateSession:(e,t)=>{if(i()){let n=y.findIndex(t=>t.id===e),r=y[n];if(r){let e={...r,...t,updatedAt:Date.now()};return y[n]=e,f(e)}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return p.put(`/chat/sessions/${e}`,t).then(e=>e.data)},deleteSession:e=>i()?f(null):p.delete(`/chat/sessions/${e}`).then(e=>e.data),clearAllSessions:()=>p.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(e,t,n)=>i()?f({title:n.substring(0,30)+(n.length>30?`...`:``),source:`fallback`,updatedAt:Date.now()}):p.post(`/chat/sessions/${e}/generate-title`,{model:t,message:n}).then(e=>e.data),sendMessage:(e,t,n)=>p.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>p.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(e,t,n)=>i()?f({}):p.put(`/chat/sessions/${e}/messages/${t}`,n).then(e=>e.data),generateChatResponse:(e,t,n)=>p.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,t,n)=>({subscribe:async(r,i,a)=>{try{let o=await fetch(`${c}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:t,options:n})});if(!o.ok)throw Error(`HTTP error! status: ${o.status}`);let s=o.body?.getReader();if(!s)throw Error(`No response body reader available`);let l=new TextDecoder,u=``,f=()=>{s.read().then(({done:e,value:t})=>{if(e){a?.();return}u+=l.decode(t,{stream:!0});let n=u.split(`
3
+ `);u=n.pop()||``;for(let e of n){let t=e.trim();if(t.startsWith(`data: `)){let e=t.slice(6);if(e===`[DONE]`){a?.();return}try{let t=JSON.parse(e);if(r(t),t.type===`done`||t.type===`error`){t.type===`error`?i?.(t.error):a?.();return}}catch(e){d.error(`Failed to parse SSE data:`,e)}}}f()}).catch(e=>{i?.(e instanceof Error?e:Error(String(e)))})};return f(),()=>s.cancel()}catch(e){return i?.(e instanceof Error?e:Error(String(e))),()=>{}}}}),getMessageBranches:(e,t)=>i()?f([]):p.get(`/chat/sessions/${e}/messages/${t}/branches`).then(e=>e.data),switchMessageBranch:(e,t,n)=>i()?f({}):p.post(`/chat/sessions/${e}/messages/${t}/branch`,{branchIndex:n}).then(e=>e.data),createMessageBranch:(e,t,n)=>i()?f({}):p.post(`/chat/sessions/${e}/messages/${t}/branches`,{...n}).then(e=>e.data)},T={uploadDocument:(e,t)=>{if(i())return f({id:`demo-doc-`+Date.now(),filename:e.name,fileType:e.name.endsWith(`.pdf`)?`pdf`:`txt`,size:e.size,sessionId:t,uploadedAt:Date.now()});let n=new FormData;return n.append(`document`,e),t&&n.append(`sessionId`,t),p.post(`/documents/upload`,n).then(e=>e.data)},getDocuments:e=>{if(i())return f([]);let t=e?`/documents/session/${e}`:`/documents`;return p.get(t).then(e=>e.data)},getDocument:e=>i()?f({id:e,filename:`demo-document.pdf`,fileType:`pdf`,size:1024,content:`Demo document content...`,uploadedAt:Date.now()}):p.get(`/documents/${e}`).then(e=>e.data),searchDocuments:(e,t,n)=>i()?f([]):p.post(`/documents/search`,{query:e,sessionId:t,limit:n}).then(e=>e.data),deleteDocument:e=>i()?f(void 0):p.delete(`/documents/${e}`).then(e=>e.data),getEmbeddingStatus:()=>i()?f({available:!1,model:`nomic-embed-text`,chunksWithEmbeddings:0,totalChunks:0}):p.get(`/documents/embeddings/status`).then(e=>e.data),regenerateEmbeddings:()=>i()?f(void 0):p.post(`/documents/embeddings/regenerate`).then(e=>e.data)},E={getModels:()=>i()?f([{id:`nomic-embed-text`,name:`nomic-embed-text`,description:`Ollama - Default embedding model`,provider:`ollama`,dimensions:0,isDetectedEmbedding:!0}]):p.get(`/embeddings/models`).then(e=>e.data)},D={getModels:e=>i()?f([{id:`meta-llama/Llama-3.3-70B-Instruct`,modelId:`meta-llama/Llama-3.3-70B-Instruct`,author:`meta-llama`,downloads:1e6,likes:5e3,tags:[`text-generation`,`llama`],pipeline_tag:`text-generation`,gated:!1}]):p.get(`/huggingface-hub/models`,{params:e}).then(e=>e.data),getTrending:e=>i()?f([]):p.get(`/huggingface-hub/trending`,{params:e}).then(e=>e.data),getModel:(e,t)=>i()?f({id:`${e}/${t}`,modelId:`${e}/${t}`,author:e,downloads:0,likes:0,tags:[],gated:!1}):p.get(`/huggingface-hub/models/${e}/${t}`).then(e=>e.data),getTasks:()=>i()?f([`text-generation`,`text-to-speech`,`text-to-image`]):p.get(`/huggingface-hub/tasks`).then(e=>e.data),clearCache:()=>i()?f(!0):p.post(`/huggingface-hub/cache/clear`).then(e=>e.data),getGgufFiles:(e,t)=>i()?f([{filename:`model-Q4_K_M.gguf`,size:45e8,sizeFormatted:`4.19 GB`,quantization:`Q4_K_M`,url:`https://huggingface.co/${e}/${t}/resolve/main/model-Q4_K_M.gguf`,ollamaCommand:`hf.co/${e}/${t}:Q4_K_M`}]):p.get(`/huggingface-hub/models/${e}/${t}/gguf`).then(e=>e.data),hasGgufFiles:(e,t)=>i()?f({hasGguf:!1,count:0}):p.get(`/huggingface-hub/models/${e}/${t}/has-gguf`).then(e=>e.data)},O={getModels:()=>i()?f([{model:`dall-e-3`,plugin:`openai`,config:{sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`,styles:[`vivid`,`natural`],default_style:`vivid`,max_prompt_length:4e3}}]):p.get(`/image-gen/models`).then(e=>e.data),getPlugins:()=>i()?f([{id:`openai`,name:`OpenAI DALL-E`,models:[`dall-e-3`,`dall-e-2`],config:{sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`}}]):p.get(`/image-gen/plugins`).then(e=>e.data),getConfig:e=>i()?f({sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`,styles:[`vivid`,`natural`],default_style:`vivid`,max_prompt_length:4e3}):p.get(`/image-gen/config/${e}`).then(e=>e.data),generate:e=>i()?f({images:[{url:`https://placehold.co/1024x1024/purple/white?text=Demo+Image`,revised_prompt:e.prompt}]}):p.post(`/image-gen/generate`,e).then(e=>e.data),getGallery:e=>i()?f({images:[],total:0}):p.get(`/image-gen/gallery`,{params:e}).then(e=>e.data),getGalleryImage:e=>i()?f({id:e,userId:`demo`,prompt:`Demo image prompt`,model:`dall-e-3`,imageData:`https://placehold.co/1024x1024/purple/white?text=Demo`,createdAt:Date.now()}):p.get(`/image-gen/gallery/${e}`).then(e=>e.data),deleteGalleryImage:e=>i()?f(void 0):p.delete(`/image-gen/gallery/${e}`).then(e=>e.data)},k={connected:!1,baseUrl:`http://127.0.0.1:8766`,dashboardUrl:`http://127.0.0.1:8766/dashboard`,error:`Libre Claw daemon is not connected in demo mode.`},A={status:()=>i()?f(k):p.get(`/libre-claw/status`).then(e=>e.data),dashboard:()=>i()?f({url:k.dashboardUrl}):p.get(`/libre-claw/dashboard`).then(e=>e.data),currentModel:()=>i()?f({provider:`openrouter`,model:`openrouter/auto`}):p.get(`/libre-claw/config/model`).then(e=>e.data),updateModel:(e,t,n=!1)=>i()?f({provider:e,model:t,persist_global:n}):p.patch(`/libre-claw/config/model`,{provider:e,model:t,persist_global:n}).then(e=>e.data),currentFallback:()=>i()?f({enabled:!1,routes:[]}):p.get(`/libre-claw/config/fallback`).then(e=>e.data),updateFallback:e=>i()?f(e):p.patch(`/libre-claw/config/fallback`,e).then(e=>e.data),updateTheme:(e,t=!0)=>i()?f({theme:e,label:e,persist_global:t}):p.patch(`/libre-claw/config/theme`,{theme:e,persist_global:t}).then(e=>e.data),usage:(e=``,t=250)=>{let n=new URLSearchParams({limit:String(t)});return e&&n.set(`provider`,e),i()?f({summary:{},records:[],text:``}):p.get(`/libre-claw/usage?${n.toString()}`).then(e=>e.data)},listRuns:(e=20)=>i()?f({runs:[]}):p.get(`/libre-claw/runs?limit=${e}`).then(e=>e.data),startRun:e=>{if(i()){let t=new Date().toISOString();return f({run:{run_id:`demo-${Date.now()}`,state:`queued`,title:e.message.slice(0,80)||`Libre Claw demo run`,kind:e.kind||`chat`,provider:e.provider||`openrouter`,model:e.model||`openrouter/auto`,working_directory:``,created_at:t,updated_at:t}})}return p.post(`/libre-claw/runs`,e).then(e=>e.data)},getRun:e=>i()?f({run_id:e}):p.get(`/libre-claw/runs/${encodeURIComponent(e)}`).then(e=>e.data),getEvents:(e,t=0)=>i()?f({events:[]}):p.get(`/libre-claw/runs/${encodeURIComponent(e)}/events?after=${t}`).then(e=>e.data),cancelRun:e=>i()?f({run_id:e,cancelled:!0}):p.post(`/libre-claw/runs/${encodeURIComponent(e)}/cancel`).then(e=>e.data),resolvePermission:(e,t,n)=>i()?f({run_id:e,tool_call_id:t,resolution:n}):p.post(`/libre-claw/runs/${encodeURIComponent(e)}/permissions/${encodeURIComponent(t)}`,{resolution:n}).then(e=>e.data),listAutomations:(e=50)=>i()?f({automations:[]}):p.get(`/libre-claw/automations?limit=${e}`).then(e=>e.data),createAutomation:e=>i()?f({...e,automation_id:`demo-${Date.now()}`}):p.post(`/libre-claw/automations`,e).then(e=>e.data),updateAutomation:(e,t)=>i()?f({...t,automation_id:e}):p.patch(`/libre-claw/automations/${encodeURIComponent(e)}`,t).then(e=>e.data),pauseAutomation:e=>i()?f({automation_id:e,status:`paused`}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/pause`).then(e=>e.data),resumeAutomation:e=>i()?f({automation_id:e,status:`active`}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/resume`).then(e=>e.data),runAutomationNow:e=>i()?f({automation_id:e,run:!0}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/run`).then(e=>e.data),deleteAutomation:e=>i()?f({automation_id:e,deleted:!0}):p.delete(`/libre-claw/automations/${encodeURIComponent(e)}`).then(e=>e.data)},j={checkHealth:()=>i()?f({status:`offline`},!1):p.get(`/ollama/health`).then(e=>e.data),getModels:()=>i()?f(_):p.get(`/ollama/models`).then(e=>e.data),pullModel:e=>i()?f(null,!1):p.post(`/ollama/models/pull`,{name:e}).then(e=>e.data),pullModelStream:(e,t,n,r)=>{if(i()){let e=0,r=setInterval(()=>{e+=Math.random()*20,e>=100?(e=100,t({status:`success`,total:100,completed:100,percent:100}),clearInterval(r),setTimeout(n,500)):t({status:`pulling`,total:100,completed:e,percent:Math.round(e)})},1e3);return()=>clearInterval(r)}let a=new URLSearchParams({model:e}),o=localStorage.getItem(`auth-token`);o&&a.set(`token`,o);let s=new EventSource(`${c}/ollama/pull/stream?${a.toString()}`);return s.onmessage=e=>{let i=JSON.parse(e.data);switch(i.type){case`progress`:t({status:i.status,digest:i.digest,total:i.total,completed:i.completed,percent:i.percent});break;case`complete`:s.close(),n();break;case`error`:s.close(),r(i.error);break}},s.onerror=()=>{s.close(),r(`Connection to server lost`)},()=>{s.close()}},deleteModel:e=>i()?f(null,!1):p.delete(`/ollama/models`,{params:{name:e}}).then(e=>e.data),showModel:(e,t=!1)=>{if(i()){let t=_.find(t=>t.name===e);return f(t||null,!!t)}return p.get(`/ollama/models/show`,{params:{name:e,verbose:t}}).then(e=>e.data)},createModel:e=>i()?f(null,!1):p.post(`/ollama/models`,e).then(e=>e.data),copyModel:(e,t)=>i()?f(null,!1):p.post(`/ollama/models/copy`,{source:e,destination:t}).then(e=>e.data),pushModel:e=>i()?f(null,!1):p.post(`/ollama/models/push`,{name:e}).then(e=>e.data),pullAllModels:()=>i()?f(null,!1):p.post(`/ollama/models/pull-all`).then(e=>e.data),pullAllModelsStream:(e,t,n)=>{if(i()){let n=_,r=0,i=setInterval(()=>{r++,r<=n.length&&e({current:r,total:n.length,modelName:n[r-1]?.name||`demo-model`,status:Math.random()>.1?`success`:`error`,error:Math.random()>.1?void 0:`Demo error`}),r>=n.length&&(clearInterval(i),setTimeout(t,500))},1e3);return}let r=new EventSource(`${c}/ollama/models/pull-all/stream`);r.onmessage=i=>{let a=JSON.parse(i.data);switch(a.type){case`progress`:e({current:a.current,total:a.total,modelName:a.modelName,status:a.status,error:a.error});break;case`complete`:r.close(),t();break;case`error`:r.close(),n(a.error);break}},r.onerror=()=>{r.close(),n(`Connection to server lost`)}},generateEmbeddings:e=>i()?f({embeddings:[[]]},!1):p.post(`/ollama/embed`,e).then(e=>e.data),listRunningModels:()=>i()?f([]):p.get(`/ollama/running`).then(e=>e.data),unloadModel:e=>i()?f(null):p.post(`/ollama/models/unload`,{name:e}).then(e=>e.data),unloadAllModels:()=>i()?f(null):p.post(`/ollama/models/unload-all`).then(e=>e.data),getVersion:()=>i()?f({version:`demo-mode`},!1):p.get(`/ollama/version`).then(e=>e.data),chatCompletion:e=>i()?f({message:{content:`Demo response`,role:`assistant`}},!1):p.post(`/ollama/chat`,e).then(e=>e.data),checkBlobExists:e=>i()?Promise.resolve(!1):p.head(`/ollama/blobs/${e}`).then(()=>!0).catch(()=>!1),pushBlob:(e,t)=>i()?f(null,!1):p.post(`/ollama/blobs/${e}`,t,{headers:{"Content-Type":`application/octet-stream`}}).then(e=>e.data),generateLegacyEmbeddings:e=>i()?f({embedding:[]},!1):p.post(`/ollama/embeddings`,e).then(e=>e.data),getLibraryModels:e=>{if(i())return e?.category===`cloud`?f([{name:`gpt-oss:cloud`,description:`Demo cloud model using Ollama cloud naming`,category:`cloud`,sizes:[`cloud`],pulls:`Cloud`,tags:[`cloud`]}]):f([{name:`llama3.2`,description:`Meta's latest Llama model`,category:`general`,sizes:[`1b`,`3b`],pulls:`50M+`,tags:[`general`]},{name:`deepseek-r1`,description:`Open reasoning model`,category:`reasoning`,sizes:[`7b`,`14b`,`32b`],pulls:`200M+`,tags:[`reasoning`]}]);let t=new URLSearchParams;e?.search&&t.set(`search`,e.search),e?.sort&&t.set(`sort`,e.sort),e?.category&&t.set(`category`,e.category);let n=t.toString();return p.get(`/ollama/library${n?`?${n}`:``}`).then(e=>e.data)}},M=[[`#2563eb`,`#7c3aed`],[`#0891b2`,`#2563eb`],[`#0f766e`,`#2563eb`],[`#be123c`,`#7c3aed`],[`#ff7b52`,`#dc2626`]],ee=e=>{let t=0;for(let n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)},N=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`),P=e=>{let t=e.trim().split(/[\s._-]+/).filter(Boolean);return t.length===0?`AI`:t.slice(0,2).map(e=>e[0]?.toUpperCase()).join(``)||`AI`},F=(e,t=128)=>{let n=e.trim()||`AI Persona`,r=ee(n),[i,a]=M[r%M.length],o=N(P(n)),s=`persona-avatar-${r}-${t}`,c=t>=96?44:24,l=`
4
+ <svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 ${t} ${t}" role="img" aria-label="${N(n)} avatar">
5
+ <defs>
6
+ <linearGradient id="${s}" x1="0" y1="0" x2="1" y2="1">
7
+ <stop offset="0%" stop-color="${i}" />
8
+ <stop offset="100%" stop-color="${a}" />
9
+ </linearGradient>
10
+ </defs>
11
+ <rect width="${t}" height="${t}" rx="${Math.round(t*.22)}" fill="url(#${s})" />
12
+ <circle cx="${t*.22}" cy="${t*.22}" r="${t*.26}" fill="rgba(255,255,255,0.16)" />
13
+ <text x="50%" y="52%" dominant-baseline="middle" text-anchor="middle" fill="white" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="${c}" font-weight="700">${o}</text>
14
+ </svg>
15
+ `;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(l)}`},I=(e,t=128)=>e.avatar?.trim()||F(e.name,t),L=(e,t,n=128)=>{e.onerror=null,e.src=F(t,n)},R={getPersonas:()=>i()?f([{id:`demo-1`,user_id:`default`,name:`Creative Assistant`,description:`Helpful assistant for creative tasks`,model:`llama3.3:latest`,parameters:{temperature:.8,top_p:.9,context_window:4096,system_prompt:`You are a creative and helpful assistant. Provide thoughtful and engaging responses.`},avatar:F(`Creative Assistant`,128),created_at:Date.now()-864e5,updated_at:Date.now()-864e5},{id:`demo-2`,user_id:`default`,name:`Research Assistant`,description:`Academic assistant for research and learning`,model:`qwen3:7b`,parameters:{temperature:.3,top_p:.8,context_window:8192,system_prompt:`You are a knowledgeable research assistant. Provide detailed, informative explanations.`},avatar:F(`Research Assistant`,128),created_at:Date.now()-1728e5,updated_at:Date.now()-1728e5}]):p.get(`/personas`).then(e=>e.data),getPersona:e=>i()?f({id:e,user_id:`default`,name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()}):p.get(`/personas/${e}`).then(e=>e.data),createPersona:e=>i()?f({id:`demo-`+Date.now(),user_id:`default`,...e,created_at:Date.now(),updated_at:Date.now()}):p.post(`/personas`,e).then(e=>e.data),updatePersona:(e,t)=>i()?f({id:e,user_id:`default`,name:t.name||`Updated Sample Assistant`,description:t.description,model:t.model||`llama3.2:latest`,parameters:t.parameters||{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},avatar:t.avatar,background:t.background,created_at:Date.now()-864e5,updated_at:Date.now()}):p.put(`/personas/${e}`,t).then(e=>e.data),deletePersona:e=>i()?f(void 0):p.delete(`/personas/${e}`).then(e=>e.data),exportPersona:e=>{if(i()){let e={name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,params:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},exportedAt:Date.now(),version:`1.0.0`};return Promise.resolve(e)}return p.get(`/personas/${e}/export`).then(e=>e.data)},importPersona:e=>i()?f({id:`demo-imported-`+Date.now(),user_id:`default`,name:e.name,description:e.description,model:e.model,parameters:e.params,avatar:e.avatar,background:e.background,created_at:Date.now(),updated_at:Date.now(),embedding_model:e.embedding_model,memory_settings:e.memory_settings,mutation_settings:e.mutation_settings}):p.post(`/personas/import`,e).then(e=>e.data),getPersonasCount:()=>i()?f({count:2}):p.get(`/personas/stats/count`).then(e=>e.data),getDefaultParameters:()=>i()?f({temperature:.7,top_p:.9,top_k:40,context_window:4096,max_tokens:1024,system_prompt:``,repeat_penalty:1.1,presence_penalty:0,frequency_penalty:0}):p.get(`/personas/defaults/parameters`).then(e=>e.data),getMemoryStatus:e=>i()?f({status:`active`,memory_count:42,last_backup:Date.now()-864e5,size_mb:2.3}):p.get(`/personas/${e}/memory/status`).then(e=>e.data),wipeMemories:e=>i()?f({deleted_count:42}):p.delete(`/personas/${e}/memory`).then(e=>e.data),backupPersona:e=>{if(i()){let t=JSON.stringify({persona_id:e,backup_date:new Date().toISOString(),data:`demo backup data`});return Promise.resolve(new Blob([t],{type:`application/json`}))}return p.get(`/personas/${e}/backup`,{responseType:`blob`}).then(e=>e.data)},exportPersonaDNA:e=>{if(i()){let t=JSON.stringify({persona_id:e,export_date:new Date().toISOString(),dna:`demo DNA data`,memories:[],learned_behaviors:{}});return Promise.resolve(new Blob([t],{type:`application/json`}))}return p.get(`/personas/${e}/export/dna`,{responseType:`blob`}).then(e=>e.data)},importPersonaDNA:e=>{if(i())return f({id:`demo-dna-`+Date.now(),user_id:`default`,name:`Imported Persona`,description:`Persona imported from DNA`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()});let t=new FormData;return t.append(`dnaFile`,e),p.post(`/personas/import/dna`,t).then(e=>e.data)},downloadPersona:async(e,t)=>{try{let n=await R.exportPersona(e),r=new Blob([JSON.stringify(n,null,2)],{type:`application/json`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${t}.json`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}catch(e){throw d.error(`Error while downloading persona:`,e),Error(`Failed to download persona: ${e instanceof Error?e.message:String(e)}`)}}},z={getAllPlugins:()=>i()?f([]):p.get(`/plugins`).then(e=>e.data),uploadPlugin:e=>{if(i())return f({},!1);let t=new FormData;return t.append(`plugin`,e),p.post(`/plugins/upload`,t).then(e=>e.data)},installPlugin:e=>i()?f({},!1):p.post(`/plugins/install`,e).then(e=>e.data),updatePlugin:(e,t)=>i()?f({},!1):p.put(`/plugins/${e}`,t).then(e=>e.data),deletePlugin:e=>i()?f(void 0):p.delete(`/plugins/${e}`).then(e=>e.data),activatePlugin:e=>i()?f({},!1):p.post(`/plugins/activate/${e}`).then(e=>e.data),deactivatePlugin:e=>{if(i())return f(void 0);let t=e?`/plugins/deactivate/${e}`:`/plugins/deactivate`;return p.post(t).then(e=>e.data)},getActivePlugin:()=>i()?f(null):p.get(`/plugins/active`).then(e=>e.data),getPluginStatus:()=>i()?f([]):p.get(`/plugins/status`).then(e=>e.data),exportPlugin:e=>i()?Promise.resolve(new Blob([`{}`],{type:`application/json`})):p.get(`/plugins/${e}/export`,{responseType:`blob`}).then(e=>e.data),getCredentials:()=>i()?f([]):p.get(`/plugins/credentials/all`).then(e=>e.data),setApiKey:(e,t)=>i()?f(!1,!1):p.post(`/plugins/${e}/credentials`,{api_key:t}).then(e=>e.data),deleteApiKey:e=>i()?f(!1,!1):p.delete(`/plugins/${e}/credentials`).then(e=>e.data),checkApiKey:e=>i()?f(!1):p.get(`/plugins/${e}/credentials/check`).then(e=>e.data),getVariables:e=>i()?f({}):p.get(`/plugins/${e}/variables`).then(e=>e.data),setVariables:(e,t)=>i()?f(!0):p.put(`/plugins/${e}/variables`,{variables:t}).then(e=>e.data),resetVariables:e=>i()?f(!0):p.delete(`/plugins/${e}/variables`).then(e=>e.data)},B={getPreferences:()=>i()?f(S()):p.get(`/preferences`).then(e=>e.data),updatePreferences:e=>i()?f(C(e)):p.put(`/preferences`,e).then(e=>e.data),setDefaultModel:e=>i()?f(C({defaultModel:e})):p.put(`/preferences/default-model`,{model:e}).then(e=>e.data),setSystemMessage:e=>i()?f(C({systemMessage:e})):p.put(`/preferences/system-message`,{message:e}).then(e=>e.data),setGenerationOptions:e=>i()?f(C({generationOptions:e})):p.put(`/preferences/generation-options`,e).then(e=>e.data),resetGenerationOptions:()=>i()?f(C({generationOptions:b.generationOptions})):p.post(`/preferences/generation-options/reset`).then(e=>e.data),setEmbeddingSettings:e=>i()?f(C({embeddingSettings:e})):p.put(`/preferences/embedding-settings`,e).then(e=>e.data),resetEmbeddingSettings:()=>i()?f(C({embeddingSettings:b.embeddingSettings})):p.post(`/preferences/embedding-settings/reset`).then(e=>e.data),importData:(e,t=`replace`)=>i()?f({theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2`,systemMessage:`You are a helpful assistant.`,generationOptions:{},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},showUsername:!1,workRemoteProviderDisclosureDismissed:!1}):p.post(`/preferences/import`,{data:e,mergeStrategy:t}).then(e=>e.data)},V=new Set([`snapshot`,`run_state`,`reasoning_delta`,`assistant_delta`,`tool_call`,`tool_result`,`usage`,`skill_loaded`,`error`,`done`]),H=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,U=e=>{if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=Number(e);if(Number.isFinite(t))return t;let n=Date.parse(e);if(Number.isFinite(n))return n}return Date.now()},W=(e,t,n,r,i)=>{let a=H(e);if(!a)return;let o=Number(a.id??t),s=String(a.type??n??``),c=String(a.taskId??r),l=String(a.runId??i);if(!Number.isSafeInteger(o)||o<0||!V.has(s)||c!==r||l!==i)return;let u=a.data;return{id:o,type:s,taskId:c,runId:l,timestamp:U(a.timestamp),data:H(u)||(u===void 0?{}:{content:u})}},G=(e,t,n)=>{let r,i,a=[];for(let t of e.split(`
16
+ `)){if(!t||t.startsWith(`:`))continue;let e=t.indexOf(`:`),n=e===-1?t:t.slice(0,e),o=e===-1?``:t.slice(e+1),s=o.startsWith(` `)?o.slice(1):o;n===`id`&&(r=s),n===`event`&&(i=s),n===`data`&&a.push(s)}if(a.length===0)return;let o=a.join(`
17
+ `);if(o===`[DONE]`)return W({id:r,type:`done`,taskId:t,runId:n,timestamp:Date.now(),data:{}},r,i,t,n);try{return W(JSON.parse(o),r,i,t,n)}catch{return}},K=class{constructor(e,t,r){n(this,`taskId`,void 0),n(this,`runId`,void 0),n(this,`onEvent`,void 0),n(this,`buffer`,``),this.taskId=e,this.runId=t,this.onEvent=r}push(e){e&&(this.buffer+=e,this.drain())}finish(e=``){if(this.buffer+=e,this.drain(),!this.buffer.trim()){this.buffer=``;return}let t=G(this.buffer.replace(/\r\n?/g,`
18
+ `),this.taskId,this.runId);this.buffer=``,t&&this.onEvent(t)}drain(){let e=/\r?\n\r?\n/.exec(this.buffer);for(;e?.index!==void 0;){let t=this.buffer.slice(0,e.index).replace(/\r\n?/g,`
19
+ `);this.buffer=this.buffer.slice(e.index+e[0].length);let n=G(t,this.taskId,this.runId);n&&this.onEvent(n),e=/\r?\n\r?\n/.exec(this.buffer)}}},q=async e=>{try{let t=await e.json(),n=typeof t.error==`string`?t.error:typeof t.message==`string`?t.message:void 0;if(n)return Error(n)}catch{}return Error(`Work event stream failed with status ${e.status}.`)},J=async({taskId:e,runId:t,after:n,signal:r,onEvent:i})=>{let a=localStorage.getItem(`auth-token`),o=new URL(`${c}/work/tasks/${encodeURIComponent(e)}/runs/${encodeURIComponent(t)}/events`,window.location.origin);o.searchParams.set(`after`,String(Math.max(0,Math.trunc(n))));let s=await fetch(o,{method:`GET`,headers:{Accept:`text/event-stream`,...a?{Authorization:`Bearer ${a}`}:{}},cache:`no-store`,credentials:`same-origin`,signal:r});if(!s.ok)throw await q(s);if(!s.body)throw Error(`Work event stream has no response body.`);let l=s.body.getReader(),u=new TextDecoder,d=new K(e,t,i);try{for(;!r.aborted;){let{done:e,value:t}=await l.read();if(e)break;d.push(u.decode(t,{stream:!0}))}d.finish(u.decode())}finally{l.releaseLock()}},Y=e=>`/work/tasks/${encodeURIComponent(e)}`,X={capabilities:()=>p.get(`/work/capabilities`).then(e=>e.data),listTasks:()=>p.get(`/work/tasks`).then(e=>e.data),createTask:e=>p.post(`/work/tasks`,e).then(e=>e.data),getTask:e=>p.get(Y(e)).then(e=>e.data),getMessages:(e,t,n=200)=>p.get(`${Y(e)}/messages`,{params:{before:t,limit:n}}).then(e=>e.data),updateTask:(e,t)=>p.patch(Y(e),t).then(e=>e.data),deleteTask:e=>p.delete(Y(e)).then(e=>e.data),startRun:(e,t)=>p.post(`${Y(e)}/runs`,t).then(e=>e.data),cancelRun:e=>p.post(`${Y(e)}/cancel`).then(e=>e.data),streamRunEvents:e=>J(e),listFiles:(e,t=``)=>p.get(`${Y(e)}/files`,{params:{path:t}}).then(e=>{let t=e.data;return t.data&&!Array.isArray(t.data)?{...t,data:t.data.entries}:t}),getFile:(e,t)=>p.get(`${Y(e)}/file`,{params:{path:t}}).then(e=>e.data),saveFile:(e,t,n,r)=>p.put(`${Y(e)}/file`,{content:n,expectedUpdatedAt:r},{params:{path:t}}).then(e=>e.data),startPreview:(e,t)=>p.post(`${Y(e)}/preview/start`,t?{command:t}:{}).then(e=>e.data),stopPreview:e=>p.post(`${Y(e)}/preview/stop`).then(e=>e.data)};function Z(e,t,n){if(t)return e.find(e=>e.model===t&&(!n||e.plugin===n))}function Q(e,t,n){return Z(e,t,n)||e[0]}function te(e){return`${encodeURIComponent(e.plugin)}::${encodeURIComponent(e.model)}`}var $={getModels:()=>i()?f([{model:`tts-1`,plugin:`openai`,config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096}}]):p.get(`/tts/models`).then(e=>e.data),getPlugins:()=>i()?f([{id:`openai`,name:`OpenAI GPT`,models:[`tts-1`,`tts-1-hd`],config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`}}]):p.get(`/tts/plugins`).then(e=>e.data),getVoices:e=>i()?f({voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096,supports_streaming:!1}):p.get(`/tts/voices/${e}`).then(e=>e.data),generateBase64:e=>{if(i())return f({audio:``,format:e.response_format||`mp3`,mimeType:`audio/mpeg`,size:0});let t={...e,pluginId:e.pluginId||void 0};return p.post(`/tts/generate-base64`,t).then(e=>e.data)},generate:async e=>{if(i())return new Blob([],{type:`audio/mpeg`});let t={...e,pluginId:e.pluginId||void 0};return(await p.post(`/tts/generate`,t,{responseType:`blob`})).data},speak:async(e,t={})=>{try{t.onStart?.();let n=await $.generateBase64({model:t.model||`tts-1`,pluginId:t.pluginId,input:e,voice:t.voice,speed:t.speed,response_format:t.responseFormat});if(!n.success||!n.data?.audio)throw Error(n.message||`Failed to generate speech`);let r=`data:${n.data.mimeType};base64,${n.data.audio}`,i=new Audio(r);return i.onended=()=>t.onEnd?.(),i.onerror=()=>t.onError?.(Error(`Audio playback failed`)),await i.play(),i}catch(e){let n=e instanceof Error?e:Error(`Unknown error`);return t.onError?.(n),null}}},ne=e({personaApi:()=>R,preferencesApi:()=>B});export{E as _,$ as a,g as b,z as c,L as d,j as f,T as g,D as h,Q as i,R as l,O as m,Z as n,X as o,A as p,te as r,B as s,ne as t,I as u,w as v,c as x,h as y};