@minimaxclaw/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.
- package/README.md +17 -19
- package/package.json +9 -9
- package/web/dist/assets/{AssistantsView-Y4TXobGE.js → AssistantsView-Y3nFezhd.js} +1 -1
- package/web/dist/assets/AutomationView-bf7_zU_p.js +4 -0
- package/web/dist/assets/Button-B43HsIQ3.js +1 -0
- package/web/dist/assets/{ChannelConfigView-WJ-zUV8p.js → ChannelConfigView---Dwl3Fk.js} +3 -3
- package/web/dist/assets/ChartsView-Dw6G-jf3.js +1 -0
- package/web/dist/assets/{ConnectorsView-DaHmxnGE.js → ConnectorsView-BWvdrpyK.js} +2 -2
- package/web/dist/assets/{DiffPreview-D8tIj_aF.js → DiffPreview-WQihq3bK.js} +57 -56
- package/web/dist/assets/{FileContextMenu-C5WYeBNu.js → FileContextMenu-CyjXlSHp.js} +1 -1
- package/web/dist/assets/FileTreeView-Cafy33nT.js +1 -0
- package/web/dist/assets/HookConfigView-D-lASVju.js +2 -0
- package/web/dist/assets/InboxView-BWajw-Yx.js +1 -0
- package/web/dist/assets/InputArea-CSqaA55j.js +31 -0
- package/web/dist/assets/Install-ClEm4oGX.js +2 -0
- package/web/dist/assets/MemoryView-DLri75dm.js +1 -0
- package/web/dist/assets/ModelsView-BBLUMzR5.js +1 -0
- package/web/dist/assets/PluginsView-C-fnbDGZ.js +1 -0
- package/web/dist/assets/ProjectsView-BruI2W_l.js +1 -0
- package/web/dist/assets/{SessionGrid-BQSrCDqQ.js → SessionGrid-7GLpwn6d.js} +4 -4
- package/web/dist/assets/SettingsModal-cc9Qu2QU.js +4 -0
- package/web/dist/assets/SkillsView-Bf-2-U_q.js +1 -0
- package/web/dist/assets/TemplatesTab-CKul8nbL.js +2 -0
- package/web/dist/assets/{ToolsView-CjdYiaNz.js → ToolsView-D_aluOsK.js} +1 -1
- package/web/dist/assets/WorkspaceDirPicker-Z42YqE4a.js +5 -0
- package/web/dist/assets/{agentIconSet-CDeMxTHf.js → agentIconSet-Cqhm4UOl.js} +1 -1
- package/web/dist/assets/api-BW4-5gtM.js +1 -0
- package/web/dist/assets/chatStore-D8Zzr1hE.js +242 -0
- package/web/dist/assets/cn-CoHJgTJ5.js +1 -0
- package/web/dist/assets/{common-CPZxdYLs.js → common-CP2UB8TN.js} +99 -99
- package/web/dist/assets/icons-CittejKL.js +1 -0
- package/web/dist/assets/imageUrl-BVgcEm7e.js +2 -0
- package/web/dist/assets/index-CEUbTcNL.css +1 -0
- package/web/dist/assets/index-CxrzleFg.js +122 -0
- package/web/dist/assets/{markdown-Cps-36Z5.js → markdown-DZQBOzWk.js} +1 -1
- package/web/dist/assets/{panels-DCwx2Pbu.js → panels-CuDz4aqU.js} +1 -1
- package/web/dist/assets/projectsStore-B7fdKRzl.js +1 -0
- package/web/dist/assets/{react-vendor-CXI113IS.js → react-vendor-BEA-EtI-.js} +1 -1
- package/web/dist/assets/{settingsStore-BSdi9gNd.js → settingsStore-DYqiXodu.js} +1 -1
- package/web/dist/assets/src-55YckF5W.js +2 -0
- package/web/dist/assets/{state-pOTP5BEk.js → state-A4wJ8QgR.js} +1 -1
- package/web/dist/assets/{statusAxesRefresh--2evRuAU.js → statusAxesRefresh-BBqszCp-.js} +1 -1
- package/web/dist/assets/sttLanguages-jnSk4aqg.js +6 -0
- package/web/dist/assets/threadStore-CQi4OzSe.js +1 -0
- package/web/dist/assets/useConfirm-kTv3x0H6.js +1 -0
- package/web/dist/assets/{useTranslation-gGKZZfux.js → useTranslation-2BGEBvJE.js} +1 -1
- package/web/dist/assets/websocket-DCs7f54y.js +1 -0
- package/web/dist/assets/whatsNewStore-DoCQvcMq.js +1 -0
- package/web/dist/index.html +27 -23
- package/web/dist/assets/AutomationView-DfAF2L92.js +0 -3
- package/web/dist/assets/Button-D-g7PgYh.js +0 -1
- package/web/dist/assets/ChartsView-CSAfGqTC.js +0 -1
- package/web/dist/assets/FileTreeView-B7IN0KmE.js +0 -1
- package/web/dist/assets/HookConfigView-9gqvrRhQ.js +0 -2
- package/web/dist/assets/InboxView-BcEfijbj.js +0 -1
- package/web/dist/assets/InputArea-D5F91Uwk.js +0 -14
- package/web/dist/assets/Install-Cuelo0If.js +0 -2
- package/web/dist/assets/MemoryView-BvZSh5-T.js +0 -1
- package/web/dist/assets/ModelsView-BgvMN8xv.js +0 -1
- package/web/dist/assets/PluginsView-C3d6e8vV.js +0 -1
- package/web/dist/assets/ProjectsView-CM7GOsoK.js +0 -1
- package/web/dist/assets/SettingsModal-BvGXq5EE.js +0 -4
- package/web/dist/assets/SkillsView-87kGRliE.js +0 -1
- package/web/dist/assets/TemplatesTab-8MLwVNwV.js +0 -1
- package/web/dist/assets/api-ZQf0Ys8y.js +0 -1
- package/web/dist/assets/icons-B8Ngx6rM.js +0 -1
- package/web/dist/assets/imageUrl-CrQM4gmf.js +0 -74
- package/web/dist/assets/index-Bm7r92T3.css +0 -1
- package/web/dist/assets/index-STsyoFCk.js +0 -145
- package/web/dist/assets/src-BK8SoTFV.js +0 -1
- package/web/dist/assets/sttLanguages-BPcOF0nQ.js +0 -2
- package/web/dist/assets/useConfirm-CQjBnYuP.js +0 -1
- package/web/dist/assets/websocket-CeKJTCdp.js +0 -1
- package/web/dist/assets/whatsNewStore-C0hbStfc.js +0 -1
- package/web/dist/assets/workspaceSemantics-CW8ytHq2.js +0 -3
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,A as n,Ar as r,At as i,Dt as a,Et as o,Ft as s,G as c,Gn as l,Hn as u,Jn as d,K as f,Kr as p,N as m,Or as h,Pn as g,Qn as _,S as v,Sn as y,Xn as b,Y as x,_t as S,a as C,an as w,br as T,er as E,ft as D,g as O,hr as k,ii as A,ir as j,it as M,j as N,jr as ee,kt as te,l as ne,ln as P,lt as re,mr as F,n as I,nt as ie,qn as ae,qt as L,yn as oe,z as se}from"./icons-CittejKL.js";import{t as R}from"./useTranslation-2BGEBvJE.js";import{n as ce,r as z,t as B}from"./Button-B43HsIQ3.js";import{S as le,x as ue}from"./src-55YckF5W.js";import{a as de,f as fe,g as pe,h as me,i as he,l as ge,o as _e,p as ve,r as ye,t as be}from"./sttLanguages-jnSk4aqg.js";import{r as xe,t as V}from"./api-BW4-5gtM.js";import{A as Se,C as Ce,D as we,M as Te,O as Ee,S as De,T as Oe,r as ke,v as H,y as Ae}from"./settingsStore-DYqiXodu.js";import{I as je}from"./markdown-DZQBOzWk.js";import{s as U}from"./imageUrl-BVgcEm7e.js";import{t as W}from"./cn-CoHJgTJ5.js";import{t as Me}from"./whatsNewStore-DoCQvcMq.js";import"./common-CP2UB8TN.js";import{i as Ne,t as G}from"./useConfirm-kTv3x0H6.js";import{X as K,l as Pe,v as Fe}from"./index-CxrzleFg.js";import{n as Ie}from"./profileChange-xrd7jkii.js";var q=e(A(),1),J=je();function Le(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function Re(e){return new Date(e).toLocaleString()}function ze(){let[e,n]=(0,q.useState)([]),[r,i]=(0,q.useState)(null),[a,o]=(0,q.useState)(``),[s,c]=(0,q.useState)(``),[l,u]=(0,q.useState)(!1),[d,f]=(0,q.useState)(!1),p=(0,q.useCallback)(async()=>{u(!0);try{let e=await V.config.files.list();e.success&&Array.isArray(e.data)&&n(e.data)}catch{z.error(`Failed to load config files`)}finally{u(!1)}},[]),m=(0,q.useCallback)(async e=>{try{let t=await V.config.files.read(e);if(t.success&&t.data){let e=t.data;i(e.name),o(e.content),c(e.content)}}catch{z.error(`Failed to read ${e}`)}},[]);(0,q.useEffect)(()=>{p()},[p]);let h=(0,q.useCallback)(async()=>{if(r){f(!0);try{let e=await V.config.files.write(r,a);e.success?(c(a),z.success(`${r} saved`),p()):z.error(e.error||`Failed to save`)}catch{z.error(`Failed to save file`)}finally{f(!1)}}},[r,a,p]),_=a!==s,v=r?.endsWith(`.yaml`)||r?.endsWith(`.yml`),y=r?.endsWith(`.json`),b=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`);return(0,J.jsxs)(`div`,{className:`space-y-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-dark-text`,children:`Config Files`}),(0,J.jsx)(`button`,{onClick:p,disabled:l,className:`p-1.5 rounded hover:bg-dark-hover transition-colors text-dark-muted`,title:`Refresh file list`,children:(0,J.jsx)(M,{size:14,className:l?`animate-spin`:``})})]}),e.length===0&&!l&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted`,children:`No config files found in ~/.agent/`}),e.length>0&&(0,J.jsxs)(`div`,{className:`flex gap-3`,children:[(0,J.jsx)(`div`,{className:`w-48 shrink-0 space-y-0.5 max-h-[300px] overflow-y-auto custom-scrollbar`,children:e.map(e=>(0,J.jsxs)(`button`,{onClick:()=>m(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,J.jsx)(g,{size:12,className:`shrink-0`}),(0,J.jsx)(`span`,{className:`truncate flex-1`,children:e.name}),!e.editable&&(0,J.jsx)(`span`,{className:`text-badge text-dark-muted shrink-0`,title:`Read-only`,children:`read`})]},e.name))}),r?(0,J.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between mb-1.5`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted`,children:[(0,J.jsx)(`span`,{className:`text-dark-text font-medium`,children:r}),e.find(e=>e.name===r)&&(0,J.jsxs)(`span`,{children:[Le(e.find(e=>e.name===r).size),` · `,Re(e.find(e=>e.name===r).modified)]}),_&&(0,J.jsxs)(`span`,{className:`text-accent-yellow flex items-center gap-1`,children:[(0,J.jsx)(O,{size:10}),`unsaved changes`]})]}),(0,J.jsx)(B,{variant:`accent`,size:`sm`,leftIcon:(0,J.jsx)(t,{size:12}),loading:d,disabled:!_,onClick:h,children:`Save`})]}),(0,J.jsxs)(`div`,{className:`relative`,children:[(0,J.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
|
+
`)||` `}}),(0,J.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,J.jsx)(`div`,{className:`flex-1 flex items-center justify-center text-xs text-dark-muted`,children:`Select a file to edit`})]})]})}var Be=[{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`}],Ve=`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 He(){let{t:e}=R(),[n,i]=(0,q.useState)(!1),[a,o]=(0,q.useState)(!1),[s,c]=(0,q.useState)(!1),[l,u]=(0,q.useState)(!1),[d,f]=(0,q.useState)(null),[p,m]=(0,q.useState)({pipIndexUrl:``,pipExtraIndexUrl:``,proxy:``,hfEndpoint:``}),g=(0,q.useCallback)(e=>{f(e),m({pipIndexUrl:e.settings.pipIndexUrl??``,pipExtraIndexUrl:e.settings.pipExtraIndexUrl??``,proxy:e.settings.proxy??``,hfEndpoint:e.settings.hfEndpoint??``})},[]),_=(0,q.useCallback)(async()=>{c(!0);try{let e=await V.stt.getConfig();e.success&&e.data?g(e.data):e.error&&z.error(e.error)}catch{}c(!1),o(!0)},[g]);(0,q.useEffect)(()=>{n&&!a&&_()},[n,a,_]);let v=d?.envKeys,y=d?.resolved.fromEnv??[],b=e=>y.includes(e),x=Object.keys(p).filter(e=>{let t=p[e].trim();return!t||b(e)?!1:e===`pipExtraIndexUrl`||e===`proxy`||t!==d?.official[e]}),S=Object.keys(p).some(e=>!b(e)&&p[e].trim()!==(d?.settings[e]??``)),C=(0,q.useCallback)(async()=>{u(!0);try{let t={};for(let{key:e}of Be)b(e)||(t[e]=p[e].trim()||null);let n=await V.stt.setConfig(t);n.success&&n.data?(z.success(e(`stt.sources.saved`)),await _()):z.error(n.error||e(`stt.sources.saveFailed`))}catch(e){z.error(e instanceof Error?e.message:String(e))}u(!1)},[p,b,_,e]),w=(0,q.useCallback)(async()=>{u(!0);try{let t=await V.stt.setConfig({pipIndexUrl:null,pipExtraIndexUrl:null,proxy:null,hfEndpoint:null});t.success&&t.data?(z.success(e(`stt.sources.resetDone`)),await _()):z.error(t.error||e(`stt.sources.saveFailed`))}catch(e){z.error(e instanceof Error?e.message:String(e))}u(!1)},[_,e]);return(0,J.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface overflow-hidden`,children:[(0,J.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:()=>i(e=>!e),children:[n?(0,J.jsx)(r,{size:14,className:`text-dark-muted`}):(0,J.jsx)(h,{size:14,className:`text-dark-muted`}),(0,J.jsx)(oe,{size:14,className:`text-accent-blue`}),(0,J.jsx)(`span`,{className:`text-sm font-medium text-dark-text flex-1`,children:e(`stt.sources.title`)}),x.length>0&&!n&&(0,J.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,J.jsx)(O,{size:11}),e(`stt.sources.badgeCustom`,{count:x.length})]})]}),n&&(0,J.jsxs)(`div`,{className:`px-3 pb-3 space-y-3 border-t border-dark-border pt-3`,children:[(0,J.jsx)(`p`,{className:`text-meta text-dark-muted`,children:e(`stt.sources.hint`)}),s&&!d?(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted py-2`,children:[(0,J.jsx)(L,{size:13,className:`animate-spin`}),e(`stt.sources.loading`)]}):(0,J.jsxs)(J.Fragment,{children:[Be.map(({key:t,labelKey:n,placeholderKey:r,preset:i})=>{let a=b(t),o=(v?.[t]??[]).join(` / `)||`ENV`,s=i?d?.presets?.[i]??[]:[];return(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-dark-muted mb-1`,children:[e(n),a&&(0,J.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-yellow`,title:e(`stt.sources.envTitle`,{name:o}),children:[(0,J.jsx)(O,{size:11}),`env: `,o]})]}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(`input`,{type:`text`,value:a?d?.resolved[t]??``:p[t],disabled:a,spellCheck:!1,placeholder:e(r),onChange:e=>m(n=>({...n,[t]:e.target.value})),className:Ve}),s.length>0&&(0,J.jsxs)(`select`,{value:``,disabled:a,title:e(`stt.sources.preset`),onChange:e=>{let n=s.find(t=>t.id===e.target.value);n&&m(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,J.jsx)(`option`,{value:``,children:e(`stt.sources.preset`)}),s.map(e=>(0,J.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]})]},t)}),x.length>0&&(0,J.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,J.jsx)(O,{size:12,className:`mt-0.5 shrink-0`}),(0,J.jsx)(`span`,{children:e(`stt.sources.warning`)})]}),d&&!d.allowPrivateHosts&&(0,J.jsx)(`p`,{className:`text-badge text-dark-muted`,children:e(`stt.sources.privateBlocked`)}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2 pt-0.5`,children:[(0,J.jsx)(B,{variant:`accent`,size:`sm`,leftIcon:(0,J.jsx)(t,{size:13}),loading:l,disabled:!S,onClick:()=>void C(),children:e(`stt.sources.save`)}),(0,J.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 w(),children:[(0,J.jsx)(ie,{size:13}),e(`stt.sources.reset`)]}),(0,J.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e(`stt.sources.httpsOnly`)})]})]})]})]})}function Ue(){let{t:e}=R(),[t,r]=(0,q.useState)(null),[i,o]=(0,q.useState)(null),[s,c]=(0,q.useState)({running:!1,logs:[]}),[l,u]=(0,q.useState)(!1),d=(0,q.useRef)(null),f=(0,q.useRef)(s),p=(0,q.useRef)(null),[m,h]=(0,q.useState)(he),g=(0,q.useCallback)(e=>{h(e),ye(e),window.dispatchEvent(new CustomEvent(`stt-lang-changed`,{detail:{lang:e}}))},[]);(0,q.useEffect)(()=>{f.current=s},[s]);let _=(0,q.useCallback)(async()=>{u(!0);let e=await V.stt.status();e.success&&e.data?(r(e.data),e.data.env&&o(e.data.env)):e.error&&z.error(e.error),u(!1)},[]);(0,q.useEffect)(()=>{_()},[_]);let y=(0,q.useCallback)(async()=>{let e=await V.stt.installStatus();if(e.success&&e.data){let t=f.current.running;c(e.data),e.data.running?d.current=window.setTimeout(()=>void y(),1e3):(_(),t&&e.data.status===`done`&&window.dispatchEvent(new CustomEvent(`stt-backends-changed`)))}},[_]);(0,q.useEffect)(()=>()=>{d.current&&window.clearTimeout(d.current)},[]),(0,q.useEffect)(()=>{p.current&&(p.current.scrollTop=p.current.scrollHeight)},[s.logs]);let x=(0,q.useCallback)(async()=>{let t=await V.stt.install();t.success&&t.data?.started?(c({running:!0,logs:[],status:`running`}),y()):t.data?.alreadyRunning?(z.info(e(`stt.setup.jobInProgress`)),y()):c({running:!1,logs:[],status:`error`,error:t.error||t.data?.error||`install failed`,manualCommand:t.data?.manualCommand})},[y,e]),S=(0,q.useCallback)(async()=>{await V.stt.cancelInstall(),y()},[y]),C=(0,q.useCallback)(t=>{navigator.clipboard.writeText(t).then(()=>z.success(e(`stt.setup.copySuccess`)),()=>z.error(e(`stt.setup.copyFailed`)))},[e]),D=s.running,A=!D&&s.status===`done`?t?.backends?.en:void 0,N=A?!A.installed:!1,ee=t=>t?(0,J.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,J.jsx)(T,{size:12}),e(`stt.setup.installed`)]}):(0,J.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,J.jsx)(k,{size:12}),e(`stt.setup.notInstalled`)]}),te=m===`en`?`base.en`:`base`,ne=de(m),P=()=>{let n=t?.backends?.en??{installed:!1,loaded:!1,model:`base.en`};return(0,J.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3 flex items-start justify-between gap-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-start gap-3 min-w-0`,children:[(0,J.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,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,J.jsx)(`span`,{className:`text-sm font-medium text-dark-text`,children:e(`stt.setup.whisperTitle`)}),ee(n.installed),(0,J.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,J.jsx)(w,{size:12}),e(`stt.setup.inUse`)]})]}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2 mt-1 text-meta text-dark-muted`,children:[(0,J.jsx)(`code`,{className:`text-badge bg-dark-hover px-1.5 py-0.5 rounded`,children:`base.en / base`}),(0,J.jsx)(`span`,{children:e(`stt.setup.whisperDesc`)})]}),!n.installed&&(0,J.jsxs)(`p`,{className:`mt-1 text-meta text-accent-orange flex items-center gap-1`,children:[(0,J.jsx)(O,{size:11}),e(`stt.setup.engineNotInstalledHint`)]}),!n.installed&&n.error&&(0,J.jsxs)(`p`,{className:`mt-1 text-meta text-accent-orange break-all`,title:n.error,children:[(0,J.jsx)(O,{size:11}),e(`stt.setup.probeError`),n.error]})]})]}),(0,J.jsx)(`div`,{className:`shrink-0`,onClick:e=>e.stopPropagation(),children:D?(0,J.jsxs)(`button`,{className:`btn btn-secondary cursor-not-allowed opacity-70`,disabled:!0,children:[(0,J.jsx)(L,{size:14,className:`animate-spin`}),e(`stt.setup.installing`)]}):n.installed?(0,J.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>void _(),title:e(`stt.setup.recheck`),children:[(0,J.jsx)(M,{size:14}),e(`stt.setup.recheck`)]}):(0,J.jsxs)(`button`,{className:`btn btn-accent`,onClick:()=>void x(),children:[(0,J.jsx)(b,{size:14}),e(`stt.setup.install`)]})})]})},re=i?.pythonAvailable&&i?.pipAvailable,F=s.error||t?.backends?.en?.error||null,I=!!i&&!re,ie=(0,q.useCallback)(()=>{K(e(`stt.setup.askAiPrompt`,{python:i?.pythonAvailable?`ok`:`missing`,pip:i?.pipAvailable?`ok`:`missing`,error:F||`—`})),z.info(e(`stt.setup.askAiHint`))},[i?.pipAvailable,i?.pythonAvailable,F,e]);return(0,J.jsxs)(`div`,{className:`space-y-3`,children:[(0,J.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-dark-text`,children:[(0,J.jsx)(v,{size:14,className:`text-accent-blue`}),e(`stt.setup.envCard`)]}),(0,J.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>void _(),disabled:l,children:[(0,J.jsx)(M,{size:13,className:l?`animate-spin`:``}),e(`stt.setup.recheck`)]})]}),(0,J.jsxs)(`div`,{className:`mt-2.5 space-y-2`,children:[i?i.pythonAvailable?(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-text`,children:[(0,J.jsx)(T,{size:13,className:`text-accent-green`}),e(`stt.setup.pythonOk`,{version:(i.pythonVersion||``).replace(/^Python\s*/i,``)||i.pythonPath||`Python`}),i.pythonPath?(0,J.jsx)(`code`,{className:`text-badge text-dark-muted`,children:i.pythonPath}):null]}):(0,J.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,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red`,children:[(0,J.jsx)(O,{size:13}),e(`stt.setup.pythonMissing`)]}),(0,J.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,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted`,children:[(0,J.jsx)(L,{size:13,className:`animate-spin`}),e(`stt.setup.envChecking`)]}),i&&!i.pipAvailable&&(0,J.jsxs)(`div`,{className:`rounded-md border border-accent-red/30 bg-accent-red/5 px-2.5 py-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red`,children:[(0,J.jsx)(O,{size:13}),e(`stt.setup.pipMissing`)]}),(0,J.jsxs)(`div`,{className:`mt-1.5`,children:[(0,J.jsx)(`div`,{className:`text-badge text-dark-muted mb-1`,children:e(`stt.setup.pipGuide`)}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.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:[i.pythonPath||`python`,` -m ensurepip --upgrade`]}),(0,J.jsx)(`button`,{className:`btn btn-ghost !py-1 !px-2 text-xs`,onClick:()=>C(`${i.pythonPath||`python`} -m ensurepip --upgrade`),children:(0,J.jsx)(j,{size:12})})]})]})]})]})]}),(I||!!F)&&(0,J.jsx)(`div`,{className:`px-1`,children:(0,J.jsx)(B,{variant:`secondary`,size:`sm`,leftIcon:(0,J.jsx)(n,{size:13,"aria-hidden":`true`}),onClick:ie,children:e(`stt.setup.askAi`)})}),(0,J.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-dark-text`,children:[(0,J.jsx)(w,{size:14,className:`text-accent-blue`}),e(`stt.setup.defaultLang`)]}),(0,J.jsx)(`p`,{className:`mt-1 text-meta text-dark-muted`,children:e(`stt.setup.defaultLangHint`)}),(0,J.jsxs)(`div`,{className:`mt-2 flex items-center gap-2`,children:[(0,J.jsx)(`select`,{value:m,onChange:e=>g(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:be.map(e=>(0,J.jsx)(`option`,{value:e.code,children:e.label},e.code))}),(0,J.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-meta text-dark-muted`,children:[(0,J.jsx)(E,{size:11}),e(`stt.setup.modelForLang`,{lang:ne.label,model:te})]})]})]}),P(),(0,J.jsx)(He,{}),D&&(0,J.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-blue font-medium`,children:[(0,J.jsx)(L,{size:13,className:`animate-spin`}),e(`stt.setup.installing`),(0,J.jsx)(`span`,{className:`text-dark-muted font-normal`,children:`(faster-whisper)`})]}),(0,J.jsx)(`button`,{className:`btn btn-danger !py-1 !px-2 text-xs`,onClick:()=>void S(),children:e(`stt.setup.cancel`)})]}),(0,J.jsx)(`div`,{ref:p,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,J.jsx)(`span`,{className:`text-dark-muted/70`,children:e(`stt.setup.logWaiting`)}):s.logs.join(`
|
|
4
|
+
`)})]}),!D&&s.status&&s.status!==`done`&&(0,J.jsxs)(`div`,{className:`rounded-lg border border-accent-red/30 bg-accent-red/5 p-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red font-medium`,children:[(0,J.jsx)(O,{size:13}),s.status===`timeout`?e(`stt.setup.installTimeout`):s.status===`cancelled`?e(`stt.setup.installCancelled`):e(`stt.setup.installFailed`)]}),s.error?(0,J.jsx)(`p`,{className:`mt-1 text-xs text-accent-red/90 break-all`,children:s.error}):null,s.manualCommand&&(0,J.jsxs)(`div`,{className:`mt-2`,children:[(0,J.jsxs)(`div`,{className:`text-badge text-dark-muted mb-1 flex items-center gap-1`,children:[(0,J.jsx)(a,{size:11}),e(`stt.setup.manualCommand`)]}),(0,J.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,J.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,J.jsxs)(`button`,{className:`btn btn-ghost !py-1 !px-2 text-xs shrink-0`,onClick:()=>C(s.manualCommand),children:[(0,J.jsx)(j,{size:12}),e(`stt.setup.copyCommand`)]})]})]})]}),!D&&s.status===`done`&&!N&&(0,J.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,J.jsx)(T,{size:14}),e(`stt.setup.installDone`)]}),!D&&s.status===`done`&&N&&(0,J.jsxs)(`div`,{className:`rounded-lg border border-accent-orange/30 bg-accent-orange/5 p-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-orange font-medium`,children:[(0,J.jsx)(O,{size:13}),e(`stt.setup.installDoneButMissing`)]}),A?.error&&(0,J.jsx)(`p`,{className:`mt-1 text-xs text-accent-orange/90 break-all`,children:A.error}),(0,J.jsx)(`p`,{className:`mt-1 text-meta text-dark-muted`,children:e(`stt.setup.installDoneButMissingHint`)})]}),!D&&re&&t&&!t.backends.en?.installed&&(0,J.jsx)(`p`,{className:`text-meta text-dark-muted px-1`,children:e(`stt.setup.chooseHint`)})]})}function We(){let{t:e}=R(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)({running:!1,logs:[]}),[a,o]=(0,q.useState)(!1),[s,c]=(0,q.useState)(fe),l=(0,q.useRef)(null),u=(0,q.useRef)(r),d=(0,q.useRef)(null);(0,q.useEffect)(()=>{u.current=r},[r]),(0,q.useEffect)(()=>{c(me())},[]),(0,q.useEffect)(()=>()=>{l.current&&window.clearTimeout(l.current)},[]),(0,q.useEffect)(()=>{d.current&&(d.current.scrollTop=d.current.scrollHeight)},[r.logs]);let f=(0,q.useCallback)(async()=>{o(!0);let e=await V.tts.status();e.success&&e.data?n(e.data):e.error&&z.error(e.error),o(!1)},[]);(0,q.useEffect)(()=>{f()},[f]);let p=(0,q.useCallback)(async()=>{let e=await V.tts.installStatus();if(!e.success||!e.data)return;let t=u.current.running;i(e.data),e.data.running?l.current=window.setTimeout(()=>void p(),1e3):t&&f()},[f]),m=(0,q.useCallback)(async()=>{let t=await V.tts.install();t.success&&t.data?.started?(i({running:!0,logs:[],status:`running`}),p()):t.data?.alreadyRunning?(z.info(e(`tts.setup.jobInProgress`)),p()):i({running:!1,logs:[],status:`error`,error:t.error||t.data?.error||`install failed`,manualCommand:t.data?.manualCommand})},[p,e]),h=(0,q.useCallback)(async()=>{await V.tts.cancelInstall(),p()},[p]),g=(0,q.useCallback)(t=>{navigator.clipboard.writeText(t).then(()=>z.success(e(`tts.setup.copySuccess`)),()=>z.error(e(`tts.setup.copyFailed`)))},[e]),_=(0,q.useCallback)(e=>{c(pe(e))},[]),x=t?.engine,S=t?.service===`ok`,C=x?.voiceNames??[],w=t?.env,E=w?!w.pythonAvailable:!1,D=t?.missingWeights??x?.missingWeights??[];return(0,J.jsxs)(`div`,{className:`space-y-3`,children:[(0,J.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3 space-y-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,J.jsx)(`span`,{className:`text-sm font-medium`,children:e(`tts.setup.engine`)}),((e,t)=>(0,J.jsxs)(`span`,{className:W(`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,J.jsx)(T,{size:12}):(0,J.jsx)(k,{size:12}),t]}))(S,e(S?`tts.setup.ready`:`tts.setup.notReady`))]}),(0,J.jsx)(`button`,{type:`button`,className:`p-1.5 rounded-md hover:bg-dark-hover text-dark-muted`,onClick:()=>void f(),disabled:a,title:e(`tts.setup.refresh`),children:(0,J.jsx)(M,{size:14,className:W(a&&`animate-spin`)})})]}),t?.error&&(0,J.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-accent-red`,children:[(0,J.jsx)(O,{size:12,className:`mt-0.5 shrink-0`}),(0,J.jsx)(`span`,{className:`break-all`,children:t.error})]}),D.length>0&&(0,J.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tts.setup.missingWeights`,{files:D.join(`、`)})}),E&&(0,J.jsx)(`div`,{className:`text-xs text-accent-yellow`,children:e(`tts.setup.envMissing`)}),x?.model&&(0,J.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tts.setup.model`,{model:x.model})}),r.running?(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(L,{size:14,className:`animate-spin text-accent-blue`}),(0,J.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[e(`tts.setup.installing`),r.phase?` · ${r.phase}`:``]}),(0,J.jsx)(`button`,{type:`button`,className:`ms-auto text-xs text-accent-red hover:underline`,onClick:()=>void h(),children:e(`tts.setup.cancel`)})]}):(0,J.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 m(),disabled:S,children:[(0,J.jsx)(b,{size:14}),e(S?`tts.setup.installed`:`tts.setup.install`)]}),r.status===`error`&&r.error&&!r.running&&(0,J.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-accent-red`,children:[(0,J.jsx)(O,{size:12,className:`mt-0.5 shrink-0`}),(0,J.jsx)(`span`,{className:`break-all`,children:r.error})]}),r.manualCommand&&!r.running&&(0,J.jsxs)(`div`,{className:`rounded-md bg-dark-bg border border-dark-border p-2 space-y-1`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,J.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-dark-muted`,children:[(0,J.jsx)(v,{size:12}),e(`tts.setup.manualCommand`)]}),(0,J.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 text-xs text-accent-blue hover:underline`,onClick:()=>g(r.manualCommand),children:[(0,J.jsx)(j,{size:12}),e(`tts.setup.copy`)]})]}),(0,J.jsx)(`code`,{className:`block text-xs break-all text-dark-text`,children:r.manualCommand})]}),r.logs.length>0&&(0,J.jsx)(`div`,{ref:d,className:`max-h-40 overflow-auto rounded-md bg-dark-bg border border-dark-border p-2`,children:r.logs.map((e,t)=>(0,J.jsx)(`div`,{className:`text-xs font-mono text-dark-muted whitespace-pre-wrap break-all`,children:e},t))})]}),(0,J.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3 space-y-3`,children:[(0,J.jsxs)(`label`,{className:`flex items-center justify-between gap-3 cursor-pointer`,children:[(0,J.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-sm`,children:[(0,J.jsx)(ne,{size:14,className:`text-accent-blue`}),e(`tts.setup.enabled`)]}),(0,J.jsx)(`input`,{type:`checkbox`,className:`accent-accent-blue`,checked:s.enabled,onChange:e=>_({enabled:e.target.checked})})]}),(0,J.jsxs)(`label`,{className:W(`flex items-center justify-between gap-3 cursor-pointer`,!s.enabled&&`opacity-50`),children:[(0,J.jsxs)(`span`,{className:`text-sm`,children:[e(`tts.setup.autoPlay`),(0,J.jsx)(`span`,{className:`block text-xs text-dark-muted`,children:e(`tts.setup.autoPlayHint`)})]}),(0,J.jsx)(`input`,{type:`checkbox`,className:`accent-accent-blue`,checked:s.autoPlay,disabled:!s.enabled,onChange:e=>_({autoPlay:e.target.checked})})]}),(0,J.jsxs)(`div`,{className:W(`flex items-center justify-between gap-3`,!s.enabled&&`opacity-50`),children:[(0,J.jsx)(`span`,{className:`text-sm`,children:e(`tts.setup.voice`)}),(0,J.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=>_({voice:e.target.value||null}),children:[(0,J.jsx)(`option`,{value:``,children:e(`tts.setup.voiceAuto`)}),C.map(e=>(0,J.jsx)(`option`,{value:e,children:e},e))]})]}),(0,J.jsxs)(`label`,{className:W(`flex items-center justify-between gap-3`,!s.enabled&&`opacity-50`),children:[(0,J.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-sm`,children:[(0,J.jsx)(y,{size:14,className:`text-accent-blue`}),e(`tts.setup.speed`)]}),(0,J.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,J.jsx)(`input`,{type:`range`,min:ve,max:2,step:.1,value:s.speed,disabled:!s.enabled,onChange:e=>_({speed:Number(e.target.value)})}),(0,J.jsx)(`span`,{className:`text-xs text-dark-muted w-8 text-end`,children:s.speed.toFixed(1)})]})]})]})]})}function Y({label:e,value:t,onChange:n,min:r,max:i,disabled:a,envOverridden:o,hint:s}){return(0,J.jsxs)(`div`,{className:`mb-3`,children:[(0,J.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-muted mb-1`,children:[e,o&&(0,J.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-accent-yellow`,title:s,children:[(0,J.jsx)(O,{size:12}),` env`]})]}),(0,J.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 Ge(){let{t:e}=R(),[t,n]=(0,q.useState)(!0),[r,i]=(0,q.useState)(!1),[a,o]=(0,q.useState)({}),[s,c]=(0,q.useState)(!1),[l,u]=(0,q.useState)(``),[d,f]=(0,q.useState)(null),[p,m]=(0,q.useState)(!1),[h,g]=(0,q.useState)(``),[_,v]=(0,q.useState)(``),[y,b]=(0,q.useState)(``),[x,S]=(0,q.useState)(``),[C,w]=(0,q.useState)(``),T=(0,q.useCallback)(async()=>{n(!0);try{let e=await V.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??``),f(e.data.stats??null),m(typeof t.artifactOffload==`boolean`?t.artifactOffload:e.data.effective.offload),g(typeof t.artifactDir==`string`?t.artifactDir:``),v(t.artifactMaxTotalMb==null?``:String(t.artifactMaxTotalMb)),b(t.artifactTtlDays==null?``:String(t.artifactTtlDays)),S(t.outboundToolBytes==null?``:String(t.outboundToolBytes)),w(t.turnBudgetTokens==null?``:String(t.turnBudgetTokens))}}catch{}n(!1)},[]);return(0,q.useEffect)(()=>{T()},[T]),t?(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,J.jsx)(L,{size:14,className:`animate-spin`}),e(`common.loading`)]}):(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.contextOffload.desc`)}),(0,J.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,J.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.contextOffload.enableLabel`),(0,J.jsxs)(`span`,{className:`ms-2 text-xs ${s?`text-accent-green`:`text-dark-muted`}`,children:[`(`,e(`settings.contextOffload.currently`),`: `,s?`ON`:`OFF`,`)`]})]}),(0,J.jsx)(`button`,{role:`switch`,"aria-checked":p,onClick:()=>m(!p),className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${p?`bg-accent-green`:`bg-dark-border`}`,children:(0,J.jsx)(`span`,{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${p?`translate-x-6`:`translate-x-1`}`})})]}),(0,J.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-x-6`,children:[(0,J.jsx)(Y,{label:e(`settings.contextOffload.maxTotalMb`),value:_,onChange:v,min:1,envOverridden:a.artifactMaxTotalMb}),(0,J.jsx)(Y,{label:e(`settings.contextOffload.ttlDays`),value:y,onChange:b,min:1,max:365,envOverridden:a.artifactTtlDays}),(0,J.jsx)(Y,{label:`${e(`settings.contextOffload.outboundBytes`)} (${e(`settings.contextOffload.optional`)})`,value:x,onChange:S,min:1024,envOverridden:a.outboundToolBytes}),(0,J.jsx)(Y,{label:e(`settings.contextOffload.turnBudget`),value:C,onChange:w,min:1e3,envOverridden:a.turnBudgetTokens})]}),(0,J.jsxs)(`div`,{className:`mb-3`,children:[(0,J.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,J.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-accent-yellow`,children:[(0,J.jsx)(O,{size:12}),` env`]})]}),(0,J.jsx)(`input`,{type:`text`,value:h,onChange:e=>g(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,J.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,J.jsx)(B,{variant:`accent`,size:`sm`,onClick:async()=>{i(!0);try{let t={artifactOffload:p};a.artifactDir||(t.artifactDir=h.trim()||null),!a.artifactMaxTotalMb&&_.trim()&&(t.artifactMaxTotalMb=parseInt(_,10)),!a.artifactTtlDays&&y.trim()&&(t.artifactTtlDays=parseInt(y,10)),!a.outboundToolBytes&&x.trim()&&(t.outboundToolBytes=parseInt(x,10)),!a.turnBudgetTokens&&C.trim()&&(t.turnBudgetTokens=parseInt(C,10));for(let n of[`artifactMaxTotalMb`,`artifactTtlDays`,`outboundToolBytes`,`turnBudgetTokens`])if(n in t&&(isNaN(t[n])||t[n]<=0)){z.error(e(`settings.contextOffload.invalidNumber`)),i(!1);return}let n=await V.config.context.save(t);n.success?(z.success(e(`settings.contextOffload.saved`)),await T()):z.error(n.error||e(`settings.contextOffload.saveFailed`))}catch(e){z.error(e instanceof Error?e.message:String(e))}i(!1)},loading:r,disabled:t,children:e(`common.save`)}),(0,J.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`settings.contextOffload.envHint`)})]}),d&&d.count>0&&(0,J.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 X=`dream-policy.json`;async function Ke(){let e=await V.config.files.list();if(!e?.success)throw Error(e?.error||`读取配置目录失败`);if(!(e.data??[]).some(e=>e.name===X))return null;let t=await V.config.files.read(X);if(!t?.success)throw Error(t?.error||`读取 ${X} 失败`);let n=(t.data?.content??``).replace(/^\uFEFF/,``).trim();if(!n)return{};let r=JSON.parse(n);return r&&typeof r==`object`?r:{}}function qe(){let[e,t]=(0,q.useState)(!1),[n,r]=(0,q.useState)({start:2,end:6}),[i,a]=(0,q.useState)(!1),[o,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(null),u=(0,q.useCallback)(async()=>{l(null);try{let e=await Ke();a(e===null),t(e?.enabled===!0);let n=e?.quietHours?.start,i=e?.quietHours?.end;r({start:typeof n==`number`?n:2,end:typeof i==`number`?i:6})}catch(e){l(e instanceof Error?e.message:String(e))}},[]);(0,q.useEffect)(()=>{u()},[u]);let d=async()=>{let r=!e,i=e;t(r),s(!0),l(null);try{let e={...await Ke()??{},enabled:r,quietHours:{start:n?.start??2,end:n?.end??6}},t=await V.config.files.write(X,`${JSON.stringify(e,null,2)}\n`);if(!t?.success)throw Error(t?.error||`写入失败`);a(!1)}catch(e){t(i),l(e instanceof Error?e.message:String(e))}finally{s(!1)}};return(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`p`,{className:`text-sm text-dark-muted mb-3`,children:[`每天 03:00 由定时任务调用 `,(0,J.jsx)(`code`,{className:`font-mono text-xs`,children:`/memory dream auto`}),`:先判断「该不该跑」,不满足条件就一行说明原因,不花模型调用。关掉只影响**自动**整理, 手动 `,(0,J.jsx)(`code`,{className:`font-mono text-xs`,children:`/memory dream`}),` 仍然可用。`]}),(0,J.jsxs)(`label`,{className:`flex items-center justify-between mb-2 cursor-pointer`,children:[(0,J.jsxs)(`span`,{className:`text-sm`,children:[`自动整理`,(0,J.jsxs)(`span`,{className:`ms-2 text-xs ${e?`text-accent-green`:`text-dark-muted`}`,children:[`(`,e?`ON`:`OFF`,`)`]})]}),(0,J.jsx)(`button`,{role:`switch`,"aria-checked":e,disabled:o,onClick:()=>void d(),className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors disabled:opacity-50 ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,J.jsx)(`span`,{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${e?`translate-x-6`:`translate-x-1`}`})})]}),(0,J.jsxs)(`p`,{className:`text-xs text-dark-muted`,children:[`安静时段 `,n?.start??2,`:00–`,n?.end??6,`:00 · 用户空闲 ≥15 分钟 · 冷却 30 分钟 · 每天最多 4 次`,i?` · 策略文件尚未创建,打开开关即生成`:``]}),c&&(0,J.jsxs)(`p`,{className:`mt-2 text-xs text-accent-red`,children:[`保存失败:`,c,`(开关已回滚,文件未被改动)`]})]})}var Je=[32e3,64e3,128e3,256e3,512e3,1e6,2e6],Ye=1e3;function Xe(){let{t:e}=R(),t=U(e=>e.maxContextTokens),n=U(e=>e.setMaxContextTokens),r=U(e=>e.bumpContextWindowRefresh),[i,a]=(0,q.useState)(String(t)),[o,s]=(0,q.useState)(null),[c,l]=(0,q.useState)(!0),[u,d]=(0,q.useState)(!1),f=(0,q.useCallback)(async()=>{l(!0);try{let e=await V.config.provider.get();if(e.success&&e.data){s(e.data.defaultProvider??null);let t=e.data.active?.contextWindow;typeof t==`number`&&t>=Ye&&(n(t),a(String(t)))}}catch{}l(!1)},[n]);(0,q.useEffect)(()=>{f()},[f]);let p=(0,q.useCallback)(async t=>{let n=Number.parseInt(t,10);if(!Number.isFinite(n)||n<Ye)z.error(e(`settings.contextWindow.invalid`));else if(!o)z.error(e(`settings.contextWindow.noProvider`));else{d(!0);try{let t=await V.config.provider.save({provider:o,contextWindow:n});t.success?(z.success(e(`settings.contextWindow.saved`)),r(),await f()):z.error(t.error||e(`settings.contextWindow.saveFailed`))}catch(e){z.error(e instanceof Error?e.message:String(e))}d(!1)}},[o,f,r,e]),m=e=>e>=1e6?`${(e/1e6).toFixed(0)}M`:`${(e/1e3).toFixed(0)}K`;return c?(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,J.jsx)(L,{size:14,className:`animate-spin`}),e(`common.loading`)]}):(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.contextWindow.desc`)}),(0,J.jsxs)(`div`,{className:`flex items-center gap-3 mb-3`,children:[(0,J.jsx)(`input`,{type:`number`,"aria-label":e(`settings.contextWindow.label`),"data-testid":`context-window-input`,value:i,onChange:e=>a(e.target.value),min:Ye,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,J.jsx)(`span`,{className:`text-sm text-dark-muted`,children:e(`settings.contextWindow.tokens`)}),(0,J.jsx)(B,{variant:`accent`,size:`sm`,onClick:()=>void p(i),loading:u,"data-testid":`context-window-apply`,children:e(`settings.contextWindow.apply`)})]}),(0,J.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Je.map(e=>(0,J.jsx)(`button`,{type:`button`,"data-testid":`context-window-preset-${e}`,onClick:()=>{a(String(e)),p(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:m(e)},e))}),(0,J.jsxs)(`p`,{className:`text-xs text-dark-muted mt-2`,children:[e(`settings.contextWindow.current`),`:`,` `,(0,J.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,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.contextWindow.catalogHint`)})]})}var Ze=`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,J.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,J.jsx)(`span`,{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${e?`translate-x-6`:`translate-x-1`}`})})}function Qe(){let{t:e}=R(),[t,n]=(0,q.useState)(!0),[r,i]=(0,q.useState)(!1),[a,o]=(0,q.useState)(null),[s,c]=(0,q.useState)(`none`),[l,u]=(0,q.useState)(``),[d,f]=(0,q.useState)(!0),[p,m]=(0,q.useState)(!1),[h,g]=(0,q.useState)(!1),_=(0,q.useCallback)(async()=>{n(!0);try{let e=await V.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??``),f(n.networkAccess!==!1),m(n.excludeTmpdirEnvVar===!0),g(n.excludeSlashTmp===!0)}}catch{}n(!1)},[]);(0,q.useEffect)(()=>{_()},[_]);let v=l===`danger-full-access`,y=s!==`none`&&l!==``&&!v,b=y&&l===`workspace-write`,x=e=>{e?(c(`auto`),u(l===`read-only`||l===`workspace-write`?l:`workspace-write`)):(c(`none`),u(``))},S=e=>{u(e),e===`danger-full-access`&&c(`none`)},C=async()=>{if(s!==`none`&&l===``)z.error(e(`settings.sandbox.needPolicy`));else{i(!0);try{let t=await V.config.sandbox.save({backend:s,policy:s===`none`?null:l,networkAccess:d,excludeTmpdirEnvVar:p,excludeSlashTmp:h});t.success?(z.success(e(`settings.sandbox.saved`)),await _()):z.error(t.error||e(`settings.sandbox.saveFailed`))}catch(e){z.error(e instanceof Error?e.message:String(e))}i(!1)}};if(t)return(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,J.jsx)(L,{size:14,className:`animate-spin`}),e(`common.loading`)]});let w=a?.status,E=w?.backendId===`docker`,D=w!==void 0&&w.status===`enabled`&&w.backendId===null,A=w!==void 0&&w.status===`enabled`&&w.backendId!==null||E,j=A?T:w?.status===`invalid`?k:O,M=A?`text-accent-green`:w?.status===`invalid`?`text-accent-red`:D?`text-accent-yellow`:`text-dark-muted`,N=E?e(`settings.sandbox.statusDocker`):D?e(`settings.sandbox.statusNoBackend`):w?.status===`enabled`?e(`settings.sandbox.statusOn`,{backend:w.backendId??`—`}):w?.status===`invalid`?e(`settings.sandbox.statusInvalid`):e(`settings.sandbox.statusOff`);return(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.sandbox.desc`)}),(0,J.jsxs)(`div`,{className:`mb-4 rounded-lg border border-dark-border bg-dark-bg/40 px-3 py-2.5`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-sm ${M}`,children:[(0,J.jsx)(j,{size:14}),(0,J.jsx)(`span`,{children:N}),(0,J.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[`(`,e(`settings.sandbox.restartNotice`),`)`]})]}),w?.policyDescription&&(0,J.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:w.policyDescription}),w?.reason&&(0,J.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:w.reason}),w?.error&&(0,J.jsx)(`p`,{className:`mt-1 text-xs text-accent-red whitespace-pre-wrap`,children:w.error}),w&&w.capabilityGaps.length>0&&(0,J.jsx)(`p`,{className:`mt-1 text-xs text-accent-yellow`,children:e(`settings.sandbox.gaps`,{fields:w.capabilityGaps.join(`, `)})})]}),a?.envOverride.active&&(0,J.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,J.jsx)(O,{size:12,className:`mt-0.5 shrink-0`}),a.envOverride.note||e(`settings.sandbox.envOverride`,{value:a.envOverride.value})]}),a?.status.platform===`win32`&&(0,J.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,J.jsx)(O,{size:12,className:`mt-0.5 shrink-0`}),e(`settings.sandbox.win32Warn`)]}),a?.status.legacySource&&(0,J.jsx)(`p`,{className:`mb-3 text-xs text-accent-blue`,children:e(`settings.sandbox.legacySource`)}),a?.status.bothPresent&&(0,J.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,J.jsx)(O,{size:12,className:`mt-0.5 shrink-0`}),e(`settings.sandbox.bothPresent`)]}),(0,J.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,J.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.sandbox.enableLabel`),(0,J.jsxs)(`span`,{className:`ms-2 text-xs ${y?`text-accent-green`:`text-dark-muted`}`,children:[`(`,e(`settings.sandbox.currently`),`: `,y?`ON`:`OFF`,`)`]})]}),(0,J.jsx)(Z,{checked:y,onChange:x})]}),(0,J.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-x-6`,children:[(0,J.jsxs)(`div`,{className:`mb-3`,children:[(0,J.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:e(`settings.sandbox.backend`)}),(0,J.jsxs)(`select`,{value:s,onChange:e=>c(e.target.value),className:`w-full ${Ze}`,children:[(0,J.jsx)(`option`,{value:`auto`,children:e(`settings.sandbox.backendAuto`)}),(0,J.jsx)(`option`,{value:`bubblewrap`,children:e(`settings.sandbox.backendBubblewrap`)}),(0,J.jsx)(`option`,{value:`macos-sandbox`,children:e(`settings.sandbox.backendMacos`)}),(0,J.jsx)(`option`,{value:`windows-mxc`,children:e(`settings.sandbox.backendWindows`)}),(0,J.jsx)(`option`,{value:`none`,children:e(`settings.sandbox.backendNone`)})]})]}),(0,J.jsxs)(`div`,{className:`mb-3`,children:[(0,J.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:e(`settings.sandbox.policy`)}),(0,J.jsxs)(`select`,{value:l,onChange:e=>S(e.target.value),disabled:s===`none`,className:`w-full ${Ze}`,children:[(0,J.jsx)(`option`,{value:``,children:e(`settings.sandbox.policyEmpty`)}),(0,J.jsx)(`option`,{value:`read-only`,children:e(`settings.sandbox.policyReadOnly`)}),(0,J.jsx)(`option`,{value:`workspace-write`,children:e(`settings.sandbox.policyWorkspaceWrite`)}),(0,J.jsx)(`option`,{value:`danger-full-access`,children:e(`settings.sandbox.policyDanger`)})]}),v&&(0,J.jsx)(`p`,{className:`mt-1 text-xs text-accent-yellow`,children:e(`settings.sandbox.policyDangerHint`)})]})]}),(0,J.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,J.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.sandbox.networkAccess`),(0,J.jsx)(`span`,{className:`block text-xs text-dark-muted mt-0.5`,children:e(`settings.sandbox.networkAccessHint`)})]}),(0,J.jsx)(Z,{checked:d,onChange:f,disabled:!y})]}),b&&(0,J.jsxs)(`div`,{className:`mb-4 rounded-lg border border-dark-border px-3 py-2.5`,children:[(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mb-2`,children:e(`settings.sandbox.advancedHint`)}),(0,J.jsxs)(`label`,{className:`flex items-center justify-between mb-2 cursor-pointer`,children:[(0,J.jsx)(`span`,{className:`text-sm`,children:e(`settings.sandbox.excludeTmpdir`)}),(0,J.jsx)(Z,{checked:p,onChange:m})]}),(0,J.jsxs)(`label`,{className:`flex items-center justify-between cursor-pointer`,children:[(0,J.jsx)(`span`,{className:`text-sm`,children:e(`settings.sandbox.excludeSlashTmp`)}),(0,J.jsx)(Z,{checked:h,onChange:g})]})]}),(0,J.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,J.jsx)(B,{variant:`accent`,size:`sm`,onClick:C,loading:r,children:e(`common.save`)}),(0,J.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,J.jsxs)(`div`,{className:`rounded-xl border border-dark-border bg-dark-bg/40 p-4 mb-4`,children:[(0,J.jsxs)(`h3`,{className:`font-medium mb-3 flex items-center gap-2`,children:[(0,J.jsx)(e,{size:16,className:t}),n]}),r]})}var $e=6e4,et=0,$;async function tt(e={}){if(!e.force&&$&&Date.now()-et<$e)return{draft:$};try{let e=await V.profile.draft();return e.success&&e.data?($=e.data,et=Date.now(),{draft:$}):{error:e.error||`profile draft failed`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}}function nt(e){return e?e.candidates.filter(e=>e.verdict===`adopt`).length:0}function rt(){$=void 0,et=0}var it={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 at(e){return e.verdict===`adopt`?`adopt`:e.reason?it[e.reason]:`adopt`}function ot({onApply:e,applyBusy:t,disabled:r}){let{t:i}=R(),[a,o]=(0,q.useState)(void 0),[s,c]=(0,q.useState)(!1),[l,u]=(0,q.useState)(null),d=async(e={})=>{if(s)return;c(!0);let{draft:t,error:n}=await tt({force:e.force});t?o(t):e.silent||z.error(n||i(`settings.profile.draft.loadFailed`)),c(!1)};(0,q.useEffect)(()=>{d({silent:!0})},[]);let f=async(e,t)=>{let n=e.itemId;if(!l){u(n);try{let r=await V.profile.ignore({itemId:n,text:t,...e.subject?{subject:e.subject}:{},...e.layer?{layer:e.layer}:{}});r.success?(z.success(i(`settings.profile.draft.ignoreOk`)),await d({force:!0})):z.error(r.error||i(`settings.profile.draft.actionFailed`))}catch(e){z.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 V.profile.unignore({itemId:t,...e.fingerprint?{fingerprint:e.fingerprint}:{}});n.success?(z.success(i(`settings.profile.draft.restoreOk`)),await d({force:!0})):z.error(n.error||i(`settings.profile.draft.actionFailed`))}catch(e){z.error(`${i(`settings.profile.draft.actionFailed`)}: ${e instanceof Error?e.message:String(e)}`)}u(null)}},m=(0,q.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=nt(a);return(0,J.jsxs)(`div`,{className:`mt-4 border-t border-dark-border pt-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsxs)(`div`,{className:`text-xs font-medium text-dark-text flex items-center gap-1.5`,children:[(0,J.jsx)(n,{size:13,className:`text-accent-purple shrink-0`}),i(`settings.profile.draft.title`)]}),(0,J.jsx)(`div`,{className:`text-meta text-dark-muted mt-0.5 leading-relaxed`,children:i(`settings.profile.draft.hint`)})]}),(0,J.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,J.jsxs)(`div`,{className:`mt-3`,children:[h>0&&(0,J.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,J.jsx)(n,{size:12,className:`mt-[2px] shrink-0 text-accent-green`}),(0,J.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,J.jsxs)(`div`,{className:`mb-2 flex items-start gap-1.5 text-meta text-accent-yellow`,children:[(0,J.jsx)(O,{size:12,className:`mt-[1px] shrink-0`}),(0,J.jsx)(`span`,{children:i(`settings.profile.draft.memoryUnreadable`)})]}),m.length===0?(0,J.jsx)(`p`,{className:`text-meta text-dark-muted`,children:i(`settings.profile.draft.empty`)}):(0,J.jsx)(`ul`,{className:`space-y-1.5`,children:m.map(e=>{let t=at(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,J.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,J.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,J.jsx)(`div`,{className:`text-xs text-dark-text break-words`,children:e.text}),(0,J.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,J.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,J.jsx)(I,{size:11}),i(`settings.profile.draft.ignore`)]})]},`${e.source.itemId}:${e.text}`)})}),h>0&&(0,J.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 flex-wrap`,children:[(0,J.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,J.jsx)(`span`,{className:`text-meta text-dark-muted`,children:i(`settings.profile.draft.applyHint`)})]}),a.ignores.length>0&&(0,J.jsxs)(`div`,{className:`mt-3`,children:[(0,J.jsx)(`div`,{className:`text-meta text-dark-muted mb-1`,children:i(`settings.profile.draft.ignoredTitle`)}),(0,J.jsx)(`ul`,{className:`space-y-1`,children:a.ignores.slice(0,8).map(e=>(0,J.jsxs)(`li`,{className:`flex items-start gap-2 px-2.5 py-1 rounded-lg bg-dark-hover`,children:[(0,J.jsx)(`span`,{className:`min-w-0 flex-1 text-badge text-dark-muted break-words line-through`,children:e.text}),(0,J.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 st=8e3,ct=[`assistant`,`pet`,`lover`];function lt(){let[e,t]=G(),{t:n}=R(),[r,i]=(0,q.useState)(void 0),[a,o]=(0,q.useState)(!0),[s,c]=(0,q.useState)(!1),[l,u]=(0,q.useState)(!1),[f,p]=(0,q.useState)(``),[m,h]=(0,q.useState)(``),[_,v]=(0,q.useState)(!1),y=(0,q.useCallback)(async()=>{o(!0);try{let e=await V.profile.get();e.success&&e.data?i(e.data):z.error(e.error||n(`settings.profile.loadFailed`))}catch(e){z.error(`${n(`settings.profile.loadFailed`)}: ${e instanceof Error?e.message:String(e)}`)}o(!1)},[n]);(0,q.useEffect)(()=>{y()},[y]);let b=r?.maxBytes??st,x=(0,q.useMemo)(()=>{let e=f.trim(),t=m.trim(),n=e?`---\nname: ${e}\n---\n\n${t}\n`:t?`${t}\n`:``;return new TextEncoder().encode(n).length},[f,m]),C=async()=>{if(!r||s)return;let e=!r.enabled;c(!0),i({...r,enabled:e});try{let t=await V.config.profile.set({enabled:e});t.success?Ie():(i(t=>t&&{...t,enabled:!e}),z.error(t.error||n(`settings.profile.saveFailed`)))}catch(t){i(t=>t&&{...t,enabled:!e}),z.error(`${n(`settings.profile.saveFailed`)}: ${t instanceof Error?t.message:String(t)}`)}c(!1)},w=async()=>{if(!_){v(!0);try{let e=await V.profile.raw();e.success&&e.data?(p(e.data.name??``),h(e.data.content),u(!0)):z.error(e.error||n(`settings.profile.loadFailed`))}catch(e){z.error(`${n(`settings.profile.loadFailed`)}: ${e instanceof Error?e.message:String(e)}`)}v(!1)}},T=()=>{u(!1),p(``),h(``)},E=async e=>{let r=n(`settings.profile.templates.${e}Body`),i=m.trim();(!i||i===r.trim()||await t({message:n(`settings.profile.templates.overwriteConfirm`)}))&&h(r)},D=async()=>{if(!s){if(!f.trim()&&!m.trim())z.error(n(`settings.profile.empty`));else{c(!0);try{let e=await V.profile.set({name:f.trim()?f.trim():null,body:m});e.success?(z.success(n(`settings.profile.saveOk`)),u(!1),p(``),h(``),rt(),Ie(),await y()):z.error(e.error||n(`settings.profile.saveFailed`))}catch(e){z.error(`${n(`settings.profile.saveFailed`)}: ${e instanceof Error?e.message:String(e)}`)}c(!1)}}},k=async()=>{if(!s&&await t({message:n(`settings.profile.clearConfirm`),variant:`danger`})){c(!0);try{let e=await V.profile.clear();e.success?(z.success(n(`settings.profile.clearOk`)),T(),rt(),Ie(),await y()):z.error(e.error||n(`settings.profile.clearFailed`))}catch(e){z.error(`${n(`settings.profile.clearFailed`)}: ${e instanceof Error?e.message:String(e)}`)}c(!1)}},A=async e=>{if(!_){v(!0);try{let t=await V.profile.raw();p(t.success&&t.data?t.data.name??``:``),h(e),u(!0)}catch(e){z.error(`${n(`settings.profile.loadFailed`)}: ${e instanceof Error?e.message:String(e)}`)}v(!1)}};return a?(0,J.jsx)(`div`,{className:`text-sm text-dark-muted`,children:n(`settings.profile.loading`)}):r?(0,J.jsxs)(J.Fragment,{children:[e,(0,J.jsxs)(`div`,{className:`flex items-start justify-between gap-3 py-1 mb-3`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsxs)(`div`,{className:`text-sm text-dark-text font-medium flex items-center gap-2`,children:[(0,J.jsx)(F,{size:15,className:`text-accent-purple shrink-0`}),n(`settings.profile.enabled`)]}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-1`,children:n(`settings.profile.enabledHint`)})]}),(0,J.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":r.enabled,"aria-label":n(`settings.profile.enabled`),disabled:s,onClick:()=>void C(),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,J.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,J.jsx)(`p`,{className:`text-xs text-dark-muted mb-4 leading-relaxed`,children:n(`settings.profile.hint`)}),(0,J.jsxs)(`div`,{className:`mb-4`,children:[(0,J.jsxs)(`div`,{className:`text-xs font-medium text-dark-text mb-1.5 flex items-center gap-1.5`,children:[(0,J.jsx)(g,{size:13,className:`text-dark-muted`}),n(`settings.profile.path`)]}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,J.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,J.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,J.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,J.jsxs)(`div`,{className:`mt-1.5 flex items-start gap-1.5 text-meta text-accent-yellow`,children:[(0,J.jsx)(O,{size:12,className:`mt-[1px] shrink-0`}),(0,J.jsx)(`span`,{children:n(`settings.profile.truncated`)})]})]}),l?(0,J.jsxs)(`div`,{className:`border-t border-dark-border pt-3`,children:[(0,J.jsxs)(`div`,{className:`mb-4`,children:[(0,J.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1.5`,children:n(`settings.profile.templates.title`)}),(0,J.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:ct.map(e=>(0,J.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,J.jsx)(`div`,{className:`text-meta text-dark-muted mt-1.5 leading-relaxed`,children:n(`settings.profile.templates.hint`)})]}),(0,J.jsxs)(`label`,{className:`block mb-3`,children:[(0,J.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1`,children:n(`settings.profile.name`)}),(0,J.jsx)(`input`,{type:`text`,value:f,onChange:e=>p(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,J.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1`,children:n(`settings.profile.body`)}),(0,J.jsx)(`textarea`,{value:m,onChange:e=>h(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,J.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,J.jsxs)(`div`,{className:`flex items-center gap-2 mt-3`,children:[(0,J.jsx)(B,{variant:`accent`,size:`sm`,onClick:()=>void D(),loading:s,children:n(`settings.profile.save`)}),(0,J.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,J.jsxs)(`div`,{className:`border-t border-dark-border pt-3`,children:[r.preview?(0,J.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,J.jsx)(`p`,{className:`text-xs text-dark-muted mb-3`,children:n(`settings.profile.empty`)}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsxs)(`button`,{onClick:()=>void w(),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,J.jsx)(S,{size:13}),n(`settings.profile.edit`)]}),r.exists&&(0,J.jsxs)(`button`,{onClick:()=>void k(),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,J.jsx)(d,{size:13}),n(`settings.profile.clear`)]})]}),(0,J.jsx)(ot,{onApply:e=>void A(e),applyBusy:_,disabled:s})]})]}):(0,J.jsxs)(`button`,{onClick:()=>void y(),className:`text-sm text-accent-blue hover:underline`,children:[n(`settings.profile.loadFailed`),` — `,n(`common.retry`)]})}var ut=e=>new Promise(t=>setTimeout(t,e));function dt(){let{t:e}=R(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(!1),[a,o]=(0,q.useState)(null),[s,c]=(0,q.useState)(null),[l,u]=G(),d=(0,q.useCallback)(async()=>{let t=await V.system.network();return t.success&&t.data?(n(t.data),o(t.data.lastError)):o(t.error||e(`settings.network.loadFailed`)),t},[e]);(0,q.useEffect)(()=>{d()},[d]);let f=t?!t.loopbackOnly:!1,p=(0,q.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 V.system.setNetwork(a);if(!s.success)o(s.error||e(`settings.network.applyFailed`)),i(!1);else{z.info(e(a?`settings.network.enabledToast`:`settings.network.disabledToast`)),await ut(900);for(let e=0;e<8;e++){let e=await V.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 ut(600)}o(e(`settings.network.applyFailed`)),i(!1)}},[r,u,f,t,e]),m=(0,q.useCallback)(async e=>{await ge(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,J.jsxs)(J.Fragment,{children:[l,(0,J.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.network.description`)}),a&&(0,J.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,J.jsx)(O,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,J.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:a})]}),(0,J.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 ${h?`cursor-not-allowed opacity-60`:`cursor-pointer`}`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.network.toggleLabel`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.network.toggleHint`)})]}),(0,J.jsx)(ft,{checked:f,disabled:r||!t||!!h,onToggle:()=>void p(),label:e(`settings.network.toggleLabel`)})]}),r&&(0,J.jsx)(`p`,{className:`text-xs text-accent-blue mt-2`,children:e(`settings.network.pendingHint`)}),h&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:h}),t&&(0,J.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border space-y-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,J.jsx)(`span`,{className:`text-dark-muted`,children:e(f?`settings.network.stateLan`:`settings.network.stateLocal`)}),(0,J.jsxs)(`span`,{className:`text-dark-text font-mono`,children:[t.bindHost,`:`,t.httpPort]})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:e(`settings.network.addresses`)}),(0,J.jsx)(`div`,{className:`space-y-1`,children:(f&&t.lanUrls.length?t.lanUrls:[t.loopbackUrl]).map(t=>(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.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,J.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,J.jsx)(ee,{size:13,className:`text-accent-green`}):(0,J.jsx)(j,{size:13}),e(s===t?`settings.network.copied`:`settings.network.copy`)]})]},t))}),f&&t.lanUrls.length===0&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.network.noLanAddress`)})]})]}),f&&(0,J.jsxs)(`div`,{className:`mt-3 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,J.jsx)(O,{size:13}),e(`settings.network.warningTitle`)]}),(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.network.warning`)}),(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:t?.authTokenRequired?e(`settings.network.tokenHint`):e(`settings.network.noTokenHint`)})]}),(0,J.jsx)(pt,{state:t,onState:n})]})}function ft({checked:e,disabled:t,onToggle:n,label:r}){return(0,J.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,J.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 pt({state:e,onState:t}){let{t:r}=R(),[i,a]=(0,q.useState)(!1),[o,s]=(0,q.useState)(null),[c,l]=(0,q.useState)(null),[u,d]=G(),f=e?.tailscale,p=(0,q.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 V.system.setTailscale(e);a(!1),!n.success||!n.data?s(n.error||r(`settings.network.tailscale.applyFailed`)):(t(n.data),z.info(n.data.message))},[i,d,t,r,f]),m=(0,q.useCallback)(async e=>{await ge(e)&&(l(e),setTimeout(()=>l(t=>t===e?null:t),1800))},[]),h=o||f?.lastError||f?.probeError,g=(0,q.useCallback)(()=>{K(r(`settings.network.tailscale.askAiPrompt`,{state:f?.backendState||`unknown`,error:h||`—`})),z.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,J.jsxs)(`div`,{className:`mt-4 pt-4 border-t border-dark-border`,children:[u,(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-sm text-dark-text`,children:r(`settings.network.tailscale.title`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:r(`settings.network.tailscale.hint`)})]}),(0,J.jsx)(ft,{checked:f.serving,disabled:i||!_||!!v,onToggle:()=>void p(),label:r(`settings.network.tailscale.title`)})]}),!f.installed&&(0,J.jsxs)(`p`,{className:`text-xs text-accent-yellow mt-2`,children:[r(`settings.network.tailscale.notInstalled`),` `,(0,J.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,J.jsx)(`p`,{className:`text-xs text-accent-yellow mt-2`,children:r(`settings.network.tailscale.notRunning`,{state:f.backendState||`unknown`})}),i&&(0,J.jsx)(`p`,{className:`text-xs text-accent-blue mt-2`,children:r(`settings.network.tailscale.pendingHint`)}),h&&(0,J.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,J.jsx)(O,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,J.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:h})]}),(!_||!!h)&&(0,J.jsx)(`div`,{className:`mt-2`,children:(0,J.jsx)(B,{variant:`secondary`,size:`sm`,leftIcon:(0,J.jsx)(n,{size:13,"aria-hidden":`true`}),onClick:g,children:r(`settings.network.tailscale.askAi`)})}),v&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:v}),f.serving&&f.url&&(0,J.jsxs)(`div`,{className:`mt-2`,children:[(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:r(`settings.network.tailscale.address`)}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.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,J.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,J.jsx)(ee,{size:13,className:`text-accent-green`}):(0,J.jsx)(j,{size:13}),c===f.url?r(`settings.network.copied`):r(`settings.network.copy`)]})]}),f.allServeUrls.length>1&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:r(`settings.network.tailscale.otherEntries`,{n:f.allServeUrls.length-1})})]}),f.serving&&(0,J.jsxs)(`div`,{className:`mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,J.jsx)(O,{size:13}),r(`settings.network.tailscale.warningTitle`)]}),(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:r(`settings.network.tailscale.warning`)})]})]})}function mt(){let{t:e}=R(),[t,r]=G(),[i,a]=(0,q.useState)(null),[o,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(null),u=(0,q.useCallback)(async()=>{let t=await V.system.daemon();return t.success&&t.data?a(t.data):l(t.error||e(`settings.daemon.loadFailed`)),t},[e]);(0,q.useEffect)(()=>{u()},[u]);let d=i?.daemonEnabled??!1,f=i?.fromEnv?e(`settings.daemon.lockedByEnv`,{env:i.envKey}):null,p=(0,q.useCallback)(()=>{K(e(`settings.daemon.askAiPrompt`,{enabled:String(d),env:i?.envKey||`—`,error:c||`—`})),z.info(e(`settings.daemon.askAiHint`))},[d,c,i?.envKey,e]),m=(0,q.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 V.system.setDaemon(t);s(!1),n.success?(n.data&&a(n.data),z.info(e(t?`settings.daemon.enabledToast`:`settings.daemon.disabledToast`))):l(n.error||e(`settings.daemon.applyFailed`))},[o,r,d,i,e]);return(0,J.jsxs)(J.Fragment,{children:[t,(0,J.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.daemon.description`)}),c&&(0,J.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,J.jsx)(O,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,J.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:c})]}),c&&(0,J.jsx)(`div`,{className:`mb-3`,children:(0,J.jsx)(B,{variant:`secondary`,size:`sm`,leftIcon:(0,J.jsx)(n,{size:13,"aria-hidden":`true`}),onClick:p,children:e(`settings.daemon.askAi`)})}),(0,J.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 ${f?`cursor-not-allowed opacity-60`:`cursor-pointer`}`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.daemon.toggleLabel`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.daemon.toggleHint`)})]}),(0,J.jsx)(ht,{checked:d,disabled:o||!i||!!f,onToggle:()=>void m(),label:e(`settings.daemon.toggleLabel`)})]}),f&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:f})]})}function ht({checked:e,disabled:t,onToggle:n,label:r}){return(0,J.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,J.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 gt(){let{t:e}=R(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(!0),[a,o]=(0,q.useState)(null),[s,c]=(0,q.useState)(!1),[l,u]=(0,q.useState)(``),[d,f]=(0,q.useState)(!1),p=(0,q.useCallback)(async()=>{let t=await V.config.desktop();t.success&&t.data?(n(t.data),o(null),u(t.data.values.port===null?``:String(t.data.values.port)),f(!1)):o(t.error||e(`settings.desktop.loadFailed`))},[e]);(0,q.useEffect)(()=>{(async()=>{await p(),i(!1)})()},[p]);let m=!!t?.envOverridden.autoLaunch,h=!!t?.envOverridden.closeToTray,g=!!t?.envOverridden.port,_=(0,q.useCallback)(async t=>{if(s)return;c(!0),o(null);let r=await V.config.setDesktop(t);c(!1),r.success?(r.data&&(n(r.data),u(r.data.values.port===null?``:String(r.data.values.port)),f(!1)),z.info(e(`settings.desktop.savedRestartHint`))):o(r.error||e(`settings.desktop.applyFailed`))},[s,e]),v=(0,q.useCallback)(()=>{t&&!m&&_({autoLaunch:!t.values.autoLaunch})},[m,_,t]),y=(0,q.useCallback)(()=>{t&&!h&&_({closeToTray:!t.values.closeToTray})},[h,_,t]),b=(0,q.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]),x=d&&!b().ok,S=t?.values.port??null,C=b(),w=!d||C.ok&&C.value===S,T=(0,q.useCallback)(()=>{let e=b();e.ok&&_({port:e.value})},[b,_]),E=(0,q.useCallback)(()=>{u(``),f(!1),S!==null&&_({port:null})},[S,_]);return r?(0,J.jsxs)(`div`,{className:`flex items-center gap-2 py-4 text-sm text-dark-muted`,children:[(0,J.jsx)(L,{size:14,className:`animate-spin`}),e(`settings.desktop.loading`)]}):(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.desktop.description`)}),a&&(0,J.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,J.jsx)(O,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,J.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:a})]}),(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-1`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.desktop.autoLaunchLabel`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.desktop.autoLaunchHint`)})]}),(0,J.jsx)(_t,{checked:!!t?.values.autoLaunch,disabled:s||m,onToggle:v,label:e(`settings.desktop.autoLaunchLabel`)})]}),m&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.lockedByEnv`,{env:t?.envKeys.autoLaunch||``})}),(0,J.jsxs)(`div`,{className:`mt-4 pt-4 border-t border-dark-border flex items-center justify-between gap-3`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.desktop.closeToTrayLabel`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.desktop.closeToTrayHint`)})]}),(0,J.jsx)(_t,{checked:!!t?.values.closeToTray,disabled:s||h,onToggle:y,label:e(`settings.desktop.closeToTrayLabel`)})]}),h&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.lockedByEnv`,{env:t?.envKeys.closeToTray||``})}),(0,J.jsxs)(`div`,{className:`mt-4 pt-4 border-t border-dark-border`,children:[(0,J.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.desktop.portLabel`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5 mb-2`,children:e(`settings.desktop.portHint`)}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(`input`,{type:`number`,inputMode:`numeric`,min:1,max:65534,value:l,disabled:s||g,placeholder:e(`settings.desktop.portAuto`),onChange:e=>{u(e.target.value),f(!0)},onKeyDown:e=>{e.key===`Enter`&&!x&&!w&&T()},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 ${x?`border-accent-red`:`border-dark-border focus:border-accent-blue`}`}),(0,J.jsx)(`button`,{type:`button`,onClick:T,disabled:s||g||x||w,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`)}),S!==null&&(0,J.jsx)(`button`,{type:`button`,onClick:E,disabled:s||g,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`)})]}),x&&(0,J.jsx)(`p`,{className:`text-xs text-accent-red mt-1`,children:e(`settings.desktop.portInvalid`)}),g&&(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.lockedByEnv`,{env:t?.envKeys.port||``})}),S!==null&&!x&&(0,J.jsxs)(`div`,{className:`mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,J.jsx)(O,{size:13}),e(`settings.desktop.pinnedWarningTitle`)]}),(0,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.pinnedWarning`,{port:S})})]})]}),(0,J.jsxs)(`div`,{className:`mt-4 pt-3 border-t border-dark-border flex items-start gap-2`,children:[(0,J.jsx)(P,{size:13,className:`text-dark-muted mt-0.5 shrink-0`}),(0,J.jsxs)(`p`,{className:`text-xs text-dark-muted`,children:[e(`settings.desktop.restartHint`),t?.configPath&&(0,J.jsx)(`span`,{className:`block mt-1 font-mono break-all`,children:t.configPath})]})]})]})}function _t({checked:e,disabled:t,onToggle:n,label:r}){return(0,J.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,J.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 vt={get:()=>xe.get(`/api/config/attention`),set:e=>xe.post(`/api/config/attention`,{sound:e})};function yt(){let{t:e}=R(),[t,n]=(0,q.useState)(!0),[r,i]=(0,q.useState)(!1),[a,o]=(0,q.useState)(null),s=(0,q.useCallback)(async()=>{try{let t=await vt.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,q.useEffect)(()=>{s()},[s]);let c=(0,q.useCallback)(async()=>{if(r)return;let a=!t;i(!0),o(null),n(a);try{let t=await vt.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,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 cursor-pointer`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.notifications.soundLabel`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.notifications.soundHint`)})]}),(0,J.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,J.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,J.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 text-xs text-accent-red`,children:[(0,J.jsx)(O,{size:13,className:`mt-0.5 shrink-0`}),(0,J.jsx)(`span`,{className:`break-all`,children:a})]})]})}var bt=(0,q.memo)(function({label:e,description:t,colors:n,pattern:r,isSelected:i,onClick:a}){return(0,J.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,J.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,J.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:n[e]},title:e},e)),r===`grid`&&(0,J.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,J.jsx)(`span`,{className:`text-meta font-medium truncate w-full text-center ${i?`text-accent-blue`:`text-dark-text`}`,children:e}),i&&(0,J.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,J.jsx)(`svg`,{width:`8`,height:`8`,viewBox:`0 0 8 8`,fill:`none`,children:(0,J.jsx)(`path`,{d:`M1.5 4L3.5 6L6.5 2`,stroke:`white`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})})]})}),xt={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`}},St=[{labelKey:`settings.groups.general`,items:[{id:`general`,icon:c,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:F,labelKey:`settings.nav.profile`,searchKeys:[`profile`,`soul`,`persona`,`identity`,`name`,`画像`,`个性化`,`身份`,`称呼`,`soul.md`]},{id:`voice`,icon:s,labelKey:`settings.nav.voice`,searchKeys:[`voice`,`stt`,`whisper`,`speech`,`语音`,`安装`]}]},{labelKey:`settings.groups.features`,items:[{id:`models`,icon:E,labelKey:`settings.nav.models`,searchKeys:[`provider`,`model`,`api`,`key`,`openai`,`anthropic`,`deepseek`,`模型`]},{id:`connectors`,icon:D,labelKey:`settings.nav.connectors`,searchKeys:[`connector`,`capabilities`,`computer use`,`gmail`,`grok`,`连接器`,`能力`]},{id:`context`,icon:_,labelKey:`settings.nav.context`,searchKeys:[`context`,`token`,`offload`,`artifact`,`上下文`,`外置`]},{id:`configFiles`,icon:u,labelKey:`settings.nav.configFiles`,searchKeys:[`config`,`file`,`yaml`,`json`,`editor`,`配置文件`]}]},{labelKey:`settings.groups.system`,items:[{id:`sandbox`,icon:se,labelKey:`settings.nav.sandbox`,searchKeys:[`sandbox`,`sandbox-exec`,`bwrap`,`bubblewrap`,`isolation`,`seccomp`,`permission`,`沙箱`,`隔离`,`命令`,`权限`]},{id:`network`,icon:C,labelKey:`settings.nav.network`,searchKeys:[`network`,`lan`,`wifi`,`port`,`share`,`access`,`server`,`bind`,`网络`,`局域网`,`内网`,`多人`,`共享`,`访问`,`端口`]},{id:`daemon`,icon:f,labelKey:`settings.nav.daemon`,searchKeys:[`daemon`,`background`,`persistent`,`server`,`backend`,`service`,`常驻`,`后台`,`守护`,`进程`,`服务`]},{id:`desktop`,icon:i,labelKey:`settings.nav.desktop`,searchKeys:[`desktop`,`autolaunch`,`autostart`,`startup`,`boot`,`launch`,`port`,`backend`,`桌面`,`客户端`,`开机`,`自启`,`启动`,`端口`,`后台`]},{id:`system`,icon:f,labelKey:`settings.nav.system`,searchKeys:[`system`,`server`,`uptime`,`restart`,`reboot`,`系统`,`重启`]},{id:`about`,icon:P,labelKey:`settings.nav.about`,searchKeys:[`about`,`version`,`info`,`关于`,`版本`]}]}],Ct=[{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`}],wt=(0,q.memo)(function({isOpen:e,onClose:t,onNavigate:r,focusSection:a}){let{t:o}=R(),[s,c]=(0,q.useState)(`general`),[l,u]=(0,q.useState)(``),[d,p]=(0,q.useState)(0);(0,q.useEffect)(()=>{if(!e)return;let t=!0;return(async()=>{let{draft:e}=await tt();t&&p(nt(e))})(),()=>{t=!1}},[e]),Ne({isOpen:e,onClose:t});let m=(0,q.useRef)(null);(0,q.useEffect)(()=>{e&&a?.section===`stt`&&(c(`voice`),requestAnimationFrame(()=>{m.current?.scrollIntoView({behavior:`smooth`,block:`start`})}))},[a?.nonce,e]);let h=(0,q.useRef)(null);(0,q.useEffect)(()=>{e&&a?.section===`profile`&&(c(`profile`),requestAnimationFrame(()=>{h.current?.scrollIntoView({behavior:`smooth`,block:`start`})}))},[a?.nonce,e]),(0,q.useEffect)(()=>{e&&u(``)},[e]);let g=(0,q.useMemo)(()=>{if(!l.trim())return St;let e=l.toLowerCase().trim();return St.map(t=>({...t,items:t.items.filter(t=>o(t.labelKey).toLowerCase().includes(e)||t.searchKeys.some(t=>t.toLowerCase().includes(e)))})).filter(e=>e.items.length>0)},[l,o]),{visible:_,phase:v}=ce(e);return _?(0,J.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":o(`settings.title`),children:[(0,J.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":v,onClick:t}),(0,J.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":v,children:[(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between ps-5 pe-3 py-3 border-b border-dark-border`,children:[(0,J.jsx)(`h2`,{className:`text-base font-semibold text-dark-text`,children:o(`settings.title`)}),(0,J.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,J.jsx)(I,{size:18,"aria-hidden":`true`})})]}),(0,J.jsxs)(`div`,{className:`flex flex-1 min-h-0 max-md:flex-col`,children:[(0,J.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,J.jsx)(`div`,{className:`p-3 pb-1 max-md:px-2 max-md:pt-2 max-md:pb-1`,children:(0,J.jsxs)(`div`,{className:`relative`,children:[(0,J.jsx)(x,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted pointer-events-none`}),(0,J.jsx)(`input`,{type:`text`,value:l,onChange:e=>u(e.target.value),placeholder:o(`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,J.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:[g.map(e=>(0,J.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,J.jsx)(`div`,{className:`px-2 mb-1 text-badge font-medium uppercase tracking-wide text-dark-muted/80 max-md:hidden`,children:o(e.labelKey)}),(0,J.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=s===e.id;return(0,J.jsxs)(`button`,{onClick:()=>c(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,J.jsx)(t,{size:15,className:n?`text-accent-blue`:`text-dark-muted`}),(0,J.jsx)(`span`,{className:`truncate`,children:o(e.labelKey)}),e.id===`profile`&&d>0&&(0,J.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:o(`settings.profile.draft.pendingNav`,{n:d}),children:d})]},e.id)})})]},e.labelKey)),g.length===0&&(0,J.jsx)(`div`,{className:`mt-6 text-center text-xs text-dark-muted`,children:o(`settings.noResults`)})]})]}),(0,J.jsx)(`div`,{className:`flex-1 min-w-0 min-h-0 overflow-y-auto custom-scrollbar`,children:(0,J.jsx)(Pe,{fallbackRender:(e,t)=>(0,J.jsx)(Tt,{error:e,onRetry:t}),children:(0,J.jsxs)(`div`,{className:`max-w-2xl px-6 py-5 max-md:px-4 max-md:py-4`,children:[s===`general`&&(0,J.jsx)(Et,{}),s===`appearance`&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Dt,{}),(0,J.jsx)(Q,{icon:n,iconColor:`text-accent-purple`,title:o(`brand.title`),children:(0,J.jsx)(Fe,{dense:!0})})]}),s===`profile`&&(0,J.jsx)(`div`,{ref:h,id:`settings-section-profile`,className:`scroll-mt-5`,children:(0,J.jsx)(kt,{})}),s===`voice`&&(0,J.jsx)(`div`,{ref:m,id:`settings-section-stt`,className:`scroll-mt-5`,children:(0,J.jsx)(Ot,{})}),s===`models`&&(0,J.jsx)(At,{onNavigate:r}),s===`connectors`&&(0,J.jsx)(jt,{onNavigate:r}),s===`context`&&(0,J.jsx)(Mt,{}),s===`configFiles`&&(0,J.jsx)(Nt,{}),s===`sandbox`&&(0,J.jsx)(Pt,{}),s===`network`&&(0,J.jsx)(Q,{icon:C,iconColor:`text-accent-green`,title:o(`settings.nav.network`),children:(0,J.jsx)(dt,{})}),s===`daemon`&&(0,J.jsx)(Q,{icon:f,iconColor:`text-accent-green`,title:o(`settings.daemon.title`),children:(0,J.jsx)(mt,{})}),s===`desktop`&&(0,J.jsx)(Q,{icon:i,iconColor:`text-accent-blue`,title:o(`settings.nav.desktop`),children:(0,J.jsx)(gt,{})}),s===`system`&&(0,J.jsx)(Ft,{}),s===`about`&&(0,J.jsx)(It,{})]})},s)})]})]})]}):null});function Tt({error:e,onRetry:t}){let{t:n}=R();return(0,J.jsxs)(`div`,{role:`alert`,className:`rounded-xl border border-accent-red/30 bg-accent-red/5 p-4`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-accent-red`,children:[(0,J.jsx)(O,{size:16,className:`shrink-0`}),(0,J.jsx)(`span`,{children:n(`error.pageError`)})]}),(0,J.jsx)(`p`,{className:`mt-1.5 text-xs text-dark-muted break-words`,children:e.message||n(`error.unknownError`)}),(0,J.jsx)(B,{className:`mt-3 w-fit`,variant:`accent`,leftIcon:(0,J.jsx)(M,{size:14}),onClick:t,children:n(`common.retry`)})]})}function Et(){let{t:e}=R(),{language:t,setLanguage:n,developerView:r,setDeveloperView:i,effort:a}=ke(),o=ue[le(a)],s=Ee(t),c=[{code:Oe,label:e(`settings.languageAuto`)},...we.map(e=>({code:e.code,label:e.label}))];return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(Q,{icon:oe,iconColor:`text-accent-blue`,title:e(`settings.language`),children:[(0,J.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:c.map(({code:e,label:t})=>(0,J.jsx)(`button`,{lang:e===`auto`?void 0:e,onClick:()=>{n(e),e!==s&&V.config.language.set(Te(Se(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,J.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:e(`settings.languageHint`)})]}),(0,J.jsx)(Q,{icon:l,iconColor:`text-accent-blue`,title:e(`settings.display`),children:(0,J.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 cursor-pointer`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.developerView`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.developerViewHint`)})]}),(0,J.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,J.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,J.jsx)(Q,{icon:y,iconColor:`text-accent-yellow`,title:e(`settings.effort`),children:(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4 py-1`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`settings.effortHint`)}),(0,J.jsx)(`div`,{className:`text-xs text-dark-muted mt-1`,children:o.hint})]}),(0,J.jsx)(_e,{syncSession:!1})]})}),(0,J.jsx)(Q,{icon:p,iconColor:`text-accent-yellow`,title:e(`settings.notifications.title`),children:(0,J.jsx)(yt,{})})]})}function Dt(){let{t:e}=R(),{theme:t,setTheme:n,themePresetId:r,setThemePreset:i,customTheme:a,customThemeEnabled:s,setCustomTheme:c,setCustomThemeEnabled:l,resetCustomTheme:u}=ke(),d=H(e=>e.customThemes),f=H(e=>e.rejected),p=H(e=>e.error),m=H(e=>e.loading),h=H(e=>e.load),g=H(e=>e.removeCustomTheme),[_,v]=(0,q.useState)(s),y=(0,q.useMemo)(()=>t===`dark`?`dark`:t===`light`?`light`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`,[t]),b=(0,q.useMemo)(()=>Ae(d),[d]);return(0,J.jsxs)(Q,{icon:o,iconColor:`text-accent-purple`,title:e(`settings.theme`),children:[(0,J.jsx)(`div`,{className:`flex gap-2 mb-4`,children:[`dark`,`light`,`auto`].map(r=>(0,J.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,J.jsxs)(`div`,{className:`mb-4`,children:[(0,J.jsx)(`h4`,{className:`text-xs font-semibold text-dark-text mb-2`,children:e(`settings.themePresets`)}),(0,J.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=Ce(t,e);return(0,J.jsxs)(`div`,{className:`relative`,children:[(0,J.jsx)(bt,{id:t.id,label:o,description:De(t,e),colors:a,pattern:t.pattern,isSelected:n,onClick:()=>i(t.id)}),t.custom&&(0,J.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,J.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 text-meta text-dark-muted`,children:[(0,J.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,J.jsx)(M,{size:12,className:m?`animate-spin`:void 0}),e(`settings.themeCustomReload`)]}),(0,J.jsx)(`span`,{children:e(`settings.themeCustomHint`)})]}),p&&(0,J.jsx)(`p`,{className:`mt-1 text-meta text-accent-red`,children:e(`settings.themeCustomError`,{error:p})}),f.length>0&&(0,J.jsx)(`ul`,{className:`mt-1 space-y-0.5 text-meta text-accent-yellow`,children:f.map((t,n)=>(0,J.jsx)(`li`,{children:e(`settings.themeCustomRejected`,{index:t.index>=0?t.index+1:`-`,reason:t.reason})},`${t.index}-${n}`))})]}),(0,J.jsxs)(`div`,{className:`pt-4 border-t border-dark-border`,children:[(0,J.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,J.jsx)(o,{size:14}),(0,J.jsx)(`span`,{children:e(`settings.customOverrides`)}),(0,J.jsx)(`span`,{className:`w-8 h-4 rounded-full transition-colors ${_?`bg-accent-blue`:`bg-dark-border`}`,children:(0,J.jsx)(`span`,{className:`block w-3 h-3 rounded-full bg-white transition-transform mt-0.5 ${_?`ms-4`:`ms-0.5`}`})})]}),_&&(0,J.jsx)(`p`,{className:`text-badge text-dark-muted mt-1 mb-2`,children:e(`settings.customOverridesHint`)}),_&&(0,J.jsxs)(`div`,{className:`mt-3`,children:[(0,J.jsx)(`div`,{className:`flex gap-1 mb-3 rounded-lg overflow-hidden h-6`,children:Ct.map(({key:e})=>(0,J.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:a[e]},title:e},e))}),(0,J.jsx)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-2`,children:Ct.map(({key:t,labelKey:n})=>(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.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,J.jsx)(`span`,{className:`text-xs text-dark-muted flex-1 truncate`,children:e(n)}),(0,J.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,J.jsx)(`button`,{onClick:u,className:`mt-2 text-xs text-dark-muted hover:text-accent-red transition-colors`,children:e(`settings.resetColors`)})]})]})]})}function Ot(){let{t:e}=R();return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Q,{icon:s,iconColor:`text-accent-blue`,title:e(`stt.setup.title`),children:(0,J.jsx)(Ue,{})}),(0,J.jsx)(Q,{icon:N,iconColor:`text-accent-purple`,title:e(`tts.setup.title`),children:(0,J.jsx)(We,{})})]})}function kt(){let{t:e}=R();return(0,J.jsx)(Q,{icon:F,iconColor:`text-accent-purple`,title:e(`settings.profile.title`),children:(0,J.jsx)(lt,{})})}function At({onNavigate:e}){return(0,J.jsxs)(Q,{icon:E,iconColor:`text-accent-yellow`,title:`Provider & Models`,children:[(0,J.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,J.jsx)(B,{variant:`accent`,leftIcon:(0,J.jsx)(ae,{size:14}),onClick:()=>e?.(`models`),className:`w-fit`,children:`Manage Providers & Models`})]})}function jt({onNavigate:e}){let{t}=R();return(0,J.jsxs)(Q,{icon:i,iconColor:`text-accent-green`,title:t(`settings.capabilities.title`),children:[(0,J.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:`Computer Use、外部服务连接器(X/Twitter、Gmail、Google Workspace、Microsoft 365 等)与 xAI (Grok) 统一在连接器页集中管理。`}),(0,J.jsx)(B,{variant:`accent`,leftIcon:(0,J.jsx)(ae,{size:14}),onClick:()=>e?.(`connectors`),className:`w-fit`,children:`Manage Connectors & Capabilities`})]})}function Mt(){let{t:e}=R();return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Q,{icon:m,iconColor:`text-accent-blue`,title:e(`settings.contextWindow.title`),children:(0,J.jsx)(Xe,{})}),(0,J.jsx)(Q,{icon:l,iconColor:`text-accent-purple`,title:e(`settings.contextOffload.title`),children:(0,J.jsx)(Ge,{})}),(0,J.jsx)(Q,{icon:te,iconColor:`text-accent-purple`,title:`梦境(自动整理)`,children:(0,J.jsx)(qe,{})})]})}function Nt(){return(0,J.jsx)(Q,{icon:u,iconColor:`text-accent-green`,title:`Config Files (~/.agent/)`,children:(0,J.jsx)(ze,{})})}function Pt(){let{t:e}=R();return(0,J.jsx)(Q,{icon:se,iconColor:`text-accent-green`,title:e(`settings.sandbox.title`),children:(0,J.jsx)(Qe,{})})}function Ft(){let[e,t]=G(),[n,r]=(0,q.useState)(0),[i,a]=(0,q.useState)(!1),[o,s]=(0,q.useState)(!1);(0,q.useEffect)(()=>{let e=!0,t=async()=>{try{let t=await V.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,q.useCallback)(async()=>{if(await t({message:`Restart the server? All active sessions will be disconnected.`,variant:`danger`})){a(!0);try{let e=await V.system.restart();e.success?z.info(`Server restarting...`):(z.error(e.error||`Restart failed`),a(!1))}catch{z.error(`Failed to send restart request`),a(!1)}}},[t]),l=(0,q.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 V.system.shutdown();e.success?z.info(`Server shutting down...`):(z.error(e.error||`Shutdown failed`),s(!1))}catch{z.error(`Failed to send shutdown request`),s(!1)}}},[t]);return(0,q.useEffect)(()=>{i&&n<1e4&&(a(!1),z.success(`Server restarted`))},[n,i]),(0,J.jsxs)(Q,{icon:f,iconColor:`text-dark-muted`,title:`System`,children:[e,(0,J.jsxs)(`div`,{className:`space-y-3`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between text-sm`,children:[(0,J.jsx)(`span`,{className:`text-dark-muted`,children:`Server Uptime`}),(0,J.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,J.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,J.jsx)(M,{size:14,className:i?`animate-spin`:``}),i?`Restarting...`:`Restart Server`]}),(0,J.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,J.jsx)(re,{size:14,className:o?`animate-pulse`:``}),o?`Shutting Down...`:`Shutdown Server`]})]})]})}function It(){let{t:e}=R();return(0,J.jsx)(Q,{icon:P,iconColor:`text-accent-blue`,title:e(`settings.about`),children:(0,J.jsxs)(`div`,{className:`text-sm text-dark-muted space-y-2`,children:[(0,J.jsxs)(`p`,{children:[(0,J.jsx)(`span`,{className:`text-dark-text`,children:`DeepSeekCode Web`}),` v`,xt.version]}),(0,J.jsx)(`p`,{children:e(`settings.aboutDesc`)}),(0,J.jsx)(`p`,{className:`text-xs`,children:`Powered by React + TypeScript + TailwindCSS`}),(0,J.jsx)(`p`,{className:`text-xs`,children:`联系:ngwlh2026@gmail.com`}),(0,J.jsxs)(`button`,{onClick:()=>Me.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,J.jsx)(n,{size:14}),e(`settings.whatsNew`)]})]})})}export{wt as SettingsModal};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,C as n,Mn as r,Or as i,T as a,Xn as o,_n as s,b as c,dt as l,g as u,ii as d,it as f,jr as p,kr as ee,m,n as h,t as g,v as _,y as te}from"./icons-CittejKL.js";import{t as v}from"./useTranslation-2BGEBvJE.js";import{t as y}from"./Button-B43HsIQ3.js";import{t as b}from"./api-BW4-5gtM.js";import{I as x}from"./markdown-DZQBOzWk.js";import{t as S}from"./cn-CoHJgTJ5.js";import{a as C,d as w,i as ne,o as re,s as T}from"./common-CP2UB8TN.js";import{n as ie,r as ae}from"./useConfirm-kTv3x0H6.js";import{t as oe}from"./Install-ClEm4oGX.js";var E=e(d(),1),D=x();function se(){let{t:e}=v(),[t,n]=(0,E.useState)([]),[r,i]=(0,E.useState)(!0),[a,o]=(0,E.useState)(null),[c,d]=(0,E.useState)(null),[ee,m]=(0,E.useState)(!1),[g,_]=(0,E.useState)({skillName:``,description:``,trigger:``,content:``}),[te,x]=(0,E.useState)(!1),[S,C]=(0,E.useState)(null),w=(0,E.useCallback)(async()=>{i(!0);try{let e=await b.skills.workshop.list();n(e.data??[]),o(null)}catch(e){o(e instanceof Error?e.message:String(e))}finally{i(!1)}},[]);(0,E.useEffect)(()=>{w()},[w]);let ne=async e=>{d(e);try{await b.skills.workshop.apply(e),await w()}catch(e){o(e instanceof Error?e.message:String(e))}finally{d(null)}},re=async e=>{d(e);try{await b.skills.workshop.reject(e),await w()}catch(e){o(e instanceof Error?e.message:String(e))}finally{d(null)}};return(0,D.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar pe-1 space-y-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,D.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`skills.workshopHint`)||`技能提案:从会话/手动生成,审核后一键应用为技能`}),(0,D.jsx)(y,{variant:`accent`,leftIcon:(0,D.jsx)(l,{size:14}),onClick:()=>{m(e=>!e),C(null)},children:e(`skills.workshopPropose`)||`新建提案`})]}),ee&&(0,D.jsxs)(`div`,{className:`rounded-xl border border-dark-border bg-dark-surface p-3 space-y-2`,children:[(0,D.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,D.jsx)(`input`,{value:g.skillName,onChange:e=>_(t=>({...t,skillName:e.target.value})),placeholder:e(`skills.workshopName`)||`技能名 (skill-name) 如 format-json`,className:`px-3 py-2 rounded-lg bg-dark-bg border border-dark-border outline-none focus:border-accent-blue text-sm`}),(0,D.jsx)(`input`,{value:g.trigger,onChange:e=>_(t=>({...t,trigger:e.target.value})),placeholder:e(`skills.workshopTrigger`)||`触发关键词(可选)`,className:`px-3 py-2 rounded-lg bg-dark-bg border border-dark-border outline-none focus:border-accent-blue text-sm`})]}),(0,D.jsx)(`input`,{value:g.description,onChange:e=>_(t=>({...t,description:e.target.value})),placeholder:e(`skills.workshopDescription`)||`一句话描述`,className:`w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border outline-none focus:border-accent-blue text-sm`}),(0,D.jsx)(`textarea`,{value:g.content,onChange:e=>_(t=>({...t,content:e.target.value})),placeholder:e(`skills.workshopContent`)||`技能正文(系统提示 / 工作流指令)`,rows:5,className:`w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border outline-none focus:border-accent-blue text-sm resize-y`}),S&&(0,D.jsx)(`div`,{className:`text-xs text-accent-red`,children:S}),(0,D.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,D.jsx)(`button`,{onClick:()=>m(!1),className:`px-3 py-1.5 rounded-lg text-sm border border-dark-border hover:bg-dark-hover`,children:e(`common.cancel`)||`取消`}),(0,D.jsx)(y,{variant:`accent`,leftIcon:(0,D.jsx)(p,{size:14}),loading:te,onClick:async()=>{if(!g.skillName.trim()||!g.content.trim())C(e(`skills.workshopFormRequired`)||`skillName and content are required`);else{x(!0),C(null);try{await b.skills.workshop.propose({skillName:g.skillName.trim(),description:g.description.trim(),trigger:g.trigger.trim(),content:g.content.trim(),reason:`manual proposal`}),_({skillName:``,description:``,trigger:``,content:``}),m(!1),await w()}catch(e){C(e instanceof Error?e.message:String(e))}finally{x(!1)}}},children:e(`skills.workshopSubmit`)||`提交提案`})]})]}),a&&(0,D.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 rounded-lg bg-accent-red/10 text-accent-red text-sm`,children:[(0,D.jsx)(u,{size:14,className:`shrink-0`}),(0,D.jsx)(`span`,{className:`min-w-0 flex-1`,children:a}),(0,D.jsx)(`button`,{onClick:()=>o(null),className:`shrink-0 p-0.5 rounded hover:bg-dark-hover`,children:(0,D.jsx)(h,{size:14})})]}),r?(0,D.jsx)(`div`,{className:`flex items-center justify-center py-16`,children:(0,D.jsx)(f,{size:24,className:`animate-spin text-accent-blue`})}):t.length===0?(0,D.jsx)(`div`,{className:`text-sm text-dark-muted py-10 text-center`,children:e(`skills.workshopEmpty`)||`暂无技能提案`}):t.map(t=>(0,D.jsxs)(`div`,{className:`rounded-xl border border-dark-border bg-dark-surface p-3 space-y-1.5`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(s,{size:14,className:`text-accent-blue shrink-0`}),(0,D.jsx)(`span`,{className:`font-medium text-sm truncate`,children:t.skillName}),(0,D.jsx)(`span`,{className:`text-xs px-1.5 py-0.5 rounded-full shrink-0 ${t.status===`applied`?`bg-accent-green/15 text-accent-green`:t.status===`rejected`?`bg-dark-hover text-dark-muted`:`bg-accent-yellow/15 text-accent-yellow`}`,children:t.status})]}),(0,D.jsx)(`div`,{className:`flex items-center gap-1 shrink-0`,children:t.status===`pending`&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`button`,{onClick:()=>ne(t.id),disabled:c===t.id,className:`px-2 py-1 bg-accent-green text-accent-fg rounded text-xs flex items-center gap-1 disabled:opacity-50`,children:[(0,D.jsx)(p,{size:12}),e(`skills.workshopApply`)||`应用`]}),(0,D.jsx)(`button`,{onClick:()=>re(t.id),disabled:c===t.id,className:`px-2 py-1 rounded text-xs border border-dark-border hover:bg-dark-hover disabled:opacity-50`,children:(0,D.jsx)(h,{size:12})})]})})]}),t.description&&(0,D.jsx)(`div`,{className:`text-xs text-dark-muted truncate`,children:t.description}),t.trigger&&(0,D.jsxs)(`div`,{className:`text-xs text-accent-blue`,children:[`trigger: `,t.trigger]}),(0,D.jsx)(`div`,{className:`text-xs text-dark-muted line-clamp-3 whitespace-pre-wrap`,children:t.content}),(0,D.jsxs)(`div`,{className:`text-meta text-dark-muted/70 flex items-center justify-between`,children:[(0,D.jsx)(`span`,{children:t.reason}),(0,D.jsx)(`span`,{children:new Date(t.createdAt).toLocaleString()})]})]},t.id))]})}var ce=/^(https?:|data:)/i;function O({icon:e,className:t=`w-4 h-4 rounded object-cover shrink-0`}){return e&&ce.test(e)?(0,D.jsx)(`img`,{src:e,alt:``,loading:`lazy`,className:t}):(0,D.jsx)(`span`,{children:e||`⭐`})}function le({marketplaces:e,value:t,onChange:n}){let{t:r}=v(),i=Array.from(new Map(e.filter(e=>e.domain).map(e=>[e.domain,e.domainIcon||`📁`])).entries());return i.length===0?null:(0,D.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[{id:``,icon:`🗂️`},...i.map(([e,t])=>({id:e,icon:t}))].map(e=>(0,D.jsxs)(`button`,{onClick:()=>n(e.id),className:`flex items-center gap-1 px-2.5 py-1 rounded-full border text-xs transition-colors ${t===e.id?`border-accent-blue bg-accent-blue/15 text-accent-blue`:`border-dark-border bg-dark-surface text-dark-muted hover:bg-dark-hover`}`,children:[(0,D.jsx)(O,{icon:e.icon,className:`w-3.5 h-3.5 rounded-sm object-cover shrink-0`}),(0,D.jsx)(`span`,{children:e.id||r(`skills.marketDomainAll`)})]},e.id||`__all__`))})}function ue({id:e,installed:t=!0,className:n}){let{t:r}=v(),{configured:i,settingFor:a,effectiveFor:o}=C(`skills`);if(!i)return null;let s=a(e),c=o(e),l=s===`inherit`&&!c,u=r(s===`inherit`?l?`settings.kindCapability.excluded`:`settings.kindCapability.inherit`:`settings.kindCapability.${s}`);return(0,D.jsxs)(`span`,{title:r(`settings.kindCapability.hint`),className:S(`inline-flex w-fit items-center gap-1 rounded-full border px-2 py-0.5 text-xs`,s===`allow`&&`border-accent-green/40 bg-accent-green/15 text-accent-green`,s===`deny`&&`border-accent-red/40 bg-accent-red/15 text-accent-red`,s===`inherit`&&!l&&`border-dark-border text-dark-muted`,l&&`border-dark-border text-dark-tertiary line-through`,n),children:[(0,D.jsx)(`span`,{children:u}),!t&&(0,D.jsx)(`span`,{className:`text-dark-tertiary no-underline`,children:r(`skills.kindTagUninstalled`)})]})}function de({ids:e,className:t}){let{t:n}=v(),r=T(e=>e.kinds),i=T(e=>e.activeKind),{configured:a,effectiveFor:o}=C(`skills`);if(e.length===0)return null;let s=r.find(e=>e.id===i),c=s?s.labelKey?n(s.labelKey):s.id:i||`—`,l=e.filter(e=>o(e)).length;return(0,D.jsxs)(`p`,{className:S(`text-xs`,a?`text-dark-muted`:`text-dark-tertiary`,t),children:[a?n(`skills.kindAvailabilityNarrowed`,{kind:c,available:l,total:e.length}):n(`skills.kindAvailabilityInherit`,{kind:c,total:e.length}),(0,D.jsx)(`span`,{className:`ms-1 text-dark-tertiary`,children:n(`skills.kindAvailabilityHint`)})]})}function fe({index:e,children:t}){let n=T(e=>e.activeKind),r=Math.min(e,10)*70;return(0,D.jsx)(`div`,{className:`animate-fade-in h-full [&>*]:h-full`,style:{animationDelay:`${r}ms`},children:t},n)}var pe={id:``,name:``,description:``,category:``,trigger:``,systemPrompt:``,injection:`lazy`,tags:``,requiredTools:``},k=8,me=(e,t)=>`${e}::${t}`;function A({onUseSkill:e}){let{t:d}=v(),[x,S]=(0,E.useState)(`marketplace`),[C,T]=(0,E.useState)([]),[ce,A]=(0,E.useState)(!0),[ge,M]=(0,E.useState)(null),[N,_e]=(0,E.useState)(``),[ve,P]=(0,E.useState)(!1),[F,I]=(0,E.useState)(null),[ye,be]=(0,E.useState)(!1),[xe,L]=(0,E.useState)(null),[R,z]=(0,E.useState)(pe),[Se,B]=(0,E.useState)(!1),[Ce,we]=(0,E.useState)(!1),[Te,V]=(0,E.useState)(null),H=(0,E.useRef)(null),[U,W]=(0,E.useState)([]),[Ee,G]=(0,E.useState)([]),[De,K]=(0,E.useState)({}),[Oe,q]=(0,E.useState)(!1),[ke,J]=(0,E.useState)(null),[Ae,je]=(0,E.useState)([]),Me=(0,E.useRef)(new Set),[Ne,Pe]=(0,E.useState)({}),[Y,Fe]=(0,E.useState)({}),[Ie,Le]=(0,E.useState)({}),[Re,ze]=(0,E.useState)({}),[Be,Ve]=(0,E.useState)({}),[He,Ue]=(0,E.useState)(``),[We,Ge]=(0,E.useState)(``),[Ke,qe]=(0,E.useState)(``),[Je,Ye]=(0,E.useState)(!1),[X,Xe]=(0,E.useState)(null),Z=(0,E.useMemo)(()=>C.filter(e=>e.source===`marketplace`||e.provenance===`marketplace`),[C]),Ze=(0,E.useMemo)(()=>C.filter(e=>e.source!==`marketplace`&&e.provenance!==`marketplace`),[C]),Qe=e=>{let t=De[e]?.skills||[];return Math.max(1,Math.ceil(t.length/k))},$e=(e,t)=>{Le(n=>({...n,[e]:Math.max(0,Math.min(Qe(e)-1,t))}))},et=async()=>{q(!0),J(null);let e=await b.skills.marketplaces.list();e.success?(W(e.data?.marketplaces||[]),G(e.data?.installed||[]),K(e.data?.indexes||{}),q(!1)):(J(e.error||d(`skills.loadMarketplaceFail`)),q(!1))},tt=async()=>{let e=We.trim();if(!e)return;Ye(!0),J(null);let t=await b.skills.marketplaces.add({url:e,name:Ke.trim()||void 0});if(t.success&&t.data){Ge(``),qe(``);let e=t.data.marketplace;W(t=>[...t.filter(t=>t.id!==e.id),e]),K(n=>({...n,[e.id]:t.data.index}))}else J(t.error||d(`skills.addFail`));Ye(!1)},nt=async e=>{J(null);let t=await b.skills.marketplaces.refresh(e);t.success&&t.data?K(n=>({...n,[e]:t.data.index})):J(t.error||d(`skills.loadMarketplaceFail`))},rt=async e=>{await b.skills.marketplaces.remove(e),W(t=>t.filter(t=>t.id!==e)),K(t=>{let n={...t};return delete n[e],n})},it=async()=>{let e=await b.skills.list();e.success&&Array.isArray(e.data)&&T(e.data)},at=async(e,t)=>{let n=Date.now()+6e5;for(;;){if(Date.now()>n)throw Error(d(`skills.installTimeout`));await new Promise(e=>setTimeout(e,400));let r=await b.installs.get(t);if(!r.success||!r.data)throw Error(r.error||d(`skills.installFail`));let i=r.data;if(Fe(n=>({...n,[e]:{stage:i.stage,progress:i.progress,logs:i.logs,jobId:t,...i.logPath?{logPath:i.logPath}:{}}})),i.status===`done`)return i.skill;if(i.status===`error`)throw Error(i.error||d(`skills.installFail`))}},ot=async(e,t)=>{let n=me(e,t);if(!Me.current.has(n)){Me.current.add(n),je(e=>[...e,n]),Pe(e=>{if(!(n in e))return e;let t={...e};return delete t[n],t}),J(null);try{let r=await b.skills.marketplaces.install(e,t);if(!r.success||!r.data?.jobId){Pe(e=>({...e,[n]:r.error||d(`skills.installFail`)}));return}let i=await at(n,r.data.jobId);G(e=>[...e.filter(e=>e!==i.id),i.id]),T(e=>[...e.filter(e=>e.id!==i.id),i]),it()}catch(e){Pe(t=>({...t,[n]:e instanceof Error?e.message:d(`skills.installFail`)}))}finally{Me.current.delete(n),je(e=>e.filter(e=>e!==n))}}},st=async e=>{J(null);let t=await b.skills.delete(e);t.success?(G(t=>t.filter(t=>t!==e)),T(t=>t.filter(t=>t.id!==e)),it()):J(t.error||d(`skills.uninstallFail`)),Xe(null)},Q=async()=>{A(!0),M(null);let e=await b.skills.list();if(e.success){let t=Array.isArray(e.data)?e.data:[];T(t),e.data!==null&&e.data!==void 0&&!Array.isArray(e.data)&&M(`服务端返回的技能数据格式异常`)}else M(e.error||d(`skills.loadFailedFallback`));A(!1)};(0,E.useEffect)(()=>{Q(),et()},[]);let ct=(0,E.useMemo)(()=>{let e=N.trim().toLowerCase();return e?Ze.filter(t=>[t.id,t.name,t.description,t.category,...t.tags||[]].join(` `).toLowerCase().includes(e)):Ze},[Ze,N]),lt=()=>{I(null),z(pe),L(null),P(!0)},ut=e=>{I(e.id),z({id:e.id,name:e.name,description:e.description,category:e.category,trigger:e.trigger||``,systemPrompt:e.systemPrompt||``,injection:e.injection||`lazy`,tags:(e.tags||[]).join(`, `),requiredTools:(e.requiredTools||[]).join(`, `)}),L(null),P(!0)},dt=async()=>{let e=R.id.trim();if(!e){L(d(`skills.fieldId`)+` is required`);return}be(!0),L(null);let t={id:e,name:R.name.trim(),description:R.description.trim(),category:R.category.trim(),trigger:R.trigger.trim(),systemPrompt:R.systemPrompt,injection:R.injection.trim(),tags:he(R.tags),requiredTools:he(R.requiredTools)},n=F?await b.skills.update(F,t):await b.skills.create(t);n.success?(P(!1),I(null),z(pe),await Q()):L(n.error||d(`skills.save`)),be(!1)},ft=async e=>{(await b.skills.toggle(e.id,!e.enabled)).success&&T(t=>t.map(t=>t.id===e.id?{...t,enabled:!t.enabled}:t))},pt=async e=>{we(!0),V(null);try{let t=await e.text(),n=await b.skills.import({fileName:e.name,content:t});n.success?(B(!1),await Q()):V(n.error||d(`skills.import`))}catch(e){V(e instanceof Error?e.message:d(`skills.import`))}finally{we(!1),H.current&&(H.current.value=``)}};if(ce)return(0,D.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,role:`status`,children:(0,D.jsx)(w,{count:5})});if(ge)return(0,D.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,D.jsxs)(`div`,{className:`text-center`,children:[(0,D.jsx)(u,{size:32,className:`mx-auto mb-2 text-accent-red`}),(0,D.jsx)(`p`,{className:`text-accent-red mb-4`,children:ge}),(0,D.jsx)(y,{variant:`accent`,onClick:Q,children:d(`skills.retry`)})]})});let $=e=>`flex items-center gap-2 px-4 py-1.5 rounded-lg text-sm font-medium transition-colors ${e?`bg-accent-blue/20 text-accent-blue`:`text-dark-muted hover:bg-dark-hover`}`;return(0,D.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden p-4 gap-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,D.jsxs)(`h2`,{className:`text-lg font-semibold flex items-center gap-2 shrink-0`,children:[(0,D.jsx)(n,{size:20}),d(`skills.title`),(0,D.jsxs)(`span`,{className:`text-sm font-normal text-dark-muted`,children:[`(`,C.length,`)`]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-1 bg-dark-surface border border-dark-border rounded-xl p-1`,children:[(0,D.jsxs)(`button`,{onClick:()=>S(`marketplace`),className:$(x===`marketplace`),children:[(0,D.jsx)(a,{size:14}),d(`skills.marketplaceTab`)]}),(0,D.jsxs)(`button`,{onClick:()=>S(`mine`),className:$(x===`mine`),children:[(0,D.jsx)(n,{size:14}),d(`skills.mineTab`)]}),(0,D.jsxs)(`button`,{onClick:()=>S(`installed`),className:$(x===`installed`),children:[(0,D.jsx)(p,{size:14}),d(`skills.installedTab`),(0,D.jsx)(`span`,{className:`text-xs px-1.5 py-0.5 rounded-full bg-dark-bg border border-dark-border`,children:Z.length})]}),(0,D.jsxs)(`button`,{onClick:()=>S(`workshop`),className:$(x===`workshop`),children:[(0,D.jsx)(s,{size:14}),d(`skills.workshopTab`)]})]})]}),(0,D.jsx)(re,{slot:d(`nav.skills`)}),ke&&(0,D.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 rounded-lg bg-accent-red/10 text-accent-red text-sm`,children:[(0,D.jsx)(u,{size:14,className:`shrink-0`}),(0,D.jsx)(`span`,{className:`min-w-0 flex-1`,children:ke}),(0,D.jsx)(`button`,{onClick:()=>J(null),className:`shrink-0 p-0.5 rounded hover:bg-dark-hover`,children:(0,D.jsx)(h,{size:14})})]}),x===`marketplace`&&(0,D.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar pe-1 space-y-4`,children:[(0,D.jsxs)(`div`,{className:`flex gap-2`,children:[(0,D.jsx)(`input`,{value:We,onChange:e=>Ge(e.target.value),placeholder:d(`skills.marketplaceUrlPlaceholder`),className:`flex-1 px-3 py-2 rounded-lg bg-dark-surface border border-dark-border outline-none focus:border-accent-blue text-sm`}),(0,D.jsx)(`input`,{value:Ke,onChange:e=>qe(e.target.value),placeholder:d(`skills.marketplaceName`),className:`w-40 px-3 py-2 rounded-lg bg-dark-surface border border-dark-border outline-none focus:border-accent-blue text-sm`}),(0,D.jsx)(y,{variant:`accent`,onClick:tt,disabled:!We.trim(),loading:Je,leftIcon:(0,D.jsx)(l,{size:14}),children:d(Je?`skills.adding`:`skills.addMarketplace`)})]}),(0,D.jsx)(`div`,{className:`text-xs text-dark-muted`,children:d(`skills.marketplaceHint`)}),(0,D.jsx)(le,{marketplaces:U,value:He,onChange:Ue}),Oe?(0,D.jsx)(`div`,{className:`flex items-center justify-center py-16`,children:(0,D.jsx)(f,{size:24,className:`animate-spin text-accent-blue`})}):(0,D.jsxs)(D.Fragment,{children:[U.length===0&&(0,D.jsx)(`div`,{className:`text-sm text-dark-muted py-10 text-center`,children:d(`skills.noMarketplaces`)}),U.filter(e=>!He||e.domain===He).map(e=>{let t=De[e.id],n=t?.skills||[],r=(Re[e.id]||``).trim().toLowerCase(),a=Be[e.id]||``,s=Array.from(new Set(n.map(e=>e.category).filter(Boolean))).sort(),c=n.filter(e=>(!r||[e.name,e.id,e.description,...e.tags||[]].join(` `).toLowerCase().includes(r))&&(!a||e.category===a)),l=Math.max(1,Math.ceil(c.length/k)),u=Math.min(Ie[e.id]||0,l-1),m=c.slice(u*k,(u+1)*k),g=r||a?`${c.length}/${n.length}`:String(n.length);return(0,D.jsxs)(`div`,{className:`border border-dark-border rounded-lg overflow-hidden`,children:[(0,D.jsxs)(`div`,{className:`px-3 py-2 border-b border-dark-border bg-dark-surface flex items-center justify-between gap-2`,children:[(0,D.jsxs)(`div`,{className:`min-w-0`,children:[(0,D.jsxs)(`div`,{className:`font-medium flex items-center gap-2`,children:[e.builtin&&(0,D.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-blue/20 text-accent-blue`,children:d(`skills.presets`)}),(0,D.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,D.jsx)(`div`,{className:`text-xs text-dark-muted truncate`,children:e.url})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,D.jsx)(`span`,{className:`text-xs text-dark-muted whitespace-nowrap`,children:d(`skills.skillCount`,{count:g})}),(0,D.jsx)(`button`,{onClick:()=>nt(e.id),className:`p-1.5 rounded hover:bg-dark-hover`,title:d(`skills.refreshMarketplace`),children:(0,D.jsx)(f,{size:14})}),!e.builtin&&(0,D.jsx)(`button`,{onClick:()=>rt(e.id),className:`p-1.5 rounded hover:bg-dark-hover text-accent-red`,title:d(`skills.removeMarketplace`),children:(0,D.jsx)(h,{size:14})})]})]}),t?.error?(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-2 bg-accent-red/10 text-accent-red text-xs`,children:[(0,D.jsx)(`span`,{className:`min-w-0 truncate`,title:t.error,children:d(`skills.marketplaceError`,{error:t.error})}),(0,D.jsxs)(`button`,{onClick:()=>nt(e.id),className:`flex items-center gap-1 px-2 py-1 rounded bg-dark-surface border border-dark-border whitespace-nowrap shrink-0`,children:[(0,D.jsx)(f,{size:12}),d(`skills.retryMarket`)]})]}):n.length===0?(0,D.jsx)(`div`,{className:`text-xs text-dark-muted py-4 text-center`,children:d(`skills.noSkillsInMarket`)}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b border-dark-border/60 bg-dark-surface/40`,children:[(0,D.jsx)(`input`,{value:Re[e.id]||``,onChange:t=>ze(n=>({...n,[e.id]:t.target.value})),placeholder:d(`skills.marketFilterPlaceholder`),className:`flex-1 px-2.5 py-1.5 rounded-lg bg-dark-bg border border-dark-border outline-none focus:border-accent-blue text-xs`}),s.length>1&&(0,D.jsxs)(`select`,{value:Be[e.id]||``,onChange:t=>Ve(n=>({...n,[e.id]:t.target.value})),className:`px-2.5 py-1.5 rounded-lg bg-dark-bg border border-dark-border outline-none text-xs`,children:[(0,D.jsx)(`option`,{value:``,children:d(`skills.marketCategoryAll`)}),s.map(e=>(0,D.jsx)(`option`,{value:e,children:e},e))]})]}),(0,D.jsx)(de,{ids:c.map(e=>e.id),className:`px-3 pt-2`}),c.length===0?(0,D.jsx)(`div`,{className:`text-xs text-dark-muted py-4 text-center`,children:d(`skills.noSkillsInMarket`)}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-2 p-3`,children:m.map((t,n)=>{let r=me(e.id,t.id),i=Ee.includes(t.id),a=Ae.includes(r),s=Ne[r];return(0,D.jsx)(fe,{index:n,children:(0,D.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,D.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,D.jsxs)(`span`,{className:`font-medium text-sm truncate`,children:[(0,D.jsx)(O,{icon:t.icon}),` `,t.name]}),t.risk===`critical`&&(0,D.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red shrink-0`,children:d(`skills.riskCritical`)})]}),(0,D.jsxs)(`div`,{className:`text-xs text-dark-muted truncate`,children:[t.category,t.author?` · ${t.author}`:``,t.version?` · v${t.version}`:``]})]}),(0,D.jsxs)(`button`,{disabled:i||a,onClick:()=>ot(e.id,t.id),className:`flex items-center gap-1 px-2.5 py-1.5 rounded-lg text-xs font-medium whitespace-nowrap shrink-0 disabled:opacity-60 ${i?`bg-accent-green/20 text-accent-green`:`bg-accent-blue text-accent-fg hover:bg-accent-blue/80`}`,children:[i?(0,D.jsx)(p,{size:12}):a?(0,D.jsx)(f,{size:12,className:`animate-spin`}):(0,D.jsx)(o,{size:12}),d(i?`skills.installed`:a?`skills.installing`:`skills.installSkill`)]})]}),(a||Y[r])&&(0,D.jsx)(oe,{job:Y[r]?{status:a?`running`:s?`error`:`done`,stage:Y[r].stage,progress:Y[r].progress,logs:Y[r].logs}:null,error:s,testId:`skill-install-console`,diagnosis:{kind:`skill`,targetId:t.id,label:t.name,...Y[r]?.jobId?{jobId:Y[r].jobId}:{},...Y[r]?.logPath?{logPath:Y[r].logPath}:{}},onClose:()=>Fe(e=>{let t={...e};return delete t[r],t})}),t.description&&(0,D.jsx)(`p`,{className:`text-xs text-dark-muted line-clamp-2`,children:t.description}),s&&(0,D.jsx)(`p`,{className:`text-xs text-accent-red line-clamp-2`,children:s}),(0,D.jsx)(ue,{id:t.id,installed:i,className:`mt-auto`})]})},t.id)})}),l>1&&(0,D.jsxs)(`div`,{className:`flex items-center justify-center gap-3 pb-3 text-xs text-dark-muted`,children:[(0,D.jsxs)(`button`,{disabled:u<=0,onClick:()=>$e(e.id,u-1),className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40`,children:[(0,D.jsx)(ee,{size:14}),d(`skills.pagePrev`)]}),(0,D.jsx)(`span`,{className:`whitespace-nowrap`,children:d(`skills.pageOf`,{page:u+1,total:l})}),(0,D.jsxs)(`button`,{disabled:u>=l-1,onClick:()=>$e(e.id,u+1),className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40`,children:[d(`skills.pageNext`),(0,D.jsx)(i,{size:14})]})]})]})]})]},e.id)})]})]}),x===`installed`&&(0,D.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar pe-1`,children:Z.length===0?(0,D.jsxs)(`div`,{className:`text-center py-16 text-dark-muted`,children:[(0,D.jsx)(`p`,{className:`mb-1`,children:d(`skills.emptyInstalled`)}),(0,D.jsx)(`p`,{className:`text-xs mb-4`,children:d(`skills.emptyInstalledHint`)}),(0,D.jsx)(y,{variant:`accent`,leftIcon:(0,D.jsx)(a,{size:14}),onClick:()=>S(`marketplace`),children:d(`skills.browseMarket`)})]}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(de,{ids:Z.map(e=>e.id),className:`px-1 pb-2`}),(0,D.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-2`,children:Z.map((n,r)=>(0,D.jsx)(fe,{index:r,children:(0,D.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,D.jsxs)(`div`,{className:`min-w-0`,children:[(0,D.jsxs)(`div`,{className:`font-medium text-sm truncate`,children:[(0,D.jsx)(O,{icon:n.icon}),` `,n.name]}),(0,D.jsxs)(`div`,{className:`text-xs text-dark-muted truncate`,children:[n.id,` · `,n.category]})]}),(0,D.jsxs)(`button`,{onClick:()=>ft(n),className:`flex items-center gap-1 px-2 py-1 rounded text-xs font-medium whitespace-nowrap shrink-0 transition-colors ${n.enabled?`bg-accent-green/20 text-accent-green hover:bg-accent-green/30`:`bg-accent-red/20 text-accent-red hover:bg-accent-red/30`}`,title:n.enabled?d(`skills.disable`):d(`skills.enable`),children:[n.enabled?(0,D.jsx)(te,{size:14}):(0,D.jsx)(c,{size:14}),n.enabled?d(`skills.enabled`):d(`skills.disabled`)]})]}),n.description&&(0,D.jsx)(`p`,{className:`text-xs text-dark-muted line-clamp-2`,children:n.description}),(0,D.jsx)(ue,{id:n.id}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mt-auto`,children:[(0,D.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-bg border border-dark-border text-dark-muted truncate`,children:n.marketplace||n.source||d(`skills.marketplace`)}),(0,D.jsxs)(`div`,{className:`flex gap-2 shrink-0`,children:[e&&(0,D.jsxs)(`button`,{onClick:()=>e(n),className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-blue/15 text-accent-blue text-xs hover:bg-accent-blue/25 transition-colors`,title:d(`skills.useHint`),children:[(0,D.jsx)(g,{size:12}),d(`skills.use`)]}),(0,D.jsxs)(`button`,{onClick:()=>ut(n),className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border text-xs hover:bg-dark-hover`,children:[(0,D.jsx)(t,{size:12}),d(`skills.edit`)]}),(0,D.jsxs)(`button`,{onClick:()=>Xe(n.id),className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border text-accent-red text-xs hover:bg-accent-red/10`,children:[(0,D.jsx)(_,{size:12}),d(`skills.uninstall`)]})]})]})]})},n.id))})]})}),x===`workshop`&&(0,D.jsx)(se,{}),x===`mine`&&(0,D.jsxs)(`div`,{className:`flex-1 min-h-0 flex flex-col gap-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,D.jsx)(`input`,{value:N,onChange:e=>_e(e.target.value),placeholder:`Search skills`,className:`w-56 px-3 py-2 bg-dark-surface border border-dark-border rounded-lg text-sm outline-none focus:border-accent-blue`}),(0,D.jsx)(`span`,{className:`text-sm text-dark-muted shrink-0`,children:ct.length})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,D.jsx)(y,{variant:`accent`,leftIcon:(0,D.jsx)(l,{size:14}),onClick:lt,children:d(`skills.new`)}),(0,D.jsxs)(`button`,{onClick:()=>B(!0),className:`flex items-center gap-2 px-3 py-2 bg-dark-surface border border-dark-border rounded-lg`,children:[(0,D.jsx)(m,{size:14}),d(`skills.import`)]}),(0,D.jsxs)(`button`,{onClick:Q,className:`flex items-center gap-2 px-3 py-2 bg-dark-surface border border-dark-border rounded-lg`,children:[(0,D.jsx)(f,{size:14}),d(`skills.refresh`)]})]})]}),ct.length===0?(0,D.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center text-dark-muted gap-3`,children:[(0,D.jsx)(`p`,{children:d(`skills.noSkills`)}),(0,D.jsx)(y,{variant:`accent`,leftIcon:(0,D.jsx)(l,{size:14}),onClick:lt,children:d(`skills.new`)})]}):(0,D.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar pe-1`,children:(0,D.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 gap-3`,children:ct.map((n,r)=>(0,D.jsx)(fe,{index:r,children:(0,D.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 flex flex-col gap-2 bg-dark-surface`,children:[(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,D.jsxs)(`div`,{className:`min-w-0`,children:[(0,D.jsxs)(`div`,{className:`font-medium text-sm truncate`,children:[(0,D.jsx)(O,{icon:n.icon}),` `,n.name]}),(0,D.jsx)(`div`,{className:`text-xs text-dark-muted truncate`,children:n.id})]}),(0,D.jsxs)(`button`,{onClick:()=>ft(n),className:`flex items-center gap-1 px-2 py-1 rounded text-xs font-medium whitespace-nowrap shrink-0 transition-colors ${n.enabled?`bg-accent-green/20 text-accent-green hover:bg-accent-green/30`:`bg-accent-red/20 text-accent-red hover:bg-accent-red/30`}`,title:n.enabled?d(`skills.disable`):d(`skills.enable`),children:[n.enabled?(0,D.jsx)(te,{size:14}):(0,D.jsx)(c,{size:14}),n.enabled?d(`skills.enabled`):d(`skills.disabled`)]})]}),n.description&&(0,D.jsx)(`p`,{className:`text-xs text-dark-muted line-clamp-2`,children:n.description}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mt-auto`,children:[(0,D.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-bg border border-dark-border text-dark-muted truncate`,children:n.category}),(0,D.jsxs)(`div`,{className:`flex gap-2 shrink-0`,children:[(0,D.jsx)(ne,{slot:`skills`,id:n.id}),e&&(0,D.jsxs)(`button`,{onClick:()=>e(n),className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-blue/15 text-accent-blue text-xs hover:bg-accent-blue/25 transition-colors`,title:d(`skills.useHint`),children:[(0,D.jsx)(g,{size:12}),d(`skills.use`)]}),(0,D.jsxs)(`button`,{onClick:()=>ut(n),className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border text-xs hover:bg-dark-hover shrink-0`,children:[(0,D.jsx)(t,{size:12}),d(`skills.edit`)]})]})]})]})},n.id))})})]}),(0,D.jsx)(ae,{isOpen:ve,onClose:()=>P(!1),title:d(F?`skills.edit`:`skills.new`),size:`xl`,children:(0,D.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,D.jsx)(j,{label:d(`skills.fieldId`),value:R.id,onChange:e=>z(t=>({...t,id:e}))}),(0,D.jsx)(j,{label:d(`skills.fieldName`),value:R.name,onChange:e=>z(t=>({...t,name:e}))}),(0,D.jsx)(j,{label:d(`skills.fieldCategory`),value:R.category,onChange:e=>z(t=>({...t,category:e}))}),(0,D.jsx)(j,{label:d(`skills.fieldTrigger`),value:R.trigger,onChange:e=>z(t=>({...t,trigger:e}))}),(0,D.jsx)(j,{label:d(`skills.tags`),value:R.tags,onChange:e=>z(t=>({...t,tags:e}))}),(0,D.jsx)(j,{label:d(`skills.fieldTools`),value:R.requiredTools,onChange:e=>z(t=>({...t,requiredTools:e}))}),(0,D.jsxs)(`div`,{className:`col-span-2`,children:[(0,D.jsx)(`label`,{className:`block text-sm mb-1 text-dark-muted`,children:d(`skills.description`)}),(0,D.jsx)(`textarea`,{value:R.description,onChange:e=>z(t=>({...t,description:e.target.value})),className:`w-full h-20 px-3 py-2 rounded-lg bg-dark-bg border border-dark-border outline-none resize-none`})]}),(0,D.jsxs)(`div`,{className:`col-span-2`,children:[(0,D.jsx)(`label`,{className:`block text-sm mb-1 text-dark-muted`,children:d(`skills.systemPrompt`)}),(0,D.jsx)(`textarea`,{value:R.systemPrompt,onChange:e=>z(t=>({...t,systemPrompt:e.target.value})),className:`w-full h-40 px-3 py-2 rounded-lg bg-dark-bg border border-dark-border outline-none resize-none font-mono text-sm`})]}),xe&&(0,D.jsx)(`div`,{className:`col-span-2 text-sm text-accent-red`,children:xe}),(0,D.jsxs)(`div`,{className:`col-span-2 flex justify-end gap-2`,children:[(0,D.jsx)(y,{variant:`secondary`,onClick:()=>P(!1),children:d(`skills.cancel`)}),(0,D.jsx)(y,{variant:`accent`,leftIcon:(0,D.jsx)(t,{size:14}),loading:ye,onClick:dt,children:d(`skills.save`)})]})]})}),(0,D.jsx)(ae,{isOpen:Se,onClose:()=>B(!1),title:d(`skills.importTitle`),size:`md`,children:(0,D.jsxs)(`div`,{className:`space-y-3`,children:[(0,D.jsx)(`input`,{ref:H,type:`file`,accept:`.md,.skill.md,.txt`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&pt(t)}}),(0,D.jsxs)(`button`,{onClick:()=>H.current?.click(),disabled:Ce,className:`w-full py-6 border border-dashed border-dark-border rounded-lg flex items-center justify-center gap-2`,children:[(0,D.jsx)(r,{size:16}),d(`skills.chooseFile`)]}),Te&&(0,D.jsx)(`div`,{className:`text-sm text-accent-red`,children:Te}),(0,D.jsx)(`div`,{className:`text-xs text-dark-muted`,children:d(`skills.importHint`)})]})}),(0,D.jsx)(ie,{isOpen:X!==null,onClose:()=>Xe(null),onConfirm:()=>{X&&st(X)},title:d(`skills.uninstall`),message:d(`skills.uninstallConfirm`,{name:Z.find(e=>e.id===X)?.name||X||``}),confirmText:d(`skills.uninstall`),cancelText:d(`skills.cancel`),variant:`danger`})]})}function he(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function j({label:e,value:t,onChange:n}){return(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`label`,{className:`block text-sm mb-1 text-dark-muted`,children:e}),(0,D.jsx)(`input`,{value:t,onChange:e=>n(e.target.value),className:`w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border outline-none focus:border-accent-blue`})]})}export{A as SkillsView};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,A as n,B as r,Gn as i,V as a,Xn as o,Y as s,Yn as c,Zr as l,bn as ee,cr as u,dt as d,g as te,ii as f,in as ne,ir as p,it as re,jr as m,lr as ie,n as h,pt as ae,qt as oe,rt as se,v as ce,vr as g,yt as le}from"./icons-CittejKL.js";import{t as _}from"./useTranslation-2BGEBvJE.js";import{t as v}from"./Button-B43HsIQ3.js";import{t as y}from"./api-BW4-5gtM.js";import{I as ue}from"./markdown-DZQBOzWk.js";import{t as b}from"./cn-CoHJgTJ5.js";import{c as x,l as de}from"./common-CP2UB8TN.js";import{n as fe,r as pe}from"./useConfirm-kTv3x0H6.js";import{S as me,X as he,b as ge,x as _e,y as ve}from"./index-CxrzleFg.js";var S=e(f(),1),C=new Set([`read_file`,`grep`,`glob`,`list_dir`,`web_fetch`,`web_search`,`git_status`,`git_diff`,`git_log`,`code_intel_lookup`,`lsp_diagnostics`,`artifact_query`,`artifact_read`]),w=new Set([`write_file`,`edit_file`,`file_delete`,`apply_patch`,`bash`,`git_commit`,`git_apply_patch`,`notebook_edit`,`git_branch`,`git_pr`]);function T(e){let t=(e.metadata??{}).primitive?.options;return Array.isArray(t?.tools)?t.tools.map(String):null}var ye=new Set([`explore`,`plan`,`verify`]);function E(e){let t=T(e);if(t!==null)return t;let n=e.metadata??{},r=typeof n.role==`string`?n.role:e.type;return ye.has(r)?[]:null}function be(e){if(Se(e))return!1;let t=E(e);return t===null||t.length!==0&&t.some(e=>w.has(e))}var xe=new Set([`parallel`,`pipeline`,`phase`,`condition`,`loop`,`synthesize`,`checkpoint`,`retry`]);function Se(e){let t=(e.metadata??{}).primitive,n=typeof t?.kind==`string`?t.kind:void 0;return n===void 0?xe.has(e.type):n!==`agent`&&n!==`tool`}function D(e){let t=[];for(let n of e)t.push(n),Array.isArray(n.children)&&n.children.length&&t.push(...D(n.children));return t}function Ce(e){let t=new Map(e.map(e=>[e.id,e])),n=new Set,r=[],i=[...e];for(;i.length>0;){let e=i.filter(e=>(e.dependencies??[]).every(e=>n.has(e)||!t.has(e)));if(e.length===0){r.push(i);break}r.push(e);for(let t of e)n.add(t.id);i=i.filter(e=>!n.has(e.id))}return r}function we(e){return Ce(e).reduce((e,t)=>Math.max(e,t.length),1)}function Te(e){let t=e.children??[];if(t.length===0)return 1;let n=Math.max(...t.map(e=>Te(e)));return e.type===`parallel`?Math.max(t.length,n):Math.max(1,n)}function Ee(e){let t=we(e),n=e.reduce((e,t)=>Math.max(e,Te(t)),1);return Math.max(t,n)}function De(e,t=0){if(!e||!Array.isArray(e.nodes)||e.nodes.length===0)return{readonly:!0,risk:`low`,maxParallel:0,nodeCount:0,inputCount:t||0,roles:[]};let n=D(e.nodes),r=[],i=!0;for(let e of n){let t=typeof(e.metadata??{}).role==`string`?String(e.metadata.role):e.type;r.includes(t)||r.push(t),be(e)&&(i=!1)}return{readonly:i,risk:i?`low`:`medium`,maxParallel:Ee(e.nodes),nodeCount:n.length,inputCount:t||0,roles:r}}var O={parallel:`templates.nodeParallel`,pipeline:`templates.nodePipeline`,phase:`templates.nodePhase`,synthesize:`templates.nodeSynthesize`,condition:`templates.nodeCondition`,loop:`templates.nodeLoop`,checkpoint:`templates.nodeCheckpoint`},Oe={retry:`templates.nodeRetry`};function ke(e){let t=e.metadata?.primitive,n=typeof t?.kind==`string`?t.kind:void 0;return n&&Oe[n]?Oe[n]:O[e.type]}var k=ue(),A={explore:`info`,plan:`default`,execute:`success`,verify:`warning`,summarize:`info`,generic:`default`},Ae={explore:`templates.roleExplore`,plan:`templates.rolePlan`,execute:`templates.roleExecute`,verify:`templates.roleVerify`,summarize:`templates.roleSummarize`,generic:`templates.roleGeneric`},j={explore:`text-accent-blue`,plan:`text-dark-muted`,execute:`text-accent-green`,verify:`text-accent-yellow`,summarize:`text-dark-muted`};function je(e){let t=e.metadata?.role;return typeof t==`string`?t:e.type}function M({definition:e}){let{t}=_(),n=(0,S.useMemo)(()=>D(e.nodes||[]),[e.nodes]),i=(0,S.useMemo)(()=>Ce(n),[n]),a=(0,S.useMemo)(()=>new Map(n.map(e=>[e.id,e])),[n]);return i.length===0?(0,k.jsx)(`p`,{className:`text-xs text-dark-muted`,children:t(`templates.noNodes`)}):(0,k.jsxs)(`div`,{className:`space-y-0`,children:[i.map((e,n)=>(0,k.jsxs)(`div`,{className:`flex`,children:[(0,k.jsxs)(`div`,{className:`flex flex-col items-center shrink-0 w-6 me-2`,children:[n>0&&(0,k.jsx)(`span`,{className:`w-px h-3 bg-dark-border/60`}),e.length>1&&(0,k.jsx)(`span`,{className:`inline-flex items-center gap-0.5 mt-0.5 mb-0.5`,children:e.map((e,t)=>(0,k.jsx)(`span`,{className:`w-[2px] h-2 rounded bg-accent-blue/40`},t))}),n<i.length-1&&(0,k.jsx)(`span`,{className:`w-px flex-1 bg-dark-border/60 my-0.5`})]}),(0,k.jsx)(`div`,{className:b(`flex-1 min-w-0`,e.length>1?`grid grid-cols-2 gap-2 py-1 max-md:grid-cols-1`:`py-0.5`),children:e.map(e=>{let n=je(e),r=j[n]||`text-dark-muted`,i=(e.dependencies??[]).map(e=>a.get(e)?.title||e),o=ke(e);return(0,k.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg/60 overflow-hidden`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,k.jsx)(g,{size:12,className:b(`shrink-0`,r)}),(0,k.jsx)(`span`,{className:`text-xs font-medium text-dark-text truncate flex-1`,title:e.title,children:e.title}),(0,k.jsx)(x,{size:`sm`,variant:A[n]||`default`,children:t(o||Ae[n]||`templates.roleGeneric`)})]}),e.description&&(0,k.jsx)(`p`,{className:`px-2.5 pb-1.5 text-meta text-dark-muted leading-relaxed`,children:e.description}),i.length>0&&(0,k.jsx)(`div`,{className:`px-2.5 pb-1.5 flex items-center flex-wrap gap-1`,children:i.map(e=>(0,k.jsxs)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-hover text-dark-muted truncate max-w-[14rem]`,children:[`← `,e]},e))})]},e.id)})})]},n)),(0,k.jsxs)(`div`,{className:`flex items-center gap-3 mt-3 pt-2 border-t border-dark-border text-badge text-dark-muted max-md:flex-wrap`,children:[(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,k.jsx)(r,{size:11,className:`text-accent-yellow`}),` `,t(`templates.roleVerify`)]}),(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,k.jsx)(g,{size:11,className:`text-accent-blue`}),` `,t(`templates.roleExplore`)]})]})]})}function N(e){let t=e.metadata?.role;return typeof t==`string`?t:e.type}function Me({definition:e}){let{t}=_(),n=(0,S.useMemo)(()=>D(e.nodes||[]),[e.nodes]),{readonly:i,allowList:o,toolSet:s}=(0,S.useMemo)(()=>{let e=new Set,t=!1;for(let r of n){let n=T(r);if(n!==null){for(let t of n)e.add(t);n.some(e=>w.has(e))&&(t=!0)}else N(r)!==`explore`&&N(r)!==`plan`&&N(r)!==`verify`&&(t=!0)}let r=[...e].filter(e=>C.has(e));return{readonly:!t,allowList:r,toolSet:e}},[n]),c=(0,S.useMemo)(()=>[...w].filter(e=>!s.has(e)),[s]);return(0,k.jsxs)(`div`,{className:`space-y-3`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i?(0,k.jsx)(r,{size:16,className:`text-accent-green`}):(0,k.jsx)(a,{size:16,className:`text-accent-yellow`}),(0,k.jsx)(`span`,{className:`text-sm text-dark-text`,children:t(i?`templates.readonly`:`templates.writable`)}),(0,k.jsx)(x,{size:`sm`,variant:i?`success`:`warning`,children:t(i?`templates.riskLow`:`templates.riskMedium`)})]}),(0,k.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 max-md:grid-cols-1`,children:[(0,k.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,k.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-2`,children:t(`templates.allowDuringReplay`)}),o.length>0?(0,k.jsx)(`ul`,{className:`space-y-1`,children:o.map(e=>(0,k.jsxs)(`li`,{className:`flex items-center gap-1.5 text-xs text-dark-muted`,children:[(0,k.jsx)(m,{size:12,className:`text-accent-green shrink-0`}),` `,e]},e))}):(0,k.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:t(`templates.noToolsRestriction`)})]}),(0,k.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,k.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-2`,children:t(`templates.denyDuringReplay`)}),i?(0,k.jsx)(`ul`,{className:`space-y-1`,children:c.map(e=>(0,k.jsxs)(`li`,{className:`flex items-center gap-1.5 text-xs text-dark-muted`,children:[(0,k.jsx)(h,{size:12,className:`text-accent-red shrink-0`}),` `,e]},e))}):(0,k.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:`—`})]})]}),s.size>0&&(0,k.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,k.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-1.5`,children:t(`templates.toolWhitelist`)}),(0,k.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:[...s].map(e=>(0,k.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-hover text-dark-muted`,children:e},e))})]})]})}function Ne(e){let{t,detail:n,sourceLabelKey:s,detailTab:d,onTabChange:te,onReplay:f,onPreflight:m,onEdit:ie,onDelete:h,onExport:oe,onCopyId:g,onToggleAdvanced:_,onToggleVersions:y,onReRecord:ue,versions:de,historyView:fe,onLoadVersion:pe,onClearHistory:me,onRefresh:he,menuOpen:ge,setMenuOpen:_e,saveMsg:ve}=e,C=(0,S.useMemo)(()=>De(n.definition,n.inputs?.length??0),[n.definition,n.inputs]),w=s?t(s):n.source.type,T=C.inputCount,ye=[{id:`overview`,label:t(`templates.overviewTab`)},{id:`flow`,label:t(`templates.flowTab`)},{id:`permissions`,label:t(`templates.permissionsTab`)},{id:`history`,label:t(`templates.historyTab`)}];return(0,k.jsx)(`div`,{className:`flex-1 min-w-0 flex flex-col overflow-y-auto custom-scrollbar`,children:(0,k.jsxs)(`div`,{className:`p-5 space-y-4 max-md:p-3`,children:[(0,k.jsxs)(`div`,{className:`flex items-start gap-3 flex-wrap`,children:[(0,k.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,k.jsx)(`h2`,{className:`text-lg font-semibold text-dark-text truncate`,children:n.name}),(0,k.jsxs)(x,{variant:`info`,children:[`v`,n.version]}),n.status===`degraded`&&(0,k.jsxs)(x,{variant:`warning`,children:[`⚠ `,t(`templates.degradedBadge`)]}),(0,k.jsx)(x,{variant:n.source.type===`saved`?`success`:`default`,children:w})]}),n.description&&(0,k.jsx)(`p`,{className:`text-sm text-dark-muted mt-1`,children:n.description})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0 max-md:w-full max-md:flex-wrap max-md:justify-start`,children:[(0,k.jsx)(v,{variant:`accent`,leftIcon:(0,k.jsx)(ae,{className:`w-4 h-4`}),onClick:f,children:t(`templates.replay`)}),(0,k.jsx)(v,{variant:`secondary`,leftIcon:(0,k.jsx)(i,{className:`w-4 h-4`}),onClick:m,children:t(`templates.preflight`)}),(0,k.jsxs)(`button`,{onClick:ie,className:`px-3 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors inline-flex items-center gap-1.5`,children:[(0,k.jsx)(le,{className:`w-4 h-4`}),` `,t(`templates.edit`)]}),(0,k.jsxs)(`div`,{className:`relative`,children:[(0,k.jsx)(`button`,{onClick:()=>_e(!ge),className:`p-2 rounded-lg text-dark-muted hover:bg-dark-hover transition-colors`,"aria-label":t(`templates.more`),children:(0,k.jsx)(c,{className:`w-4 h-4`})}),ge&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>_e(!1)}),(0,k.jsxs)(`div`,{className:`absolute right-0 top-full mt-1 z-50 w-52 rounded-lg border border-dark-border bg-dark-overlay ui-surface-overlay shadow-pop p-1.5 space-y-0.5 text-compact`,children:[(0,k.jsx)(P,{icon:(0,k.jsx)(o,{size:13}),label:t(`templates.exportJson`),onClick:oe}),(0,k.jsx)(P,{icon:(0,k.jsx)(p,{size:13}),label:t(`templates.copyId`),onClick:g}),(0,k.jsx)(P,{icon:(0,k.jsx)(se,{size:13}),label:t(`templates.versionHistory`),onClick:y}),(0,k.jsx)(P,{icon:(0,k.jsx)(u,{size:13}),label:t(`templates.advancedJson`),onClick:_}),(0,k.jsx)(`div`,{className:`border-t border-dark-border my-1`}),(0,k.jsx)(P,{icon:(0,k.jsx)(ce,{size:13}),label:t(`templates.deleteTemplate`),onClick:h,danger:!0})]})]})]})]})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[n.category&&(0,k.jsxs)(x,{size:`sm`,variant:`info`,className:`gap-1`,children:[(0,k.jsx)(ne,{size:11}),n.category]}),(0,k.jsxs)(x,{size:`sm`,variant:C.readonly?`success`:`warning`,className:`gap-1`,children:[C.readonly?(0,k.jsx)(r,{size:11}):(0,k.jsx)(a,{size:11}),C.readonly?`${t(`templates.readonly`)} · ${t(`templates.riskLow`)}`:`${t(`templates.writable`)} · ${t(`templates.riskMedium`)}`]}),(0,k.jsxs)(x,{size:`sm`,variant:`default`,className:`gap-1`,children:[(0,k.jsx)(ee,{size:11}),C.maxParallel>1?t(`templates.parallelCount`,{n:C.nodeCount,p:C.maxParallel}):t(`templates.stepCount`,{n:C.nodeCount})]}),(0,k.jsxs)(x,{size:`sm`,variant:`default`,className:`gap-1`,children:[(0,k.jsx)(l,{size:11}),T>0?t(`templates.confirmCount`,{n:T}):t(`templates.confirmCountNone`)]}),ve&&(0,k.jsx)(`span`,{className:`text-xs text-dark-muted`,children:ve})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-1 border-b border-dark-border pb-1.5`,children:[ye.map(e=>(0,k.jsx)(`button`,{onClick:()=>te(e.id),className:b(`px-3 py-1.5 rounded-md text-xs transition-colors`,d===e.id?`bg-accent-blue/10 text-accent-blue font-medium`:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`),children:e.label},e.id)),(0,k.jsx)(`div`,{className:`ms-auto flex items-center gap-1`,children:(0,k.jsx)(`button`,{onClick:he,className:`p-1.5 rounded-md text-dark-muted hover:text-dark-text hover:bg-dark-hover`,title:t(`templates.refresh`),children:(0,k.jsx)(re,{className:`w-3.5 h-3.5`})})})]}),(0,k.jsxs)(`div`,{children:[d===`overview`&&(0,k.jsx)(F,{t,detail:n,meta:C,inputCount:T}),d===`flow`&&(0,k.jsx)(M,{definition:n.definition}),d===`permissions`&&(0,k.jsx)(Me,{definition:n.definition}),d===`history`&&(0,k.jsx)(I,{t,versions:de,currentVersion:n.version,historyView:fe,onLoadVersion:pe,onClearHistory:me,onReRecord:ue})]})]})})}function P({icon:e,label:t,onClick:n,danger:r}){return(0,k.jsxs)(`button`,{onClick:n,className:b(`w-full flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-dark-hover text-start transition-colors`,r?`text-accent-red hover:text-accent-red`:`text-dark-muted hover:text-dark-text`),children:[e,` `,t]})}function F({t:e,detail:t,meta:n,inputCount:r}){let i=t.inputs??[],a=t.outputs??[];return(0,k.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 max-md:grid-cols-1`,children:[(0,k.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,k.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-2`,children:e(`templates.inputsNeeded`)}),r>0?(0,k.jsx)(`ul`,{className:`space-y-1.5`,children:i.map(e=>(0,k.jsxs)(`li`,{className:`flex items-center justify-between gap-2 text-xs`,children:[(0,k.jsx)(`span`,{className:`text-dark-text truncate`,children:e.label||e.name}),e.required&&(0,k.jsx)(`span`,{className:`text-accent-red shrink-0`,children:`*`})]},e.name))}):(0,k.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:e(`templates.confirmCountNone`)})]}),(0,k.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,k.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-2`,children:e(`templates.outputsProduced`)}),a.length>0?(0,k.jsx)(`ul`,{className:`space-y-1.5`,children:a.map(e=>(0,k.jsxs)(`li`,{className:`flex items-center justify-between gap-2 text-xs`,children:[(0,k.jsx)(`span`,{className:`text-dark-text truncate`,children:e.label||e.name}),e.kind&&(0,k.jsx)(x,{size:`sm`,children:e.kind})]},e.name))}):(0,k.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:e(`templates.noOutputsDeclared`)})]}),(0,k.jsxs)(`div`,{className:`col-span-2 text-meta text-dark-muted/70 max-md:col-span-1`,children:[e(`templates.replayNewSession`),` · `,n.readonly?e(`templates.readonlyHint`):e(`templates.writable`)]})]})}function I({t:e,versions:t,currentVersion:n,historyView:r,onLoadVersion:i,onClearHistory:a,onReRecord:o}){return(0,k.jsxs)(`div`,{className:`space-y-2`,children:[t.length===0&&(0,k.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:e(`templates.noVersions`)}),[...t].reverse().map(t=>(0,k.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-dark-border px-3 py-2 max-md:flex-wrap`,children:[(0,k.jsxs)(x,{variant:t===n?`success`:`default`,children:[`v`,t]}),t===n&&(0,k.jsx)(`span`,{className:`text-meta text-accent-green`,children:e(`templates.statusReady`)}),(0,k.jsx)(`span`,{className:`text-meta text-dark-muted/60`,children:t===n?e(`templates.reRecordHint`,{v:t}):``}),(0,k.jsxs)(`div`,{className:`ms-auto flex items-center gap-1.5`,children:[(0,k.jsx)(`button`,{onClick:()=>i(t),className:`text-meta px-2 py-1 rounded border border-dark-border hover:border-accent-blue/50 transition-colors`,children:e(`templates.compare`)}),t!==n&&(0,k.jsxs)(`button`,{onClick:()=>o(t),className:`text-meta px-2 py-1 rounded border border-accent-blue/40 text-accent-blue hover:bg-accent-blue/10 transition-colors inline-flex items-center gap-1`,children:[(0,k.jsx)(re,{className:`w-3 h-3`}),` `,e(`templates.reRecordAsNew`)]})]})]},t)),r&&(0,k.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,k.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[e(`templates.viewingVersion`),` v`,r.version]}),(0,k.jsx)(`button`,{onClick:a,className:`text-meta text-dark-muted hover:text-dark-text`,children:e(`templates.cancel`)})]}),(0,k.jsx)(`pre`,{className:`p-3 rounded-lg bg-dark-bg text-badge font-mono text-dark-muted max-h-60 overflow-y-auto custom-scrollbar max-md:overflow-x-auto`,children:JSON.stringify({version:r.version,inputs:r.inputs,definition:r.definition},null,2)})]})]})}var L={explore:`info`,plan:`default`,execute:`success`,verify:`warning`,summarize:`info`,generic:`default`},R={explore:`templates.roleExplore`,plan:`templates.rolePlan`,execute:`templates.roleExecute`,verify:`templates.roleVerify`,summarize:`templates.roleSummarize`,generic:`templates.roleGeneric`};function z(e){let t=e.metadata?.role;return typeof t==`string`?t:e.type}function B(e){let t=new Map(e.map(e=>[e.id,e])),n=new Set,r=[],i=[...e];for(;i.length>0;){let e=i.filter(e=>(e.dependencies??[]).every(e=>n.has(e)||!t.has(e)));if(e.length===0){r.push(...i);break}for(let t of e)r.push(t),n.add(t.id);i=i.filter(e=>!n.has(e.id))}return r}function V(e){let t=[];for(let n of e)t.push(n),Array.isArray(n.children)&&n.children.length&&t.push(...V(n.children));return t}function Pe(e,t){for(let n of e)t.set(n.id,t.size+1),Array.isArray(n.children)&&n.children.length&&Pe(n.children,t)}function Fe({nodes:e,allById:t,indexById:n}){let{t:r}=_();return(0,k.jsx)(k.Fragment,{children:e.map((i,a)=>{let o=z(i),s=L[o]||`default`,c=ke(i),l=R[o],u=c?r(c):l?r(l):o,d=(i.dependencies??[]).map(e=>t.get(e)?.title||e).filter((e,t,n)=>n.indexOf(e)===t);return(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:`flex gap-2.5`,children:[(0,k.jsxs)(`div`,{className:`flex flex-col items-center shrink-0`,children:[(0,k.jsx)(`span`,{className:`w-6 h-6 rounded-full grid place-items-center bg-dark-border/60 text-dark-muted text-badge font-semibold shrink-0`,children:n.get(i.id)??a+1}),a<e.length-1&&(0,k.jsx)(`span`,{className:`w-px flex-1 bg-dark-border/70 my-0.5`})]}),(0,k.jsxs)(`div`,{className:`flex-1 min-w-0 mb-1.5 rounded-lg border border-dark-border bg-dark-bg/60 overflow-hidden`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,k.jsx)(g,{size:12,className:b(`shrink-0`,o===`verify`?`text-accent-yellow`:o===`explore`?`text-accent-blue`:`text-dark-muted`)}),(0,k.jsx)(`span`,{className:`text-xs font-medium text-dark-text truncate flex-1`,children:i.title}),(0,k.jsx)(x,{size:`sm`,variant:s,children:u})]}),i.description&&(0,k.jsx)(`p`,{className:`px-2.5 pb-1.5 text-meta text-dark-muted leading-relaxed`,children:i.description}),d.length>0&&(0,k.jsxs)(`div`,{className:`px-2.5 pb-2 flex items-center flex-wrap gap-1`,children:[(0,k.jsx)(ee,{size:11,className:`text-dark-muted/60 shrink-0`}),d.map(e=>(0,k.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-hover text-dark-muted truncate max-w-[16rem]`,children:e},e))]})]})]}),Array.isArray(i.children)&&i.children.length>0&&(0,k.jsx)(`div`,{className:`ms-3 ps-3 border-s-2 border-dark-border/60`,children:(0,k.jsx)(Fe,{nodes:i.children,allById:t,indexById:n})})]},i.id)})})}function Ie({definition:e}){let{t}=_(),n=(0,S.useMemo)(()=>B(e.nodes||[]),[e.nodes]),r=(0,S.useMemo)(()=>new Map(V(e.nodes||[]).map(e=>[e.id,e])),[e.nodes]),i=(0,S.useMemo)(()=>{let t=new Map;return Pe(e.nodes||[],t),t},[e.nodes]);return n.length===0?(0,k.jsx)(`p`,{className:`text-xs text-dark-muted`,children:t(`templates.noNodes`)}):(0,k.jsx)(`div`,{className:`space-y-0`,children:(0,k.jsx)(Fe,{nodes:n,allById:r,indexById:i})})}function H(e){let t=[];for(let n of e)t.push(n),Array.isArray(n.children)&&n.children.length&&t.push(...H(n.children));return t}function Le(e,t){let n=new Set,r=(e,i)=>{for(let a of e){let e=i||a.id===t;e&&n.add(a.id),Array.isArray(a.children)&&a.children.length&&r(a.children,e)}};return r(e,!1),n}function Re(e){let t=new Set(H(e).map(e=>e.id)),n=1;for(;t.has(`task-${n}`);)n++;return`task-${n}`}function U(e,t,n){return e.map(e=>e.id===t?{...e,...n}:Array.isArray(e.children)&&e.children.length?{...e,children:U(e.children,t,n)}:e)}function ze(e,t){let n=e=>e.filter(e=>e.id!==t).map(e=>({...e,dependencies:(e.dependencies??[]).filter(e=>e!==t),children:Array.isArray(e.children)&&e.children.length?n(e.children):e.children}));return n(e)}function W(e,t,n){let r=new Date().toISOString(),i={id:Re(e),title:n?.title??``,description:n?.description??``,type:n?.type??`task`,status:`pending`,dependencies:[],priority:5,createdAt:r,updatedAt:r};if(!t)return[...e,i];let a=e=>e.map(e=>e.id===t?{...e,children:[...Array.isArray(e.children)?e.children:[],i]}:Array.isArray(e.children)&&e.children.length?{...e,children:a(e.children)}:e);return a(e)}var Be=[`task`,`agent`,`parallel`,`pipeline`,`phase`,`condition`,`loop`,`checkpoint`],G=new Set([`parallel`,`pipeline`,`phase`,`condition`,`loop`,`checkpoint`]),Ve=[`string`,`number`,`select`,`boolean`,`folder`,`connector`];function K(e){return O[e]??(e===`agent`?`templates.editorTypeAgent`:`templates.editorTypeTask`)}function He(e,t){return G.has(t)?e(O[t]??t):e(K(t))}function q(e){let{t}=_(),{node:n,index:r,depth:i,depOptions:a,definition:o,onChange:s,onRemove:c,onAddChild:l,onDepAdd:u,onDepRemove:te}=e,f=n.dependencies??[],ne=Array.isArray(n.children)&&n.children.length>0,p=G.has(n.type);return(0,k.jsxs)(`div`,{className:Ue(i)+` rounded-lg border border-dark-border bg-dark-bg/60`,"data-node-id":n.id,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5 max-md:flex-wrap`,children:[(0,k.jsx)(`span`,{className:`text-badge text-dark-muted/70 shrink-0 w-4 text-end`,children:r}),(0,k.jsx)(`input`,{value:n.title,onChange:e=>s({title:e.target.value}),placeholder:t(`templates.editorNodeTitlePlaceholder`),"aria-label":t(`templates.editorNodeTitlePlaceholder`),className:`flex-1 min-w-[120px] px-2 py-1 rounded-md bg-dark-surface border border-dark-border text-xs text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`}),(0,k.jsx)(`span`,{className:`text-badge font-mono text-dark-muted/50 shrink-0 hidden xl:inline`,title:n.id,children:n.id}),(0,k.jsx)(`select`,{value:n.type,onChange:e=>s({type:e.target.value}),"aria-label":t(`templates.editorInputType`),className:`shrink-0 px-1.5 py-1 rounded-md bg-dark-surface border border-dark-border text-meta text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`,children:Be.map(e=>(0,k.jsx)(`option`,{value:e,children:He(t,e)},e))}),(0,k.jsx)(`button`,{onClick:c,className:`p-1 rounded-md text-dark-muted hover:text-accent-red hover:bg-dark-hover transition-colors shrink-0`,title:t(`templates.editorDeleteNode`),"aria-label":`${t(`templates.editorDeleteNode`)} ${n.title||n.id}`,children:(0,k.jsx)(ce,{size:12})})]}),(0,k.jsxs)(`div`,{className:`px-2.5 pb-2 space-y-1.5`,children:[(0,k.jsx)(`textarea`,{value:n.description,onChange:e=>s({description:e.target.value}),rows:2,placeholder:t(`templates.editorNodeDescPlaceholder`),"aria-label":`${t(`templates.editorNodeDescPlaceholder`)} ${n.id}`,className:`w-full px-2 py-1 rounded-md bg-dark-surface border border-dark-border text-meta text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue placeholder:text-dark-muted/40`}),(0,k.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,k.jsx)(ee,{size:11,className:`text-dark-muted/60 shrink-0`}),(0,k.jsx)(`span`,{className:`text-meta text-dark-muted shrink-0`,children:t(`templates.editorDepsLabel`)}),f.length===0&&(0,k.jsx)(`span`,{className:`text-meta text-dark-muted/50`,children:t(`templates.editorDepsNone`)}),f.map(e=>{let n=V(o.nodes??[]).find(t=>t.id===e);return(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-meta px-1.5 py-0.5 rounded bg-accent-blue/10 text-accent-blue`,children:[n?.title||e,(0,k.jsx)(`button`,{onClick:()=>te(e),className:`hover:text-accent-red`,"aria-label":`${t(`templates.editorDepsRemove`)} ${n?.title||e}`,children:`✕`})]},e)}),(0,k.jsxs)(`select`,{value:``,onChange:e=>{e.target.value&&u(e.target.value)},"aria-label":t(`templates.editorDepsAdd`),className:`ms-auto px-1.5 py-0.5 rounded-md bg-dark-surface border border-dark-border text-meta text-dark-muted focus:outline-none focus:ring-1 focus:ring-accent-blue`,children:[(0,k.jsx)(`option`,{value:``,children:t(`templates.editorDepsAdd`)}),a.filter(e=>!f.includes(e.id)).map(e=>(0,k.jsx)(`option`,{value:e.id,children:e.title||e.id},e.id))]}),(0,k.jsxs)(`label`,{className:`ms-auto inline-flex items-center gap-1 text-meta text-dark-muted`,children:[t(`templates.editorPriority`),(0,k.jsx)(`input`,{type:`number`,value:n.priority,onChange:e=>s({priority:Number(e.target.value)||0}),className:`w-14 px-1.5 py-0.5 rounded-md bg-dark-surface border border-dark-border text-meta text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]})]})]}),(p||ne)&&(0,k.jsxs)(`div`,{className:`ms-3 ps-3 pb-2 border-s-2 border-dark-border/60`,children:[ne&&(0,k.jsx)(J,{nodes:n.children,depth:i+1,definition:o,onChangeNodes:e=>s({children:e})}),(0,k.jsxs)(`button`,{onClick:l,className:`mt-1 inline-flex items-center gap-1 text-meta text-dark-muted hover:text-accent-blue transition-colors`,children:[(0,k.jsx)(d,{size:11}),` `,t(`templates.editorAddChild`)]})]})]})}function Ue(e){return e>0?`ms-3`:``}function J({nodes:e,depth:t,definition:n,onChangeNodes:r}){let{t:i}=_(),a=(0,S.useMemo)(()=>V(n.nodes??[]),[n.nodes]);return(0,k.jsxs)(`div`,{className:`space-y-2`,children:[e.map((i,o)=>{let s=Le(n.nodes??[],i.id),c=a.filter(e=>!s.has(e.id));return(0,k.jsx)(`div`,{children:(0,k.jsx)(q,{node:i,index:o+1,depth:t,depOptions:c,definition:n,onChange:t=>r(U(e,i.id,t)),onRemove:()=>r(ze(e,i.id)),onAddChild:()=>r(W(e,i.id)),onDepAdd:t=>r(U(e,i.id,{dependencies:[...i.dependencies??[],t]})),onDepRemove:t=>r(U(e,i.id,{dependencies:(i.dependencies??[]).filter(e=>e!==t)}))})},i.id)}),e.length===0&&(0,k.jsx)(`p`,{className:`text-meta text-dark-muted/50`,children:i(`templates.editorEmptyLevel`)})]})}function We({inputs:e,onChange:t}){let{t:n}=_(),r=(n,r)=>{t(e.map((e,t)=>t===n?{...e,...r}:e))},i=()=>{let n=new Set(e.map(e=>e.name)),r=1;for(;n.has(`input_${r}`);)r++;t([...e,{name:`input_${r}`,label:``,type:`string`}])},a=n=>t(e.filter((e,t)=>t!==n));return(0,k.jsxs)(`div`,{className:`border border-dark-border rounded-lg overflow-hidden`,children:[(0,k.jsxs)(`div`,{className:`px-3 py-2 bg-dark-surface border-b border-dark-border flex items-center gap-2`,children:[(0,k.jsx)(`span`,{className:`text-xs font-semibold text-dark-text`,children:n(`templates.editorInputsTitle`)}),(0,k.jsx)(`span`,{className:`ms-auto text-badge text-dark-muted`,children:n(`templates.confirmCount`,{n:e.length})})]}),(0,k.jsxs)(`div`,{className:`p-2.5 space-y-1.5`,children:[e.length===0&&(0,k.jsx)(`p`,{className:`text-meta text-dark-muted/50`,children:n(`templates.editorInputsEmpty`)}),e.map((e,t)=>(0,k.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,k.jsx)(`input`,{value:e.name,onChange:e=>r(t,{name:e.target.value}),placeholder:n(`templates.editorInputName`),"aria-label":`${n(`templates.editorInputName`)} ${t+1}`,className:`w-28 px-2 py-1 rounded-md bg-dark-surface border border-dark-border text-meta font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`}),(0,k.jsx)(`input`,{value:e.label,onChange:e=>r(t,{label:e.target.value}),placeholder:n(`templates.editorInputLabel`),"aria-label":`${n(`templates.editorInputLabel`)} ${t+1}`,className:`flex-1 min-w-[80px] px-2 py-1 rounded-md bg-dark-surface border border-dark-border text-meta text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`}),(0,k.jsx)(`select`,{value:e.type,onChange:e=>r(t,{type:e.target.value}),"aria-label":`${n(`templates.editorInputType`)} ${t+1}`,className:`px-1.5 py-1 rounded-md bg-dark-surface border border-dark-border text-meta text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`,children:Ve.map(e=>(0,k.jsx)(`option`,{value:e,children:e},e))}),(0,k.jsxs)(`label`,{className:`inline-flex items-center gap-1 text-meta text-dark-muted shrink-0`,children:[(0,k.jsx)(`input`,{type:`checkbox`,checked:!!e.required,onChange:e=>r(t,{required:e.target.checked}),"aria-label":`${n(`templates.editorInputRequired`)} ${t+1}`}),n(`templates.editorInputRequired`)]}),(0,k.jsx)(`input`,{value:e.default===void 0||e.default===null?``:String(e.default),onChange:n=>{let i=n.target.value;i===``?r(t,{default:void 0}):e.type===`number`&&Number.isFinite(Number(i))?r(t,{default:Number(i)}):e.type===`boolean`?r(t,{default:i===`true`}):r(t,{default:i})},placeholder:n(`templates.editorInputDefault`),"aria-label":`${n(`templates.editorInputDefault`)} ${t+1}`,className:`w-24 px-2 py-1 rounded-md bg-dark-surface border border-dark-border text-meta text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`}),(0,k.jsx)(`button`,{onClick:()=>a(t),className:`p-1 rounded-md text-dark-muted hover:text-accent-red hover:bg-dark-hover transition-colors`,title:n(`templates.editorInputRemove`),"aria-label":`${n(`templates.editorInputRemove`)} ${e.name||t+1}`,children:(0,k.jsx)(ce,{size:12})})]},t)),(0,k.jsxs)(`button`,{onClick:i,className:`inline-flex items-center gap-1 text-meta text-dark-muted hover:text-accent-blue transition-colors`,children:[(0,k.jsx)(d,{size:11}),` `,n(`templates.editorInputsAdd`)]})]})]})}function Ge({definition:e,inputs:t,issues:n,onDefinitionChange:r,onInputsChange:i}){let{t:a}=_(),o=e.nodes??[],s=(0,S.useMemo)(()=>V(o),[o]),c=t=>{r({...e,nodes:t,updatedAt:new Date().toISOString()})};return(0,k.jsxs)(`div`,{className:`grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4 items-start`,children:[(0,k.jsxs)(`section`,{className:`border border-dark-border rounded-lg overflow-hidden`,children:[(0,k.jsxs)(`div`,{className:`px-3 py-2 bg-dark-surface border-b border-dark-border flex items-center gap-2`,children:[(0,k.jsx)(ne,{size:13,className:`text-accent-blue shrink-0`}),(0,k.jsx)(`span`,{className:`text-xs font-semibold text-dark-text`,children:a(`templates.editorNodesTitle`)}),(0,k.jsx)(`span`,{className:`text-badge text-dark-muted`,children:a(`templates.editorNodeCount`,{n:s.length})}),(0,k.jsxs)(`button`,{onClick:()=>c(W(o)),className:`ms-auto inline-flex items-center gap-1 text-meta px-2 py-1 rounded-md border border-dark-border text-dark-muted hover:text-accent-blue hover:border-accent-blue/40 transition-colors`,children:[(0,k.jsx)(d,{size:11}),` `,a(`templates.editorAddNode`)]})]}),(0,k.jsxs)(`div`,{className:`p-2.5 space-y-2`,children:[(0,k.jsx)(J,{nodes:o,depth:0,definition:e,onChangeNodes:c}),o.length===0&&(0,k.jsxs)(`button`,{onClick:()=>c(W(o)),className:`w-full border border-dashed border-dark-border rounded-lg py-3 text-xs text-dark-muted hover:text-accent-blue hover:border-accent-blue/40 transition-colors`,children:[(0,k.jsx)(d,{size:12,className:`inline me-1`}),` `,a(`templates.editorAddNode`)]})]})]}),(0,k.jsxs)(`section`,{className:`space-y-3 min-w-0`,children:[(0,k.jsxs)(`div`,{className:`border border-dark-border rounded-lg overflow-hidden`,children:[(0,k.jsx)(`div`,{className:`px-3 py-2 bg-dark-surface border-b border-dark-border`,children:(0,k.jsx)(`span`,{className:`text-xs font-semibold text-dark-text`,children:a(`templates.editorPreviewTitle`)})}),(0,k.jsx)(`div`,{className:`p-2.5`,children:(0,k.jsx)(Ie,{definition:e})})]}),n.length>0&&(0,k.jsxs)(`div`,{className:`rounded-lg border border-accent-yellow/40 bg-accent-yellow/5 px-3 py-2 space-y-1`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs text-accent-yellow font-medium`,children:[(0,k.jsx)(te,{size:13}),` `,a(`templates.editorValidationIssues`)]}),n.map((e,t)=>(0,k.jsx)(`div`,{className:`text-meta text-dark-muted`,children:a(e.key,e.params)},t))]}),n.length===0&&s.length>0&&(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(x,{size:`sm`,variant:`success`,children:a(`templates.editorValidationOk`)}),(0,k.jsx)(`span`,{className:`text-meta text-dark-muted/60`,children:a(`templates.editorAdvancedSyncHint`)})]}),(0,k.jsx)(We,{inputs:t,onChange:i})]})]})}var Ke=/<<input:([A-Za-z][A-Za-z0-9_]*)>>/g;function qe(e){let t=[];for(let n of e)n&&typeof n==`object`&&(t.push(n),Array.isArray(n.children)&&n.children.length&&t.push(...qe(n.children)));return t}function Je(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map(e.map(e=>[e.id,0]));for(let r of e)for(let e of r.dependencies||[])t.has(e)&&n.set(r.id,(n.get(r.id)??0)+1);let r=e.filter(e=>(n.get(e.id)??0)===0).map(e=>e.id),i=0;for(;r.length;){let t=r.pop();i++;for(let i of e)if((i.dependencies||[]).includes(t)){let e=(n.get(i.id)??0)-1;n.set(i.id,e),e===0&&r.push(i.id)}}return i<e.length}function Ye(e,t){let n=[];if(!e||!Array.isArray(e.nodes)||e.nodes.length===0)return n.push({key:`templates.validateNoNodes`}),n;let r=qe(e.nodes);if(r.length===0)return n.push({key:`templates.validateNoNodes`}),n;let i=new Set;for(let e of r)typeof e.id!=`string`||e.id===``?n.push({key:`templates.validateNodeNoId`}):(i.has(e.id)&&n.push({key:`templates.validateDupNodeId`,params:{id:e.id}}),i.add(e.id));let a=new Map(r.map(e=>[e.id,e]));for(let e of r)for(let t of e.dependencies||[])a.has(t)||n.push({key:`templates.validateDanglingDep`,params:{node:e.id,dep:t}});Je(r)&&n.push({key:`templates.validateCycle`});let o=new Set((t??[]).map(e=>e?.name).filter(e=>typeof e==`string`)),s=new Set;for(let e of r)for(let t of[e.title,e.description])if(typeof t==`string`)for(let e of t.matchAll(Ke)){let t=e[1];t&&!o.has(t)&&s.add(t)}for(let e of s)n.push({key:`templates.validateUndeclaredInput`,params:{name:e}});return n}function Xe(e,t,n){let r=new Date().toISOString();return{id:`wf_${Date.now()}`,title:e,description:``,nodes:[{id:`task-1`,title:t,description:n,type:`task`,status:`pending`,dependencies:[],priority:5,createdAt:r,updatedAt:r}],createdAt:r,updatedAt:r}}function Y(e){let t=(e.nodes??[]).map(e=>({...e,dependencies:Array.isArray(e.dependencies)?e.dependencies:[]}));return{...e,nodes:t}}var X=`__all__`;function Ze(e,t){if(!t)return;let n={};for(let r of e.inputs??[])r.type===`folder`&&r.default===void 0&&t&&(n[r.name]={value:t,label:t});return Object.keys(n).length>0?n:void 0}function Qe({t:e,detail:t,workspaceDir:n}){let i=(0,S.useMemo)(()=>De(t.definition,t.inputs?.length??0),[t.definition,t.inputs]);return i.nodeCount===0?null:(0,k.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg/50 px-3 py-2.5 space-y-1.5`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap text-xs`,children:[(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1 font-medium text-dark-text`,children:[(0,k.jsx)(r,{size:13,className:i.readonly?`text-accent-green`:`text-accent-yellow`}),i.readonly?e(`templates.readonly`):e(`templates.writable`),` · `,i.readonly?e(`templates.riskLow`):e(`templates.riskMedium`)]}),(0,k.jsx)(`span`,{className:`text-dark-muted`,children:i.maxParallel>1?e(`templates.parallelCount`,{n:i.nodeCount,p:i.maxParallel}):e(`templates.stepCount`,{n:i.nodeCount})}),(0,k.jsx)(`span`,{className:`text-dark-muted`,children:i.inputCount>0?e(`templates.confirmCount`,{n:i.inputCount}):e(`templates.confirmCountNone`)})]}),n&&!i.readonly&&(0,k.jsxs)(`div`,{className:`text-meta text-dark-muted/70 truncate`,title:n,children:[e(`templates.writable`),`: `,n]})]})}var $e={saved:`templates.sourceSaved`,script:`templates.sourceScript`,handwritten:`templates.sourceHandwritten`};function et({onLaunch:e,workspaceDir:o}){let{t:c}=_(),[te,f]=(0,S.useState)([]),[p,m]=(0,S.useState)(null),[h,g]=(0,S.useState)(null),[le,ue]=(0,S.useState)(!1),[C,w]=(0,S.useState)(``),[T,ye]=(0,S.useState)(``),[E,be]=(0,S.useState)(X),[xe,Se]=(0,S.useState)(``),[D,Ce]=(0,S.useState)(``),[we,Te]=(0,S.useState)(``),[Ee,De]=(0,S.useState)(``),[O,Oe]=(0,S.useState)(``),[ke,A]=(0,S.useState)(!1),[Ae,j]=(0,S.useState)(``),[je,M]=(0,S.useState)(!1),[N,Me]=(0,S.useState)([]),[P,F]=(0,S.useState)(!1),[I,L]=(0,S.useState)(null),[R,z]=(0,S.useState)(null),[B,V]=(0,S.useState)(null),[Pe,Fe]=(0,S.useState)(!1),[Ie,H]=(0,S.useState)(!1),[Le,Re]=(0,S.useState)(null),[U,ze]=(0,S.useState)(!1),W=(0,S.useRef)(p);W.current=p;let[Be,G]=(0,S.useState)(!0),[Ve,K]=(0,S.useState)(`overview`),[He,q]=(0,S.useState)(!1),[Ue,J]=(0,S.useState)([]),[We,Ke]=(0,S.useState)(null),qe=()=>{h&&(J(h.inputs??[]),Ke(Y(h.definition))),G(!1)},Je=e=>{Ke(e),Oe(JSON.stringify(e,null,2)),A(!0),j(``)},et=e=>{J(e),De(JSON.stringify(e,null,2)),A(!0),j(``)},tt=e=>{try{let t=JSON.parse(e);t&&typeof t==`object`&&Array.isArray(t.nodes)&&Ke(Y(t))}catch{}},nt=e=>{try{let t=JSON.parse(e);Array.isArray(t)&&J(t)}catch{}},rt=(0,S.useMemo)(()=>Ye(We??void 0,Ue),[We,Ue]),[it,at]=(0,S.useState)(!1),[ot,st]=(0,S.useState)(``),[ct,lt]=(0,S.useState)(``),[ut,dt]=(0,S.useState)(`general`),[ft,pt]=(0,S.useState)(`[]`),[mt,ht]=(0,S.useState)(()=>JSON.stringify(Xe(c(`templates.starterTitle`),c(`templates.starterNodeTitle`),c(`templates.starterNodeDesc`)),null,2)),[gt,Z]=(0,S.useState)(``),[_t,vt]=(0,S.useState)([]),[yt,bt]=(0,S.useState)(null),[xt,St]=(0,S.useState)(!1),[Ct,wt]=(0,S.useState)(!1),[Tt,Et]=(0,S.useState)(``),[Dt,Ot]=(0,S.useState)(!1),[kt,Q]=(0,S.useState)(``),At=()=>{let e=Xe(c(`templates.starterTitle`),c(`templates.starterNodeTitle`),c(`templates.starterNodeDesc`));st(``),lt(``),dt(`general`),pt(`[]`),ht(JSON.stringify(e,null,2)),bt(e),vt([]),St(!1),Z(``),wt(!1),Et(``),Ot(!1),Q(``),at(!0)},jt=async()=>{if(!Tt.trim())Q(c(`templates.aiPromptRequired`));else{Ot(!0),Q(``);try{let e=await y.workflows.synthesize(Tt.trim());if(e.success&&e.data){let t=Y(e.data);st(e.data.title||``),lt(e.data.description||``),bt(t),vt([]),pt(`[]`),ht(JSON.stringify(t,null,2)),St(!1),wt(!1),Z(``)}else Q(e.error||c(`templates.aiDraftFailed`))}catch(e){Q(e instanceof Error?e.message:String(e))}finally{Ot(!1)}}},Mt=e=>{bt(e),ht(JSON.stringify(e,null,2)),Z(``)},Nt=e=>{vt(e),pt(JSON.stringify(e,null,2))},Pt=e=>{try{let t=JSON.parse(e);t&&typeof t==`object`&&Array.isArray(t.nodes)&&bt(Y(t))}catch{}},Ft=e=>{try{let t=JSON.parse(e);Array.isArray(t)&&vt(t)}catch{}},It=(0,S.useMemo)(()=>Ye(yt??void 0,_t),[yt,_t]),Lt=async()=>{if(!ot.trim()){Z(c(`templates.nameRequired`));return}let e,t;try{e=JSON.parse(ft),t=JSON.parse(mt)}catch(e){Z(c(`templates.jsonParseFailed`,{error:e instanceof Error?e.message:String(e)}));return}if(!t||typeof t!=`object`||!Array.isArray(t.nodes)){Z(c(`templates.invalidDefinition`));return}let n=Ye(t,Array.isArray(e)?e:[]);if(n.length>0){Z(n.map(e=>c(e.key,e.params)).join(`;`));return}Z(``);let r=await y.templates.create({name:ot.trim(),description:ct.trim(),category:ut.trim()||`general`,inputs:Array.isArray(e)?e:[],definition:Y(t),source:{type:`handwritten`}});r.success&&r.data?(at(!1),m(r.data.id),$()):Z(r.error||c(`templates.createFailed`))},$=(0,S.useCallback)(async()=>{let e=await y.templates.list();e.success&&e.data&&(f(e.data),p&&!e.data.some(e=>e.id===p)&&(m(null),g(null)))},[p]);(0,S.useEffect)(()=>{$()},[]),(0,S.useEffect)(()=>{if(!p){g(null);return}let e=!1;return ue(!0),y.templates.get(p).then(t=>{e||(t.success&&t.data?(g(t.data),Se(t.data.name),Ce(t.data.description),Te(t.data.category),De(JSON.stringify(t.data.inputs,null,2)),Oe(JSON.stringify(t.data.definition,null,2)),J(t.data.inputs??[]),Ke(Y(t.data.definition)),A(!1),j(``),F(!1),L(null),y.templates.versions(p).then(t=>{!e&&t.success&&t.data&&Me(t.data)})):w(t.error||c(`templates.loadFailed`)))}).catch(()=>w(c(`templates.loadFailed`))).finally(()=>ue(!1)),()=>{e=!0}},[p]);let Rt=(0,S.useCallback)((e,t)=>c(e,{defaultValue:t}),[c]),zt=(0,S.useMemo)(()=>te.map(e=>_e(e,Rt)),[te,Rt]),Bt=(0,S.useMemo)(()=>{let e=new Set;for(let t of zt)t.builtin||e.add(t.category||c(`templates.uncategorized`));return[X,...[...e].sort()]},[zt,c]),Vt=(0,S.useMemo)(()=>{let e=T.trim().toLowerCase();return zt.filter(t=>E!==X&&ge(t,Rt)!==E?!1:!e||`${t.name} ${t.description} ${t.category}`.toLowerCase().includes(e))},[zt,T,E,Rt]),Ht=(0,S.useMemo)(()=>Bt.filter(e=>e!==X),[Bt]),Ut=(0,S.useMemo)(()=>{let{userGroups:e,builtin:t}=me(Vt,e=>c(e));return t.length===0?e:[...e,[c(`templates.builtinGroup`),t]]},[Vt,c]),Wt=e=>{m(e),G(!0),M(!1),F(!1),L(null),V(null),z(null),q(!1),A(!1),j(``),K(`overview`)},Gt=e=>{e!==p&&(!Be&&ke?Re(e):Wt(e))},Kt=e=>t=>{e(t),A(!0),j(``)},qt=async()=>{if(!p||!h||U)return;let e=p,t,n;try{t=JSON.parse(Ee),n=JSON.parse(O)}catch(e){j(c(`templates.jsonParseFailed`,{error:e instanceof Error?e.message:String(e)}));return}let r=Ye(n,Array.isArray(t)?t:[]);if(r.length>0)j(r.map(e=>c(e.key,e.params)).join(`;`));else{j(``),ze(!0);try{let r=await y.templates.update(e,{name:xe,description:D,category:we,inputs:Array.isArray(t)?t:[],definition:Y(n)});if(W.current!==e)return;r.success&&r.data?(g(r.data),A(!1),j(c(`templates.savedVersion`,{version:r.data.version})),$(),y.templates.versions(e).then(t=>{W.current===e&&t.success&&t.data&&Me(t.data)})):j(r.error||c(`templates.saveFailed`))}finally{ze(!1)}}},Jt=(0,S.useCallback)(()=>{let e=rt.map(e=>`- ${c(e.key,e.params)}`).join(`
|
|
2
|
+
`);he(c(`templates.aiFixPrompt`,{id:p??`—`,issues:e||c(`templates.aiFixNoIssues`)}))},[rt,p,c]),Yt=async e=>{if(!p)return;let t=p;Fe(!0);try{let n=await y.templates.render(t,e);if(W.current!==t)return;V({ok:n.success,json:n.success?JSON.stringify(n.data,null,2):void 0,error:n.success?void 0:n.error||c(`templates.renderFailed`)})}catch(e){V({ok:!1,error:e instanceof Error?e.message:c(`templates.renderFailed`)})}finally{Fe(!1)}},Xt=t=>{h&&(e(h,t),z(null))},Zt=e=>{h&&(V(null),z({mode:e}))},Qt=async e=>{if(!p)return;let t=await y.templates.getVersion(p,e);t.success&&t.data&&L(t.data)};return(0,k.jsxs)(`div`,{className:`flex flex-1 min-h-0 bg-dark-bg max-md:flex-col`,children:[(0,k.jsxs)(`div`,{className:`w-80 shrink-0 border-e border-dark-border overflow-y-auto custom-scrollbar p-3 max-md:w-full max-md:max-h-[45vh] max-md:border-e-0 max-md:border-b`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between mb-2 px-1`,children:[(0,k.jsx)(`span`,{className:`text-xs uppercase tracking-wider text-dark-muted font-medium`,children:c(`templates.workflowLibraryTitle`)}),(0,k.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,k.jsxs)(`button`,{onClick:At,className:`p-1.5 rounded-lg text-accent-blue hover:bg-accent-blue/10 transition-colors inline-flex items-center gap-1 text-xs`,title:c(`templates.manualCreateTitle`),children:[(0,k.jsx)(d,{className:`w-4 h-4`}),(0,k.jsx)(`span`,{className:`hidden xl:inline`,children:c(`templates.manualCreate`)})]}),(0,k.jsx)(`button`,{onClick:()=>{w(``),$()},className:`p-1.5 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,title:c(`templates.refresh`),children:(0,k.jsx)(re,{className:`w-4 h-4`})})]})]}),(0,k.jsxs)(`div`,{className:`relative mb-2`,children:[(0,k.jsx)(s,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted/60`}),(0,k.jsx)(`input`,{value:T,onChange:e=>ye(e.target.value),placeholder:c(`templates.searchPlaceholder`),className:`w-full ps-8 pe-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-xs text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue placeholder:text-dark-muted/50`})]}),(0,k.jsx)(`div`,{className:`flex items-center gap-1.5 mb-3 flex-wrap`,children:Bt.map(e=>(0,k.jsx)(`button`,{onClick:()=>be(e),className:b(`text-meta px-2 py-0.5 rounded-full border transition-colors`,E===e?`border-accent-blue text-accent-blue bg-accent-blue/10`:`border-dark-border text-dark-muted hover:border-dark-muted/50 hover:text-dark-text`),children:e===X?c(`templates.filterAll`):e},e))}),C&&(0,k.jsx)(`div`,{className:`text-xs text-accent-red mb-2`,children:C}),Ut.length===0&&!C&&(0,k.jsx)(`div`,{className:`text-xs text-dark-muted px-1 py-4 text-center`,children:c(T||E!==X?`templates.noMatchTemplates`:`templates.emptyTemplates`)}),Ut.map(([e,t])=>(0,k.jsxs)(`div`,{className:`mb-4`,children:[(0,k.jsx)(`div`,{className:`px-1 mb-1.5 text-badge uppercase tracking-wider text-dark-muted/70`,children:e}),(0,k.jsx)(`div`,{className:`space-y-1.5`,children:t.map(e=>{let t=p===e.id,n=e.status&&e.status!==`ready`?e.status:null,i=n===`degraded`?`templates.degradedBadge`:n===`draft`?`templates.statusDraft`:n===`deprecated`?`templates.statusDeprecated`:n===`archived`?`templates.statusArchived`:null;return(0,k.jsxs)(`button`,{onClick:()=>Gt(e.id),className:b(`w-full text-start px-3 py-2.5 rounded-lg border transition-colors`,t?`bg-accent-blue/10 border-accent-blue/30 text-dark-text`:`border-transparent hover:bg-dark-hover text-dark-muted`),children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,k.jsx)(`span`,{className:`text-sm font-medium truncate`,children:e.name}),(0,k.jsxs)(`span`,{className:`flex items-center gap-1 shrink-0`,children:[i&&(0,k.jsx)(x,{size:`sm`,variant:n===`degraded`?`warning`:`default`,children:c(i)}),(0,k.jsxs)(x,{size:`sm`,variant:`info`,children:[`v`,e.version]})]})]}),e.description&&(0,k.jsx)(`div`,{className:`text-meta text-dark-muted/70 truncate mt-0.5`,children:e.description}),(0,k.jsxs)(`div`,{className:`flex items-center gap-1.5 mt-2 flex-wrap`,children:[e.summary&&(0,k.jsxs)(x,{size:`sm`,variant:e.summary.readonly?`success`:`warning`,className:`gap-1`,children:[e.summary.readonly?(0,k.jsx)(r,{size:10}):(0,k.jsx)(a,{size:10}),e.summary.readonly?`${c(`templates.readonly`)} · ${c(`templates.riskLow`)}`:`${c(`templates.writable`)} · ${c(`templates.riskMedium`)}`]}),(0,k.jsx)(x,{size:`sm`,variant:`default`,children:e.inputs.length>0?c(`templates.confirmCount`,{n:e.inputs.length}):c(`templates.confirmCountNone`)}),(0,k.jsxs)(`span`,{className:`ms-auto inline-flex items-center gap-0.5 text-badge text-accent-blue`,children:[c(t?`templates.viewing`:`templates.view`),!t&&(0,k.jsx)(l,{size:10})]})]})]},e.id)})})]},e))]}),(()=>{if(!p)return(0,k.jsx)(`div`,{className:`flex-1 flex items-center justify-center text-sm text-dark-muted`,children:(0,k.jsxs)(`div`,{className:`text-center px-8`,children:[(0,k.jsx)(ne,{size:36,className:`mx-auto mb-2 opacity-30 text-dark-muted`}),(0,k.jsx)(`p`,{children:c(`templates.selectTemplateHint`)}),(0,k.jsx)(`p`,{className:`text-xs text-dark-muted/60 mt-1`,children:c(`templates.workflowLibraryHint`)})]})});if(le||!h)return(0,k.jsxs)(`div`,{className:`flex-1 flex items-center justify-center text-dark-muted`,children:[(0,k.jsx)(oe,{className:`w-4 h-4 animate-spin me-2`}),` `,c(`templates.loading`)]});let e=h.definition?.nodes?.length??0,r=h.inputs?.length??0,a=$e[h.source.type];return Be?(0,k.jsx)(Ne,{t:c,detail:_e(h,Rt),nodeCount:e,inputCount:r,sourceLabelKey:a,detailTab:Ve,onTabChange:K,onReplay:()=>{z({mode:`launch`}),q(!1)},onPreflight:()=>{z({mode:`preview`}),q(!1)},onEdit:()=>{qe(),q(!1)},onDelete:()=>H(!0),onExport:()=>{let e=new Blob([JSON.stringify(h,null,2)],{type:`application/json`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`${h.id}.template.json`,n.click(),URL.revokeObjectURL(t)},onCopyId:async()=>{try{await navigator.clipboard.writeText(h.id),j(c(`templates.copied`))}catch{}},onToggleAdvanced:()=>{qe(),M(!0),q(!1)},onToggleVersions:()=>{K(`history`),q(!1),F(!1)},onReRecord:async e=>{let t=await y.templates.getVersion(p,e);if(t.success&&t.data){let e=t.data,n=await y.templates.update(p,{name:e.name,description:e.description,category:e.category,inputs:e.inputs,definition:e.definition});n.success&&n.data&&(g(n.data),K(`history`),$(),y.templates.versions(p).then(e=>{e.success&&e.data&&Me(e.data)}))}},versions:N,historyView:I,onLoadVersion:Qt,onClearHistory:()=>L(null),onRefresh:$,menuOpen:He,setMenuOpen:q,saveMsg:Ae}):(0,k.jsx)(`div`,{className:`flex-1 min-w-0 flex flex-col overflow-y-auto custom-scrollbar`,children:(0,k.jsxs)(`div`,{className:`p-5 space-y-4 max-md:p-3`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,k.jsxs)(`button`,{onClick:()=>{G(!0),A(!1),M(!1),F(!1)},className:`inline-flex items-center gap-1 text-xs text-dark-muted hover:text-dark-text transition-colors shrink-0`,children:[`← `,c(`templates.backToView`)]}),(0,k.jsx)(`input`,{value:xe,onChange:e=>Kt(Se)(e.target.value),className:`flex-1 min-w-[200px] px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`}),(0,k.jsxs)(x,{variant:`info`,children:[`v`,h.version]}),(0,k.jsx)(x,{variant:h.source.type===`saved`?`success`:`default`,children:a?c(a):h.source.type}),(0,k.jsx)(`button`,{onClick:()=>H(!0),className:`p-2 rounded-lg text-dark-muted hover:text-accent-red hover:bg-dark-hover transition-colors`,title:c(`templates.deleteTemplate`),children:(0,k.jsx)(ce,{className:`w-4 h-4`})})]}),(0,k.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 max-md:grid-cols-1`,children:[(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsxs)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:[c(`templates.categoryLabel`),(0,k.jsx)(`span`,{className:`text-badge text-dark-muted/60 ms-1.5`,children:c(`templates.categoryCreateHint`)})]}),(0,k.jsx)(`input`,{value:we,onChange:e=>Kt(Te)(e.target.value),list:`template-category-suggestions`,className:`w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`}),(0,k.jsx)(`datalist`,{id:`template-category-suggestions`,children:Ht.map(e=>(0,k.jsx)(`option`,{value:e},e))})]}),(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.descriptionLabel`)}),(0,k.jsx)(`input`,{value:D,onChange:e=>Kt(Ce)(e.target.value),className:`w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-4 flex-wrap text-xs text-dark-muted`,children:[(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,k.jsx)(ee,{size:13,className:`text-accent-blue`}),c(`templates.nodeCount`,{n:e})]}),(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,k.jsx)(l,{size:13,className:`text-accent-green`}),c(`templates.topologyHint`)]}),r>0&&(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,k.jsx)(u,{size:13,className:`text-accent-yellow`}),c(`templates.inputCount`,{n:r})]}),(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,k.jsx)(ie,{size:13,className:`text-dark-muted/60`}),new Date(h.updatedAt).toLocaleString()]})]}),We&&(0,k.jsx)(Ge,{definition:We,inputs:Ue,issues:rt,onDefinitionChange:Je,onInputsChange:et}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,k.jsx)(v,{variant:`accent`,leftIcon:(0,k.jsx)(ae,{className:`w-4 h-4`}),onClick:()=>Zt(`launch`),children:c(`templates.launchWithTemplate`)}),(0,k.jsxs)(`button`,{onClick:()=>Zt(`preview`),className:`px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors inline-flex items-center gap-1.5`,children:[(0,k.jsx)(i,{className:`w-4 h-4`}),` `,c(`templates.testRun`)]}),(0,k.jsxs)(`button`,{onClick:()=>F(e=>!e),className:`px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors inline-flex items-center gap-1.5`,children:[(0,k.jsx)(se,{className:`w-4 h-4`}),` `,c(`templates.versionHistory`)]}),(0,k.jsx)(v,{variant:`accent`,leftIcon:(0,k.jsx)(t,{className:`w-4 h-4`}),onClick:qt,loading:U,disabled:!ke||rt.length>0,title:rt.length>0?c(`templates.editorValidationIssues`):void 0,children:c(`templates.saveChanges`)}),(0,k.jsxs)(`button`,{"data-testid":`templates-ai-fix`,onClick:Jt,title:c(`templates.aiFixHint`),className:`px-4 py-2 rounded-lg border border-accent-blue/40 bg-accent-blue/10 text-accent-blue hover:bg-accent-blue/20 transition-colors inline-flex items-center gap-1.5`,children:[(0,k.jsx)(n,{className:`w-4 h-4`}),` `,c(`templates.aiFix`)]}),(0,k.jsxs)(`button`,{onClick:()=>M(e=>!e),className:`px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors inline-flex items-center gap-1.5`,children:[(0,k.jsx)(u,{className:`w-4 h-4`}),` `,c(`templates.advancedJson`)]}),(0,k.jsx)(`button`,{onClick:$,className:`p-2 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,title:c(`templates.refresh`),children:(0,k.jsx)(re,{className:`w-4 h-4`})}),Ae&&(0,k.jsx)(`span`,{className:`text-xs text-dark-muted`,children:Ae})]}),je&&(0,k.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 space-y-3`,children:[(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.inputsSchemaLabel`)}),(0,k.jsx)(`textarea`,{value:Ee,onChange:e=>{Kt(De)(e.target.value),nt(e.target.value)},rows:5,spellCheck:!1,className:`w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]}),(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.definitionLabel`)}),(0,k.jsx)(`textarea`,{value:O,onChange:e=>{Kt(Oe)(e.target.value),tt(e.target.value)},rows:10,spellCheck:!1,className:`w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]}),(0,k.jsx)(`p`,{className:`text-meta text-dark-muted/60`,children:c(`templates.editorAdvancedSyncHint`)})]}),P&&(0,k.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 space-y-1.5`,children:[(0,k.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:c(`templates.versionSnapshotLabel`)}),N.length===0&&(0,k.jsx)(`div`,{className:`text-xs text-dark-muted/60`,children:c(`templates.noVersions`)}),N.map(e=>(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsxs)(`button`,{onClick:()=>Qt(e),className:`text-xs px-2 py-1 rounded border border-dark-border hover:border-accent-blue/50 transition-colors`,children:[`v`,e]}),I&&I.version===e&&(0,k.jsx)(`span`,{className:`text-xs text-dark-muted/60`,children:c(`templates.viewingVersion`)})]},e)),I&&(0,k.jsx)(`pre`,{className:`mt-2 p-3 rounded-lg bg-dark-bg text-badge font-mono text-dark-muted max-h-60 overflow-y-auto custom-scrollbar`,children:JSON.stringify({version:I.version,inputs:I.inputs,definition:I.definition},null,2)})]})]})})})(),R&&h&&(0,k.jsxs)(de,{isOpen:!0,onClose:()=>z(null),title:R.mode===`launch`?c(`templates.replayDrawerTitle`,{name:h.name}):c(`templates.previewModalTitle`,{name:h.name}),size:`md`,children:[(0,k.jsx)(ve,{template:h,onCancel:()=>z(null),onSubmit:R.mode===`launch`?Xt:Yt,submitLabel:R.mode===`launch`?c(`templates.replayStart`):c(`templates.renderPreview`),submitIcon:R.mode===`launch`?(0,k.jsx)(l,{className:`w-3.5 h-3.5`}):void 0,busy:Pe,autoValues:Ze(h,o),preflightSummary:(0,k.jsx)(Qe,{t:c,detail:h,workspaceDir:o})}),R.mode===`preview`&&B&&(0,k.jsx)(`div`,{className:`mt-4`,children:B.ok?(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`div`,{className:`text-xs text-accent-green mb-1.5`,children:c(`templates.renderSuccess`)}),(0,k.jsx)(`pre`,{className:`p-3 rounded-lg bg-dark-bg text-badge font-mono text-dark-muted max-h-72 overflow-y-auto custom-scrollbar`,children:B.json})]}):(0,k.jsx)(`div`,{className:`text-xs text-accent-red`,children:B.error})})]}),(0,k.jsx)(pe,{isOpen:it,onClose:()=>at(!1),title:c(`templates.newTemplate`),size:`lg`,children:(0,k.jsxs)(`div`,{className:`space-y-4`,children:[(0,k.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 max-md:grid-cols-1`,children:[(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.nameLabel`)}),(0,k.jsx)(`input`,{value:ot,onChange:e=>st(e.target.value),placeholder:c(`templates.namePlaceholder`),className:`w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]}),(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.categoryField`)}),(0,k.jsx)(`input`,{value:ut,onChange:e=>dt(e.target.value),className:`w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]})]}),(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.descriptionField`)}),(0,k.jsx)(`input`,{value:ct,onChange:e=>lt(e.target.value),className:`w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,k.jsxs)(`button`,{type:`button`,onClick:()=>{wt(!0),Q(``)},className:b(`px-3 py-1.5 rounded-lg border text-xs transition-colors inline-flex items-center gap-1.5`,Ct?`border-accent-blue text-accent-blue bg-accent-blue/10`:`border-dark-border text-dark-muted hover:border-dark-muted/50 hover:text-dark-text`),children:[(0,k.jsx)(n,{size:12}),` `,c(`templates.aiDraftTab`)]}),(0,k.jsxs)(`button`,{type:`button`,onClick:()=>wt(!1),className:b(`px-3 py-1.5 rounded-lg border text-xs transition-colors inline-flex items-center gap-1.5`,Ct?`border-dark-border text-dark-muted hover:border-dark-muted/50 hover:text-dark-text`:`border-accent-blue text-accent-blue bg-accent-blue/10`),children:[(0,k.jsx)(u,{size:12}),` `,c(`templates.editorManualTab`)]})]}),Ct?(0,k.jsxs)(`div`,{className:`space-y-2`,children:[(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.aiPromptLabel`)}),(0,k.jsx)(`textarea`,{value:Tt,onChange:e=>Et(e.target.value),rows:4,spellCheck:!1,placeholder:c(`templates.aiPromptPlaceholder`),className:`w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]}),(0,k.jsx)(v,{variant:`accent`,onClick:()=>void jt(),loading:Dt,leftIcon:Dt?void 0:(0,k.jsx)(n,{className:`w-4 h-4`}),children:c(Dt?`templates.aiWorking`:`templates.generateWorkflow`)}),Dt&&(0,k.jsx)(`div`,{className:`text-xs text-dark-muted`,children:c(`templates.aiTimeHint`)}),kt&&(0,k.jsx)(`div`,{className:`text-xs text-accent-red`,children:kt})]}):(0,k.jsxs)(k.Fragment,{children:[yt&&(0,k.jsx)(Ge,{definition:yt,inputs:_t,issues:It,onDefinitionChange:Mt,onInputsChange:Nt}),(0,k.jsx)(`div`,{children:(0,k.jsxs)(`button`,{type:`button`,onClick:()=>St(e=>!e),className:`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-dark-border text-xs text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:[(0,k.jsx)(u,{size:12}),` `,c(`templates.advancedJson`)]})}),xt&&(0,k.jsxs)(`div`,{className:`space-y-3`,children:[(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.inputsSchemaLabel`)}),(0,k.jsx)(`textarea`,{value:ft,onChange:e=>{pt(e.target.value),Ft(e.target.value)},rows:4,spellCheck:!1,className:`w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]}),(0,k.jsxs)(`label`,{className:`block`,children:[(0,k.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:c(`templates.definitionLabel`)}),(0,k.jsx)(`textarea`,{value:mt,onChange:e=>{ht(e.target.value),Pt(e.target.value)},rows:10,spellCheck:!1,className:`w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue`})]}),(0,k.jsx)(`p`,{className:`text-meta text-dark-muted/60`,children:c(`templates.editorAdvancedSyncHint`)})]})]}),gt&&(0,k.jsx)(`div`,{className:`text-xs text-accent-red`,children:gt}),(0,k.jsxs)(`div`,{className:`flex justify-end gap-3`,children:[(0,k.jsx)(`button`,{onClick:()=>at(!1),className:`px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors`,children:c(`templates.cancel`)}),(0,k.jsx)(v,{variant:`accent`,onClick:()=>void Lt(),children:c(`templates.create`)})]})]})}),(0,k.jsx)(fe,{isOpen:Ie,onClose:()=>H(!1),onConfirm:async()=>{if(!p)return;let e=p;(await y.templates.remove(e)).success&&W.current===e&&(Me([]),F(!1),L(null),V(null),z(null),K(`overview`),G(!0),j(``),A(!1),m(null),H(!1),$())},title:c(`templates.deleteTemplate`),message:c(`templates.deleteConfirm`,{name:h?.name||p||``}),confirmText:c(`templates.delete`),variant:`danger`}),(0,k.jsx)(fe,{isOpen:Le!==null,onClose:()=>Re(null),onConfirm:()=>{let e=Le;Re(null),e&&Wt(e)},title:c(`templates.discardEditsTitle`),message:c(`templates.discardEditsMessage`,{name:h?.name||p||``}),confirmText:c(`templates.discardEditsConfirm`),variant:`danger`})]})}export{et as TemplatesTab};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{Er as t,Jn as n,Or as r,V as i,Y as a,Yr as o,_t as s,b as ee,g as c,it as l,kr as u,m as te,n as ne,ni as d,nn as re,nt as f,r as p,y as ie}from"./icons-B8Ngx6rM.js";import{t as m}from"./useTranslation-gGKZZfux.js";import{i as h,t as g}from"./Button-D-g7PgYh.js";import{t as _}from"./api-ZQf0Ys8y.js";import{I as v}from"./markdown-Cps-36Z5.js";import{r as ae}from"./useConfirm-CQjBnYuP.js";import{a as y,f as oe,s as se}from"./common-CPZxdYLs.js";import{St as ce}from"./index-STsyoFCk.js";var b=e(d(),1),x=v(),S={critical:0,high:1,medium:2,low:3},le={critical:`bg-accent-red/20 text-accent-red`,high:`bg-accent-red/15 text-accent-red`,medium:`bg-accent-yellow/20 text-accent-yellow`,low:`bg-accent-green/20 text-accent-green`};function C(e,t){let n=`tools.cat.${e}`,r=t(n);if(r&&r!==n)return r;let i=e.replace(/_/g,` `).trim();return i?i.charAt(0).toUpperCase()+i.slice(1):t(`tools.groupUncategorized`)}function w(e,t){switch(e){case`critical`:return t(`tools.riskCritical`);case`high`:return t(`tools.riskHigh`);case`medium`:return t(`tools.riskMedium`);case`low`:return t(`tools.riskLow`);default:return t(`tools.riskUnknown`)}}function T(e,t,n){let r=new Map;for(let i of e){let e,a,o=0;t===`risk`?(e=i.risk??`unknown`,a=w(i.risk,n),o=S[e]??99):t===`state`?(e=i.enabled?`on`:`off`,a=i.enabled?n(`tools.enabled`):n(`tools.disabled`),o=+!i.enabled):(e=i.category||`__none__`,a=i.category?C(i.category,n):n(`tools.groupUncategorized`));let s=r.get(e);s||(s={key:e,label:a,tools:[],order:o},r.set(e,s)),s.tools.push(i)}for(let e of r.values())e.tools.sort((e,t)=>e.enabled===t.enabled?e.id.localeCompare(t.id):e.enabled?-1:1);return[...r.values()].sort((e,n)=>t===`category`?n.tools.length-e.tools.length||e.label.localeCompare(n.label):e.order-n.order||e.label.localeCompare(n.label))}function ue(e,t){try{if(typeof URL.createObjectURL!=`function`)return!1;let n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);return i.href=r,i.download=e,i.click(),URL.revokeObjectURL(r),!0}catch{return!1}}function E(){let{t:e}=m(),[d,v]=(0,b.useState)([]),[S,C]=(0,b.useState)(!0),[E,D]=(0,b.useState)(!1),[O,k]=(0,b.useState)(null),[A,de]=(0,b.useState)(``),[j,fe]=(0,b.useState)(`category`),[M,N]=(0,b.useState)(new Set),[pe,P]=(0,b.useState)(null),[F,I]=(0,b.useState)(null),[L,R]=(0,b.useState)({name:``,description:``,category:``,enabled:!0}),[z,B]=(0,b.useState)(null),[V,me]=(0,b.useState)(null),[H,he]=(0,b.useState)(0),[ge,_e]=(0,b.useState)(null),[U,W]=(0,b.useState)(null),G=(0,b.useRef)(null),K=(0,b.useCallback)(async(t=!1)=>{t?D(!0):(C(!0),k(null));try{let[n,r]=await Promise.all([_.tools.list(),_.tools.exportConfig()]);n.success&&Array.isArray(n.data)?(v(n.data),k(null)):!t&&n.success&&n.data?k(e(`tools.invalidData`)):t||k(n.error||e(`tools.loadFailed`)),r.success&&r.data&&(me(r.data.path??null),he(Object.keys(r.data.tools??{}).length),_e(r.data.profile??null))}catch(e){t||k(e instanceof Error?e.message:String(e))}finally{C(!1),D(!1)}},[e]);(0,b.useEffect)(()=>{K()},[K]),ce(()=>void K(!0));let ve=(0,b.useCallback)(()=>{window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:`connectors`}))},[]),q=(0,b.useMemo)(()=>{let e=A.trim().toLowerCase();return e?d.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.category.toLowerCase().includes(e)):d},[d,A]),J=(0,b.useMemo)(()=>T(q,j,e),[q,j,e]),Y=(0,b.useMemo)(()=>d.filter(e=>e.enabled).length,[d]),X=(0,b.useCallback)((e,t,n)=>{v(r=>r.map(r=>r.id===t?{...r,...n,...e??{}}:r))},[]),ye=(0,b.useCallback)(async t=>{B(t.id);let n=await _.tools.toggle(t.id,!t.enabled);if(B(null),!n.success){h.error(n.error||e(`tools.toggleFailed`));return}let r=n.data?.enabled??!t.enabled;X(void 0,t.id,{enabled:r,overridden:!0})},[X,e]),be=(0,b.useCallback)(e=>{I(e.id),P(e.id),R({name:e.name,description:e.description,category:e.category,enabled:e.enabled})},[]),xe=(0,b.useCallback)(async t=>{B(t.id);let n=await _.tools.update(t.id,{name:L.name,description:L.description,category:L.category,enabled:L.enabled});B(null),!n.success||!n.data?h.error(n.error||e(`tools.saveFailed`)):(X(n.data,t.id,{}),I(null),h.success(e(`tools.saved`)))},[L,X,e]),Se=(0,b.useCallback)(async t=>{B(t.id);let n=await _.tools.reset(t.id);B(null),!n.success||!n.data?h.error(n.error||e(`tools.resetFailed`)):(X(n.data,t.id,{}),I(e=>e===t.id?null:e),h.success(e(`tools.resetDone`)))},[X,e]),Z=(0,b.useCallback)(async(t,n)=>{let r=t.tools.filter(e=>e.enabled!==n);if(r.length===0)return;let i=(await Promise.all(r.map(e=>_.tools.toggle(e.id,n)))).filter(e=>!e.success).length;i>0&&h.warning(e(`tools.groupPartial`,{failed:i,total:r.length})),await K(!0)},[K,e]),Ce=(0,b.useCallback)(async()=>{let t=await _.tools.exportConfig();if(!t.success||!t.data){h.error(t.error||e(`tools.loadFailed`));return}let n=Object.keys(t.data.tools??{}).length;n===0?h.info(e(`tools.exportEmpty`)):ue(`deepseekcode-tools.json`,t.data)?h.success(e(`tools.exportDone`,{count:n})):h.error(e(`tools.exportFailed`))},[e]),we=(0,b.useCallback)(async t=>{let n;try{n=JSON.parse(await t.text())}catch{h.error(e(`tools.importInvalid`));return}let r=n&&typeof n==`object`&&`tools`in n?n.tools:n,i=r&&typeof r==`object`&&!Array.isArray(r)?Object.keys(r).length:0;i===0?h.error(e(`tools.importEmpty`)):W({payload:n,count:i})},[e]),Q=(0,b.useCallback)(async t=>{let n=U;if(W(null),!n)return;let r=await _.tools.importConfig(n.payload,t);!r.success||!r.data?h.error(e(`tools.importFailed`,{error:r.error??``})):(r.data.unknown.length>0&&h.warning(e(`tools.importUnknown`,{count:r.data.unknown.length})),h.success(e(`tools.importDone`,{count:r.data.applied.length})),await K(!0))},[K,U,e]),Te=(0,b.useCallback)(e=>{N(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),$=J.length>0&&J.every(e=>M.has(e.key));return S&&d.length===0?(0,x.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,role:`status`,"aria-label":e(`tools.loading`),children:(0,x.jsx)(oe,{count:5})}):O?(0,x.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,x.jsxs)(`div`,{className:`text-center`,children:[(0,x.jsx)(c,{size:32,className:`mx-auto mb-2 text-accent-red`}),(0,x.jsx)(`p`,{className:`text-accent-red mb-4`,children:O}),(0,x.jsx)(g,{variant:`accent`,onClick:()=>void K(),children:e(`tools.retry`)})]})}):(0,x.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden p-4 max-md:p-3`,children:[(0,x.jsxs)(`div`,{className:`flex items-center justify-between mb-3 gap-3 max-md:flex-wrap max-md:gap-2`,children:[(0,x.jsxs)(`h2`,{className:`text-lg font-semibold flex items-center gap-2 min-w-0`,children:[(0,x.jsx)(p,{size:20,className:`shrink-0`}),(0,x.jsx)(`span`,{className:`truncate`,children:e(`tools.title`)}),(0,x.jsxs)(`span`,{className:`text-sm font-normal text-dark-muted whitespace-nowrap`,children:[e(`tools.totalTools`,{count:d.length}),` · `,e(`tools.enabledCount`,{count:Y})]})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0 max-md:w-full max-md:justify-end`,children:[(0,x.jsxs)(`button`,{onClick:()=>void Ce(),title:V?e(`tools.importPath`,{path:V}):void 0,className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,x.jsx)(n,{size:14}),e(`tools.exportConfig`),H>0&&(0,x.jsxs)(`span`,{className:`text-xs text-accent-blue`,children:[`(`,H,`)`]})]}),(0,x.jsxs)(`button`,{onClick:()=>G.current?.click(),className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,x.jsx)(te,{size:14}),e(`tools.importConfig`)]}),(0,x.jsx)(`input`,{ref:G,type:`file`,accept:`application/json,.json`,className:`hidden`,"data-testid":`tools-import-input`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&we(t)}}),(0,x.jsxs)(`button`,{onClick:()=>void K(!0),disabled:E,className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors disabled:opacity-60`,children:[(0,x.jsx)(l,{size:14,className:E?`animate-spin`:void 0}),e(`tools.refresh`)]})]})]}),(0,x.jsx)(se,{slot:e(`nav.tools`),className:`mb-3`}),(0,x.jsxs)(`div`,{className:`mb-3 px-3 py-2 rounded-lg bg-accent-blue/10 border border-accent-blue/20 text-xs text-dark-muted space-y-1`,children:[ge===`minimal`&&(0,x.jsx)(`div`,{children:e(`tools.profileMinimalHint`,{off:d.length-Y})}),(0,x.jsxs)(`div`,{className:`flex items-center gap-x-2 gap-y-1 flex-wrap`,children:[(0,x.jsx)(`span`,{children:e(`tools.scopeHint`)}),(0,x.jsxs)(`button`,{type:`button`,onClick:ve,className:`inline-flex items-center gap-1 text-accent-blue hover:underline`,children:[e(`tools.scopeHintConnectorsLink`),(0,x.jsx)(o,{size:11})]})]})]}),(0,x.jsxs)(`div`,{className:`flex gap-3 mb-3 items-center flex-wrap`,children:[(0,x.jsxs)(`div`,{className:`flex-1 min-w-[200px] relative`,children:[(0,x.jsx)(a,{size:16,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,x.jsx)(`input`,{type:`text`,value:A,onChange:e=>de(e.target.value),placeholder:e(`tools.searchTools`),className:`w-full ps-10 pe-4 py-2 bg-dark-surface border border-dark-border rounded-lg text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,x.jsx)(re,{size:14,className:`text-dark-muted`}),(0,x.jsx)(`span`,{className:`text-dark-muted me-1`,children:e(`tools.groupBy`)}),[`category`,`risk`,`state`].map(t=>(0,x.jsx)(`button`,{onClick:()=>fe(t),className:`px-3 py-1.5 rounded-lg transition-colors ${j===t?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:e(t===`category`?`tools.groupByCategory`:t===`risk`?`tools.groupByRisk`:`tools.groupByState`)},t)),(0,x.jsx)(`button`,{onClick:()=>N($?new Set:new Set(J.map(e=>e.key))),className:`px-3 py-1.5 rounded-lg bg-dark-surface border border-dark-border hover:bg-dark-hover transition-colors`,children:e($?`tools.expandAll`:`tools.collapseAll`)})]})]}),(0,x.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar`,children:(0,x.jsxs)(`div`,{className:`space-y-3`,children:[J.map(n=>{let a=M.has(n.key),o=n.tools.filter(e=>e.enabled).length;return(0,x.jsxs)(`div`,{className:`bg-dark-surface border border-dark-border rounded-lg overflow-hidden`,children:[(0,x.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 bg-dark-hover/40 max-md:flex-wrap max-md:gap-2`,children:[(0,x.jsxs)(`button`,{onClick:()=>Te(n.key),className:`flex items-center gap-2 min-w-0 flex-1 text-start`,children:[a?(0,x.jsx)(t,{size:16,className:`shrink-0 text-dark-muted`}):(0,x.jsx)(r,{size:16,className:`shrink-0 text-dark-muted`}),(0,x.jsx)(`span`,{className:`font-medium truncate`,children:n.label}),(0,x.jsx)(`span`,{className:`text-xs text-dark-muted whitespace-nowrap`,children:e(`tools.groupEnabled`,{on:o,total:n.tools.length})})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0 max-md:w-full max-md:justify-end`,children:[(0,x.jsx)(`button`,{onClick:()=>void Z(n,!0),disabled:o===n.tools.length,className:`text-xs px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40 disabled:cursor-not-allowed`,children:e(`tools.enableGroup`)}),(0,x.jsx)(`button`,{onClick:()=>void Z(n,!1),disabled:o===0,className:`text-xs px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40 disabled:cursor-not-allowed`,children:e(`tools.disableGroup`)})]})]}),!a&&(0,x.jsx)(`div`,{className:`divide-y divide-dark-border`,children:n.tools.map(n=>{let a=F===n.id,o=pe===n.id||a;return(0,x.jsxs)(`div`,{className:n.enabled?``:`opacity-60`,children:[(0,x.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 gap-3 max-md:flex-wrap max-md:gap-1`,children:[(0,x.jsxs)(`button`,{className:`flex items-center gap-2 flex-1 min-w-0 text-start max-md:w-full max-md:flex-wrap`,onClick:()=>P(o&&!a?null:n.id),children:[o?(0,x.jsx)(r,{size:14,className:`shrink-0 text-dark-muted`}):(0,x.jsx)(t,{size:14,className:`shrink-0 text-dark-muted`}),(0,x.jsx)(`span`,{className:`font-medium truncate`,children:n.name}),(0,x.jsx)(`code`,{className:`text-xs text-dark-muted truncate`,children:n.id}),n.risk&&(0,x.jsxs)(`span`,{className:`px-1.5 py-0.5 rounded text-badge whitespace-nowrap ${le[n.risk]??`bg-dark-hover text-dark-muted`}`,children:[n.risk===`high`||n.risk===`critical`?(0,x.jsx)(i,{size:10,className:`inline -mt-px me-0.5`}):null,w(n.risk,e)]}),n.overridden&&(0,x.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-accent-purple/20 text-accent-purple whitespace-nowrap`,children:e(`tools.overridden`)}),!n.enabled&&!n.overridden&&(0,x.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-dark-hover text-dark-muted whitespace-nowrap`,children:n.defaultEnabled===!1?e(`tools.defaultOff`):e(`tools.disabled`)}),n.userInstalled&&(0,x.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-accent-blue/20 text-accent-blue whitespace-nowrap`,title:e(`tools.userInstalledHint`),children:e(`tools.userInstalled`)})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0 max-md:w-full max-md:justify-end`,children:[(0,x.jsx)(y,{slot:`tools`,id:n.id}),(0,x.jsx)(`button`,{onClick:()=>be(n),title:e(`tools.edit`),className:`p-1.5 rounded text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors`,children:(0,x.jsx)(s,{size:14})}),n.overridden&&(0,x.jsx)(`button`,{onClick:()=>void Se(n),disabled:z===n.id,title:e(`tools.reset`),className:`p-1.5 rounded text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors disabled:opacity-40`,children:(0,x.jsx)(f,{size:14})}),(0,x.jsx)(`button`,{onClick:()=>void ye(n),disabled:z===n.id,title:n.enabled?e(`tools.disabled`):e(`tools.enabled`),className:`p-1.5 rounded transition-colors disabled:opacity-40 disabled:cursor-not-allowed ${n.enabled?`text-accent-green hover:bg-accent-green/10`:`text-dark-muted hover:bg-dark-hover`}`,children:n.enabled?(0,x.jsx)(ie,{size:24}):(0,x.jsx)(ee,{size:24})})]})]}),o&&(0,x.jsx)(`div`,{className:`px-3 pb-3 border-t border-dark-border`,children:a?(0,x.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,x.jsxs)(`label`,{className:`block`,children:[(0,x.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldName`)}),(0,x.jsx)(`input`,{value:L.name,onChange:e=>R(t=>({...t,name:e.target.value})),placeholder:e(`tools.namePlaceholder`),className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,x.jsxs)(`label`,{className:`block`,children:[(0,x.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldCategory`)}),(0,x.jsx)(`input`,{value:L.category,onChange:e=>R(t=>({...t,category:e.target.value})),placeholder:e(`tools.categoryPlaceholder`),className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,x.jsxs)(`label`,{className:`block`,children:[(0,x.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldDescription`)}),(0,x.jsx)(`textarea`,{value:L.description,onChange:e=>R(t=>({...t,description:e.target.value})),placeholder:e(`tools.descriptionPlaceholder`),rows:3,className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none resize-y`})]}),(0,x.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,x.jsx)(`input`,{type:`checkbox`,checked:L.enabled,onChange:e=>R(t=>({...t,enabled:e.target.checked}))}),e(`tools.fieldEnabled`)]}),(0,x.jsx)(`p`,{className:`text-xs text-dark-muted`,children:e(`tools.descriptionHint`)}),(0,x.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,x.jsx)(g,{variant:`accent`,size:`sm`,leftIcon:(0,x.jsx)(u,{size:14}),loading:z===n.id,onClick:()=>void xe(n),children:e(`tools.save`)}),(0,x.jsxs)(`button`,{onClick:()=>I(null),className:`flex items-center gap-1.5 px-3 py-1.5 border border-dark-border rounded text-sm hover:bg-dark-hover`,children:[(0,x.jsx)(ne,{size:14}),e(`tools.cancel`)]})]})]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`p`,{className:`text-sm text-dark-muted mt-3 mb-3 whitespace-pre-wrap`,children:n.description}),n.usage&&(0,x.jsxs)(`div`,{className:`mb-3`,children:[(0,x.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:e(`tools.usageHint`)}),(0,x.jsx)(`p`,{className:`text-sm text-dark-muted whitespace-pre-wrap`,children:n.usage})]}),n.params&&n.params.length>0&&(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`div`,{className:`text-xs text-dark-muted mb-2`,children:e(`tools.params`)}),(0,x.jsx)(`div`,{className:`space-y-1`,children:n.params.map(e=>(0,x.jsxs)(`div`,{className:`flex items-center gap-2 text-sm flex-wrap`,children:[(0,x.jsxs)(`code`,{className:`px-1.5 py-0.5 bg-dark-bg rounded text-accent-blue`,children:[e.name,e.required&&(0,x.jsx)(`span`,{className:`text-accent-red`,children:`*`})]}),(0,x.jsxs)(`span`,{className:`text-dark-muted text-xs`,children:[`(`,e.type,`)`]}),(0,x.jsx)(`span`,{className:`text-dark-muted text-xs`,children:e.description})]},e.name))})]})]})})]},n.id)})})]},n.key)}),q.length===0&&(0,x.jsxs)(`div`,{className:`text-center text-dark-muted py-8`,children:[(0,x.jsx)(p,{size:48,className:`mx-auto mb-2 opacity-50`}),(0,x.jsx)(`p`,{children:e(A?`tools.noMatch`:`tools.noTools`)})]})]})}),(0,x.jsxs)(ae,{isOpen:U!==null,onClose:()=>W(null),title:e(`tools.importTitle`),size:`sm`,children:[(0,x.jsx)(`p`,{className:`text-sm text-dark-muted mb-4`,children:e(`tools.importDesc`,{count:U?.count??0})}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsxs)(`button`,{onClick:()=>void Q(`merge`),className:`w-full text-start px-3 py-2 border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,x.jsx)(`div`,{className:`font-medium text-sm`,children:e(`tools.importMerge`)}),(0,x.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tools.importMergeHint`)})]}),(0,x.jsxs)(`button`,{onClick:()=>void Q(`replace`),className:`w-full text-start px-3 py-2 border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,x.jsx)(`div`,{className:`font-medium text-sm`,children:e(`tools.importReplace`)}),(0,x.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tools.importReplaceHint`)})]}),(0,x.jsx)(`button`,{onClick:()=>W(null),className:`w-full px-3 py-2 text-sm text-dark-muted hover:text-dark-text transition-colors`,children:e(`tools.cancel`)})]})]})]})}export{E as ToolsView,E as default};
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{Ar as t,Or as n,V as r,Xn as i,Y as a,Zr as o,_t as s,b as c,g as l,ii as u,in as d,it as ee,jr as te,m as ne,n as re,nt as f,r as p,y as ie}from"./icons-CittejKL.js";import{t as m}from"./useTranslation-2BGEBvJE.js";import{r as h,t as g}from"./Button-B43HsIQ3.js";import{t as _}from"./api-BW4-5gtM.js";import{I as v}from"./markdown-DZQBOzWk.js";import{d as ae,i as y,o as oe}from"./common-CP2UB8TN.js";import{r as se}from"./useConfirm-kTv3x0H6.js";import{ot as ce}from"./index-CxrzleFg.js";var b=e(u(),1),x=v(),S={critical:0,high:1,medium:2,low:3},le={critical:`bg-accent-red/20 text-accent-red`,high:`bg-accent-red/15 text-accent-red`,medium:`bg-accent-yellow/20 text-accent-yellow`,low:`bg-accent-green/20 text-accent-green`};function C(e,t){let n=`tools.cat.${e}`,r=t(n);if(r&&r!==n)return r;let i=e.replace(/_/g,` `).trim();return i?i.charAt(0).toUpperCase()+i.slice(1):t(`tools.groupUncategorized`)}function w(e,t){switch(e){case`critical`:return t(`tools.riskCritical`);case`high`:return t(`tools.riskHigh`);case`medium`:return t(`tools.riskMedium`);case`low`:return t(`tools.riskLow`);default:return t(`tools.riskUnknown`)}}function T(e,t,n){let r=new Map;for(let i of e){let e,a,o=0;t===`risk`?(e=i.risk??`unknown`,a=w(i.risk,n),o=S[e]??99):t===`state`?(e=i.enabled?`on`:`off`,a=i.enabled?n(`tools.enabled`):n(`tools.disabled`),o=+!i.enabled):(e=i.category||`__none__`,a=i.category?C(i.category,n):n(`tools.groupUncategorized`));let s=r.get(e);s||(s={key:e,label:a,tools:[],order:o},r.set(e,s)),s.tools.push(i)}for(let e of r.values())e.tools.sort((e,t)=>e.enabled===t.enabled?e.id.localeCompare(t.id):e.enabled?-1:1);return[...r.values()].sort((e,n)=>t===`category`?n.tools.length-e.tools.length||e.label.localeCompare(n.label):e.order-n.order||e.label.localeCompare(n.label))}function ue(e,t){try{if(typeof URL.createObjectURL!=`function`)return!1;let n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);return i.href=r,i.download=e,i.click(),URL.revokeObjectURL(r),!0}catch{return!1}}function E(){let{t:e}=m(),[u,v]=(0,b.useState)([]),[S,C]=(0,b.useState)(!0),[E,D]=(0,b.useState)(!1),[O,k]=(0,b.useState)(null),[A,de]=(0,b.useState)(``),[j,fe]=(0,b.useState)(`category`),[M,N]=(0,b.useState)(new Set),[pe,P]=(0,b.useState)(null),[F,I]=(0,b.useState)(null),[L,R]=(0,b.useState)({name:``,description:``,category:``,enabled:!0}),[z,B]=(0,b.useState)(null),[V,me]=(0,b.useState)(null),[H,he]=(0,b.useState)(0),[ge,_e]=(0,b.useState)(null),[U,W]=(0,b.useState)(null),G=(0,b.useRef)(null),K=(0,b.useCallback)(async(t=!1)=>{t?D(!0):(C(!0),k(null));try{let[n,r]=await Promise.all([_.tools.list(),_.tools.exportConfig()]);n.success&&Array.isArray(n.data)?(v(n.data),k(null)):!t&&n.success&&n.data?k(e(`tools.invalidData`)):t||k(n.error||e(`tools.loadFailed`)),r.success&&r.data&&(me(r.data.path??null),he(Object.keys(r.data.tools??{}).length),_e(r.data.profile??null))}catch(e){t||k(e instanceof Error?e.message:String(e))}finally{C(!1),D(!1)}},[e]);(0,b.useEffect)(()=>{K()},[K]),ce(()=>void K(!0));let ve=(0,b.useCallback)(()=>{window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:`connectors`}))},[]),q=(0,b.useMemo)(()=>{let e=A.trim().toLowerCase();return e?u.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.category.toLowerCase().includes(e)):u},[u,A]),J=(0,b.useMemo)(()=>T(q,j,e),[q,j,e]),Y=(0,b.useMemo)(()=>u.filter(e=>e.enabled).length,[u]),X=(0,b.useCallback)((e,t,n)=>{v(r=>r.map(r=>r.id===t?{...r,...n,...e??{}}:r))},[]),ye=(0,b.useCallback)(async t=>{B(t.id);let n=await _.tools.toggle(t.id,!t.enabled);if(B(null),!n.success){h.error(n.error||e(`tools.toggleFailed`));return}let r=n.data?.enabled??!t.enabled;X(void 0,t.id,{enabled:r,overridden:!0})},[X,e]),be=(0,b.useCallback)(e=>{I(e.id),P(e.id),R({name:e.name,description:e.description,category:e.category,enabled:e.enabled})},[]),xe=(0,b.useCallback)(async t=>{B(t.id);let n=await _.tools.update(t.id,{name:L.name,description:L.description,category:L.category,enabled:L.enabled});B(null),!n.success||!n.data?h.error(n.error||e(`tools.saveFailed`)):(X(n.data,t.id,{}),I(null),h.success(e(`tools.saved`)))},[L,X,e]),Se=(0,b.useCallback)(async t=>{B(t.id);let n=await _.tools.reset(t.id);B(null),!n.success||!n.data?h.error(n.error||e(`tools.resetFailed`)):(X(n.data,t.id,{}),I(e=>e===t.id?null:e),h.success(e(`tools.resetDone`)))},[X,e]),Z=(0,b.useCallback)(async(t,n)=>{let r=t.tools.filter(e=>e.enabled!==n);if(r.length===0)return;let i=(await Promise.all(r.map(e=>_.tools.toggle(e.id,n)))).filter(e=>!e.success).length;i>0&&h.warning(e(`tools.groupPartial`,{failed:i,total:r.length})),await K(!0)},[K,e]),Ce=(0,b.useCallback)(async()=>{let t=await _.tools.exportConfig();if(!t.success||!t.data){h.error(t.error||e(`tools.loadFailed`));return}let n=Object.keys(t.data.tools??{}).length;n===0?h.info(e(`tools.exportEmpty`)):ue(`deepseekcode-tools.json`,t.data)?h.success(e(`tools.exportDone`,{count:n})):h.error(e(`tools.exportFailed`))},[e]),we=(0,b.useCallback)(async t=>{let n;try{n=JSON.parse(await t.text())}catch{h.error(e(`tools.importInvalid`));return}let r=n&&typeof n==`object`&&`tools`in n?n.tools:n,i=r&&typeof r==`object`&&!Array.isArray(r)?Object.keys(r).length:0;i===0?h.error(e(`tools.importEmpty`)):W({payload:n,count:i})},[e]),Q=(0,b.useCallback)(async t=>{let n=U;if(W(null),!n)return;let r=await _.tools.importConfig(n.payload,t);!r.success||!r.data?h.error(e(`tools.importFailed`,{error:r.error??``})):(r.data.unknown.length>0&&h.warning(e(`tools.importUnknown`,{count:r.data.unknown.length})),h.success(e(`tools.importDone`,{count:r.data.applied.length})),await K(!0))},[K,U,e]),Te=(0,b.useCallback)(e=>{N(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),$=J.length>0&&J.every(e=>M.has(e.key));return S&&u.length===0?(0,x.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,role:`status`,"aria-label":e(`tools.loading`),children:(0,x.jsx)(ae,{count:5})}):O?(0,x.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,x.jsxs)(`div`,{className:`text-center`,children:[(0,x.jsx)(l,{size:32,className:`mx-auto mb-2 text-accent-red`}),(0,x.jsx)(`p`,{className:`text-accent-red mb-4`,children:O}),(0,x.jsx)(g,{variant:`accent`,onClick:()=>void K(),children:e(`tools.retry`)})]})}):(0,x.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden p-4 max-md:p-3`,children:[(0,x.jsxs)(`div`,{className:`flex items-center justify-between mb-3 gap-3 max-md:flex-wrap max-md:gap-2`,children:[(0,x.jsxs)(`h2`,{className:`text-lg font-semibold flex items-center gap-2 min-w-0`,children:[(0,x.jsx)(p,{size:20,className:`shrink-0`}),(0,x.jsx)(`span`,{className:`truncate`,children:e(`tools.title`)}),(0,x.jsxs)(`span`,{className:`text-sm font-normal text-dark-muted whitespace-nowrap`,children:[e(`tools.totalTools`,{count:u.length}),` · `,e(`tools.enabledCount`,{count:Y})]})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0 max-md:w-full max-md:justify-end`,children:[(0,x.jsxs)(`button`,{onClick:()=>void Ce(),title:V?e(`tools.importPath`,{path:V}):void 0,className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,x.jsx)(i,{size:14}),e(`tools.exportConfig`),H>0&&(0,x.jsxs)(`span`,{className:`text-xs text-accent-blue`,children:[`(`,H,`)`]})]}),(0,x.jsxs)(`button`,{onClick:()=>G.current?.click(),className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,x.jsx)(ne,{size:14}),e(`tools.importConfig`)]}),(0,x.jsx)(`input`,{ref:G,type:`file`,accept:`application/json,.json`,className:`hidden`,"data-testid":`tools-import-input`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&we(t)}}),(0,x.jsxs)(`button`,{onClick:()=>void K(!0),disabled:E,className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors disabled:opacity-60`,children:[(0,x.jsx)(ee,{size:14,className:E?`animate-spin`:void 0}),e(`tools.refresh`)]})]})]}),(0,x.jsx)(oe,{slot:e(`nav.tools`),className:`mb-3`}),(0,x.jsxs)(`div`,{className:`mb-3 px-3 py-2 rounded-lg bg-accent-blue/10 border border-accent-blue/20 text-xs text-dark-muted space-y-1`,children:[ge===`minimal`&&(0,x.jsx)(`div`,{children:e(`tools.profileMinimalHint`,{off:u.length-Y})}),(0,x.jsxs)(`div`,{className:`flex items-center gap-x-2 gap-y-1 flex-wrap`,children:[(0,x.jsx)(`span`,{children:e(`tools.scopeHint`)}),(0,x.jsxs)(`button`,{type:`button`,onClick:ve,className:`inline-flex items-center gap-1 text-accent-blue hover:underline`,children:[e(`tools.scopeHintConnectorsLink`),(0,x.jsx)(o,{size:11})]})]})]}),(0,x.jsxs)(`div`,{className:`flex gap-3 mb-3 items-center flex-wrap`,children:[(0,x.jsxs)(`div`,{className:`flex-1 min-w-[200px] relative`,children:[(0,x.jsx)(a,{size:16,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,x.jsx)(`input`,{type:`text`,value:A,onChange:e=>de(e.target.value),placeholder:e(`tools.searchTools`),className:`w-full ps-10 pe-4 py-2 bg-dark-surface border border-dark-border rounded-lg text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,x.jsx)(d,{size:14,className:`text-dark-muted`}),(0,x.jsx)(`span`,{className:`text-dark-muted me-1`,children:e(`tools.groupBy`)}),[`category`,`risk`,`state`].map(t=>(0,x.jsx)(`button`,{onClick:()=>fe(t),className:`px-3 py-1.5 rounded-lg transition-colors ${j===t?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:e(t===`category`?`tools.groupByCategory`:t===`risk`?`tools.groupByRisk`:`tools.groupByState`)},t)),(0,x.jsx)(`button`,{onClick:()=>N($?new Set:new Set(J.map(e=>e.key))),className:`px-3 py-1.5 rounded-lg bg-dark-surface border border-dark-border hover:bg-dark-hover transition-colors`,children:e($?`tools.expandAll`:`tools.collapseAll`)})]})]}),(0,x.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar`,children:(0,x.jsxs)(`div`,{className:`space-y-3`,children:[J.map(i=>{let a=M.has(i.key),o=i.tools.filter(e=>e.enabled).length;return(0,x.jsxs)(`div`,{className:`bg-dark-surface border border-dark-border rounded-lg overflow-hidden`,children:[(0,x.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 bg-dark-hover/40 max-md:flex-wrap max-md:gap-2`,children:[(0,x.jsxs)(`button`,{onClick:()=>Te(i.key),className:`flex items-center gap-2 min-w-0 flex-1 text-start`,children:[a?(0,x.jsx)(n,{size:16,className:`shrink-0 text-dark-muted`}):(0,x.jsx)(t,{size:16,className:`shrink-0 text-dark-muted`}),(0,x.jsx)(`span`,{className:`font-medium truncate`,children:i.label}),(0,x.jsx)(`span`,{className:`text-xs text-dark-muted whitespace-nowrap`,children:e(`tools.groupEnabled`,{on:o,total:i.tools.length})})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0 max-md:w-full max-md:justify-end`,children:[(0,x.jsx)(`button`,{onClick:()=>void Z(i,!0),disabled:o===i.tools.length,className:`text-xs px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40 disabled:cursor-not-allowed`,children:e(`tools.enableGroup`)}),(0,x.jsx)(`button`,{onClick:()=>void Z(i,!1),disabled:o===0,className:`text-xs px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40 disabled:cursor-not-allowed`,children:e(`tools.disableGroup`)})]})]}),!a&&(0,x.jsx)(`div`,{className:`divide-y divide-dark-border`,children:i.tools.map(i=>{let a=F===i.id,o=pe===i.id||a;return(0,x.jsxs)(`div`,{className:i.enabled?``:`opacity-60`,children:[(0,x.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 gap-3 max-md:flex-wrap max-md:gap-1`,children:[(0,x.jsxs)(`button`,{className:`flex items-center gap-2 flex-1 min-w-0 text-start max-md:w-full max-md:flex-wrap`,onClick:()=>P(o&&!a?null:i.id),children:[o?(0,x.jsx)(t,{size:14,className:`shrink-0 text-dark-muted`}):(0,x.jsx)(n,{size:14,className:`shrink-0 text-dark-muted`}),(0,x.jsx)(`span`,{className:`font-medium truncate`,children:i.name}),(0,x.jsx)(`code`,{className:`text-xs text-dark-muted truncate`,children:i.id}),i.risk&&(0,x.jsxs)(`span`,{className:`px-1.5 py-0.5 rounded text-badge whitespace-nowrap ${le[i.risk]??`bg-dark-hover text-dark-muted`}`,children:[i.risk===`high`||i.risk===`critical`?(0,x.jsx)(r,{size:10,className:`inline -mt-px me-0.5`}):null,w(i.risk,e)]}),i.overridden&&(0,x.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-accent-purple/20 text-accent-purple whitespace-nowrap`,children:e(`tools.overridden`)}),!i.enabled&&!i.overridden&&(0,x.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-dark-hover text-dark-muted whitespace-nowrap`,children:i.defaultEnabled===!1?e(`tools.defaultOff`):e(`tools.disabled`)}),i.userInstalled&&(0,x.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-accent-blue/20 text-accent-blue whitespace-nowrap`,title:e(`tools.userInstalledHint`),children:e(`tools.userInstalled`)})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0 max-md:w-full max-md:justify-end`,children:[(0,x.jsx)(y,{slot:`tools`,id:i.id}),(0,x.jsx)(`button`,{onClick:()=>be(i),title:e(`tools.edit`),className:`p-1.5 rounded text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors`,children:(0,x.jsx)(s,{size:14})}),i.overridden&&(0,x.jsx)(`button`,{onClick:()=>void Se(i),disabled:z===i.id,title:e(`tools.reset`),className:`p-1.5 rounded text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors disabled:opacity-40`,children:(0,x.jsx)(f,{size:14})}),(0,x.jsx)(`button`,{onClick:()=>void ye(i),disabled:z===i.id,title:i.enabled?e(`tools.disabled`):e(`tools.enabled`),className:`p-1.5 rounded transition-colors disabled:opacity-40 disabled:cursor-not-allowed ${i.enabled?`text-accent-green hover:bg-accent-green/10`:`text-dark-muted hover:bg-dark-hover`}`,children:i.enabled?(0,x.jsx)(ie,{size:24}):(0,x.jsx)(c,{size:24})})]})]}),o&&(0,x.jsx)(`div`,{className:`px-3 pb-3 border-t border-dark-border`,children:a?(0,x.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,x.jsxs)(`label`,{className:`block`,children:[(0,x.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldName`)}),(0,x.jsx)(`input`,{value:L.name,onChange:e=>R(t=>({...t,name:e.target.value})),placeholder:e(`tools.namePlaceholder`),className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,x.jsxs)(`label`,{className:`block`,children:[(0,x.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldCategory`)}),(0,x.jsx)(`input`,{value:L.category,onChange:e=>R(t=>({...t,category:e.target.value})),placeholder:e(`tools.categoryPlaceholder`),className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,x.jsxs)(`label`,{className:`block`,children:[(0,x.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldDescription`)}),(0,x.jsx)(`textarea`,{value:L.description,onChange:e=>R(t=>({...t,description:e.target.value})),placeholder:e(`tools.descriptionPlaceholder`),rows:3,className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none resize-y`})]}),(0,x.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,x.jsx)(`input`,{type:`checkbox`,checked:L.enabled,onChange:e=>R(t=>({...t,enabled:e.target.checked}))}),e(`tools.fieldEnabled`)]}),(0,x.jsx)(`p`,{className:`text-xs text-dark-muted`,children:e(`tools.descriptionHint`)}),(0,x.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,x.jsx)(g,{variant:`accent`,size:`sm`,leftIcon:(0,x.jsx)(te,{size:14}),loading:z===i.id,onClick:()=>void xe(i),children:e(`tools.save`)}),(0,x.jsxs)(`button`,{onClick:()=>I(null),className:`flex items-center gap-1.5 px-3 py-1.5 border border-dark-border rounded text-sm hover:bg-dark-hover`,children:[(0,x.jsx)(re,{size:14}),e(`tools.cancel`)]})]})]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`p`,{className:`text-sm text-dark-muted mt-3 mb-3 whitespace-pre-wrap`,children:i.description}),i.usage&&(0,x.jsxs)(`div`,{className:`mb-3`,children:[(0,x.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:e(`tools.usageHint`)}),(0,x.jsx)(`p`,{className:`text-sm text-dark-muted whitespace-pre-wrap`,children:i.usage})]}),i.params&&i.params.length>0&&(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`div`,{className:`text-xs text-dark-muted mb-2`,children:e(`tools.params`)}),(0,x.jsx)(`div`,{className:`space-y-1`,children:i.params.map(e=>(0,x.jsxs)(`div`,{className:`flex items-center gap-2 text-sm flex-wrap`,children:[(0,x.jsxs)(`code`,{className:`px-1.5 py-0.5 bg-dark-bg rounded text-accent-blue`,children:[e.name,e.required&&(0,x.jsx)(`span`,{className:`text-accent-red`,children:`*`})]}),(0,x.jsxs)(`span`,{className:`text-dark-muted text-xs`,children:[`(`,e.type,`)`]}),(0,x.jsx)(`span`,{className:`text-dark-muted text-xs`,children:e.description})]},e.name))})]})]})})]},i.id)})})]},i.key)}),q.length===0&&(0,x.jsxs)(`div`,{className:`text-center text-dark-muted py-8`,children:[(0,x.jsx)(p,{size:48,className:`mx-auto mb-2 opacity-50`}),(0,x.jsx)(`p`,{children:e(A?`tools.noMatch`:`tools.noTools`)})]})]})}),(0,x.jsxs)(se,{isOpen:U!==null,onClose:()=>W(null),title:e(`tools.importTitle`),size:`sm`,children:[(0,x.jsx)(`p`,{className:`text-sm text-dark-muted mb-4`,children:e(`tools.importDesc`,{count:U?.count??0})}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsxs)(`button`,{onClick:()=>void Q(`merge`),className:`w-full text-start px-3 py-2 border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,x.jsx)(`div`,{className:`font-medium text-sm`,children:e(`tools.importMerge`)}),(0,x.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tools.importMergeHint`)})]}),(0,x.jsxs)(`button`,{onClick:()=>void Q(`replace`),className:`w-full text-start px-3 py-2 border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,x.jsx)(`div`,{className:`font-medium text-sm`,children:e(`tools.importReplace`)}),(0,x.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tools.importReplaceHint`)})]}),(0,x.jsx)(`button`,{onClick:()=>W(null),className:`w-full px-3 py-2 text-sm text-dark-muted hover:text-dark-text transition-colors`,children:e(`tools.cancel`)})]})]})]})}export{E as ToolsView,E as default};
|