@kimiclaw/cli 1.0.44 → 1.0.45

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 (75) hide show
  1. package/README.md +17 -19
  2. package/package.json +9 -9
  3. package/web/dist/assets/{AssistantsView-Y4TXobGE.js → AssistantsView-Y3nFezhd.js} +1 -1
  4. package/web/dist/assets/AutomationView-bf7_zU_p.js +4 -0
  5. package/web/dist/assets/Button-B43HsIQ3.js +1 -0
  6. package/web/dist/assets/{ChannelConfigView-WJ-zUV8p.js → ChannelConfigView---Dwl3Fk.js} +3 -3
  7. package/web/dist/assets/ChartsView-Dw6G-jf3.js +1 -0
  8. package/web/dist/assets/{ConnectorsView-DaHmxnGE.js → ConnectorsView-BWvdrpyK.js} +2 -2
  9. package/web/dist/assets/{DiffPreview-D8tIj_aF.js → DiffPreview-WQihq3bK.js} +57 -56
  10. package/web/dist/assets/{FileContextMenu-C5WYeBNu.js → FileContextMenu-CyjXlSHp.js} +1 -1
  11. package/web/dist/assets/FileTreeView-Cafy33nT.js +1 -0
  12. package/web/dist/assets/HookConfigView-D-lASVju.js +2 -0
  13. package/web/dist/assets/InboxView-BWajw-Yx.js +1 -0
  14. package/web/dist/assets/InputArea-CSqaA55j.js +31 -0
  15. package/web/dist/assets/Install-ClEm4oGX.js +2 -0
  16. package/web/dist/assets/MemoryView-DLri75dm.js +1 -0
  17. package/web/dist/assets/ModelsView-BBLUMzR5.js +1 -0
  18. package/web/dist/assets/PluginsView-C-fnbDGZ.js +1 -0
  19. package/web/dist/assets/ProjectsView-BruI2W_l.js +1 -0
  20. package/web/dist/assets/{SessionGrid-BQSrCDqQ.js → SessionGrid-7GLpwn6d.js} +4 -4
  21. package/web/dist/assets/SettingsModal-cc9Qu2QU.js +4 -0
  22. package/web/dist/assets/SkillsView-Bf-2-U_q.js +1 -0
  23. package/web/dist/assets/TemplatesTab-CKul8nbL.js +2 -0
  24. package/web/dist/assets/{ToolsView-CjdYiaNz.js → ToolsView-D_aluOsK.js} +1 -1
  25. package/web/dist/assets/WorkspaceDirPicker-Z42YqE4a.js +5 -0
  26. package/web/dist/assets/{agentIconSet-CDeMxTHf.js → agentIconSet-Cqhm4UOl.js} +1 -1
  27. package/web/dist/assets/api-BW4-5gtM.js +1 -0
  28. package/web/dist/assets/chatStore-D8Zzr1hE.js +242 -0
  29. package/web/dist/assets/cn-CoHJgTJ5.js +1 -0
  30. package/web/dist/assets/{common-CPZxdYLs.js → common-CP2UB8TN.js} +99 -99
  31. package/web/dist/assets/icons-CittejKL.js +1 -0
  32. package/web/dist/assets/imageUrl-BVgcEm7e.js +2 -0
  33. package/web/dist/assets/index-CEUbTcNL.css +1 -0
  34. package/web/dist/assets/index-CxrzleFg.js +122 -0
  35. package/web/dist/assets/{markdown-Cps-36Z5.js → markdown-DZQBOzWk.js} +1 -1
  36. package/web/dist/assets/{panels-DCwx2Pbu.js → panels-CuDz4aqU.js} +1 -1
  37. package/web/dist/assets/projectsStore-B7fdKRzl.js +1 -0
  38. package/web/dist/assets/{react-vendor-CXI113IS.js → react-vendor-BEA-EtI-.js} +1 -1
  39. package/web/dist/assets/{settingsStore-BSdi9gNd.js → settingsStore-DYqiXodu.js} +1 -1
  40. package/web/dist/assets/src-55YckF5W.js +2 -0
  41. package/web/dist/assets/{state-pOTP5BEk.js → state-A4wJ8QgR.js} +1 -1
  42. package/web/dist/assets/{statusAxesRefresh--2evRuAU.js → statusAxesRefresh-BBqszCp-.js} +1 -1
  43. package/web/dist/assets/sttLanguages-jnSk4aqg.js +6 -0
  44. package/web/dist/assets/threadStore-CQi4OzSe.js +1 -0
  45. package/web/dist/assets/useConfirm-kTv3x0H6.js +1 -0
  46. package/web/dist/assets/{useTranslation-gGKZZfux.js → useTranslation-2BGEBvJE.js} +1 -1
  47. package/web/dist/assets/websocket-DCs7f54y.js +1 -0
  48. package/web/dist/assets/whatsNewStore-DoCQvcMq.js +1 -0
  49. package/web/dist/index.html +27 -23
  50. package/web/dist/assets/AutomationView-DfAF2L92.js +0 -3
  51. package/web/dist/assets/Button-D-g7PgYh.js +0 -1
  52. package/web/dist/assets/ChartsView-CSAfGqTC.js +0 -1
  53. package/web/dist/assets/FileTreeView-B7IN0KmE.js +0 -1
  54. package/web/dist/assets/HookConfigView-9gqvrRhQ.js +0 -2
  55. package/web/dist/assets/InboxView-BcEfijbj.js +0 -1
  56. package/web/dist/assets/InputArea-D5F91Uwk.js +0 -14
  57. package/web/dist/assets/Install-Cuelo0If.js +0 -2
  58. package/web/dist/assets/MemoryView-BvZSh5-T.js +0 -1
  59. package/web/dist/assets/ModelsView-BgvMN8xv.js +0 -1
  60. package/web/dist/assets/PluginsView-C3d6e8vV.js +0 -1
  61. package/web/dist/assets/ProjectsView-CM7GOsoK.js +0 -1
  62. package/web/dist/assets/SettingsModal-BvGXq5EE.js +0 -4
  63. package/web/dist/assets/SkillsView-87kGRliE.js +0 -1
  64. package/web/dist/assets/TemplatesTab-8MLwVNwV.js +0 -1
  65. package/web/dist/assets/api-ZQf0Ys8y.js +0 -1
  66. package/web/dist/assets/icons-B8Ngx6rM.js +0 -1
  67. package/web/dist/assets/imageUrl-CrQM4gmf.js +0 -74
  68. package/web/dist/assets/index-Bm7r92T3.css +0 -1
  69. package/web/dist/assets/index-STsyoFCk.js +0 -145
  70. package/web/dist/assets/src-BK8SoTFV.js +0 -1
  71. package/web/dist/assets/sttLanguages-BPcOF0nQ.js +0 -2
  72. package/web/dist/assets/useConfirm-CQjBnYuP.js +0 -1
  73. package/web/dist/assets/websocket-CeKJTCdp.js +0 -1
  74. package/web/dist/assets/whatsNewStore-C0hbStfc.js +0 -1
  75. package/web/dist/assets/workspaceSemantics-CW8ytHq2.js +0 -3
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{A as t,Er as n,Ir as r,Jn as i,Or as a,Tr as o,Wn as s,Y as c,a as l,dt as u,ft as d,g as f,in as p,it as m,n as h,ni as g,o as _,v,yr as y,yt as ee}from"./icons-B8Ngx6rM.js";import{t as te}from"./useTranslation-gGKZZfux.js";import{i as b,r as x,t as S}from"./Button-D-g7PgYh.js";import{t as C}from"./src-BK8SoTFV.js";import{l as w}from"./workspaceSemantics-CW8ytHq2.js";import{t as T}from"./api-ZQf0Ys8y.js";import{I as E}from"./markdown-Cps-36Z5.js";import{r as ne,t as re}from"./useConfirm-CQjBnYuP.js";import{c as ie,d as ae,f as oe}from"./common-CPZxdYLs.js";import{_t as D,gt as se,vt as O}from"./index-STsyoFCk.js";var k=e(g(),1),A=E();function j(e){return e==null?``:String(e)}function ce({provider:e,modelId:t,current:n,catalog:r,onSaved:i,className:a}){let{t:o}=te(),[s,c]=(0,k.useState)(!1),[l,u]=(0,k.useState)({input:j(n?.input),output:j(n?.output),cacheRead:j(n?.cacheRead),cacheWrite:j(n?.cacheWrite)}),d=(0,k.useRef)(!1),f=`${n?.input??``}|${n?.output??``}|${n?.cacheRead??``}|${n?.cacheWrite??``}`;(0,k.useEffect)(()=>{d.current||u({input:j(n?.input),output:j(n?.output),cacheRead:j(n?.cacheRead),cacheWrite:j(n?.cacheWrite)})},[f]);let p=(0,k.useMemo)(()=>(r.input??0)>0||(r.output??0)>0?{input:String(r.input),output:String(r.output),cacheRead:String(r.cacheRead||r.input),cacheWrite:String(r.cacheWrite||r.input)}:{input:`—`,output:`—`,cacheRead:`—`,cacheWrite:`—`},[r.input,r.output,r.cacheRead,r.cacheWrite]),m=async()=>{let r={};for(let e of[`input`,`output`,`cacheRead`,`cacheWrite`]){let t=l[e].trim();if(t===``)continue;let n=Number(t);if(!Number.isFinite(n)||n<0){b.error(o(`models.priceInvalid`,{field:o(`models.price_${e}`)}));return}r[e]=n}let a=Object.keys(r).length===0;if((n?.input??void 0)!==r.input||(n?.output??void 0)!==r.output||(n?.cacheRead??void 0)!==r.cacheRead||(n?.cacheWrite??void 0)!==r.cacheWrite){c(!0),d.current=!0;try{let n=await T.models.update(e,t,{model:{pricing:a?null:r}});if(n.success===!1)throw Error(n.error||o(`models.priceSaveFailed`));b.success(o(`models.priceSaved`,{model:t})),i?.()}catch(e){b.error(e instanceof Error?e.message:o(`models.priceSaveFailed`))}finally{c(!1),window.setTimeout(()=>{d.current=!1},0)}}};return(0,A.jsxs)(`div`,{className:x(`flex flex-wrap items-center gap-2 text-xs`,a),children:[(0,A.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap max-md:whitespace-normal`,title:o(`models.priceHint`),children:o(`models.priceOverride`)}),[`input`,`output`,`cacheRead`,`cacheWrite`].map(e=>(0,A.jsxs)(`label`,{className:`flex items-center gap-1`,children:[(0,A.jsx)(`span`,{className:`text-dark-tertiary whitespace-nowrap`,children:o(`models.price_${e}`)}),(0,A.jsx)(`input`,{type:`number`,min:0,step:`0.001`,inputMode:`decimal`,value:l[e],placeholder:p[e],disabled:s,onChange:t=>u(n=>({...n,[e]:t.target.value})),onBlur:()=>void m(),onKeyDown:e=>{e.key===`Enter`&&m()},className:x(`w-20 rounded border bg-dark-bg px-1.5 py-0.5 text-xs text-dark-text disabled:opacity-50`,l[e].trim()===``?`border-dark-border`:`border-accent-yellow`),title:`${o(`models.price_${e}`)} · ${o(`models.pricePerMillion`)}`})]},e)),(0,A.jsx)(`span`,{className:`text-badge text-dark-tertiary`,children:o(`models.pricePerMillion`)})]})}function le(e){return e==null?``:String(e)}function ue(e){let t=e.trim();if(t===``)return null;let n=Number(t);return!Number.isFinite(n)||n<=0?`invalid`:Math.floor(n)}function de({provider:e,modelId:t,current:n,defaults:r,onSaved:i,className:a}){let{t:o}=te(),[s,c]=(0,k.useState)(!1),[l,u]=(0,k.useState)({maxInput:le(n?.contextWindow),maxOutput:le(n?.maxTokens)}),d=(0,k.useRef)(!1),f=`${n?.contextWindow??``}|${n?.maxTokens??``}`;(0,k.useEffect)(()=>{d.current||u({maxInput:le(n?.contextWindow),maxOutput:le(n?.maxTokens)})},[f]);let p=async()=>{let r=ue(l.maxInput),a=ue(l.maxOutput);if(r===`invalid`||a===`invalid`)b.error(o(`models.budgetInvalid`,{field:o(r===`invalid`?`models.maxInputTokensLabel`:`models.maxOutputTokensLabel`)}));else if((n?.contextWindow??null)!==r||(n?.maxTokens??null)!==a){c(!0),d.current=!0;try{let n=await T.models.update(e,t,{model:{contextWindow:r,maxTokens:a}});if(n.success===!1)throw Error(n.error||o(`models.budgetSaveFailed`));b.success(o(`models.budgetSaved`,{model:t})),i?.()}catch(e){b.error(e instanceof Error?e.message:o(`models.budgetSaveFailed`))}finally{c(!1),window.setTimeout(()=>{d.current=!1},0)}}},m=[{key:`maxInput`,label:o(`models.maxInputTokensLabel`),title:o(`models.maxInputTokensTitle`),placeholder:String(r.input)},{key:`maxOutput`,label:o(`models.maxOutputTokensLabel`),title:o(`models.maxOutputTokensTitle`),placeholder:String(r.output)}];return(0,A.jsxs)(`div`,{className:x(`flex flex-wrap items-center gap-2 text-xs`,a),children:[(0,A.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap`,children:o(`models.budgetLabel`)}),m.map(e=>(0,A.jsxs)(`label`,{className:`flex items-center gap-1`,children:[(0,A.jsx)(`span`,{className:`text-dark-tertiary whitespace-nowrap`,children:e.label}),(0,A.jsx)(`input`,{type:`number`,min:1,step:`1`,inputMode:`numeric`,value:l[e.key],placeholder:e.placeholder,disabled:s,onChange:t=>u(n=>({...n,[e.key]:t.target.value})),onBlur:()=>void p(),onKeyDown:e=>{e.key===`Enter`&&p()},className:x(`w-24 rounded border bg-dark-bg px-1.5 py-0.5 text-xs text-dark-text disabled:opacity-50`,l[e.key].trim()===``?`border-dark-border`:`border-accent-yellow`),title:`${e.title} ${o(`models.budgetBlankHint`)}`})]},e.key)),(0,A.jsx)(`span`,{className:`text-badge text-dark-tertiary`,children:o(`models.budgetBlankHint`)})]})}function fe({modelId:e,provider:t,className:n}){let{t:r}=te(),i=ie(e=>e.kinds),a=ie(e=>e.entries),o=ie(e=>e.saving),s=ie(e=>e.saveEntry),c=ie(e=>e.load);if((0,k.useEffect)(()=>{c()},[c]),i.length===0)return null;let l=e=>{let t=i.find(t=>t.id===e);return t?.labelKey?r(t.labelKey):e},u=n=>n?.model?n.model===`${t}/${e}`||n.model===`${t}:${e}`?!0:n.provider&&n.provider!==t?!1:n.model===e:!1,d=async n=>{let i=a[n],o=u(i),c=i?.model,d={...i??{}};o?(delete d.model,delete d.provider):(d.model=`${t}/${e}`,d.provider=t);let f=Object.values(d).some(e=>e!==void 0);await s(n,f?d:null)&&(o?b.success(r(`models.kindUnboundToast`,{kind:l(n),model:e})):c&&c!==e?b.success(r(`models.kindRebindToast`,{kind:l(n),from:c,to:e})):b.success(r(`models.kindBoundToast`,{kind:l(n),model:e})))};return(0,A.jsxs)(`div`,{className:x(`flex flex-wrap items-center gap-1.5 text-xs`,n),children:[(0,A.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap max-md:whitespace-normal`,title:r(`models.kindTagsHint`),children:r(`models.kindTags`)}),i.map(e=>{let t=a[e.id],n=u(t),i=!n&&t?.model?t.model:null;return(0,A.jsx)(`button`,{type:`button`,disabled:o,onClick:()=>void d(e.id),title:i?r(`models.kindTakenHint`,{kind:l(e.id),model:i}):r(`models.kindTagsHint`),className:x(`px-1.5 py-0.5 rounded border transition-colors disabled:opacity-50`,n?`bg-accent-blue/20 border-accent-blue text-accent-blue font-medium`:i?`bg-dark-bg border-dark-border text-dark-tertiary`:`bg-dark-bg border-dark-border text-dark-muted hover:border-accent-blue/60 hover:text-dark-text`),children:l(e.id)},e.id)})]})}var M=46,pe=140,me=22,N=216,he=[{fill:`fill-accent-blue`,dot:`bg-accent-blue`},{fill:`fill-accent-purple`,dot:`bg-accent-purple`},{fill:`fill-accent-cyan`,dot:`bg-accent-cyan`},{fill:`fill-accent-green`,dot:`bg-accent-green`},{fill:`fill-accent-yellow`,dot:`bg-accent-yellow`},{fill:`fill-accent-orange`,dot:`bg-accent-orange`}],P={fill:`fill-dark-tertiary`,dot:`bg-dark-tertiary`},ge={fill:`fill-dark-muted`,dot:`bg-dark-muted`},_e={fill:`fill-accent-blue`,dot:`bg-accent-blue`};function F({points:e,showValueLabels:t=!1,showTokenLabels:n=!1}){let{t:r}=te(),[i,a]=(0,k.useState)(null),o=(0,k.useMemo)(()=>{let t=new Map;for(let n of e)for(let e of n.models??[])t.set(e.modelId,(t.get(e.modelId)??0)+e.totalTokens);return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e])=>e)},[e]),s=o.length>0,c=(0,k.useMemo)(()=>{let e=new Map;return o.slice(0,he.length).forEach((t,n)=>{let r=he[n];r&&e.set(t,r)}),t=>{let n=t.models??[];if(n.length===0)return[{key:ge.fill,label:r(`insights.chartModelUnknown`),tokens:t.totalTokens,costDollars:t.costDollars,requests:t.requests,color:ge}];let i=[],a=null,o=0;for(let t of n){o+=t.totalTokens;let n=e.get(t.modelId);n?i.push({key:t.modelId,label:t.modelId,tokens:t.totalTokens,costDollars:t.costDollars,requests:t.requestCount,color:n}):(a||={key:`__rest`,label:r(`insights.chartModelRest`),tokens:0,costDollars:0,requests:0,color:P},a.tokens+=t.totalTokens,a.costDollars+=t.costDollars,a.requests+=t.requestCount)}a&&i.push(a);let s=t.totalTokens-o;return s>0&&i.push({key:`__unknown`,label:r(`insights.chartModelUnknown`),tokens:s,costDollars:0,requests:0,color:ge}),i.sort((e,t)=>t.tokens-e.tokens)}},[o,r]);if(e.length===0)return(0,A.jsx)(`div`,{className:`flex h-32 items-center justify-center text-xs text-dark-muted`,children:r(`insights.noUsageData`)});let l=+!!n+ +!!t,u=pe-(l===0?16:l===1?20:28)-me,d=Math.max(...e.map(e=>e.totalTokens),1),f=Math.max(...e.filter(e=>e.priced).map(e=>e.costDollars),0),p=e.length*M,m=e=>e<=0?0:Math.max(2,e/d*u),h=e=>f<=0?118:118-e/f*u,g=[],_=!1;e.forEach((e,t)=>{let n=t*M+M/2;if(!e.priced){_=!1;return}let r=h(e.costDollars);g.push(`${_?`L`:`M`} ${n.toFixed(1)} ${r.toFixed(1)}`),_=!0});let v=i?e.findIndex(e=>e.day===i):-1,y=v>=0?e[v]:null,ee=v>=0?v*M+M/2:0,b=Math.max(0,Math.min(ee-N/2,Math.max(0,p-N))),S=y?c(y):[],C=S.slice(0,6),w=S.slice(6),T=w.reduce((e,t)=>e+t.tokens,0),E=w.reduce((e,t)=>e+t.costDollars,0),ne=(0,k.useMemo)(()=>{if(!s)return[];let t=new Map;for(let n of e)for(let e of c(n)){if(e.tokens<=0)continue;let n=t.get(e.key);n?n.tokens+=e.tokens:t.set(e.key,{...e})}return[...t.values()].sort((e,t)=>t.tokens-e.tokens)},[s,e,c]);return(0,A.jsxs)(`div`,{className:`overflow-x-auto`,children:[(0,A.jsxs)(`div`,{className:`relative`,style:{width:p},children:[(0,A.jsxs)(`svg`,{width:p,height:pe,role:`img`,"aria-label":r(`insights.usageTrend`),children:[e.map((e,r)=>{let o=r*M+M/2,l=m(e.totalTokens),u=e.day===i,d=l>0?c(e):[],f=118;return(0,A.jsxs)(`g`,{"data-testid":l>0?`daily-bar`:void 0,"data-day":e.day,tabIndex:l>0?0:void 0,onMouseEnter:()=>a(e.day),onMouseLeave:()=>a(null),onFocus:()=>a(e.day),onBlur:()=>a(null),className:`outline-none`,children:[(0,A.jsx)(`rect`,{x:r*M,y:0,width:M,height:119,style:{fill:u&&l>0?`currentColor`:`transparent`,opacity:u&&l>0?.06:0,pointerEvents:l>0?`all`:`none`}}),(0,A.jsx)(`rect`,{x:o-11,y:118,width:22,height:1,className:`fill-dark-border`}),d.map((t,n)=>{let r=t.tokens/Math.max(e.totalTokens,1),i=n===d.length-1?Math.max(0,f-(118-l)):Math.max(1,r*l),a=f-i;return f=a,(0,A.jsx)(`rect`,{"data-testid":`daily-bar-seg`,"data-model":t.key,x:o-11,y:a,width:22,height:i,rx:d.length===1?2:0,className:s?t.color.fill:_e.fill,fillOpacity:s?.85:.7},t.key)}),n&&e.totalTokens>0&&(0,A.jsx)(`text`,{"data-testid":`daily-tokens`,x:o,y:118-l-4,textAnchor:`middle`,className:`fill-dark-text`,style:{fontSize:9},children:D(e.totalTokens)}),t&&e.totalTokens>0&&(0,A.jsx)(`text`,{"data-testid":`daily-value`,x:o,y:118-l-4-(n?10:0),textAnchor:`middle`,className:e.priced?`fill-accent-green`:`fill-dark-muted`,style:{fontSize:9},children:e.priced?O(e.costDollars):`—`}),(0,A.jsx)(`text`,{x:o,y:131,textAnchor:`middle`,className:x(`fill-dark-muted`,u&&`fill-dark-text`),style:{fontSize:9},children:e.day.slice(5)})]},e.day)}),g.length>0&&(0,A.jsx)(`path`,{d:g.join(` `),fill:`none`,className:`stroke-accent-green`,strokeWidth:1.6,strokeLinejoin:`round`,strokeLinecap:`round`})]}),y&&y.totalTokens>0&&(0,A.jsxs)(`div`,{"data-testid":`daily-tooltip`,className:`pointer-events-none absolute top-1 z-20 rounded border border-dark-border bg-dark-surface px-2 py-1.5 text-badge shadow-xl`,style:{left:b,width:N},children:[(0,A.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[(0,A.jsx)(`span`,{className:`font-medium text-dark-text`,children:y.day}),(0,A.jsxs)(`span`,{className:`tabular-nums text-dark-muted`,children:[y.requests,`×`]})]}),(0,A.jsxs)(`div`,{className:`space-y-0.5`,children:[C.map(e=>(0,A.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,A.jsx)(`span`,{className:x(`inline-block h-2 w-2 shrink-0 rounded-sm`,e.color.dot)}),(0,A.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-dark-muted`,title:e.label,children:e.label}),(0,A.jsx)(`span`,{className:`shrink-0 tabular-nums text-dark-text`,children:D(e.tokens)}),(0,A.jsx)(`span`,{className:`w-14 shrink-0 text-end tabular-nums text-accent-yellow`,children:y.priced?O(e.costDollars):`—`})]},e.key)),T>0&&(0,A.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,A.jsx)(`span`,{className:`inline-block h-2 w-2 shrink-0 rounded-sm bg-dark-tertiary`}),(0,A.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-dark-muted`,children:`${r(`insights.chartModelRest`)} +${w.length}`}),(0,A.jsx)(`span`,{className:`shrink-0 tabular-nums text-dark-text`,children:D(T)}),(0,A.jsx)(`span`,{className:`w-14 shrink-0 text-end tabular-nums text-accent-yellow`,children:y.priced?O(E):`—`})]})]}),(0,A.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-2 border-t border-dark-border/60 pt-1`,children:[(0,A.jsx)(`span`,{className:`text-dark-muted`,children:r(`insights.hoverTotal`)}),(0,A.jsxs)(`span`,{className:`tabular-nums text-dark-text`,children:[D(y.totalTokens),(0,A.jsx)(`span`,{className:`mx-1 opacity-50`,children:`·`}),y.priced?O(y.costDollars):r(`insights.costUnknown`)]})]})]})]}),(0,A.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-badge text-dark-muted`,children:[s?ne.map(e=>(0,A.jsxs)(`span`,{className:`flex items-center gap-1`,title:e.label,children:[(0,A.jsx)(`span`,{className:x(`inline-block h-2 w-2 rounded-sm`,e.color.dot)}),(0,A.jsx)(`span`,{className:`max-w-[9rem] truncate`,children:e.label}),(0,A.jsx)(`span`,{className:`tabular-nums text-dark-tertiary`,children:D(e.tokens)})]},e.key)):(0,A.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,A.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-sm bg-accent-blue/70`}),r(`insights.legendTokens`)]}),(0,A.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,A.jsx)(`span`,{className:`inline-block h-0.5 w-3 bg-accent-green`}),r(`insights.legendCost`)]})]})]})}var ve=14,I=`dsc.models.usageCollapsed`;function L(){try{return window.localStorage.getItem(I)===`1`}catch{return!1}}function R(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function z(e){if(!Array.isArray(e))return;let t=e=>typeof e==`number`&&Number.isFinite(e)?e:0,n=[];for(let r of e){if(!r||typeof r!=`object`)continue;let e=r,i=typeof e.modelId==`string`?e.modelId:``;i&&n.push({modelId:i,totalTokens:t(e.totalTokens),inputTokens:t(e.inputTokens),outputTokens:t(e.outputTokens),cacheReadTokens:t(e.cacheReadTokens),cacheWriteTokens:t(e.cacheWriteTokens),requestCount:t(e.requestCount),costDollars:t(e.costDollars)})}return n}function B(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.day==`string`?t.day:typeof t.date==`string`?t.date:void 0;if(!n)return null;let r=e=>typeof e==`number`&&Number.isFinite(e)?e:0;return{day:n,costDollars:r(t.costDollars),requests:r(t.requests),inputTokens:r(t.inputTokens),outputTokens:r(t.outputTokens),totalTokens:r(t.totalTokens),cacheReadTokens:r(t.cacheReadTokens),cacheWriteTokens:r(t.cacheWriteTokens),priced:t.priced===!0,models:z(t.models)}}function ye({className:e}){let{t}=te(),[r,i]=(0,k.useState)(null),[o,s]=(0,k.useState)(!1),[c,l]=(0,k.useState)(null),[u,d]=(0,k.useState)(0),[f,p]=(0,k.useState)(L),[h,g]=(0,k.useState)(!1),[_,y]=(0,k.useState)(!1);(0,k.useEffect)(()=>{if(!h)return;let e=window.setTimeout(()=>g(!1),4e3);return()=>window.clearTimeout(e)},[h]);let ee=()=>{p(e=>{let t=!e;try{window.localStorage.setItem(I,t?`1`:`0`)}catch{}return t})};(0,k.useEffect)(()=>{let e=()=>d(e=>e+1);return window.addEventListener(`models-updated`,e),()=>window.removeEventListener(`models-updated`,e)},[]),(0,k.useEffect)(()=>{let e=!1;return s(!0),l(null),(async()=>{try{let n=await T.observability.costs();if(e)return;n.success&&n.data?i(n.data):l(n.error||t(`models.usageLoadFailed`))}catch(n){e||l(n instanceof Error?n.message:t(`models.usageLoadFailed`))}finally{e||s(!1)}})(),()=>{e=!0}},[u]);let b=async()=>{if(!h)g(!0);else{g(!1),y(!0),l(null);try{let e=await T.observability.resetCosts();if(!e.success){l(e.error||t(`models.usageResetFailed`));return}d(e=>e+1)}catch(e){l(e instanceof Error?e.message:t(`models.usageResetFailed`))}finally{y(!1)}}},S=(0,k.useMemo)(()=>{let e=new Map;for(let t of r?.daily??[]){let n=B(t);n&&e.set(n.day,n)}let t=[],n=new Date;for(let r=13;r>=0;r--){let i=R(new Date(n.getFullYear(),n.getMonth(),n.getDate()-r)),a=e.get(i);t.push(a?{...a,empty:!1}:{day:i,costDollars:0,requests:0,inputTokens:0,outputTokens:0,totalTokens:0,cacheReadTokens:0,cacheWriteTokens:0,priced:!1,empty:!0})}return t},[r]),C=(0,k.useMemo)(()=>{let e=0,t=0,n=0,r=0;for(let i of S)e+=i.totalTokens,t+=i.requests,n+=i.cacheReadTokens,r+=i.inputTokens;return{tokens:e,requests:t,inputTokens:r,cacheReadTokens:n}},[S]),w=(0,k.useMemo)(()=>{let e=[...r?.byModel??[]].sort((e,t)=>t.totalCostDollars-e.totalCostDollars),t=Math.max(1e-9,...e.map(e=>e.totalCostDollars));return{rows:e.slice(0,5),maxCost:t}},[r]),E=!!(r&&(r.totalCostDollars>0||C.tokens>0||(r.byModel?.length??0)>0));return(0,A.jsxs)(`div`,{className:x(`rounded-lg border border-dark-border bg-dark-surface/40 p-3`,e),children:[(0,A.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,A.jsxs)(`button`,{type:`button`,onClick:ee,"aria-expanded":!f,className:`inline-flex min-w-0 items-center gap-1.5 text-sm font-medium hover:text-accent-blue`,title:t(f?`common.expand`:`common.collapse`),children:[f?(0,A.jsx)(n,{size:14,className:`shrink-0 text-dark-muted`}):(0,A.jsx)(a,{size:14,className:`shrink-0 text-dark-muted`}),(0,A.jsx)(`span`,{className:`truncate`,children:t(`models.usageTitle`)})]}),(0,A.jsxs)(`div`,{className:`flex items-center gap-2`,children:[f&&E&&(0,A.jsxs)(`span`,{className:`text-badge tabular-nums text-dark-muted`,children:[O(r.totalCostDollars),(0,A.jsx)(`span`,{className:`mx-1 opacity-60`,children:`·`}),D(C.tokens)]}),(0,A.jsxs)(`button`,{type:`button`,onClick:()=>d(e=>e+1),disabled:o,className:`inline-flex items-center gap-1 rounded border border-dark-border px-2 py-0.5 text-xs text-dark-muted hover:text-dark-text disabled:opacity-50`,title:t(`models.usageRefresh`),children:[(0,A.jsx)(m,{size:11,className:o?`animate-spin`:void 0}),t(`models.usageRefresh`)]}),(0,A.jsxs)(`button`,{type:`button`,onClick:b,disabled:_||o,className:x(`inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs disabled:opacity-50`,h?`border-accent-red/60 bg-accent-red/10 text-accent-red`:`border-dark-border text-dark-muted hover:text-dark-text`),title:t(`models.usageResetHint`),children:[(0,A.jsx)(v,{size:11,className:_?`animate-pulse`:void 0}),t(h?`models.usageResetConfirm`:_?`models.usageResetting`:`models.usageReset`)]})]})]}),c&&(0,A.jsx)(`div`,{className:`text-xs text-accent-red`,children:c}),!c&&!E&&!o&&(0,A.jsx)(`div`,{className:`py-6 text-center text-xs text-dark-muted`,children:t(`models.usageEmpty`)}),E&&!f&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`mb-3 grid grid-cols-2 gap-2 sm:grid-cols-4`,children:[(0,A.jsx)(be,{label:t(`models.usageTotalCost`),value:O(r.totalCostDollars),tone:`cost`}),(0,A.jsx)(be,{label:t(`models.usageWindowTokens`,{days:ve}),value:D(C.tokens)}),(0,A.jsx)(be,{label:t(`models.usageWindowRequests`,{days:ve}),value:String(C.requests)}),(0,A.jsx)(be,{label:t(`models.usageCacheHitRate`),value:se(C.cacheReadTokens,C.inputTokens,0)})]}),(0,A.jsx)(`div`,{className:`mb-1 flex items-baseline justify-between`,children:(0,A.jsx)(`span`,{className:`text-badge text-dark-muted`,children:t(`models.usageDailyTitle`)})}),(0,A.jsx)(F,{points:S,showValueLabels:!0,showTokenLabels:!0}),w.rows.length>0&&(0,A.jsxs)(`div`,{className:`mt-3 border-t border-dark-border/60 pt-2`,children:[(0,A.jsx)(`div`,{className:`mb-1 text-badge text-dark-muted`,children:t(`models.usageTopModels`)}),(0,A.jsx)(`div`,{className:`space-y-1`,children:w.rows.map(e=>(0,A.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,A.jsx)(`span`,{className:`w-40 shrink-0 truncate text-dark-text max-md:w-20`,title:e.modelId,children:e.modelId}),(0,A.jsx)(`div`,{className:`h-2 flex-1 overflow-hidden rounded-full bg-dark-border/40`,children:(0,A.jsx)(`div`,{className:`h-full rounded-full bg-accent-purple/70`,style:{width:`${Math.max(1,e.totalCostDollars/w.maxCost*100)}%`}})}),(0,A.jsx)(`span`,{className:`w-20 shrink-0 text-end tabular-nums text-accent-yellow`,children:O(e.totalCostDollars)}),(0,A.jsx)(`span`,{className:`w-20 shrink-0 text-end tabular-nums text-dark-muted`,children:D(e.totalInputTokens+e.totalOutputTokens)}),(0,A.jsxs)(`span`,{className:`w-16 shrink-0 text-end tabular-nums text-dark-tertiary`,children:[e.requestCount,`×`]})]},e.modelId))})]}),S.some(e=>!e.priced&&!e.empty)&&(0,A.jsx)(`div`,{className:`mt-2 text-badge text-accent-yellow`,children:t(`models.usageCostUnknownHint`)})]})]})}function be({label:e,value:t,tone:n}){return(0,A.jsxs)(`div`,{className:`rounded border border-dark-border/60 bg-dark-bg px-2 py-1.5`,children:[(0,A.jsx)(`div`,{className:`text-badge text-dark-muted truncate`,children:e}),(0,A.jsx)(`div`,{className:x(`text-sm font-semibold tabular-nums`,n===`cost`?`text-accent-yellow`:`text-dark-text`),children:t})]})}function xe(){let[e,t]=(0,k.useState)([]),[n,r]=(0,k.useState)(`1.0`),[i,a]=(0,k.useState)(!0),[o,s]=(0,k.useState)(!0),[c,l]=(0,k.useState)(null),u=(0,k.useCallback)(async()=>{s(!0),l(null);try{let e=await T.providers.presets();e.success&&e.data?(t(Array.isArray(e.data.providers)?e.data.providers:[]),r(e.data.version||`1.0`),a(e.data.customSupported!==!1)):l(e.error||`获取 Provider 列表失败`)}catch(e){l(e instanceof Error?e.message:`未知错误`)}finally{s(!1)}},[]);return(0,k.useEffect)(()=>{u()},[u]),{presets:e,loading:o,error:c,version:n,customSupported:i,reload:u}}var Se=[{key:`global`,labelKey:`chat.globalDefault`,color:`text-accent-red`,bg:`bg-accent-red/20`},{key:`goal`,labelKey:`chat.goalDefault`,color:`text-accent-purple`,bg:`bg-accent-purple/20`}];function Ce(e){let t=Number((e??``).trim());return Number.isFinite(t)&&t>0?Math.floor(t):null}var we={providerKey:``,apiKeys:[],modelIds:``,baseUrl:``,apiType:``,fullPath:!1,imageUseCustom:!1,imageEndpoint:``,imageModel:``,imageApiKey:``,setDefault:!1,modelOverrides:{}},Te=C,Ee={"openai-chat-completions":`OpenAI Chat`,"openai-completions":`OpenAI Compatible`,"openai-responses":`OpenAI Responses`,"anthropic-messages":`Anthropic Messages`,"codex-responses":`Codex (本机登录)`,"claude-code":`Claude Code (本机登录)`};function V(e){return e.trim().split(`|`)[0].trim()}function De(e){let t=e.toLowerCase();return t.startsWith(`claude-code://`)||t.includes(`/backend-api/codex`)?t.startsWith(`claude-code://`)?`claude-code`:`codex-responses`:t.includes(`/anthropic`)||t.includes(`/coding`)||t.includes(`/claude`)||t.includes(`/messages`)?`anthropic-messages`:t.includes(`/responses`)?`openai-responses`:`openai-completions`}function Oe(e){if(!e)return{};let t={};for(let n of e.models){let r={};n.apiType&&n.apiType!==e.apiType&&(r.apiType=n.apiType),n.baseUrl&&(r.baseUrl=n.baseUrl),typeof n.contextWindow==`number`&&n.contextWindow!==e.contextWindow&&(r.maxInput=String(n.contextWindow)),typeof n.maxTokens==`number`&&n.maxTokens!==e.maxTokens&&(r.maxOutput=String(n.maxTokens)),Object.keys(r).length>0&&(t[n.id]=r)}return t}var ke={"opencode-free":5,"opencode-go":6,commandcode:7,deepseek:10,moonshotai:20,"moonshotai-cn":21,"kimi-for-coding":22,zhipuai:30,zai:31,"alibaba-cn":40,alibaba:41,minimax:50,"minimax-cn":51,moark:60,siliconflow:70,"siliconflow-cn":71,"stepfun-ai":80,stepfun:81,modelscope:90,openai:100,anthropic:110,google:120,"google-vertex":121,meta:130,mistral:140,groq:150,xai:160,cohere:170,openrouter:180,huggingface:190};function H(){let{presets:e,loading:n,reload:a}=xe(),{t:g}=te(),[x,C]=re(),[E,ie]=(0,k.useState)([]),[D,se]=(0,k.useState)(null),[O,j]=(0,k.useState)(!0),le=(0,k.useRef)(!1),[ue,M]=(0,k.useState)(null),[pe,me]=(0,k.useState)(null),[N,he]=(0,k.useState)(null),[P,ge]=(0,k.useState)([]),[_e,F]=(0,k.useState)(!1),[ve,I]=(0,k.useState)(`select`),[L,R]=(0,k.useState)(null),[z,B]=(0,k.useState)(we),[be,H]=(0,k.useState)(``),[je,Me]=(0,k.useState)(!1),[Ne,W]=(0,k.useState)(null),[Pe,Fe]=(0,k.useState)(!1),[Ie,Le]=(0,k.useState)(!1),[Re,ze]=(0,k.useState)(``),[Be,Ve]=(0,k.useState)(!1),[G,K]=(0,k.useState)([]),[He,q]=(0,k.useState)(new Set),[Ue,J]=(0,k.useState)(null),[We,Ge]=(0,k.useState)(``),[Ke,qe]=(0,k.useState)(!1),[Je,Ye]=(0,k.useState)(!1),[Xe,Y]=(0,k.useState)(null),Ze=(0,k.useMemo)(()=>{let e=We.trim().toLowerCase();return e?G.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e)):G},[G,We]),X=(0,k.useCallback)(async()=>{try{let e=await T.config.provider.get();e.success&&e.data&&(he(e.data),ge(Array.isArray(e.data.entries)?e.data.entries:[]))}catch{}},[]),Z=(0,k.useCallback)(async()=>{let e=!le.current;e&&j(!0),M(null);try{let[e,t]=await Promise.all([T.models.list(),T.system.status()]);if(await X(),e.success&&e.data&&Array.isArray(e.data.models)&&ie(e.data.models),t.success&&t.data){let e=t.data.models||{total:0,online:0,offline:0};se({overallStatus:e.offline===0?`healthy`:e.online>0?`degraded`:`unhealthy`,healthRate:e.total>0?e.online/e.total:0,healthyInstances:e.online,totalInstances:e.total,totalRequests:0})}le.current=!0}catch{e&&M(g(`models.loadFailed`))}finally{e&&j(!1)}},[X,g]);(0,k.useEffect)(()=>{Z()},[Z]),(0,k.useEffect)(()=>{let e=()=>{Z(),X()};return window.addEventListener(`models-updated`,e),()=>window.removeEventListener(`models-updated`,e)},[Z,X]);let Qe=(0,k.useCallback)(e=>`${e.provider}:${e.id}`,[]),Q=(0,k.useMemo)(()=>{let t=[...e];return t.find(e=>e.key===`custom`)||t.push({key:`custom`,name:`Custom`,baseUrl:``,apiType:`openai-completions`,defaultModel:``,isCustom:!0}),t},[e]),$e=(0,k.useMemo)(()=>[...Q].sort((e,t)=>{if(e.isCustom)return-1;if(t.isCustom)return 1;let n=ke[e.key],r=ke[t.key];return n!==void 0&&r!==void 0?n-r:n===void 0?r===void 0?e.name.localeCompare(t.name):1:-1}),[Q]),et=(0,k.useMemo)(()=>{let e=Re.trim().toLowerCase();return e?$e.filter(t=>t.name.toLowerCase().includes(e)||t.key.toLowerCase().includes(e)||(t.defaultModel||``).toLowerCase().includes(e)||(t.baseUrl||``).toLowerCase().includes(e)||(t.models||[]).some(t=>String(t).toLowerCase().includes(e))):$e},[$e,Re]),tt=(0,k.useMemo)(()=>{let e=N?.providers||{},t=new Set(Q.map(e=>e.key)),n=Object.entries(e).filter(([e])=>!t.has(e));if(n.length!==0)return{keys:n.map(([e])=>e),modelCount:n.reduce((e,[,t])=>e+(t.modelCount||0),0),hasApiKey:n.some(([,e])=>e.hasApiKey),baseUrl:n.find(([,e])=>e.baseUrl)?.[1]?.baseUrl||``,apiType:n.find(([,e])=>e.apiType)?.[1]?.apiType||`openai-completions`}},[N,Q]),$=L===`custom`?z.providerKey.trim():L||``,nt=(0,k.useMemo)(()=>$?E.filter(e=>e.provider===$):[],[E,$]),rt=(0,k.useMemo)(()=>{let e=new Map;for(let t of E)e.has(t.provider)||e.set(t.provider,[]),e.get(t.provider).push(t);for(let t of P)e.has(t.key)||e.set(t.key,[]);let t=[...e.keys()];return t.sort((e,t)=>{let n=ke[e],r=ke[t];return n!==void 0&&r!==void 0?n-r:n===void 0?r===void 0?e.localeCompare(t):1:-1}),t.map(t=>({provider:t,models:e.get(t)||[]}))},[E,P]),it=(0,k.useCallback)(e=>{let t=N?.providers?.[e.key],n=P.find(t=>t.key===e.key),r=E.filter(t=>t.provider===e.key).map(e=>e.id),i=e.models?.slice(0,3).join(`, `)||e.defaultModel,a=r.length>0?r.join(`, `):i;R(e.key),H(``),B({providerKey:e.key,apiKeys:[``],modelIds:a,baseUrl:t?.baseUrl||e.baseUrl,apiType:t?.apiType||e.apiType,fullPath:t?.fullPath===!0,imageUseCustom:!!n?.imageEndpoint,imageEndpoint:n?.imageEndpoint||``,imageModel:n?.imageModel||``,imageApiKey:``,setDefault:N?.defaultProvider!==e.key,modelOverrides:Oe(n)}),I(`form`),F(!0),W(null),Fe(!1),K([]),q(new Set),J(null),Ge(``)},[E,N,P]),at=(0,k.useCallback)(e=>{let t=N?.providers?.[e],n=P.find(t=>t.key===e),r=E.filter(t=>t.provider===e).map(e=>e.id).join(`, `);R(`custom`),H(e),B({providerKey:e,apiKeys:[``],modelIds:r,baseUrl:t?.baseUrl||``,apiType:t?.apiType||``,fullPath:t?.fullPath===!0,imageUseCustom:!!n?.imageEndpoint,imageEndpoint:n?.imageEndpoint||``,imageModel:n?.imageModel||``,imageApiKey:``,setDefault:N?.defaultProvider!==e,modelOverrides:Oe(n)}),W(null),Fe(!1),K([]),q(new Set),J(null),Ge(``)},[N,E,P]),ot=(0,k.useCallback)(()=>{R(`custom`),H(``),B({providerKey:``,apiKeys:[``],modelIds:``,baseUrl:``,apiType:``,fullPath:!1,imageUseCustom:!1,imageEndpoint:``,imageModel:``,imageApiKey:``,setDefault:!N?.configured,modelOverrides:{}}),I(`form`),F(!0),W(null),Fe(!1),K([]),q(new Set),J(null),Ge(``)},[N]),st=(0,k.useCallback)(async()=>{let e=z.baseUrl;if(!e){J(g(`models.baseUrlRequired`));return}Ve(!0),J(null),K([]),q(new Set);let t=Q.find(e=>e.key===L)||null,n=!!t&&!t.isCustom&&(z.baseUrl||``)===t.baseUrl&&z.fullPath!==!0;try{let r=(z.apiKeys||[]).map(e=>e.trim()).filter(Boolean)[0]||``,i=r.replace(/[^\x00-\xFF]/g,``);i!==r&&b.warning(g(`models.apiKeySanitized`));let a=await T.models.fetch(e,i,z.fullPath===!0,n?t.key:void 0);if(a.success&&a.data?.models){let e=a.data.models;K(e),qe(!0);let t={};for(let n of e)n.protocol&&n.protocol!==z.apiType&&(t[n.id]={apiType:n.protocol});Object.keys(t).length>0&&B(e=>{let n={...e.modelOverrides};for(let[e,r]of Object.entries(t))n[e]?.apiType||(n[e]={...n[e]||{},...r});return{...e,modelOverrides:n}});let n=new Set(e.map(e=>e.id)),r=z.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean),i=r.filter(e=>n.has(e.split(`|`)[0].trim())),o=r.filter(e=>!n.has(e.split(`|`)[0].trim()));if(q(new Set(i.map(e=>e.split(`|`)[0].trim()))),o.length>0){let e=o.map(e=>e.split(`|`)[0].trim());B(e=>({...e,modelIds:i.join(`, `)})),b.warning(g(`models.autoRemovedMissingModels`,{models:e.join(`, `)}))}b.success(g(`models.fetchedCount`,{n:e.length}))}else J(a.error||g(`models.fetchFailed`))}catch(e){J(e instanceof Error?e.message:g(`models.requestFailed`))}finally{Ve(!1)}},[z.baseUrl,z.apiKeys,z.modelIds,z.apiType,z.fullPath,L,Q,g]),ct=(0,k.useCallback)((e,t,n)=>{if(n!==`supported`&&n!==`unsupported`&&n!==`unknown`)return;let r=n,i=r===`supported`?`Supported`:r===`unsupported`?`Unsupported`:`Unknown`;return{id:e,verdict:r,group:g(`models.${t}Label`),label:g(`models.${t}${i}`),hint:r===`supported`?``:g(`models.${t}Hint${i}`)}},[g]),lt=(0,k.useCallback)(async()=>{let e=z.baseUrl;if(!e){Y({ok:!1,message:g(`models.baseUrlRequired`)});return}let t=V((z.modelIds||``).split(`,`)[0]||``);Ye(!0),Y(null);try{let n=(z.apiKeys||[]).map(e=>e.trim()).filter(Boolean)[0]||``,r=n.replace(/[^\x00-\xFF]/g,``);r!==n&&b.warning(g(`models.apiKeySanitized`));let i=await T.providers.testConnection(e,r,t);if(i.success&&i.data?.reachable){let e=i.data,t={};e.resolvedBaseUrl&&e.resolvedBaseUrl!==z.baseUrl&&(t.baseUrl=e.resolvedBaseUrl),e.detectedApiType&&z.apiType===``&&(t.apiType=e.detectedApiType),Object.keys(t).length>0&&B(e=>({...e,...t}));let n=[];t.baseUrl&&n.push(g(`models.baseUrlAutoCompleted`,{url:t.baseUrl})),t.apiType&&n.push(g(`models.apiTypeAutoSelected`,{type:Ee[t.apiType]}));let r=e.message||g(`models.connectionSuccess`),a=[ct(`tools`,`toolProbe`,e.tools?.verdict),ct(`jsonMode`,`jsonProbe`,e.jsonMode?.verdict)].filter(e=>e!==void 0);Y({ok:!0,message:n.length>0?g(`models.connectionSuccessWithHints`,{message:r,hints:n.join(g(`models.hintJoiner`))}):r,probes:a})}else Y({ok:!1,message:i.data?.message||i.error||g(`models.connectionFailed`)})}catch(e){Y({ok:!1,message:e instanceof Error?e.message:g(`models.requestFailed`)})}finally{Ye(!1)}},[z.baseUrl,z.apiKeys,z.apiType,z.modelIds,ct,g]),ut=(0,k.useCallback)(e=>{let t=new Set(He);t.has(e)?t.delete(e):t.add(e),q(t),B(e=>({...e,modelIds:Array.from(t).join(`, `)}))},[He]),dt=(0,k.useCallback)(e=>{let t=z.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean),n=t.some(t=>V(t)===e.id)?t.filter(t=>V(t)!==e.id):[...t,e.name&&e.name!==e.id?`${e.id}|${e.name}`:e.id];B(e=>({...e,modelIds:n.join(`, `)}));let r=new Set(G.map(e=>e.id));q(new Set(n.map(V).filter(e=>r.has(e))))},[z.modelIds,G]),[ft,pt]=(0,k.useState)(!1),[mt,ht]=(0,k.useState)(``),[gt,_t]=(0,k.useState)([]),[vt,yt]=(0,k.useState)(!1),[bt,xt]=(0,k.useState)(null),[St,Ct]=(0,k.useState)(!1),[wt,Tt]=(0,k.useState)(!0),Et=(0,k.useCallback)(()=>{ht(``),_t([]),xt(null),pt(!0),Dt(``,{reason:!1,tool:!0})},[]),Dt=(0,k.useCallback)(async(e,t)=>{yt(!0),xt(null);try{let n=await T.models.catalogSearch({q:e,reasoning:t?.reason??!1,toolCall:t?.tool??!0,limit:30});n.success&&n.data?_t(n.data.hits||[]):(xt(n.error||g(`models.catalogSearchFailed`)),_t([]))}catch(e){xt(e instanceof Error?e.message:g(`models.requestFailed`)),_t([])}finally{yt(!1)}},[g]),Ot=(0,k.useCallback)(e=>{B(t=>{let n=t.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean);if(n.includes(e.model.id))return t;let r=e.model.limit?.context,i=e.model.limit?.output,a={...t.modelOverrides[e.model.id]||{},...typeof r==`number`&&r>0?{maxInput:String(r)}:{},...typeof i==`number`&&i>0?{maxOutput:String(i)}:{}};return{...t,modelIds:[...n,e.model.id].join(`, `),modelOverrides:Object.keys(a).length>0?{...t.modelOverrides,[e.model.id]:a}:t.modelOverrides}}),b.success(g(`models.addedModel`,{id:e.model.id}))},[g]),[kt,At]=(0,k.useState)(null),jt=(0,k.useCallback)(e=>{ht(e),kt&&clearTimeout(kt),At(setTimeout(()=>{Dt(e,{reason:St,tool:wt})},300))},[kt,St,wt,Dt]),Mt=async e=>{let t=e.provider,n=e.id,r=e.enabled!==!1,i=e.name||n,a=e=>r&&/default model/i.test(e);try{let e=await T.models.toggle(t,n);if(e.success){await Z();return}let r=e.error||``;a(r)?b.error(g(`models.defaultModelDisableBlocked`,{name:i})):b.error(r||g(`models.operationFailed`))}catch(e){let t=e instanceof Error?e.message:``;a(t)?b.error(g(`models.defaultModelDisableBlocked`,{name:i})):b.error(t||g(`models.operationFailed`))}},Nt=async e=>{let t=Qe(e);me(t);try{await T.models.test(e.id),await Z()}finally{me(null)}},Pt=async(e,t)=>{if(await C({message:g(`models.deleteModelConfirm`,{id:t}),variant:`danger`}))try{(await T.models.delete(e,t)).success&&await Z()}catch{}},Ft=(0,k.useCallback)(e=>{let t=P.find(t=>t.key===e),n=Q.find(t=>t.key===e),r=!n||n.isCustom,i=N?.providers?.[e];R(r?`custom`:e),H(r?e:``),B({providerKey:e,apiKeys:[``],modelIds:t?.models.map(e=>e.name&&e.name!==e.id?`${e.id}|${e.name}`:e.id).join(`, `)||``,baseUrl:t?.baseUrl||i?.baseUrl||n?.baseUrl||``,apiType:t?.apiType||i?.apiType||n?.apiType||``,fullPath:t?.fullPath===!0||i?.fullPath===!0,imageUseCustom:!!t?.imageEndpoint,imageEndpoint:t?.imageEndpoint||``,imageModel:t?.imageModel||``,imageApiKey:``,setDefault:N?.defaultProvider!==e,modelOverrides:Oe(t)}),I(`form`),F(!0),W(null),Fe(!1),K([]),q(new Set),J(null),Ge(``)},[P,Q,N]),It=e=>{Ft(e.provider)},Lt=async()=>{let e=Q.find(e=>e.key===L)||null,t=L===`custom`?z.providerKey.trim():e?.key||``;if(!t){W(g(`models.providerNameRequired`));return}let n=(z.apiKeys||[]).map(e=>e.trim()).filter(Boolean),r=!!N?.providers?.[t]?.hasApiKey;if(n.length===0&&!r){W(g(`models.apiKeyRequired`));return}if(z.imageUseCustom===!0&&!z.imageEndpoint.trim()){W(g(`models.imageEndpointRequired`));return}let i=e||{key:t,name:t,baseUrl:``,apiType:`openai-completions`,defaultModel:``},a=n.map(e=>e.replace(/[^\x00-\xFF]/g,``)).filter(Boolean),o=G.length>0?new Set(G.map(e=>e.id)):null,s=(z.modelIds||i.defaultModel||``).split(`,`).map(e=>e.trim()).filter(Boolean),c=o?s.filter(e=>o.has(e.split(`|`)[0].trim())):s,l=o?s.filter(e=>!o.has(e.split(`|`)[0].trim())):[];l.length>0&&b.warning(g(`models.autoSkippedMissingModels`,{models:l.map(e=>e.split(`|`)[0].trim()).join(`, `)}));let u=c.map(V).filter(Boolean),d=new Set;for(let e of E)e.provider!==t||u.includes(e.id)||(e.isGlobalDefault&&d.add(`global`),e.isGoalDefault&&d.add(`goal`));let f={provider:t,name:t,baseUrl:z.baseUrl||i.baseUrl,fullPath:z.fullPath===!0,apiType:z.apiType||De(z.baseUrl||i.baseUrl)||i.apiType,models:c.map((t,n)=>{let r=t.trim().split(`|`).map(e=>e.trim()).filter(Boolean),i=r[0]||``,a=z.modelOverrides[i],o=a?.apiType||e?.modelApiTypes?.[i];return{id:i,name:r[1]||i,aliases:r.length>2?r.slice(2):void 0,enabled:!0,priority:10+n,...o?{apiType:o}:{},...a?.baseUrl?{baseUrl:a.baseUrl}:{},contextWindow:Ce(a?.maxInput),maxTokens:Ce(a?.maxOutput)}}).filter(e=>e.id.length>0)};a.length>0&&(f.apiKeys=a);let p=z.imageUseCustom===!0;if(f.imageEndpoint=p?z.imageEndpoint.trim():``,f.imageModel=p?z.imageModel.trim():``,p){let e=z.imageApiKey.replace(/[^\x00-\xFF]/g,``).trim();e&&(f.imageApiKey=e)}(!N?.configured||z.setDefault)&&(f.setDefault=!0),Me(!0),W(null);try{let e=await T.config.provider.save(f);if(e.success){if(d.size>0){let e=u[0]||``,n={};if(e){let r=`${t}:${e}`;for(let e of d)n[e]=r}else{let e=E.find(e=>e.provider!==t);for(let t of d)t===`goal`?n[t]=null:e&&(n[t]=`${e.provider}:${e.id}`)}Object.keys(n).length>0&&(await T.models.setDefaults(n)).success&&b.success(g(`models.defaultsAutoUpdated`))}F(!1),I(`select`),R(null),H(``),await X(),await Z()}else W(e.error||g(`models.saveFailed`))}catch(e){W(e instanceof Error?e.message:g(`models.unknownError`))}finally{Me(!1)}},Rt=async e=>{if(await C({message:g(`models.removeConfirm`,{providerKey:e}),variant:`danger`}))try{await T.config.provider.delete(e),await X(),await Z()}catch{}},zt=e=>{switch(e){case`online`:return`text-accent-green`;case`offline`:return`text-dark-muted`;case`error`:return`text-accent-red`;default:return`text-dark-muted`}},Bt=e=>{switch(e){case`online`:return(0,A.jsx)(l,{size:14});case`offline`:return(0,A.jsx)(_,{size:14});case`error`:return(0,A.jsx)(f,{size:14});default:return(0,A.jsx)(_,{size:14})}},Vt=(0,k.useMemo)(()=>Q.find(e=>e.key===L)||null,[L,Q]);return O?(0,A.jsx)(`div`,{className:`h-64 overflow-y-auto p-4`,role:`status`,"aria-label":g(`models.loading`),children:(0,A.jsx)(oe,{count:4})}):ue?(0,A.jsx)(`div`,{className:`flex h-64 items-center justify-center text-accent-red`,children:ue}):(0,A.jsxs)(`div`,{className:`ui-page flex-1 min-h-0`,children:[x,(0,A.jsxs)(`div`,{className:`ui-page-inner space-y-6`,children:[(0,A.jsx)(ye,{}),(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,A.jsx)(`h2`,{className:`text-base font-semibold`,children:g(`models.providerConfig`)}),(0,A.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,A.jsxs)(`button`,{onClick:async()=>{try{await T.providers.refresh(),b.success(g(`models.providerListRefreshed`)),Le(!0),await a(),setTimeout(()=>{a()},3e3)}catch{b.error(g(`models.refreshFailed`))}},className:`btn btn-secondary px-3 py-2 text-xs`,title:g(`models.refreshListTitle`),children:[(0,A.jsx)(m,{size:12}),g(`models.refreshList`)]}),(0,A.jsxs)(`button`,{onClick:()=>{Ie&&ze(``),Le(e=>!e)},className:`btn btn-accent px-3 py-2 text-xs`,children:[Ie?(0,A.jsx)(o,{size:12}):(0,A.jsx)(u,{size:12}),g(Ie?`models.collapse`:`models.addProvider`)]})]})]}),Ie&&(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`div`,{className:`relative mb-3 max-w-md`,children:[(0,A.jsx)(c,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,A.jsx)(`input`,{value:Re,onChange:e=>ze(e.target.value),className:`w-full ps-8 pe-8 py-1.5 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,placeholder:g(`models.providerSearchPlaceholder`)}),Re&&(0,A.jsx)(`button`,{onClick:()=>ze(``),className:`absolute end-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-dark-text`,title:g(`models.clear`),"aria-label":g(`models.clearSearch`),children:(0,A.jsx)(h,{size:13})})]}),(0,A.jsx)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3 max-h-[420px] overflow-y-auto custom-scrollbar pe-1`,children:n?Array.from({length:10}).map((e,t)=>(0,A.jsxs)(`div`,{className:`ui-card p-4`,"aria-hidden":`true`,children:[(0,A.jsx)(ae,{variant:`text`,width:`45%`,height:16,className:`mb-2`}),(0,A.jsx)(ae,{variant:`text`,width:`85%`,height:11,className:`mb-1.5`}),(0,A.jsx)(ae,{variant:`text`,width:`70%`,height:11,className:`mb-1.5`}),(0,A.jsx)(ae,{variant:`text`,width:`55%`,height:11})]},`preset-skeleton-${t}`)):et.length===0?(0,A.jsxs)(`div`,{className:`col-span-full border border-accent-red/30 bg-accent-red/10 rounded-lg p-4 text-center`,children:[(0,A.jsx)(`div`,{className:`text-sm text-accent-red font-medium mb-1`,children:g(`models.noMatchingProviders`)}),(0,A.jsx)(`div`,{className:`text-xs text-dark-muted mb-3`,children:g(`models.noMatchingProvidersHint`,{query:Re})}),(0,A.jsxs)(`div`,{className:`flex items-center justify-center gap-2`,children:[(0,A.jsxs)(`button`,{onClick:()=>ze(``),className:`inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-dark-border rounded hover:bg-dark-hover`,children:[(0,A.jsx)(h,{size:12}),g(`models.clearSearch`)]}),(0,A.jsx)(S,{variant:`accent`,size:`sm`,leftIcon:(0,A.jsx)(u,{size:12}),onClick:ot,children:g(`models.addCustomProvider`)})]})]}):et.map(e=>{let t=e.key===`custom`,n=t?tt:N?.providers?.[e.key],r=n?.hasApiKey,i=t?!!N?.defaultProvider&&(tt?.keys||[]).includes(N.defaultProvider):N?.defaultProvider===e.key;return(0,A.jsxs)(`div`,{className:`reveal-on-scroll ui-card-interactive text-start p-4 relative ${r?`border-accent-green/30 bg-dark-surface hover:border-accent-green/50`:`border-dark-border bg-dark-surface hover:border-dark-hover`}`,children:[(0,A.jsxs)(`div`,{onClick:()=>e.key===`custom`?ot():it(e),className:`cursor-pointer`,children:[(0,A.jsxs)(`div`,{className:`flex items-center justify-between mb-1`,children:[(0,A.jsx)(`span`,{className:`text-sm font-medium`,children:e.name}),r&&(0,A.jsx)(y,{size:14,className:`text-accent-green`})]}),(0,A.jsxs)(`div`,{className:`text-badge text-dark-muted space-y-0.5`,children:[(0,A.jsx)(`div`,{className:`truncate`,children:t?n?.baseUrl||g(`models.customBaseUrl`):e.baseUrl||g(`models.customBaseUrl`)}),(0,A.jsx)(`div`,{className:`truncate`,children:t&&tt?`${tt.keys.join(`, `)}`:e.defaultModel||g(`models.noDefaultModel`)}),(0,A.jsxs)(`div`,{children:[n?g(`models.configuredCount`,{n:n.modelCount}):g(`models.availableCount`,{n:e.models?.length||0}),e.models&&e.models.length>0&&!n&&(0,A.jsx)(`span`,{className:`text-accent-blue`,children:` ✓`})]})]}),i&&(0,A.jsx)(`div`,{className:`mt-1 text-badge text-accent-red`,children:g(`models.defaultProviderBadge`)})]}),r&&e.key!==`custom`&&(0,A.jsx)(`button`,{onClick:t=>{t.stopPropagation(),Rt(e.key)},className:`absolute top-1.5 end-1.5 p-1 rounded text-dark-muted hover:bg-accent-red/10 hover:text-accent-red transition-colors`,title:g(`models.deleteProvider`),"aria-label":g(`models.deleteProviderNamed`,{name:e.name}),children:(0,A.jsx)(v,{size:13})})]},e.key)})})]})]}),D&&(0,A.jsxs)(`div`,{className:`grid grid-cols-4 gap-4 max-md:grid-cols-2`,children:[(0,A.jsx)(Ae,{title:g(`models.overallStatus`),value:D.totalInstances===0?g(`models.notConfigured`):D.overallStatus===`healthy`?g(`models.healthy`):D.overallStatus===`degraded`?g(`models.degraded`):g(`models.abnormal`),color:D.totalInstances===0?`blue`:D.overallStatus===`healthy`?`green`:D.overallStatus===`degraded`?`yellow`:`red`}),(0,A.jsx)(Ae,{title:g(`models.healthRate`),value:D.totalInstances===0?`N/A`:`${(D.healthRate*100).toFixed(0)}%`,color:D.totalInstances===0?`blue`:D.healthRate>.8?`green`:D.healthRate>.5?`yellow`:`red`}),(0,A.jsx)(Ae,{title:g(`models.onlineInstances`),value:D.totalInstances===0?g(`models.none`):`${D.healthyInstances}/${D.totalInstances}`,color:D.healthyInstances>0?`green`:`red`}),(0,A.jsx)(Ae,{title:g(`models.totalRequests`),value:D.totalRequests>0?D.totalRequests.toLocaleString():`0`,color:`blue`})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,A.jsx)(`h3`,{className:`text-sm font-medium`,children:g(`models.configuredModels`)}),(0,A.jsx)(`span`,{className:`text-badge text-dark-muted`,title:g(`models.actIsGlobalHint`),children:g(`models.actIsGlobalHint`)})]}),(0,A.jsxs)(`div`,{className:`space-y-4 max-h-[640px] overflow-y-auto custom-scrollbar pe-1`,children:[rt.map(e=>{let t=P.find(t=>t.key===e.provider),n=N?.providers?.[e.provider];return(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border overflow-hidden`,children:[(0,A.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-2 bg-dark-bg border-b border-dark-border`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0 flex-wrap`,children:[(0,A.jsx)(`span`,{className:`text-xs font-semibold whitespace-nowrap text-accent-purple max-md:whitespace-normal`,children:e.provider}),N?.defaultProvider===e.provider&&(0,A.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap`,children:g(`models.defaultShort`)}),(0,A.jsx)(`span`,{className:`text-badge text-dark-muted truncate`,children:n?.baseUrl||t?.baseUrl||``}),(0,A.jsx)(`span`,{className:`text-badge text-dark-muted whitespace-nowrap`,children:t?.apiType||n?.apiType||``}),n?.hasApiKey||t?.hasApiKey?(0,A.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-green/20 text-accent-green whitespace-nowrap`,children:g(`models.hasKey`)}):(0,A.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap`,children:g(`models.noKey`)})]}),(0,A.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,A.jsx)(`button`,{onClick:()=>Ft(e.provider),className:`p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue`,title:g(`models.editProviderNamed`,{name:e.provider}),children:(0,A.jsx)(ee,{size:13})}),(0,A.jsx)(`button`,{onClick:()=>Rt(e.provider),className:`p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red`,title:g(`models.deleteProviderNamed`,{name:e.provider}),children:(0,A.jsx)(v,{size:13})})]})]}),(0,A.jsxs)(`div`,{className:`space-y-2 p-2 bg-dark-surface/40`,children:[e.models.map(n=>{let r=t?.models.find(e=>e.id===n.id),i=!!(r?.apiType&&r.apiType!==t?.apiType);return(0,A.jsx)(`div`,{className:`bg-dark-surface border rounded-lg p-3 ${n.status===`online`?`border-accent-green`:`border-dark-border`} ${n.enabled===!1?`opacity-60`:``}`,children:(0,A.jsxs)(`div`,{className:`flex items-start justify-between gap-4 max-md:flex-col max-md:gap-2`,children:[(0,A.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 mb-1 flex-wrap`,children:[(0,A.jsx)(`span`,{className:zt(n.status),children:Bt(n.status)}),(0,A.jsx)(`span`,{className:`font-medium text-sm text-accent-blue`,children:n.name}),(0,A.jsx)(`span`,{className:`text-badge text-accent-purple px-1.5 py-0.5 bg-accent-purple/10 rounded`,children:n.provider}),n.apiType&&(0,A.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded ${n.apiType===`anthropic-messages`||n.apiType===`openai-responses`?`bg-accent-purple/20 text-accent-purple`:`bg-accent-blue/20 text-accent-blue`}`,children:Ee[n.apiType]||n.apiType}),i&&(0,A.jsx)(`span`,{className:`text-avatar px-1 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium`,title:g(`models.overrideTitle`),children:g(`models.overrideBadge`)}),n.isGlobalDefault&&(0,A.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red font-medium`,title:g(`models.globalDefaultUnsettable`),children:g(`chat.globalDefault`)}),n.isActDefault&&!n.isGlobalDefault&&(0,A.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium`,children:g(`chat.actDefault`)}),n.isGoalDefault&&(0,A.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-purple/20 text-accent-purple font-medium`,children:g(`chat.goalDefault`)})]}),(0,A.jsxs)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 md:grid-cols-6 gap-3 text-xs`,children:[(0,A.jsx)(U,{label:g(`models.loadLabel`),value:`${n.load}/${n.maxLoad}`}),(0,A.jsx)(U,{label:g(`models.tokenUsageLabel`),value:`${w(n.tokens)}/${w(n.maxTokens)}`}),(0,A.jsx)(U,{label:g(`models.inputPrice`),value:n.price.input===void 0?`—`:`$${n.price.input}/M`}),(0,A.jsx)(U,{label:g(`models.outputPrice`),value:n.price.output===void 0?`—`:`$${n.price.output}/M`}),(0,A.jsx)(U,{label:g(`models.cacheReadPrice`),value:n.price.cacheRead===void 0?`—`:`$${n.price.cacheRead}/M`}),(0,A.jsx)(U,{label:g(`models.cacheWritePrice`),value:n.price.cacheWrite===void 0?`—`:`$${n.price.cacheWrite}/M`})]}),(0,A.jsxs)(`div`,{className:`mt-3 grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs`,children:[(0,A.jsx)(U,{label:g(`models.inputTokensLabel`),value:w(n.usage?.input??0)}),(0,A.jsx)(U,{label:g(`models.outputTokensLabel`),value:w(n.usage?.output??0)}),(0,A.jsx)(U,{label:g(`models.totalTokensLabel`),value:w(n.usage?.total??0)}),(0,A.jsx)(U,{label:g(`models.usageRequestsLabel`),value:String(n.usage?.requests??0)})]}),(0,A.jsx)(ce,{className:`mt-3 pt-2 border-t border-dark-border/60`,provider:e.provider,modelId:n.id,current:r?.pricing,catalog:{input:n.price.input,output:n.price.output,cacheRead:n.price.cacheRead,cacheWrite:n.price.cacheWrite},onSaved:Z}),(0,A.jsx)(de,{className:`mt-2`,provider:e.provider,modelId:n.id,current:{...typeof r?.contextWindow==`number`&&r.contextWindow!==t?.contextWindow?{contextWindow:r.contextWindow}:{},...typeof r?.maxTokens==`number`&&r.maxTokens!==t?.maxTokens?{maxTokens:r.maxTokens}:{}},defaults:{input:t?.contextWindow??2e5,output:t?.maxTokens??8e3},onSaved:Z}),(0,A.jsx)(fe,{modelId:n.id,provider:e.provider,className:`mt-2`})]}),(0,A.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[Se.map(e=>{let t=e.key===`global`?n.isGlobalDefault:n.isGoalDefault,r=e.key===`global`?g(`models.setGlobalDefaultTitle`):g(`models.setGoalDefaultTitle`),i=g(`models.unsetGoalDefaultTitle`),a=g(`models.unsetGoalDefaultFailed`),o=g(`models.setGoalDefaultFailed`);return t?e.key===`global`?(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-1 rounded text-badge border ${e.bg} ${e.color} font-medium`,title:g(`chat.globalDefault`),children:[(0,A.jsx)(y,{size:11}),g(e.labelKey)]},e.key):(0,A.jsxs)(`button`,{onClick:async()=>{try{await T.models.setDefaults({[e.key]:null}),await Z()}catch(e){M(e instanceof Error?e.message:a)}},className:`inline-flex items-center gap-1 px-2 py-1 rounded text-badge border ${e.bg} ${e.color} font-medium cursor-pointer hover:opacity-80`,title:i,children:[(0,A.jsx)(y,{size:11}),g(e.labelKey)]},e.key):n.enabled===!1?null:(0,A.jsx)(`button`,{onClick:async()=>{try{await T.models.setDefaults({[e.key]:`${n.provider}:${n.id}`}),await Z()}catch(e){M(e instanceof Error?e.message:o)}},className:`px-2 py-1 rounded text-badge border border-dark-border text-dark-muted hover:text-dark-text hover:border-dark-hover`,title:r,children:g(e.labelKey)},e.key)}),(0,A.jsx)(`button`,{onClick:()=>It(n),className:`p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue`,title:g(`models.editModel`),children:(0,A.jsx)(ee,{size:13})}),(0,A.jsx)(`button`,{onClick:()=>Pt(n.provider,n.id),className:`p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red`,title:g(`models.deleteModel`),children:(0,A.jsx)(v,{size:13})}),(0,A.jsx)(`button`,{onClick:()=>Nt(n),disabled:pe===Qe(n),className:`p-1.5 rounded hover:bg-dark-hover disabled:opacity-50`,title:g(`models.refresh`),children:(0,A.jsx)(m,{size:13,className:pe===Qe(n)?`animate-spin`:``})}),(0,A.jsx)(`button`,{onClick:()=>Mt(n),className:`px-2 py-0.5 rounded text-xs transition-colors ${n.enabled===!1?`bg-accent-green/20 text-accent-green hover:bg-accent-green/30`:`bg-accent-red/20 text-accent-red hover:bg-accent-red/30`}`,children:n.enabled===!1?g(`models.enable`):g(`models.disable`)})]})]})},Qe(n))}),e.models.length===0&&(0,A.jsx)(`div`,{className:`text-center text-meta text-dark-muted py-3`,children:g(`models.noModelsInProvider`)})]})]},e.provider)}),E.length===0&&P.length===0&&(0,A.jsxs)(`div`,{className:`text-center text-dark-muted py-6`,children:[(0,A.jsx)(r,{size:36,className:`mx-auto mb-2 opacity-40`}),(0,A.jsx)(`p`,{className:`text-sm`,children:g(`models.emptyHint`)})]})]})]}),(0,A.jsx)(ne,{isOpen:_e,onClose:()=>{F(!1),I(`select`),R(null),H(``)},title:ve===`select`?g(`chat.selectProvider`):Vt?.name||g(`models.providerConfig`),size:`xl`,children:ve===`select`?(0,A.jsx)(`div`,{className:`space-y-4`,children:(0,A.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-3`,children:[$e.filter(e=>e.key!==`custom`).map(e=>(0,A.jsxs)(`button`,{onClick:()=>it(e),className:`text-start p-3 rounded-lg border border-dark-border bg-dark-bg hover:border-accent-blue transition-colors`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,A.jsx)(y,{size:14,className:`text-accent-blue`}),(0,A.jsx)(`span`,{className:`text-sm font-medium`,children:e.name})]}),(0,A.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e.defaultModel})]},e.key)),(0,A.jsxs)(`button`,{onClick:ot,className:`text-start p-3 rounded-lg border border-dashed border-dark-border bg-dark-bg hover:border-accent-blue transition-colors`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,A.jsx)(t,{size:14,className:`text-accent-blue`}),(0,A.jsx)(`span`,{className:`text-sm font-medium`,children:g(`models.customProvider`)})]}),(0,A.jsx)(`div`,{className:`text-xs text-dark-muted`,children:g(`models.customProviderDesc`)})]})]})}):(0,A.jsxs)(`div`,{className:`space-y-3`,children:[L===`custom`&&(0,A.jsxs)(`div`,{className:`space-y-3`,children:[tt&&tt.keys.length>0&&(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:g(`models.editExistingConfig`)}),(0,A.jsxs)(`select`,{value:be,onChange:e=>{let t=e.target.value;t?at(t):(H(``),B(e=>({...e,providerKey:``,modelIds:``,baseUrl:``,apiType:``,apiKeys:[``]})))},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,children:[(0,A.jsx)(`option`,{value:``,children:g(`models.newCustomProviderOption`)}),tt.keys.map(e=>(0,A.jsx)(`option`,{value:e,children:e},e))]}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:g(`models.editExistingConfigHint`)})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:g(`models.providerNameLabel`)}),(0,A.jsx)(`input`,{value:z.providerKey,onChange:e=>B(t=>({...t,providerKey:e.target.value})),className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:g(`models.providerNamePlaceholder`)})]})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:[`API Keys`,N?.providers?.[L===`custom`?z.providerKey.trim():L||``]?.hasApiKey?``:` *`,(0,A.jsx)(`span`,{className:`text-dark-muted/60 text-xs`,children:N?.providers?.[L===`custom`?z.providerKey.trim():L||``]?.hasApiKey?g(`models.apiKeysHintConfigured`):g(`models.apiKeysHintNew`)})]}),(0,A.jsx)(`div`,{className:`space-y-1.5`,children:(z.apiKeys?.length?z.apiKeys:[``]).map((e,t)=>(0,A.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,A.jsxs)(`div`,{className:`relative flex-1`,children:[(0,A.jsx)(`input`,{type:Pe?`text`:`password`,value:e,autoComplete:`off`,spellCheck:!1,onChange:e=>B(n=>({...n,apiKeys:n.apiKeys.map((n,r)=>r===t?e.target.value:n)})),className:`w-full px-3 py-2 pe-9 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:g(`models.apiKeyDefaultPlaceholder`)}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>Fe(e=>!e),className:`absolute end-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-dark-text`,title:g(Pe?`models.hideKeyTitle`:`models.showKeyTitle`),children:Pe?(0,A.jsx)(s,{size:14}):(0,A.jsx)(p,{size:14})})]}),t===0?(0,A.jsxs)(`button`,{type:`button`,onClick:()=>B(e=>({...e,apiKeys:[...e.apiKeys,``]})),className:`shrink-0 inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-dashed border-dark-border text-dark-muted hover:text-accent-blue hover:border-accent-blue/50 transition-colors`,title:g(`models.addApiKeyTitle`),children:[(0,A.jsx)(u,{size:14}),(0,A.jsx)(`span`,{className:`hidden sm:inline`,children:g(`models.addApiKey`)})]}):(0,A.jsx)(`button`,{type:`button`,onClick:()=>B(e=>({...e,apiKeys:e.apiKeys.filter((e,n)=>n!==t)})),className:`shrink-0 inline-flex items-center px-3 py-2 rounded text-sm text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors`,title:g(`models.removeApiKeyTitle`),children:(0,A.jsx)(h,{size:14})})]},t))})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:g(`models.modelIdLabel`)}),(0,A.jsxs)(`div`,{className:`flex gap-2`,children:[(0,A.jsx)(`input`,{value:z.modelIds,onChange:e=>{let t=e.target.value;B(e=>({...e,modelIds:t})),q(()=>{let e=new Set;for(let n of t.split(`,`)){let t=n.trim().split(`|`)[0].trim();t&&G.some(e=>e.id===t)&&e.add(t)}return e})},className:`flex-1 px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:Vt?.defaultModel||g(`models.modelIdPlaceholder`)}),(0,A.jsxs)(`button`,{onClick:st,disabled:Be||!z.baseUrl,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-blue/30 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 whitespace-nowrap max-md:whitespace-normal`,title:g(`models.fetchModelsTitle`),children:[Be?(0,A.jsx)(m,{size:13,className:`animate-spin`}):(0,A.jsx)(i,{size:13}),g(Be?`models.fetchingModels`:`models.fetchModels`)]}),(0,A.jsxs)(`button`,{onClick:lt,disabled:Je||!z.baseUrl,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-yellow/30 text-accent-yellow hover:bg-accent-yellow/10 disabled:opacity-50 whitespace-nowrap max-md:whitespace-normal`,title:g(`models.testConnectionTitle`),children:[Je?(0,A.jsx)(m,{size:13,className:`animate-spin`}):(0,A.jsx)(d,{size:13}),g(Je?`models.testingConnection`:`models.testConnection`)]}),(0,A.jsxs)(`button`,{onClick:Et,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-green/30 text-accent-green hover:bg-accent-green/10 whitespace-nowrap max-md:whitespace-normal`,title:g(`models.catalogSearchTitle`),children:[(0,A.jsx)(c,{size:13}),g(`models.catalogSearch`)]})]}),Xe&&(0,A.jsxs)(`div`,{className:`mt-1 text-xs ${Xe.ok?`text-accent-green`:`text-accent-red`}`,children:[Xe.ok?`✓ `:`✗ `,Xe.message,Xe.probes?.map(e=>(0,A.jsxs)(`div`,{className:`mt-0.5 ${e.verdict===`supported`?`text-accent-green`:e.verdict===`unsupported`?`text-accent-red`:`text-dark-muted`}`,children:[e.group,`: `,e.label,e.hint&&(0,A.jsxs)(`span`,{className:`opacity-70`,children:[` — `,e.hint]})]},e.id))]}),Ue&&(0,A.jsx)(`div`,{className:`mt-1 text-xs text-accent-red`,children:Ue}),G.length===0&&nt.length>0&&(0,A.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg bg-dark-bg p-2`,children:[(0,A.jsx)(`div`,{className:`flex items-center justify-between mb-2`,children:(0,A.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[g(`models.configuredPanelPrefix`),(0,A.jsx)(`strong`,{className:`text-dark-text`,children:nt.length}),g(`models.configuredPanelSuffix`),(0,A.jsx)(`span`,{className:`text-accent-green/70`,children:g(`models.configuredPanelHint`)})]})}),(0,A.jsx)(`div`,{className:`max-h-48 overflow-y-auto custom-scrollbar grid grid-cols-2 sm:grid-cols-3 gap-1`,children:nt.map(e=>{let t=z.modelIds.split(`,`).map(V).filter(Boolean).includes(e.id);return(0,A.jsxs)(`div`,{role:`checkbox`,"aria-checked":t,title:e.name&&e.name!==e.id?`${e.id} — ${e.name}`:e.name||e.id,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>dt(e),className:`flex items-start gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${t?`bg-accent-green/20 text-accent-green border border-accent-green/30`:`hover:bg-dark-hover border border-transparent`}`,children:[(0,A.jsx)(`span`,{className:`shrink-0 mt-[3px]`,children:t?(0,A.jsx)(y,{size:10}):(0,A.jsx)(`div`,{className:`w-2.5 h-2.5 rounded border border-dark-border`})}),(0,A.jsx)(`span`,{className:`min-w-0 flex-1 break-words leading-snug`,children:e.name||e.id}),e.isGlobalDefault&&(0,A.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-red/20 text-accent-red shrink-0`,children:g(`models.globalShort`)}),e.isActDefault&&!e.isGlobalDefault&&(0,A.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-yellow/20 shrink-0`,children:`Act`}),e.isGoalDefault&&(0,A.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-purple/20 shrink-0`,children:`Goal`})]},e.id)})})]}),G.length>0&&(0,A.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg bg-dark-bg p-2`,children:[(0,A.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,A.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[g(`models.fetchedPanelPrefix`),(0,A.jsx)(`strong`,{className:`text-dark-text`,children:G.length}),g(`models.fetchedPanelMiddle`),(0,A.jsx)(`strong`,{className:`text-accent-blue`,children:He.size}),g(`models.fetchedPanelSuffix`),(0,A.jsx)(`span`,{className:`text-accent-blue/70`,children:g(`models.fetchedPanelHint`)})]}),(0,A.jsx)(`button`,{onClick:()=>{K([]),q(new Set)},className:`px-2 py-0.5 text-badge border border-dark-border rounded hover:bg-dark-hover`,children:g(`models.close`)})]}),(0,A.jsxs)(`div`,{className:`relative mb-2`,children:[(0,A.jsx)(c,{size:12,className:`absolute start-2 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,A.jsx)(`input`,{value:We,onChange:e=>{let t=e.target.value;Ge(t),t.trim()&&qe(!1)},className:`w-full ps-7 pe-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,placeholder:g(`models.modelSearchPlaceholder`)})]}),We.trim()!==``&&(0,A.jsxs)(`div`,{className:`mb-1 text-badge text-dark-muted`,children:[g(`models.searchMatchPrefix`),(0,A.jsx)(`strong`,{className:`text-accent-blue`,children:Ze.length}),g(`models.searchMatchSuffix`,{total:G.length})]}),(0,A.jsx)(`div`,{className:`max-h-72 overflow-y-auto custom-scrollbar grid grid-cols-1 sm:grid-cols-2 gap-1`,children:Ze.map(e=>{let t=He.has(e.id);return(0,A.jsxs)(`div`,{role:`checkbox`,"aria-checked":t,title:e.name&&e.name!==e.id?`${e.id} — ${e.name}`:e.id,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>ut(e.id),className:`${Ke?`reveal-on-scroll `:``}flex items-start gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${t?`bg-accent-blue/20 text-accent-blue border border-accent-blue/30`:`hover:bg-dark-hover border border-transparent`}`,children:[(0,A.jsx)(`span`,{className:`shrink-0 mt-[3px]`,children:t?(0,A.jsx)(y,{size:10}):(0,A.jsx)(`div`,{className:`w-2.5 h-2.5 rounded border border-dark-border`})}),(0,A.jsx)(`span`,{className:`min-w-0 flex-1 break-all leading-snug`,children:e.id})]},e.id)})})]})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:`Base URL`}),(0,A.jsx)(`input`,{value:z.baseUrl,onChange:e=>{B(t=>({...t,baseUrl:e.target.value})),Y(null)},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:`https://api.example.com/v1`}),(0,A.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer select-none mt-2`,children:[(0,A.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":z.fullPath,onClick:()=>{B(e=>({...e,fullPath:!e.fullPath})),Y(null)},className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${z.fullPath?`bg-accent-green`:`bg-dark-border`}`,children:(0,A.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${z.fullPath?`translate-x-[18px]`:`translate-x-0.5`}`})}),(0,A.jsx)(`span`,{className:`text-sm text-dark-muted`,children:g(`models.fullPathLabel`)})]}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:g(`models.fullPathHint`)})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:g(`models.apiTypeLabel`)}),(0,A.jsxs)(`select`,{value:z.apiType,onChange:e=>{B(t=>({...t,apiType:e.target.value})),Y(null)},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,children:[(0,A.jsx)(`option`,{value:``,children:g(`models.apiTypeAutoDetect`)}),Te.map(e=>(0,A.jsx)(`option`,{value:e,children:Ee[e]},e))]}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:g(`models.apiTypeHint`)})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer select-none`,children:[(0,A.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":z.imageUseCustom,onClick:()=>B(e=>({...e,imageUseCustom:!e.imageUseCustom})),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${z.imageUseCustom?`bg-accent-green`:`bg-dark-border`}`,children:(0,A.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${z.imageUseCustom?`translate-x-[18px]`:`translate-x-0.5`}`})}),(0,A.jsx)(`span`,{className:`text-sm text-dark-muted`,children:g(`models.imageGenerationLabel`)})]}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:g(`models.imageGenerationHint`)}),z.imageUseCustom&&(0,A.jsxs)(`div`,{className:`mt-2 space-y-2 border border-dark-border rounded-lg p-2.5`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`label`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:g(`models.imageEndpointLabel`)}),(0,A.jsx)(`input`,{value:z.imageEndpoint,onChange:e=>B(t=>({...t,imageEndpoint:e.target.value})),className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:`https://api.openai.com/v1`}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:g(`models.imageEndpointHint`)})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`label`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:g(`models.imageModelLabel`)}),(0,A.jsx)(`input`,{value:z.imageModel,onChange:e=>B(t=>({...t,imageModel:e.target.value})),className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:g(`models.imageModelPlaceholder`)}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:g(`models.imageModelHint`)})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`label`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:g(`models.imageApiKeyLabel`)}),(0,A.jsx)(`input`,{type:`password`,value:z.imageApiKey,onChange:e=>B(t=>({...t,imageApiKey:e.target.value})),className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:P.find(e=>e.key===$)?.hasImageApiKey?g(`models.imageApiKeyKeep`):`sk-...`}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:g(`models.imageApiKeyHint`)})]})]})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:[g(`models.modelApiTypeLabel`),(0,A.jsx)(`span`,{className:`text-dark-muted/60 text-xs`,children:g(`models.modelApiTypeHint`)})]}),(0,A.jsx)(`div`,{className:`border border-dark-border rounded-lg divide-y divide-dark-border max-h-64 overflow-y-auto custom-scrollbar`,children:(()=>{let e=z.modelIds.split(`,`).map(V).filter(Boolean);if(e.length===0)return(0,A.jsx)(`div`,{className:`px-3 py-2 text-xs text-dark-muted`,children:g(`models.modelApiTypeEmpty`)});let t=P.find(e=>e.key===$),n=t?.contextWindow??2e5,r=t?.maxTokens??8e3,i=(e,t)=>B(n=>({...n,modelOverrides:{...n.modelOverrides,[e]:{...n.modelOverrides[e]||{},...t}}}));return e.map(e=>{let t=z.modelOverrides[e]||{};return(0,A.jsxs)(`div`,{className:`px-3 py-2 space-y-1.5`,children:[(0,A.jsx)(`div`,{className:`text-xs min-w-0 break-all leading-snug text-dark-text`,title:e,children:e}),(0,A.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-1.5`,children:[(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:g(`models.apiTypeLabel`)}),(0,A.jsxs)(`select`,{value:t.apiType||``,onChange:t=>i(e,{apiType:t.target.value}),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,children:[(0,A.jsx)(`option`,{value:``,children:g(`models.inheritProvider`)}),Te.map(e=>(0,A.jsx)(`option`,{value:e,children:Ee[e]},e))]})]}),(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:g(`models.maxInputTokensLabel`)}),(0,A.jsx)(`input`,{type:`number`,min:1,inputMode:`numeric`,value:t.maxInput??``,onChange:t=>i(e,{maxInput:t.target.value}),placeholder:String(n),title:g(`models.maxInputTokensTitle`),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`})]}),(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:g(`models.maxOutputTokensLabel`)}),(0,A.jsx)(`input`,{type:`number`,min:1,inputMode:`numeric`,value:t.maxOutput??``,onChange:t=>i(e,{maxOutput:t.target.value}),placeholder:String(r),title:g(`models.maxOutputTokensTitle`),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`})]})]})]},e)})})()}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:g(`models.contextBudgetHint`)})]}),(0,A.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,A.jsx)(`input`,{type:`checkbox`,checked:z.setDefault,onChange:e=>B(t=>({...t,setDefault:e.target.checked})),className:`accent-accent-blue`}),(0,A.jsx)(`span`,{className:`text-sm text-dark-muted`,children:g(`models.setDefaultProvider`)})]}),Ne&&(0,A.jsx)(`div`,{className:`text-sm text-accent-red`,children:Ne}),(0,A.jsxs)(`div`,{className:`flex justify-between gap-2 pt-2`,children:[(0,A.jsx)(`div`,{children:$&&N?.providers?.[$]?.hasApiKey&&(0,A.jsx)(`button`,{onClick:async()=>{if(await C({message:g(`models.deleteProviderConfirm`,{key:$}),variant:`danger`}))try{await T.config.provider.delete($),F(!1),I(`select`),R(null),H(``),await X(),await Z()}catch{}},className:`px-4 py-2 rounded border border-accent-red/30 text-accent-red hover:bg-accent-red/10 transition-colors text-sm`,children:g(`models.deleteProvider`)})}),(0,A.jsx)(`button`,{onClick:()=>{I(`select`),R(null),H(``),F(!1)},className:`px-4 py-2 rounded border border-dark-border hover:bg-dark-hover transition-colors text-sm`,children:g(`common.cancel`)}),(0,A.jsx)(S,{variant:`accent`,onClick:Lt,loading:je,children:g(`common.save`)})]})]})}),(0,A.jsx)(ne,{isOpen:ft,onClose:()=>pt(!1),title:(0,A.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,A.jsx)(c,{size:15,className:`text-accent-green`}),g(`models.catalogTitle`)]}),size:`2xl`,children:(0,A.jsxs)(`div`,{className:`space-y-3`,children:[(0,A.jsxs)(`div`,{className:`flex gap-2`,children:[(0,A.jsxs)(`div`,{className:`relative flex-1`,children:[(0,A.jsx)(c,{size:14,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,A.jsx)(`input`,{value:mt,onChange:e=>jt(e.target.value),className:`w-full ps-9 pe-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-green`,placeholder:g(`models.catalogSearchPlaceholder`),autoFocus:!0})]}),(0,A.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer`,children:[(0,A.jsx)(`input`,{type:`checkbox`,checked:wt,onChange:e=>{let t=e.target.checked;Tt(t),Dt(mt,{reason:St,tool:t})},className:`accent-accent-green`}),g(`models.catalogOnlyToolCall`)]}),(0,A.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer`,children:[(0,A.jsx)(`input`,{type:`checkbox`,checked:St,onChange:e=>{let t=e.target.checked;Ct(t),Dt(mt,{reason:t,tool:wt})},className:`accent-accent-green`}),g(`models.catalogOnlyReasoning`)]})]}),bt&&(0,A.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 p-2 rounded`,children:bt}),vt?(0,A.jsxs)(`div`,{className:`flex items-center justify-center py-10 text-dark-muted`,children:[(0,A.jsx)(m,{size:18,className:`animate-spin me-2`}),` `,g(`models.searching`)]}):(0,A.jsx)(`div`,{className:`max-h-96 overflow-y-auto custom-scrollbar border border-dark-border rounded-lg divide-y divide-dark-border`,children:gt.length===0?(0,A.jsx)(`div`,{className:`py-10 text-center text-dark-muted text-sm`,children:g(`models.catalogNoResults`)}):gt.map(e=>(0,A.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-2 hover:bg-dark-hover`,children:[(0,A.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,A.jsx)(`span`,{className:`text-sm font-medium text-dark-text truncate`,children:e.model.name||e.model.id}),(0,A.jsx)(`code`,{className:`text-badge px-1.5 py-0.5 bg-dark-bg border border-dark-border rounded text-dark-muted truncate`,children:e.model.id}),e.model.reasoning&&(0,A.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-yellow/10 text-accent-yellow rounded`,children:g(`models.badgeReasoning`)}),e.model.tool_call&&(0,A.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-blue/10 text-accent-blue rounded`,children:g(`models.badgeToolCall`)}),e.model.attachment&&(0,A.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-green/10 text-accent-green rounded`,children:g(`models.badgeMultimodal`)})]}),(0,A.jsxs)(`div`,{className:`text-meta text-dark-muted mt-0.5`,children:[e.providerName,e.model.limit?.context?` · ${g(`models.ctxLimit`,{k:(e.model.limit.context/1e3).toFixed(0)})}`:``,e.model.limit?.output?` · ${g(`models.outLimit`,{k:(e.model.limit.output/1e3).toFixed(0)})}`:``,e.model.cost?.input===void 0?``:` · $${e.model.cost.input}/M in / $${e.model.cost.output}/M out`]})]}),(0,A.jsxs)(`button`,{onClick:()=>Ot(e),className:`shrink-0 inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-accent-green/30 text-accent-green rounded hover:bg-accent-green/10 whitespace-nowrap max-md:whitespace-normal`,title:g(`models.catalogAddTitle`),children:[(0,A.jsx)(u,{size:12}),` `,g(`models.add`)]})]},`${e.providerId}:${e.model.id}`))}),(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/60`,children:g(`models.catalogSourceHint`)})]})})]})]})}function Ae({title:e,value:t,color:n}){return(0,A.jsxs)(`div`,{className:`${{green:`bg-accent-green/10 text-accent-green`,yellow:`bg-accent-yellow/10 text-accent-yellow`,red:`bg-accent-red/10 text-accent-red`,blue:`bg-accent-blue/10 text-accent-blue`}[n]} rounded-lg p-3`,children:[(0,A.jsx)(`div`,{className:`text-xs opacity-70`,children:e}),(0,A.jsx)(`div`,{className:`text-xl font-semibold`,children:t})]})}function U({label:e,value:t}){return(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`div`,{className:`text-dark-muted`,children:e}),(0,A.jsx)(`div`,{children:t})]})}export{H as ModelsView,H as default};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{Dr as t,Er as n,Jn as r,Y as i,ft as a,g as o,it as s,kr as c,lt as l,n as u,ni as d,ut as ee,v as te}from"./icons-B8Ngx6rM.js";import{t as f}from"./useTranslation-gGKZZfux.js";import{t as ne}from"./Button-D-g7PgYh.js";import{r as p}from"./api-ZQf0Ys8y.js";import{I as m}from"./markdown-Cps-36Z5.js";import{n as re}from"./useConfirm-CQjBnYuP.js";import{f as ie}from"./common-CPZxdYLs.js";import{n as h,t as g}from"./Install-Cuelo0If.js";var _=e(d(),1),v=m();function ae(e){return(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border ${e===`bundled`?`bg-accent-blue/15 text-accent-blue border-accent-blue`:e===`npm`?`bg-accent-purple/15 text-accent-purple border-accent-purple`:e===`local`?`bg-accent-blue/15 text-accent-blue border-accent-blue`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:e})}function oe(e){return e?(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border ${e===`builtin`?`bg-dark-hover text-dark-muted border-dark-border`:e===`openclaw`?`bg-accent-yellow/15 text-accent-yellow border-accent-yellow`:e===`deepseek-harness`?`bg-accent-green/15 text-accent-green border-accent-green`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:e}):null}function se({plugin:e,job:t,error:n,onInstall:i,onDismiss:a}){let{t:o}=f(),s=t?.status===`running`,c=t&&s?h(t.stage,o):null,l=e.marketId??e.id;return(0,v.jsxs)(`div`,{"data-install-card":l,className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 max-md:flex-wrap max-md:gap-1 max-md:min-w-0`,children:[(0,v.jsx)(`span`,{className:`text-compact font-medium text-dark-text truncate`,children:e.name||e.id}),e.version&&(0,v.jsx)(`span`,{className:`text-meta text-dark-muted shrink-0`,children:e.version}),ae(e.source),oe(e.market),e.category&&(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta bg-dark-hover text-dark-muted border border-dark-border shrink-0`,children:e.category}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted font-mono shrink-0 max-md:max-w-full max-md:truncate`,children:e.id})]}),e.description&&(0,v.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:e.description}),(0,v.jsxs)(`div`,{className:`mt-2 flex items-center gap-1.5 max-md:flex-wrap`,children:[(0,v.jsxs)(`button`,{onClick:()=>i(l,!0),disabled:s,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-blue/20 border border-accent-blue/40 text-accent-blue text-meta hover:bg-accent-blue/30 disabled:opacity-50 transition-colors`,children:[s?(0,v.jsx)(r,{size:11,className:`animate-pulse`}):(0,v.jsx)(r,{size:11}),c??o(`plugins.installActivate`)]}),(0,v.jsxs)(`button`,{onClick:()=>i(l,!1),disabled:s,className:`flex items-center gap-1 px-2 py-1 rounded bg-dark-hover border border-dark-border text-dark-muted text-meta hover:text-dark-text disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(r,{size:11}),` `,o(`plugins.installOnly`)]})]}),(t||n)&&(0,v.jsx)(g,{job:t??null,error:n??null,onClose:a,testId:`plugin-install-console`,diagnosis:{kind:`plugin`,targetId:e.marketId??e.id,label:e.name},onRetry:t?.status===`error`||!t&&n?()=>i(l,t?.activate??!0):void 0})]})}function ce({jobs:e,onSelect:t}){let{t:n}=f(),i=e.filter(e=>e.status===`running`);return i.length===0?null:(0,v.jsxs)(`div`,{"data-testid":`plugin-install-status-bar`,className:`shrink-0 mx-3 mt-2 rounded-lg border border-accent-blue/40 bg-accent-blue/10 px-2 py-1.5`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5 px-0.5 pb-1`,children:[(0,v.jsx)(r,{size:11,className:`shrink-0 text-accent-blue`}),(0,v.jsx)(`span`,{className:`text-meta tabular-nums text-dark-text`,children:i.length})]}),(0,v.jsx)(`ul`,{className:`space-y-0.5`,children:i.map(e=>{let r=Math.max(0,Math.min(100,e.progress));return(0,v.jsx)(`li`,{children:(0,v.jsxs)(`button`,{type:`button`,onClick:()=>t(e.marketId),className:`w-full flex items-center gap-1.5 rounded px-1 py-0.5 text-start hover:bg-dark-hover transition-colors max-md:flex-wrap`,children:[(0,v.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 spin-slow rounded-full border-2 border-accent-blue border-t-transparent`}),(0,v.jsx)(`span`,{className:`shrink-0 max-w-[10rem] truncate font-mono text-meta text-dark-text`,children:e.marketId}),(0,v.jsx)(`span`,{className:`shrink-0 text-meta text-dark-muted max-md:max-w-[9rem] max-md:truncate`,children:e.alreadyInstalled?n(`plugins.installAlreadyInstalled`):h(e.stage,n)}),(0,v.jsx)(`span`,{className:`flex-1 h-1 rounded-full bg-dark-hover overflow-hidden max-md:w-full`,children:(0,v.jsx)(`span`,{className:`block h-full bg-accent-blue transition-[width] duration-300 ease-out`,style:{width:`${r}%`}})}),(0,v.jsxs)(`span`,{className:`shrink-0 text-meta tabular-nums text-dark-muted`,children:[r,`%`]})]})},e.marketId)})})]})}var y=700;function b(e,t){if(!(t in e))return e;let n={...e};return delete n[t],n}function le(){let[e,t]=(0,_.useState)({}),[n,r]=(0,_.useState)({}),[i,a]=(0,_.useState)(0),o=(0,_.useRef)(new Map),s=(0,_.useCallback)(e=>{let t=o.current.get(e);t!==void 0&&(window.clearTimeout(t),o.current.delete(e))},[]),c=(0,_.useCallback)((e,n)=>{s(e);let i=async()=>{let c=await p.get(`/api/plugins/install/${encodeURIComponent(n)}`);if(!c.success||!c.data){r(t=>({...t,[e]:c.error??`Lost install job`})),s(e),a(e=>e+1);return}let l=c.data;t(t=>({...t,[e]:l})),l.status===`running`?o.current.set(e,window.setTimeout(()=>void i(),y)):(o.current.delete(e),a(e=>e+1))};i()},[s]),l=(0,_.useCallback)(async(e,n)=>{s(e),r(t=>b(t,e)),t(t=>({...t,[e]:{jobId:`local:${e}:${Date.now()}`,marketId:e,activate:n,status:`running`,stage:`queued`,progress:0,logs:[],alreadyInstalled:!1,startedAt:Date.now()}}));let i=await p.post(`/api/plugins/install`,{id:e,activate:n});if(!i.success){let n=i.error??`Install request failed`;return t(t=>b(t,e)),r(t=>({...t,[e]:n})),{job:null,error:n}}if(!i.data?.jobId)return t(t=>b(t,e)),{job:null,error:null};let a=i.data;return t(t=>({...t,[e]:a})),c(e,a.jobId),{job:a,error:null}},[c,s]);return(0,_.useEffect)(()=>{let e=o.current;return()=>{for(let t of e.values())window.clearTimeout(t);e.clear()}},[]),{jobs:e,errors:n,settledCount:i,start:l,dismiss:(0,_.useCallback)(n=>{let i=e[n];i&&i.status===`running`||(t(e=>b(e,n)),r(e=>b(e,n)))},[e])}}var x=12,S=`other`,ue=[`all`,`builtin`,`openclaw`,`deepseek-harness`];function de(e){return e===`wired`?`bg-accent-green/15 text-accent-green border-accent-green`:e===`pending`||e===`pending_wiring`?`bg-accent-yellow/15 text-accent-yellow border-accent-yellow`:`bg-dark-hover text-dark-muted border-dark-border`}function C(e){return e.category?.trim()||S}function w(e){return e.trim().toLowerCase().replace(/[._\s]+/g,`-`)}function fe(e,t){let n=t.trim().toLowerCase();return!n||[e.id,e.name,e.description,e.category,...e.tags??[]].filter(e=>typeof e==`string`).join(` `).toLowerCase().includes(n)}function pe(){let{t:e}=f(),[r,d]=(0,_.useState)(`installed`),[m,h]=(0,_.useState)([]),[g,oe]=(0,_.useState)([]),[y,b]=(0,_.useState)([]),[S,pe]=(0,_.useState)(null),[T,me]=(0,_.useState)(!0),[E,he]=(0,_.useState)(null),[D,ge]=(0,_.useState)(null),[_e,ve]=(0,_.useState)(null),[O,k]=(0,_.useState)(null),[A,j]=(0,_.useState)(null),[ye,M]=(0,_.useState)(null),[N,P]=(0,_.useState)(``),[F,I]=(0,_.useState)(null),[L,R]=(0,_.useState)(null),[z,B]=(0,_.useState)(1),V=(0,_.useCallback)((e,t)=>{k({kind:e,text:t}),window.setTimeout(()=>k(null),4e3)},[]),H=(0,_.useCallback)(async()=>{me(!0),he(null);let[e,t]=await Promise.all([p.get(`/api/plugins`),p.get(`/api/plugins/market`)]);e.success&&e.data?(h(e.data.plugins),pe(e.data.schemaVersion??null),oe(e.data.issues??[])):he(e.error??`Failed to load plugins`),t.success&&t.data&&b(t.data.plugins),me(!1)},[]);(0,_.useEffect)(()=>{H()},[H]);let U=(0,_.useMemo)(()=>m.filter(e=>e.installable!==!0),[m]),W=(0,_.useMemo)(()=>{let e=new Set(m.filter(e=>e.installable===!0).map(e=>w(e.id))),t=new Set;for(let e of m)e.installable!==!0&&(t.add(w(e.id)),e.marketId&&t.add(w(e.marketId)));return[...m.filter(e=>e.installable===!0),...y.filter(n=>{let r=w(n.id);return!e.has(r)&&!t.has(r)})]},[m,y]),G=(0,_.useCallback)(e=>e.filter(e=>F&&C(e)!==F||L&&(e.market??null)!==L?!1:fe(e,N)),[F,N,L]),K=(0,_.useMemo)(()=>G(U),[G,U]),q=(0,_.useMemo)(()=>G(W),[G,W]),be=(0,_.useMemo)(()=>{let e=new Set;for(let t of W)e.add(C(t));return[`all`,...Array.from(e).sort()]},[W]),J=(0,_.useMemo)(()=>{let e=new Set;for(let t of W)t.market&&e.add(t.market);return ue.filter(t=>t===`all`||e.has(t))},[W]),xe=e=>Math.max(1,Math.ceil(e/x)),Se=(e,t)=>e.slice((t-1)*x,t*x),Y=xe(K.length),X=xe(q.length),Ce=(0,_.useMemo)(()=>Se(K,Math.min(z,Y)),[K,z,Y]),we=(0,_.useMemo)(()=>Se(q,Math.min(z,X)),[q,z,X]);(0,_.useEffect)(()=>{B(1)},[r,N,F,L]),(0,_.useEffect)(()=>{L!==null&&!J.includes(L)&&R(null)},[L,J]);let Te=N.trim().length>0||F!==null||L!==null,Z=(0,_.useCallback)(async(e,t,n)=>{ge(e),ve(t);try{let r=await n();r&&r.success===!1?V(`err`,String(r.error??`Request failed`)):(V(`ok`,`${t} ${e} ✓`),await H())}catch(e){V(`err`,e instanceof Error?e.message:String(e))}finally{ge(null),ve(null)}},[H,V]),Q=le(),Ee=async(e,t)=>{let{job:n,error:r}=await Q.start(e,t);if(!n){if(r)return V(`err`,r);V(`ok`,`installed ${e} ✓`),await H()}},De=Q.settledCount;(0,_.useEffect)(()=>{De>0&&H()},[De,H]);let Oe=(0,_.useMemo)(()=>Object.values(Q.jobs),[Q.jobs]),$=(0,_.useCallback)(e=>{d(`available`),P(``),I(null),R(null);let t=W.findIndex(t=>((`marketId`in t?t.marketId:void 0)??t.id)===e);t>=0&&B(Math.floor(t/x)+1),requestAnimationFrame(()=>{Array.from(document.querySelectorAll(`[data-install-card]`)).find(t=>t.getAttribute(`data-install-card`)===e)?.scrollIntoView({block:`center`,behavior:`smooth`})})},[W]),ke=(0,_.useCallback)(e=>{if(!e)return;let t=w(e.marketId??e.id),n=e=>w((`marketId`in e?e.marketId:void 0)??e.id);W.some(e=>n(e)===t)?$(e.marketId??e.id):U.some(e=>n(e)===t)?(d(`installed`),I(null),R(null),P(e.id)):d(`available`)},[W,U,$]),Ae=e=>Z(e,`enabled`,()=>p.post(`/api/plugins/${encodeURIComponent(e)}/enable`)),je=e=>Z(e,`disabled`,()=>p.post(`/api/plugins/${encodeURIComponent(e)}/disable`)),Me=e=>Z(e,`uninstalled`,()=>p.delete(`/api/plugins/${encodeURIComponent(e)}`)),Ne=async e=>{M(e);try{let t=await p.post(`/api/plugins/l2/provider/${encodeURIComponent(e)}`);t.success&&t.data?(V(`ok`,`Provider ${t.data.applied} applied to config ✓`),await H()):V(`err`,t.error??`Apply failed`)}catch(e){V(`err`,e instanceof Error?e.message:String(e))}finally{M(null)}},Pe=(r,i)=>i>1?(0,v.jsxs)(`div`,{className:`flex items-center justify-center gap-3 pt-3 pb-1 select-none max-md:flex-wrap max-md:gap-2`,children:[(0,v.jsxs)(`button`,{onClick:()=>B(e=>Math.max(1,e-1)),disabled:z<=1,className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border bg-dark-hover text-dark-muted text-meta hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:[(0,v.jsx)(t,{size:12}),` `,e(`plugins.prevPage`)]}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted`,children:e(`plugins.pageInfo`,{page:Math.min(z,i),pages:i,count:r})}),(0,v.jsxs)(`button`,{onClick:()=>B(e=>Math.min(i,e+1)),disabled:z>=i,className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border bg-dark-hover text-dark-muted text-meta hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:[e(`plugins.nextPage`),` `,(0,v.jsx)(n,{size:12})]})]}):null,Fe=t=>(0,v.jsx)(`div`,{className:`mt-8 text-center text-xs text-dark-muted`,children:Te?e(`plugins.noMatch`):t});return(0,v.jsxs)(`div`,{className:`h-full flex flex-col min-h-0 bg-dark-bg`,children:[(0,v.jsxs)(`div`,{className:`h-11 flex items-center gap-2 px-3 border-b border-dark-border bg-dark-bg shrink-0 select-none`,children:[(0,v.jsx)(a,{size:15,className:`text-accent-blue`}),(0,v.jsx)(`span`,{className:`truncate text-compact font-medium text-dark-text`,children:e(`nav.plugins`)}),S!==null&&(0,v.jsxs)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-dark-hover text-dark-muted border border-dark-border`,children:[`schema v`,S]}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`button`,{onClick:()=>void H(),className:`p-1.5 rounded hover:bg-dark-hover text-dark-muted hover:text-dark-text transition-colors`,title:`Refresh`,children:(0,v.jsx)(s,{size:14,className:T?`animate-spin`:``})})]}),g.length>0&&(0,v.jsxs)(`div`,{className:`shrink-0 mx-3 mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5`,children:[(0,v.jsx)(o,{size:13,className:`shrink-0 text-accent-yellow`}),(0,v.jsx)(`span`,{className:`text-xs text-dark-text`,children:e(`plugins.issues.title`,{count:g.length})}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(ne,{variant:`ghost`,size:`sm`,onClick:()=>ke(g[0]),children:e(`plugins.issues.goMarket`)})]}),(0,v.jsx)(`ul`,{className:`max-h-28 space-y-1 overflow-y-auto px-3 pb-2`,children:g.map(t=>{let n=t.marketId??t.id,r=t.stage===`install`||t.stage===`restore`,i=r&&Q.jobs[n]?.status===`running`;return(0,v.jsxs)(`li`,{className:`flex items-baseline gap-1.5 text-meta`,children:[(0,v.jsx)(`span`,{className:`shrink-0 rounded border border-dark-border bg-dark-hover px-1 text-dark-muted`,children:e(`plugins.issues.stage.${t.stage}`)}),(0,v.jsx)(`span`,{className:`shrink-0 font-mono text-dark-text`,children:t.marketId??t.id}),t.channelType&&(0,v.jsx)(`span`,{className:`shrink-0 text-dark-muted`,children:e(`plugins.issues.channelType`,{type:t.channelType})}),t.message&&(0,v.jsx)(`span`,{className:`truncate text-dark-muted`,title:t.message,children:t.message}),r&&(0,v.jsx)(`button`,{onClick:()=>void Ee(n,!0),disabled:i,title:e(`plugins.installActivate`),className:`ms-auto shrink-0 rounded border border-accent-blue/40 px-1 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 transition-colors`,children:e(`plugins.installRetry`)})]},`${t.stage}:${t.id}`)})})]}),(0,v.jsx)(`div`,{className:`flex items-center gap-1 px-3 pt-2 shrink-0`,children:[`installed`,`available`].map(t=>(0,v.jsx)(`button`,{onClick:()=>d(t),className:`px-3 py-1.5 rounded-t text-xs transition-colors ${r===t?`bg-dark-surface text-accent-blue border border-b-0 border-dark-border`:`text-dark-muted hover:text-dark-text`}`,children:t===`installed`?e(`plugins.installedTab`,{count:U.length}):e(`plugins.availableTab`,{count:W.length})},t))}),(0,v.jsx)(ce,{jobs:Oe,onSelect:$}),(0,v.jsxs)(`div`,{className:`shrink-0 px-3 pt-2 pb-1 space-y-2 bg-dark-bg`,children:[(0,v.jsxs)(`div`,{className:`relative`,children:[(0,v.jsx)(i,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted pointer-events-none`}),(0,v.jsx)(`input`,{value:N,onChange:e=>P(e.target.value),placeholder:e(`plugins.searchPlaceholder`),className:`w-full ps-8 pe-8 py-1.5 rounded bg-dark-hover border border-dark-border text-xs text-dark-text placeholder-dark-muted outline-none focus:border-accent-blue/50 transition-colors`}),N&&(0,v.jsx)(`button`,{onClick:()=>P(``),className:`absolute end-2 top-1/2 -translate-y-1/2 p-0.5 rounded text-dark-muted hover:text-dark-text transition-colors`,title:e(`plugins.clear`),children:(0,v.jsx)(u,{size:12})})]}),r===`available`&&be.length>2&&(0,v.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:be.map(t=>(0,v.jsx)(`button`,{onClick:()=>I(t===`all`?null:t),className:`px-2 py-0.5 rounded-full text-meta border transition-colors ${t===`all`&&F===null||F===t?`bg-accent-blue/20 text-accent-blue border-accent-blue/40`:`bg-dark-hover text-dark-muted border-dark-border hover:text-dark-text`}`,children:t===`all`?e(`plugins.allCategories`):t},t))}),r===`available`&&(0,v.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:J.map(t=>{let n=t===`all`?e(`plugins.marketFilterAll`):t===`builtin`?e(`plugins.marketFilterBuiltin`):t;return(0,v.jsx)(`button`,{onClick:()=>R(t===`all`?null:t),className:`px-2 py-0.5 rounded-full text-meta border transition-colors ${t===`all`&&L===null||L===t?`bg-accent-blue/20 text-accent-blue border-accent-blue/40`:`bg-dark-hover text-dark-muted border-dark-border hover:text-dark-text`}`,children:n},t)})})]}),(0,v.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-3 pb-4`,children:[E&&(0,v.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 px-3 py-2 rounded bg-accent-red/15 border border-accent-red text-accent-red text-xs`,children:[(0,v.jsx)(o,{size:14}),` `,E]}),T&&!E&&(0,v.jsx)(`div`,{className:`mt-8 px-4`,role:`status`,children:(0,v.jsx)(ie,{count:4})}),!T&&r===`installed`&&(0,v.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[K.length===0&&Fe(e(`plugins.emptyInstalled`)),Ce.map(t=>{let n=t.l2??[],r=t,i=r.status===`active`,a=r.status===`disabled`||r.enabled===!1;return(0,v.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 max-md:flex-wrap max-md:gap-1 max-md:min-w-0`,children:[(0,v.jsx)(`span`,{className:`text-compact font-medium text-dark-text truncate`,children:t.name||t.id}),t.version&&(0,v.jsx)(`span`,{className:`text-meta text-dark-muted shrink-0`,children:t.version}),ae(t.source),(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border shrink-0 ${i?`bg-accent-green/15 text-accent-green border-accent-green`:a?`bg-accent-yellow/10 text-accent-yellow border-accent-yellow/60`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:i?`active`:a?`disabled`:`installed`}),t.httpMounted&&(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta bg-accent-green/15 text-accent-green border border-accent-green shrink-0`,children:`http mounted`}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted font-mono shrink-0 max-md:max-w-full max-md:truncate`,children:t.id})]}),t.description&&(0,v.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:t.description}),n.length>0&&(0,v.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:[n.map(e=>(0,v.jsxs)(`span`,{title:e.note||e.id,className:`px-1.5 py-0.5 rounded text-meta border cursor-help ${de(e.status)}`,children:[e.kind,` · `,e.status,e.status===`wired`&&(0,v.jsx)(c,{size:10,className:`inline ms-0.5`})]},`${e.kind}-${e.id}`)),n.filter(e=>e.kind===`provider`&&e.status===`wired`).map(t=>(0,v.jsx)(`button`,{disabled:ye===t.id,onClick:()=>void Ne(t.id),className:`px-1.5 py-0.5 rounded text-meta border border-accent-blue/40 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 transition-colors`,title:e(`plugins.applyProviderTitle`),children:ye===t.id?`applying…`:`apply provider`},`apply-${t.id}`))]}),(0,v.jsxs)(`div`,{className:`mt-2 flex items-center gap-1.5 max-md:flex-wrap`,children:[i?(0,v.jsxs)(`button`,{onClick:()=>void je(t.id),disabled:D===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-yellow/15 border border-accent-yellow text-accent-yellow text-meta hover:bg-accent-yellow/15 disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(ee,{size:11}),` `,D===t.id?`${_e}…`:e(`plugins.deactivate`)]}):(0,v.jsxs)(`button`,{onClick:()=>void Ae(t.id),disabled:D===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-green/15 border border-accent-green text-accent-green text-meta hover:bg-accent-green/15 disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(l,{size:11}),` `,D===t.id?`${_e}…`:e(`plugins.activate`)]}),(0,v.jsxs)(`button`,{onClick:()=>j(t.id),disabled:D===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-dark-hover border border-dark-border text-dark-muted text-meta hover:text-accent-red hover:border-accent-red disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(te,{size:11}),` `,e(`plugins.uninstall`)]})]})]},t.id)}),Pe(K.length,Y)]}),!T&&r===`available`&&(0,v.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[q.length===0&&Fe(e(`plugins.emptyMarket`)),we.map(e=>{let t=(`marketId`in e?e.marketId:void 0)??e.id;return(0,v.jsx)(se,{plugin:e,job:Q.jobs[t],error:Q.errors[t]??null,onInstall:(e,t)=>void Ee(e,t),onDismiss:()=>Q.dismiss(t)},e.id)}),Pe(q.length,X)]})]}),O&&(0,v.jsxs)(`div`,{className:`fixed bottom-4 end-4 z-50 flex items-center gap-2 px-3 py-2 rounded-lg border text-xs shadow-lg ${O.kind===`ok`?`bg-accent-green/15 border-accent-green text-accent-green`:`bg-accent-red/15 border-accent-red text-accent-red`}`,children:[O.kind===`ok`?(0,v.jsx)(c,{size:13}):(0,v.jsx)(u,{size:13}),` `,O.text]}),(0,v.jsx)(re,{isOpen:A!==null,title:e(`plugins.uninstallTitle`),message:e(`plugins.uninstallConfirm`,{id:A??``}),onConfirm:()=>{A&&Me(A),j(null)},onClose:()=>j(null)})]})}export{pe as PluginsView};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{Cn as t,Er as n,G as r,Or as i,Wn as a,Xr as o,Y as s,Zn as c,_t as l,br as u,dt as d,g as f,it as p,kr as m,n as h,ni as g,nr as _,qn as v,ut as y,vr as b,wn as x,zr as S}from"./icons-B8Ngx6rM.js";import{r as C}from"./react-vendor-CXI113IS.js";import{t as w}from"./useTranslation-gGKZZfux.js";import{u as T}from"./imageUrl-CrQM4gmf.js";import{i as E,r as D,t as O}from"./Button-D-g7PgYh.js";import{c as k}from"./threads-lr33dwqg.js";import"./src-BK8SoTFV.js";import{gt as ee,ht as A,l as j,mt as M,pt as N}from"./DiffPreview-D8tIj_aF.js";import{n as te,r as P,t as F}from"./InputArea-D5F91Uwk.js";import{t as ne}from"./api-ZQf0Ys8y.js";import{I}from"./markdown-Cps-36Z5.js";import{i as re,n as ie,r as L,s as ae}from"./FileContextMenu-C5WYeBNu.js";import{r as R,t as z}from"./useConfirm-CQjBnYuP.js";import"./common-CPZxdYLs.js";import{C as B,E as V,S as H,T as U,b as oe,f as W,w as se,x as G,y as K}from"./index-STsyoFCk.js";var ce=C(),q=e(g(),1);function le(e={}){let t=e.enabled!==!1,n=A(e=>e.projects),r=A(e=>e.total),i=A(e=>e.hidden),a=A(e=>e.detail),o=A(e=>e.detailLoading),s=A(e=>e.detailError),c=A(e=>e.query),l=A(e=>e.sort),u=A(e=>e.stale),d=A(e=>e.loading),f=A(e=>e.lastError),p=A(e=>e.disabled),m=A(e=>e.openProjectId),h=A(e=>e.refresh);(0,q.useEffect)(()=>{t&&A.getState().refresh()},[t]),(0,q.useEffect)(()=>{t&&u&&A.getState().scheduleRefresh()},[t,u]),(0,q.useEffect)(()=>{if(!t||typeof document>`u`)return;let e=()=>{document.visibilityState===`visible`&&A.getState().refresh()};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[t]);let g=M(n,l),_=new Set(i),v=g.filter(e=>_.has(e.projectId));return{projects:g.filter(e=>!_.has(e.projectId)).filter(e=>e.rootExists),hiddenProjects:v,hiddenCount:v.length,total:r,detail:a,detailLoading:o,detailError:s,query:c,sort:l,stale:u,loading:d,lastError:f,disabled:p,openProjectId:m,setQuery:e=>A.getState().setQuery(e),setSort:e=>A.getState().setSort(e),openProject:e=>void A.getState().openProject(e),closeDetail:()=>A.getState().closeDetail(),enterProject:(e,t)=>A.getState().enterProject(e,t),backToProjectList:()=>A.getState().backToProjectList(),createProject:(e,t)=>A.getState().createProject(e,t),hideProject:e=>A.getState().hideProject(e),unhideProjects:e=>A.getState().unhideProjects(e),unhideAll:()=>A.getState().unhideAll(),probeEntry:()=>void A.getState().probeEntry(),refresh:()=>void h()}}var J=I();function ue({isOpen:e,onClose:t,projects:n,onRestore:r}){let{t:i}=w(),[a,o]=(0,q.useState)(()=>new Set),s=(0,q.useRef)(n);s.current=n,(0,q.useEffect)(()=>{e&&o(new Set(s.current.map(e=>e.projectId)))},[e]);let c=n.length>0&&a.size===n.length,l=e=>{o(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};return(0,J.jsxs)(R,{isOpen:e,onClose:t,title:i(`projects.hiddenModalTitle`),size:`md`,bodyClassName:`p-0`,children:[(0,J.jsxs)(`div`,{"data-testid":`projects-hidden-modal`,children:[(0,J.jsx)(`p`,{className:`border-b border-dark-border px-6 py-3 text-meta leading-relaxed text-dark-muted max-md:px-4`,children:i(`projects.hiddenModalHint`)}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-dark-border/60 px-6 py-2 max-md:flex-wrap max-md:px-4`,children:[(0,J.jsx)(`button`,{type:`button`,onClick:()=>{o(c?new Set:new Set(n.map(e=>e.projectId)))},className:`text-meta text-dark-muted underline transition-colors hover:text-dark-text hover:no-underline`,"data-testid":`projects-hidden-toggle-all`,children:i(c?`projects.hiddenClearSelection`:`projects.hiddenSelectAll`)}),(0,J.jsx)(`span`,{className:`ms-auto text-meta tabular-nums text-dark-muted/70`,children:i(`projects.hiddenSelectedCount`,{count:a.size})})]}),(0,J.jsx)(`ul`,{className:`max-h-[50vh] overflow-y-auto custom-scrollbar`,"data-testid":`projects-hidden-list`,children:n.map(e=>{let t=a.has(e.projectId);return(0,J.jsx)(`li`,{children:(0,J.jsxs)(`label`,{className:D(`flex cursor-pointer items-center gap-2.5 border-b border-dark-border/40 px-6 py-2 transition-colors max-md:px-4`,t?`bg-dark-hover/60`:`hover:bg-dark-hover/40`),"data-testid":`projects-hidden-row-${e.projectId}`,children:[(0,J.jsx)(`input`,{type:`checkbox`,checked:t,onChange:()=>l(e.projectId),"data-testid":`projects-hidden-option-${e.projectId}`,className:`h-3.5 w-3.5 shrink-0 cursor-pointer`}),(0,J.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,J.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,J.jsx)(`span`,{className:`truncate text-compact text-dark-text`,title:e.root,children:e.name}),!e.rootExists&&(0,J.jsx)(`span`,{className:`shrink-0 text-badge text-accent-yellow`,children:i(`projects.rootMissing`)})]}),(0,J.jsx)(`span`,{className:`mt-0.5 block truncate font-mono text-meta text-dark-muted/70`,title:e.root,children:e.root})]})]})},e.projectId)})})]}),(0,J.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-dark-border px-6 py-3 max-md:px-4`,children:[(0,J.jsx)(O,{onClick:t,children:i(`common.cancel`)}),(0,J.jsx)(O,{variant:`accent`,disabled:a.size===0,onClick:()=>{let e=n.filter(e=>a.has(e.projectId)).map(e=>e.projectId);e.length!==0&&(r(e),t())},"data-testid":`projects-hidden-confirm`,children:i(`projects.hiddenRestoreSelected`,{count:a.size})})]})]})}var de={neutral:`border-dark-border bg-dark-hover/40 text-dark-muted`,ok:`border-accent-green/30 bg-accent-green/10 text-accent-green`,warn:`border-accent-yellow/40 bg-accent-yellow/10 text-accent-yellow`};function fe(e){return e.threads.waiting>0?{tone:`waiting`,live:!1}:e.threads.review>0?{tone:`review`,live:!1}:e.threads.working>0||e.sessions.running>0?{tone:`working`,live:!0}:{tone:`idle`,live:!1}}function Y({tone:e=`neutral`,testid:t,title:n,children:r}){return(0,J.jsx)(`span`,{"data-testid":t,title:n,className:D(`inline-flex shrink-0 items-center gap-0.5 rounded-full border px-1.5 py-px text-meta leading-4`,de[e]),children:r})}function X({icon:e,label:t,hint:n,disabled:r,testid:i,onClick:a}){let o=r?`${t} — ${n??``}`:t;return(0,J.jsx)(`button`,{type:`button`,"aria-label":o,title:o,"data-testid":i,"data-disabled":r?`true`:`false`,disabled:r,onClick:e=>{e.stopPropagation(),a()},className:`inline-flex h-6 w-6 items-center justify-center rounded-md text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-transparent`,children:e})}var pe=(0,q.memo)(function({project:e,onOpen:t,onOpenFolder:n,onCopyRoot:r,onHide:i,now:o}){let{t:s}=w(),c=!e.rootExists,l=Object.values(e.threads).reduce((e,t)=>e+t,0),u=fe(e),d=j(e.lastActivityAt,o,s);return(0,J.jsxs)(`div`,{role:`button`,tabIndex:0,onClick:()=>t(e.projectId),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&n.target===n.currentTarget&&(n.preventDefault(),t(e.projectId))},className:D(`group relative flex cursor-pointer items-center gap-2.5 rounded-lg border px-3 py-2 text-start transition-colors`,c?`border-dashed border-dark-border/60 opacity-70`:`border-dark-border hover:border-accent-blue/40 hover:bg-dark-hover/40`),"data-testid":`project-row-${e.projectId}`,"data-root-missing":c?`true`:`false`,"data-status":u.tone,children:[(0,J.jsx)(`span`,{"aria-hidden":`true`,className:`status-dot shrink-0`,"data-tone":u.tone,"data-live":u.live?`true`:`false`,"data-testid":`project-status-${e.projectId}`}),(0,J.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,J.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,J.jsx)(`span`,{className:`truncate text-compact font-semibold text-dark-text`,title:e.root,children:e.name}),(0,J.jsx)(`span`,{className:`shrink-0 rounded border border-dark-border px-1 py-px text-badge leading-4 text-dark-muted`,children:s(`projects.visibility`)}),c&&(0,J.jsx)(`span`,{className:`shrink-0 text-badge text-accent-yellow`,children:s(`projects.rootMissing`)})]}),(0,J.jsx)(`span`,{className:`mt-0.5 flex items-center gap-2 text-meta leading-tight text-dark-muted/70`,children:(0,J.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono`,title:e.root,children:e.root})})]}),(0,J.jsxs)(`span`,{className:`hidden shrink-0 items-center gap-1.5 md:flex`,children:[(0,J.jsxs)(Y,{testid:`project-sessions-${e.projectId}`,children:[s(`projects.sessionCount`,{count:e.sessions.total}),e.sessions.running>0&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`span`,{className:`text-dark-muted/40`,"aria-hidden":`true`,children:`·`}),(0,J.jsx)(`span`,{className:`inline-flex items-center gap-0.5 text-accent-blue`,"data-testid":`project-running`,children:s(`projects.runningCount`,{count:e.sessions.running})})]})]}),(0,J.jsx)(Y,{testid:`project-threads-${e.projectId}`,children:l>0?s(`projects.threadCount`,{count:l}):s(`projects.noThreads`)}),e.agentMd.present?(0,J.jsx)(Y,{tone:e.agentMd.truncated?`warn`:`ok`,testid:`project-agentmd-${e.projectId}`,title:e.agentMd.truncated?s(`projects.agentMdTruncated`,{bytes:e.agentMd.bytes??0}):s(`projects.agentMdBytes`,{bytes:e.agentMd.bytes??0}),children:e.agentMd.truncated?s(`projects.agentMdTruncatedShort`):s(`projects.agentMdReady`)}):(0,J.jsx)(Y,{testid:`project-agentmd-${e.projectId}`,children:s(`projects.agentMdAbsent`)}),c&&(0,J.jsx)(Y,{tone:`warn`,testid:`project-missing-${e.projectId}`,children:s(`projects.rootMissingChip`)})]}),d&&(0,J.jsx)(`span`,{className:`hidden shrink-0 font-mono text-meta tabular-nums text-dark-muted lg:block`,"data-testid":`project-activity-${e.projectId}`,children:d}),(0,J.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5`,onClick:e=>e.stopPropagation(),children:[(0,J.jsx)(X,{icon:(0,J.jsx)(x,{size:13,"aria-hidden":`true`}),label:s(`projects.openFolder`),hint:c?s(`projects.openFolderDisabled`):void 0,disabled:c,testid:`project-open-folder-${e.projectId}`,onClick:()=>n(e.root)}),(0,J.jsx)(X,{icon:(0,J.jsx)(_,{size:13,"aria-hidden":`true`}),label:s(`projects.copyRoot`),testid:`project-copy-root-${e.projectId}`,onClick:()=>r(e.root)}),(0,J.jsx)(X,{icon:(0,J.jsx)(a,{size:13,"aria-hidden":`true`}),label:s(c?`projects.removeView`:`projects.hide`),hint:s(`projects.hideHint`),testid:`project-hide-${e.projectId}`,onClick:()=>i(e.projectId)})]})]})}),me=[`answer`,`thread`,`goal`,`handoff`,`approval`,`session`];function Z(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function Q(e){return typeof e==`string`&&e.trim()?e:void 0}function he(e){let t=Z(e);if(!t)return null;let n=t.kind;if(typeof n!=`string`||!me.includes(n))return null;let r={kind:n,reason:typeof t.reason==`string`?t.reason:``},i=Z(t.refs);if(i){let e={},t=Q(i.goalId);if(t&&(e.goalId=t),Array.isArray(i.threadIds)){let t=i.threadIds.filter(e=>typeof e==`string`&&!!e);t.length&&(e.threadIds=t)}let n=Q(i.projectKey);n&&(e.projectKey=n),Object.keys(e).length&&(r.refs=e)}let a=Z(t.suggest),o=a?Q(a.title):void 0;if(o){let e=a?Q(a.seed):void 0;r.suggest={title:o,...e?{seed:e}:{}}}return r}function ge(e){switch(e){case`thread`:return`green`;case`goal`:return`purple`;case`handoff`:return`brand`;case`approval`:return`yellow`;case`session`:return`brand`;default:return`neutral`}}var _e=(0,q.memo)(function({route:e,root:t,onOpenThread:n,onOpenSession:r}){let{t:i}=w(),a=N(e=>e.rows),o=N(e=>e.query),[s,c]=(0,q.useState)(!1),[l,u]=(0,q.useState)(null),[d,f]=(0,q.useState)(!1);if(e.kind===`session`&&!e.suggest?.title)return(0,J.jsx)(`span`,{className:`mt-0.5 block text-meta text-dark-text-secondary`,children:e.reason});let p=e.refs?.threadIds?.[0],m=e.refs?.goalId,h=e.refs?.projectKey,g=Object.keys(a).length>0,_=!!p&&o===``&&g&&!a[p],v=!!p&&!!n&&!_,y=async()=>{let n=e.suggest?.title;if(n&&!s){c(!0),f(!1);try{let i=await ne.sessions.create(n,t);if(i.success&&i.data){let a=e.suggest?.seed?.trim();a&&T.getState().setSessionInput(i.data.id,a),u(i.data.title||n),r?.(i.data.id,t,i.data.title||n)}else f(!0)}catch{f(!0)}finally{c(!1)}}};return(0,J.jsxs)(`span`,{className:`mt-1 block rounded-md border border-dark-border bg-dark-bg-tertiary/50 p-1.5`,"data-testid":`pm-route-card`,"data-route-kind":e.kind,children:[(0,J.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,J.jsx)(`span`,{className:`status-pill`,"data-tone":ge(e.kind),"data-testid":`pm-route-kind`,children:i(`projects.pmRouteKind.${e.kind}`)}),(0,J.jsx)(`span`,{className:`text-badge text-dark-text-secondary`,children:i(`projects.pmRouteTo`)})]}),e.reason?(0,J.jsx)(`span`,{className:`mt-0.5 block text-meta text-dark-text-secondary`,children:e.reason}):null,v?(0,J.jsxs)(`button`,{type:`button`,onClick:()=>n?.(p),className:`mt-1 inline-flex items-center gap-1 rounded bg-dark-hover/50 px-1.5 py-0.5 text-meta text-dark-text-primary hover:bg-dark-hover`,"data-testid":`pm-route-open-thread`,children:[i(`projects.pmRouteOpenThread`),(0,J.jsx)(`span`,{className:`font-mono text-dark-text-secondary`,children:p})]}):_?null:m?(0,J.jsxs)(`span`,{className:`mt-1 block font-mono text-badge text-dark-text-secondary`,"data-testid":`pm-route-goal-ref`,children:[i(`projects.pmRouteGoalRef`),`: `,m]}):h?(0,J.jsxs)(`span`,{className:`mt-1 block font-mono text-badge text-dark-text-secondary`,"data-testid":`pm-route-project-ref`,children:[i(`projects.pmRouteProjectRef`),`: `,h]}):null,e.kind===`session`?l?(0,J.jsx)(`span`,{className:`mt-1 block text-meta text-accent-green`,"data-testid":`pm-route-session-created`,children:i(`projects.pmRouteSessionCreated`,{title:l})}):(0,J.jsxs)(`span`,{className:`mt-1 block`,children:[(0,J.jsx)(`button`,{type:`button`,onClick:()=>void y(),disabled:s,className:`inline-flex items-center gap-1 rounded bg-accent-green/15 px-2 py-0.5 text-meta text-accent-green hover:bg-accent-green/25 disabled:opacity-50`,"data-testid":`pm-route-create-session`,children:i(s?`projects.pmRouteSessionCreating`:`projects.pmRouteCreateSession`)}),d?(0,J.jsx)(`span`,{className:`ms-1.5 text-badge text-accent-red`,"data-testid":`pm-route-create-failed`,children:i(`projects.pmRouteCreateFailed`)}):null]}):null]})});function ve(e,t,n){let r=e.fields,i=e=>typeof r[e]==`string`?r[e]:``;switch(e.type){case`pm_started`:return(0,J.jsx)(`span`,{children:t(`projects.pmStarted`)});case`pm_stopped`:return(0,J.jsx)(`span`,{children:t(`projects.pmStopped`)});case`pm_wakeup`:{let e=i(`reason`),n=i(`summary`);return(0,J.jsxs)(`span`,{children:[t(`projects.pmWakeup`),e?(0,J.jsxs)(`span`,{className:`text-dark-text-secondary`,children:[` · `,e]}):null,n?(0,J.jsx)(`span`,{className:`block text-dark-text-secondary`,children:n}):null]})}case`pm_report`:{let e=i(`title`),a=i(`progressSummary`),o=i(`nextAction`),s=typeof r.approvalsPending==`number`?r.approvalsPending:0,c=he(r.route);return(0,J.jsxs)(`span`,{children:[e?(0,J.jsx)(`span`,{className:`font-medium`,children:e}):(0,J.jsx)(`span`,{children:t(`projects.pmReport`)}),a?(0,J.jsx)(`span`,{className:`block text-dark-text-secondary`,children:a}):null,o?(0,J.jsxs)(`span`,{className:`block text-dark-text-secondary`,children:[t(`projects.pmNextAction`),`: `,o]}):null,s>0?(0,J.jsxs)(`span`,{className:`mt-0.5 inline-flex items-center gap-1 text-accent-yellow`,children:[(0,J.jsx)(u,{size:12,"aria-hidden":`true`}),` `,s,` `,t(`projects.pmApprovalsPending`)]}):null,c?(0,J.jsx)(_e,{route:c,root:n.root,onOpenThread:n.onOpenThread,onOpenSession:n.onOpenSession}):null]})}case`pm_approval_requested`:return(0,J.jsx)(`span`,{children:t(`projects.pmApprovalRequested`)});case`pm_approval_resolved`:return(0,J.jsxs)(`span`,{children:[t(`projects.pmApprovalResolved`),i(`decision`)?(0,J.jsxs)(`span`,{className:`text-dark-text-secondary`,children:[` · `,i(`decision`)]}):null]});default:return(0,J.jsx)(`span`,{children:e.type})}}var ye=(0,q.memo)(function({root:e,onOpenThread:t,onOpenSession:r,children:a}){let{t:o}=w(),s=(0,q.useMemo)(()=>k(e)??``,[e]),c=V(e=>e.residentByProject[s]??!1),l=V(e=>e.activityByProject[s]??K),d=V(e=>e.approvals),f=(0,q.useMemo)(()=>B(d,s),[d,s]),p=V(e=>e.resolveApproval),[g,_]=(0,q.useState)(!1),[v,y]=(0,q.useState)(!1);(0,q.useEffect)(()=>{s&&H(s)},[s]);let x=async()=>{if(s&&!v){y(!0);try{await U(s,!c)}finally{y(!1)}}},C=l.slice(-20).reverse(),T=(0,q.useMemo)(()=>{if(g)return null;let e=l.slice(-20);for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.type!==`pm_report`)continue;let r=he(n.fields.route);if(r)return r}return null},[l,g]),E=(0,q.useMemo)(()=>({root:e,onOpenThread:t,onOpenSession:r}),[e,t,r]);return(0,J.jsxs)(`section`,{"aria-label":o(`projects.pmPanel`),className:`flex min-h-0 min-w-0 flex-1 flex-col border-b border-dark-border`,children:[(0,J.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 overflow-hidden px-3 py-2 max-md:flex-wrap`,children:[(0,J.jsx)(S,{size:14,"aria-hidden":`true`,className:c?`text-accent-green`:`text-dark-text-secondary`}),(0,J.jsx)(`span`,{className:`min-w-0 shrink truncate text-xs font-medium`,children:o(`projects.pmPanel`)}),(0,J.jsxs)(`span`,{className:D(`inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-badge`,c?`bg-accent-green/15 text-accent-green`:`bg-dark-bg-tertiary text-dark-text-secondary`),children:[(0,J.jsx)(`span`,{className:D(`h-1.5 w-1.5 rounded-full`,c?`bg-accent-green`:`bg-dark-text-secondary`),"aria-hidden":`true`}),o(c?`projects.pmResident`:`projects.pmOff`)]}),(0,J.jsxs)(`div`,{className:`ms-auto flex shrink-0 items-center gap-1 max-md:w-full max-md:justify-end`,children:[(0,J.jsx)(`button`,{type:`button`,onClick:x,disabled:v||!s,className:D(`rounded px-2 py-0.5 text-meta transition-colors`,c?`text-dark-text-secondary hover:bg-dark-bg-tertiary hover:text-dark-text-primary`:`bg-accent-green/15 text-accent-green hover:bg-accent-green/25`),children:o(c?`projects.pmStop`:`projects.pmStart`)}),(0,J.jsx)(`button`,{type:`button`,onClick:()=>_(e=>!e),"aria-expanded":g,"aria-label":o(`projects.pmToggleTimeline`),className:`rounded p-1 text-dark-text-secondary hover:bg-dark-bg-tertiary hover:text-dark-text-primary`,children:g?(0,J.jsx)(i,{size:14,"aria-hidden":`true`}):(0,J.jsx)(n,{size:14,"aria-hidden":`true`})})]})]}),f.length>0&&(0,J.jsx)(`ul`,{className:`space-y-1.5 px-3 pb-2`,children:f.map(e=>(0,J.jsx)(`li`,{className:`rounded-md border border-accent-yellow bg-accent-yellow/15 p-2`,children:(0,J.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,J.jsx)(u,{size:13,"aria-hidden":`true`,className:`mt-0.5 shrink-0 text-accent-yellow`}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,J.jsx)(`p`,{className:`truncate text-xs font-medium text-dark-text-primary`,children:e.title||e.requestedAction||o(`projects.pmApprovalCard`)}),e.summary?(0,J.jsx)(`p`,{className:`mt-0.5 line-clamp-3 text-meta text-dark-text-secondary`,children:e.summary}):null,(0,J.jsxs)(`div`,{className:`mt-1.5 flex gap-1.5`,children:[(0,J.jsxs)(`button`,{type:`button`,onClick:()=>void p(e.escalationId,`approve`),className:`inline-flex items-center gap-1 rounded bg-accent-green/15 px-2 py-0.5 text-meta text-accent-green hover:bg-accent-green/25`,children:[(0,J.jsx)(m,{size:11,"aria-hidden":`true`}),` `,o(`projects.pmApprove`)]}),(0,J.jsxs)(`button`,{type:`button`,onClick:()=>void p(e.escalationId,`reject`),className:`inline-flex items-center gap-1 rounded bg-accent-red/15 px-2 py-0.5 text-meta text-accent-red hover:bg-accent-red/15`,children:[(0,J.jsx)(h,{size:11,"aria-hidden":`true`}),` `,o(`projects.pmReject`)]})]})]})]})},e.escalationId))}),T?(0,J.jsx)(`div`,{className:`px-3 pb-2`,children:(0,J.jsx)(_e,{route:T,root:E.root,onOpenThread:E.onOpenThread,onOpenSession:E.onOpenSession})}):null,a?(0,J.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:a}):null,g&&C.length>0&&(0,J.jsx)(`div`,{className:`px-3 pb-2`,children:(0,J.jsx)(`ul`,{className:`max-h-48 space-y-1.5 overflow-y-auto`,children:C.map(e=>(0,J.jsxs)(`li`,{className:`flex items-start gap-1.5 text-xs`,children:[e.type===`pm_report`?(0,J.jsx)(b,{size:12,"aria-hidden":`true`,className:`mt-0.5 shrink-0 text-accent-green`}):(0,J.jsx)(`span`,{className:`mt-1 h-1.5 w-1.5 shrink-0 rounded-full bg-dark-text-secondary`,"aria-hidden":`true`}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,J.jsx)(`div`,{className:`text-dark-text-primary`,children:ve(e,o,E)}),(0,J.jsx)(`div`,{className:`text-badge text-dark-text-secondary`,children:j(e.at)})]})]},e.id))})})]})}),be=[],xe={setActiveTab:()=>{},createNewSession:()=>{},setTheme:()=>{},setLogs:()=>{},setUnreadLogs:()=>{}},Se=(0,q.memo)(function({projectId:e,root:t,sessionId:n,onOpenThread:r,onOpenSession:i,onLoadSession:a,slashOptions:o,onStop:s,onPause:c,onResume:l}){let{t:u}=w(),d=V(e=>e.managers),f=V(e=>e.managersLoaded),p=V(e=>e.fetchManagers),m=V(t=>t.residentByProject[e]??!1),h=A(e=>e.setFocusedPmSession),g=A(e=>e.enterPmSession),_=A(e=>e.backToPmSessions);(0,q.useEffect)(()=>{p()},[p]);let v=(0,q.useMemo)(()=>d.find(t=>t.projectKey===e)?.managerSessionIds??[],[d,e]),y=v.includes(n)?n:f?v[0]??null:n;(0,q.useEffect)(()=>{f&&(y?y!==n&&g(y):_())},[f,y,n,g,_]),(0,q.useEffect)(()=>(h(y),()=>h(null)),[y,h]),(0,q.useEffect)(()=>{y&&a&&a(y)},[y,a]);let b=T(e=>y?e.messagesBySession[y]??be:be),x=T(e=>y?e.generatingSessions.includes(y):!1),S=(0,q.useCallback)(async t=>{let n=t.trim();n&&y&&(await se(e,n,y)?T.getState().addMessage(y,{id:`msg-${Date.now()}`,type:`user`,content:n,timestamp:Date.now()}):E.error(u(`projects.pmSendFailed`)))},[e,y,u]);return(0,J.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,"data-testid":`coordinator-pane`,children:(0,J.jsx)(ye,{root:t,onOpenThread:r,onOpenSession:i,children:y?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(P,{messages:b,isGenerating:x,isPaused:!1,sessionId:y}),(0,J.jsx)(F,{sessionId:y,onSend:S,onStop:()=>s?.(y),onPause:()=>c?.(y),onResume:()=>l?.(y),slashOptions:o??xe,inputDisabled:!m,inputDisabledHint:u(`projects.pmInputDisabled`)})]}):(0,J.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-6 text-center text-xs text-dark-muted max-md:px-4`,children:u(`projects.coordinatorHint`)})})})}),Ce=(0,q.memo)(function({projectName:e,projectRoot:t,missing:n,levelLabel:i,onBack:a,onBackToSessions:s,onOpenFolder:c,onNewSessionHere:l,settingsOpen:u,onToggleSettings:f,onOpenMore:p,moreItemsCount:m}){let{t:h}=w(),g=e=>{let t=e.currentTarget.getBoundingClientRect();p(t.left,t.bottom+4,ae(m))};return(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-dark-border px-3 py-2.5 max-md:flex-wrap max-md:gap-1.5`,children:[(0,J.jsx)(`button`,{type:`button`,onClick:a,className:`ui-icon-button`,title:h(`projects.back`),"aria-label":h(`projects.back`),"data-testid":`project-detail-back`,children:(0,J.jsx)(o,{size:15,"aria-hidden":`true`})}),(0,J.jsxs)(`nav`,{className:`min-w-0 flex items-baseline gap-1.5 text-sm max-md:w-full`,children:[(0,J.jsx)(`button`,{type:`button`,onClick:a,className:`shrink-0 text-dark-muted transition-colors hover:text-dark-text`,children:h(`projects.title`)}),(0,J.jsx)(`span`,{className:`shrink-0 text-dark-muted/50`,"aria-hidden":`true`,children:`›`}),(0,J.jsx)(`button`,{type:`button`,onClick:s,disabled:!s,className:D(`min-w-0 truncate transition-colors`,s?`text-dark-muted hover:text-dark-text`:`cursor-default text-dark-text`),"data-testid":`project-detail-name`,children:e}),(0,J.jsx)(`span`,{className:`shrink-0 text-dark-muted/50`,"aria-hidden":`true`,children:`›`}),(0,J.jsx)(`button`,{type:`button`,onClick:s,disabled:!s,className:D(`min-w-0 truncate transition-colors`,s?`text-dark-muted hover:text-dark-text`:`cursor-default font-medium text-dark-text`),"data-testid":`project-detail-level`,children:i})]}),(0,J.jsxs)(`div`,{className:`ms-auto flex items-center gap-2 max-md:w-full max-md:justify-end`,children:[t&&(0,J.jsx)(`span`,{className:`hidden min-w-0 max-w-[240px] truncate font-mono text-meta text-dark-muted lg:block`,title:t,"data-testid":`project-detail-root`,children:t}),(0,J.jsxs)(`button`,{type:`button`,onClick:c,disabled:n,className:`btn shrink-0 text-meta disabled:cursor-not-allowed disabled:opacity-50`,title:n?h(`projects.openFolderDisabled`):t,"data-testid":`project-detail-open-folder`,children:[(0,J.jsx)(x,{size:12,"aria-hidden":`true`}),h(`projects.openFolder`)]}),(0,J.jsxs)(`button`,{type:`button`,onClick:l,disabled:n,className:`btn shrink-0 text-meta disabled:cursor-not-allowed disabled:opacity-50`,title:h(n?`projects.newSessionDisabled`:`projects.newSessionHere`),"data-testid":`project-detail-new-session-btn`,children:[(0,J.jsx)(d,{size:12,"aria-hidden":`true`}),h(`projects.newSessionHere`)]}),(0,J.jsx)(`button`,{type:`button`,onClick:f,"aria-expanded":u,className:`ui-icon-button`,title:h(`projects.settings`),"aria-label":h(`projects.settings`),"data-testid":`project-detail-settings`,children:(0,J.jsx)(r,{size:14,"aria-hidden":`true`})}),(0,J.jsx)(`button`,{type:`button`,onClick:g,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),g(e))},className:`ui-icon-button`,title:h(`projects.moreActions`),"aria-label":h(`projects.moreActions`),"aria-haspopup":`menu`,"data-testid":`project-detail-more`,children:(0,J.jsx)(v,{size:14,"aria-hidden":`true`})})]})]})}),we=(0,q.memo)(function({projectId:e,onOpenSession:t}){let{t:r}=w(),i=V(e=>e.managers),a=V(e=>e.fetchManagers),o=V(t=>t.residentByProject[e]??!1),[s,l]=(0,q.useState)(!1),[u,f]=(0,q.useState)(!1),[p,m]=(0,q.useState)(null),[g,_]=z();(0,q.useEffect)(()=>{a()},[a]);let v=(0,q.useMemo)(()=>i.find(t=>t.projectKey===e)??null,[i,e]),y=V(e=>e.managersLoaded),b=v?.managerSessionIds??[],x=(0,q.useCallback)(async()=>{if(s)return;l(!0);let n=await G(e);await a(),l(!1),n?t(n):E.error(r(`projects.pmCreateFailed`),5e3)},[s,e,a,t,r]),C=(0,q.useCallback)(async()=>{if(u)return;f(!0);let t=await U(e,!0);await a(),f(!1),t?E.success(r(`projects.pmEnableDone`),3e3):E.error(r(`projects.pmEnableFailed`),5e3)},[u,e,a,r]),T=(0,q.useCallback)(async t=>{if(p||!await _({message:r(`projects.pmCloseSessionConfirm`),variant:`danger`}))return;m(t);let n=await oe(e,t);await a(),m(null),n?E.success(r(`projects.pmCloseSessionDone`),3e3):E.error(r(`projects.pmCloseSessionFailed`),5e3)},[p,_,e,a,r]);return(0,J.jsxs)(`section`,{className:`flex min-h-0 flex-1 flex-col`,"aria-label":r(`projects.pmSessionList`),"data-testid":`pm-session-list`,children:[g,(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 px-3 py-2 max-md:flex-wrap max-md:gap-1.5`,children:[(0,J.jsx)(S,{size:14,className:D(`shrink-0`,o?`text-accent-green`:`text-dark-muted`),"aria-hidden":`true`}),(0,J.jsx)(`span`,{className:`text-xs font-medium text-dark-text`,children:r(`projects.pmSessionList`)}),(0,J.jsx)(`span`,{className:`rounded-full border border-dark-border bg-dark-hover/40 px-1.5 py-px text-badge leading-4 text-dark-muted`,"data-testid":`pm-session-count-pill`,children:r(`projects.pmSessionCount`,{count:b.length})}),!o&&(0,J.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-dark-hover/70 px-1.5 py-px text-badge text-dark-muted`,"data-testid":`pm-session-resident-pill`,children:r(`projects.pmOff`)}),(0,J.jsxs)(`div`,{className:`ms-auto flex items-center gap-1.5 max-md:w-full max-md:justify-end`,children:[!o&&(0,J.jsx)(`button`,{type:`button`,onClick:()=>void C(),disabled:u,className:`btn shrink-0 text-meta disabled:opacity-50`,"data-testid":`pm-session-enable`,children:r(`projects.pmEnable`)}),(0,J.jsxs)(`button`,{type:`button`,onClick:()=>void x(),disabled:s,className:`btn btn-primary shrink-0 text-meta disabled:opacity-50`,title:r(`projects.pmNewSession`),"data-testid":`pm-new-session`,children:[(0,J.jsx)(d,{size:12,"aria-hidden":`true`}),r(`projects.pmNewSession`)]})]})]}),(0,J.jsx)(`p`,{className:`shrink-0 px-3 pb-2 text-meta leading-relaxed text-dark-muted`,children:r(`projects.pmSessionListHint`)}),(0,J.jsx)(`div`,{className:`board-ground min-h-0 flex-1 overflow-y-auto px-3 pb-3 custom-scrollbar`,children:(0,J.jsxs)(`div`,{className:`mx-auto flex max-w-[980px] flex-col gap-1.5`,children:[y&&b.length===0?(0,J.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface px-3 py-4 text-center`,"data-testid":`pm-session-empty`,children:[(0,J.jsx)(`p`,{className:`text-xs text-dark-text`,children:r(`projects.emptyPmSessions`)}),(0,J.jsx)(`p`,{className:`mt-1 text-meta leading-relaxed text-dark-muted`,children:r(`projects.emptyPmSessionsHint`)})]}):null,b.map((e,i)=>{let a=i===0,s=!a;return(0,J.jsxs)(`div`,{className:`group relative`,children:[(0,J.jsxs)(`button`,{type:`button`,onClick:()=>t(e),className:D(`flex w-full items-center gap-2.5 rounded-lg border border-dark-border bg-dark-surface px-3 py-2 text-start transition-colors hover:border-accent-blue/40 hover:bg-dark-hover/30`,s&&`pe-10`),"data-testid":`pm-session-row`,"data-session-id":e,children:[(0,J.jsx)(S,{size:13,"aria-hidden":`true`,className:D(`shrink-0`,o?`text-accent-green`:`text-dark-muted`)}),(0,J.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,J.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,J.jsx)(`span`,{className:`truncate text-xs text-dark-text`,children:W(b,e,r)}),a&&v?.isDuty&&(0,J.jsx)(`span`,{className:`shrink-0`,title:r(`projects.managerBadgeDuty`),children:(0,J.jsx)(c,{size:11,"aria-hidden":`true`,className:`text-accent-yellow`})})]}),(0,J.jsx)(`span`,{className:`mt-0.5 block truncate font-mono text-meta text-dark-muted/60`,title:e,children:e})]}),!s&&(0,J.jsx)(n,{size:13,"aria-hidden":`true`,className:`shrink-0 text-dark-muted opacity-0 transition-opacity group-hover:opacity-70`})]}),s&&(0,J.jsx)(`button`,{type:`button`,onClick:()=>void T(e),disabled:p===e,"aria-label":r(`projects.pmCloseSession`),title:r(`projects.pmCloseSession`),className:D(`absolute end-2 top-1/2 -translate-y-1/2 rounded p-1 transition-opacity`,`text-dark-muted hover:text-accent-red disabled:opacity-50`,p===e?`opacity-100`:`opacity-0 focus-visible:opacity-100 group-hover:opacity-100`),"data-testid":`pm-close-session`,"data-session-id":e,children:(0,J.jsx)(h,{size:13,"aria-hidden":`true`})})]},e)})]})})]})}),Te=200;function Ee({isOpen:e,onClose:t,projectId:n,currentName:r}){let{t:i}=w(),a=A(e=>e.renameProject),[o,s]=(0,q.useState)(r),[c,l]=(0,q.useState)(!1);(0,q.useEffect)(()=>{e&&(s(r),l(!1))},[e,r]);let u=async()=>{let e=o.trim();if(e===r.trim()){t();return}l(!0);let s=await a(n,e===``?null:e);l(!1),s.ok?(E.success(i(`projects.renamed`),3e3),t()):E.error(s.error,6e3)};return(0,J.jsxs)(R,{isOpen:e,onClose:t,title:i(`projects.rename`),size:`sm`,children:[(0,J.jsx)(`label`,{className:`mb-1 block text-meta text-dark-text`,htmlFor:`project-rename-input`,children:i(`projects.renameLabel`)}),(0,J.jsx)(`input`,{id:`project-rename-input`,autoFocus:!0,value:o,maxLength:Te,placeholder:r,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!c&&u()},className:`w-full rounded-lg border border-dark-border bg-dark-bg px-3 py-2 font-mono text-meta text-dark-text outline-none focus:border-accent-blue`,"data-testid":`project-rename-input`}),(0,J.jsx)(`p`,{className:`mt-1.5 text-meta leading-relaxed text-dark-muted`,children:i(`projects.renameHint`)}),(0,J.jsxs)(`div`,{className:`mt-5 flex justify-end gap-3`,children:[(0,J.jsx)(O,{onClick:t,"data-testid":`project-rename-cancel`,children:i(`common.cancel`)}),(0,J.jsx)(O,{variant:`accent`,onClick:()=>void u(),loading:c,"data-testid":`project-rename-submit`,children:i(`common.confirm`)})]})]})}var De=(0,q.memo)(function({projectId:e,onBack:t,onOpenFolder:n,onCopyRoot:r,onNewSessionHere:i,onOpenSession:o,onLoadSession:s,pmSlashOptions:c,onStopSession:u,onPauseSession:p,onResumeSession:m,onHide:h}){let{t:g}=w(),[v,y]=(0,q.useState)(!1),[b,S]=(0,q.useState)(!1),{state:C,openAt:T,close:E}=L(),D=A(e=>e.detail),O=A(e=>e.openPmSessionId),k=A(e=>e.enterPmSession),ee=A(e=>e.backToPmSessions),j=V(e=>e.managers);(0,q.useEffect)(()=>{A.getState().openProject(e)},[e]),(0,q.useEffect)(()=>{y(!1),S(!1)},[e]);let M=D?.project??null,N=M?!M.rootExists:!1,te=!M||N,P=(0,q.useMemo)(()=>{if(!O)return g(`projects.pmSessionList`);let t=j.find(t=>t.projectKey===e)?.managerSessionIds??[];return W(t,O,g)},[O,j,e,g]),F=(0,q.useMemo)(()=>{if(!M)return[];let e=[{kind:`item`,id:`copy-root`,label:g(`projects.copyRoot`),icon:_,onSelect:()=>r(M.root)}];return h&&e.push({kind:`item`,id:`hide-view`,label:g(N?`projects.removeView`:`projects.hide`),icon:a,onSelect:()=>h(M.projectId)}),e},[M,N,r,h,g]);return(0,J.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,"data-testid":`project-detail`,children:[(0,J.jsx)(Ce,{projectName:M?.name??e,projectRoot:M?.root,missing:te,levelLabel:P,onBack:t,onBackToSessions:O?ee:void 0,onOpenFolder:()=>M&&n(M.root),onNewSessionHere:()=>M&&i(M.root),settingsOpen:v,onToggleSettings:()=>y(e=>!e),onOpenMore:(e,t,n)=>T(e,t,null,{height:n}),moreItemsCount:F.length}),N&&M&&(0,J.jsxs)(`div`,{className:`flex shrink-0 items-start gap-1.5 border-b border-accent-yellow/30 bg-accent-yellow/10 px-3 py-2 text-meta leading-relaxed text-accent-yellow`,"data-testid":`project-detail-missing`,children:[(0,J.jsx)(f,{size:12,className:`mt-[1px] shrink-0`,"aria-hidden":`true`}),(0,J.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,J.jsx)(`b`,{className:`font-semibold`,children:g(`projects.rootMissingTitle`)}),M&&(0,J.jsx)(`span`,{className:`mx-1 font-mono`,children:M.root}),(0,J.jsx)(`br`,{}),g(`projects.rootMissingBody`)]})]}),v&&M&&(0,J.jsxs)(`div`,{className:`shrink-0 space-y-1 border-b border-dark-border bg-dark-hover/20 px-3 py-2`,"data-testid":`project-settings`,children:[(0,J.jsx)($,{icon:(0,J.jsx)(x,{size:12,"aria-hidden":`true`}),label:g(`projects.openFolder`),hint:M.root,disabled:N,disabledHint:N?g(`projects.openFolderDisabled`):void 0,onClick:()=>n(M.root),testId:`project-settings-open-folder`}),(0,J.jsx)($,{icon:(0,J.jsx)(_,{size:12,"aria-hidden":`true`}),label:g(`projects.copyRoot`),hint:M.root,onClick:()=>r(M.root),testId:`project-settings-copy-root`}),(0,J.jsx)($,{icon:(0,J.jsx)(l,{size:12,"aria-hidden":`true`}),label:g(`projects.rename`),hint:M.name,onClick:()=>S(!0),testId:`project-settings-rename`}),(0,J.jsx)($,{icon:(0,J.jsx)(d,{size:12,"aria-hidden":`true`}),label:g(`projects.newSessionHere`),disabled:N,disabledHint:N?g(`projects.newSessionDisabled`):void 0,onClick:()=>M&&i(M.root),testId:`project-settings-new-session`})]}),(0,J.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1`,children:(0,J.jsx)(`div`,{className:`mx-auto flex min-h-0 min-w-0 w-full max-w-[1040px] flex-1 flex-col`,"data-testid":`project-session-column`,children:O?(0,J.jsx)(Se,{projectId:e,root:M?.root??e,sessionId:O,onOpenSession:o,onLoadSession:s,slashOptions:c,onStop:u,onPause:p,onResume:m}):(0,J.jsx)(we,{projectId:e,onOpenSession:k})})}),(0,J.jsx)(re,{items:F,position:C?{x:C.x,y:C.y}:null,anchor:C?.anchor??null,onClose:E,ariaLabel:g(`projects.moreActions`)}),M&&(0,J.jsx)(Ee,{isOpen:b,onClose:()=>S(!1),projectId:M.projectId,currentName:M.name})]})});function $({icon:e,label:t,hint:n,disabled:r,disabledHint:i,onClick:a,testId:o}){return(0,J.jsxs)(`button`,{type:`button`,onClick:a,disabled:r,className:D(`flex w-full items-center gap-2 rounded px-1.5 py-1 text-start text-meta transition-colors`,r?`cursor-not-allowed text-dark-muted/60`:`text-dark-text hover:bg-dark-hover`),"data-testid":o,"data-disabled":r?`true`:`false`,title:r?i:n,children:[(0,J.jsx)(`span`,{className:`shrink-0`,children:e}),(0,J.jsx)(`span`,{className:`shrink-0`,children:t}),(0,J.jsx)(`span`,{className:`ms-auto min-w-0 truncate font-mono text-badge text-dark-muted/70`,children:r?i:n})]})}var Oe=250,ke=(0,q.memo)(function({workspaceDir:e,onNewSessionHere:n,onOpenSession:r,onLoadSession:i,pmSlashOptions:o,onStopSession:c,onPauseSession:l,onResumeSession:u}){let{t:d}=w(),{projects:m,hiddenProjects:g,hiddenCount:_,query:v,sort:b,loading:x,lastError:S,disabled:C,setQuery:T,setSort:O,openProjectId:k,enterProject:A,backToProjectList:j,createProject:M,hideProject:N,unhideProjects:P,refresh:F}=le(),[ne,I]=(0,q.useState)(!1),[re,L]=(0,q.useState)(!1),[ae,R]=(0,q.useState)(!1),[z,B]=(0,q.useState)(v),V=(0,q.useRef)(null);(0,q.useEffect)(()=>{B(v)},[v]),(0,q.useEffect)(()=>()=>{V.current&&clearTimeout(V.current)},[]);let H=e=>{B(e),V.current&&clearTimeout(V.current),V.current=setTimeout(()=>T(e),Oe)},[oe,W]=(0,q.useState)(()=>Date.now());(0,q.useEffect)(()=>{let e=setInterval(()=>W(Date.now()),3e4);return()=>clearInterval(e)},[]);let se=(0,q.useMemo)(()=>ee,[]),G=e=>{ie.openFolder(e).then(e=>{e.ok||E.error(e.error||d(`projects.openFolderFailed`),5e3)})},K=e=>{let t=navigator.clipboard?.writeText(e);t&&t.then(()=>E.success(d(`projects.copied`),2e3),()=>E.error(d(`projects.copyFailed`),4e3))};return C?(0,J.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 max-md:p-3`,"data-testid":`projects-disabled`,children:(0,J.jsxs)(`div`,{className:`max-w-md rounded-xl border border-dark-border bg-dark-surface p-4 text-center`,children:[(0,J.jsx)(y,{size:18,className:`mx-auto text-dark-muted`,"aria-hidden":`true`}),(0,J.jsx)(`p`,{className:`mt-2 text-xs leading-relaxed text-dark-muted`,children:d(`projects.disabled`)})]})}):(0,J.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,"data-testid":`projects-view`,children:[k?(0,J.jsx)(De,{projectId:k,onBack:j,onOpenFolder:G,onCopyRoot:K,onNewSessionHere:n,onOpenSession:r,onLoadSession:i,pmSlashOptions:o,onStopSession:c,onPauseSession:l,onResumeSession:u,onHide:e=>{N(e),E.info(d(`projects.hiddenToast`),4e3),j()}}):(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-dark-border px-3 py-2.5 max-md:flex-wrap max-md:gap-1.5`,children:[(0,J.jsx)(`span`,{className:`text-sm font-medium text-dark-text`,children:d(`projects.title`)}),(0,J.jsx)(`span`,{className:`rounded-full border border-dark-border bg-dark-hover/40 px-1.5 py-px text-badge leading-4 text-dark-muted`,"data-testid":`projects-count-pill`,children:d(`projects.projectCount`,{count:m.length})}),(0,J.jsx)(`div`,{className:`ms-1 flex items-center rounded-md bg-dark-hover/60 p-0.5 max-md:ms-0`,role:`group`,children:se.map(e=>(0,J.jsx)(`button`,{type:`button`,onClick:()=>O(e),"aria-pressed":b===e,className:D(`shrink-0 rounded px-1.5 py-0.5 text-meta transition-colors`,b===e?`bg-dark-surface text-dark-text`:`text-dark-muted hover:text-dark-text`),"data-testid":`projects-sort-${e}`,children:d(`projects.sort.${e}`)},e))}),(0,J.jsxs)(`div`,{className:`ms-auto flex items-center gap-1 max-md:w-full max-md:justify-end`,children:[(0,J.jsx)(`button`,{type:`button`,onClick:F,disabled:x,className:`ui-icon-button disabled:opacity-50`,title:d(`common.refresh`),"aria-label":d(`common.refresh`),"data-testid":`projects-refresh`,children:(0,J.jsx)(p,{size:14,className:D(x&&`animate-spin`),"aria-hidden":`true`})}),(0,J.jsxs)(`button`,{type:`button`,onClick:()=>I(!0),disabled:ae,className:`btn btn-primary shrink-0 text-meta disabled:opacity-60`,title:d(`projects.newHint`),"data-testid":`projects-new`,children:[(0,J.jsx)(t,{size:13,"aria-hidden":`true`}),d(`projects.new`)]})]})]}),S&&(0,J.jsx)(`div`,{className:`shrink-0 px-3 pt-2`,"data-testid":`projects-status-banner`,children:(0,J.jsxs)(`div`,{className:`flex items-start gap-1.5 rounded-lg border border-accent-red/40 bg-accent-red/10 px-2 py-1.5 text-meta leading-relaxed text-accent-red`,children:[(0,J.jsx)(f,{size:12,className:`mt-[1px] shrink-0`,"aria-hidden":`true`}),(0,J.jsx)(`span`,{className:`min-w-0 flex-1`,children:d(`projects.loadFailed`,{message:S})}),(0,J.jsx)(`button`,{type:`button`,onClick:F,className:`shrink-0 underline hover:no-underline`,"data-testid":`projects-retry`,children:d(`projects.retry`)})]})}),_>0&&(0,J.jsx)(`div`,{className:`shrink-0 px-3 pt-2`,"data-testid":`projects-hidden-banner`,children:(0,J.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded-lg border border-dark-border bg-dark-hover/40 px-2 py-1.5 text-meta text-dark-muted`,children:[(0,J.jsx)(a,{size:11,className:`shrink-0`,"aria-hidden":`true`}),(0,J.jsx)(`span`,{className:`min-w-0 flex-1`,children:d(`projects.hiddenCount`,{count:_})}),(0,J.jsx)(`button`,{type:`button`,onClick:()=>L(!0),className:`shrink-0 underline hover:no-underline`,"data-testid":`projects-unhide`,children:d(`projects.unhide`)})]})}),(0,J.jsx)(`div`,{className:`board-ground min-h-0 flex-1 overflow-y-auto px-3 py-3 custom-scrollbar`,children:(0,J.jsxs)(`div`,{className:`mx-auto flex max-w-[980px] flex-col`,children:[(0,J.jsx)(`h1`,{className:`text-lg font-semibold text-dark-text`,children:d(`projects.title`)}),(0,J.jsx)(`p`,{className:`mt-0.5 text-xs leading-relaxed text-dark-muted`,children:d(`projects.subtitle`)}),(0,J.jsxs)(`div`,{className:`mt-4 flex items-center gap-2 rounded-lg border border-dark-border bg-dark-surface px-2.5 py-1.5 transition-colors focus-within:border-accent-blue/50`,children:[(0,J.jsx)(s,{size:13,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,J.jsx)(`input`,{type:`text`,value:z,onChange:e=>H(e.target.value),placeholder:d(`projects.searchPlaceholder`),"aria-label":d(`projects.searchPlaceholder`),"data-testid":`projects-search`,className:`min-w-0 flex-1 bg-transparent text-xs text-dark-text placeholder:text-dark-muted focus:outline-none`}),z&&(0,J.jsx)(`button`,{type:`button`,onClick:()=>H(``),className:`shrink-0 rounded p-0.5 text-dark-muted transition-colors hover:text-dark-text`,"aria-label":d(`projects.searchClear`),"data-testid":`projects-search-clear`,children:(0,J.jsx)(h,{size:12,"aria-hidden":`true`})}),(0,J.jsx)(`span`,{className:`shrink-0 text-badge text-dark-muted/70`,children:d(`projects.serverFilterHint`)})]}),m.length===0?v.trim()?(0,J.jsxs)(`div`,{className:`mt-6 rounded-xl border border-dashed border-dark-border/60 py-8 text-center`,"data-testid":`projects-search-empty`,children:[(0,J.jsx)(`p`,{className:`text-xs text-dark-text`,children:d(`projects.searchEmpty`)}),(0,J.jsx)(`p`,{className:`mt-1 text-meta leading-relaxed text-dark-muted`,children:d(`projects.searchEmptyHint`,{q:v.trim()})})]}):(0,J.jsxs)(`div`,{className:`mt-6 rounded-xl border border-dashed border-dark-border/60 py-8 text-center`,"data-testid":`projects-empty`,children:[(0,J.jsx)(`p`,{className:`text-xs text-dark-text`,children:d(`projects.empty`)}),(0,J.jsx)(`p`,{className:`mt-1 text-meta leading-relaxed text-dark-muted`,children:d(`projects.emptyHint`)})]}):(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(`div`,{className:`mb-2 mt-5 flex items-center gap-2 text-badge font-semibold uppercase tracking-wide text-dark-muted/60`,children:[(0,J.jsx)(`span`,{className:`shrink-0`,children:d(`projects.yourProjects`)}),(0,J.jsx)(`span`,{className:`h-px flex-1 bg-dark-border/60`,"aria-hidden":`true`})]}),(0,J.jsx)(`div`,{className:`flex flex-col gap-1.5`,"data-testid":`projects-list`,children:m.map(e=>(0,J.jsx)(pe,{project:e,onOpen:A,onOpenFolder:G,onCopyRoot:K,onHide:e=>{N(e),E.info(d(`projects.hiddenToast`),4e3)},now:oe},e.projectId))})]})]})})]}),(0,ce.createPortal)((0,J.jsx)(ue,{isOpen:re,projects:g,onClose:()=>L(!1),onRestore:e=>{P(e),E.success(d(`projects.hiddenRestored`,{count:e.length}),3e3)}}),document.body),(0,ce.createPortal)((0,J.jsx)(te,{isOpen:ne,initial:e||``,onClose:()=>I(!1),onConfirm:e=>{I(!1),R(!0),M(e).then(async e=>{if(!e.ok){R(!1),E.error(e.error,6e3);return}e.projectId&&A(e.projectId);let t=e.projectId?await U(e.projectId,!0):!1;R(!1),t?E.success(d(`projects.created`),3e3):E.error(d(`projects.createdNoPm`),6e3)})}}),document.body)]})});export{ke as ProjectsView};
@@ -1,4 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,A as n,Bn as r,Dt as i,Er as a,Et as o,G as s,Gn as c,Jn as l,K as u,Kn as d,Kt as f,Mn as p,N as m,Or as h,Pt as g,Qn as _,S as v,Un as y,Wr as b,Xn as x,Y as S,_n as C,_t as w,a as T,bn as E,fr as D,ft as O,g as k,it as A,j,kr as M,kt as N,l as ee,lt as te,n as P,ni as ne,nr as F,nt as re,pr as ie,rn as ae,sn as I,vr as L,z as oe}from"./icons-B8Ngx6rM.js";import{t as R}from"./useTranslation-gGKZZfux.js";import{a as z}from"./imageUrl-CrQM4gmf.js";import{i as B,n as se,r as V,t as H}from"./Button-D-g7PgYh.js";import{v as ce,y as le}from"./src-BK8SoTFV.js";import{a as ue,i as de,o as fe,r as pe,t as me}from"./sttLanguages-BPcOF0nQ.js";import{r as he,t as U}from"./api-ZQf0Ys8y.js";import{A as ge,C as _e,D as ve,M as ye,O as be,S as xe,T as Se,r as Ce,v as W,y as we}from"./settingsStore-BSdi9gNd.js";import{I as Te}from"./markdown-Cps-36Z5.js";import{t as Ee}from"./whatsNewStore-C0hbStfc.js";import{i as De,t as G}from"./useConfirm-CQjBnYuP.js";import"./common-CPZxdYLs.js";import{G as Oe,J as ke,K as Ae,O as je,Y as Me,ft as K,l as Ne,p as Pe}from"./index-STsyoFCk.js";import{n as q}from"./profileChange-xrd7jkii.js";var J=e(ne(),1),Y=Te();function Fe(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function Ie(e){return new Date(e).toLocaleString()}function Le(){let[e,n]=(0,J.useState)([]),[r,i]=(0,J.useState)(null),[a,o]=(0,J.useState)(``),[s,c]=(0,J.useState)(``),[l,u]=(0,J.useState)(!1),[d,f]=(0,J.useState)(!1),m=(0,J.useCallback)(async()=>{u(!0);try{let e=await U.config.files.list();e.success&&Array.isArray(e.data)&&n(e.data)}catch{B.error(`Failed to load config files`)}finally{u(!1)}},[]),h=(0,J.useCallback)(async e=>{try{let t=await U.config.files.read(e);if(t.success&&t.data){let e=t.data;i(e.name),o(e.content),c(e.content)}}catch{B.error(`Failed to read ${e}`)}},[]);(0,J.useEffect)(()=>{m()},[m]);let g=(0,J.useCallback)(async()=>{if(r){f(!0);try{let e=await U.config.files.write(r,a);e.success?(c(a),B.success(`${r} saved`),m()):B.error(e.error||`Failed to save`)}catch{B.error(`Failed to save file`)}finally{f(!1)}}},[r,a,m]),_=a!==s,v=r?.endsWith(`.yaml`)||r?.endsWith(`.yml`),y=r?.endsWith(`.json`),b=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`);return(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`h4`,{className:`text-sm font-medium text-dark-text`,children:`Config Files`}),(0,Y.jsx)(`button`,{onClick:m,disabled:l,className:`p-1.5 rounded hover:bg-dark-hover transition-colors text-dark-muted`,title:`Refresh file list`,children:(0,Y.jsx)(A,{size:14,className:l?`animate-spin`:``})})]}),e.length===0&&!l&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted`,children:`No config files found in ~/.agent/`}),e.length>0&&(0,Y.jsxs)(`div`,{className:`flex gap-3`,children:[(0,Y.jsx)(`div`,{className:`w-48 shrink-0 space-y-0.5 max-h-[300px] overflow-y-auto custom-scrollbar`,children:e.map(e=>(0,Y.jsxs)(`button`,{onClick:()=>h(e.name),className:`w-full text-start px-2.5 py-1.5 rounded text-xs flex items-center gap-2 transition-colors ${r===e.name?`bg-accent-blue/10 text-accent-blue`:`text-dark-text hover:bg-dark-hover`}`,children:[(0,Y.jsx)(p,{size:12,className:`shrink-0`}),(0,Y.jsx)(`span`,{className:`truncate flex-1`,children:e.name}),!e.editable&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted shrink-0`,title:`Read-only`,children:`read`})]},e.name))}),r?(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between mb-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted`,children:[(0,Y.jsx)(`span`,{className:`text-dark-text font-medium`,children:r}),e.find(e=>e.name===r)&&(0,Y.jsxs)(`span`,{children:[Fe(e.find(e=>e.name===r).size),` · `,Ie(e.find(e=>e.name===r).modified)]}),_&&(0,Y.jsxs)(`span`,{className:`text-accent-yellow flex items-center gap-1`,children:[(0,Y.jsx)(k,{size:10}),`unsaved changes`]})]}),(0,Y.jsx)(H,{variant:`accent`,size:`sm`,leftIcon:(0,Y.jsx)(t,{size:12}),loading:d,disabled:!_,onClick:g,children:`Save`})]}),(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(`pre`,{className:`w-full h-[260px] p-3 rounded-lg bg-dark-bg border border-dark-border font-mono text-xs leading-relaxed overflow-auto custom-scrollbar pointer-events-none`,dangerouslySetInnerHTML:{__html:a.split(`
2
- `).map(e=>{let t=b(e);return v?t.replace(/(#.*)$/,`<span class="text-dark-muted">$1</span>`).replace(/^(\s*)([\w-]+)(:)/,`$1<span class="text-accent-blue">$2</span>$3`).replace(/:\s+(true|false|null|~)(\s*)$/,`: <span class="text-accent-purple">$1</span>$2`).replace(/:\s+(\d+\.?\d*)(\s*)$/,`: <span class="text-accent-green">$1</span>$2`).replace(/:\s+"([^"]*)"(\s*)$/,`: <span class="text-accent-yellow">"$1"</span>$2`):y?t.replace(/(\s*"[^"]*")(\s*:)/g,`<span class="text-accent-blue">$1</span>$2`).replace(/:\s+(true|false|null)/g,`: <span class="text-accent-purple">$1</span>`).replace(/:\s+(\d+\.?\d*)/g,`: <span class="text-accent-green">$1</span>`).replace(/:\s+"([^"]*)"/g,`: <span class="text-accent-yellow">"$1"</span>`):t}).join(`
3
- `)||`&nbsp;`}}),(0,Y.jsx)(`textarea`,{value:a,onChange:e=>o(e.target.value),className:`absolute inset-0 w-full h-full p-3 rounded-lg bg-transparent border border-dark-border font-mono text-xs leading-relaxed resize-none overflow-auto custom-scrollbar text-transparent caret-dark-text focus:outline-none focus:border-accent-blue/50`,style:{color:`transparent`},spellCheck:!1})]})]}):(0,Y.jsx)(`div`,{className:`flex-1 flex items-center justify-center text-xs text-dark-muted`,children:`Select a file to edit`})]})]})}var Re=[{key:`pipIndexUrl`,labelKey:`stt.sources.pipIndexUrl`,placeholderKey:`stt.sources.phPipIndex`,preset:`pipIndexUrl`},{key:`pipExtraIndexUrl`,labelKey:`stt.sources.pipExtraIndexUrl`,placeholderKey:`stt.sources.phPipExtra`},{key:`proxy`,labelKey:`stt.sources.proxy`,placeholderKey:`stt.sources.phProxy`},{key:`hfEndpoint`,labelKey:`stt.sources.hfEndpoint`,placeholderKey:`stt.sources.phHub`,preset:`hfEndpoint`}],ze=`w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text font-mono focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all disabled:opacity-50`;function Be(){let{t:e}=R(),[n,r]=(0,J.useState)(!1),[i,o]=(0,J.useState)(!1),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(!1),[d,p]=(0,J.useState)(null),[m,g]=(0,J.useState)({pipIndexUrl:``,pipExtraIndexUrl:``,proxy:``,hfEndpoint:``}),_=(0,J.useCallback)(e=>{p(e),g({pipIndexUrl:e.settings.pipIndexUrl??``,pipExtraIndexUrl:e.settings.pipExtraIndexUrl??``,proxy:e.settings.proxy??``,hfEndpoint:e.settings.hfEndpoint??``})},[]),v=(0,J.useCallback)(async()=>{c(!0);try{let e=await U.stt.getConfig();e.success&&e.data?_(e.data):e.error&&B.error(e.error)}catch{}c(!1),o(!0)},[_]);(0,J.useEffect)(()=>{n&&!i&&v()},[n,i,v]);let y=d?.envKeys,b=d?.resolved.fromEnv??[],x=e=>b.includes(e),S=Object.keys(m).filter(e=>{let t=m[e].trim();return!t||x(e)?!1:e===`pipExtraIndexUrl`||e===`proxy`||t!==d?.official[e]}),w=Object.keys(m).some(e=>!x(e)&&m[e].trim()!==(d?.settings[e]??``)),T=(0,J.useCallback)(async()=>{u(!0);try{let t={};for(let{key:e}of Re)x(e)||(t[e]=m[e].trim()||null);let n=await U.stt.setConfig(t);n.success&&n.data?(B.success(e(`stt.sources.saved`)),await v()):B.error(n.error||e(`stt.sources.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}u(!1)},[m,x,v,e]),E=(0,J.useCallback)(async()=>{u(!0);try{let t=await U.stt.setConfig({pipIndexUrl:null,pipExtraIndexUrl:null,proxy:null,hfEndpoint:null});t.success&&t.data?(B.success(e(`stt.sources.resetDone`)),await v()):B.error(t.error||e(`stt.sources.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}u(!1)},[v,e]);return(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface overflow-hidden`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:`w-full flex items-center gap-2 px-3 py-2.5 text-start hover:bg-dark-hover transition-colors`,onClick:()=>r(e=>!e),children:[n?(0,Y.jsx)(h,{size:14,className:`text-dark-muted`}):(0,Y.jsx)(a,{size:14,className:`text-dark-muted`}),(0,Y.jsx)(C,{size:14,className:`text-accent-blue`}),(0,Y.jsx)(`span`,{className:`text-sm font-medium text-dark-text flex-1`,children:e(`stt.sources.title`)}),S.length>0&&!n&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-accent-orange/15 text-accent-orange`,children:[(0,Y.jsx)(k,{size:11}),e(`stt.sources.badgeCustom`,{count:S.length})]})]}),n&&(0,Y.jsxs)(`div`,{className:`px-3 pb-3 space-y-3 border-t border-dark-border pt-3`,children:[(0,Y.jsx)(`p`,{className:`text-meta text-dark-muted`,children:e(`stt.sources.hint`)}),s&&!d?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted py-2`,children:[(0,Y.jsx)(f,{size:13,className:`animate-spin`}),e(`stt.sources.loading`)]}):(0,Y.jsxs)(Y.Fragment,{children:[Re.map(({key:t,labelKey:n,placeholderKey:r,preset:i})=>{let a=x(t),o=(y?.[t]??[]).join(` / `)||`ENV`,s=i?d?.presets?.[i]??[]:[];return(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-dark-muted mb-1`,children:[e(n),a&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-yellow`,title:e(`stt.sources.envTitle`,{name:o}),children:[(0,Y.jsx)(k,{size:11}),`env: `,o]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`input`,{type:`text`,value:a?d?.resolved[t]??``:m[t],disabled:a,spellCheck:!1,placeholder:e(r),onChange:e=>g(n=>({...n,[t]:e.target.value})),className:ze}),s.length>0&&(0,Y.jsxs)(`select`,{value:``,disabled:a,title:e(`stt.sources.preset`),onChange:e=>{let n=s.find(t=>t.id===e.target.value);n&&g(e=>({...e,[t]:n.url}))},className:`shrink-0 bg-dark-bg border border-dark-border rounded-lg px-2 py-1.5 text-xs text-dark-text focus:border-accent-blue/60 outline-none transition-all disabled:opacity-50`,children:[(0,Y.jsx)(`option`,{value:``,children:e(`stt.sources.preset`)}),s.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]})]},t)}),S.length>0&&(0,Y.jsxs)(`div`,{className:`rounded-md border border-accent-orange/30 bg-accent-orange/5 px-2.5 py-2 text-meta text-accent-orange flex items-start gap-1.5`,children:[(0,Y.jsx)(k,{size:12,className:`mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{children:e(`stt.sources.warning`)})]}),d&&!d.allowPrivateHosts&&(0,Y.jsx)(`p`,{className:`text-badge text-dark-muted`,children:e(`stt.sources.privateBlocked`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-0.5`,children:[(0,Y.jsx)(H,{variant:`accent`,size:`sm`,leftIcon:(0,Y.jsx)(t,{size:13}),loading:l,disabled:!w,onClick:()=>void T(),children:e(`stt.sources.save`)}),(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm border border-dark-border text-dark-muted hover:border-dark-hover hover:text-dark-text transition-colors disabled:opacity-50`,disabled:l,onClick:()=>void E(),children:[(0,Y.jsx)(re,{size:13}),e(`stt.sources.reset`)]}),(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e(`stt.sources.httpsOnly`)})]})]})]})]})}function Ve(){let{t:e}=R(),[t,r]=(0,J.useState)(null),[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)({running:!1,logs:[]}),[u,d]=(0,J.useState)(!1),p=(0,J.useRef)(null),m=(0,J.useRef)(s),h=(0,J.useRef)(null),[g,y]=(0,J.useState)(de),b=(0,J.useCallback)(e=>{y(e),pe(e),window.dispatchEvent(new CustomEvent(`stt-lang-changed`,{detail:{lang:e}}))},[]);(0,J.useEffect)(()=>{m.current=s},[s]);let x=(0,J.useCallback)(async()=>{d(!0);let e=await U.stt.status();e.success&&e.data?(r(e.data),e.data.env&&o(e.data.env)):e.error&&B.error(e.error),d(!1)},[]);(0,J.useEffect)(()=>{x()},[x]);let S=(0,J.useCallback)(async()=>{let e=await U.stt.installStatus();if(e.success&&e.data){let t=m.current.running;c(e.data),e.data.running?p.current=window.setTimeout(()=>void S(),1e3):(x(),t&&e.data.status===`done`&&window.dispatchEvent(new CustomEvent(`stt-backends-changed`)))}},[x]);(0,J.useEffect)(()=>()=>{p.current&&window.clearTimeout(p.current)},[]),(0,J.useEffect)(()=>{h.current&&(h.current.scrollTop=h.current.scrollHeight)},[s.logs]);let C=(0,J.useCallback)(async()=>{let t=await U.stt.install();t.success&&t.data?.started?(c({running:!0,logs:[],status:`running`}),S()):t.data?.alreadyRunning?(B.info(e(`stt.setup.jobInProgress`)),S()):c({running:!1,logs:[],status:`error`,error:t.error||t.data?.error||`install failed`,manualCommand:t.data?.manualCommand})},[S,e]),w=(0,J.useCallback)(async()=>{await U.stt.cancelInstall(),S()},[S]),T=(0,J.useCallback)(t=>{navigator.clipboard.writeText(t).then(()=>B.success(e(`stt.setup.copySuccess`)),()=>B.error(e(`stt.setup.copyFailed`)))},[e]),E=s.running,D=!E&&s.status===`done`?t?.backends?.en:void 0,O=D?!D.installed:!1,j=t=>t?(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-accent-green/15 text-accent-green`,children:[(0,Y.jsx)(L,{size:12}),e(`stt.setup.installed`)]}):(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-dark-hover text-dark-muted`,children:[(0,Y.jsx)(ie,{size:12}),e(`stt.setup.notInstalled`)]}),M=g===`en`?`base.en`:`base`,N=ue(g),ee=()=>{let n=t?.backends?.en??{installed:!1,loaded:!1,model:`base.en`};return(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3 flex items-start justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-3 min-w-0`,children:[(0,Y.jsx)(`div`,{className:`w-9 h-9 shrink-0 rounded-lg flex items-center justify-center text-sm font-semibold bg-accent-blue/15 text-accent-blue`,children:`W`}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium text-dark-text`,children:e(`stt.setup.whisperTitle`)}),j(n.installed),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-accent-blue/15 text-accent-blue`,children:[(0,Y.jsx)(ae,{size:12}),e(`stt.setup.inUse`)]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 mt-1 text-meta text-dark-muted`,children:[(0,Y.jsx)(`code`,{className:`text-badge bg-dark-hover px-1.5 py-0.5 rounded`,children:`base.en / base`}),(0,Y.jsx)(`span`,{children:e(`stt.setup.whisperDesc`)})]}),!n.installed&&(0,Y.jsxs)(`p`,{className:`mt-1 text-meta text-accent-orange flex items-center gap-1`,children:[(0,Y.jsx)(k,{size:11}),e(`stt.setup.engineNotInstalledHint`)]}),!n.installed&&n.error&&(0,Y.jsxs)(`p`,{className:`mt-1 text-meta text-accent-orange break-all`,title:n.error,children:[(0,Y.jsx)(k,{size:11}),e(`stt.setup.probeError`),n.error]})]})]}),(0,Y.jsx)(`div`,{className:`shrink-0`,onClick:e=>e.stopPropagation(),children:E?(0,Y.jsxs)(`button`,{className:`btn btn-secondary cursor-not-allowed opacity-70`,disabled:!0,children:[(0,Y.jsx)(f,{size:14,className:`animate-spin`}),e(`stt.setup.installing`)]}):n.installed?(0,Y.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>void x(),title:e(`stt.setup.recheck`),children:[(0,Y.jsx)(A,{size:14}),e(`stt.setup.recheck`)]}):(0,Y.jsxs)(`button`,{className:`btn btn-accent`,onClick:()=>void C(),children:[(0,Y.jsx)(l,{size:14}),e(`stt.setup.install`)]})})]})},te=a?.pythonAvailable&&a?.pipAvailable,P=s.error||t?.backends?.en?.error||null,ne=!!a&&!te,re=(0,J.useCallback)(()=>{K(e(`stt.setup.askAiPrompt`,{python:a?.pythonAvailable?`ok`:`missing`,pip:a?.pipAvailable?`ok`:`missing`,error:P||`—`})),B.info(e(`stt.setup.askAiHint`))},[a?.pipAvailable,a?.pythonAvailable,P,e]);return(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-dark-text`,children:[(0,Y.jsx)(v,{size:14,className:`text-accent-blue`}),e(`stt.setup.envCard`)]}),(0,Y.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>void x(),disabled:u,children:[(0,Y.jsx)(A,{size:13,className:u?`animate-spin`:``}),e(`stt.setup.recheck`)]})]}),(0,Y.jsxs)(`div`,{className:`mt-2.5 space-y-2`,children:[a?a.pythonAvailable?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-text`,children:[(0,Y.jsx)(L,{size:13,className:`text-accent-green`}),e(`stt.setup.pythonOk`,{version:(a.pythonVersion||``).replace(/^Python\s*/i,``)||a.pythonPath||`Python`}),a.pythonPath?(0,Y.jsx)(`code`,{className:`text-badge text-dark-muted`,children:a.pythonPath}):null]}):(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-md border border-accent-red/30 bg-accent-red/5 px-2.5 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(k,{size:13}),e(`stt.setup.pythonMissing`)]}),(0,Y.jsx)(`a`,{className:`btn btn-secondary !py-1 !px-2 text-xs`,href:`https://www.python.org/downloads/`,target:`_blank`,rel:`noreferrer`,children:e(`stt.setup.pythonGuide`)})]}):(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted`,children:[(0,Y.jsx)(f,{size:13,className:`animate-spin`}),e(`stt.setup.envChecking`)]}),a&&!a.pipAvailable&&(0,Y.jsxs)(`div`,{className:`rounded-md border border-accent-red/30 bg-accent-red/5 px-2.5 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(k,{size:13}),e(`stt.setup.pipMissing`)]}),(0,Y.jsxs)(`div`,{className:`mt-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-badge text-dark-muted mb-1`,children:e(`stt.setup.pipGuide`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`code`,{className:`flex-1 rounded bg-dark-bg border border-dark-border px-2 py-1 font-mono text-badge text-dark-text break-all select-all`,children:[a.pythonPath||`python`,` -m ensurepip --upgrade`]}),(0,Y.jsx)(`button`,{className:`btn btn-ghost !py-1 !px-2 text-xs`,onClick:()=>T(`${a.pythonPath||`python`} -m ensurepip --upgrade`),children:(0,Y.jsx)(F,{size:12})})]})]})]})]})]}),(ne||!!P)&&(0,Y.jsx)(`div`,{className:`px-1`,children:(0,Y.jsx)(H,{variant:`secondary`,size:`sm`,leftIcon:(0,Y.jsx)(n,{size:13,"aria-hidden":`true`}),onClick:re,children:e(`stt.setup.askAi`)})}),(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-dark-text`,children:[(0,Y.jsx)(ae,{size:14,className:`text-accent-blue`}),e(`stt.setup.defaultLang`)]}),(0,Y.jsx)(`p`,{className:`mt-1 text-meta text-dark-muted`,children:e(`stt.setup.defaultLangHint`)}),(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center gap-2`,children:[(0,Y.jsx)(`select`,{value:g,onChange:e=>b(e.target.value),className:`bg-dark-bg border border-dark-border rounded-lg px-2 py-1.5 text-xs text-dark-text focus:border-accent-blue/60 outline-none transition-all`,"aria-label":e(`stt.setup.defaultLang`),children:me.map(e=>(0,Y.jsx)(`option`,{value:e.code,children:e.label},e.code))}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-meta text-dark-muted`,children:[(0,Y.jsx)(_,{size:11}),e(`stt.setup.modelForLang`,{lang:N.label,model:M})]})]})]}),ee(),(0,Y.jsx)(Be,{}),E&&(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-blue font-medium`,children:[(0,Y.jsx)(f,{size:13,className:`animate-spin`}),e(`stt.setup.installing`),(0,Y.jsx)(`span`,{className:`text-dark-muted font-normal`,children:`(faster-whisper)`})]}),(0,Y.jsx)(`button`,{className:`btn btn-danger !py-1 !px-2 text-xs`,onClick:()=>void w(),children:e(`stt.setup.cancel`)})]}),(0,Y.jsx)(`div`,{ref:h,className:`rounded-md border border-dark-border bg-dark-bg p-2.5 font-mono text-meta text-dark-muted overflow-auto max-h-48 whitespace-pre-wrap custom-scrollbar`,children:s.logs.length===0?(0,Y.jsx)(`span`,{className:`text-dark-muted/70`,children:e(`stt.setup.logWaiting`)}):s.logs.join(`
4
- `)})]}),!E&&s.status&&s.status!==`done`&&(0,Y.jsxs)(`div`,{className:`rounded-lg border border-accent-red/30 bg-accent-red/5 p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red font-medium`,children:[(0,Y.jsx)(k,{size:13}),s.status===`timeout`?e(`stt.setup.installTimeout`):s.status===`cancelled`?e(`stt.setup.installCancelled`):e(`stt.setup.installFailed`)]}),s.error?(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-red/90 break-all`,children:s.error}):null,s.manualCommand&&(0,Y.jsxs)(`div`,{className:`mt-2`,children:[(0,Y.jsxs)(`div`,{className:`text-badge text-dark-muted mb-1 flex items-center gap-1`,children:[(0,Y.jsx)(i,{size:11}),e(`stt.setup.manualCommand`)]}),(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(`code`,{className:`flex-1 rounded bg-dark-bg border border-dark-border px-2 py-1.5 font-mono text-badge text-dark-text break-all whitespace-pre-wrap select-all`,children:s.manualCommand}),(0,Y.jsxs)(`button`,{className:`btn btn-ghost !py-1 !px-2 text-xs shrink-0`,onClick:()=>T(s.manualCommand),children:[(0,Y.jsx)(F,{size:12}),e(`stt.setup.copyCommand`)]})]})]})]}),!E&&s.status===`done`&&!O&&(0,Y.jsxs)(`div`,{className:`rounded-lg border border-accent-green/30 bg-accent-green/5 px-3 py-2.5 flex items-center gap-2 text-xs text-accent-green`,children:[(0,Y.jsx)(L,{size:14}),e(`stt.setup.installDone`)]}),!E&&s.status===`done`&&O&&(0,Y.jsxs)(`div`,{className:`rounded-lg border border-accent-orange/30 bg-accent-orange/5 p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-orange font-medium`,children:[(0,Y.jsx)(k,{size:13}),e(`stt.setup.installDoneButMissing`)]}),D?.error&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-orange/90 break-all`,children:D.error}),(0,Y.jsx)(`p`,{className:`mt-1 text-meta text-dark-muted`,children:e(`stt.setup.installDoneButMissingHint`)})]}),!E&&te&&t&&!t.backends.en?.installed&&(0,Y.jsx)(`p`,{className:`text-meta text-dark-muted px-1`,children:e(`stt.setup.chooseHint`)})]})}function He(){let{t:e}=R(),[t,n]=(0,J.useState)(null),[r,i]=(0,J.useState)({running:!1,logs:[]}),[a,o]=(0,J.useState)(!1),[s,c]=(0,J.useState)(Oe),u=(0,J.useRef)(null),d=(0,J.useRef)(r),p=(0,J.useRef)(null);(0,J.useEffect)(()=>{d.current=r},[r]),(0,J.useEffect)(()=>{c(ke())},[]),(0,J.useEffect)(()=>()=>{u.current&&window.clearTimeout(u.current)},[]),(0,J.useEffect)(()=>{p.current&&(p.current.scrollTop=p.current.scrollHeight)},[r.logs]);let m=(0,J.useCallback)(async()=>{o(!0);let e=await U.tts.status();e.success&&e.data?n(e.data):e.error&&B.error(e.error),o(!1)},[]);(0,J.useEffect)(()=>{m()},[m]);let h=(0,J.useCallback)(async()=>{let e=await U.tts.installStatus();if(!e.success||!e.data)return;let t=d.current.running;i(e.data),e.data.running?u.current=window.setTimeout(()=>void h(),1e3):t&&m()},[m]),g=(0,J.useCallback)(async()=>{let t=await U.tts.install();t.success&&t.data?.started?(i({running:!0,logs:[],status:`running`}),h()):t.data?.alreadyRunning?(B.info(e(`tts.setup.jobInProgress`)),h()):i({running:!1,logs:[],status:`error`,error:t.error||t.data?.error||`install failed`,manualCommand:t.data?.manualCommand})},[h,e]),_=(0,J.useCallback)(async()=>{await U.tts.cancelInstall(),h()},[h]),y=(0,J.useCallback)(t=>{navigator.clipboard.writeText(t).then(()=>B.success(e(`tts.setup.copySuccess`)),()=>B.error(e(`tts.setup.copyFailed`)))},[e]),b=(0,J.useCallback)(e=>{c(Me(e))},[]),x=t?.engine,S=t?.service===`ok`,C=x?.voiceNames??[],w=t?.env,T=w?!w.pythonAvailable:!1,D=t?.missingWeights??x?.missingWeights??[];return(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3 space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium`,children:e(`tts.setup.engine`)}),((e,t)=>(0,Y.jsxs)(`span`,{className:V(`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium`,e?`bg-accent-green/15 text-accent-green`:`bg-dark-hover text-dark-muted`),children:[e?(0,Y.jsx)(L,{size:12}):(0,Y.jsx)(ie,{size:12}),t]}))(S,e(S?`tts.setup.ready`:`tts.setup.notReady`))]}),(0,Y.jsx)(`button`,{type:`button`,className:`p-1.5 rounded-md hover:bg-dark-hover text-dark-muted`,onClick:()=>void m(),disabled:a,title:e(`tts.setup.refresh`),children:(0,Y.jsx)(A,{size:14,className:V(a&&`animate-spin`)})})]}),t?.error&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(k,{size:12,className:`mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`break-all`,children:t.error})]}),D.length>0&&(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tts.setup.missingWeights`,{files:D.join(`、`)})}),T&&(0,Y.jsx)(`div`,{className:`text-xs text-accent-yellow`,children:e(`tts.setup.envMissing`)}),x?.model&&(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tts.setup.model`,{model:x.model})}),r.running?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(f,{size:14,className:`animate-spin text-accent-blue`}),(0,Y.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[e(`tts.setup.installing`),r.phase?` · ${r.phase}`:``]}),(0,Y.jsx)(`button`,{type:`button`,className:`ms-auto text-xs text-accent-red hover:underline`,onClick:()=>void _(),children:e(`tts.setup.cancel`)})]}):(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-xs bg-accent-blue/15 text-accent-blue hover:bg-accent-blue/25 disabled:opacity-50`,onClick:()=>void g(),disabled:S,children:[(0,Y.jsx)(l,{size:14}),e(S?`tts.setup.installed`:`tts.setup.install`)]}),r.status===`error`&&r.error&&!r.running&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(k,{size:12,className:`mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`break-all`,children:r.error})]}),r.manualCommand&&!r.running&&(0,Y.jsxs)(`div`,{className:`rounded-md bg-dark-bg border border-dark-border p-2 space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-dark-muted`,children:[(0,Y.jsx)(v,{size:12}),e(`tts.setup.manualCommand`)]}),(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 text-xs text-accent-blue hover:underline`,onClick:()=>y(r.manualCommand),children:[(0,Y.jsx)(F,{size:12}),e(`tts.setup.copy`)]})]}),(0,Y.jsx)(`code`,{className:`block text-xs break-all text-dark-text`,children:r.manualCommand})]}),r.logs.length>0&&(0,Y.jsx)(`div`,{ref:p,className:`max-h-40 overflow-auto rounded-md bg-dark-bg border border-dark-border p-2`,children:r.logs.map((e,t)=>(0,Y.jsx)(`div`,{className:`text-xs font-mono text-dark-muted whitespace-pre-wrap break-all`,children:e},t))})]}),(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3 space-y-3`,children:[(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 cursor-pointer`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-sm`,children:[(0,Y.jsx)(ee,{size:14,className:`text-accent-blue`}),e(`tts.setup.enabled`)]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`accent-accent-blue`,checked:s.enabled,onChange:e=>b({enabled:e.target.checked})})]}),(0,Y.jsxs)(`label`,{className:V(`flex items-center justify-between gap-3 cursor-pointer`,!s.enabled&&`opacity-50`),children:[(0,Y.jsxs)(`span`,{className:`text-sm`,children:[e(`tts.setup.autoPlay`),(0,Y.jsx)(`span`,{className:`block text-xs text-dark-muted`,children:e(`tts.setup.autoPlayHint`)})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`accent-accent-blue`,checked:s.autoPlay,disabled:!s.enabled,onChange:e=>b({autoPlay:e.target.checked})})]}),(0,Y.jsxs)(`div`,{className:V(`flex items-center justify-between gap-3`,!s.enabled&&`opacity-50`),children:[(0,Y.jsx)(`span`,{className:`text-sm`,children:e(`tts.setup.voice`)}),(0,Y.jsxs)(`select`,{className:`bg-dark-bg border border-dark-border rounded-md px-2 py-1 text-xs max-w-[60%]`,value:s.voice??``,disabled:!s.enabled||C.length===0,onChange:e=>b({voice:e.target.value||null}),children:[(0,Y.jsx)(`option`,{value:``,children:e(`tts.setup.voiceAuto`)}),C.map(e=>(0,Y.jsx)(`option`,{value:e,children:e},e))]})]}),(0,Y.jsxs)(`label`,{className:V(`flex items-center justify-between gap-3`,!s.enabled&&`opacity-50`),children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-sm`,children:[(0,Y.jsx)(E,{size:14,className:`text-accent-blue`}),e(`tts.setup.speed`)]}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,Y.jsx)(`input`,{type:`range`,min:Ae,max:2,step:.1,value:s.speed,disabled:!s.enabled,onChange:e=>b({speed:Number(e.target.value)})}),(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted w-8 text-end`,children:s.speed.toFixed(1)})]})]})]})]})}function X({label:e,value:t,onChange:n,min:r,max:i,disabled:a,envOverridden:o,hint:s}){return(0,Y.jsxs)(`div`,{className:`mb-3`,children:[(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-muted mb-1`,children:[e,o&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-accent-yellow`,title:s,children:[(0,Y.jsx)(k,{size:12}),` env`]})]}),(0,Y.jsx)(`input`,{type:`number`,value:t,onChange:e=>n(e.target.value),min:r,max:i,disabled:a||o,className:`w-40 bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text font-mono focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all disabled:opacity-50`})]})}function Ue(){let{t:e}=R(),[t,n]=(0,J.useState)(!0),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)({}),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(``),[d,p]=(0,J.useState)(null),[m,h]=(0,J.useState)(!1),[g,_]=(0,J.useState)(``),[v,y]=(0,J.useState)(``),[b,x]=(0,J.useState)(``),[S,C]=(0,J.useState)(``),[w,T]=(0,J.useState)(``),E=(0,J.useCallback)(async()=>{n(!0);try{let e=await U.config.context.get();if(e.success&&e.data){let t=e.data.values??{};o(e.data.envOverridden??{}),c(e.data.effective.offload),u(e.data.defaultArtifactRoot??``),p(e.data.stats??null),h(typeof t.artifactOffload==`boolean`?t.artifactOffload:e.data.effective.offload),_(typeof t.artifactDir==`string`?t.artifactDir:``),y(t.artifactMaxTotalMb==null?``:String(t.artifactMaxTotalMb)),x(t.artifactTtlDays==null?``:String(t.artifactTtlDays)),C(t.outboundToolBytes==null?``:String(t.outboundToolBytes)),T(t.turnBudgetTokens==null?``:String(t.turnBudgetTokens))}}catch{}n(!1)},[]);return(0,J.useEffect)(()=>{E()},[E]),t?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,Y.jsx)(f,{size:14,className:`animate-spin`}),e(`common.loading`)]}):(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.contextOffload.desc`)}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,Y.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.contextOffload.enableLabel`),(0,Y.jsxs)(`span`,{className:`ms-2 text-xs ${s?`text-accent-green`:`text-dark-muted`}`,children:[`(`,e(`settings.contextOffload.currently`),`: `,s?`ON`:`OFF`,`)`]})]}),(0,Y.jsx)(`button`,{role:`switch`,"aria-checked":m,onClick:()=>h(!m),className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${m?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${m?`translate-x-6`:`translate-x-1`}`})})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-x-6`,children:[(0,Y.jsx)(X,{label:e(`settings.contextOffload.maxTotalMb`),value:v,onChange:y,min:1,envOverridden:a.artifactMaxTotalMb}),(0,Y.jsx)(X,{label:e(`settings.contextOffload.ttlDays`),value:b,onChange:x,min:1,max:365,envOverridden:a.artifactTtlDays}),(0,Y.jsx)(X,{label:`${e(`settings.contextOffload.outboundBytes`)} (${e(`settings.contextOffload.optional`)})`,value:S,onChange:C,min:1024,envOverridden:a.outboundToolBytes}),(0,Y.jsx)(X,{label:e(`settings.contextOffload.turnBudget`),value:w,onChange:T,min:1e3,envOverridden:a.turnBudgetTokens})]}),(0,Y.jsxs)(`div`,{className:`mb-3`,children:[(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-muted mb-1`,children:[e(`settings.contextOffload.dir`),` (`,e(`settings.contextOffload.optional`),`)`,a.artifactDir&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-accent-yellow`,children:[(0,Y.jsx)(k,{size:12}),` env`]})]}),(0,Y.jsx)(`input`,{type:`text`,value:g,onChange:e=>_(e.target.value),disabled:a.artifactDir,placeholder:l,className:`w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text font-mono focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all disabled:opacity-50`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Y.jsx)(H,{variant:`accent`,size:`sm`,onClick:async()=>{i(!0);try{let t={artifactOffload:m};a.artifactDir||(t.artifactDir=g.trim()||null),!a.artifactMaxTotalMb&&v.trim()&&(t.artifactMaxTotalMb=parseInt(v,10)),!a.artifactTtlDays&&b.trim()&&(t.artifactTtlDays=parseInt(b,10)),!a.outboundToolBytes&&S.trim()&&(t.outboundToolBytes=parseInt(S,10)),!a.turnBudgetTokens&&w.trim()&&(t.turnBudgetTokens=parseInt(w,10));for(let n of[`artifactMaxTotalMb`,`artifactTtlDays`,`outboundToolBytes`,`turnBudgetTokens`])if(n in t&&(isNaN(t[n])||t[n]<=0)){B.error(e(`settings.contextOffload.invalidNumber`)),i(!1);return}let n=await U.config.context.save(t);n.success?(B.success(e(`settings.contextOffload.saved`)),await E()):B.error(n.error||e(`settings.contextOffload.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}i(!1)},loading:r,disabled:t,children:e(`common.save`)}),(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`settings.contextOffload.envHint`)})]}),d&&d.count>0&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:e(`settings.contextOffload.stats`,{count:d.count,size:(d.totalBytes/1024/1024).toFixed(1)})})]})}var We=[32e3,64e3,128e3,256e3,512e3,1e6,2e6],Ge=1e3;function Ke(){let{t:e}=R(),t=z(e=>e.maxContextTokens),n=z(e=>e.setMaxContextTokens),r=z(e=>e.bumpContextWindowRefresh),[i,a]=(0,J.useState)(String(t)),[o,s]=(0,J.useState)(null),[c,l]=(0,J.useState)(!0),[u,d]=(0,J.useState)(!1),p=(0,J.useCallback)(async()=>{l(!0);try{let e=await U.config.provider.get();if(e.success&&e.data){s(e.data.defaultProvider??null);let t=e.data.active?.contextWindow;typeof t==`number`&&t>=Ge&&(n(t),a(String(t)))}}catch{}l(!1)},[n]);(0,J.useEffect)(()=>{p()},[p]);let m=(0,J.useCallback)(async t=>{let n=Number.parseInt(t,10);if(!Number.isFinite(n)||n<Ge)B.error(e(`settings.contextWindow.invalid`));else if(!o)B.error(e(`settings.contextWindow.noProvider`));else{d(!0);try{let t=await U.config.provider.save({provider:o,contextWindow:n});t.success?(B.success(e(`settings.contextWindow.saved`)),r(),await p()):B.error(t.error||e(`settings.contextWindow.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}d(!1)}},[o,p,r,e]),h=e=>e>=1e6?`${(e/1e6).toFixed(0)}M`:`${(e/1e3).toFixed(0)}K`;return c?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,Y.jsx)(f,{size:14,className:`animate-spin`}),e(`common.loading`)]}):(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.contextWindow.desc`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 mb-3`,children:[(0,Y.jsx)(`input`,{type:`number`,"aria-label":e(`settings.contextWindow.label`),"data-testid":`context-window-input`,value:i,onChange:e=>a(e.target.value),min:Ge,max:1e7,step:1e3,className:`w-32 bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text font-mono focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all`}),(0,Y.jsx)(`span`,{className:`text-sm text-dark-muted`,children:e(`settings.contextWindow.tokens`)}),(0,Y.jsx)(H,{variant:`accent`,size:`sm`,onClick:()=>void m(i),loading:u,"data-testid":`context-window-apply`,children:e(`settings.contextWindow.apply`)})]}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:We.map(e=>(0,Y.jsx)(`button`,{type:`button`,"data-testid":`context-window-preset-${e}`,onClick:()=>{a(String(e)),m(String(e))},className:`px-3 py-1 rounded-lg text-xs border border-dark-border text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors`,children:h(e)},e))}),(0,Y.jsxs)(`p`,{className:`text-xs text-dark-muted mt-2`,children:[e(`settings.contextWindow.current`),`:`,` `,(0,Y.jsx)(`span`,{className:`font-mono text-dark-text tabular-nums`,"data-testid":`context-window-current`,children:Number.parseInt(i,10).toLocaleString()}),` `,e(`settings.contextWindow.tokens`),o?` · ${e(`settings.contextWindow.provider`,{provider:o})}`:``]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.contextWindow.catalogHint`)})]})}var qe=`bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all disabled:opacity-50`;function Z({checked:e,onChange:t,disabled:n}){return(0,Y.jsx)(`button`,{role:`switch`,"aria-checked":e,disabled:n,onClick:()=>t(!e),className:`relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors disabled:opacity-40 ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${e?`translate-x-6`:`translate-x-1`}`})})}function Je(){let{t:e}=R(),[t,n]=(0,J.useState)(!0),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)(`none`),[l,u]=(0,J.useState)(``),[d,p]=(0,J.useState)(!0),[m,h]=(0,J.useState)(!1),[g,_]=(0,J.useState)(!1),v=(0,J.useCallback)(async()=>{n(!0);try{let e=await U.config.sandbox.get();if(e.success&&e.data){let t=e.data;o(t);let n=t.values??{};c(n.backend??`none`),u(n.policy??``),p(n.networkAccess!==!1),h(n.excludeTmpdirEnvVar===!0),_(n.excludeSlashTmp===!0)}}catch{}n(!1)},[]);(0,J.useEffect)(()=>{v()},[v]);let y=l===`danger-full-access`,b=s!==`none`&&l!==``&&!y,x=b&&l===`workspace-write`,S=e=>{e?(c(`auto`),u(l===`read-only`||l===`workspace-write`?l:`workspace-write`)):(c(`none`),u(``))},C=e=>{u(e),e===`danger-full-access`&&c(`none`)},w=async()=>{if(s!==`none`&&l===``)B.error(e(`settings.sandbox.needPolicy`));else{i(!0);try{let t=await U.config.sandbox.save({backend:s,policy:s===`none`?null:l,networkAccess:d,excludeTmpdirEnvVar:m,excludeSlashTmp:g});t.success?(B.success(e(`settings.sandbox.saved`)),await v()):B.error(t.error||e(`settings.sandbox.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}i(!1)}};if(t)return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,Y.jsx)(f,{size:14,className:`animate-spin`}),e(`common.loading`)]});let T=a?.status,E=T?.backendId===`docker`,D=T!==void 0&&T.status===`enabled`&&T.backendId===null,O=T!==void 0&&T.status===`enabled`&&T.backendId!==null||E,A=O?L:T?.status===`invalid`?ie:k,j=O?`text-accent-green`:T?.status===`invalid`?`text-accent-red`:D?`text-accent-yellow`:`text-dark-muted`,M=E?e(`settings.sandbox.statusDocker`):D?e(`settings.sandbox.statusNoBackend`):T?.status===`enabled`?e(`settings.sandbox.statusOn`,{backend:T.backendId??`—`}):T?.status===`invalid`?e(`settings.sandbox.statusInvalid`):e(`settings.sandbox.statusOff`);return(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.sandbox.desc`)}),(0,Y.jsxs)(`div`,{className:`mb-4 rounded-lg border border-dark-border bg-dark-bg/40 px-3 py-2.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm ${j}`,children:[(0,Y.jsx)(A,{size:14}),(0,Y.jsx)(`span`,{children:M}),(0,Y.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[`(`,e(`settings.sandbox.restartNotice`),`)`]})]}),T?.policyDescription&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:T.policyDescription}),T?.reason&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:T.reason}),T?.error&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-red whitespace-pre-wrap`,children:T.error}),T&&T.capabilityGaps.length>0&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-yellow`,children:e(`settings.sandbox.gaps`,{fields:T.capabilityGaps.join(`, `)})})]}),a?.envOverride.active&&(0,Y.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,Y.jsx)(k,{size:12,className:`mt-0.5 shrink-0`}),a.envOverride.note||e(`settings.sandbox.envOverride`,{value:a.envOverride.value})]}),a?.status.platform===`win32`&&(0,Y.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,Y.jsx)(k,{size:12,className:`mt-0.5 shrink-0`}),e(`settings.sandbox.win32Warn`)]}),a?.status.legacySource&&(0,Y.jsx)(`p`,{className:`mb-3 text-xs text-accent-blue`,children:e(`settings.sandbox.legacySource`)}),a?.status.bothPresent&&(0,Y.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,Y.jsx)(k,{size:12,className:`mt-0.5 shrink-0`}),e(`settings.sandbox.bothPresent`)]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,Y.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.sandbox.enableLabel`),(0,Y.jsxs)(`span`,{className:`ms-2 text-xs ${b?`text-accent-green`:`text-dark-muted`}`,children:[`(`,e(`settings.sandbox.currently`),`: `,b?`ON`:`OFF`,`)`]})]}),(0,Y.jsx)(Z,{checked:b,onChange:S})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-x-6`,children:[(0,Y.jsxs)(`div`,{className:`mb-3`,children:[(0,Y.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:e(`settings.sandbox.backend`)}),(0,Y.jsxs)(`select`,{value:s,onChange:e=>c(e.target.value),className:`w-full ${qe}`,children:[(0,Y.jsx)(`option`,{value:`auto`,children:e(`settings.sandbox.backendAuto`)}),(0,Y.jsx)(`option`,{value:`bubblewrap`,children:e(`settings.sandbox.backendBubblewrap`)}),(0,Y.jsx)(`option`,{value:`macos-sandbox`,children:e(`settings.sandbox.backendMacos`)}),(0,Y.jsx)(`option`,{value:`windows-mxc`,children:e(`settings.sandbox.backendWindows`)}),(0,Y.jsx)(`option`,{value:`none`,children:e(`settings.sandbox.backendNone`)})]})]}),(0,Y.jsxs)(`div`,{className:`mb-3`,children:[(0,Y.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:e(`settings.sandbox.policy`)}),(0,Y.jsxs)(`select`,{value:l,onChange:e=>C(e.target.value),disabled:s===`none`,className:`w-full ${qe}`,children:[(0,Y.jsx)(`option`,{value:``,children:e(`settings.sandbox.policyEmpty`)}),(0,Y.jsx)(`option`,{value:`read-only`,children:e(`settings.sandbox.policyReadOnly`)}),(0,Y.jsx)(`option`,{value:`workspace-write`,children:e(`settings.sandbox.policyWorkspaceWrite`)}),(0,Y.jsx)(`option`,{value:`danger-full-access`,children:e(`settings.sandbox.policyDanger`)})]}),y&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-yellow`,children:e(`settings.sandbox.policyDangerHint`)})]})]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,Y.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.sandbox.networkAccess`),(0,Y.jsx)(`span`,{className:`block text-xs text-dark-muted mt-0.5`,children:e(`settings.sandbox.networkAccessHint`)})]}),(0,Y.jsx)(Z,{checked:d,onChange:p,disabled:!b})]}),x&&(0,Y.jsxs)(`div`,{className:`mb-4 rounded-lg border border-dark-border px-3 py-2.5`,children:[(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mb-2`,children:e(`settings.sandbox.advancedHint`)}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between mb-2 cursor-pointer`,children:[(0,Y.jsx)(`span`,{className:`text-sm`,children:e(`settings.sandbox.excludeTmpdir`)}),(0,Y.jsx)(Z,{checked:m,onChange:h})]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between cursor-pointer`,children:[(0,Y.jsx)(`span`,{className:`text-sm`,children:e(`settings.sandbox.excludeSlashTmp`)}),(0,Y.jsx)(Z,{checked:g,onChange:_})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Y.jsx)(H,{variant:`accent`,size:`sm`,onClick:w,loading:r,children:e(`common.save`)}),(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`settings.sandbox.restartHint`)})]})]})}function Q({icon:e,iconColor:t,title:n,children:r}){return(0,Y.jsxs)(`div`,{className:`rounded-xl border border-dark-border bg-dark-bg/40 p-4 mb-4`,children:[(0,Y.jsxs)(`h3`,{className:`font-medium mb-3 flex items-center gap-2`,children:[(0,Y.jsx)(e,{size:16,className:t}),n]}),r]})}var Ye=6e4,Xe=0,$;async function Ze(e={}){if(!e.force&&$&&Date.now()-Xe<Ye)return{draft:$};try{let e=await U.profile.draft();return e.success&&e.data?($=e.data,Xe=Date.now(),{draft:$}):{error:e.error||`profile draft failed`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}}function Qe(e){return e?e.candidates.filter(e=>e.verdict===`adopt`).length:0}function $e(){$=void 0,Xe=0}var et={duplicate:`duplicate`,"already-covered":`duplicate`,"near-duplicate":`duplicate`,ignored:`ignored`,environment:`environment`,"over-budget":`limit`,empty:`invalid`,multiline:`invalid`,too_long:`invalid`,structural:`invalid`};function tt(e){return e.verdict===`adopt`?`adopt`:e.reason?et[e.reason]:`adopt`}function nt({onApply:e,applyBusy:t,disabled:r}){let{t:i}=R(),[a,o]=(0,J.useState)(void 0),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(null),d=async(e={})=>{if(s)return;c(!0);let{draft:t,error:n}=await Ze({force:e.force});t?o(t):e.silent||B.error(n||i(`settings.profile.draft.loadFailed`)),c(!1)};(0,J.useEffect)(()=>{d({silent:!0})},[]);let f=async(e,t)=>{let n=e.itemId;if(!l){u(n);try{let r=await U.profile.ignore({itemId:n,text:t,...e.subject?{subject:e.subject}:{},...e.layer?{layer:e.layer}:{}});r.success?(B.success(i(`settings.profile.draft.ignoreOk`)),await d({force:!0})):B.error(r.error||i(`settings.profile.draft.actionFailed`))}catch(e){B.error(`${i(`settings.profile.draft.actionFailed`)}: ${e instanceof Error?e.message:String(e)}`)}u(null)}},p=async e=>{let t=e.itemId;if(!l){u(t);try{let n=await U.profile.unignore({itemId:t,...e.fingerprint?{fingerprint:e.fingerprint}:{}});n.success?(B.success(i(`settings.profile.draft.restoreOk`)),await d({force:!0})):B.error(n.error||i(`settings.profile.draft.actionFailed`))}catch(e){B.error(`${i(`settings.profile.draft.actionFailed`)}: ${e instanceof Error?e.message:String(e)}`)}u(null)}},m=(0,J.useMemo)(()=>a?[...a.candidates].filter(e=>e.reason!==`ignored`).sort((e,t)=>e.verdict===t.verdict?0:e.verdict===`adopt`?-1:1).slice(0,8):[],[a]),h=Qe(a);return(0,Y.jsxs)(`div`,{className:`mt-4 border-t border-dark-border pt-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`text-xs font-medium text-dark-text flex items-center gap-1.5`,children:[(0,Y.jsx)(n,{size:13,className:`text-accent-purple shrink-0`}),i(`settings.profile.draft.title`)]}),(0,Y.jsx)(`div`,{className:`text-meta text-dark-muted mt-0.5 leading-relaxed`,children:i(`settings.profile.draft.hint`)})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>void d({force:!0}),disabled:s||r,className:`shrink-0 px-2.5 py-1 rounded-lg text-xs bg-dark-hover border border-dark-border text-dark-muted hover:text-dark-text hover:bg-accent-blue/10 hover:border-accent-blue/40 transition-colors disabled:opacity-50`,children:i(a?`settings.profile.draft.refresh`:`settings.profile.draft.action`)})]}),a&&(0,Y.jsxs)(`div`,{className:`mt-3`,children:[h>0&&(0,Y.jsxs)(`div`,{role:`status`,className:`mb-2 flex items-start gap-1.5 rounded-lg border border-accent-green/30 bg-accent-green/10 px-2.5 py-1.5`,children:[(0,Y.jsx)(n,{size:12,className:`mt-[2px] shrink-0 text-accent-green`}),(0,Y.jsx)(`span`,{className:`text-meta text-accent-green leading-relaxed`,children:i(`settings.profile.draft.pending`,{n:h})})]}),a.warnings.some(e=>e.code===`memory-unreadable`)&&(0,Y.jsxs)(`div`,{className:`mb-2 flex items-start gap-1.5 text-meta text-accent-yellow`,children:[(0,Y.jsx)(k,{size:12,className:`mt-[1px] shrink-0`}),(0,Y.jsx)(`span`,{children:i(`settings.profile.draft.memoryUnreadable`)})]}),m.length===0?(0,Y.jsx)(`p`,{className:`text-meta text-dark-muted`,children:i(`settings.profile.draft.empty`)}):(0,Y.jsx)(`ul`,{className:`space-y-1.5`,children:m.map(e=>{let t=tt(e),n=t===`adopt`?`bg-accent-green/10 text-accent-green border-accent-green/30`:t===`limit`?`bg-accent-yellow/10 text-accent-yellow border-accent-yellow/30`:t===`invalid`?`bg-accent-red/10 text-accent-red border-accent-red/30`:`bg-dark-hover text-dark-muted border-dark-border`;return(0,Y.jsxs)(`li`,{className:`flex items-start gap-2 rounded-lg border border-dark-border bg-dark-surface px-2.5 py-1.5`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`text-xs text-dark-text break-words`,children:e.text}),(0,Y.jsx)(`span`,{className:`mt-1 inline-block px-1.5 py-0.5 rounded text-badge border ${n}`,children:i(`settings.profile.draft.reason.${t}`)})]}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void f(e.source,e.text),disabled:l!==null,title:i(`settings.profile.draft.ignore`),className:`shrink-0 flex items-center gap-1 px-1.5 py-0.5 rounded text-badge text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors disabled:opacity-40`,children:[(0,Y.jsx)(P,{size:11}),i(`settings.profile.draft.ignore`)]})]},`${e.source.itemId}:${e.text}`)})}),h>0&&(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:()=>e(a.proposedBody),disabled:t||r,className:`px-2.5 py-1 rounded-lg text-xs bg-accent-blue/10 text-accent-blue hover:bg-accent-blue/20 border border-accent-blue/30 transition-colors disabled:opacity-50`,children:i(`settings.profile.draft.apply`)}),(0,Y.jsx)(`span`,{className:`text-meta text-dark-muted`,children:i(`settings.profile.draft.applyHint`)})]}),a.ignores.length>0&&(0,Y.jsxs)(`div`,{className:`mt-3`,children:[(0,Y.jsx)(`div`,{className:`text-meta text-dark-muted mb-1`,children:i(`settings.profile.draft.ignoredTitle`)}),(0,Y.jsx)(`ul`,{className:`space-y-1`,children:a.ignores.slice(0,8).map(e=>(0,Y.jsxs)(`li`,{className:`flex items-start gap-2 px-2.5 py-1 rounded-lg bg-dark-hover`,children:[(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 text-badge text-dark-muted break-words line-through`,children:e.text}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>void p(e),disabled:l!==null,className:`shrink-0 px-1.5 py-0.5 rounded text-badge text-dark-muted hover:text-accent-blue hover:bg-accent-blue/10 transition-colors disabled:opacity-40`,children:i(`settings.profile.draft.restore`)})]},e.itemId))})]})]})]})}var rt=8e3,it=[`assistant`,`pet`,`lover`];function at(){let[e,t]=G(),{t:n}=R(),[r,i]=(0,J.useState)(void 0),[a,o]=(0,J.useState)(!0),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(!1),[f,m]=(0,J.useState)(``),[h,g]=(0,J.useState)(``),[_,v]=(0,J.useState)(!1),y=(0,J.useCallback)(async()=>{o(!0);try{let e=await U.profile.get();e.success&&e.data?i(e.data):B.error(e.error||n(`settings.profile.loadFailed`))}catch(e){B.error(`${n(`settings.profile.loadFailed`)}: ${e instanceof Error?e.message:String(e)}`)}o(!1)},[n]);(0,J.useEffect)(()=>{y()},[y]);let b=r?.maxBytes??rt,x=(0,J.useMemo)(()=>{let e=f.trim(),t=h.trim(),n=e?`---\nname: ${e}\n---\n\n${t}\n`:t?`${t}\n`:``;return new TextEncoder().encode(n).length},[f,h]),S=async()=>{if(!r||s)return;let e=!r.enabled;c(!0),i({...r,enabled:e});try{let t=await U.config.profile.set({enabled:e});t.success?q():(i(t=>t&&{...t,enabled:!e}),B.error(t.error||n(`settings.profile.saveFailed`)))}catch(t){i(t=>t&&{...t,enabled:!e}),B.error(`${n(`settings.profile.saveFailed`)}: ${t instanceof Error?t.message:String(t)}`)}c(!1)},C=async()=>{if(!_){v(!0);try{let e=await U.profile.raw();e.success&&e.data?(m(e.data.name??``),g(e.data.content),u(!0)):B.error(e.error||n(`settings.profile.loadFailed`))}catch(e){B.error(`${n(`settings.profile.loadFailed`)}: ${e instanceof Error?e.message:String(e)}`)}v(!1)}},T=()=>{u(!1),m(``),g(``)},E=async e=>{let r=n(`settings.profile.templates.${e}Body`),i=h.trim();(!i||i===r.trim()||await t({message:n(`settings.profile.templates.overwriteConfirm`)}))&&g(r)},O=async()=>{if(!s){if(!f.trim()&&!h.trim())B.error(n(`settings.profile.empty`));else{c(!0);try{let e=await U.profile.set({name:f.trim()?f.trim():null,body:h});e.success?(B.success(n(`settings.profile.saveOk`)),u(!1),m(``),g(``),$e(),q(),await y()):B.error(e.error||n(`settings.profile.saveFailed`))}catch(e){B.error(`${n(`settings.profile.saveFailed`)}: ${e instanceof Error?e.message:String(e)}`)}c(!1)}}},A=async()=>{if(!s&&await t({message:n(`settings.profile.clearConfirm`),variant:`danger`})){c(!0);try{let e=await U.profile.clear();e.success?(B.success(n(`settings.profile.clearOk`)),T(),$e(),q(),await y()):B.error(e.error||n(`settings.profile.clearFailed`))}catch(e){B.error(`${n(`settings.profile.clearFailed`)}: ${e instanceof Error?e.message:String(e)}`)}c(!1)}},j=async e=>{if(!_){v(!0);try{let t=await U.profile.raw();m(t.success&&t.data?t.data.name??``:``),g(e),u(!0)}catch(e){B.error(`${n(`settings.profile.loadFailed`)}: ${e instanceof Error?e.message:String(e)}`)}v(!1)}};return a?(0,Y.jsx)(`div`,{className:`text-sm text-dark-muted`,children:n(`settings.profile.loading`)}):r?(0,Y.jsxs)(Y.Fragment,{children:[e,(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-3 py-1 mb-3`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`text-sm text-dark-text font-medium flex items-center gap-2`,children:[(0,Y.jsx)(D,{size:15,className:`text-accent-purple shrink-0`}),n(`settings.profile.enabled`)]}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-1`,children:n(`settings.profile.enabledHint`)})]}),(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":r.enabled,"aria-label":n(`settings.profile.enabled`),disabled:s,onClick:()=>void S(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 mt-0.5 ${r.enabled?`bg-accent-blue`:`bg-dark-border`} ${s?`opacity-60`:``}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${r.enabled?`translate-x-[18px]`:`translate-x-0.5`}`})})]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mb-4 leading-relaxed`,children:n(`settings.profile.hint`)}),(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsxs)(`div`,{className:`text-xs font-medium text-dark-text mb-1.5 flex items-center gap-1.5`,children:[(0,Y.jsx)(p,{size:13,className:`text-dark-muted`}),n(`settings.profile.path`)]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`code`,{className:`flex-1 min-w-0 truncate bg-dark-bg border border-dark-border rounded px-2 py-1 text-meta font-mono text-dark-text`,title:r.path,children:r.path}),(0,Y.jsx)(`span`,{className:`shrink-0 px-1.5 py-0.5 rounded text-badge border ${r.exists?`bg-accent-green/10 text-accent-green border-accent-green/30`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:r.exists?n(`settings.profile.exists`):n(`settings.profile.missing`)})]}),(0,Y.jsx)(`div`,{className:`mt-1.5 text-meta text-dark-muted font-mono`,children:n(`settings.profile.size`,{used:r.bytes,max:r.maxBytes})}),r.truncated&&(0,Y.jsxs)(`div`,{className:`mt-1.5 flex items-start gap-1.5 text-meta text-accent-yellow`,children:[(0,Y.jsx)(k,{size:12,className:`mt-[1px] shrink-0`}),(0,Y.jsx)(`span`,{children:n(`settings.profile.truncated`)})]})]}),l?(0,Y.jsxs)(`div`,{className:`border-t border-dark-border pt-3`,children:[(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1.5`,children:n(`settings.profile.templates.title`)}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:it.map(e=>(0,Y.jsx)(`button`,{type:`button`,onClick:()=>void E(e),className:`px-2.5 py-1 rounded-lg text-xs text-dark-muted bg-dark-hover border border-dark-border hover:text-dark-text hover:bg-accent-blue/10 hover:border-accent-blue/40 transition-colors`,children:n(`settings.profile.templates.${e}`)},e))}),(0,Y.jsx)(`div`,{className:`text-meta text-dark-muted mt-1.5 leading-relaxed`,children:n(`settings.profile.templates.hint`)})]}),(0,Y.jsxs)(`label`,{className:`block mb-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1`,children:n(`settings.profile.name`)}),(0,Y.jsx)(`input`,{type:`text`,value:f,onChange:e=>m(e.target.value),placeholder:n(`settings.profile.namePlaceholder`),maxLength:200,className:`w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all`})]}),(0,Y.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1`,children:n(`settings.profile.body`)}),(0,Y.jsx)(`textarea`,{value:h,onChange:e=>g(e.target.value),placeholder:n(`settings.profile.bodyPlaceholder`),rows:10,className:`w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-2 text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all resize-y font-mono leading-relaxed`}),(0,Y.jsx)(`div`,{className:`mt-1 text-meta font-mono ${x>b?`text-accent-yellow`:`text-dark-muted`}`,children:n(`settings.profile.size`,{used:x,max:b})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 mt-3`,children:[(0,Y.jsx)(H,{variant:`accent`,size:`sm`,onClick:()=>void O(),loading:s,children:n(`settings.profile.save`)}),(0,Y.jsx)(`button`,{onClick:T,disabled:s,className:`px-3 py-1.5 rounded-lg text-sm text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors disabled:opacity-50`,children:n(`settings.profile.cancel`)})]})]}):(0,Y.jsxs)(`div`,{className:`border-t border-dark-border pt-3`,children:[r.preview?(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted whitespace-pre-wrap break-words mb-3 leading-relaxed max-h-40 overflow-y-auto custom-scrollbar`,children:r.preview}):(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mb-3`,children:n(`settings.profile.empty`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`button`,{onClick:()=>void C(),disabled:_||s,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm bg-accent-blue/10 text-accent-blue hover:bg-accent-blue/20 border border-accent-blue/30 transition-colors disabled:opacity-50`,children:[(0,Y.jsx)(w,{size:13}),n(`settings.profile.edit`)]}),r.exists&&(0,Y.jsxs)(`button`,{onClick:()=>void A(),disabled:s,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm bg-accent-red/10 text-accent-red hover:bg-accent-red/20 border border-accent-red/30 transition-colors disabled:opacity-50`,children:[(0,Y.jsx)(d,{size:13}),n(`settings.profile.clear`)]})]}),(0,Y.jsx)(nt,{onApply:e=>void j(e),applyBusy:_,disabled:s})]})]}):(0,Y.jsxs)(`button`,{onClick:()=>void y(),className:`text-sm text-accent-blue hover:underline`,children:[n(`settings.profile.loadFailed`),` — `,n(`common.retry`)]})}var ot=e=>new Promise(t=>setTimeout(t,e));function st(){let{t:e}=R(),[t,n]=(0,J.useState)(null),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)(null),[l,u]=G(),d=(0,J.useCallback)(async()=>{let t=await U.system.network();return t.success&&t.data?(n(t.data),o(t.data.lastError)):o(t.error||e(`settings.network.loadFailed`)),t},[e]);(0,J.useEffect)(()=>{d()},[d]);let f=t?!t.loopbackOnly:!1,p=(0,J.useCallback)(async()=>{if(!t||r)return;let a=!f;if(!await u({message:e(a?`settings.network.confirmEnable`:`settings.network.confirmDisable`),variant:a?`default`:`danger`}))return;i(!0),o(null);let s=await U.system.setNetwork(a);if(!s.success)o(s.error||e(`settings.network.applyFailed`)),i(!1);else{B.info(e(a?`settings.network.enabledToast`:`settings.network.disabledToast`)),await ot(900);for(let e=0;e<8;e++){let e=await U.system.network();if(e.success&&e.data&&(n(e.data),o(e.data.lastError),e.data.loopbackOnly===!a&&!e.data.lastError)){i(!1);return}await ot(600)}o(e(`settings.network.applyFailed`)),i(!1)}},[r,u,f,t,e]),m=(0,J.useCallback)(async e=>{await je(e)&&(c(e),setTimeout(()=>c(t=>t===e?null:t),1800))},[]),h=t?.lockedByHostOverride?e(`settings.network.lockedByHost`,{host:t.hostOverride||``}):t?.fromEnv?e(`settings.network.lockedByEnv`,{env:t.envKey}):null;return(0,Y.jsxs)(Y.Fragment,{children:[l,(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.network.description`)}),a&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/40 bg-accent-red/10 px-3 py-2 mb-3`,children:[(0,Y.jsx)(k,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:a})]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 ${h?`cursor-not-allowed opacity-60`:`cursor-pointer`}`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.network.toggleLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.network.toggleHint`)})]}),(0,Y.jsx)(ct,{checked:f,disabled:r||!t||!!h,onToggle:()=>void p(),label:e(`settings.network.toggleLabel`)})]}),r&&(0,Y.jsx)(`p`,{className:`text-xs text-accent-blue mt-2`,children:e(`settings.network.pendingHint`)}),h&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:h}),t&&(0,Y.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:e(f?`settings.network.stateLan`:`settings.network.stateLocal`)}),(0,Y.jsxs)(`span`,{className:`text-dark-text font-mono`,children:[t.bindHost,`:`,t.httpPort]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:e(`settings.network.addresses`)}),(0,Y.jsx)(`div`,{className:`space-y-1`,children:(f&&t.lanUrls.length?t.lanUrls:[t.loopbackUrl]).map(t=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`code`,{className:`flex-1 min-w-0 break-all text-xs text-dark-text bg-dark-surface border border-dark-border rounded px-2 py-1 font-mono`,children:t}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void m(t),title:e(`settings.network.copy`),className:`shrink-0 flex items-center gap-1 px-2 py-1 rounded text-xs text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:[s===t?(0,Y.jsx)(M,{size:13,className:`text-accent-green`}):(0,Y.jsx)(F,{size:13}),e(s===t?`settings.network.copied`:`settings.network.copy`)]})]},t))}),f&&t.lanUrls.length===0&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.network.noLanAddress`)})]})]}),f&&(0,Y.jsxs)(`div`,{className:`mt-3 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,Y.jsx)(k,{size:13}),e(`settings.network.warningTitle`)]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.network.warning`)}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:t?.authTokenRequired?e(`settings.network.tokenHint`):e(`settings.network.noTokenHint`)})]}),(0,Y.jsx)(lt,{state:t,onState:n})]})}function ct({checked:e,disabled:t,onToggle:n,label:r}){return(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":r,disabled:t,onClick:n,className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:cursor-not-allowed ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${e?`translate-x-[18px]`:`translate-x-0.5`}`})})}function lt({state:e,onState:t}){let{t:r}=R(),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(null),[c,l]=(0,J.useState)(null),[u,d]=G(),f=e?.tailscale,p=(0,J.useCallback)(async()=>{if(!f||i)return;let e=!f.serving;if(!await d({message:r(e?`settings.network.tailscale.confirmEnable`:`settings.network.tailscale.confirmDisable`),variant:e?`default`:`danger`}))return;a(!0),s(null);let n=await U.system.setTailscale(e);a(!1),!n.success||!n.data?s(n.error||r(`settings.network.tailscale.applyFailed`)):(t(n.data),B.info(n.data.message))},[i,d,t,r,f]),m=(0,J.useCallback)(async e=>{await je(e)&&(l(e),setTimeout(()=>l(t=>t===e?null:t),1800))},[]),h=o||f?.lastError||f?.probeError,g=(0,J.useCallback)(()=>{K(r(`settings.network.tailscale.askAiPrompt`,{state:f?.backendState||`unknown`,error:h||`—`})),B.info(r(`settings.network.tailscale.askAiHint`))},[h,r,f?.backendState]);if(!f)return null;let _=f.installed&&f.running,v=f.fromEnv?r(`settings.network.tailscale.lockedByEnv`,{env:f.envKey}):null;return(0,Y.jsxs)(`div`,{className:`mt-4 pt-4 border-t border-dark-border`,children:[u,(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:r(`settings.network.tailscale.title`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:r(`settings.network.tailscale.hint`)})]}),(0,Y.jsx)(ct,{checked:f.serving,disabled:i||!_||!!v,onToggle:()=>void p(),label:r(`settings.network.tailscale.title`)})]}),!f.installed&&(0,Y.jsxs)(`p`,{className:`text-xs text-accent-yellow mt-2`,children:[r(`settings.network.tailscale.notInstalled`),` `,(0,Y.jsx)(`a`,{href:`https://tailscale.com/download`,target:`_blank`,rel:`noreferrer`,className:`underline hover:text-accent-blue`,children:`tailscale.com/download`})]}),f.installed&&!f.running&&(0,Y.jsx)(`p`,{className:`text-xs text-accent-yellow mt-2`,children:r(`settings.network.tailscale.notRunning`,{state:f.backendState||`unknown`})}),i&&(0,Y.jsx)(`p`,{className:`text-xs text-accent-blue mt-2`,children:r(`settings.network.tailscale.pendingHint`)}),h&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/40 bg-accent-red/10 px-3 py-2 mt-2`,children:[(0,Y.jsx)(k,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:h})]}),(!_||!!h)&&(0,Y.jsx)(`div`,{className:`mt-2`,children:(0,Y.jsx)(H,{variant:`secondary`,size:`sm`,leftIcon:(0,Y.jsx)(n,{size:13,"aria-hidden":`true`}),onClick:g,children:r(`settings.network.tailscale.askAi`)})}),v&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:v}),f.serving&&f.url&&(0,Y.jsxs)(`div`,{className:`mt-2`,children:[(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:r(`settings.network.tailscale.address`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`code`,{className:`flex-1 min-w-0 break-all text-xs text-dark-text bg-dark-surface border border-dark-border rounded px-2 py-1 font-mono`,children:f.url}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void m(f.url),title:r(`settings.network.copy`),className:`shrink-0 flex items-center gap-1 px-2 py-1 rounded text-xs text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:[c===f.url?(0,Y.jsx)(M,{size:13,className:`text-accent-green`}):(0,Y.jsx)(F,{size:13}),c===f.url?r(`settings.network.copied`):r(`settings.network.copy`)]})]}),f.allServeUrls.length>1&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:r(`settings.network.tailscale.otherEntries`,{n:f.allServeUrls.length-1})})]}),f.serving&&(0,Y.jsxs)(`div`,{className:`mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,Y.jsx)(k,{size:13}),r(`settings.network.tailscale.warningTitle`)]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:r(`settings.network.tailscale.warning`)})]})]})}function ut(){let{t:e}=R(),[t,r]=G(),[i,a]=(0,J.useState)(null),[o,s]=(0,J.useState)(!1),[c,l]=(0,J.useState)(null),u=(0,J.useCallback)(async()=>{let t=await U.system.daemon();return t.success&&t.data?a(t.data):l(t.error||e(`settings.daemon.loadFailed`)),t},[e]);(0,J.useEffect)(()=>{u()},[u]);let d=i?.daemonEnabled??!1,f=i?.fromEnv?e(`settings.daemon.lockedByEnv`,{env:i.envKey}):null,p=(0,J.useCallback)(()=>{K(e(`settings.daemon.askAiPrompt`,{enabled:String(d),env:i?.envKey||`—`,error:c||`—`})),B.info(e(`settings.daemon.askAiHint`))},[d,c,i?.envKey,e]),m=(0,J.useCallback)(async()=>{if(!i||o)return;let t=!d;if(!await r({message:e(t?`settings.daemon.confirmEnable`:`settings.daemon.confirmDisable`)}))return;s(!0),l(null);let n=await U.system.setDaemon(t);s(!1),n.success?(n.data&&a(n.data),B.info(e(t?`settings.daemon.enabledToast`:`settings.daemon.disabledToast`))):l(n.error||e(`settings.daemon.applyFailed`))},[o,r,d,i,e]);return(0,Y.jsxs)(Y.Fragment,{children:[t,(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.daemon.description`)}),c&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/40 bg-accent-red/10 px-3 py-2 mb-3`,children:[(0,Y.jsx)(k,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:c})]}),c&&(0,Y.jsx)(`div`,{className:`mb-3`,children:(0,Y.jsx)(H,{variant:`secondary`,size:`sm`,leftIcon:(0,Y.jsx)(n,{size:13,"aria-hidden":`true`}),onClick:p,children:e(`settings.daemon.askAi`)})}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 ${f?`cursor-not-allowed opacity-60`:`cursor-pointer`}`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.daemon.toggleLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.daemon.toggleHint`)})]}),(0,Y.jsx)(dt,{checked:d,disabled:o||!i||!!f,onToggle:()=>void m(),label:e(`settings.daemon.toggleLabel`)})]}),f&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:f})]})}function dt({checked:e,disabled:t,onToggle:n,label:r}){return(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":r,disabled:t,onClick:n,className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:cursor-not-allowed ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${e?`translate-x-[18px]`:`translate-x-0.5`}`})})}function ft(){let{t:e}=R(),[t,n]=(0,J.useState)(null),[r,i]=(0,J.useState)(!0),[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(``),[d,p]=(0,J.useState)(!1),m=(0,J.useCallback)(async()=>{let t=await U.config.desktop();t.success&&t.data?(n(t.data),o(null),u(t.data.values.port===null?``:String(t.data.values.port)),p(!1)):o(t.error||e(`settings.desktop.loadFailed`))},[e]);(0,J.useEffect)(()=>{(async()=>{await m(),i(!1)})()},[m]);let h=!!t?.envOverridden.autoLaunch,g=!!t?.envOverridden.closeToTray,_=!!t?.envOverridden.port,v=(0,J.useCallback)(async t=>{if(s)return;c(!0),o(null);let r=await U.config.setDesktop(t);c(!1),r.success?(r.data&&(n(r.data),u(r.data.values.port===null?``:String(r.data.values.port)),p(!1)),B.info(e(`settings.desktop.savedRestartHint`))):o(r.error||e(`settings.desktop.applyFailed`))},[s,e]),y=(0,J.useCallback)(()=>{t&&!h&&v({autoLaunch:!t.values.autoLaunch})},[h,v,t]),b=(0,J.useCallback)(()=>{t&&!g&&v({closeToTray:!t.values.closeToTray})},[g,v,t]),x=(0,J.useCallback)(()=>{let e=l.trim();if(!e)return{ok:!0,value:null};if(!/^\d+$/.test(e))return{ok:!1};let t=Number(e);return t<1||t>65534?{ok:!1}:{ok:!0,value:t}},[l]),S=d&&!x().ok,C=t?.values.port??null,w=x(),T=!d||w.ok&&w.value===C,E=(0,J.useCallback)(()=>{let e=x();e.ok&&v({port:e.value})},[x,v]),D=(0,J.useCallback)(()=>{u(``),p(!1),C!==null&&v({port:null})},[C,v]);return r?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-4 text-sm text-dark-muted`,children:[(0,Y.jsx)(f,{size:14,className:`animate-spin`}),e(`settings.desktop.loading`)]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.desktop.description`)}),a&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/40 bg-accent-red/10 px-3 py-2 mb-3`,children:[(0,Y.jsx)(k,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:a})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-1`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.desktop.autoLaunchLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.desktop.autoLaunchHint`)})]}),(0,Y.jsx)(pt,{checked:!!t?.values.autoLaunch,disabled:s||h,onToggle:y,label:e(`settings.desktop.autoLaunchLabel`)})]}),h&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.lockedByEnv`,{env:t?.envKeys.autoLaunch||``})}),(0,Y.jsxs)(`div`,{className:`mt-4 pt-4 border-t border-dark-border flex items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.desktop.closeToTrayLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.desktop.closeToTrayHint`)})]}),(0,Y.jsx)(pt,{checked:!!t?.values.closeToTray,disabled:s||g,onToggle:b,label:e(`settings.desktop.closeToTrayLabel`)})]}),g&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.lockedByEnv`,{env:t?.envKeys.closeToTray||``})}),(0,Y.jsxs)(`div`,{className:`mt-4 pt-4 border-t border-dark-border`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.desktop.portLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5 mb-2`,children:e(`settings.desktop.portHint`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`input`,{type:`number`,inputMode:`numeric`,min:1,max:65534,value:l,disabled:s||_,placeholder:e(`settings.desktop.portAuto`),onChange:e=>{u(e.target.value),p(!0)},onKeyDown:e=>{e.key===`Enter`&&!S&&!T&&E()},className:`flex-1 min-w-0 rounded-lg bg-dark-surface border px-3 py-2 text-sm text-dark-text font-mono focus:outline-none disabled:opacity-60 ${S?`border-accent-red`:`border-dark-border focus:border-accent-blue`}`}),(0,Y.jsx)(`button`,{type:`button`,onClick:E,disabled:s||_||S||T,className:`shrink-0 px-3 py-2 rounded-lg text-sm bg-accent-blue/10 text-accent-blue hover:bg-accent-blue/20 border border-accent-blue/30 disabled:opacity-40 disabled:cursor-not-allowed`,children:e(`settings.desktop.save`)}),C!==null&&(0,Y.jsx)(`button`,{type:`button`,onClick:D,disabled:s||_,className:`shrink-0 px-3 py-2 rounded-lg text-sm text-dark-muted hover:text-dark-text hover:bg-dark-hover border border-dark-border disabled:opacity-40`,children:e(`settings.desktop.portAuto`)})]}),S&&(0,Y.jsx)(`p`,{className:`text-xs text-accent-red mt-1`,children:e(`settings.desktop.portInvalid`)}),_&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.lockedByEnv`,{env:t?.envKeys.port||``})}),C!==null&&!S&&(0,Y.jsxs)(`div`,{className:`mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,Y.jsx)(k,{size:13}),e(`settings.desktop.pinnedWarningTitle`)]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.pinnedWarning`,{port:C})})]})]}),(0,Y.jsxs)(`div`,{className:`mt-4 pt-3 border-t border-dark-border flex items-start gap-2`,children:[(0,Y.jsx)(I,{size:13,className:`text-dark-muted mt-0.5 shrink-0`}),(0,Y.jsxs)(`p`,{className:`text-xs text-dark-muted`,children:[e(`settings.desktop.restartHint`),t?.configPath&&(0,Y.jsx)(`span`,{className:`block mt-1 font-mono break-all`,children:t.configPath})]})]})]})}function pt({checked:e,disabled:t,onToggle:n,label:r}){return(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":r,disabled:t,onClick:n,className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:cursor-not-allowed ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${e?`translate-x-[18px]`:`translate-x-0.5`}`})})}var mt={get:()=>he.get(`/api/config/attention`),set:e=>he.post(`/api/config/attention`,{sound:e})};function ht(){let{t:e}=R(),[t,n]=(0,J.useState)(!0),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)(null),s=(0,J.useCallback)(async()=>{try{let t=await mt.get();t.success&&t.data?(n(t.data.sound),o(null)):o(t.error||e(`settings.notifications.loadFailed`))}catch{o(e(`settings.notifications.loadFailed`))}},[e]);(0,J.useEffect)(()=>{s()},[s]);let c=(0,J.useCallback)(async()=>{if(r)return;let a=!t;i(!0),o(null),n(a);try{let t=await mt.set(a);!t.success||!t.data?(n(!a),o(t.error||e(`settings.notifications.saveFailed`))):n(t.data.sound)}catch{n(!a),o(e(`settings.notifications.saveFailed`))}finally{i(!1)}},[r,t,e]);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 cursor-pointer`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.notifications.soundLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.notifications.soundHint`)})]}),(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":t,disabled:r,onClick:c,className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:cursor-not-allowed ${t?`bg-accent-blue`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${t?`translate-x-[18px]`:`translate-x-0.5`}`})})]}),a&&(0,Y.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(k,{size:13,className:`mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`break-all`,children:a})]})]})}var gt=(0,J.memo)(function({label:e,description:t,colors:n,pattern:r,isSelected:i,onClick:a}){return(0,Y.jsxs)(`button`,{onClick:a,className:`relative flex w-full flex-col items-center rounded-xl p-2 transition-all focus:outline-none focus:ring-2 focus:ring-accent-blue/50 ${i?`ring-2 ring-accent-blue/60 bg-dark-bg border border-accent-blue/40 shadow-sm`:`border border-dark-border hover:border-accent-blue/30 bg-dark-bg hover:shadow-sm`}`,title:t||e,"aria-pressed":i,"aria-label":e,children:[(0,Y.jsxs)(`div`,{className:`relative flex gap-0.5 rounded-md overflow-hidden w-full h-8 mb-1.5 border border-dark-border/40`,children:[[`bg`,`surface`,`border`,`text`,`muted`,`accentBlue`,`accentGreen`,`accentRed`,`accentYellow`,`accentPurple`].map(e=>(0,Y.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:n[e]},title:e},e)),r===`grid`&&(0,Y.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-0`,style:{backgroundImage:`linear-gradient(${n.border} 1px, transparent 1px), linear-gradient(90deg, ${n.border} 1px, transparent 1px)`,backgroundSize:`7px 7px`}})]}),(0,Y.jsx)(`span`,{className:`text-meta font-medium truncate w-full text-center ${i?`text-accent-blue`:`text-dark-text`}`,children:e}),i&&(0,Y.jsx)(`span`,{className:`absolute top-1 end-1 w-4 h-4 bg-accent-blue rounded-full flex items-center justify-center shadow-sm`,children:(0,Y.jsx)(`svg`,{width:`8`,height:`8`,viewBox:`0 0 8 8`,fill:`none`,children:(0,Y.jsx)(`path`,{d:`M1.5 4L3.5 6L6.5 2`,stroke:`white`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})})]})}),_t={name:`deepseekcode-web`,private:!0,version:`1.0.0`,type:`module`,scripts:{dev:`vite`,build:`node ../../scripts/tsc.mjs && vite build`,typecheck:`node ../../scripts/tsc.mjs -p tsconfig.json --noEmit`,preview:`vite preview`,icons:`node scripts/generate-pwa-icons.mjs`,test:`vitest run`,"test:watch":`vitest`},dependencies:{"@deepseekcode/protocol":`*`,"@deepseekcode/shared":`*`,"@milkdown/core":`7.22.3`,"@milkdown/preset-commonmark":`7.22.3`,"@milkdown/preset-gfm":`7.22.3`,"@milkdown/utils":`7.22.3`,"@monaco-editor/react":`4.7.0`,"@tanstack/react-virtual":`3.14.21`,clsx:`2.1.1`,"date-fns":`4.4.0`,diff:`9.0.0`,i18next:`26.5.4`,katex:`0.19.0`,"lucide-react":`1.61.0`,mermaid:`12.2.0`,prismjs:`1.30.0`,qrcode:`1.5.4`,react:`19.3.1`,"react-dom":`19.3.1`,"react-i18next":`17.1.0`,"react-markdown":`10.1.0`,"react-resizable-panels":`4.14.8`,"rehype-katex":`7.0.1`,"rehype-remark":`10.0.1`,"remark-gfm":`4.0.1`,"remark-math":`6.0.0`,shiki:`4.5.0`,zustand:`5.0.15`},devDependencies:{"@testing-library/jest-dom":`7.0.1`,"@testing-library/react":`16.3.3`,"@types/prismjs":`1.26.6`,"@types/qrcode":`1.5.6`,"@types/react":`19.3.0`,"@types/react-dom":`19.3.0`,"@vitejs/plugin-react":`6.1.2`,autoprefixer:`10.6.1`,jsdom:`30.1.3`,postcss:`8.5.31`,tailwindcss:`3.4.19`,typescript:`5.9.3`,vite:`8.3.5`,vitest:`5.0.5`}},vt=[{labelKey:`settings.groups.general`,items:[{id:`general`,icon:s,labelKey:`settings.nav.general`,searchKeys:[`language`,`display`,`developer`,`general`,`语言`,`界面`,`开发者`,`通用`]},{id:`appearance`,icon:o,labelKey:`settings.nav.appearance`,searchKeys:[`theme`,`color`,`palette`,`custom`,`ripple`,`effect`,`icon`,`blob`,`brand`,`主题`,`颜色`,`波纹`,`动效`,`背景`,`图标`,`品牌`,`团子`]},{id:`profile`,icon:D,labelKey:`settings.nav.profile`,searchKeys:[`profile`,`soul`,`persona`,`identity`,`name`,`画像`,`个性化`,`身份`,`称呼`,`soul.md`]},{id:`voice`,icon:g,labelKey:`settings.nav.voice`,searchKeys:[`voice`,`stt`,`whisper`,`speech`,`语音`,`安装`]}]},{labelKey:`settings.groups.features`,items:[{id:`models`,icon:_,labelKey:`settings.nav.models`,searchKeys:[`provider`,`model`,`api`,`key`,`openai`,`anthropic`,`deepseek`,`模型`]},{id:`connectors`,icon:O,labelKey:`settings.nav.connectors`,searchKeys:[`connector`,`capabilities`,`computer use`,`gmail`,`grok`,`连接器`,`能力`]},{id:`context`,icon:x,labelKey:`settings.nav.context`,searchKeys:[`context`,`token`,`offload`,`artifact`,`上下文`,`外置`]},{id:`configFiles`,icon:r,labelKey:`settings.nav.configFiles`,searchKeys:[`config`,`file`,`yaml`,`json`,`editor`,`配置文件`]}]},{labelKey:`settings.groups.system`,items:[{id:`sandbox`,icon:oe,labelKey:`settings.nav.sandbox`,searchKeys:[`sandbox`,`sandbox-exec`,`bwrap`,`bubblewrap`,`isolation`,`seccomp`,`permission`,`沙箱`,`隔离`,`命令`,`权限`]},{id:`network`,icon:T,labelKey:`settings.nav.network`,searchKeys:[`network`,`lan`,`wifi`,`port`,`share`,`access`,`server`,`bind`,`网络`,`局域网`,`内网`,`多人`,`共享`,`访问`,`端口`]},{id:`daemon`,icon:u,labelKey:`settings.nav.daemon`,searchKeys:[`daemon`,`background`,`persistent`,`server`,`backend`,`service`,`常驻`,`后台`,`守护`,`进程`,`服务`]},{id:`desktop`,icon:N,labelKey:`settings.nav.desktop`,searchKeys:[`desktop`,`autolaunch`,`autostart`,`startup`,`boot`,`launch`,`port`,`backend`,`桌面`,`客户端`,`开机`,`自启`,`启动`,`端口`,`后台`]},{id:`system`,icon:u,labelKey:`settings.nav.system`,searchKeys:[`system`,`server`,`uptime`,`restart`,`reboot`,`系统`,`重启`]},{id:`about`,icon:I,labelKey:`settings.nav.about`,searchKeys:[`about`,`version`,`info`,`关于`,`版本`]}]}],yt=[{key:`bg`,labelKey:`settings.colorBg`},{key:`surface`,labelKey:`settings.colorSurface`},{key:`border`,labelKey:`settings.colorBorder`},{key:`text`,labelKey:`settings.colorText`},{key:`muted`,labelKey:`settings.colorMuted`},{key:`accentBlue`,labelKey:`settings.colorAccentBlue`},{key:`accentGreen`,labelKey:`settings.colorAccentGreen`},{key:`accentRed`,labelKey:`settings.colorAccentRed`},{key:`accentYellow`,labelKey:`settings.colorAccentYellow`},{key:`accentPurple`,labelKey:`settings.colorAccentPurple`}],bt=(0,J.memo)(function({isOpen:e,onClose:t,onNavigate:r,focusSection:i}){let{t:a}=R(),[o,s]=(0,J.useState)(`general`),[c,l]=(0,J.useState)(``),[d,f]=(0,J.useState)(0);(0,J.useEffect)(()=>{if(!e)return;let t=!0;return(async()=>{let{draft:e}=await Ze();t&&f(Qe(e))})(),()=>{t=!1}},[e]),De({isOpen:e,onClose:t});let p=(0,J.useRef)(null);(0,J.useEffect)(()=>{e&&i?.section===`stt`&&(s(`voice`),requestAnimationFrame(()=>{p.current?.scrollIntoView({behavior:`smooth`,block:`start`})}))},[i?.nonce,e]);let m=(0,J.useRef)(null);(0,J.useEffect)(()=>{e&&i?.section===`profile`&&(s(`profile`),requestAnimationFrame(()=>{m.current?.scrollIntoView({behavior:`smooth`,block:`start`})}))},[i?.nonce,e]),(0,J.useEffect)(()=>{e&&l(``)},[e]);let h=(0,J.useMemo)(()=>{if(!c.trim())return vt;let e=c.toLowerCase().trim();return vt.map(t=>({...t,items:t.items.filter(t=>a(t.labelKey).toLowerCase().includes(e)||t.searchKeys.some(t=>t.toLowerCase().includes(e)))})).filter(e=>e.items.length>0)},[c,a]),{visible:g,phase:_}=se(e);return g?(0,Y.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4 max-md:p-0`,role:`dialog`,"aria-modal":`true`,"aria-label":a(`settings.title`),children:[(0,Y.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":_,onClick:t}),(0,Y.jsxs)(`div`,{className:`relative w-full max-w-4xl h-[80vh] bg-dark-overlay ui-surface-overlay border border-dark-border rounded-2xl shadow-pop flex flex-col overflow-hidden ui-overlay-panel max-md:h-full max-md:max-w-none max-md:rounded-none max-md:pt-[var(--safe-area-top)] max-md:pb-[var(--safe-area-bottom)]`,"data-phase":_,children:[(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between ps-5 pe-3 py-3 border-b border-dark-border`,children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold text-dark-text`,children:a(`settings.title`)}),(0,Y.jsx)(`button`,{onClick:t,"aria-label":`Close`,className:`p-1.5 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:(0,Y.jsx)(P,{size:18,"aria-hidden":`true`})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-1 min-h-0 max-md:flex-col`,children:[(0,Y.jsxs)(`nav`,{className:`w-52 shrink-0 border-e border-dark-border bg-dark-surface/40 flex flex-col min-h-0 max-md:w-full max-md:border-e-0 max-md:border-b`,children:[(0,Y.jsx)(`div`,{className:`p-3 pb-1 max-md:px-2 max-md:pt-2 max-md:pb-1`,children:(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(S,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted pointer-events-none`}),(0,Y.jsx)(`input`,{type:`text`,value:c,onChange:e=>l(e.target.value),placeholder:a(`settings.searchPlaceholder`),className:`w-full bg-dark-surface border border-dark-border rounded-lg ps-8 pe-2 py-1.5 text-xs text-dark-text placeholder-dark-muted focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all`})]})}),(0,Y.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar px-3 pb-3 max-md:flex-none max-md:flex max-md:flex-row max-md:items-center max-md:gap-1 max-md:overflow-x-auto max-md:overflow-y-hidden max-md:px-2 max-md:pb-2`,children:[h.map(e=>(0,Y.jsxs)(`div`,{className:`mt-3 first:mt-1 max-md:mt-0 max-md:flex max-md:shrink-0 max-md:items-center max-md:gap-1`,children:[(0,Y.jsx)(`div`,{className:`px-2 mb-1 text-badge font-medium uppercase tracking-wide text-dark-muted/80 max-md:hidden`,children:a(e.labelKey)}),(0,Y.jsx)(`div`,{className:`space-y-0.5 max-md:flex max-md:gap-1 max-md:space-y-0`,children:e.items.map(e=>{let t=e.icon,n=o===e.id;return(0,Y.jsxs)(`button`,{onClick:()=>s(e.id),"aria-current":n?`page`:void 0,className:`w-full flex items-center gap-2.5 px-2.5 py-1.5 rounded-lg text-sm transition-colors max-md:w-auto max-md:shrink-0 max-md:gap-2 max-md:whitespace-nowrap ${n?`bg-accent-blue/10 text-accent-blue font-medium`:`text-dark-text/90 hover:bg-dark-hover`}`,children:[(0,Y.jsx)(t,{size:15,className:n?`text-accent-blue`:`text-dark-muted`}),(0,Y.jsx)(`span`,{className:`truncate`,children:a(e.labelKey)}),e.id===`profile`&&d>0&&(0,Y.jsx)(`span`,{className:`ml-auto shrink-0 min-w-[16px] h-4 px-1 rounded-full bg-accent-green/15 text-accent-green border border-accent-green/30 text-[10px] leading-4 text-center font-medium`,title:a(`settings.profile.draft.pendingNav`,{n:d}),children:d})]},e.id)})})]},e.labelKey)),h.length===0&&(0,Y.jsx)(`div`,{className:`mt-6 text-center text-xs text-dark-muted`,children:a(`settings.noResults`)})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-w-0 min-h-0 overflow-y-auto custom-scrollbar`,children:(0,Y.jsx)(Ne,{fallbackRender:(e,t)=>(0,Y.jsx)(xt,{error:e,onRetry:t}),children:(0,Y.jsxs)(`div`,{className:`max-w-2xl px-6 py-5 max-md:px-4 max-md:py-4`,children:[o===`general`&&(0,Y.jsx)(St,{}),o===`appearance`&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Ct,{}),(0,Y.jsx)(Q,{icon:n,iconColor:`text-accent-purple`,title:a(`brand.title`),children:(0,Y.jsx)(Pe,{dense:!0})})]}),o===`profile`&&(0,Y.jsx)(`div`,{ref:m,id:`settings-section-profile`,className:`scroll-mt-5`,children:(0,Y.jsx)(Tt,{})}),o===`voice`&&(0,Y.jsx)(`div`,{ref:p,id:`settings-section-stt`,className:`scroll-mt-5`,children:(0,Y.jsx)(wt,{})}),o===`models`&&(0,Y.jsx)(Et,{onNavigate:r}),o===`connectors`&&(0,Y.jsx)(Dt,{onNavigate:r}),o===`context`&&(0,Y.jsx)(Ot,{}),o===`configFiles`&&(0,Y.jsx)(kt,{}),o===`sandbox`&&(0,Y.jsx)(At,{}),o===`network`&&(0,Y.jsx)(Q,{icon:T,iconColor:`text-accent-green`,title:a(`settings.nav.network`),children:(0,Y.jsx)(st,{})}),o===`daemon`&&(0,Y.jsx)(Q,{icon:u,iconColor:`text-accent-green`,title:a(`settings.daemon.title`),children:(0,Y.jsx)(ut,{})}),o===`desktop`&&(0,Y.jsx)(Q,{icon:N,iconColor:`text-accent-blue`,title:a(`settings.nav.desktop`),children:(0,Y.jsx)(ft,{})}),o===`system`&&(0,Y.jsx)(jt,{}),o===`about`&&(0,Y.jsx)(Mt,{})]})},o)})]})]})]}):null});function xt({error:e,onRetry:t}){let{t:n}=R();return(0,Y.jsxs)(`div`,{role:`alert`,className:`rounded-xl border border-accent-red/30 bg-accent-red/5 p-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-accent-red`,children:[(0,Y.jsx)(k,{size:16,className:`shrink-0`}),(0,Y.jsx)(`span`,{children:n(`error.pageError`)})]}),(0,Y.jsx)(`p`,{className:`mt-1.5 text-xs text-dark-muted break-words`,children:e.message||n(`error.unknownError`)}),(0,Y.jsx)(H,{className:`mt-3 w-fit`,variant:`accent`,leftIcon:(0,Y.jsx)(A,{size:14}),onClick:t,children:n(`common.retry`)})]})}function St(){let{t:e}=R(),{language:t,setLanguage:n,developerView:r,setDeveloperView:i,effort:a}=Ce(),o=ce[le(a)],s=be(t),c=[{code:Se,label:e(`settings.languageAuto`)},...ve.map(e=>({code:e.code,label:e.label}))];return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(Q,{icon:C,iconColor:`text-accent-blue`,title:e(`settings.language`),children:[(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:c.map(({code:e,label:t})=>(0,Y.jsx)(`button`,{lang:e===`auto`?void 0:e,onClick:()=>{n(e),e!==s&&U.config.language.set(ye(ge(e))).catch(()=>{})},className:`px-4 py-2 rounded-lg transition-all ${s===e?`bg-accent-blue text-accent-fg`:`bg-dark-hover text-dark-text hover:bg-dark-border`}`,children:t},e))}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:e(`settings.languageHint`)})]}),(0,Y.jsx)(Q,{icon:y,iconColor:`text-accent-blue`,title:e(`settings.display`),children:(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 cursor-pointer`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.developerView`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.developerViewHint`)})]}),(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":r,onClick:()=>i(!r),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${r?`bg-accent-blue`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${r?`translate-x-[18px]`:`translate-x-0.5`}`})})]})}),(0,Y.jsx)(Q,{icon:E,iconColor:`text-accent-yellow`,title:e(`settings.effort`),children:(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-4 py-1`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`settings.effortHint`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-1`,children:o.hint})]}),(0,Y.jsx)(fe,{syncSession:!1})]})}),(0,Y.jsx)(Q,{icon:b,iconColor:`text-accent-yellow`,title:e(`settings.notifications.title`),children:(0,Y.jsx)(ht,{})})]})}function Ct(){let{t:e}=R(),{theme:t,setTheme:n,themePresetId:r,setThemePreset:i,customTheme:a,customThemeEnabled:s,setCustomTheme:c,setCustomThemeEnabled:l,resetCustomTheme:u}=Ce(),d=W(e=>e.customThemes),f=W(e=>e.rejected),p=W(e=>e.error),m=W(e=>e.loading),h=W(e=>e.load),g=W(e=>e.removeCustomTheme),[_,v]=(0,J.useState)(s),y=(0,J.useMemo)(()=>t===`dark`?`dark`:t===`light`?`light`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`,[t]),b=(0,J.useMemo)(()=>we(d),[d]);return(0,Y.jsxs)(Q,{icon:o,iconColor:`text-accent-purple`,title:e(`settings.theme`),children:[(0,Y.jsx)(`div`,{className:`flex gap-2 mb-4`,children:[`dark`,`light`,`auto`].map(r=>(0,Y.jsx)(`button`,{onClick:()=>n(r),className:`px-4 py-2 rounded-lg transition-all ${t===r?`bg-accent-blue text-accent-fg`:`bg-dark-hover text-dark-text hover:bg-dark-border`}`,children:e(r===`dark`?`settings.themeDark`:r===`light`?`settings.themeLight`:`settings.themeAuto`)},r))}),(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsx)(`h4`,{className:`text-xs font-semibold text-dark-text mb-2`,children:e(`settings.themePresets`)}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 gap-2`,children:b.map(t=>{let n=(r||`graph`)===t.id,a=y===`dark`?t.dark:t.light,o=_e(t,e);return(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(gt,{id:t.id,label:o,description:xe(t,e),colors:a,pattern:t.pattern,isSelected:n,onClick:()=>i(t.id)}),t.custom&&(0,Y.jsx)(`button`,{type:`button`,title:e(`settings.themeCustomDelete`,{name:o}),"aria-label":e(`settings.themeCustomDelete`,{name:o}),onClick:()=>{g(t.id)},className:`absolute top-1 start-1 flex h-4 w-4 items-center justify-center rounded-full border border-dark-border bg-dark-surface/90 text-badge leading-none text-dark-muted transition-colors hover:border-accent-red/50 hover:text-accent-red`,children:`×`})]},t.id)})}),(0,Y.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 text-meta text-dark-muted`,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{h(!0)},disabled:m,className:`inline-flex items-center gap-1 transition-colors hover:text-dark-text disabled:opacity-50`,children:[(0,Y.jsx)(A,{size:12,className:m?`animate-spin`:void 0}),e(`settings.themeCustomReload`)]}),(0,Y.jsx)(`span`,{children:e(`settings.themeCustomHint`)})]}),p&&(0,Y.jsx)(`p`,{className:`mt-1 text-meta text-accent-red`,children:e(`settings.themeCustomError`,{error:p})}),f.length>0&&(0,Y.jsx)(`ul`,{className:`mt-1 space-y-0.5 text-meta text-accent-yellow`,children:f.map((t,n)=>(0,Y.jsx)(`li`,{children:e(`settings.themeCustomRejected`,{index:t.index>=0?t.index+1:`-`,reason:t.reason})},`${t.index}-${n}`))})]}),(0,Y.jsxs)(`div`,{className:`pt-4 border-t border-dark-border`,children:[(0,Y.jsxs)(`button`,{onClick:()=>{let e=!_;v(e),l(e)},className:`flex items-center gap-2 text-sm text-dark-muted hover:text-dark-text transition-colors`,children:[(0,Y.jsx)(o,{size:14}),(0,Y.jsx)(`span`,{children:e(`settings.customOverrides`)}),(0,Y.jsx)(`span`,{className:`w-8 h-4 rounded-full transition-colors ${_?`bg-accent-blue`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`block w-3 h-3 rounded-full bg-white transition-transform mt-0.5 ${_?`ms-4`:`ms-0.5`}`})})]}),_&&(0,Y.jsx)(`p`,{className:`text-badge text-dark-muted mt-1 mb-2`,children:e(`settings.customOverridesHint`)}),_&&(0,Y.jsxs)(`div`,{className:`mt-3`,children:[(0,Y.jsx)(`div`,{className:`flex gap-1 mb-3 rounded-lg overflow-hidden h-6`,children:yt.map(({key:e})=>(0,Y.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:a[e]},title:e},e))}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-2`,children:yt.map(({key:t,labelKey:n})=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`input`,{type:`color`,value:a[t],onChange:e=>c({[t]:e.target.value}),className:`w-8 h-8 rounded border border-dark-border cursor-pointer bg-transparent p-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted flex-1 truncate`,children:e(n)}),(0,Y.jsx)(`input`,{type:`text`,value:a[t],onChange:e=>{let n=e.target.value;/^#[0-9a-fA-F]{0,6}$/.test(n)&&c({[t]:n})},className:`w-16 bg-dark-bg border border-dark-border rounded px-1 py-0.5 text-xs text-dark-text font-mono text-center`,maxLength:7})]},t))}),(0,Y.jsx)(`button`,{onClick:u,className:`mt-2 text-xs text-dark-muted hover:text-accent-red transition-colors`,children:e(`settings.resetColors`)})]})]})]})}function wt(){let{t:e}=R();return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Q,{icon:g,iconColor:`text-accent-blue`,title:e(`stt.setup.title`),children:(0,Y.jsx)(Ve,{})}),(0,Y.jsx)(Q,{icon:j,iconColor:`text-accent-purple`,title:e(`tts.setup.title`),children:(0,Y.jsx)(He,{})})]})}function Tt(){let{t:e}=R();return(0,Y.jsx)(Q,{icon:D,iconColor:`text-accent-purple`,title:e(`settings.profile.title`),children:(0,Y.jsx)(at,{})})}function Et({onNavigate:e}){return(0,Y.jsxs)(Q,{icon:_,iconColor:`text-accent-yellow`,title:`Provider & Models`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:`Configure AI providers, API keys, and model settings. Add or remove providers like OpenAI, Anthropic, DeepSeek, and more.`}),(0,Y.jsx)(H,{variant:`accent`,leftIcon:(0,Y.jsx)(c,{size:14}),onClick:()=>e?.(`models`),className:`w-fit`,children:`Manage Providers & Models`})]})}function Dt({onNavigate:e}){let{t}=R();return(0,Y.jsxs)(Q,{icon:N,iconColor:`text-accent-green`,title:t(`settings.capabilities.title`),children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:`Computer Use、外部服务连接器(X/Twitter、Gmail、Google Workspace、Microsoft 365 等)与 xAI (Grok) 统一在连接器页集中管理。`}),(0,Y.jsx)(H,{variant:`accent`,leftIcon:(0,Y.jsx)(c,{size:14}),onClick:()=>e?.(`connectors`),className:`w-fit`,children:`Manage Connectors & Capabilities`})]})}function Ot(){let{t:e}=R();return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Q,{icon:m,iconColor:`text-accent-blue`,title:e(`settings.contextWindow.title`),children:(0,Y.jsx)(Ke,{})}),(0,Y.jsx)(Q,{icon:y,iconColor:`text-accent-purple`,title:e(`settings.contextOffload.title`),children:(0,Y.jsx)(Ue,{})})]})}function kt(){return(0,Y.jsx)(Q,{icon:r,iconColor:`text-accent-green`,title:`Config Files (~/.agent/)`,children:(0,Y.jsx)(Le,{})})}function At(){let{t:e}=R();return(0,Y.jsx)(Q,{icon:oe,iconColor:`text-accent-green`,title:e(`settings.sandbox.title`),children:(0,Y.jsx)(Je,{})})}function jt(){let[e,t]=G(),[n,r]=(0,J.useState)(0),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(!1);(0,J.useEffect)(()=>{let e=!0,t=async()=>{try{let t=await U.system.status();e&&t.success&&t.data&&r(t.data.uptime)}catch{}};t();let n=setInterval(t,i?2e3:1e4);return()=>{e=!1,clearInterval(n)}},[i]);let c=(0,J.useCallback)(async()=>{if(await t({message:`Restart the server? All active sessions will be disconnected.`,variant:`danger`})){a(!0);try{let e=await U.system.restart();e.success?B.info(`Server restarting...`):(B.error(e.error||`Restart failed`),a(!1))}catch{B.error(`Failed to send restart request`),a(!1)}}},[t]),l=(0,J.useCallback)(async()=>{if(await t({title:`Shutdown server`,message:`This stops the entire backend process. All active sessions and unsaved work will be lost.`,confirmText:`Shut down`,variant:`danger`})){s(!0);try{let e=await U.system.shutdown();e.success?B.info(`Server shutting down...`):(B.error(e.error||`Shutdown failed`),s(!1))}catch{B.error(`Failed to send shutdown request`),s(!1)}}},[t]);return(0,J.useEffect)(()=>{i&&n<1e4&&(a(!1),B.success(`Server restarted`))},[n,i]),(0,Y.jsxs)(Q,{icon:u,iconColor:`text-dark-muted`,title:`System`,children:[e,(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between text-sm`,children:[(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:`Server Uptime`}),(0,Y.jsx)(`span`,{className:`text-dark-text font-mono`,children:(e=>{let t=Math.floor(e/1e3),n=Math.floor(t/60),r=Math.floor(n/60);return r>0?`${r}h ${n%60}m`:n>0?`${n}m ${t%60}s`:`${t}s`})(n)})]}),(0,Y.jsxs)(`button`,{onClick:c,disabled:i,className:`flex items-center gap-2 px-4 py-2 rounded-lg text-sm transition-all ${i?`bg-dark-hover text-dark-muted cursor-wait`:`bg-accent-red/10 text-accent-red hover:bg-accent-red/20 border border-accent-red/30`}`,children:[(0,Y.jsx)(A,{size:14,className:i?`animate-spin`:``}),i?`Restarting...`:`Restart Server`]}),(0,Y.jsxs)(`button`,{onClick:l,disabled:o,className:`flex items-center gap-2 px-4 py-2 rounded-lg text-sm transition-all ${o?`bg-dark-hover text-dark-muted cursor-wait`:`bg-accent-red/10 text-accent-red hover:bg-accent-red/20 border border-accent-red/30`}`,children:[(0,Y.jsx)(te,{size:14,className:o?`animate-pulse`:``}),o?`Shutting Down...`:`Shutdown Server`]})]})]})}function Mt(){let{t:e}=R();return(0,Y.jsx)(Q,{icon:I,iconColor:`text-accent-blue`,title:e(`settings.about`),children:(0,Y.jsxs)(`div`,{className:`text-sm text-dark-muted space-y-2`,children:[(0,Y.jsxs)(`p`,{children:[(0,Y.jsx)(`span`,{className:`text-dark-text`,children:`DeepSeekCode Web`}),` v`,_t.version]}),(0,Y.jsx)(`p`,{children:e(`settings.aboutDesc`)}),(0,Y.jsx)(`p`,{className:`text-xs`,children:`Powered by React + TypeScript + TailwindCSS`}),(0,Y.jsx)(`p`,{className:`text-xs`,children:`联系:ngwlh2026@gmail.com`}),(0,Y.jsxs)(`button`,{onClick:()=>Ee.getState().openWhatsNew(),className:`mt-2 flex items-center gap-2 px-4 py-2 rounded-lg text-sm transition-all bg-accent-blue/10 text-accent-blue hover:bg-accent-blue/20 border border-accent-blue/30`,children:[(0,Y.jsx)(n,{size:14}),e(`settings.whatsNew`)]})]})})}export{bt as SettingsModal};