@opendots/cli 1.0.41 → 1.0.42
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 +21 -17
- package/package.json +9 -9
- package/web/dist/assets/AssistantsView-Ct3BBpYf.js +1 -0
- package/web/dist/assets/AutomationView-CO-jVhee.js +3 -0
- package/web/dist/assets/ChannelConfigView-Ct1W584x.js +8 -0
- package/web/dist/assets/ChartsView-CAc37Sam.js +1 -0
- package/web/dist/assets/ConnectorsView-DP4bbh58.js +1 -0
- package/web/dist/assets/FileTreeView-DwsYfssO.js +1 -0
- package/web/dist/assets/HookConfigView-uFsqieii.js +2 -0
- package/web/dist/assets/InputArea-BY8quOiH.js +14 -0
- package/web/dist/assets/MemoryView-Bgd_lcTf.js +1 -0
- package/web/dist/assets/{MessageBubble-CV16DZMG.js → MessageBubble-CVGXupVH.js} +20 -20
- package/web/dist/assets/ModelsView-B271UV9L.js +1 -0
- package/web/dist/assets/PluginsView-Dz4fqQR1.js +2 -0
- package/web/dist/assets/ProjectsView-DF-YCV8y.js +1 -0
- package/web/dist/assets/SessionGrid-BIREstN2.js +4 -0
- package/web/dist/assets/SettingsModal-ZJeoZcCd.js +4 -0
- package/web/dist/assets/SkillsView-CH2ghYL2.js +1 -0
- package/web/dist/assets/TemplatesTab-BGe7_67s.js +1 -0
- package/web/dist/assets/ThreadsView-XditIHZ4.js +2 -0
- package/web/dist/assets/ToolsView-BBzsFdVZ.js +1 -0
- package/web/dist/assets/{agentIconSet-Btsb_SC4.js → agentIconSet-B5GUQwel.js} +1 -1
- package/web/dist/assets/{api-CCt9DRQm.js → api-plEYhRn0.js} +1 -1
- package/web/dist/assets/common-Bbatsa0-.js +192 -0
- package/web/dist/assets/{icons-BvYhTENi.js → icons-CYDRRPKW.js} +1 -1
- package/web/dist/assets/index-CTbLW314.js +133 -0
- package/web/dist/assets/index-DdzVrZye.css +1 -0
- package/web/dist/assets/{markdown-DAQZeY5V.js → markdown-N5__3T-w.js} +1 -1
- package/web/dist/assets/{panels-DYiQiVWh.js → panels-CIPgN61N.js} +1 -1
- package/web/dist/assets/{react-vendor-BlngCquv.js → react-vendor-CB4cLN-6.js} +1 -1
- package/web/dist/assets/settingsStore-Xqln0d91.js +1 -0
- package/web/dist/assets/{state-_ZfNVAsd.js → state-CSZ50keL.js} +1 -1
- package/web/dist/assets/sttLanguages-CSNMgUTz.js +2 -0
- package/web/dist/assets/ttsSettings-BwXYpDnk.js +2 -0
- package/web/dist/assets/useConfirm-Da8iQ_DZ.js +1 -0
- package/web/dist/assets/{useTranslation-BGmCDuQI.js → useTranslation-B-mfApCn.js} +1 -1
- package/web/dist/assets/{websocket-C9e3h7VU.js → websocket-BnDwh01e.js} +1 -1
- package/web/dist/assets/whatsNewStore-LpdLRLGl.js +1 -0
- package/web/dist/index.html +18 -18
- package/web/dist/vendor/MANIFEST.json +24 -0
- package/web/dist/vendor/d3.min.js +2 -0
- package/web/dist/vendor/echarts.min.js +45 -0
- package/web/dist/assets/AssistantsView-dhdYVIy0.js +0 -1
- package/web/dist/assets/AutomationView-D1dU5ZV7.js +0 -1
- package/web/dist/assets/ChannelConfigView-CEPVZntU.js +0 -8
- package/web/dist/assets/ChartsView-DdN-beHW.js +0 -1
- package/web/dist/assets/ConnectorsView-CseCss9C.js +0 -1
- package/web/dist/assets/FileTreeView-Dnc3-gRF.js +0 -1
- package/web/dist/assets/HookConfigView-DA2h4HdJ.js +0 -1
- package/web/dist/assets/InputArea-DAgOOjOc.js +0 -14
- package/web/dist/assets/MemoryView-D6OUBi4-.js +0 -1
- package/web/dist/assets/ModelsView-BuqD9vWl.js +0 -1
- package/web/dist/assets/PluginsView-CIziDHFJ.js +0 -2
- package/web/dist/assets/ProjectsView-c6faWy32.js +0 -1
- package/web/dist/assets/SessionGrid-BZJHcklh.js +0 -4
- package/web/dist/assets/SettingsModal-BqdGEGW-.js +0 -4
- package/web/dist/assets/SkillsView-CB6CKkmb.js +0 -1
- package/web/dist/assets/TemplatesTab-B8efVwVZ.js +0 -1
- package/web/dist/assets/ThreadsView-CDoM0aNb.js +0 -2
- package/web/dist/assets/ToolsView-BG-xsWsO.js +0 -1
- package/web/dist/assets/cn-rx4uumOJ.js +0 -1
- package/web/dist/assets/common-BHXgEvgk.js +0 -192
- package/web/dist/assets/index-BNI6CNsY.css +0 -1
- package/web/dist/assets/index-BX-d2OBW.js +0 -130
- package/web/dist/assets/settingsStore-RLUAWgIk.js +0 -1
- package/web/dist/assets/sttLanguages-aqoVC79g.js +0 -2
- package/web/dist/assets/ttsSettings-DHo3OsOq.js +0 -15
- package/web/dist/assets/whatsNewStore-Bf_7lW8o.js +0 -1
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Bt as n,Ct as r,En as i,Gn as a,H as o,In as s,J as c,L as l,Nn as u,O as d,Ot as f,Pr as p,Rn as m,Un as h,Ur as g,V as _,Vn as v,W as y,Yn as b,Z as x,Zt as S,ar as C,b as w,br as T,bt as E,c as D,dn as O,ft as k,i as A,it as j,j as ee,k as M,m as N,mn as P,n as te,or as F,st as ne,tn as I,ur as L,vr as re,xr as ie,xt as ae,zn as oe}from"./icons-BvYhTENi.js";import{t as R}from"./useTranslation-BGmCDuQI.js";import{a as se,i as ce,n as le,o as z,t as ue}from"./ttsSettings-DHo3OsOq.js";import{n as B,t as V}from"./cn-rx4uumOJ.js";import{D as de,O as fe}from"./src-49LUQhkG.js";import{a as pe,i as me,o as he,r as ge,t as _e}from"./sttLanguages-aqoVC79g.js";import{C as ve,E as ye,O as be,h as xe,m as H,r as U,v as Se,w as Ce,x as we,y as Te}from"./settingsStore-RLUAWgIk.js";import{r as W,t as G}from"./api-CCt9DRQm.js";import{I as Ee}from"./markdown-DAQZeY5V.js";import{A as K,g as De,j as Oe}from"./common-BHXgEvgk.js";import{t as ke}from"./whatsNewStore-Bf_7lW8o.js";import{T as Ae}from"./index-BX-d2OBW.js";import{n as q}from"./profileChange-xrd7jkii.js";var J=e(g(),1),Y=Ee();function je(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function Me(e){return new Date(e).toLocaleString()}function Ne(){let[e,n]=(0,J.useState)([]),[r,a]=(0,J.useState)(null),[o,s]=(0,J.useState)(``),[l,u]=(0,J.useState)(``),[d,f]=(0,J.useState)(!1),[p,m]=(0,J.useState)(!1),h=(0,J.useCallback)(async()=>{f(!0);try{let e=await G.config.files.list();e.success&&Array.isArray(e.data)&&n(e.data)}catch{B.error(`Failed to load config files`)}finally{f(!1)}},[]),g=(0,J.useCallback)(async e=>{try{let t=await G.config.files.read(e);if(t.success&&t.data){let e=t.data;a(e.name),s(e.content),u(e.content)}}catch{B.error(`Failed to read ${e}`)}},[]);(0,J.useEffect)(()=>{h()},[h]);let _=(0,J.useCallback)(async()=>{if(r){m(!0);try{let e=await G.config.files.write(r,o);e.success?(u(o),B.success(`${r} saved`),h()):B.error(e.error||`Failed to save`)}catch{B.error(`Failed to save file`)}finally{m(!1)}}},[r,o,h]),v=o!==l,y=r?.endsWith(`.yaml`)||r?.endsWith(`.yml`),b=r?.endsWith(`.json`);return(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`h4`,{className:`text-sm font-medium text-dark-text`,children:`Config Files`}),(0,Y.jsx)(`button`,{onClick:h,disabled:d,className:`p-1.5 rounded hover:bg-dark-hover transition-colors text-dark-muted`,title:`Refresh file list`,children:(0,Y.jsx)(t,{size:14,className:d?`animate-spin`:``})})]}),e.length===0&&!d&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted`,children:`No config files found in ~/.agent/`}),e.length>0&&(0,Y.jsxs)(`div`,{className:`flex gap-3`,children:[(0,Y.jsx)(`div`,{className:`w-48 shrink-0 space-y-0.5 max-h-[300px] overflow-y-auto custom-scrollbar`,children:e.map(e=>(0,Y.jsxs)(`button`,{onClick:()=>g(e.name),className:`w-full text-start px-2.5 py-1.5 rounded text-xs flex items-center gap-2 transition-colors ${r===e.name?`bg-accent-blue/10 text-accent-blue`:`text-dark-text hover:bg-dark-hover`}`,children:[(0,Y.jsx)(i,{size:12,className:`shrink-0`}),(0,Y.jsx)(`span`,{className:`truncate flex-1`,children:e.name}),!e.editable&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted shrink-0`,title:`Read-only`,children:`read`})]},e.name))}),r?(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between mb-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted`,children:[(0,Y.jsx)(`span`,{className:`text-dark-text font-medium`,children:r}),e.find(e=>e.name===r)&&(0,Y.jsxs)(`span`,{children:[je(e.find(e=>e.name===r).size),` · `,Me(e.find(e=>e.name===r).modified)]}),v&&(0,Y.jsxs)(`span`,{className:`text-accent-yellow flex items-center gap-1`,children:[(0,Y.jsx)(N,{size:10}),`unsaved changes`]})]}),(0,Y.jsx)(K,{variant:`accent`,size:`sm`,leftIcon:(0,Y.jsx)(c,{size:12}),loading:p,disabled:!v,onClick:_,children:`Save`})]}),(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(`pre`,{className:`w-full h-[260px] p-3 rounded-lg bg-dark-bg border border-dark-border font-mono text-xs leading-relaxed overflow-auto custom-scrollbar pointer-events-none`,dangerouslySetInnerHTML:{__html:o.split(`
|
|
2
|
-
`).map(e=>y?e.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`):b?e.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>`):e).join(`
|
|
3
|
-
`)||` `}}),(0,Y.jsx)(`textarea`,{value:o,onChange:e=>s(e.target.value),className:`absolute inset-0 w-full h-full p-3 rounded-lg bg-transparent border border-dark-border font-mono text-xs leading-relaxed resize-none overflow-auto custom-scrollbar text-transparent caret-dark-text focus:outline-none focus:border-accent-blue/50`,style:{color:`transparent`},spellCheck:!1})]})]}):(0,Y.jsx)(`div`,{className:`flex-1 flex items-center justify-center text-xs text-dark-muted`,children:`Select a file to edit`})]})]})}var Pe=[{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`}],Fe=`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 Ie(){let{t:e}=R(),[t,r]=(0,J.useState)(!1),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(!1),[l,u]=(0,J.useState)(!1),[d,f]=(0,J.useState)(null),[p,m]=(0,J.useState)({pipIndexUrl:``,pipExtraIndexUrl:``,proxy:``,hfEndpoint:``}),h=(0,J.useCallback)(e=>{f(e),m({pipIndexUrl:e.settings.pipIndexUrl??``,pipExtraIndexUrl:e.settings.pipExtraIndexUrl??``,proxy:e.settings.proxy??``,hfEndpoint:e.settings.hfEndpoint??``})},[]),g=(0,J.useCallback)(async()=>{s(!0);try{let e=await G.stt.getConfig();e.success&&e.data?h(e.data):e.error&&B.error(e.error)}catch{}s(!1),a(!0)},[h]);(0,J.useEffect)(()=>{t&&!i&&g()},[t,i,g]);let _=d?.envKeys,v=d?.resolved.fromEnv??[],y=e=>v.includes(e),b=Object.keys(p).filter(e=>{let t=p[e].trim();return!t||y(e)?!1:e===`pipExtraIndexUrl`||e===`proxy`||t!==d?.official[e]}),S=Object.keys(p).some(e=>!y(e)&&p[e].trim()!==(d?.settings[e]??``)),C=(0,J.useCallback)(async()=>{u(!0);try{let t={};for(let{key:e}of Pe)y(e)||(t[e]=p[e].trim()||null);let n=await G.stt.setConfig(t);n.success&&n.data?(B.success(e(`stt.sources.saved`)),await g()):B.error(n.error||e(`stt.sources.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}u(!1)},[p,y,g,e]),w=(0,J.useCallback)(async()=>{u(!0);try{let t=await G.stt.setConfig({pipIndexUrl:null,pipExtraIndexUrl:null,proxy:null,hfEndpoint:null});t.success&&t.data?(B.success(e(`stt.sources.resetDone`)),await g()):B.error(t.error||e(`stt.sources.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}u(!1)},[g,e]);return(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface overflow-hidden`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:`w-full flex items-center gap-2 px-3 py-2.5 text-start hover:bg-dark-hover transition-colors`,onClick:()=>r(e=>!e),children:[t?(0,Y.jsx)(T,{size:14,className:`text-dark-muted`}):(0,Y.jsx)(re,{size:14,className:`text-dark-muted`}),(0,Y.jsx)(O,{size:14,className:`text-accent-blue`}),(0,Y.jsx)(`span`,{className:`text-sm font-medium text-dark-text flex-1`,children:e(`stt.sources.title`)}),b.length>0&&!t&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-accent-orange/15 text-accent-orange`,children:[(0,Y.jsx)(N,{size:11}),e(`stt.sources.badgeCustom`,{count:b.length})]})]}),t&&(0,Y.jsxs)(`div`,{className:`px-3 pb-3 space-y-3 border-t border-dark-border pt-3`,children:[(0,Y.jsx)(`p`,{className:`text-meta text-dark-muted`,children:e(`stt.sources.hint`)}),o&&!d?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted py-2`,children:[(0,Y.jsx)(n,{size:13,className:`animate-spin`}),e(`stt.sources.loading`)]}):(0,Y.jsxs)(Y.Fragment,{children:[Pe.map(({key:t,labelKey:n,placeholderKey:r,preset:i})=>{let a=y(t),o=(_?.[t]??[]).join(` / `)||`ENV`,s=i?d?.presets?.[i]??[]:[];return(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-dark-muted mb-1`,children:[e(n),a&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-yellow`,title:e(`stt.sources.envTitle`,{name:o}),children:[(0,Y.jsx)(N,{size:11}),`env: `,o]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`input`,{type:`text`,value:a?d?.resolved[t]??``:p[t],disabled:a,spellCheck:!1,placeholder:e(r),onChange:e=>m(n=>({...n,[t]:e.target.value})),className:Fe}),s.length>0&&(0,Y.jsxs)(`select`,{value:``,disabled:a,title:e(`stt.sources.preset`),onChange:e=>{let n=s.find(t=>t.id===e.target.value);n&&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,Y.jsx)(`option`,{value:``,children:e(`stt.sources.preset`)}),s.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]})]},t)}),b.length>0&&(0,Y.jsxs)(`div`,{className:`rounded-md border border-accent-orange/30 bg-accent-orange/5 px-2.5 py-2 text-meta text-accent-orange flex items-start gap-1.5`,children:[(0,Y.jsx)(N,{size:12,className:`mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{children:e(`stt.sources.warning`)})]}),d&&!d.allowPrivateHosts&&(0,Y.jsx)(`p`,{className:`text-badge text-dark-muted`,children:e(`stt.sources.privateBlocked`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-0.5`,children:[(0,Y.jsx)(K,{variant:`accent`,size:`sm`,leftIcon:(0,Y.jsx)(c,{size:13}),loading:l,disabled:!S,onClick:()=>void C(),children:e(`stt.sources.save`)}),(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm border border-dark-border text-dark-muted hover:border-dark-hover hover:text-dark-text transition-colors disabled:opacity-50`,disabled:l,onClick:()=>void w(),children:[(0,Y.jsx)(x,{size:13}),e(`stt.sources.reset`)]}),(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e(`stt.sources.httpsOnly`)})]})]})]})]})}function Le(){let{t:e}=R(),[r,i]=(0,J.useState)(null),[o,s]=(0,J.useState)(null),[c,l]=(0,J.useState)({running:!1,logs:[]}),[u,d]=(0,J.useState)(!1),f=(0,J.useRef)(null),p=(0,J.useRef)(c),m=(0,J.useRef)(null),[h,g]=(0,J.useState)(me),_=(0,J.useCallback)(e=>{g(e),ge(e),window.dispatchEvent(new CustomEvent(`stt-lang-changed`,{detail:{lang:e}}))},[]);(0,J.useEffect)(()=>{p.current=c},[c]);let y=(0,J.useCallback)(async()=>{d(!0);let e=await G.stt.status();e.success&&e.data?(i(e.data),e.data.env&&s(e.data.env)):e.error&&B.error(e.error),d(!1)},[]);(0,J.useEffect)(()=>{y()},[y]);let x=(0,J.useCallback)(async()=>{let e=await G.stt.installStatus();if(e.success&&e.data){let t=p.current.running;l(e.data),e.data.running?f.current=window.setTimeout(()=>void x(),1e3):(y(),t&&e.data.status===`done`&&window.dispatchEvent(new CustomEvent(`stt-backends-changed`)))}},[y]);(0,J.useEffect)(()=>()=>{f.current&&window.clearTimeout(f.current)},[]),(0,J.useEffect)(()=>{m.current&&(m.current.scrollTop=m.current.scrollHeight)},[c.logs]);let C=(0,J.useCallback)(async()=>{let t=await G.stt.install();t.success&&t.data?.started?(l({running:!0,logs:[],status:`running`}),x()):t.data?.alreadyRunning?(B.info(e(`stt.setup.jobInProgress`)),x()):l({running:!1,logs:[],status:`error`,error:t.error||t.data?.error||`install failed`,manualCommand:t.data?.manualCommand})},[x,e]),T=(0,J.useCallback)(async()=>{await G.stt.cancelInstall(),x()},[x]),E=(0,J.useCallback)(t=>{navigator.clipboard.writeText(t).then(()=>B.success(e(`stt.setup.copySuccess`)),()=>B.error(e(`stt.setup.copyFailed`)))},[e]),D=c.running,O=!D&&c.status===`done`?r?.backends?.en:void 0,k=O?!O.installed:!1,A=t=>t?(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-accent-green/15 text-accent-green`,children:[(0,Y.jsx)(L,{size:12}),e(`stt.setup.installed`)]}):(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-dark-hover text-dark-muted`,children:[(0,Y.jsx)(F,{size:12}),e(`stt.setup.notInstalled`)]}),j=h===`en`?`base.en`:`base`,ee=pe(h),M=()=>{let i=r?.backends?.en??{installed:!1,loaded:!1,model:`base.en`};return(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3 flex items-start justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-3 min-w-0`,children:[(0,Y.jsx)(`div`,{className:`w-9 h-9 shrink-0 rounded-lg flex items-center justify-center text-sm font-semibold bg-accent-blue/15 text-accent-blue`,children:`W`}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium text-dark-text`,children:e(`stt.setup.whisperTitle`)}),A(i.installed),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-accent-blue/15 text-accent-blue`,children:[(0,Y.jsx)(S,{size:12}),e(`stt.setup.inUse`)]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 mt-1 text-meta text-dark-muted`,children:[(0,Y.jsx)(`code`,{className:`text-badge bg-dark-hover px-1.5 py-0.5 rounded`,children:`base.en / base`}),(0,Y.jsx)(`span`,{children:e(`stt.setup.whisperDesc`)})]}),!i.installed&&(0,Y.jsxs)(`p`,{className:`mt-1 text-meta text-accent-orange flex items-center gap-1`,children:[(0,Y.jsx)(N,{size:11}),e(`stt.setup.engineNotInstalledHint`)]}),!i.installed&&i.error&&(0,Y.jsxs)(`p`,{className:`mt-1 text-meta text-accent-orange break-all`,title:i.error,children:[(0,Y.jsx)(N,{size:11}),e(`stt.setup.probeError`),i.error]})]})]}),(0,Y.jsx)(`div`,{className:`shrink-0`,onClick:e=>e.stopPropagation(),children:D?(0,Y.jsxs)(`button`,{className:`btn btn-secondary cursor-not-allowed opacity-70`,disabled:!0,children:[(0,Y.jsx)(n,{size:14,className:`animate-spin`}),e(`stt.setup.installing`)]}):i.installed?(0,Y.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>void y(),title:e(`stt.setup.recheck`),children:[(0,Y.jsx)(t,{size:14}),e(`stt.setup.recheck`)]}):(0,Y.jsxs)(`button`,{className:`btn btn-accent`,onClick:()=>void C(),children:[(0,Y.jsx)(v,{size:14}),e(`stt.setup.install`)]})})]})},P=o?.pythonAvailable&&o?.pipAvailable;return(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-dark-text`,children:[(0,Y.jsx)(w,{size:14,className:`text-accent-blue`}),e(`stt.setup.envCard`)]}),(0,Y.jsxs)(`button`,{className:`btn btn-ghost`,onClick:()=>void y(),disabled:u,children:[(0,Y.jsx)(t,{size:13,className:u?`animate-spin`:``}),e(`stt.setup.recheck`)]})]}),(0,Y.jsxs)(`div`,{className:`mt-2.5 space-y-2`,children:[o?o.pythonAvailable?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-text`,children:[(0,Y.jsx)(L,{size:13,className:`text-accent-green`}),e(`stt.setup.pythonOk`,{version:(o.pythonVersion||``).replace(/^Python\s*/i,``)||o.pythonPath||`Python`}),o.pythonPath?(0,Y.jsx)(`code`,{className:`text-badge text-dark-muted`,children:o.pythonPath}):null]}):(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-md border border-accent-red/30 bg-accent-red/5 px-2.5 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(N,{size:13}),e(`stt.setup.pythonMissing`)]}),(0,Y.jsx)(`a`,{className:`btn btn-secondary !py-1 !px-2 text-xs`,href:`https://www.python.org/downloads/`,target:`_blank`,rel:`noreferrer`,children:e(`stt.setup.pythonGuide`)})]}):(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-dark-muted`,children:[(0,Y.jsx)(n,{size:13,className:`animate-spin`}),e(`stt.setup.envChecking`)]}),o&&!o.pipAvailable&&(0,Y.jsxs)(`div`,{className:`rounded-md border border-accent-red/30 bg-accent-red/5 px-2.5 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(N,{size:13}),e(`stt.setup.pipMissing`)]}),(0,Y.jsxs)(`div`,{className:`mt-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-badge text-dark-muted mb-1`,children:e(`stt.setup.pipGuide`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`code`,{className:`flex-1 rounded bg-dark-bg border border-dark-border px-2 py-1 font-mono text-badge text-dark-text break-all select-all`,children:[o.pythonPath||`python`,` -m ensurepip --upgrade`]}),(0,Y.jsx)(`button`,{className:`btn btn-ghost !py-1 !px-2 text-xs`,onClick:()=>E(`${o.pythonPath||`python`} -m ensurepip --upgrade`),children:(0,Y.jsx)(b,{size:12})})]})]})]})]})]}),(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-dark-text`,children:[(0,Y.jsx)(S,{size:14,className:`text-accent-blue`}),e(`stt.setup.defaultLang`)]}),(0,Y.jsx)(`p`,{className:`mt-1 text-meta text-dark-muted`,children:e(`stt.setup.defaultLangHint`)}),(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center gap-2`,children:[(0,Y.jsx)(`select`,{value:h,onChange:e=>_(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:_e.map(e=>(0,Y.jsx)(`option`,{value:e.code,children:e.label},e.code))}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-meta text-dark-muted`,children:[(0,Y.jsx)(a,{size:11}),e(`stt.setup.modelForLang`,{lang:ee.label,model:j})]})]})]}),M(),(0,Y.jsx)(Ie,{}),D&&(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-blue font-medium`,children:[(0,Y.jsx)(n,{size:13,className:`animate-spin`}),e(`stt.setup.installing`),(0,Y.jsx)(`span`,{className:`text-dark-muted font-normal`,children:`(faster-whisper)`})]}),(0,Y.jsx)(`button`,{className:`btn btn-danger !py-1 !px-2 text-xs`,onClick:()=>void T(),children:e(`stt.setup.cancel`)})]}),(0,Y.jsx)(`div`,{ref:m,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:c.logs.length===0?(0,Y.jsx)(`span`,{className:`text-dark-muted/70`,children:e(`stt.setup.logWaiting`)}):c.logs.join(`
|
|
4
|
-
`)})]}),!D&&c.status&&c.status!==`done`&&(0,Y.jsxs)(`div`,{className:`rounded-lg border border-accent-red/30 bg-accent-red/5 p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-red font-medium`,children:[(0,Y.jsx)(N,{size:13}),c.status===`timeout`?e(`stt.setup.installTimeout`):c.status===`cancelled`?e(`stt.setup.installCancelled`):e(`stt.setup.installFailed`)]}),c.error?(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-red/90 break-all`,children:c.error}):null,c.manualCommand&&(0,Y.jsxs)(`div`,{className:`mt-2`,children:[(0,Y.jsxs)(`div`,{className:`text-badge text-dark-muted mb-1 flex items-center gap-1`,children:[(0,Y.jsx)(ae,{size:11}),e(`stt.setup.manualCommand`)]}),(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(`code`,{className:`flex-1 rounded bg-dark-bg border border-dark-border px-2 py-1.5 font-mono text-badge text-dark-text break-all whitespace-pre-wrap select-all`,children:c.manualCommand}),(0,Y.jsxs)(`button`,{className:`btn btn-ghost !py-1 !px-2 text-xs shrink-0`,onClick:()=>E(c.manualCommand),children:[(0,Y.jsx)(b,{size:12}),e(`stt.setup.copyCommand`)]})]})]})]}),!D&&c.status===`done`&&!k&&(0,Y.jsxs)(`div`,{className:`rounded-lg border border-accent-green/30 bg-accent-green/5 px-3 py-2.5 flex items-center gap-2 text-xs text-accent-green`,children:[(0,Y.jsx)(L,{size:14}),e(`stt.setup.installDone`)]}),!D&&c.status===`done`&&k&&(0,Y.jsxs)(`div`,{className:`rounded-lg border border-accent-orange/30 bg-accent-orange/5 p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-accent-orange font-medium`,children:[(0,Y.jsx)(N,{size:13}),e(`stt.setup.installDoneButMissing`)]}),O?.error&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-orange/90 break-all`,children:O.error}),(0,Y.jsx)(`p`,{className:`mt-1 text-meta text-dark-muted`,children:e(`stt.setup.installDoneButMissingHint`)})]}),!D&&P&&r&&!r.backends.en?.installed&&(0,Y.jsx)(`p`,{className:`text-meta text-dark-muted px-1`,children:e(`stt.setup.chooseHint`)})]})}function Re(){let{t:e}=R(),[r,i]=(0,J.useState)(null),[a,o]=(0,J.useState)({running:!1,logs:[]}),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(ue),d=(0,J.useRef)(null),f=(0,J.useRef)(a),p=(0,J.useRef)(null);(0,J.useEffect)(()=>{f.current=a},[a]),(0,J.useEffect)(()=>{u(ce())},[]),(0,J.useEffect)(()=>()=>{d.current&&window.clearTimeout(d.current)},[]),(0,J.useEffect)(()=>{p.current&&(p.current.scrollTop=p.current.scrollHeight)},[a.logs]);let m=(0,J.useCallback)(async()=>{c(!0);let e=await G.tts.status();e.success&&e.data?i(e.data):e.error&&B.error(e.error),c(!1)},[]);(0,J.useEffect)(()=>{m()},[m]);let h=(0,J.useCallback)(async()=>{let e=await G.tts.installStatus();if(!e.success||!e.data)return;let t=f.current.running;o(e.data),e.data.running?d.current=window.setTimeout(()=>void h(),1e3):t&&m()},[m]),g=(0,J.useCallback)(async()=>{let t=await G.tts.install();t.success&&t.data?.started?(o({running:!0,logs:[],status:`running`}),h()):t.data?.alreadyRunning?(B.info(e(`tts.setup.jobInProgress`)),h()):o({running:!1,logs:[],status:`error`,error:t.error||t.data?.error||`install failed`,manualCommand:t.data?.manualCommand})},[h,e]),_=(0,J.useCallback)(async()=>{await G.tts.cancelInstall(),h()},[h]),y=(0,J.useCallback)(t=>{navigator.clipboard.writeText(t).then(()=>B.success(e(`tts.setup.copySuccess`)),()=>B.error(e(`tts.setup.copyFailed`)))},[e]),x=(0,J.useCallback)(e=>{u(se(e))},[]),S=r?.engine,C=r?.service===`ok`,T=S?.voiceNames??[],E=r?.env,O=E?!E.pythonAvailable:!1,k=r?.missingWeights??S?.missingWeights??[];return(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3 space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium`,children:e(`tts.setup.engine`)}),((e,t)=>(0,Y.jsxs)(`span`,{className:V(`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium`,e?`bg-accent-green/15 text-accent-green`:`bg-dark-hover text-dark-muted`),children:[e?(0,Y.jsx)(L,{size:12}):(0,Y.jsx)(F,{size:12}),t]}))(C,e(C?`tts.setup.ready`:`tts.setup.notReady`))]}),(0,Y.jsx)(`button`,{type:`button`,className:`p-1.5 rounded-md hover:bg-dark-hover text-dark-muted`,onClick:()=>void m(),disabled:s,title:e(`tts.setup.refresh`),children:(0,Y.jsx)(t,{size:14,className:V(s&&`animate-spin`)})})]}),r?.error&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(N,{size:12,className:`mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`break-all`,children:r.error})]}),k.length>0&&(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tts.setup.missingWeights`,{files:k.join(`、`)})}),O&&(0,Y.jsx)(`div`,{className:`text-xs text-accent-yellow`,children:e(`tts.setup.envMissing`)}),S?.model&&(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tts.setup.model`,{model:S.model})}),a.running?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(n,{size:14,className:`animate-spin text-accent-blue`}),(0,Y.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[e(`tts.setup.installing`),a.phase?` · ${a.phase}`:``]}),(0,Y.jsx)(`button`,{type:`button`,className:`ms-auto text-xs text-accent-red hover:underline`,onClick:()=>void _(),children:e(`tts.setup.cancel`)})]}):(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-xs bg-accent-blue/15 text-accent-blue hover:bg-accent-blue/25 disabled:opacity-50`,onClick:()=>void g(),disabled:C,children:[(0,Y.jsx)(v,{size:14}),e(C?`tts.setup.installed`:`tts.setup.install`)]}),a.status===`error`&&a.error&&!a.running&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(N,{size:12,className:`mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`break-all`,children:a.error})]}),a.manualCommand&&!a.running&&(0,Y.jsxs)(`div`,{className:`rounded-md bg-dark-bg border border-dark-border p-2 space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-dark-muted`,children:[(0,Y.jsx)(w,{size:12}),e(`tts.setup.manualCommand`)]}),(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 text-xs text-accent-blue hover:underline`,onClick:()=>y(a.manualCommand),children:[(0,Y.jsx)(b,{size:12}),e(`tts.setup.copy`)]})]}),(0,Y.jsx)(`code`,{className:`block text-xs break-all text-dark-text`,children:a.manualCommand})]}),a.logs.length>0&&(0,Y.jsx)(`div`,{ref:p,className:`max-h-40 overflow-auto rounded-md bg-dark-bg border border-dark-border p-2`,children:a.logs.map((e,t)=>(0,Y.jsx)(`div`,{className:`text-xs font-mono text-dark-muted whitespace-pre-wrap break-all`,children:e},t))})]}),(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3 space-y-3`,children:[(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 cursor-pointer`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-sm`,children:[(0,Y.jsx)(D,{size:14,className:`text-accent-blue`}),e(`tts.setup.enabled`)]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`accent-accent-blue`,checked:l.enabled,onChange:e=>x({enabled:e.target.checked})})]}),(0,Y.jsxs)(`label`,{className:V(`flex items-center justify-between gap-3 cursor-pointer`,!l.enabled&&`opacity-50`),children:[(0,Y.jsxs)(`span`,{className:`text-sm`,children:[e(`tts.setup.autoPlay`),(0,Y.jsx)(`span`,{className:`block text-xs text-dark-muted`,children:e(`tts.setup.autoPlayHint`)})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`accent-accent-blue`,checked:l.autoPlay,disabled:!l.enabled,onChange:e=>x({autoPlay:e.target.checked})})]}),(0,Y.jsxs)(`div`,{className:V(`flex items-center justify-between gap-3`,!l.enabled&&`opacity-50`),children:[(0,Y.jsx)(`span`,{className:`text-sm`,children:e(`tts.setup.voice`)}),(0,Y.jsxs)(`select`,{className:`bg-dark-bg border border-dark-border rounded-md px-2 py-1 text-xs max-w-[60%]`,value:l.voice??``,disabled:!l.enabled||T.length===0,onChange:e=>x({voice:e.target.value||null}),children:[(0,Y.jsx)(`option`,{value:``,children:e(`tts.setup.voiceAuto`)}),T.map(e=>(0,Y.jsx)(`option`,{value:e,children:e},e))]})]}),(0,Y.jsxs)(`label`,{className:V(`flex items-center justify-between gap-3`,!l.enabled&&`opacity-50`),children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-sm`,children:[(0,Y.jsx)(P,{size:14,className:`text-accent-blue`}),e(`tts.setup.speed`)]}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,Y.jsx)(`input`,{type:`range`,min:le,max:2,step:.1,value:l.speed,disabled:!l.enabled,onChange:e=>x({speed:Number(e.target.value)})}),(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted w-8 text-end`,children:l.speed.toFixed(1)})]})]})]})]})}function X({label:e,value:t,onChange:n,min:r,max:i,disabled:a,envOverridden:o,hint:s}){return(0,Y.jsxs)(`div`,{className:`mb-3`,children:[(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-muted mb-1`,children:[e,o&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-accent-yellow`,title:s,children:[(0,Y.jsx)(N,{size:12}),` env`]})]}),(0,Y.jsx)(`input`,{type:`number`,value:t,onChange:e=>n(e.target.value),min:r,max:i,disabled:a||o,className:`w-40 bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text font-mono focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all disabled:opacity-50`})]})}function ze(){let{t:e}=R(),[t,r]=(0,J.useState)(!0),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)({}),[c,l]=(0,J.useState)(!1),[u,d]=(0,J.useState)(``),[f,p]=(0,J.useState)(null),[m,h]=(0,J.useState)(!1),[g,_]=(0,J.useState)(``),[v,y]=(0,J.useState)(``),[b,x]=(0,J.useState)(``),[S,C]=(0,J.useState)(``),[w,T]=(0,J.useState)(``),E=(0,J.useCallback)(async()=>{r(!0);try{let e=await G.config.context.get();if(e.success&&e.data){let t=e.data.values??{};s(e.data.envOverridden??{}),l(e.data.effective.offload),d(e.data.defaultArtifactRoot??``),p(e.data.stats??null),h(typeof t.artifactOffload==`boolean`?t.artifactOffload:e.data.effective.offload),_(typeof t.artifactDir==`string`?t.artifactDir:``),y(t.artifactMaxTotalMb==null?``:String(t.artifactMaxTotalMb)),x(t.artifactTtlDays==null?``:String(t.artifactTtlDays)),C(t.outboundToolBytes==null?``:String(t.outboundToolBytes)),T(t.turnBudgetTokens==null?``:String(t.turnBudgetTokens))}}catch{}r(!1)},[]);return(0,J.useEffect)(()=>{E()},[E]),t?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,Y.jsx)(n,{size:14,className:`animate-spin`}),e(`common.loading`)]}):(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.contextOffload.desc`)}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,Y.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.contextOffload.enableLabel`),(0,Y.jsxs)(`span`,{className:`ms-2 text-xs ${c?`text-accent-green`:`text-dark-muted`}`,children:[`(`,e(`settings.contextOffload.currently`),`: `,c?`ON`:`OFF`,`)`]})]}),(0,Y.jsx)(`button`,{role:`switch`,"aria-checked":m,onClick:()=>h(!m),className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${m?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${m?`translate-x-6`:`translate-x-1`}`})})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-x-6`,children:[(0,Y.jsx)(X,{label:e(`settings.contextOffload.maxTotalMb`),value:v,onChange:y,min:1,envOverridden:o.artifactMaxTotalMb}),(0,Y.jsx)(X,{label:e(`settings.contextOffload.ttlDays`),value:b,onChange:x,min:1,max:365,envOverridden:o.artifactTtlDays}),(0,Y.jsx)(X,{label:`${e(`settings.contextOffload.outboundBytes`)} (${e(`settings.contextOffload.optional`)})`,value:S,onChange:C,min:1024,envOverridden:o.outboundToolBytes}),(0,Y.jsx)(X,{label:e(`settings.contextOffload.turnBudget`),value:w,onChange:T,min:1e3,envOverridden:o.turnBudgetTokens})]}),(0,Y.jsxs)(`div`,{className:`mb-3`,children:[(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-muted mb-1`,children:[e(`settings.contextOffload.dir`),` (`,e(`settings.contextOffload.optional`),`)`,o.artifactDir&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-accent-yellow`,children:[(0,Y.jsx)(N,{size:12}),` env`]})]}),(0,Y.jsx)(`input`,{type:`text`,value:g,onChange:e=>_(e.target.value),disabled:o.artifactDir,placeholder:u,className:`w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text font-mono focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all disabled:opacity-50`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Y.jsx)(K,{variant:`accent`,size:`sm`,onClick:async()=>{a(!0);try{let t={artifactOffload:m};o.artifactDir||(t.artifactDir=g.trim()||null),!o.artifactMaxTotalMb&&v.trim()&&(t.artifactMaxTotalMb=parseInt(v,10)),!o.artifactTtlDays&&b.trim()&&(t.artifactTtlDays=parseInt(b,10)),!o.outboundToolBytes&&S.trim()&&(t.outboundToolBytes=parseInt(S,10)),!o.turnBudgetTokens&&w.trim()&&(t.turnBudgetTokens=parseInt(w,10));for(let n of[`artifactMaxTotalMb`,`artifactTtlDays`,`outboundToolBytes`,`turnBudgetTokens`])if(n in t&&(isNaN(t[n])||t[n]<=0)){B.error(e(`settings.contextOffload.invalidNumber`)),a(!1);return}let n=await G.config.context.save(t);n.success?(B.success(e(`settings.contextOffload.saved`)),await E()):B.error(n.error||e(`settings.contextOffload.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}a(!1)},loading:i,disabled:t,children:e(`common.save`)}),(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`settings.contextOffload.envHint`)})]}),f&&f.count>0&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:e(`settings.contextOffload.stats`,{count:f.count,size:(f.totalBytes/1024/1024).toFixed(1)})})]})}var Be=[32e3,64e3,128e3,256e3,512e3,1e6,2e6],Ve=1e3;function He(){let{t:e}=R(),t=z(e=>e.maxContextTokens),r=z(e=>e.setMaxContextTokens),[i,a]=(0,J.useState)(String(t)),[o,s]=(0,J.useState)(null),[c,l]=(0,J.useState)(!0),[u,d]=(0,J.useState)(!1),f=(0,J.useCallback)(async()=>{l(!0);try{let e=await G.config.provider.get();if(e.success&&e.data){s(e.data.defaultProvider??null);let t=e.data.active?.contextWindow;typeof t==`number`&&t>0&&(r(t),a(String(t)))}}catch{}l(!1)},[r]);(0,J.useEffect)(()=>{f()},[f]);let p=(0,J.useCallback)(async t=>{let n=Number.parseInt(t,10);if(!Number.isFinite(n)||n<Ve)B.error(e(`settings.contextWindow.invalid`));else if(!o)B.error(e(`settings.contextWindow.noProvider`));else{d(!0);try{let t=await G.config.provider.save({provider:o,contextWindow:n});t.success?(B.success(e(`settings.contextWindow.saved`)),await f()):B.error(t.error||e(`settings.contextWindow.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}d(!1)}},[o,f,e]),m=e=>e>=1e6?`${(e/1e6).toFixed(0)}M`:`${(e/1e3).toFixed(0)}K`;return c?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,Y.jsx)(n,{size:14,className:`animate-spin`}),e(`common.loading`)]}):(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.contextWindow.desc`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 mb-3`,children:[(0,Y.jsx)(`input`,{type:`number`,"aria-label":e(`settings.contextWindow.label`),"data-testid":`context-window-input`,value:i,onChange:e=>a(e.target.value),min:Ve,max:1e7,step:1e3,className:`w-32 bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text font-mono focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all`}),(0,Y.jsx)(`span`,{className:`text-sm text-dark-muted`,children:e(`settings.contextWindow.tokens`)}),(0,Y.jsx)(K,{variant:`accent`,size:`sm`,onClick:()=>void p(i),loading:u,"data-testid":`context-window-apply`,children:e(`settings.contextWindow.apply`)})]}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Be.map(e=>(0,Y.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,Y.jsxs)(`p`,{className:`text-xs text-dark-muted mt-2`,children:[e(`settings.contextWindow.current`),`:`,` `,(0,Y.jsx)(`span`,{className:`font-mono text-dark-text tabular-nums`,"data-testid":`context-window-current`,children:Number.parseInt(i,10).toLocaleString()}),` `,e(`settings.contextWindow.tokens`),o?` · ${e(`settings.contextWindow.provider`,{provider:o})}`:``]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.contextWindow.catalogHint`)})]})}var Ue=`bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all disabled:opacity-50`;function Z({checked:e,onChange:t,disabled:n}){return(0,Y.jsx)(`button`,{role:`switch`,"aria-checked":e,disabled:n,onClick:()=>t(!e),className:`relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors disabled:opacity-40 ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${e?`translate-x-6`:`translate-x-1`}`})})}function We(){let{t:e}=R(),[t,r]=(0,J.useState)(!0),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(null),[c,l]=(0,J.useState)(`none`),[u,d]=(0,J.useState)(``),[f,p]=(0,J.useState)(!0),[m,h]=(0,J.useState)(!1),[g,_]=(0,J.useState)(!1),v=(0,J.useCallback)(async()=>{r(!0);try{let e=await G.config.sandbox.get();if(e.success&&e.data){let t=e.data;s(t);let n=t.values??{};l(n.backend??`none`),d(n.policy??``),p(n.networkAccess!==!1),h(n.excludeTmpdirEnvVar===!0),_(n.excludeSlashTmp===!0)}}catch{}r(!1)},[]);(0,J.useEffect)(()=>{v()},[v]);let y=u===`danger-full-access`,b=c!==`none`&&u!==``&&!y,x=b&&u===`workspace-write`,S=e=>{e?(l(`auto`),d(u===`read-only`||u===`workspace-write`?u:`workspace-write`)):(l(`none`),d(``))},C=e=>{d(e),e===`danger-full-access`&&l(`none`)},w=async()=>{if(c!==`none`&&u===``)B.error(e(`settings.sandbox.needPolicy`));else{a(!0);try{let t=await G.config.sandbox.save({backend:c,policy:c===`none`?null:u,networkAccess:f,excludeTmpdirEnvVar:m,excludeSlashTmp:g});t.success?(B.success(e(`settings.sandbox.saved`)),await v()):B.error(t.error||e(`settings.sandbox.saveFailed`))}catch(e){B.error(e instanceof Error?e.message:String(e))}a(!1)}};if(t)return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-dark-muted py-2`,children:[(0,Y.jsx)(n,{size:14,className:`animate-spin`}),e(`common.loading`)]});let T=o?.status,E=T?.backendId===`docker`,D=T!==void 0&&T.status===`enabled`&&T.backendId===null,O=T!==void 0&&T.status===`enabled`&&T.backendId!==null||E,k=O?L:T?.status===`invalid`?F:N,A=O?`text-accent-green`:T?.status===`invalid`?`text-accent-red`:D?`text-accent-yellow`:`text-dark-muted`,j=E?e(`settings.sandbox.statusDocker`):D?e(`settings.sandbox.statusNoBackend`):T?.status===`enabled`?e(`settings.sandbox.statusOn`,{backend:T.backendId??`—`}):T?.status===`invalid`?e(`settings.sandbox.statusInvalid`):e(`settings.sandbox.statusOff`);return(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.sandbox.desc`)}),(0,Y.jsxs)(`div`,{className:`mb-4 rounded-lg border border-dark-border bg-dark-bg/40 px-3 py-2.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm ${A}`,children:[(0,Y.jsx)(k,{size:14}),(0,Y.jsx)(`span`,{children:j}),(0,Y.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[`(`,e(`settings.sandbox.restartNotice`),`)`]})]}),T?.policyDescription&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:T.policyDescription}),T?.reason&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:T.reason}),T?.error&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-red whitespace-pre-wrap`,children:T.error}),T&&T.capabilityGaps.length>0&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-yellow`,children:e(`settings.sandbox.gaps`,{fields:T.capabilityGaps.join(`, `)})})]}),o?.envOverride.active&&(0,Y.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,Y.jsx)(N,{size:12,className:`mt-0.5 shrink-0`}),o.envOverride.note||e(`settings.sandbox.envOverride`,{value:o.envOverride.value})]}),o?.status.platform===`win32`&&(0,Y.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,Y.jsx)(N,{size:12,className:`mt-0.5 shrink-0`}),e(`settings.sandbox.win32Warn`)]}),o?.status.legacySource&&(0,Y.jsx)(`p`,{className:`mb-3 text-xs text-accent-blue`,children:e(`settings.sandbox.legacySource`)}),o?.status.bothPresent&&(0,Y.jsxs)(`p`,{className:`mb-3 flex items-start gap-1.5 text-xs text-accent-yellow`,children:[(0,Y.jsx)(N,{size:12,className:`mt-0.5 shrink-0`}),e(`settings.sandbox.bothPresent`)]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,Y.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.sandbox.enableLabel`),(0,Y.jsxs)(`span`,{className:`ms-2 text-xs ${b?`text-accent-green`:`text-dark-muted`}`,children:[`(`,e(`settings.sandbox.currently`),`: `,b?`ON`:`OFF`,`)`]})]}),(0,Y.jsx)(Z,{checked:b,onChange:S})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-x-6`,children:[(0,Y.jsxs)(`div`,{className:`mb-3`,children:[(0,Y.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:e(`settings.sandbox.backend`)}),(0,Y.jsxs)(`select`,{value:c,onChange:e=>l(e.target.value),className:`w-full ${Ue}`,children:[(0,Y.jsx)(`option`,{value:`auto`,children:e(`settings.sandbox.backendAuto`)}),(0,Y.jsx)(`option`,{value:`bubblewrap`,children:e(`settings.sandbox.backendBubblewrap`)}),(0,Y.jsx)(`option`,{value:`macos-sandbox`,children:e(`settings.sandbox.backendMacos`)}),(0,Y.jsx)(`option`,{value:`windows-mxc`,children:e(`settings.sandbox.backendWindows`)}),(0,Y.jsx)(`option`,{value:`none`,children:e(`settings.sandbox.backendNone`)})]})]}),(0,Y.jsxs)(`div`,{className:`mb-3`,children:[(0,Y.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:e(`settings.sandbox.policy`)}),(0,Y.jsxs)(`select`,{value:u,onChange:e=>C(e.target.value),disabled:c===`none`,className:`w-full ${Ue}`,children:[(0,Y.jsx)(`option`,{value:``,children:e(`settings.sandbox.policyEmpty`)}),(0,Y.jsx)(`option`,{value:`read-only`,children:e(`settings.sandbox.policyReadOnly`)}),(0,Y.jsx)(`option`,{value:`workspace-write`,children:e(`settings.sandbox.policyWorkspaceWrite`)}),(0,Y.jsx)(`option`,{value:`danger-full-access`,children:e(`settings.sandbox.policyDanger`)})]}),y&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-accent-yellow`,children:e(`settings.sandbox.policyDangerHint`)})]})]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between mb-4 cursor-pointer`,children:[(0,Y.jsxs)(`span`,{className:`text-sm`,children:[e(`settings.sandbox.networkAccess`),(0,Y.jsx)(`span`,{className:`block text-xs text-dark-muted mt-0.5`,children:e(`settings.sandbox.networkAccessHint`)})]}),(0,Y.jsx)(Z,{checked:f,onChange:p,disabled:!b})]}),x&&(0,Y.jsxs)(`div`,{className:`mb-4 rounded-lg border border-dark-border px-3 py-2.5`,children:[(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mb-2`,children:e(`settings.sandbox.advancedHint`)}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between mb-2 cursor-pointer`,children:[(0,Y.jsx)(`span`,{className:`text-sm`,children:e(`settings.sandbox.excludeTmpdir`)}),(0,Y.jsx)(Z,{checked:m,onChange:h})]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between cursor-pointer`,children:[(0,Y.jsx)(`span`,{className:`text-sm`,children:e(`settings.sandbox.excludeSlashTmp`)}),(0,Y.jsx)(Z,{checked:g,onChange:_})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Y.jsx)(K,{variant:`accent`,size:`sm`,onClick:w,loading:i,children:e(`common.save`)}),(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`settings.sandbox.restartHint`)})]})]})}function Q({icon:e,iconColor:t,title:n,children:r}){return(0,Y.jsxs)(`div`,{className:`rounded-xl border border-dark-border bg-dark-bg/40 p-4 mb-4`,children:[(0,Y.jsxs)(`h3`,{className:`font-medium mb-3 flex items-center gap-2`,children:[(0,Y.jsx)(e,{size:16,className:t}),n]}),r]})}var Ge=8e3,Ke=[`assistant`,`pet`,`lover`];function qe(){let{t:e}=R(),[t,n]=(0,J.useState)(void 0),[r,a]=(0,J.useState)(!0),[o,s]=(0,J.useState)(!1),[c,l]=(0,J.useState)(!1),[u,d]=(0,J.useState)(``),[f,p]=(0,J.useState)(``),[m,h]=(0,J.useState)(!1),g=(0,J.useCallback)(async()=>{a(!0);try{let t=await G.profile.get();t.success&&t.data?n(t.data):B.error(t.error||e(`settings.profile.loadFailed`))}catch(t){B.error(`${e(`settings.profile.loadFailed`)}: ${t instanceof Error?t.message:String(t)}`)}a(!1)},[e]);(0,J.useEffect)(()=>{g()},[g]);let _=t?.maxBytes??Ge,v=(0,J.useMemo)(()=>{let e=u.trim(),t=f.trim(),n=e?`---\nname: ${e}\n---\n\n${t}\n`:t?`${t}\n`:``;return new TextEncoder().encode(n).length},[u,f]),y=async()=>{if(!t||o)return;let r=!t.enabled;s(!0),n({...t,enabled:r});try{let t=await G.config.profile.set({enabled:r});t.success?q():(n(e=>e&&{...e,enabled:!r}),B.error(t.error||e(`settings.profile.saveFailed`)))}catch(t){n(e=>e&&{...e,enabled:!r}),B.error(`${e(`settings.profile.saveFailed`)}: ${t instanceof Error?t.message:String(t)}`)}s(!1)},b=async()=>{if(!m){h(!0);try{let t=await G.profile.raw();t.success&&t.data?(d(t.data.name??``),p(t.data.content),l(!0)):B.error(t.error||e(`settings.profile.loadFailed`))}catch(t){B.error(`${e(`settings.profile.loadFailed`)}: ${t instanceof Error?t.message:String(t)}`)}h(!1)}},x=()=>{l(!1),d(``),p(``)},S=t=>{let n=e(`settings.profile.templates.${t}Body`),r=f.trim();(!r||r===n.trim()||window.confirm(e(`settings.profile.templates.overwriteConfirm`)))&&p(n)},w=async()=>{if(!o){if(!u.trim()&&!f.trim())B.error(e(`settings.profile.empty`));else{s(!0);try{let t=await G.profile.set({name:u.trim()?u.trim():null,body:f});t.success?(B.success(e(`settings.profile.saveOk`)),l(!1),d(``),p(``),q(),await g()):B.error(t.error||e(`settings.profile.saveFailed`))}catch(t){B.error(`${e(`settings.profile.saveFailed`)}: ${t instanceof Error?t.message:String(t)}`)}s(!1)}}},T=async()=>{if(!o&&window.confirm(e(`settings.profile.clearConfirm`))){s(!0);try{let t=await G.profile.clear();t.success?(B.success(e(`settings.profile.clearOk`)),x(),q(),await g()):B.error(t.error||e(`settings.profile.clearFailed`))}catch(t){B.error(`${e(`settings.profile.clearFailed`)}: ${t instanceof Error?t.message:String(t)}`)}s(!1)}};return r?(0,Y.jsx)(`div`,{className:`text-sm text-dark-muted`,children:e(`settings.profile.loading`)}):t?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-3 py-1 mb-3`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`text-sm text-dark-text font-medium flex items-center gap-2`,children:[(0,Y.jsx)(C,{size:15,className:`text-accent-purple shrink-0`}),e(`settings.profile.enabled`)]}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.profile.enabledHint`)})]}),(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":t.enabled,"aria-label":e(`settings.profile.enabled`),disabled:o,onClick:()=>void y(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 mt-0.5 ${t.enabled?`bg-accent-blue`:`bg-dark-border`} ${o?`opacity-60`:``}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${t.enabled?`translate-x-[18px]`:`translate-x-0.5`}`})})]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mb-4 leading-relaxed`,children:e(`settings.profile.hint`)}),(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsxs)(`div`,{className:`text-xs font-medium text-dark-text mb-1.5 flex items-center gap-1.5`,children:[(0,Y.jsx)(i,{size:13,className:`text-dark-muted`}),e(`settings.profile.path`)]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`code`,{className:`flex-1 min-w-0 truncate bg-dark-bg border border-dark-border rounded px-2 py-1 text-meta font-mono text-dark-text`,title:t.path,children:t.path}),(0,Y.jsx)(`span`,{className:`shrink-0 px-1.5 py-0.5 rounded text-badge border ${t.exists?`bg-accent-green/10 text-accent-green border-accent-green/30`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:t.exists?e(`settings.profile.exists`):e(`settings.profile.missing`)})]}),(0,Y.jsx)(`div`,{className:`mt-1.5 text-meta text-dark-muted font-mono`,children:e(`settings.profile.size`,{used:t.bytes,max:t.maxBytes})}),t.truncated&&(0,Y.jsxs)(`div`,{className:`mt-1.5 flex items-start gap-1.5 text-meta text-accent-yellow`,children:[(0,Y.jsx)(N,{size:12,className:`mt-[1px] shrink-0`}),(0,Y.jsx)(`span`,{children:e(`settings.profile.truncated`)})]})]}),c?(0,Y.jsxs)(`div`,{className:`border-t border-dark-border pt-3`,children:[(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1.5`,children:e(`settings.profile.templates.title`)}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:Ke.map(t=>(0,Y.jsx)(`button`,{type:`button`,onClick:()=>S(t),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:e(`settings.profile.templates.${t}`)},t))}),(0,Y.jsx)(`div`,{className:`text-meta text-dark-muted mt-1.5 leading-relaxed`,children:e(`settings.profile.templates.hint`)})]}),(0,Y.jsxs)(`label`,{className:`block mb-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1`,children:e(`settings.profile.name`)}),(0,Y.jsx)(`input`,{type:`text`,value:u,onChange:e=>d(e.target.value),placeholder:e(`settings.profile.namePlaceholder`),maxLength:200,className:`w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all`})]}),(0,Y.jsx)(`div`,{className:`text-xs font-medium text-dark-text mb-1`,children:e(`settings.profile.body`)}),(0,Y.jsx)(`textarea`,{value:f,onChange:e=>p(e.target.value),placeholder:e(`settings.profile.bodyPlaceholder`),rows:10,className:`w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-2 text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all resize-y font-mono leading-relaxed`}),(0,Y.jsx)(`div`,{className:`mt-1 text-meta font-mono ${v>_?`text-accent-yellow`:`text-dark-muted`}`,children:e(`settings.profile.size`,{used:v,max:_})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 mt-3`,children:[(0,Y.jsx)(K,{variant:`accent`,size:`sm`,onClick:()=>void w(),loading:o,children:e(`settings.profile.save`)}),(0,Y.jsx)(`button`,{onClick:x,disabled:o,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:e(`settings.profile.cancel`)})]})]}):(0,Y.jsxs)(`div`,{className:`border-t border-dark-border pt-3`,children:[t.preview?(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted whitespace-pre-wrap break-words mb-3 leading-relaxed max-h-40 overflow-y-auto custom-scrollbar`,children:t.preview}):(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mb-3`,children:e(`settings.profile.empty`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`button`,{onClick:()=>void b(),disabled:m||o,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm bg-accent-blue/10 text-accent-blue hover:bg-accent-blue/20 border border-accent-blue/30 transition-colors disabled:opacity-50`,children:[(0,Y.jsx)(k,{size:13}),e(`settings.profile.edit`)]}),t.exists&&(0,Y.jsxs)(`button`,{onClick:()=>void T(),disabled:o,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm bg-accent-red/10 text-accent-red hover:bg-accent-red/20 border border-accent-red/30 transition-colors disabled:opacity-50`,children:[(0,Y.jsx)(oe,{size:13}),e(`settings.profile.clear`)]})]})]})]}):(0,Y.jsxs)(`button`,{onClick:()=>void g(),className:`text-sm text-accent-blue hover:underline`,children:[e(`settings.profile.loadFailed`),` — `,e(`common.retry`)]})}async function Je(e){try{if(navigator.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.top=`-1000px`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}var Ye=e=>new Promise(t=>setTimeout(t,e));function Xe(){let{t:e}=R(),[t,n]=(0,J.useState)(null),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)(null),l=(0,J.useCallback)(async()=>{let t=await G.system.network();return t.success&&t.data?(n(t.data),o(t.data.lastError)):o(t.error||e(`settings.network.loadFailed`)),t},[e]);(0,J.useEffect)(()=>{l()},[l]);let u=t?!t.loopbackOnly:!1,d=(0,J.useCallback)(async()=>{if(!t||r)return;let a=!u;if(!window.confirm(e(a?`settings.network.confirmEnable`:`settings.network.confirmDisable`)))return;i(!0),o(null);let s=await G.system.setNetwork(a);if(!s.success)o(s.error||e(`settings.network.applyFailed`)),i(!1);else{B.info(e(a?`settings.network.enabledToast`:`settings.network.disabledToast`)),await Ye(900);for(let e=0;e<8;e++){let e=await G.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 Ye(600)}o(e(`settings.network.applyFailed`)),i(!1)}},[r,u,t,e]),f=(0,J.useCallback)(async e=>{await Je(e)&&(c(e),setTimeout(()=>c(t=>t===e?null:t),1800))},[]),p=t?.lockedByHostOverride?e(`settings.network.lockedByHost`,{host:t.hostOverride||``}):t?.fromEnv?e(`settings.network.lockedByEnv`,{env:t.envKey}):null;return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.network.description`)}),a&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/40 bg-accent-red/10 px-3 py-2 mb-3`,children:[(0,Y.jsx)(N,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:a})]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 ${p?`cursor-not-allowed opacity-60`:`cursor-pointer`}`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.network.toggleLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.network.toggleHint`)})]}),(0,Y.jsx)(Ze,{checked:u,disabled:r||!t||!!p,onToggle:()=>void d(),label:e(`settings.network.toggleLabel`)})]}),r&&(0,Y.jsx)(`p`,{className:`text-xs text-accent-blue mt-2`,children:e(`settings.network.pendingHint`)}),p&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:p}),t&&(0,Y.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:e(u?`settings.network.stateLan`:`settings.network.stateLocal`)}),(0,Y.jsxs)(`span`,{className:`text-dark-text font-mono`,children:[t.bindHost,`:`,t.httpPort]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:e(`settings.network.addresses`)}),(0,Y.jsx)(`div`,{className:`space-y-1`,children:(u&&t.lanUrls.length?t.lanUrls:[t.loopbackUrl]).map(t=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`code`,{className:`flex-1 min-w-0 break-all text-xs text-dark-text bg-dark-surface border border-dark-border rounded px-2 py-1 font-mono`,children:t}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void f(t),title:e(`settings.network.copy`),className:`shrink-0 flex items-center gap-1 px-2 py-1 rounded text-xs text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:[s===t?(0,Y.jsx)(ie,{size:13,className:`text-accent-green`}):(0,Y.jsx)(b,{size:13}),e(s===t?`settings.network.copied`:`settings.network.copy`)]})]},t))}),u&&t.lanUrls.length===0&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.network.noLanAddress`)})]})]}),u&&(0,Y.jsxs)(`div`,{className:`mt-3 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,Y.jsx)(N,{size:13}),e(`settings.network.warningTitle`)]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.network.warning`)}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:t?.authTokenRequired?e(`settings.network.tokenHint`):e(`settings.network.noTokenHint`)})]}),(0,Y.jsx)(Qe,{state:t,onState:n})]})}function Ze({checked:e,disabled:t,onToggle:n,label:r}){return(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":r,disabled:t,onClick:n,className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:cursor-not-allowed ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${e?`translate-x-[18px]`:`translate-x-0.5`}`})})}function Qe({state:e,onState:t}){let{t:n}=R(),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)(null),l=e?.tailscale,u=(0,J.useCallback)(async()=>{if(!l||r)return;let e=!l.serving;if(!window.confirm(n(e?`settings.network.tailscale.confirmEnable`:`settings.network.tailscale.confirmDisable`)))return;i(!0),o(null);let a=await G.system.setTailscale(e);i(!1),!a.success||!a.data?o(a.error||n(`settings.network.tailscale.applyFailed`)):(t(a.data),B.info(a.data.message))},[r,t,n,l]),d=(0,J.useCallback)(async e=>{await Je(e)&&(c(e),setTimeout(()=>c(t=>t===e?null:t),1800))},[]);if(!l)return null;let f=l.installed&&l.running,p=l.fromEnv?n(`settings.network.tailscale.lockedByEnv`,{env:l.envKey}):null,m=a||l.lastError||l.probeError;return(0,Y.jsxs)(`div`,{className:`mt-4 pt-4 border-t border-dark-border`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:n(`settings.network.tailscale.title`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:n(`settings.network.tailscale.hint`)})]}),(0,Y.jsx)(Ze,{checked:l.serving,disabled:r||!f||!!p,onToggle:()=>void u(),label:n(`settings.network.tailscale.title`)})]}),!l.installed&&(0,Y.jsxs)(`p`,{className:`text-xs text-accent-yellow mt-2`,children:[n(`settings.network.tailscale.notInstalled`),` `,(0,Y.jsx)(`a`,{href:`https://tailscale.com/download`,target:`_blank`,rel:`noreferrer`,className:`underline hover:text-accent-blue`,children:`tailscale.com/download`})]}),l.installed&&!l.running&&(0,Y.jsx)(`p`,{className:`text-xs text-accent-yellow mt-2`,children:n(`settings.network.tailscale.notRunning`,{state:l.backendState||`unknown`})}),r&&(0,Y.jsx)(`p`,{className:`text-xs text-accent-blue mt-2`,children:n(`settings.network.tailscale.pendingHint`)}),m&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/40 bg-accent-red/10 px-3 py-2 mt-2`,children:[(0,Y.jsx)(N,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:m})]}),p&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:p}),l.serving&&l.url&&(0,Y.jsxs)(`div`,{className:`mt-2`,children:[(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:n(`settings.network.tailscale.address`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`code`,{className:`flex-1 min-w-0 break-all text-xs text-dark-text bg-dark-surface border border-dark-border rounded px-2 py-1 font-mono`,children:l.url}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void d(l.url),title:n(`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===l.url?(0,Y.jsx)(ie,{size:13,className:`text-accent-green`}):(0,Y.jsx)(b,{size:13}),s===l.url?n(`settings.network.copied`):n(`settings.network.copy`)]})]}),l.allServeUrls.length>1&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:n(`settings.network.tailscale.otherEntries`,{n:l.allServeUrls.length-1})})]}),l.serving&&(0,Y.jsxs)(`div`,{className:`mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,Y.jsx)(N,{size:13}),n(`settings.network.tailscale.warningTitle`)]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:n(`settings.network.tailscale.warning`)})]})]})}function $e(){let{t:e}=R(),[t,n]=(0,J.useState)(null),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)(null),s=(0,J.useCallback)(async()=>{let t=await G.system.daemon();return t.success&&t.data?n(t.data):o(t.error||e(`settings.daemon.loadFailed`)),t},[e]);(0,J.useEffect)(()=>{s()},[s]);let c=t?.daemonEnabled??!1,l=t?.fromEnv?e(`settings.daemon.lockedByEnv`,{env:t.envKey}):null,u=(0,J.useCallback)(async()=>{if(!t||r)return;let a=!c;if(!window.confirm(e(a?`settings.daemon.confirmEnable`:`settings.daemon.confirmDisable`)))return;i(!0),o(null);let s=await G.system.setDaemon(a);i(!1),s.success?(s.data&&n(s.data),B.info(e(a?`settings.daemon.enabledToast`:`settings.daemon.disabledToast`))):o(s.error||e(`settings.daemon.applyFailed`))},[r,c,t,e]);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.daemon.description`)}),a&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/40 bg-accent-red/10 px-3 py-2 mb-3`,children:[(0,Y.jsx)(N,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:a})]}),(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 ${l?`cursor-not-allowed opacity-60`:`cursor-pointer`}`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.daemon.toggleLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.daemon.toggleHint`)})]}),(0,Y.jsx)(et,{checked:c,disabled:r||!t||!!l,onToggle:()=>void u(),label:e(`settings.daemon.toggleLabel`)})]}),l&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:l})]})}function et({checked:e,disabled:t,onToggle:n,label:r}){return(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":r,disabled:t,onClick:n,className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:cursor-not-allowed ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${e?`translate-x-[18px]`:`translate-x-0.5`}`})})}function tt(){let{t:e}=R(),[t,r]=(0,J.useState)(null),[i,a]=(0,J.useState)(!0),[o,s]=(0,J.useState)(null),[c,l]=(0,J.useState)(!1),[u,d]=(0,J.useState)(``),[f,p]=(0,J.useState)(!1),m=(0,J.useCallback)(async()=>{let t=await G.config.desktop();t.success&&t.data?(r(t.data),s(null),d(t.data.values.port===null?``:String(t.data.values.port)),p(!1)):s(t.error||e(`settings.desktop.loadFailed`))},[e]);(0,J.useEffect)(()=>{(async()=>{await m(),a(!1)})()},[m]);let h=!!t?.envOverridden.autoLaunch,g=!!t?.envOverridden.port,_=(0,J.useCallback)(async t=>{if(c)return;l(!0),s(null);let n=await G.config.setDesktop(t);l(!1),n.success?(n.data&&(r(n.data),d(n.data.values.port===null?``:String(n.data.values.port)),p(!1)),B.info(e(`settings.desktop.savedRestartHint`))):s(n.error||e(`settings.desktop.applyFailed`))},[c,e]),v=(0,J.useCallback)(()=>{t&&!h&&_({autoLaunch:!t.values.autoLaunch})},[h,_,t]),y=(0,J.useCallback)(()=>{let e=u.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}},[u]),b=f&&!y().ok,x=t?.values.port??null,S=y(),C=!f||S.ok&&S.value===x,w=(0,J.useCallback)(()=>{let e=y();e.ok&&_({port:e.value})},[y,_]),T=(0,J.useCallback)(()=>{d(``),p(!1),x!==null&&_({port:null})},[x,_]);return i?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-4 text-sm text-dark-muted`,children:[(0,Y.jsx)(n,{size:14,className:`animate-spin`}),e(`settings.desktop.loading`)]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:e(`settings.desktop.description`)}),o&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/40 bg-accent-red/10 px-3 py-2 mb-3`,children:[(0,Y.jsx)(N,{size:14,className:`text-accent-red mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-accent-red break-all`,children:o})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-1`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.desktop.autoLaunchLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.desktop.autoLaunchHint`)})]}),(0,Y.jsx)(nt,{checked:!!t?.values.autoLaunch,disabled:c||h,onToggle:v,label:e(`settings.desktop.autoLaunchLabel`)})]}),h&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.lockedByEnv`,{env:t?.envKeys.autoLaunch||``})}),(0,Y.jsxs)(`div`,{className:`mt-4 pt-4 border-t border-dark-border`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.desktop.portLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5 mb-2`,children:e(`settings.desktop.portHint`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`input`,{type:`number`,inputMode:`numeric`,min:1,max:65534,value:u,disabled:c||g,placeholder:e(`settings.desktop.portAuto`),onChange:e=>{d(e.target.value),p(!0)},onKeyDown:e=>{e.key===`Enter`&&!b&&!C&&w()},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 ${b?`border-accent-red`:`border-dark-border focus:border-accent-blue`}`}),(0,Y.jsx)(`button`,{type:`button`,onClick:w,disabled:c||g||b||C,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`)}),x!==null&&(0,Y.jsx)(`button`,{type:`button`,onClick:T,disabled:c||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`)})]}),b&&(0,Y.jsx)(`p`,{className:`text-xs text-accent-red mt-1`,children:e(`settings.desktop.portInvalid`)}),g&&(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.lockedByEnv`,{env:t?.envKeys.port||``})}),x!==null&&!b&&(0,Y.jsxs)(`div`,{className:`mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10 px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-accent-yellow`,children:[(0,Y.jsx)(N,{size:13}),e(`settings.desktop.pinnedWarningTitle`)]}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-1`,children:e(`settings.desktop.pinnedWarning`,{port:x})})]})]}),(0,Y.jsxs)(`div`,{className:`mt-4 pt-3 border-t border-dark-border flex items-start gap-2`,children:[(0,Y.jsx)(I,{size:13,className:`text-dark-muted mt-0.5 shrink-0`}),(0,Y.jsxs)(`p`,{className:`text-xs text-dark-muted`,children:[e(`settings.desktop.restartHint`),t?.configPath&&(0,Y.jsx)(`span`,{className:`block mt-1 font-mono break-all`,children:t.configPath})]})]})]})}function nt({checked:e,disabled:t,onToggle:n,label:r}){return(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":r,disabled:t,onClick:n,className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:cursor-not-allowed ${e?`bg-accent-green`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${e?`translate-x-[18px]`:`translate-x-0.5`}`})})}var rt={get:()=>W.get(`/api/config/attention`),set:e=>W.post(`/api/config/attention`,{sound:e})};function it(){let{t:e}=R(),[t,n]=(0,J.useState)(!0),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)(null),s=(0,J.useCallback)(async()=>{try{let t=await rt.get();t.success&&t.data?(n(t.data.sound),o(null)):o(t.error||e(`settings.notifications.loadFailed`))}catch{o(e(`settings.notifications.loadFailed`))}},[e]);(0,J.useEffect)(()=>{s()},[s]);let c=(0,J.useCallback)(async()=>{if(r)return;let a=!t;i(!0),o(null),n(a);try{let t=await rt.set(a);!t.success||!t.data?(n(!a),o(t.error||e(`settings.notifications.saveFailed`))):n(t.data.sound)}catch{n(!a),o(e(`settings.notifications.saveFailed`))}finally{i(!1)}},[r,t,e]);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 cursor-pointer`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.notifications.soundLabel`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.notifications.soundHint`)})]}),(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":t,disabled:r,onClick:c,className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:cursor-not-allowed ${t?`bg-accent-blue`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${t?`translate-x-[18px]`:`translate-x-0.5`}`})})]}),a&&(0,Y.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 text-xs text-accent-red`,children:[(0,Y.jsx)(N,{size:13,className:`mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`break-all`,children:a})]})]})}var at=(0,J.memo)(function({label:e,description:t,colors:n,pattern:r,isSelected:i,onClick:a}){return(0,Y.jsxs)(`button`,{onClick:a,className:`relative flex w-full flex-col items-center rounded-xl p-2 transition-all focus:outline-none focus:ring-2 focus:ring-accent-blue/50 ${i?`ring-2 ring-accent-blue/60 bg-dark-bg border border-accent-blue/40 shadow-sm`:`border border-dark-border hover:border-accent-blue/30 bg-dark-bg hover:shadow-sm`}`,title:t||e,"aria-pressed":i,"aria-label":e,children:[(0,Y.jsxs)(`div`,{className:`relative flex gap-0.5 rounded-md overflow-hidden w-full h-8 mb-1.5 border border-dark-border/40`,children:[[`bg`,`surface`,`border`,`text`,`muted`,`accentBlue`,`accentGreen`,`accentRed`,`accentYellow`,`accentPurple`].map(e=>(0,Y.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:n[e]},title:e},e)),r===`grid`&&(0,Y.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-0`,style:{backgroundImage:`linear-gradient(${n.border} 1px, transparent 1px), linear-gradient(90deg, ${n.border} 1px, transparent 1px)`,backgroundSize:`7px 7px`}})]}),(0,Y.jsx)(`span`,{className:`text-meta font-medium truncate w-full text-center ${i?`text-accent-blue`:`text-dark-text`}`,children:e}),i&&(0,Y.jsx)(`span`,{className:`absolute top-1 end-1 w-4 h-4 bg-accent-blue rounded-full flex items-center justify-center shadow-sm`,children:(0,Y.jsx)(`svg`,{width:`8`,height:`8`,viewBox:`0 0 8 8`,fill:`none`,children:(0,Y.jsx)(`path`,{d:`M1.5 4L3.5 6L6.5 2`,stroke:`white`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})})]})}),ot={name:`deepseekcode-web`,private:!0,version:`1.0.0`,type:`module`,scripts:{dev:`vite`,build:`tsc && vite build`,typecheck:`tsc -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-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:_,labelKey:`settings.nav.general`,searchKeys:[`language`,`display`,`developer`,`general`,`语言`,`界面`,`开发者`,`通用`]},{id:`appearance`,icon:E,labelKey:`settings.nav.appearance`,searchKeys:[`theme`,`color`,`palette`,`custom`,`ripple`,`effect`,`icon`,`blob`,`brand`,`主题`,`颜色`,`波纹`,`动效`,`背景`,`图标`,`品牌`,`团子`]},{id:`profile`,icon:C,labelKey:`settings.nav.profile`,searchKeys:[`profile`,`soul`,`persona`,`identity`,`name`,`画像`,`个性化`,`身份`,`称呼`,`soul.md`]},{id:`voice`,icon:f,labelKey:`settings.nav.voice`,searchKeys:[`voice`,`stt`,`whisper`,`speech`,`语音`,`安装`]}]},{labelKey:`settings.groups.features`,items:[{id:`models`,icon:a,labelKey:`settings.nav.models`,searchKeys:[`provider`,`model`,`api`,`key`,`openai`,`anthropic`,`deepseek`,`模型`]},{id:`connectors`,icon:ne,labelKey:`settings.nav.connectors`,searchKeys:[`connector`,`capabilities`,`computer use`,`gmail`,`grok`,`连接器`,`能力`]},{id:`context`,icon:h,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:l,labelKey:`settings.nav.sandbox`,searchKeys:[`sandbox`,`sandbox-exec`,`bwrap`,`bubblewrap`,`isolation`,`seccomp`,`permission`,`沙箱`,`隔离`,`命令`,`权限`]},{id:`network`,icon:A,labelKey:`settings.nav.network`,searchKeys:[`network`,`lan`,`wifi`,`port`,`share`,`access`,`server`,`bind`,`网络`,`局域网`,`内网`,`多人`,`共享`,`访问`,`端口`]},{id:`daemon`,icon:o,labelKey:`settings.nav.daemon`,searchKeys:[`daemon`,`background`,`persistent`,`server`,`backend`,`service`,`常驻`,`后台`,`守护`,`进程`,`服务`]},{id:`desktop`,icon:r,labelKey:`settings.nav.desktop`,searchKeys:[`desktop`,`autolaunch`,`autostart`,`startup`,`boot`,`launch`,`port`,`backend`,`桌面`,`客户端`,`开机`,`自启`,`启动`,`端口`,`后台`]},{id:`system`,icon:o,labelKey:`settings.nav.system`,searchKeys:[`system`,`server`,`uptime`,`restart`,`reboot`,`系统`,`重启`]},{id:`about`,icon:I,labelKey:`settings.nav.about`,searchKeys:[`about`,`version`,`info`,`关于`,`版本`]}]}],$=[{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`}],ct=(0,J.memo)(function({isOpen:e,onClose:t,onNavigate:n,focusSection:i}){let{t:a}=R(),[s,c]=(0,J.useState)(`general`),[l,u]=(0,J.useState)(``);De({isOpen:e,onClose:t});let f=(0,J.useRef)(null);(0,J.useEffect)(()=>{e&&i?.section===`stt`&&(c(`voice`),requestAnimationFrame(()=>{f.current?.scrollIntoView({behavior:`smooth`,block:`start`})}))},[i?.nonce,e]);let p=(0,J.useRef)(null);(0,J.useEffect)(()=>{e&&i?.section===`profile`&&(c(`profile`),requestAnimationFrame(()=>{p.current?.scrollIntoView({behavior:`smooth`,block:`start`})}))},[i?.nonce,e]),(0,J.useEffect)(()=>{e&&u(``)},[e]);let m=(0,J.useMemo)(()=>{if(!l.trim())return st;let e=l.toLowerCase().trim();return st.map(t=>({...t,items:t.items.filter(t=>a(t.labelKey).toLowerCase().includes(e)||t.searchKeys.some(t=>t.toLowerCase().includes(e)))})).filter(e=>e.items.length>0)},[l,a]),{visible:h,phase:g}=Oe(e);return h?(0,Y.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4`,role:`dialog`,"aria-modal":`true`,"aria-label":a(`settings.title`),children:[(0,Y.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":g,onClick:t}),(0,Y.jsxs)(`div`,{className:`relative w-full max-w-4xl h-[80vh] bg-dark-overlay ui-surface-overlay border border-dark-border rounded-2xl shadow-pop flex flex-col overflow-hidden ui-overlay-panel`,"data-phase":g,children:[(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between ps-5 pe-3 py-3 border-b border-dark-border`,children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold text-dark-text`,children:a(`settings.title`)}),(0,Y.jsx)(`button`,{onClick:t,"aria-label":`Close`,className:`p-1.5 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:(0,Y.jsx)(te,{size:18,"aria-hidden":`true`})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-1 min-h-0`,children:[(0,Y.jsxs)(`nav`,{className:`w-52 shrink-0 border-e border-dark-border bg-dark-surface/40 flex flex-col min-h-0`,children:[(0,Y.jsx)(`div`,{className:`p-3 pb-1`,children:(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(y,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted pointer-events-none`}),(0,Y.jsx)(`input`,{type:`text`,value:l,onChange:e=>u(e.target.value),placeholder:a(`settings.searchPlaceholder`),className:`w-full bg-dark-surface border border-dark-border rounded-lg ps-8 pe-2 py-1.5 text-xs text-dark-text placeholder-dark-muted focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all`})]})}),(0,Y.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar px-3 pb-3`,children:[m.map(e=>(0,Y.jsxs)(`div`,{className:`mt-3 first:mt-1`,children:[(0,Y.jsx)(`div`,{className:`px-2 mb-1 text-badge font-medium uppercase tracking-wide text-dark-muted/80`,children:a(e.labelKey)}),(0,Y.jsx)(`div`,{className:`space-y-0.5`,children:e.items.map(e=>{let t=e.icon,n=s===e.id;return(0,Y.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 ${n?`bg-accent-blue/10 text-accent-blue font-medium`:`text-dark-text/90 hover:bg-dark-hover`}`,children:[(0,Y.jsx)(t,{size:15,className:n?`text-accent-blue`:`text-dark-muted`}),(0,Y.jsx)(`span`,{className:`truncate`,children:a(e.labelKey)})]},e.id)})})]},e.labelKey)),m.length===0&&(0,Y.jsx)(`div`,{className:`mt-6 text-center text-xs text-dark-muted`,children:a(`settings.noResults`)})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-w-0 min-h-0 overflow-y-auto custom-scrollbar`,children:(0,Y.jsxs)(`div`,{className:`max-w-2xl px-6 py-5`,children:[s===`general`&&(0,Y.jsx)(lt,{}),s===`appearance`&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ut,{}),(0,Y.jsx)(Q,{icon:d,iconColor:`text-accent-purple`,title:a(`brand.title`),children:(0,Y.jsx)(Ae,{dense:!0})})]}),s===`profile`&&(0,Y.jsx)(`div`,{ref:p,id:`settings-section-profile`,className:`scroll-mt-5`,children:(0,Y.jsx)(ft,{})}),s===`voice`&&(0,Y.jsx)(`div`,{ref:f,id:`settings-section-stt`,className:`scroll-mt-5`,children:(0,Y.jsx)(dt,{})}),s===`models`&&(0,Y.jsx)(pt,{onNavigate:n}),s===`connectors`&&(0,Y.jsx)(mt,{onNavigate:n}),s===`context`&&(0,Y.jsx)(ht,{}),s===`configFiles`&&(0,Y.jsx)(gt,{}),s===`sandbox`&&(0,Y.jsx)(_t,{}),s===`network`&&(0,Y.jsx)(Q,{icon:A,iconColor:`text-accent-green`,title:a(`settings.nav.network`),children:(0,Y.jsx)(Xe,{})}),s===`daemon`&&(0,Y.jsx)(Q,{icon:o,iconColor:`text-accent-green`,title:a(`settings.daemon.title`),children:(0,Y.jsx)($e,{})}),s===`desktop`&&(0,Y.jsx)(Q,{icon:r,iconColor:`text-accent-blue`,title:a(`settings.nav.desktop`),children:(0,Y.jsx)(tt,{})}),s===`system`&&(0,Y.jsx)(vt,{}),s===`about`&&(0,Y.jsx)(yt,{})]})})]})]})]}):null});function lt(){let{t:e}=R(),{language:t,setLanguage:n,developerView:r,setDeveloperView:i,effort:a}=U(),o=de[fe(a)],c=Ce(t),l=[{code:we,label:e(`settings.languageAuto`)},...ve.map(e=>({code:e.code,label:e.label}))];return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(Q,{icon:O,iconColor:`text-accent-blue`,title:e(`settings.language`),children:[(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:l.map(({code:e,label:t})=>(0,Y.jsx)(`button`,{lang:e===`auto`?void 0:e,onClick:()=>{n(e),e!==c&&G.config.language.set(be(ye(e))).catch(()=>{})},className:`px-4 py-2 rounded-lg transition-all ${c===e?`bg-accent-blue text-accent-fg`:`bg-dark-hover text-dark-text hover:bg-dark-border`}`,children:t},e))}),(0,Y.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:e(`settings.languageHint`)})]}),(0,Y.jsx)(Q,{icon:s,iconColor:`text-accent-blue`,title:e(`settings.display`),children:(0,Y.jsxs)(`label`,{className:`flex items-center justify-between gap-3 py-1 cursor-pointer`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm text-dark-text`,children:e(`settings.developerView`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`settings.developerViewHint`)})]}),(0,Y.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":r,onClick:()=>i(!r),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${r?`bg-accent-blue`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${r?`translate-x-[18px]`:`translate-x-0.5`}`})})]})}),(0,Y.jsx)(Q,{icon:P,iconColor:`text-accent-yellow`,title:e(`settings.effort`),children:(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-4 py-1`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`settings.effortHint`)}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted mt-1`,children:o.hint})]}),(0,Y.jsx)(he,{syncSession:!1})]})}),(0,Y.jsx)(Q,{icon:p,iconColor:`text-accent-yellow`,title:e(`settings.notifications.title`),children:(0,Y.jsx)(it,{})})]})}function ut(){let{t:e}=R(),{theme:n,setTheme:r,themePresetId:i,setThemePreset:a,customTheme:o,customThemeEnabled:s,setCustomTheme:c,setCustomThemeEnabled:l,resetCustomTheme:u}=U(),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,J.useState)(s),y=(0,J.useMemo)(()=>n===`dark`?`dark`:n===`light`?`light`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`,[n]),b=(0,J.useMemo)(()=>xe(d),[d]);return(0,Y.jsxs)(Q,{icon:E,iconColor:`text-accent-purple`,title:e(`settings.theme`),children:[(0,Y.jsx)(`div`,{className:`flex gap-2 mb-4`,children:[`dark`,`light`,`auto`].map(t=>(0,Y.jsx)(`button`,{onClick:()=>r(t),className:`px-4 py-2 rounded-lg transition-all ${n===t?`bg-accent-blue text-accent-fg`:`bg-dark-hover text-dark-text hover:bg-dark-border`}`,children:e(t===`dark`?`settings.themeDark`:t===`light`?`settings.themeLight`:`settings.themeAuto`)},t))}),(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsx)(`h4`,{className:`text-xs font-semibold text-dark-text mb-2`,children:e(`settings.themePresets`)}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 gap-2`,children:b.map(t=>{let n=(i||`graph`)===t.id,r=y===`dark`?t.dark:t.light,o=Te(t,e);return(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(at,{id:t.id,label:o,description:Se(t,e),colors:r,pattern:t.pattern,isSelected:n,onClick:()=>a(t.id)}),t.custom&&(0,Y.jsx)(`button`,{type:`button`,title:e(`settings.themeCustomDelete`,{name:o}),"aria-label":e(`settings.themeCustomDelete`,{name:o}),onClick:()=>{g(t.id)},className:`absolute top-1 start-1 flex h-4 w-4 items-center justify-center rounded-full border border-dark-border bg-dark-surface/90 text-[10px] leading-none text-dark-muted transition-colors hover:border-accent-red/50 hover:text-accent-red`,children:`×`})]},t.id)})}),(0,Y.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 text-meta text-dark-muted`,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{h(!0)},disabled:m,className:`inline-flex items-center gap-1 transition-colors hover:text-dark-text disabled:opacity-50`,children:[(0,Y.jsx)(t,{size:12,className:m?`animate-spin`:void 0}),e(`settings.themeCustomReload`)]}),(0,Y.jsx)(`span`,{children:e(`settings.themeCustomHint`)})]}),p&&(0,Y.jsx)(`p`,{className:`mt-1 text-meta text-accent-red`,children:e(`settings.themeCustomError`,{error:p})}),f.length>0&&(0,Y.jsx)(`ul`,{className:`mt-1 space-y-0.5 text-meta text-accent-yellow`,children:f.map((t,n)=>(0,Y.jsx)(`li`,{children:e(`settings.themeCustomRejected`,{index:t.index>=0?t.index+1:`-`,reason:t.reason})},`${t.index}-${n}`))})]}),(0,Y.jsxs)(`div`,{className:`pt-4 border-t border-dark-border`,children:[(0,Y.jsxs)(`button`,{onClick:()=>{let e=!_;v(e),l(e)},className:`flex items-center gap-2 text-sm text-dark-muted hover:text-dark-text transition-colors`,children:[(0,Y.jsx)(E,{size:14}),(0,Y.jsx)(`span`,{children:e(`settings.customOverrides`)}),(0,Y.jsx)(`span`,{className:`w-8 h-4 rounded-full transition-colors ${_?`bg-accent-blue`:`bg-dark-border`}`,children:(0,Y.jsx)(`span`,{className:`block w-3 h-3 rounded-full bg-white transition-transform mt-0.5 ${_?`ms-4`:`ms-0.5`}`})})]}),_&&(0,Y.jsx)(`p`,{className:`text-badge text-dark-muted mt-1 mb-2`,children:e(`settings.customOverridesHint`)}),_&&(0,Y.jsxs)(`div`,{className:`mt-3`,children:[(0,Y.jsx)(`div`,{className:`flex gap-1 mb-3 rounded-lg overflow-hidden h-6`,children:$.map(({key:e})=>(0,Y.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:o[e]},title:e},e))}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-2`,children:$.map(({key:t,labelKey:n})=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`input`,{type:`color`,value:o[t],onChange:e=>c({[t]:e.target.value}),className:`w-8 h-8 rounded border border-dark-border cursor-pointer bg-transparent p-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted flex-1 truncate`,children:e(n)}),(0,Y.jsx)(`input`,{type:`text`,value:o[t],onChange:e=>{let n=e.target.value;/^#[0-9a-fA-F]{0,6}$/.test(n)&&c({[t]:n})},className:`w-16 bg-dark-bg border border-dark-border rounded px-1 py-0.5 text-xs text-dark-text font-mono text-center`,maxLength:7})]},t))}),(0,Y.jsx)(`button`,{onClick:u,className:`mt-2 text-xs text-dark-muted hover:text-accent-red transition-colors`,children:e(`settings.resetColors`)})]})]})]})}function dt(){let{t:e}=R();return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Q,{icon:f,iconColor:`text-accent-blue`,title:e(`stt.setup.title`),children:(0,Y.jsx)(Le,{})}),(0,Y.jsx)(Q,{icon:M,iconColor:`text-accent-purple`,title:e(`tts.setup.title`),children:(0,Y.jsx)(Re,{})})]})}function ft(){let{t:e}=R();return(0,Y.jsx)(Q,{icon:C,iconColor:`text-accent-purple`,title:e(`settings.profile.title`),children:(0,Y.jsx)(qe,{})})}function pt({onNavigate:e}){return(0,Y.jsxs)(Q,{icon:a,iconColor:`text-accent-yellow`,title:`Provider & Models`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:`Configure AI providers, API keys, and model settings. Add or remove providers like OpenAI, Anthropic, DeepSeek, and more.`}),(0,Y.jsx)(K,{variant:`accent`,leftIcon:(0,Y.jsx)(m,{size:14}),onClick:()=>e?.(`models`),className:`w-fit`,children:`Manage Providers & Models`})]})}function mt({onNavigate:e}){let{t}=R();return(0,Y.jsxs)(Q,{icon:r,iconColor:`text-accent-green`,title:t(`settings.capabilities.title`),children:[(0,Y.jsx)(`p`,{className:`text-sm text-dark-muted mb-3`,children:`Computer Use、外部服务连接器(X/Twitter、Gmail、Google Workspace、Microsoft 365 等)与 xAI (Grok) 统一在连接器页集中管理。`}),(0,Y.jsx)(K,{variant:`accent`,leftIcon:(0,Y.jsx)(m,{size:14}),onClick:()=>e?.(`connectors`),className:`w-fit`,children:`Manage Connectors & Capabilities`})]})}function ht(){let{t:e}=R();return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Q,{icon:ee,iconColor:`text-accent-blue`,title:e(`settings.contextWindow.title`),children:(0,Y.jsx)(He,{})}),(0,Y.jsx)(Q,{icon:s,iconColor:`text-accent-purple`,title:e(`settings.contextOffload.title`),children:(0,Y.jsx)(ze,{})})]})}function gt(){return(0,Y.jsx)(Q,{icon:u,iconColor:`text-accent-green`,title:`Config Files (~/.agent/)`,children:(0,Y.jsx)(Ne,{})})}function _t(){let{t:e}=R();return(0,Y.jsx)(Q,{icon:l,iconColor:`text-accent-green`,title:e(`settings.sandbox.title`),children:(0,Y.jsx)(We,{})})}function vt(){let[e,n]=(0,J.useState)(0),[r,i]=(0,J.useState)(!1),[a,s]=(0,J.useState)(!1);(0,J.useEffect)(()=>{let e=!0,t=async()=>{try{let t=await G.system.status();e&&t.success&&t.data&&n(t.data.uptime)}catch{}};t();let i=setInterval(t,r?2e3:1e4);return()=>{e=!1,clearInterval(i)}},[r]);let c=(0,J.useCallback)(async()=>{if(window.confirm(`Restart the server? All active sessions will be disconnected.`)){i(!0);try{let e=await G.system.restart();e.success?B.info(`Server restarting...`):(B.error(e.error||`Restart failed`),i(!1))}catch{B.error(`Failed to send restart request`),i(!1)}}},[]),l=(0,J.useCallback)(async()=>{if(window.confirm(`Shut down the server? This will stop the entire backend process.`)&&window.confirm(`Are you sure? All active sessions and unsaved work will be lost.`)){s(!0);try{let e=await G.system.shutdown();e.success?B.info(`Server shutting down...`):(B.error(e.error||`Shutdown failed`),s(!1))}catch{B.error(`Failed to send shutdown request`),s(!1)}}},[]);return(0,J.useEffect)(()=>{r&&e<1e4&&(i(!1),B.success(`Server restarted`))},[e,r]),(0,Y.jsx)(Q,{icon:o,iconColor:`text-dark-muted`,title:`System`,children:(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between text-sm`,children:[(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:`Server Uptime`}),(0,Y.jsx)(`span`,{className:`text-dark-text font-mono`,children:(e=>{let t=Math.floor(e/1e3),n=Math.floor(t/60),r=Math.floor(n/60);return r>0?`${r}h ${n%60}m`:n>0?`${n}m ${t%60}s`:`${t}s`})(e)})]}),(0,Y.jsxs)(`button`,{onClick:c,disabled:r,className:`flex items-center gap-2 px-4 py-2 rounded-lg text-sm transition-all ${r?`bg-dark-hover text-dark-muted cursor-wait`:`bg-accent-red/10 text-accent-red hover:bg-accent-red/20 border border-accent-red/30`}`,children:[(0,Y.jsx)(t,{size:14,className:r?`animate-spin`:``}),r?`Restarting...`:`Restart Server`]}),(0,Y.jsxs)(`button`,{onClick:l,disabled:a,className:`flex items-center gap-2 px-4 py-2 rounded-lg text-sm transition-all ${a?`bg-dark-hover text-dark-muted cursor-wait`:`bg-accent-red/10 text-accent-red hover:bg-accent-red/20 border border-accent-red/30`}`,children:[(0,Y.jsx)(j,{size:14,className:a?`animate-pulse`:``}),a?`Shutting Down...`:`Shutdown Server`]})]})})}function yt(){let{t:e}=R();return(0,Y.jsx)(Q,{icon:I,iconColor:`text-accent-blue`,title:e(`settings.about`),children:(0,Y.jsxs)(`div`,{className:`text-sm text-dark-muted space-y-2`,children:[(0,Y.jsxs)(`p`,{children:[(0,Y.jsx)(`span`,{className:`text-dark-text`,children:`DeepSeekCode Web`}),` v`,ot.version]}),(0,Y.jsx)(`p`,{children:e(`settings.aboutDesc`)}),(0,Y.jsx)(`p`,{className:`text-xs`,children:`Powered by React + TypeScript + TailwindCSS`}),(0,Y.jsx)(`p`,{className:`text-xs`,children:`联系:ngwlh2026@gmail.com`}),(0,Y.jsxs)(`button`,{onClick:()=>ke.getState().openWhatsNew(),className:`mt-2 flex items-center gap-2 px-4 py-2 rounded-lg text-sm transition-all bg-accent-blue/10 text-accent-blue hover:bg-accent-blue/20 border border-accent-blue/30`,children:[(0,Y.jsx)(d,{size:14}),e(`settings.whatsNew`)]})]})})}export{ct as SettingsModal};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,C as n,J as r,Ur as i,Vn as a,_ as o,g as s,ln as c,m as l,n as u,ot as d,p as f,t as p,v as m,vr as h,wn as g,x as _,xr as v,yr as ee}from"./icons-BvYhTENi.js";import{t as y}from"./useTranslation-BGmCDuQI.js";import{t as b}from"./cn-rx4uumOJ.js";import{t as x}from"./api-CCt9DRQm.js";import{I as S}from"./markdown-DAQZeY5V.js";import{A as C,a as w,c as T,f as te,h as ne,m as re,o as E,s as ie}from"./common-BHXgEvgk.js";var D=e(i(),1),O=S();function ae(){let{t:e}=y(),[n,r]=(0,D.useState)([]),[i,a]=(0,D.useState)(!0),[o,s]=(0,D.useState)(null),[f,p]=(0,D.useState)(null),[m,h]=(0,D.useState)(!1),[g,_]=(0,D.useState)({skillName:``,description:``,trigger:``,content:``}),[ee,b]=(0,D.useState)(!1),[S,w]=(0,D.useState)(null),T=(0,D.useCallback)(async()=>{a(!0);try{let e=await x.skills.workshop.list();r(e.data??[]),s(null)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},[]);(0,D.useEffect)(()=>{T()},[T]);let te=async e=>{p(e);try{await x.skills.workshop.apply(e),await T()}catch(e){s(e instanceof Error?e.message:String(e))}finally{p(null)}},ne=async e=>{p(e);try{await x.skills.workshop.reject(e),await T()}catch(e){s(e instanceof Error?e.message:String(e))}finally{p(null)}};return(0,O.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar pe-1 space-y-3`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,O.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`skills.workshopHint`)||`技能提案:从会话/手动生成,审核后一键应用为技能`}),(0,O.jsx)(C,{variant:`accent`,leftIcon:(0,O.jsx)(d,{size:14}),onClick:()=>{h(e=>!e),w(null)},children:e(`skills.workshopPropose`)||`新建提案`})]}),m&&(0,O.jsxs)(`div`,{className:`rounded-xl border border-dark-border bg-dark-surface p-3 space-y-2`,children:[(0,O.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,O.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,O.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,O.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,O.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,O.jsx)(`div`,{className:`text-xs text-accent-red`,children:S}),(0,O.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,O.jsx)(`button`,{onClick:()=>h(!1),className:`px-3 py-1.5 rounded-lg text-sm border border-dark-border hover:bg-dark-hover`,children:e(`common.cancel`)||`取消`}),(0,O.jsx)(C,{variant:`accent`,leftIcon:(0,O.jsx)(v,{size:14}),loading:ee,onClick:async()=>{if(!g.skillName.trim()||!g.content.trim())w(e(`skills.workshopFormRequired`)||`skillName and content are required`);else{b(!0),w(null);try{await x.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:``}),h(!1),await T()}catch(e){w(e instanceof Error?e.message:String(e))}finally{b(!1)}}},children:e(`skills.workshopSubmit`)||`提交提案`})]})]}),o&&(0,O.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,O.jsx)(l,{size:14,className:`shrink-0`}),(0,O.jsx)(`span`,{className:`min-w-0 flex-1`,children:o}),(0,O.jsx)(`button`,{onClick:()=>s(null),className:`shrink-0 p-0.5 rounded hover:bg-dark-hover`,children:(0,O.jsx)(u,{size:14})})]}),i?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-16`,children:(0,O.jsx)(t,{size:24,className:`animate-spin text-accent-blue`})}):n.length===0?(0,O.jsx)(`div`,{className:`text-sm text-dark-muted py-10 text-center`,children:e(`skills.workshopEmpty`)||`暂无技能提案`}):n.map(t=>(0,O.jsxs)(`div`,{className:`rounded-xl border border-dark-border bg-dark-surface p-3 space-y-1.5`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,O.jsx)(c,{size:14,className:`text-accent-blue shrink-0`}),(0,O.jsx)(`span`,{className:`font-medium text-sm truncate`,children:t.skillName}),(0,O.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,O.jsx)(`div`,{className:`flex items-center gap-1 shrink-0`,children:t.status===`pending`&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`button`,{onClick:()=>te(t.id),disabled:f===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,O.jsx)(v,{size:12}),e(`skills.workshopApply`)||`应用`]}),(0,O.jsx)(`button`,{onClick:()=>ne(t.id),disabled:f===t.id,className:`px-2 py-1 rounded text-xs border border-dark-border hover:bg-dark-hover disabled:opacity-50`,children:(0,O.jsx)(u,{size:12})})]})})]}),t.description&&(0,O.jsx)(`div`,{className:`text-xs text-dark-muted truncate`,children:t.description}),t.trigger&&(0,O.jsxs)(`div`,{className:`text-xs text-accent-blue`,children:[`trigger: `,t.trigger]}),(0,O.jsx)(`div`,{className:`text-xs text-dark-muted line-clamp-3 whitespace-pre-wrap`,children:t.content}),(0,O.jsxs)(`div`,{className:`text-meta text-dark-muted/70 flex items-center justify-between`,children:[(0,O.jsx)(`span`,{children:t.reason}),(0,O.jsx)(`span`,{children:new Date(t.createdAt).toLocaleString()})]})]},t.id))]})}var oe=/^(https?:|data:)/i;function k({icon:e,className:t=`w-4 h-4 rounded object-cover shrink-0`}){return e&&oe.test(e)?(0,O.jsx)(`img`,{src:e,alt:``,loading:`lazy`,className:t}):(0,O.jsx)(`span`,{children:e||`⭐`})}function se({marketplaces:e,value:t,onChange:n}){let{t:r}=y(),i=Array.from(new Map(e.filter(e=>e.domain).map(e=>[e.domain,e.domainIcon||`📁`])).entries());return i.length===0?null:(0,O.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,O.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,O.jsx)(k,{icon:e.icon,className:`w-3.5 h-3.5 rounded-sm object-cover shrink-0`}),(0,O.jsx)(`span`,{children:e.id||r(`skills.marketDomainAll`)})]},e.id||`__all__`))})}function ce({id:e,installed:t=!0,className:n}){let{t:r}=y(),{configured:i,settingFor:a,effectiveFor:o}=E(`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,O.jsxs)(`span`,{title:r(`settings.kindCapability.hint`),className:b(`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,O.jsx)(`span`,{children:u}),!t&&(0,O.jsx)(`span`,{className:`text-dark-tertiary no-underline`,children:r(`skills.kindTagUninstalled`)})]})}function le({ids:e,className:t}){let{t:n}=y(),r=T(e=>e.kinds),i=T(e=>e.activeKind),{configured:a,effectiveFor:o}=E(`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,O.jsxs)(`p`,{className:b(`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,O.jsx)(`span`,{className:`ms-1 text-dark-tertiary`,children:n(`skills.kindAvailabilityHint`)})]})}function ue({index:e,children:t}){let n=T(e=>e.activeKind),r=Math.min(e,10)*70;return(0,O.jsx)(`div`,{className:`animate-fade-in h-full [&>*]:h-full`,style:{animationDelay:`${r}ms`},children:t},n)}var A={id:``,name:``,description:``,category:``,trigger:``,systemPrompt:``,injection:`lazy`,tags:``,requiredTools:``},j=8;function de({onUseSkill:e}){let{t:i}=y(),[b,S]=(0,D.useState)(`marketplace`),[T,E]=(0,D.useState)([]),[oe,de]=(0,D.useState)(!0),[pe,N]=(0,D.useState)(null),[P,me]=(0,D.useState)(``),[he,F]=(0,D.useState)(!1),[I,ge]=(0,D.useState)(null),[_e,ve]=(0,D.useState)(!1),[ye,L]=(0,D.useState)(null),[R,z]=(0,D.useState)(A),[be,xe]=(0,D.useState)(!1),[Se,Ce]=(0,D.useState)(!1),[we,B]=(0,D.useState)(null),V=(0,D.useRef)(null),[H,U]=(0,D.useState)([]),[Te,W]=(0,D.useState)([]),[Ee,G]=(0,D.useState)({}),[De,K]=(0,D.useState)(!1),[Oe,q]=(0,D.useState)(null),[ke,Ae]=(0,D.useState)(null),[je,Me]=(0,D.useState)({}),[Ne,Pe]=(0,D.useState)({}),[Fe,Ie]=(0,D.useState)({}),[J,Le]=(0,D.useState)(``),[Y,Re]=(0,D.useState)(``),[ze,Be]=(0,D.useState)(``),[Ve,He]=(0,D.useState)(!1),[X,Ue]=(0,D.useState)(null),Z=(0,D.useMemo)(()=>T.filter(e=>e.source===`marketplace`||e.provenance===`marketplace`),[T]),We=(0,D.useMemo)(()=>T.filter(e=>e.source!==`marketplace`&&e.provenance!==`marketplace`),[T]),Ge=e=>{let t=Ee[e]?.skills||[];return Math.max(1,Math.ceil(t.length/j))},Ke=(e,t)=>{Me(n=>({...n,[e]:Math.max(0,Math.min(Ge(e)-1,t))}))},qe=async()=>{K(!0),q(null);let e=await x.skills.marketplaces.list();e.success?(U(e.data?.marketplaces||[]),W(e.data?.installed||[]),G(e.data?.indexes||{}),K(!1)):(q(e.error||i(`skills.loadMarketplaceFail`)),K(!1))},Je=async()=>{let e=Y.trim();if(!e)return;He(!0),q(null);let t=await x.skills.marketplaces.add({url:e,name:ze.trim()||void 0});if(t.success&&t.data){Re(``),Be(``);let e=t.data.marketplace;U(t=>[...t.filter(t=>t.id!==e.id),e]),G(n=>({...n,[e.id]:t.data.index}))}else q(t.error||i(`skills.addFail`));He(!1)},Ye=async e=>{q(null);let t=await x.skills.marketplaces.refresh(e);t.success&&t.data?G(n=>({...n,[e]:t.data.index})):q(t.error||i(`skills.loadMarketplaceFail`))},Xe=async e=>{await x.skills.marketplaces.remove(e),U(t=>t.filter(t=>t.id!==e)),G(t=>{let n={...t};return delete n[e],n})},Ze=async(e,t)=>{Ae(t),q(null);let n=await x.skills.marketplaces.install(e,t);n.success&&n.data?(W(e=>[...e.filter(e=>e!==n.data.id),n.data.id]),await Q()):q(n.error||i(`skills.installFail`)),Ae(null)},Qe=async e=>{q(null);let t=await x.skills.delete(e);t.success?(W(t=>t.filter(t=>t!==e)),await Q()):q(t.error||i(`skills.uninstallFail`)),Ue(null)},Q=async()=>{de(!0),N(null);let e=await x.skills.list();if(e.success){let t=Array.isArray(e.data)?e.data:[];E(t),e.data!==null&&e.data!==void 0&&!Array.isArray(e.data)&&N(`服务端返回的技能数据格式异常`)}else N(e.error||i(`skills.loadFailedFallback`));de(!1)};(0,D.useEffect)(()=>{Q(),qe()},[]);let $e=(0,D.useMemo)(()=>{let e=P.trim().toLowerCase();return e?We.filter(t=>[t.id,t.name,t.description,t.category,...t.tags||[]].join(` `).toLowerCase().includes(e)):We},[We,P]),et=()=>{ge(null),z(A),L(null),F(!0)},tt=e=>{ge(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),F(!0)},nt=async()=>{let e=R.id.trim();if(!e){L(i(`skills.fieldId`)+` is required`);return}ve(!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:fe(R.tags),requiredTools:fe(R.requiredTools)},n=I?await x.skills.update(I,t):await x.skills.create(t);n.success?(F(!1),ge(null),z(A),await Q()):L(n.error||i(`skills.save`)),ve(!1)},rt=async e=>{(await x.skills.toggle(e.id,!e.enabled)).success&&E(t=>t.map(t=>t.id===e.id?{...t,enabled:!t.enabled}:t))},it=async e=>{Ce(!0),B(null);try{let t=await e.text(),n=await x.skills.import({fileName:e.name,content:t});n.success?(xe(!1),await Q()):B(n.error||i(`skills.import`))}catch(e){B(e instanceof Error?e.message:i(`skills.import`))}finally{Ce(!1),V.current&&(V.current.value=``)}};if(oe)return(0,O.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,role:`status`,children:(0,O.jsx)(te,{count:5})});if(pe)return(0,O.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,O.jsxs)(`div`,{className:`text-center`,children:[(0,O.jsx)(l,{size:32,className:`mx-auto mb-2 text-accent-red`}),(0,O.jsx)(`p`,{className:`text-accent-red mb-4`,children:pe}),(0,O.jsx)(C,{variant:`accent`,onClick:Q,children:i(`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,O.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden p-4 gap-3`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,O.jsxs)(`h2`,{className:`text-lg font-semibold flex items-center gap-2 shrink-0`,children:[(0,O.jsx)(_,{size:20}),i(`skills.title`),(0,O.jsxs)(`span`,{className:`text-sm font-normal text-dark-muted`,children:[`(`,T.length,`)`]})]}),(0,O.jsxs)(`div`,{className:`flex items-center gap-1 bg-dark-surface border border-dark-border rounded-xl p-1`,children:[(0,O.jsxs)(`button`,{onClick:()=>S(`marketplace`),className:$(b===`marketplace`),children:[(0,O.jsx)(n,{size:14}),i(`skills.marketplaceTab`)]}),(0,O.jsxs)(`button`,{onClick:()=>S(`mine`),className:$(b===`mine`),children:[(0,O.jsx)(_,{size:14}),i(`skills.mineTab`)]}),(0,O.jsxs)(`button`,{onClick:()=>S(`installed`),className:$(b===`installed`),children:[(0,O.jsx)(v,{size:14}),i(`skills.installedTab`),(0,O.jsx)(`span`,{className:`text-xs px-1.5 py-0.5 rounded-full bg-dark-bg border border-dark-border`,children:Z.length})]}),(0,O.jsxs)(`button`,{onClick:()=>S(`workshop`),className:$(b===`workshop`),children:[(0,O.jsx)(c,{size:14}),i(`skills.workshopTab`)]})]})]}),(0,O.jsx)(ie,{slot:i(`nav.skills`)}),Oe&&(0,O.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,O.jsx)(l,{size:14,className:`shrink-0`}),(0,O.jsx)(`span`,{className:`min-w-0 flex-1`,children:Oe}),(0,O.jsx)(`button`,{onClick:()=>q(null),className:`shrink-0 p-0.5 rounded hover:bg-dark-hover`,children:(0,O.jsx)(u,{size:14})})]}),b===`marketplace`&&(0,O.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar pe-1 space-y-4`,children:[(0,O.jsxs)(`div`,{className:`flex gap-2`,children:[(0,O.jsx)(`input`,{value:Y,onChange:e=>Re(e.target.value),placeholder:i(`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,O.jsx)(`input`,{value:ze,onChange:e=>Be(e.target.value),placeholder:i(`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,O.jsx)(C,{variant:`accent`,onClick:Je,disabled:!Y.trim(),loading:Ve,leftIcon:(0,O.jsx)(d,{size:14}),children:i(Ve?`skills.adding`:`skills.addMarketplace`)})]}),(0,O.jsx)(`div`,{className:`text-xs text-dark-muted`,children:i(`skills.marketplaceHint`)}),(0,O.jsx)(se,{marketplaces:H,value:J,onChange:Le}),De?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-16`,children:(0,O.jsx)(t,{size:24,className:`animate-spin text-accent-blue`})}):(0,O.jsxs)(O.Fragment,{children:[H.length===0&&(0,O.jsx)(`div`,{className:`text-sm text-dark-muted py-10 text-center`,children:i(`skills.noMarketplaces`)}),H.filter(e=>!J||e.domain===J).map(e=>{let n=Ee[e.id],r=n?.skills||[],o=(Ne[e.id]||``).trim().toLowerCase(),s=Fe[e.id]||``,c=Array.from(new Set(r.map(e=>e.category).filter(Boolean))).sort(),l=r.filter(e=>(!o||[e.name,e.id,e.description,...e.tags||[]].join(` `).toLowerCase().includes(o))&&(!s||e.category===s)),d=Math.max(1,Math.ceil(l.length/j)),f=Math.min(je[e.id]||0,d-1),p=l.slice(f*j,(f+1)*j),m=o||s?`${l.length}/${r.length}`:String(r.length);return(0,O.jsxs)(`div`,{className:`border border-dark-border rounded-lg overflow-hidden`,children:[(0,O.jsxs)(`div`,{className:`px-3 py-2 border-b border-dark-border bg-dark-surface flex items-center justify-between gap-2`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsxs)(`div`,{className:`font-medium flex items-center gap-2`,children:[e.builtin&&(0,O.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-blue/20 text-accent-blue`,children:i(`skills.presets`)}),(0,O.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,O.jsx)(`div`,{className:`text-xs text-dark-muted truncate`,children:e.url})]}),(0,O.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,O.jsx)(`span`,{className:`text-xs text-dark-muted whitespace-nowrap`,children:i(`skills.skillCount`,{count:m})}),(0,O.jsx)(`button`,{onClick:()=>Ye(e.id),className:`p-1.5 rounded hover:bg-dark-hover`,title:i(`skills.refreshMarketplace`),children:(0,O.jsx)(t,{size:14})}),!e.builtin&&(0,O.jsx)(`button`,{onClick:()=>Xe(e.id),className:`p-1.5 rounded hover:bg-dark-hover text-accent-red`,title:i(`skills.removeMarketplace`),children:(0,O.jsx)(u,{size:14})})]})]}),n?.error?(0,O.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,O.jsx)(`span`,{className:`min-w-0 truncate`,title:n.error,children:i(`skills.marketplaceError`,{error:n.error})}),(0,O.jsxs)(`button`,{onClick:()=>Ye(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,O.jsx)(t,{size:12}),i(`skills.retryMarket`)]})]}):r.length===0?(0,O.jsx)(`div`,{className:`text-xs text-dark-muted py-4 text-center`,children:i(`skills.noSkillsInMarket`)}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b border-dark-border/60 bg-dark-surface/40`,children:[(0,O.jsx)(`input`,{value:Ne[e.id]||``,onChange:t=>Pe(n=>({...n,[e.id]:t.target.value})),placeholder:i(`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`}),c.length>1&&(0,O.jsxs)(`select`,{value:Fe[e.id]||``,onChange:t=>Ie(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,O.jsx)(`option`,{value:``,children:i(`skills.marketCategoryAll`)}),c.map(e=>(0,O.jsx)(`option`,{value:e,children:e},e))]})]}),(0,O.jsx)(le,{ids:l.map(e=>e.id),className:`px-3 pt-2`}),l.length===0?(0,O.jsx)(`div`,{className:`text-xs text-dark-muted py-4 text-center`,children:i(`skills.noSkillsInMarket`)}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-2 p-3`,children:p.map((n,r)=>{let o=Te.includes(n.id),s=ke===n.id;return(0,O.jsx)(ue,{index:r,children:(0,O.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 flex flex-col gap-2`,children:[(0,O.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,O.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,O.jsxs)(`span`,{className:`font-medium text-sm truncate`,children:[(0,O.jsx)(k,{icon:n.icon}),` `,n.name]}),n.risk===`critical`&&(0,O.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red shrink-0`,children:i(`skills.riskCritical`)})]}),(0,O.jsxs)(`div`,{className:`text-xs text-dark-muted truncate`,children:[n.category,n.author?` · ${n.author}`:``,n.version?` · v${n.version}`:``]})]}),(0,O.jsxs)(`button`,{disabled:o||s,onClick:()=>Ze(e.id,n.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 ${o?`bg-accent-green/20 text-accent-green`:`bg-accent-blue text-accent-fg hover:bg-accent-blue/80`}`,children:[o?(0,O.jsx)(v,{size:12}):s?(0,O.jsx)(t,{size:12,className:`animate-spin`}):(0,O.jsx)(a,{size:12}),i(o?`skills.installed`:s?`skills.installing`:`skills.installSkill`)]})]}),n.description&&(0,O.jsx)(`p`,{className:`text-xs text-dark-muted line-clamp-2`,children:n.description}),(0,O.jsx)(ce,{id:n.id,installed:o,className:`mt-auto`})]})},n.id)})}),d>1&&(0,O.jsxs)(`div`,{className:`flex items-center justify-center gap-3 pb-3 text-xs text-dark-muted`,children:[(0,O.jsxs)(`button`,{disabled:f<=0,onClick:()=>Ke(e.id,f-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,O.jsx)(ee,{size:14}),i(`skills.pagePrev`)]}),(0,O.jsx)(`span`,{className:`whitespace-nowrap`,children:i(`skills.pageOf`,{page:f+1,total:d})}),(0,O.jsxs)(`button`,{disabled:f>=d-1,onClick:()=>Ke(e.id,f+1),className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40`,children:[i(`skills.pageNext`),(0,O.jsx)(h,{size:14})]})]})]})]})]},e.id)})]})]}),b===`installed`&&(0,O.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar pe-1`,children:Z.length===0?(0,O.jsxs)(`div`,{className:`text-center py-16 text-dark-muted`,children:[(0,O.jsx)(`p`,{className:`mb-1`,children:i(`skills.emptyInstalled`)}),(0,O.jsx)(`p`,{className:`text-xs mb-4`,children:i(`skills.emptyInstalledHint`)}),(0,O.jsx)(C,{variant:`accent`,leftIcon:(0,O.jsx)(n,{size:14}),onClick:()=>S(`marketplace`),children:i(`skills.browseMarket`)})]}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(le,{ids:Z.map(e=>e.id),className:`px-1 pb-2`}),(0,O.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-2`,children:Z.map((t,n)=>(0,O.jsx)(ue,{index:n,children:(0,O.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 flex flex-col gap-2`,children:[(0,O.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsxs)(`div`,{className:`font-medium text-sm truncate`,children:[(0,O.jsx)(k,{icon:t.icon}),` `,t.name]}),(0,O.jsxs)(`div`,{className:`text-xs text-dark-muted truncate`,children:[t.id,` · `,t.category]})]}),(0,O.jsxs)(`button`,{onClick:()=>rt(t),className:`flex items-center gap-1 px-2 py-1 rounded text-xs font-medium whitespace-nowrap shrink-0 transition-colors ${t.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:t.enabled?i(`skills.disable`):i(`skills.enable`),children:[t.enabled?(0,O.jsx)(o,{size:14}):(0,O.jsx)(m,{size:14}),t.enabled?i(`skills.enabled`):i(`skills.disabled`)]})]}),t.description&&(0,O.jsx)(`p`,{className:`text-xs text-dark-muted line-clamp-2`,children:t.description}),(0,O.jsx)(ce,{id:t.id}),(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mt-auto`,children:[(0,O.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-bg border border-dark-border text-dark-muted truncate`,children:t.marketplace||t.source||i(`skills.marketplace`)}),(0,O.jsxs)(`div`,{className:`flex gap-2 shrink-0`,children:[e&&(0,O.jsxs)(`button`,{onClick:()=>e(t),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:i(`skills.useHint`),children:[(0,O.jsx)(p,{size:12}),i(`skills.use`)]}),(0,O.jsxs)(`button`,{onClick:()=>tt(t),className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border text-xs hover:bg-dark-hover`,children:[(0,O.jsx)(r,{size:12}),i(`skills.edit`)]}),(0,O.jsxs)(`button`,{onClick:()=>Ue(t.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,O.jsx)(s,{size:12}),i(`skills.uninstall`)]})]})]})]})},t.id))})]})}),b===`workshop`&&(0,O.jsx)(ae,{}),b===`mine`&&(0,O.jsxs)(`div`,{className:`flex-1 min-h-0 flex flex-col gap-3`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,O.jsx)(`input`,{value:P,onChange:e=>me(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,O.jsx)(`span`,{className:`text-sm text-dark-muted shrink-0`,children:$e.length})]}),(0,O.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,O.jsx)(C,{variant:`accent`,leftIcon:(0,O.jsx)(d,{size:14}),onClick:et,children:i(`skills.new`)}),(0,O.jsxs)(`button`,{onClick:()=>xe(!0),className:`flex items-center gap-2 px-3 py-2 bg-dark-surface border border-dark-border rounded-lg`,children:[(0,O.jsx)(f,{size:14}),i(`skills.import`)]}),(0,O.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,O.jsx)(t,{size:14}),i(`skills.refresh`)]})]})]}),$e.length===0?(0,O.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center text-dark-muted gap-3`,children:[(0,O.jsx)(`p`,{children:i(`skills.noSkills`)}),(0,O.jsx)(C,{variant:`accent`,leftIcon:(0,O.jsx)(d,{size:14}),onClick:et,children:i(`skills.new`)})]}):(0,O.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar pe-1`,children:(0,O.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 gap-3`,children:$e.map((t,n)=>(0,O.jsx)(ue,{index:n,children:(0,O.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 flex flex-col gap-2 bg-dark-surface`,children:[(0,O.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsxs)(`div`,{className:`font-medium text-sm truncate`,children:[(0,O.jsx)(k,{icon:t.icon}),` `,t.name]}),(0,O.jsx)(`div`,{className:`text-xs text-dark-muted truncate`,children:t.id})]}),(0,O.jsxs)(`button`,{onClick:()=>rt(t),className:`flex items-center gap-1 px-2 py-1 rounded text-xs font-medium whitespace-nowrap shrink-0 transition-colors ${t.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:t.enabled?i(`skills.disable`):i(`skills.enable`),children:[t.enabled?(0,O.jsx)(o,{size:14}):(0,O.jsx)(m,{size:14}),t.enabled?i(`skills.enabled`):i(`skills.disabled`)]})]}),t.description&&(0,O.jsx)(`p`,{className:`text-xs text-dark-muted line-clamp-2`,children:t.description}),(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mt-auto`,children:[(0,O.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-bg border border-dark-border text-dark-muted truncate`,children:t.category}),(0,O.jsxs)(`div`,{className:`flex gap-2 shrink-0`,children:[(0,O.jsx)(w,{slot:`skills`,id:t.id}),e&&(0,O.jsxs)(`button`,{onClick:()=>e(t),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:i(`skills.useHint`),children:[(0,O.jsx)(p,{size:12}),i(`skills.use`)]}),(0,O.jsxs)(`button`,{onClick:()=>tt(t),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,O.jsx)(r,{size:12}),i(`skills.edit`)]})]})]})]})},t.id))})})]}),(0,O.jsx)(ne,{isOpen:he,onClose:()=>F(!1),title:i(I?`skills.edit`:`skills.new`),size:`xl`,children:(0,O.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,O.jsx)(M,{label:i(`skills.fieldId`),value:R.id,onChange:e=>z(t=>({...t,id:e}))}),(0,O.jsx)(M,{label:i(`skills.fieldName`),value:R.name,onChange:e=>z(t=>({...t,name:e}))}),(0,O.jsx)(M,{label:i(`skills.fieldCategory`),value:R.category,onChange:e=>z(t=>({...t,category:e}))}),(0,O.jsx)(M,{label:i(`skills.fieldTrigger`),value:R.trigger,onChange:e=>z(t=>({...t,trigger:e}))}),(0,O.jsx)(M,{label:i(`skills.tags`),value:R.tags,onChange:e=>z(t=>({...t,tags:e}))}),(0,O.jsx)(M,{label:i(`skills.fieldTools`),value:R.requiredTools,onChange:e=>z(t=>({...t,requiredTools:e}))}),(0,O.jsxs)(`div`,{className:`col-span-2`,children:[(0,O.jsx)(`label`,{className:`block text-sm mb-1 text-dark-muted`,children:i(`skills.description`)}),(0,O.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,O.jsxs)(`div`,{className:`col-span-2`,children:[(0,O.jsx)(`label`,{className:`block text-sm mb-1 text-dark-muted`,children:i(`skills.systemPrompt`)}),(0,O.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`})]}),ye&&(0,O.jsx)(`div`,{className:`col-span-2 text-sm text-accent-red`,children:ye}),(0,O.jsxs)(`div`,{className:`col-span-2 flex justify-end gap-2`,children:[(0,O.jsx)(C,{variant:`secondary`,onClick:()=>F(!1),children:i(`skills.cancel`)}),(0,O.jsx)(C,{variant:`accent`,leftIcon:(0,O.jsx)(r,{size:14}),loading:_e,onClick:nt,children:i(`skills.save`)})]})]})}),(0,O.jsx)(ne,{isOpen:be,onClose:()=>xe(!1),title:i(`skills.importTitle`),size:`md`,children:(0,O.jsxs)(`div`,{className:`space-y-3`,children:[(0,O.jsx)(`input`,{ref:V,type:`file`,accept:`.md,.skill.md,.txt`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&it(t)}}),(0,O.jsxs)(`button`,{onClick:()=>V.current?.click(),disabled:Se,className:`w-full py-6 border border-dashed border-dark-border rounded-lg flex items-center justify-center gap-2`,children:[(0,O.jsx)(g,{size:16}),i(`skills.chooseFile`)]}),we&&(0,O.jsx)(`div`,{className:`text-sm text-accent-red`,children:we}),(0,O.jsx)(`div`,{className:`text-xs text-dark-muted`,children:i(`skills.importHint`)})]})}),(0,O.jsx)(re,{isOpen:X!==null,onClose:()=>Ue(null),onConfirm:()=>{X&&Qe(X)},title:i(`skills.uninstall`),message:i(`skills.uninstallConfirm`,{name:Z.find(e=>e.id===X)?.name||X||``}),confirmText:i(`skills.uninstall`),cancelText:i(`skills.cancel`),variant:`danger`})]})}function fe(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function M({label:e,value:t,onChange:n}){return(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:`block text-sm mb-1 text-dark-muted`,children:e}),(0,O.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{de as SkillsView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,$n as n,Bn as r,Bt as i,In as a,J as o,O as s,Q as c,R as l,Rr as u,Ur as d,Vn as f,W as ee,Xt as te,Yn as ne,cr as p,ct as re,er as ie,fn as ae,g as oe,m,mt as h,n as g,ot as _,xr as se,z as ce}from"./icons-BvYhTENi.js";import{t as v}from"./useTranslation-BGmCDuQI.js";import{t as y}from"./cn-rx4uumOJ.js";import{t as b}from"./api-CCt9DRQm.js";import{I as le}from"./markdown-DAQZeY5V.js";import{A as x,h as ue,l as S,m as de,u as fe}from"./common-BHXgEvgk.js";import{D as pe,E as me,O as he,k as ge}from"./index-BX-d2OBW.js";var C=e(d(),1),w=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`]),T=new Set([`write_file`,`edit_file`,`file_delete`,`apply_patch`,`bash`,`git_commit`,`git_apply_patch`,`notebook_edit`,`git_branch`,`git_pr`]);function E(e){let t=(e.metadata??{}).primitive?.options;return Array.isArray(t?.tools)?t.tools.map(String):null}var D=new Set([`explore`,`plan`,`verify`]);function O(e){let t=E(e);if(t!==null)return t;let n=e.metadata??{},r=typeof n.role==`string`?n.role:e.type;return D.has(r)?[]:null}function _e(e){if(ye(e))return!1;let t=O(e);return t===null||t.length!==0&&t.some(e=>T.has(e))}var ve=new Set([`parallel`,`pipeline`,`phase`,`condition`,`loop`,`synthesize`,`checkpoint`,`retry`]);function ye(e){let t=(e.metadata??{}).primitive,n=typeof t?.kind==`string`?t.kind:void 0;return n===void 0?ve.has(e.type):n!==`agent`&&n!==`tool`}function k(e){let t=[];for(let n of e)t.push(n),Array.isArray(n.children)&&n.children.length&&t.push(...k(n.children));return t}function be(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 xe(e){return be(e).reduce((e,t)=>Math.max(e,t.length),1)}function Se(e){let t=e.children??[];if(t.length===0)return 1;let n=Math.max(...t.map(e=>Se(e)));return e.type===`parallel`?Math.max(t.length,n):Math.max(1,n)}function Ce(e){let t=xe(e),n=e.reduce((e,t)=>Math.max(e,Se(t)),1);return Math.max(t,n)}function we(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=k(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),_e(e)&&(i=!1)}return{readonly:i,risk:i?`low`:`medium`,maxParallel:Ce(e.nodes),nodeCount:n.length,inputCount:t||0,roles:r}}var Te={parallel:`templates.nodeParallel`,pipeline:`templates.nodePipeline`,phase:`templates.nodePhase`,synthesize:`templates.nodeSynthesize`,condition:`templates.nodeCondition`,loop:`templates.nodeLoop`,checkpoint:`templates.nodeCheckpoint`},Ee={retry:`templates.nodeRetry`};function De(e){let t=e.metadata?.primitive,n=typeof t?.kind==`string`?t.kind:void 0;return n&&Ee[n]?Ee[n]:Te[e.type]}var A=le(),j={explore:`info`,plan:`default`,execute:`success`,verify:`warning`,summarize:`info`,generic:`default`},Oe={explore:`templates.roleExplore`,plan:`templates.rolePlan`,execute:`templates.roleExecute`,verify:`templates.roleVerify`,summarize:`templates.roleSummarize`,generic:`templates.roleGeneric`},M={explore:`text-accent-blue`,plan:`text-dark-muted`,execute:`text-accent-green`,verify:`text-accent-yellow`,summarize:`text-dark-muted`};function ke(e){let t=e.metadata?.role;return typeof t==`string`?t:e.type}function Ae({definition:e}){let{t}=v(),n=(0,C.useMemo)(()=>k(e.nodes||[]),[e.nodes]),r=(0,C.useMemo)(()=>be(n),[n]),i=(0,C.useMemo)(()=>new Map(n.map(e=>[e.id,e])),[n]);return r.length===0?(0,A.jsx)(`p`,{className:`text-xs text-dark-muted`,children:t(`templates.noNodes`)}):(0,A.jsxs)(`div`,{className:`space-y-0`,children:[r.map((e,n)=>(0,A.jsxs)(`div`,{className:`flex`,children:[(0,A.jsxs)(`div`,{className:`flex flex-col items-center shrink-0 w-6 me-2`,children:[n>0&&(0,A.jsx)(`span`,{className:`w-px h-3 bg-dark-border/60`}),e.length>1&&(0,A.jsx)(`span`,{className:`inline-flex items-center gap-0.5 mt-0.5 mb-0.5`,children:e.map((e,t)=>(0,A.jsx)(`span`,{className:`w-[2px] h-2 rounded bg-accent-blue/40`},t))}),n<r.length-1&&(0,A.jsx)(`span`,{className:`w-px flex-1 bg-dark-border/60 my-0.5`})]}),(0,A.jsx)(`div`,{className:y(`flex-1 min-w-0`,e.length>1?`grid grid-cols-2 gap-2 py-1`:`py-0.5`),children:e.map(e=>{let n=ke(e),r=M[n]||`text-dark-muted`,a=(e.dependencies??[]).map(e=>i.get(e)?.title||e),o=De(e);return(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg/60 overflow-hidden`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,A.jsx)(p,{size:12,className:y(`shrink-0`,r)}),(0,A.jsx)(`span`,{className:`text-xs font-medium text-dark-text truncate flex-1`,title:e.title,children:e.title}),(0,A.jsx)(S,{size:`sm`,variant:j[n]||`default`,children:t(o||Oe[n]||`templates.roleGeneric`)})]}),e.description&&(0,A.jsx)(`p`,{className:`px-2.5 pb-1.5 text-meta text-dark-muted leading-relaxed`,children:e.description}),a.length>0&&(0,A.jsx)(`div`,{className:`px-2.5 pb-1.5 flex items-center flex-wrap gap-1`,children:a.map(e=>(0,A.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,A.jsxs)(`div`,{className:`flex items-center gap-3 mt-3 pt-2 border-t border-dark-border text-badge text-dark-muted`,children:[(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,A.jsx)(l,{size:11,className:`text-accent-yellow`}),` `,t(`templates.roleVerify`)]}),(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,A.jsx)(p,{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 P({definition:e}){let{t}=v(),n=(0,C.useMemo)(()=>k(e.nodes||[]),[e.nodes]),{readonly:r,allowList:i,toolSet:a}=(0,C.useMemo)(()=>{let e=new Set,t=!1;for(let r of n){let n=E(r);if(n!==null){for(let t of n)e.add(t);n.some(e=>T.has(e))&&(t=!0)}else N(r)!==`explore`&&N(r)!==`plan`&&N(r)!==`verify`&&(t=!0)}let r=[...e].filter(e=>w.has(e));return{readonly:!t,allowList:r,toolSet:e}},[n]),o=(0,C.useMemo)(()=>[...T].filter(e=>!a.has(e)),[a]);return(0,A.jsxs)(`div`,{className:`space-y-3`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2`,children:[r?(0,A.jsx)(l,{size:16,className:`text-accent-green`}):(0,A.jsx)(ce,{size:16,className:`text-accent-yellow`}),(0,A.jsx)(`span`,{className:`text-sm text-dark-text`,children:t(r?`templates.readonly`:`templates.writable`)}),(0,A.jsx)(S,{size:`sm`,variant:r?`success`:`warning`,children:t(r?`templates.riskLow`:`templates.riskMedium`)})]}),(0,A.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,A.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-2`,children:t(`templates.allowDuringReplay`)}),i.length>0?(0,A.jsx)(`ul`,{className:`space-y-1`,children:i.map(e=>(0,A.jsxs)(`li`,{className:`flex items-center gap-1.5 text-xs text-dark-muted`,children:[(0,A.jsx)(se,{size:12,className:`text-accent-green shrink-0`}),` `,e]},e))}):(0,A.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:t(`templates.noToolsRestriction`)})]}),(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,A.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-2`,children:t(`templates.denyDuringReplay`)}),r?(0,A.jsx)(`ul`,{className:`space-y-1`,children:o.map(e=>(0,A.jsxs)(`li`,{className:`flex items-center gap-1.5 text-xs text-dark-muted`,children:[(0,A.jsx)(g,{size:12,className:`text-accent-red shrink-0`}),` `,e]},e))}):(0,A.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:`—`})]})]}),a.size>0&&(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,A.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-1.5`,children:t(`templates.toolWhitelist`)}),(0,A.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:[...a].map(e=>(0,A.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-hover text-dark-muted`,children:e},e))})]})]})}function je(e){let{t:i,detail:o,sourceLabelKey:s,detailTab:d,onTabChange:ee,onReplay:p,onPreflight:ie,onEdit:m,onDelete:g,onExport:_,onCopyId:se,onToggleAdvanced:v,onToggleVersions:b,onReRecord:le,versions:ue,historyView:de,onLoadVersion:fe,onClearHistory:pe,onRefresh:me,menuOpen:he,setMenuOpen:ge,saveMsg:w}=e,T=(0,C.useMemo)(()=>we(o.definition,o.inputs?.length??0),[o.definition,o.inputs]),E=s?i(s):o.source.type,D=T.inputCount,O=[{id:`overview`,label:i(`templates.overviewTab`)},{id:`flow`,label:i(`templates.flowTab`)},{id:`permissions`,label:i(`templates.permissionsTab`)},{id:`history`,label:i(`templates.historyTab`)}];return(0,A.jsx)(`div`,{className:`flex-1 min-w-0 flex flex-col overflow-y-auto custom-scrollbar`,children:(0,A.jsxs)(`div`,{className:`p-5 space-y-4`,children:[(0,A.jsxs)(`div`,{className:`flex items-start gap-3 flex-wrap`,children:[(0,A.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,A.jsx)(`h2`,{className:`text-lg font-semibold text-dark-text truncate`,children:o.name}),(0,A.jsxs)(S,{variant:`info`,children:[`v`,o.version]}),o.status===`degraded`&&(0,A.jsxs)(S,{variant:`warning`,children:[`⚠ `,i(`templates.degradedBadge`)]}),(0,A.jsx)(S,{variant:o.source.type===`saved`?`success`:`default`,children:E})]}),o.description&&(0,A.jsx)(`p`,{className:`text-sm text-dark-muted mt-1`,children:o.description})]}),(0,A.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,A.jsx)(x,{variant:`accent`,leftIcon:(0,A.jsx)(re,{className:`w-4 h-4`}),onClick:p,children:i(`templates.replay`)}),(0,A.jsx)(x,{variant:`secondary`,leftIcon:(0,A.jsx)(a,{className:`w-4 h-4`}),onClick:ie,children:i(`templates.preflight`)}),(0,A.jsxs)(`button`,{onClick:m,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,A.jsx)(h,{className:`w-4 h-4`}),` `,i(`templates.edit`)]}),(0,A.jsxs)(`div`,{className:`relative`,children:[(0,A.jsx)(`button`,{onClick:()=>ge(!he),className:`p-2 rounded-lg text-dark-muted hover:bg-dark-hover transition-colors`,"aria-label":i(`templates.more`),children:(0,A.jsx)(r,{className:`w-4 h-4`})}),he&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>ge(!1)}),(0,A.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,A.jsx)(F,{icon:(0,A.jsx)(f,{size:13}),label:i(`templates.exportJson`),onClick:_}),(0,A.jsx)(F,{icon:(0,A.jsx)(ne,{size:13}),label:i(`templates.copyId`),onClick:se}),(0,A.jsx)(F,{icon:(0,A.jsx)(c,{size:13}),label:i(`templates.versionHistory`),onClick:b}),(0,A.jsx)(F,{icon:(0,A.jsx)(n,{size:13}),label:i(`templates.advancedJson`),onClick:v}),(0,A.jsx)(`div`,{className:`border-t border-dark-border my-1`}),(0,A.jsx)(F,{icon:(0,A.jsx)(oe,{size:13}),label:i(`templates.deleteTemplate`),onClick:g,danger:!0})]})]})]})]})]}),(0,A.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[o.category&&(0,A.jsxs)(S,{size:`sm`,variant:`info`,className:`gap-1`,children:[(0,A.jsx)(te,{size:11}),o.category]}),(0,A.jsxs)(S,{size:`sm`,variant:T.readonly?`success`:`warning`,className:`gap-1`,children:[T.readonly?(0,A.jsx)(l,{size:11}):(0,A.jsx)(ce,{size:11}),T.readonly?`${i(`templates.readonly`)} · ${i(`templates.riskLow`)}`:`${i(`templates.writable`)} · ${i(`templates.riskMedium`)}`]}),(0,A.jsxs)(S,{size:`sm`,variant:`default`,className:`gap-1`,children:[(0,A.jsx)(ae,{size:11}),T.maxParallel>1?i(`templates.parallelCount`,{n:T.nodeCount,p:T.maxParallel}):i(`templates.stepCount`,{n:T.nodeCount})]}),(0,A.jsxs)(S,{size:`sm`,variant:`default`,className:`gap-1`,children:[(0,A.jsx)(u,{size:11}),D>0?i(`templates.confirmCount`,{n:D}):i(`templates.confirmCountNone`)]}),w&&(0,A.jsx)(`span`,{className:`text-xs text-dark-muted`,children:w})]}),(0,A.jsxs)(`div`,{className:`flex items-center gap-1 border-b border-dark-border pb-1.5`,children:[O.map(e=>(0,A.jsx)(`button`,{onClick:()=>ee(e.id),className:y(`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,A.jsx)(`div`,{className:`ms-auto flex items-center gap-1`,children:(0,A.jsx)(`button`,{onClick:me,className:`p-1.5 rounded-md text-dark-muted hover:text-dark-text hover:bg-dark-hover`,title:i(`templates.refresh`),children:(0,A.jsx)(t,{className:`w-3.5 h-3.5`})})})]}),(0,A.jsxs)(`div`,{children:[d===`overview`&&(0,A.jsx)(I,{t:i,detail:o,meta:T,inputCount:D}),d===`flow`&&(0,A.jsx)(Ae,{definition:o.definition}),d===`permissions`&&(0,A.jsx)(P,{definition:o.definition}),d===`history`&&(0,A.jsx)(L,{t:i,versions:ue,currentVersion:o.version,historyView:de,onLoadVersion:fe,onClearHistory:pe,onReRecord:le})]})]})})}function F({icon:e,label:t,onClick:n,danger:r}){return(0,A.jsxs)(`button`,{onClick:n,className:y(`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 I({t:e,detail:t,meta:n,inputCount:r}){let i=t.inputs??[],a=t.outputs??[];return(0,A.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,A.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-2`,children:e(`templates.inputsNeeded`)}),r>0?(0,A.jsx)(`ul`,{className:`space-y-1.5`,children:i.map(e=>(0,A.jsxs)(`li`,{className:`flex items-center justify-between gap-2 text-xs`,children:[(0,A.jsx)(`span`,{className:`text-dark-text truncate`,children:e.label||e.name}),e.required&&(0,A.jsx)(`span`,{className:`text-accent-red shrink-0`,children:`*`})]},e.name))}):(0,A.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:e(`templates.confirmCountNone`)})]}),(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,A.jsx)(`div`,{className:`text-meta uppercase tracking-wider text-dark-muted/70 mb-2`,children:e(`templates.outputsProduced`)}),a.length>0?(0,A.jsx)(`ul`,{className:`space-y-1.5`,children:a.map(e=>(0,A.jsxs)(`li`,{className:`flex items-center justify-between gap-2 text-xs`,children:[(0,A.jsx)(`span`,{className:`text-dark-text truncate`,children:e.label||e.name}),e.kind&&(0,A.jsx)(S,{size:`sm`,children:e.kind})]},e.name))}):(0,A.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:e(`templates.noOutputsDeclared`)})]}),(0,A.jsxs)(`div`,{className:`col-span-2 text-meta text-dark-muted/70`,children:[e(`templates.replayNewSession`),` · `,n.readonly?e(`templates.readonlyHint`):e(`templates.writable`)]})]})}function L({t:e,versions:n,currentVersion:r,historyView:i,onLoadVersion:a,onClearHistory:o,onReRecord:s}){return(0,A.jsxs)(`div`,{className:`space-y-2`,children:[n.length===0&&(0,A.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:e(`templates.noVersions`)}),[...n].reverse().map(n=>(0,A.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-dark-border px-3 py-2`,children:[(0,A.jsxs)(S,{variant:n===r?`success`:`default`,children:[`v`,n]}),n===r&&(0,A.jsx)(`span`,{className:`text-meta text-accent-green`,children:e(`templates.statusReady`)}),(0,A.jsx)(`span`,{className:`text-meta text-dark-muted/60`,children:n===r?e(`templates.reRecordHint`,{v:n}):``}),(0,A.jsxs)(`div`,{className:`ms-auto flex items-center gap-1.5`,children:[(0,A.jsx)(`button`,{onClick:()=>a(n),className:`text-meta px-2 py-1 rounded border border-dark-border hover:border-accent-blue/50 transition-colors`,children:e(`templates.compare`)}),n!==r&&(0,A.jsxs)(`button`,{onClick:()=>s(n),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,A.jsx)(t,{className:`w-3 h-3`}),` `,e(`templates.reRecordAsNew`)]})]})]},n)),i&&(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border p-3`,children:[(0,A.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,A.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[e(`templates.viewingVersion`),` v`,i.version]}),(0,A.jsx)(`button`,{onClick:o,className:`text-meta text-dark-muted hover:text-dark-text`,children:e(`templates.cancel`)})]}),(0,A.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`,children:JSON.stringify({version:i.version,inputs:i.inputs,definition:i.definition},null,2)})]})]})}var R={explore:`info`,plan:`default`,execute:`success`,verify:`warning`,summarize:`info`,generic:`default`},z={explore:`templates.roleExplore`,plan:`templates.rolePlan`,execute:`templates.roleExecute`,verify:`templates.roleVerify`,summarize:`templates.roleSummarize`,generic:`templates.roleGeneric`};function B(e){let t=e.metadata?.role;return typeof t==`string`?t:e.type}function Me(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 Ne(e,t){for(let n of e)t.set(n.id,t.size+1),Array.isArray(n.children)&&n.children.length&&Ne(n.children,t)}function Pe({nodes:e,allById:t,indexById:n}){let{t:r}=v();return(0,A.jsx)(A.Fragment,{children:e.map((i,a)=>{let o=B(i),s=R[o]||`default`,c=De(i),l=z[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,A.jsxs)(`div`,{children:[(0,A.jsxs)(`div`,{className:`flex gap-2.5`,children:[(0,A.jsxs)(`div`,{className:`flex flex-col items-center shrink-0`,children:[(0,A.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,A.jsx)(`span`,{className:`w-px flex-1 bg-dark-border/70 my-0.5`})]}),(0,A.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,A.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,A.jsx)(p,{size:12,className:y(`shrink-0`,o===`verify`?`text-accent-yellow`:o===`explore`?`text-accent-blue`:`text-dark-muted`)}),(0,A.jsx)(`span`,{className:`text-xs font-medium text-dark-text truncate flex-1`,children:i.title}),(0,A.jsx)(S,{size:`sm`,variant:s,children:u})]}),i.description&&(0,A.jsx)(`p`,{className:`px-2.5 pb-1.5 text-meta text-dark-muted leading-relaxed`,children:i.description}),d.length>0&&(0,A.jsxs)(`div`,{className:`px-2.5 pb-2 flex items-center flex-wrap gap-1`,children:[(0,A.jsx)(ae,{size:11,className:`text-dark-muted/60 shrink-0`}),d.map(e=>(0,A.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,A.jsx)(`div`,{className:`ms-3 ps-3 border-s-2 border-dark-border/60`,children:(0,A.jsx)(Pe,{nodes:i.children,allById:t,indexById:n})})]},i.id)})})}function Fe({definition:e}){let{t}=v(),n=(0,C.useMemo)(()=>Me(e.nodes||[]),[e.nodes]),r=(0,C.useMemo)(()=>new Map(V(e.nodes||[]).map(e=>[e.id,e])),[e.nodes]),i=(0,C.useMemo)(()=>{let t=new Map;return Ne(e.nodes||[],t),t},[e.nodes]);return n.length===0?(0,A.jsx)(`p`,{className:`text-xs text-dark-muted`,children:t(`templates.noNodes`)}):(0,A.jsx)(`div`,{className:`space-y-0`,children:(0,A.jsx)(Pe,{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 Ie(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 Le(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 Re(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:Le(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 ze=[`task`,`agent`,`parallel`,`pipeline`,`phase`,`condition`,`loop`,`checkpoint`],G=new Set([`parallel`,`pipeline`,`phase`,`condition`,`loop`,`checkpoint`]),Be=[`string`,`number`,`select`,`boolean`,`folder`,`connector`];function K(e){return Te[e]??(e===`agent`?`templates.editorTypeAgent`:`templates.editorTypeTask`)}function Ve(e,t){return G.has(t)?e(Te[t]??t):e(K(t))}function q(e){let{t}=v(),{node:n,index:r,depth:i,depOptions:a,definition:o,onChange:s,onRemove:c,onAddChild:l,onDepAdd:u,onDepRemove:d}=e,f=n.dependencies??[],ee=Array.isArray(n.children)&&n.children.length>0,te=G.has(n.type);return(0,A.jsxs)(`div`,{className:He(i)+` rounded-lg border border-dark-border bg-dark-bg/60`,"data-node-id":n.id,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,A.jsx)(`span`,{className:`text-badge text-dark-muted/70 shrink-0 w-4 text-end`,children:r}),(0,A.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,A.jsx)(`span`,{className:`text-badge font-mono text-dark-muted/50 shrink-0 hidden xl:inline`,title:n.id,children:n.id}),(0,A.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:ze.map(e=>(0,A.jsx)(`option`,{value:e,children:Ve(t,e)},e))}),(0,A.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,A.jsx)(oe,{size:12})})]}),(0,A.jsxs)(`div`,{className:`px-2.5 pb-2 space-y-1.5`,children:[(0,A.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,A.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,A.jsx)(ae,{size:11,className:`text-dark-muted/60 shrink-0`}),(0,A.jsx)(`span`,{className:`text-meta text-dark-muted shrink-0`,children:t(`templates.editorDepsLabel`)}),f.length===0&&(0,A.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,A.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,A.jsx)(`button`,{onClick:()=>d(e),className:`hover:text-accent-red`,"aria-label":`${t(`templates.editorDepsRemove`)} ${n?.title||e}`,children:`✕`})]},e)}),(0,A.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,A.jsx)(`option`,{value:``,children:t(`templates.editorDepsAdd`)}),a.filter(e=>!f.includes(e.id)).map(e=>(0,A.jsx)(`option`,{value:e.id,children:e.title||e.id},e.id))]}),(0,A.jsxs)(`label`,{className:`ms-auto inline-flex items-center gap-1 text-meta text-dark-muted`,children:[t(`templates.editorPriority`),(0,A.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`})]})]})]}),(te||ee)&&(0,A.jsxs)(`div`,{className:`ms-3 ps-3 pb-2 border-s-2 border-dark-border/60`,children:[ee&&(0,A.jsx)(J,{nodes:n.children,depth:i+1,definition:o,onChangeNodes:e=>s({children:e})}),(0,A.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,A.jsx)(_,{size:11}),` `,t(`templates.editorAddChild`)]})]})]})}function He(e){return e>0?`ms-3`:``}function J({nodes:e,depth:t,definition:n,onChangeNodes:r}){let{t:i}=v(),a=(0,C.useMemo)(()=>V(n.nodes??[]),[n.nodes]);return(0,A.jsxs)(`div`,{className:`space-y-2`,children:[e.map((i,o)=>{let s=Ie(n.nodes??[],i.id),c=a.filter(e=>!s.has(e.id));return(0,A.jsx)(`div`,{children:(0,A.jsx)(q,{node:i,index:o+1,depth:t,depOptions:c,definition:n,onChange:t=>r(U(e,i.id,t)),onRemove:()=>r(Re(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,A.jsx)(`p`,{className:`text-meta text-dark-muted/50`,children:i(`templates.editorEmptyLevel`)})]})}function Ue({inputs:e,onChange:t}){let{t:n}=v(),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,A.jsxs)(`div`,{className:`border border-dark-border rounded-lg overflow-hidden`,children:[(0,A.jsxs)(`div`,{className:`px-3 py-2 bg-dark-surface border-b border-dark-border flex items-center gap-2`,children:[(0,A.jsx)(`span`,{className:`text-xs font-semibold text-dark-text`,children:n(`templates.editorInputsTitle`)}),(0,A.jsx)(`span`,{className:`ms-auto text-badge text-dark-muted`,children:n(`templates.confirmCount`,{n:e.length})})]}),(0,A.jsxs)(`div`,{className:`p-2.5 space-y-1.5`,children:[e.length===0&&(0,A.jsx)(`p`,{className:`text-meta text-dark-muted/50`,children:n(`templates.editorInputsEmpty`)}),e.map((e,t)=>(0,A.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,A.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,A.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,A.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:Be.map(e=>(0,A.jsx)(`option`,{value:e,children:e},e))}),(0,A.jsxs)(`label`,{className:`inline-flex items-center gap-1 text-meta text-dark-muted shrink-0`,children:[(0,A.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,A.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,A.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,A.jsx)(oe,{size:12})})]},t)),(0,A.jsxs)(`button`,{onClick:i,className:`inline-flex items-center gap-1 text-meta text-dark-muted hover:text-accent-blue transition-colors`,children:[(0,A.jsx)(_,{size:11}),` `,n(`templates.editorInputsAdd`)]})]})]})}function We({definition:e,inputs:t,issues:n,onDefinitionChange:r,onInputsChange:i}){let{t:a}=v(),o=e.nodes??[],s=(0,C.useMemo)(()=>V(o),[o]),c=t=>{r({...e,nodes:t,updatedAt:new Date().toISOString()})};return(0,A.jsxs)(`div`,{className:`grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4 items-start`,children:[(0,A.jsxs)(`section`,{className:`border border-dark-border rounded-lg overflow-hidden`,children:[(0,A.jsxs)(`div`,{className:`px-3 py-2 bg-dark-surface border-b border-dark-border flex items-center gap-2`,children:[(0,A.jsx)(te,{size:13,className:`text-accent-blue shrink-0`}),(0,A.jsx)(`span`,{className:`text-xs font-semibold text-dark-text`,children:a(`templates.editorNodesTitle`)}),(0,A.jsx)(`span`,{className:`text-badge text-dark-muted`,children:a(`templates.editorNodeCount`,{n:s.length})}),(0,A.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,A.jsx)(_,{size:11}),` `,a(`templates.editorAddNode`)]})]}),(0,A.jsxs)(`div`,{className:`p-2.5 space-y-2`,children:[(0,A.jsx)(J,{nodes:o,depth:0,definition:e,onChangeNodes:c}),o.length===0&&(0,A.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,A.jsx)(_,{size:12,className:`inline me-1`}),` `,a(`templates.editorAddNode`)]})]})]}),(0,A.jsxs)(`section`,{className:`space-y-3 min-w-0`,children:[(0,A.jsxs)(`div`,{className:`border border-dark-border rounded-lg overflow-hidden`,children:[(0,A.jsx)(`div`,{className:`px-3 py-2 bg-dark-surface border-b border-dark-border`,children:(0,A.jsx)(`span`,{className:`text-xs font-semibold text-dark-text`,children:a(`templates.editorPreviewTitle`)})}),(0,A.jsx)(`div`,{className:`p-2.5`,children:(0,A.jsx)(Fe,{definition:e})})]}),n.length>0&&(0,A.jsxs)(`div`,{className:`rounded-lg border border-accent-yellow/40 bg-accent-yellow/5 px-3 py-2 space-y-1`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs text-accent-yellow font-medium`,children:[(0,A.jsx)(m,{size:13}),` `,a(`templates.editorValidationIssues`)]}),n.map((e,t)=>(0,A.jsx)(`div`,{className:`text-meta text-dark-muted`,children:a(e.key,e.params)},t))]}),n.length===0&&s.length>0&&(0,A.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,A.jsx)(S,{size:`sm`,variant:`success`,children:a(`templates.editorValidationOk`)}),(0,A.jsx)(`span`,{className:`text-meta text-dark-muted/60`,children:a(`templates.editorAdvancedSyncHint`)})]}),(0,A.jsx)(Ue,{inputs:t,onChange:i})]})]})}var Ge=/<<input:([A-Za-z][A-Za-z0-9_]*)>>/g;function Ke(e){let t=[];for(let n of e)n&&typeof n==`object`&&(t.push(n),Array.isArray(n.children)&&n.children.length&&t.push(...Ke(n.children)));return t}function qe(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 Je(e,t){let n=[];if(!e||!Array.isArray(e.nodes)||e.nodes.length===0)return n.push({key:`templates.validateNoNodes`}),n;let r=Ke(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}});qe(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(Ge)){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 Ye(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 Xe(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 Ze({t:e,detail:t,workspaceDir:n}){let r=(0,C.useMemo)(()=>we(t.definition,t.inputs?.length??0),[t.definition,t.inputs]);return r.nodeCount===0?null:(0,A.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-bg/50 px-3 py-2.5 space-y-1.5`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap text-xs`,children:[(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1 font-medium text-dark-text`,children:[(0,A.jsx)(l,{size:13,className:r.readonly?`text-accent-green`:`text-accent-yellow`}),r.readonly?e(`templates.readonly`):e(`templates.writable`),` · `,r.readonly?e(`templates.riskLow`):e(`templates.riskMedium`)]}),(0,A.jsx)(`span`,{className:`text-dark-muted`,children:r.maxParallel>1?e(`templates.parallelCount`,{n:r.nodeCount,p:r.maxParallel}):e(`templates.stepCount`,{n:r.nodeCount})}),(0,A.jsx)(`span`,{className:`text-dark-muted`,children:r.inputCount>0?e(`templates.confirmCount`,{n:r.inputCount}):e(`templates.confirmCountNone`)})]}),n&&!r.readonly&&(0,A.jsxs)(`div`,{className:`text-meta text-dark-muted/70 truncate`,title:n,children:[e(`templates.writable`),`: `,n]})]})}var Qe={saved:`templates.sourceSaved`,script:`templates.sourceScript`,handwritten:`templates.sourceHandwritten`};function $e({onLaunch:e,workspaceDir:r}){let{t:d}=v(),[f,ne]=(0,C.useState)([]),[p,m]=(0,C.useState)(null),[h,g]=(0,C.useState)(null),[se,le]=(0,C.useState)(!1),[w,T]=(0,C.useState)(``),[E,D]=(0,C.useState)(``),[O,_e]=(0,C.useState)(X),[ve,ye]=(0,C.useState)(``),[k,be]=(0,C.useState)(``),[xe,Se]=(0,C.useState)(``),[Ce,we]=(0,C.useState)(``),[Te,Ee]=(0,C.useState)(``),[De,j]=(0,C.useState)(!1),[Oe,M]=(0,C.useState)(``),[ke,Ae]=(0,C.useState)(!1),[N,P]=(0,C.useState)([]),[F,I]=(0,C.useState)(!1),[L,R]=(0,C.useState)(null),[z,B]=(0,C.useState)(null),[Me,V]=(0,C.useState)(null),[Ne,Pe]=(0,C.useState)(!1),[Fe,H]=(0,C.useState)(!1),[Ie,Le]=(0,C.useState)(null),[U,Re]=(0,C.useState)(!1),W=(0,C.useRef)(p);W.current=p;let[ze,G]=(0,C.useState)(!0),[Be,K]=(0,C.useState)(`overview`),[Ve,q]=(0,C.useState)(!1),[He,J]=(0,C.useState)([]),[Ue,Ge]=(0,C.useState)(null),Ke=()=>{h&&(J(h.inputs??[]),Ge(Y(h.definition))),G(!1)},qe=e=>{Ge(e),Ee(JSON.stringify(e,null,2)),j(!0),M(``)},$e=e=>{J(e),we(JSON.stringify(e,null,2)),j(!0),M(``)},et=e=>{try{let t=JSON.parse(e);t&&typeof t==`object`&&Array.isArray(t.nodes)&&Ge(Y(t))}catch{}},tt=e=>{try{let t=JSON.parse(e);Array.isArray(t)&&J(t)}catch{}},nt=(0,C.useMemo)(()=>Je(Ue??void 0,He),[Ue,He]),[rt,it]=(0,C.useState)(!1),[at,ot]=(0,C.useState)(``),[st,ct]=(0,C.useState)(``),[lt,ut]=(0,C.useState)(`general`),[dt,ft]=(0,C.useState)(`[]`),[pt,mt]=(0,C.useState)(()=>JSON.stringify(Ye(d(`templates.starterTitle`),d(`templates.starterNodeTitle`),d(`templates.starterNodeDesc`)),null,2)),[ht,Z]=(0,C.useState)(``),[gt,_t]=(0,C.useState)([]),[vt,yt]=(0,C.useState)(null),[bt,xt]=(0,C.useState)(!1),[St,Ct]=(0,C.useState)(!1),[wt,Tt]=(0,C.useState)(``),[Et,Dt]=(0,C.useState)(!1),[Ot,Q]=(0,C.useState)(``),kt=()=>{let e=Ye(d(`templates.starterTitle`),d(`templates.starterNodeTitle`),d(`templates.starterNodeDesc`));ot(``),ct(``),ut(`general`),ft(`[]`),mt(JSON.stringify(e,null,2)),yt(e),_t([]),xt(!1),Z(``),Ct(!1),Tt(``),Dt(!1),Q(``),it(!0)},At=async()=>{if(!wt.trim())Q(d(`templates.aiPromptRequired`));else{Dt(!0),Q(``);try{let e=await b.workflows.synthesize(wt.trim());if(e.success&&e.data){let t=Y(e.data);ot(e.data.title||``),ct(e.data.description||``),yt(t),_t([]),ft(`[]`),mt(JSON.stringify(t,null,2)),xt(!1),Ct(!1),Z(``)}else Q(e.error||d(`templates.aiDraftFailed`))}catch(e){Q(e instanceof Error?e.message:String(e))}finally{Dt(!1)}}},jt=e=>{yt(e),mt(JSON.stringify(e,null,2)),Z(``)},Mt=e=>{_t(e),ft(JSON.stringify(e,null,2))},Nt=e=>{try{let t=JSON.parse(e);t&&typeof t==`object`&&Array.isArray(t.nodes)&&yt(Y(t))}catch{}},Pt=e=>{try{let t=JSON.parse(e);Array.isArray(t)&&_t(t)}catch{}},Ft=(0,C.useMemo)(()=>Je(vt??void 0,gt),[vt,gt]),It=async()=>{if(!at.trim()){Z(d(`templates.nameRequired`));return}let e,t;try{e=JSON.parse(dt),t=JSON.parse(pt)}catch(e){Z(d(`templates.jsonParseFailed`,{error:e instanceof Error?e.message:String(e)}));return}if(!t||typeof t!=`object`||!Array.isArray(t.nodes)){Z(d(`templates.invalidDefinition`));return}let n=Je(t,Array.isArray(e)?e:[]);if(n.length>0){Z(n.map(e=>d(e.key,e.params)).join(`;`));return}Z(``);let r=await b.templates.create({name:at.trim(),description:st.trim(),category:lt.trim()||`general`,inputs:Array.isArray(e)?e:[],definition:Y(t),source:{type:`handwritten`}});r.success&&r.data?(it(!1),m(r.data.id),$()):Z(r.error||d(`templates.createFailed`))},$=(0,C.useCallback)(async()=>{let e=await b.templates.list();e.success&&e.data&&(ne(e.data),p&&!e.data.some(e=>e.id===p)&&(m(null),g(null)))},[p]);(0,C.useEffect)(()=>{$()},[]),(0,C.useEffect)(()=>{if(!p){g(null);return}let e=!1;return le(!0),b.templates.get(p).then(t=>{e||(t.success&&t.data?(g(t.data),ye(t.data.name),be(t.data.description),Se(t.data.category),we(JSON.stringify(t.data.inputs,null,2)),Ee(JSON.stringify(t.data.definition,null,2)),J(t.data.inputs??[]),Ge(Y(t.data.definition)),j(!1),M(``),I(!1),R(null),b.templates.versions(p).then(t=>{!e&&t.success&&t.data&&P(t.data)})):T(t.error||d(`templates.loadFailed`)))}).catch(()=>T(d(`templates.loadFailed`))).finally(()=>le(!1)),()=>{e=!0}},[p]);let Lt=(0,C.useCallback)((e,t)=>d(e,{defaultValue:t}),[d]),Rt=(0,C.useMemo)(()=>f.map(e=>he(e,Lt)),[f,Lt]),zt=(0,C.useMemo)(()=>{let e=new Set;for(let t of Rt)t.builtin||e.add(t.category||d(`templates.uncategorized`));return[X,...[...e].sort()]},[Rt,d]),Bt=(0,C.useMemo)(()=>{let e=E.trim().toLowerCase();return Rt.filter(t=>O!==X&&pe(t,Lt)!==O?!1:!e||`${t.name} ${t.description} ${t.category}`.toLowerCase().includes(e))},[Rt,E,O,Lt]),Vt=(0,C.useMemo)(()=>zt.filter(e=>e!==X),[zt]),Ht=(0,C.useMemo)(()=>{let{userGroups:e,builtin:t}=ge(Bt,e=>d(e));return t.length===0?e:[...e,[d(`templates.builtinGroup`),t]]},[Bt,d]),Ut=e=>{m(e),G(!0),Ae(!1),I(!1),R(null),V(null),B(null),q(!1),j(!1),M(``),K(`overview`)},Wt=e=>{e!==p&&(!ze&&De?Le(e):Ut(e))},Gt=e=>t=>{e(t),j(!0),M(``)},Kt=async()=>{if(!p||!h||U)return;let e=p,t,n;try{t=JSON.parse(Ce),n=JSON.parse(Te)}catch(e){M(d(`templates.jsonParseFailed`,{error:e instanceof Error?e.message:String(e)}));return}let r=Je(n,Array.isArray(t)?t:[]);if(r.length>0)M(r.map(e=>d(e.key,e.params)).join(`;`));else{M(``),Re(!0);try{let r=await b.templates.update(e,{name:ve,description:k,category:xe,inputs:Array.isArray(t)?t:[],definition:Y(n)});if(W.current!==e)return;r.success&&r.data?(g(r.data),j(!1),M(d(`templates.savedVersion`,{version:r.data.version})),$(),b.templates.versions(e).then(t=>{W.current===e&&t.success&&t.data&&P(t.data)})):M(r.error||d(`templates.saveFailed`))}finally{Re(!1)}}},qt=async e=>{if(!p)return;let t=p;Pe(!0);try{let n=await b.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||d(`templates.renderFailed`)})}catch(e){V({ok:!1,error:e instanceof Error?e.message:d(`templates.renderFailed`)})}finally{Pe(!1)}},Jt=t=>{h&&(e(h,t),B(null))},Yt=e=>{h&&(V(null),B({mode:e}))},Xt=async e=>{if(!p)return;let t=await b.templates.getVersion(p,e);t.success&&t.data&&R(t.data)};return(0,A.jsxs)(`div`,{className:`flex flex-1 min-h-0 bg-dark-bg`,children:[(0,A.jsxs)(`div`,{className:`w-80 shrink-0 border-e border-dark-border overflow-y-auto custom-scrollbar p-3`,children:[(0,A.jsxs)(`div`,{className:`flex items-center justify-between mb-2 px-1`,children:[(0,A.jsx)(`span`,{className:`text-xs uppercase tracking-wider text-dark-muted font-medium`,children:d(`templates.workflowLibraryTitle`)}),(0,A.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,A.jsxs)(`button`,{onClick:kt,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:d(`templates.manualCreateTitle`),children:[(0,A.jsx)(_,{className:`w-4 h-4`}),(0,A.jsx)(`span`,{className:`hidden xl:inline`,children:d(`templates.manualCreate`)})]}),(0,A.jsx)(`button`,{onClick:()=>{T(``),$()},className:`p-1.5 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,title:d(`templates.refresh`),children:(0,A.jsx)(t,{className:`w-4 h-4`})})]})]}),(0,A.jsxs)(`div`,{className:`relative mb-2`,children:[(0,A.jsx)(ee,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted/60`}),(0,A.jsx)(`input`,{value:E,onChange:e=>D(e.target.value),placeholder:d(`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,A.jsx)(`div`,{className:`flex items-center gap-1.5 mb-3 flex-wrap`,children:zt.map(e=>(0,A.jsx)(`button`,{onClick:()=>_e(e),className:y(`text-meta px-2 py-0.5 rounded-full border transition-colors`,O===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?d(`templates.filterAll`):e},e))}),w&&(0,A.jsx)(`div`,{className:`text-xs text-accent-red mb-2`,children:w}),Ht.length===0&&!w&&(0,A.jsx)(`div`,{className:`text-xs text-dark-muted px-1 py-4 text-center`,children:d(E||O!==X?`templates.noMatchTemplates`:`templates.emptyTemplates`)}),Ht.map(([e,t])=>(0,A.jsxs)(`div`,{className:`mb-4`,children:[(0,A.jsx)(`div`,{className:`px-1 mb-1.5 text-badge uppercase tracking-wider text-dark-muted/70`,children:e}),(0,A.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,r=n===`degraded`?`templates.degradedBadge`:n===`draft`?`templates.statusDraft`:n===`deprecated`?`templates.statusDeprecated`:n===`archived`?`templates.statusArchived`:null;return(0,A.jsxs)(`button`,{onClick:()=>Wt(e.id),className:y(`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,A.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,A.jsx)(`span`,{className:`text-sm font-medium truncate`,children:e.name}),(0,A.jsxs)(`span`,{className:`flex items-center gap-1 shrink-0`,children:[r&&(0,A.jsx)(S,{size:`sm`,variant:n===`degraded`?`warning`:`default`,children:d(r)}),(0,A.jsxs)(S,{size:`sm`,variant:`info`,children:[`v`,e.version]})]})]}),e.description&&(0,A.jsx)(`div`,{className:`text-meta text-dark-muted/70 truncate mt-0.5`,children:e.description}),(0,A.jsxs)(`div`,{className:`flex items-center gap-1.5 mt-2 flex-wrap`,children:[e.summary&&(0,A.jsxs)(S,{size:`sm`,variant:e.summary.readonly?`success`:`warning`,className:`gap-1`,children:[e.summary.readonly?(0,A.jsx)(l,{size:10}):(0,A.jsx)(ce,{size:10}),e.summary.readonly?`${d(`templates.readonly`)} · ${d(`templates.riskLow`)}`:`${d(`templates.writable`)} · ${d(`templates.riskMedium`)}`]}),(0,A.jsx)(S,{size:`sm`,variant:`default`,children:e.inputs.length>0?d(`templates.confirmCount`,{n:e.inputs.length}):d(`templates.confirmCountNone`)}),(0,A.jsxs)(`span`,{className:`ms-auto inline-flex items-center gap-0.5 text-badge text-accent-blue`,children:[d(t?`templates.viewing`:`templates.view`),!t&&(0,A.jsx)(u,{size:10})]})]})]},e.id)})})]},e))]}),(()=>{if(!p)return(0,A.jsx)(`div`,{className:`flex-1 flex items-center justify-center text-sm text-dark-muted`,children:(0,A.jsxs)(`div`,{className:`text-center px-8`,children:[(0,A.jsx)(te,{size:36,className:`mx-auto mb-2 opacity-30 text-dark-muted`}),(0,A.jsx)(`p`,{children:d(`templates.selectTemplateHint`)}),(0,A.jsx)(`p`,{className:`text-xs text-dark-muted/60 mt-1`,children:d(`templates.workflowLibraryHint`)})]})});if(se||!h)return(0,A.jsxs)(`div`,{className:`flex-1 flex items-center justify-center text-dark-muted`,children:[(0,A.jsx)(i,{className:`w-4 h-4 animate-spin me-2`}),` `,d(`templates.loading`)]});let e=h.definition?.nodes?.length??0,r=h.inputs?.length??0,s=Qe[h.source.type];return ze?(0,A.jsx)(je,{t:d,detail:he(h,Lt),nodeCount:e,inputCount:r,sourceLabelKey:s,detailTab:Be,onTabChange:K,onReplay:()=>{B({mode:`launch`}),q(!1)},onPreflight:()=>{B({mode:`preview`}),q(!1)},onEdit:()=>{Ke(),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),M(d(`templates.copied`))}catch{}},onToggleAdvanced:()=>{Ke(),Ae(!0),q(!1)},onToggleVersions:()=>{K(`history`),q(!1),I(!1)},onReRecord:async e=>{let t=await b.templates.getVersion(p,e);if(t.success&&t.data){let e=t.data,n=await b.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`),$(),b.templates.versions(p).then(e=>{e.success&&e.data&&P(e.data)}))}},versions:N,historyView:L,onLoadVersion:Xt,onClearHistory:()=>R(null),onRefresh:$,menuOpen:Ve,setMenuOpen:q,saveMsg:Oe}):(0,A.jsx)(`div`,{className:`flex-1 min-w-0 flex flex-col overflow-y-auto custom-scrollbar`,children:(0,A.jsxs)(`div`,{className:`p-5 space-y-4`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,A.jsxs)(`button`,{onClick:()=>{G(!0),j(!1),Ae(!1),I(!1)},className:`inline-flex items-center gap-1 text-xs text-dark-muted hover:text-dark-text transition-colors shrink-0`,children:[`← `,d(`templates.backToView`)]}),(0,A.jsx)(`input`,{value:ve,onChange:e=>Gt(ye)(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,A.jsxs)(S,{variant:`info`,children:[`v`,h.version]}),(0,A.jsx)(S,{variant:h.source.type===`saved`?`success`:`default`,children:s?d(s):h.source.type}),(0,A.jsx)(`button`,{onClick:()=>H(!0),className:`p-2 rounded-lg text-dark-muted hover:text-accent-red hover:bg-dark-hover transition-colors`,title:d(`templates.deleteTemplate`),children:(0,A.jsx)(oe,{className:`w-4 h-4`})})]}),(0,A.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsxs)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:[d(`templates.categoryLabel`),(0,A.jsx)(`span`,{className:`text-badge text-dark-muted/60 ms-1.5`,children:d(`templates.categoryCreateHint`)})]}),(0,A.jsx)(`input`,{value:xe,onChange:e=>Gt(Se)(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,A.jsx)(`datalist`,{id:`template-category-suggestions`,children:Vt.map(e=>(0,A.jsx)(`option`,{value:e},e))})]}),(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.descriptionLabel`)}),(0,A.jsx)(`input`,{value:k,onChange:e=>Gt(be)(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,A.jsxs)(`div`,{className:`flex items-center gap-4 flex-wrap text-xs text-dark-muted`,children:[(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,A.jsx)(ae,{size:13,className:`text-accent-blue`}),d(`templates.nodeCount`,{n:e})]}),(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,A.jsx)(u,{size:13,className:`text-accent-green`}),d(`templates.topologyHint`)]}),r>0&&(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,A.jsx)(n,{size:13,className:`text-accent-yellow`}),d(`templates.inputCount`,{n:r})]}),(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,A.jsx)(ie,{size:13,className:`text-dark-muted/60`}),new Date(h.updatedAt).toLocaleString()]})]}),Ue&&(0,A.jsx)(We,{definition:Ue,inputs:He,issues:nt,onDefinitionChange:qe,onInputsChange:$e}),(0,A.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,A.jsx)(x,{variant:`accent`,leftIcon:(0,A.jsx)(re,{className:`w-4 h-4`}),onClick:()=>Yt(`launch`),children:d(`templates.launchWithTemplate`)}),(0,A.jsxs)(`button`,{onClick:()=>Yt(`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,A.jsx)(a,{className:`w-4 h-4`}),` `,d(`templates.testRun`)]}),(0,A.jsxs)(`button`,{onClick:()=>I(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,A.jsx)(c,{className:`w-4 h-4`}),` `,d(`templates.versionHistory`)]}),(0,A.jsx)(x,{variant:`accent`,leftIcon:(0,A.jsx)(o,{className:`w-4 h-4`}),onClick:Kt,loading:U,disabled:!De||nt.length>0,title:nt.length>0?d(`templates.editorValidationIssues`):void 0,children:d(`templates.saveChanges`)}),(0,A.jsxs)(`button`,{onClick:()=>Ae(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,A.jsx)(n,{className:`w-4 h-4`}),` `,d(`templates.advancedJson`)]}),(0,A.jsx)(`button`,{onClick:$,className:`p-2 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,title:d(`templates.refresh`),children:(0,A.jsx)(t,{className:`w-4 h-4`})}),Oe&&(0,A.jsx)(`span`,{className:`text-xs text-dark-muted`,children:Oe})]}),ke&&(0,A.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 space-y-3`,children:[(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.inputsSchemaLabel`)}),(0,A.jsx)(`textarea`,{value:Ce,onChange:e=>{Gt(we)(e.target.value),tt(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,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.definitionLabel`)}),(0,A.jsx)(`textarea`,{value:Te,onChange:e=>{Gt(Ee)(e.target.value),et(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,A.jsx)(`p`,{className:`text-meta text-dark-muted/60`,children:d(`templates.editorAdvancedSyncHint`)})]}),F&&(0,A.jsxs)(`div`,{className:`border border-dark-border rounded-lg p-3 space-y-1.5`,children:[(0,A.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:d(`templates.versionSnapshotLabel`)}),N.length===0&&(0,A.jsx)(`div`,{className:`text-xs text-dark-muted/60`,children:d(`templates.noVersions`)}),N.map(e=>(0,A.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,A.jsxs)(`button`,{onClick:()=>Xt(e),className:`text-xs px-2 py-1 rounded border border-dark-border hover:border-accent-blue/50 transition-colors`,children:[`v`,e]}),L&&L.version===e&&(0,A.jsx)(`span`,{className:`text-xs text-dark-muted/60`,children:d(`templates.viewingVersion`)})]},e)),L&&(0,A.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:L.version,inputs:L.inputs,definition:L.definition},null,2)})]})]})})})(),z&&h&&(0,A.jsxs)(fe,{isOpen:!0,onClose:()=>B(null),title:z.mode===`launch`?d(`templates.replayDrawerTitle`,{name:h.name}):d(`templates.previewModalTitle`,{name:h.name}),size:`md`,children:[(0,A.jsx)(me,{template:h,onCancel:()=>B(null),onSubmit:z.mode===`launch`?Jt:qt,submitLabel:z.mode===`launch`?d(`templates.replayStart`):d(`templates.renderPreview`),submitIcon:z.mode===`launch`?(0,A.jsx)(u,{className:`w-3.5 h-3.5`}):void 0,busy:Ne,autoValues:Xe(h,r),preflightSummary:(0,A.jsx)(Ze,{t:d,detail:h,workspaceDir:r})}),z.mode===`preview`&&Me&&(0,A.jsx)(`div`,{className:`mt-4`,children:Me.ok?(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`div`,{className:`text-xs text-accent-green mb-1.5`,children:d(`templates.renderSuccess`)}),(0,A.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:Me.json})]}):(0,A.jsx)(`div`,{className:`text-xs text-accent-red`,children:Me.error})})]}),(0,A.jsx)(ue,{isOpen:rt,onClose:()=>it(!1),title:d(`templates.newTemplate`),size:`lg`,children:(0,A.jsxs)(`div`,{className:`space-y-4`,children:[(0,A.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.nameLabel`)}),(0,A.jsx)(`input`,{value:at,onChange:e=>ot(e.target.value),placeholder:d(`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,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.categoryField`)}),(0,A.jsx)(`input`,{value:lt,onChange:e=>ut(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,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.descriptionField`)}),(0,A.jsx)(`input`,{value:st,onChange:e=>ct(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,A.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,A.jsxs)(`button`,{type:`button`,onClick:()=>{Ct(!0),Q(``)},className:y(`px-3 py-1.5 rounded-lg border text-xs transition-colors inline-flex items-center gap-1.5`,St?`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,A.jsx)(s,{size:12}),` `,d(`templates.aiDraftTab`)]}),(0,A.jsxs)(`button`,{type:`button`,onClick:()=>Ct(!1),className:y(`px-3 py-1.5 rounded-lg border text-xs transition-colors inline-flex items-center gap-1.5`,St?`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,A.jsx)(n,{size:12}),` `,d(`templates.editorManualTab`)]})]}),St?(0,A.jsxs)(`div`,{className:`space-y-2`,children:[(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.aiPromptLabel`)}),(0,A.jsx)(`textarea`,{value:wt,onChange:e=>Tt(e.target.value),rows:4,spellCheck:!1,placeholder:d(`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,A.jsx)(x,{variant:`accent`,onClick:()=>void At(),loading:Et,leftIcon:Et?void 0:(0,A.jsx)(s,{className:`w-4 h-4`}),children:d(Et?`templates.aiWorking`:`templates.generateWorkflow`)}),Et&&(0,A.jsx)(`div`,{className:`text-xs text-dark-muted`,children:d(`templates.aiTimeHint`)}),Ot&&(0,A.jsx)(`div`,{className:`text-xs text-accent-red`,children:Ot})]}):(0,A.jsxs)(A.Fragment,{children:[vt&&(0,A.jsx)(We,{definition:vt,inputs:gt,issues:Ft,onDefinitionChange:jt,onInputsChange:Mt}),(0,A.jsx)(`div`,{children:(0,A.jsxs)(`button`,{type:`button`,onClick:()=>xt(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,A.jsx)(n,{size:12}),` `,d(`templates.advancedJson`)]})}),bt&&(0,A.jsxs)(`div`,{className:`space-y-3`,children:[(0,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.inputsSchemaLabel`)}),(0,A.jsx)(`textarea`,{value:dt,onChange:e=>{ft(e.target.value),Pt(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,A.jsxs)(`label`,{className:`block`,children:[(0,A.jsx)(`span`,{className:`text-xs text-dark-muted mb-1 block`,children:d(`templates.definitionLabel`)}),(0,A.jsx)(`textarea`,{value:pt,onChange:e=>{mt(e.target.value),Nt(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,A.jsx)(`p`,{className:`text-meta text-dark-muted/60`,children:d(`templates.editorAdvancedSyncHint`)})]})]}),ht&&(0,A.jsx)(`div`,{className:`text-xs text-accent-red`,children:ht}),(0,A.jsxs)(`div`,{className:`flex justify-end gap-3`,children:[(0,A.jsx)(`button`,{onClick:()=>it(!1),className:`px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors`,children:d(`templates.cancel`)}),(0,A.jsx)(x,{variant:`accent`,onClick:()=>void It(),children:d(`templates.create`)})]})]})}),(0,A.jsx)(de,{isOpen:Fe,onClose:()=>H(!1),onConfirm:async()=>{if(!p)return;let e=p;(await b.templates.remove(e)).success&&W.current===e&&(P([]),I(!1),R(null),V(null),B(null),K(`overview`),G(!0),M(``),j(!1),m(null),H(!1),$())},title:d(`templates.deleteTemplate`),message:d(`templates.deleteConfirm`,{name:h?.name||p||``}),confirmText:d(`templates.delete`),variant:`danger`}),(0,A.jsx)(de,{isOpen:Ie!==null,onClose:()=>Le(null),onConfirm:()=>{let e=Ie;Le(null),e&&Ut(e)},title:d(`templates.discardEditsTitle`),message:d(`templates.discardEditsMessage`,{name:h?.name||p||``}),confirmText:d(`templates.discardEditsConfirm`),variant:`danger`})]})}export{$e as TemplatesTab};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Fn as n,H as r,Ht as i,Rn as a,T as o,Ur as s,W as c,a as l,at as u,br as d,ct as f,gn as p,ht as m,m as h,n as g,nn as _,vr as v,x as y,xr as b,zr as x}from"./icons-BvYhTENi.js";import{t as S}from"./useTranslation-BGmCDuQI.js";import{n as C}from"./state-_ZfNVAsd.js";import{t as w}from"./cn-rx4uumOJ.js";import{C as T,T as E,g as D,r as O,v as k,w as A,y as j}from"./src-49LUQhkG.js";import{$ as M,_ as N,ht as P,mt as ee,t as F}from"./MessageBubble-CV16DZMG.js";import{r as I}from"./api-CCt9DRQm.js";import{I as te}from"./markdown-DAQZeY5V.js";import{n as ne}from"./websocket-C9e3h7VU.js";import{m as L}from"./common-BHXgEvgk.js";var R=400,z=`sessions-changed`;function re(){window.dispatchEvent(new CustomEvent(z))}function ie(e,t={}){let n=t.runChanges??!0,r=-1/0,i=null,a=()=>{let t=Date.now(),n=R-(t-r);n<=0?(r=t,e()):i||=setTimeout(()=>{i=null,r=Date.now(),e()},n)},o=()=>{document.visibilityState===`visible`&&a()};n&&window.addEventListener(z,a),window.addEventListener(`focus`,a),document.addEventListener(`visibilitychange`,o);let s=ne.onOpen(a);return()=>{i&&clearTimeout(i),i=null,n&&window.removeEventListener(z,a),window.removeEventListener(`focus`,a),document.removeEventListener(`visibilitychange`,o),s()}}var B=e(s(),1),V=te(),H=16,ae=2,U=7,oe=2*Math.PI*U,se=(0,B.memo)(function({round:e,maxRounds:t,className:n}){let r=Math.max(0,Math.min(1,t>0?e/t:0));return(0,V.jsxs)(`span`,{className:w(`inline-flex items-center gap-1 shrink-0`,n),children:[(0,V.jsxs)(`svg`,{width:H,height:H,viewBox:`0 0 ${H} ${H}`,"aria-hidden":`true`,className:`shrink-0`,children:[(0,V.jsx)(`circle`,{cx:H/2,cy:H/2,r:U,fill:`none`,strokeWidth:ae,className:`stroke-dark-border`}),(0,V.jsx)(`circle`,{cx:H/2,cy:H/2,r:U,fill:`none`,strokeWidth:ae,strokeLinecap:`round`,strokeDasharray:oe,strokeDashoffset:oe*(1-r),transform:`rotate(-90 ${H/2} ${H/2})`,className:`stroke-accent-blue transition-[stroke-dashoffset] duration-500`})]}),(0,V.jsxs)(`span`,{className:`font-mono text-meta tabular-nums text-dark-muted`,children:[e,`/`,t]})]})}),ce={waiting:`bg-accent-yellow`,review:`bg-accent-blue`,working:`bg-accent-blue`,paused:`bg-accent-yellow`,done:`bg-dark-muted`};function le(e,t){return e===`done`?t===`FAILED`?`bg-accent-red`:t===`CANCELLED`?`bg-dark-muted`:`bg-accent-green`:ce[e]??`bg-dark-muted`}function ue(e,t){return e===`done`?t===`FAILED`?`failed`:t===`CANCELLED`?`erased`:`committed`:`draft`}var de={blocked:`text-accent-yellow`,review:`text-dark-muted`,working:`text-dark-muted`,coordinating:`text-dark-muted`,"claim-blocked":`text-dark-muted`,paused:`text-accent-yellow`,interrupted:`text-accent-yellow`,failed:`text-accent-red`,cancelled:`text-dark-muted`,completed:`text-dark-muted`};function fe(e){return`threads.group.${e}`}function pe(e){return`threads.verb.${e}`}function me(e){return`threads.detail.${e}`}function he(e){return e===`done`}function W(e){return e.slice(0,7)}function ge(e){return/\/(?:pull|pulls)\/(\d+)(?:$|[/?#])/.exec(e??``)?.[1]}function _e(e){if(!e)return[];let t=[];e.branch&&e.commit?t.push(`${e.branch}@${W(e.commit)}`):e.branch?t.push(e.branch):e.commit&&t.push(W(e.commit));let n=ge(e.prUrl);return n?t.push(`PR #${n}`):e.prUrl&&t.push(`PR`),t}function ve(e){return e===`review`||e===`done`}function ye(e,t,n,r){return e===`waiting`||t===`WAITING_COORDINATOR`||t===`BLOCKED_CLAIM`?!1:typeof n==`number`&&typeof r==`number`&&r>0}function be(e,t){if(e!==`done`)return t;let n=t.filter(e=>e.status===`FAILED`);return n.length===0?t:[...n,...t.filter(e=>e.status!==`FAILED`)]}function xe(e){return e.workspaceId?.trim()||`\0unknown-project`}function Se(e){let t=e=>{let t=D.indexOf(e.group);return t===-1?D.length:t};return[...e].sort((e,n)=>t(e)-t(n)||(e.createdAt<n.createdAt?1:e.createdAt>n.createdAt?-1:0))}function Ce(e){let t=new Map;for(let n of e){let e=xe(n),r=t.get(e);r?r.rows.push(n):t.set(e,{key:e,...n.workspaceId?{workspaceId:n.workspaceId}:{},rows:[n]})}let n=e=>e.rows.reduce((e,t)=>{let n=D.indexOf(t.group);return Math.min(e,n===-1?D.length:n)},D.length);for(let e of t.values())e.rows=Se(e.rows);return[...t.values()].sort((e,t)=>n(e)-n(t)||(e.key<t.key?-1:+(e.key>t.key)))}function we(e){return E(e)}var Te=(0,B.memo)(function({thread:e,summary:t,onOpen:n,now:r}){let{t:i}=S(),a=A(e),o=T(e),s=o?i(me(o)):e.group===`working`&&t?.trim()||void 0,c=k(e.createdAt,r),l=ve(e.group)?_e(e.delivery):[],u=ye(e.group,e.status,e.progress?.round,e.progress?.maxRounds),d=ue(e.group,e.status),f=e.title?.trim()||e.alias,p=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:w(`mt-[5px] h-1.5 w-1.5 shrink-0 rounded-full`,le(e.group,e.status)),"aria-hidden":`true`}),(0,V.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`span`,{className:`block truncate text-xs text-dark-text`,children:f}),a&&(0,V.jsx)(`span`,{className:`ui-fold`,"data-collapsed":d===`erased`||void 0,children:(0,V.jsxs)(`span`,{className:`block truncate text-meta`,children:[(0,V.jsx)(`span`,{className:w(`font-medium`,de[a]),children:i(pe(a))}),s&&(0,V.jsx)(`span`,{className:`text-dark-muted`,children:` · ${s}`}),l.map(e=>(0,V.jsx)(`span`,{className:`text-dark-muted`,children:` · ${e}`},e))]})})]}),(0,V.jsxs)(`span`,{className:`flex shrink-0 items-center gap-2 pt-0.5`,children:[u&&e.progress&&(0,V.jsx)(se,{round:e.progress.round??0,maxRounds:e.progress.maxRounds??0}),c&&(0,V.jsx)(`span`,{className:`font-mono text-meta tabular-nums text-dark-muted`,children:c})]})]});return n?(0,V.jsx)(`button`,{type:`button`,onClick:()=>n(e.threadId),"aria-label":i(`threads.openThread`,{alias:e.alias}),title:e.title?.trim()||e.alias,className:w(`ui-gram ui-gram--wash flex w-full items-start gap-2 rounded-lg px-2 py-1.5 text-start transition-colors hover:bg-dark-hover`,N[d]),"data-testid":`thread-row`,children:p}):(0,V.jsx)(`div`,{className:w(`ui-gram ui-gram--wash flex items-start gap-2 rounded-lg px-2 py-1.5`,N[d]),"data-testid":`thread-row`,children:p})}),Ee=6e4;function De(e={}){let t=e.enabled!==!1,n=P(e=>e.rows),r=P(e=>e.stats),i=P(e=>e.progressSummaries),a=P(e=>e.stale),o=P(e=>e.live),s=P(e=>e.loading),c=P(e=>e.lastError),l=P(e=>e.query),u=P(e=>e.setQuery),d=P(e=>e.disabled),f=P(e=>e.refresh);(0,B.useEffect)(()=>{if(!t)return;let e=P.getState();(e.stale||e.lastFetchedAt===0)&&e.refresh()},[t]),(0,B.useEffect)(()=>{t&&a&&P.getState().scheduleRefresh()},[t,a]),(0,B.useEffect)(()=>{if(!t||typeof document>`u`)return;let e=()=>{document.visibilityState===`visible`&&P.getState().refresh()};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[t]);let p=Object.values(n).some(e=>e.group!==`done`);return(0,B.useEffect)(()=>{if(!t||!p)return;let e=setInterval(()=>{(typeof document>`u`||document.visibilityState===`visible`)&&P.getState().refresh()},Ee);return()=>clearInterval(e)},[t,p]),{groups:ee(n),order:D,rows:Object.values(n),stats:r,progressSummaries:i,stale:a,live:o,loading:s,lastError:c,query:l,setQuery:u,disabled:d,refresh:()=>void f()}}var Oe=(0,B.memo)(function({label:e,title:t,rows:n,defaultCollapsed:r=!1,testId:i,progressSummaries:a,now:o,onOpen:s}){let{t:c}=S(),[l,u]=(0,B.useState)(r);if(n.length===0)return null;let f=n.filter(e=>e.status===`FAILED`).length;return(0,V.jsxs)(`section`,{className:`select-none`,"data-testid":i,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>u(e=>!e),"aria-expanded":!l,title:t??c(l?`threads.expandGroup`:`threads.collapseGroup`,{group:e}),className:`flex w-full items-center gap-1.5 rounded-lg px-2 py-1.5 text-start transition-colors hover:bg-dark-hover`,children:[(0,V.jsx)(d,{size:13,className:w(`shrink-0 text-dark-muted transition-transform`,l&&`-rotate-90`),"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`truncate text-xs font-medium text-dark-text`,children:e}),(0,V.jsx)(`span`,{className:`font-mono text-meta tabular-nums text-dark-muted`,children:n.length}),f>0&&(0,V.jsx)(`span`,{className:`font-mono text-meta tabular-nums text-accent-red`,children:f})]}),!l&&(0,V.jsx)(`div`,{className:`space-y-0.5 ps-1`,children:n.map(e=>(0,V.jsx)(Te,{thread:e,summary:a[e.threadId],onOpen:s,now:o},e.threadId))})]})}),ke={open:[],recent:[],loading:!1,stale:!0,live:!1,lastError:null,lastFetchedAt:0,disabled:!1,resolving:{},resolveErrors:{}},Ae=400,G=null;function je(){G!==null&&(clearTimeout(G),G=null)}var K=C()((e,t)=>({...ke,refresh:async()=>{if(!t().loading){e({loading:!0});try{let t=await I.get(`/api/threads/escalations`);if(!t?.success){if(t?.code===`THREADS_DISABLED`){e({disabled:!0,open:[],recent:[],loading:!1,stale:!1,lastError:null,lastFetchedAt:Date.now()});return}throw Error(t?.error||`Escalations query failed`)}e({open:t.data?.open??[],recent:t.data?.recent??[],stale:!1,loading:!1,lastError:null,lastFetchedAt:Date.now(),disabled:!1})}catch(t){e({loading:!1,stale:!0,lastError:t instanceof Error?t.message:String(t),lastFetchedAt:Date.now()})}}},scheduleRefresh:()=>{G===null&&(G=setTimeout(()=>{G=null,t().refresh()},Ae))},resolve:async(n,r,i)=>{if(t().resolving[n])return{ok:!1,error:`already-submitting`};if(!i.trim())return{ok:!1,error:`instruction-required`};e(e=>({resolving:{...e.resolving,[n]:!0}}));try{let a=await I.post(`/api/threads/escalations/${encodeURIComponent(n)}/resolve`,{action:r,instruction:i.trim(),decidedBy:`web-ui`});if(!a?.success){let t=a?.error||`Resolve failed`;return e(e=>({resolving:q(e.resolving,n),resolveErrors:{...e.resolveErrors,[n]:t}})),{ok:!1,error:t}}return e(e=>({resolving:q(e.resolving,n),resolveErrors:q(e.resolveErrors,n)})),t().refresh(),P.getState().scheduleRefresh(),{ok:!0}}finally{t().resolving[n]&&e(e=>({resolving:q(e.resolving,n)}))}},setLive:t=>{e(t?{live:!0}:{live:!1,stale:!0})},reset:()=>{je(),e({...ke})}}));function q(e,t){let n={};for(let[r,i]of Object.entries(e))r!==t&&(n[r]=i);return n}function Me(e={}){let t=e.enabled!==!1,n=K(e=>e.open),r=K(e=>e.recent),i=K(e=>e.loading),a=K(e=>e.lastError),o=K(e=>e.resolving),s=K(e=>e.resolveErrors),c=K(e=>e.disabled),l=K(e=>e.refresh),u=K(e=>e.resolve),d=P(e=>e.stale);return(0,B.useEffect)(()=>{if(!t)return;let e=K.getState();(e.stale||e.lastFetchedAt===0)&&e.refresh()},[t]),(0,B.useEffect)(()=>{t&&d&&K.getState().scheduleRefresh()},[t,d]),(0,B.useEffect)(()=>{if(!t||typeof document>`u`)return;let e=()=>{document.visibilityState===`visible`&&K.getState().refresh()};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[t]),{open:n,recent:r,loading:i,lastError:a,resolving:o,resolveErrors:s,disabled:c,resolve:u,refresh:()=>void l()}}var Ne=(0,B.memo)(function({onOpenThread:e,className:n}){let{t:r}=S(),{open:i,recent:a,loading:o,lastError:s,resolving:c,resolveErrors:l,resolve:u,refresh:f}=Me(),[p,m]=(0,B.useState)(null),[g,y]=(0,B.useState)(!1),b=(e,t)=>{m({escalationId:e,action:t,instruction:``})},x=async()=>{p&&p.instruction.trim()&&(await u(p.escalationId,p.action,p.instruction)).ok&&m(null)};return(0,V.jsxs)(`section`,{className:w(`shrink-0 rounded-2xl border border-dark-border/60 bg-dark-surface`,`transition-all duration-200 hover:border-accent-blue/40 hover:bg-dark-raised`,n),"data-testid":`escalation-inbox`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2`,children:[(0,V.jsx)(_,{size:13,className:`text-dark-muted`}),(0,V.jsx)(`span`,{className:`text-xs font-medium text-dark-text`,children:r(`threads.escalation.title`)}),i.length>0&&(0,V.jsx)(`span`,{className:`rounded-full bg-accent-blue px-1.5 py-0.5 font-mono text-badge tabular-nums text-accent-fg`,"data-testid":`escalation-inbox-badge`,children:i.length}),(0,V.jsx)(`div`,{className:`ms-auto`,children:(0,V.jsx)(`button`,{type:`button`,onClick:f,disabled:o,className:`rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text disabled:opacity-50`,title:r(`common.refresh`),"aria-label":r(`common.refresh`),"data-testid":`escalation-inbox-refresh`,children:(0,V.jsx)(t,{size:12,className:w(o&&`animate-spin`)})})})]}),s&&(0,V.jsx)(`div`,{className:`px-3 pb-2`,"data-testid":`escalation-inbox-error`,children:(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded-md bg-dark-hover/60 px-2 py-1.5 text-meta text-dark-muted`,children:[(0,V.jsx)(h,{size:12,className:`shrink-0 text-accent-red`}),(0,V.jsx)(`span`,{className:`truncate`,children:r(`threads.escalation.error`,{message:s})})]})}),i.length===0?(0,V.jsx)(`p`,{className:`px-3 pb-3 text-meta text-dark-muted`,"data-testid":`escalation-inbox-empty`,children:r(`threads.escalation.empty`)}):(0,V.jsx)(`ul`,{className:`px-3 pb-2`,children:i.map(t=>(0,V.jsx)(Pe,{entry:t,draft:p?.escalationId===t.request.escalationId?p:null,resolving:!!c[t.request.escalationId],resolveError:l[t.request.escalationId],onBeginDecide:b,onDraftChange:e=>m(t=>t&&{...t,instruction:e}),onSubmitDraft:x,onCancelDraft:()=>m(null),onOpenThread:e},t.request.escalationId))}),(0,V.jsxs)(`div`,{className:`border-t border-dark-border px-3 py-1.5`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>y(e=>!e),"aria-expanded":g,className:`flex w-full items-center gap-1 text-meta text-dark-muted transition-colors hover:text-dark-text`,"data-testid":`escalation-recent-toggle`,children:[g?(0,V.jsx)(d,{size:11}):(0,V.jsx)(v,{size:11}),r(`threads.escalation.recent`),a.length>0&&(0,V.jsxs)(`span`,{className:`font-mono tabular-nums`,children:[`(`,a.length,`)`]})]}),g&&(0,V.jsx)(Fe,{recent:a,onOpenThread:e})]})]})}),Pe=(0,B.memo)(function({entry:e,draft:t,resolving:n,resolveError:r,onBeginDecide:i,onDraftChange:a,onSubmitDraft:o,onCancelDraft:s,onOpenThread:c}){let{t:l}=S(),u=e.request.escalationId,d=t!==null;return(0,V.jsxs)(`li`,{className:`rounded-md bg-dark-hover/40 px-2.5 py-2`,"data-testid":`escalation-item-${u}`,children:[(0,V.jsx)(`p`,{className:`text-xs leading-relaxed text-dark-text`,children:e.request.question}),(0,V.jsxs)(`div`,{className:`mt-1 flex items-center gap-2 text-meta text-dark-muted`,children:[c?(0,V.jsx)(`button`,{type:`button`,onClick:()=>c(e.request.threadId),className:`font-mono underline-offset-2 hover:text-dark-text hover:underline`,"data-testid":`escalation-thread-${u}`,children:e.request.threadId}):(0,V.jsx)(`span`,{className:`font-mono`,"data-testid":`escalation-thread-${u}`,children:e.request.threadId}),(0,V.jsx)(`span`,{children:`·`}),(0,V.jsx)(`span`,{children:l(`threads.escalation.since`,{time:Ie(e.request.createdAt)})})]}),e.request.context&&(0,V.jsx)(`p`,{className:`mt-1 border-s border-dark-border ps-2 text-meta leading-relaxed text-dark-muted`,children:e.request.context}),r&&(0,V.jsxs)(`p`,{className:`mt-1.5 flex items-center gap-1 text-meta text-accent-red`,"data-testid":`escalation-error-${u}`,children:[(0,V.jsx)(h,{size:11,className:`shrink-0`}),l(`threads.escalation.resolveFailed`,{message:r})]}),d&&t?(0,V.jsxs)(`div`,{className:`mt-2`,"data-testid":`escalation-form-${u}`,children:[(0,V.jsx)(`textarea`,{value:t.instruction,onChange:e=>a(e.target.value),placeholder:l(`threads.escalation.instructionPlaceholder`),rows:2,autoFocus:!0,disabled:n,className:`w-full resize-none rounded-md bg-dark-hover/60 px-2 py-1.5 text-meta text-dark-text placeholder:text-dark-muted focus:outline-none focus:ring-1 focus:ring-accent-blue`,"data-testid":`escalation-instruction-${u}`}),(0,V.jsxs)(`div`,{className:`mt-1 flex items-center gap-1.5`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:o,disabled:n||!t.instruction.trim(),className:w(`flex items-center gap-1 rounded px-2 py-0.5 text-meta text-accent-fg transition-colors disabled:opacity-50`,t.action===`proceed`?`bg-accent-green`:`bg-accent-red`),"data-testid":`escalation-confirm-${u}`,children:[t.action===`proceed`?(0,V.jsx)(b,{size:10}):(0,V.jsx)(g,{size:10}),n?l(`threads.escalation.deciding`):t.action===`proceed`?l(`threads.escalation.confirmProceed`):l(`threads.escalation.confirmAbort`)]}),(0,V.jsx)(`button`,{type:`button`,onClick:s,disabled:n,className:`rounded px-2 py-0.5 text-meta text-dark-muted transition-colors hover:text-dark-text disabled:opacity-50`,"data-testid":`escalation-cancel-${u}`,children:l(`threads.escalation.cancel`)})]})]}):(0,V.jsxs)(`div`,{className:`mt-1.5 flex items-center gap-1.5`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>i(u,`proceed`),disabled:n,className:`flex items-center gap-1 rounded bg-accent-green px-2 py-0.5 text-meta text-accent-fg transition-colors hover:opacity-90 disabled:opacity-50`,"data-testid":`escalation-proceed-${u}`,children:[(0,V.jsx)(b,{size:10}),l(`threads.escalation.proceed`)]}),(0,V.jsxs)(`button`,{type:`button`,onClick:()=>i(u,`abort`),disabled:n,className:`flex items-center gap-1 rounded bg-accent-red px-2 py-0.5 text-meta text-accent-fg transition-colors hover:opacity-90 disabled:opacity-50`,"data-testid":`escalation-abort-${u}`,children:[(0,V.jsx)(g,{size:10}),l(`threads.escalation.abort`)]})]})]})}),Fe=(0,B.memo)(function({recent:e,onOpenThread:t}){let{t:n}=S();return e.length===0?(0,V.jsx)(`p`,{className:`py-1.5 text-meta text-dark-muted`,"data-testid":`escalation-recent-empty`,children:n(`threads.escalation.recentEmpty`)}):(0,V.jsx)(`ul`,{className:`py-1.5`,children:e.map(e=>{let r=e.request.escalationId,i=e.status===`cancelled`?`resolvedCancelled`:e.outcome?.action===`proceed`?`resolvedProceed`:`resolvedAbort`,a=e.status===`cancelled`?`text-dark-muted`:e.outcome?.action===`proceed`?`text-accent-green`:`text-accent-red`;return(0,V.jsxs)(`li`,{className:`py-1`,"data-testid":`escalation-recent-${r}`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5 text-meta`,children:[(0,V.jsx)(`span`,{className:w(`shrink-0 font-medium`,a),children:n(`threads.escalation.${i}`)}),(0,V.jsx)(`span`,{className:`truncate text-dark-muted`,children:e.request.question})]}),(0,V.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-badge text-dark-muted`,children:[e.outcome&&(0,V.jsx)(`span`,{children:n(`threads.escalation.decidedBy`,{by:e.outcome.decidedBy})}),(0,V.jsx)(`span`,{className:`font-mono`,children:t?(0,V.jsx)(`button`,{type:`button`,onClick:()=>t(e.request.threadId),className:`underline-offset-2 hover:text-dark-text hover:underline`,children:e.request.threadId}):e.request.threadId})]})]},r)})})});function Ie(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}var Le={items:[],loading:!1,stale:!0,live:!1,lastError:null,lastFetchedAt:0,disabled:!1,deciding:{},decideErrors:{}},Re=400,J=null;function ze(){J!==null&&(clearTimeout(J),J=null)}function Y(e,t){let n={};for(let r of Object.keys(e))r!==t&&(n[r]=e[r]);return n}var X=C()((e,t)=>({...Le,refresh:async()=>{if(!t().loading){e({loading:!0});try{let t=await I.get(`/api/threads/reviews`);if(!t?.success){if(t?.code===`THREADS_DISABLED`){e({disabled:!0,items:[],loading:!1,stale:!1,lastError:null,lastFetchedAt:Date.now()});return}throw Error(t?.error||`Reviews query failed`)}e({items:t.data?.reviews??[],stale:!1,loading:!1,lastError:null,lastFetchedAt:Date.now(),disabled:!1})}catch(t){e({loading:!1,stale:!0,lastError:t instanceof Error?t.message:String(t),lastFetchedAt:Date.now()})}}},scheduleRefresh:()=>{J===null&&(J=setTimeout(()=>{J=null,t().refresh()},Re))},decide:async(n,r)=>{if(t().deciding[n])return{ok:!1,error:`already-submitting`};e(e=>({deciding:{...e.deciding,[n]:!0}}));try{let i=await I.post(`/api/threads/reviews/${encodeURIComponent(n)}/${r}`,{});if(!i?.success){let t=i?.error||`Decision failed`;return e(e=>({deciding:Y(e.deciding,n),decideErrors:{...e.decideErrors,[n]:t}})),{ok:!1,error:t}}return e(e=>({deciding:Y(e.deciding,n),decideErrors:Y(e.decideErrors,n)})),t().refresh(),P.getState().scheduleRefresh(),{ok:!0}}finally{t().deciding[n]&&e(e=>({deciding:Y(e.deciding,n)}))}},setLive:t=>{e(t?{live:!0}:{live:!1,stale:!0})},reset:()=>{ze(),e({...Le})}}));function Be(e={}){let t=e.enabled!==!1,n=X(e=>e.items),r=X(e=>e.loading),i=X(e=>e.lastError),a=X(e=>e.deciding),o=X(e=>e.decideErrors),s=X(e=>e.disabled),c=X(e=>e.refresh),l=X(e=>e.decide),u=P(e=>e.stale);return(0,B.useEffect)(()=>{if(!t)return;let e=X.getState();(e.stale||e.lastFetchedAt===0)&&e.refresh()},[t]),(0,B.useEffect)(()=>{t&&u&&X.getState().scheduleRefresh()},[t,u]),(0,B.useEffect)(()=>{if(!t||typeof document>`u`)return;let e=()=>{document.visibilityState===`visible`&&X.getState().refresh()};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[t]),{items:n,loading:r,lastError:i,deciding:a,decideErrors:o,disabled:s,decide:l,refresh:()=>void c()}}var Ve=(0,B.memo)(function({onOpenThread:e,className:r}){let{t:i}=S(),{items:a,loading:o,lastError:s,deciding:c,decideErrors:l,decide:u,refresh:d}=Be();return(0,V.jsxs)(`section`,{className:w(`shrink-0 rounded-2xl border border-dark-border/60 bg-dark-surface`,`transition-all duration-200 hover:border-accent-blue/40 hover:bg-dark-raised`,r),"data-testid":`review-inbox`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2`,children:[(0,V.jsx)(n,{size:13,className:`text-dark-muted`}),(0,V.jsx)(`span`,{className:`text-xs font-medium text-dark-text`,children:i(`threads.reviewQueue.title`)}),a.length>0&&(0,V.jsx)(`span`,{className:`rounded-full bg-accent-blue px-1.5 py-0.5 font-mono text-badge tabular-nums text-accent-fg`,"data-testid":`review-inbox-badge`,children:a.length}),(0,V.jsx)(`div`,{className:`ms-auto`,children:(0,V.jsx)(`button`,{type:`button`,onClick:d,disabled:o,className:`rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text disabled:opacity-50`,title:i(`common.refresh`),"aria-label":i(`common.refresh`),"data-testid":`review-inbox-refresh`,children:(0,V.jsx)(t,{size:12,className:w(o&&`animate-spin`)})})})]}),s&&(0,V.jsx)(`div`,{className:`px-3 pb-2`,"data-testid":`review-inbox-error`,children:(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded-md bg-dark-hover/60 px-2 py-1.5 text-meta text-dark-muted`,children:[(0,V.jsx)(h,{size:12,className:`shrink-0 text-accent-red`}),(0,V.jsx)(`span`,{className:`truncate`,children:i(`threads.reviewQueue.error`,{message:s})})]})}),a.length===0?(0,V.jsx)(`p`,{className:`px-3 pb-3 text-meta text-dark-muted`,"data-testid":`review-inbox-empty`,children:i(`threads.reviewQueue.empty`)}):(0,V.jsx)(`ul`,{className:`px-3 pb-2`,children:a.map(t=>(0,V.jsx)(He,{item:t,deciding:!!c[t.artifactId],decideError:l[t.artifactId],onDecide:u,onOpenThread:e},t.artifactId))})]})}),He=(0,B.memo)(function({item:e,deciding:t,decideError:n,onDecide:r,onOpenThread:i}){let{t:a}=S(),o=e.artifactId;return(0,V.jsxs)(`li`,{className:`rounded-md bg-dark-hover/40 px-2.5 py-2`,"data-testid":`review-item-${o}`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsxs)(`span`,{className:`font-mono text-xs text-dark-text`,"data-testid":`review-logical-${o}`,children:[e.logicalId,`#`,e.version]}),(0,V.jsx)(`span`,{className:w(`rounded px-1 py-0.5 font-mono text-badge`,e.type===`patch`?`bg-accent-amber/15 text-accent-amber`:`bg-dark-hover text-dark-muted`),"data-testid":`review-type-${o}`,children:e.type})]}),(0,V.jsxs)(`div`,{className:`mt-1 flex items-center gap-2 text-meta text-dark-muted`,children:[i?(0,V.jsx)(`button`,{type:`button`,onClick:()=>i(e.producerThreadId),className:`font-mono underline-offset-2 hover:text-dark-text hover:underline`,"data-testid":`review-thread-${o}`,children:e.producerThreadId}):(0,V.jsx)(`span`,{className:`font-mono`,"data-testid":`review-thread-${o}`,children:e.producerThreadId}),e.createdAt&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{children:`·`}),(0,V.jsx)(`span`,{children:a(`threads.reviewQueue.registered`,{time:Ue(e.createdAt)})})]})]}),n&&(0,V.jsxs)(`p`,{className:`mt-1.5 flex items-center gap-1 text-meta text-accent-red`,"data-testid":`review-error-${o}`,children:[(0,V.jsx)(h,{size:11,className:`shrink-0`}),a(`threads.reviewQueue.decideFailed`,{message:n})]}),(0,V.jsxs)(`div`,{className:`mt-1.5 flex items-center gap-1.5`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>void r(o,`approve`),disabled:t,className:`flex items-center gap-1 rounded bg-accent-green px-2 py-0.5 text-meta text-accent-fg transition-colors hover:opacity-90 disabled:opacity-50`,"data-testid":`review-approve-${o}`,children:[(0,V.jsx)(b,{size:10}),a(t?`threads.reviewQueue.deciding`:`threads.reviewQueue.approve`)]}),(0,V.jsxs)(`button`,{type:`button`,onClick:()=>void r(o,`reject`),disabled:t,className:`flex items-center gap-1 rounded bg-accent-red px-2 py-0.5 text-meta text-accent-fg transition-colors hover:opacity-90 disabled:opacity-50`,"data-testid":`review-reject-${o}`,children:[(0,V.jsx)(g,{size:10}),a(`threads.reviewQueue.reject`)]})]})]})});function Ue(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}var We=3e4,Ge=250,Ke=(0,B.memo)(function({onClose:e,onOpenThread:n,workspaceId:r,className:a}){let{t:o}=S(),s=De(),{order:d,stats:f,progressSummaries:m,live:_,loading:v,lastError:y,query:b,setQuery:x,disabled:C,refresh:T}=s,E=(0,B.useMemo)(()=>r?s.rows.filter(e=>e.workspaceId===r):s.rows,[s.rows,r]),D=(0,B.useMemo)(()=>{if(!r)return s.groups;let e={};for(let t of E)e[t.threadId]=t;return ee(e)},[s.groups,E,r]),[O,k]=(0,B.useState)(`status`),[A,j]=(0,B.useState)(b),M=(0,B.useRef)(null);(0,B.useEffect)(()=>{j(b)},[b]),(0,B.useEffect)(()=>()=>{M.current&&clearTimeout(M.current)},[]);let N=e=>{j(e),M.current&&clearTimeout(M.current),M.current=setTimeout(()=>x(e),Ge)},P=(0,B.useMemo)(()=>d.some(e=>e!==`done`&&(D[e]?.length??0)>0),[D,d]),[F,I]=(0,B.useState)(()=>Date.now());(0,B.useEffect)(()=>{if(!P)return;let e=setInterval(()=>I(Date.now()),We);return()=>clearInterval(e)},[P]);let te=(0,B.useMemo)(()=>O===`project`?Ce(E):[],[O,E]),ne=Object.values(D).reduce((e,t)=>e+t.length,0),L=D.waiting.length,R=f&&typeof f.inflight?.threads==`number`&&typeof f.limits?.maxThreads==`number`?o(`threads.running`,{inflight:f.inflight.threads,max:f.limits.maxThreads}):void 0,z=typeof f?.queued?.threads==`number`?f.queued.threads:0;return(0,V.jsxs)(`div`,{className:w(`flex h-full min-h-0 flex-col`,a),children:[(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 px-3 py-2.5`,children:[L>0&&(0,V.jsx)(`span`,{className:`rounded-full bg-accent-blue px-1.5 py-0.5 font-mono text-badge tabular-nums text-accent-fg`,"data-testid":`threads-waiting-badge`,children:L}),(0,V.jsxs)(`div`,{className:`ms-auto flex items-center gap-0.5`,children:[!r&&(0,V.jsxs)(`div`,{className:`me-0.5 flex items-center rounded-md bg-dark-hover/60 p-0.5`,role:`group`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>k(`status`),"aria-pressed":O===`status`,className:w(`shrink-0 rounded p-1 transition-colors`,O===`status`?`bg-dark-surface text-dark-text`:`text-dark-muted hover:text-dark-text`),title:o(`threads.groupByStatus`),"aria-label":o(`threads.groupByStatus`),"data-testid":`threads-groupby-status`,children:(0,V.jsx)(i,{size:13})}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>k(`project`),"aria-pressed":O===`project`,className:w(`shrink-0 rounded p-1 transition-colors`,O===`project`?`bg-dark-surface text-dark-text`:`text-dark-muted hover:text-dark-text`),title:o(`threads.groupByProject`),"aria-label":o(`threads.groupByProject`),"data-testid":`threads-groupby-project`,children:(0,V.jsx)(p,{size:13})})]}),(0,V.jsx)(`button`,{type:`button`,onClick:T,disabled:v,className:`shrink-0 rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text disabled:opacity-50`,title:o(`common.refresh`),"aria-label":o(`common.refresh`),"data-testid":`threads-refresh`,children:(0,V.jsx)(t,{size:14,className:w(v&&`animate-spin`)})}),e&&(0,V.jsx)(`button`,{type:`button`,onClick:e,className:`shrink-0 rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:o(`common.close`),"aria-label":o(`common.close`),children:(0,V.jsx)(g,{size:14})})]})]}),C&&(0,V.jsx)(`div`,{className:`shrink-0 px-3 pb-3`,"data-testid":`threads-disabled`,children:(0,V.jsx)(Z,{tone:`info`,icon:(0,V.jsx)(u,{size:12}),text:o(`threads.disabled`)})}),!C&&(0,V.jsxs)(`div`,{className:`shrink-0 px-3 pb-2`,children:[!r&&(0,V.jsxs)(`div`,{className:`relative`,children:[(0,V.jsx)(c,{size:13,className:`pointer-events-none absolute start-2 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,V.jsx)(`input`,{type:`text`,value:A,onChange:e=>N(e.target.value),placeholder:o(`threads.searchPlaceholder`),"aria-label":o(`threads.searchPlaceholder`),"data-testid":`threads-search`,className:`w-full rounded-md bg-dark-hover/60 py-1 ps-7 pe-7 text-xs text-dark-text placeholder:text-dark-muted focus:outline-none focus:ring-1 focus:ring-accent-blue`}),A&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>N(``),title:o(`threads.searchClear`),"aria-label":o(`threads.searchClear`),"data-testid":`threads-search-clear`,className:`absolute end-1.5 top-1/2 -translate-y-1/2 rounded p-0.5 text-dark-muted transition-colors hover:text-dark-text`,children:(0,V.jsx)(g,{size:12})})]}),b.trim()&&(0,V.jsx)(`p`,{className:`mt-1 text-badge text-dark-muted`,"data-testid":`threads-search-note`,children:o(`threads.searchActive`,{q:b.trim()})})]}),!C&&(0,V.jsxs)(`div`,{className:`shrink-0 px-3 pb-2 pt-3`,children:[(0,V.jsx)(`p`,{className:`text-sm text-dark-text`,children:o(`threads.greeting`)}),(0,V.jsx)(`p`,{className:`mt-0.5 text-xs text-dark-muted`,"data-testid":`threads-waiting-line`,children:L>0?o(`threads.waitingOnYou`,{count:L}):o(`threads.nothingWaiting`)}),R&&(0,V.jsxs)(`p`,{className:`mt-1.5 font-mono text-meta tabular-nums text-dark-muted`,children:[R,z>0&&` · ${o(`threads.queued`,{count:z})}`]})]}),!C&&(0,V.jsx)(Ne,{onOpenThread:n,className:`mx-3 mb-4`}),!C&&(0,V.jsx)(Ve,{onOpenThread:n,className:`mx-3 mb-4`}),!C&&(!_||y)&&(0,V.jsx)(`div`,{className:`shrink-0 px-3 pb-2`,"data-testid":`threads-status-banner`,children:_?(0,V.jsx)(Z,{tone:`error`,icon:(0,V.jsx)(h,{size:12}),text:o(`threads.refreshFailed`,{message:y??``}),action:(0,V.jsx)(`button`,{type:`button`,onClick:T,className:`underline hover:no-underline`,children:o(`threads.retry`)})}):(0,V.jsx)(Z,{tone:`warn`,icon:(0,V.jsx)(l,{size:12}),text:o(`threads.offline`)})}),(0,V.jsx)(`div`,{className:`min-h-0 flex-1 space-y-1 overflow-y-auto px-2 pb-3 custom-scrollbar`,children:ne===0?C?null:(0,V.jsxs)(`div`,{className:`px-3 py-8 text-center`,"data-testid":`threads-empty`,children:[(0,V.jsx)(`p`,{className:`text-xs text-dark-text`,children:o(`threads.empty`)}),(0,V.jsx)(`p`,{className:`mt-1 text-meta leading-relaxed text-dark-muted`,children:o(`threads.emptyHint`)})]}):O===`status`?d.map(e=>(0,V.jsx)(Oe,{label:o(fe(e)),rows:be(e,D[e]??[]),defaultCollapsed:he(e),testId:`threads-section-${e}`,progressSummaries:m,now:F,onOpen:n},e)):te.map(e=>{let t=we(e.workspaceId);return(0,V.jsx)(Oe,{label:t??o(`threads.noWorkspace`),title:e.workspaceId??o(`threads.noWorkspace`),rows:e.rows,testId:`threads-project-${e.key}`,progressSummaries:m,now:F,onOpen:n},e.key)})})]})});function Z({tone:e,icon:t,text:n,action:r}){return(0,V.jsxs)(`div`,{className:w(`flex items-start gap-1.5 rounded-lg border px-2 py-1.5 text-meta leading-relaxed`,e===`error`?`border-accent-red/40 bg-accent-red/10 text-accent-red`:e===`info`?`border-dark-border bg-dark-hover/50 text-dark-muted`:`border-accent-yellow/40 bg-accent-yellow/10 text-accent-yellow`),children:[(0,V.jsx)(`span`,{className:`mt-[1px] shrink-0`,children:t}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1`,children:n}),r&&(0,V.jsx)(`span`,{className:`shrink-0`,children:r})]})}function qe(){return{activities:{},order:[],taskTitles:{},artifacts:[]}}var Je=C()(e=>({bySession:{},applyEvent:(t,n)=>e(e=>{let r=e.bySession[t]??qe();switch(n.type){case`activity_started`:return r.activities[n.activity.id]?e:{...e,bySession:{...e.bySession,[t]:{...r,activities:{...r.activities,[n.activity.id]:n.activity},order:[...r.order,n.activity.id]}}};case`activity_updated`:{let i=r.activities[n.activityId];return i?{...e,bySession:{...e.bySession,[t]:{...r,activities:{...r.activities,[n.activityId]:{...i,...n.patch}}}}}:e}case`activity_finalized`:{let i=r.activities[n.activityId];return i?{...e,bySession:{...e.bySession,[t]:{...r,activities:{...r.activities,[n.activityId]:{...i,status:n.status,endedAt:n.endedAt}}}}}:e}case`artifact_produced`:return r.artifacts.some(e=>e.id===n.artifact.id)?e:{...e,bySession:{...e.bySession,[t]:{...r,artifacts:[...r.artifacts,n.artifact]}}};case`task_title_set`:return{...e,bySession:{...e.bySession,[t]:{...r,taskTitles:{...r.taskTitles,[n.messageId]:n.title}}}};case`next_action_set`:return{...e,bySession:{...e.bySession,[t]:{...r,nextAction:n.text??void 0}}};default:return e}}),resetSession:t=>e(e=>{if(!e.bySession[t])return e;let n={...e.bySession};return delete n[t],{bySession:n}}),finalizeSession:(t,n)=>e(e=>{let r=e.bySession[t];if(!r)return e;let i=Date.now(),a=[`pending`,`running`,`paused`,`waiting_user`],o=!1,s={};for(let[e,t]of Object.entries(r.activities))a.includes(t.status)?(s[e]={...t,status:n,endedAt:i},o=!0):s[e]=t;return o?{...e,bySession:{...e.bySession,[t]:{...r,activities:s}}}:e}),markStatus:(t,n,r)=>e(e=>{let i=e.bySession[t];if(!i)return e;let a=!1,o={};for(let[e,t]of Object.entries(i.activities))n.includes(t.status)?(o[e]={...t,status:r},a=!0):o[e]=t;return a?{...e,bySession:{...e.bySession,[t]:{...i,activities:o}}}:e})}));function Ye(e,t){if(!t)return;let n=e.bySession[t];if(n)for(let e=n.order.length-1;e>=0;e--){let t=n.order[e];if(!t)continue;let r=n.activities[t];if(r&&(r.status===`running`||r.status===`waiting_user`||r.status===`paused`||r.status===`blocked`))return r}}function Xe(e){return e===`running`||e===`waiting`}function Ze({sessionId:e,status:t,fallback:n}){let r=Je(t=>{let n=t.bySession[e];if(n)for(let e=n.order.length-1;e>=0;e--){let t=n.order[e],r=t?n.activities[t]:void 0;if(r)return r.title}});return Xe(t)&&r?(0,V.jsx)(`span`,{"data-session-activity":`live`,className:`line-clamp-2 min-w-0 flex-1 text-dark-muted/70`,title:r,children:r}):n?(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:n}):null}var Qe=[`pause`,`resume`,`cancel`];function $e(e){return Qe.includes(e)}function et(e){return Qe.filter(t=>e.allowedActions.includes(t))}var tt=(0,B.memo)(function({thread:e,onControlled:t,className:n}){let{t:r}=S(),[i,a]=(0,B.useState)(null),[s,c]=(0,B.useState)(null),[l,u]=(0,B.useState)(!1);(0,B.useEffect)(()=>{a(null),c(null),u(!1)},[e.threadId]);let d=(0,B.useCallback)(async n=>{if(i)return;a(n),c(null);let o=await I.post(`/api/threads/${encodeURIComponent(e.threadId)}/${n}`,{expectedStatus:e.status});a(null),t(),o?.success||c(o?.error||r(`threads.controlFailed`))},[i,e.threadId,e.status,t,r]),p=et(e),h=e.allowedActions.filter(e=>!$e(e));if(p.length===0&&h.length===0)return(0,V.jsx)(`p`,{className:w(`text-meta text-dark-muted`,n),children:r(`threads.factNoActions`)});let g={pause:m,resume:f,cancel:o},_={pause:r(`threads.action.pause`),resume:r(`threads.action.resume`),cancel:r(`threads.action.cancel`)};return(0,V.jsxs)(`div`,{className:w(`space-y-1.5`,n),children:[p.length>0&&(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:p.map(e=>{let t=g[e],n=e===`cancel`;return(0,V.jsxs)(`button`,{type:`button`,"data-testid":`thread-action-${e}`,disabled:i!==null,onClick:()=>n?u(!0):void d(e),className:w(`inline-flex items-center gap-1 rounded border px-2 py-1 text-meta transition-colors`,`disabled:cursor-not-allowed disabled:opacity-50`,n?`border-accent-red/40 text-accent-red hover:bg-accent-red/10`:`border-dark-border text-dark-text hover:bg-dark-hover`),children:[(0,V.jsx)(t,{size:11}),_[e]]},e)})}),h.length>0&&(0,V.jsx)(`p`,{className:`text-badge text-dark-muted`,"data-testid":`thread-actions-elsewhere`,children:r(`threads.actionsElsewhere`,{actions:h.join(` · `)})}),s&&(0,V.jsx)(`p`,{className:`text-meta text-accent-red`,role:`alert`,"data-testid":`thread-control-error`,children:s}),(0,V.jsx)(L,{isOpen:l,onClose:()=>u(!1),onConfirm:()=>void d(`cancel`),title:r(`threads.cancelConfirmTitle`),message:r(`threads.cancelConfirm`),confirmText:r(`threads.cancelConfirmAction`),variant:`danger`})]})}),nt={claim:`threads.goal.blockerClaim`,escalation:`threads.goal.blockerEscalation`,approval:`threads.goal.blockerApproval`},rt=(0,B.memo)(function({snapshot:e,className:t}){let{t:n}=S(),r=new Map(e.nodes.map(e=>[e.id,e.title])),i=e=>r.get(e)??e;return(0,V.jsxs)(`section`,{"data-testid":`thread-goal-snapshot`,className:w(`rounded-lg border border-dark-border px-2 py-2`,t),children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(y,{size:13,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`truncate text-xs font-medium text-dark-text`,children:e.goal}),(0,V.jsx)(`span`,{className:`ms-auto shrink-0 font-mono text-meta tabular-nums text-dark-muted`,"data-testid":`thread-goal-revision`,title:n(`threads.goal.revisionTitle`),children:n(`threads.goal.revision`,{n:e.revision})})]}),(0,V.jsx)(`ul`,{className:`mt-1.5 space-y-1 ps-4`,children:e.nodes.map(e=>{let t=e.parentIds??[];return(0,V.jsxs)(`li`,{"data-testid":`thread-goal-node`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,V.jsx)(`span`,{className:`truncate text-dark-text`,children:e.title}),(0,V.jsx)(`span`,{className:`shrink-0 font-mono text-meta tabular-nums text-dark-muted`,children:e.status}),(0,V.jsx)(`span`,{className:`ms-auto flex shrink-0 items-center gap-1`,children:e.threadIds.map(e=>(0,V.jsx)(M,{threadId:e},e))})]}),t.length>0&&(0,V.jsx)(`div`,{className:`mt-0.5 truncate text-meta text-dark-muted`,"data-testid":`thread-goal-node-deps`,title:t.map(i).join(`, `),children:n(`threads.goal.dependsOn`,{names:t.map(i).join(`, `)})})]},e.id)})}),(0,V.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-meta text-dark-muted`,children:[(0,V.jsx)(`span`,{"data-testid":`thread-goal-active`,children:n(`threads.goal.activeThreads`,{n:e.activeThreads.length})}),(0,V.jsx)(`span`,{"data-testid":`thread-goal-blockers`,children:n(`threads.goal.blockers`,{n:e.blockers.length})}),e.openEscalations>0&&(0,V.jsx)(`span`,{className:`text-accent-red`,"data-testid":`thread-goal-escalations`,children:n(`threads.goal.openEscalations`,{n:e.openEscalations})})]}),e.blockers.length>0&&(0,V.jsx)(`ul`,{className:`mt-1 space-y-0.5 ps-4`,children:e.blockers.map(e=>(0,V.jsx)(`li`,{className:`text-meta text-dark-muted`,children:n(nt[e.kind]??`threads.goal.blockerUnknown`,{ref:e.ref})},`${e.kind}:${e.ref}:${e.threadId}`))})]})});function it({tail:e,path:t}){let{t:n}=S();return e?e.missing||e.lines.length===0?(0,V.jsxs)(`div`,{className:`mt-0.5 ps-4 text-meta text-dark-muted`,"data-testid":`thread-worktree-service-log`,children:[(0,V.jsx)(`div`,{children:n(`threads.services.logMissing`)}),(0,V.jsx)(`div`,{className:`truncate font-mono`,title:t,children:t})]}):(0,V.jsxs)(`div`,{className:`mt-0.5 ps-4`,"data-testid":`thread-worktree-service-log`,children:[(0,V.jsx)(`pre`,{className:`max-h-40 overflow-auto whitespace-pre-wrap break-all rounded bg-dark-surface p-1 font-mono text-meta leading-snug text-dark-muted`,children:e.lines.join(`
|
|
2
|
-
`)}),e.truncated&&(0,V.jsx)(`div`,{className:`mt-0.5 text-meta text-dark-muted`,children:n(`threads.services.logTruncated`)})]}):(0,V.jsx)(`div`,{className:`mt-0.5 ps-4 text-meta text-dark-muted`,children:n(`threads.services.logLoading`)})}var at={running:`bg-accent-green`,exited:`bg-accent-yellow`,stopped:`bg-dark-muted`},ot=(0,B.memo)(function({ownerKey:e,services:t,className:n}){let{t:i}=S(),[a,o]=(0,B.useState)(null),[s,c]=(0,B.useState)({}),l=t=>{a===t.name?o(null):(o(t.name),!s[t.name]&&I.get(`/api/worktree-services/log?sessionId=${encodeURIComponent(e)}&name=${encodeURIComponent(t.name)}&tail=200`).then(e=>{c(n=>({...n,[t.name]:e?.success&&e.data?e.data:{lines:[],truncated:!1,missing:!0}}))}))};return(0,V.jsxs)(`section`,{"data-testid":`thread-worktree-services`,className:w(`rounded-lg border border-dark-border px-2 py-2`,n),children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(r,{size:13,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`truncate text-xs font-medium text-dark-text`,children:i(`threads.services.title`)}),(0,V.jsx)(`span`,{className:`ms-auto shrink-0 font-mono text-meta tabular-nums text-dark-muted`,children:t.length})]}),(0,V.jsx)(`ul`,{className:`mt-1.5 space-y-1`,children:t.map(e=>{let t=a===e.name;return(0,V.jsxs)(`li`,{"data-testid":`thread-worktree-service`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,V.jsx)(`span`,{className:w(`h-1.5 w-1.5 shrink-0 rounded-full`,at[e.status]??`bg-dark-muted`),"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`truncate text-dark-text`,children:e.name}),(0,V.jsx)(`span`,{className:`shrink-0 font-mono text-meta text-dark-muted`,"data-testid":`thread-worktree-service-status`,children:e.status}),(0,V.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noreferrer`,className:`ms-auto shrink-0 truncate font-mono text-meta text-accent-blue hover:underline`,"data-testid":`thread-worktree-service-url`,children:e.url}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>l(e),"aria-expanded":t,"aria-label":i(`threads.services.toggleLog`),title:i(`threads.services.toggleLog`),className:`shrink-0 rounded p-0.5 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,"data-testid":`thread-worktree-service-log-toggle`,children:t?(0,V.jsx)(d,{size:12}):(0,V.jsx)(v,{size:12})})]}),t&&(0,V.jsx)(it,{tail:s[e.name],path:e.resultPath})]},e.name)})})]})});function st(e){let t=[];return e.forEach((e,n)=>{if(O(e.kind))return;let r=e.type===`user`?`user`:e.type===`assistant`?`assistant`:null;if(!r)return;let i=typeof e.content==`string`?e.content:``,a=typeof e.thinking==`string`&&e.thinking?e.thinking:void 0;(i.trim()||a)&&t.push({id:e.id||`thread-msg-${n}`,type:r,content:i,timestamp:typeof e.timestamp==`number`?e.timestamp:0,thinking:a})}),t}var ct=(0,B.memo)(function({sessionId:e,reloadKey:t=0,className:n}){let{t:r}=S(),[i,a]=(0,B.useState)(null),[o,s]=(0,B.useState)(!1),[c,l]=(0,B.useState)(null);(0,B.useEffect)(()=>{if(!e){a(null);return}let t=!1;return s(!0),(async()=>{let n=await I.get(`/api/sessions/${encodeURIComponent(e)}/messages`);t||(n?.success?(a(Array.isArray(n.data)?n.data:[]),l(null)):(l(n?.error||`request failed`),a(null)),s(!1))})(),()=>{t=!0}},[e,t]);let u=(0,B.useMemo)(()=>i?st(i):[],[i]);return e?c?(0,V.jsx)(`p`,{className:w(`mt-3 text-meta text-accent-red`,n),"data-testid":`thread-conversation-error`,children:r(`threads.conversationFailed`,{message:c})}):i===null?(0,V.jsx)(`p`,{className:w(`mt-3 text-meta text-dark-muted`,n),"data-testid":`thread-conversation-loading`,children:o?r(`threads.conversationLoading`):null}):u.length===0?(0,V.jsx)(`p`,{className:w(`mt-3 text-meta text-dark-muted`,n),"data-testid":`thread-conversation-empty`,children:r(`threads.conversationEmpty`)}):(0,V.jsx)(`div`,{className:w(`mt-3 min-w-0`,n),"data-testid":`thread-conversation`,children:u.map(t=>(0,V.jsx)(F,{message:t,sessionId:e},t.id))}):null});function lt({detail:e,className:t}){let{t:n}=S(),r=e.thread;return(0,V.jsxs)(`div`,{className:w(`min-w-0`,t),children:[(0,V.jsxs)(`dl`,{className:`mt-3 space-y-1.5 text-meta`,"data-testid":`thread-detail-facts`,children:[(0,V.jsx)(Q,{label:n(`threads.factWorkspace`),value:r.workspaceId,mono:!0}),(0,V.jsx)(Q,{label:n(`threads.factIsolation`),value:r.isolation.mode===`shared`?n(`threads.isolationShared`):r.isolation.branch?n(`threads.isolationBranch`,{branch:r.isolation.branch}):n(`threads.isolationIsolated`)}),r.model&&(0,V.jsx)(Q,{label:n(`threads.factModel`),value:r.model,mono:!0}),r.delivery?.branch&&(0,V.jsx)(Q,{label:n(`threads.factBranch`),value:r.delivery.branch,mono:!0}),r.delivery?.commit&&(0,V.jsx)(Q,{label:n(`threads.factCommit`),value:W(r.delivery.commit),mono:!0}),r.delivery?.prUrl&&(0,V.jsx)(ut,{label:n(`threads.factPr`),url:r.delivery.prUrl}),r.parentThreadId&&(0,V.jsx)(Q,{label:n(`threads.factParent`),value:r.parentThreadId,mono:!0}),r.detached&&(0,V.jsx)(Q,{label:n(`threads.factDetached`),value:n(`threads.detachedValue`)}),(0,V.jsx)(Q,{label:n(`threads.factCreated`),value:k(r.createdAt)??r.createdAt})]}),(0,V.jsxs)($,{title:n(`threads.sectionBudget`),testId:`thread-detail-budget`,children:[r.progress?.maxRounds==null?(0,V.jsx)(`p`,{className:`text-meta text-dark-muted`,children:n(`threads.noBudget`)}):(0,V.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,V.jsx)(se,{round:r.progress.round??0,maxRounds:r.progress.maxRounds})}),e.usage?(0,V.jsxs)(`p`,{className:`mt-1 font-mono text-meta text-dark-muted`,children:[n(`threads.usageTokens`,{in:e.usage.tokensIn,out:e.usage.tokensOut}),e.budgetVerdict&&(0,V.jsxs)(`span`,{className:w(`ms-2`,e.budgetVerdict.level===`exceeded`?`text-accent-red`:e.budgetVerdict.level===`warn`?`text-accent-yellow`:`text-dark-muted`),children:[n(`threads.usageUtilization`,{percent:Math.round(e.budgetVerdict.utilization*100)}),e.budgetVerdict.reason?` (${e.budgetVerdict.reason})`:``]})]}):(0,V.jsx)(`p`,{className:`mt-1 text-meta text-dark-muted`,children:n(`threads.noActiveRun`)})]}),(0,V.jsx)($,{title:n(`threads.sectionArtifacts`),testId:`thread-detail-artifacts`,children:(0,V.jsx)(dt,{artifacts:e.artifacts})})]})}function Q({label:e,value:t,mono:n}){return t?(0,V.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,V.jsx)(`dt`,{className:`w-[74px] shrink-0 text-dark-muted`,children:e}),(0,V.jsx)(`dd`,{className:w(`min-w-0 flex-1 break-words text-dark-text`,n&&`font-mono text-meta`),children:t})]}):null}function ut({label:e,url:t}){return(0,V.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,V.jsx)(`dt`,{className:`w-[74px] shrink-0 text-dark-muted`,children:e}),(0,V.jsx)(`dd`,{className:`min-w-0 flex-1 break-words`,children:(0,V.jsx)(`a`,{href:t,target:`_blank`,rel:`noreferrer noopener`,className:`font-mono text-meta text-accent-blue underline-offset-2 hover:underline`,children:t})})]})}function $({title:e,testId:t,children:n}){return(0,V.jsxs)(`section`,{className:`mt-4`,"data-testid":t,children:[(0,V.jsx)(`h3`,{className:`mb-1.5 text-meta font-medium text-dark-text`,children:e}),n]})}function dt({artifacts:e}){let{t}=S();return e.length===0?(0,V.jsx)(`p`,{className:`text-meta text-dark-muted`,children:t(`threads.noArtifacts`)}):(0,V.jsx)(`ul`,{className:`space-y-1`,children:j(e).map(e=>{let n=e[0];return(0,V.jsxs)(`li`,{className:`rounded-lg border border-dark-border px-2 py-1.5`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-meta text-dark-text`,children:n.logicalId}),(0,V.jsxs)(`span`,{className:`shrink-0 font-mono text-meta text-dark-muted`,children:[`v`,n.version]})]}),(0,V.jsxs)(`div`,{className:`mt-0.5 flex flex-wrap items-center gap-x-2 text-meta text-dark-muted`,children:[(0,V.jsx)(`span`,{children:n.type}),(0,V.jsx)(`span`,{children:n.status}),n.reviewRequired&&(0,V.jsxs)(`span`,{children:[`review: `,n.reviewState]}),e.length>1&&(0,V.jsx)(`span`,{children:t(`threads.artifactVersions`,{count:e.length})})]})]},n.logicalId)})})}var ft=(0,B.memo)(function({threadId:e,onBack:n,onOpenSession:r,className:i}){let{t:o}=S(),[s,c]=(0,B.useState)(null),[l,u]=(0,B.useState)(null),[d,f]=(0,B.useState)([]),[p,m]=(0,B.useState)(!1),[g,_]=(0,B.useState)(null),v=(0,B.useCallback)(async()=>{m(!0);try{let[t,n,r]=await Promise.all([I.get(`/api/threads/${encodeURIComponent(e)}`),I.get(`/api/threads/goal-snapshot?thread=${encodeURIComponent(e)}`),I.get(`/api/worktree-services?sessionId=${encodeURIComponent(e)}`)]);if(u(n?.success&&n.data&&Array.isArray(n.data.nodes)?n.data:null),f(r?.success&&r.data&&Array.isArray(r.data.services)?r.data.services:[]),!t?.success||!t.data)throw Error(t?.error||`not found`);c(t.data),_(null);let i=P.getState().rows[t.data.thread.threadId];i&&i.status!==t.data.thread.status&&P.getState().refresh()}catch(e){c(null),_(e instanceof Error?e.message:String(e))}finally{m(!1)}},[e]);(0,B.useEffect)(()=>{v()},[v]),(0,B.useEffect)(()=>{let e=()=>void v();return window.addEventListener(`worktree-services-changed`,e),()=>window.removeEventListener(`worktree-services-changed`,e)},[v]);let y=(0,B.useCallback)(()=>{v(),P.getState().refresh()},[v]),b=s?.thread,C=b?A(b):void 0;return(0,V.jsxs)(`div`,{className:w(`flex h-full min-h-0 flex-col`,i),children:[(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 border-b border-dark-border px-2 py-2.5`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:n,className:`shrink-0 rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:o(`common.back`),"aria-label":o(`common.back`),"data-testid":`thread-detail-back`,children:(0,V.jsx)(x,{size:14})}),(0,V.jsx)(`span`,{className:`shrink-0 text-xs text-dark-muted`,children:o(`threads.title`)}),(0,V.jsx)(`span`,{className:`shrink-0 text-xs text-dark-muted`,"aria-hidden":`true`,children:`›`}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-sm text-dark-text`,title:b?.title,"data-testid":`thread-detail-title`,children:b?.title?.trim()||b?.alias||e}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>void v(),disabled:p,className:`shrink-0 rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text disabled:opacity-50`,title:o(`common.refresh`),"aria-label":o(`common.refresh`),"data-testid":`thread-detail-refresh`,children:(0,V.jsx)(t,{size:13,className:w(p&&`animate-spin`)})})]}),(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-3 py-3 custom-scrollbar`,children:[g&&(0,V.jsxs)(`div`,{className:`flex items-start gap-1.5 rounded-lg border border-accent-red/40 bg-accent-red/10 px-2 py-1.5 text-meta leading-relaxed text-accent-red`,"data-testid":`thread-detail-error`,children:[(0,V.jsx)(h,{size:12,className:`mt-[1px] shrink-0`}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1`,children:o(`threads.detailLoadFailed`,{message:g})})]}),!s&&p&&!g&&(0,V.jsx)(`p`,{className:`text-meta text-dark-muted`,"data-testid":`thread-detail-loading`,children:o(`common.loading`)}),b&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,V.jsx)(`span`,{className:w(`mt-[5px] h-1.5 w-1.5 shrink-0 rounded-full`,le(b.group,b.status)),"aria-hidden":`true`}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[C&&(0,V.jsx)(`p`,{className:w(`text-xs font-medium`,de[C]),children:o(pe(C))}),(0,V.jsx)(`p`,{className:`mt-0.5 font-mono text-meta text-dark-muted`,children:b.status})]}),(0,V.jsx)(`span`,{className:`shrink-0 font-mono text-meta text-dark-muted`,children:b.alias})]}),r&&b.sessionId&&(0,V.jsxs)(`button`,{type:`button`,onClick:()=>r(b),className:`mt-3 flex w-full items-center justify-center gap-1.5 rounded-lg border border-accent-blue/40 bg-accent-blue/10 px-2 py-1.5 text-meta text-accent-blue transition-colors hover:bg-accent-blue/15`,"data-testid":`thread-detail-open-session`,children:[(0,V.jsx)(a,{size:12,"aria-hidden":`true`}),o(`threads.openSession`)]}),(0,V.jsx)($,{title:o(`threads.sectionConversation`),testId:`thread-detail-conversation`,children:(0,V.jsx)(ct,{sessionId:b.sessionId})}),l&&(0,V.jsx)(rt,{snapshot:l,className:`mt-3`}),d.length>0&&(0,V.jsx)(ot,{ownerKey:e,services:d,className:`mt-3`}),(0,V.jsx)(lt,{detail:s}),(0,V.jsx)($,{title:o(`threads.sectionControl`),testId:`thread-detail-control`,children:(0,V.jsx)(tt,{thread:b,onControlled:y})})]})]}),b&&pt(b.group)&&(0,V.jsx)(`div`,{className:`shrink-0 px-3 pt-1 text-meta`,children:(0,V.jsx)(Ze,{sessionId:b.sessionId,status:mt(b.group)})})]})});function pt(e){return e===`working`||e===`waiting`||e===`review`}function mt(e){return e===`working`?`running`:e===`waiting`||e===`review`?`waiting`:`done`}var ht=(0,B.memo)(function({onOpenSession:e,focusThread:t,className:n}){let[r,i]=(0,B.useState)(null),a=(0,B.useCallback)(t=>{i(t);let n=P.getState().rows[t];n&&e?.(n)},[e]);return(0,B.useEffect)(()=>{t?.id&&i(t.id)},[t]),r?(0,V.jsx)(ft,{threadId:r,onBack:()=>i(null),onOpenSession:e,className:n}):(0,V.jsx)(Ke,{onOpenThread:a,className:n})});export{Ye as a,De as c,fe as d,re as f,Xe as i,Te as l,ft as n,Je as o,ie as p,Ze as r,Ke as s,ht as t,_e as u};
|