@pixelbyte-software/pixcode 1.53.5 → 1.53.7
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/dist/assets/{index-CyeODv14.js → index-DM-KfWAm.js} +3 -3
- package/dist/index.html +1 -1
- package/dist-server/server/claude-sdk.js +17 -15
- package/dist-server/server/claude-sdk.js.map +1 -1
- package/dist-server/server/cursor-cli.js +14 -12
- package/dist-server/server/cursor-cli.js.map +1 -1
- package/dist-server/server/gemini-cli.js +14 -12
- package/dist-server/server/gemini-cli.js.map +1 -1
- package/dist-server/server/openai-codex.js +30 -22
- package/dist-server/server/openai-codex.js.map +1 -1
- package/dist-server/server/opencode-cli.js +14 -12
- package/dist-server/server/opencode-cli.js.map +1 -1
- package/dist-server/server/qwen-code-cli.js +14 -12
- package/dist-server/server/qwen-code-cli.js.map +1 -1
- package/dist-server/server/routes/agent.js +24 -7
- package/dist-server/server/routes/agent.js.map +1 -1
- package/dist-server/server/services/telegram/control-center.js +593 -82
- package/dist-server/server/services/telegram/control-center.js.map +1 -1
- package/dist-server/server/services/telegram/telegram-gateway.js +111 -45
- package/dist-server/server/services/telegram/telegram-gateway.js.map +1 -1
- package/dist-server/server/services/telegram/translations.js +60 -0
- package/dist-server/server/services/telegram/translations.js.map +1 -1
- package/package.json +1 -1
- package/scripts/smoke/telegram-control.mjs +40 -1
- package/server/claude-sdk.js +3 -3
- package/server/cursor-cli.js +3 -3
- package/server/gemini-cli.js +3 -3
- package/server/openai-codex.js +10 -4
- package/server/opencode-cli.js +3 -3
- package/server/qwen-code-cli.js +3 -3
- package/server/routes/agent.js +24 -7
- package/server/services/telegram/control-center.js +593 -80
- package/server/services/telegram/telegram-gateway.js +115 -51
- package/server/services/telegram/translations.js +60 -0
|
@@ -217,7 +217,7 @@ import{j as i,a as AN,R as jN,o as RN,_ as j6,b as R6,T as IN,P as _N,S as ic,E
|
|
|
217
217
|
*
|
|
218
218
|
* This source code is licensed under the ISC license.
|
|
219
219
|
* See the LICENSE file in the root directory of this source tree.
|
|
220
|
-
*/const pD=[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]],mD=Nt("workflow",pD),f4=r4,hD=b7,Gw=m7,fD=a7,g4=c7,gD=n4,Mr=s4,kg=Q7,ua=t8,bD=r8,nr=u7,pa=n4,Bd=f7,b4=o7,Au=K7,ju=Z7,Sg=v7,at=a4,Ht=a4,Ru=S7,xD=w7,vD=oL,ca=A8,cn=R8,qt=W7,La=G7,x4=K8,Pn=EL,oc=d4,yD=d4,Ud=D7,lo=i8,Eo=o4,Ys=d8,co=y8,En=k8,Fn=B8,Nr=O8,hi=F8,wD=pL,kD=W8,v4=Q8,Cg=yL,SD=N7,CD=M7,ND=zL,y4=c4,Gh=cL,ED=$8,Vh=c4,w4=hL,Vt=gL,Rn=UL,k4=C8,as=rL,St=u4,Wh=u4,Iu=LL,Ng=I7,TD=j7,$d=T7,AD=E8,Er=i4,jD=i4,RD=HL,is=VL,Eg=U7,Bl=z7,Tg=l8,lc=P8,Ag=_8,or=G8,S4=o4,_u=l4,ID=l4,C4=X8,hr=tL,N4=iL,Lu=g8,E4=ML,_D=xL,To=CL,LD=kL,Dt=p8,qh=e7,cc=x8,Fr=jL,ui=IL,T4=DL,Ln=h8,jg=L7,PD=tP,Ni=oP,Rg=m4,DD=m4,zn=$P,yd=GP,Pu=WP,ws=QL,ks=rP,OD=iP,hl=cP,Zs=uP,Vw=hP,fl=gP,Zo=yP,MD=kP,A4=PP,Kh=CP,Vr=AP,Xo=EP,Ww=RP,Jo=_P,Yh=OP,FD=FP,Zh=BP,Hs=ZP,gl=JP,qa=eD,Ss=nD,zD=aD,Xh=sD,BD=cD,Qo=uD,Tr=mD,Du=xP,UD=KP,$D=[{type:"key",id:"esc",label:"Esc",sequence:"\x1B"},{type:"key",id:"tab",label:"Tab",sequence:" "},{type:"key",id:"shift-tab",label:"⇧Tab",sequence:"\x1B[Z"},{type:"modifier",id:"ctrl",label:"CTRL",modifier:"ctrl"},{type:"modifier",id:"alt",label:"ALT",modifier:"alt"},{type:"arrow",id:"arrow-up",sequence:"\x1B[A",icon:"up"},{type:"arrow",id:"arrow-down",sequence:"\x1B[B",icon:"down"},{type:"arrow",id:"arrow-left",sequence:"\x1B[D",icon:"left"},{type:"arrow",id:"arrow-right",sequence:"\x1B[C",icon:"right"}],HD={up:hD,down:f4,left:fD,right:g4},el=e=>e.preventDefault(),qw="shrink-0 rounded-md border border-gray-600 bg-gray-700 px-2.5 py-1.5 text-xs font-medium text-gray-100 transition-colors select-none active:bg-blue-600 active:text-white active:border-blue-600 disabled:cursor-not-allowed disabled:opacity-40",GD="shrink-0 rounded-md border border-blue-500 bg-blue-600 px-2.5 py-1.5 text-xs font-medium text-white transition-colors select-none disabled:cursor-not-allowed disabled:opacity-40",Ip="shrink-0 rounded-md border border-gray-600 bg-gray-700 p-1.5 text-gray-100 transition-colors select-none active:bg-blue-600 active:text-white active:border-blue-600 disabled:cursor-not-allowed disabled:opacity-40";function Kw({wsRef:e,terminalRef:t,isConnected:n,bottomOffset:r="bottom-0"}){const{t:a}=Me("settings"),[s,o]=m.useState(!1),[l,c]=m.useState(!1),[d,u]=m.useState(!1),p=m.useCallback(b=>{Ki(e.current,{type:"input",data:b})},[e]),f=m.useCallback(()=>{t.current?.scrollToBottom()},[t]),h=m.useCallback(async()=>{if(typeof navigator>"u"||!navigator.clipboard?.readText){u(!0);return}try{const b=await navigator.clipboard.readText();u(!1),b.length>0&&p(b)}catch{u(!0)}},[p]);m.useEffect(()=>{if(!d)return;const b=window.setTimeout(()=>u(!1),2500);return()=>window.clearTimeout(b)},[d]);const g=m.useCallback(b=>{let x=b;if(s&&b.length===1){const v=b.toLowerCase().charCodeAt(0);v>=97&&v<=122&&(x=String.fromCharCode(v-96)),o(!1)}l&&b.length===1&&(x="\x1B"+x,c(!1)),p(x)},[s,l,p]);return i.jsx("div",{className:`pointer-events-none fixed inset-x-0 ${r} z-20 px-2 md:hidden`,children:i.jsxs("div",{className:"pointer-events-auto flex items-center gap-1 overflow-x-auto rounded-lg border border-gray-700/80 bg-gray-900/95 px-1.5 py-1.5 shadow-lg backdrop-blur-sm [-webkit-overflow-scrolling:touch] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:[d&&i.jsx("span",{className:"shrink-0 rounded-md border border-yellow-500/50 bg-yellow-500/15 px-2 py-1 text-[11px] text-yellow-100",children:"Clipboard blocked"}),i.jsx("button",{type:"button",onPointerDown:el,onClick:()=>{h()},disabled:!n,className:Ip,title:a("terminalShortcuts.paste",{defaultValue:"Paste"}),"aria-label":a("terminalShortcuts.paste",{defaultValue:"Paste"}),children:i.jsx(lo,{className:"h-4 w-4"})}),$D.map(b=>{if(b.type==="modifier"){const x=b.modifier==="ctrl"?s:l,v=b.modifier==="ctrl"?()=>o(y=>!y):()=>c(y=>!y);return i.jsx("button",{type:"button",onPointerDown:el,onClick:v,disabled:!n,className:x?GD:qw,children:b.label},b.id)}if(b.type==="arrow"){const x=HD[b.icon];return i.jsx("button",{type:"button",onPointerDown:el,onClick:()=>p(b.sequence),disabled:!n,className:Ip,children:i.jsx(x,{className:"h-4 w-4"})},b.id)}return i.jsx("button",{type:"button",onPointerDown:el,onClick:()=>g(b.sequence),disabled:!n,className:qw,children:b.label},b.id)}),i.jsx("button",{type:"button",onPointerDown:el,onClick:f,disabled:!n,className:Ip,title:a("terminalShortcuts.scrollDown"),"aria-label":a("terminalShortcuts.scrollDown"),children:i.jsx(gD,{className:"h-4 w-4"})})]})})}function VD({tabId:e,selectedProject:t=null,selectedSession:n=null,initialCommand:r=null,isPlainShell:a=!1,onProcessComplete:s=null,minimal:o=!1,autoConnect:l=!1,forceNewSession:c=!1,startupInput:d=null,permissionOverride:u=null,provider:p=null,isActive:f=!0,onClose:h=null}){const{t:g}=Me("chat"),[b,x]=m.useState(!1),[v,y]=m.useState(null),w=m.useRef(null),k=m.useRef(null),{terminalContainerRef:S,terminalRef:C,wsRef:A,isConnected:R,isInitialized:j,isConnecting:E,authUrl:L,authUrlVersion:T,connectToShell:I,disconnectFromShell:N,openAuthUrlInBrowser:O,copyAuthUrlToClipboard:$}=K_({tabId:e,selectedProject:t,selectedSession:n,initialCommand:r,isPlainShell:a,minimal:o,autoConnect:l,forceNewSession:c,startupInput:d,permissionOverride:u,provider:p,isRestarting:b,onProcessComplete:s,onOutputRef:k}),F=m.useCallback(()=>{const we=C.current;if(!we)return;const Ce=we.buffer.active,je=Ce.baseY+Ce.cursorY,M=Math.min(Ce.baseY+Ce.length-1,je+10),J=Math.max(0,je-w_),te=[];for(let he=J;he<=M;he++){const oe=Ce.getLine(he);oe&&te.push(oe.translateToString().trimEnd())}let H=-1;for(let he=te.length-1;he>=0;he--)if(/esc to cancel/i.test(te[he])||/enter to select/i.test(te[he])){H=he;break}if(H===-1){y(null);return}const U=new Map,Q=Math.max(0,H-k_);for(let he=H-1;he>=Q;he--){const oe=te[he].match(/^\s*[❯›>]?\s*(\d+)\.\s+(.+)/);if(oe){const Ee=oe[1],fe=oe[2].trim();parseInt(Ee,10)<=S_&&fe.length>0&&!U.has(Ee)&&U.set(Ee,fe)}}const ge=[];for(let he=1;he<=U.size&&U.has(String(he));he++)ge.push({number:String(he),label:U.get(String(he))});y(ge.length>=C_?ge:null)},[C]),q=m.useCallback(()=>{w.current&&clearTimeout(w.current),w.current=setTimeout(F,y_)},[F]);m.useEffect(()=>{k.current=q},[q]),m.useEffect(()=>()=>{w.current&&clearTimeout(w.current)},[]),m.useEffect(()=>{R||(w.current&&(clearTimeout(w.current),w.current=null),y(null))},[R]),m.useEffect(()=>{if(!f||!j||!R)return;const we=()=>{C.current?.focus()},Ce=window.requestAnimationFrame(we),je=window.setTimeout(we,0);return()=>{window.cancelAnimationFrame(Ce),window.clearTimeout(je)}},[f,R,j,C]);const Y=m.useCallback(we=>{Ki(A.current,{type:"input",data:we})},[A]),P=m.useMemo(()=>$_(n),[n]),B=m.useMemo(()=>p||(n?.__provider?n.__provider:window.localStorage.getItem("selected-provider")||"claude"),[p,n?.__provider]),V=br[B]??"Claude Code",z=m.useMemo(()=>P?P.slice(0,30):null,[P]),ee=m.useMemo(()=>P?P.slice(0,50):null,[P]),ae=m.useCallback(()=>{x(!0),window.setTimeout(()=>{x(!1)},x_)},[]),ue=m.useCallback(()=>{N(),h?.()},[N,h]);if(!t)return i.jsx(Z_,{title:g("shell.selectProject.title"),description:g("shell.selectProject.description")});if(o)return i.jsxs(i.Fragment,{children:[i.jsx(J_,{terminalContainerRef:S,authUrl:L,authUrlVersion:T,initialCommand:r,isConnected:R,openAuthUrlInBrowser:O,copyAuthUrlToClipboard:$}),i.jsx(Kw,{wsRef:A,terminalRef:C,isConnected:R,bottomOffset:"bottom-0"})]});const le=a?g("shell.runCommand",{command:r||g("shell.defaultCommand"),projectName:t.displayName}):n?g("shell.resumeSession",{displayName:ee}):g("shell.startProviderSession",{provider:V,defaultValue:"Start a new {{provider}} session"}),se=a?g("shell.runCommand",{command:r||g("shell.defaultCommand"),projectName:t.displayName}):g("shell.startProviderCli",{provider:V,projectName:t.displayName,defaultValue:"Starting {{provider}} in {{projectName}}"}),me=j?E?"connecting":R?null:"connect":"loading",de=me==="connecting"?se:le;return i.jsxs("div",{className:"flex h-full w-full flex-col bg-gray-900",children:[i.jsx(X_,{isConnected:R,isInitialized:j,isRestarting:b,hasSession:!!n,sessionDisplayNameShort:z,onDisconnect:ue,onRestart:ae,statusNewSessionText:g("shell.status.newSession"),statusInitializingText:g("shell.status.initializing"),statusRestartingText:g("shell.status.restarting"),disconnectLabel:g("shell.actions.disconnect"),disconnectTitle:g("shell.actions.disconnectTitle"),restartLabel:g("shell.actions.restart"),restartTitle:g("shell.actions.restartTitle"),disableRestart:b||R}),i.jsxs("div",{className:"relative flex-1 overflow-hidden p-2",children:[i.jsx("div",{ref:S,className:"h-full w-full focus:outline-none",style:{outline:"none"}}),me&&i.jsx(Y_,{mode:me,description:de,loadingLabel:g("shell.loading"),connectLabel:g("shell.actions.connect"),connectTitle:g("shell.actions.connectTitle"),connectingLabel:g("shell.connecting"),onConnect:I}),v&&R&&i.jsx("div",{className:"absolute inset-x-0 bottom-0 z-10 border-t border-gray-700/80 bg-gray-800/95 px-3 py-2 backdrop-blur-sm",onMouseDown:we=>we.preventDefault(),children:i.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[v.map(we=>i.jsxs("button",{type:"button",onClick:()=>{Y(`${we.number}\r`),y(null)},className:"max-w-36 truncate rounded bg-blue-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-blue-700",title:`${we.number}. ${we.label}`,children:[we.number,". ",we.label]},we.number)),i.jsx("button",{type:"button",onClick:()=>{Y("\x1B"),y(null)},className:"rounded bg-gray-700 px-3 py-1.5 text-xs font-medium text-gray-200 transition-colors hover:bg-gray-600",children:"Esc"})]})})]}),i.jsx(Kw,{wsRef:A,terminalRef:C,isConnected:R})]})}function WD({className:e}){return i.jsx("div",{className:`flex h-full items-center justify-center ${e}`,children:i.jsxs("div",{className:"text-center text-gray-500 dark:text-gray-400",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-800",children:i.jsx("svg",{className:"h-8 w-8 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 002 2z"})})}),i.jsx("h3",{className:"mb-2 text-lg font-semibold",children:"No Project Selected"}),i.jsx("p",{children:"A project is required to open a shell"})]})})}function qD({title:e,isCompleted:t,onClose:n=null}){return i.jsx("div",{className:"flex-shrink-0 border-b border-gray-700 bg-gray-800 px-4 py-2",children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center space-x-2",children:[i.jsx("h3",{className:"text-sm font-medium text-gray-200",children:e}),t&&i.jsx("span",{className:"text-xs text-green-400",children:"(Completed)"})]}),n&&i.jsx("button",{onClick:n,className:"text-gray-400 hover:text-white",title:"Close",children:i.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})})}function Ul({project:e=null,session:t=null,command:n=null,isPlainShell:r=null,isActive:a=!0,autoConnect:s=!0,onComplete:o=null,onClose:l=null,title:c=null,className:d="",showHeader:u=!0,compact:p=!1,minimal:f=!1,forceNewSession:h=!1,startupInput:g=null,permissionOverride:b=null,provider:x=null,tabId:v=null}){const[y,w]=m.useState(!1),k=m.useMemo(()=>v||`tab_${crypto.randomUUID()}`,[v]),S=r!==null?r:n!==null,C=m.useCallback(A=>{w(!0),o?.(A)},[o]);return e?i.jsxs("div",{className:`flex h-full w-full flex-col ${d}`,children:[!f&&u&&c&&i.jsx(qD,{title:c,isCompleted:y,onClose:l}),i.jsx("div",{className:"min-h-0 w-full flex-1",children:i.jsx(VD,{tabId:k,selectedProject:e,selectedSession:t,initialCommand:n,isPlainShell:S,isActive:a,onProcessComplete:C,minimal:f,autoConnect:f?!0:s,forceNewSession:h,startupInput:g,permissionOverride:b,provider:x,onClose:l})})]}):i.jsx(WD,{className:d})}const KD=(e,t)=>t||(e==="claude"?"claude --dangerously-skip-permissions /login":e==="cursor"?"cursor-agent login":e==="codex"?"codex login":e==="qwen"?"qwen auth":e==="opencode"?"opencode auth login":"gemini"),YD={claude:{keyLabel:"Anthropic API Key",keyExample:"sk-ant-...",supportsBaseUrl:!0,baseUrlExample:"https://api.anthropic.com",keyConsoleUrl:"https://console.anthropic.com/settings/keys",keyConsoleLabel:"Anthropic Console"},codex:{keyLabel:"OpenAI API Key",keyExample:"sk-...",supportsBaseUrl:!0,baseUrlExample:"https://api.openai.com/v1",keyConsoleUrl:"https://platform.openai.com/api-keys",keyConsoleLabel:"OpenAI Platform"},gemini:{keyLabel:"Gemini API Key",keyExample:"AI...",supportsBaseUrl:!1,keyConsoleUrl:"https://aistudio.google.com/app/apikey",keyConsoleLabel:"Google AI Studio"},qwen:{keyLabel:"OpenAI-Compatible API Key",keyExample:"sk-... or sk-sp-...",supportsBaseUrl:!0,baseUrlExample:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",keyConsoleUrl:"https://github.com/QwenLM/qwen-code",keyConsoleLabel:"Qwen Code Docs",notes:"Accepts any OpenAI-compatible endpoint — Alibaba Cloud, ModelScope, OpenRouter, self-hosted, etc."},opencode:{keyLabel:"Anthropic API Key (default backend)",keyExample:"sk-ant-...",supportsBaseUrl:!0,baseUrlExample:"https://api.anthropic.com",keyConsoleUrl:"https://console.anthropic.com/settings/keys",keyConsoleLabel:"Anthropic Console",notes:"OpenCode is multi-provider — this sets the Anthropic credentials. Switch providers via `opencode auth login` or opencode.json."}};function Yw({active:e,children:t,onClick:n}){return i.jsx("button",{onClick:n,className:`flex-1 border-b-2 px-4 py-2.5 text-sm font-medium transition-colors ${e?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"}`,children:t})}function ZD({provider:e}){const[t,n]=m.useState(""),[r,a]=m.useState(!1),[s,o]=m.useState("idle"),[l,c]=m.useState(null),d=async()=>{const u=t.trim();if(u){a(!0),c(null),o("idle");try{const p=await Ne(`/api/providers/${e}/oauth-paste`,{method:"POST",body:JSON.stringify({callbackUrl:u})}),f=await p.json().catch(()=>({}));if(!p.ok||!f?.success)throw new Error(f?.error||`Request failed (${p.status})`);o("ok"),n("")}catch(p){c(p?.message||"Forward failed"),o("error")}finally{a(!1)}}};return i.jsxs("div",{className:"mt-3 rounded-lg border border-border/60 bg-muted/30 p-3 text-sm",children:[i.jsx("div",{className:"mb-2 font-medium text-foreground",children:"Remote login? Paste the callback URL here"}),i.jsxs("p",{className:"mb-3 text-xs text-muted-foreground",children:["When the CLI shows ",i.jsx("code",{className:"rounded bg-background px-1 font-mono text-[11px]",children:"http://127.0.0.1:PORT/…"})," and your browser can't reach it (VPS setups), copy the failing URL from your address bar and paste it below. Pixcode forwards the token exchange to the CLI process on this host."]}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx("input",{type:"url",value:t,onChange:u=>n(u.target.value),placeholder:"http://127.0.0.1:49312/callback?code=...",className:"flex-1 rounded-md border border-border bg-background px-3 py-2 font-mono text-xs text-foreground focus:border-primary focus:outline-none",onKeyDown:u=>{u.key==="Enter"&&d()}}),i.jsx("button",{onClick:()=>void d(),disabled:r||!t.trim(),className:"flex items-center gap-1.5 rounded-md bg-foreground px-3 py-2 text-xs font-medium text-background transition-opacity hover:opacity-90 disabled:opacity-40",children:r?i.jsx(Ht,{className:"h-3.5 w-3.5 animate-spin"}):"Forward"})]}),s==="ok"&&i.jsxs("div",{className:"mt-2 flex items-center gap-1.5 text-xs text-emerald-600 dark:text-emerald-400",children:[i.jsx(qt,{className:"h-3.5 w-3.5"})," Forwarded — check the terminal above for the completion message."]}),s==="error"&&l&&i.jsx("div",{className:"mt-2 text-xs text-red-600 dark:text-red-400",children:l})]})}function XD({provider:e,onSaved:t}){const n=YD[e],[r,a]=m.useState(""),[s,o]=m.useState(""),[l,c]=m.useState(!1),[d,u]=m.useState("idle"),[p,f]=m.useState(null);m.useEffect(()=>{let g=!1;return(async()=>{try{const x=await(await Ne("/api/providers/credentials")).json().catch(()=>({}));if(g||!x?.success)return;const v=x.data?.[e];v?.baseUrl&&o(v.baseUrl)}catch{}})(),()=>{g=!0}},[e]);const h=async()=>{const g=r.trim();if(g){c(!0),f(null),u("idle");try{const b=await Ne(`/api/providers/${e}/auth/api-key`,{method:"POST",body:JSON.stringify({apiKey:g,baseUrl:n.supportsBaseUrl&&s.trim()?s.trim():""})}),x=await b.json().catch(()=>({}));if(!b.ok||!x?.success)throw new Error(x?.error||`Request failed (${b.status})`);u("ok"),a(""),t()}catch(b){f(b?.message||"Save failed"),u("error")}finally{c(!1)}}};return n?i.jsx("div",{className:"flex h-full flex-col overflow-y-auto p-6",children:i.jsxs("div",{className:"mx-auto w-full max-w-lg space-y-5",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-full bg-muted",children:i.jsx(ID,{className:"h-5 w-5 text-foreground"})}),i.jsxs("div",{children:[i.jsx("h4",{className:"text-base font-semibold text-foreground",children:n.keyLabel}),i.jsxs("a",{href:n.keyConsoleUrl,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground",children:["Get a key from ",n.keyConsoleLabel,i.jsx(nr,{className:"h-3 w-3"})]})]})]}),n.notes&&i.jsx("div",{className:"rounded-md border border-border/60 bg-muted/40 p-3 text-xs text-muted-foreground",children:n.notes}),i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("label",{className:"text-xs font-medium text-foreground",children:"API Key"}),i.jsx("input",{type:"password",value:r,onChange:g=>a(g.target.value),placeholder:n.keyExample,className:"w-full rounded-md border border-border bg-background px-3 py-2 font-mono text-sm text-foreground focus:border-primary focus:outline-none",autoComplete:"off",spellCheck:!1}),i.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Stored locally at ",i.jsx("code",{className:"rounded bg-muted px-1 font-mono text-[10px]",children:"~/.pixcode/provider-credentials.json"})," with 0600 permissions."]})]}),n.supportsBaseUrl&&i.jsxs("div",{className:"space-y-1.5",children:[i.jsxs("label",{className:"text-xs font-medium text-foreground",children:["Base URL ",i.jsx("span",{className:"font-normal text-muted-foreground",children:"(optional — use a custom endpoint)"})]}),i.jsx("input",{type:"url",value:s,onChange:g=>o(g.target.value),placeholder:n.baseUrlExample,className:"w-full rounded-md border border-border bg-background px-3 py-2 font-mono text-sm text-foreground focus:border-primary focus:outline-none",autoComplete:"off",spellCheck:!1}),i.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Point at any OpenAI-compatible proxy (OpenRouter, local LLM, self-hosted, budget provider) to cut costs or hit different models."})]}),i.jsxs("div",{className:"flex items-center gap-3 pt-2",children:[i.jsxs("button",{onClick:()=>void h(),disabled:l||!r.trim(),className:"inline-flex items-center gap-2 rounded-md bg-foreground px-4 py-2 text-sm font-medium text-background transition-opacity hover:opacity-90 disabled:opacity-40",children:[l?i.jsx(Ht,{className:"h-4 w-4 animate-spin"}):i.jsx(qt,{className:"h-4 w-4"}),"Save API Key"]}),d==="ok"&&i.jsx("span",{className:"text-xs text-emerald-600 dark:text-emerald-400",children:"Saved — reconnect to pick it up."}),d==="error"&&p&&i.jsx("span",{className:"text-xs text-red-600 dark:text-red-400",children:p})]})]})}):i.jsx("div",{className:"p-6 text-sm text-muted-foreground",children:"This provider uses OAuth only — use the Browser tab to log in."})}function j4({isOpen:e,onClose:t,provider:n="claude",onComplete:r,customCommand:a,isAuthenticated:s=!1}){const{t:o}=Me("common"),l=n!=="cursor",[c,d]=m.useState(l?"apiKey":"browser");m.useEffect(()=>{e&&d(l?"apiKey":"browser")},[e,n,l]);const u=m.useMemo(()=>`${br[n]??n} Login`,[n]);if(!e)return null;const p=KD(n,a),f=h=>r?.(h);return i.jsx("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black bg-opacity-50 max-md:items-stretch max-md:justify-stretch",children:i.jsxs("div",{className:"flex h-3/4 w-full max-w-4xl flex-col rounded-lg bg-white shadow-xl dark:bg-gray-800 max-md:m-0 max-md:h-full max-md:max-w-none max-md:rounded-none md:m-4 md:h-3/4 md:max-w-4xl md:rounded-lg",children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-gray-200 p-4 dark:border-gray-700",children:[i.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:u}),i.jsx("button",{onClick:t,className:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300","aria-label":"Close login modal",children:i.jsx(St,{className:"h-6 w-6"})})]}),i.jsxs("div",{className:"flex border-b border-gray-200 dark:border-gray-700",children:[i.jsx(Yw,{active:c==="browser",onClick:()=>d("browser"),children:"Browser / OAuth"}),l&&i.jsx(Yw,{active:c==="apiKey",onClick:()=>d("apiKey"),children:"API Key"})]}),i.jsx("div",{className:"flex flex-1 flex-col overflow-hidden",children:c==="browser"?i.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden",children:[i.jsx("div",{className:"min-h-0 flex-1",children:i.jsx(Ul,{project:i_,command:p,onComplete:f,minimal:!0})}),i.jsx("div",{className:"border-t border-border/40 bg-background/50 px-4 py-3",children:i.jsx(ZD,{provider:n})})]}):i.jsx(XD,{provider:n,onSaved:()=>f(0)})})]})})}const JD=({className:e="w-5 h-5"})=>i.jsx("img",{src:"/icons/claude-ai-icon.svg",alt:"Claude",className:e}),QD=({className:e="w-5 h-5"})=>{const{isDarkMode:t}=Ga();return i.jsx("img",{src:t?"/icons/codex-white.svg":"/icons/codex.svg",alt:"Codex",className:e})},eO=({className:e="w-5 h-5"})=>{const{isDarkMode:t}=Ga();return i.jsx("img",{src:t?"/icons/cursor-white.svg":"/icons/cursor.svg",alt:"Cursor",className:e})},tO=({className:e="w-5 h-5"})=>i.jsx("img",{src:"/icons/gemini-ai-icon.svg",alt:"Gemini",className:e}),nO=({className:e="w-5 h-5"})=>{const{isDarkMode:t}=Ga(),n=t?"/icons/opencode-logo-dark.svg":"/icons/opencode-logo-light.svg";return i.jsx("img",{src:n,alt:"OpenCode",className:e})},rO=({className:e="w-5 h-5"})=>i.jsx("img",{src:"/icons/qwen-logo.svg",alt:"Qwen Code",className:e});function nn({provider:e="claude",className:t="w-5 h-5"}){return e==="cursor"?i.jsx(eO,{className:t}):e==="codex"?i.jsx(QD,{className:t}):e==="gemini"?i.jsx(tO,{className:t}):e==="qwen"?i.jsx(rO,{className:t}):e==="opencode"?i.jsx(nO,{className:t}):i.jsx(JD,{className:t})}function aO({provider:e,title:t,status:n,connectedClassName:r,iconContainerClassName:a,loginButtonClassName:s,onLogin:o}){const l=n.authenticated?r:"border-border bg-card",c=n.loading?"Checking...":n.authenticated?n.email||"Connected":n.error||"Not connected";return i.jsx("div",{className:`rounded-lg border p-4 transition-colors ${l}`,children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:`flex h-10 w-10 items-center justify-center rounded-full ${a}`,children:i.jsx(nn,{provider:e,className:"h-5 w-5"})}),i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center gap-2 font-medium text-foreground",children:[t,n.authenticated&&i.jsx(qt,{className:"h-4 w-4 text-green-500"})]}),i.jsx("div",{className:"text-xs text-muted-foreground",children:c})]})]}),!n.authenticated&&!n.loading&&i.jsx("button",{onClick:o,className:`${s} rounded-lg px-4 py-2 text-sm font-medium text-white transition-colors`,children:"Login"})]})})}const iO=[{provider:"claude",title:"Claude Code",connectedClassName:"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800",iconContainerClassName:"bg-blue-100 dark:bg-blue-900/30",loginButtonClassName:"bg-blue-600 hover:bg-blue-700"},{provider:"cursor",title:"Cursor",connectedClassName:"bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800",iconContainerClassName:"bg-purple-100 dark:bg-purple-900/30",loginButtonClassName:"bg-purple-600 hover:bg-purple-700"},{provider:"codex",title:"OpenAI Codex",connectedClassName:"bg-gray-100 dark:bg-gray-800/50 border-gray-300 dark:border-gray-600",iconContainerClassName:"bg-gray-100 dark:bg-gray-800",loginButtonClassName:"bg-gray-800 hover:bg-gray-900 dark:bg-gray-700 dark:hover:bg-gray-600"},{provider:"gemini",title:"Gemini",connectedClassName:"bg-teal-50 dark:bg-teal-900/20 border-teal-200 dark:border-teal-800",iconContainerClassName:"bg-teal-100 dark:bg-teal-900/30",loginButtonClassName:"bg-teal-600 hover:bg-teal-700"},{provider:"qwen",title:"Qwen Code",connectedClassName:"bg-orange-50 dark:bg-orange-900/20 border-orange-200 dark:border-orange-800",iconContainerClassName:"bg-orange-100 dark:bg-orange-900/30",loginButtonClassName:"bg-orange-600 hover:bg-orange-700"}];function Zw({providerStatuses:e,onOpenProviderLogin:t}){return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"mb-6 text-center",children:[i.jsx("h2",{className:"mb-2 text-2xl font-bold text-foreground",children:"Connect Your AI Agents"}),i.jsx("p",{className:"text-muted-foreground",children:"Login to one or more AI coding assistants. All are optional."})]}),i.jsx("div",{className:"space-y-3",children:iO.map(n=>i.jsx(aO,{provider:n.provider,title:n.title,status:e[n.provider],connectedClassName:n.connectedClassName,iconContainerClassName:n.iconContainerClassName,loginButtonClassName:n.loginButtonClassName,onLogin:()=>t(n.provider)},n.provider))}),i.jsx("div",{className:"pt-2 text-center text-sm text-muted-foreground",children:i.jsx("p",{children:"You can configure these later in Settings."})})]})}function sO({gitName:e,gitEmail:t,isSubmitting:n,onGitNameChange:r,onGitEmailChange:a}){return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"mb-8 text-center",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-blue-100 dark:bg-blue-900/30",children:i.jsx(zn,{className:"h-8 w-8 text-blue-600 dark:text-blue-400"})}),i.jsx("h2",{className:"mb-2 text-2xl font-bold text-foreground",children:"Git Configuration"}),i.jsx("p",{className:"text-muted-foreground",children:"Configure your git identity to ensure proper attribution for commits."})]}),i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{children:[i.jsxs("label",{htmlFor:"gitName",className:"mb-2 flex items-center gap-2 text-sm font-medium text-foreground",children:[i.jsx(RD,{className:"h-4 w-4"}),"Git Name ",i.jsx("span",{className:"text-red-500",children:"*"})]}),i.jsx("input",{type:"text",id:"gitName",value:e,onChange:s=>r(s.target.value),className:"w-full rounded-lg border border-border bg-background px-4 py-3 text-foreground focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"John Doe",required:!0,disabled:n}),i.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Saved as `git config --global user.name`."})]}),i.jsxs("div",{children:[i.jsxs("label",{htmlFor:"gitEmail",className:"mb-2 flex items-center gap-2 text-sm font-medium text-foreground",children:[i.jsx(AD,{className:"h-4 w-4"}),"Git Email ",i.jsx("span",{className:"text-red-500",children:"*"})]}),i.jsx("input",{type:"email",id:"gitEmail",value:t,onChange:s=>a(s.target.value),className:"w-full rounded-lg border border-border bg-background px-4 py-3 text-foreground focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"john@example.com",required:!0,disabled:n}),i.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Saved as `git config --global user.email`."})]})]})]})}const Xw=[{title:"Git Configuration",icon:zn,required:!0},{title:"Connect Agents",icon:b4,required:!1}];function oO({currentStep:e}){return i.jsx("div",{className:"mb-8",children:i.jsx("div",{className:"flex items-center justify-between",children:Xw.map((t,n)=>{const r=n<e,a=n===e,s=t.icon;return i.jsxs("div",{className:"contents",children:[i.jsxs("div",{className:"flex flex-1 flex-col items-center",children:[i.jsx("div",{className:`flex h-12 w-12 items-center justify-center rounded-full border-2 transition-colors duration-200 ${r?"border-green-500 bg-green-500 text-white":a?"border-blue-600 bg-blue-600 text-white":"border-border bg-background text-muted-foreground"}`,children:r?i.jsx(qt,{className:"h-6 w-6"}):i.jsx(s,{className:"h-6 w-6"})}),i.jsxs("div",{className:"mt-2 text-center",children:[i.jsx("p",{className:`text-sm font-medium ${a?"text-foreground":"text-muted-foreground"}`,children:t.title}),t.required&&i.jsx("span",{className:"text-xs text-red-500",children:"Required"})]})]}),n<Xw.length-1&&i.jsx("div",{className:`mx-2 h-0.5 flex-1 transition-colors duration-200 ${r?"bg-green-500":"bg-border"}`})]},t.title)})})})}const Jw=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,Qw=async(e,t)=>{try{return(await e.json()).error||t}catch{return t}};function lO({onComplete:e}){const[t,n]=m.useState(0),[r,a]=m.useState(""),[s,o]=m.useState(""),[l,c]=m.useState(!1),[d,u]=m.useState(""),[p,f]=m.useState(null),{providerAuthStatus:h,checkProviderAuthStatus:g,refreshProviderAuthStatuses:b}=Tu(),x=m.useRef(void 0),v=m.useCallback(async()=>{try{const R=await Ne("/api/user/git-config");if(!R.ok)return;const j=await R.json();j.gitName&&a(j.gitName),j.gitEmail&&o(j.gitEmail)}catch(R){console.error("Error loading git config:",R)}},[]);m.useEffect(()=>{v(),b()},[v,b]),m.useEffect(()=>{const R=x.current;x.current=p,R!=null&&p===null&&b()},[p,b]);const y=R=>{f(R)},w=R=>{R===0&&p&&g(p)},k=async()=>{if(u(""),t!==0){n(R=>R+1);return}if(!r.trim()||!s.trim()){u("Both git name and email are required.");return}if(!Jw.test(s)){u("Please enter a valid email address.");return}c(!0);try{const R=await Ne("/api/user/git-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({gitName:r,gitEmail:s})});if(!R.ok){const j=await Qw(R,"Failed to save git configuration");throw new Error(j)}n(j=>j+1)}catch(R){u(R instanceof Error?R.message:"Failed to save git configuration")}finally{c(!1)}},S=()=>{u(""),n(R=>R-1)},C=async()=>{c(!0),u("");try{const R=await Ne("/api/user/complete-onboarding",{method:"POST"});if(!R.ok){const j=await Qw(R,"Failed to complete onboarding");throw new Error(j)}await e?.()}catch(R){u(R instanceof Error?R.message:"Failed to complete onboarding")}finally{c(!1)}},A=t===0?!!(r.trim()&&s.trim()&&Jw.test(s)):!0;return i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background p-4",children:i.jsxs("div",{className:"w-full max-w-2xl",children:[i.jsx(oO,{currentStep:t}),i.jsxs("div",{className:"rounded-lg border border-border bg-card p-8 shadow-lg",children:[t===0?i.jsx(sO,{gitName:r,gitEmail:s,isSubmitting:l,onGitNameChange:a,onGitEmailChange:o}):t===1?i.jsx(Zw,{providerStatuses:h,onOpenProviderLogin:y}):i.jsx(Zw,{providerStatuses:h,onOpenProviderLogin:y}),d&&i.jsx("div",{className:"mt-6 rounded-lg border border-red-300 bg-red-100 p-4 dark:border-red-800 dark:bg-red-900/20",children:i.jsx("p",{className:"text-sm text-red-700 dark:text-red-400",children:d})}),i.jsxs("div",{className:"mt-8 flex items-center justify-between border-t border-border pt-6",children:[i.jsxs("button",{onClick:S,disabled:t===0||l,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-muted-foreground transition-colors duration-200 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",children:[i.jsx(kg,{className:"h-4 w-4"}),"Previous"]}),i.jsx("div",{className:"flex items-center gap-3",children:t<1?i.jsx("button",{onClick:k,disabled:!A||l,className:"flex items-center gap-2 rounded-lg bg-blue-600 px-6 py-3 font-medium text-white transition-colors duration-200 hover:bg-blue-700 disabled:cursor-not-allowed disabled:bg-blue-400",children:l?i.jsxs(i.Fragment,{children:[i.jsx(Ht,{className:"h-4 w-4 animate-spin"}),"Saving..."]}):i.jsxs(i.Fragment,{children:["Next",i.jsx(ua,{className:"h-4 w-4"})]})}):i.jsx("button",{onClick:C,disabled:l,className:"flex items-center gap-2 rounded-lg bg-green-600 px-6 py-3 font-medium text-white transition-colors duration-200 hover:bg-green-700 disabled:cursor-not-allowed disabled:bg-green-400",children:l?i.jsxs(i.Fragment,{children:[i.jsx(Ht,{className:"h-4 w-4 animate-spin"}),"Completing..."]}):i.jsxs(i.Fragment,{children:[i.jsx(qt,{className:"h-4 w-4"}),"Complete Setup"]})})})]})]})]})}),p&&i.jsx(j4,{isOpen:!!p,onClose:()=>f(null),provider:p,onComplete:w})]})}const cO=["0s","0.1s","0.2s"];function dO(){return i.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background p-4",children:i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"mb-4 flex justify-center",children:i.jsx("div",{className:"flex h-16 w-16 items-center justify-center rounded-lg bg-primary shadow-sm",children:i.jsx(Er,{className:"h-8 w-8 text-primary-foreground"})})}),i.jsx("h1",{className:"mb-2 text-2xl font-bold text-foreground",children:"Pixcode"}),i.jsx("div",{className:"flex items-center justify-center space-x-2",children:cO.map(e=>i.jsx("div",{className:"h-2 w-2 animate-bounce rounded-full bg-blue-500",style:{animationDelay:e}},e))}),i.jsx("p",{className:"mt-2 text-muted-foreground",children:"Loading..."})]})})}function R4({errorMessage:e}){return e?i.jsx("div",{className:"rounded-md border border-red-300 bg-red-100 p-3 dark:border-red-800 dark:bg-red-900/20",children:i.jsx("p",{className:"text-sm text-red-700 dark:text-red-400",children:e})}):null}function Gi({id:e,label:t,value:n,onChange:r,placeholder:a,isDisabled:s,type:o="text",name:l,autoComplete:c}){return i.jsxs("div",{children:[i.jsx("label",{htmlFor:e,className:"mb-1 block text-sm font-medium text-foreground",children:t}),i.jsx("input",{id:e,type:o,name:l??e,autoComplete:c,value:n,onChange:d=>r(d.target.value),className:"w-full rounded-md border border-border bg-background px-3 py-2 text-foreground focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:a,required:!0,disabled:s})]})}function I4({title:e,description:t,children:n,footerText:r,logo:a}){return i.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background p-4",children:i.jsx("div",{className:"w-full max-w-md",children:i.jsxs("div",{className:"space-y-6 rounded-lg border border-border bg-card p-8 shadow-lg",children:[i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"mb-4 flex justify-center",children:a??i.jsx("div",{className:"flex h-16 w-16 items-center justify-center rounded-lg bg-primary shadow-sm",children:i.jsx(Er,{className:"h-8 w-8 text-primary-foreground"})})}),i.jsx("h1",{className:"text-2xl font-bold text-foreground",children:e}),i.jsx("p",{className:"mt-2 text-muted-foreground",children:t})]}),n,i.jsx("div",{className:"text-center",children:i.jsx("p",{className:"text-sm text-muted-foreground",children:r})}),i.jsxs("div",{className:"flex items-center justify-center gap-1.5 pt-2",children:[i.jsx("svg",{className:"h-3.5 w-3.5 text-muted-foreground/50",fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:i.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})}),i.jsx("a",{href:"https://github.com/alicomert/pixcode",target:"_blank",rel:"noopener noreferrer",className:"text-xs text-muted-foreground/50 transition-colors hover:text-muted-foreground",children:"Pixcode is open source"})]})]})})})}const uO={username:"",password:""};function pO(){const{t:e}=Me("auth"),{login:t}=sc(),[n,r]=m.useState(uO),[a,s]=m.useState(""),[o,l]=m.useState(!1),c=m.useCallback((u,p)=>{r(f=>({...f,[u]:p}))},[]),d=m.useCallback(async u=>{if(u.preventDefault(),s(""),!n.username.trim()||!n.password){s(e("login.errors.requiredFields"));return}l(!0);const p=await t(n.username.trim(),n.password);p.success||s(p.error),l(!1)},[n.password,n.username,t,e]);return i.jsx(I4,{title:e("login.title"),description:e("login.description"),footerText:"Enter your credentials to access Pixcode",children:i.jsxs("form",{onSubmit:d,className:"space-y-4",children:[i.jsx(Gi,{id:"username",label:e("login.username"),value:n.username,onChange:u=>c("username",u),placeholder:e("login.placeholders.username"),isDisabled:o,autoComplete:"username"}),i.jsx(Gi,{id:"password",label:e("login.password"),value:n.password,onChange:u=>c("password",u),placeholder:e("login.placeholders.password"),isDisabled:o,type:"password",autoComplete:"current-password"}),i.jsx(R4,{errorMessage:a}),i.jsx("button",{type:"submit",disabled:o,className:"w-full rounded-md bg-blue-600 px-4 py-2 font-medium text-white transition-colors duration-200 hover:bg-blue-700 disabled:bg-blue-400",children:e(o?"login.loading":"login.submit")})]})})}const mO={username:"",password:"",confirmPassword:"",connectionMode:"local",remoteUrl:"",remoteApiKey:""};function hO(e){return!e.username.trim()||!e.password||!e.confirmPassword?"Please fill in all fields.":e.username.trim().length<3?"Username must be at least 3 characters long.":e.password.length<6?"Password must be at least 6 characters long.":e.password!==e.confirmPassword?"Passwords do not match.":e.connectionMode==="remote"&&!e.remoteUrl.trim()?"Remote Pixcode server URL is required.":null}function fO(){const{register:e}=sc(),[t,n]=m.useState(mO),[r,a]=m.useState(""),[s,o]=m.useState(!1),l=m.useCallback((d,u)=>{n(p=>({...p,[d]:u}))},[]),c=m.useCallback(async d=>{d.preventDefault(),a("");const u=hO(t);if(u){a(u);return}o(!0);const p=await fetch("/api/auth/connection-mode",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:t.connectionMode,remoteUrl:t.connectionMode==="remote"?t.remoteUrl.trim():null,apiKey:t.connectionMode==="remote"?t.remoteApiKey.trim():null})});if(!p.ok){const h=await p.json().catch(()=>null);a(h?.error||"Could not save connection mode."),o(!1);return}const f=await e(t.username.trim(),t.password);f.success||a(f.error),o(!1)},[t,e]);return i.jsx(I4,{title:"Welcome to Pixcode",description:"Create the first admin account to get started",footerText:"The first account becomes admin and can add more users later.",logo:i.jsx("img",{src:"/logo.svg",alt:"Pixcode",className:"h-16 w-16"}),children:i.jsxs("form",{onSubmit:c,className:"space-y-4",children:[i.jsxs("div",{className:"grid gap-2 rounded-lg border border-border/70 bg-muted/30 p-2 sm:grid-cols-2",children:[i.jsxs("button",{type:"button",onClick:()=>l("connectionMode","local"),disabled:s,className:`rounded-md px-3 py-2 text-left text-sm transition-colors ${t.connectionMode==="local"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:bg-background/60 hover:text-foreground"}`,children:[i.jsx("span",{className:"block font-medium",children:"Use this computer directly"}),i.jsx("span",{className:"block text-xs opacity-80",children:"Run Pixcode and CLIs on this machine."})]}),i.jsxs("button",{type:"button",onClick:()=>l("connectionMode","remote"),disabled:s,className:`rounded-md px-3 py-2 text-left text-sm transition-colors ${t.connectionMode==="remote"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:bg-background/60 hover:text-foreground"}`,children:[i.jsx("span",{className:"block font-medium",children:"Connect to a remote Pixcode server"}),i.jsx("span",{className:"block text-xs opacity-80",children:"Control another always-on Pixcode host by API."})]})]}),t.connectionMode==="remote"&&i.jsxs("div",{className:"space-y-3 rounded-lg border border-border/70 bg-muted/20 p-3",children:[i.jsx(Gi,{id:"remoteUrl",name:"remoteUrl",label:"Remote API URL",value:t.remoteUrl,onChange:d=>l("remoteUrl",d),placeholder:"https://your-server.example.com",isDisabled:s,autoComplete:"url"}),i.jsx(Gi,{id:"remoteApiKey",name:"remoteApiKey",label:"Remote API Key",value:t.remoteApiKey,onChange:d=>l("remoteApiKey",d),placeholder:"px_...",isDisabled:s,type:"password",autoComplete:"off"})]}),i.jsx(Gi,{id:"username",name:"username",label:"Username",value:t.username,onChange:d=>l("username",d),placeholder:"Enter your username",isDisabled:s,autoComplete:"username"}),i.jsx(Gi,{id:"password",name:"password",label:"Password",value:t.password,onChange:d=>l("password",d),placeholder:"Enter your password",isDisabled:s,type:"password",autoComplete:"new-password"}),i.jsx(Gi,{id:"confirmPassword",name:"confirmPassword",label:"Confirm Password",value:t.confirmPassword,onChange:d=>l("confirmPassword",d),placeholder:"Confirm your password",isDisabled:s,type:"password",autoComplete:"new-password"}),i.jsx(R4,{errorMessage:r}),i.jsx("button",{type:"submit",disabled:s,className:"w-full rounded-md bg-blue-600 px-4 py-2 font-medium text-white transition-colors duration-200 hover:bg-blue-700 disabled:bg-blue-400",children:s?"Setting up...":"Create Account"})]})})}function gO({children:e}){const{user:t,isLoading:n,needsSetup:r,hasCompletedOnboarding:a,refreshOnboardingStatus:s}=sc();return n?i.jsx(dO,{}):r?i.jsx(fO,{}):t?a?i.jsx(i.Fragment,{children:e}):i.jsx(lO,{onComplete:s}):i.jsx(pO,{})}const _4=m.createContext(null),L4=()=>{const e=m.useContext(_4);if(!e)throw new Error("useWebSocket must be used within a WebSocketProvider");return e},bO=e=>{const t=window.location.protocol==="https:"?"wss:":"ws:";return e?`${t}//${window.location.host}/ws?token=${encodeURIComponent(e)}`:null},xO=()=>{const e=m.useRef(null),t=m.useRef(!1),n=m.useRef(!1),[r,a]=m.useState(null),[s,o]=m.useState(!1),l=m.useRef(null),{token:c}=sc(),d=m.useCallback(()=>{if(!t.current)try{const f=bO(c);if(!f)return console.warn("No authentication token found for WebSocket connection");const h=new WebSocket(f);h.onopen=()=>{o(!0),e.current=h,n.current&&a({type:"websocket-reconnected",timestamp:Date.now()}),n.current=!0},h.onmessage=g=>{try{const b=JSON.parse(g.data);a(b)}catch(b){console.error("Error parsing WebSocket message:",b)}},h.onclose=()=>{o(!1),e.current=null,l.current=setTimeout(()=>{t.current||d()},3e3)},h.onerror=g=>{console.error("WebSocket error:",g)}}catch(f){console.error("Error creating WebSocket connection:",f)}},[c]);m.useEffect(()=>(d(),()=>{t.current=!0,l.current&&clearTimeout(l.current),e.current&&e.current.close()}),[d]);const u=m.useCallback(f=>{const h=e.current;h&&h.readyState===WebSocket.OPEN?h.send(JSON.stringify(f)):console.warn("WebSocket not connected")},[]);return m.useMemo(()=>({ws:e.current,sendMessage:u,latestMessage:r,isConnected:s}),[u,r,s])},vO=({children:e})=>{const t=xO();return i.jsx(_4.Provider,{value:t,children:e})},P4=m.createContext(null);function Ou(){const e=m.useContext(P4);if(!e)throw new Error("usePlugins must be used within a PluginsProvider");return e}function yO({children:e}){const{user:t,token:n,isLoading:r}=sc(),[a,s]=m.useState([]),[o,l]=m.useState(!0),[c,d]=m.useState(null),u=!!(t&&n),p=m.useCallback(async()=>{if(!u){s([]),d(null),l(!1);return}l(!0);try{const x=await Ne("/api/plugins");if(x.ok){const v=await x.json();s(v.plugins||[]),d(null)}else{let v=`Failed to fetch plugins (${x.status})`;try{const y=await x.json();v=y.details||y.error||v}catch{v=x.statusText||v}d(v)}}catch(x){const v=x instanceof Error?x.message:"Failed to fetch plugins";d(v),console.error("[Plugins] Failed to fetch plugins:",x)}finally{l(!1)}},[u]);m.useEffect(()=>{r||p()},[r,p]);const f=m.useCallback(async x=>{try{const v=await Ne("/api/plugins/install",{method:"POST",body:JSON.stringify({url:x})}),y=await v.json();return v.ok?(await p(),{success:!0}):{success:!1,error:y.details||y.error||"Install failed"}}catch(v){return{success:!1,error:v instanceof Error?v.message:"Install failed"}}},[p]),h=m.useCallback(async x=>{try{const v=await Ne(`/api/plugins/${encodeURIComponent(x)}`,{method:"DELETE"}),y=await v.json();return v.ok?(await p(),{success:!0}):{success:!1,error:y.details||y.error||"Uninstall failed"}}catch(v){return{success:!1,error:v instanceof Error?v.message:"Uninstall failed"}}},[p]),g=m.useCallback(async x=>{try{const v=await Ne(`/api/plugins/${encodeURIComponent(x)}/update`,{method:"POST"}),y=await v.json();return v.ok?(await p(),{success:!0}):{success:!1,error:y.details||y.error||"Update failed"}}catch(v){return{success:!1,error:v instanceof Error?v.message:"Update failed"}}},[p]),b=m.useCallback(async(x,v)=>{try{const y=await Ne(`/api/plugins/${encodeURIComponent(x)}/enable`,{method:"PUT",body:JSON.stringify({enabled:v})});if(!y.ok){let w=`Toggle failed (${y.status})`;try{const k=await y.json();w=k.details||k.error||w}catch{w=y.statusText||w}return{success:!1,error:w}}return await p(),{success:!0,error:null}}catch(y){return{success:!1,error:y instanceof Error?y.message:"Toggle failed"}}},[p]);return i.jsx(P4.Provider,{value:{plugins:a,loading:o,pluginsError:c,refreshPlugins:p,installPlugin:f,uninstallPlugin:h,updatePlugin:g,togglePlugin:b},children:e})}const ek=e=>typeof window>"u"?!1:window.innerWidth<e,tk=()=>{if(typeof window>"u")return!1;const e=window.navigator;return window.matchMedia("(display-mode: standalone)").matches||!!e.standalone||document.referrer.includes("android-app://")};function Ig(e={}){const{mobileBreakpoint:t=768,trackMobile:n=!0,trackPWA:r=!0}=e,[a,s]=m.useState(()=>n?ek(t):!1),[o,l]=m.useState(()=>r?tk():!1);return m.useEffect(()=>{if(!n||typeof window>"u")return;const c=()=>{s(ek(t))};return c(),window.addEventListener("resize",c),()=>{window.removeEventListener("resize",c)}},[t,n]),m.useEffect(()=>{if(!r||typeof window>"u")return;const c=window.matchMedia("(display-mode: standalone)"),d=()=>{l(tk())};return d(),typeof c.addEventListener=="function"?(c.addEventListener("change",d),()=>{c.removeEventListener("change",d)}):(c.addListener(d),()=>{c.removeListener(d)})},[r]),{isMobile:a,isPWA:o}}const _g="pixcode.updateCheck.preferences",Jh="pixcode:update-check-settings-changed",Lg=[{value:"30m",label:"Every 30 minutes",intervalMs:1800*1e3},{value:"24h",label:"Daily",intervalMs:1440*60*1e3},{value:"12h",label:"Every 12 hours",intervalMs:720*60*1e3},{value:"6h",label:"Every 6 hours",intervalMs:360*60*1e3},{value:"7d",label:"Weekly",intervalMs:10080*60*1e3},{value:"off",label:"Manual only",intervalMs:null}],Qh={frequency:"30m"};function nk(e){return Lg.find(t=>t.value===e.frequency)?.intervalMs??null}function D4(e){if(!e||typeof e!="object")return Qh;const t=e.frequency;return Lg.some(n=>n.value===t)?{frequency:t}:Qh}function rk(){try{const e=localStorage.getItem(_g);return D4(e?JSON.parse(e):null)}catch{return Qh}}function wO(e){const t=D4(e);localStorage.setItem(_g,JSON.stringify(t)),window.dispatchEvent(new CustomEvent(Jh,{detail:t}))}const _p=(e,t)=>{const n=e.split(".").map(Number),r=t.split(".").map(Number);for(let a=0;a<Math.max(n.length,r.length);a++){const s=n[a]||0,o=r[a]||0;if(s!==o)return s-o}return 0},kO="1.53.5",Hd="pixcode:update-available",SO=360*60*1e3,Lp=new Map;function O4(e,t){return`pixcode.updateCheck.cache.${e}.${t}`}function CO(e,t){try{const n=localStorage.getItem(O4(e,t));if(!n)return null;const r=JSON.parse(n);return{fetchedAt:typeof r.fetchedAt=="number"?r.fetchedAt:null,latestVersion:typeof r.latestVersion=="string"?r.latestVersion:null,releaseInfo:r.releaseInfo??null,rateLimitedUntil:typeof r.rateLimitedUntil=="number"?r.rateLimitedUntil:void 0}}catch{return null}}function ak(e,t,n){localStorage.setItem(O4(e,t),JSON.stringify(n))}function NO(e,t){const n=`${e}/${t}`,r=Lp.get(n);if(r)return r;const a=fetch(`https://api.github.com/repos/${e}/${t}/releases/latest`,{cache:"no-store",headers:{Accept:"application/vnd.github+json"}}).then(async s=>({status:s.status,ok:s.ok,data:await s.json().catch(()=>({}))})).finally(()=>{Lp.delete(n)});return Lp.set(n,a),a}const Pg=(e,t)=>{const[n,r]=m.useState(!1),[a,s]=m.useState(null),[o,l]=m.useState(null),[c,d]=m.useState("git"),[u,p]=m.useState("idle"),[f,h]=m.useState(null),[g,b]=m.useState(()=>rk()),[x,v]=m.useState(kO),y=m.useRef(null),w=m.useCallback(S=>{wO(S),b(S)},[]);m.useEffect(()=>{const S=()=>b(rk()),C=A=>{A.key===_g&&S()};return window.addEventListener("storage",C),window.addEventListener(Jh,S),()=>{window.removeEventListener("storage",C),window.removeEventListener(Jh,S)}},[]),m.useEffect(()=>{let S=!1;const C=async()=>{try{const j=await(await fetch("/health",{cache:"no-store"})).json();if(S)return;(j.installMode==="npm"||j.installMode==="git")&&d(j.installMode),typeof j.version=="string"&&/^\d+\.\d+\.\d+/.test(j.version)&&v(j.version)}catch{}};C();const A=()=>{C()};return window.addEventListener("focus",A),()=>{S=!0,window.removeEventListener("focus",A)}},[]),m.useEffect(()=>{if(!x)return;let S=!1;const C=(T,I,N,O)=>({updateAvailable:!!(T&&_p(T,x)>0),latestVersion:T,releaseInfo:I,currentVersion:x,checkedAt:N,status:O}),A=T=>{!T.updateAvailable||!T.latestVersion||!T.releaseInfo||window.dispatchEvent(new CustomEvent(Hd,{detail:T}))},R=(T,I,N,O="success")=>{if(!T||!I)return r(!1),s(null),l(null),h(N),C(null,null,N,O);s(T),r(_p(T,x)>0),l(I),h(N);const $=C(T,I,N,O);return A($),$},j=async({force:T=!1}={})=>{const I=nk(g),N=CO(e,t),O=Date.now();if(!T&&I===null)return p("idle"),R(N?.latestVersion??null,N?.releaseInfo??null,N?.fetchedAt??null,"idle");if(!T&&N?.fetchedAt&&I!==null&&O-N.fetchedAt<I)return p("success"),R(N.latestVersion,N.releaseInfo,N.fetchedAt,"success");if(!T&&N?.rateLimitedUntil&&N.rateLimitedUntil>O)return p("error"),R(N.latestVersion,N.releaseInfo,N.fetchedAt,"error");try{p("checking");const $=await NO(e,t);if(S)return C(N?.latestVersion??null,N?.releaseInfo??null,N?.fetchedAt??null,"idle");const F=$.data;if(!$.ok)return $.status===403&&ak(e,t,{fetchedAt:N?.fetchedAt??null,latestVersion:N?.latestVersion??null,releaseInfo:N?.releaseInfo??null,rateLimitedUntil:O+Math.max(I??0,SO)}),p("error"),R(N?.latestVersion??null,N?.releaseInfo??null,N?.fetchedAt??null,"error");if(F.tag_name){const q=F.tag_name.replace(/^v/,""),Y=_p(q,x)>0,P={title:F.name||F.tag_name,body:F.body||"",htmlUrl:F.html_url||`https://github.com/${e}/${t}/releases/latest`,publishedAt:F.published_at||""};ak(e,t,{fetchedAt:O,latestVersion:q,releaseInfo:P}),s(q),r(Y),Y&&KN({key:`app-update:${q}`,title:"Pixcode update available",body:`Pixcode ${x} can update to ${q}.`,tag:"pixcode-app-update",data:{type:"app-update",latestVersion:q,installMode:c}}),l(P),p("success"),h(O);const B=C(q,P,O,"success");return A(B),B}else return r(!1),s(null),l(null),p("error"),C(null,null,null,"error")}catch($){return console.error("Version check failed:",$),p("error"),R(N?.latestVersion??null,N?.releaseInfo??null,N?.fetchedAt??null,"error")}};y.current=j,j();const E=nk(g),L=E===null?null:window.setInterval(()=>{j()},E);return()=>{S=!0,L!==null&&window.clearInterval(L)}},[e,t,x,c,g]);const k=m.useCallback(async()=>y.current?await y.current({force:!0}):null,[]);return{updateAvailable:n,latestVersion:a,currentVersion:x,releaseInfo:o,installMode:c,checkStatus:u,lastCheckedAt:f,manualCheck:k,updateCheckPreferences:g,updatePreferences:w}},Vi={autoExpandTools:!1,showRawParameters:!1,showThinking:!0,autoScrollToBottom:!0,sendByCtrlEnter:!1,changeAwareness:!1,sidebarVisible:!0,historyView:"flat",autoShowAgentDiff:"always"},EO=["flat","grouped"],TO=e=>typeof e=="string"&&EO.includes(e),AO=["always","openOnly","off"],jO=e=>typeof e=="string"&&AO.includes(e),Gd=Object.keys(Vi),RO=new Set(Gd),Pp="ui-preferences:sync",IO=(e,t)=>{if(typeof e=="boolean")return e;if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1}return t},Vd=(e,t,n)=>e==="historyView"?TO(t)?t:n:e==="autoShowAgentDiff"?jO(t)?t:n:IO(t,n),_O=(e,t)=>{try{const n=localStorage.getItem(e);if(n===null)return t;const r=JSON.parse(n);return Vd(e,r,t)}catch{return t}},LO=e=>{if(typeof window>"u")return Vi;try{const t=localStorage.getItem(e);if(t){const n=JSON.parse(t);if(n&&typeof n=="object"&&!Array.isArray(n)){const r=n;return Gd.reduce((a,s)=>(a[s]=Vd(s,r[s],Vi[s]),a),{...Vi})}}}catch{}return Gd.reduce((t,n)=>(t[n]=_O(n,Vi[n]),t),{...Vi})};function PO(e,t){switch(t.type){case"set":{const{key:n,value:r}=t;if(!RO.has(n))return e;const a=Vd(n,r,e[n]);return e[n]===a?e:{...e,[n]:a}}case"set_many":{const n=t.value||{};let r=!1;const a={...e};for(const s of Gd){if(!(s in n))continue;const o=n[s],l=Vd(s,o,e[s]);a[s]!==l&&(a[s]=l,r=!0)}return r?a:e}case"reset":return{...Vi,...t.value||{}};default:return e}}function Mu(e="uiPreferences"){const t=m.useRef(`ui-preferences-${Math.random().toString(36).slice(2)}`),[n,r]=m.useReducer(PO,e,LO);return m.useEffect(()=>{typeof window>"u"||(localStorage.setItem(e,JSON.stringify(n)),window.dispatchEvent(new CustomEvent(Pp,{detail:{storageKey:e,sourceId:t.current,value:n}})))},[n,e]),m.useEffect(()=>{if(typeof window>"u")return;const l=u=>{!u||typeof u!="object"||Array.isArray(u)||r({type:"set_many",value:u})},c=u=>{if(!(u.key!==e||u.newValue===null))try{const p=JSON.parse(u.newValue);l(p)}catch{}},d=u=>{const f=u.detail;!f||f.storageKey!==e||f.sourceId===t.current||l(f.value)};return window.addEventListener("storage",c),window.addEventListener(Pp,d),()=>{window.removeEventListener("storage",c),window.removeEventListener(Pp,d)}},[e]),{preferences:n,setPreference:(l,c)=>{r({type:"set",key:l,value:c})},setPreferences:l=>{r({type:"set_many",value:l})},resetPreferences:l=>{r({type:"reset",value:l})},dispatch:r}}const DO=()=>{try{const e=localStorage.getItem("claude-settings");return e&&JSON.parse(e).projectSortOrder==="date"?"date":"name"}catch{return"name"}},OO=()=>{try{const e=localStorage.getItem("starredProjects");return e?new Set(JSON.parse(e)):new Set}catch{return new Set}},MO=e=>{try{localStorage.setItem("starredProjects",JSON.stringify([...e]))}catch{}},ik=(e,t)=>`${e}::${t}`,FO=()=>{try{const e=localStorage.getItem("starredSessions");return e?new Set(JSON.parse(e)):new Set}catch{return new Set}},zO=e=>{try{localStorage.setItem("starredSessions",JSON.stringify([...e]))}catch{}},BO=/(?:^|[\s/\\(\[`"'])([\w./-]+?\.(?:ts|tsx|js|jsx|mjs|cjs|py|rb|go|rs|java|kt|swift|c|cc|cpp|h|hpp|cs|php|sh|bash|zsh|json|ya?ml|toml|md|mdx|html?|css|scss|less|sql|prisma|graphql|gql|vue|svelte|astro|dart|lua|r|pl|ps1|tf|dockerfile|env))(?:$|[\s:,)\]`"'])/i,UO=e=>{if(!e)return[];const t=new Set,n=new RegExp(BO.source,"gi");let r;for(;(r=n.exec(e))!==null;){const a=r[1],s=a.lastIndexOf(".");if(s>-1){const o=a.slice(s+1).toLowerCase();o&&o.length<=10&&t.add(o)}if(t.size>=3)break}return[...t]},Xi=e=>e.__provider==="cursor"?new Date(e.createdAt||0):e.__provider==="codex"?new Date(e.createdAt||e.lastActivity||0):new Date(e.lastActivity||e.createdAt||0),$O=(e,t)=>e.__provider==="cursor"?e.summary||e.name||t("projects.untitledSession"):e.__provider==="codex"?e.summary||e.name||t("projects.codexSession"):e.__provider==="gemini"||e.__provider==="qwen"||e.__provider==="opencode"?e.summary||e.name||t("projects.newSession"):e.summary||t("projects.newSession"),HO=e=>e.__provider==="cursor"?String(e.createdAt||""):e.__provider==="codex"?String(e.createdAt||e.lastActivity||""):String(e.lastActivity||e.createdAt||""),GO=(e,t,n)=>{const r=Xi(e),a=Math.floor((t.getTime()-r.getTime())/(1e3*60));return{isCursorSession:e.__provider==="cursor",isCodexSession:e.__provider==="codex",isGeminiSession:e.__provider==="gemini",isQwenSession:e.__provider==="qwen",isOpencodeSession:e.__provider==="opencode",isActive:a<10,sessionName:$O(e,n),sessionTime:HO(e),messageCount:Number(e.messageCount||0)}},M4=(e,t)=>{const n=[...e.sessions||[],...t[e.name]||[]].map(g=>({...g,__provider:"claude"})),r=(e.cursorSessions||[]).map(g=>({...g,__provider:"cursor"})),a=(e.codexSessions||[]).map(g=>({...g,__provider:"codex"})),s=g=>typeof g.id=="string"&&g.id.startsWith("qwen_")||g.provider==="qwen",o=g=>typeof g.id=="string"&&g.id.startsWith("opencode_")||g.provider==="opencode",l=e.geminiSessions||[],c=l.filter(g=>!s(g)&&!o(g)).map(g=>({...g,__provider:"gemini"})),d=l.filter(g=>s(g)).map(g=>({...g,__provider:"qwen"})),u=l.filter(g=>o(g)).map(g=>({...g,__provider:"opencode"})),p=[...(e.qwenSessions||[]).map(g=>({...g,__provider:"qwen"})),...d],f=[...(e.opencodeSessions||[]).map(g=>({...g,__provider:"opencode"})),...u],h=new Map;for(const g of[...n,...r,...a,...c,...p,...f])h.has(g.id)||h.set(g.id,g);return[...h.values()].sort((g,b)=>Xi(b).getTime()-Xi(g).getTime())},sk=(e,t)=>{const n=M4(e,t);return n.length===0?new Date(0):n.reduce((r,a)=>{const s=Xi(a);return s>r?s:r},new Date(0))},VO=(e,t,n,r)=>{const a=[...e];return a.sort((s,o)=>{const l=n.has(s.name),c=n.has(o.name);return l&&!c?-1:!l&&c?1:t==="date"?sk(o,r).getTime()-sk(s,r).getTime():(s.displayName||s.name).localeCompare(o.displayName||o.name)}),a},WO=(e,t)=>{const n=t.trim().toLowerCase();return n?e.filter(r=>{const a=(r.displayName||r.name).toLowerCase(),s=r.name.toLowerCase();return a.includes(n)||s.includes(n)}):e},qO=e=>{const t=typeof e.fullPath=="string"&&e.fullPath.length>0?e.fullPath:typeof e.path=="string"?e.path:"";return{name:e.name,displayName:typeof e.displayName=="string"&&e.displayName.trim().length>0?e.displayName:e.name,fullPath:t,path:typeof e.path=="string"&&e.path.length>0?e.path:t}};function KO({projects:e,selectedProject:t,selectedSession:n,isLoading:r,isMobile:a,t:s,onRefresh:o,onProjectSelect:l,onSessionSelect:c,onSessionDelete:d,onProjectDelete:u,setSidebarVisible:p,sidebarVisible:f}){const[h,g]=m.useState(new Set),[b,x]=m.useState(null),[v,y]=m.useState(!1),[w,k]=m.useState(""),[S,C]=m.useState({}),[A,R]=m.useState({}),[j,E]=m.useState(new Set),[L,T]=m.useState(new Date),[I,N]=m.useState("name"),[O,$]=m.useState(!1),[F,q]=m.useState({}),[Y,P]=m.useState(null),[B,V]=m.useState(""),[z,ee]=m.useState(""),[ae,ue]=m.useState(new Set),[le,se]=m.useState(null),[me,de]=m.useState(null),[we,Ce]=m.useState(!1),[je,M]=m.useState(()=>OO()),[J,te]=m.useState(()=>FO()),[H,U]=m.useState("projects"),[Q,ge]=m.useState(null),[he,oe]=m.useState(!1),[Ee,fe]=m.useState(null),re=m.useRef(null),Z=m.useRef(0),ce=m.useRef(null),Se=!a&&!f;m.useEffect(()=>{const Oe=setInterval(()=>{T(new Date)},6e4);return()=>clearInterval(Oe)},[]),m.useEffect(()=>{R({}),E(new Set),q({})},[e]),m.useEffect(()=>{t&&g(Oe=>{if(Oe.has(t.name))return Oe;const Ve=new Set(Oe);return Ve.add(t.name),Ve})},[n,t]),m.useEffect(()=>{if(e.length>0&&!r){const Oe=new Set;e.forEach(Ve=>{Ve.sessions&&Ve.sessions.length>=0&&Oe.add(Ve.name)}),E(Oe)}},[e,r]),m.useEffect(()=>{const Oe=()=>{N(DO())};Oe();const Ve=et=>{et.key==="claude-settings"&&Oe()},mt=()=>Oe();return window.addEventListener("storage",Ve),window.addEventListener("pixcode:settings-changed",mt),()=>{window.removeEventListener("storage",Ve),window.removeEventListener("pixcode:settings-changed",mt)}},[]),m.useEffect(()=>{re.current&&clearTimeout(re.current),ce.current&&(ce.current.close(),ce.current=null);const Oe=z.trim();if(H!=="conversations"||Oe.length<2){Z.current+=1,ge(null),fe(null),oe(!1);return}oe(!0);const Ve=++Z.current;return re.current=setTimeout(()=>{if(Ve!==Z.current)return;const mt=At.searchConversationsUrl(Oe),et=new EventSource(mt);ce.current=et;const ye=[];let Fe=0;et.addEventListener("result",W=>{if(Ve!==Z.current){et.close();return}try{const ve=JSON.parse(W.data);ye.push(ve.projectResult),Fe=ve.totalMatches,ge({results:[...ye],totalMatches:Fe,query:Oe}),fe({scannedProjects:ve.scannedProjects,totalProjects:ve.totalProjects})}catch{}}),et.addEventListener("progress",W=>{if(Ve!==Z.current){et.close();return}try{const ve=JSON.parse(W.data);Fe=ve.totalMatches,fe({scannedProjects:ve.scannedProjects,totalProjects:ve.totalProjects})}catch{}}),et.addEventListener("done",()=>{if(Ve!==Z.current){et.close();return}et.close(),ce.current=null,oe(!1),fe(null),ye.length===0&&ge({results:[],totalMatches:0,query:Oe})}),et.addEventListener("error",()=>{if(Ve!==Z.current){et.close();return}et.close(),ce.current=null,oe(!1),fe(null),ye.length===0&&ge({results:[],totalMatches:0,query:Oe})})},400),()=>{re.current&&clearTimeout(re.current),ce.current&&(ce.current.close(),ce.current=null)}},[z,H]);const Be=m.useCallback(Oe=>{g(Ve=>{const mt=new Set;return Ve.has(Oe)||mt.add(Oe),mt})},[]),qe=m.useCallback((Oe,Ve)=>{c({...Oe,__projectName:Ve})},[c]),Je=m.useCallback(Oe=>{M(Ve=>{const mt=new Set(Ve);return mt.has(Oe)?mt.delete(Oe):mt.add(Oe),MO(mt),mt})},[]),ht=m.useCallback(Oe=>je.has(Oe),[je]),Xe=m.useCallback((Oe,Ve)=>{te(mt=>{const et=ik(Oe,Ve),ye=new Set(mt);return ye.has(et)?ye.delete(et):ye.add(et),zO(ye),ye})},[]),bt=m.useCallback((Oe,Ve)=>J.has(ik(Oe,Ve)),[J]),dt=m.useCallback(Oe=>M4(Oe,A),[A]),st=m.useMemo(()=>e.map(Oe=>{const Ve=F[Oe.name];return Ve===void 0?Oe:{...Oe,sessionMeta:{...Oe.sessionMeta,hasMore:Ve}}}),[F,e]),pt=m.useMemo(()=>VO(st,I,je,A),[A,I,st,je]),yt=m.useMemo(()=>WO(pt,z),[z,pt]),It=m.useCallback(Oe=>{x(Oe.name),k(Oe.displayName)},[]),_t=m.useCallback(()=>{x(null),k("")},[]),gn=m.useCallback(async Oe=>{try{(await At.renameProject(Oe,w)).ok?window.refreshProjects?await window.refreshProjects():window.location.reload():console.error("Failed to rename project")}catch(Ve){console.error("Error renaming project:",Ve)}finally{x(null),k("")}},[w]),Yt=m.useCallback((Oe,Ve,mt,et="claude")=>{de({projectName:Oe,sessionId:Ve,sessionTitle:mt,provider:et})},[]),dn=m.useCallback(async()=>{if(!me)return;const{projectName:Oe,sessionId:Ve,provider:mt}=me;de(null);try{let et;if(mt==="codex"?et=await At.deleteCodexSession(Ve):mt==="gemini"?et=await At.deleteGeminiSession(Ve):mt==="qwen"?et=await At.deleteQwenSession(Ve):et=await At.deleteSession(Oe,Ve),et.ok)d?.(Ve);else{const ye=await et.text();console.error("[Sidebar] Failed to delete session:",{status:et.status,error:ye}),alert(s("messages.deleteSessionFailed"))}}catch(et){console.error("[Sidebar] Error deleting session:",et),alert(s("messages.deleteSessionError"))}},[d,me,s]),bn=m.useCallback(Oe=>{se({project:Oe,sessionCount:dt(Oe).length})},[dt]),Le=m.useCallback(async(Oe=!1)=>{if(!le)return;const{project:Ve,sessionCount:mt}=le,et=mt===0;se(null),ue(ye=>new Set([...ye,Ve.name]));try{const ye=await At.deleteProject(Ve.name,!et,Oe);if(ye.ok)u?.(Ve.name);else{const Fe=await ye.json();alert(Fe.error||s("messages.deleteProjectFailed"))}}catch(ye){console.error("Error deleting project:",ye),alert(s("messages.deleteProjectError"))}finally{ue(ye=>{const Fe=new Set(ye);return Fe.delete(Ve.name),Fe})}},[le,u,s]),Ze=m.useCallback(async Oe=>{const Ve=F[Oe.name];if(!(!(Ve!==void 0?Ve:Oe.sessionMeta?.hasMore===!0)||S[Oe.name])){C(et=>({...et,[Oe.name]:!0}));try{const et=(Oe.sessions?.length||0)+(A[Oe.name]?.length||0),ye=await At.sessions(Oe.name,5,et);if(!ye.ok)return;const Fe=await ye.json();R(W=>({...W,[Oe.name]:[...W[Oe.name]||[],...Fe.sessions||[]]})),Fe.hasMore===!1&&q(W=>({...W,[Oe.name]:!1}))}catch(et){console.error("Error loading more sessions:",et)}finally{C(et=>({...et,[Oe.name]:!1}))}}},[A,S,F]),Re=m.useCallback(Oe=>{l(Oe)},[l]),$e=m.useCallback(async()=>{$(!0);try{await o()}finally{$(!1)}},[o]),nt=m.useCallback(async(Oe,Ve,mt,et)=>{const ye=mt.trim();if(!ye){P(null),V("");return}try{const Fe=await At.renameSession(Ve,ye,et);Fe.ok?await o():(console.error("[Sidebar] Failed to rename session:",Fe.status),alert(s("messages.renameSessionFailed")))}catch(Fe){console.error("[Sidebar] Error renaming session:",Fe),alert(s("messages.renameSessionError"))}finally{P(null),V("")}},[o,s]),xt=m.useCallback(()=>{p(!1)},[p]),Pt=m.useCallback(()=>{p(!0)},[p]);return{isSidebarCollapsed:Se,expandedProjects:h,editingProject:b,showNewProject:v,editingName:w,loadingSessions:S,additionalSessions:A,initialSessionsLoaded:j,currentTime:L,projectSortOrder:I,isRefreshing:O,editingSession:Y,editingSessionName:B,searchFilter:z,deletingProjects:ae,deleteConfirmation:le,sessionDeleteConfirmation:me,showVersionModal:we,starredProjects:je,starredSessions:J,filteredProjects:yt,toggleProject:Be,handleSessionClick:qe,toggleStarProject:Je,isProjectStarred:ht,toggleStarSession:Xe,isSessionStarred:bt,getProjectSessions:dt,startEditing:It,cancelEditing:_t,saveProjectName:gn,showDeleteSessionConfirmation:Yt,confirmDeleteSession:dn,requestProjectDelete:bn,confirmDeleteProject:Le,loadMoreSessions:Ze,handleProjectSelect:Re,refreshProjects:$e,updateSessionSummary:nt,collapseSidebar:xt,expandSidebar:Pt,setShowNewProject:y,setEditingName:k,setEditingSession:P,setEditingSessionName:V,searchMode:H,setSearchMode:U,conversationResults:Q,isSearching:he,searchProgress:Ee,clearConversationResults:m.useCallback(()=>{Z.current+=1,ce.current&&(ce.current.close(),ce.current=null),oe(!1),fe(null),ge(null)},[]),setSearchFilter:ee,setDeleteConfirmation:se,setSessionDeleteConfirmation:de,setShowVersionModal:Ce}}const YO="https://discord.gg/buxwujPNRE",ZO="https://github.com/alicomert/pixcode/issues/new";function XO({className:e}){return i.jsx("svg",{className:e,fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:i.jsx("path",{d:"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"})})}function JO({onExpand:e,onOpenControlRoom:t,onShowSettings:n,updateAvailable:r,onShowVersionModal:a,t:s}){return i.jsxs("div",{className:"flex h-full w-12 flex-col items-center gap-1 bg-background/80 py-3 backdrop-blur-sm",children:[i.jsx("button",{onClick:e,className:"group flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("common:versionUpdate.ariaLabels.showSidebar"),title:s("common:versionUpdate.ariaLabels.showSidebar"),children:i.jsx(ju,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})}),i.jsx("div",{className:"nav-divider my-1 w-6"}),t&&i.jsx("button",{onClick:t,className:"group flex h-8 w-8 items-center justify-center rounded-lg border border-primary/25 bg-primary/10 transition-colors hover:bg-primary/15","aria-label":s("actions.controlRoom",{defaultValue:"Control Room"}),title:s("actions.controlRoom",{defaultValue:"Control Room"}),children:i.jsx(Fr,{className:"h-4 w-4 text-primary"})}),i.jsx("button",{onClick:n,className:"group flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("actions.settings"),title:s("actions.settings"),children:i.jsx(Dt,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})}),i.jsx("a",{href:ZO,target:"_blank",rel:"noopener noreferrer",className:"group flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("actions.reportIssue"),title:s("actions.reportIssue"),children:i.jsx(Bl,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})}),i.jsx("a",{href:YO,target:"_blank",rel:"noopener noreferrer",className:"group flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("actions.joinCommunity"),title:s("actions.joinCommunity"),children:i.jsx(XO,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})}),r&&i.jsxs("button",{onClick:a,className:"relative flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("common:versionUpdate.ariaLabels.updateAvailable"),title:s("common:versionUpdate.ariaLabels.updateAvailable"),children:[i.jsx(Fr,{className:"h-4 w-4 text-blue-500"}),i.jsx("span",{className:"absolute right-1.5 top-1.5 h-1.5 w-1.5 animate-pulse rounded-full bg-blue-500"})]})]})}function F4(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=F4(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function z4(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=F4(e))&&(r&&(r+=" "),r+=t);return r}const ok=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,lk=z4,Dg=(e,t)=>n=>{var r;if(t?.variants==null)return lk(e,n?.class,n?.className);const{variants:a,defaultVariants:s}=t,o=Object.keys(a).map(d=>{const u=n?.[d],p=s?.[d];if(u===null)return null;const f=ok(u)||ok(p);return a[d][f]}),l=n&&Object.entries(n).reduce((d,u)=>{let[p,f]=u;return f===void 0||(d[p]=f),d},{}),c=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((d,u)=>{let{class:p,className:f,...h}=u;return Object.entries(h).every(g=>{let[b,x]=g;return Array.isArray(x)?x.includes({...s,...l}[b]):{...s,...l}[b]===x})?[...d,p,f]:d},[]);return lk(e,o,c,n?.class,n?.className)},Og="-",QO=e=>{const t=tM(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:o=>{const l=o.split(Og);return l[0]===""&&l.length!==1&&l.shift(),B4(l,t)||eM(o)},getConflictingClassGroupIds:(o,l)=>{const c=n[o]||[];return l&&r[o]?[...c,...r[o]]:c}}},B4=(e,t)=>{if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),a=r?B4(e.slice(1),r):void 0;if(a)return a;if(t.validators.length===0)return;const s=e.join(Og);return t.validators.find(({validator:o})=>o(s))?.classGroupId},ck=/^\[(.+)\]$/,eM=e=>{if(ck.test(e)){const t=ck.exec(e)[1],n=t?.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},tM=e=>{const{theme:t,classGroups:n}=e,r={nextPart:new Map,validators:[]};for(const a in n)ef(n[a],r,a,t);return r},ef=(e,t,n,r)=>{e.forEach(a=>{if(typeof a=="string"){const s=a===""?t:dk(t,a);s.classGroupId=n;return}if(typeof a=="function"){if(nM(a)){ef(a(r),t,n,r);return}t.validators.push({validator:a,classGroupId:n});return}Object.entries(a).forEach(([s,o])=>{ef(o,dk(t,s),n,r)})})},dk=(e,t)=>{let n=e;return t.split(Og).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},nM=e=>e.isThemeGetter,rM=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const a=(s,o)=>{n.set(s,o),t++,t>e&&(t=0,r=n,n=new Map)};return{get(s){let o=n.get(s);if(o!==void 0)return o;if((o=r.get(s))!==void 0)return a(s,o),o},set(s,o){n.has(s)?n.set(s,o):a(s,o)}}},tf="!",nf=":",aM=nf.length,iM=e=>{const{prefix:t,experimentalParseClassName:n}=e;let r=a=>{const s=[];let o=0,l=0,c=0,d;for(let g=0;g<a.length;g++){let b=a[g];if(o===0&&l===0){if(b===nf){s.push(a.slice(c,g)),c=g+aM;continue}if(b==="/"){d=g;continue}}b==="["?o++:b==="]"?o--:b==="("?l++:b===")"&&l--}const u=s.length===0?a:a.substring(c),p=sM(u),f=p!==u,h=d&&d>c?d-c:void 0;return{modifiers:s,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:h}};if(t){const a=t+nf,s=r;r=o=>o.startsWith(a)?s(o.substring(a.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:o,maybePostfixModifierPosition:void 0}}if(n){const a=r;r=s=>n({className:s,parseClassName:a})}return r},sM=e=>e.endsWith(tf)?e.substring(0,e.length-1):e.startsWith(tf)?e.substring(1):e,oM=e=>{const t=Object.fromEntries(e.orderSensitiveModifiers.map(r=>[r,!0]));return r=>{if(r.length<=1)return r;const a=[];let s=[];return r.forEach(o=>{o[0]==="["||t[o]?(a.push(...s.sort(),o),s=[]):s.push(o)}),a.push(...s.sort()),a}},lM=e=>({cache:rM(e.cacheSize),parseClassName:iM(e),sortModifiers:oM(e),...QO(e)}),cM=/\s+/,dM=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a,sortModifiers:s}=t,o=[],l=e.trim().split(cM);let c="";for(let d=l.length-1;d>=0;d-=1){const u=l[d],{isExternal:p,modifiers:f,hasImportantModifier:h,baseClassName:g,maybePostfixModifierPosition:b}=n(u);if(p){c=u+(c.length>0?" "+c:c);continue}let x=!!b,v=r(x?g.substring(0,b):g);if(!v){if(!x){c=u+(c.length>0?" "+c:c);continue}if(v=r(g),!v){c=u+(c.length>0?" "+c:c);continue}x=!1}const y=s(f).join(":"),w=h?y+tf:y,k=w+v;if(o.includes(k))continue;o.push(k);const S=a(v,x);for(let C=0;C<S.length;++C){const A=S[C];o.push(w+A)}c=u+(c.length>0?" "+c:c)}return c};function uM(){let e=0,t,n,r="";for(;e<arguments.length;)(t=arguments[e++])&&(n=U4(t))&&(r&&(r+=" "),r+=n);return r}const U4=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=U4(e[r]))&&(n&&(n+=" "),n+=t);return n};function pM(e,...t){let n,r,a,s=o;function o(c){const d=t.reduce((u,p)=>p(u),e());return n=lM(d),r=n.cache.get,a=n.cache.set,s=l,l(c)}function l(c){const d=r(c);if(d)return d;const u=dM(c,n);return a(c,u),u}return function(){return s(uM.apply(null,arguments))}}const xn=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},$4=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,H4=/^\((?:(\w[\w-]*):)?(.+)\)$/i,mM=/^\d+\/\d+$/,hM=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,fM=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,gM=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,bM=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,xM=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Cs=e=>mM.test(e),vt=e=>!!e&&!Number.isNaN(Number(e)),Ka=e=>!!e&&Number.isInteger(Number(e)),Dp=e=>e.endsWith("%")&&vt(e.slice(0,-1)),wa=e=>hM.test(e),vM=()=>!0,yM=e=>fM.test(e)&&!gM.test(e),G4=()=>!1,wM=e=>bM.test(e),kM=e=>xM.test(e),SM=e=>!Ke(e)&&!Ye(e),CM=e=>Ao(e,q4,G4),Ke=e=>$4.test(e),Pi=e=>Ao(e,K4,yM),Op=e=>Ao(e,jM,vt),uk=e=>Ao(e,V4,G4),NM=e=>Ao(e,W4,kM),Lc=e=>Ao(e,Y4,wM),Ye=e=>H4.test(e),tl=e=>jo(e,K4),EM=e=>jo(e,RM),pk=e=>jo(e,V4),TM=e=>jo(e,q4),AM=e=>jo(e,W4),Pc=e=>jo(e,Y4,!0),Ao=(e,t,n)=>{const r=$4.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},jo=(e,t,n=!1)=>{const r=H4.exec(e);return r?r[1]?t(r[1]):n:!1},V4=e=>e==="position"||e==="percentage",W4=e=>e==="image"||e==="url",q4=e=>e==="length"||e==="size"||e==="bg-size",K4=e=>e==="length",jM=e=>e==="number",RM=e=>e==="family-name",Y4=e=>e==="shadow",IM=()=>{const e=xn("color"),t=xn("font"),n=xn("text"),r=xn("font-weight"),a=xn("tracking"),s=xn("leading"),o=xn("breakpoint"),l=xn("container"),c=xn("spacing"),d=xn("radius"),u=xn("shadow"),p=xn("inset-shadow"),f=xn("text-shadow"),h=xn("drop-shadow"),g=xn("blur"),b=xn("perspective"),x=xn("aspect"),v=xn("ease"),y=xn("animate"),w=()=>["auto","avoid","all","avoid-page","page","left","right","column"],k=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],S=()=>[...k(),Ye,Ke],C=()=>["auto","hidden","clip","visible","scroll"],A=()=>["auto","contain","none"],R=()=>[Ye,Ke,c],j=()=>[Cs,"full","auto",...R()],E=()=>[Ka,"none","subgrid",Ye,Ke],L=()=>["auto",{span:["full",Ka,Ye,Ke]},Ka,Ye,Ke],T=()=>[Ka,"auto",Ye,Ke],I=()=>["auto","min","max","fr",Ye,Ke],N=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],O=()=>["start","end","center","stretch","center-safe","end-safe"],$=()=>["auto",...R()],F=()=>[Cs,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...R()],q=()=>[e,Ye,Ke],Y=()=>[...k(),pk,uk,{position:[Ye,Ke]}],P=()=>["no-repeat",{repeat:["","x","y","space","round"]}],B=()=>["auto","cover","contain",TM,CM,{size:[Ye,Ke]}],V=()=>[Dp,tl,Pi],z=()=>["","none","full",d,Ye,Ke],ee=()=>["",vt,tl,Pi],ae=()=>["solid","dashed","dotted","double"],ue=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],le=()=>[vt,Dp,pk,uk],se=()=>["","none",g,Ye,Ke],me=()=>["none",vt,Ye,Ke],de=()=>["none",vt,Ye,Ke],we=()=>[vt,Ye,Ke],Ce=()=>[Cs,"full",...R()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[wa],breakpoint:[wa],color:[vM],container:[wa],"drop-shadow":[wa],ease:["in","out","in-out"],font:[SM],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[wa],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[wa],shadow:[wa],spacing:["px",vt],text:[wa],"text-shadow":[wa],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Cs,Ke,Ye,x]}],container:["container"],columns:[{columns:[vt,Ke,Ye,l]}],"break-after":[{"break-after":w()}],"break-before":[{"break-before":w()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:S()}],overflow:[{overflow:C()}],"overflow-x":[{"overflow-x":C()}],"overflow-y":[{"overflow-y":C()}],overscroll:[{overscroll:A()}],"overscroll-x":[{"overscroll-x":A()}],"overscroll-y":[{"overscroll-y":A()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:j()}],"inset-x":[{"inset-x":j()}],"inset-y":[{"inset-y":j()}],start:[{start:j()}],end:[{end:j()}],top:[{top:j()}],right:[{right:j()}],bottom:[{bottom:j()}],left:[{left:j()}],visibility:["visible","invisible","collapse"],z:[{z:[Ka,"auto",Ye,Ke]}],basis:[{basis:[Cs,"full","auto",l,...R()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[vt,Cs,"auto","initial","none",Ke]}],grow:[{grow:["",vt,Ye,Ke]}],shrink:[{shrink:["",vt,Ye,Ke]}],order:[{order:[Ka,"first","last","none",Ye,Ke]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:L()}],"col-start":[{"col-start":T()}],"col-end":[{"col-end":T()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:L()}],"row-start":[{"row-start":T()}],"row-end":[{"row-end":T()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":I()}],"auto-rows":[{"auto-rows":I()}],gap:[{gap:R()}],"gap-x":[{"gap-x":R()}],"gap-y":[{"gap-y":R()}],"justify-content":[{justify:[...N(),"normal"]}],"justify-items":[{"justify-items":[...O(),"normal"]}],"justify-self":[{"justify-self":["auto",...O()]}],"align-content":[{content:["normal",...N()]}],"align-items":[{items:[...O(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...O(),{baseline:["","last"]}]}],"place-content":[{"place-content":N()}],"place-items":[{"place-items":[...O(),"baseline"]}],"place-self":[{"place-self":["auto",...O()]}],p:[{p:R()}],px:[{px:R()}],py:[{py:R()}],ps:[{ps:R()}],pe:[{pe:R()}],pt:[{pt:R()}],pr:[{pr:R()}],pb:[{pb:R()}],pl:[{pl:R()}],m:[{m:$()}],mx:[{mx:$()}],my:[{my:$()}],ms:[{ms:$()}],me:[{me:$()}],mt:[{mt:$()}],mr:[{mr:$()}],mb:[{mb:$()}],ml:[{ml:$()}],"space-x":[{"space-x":R()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":R()}],"space-y-reverse":["space-y-reverse"],size:[{size:F()}],w:[{w:[l,"screen",...F()]}],"min-w":[{"min-w":[l,"screen","none",...F()]}],"max-w":[{"max-w":[l,"screen","none","prose",{screen:[o]},...F()]}],h:[{h:["screen","lh",...F()]}],"min-h":[{"min-h":["screen","lh","none",...F()]}],"max-h":[{"max-h":["screen","lh",...F()]}],"font-size":[{text:["base",n,tl,Pi]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,Ye,Op]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Dp,Ke]}],"font-family":[{font:[EM,Ke,t]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[a,Ye,Ke]}],"line-clamp":[{"line-clamp":[vt,"none",Ye,Op]}],leading:[{leading:[s,...R()]}],"list-image":[{"list-image":["none",Ye,Ke]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Ye,Ke]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:q()}],"text-color":[{text:q()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...ae(),"wavy"]}],"text-decoration-thickness":[{decoration:[vt,"from-font","auto",Ye,Pi]}],"text-decoration-color":[{decoration:q()}],"underline-offset":[{"underline-offset":[vt,"auto",Ye,Ke]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:R()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ye,Ke]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Ye,Ke]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:Y()}],"bg-repeat":[{bg:P()}],"bg-size":[{bg:B()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ka,Ye,Ke],radial:["",Ye,Ke],conic:[Ka,Ye,Ke]},AM,NM]}],"bg-color":[{bg:q()}],"gradient-from-pos":[{from:V()}],"gradient-via-pos":[{via:V()}],"gradient-to-pos":[{to:V()}],"gradient-from":[{from:q()}],"gradient-via":[{via:q()}],"gradient-to":[{to:q()}],rounded:[{rounded:z()}],"rounded-s":[{"rounded-s":z()}],"rounded-e":[{"rounded-e":z()}],"rounded-t":[{"rounded-t":z()}],"rounded-r":[{"rounded-r":z()}],"rounded-b":[{"rounded-b":z()}],"rounded-l":[{"rounded-l":z()}],"rounded-ss":[{"rounded-ss":z()}],"rounded-se":[{"rounded-se":z()}],"rounded-ee":[{"rounded-ee":z()}],"rounded-es":[{"rounded-es":z()}],"rounded-tl":[{"rounded-tl":z()}],"rounded-tr":[{"rounded-tr":z()}],"rounded-br":[{"rounded-br":z()}],"rounded-bl":[{"rounded-bl":z()}],"border-w":[{border:ee()}],"border-w-x":[{"border-x":ee()}],"border-w-y":[{"border-y":ee()}],"border-w-s":[{"border-s":ee()}],"border-w-e":[{"border-e":ee()}],"border-w-t":[{"border-t":ee()}],"border-w-r":[{"border-r":ee()}],"border-w-b":[{"border-b":ee()}],"border-w-l":[{"border-l":ee()}],"divide-x":[{"divide-x":ee()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":ee()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...ae(),"hidden","none"]}],"divide-style":[{divide:[...ae(),"hidden","none"]}],"border-color":[{border:q()}],"border-color-x":[{"border-x":q()}],"border-color-y":[{"border-y":q()}],"border-color-s":[{"border-s":q()}],"border-color-e":[{"border-e":q()}],"border-color-t":[{"border-t":q()}],"border-color-r":[{"border-r":q()}],"border-color-b":[{"border-b":q()}],"border-color-l":[{"border-l":q()}],"divide-color":[{divide:q()}],"outline-style":[{outline:[...ae(),"none","hidden"]}],"outline-offset":[{"outline-offset":[vt,Ye,Ke]}],"outline-w":[{outline:["",vt,tl,Pi]}],"outline-color":[{outline:q()}],shadow:[{shadow:["","none",u,Pc,Lc]}],"shadow-color":[{shadow:q()}],"inset-shadow":[{"inset-shadow":["none",p,Pc,Lc]}],"inset-shadow-color":[{"inset-shadow":q()}],"ring-w":[{ring:ee()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:q()}],"ring-offset-w":[{"ring-offset":[vt,Pi]}],"ring-offset-color":[{"ring-offset":q()}],"inset-ring-w":[{"inset-ring":ee()}],"inset-ring-color":[{"inset-ring":q()}],"text-shadow":[{"text-shadow":["none",f,Pc,Lc]}],"text-shadow-color":[{"text-shadow":q()}],opacity:[{opacity:[vt,Ye,Ke]}],"mix-blend":[{"mix-blend":[...ue(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ue()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[vt]}],"mask-image-linear-from-pos":[{"mask-linear-from":le()}],"mask-image-linear-to-pos":[{"mask-linear-to":le()}],"mask-image-linear-from-color":[{"mask-linear-from":q()}],"mask-image-linear-to-color":[{"mask-linear-to":q()}],"mask-image-t-from-pos":[{"mask-t-from":le()}],"mask-image-t-to-pos":[{"mask-t-to":le()}],"mask-image-t-from-color":[{"mask-t-from":q()}],"mask-image-t-to-color":[{"mask-t-to":q()}],"mask-image-r-from-pos":[{"mask-r-from":le()}],"mask-image-r-to-pos":[{"mask-r-to":le()}],"mask-image-r-from-color":[{"mask-r-from":q()}],"mask-image-r-to-color":[{"mask-r-to":q()}],"mask-image-b-from-pos":[{"mask-b-from":le()}],"mask-image-b-to-pos":[{"mask-b-to":le()}],"mask-image-b-from-color":[{"mask-b-from":q()}],"mask-image-b-to-color":[{"mask-b-to":q()}],"mask-image-l-from-pos":[{"mask-l-from":le()}],"mask-image-l-to-pos":[{"mask-l-to":le()}],"mask-image-l-from-color":[{"mask-l-from":q()}],"mask-image-l-to-color":[{"mask-l-to":q()}],"mask-image-x-from-pos":[{"mask-x-from":le()}],"mask-image-x-to-pos":[{"mask-x-to":le()}],"mask-image-x-from-color":[{"mask-x-from":q()}],"mask-image-x-to-color":[{"mask-x-to":q()}],"mask-image-y-from-pos":[{"mask-y-from":le()}],"mask-image-y-to-pos":[{"mask-y-to":le()}],"mask-image-y-from-color":[{"mask-y-from":q()}],"mask-image-y-to-color":[{"mask-y-to":q()}],"mask-image-radial":[{"mask-radial":[Ye,Ke]}],"mask-image-radial-from-pos":[{"mask-radial-from":le()}],"mask-image-radial-to-pos":[{"mask-radial-to":le()}],"mask-image-radial-from-color":[{"mask-radial-from":q()}],"mask-image-radial-to-color":[{"mask-radial-to":q()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":k()}],"mask-image-conic-pos":[{"mask-conic":[vt]}],"mask-image-conic-from-pos":[{"mask-conic-from":le()}],"mask-image-conic-to-pos":[{"mask-conic-to":le()}],"mask-image-conic-from-color":[{"mask-conic-from":q()}],"mask-image-conic-to-color":[{"mask-conic-to":q()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:Y()}],"mask-repeat":[{mask:P()}],"mask-size":[{mask:B()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Ye,Ke]}],filter:[{filter:["","none",Ye,Ke]}],blur:[{blur:se()}],brightness:[{brightness:[vt,Ye,Ke]}],contrast:[{contrast:[vt,Ye,Ke]}],"drop-shadow":[{"drop-shadow":["","none",h,Pc,Lc]}],"drop-shadow-color":[{"drop-shadow":q()}],grayscale:[{grayscale:["",vt,Ye,Ke]}],"hue-rotate":[{"hue-rotate":[vt,Ye,Ke]}],invert:[{invert:["",vt,Ye,Ke]}],saturate:[{saturate:[vt,Ye,Ke]}],sepia:[{sepia:["",vt,Ye,Ke]}],"backdrop-filter":[{"backdrop-filter":["","none",Ye,Ke]}],"backdrop-blur":[{"backdrop-blur":se()}],"backdrop-brightness":[{"backdrop-brightness":[vt,Ye,Ke]}],"backdrop-contrast":[{"backdrop-contrast":[vt,Ye,Ke]}],"backdrop-grayscale":[{"backdrop-grayscale":["",vt,Ye,Ke]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[vt,Ye,Ke]}],"backdrop-invert":[{"backdrop-invert":["",vt,Ye,Ke]}],"backdrop-opacity":[{"backdrop-opacity":[vt,Ye,Ke]}],"backdrop-saturate":[{"backdrop-saturate":[vt,Ye,Ke]}],"backdrop-sepia":[{"backdrop-sepia":["",vt,Ye,Ke]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":R()}],"border-spacing-x":[{"border-spacing-x":R()}],"border-spacing-y":[{"border-spacing-y":R()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Ye,Ke]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[vt,"initial",Ye,Ke]}],ease:[{ease:["linear","initial",v,Ye,Ke]}],delay:[{delay:[vt,Ye,Ke]}],animate:[{animate:["none",y,Ye,Ke]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[b,Ye,Ke]}],"perspective-origin":[{"perspective-origin":S()}],rotate:[{rotate:me()}],"rotate-x":[{"rotate-x":me()}],"rotate-y":[{"rotate-y":me()}],"rotate-z":[{"rotate-z":me()}],scale:[{scale:de()}],"scale-x":[{"scale-x":de()}],"scale-y":[{"scale-y":de()}],"scale-z":[{"scale-z":de()}],"scale-3d":["scale-3d"],skew:[{skew:we()}],"skew-x":[{"skew-x":we()}],"skew-y":[{"skew-y":we()}],transform:[{transform:[Ye,Ke,"","none","gpu","cpu"]}],"transform-origin":[{origin:S()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Ce()}],"translate-x":[{"translate-x":Ce()}],"translate-y":[{"translate-y":Ce()}],"translate-z":[{"translate-z":Ce()}],"translate-none":["translate-none"],accent:[{accent:q()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:q()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Ye,Ke]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":R()}],"scroll-mx":[{"scroll-mx":R()}],"scroll-my":[{"scroll-my":R()}],"scroll-ms":[{"scroll-ms":R()}],"scroll-me":[{"scroll-me":R()}],"scroll-mt":[{"scroll-mt":R()}],"scroll-mr":[{"scroll-mr":R()}],"scroll-mb":[{"scroll-mb":R()}],"scroll-ml":[{"scroll-ml":R()}],"scroll-p":[{"scroll-p":R()}],"scroll-px":[{"scroll-px":R()}],"scroll-py":[{"scroll-py":R()}],"scroll-ps":[{"scroll-ps":R()}],"scroll-pe":[{"scroll-pe":R()}],"scroll-pt":[{"scroll-pt":R()}],"scroll-pr":[{"scroll-pr":R()}],"scroll-pb":[{"scroll-pb":R()}],"scroll-pl":[{"scroll-pl":R()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Ye,Ke]}],fill:[{fill:["none",...q()]}],"stroke-w":[{stroke:[vt,tl,Pi,Op]}],stroke:[{stroke:["none",...q()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},_M=pM(IM);function xe(...e){return _M(z4(e))}function LM(e){if(!e||typeof e!="string")return null;try{return JSON.parse(e)}catch{return null}}const PM=Dg("relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current"}},defaultVariants:{variant:"default"}}),Z4=m.forwardRef(({className:e,variant:t,...n},r)=>i.jsx("div",{ref:r,role:"alert","data-slot":"alert",className:xe(PM({variant:t}),e),...n}));Z4.displayName="Alert";const DM=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"alert-title",className:xe("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",e),...t}));DM.displayName="AlertTitle";const OM=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"alert-description",className:xe("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",e),...t}));OM.displayName="AlertDescription";const MM=Dg("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function kt({className:e,variant:t,...n}){return i.jsx("div",{className:xe(MM({variant:t}),e),...n})}const FM=Dg("inline-flex touch-manipulation items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90 active:bg-primary/80",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 active:bg-destructive/80",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground active:bg-accent/80",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80 active:bg-secondary/70",ghost:"hover:bg-accent hover:text-accent-foreground active:bg-accent/80",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3 text-sm",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),Te=m.forwardRef(({className:e,variant:t,size:n,...r},a)=>i.jsx("button",{className:xe(FM({variant:t,size:n,className:e})),ref:a,...r}));Te.displayName="Button";const X4=m.createContext(null),J4=()=>{const e=m.useContext(X4);if(!e)throw new Error("Confirmation components must be used within Confirmation");return e},Q4=({className:e,approval:t="pending",children:n,...r})=>{const a=m.useMemo(()=>({approval:t}),[t]);return i.jsx(X4.Provider,{value:a,children:i.jsx(Z4,{className:xe("flex flex-col gap-2",e),...r,children:n})})};Q4.displayName="Confirmation";const eE=({className:e,...t})=>i.jsx("div",{"data-slot":"confirmation-title",className:xe("text-muted-foreground inline text-sm",e),...t});eE.displayName="ConfirmationTitle";const tE=({children:e})=>{const{approval:t}=J4();return t!=="pending"?null:i.jsx(i.Fragment,{children:e})};tE.displayName="ConfirmationRequest";const nE=({className:e,...t})=>{const{approval:n}=J4();return n!=="pending"?null:i.jsx("div",{"data-slot":"confirmation-actions",className:xe("flex items-center justify-end gap-2 self-end",e),...t})};nE.displayName="ConfirmationActions";const wd=({variant:e="default",...t})=>i.jsx(Te,{className:"h-8 px-3 text-sm",variant:e,type:"button",...t});wd.displayName="ConfirmationAction";const rE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("rounded-xl border bg-card text-card-foreground shadow-sm",e),...t}));rE.displayName="Card";const aE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("flex flex-col space-y-1.5 p-4",e),...t}));aE.displayName="CardHeader";const iE=m.forwardRef(({className:e,...t},n)=>i.jsx("h3",{ref:n,className:xe("font-semibold leading-none tracking-tight",e),...t}));iE.displayName="CardTitle";const zM=m.forwardRef(({className:e,...t},n)=>i.jsx("p",{ref:n,className:xe("text-sm text-muted-foreground",e),...t}));zM.displayName="CardDescription";const sE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("p-4 pt-0",e),...t}));sE.displayName="CardContent";const oE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("flex items-center p-4 pt-0",e),...t}));oE.displayName="CardFooter";const BM=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("ml-auto shrink-0",e),...t}));BM.displayName="CardAction";const lE=m.createContext(null);function cE(){const e=m.useContext(lE);if(!e)throw new Error("Collapsible components must be used within <Collapsible>");return e}const fi=m.forwardRef(({defaultOpen:e=!1,open:t,onOpenChange:n,className:r,children:a,...s},o)=>{const[l,c]=m.useState(e),d=t!==void 0,u=d?t:l,p=m.useCallback(h=>{d||c(h),n?.(h)},[d,n]),f=m.useMemo(()=>({open:u,onOpenChange:p}),[u,p]);return i.jsx(lE.Provider,{value:f,children:i.jsx("div",{ref:o,"data-state":u?"open":"closed",className:r,...s,children:a})})});fi.displayName="Collapsible";const Pa=m.forwardRef(({onClick:e,children:t,className:n,...r},a)=>{const{open:s,onOpenChange:o}=cE(),l=m.useCallback(c=>{o(!s),e?.(c)},[s,o,e]);return i.jsx("button",{ref:a,type:"button","aria-expanded":s,"data-state":s?"open":"closed",onClick:l,className:n,...r,children:t})});Pa.displayName="CollapsibleTrigger";const gi=m.forwardRef(({className:e,children:t,...n},r)=>{const{open:a}=cE();return i.jsx("div",{ref:r,"data-state":a?"open":"closed",className:xe("grid transition-[grid-template-rows] duration-200 ease-out",a?"grid-rows-[1fr]":"grid-rows-[0fr]",e),...n,children:i.jsx("div",{className:"overflow-hidden",children:t})})});gi.displayName="CollapsibleContent";const dE=m.createContext(null);function Mg(){const e=m.useContext(dE);if(!e)throw new Error("Command components must be used within <Command>");return e}const uE=m.forwardRef(({className:e,children:t,...n},r)=>{const[a,s]=m.useState(""),o=m.useRef(new Map),[l,c]=m.useState(0),d=m.useCallback(y=>{o.current.set(y.id,y),c(w=>w+1)},[]),u=m.useCallback(y=>{o.current.delete(y),c(w=>w+1)},[]),p=m.useCallback((y,w)=>{const k=o.current.get(y);k&&Object.assign(k,w)},[]),f=m.useMemo(()=>{const y=a.toLowerCase(),w=new Set;for(const[k,S]of o.current)(!y||S.value.includes(y))&&w.add(k);return w},[a,l]),h=m.useMemo(()=>{const y=[];for(const[,w]of o.current)f.has(w.id)&&y.push(w);return y},[f]),[g,b]=m.useState(null);m.useEffect(()=>{b(h.length>0?h[0].id:null)},[h]);const x=m.useCallback(y=>{if(y.key==="ArrowDown"||y.key==="ArrowUp"||y.key==="Enter")y.preventDefault();else return;const w=h;if(w.length===0)return;if(y.key==="Enter"){w.find(j=>j.id===g)?.onSelect();return}const k=w.findIndex(R=>R.id===g);let S;y.key==="ArrowDown"?S=k<w.length-1?k+1:0:S=k>0?k-1:w.length-1;const C=w[S].id;b(C),w[S].element?.scrollIntoView({block:"nearest"})},[h,g]),v=m.useMemo(()=>({search:a,setSearch:s,visibleIds:f,activeId:g,setActiveId:b,register:d,unregister:u,updateEntry:p}),[a,f,g,d,u,p]);return i.jsx(dE.Provider,{value:v,children:i.jsx("div",{ref:r,role:"combobox","aria-expanded":"true","aria-haspopup":"listbox",className:xe("flex flex-col",e),onKeyDown:x,...n,children:t})})});uE.displayName="Command";const pE=m.forwardRef(({className:e,placeholder:t="Search...",...n},r)=>{const{search:a,setSearch:s}=Mg();return i.jsxs("div",{className:"flex items-center border-b px-3",role:"presentation",children:[i.jsx(as,{className:"mr-2 h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":!0}),i.jsx("input",{ref:r,type:"text",role:"searchbox","aria-autocomplete":"list",autoComplete:"off",autoCorrect:"off",spellCheck:!1,value:a,onChange:o=>s(o.target.value),placeholder:t,className:xe("flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none","placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",e),...n})]})});pE.displayName="CommandInput";const mE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,role:"listbox",className:xe("max-h-[300px] overflow-y-auto overflow-x-hidden",e),...t}));mE.displayName="CommandList";const hE=m.forwardRef(({className:e,...t},n)=>{const{search:r,visibleIds:a}=Mg();return!r||a.size>0?null:i.jsx("div",{ref:n,className:xe("py-6 text-center text-sm text-muted-foreground",e),...t})});hE.displayName="CommandEmpty";const fE=m.forwardRef(({className:e,heading:t,children:n,...r},a)=>i.jsxs("div",{ref:a,className:xe("overflow-hidden p-1",e),role:"group","aria-label":typeof t=="string"?t:void 0,...r,children:[t&&i.jsx("div",{className:"px-2 py-1.5 text-xs font-medium text-muted-foreground",role:"presentation",children:t}),n]}));fE.displayName="CommandGroup";const gE=m.forwardRef(({className:e,value:t,onSelect:n,disabled:r,children:a,...s},o)=>{const{visibleIds:l,activeId:c,setActiveId:d,register:u,unregister:p,updateEntry:f}=Mg(),h=m.useId(),g=m.useRef(null),b=t||(typeof a=="string"?a:"");m.useEffect(()=>(u({id:h,value:b.toLowerCase(),onSelect:n||(()=>{}),element:g.current}),()=>p(h)),[h,b,u,p]),m.useEffect(()=>{f(h,{onSelect:n||(()=>{})})},[h,n,f]);const x=m.useCallback(y=>{g.current=y,f(h,{element:y}),typeof o=="function"?o(y):o&&(o.current=y)},[h,f,o]);if(!l.has(h))return null;const v=c===h;return i.jsx("div",{ref:x,role:"option","aria-selected":v,"aria-disabled":r||void 0,"data-active":v||void 0,className:xe("relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none",v&&"bg-accent text-accent-foreground",r&&"pointer-events-none opacity-50",e),onPointerMove:()=>{!r&&c!==h&&d(h)},onClick:()=>!r&&n?.(),...s,children:a})});gE.displayName="CommandItem";const UM=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("-mx-1 h-px bg-border",e),...t}));UM.displayName="CommandSeparator";function Wd({checked:e,onToggle:t,ariaLabel:n}){const{t:r}=Me("settings"),{isDarkMode:a,toggleDarkMode:s}=Ga(),o=typeof e=="boolean",l=o?e:a,c=n||r("quickSettings.darkMode",{defaultValue:"Toggle dark mode"}),d=()=>{if(o){t?.(!l);return}s()};return i.jsxs("button",{onClick:d,className:xe("relative inline-flex h-7 w-12 flex-shrink-0 touch-manipulation cursor-pointer items-center rounded-full border-2 transition-colors duration-200","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",l?"border-primary bg-primary":"border-border bg-muted"),role:"switch","aria-checked":l,"aria-label":c,children:[i.jsx("span",{className:"sr-only",children:c}),i.jsx("span",{className:xe("flex h-5 w-5 transform items-center justify-center rounded-full shadow-sm transition-transform duration-200",l?"translate-x-[22px] bg-white":"translate-x-[2px] bg-foreground/60 dark:bg-foreground/80"),children:l?i.jsx(N4,{className:"h-3 w-3 text-primary"}):i.jsx(T4,{className:"h-3 w-3 text-white dark:text-background"})})]})}const bE=m.createContext(null);function xE(){const e=m.useContext(bE);if(!e)throw new Error("Dialog components must be used within <Dialog>");return e}const vE=({open:e,onOpenChange:t,defaultOpen:n=!1,children:r})=>{const[a,s]=m.useState(n),o=m.useRef(null),l=e!==void 0,c=l?e:a,d=m.useCallback(p=>{l||s(p),t?.(p)},[l,t]),u=m.useMemo(()=>({open:c,onOpenChange:d,triggerRef:o}),[c,d]);return i.jsx(bE.Provider,{value:u,children:r})},$M=m.forwardRef(({onClick:e,children:t,asChild:n,...r},a)=>{const{onOpenChange:s,triggerRef:o}=xE(),l=m.useCallback(c=>{s(!0),e?.(c)},[s,e]);if(n&&m.isValidElement(t)){const c=t;return m.cloneElement(c,{onClick:d=>{s(!0),c.props.onClick?.(d)},ref:d=>{o.current=d,typeof a=="function"?a(d):a&&(a.current=d)}})}return i.jsx("button",{ref:c=>{o.current=c,typeof a=="function"?a(c):a&&(a.current=c)},type:"button",onClick:l,...r,children:t})});$M.displayName="DialogTrigger";const mk='a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])',Fg=m.forwardRef(({className:e,children:t,onEscapeKeyDown:n,onPointerDownOutside:r,...a},s)=>{const{open:o,onOpenChange:l,triggerRef:c}=xE(),d=m.useRef(null),u=m.useRef(null);return m.useEffect(()=>{o?u.current=document.activeElement:u.current&&((c.current||u.current)?.focus(),u.current=null)},[o,c]),m.useEffect(()=>{if(!o)return;const p=h=>{if(h.key==="Escape"){h.stopPropagation(),n?.(),l(!1);return}if(h.key==="Tab"&&d.current){const g=Array.from(d.current.querySelectorAll(mk));if(g.length===0)return;const b=g[0],x=g[g.length-1];h.shiftKey&&document.activeElement===b?(h.preventDefault(),x.focus()):!h.shiftKey&&document.activeElement===x&&(h.preventDefault(),b.focus())}};document.addEventListener("keydown",p,!0);const f=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",p,!0),document.body.style.overflow=f}},[o,l,n]),m.useEffect(()=>{o&&d.current&&requestAnimationFrame(()=>{d.current?.querySelector(mk)?.focus()})},[o]),o?Nu.createPortal(i.jsxs("div",{className:"fixed inset-0 z-50",children:[i.jsx("div",{className:"fixed inset-0 animate-dialog-overlay-show bg-black/50 backdrop-blur-sm",onClick:()=>{r?.(),l(!1)},"aria-hidden":!0}),i.jsx("div",{ref:p=>{d.current=p,typeof s=="function"?s(p):s&&(s.current=p)},role:"dialog","aria-modal":"true",className:xe("fixed left-1/2 top-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2","rounded-xl border bg-popover text-popover-foreground shadow-lg","animate-dialog-content-show",e),...a,children:t})]}),document.body):null});Fg.displayName="DialogContent";const zg=m.forwardRef(({className:e,...t},n)=>i.jsx("h2",{ref:n,className:xe("sr-only",e),...t}));zg.displayName="DialogTitle";const We=m.forwardRef(({className:e,type:t,...n},r)=>i.jsx("input",{type:t,className:xe("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...n}));We.displayName="Input";const Bg=m.forwardRef(({className:e,contentClassName:t,children:n,...r},a)=>i.jsx("div",{className:xe("relative overflow-hidden",e),...r,children:i.jsx("div",{ref:a,className:xe("h-full w-full overflow-auto rounded-[inherit]",t),style:{WebkitOverflowScrolling:"touch",touchAction:"pan-y"},children:n})}));Bg.displayName="ScrollArea";const qd=m.memo(({children:e,className:t,as:n="span"})=>i.jsx(n,{className:xe("animate-shimmer inline-block bg-[length:250%_100%] bg-clip-text text-transparent","bg-[linear-gradient(90deg,transparent_33%,hsl(var(--foreground))_50%,transparent_67%),linear-gradient(hsl(var(--muted-foreground)),hsl(var(--muted-foreground)))]",t),children:e}));qd.displayName="Shimmer";const yE=m.createContext(null),HM=()=>{const e=m.useContext(yE);if(!e)throw new Error("Reasoning components must be used within Reasoning");return e},GM=1e3,VM=1e3,rf=m.memo(({className:e,isStreaming:t=!1,open:n,defaultOpen:r,onOpenChange:a,duration:s,children:o,...l})=>{const c=r??t,d=r===!1,[u,p]=m.useState(c),f=n!==void 0,h=f?n:u,g=m.useCallback(C=>{f||p(C),a?.(C)},[f,a]),[b,x]=m.useState(s),v=m.useRef(t),[y,w]=m.useState(!1),k=m.useRef(null);m.useEffect(()=>{s!==void 0&&x(s)},[s]),m.useEffect(()=>{t?(v.current=!0,k.current===null&&(k.current=Date.now())):k.current!==null&&(x(Math.ceil((Date.now()-k.current)/VM)),k.current=null)},[t]),m.useEffect(()=>{t&&!h&&!d&&g(!0)},[t,h,g,d]),m.useEffect(()=>{if(v.current&&!t&&h&&!y){const C=setTimeout(()=>{g(!1),w(!0)},GM);return()=>clearTimeout(C)}},[t,h,g,y]);const S=m.useMemo(()=>({duration:b,isOpen:h,isStreaming:t,setIsOpen:g}),[b,h,t,g]);return i.jsx(yE.Provider,{value:S,children:i.jsx(fi,{open:h,onOpenChange:g,className:xe("not-prose",e),...l,children:o})})});rf.displayName="Reasoning";const WM=(e,t)=>e||t===0?i.jsx(qd,{children:"Thinking..."}):t===void 0?i.jsx("p",{children:"Thought for a few seconds"}):i.jsxs("p",{children:["Thought for ",t," seconds"]}),af=m.memo(({className:e,children:t,getThinkingMessage:n=WM,...r})=>{const{isStreaming:a,isOpen:s,duration:o}=HM();return i.jsx(Pa,{className:xe("flex w-full items-center gap-2 text-sm text-muted-foreground transition-colors hover:text-foreground",e),...r,children:t??i.jsxs(i.Fragment,{children:[i.jsx(DD,{className:"h-4 w-4"}),n(a,o),i.jsx(s4,{className:xe("h-4 w-4 transition-transform",s?"rotate-180":"rotate-0")})]})})});af.displayName="ReasoningTrigger";const sf=m.memo(({className:e,children:t,...n})=>i.jsx(gi,{className:xe("mt-4 text-sm text-muted-foreground",e),...n,children:t}));sf.displayName="ReasoningContent";function qM(e){switch(e){case"top":return"top-full left-1/2 transform -translate-x-1/2 border-t-gray-900 dark:border-t-gray-100";case"bottom":return"bottom-full left-1/2 transform -translate-x-1/2 border-b-gray-900 dark:border-b-gray-100";case"left":return"left-full top-1/2 transform -translate-y-1/2 border-l-gray-900 dark:border-l-gray-100";case"right":return"right-full top-1/2 transform -translate-y-1/2 border-r-gray-900 dark:border-r-gray-100";default:return"top-full left-1/2 transform -translate-x-1/2 border-t-gray-900 dark:border-t-gray-100"}}function of({children:e,content:t,position:n="top",className:r="",delay:a=350}){const[s,o]=m.useState(!1),l=m.useRef(null),c=m.useRef(!1),d=m.useRef(null),u=m.useRef(null),[p,f]=m.useState(null),h=m.useCallback(()=>{const w=d.current;if(!w)return;const k=w.getBoundingClientRect(),S=8,C={position:"fixed",zIndex:9999};switch(n){case"bottom":C.left=k.left+k.width/2,C.top=k.bottom+S,C.transform="translateX(-50%)";break;case"left":C.left=k.left-S,C.top=k.top+k.height/2,C.transform="translate(-100%, -50%)";break;case"right":C.left=k.right+S,C.top=k.top+k.height/2,C.transform="translateY(-50%)";break;case"top":default:C.left=k.left+k.width/2,C.top=k.top-S,C.transform="translate(-50%, -100%)";break}f(C)},[n]),g=()=>{l.current!==null&&(window.clearTimeout(l.current),l.current=null)},b=()=>{g(),l.current=window.setTimeout(()=>{o(!0)},a)},x=()=>{g(),o(!1)},v=()=>{g(),c.current=!1,l.current=window.setTimeout(()=>{c.current=!0,o(!0)},a)},y=()=>{g(),!c.current&&o(!1)};return m.useEffect(()=>()=>{g()},[]),m.useEffect(()=>{if(!s||typeof document>"u")return;const w=k=>{const S=k.target;S instanceof Node&&d.current?.contains(S)||(o(!1),c.current=!1)};return document.addEventListener("pointerdown",w,!0),()=>document.removeEventListener("pointerdown",w,!0)},[s]),m.useEffect(()=>{if(!s){f(null);return}const w=window.requestAnimationFrame(h),k=()=>h();return window.addEventListener("resize",k),window.addEventListener("scroll",k,!0),()=>{window.cancelAnimationFrame(w),window.removeEventListener("resize",k),window.removeEventListener("scroll",k,!0)}},[s,h]),t?i.jsxs("div",{ref:d,className:"relative inline-block",onMouseEnter:b,onMouseLeave:x,onTouchStart:v,onTouchEnd:y,onTouchCancel:y,children:[e,s&&typeof document<"u"&&Nu.createPortal(i.jsxs("div",{ref:u,style:p||{position:"fixed",top:"-9999px",left:"-9999px",opacity:0},className:xe("px-2 py-1 text-xs font-medium text-white bg-gray-900 dark:bg-gray-100 dark:text-gray-900 rounded shadow-lg whitespace-nowrap pointer-events-none","animate-in fade-in-0 zoom-in-95 duration-200",r),children:[t,i.jsx("div",{className:xe("absolute w-0 h-0 border-4 border-transparent",qM(n))})]}),document.body)]}):i.jsx(i.Fragment,{children:e})}const wE=m.createContext(null),kE=m.forwardRef(({className:e,status:t="ready",children:n,...r},a)=>{const s=m.useMemo(()=>({status:t}),[t]);return i.jsx(wE.Provider,{value:s,children:i.jsx("form",{ref:a,"data-slot":"prompt-input",className:xe("relative overflow-hidden rounded-xl border border-border/70 bg-zinc-50/95 shadow-sm shadow-zinc-950/5 backdrop-blur-sm transition-all duration-200 focus-within:border-primary/40 focus-within:shadow-md focus-within:ring-1 focus-within:ring-primary/20 dark:bg-zinc-950/90",e),...r,children:n})})});kE.displayName="PromptInput";const SE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"prompt-input-header",className:xe("px-3 pt-3",e),...t}));SE.displayName="PromptInputHeader";const CE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"prompt-input-body",className:xe("relative",e),...t}));CE.displayName="PromptInputBody";const NE=m.forwardRef(({className:e,...t},n)=>i.jsx("textarea",{ref:n,"data-slot":"prompt-input-textarea",className:xe("chat-input-placeholder block max-h-[40vh] w-full resize-none overflow-y-auto bg-transparent px-4 py-2 font-mono text-sm leading-6 text-foreground placeholder-muted-foreground/50 focus:outline-none sm:max-h-[300px]",e),...t}));NE.displayName="PromptInputTextarea";const EE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"prompt-input-footer",className:xe("flex items-center justify-between border-t border-border/30 px-3 py-2",e),...t}));EE.displayName="PromptInputFooter";const TE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"prompt-input-tools",className:xe("flex items-center gap-1",e),...t}));TE.displayName="PromptInputTools";const kd=m.forwardRef(({className:e,tooltip:t,children:n,...r},a)=>{const s=i.jsx(Te,{ref:a,type:"button",variant:"ghost",size:"icon",className:xe("h-8 w-8 [&_svg]:size-4",e),...r,children:n});return t?i.jsx(of,{content:t.shortcut?i.jsxs("span",{className:"flex items-center gap-1.5",children:[t.content,i.jsx("kbd",{className:"rounded bg-white/20 px-1 text-[10px]",children:t.shortcut})]}):t.content,position:t.side??"top",children:s}):s});kd.displayName="PromptInputButton";const AE=m.forwardRef(({className:e,status:t,children:n,...r},a)=>{const s=m.useContext(wE),o=t??s?.status??"ready",l=o==="submitted"||o==="streaming";return i.jsx(Te,{ref:a,type:l?"button":"submit",variant:"default",size:"icon",className:xe("h-8 w-8 rounded-lg",e),...r,children:n??(l?i.jsx(Iu,{className:"h-3.5 w-3.5 fill-current"}):i.jsx(vD,{className:"h-4 w-4"}))})});AE.displayName="PromptInputSubmit";function Fu({children:e,className:t}){return i.jsx("div",{className:xe("inline-flex items-center gap-[2px] rounded-lg bg-muted/60 p-[3px]",t),children:e})}function zu({isActive:e,onClick:t,children:n,className:r}){return i.jsx("button",{onClick:t,className:xe("flex touch-manipulation items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-all duration-150",e?"bg-background text-foreground shadow-sm":"text-muted-foreground active:bg-background/50",r),children:n})}const jE=m.createContext(null);function RE(){const e=m.useContext(jE);if(!e)throw new Error("QueueItem sub-components must be used within <QueueItem>");return e}const IE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"queue",role:"list",className:xe("space-y-0.5",e),...t}));IE.displayName="Queue";const _E=m.forwardRef(({status:e="pending",className:t,children:n,...r},a)=>{const s=m.useMemo(()=>({status:e}),[e]);return i.jsx(jE.Provider,{value:s,children:i.jsx("div",{ref:a,"data-slot":"queue-item","data-status":e,role:"listitem",className:xe("flex items-start gap-2 py-0.5",t),...r,children:n})})});_E.displayName="QueueItem";const LE=m.forwardRef(({className:e,...t},n)=>{const{status:r}=RE();return i.jsxs("div",{ref:n,"data-slot":"queue-item-indicator","aria-hidden":"true",className:xe("mt-0.5 flex h-3.5 w-3.5 flex-shrink-0 items-center justify-center",e),...t,children:[r==="completed"&&i.jsx("svg",{className:"h-3.5 w-3.5 text-green-500 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"})}),r==="in_progress"&&i.jsx("span",{className:"h-2 w-2 animate-pulse rounded-full bg-blue-500 dark:bg-blue-400"}),r==="pending"&&i.jsx("svg",{className:"h-3.5 w-3.5 text-muted-foreground/50",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("circle",{cx:"12",cy:"12",r:"9",strokeWidth:2})})]})});LE.displayName="QueueItemIndicator";const PE=m.forwardRef(({className:e,children:t,...n},r)=>{const{status:a}=RE();return i.jsx("div",{ref:r,"data-slot":"queue-item-content",className:xe("min-w-0 flex-1 text-xs",a==="completed"&&"text-muted-foreground line-through",a==="in_progress"&&"font-medium text-foreground",a==="pending"&&"text-foreground",e),...n,children:t})});PE.displayName="QueueItemContent";const hk="https://github.com/alicomert/pixcode/issues/new",KM="https://github.com/alicomert/pixcode",fk="https://discord.gg/buxwujPNRE";function gk({className:e}){return i.jsx("svg",{className:e,fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:i.jsx("path",{d:"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"})})}function YM({updateAvailable:e,releaseInfo:t,latestVersion:n,currentVersion:r,onShowVersionModal:a,onOpenControlRoom:s,onShowSettings:o,t:l}){return i.jsxs("div",{className:"flex-shrink-0",style:{paddingBottom:"env(safe-area-inset-bottom, 0)"},children:[e&&i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"nav-divider"}),i.jsx("div",{className:"hidden px-2 py-1.5 md:block",children:i.jsxs("button",{className:"group flex w-full items-center gap-2.5 rounded-lg px-2.5 py-2 text-left transition-colors hover:bg-blue-50/80 dark:hover:bg-blue-900/15",onClick:a,children:[i.jsxs("div",{className:"relative flex-shrink-0",children:[i.jsx(Gw,{className:"h-4 w-4 text-blue-500 dark:text-blue-400"}),i.jsx("span",{className:"absolute -right-0.5 -top-0.5 h-1.5 w-1.5 animate-pulse rounded-full bg-blue-500"})]}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("span",{className:"block truncate text-sm font-medium text-blue-600 dark:text-blue-300",children:t?.title||`v${n}`}),i.jsx("span",{className:"text-[10px] text-blue-500/70 dark:text-blue-400/60",children:l("version.updateAvailable")})]})]})}),i.jsx("div",{className:"px-3 py-2 md:hidden",children:i.jsxs("button",{className:"flex h-11 w-full items-center gap-3 rounded-xl border border-blue-200/60 bg-blue-50/80 px-3.5 transition-all active:scale-[0.98] dark:border-blue-700/40 dark:bg-blue-900/15",onClick:a,children:[i.jsxs("div",{className:"relative flex-shrink-0",children:[i.jsx(Gw,{className:"w-4.5 h-4.5 text-blue-500 dark:text-blue-400"}),i.jsx("span",{className:"absolute -right-0.5 -top-0.5 h-1.5 w-1.5 animate-pulse rounded-full bg-blue-500"})]}),i.jsxs("div",{className:"min-w-0 flex-1 text-left",children:[i.jsx("span",{className:"block truncate text-sm font-medium text-blue-600 dark:text-blue-300",children:t?.title||`v${n}`}),i.jsx("span",{className:"text-xs text-blue-500/70 dark:text-blue-400/60",children:l("version.updateAvailable")})]})]})})]}),i.jsx("div",{className:"nav-divider"}),i.jsx("div",{className:"hidden px-2 pt-1.5 md:block",children:i.jsxs("a",{href:hk,target:"_blank",rel:"noopener noreferrer",className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-muted-foreground transition-colors hover:bg-accent/60 hover:text-foreground",children:[i.jsx(Bl,{className:"h-3.5 w-3.5"}),i.jsx("span",{className:"text-sm",children:l("actions.reportIssue")})]})}),i.jsx("div",{className:"hidden px-2 md:block",children:i.jsxs("a",{href:fk,target:"_blank",rel:"noopener noreferrer",className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-muted-foreground transition-colors hover:bg-accent/60 hover:text-foreground",children:[i.jsx(gk,{className:"h-3.5 w-3.5"}),i.jsx("span",{className:"text-sm",children:l("actions.joinCommunity")})]})}),s&&i.jsx("div",{className:"hidden px-2 pt-1.5 md:block",children:i.jsxs("button",{className:"group flex w-full items-center gap-2.5 rounded-lg border border-primary/25 bg-primary/5 px-2.5 py-2 text-left transition-colors hover:bg-primary/10",onClick:s,children:[i.jsx("div",{className:"flex h-7 w-7 items-center justify-center rounded-md bg-primary/10 text-primary",children:i.jsx(Fr,{className:"h-3.5 w-3.5"})}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("span",{className:"block truncate text-sm font-semibold text-foreground",children:l("actions.controlRoom",{defaultValue:"Control Room"})}),i.jsx("span",{className:"block truncate text-[10px] text-muted-foreground",children:l("actions.controlRoomDescription",{defaultValue:"Admin, access, runs"})})]})]})}),i.jsx("div",{className:"hidden px-2 py-1.5 md:block",children:i.jsxs("button",{className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-muted-foreground transition-colors hover:bg-accent/60 hover:text-foreground",onClick:o,children:[i.jsx(Dt,{className:"h-3.5 w-3.5"}),i.jsx("span",{className:"text-sm",children:l("actions.settings")})]})}),i.jsx("div",{className:"hidden px-3 py-2 text-center md:block",children:i.jsxs("a",{href:KM,target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-muted-foreground/40 transition-colors hover:text-muted-foreground",children:["Pixcode v",r," – ",l("branding.openSource")]})}),i.jsx("div",{className:"px-3 pt-3 md:hidden",children:i.jsxs("a",{href:hk,target:"_blank",rel:"noopener noreferrer",className:"flex h-12 w-full items-center gap-3.5 rounded-xl bg-muted/40 px-4 transition-all hover:bg-muted/60 active:scale-[0.98]",children:[i.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-xl bg-background/80",children:i.jsx(Bl,{className:"w-4.5 h-4.5 text-muted-foreground"})}),i.jsx("span",{className:"text-base font-medium text-foreground",children:l("actions.reportIssue")})]})}),i.jsx("div",{className:"px-3 pt-2 md:hidden",children:i.jsxs("a",{href:fk,target:"_blank",rel:"noopener noreferrer",className:"flex h-12 w-full items-center gap-3.5 rounded-xl bg-muted/40 px-4 transition-all hover:bg-muted/60 active:scale-[0.98]",children:[i.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-xl bg-background/80",children:i.jsx(gk,{className:"w-4.5 h-4.5 text-muted-foreground"})}),i.jsx("span",{className:"text-base font-medium text-foreground",children:l("actions.joinCommunity")})]})}),s&&i.jsx("div",{className:"px-3 pt-2 md:hidden",children:i.jsxs("button",{className:"flex h-14 w-full items-center gap-3.5 rounded-xl border border-primary/25 bg-primary/10 px-4 transition-all hover:bg-primary/15 active:scale-[0.98]",onClick:s,children:[i.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-xl bg-primary/15",children:i.jsx(Fr,{className:"w-4.5 h-4.5 text-primary"})}),i.jsxs("div",{className:"min-w-0 flex-1 text-left",children:[i.jsx("span",{className:"block truncate text-base font-semibold text-foreground",children:l("actions.controlRoom",{defaultValue:"Control Room"})}),i.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:l("actions.controlRoomDescription",{defaultValue:"Admin, access, runs"})})]})]})}),i.jsx("div",{className:"px-3 pb-3 pt-2 md:hidden",children:i.jsxs("button",{className:"flex h-12 w-full items-center gap-3.5 rounded-xl bg-muted/40 px-4 transition-all hover:bg-muted/60 active:scale-[0.98]",onClick:o,children:[i.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-xl bg-background/80",children:i.jsx(Dt,{className:"w-4.5 h-4.5 text-muted-foreground"})}),i.jsx("span",{className:"text-base font-medium text-foreground",children:l("actions.settings")})]})})]})}const bk="PIXCODE_GITHUB_STARS",xk="PIXCODE_HIDE_GITHUB_STAR",ZM=3600*1e3,XM=(e,t)=>{const[n,r]=m.useState(null),[a,s]=m.useState(()=>{try{return localStorage.getItem(xk)==="true"}catch{return!1}});m.useEffect(()=>{if(a)return;try{const d=localStorage.getItem(bk);if(d){const u=JSON.parse(d);if(Date.now()-u.timestamp<ZM){r(u.count);return}}}catch{}(async()=>{try{const d=await fetch(`https://api.github.com/repos/${e}/${t}`);if(!d.ok)return;const p=(await d.json()).stargazers_count;if(typeof p=="number"){r(p);try{localStorage.setItem(bk,JSON.stringify({count:p,timestamp:Date.now()}))}catch{}}}catch{}})()},[e,t,a]);const o=m.useCallback(()=>{s(!0);try{localStorage.setItem(xk,"true")}catch{}},[]),l=n!==null?n>=1e3?`${(n/1e3).toFixed(1)}k`:`${n}`:null;return{starCount:n,formattedCount:l,isDismissed:a,dismiss:o}},JM="https://github.com/alicomert/pixcode";function QM({className:e}){return i.jsx("svg",{className:e,fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:i.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})})}function e9(){const{formattedCount:e,isDismissed:t,dismiss:n}=XM("alicomert","pixcode");return t?null:i.jsxs("div",{className:"group/star relative hidden md:block",children:[i.jsxs("a",{href:JM,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1.5 rounded-lg border border-border/50 bg-muted/30 px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground",children:[i.jsx(QM,{className:"h-3.5 w-3.5"}),i.jsx(ui,{className:"h-3 w-3"}),i.jsx("span",{className:"font-medium",children:"Star"}),e&&i.jsx("span",{className:"border-l border-border/50 pl-1.5 tabular-nums",children:e})]}),i.jsx("button",{onClick:r=>{r.preventDefault(),r.stopPropagation(),n()},className:"absolute -right-1.5 -top-1.5 hidden h-4 w-4 items-center justify-center rounded-full border border-border/50 bg-muted text-muted-foreground transition-colors hover:text-foreground group-hover/star:flex","aria-label":"Dismiss",children:i.jsx(St,{className:"h-2.5 w-2.5"})})]})}function vk({value:e,onChange:t,t:n}){const r="flex flex-1 items-center justify-center gap-1 rounded-md px-2 py-1 text-[11px] font-medium transition-all";return i.jsxs("div",{role:"tablist","aria-label":n("tooltips.historyView",{defaultValue:"History view"}),className:"flex rounded-lg bg-muted/40 p-0.5",children:[i.jsxs("button",{type:"button",role:"tab","aria-selected":e==="flat",onClick:()=>t("flat"),className:xe(r,e==="flat"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),title:n("tooltips.historyViewFlat",{defaultValue:"Recent conversations"}),children:[i.jsx(v4,{className:"h-3 w-3"}),n("historyView.flat",{defaultValue:"Recent"})]}),i.jsxs("button",{type:"button",role:"tab","aria-selected":e==="grouped",onClick:()=>t("grouped"),className:xe(r,e==="grouped"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),title:n("tooltips.historyViewGrouped",{defaultValue:"Grouped by project"}),children:[i.jsx(SD,{className:"h-3 w-3"}),n("historyView.grouped",{defaultValue:"By project"})]})]})}function t9({isPWA:e,isMobile:t,isLoading:n,projectsCount:r,searchFilter:a,onSearchFilterChange:s,onClearSearchFilter:o,searchMode:l,onSearchModeChange:c,onRefresh:d,isRefreshing:u,onCreateProject:p,onQuickStartSession:f,onCollapseSidebar:h,historyView:g,onHistoryViewChange:b,t:x}){const v=()=>i.jsxs("div",{className:"flex min-w-0 items-center gap-2.5",children:[i.jsx("svg",{className:"h-6 w-6 flex-shrink-0",viewBox:"0 0 500 500","aria-hidden":"true",children:i.jsx("g",{transform:"translate(250 250) scale(1.25) translate(-250 -250)",children:i.jsxs("g",{transform:"translate(0 500) scale(0.1 -0.1)",fill:"#5C3FFC",children:[i.jsx("path",{d:"M2037 3800 c-104 -40 -191 -134 -231 -250 -23 -67 -20 -82 22 -109 31 -20 287 -177 1009 -618 40 -24 82 -56 93 -70 27 -34 27 -102 0 -136 -11 -13 -106 -78 -212 -143 -106 -64 -201 -124 -210 -132 -16 -14 -18 -41 -18 -302 0 -291 2 -310 38 -310 16 0 267 148 610 359 180 111 270 173 310 213 216 217 215 574 -3 793 -37 38 -107 89 -185 136 -69 42 -253 154 -410 249 -434 264 -509 307 -563 326 -57 20 -191 17 -250 -6z"}),i.jsx("path",{d:"M1803 2994 c-10 -5 -13 -156 -13 -709 0 -671 1 -706 20 -767 27 -89 93 -184 167 -240 89 -67 157 -90 281 -96 92 -4 105 -2 117 14 12 16 14 134 15 735 0 669 -1 718 -17 737 -20 23 -514 322 -541 327 -9 2 -23 2 -29 -1z"})]})})}),i.jsx("h1",{className:"truncate text-sm font-semibold tracking-tight text-foreground",children:x("app.title")})]});return i.jsxs("div",{className:"flex-shrink-0",children:[i.jsxs("div",{className:"hidden px-4 pb-3 pt-4 md:block",style:{},children:[i.jsxs("div",{className:"flex items-center justify-between gap-2",children:[i.jsx(v,{}),i.jsxs("div",{className:"flex flex-shrink-0 items-center gap-0.5",children:[i.jsx(Te,{variant:"ghost",size:"sm",className:"h-8 w-8 rounded-lg p-0 text-muted-foreground hover:bg-accent/80 hover:text-foreground",onClick:d,disabled:u,title:x("tooltips.refresh"),children:i.jsx(at,{className:`h-4 w-4 ${u?"animate-spin":""}`})}),i.jsx(Te,{variant:"ghost",size:"sm",className:"h-8 w-8 rounded-lg p-0 text-muted-foreground hover:bg-accent/80 hover:text-foreground",onClick:p,title:x("tooltips.createProject"),children:i.jsx(Vt,{className:"h-4 w-4"})}),i.jsx(Te,{variant:"ghost",size:"sm",className:"h-8 w-8 rounded-lg p-0 text-muted-foreground hover:bg-accent/80 hover:text-foreground",onClick:h,title:x("tooltips.hideSidebar"),children:i.jsx(Au,{className:"h-4 w-4"})})]})]}),i.jsx(e9,{}),f&&i.jsxs("button",{type:"button",onClick:()=>{f()},className:"mt-2.5 flex w-full items-center justify-center gap-2 rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-sm font-medium text-primary transition-colors hover:bg-primary/10",children:[i.jsx(Fr,{className:"h-4 w-4"}),x("sidebar.newChat",{defaultValue:"New chat"})]}),r>0&&!n&&i.jsxs("div",{className:"mt-2.5 space-y-2",children:[i.jsx(vk,{value:g,onChange:b,t:x}),i.jsxs("div",{className:"flex rounded-lg bg-muted/50 p-0.5",children:[i.jsxs("button",{onClick:()=>c("projects"),"aria-pressed":l==="projects",className:xe("flex-1 flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-all",l==="projects"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Fn,{className:"h-3 w-3"}),x("search.modeProjects")]}),i.jsxs("button",{onClick:()=>c("conversations"),"aria-pressed":l==="conversations",className:xe("flex-1 flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-all",l==="conversations"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Er,{className:"h-3 w-3"}),x("search.modeConversations")]})]}),i.jsxs("div",{className:"relative",children:[i.jsx(as,{className:"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground/50"}),i.jsx(We,{type:"text",placeholder:x(l==="conversations"?"search.conversationsPlaceholder":"projects.searchPlaceholder"),value:a,onChange:y=>s(y.target.value),className:"nav-search-input h-9 rounded-xl border-0 pl-9 pr-8 text-sm transition-all duration-200 placeholder:text-muted-foreground/40 focus-visible:ring-0 focus-visible:ring-offset-0"}),a&&i.jsx("button",{onClick:o,"aria-label":x("tooltips.clearSearch"),className:"absolute right-2.5 top-1/2 -translate-y-1/2 rounded-md p-0.5 hover:bg-accent",children:i.jsx(St,{className:"h-3 w-3 text-muted-foreground"})})]})]})]}),i.jsx("div",{className:"nav-divider hidden md:block"}),i.jsxs("div",{className:"p-3 pb-2 md:hidden",style:e&&t?{paddingTop:"16px"}:{},children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx(v,{}),i.jsxs("div",{className:"flex flex-shrink-0 gap-1.5",children:[i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-muted/50 transition-all active:scale-95",onClick:d,disabled:u,children:i.jsx(at,{className:`h-4 w-4 text-muted-foreground ${u?"animate-spin":""}`})}),i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-primary/90 text-primary-foreground transition-all active:scale-95",onClick:p,children:i.jsx(hi,{className:"h-4 w-4"})})]})]}),r>0&&!n&&i.jsxs("div",{className:"mt-2.5 space-y-2",children:[l==="projects"&&i.jsx(vk,{value:g,onChange:b,t:x}),i.jsxs("div",{className:"flex rounded-lg bg-muted/50 p-0.5",children:[i.jsxs("button",{onClick:()=>c("projects"),"aria-pressed":l==="projects",className:xe("flex-1 flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-all",l==="projects"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Fn,{className:"h-3 w-3"}),x("search.modeProjects")]}),i.jsxs("button",{onClick:()=>c("conversations"),"aria-pressed":l==="conversations",className:xe("flex-1 flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-all",l==="conversations"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Er,{className:"h-3 w-3"}),x("search.modeConversations")]})]}),i.jsxs("div",{className:"relative",children:[i.jsx(as,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground/50"}),i.jsx(We,{type:"text",placeholder:x(l==="conversations"?"search.conversationsPlaceholder":"projects.searchPlaceholder"),value:a,onChange:y=>s(y.target.value),className:"nav-search-input h-10 rounded-xl border-0 pl-10 pr-9 text-sm transition-all duration-200 placeholder:text-muted-foreground/40 focus-visible:ring-0 focus-visible:ring-offset-0"}),a&&i.jsx("button",{onClick:o,"aria-label":x("tooltips.clearSearch"),className:"absolute right-2.5 top-1/2 -translate-y-1/2 rounded-md p-1 hover:bg-accent",children:i.jsx(St,{className:"h-3.5 w-3.5 text-muted-foreground"})})]})]})]}),i.jsx("div",{className:"nav-divider md:hidden"})]})}const n9=160,yk=180;function DE({actions:e,className:t,triggerLabel:n}){const[r,a]=m.useState(!1),[s,o]=m.useState(null),l=m.useRef(null),c=m.useRef(null);m.useLayoutEffect(()=>{if(!r||!l.current)return;const u=l.current.getBoundingClientRect();let p=u.right-n9;p<8&&(p=8);let f=u.bottom+4;f+yk>window.innerHeight&&(f=Math.max(8,u.top-4-yk)),o({top:f,left:p})},[r]),m.useEffect(()=>{if(!r)return;const u=h=>{const g=h.target;l.current?.contains(g)||c.current?.contains(g)||a(!1)},p=h=>{h.key==="Escape"&&a(!1)},f=()=>a(!1);return document.addEventListener("mousedown",u),document.addEventListener("keydown",p),window.addEventListener("scroll",f,!0),window.addEventListener("resize",f),()=>{document.removeEventListener("mousedown",u),document.removeEventListener("keydown",p),window.removeEventListener("scroll",f,!0),window.removeEventListener("resize",f)}},[r]);const d=u=>p=>{p.stopPropagation(),p.preventDefault(),a(!1),u.onClick()};return i.jsxs(i.Fragment,{children:[i.jsx("button",{ref:l,type:"button","aria-haspopup":"menu","aria-expanded":r,"aria-label":n||"Actions",title:n||"Actions",onClick:u=>{u.stopPropagation(),u.preventDefault(),a(p=>!p)},className:xe("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground","opacity-0 transition-all duration-150 hover:bg-accent hover:text-foreground","group-hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary","touch:opacity-100",r&&"bg-accent text-foreground opacity-100",t),children:i.jsx(k4,{className:"h-3.5 w-3.5"})}),r&&s&&Nu.createPortal(i.jsx("div",{ref:c,role:"menu",style:{position:"fixed",top:s.top,left:s.left,zIndex:9999},className:xe("w-40 rounded-xl border border-border/60 bg-popover p-1 shadow-lg","animate-in fade-in-0 zoom-in-95 duration-100"),onClick:u=>u.stopPropagation(),onMouseDown:u=>u.stopPropagation(),children:e.map((u,p)=>{const f=u.icon,h=e[p-1],g=p>0&&u.danger&&!h?.danger;return i.jsxs("div",{children:[g&&i.jsx("div",{className:"my-1 h-px bg-border/60"}),i.jsxs("button",{type:"button",role:"menuitem",onClick:d(u),className:xe("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs",u.danger?"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20":"text-foreground hover:bg-accent"),children:[i.jsx(f,{className:"h-3 w-3"}),u.label]})]},u.id)})}),document.body)]})}const r9=(e,t,n)=>{const r=new Date(e),a=t;if(isNaN(r.getTime()))return n?n("status.unknown"):"Unknown";const s=a.getTime()-r.getTime(),o=Math.floor(s/1e3),l=Math.floor(s/(1e3*60)),c=Math.floor(s/(1e3*60*60)),d=Math.floor(s/(1e3*60*60*24));return o<60?n?n("time.justNow"):"Just now":l===1?n?n("time.oneMinuteAgo"):"1 min ago":l<60?n?n("time.minutesAgo",{count:l}):`${l} mins ago`:c===1?n?n("time.oneHourAgo"):"1 hour ago":c<24?n?n("time.hoursAgo",{count:c}):`${c} hours ago`:d===1?n?n("time.oneDayAgo"):"1 day ago":d<7?n?n("time.daysAgo",{count:d}):`${d} days ago`:r.toLocaleDateString()};function wk({isStarred:e,canDelete:t,onRename:n,onToggleStar:r,onDelete:a,t:s,className:o}){const l=d=>i.jsx(ui,{className:`${d.className??""} ${e?"fill-yellow-400 text-yellow-500":""}`}),c=[{id:"rename",label:s("actions.rename"),icon:y4,onClick:n},{id:"star",label:e?s("actions.unstarSession",{defaultValue:"Remove star"}):s("actions.starSession",{defaultValue:"Star"}),icon:l,onClick:r}];return t&&c.push({id:"delete",label:s("actions.delete"),icon:Rn,onClick:a,danger:!0}),i.jsx(DE,{actions:c,className:o,triggerLabel:s("tooltips.sessionActions",{defaultValue:"Session actions"})})}const a9={claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},kk={claude:"bg-orange-500/10 text-orange-600 dark:bg-orange-400/10 dark:text-orange-300 ring-1 ring-orange-500/15",cursor:"bg-sky-500/10 text-sky-600 dark:bg-sky-400/10 dark:text-sky-300 ring-1 ring-sky-500/15",codex:"bg-violet-500/10 text-violet-600 dark:bg-violet-400/10 dark:text-violet-300 ring-1 ring-violet-500/15",gemini:"bg-emerald-500/10 text-emerald-600 dark:bg-emerald-400/10 dark:text-emerald-300 ring-1 ring-emerald-500/15",qwen:"bg-amber-500/10 text-amber-600 dark:bg-amber-400/10 dark:text-amber-300 ring-1 ring-amber-500/15",opencode:"bg-teal-500/10 text-teal-600 dark:bg-teal-400/10 dark:text-teal-300 ring-1 ring-teal-500/15"};function OE({project:e,session:t,selectedSession:n,currentTime:r,editingSession:a,editingSessionName:s,isStarred:o,compact:l=!1,onEditingSessionNameChange:c,onStartEditingSession:d,onCancelEditingSession:u,onSaveEditingSession:p,onToggleStarSession:f,onProjectSelect:h,onSessionSelect:g,onDeleteSession:b,t:x}){const v=GO(t,r,x),y=n?.id===t.id,w=a===t.id,k=t.__provider,S=a9[k]??k,C=kk[k]??kk.claude,A=UO(v.sessionName),R=()=>{h(e),g(t,e.name)},j=()=>{p(e.name,t.id,s,k)},E=()=>{b(e.name,t.id,v.sessionName,k)},L=()=>d(t.id,v.sessionName),T=()=>f(e.name,t.id),I=i.jsxs("div",{className:"mt-0.5 flex min-w-0 flex-wrap items-center gap-1 text-[10px] leading-tight",children:[i.jsxs("span",{className:xe("inline-flex items-center gap-1 rounded-full px-1.5 py-px font-medium",C),children:[i.jsx(nn,{provider:k,className:"h-2.5 w-2.5"}),S]}),i.jsx("span",{className:"text-muted-foreground/80",children:r9(v.sessionTime,r,x)}),v.isActive&&i.jsxs("span",{className:"inline-flex items-center gap-1 text-green-600 dark:text-green-400",children:[i.jsx("span",{className:"h-1.5 w-1.5 animate-pulse rounded-full bg-green-500"}),x("status.active",{defaultValue:"Active"})]}),A.slice(0,3).map(F=>i.jsxs("span",{className:"rounded-md bg-muted/60 px-1 py-px font-mono text-[9px] uppercase tracking-wide text-muted-foreground ring-1 ring-border/40",children:[".",F]},F))]}),N=i.jsxs(i.Fragment,{children:[i.jsx("input",{type:"text",value:s,onChange:F=>c(F.target.value),onKeyDown:F=>{F.stopPropagation(),F.key==="Enter"?j():F.key==="Escape"&&u()},onClick:F=>F.stopPropagation(),className:"w-full rounded-md border border-primary/40 bg-background px-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-primary",autoFocus:!0}),i.jsx("button",{className:"flex h-6 w-6 items-center justify-center rounded-md bg-green-50 hover:bg-green-100 dark:bg-green-900/20 dark:hover:bg-green-900/40",onClick:F=>{F.stopPropagation(),j()},title:x("tooltips.save"),children:i.jsx(qt,{className:"h-3 w-3 text-green-600 dark:text-green-400"})}),i.jsx("button",{className:"flex h-6 w-6 items-center justify-center rounded-md bg-gray-50 hover:bg-gray-100 dark:bg-gray-900/20 dark:hover:bg-gray-900/40",onClick:F=>{F.stopPropagation(),u()},title:x("tooltips.cancel"),children:i.jsx(St,{className:"h-3 w-3 text-gray-600 dark:text-gray-400"})})]}),O=i.jsx("div",{className:"md:hidden",children:i.jsx("div",{className:xe("relative mx-3 my-0.5 rounded-lg border border-border/30 bg-card p-2 transition-all duration-150 active:scale-[0.98]",y&&"border-primary/30 bg-primary/5 shadow-sm",!y&&v.isActive&&"border-green-500/25 bg-green-50/5 dark:bg-green-900/5",o&&!y&&"ring-1 ring-yellow-300/50 dark:ring-yellow-500/30"),onClick:w?void 0:R,children:w?i.jsx("div",{className:"flex items-center gap-1",children:N}):i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:xe("flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-md",y?"bg-primary/10":"bg-muted/60"),children:i.jsx(nn,{provider:k,className:"h-3 w-3"})}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsxs("div",{className:"flex items-center gap-1",children:[o&&i.jsx("span",{className:"text-yellow-500","aria-hidden":!0,children:"★"}),i.jsx("span",{className:"truncate text-xs font-medium text-foreground",children:v.sessionName})]}),I]}),i.jsx("div",{className:"flex-shrink-0",onClick:F=>F.stopPropagation(),children:i.jsx(wk,{isStarred:o,canDelete:!v.isCursorSession,onRename:L,onToggleStar:T,onDelete:E,t:x,className:"!opacity-100"})})]})})}),$=i.jsxs("div",{className:xe("group/item relative hidden md:block"),children:[i.jsxs(Te,{variant:"ghost",className:xe("relative h-auto w-full justify-start overflow-hidden p-0 text-left font-normal transition-colors duration-150","hover:bg-accent/60",y&&"bg-accent text-accent-foreground",o&&!y&&"bg-yellow-50/40 hover:bg-yellow-100/40 dark:bg-yellow-900/10 dark:hover:bg-yellow-900/20",l?"rounded-xl px-3 py-2.5":"rounded-lg px-3 py-2"),onClick:w?void 0:()=>g(t,e.name),children:[y&&i.jsx("span",{"aria-hidden":!0,className:"absolute left-0 top-1/2 h-5 w-0.5 -translate-y-1/2 rounded-r bg-primary"}),!y&&!w&&i.jsx("span",{"aria-hidden":!0,className:"session-item-accent"}),i.jsxs("div",{className:"flex w-full min-w-0 items-start gap-2 pr-6",children:[i.jsx("div",{className:xe("mt-0.5 flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-md",y?"bg-primary/10":"bg-muted/50 group-hover/item:bg-muted/80"),children:i.jsx(nn,{provider:k,className:"h-3 w-3"})}),i.jsx("div",{className:"min-w-0 flex-1",children:w?i.jsx("div",{className:"flex items-center gap-1",children:N}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-1",children:[o&&i.jsx("span",{className:"flex-shrink-0 text-yellow-500","aria-hidden":!0,children:"★"}),i.jsx("span",{className:"truncate text-xs font-medium text-foreground",children:v.sessionName})]}),I]})})]})]}),!w&&i.jsx("div",{className:"absolute right-1.5 top-1/2 -translate-y-1/2",onClick:F=>F.stopPropagation(),children:i.jsx(wk,{isStarred:o,canDelete:!v.isCursorSession,onRename:L,onToggleStar:T,onDelete:E,t:x,className:"opacity-0 focus-visible:opacity-100 group-hover/item:opacity-100"})})]});return i.jsxs("div",{className:"group relative",children:[O,$]})}const i9=e=>e==="claude-code"?"claude":e==="codex"?"codex":e==="gemini"?"gemini":e==="qwen"?"qwen":e==="opencode"?"opencode":null;function s9(){return i.jsx(i.Fragment,{children:Array.from({length:3}).map((e,t)=>i.jsx("div",{className:"rounded-md p-2",children:i.jsxs("div",{className:"flex items-start gap-2",children:[i.jsx("div",{className:"mt-0.5 h-3 w-3 animate-pulse rounded-full bg-muted"}),i.jsxs("div",{className:"flex-1 space-y-1",children:[i.jsx("div",{className:"h-3 animate-pulse rounded bg-muted",style:{width:`${60+t*15}%`}}),i.jsx("div",{className:"h-2 w-1/2 animate-pulse rounded bg-muted"})]})]})},t))})}function o9({project:e,isExpanded:t,sessions:n,selectedSession:r,initialSessionsLoaded:a,isLoadingSessions:s,currentTime:o,editingSession:l,editingSessionName:c,isSessionStarred:d,onEditingSessionNameChange:u,onStartEditingSession:p,onCancelEditingSession:f,onSaveEditingSession:h,onToggleStarSession:g,onProjectSelect:b,onSessionSelect:x,onDeleteSession:v,onLoadMoreSessions:y,onNewSession:w,onOpenOrchestration:k,t:S}){const[C,A]=m.useState([]);if(m.useEffect(()=>{if(!t)return;let E=!1;const L=async()=>{const I=await Ne(`/api/orchestration/workflows/runs?projectId=${encodeURIComponent(e.name)}`);if(!I.ok)return;const N=await I.json();E||A((N.runs??[]).slice(0,5))};L();const T=window.setInterval(()=>{L()},15e3);return()=>{E=!0,window.clearInterval(T)}},[t,e.name]),!t)return null;const R=n.length>0,j=e.sessionMeta?.hasMore===!0;return i.jsxs("div",{className:"ml-3 space-y-1 border-l border-border pl-3",children:[i.jsx("div",{className:"px-3 pb-1 pt-1 md:hidden",children:i.jsxs("button",{className:"flex h-8 w-full items-center justify-center gap-2 rounded-md bg-primary text-xs font-medium text-primary-foreground transition-all duration-150 hover:bg-primary/90 active:scale-[0.98]",onClick:()=>{b(e),w(e)},children:[i.jsx(Vt,{className:"h-3 w-3"}),S("sessions.newSession")]})}),i.jsxs(Te,{variant:"default",size:"sm",className:"hidden h-8 w-full justify-start gap-2 bg-primary text-xs font-medium text-primary-foreground transition-colors hover:bg-primary/90 md:flex",onClick:()=>w(e),children:[i.jsx(Vt,{className:"h-3 w-3"}),S("sessions.newSession")]}),C.length>0&&i.jsxs("div",{className:"space-y-1",children:[i.jsxs("div",{className:"flex items-center gap-1 px-3 pt-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:[i.jsx(Tr,{className:"h-3 w-3"}),S("orchestration.section")]}),C.map(E=>{const L=[...new Set(E.nodeRuns.map(T=>i9(T.adapterId)).filter(Boolean))];return i.jsx("button",{type:"button",onClick:()=>k?.(e,E.id),className:"w-full rounded-lg px-3 py-2 text-left transition-colors hover:bg-accent/60",children:i.jsxs("div",{className:"flex min-w-0 items-start gap-2",children:[i.jsx(Tr,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-primary"}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("div",{className:"truncate text-xs font-medium text-foreground",children:E.input||S("orchestration.fallbackTitle")}),i.jsxs("div",{className:"mt-1 flex items-center gap-1",children:[L.slice(0,4).map(T=>i.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded bg-muted",children:i.jsx(nn,{provider:T,className:"h-3 w-3"})},T)),i.jsx("span",{className:"text-[10px] text-muted-foreground",children:S(`common:orchestration.status.${E.status}`,{defaultValue:E.status})})]})]})]})},E.id)})]}),a?!R&&!s?i.jsx("div",{className:"px-3 py-2 text-left",children:i.jsx("p",{className:"text-xs text-muted-foreground",children:S("sessions.noSessions")})}):n.map(E=>i.jsx(OE,{project:e,session:E,selectedSession:r,currentTime:o,editingSession:l,editingSessionName:c,isStarred:d(e.name,E.id),onEditingSessionNameChange:u,onStartEditingSession:p,onCancelEditingSession:f,onSaveEditingSession:h,onToggleStarSession:g,onProjectSelect:b,onSessionSelect:x,onDeleteSession:v,t:S},E.id)):i.jsx(s9,{}),R&&j&&i.jsx(Te,{variant:"ghost",size:"sm",className:"mt-2 w-full justify-center gap-2 text-muted-foreground",onClick:()=>y(e),disabled:s,children:s?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"h-3 w-3 animate-spin rounded-full border border-muted-foreground border-t-transparent"}),S("sessions.loading")]}):i.jsxs(i.Fragment,{children:[i.jsx(Mr,{className:"h-3 w-3"}),S("sessions.showMore")]})})]})}const l9=(e,t)=>{const n=e.length;return t&&n>=5?`${n}+`:`${n}`};function c9({project:e,selectedProject:t,selectedSession:n,isExpanded:r,isDeleting:a,isStarred:s,editingProject:o,editingName:l,sessions:c,initialSessionsLoaded:d,isLoadingSessions:u,currentTime:p,editingSession:f,editingSessionName:h,isSessionStarred:g,onEditingNameChange:b,onToggleProject:x,onProjectSelect:v,onToggleStarProject:y,onToggleStarSession:w,onStartEditingProject:k,onCancelEditingProject:S,onSaveProjectName:C,onDeleteProject:A,onSessionSelect:R,onDeleteSession:j,onLoadMoreSessions:E,onNewSession:L,onOpenOrchestration:T,onEditingSessionNameChange:I,onStartEditingSession:N,onCancelEditingSession:O,onSaveEditingSession:$,t:F}){const q=t?.name===e.name,Y=o===e.name,P=e.sessionMeta?.hasMore===!0,B=l9(c,P),V=`${B} session${c.length===1?"":"s"}`,z=()=>x(e.name),ee=()=>y(e.name),ae=()=>{C(e.name)},ue=()=>{t?.name!==e.name&&v(e),z()};return i.jsxs("div",{className:xe("md:space-y-1",a&&"opacity-50 pointer-events-none"),children:[i.jsxs("div",{className:"md:group group",children:[i.jsx("div",{className:"md:hidden",children:i.jsx("div",{className:xe("p-3 mx-3 my-1 rounded-lg bg-card border border-border/50 active:scale-[0.98] transition-all duration-150",q&&"bg-primary/5 border-primary/20",s&&!q&&"bg-yellow-50/50 dark:bg-yellow-900/5 border-yellow-200/30 dark:border-yellow-800/30"),onClick:z,children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[i.jsx("div",{className:xe("w-8 h-8 rounded-lg flex items-center justify-center transition-colors",r?"bg-primary/10":"bg-muted"),children:r?i.jsx(Nr,{className:"h-4 w-4 text-primary"}):i.jsx(Fn,{className:"h-4 w-4 text-muted-foreground"})}),i.jsx("div",{className:"min-w-0 flex-1",children:Y?i.jsx("input",{type:"text",value:l,onChange:le=>b(le.target.value),className:"w-full rounded-lg border-2 border-primary/40 bg-background px-3 py-2 text-sm text-foreground shadow-sm transition-all duration-200 focus:border-primary focus:shadow-md focus:outline-none",placeholder:F("projects.projectNamePlaceholder"),autoFocus:!0,autoComplete:"off",onClick:le=>le.stopPropagation(),onKeyDown:le=>{le.key==="Enter"&&ae(),le.key==="Escape"&&S()},style:{fontSize:"16px",WebkitAppearance:"none",borderRadius:"8px"}}):i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"flex min-w-0 flex-1 items-center justify-between",children:i.jsx("h3",{className:"truncate text-sm font-medium text-foreground",children:e.displayName})}),i.jsx("p",{className:"text-xs text-muted-foreground",children:V})]})})]}),i.jsx("div",{className:"flex items-center gap-1",children:Y?i.jsxs(i.Fragment,{children:[i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-green-500 shadow-sm transition-all duration-150 active:scale-90 active:shadow-none dark:bg-green-600",onClick:le=>{le.stopPropagation(),ae()},children:i.jsx(qt,{className:"h-4 w-4 text-white"})}),i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-gray-500 shadow-sm transition-all duration-150 active:scale-90 active:shadow-none dark:bg-gray-600",onClick:le=>{le.stopPropagation(),S()},children:i.jsx(St,{className:"h-4 w-4 text-white"})})]}):i.jsxs(i.Fragment,{children:[i.jsx("button",{className:xe("w-8 h-8 rounded-lg flex items-center justify-center active:scale-90 transition-all duration-150 border",s?"bg-yellow-500/10 dark:bg-yellow-900/30 border-yellow-200 dark:border-yellow-800":"bg-gray-500/10 dark:bg-gray-900/30 border-gray-200 dark:border-gray-800"),onClick:le=>{le.stopPropagation(),ee()},title:F(s?"tooltips.removeFromFavorites":"tooltips.addToFavorites"),children:i.jsx(ui,{className:xe("w-4 h-4 transition-colors",s?"text-yellow-600 dark:text-yellow-400 fill-current":"text-gray-600 dark:text-gray-400")})}),i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg border border-red-200 bg-red-500/10 active:scale-90 dark:border-red-800 dark:bg-red-900/30",onClick:le=>{le.stopPropagation(),A(e)},children:i.jsx(Rn,{className:"h-4 w-4 text-red-600 dark:text-red-400"})}),i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg border border-primary/20 bg-primary/10 active:scale-90 dark:border-primary/30 dark:bg-primary/20",onClick:le=>{le.stopPropagation(),k(e)},children:i.jsx(Gh,{className:"h-4 w-4 text-primary"})}),i.jsx("div",{className:"flex h-6 w-6 items-center justify-center rounded-md bg-muted/30",children:r?i.jsx(Mr,{className:"h-3 w-3 text-muted-foreground"}):i.jsx(ua,{className:"h-3 w-3 text-muted-foreground"})})]})})]})})}),i.jsxs(Te,{variant:"ghost",className:xe("hidden md:flex w-full justify-between p-2 h-auto font-normal hover:bg-accent/50",q&&"bg-accent text-accent-foreground",s&&!q&&"bg-yellow-50/50 dark:bg-yellow-900/10 hover:bg-yellow-100/50 dark:hover:bg-yellow-900/20"),onClick:ue,children:[i.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[r?i.jsx(Nr,{className:"h-4 w-4 flex-shrink-0 text-primary"}):i.jsx(Fn,{className:"h-4 w-4 flex-shrink-0 text-muted-foreground"}),i.jsx("div",{className:"min-w-0 flex-1 text-left",children:Y?i.jsxs("div",{className:"space-y-1",children:[i.jsx("input",{type:"text",value:l,onChange:le=>b(le.target.value),className:"w-full rounded border border-border bg-background px-2 py-1 text-sm text-foreground focus:ring-2 focus:ring-primary/20",placeholder:F("projects.projectNamePlaceholder"),autoFocus:!0,onKeyDown:le=>{le.key==="Enter"&&ae(),le.key==="Escape"&&S()}}),i.jsx("div",{className:"truncate text-xs text-muted-foreground",title:e.fullPath,children:e.fullPath})]}):i.jsxs("div",{children:[i.jsx("div",{className:"truncate text-sm font-semibold text-foreground",title:e.displayName,children:e.displayName}),i.jsxs("div",{className:"text-xs text-muted-foreground",children:[B,e.fullPath!==e.displayName&&i.jsxs("span",{className:"ml-1 opacity-60",title:e.fullPath,children:[" - ",e.fullPath.length>25?`...${e.fullPath.slice(-22)}`:e.fullPath]})]})]})})]}),i.jsx("div",{className:"flex flex-shrink-0 items-center gap-1",children:Y?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"flex h-6 w-6 cursor-pointer items-center justify-center rounded text-green-600 transition-colors hover:bg-green-50 hover:text-green-700 dark:hover:bg-green-900/20",onClick:le=>{le.stopPropagation(),ae()},children:i.jsx(qt,{className:"h-3 w-3"})}),i.jsx("div",{className:"flex h-6 w-6 cursor-pointer items-center justify-center rounded text-gray-500 transition-colors hover:bg-gray-50 hover:text-gray-700 dark:hover:bg-gray-800",onClick:le=>{le.stopPropagation(),S()},children:i.jsx(St,{className:"h-3 w-3"})})]}):i.jsxs(i.Fragment,{children:[s&&i.jsx("div",{className:"flex h-6 w-6 cursor-pointer items-center justify-center rounded hover:bg-yellow-50 dark:hover:bg-yellow-900/20",onClick:le=>{le.stopPropagation(),ee()},title:F("tooltips.removeFromFavorites"),children:i.jsx(ui,{className:"h-3 w-3 fill-current text-yellow-600 dark:text-yellow-400"})}),i.jsx(DE,{triggerLabel:F("tooltips.projectActions",{defaultValue:"Project actions"}),actions:[{id:"rename",label:F("actions.rename"),icon:Gh,onClick:()=>k(e)},{id:"star",label:F(s?"tooltips.removeFromFavorites":"tooltips.addToFavorites"),icon:ui,onClick:ee},{id:"delete",label:F("actions.delete",{defaultValue:"Delete"}),icon:Rn,onClick:()=>A(e),danger:!0}]}),r?i.jsx(Mr,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"}):i.jsx(ua,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})]})})]})]}),i.jsx(o9,{project:e,isExpanded:r,sessions:c,selectedSession:n,initialSessionsLoaded:d,isLoadingSessions:u,currentTime:p,editingSession:f,editingSessionName:h,isSessionStarred:g,onEditingSessionNameChange:I,onStartEditingSession:N,onCancelEditingSession:O,onSaveEditingSession:$,onToggleStarSession:w,onProjectSelect:v,onSessionSelect:R,onDeleteSession:j,onLoadMoreSessions:E,onNewSession:L,onOpenOrchestration:T,t:F})]})}function ME({isLoading:e,loadingProgress:t,projectsCount:n,filteredProjectsCount:r,t:a}){return e?i.jsxs("div",{className:"px-4 py-12 text-center md:py-8",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-muted md:mb-3",children:i.jsx("div",{className:"h-6 w-6 animate-spin rounded-full border-2 border-muted-foreground border-t-transparent"})}),i.jsx("h3",{className:"mb-2 text-base font-medium text-foreground md:mb-1",children:a("projects.loadingProjects")}),t&&t.total>0?i.jsxs("div",{className:"space-y-2",children:[i.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full bg-muted",children:i.jsx("div",{className:"h-full bg-primary transition-all duration-300 ease-out",style:{width:`${t.current/t.total*100}%`}})}),i.jsxs("p",{className:"text-sm text-muted-foreground",children:[t.current,"/",t.total," ",a("projects.projects")]}),t.currentProject&&i.jsx("p",{className:"mx-auto max-w-[200px] truncate text-xs text-muted-foreground/70",title:t.currentProject,children:t.currentProject.split("-").slice(-2).join("/")})]}):i.jsx("p",{className:"text-sm text-muted-foreground",children:a("projects.fetchingProjects")})]}):n===0?i.jsxs("div",{className:"px-4 py-12 text-center md:py-8",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-muted md:mb-3",children:i.jsx(Fn,{className:"h-6 w-6 text-muted-foreground"})}),i.jsx("h3",{className:"mb-2 text-base font-medium text-foreground md:mb-1",children:a("projects.noProjects")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:a("projects.runClaudeCli")})]}):r===0?i.jsxs("div",{className:"px-4 py-12 text-center md:py-8",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-muted md:mb-3",children:i.jsx(as,{className:"h-6 w-6 text-muted-foreground"})}),i.jsx("h3",{className:"mb-2 text-base font-medium text-foreground md:mb-1",children:a("projects.noMatchingProjects")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:a("projects.tryDifferentSearch")})]}):null}function d9({projects:e,filteredProjects:t,selectedProject:n,selectedSession:r,isLoading:a,loadingProgress:s,expandedProjects:o,editingProject:l,editingName:c,loadingSessions:d,initialSessionsLoaded:u,currentTime:p,editingSession:f,editingSessionName:h,deletingProjects:g,getProjectSessions:b,isProjectStarred:x,isSessionStarred:v,onEditingNameChange:y,onToggleProject:w,onProjectSelect:k,onToggleStarProject:S,onToggleStarSession:C,onStartEditingProject:A,onCancelEditingProject:R,onSaveProjectName:j,onDeleteProject:E,onSessionSelect:L,onDeleteSession:T,onLoadMoreSessions:I,onNewSession:N,onOpenOrchestration:O,onEditingSessionNameChange:$,onStartEditingSession:F,onCancelEditingSession:q,onSaveEditingSession:Y,t:P}){const B=i.jsx(ME,{isLoading:a,loadingProgress:s,projectsCount:e.length,filteredProjectsCount:t.length,t:P});m.useEffect(()=>{let le="Pixcode";const se=n?.displayName?.trim();se&&(le=`${se} - ${le}`),document.title=le},[n]);const V=!a&&e.length>0&&t.length>0,z=le=>le.source==="history"||le.autoDiscovered===!0&&le.isManuallyAdded!==!0,ee=t.filter(le=>!z(le)),ae=t.filter(le=>z(le)),ue=le=>i.jsx(c9,{project:le,selectedProject:n,selectedSession:r,isExpanded:o.has(le.name),isDeleting:g.has(le.name),isStarred:x(le.name),editingProject:l,editingName:c,sessions:b(le),initialSessionsLoaded:u.has(le.name),isLoadingSessions:!!d[le.name],currentTime:p,editingSession:f,editingSessionName:h,isSessionStarred:v,onEditingNameChange:y,onToggleProject:w,onProjectSelect:k,onToggleStarProject:S,onToggleStarSession:C,onStartEditingProject:A,onCancelEditingProject:R,onSaveProjectName:j,onDeleteProject:E,onSessionSelect:L,onDeleteSession:T,onLoadMoreSessions:I,onNewSession:N,onOpenOrchestration:O,onEditingSessionNameChange:$,onStartEditingSession:F,onCancelEditingSession:q,onSaveEditingSession:Y,t:P},le.name);return i.jsx("div",{className:"pb-safe-area-inset-bottom md:space-y-1",children:V?i.jsxs(i.Fragment,{children:[ee.map(le=>ue(le)),ae.length>0&&i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"px-3 pb-1 pt-3 text-[11px] font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400",children:P("projects.detectedFromHistory")}),ae.map(le=>ue(le))]})]}):B})}function Ca(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function FE(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}/*!
|
|
220
|
+
*/const pD=[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]],mD=Nt("workflow",pD),f4=r4,hD=b7,Gw=m7,fD=a7,g4=c7,gD=n4,Mr=s4,kg=Q7,ua=t8,bD=r8,nr=u7,pa=n4,Bd=f7,b4=o7,Au=K7,ju=Z7,Sg=v7,at=a4,Ht=a4,Ru=S7,xD=w7,vD=oL,ca=A8,cn=R8,qt=W7,La=G7,x4=K8,Pn=EL,oc=d4,yD=d4,Ud=D7,lo=i8,Eo=o4,Ys=d8,co=y8,En=k8,Fn=B8,Nr=O8,hi=F8,wD=pL,kD=W8,v4=Q8,Cg=yL,SD=N7,CD=M7,ND=zL,y4=c4,Gh=cL,ED=$8,Vh=c4,w4=hL,Vt=gL,Rn=UL,k4=C8,as=rL,St=u4,Wh=u4,Iu=LL,Ng=I7,TD=j7,$d=T7,AD=E8,Er=i4,jD=i4,RD=HL,is=VL,Eg=U7,Bl=z7,Tg=l8,lc=P8,Ag=_8,or=G8,S4=o4,_u=l4,ID=l4,C4=X8,hr=tL,N4=iL,Lu=g8,E4=ML,_D=xL,To=CL,LD=kL,Dt=p8,qh=e7,cc=x8,Fr=jL,ui=IL,T4=DL,Ln=h8,jg=L7,PD=tP,Ni=oP,Rg=m4,DD=m4,zn=$P,yd=GP,Pu=WP,ws=QL,ks=rP,OD=iP,hl=cP,Zs=uP,Vw=hP,fl=gP,Zo=yP,MD=kP,A4=PP,Kh=CP,Vr=AP,Xo=EP,Ww=RP,Jo=_P,Yh=OP,FD=FP,Zh=BP,Hs=ZP,gl=JP,qa=eD,Ss=nD,zD=aD,Xh=sD,BD=cD,Qo=uD,Tr=mD,Du=xP,UD=KP,$D=[{type:"key",id:"esc",label:"Esc",sequence:"\x1B"},{type:"key",id:"tab",label:"Tab",sequence:" "},{type:"key",id:"shift-tab",label:"⇧Tab",sequence:"\x1B[Z"},{type:"modifier",id:"ctrl",label:"CTRL",modifier:"ctrl"},{type:"modifier",id:"alt",label:"ALT",modifier:"alt"},{type:"arrow",id:"arrow-up",sequence:"\x1B[A",icon:"up"},{type:"arrow",id:"arrow-down",sequence:"\x1B[B",icon:"down"},{type:"arrow",id:"arrow-left",sequence:"\x1B[D",icon:"left"},{type:"arrow",id:"arrow-right",sequence:"\x1B[C",icon:"right"}],HD={up:hD,down:f4,left:fD,right:g4},el=e=>e.preventDefault(),qw="shrink-0 rounded-md border border-gray-600 bg-gray-700 px-2.5 py-1.5 text-xs font-medium text-gray-100 transition-colors select-none active:bg-blue-600 active:text-white active:border-blue-600 disabled:cursor-not-allowed disabled:opacity-40",GD="shrink-0 rounded-md border border-blue-500 bg-blue-600 px-2.5 py-1.5 text-xs font-medium text-white transition-colors select-none disabled:cursor-not-allowed disabled:opacity-40",Ip="shrink-0 rounded-md border border-gray-600 bg-gray-700 p-1.5 text-gray-100 transition-colors select-none active:bg-blue-600 active:text-white active:border-blue-600 disabled:cursor-not-allowed disabled:opacity-40";function Kw({wsRef:e,terminalRef:t,isConnected:n,bottomOffset:r="bottom-0"}){const{t:a}=Me("settings"),[s,o]=m.useState(!1),[l,c]=m.useState(!1),[d,u]=m.useState(!1),p=m.useCallback(b=>{Ki(e.current,{type:"input",data:b})},[e]),f=m.useCallback(()=>{t.current?.scrollToBottom()},[t]),h=m.useCallback(async()=>{if(typeof navigator>"u"||!navigator.clipboard?.readText){u(!0);return}try{const b=await navigator.clipboard.readText();u(!1),b.length>0&&p(b)}catch{u(!0)}},[p]);m.useEffect(()=>{if(!d)return;const b=window.setTimeout(()=>u(!1),2500);return()=>window.clearTimeout(b)},[d]);const g=m.useCallback(b=>{let x=b;if(s&&b.length===1){const v=b.toLowerCase().charCodeAt(0);v>=97&&v<=122&&(x=String.fromCharCode(v-96)),o(!1)}l&&b.length===1&&(x="\x1B"+x,c(!1)),p(x)},[s,l,p]);return i.jsx("div",{className:`pointer-events-none fixed inset-x-0 ${r} z-20 px-2 md:hidden`,children:i.jsxs("div",{className:"pointer-events-auto flex items-center gap-1 overflow-x-auto rounded-lg border border-gray-700/80 bg-gray-900/95 px-1.5 py-1.5 shadow-lg backdrop-blur-sm [-webkit-overflow-scrolling:touch] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:[d&&i.jsx("span",{className:"shrink-0 rounded-md border border-yellow-500/50 bg-yellow-500/15 px-2 py-1 text-[11px] text-yellow-100",children:"Clipboard blocked"}),i.jsx("button",{type:"button",onPointerDown:el,onClick:()=>{h()},disabled:!n,className:Ip,title:a("terminalShortcuts.paste",{defaultValue:"Paste"}),"aria-label":a("terminalShortcuts.paste",{defaultValue:"Paste"}),children:i.jsx(lo,{className:"h-4 w-4"})}),$D.map(b=>{if(b.type==="modifier"){const x=b.modifier==="ctrl"?s:l,v=b.modifier==="ctrl"?()=>o(y=>!y):()=>c(y=>!y);return i.jsx("button",{type:"button",onPointerDown:el,onClick:v,disabled:!n,className:x?GD:qw,children:b.label},b.id)}if(b.type==="arrow"){const x=HD[b.icon];return i.jsx("button",{type:"button",onPointerDown:el,onClick:()=>p(b.sequence),disabled:!n,className:Ip,children:i.jsx(x,{className:"h-4 w-4"})},b.id)}return i.jsx("button",{type:"button",onPointerDown:el,onClick:()=>g(b.sequence),disabled:!n,className:qw,children:b.label},b.id)}),i.jsx("button",{type:"button",onPointerDown:el,onClick:f,disabled:!n,className:Ip,title:a("terminalShortcuts.scrollDown"),"aria-label":a("terminalShortcuts.scrollDown"),children:i.jsx(gD,{className:"h-4 w-4"})})]})})}function VD({tabId:e,selectedProject:t=null,selectedSession:n=null,initialCommand:r=null,isPlainShell:a=!1,onProcessComplete:s=null,minimal:o=!1,autoConnect:l=!1,forceNewSession:c=!1,startupInput:d=null,permissionOverride:u=null,provider:p=null,isActive:f=!0,onClose:h=null}){const{t:g}=Me("chat"),[b,x]=m.useState(!1),[v,y]=m.useState(null),w=m.useRef(null),k=m.useRef(null),{terminalContainerRef:S,terminalRef:C,wsRef:A,isConnected:R,isInitialized:j,isConnecting:E,authUrl:L,authUrlVersion:T,connectToShell:I,disconnectFromShell:N,openAuthUrlInBrowser:O,copyAuthUrlToClipboard:$}=K_({tabId:e,selectedProject:t,selectedSession:n,initialCommand:r,isPlainShell:a,minimal:o,autoConnect:l,forceNewSession:c,startupInput:d,permissionOverride:u,provider:p,isRestarting:b,onProcessComplete:s,onOutputRef:k}),F=m.useCallback(()=>{const we=C.current;if(!we)return;const Ce=we.buffer.active,je=Ce.baseY+Ce.cursorY,M=Math.min(Ce.baseY+Ce.length-1,je+10),J=Math.max(0,je-w_),te=[];for(let he=J;he<=M;he++){const oe=Ce.getLine(he);oe&&te.push(oe.translateToString().trimEnd())}let H=-1;for(let he=te.length-1;he>=0;he--)if(/esc to cancel/i.test(te[he])||/enter to select/i.test(te[he])){H=he;break}if(H===-1){y(null);return}const U=new Map,Q=Math.max(0,H-k_);for(let he=H-1;he>=Q;he--){const oe=te[he].match(/^\s*[❯›>]?\s*(\d+)\.\s+(.+)/);if(oe){const Ee=oe[1],fe=oe[2].trim();parseInt(Ee,10)<=S_&&fe.length>0&&!U.has(Ee)&&U.set(Ee,fe)}}const ge=[];for(let he=1;he<=U.size&&U.has(String(he));he++)ge.push({number:String(he),label:U.get(String(he))});y(ge.length>=C_?ge:null)},[C]),q=m.useCallback(()=>{w.current&&clearTimeout(w.current),w.current=setTimeout(F,y_)},[F]);m.useEffect(()=>{k.current=q},[q]),m.useEffect(()=>()=>{w.current&&clearTimeout(w.current)},[]),m.useEffect(()=>{R||(w.current&&(clearTimeout(w.current),w.current=null),y(null))},[R]),m.useEffect(()=>{if(!f||!j||!R)return;const we=()=>{C.current?.focus()},Ce=window.requestAnimationFrame(we),je=window.setTimeout(we,0);return()=>{window.cancelAnimationFrame(Ce),window.clearTimeout(je)}},[f,R,j,C]);const Y=m.useCallback(we=>{Ki(A.current,{type:"input",data:we})},[A]),P=m.useMemo(()=>$_(n),[n]),B=m.useMemo(()=>p||(n?.__provider?n.__provider:window.localStorage.getItem("selected-provider")||"claude"),[p,n?.__provider]),V=br[B]??"Claude Code",z=m.useMemo(()=>P?P.slice(0,30):null,[P]),ee=m.useMemo(()=>P?P.slice(0,50):null,[P]),ae=m.useCallback(()=>{x(!0),window.setTimeout(()=>{x(!1)},x_)},[]),ue=m.useCallback(()=>{N(),h?.()},[N,h]);if(!t)return i.jsx(Z_,{title:g("shell.selectProject.title"),description:g("shell.selectProject.description")});if(o)return i.jsxs(i.Fragment,{children:[i.jsx(J_,{terminalContainerRef:S,authUrl:L,authUrlVersion:T,initialCommand:r,isConnected:R,openAuthUrlInBrowser:O,copyAuthUrlToClipboard:$}),i.jsx(Kw,{wsRef:A,terminalRef:C,isConnected:R,bottomOffset:"bottom-0"})]});const le=a?g("shell.runCommand",{command:r||g("shell.defaultCommand"),projectName:t.displayName}):n?g("shell.resumeSession",{displayName:ee}):g("shell.startProviderSession",{provider:V,defaultValue:"Start a new {{provider}} session"}),se=a?g("shell.runCommand",{command:r||g("shell.defaultCommand"),projectName:t.displayName}):g("shell.startProviderCli",{provider:V,projectName:t.displayName,defaultValue:"Starting {{provider}} in {{projectName}}"}),me=j?E?"connecting":R?null:"connect":"loading",de=me==="connecting"?se:le;return i.jsxs("div",{className:"flex h-full w-full flex-col bg-gray-900",children:[i.jsx(X_,{isConnected:R,isInitialized:j,isRestarting:b,hasSession:!!n,sessionDisplayNameShort:z,onDisconnect:ue,onRestart:ae,statusNewSessionText:g("shell.status.newSession"),statusInitializingText:g("shell.status.initializing"),statusRestartingText:g("shell.status.restarting"),disconnectLabel:g("shell.actions.disconnect"),disconnectTitle:g("shell.actions.disconnectTitle"),restartLabel:g("shell.actions.restart"),restartTitle:g("shell.actions.restartTitle"),disableRestart:b||R}),i.jsxs("div",{className:"relative flex-1 overflow-hidden p-2",children:[i.jsx("div",{ref:S,className:"h-full w-full focus:outline-none",style:{outline:"none"}}),me&&i.jsx(Y_,{mode:me,description:de,loadingLabel:g("shell.loading"),connectLabel:g("shell.actions.connect"),connectTitle:g("shell.actions.connectTitle"),connectingLabel:g("shell.connecting"),onConnect:I}),v&&R&&i.jsx("div",{className:"absolute inset-x-0 bottom-0 z-10 border-t border-gray-700/80 bg-gray-800/95 px-3 py-2 backdrop-blur-sm",onMouseDown:we=>we.preventDefault(),children:i.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[v.map(we=>i.jsxs("button",{type:"button",onClick:()=>{Y(`${we.number}\r`),y(null)},className:"max-w-36 truncate rounded bg-blue-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-blue-700",title:`${we.number}. ${we.label}`,children:[we.number,". ",we.label]},we.number)),i.jsx("button",{type:"button",onClick:()=>{Y("\x1B"),y(null)},className:"rounded bg-gray-700 px-3 py-1.5 text-xs font-medium text-gray-200 transition-colors hover:bg-gray-600",children:"Esc"})]})})]}),i.jsx(Kw,{wsRef:A,terminalRef:C,isConnected:R})]})}function WD({className:e}){return i.jsx("div",{className:`flex h-full items-center justify-center ${e}`,children:i.jsxs("div",{className:"text-center text-gray-500 dark:text-gray-400",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-800",children:i.jsx("svg",{className:"h-8 w-8 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 002 2z"})})}),i.jsx("h3",{className:"mb-2 text-lg font-semibold",children:"No Project Selected"}),i.jsx("p",{children:"A project is required to open a shell"})]})})}function qD({title:e,isCompleted:t,onClose:n=null}){return i.jsx("div",{className:"flex-shrink-0 border-b border-gray-700 bg-gray-800 px-4 py-2",children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center space-x-2",children:[i.jsx("h3",{className:"text-sm font-medium text-gray-200",children:e}),t&&i.jsx("span",{className:"text-xs text-green-400",children:"(Completed)"})]}),n&&i.jsx("button",{onClick:n,className:"text-gray-400 hover:text-white",title:"Close",children:i.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})})}function Ul({project:e=null,session:t=null,command:n=null,isPlainShell:r=null,isActive:a=!0,autoConnect:s=!0,onComplete:o=null,onClose:l=null,title:c=null,className:d="",showHeader:u=!0,compact:p=!1,minimal:f=!1,forceNewSession:h=!1,startupInput:g=null,permissionOverride:b=null,provider:x=null,tabId:v=null}){const[y,w]=m.useState(!1),k=m.useMemo(()=>v||`tab_${crypto.randomUUID()}`,[v]),S=r!==null?r:n!==null,C=m.useCallback(A=>{w(!0),o?.(A)},[o]);return e?i.jsxs("div",{className:`flex h-full w-full flex-col ${d}`,children:[!f&&u&&c&&i.jsx(qD,{title:c,isCompleted:y,onClose:l}),i.jsx("div",{className:"min-h-0 w-full flex-1",children:i.jsx(VD,{tabId:k,selectedProject:e,selectedSession:t,initialCommand:n,isPlainShell:S,isActive:a,onProcessComplete:C,minimal:f,autoConnect:f?!0:s,forceNewSession:h,startupInput:g,permissionOverride:b,provider:x,onClose:l})})]}):i.jsx(WD,{className:d})}const KD=(e,t)=>t||(e==="claude"?"claude --dangerously-skip-permissions /login":e==="cursor"?"cursor-agent login":e==="codex"?"codex login":e==="qwen"?"qwen auth":e==="opencode"?"opencode auth login":"gemini"),YD={claude:{keyLabel:"Anthropic API Key",keyExample:"sk-ant-...",supportsBaseUrl:!0,baseUrlExample:"https://api.anthropic.com",keyConsoleUrl:"https://console.anthropic.com/settings/keys",keyConsoleLabel:"Anthropic Console"},codex:{keyLabel:"OpenAI API Key",keyExample:"sk-...",supportsBaseUrl:!0,baseUrlExample:"https://api.openai.com/v1",keyConsoleUrl:"https://platform.openai.com/api-keys",keyConsoleLabel:"OpenAI Platform"},gemini:{keyLabel:"Gemini API Key",keyExample:"AI...",supportsBaseUrl:!1,keyConsoleUrl:"https://aistudio.google.com/app/apikey",keyConsoleLabel:"Google AI Studio"},qwen:{keyLabel:"OpenAI-Compatible API Key",keyExample:"sk-... or sk-sp-...",supportsBaseUrl:!0,baseUrlExample:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",keyConsoleUrl:"https://github.com/QwenLM/qwen-code",keyConsoleLabel:"Qwen Code Docs",notes:"Accepts any OpenAI-compatible endpoint — Alibaba Cloud, ModelScope, OpenRouter, self-hosted, etc."},opencode:{keyLabel:"Anthropic API Key (default backend)",keyExample:"sk-ant-...",supportsBaseUrl:!0,baseUrlExample:"https://api.anthropic.com",keyConsoleUrl:"https://console.anthropic.com/settings/keys",keyConsoleLabel:"Anthropic Console",notes:"OpenCode is multi-provider — this sets the Anthropic credentials. Switch providers via `opencode auth login` or opencode.json."}};function Yw({active:e,children:t,onClick:n}){return i.jsx("button",{onClick:n,className:`flex-1 border-b-2 px-4 py-2.5 text-sm font-medium transition-colors ${e?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"}`,children:t})}function ZD({provider:e}){const[t,n]=m.useState(""),[r,a]=m.useState(!1),[s,o]=m.useState("idle"),[l,c]=m.useState(null),d=async()=>{const u=t.trim();if(u){a(!0),c(null),o("idle");try{const p=await Ne(`/api/providers/${e}/oauth-paste`,{method:"POST",body:JSON.stringify({callbackUrl:u})}),f=await p.json().catch(()=>({}));if(!p.ok||!f?.success)throw new Error(f?.error||`Request failed (${p.status})`);o("ok"),n("")}catch(p){c(p?.message||"Forward failed"),o("error")}finally{a(!1)}}};return i.jsxs("div",{className:"mt-3 rounded-lg border border-border/60 bg-muted/30 p-3 text-sm",children:[i.jsx("div",{className:"mb-2 font-medium text-foreground",children:"Remote login? Paste the callback URL here"}),i.jsxs("p",{className:"mb-3 text-xs text-muted-foreground",children:["When the CLI shows ",i.jsx("code",{className:"rounded bg-background px-1 font-mono text-[11px]",children:"http://127.0.0.1:PORT/…"})," and your browser can't reach it (VPS setups), copy the failing URL from your address bar and paste it below. Pixcode forwards the token exchange to the CLI process on this host."]}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx("input",{type:"url",value:t,onChange:u=>n(u.target.value),placeholder:"http://127.0.0.1:49312/callback?code=...",className:"flex-1 rounded-md border border-border bg-background px-3 py-2 font-mono text-xs text-foreground focus:border-primary focus:outline-none",onKeyDown:u=>{u.key==="Enter"&&d()}}),i.jsx("button",{onClick:()=>void d(),disabled:r||!t.trim(),className:"flex items-center gap-1.5 rounded-md bg-foreground px-3 py-2 text-xs font-medium text-background transition-opacity hover:opacity-90 disabled:opacity-40",children:r?i.jsx(Ht,{className:"h-3.5 w-3.5 animate-spin"}):"Forward"})]}),s==="ok"&&i.jsxs("div",{className:"mt-2 flex items-center gap-1.5 text-xs text-emerald-600 dark:text-emerald-400",children:[i.jsx(qt,{className:"h-3.5 w-3.5"})," Forwarded — check the terminal above for the completion message."]}),s==="error"&&l&&i.jsx("div",{className:"mt-2 text-xs text-red-600 dark:text-red-400",children:l})]})}function XD({provider:e,onSaved:t}){const n=YD[e],[r,a]=m.useState(""),[s,o]=m.useState(""),[l,c]=m.useState(!1),[d,u]=m.useState("idle"),[p,f]=m.useState(null);m.useEffect(()=>{let g=!1;return(async()=>{try{const x=await(await Ne("/api/providers/credentials")).json().catch(()=>({}));if(g||!x?.success)return;const v=x.data?.[e];v?.baseUrl&&o(v.baseUrl)}catch{}})(),()=>{g=!0}},[e]);const h=async()=>{const g=r.trim();if(g){c(!0),f(null),u("idle");try{const b=await Ne(`/api/providers/${e}/auth/api-key`,{method:"POST",body:JSON.stringify({apiKey:g,baseUrl:n.supportsBaseUrl&&s.trim()?s.trim():""})}),x=await b.json().catch(()=>({}));if(!b.ok||!x?.success)throw new Error(x?.error||`Request failed (${b.status})`);u("ok"),a(""),t()}catch(b){f(b?.message||"Save failed"),u("error")}finally{c(!1)}}};return n?i.jsx("div",{className:"flex h-full flex-col overflow-y-auto p-6",children:i.jsxs("div",{className:"mx-auto w-full max-w-lg space-y-5",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-full bg-muted",children:i.jsx(ID,{className:"h-5 w-5 text-foreground"})}),i.jsxs("div",{children:[i.jsx("h4",{className:"text-base font-semibold text-foreground",children:n.keyLabel}),i.jsxs("a",{href:n.keyConsoleUrl,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground",children:["Get a key from ",n.keyConsoleLabel,i.jsx(nr,{className:"h-3 w-3"})]})]})]}),n.notes&&i.jsx("div",{className:"rounded-md border border-border/60 bg-muted/40 p-3 text-xs text-muted-foreground",children:n.notes}),i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("label",{className:"text-xs font-medium text-foreground",children:"API Key"}),i.jsx("input",{type:"password",value:r,onChange:g=>a(g.target.value),placeholder:n.keyExample,className:"w-full rounded-md border border-border bg-background px-3 py-2 font-mono text-sm text-foreground focus:border-primary focus:outline-none",autoComplete:"off",spellCheck:!1}),i.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Stored locally at ",i.jsx("code",{className:"rounded bg-muted px-1 font-mono text-[10px]",children:"~/.pixcode/provider-credentials.json"})," with 0600 permissions."]})]}),n.supportsBaseUrl&&i.jsxs("div",{className:"space-y-1.5",children:[i.jsxs("label",{className:"text-xs font-medium text-foreground",children:["Base URL ",i.jsx("span",{className:"font-normal text-muted-foreground",children:"(optional — use a custom endpoint)"})]}),i.jsx("input",{type:"url",value:s,onChange:g=>o(g.target.value),placeholder:n.baseUrlExample,className:"w-full rounded-md border border-border bg-background px-3 py-2 font-mono text-sm text-foreground focus:border-primary focus:outline-none",autoComplete:"off",spellCheck:!1}),i.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Point at any OpenAI-compatible proxy (OpenRouter, local LLM, self-hosted, budget provider) to cut costs or hit different models."})]}),i.jsxs("div",{className:"flex items-center gap-3 pt-2",children:[i.jsxs("button",{onClick:()=>void h(),disabled:l||!r.trim(),className:"inline-flex items-center gap-2 rounded-md bg-foreground px-4 py-2 text-sm font-medium text-background transition-opacity hover:opacity-90 disabled:opacity-40",children:[l?i.jsx(Ht,{className:"h-4 w-4 animate-spin"}):i.jsx(qt,{className:"h-4 w-4"}),"Save API Key"]}),d==="ok"&&i.jsx("span",{className:"text-xs text-emerald-600 dark:text-emerald-400",children:"Saved — reconnect to pick it up."}),d==="error"&&p&&i.jsx("span",{className:"text-xs text-red-600 dark:text-red-400",children:p})]})]})}):i.jsx("div",{className:"p-6 text-sm text-muted-foreground",children:"This provider uses OAuth only — use the Browser tab to log in."})}function j4({isOpen:e,onClose:t,provider:n="claude",onComplete:r,customCommand:a,isAuthenticated:s=!1}){const{t:o}=Me("common"),l=n!=="cursor",[c,d]=m.useState(l?"apiKey":"browser");m.useEffect(()=>{e&&d(l?"apiKey":"browser")},[e,n,l]);const u=m.useMemo(()=>`${br[n]??n} Login`,[n]);if(!e)return null;const p=KD(n,a),f=h=>r?.(h);return i.jsx("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black bg-opacity-50 max-md:items-stretch max-md:justify-stretch",children:i.jsxs("div",{className:"flex h-3/4 w-full max-w-4xl flex-col rounded-lg bg-white shadow-xl dark:bg-gray-800 max-md:m-0 max-md:h-full max-md:max-w-none max-md:rounded-none md:m-4 md:h-3/4 md:max-w-4xl md:rounded-lg",children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-gray-200 p-4 dark:border-gray-700",children:[i.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:u}),i.jsx("button",{onClick:t,className:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300","aria-label":"Close login modal",children:i.jsx(St,{className:"h-6 w-6"})})]}),i.jsxs("div",{className:"flex border-b border-gray-200 dark:border-gray-700",children:[i.jsx(Yw,{active:c==="browser",onClick:()=>d("browser"),children:"Browser / OAuth"}),l&&i.jsx(Yw,{active:c==="apiKey",onClick:()=>d("apiKey"),children:"API Key"})]}),i.jsx("div",{className:"flex flex-1 flex-col overflow-hidden",children:c==="browser"?i.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden",children:[i.jsx("div",{className:"min-h-0 flex-1",children:i.jsx(Ul,{project:i_,command:p,onComplete:f,minimal:!0})}),i.jsx("div",{className:"border-t border-border/40 bg-background/50 px-4 py-3",children:i.jsx(ZD,{provider:n})})]}):i.jsx(XD,{provider:n,onSaved:()=>f(0)})})]})})}const JD=({className:e="w-5 h-5"})=>i.jsx("img",{src:"/icons/claude-ai-icon.svg",alt:"Claude",className:e}),QD=({className:e="w-5 h-5"})=>{const{isDarkMode:t}=Ga();return i.jsx("img",{src:t?"/icons/codex-white.svg":"/icons/codex.svg",alt:"Codex",className:e})},eO=({className:e="w-5 h-5"})=>{const{isDarkMode:t}=Ga();return i.jsx("img",{src:t?"/icons/cursor-white.svg":"/icons/cursor.svg",alt:"Cursor",className:e})},tO=({className:e="w-5 h-5"})=>i.jsx("img",{src:"/icons/gemini-ai-icon.svg",alt:"Gemini",className:e}),nO=({className:e="w-5 h-5"})=>{const{isDarkMode:t}=Ga(),n=t?"/icons/opencode-logo-dark.svg":"/icons/opencode-logo-light.svg";return i.jsx("img",{src:n,alt:"OpenCode",className:e})},rO=({className:e="w-5 h-5"})=>i.jsx("img",{src:"/icons/qwen-logo.svg",alt:"Qwen Code",className:e});function nn({provider:e="claude",className:t="w-5 h-5"}){return e==="cursor"?i.jsx(eO,{className:t}):e==="codex"?i.jsx(QD,{className:t}):e==="gemini"?i.jsx(tO,{className:t}):e==="qwen"?i.jsx(rO,{className:t}):e==="opencode"?i.jsx(nO,{className:t}):i.jsx(JD,{className:t})}function aO({provider:e,title:t,status:n,connectedClassName:r,iconContainerClassName:a,loginButtonClassName:s,onLogin:o}){const l=n.authenticated?r:"border-border bg-card",c=n.loading?"Checking...":n.authenticated?n.email||"Connected":n.error||"Not connected";return i.jsx("div",{className:`rounded-lg border p-4 transition-colors ${l}`,children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:`flex h-10 w-10 items-center justify-center rounded-full ${a}`,children:i.jsx(nn,{provider:e,className:"h-5 w-5"})}),i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center gap-2 font-medium text-foreground",children:[t,n.authenticated&&i.jsx(qt,{className:"h-4 w-4 text-green-500"})]}),i.jsx("div",{className:"text-xs text-muted-foreground",children:c})]})]}),!n.authenticated&&!n.loading&&i.jsx("button",{onClick:o,className:`${s} rounded-lg px-4 py-2 text-sm font-medium text-white transition-colors`,children:"Login"})]})})}const iO=[{provider:"claude",title:"Claude Code",connectedClassName:"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800",iconContainerClassName:"bg-blue-100 dark:bg-blue-900/30",loginButtonClassName:"bg-blue-600 hover:bg-blue-700"},{provider:"cursor",title:"Cursor",connectedClassName:"bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800",iconContainerClassName:"bg-purple-100 dark:bg-purple-900/30",loginButtonClassName:"bg-purple-600 hover:bg-purple-700"},{provider:"codex",title:"OpenAI Codex",connectedClassName:"bg-gray-100 dark:bg-gray-800/50 border-gray-300 dark:border-gray-600",iconContainerClassName:"bg-gray-100 dark:bg-gray-800",loginButtonClassName:"bg-gray-800 hover:bg-gray-900 dark:bg-gray-700 dark:hover:bg-gray-600"},{provider:"gemini",title:"Gemini",connectedClassName:"bg-teal-50 dark:bg-teal-900/20 border-teal-200 dark:border-teal-800",iconContainerClassName:"bg-teal-100 dark:bg-teal-900/30",loginButtonClassName:"bg-teal-600 hover:bg-teal-700"},{provider:"qwen",title:"Qwen Code",connectedClassName:"bg-orange-50 dark:bg-orange-900/20 border-orange-200 dark:border-orange-800",iconContainerClassName:"bg-orange-100 dark:bg-orange-900/30",loginButtonClassName:"bg-orange-600 hover:bg-orange-700"}];function Zw({providerStatuses:e,onOpenProviderLogin:t}){return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"mb-6 text-center",children:[i.jsx("h2",{className:"mb-2 text-2xl font-bold text-foreground",children:"Connect Your AI Agents"}),i.jsx("p",{className:"text-muted-foreground",children:"Login to one or more AI coding assistants. All are optional."})]}),i.jsx("div",{className:"space-y-3",children:iO.map(n=>i.jsx(aO,{provider:n.provider,title:n.title,status:e[n.provider],connectedClassName:n.connectedClassName,iconContainerClassName:n.iconContainerClassName,loginButtonClassName:n.loginButtonClassName,onLogin:()=>t(n.provider)},n.provider))}),i.jsx("div",{className:"pt-2 text-center text-sm text-muted-foreground",children:i.jsx("p",{children:"You can configure these later in Settings."})})]})}function sO({gitName:e,gitEmail:t,isSubmitting:n,onGitNameChange:r,onGitEmailChange:a}){return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"mb-8 text-center",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-blue-100 dark:bg-blue-900/30",children:i.jsx(zn,{className:"h-8 w-8 text-blue-600 dark:text-blue-400"})}),i.jsx("h2",{className:"mb-2 text-2xl font-bold text-foreground",children:"Git Configuration"}),i.jsx("p",{className:"text-muted-foreground",children:"Configure your git identity to ensure proper attribution for commits."})]}),i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{children:[i.jsxs("label",{htmlFor:"gitName",className:"mb-2 flex items-center gap-2 text-sm font-medium text-foreground",children:[i.jsx(RD,{className:"h-4 w-4"}),"Git Name ",i.jsx("span",{className:"text-red-500",children:"*"})]}),i.jsx("input",{type:"text",id:"gitName",value:e,onChange:s=>r(s.target.value),className:"w-full rounded-lg border border-border bg-background px-4 py-3 text-foreground focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"John Doe",required:!0,disabled:n}),i.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Saved as `git config --global user.name`."})]}),i.jsxs("div",{children:[i.jsxs("label",{htmlFor:"gitEmail",className:"mb-2 flex items-center gap-2 text-sm font-medium text-foreground",children:[i.jsx(AD,{className:"h-4 w-4"}),"Git Email ",i.jsx("span",{className:"text-red-500",children:"*"})]}),i.jsx("input",{type:"email",id:"gitEmail",value:t,onChange:s=>a(s.target.value),className:"w-full rounded-lg border border-border bg-background px-4 py-3 text-foreground focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"john@example.com",required:!0,disabled:n}),i.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Saved as `git config --global user.email`."})]})]})]})}const Xw=[{title:"Git Configuration",icon:zn,required:!0},{title:"Connect Agents",icon:b4,required:!1}];function oO({currentStep:e}){return i.jsx("div",{className:"mb-8",children:i.jsx("div",{className:"flex items-center justify-between",children:Xw.map((t,n)=>{const r=n<e,a=n===e,s=t.icon;return i.jsxs("div",{className:"contents",children:[i.jsxs("div",{className:"flex flex-1 flex-col items-center",children:[i.jsx("div",{className:`flex h-12 w-12 items-center justify-center rounded-full border-2 transition-colors duration-200 ${r?"border-green-500 bg-green-500 text-white":a?"border-blue-600 bg-blue-600 text-white":"border-border bg-background text-muted-foreground"}`,children:r?i.jsx(qt,{className:"h-6 w-6"}):i.jsx(s,{className:"h-6 w-6"})}),i.jsxs("div",{className:"mt-2 text-center",children:[i.jsx("p",{className:`text-sm font-medium ${a?"text-foreground":"text-muted-foreground"}`,children:t.title}),t.required&&i.jsx("span",{className:"text-xs text-red-500",children:"Required"})]})]}),n<Xw.length-1&&i.jsx("div",{className:`mx-2 h-0.5 flex-1 transition-colors duration-200 ${r?"bg-green-500":"bg-border"}`})]},t.title)})})})}const Jw=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,Qw=async(e,t)=>{try{return(await e.json()).error||t}catch{return t}};function lO({onComplete:e}){const[t,n]=m.useState(0),[r,a]=m.useState(""),[s,o]=m.useState(""),[l,c]=m.useState(!1),[d,u]=m.useState(""),[p,f]=m.useState(null),{providerAuthStatus:h,checkProviderAuthStatus:g,refreshProviderAuthStatuses:b}=Tu(),x=m.useRef(void 0),v=m.useCallback(async()=>{try{const R=await Ne("/api/user/git-config");if(!R.ok)return;const j=await R.json();j.gitName&&a(j.gitName),j.gitEmail&&o(j.gitEmail)}catch(R){console.error("Error loading git config:",R)}},[]);m.useEffect(()=>{v(),b()},[v,b]),m.useEffect(()=>{const R=x.current;x.current=p,R!=null&&p===null&&b()},[p,b]);const y=R=>{f(R)},w=R=>{R===0&&p&&g(p)},k=async()=>{if(u(""),t!==0){n(R=>R+1);return}if(!r.trim()||!s.trim()){u("Both git name and email are required.");return}if(!Jw.test(s)){u("Please enter a valid email address.");return}c(!0);try{const R=await Ne("/api/user/git-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({gitName:r,gitEmail:s})});if(!R.ok){const j=await Qw(R,"Failed to save git configuration");throw new Error(j)}n(j=>j+1)}catch(R){u(R instanceof Error?R.message:"Failed to save git configuration")}finally{c(!1)}},S=()=>{u(""),n(R=>R-1)},C=async()=>{c(!0),u("");try{const R=await Ne("/api/user/complete-onboarding",{method:"POST"});if(!R.ok){const j=await Qw(R,"Failed to complete onboarding");throw new Error(j)}await e?.()}catch(R){u(R instanceof Error?R.message:"Failed to complete onboarding")}finally{c(!1)}},A=t===0?!!(r.trim()&&s.trim()&&Jw.test(s)):!0;return i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background p-4",children:i.jsxs("div",{className:"w-full max-w-2xl",children:[i.jsx(oO,{currentStep:t}),i.jsxs("div",{className:"rounded-lg border border-border bg-card p-8 shadow-lg",children:[t===0?i.jsx(sO,{gitName:r,gitEmail:s,isSubmitting:l,onGitNameChange:a,onGitEmailChange:o}):t===1?i.jsx(Zw,{providerStatuses:h,onOpenProviderLogin:y}):i.jsx(Zw,{providerStatuses:h,onOpenProviderLogin:y}),d&&i.jsx("div",{className:"mt-6 rounded-lg border border-red-300 bg-red-100 p-4 dark:border-red-800 dark:bg-red-900/20",children:i.jsx("p",{className:"text-sm text-red-700 dark:text-red-400",children:d})}),i.jsxs("div",{className:"mt-8 flex items-center justify-between border-t border-border pt-6",children:[i.jsxs("button",{onClick:S,disabled:t===0||l,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-muted-foreground transition-colors duration-200 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",children:[i.jsx(kg,{className:"h-4 w-4"}),"Previous"]}),i.jsx("div",{className:"flex items-center gap-3",children:t<1?i.jsx("button",{onClick:k,disabled:!A||l,className:"flex items-center gap-2 rounded-lg bg-blue-600 px-6 py-3 font-medium text-white transition-colors duration-200 hover:bg-blue-700 disabled:cursor-not-allowed disabled:bg-blue-400",children:l?i.jsxs(i.Fragment,{children:[i.jsx(Ht,{className:"h-4 w-4 animate-spin"}),"Saving..."]}):i.jsxs(i.Fragment,{children:["Next",i.jsx(ua,{className:"h-4 w-4"})]})}):i.jsx("button",{onClick:C,disabled:l,className:"flex items-center gap-2 rounded-lg bg-green-600 px-6 py-3 font-medium text-white transition-colors duration-200 hover:bg-green-700 disabled:cursor-not-allowed disabled:bg-green-400",children:l?i.jsxs(i.Fragment,{children:[i.jsx(Ht,{className:"h-4 w-4 animate-spin"}),"Completing..."]}):i.jsxs(i.Fragment,{children:[i.jsx(qt,{className:"h-4 w-4"}),"Complete Setup"]})})})]})]})]})}),p&&i.jsx(j4,{isOpen:!!p,onClose:()=>f(null),provider:p,onComplete:w})]})}const cO=["0s","0.1s","0.2s"];function dO(){return i.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background p-4",children:i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"mb-4 flex justify-center",children:i.jsx("div",{className:"flex h-16 w-16 items-center justify-center rounded-lg bg-primary shadow-sm",children:i.jsx(Er,{className:"h-8 w-8 text-primary-foreground"})})}),i.jsx("h1",{className:"mb-2 text-2xl font-bold text-foreground",children:"Pixcode"}),i.jsx("div",{className:"flex items-center justify-center space-x-2",children:cO.map(e=>i.jsx("div",{className:"h-2 w-2 animate-bounce rounded-full bg-blue-500",style:{animationDelay:e}},e))}),i.jsx("p",{className:"mt-2 text-muted-foreground",children:"Loading..."})]})})}function R4({errorMessage:e}){return e?i.jsx("div",{className:"rounded-md border border-red-300 bg-red-100 p-3 dark:border-red-800 dark:bg-red-900/20",children:i.jsx("p",{className:"text-sm text-red-700 dark:text-red-400",children:e})}):null}function Gi({id:e,label:t,value:n,onChange:r,placeholder:a,isDisabled:s,type:o="text",name:l,autoComplete:c}){return i.jsxs("div",{children:[i.jsx("label",{htmlFor:e,className:"mb-1 block text-sm font-medium text-foreground",children:t}),i.jsx("input",{id:e,type:o,name:l??e,autoComplete:c,value:n,onChange:d=>r(d.target.value),className:"w-full rounded-md border border-border bg-background px-3 py-2 text-foreground focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:a,required:!0,disabled:s})]})}function I4({title:e,description:t,children:n,footerText:r,logo:a}){return i.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background p-4",children:i.jsx("div",{className:"w-full max-w-md",children:i.jsxs("div",{className:"space-y-6 rounded-lg border border-border bg-card p-8 shadow-lg",children:[i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"mb-4 flex justify-center",children:a??i.jsx("div",{className:"flex h-16 w-16 items-center justify-center rounded-lg bg-primary shadow-sm",children:i.jsx(Er,{className:"h-8 w-8 text-primary-foreground"})})}),i.jsx("h1",{className:"text-2xl font-bold text-foreground",children:e}),i.jsx("p",{className:"mt-2 text-muted-foreground",children:t})]}),n,i.jsx("div",{className:"text-center",children:i.jsx("p",{className:"text-sm text-muted-foreground",children:r})}),i.jsxs("div",{className:"flex items-center justify-center gap-1.5 pt-2",children:[i.jsx("svg",{className:"h-3.5 w-3.5 text-muted-foreground/50",fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:i.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})}),i.jsx("a",{href:"https://github.com/alicomert/pixcode",target:"_blank",rel:"noopener noreferrer",className:"text-xs text-muted-foreground/50 transition-colors hover:text-muted-foreground",children:"Pixcode is open source"})]})]})})})}const uO={username:"",password:""};function pO(){const{t:e}=Me("auth"),{login:t}=sc(),[n,r]=m.useState(uO),[a,s]=m.useState(""),[o,l]=m.useState(!1),c=m.useCallback((u,p)=>{r(f=>({...f,[u]:p}))},[]),d=m.useCallback(async u=>{if(u.preventDefault(),s(""),!n.username.trim()||!n.password){s(e("login.errors.requiredFields"));return}l(!0);const p=await t(n.username.trim(),n.password);p.success||s(p.error),l(!1)},[n.password,n.username,t,e]);return i.jsx(I4,{title:e("login.title"),description:e("login.description"),footerText:"Enter your credentials to access Pixcode",children:i.jsxs("form",{onSubmit:d,className:"space-y-4",children:[i.jsx(Gi,{id:"username",label:e("login.username"),value:n.username,onChange:u=>c("username",u),placeholder:e("login.placeholders.username"),isDisabled:o,autoComplete:"username"}),i.jsx(Gi,{id:"password",label:e("login.password"),value:n.password,onChange:u=>c("password",u),placeholder:e("login.placeholders.password"),isDisabled:o,type:"password",autoComplete:"current-password"}),i.jsx(R4,{errorMessage:a}),i.jsx("button",{type:"submit",disabled:o,className:"w-full rounded-md bg-blue-600 px-4 py-2 font-medium text-white transition-colors duration-200 hover:bg-blue-700 disabled:bg-blue-400",children:e(o?"login.loading":"login.submit")})]})})}const mO={username:"",password:"",confirmPassword:"",connectionMode:"local",remoteUrl:"",remoteApiKey:""};function hO(e){return!e.username.trim()||!e.password||!e.confirmPassword?"Please fill in all fields.":e.username.trim().length<3?"Username must be at least 3 characters long.":e.password.length<6?"Password must be at least 6 characters long.":e.password!==e.confirmPassword?"Passwords do not match.":e.connectionMode==="remote"&&!e.remoteUrl.trim()?"Remote Pixcode server URL is required.":null}function fO(){const{register:e}=sc(),[t,n]=m.useState(mO),[r,a]=m.useState(""),[s,o]=m.useState(!1),l=m.useCallback((d,u)=>{n(p=>({...p,[d]:u}))},[]),c=m.useCallback(async d=>{d.preventDefault(),a("");const u=hO(t);if(u){a(u);return}o(!0);const p=await fetch("/api/auth/connection-mode",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:t.connectionMode,remoteUrl:t.connectionMode==="remote"?t.remoteUrl.trim():null,apiKey:t.connectionMode==="remote"?t.remoteApiKey.trim():null})});if(!p.ok){const h=await p.json().catch(()=>null);a(h?.error||"Could not save connection mode."),o(!1);return}const f=await e(t.username.trim(),t.password);f.success||a(f.error),o(!1)},[t,e]);return i.jsx(I4,{title:"Welcome to Pixcode",description:"Create the first admin account to get started",footerText:"The first account becomes admin and can add more users later.",logo:i.jsx("img",{src:"/logo.svg",alt:"Pixcode",className:"h-16 w-16"}),children:i.jsxs("form",{onSubmit:c,className:"space-y-4",children:[i.jsxs("div",{className:"grid gap-2 rounded-lg border border-border/70 bg-muted/30 p-2 sm:grid-cols-2",children:[i.jsxs("button",{type:"button",onClick:()=>l("connectionMode","local"),disabled:s,className:`rounded-md px-3 py-2 text-left text-sm transition-colors ${t.connectionMode==="local"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:bg-background/60 hover:text-foreground"}`,children:[i.jsx("span",{className:"block font-medium",children:"Use this computer directly"}),i.jsx("span",{className:"block text-xs opacity-80",children:"Run Pixcode and CLIs on this machine."})]}),i.jsxs("button",{type:"button",onClick:()=>l("connectionMode","remote"),disabled:s,className:`rounded-md px-3 py-2 text-left text-sm transition-colors ${t.connectionMode==="remote"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:bg-background/60 hover:text-foreground"}`,children:[i.jsx("span",{className:"block font-medium",children:"Connect to a remote Pixcode server"}),i.jsx("span",{className:"block text-xs opacity-80",children:"Control another always-on Pixcode host by API."})]})]}),t.connectionMode==="remote"&&i.jsxs("div",{className:"space-y-3 rounded-lg border border-border/70 bg-muted/20 p-3",children:[i.jsx(Gi,{id:"remoteUrl",name:"remoteUrl",label:"Remote API URL",value:t.remoteUrl,onChange:d=>l("remoteUrl",d),placeholder:"https://your-server.example.com",isDisabled:s,autoComplete:"url"}),i.jsx(Gi,{id:"remoteApiKey",name:"remoteApiKey",label:"Remote API Key",value:t.remoteApiKey,onChange:d=>l("remoteApiKey",d),placeholder:"px_...",isDisabled:s,type:"password",autoComplete:"off"})]}),i.jsx(Gi,{id:"username",name:"username",label:"Username",value:t.username,onChange:d=>l("username",d),placeholder:"Enter your username",isDisabled:s,autoComplete:"username"}),i.jsx(Gi,{id:"password",name:"password",label:"Password",value:t.password,onChange:d=>l("password",d),placeholder:"Enter your password",isDisabled:s,type:"password",autoComplete:"new-password"}),i.jsx(Gi,{id:"confirmPassword",name:"confirmPassword",label:"Confirm Password",value:t.confirmPassword,onChange:d=>l("confirmPassword",d),placeholder:"Confirm your password",isDisabled:s,type:"password",autoComplete:"new-password"}),i.jsx(R4,{errorMessage:r}),i.jsx("button",{type:"submit",disabled:s,className:"w-full rounded-md bg-blue-600 px-4 py-2 font-medium text-white transition-colors duration-200 hover:bg-blue-700 disabled:bg-blue-400",children:s?"Setting up...":"Create Account"})]})})}function gO({children:e}){const{user:t,isLoading:n,needsSetup:r,hasCompletedOnboarding:a,refreshOnboardingStatus:s}=sc();return n?i.jsx(dO,{}):r?i.jsx(fO,{}):t?a?i.jsx(i.Fragment,{children:e}):i.jsx(lO,{onComplete:s}):i.jsx(pO,{})}const _4=m.createContext(null),L4=()=>{const e=m.useContext(_4);if(!e)throw new Error("useWebSocket must be used within a WebSocketProvider");return e},bO=e=>{const t=window.location.protocol==="https:"?"wss:":"ws:";return e?`${t}//${window.location.host}/ws?token=${encodeURIComponent(e)}`:null},xO=()=>{const e=m.useRef(null),t=m.useRef(!1),n=m.useRef(!1),[r,a]=m.useState(null),[s,o]=m.useState(!1),l=m.useRef(null),{token:c}=sc(),d=m.useCallback(()=>{if(!t.current)try{const f=bO(c);if(!f)return console.warn("No authentication token found for WebSocket connection");const h=new WebSocket(f);h.onopen=()=>{o(!0),e.current=h,n.current&&a({type:"websocket-reconnected",timestamp:Date.now()}),n.current=!0},h.onmessage=g=>{try{const b=JSON.parse(g.data);a(b)}catch(b){console.error("Error parsing WebSocket message:",b)}},h.onclose=()=>{o(!1),e.current=null,l.current=setTimeout(()=>{t.current||d()},3e3)},h.onerror=g=>{console.error("WebSocket error:",g)}}catch(f){console.error("Error creating WebSocket connection:",f)}},[c]);m.useEffect(()=>(d(),()=>{t.current=!0,l.current&&clearTimeout(l.current),e.current&&e.current.close()}),[d]);const u=m.useCallback(f=>{const h=e.current;h&&h.readyState===WebSocket.OPEN?h.send(JSON.stringify(f)):console.warn("WebSocket not connected")},[]);return m.useMemo(()=>({ws:e.current,sendMessage:u,latestMessage:r,isConnected:s}),[u,r,s])},vO=({children:e})=>{const t=xO();return i.jsx(_4.Provider,{value:t,children:e})},P4=m.createContext(null);function Ou(){const e=m.useContext(P4);if(!e)throw new Error("usePlugins must be used within a PluginsProvider");return e}function yO({children:e}){const{user:t,token:n,isLoading:r}=sc(),[a,s]=m.useState([]),[o,l]=m.useState(!0),[c,d]=m.useState(null),u=!!(t&&n),p=m.useCallback(async()=>{if(!u){s([]),d(null),l(!1);return}l(!0);try{const x=await Ne("/api/plugins");if(x.ok){const v=await x.json();s(v.plugins||[]),d(null)}else{let v=`Failed to fetch plugins (${x.status})`;try{const y=await x.json();v=y.details||y.error||v}catch{v=x.statusText||v}d(v)}}catch(x){const v=x instanceof Error?x.message:"Failed to fetch plugins";d(v),console.error("[Plugins] Failed to fetch plugins:",x)}finally{l(!1)}},[u]);m.useEffect(()=>{r||p()},[r,p]);const f=m.useCallback(async x=>{try{const v=await Ne("/api/plugins/install",{method:"POST",body:JSON.stringify({url:x})}),y=await v.json();return v.ok?(await p(),{success:!0}):{success:!1,error:y.details||y.error||"Install failed"}}catch(v){return{success:!1,error:v instanceof Error?v.message:"Install failed"}}},[p]),h=m.useCallback(async x=>{try{const v=await Ne(`/api/plugins/${encodeURIComponent(x)}`,{method:"DELETE"}),y=await v.json();return v.ok?(await p(),{success:!0}):{success:!1,error:y.details||y.error||"Uninstall failed"}}catch(v){return{success:!1,error:v instanceof Error?v.message:"Uninstall failed"}}},[p]),g=m.useCallback(async x=>{try{const v=await Ne(`/api/plugins/${encodeURIComponent(x)}/update`,{method:"POST"}),y=await v.json();return v.ok?(await p(),{success:!0}):{success:!1,error:y.details||y.error||"Update failed"}}catch(v){return{success:!1,error:v instanceof Error?v.message:"Update failed"}}},[p]),b=m.useCallback(async(x,v)=>{try{const y=await Ne(`/api/plugins/${encodeURIComponent(x)}/enable`,{method:"PUT",body:JSON.stringify({enabled:v})});if(!y.ok){let w=`Toggle failed (${y.status})`;try{const k=await y.json();w=k.details||k.error||w}catch{w=y.statusText||w}return{success:!1,error:w}}return await p(),{success:!0,error:null}}catch(y){return{success:!1,error:y instanceof Error?y.message:"Toggle failed"}}},[p]);return i.jsx(P4.Provider,{value:{plugins:a,loading:o,pluginsError:c,refreshPlugins:p,installPlugin:f,uninstallPlugin:h,updatePlugin:g,togglePlugin:b},children:e})}const ek=e=>typeof window>"u"?!1:window.innerWidth<e,tk=()=>{if(typeof window>"u")return!1;const e=window.navigator;return window.matchMedia("(display-mode: standalone)").matches||!!e.standalone||document.referrer.includes("android-app://")};function Ig(e={}){const{mobileBreakpoint:t=768,trackMobile:n=!0,trackPWA:r=!0}=e,[a,s]=m.useState(()=>n?ek(t):!1),[o,l]=m.useState(()=>r?tk():!1);return m.useEffect(()=>{if(!n||typeof window>"u")return;const c=()=>{s(ek(t))};return c(),window.addEventListener("resize",c),()=>{window.removeEventListener("resize",c)}},[t,n]),m.useEffect(()=>{if(!r||typeof window>"u")return;const c=window.matchMedia("(display-mode: standalone)"),d=()=>{l(tk())};return d(),typeof c.addEventListener=="function"?(c.addEventListener("change",d),()=>{c.removeEventListener("change",d)}):(c.addListener(d),()=>{c.removeListener(d)})},[r]),{isMobile:a,isPWA:o}}const _g="pixcode.updateCheck.preferences",Jh="pixcode:update-check-settings-changed",Lg=[{value:"30m",label:"Every 30 minutes",intervalMs:1800*1e3},{value:"24h",label:"Daily",intervalMs:1440*60*1e3},{value:"12h",label:"Every 12 hours",intervalMs:720*60*1e3},{value:"6h",label:"Every 6 hours",intervalMs:360*60*1e3},{value:"7d",label:"Weekly",intervalMs:10080*60*1e3},{value:"off",label:"Manual only",intervalMs:null}],Qh={frequency:"30m"};function nk(e){return Lg.find(t=>t.value===e.frequency)?.intervalMs??null}function D4(e){if(!e||typeof e!="object")return Qh;const t=e.frequency;return Lg.some(n=>n.value===t)?{frequency:t}:Qh}function rk(){try{const e=localStorage.getItem(_g);return D4(e?JSON.parse(e):null)}catch{return Qh}}function wO(e){const t=D4(e);localStorage.setItem(_g,JSON.stringify(t)),window.dispatchEvent(new CustomEvent(Jh,{detail:t}))}const _p=(e,t)=>{const n=e.split(".").map(Number),r=t.split(".").map(Number);for(let a=0;a<Math.max(n.length,r.length);a++){const s=n[a]||0,o=r[a]||0;if(s!==o)return s-o}return 0},kO="1.53.7",Hd="pixcode:update-available",SO=360*60*1e3,Lp=new Map;function O4(e,t){return`pixcode.updateCheck.cache.${e}.${t}`}function CO(e,t){try{const n=localStorage.getItem(O4(e,t));if(!n)return null;const r=JSON.parse(n);return{fetchedAt:typeof r.fetchedAt=="number"?r.fetchedAt:null,latestVersion:typeof r.latestVersion=="string"?r.latestVersion:null,releaseInfo:r.releaseInfo??null,rateLimitedUntil:typeof r.rateLimitedUntil=="number"?r.rateLimitedUntil:void 0}}catch{return null}}function ak(e,t,n){localStorage.setItem(O4(e,t),JSON.stringify(n))}function NO(e,t){const n=`${e}/${t}`,r=Lp.get(n);if(r)return r;const a=fetch(`https://api.github.com/repos/${e}/${t}/releases/latest`,{cache:"no-store",headers:{Accept:"application/vnd.github+json"}}).then(async s=>({status:s.status,ok:s.ok,data:await s.json().catch(()=>({}))})).finally(()=>{Lp.delete(n)});return Lp.set(n,a),a}const Pg=(e,t)=>{const[n,r]=m.useState(!1),[a,s]=m.useState(null),[o,l]=m.useState(null),[c,d]=m.useState("git"),[u,p]=m.useState("idle"),[f,h]=m.useState(null),[g,b]=m.useState(()=>rk()),[x,v]=m.useState(kO),y=m.useRef(null),w=m.useCallback(S=>{wO(S),b(S)},[]);m.useEffect(()=>{const S=()=>b(rk()),C=A=>{A.key===_g&&S()};return window.addEventListener("storage",C),window.addEventListener(Jh,S),()=>{window.removeEventListener("storage",C),window.removeEventListener(Jh,S)}},[]),m.useEffect(()=>{let S=!1;const C=async()=>{try{const j=await(await fetch("/health",{cache:"no-store"})).json();if(S)return;(j.installMode==="npm"||j.installMode==="git")&&d(j.installMode),typeof j.version=="string"&&/^\d+\.\d+\.\d+/.test(j.version)&&v(j.version)}catch{}};C();const A=()=>{C()};return window.addEventListener("focus",A),()=>{S=!0,window.removeEventListener("focus",A)}},[]),m.useEffect(()=>{if(!x)return;let S=!1;const C=(T,I,N,O)=>({updateAvailable:!!(T&&_p(T,x)>0),latestVersion:T,releaseInfo:I,currentVersion:x,checkedAt:N,status:O}),A=T=>{!T.updateAvailable||!T.latestVersion||!T.releaseInfo||window.dispatchEvent(new CustomEvent(Hd,{detail:T}))},R=(T,I,N,O="success")=>{if(!T||!I)return r(!1),s(null),l(null),h(N),C(null,null,N,O);s(T),r(_p(T,x)>0),l(I),h(N);const $=C(T,I,N,O);return A($),$},j=async({force:T=!1}={})=>{const I=nk(g),N=CO(e,t),O=Date.now();if(!T&&I===null)return p("idle"),R(N?.latestVersion??null,N?.releaseInfo??null,N?.fetchedAt??null,"idle");if(!T&&N?.fetchedAt&&I!==null&&O-N.fetchedAt<I)return p("success"),R(N.latestVersion,N.releaseInfo,N.fetchedAt,"success");if(!T&&N?.rateLimitedUntil&&N.rateLimitedUntil>O)return p("error"),R(N.latestVersion,N.releaseInfo,N.fetchedAt,"error");try{p("checking");const $=await NO(e,t);if(S)return C(N?.latestVersion??null,N?.releaseInfo??null,N?.fetchedAt??null,"idle");const F=$.data;if(!$.ok)return $.status===403&&ak(e,t,{fetchedAt:N?.fetchedAt??null,latestVersion:N?.latestVersion??null,releaseInfo:N?.releaseInfo??null,rateLimitedUntil:O+Math.max(I??0,SO)}),p("error"),R(N?.latestVersion??null,N?.releaseInfo??null,N?.fetchedAt??null,"error");if(F.tag_name){const q=F.tag_name.replace(/^v/,""),Y=_p(q,x)>0,P={title:F.name||F.tag_name,body:F.body||"",htmlUrl:F.html_url||`https://github.com/${e}/${t}/releases/latest`,publishedAt:F.published_at||""};ak(e,t,{fetchedAt:O,latestVersion:q,releaseInfo:P}),s(q),r(Y),Y&&KN({key:`app-update:${q}`,title:"Pixcode update available",body:`Pixcode ${x} can update to ${q}.`,tag:"pixcode-app-update",data:{type:"app-update",latestVersion:q,installMode:c}}),l(P),p("success"),h(O);const B=C(q,P,O,"success");return A(B),B}else return r(!1),s(null),l(null),p("error"),C(null,null,null,"error")}catch($){return console.error("Version check failed:",$),p("error"),R(N?.latestVersion??null,N?.releaseInfo??null,N?.fetchedAt??null,"error")}};y.current=j,j();const E=nk(g),L=E===null?null:window.setInterval(()=>{j()},E);return()=>{S=!0,L!==null&&window.clearInterval(L)}},[e,t,x,c,g]);const k=m.useCallback(async()=>y.current?await y.current({force:!0}):null,[]);return{updateAvailable:n,latestVersion:a,currentVersion:x,releaseInfo:o,installMode:c,checkStatus:u,lastCheckedAt:f,manualCheck:k,updateCheckPreferences:g,updatePreferences:w}},Vi={autoExpandTools:!1,showRawParameters:!1,showThinking:!0,autoScrollToBottom:!0,sendByCtrlEnter:!1,changeAwareness:!1,sidebarVisible:!0,historyView:"flat",autoShowAgentDiff:"always"},EO=["flat","grouped"],TO=e=>typeof e=="string"&&EO.includes(e),AO=["always","openOnly","off"],jO=e=>typeof e=="string"&&AO.includes(e),Gd=Object.keys(Vi),RO=new Set(Gd),Pp="ui-preferences:sync",IO=(e,t)=>{if(typeof e=="boolean")return e;if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1}return t},Vd=(e,t,n)=>e==="historyView"?TO(t)?t:n:e==="autoShowAgentDiff"?jO(t)?t:n:IO(t,n),_O=(e,t)=>{try{const n=localStorage.getItem(e);if(n===null)return t;const r=JSON.parse(n);return Vd(e,r,t)}catch{return t}},LO=e=>{if(typeof window>"u")return Vi;try{const t=localStorage.getItem(e);if(t){const n=JSON.parse(t);if(n&&typeof n=="object"&&!Array.isArray(n)){const r=n;return Gd.reduce((a,s)=>(a[s]=Vd(s,r[s],Vi[s]),a),{...Vi})}}}catch{}return Gd.reduce((t,n)=>(t[n]=_O(n,Vi[n]),t),{...Vi})};function PO(e,t){switch(t.type){case"set":{const{key:n,value:r}=t;if(!RO.has(n))return e;const a=Vd(n,r,e[n]);return e[n]===a?e:{...e,[n]:a}}case"set_many":{const n=t.value||{};let r=!1;const a={...e};for(const s of Gd){if(!(s in n))continue;const o=n[s],l=Vd(s,o,e[s]);a[s]!==l&&(a[s]=l,r=!0)}return r?a:e}case"reset":return{...Vi,...t.value||{}};default:return e}}function Mu(e="uiPreferences"){const t=m.useRef(`ui-preferences-${Math.random().toString(36).slice(2)}`),[n,r]=m.useReducer(PO,e,LO);return m.useEffect(()=>{typeof window>"u"||(localStorage.setItem(e,JSON.stringify(n)),window.dispatchEvent(new CustomEvent(Pp,{detail:{storageKey:e,sourceId:t.current,value:n}})))},[n,e]),m.useEffect(()=>{if(typeof window>"u")return;const l=u=>{!u||typeof u!="object"||Array.isArray(u)||r({type:"set_many",value:u})},c=u=>{if(!(u.key!==e||u.newValue===null))try{const p=JSON.parse(u.newValue);l(p)}catch{}},d=u=>{const f=u.detail;!f||f.storageKey!==e||f.sourceId===t.current||l(f.value)};return window.addEventListener("storage",c),window.addEventListener(Pp,d),()=>{window.removeEventListener("storage",c),window.removeEventListener(Pp,d)}},[e]),{preferences:n,setPreference:(l,c)=>{r({type:"set",key:l,value:c})},setPreferences:l=>{r({type:"set_many",value:l})},resetPreferences:l=>{r({type:"reset",value:l})},dispatch:r}}const DO=()=>{try{const e=localStorage.getItem("claude-settings");return e&&JSON.parse(e).projectSortOrder==="date"?"date":"name"}catch{return"name"}},OO=()=>{try{const e=localStorage.getItem("starredProjects");return e?new Set(JSON.parse(e)):new Set}catch{return new Set}},MO=e=>{try{localStorage.setItem("starredProjects",JSON.stringify([...e]))}catch{}},ik=(e,t)=>`${e}::${t}`,FO=()=>{try{const e=localStorage.getItem("starredSessions");return e?new Set(JSON.parse(e)):new Set}catch{return new Set}},zO=e=>{try{localStorage.setItem("starredSessions",JSON.stringify([...e]))}catch{}},BO=/(?:^|[\s/\\(\[`"'])([\w./-]+?\.(?:ts|tsx|js|jsx|mjs|cjs|py|rb|go|rs|java|kt|swift|c|cc|cpp|h|hpp|cs|php|sh|bash|zsh|json|ya?ml|toml|md|mdx|html?|css|scss|less|sql|prisma|graphql|gql|vue|svelte|astro|dart|lua|r|pl|ps1|tf|dockerfile|env))(?:$|[\s:,)\]`"'])/i,UO=e=>{if(!e)return[];const t=new Set,n=new RegExp(BO.source,"gi");let r;for(;(r=n.exec(e))!==null;){const a=r[1],s=a.lastIndexOf(".");if(s>-1){const o=a.slice(s+1).toLowerCase();o&&o.length<=10&&t.add(o)}if(t.size>=3)break}return[...t]},Xi=e=>e.__provider==="cursor"?new Date(e.createdAt||0):e.__provider==="codex"?new Date(e.createdAt||e.lastActivity||0):new Date(e.lastActivity||e.createdAt||0),$O=(e,t)=>e.__provider==="cursor"?e.summary||e.name||t("projects.untitledSession"):e.__provider==="codex"?e.summary||e.name||t("projects.codexSession"):e.__provider==="gemini"||e.__provider==="qwen"||e.__provider==="opencode"?e.summary||e.name||t("projects.newSession"):e.summary||t("projects.newSession"),HO=e=>e.__provider==="cursor"?String(e.createdAt||""):e.__provider==="codex"?String(e.createdAt||e.lastActivity||""):String(e.lastActivity||e.createdAt||""),GO=(e,t,n)=>{const r=Xi(e),a=Math.floor((t.getTime()-r.getTime())/(1e3*60));return{isCursorSession:e.__provider==="cursor",isCodexSession:e.__provider==="codex",isGeminiSession:e.__provider==="gemini",isQwenSession:e.__provider==="qwen",isOpencodeSession:e.__provider==="opencode",isActive:a<10,sessionName:$O(e,n),sessionTime:HO(e),messageCount:Number(e.messageCount||0)}},M4=(e,t)=>{const n=[...e.sessions||[],...t[e.name]||[]].map(g=>({...g,__provider:"claude"})),r=(e.cursorSessions||[]).map(g=>({...g,__provider:"cursor"})),a=(e.codexSessions||[]).map(g=>({...g,__provider:"codex"})),s=g=>typeof g.id=="string"&&g.id.startsWith("qwen_")||g.provider==="qwen",o=g=>typeof g.id=="string"&&g.id.startsWith("opencode_")||g.provider==="opencode",l=e.geminiSessions||[],c=l.filter(g=>!s(g)&&!o(g)).map(g=>({...g,__provider:"gemini"})),d=l.filter(g=>s(g)).map(g=>({...g,__provider:"qwen"})),u=l.filter(g=>o(g)).map(g=>({...g,__provider:"opencode"})),p=[...(e.qwenSessions||[]).map(g=>({...g,__provider:"qwen"})),...d],f=[...(e.opencodeSessions||[]).map(g=>({...g,__provider:"opencode"})),...u],h=new Map;for(const g of[...n,...r,...a,...c,...p,...f])h.has(g.id)||h.set(g.id,g);return[...h.values()].sort((g,b)=>Xi(b).getTime()-Xi(g).getTime())},sk=(e,t)=>{const n=M4(e,t);return n.length===0?new Date(0):n.reduce((r,a)=>{const s=Xi(a);return s>r?s:r},new Date(0))},VO=(e,t,n,r)=>{const a=[...e];return a.sort((s,o)=>{const l=n.has(s.name),c=n.has(o.name);return l&&!c?-1:!l&&c?1:t==="date"?sk(o,r).getTime()-sk(s,r).getTime():(s.displayName||s.name).localeCompare(o.displayName||o.name)}),a},WO=(e,t)=>{const n=t.trim().toLowerCase();return n?e.filter(r=>{const a=(r.displayName||r.name).toLowerCase(),s=r.name.toLowerCase();return a.includes(n)||s.includes(n)}):e},qO=e=>{const t=typeof e.fullPath=="string"&&e.fullPath.length>0?e.fullPath:typeof e.path=="string"?e.path:"";return{name:e.name,displayName:typeof e.displayName=="string"&&e.displayName.trim().length>0?e.displayName:e.name,fullPath:t,path:typeof e.path=="string"&&e.path.length>0?e.path:t}};function KO({projects:e,selectedProject:t,selectedSession:n,isLoading:r,isMobile:a,t:s,onRefresh:o,onProjectSelect:l,onSessionSelect:c,onSessionDelete:d,onProjectDelete:u,setSidebarVisible:p,sidebarVisible:f}){const[h,g]=m.useState(new Set),[b,x]=m.useState(null),[v,y]=m.useState(!1),[w,k]=m.useState(""),[S,C]=m.useState({}),[A,R]=m.useState({}),[j,E]=m.useState(new Set),[L,T]=m.useState(new Date),[I,N]=m.useState("name"),[O,$]=m.useState(!1),[F,q]=m.useState({}),[Y,P]=m.useState(null),[B,V]=m.useState(""),[z,ee]=m.useState(""),[ae,ue]=m.useState(new Set),[le,se]=m.useState(null),[me,de]=m.useState(null),[we,Ce]=m.useState(!1),[je,M]=m.useState(()=>OO()),[J,te]=m.useState(()=>FO()),[H,U]=m.useState("projects"),[Q,ge]=m.useState(null),[he,oe]=m.useState(!1),[Ee,fe]=m.useState(null),re=m.useRef(null),Z=m.useRef(0),ce=m.useRef(null),Se=!a&&!f;m.useEffect(()=>{const Oe=setInterval(()=>{T(new Date)},6e4);return()=>clearInterval(Oe)},[]),m.useEffect(()=>{R({}),E(new Set),q({})},[e]),m.useEffect(()=>{t&&g(Oe=>{if(Oe.has(t.name))return Oe;const Ve=new Set(Oe);return Ve.add(t.name),Ve})},[n,t]),m.useEffect(()=>{if(e.length>0&&!r){const Oe=new Set;e.forEach(Ve=>{Ve.sessions&&Ve.sessions.length>=0&&Oe.add(Ve.name)}),E(Oe)}},[e,r]),m.useEffect(()=>{const Oe=()=>{N(DO())};Oe();const Ve=et=>{et.key==="claude-settings"&&Oe()},mt=()=>Oe();return window.addEventListener("storage",Ve),window.addEventListener("pixcode:settings-changed",mt),()=>{window.removeEventListener("storage",Ve),window.removeEventListener("pixcode:settings-changed",mt)}},[]),m.useEffect(()=>{re.current&&clearTimeout(re.current),ce.current&&(ce.current.close(),ce.current=null);const Oe=z.trim();if(H!=="conversations"||Oe.length<2){Z.current+=1,ge(null),fe(null),oe(!1);return}oe(!0);const Ve=++Z.current;return re.current=setTimeout(()=>{if(Ve!==Z.current)return;const mt=At.searchConversationsUrl(Oe),et=new EventSource(mt);ce.current=et;const ye=[];let Fe=0;et.addEventListener("result",W=>{if(Ve!==Z.current){et.close();return}try{const ve=JSON.parse(W.data);ye.push(ve.projectResult),Fe=ve.totalMatches,ge({results:[...ye],totalMatches:Fe,query:Oe}),fe({scannedProjects:ve.scannedProjects,totalProjects:ve.totalProjects})}catch{}}),et.addEventListener("progress",W=>{if(Ve!==Z.current){et.close();return}try{const ve=JSON.parse(W.data);Fe=ve.totalMatches,fe({scannedProjects:ve.scannedProjects,totalProjects:ve.totalProjects})}catch{}}),et.addEventListener("done",()=>{if(Ve!==Z.current){et.close();return}et.close(),ce.current=null,oe(!1),fe(null),ye.length===0&&ge({results:[],totalMatches:0,query:Oe})}),et.addEventListener("error",()=>{if(Ve!==Z.current){et.close();return}et.close(),ce.current=null,oe(!1),fe(null),ye.length===0&&ge({results:[],totalMatches:0,query:Oe})})},400),()=>{re.current&&clearTimeout(re.current),ce.current&&(ce.current.close(),ce.current=null)}},[z,H]);const Be=m.useCallback(Oe=>{g(Ve=>{const mt=new Set;return Ve.has(Oe)||mt.add(Oe),mt})},[]),qe=m.useCallback((Oe,Ve)=>{c({...Oe,__projectName:Ve})},[c]),Je=m.useCallback(Oe=>{M(Ve=>{const mt=new Set(Ve);return mt.has(Oe)?mt.delete(Oe):mt.add(Oe),MO(mt),mt})},[]),ht=m.useCallback(Oe=>je.has(Oe),[je]),Xe=m.useCallback((Oe,Ve)=>{te(mt=>{const et=ik(Oe,Ve),ye=new Set(mt);return ye.has(et)?ye.delete(et):ye.add(et),zO(ye),ye})},[]),bt=m.useCallback((Oe,Ve)=>J.has(ik(Oe,Ve)),[J]),dt=m.useCallback(Oe=>M4(Oe,A),[A]),st=m.useMemo(()=>e.map(Oe=>{const Ve=F[Oe.name];return Ve===void 0?Oe:{...Oe,sessionMeta:{...Oe.sessionMeta,hasMore:Ve}}}),[F,e]),pt=m.useMemo(()=>VO(st,I,je,A),[A,I,st,je]),yt=m.useMemo(()=>WO(pt,z),[z,pt]),It=m.useCallback(Oe=>{x(Oe.name),k(Oe.displayName)},[]),_t=m.useCallback(()=>{x(null),k("")},[]),gn=m.useCallback(async Oe=>{try{(await At.renameProject(Oe,w)).ok?window.refreshProjects?await window.refreshProjects():window.location.reload():console.error("Failed to rename project")}catch(Ve){console.error("Error renaming project:",Ve)}finally{x(null),k("")}},[w]),Yt=m.useCallback((Oe,Ve,mt,et="claude")=>{de({projectName:Oe,sessionId:Ve,sessionTitle:mt,provider:et})},[]),dn=m.useCallback(async()=>{if(!me)return;const{projectName:Oe,sessionId:Ve,provider:mt}=me;de(null);try{let et;if(mt==="codex"?et=await At.deleteCodexSession(Ve):mt==="gemini"?et=await At.deleteGeminiSession(Ve):mt==="qwen"?et=await At.deleteQwenSession(Ve):et=await At.deleteSession(Oe,Ve),et.ok)d?.(Ve);else{const ye=await et.text();console.error("[Sidebar] Failed to delete session:",{status:et.status,error:ye}),alert(s("messages.deleteSessionFailed"))}}catch(et){console.error("[Sidebar] Error deleting session:",et),alert(s("messages.deleteSessionError"))}},[d,me,s]),bn=m.useCallback(Oe=>{se({project:Oe,sessionCount:dt(Oe).length})},[dt]),Le=m.useCallback(async(Oe=!1)=>{if(!le)return;const{project:Ve,sessionCount:mt}=le,et=mt===0;se(null),ue(ye=>new Set([...ye,Ve.name]));try{const ye=await At.deleteProject(Ve.name,!et,Oe);if(ye.ok)u?.(Ve.name);else{const Fe=await ye.json();alert(Fe.error||s("messages.deleteProjectFailed"))}}catch(ye){console.error("Error deleting project:",ye),alert(s("messages.deleteProjectError"))}finally{ue(ye=>{const Fe=new Set(ye);return Fe.delete(Ve.name),Fe})}},[le,u,s]),Ze=m.useCallback(async Oe=>{const Ve=F[Oe.name];if(!(!(Ve!==void 0?Ve:Oe.sessionMeta?.hasMore===!0)||S[Oe.name])){C(et=>({...et,[Oe.name]:!0}));try{const et=(Oe.sessions?.length||0)+(A[Oe.name]?.length||0),ye=await At.sessions(Oe.name,5,et);if(!ye.ok)return;const Fe=await ye.json();R(W=>({...W,[Oe.name]:[...W[Oe.name]||[],...Fe.sessions||[]]})),Fe.hasMore===!1&&q(W=>({...W,[Oe.name]:!1}))}catch(et){console.error("Error loading more sessions:",et)}finally{C(et=>({...et,[Oe.name]:!1}))}}},[A,S,F]),Re=m.useCallback(Oe=>{l(Oe)},[l]),$e=m.useCallback(async()=>{$(!0);try{await o()}finally{$(!1)}},[o]),nt=m.useCallback(async(Oe,Ve,mt,et)=>{const ye=mt.trim();if(!ye){P(null),V("");return}try{const Fe=await At.renameSession(Ve,ye,et);Fe.ok?await o():(console.error("[Sidebar] Failed to rename session:",Fe.status),alert(s("messages.renameSessionFailed")))}catch(Fe){console.error("[Sidebar] Error renaming session:",Fe),alert(s("messages.renameSessionError"))}finally{P(null),V("")}},[o,s]),xt=m.useCallback(()=>{p(!1)},[p]),Pt=m.useCallback(()=>{p(!0)},[p]);return{isSidebarCollapsed:Se,expandedProjects:h,editingProject:b,showNewProject:v,editingName:w,loadingSessions:S,additionalSessions:A,initialSessionsLoaded:j,currentTime:L,projectSortOrder:I,isRefreshing:O,editingSession:Y,editingSessionName:B,searchFilter:z,deletingProjects:ae,deleteConfirmation:le,sessionDeleteConfirmation:me,showVersionModal:we,starredProjects:je,starredSessions:J,filteredProjects:yt,toggleProject:Be,handleSessionClick:qe,toggleStarProject:Je,isProjectStarred:ht,toggleStarSession:Xe,isSessionStarred:bt,getProjectSessions:dt,startEditing:It,cancelEditing:_t,saveProjectName:gn,showDeleteSessionConfirmation:Yt,confirmDeleteSession:dn,requestProjectDelete:bn,confirmDeleteProject:Le,loadMoreSessions:Ze,handleProjectSelect:Re,refreshProjects:$e,updateSessionSummary:nt,collapseSidebar:xt,expandSidebar:Pt,setShowNewProject:y,setEditingName:k,setEditingSession:P,setEditingSessionName:V,searchMode:H,setSearchMode:U,conversationResults:Q,isSearching:he,searchProgress:Ee,clearConversationResults:m.useCallback(()=>{Z.current+=1,ce.current&&(ce.current.close(),ce.current=null),oe(!1),fe(null),ge(null)},[]),setSearchFilter:ee,setDeleteConfirmation:se,setSessionDeleteConfirmation:de,setShowVersionModal:Ce}}const YO="https://discord.gg/buxwujPNRE",ZO="https://github.com/alicomert/pixcode/issues/new";function XO({className:e}){return i.jsx("svg",{className:e,fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:i.jsx("path",{d:"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"})})}function JO({onExpand:e,onOpenControlRoom:t,onShowSettings:n,updateAvailable:r,onShowVersionModal:a,t:s}){return i.jsxs("div",{className:"flex h-full w-12 flex-col items-center gap-1 bg-background/80 py-3 backdrop-blur-sm",children:[i.jsx("button",{onClick:e,className:"group flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("common:versionUpdate.ariaLabels.showSidebar"),title:s("common:versionUpdate.ariaLabels.showSidebar"),children:i.jsx(ju,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})}),i.jsx("div",{className:"nav-divider my-1 w-6"}),t&&i.jsx("button",{onClick:t,className:"group flex h-8 w-8 items-center justify-center rounded-lg border border-primary/25 bg-primary/10 transition-colors hover:bg-primary/15","aria-label":s("actions.controlRoom",{defaultValue:"Control Room"}),title:s("actions.controlRoom",{defaultValue:"Control Room"}),children:i.jsx(Fr,{className:"h-4 w-4 text-primary"})}),i.jsx("button",{onClick:n,className:"group flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("actions.settings"),title:s("actions.settings"),children:i.jsx(Dt,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})}),i.jsx("a",{href:ZO,target:"_blank",rel:"noopener noreferrer",className:"group flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("actions.reportIssue"),title:s("actions.reportIssue"),children:i.jsx(Bl,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})}),i.jsx("a",{href:YO,target:"_blank",rel:"noopener noreferrer",className:"group flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("actions.joinCommunity"),title:s("actions.joinCommunity"),children:i.jsx(XO,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})}),r&&i.jsxs("button",{onClick:a,className:"relative flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-accent/80","aria-label":s("common:versionUpdate.ariaLabels.updateAvailable"),title:s("common:versionUpdate.ariaLabels.updateAvailable"),children:[i.jsx(Fr,{className:"h-4 w-4 text-blue-500"}),i.jsx("span",{className:"absolute right-1.5 top-1.5 h-1.5 w-1.5 animate-pulse rounded-full bg-blue-500"})]})]})}function F4(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=F4(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function z4(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=F4(e))&&(r&&(r+=" "),r+=t);return r}const ok=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,lk=z4,Dg=(e,t)=>n=>{var r;if(t?.variants==null)return lk(e,n?.class,n?.className);const{variants:a,defaultVariants:s}=t,o=Object.keys(a).map(d=>{const u=n?.[d],p=s?.[d];if(u===null)return null;const f=ok(u)||ok(p);return a[d][f]}),l=n&&Object.entries(n).reduce((d,u)=>{let[p,f]=u;return f===void 0||(d[p]=f),d},{}),c=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((d,u)=>{let{class:p,className:f,...h}=u;return Object.entries(h).every(g=>{let[b,x]=g;return Array.isArray(x)?x.includes({...s,...l}[b]):{...s,...l}[b]===x})?[...d,p,f]:d},[]);return lk(e,o,c,n?.class,n?.className)},Og="-",QO=e=>{const t=tM(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:o=>{const l=o.split(Og);return l[0]===""&&l.length!==1&&l.shift(),B4(l,t)||eM(o)},getConflictingClassGroupIds:(o,l)=>{const c=n[o]||[];return l&&r[o]?[...c,...r[o]]:c}}},B4=(e,t)=>{if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),a=r?B4(e.slice(1),r):void 0;if(a)return a;if(t.validators.length===0)return;const s=e.join(Og);return t.validators.find(({validator:o})=>o(s))?.classGroupId},ck=/^\[(.+)\]$/,eM=e=>{if(ck.test(e)){const t=ck.exec(e)[1],n=t?.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},tM=e=>{const{theme:t,classGroups:n}=e,r={nextPart:new Map,validators:[]};for(const a in n)ef(n[a],r,a,t);return r},ef=(e,t,n,r)=>{e.forEach(a=>{if(typeof a=="string"){const s=a===""?t:dk(t,a);s.classGroupId=n;return}if(typeof a=="function"){if(nM(a)){ef(a(r),t,n,r);return}t.validators.push({validator:a,classGroupId:n});return}Object.entries(a).forEach(([s,o])=>{ef(o,dk(t,s),n,r)})})},dk=(e,t)=>{let n=e;return t.split(Og).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},nM=e=>e.isThemeGetter,rM=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const a=(s,o)=>{n.set(s,o),t++,t>e&&(t=0,r=n,n=new Map)};return{get(s){let o=n.get(s);if(o!==void 0)return o;if((o=r.get(s))!==void 0)return a(s,o),o},set(s,o){n.has(s)?n.set(s,o):a(s,o)}}},tf="!",nf=":",aM=nf.length,iM=e=>{const{prefix:t,experimentalParseClassName:n}=e;let r=a=>{const s=[];let o=0,l=0,c=0,d;for(let g=0;g<a.length;g++){let b=a[g];if(o===0&&l===0){if(b===nf){s.push(a.slice(c,g)),c=g+aM;continue}if(b==="/"){d=g;continue}}b==="["?o++:b==="]"?o--:b==="("?l++:b===")"&&l--}const u=s.length===0?a:a.substring(c),p=sM(u),f=p!==u,h=d&&d>c?d-c:void 0;return{modifiers:s,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:h}};if(t){const a=t+nf,s=r;r=o=>o.startsWith(a)?s(o.substring(a.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:o,maybePostfixModifierPosition:void 0}}if(n){const a=r;r=s=>n({className:s,parseClassName:a})}return r},sM=e=>e.endsWith(tf)?e.substring(0,e.length-1):e.startsWith(tf)?e.substring(1):e,oM=e=>{const t=Object.fromEntries(e.orderSensitiveModifiers.map(r=>[r,!0]));return r=>{if(r.length<=1)return r;const a=[];let s=[];return r.forEach(o=>{o[0]==="["||t[o]?(a.push(...s.sort(),o),s=[]):s.push(o)}),a.push(...s.sort()),a}},lM=e=>({cache:rM(e.cacheSize),parseClassName:iM(e),sortModifiers:oM(e),...QO(e)}),cM=/\s+/,dM=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a,sortModifiers:s}=t,o=[],l=e.trim().split(cM);let c="";for(let d=l.length-1;d>=0;d-=1){const u=l[d],{isExternal:p,modifiers:f,hasImportantModifier:h,baseClassName:g,maybePostfixModifierPosition:b}=n(u);if(p){c=u+(c.length>0?" "+c:c);continue}let x=!!b,v=r(x?g.substring(0,b):g);if(!v){if(!x){c=u+(c.length>0?" "+c:c);continue}if(v=r(g),!v){c=u+(c.length>0?" "+c:c);continue}x=!1}const y=s(f).join(":"),w=h?y+tf:y,k=w+v;if(o.includes(k))continue;o.push(k);const S=a(v,x);for(let C=0;C<S.length;++C){const A=S[C];o.push(w+A)}c=u+(c.length>0?" "+c:c)}return c};function uM(){let e=0,t,n,r="";for(;e<arguments.length;)(t=arguments[e++])&&(n=U4(t))&&(r&&(r+=" "),r+=n);return r}const U4=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=U4(e[r]))&&(n&&(n+=" "),n+=t);return n};function pM(e,...t){let n,r,a,s=o;function o(c){const d=t.reduce((u,p)=>p(u),e());return n=lM(d),r=n.cache.get,a=n.cache.set,s=l,l(c)}function l(c){const d=r(c);if(d)return d;const u=dM(c,n);return a(c,u),u}return function(){return s(uM.apply(null,arguments))}}const xn=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},$4=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,H4=/^\((?:(\w[\w-]*):)?(.+)\)$/i,mM=/^\d+\/\d+$/,hM=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,fM=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,gM=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,bM=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,xM=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Cs=e=>mM.test(e),vt=e=>!!e&&!Number.isNaN(Number(e)),Ka=e=>!!e&&Number.isInteger(Number(e)),Dp=e=>e.endsWith("%")&&vt(e.slice(0,-1)),wa=e=>hM.test(e),vM=()=>!0,yM=e=>fM.test(e)&&!gM.test(e),G4=()=>!1,wM=e=>bM.test(e),kM=e=>xM.test(e),SM=e=>!Ke(e)&&!Ye(e),CM=e=>Ao(e,q4,G4),Ke=e=>$4.test(e),Pi=e=>Ao(e,K4,yM),Op=e=>Ao(e,jM,vt),uk=e=>Ao(e,V4,G4),NM=e=>Ao(e,W4,kM),Lc=e=>Ao(e,Y4,wM),Ye=e=>H4.test(e),tl=e=>jo(e,K4),EM=e=>jo(e,RM),pk=e=>jo(e,V4),TM=e=>jo(e,q4),AM=e=>jo(e,W4),Pc=e=>jo(e,Y4,!0),Ao=(e,t,n)=>{const r=$4.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},jo=(e,t,n=!1)=>{const r=H4.exec(e);return r?r[1]?t(r[1]):n:!1},V4=e=>e==="position"||e==="percentage",W4=e=>e==="image"||e==="url",q4=e=>e==="length"||e==="size"||e==="bg-size",K4=e=>e==="length",jM=e=>e==="number",RM=e=>e==="family-name",Y4=e=>e==="shadow",IM=()=>{const e=xn("color"),t=xn("font"),n=xn("text"),r=xn("font-weight"),a=xn("tracking"),s=xn("leading"),o=xn("breakpoint"),l=xn("container"),c=xn("spacing"),d=xn("radius"),u=xn("shadow"),p=xn("inset-shadow"),f=xn("text-shadow"),h=xn("drop-shadow"),g=xn("blur"),b=xn("perspective"),x=xn("aspect"),v=xn("ease"),y=xn("animate"),w=()=>["auto","avoid","all","avoid-page","page","left","right","column"],k=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],S=()=>[...k(),Ye,Ke],C=()=>["auto","hidden","clip","visible","scroll"],A=()=>["auto","contain","none"],R=()=>[Ye,Ke,c],j=()=>[Cs,"full","auto",...R()],E=()=>[Ka,"none","subgrid",Ye,Ke],L=()=>["auto",{span:["full",Ka,Ye,Ke]},Ka,Ye,Ke],T=()=>[Ka,"auto",Ye,Ke],I=()=>["auto","min","max","fr",Ye,Ke],N=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],O=()=>["start","end","center","stretch","center-safe","end-safe"],$=()=>["auto",...R()],F=()=>[Cs,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...R()],q=()=>[e,Ye,Ke],Y=()=>[...k(),pk,uk,{position:[Ye,Ke]}],P=()=>["no-repeat",{repeat:["","x","y","space","round"]}],B=()=>["auto","cover","contain",TM,CM,{size:[Ye,Ke]}],V=()=>[Dp,tl,Pi],z=()=>["","none","full",d,Ye,Ke],ee=()=>["",vt,tl,Pi],ae=()=>["solid","dashed","dotted","double"],ue=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],le=()=>[vt,Dp,pk,uk],se=()=>["","none",g,Ye,Ke],me=()=>["none",vt,Ye,Ke],de=()=>["none",vt,Ye,Ke],we=()=>[vt,Ye,Ke],Ce=()=>[Cs,"full",...R()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[wa],breakpoint:[wa],color:[vM],container:[wa],"drop-shadow":[wa],ease:["in","out","in-out"],font:[SM],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[wa],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[wa],shadow:[wa],spacing:["px",vt],text:[wa],"text-shadow":[wa],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Cs,Ke,Ye,x]}],container:["container"],columns:[{columns:[vt,Ke,Ye,l]}],"break-after":[{"break-after":w()}],"break-before":[{"break-before":w()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:S()}],overflow:[{overflow:C()}],"overflow-x":[{"overflow-x":C()}],"overflow-y":[{"overflow-y":C()}],overscroll:[{overscroll:A()}],"overscroll-x":[{"overscroll-x":A()}],"overscroll-y":[{"overscroll-y":A()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:j()}],"inset-x":[{"inset-x":j()}],"inset-y":[{"inset-y":j()}],start:[{start:j()}],end:[{end:j()}],top:[{top:j()}],right:[{right:j()}],bottom:[{bottom:j()}],left:[{left:j()}],visibility:["visible","invisible","collapse"],z:[{z:[Ka,"auto",Ye,Ke]}],basis:[{basis:[Cs,"full","auto",l,...R()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[vt,Cs,"auto","initial","none",Ke]}],grow:[{grow:["",vt,Ye,Ke]}],shrink:[{shrink:["",vt,Ye,Ke]}],order:[{order:[Ka,"first","last","none",Ye,Ke]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:L()}],"col-start":[{"col-start":T()}],"col-end":[{"col-end":T()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:L()}],"row-start":[{"row-start":T()}],"row-end":[{"row-end":T()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":I()}],"auto-rows":[{"auto-rows":I()}],gap:[{gap:R()}],"gap-x":[{"gap-x":R()}],"gap-y":[{"gap-y":R()}],"justify-content":[{justify:[...N(),"normal"]}],"justify-items":[{"justify-items":[...O(),"normal"]}],"justify-self":[{"justify-self":["auto",...O()]}],"align-content":[{content:["normal",...N()]}],"align-items":[{items:[...O(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...O(),{baseline:["","last"]}]}],"place-content":[{"place-content":N()}],"place-items":[{"place-items":[...O(),"baseline"]}],"place-self":[{"place-self":["auto",...O()]}],p:[{p:R()}],px:[{px:R()}],py:[{py:R()}],ps:[{ps:R()}],pe:[{pe:R()}],pt:[{pt:R()}],pr:[{pr:R()}],pb:[{pb:R()}],pl:[{pl:R()}],m:[{m:$()}],mx:[{mx:$()}],my:[{my:$()}],ms:[{ms:$()}],me:[{me:$()}],mt:[{mt:$()}],mr:[{mr:$()}],mb:[{mb:$()}],ml:[{ml:$()}],"space-x":[{"space-x":R()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":R()}],"space-y-reverse":["space-y-reverse"],size:[{size:F()}],w:[{w:[l,"screen",...F()]}],"min-w":[{"min-w":[l,"screen","none",...F()]}],"max-w":[{"max-w":[l,"screen","none","prose",{screen:[o]},...F()]}],h:[{h:["screen","lh",...F()]}],"min-h":[{"min-h":["screen","lh","none",...F()]}],"max-h":[{"max-h":["screen","lh",...F()]}],"font-size":[{text:["base",n,tl,Pi]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,Ye,Op]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Dp,Ke]}],"font-family":[{font:[EM,Ke,t]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[a,Ye,Ke]}],"line-clamp":[{"line-clamp":[vt,"none",Ye,Op]}],leading:[{leading:[s,...R()]}],"list-image":[{"list-image":["none",Ye,Ke]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Ye,Ke]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:q()}],"text-color":[{text:q()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...ae(),"wavy"]}],"text-decoration-thickness":[{decoration:[vt,"from-font","auto",Ye,Pi]}],"text-decoration-color":[{decoration:q()}],"underline-offset":[{"underline-offset":[vt,"auto",Ye,Ke]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:R()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ye,Ke]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Ye,Ke]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:Y()}],"bg-repeat":[{bg:P()}],"bg-size":[{bg:B()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ka,Ye,Ke],radial:["",Ye,Ke],conic:[Ka,Ye,Ke]},AM,NM]}],"bg-color":[{bg:q()}],"gradient-from-pos":[{from:V()}],"gradient-via-pos":[{via:V()}],"gradient-to-pos":[{to:V()}],"gradient-from":[{from:q()}],"gradient-via":[{via:q()}],"gradient-to":[{to:q()}],rounded:[{rounded:z()}],"rounded-s":[{"rounded-s":z()}],"rounded-e":[{"rounded-e":z()}],"rounded-t":[{"rounded-t":z()}],"rounded-r":[{"rounded-r":z()}],"rounded-b":[{"rounded-b":z()}],"rounded-l":[{"rounded-l":z()}],"rounded-ss":[{"rounded-ss":z()}],"rounded-se":[{"rounded-se":z()}],"rounded-ee":[{"rounded-ee":z()}],"rounded-es":[{"rounded-es":z()}],"rounded-tl":[{"rounded-tl":z()}],"rounded-tr":[{"rounded-tr":z()}],"rounded-br":[{"rounded-br":z()}],"rounded-bl":[{"rounded-bl":z()}],"border-w":[{border:ee()}],"border-w-x":[{"border-x":ee()}],"border-w-y":[{"border-y":ee()}],"border-w-s":[{"border-s":ee()}],"border-w-e":[{"border-e":ee()}],"border-w-t":[{"border-t":ee()}],"border-w-r":[{"border-r":ee()}],"border-w-b":[{"border-b":ee()}],"border-w-l":[{"border-l":ee()}],"divide-x":[{"divide-x":ee()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":ee()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...ae(),"hidden","none"]}],"divide-style":[{divide:[...ae(),"hidden","none"]}],"border-color":[{border:q()}],"border-color-x":[{"border-x":q()}],"border-color-y":[{"border-y":q()}],"border-color-s":[{"border-s":q()}],"border-color-e":[{"border-e":q()}],"border-color-t":[{"border-t":q()}],"border-color-r":[{"border-r":q()}],"border-color-b":[{"border-b":q()}],"border-color-l":[{"border-l":q()}],"divide-color":[{divide:q()}],"outline-style":[{outline:[...ae(),"none","hidden"]}],"outline-offset":[{"outline-offset":[vt,Ye,Ke]}],"outline-w":[{outline:["",vt,tl,Pi]}],"outline-color":[{outline:q()}],shadow:[{shadow:["","none",u,Pc,Lc]}],"shadow-color":[{shadow:q()}],"inset-shadow":[{"inset-shadow":["none",p,Pc,Lc]}],"inset-shadow-color":[{"inset-shadow":q()}],"ring-w":[{ring:ee()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:q()}],"ring-offset-w":[{"ring-offset":[vt,Pi]}],"ring-offset-color":[{"ring-offset":q()}],"inset-ring-w":[{"inset-ring":ee()}],"inset-ring-color":[{"inset-ring":q()}],"text-shadow":[{"text-shadow":["none",f,Pc,Lc]}],"text-shadow-color":[{"text-shadow":q()}],opacity:[{opacity:[vt,Ye,Ke]}],"mix-blend":[{"mix-blend":[...ue(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ue()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[vt]}],"mask-image-linear-from-pos":[{"mask-linear-from":le()}],"mask-image-linear-to-pos":[{"mask-linear-to":le()}],"mask-image-linear-from-color":[{"mask-linear-from":q()}],"mask-image-linear-to-color":[{"mask-linear-to":q()}],"mask-image-t-from-pos":[{"mask-t-from":le()}],"mask-image-t-to-pos":[{"mask-t-to":le()}],"mask-image-t-from-color":[{"mask-t-from":q()}],"mask-image-t-to-color":[{"mask-t-to":q()}],"mask-image-r-from-pos":[{"mask-r-from":le()}],"mask-image-r-to-pos":[{"mask-r-to":le()}],"mask-image-r-from-color":[{"mask-r-from":q()}],"mask-image-r-to-color":[{"mask-r-to":q()}],"mask-image-b-from-pos":[{"mask-b-from":le()}],"mask-image-b-to-pos":[{"mask-b-to":le()}],"mask-image-b-from-color":[{"mask-b-from":q()}],"mask-image-b-to-color":[{"mask-b-to":q()}],"mask-image-l-from-pos":[{"mask-l-from":le()}],"mask-image-l-to-pos":[{"mask-l-to":le()}],"mask-image-l-from-color":[{"mask-l-from":q()}],"mask-image-l-to-color":[{"mask-l-to":q()}],"mask-image-x-from-pos":[{"mask-x-from":le()}],"mask-image-x-to-pos":[{"mask-x-to":le()}],"mask-image-x-from-color":[{"mask-x-from":q()}],"mask-image-x-to-color":[{"mask-x-to":q()}],"mask-image-y-from-pos":[{"mask-y-from":le()}],"mask-image-y-to-pos":[{"mask-y-to":le()}],"mask-image-y-from-color":[{"mask-y-from":q()}],"mask-image-y-to-color":[{"mask-y-to":q()}],"mask-image-radial":[{"mask-radial":[Ye,Ke]}],"mask-image-radial-from-pos":[{"mask-radial-from":le()}],"mask-image-radial-to-pos":[{"mask-radial-to":le()}],"mask-image-radial-from-color":[{"mask-radial-from":q()}],"mask-image-radial-to-color":[{"mask-radial-to":q()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":k()}],"mask-image-conic-pos":[{"mask-conic":[vt]}],"mask-image-conic-from-pos":[{"mask-conic-from":le()}],"mask-image-conic-to-pos":[{"mask-conic-to":le()}],"mask-image-conic-from-color":[{"mask-conic-from":q()}],"mask-image-conic-to-color":[{"mask-conic-to":q()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:Y()}],"mask-repeat":[{mask:P()}],"mask-size":[{mask:B()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Ye,Ke]}],filter:[{filter:["","none",Ye,Ke]}],blur:[{blur:se()}],brightness:[{brightness:[vt,Ye,Ke]}],contrast:[{contrast:[vt,Ye,Ke]}],"drop-shadow":[{"drop-shadow":["","none",h,Pc,Lc]}],"drop-shadow-color":[{"drop-shadow":q()}],grayscale:[{grayscale:["",vt,Ye,Ke]}],"hue-rotate":[{"hue-rotate":[vt,Ye,Ke]}],invert:[{invert:["",vt,Ye,Ke]}],saturate:[{saturate:[vt,Ye,Ke]}],sepia:[{sepia:["",vt,Ye,Ke]}],"backdrop-filter":[{"backdrop-filter":["","none",Ye,Ke]}],"backdrop-blur":[{"backdrop-blur":se()}],"backdrop-brightness":[{"backdrop-brightness":[vt,Ye,Ke]}],"backdrop-contrast":[{"backdrop-contrast":[vt,Ye,Ke]}],"backdrop-grayscale":[{"backdrop-grayscale":["",vt,Ye,Ke]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[vt,Ye,Ke]}],"backdrop-invert":[{"backdrop-invert":["",vt,Ye,Ke]}],"backdrop-opacity":[{"backdrop-opacity":[vt,Ye,Ke]}],"backdrop-saturate":[{"backdrop-saturate":[vt,Ye,Ke]}],"backdrop-sepia":[{"backdrop-sepia":["",vt,Ye,Ke]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":R()}],"border-spacing-x":[{"border-spacing-x":R()}],"border-spacing-y":[{"border-spacing-y":R()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Ye,Ke]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[vt,"initial",Ye,Ke]}],ease:[{ease:["linear","initial",v,Ye,Ke]}],delay:[{delay:[vt,Ye,Ke]}],animate:[{animate:["none",y,Ye,Ke]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[b,Ye,Ke]}],"perspective-origin":[{"perspective-origin":S()}],rotate:[{rotate:me()}],"rotate-x":[{"rotate-x":me()}],"rotate-y":[{"rotate-y":me()}],"rotate-z":[{"rotate-z":me()}],scale:[{scale:de()}],"scale-x":[{"scale-x":de()}],"scale-y":[{"scale-y":de()}],"scale-z":[{"scale-z":de()}],"scale-3d":["scale-3d"],skew:[{skew:we()}],"skew-x":[{"skew-x":we()}],"skew-y":[{"skew-y":we()}],transform:[{transform:[Ye,Ke,"","none","gpu","cpu"]}],"transform-origin":[{origin:S()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Ce()}],"translate-x":[{"translate-x":Ce()}],"translate-y":[{"translate-y":Ce()}],"translate-z":[{"translate-z":Ce()}],"translate-none":["translate-none"],accent:[{accent:q()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:q()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Ye,Ke]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":R()}],"scroll-mx":[{"scroll-mx":R()}],"scroll-my":[{"scroll-my":R()}],"scroll-ms":[{"scroll-ms":R()}],"scroll-me":[{"scroll-me":R()}],"scroll-mt":[{"scroll-mt":R()}],"scroll-mr":[{"scroll-mr":R()}],"scroll-mb":[{"scroll-mb":R()}],"scroll-ml":[{"scroll-ml":R()}],"scroll-p":[{"scroll-p":R()}],"scroll-px":[{"scroll-px":R()}],"scroll-py":[{"scroll-py":R()}],"scroll-ps":[{"scroll-ps":R()}],"scroll-pe":[{"scroll-pe":R()}],"scroll-pt":[{"scroll-pt":R()}],"scroll-pr":[{"scroll-pr":R()}],"scroll-pb":[{"scroll-pb":R()}],"scroll-pl":[{"scroll-pl":R()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Ye,Ke]}],fill:[{fill:["none",...q()]}],"stroke-w":[{stroke:[vt,tl,Pi,Op]}],stroke:[{stroke:["none",...q()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},_M=pM(IM);function xe(...e){return _M(z4(e))}function LM(e){if(!e||typeof e!="string")return null;try{return JSON.parse(e)}catch{return null}}const PM=Dg("relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current"}},defaultVariants:{variant:"default"}}),Z4=m.forwardRef(({className:e,variant:t,...n},r)=>i.jsx("div",{ref:r,role:"alert","data-slot":"alert",className:xe(PM({variant:t}),e),...n}));Z4.displayName="Alert";const DM=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"alert-title",className:xe("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",e),...t}));DM.displayName="AlertTitle";const OM=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"alert-description",className:xe("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",e),...t}));OM.displayName="AlertDescription";const MM=Dg("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function kt({className:e,variant:t,...n}){return i.jsx("div",{className:xe(MM({variant:t}),e),...n})}const FM=Dg("inline-flex touch-manipulation items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90 active:bg-primary/80",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 active:bg-destructive/80",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground active:bg-accent/80",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80 active:bg-secondary/70",ghost:"hover:bg-accent hover:text-accent-foreground active:bg-accent/80",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3 text-sm",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),Te=m.forwardRef(({className:e,variant:t,size:n,...r},a)=>i.jsx("button",{className:xe(FM({variant:t,size:n,className:e})),ref:a,...r}));Te.displayName="Button";const X4=m.createContext(null),J4=()=>{const e=m.useContext(X4);if(!e)throw new Error("Confirmation components must be used within Confirmation");return e},Q4=({className:e,approval:t="pending",children:n,...r})=>{const a=m.useMemo(()=>({approval:t}),[t]);return i.jsx(X4.Provider,{value:a,children:i.jsx(Z4,{className:xe("flex flex-col gap-2",e),...r,children:n})})};Q4.displayName="Confirmation";const eE=({className:e,...t})=>i.jsx("div",{"data-slot":"confirmation-title",className:xe("text-muted-foreground inline text-sm",e),...t});eE.displayName="ConfirmationTitle";const tE=({children:e})=>{const{approval:t}=J4();return t!=="pending"?null:i.jsx(i.Fragment,{children:e})};tE.displayName="ConfirmationRequest";const nE=({className:e,...t})=>{const{approval:n}=J4();return n!=="pending"?null:i.jsx("div",{"data-slot":"confirmation-actions",className:xe("flex items-center justify-end gap-2 self-end",e),...t})};nE.displayName="ConfirmationActions";const wd=({variant:e="default",...t})=>i.jsx(Te,{className:"h-8 px-3 text-sm",variant:e,type:"button",...t});wd.displayName="ConfirmationAction";const rE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("rounded-xl border bg-card text-card-foreground shadow-sm",e),...t}));rE.displayName="Card";const aE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("flex flex-col space-y-1.5 p-4",e),...t}));aE.displayName="CardHeader";const iE=m.forwardRef(({className:e,...t},n)=>i.jsx("h3",{ref:n,className:xe("font-semibold leading-none tracking-tight",e),...t}));iE.displayName="CardTitle";const zM=m.forwardRef(({className:e,...t},n)=>i.jsx("p",{ref:n,className:xe("text-sm text-muted-foreground",e),...t}));zM.displayName="CardDescription";const sE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("p-4 pt-0",e),...t}));sE.displayName="CardContent";const oE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("flex items-center p-4 pt-0",e),...t}));oE.displayName="CardFooter";const BM=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("ml-auto shrink-0",e),...t}));BM.displayName="CardAction";const lE=m.createContext(null);function cE(){const e=m.useContext(lE);if(!e)throw new Error("Collapsible components must be used within <Collapsible>");return e}const fi=m.forwardRef(({defaultOpen:e=!1,open:t,onOpenChange:n,className:r,children:a,...s},o)=>{const[l,c]=m.useState(e),d=t!==void 0,u=d?t:l,p=m.useCallback(h=>{d||c(h),n?.(h)},[d,n]),f=m.useMemo(()=>({open:u,onOpenChange:p}),[u,p]);return i.jsx(lE.Provider,{value:f,children:i.jsx("div",{ref:o,"data-state":u?"open":"closed",className:r,...s,children:a})})});fi.displayName="Collapsible";const Pa=m.forwardRef(({onClick:e,children:t,className:n,...r},a)=>{const{open:s,onOpenChange:o}=cE(),l=m.useCallback(c=>{o(!s),e?.(c)},[s,o,e]);return i.jsx("button",{ref:a,type:"button","aria-expanded":s,"data-state":s?"open":"closed",onClick:l,className:n,...r,children:t})});Pa.displayName="CollapsibleTrigger";const gi=m.forwardRef(({className:e,children:t,...n},r)=>{const{open:a}=cE();return i.jsx("div",{ref:r,"data-state":a?"open":"closed",className:xe("grid transition-[grid-template-rows] duration-200 ease-out",a?"grid-rows-[1fr]":"grid-rows-[0fr]",e),...n,children:i.jsx("div",{className:"overflow-hidden",children:t})})});gi.displayName="CollapsibleContent";const dE=m.createContext(null);function Mg(){const e=m.useContext(dE);if(!e)throw new Error("Command components must be used within <Command>");return e}const uE=m.forwardRef(({className:e,children:t,...n},r)=>{const[a,s]=m.useState(""),o=m.useRef(new Map),[l,c]=m.useState(0),d=m.useCallback(y=>{o.current.set(y.id,y),c(w=>w+1)},[]),u=m.useCallback(y=>{o.current.delete(y),c(w=>w+1)},[]),p=m.useCallback((y,w)=>{const k=o.current.get(y);k&&Object.assign(k,w)},[]),f=m.useMemo(()=>{const y=a.toLowerCase(),w=new Set;for(const[k,S]of o.current)(!y||S.value.includes(y))&&w.add(k);return w},[a,l]),h=m.useMemo(()=>{const y=[];for(const[,w]of o.current)f.has(w.id)&&y.push(w);return y},[f]),[g,b]=m.useState(null);m.useEffect(()=>{b(h.length>0?h[0].id:null)},[h]);const x=m.useCallback(y=>{if(y.key==="ArrowDown"||y.key==="ArrowUp"||y.key==="Enter")y.preventDefault();else return;const w=h;if(w.length===0)return;if(y.key==="Enter"){w.find(j=>j.id===g)?.onSelect();return}const k=w.findIndex(R=>R.id===g);let S;y.key==="ArrowDown"?S=k<w.length-1?k+1:0:S=k>0?k-1:w.length-1;const C=w[S].id;b(C),w[S].element?.scrollIntoView({block:"nearest"})},[h,g]),v=m.useMemo(()=>({search:a,setSearch:s,visibleIds:f,activeId:g,setActiveId:b,register:d,unregister:u,updateEntry:p}),[a,f,g,d,u,p]);return i.jsx(dE.Provider,{value:v,children:i.jsx("div",{ref:r,role:"combobox","aria-expanded":"true","aria-haspopup":"listbox",className:xe("flex flex-col",e),onKeyDown:x,...n,children:t})})});uE.displayName="Command";const pE=m.forwardRef(({className:e,placeholder:t="Search...",...n},r)=>{const{search:a,setSearch:s}=Mg();return i.jsxs("div",{className:"flex items-center border-b px-3",role:"presentation",children:[i.jsx(as,{className:"mr-2 h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":!0}),i.jsx("input",{ref:r,type:"text",role:"searchbox","aria-autocomplete":"list",autoComplete:"off",autoCorrect:"off",spellCheck:!1,value:a,onChange:o=>s(o.target.value),placeholder:t,className:xe("flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none","placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",e),...n})]})});pE.displayName="CommandInput";const mE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,role:"listbox",className:xe("max-h-[300px] overflow-y-auto overflow-x-hidden",e),...t}));mE.displayName="CommandList";const hE=m.forwardRef(({className:e,...t},n)=>{const{search:r,visibleIds:a}=Mg();return!r||a.size>0?null:i.jsx("div",{ref:n,className:xe("py-6 text-center text-sm text-muted-foreground",e),...t})});hE.displayName="CommandEmpty";const fE=m.forwardRef(({className:e,heading:t,children:n,...r},a)=>i.jsxs("div",{ref:a,className:xe("overflow-hidden p-1",e),role:"group","aria-label":typeof t=="string"?t:void 0,...r,children:[t&&i.jsx("div",{className:"px-2 py-1.5 text-xs font-medium text-muted-foreground",role:"presentation",children:t}),n]}));fE.displayName="CommandGroup";const gE=m.forwardRef(({className:e,value:t,onSelect:n,disabled:r,children:a,...s},o)=>{const{visibleIds:l,activeId:c,setActiveId:d,register:u,unregister:p,updateEntry:f}=Mg(),h=m.useId(),g=m.useRef(null),b=t||(typeof a=="string"?a:"");m.useEffect(()=>(u({id:h,value:b.toLowerCase(),onSelect:n||(()=>{}),element:g.current}),()=>p(h)),[h,b,u,p]),m.useEffect(()=>{f(h,{onSelect:n||(()=>{})})},[h,n,f]);const x=m.useCallback(y=>{g.current=y,f(h,{element:y}),typeof o=="function"?o(y):o&&(o.current=y)},[h,f,o]);if(!l.has(h))return null;const v=c===h;return i.jsx("div",{ref:x,role:"option","aria-selected":v,"aria-disabled":r||void 0,"data-active":v||void 0,className:xe("relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none",v&&"bg-accent text-accent-foreground",r&&"pointer-events-none opacity-50",e),onPointerMove:()=>{!r&&c!==h&&d(h)},onClick:()=>!r&&n?.(),...s,children:a})});gE.displayName="CommandItem";const UM=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,className:xe("-mx-1 h-px bg-border",e),...t}));UM.displayName="CommandSeparator";function Wd({checked:e,onToggle:t,ariaLabel:n}){const{t:r}=Me("settings"),{isDarkMode:a,toggleDarkMode:s}=Ga(),o=typeof e=="boolean",l=o?e:a,c=n||r("quickSettings.darkMode",{defaultValue:"Toggle dark mode"}),d=()=>{if(o){t?.(!l);return}s()};return i.jsxs("button",{onClick:d,className:xe("relative inline-flex h-7 w-12 flex-shrink-0 touch-manipulation cursor-pointer items-center rounded-full border-2 transition-colors duration-200","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",l?"border-primary bg-primary":"border-border bg-muted"),role:"switch","aria-checked":l,"aria-label":c,children:[i.jsx("span",{className:"sr-only",children:c}),i.jsx("span",{className:xe("flex h-5 w-5 transform items-center justify-center rounded-full shadow-sm transition-transform duration-200",l?"translate-x-[22px] bg-white":"translate-x-[2px] bg-foreground/60 dark:bg-foreground/80"),children:l?i.jsx(N4,{className:"h-3 w-3 text-primary"}):i.jsx(T4,{className:"h-3 w-3 text-white dark:text-background"})})]})}const bE=m.createContext(null);function xE(){const e=m.useContext(bE);if(!e)throw new Error("Dialog components must be used within <Dialog>");return e}const vE=({open:e,onOpenChange:t,defaultOpen:n=!1,children:r})=>{const[a,s]=m.useState(n),o=m.useRef(null),l=e!==void 0,c=l?e:a,d=m.useCallback(p=>{l||s(p),t?.(p)},[l,t]),u=m.useMemo(()=>({open:c,onOpenChange:d,triggerRef:o}),[c,d]);return i.jsx(bE.Provider,{value:u,children:r})},$M=m.forwardRef(({onClick:e,children:t,asChild:n,...r},a)=>{const{onOpenChange:s,triggerRef:o}=xE(),l=m.useCallback(c=>{s(!0),e?.(c)},[s,e]);if(n&&m.isValidElement(t)){const c=t;return m.cloneElement(c,{onClick:d=>{s(!0),c.props.onClick?.(d)},ref:d=>{o.current=d,typeof a=="function"?a(d):a&&(a.current=d)}})}return i.jsx("button",{ref:c=>{o.current=c,typeof a=="function"?a(c):a&&(a.current=c)},type:"button",onClick:l,...r,children:t})});$M.displayName="DialogTrigger";const mk='a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])',Fg=m.forwardRef(({className:e,children:t,onEscapeKeyDown:n,onPointerDownOutside:r,...a},s)=>{const{open:o,onOpenChange:l,triggerRef:c}=xE(),d=m.useRef(null),u=m.useRef(null);return m.useEffect(()=>{o?u.current=document.activeElement:u.current&&((c.current||u.current)?.focus(),u.current=null)},[o,c]),m.useEffect(()=>{if(!o)return;const p=h=>{if(h.key==="Escape"){h.stopPropagation(),n?.(),l(!1);return}if(h.key==="Tab"&&d.current){const g=Array.from(d.current.querySelectorAll(mk));if(g.length===0)return;const b=g[0],x=g[g.length-1];h.shiftKey&&document.activeElement===b?(h.preventDefault(),x.focus()):!h.shiftKey&&document.activeElement===x&&(h.preventDefault(),b.focus())}};document.addEventListener("keydown",p,!0);const f=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",p,!0),document.body.style.overflow=f}},[o,l,n]),m.useEffect(()=>{o&&d.current&&requestAnimationFrame(()=>{d.current?.querySelector(mk)?.focus()})},[o]),o?Nu.createPortal(i.jsxs("div",{className:"fixed inset-0 z-50",children:[i.jsx("div",{className:"fixed inset-0 animate-dialog-overlay-show bg-black/50 backdrop-blur-sm",onClick:()=>{r?.(),l(!1)},"aria-hidden":!0}),i.jsx("div",{ref:p=>{d.current=p,typeof s=="function"?s(p):s&&(s.current=p)},role:"dialog","aria-modal":"true",className:xe("fixed left-1/2 top-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2","rounded-xl border bg-popover text-popover-foreground shadow-lg","animate-dialog-content-show",e),...a,children:t})]}),document.body):null});Fg.displayName="DialogContent";const zg=m.forwardRef(({className:e,...t},n)=>i.jsx("h2",{ref:n,className:xe("sr-only",e),...t}));zg.displayName="DialogTitle";const We=m.forwardRef(({className:e,type:t,...n},r)=>i.jsx("input",{type:t,className:xe("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...n}));We.displayName="Input";const Bg=m.forwardRef(({className:e,contentClassName:t,children:n,...r},a)=>i.jsx("div",{className:xe("relative overflow-hidden",e),...r,children:i.jsx("div",{ref:a,className:xe("h-full w-full overflow-auto rounded-[inherit]",t),style:{WebkitOverflowScrolling:"touch",touchAction:"pan-y"},children:n})}));Bg.displayName="ScrollArea";const qd=m.memo(({children:e,className:t,as:n="span"})=>i.jsx(n,{className:xe("animate-shimmer inline-block bg-[length:250%_100%] bg-clip-text text-transparent","bg-[linear-gradient(90deg,transparent_33%,hsl(var(--foreground))_50%,transparent_67%),linear-gradient(hsl(var(--muted-foreground)),hsl(var(--muted-foreground)))]",t),children:e}));qd.displayName="Shimmer";const yE=m.createContext(null),HM=()=>{const e=m.useContext(yE);if(!e)throw new Error("Reasoning components must be used within Reasoning");return e},GM=1e3,VM=1e3,rf=m.memo(({className:e,isStreaming:t=!1,open:n,defaultOpen:r,onOpenChange:a,duration:s,children:o,...l})=>{const c=r??t,d=r===!1,[u,p]=m.useState(c),f=n!==void 0,h=f?n:u,g=m.useCallback(C=>{f||p(C),a?.(C)},[f,a]),[b,x]=m.useState(s),v=m.useRef(t),[y,w]=m.useState(!1),k=m.useRef(null);m.useEffect(()=>{s!==void 0&&x(s)},[s]),m.useEffect(()=>{t?(v.current=!0,k.current===null&&(k.current=Date.now())):k.current!==null&&(x(Math.ceil((Date.now()-k.current)/VM)),k.current=null)},[t]),m.useEffect(()=>{t&&!h&&!d&&g(!0)},[t,h,g,d]),m.useEffect(()=>{if(v.current&&!t&&h&&!y){const C=setTimeout(()=>{g(!1),w(!0)},GM);return()=>clearTimeout(C)}},[t,h,g,y]);const S=m.useMemo(()=>({duration:b,isOpen:h,isStreaming:t,setIsOpen:g}),[b,h,t,g]);return i.jsx(yE.Provider,{value:S,children:i.jsx(fi,{open:h,onOpenChange:g,className:xe("not-prose",e),...l,children:o})})});rf.displayName="Reasoning";const WM=(e,t)=>e||t===0?i.jsx(qd,{children:"Thinking..."}):t===void 0?i.jsx("p",{children:"Thought for a few seconds"}):i.jsxs("p",{children:["Thought for ",t," seconds"]}),af=m.memo(({className:e,children:t,getThinkingMessage:n=WM,...r})=>{const{isStreaming:a,isOpen:s,duration:o}=HM();return i.jsx(Pa,{className:xe("flex w-full items-center gap-2 text-sm text-muted-foreground transition-colors hover:text-foreground",e),...r,children:t??i.jsxs(i.Fragment,{children:[i.jsx(DD,{className:"h-4 w-4"}),n(a,o),i.jsx(s4,{className:xe("h-4 w-4 transition-transform",s?"rotate-180":"rotate-0")})]})})});af.displayName="ReasoningTrigger";const sf=m.memo(({className:e,children:t,...n})=>i.jsx(gi,{className:xe("mt-4 text-sm text-muted-foreground",e),...n,children:t}));sf.displayName="ReasoningContent";function qM(e){switch(e){case"top":return"top-full left-1/2 transform -translate-x-1/2 border-t-gray-900 dark:border-t-gray-100";case"bottom":return"bottom-full left-1/2 transform -translate-x-1/2 border-b-gray-900 dark:border-b-gray-100";case"left":return"left-full top-1/2 transform -translate-y-1/2 border-l-gray-900 dark:border-l-gray-100";case"right":return"right-full top-1/2 transform -translate-y-1/2 border-r-gray-900 dark:border-r-gray-100";default:return"top-full left-1/2 transform -translate-x-1/2 border-t-gray-900 dark:border-t-gray-100"}}function of({children:e,content:t,position:n="top",className:r="",delay:a=350}){const[s,o]=m.useState(!1),l=m.useRef(null),c=m.useRef(!1),d=m.useRef(null),u=m.useRef(null),[p,f]=m.useState(null),h=m.useCallback(()=>{const w=d.current;if(!w)return;const k=w.getBoundingClientRect(),S=8,C={position:"fixed",zIndex:9999};switch(n){case"bottom":C.left=k.left+k.width/2,C.top=k.bottom+S,C.transform="translateX(-50%)";break;case"left":C.left=k.left-S,C.top=k.top+k.height/2,C.transform="translate(-100%, -50%)";break;case"right":C.left=k.right+S,C.top=k.top+k.height/2,C.transform="translateY(-50%)";break;case"top":default:C.left=k.left+k.width/2,C.top=k.top-S,C.transform="translate(-50%, -100%)";break}f(C)},[n]),g=()=>{l.current!==null&&(window.clearTimeout(l.current),l.current=null)},b=()=>{g(),l.current=window.setTimeout(()=>{o(!0)},a)},x=()=>{g(),o(!1)},v=()=>{g(),c.current=!1,l.current=window.setTimeout(()=>{c.current=!0,o(!0)},a)},y=()=>{g(),!c.current&&o(!1)};return m.useEffect(()=>()=>{g()},[]),m.useEffect(()=>{if(!s||typeof document>"u")return;const w=k=>{const S=k.target;S instanceof Node&&d.current?.contains(S)||(o(!1),c.current=!1)};return document.addEventListener("pointerdown",w,!0),()=>document.removeEventListener("pointerdown",w,!0)},[s]),m.useEffect(()=>{if(!s){f(null);return}const w=window.requestAnimationFrame(h),k=()=>h();return window.addEventListener("resize",k),window.addEventListener("scroll",k,!0),()=>{window.cancelAnimationFrame(w),window.removeEventListener("resize",k),window.removeEventListener("scroll",k,!0)}},[s,h]),t?i.jsxs("div",{ref:d,className:"relative inline-block",onMouseEnter:b,onMouseLeave:x,onTouchStart:v,onTouchEnd:y,onTouchCancel:y,children:[e,s&&typeof document<"u"&&Nu.createPortal(i.jsxs("div",{ref:u,style:p||{position:"fixed",top:"-9999px",left:"-9999px",opacity:0},className:xe("px-2 py-1 text-xs font-medium text-white bg-gray-900 dark:bg-gray-100 dark:text-gray-900 rounded shadow-lg whitespace-nowrap pointer-events-none","animate-in fade-in-0 zoom-in-95 duration-200",r),children:[t,i.jsx("div",{className:xe("absolute w-0 h-0 border-4 border-transparent",qM(n))})]}),document.body)]}):i.jsx(i.Fragment,{children:e})}const wE=m.createContext(null),kE=m.forwardRef(({className:e,status:t="ready",children:n,...r},a)=>{const s=m.useMemo(()=>({status:t}),[t]);return i.jsx(wE.Provider,{value:s,children:i.jsx("form",{ref:a,"data-slot":"prompt-input",className:xe("relative overflow-hidden rounded-xl border border-border/70 bg-zinc-50/95 shadow-sm shadow-zinc-950/5 backdrop-blur-sm transition-all duration-200 focus-within:border-primary/40 focus-within:shadow-md focus-within:ring-1 focus-within:ring-primary/20 dark:bg-zinc-950/90",e),...r,children:n})})});kE.displayName="PromptInput";const SE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"prompt-input-header",className:xe("px-3 pt-3",e),...t}));SE.displayName="PromptInputHeader";const CE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"prompt-input-body",className:xe("relative",e),...t}));CE.displayName="PromptInputBody";const NE=m.forwardRef(({className:e,...t},n)=>i.jsx("textarea",{ref:n,"data-slot":"prompt-input-textarea",className:xe("chat-input-placeholder block max-h-[40vh] w-full resize-none overflow-y-auto bg-transparent px-4 py-2 font-mono text-sm leading-6 text-foreground placeholder-muted-foreground/50 focus:outline-none sm:max-h-[300px]",e),...t}));NE.displayName="PromptInputTextarea";const EE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"prompt-input-footer",className:xe("flex items-center justify-between border-t border-border/30 px-3 py-2",e),...t}));EE.displayName="PromptInputFooter";const TE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"prompt-input-tools",className:xe("flex items-center gap-1",e),...t}));TE.displayName="PromptInputTools";const kd=m.forwardRef(({className:e,tooltip:t,children:n,...r},a)=>{const s=i.jsx(Te,{ref:a,type:"button",variant:"ghost",size:"icon",className:xe("h-8 w-8 [&_svg]:size-4",e),...r,children:n});return t?i.jsx(of,{content:t.shortcut?i.jsxs("span",{className:"flex items-center gap-1.5",children:[t.content,i.jsx("kbd",{className:"rounded bg-white/20 px-1 text-[10px]",children:t.shortcut})]}):t.content,position:t.side??"top",children:s}):s});kd.displayName="PromptInputButton";const AE=m.forwardRef(({className:e,status:t,children:n,...r},a)=>{const s=m.useContext(wE),o=t??s?.status??"ready",l=o==="submitted"||o==="streaming";return i.jsx(Te,{ref:a,type:l?"button":"submit",variant:"default",size:"icon",className:xe("h-8 w-8 rounded-lg",e),...r,children:n??(l?i.jsx(Iu,{className:"h-3.5 w-3.5 fill-current"}):i.jsx(vD,{className:"h-4 w-4"}))})});AE.displayName="PromptInputSubmit";function Fu({children:e,className:t}){return i.jsx("div",{className:xe("inline-flex items-center gap-[2px] rounded-lg bg-muted/60 p-[3px]",t),children:e})}function zu({isActive:e,onClick:t,children:n,className:r}){return i.jsx("button",{onClick:t,className:xe("flex touch-manipulation items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-all duration-150",e?"bg-background text-foreground shadow-sm":"text-muted-foreground active:bg-background/50",r),children:n})}const jE=m.createContext(null);function RE(){const e=m.useContext(jE);if(!e)throw new Error("QueueItem sub-components must be used within <QueueItem>");return e}const IE=m.forwardRef(({className:e,...t},n)=>i.jsx("div",{ref:n,"data-slot":"queue",role:"list",className:xe("space-y-0.5",e),...t}));IE.displayName="Queue";const _E=m.forwardRef(({status:e="pending",className:t,children:n,...r},a)=>{const s=m.useMemo(()=>({status:e}),[e]);return i.jsx(jE.Provider,{value:s,children:i.jsx("div",{ref:a,"data-slot":"queue-item","data-status":e,role:"listitem",className:xe("flex items-start gap-2 py-0.5",t),...r,children:n})})});_E.displayName="QueueItem";const LE=m.forwardRef(({className:e,...t},n)=>{const{status:r}=RE();return i.jsxs("div",{ref:n,"data-slot":"queue-item-indicator","aria-hidden":"true",className:xe("mt-0.5 flex h-3.5 w-3.5 flex-shrink-0 items-center justify-center",e),...t,children:[r==="completed"&&i.jsx("svg",{className:"h-3.5 w-3.5 text-green-500 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"})}),r==="in_progress"&&i.jsx("span",{className:"h-2 w-2 animate-pulse rounded-full bg-blue-500 dark:bg-blue-400"}),r==="pending"&&i.jsx("svg",{className:"h-3.5 w-3.5 text-muted-foreground/50",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("circle",{cx:"12",cy:"12",r:"9",strokeWidth:2})})]})});LE.displayName="QueueItemIndicator";const PE=m.forwardRef(({className:e,children:t,...n},r)=>{const{status:a}=RE();return i.jsx("div",{ref:r,"data-slot":"queue-item-content",className:xe("min-w-0 flex-1 text-xs",a==="completed"&&"text-muted-foreground line-through",a==="in_progress"&&"font-medium text-foreground",a==="pending"&&"text-foreground",e),...n,children:t})});PE.displayName="QueueItemContent";const hk="https://github.com/alicomert/pixcode/issues/new",KM="https://github.com/alicomert/pixcode",fk="https://discord.gg/buxwujPNRE";function gk({className:e}){return i.jsx("svg",{className:e,fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:i.jsx("path",{d:"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"})})}function YM({updateAvailable:e,releaseInfo:t,latestVersion:n,currentVersion:r,onShowVersionModal:a,onOpenControlRoom:s,onShowSettings:o,t:l}){return i.jsxs("div",{className:"flex-shrink-0",style:{paddingBottom:"env(safe-area-inset-bottom, 0)"},children:[e&&i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"nav-divider"}),i.jsx("div",{className:"hidden px-2 py-1.5 md:block",children:i.jsxs("button",{className:"group flex w-full items-center gap-2.5 rounded-lg px-2.5 py-2 text-left transition-colors hover:bg-blue-50/80 dark:hover:bg-blue-900/15",onClick:a,children:[i.jsxs("div",{className:"relative flex-shrink-0",children:[i.jsx(Gw,{className:"h-4 w-4 text-blue-500 dark:text-blue-400"}),i.jsx("span",{className:"absolute -right-0.5 -top-0.5 h-1.5 w-1.5 animate-pulse rounded-full bg-blue-500"})]}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("span",{className:"block truncate text-sm font-medium text-blue-600 dark:text-blue-300",children:t?.title||`v${n}`}),i.jsx("span",{className:"text-[10px] text-blue-500/70 dark:text-blue-400/60",children:l("version.updateAvailable")})]})]})}),i.jsx("div",{className:"px-3 py-2 md:hidden",children:i.jsxs("button",{className:"flex h-11 w-full items-center gap-3 rounded-xl border border-blue-200/60 bg-blue-50/80 px-3.5 transition-all active:scale-[0.98] dark:border-blue-700/40 dark:bg-blue-900/15",onClick:a,children:[i.jsxs("div",{className:"relative flex-shrink-0",children:[i.jsx(Gw,{className:"w-4.5 h-4.5 text-blue-500 dark:text-blue-400"}),i.jsx("span",{className:"absolute -right-0.5 -top-0.5 h-1.5 w-1.5 animate-pulse rounded-full bg-blue-500"})]}),i.jsxs("div",{className:"min-w-0 flex-1 text-left",children:[i.jsx("span",{className:"block truncate text-sm font-medium text-blue-600 dark:text-blue-300",children:t?.title||`v${n}`}),i.jsx("span",{className:"text-xs text-blue-500/70 dark:text-blue-400/60",children:l("version.updateAvailable")})]})]})})]}),i.jsx("div",{className:"nav-divider"}),i.jsx("div",{className:"hidden px-2 pt-1.5 md:block",children:i.jsxs("a",{href:hk,target:"_blank",rel:"noopener noreferrer",className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-muted-foreground transition-colors hover:bg-accent/60 hover:text-foreground",children:[i.jsx(Bl,{className:"h-3.5 w-3.5"}),i.jsx("span",{className:"text-sm",children:l("actions.reportIssue")})]})}),i.jsx("div",{className:"hidden px-2 md:block",children:i.jsxs("a",{href:fk,target:"_blank",rel:"noopener noreferrer",className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-muted-foreground transition-colors hover:bg-accent/60 hover:text-foreground",children:[i.jsx(gk,{className:"h-3.5 w-3.5"}),i.jsx("span",{className:"text-sm",children:l("actions.joinCommunity")})]})}),s&&i.jsx("div",{className:"hidden px-2 pt-1.5 md:block",children:i.jsxs("button",{className:"group flex w-full items-center gap-2.5 rounded-lg border border-primary/25 bg-primary/5 px-2.5 py-2 text-left transition-colors hover:bg-primary/10",onClick:s,children:[i.jsx("div",{className:"flex h-7 w-7 items-center justify-center rounded-md bg-primary/10 text-primary",children:i.jsx(Fr,{className:"h-3.5 w-3.5"})}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("span",{className:"block truncate text-sm font-semibold text-foreground",children:l("actions.controlRoom",{defaultValue:"Control Room"})}),i.jsx("span",{className:"block truncate text-[10px] text-muted-foreground",children:l("actions.controlRoomDescription",{defaultValue:"Admin, access, runs"})})]})]})}),i.jsx("div",{className:"hidden px-2 py-1.5 md:block",children:i.jsxs("button",{className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-muted-foreground transition-colors hover:bg-accent/60 hover:text-foreground",onClick:o,children:[i.jsx(Dt,{className:"h-3.5 w-3.5"}),i.jsx("span",{className:"text-sm",children:l("actions.settings")})]})}),i.jsx("div",{className:"hidden px-3 py-2 text-center md:block",children:i.jsxs("a",{href:KM,target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-muted-foreground/40 transition-colors hover:text-muted-foreground",children:["Pixcode v",r," – ",l("branding.openSource")]})}),i.jsx("div",{className:"px-3 pt-3 md:hidden",children:i.jsxs("a",{href:hk,target:"_blank",rel:"noopener noreferrer",className:"flex h-12 w-full items-center gap-3.5 rounded-xl bg-muted/40 px-4 transition-all hover:bg-muted/60 active:scale-[0.98]",children:[i.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-xl bg-background/80",children:i.jsx(Bl,{className:"w-4.5 h-4.5 text-muted-foreground"})}),i.jsx("span",{className:"text-base font-medium text-foreground",children:l("actions.reportIssue")})]})}),i.jsx("div",{className:"px-3 pt-2 md:hidden",children:i.jsxs("a",{href:fk,target:"_blank",rel:"noopener noreferrer",className:"flex h-12 w-full items-center gap-3.5 rounded-xl bg-muted/40 px-4 transition-all hover:bg-muted/60 active:scale-[0.98]",children:[i.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-xl bg-background/80",children:i.jsx(gk,{className:"w-4.5 h-4.5 text-muted-foreground"})}),i.jsx("span",{className:"text-base font-medium text-foreground",children:l("actions.joinCommunity")})]})}),s&&i.jsx("div",{className:"px-3 pt-2 md:hidden",children:i.jsxs("button",{className:"flex h-14 w-full items-center gap-3.5 rounded-xl border border-primary/25 bg-primary/10 px-4 transition-all hover:bg-primary/15 active:scale-[0.98]",onClick:s,children:[i.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-xl bg-primary/15",children:i.jsx(Fr,{className:"w-4.5 h-4.5 text-primary"})}),i.jsxs("div",{className:"min-w-0 flex-1 text-left",children:[i.jsx("span",{className:"block truncate text-base font-semibold text-foreground",children:l("actions.controlRoom",{defaultValue:"Control Room"})}),i.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:l("actions.controlRoomDescription",{defaultValue:"Admin, access, runs"})})]})]})}),i.jsx("div",{className:"px-3 pb-3 pt-2 md:hidden",children:i.jsxs("button",{className:"flex h-12 w-full items-center gap-3.5 rounded-xl bg-muted/40 px-4 transition-all hover:bg-muted/60 active:scale-[0.98]",onClick:o,children:[i.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-xl bg-background/80",children:i.jsx(Dt,{className:"w-4.5 h-4.5 text-muted-foreground"})}),i.jsx("span",{className:"text-base font-medium text-foreground",children:l("actions.settings")})]})})]})}const bk="PIXCODE_GITHUB_STARS",xk="PIXCODE_HIDE_GITHUB_STAR",ZM=3600*1e3,XM=(e,t)=>{const[n,r]=m.useState(null),[a,s]=m.useState(()=>{try{return localStorage.getItem(xk)==="true"}catch{return!1}});m.useEffect(()=>{if(a)return;try{const d=localStorage.getItem(bk);if(d){const u=JSON.parse(d);if(Date.now()-u.timestamp<ZM){r(u.count);return}}}catch{}(async()=>{try{const d=await fetch(`https://api.github.com/repos/${e}/${t}`);if(!d.ok)return;const p=(await d.json()).stargazers_count;if(typeof p=="number"){r(p);try{localStorage.setItem(bk,JSON.stringify({count:p,timestamp:Date.now()}))}catch{}}}catch{}})()},[e,t,a]);const o=m.useCallback(()=>{s(!0);try{localStorage.setItem(xk,"true")}catch{}},[]),l=n!==null?n>=1e3?`${(n/1e3).toFixed(1)}k`:`${n}`:null;return{starCount:n,formattedCount:l,isDismissed:a,dismiss:o}},JM="https://github.com/alicomert/pixcode";function QM({className:e}){return i.jsx("svg",{className:e,fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:i.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})})}function e9(){const{formattedCount:e,isDismissed:t,dismiss:n}=XM("alicomert","pixcode");return t?null:i.jsxs("div",{className:"group/star relative hidden md:block",children:[i.jsxs("a",{href:JM,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1.5 rounded-lg border border-border/50 bg-muted/30 px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground",children:[i.jsx(QM,{className:"h-3.5 w-3.5"}),i.jsx(ui,{className:"h-3 w-3"}),i.jsx("span",{className:"font-medium",children:"Star"}),e&&i.jsx("span",{className:"border-l border-border/50 pl-1.5 tabular-nums",children:e})]}),i.jsx("button",{onClick:r=>{r.preventDefault(),r.stopPropagation(),n()},className:"absolute -right-1.5 -top-1.5 hidden h-4 w-4 items-center justify-center rounded-full border border-border/50 bg-muted text-muted-foreground transition-colors hover:text-foreground group-hover/star:flex","aria-label":"Dismiss",children:i.jsx(St,{className:"h-2.5 w-2.5"})})]})}function vk({value:e,onChange:t,t:n}){const r="flex flex-1 items-center justify-center gap-1 rounded-md px-2 py-1 text-[11px] font-medium transition-all";return i.jsxs("div",{role:"tablist","aria-label":n("tooltips.historyView",{defaultValue:"History view"}),className:"flex rounded-lg bg-muted/40 p-0.5",children:[i.jsxs("button",{type:"button",role:"tab","aria-selected":e==="flat",onClick:()=>t("flat"),className:xe(r,e==="flat"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),title:n("tooltips.historyViewFlat",{defaultValue:"Recent conversations"}),children:[i.jsx(v4,{className:"h-3 w-3"}),n("historyView.flat",{defaultValue:"Recent"})]}),i.jsxs("button",{type:"button",role:"tab","aria-selected":e==="grouped",onClick:()=>t("grouped"),className:xe(r,e==="grouped"?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),title:n("tooltips.historyViewGrouped",{defaultValue:"Grouped by project"}),children:[i.jsx(SD,{className:"h-3 w-3"}),n("historyView.grouped",{defaultValue:"By project"})]})]})}function t9({isPWA:e,isMobile:t,isLoading:n,projectsCount:r,searchFilter:a,onSearchFilterChange:s,onClearSearchFilter:o,searchMode:l,onSearchModeChange:c,onRefresh:d,isRefreshing:u,onCreateProject:p,onQuickStartSession:f,onCollapseSidebar:h,historyView:g,onHistoryViewChange:b,t:x}){const v=()=>i.jsxs("div",{className:"flex min-w-0 items-center gap-2.5",children:[i.jsx("svg",{className:"h-6 w-6 flex-shrink-0",viewBox:"0 0 500 500","aria-hidden":"true",children:i.jsx("g",{transform:"translate(250 250) scale(1.25) translate(-250 -250)",children:i.jsxs("g",{transform:"translate(0 500) scale(0.1 -0.1)",fill:"#5C3FFC",children:[i.jsx("path",{d:"M2037 3800 c-104 -40 -191 -134 -231 -250 -23 -67 -20 -82 22 -109 31 -20 287 -177 1009 -618 40 -24 82 -56 93 -70 27 -34 27 -102 0 -136 -11 -13 -106 -78 -212 -143 -106 -64 -201 -124 -210 -132 -16 -14 -18 -41 -18 -302 0 -291 2 -310 38 -310 16 0 267 148 610 359 180 111 270 173 310 213 216 217 215 574 -3 793 -37 38 -107 89 -185 136 -69 42 -253 154 -410 249 -434 264 -509 307 -563 326 -57 20 -191 17 -250 -6z"}),i.jsx("path",{d:"M1803 2994 c-10 -5 -13 -156 -13 -709 0 -671 1 -706 20 -767 27 -89 93 -184 167 -240 89 -67 157 -90 281 -96 92 -4 105 -2 117 14 12 16 14 134 15 735 0 669 -1 718 -17 737 -20 23 -514 322 -541 327 -9 2 -23 2 -29 -1z"})]})})}),i.jsx("h1",{className:"truncate text-sm font-semibold tracking-tight text-foreground",children:x("app.title")})]});return i.jsxs("div",{className:"flex-shrink-0",children:[i.jsxs("div",{className:"hidden px-4 pb-3 pt-4 md:block",style:{},children:[i.jsxs("div",{className:"flex items-center justify-between gap-2",children:[i.jsx(v,{}),i.jsxs("div",{className:"flex flex-shrink-0 items-center gap-0.5",children:[i.jsx(Te,{variant:"ghost",size:"sm",className:"h-8 w-8 rounded-lg p-0 text-muted-foreground hover:bg-accent/80 hover:text-foreground",onClick:d,disabled:u,title:x("tooltips.refresh"),children:i.jsx(at,{className:`h-4 w-4 ${u?"animate-spin":""}`})}),i.jsx(Te,{variant:"ghost",size:"sm",className:"h-8 w-8 rounded-lg p-0 text-muted-foreground hover:bg-accent/80 hover:text-foreground",onClick:p,title:x("tooltips.createProject"),children:i.jsx(Vt,{className:"h-4 w-4"})}),i.jsx(Te,{variant:"ghost",size:"sm",className:"h-8 w-8 rounded-lg p-0 text-muted-foreground hover:bg-accent/80 hover:text-foreground",onClick:h,title:x("tooltips.hideSidebar"),children:i.jsx(Au,{className:"h-4 w-4"})})]})]}),i.jsx(e9,{}),f&&i.jsxs("button",{type:"button",onClick:()=>{f()},className:"mt-2.5 flex w-full items-center justify-center gap-2 rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-sm font-medium text-primary transition-colors hover:bg-primary/10",children:[i.jsx(Fr,{className:"h-4 w-4"}),x("sidebar.newChat",{defaultValue:"New chat"})]}),r>0&&!n&&i.jsxs("div",{className:"mt-2.5 space-y-2",children:[i.jsx(vk,{value:g,onChange:b,t:x}),i.jsxs("div",{className:"flex rounded-lg bg-muted/50 p-0.5",children:[i.jsxs("button",{onClick:()=>c("projects"),"aria-pressed":l==="projects",className:xe("flex-1 flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-all",l==="projects"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Fn,{className:"h-3 w-3"}),x("search.modeProjects")]}),i.jsxs("button",{onClick:()=>c("conversations"),"aria-pressed":l==="conversations",className:xe("flex-1 flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-all",l==="conversations"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Er,{className:"h-3 w-3"}),x("search.modeConversations")]})]}),i.jsxs("div",{className:"relative",children:[i.jsx(as,{className:"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground/50"}),i.jsx(We,{type:"text",placeholder:x(l==="conversations"?"search.conversationsPlaceholder":"projects.searchPlaceholder"),value:a,onChange:y=>s(y.target.value),className:"nav-search-input h-9 rounded-xl border-0 pl-9 pr-8 text-sm transition-all duration-200 placeholder:text-muted-foreground/40 focus-visible:ring-0 focus-visible:ring-offset-0"}),a&&i.jsx("button",{onClick:o,"aria-label":x("tooltips.clearSearch"),className:"absolute right-2.5 top-1/2 -translate-y-1/2 rounded-md p-0.5 hover:bg-accent",children:i.jsx(St,{className:"h-3 w-3 text-muted-foreground"})})]})]})]}),i.jsx("div",{className:"nav-divider hidden md:block"}),i.jsxs("div",{className:"p-3 pb-2 md:hidden",style:e&&t?{paddingTop:"16px"}:{},children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx(v,{}),i.jsxs("div",{className:"flex flex-shrink-0 gap-1.5",children:[i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-muted/50 transition-all active:scale-95",onClick:d,disabled:u,children:i.jsx(at,{className:`h-4 w-4 text-muted-foreground ${u?"animate-spin":""}`})}),i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-primary/90 text-primary-foreground transition-all active:scale-95",onClick:p,children:i.jsx(hi,{className:"h-4 w-4"})})]})]}),r>0&&!n&&i.jsxs("div",{className:"mt-2.5 space-y-2",children:[l==="projects"&&i.jsx(vk,{value:g,onChange:b,t:x}),i.jsxs("div",{className:"flex rounded-lg bg-muted/50 p-0.5",children:[i.jsxs("button",{onClick:()=>c("projects"),"aria-pressed":l==="projects",className:xe("flex-1 flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-all",l==="projects"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Fn,{className:"h-3 w-3"}),x("search.modeProjects")]}),i.jsxs("button",{onClick:()=>c("conversations"),"aria-pressed":l==="conversations",className:xe("flex-1 flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-all",l==="conversations"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Er,{className:"h-3 w-3"}),x("search.modeConversations")]})]}),i.jsxs("div",{className:"relative",children:[i.jsx(as,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground/50"}),i.jsx(We,{type:"text",placeholder:x(l==="conversations"?"search.conversationsPlaceholder":"projects.searchPlaceholder"),value:a,onChange:y=>s(y.target.value),className:"nav-search-input h-10 rounded-xl border-0 pl-10 pr-9 text-sm transition-all duration-200 placeholder:text-muted-foreground/40 focus-visible:ring-0 focus-visible:ring-offset-0"}),a&&i.jsx("button",{onClick:o,"aria-label":x("tooltips.clearSearch"),className:"absolute right-2.5 top-1/2 -translate-y-1/2 rounded-md p-1 hover:bg-accent",children:i.jsx(St,{className:"h-3.5 w-3.5 text-muted-foreground"})})]})]})]}),i.jsx("div",{className:"nav-divider md:hidden"})]})}const n9=160,yk=180;function DE({actions:e,className:t,triggerLabel:n}){const[r,a]=m.useState(!1),[s,o]=m.useState(null),l=m.useRef(null),c=m.useRef(null);m.useLayoutEffect(()=>{if(!r||!l.current)return;const u=l.current.getBoundingClientRect();let p=u.right-n9;p<8&&(p=8);let f=u.bottom+4;f+yk>window.innerHeight&&(f=Math.max(8,u.top-4-yk)),o({top:f,left:p})},[r]),m.useEffect(()=>{if(!r)return;const u=h=>{const g=h.target;l.current?.contains(g)||c.current?.contains(g)||a(!1)},p=h=>{h.key==="Escape"&&a(!1)},f=()=>a(!1);return document.addEventListener("mousedown",u),document.addEventListener("keydown",p),window.addEventListener("scroll",f,!0),window.addEventListener("resize",f),()=>{document.removeEventListener("mousedown",u),document.removeEventListener("keydown",p),window.removeEventListener("scroll",f,!0),window.removeEventListener("resize",f)}},[r]);const d=u=>p=>{p.stopPropagation(),p.preventDefault(),a(!1),u.onClick()};return i.jsxs(i.Fragment,{children:[i.jsx("button",{ref:l,type:"button","aria-haspopup":"menu","aria-expanded":r,"aria-label":n||"Actions",title:n||"Actions",onClick:u=>{u.stopPropagation(),u.preventDefault(),a(p=>!p)},className:xe("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground","opacity-0 transition-all duration-150 hover:bg-accent hover:text-foreground","group-hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary","touch:opacity-100",r&&"bg-accent text-foreground opacity-100",t),children:i.jsx(k4,{className:"h-3.5 w-3.5"})}),r&&s&&Nu.createPortal(i.jsx("div",{ref:c,role:"menu",style:{position:"fixed",top:s.top,left:s.left,zIndex:9999},className:xe("w-40 rounded-xl border border-border/60 bg-popover p-1 shadow-lg","animate-in fade-in-0 zoom-in-95 duration-100"),onClick:u=>u.stopPropagation(),onMouseDown:u=>u.stopPropagation(),children:e.map((u,p)=>{const f=u.icon,h=e[p-1],g=p>0&&u.danger&&!h?.danger;return i.jsxs("div",{children:[g&&i.jsx("div",{className:"my-1 h-px bg-border/60"}),i.jsxs("button",{type:"button",role:"menuitem",onClick:d(u),className:xe("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs",u.danger?"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20":"text-foreground hover:bg-accent"),children:[i.jsx(f,{className:"h-3 w-3"}),u.label]})]},u.id)})}),document.body)]})}const r9=(e,t,n)=>{const r=new Date(e),a=t;if(isNaN(r.getTime()))return n?n("status.unknown"):"Unknown";const s=a.getTime()-r.getTime(),o=Math.floor(s/1e3),l=Math.floor(s/(1e3*60)),c=Math.floor(s/(1e3*60*60)),d=Math.floor(s/(1e3*60*60*24));return o<60?n?n("time.justNow"):"Just now":l===1?n?n("time.oneMinuteAgo"):"1 min ago":l<60?n?n("time.minutesAgo",{count:l}):`${l} mins ago`:c===1?n?n("time.oneHourAgo"):"1 hour ago":c<24?n?n("time.hoursAgo",{count:c}):`${c} hours ago`:d===1?n?n("time.oneDayAgo"):"1 day ago":d<7?n?n("time.daysAgo",{count:d}):`${d} days ago`:r.toLocaleDateString()};function wk({isStarred:e,canDelete:t,onRename:n,onToggleStar:r,onDelete:a,t:s,className:o}){const l=d=>i.jsx(ui,{className:`${d.className??""} ${e?"fill-yellow-400 text-yellow-500":""}`}),c=[{id:"rename",label:s("actions.rename"),icon:y4,onClick:n},{id:"star",label:e?s("actions.unstarSession",{defaultValue:"Remove star"}):s("actions.starSession",{defaultValue:"Star"}),icon:l,onClick:r}];return t&&c.push({id:"delete",label:s("actions.delete"),icon:Rn,onClick:a,danger:!0}),i.jsx(DE,{actions:c,className:o,triggerLabel:s("tooltips.sessionActions",{defaultValue:"Session actions"})})}const a9={claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},kk={claude:"bg-orange-500/10 text-orange-600 dark:bg-orange-400/10 dark:text-orange-300 ring-1 ring-orange-500/15",cursor:"bg-sky-500/10 text-sky-600 dark:bg-sky-400/10 dark:text-sky-300 ring-1 ring-sky-500/15",codex:"bg-violet-500/10 text-violet-600 dark:bg-violet-400/10 dark:text-violet-300 ring-1 ring-violet-500/15",gemini:"bg-emerald-500/10 text-emerald-600 dark:bg-emerald-400/10 dark:text-emerald-300 ring-1 ring-emerald-500/15",qwen:"bg-amber-500/10 text-amber-600 dark:bg-amber-400/10 dark:text-amber-300 ring-1 ring-amber-500/15",opencode:"bg-teal-500/10 text-teal-600 dark:bg-teal-400/10 dark:text-teal-300 ring-1 ring-teal-500/15"};function OE({project:e,session:t,selectedSession:n,currentTime:r,editingSession:a,editingSessionName:s,isStarred:o,compact:l=!1,onEditingSessionNameChange:c,onStartEditingSession:d,onCancelEditingSession:u,onSaveEditingSession:p,onToggleStarSession:f,onProjectSelect:h,onSessionSelect:g,onDeleteSession:b,t:x}){const v=GO(t,r,x),y=n?.id===t.id,w=a===t.id,k=t.__provider,S=a9[k]??k,C=kk[k]??kk.claude,A=UO(v.sessionName),R=()=>{h(e),g(t,e.name)},j=()=>{p(e.name,t.id,s,k)},E=()=>{b(e.name,t.id,v.sessionName,k)},L=()=>d(t.id,v.sessionName),T=()=>f(e.name,t.id),I=i.jsxs("div",{className:"mt-0.5 flex min-w-0 flex-wrap items-center gap-1 text-[10px] leading-tight",children:[i.jsxs("span",{className:xe("inline-flex items-center gap-1 rounded-full px-1.5 py-px font-medium",C),children:[i.jsx(nn,{provider:k,className:"h-2.5 w-2.5"}),S]}),i.jsx("span",{className:"text-muted-foreground/80",children:r9(v.sessionTime,r,x)}),v.isActive&&i.jsxs("span",{className:"inline-flex items-center gap-1 text-green-600 dark:text-green-400",children:[i.jsx("span",{className:"h-1.5 w-1.5 animate-pulse rounded-full bg-green-500"}),x("status.active",{defaultValue:"Active"})]}),A.slice(0,3).map(F=>i.jsxs("span",{className:"rounded-md bg-muted/60 px-1 py-px font-mono text-[9px] uppercase tracking-wide text-muted-foreground ring-1 ring-border/40",children:[".",F]},F))]}),N=i.jsxs(i.Fragment,{children:[i.jsx("input",{type:"text",value:s,onChange:F=>c(F.target.value),onKeyDown:F=>{F.stopPropagation(),F.key==="Enter"?j():F.key==="Escape"&&u()},onClick:F=>F.stopPropagation(),className:"w-full rounded-md border border-primary/40 bg-background px-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-primary",autoFocus:!0}),i.jsx("button",{className:"flex h-6 w-6 items-center justify-center rounded-md bg-green-50 hover:bg-green-100 dark:bg-green-900/20 dark:hover:bg-green-900/40",onClick:F=>{F.stopPropagation(),j()},title:x("tooltips.save"),children:i.jsx(qt,{className:"h-3 w-3 text-green-600 dark:text-green-400"})}),i.jsx("button",{className:"flex h-6 w-6 items-center justify-center rounded-md bg-gray-50 hover:bg-gray-100 dark:bg-gray-900/20 dark:hover:bg-gray-900/40",onClick:F=>{F.stopPropagation(),u()},title:x("tooltips.cancel"),children:i.jsx(St,{className:"h-3 w-3 text-gray-600 dark:text-gray-400"})})]}),O=i.jsx("div",{className:"md:hidden",children:i.jsx("div",{className:xe("relative mx-3 my-0.5 rounded-lg border border-border/30 bg-card p-2 transition-all duration-150 active:scale-[0.98]",y&&"border-primary/30 bg-primary/5 shadow-sm",!y&&v.isActive&&"border-green-500/25 bg-green-50/5 dark:bg-green-900/5",o&&!y&&"ring-1 ring-yellow-300/50 dark:ring-yellow-500/30"),onClick:w?void 0:R,children:w?i.jsx("div",{className:"flex items-center gap-1",children:N}):i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:xe("flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-md",y?"bg-primary/10":"bg-muted/60"),children:i.jsx(nn,{provider:k,className:"h-3 w-3"})}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsxs("div",{className:"flex items-center gap-1",children:[o&&i.jsx("span",{className:"text-yellow-500","aria-hidden":!0,children:"★"}),i.jsx("span",{className:"truncate text-xs font-medium text-foreground",children:v.sessionName})]}),I]}),i.jsx("div",{className:"flex-shrink-0",onClick:F=>F.stopPropagation(),children:i.jsx(wk,{isStarred:o,canDelete:!v.isCursorSession,onRename:L,onToggleStar:T,onDelete:E,t:x,className:"!opacity-100"})})]})})}),$=i.jsxs("div",{className:xe("group/item relative hidden md:block"),children:[i.jsxs(Te,{variant:"ghost",className:xe("relative h-auto w-full justify-start overflow-hidden p-0 text-left font-normal transition-colors duration-150","hover:bg-accent/60",y&&"bg-accent text-accent-foreground",o&&!y&&"bg-yellow-50/40 hover:bg-yellow-100/40 dark:bg-yellow-900/10 dark:hover:bg-yellow-900/20",l?"rounded-xl px-3 py-2.5":"rounded-lg px-3 py-2"),onClick:w?void 0:()=>g(t,e.name),children:[y&&i.jsx("span",{"aria-hidden":!0,className:"absolute left-0 top-1/2 h-5 w-0.5 -translate-y-1/2 rounded-r bg-primary"}),!y&&!w&&i.jsx("span",{"aria-hidden":!0,className:"session-item-accent"}),i.jsxs("div",{className:"flex w-full min-w-0 items-start gap-2 pr-6",children:[i.jsx("div",{className:xe("mt-0.5 flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-md",y?"bg-primary/10":"bg-muted/50 group-hover/item:bg-muted/80"),children:i.jsx(nn,{provider:k,className:"h-3 w-3"})}),i.jsx("div",{className:"min-w-0 flex-1",children:w?i.jsx("div",{className:"flex items-center gap-1",children:N}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-1",children:[o&&i.jsx("span",{className:"flex-shrink-0 text-yellow-500","aria-hidden":!0,children:"★"}),i.jsx("span",{className:"truncate text-xs font-medium text-foreground",children:v.sessionName})]}),I]})})]})]}),!w&&i.jsx("div",{className:"absolute right-1.5 top-1/2 -translate-y-1/2",onClick:F=>F.stopPropagation(),children:i.jsx(wk,{isStarred:o,canDelete:!v.isCursorSession,onRename:L,onToggleStar:T,onDelete:E,t:x,className:"opacity-0 focus-visible:opacity-100 group-hover/item:opacity-100"})})]});return i.jsxs("div",{className:"group relative",children:[O,$]})}const i9=e=>e==="claude-code"?"claude":e==="codex"?"codex":e==="gemini"?"gemini":e==="qwen"?"qwen":e==="opencode"?"opencode":null;function s9(){return i.jsx(i.Fragment,{children:Array.from({length:3}).map((e,t)=>i.jsx("div",{className:"rounded-md p-2",children:i.jsxs("div",{className:"flex items-start gap-2",children:[i.jsx("div",{className:"mt-0.5 h-3 w-3 animate-pulse rounded-full bg-muted"}),i.jsxs("div",{className:"flex-1 space-y-1",children:[i.jsx("div",{className:"h-3 animate-pulse rounded bg-muted",style:{width:`${60+t*15}%`}}),i.jsx("div",{className:"h-2 w-1/2 animate-pulse rounded bg-muted"})]})]})},t))})}function o9({project:e,isExpanded:t,sessions:n,selectedSession:r,initialSessionsLoaded:a,isLoadingSessions:s,currentTime:o,editingSession:l,editingSessionName:c,isSessionStarred:d,onEditingSessionNameChange:u,onStartEditingSession:p,onCancelEditingSession:f,onSaveEditingSession:h,onToggleStarSession:g,onProjectSelect:b,onSessionSelect:x,onDeleteSession:v,onLoadMoreSessions:y,onNewSession:w,onOpenOrchestration:k,t:S}){const[C,A]=m.useState([]);if(m.useEffect(()=>{if(!t)return;let E=!1;const L=async()=>{const I=await Ne(`/api/orchestration/workflows/runs?projectId=${encodeURIComponent(e.name)}`);if(!I.ok)return;const N=await I.json();E||A((N.runs??[]).slice(0,5))};L();const T=window.setInterval(()=>{L()},15e3);return()=>{E=!0,window.clearInterval(T)}},[t,e.name]),!t)return null;const R=n.length>0,j=e.sessionMeta?.hasMore===!0;return i.jsxs("div",{className:"ml-3 space-y-1 border-l border-border pl-3",children:[i.jsx("div",{className:"px-3 pb-1 pt-1 md:hidden",children:i.jsxs("button",{className:"flex h-8 w-full items-center justify-center gap-2 rounded-md bg-primary text-xs font-medium text-primary-foreground transition-all duration-150 hover:bg-primary/90 active:scale-[0.98]",onClick:()=>{b(e),w(e)},children:[i.jsx(Vt,{className:"h-3 w-3"}),S("sessions.newSession")]})}),i.jsxs(Te,{variant:"default",size:"sm",className:"hidden h-8 w-full justify-start gap-2 bg-primary text-xs font-medium text-primary-foreground transition-colors hover:bg-primary/90 md:flex",onClick:()=>w(e),children:[i.jsx(Vt,{className:"h-3 w-3"}),S("sessions.newSession")]}),C.length>0&&i.jsxs("div",{className:"space-y-1",children:[i.jsxs("div",{className:"flex items-center gap-1 px-3 pt-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:[i.jsx(Tr,{className:"h-3 w-3"}),S("orchestration.section")]}),C.map(E=>{const L=[...new Set(E.nodeRuns.map(T=>i9(T.adapterId)).filter(Boolean))];return i.jsx("button",{type:"button",onClick:()=>k?.(e,E.id),className:"w-full rounded-lg px-3 py-2 text-left transition-colors hover:bg-accent/60",children:i.jsxs("div",{className:"flex min-w-0 items-start gap-2",children:[i.jsx(Tr,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-primary"}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("div",{className:"truncate text-xs font-medium text-foreground",children:E.input||S("orchestration.fallbackTitle")}),i.jsxs("div",{className:"mt-1 flex items-center gap-1",children:[L.slice(0,4).map(T=>i.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded bg-muted",children:i.jsx(nn,{provider:T,className:"h-3 w-3"})},T)),i.jsx("span",{className:"text-[10px] text-muted-foreground",children:S(`common:orchestration.status.${E.status}`,{defaultValue:E.status})})]})]})]})},E.id)})]}),a?!R&&!s?i.jsx("div",{className:"px-3 py-2 text-left",children:i.jsx("p",{className:"text-xs text-muted-foreground",children:S("sessions.noSessions")})}):n.map(E=>i.jsx(OE,{project:e,session:E,selectedSession:r,currentTime:o,editingSession:l,editingSessionName:c,isStarred:d(e.name,E.id),onEditingSessionNameChange:u,onStartEditingSession:p,onCancelEditingSession:f,onSaveEditingSession:h,onToggleStarSession:g,onProjectSelect:b,onSessionSelect:x,onDeleteSession:v,t:S},E.id)):i.jsx(s9,{}),R&&j&&i.jsx(Te,{variant:"ghost",size:"sm",className:"mt-2 w-full justify-center gap-2 text-muted-foreground",onClick:()=>y(e),disabled:s,children:s?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"h-3 w-3 animate-spin rounded-full border border-muted-foreground border-t-transparent"}),S("sessions.loading")]}):i.jsxs(i.Fragment,{children:[i.jsx(Mr,{className:"h-3 w-3"}),S("sessions.showMore")]})})]})}const l9=(e,t)=>{const n=e.length;return t&&n>=5?`${n}+`:`${n}`};function c9({project:e,selectedProject:t,selectedSession:n,isExpanded:r,isDeleting:a,isStarred:s,editingProject:o,editingName:l,sessions:c,initialSessionsLoaded:d,isLoadingSessions:u,currentTime:p,editingSession:f,editingSessionName:h,isSessionStarred:g,onEditingNameChange:b,onToggleProject:x,onProjectSelect:v,onToggleStarProject:y,onToggleStarSession:w,onStartEditingProject:k,onCancelEditingProject:S,onSaveProjectName:C,onDeleteProject:A,onSessionSelect:R,onDeleteSession:j,onLoadMoreSessions:E,onNewSession:L,onOpenOrchestration:T,onEditingSessionNameChange:I,onStartEditingSession:N,onCancelEditingSession:O,onSaveEditingSession:$,t:F}){const q=t?.name===e.name,Y=o===e.name,P=e.sessionMeta?.hasMore===!0,B=l9(c,P),V=`${B} session${c.length===1?"":"s"}`,z=()=>x(e.name),ee=()=>y(e.name),ae=()=>{C(e.name)},ue=()=>{t?.name!==e.name&&v(e),z()};return i.jsxs("div",{className:xe("md:space-y-1",a&&"opacity-50 pointer-events-none"),children:[i.jsxs("div",{className:"md:group group",children:[i.jsx("div",{className:"md:hidden",children:i.jsx("div",{className:xe("p-3 mx-3 my-1 rounded-lg bg-card border border-border/50 active:scale-[0.98] transition-all duration-150",q&&"bg-primary/5 border-primary/20",s&&!q&&"bg-yellow-50/50 dark:bg-yellow-900/5 border-yellow-200/30 dark:border-yellow-800/30"),onClick:z,children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[i.jsx("div",{className:xe("w-8 h-8 rounded-lg flex items-center justify-center transition-colors",r?"bg-primary/10":"bg-muted"),children:r?i.jsx(Nr,{className:"h-4 w-4 text-primary"}):i.jsx(Fn,{className:"h-4 w-4 text-muted-foreground"})}),i.jsx("div",{className:"min-w-0 flex-1",children:Y?i.jsx("input",{type:"text",value:l,onChange:le=>b(le.target.value),className:"w-full rounded-lg border-2 border-primary/40 bg-background px-3 py-2 text-sm text-foreground shadow-sm transition-all duration-200 focus:border-primary focus:shadow-md focus:outline-none",placeholder:F("projects.projectNamePlaceholder"),autoFocus:!0,autoComplete:"off",onClick:le=>le.stopPropagation(),onKeyDown:le=>{le.key==="Enter"&&ae(),le.key==="Escape"&&S()},style:{fontSize:"16px",WebkitAppearance:"none",borderRadius:"8px"}}):i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"flex min-w-0 flex-1 items-center justify-between",children:i.jsx("h3",{className:"truncate text-sm font-medium text-foreground",children:e.displayName})}),i.jsx("p",{className:"text-xs text-muted-foreground",children:V})]})})]}),i.jsx("div",{className:"flex items-center gap-1",children:Y?i.jsxs(i.Fragment,{children:[i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-green-500 shadow-sm transition-all duration-150 active:scale-90 active:shadow-none dark:bg-green-600",onClick:le=>{le.stopPropagation(),ae()},children:i.jsx(qt,{className:"h-4 w-4 text-white"})}),i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-gray-500 shadow-sm transition-all duration-150 active:scale-90 active:shadow-none dark:bg-gray-600",onClick:le=>{le.stopPropagation(),S()},children:i.jsx(St,{className:"h-4 w-4 text-white"})})]}):i.jsxs(i.Fragment,{children:[i.jsx("button",{className:xe("w-8 h-8 rounded-lg flex items-center justify-center active:scale-90 transition-all duration-150 border",s?"bg-yellow-500/10 dark:bg-yellow-900/30 border-yellow-200 dark:border-yellow-800":"bg-gray-500/10 dark:bg-gray-900/30 border-gray-200 dark:border-gray-800"),onClick:le=>{le.stopPropagation(),ee()},title:F(s?"tooltips.removeFromFavorites":"tooltips.addToFavorites"),children:i.jsx(ui,{className:xe("w-4 h-4 transition-colors",s?"text-yellow-600 dark:text-yellow-400 fill-current":"text-gray-600 dark:text-gray-400")})}),i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg border border-red-200 bg-red-500/10 active:scale-90 dark:border-red-800 dark:bg-red-900/30",onClick:le=>{le.stopPropagation(),A(e)},children:i.jsx(Rn,{className:"h-4 w-4 text-red-600 dark:text-red-400"})}),i.jsx("button",{className:"flex h-8 w-8 items-center justify-center rounded-lg border border-primary/20 bg-primary/10 active:scale-90 dark:border-primary/30 dark:bg-primary/20",onClick:le=>{le.stopPropagation(),k(e)},children:i.jsx(Gh,{className:"h-4 w-4 text-primary"})}),i.jsx("div",{className:"flex h-6 w-6 items-center justify-center rounded-md bg-muted/30",children:r?i.jsx(Mr,{className:"h-3 w-3 text-muted-foreground"}):i.jsx(ua,{className:"h-3 w-3 text-muted-foreground"})})]})})]})})}),i.jsxs(Te,{variant:"ghost",className:xe("hidden md:flex w-full justify-between p-2 h-auto font-normal hover:bg-accent/50",q&&"bg-accent text-accent-foreground",s&&!q&&"bg-yellow-50/50 dark:bg-yellow-900/10 hover:bg-yellow-100/50 dark:hover:bg-yellow-900/20"),onClick:ue,children:[i.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[r?i.jsx(Nr,{className:"h-4 w-4 flex-shrink-0 text-primary"}):i.jsx(Fn,{className:"h-4 w-4 flex-shrink-0 text-muted-foreground"}),i.jsx("div",{className:"min-w-0 flex-1 text-left",children:Y?i.jsxs("div",{className:"space-y-1",children:[i.jsx("input",{type:"text",value:l,onChange:le=>b(le.target.value),className:"w-full rounded border border-border bg-background px-2 py-1 text-sm text-foreground focus:ring-2 focus:ring-primary/20",placeholder:F("projects.projectNamePlaceholder"),autoFocus:!0,onKeyDown:le=>{le.key==="Enter"&&ae(),le.key==="Escape"&&S()}}),i.jsx("div",{className:"truncate text-xs text-muted-foreground",title:e.fullPath,children:e.fullPath})]}):i.jsxs("div",{children:[i.jsx("div",{className:"truncate text-sm font-semibold text-foreground",title:e.displayName,children:e.displayName}),i.jsxs("div",{className:"text-xs text-muted-foreground",children:[B,e.fullPath!==e.displayName&&i.jsxs("span",{className:"ml-1 opacity-60",title:e.fullPath,children:[" - ",e.fullPath.length>25?`...${e.fullPath.slice(-22)}`:e.fullPath]})]})]})})]}),i.jsx("div",{className:"flex flex-shrink-0 items-center gap-1",children:Y?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"flex h-6 w-6 cursor-pointer items-center justify-center rounded text-green-600 transition-colors hover:bg-green-50 hover:text-green-700 dark:hover:bg-green-900/20",onClick:le=>{le.stopPropagation(),ae()},children:i.jsx(qt,{className:"h-3 w-3"})}),i.jsx("div",{className:"flex h-6 w-6 cursor-pointer items-center justify-center rounded text-gray-500 transition-colors hover:bg-gray-50 hover:text-gray-700 dark:hover:bg-gray-800",onClick:le=>{le.stopPropagation(),S()},children:i.jsx(St,{className:"h-3 w-3"})})]}):i.jsxs(i.Fragment,{children:[s&&i.jsx("div",{className:"flex h-6 w-6 cursor-pointer items-center justify-center rounded hover:bg-yellow-50 dark:hover:bg-yellow-900/20",onClick:le=>{le.stopPropagation(),ee()},title:F("tooltips.removeFromFavorites"),children:i.jsx(ui,{className:"h-3 w-3 fill-current text-yellow-600 dark:text-yellow-400"})}),i.jsx(DE,{triggerLabel:F("tooltips.projectActions",{defaultValue:"Project actions"}),actions:[{id:"rename",label:F("actions.rename"),icon:Gh,onClick:()=>k(e)},{id:"star",label:F(s?"tooltips.removeFromFavorites":"tooltips.addToFavorites"),icon:ui,onClick:ee},{id:"delete",label:F("actions.delete",{defaultValue:"Delete"}),icon:Rn,onClick:()=>A(e),danger:!0}]}),r?i.jsx(Mr,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"}):i.jsx(ua,{className:"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground"})]})})]})]}),i.jsx(o9,{project:e,isExpanded:r,sessions:c,selectedSession:n,initialSessionsLoaded:d,isLoadingSessions:u,currentTime:p,editingSession:f,editingSessionName:h,isSessionStarred:g,onEditingSessionNameChange:I,onStartEditingSession:N,onCancelEditingSession:O,onSaveEditingSession:$,onToggleStarSession:w,onProjectSelect:v,onSessionSelect:R,onDeleteSession:j,onLoadMoreSessions:E,onNewSession:L,onOpenOrchestration:T,t:F})]})}function ME({isLoading:e,loadingProgress:t,projectsCount:n,filteredProjectsCount:r,t:a}){return e?i.jsxs("div",{className:"px-4 py-12 text-center md:py-8",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-muted md:mb-3",children:i.jsx("div",{className:"h-6 w-6 animate-spin rounded-full border-2 border-muted-foreground border-t-transparent"})}),i.jsx("h3",{className:"mb-2 text-base font-medium text-foreground md:mb-1",children:a("projects.loadingProjects")}),t&&t.total>0?i.jsxs("div",{className:"space-y-2",children:[i.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full bg-muted",children:i.jsx("div",{className:"h-full bg-primary transition-all duration-300 ease-out",style:{width:`${t.current/t.total*100}%`}})}),i.jsxs("p",{className:"text-sm text-muted-foreground",children:[t.current,"/",t.total," ",a("projects.projects")]}),t.currentProject&&i.jsx("p",{className:"mx-auto max-w-[200px] truncate text-xs text-muted-foreground/70",title:t.currentProject,children:t.currentProject.split("-").slice(-2).join("/")})]}):i.jsx("p",{className:"text-sm text-muted-foreground",children:a("projects.fetchingProjects")})]}):n===0?i.jsxs("div",{className:"px-4 py-12 text-center md:py-8",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-muted md:mb-3",children:i.jsx(Fn,{className:"h-6 w-6 text-muted-foreground"})}),i.jsx("h3",{className:"mb-2 text-base font-medium text-foreground md:mb-1",children:a("projects.noProjects")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:a("projects.runClaudeCli")})]}):r===0?i.jsxs("div",{className:"px-4 py-12 text-center md:py-8",children:[i.jsx("div",{className:"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-muted md:mb-3",children:i.jsx(as,{className:"h-6 w-6 text-muted-foreground"})}),i.jsx("h3",{className:"mb-2 text-base font-medium text-foreground md:mb-1",children:a("projects.noMatchingProjects")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:a("projects.tryDifferentSearch")})]}):null}function d9({projects:e,filteredProjects:t,selectedProject:n,selectedSession:r,isLoading:a,loadingProgress:s,expandedProjects:o,editingProject:l,editingName:c,loadingSessions:d,initialSessionsLoaded:u,currentTime:p,editingSession:f,editingSessionName:h,deletingProjects:g,getProjectSessions:b,isProjectStarred:x,isSessionStarred:v,onEditingNameChange:y,onToggleProject:w,onProjectSelect:k,onToggleStarProject:S,onToggleStarSession:C,onStartEditingProject:A,onCancelEditingProject:R,onSaveProjectName:j,onDeleteProject:E,onSessionSelect:L,onDeleteSession:T,onLoadMoreSessions:I,onNewSession:N,onOpenOrchestration:O,onEditingSessionNameChange:$,onStartEditingSession:F,onCancelEditingSession:q,onSaveEditingSession:Y,t:P}){const B=i.jsx(ME,{isLoading:a,loadingProgress:s,projectsCount:e.length,filteredProjectsCount:t.length,t:P});m.useEffect(()=>{let le="Pixcode";const se=n?.displayName?.trim();se&&(le=`${se} - ${le}`),document.title=le},[n]);const V=!a&&e.length>0&&t.length>0,z=le=>le.source==="history"||le.autoDiscovered===!0&&le.isManuallyAdded!==!0,ee=t.filter(le=>!z(le)),ae=t.filter(le=>z(le)),ue=le=>i.jsx(c9,{project:le,selectedProject:n,selectedSession:r,isExpanded:o.has(le.name),isDeleting:g.has(le.name),isStarred:x(le.name),editingProject:l,editingName:c,sessions:b(le),initialSessionsLoaded:u.has(le.name),isLoadingSessions:!!d[le.name],currentTime:p,editingSession:f,editingSessionName:h,isSessionStarred:v,onEditingNameChange:y,onToggleProject:w,onProjectSelect:k,onToggleStarProject:S,onToggleStarSession:C,onStartEditingProject:A,onCancelEditingProject:R,onSaveProjectName:j,onDeleteProject:E,onSessionSelect:L,onDeleteSession:T,onLoadMoreSessions:I,onNewSession:N,onOpenOrchestration:O,onEditingSessionNameChange:$,onStartEditingSession:F,onCancelEditingSession:q,onSaveEditingSession:Y,t:P},le.name);return i.jsx("div",{className:"pb-safe-area-inset-bottom md:space-y-1",children:V?i.jsxs(i.Fragment,{children:[ee.map(le=>ue(le)),ae.length>0&&i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"px-3 pb-1 pt-3 text-[11px] font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400",children:P("projects.detectedFromHistory")}),ae.map(le=>ue(le))]})]}):B})}function Ca(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function FE(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}/*!
|
|
221
221
|
* GSAP 3.15.0
|
|
222
222
|
* https://gsap.com
|
|
223
223
|
*
|
|
@@ -819,7 +819,7 @@ Build and smoke checks pass`}),[C,A]=m.useState(""),[R,j]=m.useState({title:"",n
|
|
|
819
819
|
`),C+="</div>",C+="</div>",p.innerHTML=C,g){const E=p.querySelector(".cm-diff-nav-prev"),L=p.querySelector(".cm-diff-nav-next");E?.addEventListener("click",()=>{if(x.length===0)return;f=f>0?f-1:x.length-1;const T=x[f];T&&u.dispatch({effects:Or.scrollIntoView(T.fromB,{y:"center"})}),h()}),L?.addEventListener("click",()=>{if(x.length===0)return;f=f<x.length-1?f+1:0;const T=x[f];T&&u.dispatch({effects:Or.scrollIntoView(T.fromB,{y:"center"})}),h()})}p.querySelector(".cm-toggle-diff-btn")?.addEventListener("click",a),p.querySelector(".cm-popout-btn")?.addEventListener("click",()=>{s?.()}),p.querySelector(".cm-expand-btn")?.addEventListener("click",()=>{o?.()})};return h(),{top:!0,dom:p,update:h}};return[q6.of(d)]};function mae({content:e,linesLabel:t,charactersLabel:n,shortcutsLabel:r}){return i.jsxs("div",{className:"flex flex-shrink-0 items-center justify-between border-t border-border bg-muted px-3 py-1.5",children:[i.jsxs("div",{className:"flex items-center gap-3 text-xs text-gray-600 dark:text-gray-400",children:[i.jsxs("span",{children:[t," ",e.split(`
|
|
820
820
|
`).length]}),i.jsxs("span",{children:[n," ",e.length]})]}),i.jsx("div",{className:"text-xs text-gray-500 dark:text-gray-400",children:r})]})}function hae({file:e,isSidebar:t,isFullscreen:n,isMarkdownFile:r,markdownPreview:a,saving:s,saveSuccess:o,onToggleMarkdownPreview:l,onOpenSettings:c,onDownload:d,onSave:u,onToggleFullscreen:p,onClose:f,labels:h}){const g=o?h.saved:s?h.saving:h.save;return i.jsxs("div",{className:"flex min-w-0 flex-shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-1.5",children:[i.jsx("div",{className:"flex min-w-0 flex-1 shrink items-center gap-2",children:i.jsxs("div",{className:"min-w-0 shrink",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx("h3",{className:"truncate text-sm font-medium text-gray-900 dark:text-white",children:e.name}),e.diffInfo&&i.jsx("span",{className:"shrink-0 whitespace-nowrap rounded-full border border-blue-200 bg-blue-50 px-1.5 py-0.5 text-[9px] font-medium leading-none text-blue-600 dark:border-blue-800/70 dark:bg-blue-950/50 dark:text-blue-300",children:h.showingChanges})]}),i.jsx("p",{className:"truncate text-xs text-gray-500 dark:text-gray-400",children:e.path})]})}),i.jsxs("div",{className:"flex shrink-0 items-center gap-0.5",children:[r&&i.jsx("button",{type:"button",onClick:l,className:`flex items-center justify-center rounded-md p-1.5 transition-colors ${a?"bg-blue-50 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400":"text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white"}`,title:a?h.editMarkdown:h.previewMarkdown,children:a?i.jsx(Ys,{className:"h-4 w-4"}):i.jsx(lc,{className:"h-4 w-4"})}),i.jsx("button",{type:"button",onClick:c,className:"flex items-center justify-center rounded-md p-1.5 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white",title:h.settings,children:i.jsx(Dt,{className:"h-4 w-4"})}),i.jsx("button",{type:"button",onClick:d,className:"flex items-center justify-center rounded-md p-1.5 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white",title:h.download,children:i.jsx(pa,{className:"h-4 w-4"})}),i.jsx("button",{type:"button",onClick:u,disabled:s,className:`flex items-center justify-center rounded-md p-1.5 transition-colors disabled:opacity-50 ${o?"bg-green-50 text-green-600 dark:bg-green-900/30 dark:text-green-400":"text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white"}`,title:g,children:o?i.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}):i.jsx(CD,{className:"h-4 w-4"})}),!t&&i.jsx("button",{type:"button",onClick:p,className:"flex items-center justify-center rounded-md p-1.5 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white",title:n?h.exitFullscreen:h.fullscreen,children:n?i.jsx(xD,{className:"h-4 w-4"}):i.jsx(Ru,{className:"h-4 w-4"})}),i.jsx("button",{type:"button",onClick:f,className:"flex items-center justify-center rounded-md p-1.5 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white",title:h.close,children:i.jsx(St,{className:"h-4 w-4"})})]})]})}function fae({isDarkMode:e,isSidebar:t,loadingText:n}){return i.jsxs(i.Fragment,{children:[i.jsx("style",{children:lae(e)}),t?i.jsx("div",{className:"flex h-full w-full items-center justify-center bg-background",children:i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"h-6 w-6 animate-spin rounded-full border-b-2 border-blue-600"}),i.jsx("span",{className:"text-gray-900 dark:text-white",children:n})]})}):i.jsx("div",{className:"fixed inset-0 z-[9999] md:flex md:items-center md:justify-center md:bg-black/50",children:i.jsx("div",{className:"code-editor-loading flex h-full w-full items-center justify-center p-8 md:h-auto md:w-auto md:rounded-lg",children:i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"h-6 w-6 animate-spin rounded-full border-b-2 border-blue-600"}),i.jsx("span",{className:"text-gray-900 dark:text-white",children:n})]})})})]})}const gae=m.createContext(null),Ih={didCatch:!1,error:null};let e6=class extends m.Component{constructor(t){super(t),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=Ih}static getDerivedStateFromError(t){return{didCatch:!0,error:t}}resetErrorBoundary(){const{error:t}=this.state;if(t!==null){for(var n,r,a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];(n=(r=this.props).onReset)===null||n===void 0||n.call(r,{args:s,reason:"imperative-api"}),this.setState(Ih)}}componentDidCatch(t,n){var r,a;(r=(a=this.props).onError)===null||r===void 0||r.call(a,t,n)}componentDidUpdate(t,n){const{didCatch:r}=this.state,{resetKeys:a}=this.props;if(r&&n.error!==null&&bae(t.resetKeys,a)){var s,o;(s=(o=this.props).onReset)===null||s===void 0||s.call(o,{next:a,prev:t.resetKeys,reason:"keys"}),this.setState(Ih)}}render(){const{children:t,fallbackRender:n,FallbackComponent:r,fallback:a}=this.props,{didCatch:s,error:o}=this.state;let l=t;if(s){const c={error:o,resetErrorBoundary:this.resetErrorBoundary};if(typeof n=="function")l=n(c);else if(r)l=m.createElement(r,c);else if(a!==void 0)l=a;else throw o}return m.createElement(gae.Provider,{value:{didCatch:s,error:o,resetErrorBoundary:this.resetErrorBoundary}},l)}};function bae(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return e.length!==t.length||e.some((n,r)=>!Object.is(n,t[r]))}function xae({inline:e,className:t,children:n,node:r,...a}){const[s,o]=m.useState(!1),l=Array.isArray(n)?n.join(""):String(n??""),c=/[\r\n]/.test(l);if(e||!c)return i.jsx("code",{className:`whitespace-pre-wrap break-words rounded-md border border-gray-200 bg-gray-100 px-1.5 py-0.5 font-mono text-[0.9em] text-gray-900 dark:border-gray-700 dark:bg-gray-800/60 dark:text-gray-100 ${t||""}`,...a,children:n});const u=/language-(\w+)/.exec(t||""),p=u?u[1]:"text";return i.jsxs("div",{className:"group relative my-2",children:[p!=="text"&&i.jsx("div",{className:"absolute left-3 top-2 z-10 text-xs font-medium uppercase text-gray-400",children:p}),i.jsx("button",{type:"button",onClick:()=>Kr(l).then(f=>{f&&(o(!0),setTimeout(()=>o(!1),2e3))}),className:"absolute right-2 top-2 z-10 rounded-md border border-gray-600 bg-gray-700/80 px-2 py-1 text-xs text-white opacity-0 transition-opacity hover:bg-gray-700 group-hover:opacity-100",children:s?"Copied!":"Copy"}),i.jsx(Q1,{language:p,style:rR,customStyle:{margin:0,borderRadius:"0.5rem",fontSize:"0.875rem",padding:p!=="text"?"2rem 1rem 1rem 1rem":"1rem"},children:l})]})}const vae={code:xae,blockquote:({children:e})=>i.jsx("blockquote",{className:"my-2 border-l-4 border-gray-300 pl-4 italic text-gray-600 dark:border-gray-600 dark:text-gray-400",children:e}),a:({href:e,children:t})=>i.jsx("a",{href:e,className:"text-blue-600 hover:underline dark:text-blue-400",target:"_blank",rel:"noopener noreferrer",children:t}),table:({children:e})=>i.jsx("div",{className:"my-2 overflow-x-auto",children:i.jsx("table",{className:"min-w-full border-collapse border border-gray-200 dark:border-gray-700",children:e})}),thead:({children:e})=>i.jsx("thead",{className:"bg-gray-50 dark:bg-gray-800",children:e}),th:({children:e})=>i.jsx("th",{className:"border border-gray-200 px-3 py-2 text-left text-sm font-semibold dark:border-gray-700",children:e}),td:({children:e})=>i.jsx("td",{className:"border border-gray-200 px-3 py-2 align-top text-sm dark:border-gray-700",children:e})};function yae({content:e}){const t=m.useMemo(()=>[BA,Mj],[]),n=m.useMemo(()=>[Wj],[]);return i.jsx(fA,{remarkPlugins:t,rehypePlugins:n,components:vae,children:e})}const wae=m.lazy(async()=>{const[e,{ensureLocalMonaco:t}]=await Promise.all([n5(()=>import("./index-ak1p_4ew.js"),__vite__mapDeps([0,1])),n5(()=>import("./localMonaco-DFIbtDNp.js"),__vite__mapDeps([2,0,1]))]);return t(),await e.loader.init(),{default:e.Editor}});function mN(){return i.jsx("div",{className:"flex h-full w-full items-center justify-center bg-white text-sm text-gray-500 dark:bg-gray-900 dark:text-gray-400",children:"Loading editor…"})}const kae=Or.theme({"&":{backgroundColor:"#ffffff",color:"#111827"},".cm-scroller":{backgroundColor:"#ffffff"},".cm-content":{caretColor:"#111827"},".cm-cursor, .cm-dropCursor":{borderLeftColor:"#111827"},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:"#bfdbfe"},".cm-gutters":{backgroundColor:"#f8fafc",borderRightColor:"#e5e7eb",color:"#64748b"},".cm-activeLine":{backgroundColor:"#f8fafc"},".cm-activeLineGutter":{backgroundColor:"#eef2ff"},".cm-panels":{backgroundColor:"#ffffff",color:"#111827"},".cm-panels.cm-panels-top":{borderBottomColor:"#e5e7eb"}},{dark:!1});function Sae(e){const t=e.toLowerCase();if(t===".env"||t.startsWith(".env."))return"ini";switch(t.split(".").pop()){case"js":case"jsx":return"javascript";case"ts":case"tsx":return"typescript";case"py":return"python";case"html":case"htm":return"html";case"css":case"scss":case"less":return"css";case"json":return"json";case"md":case"markdown":return"markdown";default:return"plaintext"}}function Cae(e,t){return`file:///${(e||t).replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(Boolean).map(a=>encodeURIComponent(a)).join("/")||encodeURIComponent(t)}`}function Nae({content:e,onChange:t,onSave:n,markdownPreview:r,isMarkdownFile:a,isDarkMode:s,fontSize:o,showLineNumbers:l,wordWrap:c,extensions:d,fileName:u,filePath:p,useMonacoEditor:f}){const h=m.useRef(n);m.useEffect(()=>{h.current=n},[n]);const g=m.useCallback((v,y)=>{const{KeyCode:w,KeyMod:k}=y;v.addCommand(k.CtrlCmd|w.KeyS,()=>{h.current()}),v.focus()},[]),b=m.useMemo(()=>({automaticLayout:!0,contextmenu:!0,copyWithSyntaxHighlighting:!0,cursorBlinking:"blink",folding:!0,fontLigatures:!1,fontSize:o,glyphMargin:!1,lineNumbers:l?"on":"off",minimap:{enabled:!1},mouseWheelZoom:!0,multiCursorModifier:"alt",renderLineHighlight:"all",roundedSelection:!1,scrollBeyondLastLine:!1,selectOnLineNumbers:!0,selectionClipboard:!0,tabCompletion:"on",wordWrap:c?"on":"off"}),[o,l,c]);if(r&&a)return i.jsx("div",{className:"h-full overflow-y-auto bg-white dark:bg-gray-900",children:i.jsx("div",{className:"prose prose-sm mx-auto max-w-none px-8 py-6 dark:prose-invert prose-headings:font-semibold prose-a:text-blue-600 prose-code:text-sm prose-pre:bg-gray-900 prose-img:rounded-lg dark:prose-a:text-blue-400",children:i.jsx(yae,{content:e})})});const x=i.jsx(jN,{value:e,onChange:t,extensions:d,theme:s?RN:kae,height:"100%",style:{fontSize:`${o}px`,height:"100%"},basicSetup:{lineNumbers:l,foldGutter:!0,dropCursor:!1,allowMultipleSelections:!1,indentOnInput:!0,bracketMatching:!0,closeBrackets:!0,autocompletion:!0,highlightSelectionMatches:!0,searchKeymap:!0}});return f?i.jsx("div",{className:"h-full min-h-0 w-full overflow-hidden",children:i.jsx(e6,{fallback:x,onError:v=>{console.error("Monaco editor failed to load; falling back to CodeMirror:",v)},children:i.jsx(m.Suspense,{fallback:i.jsx(mN,{}),children:i.jsx(wae,{value:e,onChange:v=>t(v??""),language:Sae(u),path:Cae(p,u),theme:s?"vs-dark":"light",height:"100%",width:"100%",options:b,onMount:g,loading:i.jsx(mN,{})})})})}):x}function Eae({file:e,isSidebar:t,isFullscreen:n,onClose:r,onToggleFullscreen:a,title:s,message:o}){const l=i.jsx("div",{className:"flex h-full w-full flex-col items-center justify-center bg-background p-8 text-muted-foreground",children:i.jsxs("div",{className:"flex max-w-md flex-col items-center gap-4 text-center",children:[i.jsx("div",{className:"flex h-16 w-16 items-center justify-center rounded-full bg-muted",children:i.jsx("svg",{className:"h-8 w-8 text-muted-foreground",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})})}),i.jsxs("div",{children:[i.jsx("h3",{className:"mb-2 text-lg font-medium text-foreground",children:s}),i.jsx("p",{className:"text-sm text-muted-foreground",children:o})]}),i.jsx("button",{onClick:r,className:"mt-4 rounded-md bg-primary px-4 py-2 text-sm text-primary-foreground transition-colors hover:bg-primary/90",children:"Close"})]})});if(t)return i.jsxs("div",{className:"flex h-full w-full flex-col bg-background",children:[i.jsxs("div",{className:"flex flex-shrink-0 items-center justify-between border-b border-border px-3 py-1.5",children:[i.jsx("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:i.jsx("h3",{className:"truncate text-sm font-medium text-gray-900 dark:text-white",children:e.name})}),i.jsx("button",{type:"button",onClick:r,className:"flex items-center justify-center rounded-md p-1.5 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white",title:"Close",children:i.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),l]});const c=n?"fixed inset-0 z-[9999] bg-background flex flex-col":"fixed inset-0 z-[9999] md:bg-black/50 md:flex md:items-center md:justify-center md:p-4",d=n?"bg-background flex flex-col w-full h-full":"bg-background shadow-2xl flex flex-col w-full h-full md:rounded-lg md:shadow-2xl md:w-full md:max-w-2xl md:h-auto md:max-h-[60vh]";return i.jsx("div",{className:c,children:i.jsxs("div",{className:d,children:[i.jsxs("div",{className:"flex flex-shrink-0 items-center justify-between border-b border-border px-3 py-1.5",children:[i.jsx("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:i.jsx("h3",{className:"truncate text-sm font-medium text-gray-900 dark:text-white",children:e.name})}),i.jsxs("div",{className:"flex shrink-0 items-center gap-0.5",children:[i.jsx("button",{type:"button",onClick:a,className:"flex items-center justify-center rounded-md p-1.5 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white",title:n?"Exit fullscreen":"Fullscreen",children:n?i.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 9V4.5M9 9H4.5M9 9L3.5 3.5M9 15v4.5M9 15H4.5M9 15l-5.5 5.5M15 9h4.5M15 9V4.5M15 9l5.5-5.5M15 15h4.5M15 15v4.5m0-4.5l5.5 5.5"})}):i.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})})}),i.jsx("button",{type:"button",onClick:r,className:"flex items-center justify-center rounded-md p-1.5 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white",title:"Close",children:i.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})]}),l]})})}function Ml({file:e,onClose:t,projectPath:n,isSidebar:r=!1,isExpanded:a=!1,onToggleExpand:s=null,onPopOut:o=null}){const{t:l}=Me("codeEditor"),[c,d]=m.useState(!1),[u,p]=m.useState(!!e.diffInfo),[f,h]=m.useState(!1);m.useEffect(()=>{p(!!e.diffInfo)},[e.diffInfo]);const{isDarkMode:g,wordWrap:b,minimapEnabled:x,showLineNumbers:v,fontSize:y}=Gre(),{content:w,setContent:k,loading:S,saving:C,saveSuccess:A,saveError:R,isBinary:j,handleSave:E,handleDownload:L}=$re({file:e,projectPath:n}),T=m.useMemo(()=>{const P=e.name.split(".").pop()?.toLowerCase();return P==="md"||P==="markdown"},[e.name]),I=m.useMemo(()=>sae({file:e,showDiff:u,minimapEnabled:x,isDarkMode:g}),[e,g,x,u]),N=m.useMemo(()=>oae({file:e,showDiff:u}),[e,u]),O=m.useMemo(()=>pae({file:e,showDiff:u,isSidebar:r,isExpanded:a,onToggleDiff:()=>p(P=>!P),onPopOut:o,onToggleExpand:s,labels:{changes:l("toolbar.changes"),previousChange:l("toolbar.previousChange"),nextChange:l("toolbar.nextChange"),hideDiff:l("toolbar.hideDiff"),showDiff:l("toolbar.showDiff"),collapse:l("toolbar.collapse"),expand:l("toolbar.expand")}}),[e,a,r,o,s,u,l]),$=m.useMemo(()=>{const P=[...iae(e.name),...O];return e.diffInfo&&u&&e.diffInfo.old_string!==void 0&&(P.push(Ire({original:e.diffInfo.old_string,mergeControls:!1,highlightChanges:!0,syntaxHighlightDeletions:!1,gutter:!0})),P.push(...I),P.push(...N)),b&&P.push(Or.lineWrapping),P},[e.diffInfo,e.name,I,N,u,O,b]),F=!(e.diffInfo&&e.diffInfo.old_string!==void 0);if(Vre({onSave:E,onClose:t,dependency:w}),S)return i.jsx(fae,{isDarkMode:g,isSidebar:r,loadingText:l("loading",{fileName:e.name})});if(j)return i.jsx(Eae,{file:e,isSidebar:r,isFullscreen:c,onClose:t,onToggleFullscreen:()=>d(P=>!P),title:l("binaryFile.title","Binary File"),message:l("binaryFile.message",'The file "{{fileName}}" cannot be displayed in the text editor because it is a binary file.',{fileName:e.name})});const q=r?"w-full h-full flex flex-col":`fixed inset-0 z-[9999] md:bg-black/50 md:flex md:items-center md:justify-center md:p-4 ${c?"md:p-0":""}`,Y=r?"bg-background flex flex-col w-full h-full":`bg-background shadow-2xl flex flex-col w-full h-full md:rounded-lg md:shadow-2xl${c?" md:w-full md:h-full md:rounded-none":" md:w-full md:max-w-6xl md:h-[80vh] md:max-h-[80vh]"}`;return i.jsxs(i.Fragment,{children:[i.jsx("style",{children:cae(g)}),i.jsx("div",{className:q,children:i.jsxs("div",{className:Y,children:[i.jsx(hae,{file:e,isSidebar:r,isFullscreen:c,isMarkdownFile:T,markdownPreview:f,saving:C,saveSuccess:A,onToggleMarkdownPreview:()=>h(P=>!P),onOpenSettings:()=>window.openSettings?.("appearance"),onDownload:L,onSave:E,onToggleFullscreen:()=>d(P=>!P),onClose:t,labels:{showingChanges:l("header.showingChanges"),editMarkdown:l("actions.editMarkdown"),previewMarkdown:l("actions.previewMarkdown"),settings:l("toolbar.settings"),download:l("actions.download"),save:l("actions.save"),saving:l("actions.saving"),saved:l("actions.saved"),fullscreen:l("actions.fullscreen"),exitFullscreen:l("actions.exitFullscreen"),close:l("actions.close")}}),R&&i.jsx("div",{className:"border-b border-red-200 bg-red-50 px-3 py-1.5 text-xs text-red-700 dark:border-red-900/40 dark:bg-red-900/20 dark:text-red-300",children:R}),i.jsx("div",{className:"flex-1 overflow-hidden",children:i.jsx(Nae,{content:w,onChange:k,onSave:E,markdownPreview:f,isMarkdownFile:T,isDarkMode:g,fontSize:y,showLineNumbers:v,wordWrap:b,extensions:$,fileName:e.name,filePath:e.path,useMonacoEditor:F})}),i.jsx(mae,{content:w,linesLabel:l("footer.lines"),charactersLabel:l("footer.characters"),shortcutsLabel:l("footer.shortcuts")})]})})]})}const Tae=200,_h=280;function hN({editingFile:e,isMobile:t,editorExpanded:n,editorWidth:r,hasManualWidth:a,resizeHandleRef:s,onResizeStart:o,onCloseEditor:l,onToggleEditorExpand:c,projectPath:d,fillSpace:u}){const[p,f]=m.useState(!1),h=m.useRef(null),[g,b]=m.useState(r);if(m.useEffect(()=>{if(!e||t||p)return;const v=()=>{if(!h.current)return;const k=h.current.parentElement;if(!k)return;const C=k.clientWidth-Tae;C<_h?f(!0):r>C?b(C):b(r)};v(),window.addEventListener("resize",v);const y=new ResizeObserver(v),w=h.current?.parentElement;return w&&y.observe(w),()=>{window.removeEventListener("resize",v),y.disconnect()}},[e,t,p,r]),!e)return null;if(t||p)return i.jsx(Ml,{file:e,onClose:()=>{f(!1),l()},projectPath:d,isSidebar:!1});const x=n||u&&!a;return i.jsxs("div",{ref:h,className:`flex h-full min-w-0 flex-shrink-0 ${x?"flex-1":""}`,children:[!n&&i.jsx("div",{ref:s,onMouseDown:o,className:"group relative w-1 flex-shrink-0 cursor-col-resize bg-gray-200 transition-colors hover:bg-blue-500 dark:bg-gray-700 dark:hover:bg-blue-600",title:"Drag to resize",children:i.jsx("div",{className:"absolute inset-y-0 left-1/2 w-1 -translate-x-1/2 bg-blue-500 opacity-0 transition-opacity group-hover:opacity-100 dark:bg-blue-600"})}),i.jsx("div",{className:`h-full overflow-hidden border-l border-gray-200 dark:border-gray-700 ${x?"min-w-0 flex-1":`min-w-[ flex-shrink-0${_h}px]`}`,style:x?void 0:{width:`${g}px`,minWidth:`${_h}px`},children:i.jsx(Ml,{file:e,onClose:l,projectPath:d,isSidebar:!0,isExpanded:n,onToggleExpand:c,onPopOut:()=>f(!0)})})]})}function Aae(e){const t=m.useRef(!1),n=m.useCallback(s=>{s&&(s.preventDefault(),s.stopPropagation()),e()},[e]),r=m.useCallback(s=>{t.current=!0,n(s),window.setTimeout(()=>{t.current=!1},350)},[n]);return{handleMobileMenuClick:m.useCallback(s=>{if(t.current){s.preventDefault(),s.stopPropagation();return}n(s)},[n]),handleMobileMenuTouchEnd:r}}function t6({onMenuClick:e,compact:t=!1}){const{handleMobileMenuClick:n,handleMobileMenuTouchEnd:r}=Aae(e),a=t?"p-1.5 text-muted-foreground hover:text-foreground rounded-lg hover:bg-accent/60 pwa-menu-button":"p-1.5 text-muted-foreground hover:text-foreground rounded-lg hover:bg-accent/60 touch-manipulation active:scale-95 pwa-menu-button flex-shrink-0";return i.jsx("button",{onClick:n,onTouchEnd:r,className:a,"aria-label":"Open menu",children:i.jsx("svg",{className:"h-5 w-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})})}const jae=[{kind:"builtin",id:"chat",labelKey:"tabs.chat",icon:Er},{kind:"builtin",id:"orchestration",labelKey:"tabs.orchestration",icon:Tr},{kind:"builtin",id:"remote",labelKey:"tabs.remote",icon:cc},{kind:"builtin",id:"shell",labelKey:"tabs.shell",icon:Ln},{kind:"builtin",id:"files",labelKey:"tabs.files",icon:Fn},{kind:"builtin",id:"git",labelKey:"tabs.git",icon:zn},{kind:"builtin",id:"changes",labelKey:"tabs.changes",icon:Vr},{kind:"builtin",id:"liveView",labelKey:"tabs.liveView",icon:or}],Rae=new Set(["files","shell","git","changes","liveView"]);function Iae({activeTab:e,setActiveTab:t,liveViewAvailable:n=!1,activeSidePanelTab:r,sidePanelMode:a="split",canUseSidePanelSplit:s=!0,isMobile:o=!1,onCloseSidePanel:l}){const{t:c}=Me(),{plugins:d}=Ou(),u=d.filter(f=>f.enabled).map(f=>({kind:"plugin",id:`plugin:${f.name}`,label:f.displayName,pluginName:f.name,iconFile:f.icon})),p=[...jae,...u];return i.jsx(Fu,{children:p.map(f=>{const h=f.id===e,g=f.kind==="builtin"?c(f.labelKey):f.label,b=!!(!o&&s&&h&&r===f.id&&Rae.has(f.id)),x=a==="split",y=b?`${g} · ${x?"Split":"Full"} view`:g;return i.jsxs("div",{className:"relative inline-flex items-center",children:[i.jsx(of,{content:y,position:"bottom",children:i.jsxs(zu,{isActive:h,onClick:()=>t(f.id),className:b?"px-2 py-[5px] pr-7":"px-2.5 py-[5px]",children:[f.kind==="builtin"?i.jsx(f.icon,{className:"h-3.5 w-3.5"}):i.jsx(W3,{pluginName:f.pluginName,iconFile:f.iconFile,className:"flex h-3.5 w-3.5 items-center justify-center [&>svg]:h-full [&>svg]:w-full"}),i.jsx("span",{className:"hidden lg:inline",children:g}),f.id==="liveView"&&n&&i.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.75)]","aria-hidden":"true"}),b&&i.jsx("span",{className:`ml-0.5 inline-flex h-4 w-4 items-center justify-center rounded border ${x?"border-foreground/20 bg-foreground/5 text-foreground/70":"border-border bg-muted/60 text-muted-foreground"}`,"aria-hidden":"true",children:x?i.jsx(Du,{className:"h-3 w-3"}):i.jsx(Ru,{className:"h-3 w-3"})})]})}),b&&l&&i.jsx(of,{content:c("tabs.closeSidePanel","Close side panel"),position:"bottom",children:i.jsx("button",{type:"button",className:"absolute right-1 top-1/2 flex h-4 w-4 -translate-y-1/2 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",onClick:w=>{w.stopPropagation(),l()},"aria-label":c("tabs.closeSidePanel","Close side panel"),title:c("tabs.closeSidePanel","Close side panel"),children:i.jsx(St,{className:"h-3 w-3"})})})]},f.id)})})}function _ae(e,t,n){return e.startsWith("plugin:")&&n?n:e==="files"?t("mainContent.projectFiles"):e==="orchestration"?t("tabs.orchestration"):e==="remote"?t("tabs.remote"):e==="controlRoom"?t("tabs.controlRoom"):e==="git"?t("tabs.git"):e==="changes"?t("tabs.changes"):e==="liveView"?t("tabs.liveView"):"Project"}function Lae(e){return e.__provider==="cursor"?e.name||"Untitled Session":e.summary||e.name||e.title||"New Session"}function Pae({activeTab:e,selectedProject:t,selectedSession:n}){const{t:r}=Me(),{plugins:a}=Ou(),s=e.startsWith("plugin:")?a.find(d=>d.name===e.replace("plugin:",""))?.displayName:void 0,o=e==="chat"&&!!n,l=e==="chat"&&!n,c=t?.displayName||"Server";return i.jsxs("div",{className:"scrollbar-hide flex min-w-0 flex-1 items-center gap-2 overflow-x-auto",children:[o&&i.jsx("div",{className:"flex h-5 w-5 flex-shrink-0 items-center justify-center",children:i.jsx(nn,{provider:n?.__provider,className:"h-4 w-4"})}),i.jsx("div",{className:"min-w-0 flex-1",children:e==="chat"&&n?i.jsxs("div",{className:"min-w-0",children:[i.jsx("h2",{className:"scrollbar-hide overflow-x-auto whitespace-nowrap text-sm font-semibold leading-tight text-foreground",children:Lae(n)}),i.jsx("div",{className:"truncate text-[11px] leading-tight text-muted-foreground",children:c})]}):l?i.jsxs("div",{className:"min-w-0",children:[i.jsx("h2",{className:"text-base font-semibold leading-tight text-foreground",children:r("mainContent.newSession")}),i.jsx("div",{className:"truncate text-xs leading-tight text-muted-foreground",children:c})]}):i.jsxs("div",{className:"min-w-0",children:[i.jsx("h2",{className:"text-sm font-semibold leading-tight text-foreground",children:_ae(e,r,s)}),i.jsx("div",{className:"truncate text-[11px] leading-tight text-muted-foreground",children:c})]})})]})}function fN({activeTab:e,setActiveTab:t,selectedProject:n,selectedSession:r,liveViewAvailable:a,activeSidePanelTab:s,sidePanelMode:o,canUseSidePanelSplit:l,isMobile:c,onMenuClick:d,onCloseSidePanel:u}){const p=m.useRef(null),[f,h]=m.useState(!1),[g,b]=m.useState(!1),x=m.useCallback(()=>{const v=p.current;v&&(h(v.scrollLeft>2),b(v.scrollLeft<v.scrollWidth-v.clientWidth-2))},[]);return m.useEffect(()=>{const v=p.current;if(!v)return;x();const y=new ResizeObserver(x);return y.observe(v),()=>y.disconnect()},[x]),i.jsx("div",{className:"pwa-header-safe flex-shrink-0 border-b border-border/60 bg-background px-3 py-1.5 sm:px-4 sm:py-2",children:i.jsxs("div",{className:"flex items-center justify-between gap-3",children:[i.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[c&&i.jsx(t6,{onMenuClick:d}),i.jsx(Pae,{activeTab:e,selectedProject:n,selectedSession:r})]}),e!=="controlRoom"&&i.jsxs("div",{className:"relative min-w-0 flex-shrink overflow-hidden sm:flex-shrink-0",children:[f&&i.jsx("div",{className:"pointer-events-none absolute inset-y-0 left-0 z-10 w-6 bg-gradient-to-r from-background to-transparent"}),i.jsxs("div",{className:"relative min-w-0 overflow-hidden",children:[i.jsx("div",{ref:p,onScroll:x,className:"scrollbar-hide overflow-x-auto",children:i.jsx(Iae,{activeTab:e,setActiveTab:t,liveViewAvailable:a,activeSidePanelTab:s,sidePanelMode:o,canUseSidePanelSplit:l,isMobile:c,onCloseSidePanel:u})}),g&&i.jsx("div",{className:"pointer-events-none absolute inset-y-0 right-0 z-10 w-6 bg-gradient-to-l from-background to-transparent"})]})]})]})})}function fg({mode:e,isMobile:t,onMenuClick:n,onQuickStartSession:r,onQuickStartOrchestration:a,onOpenControlRoom:s}){const{t:o}=Me(),l=e==="loading";return i.jsxs("div",{className:"flex h-full flex-col",children:[t&&i.jsx("div",{className:"pwa-header-safe flex-shrink-0 border-b border-border/50 bg-background/80 p-2 backdrop-blur-sm sm:p-3",children:i.jsx(t6,{onMenuClick:n,compact:!0})}),l?i.jsx("div",{className:"flex flex-1 items-center justify-center",children:i.jsxs("div",{className:"text-center text-muted-foreground",children:[i.jsx("div",{className:"mx-auto mb-4 h-10 w-10",children:i.jsx("div",{className:"h-full w-full rounded-full border-[3px] border-muted border-t-primary",style:{animation:"spin 1s linear infinite",WebkitAnimation:"spin 1s linear infinite",MozAnimation:"spin 1s linear infinite"}})}),i.jsx("h2",{className:"mb-1 text-lg font-semibold text-foreground",children:o("mainContent.loading")}),i.jsx("p",{className:"text-sm",children:o("mainContent.settingUpWorkspace")})]})}):i.jsx("div",{className:"flex flex-1 items-center justify-center overflow-auto p-5",children:i.jsxs("div",{className:"w-full max-w-4xl",children:[i.jsxs("div",{className:"mb-6",children:[i.jsx("div",{className:"mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-muted/60",children:i.jsx(Fn,{className:"h-6 w-6 text-muted-foreground"})}),i.jsx("h2",{className:"text-2xl font-semibold text-foreground",children:o("mainContent.landing.title")}),i.jsx("p",{className:"mt-2 max-w-2xl text-sm leading-6 text-muted-foreground",children:o("mainContent.landing.description")})]}),i.jsxs("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(min(100%,11rem),1fr))] gap-3",children:[i.jsxs("button",{type:"button",onClick:s,className:"rounded-md border border-primary/40 bg-primary/10 p-4 text-left transition-colors hover:bg-primary/15 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",children:[i.jsx(Fr,{className:"mb-3 h-5 w-5 text-primary"}),i.jsx("div",{className:"text-sm font-semibold",children:o("mainContent.openControlRoom",{defaultValue:"Open Control Room"})}),i.jsx("p",{className:"mt-2 text-xs leading-5 text-muted-foreground",children:o("mainContent.openControlRoomDescription",{defaultValue:"See admin users, team access, production runs, secrets, audits, usage, and remote access in one place."})})]}),i.jsxs("button",{type:"button",onClick:()=>{a?.()},className:"rounded-md border border-primary/30 bg-primary/5 p-4 text-left transition-colors hover:bg-primary/10",children:[i.jsx(Tr,{className:"mb-3 h-5 w-5 text-primary"}),i.jsx("div",{className:"text-sm font-semibold",children:o("mainContent.landing.startOrchestration")}),i.jsx("p",{className:"mt-2 text-xs leading-5 text-muted-foreground",children:o("mainContent.landing.startOrchestrationDescription")})]}),i.jsxs("button",{type:"button",onClick:()=>{r?.()},className:"rounded-md border border-border p-4 text-left transition-colors hover:bg-muted/40",children:[i.jsx(Fr,{className:"mb-3 h-5 w-5 text-foreground"}),i.jsx("div",{className:"text-sm font-semibold",children:o("mainContent.landing.startChat")}),i.jsx("p",{className:"mt-2 text-xs leading-5 text-muted-foreground",children:o("mainContent.landing.startChatDescription")})]}),i.jsxs("button",{type:"button",onClick:()=>window.dispatchEvent(new CustomEvent("pixcode:create-project")),className:"rounded-md border border-border p-4 text-left transition-colors hover:bg-muted/40",children:[i.jsx(hi,{className:"mb-3 h-5 w-5 text-foreground"}),i.jsx("div",{className:"text-sm font-semibold",children:o("mainContent.landing.createProject",{defaultValue:"Create New Project"})}),i.jsx("p",{className:"mt-2 text-xs leading-5 text-muted-foreground",children:o("mainContent.landing.createProjectDescription",{defaultValue:"Add an existing workspace or create a folder, then open the provider picker for coding."})})]})]}),i.jsx("div",{className:"mt-5 rounded-md border border-border/70 bg-muted/20 p-4 text-sm text-muted-foreground",children:o("mainContent.landing.sidebarHint")})]})})]})}function Dae(e){if(!e||typeof e.new_string!="string")return null;const t=String(e.old_string||"").split(`
|
|
821
821
|
`),n=e.new_string.split(`
|
|
822
|
-
`),r=Math.max(t.length,n.length);for(let a=0;a<r;a+=1)if(t[a]!==n[a])return a+1;return null}function Oae(e,t){const n=encodeURIComponent(e);return t&&t>0?`${n}#L${t}`:n}const Mae={M:"M",A:"A",D:"D",U:"U"},Fae={M:"border-amber-400/40 bg-amber-500/10 text-amber-700 dark:text-amber-200",A:"border-emerald-400/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-200",D:"border-red-400/40 bg-red-500/10 text-red-700 dark:text-red-200",U:"border-sky-400/40 bg-sky-500/10 text-sky-700 dark:text-sky-200"};function zae(e){return e?new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(e):null}function Bae({changedFiles:e,isLoading:t,error:n,latestChangedFilePath:r,lastCheckedAt:a,trackingMode:s,onTrackingModeChange:o,onRefresh:l,onOpenFile:c,variant:d="rail"}){const u=zae(a),p=d==="panel";return i.jsxs("aside",{className:xe("h-full min-h-0 flex-col overflow-hidden bg-card/45",p?"flex w-full rounded-none border-0":"hidden w-[260px] shrink-0 rounded-lg border border-border/60 shadow-sm xl:flex"),children:[i.jsxs("div",{className:"flex items-center justify-between gap-2 border-b border-border/60 px-3 py-2",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:[i.jsx("span",{className:"h-2 w-2 rounded-full bg-emerald-500 shadow-[0_0_10px_rgba(16,185,129,0.75)]"}),"Command Center"]}),i.jsx("p",{className:"mt-0.5 truncate text-[11px] text-muted-foreground",children:e.length>0?`${e.length} local change${e.length===1?"":"s"}`:"Watching agent writes"})]}),i.jsx("button",{type:"button",onClick:l,className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-border bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-foreground","aria-label":"Refresh changed files",title:"Refresh changed files",children:t?i.jsx(Ht,{className:"h-3.5 w-3.5 animate-spin"}):i.jsx(at,{className:"h-3.5 w-3.5"})})]}),i.jsx("div",{className:"border-b border-border/60 px-3 py-2",children:i.jsxs("div",{className:"grid grid-cols-2 rounded-md border border-border bg-background p-0.5 text-[11px] font-medium",children:[i.jsx("button",{type:"button",onClick:()=>o("local"),className:`rounded px-2 py-1 transition-colors ${s==="local"?"bg-foreground text-background shadow-sm":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,title:"Local changes: agent writes and filesystem edits",children:"Local changes"}),i.jsx("button",{type:"button",onClick:()=>o("git"),className:`rounded px-2 py-1 transition-colors ${s==="git"?"bg-foreground text-background shadow-sm":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,title:"Git changes: git status only",children:"Git changes"})]})}),n&&i.jsx("div",{className:"mx-3 mt-3 rounded-md border border-amber-500/25 bg-amber-500/10 px-2 py-1.5 text-[11px] leading-5 text-amber-700 dark:text-amber-200",children:n}),i.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-2",children:e.length===0?i.jsxs("div",{className:"flex h-full flex-col items-center justify-center px-3 text-center text-muted-foreground",children:[i.jsx(Vr,{className:"mb-2 h-8 w-8 opacity-45"}),i.jsx("p",{className:"text-xs font-medium text-foreground",children:"No local changes detected"}),i.jsx("p",{className:"mt-1 text-[11px] leading-5",children:"When an agent writes or edits files, they will appear here."})]}):i.jsxs("div",{className:"space-y-1",children:[e.slice(0,12).map(f=>{const h=r===f.path,g=Dae(f.diffInfo),b=g?`L${g}`:null,x=Oae(f.path,g);return i.jsxs("button",{type:"button",onClick:()=>c(f),className:`group flex w-full items-center gap-2 rounded-md border px-2 py-1.5 text-left transition-all ${h?"changed-file-flash border-emerald-500/60 bg-emerald-500/15":"border-border/60 bg-background/70 hover:border-emerald-500/35 hover:bg-emerald-500/10"}`,title:x,children:[i.jsx("span",{className:`inline-flex h-5 min-w-5 items-center justify-center rounded border px-1 text-[10px] font-semibold ${Fae[f.status]}`,children:Mae[f.status]}),i.jsx("span",{className:"min-w-0 flex-1 truncate font-mono text-[11px] text-foreground",children:f.path}),b&&i.jsx("span",{className:"shrink-0 rounded border border-border bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:b})]},`${f.status}:${f.path}`)}),e.length>12&&i.jsxs("p",{className:"px-1 pt-1 text-[11px] text-muted-foreground",children:["+",e.length-12," more files"]})]})}),u&&i.jsxs("div",{className:"border-t border-border/60 px-3 py-2 text-[10px] text-muted-foreground",children:["Last check ",u]})]})}function Uae(e){return e instanceof Error?`${e.name}: ${e.message}`:String(e)}function $ae({error:e,resetErrorBoundary:t,showDetails:n,componentStack:r}){return i.jsx("div",{className:"flex flex-col items-center justify-center p-8 text-center",children:i.jsxs("div",{className:"max-w-md rounded-lg border border-red-200 bg-red-50 p-6",children:[i.jsxs("div",{className:"mb-4 flex items-center",children:[i.jsx("div",{className:"flex-shrink-0",children:i.jsx("svg",{className:"h-5 w-5 text-red-400",viewBox:"0 0 20 20",fill:"currentColor",children:i.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})})}),i.jsx("h3",{className:"ml-3 text-sm font-medium text-red-800",children:"Something went wrong"})]}),i.jsxs("div",{className:"text-sm text-red-700",children:[i.jsx("p",{className:"mb-2",children:"An error occurred while loading the chat interface."}),n&&i.jsxs("details",{className:"mt-4",children:[i.jsx("summary",{className:"cursor-pointer font-mono text-xs",children:"Error Details"}),i.jsxs("pre",{className:"mt-2 max-h-40 overflow-auto rounded bg-red-100 p-2 text-xs",children:[Uae(e),r]})]})]}),i.jsx("div",{className:"mt-4",children:i.jsx("button",{onClick:t,className:"rounded bg-red-600 px-4 py-2 text-sm text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500",children:"Try Again"})})]})})}function Hae({children:e,showDetails:t=!1,onRetry:n=void 0,resetKeys:r=void 0}){const[a,s]=m.useState(null),o=m.useCallback((d,u)=>{console.error("ErrorBoundary caught an error:",d,u),s(u?.componentStack??null)},[]),l=m.useCallback(()=>{s(null),n?.()},[n]),c=m.useCallback(({error:d,resetErrorBoundary:u})=>i.jsx($ae,{error:d,resetErrorBoundary:u,showDetails:t,componentStack:a}),[t,a]);return i.jsx(e6,{fallbackRender:c,onError:o,onReset:l,resetKeys:r,children:e})}const Gae=new Set(["files","shell","git","changes","liveView"]),Vae=40,Wae=50,qae=46,gN="command-center-tracking-mode";function gd(e){return Gae.has(e)}function Kae(e){return Math.min(Wae,Math.max(Vae,e))}function bN(){return typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches}function Yae({selectedProject:e,selectedSession:t,activeTab:n,setActiveTab:r,ws:a,sendMessage:s,latestMessage:o,isMobile:l,onMenuClick:c,isLoading:d,onInputFocusChange:u,onSessionActive:p,onSessionInactive:f,onSessionProcessing:h,onSessionNotProcessing:g,processingSessions:b,onReplaceTemporarySession:x,onNavigateToSession:v,onShowSettings:y,externalMessageUpdate:w,onQuickStartSession:k,onQuickStartOrchestration:S}){const{preferences:C}=Mu(),{autoExpandTools:A,showRawParameters:R,showThinking:j,autoScrollToBottom:E,sendByCtrlEnter:L}=C,[T,I]=m.useState("split"),[N,O]=m.useState(qae),[$,F]=m.useState(!1),[q,Y]=m.useState(!1),[P,B]=m.useState(()=>typeof window>"u"?"local":window.localStorage.getItem(gN)==="git"?"git":"local"),[V,z]=m.useState(()=>gd(n)?"chat":n),[ee,ae]=m.useState(()=>typeof window<"u"&&window.innerWidth>=1024),ue=gd(n)?n:null,le=!!(ue&&!l&&ee&&T==="split"),se=m.useRef(null),me=m.useRef(null),de=m.useRef(null),we=m.useRef(null),Ce=m.useRef(null);D3(se,n);const{editingFile:je,editorWidth:M,editorExpanded:J,hasManualWidth:te,resizeHandleRef:H,handleFileOpen:U,handleCloseEditor:Q,handleToggleEditorExpand:ge,handleResizeStart:he}=dre({selectedProject:e,isMobile:l}),oe=V==="orchestration"?"orchestration":"chat",Ee=ue?oe:n,fe=!!le,re=!!(ue==="files"&&je&&!l),Z=Ee==="chat"&&(!ue||fe),ce=Ee==="orchestration"&&fe,Se=!!e&&(ue==="files"||ue==="changes"||n==="files"||n==="changes"),{changedFiles:Be,isLoading:qe,error:Je,lastCheckedAt:ht,latestDetectedFile:Xe,refresh:bt}=cre(e,!!e,o,P,{pollingEnabled:Se}),{latestDetectedFile:dt}=LR(e,o,C.autoShowAgentDiff);PR(e,C.autoShowAgentDiff,je?[je.path]:[],U,s);const[st,pt]=m.useState(null),yt=m.useRef(0),It=m.useRef(0),_t=m.useMemo(()=>Be.map(Re=>Re.path),[Be]),gn=m.useCallback(async Re=>{if(Re.diffInfo)return Re.diffInfo;if(!e)return null;try{const $e=await Ne(`/api/git/file-with-diff?project=${encodeURIComponent(e.name)}&file=${encodeURIComponent(Re.path)}`,{cache:"no-store"}),nt=await $e.json();if($e.ok&&!nt.error&&typeof nt.currentContent=="string"&&typeof nt.oldContent=="string")return{old_string:nt.oldContent,new_string:nt.currentContent}}catch{}if(Re.status==="A"||Re.status==="U")try{const $e=await At.readFile(e.name,Re.path);if(!$e.ok)return null;const nt=await $e.json();if(typeof nt.content=="string")return{old_string:"",new_string:nt.content}}catch{return null}return null},[e]),Yt=m.useCallback(Re=>{pt(Re.path),U(Re.path,Re.diffInfo??null),!l&&ee&&I("split"),r("files"),Re.diffInfo||gn(Re).then($e=>{$e&&U(Re.path,$e)})},[ee,U,gn,l,r]),dn=m.useCallback(()=>{I("split"),r(oe)},[r,oe]),bn=Re=>Re==="files"?re?i.jsxs("div",{className:"flex h-full min-w-0 overflow-hidden",children:[!J&&i.jsx("div",{className:"h-full min-w-[220px] max-w-[50%] flex-[0_0_46%] overflow-hidden border-r border-border/60",children:i.jsx(og,{selectedProject:e,onFileOpen:U,changedFilePaths:_t,focusedFilePath:st})}),i.jsx(hN,{editingFile:je,isMobile:l,editorExpanded:J,editorWidth:M,hasManualWidth:te,resizeHandleRef:H,onResizeStart:he,onCloseEditor:Q,onToggleEditorExpand:ge,projectPath:e?.path,fillSpace:!0})]}):i.jsx(og,{selectedProject:e,onFileOpen:U,changedFilePaths:_t,focusedFilePath:st}):Re==="shell"?i.jsx(Ul,{project:e,session:t,showHeader:!1,isActive:n==="shell"}):Re==="changes"?i.jsx(Bae,{changedFiles:Be,isLoading:qe,error:Je,latestChangedFilePath:Xe?.path??st,lastCheckedAt:ht,trackingMode:P,onTrackingModeChange:B,onRefresh:()=>{bt("manual")},onOpenFile:Yt,variant:"panel"}):Re==="liveView"?e?i.jsx(vne,{selectedProject:e,onAvailabilityChange:Y}):null:i.jsx(hR,{selectedProject:e,isMobile:l,onFileOpen:U});m.useEffect(()=>{if(!e){Y(!1);return}let Re=!1;return Ne(`/api/live-view/${encodeURIComponent(e.name)}/status`,{cache:"no-store"}).then($e=>$e.ok?$e.json():null).then($e=>{Re||Y(!!($e?.target?.available||$e?.session))}).catch(()=>{Re||Y(!1)}),()=>{Re=!0}},[e]),m.useEffect(()=>{if(typeof window>"u")return;const Re=()=>{ae(window.innerWidth>=1024)};return Re(),window.addEventListener("resize",Re),()=>{window.removeEventListener("resize",Re)}},[]),m.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(gN,P)},[P]),m.useEffect(()=>{gd(n)||z(n)},[n]);const Le=m.useCallback(Re=>{const $e=typeof Re=="function"?Re(n):Re;!l&&ee&&gd($e)?n===$e?(Ce.current=we.current?.getBoundingClientRect()??null,I(nt=>nt==="split"?"full":"split")):I("split"):(I("split"),z($e)),r($e)},[n,ee,l,r]),Ze=m.useCallback(Re=>{if(!me.current||!fe)return;Re.preventDefault(),Re.currentTarget.setPointerCapture?.(Re.pointerId),F(!0);const $e=Pt=>{const Oe=me.current?.getBoundingClientRect();if(!Oe||Oe.width<=0)return;const Ve=(Oe.right-Pt)/Oe.width*100;O(Kae(Ve))};$e(Re.clientX);const nt=Pt=>{$e(Pt.clientX)},xt=()=>{F(!1),window.removeEventListener("pointermove",nt),window.removeEventListener("pointerup",xt),window.removeEventListener("pointercancel",xt)};window.addEventListener("pointermove",nt),window.addEventListener("pointerup",xt,{once:!0}),window.addEventListener("pointercancel",xt,{once:!0})},[fe]);return m.useLayoutEffect(()=>{const Re=Ce.current,$e=we.current;if(!Re||!$e||bN()){Ce.current=null;return}const nt=$e.getBoundingClientRect();if(nt.width<=0||nt.height<=0){Ce.current=null;return}const xt=Re.left-nt.left,Pt=Re.width/nt.width;kr.fromTo($e,{x:xt,scaleX:Pt,opacity:.94,transformOrigin:"right center"},{x:0,scaleX:1,opacity:1,duration:on.duration.enter,ease:on.ease.soft,clearProps:"transform,opacity,transformOrigin"}),Ce.current=null},[T,le]),m.useEffect(()=>{le||F(!1)},[le]),m.useEffect(()=>{if(!fe||bN())return;const Re=de.current,$e=we.current;if(!Re||!$e)return;const nt=kr.context(()=>{kr.fromTo(Re,{opacity:.92,x:-14},{opacity:1,x:0,duration:on.duration.base,ease:on.ease.out,clearProps:"transform,opacity"}),kr.fromTo($e,{opacity:0,x:28,scaleX:.96,transformOrigin:"right center"},{opacity:1,x:0,scaleX:1,duration:on.duration.enter,ease:on.ease.soft,clearProps:"transform,opacity,transformOrigin"})},me);return()=>nt.revert()},[ue,fe]),m.useEffect(()=>{Xe&&Xe.detectedAt!==yt.current&&(yt.current=Xe.detectedAt,pt(Xe.path))},[Xe]),m.useEffect(()=>{if(!dt||dt.detectedAt===It.current||(It.current=dt.detectedAt,C.autoShowAgentDiff==="off"))return;const{path:Re,diffInfo:$e}=dt,nt=je?.path?.replace(/\\/g,"/"),xt=Re.replace(/\\/g,"/");if(nt===xt){U(Re,$e);return}C.autoShowAgentDiff==="always"&&(U(Re,$e),!l&&ee&&I("split"),r("files"))},[dt,C.autoShowAgentDiff,je?.path,U,l,ee,r]),m.useEffect(()=>{if(!st)return;const Re=window.setTimeout(()=>pt(null),7e3);return()=>window.clearTimeout(Re)},[st]),d?i.jsx(fg,{mode:"loading",isMobile:l,onMenuClick:c}):!e&&n==="controlRoom"?i.jsxs("div",{className:"flex h-full flex-col",children:[i.jsx(fN,{activeTab:n,setActiveTab:Le,selectedProject:null,selectedSession:null,liveViewAvailable:!1,activeSidePanelTab:null,sidePanelMode:T,canUseSidePanelSplit:ee,isMobile:l,onMenuClick:c}),i.jsx("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:i.jsx("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",children:i.jsx(pg,{selectedProject:null})})})]}):e?i.jsxs("div",{className:"flex h-full flex-col",children:[i.jsx(fN,{activeTab:n,setActiveTab:Le,selectedProject:e,selectedSession:t,liveViewAvailable:q,activeSidePanelTab:ue,sidePanelMode:T,canUseSidePanelSplit:ee,isMobile:l,onCloseSidePanel:ue?dn:void 0,onMenuClick:c}),i.jsxs("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:[i.jsxs("div",{ref:se,className:xe("flex min-h-0 min-w-[200px] flex-1 flex-col overflow-hidden",J&&"hidden",!je&&!ue&&!le&&"mx-auto w-full max-w-[1100px] px-4 md:px-8",!je&&ue&&!fe&&"w-full px-3 md:px-4",!je&&fe&&"w-full px-3 md:px-4",!je&&n==="orchestration"&&"max-w-none px-0 md:px-0",!je&&n==="remote"&&"max-w-none px-0 md:px-0",!je&&n==="controlRoom"&&"max-w-none px-0 md:px-0"),children:[(Z||ce||ue)&&i.jsxs("div",{ref:me,className:xe("h-full min-h-0",fe&&"flex overflow-hidden",$&&"select-none"),children:[Z&&i.jsx("div",{ref:de,className:xe("min-h-0 overflow-hidden",fe&&"min-w-[320px] flex-none transition-[width,opacity,transform] duration-300 ease-out",$&&"transition-none",!fe&&"h-full"),style:fe?{width:`${100-N}%`}:void 0,children:i.jsx("div",{className:"flex h-full min-h-0 min-w-0 flex-1",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(Hae,{showDetails:!0,children:i.jsx(_ee,{selectedProject:e,selectedSession:t,ws:a,sendMessage:s,latestMessage:o,onFileOpen:U,onInputFocusChange:u,onSessionActive:p,onSessionInactive:f,onSessionProcessing:h,onSessionNotProcessing:g,processingSessions:b,onReplaceTemporarySession:x,onNavigateToSession:v,onShowSettings:y,autoExpandTools:A,showRawParameters:R,showThinking:j,autoScrollToBottom:E,sendByCtrlEnter:L,externalMessageUpdate:w})})})})}),ce&&i.jsx("div",{ref:de,className:xe("min-h-0 overflow-hidden",fe&&"min-w-[320px] flex-none transition-[width,opacity,transform] duration-300 ease-out",$&&"transition-none"),style:fe?{width:`${100-N}%`}:void 0,children:i.jsx("div",{className:"flex h-full min-h-0 min-w-0 flex-1",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(M5,{selectedProject:e})})})}),fe&&i.jsxs("button",{type:"button",className:"group relative z-20 mx-1 flex w-3 shrink-0 cursor-col-resize touch-none items-center justify-center rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",onPointerDown:Ze,"aria-label":"Resize side panel",title:"Drag to resize",children:[i.jsx("span",{className:"absolute inset-y-3 -left-2 -right-2 rounded-full"}),i.jsx("span",{className:xe("h-16 w-1 rounded-full bg-border transition-all duration-200 group-hover:h-24 group-hover:bg-foreground/40",$&&"h-28 bg-foreground/55 shadow-[0_0_18px_rgba(120,120,120,0.22)]")})]}),ue&&i.jsx("div",{ref:we,className:xe("min-h-0 overflow-hidden rounded-lg border border-border/60 bg-card/40",fe&&"min-w-[360px] flex-none shadow-sm transition-[width,opacity,transform] duration-300 ease-out",$&&"transition-none",!fe&&"h-full w-full"),style:fe?{width:`${N}%`}:void 0,children:bn(ue)})]}),!ue&&n==="orchestration"&&i.jsx("div",{className:"flex h-full min-h-0 min-w-0 overflow-hidden",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(M5,{selectedProject:e})})}),!ue&&n==="remote"&&i.jsx("div",{className:"flex h-full min-h-0 min-w-0 overflow-hidden",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(CR,{})})}),!ue&&n==="controlRoom"&&i.jsx("div",{className:"flex h-full min-h-0 min-w-0 overflow-hidden",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(pg,{selectedProject:e})})}),i.jsx("div",{className:`h-full overflow-hidden ${n==="preview"?"block":"hidden"}`}),n.startsWith("plugin:")&&i.jsx("div",{className:"h-full overflow-hidden",children:i.jsx(jR,{pluginName:n.replace("plugin:",""),selectedProject:e,selectedSession:t})})]}),!re&&i.jsx(hN,{editingFile:je,isMobile:l,editorExpanded:J,editorWidth:M,hasManualWidth:te,resizeHandleRef:H,onResizeStart:he,onCloseEditor:Q,onToggleEditorExpand:ge,projectPath:e.path,fillSpace:n==="files"})]})]}):i.jsx(fg,{mode:"empty",isMobile:l,onMenuClick:c,onQuickStartSession:k,onQuickStartOrchestration:S,onOpenControlRoom:()=>r("controlRoom")})}const Zae=Qn.memo(Yae),n6="pixcode.inAppNotifications.v1",Xae="pixcode.notificationPreferences.v1",lw=25;function Jae(){try{const e=JSON.parse(localStorage.getItem(n6)??"[]");return Array.isArray(e)?e.slice(0,lw):[]}catch{return[]}}function xN(e){try{localStorage.setItem(n6,JSON.stringify(e.slice(0,lw)))}catch{}}function vN(){try{return JSON.parse(localStorage.getItem(Xae)??"null")?.channels?.inApp!==!1}catch{return!0}}function Qae(e){if(!e||typeof e!="object")return null;const t=e;return typeof t.id!="string"||typeof t.title!="string"||typeof t.body!="string"?null:{id:t.id,title:t.title,body:t.body,eventType:t.eventType,category:t.category,preferenceKey:t.preferenceKey,kind:t.kind,code:t.code,severity:t.severity||"info",provider:t.provider??null,sessionId:t.sessionId??null,createdAt:t.createdAt||new Date().toISOString(),data:t.data}}function eie(e){return e==="error"?"border-red-500/50 bg-red-50 text-red-950 dark:bg-red-950/35 dark:text-red-50":e==="warning"?"border-amber-500/50 bg-amber-50 text-amber-950 dark:bg-amber-950/35 dark:text-amber-50":"border-border bg-card text-card-foreground"}function tie(e){if(!e)return"";try{return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit"}).format(new Date(e))}catch{return""}}function r6({latestMessage:e,variant:t="floating"}){const{t:n}=Me("common"),[r,a]=m.useState(()=>typeof window>"u"?[]:Jae()),[s,o]=m.useState(!1),[l,c]=m.useState(()=>new Set),[d,u]=m.useState(()=>typeof window>"u"?!0:vN());m.useEffect(()=>{const w=()=>u(vN());return window.addEventListener("storage",w),window.addEventListener("pixcode:notification-preferences-changed",w),()=>{window.removeEventListener("storage",w),window.removeEventListener("pixcode:notification-preferences-changed",w)}},[]),m.useEffect(()=>{const w=e;if(!w||w.type!=="notification:event")return;const k=Qae(w.notification);k&&(YN({key:k.id,title:k.title,body:k.body,event:k.eventType||k.kind||"updates",tag:typeof k.data?.tag=="string"?k.data.tag:k.id,data:k.data}),d&&(a(S=>{if(S.some(A=>A.id===k.id))return S;const C=[k,...S].slice(0,lw);return xN(C),C}),c(S=>{const C=new Set(S);return C.delete(k.id),C}),o(!0)))},[d,e]);const p=m.useMemo(()=>r.filter(w=>!l.has(w.id)).length,[r,l]),f=m.useCallback(()=>{c(new Set(r.map(w=>w.id)))},[r]),h=m.useCallback(w=>{a(k=>{const S=k.filter(C=>C.id!==w);return xN(S),S}),c(k=>{const S=new Set(k);return S.delete(w),S})},[]);if(!d||t==="floating"&&r.length===0)return null;const g=p>0,b=t==="inline"?"relative flex h-full items-center":"pointer-events-none fixed right-3 top-3 z-50 flex max-w-[calc(100vw-1.5rem)] flex-col items-end gap-2",x=g?$d:Ng,v=t==="inline"?`relative inline-flex h-7 w-7 items-center justify-center rounded border transition-colors ${g?"border-red-500/70 bg-red-500/10 text-red-600 hover:bg-red-500/15 dark:text-red-300":"border-border bg-transparent text-muted-foreground hover:bg-muted hover:text-foreground"}`:`pointer-events-auto relative inline-flex h-9 w-9 items-center justify-center rounded-md border bg-background/95 shadow-md shadow-black/10 backdrop-blur transition-colors hover:bg-muted ${g?"border-red-500/70 text-red-600 dark:text-red-300":"border-border text-foreground"}`,y=t==="inline"?"absolute right-0 top-full z-50 mt-1 w-[min(22rem,calc(100vw-1.5rem))] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-xl shadow-black/10":"pointer-events-auto w-[min(22rem,calc(100vw-1.5rem))] overflow-hidden rounded-lg border border-border bg-popover shadow-xl shadow-black/10";return i.jsxs("div",{className:b,children:[i.jsxs("button",{type:"button",onClick:()=>{o(w=>!w),s||f()},className:v,"aria-label":n("notifications.open",{defaultValue:"Open notifications"}),children:[i.jsx(x,{className:"h-4 w-4"}),g&&i.jsx("span",{className:"absolute -right-1 -top-1 min-w-4 rounded-full bg-red-600 px-1 text-[10px] font-semibold leading-4 text-white",children:p>9?"9+":p})]}),s&&i.jsxs("div",{className:y,children:[i.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-border px-3 py-2",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx($d,{className:"h-4 w-4 flex-shrink-0 text-primary"}),i.jsx("span",{className:"truncate text-sm font-medium text-popover-foreground",children:n("notifications.title",{defaultValue:"Notifications"})}),g&&i.jsx("span",{className:"rounded-full bg-red-600 px-2 py-0.5 text-xs font-medium text-white",children:p})]}),i.jsxs("div",{className:"flex items-center gap-1",children:[i.jsx("button",{type:"button",onClick:f,className:"rounded px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",children:n("notifications.markRead",{defaultValue:"Read"})}),i.jsx("button",{type:"button",onClick:()=>o(!1),className:"rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground","aria-label":n("notifications.close",{defaultValue:"Close notifications"}),children:i.jsx(St,{className:"h-4 w-4"})})]})]}),i.jsxs("div",{className:"max-h-[22rem] space-y-2 overflow-y-auto p-2",children:[r.length===0&&i.jsx("div",{className:"rounded-md border border-dashed border-border p-4 text-center text-sm text-muted-foreground",children:n("notifications.empty",{defaultValue:"No notifications yet"})}),r.slice(0,6).map(w=>i.jsx("div",{className:`rounded-md border p-3 shadow-sm ${eie(w.severity)}`,children:i.jsxs("div",{className:"flex items-start justify-between gap-3",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[!l.has(w.id)&&i.jsx("span",{className:"h-2 w-2 flex-shrink-0 rounded-full bg-primary"}),i.jsx("p",{className:"truncate text-sm font-medium",children:w.title})]}),i.jsx("p",{className:"mt-1 text-sm leading-5 opacity-85",children:w.body}),i.jsx("p",{className:"mt-2 text-xs opacity-60",children:tie(w.createdAt)})]}),i.jsx("button",{type:"button",onClick:()=>h(w.id),className:"rounded p-1 opacity-60 transition-opacity hover:opacity-100","aria-label":n("notifications.dismiss",{defaultValue:"Dismiss notification"}),children:i.jsx(St,{className:"h-4 w-4"})})]})},w.id))]})]})]})}const nie=260,rie=520,aie=340,iie=320,sie=680,oie=420,lie=150,cie=560,die=256,a6="pixcode.workbench.workspaceTabs.v1",i6="pixcode.workbench.cliState.v1",s6="pixcode.workbench.editorState.v1",cw=10,o6=["claude","codex","cursor","gemini","qwen","opencode"],l6=30;function Lh(e,t,n){return Math.min(n,Math.max(t,e))}function bd(e){return e==="remote"||e==="controlRoom"||e.startsWith("plugin:")}function uie(e){return e==="git"||e==="changes"?"sourceControl":"explorer"}function $a(e){return e.fullPath||e.path||e.displayName||e.name}function wu(e){const t=$a(e),r=t.replace(/\\/g,"/").split("/").filter(Boolean);return r.length===0?t||e.name:`/${r[r.length-1]}`}function c6(e,t){return typeof e!="number"||!Number.isFinite(e)?t("vscodeWorkbench.projects.fileCountPending",{defaultValue:"Files pending"}):t("vscodeWorkbench.projects.fileCount",{count:e,formattedCount:e.toLocaleString(),defaultValue:"{{formattedCount}} files"})}function Zi(e){return(e.fullPath||e.path||e.name).replace(/\\/g,"/")}function pie(e){return e?$a(e).replace(/\\/g,"/"):null}function mie(e){return e?$a(e).replace(/\\/g,"/"):null}function hie(e){return typeof e=="string"&&o6.includes(e)}function fie(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e;return typeof t.name=="string"&&typeof t.path=="string"}function gie(){if(typeof window>"u")return[];try{const e=JSON.parse(window.localStorage.getItem(a6)??"[]");return Array.isArray(e)?e.filter(t=>typeof t.id=="string"&&typeof t.projectName=="string").slice(0,cw):[]}catch{return[]}}function bie(e){if(!(typeof window>"u"))try{window.localStorage.setItem(a6,JSON.stringify(e.slice(0,cw)))}catch{}}function d6(){if(typeof window>"u")return{};try{const e=JSON.parse(window.localStorage.getItem(i6)??"{}");return!e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return{}}}function xie(e){if(!e)return null;const t=d6()[e];return!t||!hie(t.provider)?null:{provider:t.provider,isTerminalOpen:!!t.isTerminalOpen,sessionId:typeof t.sessionId=="string"?t.sessionId:null,tabs:Array.isArray(t.tabs)?t.tabs.filter(n=>n&&typeof n.id=="string"&&typeof n.tabId=="string"&&(n.type==="provider"||n.type==="plain")):[],activeTabId:typeof t.activeTabId=="string"?t.activeTabId:null,updatedAt:typeof t.updatedAt=="number"?t.updatedAt:Date.now()}}function vie(e,t){if(!(!e||typeof window>"u"))try{const n=d6();window.localStorage.setItem(i6,JSON.stringify({...n,[e]:t}))}catch{}}function u6(){if(typeof window>"u")return{};try{const e=JSON.parse(window.localStorage.getItem(s6)??"{}");return!e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return{}}}function yie(e){if(!e)return null;const t=u6()[e];if(!t||!Array.isArray(t.tabs))return null;const n=t.tabs.filter(fie).slice(0,l6),r=typeof t.activePath=="string"&&n.some(s=>s.path===t.activePath)?t.activePath:n[0]?.path??null,a=typeof t.splitPath=="string"&&n.some(s=>s.path===t.splitPath)?t.splitPath:null;return{tabs:n,activePath:r,splitPath:a,updatedAt:typeof t.updatedAt=="number"?t.updatedAt:Date.now()}}function wie(e,t){if(!(!e||typeof window>"u"))try{const n=u6();window.localStorage.setItem(s6,JSON.stringify({...n,[e]:{...t,tabs:t.tabs.slice(0,l6)}}))}catch{}}function kie(e,t){return{id:Zi(e),projectName:e.name,path:$a(e),label:t,starred:!1}}function Sie({sidebarProps:e,selectedProject:t,selectedSession:n,activeTab:r,setActiveTab:a,latestMessage:s,sendMessage:o,onMenuClick:l,isLoading:c,onShowSettings:d,onQuickStartSession:u}){const{t:p}=Me("common"),f=m.useRef(null),[h,g]=m.useState(aie),[b,x]=m.useState(oie),[v,y]=m.useState(!1),[w,k]=m.useState(!1),[S,C]=m.useState(null),[A,R]=m.useState(!1),[j,E]=m.useState(0),[L,T]=m.useState(!1),[I,N]=m.useState(null),[O,$]=m.useState(die),[F,q]=m.useState("half"),[Y,P]=m.useState(!1),B=Pg("alicomert","pixcode"),{preferences:V}=Mu(),{latestDetectedFile:z}=LR(t,s,V.autoShowAgentDiff),[ee,ae]=m.useState("projects"),[ue,le]=m.useState(null),[se,me]=m.useState([]),[de,we]=m.useState(null),[Ce,je]=m.useState(null),[M,J]=m.useState(null),[te,H]=m.useState(gie),[U,Q]=m.useState(null),ge=m.useRef(null),he=m.useMemo(()=>mie(t),[t]),oe=m.useRef(!1),Ee=m.useRef(null);m.useEffect(()=>{bd(r)||r==="chat"&&ee==="projects"||ae(uie(r))},[r,ee]),m.useEffect(()=>{if(Ee.current===he)return;Ee.current=he,oe.current=!0,je(null),J(null);const ye=yie(he),Fe=ye?.tabs??[];me(Fe),we(ye?.activePath??Fe[0]?.path??null),je(ye?.splitPath?Fe.find(W=>W.path===ye.splitPath)??null:null)},[he]),m.useEffect(()=>{if(oe.current){oe.current=!1;return}if(!he)return;const ye=de&&se.some(W=>W.path===de)?de:se[0]?.path??null,Fe=Ce&&se.some(W=>W.path===Ce.path)?Ce.path:null;wie(he,{tabs:se,activePath:ye,splitPath:Fe,updatedAt:Date.now()})},[de,he,se,Ce]),m.useEffect(()=>{t&&H(ye=>{const Fe=Zi(t),W=ye.find(pe=>pe.id===Fe);if(W)return ye.map(pe=>pe.id===Fe?{...W,projectName:t.name,path:$a(t)}:pe);const ve=`Workspace ${ye.length+1}`;return[...ye,kie(t,ve)].slice(-cw)})},[t]),m.useEffect(()=>{bie(te)},[te]);const fe=m.useCallback((ye,Fe=null)=>{const pe={name:ye.replace(/\\/g,"/").split("/").pop()||ye,path:ye,projectName:t?.name,diffInfo:Fe};me(Ae=>{const Ue=Ae.findIndex(tt=>tt.path===ye);if(Ue===-1)return[...Ae,pe];const ot=[...Ae];return ot[Ue]=pe,ot}),we(ye),a("files")},[t?.name,a]),re=m.useCallback((ye,Fe)=>{const W=ye.replace(/\\/g,"/");me(ve=>{const pe=ve.findIndex(Ue=>Ue.path===W);if(pe===-1)return ve;const Ae=[...ve];return Ae[pe]={...Ae[pe],diffInfo:Fe},Ae})},[]),Z=m.useCallback((ye,Fe)=>{se.some(ve=>ve.path===ye)?re(ye,Fe):fe(ye,Fe)},[se,re,fe]);PR(t,V.autoShowAgentDiff,se.map(ye=>ye.path),Z,o);const ce=m.useCallback(ye=>{const Fe=ye.replace(/\\/g,"/");me(W=>{const ve=W.findIndex(Ue=>Ue.path===Fe);if(ve===-1)return W;const pe=W[ve];if(!pe.diffInfo)return W;const Ae=[...W];return Ae[ve]={...pe,diffInfo:null},Ae})},[]);m.useEffect(()=>{if(!z||V.autoShowAgentDiff==="off")return;const{path:ye,diffInfo:Fe}=z;if(se.some(ve=>ve.path===ye)){re(ye,Fe);return}V.autoShowAgentDiff==="always"&&fe(ye,Fe)},[z,V.autoShowAgentDiff,se,re,fe]),m.useEffect(()=>{if(typeof window>"u")return;const ye=Fe=>{const W=Fe.detail;typeof W?.path=="string"&&W.path&&ce(W.path)};return window.addEventListener("pixcode:file-saved",ye),()=>{window.removeEventListener("pixcode:file-saved",ye)}},[ce]);const Se=m.useCallback(ye=>{me(Fe=>{const W=Fe.filter(ve=>ve.path!==ye);return we(ve=>ve!==ye?ve:W[W.length-1]?.path??null),W})},[]),Be=m.useCallback(()=>{me([]),we(null),je(null),J(null)},[]),qe=m.useCallback(ye=>{navigator.clipboard?.writeText(ye),J(null)},[]),Je=m.useCallback((ye,Fe=!1)=>{const W=se.find(ve=>ve.path===ye);W&&(je(W),Fe&&me(ve=>{const pe=ve.filter(Ae=>Ae.path!==ye);return we(Ae=>Ae!==ye?Ae:pe[pe.length-1]?.path??null),pe}),J(null))},[se]),ht=m.useCallback((ye,Fe)=>{ye.preventDefault(),J({filePath:Fe,x:ye.clientX,y:ye.clientY})},[]),Xe=m.useCallback(()=>{N(t??null),T(!1),R(!0),q("half"),E(ye=>ye+1)},[t]),bt=m.useMemo(()=>se.find(ye=>ye.path===de)??se[0]??null,[de,se]),dt=I??t;m.useEffect(()=>{let ye=!1;const Fe=async()=>{try{const ve=await Ne("/api/system/update-state",{cache:"no-store"});if(!ve.ok)return;const pe=await ve.json();ye||P(!!pe?.state?.pendingRestart)}catch{}};Fe(),window.addEventListener("focus",Fe);const W=window.setInterval(Fe,6e4);return()=>{ye=!0,window.removeEventListener("focus",Fe),window.clearInterval(W)}},[]);const st=m.useCallback(()=>{window.dispatchEvent(new CustomEvent(Hd,{detail:{updateAvailable:B.updateAvailable,latestVersion:B.latestVersion,currentVersion:B.currentVersion,releaseInfo:B.releaseInfo,installMode:B.installMode}}))},[B]),pt=m.useMemo(()=>[{id:"explorer",icon:Fn,label:p("vscodeWorkbench.activity.explorer"),tab:"files"},{id:"projects",icon:En,label:p("vscodeWorkbench.activity.projects"),tab:"chat"},{id:"sourceControl",icon:zn,label:p("vscodeWorkbench.activity.sourceControl"),tab:"git"},{id:"terminal",icon:Ln,label:p("vscodeWorkbench.activity.terminal"),tab:"shell"}],[p]),yt=m.useMemo(()=>[{id:"controlRoom",icon:Fr,label:p("tabs.controlRoom"),tab:"controlRoom"},{id:"remote",icon:To,label:p("tabs.remote"),tab:"remote"}],[p]),It=m.useCallback((ye,Fe)=>{Fe.preventDefault(),Fe.currentTarget.setPointerCapture?.(Fe.pointerId),le(ye)},[]);m.useEffect(()=>{if(!ue)return;const ye=W=>{const ve=f.current?.getBoundingClientRect();if(ve){if(ue==="left"){g(Lh(W.clientX-ve.left,nie,rie));return}if(ue==="bottom"){$(Lh(ve.bottom-W.clientY,lie,cie));return}x(Lh(ve.right-W.clientX,iie,sie))}},Fe=()=>le(null);return window.addEventListener("pointermove",ye),window.addEventListener("pointerup",Fe,{once:!0}),window.addEventListener("pointercancel",Fe,{once:!0}),document.body.style.cursor=ue==="bottom"?"ns-resize":"col-resize",document.body.style.userSelect="none",()=>{window.removeEventListener("pointermove",ye),window.removeEventListener("pointerup",Fe),window.removeEventListener("pointercancel",Fe),document.body.style.cursor="",document.body.style.userSelect=""}},[ue]);const _t=m.useCallback((ye,Fe)=>{if(ye==="terminal"){if(!t){ae("projects"),a("chat");return}A&&F==="full"?q("half"):A?R(!1):Xe(),r==="shell"&&a("files");return}if(ae(ye),y(!1),ye==="projects"){a("chat");return}(Fe!=="chat"||!bd(r))&&a(Fe)},[r,F,A,Xe,t,a]),gn=m.useCallback(()=>{R(!1),N(null)},[]),Yt=m.useCallback(()=>{q("full")},[]),dn=m.useCallback(()=>{q("half")},[]),bn=m.useCallback(ye=>{a(ye)},[a]),Le=m.useCallback(ye=>{window.dispatchEvent(new CustomEvent("pixcode:create-project",{detail:{workspaceType:ye}}))},[]),Ze=m.useCallback(ye=>{e.onProjectSelect(ye),ae("explorer"),a("files")},[a,e]),Re=m.useCallback(ye=>{const Fe=e.projects.find(W=>W.name===ye.projectName||Zi(W)===ye.id);Fe&&Ze(Fe)},[Ze,e.projects]),$e=m.useCallback(ye=>{H(Fe=>{const W=Fe.filter(pe=>pe.id!==ye);if(t&&Zi(t)===ye){const pe=W[W.length-1],Ae=pe?e.projects.find(Ue=>Ue.name===pe.projectName||Zi(Ue)===pe.id):null;Ae&&window.setTimeout(()=>Ze(Ae),0)}return W})},[Ze,t,e.projects]),nt=m.useCallback(ye=>{H(Fe=>Fe.filter(W=>W.id===ye))},[]),xt=m.useCallback(()=>{H([])},[]),Pt=m.useCallback((ye,Fe)=>{const W=Fe.trim();W&&H(ve=>ve.map(pe=>pe.id===ye?{...pe,label:W}:pe))},[]),Oe=m.useCallback(ye=>{H(Fe=>Fe.map(W=>W.id===ye?{...W,starred:!W.starred}:W))},[]),Ve=()=>ee==="projects"?i.jsx(Lie,{projects:e.projects,selectedProject:t,onProjectSelect:Ze,onNewSession:e.onNewSession,onOpenProject:()=>Le("existing"),onCloneProject:()=>Le("new"),onRefresh:e.onRefresh,isRefreshing:e.isLoading,t:p}):ee==="sourceControl"?i.jsx(hR,{selectedProject:t,isMobile:!1,compact:!0,onFileOpen:fe}):i.jsx(jie,{selectedProject:t,onFileOpen:fe,t:p}),mt=()=>c?i.jsx(fg,{mode:"loading",isMobile:!1,onMenuClick:l}):r==="remote"?i.jsx(CR,{}):r==="controlRoom"?i.jsx(pg,{selectedProject:t}):r.startsWith("plugin:")?i.jsx(jR,{pluginName:r.replace("plugin:",""),selectedProject:t,selectedSession:n}):t?bt?i.jsxs("div",{className:"flex h-full min-h-0 flex-col bg-background",children:[i.jsxs("div",{className:"flex h-9 shrink-0 items-center border-b border-border bg-muted/20",children:[i.jsx("div",{ref:ge,className:"flex min-w-0 flex-1 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:se.map(ye=>{const Fe=ye.path===bt.path;return i.jsxs("button",{type:"button",className:xe("group flex h-9 w-44 shrink-0 items-center gap-2 border-r border-border px-2.5 text-xs transition-colors",Fe?"bg-background text-foreground":"text-muted-foreground hover:bg-muted/50 hover:text-foreground"),onClick:()=>we(ye.path),onMouseDown:W=>{W.button===1&&(W.preventDefault(),Se(ye.path))},onAuxClick:W=>{W.button===1&&W.preventDefault()},onContextMenu:W=>ht(W,ye.path),title:ye.path,children:[i.jsx(En,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"min-w-0 flex-1 truncate text-left",children:ye.name}),i.jsx("span",{role:"button",tabIndex:0,className:"rounded p-0.5 text-muted-foreground opacity-70 transition hover:bg-muted hover:text-foreground group-hover:opacity-100",onClick:W=>{W.stopPropagation(),Se(ye.path)},onKeyDown:W=>{(W.key==="Enter"||W.key===" ")&&(W.preventDefault(),W.stopPropagation(),Se(ye.path))},"aria-label":p("vscodeWorkbench.editor.closeTab",{file:ye.name,defaultValue:"Close {{file}}"}),title:p("vscodeWorkbench.editor.closeTab",{file:ye.name,defaultValue:"Close {{file}}"}),children:i.jsx(St,{className:"h-3 w-3"})})]},ye.path)})}),i.jsx("button",{type:"button",className:"flex h-full w-8 shrink-0 items-center justify-center border-l border-border text-muted-foreground hover:bg-muted hover:text-foreground",onClick:()=>J({filePath:bt.path,x:window.innerWidth-220,y:84}),"aria-label":p("vscodeWorkbench.editor.moreActions",{defaultValue:"More tab actions"}),title:p("vscodeWorkbench.editor.moreActions",{defaultValue:"More tab actions"}),children:i.jsx(k4,{className:"h-4 w-4"})})]}),i.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:Ce?i.jsxs("div",{className:"flex h-full min-w-0",children:[bt&&i.jsx("div",{className:"min-w-0 flex-1 border-r border-border",children:i.jsx(Ml,{file:bt,onClose:()=>Se(bt.path),projectPath:t.path||t.fullPath,isSidebar:!0})}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsxs("div",{className:"flex h-8 items-center justify-between border-b border-border bg-muted/20 px-2",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-xs text-muted-foreground",children:[i.jsx(En,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:Ce.name})]}),i.jsx("button",{type:"button",className:"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground",onClick:()=>je(null),"aria-label":p("vscodeWorkbench.editor.closeSplit",{defaultValue:"Close split editor"}),title:p("vscodeWorkbench.editor.closeSplit",{defaultValue:"Close split editor"}),children:i.jsx(St,{className:"h-3.5 w-3.5"})})]}),i.jsx("div",{className:"h-[calc(100%-2rem)] min-h-0 overflow-hidden",children:i.jsx(Ml,{file:Ce,onClose:()=>je(null),projectPath:t.path||t.fullPath,isSidebar:!0})})]})]}):i.jsx(Ml,{file:bt,onClose:()=>Se(bt.path),projectPath:t.path||t.fullPath,isSidebar:!0})}),M&&i.jsx(Tie,{context:M,file:se.find(ye=>ye.path===M.filePath)??null,onClose:()=>J(null),onCloseTab:Se,onCloseAll:Be,onCopyPath:qe,onSplitRight:ye=>Je(ye),onSplitMoveRight:ye=>Je(ye,!0),t:p})]}):i.jsx("div",{className:"flex h-full items-center justify-center bg-background",children:i.jsxs("div",{className:"max-w-md px-6 text-center",children:[i.jsx(Ys,{className:"mx-auto mb-4 h-10 w-10 text-muted-foreground/60"}),i.jsx("div",{className:"text-sm font-medium text-foreground",children:p("vscodeWorkbench.editor.emptyTitle")}),i.jsx("p",{className:"mt-2 text-xs leading-5 text-muted-foreground",children:t.displayName||t.name})]})}):i.jsx(Rie,{projects:e.projects,onProjectSelect:Ze,onNewSession:e.onNewSession,onOpenProject:()=>Le("existing"),onCloneProject:()=>Le("new"),onQuickStartSession:u,onShowSettings:d,t:p}),et=()=>i.jsx(_ie,{project:t,onHeaderContentChange:C,t:p});return i.jsxs("div",{className:"flex h-full min-w-0 flex-1 flex-col overflow-hidden bg-background text-foreground",children:[i.jsx(J3,{...e,isMobile:!1,modalsOnly:!0}),i.jsx(Cie,{t:p,latestMessage:s,onOpenProject:Le,onActivityPanel:_t,onSystemTab:bn,onShowSettings:d,onQuickStartSession:u}),i.jsx(Nie,{tabs:te,projects:e.projects,selectedProject:t,onSelect:Re,onClose:$e,onCloseOthers:nt,onCloseAll:xt,onRename:Pt,onToggleStar:Oe,contextMenu:U,onContextMenuChange:Q,onAdd:()=>Le("existing"),isCliPanelCollapsed:w,onToggleCliPanel:()=>k(ye=>!ye),t:p}),i.jsxs("div",{ref:f,className:xe("flex min-h-0 min-w-0 flex-1 overflow-hidden",ue&&"select-none"),children:[i.jsxs("aside",{className:"flex h-full w-12 shrink-0 flex-col border-r border-border bg-muted/30",children:[i.jsx("div",{className:"flex h-11 items-center justify-center border-b border-border",children:i.jsx(Du,{className:"h-5 w-5 text-primary"})}),i.jsxs("div",{className:"flex flex-1 flex-col items-center gap-1 py-2",children:[pt.map(ye=>i.jsx(ul,{label:ye.label,icon:ye.icon,active:ye.id==="terminal"?A:!v&&ee===ye.id&&!bd(r),onClick:()=>_t(ye.id,ye.tab)},ye.id)),i.jsx(ul,{label:Y?p("vscodeWorkbench.activity.updateReady",{defaultValue:"Update ready"}):p("vscodeWorkbench.activity.update",{defaultValue:"Update"}),icon:at,active:!1,badge:B.updateAvailable||Y,onClick:st})]}),i.jsxs("div",{className:"flex flex-col items-center gap-1 border-t border-border py-2",children:[yt.map(ye=>i.jsx(ul,{label:ye.label,icon:ye.icon,active:r===ye.tab,onClick:()=>bn(ye.tab)},ye.id)),i.jsx(ul,{label:p(v?"vscodeWorkbench.activity.showPanel":"vscodeWorkbench.activity.hidePanel"),icon:v?ju:Au,active:!1,onClick:()=>y(ye=>!ye)}),i.jsx(ul,{label:p("navigation.settings"),icon:Dt,active:!1,onClick:d})]})]}),!v&&i.jsxs(i.Fragment,{children:[i.jsxs("section",{className:"h-full shrink-0 overflow-hidden border-r border-border bg-background",style:{width:h},children:[i.jsx("div",{className:"flex h-10 items-center justify-between border-b border-border px-3",children:i.jsx("div",{className:"truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:p(`vscodeWorkbench.panels.${ee}`)})}),i.jsx("div",{className:"h-[calc(100%-2.5rem)] min-h-0 overflow-hidden",children:Ve()})]}),i.jsx(yN,{label:p("vscodeWorkbench.resize.left"),active:ue==="left",onPointerDown:ye=>It("left",ye)})]}),i.jsxs("main",{className:"min-w-0 flex-1 overflow-hidden border-r border-border bg-background",children:[i.jsxs("div",{className:"flex h-10 items-center justify-between border-b border-border px-3",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx(Lu,{className:"h-4 w-4 text-muted-foreground"}),i.jsx("span",{className:"truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:bd(r)?p(`tabs.${r==="controlRoom"?"controlRoom":r}`):p("vscodeWorkbench.panels.editor")})]}),i.jsx("span",{className:"truncate text-xs text-muted-foreground",children:t?.displayName||t?.name||p("vscodeWorkbench.noProject")})]}),i.jsxs("div",{className:"relative flex h-[calc(100%-2.5rem)] min-h-0 flex-col overflow-hidden",children:[i.jsx("div",{className:xe("min-h-0 flex-1 overflow-hidden",A&&F==="half"&&"border-b border-border"),children:mt()}),A&&i.jsx(Aie,{project:dt,runId:j,forceNewSession:L,height:O,viewMode:F,isActive:!0,onResizeStart:ye=>It("bottom",ye),onShowFull:Yt,onShowHalf:dn,onClose:gn,t:p})]})]}),!w&&i.jsxs(i.Fragment,{children:[i.jsx(yN,{label:p("vscodeWorkbench.resize.right"),active:ue==="right",onPointerDown:ye=>It("right",ye)}),i.jsxs("aside",{className:"h-full shrink-0 overflow-hidden bg-background",style:{width:b},children:[i.jsx("div",{className:"flex h-10 items-center justify-between border-b border-border px-3",children:i.jsx("div",{className:"min-w-0 flex-1 overflow-hidden",children:S||i.jsxs("div",{className:"flex min-w-0 items-center gap-1",children:[i.jsx(Ni,{className:"h-4 w-4 text-muted-foreground"}),i.jsx("span",{className:"truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:p("vscodeWorkbench.panels.cli")})]})})}),i.jsx("div",{className:"h-[calc(100%-2.5rem)] min-h-0 overflow-hidden",children:et()})]})]})]})]})}function Cie({t:e,latestMessage:t,onOpenProject:n,onActivityPanel:r,onSystemTab:a,onShowSettings:s,onQuickStartSession:o}){const[l,c]=m.useState(null),d=m.useMemo(()=>[{label:e("vscodeWorkbench.menuBar.file",{defaultValue:"File"}),commands:[{label:e("vscodeWorkbench.menu.openProject",{defaultValue:"Open Project..."}),icon:Nr,type:"existing"},{label:e("vscodeWorkbench.menu.cloneFromGithub",{defaultValue:"Clone Repository..."}),icon:Pu,type:"new"},{label:e("vscodeWorkbench.menu.newChat",{defaultValue:"New Chat"}),icon:Er,action:o},{label:e("navigation.settings"),icon:Dt,action:s}]},{label:e("vscodeWorkbench.menuBar.edit",{defaultValue:"Edit"}),commands:[{label:e("vscodeWorkbench.menu.newChat",{defaultValue:"New Chat"}),icon:Vt,action:o}]},{label:e("vscodeWorkbench.menuBar.selection",{defaultValue:"Selection"}),commands:[{label:e("vscodeWorkbench.menu.openProjects",{defaultValue:"Open Projects"}),icon:Fn,action:()=>r("projects","chat")}]},{label:e("vscodeWorkbench.menuBar.view",{defaultValue:"View"}),commands:[{label:e("vscodeWorkbench.activity.explorer"),icon:Fn,action:()=>r("explorer","files")},{label:e("vscodeWorkbench.activity.projects"),icon:En,action:()=>r("projects","chat")},{label:e("vscodeWorkbench.activity.sourceControl"),icon:zn,action:()=>r("sourceControl","git")},{label:e("quickSettings.title",{defaultValue:"Quick Settings"}),icon:qh,action:()=>window.openQuickSettings?.()}]},{label:e("vscodeWorkbench.menuBar.go",{defaultValue:"Go"}),commands:[{label:e("tabs.controlRoom"),icon:Fr,action:()=>a("controlRoom")},{label:e("tabs.remote"),icon:To,action:()=>a("remote")}]},{label:e("vscodeWorkbench.menuBar.run",{defaultValue:"Run"}),commands:[]},{label:e("vscodeWorkbench.menuBar.terminal",{defaultValue:"Terminal"}),commands:[{label:e("vscodeWorkbench.panels.cli"),icon:Ni,action:()=>r("terminal","shell")}]},{label:e("vscodeWorkbench.menuBar.help",{defaultValue:"Help"}),commands:[{label:e("navigation.settings"),icon:Dt,action:s}]}],[r,o,s,a,e]),u=p=>{if(c(null),p.type){n(p.type);return}p.action?.()};return i.jsxs("div",{className:"flex h-8 shrink-0 items-center border-b border-border bg-muted/20 px-2 text-xs text-muted-foreground",children:[i.jsx("div",{className:"flex h-full items-center gap-0.5",children:d.map(p=>i.jsxs("div",{className:"relative h-full",children:[i.jsxs("button",{type:"button",className:xe("flex h-full items-center gap-1 rounded px-2 transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",l===p.label&&"bg-muted text-foreground"),onClick:()=>c(f=>f===p.label?null:p.label),children:[p.label,i.jsx(Mr,{className:"h-3 w-3"})]}),l===p.label&&i.jsx("div",{className:"absolute left-0 top-full z-50 mt-1 min-w-52 overflow-hidden rounded-md border border-border bg-popover py-1 text-popover-foreground shadow-xl shadow-black/10",children:p.commands.map(f=>{const h=f.icon;return i.jsxs("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-2 text-left text-xs transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",onClick:()=>u(f),children:[h&&i.jsx(h,{className:"h-3.5 w-3.5 text-muted-foreground"}),i.jsx("span",{className:"truncate",children:f.label})]},f.label)})})]},p.label))}),i.jsx("div",{className:"flex min-w-0 flex-1"}),i.jsx("button",{type:"button",onClick:()=>window.toggleQuickSettings?.(),className:"relative mr-1 inline-flex h-7 w-7 items-center justify-center rounded border border-border bg-transparent text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40","aria-label":e("vscodeWorkbench.menuBar.openSettingsPanel",{defaultValue:"Open settings panel"}),title:e("vscodeWorkbench.menuBar.openSettingsPanel",{defaultValue:"Open settings panel"}),children:i.jsx(qh,{className:"h-4 w-4"})}),i.jsx(r6,{latestMessage:t,variant:"inline"})]})}function Nie({tabs:e,projects:t,selectedProject:n,onSelect:r,onClose:a,onCloseOthers:s,onCloseAll:o,onRename:l,onToggleStar:c,contextMenu:d,onContextMenuChange:u,onAdd:p,isCliPanelCollapsed:f,onToggleCliPanel:h,t:g}){const b=n?Zi(n):null,[x,v]=m.useState(null),[y,w]=m.useState(""),k=m.useRef(null),S=m.useMemo(()=>e.map(E=>({tab:E,project:t.find(L=>L.name===E.projectName||Zi(L)===E.id)})).filter(E=>!!E.project),[t,e]),C=E=>{u(null),v(E.id),w(E.label)},A=()=>{x&&(l(x,y),v(null),w(""))},R=(E,L)=>{E.preventDefault(),r(L),u({tabId:L.id,x:E.clientX,y:E.clientY})},j=d?S.find(E=>E.tab.id===d.tabId)??null:null;return i.jsxs("div",{className:"relative flex h-9 shrink-0 items-center border-b border-border bg-background text-xs",children:[i.jsxs("div",{ref:k,className:"flex h-full min-w-0 flex-1 items-center overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:[S.length===0?i.jsxs("button",{type:"button",onClick:p,className:"flex h-8 min-w-0 items-center gap-2 border-r border-border px-3 text-muted-foreground hover:bg-muted/40 hover:text-foreground",children:[i.jsx(Nr,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:g("vscodeWorkbench.workspace.openFirst",{defaultValue:"Open a workspace"})})]}):S.map(({tab:E,project:L})=>{const T=E.id===b;return i.jsxs("div",{onContextMenu:I=>R(I,E),className:xe("group relative flex h-8 w-52 shrink-0 items-center border-r border-border px-2 transition-colors",T?"bg-background text-foreground shadow-[inset_0_-2px_0_hsl(var(--primary))]":"text-muted-foreground hover:bg-muted/30 hover:text-foreground"),title:`${E.label} - ${wu(L)}`,children:[i.jsx("button",{type:"button",onClick:()=>c(E.id),className:xe("mr-1 rounded p-0.5 transition hover:bg-muted",E.starred?"text-amber-500":"text-muted-foreground/60 opacity-0 group-hover:opacity-100"),"aria-label":g("vscodeWorkbench.workspace.toggleStar",{name:E.label,defaultValue:"Star {{name}}"}),title:g("vscodeWorkbench.workspace.toggleStar",{name:E.label,defaultValue:"Star {{name}}"}),children:i.jsx(ui,{className:"h-3.5 w-3.5"})}),x===E.id?i.jsx("input",{value:y,autoFocus:!0,onChange:I=>w(I.target.value),onBlur:A,onKeyDown:I=>{I.key==="Enter"&&A(),I.key==="Escape"&&(v(null),w(""))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-background px-1 py-0.5 text-xs text-foreground outline-none"}):i.jsxs("button",{type:"button",onClick:()=>r(E),onDoubleClick:()=>C(E),className:"min-w-0 flex-1 text-left",children:[i.jsx("div",{className:"truncate font-medium",children:E.label}),i.jsx("div",{className:"truncate text-[10px] text-muted-foreground",children:wu(L)})]}),i.jsx("div",{className:"ml-1 flex shrink-0 items-center gap-0.5 opacity-70 group-hover:opacity-100",children:i.jsx("button",{type:"button",onClick:()=>a(E.id),className:"rounded p-0.5 hover:bg-muted hover:text-foreground","aria-label":g("vscodeWorkbench.workspace.close",{name:E.label,defaultValue:"Close {{name}}"}),title:g("vscodeWorkbench.workspace.close",{name:E.label,defaultValue:"Close {{name}}"}),children:i.jsx(St,{className:"h-3.5 w-3.5"})})})]},E.id)}),i.jsx("button",{type:"button",onClick:p,className:"flex h-8 w-10 shrink-0 items-center justify-center border-r border-border bg-muted/10 text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground","aria-label":g("vscodeWorkbench.workspace.add",{defaultValue:"Add workspace"}),title:g("vscodeWorkbench.workspace.add",{defaultValue:"Add workspace"}),children:i.jsx(Vt,{className:"h-3.5 w-3.5"})})]}),i.jsx("button",{type:"button",className:xe("flex h-full w-10 shrink-0 items-center justify-center border-l border-border text-muted-foreground transition hover:bg-muted hover:text-foreground",f&&"bg-muted/40 text-foreground"),onClick:h,"aria-label":f?g("vscodeWorkbench.cli.showPanel",{defaultValue:"Show CLI panel"}):g("vscodeWorkbench.cli.hidePanel",{defaultValue:"Hide CLI panel"}),title:f?g("vscodeWorkbench.cli.showPanel",{defaultValue:"Show CLI panel"}):g("vscodeWorkbench.cli.hidePanel",{defaultValue:"Hide CLI panel"}),children:f?i.jsx(Au,{className:"h-3.5 w-3.5"}):i.jsx(ju,{className:"h-3.5 w-3.5"})}),d&&j&&i.jsx(Eie,{context:d,tab:j.tab,onClose:()=>u(null),onRename:()=>C(j.tab),onToggleStar:()=>c(j.tab.id),onCloseTab:()=>a(j.tab.id),onCloseOthers:()=>s(j.tab.id),onCloseAll:o,t:g})]})}function Eie({context:e,tab:t,onClose:n,onRename:r,onToggleStar:a,onCloseTab:s,onCloseOthers:o,onCloseAll:l,t:c}){m.useEffect(()=>{const u=()=>n(),p=f=>{f.key==="Escape"&&n()};return window.addEventListener("mousedown",u),window.addEventListener("keydown",p),()=>{window.removeEventListener("mousedown",u),window.removeEventListener("keydown",p)}},[n]);const d=u=>p=>{p.stopPropagation(),u(),n()};return i.jsxs("div",{className:"fixed z-50 w-48 overflow-hidden rounded-md border border-border bg-popover py-1 text-xs text-popover-foreground shadow-xl shadow-black/10",style:{left:e.x,top:e.y},onMouseDown:u=>u.stopPropagation(),children:[i.jsxs("button",{type:"button",onClick:d(r),className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(y4,{className:"h-3.5 w-3.5"}),c("vscodeWorkbench.workspace.rename",{defaultValue:"Rename"})]}),i.jsxs("button",{type:"button",onClick:d(a),className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(ui,{className:"h-3.5 w-3.5"}),t.starred?c("vscodeWorkbench.workspace.unstar",{defaultValue:"Unstar"}):c("vscodeWorkbench.workspace.star",{defaultValue:"Star"})]}),i.jsx("div",{className:"my-1 border-t border-border"}),i.jsxs("button",{type:"button",onClick:d(s),className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(St,{className:"h-3.5 w-3.5"}),c("vscodeWorkbench.workspace.closeAction",{defaultValue:"Close workspace"})]}),i.jsxs("button",{type:"button",onClick:d(o),className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(Au,{className:"h-3.5 w-3.5"}),c("vscodeWorkbench.workspace.closeOthers",{defaultValue:"Close others"})]}),i.jsxs("button",{type:"button",onClick:d(l),className:"flex w-full items-center gap-2 px-3 py-2 text-left text-red-600 hover:bg-muted dark:text-red-300",children:[i.jsx(St,{className:"h-3.5 w-3.5"}),c("vscodeWorkbench.workspace.closeAll",{defaultValue:"Close all"})]})]})}function Tie({context:e,file:t,onClose:n,onCloseTab:r,onCloseAll:a,onCopyPath:s,onSplitRight:o,onSplitMoveRight:l,t:c}){if(m.useEffect(()=>{const u=()=>n(),p=f=>{f.key==="Escape"&&n()};return window.addEventListener("click",u),window.addEventListener("keydown",p),()=>{window.removeEventListener("click",u),window.removeEventListener("keydown",p)}},[n]),!t)return null;const d=[{id:"close",label:c("vscodeWorkbench.editor.context.close",{defaultValue:"Close"}),icon:St,action:()=>r(t.path)},{id:"closeAllTabs",label:c("vscodeWorkbench.editor.context.closeAll",{defaultValue:"Close All"}),icon:St,action:a},{id:"copyPath",label:c("vscodeWorkbench.editor.context.copyPath",{defaultValue:"Copy Path"}),icon:co,action:()=>s(t.path)},{id:"splitRight",label:c("vscodeWorkbench.editor.context.splitRight",{defaultValue:"Split Right"}),icon:Du,action:()=>o(t.path)},{id:"splitMoveRight",label:c("vscodeWorkbench.editor.context.splitMoveRight",{defaultValue:"Split and Move Right"}),icon:ju,action:()=>l(t.path)}];return i.jsxs("div",{className:"fixed z-[80] w-56 overflow-hidden rounded-md border border-border bg-popover py-1 text-xs text-popover-foreground shadow-xl shadow-black/15",style:{left:e.x,top:e.y},onClick:u=>u.stopPropagation(),children:[i.jsxs("div",{className:"border-b border-border px-3 py-2 text-[11px] text-muted-foreground",children:[i.jsx("div",{className:"truncate font-medium text-foreground",children:t.name}),i.jsx("div",{className:"truncate font-mono",children:t.path})]}),d.map(u=>{const p=u.icon;return i.jsxs("button",{type:"button",onClick:u.action,className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(p,{className:"h-3.5 w-3.5 text-muted-foreground"}),u.label]},u.id)})]})}function Aie({project:e,runId:t,forceNewSession:n,height:r,viewMode:a,isActive:s,onResizeStart:o,onShowFull:l,onShowHalf:c,onClose:d,t:u}){const p=u("vscodeWorkbench.terminal.title",{defaultValue:"Terminal"}),f=a==="full";return i.jsxs("section",{className:xe("relative overflow-hidden bg-gray-950 text-gray-100",f?"absolute inset-0 z-30":"shrink-0"),style:{height:f?"100%":r},children:[!f&&i.jsx("button",{type:"button",className:"absolute inset-x-0 top-0 z-10 h-1 cursor-ns-resize bg-transparent hover:bg-blue-500/40",onPointerDown:o,"aria-label":u("vscodeWorkbench.terminal.resize",{defaultValue:"Resize terminal"}),title:u("vscodeWorkbench.terminal.resize",{defaultValue:"Resize terminal"})}),i.jsxs("div",{className:"flex h-8 items-center justify-between border-b border-gray-800 bg-gray-900 px-3",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx(Ln,{className:"h-3.5 w-3.5 text-blue-300"}),i.jsx("span",{className:"truncate text-[11px] font-semibold uppercase tracking-wide text-gray-300",children:p}),i.jsx("span",{className:"truncate font-mono text-[10px] text-gray-500",children:e?$a(e):u("vscodeWorkbench.noProject")})]}),i.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[f?i.jsx("button",{type:"button",className:"rounded p-1 text-gray-400 hover:bg-gray-800 hover:text-gray-100",onClick:c,"aria-label":u("vscodeWorkbench.terminal.halfScreen",{defaultValue:"Half screen terminal"}),title:u("vscodeWorkbench.terminal.halfScreen",{defaultValue:"Half screen terminal"}),children:i.jsx(Du,{className:"h-3.5 w-3.5"})}):i.jsx("button",{type:"button",className:"rounded p-1 text-gray-400 hover:bg-gray-800 hover:text-gray-100",onClick:l,"aria-label":u("vscodeWorkbench.terminal.fullScreen",{defaultValue:"Full screen terminal"}),title:u("vscodeWorkbench.terminal.fullScreen",{defaultValue:"Full screen terminal"}),children:i.jsx(Ru,{className:"h-3.5 w-3.5"})}),i.jsx("button",{type:"button",className:"rounded p-1 text-gray-400 hover:bg-gray-800 hover:text-gray-100",onClick:d,"aria-label":u("vscodeWorkbench.terminal.close",{defaultValue:"Close terminal"}),title:u("vscodeWorkbench.terminal.close",{defaultValue:"Close terminal"}),children:i.jsx(St,{className:"h-3.5 w-3.5"})})]})]}),i.jsx("div",{className:"h-[calc(100%-2rem)] min-h-0",children:i.jsx(Ul,{project:e,session:null,isPlainShell:!0,forceNewSession:n,showHeader:!1,autoConnect:!!e,isActive:s,title:p},`bottom-terminal-shell-${e?$a(e):"none"}-${t}`)})]})}function jie({selectedProject:e,onFileOpen:t,t:n}){return i.jsx("div",{className:"h-full min-h-0 overflow-hidden",children:i.jsx(og,{selectedProject:e,onFileOpen:t})})}function Rie({projects:e,onProjectSelect:t,onNewSession:n,onOpenProject:r,onCloneProject:a,onQuickStartSession:s,onShowSettings:o,t:l}){const c=e.slice(0,6);return i.jsx("div",{className:"h-full overflow-auto bg-background",children:i.jsx("div",{className:"mx-auto flex max-w-6xl flex-col gap-6 p-4 sm:p-6",children:i.jsxs("section",{className:"min-w-0",children:[i.jsxs("div",{className:"mb-6",children:[i.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-primary",children:"Pixcode"}),i.jsx("h2",{className:"mt-2 text-2xl font-semibold text-foreground",children:l("vscodeWorkbench.welcome.title",{defaultValue:"Hoş geldin"})}),i.jsx("p",{className:"mt-2 max-w-2xl text-sm leading-6 text-muted-foreground",children:l("vscodeWorkbench.welcome.description",{defaultValue:"Bir proje aç, GitHub’dan klonla veya terminalden CLI oturumlarını başlat."})})]}),i.jsxs("div",{className:"grid gap-2",style:{gridTemplateColumns:"repeat(auto-fit, minmax(min(100%, 13rem), 1fr))"},children:[i.jsxs("button",{type:"button",onClick:r,className:"group flex min-h-24 flex-col items-start justify-between rounded-md border border-border bg-card p-4 text-left transition hover:border-primary/50 hover:bg-muted/30",children:[i.jsx(Nr,{className:"h-5 w-5 text-blue-400"}),i.jsx("span",{className:"mt-4 text-sm font-semibold text-foreground",children:l("vscodeWorkbench.welcome.openProject",{defaultValue:"Proje Aç"})}),i.jsx("span",{className:"mt-1 text-xs leading-5 text-muted-foreground",children:l("vscodeWorkbench.welcome.openProjectDescription",{defaultValue:"Yerel klasörü workspace olarak bağla."})})]}),i.jsxs("button",{type:"button",onClick:a,className:"group flex min-h-24 flex-col items-start justify-between rounded-md border border-border bg-card p-4 text-left transition hover:border-primary/50 hover:bg-muted/30",children:[i.jsx(Pu,{className:"h-5 w-5 text-foreground"}),i.jsx("span",{className:"mt-4 text-sm font-semibold text-foreground",children:l("vscodeWorkbench.welcome.cloneProject",{defaultValue:"Klonla"})}),i.jsx("span",{className:"mt-1 text-xs leading-5 text-muted-foreground",children:l("vscodeWorkbench.welcome.cloneProjectDescription",{defaultValue:"GitHub reposunu seçtiğin klasöre çek."})})]})]}),i.jsx("div",{className:"mt-4 rounded-md border border-border bg-card/70 p-3 sm:p-4",children:i.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-sm font-semibold text-foreground",children:l("vscodeWorkbench.welcome.appearanceTitle",{defaultValue:"Görünüm"})}),i.jsx("p",{className:"mt-1 text-xs leading-5 text-muted-foreground",children:l("vscodeWorkbench.welcome.appearanceDescription",{defaultValue:"Pixcode koyu modla başlar; gerekirse açık moda geçebilirsin."})})]}),i.jsxs("div",{className:"flex shrink-0 flex-wrap items-center gap-2",children:[i.jsxs("div",{className:"flex items-center gap-2 rounded border border-border bg-background px-3 py-2",children:[i.jsx("span",{className:"text-xs font-medium text-foreground",children:l("vscodeWorkbench.welcome.darkMode",{defaultValue:"Koyu mod"})}),i.jsx(Wd,{ariaLabel:l("vscodeWorkbench.welcome.themeToggle",{defaultValue:"Tema modunu değiştir"})})]}),i.jsxs("button",{type:"button",onClick:o,className:"inline-flex items-center justify-center gap-2 rounded border border-border px-3 py-2 text-xs font-medium text-foreground hover:bg-muted",children:[i.jsx(Dt,{className:"h-3.5 w-3.5"}),l("vscodeWorkbench.welcome.themeSettings",{defaultValue:"Tema ayarları"})]})]})]})}),i.jsxs("div",{className:"mt-7",children:[i.jsxs("div",{className:"mb-2 flex items-center justify-between gap-3",children:[i.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:l("vscodeWorkbench.welcome.recentProjects",{defaultValue:"Son projeler"})}),s&&i.jsxs("button",{type:"button",onClick:()=>{s()},className:"inline-flex items-center gap-1.5 rounded border border-border px-2.5 py-1.5 text-xs text-muted-foreground hover:bg-muted hover:text-foreground",children:[i.jsx(Er,{className:"h-3.5 w-3.5"}),l("vscodeWorkbench.welcome.newChat",{defaultValue:"Yeni sohbet"})]})]}),c.length>0?i.jsx("div",{className:"grid gap-2 xl:grid-cols-2",children:c.map(p=>i.jsxs("div",{role:"button",tabIndex:0,className:"cursor-pointer rounded-md border border-border bg-card/60 p-3 text-left transition hover:border-primary/40 hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",onClick:()=>t(p),onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),t(p))},title:$a(p),children:[i.jsxs("div",{className:"flex items-start justify-between gap-3",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"truncate text-sm font-semibold text-foreground",children:p.displayName||p.name}),i.jsx("div",{className:"mt-1 truncate font-mono text-[11px] text-muted-foreground",children:wu(p)})]}),i.jsx("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:c6(p.fileCount,l)})]}),i.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[i.jsx("span",{className:"rounded bg-primary/10 px-2 py-1 text-[11px] font-medium text-primary",children:l("vscodeWorkbench.projects.workHere",{defaultValue:"Work in this folder"})}),i.jsx("span",{role:"button",tabIndex:0,className:"rounded border border-border px-2 py-1 text-[11px] text-foreground",onClick:f=>{f.stopPropagation(),t(p),n(p)},onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),f.stopPropagation(),t(p),n(p))},children:l("vscodeWorkbench.projects.startChat",{defaultValue:"Chat"})})]})]},p.name))}):i.jsxs("div",{className:"rounded-md border border-dashed border-border p-8 text-center",children:[i.jsx(Fn,{className:"mx-auto mb-3 h-8 w-8 text-muted-foreground"}),i.jsx("div",{className:"text-sm font-medium text-foreground",children:l("vscodeWorkbench.projects.emptyTitle",{defaultValue:"No project directories yet"})}),i.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:l("vscodeWorkbench.projects.emptyDescription",{defaultValue:"Open a local folder or clone a repository to start."})})]})]})]})})})}const xd=o6.map(e=>({id:e,label:br[e]??e}));function Ds(e,t,n){return(e??[]).map(r=>({...r,__provider:r.__provider??t,__projectName:r.__projectName??n}))}function Iie(e){return e?[...Ds(e.sessions,"claude",e.name),...Ds(e.codexSessions,"codex",e.name),...Ds(e.cursorSessions,"cursor",e.name),...Ds(e.geminiSessions,"gemini",e.name),...Ds(e.qwenSessions,"qwen",e.name),...Ds(e.opencodeSessions,"opencode",e.name)]:[]}function _ie({project:e,onHeaderContentChange:t,t:n}){const[r,a]=m.useState(()=>{if(typeof window>"u")return"claude";const J=window.localStorage.getItem("selected-provider");return xd.some(te=>te.id===J)?J:"claude"}),[s,o]=m.useState(!1),[l,c]=m.useState(null),[d,u]=m.useState(!1),[p,f]=m.useState(!1),[h,g]=m.useState("provider"),[b,x]=m.useState(null),[v,y]=m.useState(null),[w]=m.useState({runId:0,forceNewSession:!1}),[k,S]=m.useState([]),[C,A]=m.useState(null),[R,j]=m.useState({provider:null,state:"idle",log:"",error:null}),E=m.useRef(null),L=m.useRef(null),{providerAuthStatus:T,refreshProviderAuthStatuses:I}=Tu({initialLoading:!1}),N=m.useMemo(()=>Iie(e),[e]),O=T[r],$=l?.__provider===r?l:null,F=k.find(J=>J.id===C)||k[0]||null;m.useEffect(()=>{F&&g(F.type)},[F]);const q=!!(e&&O?.installed!==!1&&R.state!=="running"),Y=!!(e&&(d||k.length>0)&&(F?.type==="plain"||h==="provider"&&q)),P=m.useMemo(()=>pie(e),[e]),B=m.useRef(null),V=m.useCallback((J,te,H=k)=>{if(J==="plain")return`Terminal #${H.filter(he=>he.type==="plain").length+1}`;const U=te&&br[te]?br[te]:te??"CLI",Q=H.filter(ge=>ge.type==="provider"&&ge.provider===te).length+1;return`${U} #${Q}`},[k]),z=m.useCallback(J=>{const te=`cli-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,H=`tab_${crypto.randomUUID()}`;return S(U=>{const Q={...J,id:te,tabId:H,title:J.title||V(J.type,J.provider,U)};return[...U,Q]}),A(te),u(!0),g(J.type==="plain"?"plain":"provider"),te},[V]),ee=m.useCallback(()=>{z({type:"plain",provider:void 0,session:null,runId:Date.now(),forceNewSession:!1,startupInput:null,permissionOverride:null})},[z]),ae=m.useCallback(J=>{const te=k.find(U=>U.id===J);if(!te)return;const H=window.prompt("CLI tab name",te.title)?.trim();H&&S(U=>U.map(Q=>Q.id===J?{...Q,title:H}:Q))},[k]),ue=m.useCallback(J=>{S(te=>{const H=te.filter(U=>U.id!==J);return C===J&&A(H[H.length-1]?.id||null),H.length===0&&u(!1),H})},[C]),le=m.useCallback(()=>{o(!0)},[]),se=m.useMemo(()=>i.jsxs("div",{className:"flex min-w-0 items-center gap-1",children:[k.length===0&&i.jsxs("div",{className:"flex min-w-0 items-center gap-1 pr-1",children:[i.jsx(Ni,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),i.jsx("span",{className:"truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:n("vscodeWorkbench.panels.cli")})]}),k.length>0&&i.jsx("div",{ref:L,className:"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto pr-1 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:k.map(J=>{const te=J.id===(F?.id||C);return i.jsxs("div",{className:xe("group flex h-7 min-w-[112px] max-w-[200px] shrink-0 items-center gap-1.5 rounded border px-2 text-[11px]",te?"border-primary/50 bg-primary/10 text-foreground":"border-border/70 bg-muted/20 text-muted-foreground hover:bg-muted/40 hover:text-foreground"),children:[i.jsxs("button",{type:"button",className:"flex min-w-0 flex-1 items-center gap-1.5 text-left",onClick:()=>A(J.id),onDoubleClick:()=>ae(J.id),title:"Double-click to rename",children:[J.type==="plain"?i.jsx(Ln,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}):i.jsx(nn,{provider:J.provider??"claude",className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:J.title})]}),i.jsx("button",{type:"button",className:"rounded p-0.5 opacity-60 hover:bg-muted hover:opacity-100",onClick:H=>{H.stopPropagation(),ue(J.id)},"aria-label":"Close CLI tab",children:i.jsx(St,{className:"h-3 w-3"})})]},J.id)})}),i.jsx("button",{type:"button",className:"flex h-7 w-7 shrink-0 items-center justify-center rounded border border-border text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-50",disabled:!e,onClick:ee,title:"New terminal tab",children:i.jsx(Ln,{className:"h-3.5 w-3.5"})}),i.jsx("button",{type:"button",className:"flex h-7 w-7 shrink-0 items-center justify-center rounded border border-border text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-50",disabled:!e||R.state==="running",onClick:le,title:"New CLI tab",children:i.jsx(Vt,{className:"h-3.5 w-3.5"})})]}),[F?.id,C,k,ue,R.state,ee,le,e,ae,n]);m.useEffect(()=>(t(se),()=>t(null)),[se,t]),m.useEffect(()=>{const J=xd.map(te=>te.id);I(J)},[I]),m.useEffect(()=>{if(B.current===P)return;B.current=P,f(!1),g("provider"),y(null);const J=xie(P);if(!J||!J.tabs||J.tabs.length===0){S([]),A(null),u(!1),c(null);return}a(J.provider),window.localStorage.setItem("selected-provider",J.provider);const te=J.tabs.map(H=>{const U=H.sessionId?N.find(Q=>Q.id===H.sessionId&&Q.__provider===H.provider)??null:null;return{id:H.id,tabId:H.tabId,type:H.type,provider:H.provider,title:H.title,session:U,runId:H.runId,forceNewSession:!1,startupInput:H.startupInput,permissionOverride:H.permissionOverride}});S(te),A(J.activeTabId||te[0]?.id||null),u(!0)},[P,N]),m.useEffect(()=>()=>{try{E.current?.close()}catch{}},[]),m.useEffect(()=>{P&&vie(P,{provider:r,isTerminalOpen:k.length>0,sessionId:l?.id??null,tabs:k.map(J=>({id:J.id,tabId:J.tabId,type:J.type,provider:J.provider,title:J.title,sessionId:J.session?.id??null,runId:J.runId,forceNewSession:!1,startupInput:J.startupInput,permissionOverride:J.permissionOverride})),activeTabId:C,updatedAt:Date.now()})},[P,k,C,r,l?.id]);const me=m.useCallback(J=>{T[J]?.installed!==!1&&(g("provider"),y(null),a(J),window.localStorage.setItem("selected-provider",J))},[T]),de=m.useCallback(async J=>{j({provider:J,state:"running",log:"",error:null});try{E.current?.close()}catch{}E.current=null;try{const te=await Ne(`/api/providers/${J}/install`,{method:"POST",body:"{}"}),H=await te.json().catch(()=>({}));if(!te.ok||!H?.success)throw new Error(H?.error||`HTTP ${te.status}`);if(H.data?.manual)throw new Error(H.data?.message||n("vscodeWorkbench.cli.manualInstall",{defaultValue:"This CLI needs manual installation."}));const U=H.data?.jobId;if(!U)throw new Error(n("vscodeWorkbench.cli.installNoJob",{defaultValue:"Install did not return a job id."}));const Q=window.localStorage.getItem("auth-token")||"",ge=`/api/providers/${J}/install/${U}/stream${Q?`?token=${encodeURIComponent(Q)}`:""}`,he=new EventSource(ge);E.current=he,he.addEventListener("log",oe=>{try{const Ee=JSON.parse(oe.data);typeof Ee.chunk=="string"&&j(fe=>({...fe,log:`${fe.log}${Ee.chunk}`}))}catch{}}),he.addEventListener("done",oe=>{try{const Ee=JSON.parse(oe.data);if(!Ee.success)throw new Error(Ee.error||n("vscodeWorkbench.cli.installFailed",{defaultValue:"Install failed."}));j(fe=>({...fe,state:"done",error:null})),I([J],{force:!0}),a(J),window.localStorage.setItem("selected-provider",J)}catch(Ee){j(fe=>({...fe,state:"error",error:Ee instanceof Error?Ee.message:n("vscodeWorkbench.cli.installFailed",{defaultValue:"Install failed."})}))}finally{try{he.close()}catch{}E.current=null}}),he.onerror=()=>{j(oe=>oe.state==="running"?{...oe,state:"error",error:n("vscodeWorkbench.cli.installStreamLost",{defaultValue:"Install stream closed early. The install may still be running."})}:oe)}}catch(te){j({provider:J,state:"error",log:"",error:te instanceof Error?te.message:n("vscodeWorkbench.cli.installFailed",{defaultValue:"Install failed."})})}},[I,n]),we=m.useCallback((J,{forceNewSession:te=!1}={})=>{!e||T[J]?.installed===!1||R.state==="running"||(g("provider"),x(null),y(null),c(null),o(!1),f(!1),a(J),window.localStorage.setItem("selected-provider",J),u(!0),z({type:"provider",provider:J,session:null,runId:Date.now(),forceNewSession:!1,startupInput:null,permissionOverride:null}))},[R.state,z,e,T]),Ce=m.useCallback(({forceNewSession:J=!1}={})=>{we(r,{forceNewSession:J})},[r,we]),je=m.useCallback(()=>{Ce({forceNewSession:p})},[p,Ce]),M=m.useCallback(()=>{if(C){ue(C);return}g("provider"),x(null),y(null),u(!1),f(!1)},[C,ue]);return d||k.length>0?i.jsxs("div",{className:"relative flex h-full min-h-0 flex-col bg-gray-950 text-gray-100",children:[s&&i.jsxs("div",{className:"absolute inset-x-2 top-2 z-30 max-h-[58%] overflow-hidden rounded-md border border-gray-800 bg-gray-950 shadow-2xl shadow-black/40",children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-gray-800 px-2.5 py-2",children:[i.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wide text-gray-400",children:"New CLI tab"}),i.jsx("button",{type:"button",className:"rounded p-1 text-gray-400 hover:bg-gray-800 hover:text-gray-100",onClick:()=>o(!1),children:i.jsx(St,{className:"h-3.5 w-3.5"})})]}),i.jsx("div",{className:"grid max-h-72 gap-1 overflow-y-auto p-2",children:xd.map(J=>{const H=T[J.id]?.installed===!1,U=R.provider===J.id&&R.state==="running";return i.jsxs("button",{type:"button",className:xe("flex items-center gap-2 rounded border px-2 py-2 text-left transition-colors",H?"border-amber-800/70 bg-amber-950/30 text-amber-100":"border-gray-800 bg-gray-900 text-gray-200 hover:border-blue-500/60 hover:bg-blue-500/10"),onClick:()=>{if(H){de(J.id);return}we(J.id,{forceNewSession:!0})},children:[i.jsx(nn,{provider:J.id,className:xe("h-4 w-4 shrink-0",H&&"opacity-70 grayscale")}),i.jsxs("span",{className:"min-w-0 flex-1",children:[i.jsx("span",{className:"block truncate text-[11px] font-semibold",children:J.label}),i.jsx("span",{className:"block truncate text-[10px] text-gray-500",children:U?"Installing...":H?"Install first":"Open new tab"})]}),i.jsx(Vt,{className:"h-3.5 w-3.5 shrink-0 opacity-70"})]},J.id)})})]}),i.jsx("div",{className:"relative min-h-0 flex-1",children:k.length===0?i.jsx(Ul,{tabId:`fallback-${r}-${w.runId}`,project:e,session:$,provider:r,forceNewSession:w.forceNewSession,startupInput:b,permissionOverride:v,showHeader:!0,autoConnect:Y,isActive:!0,onClose:M},`${r}-${$?.id||"new"}-${e?.name||"none"}-${w.runId}`):k.map(J=>i.jsx("div",{className:xe("absolute inset-0",J.id===F?.id?"block":"hidden"),children:i.jsx(Ul,{tabId:J.tabId,project:e,session:J.session,provider:J.provider,isPlainShell:J.type==="plain",forceNewSession:J.forceNewSession,startupInput:J.startupInput,permissionOverride:J.permissionOverride,showHeader:!0,autoConnect:Y,isActive:J.id===F?.id,onClose:()=>ue(J.id)},`${J.id}-${J.runId}`)},J.id))})]}):i.jsx("div",{className:"flex h-full min-h-0 flex-col bg-gray-950 text-gray-100",children:i.jsxs("div",{className:"flex min-h-0 flex-1 flex-col border-b border-gray-800 bg-gray-900/95 p-2",children:[i.jsxs("div",{className:"mb-2 flex items-center justify-between gap-2",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"truncate text-xs font-semibold text-gray-100",children:e?.displayName||e?.name||n("vscodeWorkbench.noProject")}),i.jsx("div",{className:"text-[11px] text-gray-400",children:n("vscodeWorkbench.cli.chooseDescription",{defaultValue:"Choose a CLI, then start a full-height terminal."})})]}),i.jsx("div",{className:"flex shrink-0 items-center gap-1"})]}),i.jsxs("div",{className:"mb-2 flex items-center gap-2 rounded border border-gray-800 bg-gray-950 px-2.5 py-2",children:[i.jsx(Ln,{className:"h-4 w-4 shrink-0 text-blue-300"}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("div",{className:"truncate text-[11px] font-semibold text-gray-200",children:n("vscodeWorkbench.cli.chooseTitle",{defaultValue:"Start a CLI terminal"})}),i.jsx("div",{className:"truncate text-[10px] text-gray-500",children:n("vscodeWorkbench.cli.projectScoped",{defaultValue:"Project-scoped CLI terminal"})})]})]}),i.jsx("div",{className:"grid min-h-0 gap-1.5 overflow-y-auto pr-1",children:xd.map(J=>{const te=T[J.id],H=r===J.id,U=te?.installed===!1,Q=!!te?.loading,ge=R.provider===J.id&&R.state==="running",he=!!(te?.updateAvailable&&te.latestVersion&&!U),oe=ge?n("vscodeWorkbench.cli.installing",{defaultValue:"Installing..."}):Q?n("vscodeWorkbench.cli.checking",{defaultValue:"Checking..."}):U?n("vscodeWorkbench.cli.notInstalled",{defaultValue:"Not installed"}):he?n("vscodeWorkbench.cli.updateAvailable",{version:te?.latestVersion,defaultValue:"Update {{version}}"}):te?.installedVersion||n("vscodeWorkbench.cli.ready",{defaultValue:"Ready"});return i.jsxs("div",{className:xe("group flex min-w-0 items-center gap-2 rounded border px-2 py-2 transition-colors",H&&!U?"border-blue-500 bg-blue-500/15 text-blue-100":"border-gray-800 bg-gray-900 text-gray-300 hover:border-gray-700 hover:bg-gray-800",U&&"border-amber-800/70 bg-amber-950/30 text-amber-100"),children:[i.jsxs("button",{type:"button",className:"flex min-w-0 flex-1 items-center gap-2 text-left",onClick:()=>{if(U){de(J.id);return}me(J.id)},title:br[J.id]??J.label,children:[i.jsx(nn,{provider:J.id,className:xe("h-4 w-4 shrink-0",U&&"opacity-70 grayscale")}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"truncate text-[11px] font-semibold",children:J.label}),i.jsx("div",{className:xe("truncate text-[10px]",U?"text-amber-300":he?"text-amber-200":"text-gray-500"),children:oe})]}),H&&!U&&i.jsx(qt,{className:"ml-auto h-3.5 w-3.5 shrink-0 text-blue-200"})]}),(U||he)&&i.jsx("button",{type:"button",disabled:ge,className:"flex h-7 w-7 shrink-0 items-center justify-center rounded bg-gray-800 text-amber-200 hover:bg-gray-700 disabled:opacity-50",onClick:()=>void de(J.id),"aria-label":U?n("vscodeWorkbench.cli.installProvider",{provider:J.label,defaultValue:"Install {{provider}}"}):n("vscodeWorkbench.cli.updateProvider",{provider:J.label,defaultValue:"Update {{provider}}"}),title:U?n("vscodeWorkbench.cli.installProvider",{provider:J.label,defaultValue:"Install {{provider}}"}):n("vscodeWorkbench.cli.updateProvider",{provider:J.label,defaultValue:"Update {{provider}}"}),children:ge?i.jsx(Ht,{className:"h-3.5 w-3.5 animate-spin"}):U?i.jsx(pa,{className:"h-3.5 w-3.5"}):i.jsx(at,{className:"h-3.5 w-3.5"})})]},J.id)})}),(R.state==="running"||R.state==="done"||R.state==="error")&&i.jsxs("div",{className:"mt-2 rounded border border-gray-800 bg-gray-950 p-2",children:[i.jsxs("div",{className:"flex items-center gap-2 text-[11px] text-gray-300",children:[R.state==="running"&&i.jsx(Ht,{className:"h-3.5 w-3.5 animate-spin text-amber-300"}),R.state==="done"&&i.jsx(qt,{className:"h-3.5 w-3.5 text-emerald-300"}),R.state==="error"&&i.jsx(ca,{className:"h-3.5 w-3.5 text-red-300"}),i.jsxs("span",{className:"truncate",children:[R.provider?br[R.provider]:n("vscodeWorkbench.cli.provider",{defaultValue:"Provider"})," ",R.state==="running"?n("vscodeWorkbench.cli.installRunning",{defaultValue:"is installing"}):R.state==="done"?n("vscodeWorkbench.cli.installDone",{defaultValue:"is ready"}):n("vscodeWorkbench.cli.installError",{defaultValue:"needs attention"})]})]}),R.error&&i.jsx("div",{className:"mt-1 text-[11px] text-red-300",children:R.error}),R.log&&i.jsx("pre",{className:"mt-2 max-h-20 overflow-y-auto rounded bg-black/40 p-2 font-mono text-[10px] leading-relaxed text-gray-300",children:R.log})]}),i.jsxs("button",{type:"button",disabled:!q,onClick:je,className:"mt-2 flex h-10 w-full items-center justify-center gap-2 rounded bg-blue-600 px-3 text-xs font-semibold text-white transition-colors hover:bg-blue-500 disabled:cursor-not-allowed disabled:bg-gray-800 disabled:text-gray-500",children:[i.jsx(Ln,{className:"h-4 w-4"}),n("vscodeWorkbench.cli.startSelected",{provider:br[r]??r,defaultValue:"Start {{provider}}"})]})]})})}function Lie({projects:e,selectedProject:t,onProjectSelect:n,onNewSession:r,onOpenProject:a,onCloneProject:s,onRefresh:o,isRefreshing:l,t:c}){return i.jsxs("div",{className:"flex h-full min-h-0 flex-col",children:[i.jsx("div",{className:"border-b border-border p-1.5",children:i.jsxs("div",{className:"grid grid-cols-2 gap-1.5",children:[i.jsxs("button",{type:"button",onClick:a,className:"flex min-w-0 items-center justify-center gap-1 rounded border border-border px-2 py-1 text-[11px] font-medium text-foreground transition-colors hover:bg-muted",children:[i.jsx(Nr,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:c("vscodeWorkbench.projects.openProject",{defaultValue:"Open Project"})})]}),i.jsxs("button",{type:"button",onClick:s,className:"flex min-w-0 items-center justify-center gap-1 rounded border border-border px-2 py-1 text-[11px] font-medium text-foreground transition-colors hover:bg-muted",children:[i.jsx(Pu,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:c("vscodeWorkbench.projects.cloneFromGithub",{defaultValue:"Clone"})})]})]})}),i.jsxs("div",{className:"flex items-center justify-between border-b border-border px-2.5 py-1.5",children:[i.jsx("span",{className:"text-[11px] font-medium uppercase tracking-wide text-muted-foreground",children:c("vscodeWorkbench.projects.directoryList",{defaultValue:"Directories"})}),i.jsx("button",{type:"button",onClick:()=>{o()},disabled:l,className:"rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50",title:c("vscodeWorkbench.projects.refresh",{defaultValue:"Refresh projects"}),"aria-label":c("vscodeWorkbench.projects.refresh",{defaultValue:"Refresh projects"}),children:i.jsx(at,{className:xe("h-3.5 w-3.5",l&&"animate-spin")})})]}),i.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-1.5",children:e.length===0?i.jsx("div",{className:"flex h-full items-center justify-center px-4 text-center",children:i.jsxs("div",{children:[i.jsx(Fn,{className:"mx-auto mb-3 h-7 w-7 text-muted-foreground/70"}),i.jsx("div",{className:"text-sm font-medium text-foreground",children:c("vscodeWorkbench.projects.emptyTitle",{defaultValue:"No project directories yet"})}),i.jsx("p",{className:"mt-1 text-xs leading-5 text-muted-foreground",children:c("vscodeWorkbench.projects.emptyDescription",{defaultValue:"Open a local folder or clone a repository to start."})})]})}):i.jsx("div",{className:"space-y-0.5",children:e.map(d=>{const u=t?.name===d.name;return i.jsxs("div",{role:"button",tabIndex:0,className:xe("group w-full cursor-pointer rounded border px-2 py-1.5 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",u?"border-primary/40 bg-primary/10":"border-transparent hover:border-border hover:bg-muted/40"),title:$a(d),onClick:()=>n(d),onKeyDown:p=>{(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),n(d))},children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx("span",{className:xe("h-1.5 w-1.5 shrink-0 rounded-full",u?"bg-primary":"bg-muted-foreground/30 group-hover:bg-muted-foreground/60")}),i.jsx("span",{className:"truncate text-xs font-medium text-foreground",children:d.displayName||d.name})]}),i.jsxs("div",{className:"mt-0.5 flex min-w-0 items-center justify-between gap-2 pl-3.5 text-[10px] text-muted-foreground",children:[i.jsx("span",{className:"truncate font-mono",children:wu(d)}),i.jsx("span",{className:"shrink-0",children:c6(d.fileCount,c)})]}),i.jsx("div",{className:"mt-1.5 flex justify-end opacity-0 transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100",children:i.jsx("button",{type:"button",className:"inline-flex h-6 w-6 items-center justify-center rounded border border-border text-foreground",onClick:p=>{p.stopPropagation(),n(d),r(d)},title:c("vscodeWorkbench.projects.startChat",{defaultValue:"Chat"}),"aria-label":c("vscodeWorkbench.projects.startChat",{defaultValue:"Chat"}),children:i.jsx(Er,{className:"h-3 w-3"})})})]},d.name)})})})]})}function ul({icon:e,label:t,active:n,badge:r=!1,onClick:a}){return i.jsxs("button",{type:"button",className:xe("relative flex h-10 w-10 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",n&&"bg-primary/10 text-primary"),"aria-label":t,title:t,onClick:a,children:[n&&i.jsx("span",{className:"absolute left-0 h-5 w-0.5 rounded-r bg-primary"}),i.jsx(e,{className:"h-5 w-5"}),r&&i.jsx("span",{className:"absolute right-1 top-1 h-2 w-2 rounded-full bg-amber-500 ring-2 ring-background"})]})}function yN({label:e,active:t,onPointerDown:n}){return i.jsx("button",{type:"button",role:"separator","aria-orientation":"vertical","aria-label":e,title:e,className:xe("group relative z-10 flex h-full w-2 shrink-0 cursor-col-resize items-center justify-center bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",t&&"bg-primary/5"),onPointerDown:n,children:i.jsx("span",{className:xe("h-full w-px bg-border transition-colors group-hover:bg-primary/60",t&&"bg-primary")})})}const gg="quickSettingsHandlePosition",El=50,Pie=10,Die=90,Oie=5,bg="flex items-center justify-between p-3 rounded-lg bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors border border-transparent hover:border-gray-300 dark:hover:border-gray-600",Mie=`${bg} cursor-pointer`,Fie="h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 dark:text-blue-500 focus:ring-blue-500 focus:ring-2 dark:focus:ring-blue-400 bg-gray-100 dark:bg-gray-800 checked:bg-blue-600 dark:checked:bg-blue-600",zie=[{key:"autoExpandTools",labelKey:"quickSettings.autoExpandTools",icon:Ru},{key:"showRawParameters",labelKey:"quickSettings.showRawParameters",icon:lc},{key:"showThinking",labelKey:"quickSettings.showThinking",icon:Rg}],Bie=[{key:"autoScrollToBottom",labelKey:"quickSettings.autoScrollToBottom",icon:f4}],Uie=[{key:"sendByCtrlEnter",labelKey:"quickSettings.sendByCtrlEnter",icon:C4}],p6=e=>Math.max(Pie,Math.min(Die,e)),$ie=()=>{if(typeof window>"u")return El;const e=localStorage.getItem(gg);if(!e)return El;try{const t=JSON.parse(e);if(typeof t.y=="number"&&Number.isFinite(t.y))return p6(t.y)}catch{return localStorage.removeItem(gg),El}return El},wN=e=>e.type.includes("touch"),kN=e=>"touches"in e?e.touches[0]?.clientY??null:"clientY"in e&&typeof e.clientY=="number"?e.clientY:null;function Hie({isMobile:e}){const[t,n]=m.useState($ie),[r,a]=m.useState(!1),[s,o]=m.useState(!1),l=m.useRef(null),c=m.useRef(El),d=m.useRef(!1),u=m.useRef(!1),p=m.useRef(!1),f=m.useCallback(()=>{p.current&&(document.body.style.cursor="",document.body.style.userSelect="",document.body.style.overflow="",document.body.style.position="",document.body.style.width="",p.current=!1)},[]),h=m.useCallback(w=>{p.current||(document.body.style.cursor="grabbing",document.body.style.userSelect="none",w&&(document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%"),p.current=!0)},[]),g=m.useCallback(()=>{!r&&l.current===null||(u.current=d.current,d.current=!1,l.current=null,a(!1),o(!1),f())},[f,r]),b=m.useCallback(w=>{if(!r||l.current===null)return;const k=kN(w);if(k===null)return;const S=k-l.current,C=Math.abs(S)>Oie;if(!d.current&&C&&(d.current=!0,o(!0),h(wN(w))),!d.current)return;wN(w)&&w.preventDefault();const A=Math.max(window.innerHeight,1),R=S/A*100,j=e?-R:R;n(p6(c.current+j))},[h,e,r]),x=m.useCallback(w=>{w.stopPropagation();const k=kN(w);k!==null&&(l.current=k,c.current=t,d.current=!1,o(!1),a(!0))},[t]);m.useEffect(()=>{localStorage.setItem(gg,JSON.stringify({y:t}))},[t]),m.useEffect(()=>{if(!r)return;const w=A=>{b(A)},k=()=>{g()},S=A=>{b(A)},C=()=>{g()};return document.addEventListener("mousemove",w),document.addEventListener("mouseup",k),document.addEventListener("touchmove",S,{passive:!1}),document.addEventListener("touchend",C),()=>{document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",k),document.removeEventListener("touchmove",S),document.removeEventListener("touchend",C)}},[g,b,r]),m.useEffect(()=>()=>{f()},[f]);const v=m.useCallback(()=>u.current?(u.current=!1,!0):!1,[]),y=m.useMemo(()=>!e||typeof window>"u"?{top:`${t}%`,transform:"translateY(-50%)"}:{bottom:`${window.innerHeight*t/100}px`},[t,e]);return{isDragging:s,handleStyle:y,startDrag:x,endDrag:g,consumeSuppressedClick:v}}function pl({title:e,children:t,className:n=""}){return i.jsxs("div",{className:`space-y-2 ${n}`,children:[i.jsx("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400",children:e}),t]})}function Gie({label:e,icon:t,checked:n,onCheckedChange:r}){return i.jsxs("label",{className:Mie,children:[i.jsxs("span",{className:"flex items-center gap-2 text-sm text-gray-900 dark:text-white",children:[i.jsx(t,{className:"h-4 w-4 text-gray-600 dark:text-gray-400"}),e]}),i.jsx("input",{type:"checkbox",checked:n,onChange:a=>r(a.target.checked),className:Fie})]})}const Vie=m.memo(Gie),Wie=[{value:"off",labelKey:"quickSettings.autoShowAgentDiffOff"},{value:"openOnly",labelKey:"quickSettings.autoShowAgentDiffOpenOnly"},{value:"always",labelKey:"quickSettings.autoShowAgentDiffAlways"}];function qie({isDarkMode:e,preferences:t,onPreferenceChange:n,onSelectChange:r}){const{t:a}=Me("settings"),s=o=>o.map(({key:l,labelKey:c,icon:d})=>i.jsx(Vie,{label:a(c),icon:d,checked:t[l],onCheckedChange:u=>n(l,u)},l));return i.jsxs("div",{className:"flex-1 space-y-6 overflow-y-auto overflow-x-hidden bg-background p-4",children:[i.jsxs(pl,{title:a("quickSettings.sections.appearance"),children:[i.jsxs("div",{className:bg,children:[i.jsxs("span",{className:"flex items-center gap-2 text-sm text-gray-900 dark:text-white",children:[e?i.jsx(N4,{className:"h-4 w-4 text-gray-600 dark:text-gray-400"}):i.jsx(T4,{className:"h-4 w-4 text-gray-600 dark:text-gray-400"}),a("quickSettings.darkMode")]}),i.jsx(Wd,{})]}),i.jsx(V3,{compact:!0})]}),i.jsx(pl,{title:a("quickSettings.sections.toolDisplay"),children:s(zie)}),i.jsx(pl,{title:a("quickSettings.sections.viewOptions"),children:s(Bie)}),i.jsx(pl,{title:a("quickSettings.sections.agentDiff","Agent diff"),children:i.jsxs("div",{className:`${bg} flex-wrap gap-3`,children:[i.jsx("span",{className:"text-sm text-gray-900 dark:text-white",children:a("quickSettings.autoShowAgentDiff","Show agent edits as diff")}),i.jsx(Fu,{className:"flex-wrap",children:Wie.map(({value:o,labelKey:l})=>i.jsx(zu,{isActive:t.autoShowAgentDiff===o,onClick:()=>r("autoShowAgentDiff",o),className:"whitespace-nowrap",children:a(l)},o))})]})}),i.jsxs(pl,{title:a("quickSettings.sections.inputSettings"),children:[s(Uie),i.jsx("p",{className:"ml-3 text-xs text-gray-500 dark:text-gray-400",children:a("quickSettings.sendByCtrlEnterDescription")})]})]})}function Kie({isOpen:e,isDragging:t,style:n,onClick:r,onMouseDown:a,onTouchStart:s}){const{t:o}=Me("settings"),l=e?"right-64":"right-0",c=t?"border-blue-500 dark:border-blue-400":"border-gray-200 dark:border-gray-700",d=t?"":"transition-all duration-150 ease-out",u=t?"cursor-grabbing":"cursor-pointer",p=o(t?"quickSettings.dragHandle.dragging":e?"quickSettings.dragHandle.closePanel":"quickSettings.dragHandle.openPanel"),f=o(t?"quickSettings.dragHandle.draggingStatus":"quickSettings.dragHandle.toggleAndMove");return i.jsx("button",{type:"button",onClick:r,onMouseDown:a,onTouchStart:s,className:`fixed ${l} z-50 ${d} border bg-white dark:bg-gray-800 ${c} rounded-l-md p-2 shadow-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 ${u} touch-none`,style:{...n,touchAction:"none",WebkitTouchCallout:"none",WebkitUserSelect:"none"},"aria-label":p,title:f,children:t?i.jsx(UD,{className:"h-5 w-5 text-blue-500 dark:text-blue-400"}):e?i.jsx(ua,{className:"h-5 w-5 text-gray-600 dark:text-gray-400"}):i.jsx(kg,{className:"h-5 w-5 text-gray-600 dark:text-gray-400"})})}function Yie(){const{t:e}=Me("settings");return i.jsx("div",{className:"border-b border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900",children:i.jsxs("h3",{className:"flex items-center gap-2 text-lg font-semibold text-gray-900 dark:text-white",children:[i.jsx(qh,{className:"h-5 w-5 text-gray-600 dark:text-gray-400"}),e("quickSettings.title")]})})}function Zie(){const[e,t]=m.useState(!1),{isMobile:n}=Ig({trackPWA:!1}),{isDarkMode:r}=Ga(),{preferences:a,setPreference:s}=Mu(),{isDragging:o,handleStyle:l,startDrag:c,consumeSuppressedClick:d}=Hie({isMobile:n}),u=m.useMemo(()=>({autoExpandTools:a.autoExpandTools,showRawParameters:a.showRawParameters,showThinking:a.showThinking,autoScrollToBottom:a.autoScrollToBottom,sendByCtrlEnter:a.sendByCtrlEnter,autoShowAgentDiff:a.autoShowAgentDiff}),[a.autoExpandTools,a.autoScrollToBottom,a.sendByCtrlEnter,a.showRawParameters,a.showThinking,a.autoShowAgentDiff]),p=m.useCallback((g,b)=>{s(g,b)},[s]),f=m.useCallback((g,b)=>{s(g,b)},[s]),h=m.useCallback(g=>{if(d()){g.preventDefault();return}t(b=>!b)},[d]);return m.useEffect(()=>{const g=()=>t(!0),b=()=>t(x=>!x);return window.openQuickSettings=g,window.toggleQuickSettings=b,()=>{window.openQuickSettings===g&&delete window.openQuickSettings,window.toggleQuickSettings===b&&delete window.toggleQuickSettings}},[]),i.jsxs(i.Fragment,{children:[n&&i.jsx(Kie,{isOpen:e,isDragging:o,style:l,onClick:h,onMouseDown:c,onTouchStart:c}),i.jsx("div",{className:`fixed right-0 top-0 z-40 h-full w-80 transform border-l border-border bg-background shadow-xl transition-transform duration-150 ease-out ${e?"translate-x-0":"translate-x-full"} ${n?"h-screen":""}`,children:i.jsxs("div",{className:"flex h-full flex-col",children:[i.jsx(Yie,{}),i.jsx(qie,{isDarkMode:r,preferences:u,onPreferenceChange:p,onSelectChange:f})]})}),e&&i.jsx("div",{className:"fixed inset-0 z-30 bg-background/80 backdrop-blur-sm transition-opacity duration-150 ease-out",onClick:()=>t(!1)})]})}function Xie(){const[e,t]=m.useState(new Set),[n,r]=m.useState(new Set),a=m.useCallback(d=>{d&&t(u=>new Set([...u,d]))},[]),s=m.useCallback(d=>{d&&t(u=>{const p=new Set(u);return p.delete(d),p})},[]),o=m.useCallback(d=>{d&&r(u=>new Set([...u,d]))},[]),l=m.useCallback(d=>{d&&r(u=>{const p=new Set(u);return p.delete(d),p})},[]),c=m.useCallback(d=>{d&&t(u=>{const p=new Set;for(const f of u)f.startsWith("new-session-")||p.add(f);return p.add(d),p})},[]);return{activeSessions:e,processingSessions:n,markSessionAsActive:a,markSessionAsInactive:s,markSessionAsProcessing:o,markSessionAsNotProcessing:l,replaceTemporarySession:c}}const pn=e=>JSON.stringify(e??null),SN=(e,t,n)=>e.length!==t.length?!0:t.some((r,a)=>{const s=e[a];return!s||r.name!==s.name||r.displayName!==s.displayName||r.fullPath!==s.fullPath||r.fileCount!==s.fileCount||pn(r.sessionMeta)!==pn(s.sessionMeta)||pn(r.sessions)!==pn(s.sessions)?!0:pn(r.cursorSessions)!==pn(s.cursorSessions)||pn(r.codexSessions)!==pn(s.codexSessions)||pn(r.geminiSessions)!==pn(s.geminiSessions)||pn(r.qwenSessions)!==pn(s.qwenSessions)||pn(r.opencodeSessions)!==pn(s.opencodeSessions)}),Os=(e,t)=>(e??[]).map(n=>({...n,__provider:n.__provider??t})),ku=e=>[...Os(e.sessions,"claude"),...Os(e.codexSessions,"codex"),...Os(e.cursorSessions,"cursor"),...Os(e.geminiSessions,"gemini"),...Os(e.qwenSessions,"qwen"),...Os(e.opencodeSessions,"opencode")],Jie=(e,t,n,r)=>{if(!n||!r)return!0;const a=e.find(c=>c.name===n.name),s=t.find(c=>c.name===n.name);if(!a||!s)return!1;const o=ku(a).find(c=>c.id===r.id),l=ku(s).find(c=>c.id===r.id);return!o||!l?!1:o.id===l.id&&o.title===l.title&&o.created_at===l.created_at&&o.updated_at===l.updated_at},Qie=new Set(["chat","orchestration","remote","controlRoom","files","shell","git","changes","liveView","preview"]),ese=new Set(["controlRoom"]),tse=e=>Qie.has(e)||e.startsWith("plugin:"),m6=e=>ese.has(e)?"chat":e,nse=()=>{if(typeof window<"u"&&window.location.pathname.endsWith("/orchestration"))return"orchestration";try{const e=localStorage.getItem("activeTab");if(e&&tse(e))return m6(e)}catch{}return"chat"};function rse({sessionId:e,navigate:t,latestMessage:n,isMobile:r,activeSessions:a}){const[s,o]=m.useState([]),[l,c]=m.useState(null),[d,u]=m.useState(null),[p,f]=m.useState(nse);m.useEffect(()=>{try{localStorage.setItem("activeTab",m6(p))}catch{}},[p]);const[h,g]=m.useState(!1),[b,x]=m.useState(!0),[v,y]=m.useState(null),[w,k]=m.useState(!1),[S,C]=m.useState(!1),[A,R]=m.useState("agents"),[j,E]=m.useState(0),L=m.useRef(null),T=m.useCallback(async({showLoadingState:se=!0}={})=>{try{se&&x(!0);const de=await(await At.projects()).json();o(we=>we.length===0||SN(we,de,!0)?de:we)}catch(me){console.error("Error fetching projects:",me)}finally{se&&x(!1)}},[]),I=m.useCallback(async()=>{await T({showLoadingState:!1})},[T]),N=m.useCallback((se="tools")=>{R(se),C(!0)},[]);m.useEffect(()=>{T()},[T]),m.useEffect(()=>{!b&&s.length===1&&!l&&!e&&c(s[0])},[b,s,l,e]),m.useEffect(()=>{if(!n)return;if(n.type==="loading_progress"){L.current&&(clearTimeout(L.current),L.current=null),y(n),n.phase==="complete"&&(L.current=setTimeout(()=>{y(null),L.current=null},500));return}if(n.type!=="projects_updated")return;const se=n;if(se.changedFile&&d&&l){const M=se.changedFile.replace(/\\/g,"/").split("/");M.length>=2&&M[M.length-1].replace(".jsonl","")===d.id&&(a.has(d.id)||E(U=>U+1))}const me=d&&a.has(d.id)||a.size>0&&Array.from(a).some(je=>je.startsWith("new-session-")),de=se.projects;if(me&&!Jie(s,de,l,d)||(o(de),!l))return;const we=de.find(je=>je.name===l.name);if(!we||(pn(we)!==pn(l)&&c(we),!d))return;ku(we).find(je=>je.id===d.id)||u(null)},[n,l,d,a,s]),m.useEffect(()=>()=>{L.current&&(clearTimeout(L.current),L.current=null)},[]),m.useEffect(()=>{if(!(!e||s.length===0)){for(const se of s){const me=se.sessions?.find(J=>J.id===e);if(me){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="claude";J&&c(se),te&&u({...me,__provider:"claude"});return}const de=se.cursorSessions?.find(J=>J.id===e);if(de){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="cursor";J&&c(se),te&&u({...de,__provider:"cursor"});return}const we=se.codexSessions?.find(J=>J.id===e);if(we){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="codex";J&&c(se),te&&u({...we,__provider:"codex"});return}const Ce=se.geminiSessions?.find(J=>J.id===e);if(Ce){const J=typeof Ce.id=="string"&&Ce.id.startsWith("qwen_")||Ce.provider==="qwen",H=typeof Ce.id=="string"&&Ce.id.startsWith("opencode_")||Ce.provider==="opencode"?"opencode":J?"qwen":"gemini",U=l?.name!==se.name,Q=d?.id!==e||d.__provider!==H;U&&c(se),Q&&u({...Ce,__provider:H});return}const je=se.qwenSessions?.find(J=>J.id===e);if(je){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="qwen";J&&c(se),te&&u({...je,__provider:"qwen"});return}const M=se.opencodeSessions?.find(J=>J.id===e);if(M){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="opencode";J&&c(se),te&&u({...M,__provider:"opencode"});return}}if(e&&d?.id!==e){const se=e.startsWith("opencode_")?"opencode":e.startsWith("qwen_")?"qwen":e.startsWith("codex-")||e.startsWith("codex_")?"codex":e.startsWith("gemini_")?"gemini":null,me=(typeof window<"u"?localStorage.getItem("selected-provider"):null)||"claude";u({id:e,__provider:se||me})}}},[e,s,l?.name,d?.id,d?.__provider]);const O=m.useCallback(se=>{c(se),u(null),t("/"),r&&g(!1)},[r,t]),$=m.useCallback(se=>{u(se),(p==="preview"||p==="liveView"||p==="orchestration")&&f("chat");const me=se.__provider||localStorage.getItem("selected-provider")||"claude";if(se.__provider&&localStorage.setItem("selected-provider",se.__provider),me==="cursor"&&sessionStorage.setItem("cursorSessionId",se.id),r){const de=se.__projectName,we=l?.name;de!==we&&g(!1)}t(`/session/${se.id}`)},[p,r,t,l?.name]),F=m.useCallback(se=>{o(me=>{const de=me.findIndex(Ce=>Ce.name===se.name);if(de===-1)return[se,...me];const we=[...me];return we[de]={...we[de],...se},we}),c(se),u(null),f("chat"),t("/"),r&&g(!1)},[r,t]),q=m.useCallback(se=>{F(se)},[F]),Y=m.useCallback(async se=>{try{const me=await At.quickStartProject(),de=await me.json().catch(()=>({}));if(!me.ok||!de?.project){console.error("[quick-start] failed:",de);return}const we=de.project;if(se==="chat"){F(we);return}o(Ce=>Ce.some(je=>je.name===we.name)?Ce:[we,...Ce]),c(we),u(null),f(se),t("/"),r&&g(!1)}catch(me){console.error("[quick-start] error:",me)}},[r,t,F]),P=m.useCallback(async()=>{await Y("chat")},[Y]),B=m.useCallback(async()=>{await Y("orchestration")},[Y]),V=m.useCallback((se,me)=>{c(se),u(null),f("orchestration"),me&&localStorage.setItem("pixcode.orchestration.selectedRunId",me),t("/"),r&&g(!1)},[r,t]),z=m.useCallback(()=>{u(null),f("controlRoom"),t("/"),r&&g(!1)},[r,t]),ee=m.useCallback(se=>{d?.id===se&&(u(null),t("/")),o(me=>me.map(de=>({...de,sessions:de.sessions?.filter(we=>we.id!==se)??[],sessionMeta:{...de.sessionMeta,total:Math.max(0,(de.sessionMeta?.total??0)-1)}})))},[t,d?.id]),ae=m.useCallback(async()=>{try{const me=await(await At.projects()).json();if(o(Ce=>SN(Ce,me,!0)?me:Ce),!l)return;const de=me.find(Ce=>Ce.name===l.name);if(!de||(pn(de)!==pn(l)&&c(de),!d))return;const we=ku(de).find(Ce=>Ce.id===d.id);if(we){const Ce=we.__provider||!d.__provider?we:{...we,__provider:d.__provider};pn(Ce)!==pn(d)&&u(Ce)}}catch(se){console.error("Error refreshing sidebar:",se)}},[l,d]),ue=m.useCallback(se=>{l?.name===se&&(c(null),u(null),t("/")),o(me=>me.filter(de=>de.name!==se))},[t,l?.name]),le=m.useMemo(()=>({projects:s,selectedProject:l,selectedSession:d,onProjectSelect:O,onSessionSelect:$,onNewSession:q,onProjectCreated:F,onQuickStartSession:P,onOpenControlRoom:z,onOpenOrchestration:V,onSessionDelete:ee,onProjectDelete:ue,isLoading:b,loadingProgress:v,onRefresh:ae,onShowSettings:()=>C(!0),showSettings:S,settingsInitialTab:A,onCloseSettings:()=>C(!1),isMobile:r}),[q,z,V,F,P,ue,O,ee,$,ae,b,r,v,s,A,l,d,S]);return{projects:s,selectedProject:l,selectedSession:d,activeTab:p,sidebarOpen:h,isLoadingProjects:b,loadingProgress:v,isInputFocused:w,showSettings:S,settingsInitialTab:A,externalMessageUpdate:j,setActiveTab:f,setSidebarOpen:g,setIsInputFocused:k,setShowSettings:C,openSettings:N,fetchProjects:T,refreshProjectsSilently:I,sidebarSharedProps:le,handleProjectSelect:O,handleSessionSelect:$,handleNewSession:q,handleOpenOrchestration:V,handleQuickStartOrchestration:B,handleSessionDelete:ee,handleProjectDelete:ue,handleSidebarRefresh:ae}}function Ph(){const e=Z6(),{sessionId:t}=X6(),{t:n}=Me("common"),{isMobile:r}=Ig({trackPWA:!1}),{ws:a,sendMessage:s,latestMessage:o,isConnected:l}=L4(),c=m.useRef(!1),{activeSessions:d,processingSessions:u,markSessionAsActive:p,markSessionAsInactive:f,markSessionAsProcessing:h,markSessionAsNotProcessing:g,replaceTemporarySession:b}=Xie(),{selectedProject:x,selectedSession:v,activeTab:y,sidebarOpen:w,isLoadingProjects:k,externalMessageUpdate:S,setActiveTab:C,setSidebarOpen:A,setIsInputFocused:R,setShowSettings:j,openSettings:E,refreshProjectsSilently:L,sidebarSharedProps:T,handleQuickStartOrchestration:I}=rse({sessionId:t,navigate:e,latestMessage:o,isMobile:r,activeSessions:d});return m.useEffect(()=>(window.refreshProjects=L,()=>{window.refreshProjects===L&&delete window.refreshProjects}),[L]),m.useEffect(()=>(window.openSettings=E,()=>{window.openSettings===E&&delete window.openSettings}),[E]),m.useEffect(()=>{if(typeof navigator>"u"||!("serviceWorker"in navigator))return;const N=O=>{const $=O.data;if(!(!$||$.type!=="notification:navigate")){if(typeof $.provider=="string"&&$.provider.trim()&&localStorage.setItem("selected-provider",$.provider),C("chat"),A(!1),L(),typeof $.sessionId=="string"&&$.sessionId){e(`/session/${$.sessionId}`);return}e("/")}};return navigator.serviceWorker.addEventListener("message",N),()=>{navigator.serviceWorker.removeEventListener("message",N)}},[e,L,C,A]),m.useEffect(()=>{l&&!c.current?c.current=!0:l||(c.current=!1),l&&v?.id&&s({type:"get-pending-permissions",sessionId:v.id})},[l,v?.id,s]),m.useEffect(()=>{if(!o||o.type!=="projects_updated"&&o.type!=="project_files_updated")return;const N=o.type==="project_files_updated"?typeof o.projectName=="string"?o.projectName:null:x?.name??null;window.dispatchEvent(new CustomEvent("pixcode:file-tree-refresh",{detail:{projectName:N,changedFile:typeof o.changedFile=="string"?o.changedFile:null,oldContent:typeof o.oldContent=="string"?o.oldContent:null,currentContent:typeof o.currentContent=="string"?o.currentContent:null}}))},[o,x?.name]),m.useEffect(()=>{const N=window.visualViewport;if(!N)return;const O=()=>{const $=Math.max(0,window.innerHeight-N.height);document.documentElement.style.setProperty("--keyboard-height",`${$}px`)};return N.addEventListener("resize",O),()=>N.removeEventListener("resize",O)},[]),i.jsxs("div",{className:"fixed inset-0 flex bg-background",style:{bottom:"var(--keyboard-height, 0px)"},children:[r?i.jsxs("div",{className:`fixed inset-0 z-50 flex transition-all duration-150 ease-out ${w?"visible opacity-100":"invisible opacity-0"}`,children:[i.jsx("button",{className:"fixed inset-0 bg-background/60 backdrop-blur-sm transition-opacity duration-150 ease-out",onClick:N=>{N.stopPropagation(),A(!1)},onTouchStart:N=>{N.preventDefault(),N.stopPropagation(),A(!1)},"aria-label":n("versionUpdate.ariaLabels.closeSidebar")}),i.jsx("div",{className:`relative h-full w-[85vw] max-w-sm transform border-r border-border/40 bg-card transition-transform duration-150 ease-out sm:w-80 ${w?"translate-x-0":"-translate-x-full"}`,onClick:N=>N.stopPropagation(),onTouchStart:N=>N.stopPropagation(),children:i.jsx(J3,{...T})})]}):null,i.jsx("div",{className:"flex min-w-0 flex-1 flex-col",children:r?i.jsx(Zae,{selectedProject:x,selectedSession:v,activeTab:y,setActiveTab:C,ws:a,sendMessage:s,latestMessage:o,isMobile:r,onMenuClick:()=>A(!0),isLoading:k,onInputFocusChange:R,onSessionActive:p,onSessionInactive:f,onSessionProcessing:h,onSessionNotProcessing:g,processingSessions:u,onReplaceTemporarySession:b,onNavigateToSession:N=>e(`/session/${N}`),onShowSettings:()=>j(!0),externalMessageUpdate:S,onQuickStartSession:T.onQuickStartSession,onQuickStartOrchestration:I}):i.jsx(Sie,{sidebarProps:T,selectedProject:x,selectedSession:v,activeTab:y,setActiveTab:C,ws:a,sendMessage:s,latestMessage:o,isMobile:r,onMenuClick:()=>A(!0),isLoading:k,onInputFocusChange:R,onSessionActive:p,onSessionInactive:f,onSessionProcessing:h,onSessionNotProcessing:g,processingSessions:u,onReplaceTemporarySession:b,onNavigateToSession:N=>e(`/session/${N}`),onShowSettings:()=>j(!0),externalMessageUpdate:S,onQuickStartSession:T.onQuickStartSession,onQuickStartOrchestration:I})}),i.jsx(Zie,{}),r&&i.jsx(r6,{latestMessage:o})]})}const{slice:ase,forEach:ise}=[];function sse(e){return ise.call(ase.call(arguments,1),t=>{if(t)for(const n in t)e[n]===void 0&&(e[n]=t[n])}),e}function ose(e){return typeof e!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(n=>n.test(e))}const CN=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,lse=function(e,t){const r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},a=encodeURIComponent(t);let s=`${e}=${a}`;if(r.maxAge>0){const o=r.maxAge-0;if(Number.isNaN(o))throw new Error("maxAge should be a Number");s+=`; Max-Age=${Math.floor(o)}`}if(r.domain){if(!CN.test(r.domain))throw new TypeError("option domain is invalid");s+=`; Domain=${r.domain}`}if(r.path){if(!CN.test(r.path))throw new TypeError("option path is invalid");s+=`; Path=${r.path}`}if(r.expires){if(typeof r.expires.toUTCString!="function")throw new TypeError("option expires is invalid");s+=`; Expires=${r.expires.toUTCString()}`}if(r.httpOnly&&(s+="; HttpOnly"),r.secure&&(s+="; Secure"),r.sameSite)switch(typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return r.partitioned&&(s+="; Partitioned"),s},NN={create(e,t,n,r){let a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};n&&(a.expires=new Date,a.expires.setTime(a.expires.getTime()+n*60*1e3)),r&&(a.domain=r),document.cookie=lse(e,t,a)},read(e){const t=`${e}=`,n=document.cookie.split(";");for(let r=0;r<n.length;r++){let a=n[r];for(;a.charAt(0)===" ";)a=a.substring(1,a.length);if(a.indexOf(t)===0)return a.substring(t.length,a.length)}return null},remove(e,t){this.create(e,"",-1,t)}};var cse={name:"cookie",lookup(e){let{lookupCookie:t}=e;if(t&&typeof document<"u")return NN.read(t)||void 0},cacheUserLanguage(e,t){let{lookupCookie:n,cookieMinutes:r,cookieDomain:a,cookieOptions:s}=t;n&&typeof document<"u"&&NN.create(n,e,r,a,s)}},dse={name:"querystring",lookup(e){let{lookupQuerystring:t}=e,n;if(typeof window<"u"){let{search:r}=window.location;!window.location.search&&window.location.hash?.indexOf("?")>-1&&(r=window.location.hash.substring(window.location.hash.indexOf("?")));const s=r.substring(1).split("&");for(let o=0;o<s.length;o++){const l=s[o].indexOf("=");l>0&&s[o].substring(0,l)===t&&(n=s[o].substring(l+1))}}return n}},use={name:"hash",lookup(e){let{lookupHash:t,lookupFromHashIndex:n}=e,r;if(typeof window<"u"){const{hash:a}=window.location;if(a&&a.length>2){const s=a.substring(1);if(t){const o=s.split("&");for(let l=0;l<o.length;l++){const c=o[l].indexOf("=");c>0&&o[l].substring(0,c)===t&&(r=o[l].substring(c+1))}}if(r)return r;if(!r&&n>-1){const o=a.match(/\/([a-zA-Z-]*)/g);return Array.isArray(o)?o[typeof n=="number"?n:0]?.replace("/",""):void 0}}}return r}};let Ms=null;const EN=()=>{if(Ms!==null)return Ms;try{if(Ms=typeof window<"u"&&window.localStorage!==null,!Ms)return!1;const e="i18next.translate.boo";window.localStorage.setItem(e,"foo"),window.localStorage.removeItem(e)}catch{Ms=!1}return Ms};var pse={name:"localStorage",lookup(e){let{lookupLocalStorage:t}=e;if(t&&EN())return window.localStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupLocalStorage:n}=t;n&&EN()&&window.localStorage.setItem(n,e)}};let Fs=null;const TN=()=>{if(Fs!==null)return Fs;try{if(Fs=typeof window<"u"&&window.sessionStorage!==null,!Fs)return!1;const e="i18next.translate.boo";window.sessionStorage.setItem(e,"foo"),window.sessionStorage.removeItem(e)}catch{Fs=!1}return Fs};var mse={name:"sessionStorage",lookup(e){let{lookupSessionStorage:t}=e;if(t&&TN())return window.sessionStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupSessionStorage:n}=t;n&&TN()&&window.sessionStorage.setItem(n,e)}},hse={name:"navigator",lookup(e){const t=[];if(typeof navigator<"u"){const{languages:n,userLanguage:r,language:a}=navigator;if(n)for(let s=0;s<n.length;s++)t.push(n[s]);r&&t.push(r),a&&t.push(a)}return t.length>0?t:void 0}},fse={name:"htmlTag",lookup(e){let{htmlTag:t}=e,n;const r=t||(typeof document<"u"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(n=r.getAttribute("lang")),n}},gse={name:"path",lookup(e){let{lookupFromPathIndex:t}=e;if(typeof window>"u")return;const n=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(n)?n[typeof t=="number"?t:0]?.replace("/",""):void 0}},bse={name:"subdomain",lookup(e){let{lookupFromSubdomainIndex:t}=e;const n=typeof t=="number"?t+1:1,r=typeof window<"u"&&window.location?.hostname?.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(r)return r[n]}};let h6=!1;try{document.cookie,h6=!0}catch{}const f6=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];h6||f6.splice(1,1);const xse=()=>({order:f6,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:e=>e});class g6{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(t,n)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=t,this.options=sse(n,this.options||{},xse()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=a=>a.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=r,this.addDetector(cse),this.addDetector(dse),this.addDetector(pse),this.addDetector(mse),this.addDetector(hse),this.addDetector(fse),this.addDetector(gse),this.addDetector(bse),this.addDetector(use)}addDetector(t){return this.detectors[t.name]=t,this}detect(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,n=[];return t.forEach(r=>{if(this.detectors[r]){let a=this.detectors[r].lookup(this.options);a&&typeof a=="string"&&(a=[a]),a&&(n=n.concat(a))}}),n=n.filter(r=>r!=null&&!ose(r)).map(r=>this.options.convertDetectedLanguage(r)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?n:n.length>0?n[0]:null}cacheUserLanguage(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;n&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(t)>-1||n.forEach(r=>{this.detectors[r]&&this.detectors[r].cacheUserLanguage(t,this.options)}))}}g6.type="languageDetector";const vse={save:"Save",cancel:"Cancel",delete:"Delete",create:"Create",edit:"Edit",close:"Close",confirm:"Confirm",submit:"Submit",retry:"Retry",refresh:"Refresh",search:"Search",clear:"Clear",copy:"Copy",download:"Download",upload:"Upload",browse:"Browse"},yse={chat:"Chat",shell:"Shell",files:"Files",git:"Source Control",changes:"Changes",liveView:"Live View",tasks:"Tasks",remote:"Remote",controlRoom:"Control",orchestration:"Orchestration"},wse={loading:"Loading...",success:"Success",error:"Error",failed:"Failed",pending:"Pending",completed:"Completed",inProgress:"In Progress"},kse={savedSuccessfully:"Saved successfully",deletedSuccessfully:"Deleted successfully",updatedSuccessfully:"Updated successfully",operationFailed:"Operation failed",networkError:"Network error. Please check your connection.",unauthorized:"Unauthorized. Please log in.",notFound:"Not found",invalidInput:"Invalid input",requiredField:"This field is required",unknownError:"An unknown error occurred"},Sse={settings:"Settings",home:"Home",back:"Back",next:"Next",previous:"Previous",logout:"Logout"},Cse={language:"Language",theme:"Theme",darkMode:"Dark Mode",lightMode:"Light Mode",name:"Name",description:"Description",enabled:"Enabled",disabled:"Disabled",optional:"Optional",version:"Version",select:"Select",selectAll:"Select All",deselectAll:"Deselect All"},Nse={justNow:"Just now",minutesAgo:"{{count}} mins ago",hoursAgo:"{{count}} hours ago",daysAgo:"{{count}} days ago",yesterday:"Yesterday"},Ese={newFile:"New File",newFolder:"New Folder",rename:"Rename",move:"Move",copyPath:"Copy Path",openInEditor:"Open in Editor"},Tse={loading:"Loading Pixcode",settingUpWorkspace:"Setting up your workspace...",chooseProject:"Choose Your Project",selectProjectDescription:"Select a project from the sidebar to start coding with Claude. Each project contains your chat sessions and file history.",tip:"Tip",createProjectMobile:"Tap the menu button above to access projects",createProjectDesktop:"Create a new project by clicking the folder icon in the sidebar",newSession:"New Session",untitledSession:"Untitled Session",projectFiles:"Project Files",landing:{title:"Start a Pixcode workspace",description:"Choose a project, start a new chat, or launch Orchestration with one goal. Orchestration manages the CLI agents you select, shows every step, and surfaces errors directly.",startOrchestration:"Start Orchestration",startOrchestrationDescription:"Creates an automatic project and opens the Orchestration screen with agent control and run history.",startChat:"Start a new chat",startChatDescription:"Creates a folder automatically and opens the normal chat screen with one agent.",sidebarHint:"When you select an existing project from the sidebar, chat history, files, git status, tasks, and orchestration stay in the same main screen.",createProject:"Create New Project",createProjectDescription:"Add an existing workspace or create a folder, then open the provider picker for coding."}},Ase={title:"Orchestration",subtitle:"Pixcode can coordinate local checks, tests, terminal work, and project operations for {{project}}.",refresh:"Refresh",goal:"Goal",goalPlaceholder:"Example: Fix the auth screen for single-port deployment, capture errors, and verify with lint and typecheck.",mode:"Run mode",systemPlan:"System plan",noMode:"No mode selected",loadingPlan:"Loading agent plan.",start:"Start team",starting:"Starting",stop:"Stop team",stopping:"Stopping",cancelFailed:"Workflow could not be stopped.",linkedTask:"Linked task",replayRun:"Replay",replaying:"Replaying",approveReplay:"Approve replay",replayApprovalRequired:"Replay needs approval before repeating a step with prior shell, network, or file-write activity.",replayFailed:"Workflow replay could not start.",needAgent:"Enable at least one CLI worker.",needRoles:"Assign at least one enabled agent to these role(s) for this mode: {{roles}}.",startFailed:"Workflow could not start.",quickPrompts:{label:"Quick prompt:",liveTrading:{label:"8024 live trading screen",prompt:"Hi, please create a small project and then run it on port 8024. I want a Binance FAPI-connected TradingView-style design with a TradingView chart and a star/favorites system on the left. Split the work logically and manage the process automatically."}},cliControl:"CLI team control",enabledCount:"{{count}} enabled",enabled:"Enabled",disabled:"Disabled",history:"History",emptyHistory:"No runs yet. Write a goal and start the agents.",steps:"{{done}}/{{total}} steps",notSelected:"No run selected",notSelectedDescription:"Select a previous run or start a new goal. Agent messages, errors, change summaries, and preview outputs appear here.",loadFailed:"Run details could not be loaded.",loadingRun:"Loading run...",traceTimeline:"Trace timeline",traceFilters:"Filters",traceAll:"All",traceActor:"Actor",traceProvider:"Provider",traceType:"Type",traceSeverity:"Severity",traceDuration:"{{duration}} elapsed",traceEmpty:"No trace events match the current filters.",traceLoadFailed:"Trace timeline could not be loaded.",traceTypes:{run:"Run",node:"Step",provider:"Provider",message:"Message",artifact:"Artifact",file:"File edit",permission_policy:"Permission policy",error:"Error"},traceSeverityLevels:{info:"Info",warning:"Warning",error:"Error"},teamHistory:"Team history",permissionApprovalsPending:"{{count}} permission approval pending",agentSteps:"Agent steps",changeSummary:"Change summary",noChangeSummary:"The final summary is not ready yet. A readable Markdown summary appears here when the agents finish.",prepareTeamFromReport:"Prepare agent team from this report",prepareTeamTitle:"Prepare agent team prompt",prepareTeamDescription:"The debate output was turned into a new Agent Team prompt. Edit it, then move it into Agent Team mode.",usePreparedPrompt:"Use prompt",reportToPromptPrefix:"Prepare and execute an agent team from the following debate/decision report. Split the needs into tasks, propose sensible assignments for the available CLI agents, and start only after user confirmation.",generatedSummaryTitle:"Automatic run summary",summaryStatus:"Overall status",summarySteps:"Completed steps",summaryFailures:"Failed steps",summaryCanceled:"Canceled steps",summaryDiffs:"Diff/change outputs",summaryPreviews:"Preview outputs",summaryErrorPrefix:"Error",assignedWork:"Assigned work",autoAssigned:"Automatic / coordinator decides",noStepOutput:"No step output.",agentMessages:"Agent messages",noAgentMessages:"This agent has not produced a message yet. If the run failed, the real CLI error appears above.",outputs:"Outputs",noOutputs:"No change summary, preview, or command output yet.",open:"Open",artifact:{fileDiff:"Change summary",previewUrl:"Preview",commandOutput:"Command output",handoff:"Handoff artifact"},role:{user:"User",agent:"Agent"},status:{queued:"Queued",running:"Running",completed:"Completed",failed:"Failed",canceled:"Canceled",skipped:"Skipped"},nodes:{codex_review:"Codex review",gemini_review:"Gemini review",claude_review:"Claude review",claude_code_review:"Claude review",cursor_review:"Cursor review",aggregate:"Aggregate",architect:"Planning",implement:"Implementation",review:"Review",proposal:"Proposal",critique:"Critique",response:"Response",judge:"Decision",coordinator:"Coordinator",final_report:"Final report"},stages:{coordinator:"Coordinator",handoff:"Handoff",backend:"Backend",frontend:"Frontend",implementation:"Implementation",review:"Review",repair:"Repair",proposal:"Proposal",critique:"Critique",response:"Response",decision:"Decision",report:"Report",fallback:"Fallback",final_report:"Final report"},workflows:{multi_model_review:{name:"Multi-model review",description:"Enabled CLI agents review the same goal separately, then one enabled agent aggregates the result."},sequential_handoff:{name:"Sequential handoff",description:"Agents plan, implement, and review in order. Disabled CLI steps are skipped."},adversarial_debate:{name:"Decision debate",description:"Agents propose, critique, respond, and produce a final recommendation."},agent_team:{name:"Agent team",description:"A coordinator reads the goal and active CLI instances, assigns work, then collects the result."}},adapters:{"claude-code":{label:"Claude Code",role:"CLI worker"},cursor:{label:"Cursor",role:"CLI worker"},codex:{label:"Codex",role:"CLI worker"},gemini:{label:"Gemini",role:"CLI worker"},qwen:{label:"Qwen Code",role:"CLI worker"},opencode:{label:"OpenCode",role:"CLI worker"}},activeCount:"{{active}}/{{total}} active",teamHint:"Each row is one CLI worker. You can create multiple Claude, Codex, Cursor, Gemini, Qwen, or OpenCode workers and give each a different assignment.",parallelLimit:"Parallel limit",fallbackAgent:"Fallback CLI",noFallbackAgent:"No automatic fallback",fallbackAgentHint:"If a CLI step fails, Pixcode retries that step with this backup agent.",agentRole:"Stage",agentModel:"Model",agentRoles:{auto:"Auto",backend:"Backend",frontend:"Frontend",review:"Test / review",implementation:"Implementation",proposal:"Proposal",critique:"Critique",response:"Response",decision:"Decision / report",report:"Report",custom:"Custom"},customRolePlaceholder:"Example: Security, Mobile UX, DB architecture",roleHints:{default:"Leave empty and the coordinator assigns this agent from the goal.",agent_team:"Pick backend, frontend, or review stages, or leave agents on auto.",multi_model_review:"Enabled agents review; if a report role is selected, that agent aggregates the final summary.",sequential_handoff:"Agents run in your selected order; assignment text defines each step.",adversarial_debate:"Stage selection is optional in decision debate; if left empty, the system assigns selected agents to Proposal, Critique, and Response in order."},addAgent:"Add {{agent}}",soloAgent:"Run only with {{agent}}",soloAgentShort:"Solo",duplicateAgent:"Duplicate {{agent}}",removeAgent:"Remove {{agent}}",assignment:"Assignment",assignmentPlaceholder:"Optional: tell this worker exactly what to handle. Leave empty for coordinator assignment.",agentInstance:"{{name}} #{{number}}",taskTitle:"Task",taskTitlePlaceholder:"Implement feature",taskDescription:"Description",taskDescriptionPlaceholder:"Scope, constraints, expected output",addTask:"Add",runTask:"Run",cancelTask:"Cancel",dispatchTask:"Dispatch task",adapter:"Adapter",isolation:"Isolation",dispatch:"Dispatch",auto:"Auto",cliSettings:"CLI settings",waitingForStream:"Waiting for stream...",workflow:"Workflow",templates:"Templates",noTemplate:"No template",templateHint:"Pick a starter template to fill the workflow, agent roles, and acceptance criteria before launch.",input:"Input",taskStates:{todo:"To Do",in_progress:"In Progress",in_review:"In Review",done:"Done",failed:"Failed",canceled:"Canceled"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},workspaceTarget:"Target workspace",workspaceTargets:{selectedProject:"Selected project",pixcodeApp:"Pixcode system",custom:"Custom path"},customWorkspacePlaceholder:"/path/to/project",workspaceTargetHint:"Agents will run in: {{path}}",autoDetect:"auto-detect",needWorkspacePath:"Enter a custom workspace path.",quickWorkspaceCheck:"Workspace check"},jse={loading:"Loading files...",files:"Files",simpleView:"Simple view",compactView:"Compact view",detailedView:"Detailed view",searchPlaceholder:"Search files and folders...",clearSearch:"Clear search",name:"Name",size:"Size",modified:"Modified",permissions:"Permissions",noFilesFound:"No files found",checkProjectPath:"Check if the project path is accessible",noMatchesFound:"No matches found",tryDifferentSearch:"Try a different search term or clear the search",justNow:"just now",minAgo:"{{count}} min ago",hoursAgo:"{{count}} hours ago",daysAgo:"{{count}} days ago",newFile:"New File (Cmd+N)",newFolder:"New Folder (Cmd+Shift+N)",refresh:"Refresh",collapseAll:"Collapse All",context:{rename:"Rename",delete:"Delete",copyPath:"Copy Path",download:"Download",newFile:"New File",newFolder:"New Folder",refresh:"Refresh",menuLabel:"File context menu",loading:"Loading..."}},Rse={title:"Create New Project",steps:{type:"Type",configure:"Configure",confirm:"Confirm"},step1:{question:"Do you already have a workspace, or would you like to create a new one?",existing:{title:"Existing Workspace",description:"I already have a workspace on my server and just need to add it to the project list"},new:{title:"New Workspace",description:"Create a new workspace, optionally clone from a GitHub repository"},githubClone:{title:"Clone from GitHub",description:"Pick a target folder and clone a repository into it"},subfolder:{title:"Create Subfolder",description:"Pick a parent folder and create a fresh subfolder inside it"}},step2:{existingPath:"Workspace Path",newPath:"Workspace Path",subfolderParentPath:"Parent Folder",subfolderParentHelp:"Path to the folder where the new subfolder will be created",subfolderName:"Subfolder Name",subfolderNameHelp:"A new folder with this name will be created inside the parent above",existingPlaceholder:"/path/to/existing/workspace",newPlaceholder:"/path/to/new/workspace",existingHelp:"Full path to your existing workspace directory",newHelp:"Full path to your workspace directory",githubUrl:"GitHub URL (Optional)",githubPlaceholder:"https://github.com/username/repository",githubHelp:"Optional: provide a GitHub URL to clone a repository",githubAuth:"GitHub Authentication (Optional)",githubAuthHelp:"Only required for private repositories. Public repos can be cloned without authentication.",loadingTokens:"Loading stored tokens...",storedToken:"Stored Token",newToken:"New Token",nonePublic:"None (Public)",selectToken:"Select Token",selectTokenPlaceholder:"-- Select a token --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"This token will be used only for this operation",publicRepoInfo:"Public repositories don't require authentication. You can skip providing a token if cloning a public repo.",noTokensHelp:"No stored tokens available. You can add tokens in Settings → API Keys for easier reuse.",optionalTokenPublic:"GitHub Token (Optional for Public Repos)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (leave empty for public repos)"},step3:{reviewConfig:"Review Your Configuration",workspaceType:"Workspace Type:",existingWorkspace:"Existing Workspace",newWorkspace:"New Workspace",subfolderWorkspace:"New Subfolder",path:"Path:",parentPath:"Parent Path:",subfolderName:"Subfolder Name:",cloneFrom:"Clone From:",authentication:"Authentication:",usingStoredToken:"Using stored token:",usingProvidedToken:"Using provided token",noAuthentication:"No authentication",sshKey:"SSH Key",existingInfo:"The workspace will be added to your project list and will be available for Claude/Cursor sessions.",newWithClone:"The repository will be cloned from this folder.",newEmpty:"The workspace will be added to your project list and will be available for Claude/Cursor sessions.",subfolderInfo:"A new subfolder will be created inside the parent folder and added to your project list.",cloningRepository:"Cloning repository..."},buttons:{cancel:"Cancel",back:"Back",next:"Next",createProject:"Create Project",creating:"Creating...",cloning:"Cloning..."},errors:{selectType:"Please select whether you have an existing workspace or want to create a new one",providePath:"Please provide a workspace path",provideSubfolderName:"Please provide a name for the subfolder",subfolderNameInvalid:"Subfolder name cannot contain path separators or be . / ..",failedToCreate:"Failed to create workspace",failedToCreateFolder:"Failed to create folder"}},Ise={genericTool:"a tool",codes:{generic:{info:{title:"Notification"}},permission:{required:{title:"Action Required",body:"{{toolName}} is waiting for your decision."}},run:{stopped:{title:"Run Stopped",body:"Reason: {{reason}}"},failed:{title:"Run Failed"}},agent:{notification:{title:"Agent Notification"}}},open:"Open notifications",title:"Notifications",markRead:"Read",close:"Close notifications",dismiss:"Dismiss notification"},_se={title:"Update Available",newVersionReady:"A new version is ready",currentVersion:"Current Version",latestVersion:"Latest Version",latestRelease:"Latest Release",releaseNotesTitle:"Release Notes",releaseNotesSubtitle:"Latest Pixcode changes",whatsNew:"What's New:",viewFullRelease:"View full release",updateProgress:"Update Progress:",manualUpgrade:"Manual upgrade:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:'Or click "Update Now" to run the update automatically.',updateCompleted:"Update completed successfully!",restartServer:"Please restart the server to apply changes.",updateFailed:"Update failed",buttons:{close:"Close",later:"Later",copyCommand:"Copy Command",updateNow:"Update Now",updating:"Updating..."},ariaLabels:{closeModal:"Close version upgrade modal",showSidebar:"Show sidebar",settings:"Settings",updateAvailable:"Update available",closeSidebar:"Close sidebar"}},Lse={title:"Live View",subtitle:"Run this project locally and share it through the active secure tunnel when one is running.",start:"Start",restart:"Restart",stop:"Stop",runnerError:"Runner error",runnerUnavailable:"Runner unavailable",managedRuntimePreparing:"Pixcode will prepare the runtime",managedRuntimeDescription:"Press Start and Pixcode will prepare the required local runtime automatically.",preparingRuntime:"Preparing runtime…",preparingRuntimeDescription:"Pixcode is downloading and installing the runtime locally. This can take a moment on first use.",runnerErrorFallback:"The runner stopped before the preview became available.",detecting:"Detecting project runner…",noRunner:"No runner detected",staticHint:"Static HTML will be served directly when index.html exists.",customCommand:"Custom command",custom:"Custom",customPlaceholder:"npm run dev, python app.py, go run .",environment:"Environment",environmentLocalProcess:"Local process",environmentStatic:"Static files",environmentUnavailable:"Unavailable",statusLabel:"Status",framework:"Framework",command:"Command",upstream:"Upstream",publicTunnel:"Public tunnel",tunnelActive:"Tunnel active",tunnelLocalOnly:"Local only",diagnostics:"Diagnostics",viewport:"Viewport",viewportDesktop:"Desktop",viewportTablet:"Tablet",viewportMobile:"Mobile",viewportWidth:"Width",viewportHeight:"Height",controls:"Runner, viewport and logs",shareLink:"Share link",starting:"Starting",openExternal:"Open externally",externalActive:"Secure tunnel is active; this link can be shared outside your network.",localOnly:"External Access is off; this link is local to this Pixcode server.",frameTitle:"Project Live View",emptyTitle:"Start Live View",emptyDescription:"Pixcode will detect the project stack, start the local web server, and expose it here."},Pse=JSON.parse('{"title":"Control room","subtitle":"Production, platform, admin, audit, and self-hosted access for {{target}}","thisServer":"this server","refresh":"Refresh","nav":{"overview":"Overview","production":"Production","admin":"Admin","team":"Team","secrets":"Secrets","marketplace":"Marketplace","eval":"Evaluations","usage":"Usage","security":"Security","access":"Access"},"overview":{"title":"v1.46 launch surface","description":"Every box below is backed by a v1.44-v1.45 API and is now visible from the UI.","latestAuditEvents":"Latest audit events","remoteAccessOptions":"Remote access options"},"metrics":{"issueRuns":"Issue-to-PR runs","reviewItems":"Review items","subUsers":"Sub-users","collaborators":"Collaborators","secrets":"Scoped secrets","marketplace":"Marketplace","evalRuns":"Eval runs","securityAudits":"Security audits","attention":"Attention","running":"Running","needsAttention":"Needs attention","runningNow":"Running now","reviews":"Reviews","checkpoints":"Checkpoints","roles":"Roles","auditEvents":"Audit events","scopedSecrets":"Scoped secrets","auditRuns":"Audit runs","findings":"Findings","usageRows":"Usage rows","evalSuites":"Eval suites"},"sections":{"production":{"title":"Production loop","description":"Start issue-to-PR runs, parse CI failures, review changes, schedule background jobs, and create checkpoints."},"admin":{"title":"Admin system","description":"Create sub-users, disable accounts, and inspect activity for a single self-hosted Pixcode server."},"team":{"title":"Project collaborators","description":"Assign partners, workers, reviewers, and viewers per project without making everyone a global admin."},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"Self-hosted access","description":"Use Tailscale when there is no fixed domain, or configure Cloudflare Tunnel/custom domain for a stable public URL."}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Create sub-user","rolePermissions":"Role permissions","addCollaborator":"Add collaborator","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Remote access setup"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Queue run","parseFailure":"Parse failure","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Create user","disable":"Disable","enable":"Enable","addCollaborator":"Add collaborator","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Save access path","checkUrl":"Check URL","checkTailscale":"Check Tailscale"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"How collaborators get access","stepUsers":"Create a sub-user","stepUsersDescription":"Create the person in Admin system with a global role such as member, viewer, project_worker, or project_partner.","stepRole":"Assign project role","stepRoleDescription":"Add the same user as a project collaborator so they only see and operate on the projects you choose.","stepLink":"Share an access path","stepLinkDescription":"Give them the Tailscale, Cloudflare Tunnel, custom domain, or LAN URL configured in Self-hosted access.","paths":"Available access links"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operations","description":"Runs, reviews, approvals, scheduler, checkpoints"},"people":{"label":"People","description":"Admins, collaborators, roles, activity"},"access":{"label":"Access","description":"LAN, Tailscale, tunnel, domain guidance"},"security":{"label":"Security","description":"Secrets, permission risk, audit checks"},"insights":{"label":"Insights","description":"Usage, evaluations, marketplace health"}},"context":{"title":"What this means","recommendedNextStep":"Recommended next step","runTimeline":"Run timeline","runTimelineDescription":"Readable activity feed for agents, reviewers, checkpoints, and audit events.","emptyTimelineTitle":"No run timeline yet","emptyTimelineDescription":"Run activity appears here after issue runs, reviews, checkpoints, or audit events are recorded.","serverSignal":"Server signal","serverSignalDescription":"The first screen avoids raw backend sections and shows only current status."},"operations":{"runTimeline":"Run timeline","runTimelineDescription":"Readable actor, action, and result history without raw JSON.","noActivityTitle":"No activity yet","noActivityDescription":"Issue runs, review decisions, checkpoints, and audit events will appear here as a vertical timeline.","actionQueue":"Action queue","actionQueueDescription":"Review items are shown as mobile-friendly rows instead of a cramped table.","noReviewItemsTitle":"No review items","noReviewItemsDescription":"Create a review item when changed files need an accept/fix decision.","reviewRequested":"Review requested","changedFiles":"{{count}} changed files","accept":"Accept"},"people":{"projectCollaborators":"Project collaborators","projectCollaboratorsDescription":"Project partners and workers are not global admins. They get scoped access to assigned projects.","noCollaboratorsTitle":"No collaborators yet","noCollaboratorsDescription":"Create a sub-user first, then assign that person to a project role.","project":"Project","roleScoped":"role scoped","auditLog":"Audit log","auditLogDescription":"Search what sub-users, project partners, and workers changed without opening a raw database view.","searchAudit":"Search actor, action, project, or detail","noAuditMatchTitle":"No audit events match","noAuditMatchDescription":"User and project access activity appears here after actions are recorded.","system":"system","auditEvent":"Audit event","advancedTitle":"Advanced people management","advancedDescription":"Create users and assign project roles only when needed."},"access":{"openSettings":"Open Settings > Access","lanTitle":"LAN and local","lanDescription":"Use when the browser is on the same machine or network. Start here before private or public tunnels.","tailscaleTitle":"Tailscale private access","tailscaleDescription":"Best when a team needs private access without exposing Pixcode publicly. The UI should guide install, login, and URL sharing.","cloudflareTitle":"Cloudflare or custom domain","cloudflareDescription":"Best when users need a stable HTTPS URL. Configure the tunnel/domain once and share it with assigned users.","howUsersConnect":"How users connect","howUsersConnectDescription":"This keeps Access understandable for non-technical users.","stepUserTitle":"Create the user","stepUserDescription":"Add them in People so the server knows who they are.","stepRoleTitle":"Assign project role","stepRoleDescription":"Give them project access{{projectSuffix}}.","stepUrlTitle":"Share one URL","stepUrlDescription":"Use a LAN, Tailscale, Cloudflare Tunnel, or custom domain URL from Settings > Access."},"security":{"secretVault":"Secret vault","secretVaultDescription":"Rows show scope, target, and redacted env names. Values stay hidden.","noSecretsTitle":"No secrets stored","noSecretsDescription":"Store provider, project, workflow, Telegram, or API env values from the advanced form.","global":"global","advancedTitle":"Advanced security actions","advancedDescription":"Store scoped env values or queue audit checks."},"insights":{"usageSummary":"Usage summary","usageSummaryDescription":"Provider metrics are stacked as cards on mobile instead of forcing a wide table.","noUsageTitle":"No usage events yet","noUsageDescription":"Usage appears after provider or workflow events are recorded.","provider":"provider","usageRowDescription":"{{tokens}} tokens - {{cost}} - {{latency}}ms avg","errorRate":"{{rate}}% errors","marketplaceHealth":"Marketplace health","marketplaceHealthDescription":"MCP servers, workflow templates, provider adapters, and notification channels stay visible without crowding the overview.","noMarketplaceTitle":"No marketplace entries","noMarketplaceDescription":"Register entries only when a plugin or workflow template is ready to install.","noSourceConfigured":"No source configured","unknown":"unknown","advancedTitle":"Advanced insight actions","advancedDescription":"Record usage, create evaluation suites, or register marketplace entries."},"recommendations":{"attention":"Open Operations first. Clear reviews, errors, failed evals, or security findings before starting new work.","access":"Open Settings > Access and save the one URL your users should use. Then assign project roles in People.","people":"Create sub-users first, assign project roles second, then share an access path.","security":"Store secrets with the smallest scope that works, then run a permission or secret scan.","insights":"Compare provider cost, latency, and eval pass rate before changing model defaults.","operations":"Review Running now and the timeline. If nothing needs attention, start the next issue-to-PR or scheduled job."}}'),Dse={title:"VS Code Workbench",noProject:"No project selected",activity:{explorer:"Explorer",projects:"Projects",sourceControl:"Source Control",terminal:"Terminal",showPanel:"Show left panel",hidePanel:"Hide left panel"},panels:{explorer:"Explorer",projects:"Projects",sourceControl:"Source Control",terminal:"Terminal",editor:"Editor",cli:"CLI",rightTerminal:"Terminal"},editor:{emptyTitle:"Open a file from Explorer",closeTab:"Close {{file}}",scrollLeft:"Scroll tabs left",scrollRight:"Scroll tabs right",moreActions:"More tab actions",closeSplit:"Close split editor",context:{close:"Close",closeAll:"Close All",copyPath:"Copy Path",splitRight:"Split Right",splitMoveRight:"Split and Move Right"}},resize:{left:"Resize left panel",right:"Resize CLI panel"},menu:{openProject:"Open Project...",cloneFromGithub:"Clone Repository...",newChat:"New Chat",openProjects:"Open Projects"},menuBar:{file:"File",edit:"Edit",selection:"Selection",view:"View",go:"Go",run:"Run",terminal:"Terminal",help:"Help",openSettingsPanel:"Open settings panel"},projects:{openProject:"Open Project",cloneFromGithub:"Clone",directoryList:"Directories",refresh:"Refresh projects",emptyTitle:"No project directories yet",emptyDescription:"Open a local folder or clone a repository to start.",selected:"Selected",startChat:"Chat",fileCount:"{{formattedCount}} files",fileCountPending:"Files pending",startTitle:"Start a Pixcode workspace",startDescription:"Pick a folder and Pixcode will bind the explorer, terminal, and chat history to that workspace.",workHere:"Work in this folder"},workspace:{empty:"Open a project to create Workspace 1.",openFirst:"Open a workspace",add:"Add workspace",scrollLeft:"Scroll workspaces left",scrollRight:"Scroll workspaces right",close:"Close {{name}}",closeAction:"Close workspace",closeOthers:"Close others",closeAll:"Close all",rename:"Rename",star:"Star",unstar:"Unstar",toggleStar:"Star {{name}}",moreActions:"Workspace actions"},cli:{projectScoped:"Project-scoped CLI terminal",chooseTitle:"Start a CLI terminal",chooseDescription:"Choose a CLI, then start a full-height terminal.",startSelected:"Start {{provider}}",newSession:"New CLI session",plainTerminal:"Terminal",newPlainTerminal:"New terminal",checking:"Checking...",ready:"Ready",notInstalled:"Not installed",installing:"Installing...",updateAvailable:"Update {{version}}",installProvider:"Install {{provider}}",updateProvider:"Update {{provider}}",manualInstall:"This CLI needs manual installation.",installNoJob:"Install did not return a job id.",installFailed:"Install failed.",installStreamLost:"Install stream closed early. The install may still be running.",provider:"Provider",installRunning:"is installing",installDone:"is ready",installError:"needs attention",showPanel:"Show CLI panel",hidePanel:"Hide CLI panel",close:"Close terminal"},terminal:{title:"Terminal",close:"Close terminal"}},Ose={title:"Remote console",notSynced:"Not synced",refresh:"Refresh",runId:"Run {{id}}",metrics:{projects:"Projects",activeRuns:"Active runs",approvalQueue:"Approval queue",webhooks:"Webhooks"},sections:{projects:"Multi-project control room",approvals:"Approval queue",webhooks:"Webhook health"},badges:{active:"{{count}} active",approvals:"{{count}} approvals"},projectStats:{sessions:"{{count}} sessions",failedRuns:"{{count}} failed runs",recentRuns:"{{count}} recent runs"},actions:{allow:"Allow",deny:"Deny"},webhook:{on:"on",off:"off",ok:"ok",failed:"failed",noDelivery:"No delivery yet"},empty:{projects:"No projects available.",approvals:"No pending approvals.",webhooks:"No webhooks configured."}},Mse={buttons:vse,tabs:yse,status:wse,messages:kse,navigation:Sse,common:Cse,time:Nse,fileOperations:Ese,mainContent:Tse,orchestration:Ase,fileTree:jse,projectWizard:Rse,notifications:Ise,versionUpdate:_se,liveView:Lse,controlRoom:Pse,vscodeWorkbench:Dse,remoteConsole:Ose},Fse="Settings",zse={account:"Account",permissions:"Permissions",mcpServers:"MCP Servers",pluginsMcp:"Plugins / MCP",configuration:"Configuration",appearance:"Appearance"},Bse={title:"Account",language:"Language",languageLabel:"Display Language",languageDescription:"Choose your preferred language for the interface",username:"Username",email:"Email",profile:"Profile",changePassword:"Change Password"},Use={title:"MCP Servers",addServer:"Add Server",editServer:"Edit Server",deleteServer:"Delete Server",serverName:"Server Name",serverType:"Server Type",config:"Configuration",testConnection:"Test Connection",status:"Status",connected:"Connected",disconnected:"Disconnected",scope:{label:"Scope",user:"User",project:"Project"}},$se={title:"Appearance",theme:"Theme",codeEditor:"Code Editor",editorTheme:"Editor Theme",wordWrap:"Word Wrap",showMinimap:"Show Minimap",lineNumbers:"Line Numbers",fontSize:"Font Size"},Hse={saveChanges:"Save Changes",resetToDefaults:"Reset to Defaults",cancelChanges:"Cancel Changes"},Gse={title:"Quick Settings",sections:{appearance:"Appearance",toolDisplay:"Tool Display",viewOptions:"View Options",agentDiff:"Agent diff",inputSettings:"Input Settings",changeAwareness:"Command Center"},darkMode:"Dark Mode",autoExpandTools:"Auto-expand tools",showRawParameters:"Show raw parameters",showThinking:"Show thinking",autoScrollToBottom:"Auto-scroll to bottom",sendByCtrlEnter:"Send by Ctrl+Enter",sendByCtrlEnterDescription:"When enabled, pressing Ctrl+Enter will send the message instead of just Enter. This is useful for IME users to avoid accidental sends.",autoShowAgentDiff:"Show agent edits as diff",autoShowAgentDiffOff:"Off",autoShowAgentDiffOpenOnly:"Open files",autoShowAgentDiffAlways:"Always",changeAwareness:"Command Center",changedFiles:{title:"Changed files",description:"Tracks local file changes and opens the Files panel when a new change appears.",noProject:"Select a project to track local changes.",refresh:"Refresh changed files",empty:"No local changes detected",disabled:"Enable Command Center to watch local changes.",more:"+{{count}} more files",lastChecked:"Checked {{value}}",guideTitle:"Right panel guide",guideFiles:"Changed files glow green in Files.",guidePanel:"New changes appear beside the active chat.",status:{M:"M",A:"A",D:"D",U:"U"}},dragHandle:{dragging:"Dragging handle",closePanel:"Close settings panel",openPanel:"Open settings panel",draggingStatus:"Dragging...",toggleAndMove:"Click to toggle, drag to move"}},Vse={title:"Terminal Shortcuts",sectionKeys:"Keys",sectionNavigation:"Navigation",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"Arrow Up",arrowDown:"Arrow Down",scrollDown:"Scroll Down",handle:{closePanel:"Close shortcuts panel",openPanel:"Open shortcuts panel"}},Wse={label:"Settings",agents:"Agents",appearance:"Appearance",git:"Git",apiTokens:"API & Tokens",notifications:"Notifications",plugins:"Plugins",mobile:"Use from Mobile",telegram:"Telegram",diagnostics:"Diagnostics",about:"About",access:"Access"},qse={title:"Use from Mobile",description:"Scan a QR code with your phone to open Pixcode on any device in the same network.",refresh:"Refresh",copy:"Copy",copied:"Copied!",loading:"Detecting network addresses…",noEndpoints:"No LAN addresses were detected. Make sure your device is connected to a network.",error:"Could not load network endpoints.",hostLabel:"Host",portLabel:"Port",steps:{sameNetwork:"Connect your phone to the same Wi-Fi network as this computer.",scan:"Open the camera app and scan one of the QR codes below.",login:"Sign in with your Pixcode credentials the first time."},external:{title:"External Access",description:"Expose Pixcode beyond your local network so you can reach it from the internet.",upnpTitle:"Router port mapping (UPnP)",upnpDescription:"One-click port forwarding via your router. Works on most home routers; fails silently on CGNAT or enterprise networks.",upnpEnable:"Enable UPnP",upnpDisable:"Disable UPnP",upnpEnabled:"UPnP mapping active",upnpUnsupported:"UPnP is not available on this network.",tunnelTitle:"Secure tunnel",tunnelDescription:"If UPnP is unavailable, install cloudflared or ngrok and start a tunnel — we'll auto-detect and show the QR here.",tunnelStart:"Start tunnel",tunnelStop:"Stop tunnel",tunnelRunning:"Tunnel running",tunnelUnavailable:"No tunnel binary found on this machine.",externalUrl:"External URL"}},Kse={title:"Telegram",description:"Receive task completion notifications and chat with your agents from Telegram.",comingSoon:"Telegram integration is being prepared.",botToken:"Bot Token",botTokenPlaceholder:"123456:ABC-DEF…",botTokenHelp:"Create a bot with @BotFather and paste the token here.",saveToken:"Save & Start Bot",saving:"Saving…",botRunning:"Bot running as @{{username}}",botStopped:"Bot stopped",stopBot:"Stop Bot",removeToken:"Remove Token",pairing:{title:"Pair with your Telegram account",description:"Message your bot, then enter this 6-digit code inside the chat. The code refreshes every 10 minutes.",code:"Pairing Code",regenerate:"Generate new code",verified:"Paired with Telegram account",notPaired:"No Telegram account paired yet."},linkedAccount:{title:"Paired Account",username:"@{{username}}",language:"Replies in {{language}}",unpair:"Unpair"},notifications:{title:"Notifications",description:"Send agent completion and error events to your Telegram chat.",enabled:"Enabled",disabled:"Disabled"},bridge:{title:"Chat Bridge",description:"Messages you send to the bot become prompts for your most recent session. Replies come back to Telegram.",enabled:"Enabled",disabled:"Disabled"},control:{title:"Remote Control",description:"Use Telegram as a full Pixcode control surface for agents, orchestration, provider setup, and run status.",enabled:"Enable Telegram control",enabledDescription:"When enabled, paired Telegram messages can start agent and orchestration work on the selected project.",progressMode:"Progress mode",progressModeDescription:"Choose how much run output Telegram should send back.",progressModes:{final:"Final answer only",steps:"Important steps and final answer",errors:"Errors and final answer",all:"All visible step changes"},selectedProject:"Selected project",selectedProvider:"Selected provider",selectedModel:"Selected model",selectedWorkflow:"Selected workflow"},router:{title:"AI Router",description:"Route clear Telegram intents to Pixcode controls and send task prompts to the selected provider.",enabled:"Enable hybrid router",enabledDescription:"Commands and clear natural-language intents stay deterministic; task prompts go to the provider below.",provider:"Provider",providerDescription:"Leave this on the Telegram-selected provider unless this chat should always use one provider.",useTelegramSelected:"Use provider selected in Telegram",model:"Model",modelDescription:"Optional override. Leave empty to use the model selected in Telegram.",modelPlaceholder:"Use Telegram-selected model",saveModel:"Save",strictConfirmation:"Strict confirmation",strictConfirmationDescription:"Risky write/run actions require a one-time Telegram confirmation. This is always on in v1."},errors:{invalidToken:"Telegram rejected this bot token.",networkError:"Could not reach Telegram servers."}},Yse={title:"Notifications",description:"Control which notification events you receive.",webPush:{title:"Web Push Notifications",enable:"Enable Push Notifications",disable:"Disable Push Notifications",enabled:"Push notifications are enabled",loading:"Updating...",unsupported:"Push notifications are not supported in this browser.",denied:"Push notifications are blocked. Please allow them in your browser settings."},events:{title:"Event Types",actionRequired:"Action required",stop:"Run stopped",error:"Run failed",updates:"App and CLI updates"}},Zse={darkMode:{label:"Dark Mode",description:"Toggle between light and dark themes"},colorTheme:{title:"Color theme",palette:{label:"Accent palette",description:"Choose the product accent used by buttons, focus rings, navigation, and active states."},custom:{label:"Custom light/dark colors",description:"Pick separate accent colors for light and dark mode. Select Custom above to use them.",light:"Light",dark:"Dark"}},projectSorting:{label:"Project Sorting",description:"How projects are ordered in the sidebar",alphabetical:"Alphabetical",recentActivity:"Recent Activity"},codeEditor:{title:"Code Editor",theme:{label:"Editor Theme",description:"Default theme for the code editor"},wordWrap:{label:"Word Wrap",description:"Enable word wrapping by default in the editor"},showMinimap:{label:"Show Minimap",description:"Display a minimap for easier navigation in diff view"},lineNumbers:{label:"Show Line Numbers",description:"Display line numbers in the editor"},fontSize:{label:"Font Size",description:"Editor font size in pixels"}}},Xse={title:{add:"Add MCP Server",edit:"Edit MCP Server"},importMode:{form:"Form Input",json:"JSON Import"},scope:{label:"Scope",userGlobal:"User (Global)",projectLocal:"Project (Local)",userDescription:"User scope: Available across all projects on your machine",projectDescription:"Local scope: Only available in the selected project",cannotChange:"Scope cannot be changed when editing an existing server"},fields:{serverName:"Server Name",transportType:"Transport Type",command:"Command",arguments:"Arguments (one per line)",jsonConfig:"JSON Configuration",url:"URL",envVars:"Environment Variables (KEY=value, one per line)",headers:"Headers (KEY=value, one per line)",selectProject:"Select a project..."},placeholders:{serverName:"my-server"},validation:{missingType:"Missing required field: type",stdioRequiresCommand:"stdio type requires a command field",httpRequiresUrl:"{{type}} type requires a url field",invalidJson:"Invalid JSON format",jsonHelp:"Paste your MCP server configuration in JSON format. Example formats:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"Configuration Details (from {{configFile}})",projectPath:"Path: {{path}}",actions:{cancel:"Cancel",saving:"Saving...",addServer:"Add Server",updateServer:"Update Server"}},Jse={success:"Settings saved successfully!",error:"Failed to save settings",saving:"Saving..."},Qse={save:"Save Settings",cancel:"Cancel"},eoe={title:"Git Configuration",description:"Configure your git identity for commits. These settings will be applied globally via git config --global",name:{label:"Git Name",help:"Your name for git commits"},email:{label:"Git Email",help:"Your email for git commits"},actions:{save:"Save Configuration",saving:"Saving..."},status:{success:"Saved successfully"}},toe={title:"API Keys",description:"Generate API keys to access the external API from other applications.",newKey:{alertTitle:"⚠️ Save Your API Key",alertMessage:"This is the only time you'll see this key. Store it securely.",iveSavedIt:"I've saved it"},form:{placeholder:"API Key Name (e.g., Production Server)",createButton:"Create",cancelButton:"Cancel"},newButton:"New API Key",empty:"No API keys created yet.",list:{created:"Created:",lastUsed:"Last used:"},confirmDelete:"Are you sure you want to delete this API key?",status:{active:"Active",inactive:"Inactive"},github:{title:"GitHub Tokens",description:"Add GitHub Personal Access Tokens to clone private repositories via the external API.",descriptionAlt:"Add GitHub Personal Access Tokens to clone private repositories. You can also pass tokens directly in API requests without storing them.",addButton:"Add Token",form:{namePlaceholder:"Token Name (e.g., Personal Repos)",tokenPlaceholder:"GitHub Personal Access Token (ghp_...)",descriptionPlaceholder:"Description (optional)",addButton:"Add Token",cancelButton:"Cancel",howToCreate:"How to create a GitHub Personal Access Token →"},empty:"No GitHub tokens added yet.",added:"Added:",confirmDelete:"Are you sure you want to delete this GitHub token?"},apiDocsLink:"API Documentation",documentation:{title:"External API Documentation",description:"Learn how to use the external API to trigger Claude/Cursor sessions from your applications.",viewLink:"View API Documentation →"},loading:"Loading...",version:{updateAvailable:"Update available: v{{version}}"}},noe={status:{title:"CLI status",notChecked:"Not checked yet",lastChecked:"Last checked: {{value}}",updatesFound:"{{count}} update available",refresh:"Refresh CLI status"},config:{blurb:"View or edit the files the {{name}} CLI reads on startup. Saves write directly to your home directory.",refresh:"Refresh",save:"Save",revert:"Revert",saved:"Saved",loading:"Loading…",notCreated:"new",readonly:"read-only",noFiles:"No config files are registered for this agent yet."},cliVersion:{title:"CLI version",installed:"Installed: {{version}}",unknownInstalled:"Installed version unknown",latest:"Latest: {{version}}",checkedAt:"Checked: {{value}}",cached:"cached",updateAvailable:"Update available",refresh:"Refresh",skipped:{external_installer:"External installer",installed_version_unavailable:"Installed version unavailable",latest_version_unavailable:"Latest version unavailable",not_installed:"Not installed"}},authStatus:{checking:"Checking...",connected:"Connected",notConnected:"Not connected",disconnected:"Disconnected",checkingAuth:"Checking authentication status...",loggedInAs:"Logged in as {{email}}",authenticatedUser:"authenticated user"},account:{claude:{description:"Anthropic Claude AI assistant"},cursor:{description:"Cursor AI-powered code editor"},codex:{description:"OpenAI Codex AI assistant"},gemini:{description:"Google Gemini AI assistant"},qwen:{description:"Alibaba Qwen Code CLI (Gemini CLI fork)"},opencode:{description:"Multi-provider terminal coding agent — Claude, OpenAI, Gemini, or local models"}},connectionStatus:"Connection Status",login:{title:"Login",reAuthenticate:"Re-authenticate",description:"Sign in to your {{agent}} account to enable AI features",reAuthDescription:"Sign in with a different account or refresh credentials",button:"Login",reLoginButton:"Re-login"},error:"Error: {{error}}",providersLabel:"Providers",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} is not installed",notInstalledDescription:"Pixcode couldn't find the {{binary}} binary on this host. Install it first and then come back to log in.",installing:"Installing...",installNow:"Install now",copyCommand:"Copy install command",copy:"Copy",copied:"Copied",qwenDocs:"View the Qwen Code docs",complete:"Install complete",failed:"Install failed",output:"Output",cancel:"Cancel",dismiss:"Dismiss",doneHint:"Refresh this tab or try Login to check the new install.",continueToLogin:"Continue to Login",errors:{missingJobId:"Server did not return a job id",failedToStart:"Install failed to start",unreadableStatus:"Install ended with an unreadable status",streamLost:"Lost connection to install stream. The install may still be running on the server."}}},roe={title:"Permission Settings",skipPermissions:{label:"Skip permission prompts (use with caution)",claudeDescription:"Equivalent to --dangerously-skip-permissions flag",cursorDescription:"Equivalent to -f flag in Cursor CLI",opencodeDescription:"Equivalent to --dangerously-skip-permissions flag in OpenCode"},allowedTools:{title:"Allowed Tools",description:"Tools that are automatically allowed without prompting for permission",placeholder:'e.g., "Bash(git log:*)" or "Write"',quickAdd:"Quick add common tools:",empty:"No allowed tools configured"},blockedTools:{title:"Blocked Tools",description:"Tools that are automatically blocked without prompting for permission",placeholder:'e.g., "Bash(rm:*)"',empty:"No blocked tools configured"},allowedCommands:{title:"Allowed Shell Commands",description:"Shell commands that are automatically allowed without prompting",placeholder:'e.g., "Shell(ls)" or "Shell(git status)"',quickAdd:"Quick add common commands:",empty:"No allowed commands configured"},blockedCommands:{title:"Blocked Shell Commands",description:"Shell commands that are automatically blocked",placeholder:'e.g., "Shell(rm -rf)" or "Shell(sudo)"',empty:"No blocked commands configured"},toolExamples:{title:"Tool Pattern Examples:",bashGitLog:"- Allow all git log commands",bashGitDiff:"- Allow all git diff commands",write:"- Allow all Write tool usage",bashRm:"- Block all rm commands (dangerous)"},shellExamples:{title:"Shell Command Examples:",ls:"- Allow ls command",gitStatus:"- Allow git status",npmInstall:"- Allow npm install",rmRf:"- Block recursive delete"},opencodeAllowed:{title:"Allowed Bash Patterns",description:"Bash command patterns OpenCode auto-approves without prompting",placeholder:'e.g., "git *" or "npm test"',quickAdd:"Quick add common patterns:",empty:"No allowed patterns configured"},opencodeBlocked:{title:"Blocked Bash Patterns",description:"Bash command patterns OpenCode always denies",placeholder:'e.g., "rm -rf *" or "sudo *"',empty:"No blocked patterns configured"},opencodeExamples:{title:"Pattern Examples:",gitAll:"- Allow all git commands",gitPush:"- Block git push specifically",rmRf:"- Block recursive delete",npm:"- Allow all npm commands"},codex:{permissionMode:"Permission Mode",description:"Controls how Codex handles file modifications and command execution",modes:{default:{title:"Default",description:"Only trusted commands (ls, cat, grep, git status, etc.) run automatically. Other commands are skipped. Can write to workspace."},acceptEdits:{title:"Accept Edits",description:"All commands run automatically within the workspace. Full auto mode with sandboxed execution."},bypassPermissions:{title:"Bypass Permissions",description:"Full system access with no restrictions. All commands run automatically with full disk and network access. Use with caution."}},technicalDetails:"Technical details",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted. Trusted commands: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (without -exec), etc.",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never. All commands auto-execute within project directory.",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never. Full system access, use only in trusted environments.",overrideNote:"You can override this per-session using the mode button in the chat interface."}},actions:{add:"Add"}},aoe={title:"MCP Servers",description:{claude:"Model Context Protocol servers provide additional tools and data sources to Claude",cursor:"Model Context Protocol servers provide additional tools and data sources to Cursor",codex:"Model Context Protocol servers provide additional tools and data sources to Codex"},addButton:"Add MCP Server",empty:"No MCP servers configured",serverType:"Type",scope:{local:"local",user:"user"},config:{command:"Command",url:"URL",args:"Args",environment:"Environment"},tools:{title:"Tools",count:"({{count}}):",more:"+{{count}} more"},actions:{edit:"Edit server",delete:"Delete server"},help:{title:"About Codex MCP",description:"Codex supports stdio-based MCP servers. You can add servers that extend Codex's capabilities with additional tools and resources."}},ioe={updateCheckFrequency:"Update check frequency",updateCheckFrequencyHint:"Pixcode caches GitHub release checks locally so shared IPs do not hit GitHub rate limits.",updateCheckFrequencyOptions:{"30m":"Every 30 minutes","6h":"Every 6 hours","12h":"Every 12 hours","24h":"Daily","7d":"Weekly",off:"Manual only"},checkForUpdate:"Check for updates",checkingForUpdate:"Checking...",updateFound:"Update found",upToDate:"Up to date",lastChecked:"Last checked {{when}}",notCheckedYet:"Update check has not completed yet",checkFailed:"check failed or delayed by rate limit",tagline:"Open-source AI coding assistant interface",checkFailedShort:"Check failed",starOnGitHub:"Star on GitHub",docs:"Docs",hosted:{title:"Try Pixcode Hosted",description:"Team collaboration, shared MCP configs, settings sync across environments, and managed infrastructure.",learnMore:"Learn more"},proFeatures:{title:"Pixcode Pro Features",syncSettings:{title:"Sync Settings",description:"Keep your preferences, MCP configs, and theme in sync across all your environments."},teamManagement:{title:"Team Management",description:"Multiple users, role-based access, and shared projects for your team."}},license:"Licensed under AGPL-3.0",relativeTime:{justNow:"just now",secondsAgo:"{{count}}s ago",minutesAgo:"{{count}}m ago",hoursAgo:"{{count}}h ago"}},soe={title:"Plugins",description:"Extend the interface with custom plugins. Install from git or drop a folder in ~/.pixcode/plugins/",installPlaceholder:"https://github.com/user/my-plugin",installButton:"Install",installing:"Installing…",securityWarning:"Only install plugins whose source code you have reviewed or from authors you trust.",scanningPlugins:"Scanning plugins…",noPluginsInstalled:"No plugins installed",pullLatest:"Pull latest from git",noGitRemote:"No git remote — update not available",uninstallPlugin:"Uninstall plugin",confirmUninstall:"Click again to confirm",confirmUninstallMessage:"Remove {{name}}? This cannot be undone.",cancel:"Cancel",remove:"Remove",updateFailed:"Update failed",installFailed:"Installation failed",uninstallFailed:"Uninstall failed",toggleFailed:"Toggle failed",starterPluginLabel:"Starter Plugin",starter:"Starter",docs:"Docs",starterPlugin:{name:"Project Stats",badge:"starter",description:"File counts, lines of code, file-type breakdown, and recent activity for your project.",install:"Install"},terminalPlugin:{name:"Terminal",badge:"official",description:"Integrated terminal with full shell access directly within the interface.",install:"Install"},morePlugins:"More",enable:"Enable",disable:"Disable",installAriaLabel:"Plugin git repository URL",tab:"tab",runningStatus:"running"},ooe={title:"Access",description:"Choose how people reach this self-hosted Pixcode server. Start with the same network, then use a secure tunnel, Tailscale, or your own domain when you need remote access.",refresh:"Refresh",copy:"Copy",copied:"Copied",save:"Save access path",check:"Check URL",qrAlt:"QR for {{url}}",guide:{title:"Pick the connection path first",description:"You do not need to know networking terms. Choose the situation that matches the person connecting, copy the shown link, or scan the QR code from their phone."},options:{sameNetwork:{title:"Same Wi-Fi/LAN",description:"Use this when the device is on the same router or office network as the Pixcode server."},secureTunnel:{title:"Temporary public link",description:"Start a Cloudflare/ngrok tunnel and Pixcode shows a public URL plus QR automatically."},tailscale:{title:"Private team link",description:"Use Tailscale when you want private access without a public domain or router setup."},customDomain:{title:"Own domain",description:"Use this when you already have HTTPS, a reverse proxy, or a Cloudflare Tunnel hostname."}},status:{ready:"Ready",detecting:"Detecting",guided:"Guided",configured:"Configured",optional:"Optional"},links:{title:"Available links",description:"Copy the correct URL for the device or teammate that needs to connect.",local:"Local",tailscale:"Tailscale private link",empty:"No access links detected yet."},local:{title:"Same network access",description:"Best first test: connect from the same Wi-Fi or LAN. Scan a QR code on the phone, or copy the link for a teammate on the same network.",thisDevice:"This computer only",loading:"Detecting same-network links...",empty:"No LAN link detected. Make sure the server is connected to a network and refresh.",saveLabel:"Same network access",save:"Save this LAN link"},tunnel:{title:"Secure tunnel",description:"For remote access without a fixed domain, Pixcode can start cloudflared or ngrok and show the public URL here.",secureLink:"Public link and QR",help:"Click start. If cloudflared or ngrok is installed, Pixcode creates a temporary HTTPS address and QR code automatically.",running:"Tunnel running",start:"Start tunnel",stop:"Stop tunnel",save:"Save this tunnel URL",saveLabel:"Secure tunnel access",qrLabel:"secure tunnel",installTitle:"Tunnel setup needed",installNeeded:"Install cloudflared or ngrok first, then press Start tunnel again."},tailscale:{title:"Tailscale private access",description:"Tailscale is an optional private network app. Install it on the server and user devices, sign in to the same team, then Pixcode can detect a private URL.",save:"Save this Tailscale URL",saveLabel:"Tailscale private access",openInstall:"Open Tailscale install",steps:{installServer:"Install Tailscale on the computer or server running Pixcode.",installUserDevice:"Install Tailscale on the phone, laptop, or teammate device that will open Pixcode.",login:"Sign in to the same Tailscale account or team on both devices.",refresh:"Return here and press Refresh; Pixcode will show the private URL when it is ready."},installCommand:"Install command",installDevice:"Install on this device",signIn:"Sign in with Tailscale",actionDone:"Done",needsAttention:"Needs attention",openLogin:"Open Tailscale login"},advanced:{title:"Advanced: stable domain",description:"Use this when you already have a LAN URL, Tailscale URL, Cloudflare Tunnel hostname, or custom HTTPS domain that should be saved for users.",badge:"Advanced"},setup:{title:"Stable access path",description:"Save the URL your users will use. This can be a LAN address, Tailscale URL, Cloudflare Tunnel URL, or custom domain."},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"Custom domain"},fields:{label:"Label",url:"URL",port:"Target port",mode:"Mode"},health:{reachable:"Pixcode is reachable",unreachable:"Pixcode is not reachable"},configured:{title:"Configured access paths",description:"These paths are available to admins, project partners, and project workers according to their role.",empty:"No configured access paths yet.",noUrl:"No URL",public:"public",private:"private"},team:{title:"How users connect",description:"Create the user in the Admin system, assign their project role in Control Room, then share one of these Access URLs. They do not need to be global admins to reach their assigned project."}},loe={title:"Diagnostics",description:"Provider health, WebSocket state, notifications, active runs, and recent errors.",refresh:"Refresh",copyBundle:"Copy bundle",copied:"Copied",runtime:"Runtime",waiting:"Waiting for diagnostics",websocket:"WebSocket",activeClients:"active clients",recentErrors:"Recent errors",redactedBundle:"redacted support bundle",providers:"Providers",notChecked:"not checked",emptyProviders:"Provider health has not been collected yet.",status:{unknown:"unknown",loading:"loading",ok:"ok",available:"available",configured:"configured",missing:"missing",failed:"failed"}},coe={title:Fse,tabs:zse,account:Bse,mcp:Use,appearance:$se,actions:Hse,quickSettings:Gse,terminalShortcuts:Vse,mainTabs:Wse,mobile:qse,telegram:Kse,notifications:Yse,appearanceSettings:Zse,mcpForm:Xse,saveStatus:Jse,footerActions:Qse,git:eoe,apiKeys:toe,agents:noe,permissions:roe,mcpServers:aoe,about:ioe,pluginSettings:soe,access:ooe,diagnostics:loe},doe={title:"Welcome Back",description:"Sign in to your Pixcode self-hosted account",username:"Username",password:"Password",submit:"Sign In",loading:"Signing in...",errors:{invalidCredentials:"Invalid username or password",requiredFields:"Please fill in all fields",networkError:"Network error. Please try again."},placeholders:{username:"Enter your username",password:"Enter your password"}},uoe={title:"Create Account",username:"Username",password:"Password",confirmPassword:"Confirm Password",submit:"Create Account",loading:"Creating account...",errors:{passwordMismatch:"Passwords do not match",usernameTaken:"Username is already taken",weakPassword:"Password is too weak"}},poe={title:"Sign Out",confirm:"Are you sure you want to sign out?",button:"Sign Out"},moe={login:doe,register:uoe,logout:poe},hoe={title:"Projects",newProject:"New Project",deleteProject:"Remove Project",renameProject:"Rename Project",noProjects:"No projects found",loadingProjects:"Loading projects...",searchPlaceholder:"Search projects...",projectNamePlaceholder:"Project name",starred:"Starred",all:"All",untitledSession:"Untitled Session",newSession:"New Session",codexSession:"Codex Session",fetchingProjects:"Fetching your Claude projects and sessions",projects:"projects",detectedFromHistory:"Detected from history",noMatchingProjects:"No matching projects",tryDifferentSearch:"Try adjusting your search term",runClaudeCli:"Run Claude CLI in a project directory to get started"},foe={title:"Pixcode",subtitle:"AI coding assistant interface"},goe={title:"Sessions",newSession:"New Session",deleteSession:"Delete Session",renameSession:"Rename Session",noSessions:"No sessions yet",loadingSessions:"Loading sessions...",unnamed:"Unnamed",loading:"Loading...",showMore:"Show more sessions",startToSee:"Start a new session to see it here."},boe={section:"Orchestration",fallbackTitle:"Orchestration run"},xoe={flat:"Recent",grouped:"By project"},voe={viewEnvironments:"View Environments",hideSidebar:"Hide sidebar",createProject:"Create new project",refresh:"Refresh projects and sessions (Ctrl+R)",renameProject:"Rename project (F2)",deleteProject:"Remove project from sidebar (Delete)",addToFavorites:"Add to favorites",removeFromFavorites:"Remove from favorites",editSessionName:"Manually edit session name",deleteSession:"Delete this session permanently",sessionActions:"Session actions",historyView:"History view",historyViewFlat:"Recent conversations",historyViewGrouped:"Grouped by project",save:"Save",cancel:"Cancel",clearSearch:"Clear search"},yoe={chat:"Chat",files:"Files",git:"Git",terminal:"Terminal",tasks:"Tasks"},woe={refresh:"Refresh",settings:"Settings",collapseAll:"Collapse All",expandAll:"Expand All",cancel:"Cancel",save:"Save",delete:"Delete",rename:"Rename",starSession:"Star",unstarSession:"Remove star",joinCommunity:"Join Community",reportIssue:"Report Issue",starOnGithub:"Star on GitHub",controlRoom:"Control Room",controlRoomDescription:"Admin, access, runs"},koe={openSource:"Open Source"},Soe={active:"Active",inactive:"Inactive",thinking:"Thinking...",error:"Error",aborted:"Aborted",unknown:"Unknown"},Coe={justNow:"Just now",oneMinuteAgo:"1 min ago",minutesAgo:"{{count}} mins ago",oneHourAgo:"1 hour ago",hoursAgo:"{{count}} hours ago",oneDayAgo:"1 day ago",daysAgo:"{{count}} days ago",buckets:{today:"Today",yesterday:"Yesterday",thisWeek:"Previous 7 days",thisMonth:"Previous 30 days",older:"Older"}},Noe={deleteConfirm:"Are you sure you want to delete this?",renameSuccess:"Renamed successfully",deleteSuccess:"Deleted successfully",errorOccurred:"An error occurred",deleteSessionConfirm:"Are you sure you want to delete this session? This action cannot be undone.",deleteProjectConfirm:"Remove this project from the sidebar? Your project files, memories, and session data will not be deleted.",enterProjectPath:"Please enter a project path",deleteSessionFailed:"Failed to delete session. Please try again.",deleteSessionError:"Error deleting session. Please try again.",renameSessionFailed:"Failed to rename session. Please try again.",renameSessionError:"Error renaming session. Please try again.",deleteProjectFailed:"Failed to remove project. Please try again.",deleteProjectError:"Error removing project. Please try again.",createProjectFailed:"Failed to create project. Please try again.",createProjectError:"Error creating project. Please try again."},Eoe={updateAvailable:"Update available"},Toe={modeProjects:"Projects",modeConversations:"Conversations",conversationsPlaceholder:"Search in conversations...",searching:"Searching...",noResults:"No results found",tryDifferentQuery:"Try a different search query",matches_one:"{{count}} match",matches_other:"{{count}} matches",projectsScanned_one:"{{count}} project scanned",projectsScanned_other:"{{count}} projects scanned"},Aoe={deleteProject:"Remove Project",deleteSession:"Delete Session",confirmDelete:"What would you like to do with",sessionCount_one:"This project contains {{count}} conversation.",sessionCount_other:"This project contains {{count}} conversations.",removeFromSidebar:"Remove from sidebar only",deleteAllData:"Delete all data permanently",allConversationsDeleted:"The project will be removed from the sidebar. Your files, memories, and session data will be preserved.",cannotUndo:"You can re-add the project later."},joe={projects:hoe,app:foe,sessions:goe,orchestration:boe,historyView:xoe,tooltips:voe,navigation:yoe,actions:woe,branding:koe,status:Soe,time:Coe,messages:Noe,version:Eoe,search:Toe,deleteConfirmation:Aoe},Roe={copy:"Copy",copied:"Copied",copyCode:"Copy code"},Ioe={copy:"Copy message",copied:"Message copied",selectFormat:"Select copy format",copyAsMarkdown:"Copy as markdown",copyAsText:"Copy as text"},_oe={user:"U",error:"Error",tool:"Tool",claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code"},Loe={settings:"Tool Settings",error:"Tool Error",result:"Tool Result",viewParams:"View input parameters",viewRawParams:"View raw parameters",viewDiff:"View edit diff for",creatingFile:"Creating new file:",updatingTodo:"Updating Todo List",read:"Read",readFile:"Read file",updateTodo:"Update todo list",readTodo:"Read todo list",searchResults:"results"},Poe={found:"Found {{count}} {{type}}",file:"file",files:"files",pattern:"pattern:",in:"in:"},Doe={updated:"File updated successfully",created:"File created successfully",written:"File written successfully",diff:"Diff",newFile:"New File",viewContent:"View file content",viewFullOutput:"View full output ({{count}} chars)",contentDisplayed:"The file content is displayed in the diff view above"},Ooe={title:"Interactive Prompt",waiting:"Waiting for your response in the CLI",instruction:"Please select an option in your terminal where Claude is running.",selectedOption:"✓ Claude selected option {{number}}",instructionDetail:"In the CLI, you would select this option interactively using arrow keys or by typing the number."},Moe={title:"Thinking...",emoji:"💭 Thinking..."},Foe={response:"JSON Response"},zoe={grant:"Grant permission for {{tool}}",added:"Permission added",addTo:"Adds {{entry}} to Allowed Tools.",retry:"Permission saved. Retry the request to use the tool.",error:"Unable to update permissions. Please try again.",openSettings:"Open settings"},Boe={updated:"Todo list has been updated successfully",current:"Current Todo List"},Uoe={viewPlan:"📋 View implementation plan",title:"Implementation Plan"},$oe={resetAt:"Claude usage limit reached. Your limit will reset at **{{time}} {{timezone}}** - {{date}}"},Hoe={permissionMode:"Permission Mode",modes:{default:"Default Mode",acceptEdits:"Accept Edits",bypassPermissions:"Bypass Permissions",plan:"Plan Mode"},descriptions:{default:"Only trusted commands (ls, cat, grep, git status, etc.) run automatically. Other commands are skipped. Can write to workspace.",acceptEdits:"All commands run automatically within the workspace. Full auto mode with sandboxed execution.",bypassPermissions:"Full system access with no restrictions. All commands run automatically with full disk and network access. Use with caution.",plan:"Planning mode - no commands are executed"},technicalDetails:"Technical details"},Goe={permissionMode:"Gemini Permission Mode",description:"Control how Gemini CLI handles operation approvals.",modes:{default:{title:"Standard (Ask for Approval)",description:"Gemini will prompt for approval before executing commands, writing files, and fetching web resources."},autoEdit:{title:"Auto Edit (Skip File Approvals)",description:"Gemini will automatically approve file edits and web fetches, but will still prompt for shell commands."},yolo:{title:"YOLO (Bypass All Permissions)",description:"Gemini will execute all operations without asking for approval. Exercise caution."}}},Voe={permissionMode:"Qwen Permission Mode",description:"Control how Qwen Code handles operation approvals.",modes:{default:{title:"Standard (Ask for Approval)",description:"Qwen Code will prompt for approval before executing commands, writing files, and fetching web resources."},autoEdit:{title:"Auto Edit (Skip File Approvals)",description:"Qwen Code will automatically approve file edits and web fetches, but will still prompt for shell commands."},yolo:{title:"YOLO (Bypass All Permissions)",description:"Qwen Code will execute all operations without asking for approval. Exercise caution."}}},Woe={placeholder:"Type / for commands, @ for files, or ask {{provider}} anything...",placeholderDefault:"Type your message...",disabled:"Input disabled",attachFiles:"Attach files",attachImages:"Attach images",send:"Send",stop:"Stop",clickToChangeMode:"Click to change permission mode (or press Tab in input)",showAllCommands:"Show all commands",clearInput:"Clear input",scrollToBottom:"Scroll to bottom"},qoe={selector:{title:"Thinking Mode",description:"Extended thinking gives Claude more time to evaluate alternatives",active:"Active",tip:"Higher thinking modes take more time but provide more thorough analysis"},modes:{none:{name:"Standard",description:"Regular Claude response",prefix:""},think:{name:"Think",description:"Basic extended thinking",prefix:"think"},thinkHard:{name:"Think Hard",description:"More thorough evaluation",prefix:"think hard"},thinkHarder:{name:"Think Harder",description:"Deep analysis with alternatives",prefix:"think harder"},ultrathink:{name:"Ultrathink",description:"Maximum thinking budget",prefix:"ultrathink"}},buttonTitle:"Thinking mode: {{mode}}"},Koe={title:"Choose Your AI Assistant",description:"Select a provider to start a new conversation",selectModel:"Select Model",statusUnavailable:"Status unavailable",statusRetryHint:"Could not check this CLI. Tap to retry.",retryStatus:"Retry status",providerInfo:{anthropic:"by Anthropic",openai:"by OpenAI",cursorEditor:"AI Code Editor",google:"by Google"},readyPrompt:{claude:"Ready to use Claude with {{model}}. Start typing your message below.",cursor:"Ready to use Cursor with {{model}}. Start typing your message below.",codex:"Ready to use Codex with {{model}}. Start typing your message below.",gemini:"Ready to use Gemini with {{model}}. Start typing your message below.",default:"Select a provider above to begin"}},Yoe={continue:{title:"Continue your conversation",description:"Ask questions about your code, request changes, or get help with development tasks"},loading:{olderMessages:"Loading older messages...",sessionMessages:"Loading session messages..."},messages:{showingOf:"Showing {{shown}} of {{total}} messages",scrollToLoad:"Scroll up to load more",showingLast:"Showing last {{count}} messages ({{total}} total)",loadEarlier:"Load earlier messages",loadAll:"Load all messages",loadingAll:"Loading all messages...",allLoaded:"All messages loaded",perfWarning:'All messages loaded — scrolling may be slower. Click "Scroll to bottom" to restore performance.'}},Zoe={selectProject:{title:"Select a Project",description:"Choose a project to open an interactive shell in that directory"},status:{newSession:"New Session",initializing:"Initializing...",restarting:"Restarting..."},actions:{disconnect:"Disconnect",disconnectTitle:"Disconnect from shell",restart:"Restart",restartTitle:"Restart Shell (disconnect first)",connect:"Continue in Shell",connectTitle:"Connect to shell"},loading:"Loading terminal...",connecting:"Connecting to shell...",startSession:"Start a new Claude session",startProviderSession:"Start a new {{provider}} session",resumeSession:"Resume session: {{displayName}}...",runCommand:"Run {{command}} in {{projectName}}",startCli:"Starting Claude CLI in {{projectName}}",startProviderCli:"Starting {{provider}} in {{projectName}}",defaultCommand:"command"},Xoe={actions:{thinking:"Thinking",processing:"Processing",analyzing:"Analyzing",working:"Working",computing:"Computing",reasoning:"Reasoning"},state:{live:"Live",paused:"Paused"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}m {{seconds}}s",label:"{{time}} elapsed",startingNow:"Starting now"},controls:{stopGeneration:"Stop Generation",pressEscToStop:"Press Esc anytime to stop"},providers:{assistant:"Assistant"}},Joe={startChatWithProvider:"Select a project to start chatting with {{provider}}"},Qoe={nextTaskPrompt:"Start the next task"},ele={codeBlock:Roe,copyMessage:Ioe,messageTypes:_oe,tools:Loe,search:Poe,fileOperations:Doe,interactive:Ooe,thinking:Moe,json:Foe,permissions:zoe,todo:Boe,plan:Uoe,usageLimit:$oe,codex:Hoe,gemini:Goe,qwen:Voe,input:Woe,thinkingMode:qoe,providerSelection:Koe,session:Yoe,shell:Zoe,claudeStatus:Xoe,projectSelection:Joe,tasks:Qoe},tle={changes:"changes",previousChange:"Previous change",nextChange:"Next change",hideDiff:"Hide diff highlighting",showDiff:"Show diff highlighting",settings:"Editor Settings",collapse:"Collapse editor",expand:"Expand editor to full width"},nle="Loading {{fileName}}...",rle={showingChanges:"Showing changes"},ale={download:"Download file",save:"Save",saving:"Saving...",saved:"Saved!",exitFullscreen:"Exit fullscreen",fullscreen:"Fullscreen",close:"Close",previewMarkdown:"Preview markdown",editMarkdown:"Edit markdown"},ile={lines:"Lines:",characters:"Characters:",shortcuts:"Press Ctrl+S to save • Esc to close"},sle={title:"Binary File",message:'The file "{{fileName}}" cannot be displayed in the text editor because it is a binary file.'},ole={toolbar:tle,loading:nle,header:rle,actions:ale,footer:ile,binaryFile:sle},lle={title:"TaskMaster AI is not configured",description:"TaskMaster helps break down complex projects into manageable tasks with AI-powered assistance",whatIsTitle:"🎯 What is TaskMaster?",features:{aiPowered:"AI-Powered Task Management: Break complex projects into manageable subtasks",prdTemplates:"PRD Templates: Generate tasks from Product Requirements Documents",dependencyTracking:"Dependency Tracking: Understand task relationships and execution order",progressVisualization:"Progress Visualization: Kanban boards and detailed task analytics",cliIntegration:"CLI Integration: Use taskmaster commands for advanced workflows"},initializeButton:"Initialize TaskMaster AI"},cle={title:"Getting Started with TaskMaster",subtitle:"TaskMaster is initialized! Here's what to do next:",steps:{createPRD:{title:"Create a Product Requirements Document (PRD)",description:"Discuss your project idea and create a PRD that describes what you want to build.",addButton:"Add PRD",existingPRDs:"Existing PRDs:"},generateTasks:{title:"Generate Tasks from PRD",description:"Once you have a PRD, ask your AI assistant to parse it and TaskMaster will automatically break it down into manageable tasks with implementation details."},analyzeTasks:{title:"Analyze & Expand Tasks",description:"Ask your AI assistant to analyze task complexity and expand them into detailed subtasks for easier implementation."},startBuilding:{title:"Start Building",description:"Ask your AI assistant to begin working on tasks, update their status, and add new tasks as your project evolves."}},tip:"💡 Tip: Start with a PRD to get the most out of TaskMaster's AI-powered task generation"},dle={title:"TaskMaster Setup",subtitle:"Interactive CLI for {{projectName}}",willStart:"TaskMaster initialization will start automatically",completed:"TaskMaster setup completed! You can now close this window.",closeButton:"Close",closeContinueButton:"Close & Continue"},ule={title:"Getting Started with TaskMaster",subtitle:"Your guide to productive task management",examples:{parsePRD:`💬 Example:
|
|
822
|
+
`),r=Math.max(t.length,n.length);for(let a=0;a<r;a+=1)if(t[a]!==n[a])return a+1;return null}function Oae(e,t){const n=encodeURIComponent(e);return t&&t>0?`${n}#L${t}`:n}const Mae={M:"M",A:"A",D:"D",U:"U"},Fae={M:"border-amber-400/40 bg-amber-500/10 text-amber-700 dark:text-amber-200",A:"border-emerald-400/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-200",D:"border-red-400/40 bg-red-500/10 text-red-700 dark:text-red-200",U:"border-sky-400/40 bg-sky-500/10 text-sky-700 dark:text-sky-200"};function zae(e){return e?new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(e):null}function Bae({changedFiles:e,isLoading:t,error:n,latestChangedFilePath:r,lastCheckedAt:a,trackingMode:s,onTrackingModeChange:o,onRefresh:l,onOpenFile:c,variant:d="rail"}){const u=zae(a),p=d==="panel";return i.jsxs("aside",{className:xe("h-full min-h-0 flex-col overflow-hidden bg-card/45",p?"flex w-full rounded-none border-0":"hidden w-[260px] shrink-0 rounded-lg border border-border/60 shadow-sm xl:flex"),children:[i.jsxs("div",{className:"flex items-center justify-between gap-2 border-b border-border/60 px-3 py-2",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:[i.jsx("span",{className:"h-2 w-2 rounded-full bg-emerald-500 shadow-[0_0_10px_rgba(16,185,129,0.75)]"}),"Command Center"]}),i.jsx("p",{className:"mt-0.5 truncate text-[11px] text-muted-foreground",children:e.length>0?`${e.length} local change${e.length===1?"":"s"}`:"Watching agent writes"})]}),i.jsx("button",{type:"button",onClick:l,className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-border bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-foreground","aria-label":"Refresh changed files",title:"Refresh changed files",children:t?i.jsx(Ht,{className:"h-3.5 w-3.5 animate-spin"}):i.jsx(at,{className:"h-3.5 w-3.5"})})]}),i.jsx("div",{className:"border-b border-border/60 px-3 py-2",children:i.jsxs("div",{className:"grid grid-cols-2 rounded-md border border-border bg-background p-0.5 text-[11px] font-medium",children:[i.jsx("button",{type:"button",onClick:()=>o("local"),className:`rounded px-2 py-1 transition-colors ${s==="local"?"bg-foreground text-background shadow-sm":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,title:"Local changes: agent writes and filesystem edits",children:"Local changes"}),i.jsx("button",{type:"button",onClick:()=>o("git"),className:`rounded px-2 py-1 transition-colors ${s==="git"?"bg-foreground text-background shadow-sm":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,title:"Git changes: git status only",children:"Git changes"})]})}),n&&i.jsx("div",{className:"mx-3 mt-3 rounded-md border border-amber-500/25 bg-amber-500/10 px-2 py-1.5 text-[11px] leading-5 text-amber-700 dark:text-amber-200",children:n}),i.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-2",children:e.length===0?i.jsxs("div",{className:"flex h-full flex-col items-center justify-center px-3 text-center text-muted-foreground",children:[i.jsx(Vr,{className:"mb-2 h-8 w-8 opacity-45"}),i.jsx("p",{className:"text-xs font-medium text-foreground",children:"No local changes detected"}),i.jsx("p",{className:"mt-1 text-[11px] leading-5",children:"When an agent writes or edits files, they will appear here."})]}):i.jsxs("div",{className:"space-y-1",children:[e.slice(0,12).map(f=>{const h=r===f.path,g=Dae(f.diffInfo),b=g?`L${g}`:null,x=Oae(f.path,g);return i.jsxs("button",{type:"button",onClick:()=>c(f),className:`group flex w-full items-center gap-2 rounded-md border px-2 py-1.5 text-left transition-all ${h?"changed-file-flash border-emerald-500/60 bg-emerald-500/15":"border-border/60 bg-background/70 hover:border-emerald-500/35 hover:bg-emerald-500/10"}`,title:x,children:[i.jsx("span",{className:`inline-flex h-5 min-w-5 items-center justify-center rounded border px-1 text-[10px] font-semibold ${Fae[f.status]}`,children:Mae[f.status]}),i.jsx("span",{className:"min-w-0 flex-1 truncate font-mono text-[11px] text-foreground",children:f.path}),b&&i.jsx("span",{className:"shrink-0 rounded border border-border bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:b})]},`${f.status}:${f.path}`)}),e.length>12&&i.jsxs("p",{className:"px-1 pt-1 text-[11px] text-muted-foreground",children:["+",e.length-12," more files"]})]})}),u&&i.jsxs("div",{className:"border-t border-border/60 px-3 py-2 text-[10px] text-muted-foreground",children:["Last check ",u]})]})}function Uae(e){return e instanceof Error?`${e.name}: ${e.message}`:String(e)}function $ae({error:e,resetErrorBoundary:t,showDetails:n,componentStack:r}){return i.jsx("div",{className:"flex flex-col items-center justify-center p-8 text-center",children:i.jsxs("div",{className:"max-w-md rounded-lg border border-red-200 bg-red-50 p-6",children:[i.jsxs("div",{className:"mb-4 flex items-center",children:[i.jsx("div",{className:"flex-shrink-0",children:i.jsx("svg",{className:"h-5 w-5 text-red-400",viewBox:"0 0 20 20",fill:"currentColor",children:i.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})})}),i.jsx("h3",{className:"ml-3 text-sm font-medium text-red-800",children:"Something went wrong"})]}),i.jsxs("div",{className:"text-sm text-red-700",children:[i.jsx("p",{className:"mb-2",children:"An error occurred while loading the chat interface."}),n&&i.jsxs("details",{className:"mt-4",children:[i.jsx("summary",{className:"cursor-pointer font-mono text-xs",children:"Error Details"}),i.jsxs("pre",{className:"mt-2 max-h-40 overflow-auto rounded bg-red-100 p-2 text-xs",children:[Uae(e),r]})]})]}),i.jsx("div",{className:"mt-4",children:i.jsx("button",{onClick:t,className:"rounded bg-red-600 px-4 py-2 text-sm text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500",children:"Try Again"})})]})})}function Hae({children:e,showDetails:t=!1,onRetry:n=void 0,resetKeys:r=void 0}){const[a,s]=m.useState(null),o=m.useCallback((d,u)=>{console.error("ErrorBoundary caught an error:",d,u),s(u?.componentStack??null)},[]),l=m.useCallback(()=>{s(null),n?.()},[n]),c=m.useCallback(({error:d,resetErrorBoundary:u})=>i.jsx($ae,{error:d,resetErrorBoundary:u,showDetails:t,componentStack:a}),[t,a]);return i.jsx(e6,{fallbackRender:c,onError:o,onReset:l,resetKeys:r,children:e})}const Gae=new Set(["files","shell","git","changes","liveView"]),Vae=40,Wae=50,qae=46,gN="command-center-tracking-mode";function gd(e){return Gae.has(e)}function Kae(e){return Math.min(Wae,Math.max(Vae,e))}function bN(){return typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches}function Yae({selectedProject:e,selectedSession:t,activeTab:n,setActiveTab:r,ws:a,sendMessage:s,latestMessage:o,isMobile:l,onMenuClick:c,isLoading:d,onInputFocusChange:u,onSessionActive:p,onSessionInactive:f,onSessionProcessing:h,onSessionNotProcessing:g,processingSessions:b,onReplaceTemporarySession:x,onNavigateToSession:v,onShowSettings:y,externalMessageUpdate:w,onQuickStartSession:k,onQuickStartOrchestration:S}){const{preferences:C}=Mu(),{autoExpandTools:A,showRawParameters:R,showThinking:j,autoScrollToBottom:E,sendByCtrlEnter:L}=C,[T,I]=m.useState("split"),[N,O]=m.useState(qae),[$,F]=m.useState(!1),[q,Y]=m.useState(!1),[P,B]=m.useState(()=>typeof window>"u"?"local":window.localStorage.getItem(gN)==="git"?"git":"local"),[V,z]=m.useState(()=>gd(n)?"chat":n),[ee,ae]=m.useState(()=>typeof window<"u"&&window.innerWidth>=1024),ue=gd(n)?n:null,le=!!(ue&&!l&&ee&&T==="split"),se=m.useRef(null),me=m.useRef(null),de=m.useRef(null),we=m.useRef(null),Ce=m.useRef(null);D3(se,n);const{editingFile:je,editorWidth:M,editorExpanded:J,hasManualWidth:te,resizeHandleRef:H,handleFileOpen:U,handleCloseEditor:Q,handleToggleEditorExpand:ge,handleResizeStart:he}=dre({selectedProject:e,isMobile:l}),oe=V==="orchestration"?"orchestration":"chat",Ee=ue?oe:n,fe=!!le,re=!!(ue==="files"&&je&&!l),Z=Ee==="chat"&&(!ue||fe),ce=Ee==="orchestration"&&fe,Se=!!e&&(ue==="files"||ue==="changes"||n==="files"||n==="changes"),{changedFiles:Be,isLoading:qe,error:Je,lastCheckedAt:ht,latestDetectedFile:Xe,refresh:bt}=cre(e,!!e,o,P,{pollingEnabled:Se}),{latestDetectedFile:dt}=LR(e,o,C.autoShowAgentDiff);PR(e,C.autoShowAgentDiff,je?[je.path]:[],U,s);const[st,pt]=m.useState(null),yt=m.useRef(0),It=m.useRef(0),_t=m.useMemo(()=>Be.map(Re=>Re.path),[Be]),gn=m.useCallback(async Re=>{if(Re.diffInfo)return Re.diffInfo;if(!e)return null;try{const $e=await Ne(`/api/git/file-with-diff?project=${encodeURIComponent(e.name)}&file=${encodeURIComponent(Re.path)}`,{cache:"no-store"}),nt=await $e.json();if($e.ok&&!nt.error&&typeof nt.currentContent=="string"&&typeof nt.oldContent=="string")return{old_string:nt.oldContent,new_string:nt.currentContent}}catch{}if(Re.status==="A"||Re.status==="U")try{const $e=await At.readFile(e.name,Re.path);if(!$e.ok)return null;const nt=await $e.json();if(typeof nt.content=="string")return{old_string:"",new_string:nt.content}}catch{return null}return null},[e]),Yt=m.useCallback(Re=>{pt(Re.path),U(Re.path,Re.diffInfo??null),!l&&ee&&I("split"),r("files"),Re.diffInfo||gn(Re).then($e=>{$e&&U(Re.path,$e)})},[ee,U,gn,l,r]),dn=m.useCallback(()=>{I("split"),r(oe)},[r,oe]),bn=Re=>Re==="files"?re?i.jsxs("div",{className:"flex h-full min-w-0 overflow-hidden",children:[!J&&i.jsx("div",{className:"h-full min-w-[220px] max-w-[50%] flex-[0_0_46%] overflow-hidden border-r border-border/60",children:i.jsx(og,{selectedProject:e,onFileOpen:U,changedFilePaths:_t,focusedFilePath:st})}),i.jsx(hN,{editingFile:je,isMobile:l,editorExpanded:J,editorWidth:M,hasManualWidth:te,resizeHandleRef:H,onResizeStart:he,onCloseEditor:Q,onToggleEditorExpand:ge,projectPath:e?.path,fillSpace:!0})]}):i.jsx(og,{selectedProject:e,onFileOpen:U,changedFilePaths:_t,focusedFilePath:st}):Re==="shell"?i.jsx(Ul,{project:e,session:t,showHeader:!1,isActive:n==="shell"}):Re==="changes"?i.jsx(Bae,{changedFiles:Be,isLoading:qe,error:Je,latestChangedFilePath:Xe?.path??st,lastCheckedAt:ht,trackingMode:P,onTrackingModeChange:B,onRefresh:()=>{bt("manual")},onOpenFile:Yt,variant:"panel"}):Re==="liveView"?e?i.jsx(vne,{selectedProject:e,onAvailabilityChange:Y}):null:i.jsx(hR,{selectedProject:e,isMobile:l,onFileOpen:U});m.useEffect(()=>{if(!e){Y(!1);return}let Re=!1;return Ne(`/api/live-view/${encodeURIComponent(e.name)}/status`,{cache:"no-store"}).then($e=>$e.ok?$e.json():null).then($e=>{Re||Y(!!($e?.target?.available||$e?.session))}).catch(()=>{Re||Y(!1)}),()=>{Re=!0}},[e]),m.useEffect(()=>{if(typeof window>"u")return;const Re=()=>{ae(window.innerWidth>=1024)};return Re(),window.addEventListener("resize",Re),()=>{window.removeEventListener("resize",Re)}},[]),m.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(gN,P)},[P]),m.useEffect(()=>{gd(n)||z(n)},[n]);const Le=m.useCallback(Re=>{const $e=typeof Re=="function"?Re(n):Re;!l&&ee&&gd($e)?n===$e?(Ce.current=we.current?.getBoundingClientRect()??null,I(nt=>nt==="split"?"full":"split")):I("split"):(I("split"),z($e)),r($e)},[n,ee,l,r]),Ze=m.useCallback(Re=>{if(!me.current||!fe)return;Re.preventDefault(),Re.currentTarget.setPointerCapture?.(Re.pointerId),F(!0);const $e=Pt=>{const Oe=me.current?.getBoundingClientRect();if(!Oe||Oe.width<=0)return;const Ve=(Oe.right-Pt)/Oe.width*100;O(Kae(Ve))};$e(Re.clientX);const nt=Pt=>{$e(Pt.clientX)},xt=()=>{F(!1),window.removeEventListener("pointermove",nt),window.removeEventListener("pointerup",xt),window.removeEventListener("pointercancel",xt)};window.addEventListener("pointermove",nt),window.addEventListener("pointerup",xt,{once:!0}),window.addEventListener("pointercancel",xt,{once:!0})},[fe]);return m.useLayoutEffect(()=>{const Re=Ce.current,$e=we.current;if(!Re||!$e||bN()){Ce.current=null;return}const nt=$e.getBoundingClientRect();if(nt.width<=0||nt.height<=0){Ce.current=null;return}const xt=Re.left-nt.left,Pt=Re.width/nt.width;kr.fromTo($e,{x:xt,scaleX:Pt,opacity:.94,transformOrigin:"right center"},{x:0,scaleX:1,opacity:1,duration:on.duration.enter,ease:on.ease.soft,clearProps:"transform,opacity,transformOrigin"}),Ce.current=null},[T,le]),m.useEffect(()=>{le||F(!1)},[le]),m.useEffect(()=>{if(!fe||bN())return;const Re=de.current,$e=we.current;if(!Re||!$e)return;const nt=kr.context(()=>{kr.fromTo(Re,{opacity:.92,x:-14},{opacity:1,x:0,duration:on.duration.base,ease:on.ease.out,clearProps:"transform,opacity"}),kr.fromTo($e,{opacity:0,x:28,scaleX:.96,transformOrigin:"right center"},{opacity:1,x:0,scaleX:1,duration:on.duration.enter,ease:on.ease.soft,clearProps:"transform,opacity,transformOrigin"})},me);return()=>nt.revert()},[ue,fe]),m.useEffect(()=>{Xe&&Xe.detectedAt!==yt.current&&(yt.current=Xe.detectedAt,pt(Xe.path))},[Xe]),m.useEffect(()=>{if(!dt||dt.detectedAt===It.current||(It.current=dt.detectedAt,C.autoShowAgentDiff==="off"))return;const{path:Re,diffInfo:$e}=dt,nt=je?.path?.replace(/\\/g,"/"),xt=Re.replace(/\\/g,"/");if(nt===xt){U(Re,$e);return}C.autoShowAgentDiff==="always"&&(U(Re,$e),!l&&ee&&I("split"),r("files"))},[dt,C.autoShowAgentDiff,je?.path,U,l,ee,r]),m.useEffect(()=>{if(!st)return;const Re=window.setTimeout(()=>pt(null),7e3);return()=>window.clearTimeout(Re)},[st]),d?i.jsx(fg,{mode:"loading",isMobile:l,onMenuClick:c}):!e&&n==="controlRoom"?i.jsxs("div",{className:"flex h-full flex-col",children:[i.jsx(fN,{activeTab:n,setActiveTab:Le,selectedProject:null,selectedSession:null,liveViewAvailable:!1,activeSidePanelTab:null,sidePanelMode:T,canUseSidePanelSplit:ee,isMobile:l,onMenuClick:c}),i.jsx("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:i.jsx("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",children:i.jsx(pg,{selectedProject:null})})})]}):e?i.jsxs("div",{className:"flex h-full flex-col",children:[i.jsx(fN,{activeTab:n,setActiveTab:Le,selectedProject:e,selectedSession:t,liveViewAvailable:q,activeSidePanelTab:ue,sidePanelMode:T,canUseSidePanelSplit:ee,isMobile:l,onCloseSidePanel:ue?dn:void 0,onMenuClick:c}),i.jsxs("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:[i.jsxs("div",{ref:se,className:xe("flex min-h-0 min-w-[200px] flex-1 flex-col overflow-hidden",J&&"hidden",!je&&!ue&&!le&&"mx-auto w-full max-w-[1100px] px-4 md:px-8",!je&&ue&&!fe&&"w-full px-3 md:px-4",!je&&fe&&"w-full px-3 md:px-4",!je&&n==="orchestration"&&"max-w-none px-0 md:px-0",!je&&n==="remote"&&"max-w-none px-0 md:px-0",!je&&n==="controlRoom"&&"max-w-none px-0 md:px-0"),children:[(Z||ce||ue)&&i.jsxs("div",{ref:me,className:xe("h-full min-h-0",fe&&"flex overflow-hidden",$&&"select-none"),children:[Z&&i.jsx("div",{ref:de,className:xe("min-h-0 overflow-hidden",fe&&"min-w-[320px] flex-none transition-[width,opacity,transform] duration-300 ease-out",$&&"transition-none",!fe&&"h-full"),style:fe?{width:`${100-N}%`}:void 0,children:i.jsx("div",{className:"flex h-full min-h-0 min-w-0 flex-1",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(Hae,{showDetails:!0,children:i.jsx(_ee,{selectedProject:e,selectedSession:t,ws:a,sendMessage:s,latestMessage:o,onFileOpen:U,onInputFocusChange:u,onSessionActive:p,onSessionInactive:f,onSessionProcessing:h,onSessionNotProcessing:g,processingSessions:b,onReplaceTemporarySession:x,onNavigateToSession:v,onShowSettings:y,autoExpandTools:A,showRawParameters:R,showThinking:j,autoScrollToBottom:E,sendByCtrlEnter:L,externalMessageUpdate:w})})})})}),ce&&i.jsx("div",{ref:de,className:xe("min-h-0 overflow-hidden",fe&&"min-w-[320px] flex-none transition-[width,opacity,transform] duration-300 ease-out",$&&"transition-none"),style:fe?{width:`${100-N}%`}:void 0,children:i.jsx("div",{className:"flex h-full min-h-0 min-w-0 flex-1",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(M5,{selectedProject:e})})})}),fe&&i.jsxs("button",{type:"button",className:"group relative z-20 mx-1 flex w-3 shrink-0 cursor-col-resize touch-none items-center justify-center rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",onPointerDown:Ze,"aria-label":"Resize side panel",title:"Drag to resize",children:[i.jsx("span",{className:"absolute inset-y-3 -left-2 -right-2 rounded-full"}),i.jsx("span",{className:xe("h-16 w-1 rounded-full bg-border transition-all duration-200 group-hover:h-24 group-hover:bg-foreground/40",$&&"h-28 bg-foreground/55 shadow-[0_0_18px_rgba(120,120,120,0.22)]")})]}),ue&&i.jsx("div",{ref:we,className:xe("min-h-0 overflow-hidden rounded-lg border border-border/60 bg-card/40",fe&&"min-w-[360px] flex-none shadow-sm transition-[width,opacity,transform] duration-300 ease-out",$&&"transition-none",!fe&&"h-full w-full"),style:fe?{width:`${N}%`}:void 0,children:bn(ue)})]}),!ue&&n==="orchestration"&&i.jsx("div",{className:"flex h-full min-h-0 min-w-0 overflow-hidden",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(M5,{selectedProject:e})})}),!ue&&n==="remote"&&i.jsx("div",{className:"flex h-full min-h-0 min-w-0 overflow-hidden",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(CR,{})})}),!ue&&n==="controlRoom"&&i.jsx("div",{className:"flex h-full min-h-0 min-w-0 overflow-hidden",children:i.jsx("div",{className:"min-h-0 min-w-0 flex-1 overflow-hidden",children:i.jsx(pg,{selectedProject:e})})}),i.jsx("div",{className:`h-full overflow-hidden ${n==="preview"?"block":"hidden"}`}),n.startsWith("plugin:")&&i.jsx("div",{className:"h-full overflow-hidden",children:i.jsx(jR,{pluginName:n.replace("plugin:",""),selectedProject:e,selectedSession:t})})]}),!re&&i.jsx(hN,{editingFile:je,isMobile:l,editorExpanded:J,editorWidth:M,hasManualWidth:te,resizeHandleRef:H,onResizeStart:he,onCloseEditor:Q,onToggleEditorExpand:ge,projectPath:e.path,fillSpace:n==="files"})]})]}):i.jsx(fg,{mode:"empty",isMobile:l,onMenuClick:c,onQuickStartSession:k,onQuickStartOrchestration:S,onOpenControlRoom:()=>r("controlRoom")})}const Zae=Qn.memo(Yae),n6="pixcode.inAppNotifications.v1",Xae="pixcode.notificationPreferences.v1",lw=25;function Jae(){try{const e=JSON.parse(localStorage.getItem(n6)??"[]");return Array.isArray(e)?e.slice(0,lw):[]}catch{return[]}}function xN(e){try{localStorage.setItem(n6,JSON.stringify(e.slice(0,lw)))}catch{}}function vN(){try{return JSON.parse(localStorage.getItem(Xae)??"null")?.channels?.inApp!==!1}catch{return!0}}function Qae(e){if(!e||typeof e!="object")return null;const t=e;return typeof t.id!="string"||typeof t.title!="string"||typeof t.body!="string"?null:{id:t.id,title:t.title,body:t.body,eventType:t.eventType,category:t.category,preferenceKey:t.preferenceKey,kind:t.kind,code:t.code,severity:t.severity||"info",provider:t.provider??null,sessionId:t.sessionId??null,createdAt:t.createdAt||new Date().toISOString(),data:t.data}}function eie(e){return e==="error"?"border-red-500/50 bg-red-50 text-red-950 dark:bg-red-950/35 dark:text-red-50":e==="warning"?"border-amber-500/50 bg-amber-50 text-amber-950 dark:bg-amber-950/35 dark:text-amber-50":"border-border bg-card text-card-foreground"}function tie(e){if(!e)return"";try{return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit"}).format(new Date(e))}catch{return""}}function r6({latestMessage:e,variant:t="floating"}){const{t:n}=Me("common"),[r,a]=m.useState(()=>typeof window>"u"?[]:Jae()),[s,o]=m.useState(!1),[l,c]=m.useState(()=>new Set),[d,u]=m.useState(()=>typeof window>"u"?!0:vN());m.useEffect(()=>{const w=()=>u(vN());return window.addEventListener("storage",w),window.addEventListener("pixcode:notification-preferences-changed",w),()=>{window.removeEventListener("storage",w),window.removeEventListener("pixcode:notification-preferences-changed",w)}},[]),m.useEffect(()=>{const w=e;if(!w||w.type!=="notification:event")return;const k=Qae(w.notification);k&&(YN({key:k.id,title:k.title,body:k.body,event:k.eventType||k.kind||"updates",tag:typeof k.data?.tag=="string"?k.data.tag:k.id,data:k.data}),d&&(a(S=>{if(S.some(A=>A.id===k.id))return S;const C=[k,...S].slice(0,lw);return xN(C),C}),c(S=>{const C=new Set(S);return C.delete(k.id),C}),o(!0)))},[d,e]);const p=m.useMemo(()=>r.filter(w=>!l.has(w.id)).length,[r,l]),f=m.useCallback(()=>{c(new Set(r.map(w=>w.id)))},[r]),h=m.useCallback(w=>{a(k=>{const S=k.filter(C=>C.id!==w);return xN(S),S}),c(k=>{const S=new Set(k);return S.delete(w),S})},[]);if(!d||t==="floating"&&r.length===0)return null;const g=p>0,b=t==="inline"?"relative flex h-full items-center":"pointer-events-none fixed right-3 top-3 z-50 flex max-w-[calc(100vw-1.5rem)] flex-col items-end gap-2",x=g?$d:Ng,v=t==="inline"?`relative inline-flex h-7 w-7 items-center justify-center rounded border transition-colors ${g?"border-red-500/70 bg-red-500/10 text-red-600 hover:bg-red-500/15 dark:text-red-300":"border-border bg-transparent text-muted-foreground hover:bg-muted hover:text-foreground"}`:`pointer-events-auto relative inline-flex h-9 w-9 items-center justify-center rounded-md border bg-background/95 shadow-md shadow-black/10 backdrop-blur transition-colors hover:bg-muted ${g?"border-red-500/70 text-red-600 dark:text-red-300":"border-border text-foreground"}`,y=t==="inline"?"absolute right-0 top-full z-50 mt-1 w-[min(22rem,calc(100vw-1.5rem))] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-xl shadow-black/10":"pointer-events-auto w-[min(22rem,calc(100vw-1.5rem))] overflow-hidden rounded-lg border border-border bg-popover shadow-xl shadow-black/10";return i.jsxs("div",{className:b,children:[i.jsxs("button",{type:"button",onClick:()=>{o(w=>!w),s||f()},className:v,"aria-label":n("notifications.open",{defaultValue:"Open notifications"}),children:[i.jsx(x,{className:"h-4 w-4"}),g&&i.jsx("span",{className:"absolute -right-1 -top-1 min-w-4 rounded-full bg-red-600 px-1 text-[10px] font-semibold leading-4 text-white",children:p>9?"9+":p})]}),s&&i.jsxs("div",{className:y,children:[i.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-border px-3 py-2",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx($d,{className:"h-4 w-4 flex-shrink-0 text-primary"}),i.jsx("span",{className:"truncate text-sm font-medium text-popover-foreground",children:n("notifications.title",{defaultValue:"Notifications"})}),g&&i.jsx("span",{className:"rounded-full bg-red-600 px-2 py-0.5 text-xs font-medium text-white",children:p})]}),i.jsxs("div",{className:"flex items-center gap-1",children:[i.jsx("button",{type:"button",onClick:f,className:"rounded px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",children:n("notifications.markRead",{defaultValue:"Read"})}),i.jsx("button",{type:"button",onClick:()=>o(!1),className:"rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground","aria-label":n("notifications.close",{defaultValue:"Close notifications"}),children:i.jsx(St,{className:"h-4 w-4"})})]})]}),i.jsxs("div",{className:"max-h-[22rem] space-y-2 overflow-y-auto p-2",children:[r.length===0&&i.jsx("div",{className:"rounded-md border border-dashed border-border p-4 text-center text-sm text-muted-foreground",children:n("notifications.empty",{defaultValue:"No notifications yet"})}),r.slice(0,6).map(w=>i.jsx("div",{className:`rounded-md border p-3 shadow-sm ${eie(w.severity)}`,children:i.jsxs("div",{className:"flex items-start justify-between gap-3",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[!l.has(w.id)&&i.jsx("span",{className:"h-2 w-2 flex-shrink-0 rounded-full bg-primary"}),i.jsx("p",{className:"truncate text-sm font-medium",children:w.title})]}),i.jsx("p",{className:"mt-1 text-sm leading-5 opacity-85",children:w.body}),i.jsx("p",{className:"mt-2 text-xs opacity-60",children:tie(w.createdAt)})]}),i.jsx("button",{type:"button",onClick:()=>h(w.id),className:"rounded p-1 opacity-60 transition-opacity hover:opacity-100","aria-label":n("notifications.dismiss",{defaultValue:"Dismiss notification"}),children:i.jsx(St,{className:"h-4 w-4"})})]})},w.id))]})]})]})}const nie=260,rie=520,aie=340,iie=320,sie=680,oie=420,lie=150,cie=560,die=256,a6="pixcode.workbench.workspaceTabs.v1",i6="pixcode.workbench.cliState.v1",s6="pixcode.workbench.editorState.v1",cw=10,o6=["claude","codex","cursor","gemini","qwen","opencode"],l6=30;function Lh(e,t,n){return Math.min(n,Math.max(t,e))}function bd(e){return e==="remote"||e==="controlRoom"||e.startsWith("plugin:")}function uie(e){return e==="git"||e==="changes"?"sourceControl":"explorer"}function $a(e){return e.fullPath||e.path||e.displayName||e.name}function wu(e){const t=$a(e),r=t.replace(/\\/g,"/").split("/").filter(Boolean);return r.length===0?t||e.name:`/${r[r.length-1]}`}function c6(e,t){return typeof e!="number"||!Number.isFinite(e)?t("vscodeWorkbench.projects.fileCountPending",{defaultValue:"Files pending"}):t("vscodeWorkbench.projects.fileCount",{count:e,formattedCount:e.toLocaleString(),defaultValue:"{{formattedCount}} files"})}function Zi(e){return(e.fullPath||e.path||e.name).replace(/\\/g,"/")}function pie(e){return e?$a(e).replace(/\\/g,"/"):null}function mie(e){return e?$a(e).replace(/\\/g,"/"):null}function hie(e){return typeof e=="string"&&o6.includes(e)}function fie(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e;return typeof t.name=="string"&&typeof t.path=="string"}function gie(){if(typeof window>"u")return[];try{const e=JSON.parse(window.localStorage.getItem(a6)??"[]");return Array.isArray(e)?e.filter(t=>typeof t.id=="string"&&typeof t.projectName=="string").slice(0,cw):[]}catch{return[]}}function bie(e){if(!(typeof window>"u"))try{window.localStorage.setItem(a6,JSON.stringify(e.slice(0,cw)))}catch{}}function d6(){if(typeof window>"u")return{};try{const e=JSON.parse(window.localStorage.getItem(i6)??"{}");return!e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return{}}}function xie(e){if(!e)return null;const t=d6()[e];return!t||!hie(t.provider)?null:{provider:t.provider,isTerminalOpen:!!t.isTerminalOpen,sessionId:typeof t.sessionId=="string"?t.sessionId:null,tabs:Array.isArray(t.tabs)?t.tabs.filter(n=>n&&typeof n.id=="string"&&typeof n.tabId=="string"&&(n.type==="provider"||n.type==="plain")):[],activeTabId:typeof t.activeTabId=="string"?t.activeTabId:null,updatedAt:typeof t.updatedAt=="number"?t.updatedAt:Date.now()}}function vie(e,t){if(!(!e||typeof window>"u"))try{const n=d6();window.localStorage.setItem(i6,JSON.stringify({...n,[e]:t}))}catch{}}function u6(){if(typeof window>"u")return{};try{const e=JSON.parse(window.localStorage.getItem(s6)??"{}");return!e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return{}}}function yie(e){if(!e)return null;const t=u6()[e];if(!t||!Array.isArray(t.tabs))return null;const n=t.tabs.filter(fie).slice(0,l6),r=typeof t.activePath=="string"&&n.some(s=>s.path===t.activePath)?t.activePath:n[0]?.path??null,a=typeof t.splitPath=="string"&&n.some(s=>s.path===t.splitPath)?t.splitPath:null;return{tabs:n,activePath:r,splitPath:a,updatedAt:typeof t.updatedAt=="number"?t.updatedAt:Date.now()}}function wie(e,t){if(!(!e||typeof window>"u"))try{const n=u6();window.localStorage.setItem(s6,JSON.stringify({...n,[e]:{...t,tabs:t.tabs.slice(0,l6)}}))}catch{}}function kie(e,t){return{id:Zi(e),projectName:e.name,path:$a(e),label:t,starred:!1}}function Sie({sidebarProps:e,selectedProject:t,selectedSession:n,activeTab:r,setActiveTab:a,latestMessage:s,sendMessage:o,onMenuClick:l,isLoading:c,onShowSettings:d,onQuickStartSession:u}){const{t:p}=Me("common"),f=m.useRef(null),[h,g]=m.useState(aie),[b,x]=m.useState(oie),[v,y]=m.useState(!1),[w,k]=m.useState(!1),[S,C]=m.useState(null),[A,R]=m.useState(!1),[j,E]=m.useState(0),[L,T]=m.useState(!1),[I,N]=m.useState(null),[O,$]=m.useState(die),[F,q]=m.useState("half"),[Y,P]=m.useState(!1),B=Pg("alicomert","pixcode"),{preferences:V}=Mu(),{latestDetectedFile:z}=LR(t,s,V.autoShowAgentDiff),[ee,ae]=m.useState("projects"),[ue,le]=m.useState(null),[se,me]=m.useState([]),[de,we]=m.useState(null),[Ce,je]=m.useState(null),[M,J]=m.useState(null),[te,H]=m.useState(gie),[U,Q]=m.useState(null),ge=m.useRef(null),he=m.useMemo(()=>mie(t),[t]),oe=m.useRef(!1),Ee=m.useRef(null);m.useEffect(()=>{bd(r)||r==="chat"&&ee==="projects"||ae(uie(r))},[r,ee]),m.useEffect(()=>{if(Ee.current===he)return;Ee.current=he,oe.current=!0,je(null),J(null);const ye=yie(he),Fe=ye?.tabs??[];me(Fe),we(ye?.activePath??Fe[0]?.path??null),je(ye?.splitPath?Fe.find(W=>W.path===ye.splitPath)??null:null)},[he]),m.useEffect(()=>{if(oe.current){oe.current=!1;return}if(!he)return;const ye=de&&se.some(W=>W.path===de)?de:se[0]?.path??null,Fe=Ce&&se.some(W=>W.path===Ce.path)?Ce.path:null;wie(he,{tabs:se,activePath:ye,splitPath:Fe,updatedAt:Date.now()})},[de,he,se,Ce]),m.useEffect(()=>{t&&H(ye=>{const Fe=Zi(t),W=ye.find(pe=>pe.id===Fe);if(W)return ye.map(pe=>pe.id===Fe?{...W,projectName:t.name,path:$a(t)}:pe);const ve=`Workspace ${ye.length+1}`;return[...ye,kie(t,ve)].slice(-cw)})},[t]),m.useEffect(()=>{bie(te)},[te]);const fe=m.useCallback((ye,Fe=null)=>{const pe={name:ye.replace(/\\/g,"/").split("/").pop()||ye,path:ye,projectName:t?.name,diffInfo:Fe};me(Ae=>{const Ue=Ae.findIndex(tt=>tt.path===ye);if(Ue===-1)return[...Ae,pe];const ot=[...Ae];return ot[Ue]=pe,ot}),we(ye),a("files")},[t?.name,a]),re=m.useCallback((ye,Fe)=>{const W=ye.replace(/\\/g,"/");me(ve=>{const pe=ve.findIndex(Ue=>Ue.path===W);if(pe===-1)return ve;const Ae=[...ve];return Ae[pe]={...Ae[pe],diffInfo:Fe},Ae})},[]),Z=m.useCallback((ye,Fe)=>{se.some(ve=>ve.path===ye)?re(ye,Fe):fe(ye,Fe)},[se,re,fe]);PR(t,V.autoShowAgentDiff,se.map(ye=>ye.path),Z,o);const ce=m.useCallback(ye=>{const Fe=ye.replace(/\\/g,"/");me(W=>{const ve=W.findIndex(Ue=>Ue.path===Fe);if(ve===-1)return W;const pe=W[ve];if(!pe.diffInfo)return W;const Ae=[...W];return Ae[ve]={...pe,diffInfo:null},Ae})},[]);m.useEffect(()=>{if(!z||V.autoShowAgentDiff==="off")return;const{path:ye,diffInfo:Fe}=z;if(se.some(ve=>ve.path===ye)){re(ye,Fe);return}V.autoShowAgentDiff==="always"&&fe(ye,Fe)},[z,V.autoShowAgentDiff,se,re,fe]),m.useEffect(()=>{if(typeof window>"u")return;const ye=Fe=>{const W=Fe.detail;typeof W?.path=="string"&&W.path&&ce(W.path)};return window.addEventListener("pixcode:file-saved",ye),()=>{window.removeEventListener("pixcode:file-saved",ye)}},[ce]);const Se=m.useCallback(ye=>{me(Fe=>{const W=Fe.filter(ve=>ve.path!==ye);return we(ve=>ve!==ye?ve:W[W.length-1]?.path??null),W})},[]),Be=m.useCallback(()=>{me([]),we(null),je(null),J(null)},[]),qe=m.useCallback(ye=>{navigator.clipboard?.writeText(ye),J(null)},[]),Je=m.useCallback((ye,Fe=!1)=>{const W=se.find(ve=>ve.path===ye);W&&(je(W),Fe&&me(ve=>{const pe=ve.filter(Ae=>Ae.path!==ye);return we(Ae=>Ae!==ye?Ae:pe[pe.length-1]?.path??null),pe}),J(null))},[se]),ht=m.useCallback((ye,Fe)=>{ye.preventDefault(),J({filePath:Fe,x:ye.clientX,y:ye.clientY})},[]),Xe=m.useCallback(()=>{N(t??null),T(!1),R(!0),q("half"),E(ye=>ye+1)},[t]),bt=m.useMemo(()=>se.find(ye=>ye.path===de)??se[0]??null,[de,se]),dt=I??t;m.useEffect(()=>{let ye=!1;const Fe=async()=>{try{const ve=await Ne("/api/system/update-state",{cache:"no-store"});if(!ve.ok)return;const pe=await ve.json();ye||P(!!pe?.state?.pendingRestart)}catch{}};Fe(),window.addEventListener("focus",Fe);const W=window.setInterval(Fe,6e4);return()=>{ye=!0,window.removeEventListener("focus",Fe),window.clearInterval(W)}},[]);const st=m.useCallback(()=>{window.dispatchEvent(new CustomEvent(Hd,{detail:{updateAvailable:B.updateAvailable,latestVersion:B.latestVersion,currentVersion:B.currentVersion,releaseInfo:B.releaseInfo,installMode:B.installMode}}))},[B]),pt=m.useMemo(()=>[{id:"explorer",icon:Fn,label:p("vscodeWorkbench.activity.explorer"),tab:"files"},{id:"projects",icon:En,label:p("vscodeWorkbench.activity.projects"),tab:"chat"},{id:"sourceControl",icon:zn,label:p("vscodeWorkbench.activity.sourceControl"),tab:"git"},{id:"terminal",icon:Ln,label:p("vscodeWorkbench.activity.terminal"),tab:"shell"}],[p]),yt=m.useMemo(()=>[{id:"controlRoom",icon:Fr,label:p("tabs.controlRoom"),tab:"controlRoom"},{id:"remote",icon:To,label:p("tabs.remote"),tab:"remote"}],[p]),It=m.useCallback((ye,Fe)=>{Fe.preventDefault(),Fe.currentTarget.setPointerCapture?.(Fe.pointerId),le(ye)},[]);m.useEffect(()=>{if(!ue)return;const ye=W=>{const ve=f.current?.getBoundingClientRect();if(ve){if(ue==="left"){g(Lh(W.clientX-ve.left,nie,rie));return}if(ue==="bottom"){$(Lh(ve.bottom-W.clientY,lie,cie));return}x(Lh(ve.right-W.clientX,iie,sie))}},Fe=()=>le(null);return window.addEventListener("pointermove",ye),window.addEventListener("pointerup",Fe,{once:!0}),window.addEventListener("pointercancel",Fe,{once:!0}),document.body.style.cursor=ue==="bottom"?"ns-resize":"col-resize",document.body.style.userSelect="none",()=>{window.removeEventListener("pointermove",ye),window.removeEventListener("pointerup",Fe),window.removeEventListener("pointercancel",Fe),document.body.style.cursor="",document.body.style.userSelect=""}},[ue]);const _t=m.useCallback((ye,Fe)=>{if(ye==="terminal"){if(!t){ae("projects"),a("chat");return}A&&F==="full"?q("half"):A?R(!1):Xe(),r==="shell"&&a("files");return}if(ae(ye),y(!1),ye==="projects"){a("chat");return}(Fe!=="chat"||!bd(r))&&a(Fe)},[r,F,A,Xe,t,a]),gn=m.useCallback(()=>{R(!1),N(null)},[]),Yt=m.useCallback(()=>{q("full")},[]),dn=m.useCallback(()=>{q("half")},[]),bn=m.useCallback(ye=>{a(ye)},[a]),Le=m.useCallback(ye=>{window.dispatchEvent(new CustomEvent("pixcode:create-project",{detail:{workspaceType:ye}}))},[]),Ze=m.useCallback(ye=>{e.onProjectSelect(ye),ae("explorer"),a("files")},[a,e]),Re=m.useCallback(ye=>{const Fe=e.projects.find(W=>W.name===ye.projectName||Zi(W)===ye.id);Fe&&Ze(Fe)},[Ze,e.projects]),$e=m.useCallback(ye=>{H(Fe=>{const W=Fe.filter(pe=>pe.id!==ye);if(t&&Zi(t)===ye){const pe=W[W.length-1],Ae=pe?e.projects.find(Ue=>Ue.name===pe.projectName||Zi(Ue)===pe.id):null;Ae&&window.setTimeout(()=>Ze(Ae),0)}return W})},[Ze,t,e.projects]),nt=m.useCallback(ye=>{H(Fe=>Fe.filter(W=>W.id===ye))},[]),xt=m.useCallback(()=>{H([])},[]),Pt=m.useCallback((ye,Fe)=>{const W=Fe.trim();W&&H(ve=>ve.map(pe=>pe.id===ye?{...pe,label:W}:pe))},[]),Oe=m.useCallback(ye=>{H(Fe=>Fe.map(W=>W.id===ye?{...W,starred:!W.starred}:W))},[]),Ve=()=>ee==="projects"?i.jsx(Lie,{projects:e.projects,selectedProject:t,onProjectSelect:Ze,onNewSession:e.onNewSession,onOpenProject:()=>Le("existing"),onCloneProject:()=>Le("new"),onRefresh:e.onRefresh,isRefreshing:e.isLoading,t:p}):ee==="sourceControl"?i.jsx(hR,{selectedProject:t,isMobile:!1,compact:!0,onFileOpen:fe}):i.jsx(jie,{selectedProject:t,onFileOpen:fe,t:p}),mt=()=>c?i.jsx(fg,{mode:"loading",isMobile:!1,onMenuClick:l}):r==="remote"?i.jsx(CR,{}):r==="controlRoom"?i.jsx(pg,{selectedProject:t}):r.startsWith("plugin:")?i.jsx(jR,{pluginName:r.replace("plugin:",""),selectedProject:t,selectedSession:n}):t?bt?i.jsxs("div",{className:"flex h-full min-h-0 flex-col bg-background",children:[i.jsxs("div",{className:"flex h-9 shrink-0 items-center border-b border-border bg-muted/20",children:[i.jsx("div",{ref:ge,className:"flex min-w-0 flex-1 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:se.map(ye=>{const Fe=ye.path===bt.path;return i.jsxs("button",{type:"button",className:xe("group flex h-9 w-44 shrink-0 items-center gap-2 border-r border-border px-2.5 text-xs transition-colors",Fe?"bg-background text-foreground":"text-muted-foreground hover:bg-muted/50 hover:text-foreground"),onClick:()=>we(ye.path),onMouseDown:W=>{W.button===1&&(W.preventDefault(),Se(ye.path))},onAuxClick:W=>{W.button===1&&W.preventDefault()},onContextMenu:W=>ht(W,ye.path),title:ye.path,children:[i.jsx(En,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"min-w-0 flex-1 truncate text-left",children:ye.name}),i.jsx("span",{role:"button",tabIndex:0,className:"rounded p-0.5 text-muted-foreground opacity-70 transition hover:bg-muted hover:text-foreground group-hover:opacity-100",onClick:W=>{W.stopPropagation(),Se(ye.path)},onKeyDown:W=>{(W.key==="Enter"||W.key===" ")&&(W.preventDefault(),W.stopPropagation(),Se(ye.path))},"aria-label":p("vscodeWorkbench.editor.closeTab",{file:ye.name,defaultValue:"Close {{file}}"}),title:p("vscodeWorkbench.editor.closeTab",{file:ye.name,defaultValue:"Close {{file}}"}),children:i.jsx(St,{className:"h-3 w-3"})})]},ye.path)})}),i.jsx("button",{type:"button",className:"flex h-full w-8 shrink-0 items-center justify-center border-l border-border text-muted-foreground hover:bg-muted hover:text-foreground",onClick:()=>J({filePath:bt.path,x:window.innerWidth-220,y:84}),"aria-label":p("vscodeWorkbench.editor.moreActions",{defaultValue:"More tab actions"}),title:p("vscodeWorkbench.editor.moreActions",{defaultValue:"More tab actions"}),children:i.jsx(k4,{className:"h-4 w-4"})})]}),i.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:Ce?i.jsxs("div",{className:"flex h-full min-w-0",children:[bt&&i.jsx("div",{className:"min-w-0 flex-1 border-r border-border",children:i.jsx(Ml,{file:bt,onClose:()=>Se(bt.path),projectPath:t.path||t.fullPath,isSidebar:!0})}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsxs("div",{className:"flex h-8 items-center justify-between border-b border-border bg-muted/20 px-2",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-xs text-muted-foreground",children:[i.jsx(En,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:Ce.name})]}),i.jsx("button",{type:"button",className:"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground",onClick:()=>je(null),"aria-label":p("vscodeWorkbench.editor.closeSplit",{defaultValue:"Close split editor"}),title:p("vscodeWorkbench.editor.closeSplit",{defaultValue:"Close split editor"}),children:i.jsx(St,{className:"h-3.5 w-3.5"})})]}),i.jsx("div",{className:"h-[calc(100%-2rem)] min-h-0 overflow-hidden",children:i.jsx(Ml,{file:Ce,onClose:()=>je(null),projectPath:t.path||t.fullPath,isSidebar:!0})})]})]}):i.jsx(Ml,{file:bt,onClose:()=>Se(bt.path),projectPath:t.path||t.fullPath,isSidebar:!0})}),M&&i.jsx(Tie,{context:M,file:se.find(ye=>ye.path===M.filePath)??null,onClose:()=>J(null),onCloseTab:Se,onCloseAll:Be,onCopyPath:qe,onSplitRight:ye=>Je(ye),onSplitMoveRight:ye=>Je(ye,!0),t:p})]}):i.jsx("div",{className:"flex h-full items-center justify-center bg-background",children:i.jsxs("div",{className:"max-w-md px-6 text-center",children:[i.jsx(Ys,{className:"mx-auto mb-4 h-10 w-10 text-muted-foreground/60"}),i.jsx("div",{className:"text-sm font-medium text-foreground",children:p("vscodeWorkbench.editor.emptyTitle")}),i.jsx("p",{className:"mt-2 text-xs leading-5 text-muted-foreground",children:t.displayName||t.name})]})}):i.jsx(Rie,{projects:e.projects,onProjectSelect:Ze,onNewSession:e.onNewSession,onOpenProject:()=>Le("existing"),onCloneProject:()=>Le("new"),onQuickStartSession:u,onShowSettings:d,t:p}),et=()=>i.jsx(_ie,{project:t,onHeaderContentChange:C,t:p});return i.jsxs("div",{className:"flex h-full min-w-0 flex-1 flex-col overflow-hidden bg-background text-foreground",children:[i.jsx(J3,{...e,isMobile:!1,modalsOnly:!0}),i.jsx(Cie,{t:p,latestMessage:s,onOpenProject:Le,onActivityPanel:_t,onSystemTab:bn,onShowSettings:d,onQuickStartSession:u}),i.jsx(Nie,{tabs:te,projects:e.projects,selectedProject:t,onSelect:Re,onClose:$e,onCloseOthers:nt,onCloseAll:xt,onRename:Pt,onToggleStar:Oe,contextMenu:U,onContextMenuChange:Q,onAdd:()=>Le("existing"),isCliPanelCollapsed:w,onToggleCliPanel:()=>k(ye=>!ye),t:p}),i.jsxs("div",{ref:f,className:xe("flex min-h-0 min-w-0 flex-1 overflow-hidden",ue&&"select-none"),children:[i.jsxs("aside",{className:"flex h-full w-12 shrink-0 flex-col border-r border-border bg-muted/30",children:[i.jsx("div",{className:"flex h-11 items-center justify-center border-b border-border",children:i.jsx(Du,{className:"h-5 w-5 text-primary"})}),i.jsxs("div",{className:"flex flex-1 flex-col items-center gap-1 py-2",children:[pt.map(ye=>i.jsx(ul,{label:ye.label,icon:ye.icon,active:ye.id==="terminal"?A:!v&&ee===ye.id&&!bd(r),onClick:()=>_t(ye.id,ye.tab)},ye.id)),i.jsx(ul,{label:Y?p("vscodeWorkbench.activity.updateReady",{defaultValue:"Update ready"}):p("vscodeWorkbench.activity.update",{defaultValue:"Update"}),icon:at,active:!1,badge:B.updateAvailable||Y,onClick:st})]}),i.jsxs("div",{className:"flex flex-col items-center gap-1 border-t border-border py-2",children:[yt.map(ye=>i.jsx(ul,{label:ye.label,icon:ye.icon,active:r===ye.tab,onClick:()=>bn(ye.tab)},ye.id)),i.jsx(ul,{label:p(v?"vscodeWorkbench.activity.showPanel":"vscodeWorkbench.activity.hidePanel"),icon:v?ju:Au,active:!1,onClick:()=>y(ye=>!ye)}),i.jsx(ul,{label:p("navigation.settings"),icon:Dt,active:!1,onClick:d})]})]}),!v&&i.jsxs(i.Fragment,{children:[i.jsxs("section",{className:"h-full shrink-0 overflow-hidden border-r border-border bg-background",style:{width:h},children:[i.jsx("div",{className:"flex h-10 items-center justify-between border-b border-border px-3",children:i.jsx("div",{className:"truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:p(`vscodeWorkbench.panels.${ee}`)})}),i.jsx("div",{className:"h-[calc(100%-2.5rem)] min-h-0 overflow-hidden",children:Ve()})]}),i.jsx(yN,{label:p("vscodeWorkbench.resize.left"),active:ue==="left",onPointerDown:ye=>It("left",ye)})]}),i.jsxs("main",{className:"min-w-0 flex-1 overflow-hidden border-r border-border bg-background",children:[i.jsxs("div",{className:"flex h-10 items-center justify-between border-b border-border px-3",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx(Lu,{className:"h-4 w-4 text-muted-foreground"}),i.jsx("span",{className:"truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:bd(r)?p(`tabs.${r==="controlRoom"?"controlRoom":r}`):p("vscodeWorkbench.panels.editor")})]}),i.jsx("span",{className:"truncate text-xs text-muted-foreground",children:t?.displayName||t?.name||p("vscodeWorkbench.noProject")})]}),i.jsxs("div",{className:"relative flex h-[calc(100%-2.5rem)] min-h-0 flex-col overflow-hidden",children:[i.jsx("div",{className:xe("min-h-0 flex-1 overflow-hidden",A&&F==="half"&&"border-b border-border"),children:mt()}),A&&i.jsx(Aie,{project:dt,runId:j,forceNewSession:L,height:O,viewMode:F,isActive:!0,onResizeStart:ye=>It("bottom",ye),onShowFull:Yt,onShowHalf:dn,onClose:gn,t:p})]})]}),!w&&i.jsxs(i.Fragment,{children:[i.jsx(yN,{label:p("vscodeWorkbench.resize.right"),active:ue==="right",onPointerDown:ye=>It("right",ye)}),i.jsxs("aside",{className:"h-full shrink-0 overflow-hidden bg-background",style:{width:b},children:[i.jsx("div",{className:"flex h-10 items-center justify-between border-b border-border px-3",children:i.jsx("div",{className:"min-w-0 flex-1 overflow-hidden",children:S||i.jsxs("div",{className:"flex min-w-0 items-center gap-1",children:[i.jsx(Ni,{className:"h-4 w-4 text-muted-foreground"}),i.jsx("span",{className:"truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:p("vscodeWorkbench.panels.cli")})]})})}),i.jsx("div",{className:"h-[calc(100%-2.5rem)] min-h-0 overflow-hidden",children:et()})]})]})]})]})}function Cie({t:e,latestMessage:t,onOpenProject:n,onActivityPanel:r,onSystemTab:a,onShowSettings:s,onQuickStartSession:o}){const[l,c]=m.useState(null),d=m.useMemo(()=>[{label:e("vscodeWorkbench.menuBar.file",{defaultValue:"File"}),commands:[{label:e("vscodeWorkbench.menu.openProject",{defaultValue:"Open Project..."}),icon:Nr,type:"existing"},{label:e("vscodeWorkbench.menu.cloneFromGithub",{defaultValue:"Clone Repository..."}),icon:Pu,type:"new"},{label:e("vscodeWorkbench.menu.newChat",{defaultValue:"New Chat"}),icon:Er,action:o},{label:e("navigation.settings"),icon:Dt,action:s}]},{label:e("vscodeWorkbench.menuBar.edit",{defaultValue:"Edit"}),commands:[{label:e("vscodeWorkbench.menu.newChat",{defaultValue:"New Chat"}),icon:Vt,action:o}]},{label:e("vscodeWorkbench.menuBar.selection",{defaultValue:"Selection"}),commands:[{label:e("vscodeWorkbench.menu.openProjects",{defaultValue:"Open Projects"}),icon:Fn,action:()=>r("projects","chat")}]},{label:e("vscodeWorkbench.menuBar.view",{defaultValue:"View"}),commands:[{label:e("vscodeWorkbench.activity.explorer"),icon:Fn,action:()=>r("explorer","files")},{label:e("vscodeWorkbench.activity.projects"),icon:En,action:()=>r("projects","chat")},{label:e("vscodeWorkbench.activity.sourceControl"),icon:zn,action:()=>r("sourceControl","git")},{label:e("quickSettings.title",{defaultValue:"Quick Settings"}),icon:qh,action:()=>window.openQuickSettings?.()}]},{label:e("vscodeWorkbench.menuBar.go",{defaultValue:"Go"}),commands:[{label:e("tabs.controlRoom"),icon:Fr,action:()=>a("controlRoom")},{label:e("tabs.remote"),icon:To,action:()=>a("remote")}]},{label:e("vscodeWorkbench.menuBar.run",{defaultValue:"Run"}),commands:[]},{label:e("vscodeWorkbench.menuBar.terminal",{defaultValue:"Terminal"}),commands:[{label:e("vscodeWorkbench.panels.cli"),icon:Ni,action:()=>r("terminal","shell")}]},{label:e("vscodeWorkbench.menuBar.help",{defaultValue:"Help"}),commands:[{label:e("navigation.settings"),icon:Dt,action:s}]}],[r,o,s,a,e]),u=p=>{if(c(null),p.type){n(p.type);return}p.action?.()};return i.jsxs("div",{className:"flex h-8 shrink-0 items-center border-b border-border bg-muted/20 px-2 text-xs text-muted-foreground",children:[i.jsx("div",{className:"flex h-full items-center gap-0.5",children:d.map(p=>i.jsxs("div",{className:"relative h-full",children:[i.jsxs("button",{type:"button",className:xe("flex h-full items-center gap-1 rounded px-2 transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",l===p.label&&"bg-muted text-foreground"),onClick:()=>c(f=>f===p.label?null:p.label),children:[p.label,i.jsx(Mr,{className:"h-3 w-3"})]}),l===p.label&&i.jsx("div",{className:"absolute left-0 top-full z-50 mt-1 min-w-52 overflow-hidden rounded-md border border-border bg-popover py-1 text-popover-foreground shadow-xl shadow-black/10",children:p.commands.map(f=>{const h=f.icon;return i.jsxs("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-2 text-left text-xs transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",onClick:()=>u(f),children:[h&&i.jsx(h,{className:"h-3.5 w-3.5 text-muted-foreground"}),i.jsx("span",{className:"truncate",children:f.label})]},f.label)})})]},p.label))}),i.jsx("div",{className:"flex min-w-0 flex-1"}),i.jsx("button",{type:"button",onClick:()=>window.toggleQuickSettings?.(),className:"relative mr-1 inline-flex h-7 w-7 items-center justify-center rounded border border-border bg-transparent text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40","aria-label":e("vscodeWorkbench.menuBar.openSettingsPanel",{defaultValue:"Open settings panel"}),title:e("vscodeWorkbench.menuBar.openSettingsPanel",{defaultValue:"Open settings panel"}),children:i.jsx(qh,{className:"h-4 w-4"})}),i.jsx(r6,{latestMessage:t,variant:"inline"})]})}function Nie({tabs:e,projects:t,selectedProject:n,onSelect:r,onClose:a,onCloseOthers:s,onCloseAll:o,onRename:l,onToggleStar:c,contextMenu:d,onContextMenuChange:u,onAdd:p,isCliPanelCollapsed:f,onToggleCliPanel:h,t:g}){const b=n?Zi(n):null,[x,v]=m.useState(null),[y,w]=m.useState(""),k=m.useRef(null),S=m.useMemo(()=>e.map(E=>({tab:E,project:t.find(L=>L.name===E.projectName||Zi(L)===E.id)})).filter(E=>!!E.project),[t,e]),C=E=>{u(null),v(E.id),w(E.label)},A=()=>{x&&(l(x,y),v(null),w(""))},R=(E,L)=>{E.preventDefault(),r(L),u({tabId:L.id,x:E.clientX,y:E.clientY})},j=d?S.find(E=>E.tab.id===d.tabId)??null:null;return i.jsxs("div",{className:"relative flex h-9 shrink-0 items-center border-b border-border bg-background text-xs",children:[i.jsxs("div",{ref:k,className:"flex h-full min-w-0 flex-1 items-center overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:[S.length===0?i.jsxs("button",{type:"button",onClick:p,className:"flex h-8 min-w-0 items-center gap-2 border-r border-border px-3 text-muted-foreground hover:bg-muted/40 hover:text-foreground",children:[i.jsx(Nr,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:g("vscodeWorkbench.workspace.openFirst",{defaultValue:"Open a workspace"})})]}):S.map(({tab:E,project:L})=>{const T=E.id===b;return i.jsxs("div",{onContextMenu:I=>R(I,E),className:xe("group relative flex h-8 w-52 shrink-0 items-center border-r border-border px-2 transition-colors",T?"bg-background text-foreground shadow-[inset_0_-2px_0_hsl(var(--primary))]":"text-muted-foreground hover:bg-muted/30 hover:text-foreground"),title:`${E.label} - ${wu(L)}`,children:[i.jsx("button",{type:"button",onClick:()=>c(E.id),className:xe("mr-1 rounded p-0.5 transition hover:bg-muted",E.starred?"text-amber-500":"text-muted-foreground/60 opacity-0 group-hover:opacity-100"),"aria-label":g("vscodeWorkbench.workspace.toggleStar",{name:E.label,defaultValue:"Star {{name}}"}),title:g("vscodeWorkbench.workspace.toggleStar",{name:E.label,defaultValue:"Star {{name}}"}),children:i.jsx(ui,{className:"h-3.5 w-3.5"})}),x===E.id?i.jsx("input",{value:y,autoFocus:!0,onChange:I=>w(I.target.value),onBlur:A,onKeyDown:I=>{I.key==="Enter"&&A(),I.key==="Escape"&&(v(null),w(""))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-background px-1 py-0.5 text-xs text-foreground outline-none"}):i.jsxs("button",{type:"button",onClick:()=>r(E),onDoubleClick:()=>C(E),className:"min-w-0 flex-1 text-left",children:[i.jsx("div",{className:"truncate font-medium",children:E.label}),i.jsx("div",{className:"truncate text-[10px] text-muted-foreground",children:wu(L)})]}),i.jsx("div",{className:"ml-1 flex shrink-0 items-center gap-0.5 opacity-70 group-hover:opacity-100",children:i.jsx("button",{type:"button",onClick:()=>a(E.id),className:"rounded p-0.5 hover:bg-muted hover:text-foreground","aria-label":g("vscodeWorkbench.workspace.close",{name:E.label,defaultValue:"Close {{name}}"}),title:g("vscodeWorkbench.workspace.close",{name:E.label,defaultValue:"Close {{name}}"}),children:i.jsx(St,{className:"h-3.5 w-3.5"})})})]},E.id)}),i.jsx("button",{type:"button",onClick:p,className:"flex h-8 w-10 shrink-0 items-center justify-center border-r border-border bg-muted/10 text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground","aria-label":g("vscodeWorkbench.workspace.add",{defaultValue:"Add workspace"}),title:g("vscodeWorkbench.workspace.add",{defaultValue:"Add workspace"}),children:i.jsx(Vt,{className:"h-3.5 w-3.5"})})]}),i.jsx("button",{type:"button",className:xe("flex h-full w-10 shrink-0 items-center justify-center border-l border-border text-muted-foreground transition hover:bg-muted hover:text-foreground",f&&"bg-muted/40 text-foreground"),onClick:h,"aria-label":f?g("vscodeWorkbench.cli.showPanel",{defaultValue:"Show CLI panel"}):g("vscodeWorkbench.cli.hidePanel",{defaultValue:"Hide CLI panel"}),title:f?g("vscodeWorkbench.cli.showPanel",{defaultValue:"Show CLI panel"}):g("vscodeWorkbench.cli.hidePanel",{defaultValue:"Hide CLI panel"}),children:f?i.jsx(Au,{className:"h-3.5 w-3.5"}):i.jsx(ju,{className:"h-3.5 w-3.5"})}),d&&j&&i.jsx(Eie,{context:d,tab:j.tab,onClose:()=>u(null),onRename:()=>C(j.tab),onToggleStar:()=>c(j.tab.id),onCloseTab:()=>a(j.tab.id),onCloseOthers:()=>s(j.tab.id),onCloseAll:o,t:g})]})}function Eie({context:e,tab:t,onClose:n,onRename:r,onToggleStar:a,onCloseTab:s,onCloseOthers:o,onCloseAll:l,t:c}){m.useEffect(()=>{const u=()=>n(),p=f=>{f.key==="Escape"&&n()};return window.addEventListener("mousedown",u),window.addEventListener("keydown",p),()=>{window.removeEventListener("mousedown",u),window.removeEventListener("keydown",p)}},[n]);const d=u=>p=>{p.stopPropagation(),u(),n()};return i.jsxs("div",{className:"fixed z-50 w-48 overflow-hidden rounded-md border border-border bg-popover py-1 text-xs text-popover-foreground shadow-xl shadow-black/10",style:{left:e.x,top:e.y},onMouseDown:u=>u.stopPropagation(),children:[i.jsxs("button",{type:"button",onClick:d(r),className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(y4,{className:"h-3.5 w-3.5"}),c("vscodeWorkbench.workspace.rename",{defaultValue:"Rename"})]}),i.jsxs("button",{type:"button",onClick:d(a),className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(ui,{className:"h-3.5 w-3.5"}),t.starred?c("vscodeWorkbench.workspace.unstar",{defaultValue:"Unstar"}):c("vscodeWorkbench.workspace.star",{defaultValue:"Star"})]}),i.jsx("div",{className:"my-1 border-t border-border"}),i.jsxs("button",{type:"button",onClick:d(s),className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(St,{className:"h-3.5 w-3.5"}),c("vscodeWorkbench.workspace.closeAction",{defaultValue:"Close workspace"})]}),i.jsxs("button",{type:"button",onClick:d(o),className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(Au,{className:"h-3.5 w-3.5"}),c("vscodeWorkbench.workspace.closeOthers",{defaultValue:"Close others"})]}),i.jsxs("button",{type:"button",onClick:d(l),className:"flex w-full items-center gap-2 px-3 py-2 text-left text-red-600 hover:bg-muted dark:text-red-300",children:[i.jsx(St,{className:"h-3.5 w-3.5"}),c("vscodeWorkbench.workspace.closeAll",{defaultValue:"Close all"})]})]})}function Tie({context:e,file:t,onClose:n,onCloseTab:r,onCloseAll:a,onCopyPath:s,onSplitRight:o,onSplitMoveRight:l,t:c}){if(m.useEffect(()=>{const u=()=>n(),p=f=>{f.key==="Escape"&&n()};return window.addEventListener("click",u),window.addEventListener("keydown",p),()=>{window.removeEventListener("click",u),window.removeEventListener("keydown",p)}},[n]),!t)return null;const d=[{id:"close",label:c("vscodeWorkbench.editor.context.close",{defaultValue:"Close"}),icon:St,action:()=>r(t.path)},{id:"closeAllTabs",label:c("vscodeWorkbench.editor.context.closeAll",{defaultValue:"Close All"}),icon:St,action:a},{id:"copyPath",label:c("vscodeWorkbench.editor.context.copyPath",{defaultValue:"Copy Path"}),icon:co,action:()=>s(t.path)},{id:"splitRight",label:c("vscodeWorkbench.editor.context.splitRight",{defaultValue:"Split Right"}),icon:Du,action:()=>o(t.path)},{id:"splitMoveRight",label:c("vscodeWorkbench.editor.context.splitMoveRight",{defaultValue:"Split and Move Right"}),icon:ju,action:()=>l(t.path)}];return i.jsxs("div",{className:"fixed z-[80] w-56 overflow-hidden rounded-md border border-border bg-popover py-1 text-xs text-popover-foreground shadow-xl shadow-black/15",style:{left:e.x,top:e.y},onClick:u=>u.stopPropagation(),children:[i.jsxs("div",{className:"border-b border-border px-3 py-2 text-[11px] text-muted-foreground",children:[i.jsx("div",{className:"truncate font-medium text-foreground",children:t.name}),i.jsx("div",{className:"truncate font-mono",children:t.path})]}),d.map(u=>{const p=u.icon;return i.jsxs("button",{type:"button",onClick:u.action,className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted",children:[i.jsx(p,{className:"h-3.5 w-3.5 text-muted-foreground"}),u.label]},u.id)})]})}function Aie({project:e,runId:t,forceNewSession:n,height:r,viewMode:a,isActive:s,onResizeStart:o,onShowFull:l,onShowHalf:c,onClose:d,t:u}){const p=u("vscodeWorkbench.terminal.title",{defaultValue:"Terminal"}),f=a==="full";return i.jsxs("section",{className:xe("relative overflow-hidden bg-gray-950 text-gray-100",f?"absolute inset-0 z-30":"shrink-0"),style:{height:f?"100%":r},children:[!f&&i.jsx("button",{type:"button",className:"absolute inset-x-0 top-0 z-10 h-1 cursor-ns-resize bg-transparent hover:bg-blue-500/40",onPointerDown:o,"aria-label":u("vscodeWorkbench.terminal.resize",{defaultValue:"Resize terminal"}),title:u("vscodeWorkbench.terminal.resize",{defaultValue:"Resize terminal"})}),i.jsxs("div",{className:"flex h-8 items-center justify-between border-b border-gray-800 bg-gray-900 px-3",children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx(Ln,{className:"h-3.5 w-3.5 text-blue-300"}),i.jsx("span",{className:"truncate text-[11px] font-semibold uppercase tracking-wide text-gray-300",children:p}),i.jsx("span",{className:"truncate font-mono text-[10px] text-gray-500",children:e?$a(e):u("vscodeWorkbench.noProject")})]}),i.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[f?i.jsx("button",{type:"button",className:"rounded p-1 text-gray-400 hover:bg-gray-800 hover:text-gray-100",onClick:c,"aria-label":u("vscodeWorkbench.terminal.halfScreen",{defaultValue:"Half screen terminal"}),title:u("vscodeWorkbench.terminal.halfScreen",{defaultValue:"Half screen terminal"}),children:i.jsx(Du,{className:"h-3.5 w-3.5"})}):i.jsx("button",{type:"button",className:"rounded p-1 text-gray-400 hover:bg-gray-800 hover:text-gray-100",onClick:l,"aria-label":u("vscodeWorkbench.terminal.fullScreen",{defaultValue:"Full screen terminal"}),title:u("vscodeWorkbench.terminal.fullScreen",{defaultValue:"Full screen terminal"}),children:i.jsx(Ru,{className:"h-3.5 w-3.5"})}),i.jsx("button",{type:"button",className:"rounded p-1 text-gray-400 hover:bg-gray-800 hover:text-gray-100",onClick:d,"aria-label":u("vscodeWorkbench.terminal.close",{defaultValue:"Close terminal"}),title:u("vscodeWorkbench.terminal.close",{defaultValue:"Close terminal"}),children:i.jsx(St,{className:"h-3.5 w-3.5"})})]})]}),i.jsx("div",{className:"h-[calc(100%-2rem)] min-h-0",children:i.jsx(Ul,{project:e,session:null,isPlainShell:!0,forceNewSession:n,showHeader:!1,autoConnect:!!e,isActive:s,title:p},`bottom-terminal-shell-${e?$a(e):"none"}-${t}`)})]})}function jie({selectedProject:e,onFileOpen:t,t:n}){return i.jsx("div",{className:"h-full min-h-0 overflow-hidden",children:i.jsx(og,{selectedProject:e,onFileOpen:t})})}function Rie({projects:e,onProjectSelect:t,onNewSession:n,onOpenProject:r,onCloneProject:a,onQuickStartSession:s,onShowSettings:o,t:l}){const c=e.slice(0,6);return i.jsx("div",{className:"h-full overflow-auto bg-background",children:i.jsx("div",{className:"mx-auto flex max-w-6xl flex-col gap-6 p-4 sm:p-6",children:i.jsxs("section",{className:"min-w-0",children:[i.jsxs("div",{className:"mb-6",children:[i.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-primary",children:"Pixcode"}),i.jsx("h2",{className:"mt-2 text-2xl font-semibold text-foreground",children:l("vscodeWorkbench.welcome.title",{defaultValue:"Hoş geldin"})}),i.jsx("p",{className:"mt-2 max-w-2xl text-sm leading-6 text-muted-foreground",children:l("vscodeWorkbench.welcome.description",{defaultValue:"Bir proje aç, GitHub’dan klonla veya terminalden CLI oturumlarını başlat."})})]}),i.jsxs("div",{className:"grid gap-2",style:{gridTemplateColumns:"repeat(auto-fit, minmax(min(100%, 13rem), 1fr))"},children:[i.jsxs("button",{type:"button",onClick:r,className:"group flex min-h-24 flex-col items-start justify-between rounded-md border border-border bg-card p-4 text-left transition hover:border-primary/50 hover:bg-muted/30",children:[i.jsx(Nr,{className:"h-5 w-5 text-blue-400"}),i.jsx("span",{className:"mt-4 text-sm font-semibold text-foreground",children:l("vscodeWorkbench.welcome.openProject",{defaultValue:"Proje Aç"})}),i.jsx("span",{className:"mt-1 text-xs leading-5 text-muted-foreground",children:l("vscodeWorkbench.welcome.openProjectDescription",{defaultValue:"Yerel klasörü workspace olarak bağla."})})]}),i.jsxs("button",{type:"button",onClick:a,className:"group flex min-h-24 flex-col items-start justify-between rounded-md border border-border bg-card p-4 text-left transition hover:border-primary/50 hover:bg-muted/30",children:[i.jsx(Pu,{className:"h-5 w-5 text-foreground"}),i.jsx("span",{className:"mt-4 text-sm font-semibold text-foreground",children:l("vscodeWorkbench.welcome.cloneProject",{defaultValue:"Klonla"})}),i.jsx("span",{className:"mt-1 text-xs leading-5 text-muted-foreground",children:l("vscodeWorkbench.welcome.cloneProjectDescription",{defaultValue:"GitHub reposunu seçtiğin klasöre çek."})})]})]}),i.jsx("div",{className:"mt-4 rounded-md border border-border bg-card/70 p-3 sm:p-4",children:i.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-sm font-semibold text-foreground",children:l("vscodeWorkbench.welcome.appearanceTitle",{defaultValue:"Görünüm"})}),i.jsx("p",{className:"mt-1 text-xs leading-5 text-muted-foreground",children:l("vscodeWorkbench.welcome.appearanceDescription",{defaultValue:"Pixcode koyu modla başlar; gerekirse açık moda geçebilirsin."})})]}),i.jsxs("div",{className:"flex shrink-0 flex-wrap items-center gap-2",children:[i.jsxs("div",{className:"flex items-center gap-2 rounded border border-border bg-background px-3 py-2",children:[i.jsx("span",{className:"text-xs font-medium text-foreground",children:l("vscodeWorkbench.welcome.darkMode",{defaultValue:"Koyu mod"})}),i.jsx(Wd,{ariaLabel:l("vscodeWorkbench.welcome.themeToggle",{defaultValue:"Tema modunu değiştir"})})]}),i.jsxs("button",{type:"button",onClick:o,className:"inline-flex items-center justify-center gap-2 rounded border border-border px-3 py-2 text-xs font-medium text-foreground hover:bg-muted",children:[i.jsx(Dt,{className:"h-3.5 w-3.5"}),l("vscodeWorkbench.welcome.themeSettings",{defaultValue:"Tema ayarları"})]})]})]})}),i.jsxs("div",{className:"mt-7",children:[i.jsxs("div",{className:"mb-2 flex items-center justify-between gap-3",children:[i.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:l("vscodeWorkbench.welcome.recentProjects",{defaultValue:"Son projeler"})}),s&&i.jsxs("button",{type:"button",onClick:()=>{s()},className:"inline-flex items-center gap-1.5 rounded border border-border px-2.5 py-1.5 text-xs text-muted-foreground hover:bg-muted hover:text-foreground",children:[i.jsx(Er,{className:"h-3.5 w-3.5"}),l("vscodeWorkbench.welcome.newChat",{defaultValue:"Yeni sohbet"})]})]}),c.length>0?i.jsx("div",{className:"grid gap-2 xl:grid-cols-2",children:c.map(p=>i.jsxs("div",{role:"button",tabIndex:0,className:"cursor-pointer rounded-md border border-border bg-card/60 p-3 text-left transition hover:border-primary/40 hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",onClick:()=>t(p),onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),t(p))},title:$a(p),children:[i.jsxs("div",{className:"flex items-start justify-between gap-3",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"truncate text-sm font-semibold text-foreground",children:p.displayName||p.name}),i.jsx("div",{className:"mt-1 truncate font-mono text-[11px] text-muted-foreground",children:wu(p)})]}),i.jsx("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:c6(p.fileCount,l)})]}),i.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[i.jsx("span",{className:"rounded bg-primary/10 px-2 py-1 text-[11px] font-medium text-primary",children:l("vscodeWorkbench.projects.workHere",{defaultValue:"Work in this folder"})}),i.jsx("span",{role:"button",tabIndex:0,className:"rounded border border-border px-2 py-1 text-[11px] text-foreground",onClick:f=>{f.stopPropagation(),t(p),n(p)},onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),f.stopPropagation(),t(p),n(p))},children:l("vscodeWorkbench.projects.startChat",{defaultValue:"Chat"})})]})]},p.name))}):i.jsxs("div",{className:"rounded-md border border-dashed border-border p-8 text-center",children:[i.jsx(Fn,{className:"mx-auto mb-3 h-8 w-8 text-muted-foreground"}),i.jsx("div",{className:"text-sm font-medium text-foreground",children:l("vscodeWorkbench.projects.emptyTitle",{defaultValue:"No project directories yet"})}),i.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:l("vscodeWorkbench.projects.emptyDescription",{defaultValue:"Open a local folder or clone a repository to start."})})]})]})]})})})}const xd=o6.map(e=>({id:e,label:br[e]??e}));function Ds(e,t,n){return(e??[]).map(r=>({...r,__provider:r.__provider??t,__projectName:r.__projectName??n}))}function Iie(e){return e?[...Ds(e.sessions,"claude",e.name),...Ds(e.codexSessions,"codex",e.name),...Ds(e.cursorSessions,"cursor",e.name),...Ds(e.geminiSessions,"gemini",e.name),...Ds(e.qwenSessions,"qwen",e.name),...Ds(e.opencodeSessions,"opencode",e.name)]:[]}function _ie({project:e,onHeaderContentChange:t,t:n}){const[r,a]=m.useState(()=>{if(typeof window>"u")return"claude";const J=window.localStorage.getItem("selected-provider");return xd.some(te=>te.id===J)?J:"claude"}),[s,o]=m.useState(!1),[l,c]=m.useState(null),[d,u]=m.useState(!1),[p,f]=m.useState(!1),[h,g]=m.useState("provider"),[b,x]=m.useState(null),[v,y]=m.useState(null),[w]=m.useState({runId:0,forceNewSession:!1}),[k,S]=m.useState([]),[C,A]=m.useState(null),[R,j]=m.useState({provider:null,state:"idle",log:"",error:null}),E=m.useRef(null),L=m.useRef(null),{providerAuthStatus:T,refreshProviderAuthStatuses:I}=Tu({initialLoading:!1}),N=m.useMemo(()=>Iie(e),[e]),O=T[r],$=l?.__provider===r?l:null,F=k.find(J=>J.id===C)||k[0]||null;m.useEffect(()=>{F&&g(F.type)},[F]);const q=!!(e&&O?.installed!==!1&&R.state!=="running"),Y=!!(e&&(d||k.length>0)&&(F?.type==="plain"||h==="provider"&&q)),P=m.useMemo(()=>pie(e),[e]),B=m.useRef(null),V=m.useCallback((J,te,H=k)=>{if(J==="plain")return`Terminal #${H.filter(he=>he.type==="plain").length+1}`;const U=te&&br[te]?br[te]:te??"CLI",Q=H.filter(ge=>ge.type==="provider"&&ge.provider===te).length+1;return`${U} #${Q}`},[k]),z=m.useCallback(J=>{const te=`cli-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,H=`tab_${crypto.randomUUID()}`;return S(U=>{const Q={...J,id:te,tabId:H,title:J.title||V(J.type,J.provider,U)};return[...U,Q]}),A(te),u(!0),g(J.type==="plain"?"plain":"provider"),te},[V]),ee=m.useCallback(()=>{z({type:"plain",provider:void 0,session:null,runId:Date.now(),forceNewSession:!1,startupInput:null,permissionOverride:null})},[z]),ae=m.useCallback(J=>{const te=k.find(U=>U.id===J);if(!te)return;const H=window.prompt("CLI tab name",te.title)?.trim();H&&S(U=>U.map(Q=>Q.id===J?{...Q,title:H}:Q))},[k]),ue=m.useCallback(J=>{S(te=>{const H=te.filter(U=>U.id!==J);return C===J&&A(H[H.length-1]?.id||null),H.length===0&&u(!1),H})},[C]),le=m.useCallback(()=>{o(!0)},[]),se=m.useMemo(()=>i.jsxs("div",{className:"flex min-w-0 items-center gap-1",children:[k.length===0&&i.jsxs("div",{className:"flex min-w-0 items-center gap-1 pr-1",children:[i.jsx(Ni,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),i.jsx("span",{className:"truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:n("vscodeWorkbench.panels.cli")})]}),k.length>0&&i.jsx("div",{ref:L,className:"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto pr-1 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:k.map(J=>{const te=J.id===(F?.id||C);return i.jsxs("div",{className:xe("group flex h-7 min-w-[112px] max-w-[200px] shrink-0 items-center gap-1.5 rounded border px-2 text-[11px]",te?"border-primary/50 bg-primary/10 text-foreground":"border-border/70 bg-muted/20 text-muted-foreground hover:bg-muted/40 hover:text-foreground"),children:[i.jsxs("button",{type:"button",className:"flex min-w-0 flex-1 items-center gap-1.5 text-left",onClick:()=>A(J.id),onDoubleClick:()=>ae(J.id),title:"Double-click to rename",children:[J.type==="plain"?i.jsx(Ln,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}):i.jsx(nn,{provider:J.provider??"claude",className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:J.title})]}),i.jsx("button",{type:"button",className:"rounded p-0.5 opacity-60 hover:bg-muted hover:opacity-100",onClick:H=>{H.stopPropagation(),ue(J.id)},"aria-label":"Close CLI tab",children:i.jsx(St,{className:"h-3 w-3"})})]},J.id)})}),i.jsx("button",{type:"button",className:"flex h-7 w-7 shrink-0 items-center justify-center rounded border border-border text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-50",disabled:!e,onClick:ee,title:"New terminal tab",children:i.jsx(Ln,{className:"h-3.5 w-3.5"})}),i.jsx("button",{type:"button",className:"flex h-7 w-7 shrink-0 items-center justify-center rounded border border-border text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-50",disabled:!e||R.state==="running",onClick:le,title:"New CLI tab",children:i.jsx(Vt,{className:"h-3.5 w-3.5"})})]}),[F?.id,C,k,ue,R.state,ee,le,e,ae,n]);m.useEffect(()=>(t(se),()=>t(null)),[se,t]),m.useEffect(()=>{const J=xd.map(te=>te.id);I(J)},[I]),m.useEffect(()=>{if(B.current===P)return;B.current=P,f(!1),g("provider"),y(null);const J=xie(P);if(!J||!J.tabs||J.tabs.length===0){S([]),A(null),u(!1),c(null);return}a(J.provider),window.localStorage.setItem("selected-provider",J.provider);const te=J.tabs.map(H=>{const U=H.sessionId?N.find(Q=>Q.id===H.sessionId&&Q.__provider===H.provider)??null:null;return{id:H.id,tabId:H.tabId,type:H.type,provider:H.provider,title:H.title,session:U,runId:H.runId,forceNewSession:!1,startupInput:H.startupInput,permissionOverride:H.permissionOverride}});S(te),A(J.activeTabId||te[0]?.id||null),u(!0)},[P,N]),m.useEffect(()=>()=>{try{E.current?.close()}catch{}},[]),m.useEffect(()=>{P&&vie(P,{provider:r,isTerminalOpen:k.length>0,sessionId:l?.id??null,tabs:k.map(J=>({id:J.id,tabId:J.tabId,type:J.type,provider:J.provider,title:J.title,sessionId:J.session?.id??null,runId:J.runId,forceNewSession:!1,startupInput:J.startupInput,permissionOverride:J.permissionOverride})),activeTabId:C,updatedAt:Date.now()})},[P,k,C,r,l?.id]);const me=m.useCallback(J=>{T[J]?.installed!==!1&&(g("provider"),y(null),a(J),window.localStorage.setItem("selected-provider",J))},[T]),de=m.useCallback(async J=>{j({provider:J,state:"running",log:"",error:null});try{E.current?.close()}catch{}E.current=null;try{const te=await Ne(`/api/providers/${J}/install`,{method:"POST",body:"{}"}),H=await te.json().catch(()=>({}));if(!te.ok||!H?.success)throw new Error(H?.error||`HTTP ${te.status}`);if(H.data?.manual)throw new Error(H.data?.message||n("vscodeWorkbench.cli.manualInstall",{defaultValue:"This CLI needs manual installation."}));const U=H.data?.jobId;if(!U)throw new Error(n("vscodeWorkbench.cli.installNoJob",{defaultValue:"Install did not return a job id."}));const Q=window.localStorage.getItem("auth-token")||"",ge=`/api/providers/${J}/install/${U}/stream${Q?`?token=${encodeURIComponent(Q)}`:""}`,he=new EventSource(ge);E.current=he,he.addEventListener("log",oe=>{try{const Ee=JSON.parse(oe.data);typeof Ee.chunk=="string"&&j(fe=>({...fe,log:`${fe.log}${Ee.chunk}`}))}catch{}}),he.addEventListener("done",oe=>{try{const Ee=JSON.parse(oe.data);if(!Ee.success)throw new Error(Ee.error||n("vscodeWorkbench.cli.installFailed",{defaultValue:"Install failed."}));j(fe=>({...fe,state:"done",error:null})),I([J],{force:!0}),a(J),window.localStorage.setItem("selected-provider",J)}catch(Ee){j(fe=>({...fe,state:"error",error:Ee instanceof Error?Ee.message:n("vscodeWorkbench.cli.installFailed",{defaultValue:"Install failed."})}))}finally{try{he.close()}catch{}E.current=null}}),he.onerror=()=>{j(oe=>oe.state==="running"?{...oe,state:"error",error:n("vscodeWorkbench.cli.installStreamLost",{defaultValue:"Install stream closed early. The install may still be running."})}:oe)}}catch(te){j({provider:J,state:"error",log:"",error:te instanceof Error?te.message:n("vscodeWorkbench.cli.installFailed",{defaultValue:"Install failed."})})}},[I,n]),we=m.useCallback((J,{forceNewSession:te=!1}={})=>{!e||T[J]?.installed===!1||R.state==="running"||(g("provider"),x(null),y(null),c(null),o(!1),f(!1),a(J),window.localStorage.setItem("selected-provider",J),u(!0),z({type:"provider",provider:J,session:null,runId:Date.now(),forceNewSession:!1,startupInput:null,permissionOverride:null}))},[R.state,z,e,T]),Ce=m.useCallback(({forceNewSession:J=!1}={})=>{we(r,{forceNewSession:J})},[r,we]),je=m.useCallback(()=>{Ce({forceNewSession:p})},[p,Ce]),M=m.useCallback(()=>{if(C){ue(C);return}g("provider"),x(null),y(null),u(!1),f(!1)},[C,ue]);return d||k.length>0?i.jsxs("div",{className:"relative flex h-full min-h-0 flex-col bg-gray-950 text-gray-100",children:[s&&i.jsxs("div",{className:"absolute inset-x-2 top-2 z-30 max-h-[58%] overflow-hidden rounded-md border border-gray-800 bg-gray-950 shadow-2xl shadow-black/40",children:[i.jsxs("div",{className:"flex items-center justify-between border-b border-gray-800 px-2.5 py-2",children:[i.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wide text-gray-400",children:"New CLI tab"}),i.jsx("button",{type:"button",className:"rounded p-1 text-gray-400 hover:bg-gray-800 hover:text-gray-100",onClick:()=>o(!1),children:i.jsx(St,{className:"h-3.5 w-3.5"})})]}),i.jsx("div",{className:"grid max-h-72 gap-1 overflow-y-auto p-2",children:xd.map(J=>{const H=T[J.id]?.installed===!1,U=R.provider===J.id&&R.state==="running";return i.jsxs("button",{type:"button",className:xe("flex items-center gap-2 rounded border px-2 py-2 text-left transition-colors",H?"border-amber-800/70 bg-amber-950/30 text-amber-100":"border-gray-800 bg-gray-900 text-gray-200 hover:border-blue-500/60 hover:bg-blue-500/10"),onClick:()=>{if(H){de(J.id);return}we(J.id,{forceNewSession:!0})},children:[i.jsx(nn,{provider:J.id,className:xe("h-4 w-4 shrink-0",H&&"opacity-70 grayscale")}),i.jsxs("span",{className:"min-w-0 flex-1",children:[i.jsx("span",{className:"block truncate text-[11px] font-semibold",children:J.label}),i.jsx("span",{className:"block truncate text-[10px] text-gray-500",children:U?"Installing...":H?"Install first":"Open new tab"})]}),i.jsx(Vt,{className:"h-3.5 w-3.5 shrink-0 opacity-70"})]},J.id)})})]}),i.jsx("div",{className:"relative min-h-0 flex-1",children:k.length===0?i.jsx(Ul,{tabId:`fallback-${r}-${w.runId}`,project:e,session:$,provider:r,forceNewSession:w.forceNewSession,startupInput:b,permissionOverride:v,showHeader:!0,autoConnect:Y,isActive:!0,onClose:M},`${r}-${$?.id||"new"}-${e?.name||"none"}-${w.runId}`):k.map(J=>i.jsx("div",{className:xe("absolute inset-0",J.id===F?.id?"block":"hidden"),children:i.jsx(Ul,{tabId:J.tabId,project:e,session:J.session,provider:J.provider,isPlainShell:J.type==="plain",forceNewSession:J.forceNewSession,startupInput:J.startupInput,permissionOverride:J.permissionOverride,showHeader:!0,autoConnect:Y,isActive:J.id===F?.id,onClose:()=>ue(J.id)},`${J.id}-${J.runId}`)},J.id))})]}):i.jsx("div",{className:"flex h-full min-h-0 flex-col bg-gray-950 text-gray-100",children:i.jsxs("div",{className:"flex min-h-0 flex-1 flex-col border-b border-gray-800 bg-gray-900/95 p-2",children:[i.jsxs("div",{className:"mb-2 flex items-center justify-between gap-2",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"truncate text-xs font-semibold text-gray-100",children:e?.displayName||e?.name||n("vscodeWorkbench.noProject")}),i.jsx("div",{className:"text-[11px] text-gray-400",children:n("vscodeWorkbench.cli.chooseDescription",{defaultValue:"Choose a CLI, then start a full-height terminal."})})]}),i.jsx("div",{className:"flex shrink-0 items-center gap-1"})]}),i.jsxs("div",{className:"mb-2 flex items-center gap-2 rounded border border-gray-800 bg-gray-950 px-2.5 py-2",children:[i.jsx(Ln,{className:"h-4 w-4 shrink-0 text-blue-300"}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("div",{className:"truncate text-[11px] font-semibold text-gray-200",children:n("vscodeWorkbench.cli.chooseTitle",{defaultValue:"Start a CLI terminal"})}),i.jsx("div",{className:"truncate text-[10px] text-gray-500",children:n("vscodeWorkbench.cli.projectScoped",{defaultValue:"Project-scoped CLI terminal"})})]})]}),i.jsx("div",{className:"grid min-h-0 gap-1.5 overflow-y-auto pr-1",children:xd.map(J=>{const te=T[J.id],H=r===J.id,U=te?.installed===!1,Q=!!te?.loading,ge=R.provider===J.id&&R.state==="running",he=!!(te?.updateAvailable&&te.latestVersion&&!U),oe=ge?n("vscodeWorkbench.cli.installing",{defaultValue:"Installing..."}):Q?n("vscodeWorkbench.cli.checking",{defaultValue:"Checking..."}):U?n("vscodeWorkbench.cli.notInstalled",{defaultValue:"Not installed"}):he?n("vscodeWorkbench.cli.updateAvailable",{version:te?.latestVersion,defaultValue:"Update {{version}}"}):te?.installedVersion||n("vscodeWorkbench.cli.ready",{defaultValue:"Ready"});return i.jsxs("div",{className:xe("group flex min-w-0 items-center gap-2 rounded border px-2 py-2 transition-colors",H&&!U?"border-blue-500 bg-blue-500/15 text-blue-100":"border-gray-800 bg-gray-900 text-gray-300 hover:border-gray-700 hover:bg-gray-800",U&&"border-amber-800/70 bg-amber-950/30 text-amber-100"),children:[i.jsxs("button",{type:"button",className:"flex min-w-0 flex-1 items-center gap-2 text-left",onClick:()=>{if(U){de(J.id);return}me(J.id)},title:br[J.id]??J.label,children:[i.jsx(nn,{provider:J.id,className:xe("h-4 w-4 shrink-0",U&&"opacity-70 grayscale")}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"truncate text-[11px] font-semibold",children:J.label}),i.jsx("div",{className:xe("truncate text-[10px]",U?"text-amber-300":he?"text-amber-200":"text-gray-500"),children:oe})]}),H&&!U&&i.jsx(qt,{className:"ml-auto h-3.5 w-3.5 shrink-0 text-blue-200"})]}),(U||he)&&i.jsx("button",{type:"button",disabled:ge,className:"flex h-7 w-7 shrink-0 items-center justify-center rounded bg-gray-800 text-amber-200 hover:bg-gray-700 disabled:opacity-50",onClick:()=>void de(J.id),"aria-label":U?n("vscodeWorkbench.cli.installProvider",{provider:J.label,defaultValue:"Install {{provider}}"}):n("vscodeWorkbench.cli.updateProvider",{provider:J.label,defaultValue:"Update {{provider}}"}),title:U?n("vscodeWorkbench.cli.installProvider",{provider:J.label,defaultValue:"Install {{provider}}"}):n("vscodeWorkbench.cli.updateProvider",{provider:J.label,defaultValue:"Update {{provider}}"}),children:ge?i.jsx(Ht,{className:"h-3.5 w-3.5 animate-spin"}):U?i.jsx(pa,{className:"h-3.5 w-3.5"}):i.jsx(at,{className:"h-3.5 w-3.5"})})]},J.id)})}),(R.state==="running"||R.state==="done"||R.state==="error")&&i.jsxs("div",{className:"mt-2 rounded border border-gray-800 bg-gray-950 p-2",children:[i.jsxs("div",{className:"flex items-center gap-2 text-[11px] text-gray-300",children:[R.state==="running"&&i.jsx(Ht,{className:"h-3.5 w-3.5 animate-spin text-amber-300"}),R.state==="done"&&i.jsx(qt,{className:"h-3.5 w-3.5 text-emerald-300"}),R.state==="error"&&i.jsx(ca,{className:"h-3.5 w-3.5 text-red-300"}),i.jsxs("span",{className:"truncate",children:[R.provider?br[R.provider]:n("vscodeWorkbench.cli.provider",{defaultValue:"Provider"})," ",R.state==="running"?n("vscodeWorkbench.cli.installRunning",{defaultValue:"is installing"}):R.state==="done"?n("vscodeWorkbench.cli.installDone",{defaultValue:"is ready"}):n("vscodeWorkbench.cli.installError",{defaultValue:"needs attention"})]})]}),R.error&&i.jsx("div",{className:"mt-1 text-[11px] text-red-300",children:R.error}),R.log&&i.jsx("pre",{className:"mt-2 max-h-20 overflow-y-auto rounded bg-black/40 p-2 font-mono text-[10px] leading-relaxed text-gray-300",children:R.log})]}),i.jsxs("button",{type:"button",disabled:!q,onClick:je,className:"mt-2 flex h-10 w-full items-center justify-center gap-2 rounded bg-blue-600 px-3 text-xs font-semibold text-white transition-colors hover:bg-blue-500 disabled:cursor-not-allowed disabled:bg-gray-800 disabled:text-gray-500",children:[i.jsx(Ln,{className:"h-4 w-4"}),n("vscodeWorkbench.cli.startSelected",{provider:br[r]??r,defaultValue:"Start {{provider}}"})]})]})})}function Lie({projects:e,selectedProject:t,onProjectSelect:n,onNewSession:r,onOpenProject:a,onCloneProject:s,onRefresh:o,isRefreshing:l,t:c}){return i.jsxs("div",{className:"flex h-full min-h-0 flex-col",children:[i.jsx("div",{className:"border-b border-border p-1.5",children:i.jsxs("div",{className:"grid grid-cols-2 gap-1.5",children:[i.jsxs("button",{type:"button",onClick:a,className:"flex min-w-0 items-center justify-center gap-1 rounded border border-border px-2 py-1 text-[11px] font-medium text-foreground transition-colors hover:bg-muted",children:[i.jsx(Nr,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:c("vscodeWorkbench.projects.openProject",{defaultValue:"Open Project"})})]}),i.jsxs("button",{type:"button",onClick:s,className:"flex min-w-0 items-center justify-center gap-1 rounded border border-border px-2 py-1 text-[11px] font-medium text-foreground transition-colors hover:bg-muted",children:[i.jsx(Pu,{className:"h-3.5 w-3.5 shrink-0"}),i.jsx("span",{className:"truncate",children:c("vscodeWorkbench.projects.cloneFromGithub",{defaultValue:"Clone"})})]})]})}),i.jsxs("div",{className:"flex items-center justify-between border-b border-border px-2.5 py-1.5",children:[i.jsx("span",{className:"text-[11px] font-medium uppercase tracking-wide text-muted-foreground",children:c("vscodeWorkbench.projects.directoryList",{defaultValue:"Directories"})}),i.jsx("button",{type:"button",onClick:()=>{o()},disabled:l,className:"rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50",title:c("vscodeWorkbench.projects.refresh",{defaultValue:"Refresh projects"}),"aria-label":c("vscodeWorkbench.projects.refresh",{defaultValue:"Refresh projects"}),children:i.jsx(at,{className:xe("h-3.5 w-3.5",l&&"animate-spin")})})]}),i.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-1.5",children:e.length===0?i.jsx("div",{className:"flex h-full items-center justify-center px-4 text-center",children:i.jsxs("div",{children:[i.jsx(Fn,{className:"mx-auto mb-3 h-7 w-7 text-muted-foreground/70"}),i.jsx("div",{className:"text-sm font-medium text-foreground",children:c("vscodeWorkbench.projects.emptyTitle",{defaultValue:"No project directories yet"})}),i.jsx("p",{className:"mt-1 text-xs leading-5 text-muted-foreground",children:c("vscodeWorkbench.projects.emptyDescription",{defaultValue:"Open a local folder or clone a repository to start."})})]})}):i.jsx("div",{className:"space-y-0.5",children:e.map(d=>{const u=t?.name===d.name;return i.jsxs("div",{role:"button",tabIndex:0,className:xe("group w-full cursor-pointer rounded border px-2 py-1.5 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",u?"border-primary/40 bg-primary/10":"border-transparent hover:border-border hover:bg-muted/40"),title:$a(d),onClick:()=>n(d),onKeyDown:p=>{(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),n(d))},children:[i.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[i.jsx("span",{className:xe("h-1.5 w-1.5 shrink-0 rounded-full",u?"bg-primary":"bg-muted-foreground/30 group-hover:bg-muted-foreground/60")}),i.jsx("span",{className:"truncate text-xs font-medium text-foreground",children:d.displayName||d.name})]}),i.jsxs("div",{className:"mt-0.5 flex min-w-0 items-center justify-between gap-2 pl-3.5 text-[10px] text-muted-foreground",children:[i.jsx("span",{className:"truncate font-mono",children:wu(d)}),i.jsx("span",{className:"shrink-0",children:c6(d.fileCount,c)})]}),i.jsx("div",{className:"mt-1.5 flex justify-end opacity-0 transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100",children:i.jsx("button",{type:"button",className:"inline-flex h-6 w-6 items-center justify-center rounded border border-border text-foreground",onClick:p=>{p.stopPropagation(),n(d),r(d)},title:c("vscodeWorkbench.projects.startChat",{defaultValue:"Chat"}),"aria-label":c("vscodeWorkbench.projects.startChat",{defaultValue:"Chat"}),children:i.jsx(Er,{className:"h-3 w-3"})})})]},d.name)})})})]})}function ul({icon:e,label:t,active:n,badge:r=!1,onClick:a}){return i.jsxs("button",{type:"button",className:xe("relative flex h-10 w-10 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",n&&"bg-primary/10 text-primary"),"aria-label":t,title:t,onClick:a,children:[n&&i.jsx("span",{className:"absolute left-0 h-5 w-0.5 rounded-r bg-primary"}),i.jsx(e,{className:"h-5 w-5"}),r&&i.jsx("span",{className:"absolute right-1 top-1 h-2 w-2 rounded-full bg-amber-500 ring-2 ring-background"})]})}function yN({label:e,active:t,onPointerDown:n}){return i.jsx("button",{type:"button",role:"separator","aria-orientation":"vertical","aria-label":e,title:e,className:xe("group relative z-10 flex h-full w-2 shrink-0 cursor-col-resize items-center justify-center bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",t&&"bg-primary/5"),onPointerDown:n,children:i.jsx("span",{className:xe("h-full w-px bg-border transition-colors group-hover:bg-primary/60",t&&"bg-primary")})})}const gg="quickSettingsHandlePosition",El=50,Pie=10,Die=90,Oie=5,bg="flex items-center justify-between p-3 rounded-lg bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors border border-transparent hover:border-gray-300 dark:hover:border-gray-600",Mie=`${bg} cursor-pointer`,Fie="h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 dark:text-blue-500 focus:ring-blue-500 focus:ring-2 dark:focus:ring-blue-400 bg-gray-100 dark:bg-gray-800 checked:bg-blue-600 dark:checked:bg-blue-600",zie=[{key:"autoExpandTools",labelKey:"quickSettings.autoExpandTools",icon:Ru},{key:"showRawParameters",labelKey:"quickSettings.showRawParameters",icon:lc},{key:"showThinking",labelKey:"quickSettings.showThinking",icon:Rg}],Bie=[{key:"autoScrollToBottom",labelKey:"quickSettings.autoScrollToBottom",icon:f4}],Uie=[{key:"sendByCtrlEnter",labelKey:"quickSettings.sendByCtrlEnter",icon:C4}],p6=e=>Math.max(Pie,Math.min(Die,e)),$ie=()=>{if(typeof window>"u")return El;const e=localStorage.getItem(gg);if(!e)return El;try{const t=JSON.parse(e);if(typeof t.y=="number"&&Number.isFinite(t.y))return p6(t.y)}catch{return localStorage.removeItem(gg),El}return El},wN=e=>e.type.includes("touch"),kN=e=>"touches"in e?e.touches[0]?.clientY??null:"clientY"in e&&typeof e.clientY=="number"?e.clientY:null;function Hie({isMobile:e}){const[t,n]=m.useState($ie),[r,a]=m.useState(!1),[s,o]=m.useState(!1),l=m.useRef(null),c=m.useRef(El),d=m.useRef(!1),u=m.useRef(!1),p=m.useRef(!1),f=m.useCallback(()=>{p.current&&(document.body.style.cursor="",document.body.style.userSelect="",document.body.style.overflow="",document.body.style.position="",document.body.style.width="",p.current=!1)},[]),h=m.useCallback(w=>{p.current||(document.body.style.cursor="grabbing",document.body.style.userSelect="none",w&&(document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%"),p.current=!0)},[]),g=m.useCallback(()=>{!r&&l.current===null||(u.current=d.current,d.current=!1,l.current=null,a(!1),o(!1),f())},[f,r]),b=m.useCallback(w=>{if(!r||l.current===null)return;const k=kN(w);if(k===null)return;const S=k-l.current,C=Math.abs(S)>Oie;if(!d.current&&C&&(d.current=!0,o(!0),h(wN(w))),!d.current)return;wN(w)&&w.preventDefault();const A=Math.max(window.innerHeight,1),R=S/A*100,j=e?-R:R;n(p6(c.current+j))},[h,e,r]),x=m.useCallback(w=>{w.stopPropagation();const k=kN(w);k!==null&&(l.current=k,c.current=t,d.current=!1,o(!1),a(!0))},[t]);m.useEffect(()=>{localStorage.setItem(gg,JSON.stringify({y:t}))},[t]),m.useEffect(()=>{if(!r)return;const w=A=>{b(A)},k=()=>{g()},S=A=>{b(A)},C=()=>{g()};return document.addEventListener("mousemove",w),document.addEventListener("mouseup",k),document.addEventListener("touchmove",S,{passive:!1}),document.addEventListener("touchend",C),()=>{document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",k),document.removeEventListener("touchmove",S),document.removeEventListener("touchend",C)}},[g,b,r]),m.useEffect(()=>()=>{f()},[f]);const v=m.useCallback(()=>u.current?(u.current=!1,!0):!1,[]),y=m.useMemo(()=>!e||typeof window>"u"?{top:`${t}%`,transform:"translateY(-50%)"}:{bottom:`${window.innerHeight*t/100}px`},[t,e]);return{isDragging:s,handleStyle:y,startDrag:x,endDrag:g,consumeSuppressedClick:v}}function pl({title:e,children:t,className:n=""}){return i.jsxs("div",{className:`space-y-2 ${n}`,children:[i.jsx("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400",children:e}),t]})}function Gie({label:e,icon:t,checked:n,onCheckedChange:r}){return i.jsxs("label",{className:Mie,children:[i.jsxs("span",{className:"flex items-center gap-2 text-sm text-gray-900 dark:text-white",children:[i.jsx(t,{className:"h-4 w-4 text-gray-600 dark:text-gray-400"}),e]}),i.jsx("input",{type:"checkbox",checked:n,onChange:a=>r(a.target.checked),className:Fie})]})}const Vie=m.memo(Gie),Wie=[{value:"off",labelKey:"quickSettings.autoShowAgentDiffOff"},{value:"openOnly",labelKey:"quickSettings.autoShowAgentDiffOpenOnly"},{value:"always",labelKey:"quickSettings.autoShowAgentDiffAlways"}];function qie({isDarkMode:e,preferences:t,onPreferenceChange:n,onSelectChange:r}){const{t:a}=Me("settings"),s=o=>o.map(({key:l,labelKey:c,icon:d})=>i.jsx(Vie,{label:a(c),icon:d,checked:t[l],onCheckedChange:u=>n(l,u)},l));return i.jsxs("div",{className:"flex-1 space-y-6 overflow-y-auto overflow-x-hidden bg-background p-4",children:[i.jsxs(pl,{title:a("quickSettings.sections.appearance"),children:[i.jsxs("div",{className:bg,children:[i.jsxs("span",{className:"flex items-center gap-2 text-sm text-gray-900 dark:text-white",children:[e?i.jsx(N4,{className:"h-4 w-4 text-gray-600 dark:text-gray-400"}):i.jsx(T4,{className:"h-4 w-4 text-gray-600 dark:text-gray-400"}),a("quickSettings.darkMode")]}),i.jsx(Wd,{})]}),i.jsx(V3,{compact:!0})]}),i.jsx(pl,{title:a("quickSettings.sections.toolDisplay"),children:s(zie)}),i.jsx(pl,{title:a("quickSettings.sections.viewOptions"),children:s(Bie)}),i.jsx(pl,{title:a("quickSettings.sections.agentDiff","Agent diff"),children:i.jsxs("div",{className:`${bg} flex-wrap gap-3`,children:[i.jsx("span",{className:"text-sm text-gray-900 dark:text-white",children:a("quickSettings.autoShowAgentDiff","Show agent edits as diff")}),i.jsx(Fu,{className:"flex-wrap",children:Wie.map(({value:o,labelKey:l})=>i.jsx(zu,{isActive:t.autoShowAgentDiff===o,onClick:()=>r("autoShowAgentDiff",o),className:"whitespace-nowrap",children:a(l)},o))})]})}),i.jsxs(pl,{title:a("quickSettings.sections.inputSettings"),children:[s(Uie),i.jsx("p",{className:"ml-3 text-xs text-gray-500 dark:text-gray-400",children:a("quickSettings.sendByCtrlEnterDescription")})]})]})}function Kie({isOpen:e,isDragging:t,style:n,onClick:r,onMouseDown:a,onTouchStart:s}){const{t:o}=Me("settings"),l=e?"right-64":"right-0",c=t?"border-blue-500 dark:border-blue-400":"border-gray-200 dark:border-gray-700",d=t?"":"transition-all duration-150 ease-out",u=t?"cursor-grabbing":"cursor-pointer",p=o(t?"quickSettings.dragHandle.dragging":e?"quickSettings.dragHandle.closePanel":"quickSettings.dragHandle.openPanel"),f=o(t?"quickSettings.dragHandle.draggingStatus":"quickSettings.dragHandle.toggleAndMove");return i.jsx("button",{type:"button",onClick:r,onMouseDown:a,onTouchStart:s,className:`fixed ${l} z-50 ${d} border bg-white dark:bg-gray-800 ${c} rounded-l-md p-2 shadow-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 ${u} touch-none`,style:{...n,touchAction:"none",WebkitTouchCallout:"none",WebkitUserSelect:"none"},"aria-label":p,title:f,children:t?i.jsx(UD,{className:"h-5 w-5 text-blue-500 dark:text-blue-400"}):e?i.jsx(ua,{className:"h-5 w-5 text-gray-600 dark:text-gray-400"}):i.jsx(kg,{className:"h-5 w-5 text-gray-600 dark:text-gray-400"})})}function Yie(){const{t:e}=Me("settings");return i.jsx("div",{className:"border-b border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900",children:i.jsxs("h3",{className:"flex items-center gap-2 text-lg font-semibold text-gray-900 dark:text-white",children:[i.jsx(qh,{className:"h-5 w-5 text-gray-600 dark:text-gray-400"}),e("quickSettings.title")]})})}function Zie(){const[e,t]=m.useState(!1),{isMobile:n}=Ig({trackPWA:!1}),{isDarkMode:r}=Ga(),{preferences:a,setPreference:s}=Mu(),{isDragging:o,handleStyle:l,startDrag:c,consumeSuppressedClick:d}=Hie({isMobile:n}),u=m.useMemo(()=>({autoExpandTools:a.autoExpandTools,showRawParameters:a.showRawParameters,showThinking:a.showThinking,autoScrollToBottom:a.autoScrollToBottom,sendByCtrlEnter:a.sendByCtrlEnter,autoShowAgentDiff:a.autoShowAgentDiff}),[a.autoExpandTools,a.autoScrollToBottom,a.sendByCtrlEnter,a.showRawParameters,a.showThinking,a.autoShowAgentDiff]),p=m.useCallback((g,b)=>{s(g,b)},[s]),f=m.useCallback((g,b)=>{s(g,b)},[s]),h=m.useCallback(g=>{if(d()){g.preventDefault();return}t(b=>!b)},[d]);return m.useEffect(()=>{const g=()=>t(!0),b=()=>t(x=>!x);return window.openQuickSettings=g,window.toggleQuickSettings=b,()=>{window.openQuickSettings===g&&delete window.openQuickSettings,window.toggleQuickSettings===b&&delete window.toggleQuickSettings}},[]),i.jsxs(i.Fragment,{children:[n&&i.jsx(Kie,{isOpen:e,isDragging:o,style:l,onClick:h,onMouseDown:c,onTouchStart:c}),i.jsx("div",{className:`fixed right-0 top-0 z-40 h-full w-80 transform border-l border-border bg-background shadow-xl transition-transform duration-150 ease-out ${e?"translate-x-0":"translate-x-full"} ${n?"h-screen":""}`,children:i.jsxs("div",{className:"flex h-full flex-col",children:[i.jsx(Yie,{}),i.jsx(qie,{isDarkMode:r,preferences:u,onPreferenceChange:p,onSelectChange:f})]})}),e&&i.jsx("div",{className:"fixed inset-0 z-30 bg-background/80 backdrop-blur-sm transition-opacity duration-150 ease-out",onClick:()=>t(!1)})]})}function Xie(){const[e,t]=m.useState(new Set),[n,r]=m.useState(new Set),a=m.useCallback(d=>{d&&t(u=>new Set([...u,d]))},[]),s=m.useCallback(d=>{d&&t(u=>{const p=new Set(u);return p.delete(d),p})},[]),o=m.useCallback(d=>{d&&r(u=>new Set([...u,d]))},[]),l=m.useCallback(d=>{d&&r(u=>{const p=new Set(u);return p.delete(d),p})},[]),c=m.useCallback(d=>{d&&t(u=>{const p=new Set;for(const f of u)f.startsWith("new-session-")||p.add(f);return p.add(d),p})},[]);return{activeSessions:e,processingSessions:n,markSessionAsActive:a,markSessionAsInactive:s,markSessionAsProcessing:o,markSessionAsNotProcessing:l,replaceTemporarySession:c}}const pn=e=>JSON.stringify(e??null),SN=(e,t,n)=>e.length!==t.length?!0:t.some((r,a)=>{const s=e[a];return!s||r.name!==s.name||r.displayName!==s.displayName||r.fullPath!==s.fullPath||r.fileCount!==s.fileCount||pn(r.sessionMeta)!==pn(s.sessionMeta)||pn(r.sessions)!==pn(s.sessions)?!0:pn(r.cursorSessions)!==pn(s.cursorSessions)||pn(r.codexSessions)!==pn(s.codexSessions)||pn(r.geminiSessions)!==pn(s.geminiSessions)||pn(r.qwenSessions)!==pn(s.qwenSessions)||pn(r.opencodeSessions)!==pn(s.opencodeSessions)}),Os=(e,t)=>(e??[]).map(n=>({...n,__provider:n.__provider??t})),ku=e=>[...Os(e.sessions,"claude"),...Os(e.codexSessions,"codex"),...Os(e.cursorSessions,"cursor"),...Os(e.geminiSessions,"gemini"),...Os(e.qwenSessions,"qwen"),...Os(e.opencodeSessions,"opencode")],Jie=(e,t,n,r)=>{if(!n||!r)return!0;const a=e.find(c=>c.name===n.name),s=t.find(c=>c.name===n.name);if(!a||!s)return!1;const o=ku(a).find(c=>c.id===r.id),l=ku(s).find(c=>c.id===r.id);return!o||!l?!1:o.id===l.id&&o.title===l.title&&o.created_at===l.created_at&&o.updated_at===l.updated_at},Qie=new Set(["chat","orchestration","remote","controlRoom","files","shell","git","changes","liveView","preview"]),ese=new Set(["controlRoom"]),tse=e=>Qie.has(e)||e.startsWith("plugin:"),m6=e=>ese.has(e)?"chat":e,nse=()=>{if(typeof window<"u"&&window.location.pathname.endsWith("/orchestration"))return"orchestration";try{const e=localStorage.getItem("activeTab");if(e&&tse(e))return m6(e)}catch{}return"chat"};function rse({sessionId:e,navigate:t,latestMessage:n,isMobile:r,activeSessions:a}){const[s,o]=m.useState([]),[l,c]=m.useState(null),[d,u]=m.useState(null),[p,f]=m.useState(nse);m.useEffect(()=>{try{localStorage.setItem("activeTab",m6(p))}catch{}},[p]);const[h,g]=m.useState(!1),[b,x]=m.useState(!0),[v,y]=m.useState(null),[w,k]=m.useState(!1),[S,C]=m.useState(!1),[A,R]=m.useState("agents"),[j,E]=m.useState(0),L=m.useRef(null),T=m.useCallback(async({showLoadingState:se=!0}={})=>{try{se&&x(!0);const de=await(await At.projects()).json();o(we=>we.length===0||SN(we,de,!0)?de:we)}catch(me){console.error("Error fetching projects:",me)}finally{se&&x(!1)}},[]),I=m.useCallback(async()=>{await T({showLoadingState:!1})},[T]),N=m.useCallback((se="tools")=>{R(se),C(!0)},[]);m.useEffect(()=>{T()},[T]),m.useEffect(()=>{!b&&s.length===1&&!l&&!e&&c(s[0])},[b,s,l,e]),m.useEffect(()=>{if(!n)return;if(n.type==="loading_progress"){L.current&&(clearTimeout(L.current),L.current=null),y(n),n.phase==="complete"&&(L.current=setTimeout(()=>{y(null),L.current=null},500));return}if(n.type!=="projects_updated")return;const se=n;if(se.changedFile&&d&&l){const M=se.changedFile.replace(/\\/g,"/").split("/");M.length>=2&&M[M.length-1].replace(".jsonl","")===d.id&&(a.has(d.id)||E(U=>U+1))}const me=d&&a.has(d.id)||a.size>0&&Array.from(a).some(je=>je.startsWith("new-session-")),de=se.projects;if(me&&!Jie(s,de,l,d)||(o(de),!l))return;const we=de.find(je=>je.name===l.name);if(!we||(pn(we)!==pn(l)&&c(we),!d))return;ku(we).find(je=>je.id===d.id)||u(null)},[n,l,d,a,s]),m.useEffect(()=>()=>{L.current&&(clearTimeout(L.current),L.current=null)},[]),m.useEffect(()=>{if(!(!e||s.length===0)){for(const se of s){const me=se.sessions?.find(J=>J.id===e);if(me){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="claude";J&&c(se),te&&u({...me,__provider:"claude"});return}const de=se.cursorSessions?.find(J=>J.id===e);if(de){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="cursor";J&&c(se),te&&u({...de,__provider:"cursor"});return}const we=se.codexSessions?.find(J=>J.id===e);if(we){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="codex";J&&c(se),te&&u({...we,__provider:"codex"});return}const Ce=se.geminiSessions?.find(J=>J.id===e);if(Ce){const J=typeof Ce.id=="string"&&Ce.id.startsWith("qwen_")||Ce.provider==="qwen",H=typeof Ce.id=="string"&&Ce.id.startsWith("opencode_")||Ce.provider==="opencode"?"opencode":J?"qwen":"gemini",U=l?.name!==se.name,Q=d?.id!==e||d.__provider!==H;U&&c(se),Q&&u({...Ce,__provider:H});return}const je=se.qwenSessions?.find(J=>J.id===e);if(je){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="qwen";J&&c(se),te&&u({...je,__provider:"qwen"});return}const M=se.opencodeSessions?.find(J=>J.id===e);if(M){const J=l?.name!==se.name,te=d?.id!==e||d.__provider!=="opencode";J&&c(se),te&&u({...M,__provider:"opencode"});return}}if(e&&d?.id!==e){const se=e.startsWith("opencode_")?"opencode":e.startsWith("qwen_")?"qwen":e.startsWith("codex-")||e.startsWith("codex_")?"codex":e.startsWith("gemini_")?"gemini":null,me=(typeof window<"u"?localStorage.getItem("selected-provider"):null)||"claude";u({id:e,__provider:se||me})}}},[e,s,l?.name,d?.id,d?.__provider]);const O=m.useCallback(se=>{c(se),u(null),t("/"),r&&g(!1)},[r,t]),$=m.useCallback(se=>{u(se),(p==="preview"||p==="liveView"||p==="orchestration")&&f("chat");const me=se.__provider||localStorage.getItem("selected-provider")||"claude";if(se.__provider&&localStorage.setItem("selected-provider",se.__provider),me==="cursor"&&sessionStorage.setItem("cursorSessionId",se.id),r){const de=se.__projectName,we=l?.name;de!==we&&g(!1)}t(`/session/${se.id}`)},[p,r,t,l?.name]),F=m.useCallback(se=>{o(me=>{const de=me.findIndex(Ce=>Ce.name===se.name);if(de===-1)return[se,...me];const we=[...me];return we[de]={...we[de],...se},we}),c(se),u(null),f("chat"),t("/"),r&&g(!1)},[r,t]),q=m.useCallback(se=>{F(se)},[F]),Y=m.useCallback(async se=>{try{const me=await At.quickStartProject(),de=await me.json().catch(()=>({}));if(!me.ok||!de?.project){console.error("[quick-start] failed:",de);return}const we=de.project;if(se==="chat"){F(we);return}o(Ce=>Ce.some(je=>je.name===we.name)?Ce:[we,...Ce]),c(we),u(null),f(se),t("/"),r&&g(!1)}catch(me){console.error("[quick-start] error:",me)}},[r,t,F]),P=m.useCallback(async()=>{await Y("chat")},[Y]),B=m.useCallback(async()=>{await Y("orchestration")},[Y]),V=m.useCallback((se,me)=>{c(se),u(null),f("orchestration"),me&&localStorage.setItem("pixcode.orchestration.selectedRunId",me),t("/"),r&&g(!1)},[r,t]),z=m.useCallback(()=>{u(null),f("controlRoom"),t("/"),r&&g(!1)},[r,t]),ee=m.useCallback(se=>{d?.id===se&&(u(null),t("/")),o(me=>me.map(de=>({...de,sessions:de.sessions?.filter(we=>we.id!==se)??[],sessionMeta:{...de.sessionMeta,total:Math.max(0,(de.sessionMeta?.total??0)-1)}})))},[t,d?.id]),ae=m.useCallback(async()=>{try{const me=await(await At.projects()).json();if(o(Ce=>SN(Ce,me,!0)?me:Ce),!l)return;const de=me.find(Ce=>Ce.name===l.name);if(!de||(pn(de)!==pn(l)&&c(de),!d))return;const we=ku(de).find(Ce=>Ce.id===d.id);if(we){const Ce=we.__provider||!d.__provider?we:{...we,__provider:d.__provider};pn(Ce)!==pn(d)&&u(Ce)}}catch(se){console.error("Error refreshing sidebar:",se)}},[l,d]),ue=m.useCallback(se=>{l?.name===se&&(c(null),u(null),t("/")),o(me=>me.filter(de=>de.name!==se))},[t,l?.name]),le=m.useMemo(()=>({projects:s,selectedProject:l,selectedSession:d,onProjectSelect:O,onSessionSelect:$,onNewSession:q,onProjectCreated:F,onQuickStartSession:P,onOpenControlRoom:z,onOpenOrchestration:V,onSessionDelete:ee,onProjectDelete:ue,isLoading:b,loadingProgress:v,onRefresh:ae,onShowSettings:()=>C(!0),showSettings:S,settingsInitialTab:A,onCloseSettings:()=>C(!1),isMobile:r}),[q,z,V,F,P,ue,O,ee,$,ae,b,r,v,s,A,l,d,S]);return{projects:s,selectedProject:l,selectedSession:d,activeTab:p,sidebarOpen:h,isLoadingProjects:b,loadingProgress:v,isInputFocused:w,showSettings:S,settingsInitialTab:A,externalMessageUpdate:j,setActiveTab:f,setSidebarOpen:g,setIsInputFocused:k,setShowSettings:C,openSettings:N,fetchProjects:T,refreshProjectsSilently:I,sidebarSharedProps:le,handleProjectSelect:O,handleSessionSelect:$,handleNewSession:q,handleOpenOrchestration:V,handleQuickStartOrchestration:B,handleSessionDelete:ee,handleProjectDelete:ue,handleSidebarRefresh:ae}}function Ph(){const e=Z6(),{sessionId:t}=X6(),{t:n}=Me("common"),{isMobile:r}=Ig({trackPWA:!1}),{ws:a,sendMessage:s,latestMessage:o,isConnected:l}=L4(),c=m.useRef(!1),{activeSessions:d,processingSessions:u,markSessionAsActive:p,markSessionAsInactive:f,markSessionAsProcessing:h,markSessionAsNotProcessing:g,replaceTemporarySession:b}=Xie(),{selectedProject:x,selectedSession:v,activeTab:y,sidebarOpen:w,isLoadingProjects:k,externalMessageUpdate:S,setActiveTab:C,setSidebarOpen:A,setIsInputFocused:R,setShowSettings:j,openSettings:E,refreshProjectsSilently:L,sidebarSharedProps:T,handleQuickStartOrchestration:I}=rse({sessionId:t,navigate:e,latestMessage:o,isMobile:r,activeSessions:d});return m.useEffect(()=>(window.refreshProjects=L,()=>{window.refreshProjects===L&&delete window.refreshProjects}),[L]),m.useEffect(()=>(window.openSettings=E,()=>{window.openSettings===E&&delete window.openSettings}),[E]),m.useEffect(()=>{if(typeof navigator>"u"||!("serviceWorker"in navigator))return;const N=O=>{const $=O.data;if(!(!$||$.type!=="notification:navigate")){if(typeof $.provider=="string"&&$.provider.trim()&&localStorage.setItem("selected-provider",$.provider),C("chat"),A(!1),L(),typeof $.sessionId=="string"&&$.sessionId){e(`/session/${$.sessionId}`);return}e("/")}};return navigator.serviceWorker.addEventListener("message",N),()=>{navigator.serviceWorker.removeEventListener("message",N)}},[e,L,C,A]),m.useEffect(()=>{l&&!c.current?c.current=!0:l||(c.current=!1),l&&v?.id&&s({type:"get-pending-permissions",sessionId:v.id})},[l,v?.id,s]),m.useEffect(()=>{if(!o||o.type!=="projects_updated"&&o.type!=="project_files_updated")return;const N=o.type==="project_files_updated"?typeof o.projectName=="string"?o.projectName:null:x?.name??null;window.dispatchEvent(new CustomEvent("pixcode:file-tree-refresh",{detail:{projectName:N,changedFile:typeof o.changedFile=="string"?o.changedFile:null,oldContent:typeof o.oldContent=="string"?o.oldContent:null,currentContent:typeof o.currentContent=="string"?o.currentContent:null}}))},[o,x?.name]),m.useEffect(()=>{const N=window.visualViewport;if(!N)return;const O=()=>{const $=Math.max(0,window.innerHeight-N.height);document.documentElement.style.setProperty("--keyboard-height",`${$}px`)};return N.addEventListener("resize",O),()=>N.removeEventListener("resize",O)},[]),i.jsxs("div",{className:"fixed inset-0 flex bg-background",style:{bottom:"var(--keyboard-height, 0px)"},children:[r?i.jsxs("div",{className:`fixed inset-0 z-50 flex transition-all duration-150 ease-out ${w?"visible opacity-100":"invisible opacity-0"}`,children:[i.jsx("button",{className:"fixed inset-0 bg-background/60 backdrop-blur-sm transition-opacity duration-150 ease-out",onClick:N=>{N.stopPropagation(),A(!1)},onTouchStart:N=>{N.preventDefault(),N.stopPropagation(),A(!1)},"aria-label":n("versionUpdate.ariaLabels.closeSidebar")}),i.jsx("div",{className:`relative h-full w-[85vw] max-w-sm transform border-r border-border/40 bg-card transition-transform duration-150 ease-out sm:w-80 ${w?"translate-x-0":"-translate-x-full"}`,onClick:N=>N.stopPropagation(),onTouchStart:N=>N.stopPropagation(),children:i.jsx(J3,{...T})})]}):null,i.jsx("div",{className:"flex min-w-0 flex-1 flex-col",children:r?i.jsx(Zae,{selectedProject:x,selectedSession:v,activeTab:y,setActiveTab:C,ws:a,sendMessage:s,latestMessage:o,isMobile:r,onMenuClick:()=>A(!0),isLoading:k,onInputFocusChange:R,onSessionActive:p,onSessionInactive:f,onSessionProcessing:h,onSessionNotProcessing:g,processingSessions:u,onReplaceTemporarySession:b,onNavigateToSession:N=>e(`/session/${N}`),onShowSettings:()=>j(!0),externalMessageUpdate:S,onQuickStartSession:T.onQuickStartSession,onQuickStartOrchestration:I}):i.jsx(Sie,{sidebarProps:T,selectedProject:x,selectedSession:v,activeTab:y,setActiveTab:C,ws:a,sendMessage:s,latestMessage:o,isMobile:r,onMenuClick:()=>A(!0),isLoading:k,onInputFocusChange:R,onSessionActive:p,onSessionInactive:f,onSessionProcessing:h,onSessionNotProcessing:g,processingSessions:u,onReplaceTemporarySession:b,onNavigateToSession:N=>e(`/session/${N}`),onShowSettings:()=>j(!0),externalMessageUpdate:S,onQuickStartSession:T.onQuickStartSession,onQuickStartOrchestration:I})}),i.jsx(Zie,{}),r&&i.jsx(r6,{latestMessage:o})]})}const{slice:ase,forEach:ise}=[];function sse(e){return ise.call(ase.call(arguments,1),t=>{if(t)for(const n in t)e[n]===void 0&&(e[n]=t[n])}),e}function ose(e){return typeof e!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(n=>n.test(e))}const CN=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,lse=function(e,t){const r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},a=encodeURIComponent(t);let s=`${e}=${a}`;if(r.maxAge>0){const o=r.maxAge-0;if(Number.isNaN(o))throw new Error("maxAge should be a Number");s+=`; Max-Age=${Math.floor(o)}`}if(r.domain){if(!CN.test(r.domain))throw new TypeError("option domain is invalid");s+=`; Domain=${r.domain}`}if(r.path){if(!CN.test(r.path))throw new TypeError("option path is invalid");s+=`; Path=${r.path}`}if(r.expires){if(typeof r.expires.toUTCString!="function")throw new TypeError("option expires is invalid");s+=`; Expires=${r.expires.toUTCString()}`}if(r.httpOnly&&(s+="; HttpOnly"),r.secure&&(s+="; Secure"),r.sameSite)switch(typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return r.partitioned&&(s+="; Partitioned"),s},NN={create(e,t,n,r){let a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};n&&(a.expires=new Date,a.expires.setTime(a.expires.getTime()+n*60*1e3)),r&&(a.domain=r),document.cookie=lse(e,t,a)},read(e){const t=`${e}=`,n=document.cookie.split(";");for(let r=0;r<n.length;r++){let a=n[r];for(;a.charAt(0)===" ";)a=a.substring(1,a.length);if(a.indexOf(t)===0)return a.substring(t.length,a.length)}return null},remove(e,t){this.create(e,"",-1,t)}};var cse={name:"cookie",lookup(e){let{lookupCookie:t}=e;if(t&&typeof document<"u")return NN.read(t)||void 0},cacheUserLanguage(e,t){let{lookupCookie:n,cookieMinutes:r,cookieDomain:a,cookieOptions:s}=t;n&&typeof document<"u"&&NN.create(n,e,r,a,s)}},dse={name:"querystring",lookup(e){let{lookupQuerystring:t}=e,n;if(typeof window<"u"){let{search:r}=window.location;!window.location.search&&window.location.hash?.indexOf("?")>-1&&(r=window.location.hash.substring(window.location.hash.indexOf("?")));const s=r.substring(1).split("&");for(let o=0;o<s.length;o++){const l=s[o].indexOf("=");l>0&&s[o].substring(0,l)===t&&(n=s[o].substring(l+1))}}return n}},use={name:"hash",lookup(e){let{lookupHash:t,lookupFromHashIndex:n}=e,r;if(typeof window<"u"){const{hash:a}=window.location;if(a&&a.length>2){const s=a.substring(1);if(t){const o=s.split("&");for(let l=0;l<o.length;l++){const c=o[l].indexOf("=");c>0&&o[l].substring(0,c)===t&&(r=o[l].substring(c+1))}}if(r)return r;if(!r&&n>-1){const o=a.match(/\/([a-zA-Z-]*)/g);return Array.isArray(o)?o[typeof n=="number"?n:0]?.replace("/",""):void 0}}}return r}};let Ms=null;const EN=()=>{if(Ms!==null)return Ms;try{if(Ms=typeof window<"u"&&window.localStorage!==null,!Ms)return!1;const e="i18next.translate.boo";window.localStorage.setItem(e,"foo"),window.localStorage.removeItem(e)}catch{Ms=!1}return Ms};var pse={name:"localStorage",lookup(e){let{lookupLocalStorage:t}=e;if(t&&EN())return window.localStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupLocalStorage:n}=t;n&&EN()&&window.localStorage.setItem(n,e)}};let Fs=null;const TN=()=>{if(Fs!==null)return Fs;try{if(Fs=typeof window<"u"&&window.sessionStorage!==null,!Fs)return!1;const e="i18next.translate.boo";window.sessionStorage.setItem(e,"foo"),window.sessionStorage.removeItem(e)}catch{Fs=!1}return Fs};var mse={name:"sessionStorage",lookup(e){let{lookupSessionStorage:t}=e;if(t&&TN())return window.sessionStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupSessionStorage:n}=t;n&&TN()&&window.sessionStorage.setItem(n,e)}},hse={name:"navigator",lookup(e){const t=[];if(typeof navigator<"u"){const{languages:n,userLanguage:r,language:a}=navigator;if(n)for(let s=0;s<n.length;s++)t.push(n[s]);r&&t.push(r),a&&t.push(a)}return t.length>0?t:void 0}},fse={name:"htmlTag",lookup(e){let{htmlTag:t}=e,n;const r=t||(typeof document<"u"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(n=r.getAttribute("lang")),n}},gse={name:"path",lookup(e){let{lookupFromPathIndex:t}=e;if(typeof window>"u")return;const n=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(n)?n[typeof t=="number"?t:0]?.replace("/",""):void 0}},bse={name:"subdomain",lookup(e){let{lookupFromSubdomainIndex:t}=e;const n=typeof t=="number"?t+1:1,r=typeof window<"u"&&window.location?.hostname?.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(r)return r[n]}};let h6=!1;try{document.cookie,h6=!0}catch{}const f6=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];h6||f6.splice(1,1);const xse=()=>({order:f6,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:e=>e});class g6{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(t,n)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=t,this.options=sse(n,this.options||{},xse()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=a=>a.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=r,this.addDetector(cse),this.addDetector(dse),this.addDetector(pse),this.addDetector(mse),this.addDetector(hse),this.addDetector(fse),this.addDetector(gse),this.addDetector(bse),this.addDetector(use)}addDetector(t){return this.detectors[t.name]=t,this}detect(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,n=[];return t.forEach(r=>{if(this.detectors[r]){let a=this.detectors[r].lookup(this.options);a&&typeof a=="string"&&(a=[a]),a&&(n=n.concat(a))}}),n=n.filter(r=>r!=null&&!ose(r)).map(r=>this.options.convertDetectedLanguage(r)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?n:n.length>0?n[0]:null}cacheUserLanguage(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;n&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(t)>-1||n.forEach(r=>{this.detectors[r]&&this.detectors[r].cacheUserLanguage(t,this.options)}))}}g6.type="languageDetector";const vse={save:"Save",cancel:"Cancel",delete:"Delete",create:"Create",edit:"Edit",close:"Close",confirm:"Confirm",submit:"Submit",retry:"Retry",refresh:"Refresh",search:"Search",clear:"Clear",copy:"Copy",download:"Download",upload:"Upload",browse:"Browse"},yse={chat:"Chat",shell:"Shell",files:"Files",git:"Source Control",changes:"Changes",liveView:"Live View",tasks:"Tasks",remote:"Remote",controlRoom:"Control",orchestration:"Orchestration"},wse={loading:"Loading...",success:"Success",error:"Error",failed:"Failed",pending:"Pending",completed:"Completed",inProgress:"In Progress"},kse={savedSuccessfully:"Saved successfully",deletedSuccessfully:"Deleted successfully",updatedSuccessfully:"Updated successfully",operationFailed:"Operation failed",networkError:"Network error. Please check your connection.",unauthorized:"Unauthorized. Please log in.",notFound:"Not found",invalidInput:"Invalid input",requiredField:"This field is required",unknownError:"An unknown error occurred"},Sse={settings:"Settings",home:"Home",back:"Back",next:"Next",previous:"Previous",logout:"Logout"},Cse={language:"Language",theme:"Theme",darkMode:"Dark Mode",lightMode:"Light Mode",name:"Name",description:"Description",enabled:"Enabled",disabled:"Disabled",optional:"Optional",version:"Version",select:"Select",selectAll:"Select All",deselectAll:"Deselect All"},Nse={justNow:"Just now",minutesAgo:"{{count}} mins ago",hoursAgo:"{{count}} hours ago",daysAgo:"{{count}} days ago",yesterday:"Yesterday"},Ese={newFile:"New File",newFolder:"New Folder",rename:"Rename",move:"Move",copyPath:"Copy Path",openInEditor:"Open in Editor"},Tse={loading:"Loading Pixcode",settingUpWorkspace:"Setting up your workspace...",chooseProject:"Choose Your Project",selectProjectDescription:"Select a project from the sidebar to start coding with Claude. Each project contains your chat sessions and file history.",tip:"Tip",createProjectMobile:"Tap the menu button above to access projects",createProjectDesktop:"Create a new project by clicking the folder icon in the sidebar",newSession:"New Session",untitledSession:"Untitled Session",projectFiles:"Project Files",landing:{title:"Start a Pixcode workspace",description:"Choose a project, start a new chat, or launch Orchestration with one goal. Orchestration manages the CLI agents you select, shows every step, and surfaces errors directly.",startOrchestration:"Start Orchestration",startOrchestrationDescription:"Creates an automatic project and opens the Orchestration screen with agent control and run history.",startChat:"Start a new chat",startChatDescription:"Creates a folder automatically and opens the normal chat screen with one agent.",sidebarHint:"When you select an existing project from the sidebar, chat history, files, git status, tasks, and orchestration stay in the same main screen.",createProject:"Create New Project",createProjectDescription:"Add an existing workspace or create a folder, then open the provider picker for coding."}},Ase={title:"Orchestration",subtitle:"Pixcode can coordinate local checks, tests, terminal work, and project operations for {{project}}.",refresh:"Refresh",goal:"Goal",goalPlaceholder:"Example: Fix the auth screen for single-port deployment, capture errors, and verify with lint and typecheck.",mode:"Run mode",systemPlan:"System plan",noMode:"No mode selected",loadingPlan:"Loading agent plan.",start:"Start team",starting:"Starting",stop:"Stop team",stopping:"Stopping",cancelFailed:"Workflow could not be stopped.",linkedTask:"Linked task",replayRun:"Replay",replaying:"Replaying",approveReplay:"Approve replay",replayApprovalRequired:"Replay needs approval before repeating a step with prior shell, network, or file-write activity.",replayFailed:"Workflow replay could not start.",needAgent:"Enable at least one CLI worker.",needRoles:"Assign at least one enabled agent to these role(s) for this mode: {{roles}}.",startFailed:"Workflow could not start.",quickPrompts:{label:"Quick prompt:",liveTrading:{label:"8024 live trading screen",prompt:"Hi, please create a small project and then run it on port 8024. I want a Binance FAPI-connected TradingView-style design with a TradingView chart and a star/favorites system on the left. Split the work logically and manage the process automatically."}},cliControl:"CLI team control",enabledCount:"{{count}} enabled",enabled:"Enabled",disabled:"Disabled",history:"History",emptyHistory:"No runs yet. Write a goal and start the agents.",steps:"{{done}}/{{total}} steps",notSelected:"No run selected",notSelectedDescription:"Select a previous run or start a new goal. Agent messages, errors, change summaries, and preview outputs appear here.",loadFailed:"Run details could not be loaded.",loadingRun:"Loading run...",traceTimeline:"Trace timeline",traceFilters:"Filters",traceAll:"All",traceActor:"Actor",traceProvider:"Provider",traceType:"Type",traceSeverity:"Severity",traceDuration:"{{duration}} elapsed",traceEmpty:"No trace events match the current filters.",traceLoadFailed:"Trace timeline could not be loaded.",traceTypes:{run:"Run",node:"Step",provider:"Provider",message:"Message",artifact:"Artifact",file:"File edit",permission_policy:"Permission policy",error:"Error"},traceSeverityLevels:{info:"Info",warning:"Warning",error:"Error"},teamHistory:"Team history",permissionApprovalsPending:"{{count}} permission approval pending",agentSteps:"Agent steps",changeSummary:"Change summary",noChangeSummary:"The final summary is not ready yet. A readable Markdown summary appears here when the agents finish.",prepareTeamFromReport:"Prepare agent team from this report",prepareTeamTitle:"Prepare agent team prompt",prepareTeamDescription:"The debate output was turned into a new Agent Team prompt. Edit it, then move it into Agent Team mode.",usePreparedPrompt:"Use prompt",reportToPromptPrefix:"Prepare and execute an agent team from the following debate/decision report. Split the needs into tasks, propose sensible assignments for the available CLI agents, and start only after user confirmation.",generatedSummaryTitle:"Automatic run summary",summaryStatus:"Overall status",summarySteps:"Completed steps",summaryFailures:"Failed steps",summaryCanceled:"Canceled steps",summaryDiffs:"Diff/change outputs",summaryPreviews:"Preview outputs",summaryErrorPrefix:"Error",assignedWork:"Assigned work",autoAssigned:"Automatic / coordinator decides",noStepOutput:"No step output.",agentMessages:"Agent messages",noAgentMessages:"This agent has not produced a message yet. If the run failed, the real CLI error appears above.",outputs:"Outputs",noOutputs:"No change summary, preview, or command output yet.",open:"Open",artifact:{fileDiff:"Change summary",previewUrl:"Preview",commandOutput:"Command output",handoff:"Handoff artifact"},role:{user:"User",agent:"Agent"},status:{queued:"Queued",running:"Running",completed:"Completed",failed:"Failed",canceled:"Canceled",skipped:"Skipped"},nodes:{codex_review:"Codex review",gemini_review:"Gemini review",claude_review:"Claude review",claude_code_review:"Claude review",cursor_review:"Cursor review",aggregate:"Aggregate",architect:"Planning",implement:"Implementation",review:"Review",proposal:"Proposal",critique:"Critique",response:"Response",judge:"Decision",coordinator:"Coordinator",final_report:"Final report"},stages:{coordinator:"Coordinator",handoff:"Handoff",backend:"Backend",frontend:"Frontend",implementation:"Implementation",review:"Review",repair:"Repair",proposal:"Proposal",critique:"Critique",response:"Response",decision:"Decision",report:"Report",fallback:"Fallback",final_report:"Final report"},workflows:{multi_model_review:{name:"Multi-model review",description:"Enabled CLI agents review the same goal separately, then one enabled agent aggregates the result."},sequential_handoff:{name:"Sequential handoff",description:"Agents plan, implement, and review in order. Disabled CLI steps are skipped."},adversarial_debate:{name:"Decision debate",description:"Agents propose, critique, respond, and produce a final recommendation."},agent_team:{name:"Agent team",description:"A coordinator reads the goal and active CLI instances, assigns work, then collects the result."}},adapters:{"claude-code":{label:"Claude Code",role:"CLI worker"},cursor:{label:"Cursor",role:"CLI worker"},codex:{label:"Codex",role:"CLI worker"},gemini:{label:"Gemini",role:"CLI worker"},qwen:{label:"Qwen Code",role:"CLI worker"},opencode:{label:"OpenCode",role:"CLI worker"}},activeCount:"{{active}}/{{total}} active",teamHint:"Each row is one CLI worker. You can create multiple Claude, Codex, Cursor, Gemini, Qwen, or OpenCode workers and give each a different assignment.",parallelLimit:"Parallel limit",fallbackAgent:"Fallback CLI",noFallbackAgent:"No automatic fallback",fallbackAgentHint:"If a CLI step fails, Pixcode retries that step with this backup agent.",agentRole:"Stage",agentModel:"Model",agentRoles:{auto:"Auto",backend:"Backend",frontend:"Frontend",review:"Test / review",implementation:"Implementation",proposal:"Proposal",critique:"Critique",response:"Response",decision:"Decision / report",report:"Report",custom:"Custom"},customRolePlaceholder:"Example: Security, Mobile UX, DB architecture",roleHints:{default:"Leave empty and the coordinator assigns this agent from the goal.",agent_team:"Pick backend, frontend, or review stages, or leave agents on auto.",multi_model_review:"Enabled agents review; if a report role is selected, that agent aggregates the final summary.",sequential_handoff:"Agents run in your selected order; assignment text defines each step.",adversarial_debate:"Stage selection is optional in decision debate; if left empty, the system assigns selected agents to Proposal, Critique, and Response in order."},addAgent:"Add {{agent}}",soloAgent:"Run only with {{agent}}",soloAgentShort:"Solo",duplicateAgent:"Duplicate {{agent}}",removeAgent:"Remove {{agent}}",assignment:"Assignment",assignmentPlaceholder:"Optional: tell this worker exactly what to handle. Leave empty for coordinator assignment.",agentInstance:"{{name}} #{{number}}",taskTitle:"Task",taskTitlePlaceholder:"Implement feature",taskDescription:"Description",taskDescriptionPlaceholder:"Scope, constraints, expected output",addTask:"Add",runTask:"Run",cancelTask:"Cancel",dispatchTask:"Dispatch task",adapter:"Adapter",isolation:"Isolation",dispatch:"Dispatch",auto:"Auto",cliSettings:"CLI settings",waitingForStream:"Waiting for stream...",workflow:"Workflow",templates:"Templates",noTemplate:"No template",templateHint:"Pick a starter template to fill the workflow, agent roles, and acceptance criteria before launch.",input:"Input",taskStates:{todo:"To Do",in_progress:"In Progress",in_review:"In Review",done:"Done",failed:"Failed",canceled:"Canceled"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},workspaceTarget:"Target workspace",workspaceTargets:{selectedProject:"Selected project",pixcodeApp:"Pixcode system",custom:"Custom path"},customWorkspacePlaceholder:"/path/to/project",workspaceTargetHint:"Agents will run in: {{path}}",autoDetect:"auto-detect",needWorkspacePath:"Enter a custom workspace path.",quickWorkspaceCheck:"Workspace check"},jse={loading:"Loading files...",files:"Files",simpleView:"Simple view",compactView:"Compact view",detailedView:"Detailed view",searchPlaceholder:"Search files and folders...",clearSearch:"Clear search",name:"Name",size:"Size",modified:"Modified",permissions:"Permissions",noFilesFound:"No files found",checkProjectPath:"Check if the project path is accessible",noMatchesFound:"No matches found",tryDifferentSearch:"Try a different search term or clear the search",justNow:"just now",minAgo:"{{count}} min ago",hoursAgo:"{{count}} hours ago",daysAgo:"{{count}} days ago",newFile:"New File (Cmd+N)",newFolder:"New Folder (Cmd+Shift+N)",refresh:"Refresh",collapseAll:"Collapse All",context:{rename:"Rename",delete:"Delete",copyPath:"Copy Path",download:"Download",newFile:"New File",newFolder:"New Folder",refresh:"Refresh",menuLabel:"File context menu",loading:"Loading..."}},Rse={title:"Create New Project",steps:{type:"Type",configure:"Configure",confirm:"Confirm"},step1:{question:"Do you already have a workspace, or would you like to create a new one?",existing:{title:"Existing Workspace",description:"I already have a workspace on my server and just need to add it to the project list"},new:{title:"New Workspace",description:"Create a new workspace, optionally clone from a GitHub repository"},githubClone:{title:"Clone from GitHub",description:"Pick a target folder and clone a repository into it"},subfolder:{title:"Create Subfolder",description:"Pick a parent folder and create a fresh subfolder inside it"}},step2:{existingPath:"Workspace Path",newPath:"Workspace Path",subfolderParentPath:"Parent Folder",subfolderParentHelp:"Path to the folder where the new subfolder will be created",subfolderName:"Subfolder Name",subfolderNameHelp:"A new folder with this name will be created inside the parent above",existingPlaceholder:"/path/to/existing/workspace",newPlaceholder:"/path/to/new/workspace",existingHelp:"Full path to your existing workspace directory",newHelp:"Full path to your workspace directory",githubUrl:"GitHub URL (Optional)",githubPlaceholder:"https://github.com/username/repository",githubHelp:"Optional: provide a GitHub URL to clone a repository",githubAuth:"GitHub Authentication (Optional)",githubAuthHelp:"Only required for private repositories. Public repos can be cloned without authentication.",loadingTokens:"Loading stored tokens...",storedToken:"Stored Token",newToken:"New Token",nonePublic:"None (Public)",selectToken:"Select Token",selectTokenPlaceholder:"-- Select a token --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"This token will be used only for this operation",publicRepoInfo:"Public repositories don't require authentication. You can skip providing a token if cloning a public repo.",noTokensHelp:"No stored tokens available. You can add tokens in Settings → API Keys for easier reuse.",optionalTokenPublic:"GitHub Token (Optional for Public Repos)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (leave empty for public repos)"},step3:{reviewConfig:"Review Your Configuration",workspaceType:"Workspace Type:",existingWorkspace:"Existing Workspace",newWorkspace:"New Workspace",subfolderWorkspace:"New Subfolder",path:"Path:",parentPath:"Parent Path:",subfolderName:"Subfolder Name:",cloneFrom:"Clone From:",authentication:"Authentication:",usingStoredToken:"Using stored token:",usingProvidedToken:"Using provided token",noAuthentication:"No authentication",sshKey:"SSH Key",existingInfo:"The workspace will be added to your project list and will be available for Claude/Cursor sessions.",newWithClone:"The repository will be cloned from this folder.",newEmpty:"The workspace will be added to your project list and will be available for Claude/Cursor sessions.",subfolderInfo:"A new subfolder will be created inside the parent folder and added to your project list.",cloningRepository:"Cloning repository..."},buttons:{cancel:"Cancel",back:"Back",next:"Next",createProject:"Create Project",creating:"Creating...",cloning:"Cloning..."},errors:{selectType:"Please select whether you have an existing workspace or want to create a new one",providePath:"Please provide a workspace path",provideSubfolderName:"Please provide a name for the subfolder",subfolderNameInvalid:"Subfolder name cannot contain path separators or be . / ..",failedToCreate:"Failed to create workspace",failedToCreateFolder:"Failed to create folder"}},Ise={genericTool:"a tool",codes:{generic:{info:{title:"Notification"}},permission:{required:{title:"Action Required",body:"{{toolName}} is waiting for your decision."}},run:{stopped:{title:"Run Stopped",body:"Reason: {{reason}}"},failed:{title:"Run Failed"}},agent:{notification:{title:"Agent Notification"}}},open:"Open notifications",title:"Notifications",markRead:"Read",close:"Close notifications",dismiss:"Dismiss notification"},_se={title:"Update Available",newVersionReady:"A new version is ready",currentVersion:"Current Version",latestVersion:"Latest Version",latestRelease:"Latest Release",releaseNotesTitle:"Release Notes",releaseNotesSubtitle:"Latest Pixcode changes",whatsNew:"What's New:",viewFullRelease:"View full release",updateProgress:"Update Progress:",manualUpgrade:"Manual upgrade:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:'Or click "Update Now" to run the update automatically.',updateCompleted:"Update completed successfully!",restartServer:"Please restart the server to apply changes.",updateFailed:"Update failed",buttons:{close:"Close",later:"Later",copyCommand:"Copy Command",updateNow:"Update Now",updating:"Updating..."},ariaLabels:{closeModal:"Close version upgrade modal",showSidebar:"Show sidebar",settings:"Settings",updateAvailable:"Update available",closeSidebar:"Close sidebar"}},Lse={title:"Live View",subtitle:"Run this project locally and share it through the active secure tunnel when one is running.",start:"Start",restart:"Restart",stop:"Stop",runnerError:"Runner error",runnerUnavailable:"Runner unavailable",managedRuntimePreparing:"Pixcode will prepare the runtime",managedRuntimeDescription:"Press Start and Pixcode will prepare the required local runtime automatically.",preparingRuntime:"Preparing runtime…",preparingRuntimeDescription:"Pixcode is downloading and installing the runtime locally. This can take a moment on first use.",runnerErrorFallback:"The runner stopped before the preview became available.",detecting:"Detecting project runner…",noRunner:"No runner detected",staticHint:"Static HTML will be served directly when index.html exists.",customCommand:"Custom command",custom:"Custom",customPlaceholder:"npm run dev, python app.py, go run .",environment:"Environment",environmentLocalProcess:"Local process",environmentStatic:"Static files",environmentUnavailable:"Unavailable",statusLabel:"Status",framework:"Framework",command:"Command",upstream:"Upstream",publicTunnel:"Public tunnel",tunnelActive:"Tunnel active",tunnelLocalOnly:"Local only",diagnostics:"Diagnostics",viewport:"Viewport",viewportDesktop:"Desktop",viewportTablet:"Tablet",viewportMobile:"Mobile",viewportWidth:"Width",viewportHeight:"Height",controls:"Runner, viewport and logs",shareLink:"Share link",starting:"Starting",openExternal:"Open externally",externalActive:"Secure tunnel is active; this link can be shared outside your network.",localOnly:"External Access is off; this link is local to this Pixcode server.",frameTitle:"Project Live View",emptyTitle:"Start Live View",emptyDescription:"Pixcode will detect the project stack, start the local web server, and expose it here."},Pse=JSON.parse('{"title":"Control room","subtitle":"Production, platform, admin, audit, and self-hosted access for {{target}}","thisServer":"this server","refresh":"Refresh","nav":{"overview":"Overview","production":"Production","admin":"Admin","team":"Team","secrets":"Secrets","marketplace":"Marketplace","eval":"Evaluations","usage":"Usage","security":"Security","access":"Access"},"overview":{"title":"v1.46 launch surface","description":"Every box below is backed by a v1.44-v1.45 API and is now visible from the UI.","latestAuditEvents":"Latest audit events","remoteAccessOptions":"Remote access options"},"metrics":{"issueRuns":"Issue-to-PR runs","reviewItems":"Review items","subUsers":"Sub-users","collaborators":"Collaborators","secrets":"Scoped secrets","marketplace":"Marketplace","evalRuns":"Eval runs","securityAudits":"Security audits","attention":"Attention","running":"Running","needsAttention":"Needs attention","runningNow":"Running now","reviews":"Reviews","checkpoints":"Checkpoints","roles":"Roles","auditEvents":"Audit events","scopedSecrets":"Scoped secrets","auditRuns":"Audit runs","findings":"Findings","usageRows":"Usage rows","evalSuites":"Eval suites"},"sections":{"production":{"title":"Production loop","description":"Start issue-to-PR runs, parse CI failures, review changes, schedule background jobs, and create checkpoints."},"admin":{"title":"Admin system","description":"Create sub-users, disable accounts, and inspect activity for a single self-hosted Pixcode server."},"team":{"title":"Project collaborators","description":"Assign partners, workers, reviewers, and viewers per project without making everyone a global admin."},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"Self-hosted access","description":"Use Tailscale when there is no fixed domain, or configure Cloudflare Tunnel/custom domain for a stable public URL."}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Create sub-user","rolePermissions":"Role permissions","addCollaborator":"Add collaborator","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Remote access setup"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Queue run","parseFailure":"Parse failure","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Create user","disable":"Disable","enable":"Enable","addCollaborator":"Add collaborator","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Save access path","checkUrl":"Check URL","checkTailscale":"Check Tailscale"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"How collaborators get access","stepUsers":"Create a sub-user","stepUsersDescription":"Create the person in Admin system with a global role such as member, viewer, project_worker, or project_partner.","stepRole":"Assign project role","stepRoleDescription":"Add the same user as a project collaborator so they only see and operate on the projects you choose.","stepLink":"Share an access path","stepLinkDescription":"Give them the Tailscale, Cloudflare Tunnel, custom domain, or LAN URL configured in Self-hosted access.","paths":"Available access links"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operations","description":"Runs, reviews, approvals, scheduler, checkpoints"},"people":{"label":"People","description":"Admins, collaborators, roles, activity"},"access":{"label":"Access","description":"LAN, Tailscale, tunnel, domain guidance"},"security":{"label":"Security","description":"Secrets, permission risk, audit checks"},"insights":{"label":"Insights","description":"Usage, evaluations, marketplace health"}},"context":{"title":"What this means","recommendedNextStep":"Recommended next step","runTimeline":"Run timeline","runTimelineDescription":"Readable activity feed for agents, reviewers, checkpoints, and audit events.","emptyTimelineTitle":"No run timeline yet","emptyTimelineDescription":"Run activity appears here after issue runs, reviews, checkpoints, or audit events are recorded.","serverSignal":"Server signal","serverSignalDescription":"The first screen avoids raw backend sections and shows only current status."},"operations":{"runTimeline":"Run timeline","runTimelineDescription":"Readable actor, action, and result history without raw JSON.","noActivityTitle":"No activity yet","noActivityDescription":"Issue runs, review decisions, checkpoints, and audit events will appear here as a vertical timeline.","actionQueue":"Action queue","actionQueueDescription":"Review items are shown as mobile-friendly rows instead of a cramped table.","noReviewItemsTitle":"No review items","noReviewItemsDescription":"Create a review item when changed files need an accept/fix decision.","reviewRequested":"Review requested","changedFiles":"{{count}} changed files","accept":"Accept"},"people":{"projectCollaborators":"Project collaborators","projectCollaboratorsDescription":"Project partners and workers are not global admins. They get scoped access to assigned projects.","noCollaboratorsTitle":"No collaborators yet","noCollaboratorsDescription":"Create a sub-user first, then assign that person to a project role.","project":"Project","roleScoped":"role scoped","auditLog":"Audit log","auditLogDescription":"Search what sub-users, project partners, and workers changed without opening a raw database view.","searchAudit":"Search actor, action, project, or detail","noAuditMatchTitle":"No audit events match","noAuditMatchDescription":"User and project access activity appears here after actions are recorded.","system":"system","auditEvent":"Audit event","advancedTitle":"Advanced people management","advancedDescription":"Create users and assign project roles only when needed."},"access":{"openSettings":"Open Settings > Access","lanTitle":"LAN and local","lanDescription":"Use when the browser is on the same machine or network. Start here before private or public tunnels.","tailscaleTitle":"Tailscale private access","tailscaleDescription":"Best when a team needs private access without exposing Pixcode publicly. The UI should guide install, login, and URL sharing.","cloudflareTitle":"Cloudflare or custom domain","cloudflareDescription":"Best when users need a stable HTTPS URL. Configure the tunnel/domain once and share it with assigned users.","howUsersConnect":"How users connect","howUsersConnectDescription":"This keeps Access understandable for non-technical users.","stepUserTitle":"Create the user","stepUserDescription":"Add them in People so the server knows who they are.","stepRoleTitle":"Assign project role","stepRoleDescription":"Give them project access{{projectSuffix}}.","stepUrlTitle":"Share one URL","stepUrlDescription":"Use a LAN, Tailscale, Cloudflare Tunnel, or custom domain URL from Settings > Access."},"security":{"secretVault":"Secret vault","secretVaultDescription":"Rows show scope, target, and redacted env names. Values stay hidden.","noSecretsTitle":"No secrets stored","noSecretsDescription":"Store provider, project, workflow, Telegram, or API env values from the advanced form.","global":"global","advancedTitle":"Advanced security actions","advancedDescription":"Store scoped env values or queue audit checks."},"insights":{"usageSummary":"Usage summary","usageSummaryDescription":"Provider metrics are stacked as cards on mobile instead of forcing a wide table.","noUsageTitle":"No usage events yet","noUsageDescription":"Usage appears after provider or workflow events are recorded.","provider":"provider","usageRowDescription":"{{tokens}} tokens - {{cost}} - {{latency}}ms avg","errorRate":"{{rate}}% errors","marketplaceHealth":"Marketplace health","marketplaceHealthDescription":"MCP servers, workflow templates, provider adapters, and notification channels stay visible without crowding the overview.","noMarketplaceTitle":"No marketplace entries","noMarketplaceDescription":"Register entries only when a plugin or workflow template is ready to install.","noSourceConfigured":"No source configured","unknown":"unknown","advancedTitle":"Advanced insight actions","advancedDescription":"Record usage, create evaluation suites, or register marketplace entries."},"recommendations":{"attention":"Open Operations first. Clear reviews, errors, failed evals, or security findings before starting new work.","access":"Open Settings > Access and save the one URL your users should use. Then assign project roles in People.","people":"Create sub-users first, assign project roles second, then share an access path.","security":"Store secrets with the smallest scope that works, then run a permission or secret scan.","insights":"Compare provider cost, latency, and eval pass rate before changing model defaults.","operations":"Review Running now and the timeline. If nothing needs attention, start the next issue-to-PR or scheduled job."}}'),Dse={title:"VS Code Workbench",noProject:"No project selected",activity:{explorer:"Explorer",projects:"Projects",sourceControl:"Source Control",terminal:"Terminal",showPanel:"Show left panel",hidePanel:"Hide left panel"},panels:{explorer:"Explorer",projects:"Projects",sourceControl:"Source Control",terminal:"Terminal",editor:"Editor",cli:"CLI",rightTerminal:"Terminal"},editor:{emptyTitle:"Open a file from Explorer",closeTab:"Close {{file}}",scrollLeft:"Scroll tabs left",scrollRight:"Scroll tabs right",moreActions:"More tab actions",closeSplit:"Close split editor",context:{close:"Close",closeAll:"Close All",copyPath:"Copy Path",splitRight:"Split Right",splitMoveRight:"Split and Move Right"}},resize:{left:"Resize left panel",right:"Resize CLI panel"},menu:{openProject:"Open Project...",cloneFromGithub:"Clone Repository...",newChat:"New Chat",openProjects:"Open Projects"},menuBar:{file:"File",edit:"Edit",selection:"Selection",view:"View",go:"Go",run:"Run",terminal:"Terminal",help:"Help",openSettingsPanel:"Open settings panel"},projects:{openProject:"Open Project",cloneFromGithub:"Clone",directoryList:"Directories",refresh:"Refresh projects",emptyTitle:"No project directories yet",emptyDescription:"Open a local folder or clone a repository to start.",selected:"Selected",startChat:"Chat",fileCount:"{{formattedCount}} files",fileCountPending:"Files pending",startTitle:"Start a Pixcode workspace",startDescription:"Pick a folder and Pixcode will bind the explorer, terminal, and chat history to that workspace.",workHere:"Work in this folder"},workspace:{empty:"Open a project to create Workspace 1.",openFirst:"Open a workspace",add:"Add workspace",scrollLeft:"Scroll workspaces left",scrollRight:"Scroll workspaces right",close:"Close {{name}}",closeAction:"Close workspace",closeOthers:"Close others",closeAll:"Close all",rename:"Rename",star:"Star",unstar:"Unstar",toggleStar:"Star {{name}}",moreActions:"Workspace actions"},cli:{projectScoped:"Project-scoped CLI terminal",chooseTitle:"Start a CLI terminal",chooseDescription:"Choose a CLI, then start a full-height terminal.",startSelected:"Start {{provider}}",newSession:"New CLI session",plainTerminal:"Terminal",newPlainTerminal:"New terminal",checking:"Checking...",ready:"Ready",notInstalled:"Not installed",installing:"Installing...",updateAvailable:"Update {{version}}",installProvider:"Install {{provider}}",updateProvider:"Update {{provider}}",manualInstall:"This CLI needs manual installation.",installNoJob:"Install did not return a job id.",installFailed:"Install failed.",installStreamLost:"Install stream closed early. The install may still be running.",provider:"Provider",installRunning:"is installing",installDone:"is ready",installError:"needs attention",showPanel:"Show CLI panel",hidePanel:"Hide CLI panel",close:"Close terminal"},terminal:{title:"Terminal",close:"Close terminal"}},Ose={title:"Remote console",notSynced:"Not synced",refresh:"Refresh",runId:"Run {{id}}",metrics:{projects:"Projects",activeRuns:"Active runs",approvalQueue:"Approval queue",webhooks:"Webhooks"},sections:{projects:"Multi-project control room",approvals:"Approval queue",webhooks:"Webhook health"},badges:{active:"{{count}} active",approvals:"{{count}} approvals"},projectStats:{sessions:"{{count}} sessions",failedRuns:"{{count}} failed runs",recentRuns:"{{count}} recent runs"},actions:{allow:"Allow",deny:"Deny"},webhook:{on:"on",off:"off",ok:"ok",failed:"failed",noDelivery:"No delivery yet"},empty:{projects:"No projects available.",approvals:"No pending approvals.",webhooks:"No webhooks configured."}},Mse={buttons:vse,tabs:yse,status:wse,messages:kse,navigation:Sse,common:Cse,time:Nse,fileOperations:Ese,mainContent:Tse,orchestration:Ase,fileTree:jse,projectWizard:Rse,notifications:Ise,versionUpdate:_se,liveView:Lse,controlRoom:Pse,vscodeWorkbench:Dse,remoteConsole:Ose},Fse="Settings",zse={account:"Account",permissions:"Permissions",mcpServers:"MCP Servers",pluginsMcp:"Plugins / MCP",configuration:"Configuration",appearance:"Appearance"},Bse={title:"Account",language:"Language",languageLabel:"Display Language",languageDescription:"Choose your preferred language for the interface",username:"Username",email:"Email",profile:"Profile",changePassword:"Change Password"},Use={title:"MCP Servers",addServer:"Add Server",editServer:"Edit Server",deleteServer:"Delete Server",serverName:"Server Name",serverType:"Server Type",config:"Configuration",testConnection:"Test Connection",status:"Status",connected:"Connected",disconnected:"Disconnected",scope:{label:"Scope",user:"User",project:"Project"}},$se={title:"Appearance",theme:"Theme",codeEditor:"Code Editor",editorTheme:"Editor Theme",wordWrap:"Word Wrap",showMinimap:"Show Minimap",lineNumbers:"Line Numbers",fontSize:"Font Size"},Hse={saveChanges:"Save Changes",resetToDefaults:"Reset to Defaults",cancelChanges:"Cancel Changes"},Gse={title:"Quick Settings",sections:{appearance:"Appearance",toolDisplay:"Tool Display",viewOptions:"View Options",agentDiff:"Agent diff",inputSettings:"Input Settings",changeAwareness:"Command Center"},darkMode:"Dark Mode",autoExpandTools:"Auto-expand tools",showRawParameters:"Show raw parameters",showThinking:"Show thinking",autoScrollToBottom:"Auto-scroll to bottom",sendByCtrlEnter:"Send by Ctrl+Enter",sendByCtrlEnterDescription:"When enabled, pressing Ctrl+Enter will send the message instead of just Enter. This is useful for IME users to avoid accidental sends.",autoShowAgentDiff:"Show agent edits as diff",autoShowAgentDiffOff:"Off",autoShowAgentDiffOpenOnly:"Open files",autoShowAgentDiffAlways:"Always",changeAwareness:"Command Center",changedFiles:{title:"Changed files",description:"Tracks local file changes and opens the Files panel when a new change appears.",noProject:"Select a project to track local changes.",refresh:"Refresh changed files",empty:"No local changes detected",disabled:"Enable Command Center to watch local changes.",more:"+{{count}} more files",lastChecked:"Checked {{value}}",guideTitle:"Right panel guide",guideFiles:"Changed files glow green in Files.",guidePanel:"New changes appear beside the active chat.",status:{M:"M",A:"A",D:"D",U:"U"}},dragHandle:{dragging:"Dragging handle",closePanel:"Close settings panel",openPanel:"Open settings panel",draggingStatus:"Dragging...",toggleAndMove:"Click to toggle, drag to move"}},Vse={title:"Terminal Shortcuts",sectionKeys:"Keys",sectionNavigation:"Navigation",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"Arrow Up",arrowDown:"Arrow Down",scrollDown:"Scroll Down",handle:{closePanel:"Close shortcuts panel",openPanel:"Open shortcuts panel"}},Wse={label:"Settings",agents:"Agents",appearance:"Appearance",git:"Git",apiTokens:"API & Tokens",notifications:"Notifications",plugins:"Plugins",mobile:"Use from Mobile",telegram:"Telegram",diagnostics:"Diagnostics",about:"About",access:"Access"},qse={title:"Use from Mobile",description:"Scan a QR code with your phone to open Pixcode on any device in the same network.",refresh:"Refresh",copy:"Copy",copied:"Copied!",loading:"Detecting network addresses…",noEndpoints:"No LAN addresses were detected. Make sure your device is connected to a network.",error:"Could not load network endpoints.",hostLabel:"Host",portLabel:"Port",steps:{sameNetwork:"Connect your phone to the same Wi-Fi network as this computer.",scan:"Open the camera app and scan one of the QR codes below.",login:"Sign in with your Pixcode credentials the first time."},external:{title:"External Access",description:"Expose Pixcode beyond your local network so you can reach it from the internet.",upnpTitle:"Router port mapping (UPnP)",upnpDescription:"One-click port forwarding via your router. Works on most home routers; fails silently on CGNAT or enterprise networks.",upnpEnable:"Enable UPnP",upnpDisable:"Disable UPnP",upnpEnabled:"UPnP mapping active",upnpUnsupported:"UPnP is not available on this network.",tunnelTitle:"Secure tunnel",tunnelDescription:"If UPnP is unavailable, install cloudflared or ngrok and start a tunnel — we'll auto-detect and show the QR here.",tunnelStart:"Start tunnel",tunnelStop:"Stop tunnel",tunnelRunning:"Tunnel running",tunnelUnavailable:"No tunnel binary found on this machine.",externalUrl:"External URL"}},Kse={title:"Telegram",description:"Receive task completion notifications and chat with your agents from Telegram.",comingSoon:"Telegram integration is being prepared.",botToken:"Bot Token",botTokenPlaceholder:"123456:ABC-DEF…",botTokenHelp:"Create a bot with @BotFather and paste the token here.",saveToken:"Save & Start Bot",saving:"Saving…",botRunning:"Bot running as @{{username}}",botStopped:"Bot stopped",stopBot:"Stop Bot",removeToken:"Remove Token",pairing:{title:"Pair with your Telegram account",description:"Message your bot, then enter this 6-digit code inside the chat. The code refreshes every 10 minutes.",code:"Pairing Code",regenerate:"Generate new code",verified:"Paired with Telegram account",notPaired:"No Telegram account paired yet."},linkedAccount:{title:"Paired Account",username:"@{{username}}",language:"Replies in {{language}}",unpair:"Unpair"},notifications:{title:"Notifications",description:"Send agent completion and error events to your Telegram chat.",enabled:"Enabled",disabled:"Disabled"},bridge:{title:"Chat Bridge",description:"Messages you send to the bot become prompts for your most recent session. Replies come back to Telegram.",enabled:"Enabled",disabled:"Disabled"},control:{title:"Remote Control",description:"Use Telegram as a full Pixcode control surface for agents, orchestration, provider setup, and run status.",enabled:"Enable Telegram control",enabledDescription:"When enabled, paired Telegram messages can start agent and orchestration work on the selected project.",progressMode:"Progress mode",progressModeDescription:"Choose how much run output Telegram should send back.",progressModes:{final:"Final answer only",steps:"Important steps and final answer",errors:"Errors and final answer",all:"All visible step changes"},selectedProject:"Selected project",selectedProvider:"Selected provider",selectedModel:"Selected model",selectedWorkflow:"Selected workflow"},router:{title:"AI Router",description:"Use the selected Pixcode provider to understand free-form Telegram messages. Slash commands and buttons still run directly.",enabled:"Enable natural-language router",enabledDescription:"Free-form text is interpreted by the provider/model below. Low-confidence text is sent to the agent as a normal prompt.",provider:"Provider",providerDescription:"Leave this on the Telegram-selected provider unless this chat should always use one provider.",useTelegramSelected:"Use provider selected in Telegram",model:"Model",modelDescription:"Optional override. Leave empty to use the model selected in Telegram.",modelPlaceholder:"Use Telegram-selected model",saveModel:"Save",strictConfirmation:"Strict confirmation",strictConfirmationDescription:"Risky write/run actions require a one-time Telegram confirmation. This is always on in v1."},errors:{invalidToken:"Telegram rejected this bot token.",networkError:"Could not reach Telegram servers."}},Yse={title:"Notifications",description:"Control which notification events you receive.",webPush:{title:"Web Push Notifications",enable:"Enable Push Notifications",disable:"Disable Push Notifications",enabled:"Push notifications are enabled",loading:"Updating...",unsupported:"Push notifications are not supported in this browser.",denied:"Push notifications are blocked. Please allow them in your browser settings."},events:{title:"Event Types",actionRequired:"Action required",stop:"Run stopped",error:"Run failed",updates:"App and CLI updates"}},Zse={darkMode:{label:"Dark Mode",description:"Toggle between light and dark themes"},colorTheme:{title:"Color theme",palette:{label:"Accent palette",description:"Choose the product accent used by buttons, focus rings, navigation, and active states."},custom:{label:"Custom light/dark colors",description:"Pick separate accent colors for light and dark mode. Select Custom above to use them.",light:"Light",dark:"Dark"}},projectSorting:{label:"Project Sorting",description:"How projects are ordered in the sidebar",alphabetical:"Alphabetical",recentActivity:"Recent Activity"},codeEditor:{title:"Code Editor",theme:{label:"Editor Theme",description:"Default theme for the code editor"},wordWrap:{label:"Word Wrap",description:"Enable word wrapping by default in the editor"},showMinimap:{label:"Show Minimap",description:"Display a minimap for easier navigation in diff view"},lineNumbers:{label:"Show Line Numbers",description:"Display line numbers in the editor"},fontSize:{label:"Font Size",description:"Editor font size in pixels"}}},Xse={title:{add:"Add MCP Server",edit:"Edit MCP Server"},importMode:{form:"Form Input",json:"JSON Import"},scope:{label:"Scope",userGlobal:"User (Global)",projectLocal:"Project (Local)",userDescription:"User scope: Available across all projects on your machine",projectDescription:"Local scope: Only available in the selected project",cannotChange:"Scope cannot be changed when editing an existing server"},fields:{serverName:"Server Name",transportType:"Transport Type",command:"Command",arguments:"Arguments (one per line)",jsonConfig:"JSON Configuration",url:"URL",envVars:"Environment Variables (KEY=value, one per line)",headers:"Headers (KEY=value, one per line)",selectProject:"Select a project..."},placeholders:{serverName:"my-server"},validation:{missingType:"Missing required field: type",stdioRequiresCommand:"stdio type requires a command field",httpRequiresUrl:"{{type}} type requires a url field",invalidJson:"Invalid JSON format",jsonHelp:"Paste your MCP server configuration in JSON format. Example formats:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"Configuration Details (from {{configFile}})",projectPath:"Path: {{path}}",actions:{cancel:"Cancel",saving:"Saving...",addServer:"Add Server",updateServer:"Update Server"}},Jse={success:"Settings saved successfully!",error:"Failed to save settings",saving:"Saving..."},Qse={save:"Save Settings",cancel:"Cancel"},eoe={title:"Git Configuration",description:"Configure your git identity for commits. These settings will be applied globally via git config --global",name:{label:"Git Name",help:"Your name for git commits"},email:{label:"Git Email",help:"Your email for git commits"},actions:{save:"Save Configuration",saving:"Saving..."},status:{success:"Saved successfully"}},toe={title:"API Keys",description:"Generate API keys to access the external API from other applications.",newKey:{alertTitle:"⚠️ Save Your API Key",alertMessage:"This is the only time you'll see this key. Store it securely.",iveSavedIt:"I've saved it"},form:{placeholder:"API Key Name (e.g., Production Server)",createButton:"Create",cancelButton:"Cancel"},newButton:"New API Key",empty:"No API keys created yet.",list:{created:"Created:",lastUsed:"Last used:"},confirmDelete:"Are you sure you want to delete this API key?",status:{active:"Active",inactive:"Inactive"},github:{title:"GitHub Tokens",description:"Add GitHub Personal Access Tokens to clone private repositories via the external API.",descriptionAlt:"Add GitHub Personal Access Tokens to clone private repositories. You can also pass tokens directly in API requests without storing them.",addButton:"Add Token",form:{namePlaceholder:"Token Name (e.g., Personal Repos)",tokenPlaceholder:"GitHub Personal Access Token (ghp_...)",descriptionPlaceholder:"Description (optional)",addButton:"Add Token",cancelButton:"Cancel",howToCreate:"How to create a GitHub Personal Access Token →"},empty:"No GitHub tokens added yet.",added:"Added:",confirmDelete:"Are you sure you want to delete this GitHub token?"},apiDocsLink:"API Documentation",documentation:{title:"External API Documentation",description:"Learn how to use the external API to trigger Claude/Cursor sessions from your applications.",viewLink:"View API Documentation →"},loading:"Loading...",version:{updateAvailable:"Update available: v{{version}}"}},noe={status:{title:"CLI status",notChecked:"Not checked yet",lastChecked:"Last checked: {{value}}",updatesFound:"{{count}} update available",refresh:"Refresh CLI status"},config:{blurb:"View or edit the files the {{name}} CLI reads on startup. Saves write directly to your home directory.",refresh:"Refresh",save:"Save",revert:"Revert",saved:"Saved",loading:"Loading…",notCreated:"new",readonly:"read-only",noFiles:"No config files are registered for this agent yet."},cliVersion:{title:"CLI version",installed:"Installed: {{version}}",unknownInstalled:"Installed version unknown",latest:"Latest: {{version}}",checkedAt:"Checked: {{value}}",cached:"cached",updateAvailable:"Update available",refresh:"Refresh",skipped:{external_installer:"External installer",installed_version_unavailable:"Installed version unavailable",latest_version_unavailable:"Latest version unavailable",not_installed:"Not installed"}},authStatus:{checking:"Checking...",connected:"Connected",notConnected:"Not connected",disconnected:"Disconnected",checkingAuth:"Checking authentication status...",loggedInAs:"Logged in as {{email}}",authenticatedUser:"authenticated user"},account:{claude:{description:"Anthropic Claude AI assistant"},cursor:{description:"Cursor AI-powered code editor"},codex:{description:"OpenAI Codex AI assistant"},gemini:{description:"Google Gemini AI assistant"},qwen:{description:"Alibaba Qwen Code CLI (Gemini CLI fork)"},opencode:{description:"Multi-provider terminal coding agent — Claude, OpenAI, Gemini, or local models"}},connectionStatus:"Connection Status",login:{title:"Login",reAuthenticate:"Re-authenticate",description:"Sign in to your {{agent}} account to enable AI features",reAuthDescription:"Sign in with a different account or refresh credentials",button:"Login",reLoginButton:"Re-login"},error:"Error: {{error}}",providersLabel:"Providers",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} is not installed",notInstalledDescription:"Pixcode couldn't find the {{binary}} binary on this host. Install it first and then come back to log in.",installing:"Installing...",installNow:"Install now",copyCommand:"Copy install command",copy:"Copy",copied:"Copied",qwenDocs:"View the Qwen Code docs",complete:"Install complete",failed:"Install failed",output:"Output",cancel:"Cancel",dismiss:"Dismiss",doneHint:"Refresh this tab or try Login to check the new install.",continueToLogin:"Continue to Login",errors:{missingJobId:"Server did not return a job id",failedToStart:"Install failed to start",unreadableStatus:"Install ended with an unreadable status",streamLost:"Lost connection to install stream. The install may still be running on the server."}}},roe={title:"Permission Settings",skipPermissions:{label:"Skip permission prompts (use with caution)",claudeDescription:"Equivalent to --dangerously-skip-permissions flag",cursorDescription:"Equivalent to -f flag in Cursor CLI",opencodeDescription:"Equivalent to --dangerously-skip-permissions flag in OpenCode"},allowedTools:{title:"Allowed Tools",description:"Tools that are automatically allowed without prompting for permission",placeholder:'e.g., "Bash(git log:*)" or "Write"',quickAdd:"Quick add common tools:",empty:"No allowed tools configured"},blockedTools:{title:"Blocked Tools",description:"Tools that are automatically blocked without prompting for permission",placeholder:'e.g., "Bash(rm:*)"',empty:"No blocked tools configured"},allowedCommands:{title:"Allowed Shell Commands",description:"Shell commands that are automatically allowed without prompting",placeholder:'e.g., "Shell(ls)" or "Shell(git status)"',quickAdd:"Quick add common commands:",empty:"No allowed commands configured"},blockedCommands:{title:"Blocked Shell Commands",description:"Shell commands that are automatically blocked",placeholder:'e.g., "Shell(rm -rf)" or "Shell(sudo)"',empty:"No blocked commands configured"},toolExamples:{title:"Tool Pattern Examples:",bashGitLog:"- Allow all git log commands",bashGitDiff:"- Allow all git diff commands",write:"- Allow all Write tool usage",bashRm:"- Block all rm commands (dangerous)"},shellExamples:{title:"Shell Command Examples:",ls:"- Allow ls command",gitStatus:"- Allow git status",npmInstall:"- Allow npm install",rmRf:"- Block recursive delete"},opencodeAllowed:{title:"Allowed Bash Patterns",description:"Bash command patterns OpenCode auto-approves without prompting",placeholder:'e.g., "git *" or "npm test"',quickAdd:"Quick add common patterns:",empty:"No allowed patterns configured"},opencodeBlocked:{title:"Blocked Bash Patterns",description:"Bash command patterns OpenCode always denies",placeholder:'e.g., "rm -rf *" or "sudo *"',empty:"No blocked patterns configured"},opencodeExamples:{title:"Pattern Examples:",gitAll:"- Allow all git commands",gitPush:"- Block git push specifically",rmRf:"- Block recursive delete",npm:"- Allow all npm commands"},codex:{permissionMode:"Permission Mode",description:"Controls how Codex handles file modifications and command execution",modes:{default:{title:"Default",description:"Only trusted commands (ls, cat, grep, git status, etc.) run automatically. Other commands are skipped. Can write to workspace."},acceptEdits:{title:"Accept Edits",description:"All commands run automatically within the workspace. Full auto mode with sandboxed execution."},bypassPermissions:{title:"Bypass Permissions",description:"Full system access with no restrictions. All commands run automatically with full disk and network access. Use with caution."}},technicalDetails:"Technical details",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted. Trusted commands: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (without -exec), etc.",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never. All commands auto-execute within project directory.",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never. Full system access, use only in trusted environments.",overrideNote:"You can override this per-session using the mode button in the chat interface."}},actions:{add:"Add"}},aoe={title:"MCP Servers",description:{claude:"Model Context Protocol servers provide additional tools and data sources to Claude",cursor:"Model Context Protocol servers provide additional tools and data sources to Cursor",codex:"Model Context Protocol servers provide additional tools and data sources to Codex"},addButton:"Add MCP Server",empty:"No MCP servers configured",serverType:"Type",scope:{local:"local",user:"user"},config:{command:"Command",url:"URL",args:"Args",environment:"Environment"},tools:{title:"Tools",count:"({{count}}):",more:"+{{count}} more"},actions:{edit:"Edit server",delete:"Delete server"},help:{title:"About Codex MCP",description:"Codex supports stdio-based MCP servers. You can add servers that extend Codex's capabilities with additional tools and resources."}},ioe={updateCheckFrequency:"Update check frequency",updateCheckFrequencyHint:"Pixcode caches GitHub release checks locally so shared IPs do not hit GitHub rate limits.",updateCheckFrequencyOptions:{"30m":"Every 30 minutes","6h":"Every 6 hours","12h":"Every 12 hours","24h":"Daily","7d":"Weekly",off:"Manual only"},checkForUpdate:"Check for updates",checkingForUpdate:"Checking...",updateFound:"Update found",upToDate:"Up to date",lastChecked:"Last checked {{when}}",notCheckedYet:"Update check has not completed yet",checkFailed:"check failed or delayed by rate limit",tagline:"Open-source AI coding assistant interface",checkFailedShort:"Check failed",starOnGitHub:"Star on GitHub",docs:"Docs",hosted:{title:"Try Pixcode Hosted",description:"Team collaboration, shared MCP configs, settings sync across environments, and managed infrastructure.",learnMore:"Learn more"},proFeatures:{title:"Pixcode Pro Features",syncSettings:{title:"Sync Settings",description:"Keep your preferences, MCP configs, and theme in sync across all your environments."},teamManagement:{title:"Team Management",description:"Multiple users, role-based access, and shared projects for your team."}},license:"Licensed under AGPL-3.0",relativeTime:{justNow:"just now",secondsAgo:"{{count}}s ago",minutesAgo:"{{count}}m ago",hoursAgo:"{{count}}h ago"}},soe={title:"Plugins",description:"Extend the interface with custom plugins. Install from git or drop a folder in ~/.pixcode/plugins/",installPlaceholder:"https://github.com/user/my-plugin",installButton:"Install",installing:"Installing…",securityWarning:"Only install plugins whose source code you have reviewed or from authors you trust.",scanningPlugins:"Scanning plugins…",noPluginsInstalled:"No plugins installed",pullLatest:"Pull latest from git",noGitRemote:"No git remote — update not available",uninstallPlugin:"Uninstall plugin",confirmUninstall:"Click again to confirm",confirmUninstallMessage:"Remove {{name}}? This cannot be undone.",cancel:"Cancel",remove:"Remove",updateFailed:"Update failed",installFailed:"Installation failed",uninstallFailed:"Uninstall failed",toggleFailed:"Toggle failed",starterPluginLabel:"Starter Plugin",starter:"Starter",docs:"Docs",starterPlugin:{name:"Project Stats",badge:"starter",description:"File counts, lines of code, file-type breakdown, and recent activity for your project.",install:"Install"},terminalPlugin:{name:"Terminal",badge:"official",description:"Integrated terminal with full shell access directly within the interface.",install:"Install"},morePlugins:"More",enable:"Enable",disable:"Disable",installAriaLabel:"Plugin git repository URL",tab:"tab",runningStatus:"running"},ooe={title:"Access",description:"Choose how people reach this self-hosted Pixcode server. Start with the same network, then use a secure tunnel, Tailscale, or your own domain when you need remote access.",refresh:"Refresh",copy:"Copy",copied:"Copied",save:"Save access path",check:"Check URL",qrAlt:"QR for {{url}}",guide:{title:"Pick the connection path first",description:"You do not need to know networking terms. Choose the situation that matches the person connecting, copy the shown link, or scan the QR code from their phone."},options:{sameNetwork:{title:"Same Wi-Fi/LAN",description:"Use this when the device is on the same router or office network as the Pixcode server."},secureTunnel:{title:"Temporary public link",description:"Start a Cloudflare/ngrok tunnel and Pixcode shows a public URL plus QR automatically."},tailscale:{title:"Private team link",description:"Use Tailscale when you want private access without a public domain or router setup."},customDomain:{title:"Own domain",description:"Use this when you already have HTTPS, a reverse proxy, or a Cloudflare Tunnel hostname."}},status:{ready:"Ready",detecting:"Detecting",guided:"Guided",configured:"Configured",optional:"Optional"},links:{title:"Available links",description:"Copy the correct URL for the device or teammate that needs to connect.",local:"Local",tailscale:"Tailscale private link",empty:"No access links detected yet."},local:{title:"Same network access",description:"Best first test: connect from the same Wi-Fi or LAN. Scan a QR code on the phone, or copy the link for a teammate on the same network.",thisDevice:"This computer only",loading:"Detecting same-network links...",empty:"No LAN link detected. Make sure the server is connected to a network and refresh.",saveLabel:"Same network access",save:"Save this LAN link"},tunnel:{title:"Secure tunnel",description:"For remote access without a fixed domain, Pixcode can start cloudflared or ngrok and show the public URL here.",secureLink:"Public link and QR",help:"Click start. If cloudflared or ngrok is installed, Pixcode creates a temporary HTTPS address and QR code automatically.",running:"Tunnel running",start:"Start tunnel",stop:"Stop tunnel",save:"Save this tunnel URL",saveLabel:"Secure tunnel access",qrLabel:"secure tunnel",installTitle:"Tunnel setup needed",installNeeded:"Install cloudflared or ngrok first, then press Start tunnel again."},tailscale:{title:"Tailscale private access",description:"Tailscale is an optional private network app. Install it on the server and user devices, sign in to the same team, then Pixcode can detect a private URL.",save:"Save this Tailscale URL",saveLabel:"Tailscale private access",openInstall:"Open Tailscale install",steps:{installServer:"Install Tailscale on the computer or server running Pixcode.",installUserDevice:"Install Tailscale on the phone, laptop, or teammate device that will open Pixcode.",login:"Sign in to the same Tailscale account or team on both devices.",refresh:"Return here and press Refresh; Pixcode will show the private URL when it is ready."},installCommand:"Install command",installDevice:"Install on this device",signIn:"Sign in with Tailscale",actionDone:"Done",needsAttention:"Needs attention",openLogin:"Open Tailscale login"},advanced:{title:"Advanced: stable domain",description:"Use this when you already have a LAN URL, Tailscale URL, Cloudflare Tunnel hostname, or custom HTTPS domain that should be saved for users.",badge:"Advanced"},setup:{title:"Stable access path",description:"Save the URL your users will use. This can be a LAN address, Tailscale URL, Cloudflare Tunnel URL, or custom domain."},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"Custom domain"},fields:{label:"Label",url:"URL",port:"Target port",mode:"Mode"},health:{reachable:"Pixcode is reachable",unreachable:"Pixcode is not reachable"},configured:{title:"Configured access paths",description:"These paths are available to admins, project partners, and project workers according to their role.",empty:"No configured access paths yet.",noUrl:"No URL",public:"public",private:"private"},team:{title:"How users connect",description:"Create the user in the Admin system, assign their project role in Control Room, then share one of these Access URLs. They do not need to be global admins to reach their assigned project."}},loe={title:"Diagnostics",description:"Provider health, WebSocket state, notifications, active runs, and recent errors.",refresh:"Refresh",copyBundle:"Copy bundle",copied:"Copied",runtime:"Runtime",waiting:"Waiting for diagnostics",websocket:"WebSocket",activeClients:"active clients",recentErrors:"Recent errors",redactedBundle:"redacted support bundle",providers:"Providers",notChecked:"not checked",emptyProviders:"Provider health has not been collected yet.",status:{unknown:"unknown",loading:"loading",ok:"ok",available:"available",configured:"configured",missing:"missing",failed:"failed"}},coe={title:Fse,tabs:zse,account:Bse,mcp:Use,appearance:$se,actions:Hse,quickSettings:Gse,terminalShortcuts:Vse,mainTabs:Wse,mobile:qse,telegram:Kse,notifications:Yse,appearanceSettings:Zse,mcpForm:Xse,saveStatus:Jse,footerActions:Qse,git:eoe,apiKeys:toe,agents:noe,permissions:roe,mcpServers:aoe,about:ioe,pluginSettings:soe,access:ooe,diagnostics:loe},doe={title:"Welcome Back",description:"Sign in to your Pixcode self-hosted account",username:"Username",password:"Password",submit:"Sign In",loading:"Signing in...",errors:{invalidCredentials:"Invalid username or password",requiredFields:"Please fill in all fields",networkError:"Network error. Please try again."},placeholders:{username:"Enter your username",password:"Enter your password"}},uoe={title:"Create Account",username:"Username",password:"Password",confirmPassword:"Confirm Password",submit:"Create Account",loading:"Creating account...",errors:{passwordMismatch:"Passwords do not match",usernameTaken:"Username is already taken",weakPassword:"Password is too weak"}},poe={title:"Sign Out",confirm:"Are you sure you want to sign out?",button:"Sign Out"},moe={login:doe,register:uoe,logout:poe},hoe={title:"Projects",newProject:"New Project",deleteProject:"Remove Project",renameProject:"Rename Project",noProjects:"No projects found",loadingProjects:"Loading projects...",searchPlaceholder:"Search projects...",projectNamePlaceholder:"Project name",starred:"Starred",all:"All",untitledSession:"Untitled Session",newSession:"New Session",codexSession:"Codex Session",fetchingProjects:"Fetching your Claude projects and sessions",projects:"projects",detectedFromHistory:"Detected from history",noMatchingProjects:"No matching projects",tryDifferentSearch:"Try adjusting your search term",runClaudeCli:"Run Claude CLI in a project directory to get started"},foe={title:"Pixcode",subtitle:"AI coding assistant interface"},goe={title:"Sessions",newSession:"New Session",deleteSession:"Delete Session",renameSession:"Rename Session",noSessions:"No sessions yet",loadingSessions:"Loading sessions...",unnamed:"Unnamed",loading:"Loading...",showMore:"Show more sessions",startToSee:"Start a new session to see it here."},boe={section:"Orchestration",fallbackTitle:"Orchestration run"},xoe={flat:"Recent",grouped:"By project"},voe={viewEnvironments:"View Environments",hideSidebar:"Hide sidebar",createProject:"Create new project",refresh:"Refresh projects and sessions (Ctrl+R)",renameProject:"Rename project (F2)",deleteProject:"Remove project from sidebar (Delete)",addToFavorites:"Add to favorites",removeFromFavorites:"Remove from favorites",editSessionName:"Manually edit session name",deleteSession:"Delete this session permanently",sessionActions:"Session actions",historyView:"History view",historyViewFlat:"Recent conversations",historyViewGrouped:"Grouped by project",save:"Save",cancel:"Cancel",clearSearch:"Clear search"},yoe={chat:"Chat",files:"Files",git:"Git",terminal:"Terminal",tasks:"Tasks"},woe={refresh:"Refresh",settings:"Settings",collapseAll:"Collapse All",expandAll:"Expand All",cancel:"Cancel",save:"Save",delete:"Delete",rename:"Rename",starSession:"Star",unstarSession:"Remove star",joinCommunity:"Join Community",reportIssue:"Report Issue",starOnGithub:"Star on GitHub",controlRoom:"Control Room",controlRoomDescription:"Admin, access, runs"},koe={openSource:"Open Source"},Soe={active:"Active",inactive:"Inactive",thinking:"Thinking...",error:"Error",aborted:"Aborted",unknown:"Unknown"},Coe={justNow:"Just now",oneMinuteAgo:"1 min ago",minutesAgo:"{{count}} mins ago",oneHourAgo:"1 hour ago",hoursAgo:"{{count}} hours ago",oneDayAgo:"1 day ago",daysAgo:"{{count}} days ago",buckets:{today:"Today",yesterday:"Yesterday",thisWeek:"Previous 7 days",thisMonth:"Previous 30 days",older:"Older"}},Noe={deleteConfirm:"Are you sure you want to delete this?",renameSuccess:"Renamed successfully",deleteSuccess:"Deleted successfully",errorOccurred:"An error occurred",deleteSessionConfirm:"Are you sure you want to delete this session? This action cannot be undone.",deleteProjectConfirm:"Remove this project from the sidebar? Your project files, memories, and session data will not be deleted.",enterProjectPath:"Please enter a project path",deleteSessionFailed:"Failed to delete session. Please try again.",deleteSessionError:"Error deleting session. Please try again.",renameSessionFailed:"Failed to rename session. Please try again.",renameSessionError:"Error renaming session. Please try again.",deleteProjectFailed:"Failed to remove project. Please try again.",deleteProjectError:"Error removing project. Please try again.",createProjectFailed:"Failed to create project. Please try again.",createProjectError:"Error creating project. Please try again."},Eoe={updateAvailable:"Update available"},Toe={modeProjects:"Projects",modeConversations:"Conversations",conversationsPlaceholder:"Search in conversations...",searching:"Searching...",noResults:"No results found",tryDifferentQuery:"Try a different search query",matches_one:"{{count}} match",matches_other:"{{count}} matches",projectsScanned_one:"{{count}} project scanned",projectsScanned_other:"{{count}} projects scanned"},Aoe={deleteProject:"Remove Project",deleteSession:"Delete Session",confirmDelete:"What would you like to do with",sessionCount_one:"This project contains {{count}} conversation.",sessionCount_other:"This project contains {{count}} conversations.",removeFromSidebar:"Remove from sidebar only",deleteAllData:"Delete all data permanently",allConversationsDeleted:"The project will be removed from the sidebar. Your files, memories, and session data will be preserved.",cannotUndo:"You can re-add the project later."},joe={projects:hoe,app:foe,sessions:goe,orchestration:boe,historyView:xoe,tooltips:voe,navigation:yoe,actions:woe,branding:koe,status:Soe,time:Coe,messages:Noe,version:Eoe,search:Toe,deleteConfirmation:Aoe},Roe={copy:"Copy",copied:"Copied",copyCode:"Copy code"},Ioe={copy:"Copy message",copied:"Message copied",selectFormat:"Select copy format",copyAsMarkdown:"Copy as markdown",copyAsText:"Copy as text"},_oe={user:"U",error:"Error",tool:"Tool",claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code"},Loe={settings:"Tool Settings",error:"Tool Error",result:"Tool Result",viewParams:"View input parameters",viewRawParams:"View raw parameters",viewDiff:"View edit diff for",creatingFile:"Creating new file:",updatingTodo:"Updating Todo List",read:"Read",readFile:"Read file",updateTodo:"Update todo list",readTodo:"Read todo list",searchResults:"results"},Poe={found:"Found {{count}} {{type}}",file:"file",files:"files",pattern:"pattern:",in:"in:"},Doe={updated:"File updated successfully",created:"File created successfully",written:"File written successfully",diff:"Diff",newFile:"New File",viewContent:"View file content",viewFullOutput:"View full output ({{count}} chars)",contentDisplayed:"The file content is displayed in the diff view above"},Ooe={title:"Interactive Prompt",waiting:"Waiting for your response in the CLI",instruction:"Please select an option in your terminal where Claude is running.",selectedOption:"✓ Claude selected option {{number}}",instructionDetail:"In the CLI, you would select this option interactively using arrow keys or by typing the number."},Moe={title:"Thinking...",emoji:"💭 Thinking..."},Foe={response:"JSON Response"},zoe={grant:"Grant permission for {{tool}}",added:"Permission added",addTo:"Adds {{entry}} to Allowed Tools.",retry:"Permission saved. Retry the request to use the tool.",error:"Unable to update permissions. Please try again.",openSettings:"Open settings"},Boe={updated:"Todo list has been updated successfully",current:"Current Todo List"},Uoe={viewPlan:"📋 View implementation plan",title:"Implementation Plan"},$oe={resetAt:"Claude usage limit reached. Your limit will reset at **{{time}} {{timezone}}** - {{date}}"},Hoe={permissionMode:"Permission Mode",modes:{default:"Default Mode",acceptEdits:"Accept Edits",bypassPermissions:"Bypass Permissions",plan:"Plan Mode"},descriptions:{default:"Only trusted commands (ls, cat, grep, git status, etc.) run automatically. Other commands are skipped. Can write to workspace.",acceptEdits:"All commands run automatically within the workspace. Full auto mode with sandboxed execution.",bypassPermissions:"Full system access with no restrictions. All commands run automatically with full disk and network access. Use with caution.",plan:"Planning mode - no commands are executed"},technicalDetails:"Technical details"},Goe={permissionMode:"Gemini Permission Mode",description:"Control how Gemini CLI handles operation approvals.",modes:{default:{title:"Standard (Ask for Approval)",description:"Gemini will prompt for approval before executing commands, writing files, and fetching web resources."},autoEdit:{title:"Auto Edit (Skip File Approvals)",description:"Gemini will automatically approve file edits and web fetches, but will still prompt for shell commands."},yolo:{title:"YOLO (Bypass All Permissions)",description:"Gemini will execute all operations without asking for approval. Exercise caution."}}},Voe={permissionMode:"Qwen Permission Mode",description:"Control how Qwen Code handles operation approvals.",modes:{default:{title:"Standard (Ask for Approval)",description:"Qwen Code will prompt for approval before executing commands, writing files, and fetching web resources."},autoEdit:{title:"Auto Edit (Skip File Approvals)",description:"Qwen Code will automatically approve file edits and web fetches, but will still prompt for shell commands."},yolo:{title:"YOLO (Bypass All Permissions)",description:"Qwen Code will execute all operations without asking for approval. Exercise caution."}}},Woe={placeholder:"Type / for commands, @ for files, or ask {{provider}} anything...",placeholderDefault:"Type your message...",disabled:"Input disabled",attachFiles:"Attach files",attachImages:"Attach images",send:"Send",stop:"Stop",clickToChangeMode:"Click to change permission mode (or press Tab in input)",showAllCommands:"Show all commands",clearInput:"Clear input",scrollToBottom:"Scroll to bottom"},qoe={selector:{title:"Thinking Mode",description:"Extended thinking gives Claude more time to evaluate alternatives",active:"Active",tip:"Higher thinking modes take more time but provide more thorough analysis"},modes:{none:{name:"Standard",description:"Regular Claude response",prefix:""},think:{name:"Think",description:"Basic extended thinking",prefix:"think"},thinkHard:{name:"Think Hard",description:"More thorough evaluation",prefix:"think hard"},thinkHarder:{name:"Think Harder",description:"Deep analysis with alternatives",prefix:"think harder"},ultrathink:{name:"Ultrathink",description:"Maximum thinking budget",prefix:"ultrathink"}},buttonTitle:"Thinking mode: {{mode}}"},Koe={title:"Choose Your AI Assistant",description:"Select a provider to start a new conversation",selectModel:"Select Model",statusUnavailable:"Status unavailable",statusRetryHint:"Could not check this CLI. Tap to retry.",retryStatus:"Retry status",providerInfo:{anthropic:"by Anthropic",openai:"by OpenAI",cursorEditor:"AI Code Editor",google:"by Google"},readyPrompt:{claude:"Ready to use Claude with {{model}}. Start typing your message below.",cursor:"Ready to use Cursor with {{model}}. Start typing your message below.",codex:"Ready to use Codex with {{model}}. Start typing your message below.",gemini:"Ready to use Gemini with {{model}}. Start typing your message below.",default:"Select a provider above to begin"}},Yoe={continue:{title:"Continue your conversation",description:"Ask questions about your code, request changes, or get help with development tasks"},loading:{olderMessages:"Loading older messages...",sessionMessages:"Loading session messages..."},messages:{showingOf:"Showing {{shown}} of {{total}} messages",scrollToLoad:"Scroll up to load more",showingLast:"Showing last {{count}} messages ({{total}} total)",loadEarlier:"Load earlier messages",loadAll:"Load all messages",loadingAll:"Loading all messages...",allLoaded:"All messages loaded",perfWarning:'All messages loaded — scrolling may be slower. Click "Scroll to bottom" to restore performance.'}},Zoe={selectProject:{title:"Select a Project",description:"Choose a project to open an interactive shell in that directory"},status:{newSession:"New Session",initializing:"Initializing...",restarting:"Restarting..."},actions:{disconnect:"Disconnect",disconnectTitle:"Disconnect from shell",restart:"Restart",restartTitle:"Restart Shell (disconnect first)",connect:"Continue in Shell",connectTitle:"Connect to shell"},loading:"Loading terminal...",connecting:"Connecting to shell...",startSession:"Start a new Claude session",startProviderSession:"Start a new {{provider}} session",resumeSession:"Resume session: {{displayName}}...",runCommand:"Run {{command}} in {{projectName}}",startCli:"Starting Claude CLI in {{projectName}}",startProviderCli:"Starting {{provider}} in {{projectName}}",defaultCommand:"command"},Xoe={actions:{thinking:"Thinking",processing:"Processing",analyzing:"Analyzing",working:"Working",computing:"Computing",reasoning:"Reasoning"},state:{live:"Live",paused:"Paused"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}m {{seconds}}s",label:"{{time}} elapsed",startingNow:"Starting now"},controls:{stopGeneration:"Stop Generation",pressEscToStop:"Press Esc anytime to stop"},providers:{assistant:"Assistant"}},Joe={startChatWithProvider:"Select a project to start chatting with {{provider}}"},Qoe={nextTaskPrompt:"Start the next task"},ele={codeBlock:Roe,copyMessage:Ioe,messageTypes:_oe,tools:Loe,search:Poe,fileOperations:Doe,interactive:Ooe,thinking:Moe,json:Foe,permissions:zoe,todo:Boe,plan:Uoe,usageLimit:$oe,codex:Hoe,gemini:Goe,qwen:Voe,input:Woe,thinkingMode:qoe,providerSelection:Koe,session:Yoe,shell:Zoe,claudeStatus:Xoe,projectSelection:Joe,tasks:Qoe},tle={changes:"changes",previousChange:"Previous change",nextChange:"Next change",hideDiff:"Hide diff highlighting",showDiff:"Show diff highlighting",settings:"Editor Settings",collapse:"Collapse editor",expand:"Expand editor to full width"},nle="Loading {{fileName}}...",rle={showingChanges:"Showing changes"},ale={download:"Download file",save:"Save",saving:"Saving...",saved:"Saved!",exitFullscreen:"Exit fullscreen",fullscreen:"Fullscreen",close:"Close",previewMarkdown:"Preview markdown",editMarkdown:"Edit markdown"},ile={lines:"Lines:",characters:"Characters:",shortcuts:"Press Ctrl+S to save • Esc to close"},sle={title:"Binary File",message:'The file "{{fileName}}" cannot be displayed in the text editor because it is a binary file.'},ole={toolbar:tle,loading:nle,header:rle,actions:ale,footer:ile,binaryFile:sle},lle={title:"TaskMaster AI is not configured",description:"TaskMaster helps break down complex projects into manageable tasks with AI-powered assistance",whatIsTitle:"🎯 What is TaskMaster?",features:{aiPowered:"AI-Powered Task Management: Break complex projects into manageable subtasks",prdTemplates:"PRD Templates: Generate tasks from Product Requirements Documents",dependencyTracking:"Dependency Tracking: Understand task relationships and execution order",progressVisualization:"Progress Visualization: Kanban boards and detailed task analytics",cliIntegration:"CLI Integration: Use taskmaster commands for advanced workflows"},initializeButton:"Initialize TaskMaster AI"},cle={title:"Getting Started with TaskMaster",subtitle:"TaskMaster is initialized! Here's what to do next:",steps:{createPRD:{title:"Create a Product Requirements Document (PRD)",description:"Discuss your project idea and create a PRD that describes what you want to build.",addButton:"Add PRD",existingPRDs:"Existing PRDs:"},generateTasks:{title:"Generate Tasks from PRD",description:"Once you have a PRD, ask your AI assistant to parse it and TaskMaster will automatically break it down into manageable tasks with implementation details."},analyzeTasks:{title:"Analyze & Expand Tasks",description:"Ask your AI assistant to analyze task complexity and expand them into detailed subtasks for easier implementation."},startBuilding:{title:"Start Building",description:"Ask your AI assistant to begin working on tasks, update their status, and add new tasks as your project evolves."}},tip:"💡 Tip: Start with a PRD to get the most out of TaskMaster's AI-powered task generation"},dle={title:"TaskMaster Setup",subtitle:"Interactive CLI for {{projectName}}",willStart:"TaskMaster initialization will start automatically",completed:"TaskMaster setup completed! You can now close this window.",closeButton:"Close",closeContinueButton:"Close & Continue"},ule={title:"Getting Started with TaskMaster",subtitle:"Your guide to productive task management",examples:{parsePRD:`💬 Example:
|
|
823
823
|
"I've just initialized a new project with Claude Task Master. I have a PRD at .taskmaster/docs/prd.txt. Can you help me parse it and set up the initial tasks?"`,expandTask:`💬 Example:
|
|
824
824
|
"Task 5 seems complex. Can you break it down into subtasks?"`,addTask:`💬 Example:
|
|
825
825
|
"Please add a new task to implement user profile image uploads using Cloudinary, research the best approach."`},moreExamples:"View more examples and usage patterns →",proTips:{title:"💡 Pro Tips",search:"Use the search bar to quickly find specific tasks",views:"Switch between Kanban, List, and Grid views using the view toggles",filters:"Use filters to focus on specific task statuses or priorities",details:"Click on any task to view detailed information and manage subtasks"},learnMore:{title:"📚 Learn More",description:"TaskMaster AI is an advanced task management system built for developers. Get documentation, examples, and contribute to the project.",githubButton:"View on GitHub"}},ple={placeholder:"Search tasks..."},mle={button:"Filters",status:"Status",priority:"Priority",sortBy:"Sort By",allStatuses:"All Statuses",allPriorities:"All Priorities",showing:"Showing {{filtered}} of {{total}} tasks",clearFilters:"Clear Filters"},hle={id:"ID",status:"Status",priority:"Priority",idAsc:"ID (Ascending)",idDesc:"ID (Descending)",titleAsc:"Title (A-Z)",titleDesc:"Title (Z-A)",statusAsc:"Status (Pending First)",statusDesc:"Status (Done First)",priorityAsc:"Priority (High First)",priorityDesc:"Priority (Low First)"},fle={kanban:"Kanban view",list:"List view",grid:"Grid view"},gle={pending:"📋 To Do",inProgress:"🚀 In Progress",done:"✅ Done",blocked:"🚫 Blocked",deferred:"⏳ Deferred",cancelled:"❌ Cancelled",noTasksYet:"No tasks yet",tasksWillAppear:"Tasks will appear here",moveTasksHere:"Move tasks here when started",completedTasksHere:"Completed tasks appear here",statusTasksHere:"Tasks with this status will appear here"},ble={help:"TaskMaster Getting Started Guide",prds:"PRDs",addPRD:"Add PRD",addTask:"Add Task",createNewPRD:"Create New PRD",prdsAvailable:"{{count}} PRD(s) available"},xle={modified:"Modified: {{date}}"},vle={pending:"Pending","in-progress":"In Progress",done:"Done",blocked:"Blocked",deferred:"Deferred",cancelled:"Cancelled"},yle={high:"High",medium:"Medium",low:"Low"},wle={title:"No tasks match your filters",description:"Try adjusting your search or filter criteria."},kle={notConfigured:lle,gettingStarted:cle,setupModal:dle,helpGuide:ule,search:ple,filters:mle,sort:hle,views:fle,kanban:gle,buttons:ble,prd:xle,statuses:vle,priorities:yle,noMatchingTasks:wle},Sle={save:"저장",cancel:"취소",delete:"삭제",create:"생성",edit:"편집",close:"닫기",confirm:"확인",submit:"제출",retry:"재시도",refresh:"새로고침",search:"검색",clear:"지우기",copy:"복사",download:"다운로드",upload:"업로드",browse:"찾아보기"},Cle={chat:"채팅",shell:"Shell",files:"파일",git:"소스 관리",changes:"변경 사항",liveView:"라이브 보기",tasks:"작업",remote:"원격",controlRoom:"제어",orchestration:"오케스트레이션"},Nle={loading:"로딩 중...",success:"성공",error:"오류",failed:"실패",pending:"대기 중",completed:"완료",inProgress:"진행 중"},Ele={savedSuccessfully:"저장되었습니다",deletedSuccessfully:"삭제되었습니다",updatedSuccessfully:"업데이트되었습니다",operationFailed:"작업 실패",networkError:"네트워크 오류. 연결을 확인해주세요.",unauthorized:"인증되지 않았습니다. 로그인해주세요.",notFound:"찾을 수 없음",invalidInput:"잘못된 입력",requiredField:"필수 항목입니다",unknownError:"알 수 없는 오류가 발생했습니다"},Tle={settings:"설정",home:"홈",back:"뒤로",next:"다음",previous:"이전",logout:"로그아웃"},Ale={language:"언어",theme:"테마",darkMode:"다크 모드",lightMode:"라이트 모드",name:"이름",description:"설명",enabled:"활성화",disabled:"비활성화",optional:"선택사항",version:"버전",select:"선택",selectAll:"전체 선택",deselectAll:"전체 해제"},jle={justNow:"방금 전",minutesAgo:"{{count}}분 전",hoursAgo:"{{count}}시간 전",daysAgo:"{{count}}일 전",yesterday:"어제"},Rle={newFile:"새 파일",newFolder:"새 폴더",rename:"이름 변경",move:"이동",copyPath:"경로 복사",openInEditor:"에디터에서 열기"},Ile={loading:"Pixcode 로딩 중",settingUpWorkspace:"워크스페이스 설정 중...",chooseProject:"프로젝트 선택",selectProjectDescription:"사이드바에서 프로젝트를 선택하여 Claude와 코딩을 시작하세요. 각 프로젝트에는 채팅 세션과 파일 히스토리가 포함됩니다.",tip:"팁",createProjectMobile:"위의 메뉴 버튼을 눌러 프로젝트에 접근하세요",createProjectDesktop:"사이드바의 폴더 아이콘을 클릭하여 새 프로젝트를 생성하세요",newSession:"새 세션",untitledSession:"제목 없는 세션",projectFiles:"프로젝트 파일",landing:{title:"Pixcode 워크스페이스 시작",description:"프로젝트를 선택하거나 새 채팅을 시작하거나 하나의 목표로 오케스트레이션을 실행할 수 있습니다. 오케스트레이션은 선택한 CLI 에이전트를 관리하고 모든 단계와 오류를 보여줍니다.",startOrchestration:"오케스트레이션 시작",startOrchestrationDescription:"프로젝트를 자동 생성하고 에이전트 제어와 실행 기록이 있는 오케스트레이션 화면을 엽니다.",startChat:"새 채팅 시작",startChatDescription:"폴더를 자동 생성하고 단일 에이전트로 일반 채팅 화면을 엽니다.",sidebarHint:"사이드바에서 기존 프로젝트를 선택하면 채팅 기록, 파일, git 상태, 작업, 오케스트레이션이 같은 메인 화면에 유지됩니다."}},_le={loading:"파일 로딩 중...",files:"파일",simpleView:"간단히 보기",compactView:"컴팩트 보기",detailedView:"상세히 보기",searchPlaceholder:"파일 및 폴더 검색...",clearSearch:"검색 지우기",name:"이름",size:"크기",modified:"수정일",permissions:"권한",noFilesFound:"파일을 찾을 수 없음",checkProjectPath:"프로젝트 경로가 접근 가능한지 확인하세요",noMatchesFound:"일치하는 항목 없음",tryDifferentSearch:"다른 검색어를 시도하거나 검색을 지우세요",justNow:"방금 전",minAgo:"{{count}}분 전",hoursAgo:"{{count}}시간 전",daysAgo:"{{count}}일 전",newFile:"새 파일 (Cmd+N)",newFolder:"새 폴더 (Cmd+Shift+N)",refresh:"새로고침",collapseAll:"모두 접기",context:{rename:"이름 변경",delete:"삭제",copyPath:"경로 복사",download:"다운로드",newFile:"새 파일",newFolder:"새 폴더",refresh:"새로 고침",menuLabel:"파일 컨텍스트 메뉴",loading:"로딩 중..."}},Lle={title:"새 프로젝트 생성",steps:{type:"유형",configure:"설정",confirm:"확인"},step1:{question:"이미 워크스페이스가 있으신가요, 아니면 새로 생성하시겠습니까?",existing:{title:"기존 워크스페이스",description:"서버에 이미 워크스페이스가 있고 프로젝트 목록에 추가만 하면 됩니다"},new:{title:"새 워크스페이스",description:"새 워크스페이스를 생성하고, 선택적으로 GitHub 저장소에서 clone합니다"},githubClone:{title:"GitHub에서 클론",description:"대상 폴더를 선택하고 저장소를 그 안에 클론"},subfolder:{title:"하위 폴더 만들기",description:"상위 폴더를 선택하고 그 안에 새 하위 폴더 생성"}},step2:{existingPath:"워크스페이스 경로",newPath:"워크스페이스 경로",subfolderParentPath:"상위 폴더",subfolderParentHelp:"새 하위 폴더가 생성될 폴더 경로",subfolderName:"하위 폴더 이름",subfolderNameHelp:"이 이름으로 상위 폴더 안에 새 폴더가 생성됩니다",existingPlaceholder:"/path/to/existing/workspace",newPlaceholder:"/path/to/new/workspace",existingHelp:"기존 워크스페이스 디렉토리의 전체 경로",newHelp:"워크스페이스 디렉토리의 전체 경로",githubUrl:"GitHub URL (선택사항)",githubPlaceholder:"https://github.com/username/repository",githubHelp:"선택사항: 저장소를 clone하려면 GitHub URL을 입력하세요",githubAuth:"GitHub 인증 (선택사항)",githubAuthHelp:"비공개 저장소에만 필요합니다. 공개 저장소는 인증 없이 clone할 수 있습니다.",loadingTokens:"저장된 토큰 로딩 중...",storedToken:"저장된 토큰",newToken:"새 토큰",nonePublic:"없음 (공개)",selectToken:"토큰 선택",selectTokenPlaceholder:"-- 토큰 선택 --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"이 토큰은 이 작업에만 사용됩니다",publicRepoInfo:"공개 저장소는 인증이 필요하지 않습니다. 공개 저장소를 clone하는 경우 토큰을 생략할 수 있습니다.",noTokensHelp:"저장된 토큰이 없습니다. 설정 → API Keys에서 토큰을 추가하면 재사용이 편리합니다.",optionalTokenPublic:"GitHub 토큰 (공개 저장소는 선택사항)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (공개 저장소는 비워두세요)"},step3:{reviewConfig:"설정 검토",workspaceType:"워크스페이스 유형:",existingWorkspace:"기존 워크스페이스",newWorkspace:"새 워크스페이스",subfolderWorkspace:"새 하위 폴더",path:"경로:",parentPath:"상위 경로:",subfolderName:"하위 폴더 이름:",cloneFrom:"Clone 소스:",authentication:"인증:",usingStoredToken:"저장된 토큰 사용:",usingProvidedToken:"제공된 토큰 사용",noAuthentication:"인증 없음",sshKey:"SSH 키",existingInfo:"워크스페이스가 프로젝트 목록에 추가되며 Claude/Cursor 세션에서 사용할 수 있습니다.",newWithClone:"이 폴더에 저장소가 clone됩니다.",newEmpty:"워크스페이스가 프로젝트 목록에 추가되며 Claude/Cursor 세션에서 사용할 수 있습니다.",subfolderInfo:"상위 폴더 안에 새 하위 폴더가 생성되어 프로젝트 목록에 추가됩니다.",cloningRepository:"저장소 clone 중..."},buttons:{cancel:"취소",back:"뒤로",next:"다음",createProject:"프로젝트 생성",creating:"생성 중...",cloning:"Clone 중..."},errors:{selectType:"기존 워크스페이스를 사용할지 새로 생성할지 선택해주세요",providePath:"워크스페이스 경로를 입력해주세요",provideSubfolderName:"하위 폴더 이름을 입력해주세요",subfolderNameInvalid:"하위 폴더 이름에 경로 구분자를 포함할 수 없으며 . / .. 도 허용되지 않습니다",failedToCreate:"워크스페이스 생성 실패",failedToCreateFolder:"폴더 생성 실패"}},Ple={genericTool:"도구",codes:{generic:{info:{title:"알림"}},permission:{required:{title:"작업 필요",body:"{{toolName}} 에 대한 결정을 기다리고 있습니다."}},run:{stopped:{title:"실행이 중지되었습니다",body:"사유: {{reason}}"},failed:{title:"실행 실패"}},agent:{notification:{title:"에이전트 알림"}}},open:"알림 열기",title:"알림",markRead:"읽음",close:"알림 닫기",dismiss:"알림 닫기"},Dle={title:"업데이트 가능",newVersionReady:"새 버전이 준비되었습니다",currentVersion:"현재 버전",latestVersion:"최신 버전",whatsNew:"새로운 기능:",viewFullRelease:"전체 릴리스 보기",updateProgress:"업데이트 진행 상황:",manualUpgrade:"수동 업그레이드:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:'또는 "지금 업데이트"를 클릭하여 자동으로 업데이트합니다.',updateCompleted:"업데이트가 완료되었습니다!",restartServer:"변경사항을 적용하려면 서버를 재시작하세요.",updateFailed:"업데이트 실패",buttons:{close:"닫기",later:"나중에",copyCommand:"명령어 복사",updateNow:"지금 업데이트",updating:"업데이트 중..."},ariaLabels:{closeModal:"버전 업그레이드 모달 닫기",showSidebar:"사이드바 표시",settings:"설정",updateAvailable:"업데이트 가능",closeSidebar:"사이드바 닫기"}},Ole={title:"오케스트레이션",subtitle:"Pixcode는 {{project}}의 로컬 점검, 테스트, 터미널 작업, 프로젝트 작업을 조율할 수 있습니다.",refresh:"새로고침",goal:"목표",goalPlaceholder:"예: 인증 화면을 단일 포트 배포에 맞게 수정하고 오류를 수집한 뒤 lint와 typecheck로 검증합니다.",mode:"실행 모드",systemPlan:"시스템 계획",noMode:"선택된 모드 없음",loadingPlan:"에이전트 계획을 불러오는 중입니다.",start:"팀 시작",starting:"시작 중",needAgent:"CLI 워커를 하나 이상 활성화하세요.",startFailed:"워크플로를 시작할 수 없습니다.",cliControl:"CLI 팀 제어",enabledCount:"{{count}}개 활성",enabled:"활성",disabled:"비활성",history:"기록",emptyHistory:"아직 실행 기록이 없습니다. 목표를 작성하고 에이전트를 시작하세요.",steps:"{{done}}/{{total}} 단계",notSelected:"선택된 실행 없음",notSelectedDescription:"이전 실행을 선택하거나 새 목표를 시작하세요. 에이전트 메시지, 오류, 변경 요약, 미리보기 출력이 여기에 표시됩니다.",loadFailed:"실행 상세를 불러올 수 없습니다.",loadingRun:"실행을 불러오는 중...",agentSteps:"에이전트 단계",noStepOutput:"단계 출력이 없습니다.",agentMessages:"에이전트 메시지",noAgentMessages:"이 에이전트는 아직 메시지를 생성하지 않았습니다. 실행이 실패했다면 실제 CLI 오류가 위에 표시됩니다.",outputs:"출력",noOutputs:"변경 요약, 미리보기 또는 명령 출력이 아직 없습니다.",open:"열기",artifact:{fileDiff:"변경 요약",previewUrl:"미리보기",commandOutput:"명령 출력"},role:{user:"사용자",agent:"에이전트"},status:{queued:"대기 중",running:"실행 중",completed:"완료",failed:"오류",canceled:"취소됨",skipped:"건너뜀"},nodes:{codex_review:"Codex 검토",gemini_review:"Gemini 검토",claude_review:"Claude 검토",claude_code_review:"Claude 검토",cursor_review:"Cursor 검토",aggregate:"집계",architect:"계획",implement:"구현",review:"검토",proposal:"제안",critique:"비판",response:"응답",judge:"결정",coordinator:"코디네이터",final_report:"최종 보고서"},workflows:{multi_model_review:{name:"멀티 모델 검토",description:"활성화된 CLI 에이전트가 같은 목표를 개별 검토한 뒤 활성 에이전트가 결과를 집계합니다."},sequential_handoff:{name:"순차 핸드오프",description:"에이전트가 순서대로 계획, 구현, 검토합니다. 비활성 CLI 단계는 건너뜁니다."},adversarial_debate:{name:"의사결정 토론",description:"에이전트가 제안, 비판, 응답하고 최종 권고를 생성합니다."},agent_team:{name:"에이전트 팀",description:"코디네이터가 목표와 활성 CLI 인스턴스를 읽고 작업을 배정한 뒤 결과를 모읍니다."}},adapters:{"claude-code":{label:"Claude Code",role:"CLI 워커"},cursor:{label:"Cursor",role:"CLI 워커"},codex:{label:"Codex",role:"CLI 워커"},gemini:{label:"Gemini",role:"CLI 워커"},qwen:{label:"Qwen Code",role:"CLI 워커"},opencode:{label:"OpenCode",role:"CLI 워커"}},activeCount:"{{active}}/{{total}} 활성",teamHint:"각 행은 하나의 CLI 워커입니다. Claude, Codex, Cursor, Gemini, Qwen, OpenCode 워커를 여러 개 만들고 각각 다른 작업을 줄 수 있습니다.",parallelLimit:"병렬 제한",addAgent:"{{agent}} 추가",duplicateAgent:"{{agent}} 복제",removeAgent:"{{agent}} 제거",assignment:"배정",assignmentPlaceholder:"선택 사항: 이 워커가 맡을 일을 정확히 적으세요. 비워 두면 코디네이터가 목표에 따라 배정합니다.",agentInstance:"{{name}} #{{number}}",taskTitle:"작업",taskTitlePlaceholder:"기능 구현",taskDescription:"설명",taskDescriptionPlaceholder:"범위, 제약, 기대 출력",addTask:"추가",runTask:"실행",cancelTask:"취소",dispatchTask:"작업 배정",adapter:"어댑터",isolation:"격리",dispatch:"배정",auto:"자동",waitingForStream:"스트림 대기 중...",workflow:"워크플로",input:"입력",taskStates:{todo:"할 일",in_progress:"진행 중",in_review:"검토 중",done:"완료",failed:"실패",canceled:"취소됨"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},stop:"팀 중지",stopping:"중지 중",cancelFailed:"워크플로를 중지할 수 없습니다.",needRoles:"이 모드에서는 다음 역할에 최소 한 명의 활성 에이전트를 할당해야 합니다: {{roles}}.",quickPrompts:{label:"빠른 프롬프트:",liveTrading:{label:"8024 라이브 트레이딩 화면",prompt:"안녕하세요. 작은 프로젝트를 만들고 이후 8024 포트에서 실행해 주세요. Binance FAPI와 연결된 TradingView 스타일 디자인, TradingView 차트, 왼쪽 별표/즐겨찾기 시스템을 원합니다. 작업을 논리적으로 나누고 프로세스를 자동으로 관리해 주세요."}},teamHistory:"팀 기록",changeSummary:"변경 요약",noChangeSummary:"최종 요약이 아직 준비되지 않았습니다. 에이전트가 완료되면 읽기 쉬운 Markdown 요약이 여기에 표시됩니다.",prepareTeamFromReport:"이 보고서로 에이전트 팀 준비",prepareTeamTitle:"에이전트 팀 프롬프트 준비",prepareTeamDescription:"토론 결과가 새 Agent Team 프롬프트로 변환되었습니다. 수정한 뒤 Agent Team 모드로 이동할 수 있습니다.",usePreparedPrompt:"프롬프트 사용",reportToPromptPrefix:"아래 토론/결정 보고서를 바탕으로 에이전트 팀을 준비하고 실행하세요. 요구사항을 작업으로 나누고 사용 가능한 CLI 에이전트에 적절한 할당을 제안한 뒤, 사용자 확인 후 시작하세요.",generatedSummaryTitle:"자동 실행 요약",summaryStatus:"전체 상태",summarySteps:"완료된 단계",summaryFailures:"실패한 단계",summaryCanceled:"취소된 단계",summaryDiffs:"Diff/변경 출력",summaryPreviews:"미리보기 출력",summaryErrorPrefix:"오류",assignedWork:"할당된 작업",autoAssigned:"자동 / 코디네이터 결정",stages:{coordinator:"코디네이터",handoff:"인계",backend:"백엔드",frontend:"프론트엔드",implementation:"구현",review:"리뷰",repair:"수정",proposal:"제안",critique:"비판",response:"응답",decision:"결정",report:"보고서",final_report:"최종 보고서"},agentRole:"단계",agentRoles:{auto:"자동",backend:"백엔드",frontend:"프론트엔드",review:"테스트 / 리뷰",implementation:"구현",proposal:"제안",critique:"비판",response:"응답",decision:"결정 / 보고서",report:"보고서",custom:"사용자 지정"},customRolePlaceholder:"예: 보안, 모바일 UX, DB 아키텍처",roleHints:{default:"비워두면 코디네이터가 목표에 따라 이 에이전트에 할당합니다.",agent_team:"백엔드, 프론트엔드, 리뷰 단계를 선택하거나 자동으로 둘 수 있습니다.",multi_model_review:"활성 에이전트가 리뷰합니다. 보고서 역할을 선택하면 해당 에이전트가 최종 요약을 모읍니다.",sequential_handoff:"에이전트는 선택한 순서대로 실행됩니다. 작업 문구가 각 단계의 범위를 정의합니다.",adversarial_debate:"결정 토론에서는 단계 선택이 선택사항입니다. 비워두면 시스템이 선택된 에이전트를 순서대로 제안, 비판, 응답에 배정합니다."},soloAgent:"{{agent}}만 실행",soloAgentShort:"단독",cliSettings:"CLI 설정",workspaceTarget:"대상 작업 영역",workspaceTargets:{selectedProject:"선택한 프로젝트",pixcodeApp:"Pixcode 시스템",custom:"사용자 지정 경로"},customWorkspacePlaceholder:"/path/to/project",workspaceTargetHint:"에이전트 실행 위치: {{path}}",autoDetect:"자동 감지",needWorkspacePath:"사용자 지정 작업 영역 경로를 입력하세요.",quickWorkspaceCheck:"워크스페이스 점검"},Mle=JSON.parse('{"title":"컨트롤 룸","subtitle":"{{target}}의 프로덕션, 플랫폼, 관리, 감사, 셀프 호스티드 접근","thisServer":"이 서버","refresh":"새로고침","nav":{"overview":"개요","production":"프로덕션","admin":"관리","team":"팀","secrets":"시크릿","marketplace":"마켓플레이스","eval":"평가","usage":"사용량","security":"보안","access":"접근"},"overview":{"title":"v1.46 launch surface","description":"Every box below is backed by a v1.44-v1.45 API and is now visible from the UI.","latestAuditEvents":"Latest audit events","remoteAccessOptions":"Remote access options"},"metrics":{"issueRuns":"Issue-to-PR runs","reviewItems":"Review items","subUsers":"Sub-users","collaborators":"Collaborators","secrets":"Scoped secrets","marketplace":"Marketplace","evalRuns":"Eval runs","securityAudits":"Security audits","attention":"Attention","running":"Running","needsAttention":"Needs attention","runningNow":"Running now","reviews":"Reviews","checkpoints":"Checkpoints","roles":"Roles","auditEvents":"Audit events","scopedSecrets":"Scoped secrets","auditRuns":"Audit runs","findings":"Findings","usageRows":"Usage rows","evalSuites":"Eval suites"},"sections":{"production":{"title":"Production loop","description":"Start issue-to-PR runs, parse CI failures, review changes, schedule background jobs, and create checkpoints."},"admin":{"title":"관리 시스템","description":"셀프 호스티드 Pixcode 서버에서 하위 사용자를 만들고 계정을 비활성화하며 활동을 확인합니다."},"team":{"title":"프로젝트 협업자","description":"모두를 전역 관리자로 만들지 않고 프로젝트별 partner, worker, reviewer, viewer를 지정합니다."},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"셀프 호스티드 접근","description":"고정 도메인이 없으면 Tailscale을 사용하고, 안정적인 공개 URL에는 Cloudflare Tunnel/custom domain을 설정합니다."}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Create sub-user","rolePermissions":"Role permissions","addCollaborator":"Add collaborator","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Remote access setup"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Queue run","parseFailure":"Parse failure","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Create user","disable":"Disable","enable":"Enable","addCollaborator":"Add collaborator","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Save access path","checkUrl":"Check URL","checkTailscale":"Check Tailscale"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"협업자가 접근하는 방법","stepUsers":"하위 사용자 만들기","stepUsersDescription":"Admin system에서 member, viewer, project_worker, project_partner 같은 전역 역할로 사용자를 만듭니다.","stepRole":"프로젝트 역할 지정","stepRoleDescription":"같은 사용자를 프로젝트 협업자로 추가해 선택한 프로젝트만 보고 실행하게 합니다.","stepLink":"접근 경로 공유","stepLinkDescription":"Self-hosted access에 설정된 Tailscale, Cloudflare Tunnel, custom domain 또는 LAN URL을 공유합니다.","paths":"사용 가능한 접근 링크"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operations","description":"Runs, reviews, approvals, scheduler, checkpoints"},"people":{"label":"People","description":"Admins, collaborators, roles, activity"},"access":{"label":"Access","description":"LAN, Tailscale, tunnel, domain guidance"},"security":{"label":"Security","description":"Secrets, permission risk, audit checks"},"insights":{"label":"Insights","description":"Usage, evaluations, marketplace health"}},"context":{"title":"What this means","recommendedNextStep":"Recommended next step","runTimeline":"Run timeline","runTimelineDescription":"Readable activity feed for agents, reviewers, checkpoints, and audit events.","emptyTimelineTitle":"No run timeline yet","emptyTimelineDescription":"Run activity appears here after issue runs, reviews, checkpoints, or audit events are recorded.","serverSignal":"Server signal","serverSignalDescription":"The first screen avoids raw backend sections and shows only current status."},"operations":{"runTimeline":"Run timeline","runTimelineDescription":"Readable actor, action, and result history without raw JSON.","noActivityTitle":"No activity yet","noActivityDescription":"Issue runs, review decisions, checkpoints, and audit events will appear here as a vertical timeline.","actionQueue":"Action queue","actionQueueDescription":"Review items are shown as mobile-friendly rows instead of a cramped table.","noReviewItemsTitle":"No review items","noReviewItemsDescription":"Create a review item when changed files need an accept/fix decision.","reviewRequested":"Review requested","changedFiles":"{{count}} changed files","accept":"Accept"},"people":{"projectCollaborators":"Project collaborators","projectCollaboratorsDescription":"Project partners and workers are not global admins. They get scoped access to assigned projects.","noCollaboratorsTitle":"No collaborators yet","noCollaboratorsDescription":"Create a sub-user first, then assign that person to a project role.","project":"Project","roleScoped":"role scoped","auditLog":"Audit log","auditLogDescription":"Search what sub-users, project partners, and workers changed without opening a raw database view.","searchAudit":"Search actor, action, project, or detail","noAuditMatchTitle":"No audit events match","noAuditMatchDescription":"User and project access activity appears here after actions are recorded.","system":"system","auditEvent":"Audit event","advancedTitle":"Advanced people management","advancedDescription":"Create users and assign project roles only when needed."},"access":{"openSettings":"Open Settings > Access","lanTitle":"LAN and local","lanDescription":"Use when the browser is on the same machine or network. Start here before private or public tunnels.","tailscaleTitle":"Tailscale private access","tailscaleDescription":"Best when a team needs private access without exposing Pixcode publicly. The UI should guide install, login, and URL sharing.","cloudflareTitle":"Cloudflare or custom domain","cloudflareDescription":"Best when users need a stable HTTPS URL. Configure the tunnel/domain once and share it with assigned users.","howUsersConnect":"How users connect","howUsersConnectDescription":"This keeps Access understandable for non-technical users.","stepUserTitle":"Create the user","stepUserDescription":"Add them in People so the server knows who they are.","stepRoleTitle":"Assign project role","stepRoleDescription":"Give them project access{{projectSuffix}}.","stepUrlTitle":"Share one URL","stepUrlDescription":"Use a LAN, Tailscale, Cloudflare Tunnel, or custom domain URL from Settings > Access."},"security":{"secretVault":"Secret vault","secretVaultDescription":"Rows show scope, target, and redacted env names. Values stay hidden.","noSecretsTitle":"No secrets stored","noSecretsDescription":"Store provider, project, workflow, Telegram, or API env values from the advanced form.","global":"global","advancedTitle":"Advanced security actions","advancedDescription":"Store scoped env values or queue audit checks."},"insights":{"usageSummary":"Usage summary","usageSummaryDescription":"Provider metrics are stacked as cards on mobile instead of forcing a wide table.","noUsageTitle":"No usage events yet","noUsageDescription":"Usage appears after provider or workflow events are recorded.","provider":"provider","usageRowDescription":"{{tokens}} tokens - {{cost}} - {{latency}}ms avg","errorRate":"{{rate}}% errors","marketplaceHealth":"Marketplace health","marketplaceHealthDescription":"MCP servers, workflow templates, provider adapters, and notification channels stay visible without crowding the overview.","noMarketplaceTitle":"No marketplace entries","noMarketplaceDescription":"Register entries only when a plugin or workflow template is ready to install.","noSourceConfigured":"No source configured","unknown":"unknown","advancedTitle":"Advanced insight actions","advancedDescription":"Record usage, create evaluation suites, or register marketplace entries."},"recommendations":{"attention":"Open Operations first. Clear reviews, errors, failed evals, or security findings before starting new work.","access":"Open Settings > Access and save the one URL your users should use. Then assign project roles in People.","people":"Create sub-users first, assign project roles second, then share an access path.","security":"Store secrets with the smallest scope that works, then run a permission or secret scan.","insights":"Compare provider cost, latency, and eval pass rate before changing model defaults.","operations":"Review Running now and the timeline. If nothing needs attention, start the next issue-to-PR or scheduled job."}}'),Fle={title:"VS Code 워크벤치",noProject:"선택된 프로젝트 없음",activity:{explorer:"탐색기",projects:"프로젝트",sourceControl:"소스 제어",terminal:"터미널",showPanel:"왼쪽 패널 표시",hidePanel:"왼쪽 패널 숨기기"},panels:{explorer:"탐색기",projects:"프로젝트",sourceControl:"소스 제어",terminal:"터미널",editor:"편집기",cli:"CLI",rightTerminal:"터미널"},editor:{emptyTitle:"탐색기에서 파일 열기",closeTab:"{{file}} 닫기",scrollLeft:"탭을 왼쪽으로 스크롤",scrollRight:"탭을 오른쪽으로 스크롤",moreActions:"추가 탭 작업",closeSplit:"분할 편집기 닫기",context:{close:"닫기",closeAll:"모두 닫기",copyPath:"경로 복사",splitRight:"오른쪽으로 분할",splitMoveRight:"오른쪽으로 분할 및 이동"}},resize:{left:"왼쪽 패널 크기 조정",right:"CLI 패널 크기 조정"},menu:{openProject:"프로젝트 열기...",cloneFromGithub:"저장소 클론...",newChat:"새 채팅",openProjects:"프로젝트 열기"},menuBar:{file:"파일",edit:"편집",selection:"선택",view:"보기",go:"이동",run:"실행",terminal:"터미널",help:"도움말",openSettingsPanel:"설정 패널 열기"},projects:{openProject:"프로젝트 열기",cloneFromGithub:"클론",directoryList:"디렉터리",refresh:"프로젝트 새로고침",emptyTitle:"아직 프로젝트 디렉터리가 없습니다",emptyDescription:"로컬 폴더를 열거나 저장소를 클론해서 시작하세요.",selected:"선택됨",startChat:"채팅",fileCount:"{{formattedCount}}개 파일",fileCountPending:"파일 준비 중",startTitle:"Start a Pixcode workspace",startDescription:"Pick a folder and Pixcode will bind the explorer, terminal, and chat history to that workspace.",workHere:"Work in this folder"},workspace:{empty:"Workspace 1을 만들려면 프로젝트를 여세요.",openFirst:"워크스페이스 열기",add:"워크스페이스 추가",scrollLeft:"워크스페이스를 왼쪽으로 스크롤",scrollRight:"워크스페이스를 오른쪽으로 스크롤",close:"{{name}} 닫기",closeAction:"워크스페이스 닫기",closeOthers:"다른 항목 닫기",closeAll:"모두 닫기",rename:"이름 바꾸기",star:"별표",unstar:"별표 해제",toggleStar:"{{name}} 별표",moreActions:"워크스페이스 작업"},cli:{projectScoped:"프로젝트 범위 CLI 터미널",chooseTitle:"CLI 터미널 시작",chooseDescription:"CLI를 선택한 뒤 전체 높이 터미널을 시작합니다.",startSelected:"{{provider}} 시작",newSession:"새 CLI 세션",checking:"확인 중...",ready:"준비됨",notInstalled:"설치되지 않음",installing:"설치 중...",updateAvailable:"{{version}} 업데이트",installProvider:"{{provider}} 설치",updateProvider:"{{provider}} 업데이트",manualInstall:"이 CLI는 수동 설치가 필요합니다.",installNoJob:"설치 작업 ID가 반환되지 않았습니다.",installFailed:"설치 실패.",installStreamLost:"설치 스트림이 일찍 닫혔습니다. 설치가 아직 실행 중일 수 있습니다.",provider:"Provider",installRunning:"설치 중",installDone:"준비됨",installError:"확인이 필요함",showPanel:"CLI 패널 표시",hidePanel:"CLI 패널 숨기기",close:"터미널 닫기"},terminal:{title:"터미널",close:"터미널 닫기"}},zle={title:"원격 콘솔",notSynced:"동기화 안 됨",refresh:"새로 고침",runId:"실행 {{id}}",metrics:{projects:"프로젝트",activeRuns:"활성 실행",approvalQueue:"승인 대기열",webhooks:"웹훅"},sections:{projects:"다중 프로젝트 컨트롤룸",approvals:"승인 대기열",webhooks:"웹훅 상태"},badges:{active:"{{count}}개 활성",approvals:"{{count}}개 승인"},projectStats:{sessions:"{{count}}개 세션",failedRuns:"{{count}}개 실패한 실행",recentRuns:"{{count}}개 최근 실행"},actions:{allow:"허용",deny:"거부"},webhook:{on:"켜짐",off:"꺼짐",ok:"ok",failed:"실패",noDelivery:"아직 전송 없음"},empty:{projects:"사용 가능한 프로젝트가 없습니다.",approvals:"대기 중인 승인이 없습니다.",webhooks:"구성된 웹훅이 없습니다."}},Ble={buttons:Sle,tabs:Cle,status:Nle,messages:Ele,navigation:Tle,common:Ale,time:jle,fileOperations:Rle,mainContent:Ile,fileTree:_le,projectWizard:Lle,notifications:Ple,versionUpdate:Dle,orchestration:Ole,controlRoom:Mle,vscodeWorkbench:Fle,remoteConsole:zle},Ule="설정",$le={account:"계정",permissions:"권한",mcpServers:"MCP 서버",appearance:"외관"},Hle={title:"계정",language:"언어",languageLabel:"표시 언어",languageDescription:"인터페이스에 사용할 언어를 선택하세요",username:"사용자명",email:"이메일",profile:"프로필",changePassword:"비밀번호 변경"},Gle={title:"MCP 서버",addServer:"서버 추가",editServer:"서버 편집",deleteServer:"서버 삭제",serverName:"서버 이름",serverType:"서버 유형",config:"설정",testConnection:"연결 테스트",status:"상태",connected:"연결됨",disconnected:"연결 끊김",scope:{label:"범위",user:"사용자",project:"프로젝트"}},Vle={title:"외관",theme:"테마",codeEditor:"코드 에디터",editorTheme:"에디터 테마",wordWrap:"자동 줄바꿈",showMinimap:"미니맵 표시",lineNumbers:"줄 번호",fontSize:"글꼴 크기"},Wle={saveChanges:"변경사항 저장",resetToDefaults:"기본값으로 초기화",cancelChanges:"변경 취소"},qle={title:"빠른 설정",sections:{appearance:"외관",toolDisplay:"도구 표시",viewOptions:"보기 옵션",inputSettings:"입력 설정",changeAwareness:"제어 센터"},darkMode:"다크 모드",autoExpandTools:"도구 자동 펼치기",showRawParameters:"Raw 파라미터 표시",showThinking:"생각 과정 표시",autoScrollToBottom:"자동 스크롤",sendByCtrlEnter:"Ctrl+Enter로 전송",sendByCtrlEnterDescription:"활성화하면 Enter 대신 Ctrl+Enter로 메시지를 전송합니다. IME 사용자가 실수로 전송하는 것을 방지하는 데 유용합니다.",changeAwareness:"제어 센터",changedFiles:{title:"변경된 파일",description:"로컬 파일 변경을 추적하고 새 변경이 생기면 파일 패널을 엽니다.",noProject:"로컬 변경을 추적할 프로젝트를 선택하세요.",refresh:"변경된 파일 새로고침",empty:"로컬 변경이 없습니다",disabled:"로컬 변경을 보려면 제어 센터를 켜세요.",more:"+{{count}}개 파일 더",lastChecked:"{{value}} 확인",guideTitle:"오른쪽 패널 가이드",guideFiles:"변경된 파일은 파일 패널에서 초록색으로 빛납니다.",guidePanel:"새 변경은 분할 패널을 자동으로 엽니다.",status:{M:"M",A:"A",D:"D",U:"U"}},dragHandle:{dragging:"드래그 핸들",closePanel:"설정 패널 닫기",openPanel:"설정 패널 열기",draggingStatus:"드래그 중...",toggleAndMove:"클릭하여 토글, 드래그하여 이동"}},Kle={title:"터미널 단축키",sectionKeys:"키",sectionNavigation:"탐색",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"위쪽 화살표",arrowDown:"아래쪽 화살표",scrollDown:"아래로 스크롤",handle:{closePanel:"단축키 패널 닫기",openPanel:"단축키 패널 열기"}},Yle={label:"설정",agents:"에이전트",appearance:"외관",git:"Git",apiTokens:"API & 토큰",notifications:"알림",plugins:"플러그인",mobile:"모바일에서 사용",telegram:"Telegram",about:"정보",access:"접근"},Zle={title:"알림",description:"수신할 알림 이벤트를 설정합니다.",webPush:{title:"웹 푸시 알림",enable:"푸시 알림 활성화",disable:"푸시 알림 비활성화",enabled:"푸시 알림이 활성화되었습니다",loading:"업데이트 중...",unsupported:"이 브라우저에서는 푸시 알림이 지원되지 않습니다.",denied:"푸시 알림이 차단되었습니다. 브라우저 설정에서 허용해 주세요."},events:{title:"이벤트 유형",actionRequired:"작업 필요",stop:"실행 중지",error:"실행 실패"}},Xle={darkMode:{label:"다크 모드",description:"라이트/다크 테마 전환"},projectSorting:{label:"프로젝트 정렬",description:"사이드바에서 프로젝트 정렬 방식",alphabetical:"알파벳순",recentActivity:"최근 활동순"},codeEditor:{title:"코드 에디터",theme:{label:"에디터 테마",description:"코드 에디터의 기본 테마"},wordWrap:{label:"자동 줄바꿈",description:"에디터에서 기본적으로 자동 줄바꿈 활성화"},showMinimap:{label:"미니맵 표시",description:"Diff 보기에서 쉬운 탐색을 위한 미니맵 표시"},lineNumbers:{label:"줄 번호 표시",description:"에디터에 줄 번호 표시"},fontSize:{label:"글꼴 크기",description:"에디터 글꼴 크기 (픽셀)"}}},Jle={title:{add:"MCP 서버 추가",edit:"MCP 서버 편집"},importMode:{form:"폼 입력",json:"JSON 가져오기"},scope:{label:"범위",userGlobal:"사용자 (전역)",projectLocal:"프로젝트 (로컬)",userDescription:"사용자 범위: 모든 프로젝트에서 사용 가능",projectDescription:"로컬 범위: 선택한 프로젝트에서만 사용 가능",cannotChange:"기존 서버를 편집할 때는 범위를 변경할 수 없습니다"},fields:{serverName:"서버 이름",transportType:"전송 유형",command:"명령어",arguments:"인수 (한 줄에 하나씩)",jsonConfig:"JSON 설정",url:"URL",envVars:"환경 변수 (KEY=value, 한 줄에 하나씩)",headers:"헤더 (KEY=value, 한 줄에 하나씩)",selectProject:"프로젝트 선택..."},placeholders:{serverName:"my-server"},validation:{missingType:"필수 항목 누락: type",stdioRequiresCommand:"stdio 유형은 command 필드가 필요합니다",httpRequiresUrl:"{{type}} 유형은 url 필드가 필요합니다",invalidJson:"잘못된 JSON 형식",jsonHelp:"MCP 서버 설정을 JSON 형식으로 붙여넣으세요. 예시:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"설정 상세 ({{configFile}}에서)",projectPath:"경로: {{path}}",actions:{cancel:"취소",saving:"저장 중...",addServer:"서버 추가",updateServer:"서버 업데이트"}},Qle={success:"설정이 저장되었습니다!",error:"설정 저장 실패",saving:"저장 중..."},ece={save:"설정 저장",cancel:"취소"},tce={title:"Git 설정",description:"커밋을 위한 Git 정보를 설정합니다. 이 설정은 git config --global로 전역 적용됩니다",name:{label:"Git 이름",help:"Git 커밋에 사용될 이름"},email:{label:"Git 이메일",help:"Git 커밋에 사용될 이메일"},actions:{save:"설정 저장",saving:"저장 중..."},status:{success:"저장 완료"}},nce={title:"API 키",description:"다른 애플리케이션에서 외부 API에 접근하기 위한 API 키를 생성합니다.",newKey:{alertTitle:"⚠️ API 키를 저장하세요",alertMessage:"이 키는 지금만 볼 수 있습니다. 안전하게 보관하세요.",iveSavedIt:"저장했습니다"},form:{placeholder:"API 키 이름 (예: Production Server)",createButton:"생성",cancelButton:"취소"},newButton:"새 API 키",empty:"생성된 API 키가 없습니다.",list:{created:"생성일:",lastUsed:"마지막 사용:"},confirmDelete:"이 API 키를 삭제하시겠습니까?",status:{active:"활성",inactive:"비활성"},github:{title:"GitHub 토큰",description:"외부 API를 통해 비공개 저장소를 clone하기 위한 GitHub Personal Access Token을 추가합니다.",descriptionAlt:"비공개 저장소를 clone하기 위한 GitHub Personal Access Token을 추가합니다. 저장하지 않고 API 요청에 직접 토큰을 전달할 수도 있습니다.",addButton:"토큰 추가",form:{namePlaceholder:"토큰 이름 (예: Personal Repos)",tokenPlaceholder:"GitHub Personal Access Token (ghp_...)",descriptionPlaceholder:"설명 (선택사항)",addButton:"토큰 추가",cancelButton:"취소",howToCreate:"GitHub Personal Access Token 생성 방법 →"},empty:"추가된 GitHub 토큰이 없습니다.",added:"추가일:",confirmDelete:"이 GitHub 토큰을 삭제하시겠습니까?"},apiDocsLink:"API 문서",documentation:{title:"외부 API 문서",description:"외부 API를 사용하여 애플리케이션에서 Claude/Cursor 세션을 트리거하는 방법을 알아보세요.",viewLink:"API 문서 보기 →"},loading:"로딩 중...",version:{updateAvailable:"업데이트 가능: v{{version}}"}},rce={authStatus:{checking:"확인 중...",connected:"연결됨",notConnected:"연결되지 않음",disconnected:"연결 끊김",checkingAuth:"인증 상태 확인 중...",loggedInAs:"{{email}}(으)로 로그인됨",authenticatedUser:"인증된 사용자"},account:{claude:{description:"Anthropic Claude AI 어시스턴트"},cursor:{description:"Cursor AI 기반 코드 에디터"},codex:{description:"OpenAI Codex AI 어시스턴트"},gemini:{description:"Google Gemini AI 어시스턴트"},qwen:{description:"Alibaba Qwen Code CLI (Gemini CLI 포크)"}},connectionStatus:"연결 상태",login:{title:"로그인",reAuthenticate:"재인증",description:"AI 기능을 활성화하려면 {{agent}} 계정에 로그인하세요",reAuthDescription:"다른 계정으로 로그인하거나 자격 증명을 새로고침하세요",button:"로그인",reLoginButton:"재로그인"},error:"오류: {{error}}",providersLabel:"Providers",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} is not installed",notInstalledDescription:"Pixcode couldn't find the {{binary}} binary on this host. Install it first and then come back to log in.",installing:"Installing...",installNow:"Install now",copyCommand:"Copy install command",copy:"Copy",copied:"Copied",qwenDocs:"View the Qwen Code docs",complete:"Install complete",failed:"Install failed",output:"Output",cancel:"Cancel",dismiss:"Dismiss",doneHint:"Refresh this tab or try Login to check the new install.",continueToLogin:"Continue to Login",errors:{missingJobId:"Server did not return a job id",failedToStart:"Install failed to start",unreadableStatus:"Install ended with an unreadable status",streamLost:"Lost connection to install stream. The install may still be running on the server."}}},ace={title:"권한 설정",skipPermissions:{label:"권한 확인 건너뛰기 (주의해서 사용)",claudeDescription:"--dangerously-skip-permissions 플래그와 동일",cursorDescription:"Cursor CLI의 -f 플래그와 동일",opencodeDescription:"OpenCode의 --dangerously-skip-permissions 플래그와 동일"},allowedTools:{title:"허용된 도구",description:"권한 확인 없이 자동으로 허용되는 도구",placeholder:'예: "Bash(git log:*)" 또는 "Write"',quickAdd:"자주 쓰는 도구 빠른 추가:",empty:"설정된 허용 도구 없음"},blockedTools:{title:"차단된 도구",description:"권한 확인 없이 자동으로 차단되는 도구",placeholder:'예: "Bash(rm:*)"',empty:"설정된 차단 도구 없음"},allowedCommands:{title:"허용된 Shell 명령어",description:"권한 확인 없이 자동으로 허용되는 Shell 명령어",placeholder:'예: "Shell(ls)" 또는 "Shell(git status)"',quickAdd:"자주 쓰는 명령어 빠른 추가:",empty:"설정된 허용 명령어 없음"},blockedCommands:{title:"차단된 Shell 명령어",description:"자동으로 차단되는 Shell 명령어",placeholder:'예: "Shell(rm -rf)" 또는 "Shell(sudo)"',empty:"설정된 차단 명령어 없음"},toolExamples:{title:"도구 패턴 예시:",bashGitLog:"- 모든 git log 명령어 허용",bashGitDiff:"- 모든 git diff 명령어 허용",write:"- 모든 Write 도구 사용 허용",bashRm:"- 모든 rm 명령어 차단 (위험)"},shellExamples:{title:"Shell 명령어 예시:",ls:"- ls 명령어 허용",gitStatus:"- git status 허용",npmInstall:"- npm install 허용",rmRf:"- 재귀 삭제 차단"},opencodeAllowed:{title:"허용된 Bash 패턴",description:"OpenCode가 확인 없이 자동 승인하는 Bash 명령 패턴",placeholder:'예: "git *" 또는 "npm test"',quickAdd:"자주 쓰는 패턴 빠른 추가:",empty:"허용 패턴이 없습니다"},opencodeBlocked:{title:"차단된 Bash 패턴",description:"OpenCode가 항상 거부하는 Bash 명령 패턴",placeholder:'예: "rm -rf *" 또는 "sudo *"',empty:"차단 패턴이 없습니다"},opencodeExamples:{title:"패턴 예시:",gitAll:"- 모든 git 명령 허용",gitPush:"- git push만 차단",rmRf:"- 재귀 삭제 차단",npm:"- 모든 npm 명령 허용"},codex:{permissionMode:"권한 모드",description:"Codex가 파일 수정 및 명령어 실행을 처리하는 방식을 제어합니다",modes:{default:{title:"기본",description:"신뢰할 수 있는 명령어(ls, cat, grep, git status 등)만 자동 실행됩니다. 다른 명령어는 건너뜁니다. 워크스페이스에 쓰기 가능."},acceptEdits:{title:"편집 허용",description:"워크스페이스 내에서 모든 명령어가 자동 실행됩니다. 샌드박스 내 완전 자동 모드."},bypassPermissions:{title:"권한 우회",description:"제한 없는 전체 시스템 접근. 모든 명령어가 전체 디스크 및 네트워크 접근 권한으로 자동 실행됩니다. 주의해서 사용하세요."}},technicalDetails:"기술 상세",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted. 신뢰할 수 있는 명령어: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find(-exec 제외) 등.",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never. 프로젝트 디렉토리 내에서 모든 명령어 자동 실행.",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never. 전체 시스템 접근, 신뢰할 수 있는 환경에서만 사용하세요.",overrideNote:"채팅 인터페이스의 모드 버튼을 사용하여 세션별로 재정의할 수 있습니다."}},actions:{add:"추가"}},ice={title:"MCP 서버",description:{claude:"Model Context Protocol 서버는 Claude에 추가 도구와 데이터 소스를 제공합니다",cursor:"Model Context Protocol 서버는 Cursor에 추가 도구와 데이터 소스를 제공합니다",codex:"Model Context Protocol 서버는 Codex에 추가 도구와 데이터 소스를 제공합니다"},addButton:"MCP 서버 추가",empty:"설정된 MCP 서버 없음",serverType:"유형",scope:{local:"로컬",user:"사용자"},config:{command:"명령어",url:"URL",args:"인수",environment:"환경"},tools:{title:"도구",count:"({{count}}):",more:"+{{count}}개 더"},actions:{edit:"서버 편집",delete:"서버 삭제"},help:{title:"Codex MCP 정보",description:"Codex는 stdio 기반 MCP 서버를 지원합니다. 추가 도구와 리소스로 Codex의 기능을 확장하는 서버를 추가할 수 있습니다."}},sce={title:"플러그인",description:"커스텀 플러그인으로 인터페이스를 확장하세요. git에서 설치하거나 ~/.pixcode/plugins/ 폴더에 직접 추가할 수 있습니다.",installPlaceholder:"https://github.com/user/my-plugin",installButton:"설치",installing:"설치 중…",securityWarning:"소스 코드를 검토했거나 신뢰할 수 있는 작성자의 플러그인만 설치하세요.",scanningPlugins:"플러그인 스캔 중…",noPluginsInstalled:"설치된 플러그인이 없습니다",pullLatest:"git에서 최신 버전 가져오기",noGitRemote:"git 리모트가 없음 — 업데이트 불가",uninstallPlugin:"플러그인 삭제",confirmUninstall:"다시 클릭하여 확인",confirmUninstallMessage:"{{name}} 플러그인을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",cancel:"취소",remove:"삭제",updateFailed:"업데이트 실패",installFailed:"설치 실패",uninstallFailed:"삭제 실패",toggleFailed:"토글 실패",buildYourOwn:"나만의 플러그인 만들기",starter:"스타터",docs:"문서",starterPlugin:{name:"프로젝트 통계",badge:"스타터",description:"프로젝트의 파일 수, 코드 라인 수, 파일 유형별 분석 및 최근 활동을 확인합니다.",install:"설치"},morePlugins:"더 보기",enable:"활성화",disable:"비활성화",installAriaLabel:"플러그인 git 저장소 URL",tab:"탭",runningStatus:"실행 중"},oce={title:"접속",description:"이 셀프 호스팅 Pixcode 서버에 접속하는 방법을 선택합니다. 먼저 같은 네트워크에서 확인하고, 원격 접속은 보안 터널, Tailscale 또는 자체 도메인을 사용합니다.",refresh:"새로고침",copy:"복사",copied:"복사됨",save:"접속 경로 저장",check:"URL 확인",qrAlt:"{{url}} QR",guide:{title:"먼저 접속 방식을 선택",description:"네트워크 용어를 몰라도 됩니다. 상황에 맞는 항목을 고르고 링크를 복사하거나 휴대폰으로 QR을 스캔하세요."},options:{sameNetwork:{title:"같은 Wi-Fi/LAN",description:"기기가 Pixcode 서버와 같은 공유기 또는 사무실 네트워크에 있을 때 사용합니다."},secureTunnel:{title:"임시 공개 링크",description:"Cloudflare/ngrok 터널을 시작하면 Pixcode가 공개 URL과 QR을 보여줍니다."},tailscale:{title:"비공개 팀 링크",description:"공개 도메인이나 라우터 설정 없이 비공개 접속이 필요할 때 사용합니다."},customDomain:{title:"자체 도메인",description:"HTTPS, 리버스 프록시 또는 Cloudflare Tunnel 호스트명이 이미 있을 때 사용합니다."}},status:{ready:"준비됨",detecting:"감지 중",guided:"가이드",configured:"설정됨",optional:"선택 사항"},links:{title:"사용 가능한 링크",description:"접속할 기기 또는 팀원에게 맞는 URL을 복사합니다.",local:"로컬",tailscale:"Tailscale 비공개 링크",empty:"아직 감지된 접속 링크가 없습니다."},local:{title:"같은 네트워크 접속",description:"첫 테스트에 가장 좋습니다. 같은 Wi-Fi 또는 LAN에서 QR을 스캔하거나 링크를 복사합니다.",thisDevice:"이 컴퓨터에서만",loading:"같은 네트워크 링크 감지 중...",empty:"LAN 링크를 찾지 못했습니다. 네트워크 연결을 확인하고 새로고침하세요.",saveLabel:"같은 네트워크 접속",save:"이 LAN 링크 저장"},tunnel:{title:"보안 터널",description:"고정 도메인이 없어도 Pixcode가 cloudflared 또는 ngrok을 실행하고 공개 URL을 표시할 수 있습니다.",secureLink:"공개 링크와 QR",help:"시작을 누르세요. cloudflared 또는 ngrok이 설치되어 있으면 Pixcode가 임시 HTTPS 주소와 QR을 만듭니다.",running:"터널 실행 중",start:"터널 시작",stop:"터널 중지",save:"이 터널 URL 저장",saveLabel:"보안 터널 접속",qrLabel:"보안 터널",installTitle:"터널 설정 필요",installNeeded:"먼저 cloudflared 또는 ngrok을 설치한 뒤 다시 터널을 시작하세요."},tailscale:{title:"Tailscale 비공개 접속",description:"Tailscale은 선택형 비공개 네트워크 앱입니다. 서버와 사용자 기기에 설치하고 같은 팀으로 로그인하면 Pixcode가 비공개 URL을 감지합니다.",save:"이 Tailscale URL 저장",saveLabel:"Tailscale 비공개 접속",openInstall:"Tailscale 설치 열기",steps:{installServer:"Pixcode가 실행되는 컴퓨터 또는 서버에 Tailscale을 설치합니다.",installUserDevice:"Pixcode를 열 휴대폰, 노트북 또는 팀원 기기에 Tailscale을 설치합니다.",login:"두 기기에서 같은 Tailscale 계정 또는 팀으로 로그인합니다.",refresh:"여기로 돌아와 새로고침을 누르면 Pixcode가 비공개 URL을 보여줍니다."},installCommand:"Install command",installDevice:"Install on this device",signIn:"Sign in with Tailscale",actionDone:"Done",needsAttention:"Needs attention",openLogin:"Open Tailscale login"},advanced:{title:"고급: 고정 도메인",description:"LAN URL, Tailscale URL, Cloudflare Tunnel 호스트명 또는 HTTPS 도메인이 이미 있을 때 저장합니다.",badge:"고급"},setup:{title:"고정 접속 경로",description:"사용자가 사용할 URL을 저장합니다. LAN, Tailscale, Cloudflare Tunnel 또는 자체 도메인이 될 수 있습니다."},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"자체 도메인"},fields:{label:"라벨",url:"URL",port:"대상 포트",mode:"Mode"},health:{reachable:"Pixcode에 접속할 수 있습니다",unreachable:"Pixcode에 접속할 수 없습니다"},configured:{title:"저장된 접속 경로",description:"이 경로는 역할에 따라 관리자, 프로젝트 파트너, 프로젝트 작업자에게 제공됩니다.",empty:"저장된 접속 경로가 없습니다.",noUrl:"URL 없음",public:"공개",private:"비공개"},team:{title:"사용자 접속 방법",description:"Admin system에서 사용자를 만들고 Control Room에서 프로젝트 역할을 지정한 뒤 Access URL을 공유하세요. 지정된 프로젝트에는 전체 관리자 권한이 필요하지 않습니다."}},lce={title:"Diagnostics",description:"Provider health, WebSocket state, notifications, active runs, and recent errors.",refresh:"Refresh",copyBundle:"Copy bundle",copied:"Copied",runtime:"Runtime",waiting:"Waiting for diagnostics",websocket:"WebSocket",activeClients:"active clients",recentErrors:"Recent errors",redactedBundle:"redacted support bundle",providers:"Providers",notChecked:"not checked",emptyProviders:"Provider health has not been collected yet.",status:{unknown:"unknown",loading:"loading",ok:"ok",available:"available",configured:"configured",missing:"missing",failed:"failed"}},cce={tagline:"Open-source AI coding assistant interface",checkFailedShort:"Check failed",starOnGitHub:"Star on GitHub",docs:"Docs",hosted:{title:"Try Pixcode Hosted",description:"Team collaboration, shared MCP configs, settings sync across environments, and managed infrastructure.",learnMore:"Learn more"},proFeatures:{title:"Pixcode Pro Features",syncSettings:{title:"Sync Settings",description:"Keep your preferences, MCP configs, and theme in sync across all your environments."},teamManagement:{title:"Team Management",description:"Multiple users, role-based access, and shared projects for your team."}},license:"Licensed under AGPL-3.0",relativeTime:{justNow:"just now",secondsAgo:"{{count}}s ago",minutesAgo:"{{count}}m ago",hoursAgo:"{{count}}h ago"}},dce={title:Ule,tabs:$le,account:Hle,mcp:Gle,appearance:Vle,actions:Wle,quickSettings:qle,terminalShortcuts:Kle,mainTabs:Yle,notifications:Zle,appearanceSettings:Xle,mcpForm:Jle,saveStatus:Qle,footerActions:ece,git:tce,apiKeys:nce,agents:rce,permissions:ace,mcpServers:ice,pluginSettings:sce,access:oce,diagnostics:lce,about:cce},uce={title:"다시 오신 것을 환영합니다",description:"Pixcode 계정에 로그인하세요",username:"사용자명",password:"비밀번호",submit:"로그인",loading:"로그인 중...",errors:{invalidCredentials:"사용자명 또는 비밀번호가 잘못되었습니다",requiredFields:"모든 항목을 입력해주세요",networkError:"네트워크 오류. 다시 시도해주세요."},placeholders:{username:"사용자명을 입력하세요",password:"비밀번호를 입력하세요"}},pce={title:"계정 생성",username:"사용자명",password:"비밀번호",confirmPassword:"비밀번호 확인",submit:"계정 생성",loading:"계정 생성 중...",errors:{passwordMismatch:"비밀번호가 일치하지 않습니다",usernameTaken:"이미 사용 중인 사용자명입니다",weakPassword:"비밀번호가 너무 약합니다"}},mce={title:"로그아웃",confirm:"정말 로그아웃하시겠습니까?",button:"로그아웃"},hce={login:uce,register:pce,logout:mce},fce={title:"프로젝트",newProject:"새 프로젝트",deleteProject:"프로젝트 제거",renameProject:"프로젝트 이름 변경",noProjects:"프로젝트가 없습니다",loadingProjects:"프로젝트 로딩 중...",searchPlaceholder:"프로젝트 검색...",projectNamePlaceholder:"프로젝트 이름",starred:"즐겨찾기",all:"전체",untitledSession:"제목 없는 세션",newSession:"새 세션",codexSession:"Codex 세션",fetchingProjects:"Claude 프로젝트와 세션을 가져오는 중",projects:"프로젝트",detectedFromHistory:"기록에서 감지됨",noMatchingProjects:"일치하는 프로젝트 없음",tryDifferentSearch:"검색어를 변경해보세요",runClaudeCli:"프로젝트 디렉토리에서 Claude CLI를 실행하여 시작하세요"},gce={title:"Pixcode",subtitle:"AI 코딩 어시스턴트 UI"},bce={title:"세션",newSession:"새 세션",deleteSession:"세션 삭제",renameSession:"세션 이름 변경",noSessions:"세션이 없습니다",loadingSessions:"세션 로딩 중...",unnamed:"이름 없음",loading:"로딩 중...",showMore:"더 많은 세션 보기"},xce={viewEnvironments:"환경 보기",hideSidebar:"사이드바 숨기기",createProject:"새 프로젝트 생성",refresh:"프로젝트 및 세션 새로고침 (Ctrl+R)",renameProject:"프로젝트 이름 변경 (F2)",deleteProject:"사이드바에서 프로젝트 제거 (Delete)",addToFavorites:"즐겨찾기에 추가",removeFromFavorites:"즐겨찾기에서 제거",editSessionName:"세션 이름 직접 편집",deleteSession:"이 세션 영구 삭제",save:"저장",cancel:"취소"},vce={chat:"채팅",files:"파일",git:"Git",terminal:"터미널",tasks:"작업"},yce={refresh:"새로고침",settings:"설정",collapseAll:"모두 접기",expandAll:"모두 펼치기",cancel:"취소",save:"저장",delete:"삭제",rename:"이름 변경",joinCommunity:"커뮤니티 참여",reportIssue:"문제 신고",starOnGithub:"GitHub에서 스타",controlRoom:"컨트롤 룸",controlRoomDescription:"관리, 접근, 실행"},wce={openSource:"오픈 소스"},kce={active:"활성",inactive:"비활성",thinking:"생각 중...",error:"오류",aborted:"중단됨",unknown:"알 수 없음"},Sce={justNow:"방금 전",oneMinuteAgo:"1분 전",minutesAgo:"{{count}}분 전",oneHourAgo:"1시간 전",hoursAgo:"{{count}}시간 전",oneDayAgo:"1일 전",daysAgo:"{{count}}일 전"},Cce={deleteConfirm:"정말 삭제하시겠습니까?",renameSuccess:"이름이 변경되었습니다",deleteSuccess:"삭제되었습니다",errorOccurred:"오류가 발생했습니다",deleteSessionConfirm:"이 세션을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",deleteProjectConfirm:"사이드바에서 이 프로젝트를 제거하시겠습니까? 프로젝트 파일, 메모리 및 세션 데이터는 삭제되지 않습니다.",enterProjectPath:"프로젝트 경로를 입력해주세요",deleteSessionFailed:"세션 삭제 실패. 다시 시도해주세요.",deleteSessionError:"세션 삭제 오류. 다시 시도해주세요.",renameSessionFailed:"세션 이름 변경 실패. 다시 시도해주세요.",renameSessionError:"세션 이름 변경 오류. 다시 시도해주세요.",deleteProjectFailed:"프로젝트 제거 실패. 다시 시도해주세요.",deleteProjectError:"프로젝트 제거 오류. 다시 시도해주세요.",createProjectFailed:"프로젝트 생성 실패. 다시 시도해주세요.",createProjectError:"프로젝트 생성 오류. 다시 시도해주세요."},Nce={updateAvailable:"업데이트 가능"},Ece={deleteProject:"프로젝트 제거",deleteSession:"세션 삭제",confirmDelete:"이 프로젝트를 어떻게 하시겠습니까:",sessionCount_one:"이 프로젝트에는 {{count}}개의 대화가 있습니다.",sessionCount_other:"이 프로젝트에는 {{count}}개의 대화가 있습니다.",removeFromSidebar:"사이드바에서만 제거",deleteAllData:"모든 데이터 영구 삭제",allConversationsDeleted:"프로젝트가 사이드바에서 제거됩니다. 파일, 메모리 및 세션 데이터는 보존됩니다.",cannotUndo:"나중에 프로젝트를 다시 추가할 수 있습니다."},Tce={section:"오케스트레이션",fallbackTitle:"오케스트레이션 실행"},Ace={projects:fce,app:gce,sessions:bce,tooltips:xce,navigation:vce,actions:yce,branding:wce,status:kce,time:Sce,messages:Cce,version:Nce,deleteConfirmation:Ece,orchestration:Tce},jce={copy:"복사",copied:"복사됨",copyCode:"코드 복사"},Rce={copy:"메시지 복사",copied:"메시지 복사됨",selectFormat:"복사 형식 선택",copyAsMarkdown:"마크다운으로 복사",copyAsText:"텍스트로 복사"},Ice={user:"U",error:"오류",tool:"도구",claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code"},_ce={settings:"도구 설정",error:"도구 오류",result:"도구 결과",viewParams:"입력 파라미터 보기",viewRawParams:"Raw 파라미터 보기",viewDiff:"편집 Diff 보기:",creatingFile:"새 파일 생성:",updatingTodo:"Todo 리스트 업데이트",read:"읽기",readFile:"파일 읽기",updateTodo:"Todo 리스트 업데이트",readTodo:"Todo 리스트 읽기",searchResults:"결과"},Lce={found:"{{count}}개의 {{type}} 발견",file:"파일",files:"파일",pattern:"패턴:",in:"위치:"},Pce={updated:"파일이 업데이트되었습니다",created:"파일이 생성되었습니다",written:"파일이 작성되었습니다",diff:"Diff",newFile:"새 파일",viewContent:"파일 내용 보기",viewFullOutput:"전체 출력 보기 ({{count}}자)",contentDisplayed:"파일 내용이 위의 Diff 보기에 표시됩니다"},Dce={title:"대화형 프롬프트",waiting:"CLI에서 응답을 기다리는 중",instruction:"Claude가 실행 중인 터미널에서 옵션을 선택해주세요.",selectedOption:"✓ Claude가 옵션 {{number}}을(를) 선택했습니다",instructionDetail:"CLI에서 화살표 키 또는 숫자를 입력하여 이 옵션을 대화형으로 선택합니다."},Oce={title:"생각 중...",emoji:"💭 생각 중..."},Mce={response:"JSON 응답"},Fce={grant:"{{tool}}에 대한 권한 부여",added:"권한이 추가되었습니다",addTo:"{{entry}}을(를) 허용된 도구에 추가합니다.",retry:"권한이 저장되었습니다. 도구를 사용하려면 요청을 재시도하세요.",error:"권한을 업데이트할 수 없습니다. 다시 시도해주세요.",openSettings:"설정 열기"},zce={updated:"Todo 리스트가 업데이트되었습니다",current:"현재 Todo 리스트"},Bce={viewPlan:"📋 구현 계획 보기",title:"구현 계획"},Uce={resetAt:"Claude 사용량 한도에 도달했습니다. 한도는 **{{time}} {{timezone}}** - {{date}}에 초기화됩니다"},$ce={permissionMode:"권한 모드",modes:{default:"기본 모드",acceptEdits:"편집 허용",bypassPermissions:"권한 우회",plan:"Plan 모드"},descriptions:{default:"신뢰할 수 있는 명령어(ls, cat, grep, git status 등)만 자동 실행됩니다. 다른 명령어는 건너뜁니다. 워크스페이스에 쓰기 가능.",acceptEdits:"워크스페이스 내에서 모든 명령어가 자동 실행됩니다. 샌드박스 내 완전 자동 모드.",bypassPermissions:"제한 없는 전체 시스템 접근. 모든 명령어가 전체 디스크 및 네트워크 접근 권한으로 자동 실행됩니다. 주의해서 사용하세요.",plan:"계획 모드 - 명령어가 실행되지 않습니다"},technicalDetails:"기술 상세"},Hce={placeholder:"/를 입력하여 명령어, @를 입력하여 파일, 또는 {{provider}}에게 무엇이든 물어보세요...",placeholderDefault:"메시지를 입력하세요...",disabled:"입력 비활성화",attachFiles:"파일 첨부",attachImages:"이미지 첨부",send:"전송",stop:"중지",clickToChangeMode:"클릭하여 권한 모드 변경 (또는 입력창에서 Tab)",showAllCommands:"모든 명령어 보기",clearInput:"입력 지우기",scrollToBottom:"맨 아래로 스크롤"},Gce={selector:{title:"Thinking 모드",description:"확장된 thinking은 Claude에게 대안을 평가할 시간을 더 줍니다",active:"활성",tip:"높은 thinking 모드는 시간이 더 걸리지만 더 철저한 분석을 제공합니다"},modes:{none:{name:"Standard",description:"일반 Claude 응답",prefix:""},think:{name:"Think",description:"기본 확장 thinking",prefix:"think"},thinkHard:{name:"Think Hard",description:"더 철저한 평가",prefix:"think hard"},thinkHarder:{name:"Think Harder",description:"대안을 포함한 심층 분석",prefix:"think harder"},ultrathink:{name:"Ultrathink",description:"최대 thinking 예산",prefix:"ultrathink"}},buttonTitle:"Thinking 모드: {{mode}}"},Vce={title:"AI 어시스턴트 선택",description:"새 대화를 시작할 프로바이더를 선택하세요",selectModel:"모델 선택",statusUnavailable:"상태를 확인할 수 없음",statusRetryHint:"이 CLI를 확인하지 못했습니다. 다시 시도하려면 누르세요.",retryStatus:"상태 다시 확인",providerInfo:{anthropic:"Anthropic 제공",openai:"OpenAI 제공",cursorEditor:"AI 코드 에디터",google:"Google 제공"},readyPrompt:{claude:"{{model}} 모델로 Claude를 사용할 준비가 되었습니다. 아래에 메시지를 입력하세요.",cursor:"{{model}} 모델로 Cursor를 사용할 준비가 되었습니다. 아래에 메시지를 입력하세요.",codex:"{{model}} 모델로 Codex를 사용할 준비가 되었습니다. 아래에 메시지를 입력하세요.",gemini:"{{model}} 모델로 Gemini를 사용할 준비가 되었습니다. 아래에 메시지를 입력하세요.",default:"시작하려면 위에서 제공자를 선택하세요"}},Wce={continue:{title:"대화 계속하기",description:"코드에 대해 질문하거나, 변경을 요청하거나, 개발 작업에 도움을 받으세요"},loading:{olderMessages:"이전 메시지 로딩 중...",sessionMessages:"세션 메시지 로딩 중..."},messages:{showingOf:"{{total}}개 중 {{shown}}개 표시",scrollToLoad:"위로 스크롤하여 더 로드",showingLast:"마지막 {{count}}개 메시지 표시 (총 {{total}}개)",loadEarlier:"이전 메시지 로드",loadAll:"모든 메시지 로드",loadingAll:"모든 메시지 로딩 중...",allLoaded:"모든 메시지 로드 완료",perfWarning:'모든 메시지가 로드됨 - 스크롤이 느려질 수 있습니다. "맨 아래로 스크롤"을 클릭하면 성능이 복구됩니다.'}},qce={selectProject:{title:"프로젝트 선택",description:"해당 디렉토리에서 대화형 Shell을 열 프로젝트를 선택하세요"},status:{newSession:"새 세션",initializing:"초기화 중...",restarting:"재시작 중..."},actions:{disconnect:"연결 끊기",disconnectTitle:"Shell 연결 끊기",restart:"재시작",restartTitle:"Shell 재시작 (먼저 연결 끊기)",connect:"Shell에서 계속",connectTitle:"Shell에 연결"},loading:"터미널 로딩 중...",connecting:"Shell에 연결 중...",startSession:"새 Claude 세션 시작",startProviderSession:"새 {{provider}} 세션 시작",resumeSession:"세션 재개: {{displayName}}...",runCommand:"{{projectName}}에서 {{command}} 실행",startCli:"{{projectName}}에서 Claude CLI 시작",startProviderCli:"{{projectName}}에서 {{provider}} 시작",defaultCommand:"명령어"},Kce={actions:{thinking:"Thinking",processing:"Processing",analyzing:"Analyzing",working:"Working",computing:"Computing",reasoning:"Reasoning"},state:{live:"Live",paused:"Paused"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}m {{seconds}}s",label:"{{time}} elapsed",startingNow:"Starting now"},controls:{stopGeneration:"Stop Generation",pressEscToStop:"Press Esc anytime to stop"},providers:{assistant:"Assistant"}},Yce={startChatWithProvider:"{{provider}}와 채팅을 시작하려면 프로젝트를 선택하세요"},Zce={nextTaskPrompt:"다음 작업 시작"},Xce={codeBlock:jce,copyMessage:Rce,messageTypes:Ice,tools:_ce,search:Lce,fileOperations:Pce,interactive:Dce,thinking:Oce,json:Mce,permissions:Fce,todo:zce,plan:Bce,usageLimit:Uce,codex:$ce,input:Hce,thinkingMode:Gce,providerSelection:Vce,session:Wce,shell:qce,claudeStatus:Kce,projectSelection:Yce,tasks:Zce},Jce={changes:"변경사항",previousChange:"이전 변경",nextChange:"다음 변경",hideDiff:"Diff 하이라이트 숨기기",showDiff:"Diff 하이라이트 표시",settings:"에디터 설정",collapse:"에디터 접기",expand:"에디터 전체 너비로 펼치기"},Qce="{{fileName}} 로딩 중...",ede={showingChanges:"변경사항 표시"},tde={download:"파일 다운로드",save:"저장",saving:"저장 중...",saved:"저장됨!",exitFullscreen:"전체화면 종료",fullscreen:"전체화면",close:"닫기"},nde={lines:"줄:",characters:"문자:",shortcuts:"Ctrl+S로 저장 • Esc로 닫기"},rde={title:"바이너리 파일",message:'파일 "{{fileName}}"은(는) 바이너리 파일이므로 텍스트 편집기에서 표시할 수 없습니다.'},ade={toolbar:Jce,loading:Qce,header:ede,actions:tde,footer:nde,binaryFile:rde},ide={save:"保存",cancel:"取消",delete:"删除",create:"创建",edit:"编辑",close:"关闭",confirm:"确认",submit:"提交",retry:"重试",refresh:"刷新",search:"搜索",clear:"清除",copy:"复制",download:"下载",upload:"上传",browse:"浏览"},sde={chat:"聊天",shell:"终端",files:"文件",git:"源代码管理",changes:"更改",liveView:"实时预览",tasks:"任务",remote:"远程",controlRoom:"控制",orchestration:"编排"},ode={loading:"加载中...",success:"成功",error:"错误",failed:"失败",pending:"待处理",completed:"已完成",inProgress:"进行中"},lde={savedSuccessfully:"保存成功",deletedSuccessfully:"删除成功",updatedSuccessfully:"更新成功",operationFailed:"操作失败",networkError:"网络错误,请检查您的连接。",unauthorized:"未授权,请登录。",notFound:"未找到",invalidInput:"输入无效",requiredField:"此字段为必填项",unknownError:"发生未知错误"},cde={settings:"设置",home:"首页",back:"返回",next:"下一步",previous:"上一步",logout:"退出登录"},dde={language:"语言",theme:"主题",darkMode:"深色模式",lightMode:"浅色模式",name:"名称",description:"描述",enabled:"已启用",disabled:"已禁用",optional:"可选",version:"版本",select:"选择",selectAll:"全选",deselectAll:"取消全选"},ude={justNow:"刚刚",minutesAgo:"{{count}} 分钟前",hoursAgo:"{{count}} 小时前",daysAgo:"{{count}} 天前",yesterday:"昨天"},pde={newFile:"新建文件",newFolder:"新建文件夹",rename:"重命名",move:"移动",copyPath:"复制路径",openInEditor:"在编辑器中打开"},mde={loading:"正在加载 Pixcode",settingUpWorkspace:"正在设置您的工作空间...",chooseProject:"选择您的项目",selectProjectDescription:"从侧边栏选择一个项目以开始使用 Claude 进行编程。每个项目包含您的聊天会话和文件历史。",tip:"提示",createProjectMobile:"点击上方的菜单按钮以访问项目",createProjectDesktop:"点击侧边栏中的文件夹图标以创建新项目",newSession:"新会话",untitledSession:"未命名会话",projectFiles:"项目文件",landing:{title:"启动 Pixcode 工作区",description:"选择一个项目、开始新聊天,或用一个目标启动编排。编排会管理你选择的 CLI Agent,显示每一步,并直接展示错误。",startOrchestration:"启动编排",startOrchestrationDescription:"自动创建项目,并打开带有 Agent 控制和运行历史的编排界面。",startChat:"开始新聊天",startChatDescription:"自动创建文件夹,并用单个 Agent 打开普通聊天界面。",sidebarHint:"从侧边栏选择现有项目时,聊天历史、文件、git 状态、任务和编排会保留在同一个主界面中。"}},hde={loading:"正在加载文件...",files:"文件",simpleView:"简单视图",compactView:"紧凑视图",detailedView:"详细视图",searchPlaceholder:"搜索文件和文件夹...",clearSearch:"清除搜索",name:"名称",size:"大小",modified:"修改时间",permissions:"权限",noFilesFound:"未找到文件",checkProjectPath:"检查项目路径是否可访问",noMatchesFound:"未找到匹配项",tryDifferentSearch:"尝试不同的搜索词或清除搜索",justNow:"刚刚",minAgo:"{{count}} 分钟前",hoursAgo:"{{count}} 小时前",daysAgo:"{{count}} 天前",newFile:"新建文件 (Cmd+N)",newFolder:"新建文件夹 (Cmd+Shift+N)",refresh:"刷新",collapseAll:"全部折叠",context:{rename:"重命名",delete:"删除",copyPath:"复制路径",download:"下载",newFile:"新建文件",newFolder:"新建文件夹",refresh:"刷新",menuLabel:"文件上下文菜单",loading:"加载中..."}},fde={title:"创建新项目",steps:{type:"类型",configure:"配置",confirm:"确认"},step1:{question:"您已经有工作区,还是想创建一个新的工作区?",existing:{title:"现有工作区",description:"我的服务器上已经有工作区,只需要将其添加到项目列表中"},new:{title:"新建工作区",description:"创建一个新工作区,可选择从 GitHub 仓库克隆"},githubClone:{title:"从 GitHub 克隆",description:"选择目标文件夹并将仓库克隆到其中"},subfolder:{title:"创建子文件夹",description:"选择父文件夹并在其中创建新的子文件夹"}},step2:{existingPath:"工作区路径",newPath:"工作区路径",subfolderParentPath:"父文件夹",subfolderParentHelp:"将创建新子文件夹的父文件夹路径",subfolderName:"子文件夹名称",subfolderNameHelp:"将以此名称在父文件夹内创建新文件夹",existingPlaceholder:"/path/to/existing/workspace",newPlaceholder:"/path/to/new/workspace",existingHelp:"您现有工作区目录的完整路径",newHelp:"工作区目录的完整路径",githubUrl:"GitHub URL(可选)",githubPlaceholder:"https://github.com/username/repository",githubHelp:"可选:提供 GitHub URL 以克隆仓库",githubAuth:"GitHub 身份验证(可选)",githubAuthHelp:"仅私有仓库需要。公共仓库无需身份验证即可克隆。",loadingTokens:"正在加载已保存的令牌...",storedToken:"已保存的令牌",newToken:"新令牌",nonePublic:"无(公共)",selectToken:"选择令牌",selectTokenPlaceholder:"-- 选择令牌 --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"此令牌仅用于此操作",publicRepoInfo:"公共仓库不需要身份验证。如果克隆公共仓库,可以跳过提供令牌。",noTokensHelp:"没有可用的已保存令牌。您可以在 设置 → API 密钥 中添加令牌以便重复使用。",optionalTokenPublic:"GitHub 令牌(公共仓库可选)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(公共仓库可留空)"},step3:{reviewConfig:"查看您的配置",workspaceType:"工作区类型:",existingWorkspace:"现有工作区",newWorkspace:"新建工作区",subfolderWorkspace:"新子文件夹",path:"路径:",parentPath:"父路径:",subfolderName:"子文件夹名称:",cloneFrom:"克隆自:",authentication:"身份验证:",usingStoredToken:"使用已保存的令牌:",usingProvidedToken:"使用提供的令牌",noAuthentication:"无身份验证",sshKey:"SSH 密钥",existingInfo:"工作区将被添加到您的项目列表中,并可用于 Claude/Cursor 会话。",newWithClone:"仓库将从此文件夹克隆。",newEmpty:"工作区将被添加到您的项目列表中,并可用于 Claude/Cursor 会话。",subfolderInfo:"将在父文件夹内创建新子文件夹并添加到您的项目列表。",cloningRepository:"正在克隆仓库..."},buttons:{cancel:"取消",back:"返回",next:"下一步",createProject:"创建项目",creating:"创建中...",cloning:"正在克隆..."},errors:{selectType:"请选择您已有现有工作区还是想创建新工作区",providePath:"请提供工作区路径",provideSubfolderName:"请为子文件夹提供一个名称",subfolderNameInvalid:"子文件夹名称不能包含路径分隔符或为 . / ..",failedToCreate:"创建工作区失败",failedToCreateFolder:"创建文件夹失败"}},gde={genericTool:"工具",codes:{generic:{info:{title:"通知"}},permission:{required:{title:"需要处理",body:"{{toolName}} 正在等待你的决策。"}},run:{stopped:{title:"运行已停止",body:"原因:{{reason}}"},failed:{title:"运行失败"}},agent:{notification:{title:"Agent 通知"}}},open:"打开通知",title:"通知",markRead:"已读",close:"关闭通知",dismiss:"关闭通知"},bde={title:"有可用更新",newVersionReady:"新版本已准备就绪",currentVersion:"当前版本",latestVersion:"最新版本",whatsNew:"新内容:",viewFullRelease:"查看完整发布",updateProgress:"更新进度:",manualUpgrade:"手动升级:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:"或点击'立即更新'以自动运行更新。",updateCompleted:"更新成功完成!",restartServer:"请重启服务器以应用更改。",updateFailed:"更新失败",buttons:{close:"关闭",later:"稍后",copyCommand:"复制命令",updateNow:"立即更新",updating:"更新中..."},ariaLabels:{closeModal:"关闭版本升级模态框",showSidebar:"显示侧边栏",settings:"设置",updateAvailable:"有可用更新",closeSidebar:"关闭侧边栏"}},xde={title:"编排",subtitle:"Pixcode 可以为 {{project}} 协调本地检查、测试、终端工作和项目操作。",refresh:"刷新",goal:"目标",goalPlaceholder:"示例:修复认证界面以适配单端口部署,捕获错误,并用 lint 和 typecheck 验证。",mode:"运行模式",systemPlan:"系统计划",noMode:"未选择模式",loadingPlan:"正在加载 Agent 计划。",start:"启动团队",starting:"正在启动",needAgent:"至少启用一个 CLI 工作单元。",startFailed:"无法启动 workflow。",cliControl:"CLI 团队控制",enabledCount:"已启用 {{count}} 个",enabled:"启用",disabled:"禁用",history:"历史",emptyHistory:"还没有运行记录。输入目标并启动 Agent。",steps:"{{done}}/{{total}} 步",notSelected:"未选择运行",notSelectedDescription:"选择以前的运行或启动新目标。Agent 消息、错误、变更摘要和预览输出会显示在这里。",loadFailed:"无法加载运行详情。",loadingRun:"正在加载运行...",agentSteps:"Agent 步骤",noStepOutput:"没有步骤输出。",agentMessages:"Agent 消息",noAgentMessages:"此 Agent 尚未生成消息。如果运行失败,真实 CLI 错误会显示在上方。",outputs:"输出",noOutputs:"还没有变更摘要、预览或命令输出。",open:"打开",artifact:{fileDiff:"变更摘要",previewUrl:"预览",commandOutput:"命令输出"},role:{user:"用户",agent:"Agent"},status:{queued:"排队中",running:"运行中",completed:"已完成",failed:"错误",canceled:"已取消",skipped:"已跳过"},nodes:{codex_review:"Codex 审查",gemini_review:"Gemini 审查",claude_review:"Claude 审查",claude_code_review:"Claude 审查",cursor_review:"Cursor 审查",aggregate:"汇总",architect:"规划",implement:"实现",review:"审查",proposal:"方案",critique:"批评",response:"回应",judge:"决策",coordinator:"协调器",final_report:"最终报告"},workflows:{multi_model_review:{name:"多模型审查",description:"启用的 CLI Agent 会分别审查同一个目标,然后由一个启用的 Agent 汇总结果。"},sequential_handoff:{name:"顺序交接",description:"Agent 按顺序规划、实现并审查。禁用的 CLI 步骤会被跳过。"},adversarial_debate:{name:"决策辩论",description:"Agent 提出方案、批评、回应,并生成最终建议。"},agent_team:{name:"智能体团队",description:"协调器读取目标和已启用的 CLI 实例,分配工作,然后汇总结果。"}},adapters:{"claude-code":{label:"Claude Code",role:"CLI 工作单元"},cursor:{label:"Cursor",role:"CLI 工作单元"},codex:{label:"Codex",role:"CLI 工作单元"},gemini:{label:"Gemini",role:"CLI 工作单元"},qwen:{label:"Qwen Code",role:"CLI 工作单元"},opencode:{label:"OpenCode",role:"CLI 工作单元"}},activeCount:"{{active}}/{{total}} 已启用",teamHint:"每一行都是一个 CLI 工作单元。你可以创建多个 Claude、Codex、Cursor、Gemini、Qwen 或 OpenCode,并为每个单元写不同任务。",parallelLimit:"并行上限",addAgent:"添加 {{agent}}",duplicateAgent:"复制 {{agent}}",removeAgent:"移除 {{agent}}",assignment:"任务分配",assignmentPlaceholder:"可选:明确写下这个工作单元要处理什么。留空则由协调器按目标分配。",agentInstance:"{{name}} #{{number}}",taskTitle:"任务",taskTitlePlaceholder:"实现功能",taskDescription:"描述",taskDescriptionPlaceholder:"范围、约束、预期输出",addTask:"添加",runTask:"运行",cancelTask:"取消",dispatchTask:"分配任务",adapter:"适配器",isolation:"隔离",dispatch:"分配",auto:"自动",waitingForStream:"等待流输出...",workflow:"工作流",input:"输入",taskStates:{todo:"待办",in_progress:"进行中",in_review:"审核中",done:"完成",failed:"失败",canceled:"已取消"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},stop:"停止团队",stopping:"正在停止",cancelFailed:"无法停止工作流。",needRoles:"此模式需要至少为以下角色分配一个已启用的 Agent:{{roles}}。",quickPrompts:{label:"快速提示:",liveTrading:{label:"8024 实时交易界面",prompt:"你好,请创建一个小项目,然后在 8024 端口运行。我需要一个连接 Binance FAPI 的 TradingView 风格设计,包含 TradingView 图表以及左侧星标/收藏系统。请合理拆分工作并自动管理流程。"}},teamHistory:"团队历史",changeSummary:"变更摘要",noChangeSummary:"最终摘要尚未生成。Agent 完成后,这里会显示可读的 Markdown 摘要。",prepareTeamFromReport:"用此报告准备 Agent 团队",prepareTeamTitle:"准备 Agent 团队提示词",prepareTeamDescription:"讨论输出已转换为新的 Agent Team 提示词。你可以编辑它,然后切换到 Agent Team 模式。",usePreparedPrompt:"使用提示词",reportToPromptPrefix:"根据以下讨论/决策报告准备并执行一个 Agent 团队。将需求拆分为任务,为可用 CLI Agent 提出合理分配,并在用户确认后启动。",generatedSummaryTitle:"自动运行摘要",summaryStatus:"整体状态",summarySteps:"已完成步骤",summaryFailures:"失败步骤",summaryCanceled:"已取消步骤",summaryDiffs:"Diff/变更输出",summaryPreviews:"预览输出",summaryErrorPrefix:"错误",assignedWork:"已分配工作",autoAssigned:"自动 / 由协调器决定",stages:{coordinator:"协调器",handoff:"交接",backend:"后端",frontend:"前端",implementation:"实现",review:"审查",repair:"修复",proposal:"提案",critique:"批评",response:"回应",decision:"决策",report:"报告",final_report:"最终报告"},agentRole:"阶段",agentRoles:{auto:"自动",backend:"后端",frontend:"前端",review:"测试 / 审查",implementation:"实现",proposal:"提案",critique:"批评",response:"回应",decision:"决策 / 报告",report:"报告",custom:"自定义"},customRolePlaceholder:"例如:安全、移动端 UX、数据库架构",roleHints:{default:"留空时,协调器会根据目标为此 Agent 分配任务。",agent_team:"可选择后端、前端或审查阶段,也可保持自动。",multi_model_review:"已启用的 Agent 会进行审查;如果选择报告角色,该 Agent 会汇总最终摘要。",sequential_handoff:"Agent 按你选择的顺序运行;任务文本定义每一步的范围。",adversarial_debate:"决策讨论中阶段选择是可选的;留空时系统会按顺序将所选 Agent 分配为提案、批评和回应。"},soloAgent:"仅使用 {{agent}} 运行",soloAgentShort:"单独",cliSettings:"CLI 设置",workspaceTarget:"目标工作区",workspaceTargets:{selectedProject:"已选项目",pixcodeApp:"Pixcode 系统",custom:"自定义路径"},customWorkspacePlaceholder:"/path/to/project",workspaceTargetHint:"智能体将在此目录运行:{{path}}",autoDetect:"自动检测",needWorkspacePath:"请输入自定义工作区路径。",quickWorkspaceCheck:"工作区检查"},vde=JSON.parse('{"title":"控制室","subtitle":"{{target}} 的生产、平台、管理、审计和自托管访问","thisServer":"此服务器","refresh":"刷新","nav":{"overview":"概览","production":"生产","admin":"管理","team":"团队","secrets":"密钥","marketplace":"市场","eval":"评估","usage":"用量","security":"安全","access":"访问"},"overview":{"title":"v1.46 launch surface","description":"Every box below is backed by a v1.44-v1.45 API and is now visible from the UI.","latestAuditEvents":"Latest audit events","remoteAccessOptions":"Remote access options"},"metrics":{"issueRuns":"Issue-to-PR runs","reviewItems":"Review items","subUsers":"Sub-users","collaborators":"Collaborators","secrets":"Scoped secrets","marketplace":"Marketplace","evalRuns":"Eval runs","securityAudits":"Security audits","attention":"Attention","running":"Running","needsAttention":"Needs attention","runningNow":"Running now","reviews":"Reviews","checkpoints":"Checkpoints","roles":"Roles","auditEvents":"Audit events","scopedSecrets":"Scoped secrets","auditRuns":"Audit runs","findings":"Findings","usageRows":"Usage rows","evalSuites":"Eval suites"},"sections":{"production":{"title":"Production loop","description":"Start issue-to-PR runs, parse CI failures, review changes, schedule background jobs, and create checkpoints."},"admin":{"title":"管理系统","description":"在单个自托管 Pixcode 服务器中创建子用户、禁用账号并查看活动。"},"team":{"title":"项目协作者","description":"按项目分配 partner、worker、reviewer 和 viewer,而不是让所有人成为全局管理员。"},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"自托管访问","description":"没有固定域名时使用 Tailscale,或配置 Cloudflare Tunnel/custom domain 获得稳定公开 URL。"}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Create sub-user","rolePermissions":"Role permissions","addCollaborator":"Add collaborator","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Remote access setup"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Queue run","parseFailure":"Parse failure","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Create user","disable":"Disable","enable":"Enable","addCollaborator":"Add collaborator","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Save access path","checkUrl":"Check URL","checkTailscale":"Check Tailscale"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"协作者如何访问","stepUsers":"创建子用户","stepUsersDescription":"在 Admin system 中用 member、viewer、project_worker 或 project_partner 等全局角色创建此人。","stepRole":"分配项目角色","stepRoleDescription":"将同一用户加入项目协作者,让他们只看到并操作你选择的项目。","stepLink":"共享访问路径","stepLinkDescription":"共享 Self-hosted access 中配置的 Tailscale、Cloudflare Tunnel、custom domain 或 LAN URL。","paths":"可用访问链接"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operations","description":"Runs, reviews, approvals, scheduler, checkpoints"},"people":{"label":"People","description":"Admins, collaborators, roles, activity"},"access":{"label":"Access","description":"LAN, Tailscale, tunnel, domain guidance"},"security":{"label":"Security","description":"Secrets, permission risk, audit checks"},"insights":{"label":"Insights","description":"Usage, evaluations, marketplace health"}},"context":{"title":"What this means","recommendedNextStep":"Recommended next step","runTimeline":"Run timeline","runTimelineDescription":"Readable activity feed for agents, reviewers, checkpoints, and audit events.","emptyTimelineTitle":"No run timeline yet","emptyTimelineDescription":"Run activity appears here after issue runs, reviews, checkpoints, or audit events are recorded.","serverSignal":"Server signal","serverSignalDescription":"The first screen avoids raw backend sections and shows only current status."},"operations":{"runTimeline":"Run timeline","runTimelineDescription":"Readable actor, action, and result history without raw JSON.","noActivityTitle":"No activity yet","noActivityDescription":"Issue runs, review decisions, checkpoints, and audit events will appear here as a vertical timeline.","actionQueue":"Action queue","actionQueueDescription":"Review items are shown as mobile-friendly rows instead of a cramped table.","noReviewItemsTitle":"No review items","noReviewItemsDescription":"Create a review item when changed files need an accept/fix decision.","reviewRequested":"Review requested","changedFiles":"{{count}} changed files","accept":"Accept"},"people":{"projectCollaborators":"Project collaborators","projectCollaboratorsDescription":"Project partners and workers are not global admins. They get scoped access to assigned projects.","noCollaboratorsTitle":"No collaborators yet","noCollaboratorsDescription":"Create a sub-user first, then assign that person to a project role.","project":"Project","roleScoped":"role scoped","auditLog":"Audit log","auditLogDescription":"Search what sub-users, project partners, and workers changed without opening a raw database view.","searchAudit":"Search actor, action, project, or detail","noAuditMatchTitle":"No audit events match","noAuditMatchDescription":"User and project access activity appears here after actions are recorded.","system":"system","auditEvent":"Audit event","advancedTitle":"Advanced people management","advancedDescription":"Create users and assign project roles only when needed."},"access":{"openSettings":"Open Settings > Access","lanTitle":"LAN and local","lanDescription":"Use when the browser is on the same machine or network. Start here before private or public tunnels.","tailscaleTitle":"Tailscale private access","tailscaleDescription":"Best when a team needs private access without exposing Pixcode publicly. The UI should guide install, login, and URL sharing.","cloudflareTitle":"Cloudflare or custom domain","cloudflareDescription":"Best when users need a stable HTTPS URL. Configure the tunnel/domain once and share it with assigned users.","howUsersConnect":"How users connect","howUsersConnectDescription":"This keeps Access understandable for non-technical users.","stepUserTitle":"Create the user","stepUserDescription":"Add them in People so the server knows who they are.","stepRoleTitle":"Assign project role","stepRoleDescription":"Give them project access{{projectSuffix}}.","stepUrlTitle":"Share one URL","stepUrlDescription":"Use a LAN, Tailscale, Cloudflare Tunnel, or custom domain URL from Settings > Access."},"security":{"secretVault":"Secret vault","secretVaultDescription":"Rows show scope, target, and redacted env names. Values stay hidden.","noSecretsTitle":"No secrets stored","noSecretsDescription":"Store provider, project, workflow, Telegram, or API env values from the advanced form.","global":"global","advancedTitle":"Advanced security actions","advancedDescription":"Store scoped env values or queue audit checks."},"insights":{"usageSummary":"Usage summary","usageSummaryDescription":"Provider metrics are stacked as cards on mobile instead of forcing a wide table.","noUsageTitle":"No usage events yet","noUsageDescription":"Usage appears after provider or workflow events are recorded.","provider":"provider","usageRowDescription":"{{tokens}} tokens - {{cost}} - {{latency}}ms avg","errorRate":"{{rate}}% errors","marketplaceHealth":"Marketplace health","marketplaceHealthDescription":"MCP servers, workflow templates, provider adapters, and notification channels stay visible without crowding the overview.","noMarketplaceTitle":"No marketplace entries","noMarketplaceDescription":"Register entries only when a plugin or workflow template is ready to install.","noSourceConfigured":"No source configured","unknown":"unknown","advancedTitle":"Advanced insight actions","advancedDescription":"Record usage, create evaluation suites, or register marketplace entries."},"recommendations":{"attention":"Open Operations first. Clear reviews, errors, failed evals, or security findings before starting new work.","access":"Open Settings > Access and save the one URL your users should use. Then assign project roles in People.","people":"Create sub-users first, assign project roles second, then share an access path.","security":"Store secrets with the smallest scope that works, then run a permission or secret scan.","insights":"Compare provider cost, latency, and eval pass rate before changing model defaults.","operations":"Review Running now and the timeline. If nothing needs attention, start the next issue-to-PR or scheduled job."}}'),yde={title:"VS Code 工作区",noProject:"未选择项目",activity:{explorer:"资源管理器",projects:"项目",sourceControl:"源代码管理",terminal:"终端",showPanel:"显示左侧面板",hidePanel:"隐藏左侧面板"},panels:{explorer:"资源管理器",projects:"项目",sourceControl:"源代码管理",terminal:"终端",editor:"编辑器",cli:"CLI",rightTerminal:"终端"},editor:{emptyTitle:"从资源管理器打开文件",closeTab:"关闭 {{file}}",scrollLeft:"向左滚动标签",scrollRight:"向右滚动标签",moreActions:"更多标签操作",closeSplit:"关闭拆分编辑器",context:{close:"关闭",closeAll:"全部关闭",copyPath:"复制路径",splitRight:"向右拆分",splitMoveRight:"向右拆分并移动"}},resize:{left:"调整左侧面板",right:"调整 CLI 面板"},menu:{openProject:"打开项目...",cloneFromGithub:"克隆仓库...",newChat:"新建聊天",openProjects:"打开项目"},menuBar:{file:"文件",edit:"编辑",selection:"选择",view:"视图",go:"转到",run:"运行",terminal:"终端",help:"帮助",openSettingsPanel:"打开设置面板"},projects:{openProject:"打开项目",cloneFromGithub:"克隆",directoryList:"目录",refresh:"刷新项目",emptyTitle:"还没有项目目录",emptyDescription:"打开本地文件夹或克隆仓库即可开始。",selected:"已选择",startChat:"聊天",fileCount:"{{formattedCount}} 个文件",fileCountPending:"正在准备文件",startTitle:"Start a Pixcode workspace",startDescription:"Pick a folder and Pixcode will bind the explorer, terminal, and chat history to that workspace.",workHere:"Work in this folder"},workspace:{empty:"打开项目以创建 Workspace 1。",openFirst:"打开工作区",add:"添加工作区",scrollLeft:"向左滚动工作区",scrollRight:"向右滚动工作区",close:"关闭 {{name}}",closeAction:"关闭工作区",closeOthers:"关闭其他",closeAll:"全部关闭",rename:"重命名",star:"标星",unstar:"取消标星",toggleStar:"标星 {{name}}",moreActions:"工作区操作"},cli:{projectScoped:"项目范围 CLI 终端",chooseTitle:"启动 CLI 终端",chooseDescription:"选择 CLI,然后启动全高终端。",startSelected:"启动 {{provider}}",newSession:"新建 CLI 会话",checking:"检查中...",ready:"就绪",notInstalled:"未安装",installing:"安装中...",updateAvailable:"更新到 {{version}}",installProvider:"安装 {{provider}}",updateProvider:"更新 {{provider}}",manualInstall:"此 CLI 需要手动安装。",installNoJob:"安装未返回 job id。",installFailed:"安装失败。",installStreamLost:"安装流过早关闭。安装可能仍在运行。",provider:"提供方",installRunning:"正在安装",installDone:"已就绪",installError:"需要处理",showPanel:"显示 CLI 面板",hidePanel:"隐藏 CLI 面板",close:"关闭终端"},terminal:{title:"终端",close:"关闭终端"}},wde={title:"远程控制台",notSynced:"未同步",refresh:"刷新",runId:"运行 {{id}}",metrics:{projects:"项目",activeRuns:"活跃运行",approvalQueue:"审批队列",webhooks:"Webhook"},sections:{projects:"多项目控制室",approvals:"审批队列",webhooks:"Webhook 状态"},badges:{active:"{{count}} 个活跃",approvals:"{{count}} 个审批"},projectStats:{sessions:"{{count}} 个会话",failedRuns:"{{count}} 个失败运行",recentRuns:"{{count}} 个最近运行"},actions:{allow:"允许",deny:"拒绝"},webhook:{on:"开",off:"关",ok:"ok",failed:"失败",noDelivery:"尚无投递"},empty:{projects:"没有可用项目。",approvals:"没有待处理审批。",webhooks:"未配置 Webhook。"}},kde={buttons:ide,tabs:sde,status:ode,messages:lde,navigation:cde,common:dde,time:ude,fileOperations:pde,mainContent:mde,fileTree:hde,projectWizard:fde,notifications:gde,versionUpdate:bde,orchestration:xde,controlRoom:vde,vscodeWorkbench:yde,remoteConsole:wde},Sde="设置",Cde={account:"账户",permissions:"权限",mcpServers:"MCP 服务器",appearance:"外观"},Nde={title:"账户",language:"语言",languageLabel:"显示语言",languageDescription:"选择您偏好的界面语言",username:"用户名",email:"邮箱",profile:"个人资料",changePassword:"修改密码"},Ede={title:"MCP 服务器",addServer:"添加服务器",editServer:"编辑服务器",deleteServer:"删除服务器",serverName:"服务器名称",serverType:"服务器类型",config:"配置",testConnection:"测试连接",status:"状态",connected:"已连接",disconnected:"未连接",scope:{label:"范围",user:"用户",project:"项目"}},Tde={title:"外观",theme:"主题",codeEditor:"代码编辑器",editorTheme:"编辑器主题",wordWrap:"自动换行",showMinimap:"显示缩略图",lineNumbers:"行号",fontSize:"字体大小"},Ade={saveChanges:"保存更改",resetToDefaults:"重置为默认值",cancelChanges:"取消更改"},jde={title:"快速设置",sections:{appearance:"外观",toolDisplay:"工具显示",viewOptions:"视图选项",inputSettings:"输入设置",changeAwareness:"掌控中心"},darkMode:"深色模式",autoExpandTools:"自动展开工具",showRawParameters:"显示原始参数",showThinking:"显示思考过程",autoScrollToBottom:"自动滚动到底部",sendByCtrlEnter:"使用 Ctrl+Enter 发送",sendByCtrlEnterDescription:"启用后,按 Ctrl+Enter 发送消息,而不是仅按 Enter。这对于使用输入法的用户可以避免意外发送。",changeAwareness:"掌控中心",changedFiles:{title:"已更改文件",description:"跟踪本地文件更改,并在出现新更改时打开文件面板。",noProject:"选择一个项目以跟踪本地更改。",refresh:"刷新已更改文件",empty:"未检测到本地更改",disabled:"启用掌控中心以监控本地更改。",more:"还有 {{count}} 个文件",lastChecked:"检查于 {{value}}",guideTitle:"右侧面板指南",guideFiles:"已更改文件会在文件面板中以绿色高亮。",guidePanel:"新更改会自动打开分屏面板。",status:{M:"M",A:"A",D:"D",U:"U"}},dragHandle:{dragging:"正在拖拽手柄",closePanel:"关闭设置面板",openPanel:"打开设置面板",draggingStatus:"正在拖拽...",toggleAndMove:"点击切换,拖拽移动"}},Rde={title:"终端快捷键",sectionKeys:"按键",sectionNavigation:"导航",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"上箭头",arrowDown:"下箭头",scrollDown:"滚动到底部",handle:{closePanel:"关闭快捷键面板",openPanel:"打开快捷键面板"}},Ide={label:"设置",agents:"智能体",appearance:"外观",git:"Git",apiTokens:"API 和令牌",notifications:"通知",plugins:"插件",mobile:"移动端使用",telegram:"Telegram",about:"关于",access:"访问"},_de={title:"通知",description:"控制你希望接收的通知事件。",webPush:{title:"Web 推送通知",enable:"启用推送通知",disable:"关闭推送通知",enabled:"推送通知已启用",loading:"更新中...",unsupported:"此浏览器不支持推送通知。",denied:"推送通知已被阻止,请在浏览器设置中允许。"},events:{title:"事件类型",actionRequired:"需要处理",stop:"运行已停止",error:"运行失败"}},Lde={darkMode:{label:"深色模式",description:"切换浅色和深色主题"},projectSorting:{label:"项目排序",description:"项目在侧边栏中的排列方式",alphabetical:"按字母顺序",recentActivity:"最近活动"},codeEditor:{title:"代码编辑器",theme:{label:"编辑器主题",description:"代码编辑器的默认主题"},wordWrap:{label:"自动换行",description:"在编辑器中默认启用自动换行"},showMinimap:{label:"显示缩略图",description:"在差异视图中显示缩略图以便于导航"},lineNumbers:{label:"显示行号",description:"在编辑器中显示行号"},fontSize:{label:"字体大小",description:"编辑器字体大小(px)"}}},Pde={title:{add:"添加 MCP 服务器",edit:"编辑 MCP 服务器"},importMode:{form:"表单输入",json:"JSON 导入"},scope:{label:"范围",userGlobal:"用户(全局)",projectLocal:"项目(本地)",userDescription:"用户范围:在您机器上的所有项目中可用",projectDescription:"本地范围:仅在选定项目中可用",cannotChange:"编辑现有服务器时无法更改范围"},fields:{serverName:"服务器名称",transportType:"传输类型",command:"命令",arguments:"参数(每行一个)",jsonConfig:"JSON 配置",url:"URL",envVars:"环境变量(KEY=值,每行一个)",headers:"请求头(KEY=值,每行一个)",selectProject:"选择项目..."},placeholders:{serverName:"我的服务"},validation:{missingType:"缺少必填字段:type",stdioRequiresCommand:"stdio 类型需要 command 字段",httpRequiresUrl:"{{type}} 类型需要 url 字段",invalidJson:"无效的 JSON 格式",jsonHelp:"粘贴您的 MCP 服务器配置(JSON 格式)。示例格式:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"配置详细信息(来自 {{configFile}})",projectPath:"路径:{{path}}",actions:{cancel:"取消",saving:"保存中...",addServer:"添加服务器",updateServer:"更新服务器"}},Dde={success:"设置保存成功!",error:"保存设置失败",saving:"保存中..."},Ode={save:"保存设置",cancel:"取消"},Mde={title:"Git 配置",description:"配置您的 git 提交身份。这些设置将通过 git config --global 全局应用",name:{label:"Git 名称",help:"您的 git 提交名称"},email:{label:"Git 邮箱",help:"您的 git 提交邮箱"},actions:{save:"保存配置",saving:"保存中..."},status:{success:"保存成功"}},Fde={title:"API 密钥",description:"生成 API 密钥以从其他应用访问外部 API。",newKey:{alertTitle:"⚠️ 保存您的 API 密钥",alertMessage:"这是您唯一一次看到此密钥。请妥善保存。",iveSavedIt:"我已保存"},form:{placeholder:"API 密钥名称(例如:生产服务器)",createButton:"创建",cancelButton:"取消"},newButton:"新建 API 密钥",empty:"尚未创建 API 密钥。",list:{created:"创建时间:",lastUsed:"最后使用:"},confirmDelete:"确定要删除此 API 密钥吗?",status:{active:"激活",inactive:"未激活"},github:{title:"GitHub 令牌",description:"添加 GitHub 个人访问令牌以通过外部 API 克隆私有仓库。",descriptionAlt:"添加 GitHub 个人访问令牌以克隆私有仓库。您也可以直接在 API 请求中传递令牌而无需存储。",addButton:"添加令牌",form:{namePlaceholder:"令牌名称(例如:个人仓库)",tokenPlaceholder:"GitHub 个人访问令牌(ghp_...)",descriptionPlaceholder:"描述(可选)",addButton:"添加令牌",cancelButton:"取消",howToCreate:"如何创建 GitHub 个人访问令牌 →"},empty:"尚未添加 GitHub 令牌。",added:"添加时间:",confirmDelete:"确定要删除此 GitHub 令牌吗?"},apiDocsLink:"API 文档",documentation:{title:"外部 API 文档",description:"了解如何使用外部 API 从您的应用程序触发 Claude/Cursor 会话。",viewLink:"查看 API 文档 →"},loading:"加载中...",version:{updateAvailable:"有可用更新:v{{version}}"}},zde={authStatus:{checking:"检查中...",connected:"已连接",notConnected:"未连接",disconnected:"已断开",checkingAuth:"正在检查认证状态...",loggedInAs:"登录为 {{email}}",authenticatedUser:"已认证用户"},account:{claude:{description:"Anthropic Claude AI 助手"},cursor:{description:"Cursor AI 驱动的代码编辑器"},codex:{description:"OpenAI Codex AI 助手"},gemini:{description:"Google Gemini AI 助手"},qwen:{description:"阿里巴巴 Qwen Code CLI (Gemini CLI 分支)"}},connectionStatus:"连接状态",login:{title:"登录",reAuthenticate:"重新认证",description:"登录您的 {{agent}} 账户以启用 AI 功能",reAuthDescription:"使用其他账户登录或刷新凭据",button:"登录",reLoginButton:"重新登录"},error:"错误:{{error}}",providersLabel:"Providers",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} is not installed",notInstalledDescription:"Pixcode couldn't find the {{binary}} binary on this host. Install it first and then come back to log in.",installing:"Installing...",installNow:"Install now",copyCommand:"Copy install command",copy:"Copy",copied:"Copied",qwenDocs:"View the Qwen Code docs",complete:"Install complete",failed:"Install failed",output:"Output",cancel:"Cancel",dismiss:"Dismiss",doneHint:"Refresh this tab or try Login to check the new install.",continueToLogin:"Continue to Login",errors:{missingJobId:"Server did not return a job id",failedToStart:"Install failed to start",unreadableStatus:"Install ended with an unreadable status",streamLost:"Lost connection to install stream. The install may still be running on the server."}}},Bde={title:"权限设置",skipPermissions:{label:"跳过权限提示(请谨慎使用)",claudeDescription:"等同于 --dangerously-skip-permissions 标志",cursorDescription:"等同于 Cursor CLI 中的 -f 标志",opencodeDescription:"等同于 OpenCode 的 --dangerously-skip-permissions 标志"},allowedTools:{title:"允许的工具",description:"无需权限提示即可自动使用的工具",placeholder:'例如:"Bash(git log:*)" 或 "Write"',quickAdd:"快速添加常用工具:",empty:"未配置允许的工具"},blockedTools:{title:"禁用的工具",description:"无需权限提示即可自动禁用的工具",placeholder:'例如:"Bash(rm:*)"',empty:"未配置禁用的工具"},allowedCommands:{title:"允许的 Shell 命令",description:"无需权限提示即可自动执行的 Shell 命令",placeholder:'例如:"Shell(ls)" 或 "Shell(git status)"',quickAdd:"快速添加常用命令:",empty:"未配置允许的命令"},blockedCommands:{title:"阻止的 Shell 命令",description:"自动阻止的 Shell 命令",placeholder:'例如:"Shell(rm -rf)" 或 "Shell(sudo)"',empty:"未配置阻止的命令"},toolExamples:{title:"工具模式示例:",bashGitLog:"- 允许所有 git log 命令",bashGitDiff:"- 允许所有 git diff 命令",write:"- 允许所有 Write 工具使用",bashRm:"- 阻止所有 rm 命令(危险)"},shellExamples:{title:"Shell 命令示例:",ls:"- 允许 ls 命令",gitStatus:"- 允许 git status",npmInstall:"- 允许 npm install",rmRf:"- 阻止递归删除"},opencodeAllowed:{title:"允许的 Bash 模式",description:"OpenCode 自动批准、无需提示的 Bash 命令模式",placeholder:'如:"git *" 或 "npm test"',quickAdd:"快速添加常用模式:",empty:"尚未配置允许的模式"},opencodeBlocked:{title:"屏蔽的 Bash 模式",description:"OpenCode 始终拒绝的 Bash 命令模式",placeholder:'如:"rm -rf *" 或 "sudo *"',empty:"尚未配置屏蔽的模式"},opencodeExamples:{title:"模式示例:",gitAll:"- 允许所有 git 命令",gitPush:"- 单独屏蔽 git push",rmRf:"- 屏蔽递归删除",npm:"- 允许所有 npm 命令"},codex:{permissionMode:"权限模式",description:"控制 Codex 如何处理文件修改和命令执行",modes:{default:{title:"默认",description:"只有受信任的命令(ls、cat、grep、git status 等)会自动运行。其他命令将被跳过。可以写入工作区。"},acceptEdits:{title:"接受编辑",description:"所有命令在工作区内自动运行。具有沙箱执行的全自动模式。"},bypassPermissions:{title:"绕过权限",description:"完全系统访问,无任何限制。所有命令自动运行,具有完整的磁盘和网络访问权限。请谨慎使用。"}},technicalDetails:"技术详情",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted。受信任的命令:cat、cd、grep、head、ls、pwd、tail、git status/log/diff/show、find(不带 -exec)等。",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never。所有命令在项目目录内自动执行。",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never。完全系统访问权限,仅在可信环境中使用。",overrideNote:"您可以使用聊天界面中的模式按钮按会话覆盖此设置。"}},actions:{add:"添加"}},Ude={title:"MCP 服务器",description:{claude:"Model Context Protocol 服务器为 Claude 提供额外的工具和数据源",cursor:"Model Context Protocol 服务器为 Cursor 提供额外的工具和数据源",codex:"Model Context Protocol 服务器为 Codex 提供额外的工具和数据源"},addButton:"添加 MCP 服务器",empty:"未配置 MCP 服务器",serverType:"类型",scope:{local:"本地",user:"用户"},config:{command:"命令",url:"URL",args:"参数",environment:"环境变量"},tools:{title:"工具",count:"({{count}}):",more:"还有 {{count}} 个"},actions:{edit:"编辑服务器",delete:"删除服务器"},help:{title:"关于 Codex MCP",description:"Codex 支持基于 stdio 的 MCP 服务器。您可以添加服务器,通过额外的工具和资源来扩展 Codex 的功能。"}},$de={title:"插件",description:"通过自定义插件扩展界面。从 git 安装或直接将文件夹放入 ~/.pixcode/plugins/",installPlaceholder:"https://github.com/user/my-plugin",installButton:"安装",installing:"安装中…",securityWarning:"仅安装您已审查过源代码或信任作者的插件。",scanningPlugins:"正在扫描插件…",noPluginsInstalled:"未安装插件",pullLatest:"从 git 拉取最新内容",noGitRemote:"无 git 远程仓库 — 无法更新",uninstallPlugin:"卸载插件",confirmUninstall:"再次点击确认",confirmUninstallMessage:"移除 {{name}}?此操作无法撤销。",cancel:"取消",remove:"移除",updateFailed:"更新失败",installFailed:"安装失败",uninstallFailed:"卸载失败",toggleFailed:"切换失败",buildYourOwn:"构建您自己的插件",starter:"入门模板",docs:"文档",starterPlugin:{name:"项目统计",badge:"入门",description:"查看项目的文件数、代码行数、文件类型分布以及最近活动。",install:"安装"},morePlugins:"更多",enable:"启用",disable:"禁用",installAriaLabel:"插件 git 仓库 URL",tab:"标签",runningStatus:"运行中"},Hde={title:"访问",description:"选择用户如何访问这个自托管 Pixcode 服务器。先用同一网络验证;需要远程访问时,再使用安全隧道、Tailscale 或自己的域名。",refresh:"刷新",copy:"复制",copied:"已复制",save:"保存访问路径",check:"检查 URL",qrAlt:"{{url}} 的二维码",guide:{title:"先选择连接方式",description:"不需要懂网络术语。选择符合当前场景的方式,复制链接,或用手机扫描二维码。"},options:{sameNetwork:{title:"同一 Wi-Fi/LAN",description:"设备与 Pixcode 服务器在同一路由器、办公室网络或局域网时使用。"},secureTunnel:{title:"临时公开链接",description:"启动 Cloudflare/ngrok 隧道后,Pixcode 会自动显示公开 URL 和二维码。"},tailscale:{title:"团队私有链接",description:"无需公开域名或路由器设置,即可进行私有团队访问。"},customDomain:{title:"自己的域名",description:"已有 HTTPS、反向代理或 Cloudflare Tunnel 主机名时使用。"}},status:{ready:"就绪",detecting:"检测中",guided:"引导",configured:"已配置",optional:"可选"},links:{title:"可用链接",description:"为需要连接的设备或成员复制正确 URL。",local:"本地",tailscale:"Tailscale 私有链接",empty:"尚未检测到访问链接。"},local:{title:"同一网络访问",description:"最适合第一次测试:从同一 Wi-Fi 或 LAN 连接。手机扫码,或复制链接给同网成员。",thisDevice:"仅此电脑",loading:"正在检测同网链接...",empty:"未检测到 LAN 链接。请确认服务器已联网并刷新。",saveLabel:"同一网络访问",save:"保存此 LAN 链接"},tunnel:{title:"安全隧道",description:"没有固定域名时,Pixcode 可以启动 cloudflared 或 ngrok,并在这里显示公开 URL。",secureLink:"公开链接和二维码",help:"点击启动。如果已安装 cloudflared 或 ngrok,Pixcode 会自动创建临时 HTTPS 地址和二维码。",running:"隧道运行中",start:"启动隧道",stop:"停止隧道",save:"保存此隧道 URL",saveLabel:"安全隧道访问",qrLabel:"安全隧道",installTitle:"需要设置隧道",installNeeded:"请先安装 cloudflared 或 ngrok,然后再次启动隧道。"},tailscale:{title:"Tailscale 私有访问",description:"Tailscale 是可选的私有网络应用。安装到服务器和用户设备,并登录同一团队后,Pixcode 会检测私有 URL。",save:"保存此 Tailscale URL",saveLabel:"Tailscale 私有访问",openInstall:"打开 Tailscale 安装",steps:{installServer:"在运行 Pixcode 的电脑或服务器上安装 Tailscale。",installUserDevice:"在要打开 Pixcode 的手机、笔记本或成员设备上安装 Tailscale。",login:"两台设备登录同一个 Tailscale 账号或团队。",refresh:"回到这里点击刷新;准备好后 Pixcode 会显示私有 URL。"},installCommand:"Install command",installDevice:"Install on this device",signIn:"Sign in with Tailscale",actionDone:"Done",needsAttention:"Needs attention",openLogin:"Open Tailscale login"},advanced:{title:"高级:固定域名",description:"已有 LAN URL、Tailscale URL、Cloudflare Tunnel 主机名或 HTTPS 域名时,在这里保存给用户使用。",badge:"高级"},setup:{title:"固定访问路径",description:"保存用户将使用的 URL。可以是 LAN、Tailscale、Cloudflare Tunnel 或自定义域名。"},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"自定义域名"},fields:{label:"标签",url:"URL",port:"目标端口",mode:"Mode"},health:{reachable:"Pixcode 可访问",unreachable:"Pixcode 不可访问"},configured:{title:"已保存的访问路径",description:"这些路径会按角色提供给管理员、项目伙伴和项目工作人员。",empty:"还没有保存访问路径。",noUrl:"无 URL",public:"公开",private:"私有"},team:{title:"用户如何连接",description:"在 Admin system 创建用户,在 Control Room 分配项目角色,然后分享一个 Access URL。访问已分配项目不需要全局管理员权限。"}},Gde={title:"Diagnostics",description:"Provider health, WebSocket state, notifications, active runs, and recent errors.",refresh:"Refresh",copyBundle:"Copy bundle",copied:"Copied",runtime:"Runtime",waiting:"Waiting for diagnostics",websocket:"WebSocket",activeClients:"active clients",recentErrors:"Recent errors",redactedBundle:"redacted support bundle",providers:"Providers",notChecked:"not checked",emptyProviders:"Provider health has not been collected yet.",status:{unknown:"unknown",loading:"loading",ok:"ok",available:"available",configured:"configured",missing:"missing",failed:"failed"}},Vde={tagline:"Open-source AI coding assistant interface",checkFailedShort:"Check failed",starOnGitHub:"Star on GitHub",docs:"Docs",hosted:{title:"Try Pixcode Hosted",description:"Team collaboration, shared MCP configs, settings sync across environments, and managed infrastructure.",learnMore:"Learn more"},proFeatures:{title:"Pixcode Pro Features",syncSettings:{title:"Sync Settings",description:"Keep your preferences, MCP configs, and theme in sync across all your environments."},teamManagement:{title:"Team Management",description:"Multiple users, role-based access, and shared projects for your team."}},license:"Licensed under AGPL-3.0",relativeTime:{justNow:"just now",secondsAgo:"{{count}}s ago",minutesAgo:"{{count}}m ago",hoursAgo:"{{count}}h ago"}},Wde={title:Sde,tabs:Cde,account:Nde,mcp:Ede,appearance:Tde,actions:Ade,quickSettings:jde,terminalShortcuts:Rde,mainTabs:Ide,notifications:_de,appearanceSettings:Lde,mcpForm:Pde,saveStatus:Dde,footerActions:Ode,git:Mde,apiKeys:Fde,agents:zde,permissions:Bde,mcpServers:Ude,pluginSettings:$de,access:Hde,diagnostics:Gde,about:Vde},qde={title:"欢迎回来",description:"登录您的 Pixcode 账户",username:"用户名",password:"密码",submit:"登录",loading:"登录中...",errors:{invalidCredentials:"用户名或密码无效",requiredFields:"请填写所有字段",networkError:"网络错误,请重试。"},placeholders:{username:"输入您的用户名",password:"输入您的密码"}},Kde={title:"创建账户",username:"用户名",password:"密码",confirmPassword:"确认密码",submit:"创建账户",loading:"创建账户中...",errors:{passwordMismatch:"密码不匹配",usernameTaken:"用户名已被占用",weakPassword:"密码强度太弱"}},Yde={title:"退出登录",confirm:"确定要退出登录吗?",button:"退出登录"},Zde={login:qde,register:Kde,logout:Yde},Xde={title:"项目",newProject:"新建项目",deleteProject:"移除项目",renameProject:"重命名项目",noProjects:"未找到项目",loadingProjects:"加载项目中...",searchPlaceholder:"搜索项目...",projectNamePlaceholder:"项目名称",starred:"星标",all:"全部",untitledSession:"未命名会话",newSession:"新会话",codexSession:"Codex 会话",fetchingProjects:"正在获取您的 Claude 项目和会话",projects:"项目",detectedFromHistory:"从历史记录检测",noMatchingProjects:"未找到匹配的项目",tryDifferentSearch:"尝试调整您的搜索词",runClaudeCli:"在项目目录中运行 Claude CLI 以开始使用"},Jde={title:"Pixcode",subtitle:"AI 编程助手"},Qde={title:"会话",newSession:"新建会话",deleteSession:"删除会话",renameSession:"重命名会话",noSessions:"暂无会话",loadingSessions:"加载会话中...",unnamed:"未命名",loading:"加载中...",showMore:"显示更多会话"},eue={viewEnvironments:"查看环境",hideSidebar:"隐藏侧边栏",createProject:"创建新项目",refresh:"刷新项目和会话 (Ctrl+R)",renameProject:"重命名项目 (F2)",deleteProject:"从侧边栏移除项目 (Delete)",addToFavorites:"添加到收藏",removeFromFavorites:"从收藏移除",editSessionName:"手动编辑会话名称",deleteSession:"永久删除此会话",save:"保存",cancel:"取消",clearSearch:"清除搜索"},tue={chat:"聊天",files:"文件",git:"Git",terminal:"终端",tasks:"任务"},nue={refresh:"刷新",settings:"设置",collapseAll:"全部折叠",expandAll:"全部展开",cancel:"取消",save:"保存",delete:"删除",rename:"重命名",joinCommunity:"加入社区",reportIssue:"报告问题",starOnGithub:"在GitHub上加星",controlRoom:"控制室",controlRoomDescription:"管理、访问、运行"},rue={openSource:"开源"},aue={active:"活动",inactive:"非活动",thinking:"思考中...",error:"错误",aborted:"已中止",unknown:"未知"},iue={justNow:"刚刚",oneMinuteAgo:"1 分钟前",minutesAgo:"{{count}} 分钟前",oneHourAgo:"1 小时前",hoursAgo:"{{count}} 小时前",oneDayAgo:"1 天前",daysAgo:"{{count}} 天前"},sue={deleteConfirm:"确定要删除吗?",renameSuccess:"重命名成功",deleteSuccess:"删除成功",errorOccurred:"发生错误",deleteSessionConfirm:"确定要删除此会话吗?此操作无法撤销。",deleteProjectConfirm:"从侧边栏移除此项目?您的项目文件、记忆和会话数据不会被删除。",enterProjectPath:"请输入项目路径",deleteSessionFailed:"删除会话失败,请重试。",deleteSessionError:"删除会话时出错,请重试。",renameSessionFailed:"重命名会话失败,请重试。",renameSessionError:"重命名会话时出错,请重试。",deleteProjectFailed:"移除项目失败,请重试。",deleteProjectError:"移除项目时出错,请重试。",createProjectFailed:"创建项目失败,请重试。",createProjectError:"创建项目时出错,请重试。"},oue={updateAvailable:"有可用更新"},lue={modeProjects:"项目",modeConversations:"对话",conversationsPlaceholder:"搜索对话内容...",searching:"搜索中...",noResults:"未找到结果",tryDifferentQuery:"尝试不同的搜索词",matches_one:"{{count}} 个匹配",matches_other:"{{count}} 个匹配",projectsScanned_one:"{{count}} 个项目已扫描",projectsScanned_other:"{{count}} 个项目已扫描"},cue={deleteProject:"移除项目",deleteSession:"删除会话",confirmDelete:"您想如何处理",sessionCount_one:"此项目包含 {{count}} 个对话。",sessionCount_other:"此项目包含 {{count}} 个对话。",removeFromSidebar:"仅从侧边栏移除",deleteAllData:"永久删除所有数据",allConversationsDeleted:"项目将从侧边栏中移除。您的文件、记忆和会话数据将会保留。",cannotUndo:"您可以稍后重新添加此项目。"},due={section:"编排",fallbackTitle:"编排运行"},uue={projects:Xde,app:Jde,sessions:Qde,tooltips:eue,navigation:tue,actions:nue,branding:rue,status:aue,time:iue,messages:sue,version:oue,search:lue,deleteConfirmation:cue,orchestration:due},pue={copy:"复制",copied:"已复制",copyCode:"复制代码"},mue={copy:"复制消息",copied:"消息已复制",selectFormat:"选择复制格式",copyAsMarkdown:"复制为 Markdown",copyAsText:"复制为纯文本"},hue={user:"U",error:"错误",tool:"工具",claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code"},fue={settings:"工具设置",error:"工具错误",result:"工具结果",viewParams:"查看输入参数",viewRawParams:"查看原始参数",viewDiff:"查看编辑差异",creatingFile:"创建新文件:",updatingTodo:"更新待办事项",read:"读取",readFile:"读取文件",updateTodo:"更新待办列表",readTodo:"读取待办列表",searchResults:"结果"},gue={found:"找到 {{count}} 个{{type}}",file:"文件",files:"文件",pattern:"模式:",in:"在:"},bue={updated:"文件更新成功",created:"文件创建成功",written:"文件写入成功",diff:"差异",newFile:"新文件",viewContent:"查看文件内容",viewFullOutput:"查看完整输出({{count}} 个字符)",contentDisplayed:"文件内容显示在上面的差异视图中"},xue={title:"交互式提示",waiting:"等待您在 CLI 中响应",instruction:"请在 Claude 运行的终端中选择一个选项。",selectedOption:"✓ Claude 选择了选项 {{number}}",instructionDetail:"在 CLI 中,您可以使用方向键或输入数字来交互式地选择此选项。"},vue={title:"思考中...",emoji:"💭 思考中..."},yue={response:"JSON 响应"},wue={grant:"授予 {{tool}} 权限",added:"权限已添加",addTo:"将 {{entry}} 添加到允许的工具。",retry:"权限已保存。重试请求以使用该工具。",error:"无法更新权限。请重试。",openSettings:"打开设置"},kue={updated:"待办列表已成功更新",current:"当前待办列表"},Sue={viewPlan:"📋 查看实施计划",title:"实施计划"},Cue={resetAt:"Claude 使用限制已达到。您的限制将在 **{{time}} {{timezone}}** - {{date}} 重置"},Nue={permissionMode:"权限模式",modes:{default:"默认模式",acceptEdits:"编辑模式",bypassPermissions:"无限制模式",plan:"计划模式"},descriptions:{default:"只有受信任的命令(ls、cat、grep、git status 等)自动运行。其他命令将被跳过。可以写入工作区。",acceptEdits:"工作区内的所有命令自动运行。完全自动模式,具有沙盒执行功能。",bypassPermissions:"完全的系统访问,无限制。所有命令自动运行,具有完整的磁盘和网络访问权限。请谨慎使用。",plan:"计划模式 - 不执行任何命令"},technicalDetails:"技术细节"},Eue={placeholder:"输入 / 调用命令,@ 选择文件,或向 {{provider}} 提问...",placeholderDefault:"输入您的消息...",disabled:"输入已禁用",attachFiles:"附加文件",attachImages:"附加图片",send:"发送",stop:"停止",clickToChangeMode:"点击更改权限模式(或在输入框中按 Tab)",showAllCommands:"显示所有命令",clearInput:"清空输入",scrollToBottom:"滚动到底部"},Tue={selector:{title:"思考模式",description:"扩展思考给 Claude 更多时间来评估替代方案",active:"激活",tip:"更高的思考模式需要更多时间,但提供更彻底的分析"},modes:{none:{name:"标准",description:"常规 Claude 响应",prefix:""},think:{name:"思考",description:"基本扩展思考",prefix:"思考"},thinkHard:{name:"深入思考",description:"更彻底的评估",prefix:"深入思考"},thinkHarder:{name:"更深入思考",description:"考虑替代方案的深度分析",prefix:"更深入思考"},ultrathink:{name:"超级思考",description:"最大思考预算",prefix:"超级思考"}},buttonTitle:"思考模式:{{mode}}"},Aue={title:"选择您的 AI 助手",description:"选择一个供应商以开始新对话",selectModel:"选择模型",statusUnavailable:"状态不可用",statusRetryHint:"无法检查此 CLI。点击重试。",retryStatus:"重试状态",providerInfo:{anthropic:"由 Anthropic 提供",openai:"由 OpenAI 提供",cursorEditor:"AI 代码编辑器",google:"由 Google 提供"},readyPrompt:{claude:"准备好使用带有 {{model}} 的 Claude。请在下方开始输入您的消息。",cursor:"准备好使用带有 {{model}} 的 Cursor。请在下方开始输入您的消息。",codex:"准备好使用带有 {{model}} 的 Codex。请在下方开始输入您的消息。",gemini:"准备好使用带有 {{model}} 的 Gemini。请在下方开始输入您的消息。",default:"请在上方选择一个提供者以开始"}},jue={continue:{title:"继续您的对话",description:"询问有关代码的问题、请求更改或获取开发任务的帮助"},loading:{olderMessages:"正在加载更早的消息...",sessionMessages:"正在加载会话消息..."},messages:{showingOf:"显示 {{shown}} / {{total}} 条消息",scrollToLoad:"向上滚动以加载更多",showingLast:"显示最近 {{count}} 条消息(共 {{total}} 条)",loadEarlier:"加载更早的消息",loadAll:"加载全部消息",loadingAll:"正在加载全部消息...",allLoaded:"全部消息已加载",perfWarning:"已加载全部消息 - 滚动可能变慢。点击「滚动到底部」恢复性能。"}},Rue={selectProject:{title:"选择项目",description:"选择一个项目以在该目录中打开交互式 Shell"},status:{newSession:"新会话",initializing:"初始化中...",restarting:"重启中..."},actions:{disconnect:"断开连接",disconnectTitle:"断开 Shell 连接",restart:"重启",restartTitle:"重启 Shell(请先断开连接)",connect:"在 Shell 中继续",connectTitle:"连接到 Shell"},loading:"正在加载终端...",connecting:"正在连接到 Shell...",startSession:"启动新的 Claude 会话",startProviderSession:"启动新的 {{provider}} 会话",resumeSession:"恢复会话:{{displayName}}...",runCommand:"在 {{projectName}} 中运行 {{command}}",startCli:"在 {{projectName}} 中启动 Claude CLI",startProviderCli:"在 {{projectName}} 中启动 {{provider}}",defaultCommand:"命令"},Iue={actions:{thinking:"Thinking",processing:"Processing",analyzing:"Analyzing",working:"Working",computing:"Computing",reasoning:"Reasoning"},state:{live:"Live",paused:"Paused"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}m {{seconds}}s",label:"{{time}} elapsed",startingNow:"Starting now"},controls:{stopGeneration:"Stop Generation",pressEscToStop:"Press Esc anytime to stop"},providers:{assistant:"Assistant"}},_ue={startChatWithProvider:"选择一个项目以开始与 {{provider}} 聊天"},Lue={nextTaskPrompt:"开始下一个任务"},Pue={codeBlock:pue,copyMessage:mue,messageTypes:hue,tools:fue,search:gue,fileOperations:bue,interactive:xue,thinking:vue,json:yue,permissions:wue,todo:kue,plan:Sue,usageLimit:Cue,codex:Nue,input:Eue,thinkingMode:Tue,providerSelection:Aue,session:jue,shell:Rue,claudeStatus:Iue,projectSelection:_ue,tasks:Lue},Due={changes:"个更改",previousChange:"上一个更改",nextChange:"下一个更改",hideDiff:"隐藏差异高亮",showDiff:"显示差异高亮",settings:"编辑器设置",collapse:"折叠编辑器",expand:"展开编辑器到全宽"},Oue="正在加载 {{fileName}}...",Mue={showingChanges:"显示更改"},Fue={download:"下载文件",save:"保存",saving:"保存中...",saved:"已保存!",exitFullscreen:"退出全屏",fullscreen:"全屏",close:"关闭"},zue={lines:"行数:",characters:"字符数:",shortcuts:"按 Ctrl+S 保存 • Esc 关闭"},Bue={title:"二进制文件",message:'文件 "{{fileName}}" 无法在文本编辑器中显示,因为它是二进制文件。'},Uue={toolbar:Due,loading:Oue,header:Mue,actions:Fue,footer:zue,binaryFile:Bue},$ue={save:"保存",cancel:"キャンセル",delete:"削除",create:"作成",edit:"編集",close:"閉じる",confirm:"確認",submit:"送信",retry:"再試行",refresh:"更新",search:"検索",clear:"クリア",copy:"コピー",download:"ダウンロード",upload:"アップロード",browse:"参照"},Hue={chat:"チャット",shell:"シェル",files:"ファイル",git:"ソース管理",changes:"変更",liveView:"ライブビュー",tasks:"タスク",remote:"リモート",controlRoom:"コントロール",orchestration:"オーケストレーション"},Gue={loading:"読み込み中...",success:"成功",error:"エラー",failed:"失敗",pending:"保留中",completed:"完了",inProgress:"進行中"},Vue={savedSuccessfully:"保存しました",deletedSuccessfully:"削除しました",updatedSuccessfully:"更新しました",operationFailed:"操作に失敗しました",networkError:"ネットワークエラー。接続を確認してください。",unauthorized:"認証されていません。ログインしてください。",notFound:"見つかりません",invalidInput:"入力が無効です",requiredField:"この項目は必須です",unknownError:"不明なエラーが発生しました"},Wue={settings:"設定",home:"ホーム",back:"戻る",next:"次へ",previous:"前へ",logout:"ログアウト"},que={language:"言語",theme:"テーマ",darkMode:"ダークモード",lightMode:"ライトモード",name:"名前",description:"説明",enabled:"有効",disabled:"無効",optional:"任意",version:"バージョン",select:"選択",selectAll:"すべて選択",deselectAll:"すべて解除"},Kue={justNow:"たった今",minutesAgo:"{{count}}分前",hoursAgo:"{{count}}時間前",daysAgo:"{{count}}日前",yesterday:"昨日"},Yue={newFile:"新規ファイル",newFolder:"新規フォルダ",rename:"名前の変更",move:"移動",copyPath:"パスをコピー",openInEditor:"エディタで開く"},Zue={loading:"Pixcode を読み込んでいます",settingUpWorkspace:"ワークスペースを準備しています...",chooseProject:"プロジェクトを選択",selectProjectDescription:"サイドバーからプロジェクトを選択して、Claudeとコーディングを始めましょう。各プロジェクトにはチャットセッションとファイル履歴が含まれています。",tip:"ヒント",createProjectMobile:"上部のメニューボタンからプロジェクトにアクセスできます",createProjectDesktop:"サイドバーのフォルダアイコンをクリックして新しいプロジェクトを作成できます",newSession:"新しいセッション",untitledSession:"無題のセッション",projectFiles:"プロジェクトファイル",landing:{title:"Pixcode ワークスペースを開始",description:"プロジェクトを選ぶか、新しいチャットを始めるか、1つの目標でオーケストレーションを開始できます。オーケストレーションは選択したCLIエージェントを管理し、各ステップとエラーを表示します。",startOrchestration:"オーケストレーションを開始",startOrchestrationDescription:"自動でプロジェクトを作成し、エージェント制御と実行履歴を持つオーケストレーション画面を開きます。",startChat:"新しいチャットを開始",startChatDescription:"フォルダを自動作成し、通常のチャット画面を1つのエージェントで開きます。",sidebarHint:"サイドバーから既存プロジェクトを選ぶと、チャット履歴、ファイル、git状態、タスク、オーケストレーションが同じメイン画面に残ります。"}},Xue={loading:"ファイルを読み込んでいます...",files:"ファイル",simpleView:"シンプル表示",compactView:"コンパクト表示",detailedView:"詳細表示",searchPlaceholder:"ファイルやフォルダを検索...",clearSearch:"検索をクリア",name:"名前",size:"サイズ",modified:"更新日時",permissions:"権限",noFilesFound:"ファイルが見つかりません",checkProjectPath:"プロジェクトのパスがアクセス可能か確認してください",noMatchesFound:"一致するものが見つかりません",tryDifferentSearch:"別の検索語を試すか、検索をクリアしてください",justNow:"たった今",minAgo:"{{count}}分前",hoursAgo:"{{count}}時間前",daysAgo:"{{count}}日前",newFile:"新規ファイル (Cmd+N)",newFolder:"新規フォルダ (Cmd+Shift+N)",refresh:"更新",collapseAll:"すべて折りたたむ",context:{rename:"名前を変更",delete:"削除",copyPath:"パスをコピー",download:"ダウンロード",newFile:"新しいファイル",newFolder:"新しいフォルダ",refresh:"更新",menuLabel:"ファイルのコンテキストメニュー",loading:"読み込み中..."}},Jue={title:"新規プロジェクトを作成",steps:{type:"種類",configure:"設定",confirm:"確認"},step1:{question:"既存のワークスペースがありますか?それとも新しく作成しますか?",existing:{title:"既存のワークスペース",description:"サーバー上に既存のワークスペースがあり、プロジェクト一覧に追加したい"},new:{title:"新しいワークスペース",description:"新しいワークスペースを作成し、必要に応じてGitHubリポジトリからクローンする"},githubClone:{title:"GitHub からクローン",description:"対象フォルダを選び、リポジトリをそこにクローン"},subfolder:{title:"サブフォルダを作成",description:"親フォルダを選び、その中に新しいサブフォルダを作成"}},step2:{existingPath:"ワークスペースのパス",newPath:"ワークスペースのパス",subfolderParentPath:"親フォルダ",subfolderParentHelp:"新しいサブフォルダを作成する親フォルダのパス",subfolderName:"サブフォルダ名",subfolderNameHelp:"この名前のフォルダが親フォルダ内に作成されます",existingPlaceholder:"/path/to/existing/workspace",newPlaceholder:"/path/to/new/workspace",existingHelp:"既存のワークスペースディレクトリのフルパス",newHelp:"ワークスペースディレクトリのフルパス",githubUrl:"GitHub URL(任意)",githubPlaceholder:"https://github.com/username/repository",githubHelp:"任意: リポジトリをクローンするためのGitHub URLを入力してください",githubAuth:"GitHub認証(任意)",githubAuthHelp:"プライベートリポジトリの場合のみ必要です。パブリックリポジトリは認証なしでクローンできます。",loadingTokens:"保存済みトークンを読み込んでいます...",storedToken:"保存済みトークン",newToken:"新しいトークン",nonePublic:"なし(パブリック)",selectToken:"トークンを選択",selectTokenPlaceholder:"-- トークンを選択 --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"このトークンはこの操作にのみ使用されます",publicRepoInfo:"パブリックリポジトリには認証は不要です。パブリックリポジトリをクローンする場合、トークンは省略できます。",noTokensHelp:"保存済みトークンがありません。設定 → APIキーでトークンを追加すると再利用が簡単になります。",optionalTokenPublic:"GitHubトークン(パブリックリポジトリの場合は任意)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(パブリックリポジトリの場合は空欄可)"},step3:{reviewConfig:"設定の確認",workspaceType:"ワークスペースの種類:",existingWorkspace:"既存のワークスペース",newWorkspace:"新しいワークスペース",subfolderWorkspace:"新しいサブフォルダ",path:"パス:",parentPath:"親パス:",subfolderName:"サブフォルダ名:",cloneFrom:"クローン元:",authentication:"認証:",usingStoredToken:"保存済みトークンを使用:",usingProvidedToken:"入力されたトークンを使用",noAuthentication:"認証なし",sshKey:"SSHキー",existingInfo:"ワークスペースがプロジェクト一覧に追加され、Claude/Cursorセッションで使用できるようになります。",newWithClone:"このフォルダからリポジトリがクローンされます。",newEmpty:"ワークスペースがプロジェクト一覧に追加され、Claude/Cursorセッションで使用できるようになります。",subfolderInfo:"親フォルダ内に新しいサブフォルダが作成され、プロジェクト一覧に追加されます。",cloningRepository:"リポジトリをクローンしています..."},buttons:{cancel:"キャンセル",back:"戻る",next:"次へ",createProject:"プロジェクトを作成",creating:"作成中...",cloning:"クローン中..."},errors:{selectType:"既存のワークスペースか新規作成かを選択してください",providePath:"ワークスペースのパスを入力してください",provideSubfolderName:"サブフォルダ名を入力してください",subfolderNameInvalid:"サブフォルダ名にパス区切りを含めることはできず、. / .. もできません",failedToCreate:"ワークスペースの作成に失敗しました",failedToCreateFolder:"フォルダの作成に失敗しました"}},Que={genericTool:"ツール",codes:{generic:{info:{title:"通知"}},permission:{required:{title:"対応が必要です",body:"{{toolName}} があなたの判断を待っています。"}},run:{stopped:{title:"実行が停止しました",body:"理由: {{reason}}"},failed:{title:"実行に失敗しました"}},agent:{notification:{title:"エージェント通知"}}},open:"通知を開く",title:"通知",markRead:"既読",close:"通知を閉じる",dismiss:"通知を閉じる"},epe={title:"アップデートのお知らせ",newVersionReady:"新しいバージョンが利用可能です",currentVersion:"現在のバージョン",latestVersion:"最新バージョン",whatsNew:"変更点:",viewFullRelease:"リリース全文を見る",updateProgress:"アップデートの進捗:",manualUpgrade:"手動アップグレード:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:"または「今すぐ更新」をクリックして自動的にアップデートを実行できます。",updateCompleted:"アップデートが完了しました!",restartServer:"変更を適用するにはサーバーを再起動してください。",updateFailed:"アップデートに失敗しました",buttons:{close:"閉じる",later:"後で",copyCommand:"コマンドをコピー",updateNow:"今すぐ更新",updating:"更新中..."},ariaLabels:{closeModal:"バージョンアップグレードモーダルを閉じる",showSidebar:"サイドバーを表示",settings:"設定",updateAvailable:"アップデートあり",closeSidebar:"サイドバーを閉じる"}},tpe={title:"オーケストレーション",subtitle:"Pixcode は {{project}} のローカルチェック、テスト、ターミナル作業、プロジェクト操作を調整できます。",refresh:"更新",goal:"目標",goalPlaceholder:"例: 認証画面を単一ポート配信に合わせて修正し、エラーを捕捉し、lint と typecheck で検証する。",mode:"実行モード",systemPlan:"システム計画",noMode:"モード未選択",loadingPlan:"エージェント計画を読み込み中。",start:"チームを開始",starting:"開始中",needAgent:"少なくとも1つのCLIワーカーを有効にしてください。",startFailed:"ワークフローを開始できませんでした。",cliControl:"CLI チーム制御",enabledCount:"{{count}} 有効",enabled:"有効",disabled:"無効",history:"履歴",emptyHistory:"実行はまだありません。目標を書いてエージェントを開始してください。",steps:"{{done}}/{{total}} ステップ",notSelected:"実行が選択されていません",notSelectedDescription:"過去の実行を選択するか新しい目標を開始してください。エージェントのメッセージ、エラー、変更概要、プレビュー出力がここに表示されます。",loadFailed:"実行詳細を読み込めませんでした。",loadingRun:"実行を読み込み中...",agentSteps:"エージェント手順",noStepOutput:"ステップ出力はありません。",agentMessages:"エージェントメッセージ",noAgentMessages:"このエージェントはまだメッセージを生成していません。失敗した場合、実際のCLIエラーが上に表示されます。",outputs:"出力",noOutputs:"変更概要、プレビュー、コマンド出力はまだありません。",open:"開く",artifact:{fileDiff:"変更概要",previewUrl:"プレビュー",commandOutput:"コマンド出力"},role:{user:"ユーザー",agent:"エージェント"},status:{queued:"待機中",running:"実行中",completed:"完了",failed:"エラー",canceled:"キャンセル",skipped:"スキップ"},nodes:{codex_review:"Codexレビュー",gemini_review:"Geminiレビュー",claude_review:"Claudeレビュー",claude_code_review:"Claudeレビュー",cursor_review:"Cursorレビュー",aggregate:"集約",architect:"計画",implement:"実装",review:"レビュー",proposal:"提案",critique:"批評",response:"応答",judge:"判断",coordinator:"コーディネーター",final_report:"最終レポート"},workflows:{multi_model_review:{name:"マルチモデルレビュー",description:"有効なCLIエージェントが同じ目標を個別にレビューし、その後有効なエージェントが結果を集約します。"},sequential_handoff:{name:"順次ハンドオフ",description:"エージェントが順番に計画、実装、レビューします。無効なCLIステップはスキップされます。"},adversarial_debate:{name:"意思決定ディベート",description:"エージェントが提案、批評、応答し、最終推奨を生成します。"},agent_team:{name:"エージェントチーム",description:"コーディネーターが目標と有効なCLIインスタンスを読み取り、作業を割り当てて結果を集約します。"}},adapters:{"claude-code":{label:"Claude Code",role:"CLIワーカー"},cursor:{label:"Cursor",role:"CLIワーカー"},codex:{label:"Codex",role:"CLIワーカー"},gemini:{label:"Gemini",role:"CLIワーカー"},qwen:{label:"Qwen Code",role:"CLIワーカー"},opencode:{label:"OpenCode",role:"CLIワーカー"}},activeCount:"{{active}}/{{total}} 有効",teamHint:"各行は1つのCLIワーカーです。Claude、Codex、Cursor、Gemini、Qwen、OpenCodeを複数作成し、それぞれに別の割り当てを書けます。",parallelLimit:"並列上限",addAgent:"{{agent}}を追加",duplicateAgent:"{{agent}}を複製",removeAgent:"{{agent}}を削除",assignment:"割り当て",assignmentPlaceholder:"任意: このワーカーが担当する内容を具体的に書きます。空欄ならコーディネーターが割り当てます。",agentInstance:"{{name}} #{{number}}",taskTitle:"タスク",taskTitlePlaceholder:"機能を実装",taskDescription:"説明",taskDescriptionPlaceholder:"範囲、制約、期待する出力",addTask:"追加",runTask:"実行",cancelTask:"キャンセル",dispatchTask:"タスクを割り当て",adapter:"アダプター",isolation:"分離",dispatch:"割り当て",auto:"自動",waitingForStream:"ストリーム待機中...",workflow:"ワークフロー",input:"入力",taskStates:{todo:"未着手",in_progress:"進行中",in_review:"レビュー中",done:"完了",failed:"失敗",canceled:"キャンセル済み"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},stop:"チームを停止",stopping:"停止中",cancelFailed:"ワークフローを停止できませんでした。",needRoles:"このモードでは、次のロールに少なくとも1つの有効なエージェントを割り当ててください: {{roles}}。",quickPrompts:{label:"クイックプロンプト:",liveTrading:{label:"8024 ライブ取引画面",prompt:"こんにちは。小さなプロジェクトを作成し、その後ポート8024で起動してください。Binance FAPIに接続したTradingView風デザインで、TradingViewチャートと左側のスター/お気に入りシステムが必要です。作業を論理的に分割し、プロセスを自動管理してください。"}},teamHistory:"チーム履歴",changeSummary:"変更概要",noChangeSummary:"最終概要はまだ準備できていません。エージェント完了後、読みやすいMarkdown概要がここに表示されます。",prepareTeamFromReport:"このレポートからエージェントチームを準備",prepareTeamTitle:"エージェントチームのプロンプトを準備",prepareTeamDescription:"議論の出力を新しいAgent Teamプロンプトに変換しました。編集してAgent Teamモードへ移せます。",usePreparedPrompt:"プロンプトを使用",reportToPromptPrefix:"以下の議論/意思決定レポートからエージェントチームを準備して実行してください。必要事項をタスクに分け、利用可能なCLIエージェントへ適切な割り当てを提案し、ユーザー確認後に開始してください。",generatedSummaryTitle:"自動実行概要",summaryStatus:"全体ステータス",summarySteps:"完了ステップ",summaryFailures:"失敗ステップ",summaryCanceled:"キャンセルされたステップ",summaryDiffs:"差分/変更出力",summaryPreviews:"プレビュー出力",summaryErrorPrefix:"エラー",assignedWork:"割り当て作業",autoAssigned:"自動 / コーディネーターが決定",stages:{coordinator:"コーディネーター",handoff:"引き継ぎ",backend:"バックエンド",frontend:"フロントエンド",implementation:"実装",review:"レビュー",repair:"修正",proposal:"提案",critique:"批評",response:"応答",decision:"決定",report:"レポート",final_report:"最終レポート"},agentRole:"フェーズ",agentRoles:{auto:"自動",backend:"バックエンド",frontend:"フロントエンド",review:"テスト / レビュー",implementation:"実装",proposal:"提案",critique:"批評",response:"応答",decision:"決定 / レポート",report:"レポート",custom:"カスタム"},customRolePlaceholder:"例: セキュリティ、モバイルUX、DB設計",roleHints:{default:"空欄にすると、コーディネーターが目標に基づいてこのエージェントへ割り当てます。",agent_team:"バックエンド、フロントエンド、レビューなどのフェーズを選ぶか、自動のままにできます。",multi_model_review:"有効なエージェントがレビューします。レポートロールを選ぶと、そのエージェントが最終概要をまとめます。",sequential_handoff:"エージェントは選択順に実行されます。タスク文が各ステップの範囲を定義します。",adversarial_debate:"意思決定ディベートではフェーズ選択は任意です。未指定の場合、選択されたエージェントを順に提案、批評、必要に応じて応答へ割り当てます。"},soloAgent:"{{agent}} のみで実行",soloAgentShort:"単独",cliSettings:"CLI設定",workspaceTarget:"対象ワークスペース",workspaceTargets:{selectedProject:"選択中のプロジェクト",pixcodeApp:"Pixcode システム",custom:"カスタムパス"},customWorkspacePlaceholder:"/path/to/project",workspaceTargetHint:"エージェントは次で実行されます: {{path}}",autoDetect:"自動検出",needWorkspacePath:"カスタムワークスペースのパスを入力してください。",quickWorkspaceCheck:"ワークスペース確認"},npe=JSON.parse('{"title":"コントロールルーム","subtitle":"{{target}} の本番、プラットフォーム、管理、監査、セルフホストアクセス","thisServer":"このサーバー","refresh":"更新","nav":{"overview":"概要","production":"本番","admin":"管理","team":"チーム","secrets":"シークレット","marketplace":"マーケット","eval":"評価","usage":"使用状況","security":"セキュリティ","access":"アクセス"},"overview":{"title":"v1.46 launch surface","description":"Every box below is backed by a v1.44-v1.45 API and is now visible from the UI.","latestAuditEvents":"Latest audit events","remoteAccessOptions":"Remote access options"},"metrics":{"issueRuns":"Issue-to-PR runs","reviewItems":"Review items","subUsers":"Sub-users","collaborators":"Collaborators","secrets":"Scoped secrets","marketplace":"Marketplace","evalRuns":"Eval runs","securityAudits":"Security audits","attention":"Attention","running":"Running","needsAttention":"Needs attention","runningNow":"Running now","reviews":"Reviews","checkpoints":"Checkpoints","roles":"Roles","auditEvents":"Audit events","scopedSecrets":"Scoped secrets","auditRuns":"Audit runs","findings":"Findings","usageRows":"Usage rows","evalSuites":"Eval suites"},"sections":{"production":{"title":"Production loop","description":"Start issue-to-PR runs, parse CI failures, review changes, schedule background jobs, and create checkpoints."},"admin":{"title":"管理システム","description":"セルフホストの Pixcode サーバーでサブユーザーの作成、無効化、アクティビティ確認を行います。"},"team":{"title":"プロジェクト共同作業者","description":"全員をグローバル管理者にせず、プロジェクトごとに partner、worker、reviewer、viewer を割り当てます。"},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"セルフホストアクセス","description":"固定ドメインがない場合は Tailscale を使い、安定した公開 URL には Cloudflare Tunnel や custom domain を設定します。"}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Create sub-user","rolePermissions":"Role permissions","addCollaborator":"Add collaborator","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Remote access setup"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Queue run","parseFailure":"Parse failure","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Create user","disable":"Disable","enable":"Enable","addCollaborator":"Add collaborator","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Save access path","checkUrl":"Check URL","checkTailscale":"Check Tailscale"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"共同作業者のアクセス方法","stepUsers":"サブユーザーを作成","stepUsersDescription":"Admin system で member、viewer、project_worker、project_partner などのロールを付けて作成します。","stepRole":"プロジェクトロールを割り当て","stepRoleDescription":"同じユーザーをプロジェクト共同作業者に追加し、選択したプロジェクトだけを表示・操作できるようにします。","stepLink":"アクセス経路を共有","stepLinkDescription":"Self-hosted access で設定した Tailscale、Cloudflare Tunnel、custom domain、LAN URL を共有します。","paths":"利用可能なアクセスリンク"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operations","description":"Runs, reviews, approvals, scheduler, checkpoints"},"people":{"label":"People","description":"Admins, collaborators, roles, activity"},"access":{"label":"Access","description":"LAN, Tailscale, tunnel, domain guidance"},"security":{"label":"Security","description":"Secrets, permission risk, audit checks"},"insights":{"label":"Insights","description":"Usage, evaluations, marketplace health"}},"context":{"title":"What this means","recommendedNextStep":"Recommended next step","runTimeline":"Run timeline","runTimelineDescription":"Readable activity feed for agents, reviewers, checkpoints, and audit events.","emptyTimelineTitle":"No run timeline yet","emptyTimelineDescription":"Run activity appears here after issue runs, reviews, checkpoints, or audit events are recorded.","serverSignal":"Server signal","serverSignalDescription":"The first screen avoids raw backend sections and shows only current status."},"operations":{"runTimeline":"Run timeline","runTimelineDescription":"Readable actor, action, and result history without raw JSON.","noActivityTitle":"No activity yet","noActivityDescription":"Issue runs, review decisions, checkpoints, and audit events will appear here as a vertical timeline.","actionQueue":"Action queue","actionQueueDescription":"Review items are shown as mobile-friendly rows instead of a cramped table.","noReviewItemsTitle":"No review items","noReviewItemsDescription":"Create a review item when changed files need an accept/fix decision.","reviewRequested":"Review requested","changedFiles":"{{count}} changed files","accept":"Accept"},"people":{"projectCollaborators":"Project collaborators","projectCollaboratorsDescription":"Project partners and workers are not global admins. They get scoped access to assigned projects.","noCollaboratorsTitle":"No collaborators yet","noCollaboratorsDescription":"Create a sub-user first, then assign that person to a project role.","project":"Project","roleScoped":"role scoped","auditLog":"Audit log","auditLogDescription":"Search what sub-users, project partners, and workers changed without opening a raw database view.","searchAudit":"Search actor, action, project, or detail","noAuditMatchTitle":"No audit events match","noAuditMatchDescription":"User and project access activity appears here after actions are recorded.","system":"system","auditEvent":"Audit event","advancedTitle":"Advanced people management","advancedDescription":"Create users and assign project roles only when needed."},"access":{"openSettings":"Open Settings > Access","lanTitle":"LAN and local","lanDescription":"Use when the browser is on the same machine or network. Start here before private or public tunnels.","tailscaleTitle":"Tailscale private access","tailscaleDescription":"Best when a team needs private access without exposing Pixcode publicly. The UI should guide install, login, and URL sharing.","cloudflareTitle":"Cloudflare or custom domain","cloudflareDescription":"Best when users need a stable HTTPS URL. Configure the tunnel/domain once and share it with assigned users.","howUsersConnect":"How users connect","howUsersConnectDescription":"This keeps Access understandable for non-technical users.","stepUserTitle":"Create the user","stepUserDescription":"Add them in People so the server knows who they are.","stepRoleTitle":"Assign project role","stepRoleDescription":"Give them project access{{projectSuffix}}.","stepUrlTitle":"Share one URL","stepUrlDescription":"Use a LAN, Tailscale, Cloudflare Tunnel, or custom domain URL from Settings > Access."},"security":{"secretVault":"Secret vault","secretVaultDescription":"Rows show scope, target, and redacted env names. Values stay hidden.","noSecretsTitle":"No secrets stored","noSecretsDescription":"Store provider, project, workflow, Telegram, or API env values from the advanced form.","global":"global","advancedTitle":"Advanced security actions","advancedDescription":"Store scoped env values or queue audit checks."},"insights":{"usageSummary":"Usage summary","usageSummaryDescription":"Provider metrics are stacked as cards on mobile instead of forcing a wide table.","noUsageTitle":"No usage events yet","noUsageDescription":"Usage appears after provider or workflow events are recorded.","provider":"provider","usageRowDescription":"{{tokens}} tokens - {{cost}} - {{latency}}ms avg","errorRate":"{{rate}}% errors","marketplaceHealth":"Marketplace health","marketplaceHealthDescription":"MCP servers, workflow templates, provider adapters, and notification channels stay visible without crowding the overview.","noMarketplaceTitle":"No marketplace entries","noMarketplaceDescription":"Register entries only when a plugin or workflow template is ready to install.","noSourceConfigured":"No source configured","unknown":"unknown","advancedTitle":"Advanced insight actions","advancedDescription":"Record usage, create evaluation suites, or register marketplace entries."},"recommendations":{"attention":"Open Operations first. Clear reviews, errors, failed evals, or security findings before starting new work.","access":"Open Settings > Access and save the one URL your users should use. Then assign project roles in People.","people":"Create sub-users first, assign project roles second, then share an access path.","security":"Store secrets with the smallest scope that works, then run a permission or secret scan.","insights":"Compare provider cost, latency, and eval pass rate before changing model defaults.","operations":"Review Running now and the timeline. If nothing needs attention, start the next issue-to-PR or scheduled job."}}'),rpe={title:"VS Code ワークベンチ",noProject:"プロジェクト未選択",activity:{explorer:"エクスプローラー",projects:"プロジェクト",sourceControl:"ソース管理",terminal:"ターミナル",showPanel:"左パネルを表示",hidePanel:"左パネルを非表示"},panels:{explorer:"エクスプローラー",projects:"プロジェクト",sourceControl:"ソース管理",terminal:"ターミナル",editor:"エディター",cli:"CLI",rightTerminal:"ターミナル"},editor:{emptyTitle:"エクスプローラーからファイルを開く",closeTab:"{{file}} を閉じる",scrollLeft:"タブを左へスクロール",scrollRight:"タブを右へスクロール",moreActions:"その他のタブ操作",closeSplit:"分割エディターを閉じる",context:{close:"閉じる",closeAll:"すべて閉じる",copyPath:"パスをコピー",splitRight:"右に分割",splitMoveRight:"右に分割して移動"}},resize:{left:"左パネルのサイズ変更",right:"CLI パネルのサイズ変更"},menu:{openProject:"プロジェクトを開く...",cloneFromGithub:"リポジトリをクローン...",newChat:"新しいチャット",openProjects:"プロジェクトを開く"},menuBar:{file:"ファイル",edit:"編集",selection:"選択",view:"表示",go:"移動",run:"実行",terminal:"ターミナル",help:"ヘルプ",openSettingsPanel:"設定パネルを開く"},projects:{openProject:"プロジェクトを開く",cloneFromGithub:"クローン",directoryList:"ディレクトリ",refresh:"プロジェクトを更新",emptyTitle:"プロジェクトディレクトリはまだありません",emptyDescription:"ローカルフォルダーを開くか、リポジトリをクローンして開始します。",selected:"選択中",startChat:"チャット",fileCount:"{{formattedCount}} ファイル",fileCountPending:"ファイルを準備中",startTitle:"Start a Pixcode workspace",startDescription:"Pick a folder and Pixcode will bind the explorer, terminal, and chat history to that workspace.",workHere:"Work in this folder"},workspace:{empty:"Workspace 1 を作成するにはプロジェクトを開いてください。",openFirst:"ワークスペースを開く",add:"ワークスペースを追加",scrollLeft:"ワークスペースを左へスクロール",scrollRight:"ワークスペースを右へスクロール",close:"{{name}} を閉じる",closeAction:"ワークスペースを閉じる",closeOthers:"ほかを閉じる",closeAll:"すべて閉じる",rename:"名前を変更",star:"スターを付ける",unstar:"スターを外す",toggleStar:"{{name}} にスターを付ける",moreActions:"ワークスペース操作"},cli:{projectScoped:"プロジェクト単位の CLI ターミナル",chooseTitle:"CLI ターミナルを開始",chooseDescription:"CLI を選んでから、全高のターミナルを開始します。",startSelected:"{{provider}} を開始",newSession:"新しい CLI セッション",checking:"確認中...",ready:"準備完了",notInstalled:"未インストール",installing:"インストール中...",updateAvailable:"{{version}} に更新",installProvider:"{{provider}} をインストール",updateProvider:"{{provider}} を更新",manualInstall:"この CLI は手動インストールが必要です。",installNoJob:"インストールの job id が返されませんでした。",installFailed:"インストールに失敗しました。",installStreamLost:"インストールストリームが早く閉じました。まだ実行中の可能性があります。",provider:"プロバイダー",installRunning:"インストール中",installDone:"準備完了",installError:"確認が必要",showPanel:"CLI パネルを表示",hidePanel:"CLI パネルを非表示",close:"ターミナルを閉じる"},terminal:{title:"ターミナル",close:"ターミナルを閉じる"}},ape={title:"リモートコンソール",notSynced:"未同期",refresh:"更新",runId:"実行 {{id}}",metrics:{projects:"プロジェクト",activeRuns:"実行中",approvalQueue:"承認キュー",webhooks:"Webhook"},sections:{projects:"複数プロジェクト管理",approvals:"承認キュー",webhooks:"Webhook 状態"},badges:{active:"{{count}} 件実行中",approvals:"{{count}} 件承認"},projectStats:{sessions:"{{count}} セッション",failedRuns:"{{count}} 件失敗",recentRuns:"{{count}} 件最近の実行"},actions:{allow:"許可",deny:"拒否"},webhook:{on:"オン",off:"オフ",ok:"ok",failed:"失敗",noDelivery:"まだ配信なし"},empty:{projects:"利用可能なプロジェクトはありません。",approvals:"保留中の承認はありません。",webhooks:"Webhook は設定されていません。"}},ipe={buttons:$ue,tabs:Hue,status:Gue,messages:Vue,navigation:Wue,common:que,time:Kue,fileOperations:Yue,mainContent:Zue,fileTree:Xue,projectWizard:Jue,notifications:Que,versionUpdate:epe,orchestration:tpe,controlRoom:npe,vscodeWorkbench:rpe,remoteConsole:ape},spe="設定",ope={account:"アカウント",permissions:"権限",mcpServers:"MCPサーバー",appearance:"外観"},lpe={title:"アカウント",language:"言語",languageLabel:"表示言語",languageDescription:"インターフェースの表示言語を選択してください",username:"ユーザー名",email:"メールアドレス",profile:"プロフィール",changePassword:"パスワードを変更"},cpe={title:"MCPサーバー",addServer:"サーバーを追加",editServer:"サーバーを編集",deleteServer:"サーバーを削除",serverName:"サーバー名",serverType:"サーバーの種類",config:"設定",testConnection:"接続テスト",status:"状態",connected:"接続済み",disconnected:"未接続",scope:{label:"スコープ",user:"ユーザー",project:"プロジェクト"}},dpe={title:"外観",theme:"テーマ",codeEditor:"コードエディタ",editorTheme:"エディタのテーマ",wordWrap:"折り返し",showMinimap:"ミニマップを表示",lineNumbers:"行番号",fontSize:"フォントサイズ"},upe={saveChanges:"変更を保存",resetToDefaults:"デフォルトに戻す",cancelChanges:"変更をキャンセル"},ppe={title:"クイック設定",sections:{appearance:"外観",toolDisplay:"ツール表示",viewOptions:"表示オプション",inputSettings:"入力設定",changeAwareness:"コントロール"},darkMode:"ダークモード",autoExpandTools:"ツールを自動展開",showRawParameters:"生パラメータを表示",showThinking:"思考を表示",autoScrollToBottom:"自動スクロール",sendByCtrlEnter:"Ctrl+Enterで送信",sendByCtrlEnterDescription:"有効にすると、Enterではなく Ctrl+Enter でメッセージを送信します。IMEユーザーの誤送信防止に便利です。",changeAwareness:"コントロール",changedFiles:{title:"変更されたファイル",description:"ローカル変更を追跡し、新しい変更が出たらファイルパネルを開きます。",noProject:"ローカル変更を追跡するプロジェクトを選択してください。",refresh:"変更ファイルを更新",empty:"ローカル変更はありません",disabled:"ローカル変更を監視するにはコントロールを有効にしてください。",more:"ほか {{count}} 件",lastChecked:"{{value}} に確認",guideTitle:"右パネルガイド",guideFiles:"変更されたファイルはファイル内で緑に光ります。",guidePanel:"新しい変更で分割パネルが自動的に開きます。",status:{M:"M",A:"A",D:"D",U:"U"}},dragHandle:{dragging:"ドラッグ中",closePanel:"設定パネルを閉じる",openPanel:"設定パネルを開く",draggingStatus:"ドラッグ中...",toggleAndMove:"クリックで切替、ドラッグで移動"}},mpe={title:"ターミナルショートカット",sectionKeys:"キー",sectionNavigation:"ナビゲーション",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"上矢印",arrowDown:"下矢印",scrollDown:"下にスクロール",handle:{closePanel:"ショートカットパネルを閉じる",openPanel:"ショートカットパネルを開く"}},hpe={label:"設定",agents:"エージェント",appearance:"外観",git:"Git",apiTokens:"API & トークン",notifications:"通知",plugins:"プラグイン",mobile:"モバイルで使う",telegram:"Telegram",about:"概要",access:"アクセス"},fpe={title:"通知",description:"受信する通知イベントを設定します。",webPush:{title:"Webプッシュ通知",enable:"プッシュ通知を有効にする",disable:"プッシュ通知を無効にする",enabled:"プッシュ通知は有効です",loading:"更新中...",unsupported:"このブラウザではプッシュ通知がサポートされていません。",denied:"プッシュ通知がブロックされています。ブラウザの設定で許可してください。"},events:{title:"イベント種別",actionRequired:"対応が必要",stop:"実行停止",error:"実行失敗"}},gpe={darkMode:{label:"ダークモード",description:"ライトテーマとダークテーマを切り替えます"},projectSorting:{label:"プロジェクトの並び順",description:"サイドバーでのプロジェクトの並び順を設定します",alphabetical:"アルファベット順",recentActivity:"最近のアクティビティ順"},codeEditor:{title:"コードエディタ",theme:{label:"エディタのテーマ",description:"コードエディタのデフォルトテーマ"},wordWrap:{label:"折り返し",description:"エディタでデフォルトで折り返しを有効にします"},showMinimap:{label:"ミニマップを表示",description:"差分ビューでナビゲーション用のミニマップを表示します"},lineNumbers:{label:"行番号を表示",description:"エディタに行番号を表示します"},fontSize:{label:"フォントサイズ",description:"エディタのフォントサイズ(ピクセル)"}}},bpe={title:{add:"MCPサーバーを追加",edit:"MCPサーバーを編集"},importMode:{form:"フォーム入力",json:"JSONインポート"},scope:{label:"スコープ",userGlobal:"ユーザー(グローバル)",projectLocal:"プロジェクト(ローカル)",userDescription:"ユーザースコープ: すべてのプロジェクトで利用可能",projectDescription:"ローカルスコープ: 選択したプロジェクトでのみ利用可能",cannotChange:"既存のサーバーを編集する場合、スコープは変更できません"},fields:{serverName:"サーバー名",transportType:"トランスポートの種類",command:"コマンド",arguments:"引数(1行に1つ)",jsonConfig:"JSON設定",url:"URL",envVars:"環境変数(KEY=value、1行に1つ)",headers:"ヘッダー(KEY=value、1行に1つ)",selectProject:"プロジェクトを選択..."},placeholders:{serverName:"my-server"},validation:{missingType:"必須フィールドがありません: type",stdioRequiresCommand:"stdioタイプにはcommandフィールドが必要です",httpRequiresUrl:"{{type}}タイプにはurlフィールドが必要です",invalidJson:"無効なJSON形式です",jsonHelp:"MCPサーバー設定をJSON形式で貼り付けてください。例:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"設定の詳細({{configFile}}より)",projectPath:"パス: {{path}}",actions:{cancel:"キャンセル",saving:"保存中...",addServer:"サーバーを追加",updateServer:"サーバーを更新"}},xpe={success:"設定を保存しました!",error:"設定の保存に失敗しました",saving:"保存中..."},vpe={save:"設定を保存",cancel:"キャンセル"},ype={title:"Git設定",description:"コミット用のGit IDを設定します。この設定は git config --global で適用されます",name:{label:"Git名前",help:"コミットに使用する名前"},email:{label:"Gitメールアドレス",help:"コミットに使用するメールアドレス"},actions:{save:"設定を保存",saving:"保存中..."},status:{success:"保存しました"}},wpe={title:"APIキー",description:"外部APIにアクセスするためのAPIキーを生成します。",newKey:{alertTitle:"⚠️ APIキーを保存してください",alertMessage:"このキーが表示されるのは今回限りです。安全な場所に保管してください。",iveSavedIt:"保存しました"},form:{placeholder:"APIキーの名前(例: 本番サーバー)",createButton:"作成",cancelButton:"キャンセル"},newButton:"新しいAPIキー",empty:"APIキーはまだ作成されていません。",list:{created:"作成日:",lastUsed:"最終使用日:"},confirmDelete:"このAPIキーを削除してもよろしいですか?",status:{active:"有効",inactive:"無効"},github:{title:"GitHubトークン",description:"外部APIからプライベートリポジトリをクローンするためのGitHubパーソナルアクセストークンを追加します。",descriptionAlt:"プライベートリポジトリをクローンするためのGitHubパーソナルアクセストークンを追加します。保存せずにAPIリクエストで直接トークンを渡すこともできます。",addButton:"トークンを追加",form:{namePlaceholder:"トークンの名前(例: 個人リポジトリ)",tokenPlaceholder:"GitHubパーソナルアクセストークン(ghp_...)",descriptionPlaceholder:"説明(任意)",addButton:"トークンを追加",cancelButton:"キャンセル",howToCreate:"GitHubパーソナルアクセストークンの作成方法 →"},empty:"GitHubトークンはまだ追加されていません。",added:"追加日:",confirmDelete:"このGitHubトークンを削除してもよろしいですか?"},apiDocsLink:"APIドキュメント",documentation:{title:"外部APIドキュメント",description:"外部APIを使用してアプリケーションからClaude/Cursorセッションを起動する方法を学びます。",viewLink:"APIドキュメントを見る →"},loading:"読み込み中...",version:{updateAvailable:"アップデートあり: v{{version}}"}},kpe={authStatus:{checking:"確認中...",connected:"接続済み",notConnected:"未接続",disconnected:"切断",checkingAuth:"認証状態を確認しています...",loggedInAs:"{{email}}でログイン中",authenticatedUser:"認証済みユーザー"},account:{claude:{description:"Anthropic Claude AIアシスタント"},cursor:{description:"Cursor AI搭載コードエディタ"},codex:{description:"OpenAI Codex AIアシスタント"},gemini:{description:"Google Gemini AIアシスタント"},qwen:{description:"Alibaba Qwen Code CLI (Gemini CLI フォーク)"}},connectionStatus:"接続状態",login:{title:"ログイン",reAuthenticate:"再認証",description:"{{agent}}アカウントにサインインしてAI機能を有効にします",reAuthDescription:"別のアカウントでサインインするか、認証情報を更新します",button:"ログイン",reLoginButton:"再ログイン"},error:"エラー: {{error}}",providersLabel:"Providers",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} is not installed",notInstalledDescription:"Pixcode couldn't find the {{binary}} binary on this host. Install it first and then come back to log in.",installing:"Installing...",installNow:"Install now",copyCommand:"Copy install command",copy:"Copy",copied:"Copied",qwenDocs:"View the Qwen Code docs",complete:"Install complete",failed:"Install failed",output:"Output",cancel:"Cancel",dismiss:"Dismiss",doneHint:"Refresh this tab or try Login to check the new install.",continueToLogin:"Continue to Login",errors:{missingJobId:"Server did not return a job id",failedToStart:"Install failed to start",unreadableStatus:"Install ended with an unreadable status",streamLost:"Lost connection to install stream. The install may still be running on the server."}}},Spe={title:"権限設定",skipPermissions:{label:"権限プロンプトをスキップ(注意して使用)",claudeDescription:"--dangerously-skip-permissions フラグに相当",cursorDescription:"Cursor CLIの -f フラグに相当",opencodeDescription:"OpenCode の --dangerously-skip-permissions フラグに相当"},allowedTools:{title:"許可されたツール",description:"権限の確認なしに自動的に許可されるツール",placeholder:'例: "Bash(git log:*)" または "Write"',quickAdd:"よく使うツールを追加:",empty:"許可されたツールはありません"},blockedTools:{title:"ブロックされたツール",description:"権限の確認なしに自動的にブロックされるツール",placeholder:'例: "Bash(rm:*)"',empty:"ブロックされたツールはありません"},allowedCommands:{title:"許可されたシェルコマンド",description:"権限の確認なしに自動的に許可されるシェルコマンド",placeholder:'例: "Shell(ls)" または "Shell(git status)"',quickAdd:"よく使うコマンドを追加:",empty:"許可されたコマンドはありません"},blockedCommands:{title:"ブロックされたシェルコマンド",description:"自動的にブロックされるシェルコマンド",placeholder:'例: "Shell(rm -rf)" または "Shell(sudo)"',empty:"ブロックされたコマンドはありません"},toolExamples:{title:"ツールパターンの例:",bashGitLog:"- すべてのgit logコマンドを許可",bashGitDiff:"- すべてのgit diffコマンドを許可",write:"- すべてのWriteツールの使用を許可",bashRm:"- すべてのrmコマンドをブロック(危険)"},shellExamples:{title:"シェルコマンドの例:",ls:"- lsコマンドを許可",gitStatus:"- git statusを許可",npmInstall:"- npm installを許可",rmRf:"- 再帰的削除をブロック"},opencodeAllowed:{title:"許可された Bash パターン",description:"OpenCode が確認せず自動承認する Bash コマンドパターン",placeholder:'例: "git *" または "npm test"',quickAdd:"よく使うパターンを追加:",empty:"許可パターンはありません"},opencodeBlocked:{title:"ブロックされた Bash パターン",description:"OpenCode が常に拒否する Bash コマンドパターン",placeholder:'例: "rm -rf *" または "sudo *"',empty:"ブロックパターンはありません"},opencodeExamples:{title:"パターン例:",gitAll:"- すべての git コマンドを許可",gitPush:"- git push のみをブロック",rmRf:"- 再帰削除をブロック",npm:"- すべての npm コマンドを許可"},codex:{permissionMode:"権限モード",description:"Codexがファイルの変更やコマンドの実行を処理する方法を制御します",modes:{default:{title:"デフォルト",description:"信頼されたコマンド(ls、cat、grep、git statusなど)のみ自動実行。その他のコマンドはスキップ。ワークスペースへの書き込みは可能。"},acceptEdits:{title:"編集を許可",description:"ワークスペース内ですべてのコマンドを自動実行。サンドボックス環境での完全自動モード。"},bypassPermissions:{title:"権限をバイパス",description:"制限なしの完全なシステムアクセス。すべてのコマンドがディスクとネットワークへの完全なアクセスで自動実行されます。注意して使用してください。"}},technicalDetails:"技術的な詳細",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted。信頼されたコマンド: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find(-execなし)など。",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never。すべてのコマンドがプロジェクトディレクトリ内で自動実行。",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never。完全なシステムアクセス。信頼された環境でのみ使用してください。",overrideNote:"チャットインターフェースのモードボタンを使用してセッションごとに上書きできます。"}},actions:{add:"追加"}},Cpe={title:"MCPサーバー",description:{claude:"Model Context Protocolサーバーは、Claudeに追加のツールやデータソースを提供します",cursor:"Model Context Protocolサーバーは、Cursorに追加のツールやデータソースを提供します",codex:"Model Context Protocolサーバーは、Codexに追加のツールやデータソースを提供します"},addButton:"MCPサーバーを追加",empty:"MCPサーバーは設定されていません",serverType:"種類",scope:{local:"ローカル",user:"ユーザー"},config:{command:"コマンド",url:"URL",args:"引数",environment:"環境変数"},tools:{title:"ツール",count:"({{count}}):",more:"他{{count}}件"},actions:{edit:"サーバーを編集",delete:"サーバーを削除"},help:{title:"Codex MCPについて",description:"Codexはstdioベースのツールサーバーをサポートしています。追加のツールやリソースでCodexの機能を拡張するサーバーを追加できます。"}},Npe={title:"プラグイン",description:"カスタムプラグインでインターフェースを拡張します。gitからインストールするか、~/.pixcode/plugins/ にフォルダを配置してください。",installPlaceholder:"https://github.com/user/my-plugin",installButton:"インストール",installing:"インストール中…",securityWarning:"信頼できる作成者のプラグイン、またはソースコードを確認済みのプラグインのみをインストールしてください。",scanningPlugins:"プラグインをスキャン中…",noPluginsInstalled:"プラグインがインストールされていません",pullLatest:"gitから最新を取得",noGitRemote:"リモートgitリポジトリがありません — アップデート不可",uninstallPlugin:"プラグインを削除",confirmUninstall:"クリックして確定",confirmUninstallMessage:"{{name}} を削除しますか?この操作は取り消せません。",cancel:"キャンセル",remove:"削除",updateFailed:"アップデートに失敗しました",installFailed:"インストールに失敗しました",uninstallFailed:"削除に失敗しました",toggleFailed:"切り替えに失敗しました",buildYourOwn:"プラグインを自作する",starter:"スターター",docs:"ドキュメント",starterPlugin:{name:"プロジェクト統計",badge:"スターター",description:"プロジェクトのファイル数、コード行数、ファイルタイプの内訳、最近のアクティビティを表示します。",install:"インストール"},morePlugins:"詳細",enable:"有効にする",disable:"無効にする",installAriaLabel:"プラグインのgitリポジトリURL",tab:"タブ",runningStatus:"実行中"},Epe={title:"アクセス",description:"このセルフホスト Pixcode サーバーへ接続する方法を選びます。まず同じネットワークで確認し、リモート接続には安全なトンネル、Tailscale、または独自ドメインを使います。",refresh:"更新",copy:"コピー",copied:"コピー済み",save:"アクセス経路を保存",check:"URL を確認",qrAlt:"{{url}} の QR",guide:{title:"先に接続方法を選ぶ",description:"ネットワーク用語を知らなくても使えます。状況に合う項目を選び、リンクをコピーするかスマホで QR を読み取ります。"},options:{sameNetwork:{title:"同じ Wi-Fi/LAN",description:"端末が Pixcode サーバーと同じルーターや社内ネットワークにある場合に使います。"},secureTunnel:{title:"一時公開リンク",description:"Cloudflare/ngrok トンネルを開始すると、Pixcode が公開 URL と QR を表示します。"},tailscale:{title:"チーム用プライベートリンク",description:"公開ドメインやルーター設定なしでプライベート接続したい場合に使います。"},customDomain:{title:"独自ドメイン",description:"HTTPS、リバースプロキシ、Cloudflare Tunnel ホスト名が既にある場合に使います。"}},status:{ready:"準備完了",detecting:"検出中",guided:"ガイド",configured:"設定済み",optional:"任意"},links:{title:"利用可能なリンク",description:"接続する端末またはメンバー用の正しい URL をコピーします。",local:"ローカル",tailscale:"Tailscale プライベートリンク",empty:"アクセスリンクはまだ検出されていません。"},local:{title:"同じネットワークから接続",description:"最初の確認に最適です。同じ Wi-Fi または LAN から QR を読み取るかリンクをコピーします。",thisDevice:"このコンピューターのみ",loading:"同じネットワークのリンクを検出中...",empty:"LAN リンクが見つかりません。ネットワーク接続を確認して更新してください。",saveLabel:"同じネットワーク接続",save:"この LAN リンクを保存"},tunnel:{title:"安全なトンネル",description:"固定ドメインがなくても、Pixcode が cloudflared または ngrok を起動して公開 URL を表示できます。",secureLink:"公開リンクと QR",help:"開始を押します。cloudflared または ngrok があれば、Pixcode が一時 HTTPS URL と QR を作成します。",running:"トンネル実行中",start:"トンネル開始",stop:"トンネル停止",save:"このトンネル URL を保存",saveLabel:"安全なトンネル接続",qrLabel:"安全なトンネル",installTitle:"トンネル設定が必要",installNeeded:"先に cloudflared または ngrok をインストールしてから、もう一度開始してください。"},tailscale:{title:"Tailscale プライベート接続",description:"Tailscale は任意のプライベートネットワークアプリです。サーバーと利用端末に入れて同じチームでログインすると、Pixcode がプライベート URL を検出します。",save:"この Tailscale URL を保存",saveLabel:"Tailscale プライベート接続",openInstall:"Tailscale インストールを開く",steps:{installServer:"Pixcode を実行しているコンピューターまたはサーバーに Tailscale をインストールします。",installUserDevice:"Pixcode を開くスマホ、ノート PC、またはメンバー端末に Tailscale をインストールします。",login:"両方の端末で同じ Tailscale アカウントまたはチームにログインします。",refresh:"ここに戻って更新を押すと、準備できた private URL が表示されます。"},installCommand:"Install command",installDevice:"Install on this device",signIn:"Sign in with Tailscale",actionDone:"Done",needsAttention:"Needs attention",openLogin:"Open Tailscale login"},advanced:{title:"詳細: 固定ドメイン",description:"LAN URL、Tailscale URL、Cloudflare Tunnel ホスト名、または HTTPS ドメインが既にある場合に保存します。",badge:"詳細"},setup:{title:"固定アクセス経路",description:"ユーザーが使う URL を保存します。LAN、Tailscale、Cloudflare Tunnel、独自ドメインを指定できます。"},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"独自ドメイン"},fields:{label:"ラベル",url:"URL",port:"対象ポート",mode:"Mode"},health:{reachable:"Pixcode に接続できます",unreachable:"Pixcode に接続できません"},configured:{title:"保存済みアクセス経路",description:"これらの経路はロールに応じて管理者、プロジェクトパートナー、プロジェクト作業者が利用できます。",empty:"保存済みのアクセス経路はありません。",noUrl:"URL なし",public:"公開",private:"非公開"},team:{title:"ユーザーの接続方法",description:"Admin system でユーザーを作成し、Control Room でプロジェクトロールを割り当て、この Access URL を共有します。割り当て済みプロジェクトにグローバル管理者権限は不要です。"}},Tpe={title:"Diagnostics",description:"Provider health, WebSocket state, notifications, active runs, and recent errors.",refresh:"Refresh",copyBundle:"Copy bundle",copied:"Copied",runtime:"Runtime",waiting:"Waiting for diagnostics",websocket:"WebSocket",activeClients:"active clients",recentErrors:"Recent errors",redactedBundle:"redacted support bundle",providers:"Providers",notChecked:"not checked",emptyProviders:"Provider health has not been collected yet.",status:{unknown:"unknown",loading:"loading",ok:"ok",available:"available",configured:"configured",missing:"missing",failed:"failed"}},Ape={tagline:"Open-source AI coding assistant interface",checkFailedShort:"Check failed",starOnGitHub:"Star on GitHub",docs:"Docs",hosted:{title:"Try Pixcode Hosted",description:"Team collaboration, shared MCP configs, settings sync across environments, and managed infrastructure.",learnMore:"Learn more"},proFeatures:{title:"Pixcode Pro Features",syncSettings:{title:"Sync Settings",description:"Keep your preferences, MCP configs, and theme in sync across all your environments."},teamManagement:{title:"Team Management",description:"Multiple users, role-based access, and shared projects for your team."}},license:"Licensed under AGPL-3.0",relativeTime:{justNow:"just now",secondsAgo:"{{count}}s ago",minutesAgo:"{{count}}m ago",hoursAgo:"{{count}}h ago"}},jpe={title:spe,tabs:ope,account:lpe,mcp:cpe,appearance:dpe,actions:upe,quickSettings:ppe,terminalShortcuts:mpe,mainTabs:hpe,notifications:fpe,appearanceSettings:gpe,mcpForm:bpe,saveStatus:xpe,footerActions:vpe,git:ype,apiKeys:wpe,agents:kpe,permissions:Spe,mcpServers:Cpe,pluginSettings:Npe,access:Epe,diagnostics:Tpe,about:Ape},Rpe={title:"おかえりなさい",description:"Pixcodeアカウントにサインイン",username:"ユーザー名",password:"パスワード",submit:"サインイン",loading:"サインイン中...",errors:{invalidCredentials:"ユーザー名またはパスワードが正しくありません",requiredFields:"すべての項目を入力してください",networkError:"ネットワークエラー。もう一度お試しください。"},placeholders:{username:"ユーザー名を入力",password:"パスワードを入力"}},Ipe={title:"アカウント作成",username:"ユーザー名",password:"パスワード",confirmPassword:"パスワードの確認",submit:"アカウントを作成",loading:"アカウントを作成中...",errors:{passwordMismatch:"パスワードが一致しません",usernameTaken:"このユーザー名は既に使用されています",weakPassword:"パスワードが弱すぎます"}},_pe={title:"サインアウト",confirm:"サインアウトしてもよろしいですか?",button:"サインアウト"},Lpe={login:Rpe,register:Ipe,logout:_pe},Ppe={title:"プロジェクト",newProject:"新規プロジェクト",deleteProject:"プロジェクトを除去",renameProject:"プロジェクト名を変更",noProjects:"プロジェクトが見つかりません",loadingProjects:"プロジェクトを読み込んでいます...",searchPlaceholder:"プロジェクトを検索...",projectNamePlaceholder:"プロジェクト名",starred:"お気に入り",all:"すべて",untitledSession:"無題のセッション",newSession:"新しいセッション",codexSession:"Codexセッション",fetchingProjects:"Claudeのプロジェクトとセッションを取得しています",projects:"プロジェクト",detectedFromHistory:"履歴から検出",noMatchingProjects:"一致するプロジェクトがありません",tryDifferentSearch:"検索語を変えてお試しください",runClaudeCli:"プロジェクトディレクトリでClaude CLIを実行して始めましょう"},Dpe={title:"Pixcode",subtitle:"AIコーディングアシスタント"},Ope={title:"セッション",newSession:"新しいセッション",deleteSession:"セッションを削除",renameSession:"セッション名を変更",noSessions:"セッションはまだありません",loadingSessions:"セッションを読み込んでいます...",unnamed:"名称未設定",loading:"読み込み中...",showMore:"さらにセッションを表示"},Mpe={viewEnvironments:"環境を表示",hideSidebar:"サイドバーを隠す",createProject:"新しいプロジェクトを作成",refresh:"プロジェクトとセッションを更新 (Ctrl+R)",renameProject:"プロジェクト名を変更 (F2)",deleteProject:"サイドバーからプロジェクトを除去 (Delete)",addToFavorites:"お気に入りに追加",removeFromFavorites:"お気に入りから削除",editSessionName:"セッション名を手動で編集",deleteSession:"このセッションを完全に削除",save:"保存",cancel:"キャンセル"},Fpe={chat:"チャット",files:"ファイル",git:"Git",terminal:"ターミナル",tasks:"タスク"},zpe={refresh:"更新",settings:"設定",collapseAll:"すべて折りたたむ",expandAll:"すべて展開",cancel:"キャンセル",save:"保存",delete:"削除",rename:"名前の変更",joinCommunity:"コミュニティに参加",reportIssue:"問題を報告",starOnGithub:"GitHubでスター",controlRoom:"コントロールルーム",controlRoomDescription:"管理、アクセス、実行"},Bpe={openSource:"オープンソース"},Upe={active:"アクティブ",inactive:"非アクティブ",thinking:"思考中...",error:"エラー",aborted:"中断",unknown:"不明"},$pe={justNow:"たった今",oneMinuteAgo:"1分前",minutesAgo:"{{count}}分前",oneHourAgo:"1時間前",hoursAgo:"{{count}}時間前",oneDayAgo:"1日前",daysAgo:"{{count}}日前"},Hpe={deleteConfirm:"本当に削除しますか?",renameSuccess:"名前を変更しました",deleteSuccess:"削除しました",errorOccurred:"エラーが発生しました",deleteSessionConfirm:"このセッションを削除してもよろしいですか?この操作は取り消せません。",deleteProjectConfirm:"サイドバーからこのプロジェクトを除去しますか?プロジェクトファイル、メモリ、セッションデータは削除されません。",enterProjectPath:"プロジェクトのパスを入力してください",deleteSessionFailed:"セッションの削除に失敗しました。もう一度お試しください。",deleteSessionError:"セッションの削除でエラーが発生しました。もう一度お試しください。",renameSessionFailed:"セッション名の変更に失敗しました。もう一度お試しください。",renameSessionError:"セッション名の変更でエラーが発生しました。もう一度お試しください。",deleteProjectFailed:"プロジェクトの除去に失敗しました。もう一度お試しください。",deleteProjectError:"プロジェクトの除去でエラーが発生しました。もう一度お試しください。",createProjectFailed:"プロジェクトの作成に失敗しました。もう一度お試しください。",createProjectError:"プロジェクトの作成でエラーが発生しました。もう一度お試しください。"},Gpe={updateAvailable:"アップデートあり"},Vpe={deleteProject:"プロジェクトを除去",deleteSession:"セッションを削除",confirmDelete:"このプロジェクトをどうしますか:",sessionCount:"このプロジェクトには{{count}}件の会話があります。",removeFromSidebar:"サイドバーからのみ除去",deleteAllData:"すべてのデータを完全に削除",allConversationsDeleted:"プロジェクトはサイドバーから除去されます。ファイル、メモリ、セッションデータは保持されます。",cannotUndo:"後からプロジェクトを再追加できます。"},Wpe={section:"オーケストレーション",fallbackTitle:"オーケストレーション実行"},qpe={projects:Ppe,app:Dpe,sessions:Ope,tooltips:Mpe,navigation:Fpe,actions:zpe,branding:Bpe,status:Upe,time:$pe,messages:Hpe,version:Gpe,deleteConfirmation:Vpe,orchestration:Wpe},Kpe={copy:"コピー",copied:"コピーしました",copyCode:"コードをコピー"},Ype={copy:"メッセージをコピー",copied:"メッセージをコピーしました",selectFormat:"コピー形式を選択",copyAsMarkdown:"Markdownとしてコピー",copyAsText:"テキストとしてコピー"},Zpe={user:"U",error:"エラー",tool:"ツール",claude:"Claude",cursor:"Cursor",codex:"Codex"},Xpe={settings:"ツール設定",error:"ツールエラー",result:"ツール結果",viewParams:"入力パラメータを表示",viewRawParams:"生パラメータを表示",viewDiff:"編集差分を表示:",creatingFile:"新規ファイルを作成:",updatingTodo:"Todoリストを更新中",read:"読み取り",readFile:"ファイルを読み取り",updateTodo:"Todoリストを更新",readTodo:"Todoリストを読み取り",searchResults:"件の結果"},Jpe={found:"{{count}}件の{{type}}が見つかりました",file:"ファイル",files:"ファイル",pattern:"パターン:",in:"場所:"},Qpe={updated:"ファイルを更新しました",created:"ファイルを作成しました",written:"ファイルを書き込みました",diff:"差分",newFile:"新規ファイル",viewContent:"ファイルの内容を表示",viewFullOutput:"全出力を表示({{count}}文字)",contentDisplayed:"ファイルの内容は上の差分ビューに表示されています"},eme={title:"インタラクティブプロンプト",waiting:"CLIでの応答を待っています",instruction:"Claudeが実行されているターミナルでオプションを選択してください。",selectedOption:"✓ Claudeがオプション{{number}}を選択しました",instructionDetail:"CLIでは、矢印キーまたは番号を入力してオプションを選択します。"},tme={title:"思考中...",emoji:"💭 思考中..."},nme={response:"JSONレスポンス"},rme={grant:"{{tool}}に権限を付与",added:"権限を追加しました",addTo:"{{entry}}を許可されたツールに追加します。",retry:"権限を保存しました。ツールを使用するにはリクエストを再試行してください。",error:"権限を更新できませんでした。もう一度お試しください。",openSettings:"設定を開く"},ame={updated:"Todoリストを更新しました",current:"現在のTodoリスト"},ime={viewPlan:"📋 実装プランを表示",title:"実装プラン"},sme={resetAt:"Claudeの使用制限に達しました。制限は**{{time}} {{timezone}}** - {{date}}にリセットされます"},ome={permissionMode:"権限モード",modes:{default:"デフォルトモード",acceptEdits:"編集を許可",bypassPermissions:"権限をバイパス",plan:"プランモード"},descriptions:{default:"信頼されたコマンド(ls、cat、grep、git statusなど)のみ自動実行。その他のコマンドはスキップ。ワークスペースへの書き込みは可能。",acceptEdits:"ワークスペース内ですべてのコマンドを自動実行。サンドボックス環境での完全自動モード。",bypassPermissions:"制限なしの完全なシステムアクセス。すべてのコマンドがディスクとネットワークへの完全なアクセスで自動実行されます。注意して使用してください。",plan:"プランニングモード - コマンドは実行されません"},technicalDetails:"技術的な詳細"},lme={placeholder:"/ でコマンド、@ でファイル指定、または {{provider}} に何でも聞いてください...",placeholderDefault:"メッセージを入力...",disabled:"入力無効",attachFiles:"ファイルを添付",attachImages:"画像を添付",send:"送信",stop:"停止",clickToChangeMode:"クリックで権限モードを変更(または入力欄でTab)",showAllCommands:"すべてのコマンドを表示"},cme={selector:{title:"思考モード",description:"拡張思考によりClaudeがより多くの選択肢を検討できます",active:"有効",tip:"高い思考モードは時間がかかりますが、より深い分析が得られます"},modes:{none:{name:"標準",description:"通常のClaudeの応答",prefix:""},think:{name:"Think",description:"基本的な拡張思考",prefix:"think"},thinkHard:{name:"Think Hard",description:"より深い検討",prefix:"think hard"},thinkHarder:{name:"Think Harder",description:"代替案を含む深い分析",prefix:"think harder"},ultrathink:{name:"Ultrathink",description:"最大限の思考予算",prefix:"ultrathink"}},buttonTitle:"思考モード: {{mode}}"},dme={title:"AIアシスタントを選択",description:"新しい会話を始めるプロバイダーを選択してください",selectModel:"モデルを選択",statusUnavailable:"ステータスを取得できません",statusRetryHint:"このCLIを確認できませんでした。タップして再試行してください。",retryStatus:"ステータスを再試行",providerInfo:{anthropic:"by Anthropic",openai:"by OpenAI",cursorEditor:"AIコードエディタ"},readyPrompt:{claude:"{{model}}でClaudeを使用する準備ができました。下にメッセージを入力してください。",cursor:"{{model}}でCursorを使用する準備ができました。下にメッセージを入力してください。",codex:"{{model}}でCodexを使用する準備ができました。下にメッセージを入力してください。",default:"上からプロバイダーを選択して開始してください"}},ume={continue:{title:"会話を続ける",description:"コードについて質問したり、変更をリクエストしたり、開発タスクのサポートを受けられます"},loading:{olderMessages:"過去のメッセージを読み込んでいます...",sessionMessages:"セッションメッセージを読み込んでいます..."},messages:{showingOf:"{{total}}件中{{shown}}件を表示",scrollToLoad:"上にスクロールしてさらに読み込む",showingLast:"最新{{count}}件を表示(全{{total}}件)",loadEarlier:"過去のメッセージを読み込む"}},pme={selectProject:{title:"プロジェクトを選択",description:"プロジェクトを選択してそのディレクトリでシェルを開きます"},status:{newSession:"新しいセッション",initializing:"初期化中...",restarting:"再起動中..."},actions:{disconnect:"切断",disconnectTitle:"シェルから切断",restart:"再起動",restartTitle:"シェルを再起動(先に切断してください)",connect:"シェルで続行",connectTitle:"シェルに接続"},loading:"ターミナルを読み込んでいます...",connecting:"シェルに接続しています...",startSession:"新しいClaudeセッションを開始",startProviderSession:"新しい{{provider}}セッションを開始",resumeSession:"セッションを再開: {{displayName}}...",runCommand:"{{projectName}}で{{command}}を実行",startCli:"{{projectName}}でClaude CLIを起動しています",startProviderCli:"{{projectName}}で{{provider}}を起動しています",defaultCommand:"コマンド"},mme={actions:{thinking:"Thinking",processing:"Processing",analyzing:"Analyzing",working:"Working",computing:"Computing",reasoning:"Reasoning"},state:{live:"Live",paused:"Paused"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}m {{seconds}}s",label:"{{time}} elapsed",startingNow:"Starting now"},controls:{stopGeneration:"Stop Generation",pressEscToStop:"Press Esc anytime to stop"},providers:{assistant:"Assistant"}},hme={codeBlock:Kpe,copyMessage:Ype,messageTypes:Zpe,tools:Xpe,search:Jpe,fileOperations:Qpe,interactive:eme,thinking:tme,json:nme,permissions:rme,todo:ame,plan:ime,usageLimit:sme,codex:ome,input:lme,thinkingMode:cme,providerSelection:dme,session:ume,shell:pme,claudeStatus:mme},fme={changes:"件の変更",previousChange:"前の変更",nextChange:"次の変更",hideDiff:"差分ハイライトを非表示",showDiff:"差分ハイライトを表示",settings:"エディタ設定",collapse:"エディタを折りたたむ",expand:"エディタを全幅に展開"},gme="{{fileName}}を読み込んでいます...",bme={showingChanges:"変更を表示中"},xme={download:"ファイルをダウンロード",save:"保存",saving:"保存中...",saved:"保存しました!",exitFullscreen:"全画面を終了",fullscreen:"全画面",close:"閉じる"},vme={lines:"行数:",characters:"文字数:",shortcuts:"Ctrl+Sで保存 • Escで閉じる"},yme={title:"バイナリファイル",message:'ファイル "{{fileName}}" はバイナリファイルのため、テキストエディタで表示できません。'},wme={toolbar:fme,loading:gme,header:bme,actions:xme,footer:vme,binaryFile:yme},kme={title:"TaskMaster AIが設定されていません",description:"TaskMasterは、AIを活用した支援により、複雑なプロジェクトを管理しやすいタスクに分解するのに役立ちます",whatIsTitle:"🎯 TaskMasterとは?",features:{aiPowered:"AIを活用したタスク管理:複雑なプロジェクトを管理しやすいサブタスクに分解",prdTemplates:"PRDテンプレート:Product Requirements Documentからタスクを生成",dependencyTracking:"依存関係の追跡:タスクの関係性と実行順序を理解",progressVisualization:"進捗の可視化:カンバンボードと詳細なタスク分析",cliIntegration:"CLI統合:高度なワークフローのためにtaskmasterコマンドを使用"},initializeButton:"TaskMaster AIを初期化"},Sme={title:"TaskMasterを始める",subtitle:"TaskMasterが初期化されました!次にすることは:",steps:{createPRD:{title:"Product Requirements Document (PRD) を作成",description:"プロジェクトのアイデアについて話し合い、構築したい内容を説明するPRDを作成します。",addButton:"PRDを追加",existingPRDs:"既存のPRD:"},generateTasks:{title:"PRDからタスクを生成",description:"PRDができたら、AIアシスタントに解析を依頼してください。TaskMasterが自動的に実装の詳細を含む管理しやすいタスクに分解します。"},analyzeTasks:{title:"タスクの分析と展開",description:"AIアシスタントにタスクの複雑さを分析してもらい、より簡単に実装できる詳細なサブタスクに展開します。"},startBuilding:{title:"開発を始める",description:"AIアシスタントにタスクの作業を開始してもらい、ステータスを更新し、プロジェクトの進行に応じて新しいタスクを追加します。"}},tip:"💡 ヒント:TaskMasterのAIを活用したタスク生成を最大限に活用するには、PRDから始めましょう"},Cme={title:"TaskMasterのセットアップ",subtitle:"{{projectName}}のインタラクティブCLI",willStart:"TaskMasterの初期化が自動的に開始されます",completed:"TaskMasterのセットアップが完了しました!このウィンドウを閉じることができます。",closeButton:"閉じる",closeContinueButton:"閉じて続ける"},Nme={title:"TaskMasterを始める",subtitle:"生産的なタスク管理のガイド",examples:{parsePRD:`💬 例:
|
|
@@ -831,7 +831,7 @@ Build and smoke checks pass`}),[C,A]=m.useState(""),[R,j]=m.useState({title:"",n
|
|
|
831
831
|
"Пожалуйста, добавьте новую задачу для реализации загрузки изображений профиля пользователя с использованием Cloudinary, изучите лучший подход."`},moreExamples:"Посмотреть больше примеров и шаблонов использования →",proTips:{title:"💡 Профессиональные советы",search:"Используйте строку поиска для быстрого поиска конкретных задач",views:"Переключайтесь между представлениями Канбан, Список и Сетка, используя переключатели представлений",filters:"Используйте фильтры для фокусировки на конкретных статусах или приоритетах задач",details:"Нажмите на любую задачу для просмотра детальной информации и управления подзадачами"},learnMore:{title:"📚 Узнать больше",description:"TaskMaster AI - это продвинутая система управления задачами, созданная для разработчиков. Получите документацию, примеры и внесите вклад в проект.",githubButton:"Посмотреть на GitHub"}},Cfe={placeholder:"Поиск задач..."},Nfe={button:"Фильтры",status:"Статус",priority:"Приоритет",sortBy:"Сортировать по",allStatuses:"Все статусы",allPriorities:"Все приоритеты",showing:"Показано {{filtered}} из {{total}} задач",clearFilters:"Очистить фильтры"},Efe={id:"ID",status:"Статус",priority:"Приоритет",idAsc:"ID (по возрастанию)",idDesc:"ID (по убыванию)",titleAsc:"Название (А-Я)",titleDesc:"Название (Я-А)",statusAsc:"Статус (сначала ожидающие)",statusDesc:"Статус (сначала выполненные)",priorityAsc:"Приоритет (сначала высокий)",priorityDesc:"Приоритет (сначала низкий)"},Tfe={kanban:"Представление Канбан",list:"Представление списком",grid:"Представление сеткой"},Afe={pending:"📋 К выполнению",inProgress:"🚀 В процессе",done:"✅ Выполнено",blocked:"🚫 Заблокировано",deferred:"⏳ Отложено",cancelled:"❌ Отменено",noTasksYet:"Задач пока нет",tasksWillAppear:"Задачи появятся здесь",moveTasksHere:"Перемещайте задачи сюда при начале работы",completedTasksHere:"Завершенные задачи появляются здесь",statusTasksHere:"Задачи с этим статусом появятся здесь"},jfe={help:"Руководство по началу работы с TaskMaster",prds:"PRD",addPRD:"Добавить PRD",addTask:"Добавить задачу",createNewPRD:"Создать новый PRD",prdsAvailable:"Доступно {{count}} PRD"},Rfe={modified:"Изменено: {{date}}"},Ife={pending:"Ожидание","in-progress":"В процессе",done:"Выполнено",blocked:"Заблокировано",deferred:"Отложено",cancelled:"Отменено"},_fe={high:"Высокий",medium:"Средний",low:"Низкий"},Lfe={title:"Нет задач, соответствующих вашим фильтрам",description:"Попробуйте изменить критерии поиска или фильтрации."},Pfe={notConfigured:yfe,gettingStarted:wfe,setupModal:kfe,helpGuide:Sfe,search:Cfe,filters:Nfe,sort:Efe,views:Tfe,kanban:Afe,buttons:jfe,prd:Rfe,statuses:Ife,priorities:_fe,noMatchingTasks:Lfe},Dfe={save:"Speichern",cancel:"Abbrechen",delete:"Löschen",create:"Erstellen",edit:"Bearbeiten",close:"Schließen",confirm:"Bestätigen",submit:"Absenden",retry:"Erneut versuchen",refresh:"Aktualisieren",search:"Suchen",clear:"Leeren",copy:"Kopieren",download:"Herunterladen",upload:"Hochladen",browse:"Durchsuchen"},Ofe={chat:"Chat",shell:"Terminal",files:"Dateien",git:"Quellcodeverwaltung",changes:"Änderungen",liveView:"Live-Ansicht",tasks:"Aufgaben",remote:"Remote",controlRoom:"Kontrolle",orchestration:"Orchestrierung"},Mfe={loading:"Lädt...",success:"Erfolgreich",error:"Fehler",failed:"Fehlgeschlagen",pending:"Ausstehend",completed:"Abgeschlossen",inProgress:"In Bearbeitung"},Ffe={savedSuccessfully:"Erfolgreich gespeichert",deletedSuccessfully:"Erfolgreich gelöscht",updatedSuccessfully:"Erfolgreich aktualisiert",operationFailed:"Vorgang fehlgeschlagen",networkError:"Netzwerkfehler. Bitte überprüf deine Verbindung.",unauthorized:"Nicht autorisiert. Bitte meld dich an.",notFound:"Nicht gefunden",invalidInput:"Ungültige Eingabe",requiredField:"Dieses Feld ist erforderlich",unknownError:"Ein unbekannter Fehler ist aufgetreten"},zfe={settings:"Einstellungen",home:"Startseite",back:"Zurück",next:"Weiter",previous:"Zurück",logout:"Abmelden"},Bfe={language:"Sprache",theme:"Design",darkMode:"Darkmode",lightMode:"Hellmodus",name:"Name",description:"Beschreibung",enabled:"Aktiviert",disabled:"Deaktiviert",optional:"Optional",version:"Version",select:"Auswählen",selectAll:"Alle auswählen",deselectAll:"Alle abwählen"},Ufe={justNow:"Gerade eben",minutesAgo:"vor {{count}} Min.",hoursAgo:"vor {{count}} Std.",daysAgo:"vor {{count}} Tagen",yesterday:"Gestern"},$fe={newFile:"Neue Datei",newFolder:"Neuer Ordner",rename:"Umbenennen",move:"Verschieben",copyPath:"Pfad kopieren",openInEditor:"Im Editor öffnen"},Hfe={loading:"Pixcode wird geladen",settingUpWorkspace:"Arbeitsbereich wird eingerichtet...",chooseProject:"Projekt auswählen",selectProjectDescription:"Wähl ein Projekt aus der Seitenleiste, um mit Claude zu programmieren. Jedes Projekt enthält deine Chat-Sitzungen und den Dateiverlauf.",tip:"Tipp",createProjectMobile:"Tipp oben auf die Menüschaltfläche, um auf Projekte zuzugreifen",createProjectDesktop:"Erstell ein neues Projekt, indem du auf das Ordnersymbol in der Seitenleiste klickst",newSession:"Neue Sitzung",untitledSession:"Unbenannte Sitzung",projectFiles:"Projektdateien",landing:{title:"Pixcode-Arbeitsbereich starten",description:"Wähle ein Projekt, starte einen neuen Chat oder starte die Orchestrierung mit einem Ziel. Die Orchestrierung verwaltet die von dir ausgewählten CLI-Agenten, zeigt jeden Schritt und macht Fehler direkt sichtbar.",startOrchestration:"Orchestrierung starten",startOrchestrationDescription:"Erstellt automatisch ein Projekt und öffnet die Orchestrierungsansicht mit Agentensteuerung und Verlauf.",startChat:"Neuen Chat starten",startChatDescription:"Erstellt automatisch einen Ordner und öffnet den normalen Chat mit einem Agenten.",sidebarHint:"Wenn du ein vorhandenes Projekt in der Seitenleiste auswählst, bleiben Chatverlauf, Dateien, Git-Status, Tasks und Orchestrierung in derselben Hauptansicht."}},Gfe={loading:"Dateien werden geladen...",files:"Dateien",simpleView:"Einfache Ansicht",compactView:"Kompakte Ansicht",detailedView:"Detailansicht",searchPlaceholder:"Dateien und Ordner durchsuchen...",clearSearch:"Suche leeren",name:"Name",size:"Größe",modified:"Geändert",permissions:"Berechtigungen",noFilesFound:"Keine Dateien gefunden",checkProjectPath:"Überprüf, ob der Projektpfad zugänglich ist",noMatchesFound:"Keine Treffer gefunden",tryDifferentSearch:"Versuch einen anderen Suchbegriff oder leere die Suche",justNow:"gerade eben",minAgo:"vor {{count}} Min.",hoursAgo:"vor {{count}} Std.",daysAgo:"vor {{count}} Tagen",newFile:"Neue Datei (Cmd+N)",newFolder:"Neuer Ordner (Cmd+Shift+N)",refresh:"Aktualisieren",collapseAll:"Alle einklappen",context:{rename:"Umbenennen",delete:"Löschen",copyPath:"Pfad kopieren",download:"Herunterladen",newFile:"Neue Datei",newFolder:"Neuer Ordner",refresh:"Aktualisieren",menuLabel:"Datei-Kontextmenü",loading:"Lädt..."}},Vfe={title:"Neues Projekt erstellen",steps:{type:"Typ",configure:"Konfigurieren",confirm:"Bestätigen"},step1:{question:"Hast du bereits einen Arbeitsbereich, oder möchtest du einen neuen erstellen?",existing:{title:"Vorhandener Arbeitsbereich",description:"Ich habe bereits einen Arbeitsbereich auf meinem Server und möchte ihn nur zur Projektliste hinzufügen"},new:{title:"Neuer Arbeitsbereich",description:"Einen neuen Arbeitsbereich erstellen, optional aus einem GitHub-Repository klonen"},githubClone:{title:"Aus GitHub klonen",description:"Wähle einen Zielordner und klone ein Repository hinein"},subfolder:{title:"Unterordner erstellen",description:"Wähle einen übergeordneten Ordner und erstelle darin einen neuen Unterordner"}},step2:{subfolderParentPath:"Übergeordneter Ordner",subfolderParentHelp:"Pfad zum Ordner, in dem der neue Unterordner erstellt wird",subfolderName:"Unterordner-Name",subfolderNameHelp:"Ein Ordner mit diesem Namen wird im übergeordneten Ordner erstellt",existingPath:"Arbeitsbereichspfad",newPath:"Arbeitsbereichspfad",existingPlaceholder:"/Pfad/zum/vorhandenen/Arbeitsbereich",newPlaceholder:"/Pfad/zum/neuen/Arbeitsbereich",existingHelp:"Vollständiger Pfad zu deinem vorhandenen Arbeitsbereichsverzeichnis",newHelp:"Vollständiger Pfad zu deinem Arbeitsbereichsverzeichnis",githubUrl:"GitHub-URL (Optional)",githubPlaceholder:"https://github.com/benutzername/repository",githubHelp:"Optional: GitHub-URL angeben, um ein Repository zu klonen",githubAuth:"GitHub-Authentifizierung (Optional)",githubAuthHelp:"Nur für private Repositories erforderlich. Öffentliche Repos können ohne Authentifizierung geklont werden.",loadingTokens:"Gespeicherte Token werden geladen...",storedToken:"Gespeicherter Token",newToken:"Neuer Token",nonePublic:"Keiner (Öffentlich)",selectToken:"Token auswählen",selectTokenPlaceholder:"-- Token auswählen --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"Dieser Token wird nur für diesen Vorgang verwendet",publicRepoInfo:"Öffentliche Repositories benötigen keine Authentifizierung. Du kannst das Token beim Klonen eines öffentlichen Repos weglassen.",noTokensHelp:"Keine gespeicherten Token verfügbar. Du kannst Token unter Einstellungen → API-Schlüssel für einfachere Wiederverwendung hinzufügen.",optionalTokenPublic:"GitHub-Token (Optional für öffentliche Repos)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (leer lassen für öffentliche Repos)"},step3:{reviewConfig:"Konfiguration überprüfen",workspaceType:"Arbeitsbereichstyp:",existingWorkspace:"Vorhandener Arbeitsbereich",newWorkspace:"Neuer Arbeitsbereich",subfolderWorkspace:"Neuer Unterordner",path:"Pfad:",parentPath:"Übergeordneter Pfad:",subfolderName:"Unterordner-Name:",cloneFrom:"Klonen von:",authentication:"Authentifizierung:",usingStoredToken:"Gespeicherter Token wird verwendet:",usingProvidedToken:"Angegebener Token wird verwendet",noAuthentication:"Keine Authentifizierung",sshKey:"SSH-Schlüssel",existingInfo:"Der Arbeitsbereich wird zur Projektliste hinzugefügt und steht für Claude/Cursor-Sitzungen zur Verfügung.",newWithClone:"Das Repository wird aus diesem Ordner geklont.",newEmpty:"Der Arbeitsbereich wird zur Projektliste hinzugefügt und steht für Claude/Cursor-Sitzungen zur Verfügung.",subfolderInfo:"Ein neuer Unterordner wird im übergeordneten Ordner erstellt und zur Projektliste hinzugefügt.",cloningRepository:"Repository wird geklont..."},buttons:{cancel:"Abbrechen",back:"Zurück",next:"Weiter",createProject:"Projekt erstellen",creating:"Wird erstellt...",cloning:"Wird geklont..."},errors:{selectType:"Bitte wähl aus, ob du einen vorhandenen Arbeitsbereich hast oder einen neuen erstellen möchtest",providePath:"Bitte gib einen Arbeitsbereichspfad an",provideSubfolderName:"Bitte gib einen Namen für den Unterordner ein",subfolderNameInvalid:"Unterordner-Name darf keine Pfadtrennzeichen enthalten oder . / .. sein",failedToCreate:"Arbeitsbereich konnte nicht erstellt werden",failedToCreateFolder:"Ordner konnte nicht erstellt werden"}},Wfe={title:"Update verfügbar",newVersionReady:"Eine neue Version ist verfügbar",currentVersion:"Aktuelle Version",latestVersion:"Neueste Version",whatsNew:"Neuigkeiten:",viewFullRelease:"Vollständige Version anzeigen",updateProgress:"Update-Fortschritt:",manualUpgrade:"Manuelles Upgrade:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:'Oder klick auf "Jetzt aktualisieren", um das Update automatisch durchzuführen.',updateCompleted:"Update erfolgreich abgeschlossen!",restartServer:"Bitte starte den Server neu, um die Änderungen anzuwenden.",updateFailed:"Update fehlgeschlagen",buttons:{close:"Schließen",later:"Später",copyCommand:"Befehl kopieren",updateNow:"Jetzt aktualisieren",updating:"Wird aktualisiert..."},ariaLabels:{closeModal:"Versions-Update-Modal schließen",showSidebar:"Seitenleiste anzeigen",settings:"Einstellungen",updateAvailable:"Update verfügbar",closeSidebar:"Seitenleiste schließen"}},qfe={title:"Orchestrierung",refresh:"Aktualisieren",goal:"Ziel",mode:"Ausführungsmodus",systemPlan:"Systemplan",noMode:"Kein Modus ausgewählt",loadingPlan:"Agentenplan wird geladen.",start:"Team starten",starting:"Wird gestartet",needAgent:"Aktiviere mindestens einen CLI-Arbeiter.",startFailed:"Workflow konnte nicht gestartet werden.",cliControl:"CLI-Teamsteuerung",enabledCount:"{{count}} aktiv",enabled:"Aktiv",disabled:"Inaktiv",history:"Verlauf",emptyHistory:"Noch keine Läufe. Schreibe ein Ziel und starte die Agenten.",steps:"{{done}}/{{total}} Schritte",notSelected:"Kein Lauf ausgewählt",notSelectedDescription:"Wähle einen früheren Lauf oder starte ein neues Ziel. Agentennachrichten, Fehler, Änderungszusammenfassungen und Vorschauausgaben erscheinen hier.",loadFailed:"Laufdetails konnten nicht geladen werden.",loadingRun:"Lauf wird geladen...",agentSteps:"Agentenschritte",noStepOutput:"Keine Schrittausgabe.",agentMessages:"Agentennachrichten",noAgentMessages:"Dieser Agent hat noch keine Nachricht erzeugt. Wenn der Lauf fehlgeschlagen ist, erscheint der echte CLI-Fehler oben.",outputs:"Ausgaben",noOutputs:"Noch keine Änderungszusammenfassung, Vorschau oder Befehlsausgabe.",open:"Öffnen",subtitle:"Pixcode kann lokale Checks, Tests, Terminalarbeit und Projektoperationen fuer {{project}} koordinieren.",goalPlaceholder:"Beispiel: Auth-Ansicht für Single-Port-Deployment korrigieren, Fehler erfassen und mit Lint und Typecheck prüfen.",artifact:{fileDiff:"Änderungszusammenfassung",previewUrl:"Vorschau",commandOutput:"Befehlsausgabe"},role:{user:"Benutzer",agent:"Agent"},status:{queued:"Wartet",running:"Läuft",completed:"Abgeschlossen",failed:"Fehler",canceled:"Abgebrochen",skipped:"Übersprungen"},nodes:{codex_review:"Codex-Prüfung",gemini_review:"Gemini-Prüfung",claude_review:"Claude-Prüfung",claude_code_review:"Claude-Prüfung",cursor_review:"Cursor-Prüfung",aggregate:"Zusammenfassung",architect:"Planung",implement:"Implementierung",review:"Prüfung",proposal:"Vorschlag",critique:"Kritik",response:"Antwort",judge:"Entscheidung",coordinator:"Koordinator",final_report:"Abschlussbericht"},workflows:{multi_model_review:{name:"Multi-Modell-Prüfung",description:"Aktive CLI-Agenten prüfen dasselbe Ziel getrennt, danach fasst ein aktiver Agent das Ergebnis zusammen."},sequential_handoff:{name:"Sequenzielle Übergabe",description:"Agenten planen, implementieren und prüfen nacheinander. Deaktivierte CLI-Schritte werden übersprungen."},adversarial_debate:{name:"Entscheidungsdebatte",description:"Agenten schlagen vor, kritisieren, antworten und erzeugen eine finale Empfehlung."},agent_team:{name:"Agententeam",description:"Ein Koordinator liest Ziel und aktive CLI-Instanzen, weist Arbeit zu und sammelt anschließend das Ergebnis."}},adapters:{"claude-code":{label:"Claude Code",role:"CLI-Arbeiter"},cursor:{label:"Cursor",role:"CLI-Arbeiter"},codex:{label:"Codex",role:"CLI-Arbeiter"},gemini:{label:"Gemini",role:"CLI-Arbeiter"},qwen:{label:"Qwen Code",role:"CLI-Arbeiter"},opencode:{label:"OpenCode",role:"CLI-Arbeiter"}},activeCount:"{{active}}/{{total}} aktiv",teamHint:"Jede Zeile ist ein CLI-Arbeiter. Du kannst mehrere Claude-, Codex-, Cursor-, Gemini-, Qwen- oder OpenCode-Arbeiter erstellen und jedem eine eigene Aufgabe geben.",parallelLimit:"Parallel-Limit",addAgent:"{{agent}} hinzufügen",duplicateAgent:"{{agent}} duplizieren",removeAgent:"{{agent}} entfernen",assignment:"Aufgabe",assignmentPlaceholder:"Optional: sag diesem Arbeiter genau, was er übernehmen soll. Leer lassen, wenn der Koordinator zuweisen soll.",agentInstance:"{{name}} #{{number}}",taskTitle:"Aufgabe",taskTitlePlaceholder:"Feature umsetzen",taskDescription:"Beschreibung",taskDescriptionPlaceholder:"Umfang, Grenzen, erwartetes Ergebnis",addTask:"Hinzufügen",runTask:"Ausführen",cancelTask:"Abbrechen",dispatchTask:"Aufgabe zuweisen",adapter:"Adapter",isolation:"Isolation",dispatch:"Zuweisen",auto:"Automatisch",waitingForStream:"Warte auf Stream...",workflow:"Workflow",input:"Eingabe",taskStates:{todo:"Zu erledigen",in_progress:"In Arbeit",in_review:"In Prüfung",done:"Erledigt",failed:"Fehlgeschlagen",canceled:"Abgebrochen"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},stop:"Team stoppen",stopping:"Wird gestoppt",cancelFailed:"Workflow konnte nicht gestoppt werden.",needRoles:"Weise für diesen Modus mindestens einen aktiven Agenten diesen Rollen zu: {{roles}}.",quickPrompts:{label:"Schnell-Prompt:",liveTrading:{label:"8024 Live-Trading-Ansicht",prompt:"Hallo, bitte erstelle ein kleines Projekt und starte es anschließend auf Port 8024. Ich möchte ein Binance-FAPI-verbundenes Design im TradingView-Stil mit TradingView-Chart und einem Stern-/Favoritensystem links. Teile die Arbeit logisch auf und verwalte den Prozess automatisch."}},teamHistory:"Teamverlauf",changeSummary:"Änderungsübersicht",noChangeSummary:"Die finale Zusammenfassung ist noch nicht bereit. Eine lesbare Markdown-Zusammenfassung erscheint hier, wenn die Agenten fertig sind.",prepareTeamFromReport:"Agententeam aus diesem Bericht vorbereiten",prepareTeamTitle:"Agententeam-Prompt vorbereiten",prepareTeamDescription:"Die Debattenausgabe wurde in einen neuen Agent-Team-Prompt umgewandelt. Du kannst ihn bearbeiten und dann in den Agent-Team-Modus übernehmen.",usePreparedPrompt:"Prompt verwenden",reportToPromptPrefix:"Bereite aus dem folgenden Debatten-/Entscheidungsbericht ein Agententeam vor und führe es aus. Teile die Anforderungen in Aufgaben, schlage sinnvolle Zuweisungen für die verfügbaren CLI-Agenten vor und starte erst nach Benutzerbestätigung.",generatedSummaryTitle:"Automatische Laufzusammenfassung",summaryStatus:"Gesamtstatus",summarySteps:"Abgeschlossene Schritte",summaryFailures:"Fehlgeschlagene Schritte",summaryCanceled:"Abgebrochene Schritte",summaryDiffs:"Diff-/Änderungsausgaben",summaryPreviews:"Vorschauausgaben",summaryErrorPrefix:"Fehler",assignedWork:"Zugewiesene Arbeit",autoAssigned:"Automatisch / Koordinator entscheidet",stages:{coordinator:"Koordinator",handoff:"Übergabe",backend:"Backend",frontend:"Frontend",implementation:"Implementierung",review:"Prüfung",repair:"Korrektur",proposal:"Vorschlag",critique:"Kritik",response:"Antwort",decision:"Entscheidung",report:"Bericht",final_report:"Finaler Bericht"},agentRole:"Phase",agentRoles:{auto:"Automatisch",backend:"Backend",frontend:"Frontend",review:"Test / Prüfung",implementation:"Implementierung",proposal:"Vorschlag",critique:"Kritik",response:"Antwort",decision:"Entscheidung / Bericht",report:"Bericht",custom:"Benutzerdefiniert"},customRolePlaceholder:"Z. B. Sicherheit, Mobile UX, DB-Architektur",roleHints:{default:"Leer lassen und der Koordinator weist diesen Agenten anhand des Ziels zu.",agent_team:"Wähle Backend-, Frontend- oder Review-Phasen oder lass Agenten auf automatisch.",multi_model_review:"Aktive Agenten prüfen; wenn eine Berichtsrolle gewählt ist, fasst dieser Agent die finale Zusammenfassung zusammen.",sequential_handoff:"Agenten laufen in der gewählten Reihenfolge; der Aufgabentext grenzt jeden Schritt ab.",adversarial_debate:"Die Phasenauswahl ist in der Entscheidungsdebatte optional; leer gelassen weist das System die gewählten Agenten der Reihe nach Vorschlag, Kritik und Antwort zu."},soloAgent:"Nur mit {{agent}} ausführen",soloAgentShort:"Solo",cliSettings:"CLI-Einstellungen",workspaceTarget:"Ziel-Arbeitsbereich",workspaceTargets:{selectedProject:"Ausgewähltes Projekt",pixcodeApp:"Pixcode-System",custom:"Eigener Pfad"},customWorkspacePlaceholder:"/pfad/zum/projekt",workspaceTargetHint:"Agenten laufen in: {{path}}",autoDetect:"automatisch erkennen",needWorkspacePath:"Gib einen eigenen Arbeitsbereichspfad ein.",quickWorkspaceCheck:"Workspace pruefen"},Kfe=JSON.parse('{"title":"Kontrollraum","subtitle":"Produktion, Plattform, Admin, Audit und Self-hosted-Zugriff für {{target}}","thisServer":"diesen Server","refresh":"Aktualisieren","nav":{"overview":"Überblick","production":"Produktion","admin":"Admin","team":"Team","secrets":"Secrets","marketplace":"Marketplace","eval":"Auswertung","usage":"Nutzung","security":"Sicherheit","access":"Zugriff"},"overview":{"title":"v1.46 launch surface","description":"Every box below is backed by a v1.44-v1.45 API and is now visible from the UI.","latestAuditEvents":"Latest audit events","remoteAccessOptions":"Remote access options"},"metrics":{"issueRuns":"Issue-to-PR runs","reviewItems":"Review items","subUsers":"Sub-users","collaborators":"Collaborators","secrets":"Scoped secrets","marketplace":"Marketplace","evalRuns":"Eval runs","securityAudits":"Security audits","attention":"Attention","running":"Running","needsAttention":"Needs attention","runningNow":"Running now","reviews":"Reviews","checkpoints":"Checkpoints","roles":"Roles","auditEvents":"Audit events","scopedSecrets":"Scoped secrets","auditRuns":"Audit runs","findings":"Findings","usageRows":"Usage rows","evalSuites":"Eval suites"},"sections":{"production":{"title":"Production loop","description":"Start issue-to-PR runs, parse CI failures, review changes, schedule background jobs, and create checkpoints."},"admin":{"title":"Admin-System","description":"Unterbenutzer erstellen, Konten deaktivieren und Aktivitäten für einen Self-hosted-Pixcode-Server prüfen."},"team":{"title":"Projektmitarbeiter","description":"Partner, Mitarbeiter, Reviewer und Viewer pro Projekt zuweisen, ohne alle zu globalen Admins zu machen."},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"Self-hosted-Zugriff","description":"Tailscale nutzen, wenn es keine feste Domain gibt, oder Cloudflare Tunnel/custom Domain für eine stabile öffentliche URL konfigurieren."}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Create sub-user","rolePermissions":"Role permissions","addCollaborator":"Add collaborator","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Remote access setup"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Queue run","parseFailure":"Parse failure","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Create user","disable":"Disable","enable":"Enable","addCollaborator":"Add collaborator","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Save access path","checkUrl":"Check URL","checkTailscale":"Check Tailscale"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"So erhalten Mitarbeiter Zugriff","stepUsers":"Unterbenutzer erstellen","stepUsersDescription":"Person im Admin-System mit einer Rolle wie member, viewer, project_worker oder project_partner anlegen.","stepRole":"Projektrolle zuweisen","stepRoleDescription":"Denselben Benutzer als Projektmitarbeiter hinzufügen, damit nur ausgewählte Projekte sichtbar und nutzbar sind.","stepLink":"Zugriffspfad teilen","stepLinkDescription":"Tailscale-, Cloudflare-Tunnel-, Custom-Domain- oder LAN-URL aus Self-hosted-Zugriff teilen.","paths":"Verfügbare Zugriffslinks"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operations","description":"Runs, reviews, approvals, scheduler, checkpoints"},"people":{"label":"People","description":"Admins, collaborators, roles, activity"},"access":{"label":"Access","description":"LAN, Tailscale, tunnel, domain guidance"},"security":{"label":"Security","description":"Secrets, permission risk, audit checks"},"insights":{"label":"Insights","description":"Usage, evaluations, marketplace health"}},"context":{"title":"What this means","recommendedNextStep":"Recommended next step","runTimeline":"Run timeline","runTimelineDescription":"Readable activity feed for agents, reviewers, checkpoints, and audit events.","emptyTimelineTitle":"No run timeline yet","emptyTimelineDescription":"Run activity appears here after issue runs, reviews, checkpoints, or audit events are recorded.","serverSignal":"Server signal","serverSignalDescription":"The first screen avoids raw backend sections and shows only current status."},"operations":{"runTimeline":"Run timeline","runTimelineDescription":"Readable actor, action, and result history without raw JSON.","noActivityTitle":"No activity yet","noActivityDescription":"Issue runs, review decisions, checkpoints, and audit events will appear here as a vertical timeline.","actionQueue":"Action queue","actionQueueDescription":"Review items are shown as mobile-friendly rows instead of a cramped table.","noReviewItemsTitle":"No review items","noReviewItemsDescription":"Create a review item when changed files need an accept/fix decision.","reviewRequested":"Review requested","changedFiles":"{{count}} changed files","accept":"Accept"},"people":{"projectCollaborators":"Project collaborators","projectCollaboratorsDescription":"Project partners and workers are not global admins. They get scoped access to assigned projects.","noCollaboratorsTitle":"No collaborators yet","noCollaboratorsDescription":"Create a sub-user first, then assign that person to a project role.","project":"Project","roleScoped":"role scoped","auditLog":"Audit log","auditLogDescription":"Search what sub-users, project partners, and workers changed without opening a raw database view.","searchAudit":"Search actor, action, project, or detail","noAuditMatchTitle":"No audit events match","noAuditMatchDescription":"User and project access activity appears here after actions are recorded.","system":"system","auditEvent":"Audit event","advancedTitle":"Advanced people management","advancedDescription":"Create users and assign project roles only when needed."},"access":{"openSettings":"Open Settings > Access","lanTitle":"LAN and local","lanDescription":"Use when the browser is on the same machine or network. Start here before private or public tunnels.","tailscaleTitle":"Tailscale private access","tailscaleDescription":"Best when a team needs private access without exposing Pixcode publicly. The UI should guide install, login, and URL sharing.","cloudflareTitle":"Cloudflare or custom domain","cloudflareDescription":"Best when users need a stable HTTPS URL. Configure the tunnel/domain once and share it with assigned users.","howUsersConnect":"How users connect","howUsersConnectDescription":"This keeps Access understandable for non-technical users.","stepUserTitle":"Create the user","stepUserDescription":"Add them in People so the server knows who they are.","stepRoleTitle":"Assign project role","stepRoleDescription":"Give them project access{{projectSuffix}}.","stepUrlTitle":"Share one URL","stepUrlDescription":"Use a LAN, Tailscale, Cloudflare Tunnel, or custom domain URL from Settings > Access."},"security":{"secretVault":"Secret vault","secretVaultDescription":"Rows show scope, target, and redacted env names. Values stay hidden.","noSecretsTitle":"No secrets stored","noSecretsDescription":"Store provider, project, workflow, Telegram, or API env values from the advanced form.","global":"global","advancedTitle":"Advanced security actions","advancedDescription":"Store scoped env values or queue audit checks."},"insights":{"usageSummary":"Usage summary","usageSummaryDescription":"Provider metrics are stacked as cards on mobile instead of forcing a wide table.","noUsageTitle":"No usage events yet","noUsageDescription":"Usage appears after provider or workflow events are recorded.","provider":"provider","usageRowDescription":"{{tokens}} tokens - {{cost}} - {{latency}}ms avg","errorRate":"{{rate}}% errors","marketplaceHealth":"Marketplace health","marketplaceHealthDescription":"MCP servers, workflow templates, provider adapters, and notification channels stay visible without crowding the overview.","noMarketplaceTitle":"No marketplace entries","noMarketplaceDescription":"Register entries only when a plugin or workflow template is ready to install.","noSourceConfigured":"No source configured","unknown":"unknown","advancedTitle":"Advanced insight actions","advancedDescription":"Record usage, create evaluation suites, or register marketplace entries."},"recommendations":{"attention":"Open Operations first. Clear reviews, errors, failed evals, or security findings before starting new work.","access":"Open Settings > Access and save the one URL your users should use. Then assign project roles in People.","people":"Create sub-users first, assign project roles second, then share an access path.","security":"Store secrets with the smallest scope that works, then run a permission or secret scan.","insights":"Compare provider cost, latency, and eval pass rate before changing model defaults.","operations":"Review Running now and the timeline. If nothing needs attention, start the next issue-to-PR or scheduled job."}}'),Yfe={title:"VS Code-Arbeitsbereich",noProject:"Kein Projekt ausgewählt",activity:{explorer:"Explorer",projects:"Projekte",sourceControl:"Quellcodeverwaltung",terminal:"Terminal",showPanel:"Linkes Panel anzeigen",hidePanel:"Linkes Panel ausblenden"},panels:{explorer:"Explorer",projects:"Projekte",sourceControl:"Quellcodeverwaltung",terminal:"Terminal",editor:"Editor",cli:"CLI",rightTerminal:"Terminal"},editor:{emptyTitle:"Datei im Explorer öffnen",closeTab:"{{file}} schließen",scrollLeft:"Tabs nach links scrollen",scrollRight:"Tabs nach rechts scrollen",moreActions:"Weitere Tab-Aktionen",closeSplit:"Geteilten Editor schließen",context:{close:"Schließen",closeAll:"Alle schließen",copyPath:"Pfad kopieren",splitRight:"Rechts teilen",splitMoveRight:"Rechts teilen und verschieben"}},resize:{left:"Linkes Panel ändern",right:"CLI-Panel ändern"},menu:{openProject:"Projekt öffnen...",cloneFromGithub:"Repository klonen...",newChat:"Neuer Chat",openProjects:"Projekte öffnen"},menuBar:{file:"Datei",edit:"Bearbeiten",selection:"Auswahl",view:"Ansicht",go:"Gehe zu",run:"Ausführen",terminal:"Terminal",help:"Hilfe",openSettingsPanel:"Einstellungen öffnen"},projects:{openProject:"Projekt öffnen",cloneFromGithub:"Klonen",directoryList:"Verzeichnisse",refresh:"Projekte aktualisieren",emptyTitle:"Noch keine Projektverzeichnisse",emptyDescription:"Öffne einen lokalen Ordner oder klone ein Repository, um zu starten.",selected:"Ausgewählt",startChat:"Chat",fileCount:"{{formattedCount}} Dateien",fileCountPending:"Dateien werden geladen",startTitle:"Start a Pixcode workspace",startDescription:"Pick a folder and Pixcode will bind the explorer, terminal, and chat history to that workspace.",workHere:"Work in this folder"},workspace:{empty:"Öffne ein Projekt, um Workspace 1 zu erstellen.",openFirst:"Workspace öffnen",add:"Workspace hinzufügen",scrollLeft:"Workspaces nach links scrollen",scrollRight:"Workspaces nach rechts scrollen",close:"{{name}} schließen",closeAction:"Workspace schließen",closeOthers:"Andere schließen",closeAll:"Alle schließen",rename:"Umbenennen",star:"Markieren",unstar:"Markierung entfernen",toggleStar:"{{name}} markieren",moreActions:"Workspace-Aktionen"},cli:{projectScoped:"Projektbezogenes CLI-Terminal",chooseTitle:"CLI-Terminal starten",chooseDescription:"CLI auswaehlen und dann ein Terminal in voller Hoehe starten.",startSelected:"{{provider}} starten",newSession:"Neue CLI-Sitzung",checking:"Wird geprüft...",ready:"Bereit",notInstalled:"Nicht installiert",installing:"Wird installiert...",updateAvailable:"{{version}} aktualisieren",installProvider:"{{provider}} installieren",updateProvider:"{{provider}} aktualisieren",manualInstall:"Diese CLI muss manuell installiert werden.",installNoJob:"Die Installation hat keine Job-ID zurückgegeben.",installFailed:"Installation fehlgeschlagen.",installStreamLost:"Der Installationsstream wurde früh geschlossen. Die Installation läuft eventuell noch.",provider:"Provider",installRunning:"wird installiert",installDone:"ist bereit",installError:"braucht Aufmerksamkeit",showPanel:"CLI-Panel anzeigen",hidePanel:"CLI-Panel ausblenden",close:"Terminal schließen"},terminal:{title:"Terminal",close:"Terminal schließen"}},Zfe={open:"Benachrichtigungen öffnen",title:"Benachrichtigungen",markRead:"Gelesen",close:"Benachrichtigungen schließen",dismiss:"Benachrichtigung ausblenden"},Xfe={title:"Remote-Konsole",notSynced:"Nicht synchronisiert",refresh:"Aktualisieren",runId:"Lauf {{id}}",metrics:{projects:"Projekte",activeRuns:"Aktive Läufe",approvalQueue:"Freigabewarteschlange",webhooks:"Webhooks"},sections:{projects:"Multi-Projekt-Kontrollraum",approvals:"Freigabewarteschlange",webhooks:"Webhook-Status"},badges:{active:"{{count}} aktiv",approvals:"{{count}} Freigaben"},projectStats:{sessions:"{{count}} Sitzungen",failedRuns:"{{count}} fehlgeschlagene Läufe",recentRuns:"{{count}} letzte Läufe"},actions:{allow:"Erlauben",deny:"Ablehnen"},webhook:{on:"an",off:"aus",ok:"ok",failed:"fehlgeschlagen",noDelivery:"Noch keine Zustellung"},empty:{projects:"Keine Projekte verfügbar.",approvals:"Keine ausstehenden Freigaben.",webhooks:"Keine Webhooks konfiguriert."}},Jfe={buttons:Dfe,tabs:Ofe,status:Mfe,messages:Ffe,navigation:zfe,common:Bfe,time:Ufe,fileOperations:$fe,mainContent:Hfe,fileTree:Gfe,projectWizard:Vfe,versionUpdate:Wfe,orchestration:qfe,controlRoom:Kfe,vscodeWorkbench:Yfe,notifications:Zfe,remoteConsole:Xfe},Qfe="Einstellungen",ege={account:"Konto",permissions:"Berechtigungen",mcpServers:"MCP-Server",appearance:"Darstellung"},tge={title:"Konto",language:"Sprache",languageLabel:"Anzeigesprache",languageDescription:"Wähl deine bevorzugte Sprache für die Oberfläche",username:"Benutzername",email:"E-Mail",profile:"Profil",changePassword:"Passwort ändern"},nge={title:"MCP-Server",addServer:"Server hinzufügen",editServer:"Server bearbeiten",deleteServer:"Server löschen",serverName:"Servername",serverType:"Servertyp",config:"Konfiguration",testConnection:"Verbindung testen",status:"Status",connected:"Verbunden",disconnected:"Getrennt",scope:{label:"Geltungsbereich",user:"Benutzer:in",project:"Projekt"}},rge={title:"Darstellung",theme:"Design",codeEditor:"Code-Editor",editorTheme:"Editor-Design",wordWrap:"Zeilenumbruch",showMinimap:"Minimap anzeigen",lineNumbers:"Zeilennummern",fontSize:"Schriftgröße"},age={saveChanges:"Änderungen speichern",resetToDefaults:"Auf Standardwerte zurücksetzen",cancelChanges:"Änderungen abbrechen"},ige={title:"Schnelleinstellungen",sections:{appearance:"Darstellung",toolDisplay:"Werkzeuganzeige",viewOptions:"Anzeigeoptionen",inputSettings:"Eingabeeinstellungen",changeAwareness:"Kontrollzentrum"},darkMode:"Darkmode",autoExpandTools:"Werkzeuge automatisch erweitern",showRawParameters:"Rohe Parameter anzeigen",showThinking:"Denken anzeigen",autoScrollToBottom:"Automatisch nach unten scrollen",sendByCtrlEnter:"Mit Strg+Enter senden",sendByCtrlEnterDescription:"Wenn aktiviert, sendet Strg+Enter die Nachricht anstelle von Enter. Dies ist nützlich für IME-Benutzer:innen, um versehentliches Senden zu vermeiden.",changeAwareness:"Kontrollzentrum",changedFiles:{title:"Geänderte Dateien",description:"Verfolgt lokale Dateiänderungen und öffnet bei neuen Änderungen den Dateienbereich.",noProject:"Wähle ein Projekt aus, um lokale Änderungen zu verfolgen.",refresh:"Geänderte Dateien aktualisieren",empty:"Keine lokalen Änderungen erkannt",disabled:"Aktiviere das Kontrollzentrum, um lokale Änderungen zu beobachten.",more:"+{{count}} weitere Dateien",lastChecked:"Geprüft {{value}}",guideTitle:"Rechter Bereich",guideFiles:"Geänderte Dateien leuchten im Dateienbereich grün.",guidePanel:"Neue Änderungen öffnen automatisch die geteilte Ansicht.",status:{M:"M",A:"A",D:"D",U:"U"}},dragHandle:{dragging:"Handle wird gezogen",closePanel:"Einstellungspanel schließen",openPanel:"Einstellungspanel öffnen",draggingStatus:"Wird gezogen...",toggleAndMove:"Klicken zum Umschalten, ziehen zum Verschieben"}},sge={title:"Terminal-Tastenkürzel",sectionKeys:"Tasten",sectionNavigation:"Navigation",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"Pfeil oben",arrowDown:"Pfeil unten",scrollDown:"Nach unten scrollen",handle:{closePanel:"Tastenkürzel-Panel schließen",openPanel:"Tastenkürzel-Panel öffnen"}},oge={label:"Einstellungen",agents:"Agenten",appearance:"Darstellung",git:"Git",apiTokens:"API & Token",plugins:"Plugins",mobile:"Mobil nutzen",telegram:"Telegram",about:"Info",access:"Zugriff"},lge={darkMode:{label:"Darkmode",description:"Zwischen hellem und dunklem Design wechseln"},projectSorting:{label:"Projektsortierung",description:"Wie Projekte in der Seitenleiste angeordnet werden",alphabetical:"Alphabetisch",recentActivity:"Letzte Aktivität"},codeEditor:{title:"Code-Editor",theme:{label:"Editor-Design",description:"Standarddesign für den Code-Editor"},wordWrap:{label:"Zeilenumbruch",description:"Zeilenumbruch standardmäßig im Editor aktivieren"},showMinimap:{label:"Minimap anzeigen",description:"Minimap zur einfacheren Navigation in der Diff-Ansicht anzeigen"},lineNumbers:{label:"Zeilennummern anzeigen",description:"Zeilennummern im Editor anzeigen"},fontSize:{label:"Schriftgröße",description:"Editor-Schriftgröße in Pixeln"}}},cge={title:{add:"MCP-Server hinzufügen",edit:"MCP-Server bearbeiten"},importMode:{form:"Formulareingabe",json:"JSON-Import"},scope:{label:"Geltungsbereich",userGlobal:"Benutzer:in (Global)",projectLocal:"Projekt (Lokal)",userDescription:"Benutzerbereich: Auf allen Projekten deines Computers verfügbar",projectDescription:"Lokaler Bereich: Nur im ausgewählten Projekt verfügbar",cannotChange:"Der Geltungsbereich kann beim Bearbeiten eines vorhandenen Servers nicht geändert werden"},fields:{serverName:"Servername",transportType:"Transporttyp",command:"Befehl",arguments:"Argumente (eines pro Zeile)",jsonConfig:"JSON-Konfiguration",url:"URL",envVars:"Umgebungsvariablen (SCHLÜSSEL=Wert, eine pro Zeile)",headers:"Header (SCHLÜSSEL=Wert, eine pro Zeile)",selectProject:"Projekt auswählen..."},placeholders:{serverName:"mein-server"},validation:{missingType:"Pflichtfeld fehlt: type",stdioRequiresCommand:"stdio-Typ erfordert ein Befehlsfeld",httpRequiresUrl:"{{type}}-Typ erfordert ein URL-Feld",invalidJson:"Ungültiges JSON-Format",jsonHelp:"Füge deine MCP-Server-Konfiguration im JSON-Format ein. Beispielformate:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"Konfigurationsdetails (aus {{configFile}})",projectPath:"Pfad: {{path}}",actions:{cancel:"Abbrechen",saving:"Wird gespeichert...",addServer:"Server hinzufügen",updateServer:"Server aktualisieren"}},dge={success:"Einstellungen erfolgreich gespeichert!",error:"Einstellungen konnten nicht gespeichert werden",saving:"Wird gespeichert..."},uge={save:"Einstellungen speichern",cancel:"Abbrechen"},pge={title:"Git-Konfiguration",description:"Konfiguriere deine Git-Identität für Commits. Diese Einstellungen werden global über git config --global angewendet",name:{label:"Git-Name",help:"Dein Name für Git-Commits"},email:{label:"Git-E-Mail",help:"Deine E-Mail-Adresse für Git-Commits"},actions:{save:"Konfiguration speichern",saving:"Wird gespeichert..."},status:{success:"Erfolgreich gespeichert"}},mge={title:"API-Schlüssel",description:"Generiere API-Schlüssel, um von anderen Anwendungen auf die externe API zuzugreifen.",newKey:{alertTitle:"⚠️ API-Schlüssel speichern",alertMessage:"Dies ist das einzige Mal, dass du diesen Schlüssel siehst. Speichere ihn sicher.",iveSavedIt:"Ich habe ihn gespeichert"},form:{placeholder:"API-Schlüsselname (z. B. Produktionsserver)",createButton:"Erstellen",cancelButton:"Abbrechen"},newButton:"Neuer API-Schlüssel",empty:"Noch keine API-Schlüssel erstellt.",list:{created:"Erstellt:",lastUsed:"Zuletzt verwendet:"},confirmDelete:"Möchtest du diesen API-Schlüssel wirklich löschen?",status:{active:"Aktiv",inactive:"Inaktiv"},github:{title:"GitHub-Token",description:"Füge GitHub Personal Access Tokens hinzu, um private Repositories über die externe API zu klonen.",descriptionAlt:"Füge GitHub Personal Access Tokens hinzu, um private Repositories zu klonen. Du kannst Token auch direkt in API-Anfragen übergeben, ohne sie zu speichern.",addButton:"Token hinzufügen",form:{namePlaceholder:"Token-Name (z. B. Persönliche Repos)",tokenPlaceholder:"GitHub Personal Access Token (ghp_...)",descriptionPlaceholder:"Beschreibung (optional)",addButton:"Token hinzufügen",cancelButton:"Abbrechen",howToCreate:"Wie man einen GitHub Personal Access Token erstellt →"},empty:"Noch keine GitHub-Token hinzugefügt.",added:"Hinzugefügt:",confirmDelete:"Möchtest du diesen GitHub-Token wirklich löschen?"},apiDocsLink:"API-Dokumentation",documentation:{title:"Externe API-Dokumentation",description:"Erfahre, wie du die externe API nutzen kannst, um Claude/Cursor-Sitzungen aus deinen Anwendungen heraus zu starten.",viewLink:"API-Dokumentation anzeigen →"},loading:"Lädt...",version:{updateAvailable:"Update verfügbar: v{{version}}"}},hge={authStatus:{checking:"Wird überprüft...",connected:"Verbunden",notConnected:"Nicht verbunden",disconnected:"Getrennt",checkingAuth:"Authentifizierungsstatus wird überprüft...",loggedInAs:"Angemeldet als {{email}}",authenticatedUser:"authentifizierte:r Benutzer:in"},account:{claude:{description:"Anthropic Claude KI-Assistent"},cursor:{description:"Cursor KI-gestützter Code-Editor"},codex:{description:"OpenAI Codex KI-Assistent"},gemini:{description:"Google Gemini KI-Assistent"},qwen:{description:"Alibaba Qwen Code CLI (Gemini CLI fork)"}},connectionStatus:"Verbindungsstatus",login:{title:"Anmelden",reAuthenticate:"Erneut authentifizieren",description:"Meld dich bei deinem {{agent}}-Konto an, um KI-Funktionen zu aktivieren",reAuthDescription:"Mit einem anderen Konto anmelden oder Anmeldedaten aktualisieren",button:"Anmelden",reLoginButton:"Erneut anmelden"},error:"Fehler: {{error}}",providersLabel:"Providers",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} is not installed",notInstalledDescription:"Pixcode couldn't find the {{binary}} binary on this host. Install it first and then come back to log in.",installing:"Installing...",installNow:"Install now",copyCommand:"Copy install command",copy:"Copy",copied:"Copied",qwenDocs:"View the Qwen Code docs",complete:"Install complete",failed:"Install failed",output:"Output",cancel:"Cancel",dismiss:"Dismiss",doneHint:"Refresh this tab or try Login to check the new install.",continueToLogin:"Continue to Login",errors:{missingJobId:"Server did not return a job id",failedToStart:"Install failed to start",unreadableStatus:"Install ended with an unreadable status",streamLost:"Lost connection to install stream. The install may still be running on the server."}}},fge={title:"Berechtigungseinstellungen",skipPermissions:{label:"Berechtigungsaufforderungen überspringen (mit Vorsicht verwenden)",claudeDescription:"Entspricht dem Flag --dangerously-skip-permissions",cursorDescription:"Entspricht dem Flag -f in der Cursor CLI",opencodeDescription:"Entspricht dem Flag --dangerously-skip-permissions in OpenCode"},allowedTools:{title:"Erlaubte Werkzeuge",description:"Werkzeuge, die automatisch ohne Berechtigungsaufforderung erlaubt werden",placeholder:'z. B. "Bash(git log:*)" oder "Write"',quickAdd:"Häufige Werkzeuge schnell hinzufügen:",empty:"Keine erlaubten Werkzeuge konfiguriert"},blockedTools:{title:"Gesperrte Werkzeuge",description:"Werkzeuge, die automatisch ohne Berechtigungsaufforderung gesperrt werden",placeholder:'z. B. "Bash(rm:*)"',empty:"Keine gesperrten Werkzeuge konfiguriert"},allowedCommands:{title:"Erlaubte Shell-Befehle",description:"Shell-Befehle, die automatisch ohne Aufforderung erlaubt werden",placeholder:'z. B. "Shell(ls)" oder "Shell(git status)"',quickAdd:"Häufige Befehle schnell hinzufügen:",empty:"Keine erlaubten Befehle konfiguriert"},blockedCommands:{title:"Gesperrte Shell-Befehle",description:"Shell-Befehle, die automatisch gesperrt werden",placeholder:'z. B. "Shell(rm -rf)" oder "Shell(sudo)"',empty:"Keine gesperrten Befehle konfiguriert"},toolExamples:{title:"Werkzeugmuster-Beispiele:",bashGitLog:"- Alle git log-Befehle erlauben",bashGitDiff:"- Alle git diff-Befehle erlauben",write:"- Alle Write-Werkzeugnutzungen erlauben",bashRm:"- Alle rm-Befehle sperren (gefährlich)"},shellExamples:{title:"Shell-Befehl-Beispiele:",ls:"- ls-Befehl erlauben",gitStatus:"- git status erlauben",npmInstall:"- npm install erlauben",rmRf:"- Rekursives Löschen sperren"},opencodeAllowed:{title:"Erlaubte Bash-Muster",description:"Bash-Befehlsmuster, die OpenCode ohne Rückfrage automatisch genehmigt",placeholder:'z. B. "git *" oder "npm test"',quickAdd:"Häufige Muster schnell hinzufügen:",empty:"Keine erlaubten Muster konfiguriert"},opencodeBlocked:{title:"Gesperrte Bash-Muster",description:"Bash-Befehlsmuster, die OpenCode immer ablehnt",placeholder:'z. B. "rm -rf *" oder "sudo *"',empty:"Keine gesperrten Muster konfiguriert"},opencodeExamples:{title:"Beispielmuster:",gitAll:"- Alle git-Befehle erlauben",gitPush:"- git push gezielt blockieren",rmRf:"- Rekursives Löschen blockieren",npm:"- Alle npm-Befehle erlauben"},codex:{permissionMode:"Berechtigungsmodus",description:"Steuert, wie Codex Dateiänderungen und Befehlsausführung handhabt",modes:{default:{title:"Standard",description:"Nur vertrauenswürdige Befehle (ls, cat, grep, git status usw.) werden automatisch ausgeführt. Andere Befehle werden übersprungen. Kann in den Arbeitsbereich schreiben."},acceptEdits:{title:"Bearbeitungen akzeptieren",description:"Alle Befehle werden automatisch innerhalb des Arbeitsbereichs ausgeführt. Vollautomatischer Modus mit isolierter Ausführung."},bypassPermissions:{title:"Berechtigungen umgehen",description:"Vollständiger Systemzugriff ohne Einschränkungen. Alle Befehle werden automatisch mit vollem Festplatten- und Netzwerkzugriff ausgeführt. Mit Vorsicht verwenden."}},technicalDetails:"Technische Details",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted. Vertrauenswürdige Befehle: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (ohne -exec) usw.",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never. Alle Befehle werden automatisch innerhalb des Projektverzeichnisses ausgeführt.",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never. Vollständiger Systemzugriff, nur in vertrauenswürdigen Umgebungen verwenden.",overrideNote:"Du kannst dies pro Sitzung über die Modusschaltfläche in der Chat-Oberfläche überschreiben."}},actions:{add:"Hinzufügen"}},gge={title:"MCP-Server",description:{claude:"Model Context Protocol-Server stellen Claude zusätzliche Werkzeuge und Datenquellen zur Verfügung",cursor:"Model Context Protocol-Server stellen Cursor zusätzliche Werkzeuge und Datenquellen zur Verfügung",codex:"Model Context Protocol-Server stellen Codex zusätzliche Werkzeuge und Datenquellen zur Verfügung"},addButton:"MCP-Server hinzufügen",empty:"Keine MCP-Server konfiguriert",serverType:"Typ",scope:{local:"lokal",user:"benutzer"},config:{command:"Befehl",url:"URL",args:"Argumente",environment:"Umgebung"},tools:{title:"Werkzeuge",count:"({{count}}):",more:"+{{count}} weitere"},actions:{edit:"Server bearbeiten",delete:"Server löschen"},help:{title:"Über Codex MCP",description:"Codex unterstützt stdio-basierte MCP-Server. Du kannst Server hinzufügen, die die Fähigkeiten von Codex mit zusätzlichen Werkzeugen und Ressourcen erweitern."}},bge={title:"Plugins",description:"Erweitere die Oberfläche mit eigenen Plugins. Installiere sie von Git oder lege einen Ordner in ~/.pixcode/plugins/ ab.",installPlaceholder:"https://github.com/benutzer/mein-plugin",installButton:"Installieren",installing:"Wird installiert…",securityWarning:"Installiere nur Plugins, deren Quellcode du geprüft hast oder die von Autoren stammen, denen du vertraust.",scanningPlugins:"Plugins werden durchsucht…",noPluginsInstalled:"Keine Plugins installiert",pullLatest:"Neueste Version von Git laden",noGitRemote:"Kein Git-Remote — Update nicht verfügbar",uninstallPlugin:"Plugin deinstallieren",confirmUninstall:"Zum Bestätigen erneut klicken",confirmUninstallMessage:"{{name}} entfernen? Das kann nicht rückgängig gemacht werden.",cancel:"Abbrechen",remove:"Entfernen",updateFailed:"Update fehlgeschlagen",installFailed:"Installation fehlgeschlagen",uninstallFailed:"Deinstallation fehlgeschlagen",toggleFailed:"Umschalten fehlgeschlagen",buildYourOwn:"Eigenes Plugin erstellen",starter:"Starter",docs:"Dokumentation",starterPlugin:{name:"Projektstatistiken",badge:"starter",description:"Dateianzahl, Codezeilen, Dateityp-Aufschlüsselung und aktuelle Aktivitäten für dein Projekt.",install:"Installieren"},morePlugins:"Mehr",enable:"Aktivieren",disable:"Deaktivieren",installAriaLabel:"Git-Repository-URL des Plugins",tab:"Tab",runningStatus:"läuft"},xge={title:"Zugriff",description:"Waehle, wie Personen diesen selbst gehosteten Pixcode-Server erreichen. Beginne im selben Netzwerk; fuer Fernzugriff nutze Tunnel, Tailscale oder deine Domain.",refresh:"Aktualisieren",copy:"Kopieren",copied:"Kopiert",save:"Zugriffspfad speichern",check:"URL pruefen",qrAlt:"QR fuer {{url}}",guide:{title:"Zuerst den Verbindungsweg waehlen",description:"Du musst keine Netzwerkbegriffe kennen. Waehle die passende Situation, kopiere den Link oder scanne den QR-Code."},options:{sameNetwork:{title:"Gleiches Wi-Fi/LAN",description:"Wenn das Geraet im selben Router-, Buero- oder LAN-Netz wie Pixcode ist."},secureTunnel:{title:"Temporaerer Public-Link",description:"Starte einen Cloudflare/ngrok-Tunnel; Pixcode zeigt URL und QR automatisch."},tailscale:{title:"Privater Team-Link",description:"Privater Zugriff ohne Public-Domain oder Router-Einstellungen."},customDomain:{title:"Eigene Domain",description:"Wenn HTTPS, Reverse Proxy oder Cloudflare Tunnel Hostname bereits vorhanden ist."}},status:{ready:"Bereit",detecting:"Erkennen",guided:"Gefuehrt",configured:"Konfiguriert",optional:"Optional"},links:{title:"Verfuegbare Links",description:"Kopiere die passende URL fuer das Geraet oder Teammitglied.",local:"Lokal",tailscale:"Tailscale Privatlink",empty:"Noch keine Zugriffslinks erkannt."},local:{title:"Zugriff im selben Netzwerk",description:"Der einfachste erste Test: aus demselben Wi-Fi oder LAN verbinden. QR scannen oder Link kopieren.",thisDevice:"Nur dieser Computer",loading:"Links im selben Netzwerk werden erkannt...",empty:"Kein LAN-Link erkannt. Netzwerk pruefen und aktualisieren.",saveLabel:"Zugriff im selben Netzwerk",save:"Diesen LAN-Link speichern"},tunnel:{title:"Sicherer Tunnel",description:"Ohne feste Domain kann Pixcode cloudflared oder ngrok starten und die Public-URL hier anzeigen.",secureLink:"Public-Link und QR",help:"Klicke Start. Wenn cloudflared oder ngrok installiert ist, erstellt Pixcode HTTPS-Adresse und QR automatisch.",running:"Tunnel laeuft",start:"Tunnel starten",stop:"Tunnel stoppen",save:"Diese Tunnel-URL speichern",saveLabel:"Sicherer Tunnelzugriff",qrLabel:"sicherer Tunnel",installTitle:"Tunnel-Setup erforderlich",installNeeded:"Installiere zuerst cloudflared oder ngrok und starte den Tunnel erneut."},tailscale:{title:"Tailscale privater Zugriff",description:"Tailscale ist eine optionale private Netzwerk-App. Auf Server und Nutzergeraeten installieren, im selben Team anmelden, dann erkennt Pixcode die private URL.",save:"Diese Tailscale-URL speichern",saveLabel:"Tailscale privater Zugriff",openInstall:"Tailscale-Installation oeffnen",steps:{installServer:"Tailscale auf dem Computer oder Server mit Pixcode installieren.",installUserDevice:"Tailscale auf Telefon, Laptop oder Teamgeraet installieren.",login:"Auf beiden Geraeten mit demselben Tailscale-Konto oder Team anmelden.",refresh:"Hierher zurueckkehren und Aktualisieren druecken; Pixcode zeigt die private URL."},installCommand:"Install command",installDevice:"Install on this device",signIn:"Sign in with Tailscale",actionDone:"Done",needsAttention:"Needs attention",openLogin:"Open Tailscale login"},advanced:{title:"Erweitert: stabile Domain",description:"Nutze dies, wenn LAN-URL, Tailscale-URL, Cloudflare Tunnel Hostname oder HTTPS-Domain bereits vorhanden ist.",badge:"Erweitert"},setup:{title:"Stabiler Zugriffspfad",description:"Speichere die URL, die Nutzer verwenden. Das kann LAN, Tailscale, Cloudflare Tunnel oder eine eigene Domain sein."},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"Eigene Domain"},fields:{label:"Label",url:"URL",port:"Zielport",mode:"Mode"},health:{reachable:"Pixcode ist erreichbar",unreachable:"Pixcode ist nicht erreichbar"},configured:{title:"Gespeicherte Zugriffspfade",description:"Diese Pfade sind je nach Rolle fuer Admins, Projektpartner und Projektmitarbeiter verfuegbar.",empty:"Noch keine Zugriffspfade gespeichert.",noUrl:"Keine URL",public:"public",private:"private"},team:{title:"So verbinden sich Nutzer",description:"Erstelle den Nutzer im Admin-System, weise die Projektrolle im Control Room zu und teile dann eine Access-URL. Globale Adminrechte sind fuer zugewiesene Projekte nicht noetig."}},vge={title:"Diagnostics",description:"Provider health, WebSocket state, notifications, active runs, and recent errors.",refresh:"Refresh",copyBundle:"Copy bundle",copied:"Copied",runtime:"Runtime",waiting:"Waiting for diagnostics",websocket:"WebSocket",activeClients:"active clients",recentErrors:"Recent errors",redactedBundle:"redacted support bundle",providers:"Providers",notChecked:"not checked",emptyProviders:"Provider health has not been collected yet.",status:{unknown:"unknown",loading:"loading",ok:"ok",available:"available",configured:"configured",missing:"missing",failed:"failed"}},yge={tagline:"Open-source AI coding assistant interface",checkFailedShort:"Check failed",starOnGitHub:"Star on GitHub",docs:"Docs",hosted:{title:"Try Pixcode Hosted",description:"Team collaboration, shared MCP configs, settings sync across environments, and managed infrastructure.",learnMore:"Learn more"},proFeatures:{title:"Pixcode Pro Features",syncSettings:{title:"Sync Settings",description:"Keep your preferences, MCP configs, and theme in sync across all your environments."},teamManagement:{title:"Team Management",description:"Multiple users, role-based access, and shared projects for your team."}},license:"Licensed under AGPL-3.0",relativeTime:{justNow:"just now",secondsAgo:"{{count}}s ago",minutesAgo:"{{count}}m ago",hoursAgo:"{{count}}h ago"}},wge={title:Qfe,tabs:ege,account:tge,mcp:nge,appearance:rge,actions:age,quickSettings:ige,terminalShortcuts:sge,mainTabs:oge,appearanceSettings:lge,mcpForm:cge,saveStatus:dge,footerActions:uge,git:pge,apiKeys:mge,agents:hge,permissions:fge,mcpServers:gge,pluginSettings:bge,access:xge,diagnostics:vge,about:yge},kge={title:"Willkommen zurück",description:"Meld dich bei deinem Pixcode-Konto an",username:"Benutzername",password:"Passwort",submit:"Anmelden",loading:"Wird angemeldet...",errors:{invalidCredentials:"Ungültiger Benutzername oder Passwort",requiredFields:"Bitte alle Felder ausfüllen",networkError:"Netzwerkfehler. Bitte erneut versuchen."},placeholders:{username:"Benutzernamen eingeben",password:"Passwort eingeben"}},Sge={title:"Konto erstellen",username:"Benutzername",password:"Passwort",confirmPassword:"Passwort bestätigen",submit:"Konto erstellen",loading:"Konto wird erstellt...",errors:{passwordMismatch:"Passwörter stimmen nicht überein",usernameTaken:"Benutzername ist bereits vergeben",weakPassword:"Passwort ist zu schwach"}},Cge={title:"Abmelden",confirm:"Möchtest du dich wirklich abmelden?",button:"Abmelden"},Nge={login:kge,register:Sge,logout:Cge},Ege={title:"Projekte",newProject:"Neues Projekt",deleteProject:"Projekt entfernen",renameProject:"Projekt umbenennen",noProjects:"Keine Projekte gefunden",loadingProjects:"Projekte werden geladen...",searchPlaceholder:"Projekte durchsuchen...",projectNamePlaceholder:"Projektname",starred:"Favoriten",all:"Alle",untitledSession:"Unbenannte Sitzung",newSession:"Neue Sitzung",codexSession:"Codex-Sitzung",fetchingProjects:"Deine Claude-Projekte und -Sitzungen werden abgerufen",projects:"Projekte",detectedFromHistory:"Aus Verlauf erkannt",noMatchingProjects:"Keine passenden Projekte",tryDifferentSearch:"Versuch, den Suchbegriff anzupassen",runClaudeCli:"Führ Claude CLI in einem Projektverzeichnis aus, um zu beginnen"},Tge={title:"Pixcode",subtitle:"KI-Programmierassistent-Oberfläche"},Age={title:"Sitzungen",newSession:"Neue Sitzung",deleteSession:"Sitzung löschen",renameSession:"Sitzung umbenennen",noSessions:"Noch keine Sitzungen",loadingSessions:"Sitzungen werden geladen...",unnamed:"Unbenannt",loading:"Lädt...",showMore:"Weitere Sitzungen anzeigen"},jge={viewEnvironments:"Umgebungen anzeigen",hideSidebar:"Seitenleiste ausblenden",createProject:"Neues Projekt erstellen",refresh:"Projekte und Sitzungen aktualisieren (Strg+R)",renameProject:"Projekt umbenennen (F2)",deleteProject:"Projekt aus Seitenleiste entfernen (Entf)",addToFavorites:"Zu Favoriten hinzufügen",removeFromFavorites:"Aus Favoriten entfernen",editSessionName:"Sitzungsname manuell bearbeiten",deleteSession:"Diese Sitzung dauerhaft löschen",save:"Speichern",cancel:"Abbrechen",clearSearch:"Suche leeren"},Rge={chat:"Chat",files:"Dateien",git:"Git",terminal:"Terminal",tasks:"Aufgaben"},Ige={refresh:"Aktualisieren",settings:"Einstellungen",collapseAll:"Alle einklappen",expandAll:"Alle ausklappen",cancel:"Abbrechen",save:"Speichern",delete:"Löschen",rename:"Umbenennen",joinCommunity:"Community beitreten",reportIssue:"Problem melden",starOnGithub:"Stern auf GitHub",controlRoom:"Kontrollraum",controlRoomDescription:"Admin, Zugriff, Läufe"},_ge={openSource:"Open Source"},Lge={active:"Aktiv",inactive:"Inaktiv",thinking:"Denkt nach...",error:"Fehler",aborted:"Abgebrochen",unknown:"Unbekannt"},Pge={justNow:"Gerade eben",oneMinuteAgo:"vor 1 Min.",minutesAgo:"vor {{count}} Min.",oneHourAgo:"vor 1 Std.",hoursAgo:"vor {{count}} Std.",oneDayAgo:"vor 1 Tag",daysAgo:"vor {{count}} Tagen"},Dge={deleteConfirm:"Möchtest du das wirklich löschen?",renameSuccess:"Erfolgreich umbenannt",deleteSuccess:"Erfolgreich gelöscht",errorOccurred:"Ein Fehler ist aufgetreten",deleteSessionConfirm:"Möchtest du diese Sitzung wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",deleteProjectConfirm:"Projekt aus der Seitenleiste entfernen? Deine Projektdateien, Erinnerungen und Sitzungsdaten werden nicht gelöscht.",enterProjectPath:"Bitte gib einen Projektpfad ein",deleteSessionFailed:"Sitzung konnte nicht gelöscht werden. Bitte erneut versuchen.",deleteSessionError:"Fehler beim Löschen der Sitzung. Bitte erneut versuchen.",renameSessionFailed:"Sitzung konnte nicht umbenannt werden. Bitte erneut versuchen.",renameSessionError:"Fehler beim Umbenennen der Sitzung. Bitte erneut versuchen.",deleteProjectFailed:"Projekt konnte nicht entfernt werden. Bitte erneut versuchen.",deleteProjectError:"Fehler beim Entfernen des Projekts. Bitte erneut versuchen.",createProjectFailed:"Projekt konnte nicht erstellt werden. Bitte erneut versuchen.",createProjectError:"Fehler beim Erstellen des Projekts. Bitte erneut versuchen."},Oge={updateAvailable:"Update verfügbar"},Mge={modeProjects:"Projekte",modeConversations:"Unterhaltungen",conversationsPlaceholder:"In Unterhaltungen suchen...",searching:"Sucht...",noResults:"Keine Ergebnisse gefunden",tryDifferentQuery:"Versuch eine andere Suchanfrage",matches_one:"{{count}} Treffer",matches_other:"{{count}} Treffer",projectsScanned_one:"{{count}} Projekt durchsucht",projectsScanned_other:"{{count}} Projekte durchsucht"},Fge={deleteProject:"Projekt entfernen",deleteSession:"Sitzung löschen",confirmDelete:"Was möchtest du mit",sessionCount_one:"Dieses Projekt enthält {{count}} Unterhaltung.",sessionCount_other:"Dieses Projekt enthält {{count}} Unterhaltungen.",removeFromSidebar:"Nur aus der Seitenleiste entfernen",deleteAllData:"Alle Daten dauerhaft löschen",allConversationsDeleted:"Das Projekt wird aus der Seitenleiste entfernt. Deine Dateien, Erinnerungen und Sitzungsdaten bleiben erhalten.",cannotUndo:"Du kannst das Projekt später erneut hinzufügen."},zge={section:"Orchestrierung",fallbackTitle:"Orchestrierungslauf"},Bge={projects:Ege,app:Tge,sessions:Age,tooltips:jge,navigation:Rge,actions:Ige,branding:_ge,status:Lge,time:Pge,messages:Dge,version:Oge,search:Mge,deleteConfirmation:Fge,orchestration:zge},Uge={copy:"Kopieren",copied:"Kopiert",copyCode:"Code kopieren"},$ge={copy:"Nachricht kopieren",copied:"Nachricht kopiert",selectFormat:"Kopierformat auswählen",copyAsMarkdown:"Als Markdown kopieren",copyAsText:"Als Text kopieren"},Hge={user:"Benutzer:in",error:"Fehler",tool:"Werkzeug",claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code"},Gge={settings:"Werkzeugeinstellungen",error:"Werkzeugfehler",result:"Werkzeugergebnis",viewParams:"Eingabeparameter anzeigen",viewRawParams:"Rohe Parameter anzeigen",viewDiff:"Bearbeitungs-Diff anzeigen für",creatingFile:"Neue Datei wird erstellt:",updatingTodo:"Aufgabenliste wird aktualisiert",read:"Gelesen",readFile:"Datei lesen",updateTodo:"Aufgabenliste aktualisieren",readTodo:"Aufgabenliste lesen",searchResults:"Ergebnisse"},Vge={found:"{{count}} {{type}} gefunden",file:"Datei",files:"Dateien",pattern:"Muster:",in:"in:"},Wge={updated:"Datei erfolgreich aktualisiert",created:"Datei erfolgreich erstellt",written:"Datei erfolgreich geschrieben",diff:"Diff",newFile:"Neue Datei",viewContent:"Dateiinhalt anzeigen",viewFullOutput:"Vollständige Ausgabe anzeigen ({{count}} Zeichen)",contentDisplayed:"Der Dateiinhalt wird in der Diff-Ansicht oben angezeigt"},qge={title:"Interaktive Eingabeaufforderung",waiting:"Warte auf deine Antwort in der CLI",instruction:"Bitte wähl eine Option in deinem Terminal, in dem Claude läuft.",selectedOption:"✓ Claude hat Option {{number}} ausgewählt",instructionDetail:"In der CLI würdest du diese Option interaktiv mit den Pfeiltasten oder durch Eingabe der Nummer auswählen."},Kge={title:"Denkt nach...",emoji:"💭 Denkt nach..."},Yge={response:"JSON-Antwort"},Zge={grant:"Berechtigung für {{tool}} erteilen",added:"Berechtigung hinzugefügt",addTo:"Fügt {{entry}} zu erlaubten Werkzeugen hinzu.",retry:"Berechtigung gespeichert. Wiederhole die Anfrage, um das Werkzeug zu verwenden.",error:"Berechtigungen konnten nicht aktualisiert werden. Bitte erneut versuchen.",openSettings:"Einstellungen öffnen"},Xge={updated:"Aufgabenliste wurde erfolgreich aktualisiert",current:"Aktuelle Aufgabenliste"},Jge={viewPlan:"📋 Implementierungsplan anzeigen",title:"Implementierungsplan"},Qge={resetAt:"Claude-Nutzungslimit erreicht. Dein Limit wird um **{{time}} {{timezone}}** zurückgesetzt - {{date}}"},e0e={permissionMode:"Berechtigungsmodus",modes:{default:"Standardmodus",acceptEdits:"Bearbeitungen akzeptieren",bypassPermissions:"Berechtigungen umgehen",plan:"Planungsmodus"},descriptions:{default:"Nur vertrauenswürdige Befehle (ls, cat, grep, git status usw.) werden automatisch ausgeführt. Andere Befehle werden übersprungen. Kann in den Arbeitsbereich schreiben.",acceptEdits:"Alle Befehle werden automatisch innerhalb des Arbeitsbereichs ausgeführt. Vollautomatischer Modus mit isolierter Ausführung.",bypassPermissions:"Vollständiger Systemzugriff ohne Einschränkungen. Alle Befehle werden automatisch mit vollem Festplatten- und Netzwerkzugriff ausgeführt. Mit Vorsicht verwenden.",plan:"Planungsmodus – keine Befehle werden ausgeführt"},technicalDetails:"Technische Details"},t0e={permissionMode:"Gemini-Berechtigungsmodus",description:"Steuert, wie Gemini CLI Vorgangsgenehmigungen handhabt.",modes:{default:{title:"Standard (Genehmigung erforderlich)",description:"Gemini fordert vor der Ausführung von Befehlen, dem Schreiben von Dateien und dem Abrufen von Web-Ressourcen eine Genehmigung an."},autoEdit:{title:"Auto-Bearbeitung (Dateigenehmigungen überspringen)",description:"Gemini genehmigt automatisch Dateibearbeitungen und Web-Abrufe, fragt aber weiterhin bei Shell-Befehlen nach."},yolo:{title:"YOLO (Alle Berechtigungen umgehen)",description:"Gemini führt alle Vorgänge ohne Rückfrage aus. Vorsicht ist geboten."}}},n0e={placeholder:"/ für Befehle, @ für Dateien eingeben oder {{provider}} etwas fragen...",placeholderDefault:"Nachricht eingeben...",disabled:"Eingabe deaktiviert",attachFiles:"Dateien anhängen",attachImages:"Bilder anhängen",send:"Senden",stop:"Stoppen",clickToChangeMode:"Klicken, um den Berechtigungsmodus zu ändern (oder Tab in der Eingabe drücken)",showAllCommands:"Alle Befehle anzeigen",clearInput:"Eingabe leeren",scrollToBottom:"Nach unten scrollen"},r0e={selector:{title:"Denkmodus",description:"Erweitertes Denken gibt Claude mehr Zeit, Alternativen zu evaluieren",active:"Aktiv",tip:"Höhere Denkmodi brauchen mehr Zeit, liefern aber eine gründlichere Analyse"},modes:{none:{name:"Standard",description:"Reguläre Claude-Antwort",prefix:""},think:{name:"Denken",description:"Grundlegendes erweitertes Denken",prefix:"think"},thinkHard:{name:"Intensiv denken",description:"Gründlichere Auswertung",prefix:"think hard"},thinkHarder:{name:"Sehr intensiv denken",description:"Tiefgehende Analyse mit Alternativen",prefix:"think harder"},ultrathink:{name:"Ultradenken",description:"Maximales Denkbudget",prefix:"ultrathink"}},buttonTitle:"Denkmodus: {{mode}}"},a0e={title:"KI-Assistent wählen",description:"Anbieter auswählen, um eine neue Unterhaltung zu starten",selectModel:"Modell auswählen",statusUnavailable:"Status nicht verfügbar",statusRetryHint:"Diese CLI konnte nicht geprüft werden. Zum Wiederholen tippen.",retryStatus:"Status erneut prüfen",providerInfo:{anthropic:"von Anthropic",openai:"von OpenAI",cursorEditor:"KI-Code-Editor",google:"von Google"},readyPrompt:{claude:"Bereit, Claude mit {{model}} zu verwenden. Gib unten deine Nachricht ein.",cursor:"Bereit, Cursor mit {{model}} zu verwenden. Gib unten deine Nachricht ein.",codex:"Bereit, Codex mit {{model}} zu verwenden. Gib unten deine Nachricht ein.",gemini:"Bereit, Gemini mit {{model}} zu verwenden. Gib unten deine Nachricht ein.",default:"Wähl oben einen Anbieter, um zu beginnen"}},i0e={continue:{title:"Unterhaltung fortsetzen",description:"Stell Fragen zu deinem Code, fordere Änderungen an oder hol Hilfe bei Entwicklungsaufgaben"},loading:{olderMessages:"Ältere Nachrichten werden geladen...",sessionMessages:"Sitzungsnachrichten werden geladen..."},messages:{showingOf:"{{shown}} von {{total}} Nachrichten werden angezeigt",scrollToLoad:"Nach oben scrollen, um mehr zu laden",showingLast:"Letzte {{count}} Nachrichten werden angezeigt ({{total}} gesamt)",loadEarlier:"Frühere Nachrichten laden",loadAll:"Alle Nachrichten laden",loadingAll:"Alle Nachrichten werden geladen...",allLoaded:"Alle Nachrichten geladen",perfWarning:"Alle Nachrichten geladen – Scrollen kann langsamer sein. Klick auf 'Nach unten scrollen', um die Leistung wiederherzustellen."}},s0e={selectProject:{title:"Projekt auswählen",description:"Wähl ein Projekt, um ein interaktives Terminal in diesem Verzeichnis zu öffnen"},status:{newSession:"Neue Sitzung",initializing:"Wird initialisiert...",restarting:"Wird neu gestartet..."},actions:{disconnect:"Trennen",disconnectTitle:"Vom Terminal trennen",restart:"Neu starten",restartTitle:"Terminal neu starten (zuerst trennen)",connect:"Im Terminal fortfahren",connectTitle:"Mit Terminal verbinden"},loading:"Terminal wird geladen...",connecting:"Verbindung zum Terminal wird hergestellt...",startSession:"Neue Claude-Sitzung starten",startProviderSession:"Neue {{provider}}-Sitzung starten",resumeSession:"Sitzung fortsetzen: {{displayName}}...",runCommand:"{{command}} in {{projectName}} ausführen",startCli:"Claude CLI wird in {{projectName}} gestartet",startProviderCli:"{{provider}} wird in {{projectName}} gestartet",defaultCommand:"Befehl"},o0e={actions:{thinking:"Denkt nach",processing:"Verarbeitet",analyzing:"Analysiert",working:"Arbeitet",computing:"Berechnet",reasoning:"Schlussfolgert"},state:{live:"Live",paused:"Pausiert"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}m {{seconds}}s",label:"{{time}} vergangen",startingNow:"Startet jetzt"},controls:{stopGeneration:"Generierung stoppen",pressEscToStop:"Jederzeit Esc drücken, um zu stoppen"},providers:{assistant:"Assistent"}},l0e={startChatWithProvider:"Wähl ein Projekt, um mit {{provider}} zu chatten"},c0e={nextTaskPrompt:"Nächste Aufgabe starten"},d0e={codeBlock:Uge,copyMessage:$ge,messageTypes:Hge,tools:Gge,search:Vge,fileOperations:Wge,interactive:qge,thinking:Kge,json:Yge,permissions:Zge,todo:Xge,plan:Jge,usageLimit:Qge,codex:e0e,gemini:t0e,input:n0e,thinkingMode:r0e,providerSelection:a0e,session:i0e,shell:s0e,claudeStatus:o0e,projectSelection:l0e,tasks:c0e},u0e={changes:"Änderungen",previousChange:"Vorherige Änderung",nextChange:"Nächste Änderung",hideDiff:"Diff-Hervorhebung ausblenden",showDiff:"Diff-Hervorhebung anzeigen",settings:"Editor-Einstellungen",collapse:"Editor einklappen",expand:"Editor auf volle Breite erweitern"},p0e="{{fileName}} wird geladen...",m0e={showingChanges:"Änderungen werden angezeigt"},h0e={download:"Datei herunterladen",save:"Speichern",saving:"Wird gespeichert...",saved:"Gespeichert!",exitFullscreen:"Vollbild beenden",fullscreen:"Vollbild",close:"Schließen",previewMarkdown:"Markdown-Vorschau",editMarkdown:"Markdown bearbeiten"},f0e={lines:"Zeilen:",characters:"Zeichen:",shortcuts:"Strg+S zum Speichern • Esc zum Schließen"},g0e={title:"Binärdatei",message:'Die Datei "{{fileName}}" kann im Texteditor nicht angezeigt werden, da es sich um eine Binärdatei handelt.'},b0e={toolbar:u0e,loading:p0e,header:m0e,actions:h0e,footer:f0e,binaryFile:g0e},x0e={title:"TaskMaster AI ist nicht konfiguriert",description:"TaskMaster hilft dabei, komplexe Projekte mit KI-Unterstützung in überschaubare Aufgaben aufzuteilen",whatIsTitle:"🎯 Was ist TaskMaster?",features:{aiPowered:"KI-gestütztes Aufgabenmanagement: Komplexe Projekte in handhabbare Unteraufgaben aufteilen",prdTemplates:"PRD-Vorlagen: Aufgaben aus Produktanforderungsdokumenten generieren",dependencyTracking:"Abhängigkeitsverfolgung: Aufgabenbeziehungen und Ausführungsreihenfolge verstehen",progressVisualization:"Fortschrittsvisualisierung: Kanban-Boards und detaillierte Aufgabenanalysen",cliIntegration:"CLI-Integration: Taskmaster-Befehle für erweiterte Workflows verwenden"},initializeButton:"TaskMaster AI initialisieren"},v0e={title:"Erste Schritte mit TaskMaster",subtitle:"TaskMaster ist initialisiert! Hier ist, was du als Nächstes tun kannst:",steps:{createPRD:{title:"Produktanforderungsdokument (PRD) erstellen",description:"Besprich deine Projektidee und erstelle ein PRD, das beschreibt, was du bauen möchtest.",addButton:"PRD hinzufügen",existingPRDs:"Vorhandene PRDs:"},generateTasks:{title:"Aufgaben aus PRD generieren",description:"Sobald du ein PRD hast, bitte deinen KI-Assistenten, es zu analysieren. TaskMaster wird es automatisch in überschaubare Aufgaben mit Implementierungsdetails aufteilen."},analyzeTasks:{title:"Aufgaben analysieren und erweitern",description:"Bitte deinen KI-Assistenten, die Aufgabenkomplexität zu analysieren und sie in detaillierte Unteraufgaben für eine einfachere Implementierung zu erweitern."},startBuilding:{title:"Mit dem Bauen beginnen",description:"Bitte deinen KI-Assistenten, mit der Bearbeitung von Aufgaben zu beginnen, deren Status zu aktualisieren und neue Aufgaben hinzuzufügen, wenn dein Projekt sich weiterentwickelt."}},tip:"💡 Tipp: Beginne mit einem PRD, um das Beste aus TaskMasters KI-gestützter Aufgabengenerierung herauszuholen"},y0e={title:"TaskMaster-Einrichtung",subtitle:"Interaktives CLI für {{projectName}}",willStart:"Die TaskMaster-Initialisierung startet automatisch",completed:"TaskMaster-Einrichtung abgeschlossen! Du kannst dieses Fenster jetzt schließen.",closeButton:"Schließen",closeContinueButton:"Schließen & Fortfahren"},w0e={title:"Erste Schritte mit TaskMaster",subtitle:"Dein Leitfaden für produktives Aufgabenmanagement",examples:{parsePRD:`💬 Beispiel:
|
|
832
832
|
"Ich habe gerade ein neues Projekt mit Claude Task Master initialisiert. Ich habe ein PRD unter .taskmaster/docs/prd.txt. Kannst du mir helfen, es zu analysieren und die ersten Aufgaben einzurichten?"`,expandTask:`💬 Beispiel:
|
|
833
833
|
"Aufgabe 5 scheint komplex. Kannst du sie in Unteraufgaben aufteilen?"`,addTask:`💬 Beispiel:
|
|
834
|
-
"Bitte füge eine neue Aufgabe hinzu, um Benutzerprofilbild-Uploads mit Cloudinary zu implementieren, und recherchiere den besten Ansatz."`},moreExamples:"Weitere Beispiele und Verwendungsmuster anzeigen →",proTips:{title:"💡 Profi-Tipps",search:"Verwende die Suchleiste, um bestimmte Aufgaben schnell zu finden",views:"Wechsle mit den Ansichts-Umschaltern zwischen Kanban-, Listen- und Rasteransicht",filters:"Verwende Filter, um dich auf bestimmte Aufgabenstatus oder Prioritäten zu konzentrieren",details:"Klicke auf eine Aufgabe, um detaillierte Informationen anzuzeigen und Unteraufgaben zu verwalten"},learnMore:{title:"📚 Mehr erfahren",description:"TaskMaster AI ist ein fortschrittliches Aufgabenmanagementsystem für Entwickler:innen. Dokumentation, Beispiele und Möglichkeiten zur Mitarbeit am Projekt.",githubButton:"Auf GitHub ansehen"}},k0e={placeholder:"Aufgaben suchen..."},S0e={button:"Filter",status:"Status",priority:"Priorität",sortBy:"Sortieren nach",allStatuses:"Alle Status",allPriorities:"Alle Prioritäten",showing:"{{filtered}} von {{total}} Aufgaben werden angezeigt",clearFilters:"Filter zurücksetzen"},C0e={id:"ID",status:"Status",priority:"Priorität",idAsc:"ID (aufsteigend)",idDesc:"ID (absteigend)",titleAsc:"Titel (A-Z)",titleDesc:"Titel (Z-A)",statusAsc:"Status (Ausstehend zuerst)",statusDesc:"Status (Erledigt zuerst)",priorityAsc:"Priorität (Hoch zuerst)",priorityDesc:"Priorität (Niedrig zuerst)"},N0e={kanban:"Kanban-Ansicht",list:"Listenansicht",grid:"Rasteransicht"},E0e={pending:"📋 Ausstehend",inProgress:"🚀 In Bearbeitung",done:"✅ Erledigt",blocked:"🚫 Blockiert",deferred:"⏳ Zurückgestellt",cancelled:"❌ Abgebrochen",noTasksYet:"Noch keine Aufgaben",tasksWillAppear:"Aufgaben werden hier angezeigt",moveTasksHere:"Aufgaben hierher verschieben, wenn sie gestartet werden",completedTasksHere:"Abgeschlossene Aufgaben erscheinen hier",statusTasksHere:"Aufgaben mit diesem Status werden hier angezeigt"},T0e={help:"TaskMaster-Leitfaden für Erste Schritte",prds:"PRDs",addPRD:"PRD hinzufügen",addTask:"Aufgabe hinzufügen",createNewPRD:"Neues PRD erstellen",prdsAvailable:"{{count}} PRD(s) verfügbar"},A0e={modified:"Geändert: {{date}}"},j0e={pending:"Ausstehend","in-progress":"In Bearbeitung",done:"Erledigt",blocked:"Blockiert",deferred:"Zurückgestellt",cancelled:"Abgebrochen"},R0e={high:"Hoch",medium:"Mittel",low:"Niedrig"},I0e={title:"Keine Aufgaben entsprechen deinen Filtern",description:"Versuche, deine Such- oder Filterkriterien anzupassen."},_0e={notConfigured:x0e,gettingStarted:v0e,setupModal:y0e,helpGuide:w0e,search:k0e,filters:S0e,sort:C0e,views:N0e,kanban:E0e,buttons:T0e,prd:A0e,statuses:j0e,priorities:R0e,noMatchingTasks:I0e},L0e={save:"Kaydet",cancel:"İptal",delete:"Sil",create:"Oluştur",edit:"Düzenle",close:"Kapat",confirm:"Onayla",submit:"Gönder",retry:"Tekrar Dene",refresh:"Yenile",search:"Ara",clear:"Temizle",copy:"Kopyala",download:"İndir",upload:"Yükle",browse:"Gözat"},P0e={chat:"Sohbet",shell:"Shell",files:"Dosyalar",git:"Kaynak Kontrolü",changes:"Değişiklikler",liveView:"Canlı Görünüm",tasks:"Görevler",remote:"Uzaktan",controlRoom:"Kontrol",orchestration:"Orkestrasyon"},D0e={loading:"Yükleniyor...",success:"Başarılı",error:"Hata",failed:"Başarısız",pending:"Beklemede",completed:"Tamamlandı",inProgress:"Sürüyor"},O0e={savedSuccessfully:"Başarıyla kaydedildi",deletedSuccessfully:"Başarıyla silindi",updatedSuccessfully:"Başarıyla güncellendi",operationFailed:"İşlem başarısız",networkError:"Ağ hatası. Lütfen bağlantını kontrol et.",unauthorized:"Yetkisiz erişim. Lütfen giriş yap.",notFound:"Bulunamadı",invalidInput:"Geçersiz girdi",requiredField:"Bu alan zorunlu",unknownError:"Bilinmeyen bir hata oluştu"},M0e={settings:"Ayarlar",home:"Ana Sayfa",back:"Geri",next:"İleri",previous:"Önceki",logout:"Çıkış Yap"},F0e={language:"Dil",theme:"Tema",darkMode:"Koyu Mod",lightMode:"Açık Mod",name:"İsim",description:"Açıklama",enabled:"Etkin",disabled:"Devre Dışı",optional:"İsteğe Bağlı",version:"Sürüm",select:"Seç",selectAll:"Tümünü Seç",deselectAll:"Tümünün Seçimini Kaldır"},z0e={justNow:"Az önce",minutesAgo:"{{count}} dakika önce",hoursAgo:"{{count}} saat önce",daysAgo:"{{count}} gün önce",yesterday:"Dün"},B0e={newFile:"Yeni Dosya",newFolder:"Yeni Klasör",rename:"Yeniden Adlandır",move:"Taşı",copyPath:"Yolu Kopyala",openInEditor:"Editörde Aç"},U0e={loading:"Pixcode Yükleniyor",settingUpWorkspace:"Çalışma alanın hazırlanıyor...",chooseProject:"Projeni Seç",selectProjectDescription:"Claude ile kodlamaya başlamak için kenar çubuğundan bir proje seç. Her proje kendi sohbet oturumlarını ve dosya geçmişini içerir.",tip:"İpucu",createProjectMobile:"Projelere erişmek için yukarıdaki menü düğmesine dokun",createProjectDesktop:"Kenar çubuğundaki klasör simgesine tıklayarak yeni bir proje oluştur",newSession:"Yeni Oturum",untitledSession:"Adsız Oturum",projectFiles:"Proje Dosyaları",landing:{title:"Pixcode çalışma alanını başlat",description:"Bir proje seçebilir, yeni sohbet açabilir veya tek hedefle Orkestrasyon sistemini başlatabilirsin. Orkestrasyon; seçtiğin CLI ajanlarını yönetir, adımları gösterir ve çıkan hataları saklamadan ekrana taşır.",startOrchestration:"Orkestrasyon başlat",startOrchestrationDescription:"Otomatik proje açılır, ajan seçimi ve çalışma geçmişiyle Orkestrasyon ekranına geçilir.",startChat:"Yeni sohbet aç",startChatDescription:"Klasör otomatik oluşturulur ve normal chat ekranında tek ajanla ilerlersin.",sidebarHint:"Kenar çubuğundan mevcut bir proje seçersen sohbet geçmişi, dosyalar, git durumu, task sistemi ve orkestrasyon aynı ana ekranda kalır.",createProject:"Yeni Proje Oluştur",createProjectDescription:"Mevcut çalışma alanını ekle veya klasör oluştur; ardından kodlamaya başlamak için CLI seçim ekranına geç."}},$0e={title:"Orkestrasyon",subtitle:"Pixcode, {{project}} icin yerel kontrolleri, testleri, terminal islerini ve proje operasyonlarini koordine edebilir.",refresh:"Yenile",goal:"Hedef",goalPlaceholder:"Örn: Auth ekranını tek port dağıtıma göre düzelt, hataları yakala, lint ve typecheck ile doğrula.",mode:"Çalışma modu",systemPlan:"Sistem planı",noMode:"Mod seçilmedi",loadingPlan:"Ajan düzeni yükleniyor.",start:"Takımı başlat",starting:"Başlatılıyor",stop:"Takımı durdur",stopping:"Durduruluyor",cancelFailed:"Workflow durdurulamadı.",linkedTask:"Bağlı görev",replayRun:"Replay",replaying:"Replay başlıyor",approveReplay:"Replay onayla",replayApprovalRequired:"Önceki shell, network veya dosya yazma aktivitesi olan adımı tekrar çalıştırmadan önce replay onayı gerekiyor.",replayFailed:"Workflow replay başlatılamadı.",needAgent:"En az bir CLI çalışanını açmalısın.",needRoles:"Bu mod için şu rol(ler)e en az bir açık ajan atamalısın: {{roles}}.",startFailed:"Workflow başlatılamadı.",quickPrompts:{label:"Hızlı prompt:",liveTrading:{label:"8024 canlı trading ekranı",prompt:"merhaba senden ufak bir proje yapmanı sonrasında bu projeyi 8024 portunda çalıştırmanı istiyorum. İstediğim proje ise binance ile bağlantılı fapi bağlantısıyla tradingview görünümünde güzel bir tasarım yap tradingview chartı ve solda yıldızlama sistemi olsun. işleri bölüştür mantıklı şekilde yap"}},cliControl:"CLI ekip kontrolu",enabledCount:"{{count}} açık",enabled:"Açık",disabled:"Kapalı",history:"Geçmiş",emptyHistory:"Henüz çalışma yok. Bir hedef yazıp ajanları başlat.",steps:"{{done}}/{{total}} adım",notSelected:"Henüz çalışma seçilmedi",notSelectedDescription:"Soldan bir geçmiş kaydı seç veya yeni bir hedef başlat. Ajan mesajları, hatalar, değişiklik özeti ve önizleme çıktıları burada görünür.",loadFailed:"Çalışma detayı alınamadı.",loadingRun:"Çalışma yükleniyor...",traceTimeline:"Trace zaman çizelgesi",traceFilters:"Filtreler",traceAll:"Hepsi",traceActor:"Aktör",traceProvider:"Provider",traceType:"Tür",traceSeverity:"Seviye",traceDuration:"{{duration}} sürdü",traceEmpty:"Geçerli filtrelerle eşleşen trace olayı yok.",traceLoadFailed:"Trace zaman çizelgesi alınamadı.",traceTypes:{run:"Çalışma",node:"Adım",provider:"Provider",message:"Mesaj",artifact:"Artifact",file:"Dosya değişikliği",permission_policy:"İzin politikası",error:"Hata"},traceSeverityLevels:{info:"Bilgi",warning:"Uyarı",error:"Hata"},teamHistory:"Takım geçmişi",permissionApprovalsPending:"{{count}} izin onayı bekliyor",agentSteps:"Ajan adımları",changeSummary:"Değişiklik özeti",noChangeSummary:"Final özet henüz oluşmadı. Ajanlar tamamlandığında burada okunabilir Markdown özeti görünecek.",prepareTeamFromReport:"Bu raporla ajan takımı hazırla",prepareTeamTitle:"Ajan takımı prompt'u hazırla",prepareTeamDescription:"Tartışma çıktısı yeni ajan takımı prompt'una dönüştürüldü. Düzenleyip Agent Team moduna taşıyabilirsin.",usePreparedPrompt:"Prompt'u kullan",reportToPromptPrefix:"Aşağıdaki tartışma/karar raporuna göre bir ajan takımı hazırla ve uygula. İhtiyaçları görevlerine ayır, mevcut CLI ajanlarına mantıklı assignment öner ve kullanıcı onayıyla çalışmaya başla.",generatedSummaryTitle:"Otomatik çalışma özeti",summaryStatus:"Genel durum",summarySteps:"Tamamlanan adım",summaryFailures:"Hatalı adım",summaryCanceled:"İptal edilen adım",summaryDiffs:"Değişiklik/diff çıktısı",summaryPreviews:"Önizleme çıktısı",summaryErrorPrefix:"Hata",assignedWork:"Atanan işler",autoAssigned:"Otomatik / koordinatör belirler",noStepOutput:"Adım çıktısı yok.",agentMessages:"Ajan mesajları",noAgentMessages:"Bu ajan henüz mesaj üretmedi. Çalışma başarısızsa üstte gerçek CLI hatası görünür.",outputs:"Çıktılar",noOutputs:"Değişiklik özeti, önizleme veya komut çıktısı henüz yok.",open:"Aç",artifact:{fileDiff:"Değişiklik özeti",previewUrl:"Önizleme",commandOutput:"Komut çıktısı",handoff:"Handoff artifact"},role:{user:"Kullanıcı",agent:"Ajan"},status:{queued:"Bekliyor",running:"Çalışıyor",completed:"Tamamlandı",failed:"Hata",canceled:"İptal",skipped:"Atlandı"},nodes:{codex_review:"Codex incelemesi",gemini_review:"Gemini incelemesi",claude_review:"Claude incelemesi",claude_code_review:"Claude incelemesi",cursor_review:"Cursor incelemesi",aggregate:"Sonuç toparlama",architect:"Planlama",implement:"Uygulama",review:"İnceleme",proposal:"Öneri",critique:"Eleştiri",response:"Yanıt",judge:"Karar",coordinator:"Koordinatör",final_report:"Final raporu"},stages:{coordinator:"Koordinatör",handoff:"Handoff",backend:"Backend",frontend:"Frontend",implementation:"Uygulama",review:"Review",repair:"Düzeltme",proposal:"Öneri",critique:"Eleştiri",response:"Yanıt",decision:"Karar",report:"Rapor",fallback:"Yedek",final_report:"Final raporu"},workflows:{multi_model_review:{name:"Çoklu model incelemesi",description:"Seçili CLI ajanları aynı hedefi ayrı ayrı inceler, sonra açık olan bir ajan sonucu toparlar."},sequential_handoff:{name:"Sıralı iş bölümü",description:"Ajanlar sırayla planlar, uygular ve inceler. Kapalı CLI adımları atlanır."},adversarial_debate:{name:"Karar tartışması",description:"Ajanlar çözüm önerir, eleştirir, yanıtlar ve nihai kararı üretir."},agent_team:{name:"Ajan takımı",description:"Koordinatör hedefi ve açık CLI kopyalarını okur, işi dağıtır ve sonucu toplar."}},adapters:{"claude-code":{label:"Claude Code",role:"CLI çalışanı"},cursor:{label:"Cursor",role:"CLI çalışanı"},codex:{label:"Codex",role:"CLI çalışanı"},gemini:{label:"Gemini",role:"CLI çalışanı"},qwen:{label:"Qwen Code",role:"CLI çalışanı"},opencode:{label:"OpenCode",role:"CLI çalışanı"}},activeCount:"{{active}}/{{total}} aktif",teamHint:"Her satır bir CLI çalışanıdır. Birden fazla Claude, Codex, Cursor, Gemini, Qwen veya OpenCode ekleyebilir, her birine ayrı görev yazabilirsin.",parallelLimit:"Paralel sınır",fallbackAgent:"Yedek CLI",noFallbackAgent:"Otomatik yedek yok",fallbackAgentHint:"Bir CLI adımı hata verirse Pixcode aynı adımı bu yedek ajanla yeniden dener.",agentRole:"Safha",agentModel:"Model",agentRoles:{auto:"Otomatik",backend:"Backend",frontend:"Frontend",review:"Test / review",implementation:"Uygulama",proposal:"Öneri",critique:"Eleştiri",response:"Yanıt",decision:"Karar / rapor",report:"Rapor",custom:"Özel"},customRolePlaceholder:"Örn: Güvenlik, Mobil UX, DB mimarisi",roleHints:{default:"Boş bırakırsan koordinatör bu ajana hedefe göre iş verir.",agent_team:"Backend, frontend ve review gibi safhaları seçebilir veya otomatik bırakabilirsin.",multi_model_review:"Açık ajanlar inceleme yapar; rapor rolü seçilirse final özeti o ajan toplar.",sequential_handoff:"Ajanlar seçtiğin sırayla çalışır; görev metni her adımın sınırını belirler.",adversarial_debate:"Karar tartışmasında safha seçmek isteğe bağlıdır; boş kalırsa sistem seçili ajanları sırayla Öneri, Eleştiri ve gerekirse Yanıt olarak dağıtır."},addAgent:"{{agent}} ekle",soloAgent:"Sadece {{agent}} ile çalış",soloAgentShort:"Tek",duplicateAgent:"{{agent}} çoğalt",removeAgent:"{{agent}} kaldır",assignment:"Görev",assignmentPlaceholder:"İsteğe bağlı: bu çalışanın ne yapacağını net yaz. Boş kalırsa koordinatör hedefe göre atar.",agentInstance:"{{name}} #{{number}}",taskTitle:"Görev",taskTitlePlaceholder:"Özelliği uygula",taskDescription:"Açıklama",taskDescriptionPlaceholder:"Kapsam, sınırlar, beklenen çıktı",addTask:"Ekle",runTask:"Çalıştır",cancelTask:"İptal",dispatchTask:"Görevi ata",adapter:"Adaptör",isolation:"Çalışma alanı",dispatch:"Ata",auto:"Otomatik",cliSettings:"CLI ayarları",waitingForStream:"Akış bekleniyor...",workflow:"Workflow",templates:"Şablonlar",noTemplate:"Şablon yok",templateHint:"Başlatmadan önce workflow, ajan rolleri ve kabul kriterlerini doldurmak için bir başlangıç şablonu seç.",input:"Girdi",taskStates:{todo:"Yapılacak",in_progress:"Devam ediyor",in_review:"İncelemede",done:"Bitti",failed:"Hatalı",canceled:"İptal edildi"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},workspaceTarget:"Hedef çalışma alanı",workspaceTargets:{selectedProject:"Seçili proje",pixcodeApp:"Pixcode sistemi",custom:"Özel path"},customWorkspacePlaceholder:"/proje/yolu",workspaceTargetHint:"Ajanlar şu dizinde çalışacak: {{path}}",autoDetect:"otomatik algı",needWorkspacePath:"Özel çalışma alanı path bilgisini gir.",quickWorkspaceCheck:"Workspace kontrolu"},H0e={loading:"Dosyalar yükleniyor...",files:"Dosyalar",simpleView:"Basit görünüm",compactView:"Kompakt görünüm",detailedView:"Detaylı görünüm",searchPlaceholder:"Dosya ve klasörlerde ara...",clearSearch:"Aramayı temizle",name:"İsim",size:"Boyut",modified:"Değiştirilme",permissions:"İzinler",noFilesFound:"Dosya bulunamadı",checkProjectPath:"Proje yolunun erişilebilir olduğunu kontrol et",noMatchesFound:"Eşleşme bulunamadı",tryDifferentSearch:"Farklı bir arama terimi dene veya aramayı temizle",justNow:"az önce",minAgo:"{{count}} dakika önce",hoursAgo:"{{count}} saat önce",daysAgo:"{{count}} gün önce",newFile:"Yeni Dosya (Cmd+N)",newFolder:"Yeni Klasör (Cmd+Shift+N)",refresh:"Yenile",collapseAll:"Tümünü Daralt",context:{rename:"Yeniden Adlandır",delete:"Sil",copyPath:"Yolu Kopyala",download:"İndir",newFile:"Yeni Dosya",newFolder:"Yeni Klasör",refresh:"Yenile",menuLabel:"Dosya bağlam menüsü",loading:"Yükleniyor..."}},G0e={title:"Yeni Proje Oluştur",steps:{type:"Tür",configure:"Yapılandır",confirm:"Onayla"},step1:{question:"Zaten bir çalışma alanın var mı, yoksa yeni bir tane mi oluşturmak istersin?",existing:{title:"Mevcut Çalışma Alanı",description:"Sunucumda zaten bir çalışma alanım var, sadece proje listesine eklemek istiyorum"},new:{title:"Yeni Çalışma Alanı",description:"Yeni bir çalışma alanı oluştur, istersen bir GitHub deposundan klonla"},githubClone:{title:"GitHub'tan Klonla",description:"Bir hedef klasör seç, repoyu içine klonla"},subfolder:{title:"Alt Klasör Oluştur",description:"Bir üst klasör seç, içinde yeni bir alt klasör oluştur"}},step2:{existingPath:"Çalışma Alanı Yolu",newPath:"Çalışma Alanı Yolu",subfolderParentPath:"Üst Klasör",subfolderParentHelp:"Yeni alt klasörün oluşturulacağı klasörün yolu",subfolderName:"Alt Klasör Adı",subfolderNameHelp:"Bu isimde yeni bir klasör yukarıdaki üst klasörün içinde oluşturulacak",existingPlaceholder:"/mevcut/calisma-alani/yolu",newPlaceholder:"/yeni/calisma-alani/yolu",existingHelp:"Mevcut çalışma alanı dizinine giden tam yol",newHelp:"Çalışma alanı dizinine giden tam yol",githubUrl:"GitHub URL'si (İsteğe Bağlı)",githubPlaceholder:"https://github.com/kullanici/depo",githubHelp:"İsteğe bağlı: bir depoyu klonlamak için GitHub URL'si gir",githubAuth:"GitHub Kimlik Doğrulama (İsteğe Bağlı)",githubAuthHelp:"Yalnızca özel depolar için gereklidir. Genel depolar kimlik doğrulama olmadan klonlanabilir.",loadingTokens:"Kayıtlı token'lar yükleniyor...",storedToken:"Kayıtlı Token",newToken:"Yeni Token",nonePublic:"Yok (Genel)",selectToken:"Token Seç",selectTokenPlaceholder:"-- Bir token seç --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"Bu token sadece bu işlem için kullanılacak",publicRepoInfo:"Genel depolar kimlik doğrulama gerektirmez. Genel bir depo klonluyorsan token girmeyi atlayabilirsin.",noTokensHelp:"Kayıtlı token yok. Kolay tekrar kullanım için Ayarlar → API Anahtarları bölümünden token ekleyebilirsin.",optionalTokenPublic:"GitHub Token (Genel Depolar için İsteğe Bağlı)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (genel depolar için boş bırak)"},step3:{reviewConfig:"Yapılandırmanı Gözden Geçir",workspaceType:"Çalışma Alanı Türü:",existingWorkspace:"Mevcut Çalışma Alanı",newWorkspace:"Yeni Çalışma Alanı",subfolderWorkspace:"Yeni Alt Klasör",path:"Yol:",parentPath:"Üst Yol:",subfolderName:"Alt Klasör Adı:",cloneFrom:"Şuradan Klonla:",authentication:"Kimlik Doğrulama:",usingStoredToken:"Kayıtlı token kullanılıyor:",usingProvidedToken:"Girilen token kullanılıyor",noAuthentication:"Kimlik doğrulama yok",sshKey:"SSH Anahtarı",existingInfo:"Çalışma alanı proje listene eklenecek ve Claude/Cursor oturumları için kullanılabilir olacak.",newWithClone:"Depo bu klasöre klonlanacak.",newEmpty:"Çalışma alanı proje listene eklenecek ve Claude/Cursor oturumları için kullanılabilir olacak.",subfolderInfo:"Üst klasörün içinde yeni bir alt klasör oluşturulacak ve proje listene eklenecek.",cloningRepository:"Depo klonlanıyor..."},buttons:{cancel:"İptal",back:"Geri",next:"İleri",createProject:"Projeyi Oluştur",creating:"Oluşturuluyor...",cloning:"Klonlanıyor..."},errors:{selectType:"Lütfen mevcut çalışma alanın olduğunu mu yoksa yeni oluşturmak mı istediğini seç",providePath:"Lütfen bir çalışma alanı yolu gir",provideSubfolderName:"Lütfen alt klasör için bir isim gir",subfolderNameInvalid:"Alt klasör adı yol ayırıcı içeremez veya . / .. olamaz",failedToCreate:"Çalışma alanı oluşturulamadı",failedToCreateFolder:"Klasör oluşturulamadı"}},V0e={genericTool:"bir araç",codes:{generic:{info:{title:"Bildirim"}},permission:{required:{title:"Aksiyon Gerekli",body:"{{toolName}} kararını bekliyor."}},run:{stopped:{title:"Çalıştırma Durduruldu",body:"Sebep: {{reason}}"},failed:{title:"Çalıştırma Başarısız"}},agent:{notification:{title:"Ajan Bildirimi"}}},open:"Bildirimleri aç",title:"Bildirimler",markRead:"Okundu",close:"Bildirimleri kapat",dismiss:"Bildirimi kapat"},W0e={title:"Güncelleme Mevcut",newVersionReady:"Yeni bir sürüm hazır",currentVersion:"Mevcut Sürüm",latestVersion:"Son Sürüm",latestRelease:"Son Yayın",releaseNotesTitle:"Sürüm Notları",releaseNotesSubtitle:"Pixcode'daki son değişiklikler",whatsNew:"Yenilikler:",viewFullRelease:"Tam sürüm notlarını gör",updateProgress:"Güncelleme İlerlemesi:",manualUpgrade:"Manuel yükseltme:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:'Veya güncellemeyi otomatik çalıştırmak için "Şimdi Güncelle"ye tıkla.',updateCompleted:"Güncelleme başarıyla tamamlandı!",restartServer:"Değişikliklerin uygulanması için sunucuyu yeniden başlat.",updateFailed:"Güncelleme başarısız",buttons:{close:"Kapat",later:"Daha Sonra",copyCommand:"Komutu Kopyala",updateNow:"Şimdi Güncelle",updating:"Güncelleniyor..."},ariaLabels:{closeModal:"Sürüm yükseltme modalını kapat",showSidebar:"Kenar çubuğunu göster",settings:"Ayarlar",updateAvailable:"Güncelleme mevcut",closeSidebar:"Kenar çubuğunu kapat"}},q0e={title:"Canlı Görünüm",subtitle:"Bu projeyi yerelde çalıştır ve aktif güvenli tünel varsa paylaşım linkiyle dışarı aç.",start:"Başlat",restart:"Yeniden başlat",stop:"Durdur",runnerError:"Çalıştırıcı hatası",runnerUnavailable:"Çalıştırıcı yok",managedRuntimePreparing:"Pixcode runtime'ı hazırlayacak",managedRuntimeDescription:"Başlat'a basınca Pixcode gereken yerel runtime'ı otomatik hazırlar.",preparingRuntime:"Runtime hazırlanıyor…",preparingRuntimeDescription:"Pixcode runtime'ı yerel olarak indirip kuruyor. İlk kullanımda biraz sürebilir.",runnerErrorFallback:"Önizleme hazır olmadan çalıştırıcı durdu.",detecting:"Proje çalıştırıcısı algılanıyor…",noRunner:"Çalıştırıcı algılanmadı",staticHint:"index.html varsa statik HTML doğrudan sunulur.",customCommand:"Özel komut",custom:"Özel",customPlaceholder:"npm run dev, python app.py, go run .",environment:"Ortam",environmentLocalProcess:"Yerel süreç",environmentStatic:"Statik dosyalar",environmentUnavailable:"Kullanılamaz",statusLabel:"Durum",framework:"Framework",command:"Komut",upstream:"Upstream",publicTunnel:"Public tunnel",tunnelActive:"Tünel aktif",tunnelLocalOnly:"Sadece yerel",diagnostics:"Tanılar",viewport:"Çözünürlük",viewportDesktop:"Masaüstü",viewportTablet:"Tablet",viewportMobile:"Mobil",viewportWidth:"Genişlik",viewportHeight:"Yükseklik",controls:"Çalıştırıcı, çözünürlük ve loglar",shareLink:"Paylaşım linki",starting:"Başlatılıyor",openExternal:"Dışarıda aç",externalActive:"Güvenli tünel aktif; bu link ağ dışına paylaşılabilir.",localOnly:"External Access kapalı; bu link sadece bu Pixcode sunucusunda yerel çalışır.",frameTitle:"Proje Canlı Görünümü",emptyTitle:"Canlı Görünümü başlat",emptyDescription:"Pixcode proje yapısını algılar, yerel web sunucusunu başlatır ve burada gösterir."},K0e=JSON.parse('{"title":"Kontrol Odası","subtitle":"{{target}} için üretim, platform, yönetim, denetim ve self-hosted erişim","thisServer":"bu sunucu","refresh":"Yenile","nav":{"overview":"Genel","production":"Üretim","admin":"Yönetim","team":"Ekip","secrets":"Sırlar","marketplace":"Market","eval":"Değerlendirme","usage":"Kullanım","security":"Güvenlik","access":"Erişim"},"overview":{"title":"v1.46 yayın yüzeyi","description":"Aşağıdaki her kutu v1.44-v1.45 API ile bağlı ve artık UI içinde görünüyor.","latestAuditEvents":"Son denetim olayları","remoteAccessOptions":"Uzak erişim seçenekleri"},"metrics":{"issueRuns":"Issue-to-PR çalışmaları","reviewItems":"Review öğeleri","subUsers":"Alt kullanıcılar","collaborators":"Ortaklar","secrets":"Scope env sırları","marketplace":"Market","evalRuns":"Değerlendirme çalışmaları","securityAudits":"Güvenlik denetimleri","attention":"Dikkat","running":"Çalışıyor","needsAttention":"Dikkat gerekenler","runningNow":"Şu an çalışanlar","reviews":"İncelemeler","checkpoints":"Checkpointler","roles":"Roller","auditEvents":"Denetim olayları","scopedSecrets":"Kapsamlı sırlar","auditRuns":"Denetimler","findings":"Bulgular","usageRows":"Kullanım satırları","evalSuites":"Değerlendirme paketleri"},"sections":{"production":{"title":"Production loop","description":"Issue-to-PR çalışmaları başlat, CI hatalarını ayrıştır, değişiklikleri incele, arka plan işleri zamanla ve checkpoint oluştur."},"admin":{"title":"Admin sistemi","description":"Tek self-hosted Pixcode sunucusunda alt kullanıcı oluştur, hesapları kapat ve aktiviteleri incele."},"team":{"title":"Proje ortakları ve çalışanları","description":"Herkesi global admin yapmadan proje bazında ortak, çalışan, reviewer ve viewer ata."},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"Self-hosted erişim","description":"Sabit domain yoksa Tailscale kullan veya sabit public URL için Cloudflare Tunnel/custom domain yapılandır."}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Alt kullanıcı oluştur","rolePermissions":"Rol izinleri","addCollaborator":"Ortak ekle","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Uzak erişim kurulumu"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Çalıştırmayı sıraya al","parseFailure":"Hatayı ayrıştır","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Kullanıcı oluştur","disable":"Disable","enable":"Enable","addCollaborator":"Ortak ekle","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Erişim yolunu kaydet","checkUrl":"URL kontrol et","checkTailscale":"Tailscale kontrol et"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"Ortaklar projeye nasıl erişir","stepUsers":"Alt kullanıcı oluştur","stepUsersDescription":"Kişiyi Admin sisteminde member, viewer, project_worker veya project_partner gibi bir rolle oluştur.","stepRole":"Proje rolü ata","stepRoleDescription":"Aynı kullanıcıyı proje ortağı olarak ekle; sadece seçtiğin projeleri görsün ve çalıştırsın.","stepLink":"Erişim yolunu paylaş","stepLinkDescription":"Self-hosted erişimde tanımlanan Tailscale, Cloudflare Tunnel, custom domain veya LAN URL adresini paylaş.","paths":"Kullanılabilir erişim linkleri"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operasyonlar","description":"Çalışmalar, incelemeler, onaylar, zamanlayıcı ve checkpointler"},"people":{"label":"Kişiler","description":"Yöneticiler, ortaklar, roller ve aktivite"},"access":{"label":"Erişim","description":"LAN, Tailscale, tünel ve domain yönlendirmesi"},"security":{"label":"Güvenlik","description":"Sırlar, izin riski ve denetim kontrolleri"},"insights":{"label":"İçgörüler","description":"Kullanım, değerlendirmeler ve market sağlığı"}},"context":{"title":"Bu ne anlama geliyor?","recommendedNextStep":"Önerilen sonraki adım","runTimeline":"Çalışma zaman çizelgesi","runTimelineDescription":"Agent, reviewer, checkpoint ve denetim olayları için okunabilir aktivite akışı.","emptyTimelineTitle":"Henüz çalışma zaman çizelgesi yok","emptyTimelineDescription":"Issue çalışmaları, review kararları, checkpointler veya denetim olayları kaydedilince burada görünür.","serverSignal":"Sunucu sinyali","serverSignalDescription":"İlk ekran ham backend bölümlerini gizler ve yalnızca güncel durumu gösterir."},"operations":{"runTimeline":"Çalışma zaman çizelgesi","runTimelineDescription":"Ham JSON açmadan aktör, aksiyon ve sonuç geçmişi.","noActivityTitle":"Henüz aktivite yok","noActivityDescription":"Issue çalışmaları, review kararları, checkpointler ve denetim olayları burada dikey zaman çizelgesi olarak görünür.","actionQueue":"Aksiyon kuyruğu","actionQueueDescription":"Review öğeleri sıkışık tablo yerine mobil uyumlu satırlar olarak gösterilir.","noReviewItemsTitle":"Review öğesi yok","noReviewItemsDescription":"Değişen dosyalar için kabul/düzelt kararı gerektiğinde review öğesi oluştur.","reviewRequested":"Review istendi","changedFiles":"{{count}} değişen dosya","accept":"Kabul et"},"people":{"projectCollaborators":"Proje ortakları","projectCollaboratorsDescription":"Proje partnerleri ve çalışanları global admin değildir; atanmış projelere kapsamlı erişim alır.","noCollaboratorsTitle":"Henüz ortak yok","noCollaboratorsDescription":"Önce alt kullanıcı oluştur, ardından o kişiyi proje rolüne ata.","project":"Proje","roleScoped":"role bağlı","auditLog":"Denetim kaydı","auditLogDescription":"Ham veritabanı görünümü açmadan alt kullanıcıların, proje partnerlerinin ve çalışanların ne değiştirdiğini ara.","searchAudit":"Aktör, aksiyon, proje veya detay ara","noAuditMatchTitle":"Eşleşen denetim olayı yok","noAuditMatchDescription":"Kullanıcı ve proje erişim aktiviteleri aksiyonlardan sonra burada görünür.","system":"sistem","auditEvent":"Denetim olayı","advancedTitle":"Gelişmiş kişi yönetimi","advancedDescription":"Kullanıcı oluştur ve proje rollerini yalnızca gerektiğinde ata."},"access":{"openSettings":"Ayarlar > Erişim aç","lanTitle":"LAN ve yerel","lanDescription":"Tarayıcı aynı makinede veya aynı ağdayken kullanılır. Özel ya da public tünellerden önce buradan başla.","tailscaleTitle":"Tailscale özel erişim","tailscaleDescription":"Pixcode’u public açmadan ekip erişimi gerektiğinde en uygun seçenektir. UI kurulum, giriş ve URL paylaşımını yönlendirmelidir.","cloudflareTitle":"Cloudflare veya özel domain","cloudflareDescription":"Sabit HTTPS URL gerektiğinde uygundur. Tünel/domain bir kez yapılandırılır ve atanmış kullanıcılarla paylaşılır.","howUsersConnect":"Kullanıcılar nasıl bağlanır?","howUsersConnectDescription":"Bu bölüm Erişim akışını teknik olmayan kullanıcılar için anlaşılır tutar.","stepUserTitle":"Kullanıcıyı oluştur","stepUserDescription":"Sunucunun kullanıcıyı tanıması için Kişiler bölümünden ekle.","stepRoleTitle":"Proje rolü ata","stepRoleDescription":"Kullanıcıya{{projectSuffix}} proje erişimi ver.","stepUrlTitle":"Tek URL paylaş","stepUrlDescription":"Ayarlar > Erişim içindeki LAN, Tailscale, Cloudflare Tunnel veya özel domain URL’sini kullan."},"security":{"secretVault":"Sır kasası","secretVaultDescription":"Satırlar kapsamı, hedefi ve maskelenmiş env adlarını gösterir. Değerler gizli kalır.","noSecretsTitle":"Kayıtlı sır yok","noSecretsDescription":"Provider, proje, workflow, Telegram veya API env değerlerini gelişmiş formdan sakla.","global":"global","advancedTitle":"Gelişmiş güvenlik aksiyonları","advancedDescription":"Kapsamlı env değerleri sakla veya denetim kontrollerini kuyruğa al."},"insights":{"usageSummary":"Kullanım özeti","usageSummaryDescription":"Provider metrikleri mobilde geniş tablo yerine kartlar olarak gösterilir.","noUsageTitle":"Henüz kullanım olayı yok","noUsageDescription":"Provider veya workflow olayları kaydedildikten sonra kullanım burada görünür.","provider":"provider","usageRowDescription":"{{tokens}} token - {{cost}} - ort. {{latency}}ms","errorRate":"%{{rate}} hata","marketplaceHealth":"Market sağlığı","marketplaceHealthDescription":"MCP sunucuları, workflow şablonları, provider adapterleri ve bildirim kanalları genel görünümü sıkıştırmadan görünür kalır.","noMarketplaceTitle":"Market kaydı yok","noMarketplaceDescription":"Bir plugin veya workflow şablonu kuruluma hazır olduğunda kayıt ekle.","noSourceConfigured":"Kaynak yapılandırılmamış","unknown":"bilinmiyor","advancedTitle":"Gelişmiş içgörü aksiyonları","advancedDescription":"Kullanım kaydet, değerlendirme paketleri oluştur veya market kayıtları ekle."},"recommendations":{"attention":"Önce Operasyonlar bölümünü aç. Yeni işe başlamadan önce review, hata, başarısız değerlendirme veya güvenlik bulgularını temizle.","access":"Ayarlar > Erişim bölümünü aç ve kullanıcıların kullanacağı tek URL’yi kaydet. Ardından Kişiler içinde proje rolleri ata.","people":"Önce alt kullanıcıları oluştur, ikinci adımda proje rollerini ata, sonra erişim yolunu paylaş.","security":"Sırları işe yarayan en küçük kapsamla sakla, ardından izin veya secret scan çalıştır.","insights":"Model varsayılanlarını değiştirmeden önce provider maliyeti, gecikme ve değerlendirme başarı oranını karşılaştır.","operations":"Şu an çalışanları ve zaman çizelgesini incele. Dikkat gereken bir şey yoksa sonraki issue-to-PR veya zamanlanmış işi başlat."}}'),Y0e={title:"VS Code Çalışma Alanı",noProject:"Proje seçilmedi",activity:{explorer:"Gezgin",projects:"Projeler",sourceControl:"Kaynak Kontrolü",terminal:"Terminal",showPanel:"Sol paneli göster",hidePanel:"Sol paneli gizle"},panels:{explorer:"Gezgin",projects:"Projeler",sourceControl:"Kaynak Kontrolü",terminal:"Terminal",editor:"Editör",cli:"CLI",rightTerminal:"Terminal"},editor:{emptyTitle:"Gezginden bir dosya aç",closeTab:"{{file}} sekmesini kapat",scrollLeft:"Sekmeleri sola kaydir",scrollRight:"Sekmeleri saga kaydir",moreActions:"Diger sekme aksiyonlari",closeSplit:"Bolunmus editoru kapat",context:{close:"Kapat",closeAll:"Tumunu kapat",copyPath:"Yolu kopyala",splitRight:"Saga bol",splitMoveRight:"Saga bol ve tasi"}},resize:{left:"Sol paneli boyutlandır",right:"CLI panelini boyutlandır"},menu:{openProject:"Proje Aç...",cloneFromGithub:"Depoyu Klonla...",newChat:"Yeni Sohbet",openProjects:"Projeleri Aç"},menuBar:{file:"Dosya",edit:"Düzenle",selection:"Seçim",view:"Görünüm",go:"Git",run:"Çalıştır",terminal:"Terminal",help:"Yardım",openSettingsPanel:"Ayarlar panelini aç"},projects:{openProject:"Proje Aç",cloneFromGithub:"Klonla",directoryList:"Dizinler",refresh:"Projeleri yenile",emptyTitle:"Henüz proje dizini yok",emptyDescription:"Başlamak için yerel klasör aç veya bir depoyu klonla.",selected:"Seçili",startChat:"Sohbet",fileCount:"{{formattedCount}} dosya",fileCountPending:"Dosyalar hazırlanıyor",startTitle:"Pixcode calisma alani baslat",startDescription:"Bir klasor sec; Pixcode explorer, terminal ve sohbet gecmisini bu calisma alanina baglar.",workHere:"Bu klasorde calis"},workspace:{empty:"Workspace 1 olusturmak icin bir proje ac.",openFirst:"Workspace ac",add:"Workspace ekle",scrollLeft:"Workspace sekmelerini sola kaydir",scrollRight:"Workspace sekmelerini saga kaydir",close:"{{name}} kapat",closeAction:"Workspace kapat",closeOthers:"Digerlerini kapat",closeAll:"Tumunu kapat",rename:"Yeniden adlandir",star:"Yildizla",unstar:"Yildizi kaldir",toggleStar:"{{name}} yildizla",moreActions:"Workspace aksiyonlari"},cli:{projectScoped:"Projeye bagli CLI terminali",chooseTitle:"CLI terminali baslat",chooseDescription:"Bir CLI sec, sonra sag paneli tamamen terminal olarak baslat.",startSelected:"{{provider}} baslat",newSession:"Yeni CLI oturumu",checking:"Kontrol ediliyor...",ready:"Hazir",notInstalled:"Kurulu degil",installing:"Kuruluyor...",updateAvailable:"{{version}} guncelle",installProvider:"{{provider}} kur",updateProvider:"{{provider}} guncelle",manualInstall:"Bu CLI elle kurulum istiyor.",installNoJob:"Kurulum job id dondurmedi.",installFailed:"Kurulum basarisiz.",installStreamLost:"Kurulum akisi erken kapandi. Kurulum sunucuda hala calisiyor olabilir.",provider:"Saglayici",installRunning:"kuruluyor",installDone:"hazir",installError:"kontrol istiyor",showPanel:"CLI panelini goster",hidePanel:"CLI panelini gizle",close:"Terminali kapat"},terminal:{title:"Terminal",close:"Terminali kapat"}},Z0e={title:"Uzak konsol",notSynced:"Senkronize değil",refresh:"Yenile",runId:"Çalışma {{id}}",metrics:{projects:"Projeler",activeRuns:"Aktif çalışmalar",approvalQueue:"Onay kuyruğu",webhooks:"Webhooklar"},sections:{projects:"Çoklu proje kontrol odası",approvals:"Onay kuyruğu",webhooks:"Webhook durumu"},badges:{active:"{{count}} aktif",approvals:"{{count}} onay"},projectStats:{sessions:"{{count}} oturum",failedRuns:"{{count}} başarısız çalışma",recentRuns:"{{count}} son çalışma"},actions:{allow:"İzin ver",deny:"Reddet"},webhook:{on:"açık",off:"kapalı",ok:"başarılı",failed:"başarısız",noDelivery:"Henüz teslim yok"},empty:{projects:"Kullanılabilir proje yok.",approvals:"Bekleyen onay yok.",webhooks:"Yapılandırılmış webhook yok."}},X0e={buttons:L0e,tabs:P0e,status:D0e,messages:O0e,navigation:M0e,common:F0e,time:z0e,fileOperations:B0e,mainContent:U0e,orchestration:$0e,fileTree:H0e,projectWizard:G0e,notifications:V0e,versionUpdate:W0e,liveView:q0e,controlRoom:K0e,vscodeWorkbench:Y0e,remoteConsole:Z0e},J0e="Ayarlar",Q0e={account:"Hesap",permissions:"İzinler",mcpServers:"MCP Sunucuları",pluginsMcp:"Eklentiler / MCP",configuration:"Yapılandırma",appearance:"Görünüm"},ebe={title:"Hesap",language:"Dil",languageLabel:"Görüntüleme Dili",languageDescription:"Arayüz için tercih ettiğin dili seç",username:"Kullanıcı Adı",email:"E-posta",profile:"Profil",changePassword:"Şifreyi Değiştir"},tbe={title:"MCP Sunucuları",addServer:"Sunucu Ekle",editServer:"Sunucuyu Düzenle",deleteServer:"Sunucuyu Sil",serverName:"Sunucu Adı",serverType:"Sunucu Türü",config:"Yapılandırma",testConnection:"Bağlantıyı Test Et",status:"Durum",connected:"Bağlı",disconnected:"Bağlantı kesildi",scope:{label:"Kapsam",user:"Kullanıcı",project:"Proje"}},nbe={title:"Görünüm",theme:"Tema",codeEditor:"Kod Editörü",editorTheme:"Editör Teması",wordWrap:"Kelime Kaydırma",showMinimap:"Minimap'i Göster",lineNumbers:"Satır Numaraları",fontSize:"Yazı Tipi Boyutu"},rbe={saveChanges:"Değişiklikleri Kaydet",resetToDefaults:"Varsayılanlara Döndür",cancelChanges:"Değişiklikleri İptal Et"},abe={title:"Hızlı Ayarlar",sections:{appearance:"Görünüm",toolDisplay:"Araç Gösterimi",viewOptions:"Görünüm Seçenekleri",agentDiff:"Ajan diff'i",inputSettings:"Girdi Ayarları",changeAwareness:"Hakimiyet"},darkMode:"Koyu Mod",autoExpandTools:"Araçları otomatik genişlet",showRawParameters:"Ham parametreleri göster",showThinking:"Düşünmeyi göster",autoScrollToBottom:"Otomatik en alta kaydır",sendByCtrlEnter:"Ctrl+Enter ile gönder",sendByCtrlEnterDescription:"Etkinleştirildiğinde, Ctrl+Enter'a basmak yalnız Enter yerine mesajı gönderir. IME (girdi metot düzenleyici) kullananlar için yanlışlıkla göndermeyi önler.",autoShowAgentDiff:"Ajan düzenlemelerini diff olarak göster",autoShowAgentDiffOff:"Kapalı",autoShowAgentDiffOpenOnly:"Açık dosyalar",autoShowAgentDiffAlways:"Her zaman",changeAwareness:"Hakimiyet",changedFiles:{title:"Değişen dosyalar",description:"Yerel dosya değişikliklerini izler ve yeni değişiklikte Dosyalar panelini açar.",noProject:"Yerel değişiklikleri izlemek için bir proje seç.",refresh:"Değişen dosyaları yenile",empty:"Yerel değişiklik yok",disabled:"Yerel değişiklikleri izlemek için Hakimiyet'i aç.",more:"+{{count}} dosya daha",lastChecked:"Kontrol {{value}}",guideTitle:"Sağ panel rehberi",guideFiles:"Değişen dosyalar Dosyalar içinde yeşil parlar.",guidePanel:"Yeni değişiklikler aktif sohbetin yanında görünür.",status:{M:"D",A:"E",D:"S",U:"Y"}},dragHandle:{dragging:"Tutamaç sürükleniyor",closePanel:"Ayarlar panelini kapat",openPanel:"Ayarlar panelini aç",draggingStatus:"Sürükleniyor...",toggleAndMove:"Açıp kapamak için tıkla, taşımak için sürükle"}},ibe={title:"Terminal Kısayolları",sectionKeys:"Tuşlar",sectionNavigation:"Gezinme",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"Yukarı Ok",arrowDown:"Aşağı Ok",scrollDown:"Aşağı Kaydır",handle:{closePanel:"Kısayol panelini kapat",openPanel:"Kısayol panelini aç"}},sbe={label:"Ayarlar",agents:"Ajanlar",appearance:"Görünüm",git:"Git",apiTokens:"API ve Token'lar",notifications:"Bildirimler",plugins:"Eklentiler",mobile:"Mobilden Kullan",telegram:"Telegram",diagnostics:"Tanılama",about:"Hakkında",access:"Erisim"},obe={title:"Mobilden Kullan",description:"Aynı ağdaki bir cihazdan Pixcode'u açmak için telefonunla QR kodunu tara.",refresh:"Yenile",copy:"Kopyala",copied:"Kopyalandı!",loading:"Ağ adresleri tespit ediliyor…",noEndpoints:"Yerel ağda adres bulunamadı. Cihazının bir ağa bağlı olduğundan emin ol.",error:"Ağ uç noktaları yüklenemedi.",hostLabel:"Host",portLabel:"Port",steps:{sameNetwork:"Telefonunu bu bilgisayarla aynı Wi-Fi ağına bağla.",scan:"Kamera uygulamasını aç ve aşağıdaki QR kodlarından birini tara.",login:"İlk girişte Pixcode hesabınla oturum aç."},external:{title:"Dışarıdan Erişim",description:"Pixcode'u yerel ağ dışından, internet üzerinden erişilebilir hale getir.",upnpTitle:"Router port yönlendirme (UPnP)",upnpDescription:"Router üzerinden tek tıkla port açma. Çoğu ev modeminde çalışır; CGNAT veya kurumsal ağda sessizce başarısız olur.",upnpEnable:"UPnP'yi Etkinleştir",upnpDisable:"UPnP'yi Kapat",upnpEnabled:"UPnP yönlendirmesi aktif",upnpUnsupported:"Bu ağda UPnP kullanılamıyor.",tunnelTitle:"Güvenli tünel",tunnelDescription:"UPnP yoksa cloudflared veya ngrok kur ve bir tünel başlat — otomatik algılayıp QR'ını burada gösteririz.",tunnelStart:"Tüneli Başlat",tunnelStop:"Tüneli Durdur",tunnelRunning:"Tünel çalışıyor",tunnelUnavailable:"Bu bilgisayarda tünel uygulaması bulunamadı.",externalUrl:"Dış URL"}},lbe={title:"Telegram",description:"Görev bitişi bildirimleri al ve ajanlarınla Telegram'dan konuş.",comingSoon:"Telegram entegrasyonu hazırlanıyor.",botToken:"Bot Token",botTokenPlaceholder:"123456:ABC-DEF…",botTokenHelp:"@BotFather ile bir bot oluştur ve token'ı buraya yapıştır.",saveToken:"Kaydet & Botu Başlat",saving:"Kaydediliyor…",botRunning:"Bot çalışıyor: @{{username}}",botStopped:"Bot durduruldu",stopBot:"Botu Durdur",removeToken:"Token'ı Kaldır",pairing:{title:"Telegram hesabınla eşleş",description:"Bota mesaj at ve sohbette bu 6 haneli kodu gir. Kod her 10 dakikada yenilenir.",code:"Eşleştirme Kodu",regenerate:"Yeni kod oluştur",verified:"Telegram hesabı eşleşti",notPaired:"Henüz Telegram hesabı eşleştirilmedi."},linkedAccount:{title:"Eşleşen Hesap",username:"@{{username}}",language:"Cevaplar: {{language}}",unpair:"Bağlantıyı Kes"},notifications:{title:"Bildirimler",description:"Ajan tamamlanma ve hata olaylarını Telegram sohbetine gönder.",enabled:"Açık",disabled:"Kapalı"},bridge:{title:"Sohbet Köprüsü",description:"Bota yazdığın mesajlar son oturumuna prompt olarak iletilir. Yanıtlar Telegram'a döner.",enabled:"Açık",disabled:"Kapalı"},control:{title:"Uzaktan Kontrol",description:"Telegram'ı ajanlar, orkestrasyon, sağlayıcı kurulumu ve çalışma durumları için tam Pixcode kontrol yüzeyi olarak kullan.",enabled:"Telegram kontrolünü etkinleştir",enabledDescription:"Açıkken eşleşmiş Telegram mesajları seçili projede ajan ve orkestrasyon işi başlatabilir.",progressMode:"İlerleme modu",progressModeDescription:"Telegram'ın ne kadar çalışma çıktısı göndereceğini seç.",progressModes:{final:"Sadece final cevap",steps:"Önemli adımlar ve final cevap",errors:"Hatalar ve final cevap",all:"Tüm görünür adım değişiklikleri"},selectedProject:"Seçili proje",selectedProvider:"Seçili sağlayıcı",selectedModel:"Seçili model",selectedWorkflow:"Seçili workflow"},router:{title:"AI Router",description:"Net Telegram niyetlerini Pixcode kontrollerine yönlendir, görev promptlarını seçili sağlayıcıya gönder.",enabled:"Hibrit router'ı etkinleştir",enabledDescription:"Komutlar ve net doğal dil niyetleri deterministik kalır; görev promptları aşağıdaki sağlayıcıya gider.",provider:"Sağlayıcı",providerDescription:"Bu sohbet her zaman tek sağlayıcı kullanmayacaksa Telegram'da seçili sağlayıcıda bırak.",useTelegramSelected:"Telegram'da seçili sağlayıcıyı kullan",model:"Model",modelDescription:"İsteğe bağlı override. Boş bırakınca Telegram'da seçili model kullanılır.",modelPlaceholder:"Telegram'da seçili modeli kullan",saveModel:"Kaydet",strictConfirmation:"Sıkı onay",strictConfirmationDescription:"Riskli yazma/çalıştırma işlemleri tek kullanımlık Telegram onayı gerektirir. v1'de her zaman açık."},errors:{invalidToken:"Telegram bu bot token'ını reddetti.",networkError:"Telegram sunucularına ulaşılamadı."}},cbe={title:"Bildirimler",description:"Hangi bildirim etkinliklerini alacağını kontrol et.",webPush:{title:"Web Push Bildirimleri",enable:"Push Bildirimlerini Etkinleştir",disable:"Push Bildirimlerini Devre Dışı Bırak",enabled:"Push bildirimleri etkin",loading:"Güncelleniyor...",unsupported:"Bu tarayıcıda push bildirimleri desteklenmiyor.",denied:"Push bildirimleri engellendi. Lütfen tarayıcı ayarlarından izin ver."},events:{title:"Etkinlik Türleri",actionRequired:"Aksiyon gerekli",stop:"Çalıştırma durduruldu",error:"Çalıştırma başarısız",updates:"Uygulama ve CLI güncellemeleri"}},dbe={darkMode:{label:"Koyu Mod",description:"Açık ve koyu temalar arasında geçiş yap"},colorTheme:{title:"Renk teması",palette:{label:"Vurgu paleti",description:"Butonlar, odak halkaları, navigasyon ve aktif durumlarda kullanılacak ürün rengini seç."},custom:{label:"Özel açık/koyu renkler",description:"Açık ve koyu mod için ayrı vurgu renkleri seç. Kullanmak için yukarıdan Custom seç.",light:"Açık",dark:"Koyu"}},projectSorting:{label:"Proje Sıralama",description:"Projelerin kenar çubuğunda nasıl sıralanacağı",alphabetical:"Alfabetik",recentActivity:"Son Etkinlik"},codeEditor:{title:"Kod Editörü",theme:{label:"Editör Teması",description:"Kod editörü için varsayılan tema"},wordWrap:{label:"Kelime Kaydırma",description:"Editörde kelime kaydırmayı varsayılan olarak etkinleştir"},showMinimap:{label:"Minimap'i Göster",description:"Diff görünümünde kolay gezinme için minimap göster"},lineNumbers:{label:"Satır Numaralarını Göster",description:"Editörde satır numaralarını göster"},fontSize:{label:"Yazı Tipi Boyutu",description:"Editör yazı tipi boyutu (piksel)"}}},ube={title:{add:"MCP Sunucusu Ekle",edit:"MCP Sunucusunu Düzenle"},importMode:{form:"Form Girdisi",json:"JSON İçe Aktar"},scope:{label:"Kapsam",userGlobal:"Kullanıcı (Genel)",projectLocal:"Proje (Yerel)",userDescription:"Kullanıcı kapsamı: Makinendeki tüm projelerde kullanılabilir",projectDescription:"Yerel kapsam: Yalnızca seçili projede kullanılabilir",cannotChange:"Mevcut bir sunucu düzenlenirken kapsam değiştirilemez"},fields:{serverName:"Sunucu Adı",transportType:"Taşıma Türü",command:"Komut",arguments:"Argümanlar (satır başına bir tane)",jsonConfig:"JSON Yapılandırması",url:"URL",envVars:"Ortam Değişkenleri (KEY=değer, satır başına bir tane)",headers:"Başlıklar (KEY=değer, satır başına bir tane)",selectProject:"Bir proje seç..."},placeholders:{serverName:"benim-sunucum"},validation:{missingType:"Zorunlu alan eksik: type",stdioRequiresCommand:"stdio türü command alanı gerektirir",httpRequiresUrl:"{{type}} türü url alanı gerektirir",invalidJson:"Geçersiz JSON formatı",jsonHelp:"MCP sunucu yapılandırmanı JSON formatında yapıştır. Örnek formatlar:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"Yapılandırma Detayları ({{configFile}} dosyasından)",projectPath:"Yol: {{path}}",actions:{cancel:"İptal",saving:"Kaydediliyor...",addServer:"Sunucu Ekle",updateServer:"Sunucuyu Güncelle"}},pbe={success:"Ayarlar başarıyla kaydedildi!",error:"Ayarlar kaydedilemedi",saving:"Kaydediliyor..."},mbe={save:"Ayarları Kaydet",cancel:"İptal"},hbe={title:"Git Yapılandırması",description:"Commit'ler için git kimliğini yapılandır. Bu ayarlar git config --global ile genel olarak uygulanacak",name:{label:"Git Adı",help:"Git commit'leri için adın"},email:{label:"Git E-postası",help:"Git commit'leri için e-postan"},actions:{save:"Yapılandırmayı Kaydet",saving:"Kaydediliyor..."},status:{success:"Başarıyla kaydedildi"}},fbe={title:"API Anahtarları",description:"Diğer uygulamalardan harici API'ye erişmek için API anahtarları üret.",newKey:{alertTitle:"⚠️ API Anahtarını Kaydet",alertMessage:"Bu anahtarı yalnızca bu sefer göreceksin. Güvenli bir yerde sakla.",iveSavedIt:"Kaydettim"},form:{placeholder:"API Anahtar Adı (ör. Production Sunucu)",createButton:"Oluştur",cancelButton:"İptal"},newButton:"Yeni API Anahtarı",empty:"Henüz API anahtarı oluşturulmamış.",list:{created:"Oluşturuldu:",lastUsed:"Son kullanım:"},confirmDelete:"Bu API anahtarını silmek istediğinden emin misin?",status:{active:"Aktif",inactive:"Pasif"},github:{title:"GitHub Token'ları",description:"Harici API üzerinden özel depoları klonlamak için GitHub Kişisel Erişim Token'ları ekle.",descriptionAlt:"Özel depoları klonlamak için GitHub Kişisel Erişim Token'ları ekle. Token'ları saklamadan API isteklerinde doğrudan da geçebilirsin.",addButton:"Token Ekle",form:{namePlaceholder:"Token Adı (ör. Kişisel Depolar)",tokenPlaceholder:"GitHub Kişisel Erişim Token'ı (ghp_...)",descriptionPlaceholder:"Açıklama (isteğe bağlı)",addButton:"Token Ekle",cancelButton:"İptal",howToCreate:"GitHub Kişisel Erişim Token'ı nasıl oluşturulur →"},empty:"Henüz GitHub token'ı eklenmemiş.",added:"Eklendi:",confirmDelete:"Bu GitHub token'ını silmek istediğinden emin misin?"},apiDocsLink:"API Dokümantasyonu",documentation:{title:"Harici API Dokümantasyonu",description:"Uygulamalarından Claude/Cursor oturumları tetiklemek için harici API'nin nasıl kullanılacağını öğren.",viewLink:"API Dokümantasyonunu Görüntüle →"},loading:"Yükleniyor...",version:{updateAvailable:"Güncelleme mevcut: v{{version}}"}},gbe={status:{title:"CLI durumu",notChecked:"Henüz kontrol edilmedi",lastChecked:"Son kontrol: {{value}}",updatesFound:"{{count}} güncelleme var",refresh:"CLI durumunu yenile"},config:{blurb:"{{name}} CLI'nin başlarken okuduğu dosyaları burada gör ve düzenle. Kaydet dediğinde doğrudan home dizinine yazılır.",refresh:"Yenile",save:"Kaydet",revert:"Geri Al",saved:"Kaydedildi",loading:"Yükleniyor…",notCreated:"yeni",readonly:"salt-okunur",noFiles:"Bu ajan için kayıtlı yapılandırma dosyası yok."},cliVersion:{title:"CLI sürümü",installed:"Kurulu: {{version}}",unknownInstalled:"Kurulu sürüm bilinmiyor",latest:"Güncel: {{version}}",checkedAt:"Kontrol: {{value}}",cached:"önbellek",updateAvailable:"Güncelleme var",refresh:"Yenile",skipped:{external_installer:"Harici kurulum",installed_version_unavailable:"Kurulu sürüm okunamadı",latest_version_unavailable:"Güncel sürüm okunamadı",not_installed:"Kurulu değil"}},authStatus:{checking:"Kontrol ediliyor...",connected:"Bağlı",notConnected:"Bağlı değil",disconnected:"Bağlantı kesildi",checkingAuth:"Kimlik doğrulama durumu kontrol ediliyor...",loggedInAs:"{{email}} olarak giriş yapıldı",authenticatedUser:"kimliği doğrulanmış kullanıcı"},account:{claude:{description:"Anthropic Claude AI asistanı"},cursor:{description:"Cursor AI destekli kod editörü"},codex:{description:"OpenAI Codex AI asistanı"},gemini:{description:"Google Gemini AI asistanı"},qwen:{description:"Alibaba Qwen Code CLI (Gemini CLI çatallaması)"},opencode:{description:"Çok sağlayıcılı terminal kod ajanı — Claude, OpenAI, Gemini veya yerel modeller"}},connectionStatus:"Bağlantı Durumu",login:{title:"Giriş Yap",reAuthenticate:"Yeniden Kimlik Doğrula",description:"AI özelliklerini etkinleştirmek için {{agent}} hesabına giriş yap",reAuthDescription:"Farklı bir hesapla giriş yap veya kimlik bilgilerini yenile",button:"Giriş Yap",reLoginButton:"Tekrar Giriş Yap"},error:"Hata: {{error}}",providersLabel:"Saglayicilar",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} kurulu degil",notInstalledDescription:"Pixcode bu hostta {{binary}} binary dosyasini bulamadi. Once kur, sonra giris yapmak icin geri don.",installing:"Kuruluyor...",installNow:"Simdi kur",copyCommand:"Kurulum komutunu kopyala",copy:"Kopyala",copied:"Kopyalandi",qwenDocs:"Qwen Code dokumanlarini ac",complete:"Kurulum tamamlandi",failed:"Kurulum basarisiz",output:"Cikti",cancel:"Iptal",dismiss:"Kapat",doneHint:"Yeni kurulumu kontrol etmek icin bu sekmeyi yenile veya Giris yapmayi dene.",continueToLogin:"Girise devam et",errors:{missingJobId:"Sunucu job id dondurmedi",failedToStart:"Kurulum baslatilamadi",unreadableStatus:"Kurulum okunamayan bir durumla bitti",streamLost:"Kurulum akisi koptu. Kurulum sunucuda hala calisiyor olabilir."}}},bbe={title:"İzin Ayarları",skipPermissions:{label:"İzin istemlerini atla (dikkatli kullan)",claudeDescription:"--dangerously-skip-permissions bayrağının eşdeğeri",cursorDescription:"Cursor CLI'daki -f bayrağının eşdeğeri",opencodeDescription:"OpenCode'daki --dangerously-skip-permissions bayrağının eşdeğeri"},allowedTools:{title:"İzin Verilen Araçlar",description:"İzin istemeden otomatik olarak izin verilen araçlar",placeholder:'ör. "Bash(git log:*)" veya "Write"',quickAdd:"Yaygın araçları hızlı ekle:",empty:"İzin verilen araç yapılandırılmamış"},blockedTools:{title:"Engellenen Araçlar",description:"İzin istemeden otomatik olarak engellenen araçlar",placeholder:'ör. "Bash(rm:*)"',empty:"Engellenen araç yapılandırılmamış"},allowedCommands:{title:"İzin Verilen Shell Komutları",description:"İzin istemeden otomatik olarak izin verilen shell komutları",placeholder:'ör. "Shell(ls)" veya "Shell(git status)"',quickAdd:"Yaygın komutları hızlı ekle:",empty:"İzin verilen komut yapılandırılmamış"},blockedCommands:{title:"Engellenen Shell Komutları",description:"Otomatik olarak engellenen shell komutları",placeholder:'ör. "Shell(rm -rf)" veya "Shell(sudo)"',empty:"Engellenen komut yapılandırılmamış"},toolExamples:{title:"Araç Desen Örnekleri:",bashGitLog:"- Tüm git log komutlarına izin ver",bashGitDiff:"- Tüm git diff komutlarına izin ver",write:"- Tüm Write aracı kullanımına izin ver",bashRm:"- Tüm rm komutlarını engelle (tehlikeli)"},shellExamples:{title:"Shell Komut Örnekleri:",ls:"- ls komutuna izin ver",gitStatus:"- git status'a izin ver",npmInstall:"- npm install'a izin ver",rmRf:"- Özyinelemeli silmeyi engelle"},opencodeAllowed:{title:"İzin Verilen Bash Desenleri",description:"OpenCode'un onay istemeden otomatik kabul ettiği bash komut desenleri",placeholder:'ör. "git *" veya "npm test"',quickAdd:"Yaygın desenleri hızlı ekle:",empty:"İzin verilen desen yok"},opencodeBlocked:{title:"Engellenen Bash Desenleri",description:"OpenCode'un her zaman reddettiği bash komut desenleri",placeholder:'ör. "rm -rf *" veya "sudo *"',empty:"Engellenen desen yok"},opencodeExamples:{title:"Desen Örnekleri:",gitAll:"- Tüm git komutlarına izin ver",gitPush:"- Sadece git push'u engelle",rmRf:"- Özyinelemeli silmeyi engelle",npm:"- Tüm npm komutlarına izin ver"},codex:{permissionMode:"İzin Modu",description:"Codex'in dosya değişiklikleri ve komut çalıştırmayı nasıl ele aldığını kontrol eder",modes:{default:{title:"Varsayılan",description:"Sadece güvenilir komutlar (ls, cat, grep, git status, vb.) otomatik çalışır. Diğer komutlar atlanır. Çalışma alanına yazabilir."},acceptEdits:{title:"Düzenlemeleri Kabul Et",description:"Tüm komutlar çalışma alanı içinde otomatik çalışır. Sandbox'lu çalıştırma ile tam otomatik mod."},bypassPermissions:{title:"İzinleri Atla",description:"Kısıtlama olmadan tam sistem erişimi. Tüm komutlar tam disk ve ağ erişimiyle otomatik çalışır. Dikkatli kullan."}},technicalDetails:"Teknik ayrıntılar",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted. Güvenilir komutlar: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (-exec olmadan), vb.",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never. Tüm komutlar proje dizini içinde otomatik çalışır.",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never. Tam sistem erişimi, yalnızca güvenilir ortamlarda kullan.",overrideNote:"Sohbet arayüzündeki mod düğmesini kullanarak bunu oturum başına geçersiz kılabilirsin."}},actions:{add:"Ekle"}},xbe={title:"MCP Sunucuları",description:{claude:"Model Context Protocol sunucuları Claude'a ek araçlar ve veri kaynakları sağlar",cursor:"Model Context Protocol sunucuları Cursor'a ek araçlar ve veri kaynakları sağlar",codex:"Model Context Protocol sunucuları Codex'e ek araçlar ve veri kaynakları sağlar"},addButton:"MCP Sunucusu Ekle",empty:"Yapılandırılmış MCP sunucusu yok",serverType:"Tür",scope:{local:"yerel",user:"kullanıcı"},config:{command:"Komut",url:"URL",args:"Argümanlar",environment:"Ortam"},tools:{title:"Araçlar",count:"({{count}}):",more:"+{{count}} tane daha"},actions:{edit:"Sunucuyu düzenle",delete:"Sunucuyu sil"},help:{title:"Codex MCP Hakkında",description:"Codex stdio tabanlı MCP sunucularını destekler. Codex'in yeteneklerini ek araçlar ve kaynaklarla genişleten sunucular ekleyebilirsin."}},vbe={updateCheckFrequency:"Güncelleme kontrol sıklığı",updateCheckFrequencyHint:"Pixcode, ortak IP'lerde GitHub limitine takılmamak için sürüm kontrollerini yerelde önbelleğe alır.",updateCheckFrequencyOptions:{"30m":"30 dakikada bir","6h":"6 saatte bir","12h":"12 saatte bir","24h":"Günlük","7d":"Haftalık",off:"Sadece manuel"},checkForUpdate:"Güncellemeleri kontrol et",checkingForUpdate:"Kontrol ediliyor...",updateFound:"Güncelleme bulundu",upToDate:"Güncel",lastChecked:"Son kontrol {{when}}",notCheckedYet:"Güncelleme kontrolü henüz tamamlanmadı",checkFailed:"kontrol başarısız veya rate limit nedeniyle gecikti",tagline:"Acik kaynak AI kodlama asistani arayuzu",checkFailedShort:"Kontrol basarisiz",starOnGitHub:"GitHub’da yildizla",docs:"Dokumanlar",hosted:{title:"Pixcode Hosted dene",description:"Ekip isbirligi, paylasilan MCP ayarlari, ortamlar arasi ayar senkronizasyonu ve yonetilen altyapi.",learnMore:"Daha fazla bilgi"},proFeatures:{title:"Pixcode Pro ozellikleri",syncSettings:{title:"Ayarlari senkronize et",description:"Tercihlerini, MCP ayarlarini ve temani tum ortamlarinda senkron tut."},teamManagement:{title:"Ekip yonetimi",description:"Ekibin icin coklu kullanici, rol tabanli erisim ve paylasilan projeler."}},license:"AGPL-3.0 lisanslidir",relativeTime:{justNow:"az once",secondsAgo:"{{count}} sn once",minutesAgo:"{{count}} dk once",hoursAgo:"{{count}} sa once"}},ybe={title:"Eklentiler",description:"Arayüzü özel eklentilerle genişlet. Git'ten yükle veya ~/.pixcode/plugins/ klasörüne bir dizin bırak.",installPlaceholder:"https://github.com/kullanici/benim-eklentim",installButton:"Yükle",installing:"Yükleniyor…",securityWarning:"Yalnızca kaynak kodunu incelediğin veya güvendiğin geliştiricilerin eklentilerini yükle.",scanningPlugins:"Eklentiler taranıyor…",noPluginsInstalled:"Yüklü eklenti yok",pullLatest:"Git'ten en güncelini çek",noGitRemote:"Git uzak sunucusu yok — güncelleme kullanılamıyor",uninstallPlugin:"Eklentiyi kaldır",confirmUninstall:"Onaylamak için tekrar tıkla",confirmUninstallMessage:"{{name}} kaldırılsın mı? Bu işlem geri alınamaz.",cancel:"İptal",remove:"Kaldır",updateFailed:"Güncelleme başarısız",installFailed:"Yükleme başarısız",uninstallFailed:"Kaldırma başarısız",toggleFailed:"Açıp kapama başarısız",starterPluginLabel:"Başlangıç Eklentisi",starter:"Başlangıç",docs:"Dokümanlar",starterPlugin:{name:"Proje İstatistikleri",badge:"başlangıç",description:"Projen için dosya sayıları, kod satırları, dosya türü dağılımı ve son etkinlik.",install:"Yükle"},terminalPlugin:{name:"Terminal",badge:"resmi",description:"Arayüzün içinde tam shell erişimiyle entegre terminal.",install:"Yükle"},morePlugins:"Daha Fazla",enable:"Etkinleştir",disable:"Devre Dışı Bırak",installAriaLabel:"Eklenti git deposu URL'si",tab:"sekme",runningStatus:"çalışıyor"},wbe={title:"Erisim",description:"Bu self-hosted Pixcode sunucusuna kimlerin nasil baglanacagini sec. Once ayni ag ile dene; uzaktan erisim gerekiyorsa guvenli tunnel, Tailscale veya kendi domainini kullan.",refresh:"Yenile",copy:"Kopyala",copied:"Kopyalandi",save:"Erisim yolunu kaydet",check:"URL kontrol et",qrAlt:"{{url}} icin QR",guide:{title:"Once baglanti yolunu sec",description:"Network terimi bilmen gerekmiyor. Baglanacak kisi hangi durumda ise onu sec, gosterilen linki kopyala veya telefondan QR kodu okut."},options:{sameNetwork:{title:"Ayni Wi-Fi/LAN",description:"Cihaz Pixcode sunucusuyla ayni modem, ofis agi veya LAN icindeyse bunu kullan."},secureTunnel:{title:"Gecici public link",description:"Cloudflare/ngrok tunnel baslat; Pixcode public URL ve QR kodu otomatik gostersin."},tailscale:{title:"Private ekip linki",description:"Public domain veya modem ayari istemeden ozel ekip erisimi icin Tailscale kullan."},customDomain:{title:"Kendi domainin",description:"Zaten HTTPS, reverse proxy veya Cloudflare Tunnel hostname varsa bunu kaydet."}},status:{ready:"Hazir",detecting:"Algilaniyor",guided:"Rehberli",configured:"Ayarlanmis",optional:"Istege bagli"},links:{title:"Kullanilabilir linkler",description:"Baglanacak cihaz veya ekip arkadasi icin dogru URLyi kopyala.",local:"Local",tailscale:"Tailscale private link",empty:"Henuz erisim linki algilanmadi."},local:{title:"Ayni ag erisimi",description:"Ilk deneme icin en kolay yol: ayni Wi-Fi veya LAN icinden baglan. Telefonda QR okut veya ayni agdaki ekip arkadasina linki kopyala.",thisDevice:"Sadece bu bilgisayar",loading:"Ayni ag linkleri algilaniyor...",empty:"LAN linki algilanmadi. Sunucunun aga bagli oldugundan emin olup yenile.",saveLabel:"Ayni ag erisimi",save:"Bu LAN linkini kaydet"},tunnel:{title:"Guvenli tunnel",description:"Sabit domain olmadan uzaktan erisim icin Pixcode cloudflared veya ngrok baslatip public URLyi burada gosterebilir.",secureLink:"Public link ve QR",help:"Baslata tikla. cloudflared veya ngrok kuruluysa Pixcode gecici HTTPS adresini ve QR kodunu otomatik olusturur.",running:"Tunnel calisiyor",start:"Tunnel baslat",stop:"Tunnel durdur",save:"Bu tunnel URLini kaydet",saveLabel:"Guvenli tunnel erisimi",qrLabel:"guvenli tunnel",installTitle:"Tunnel kurulumu gerekli",installNeeded:"Once cloudflared veya ngrok kur, sonra Tunnel baslat dugmesine tekrar bas."},tailscale:{title:"Tailscale private erisim",description:"Tailscale istege bagli bir private network uygulamasidir. Sunucuya ve kullanici cihazlarina kur, ayni ekibe giris yap; Pixcode private URLyi algilar.",save:"Bu Tailscale URLini kaydet",saveLabel:"Tailscale private erisim",openInstall:"Tailscale kurulumunu ac",steps:{installServer:"Pixcode calisan bilgisayara veya sunucuya Tailscale kur.",installUserDevice:"Pixcode acacak telefon, laptop veya ekip arkadasi cihazina Tailscale kur.",login:"Iki cihazda da ayni Tailscale hesabi veya ekibi ile giris yap.",refresh:"Buraya donup Yenileye bas; hazir olunca Pixcode private URLyi gosterir."},installCommand:"Kurulum komutu",installDevice:"Bu cihaza kur",signIn:"Tailscale ile giris yap",actionDone:"Tamamlandi",needsAttention:"Dikkat gerekiyor",openLogin:"Tailscale girisini ac"},advanced:{title:"Gelismis: sabit domain",description:"Kullanicilar icin kaydedilecek LAN URL, Tailscale URL, Cloudflare Tunnel hostname veya custom HTTPS domain zaten varsa bunu kullan.",badge:"Gelismis"},setup:{title:"Sabit erisim yolu",description:"Kullanicilarin kullanacagi URLyi kaydet. LAN adresi, Tailscale URL, Cloudflare Tunnel URL veya custom domain olabilir."},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"Custom domain"},fields:{label:"Etiket",url:"URL",port:"Hedef port",mode:"Mod"},health:{reachable:"Pixcode erisilebilir",unreachable:"Pixcode erisilemiyor"},configured:{title:"Kayitli erisim yollari",description:"Bu yollar adminlere, proje ortaklarina ve proje calisanlarina rollerine gore acilir.",empty:"Henuz kayitli erisim yolu yok.",noUrl:"URL yok",public:"public",private:"private"},team:{title:"Kullanicilar nasil baglanir",description:"Kullaniciyi Admin sisteminde olustur, Control Room icinde proje rolunu ata, sonra bu Access URLlerinden birini paylas. Atanmis projeye erismek icin global admin olmasi gerekmez."}},kbe={title:"Tanilar",description:"Saglayici sagligi, WebSocket durumu, bildirimler, aktif calismalar ve son hatalar.",refresh:"Yenile",copyBundle:"Paketi kopyala",copied:"Kopyalandi",runtime:"Calisma ortami",waiting:"Tanilar bekleniyor",websocket:"WebSocket",activeClients:"aktif istemci",recentErrors:"Son hatalar",redactedBundle:"gizlenmis destek paketi",providers:"Saglayicilar",notChecked:"kontrol edilmedi",emptyProviders:"Saglayici sagligi henuz toplanmadi.",status:{unknown:"bilinmiyor",loading:"yukleniyor",ok:"tamam",available:"kullanilabilir",configured:"yapilandirildi",missing:"eksik",failed:"basarisiz"}},Sbe={title:J0e,tabs:Q0e,account:ebe,mcp:tbe,appearance:nbe,actions:rbe,quickSettings:abe,terminalShortcuts:ibe,mainTabs:sbe,mobile:obe,telegram:lbe,notifications:cbe,appearanceSettings:dbe,mcpForm:ube,saveStatus:pbe,footerActions:mbe,git:hbe,apiKeys:fbe,agents:gbe,permissions:bbe,mcpServers:xbe,about:vbe,pluginSettings:ybe,access:wbe,diagnostics:kbe},Cbe={title:"Tekrar Hoş Geldin",description:"Kendi Pixcode hesabına giriş yap",username:"Kullanıcı Adı",password:"Şifre",submit:"Giriş Yap",loading:"Giriş yapılıyor...",errors:{invalidCredentials:"Kullanıcı adı veya şifre hatalı",requiredFields:"Lütfen tüm alanları doldur",networkError:"Ağ hatası. Lütfen tekrar dene."},placeholders:{username:"Kullanıcı adını gir",password:"Şifreni gir"}},Nbe={title:"Hesap Oluştur",username:"Kullanıcı Adı",password:"Şifre",confirmPassword:"Şifreyi Onayla",submit:"Hesabı Oluştur",loading:"Hesap oluşturuluyor...",errors:{passwordMismatch:"Şifreler eşleşmiyor",usernameTaken:"Bu kullanıcı adı zaten alınmış",weakPassword:"Şifre çok zayıf"}},Ebe={title:"Çıkış Yap",confirm:"Çıkış yapmak istediğinden emin misin?",button:"Çıkış Yap"},Tbe={login:Cbe,register:Nbe,logout:Ebe},Abe={title:"Projeler",newProject:"Yeni Proje",deleteProject:"Projeyi Kaldır",renameProject:"Projeyi Yeniden Adlandır",noProjects:"Proje bulunamadı",loadingProjects:"Projeler yükleniyor...",searchPlaceholder:"Projelerde ara...",projectNamePlaceholder:"Proje adı",starred:"Yıldızlı",all:"Tümü",untitledSession:"Adsız Oturum",newSession:"Yeni Oturum",codexSession:"Codex Oturumu",fetchingProjects:"Claude projelerin ve oturumların getiriliyor",projects:"proje",detectedFromHistory:"Geçmişten algİlandİ",noMatchingProjects:"Eşleşen proje yok",tryDifferentSearch:"Arama terimini değiştirmeyi dene",runClaudeCli:"Başlamak için bir proje dizininde Claude CLI çalıştır"},jbe={title:"Pixcode",subtitle:"AI kodlama asistanı arayüzü"},Rbe={title:"Oturumlar",newSession:"Yeni Oturum",deleteSession:"Oturumu Sil",renameSession:"Oturumu Yeniden Adlandır",noSessions:"Henüz oturum yok",loadingSessions:"Oturumlar yükleniyor...",unnamed:"Adsız",loading:"Yükleniyor...",showMore:"Daha fazla oturum göster",startToSee:"Burada görmek için yeni bir oturum başlat."},Ibe={section:"Orkestrasyon",fallbackTitle:"Orkestrasyon çalışması"},_be={viewEnvironments:"Ortamları Görüntüle",hideSidebar:"Kenar çubuğunu gizle",createProject:"Yeni proje oluştur",refresh:"Projeleri ve oturumları yenile (Ctrl+R)",renameProject:"Projeyi yeniden adlandır (F2)",deleteProject:"Projeyi kenar çubuğundan kaldır (Delete)",addToFavorites:"Favorilere ekle",removeFromFavorites:"Favorilerden çıkar",editSessionName:"Oturum adını elle düzenle",deleteSession:"Bu oturumu kalıcı olarak sil",save:"Kaydet",cancel:"İptal",clearSearch:"Aramayı temizle",sessionActions:"Oturum işlemleri",historyView:"Geçmiş görünümü",historyViewFlat:"Son konuşmalar",historyViewGrouped:"Projeye göre gruplanmış"},Lbe={chat:"Sohbet",files:"Dosyalar",git:"Git",terminal:"Terminal",tasks:"Görevler"},Pbe={refresh:"Yenile",settings:"Ayarlar",collapseAll:"Tümünü Daralt",expandAll:"Tümünü Genişlet",cancel:"İptal",save:"Kaydet",delete:"Sil",rename:"Yeniden Adlandır",joinCommunity:"Topluluğa Katıl",reportIssue:"Sorun Bildir",starOnGithub:"GitHub'da Yıldızla",starSession:"Yıldızla",unstarSession:"Yıldızı kaldır",controlRoom:"Kontrol Odası",controlRoomDescription:"Yönetim, erişim, çalışmalar"},Dbe={openSource:"Açık Kaynak"},Obe={active:"Aktif",inactive:"Pasif",thinking:"Düşünüyor...",error:"Hata",aborted:"Durduruldu",unknown:"Bilinmiyor"},Mbe={justNow:"Az önce",oneMinuteAgo:"1 dakika önce",minutesAgo:"{{count}} dakika önce",oneHourAgo:"1 saat önce",hoursAgo:"{{count}} saat önce",oneDayAgo:"1 gün önce",daysAgo:"{{count}} gün önce",buckets:{today:"Bugün",yesterday:"Dün",thisWeek:"Son 7 gün",thisMonth:"Son 30 gün",older:"Daha eski"}},Fbe={deleteConfirm:"Bunu silmek istediğinden emin misin?",renameSuccess:"Yeniden adlandırma başarılı",deleteSuccess:"Silme başarılı",errorOccurred:"Bir hata oluştu",deleteSessionConfirm:"Bu oturumu silmek istediğinden emin misin? Bu işlem geri alınamaz.",deleteProjectConfirm:"Bu proje kenar çubuğundan kaldırılsın mı? Proje dosyaların, bellek verilerin ve oturum verilerin silinmeyecek.",enterProjectPath:"Lütfen bir proje yolu gir",deleteSessionFailed:"Oturum silinemedi. Lütfen tekrar dene.",deleteSessionError:"Oturum silinirken hata oluştu. Lütfen tekrar dene.",renameSessionFailed:"Oturum yeniden adlandırılamadı. Lütfen tekrar dene.",renameSessionError:"Oturum yeniden adlandırılırken hata oluştu. Lütfen tekrar dene.",deleteProjectFailed:"Proje kaldırılamadı. Lütfen tekrar dene.",deleteProjectError:"Proje kaldırılırken hata oluştu. Lütfen tekrar dene.",createProjectFailed:"Proje oluşturulamadı. Lütfen tekrar dene.",createProjectError:"Proje oluşturulurken hata oluştu. Lütfen tekrar dene."},zbe={updateAvailable:"Güncelleme mevcut"},Bbe={modeProjects:"Projeler",modeConversations:"Konuşmalar",conversationsPlaceholder:"Konuşmalarda ara...",searching:"Aranıyor...",noResults:"Sonuç bulunamadı",tryDifferentQuery:"Farklı bir arama sorgusu dene",matches_one:"{{count}} eşleşme",matches_other:"{{count}} eşleşme",projectsScanned_one:"{{count}} proje tarandı",projectsScanned_other:"{{count}} proje tarandı"},Ube={deleteProject:"Projeyi Kaldır",deleteSession:"Oturumu Sil",confirmDelete:"Ne yapmak istersin:",sessionCount_one:"Bu proje {{count}} konuşma içeriyor.",sessionCount_other:"Bu proje {{count}} konuşma içeriyor.",removeFromSidebar:"Yalnızca kenar çubuğundan kaldır",deleteAllData:"Tüm veriyi kalıcı olarak sil",allConversationsDeleted:"Proje kenar çubuğundan kaldırılacak. Dosyaların, bellek verilerin ve oturum verilerin korunacak.",cannotUndo:"Projeyi sonra tekrar ekleyebilirsin."},$be={flat:"Son",grouped:"Projeye göre"},Hbe={projects:Abe,app:jbe,sessions:Rbe,orchestration:Ibe,tooltips:_be,navigation:Lbe,actions:Pbe,branding:Dbe,status:Obe,time:Mbe,messages:Fbe,version:zbe,search:Bbe,deleteConfirmation:Ube,historyView:$be},Gbe={copy:"Kopyala",copied:"Kopyalandı",copyCode:"Kodu kopyala"},Vbe={copy:"Mesajı kopyala",copied:"Mesaj kopyalandı",selectFormat:"Kopyalama biçimini seç",copyAsMarkdown:"Markdown olarak kopyala",copyAsText:"Metin olarak kopyala"},Wbe={user:"S",error:"Hata",tool:"Araç",claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code"},qbe={settings:"Araç Ayarları",error:"Araç Hatası",result:"Araç Sonucu",viewParams:"Girdi parametrelerini göster",viewRawParams:"Ham parametreleri göster",viewDiff:"Düzenleme diff'ini göster:",creatingFile:"Yeni dosya oluşturuluyor:",updatingTodo:"Yapılacaklar Listesi güncelleniyor",read:"Okundu",readFile:"Dosyayı oku",updateTodo:"Yapılacaklar listesini güncelle",readTodo:"Yapılacaklar listesini oku",searchResults:"sonuç"},Kbe={found:"{{count}} {{type}} bulundu",file:"dosya",files:"dosya",pattern:"desen:",in:"şurada:"},Ybe={updated:"Dosya başarıyla güncellendi",created:"Dosya başarıyla oluşturuldu",written:"Dosya başarıyla yazıldı",diff:"Diff",newFile:"Yeni Dosya",viewContent:"Dosya içeriğini göster",viewFullOutput:"Tam çıktıyı göster ({{count}} karakter)",contentDisplayed:"Dosya içeriği yukarıdaki diff görünümünde gösteriliyor"},Zbe={title:"Etkileşimli Prompt",waiting:"CLI'da yanıtın bekleniyor",instruction:"Lütfen Claude'un çalıştığı terminalde bir seçenek seç.",selectedOption:"✓ Claude {{number}} numaralı seçeneği seçti",instructionDetail:"CLI'da bu seçeneği ok tuşları veya numara girerek interaktif olarak seçebilirsin."},Xbe={title:"Düşünüyor...",emoji:"💭 Düşünüyor..."},Jbe={response:"JSON Yanıtı"},Qbe={grant:"{{tool}} için izin ver",added:"İzin eklendi",addTo:"{{entry}} İzin Verilen Araçlar listesine ekleniyor.",retry:"İzin kaydedildi. Aracı kullanmak için isteği tekrar dene.",error:"İzinler güncellenemedi. Lütfen tekrar dene.",openSettings:"Ayarları aç"},exe={updated:"Yapılacaklar listesi başarıyla güncellendi",current:"Mevcut Yapılacaklar Listesi"},txe={viewPlan:"📋 Uygulama planını göster",title:"Uygulama Planı"},nxe={resetAt:"Claude kullanım limitin doldu. Limitin **{{time}} {{timezone}}** — {{date}} tarihinde sıfırlanacak"},rxe={permissionMode:"İzin Modu",modes:{default:"Varsayılan Mod",acceptEdits:"Düzenlemeleri Kabul Et",bypassPermissions:"İzinleri Atla",plan:"Plan Modu"},descriptions:{default:"Sadece güvenilir komutlar (ls, cat, grep, git status, vb.) otomatik çalışır. Diğer komutlar atlanır. Çalışma alanına yazabilir.",acceptEdits:"Tüm komutlar çalışma alanı içinde otomatik çalışır. Sandbox'lu çalıştırma ile tam otomatik mod.",bypassPermissions:"Kısıtlama olmadan tam sistem erişimi. Tüm komutlar tam disk ve ağ erişimiyle otomatik çalışır. Dikkatli kullan.",plan:"Planlama modu — hiçbir komut çalıştırılmaz"},technicalDetails:"Teknik ayrıntılar"},axe={permissionMode:"Gemini İzin Modu",description:"Gemini CLI'ın işlem onaylarını nasıl yönettiğini kontrol et.",modes:{default:{title:"Standart (Onay İste)",description:"Gemini, komut çalıştırmadan, dosya yazmadan ve web kaynağı getirmeden önce onay ister."},autoEdit:{title:"Otomatik Düzenleme (Dosya Onaylarını Atla)",description:"Gemini dosya düzenlemelerini ve web getirmelerini otomatik onaylar, ama shell komutları için yine de onay ister."},yolo:{title:"YOLO (Tüm İzinleri Atla)",description:"Gemini tüm işlemleri onay almadan çalıştırır. Dikkatli kullan."}}},ixe={permissionMode:"Qwen İzin Modu",description:"Qwen Code'un işlem onaylarını nasıl yönettiğini kontrol et.",modes:{default:{title:"Standart (Onay İste)",description:"Qwen Code, komut çalıştırmadan, dosya yazmadan ve web kaynağı getirmeden önce onay ister."},autoEdit:{title:"Otomatik Düzenleme (Dosya Onaylarını Atla)",description:"Qwen Code dosya düzenlemelerini ve web getirmelerini otomatik onaylar, ama shell komutları için yine de onay ister."},yolo:{title:"YOLO (Tüm İzinleri Atla)",description:"Qwen Code tüm işlemleri onay almadan çalıştırır. Dikkatli kullan."}}},sxe={placeholder:"Komutlar için /, dosyalar için @ yaz ya da {{provider}}'a her şeyi sor...",placeholderDefault:"Mesajını yaz...",disabled:"Girdi devre dışı",attachFiles:"Dosya ekle",attachImages:"Resim ekle",send:"Gönder",stop:"Durdur",clickToChangeMode:"İzin modunu değiştirmek için tıkla (veya girdide Tab tuşuna bas)",showAllCommands:"Tüm komutları göster",clearInput:"Girdiyi temizle",scrollToBottom:"En alta git"},oxe={selector:{title:"Düşünme Modu",description:"Uzatılmış düşünme, Claude'a alternatifleri değerlendirmek için daha fazla zaman verir",active:"Aktif",tip:"Daha yüksek düşünme modları daha fazla zaman alır ama daha kapsamlı analiz sağlar"},modes:{none:{name:"Standart",description:"Normal Claude yanıtı",prefix:""},think:{name:"Düşün",description:"Temel uzatılmış düşünme",prefix:"think"},thinkHard:{name:"Daha Fazla Düşün",description:"Daha kapsamlı değerlendirme",prefix:"think hard"},thinkHarder:{name:"Derin Düşün",description:"Alternatiflerle derin analiz",prefix:"think harder"},ultrathink:{name:"Ultra Düşün",description:"Maksimum düşünme bütçesi",prefix:"ultrathink"}},buttonTitle:"Düşünme modu: {{mode}}"},lxe={title:"AI Asistanını Seç",description:"Yeni bir konuşma başlatmak için bir sağlayıcı seç",selectModel:"Model Seç",statusUnavailable:"Durum alınamadı",statusRetryHint:"Bu CLI kontrol edilemedi. Yeniden denemek için dokun.",retryStatus:"Durumu yenile",providerInfo:{anthropic:"Anthropic tarafından",openai:"OpenAI tarafından",cursorEditor:"AI Kod Editörü",google:"Google tarafından"},readyPrompt:{claude:"Claude'u {{model}} ile kullanmaya hazır. Mesajını aşağıya yazmaya başla.",cursor:"Cursor'ı {{model}} ile kullanmaya hazır. Mesajını aşağıya yazmaya başla.",codex:"Codex'i {{model}} ile kullanmaya hazır. Mesajını aşağıya yazmaya başla.",gemini:"Gemini'yi {{model}} ile kullanmaya hazır. Mesajını aşağıya yazmaya başla.",default:"Başlamak için yukarıdan bir sağlayıcı seç"}},cxe={continue:{title:"Konuşmana devam et",description:"Kodun hakkında soru sor, değişiklik iste veya geliştirme görevlerinde yardım al"},loading:{olderMessages:"Eski mesajlar yükleniyor...",sessionMessages:"Oturum mesajları yükleniyor..."},messages:{showingOf:"{{total}} mesajdan {{shown}} tanesi gösteriliyor",scrollToLoad:"Daha fazlasını yüklemek için yukarı kaydır",showingLast:"Son {{count}} mesaj gösteriliyor ({{total}} toplam)",loadEarlier:"Önceki mesajları yükle",loadAll:"Tüm mesajları yükle",loadingAll:"Tüm mesajlar yükleniyor...",allLoaded:"Tüm mesajlar yüklendi",perfWarning:'Tüm mesajlar yüklendi — kaydırma yavaşlayabilir. Performansı geri getirmek için "En alta git"e tıkla.'}},dxe={selectProject:{title:"Proje Seç",description:"O dizinde etkileşimli shell açmak için bir proje seç"},status:{newSession:"Yeni Oturum",initializing:"Başlatılıyor...",restarting:"Yeniden başlatılıyor..."},actions:{disconnect:"Bağlantıyı Kes",disconnectTitle:"Shell bağlantısını kes",restart:"Yeniden Başlat",restartTitle:"Shell'i yeniden başlat (önce bağlantıyı kes)",connect:"Shell'de Devam Et",connectTitle:"Shell'e bağlan"},loading:"Terminal yükleniyor...",connecting:"Shell'e bağlanılıyor...",startSession:"Yeni bir Claude oturumu başlat",startProviderSession:"Yeni bir {{provider}} oturumu baslat",resumeSession:"Oturuma devam et: {{displayName}}...",runCommand:"{{projectName}} içinde {{command}} çalıştır",startCli:"{{projectName}} içinde Claude CLI başlatılıyor",startProviderCli:"{{projectName}} icinde {{provider}} baslatiliyor",defaultCommand:"komut"},uxe={actions:{thinking:"Düşünüyor",processing:"İşliyor",analyzing:"Analiz ediyor",working:"Çalışıyor",computing:"Hesaplıyor",reasoning:"Mantık yürütüyor"},state:{live:"Canlı",paused:"Duraklatıldı"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}d {{seconds}}s",label:"{{time}} geçti",startingNow:"Şimdi başlıyor"},controls:{stopGeneration:"Üretmeyi Durdur",pressEscToStop:"Durdurmak için istediğin zaman Esc'ye bas"},providers:{assistant:"Asistan"}},pxe={startChatWithProvider:"{{provider}} ile sohbet etmeye başlamak için bir proje seç"},mxe={nextTaskPrompt:"Sonraki görevi başlat"},hxe={codeBlock:Gbe,copyMessage:Vbe,messageTypes:Wbe,tools:qbe,search:Kbe,fileOperations:Ybe,interactive:Zbe,thinking:Xbe,json:Jbe,permissions:Qbe,todo:exe,plan:txe,usageLimit:nxe,codex:rxe,gemini:axe,qwen:ixe,input:sxe,thinkingMode:oxe,providerSelection:lxe,session:cxe,shell:dxe,claudeStatus:uxe,projectSelection:pxe,tasks:mxe},fxe={changes:"değişiklik",previousChange:"Önceki değişiklik",nextChange:"Sonraki değişiklik",hideDiff:"Diff vurgusunu gizle",showDiff:"Diff vurgusunu göster",settings:"Editör Ayarları",collapse:"Editörü daralt",expand:"Editörü tüm genişliğe aç"},gxe="{{fileName}} yükleniyor...",bxe={showingChanges:"Diff"},xxe={download:"Dosyayı indir",save:"Kaydet",saving:"Kaydediliyor...",saved:"Kaydedildi!",exitFullscreen:"Tam ekrandan çık",fullscreen:"Tam ekran",close:"Kapat",previewMarkdown:"Markdown önizle",editMarkdown:"Markdown düzenle"},vxe={lines:"Satır:",characters:"Karakter:",shortcuts:"Kaydetmek için Ctrl+S • Kapatmak için Esc"},yxe={title:"Binary Dosya",message:'"{{fileName}}" dosyası binary olduğu için metin editöründe gösterilemez.'},wxe={toolbar:fxe,loading:gxe,header:bxe,actions:xxe,footer:vxe,binaryFile:yxe},kxe={title:"TaskMaster AI yapılandırılmamış",description:"TaskMaster, karmaşık projeleri AI destekli yardımla yönetilebilir görevlere böler",whatIsTitle:"🎯 TaskMaster nedir?",features:{aiPowered:"AI Destekli Görev Yönetimi: Karmaşık projeleri yönetilebilir alt görevlere böl",prdTemplates:"PRD Şablonları: Ürün Gereksinim Belgelerinden görev üret",dependencyTracking:"Bağımlılık Takibi: Görev ilişkilerini ve çalıştırma sırasını anla",progressVisualization:"İlerleme Görselleştirme: Kanban panoları ve detaylı görev analizleri",cliIntegration:"CLI Entegrasyonu: İleri seviye iş akışları için taskmaster komutlarını kullan"},initializeButton:"TaskMaster AI'yi Başlat"},Sxe={title:"TaskMaster'a Başlarken",subtitle:"TaskMaster hazır! Sıradaki adımların:",steps:{createPRD:{title:"Ürün Gereksinim Belgesi (PRD) oluştur",description:"Proje fikrini konuş ve ne inşa etmek istediğini anlatan bir PRD yaz.",addButton:"PRD Ekle",existingPRDs:"Mevcut PRD'ler:"},generateTasks:{title:"PRD'den Görev Üret",description:"PRD'n hazır olduğunda AI asistanına ayrıştırmasını söyle; TaskMaster bunu otomatik olarak uygulama detaylarıyla yönetilebilir görevlere bölecek."},analyzeTasks:{title:"Görevleri Analiz Et ve Genişlet",description:"AI asistanına görev karmaşıklığını analiz etmesini ve uygulamayı kolaylaştırmak için detaylı alt görevlere ayırmasını söyle."},startBuilding:{title:"İnşaya Başla",description:"AI asistanına görevler üzerinde çalışmaya başlamasını, durumlarını güncellemesini ve proje geliştikçe yeni görevler eklemesini söyle."}},tip:"💡 İpucu: TaskMaster'ın AI destekli görev üretiminden en iyi şekilde faydalanmak için bir PRD ile başla"},Cxe={title:"TaskMaster Kurulumu",subtitle:"{{projectName}} için interaktif CLI",willStart:"TaskMaster başlatma otomatik olarak başlayacak",completed:"TaskMaster kurulumu tamamlandı! Bu pencereyi kapatabilirsin.",closeButton:"Kapat",closeContinueButton:"Kapat ve Devam Et"},Nxe={title:"TaskMaster'a Başlarken",subtitle:"Verimli görev yönetimi için rehberin",examples:{parsePRD:`💬 Örnek:
|
|
834
|
+
"Bitte füge eine neue Aufgabe hinzu, um Benutzerprofilbild-Uploads mit Cloudinary zu implementieren, und recherchiere den besten Ansatz."`},moreExamples:"Weitere Beispiele und Verwendungsmuster anzeigen →",proTips:{title:"💡 Profi-Tipps",search:"Verwende die Suchleiste, um bestimmte Aufgaben schnell zu finden",views:"Wechsle mit den Ansichts-Umschaltern zwischen Kanban-, Listen- und Rasteransicht",filters:"Verwende Filter, um dich auf bestimmte Aufgabenstatus oder Prioritäten zu konzentrieren",details:"Klicke auf eine Aufgabe, um detaillierte Informationen anzuzeigen und Unteraufgaben zu verwalten"},learnMore:{title:"📚 Mehr erfahren",description:"TaskMaster AI ist ein fortschrittliches Aufgabenmanagementsystem für Entwickler:innen. Dokumentation, Beispiele und Möglichkeiten zur Mitarbeit am Projekt.",githubButton:"Auf GitHub ansehen"}},k0e={placeholder:"Aufgaben suchen..."},S0e={button:"Filter",status:"Status",priority:"Priorität",sortBy:"Sortieren nach",allStatuses:"Alle Status",allPriorities:"Alle Prioritäten",showing:"{{filtered}} von {{total}} Aufgaben werden angezeigt",clearFilters:"Filter zurücksetzen"},C0e={id:"ID",status:"Status",priority:"Priorität",idAsc:"ID (aufsteigend)",idDesc:"ID (absteigend)",titleAsc:"Titel (A-Z)",titleDesc:"Titel (Z-A)",statusAsc:"Status (Ausstehend zuerst)",statusDesc:"Status (Erledigt zuerst)",priorityAsc:"Priorität (Hoch zuerst)",priorityDesc:"Priorität (Niedrig zuerst)"},N0e={kanban:"Kanban-Ansicht",list:"Listenansicht",grid:"Rasteransicht"},E0e={pending:"📋 Ausstehend",inProgress:"🚀 In Bearbeitung",done:"✅ Erledigt",blocked:"🚫 Blockiert",deferred:"⏳ Zurückgestellt",cancelled:"❌ Abgebrochen",noTasksYet:"Noch keine Aufgaben",tasksWillAppear:"Aufgaben werden hier angezeigt",moveTasksHere:"Aufgaben hierher verschieben, wenn sie gestartet werden",completedTasksHere:"Abgeschlossene Aufgaben erscheinen hier",statusTasksHere:"Aufgaben mit diesem Status werden hier angezeigt"},T0e={help:"TaskMaster-Leitfaden für Erste Schritte",prds:"PRDs",addPRD:"PRD hinzufügen",addTask:"Aufgabe hinzufügen",createNewPRD:"Neues PRD erstellen",prdsAvailable:"{{count}} PRD(s) verfügbar"},A0e={modified:"Geändert: {{date}}"},j0e={pending:"Ausstehend","in-progress":"In Bearbeitung",done:"Erledigt",blocked:"Blockiert",deferred:"Zurückgestellt",cancelled:"Abgebrochen"},R0e={high:"Hoch",medium:"Mittel",low:"Niedrig"},I0e={title:"Keine Aufgaben entsprechen deinen Filtern",description:"Versuche, deine Such- oder Filterkriterien anzupassen."},_0e={notConfigured:x0e,gettingStarted:v0e,setupModal:y0e,helpGuide:w0e,search:k0e,filters:S0e,sort:C0e,views:N0e,kanban:E0e,buttons:T0e,prd:A0e,statuses:j0e,priorities:R0e,noMatchingTasks:I0e},L0e={save:"Kaydet",cancel:"İptal",delete:"Sil",create:"Oluştur",edit:"Düzenle",close:"Kapat",confirm:"Onayla",submit:"Gönder",retry:"Tekrar Dene",refresh:"Yenile",search:"Ara",clear:"Temizle",copy:"Kopyala",download:"İndir",upload:"Yükle",browse:"Gözat"},P0e={chat:"Sohbet",shell:"Shell",files:"Dosyalar",git:"Kaynak Kontrolü",changes:"Değişiklikler",liveView:"Canlı Görünüm",tasks:"Görevler",remote:"Uzaktan",controlRoom:"Kontrol",orchestration:"Orkestrasyon"},D0e={loading:"Yükleniyor...",success:"Başarılı",error:"Hata",failed:"Başarısız",pending:"Beklemede",completed:"Tamamlandı",inProgress:"Sürüyor"},O0e={savedSuccessfully:"Başarıyla kaydedildi",deletedSuccessfully:"Başarıyla silindi",updatedSuccessfully:"Başarıyla güncellendi",operationFailed:"İşlem başarısız",networkError:"Ağ hatası. Lütfen bağlantını kontrol et.",unauthorized:"Yetkisiz erişim. Lütfen giriş yap.",notFound:"Bulunamadı",invalidInput:"Geçersiz girdi",requiredField:"Bu alan zorunlu",unknownError:"Bilinmeyen bir hata oluştu"},M0e={settings:"Ayarlar",home:"Ana Sayfa",back:"Geri",next:"İleri",previous:"Önceki",logout:"Çıkış Yap"},F0e={language:"Dil",theme:"Tema",darkMode:"Koyu Mod",lightMode:"Açık Mod",name:"İsim",description:"Açıklama",enabled:"Etkin",disabled:"Devre Dışı",optional:"İsteğe Bağlı",version:"Sürüm",select:"Seç",selectAll:"Tümünü Seç",deselectAll:"Tümünün Seçimini Kaldır"},z0e={justNow:"Az önce",minutesAgo:"{{count}} dakika önce",hoursAgo:"{{count}} saat önce",daysAgo:"{{count}} gün önce",yesterday:"Dün"},B0e={newFile:"Yeni Dosya",newFolder:"Yeni Klasör",rename:"Yeniden Adlandır",move:"Taşı",copyPath:"Yolu Kopyala",openInEditor:"Editörde Aç"},U0e={loading:"Pixcode Yükleniyor",settingUpWorkspace:"Çalışma alanın hazırlanıyor...",chooseProject:"Projeni Seç",selectProjectDescription:"Claude ile kodlamaya başlamak için kenar çubuğundan bir proje seç. Her proje kendi sohbet oturumlarını ve dosya geçmişini içerir.",tip:"İpucu",createProjectMobile:"Projelere erişmek için yukarıdaki menü düğmesine dokun",createProjectDesktop:"Kenar çubuğundaki klasör simgesine tıklayarak yeni bir proje oluştur",newSession:"Yeni Oturum",untitledSession:"Adsız Oturum",projectFiles:"Proje Dosyaları",landing:{title:"Pixcode çalışma alanını başlat",description:"Bir proje seçebilir, yeni sohbet açabilir veya tek hedefle Orkestrasyon sistemini başlatabilirsin. Orkestrasyon; seçtiğin CLI ajanlarını yönetir, adımları gösterir ve çıkan hataları saklamadan ekrana taşır.",startOrchestration:"Orkestrasyon başlat",startOrchestrationDescription:"Otomatik proje açılır, ajan seçimi ve çalışma geçmişiyle Orkestrasyon ekranına geçilir.",startChat:"Yeni sohbet aç",startChatDescription:"Klasör otomatik oluşturulur ve normal chat ekranında tek ajanla ilerlersin.",sidebarHint:"Kenar çubuğundan mevcut bir proje seçersen sohbet geçmişi, dosyalar, git durumu, task sistemi ve orkestrasyon aynı ana ekranda kalır.",createProject:"Yeni Proje Oluştur",createProjectDescription:"Mevcut çalışma alanını ekle veya klasör oluştur; ardından kodlamaya başlamak için CLI seçim ekranına geç."}},$0e={title:"Orkestrasyon",subtitle:"Pixcode, {{project}} icin yerel kontrolleri, testleri, terminal islerini ve proje operasyonlarini koordine edebilir.",refresh:"Yenile",goal:"Hedef",goalPlaceholder:"Örn: Auth ekranını tek port dağıtıma göre düzelt, hataları yakala, lint ve typecheck ile doğrula.",mode:"Çalışma modu",systemPlan:"Sistem planı",noMode:"Mod seçilmedi",loadingPlan:"Ajan düzeni yükleniyor.",start:"Takımı başlat",starting:"Başlatılıyor",stop:"Takımı durdur",stopping:"Durduruluyor",cancelFailed:"Workflow durdurulamadı.",linkedTask:"Bağlı görev",replayRun:"Replay",replaying:"Replay başlıyor",approveReplay:"Replay onayla",replayApprovalRequired:"Önceki shell, network veya dosya yazma aktivitesi olan adımı tekrar çalıştırmadan önce replay onayı gerekiyor.",replayFailed:"Workflow replay başlatılamadı.",needAgent:"En az bir CLI çalışanını açmalısın.",needRoles:"Bu mod için şu rol(ler)e en az bir açık ajan atamalısın: {{roles}}.",startFailed:"Workflow başlatılamadı.",quickPrompts:{label:"Hızlı prompt:",liveTrading:{label:"8024 canlı trading ekranı",prompt:"merhaba senden ufak bir proje yapmanı sonrasında bu projeyi 8024 portunda çalıştırmanı istiyorum. İstediğim proje ise binance ile bağlantılı fapi bağlantısıyla tradingview görünümünde güzel bir tasarım yap tradingview chartı ve solda yıldızlama sistemi olsun. işleri bölüştür mantıklı şekilde yap"}},cliControl:"CLI ekip kontrolu",enabledCount:"{{count}} açık",enabled:"Açık",disabled:"Kapalı",history:"Geçmiş",emptyHistory:"Henüz çalışma yok. Bir hedef yazıp ajanları başlat.",steps:"{{done}}/{{total}} adım",notSelected:"Henüz çalışma seçilmedi",notSelectedDescription:"Soldan bir geçmiş kaydı seç veya yeni bir hedef başlat. Ajan mesajları, hatalar, değişiklik özeti ve önizleme çıktıları burada görünür.",loadFailed:"Çalışma detayı alınamadı.",loadingRun:"Çalışma yükleniyor...",traceTimeline:"Trace zaman çizelgesi",traceFilters:"Filtreler",traceAll:"Hepsi",traceActor:"Aktör",traceProvider:"Provider",traceType:"Tür",traceSeverity:"Seviye",traceDuration:"{{duration}} sürdü",traceEmpty:"Geçerli filtrelerle eşleşen trace olayı yok.",traceLoadFailed:"Trace zaman çizelgesi alınamadı.",traceTypes:{run:"Çalışma",node:"Adım",provider:"Provider",message:"Mesaj",artifact:"Artifact",file:"Dosya değişikliği",permission_policy:"İzin politikası",error:"Hata"},traceSeverityLevels:{info:"Bilgi",warning:"Uyarı",error:"Hata"},teamHistory:"Takım geçmişi",permissionApprovalsPending:"{{count}} izin onayı bekliyor",agentSteps:"Ajan adımları",changeSummary:"Değişiklik özeti",noChangeSummary:"Final özet henüz oluşmadı. Ajanlar tamamlandığında burada okunabilir Markdown özeti görünecek.",prepareTeamFromReport:"Bu raporla ajan takımı hazırla",prepareTeamTitle:"Ajan takımı prompt'u hazırla",prepareTeamDescription:"Tartışma çıktısı yeni ajan takımı prompt'una dönüştürüldü. Düzenleyip Agent Team moduna taşıyabilirsin.",usePreparedPrompt:"Prompt'u kullan",reportToPromptPrefix:"Aşağıdaki tartışma/karar raporuna göre bir ajan takımı hazırla ve uygula. İhtiyaçları görevlerine ayır, mevcut CLI ajanlarına mantıklı assignment öner ve kullanıcı onayıyla çalışmaya başla.",generatedSummaryTitle:"Otomatik çalışma özeti",summaryStatus:"Genel durum",summarySteps:"Tamamlanan adım",summaryFailures:"Hatalı adım",summaryCanceled:"İptal edilen adım",summaryDiffs:"Değişiklik/diff çıktısı",summaryPreviews:"Önizleme çıktısı",summaryErrorPrefix:"Hata",assignedWork:"Atanan işler",autoAssigned:"Otomatik / koordinatör belirler",noStepOutput:"Adım çıktısı yok.",agentMessages:"Ajan mesajları",noAgentMessages:"Bu ajan henüz mesaj üretmedi. Çalışma başarısızsa üstte gerçek CLI hatası görünür.",outputs:"Çıktılar",noOutputs:"Değişiklik özeti, önizleme veya komut çıktısı henüz yok.",open:"Aç",artifact:{fileDiff:"Değişiklik özeti",previewUrl:"Önizleme",commandOutput:"Komut çıktısı",handoff:"Handoff artifact"},role:{user:"Kullanıcı",agent:"Ajan"},status:{queued:"Bekliyor",running:"Çalışıyor",completed:"Tamamlandı",failed:"Hata",canceled:"İptal",skipped:"Atlandı"},nodes:{codex_review:"Codex incelemesi",gemini_review:"Gemini incelemesi",claude_review:"Claude incelemesi",claude_code_review:"Claude incelemesi",cursor_review:"Cursor incelemesi",aggregate:"Sonuç toparlama",architect:"Planlama",implement:"Uygulama",review:"İnceleme",proposal:"Öneri",critique:"Eleştiri",response:"Yanıt",judge:"Karar",coordinator:"Koordinatör",final_report:"Final raporu"},stages:{coordinator:"Koordinatör",handoff:"Handoff",backend:"Backend",frontend:"Frontend",implementation:"Uygulama",review:"Review",repair:"Düzeltme",proposal:"Öneri",critique:"Eleştiri",response:"Yanıt",decision:"Karar",report:"Rapor",fallback:"Yedek",final_report:"Final raporu"},workflows:{multi_model_review:{name:"Çoklu model incelemesi",description:"Seçili CLI ajanları aynı hedefi ayrı ayrı inceler, sonra açık olan bir ajan sonucu toparlar."},sequential_handoff:{name:"Sıralı iş bölümü",description:"Ajanlar sırayla planlar, uygular ve inceler. Kapalı CLI adımları atlanır."},adversarial_debate:{name:"Karar tartışması",description:"Ajanlar çözüm önerir, eleştirir, yanıtlar ve nihai kararı üretir."},agent_team:{name:"Ajan takımı",description:"Koordinatör hedefi ve açık CLI kopyalarını okur, işi dağıtır ve sonucu toplar."}},adapters:{"claude-code":{label:"Claude Code",role:"CLI çalışanı"},cursor:{label:"Cursor",role:"CLI çalışanı"},codex:{label:"Codex",role:"CLI çalışanı"},gemini:{label:"Gemini",role:"CLI çalışanı"},qwen:{label:"Qwen Code",role:"CLI çalışanı"},opencode:{label:"OpenCode",role:"CLI çalışanı"}},activeCount:"{{active}}/{{total}} aktif",teamHint:"Her satır bir CLI çalışanıdır. Birden fazla Claude, Codex, Cursor, Gemini, Qwen veya OpenCode ekleyebilir, her birine ayrı görev yazabilirsin.",parallelLimit:"Paralel sınır",fallbackAgent:"Yedek CLI",noFallbackAgent:"Otomatik yedek yok",fallbackAgentHint:"Bir CLI adımı hata verirse Pixcode aynı adımı bu yedek ajanla yeniden dener.",agentRole:"Safha",agentModel:"Model",agentRoles:{auto:"Otomatik",backend:"Backend",frontend:"Frontend",review:"Test / review",implementation:"Uygulama",proposal:"Öneri",critique:"Eleştiri",response:"Yanıt",decision:"Karar / rapor",report:"Rapor",custom:"Özel"},customRolePlaceholder:"Örn: Güvenlik, Mobil UX, DB mimarisi",roleHints:{default:"Boş bırakırsan koordinatör bu ajana hedefe göre iş verir.",agent_team:"Backend, frontend ve review gibi safhaları seçebilir veya otomatik bırakabilirsin.",multi_model_review:"Açık ajanlar inceleme yapar; rapor rolü seçilirse final özeti o ajan toplar.",sequential_handoff:"Ajanlar seçtiğin sırayla çalışır; görev metni her adımın sınırını belirler.",adversarial_debate:"Karar tartışmasında safha seçmek isteğe bağlıdır; boş kalırsa sistem seçili ajanları sırayla Öneri, Eleştiri ve gerekirse Yanıt olarak dağıtır."},addAgent:"{{agent}} ekle",soloAgent:"Sadece {{agent}} ile çalış",soloAgentShort:"Tek",duplicateAgent:"{{agent}} çoğalt",removeAgent:"{{agent}} kaldır",assignment:"Görev",assignmentPlaceholder:"İsteğe bağlı: bu çalışanın ne yapacağını net yaz. Boş kalırsa koordinatör hedefe göre atar.",agentInstance:"{{name}} #{{number}}",taskTitle:"Görev",taskTitlePlaceholder:"Özelliği uygula",taskDescription:"Açıklama",taskDescriptionPlaceholder:"Kapsam, sınırlar, beklenen çıktı",addTask:"Ekle",runTask:"Çalıştır",cancelTask:"İptal",dispatchTask:"Görevi ata",adapter:"Adaptör",isolation:"Çalışma alanı",dispatch:"Ata",auto:"Otomatik",cliSettings:"CLI ayarları",waitingForStream:"Akış bekleniyor...",workflow:"Workflow",templates:"Şablonlar",noTemplate:"Şablon yok",templateHint:"Başlatmadan önce workflow, ajan rolleri ve kabul kriterlerini doldurmak için bir başlangıç şablonu seç.",input:"Girdi",taskStates:{todo:"Yapılacak",in_progress:"Devam ediyor",in_review:"İncelemede",done:"Bitti",failed:"Hatalı",canceled:"İptal edildi"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},workspaceTarget:"Hedef çalışma alanı",workspaceTargets:{selectedProject:"Seçili proje",pixcodeApp:"Pixcode sistemi",custom:"Özel path"},customWorkspacePlaceholder:"/proje/yolu",workspaceTargetHint:"Ajanlar şu dizinde çalışacak: {{path}}",autoDetect:"otomatik algı",needWorkspacePath:"Özel çalışma alanı path bilgisini gir.",quickWorkspaceCheck:"Workspace kontrolu"},H0e={loading:"Dosyalar yükleniyor...",files:"Dosyalar",simpleView:"Basit görünüm",compactView:"Kompakt görünüm",detailedView:"Detaylı görünüm",searchPlaceholder:"Dosya ve klasörlerde ara...",clearSearch:"Aramayı temizle",name:"İsim",size:"Boyut",modified:"Değiştirilme",permissions:"İzinler",noFilesFound:"Dosya bulunamadı",checkProjectPath:"Proje yolunun erişilebilir olduğunu kontrol et",noMatchesFound:"Eşleşme bulunamadı",tryDifferentSearch:"Farklı bir arama terimi dene veya aramayı temizle",justNow:"az önce",minAgo:"{{count}} dakika önce",hoursAgo:"{{count}} saat önce",daysAgo:"{{count}} gün önce",newFile:"Yeni Dosya (Cmd+N)",newFolder:"Yeni Klasör (Cmd+Shift+N)",refresh:"Yenile",collapseAll:"Tümünü Daralt",context:{rename:"Yeniden Adlandır",delete:"Sil",copyPath:"Yolu Kopyala",download:"İndir",newFile:"Yeni Dosya",newFolder:"Yeni Klasör",refresh:"Yenile",menuLabel:"Dosya bağlam menüsü",loading:"Yükleniyor..."}},G0e={title:"Yeni Proje Oluştur",steps:{type:"Tür",configure:"Yapılandır",confirm:"Onayla"},step1:{question:"Zaten bir çalışma alanın var mı, yoksa yeni bir tane mi oluşturmak istersin?",existing:{title:"Mevcut Çalışma Alanı",description:"Sunucumda zaten bir çalışma alanım var, sadece proje listesine eklemek istiyorum"},new:{title:"Yeni Çalışma Alanı",description:"Yeni bir çalışma alanı oluştur, istersen bir GitHub deposundan klonla"},githubClone:{title:"GitHub'tan Klonla",description:"Bir hedef klasör seç, repoyu içine klonla"},subfolder:{title:"Alt Klasör Oluştur",description:"Bir üst klasör seç, içinde yeni bir alt klasör oluştur"}},step2:{existingPath:"Çalışma Alanı Yolu",newPath:"Çalışma Alanı Yolu",subfolderParentPath:"Üst Klasör",subfolderParentHelp:"Yeni alt klasörün oluşturulacağı klasörün yolu",subfolderName:"Alt Klasör Adı",subfolderNameHelp:"Bu isimde yeni bir klasör yukarıdaki üst klasörün içinde oluşturulacak",existingPlaceholder:"/mevcut/calisma-alani/yolu",newPlaceholder:"/yeni/calisma-alani/yolu",existingHelp:"Mevcut çalışma alanı dizinine giden tam yol",newHelp:"Çalışma alanı dizinine giden tam yol",githubUrl:"GitHub URL'si (İsteğe Bağlı)",githubPlaceholder:"https://github.com/kullanici/depo",githubHelp:"İsteğe bağlı: bir depoyu klonlamak için GitHub URL'si gir",githubAuth:"GitHub Kimlik Doğrulama (İsteğe Bağlı)",githubAuthHelp:"Yalnızca özel depolar için gereklidir. Genel depolar kimlik doğrulama olmadan klonlanabilir.",loadingTokens:"Kayıtlı token'lar yükleniyor...",storedToken:"Kayıtlı Token",newToken:"Yeni Token",nonePublic:"Yok (Genel)",selectToken:"Token Seç",selectTokenPlaceholder:"-- Bir token seç --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"Bu token sadece bu işlem için kullanılacak",publicRepoInfo:"Genel depolar kimlik doğrulama gerektirmez. Genel bir depo klonluyorsan token girmeyi atlayabilirsin.",noTokensHelp:"Kayıtlı token yok. Kolay tekrar kullanım için Ayarlar → API Anahtarları bölümünden token ekleyebilirsin.",optionalTokenPublic:"GitHub Token (Genel Depolar için İsteğe Bağlı)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (genel depolar için boş bırak)"},step3:{reviewConfig:"Yapılandırmanı Gözden Geçir",workspaceType:"Çalışma Alanı Türü:",existingWorkspace:"Mevcut Çalışma Alanı",newWorkspace:"Yeni Çalışma Alanı",subfolderWorkspace:"Yeni Alt Klasör",path:"Yol:",parentPath:"Üst Yol:",subfolderName:"Alt Klasör Adı:",cloneFrom:"Şuradan Klonla:",authentication:"Kimlik Doğrulama:",usingStoredToken:"Kayıtlı token kullanılıyor:",usingProvidedToken:"Girilen token kullanılıyor",noAuthentication:"Kimlik doğrulama yok",sshKey:"SSH Anahtarı",existingInfo:"Çalışma alanı proje listene eklenecek ve Claude/Cursor oturumları için kullanılabilir olacak.",newWithClone:"Depo bu klasöre klonlanacak.",newEmpty:"Çalışma alanı proje listene eklenecek ve Claude/Cursor oturumları için kullanılabilir olacak.",subfolderInfo:"Üst klasörün içinde yeni bir alt klasör oluşturulacak ve proje listene eklenecek.",cloningRepository:"Depo klonlanıyor..."},buttons:{cancel:"İptal",back:"Geri",next:"İleri",createProject:"Projeyi Oluştur",creating:"Oluşturuluyor...",cloning:"Klonlanıyor..."},errors:{selectType:"Lütfen mevcut çalışma alanın olduğunu mu yoksa yeni oluşturmak mı istediğini seç",providePath:"Lütfen bir çalışma alanı yolu gir",provideSubfolderName:"Lütfen alt klasör için bir isim gir",subfolderNameInvalid:"Alt klasör adı yol ayırıcı içeremez veya . / .. olamaz",failedToCreate:"Çalışma alanı oluşturulamadı",failedToCreateFolder:"Klasör oluşturulamadı"}},V0e={genericTool:"bir araç",codes:{generic:{info:{title:"Bildirim"}},permission:{required:{title:"Aksiyon Gerekli",body:"{{toolName}} kararını bekliyor."}},run:{stopped:{title:"Çalıştırma Durduruldu",body:"Sebep: {{reason}}"},failed:{title:"Çalıştırma Başarısız"}},agent:{notification:{title:"Ajan Bildirimi"}}},open:"Bildirimleri aç",title:"Bildirimler",markRead:"Okundu",close:"Bildirimleri kapat",dismiss:"Bildirimi kapat"},W0e={title:"Güncelleme Mevcut",newVersionReady:"Yeni bir sürüm hazır",currentVersion:"Mevcut Sürüm",latestVersion:"Son Sürüm",latestRelease:"Son Yayın",releaseNotesTitle:"Sürüm Notları",releaseNotesSubtitle:"Pixcode'daki son değişiklikler",whatsNew:"Yenilikler:",viewFullRelease:"Tam sürüm notlarını gör",updateProgress:"Güncelleme İlerlemesi:",manualUpgrade:"Manuel yükseltme:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:'Veya güncellemeyi otomatik çalıştırmak için "Şimdi Güncelle"ye tıkla.',updateCompleted:"Güncelleme başarıyla tamamlandı!",restartServer:"Değişikliklerin uygulanması için sunucuyu yeniden başlat.",updateFailed:"Güncelleme başarısız",buttons:{close:"Kapat",later:"Daha Sonra",copyCommand:"Komutu Kopyala",updateNow:"Şimdi Güncelle",updating:"Güncelleniyor..."},ariaLabels:{closeModal:"Sürüm yükseltme modalını kapat",showSidebar:"Kenar çubuğunu göster",settings:"Ayarlar",updateAvailable:"Güncelleme mevcut",closeSidebar:"Kenar çubuğunu kapat"}},q0e={title:"Canlı Görünüm",subtitle:"Bu projeyi yerelde çalıştır ve aktif güvenli tünel varsa paylaşım linkiyle dışarı aç.",start:"Başlat",restart:"Yeniden başlat",stop:"Durdur",runnerError:"Çalıştırıcı hatası",runnerUnavailable:"Çalıştırıcı yok",managedRuntimePreparing:"Pixcode runtime'ı hazırlayacak",managedRuntimeDescription:"Başlat'a basınca Pixcode gereken yerel runtime'ı otomatik hazırlar.",preparingRuntime:"Runtime hazırlanıyor…",preparingRuntimeDescription:"Pixcode runtime'ı yerel olarak indirip kuruyor. İlk kullanımda biraz sürebilir.",runnerErrorFallback:"Önizleme hazır olmadan çalıştırıcı durdu.",detecting:"Proje çalıştırıcısı algılanıyor…",noRunner:"Çalıştırıcı algılanmadı",staticHint:"index.html varsa statik HTML doğrudan sunulur.",customCommand:"Özel komut",custom:"Özel",customPlaceholder:"npm run dev, python app.py, go run .",environment:"Ortam",environmentLocalProcess:"Yerel süreç",environmentStatic:"Statik dosyalar",environmentUnavailable:"Kullanılamaz",statusLabel:"Durum",framework:"Framework",command:"Komut",upstream:"Upstream",publicTunnel:"Public tunnel",tunnelActive:"Tünel aktif",tunnelLocalOnly:"Sadece yerel",diagnostics:"Tanılar",viewport:"Çözünürlük",viewportDesktop:"Masaüstü",viewportTablet:"Tablet",viewportMobile:"Mobil",viewportWidth:"Genişlik",viewportHeight:"Yükseklik",controls:"Çalıştırıcı, çözünürlük ve loglar",shareLink:"Paylaşım linki",starting:"Başlatılıyor",openExternal:"Dışarıda aç",externalActive:"Güvenli tünel aktif; bu link ağ dışına paylaşılabilir.",localOnly:"External Access kapalı; bu link sadece bu Pixcode sunucusunda yerel çalışır.",frameTitle:"Proje Canlı Görünümü",emptyTitle:"Canlı Görünümü başlat",emptyDescription:"Pixcode proje yapısını algılar, yerel web sunucusunu başlatır ve burada gösterir."},K0e=JSON.parse('{"title":"Kontrol Odası","subtitle":"{{target}} için üretim, platform, yönetim, denetim ve self-hosted erişim","thisServer":"bu sunucu","refresh":"Yenile","nav":{"overview":"Genel","production":"Üretim","admin":"Yönetim","team":"Ekip","secrets":"Sırlar","marketplace":"Market","eval":"Değerlendirme","usage":"Kullanım","security":"Güvenlik","access":"Erişim"},"overview":{"title":"v1.46 yayın yüzeyi","description":"Aşağıdaki her kutu v1.44-v1.45 API ile bağlı ve artık UI içinde görünüyor.","latestAuditEvents":"Son denetim olayları","remoteAccessOptions":"Uzak erişim seçenekleri"},"metrics":{"issueRuns":"Issue-to-PR çalışmaları","reviewItems":"Review öğeleri","subUsers":"Alt kullanıcılar","collaborators":"Ortaklar","secrets":"Scope env sırları","marketplace":"Market","evalRuns":"Değerlendirme çalışmaları","securityAudits":"Güvenlik denetimleri","attention":"Dikkat","running":"Çalışıyor","needsAttention":"Dikkat gerekenler","runningNow":"Şu an çalışanlar","reviews":"İncelemeler","checkpoints":"Checkpointler","roles":"Roller","auditEvents":"Denetim olayları","scopedSecrets":"Kapsamlı sırlar","auditRuns":"Denetimler","findings":"Bulgular","usageRows":"Kullanım satırları","evalSuites":"Değerlendirme paketleri"},"sections":{"production":{"title":"Production loop","description":"Issue-to-PR çalışmaları başlat, CI hatalarını ayrıştır, değişiklikleri incele, arka plan işleri zamanla ve checkpoint oluştur."},"admin":{"title":"Admin sistemi","description":"Tek self-hosted Pixcode sunucusunda alt kullanıcı oluştur, hesapları kapat ve aktiviteleri incele."},"team":{"title":"Proje ortakları ve çalışanları","description":"Herkesi global admin yapmadan proje bazında ortak, çalışan, reviewer ve viewer ata."},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"Self-hosted erişim","description":"Sabit domain yoksa Tailscale kullan veya sabit public URL için Cloudflare Tunnel/custom domain yapılandır."}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Alt kullanıcı oluştur","rolePermissions":"Rol izinleri","addCollaborator":"Ortak ekle","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Uzak erişim kurulumu"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Çalıştırmayı sıraya al","parseFailure":"Hatayı ayrıştır","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Kullanıcı oluştur","disable":"Disable","enable":"Enable","addCollaborator":"Ortak ekle","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Erişim yolunu kaydet","checkUrl":"URL kontrol et","checkTailscale":"Tailscale kontrol et"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"Ortaklar projeye nasıl erişir","stepUsers":"Alt kullanıcı oluştur","stepUsersDescription":"Kişiyi Admin sisteminde member, viewer, project_worker veya project_partner gibi bir rolle oluştur.","stepRole":"Proje rolü ata","stepRoleDescription":"Aynı kullanıcıyı proje ortağı olarak ekle; sadece seçtiğin projeleri görsün ve çalıştırsın.","stepLink":"Erişim yolunu paylaş","stepLinkDescription":"Self-hosted erişimde tanımlanan Tailscale, Cloudflare Tunnel, custom domain veya LAN URL adresini paylaş.","paths":"Kullanılabilir erişim linkleri"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operasyonlar","description":"Çalışmalar, incelemeler, onaylar, zamanlayıcı ve checkpointler"},"people":{"label":"Kişiler","description":"Yöneticiler, ortaklar, roller ve aktivite"},"access":{"label":"Erişim","description":"LAN, Tailscale, tünel ve domain yönlendirmesi"},"security":{"label":"Güvenlik","description":"Sırlar, izin riski ve denetim kontrolleri"},"insights":{"label":"İçgörüler","description":"Kullanım, değerlendirmeler ve market sağlığı"}},"context":{"title":"Bu ne anlama geliyor?","recommendedNextStep":"Önerilen sonraki adım","runTimeline":"Çalışma zaman çizelgesi","runTimelineDescription":"Agent, reviewer, checkpoint ve denetim olayları için okunabilir aktivite akışı.","emptyTimelineTitle":"Henüz çalışma zaman çizelgesi yok","emptyTimelineDescription":"Issue çalışmaları, review kararları, checkpointler veya denetim olayları kaydedilince burada görünür.","serverSignal":"Sunucu sinyali","serverSignalDescription":"İlk ekran ham backend bölümlerini gizler ve yalnızca güncel durumu gösterir."},"operations":{"runTimeline":"Çalışma zaman çizelgesi","runTimelineDescription":"Ham JSON açmadan aktör, aksiyon ve sonuç geçmişi.","noActivityTitle":"Henüz aktivite yok","noActivityDescription":"Issue çalışmaları, review kararları, checkpointler ve denetim olayları burada dikey zaman çizelgesi olarak görünür.","actionQueue":"Aksiyon kuyruğu","actionQueueDescription":"Review öğeleri sıkışık tablo yerine mobil uyumlu satırlar olarak gösterilir.","noReviewItemsTitle":"Review öğesi yok","noReviewItemsDescription":"Değişen dosyalar için kabul/düzelt kararı gerektiğinde review öğesi oluştur.","reviewRequested":"Review istendi","changedFiles":"{{count}} değişen dosya","accept":"Kabul et"},"people":{"projectCollaborators":"Proje ortakları","projectCollaboratorsDescription":"Proje partnerleri ve çalışanları global admin değildir; atanmış projelere kapsamlı erişim alır.","noCollaboratorsTitle":"Henüz ortak yok","noCollaboratorsDescription":"Önce alt kullanıcı oluştur, ardından o kişiyi proje rolüne ata.","project":"Proje","roleScoped":"role bağlı","auditLog":"Denetim kaydı","auditLogDescription":"Ham veritabanı görünümü açmadan alt kullanıcıların, proje partnerlerinin ve çalışanların ne değiştirdiğini ara.","searchAudit":"Aktör, aksiyon, proje veya detay ara","noAuditMatchTitle":"Eşleşen denetim olayı yok","noAuditMatchDescription":"Kullanıcı ve proje erişim aktiviteleri aksiyonlardan sonra burada görünür.","system":"sistem","auditEvent":"Denetim olayı","advancedTitle":"Gelişmiş kişi yönetimi","advancedDescription":"Kullanıcı oluştur ve proje rollerini yalnızca gerektiğinde ata."},"access":{"openSettings":"Ayarlar > Erişim aç","lanTitle":"LAN ve yerel","lanDescription":"Tarayıcı aynı makinede veya aynı ağdayken kullanılır. Özel ya da public tünellerden önce buradan başla.","tailscaleTitle":"Tailscale özel erişim","tailscaleDescription":"Pixcode’u public açmadan ekip erişimi gerektiğinde en uygun seçenektir. UI kurulum, giriş ve URL paylaşımını yönlendirmelidir.","cloudflareTitle":"Cloudflare veya özel domain","cloudflareDescription":"Sabit HTTPS URL gerektiğinde uygundur. Tünel/domain bir kez yapılandırılır ve atanmış kullanıcılarla paylaşılır.","howUsersConnect":"Kullanıcılar nasıl bağlanır?","howUsersConnectDescription":"Bu bölüm Erişim akışını teknik olmayan kullanıcılar için anlaşılır tutar.","stepUserTitle":"Kullanıcıyı oluştur","stepUserDescription":"Sunucunun kullanıcıyı tanıması için Kişiler bölümünden ekle.","stepRoleTitle":"Proje rolü ata","stepRoleDescription":"Kullanıcıya{{projectSuffix}} proje erişimi ver.","stepUrlTitle":"Tek URL paylaş","stepUrlDescription":"Ayarlar > Erişim içindeki LAN, Tailscale, Cloudflare Tunnel veya özel domain URL’sini kullan."},"security":{"secretVault":"Sır kasası","secretVaultDescription":"Satırlar kapsamı, hedefi ve maskelenmiş env adlarını gösterir. Değerler gizli kalır.","noSecretsTitle":"Kayıtlı sır yok","noSecretsDescription":"Provider, proje, workflow, Telegram veya API env değerlerini gelişmiş formdan sakla.","global":"global","advancedTitle":"Gelişmiş güvenlik aksiyonları","advancedDescription":"Kapsamlı env değerleri sakla veya denetim kontrollerini kuyruğa al."},"insights":{"usageSummary":"Kullanım özeti","usageSummaryDescription":"Provider metrikleri mobilde geniş tablo yerine kartlar olarak gösterilir.","noUsageTitle":"Henüz kullanım olayı yok","noUsageDescription":"Provider veya workflow olayları kaydedildikten sonra kullanım burada görünür.","provider":"provider","usageRowDescription":"{{tokens}} token - {{cost}} - ort. {{latency}}ms","errorRate":"%{{rate}} hata","marketplaceHealth":"Market sağlığı","marketplaceHealthDescription":"MCP sunucuları, workflow şablonları, provider adapterleri ve bildirim kanalları genel görünümü sıkıştırmadan görünür kalır.","noMarketplaceTitle":"Market kaydı yok","noMarketplaceDescription":"Bir plugin veya workflow şablonu kuruluma hazır olduğunda kayıt ekle.","noSourceConfigured":"Kaynak yapılandırılmamış","unknown":"bilinmiyor","advancedTitle":"Gelişmiş içgörü aksiyonları","advancedDescription":"Kullanım kaydet, değerlendirme paketleri oluştur veya market kayıtları ekle."},"recommendations":{"attention":"Önce Operasyonlar bölümünü aç. Yeni işe başlamadan önce review, hata, başarısız değerlendirme veya güvenlik bulgularını temizle.","access":"Ayarlar > Erişim bölümünü aç ve kullanıcıların kullanacağı tek URL’yi kaydet. Ardından Kişiler içinde proje rolleri ata.","people":"Önce alt kullanıcıları oluştur, ikinci adımda proje rollerini ata, sonra erişim yolunu paylaş.","security":"Sırları işe yarayan en küçük kapsamla sakla, ardından izin veya secret scan çalıştır.","insights":"Model varsayılanlarını değiştirmeden önce provider maliyeti, gecikme ve değerlendirme başarı oranını karşılaştır.","operations":"Şu an çalışanları ve zaman çizelgesini incele. Dikkat gereken bir şey yoksa sonraki issue-to-PR veya zamanlanmış işi başlat."}}'),Y0e={title:"VS Code Çalışma Alanı",noProject:"Proje seçilmedi",activity:{explorer:"Gezgin",projects:"Projeler",sourceControl:"Kaynak Kontrolü",terminal:"Terminal",showPanel:"Sol paneli göster",hidePanel:"Sol paneli gizle"},panels:{explorer:"Gezgin",projects:"Projeler",sourceControl:"Kaynak Kontrolü",terminal:"Terminal",editor:"Editör",cli:"CLI",rightTerminal:"Terminal"},editor:{emptyTitle:"Gezginden bir dosya aç",closeTab:"{{file}} sekmesini kapat",scrollLeft:"Sekmeleri sola kaydir",scrollRight:"Sekmeleri saga kaydir",moreActions:"Diger sekme aksiyonlari",closeSplit:"Bolunmus editoru kapat",context:{close:"Kapat",closeAll:"Tumunu kapat",copyPath:"Yolu kopyala",splitRight:"Saga bol",splitMoveRight:"Saga bol ve tasi"}},resize:{left:"Sol paneli boyutlandır",right:"CLI panelini boyutlandır"},menu:{openProject:"Proje Aç...",cloneFromGithub:"Depoyu Klonla...",newChat:"Yeni Sohbet",openProjects:"Projeleri Aç"},menuBar:{file:"Dosya",edit:"Düzenle",selection:"Seçim",view:"Görünüm",go:"Git",run:"Çalıştır",terminal:"Terminal",help:"Yardım",openSettingsPanel:"Ayarlar panelini aç"},projects:{openProject:"Proje Aç",cloneFromGithub:"Klonla",directoryList:"Dizinler",refresh:"Projeleri yenile",emptyTitle:"Henüz proje dizini yok",emptyDescription:"Başlamak için yerel klasör aç veya bir depoyu klonla.",selected:"Seçili",startChat:"Sohbet",fileCount:"{{formattedCount}} dosya",fileCountPending:"Dosyalar hazırlanıyor",startTitle:"Pixcode calisma alani baslat",startDescription:"Bir klasor sec; Pixcode explorer, terminal ve sohbet gecmisini bu calisma alanina baglar.",workHere:"Bu klasorde calis"},workspace:{empty:"Workspace 1 olusturmak icin bir proje ac.",openFirst:"Workspace ac",add:"Workspace ekle",scrollLeft:"Workspace sekmelerini sola kaydir",scrollRight:"Workspace sekmelerini saga kaydir",close:"{{name}} kapat",closeAction:"Workspace kapat",closeOthers:"Digerlerini kapat",closeAll:"Tumunu kapat",rename:"Yeniden adlandir",star:"Yildizla",unstar:"Yildizi kaldir",toggleStar:"{{name}} yildizla",moreActions:"Workspace aksiyonlari"},cli:{projectScoped:"Projeye bagli CLI terminali",chooseTitle:"CLI terminali baslat",chooseDescription:"Bir CLI sec, sonra sag paneli tamamen terminal olarak baslat.",startSelected:"{{provider}} baslat",newSession:"Yeni CLI oturumu",checking:"Kontrol ediliyor...",ready:"Hazir",notInstalled:"Kurulu degil",installing:"Kuruluyor...",updateAvailable:"{{version}} guncelle",installProvider:"{{provider}} kur",updateProvider:"{{provider}} guncelle",manualInstall:"Bu CLI elle kurulum istiyor.",installNoJob:"Kurulum job id dondurmedi.",installFailed:"Kurulum basarisiz.",installStreamLost:"Kurulum akisi erken kapandi. Kurulum sunucuda hala calisiyor olabilir.",provider:"Saglayici",installRunning:"kuruluyor",installDone:"hazir",installError:"kontrol istiyor",showPanel:"CLI panelini goster",hidePanel:"CLI panelini gizle",close:"Terminali kapat"},terminal:{title:"Terminal",close:"Terminali kapat"}},Z0e={title:"Uzak konsol",notSynced:"Senkronize değil",refresh:"Yenile",runId:"Çalışma {{id}}",metrics:{projects:"Projeler",activeRuns:"Aktif çalışmalar",approvalQueue:"Onay kuyruğu",webhooks:"Webhooklar"},sections:{projects:"Çoklu proje kontrol odası",approvals:"Onay kuyruğu",webhooks:"Webhook durumu"},badges:{active:"{{count}} aktif",approvals:"{{count}} onay"},projectStats:{sessions:"{{count}} oturum",failedRuns:"{{count}} başarısız çalışma",recentRuns:"{{count}} son çalışma"},actions:{allow:"İzin ver",deny:"Reddet"},webhook:{on:"açık",off:"kapalı",ok:"başarılı",failed:"başarısız",noDelivery:"Henüz teslim yok"},empty:{projects:"Kullanılabilir proje yok.",approvals:"Bekleyen onay yok.",webhooks:"Yapılandırılmış webhook yok."}},X0e={buttons:L0e,tabs:P0e,status:D0e,messages:O0e,navigation:M0e,common:F0e,time:z0e,fileOperations:B0e,mainContent:U0e,orchestration:$0e,fileTree:H0e,projectWizard:G0e,notifications:V0e,versionUpdate:W0e,liveView:q0e,controlRoom:K0e,vscodeWorkbench:Y0e,remoteConsole:Z0e},J0e="Ayarlar",Q0e={account:"Hesap",permissions:"İzinler",mcpServers:"MCP Sunucuları",pluginsMcp:"Eklentiler / MCP",configuration:"Yapılandırma",appearance:"Görünüm"},ebe={title:"Hesap",language:"Dil",languageLabel:"Görüntüleme Dili",languageDescription:"Arayüz için tercih ettiğin dili seç",username:"Kullanıcı Adı",email:"E-posta",profile:"Profil",changePassword:"Şifreyi Değiştir"},tbe={title:"MCP Sunucuları",addServer:"Sunucu Ekle",editServer:"Sunucuyu Düzenle",deleteServer:"Sunucuyu Sil",serverName:"Sunucu Adı",serverType:"Sunucu Türü",config:"Yapılandırma",testConnection:"Bağlantıyı Test Et",status:"Durum",connected:"Bağlı",disconnected:"Bağlantı kesildi",scope:{label:"Kapsam",user:"Kullanıcı",project:"Proje"}},nbe={title:"Görünüm",theme:"Tema",codeEditor:"Kod Editörü",editorTheme:"Editör Teması",wordWrap:"Kelime Kaydırma",showMinimap:"Minimap'i Göster",lineNumbers:"Satır Numaraları",fontSize:"Yazı Tipi Boyutu"},rbe={saveChanges:"Değişiklikleri Kaydet",resetToDefaults:"Varsayılanlara Döndür",cancelChanges:"Değişiklikleri İptal Et"},abe={title:"Hızlı Ayarlar",sections:{appearance:"Görünüm",toolDisplay:"Araç Gösterimi",viewOptions:"Görünüm Seçenekleri",agentDiff:"Ajan diff'i",inputSettings:"Girdi Ayarları",changeAwareness:"Hakimiyet"},darkMode:"Koyu Mod",autoExpandTools:"Araçları otomatik genişlet",showRawParameters:"Ham parametreleri göster",showThinking:"Düşünmeyi göster",autoScrollToBottom:"Otomatik en alta kaydır",sendByCtrlEnter:"Ctrl+Enter ile gönder",sendByCtrlEnterDescription:"Etkinleştirildiğinde, Ctrl+Enter'a basmak yalnız Enter yerine mesajı gönderir. IME (girdi metot düzenleyici) kullananlar için yanlışlıkla göndermeyi önler.",autoShowAgentDiff:"Ajan düzenlemelerini diff olarak göster",autoShowAgentDiffOff:"Kapalı",autoShowAgentDiffOpenOnly:"Açık dosyalar",autoShowAgentDiffAlways:"Her zaman",changeAwareness:"Hakimiyet",changedFiles:{title:"Değişen dosyalar",description:"Yerel dosya değişikliklerini izler ve yeni değişiklikte Dosyalar panelini açar.",noProject:"Yerel değişiklikleri izlemek için bir proje seç.",refresh:"Değişen dosyaları yenile",empty:"Yerel değişiklik yok",disabled:"Yerel değişiklikleri izlemek için Hakimiyet'i aç.",more:"+{{count}} dosya daha",lastChecked:"Kontrol {{value}}",guideTitle:"Sağ panel rehberi",guideFiles:"Değişen dosyalar Dosyalar içinde yeşil parlar.",guidePanel:"Yeni değişiklikler aktif sohbetin yanında görünür.",status:{M:"D",A:"E",D:"S",U:"Y"}},dragHandle:{dragging:"Tutamaç sürükleniyor",closePanel:"Ayarlar panelini kapat",openPanel:"Ayarlar panelini aç",draggingStatus:"Sürükleniyor...",toggleAndMove:"Açıp kapamak için tıkla, taşımak için sürükle"}},ibe={title:"Terminal Kısayolları",sectionKeys:"Tuşlar",sectionNavigation:"Gezinme",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"Yukarı Ok",arrowDown:"Aşağı Ok",scrollDown:"Aşağı Kaydır",handle:{closePanel:"Kısayol panelini kapat",openPanel:"Kısayol panelini aç"}},sbe={label:"Ayarlar",agents:"Ajanlar",appearance:"Görünüm",git:"Git",apiTokens:"API ve Token'lar",notifications:"Bildirimler",plugins:"Eklentiler",mobile:"Mobilden Kullan",telegram:"Telegram",diagnostics:"Tanılama",about:"Hakkında",access:"Erisim"},obe={title:"Mobilden Kullan",description:"Aynı ağdaki bir cihazdan Pixcode'u açmak için telefonunla QR kodunu tara.",refresh:"Yenile",copy:"Kopyala",copied:"Kopyalandı!",loading:"Ağ adresleri tespit ediliyor…",noEndpoints:"Yerel ağda adres bulunamadı. Cihazının bir ağa bağlı olduğundan emin ol.",error:"Ağ uç noktaları yüklenemedi.",hostLabel:"Host",portLabel:"Port",steps:{sameNetwork:"Telefonunu bu bilgisayarla aynı Wi-Fi ağına bağla.",scan:"Kamera uygulamasını aç ve aşağıdaki QR kodlarından birini tara.",login:"İlk girişte Pixcode hesabınla oturum aç."},external:{title:"Dışarıdan Erişim",description:"Pixcode'u yerel ağ dışından, internet üzerinden erişilebilir hale getir.",upnpTitle:"Router port yönlendirme (UPnP)",upnpDescription:"Router üzerinden tek tıkla port açma. Çoğu ev modeminde çalışır; CGNAT veya kurumsal ağda sessizce başarısız olur.",upnpEnable:"UPnP'yi Etkinleştir",upnpDisable:"UPnP'yi Kapat",upnpEnabled:"UPnP yönlendirmesi aktif",upnpUnsupported:"Bu ağda UPnP kullanılamıyor.",tunnelTitle:"Güvenli tünel",tunnelDescription:"UPnP yoksa cloudflared veya ngrok kur ve bir tünel başlat — otomatik algılayıp QR'ını burada gösteririz.",tunnelStart:"Tüneli Başlat",tunnelStop:"Tüneli Durdur",tunnelRunning:"Tünel çalışıyor",tunnelUnavailable:"Bu bilgisayarda tünel uygulaması bulunamadı.",externalUrl:"Dış URL"}},lbe={title:"Telegram",description:"Görev bitişi bildirimleri al ve ajanlarınla Telegram'dan konuş.",comingSoon:"Telegram entegrasyonu hazırlanıyor.",botToken:"Bot Token",botTokenPlaceholder:"123456:ABC-DEF…",botTokenHelp:"@BotFather ile bir bot oluştur ve token'ı buraya yapıştır.",saveToken:"Kaydet & Botu Başlat",saving:"Kaydediliyor…",botRunning:"Bot çalışıyor: @{{username}}",botStopped:"Bot durduruldu",stopBot:"Botu Durdur",removeToken:"Token'ı Kaldır",pairing:{title:"Telegram hesabınla eşleş",description:"Bota mesaj at ve sohbette bu 6 haneli kodu gir. Kod her 10 dakikada yenilenir.",code:"Eşleştirme Kodu",regenerate:"Yeni kod oluştur",verified:"Telegram hesabı eşleşti",notPaired:"Henüz Telegram hesabı eşleştirilmedi."},linkedAccount:{title:"Eşleşen Hesap",username:"@{{username}}",language:"Cevaplar: {{language}}",unpair:"Bağlantıyı Kes"},notifications:{title:"Bildirimler",description:"Ajan tamamlanma ve hata olaylarını Telegram sohbetine gönder.",enabled:"Açık",disabled:"Kapalı"},bridge:{title:"Sohbet Köprüsü",description:"Bota yazdığın mesajlar son oturumuna prompt olarak iletilir. Yanıtlar Telegram'a döner.",enabled:"Açık",disabled:"Kapalı"},control:{title:"Uzaktan Kontrol",description:"Telegram'ı ajanlar, orkestrasyon, sağlayıcı kurulumu ve çalışma durumları için tam Pixcode kontrol yüzeyi olarak kullan.",enabled:"Telegram kontrolünü etkinleştir",enabledDescription:"Açıkken eşleşmiş Telegram mesajları seçili projede ajan ve orkestrasyon işi başlatabilir.",progressMode:"İlerleme modu",progressModeDescription:"Telegram'ın ne kadar çalışma çıktısı göndereceğini seç.",progressModes:{final:"Sadece final cevap",steps:"Önemli adımlar ve final cevap",errors:"Hatalar ve final cevap",all:"Tüm görünür adım değişiklikleri"},selectedProject:"Seçili proje",selectedProvider:"Seçili sağlayıcı",selectedModel:"Seçili model",selectedWorkflow:"Seçili workflow"},router:{title:"AI Router",description:"Serbest Telegram mesajlarını seçili Pixcode provider/model ile anlamlandır. Slash komutları ve butonlar doğrudan çalışır.",enabled:"Doğal dil router'ını etkinleştir",enabledDescription:"Serbest metin aşağıdaki provider/model ile yorumlanır. Düşük güvenli metin normal ajan promptu olarak gönderilir.",provider:"Sağlayıcı",providerDescription:"Bu sohbet her zaman tek sağlayıcı kullanmayacaksa Telegram'da seçili sağlayıcıda bırak.",useTelegramSelected:"Telegram'da seçili sağlayıcıyı kullan",model:"Model",modelDescription:"İsteğe bağlı override. Boş bırakınca Telegram'da seçili model kullanılır.",modelPlaceholder:"Telegram'da seçili modeli kullan",saveModel:"Kaydet",strictConfirmation:"Sıkı onay",strictConfirmationDescription:"Riskli yazma/çalıştırma işlemleri tek kullanımlık Telegram onayı gerektirir. v1'de her zaman açık."},errors:{invalidToken:"Telegram bu bot token'ını reddetti.",networkError:"Telegram sunucularına ulaşılamadı."}},cbe={title:"Bildirimler",description:"Hangi bildirim etkinliklerini alacağını kontrol et.",webPush:{title:"Web Push Bildirimleri",enable:"Push Bildirimlerini Etkinleştir",disable:"Push Bildirimlerini Devre Dışı Bırak",enabled:"Push bildirimleri etkin",loading:"Güncelleniyor...",unsupported:"Bu tarayıcıda push bildirimleri desteklenmiyor.",denied:"Push bildirimleri engellendi. Lütfen tarayıcı ayarlarından izin ver."},events:{title:"Etkinlik Türleri",actionRequired:"Aksiyon gerekli",stop:"Çalıştırma durduruldu",error:"Çalıştırma başarısız",updates:"Uygulama ve CLI güncellemeleri"}},dbe={darkMode:{label:"Koyu Mod",description:"Açık ve koyu temalar arasında geçiş yap"},colorTheme:{title:"Renk teması",palette:{label:"Vurgu paleti",description:"Butonlar, odak halkaları, navigasyon ve aktif durumlarda kullanılacak ürün rengini seç."},custom:{label:"Özel açık/koyu renkler",description:"Açık ve koyu mod için ayrı vurgu renkleri seç. Kullanmak için yukarıdan Custom seç.",light:"Açık",dark:"Koyu"}},projectSorting:{label:"Proje Sıralama",description:"Projelerin kenar çubuğunda nasıl sıralanacağı",alphabetical:"Alfabetik",recentActivity:"Son Etkinlik"},codeEditor:{title:"Kod Editörü",theme:{label:"Editör Teması",description:"Kod editörü için varsayılan tema"},wordWrap:{label:"Kelime Kaydırma",description:"Editörde kelime kaydırmayı varsayılan olarak etkinleştir"},showMinimap:{label:"Minimap'i Göster",description:"Diff görünümünde kolay gezinme için minimap göster"},lineNumbers:{label:"Satır Numaralarını Göster",description:"Editörde satır numaralarını göster"},fontSize:{label:"Yazı Tipi Boyutu",description:"Editör yazı tipi boyutu (piksel)"}}},ube={title:{add:"MCP Sunucusu Ekle",edit:"MCP Sunucusunu Düzenle"},importMode:{form:"Form Girdisi",json:"JSON İçe Aktar"},scope:{label:"Kapsam",userGlobal:"Kullanıcı (Genel)",projectLocal:"Proje (Yerel)",userDescription:"Kullanıcı kapsamı: Makinendeki tüm projelerde kullanılabilir",projectDescription:"Yerel kapsam: Yalnızca seçili projede kullanılabilir",cannotChange:"Mevcut bir sunucu düzenlenirken kapsam değiştirilemez"},fields:{serverName:"Sunucu Adı",transportType:"Taşıma Türü",command:"Komut",arguments:"Argümanlar (satır başına bir tane)",jsonConfig:"JSON Yapılandırması",url:"URL",envVars:"Ortam Değişkenleri (KEY=değer, satır başına bir tane)",headers:"Başlıklar (KEY=değer, satır başına bir tane)",selectProject:"Bir proje seç..."},placeholders:{serverName:"benim-sunucum"},validation:{missingType:"Zorunlu alan eksik: type",stdioRequiresCommand:"stdio türü command alanı gerektirir",httpRequiresUrl:"{{type}} türü url alanı gerektirir",invalidJson:"Geçersiz JSON formatı",jsonHelp:"MCP sunucu yapılandırmanı JSON formatında yapıştır. Örnek formatlar:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"Yapılandırma Detayları ({{configFile}} dosyasından)",projectPath:"Yol: {{path}}",actions:{cancel:"İptal",saving:"Kaydediliyor...",addServer:"Sunucu Ekle",updateServer:"Sunucuyu Güncelle"}},pbe={success:"Ayarlar başarıyla kaydedildi!",error:"Ayarlar kaydedilemedi",saving:"Kaydediliyor..."},mbe={save:"Ayarları Kaydet",cancel:"İptal"},hbe={title:"Git Yapılandırması",description:"Commit'ler için git kimliğini yapılandır. Bu ayarlar git config --global ile genel olarak uygulanacak",name:{label:"Git Adı",help:"Git commit'leri için adın"},email:{label:"Git E-postası",help:"Git commit'leri için e-postan"},actions:{save:"Yapılandırmayı Kaydet",saving:"Kaydediliyor..."},status:{success:"Başarıyla kaydedildi"}},fbe={title:"API Anahtarları",description:"Diğer uygulamalardan harici API'ye erişmek için API anahtarları üret.",newKey:{alertTitle:"⚠️ API Anahtarını Kaydet",alertMessage:"Bu anahtarı yalnızca bu sefer göreceksin. Güvenli bir yerde sakla.",iveSavedIt:"Kaydettim"},form:{placeholder:"API Anahtar Adı (ör. Production Sunucu)",createButton:"Oluştur",cancelButton:"İptal"},newButton:"Yeni API Anahtarı",empty:"Henüz API anahtarı oluşturulmamış.",list:{created:"Oluşturuldu:",lastUsed:"Son kullanım:"},confirmDelete:"Bu API anahtarını silmek istediğinden emin misin?",status:{active:"Aktif",inactive:"Pasif"},github:{title:"GitHub Token'ları",description:"Harici API üzerinden özel depoları klonlamak için GitHub Kişisel Erişim Token'ları ekle.",descriptionAlt:"Özel depoları klonlamak için GitHub Kişisel Erişim Token'ları ekle. Token'ları saklamadan API isteklerinde doğrudan da geçebilirsin.",addButton:"Token Ekle",form:{namePlaceholder:"Token Adı (ör. Kişisel Depolar)",tokenPlaceholder:"GitHub Kişisel Erişim Token'ı (ghp_...)",descriptionPlaceholder:"Açıklama (isteğe bağlı)",addButton:"Token Ekle",cancelButton:"İptal",howToCreate:"GitHub Kişisel Erişim Token'ı nasıl oluşturulur →"},empty:"Henüz GitHub token'ı eklenmemiş.",added:"Eklendi:",confirmDelete:"Bu GitHub token'ını silmek istediğinden emin misin?"},apiDocsLink:"API Dokümantasyonu",documentation:{title:"Harici API Dokümantasyonu",description:"Uygulamalarından Claude/Cursor oturumları tetiklemek için harici API'nin nasıl kullanılacağını öğren.",viewLink:"API Dokümantasyonunu Görüntüle →"},loading:"Yükleniyor...",version:{updateAvailable:"Güncelleme mevcut: v{{version}}"}},gbe={status:{title:"CLI durumu",notChecked:"Henüz kontrol edilmedi",lastChecked:"Son kontrol: {{value}}",updatesFound:"{{count}} güncelleme var",refresh:"CLI durumunu yenile"},config:{blurb:"{{name}} CLI'nin başlarken okuduğu dosyaları burada gör ve düzenle. Kaydet dediğinde doğrudan home dizinine yazılır.",refresh:"Yenile",save:"Kaydet",revert:"Geri Al",saved:"Kaydedildi",loading:"Yükleniyor…",notCreated:"yeni",readonly:"salt-okunur",noFiles:"Bu ajan için kayıtlı yapılandırma dosyası yok."},cliVersion:{title:"CLI sürümü",installed:"Kurulu: {{version}}",unknownInstalled:"Kurulu sürüm bilinmiyor",latest:"Güncel: {{version}}",checkedAt:"Kontrol: {{value}}",cached:"önbellek",updateAvailable:"Güncelleme var",refresh:"Yenile",skipped:{external_installer:"Harici kurulum",installed_version_unavailable:"Kurulu sürüm okunamadı",latest_version_unavailable:"Güncel sürüm okunamadı",not_installed:"Kurulu değil"}},authStatus:{checking:"Kontrol ediliyor...",connected:"Bağlı",notConnected:"Bağlı değil",disconnected:"Bağlantı kesildi",checkingAuth:"Kimlik doğrulama durumu kontrol ediliyor...",loggedInAs:"{{email}} olarak giriş yapıldı",authenticatedUser:"kimliği doğrulanmış kullanıcı"},account:{claude:{description:"Anthropic Claude AI asistanı"},cursor:{description:"Cursor AI destekli kod editörü"},codex:{description:"OpenAI Codex AI asistanı"},gemini:{description:"Google Gemini AI asistanı"},qwen:{description:"Alibaba Qwen Code CLI (Gemini CLI çatallaması)"},opencode:{description:"Çok sağlayıcılı terminal kod ajanı — Claude, OpenAI, Gemini veya yerel modeller"}},connectionStatus:"Bağlantı Durumu",login:{title:"Giriş Yap",reAuthenticate:"Yeniden Kimlik Doğrula",description:"AI özelliklerini etkinleştirmek için {{agent}} hesabına giriş yap",reAuthDescription:"Farklı bir hesapla giriş yap veya kimlik bilgilerini yenile",button:"Giriş Yap",reLoginButton:"Tekrar Giriş Yap"},error:"Hata: {{error}}",providersLabel:"Saglayicilar",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} kurulu degil",notInstalledDescription:"Pixcode bu hostta {{binary}} binary dosyasini bulamadi. Once kur, sonra giris yapmak icin geri don.",installing:"Kuruluyor...",installNow:"Simdi kur",copyCommand:"Kurulum komutunu kopyala",copy:"Kopyala",copied:"Kopyalandi",qwenDocs:"Qwen Code dokumanlarini ac",complete:"Kurulum tamamlandi",failed:"Kurulum basarisiz",output:"Cikti",cancel:"Iptal",dismiss:"Kapat",doneHint:"Yeni kurulumu kontrol etmek icin bu sekmeyi yenile veya Giris yapmayi dene.",continueToLogin:"Girise devam et",errors:{missingJobId:"Sunucu job id dondurmedi",failedToStart:"Kurulum baslatilamadi",unreadableStatus:"Kurulum okunamayan bir durumla bitti",streamLost:"Kurulum akisi koptu. Kurulum sunucuda hala calisiyor olabilir."}}},bbe={title:"İzin Ayarları",skipPermissions:{label:"İzin istemlerini atla (dikkatli kullan)",claudeDescription:"--dangerously-skip-permissions bayrağının eşdeğeri",cursorDescription:"Cursor CLI'daki -f bayrağının eşdeğeri",opencodeDescription:"OpenCode'daki --dangerously-skip-permissions bayrağının eşdeğeri"},allowedTools:{title:"İzin Verilen Araçlar",description:"İzin istemeden otomatik olarak izin verilen araçlar",placeholder:'ör. "Bash(git log:*)" veya "Write"',quickAdd:"Yaygın araçları hızlı ekle:",empty:"İzin verilen araç yapılandırılmamış"},blockedTools:{title:"Engellenen Araçlar",description:"İzin istemeden otomatik olarak engellenen araçlar",placeholder:'ör. "Bash(rm:*)"',empty:"Engellenen araç yapılandırılmamış"},allowedCommands:{title:"İzin Verilen Shell Komutları",description:"İzin istemeden otomatik olarak izin verilen shell komutları",placeholder:'ör. "Shell(ls)" veya "Shell(git status)"',quickAdd:"Yaygın komutları hızlı ekle:",empty:"İzin verilen komut yapılandırılmamış"},blockedCommands:{title:"Engellenen Shell Komutları",description:"Otomatik olarak engellenen shell komutları",placeholder:'ör. "Shell(rm -rf)" veya "Shell(sudo)"',empty:"Engellenen komut yapılandırılmamış"},toolExamples:{title:"Araç Desen Örnekleri:",bashGitLog:"- Tüm git log komutlarına izin ver",bashGitDiff:"- Tüm git diff komutlarına izin ver",write:"- Tüm Write aracı kullanımına izin ver",bashRm:"- Tüm rm komutlarını engelle (tehlikeli)"},shellExamples:{title:"Shell Komut Örnekleri:",ls:"- ls komutuna izin ver",gitStatus:"- git status'a izin ver",npmInstall:"- npm install'a izin ver",rmRf:"- Özyinelemeli silmeyi engelle"},opencodeAllowed:{title:"İzin Verilen Bash Desenleri",description:"OpenCode'un onay istemeden otomatik kabul ettiği bash komut desenleri",placeholder:'ör. "git *" veya "npm test"',quickAdd:"Yaygın desenleri hızlı ekle:",empty:"İzin verilen desen yok"},opencodeBlocked:{title:"Engellenen Bash Desenleri",description:"OpenCode'un her zaman reddettiği bash komut desenleri",placeholder:'ör. "rm -rf *" veya "sudo *"',empty:"Engellenen desen yok"},opencodeExamples:{title:"Desen Örnekleri:",gitAll:"- Tüm git komutlarına izin ver",gitPush:"- Sadece git push'u engelle",rmRf:"- Özyinelemeli silmeyi engelle",npm:"- Tüm npm komutlarına izin ver"},codex:{permissionMode:"İzin Modu",description:"Codex'in dosya değişiklikleri ve komut çalıştırmayı nasıl ele aldığını kontrol eder",modes:{default:{title:"Varsayılan",description:"Sadece güvenilir komutlar (ls, cat, grep, git status, vb.) otomatik çalışır. Diğer komutlar atlanır. Çalışma alanına yazabilir."},acceptEdits:{title:"Düzenlemeleri Kabul Et",description:"Tüm komutlar çalışma alanı içinde otomatik çalışır. Sandbox'lu çalıştırma ile tam otomatik mod."},bypassPermissions:{title:"İzinleri Atla",description:"Kısıtlama olmadan tam sistem erişimi. Tüm komutlar tam disk ve ağ erişimiyle otomatik çalışır. Dikkatli kullan."}},technicalDetails:"Teknik ayrıntılar",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted. Güvenilir komutlar: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (-exec olmadan), vb.",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never. Tüm komutlar proje dizini içinde otomatik çalışır.",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never. Tam sistem erişimi, yalnızca güvenilir ortamlarda kullan.",overrideNote:"Sohbet arayüzündeki mod düğmesini kullanarak bunu oturum başına geçersiz kılabilirsin."}},actions:{add:"Ekle"}},xbe={title:"MCP Sunucuları",description:{claude:"Model Context Protocol sunucuları Claude'a ek araçlar ve veri kaynakları sağlar",cursor:"Model Context Protocol sunucuları Cursor'a ek araçlar ve veri kaynakları sağlar",codex:"Model Context Protocol sunucuları Codex'e ek araçlar ve veri kaynakları sağlar"},addButton:"MCP Sunucusu Ekle",empty:"Yapılandırılmış MCP sunucusu yok",serverType:"Tür",scope:{local:"yerel",user:"kullanıcı"},config:{command:"Komut",url:"URL",args:"Argümanlar",environment:"Ortam"},tools:{title:"Araçlar",count:"({{count}}):",more:"+{{count}} tane daha"},actions:{edit:"Sunucuyu düzenle",delete:"Sunucuyu sil"},help:{title:"Codex MCP Hakkında",description:"Codex stdio tabanlı MCP sunucularını destekler. Codex'in yeteneklerini ek araçlar ve kaynaklarla genişleten sunucular ekleyebilirsin."}},vbe={updateCheckFrequency:"Güncelleme kontrol sıklığı",updateCheckFrequencyHint:"Pixcode, ortak IP'lerde GitHub limitine takılmamak için sürüm kontrollerini yerelde önbelleğe alır.",updateCheckFrequencyOptions:{"30m":"30 dakikada bir","6h":"6 saatte bir","12h":"12 saatte bir","24h":"Günlük","7d":"Haftalık",off:"Sadece manuel"},checkForUpdate:"Güncellemeleri kontrol et",checkingForUpdate:"Kontrol ediliyor...",updateFound:"Güncelleme bulundu",upToDate:"Güncel",lastChecked:"Son kontrol {{when}}",notCheckedYet:"Güncelleme kontrolü henüz tamamlanmadı",checkFailed:"kontrol başarısız veya rate limit nedeniyle gecikti",tagline:"Acik kaynak AI kodlama asistani arayuzu",checkFailedShort:"Kontrol basarisiz",starOnGitHub:"GitHub’da yildizla",docs:"Dokumanlar",hosted:{title:"Pixcode Hosted dene",description:"Ekip isbirligi, paylasilan MCP ayarlari, ortamlar arasi ayar senkronizasyonu ve yonetilen altyapi.",learnMore:"Daha fazla bilgi"},proFeatures:{title:"Pixcode Pro ozellikleri",syncSettings:{title:"Ayarlari senkronize et",description:"Tercihlerini, MCP ayarlarini ve temani tum ortamlarinda senkron tut."},teamManagement:{title:"Ekip yonetimi",description:"Ekibin icin coklu kullanici, rol tabanli erisim ve paylasilan projeler."}},license:"AGPL-3.0 lisanslidir",relativeTime:{justNow:"az once",secondsAgo:"{{count}} sn once",minutesAgo:"{{count}} dk once",hoursAgo:"{{count}} sa once"}},ybe={title:"Eklentiler",description:"Arayüzü özel eklentilerle genişlet. Git'ten yükle veya ~/.pixcode/plugins/ klasörüne bir dizin bırak.",installPlaceholder:"https://github.com/kullanici/benim-eklentim",installButton:"Yükle",installing:"Yükleniyor…",securityWarning:"Yalnızca kaynak kodunu incelediğin veya güvendiğin geliştiricilerin eklentilerini yükle.",scanningPlugins:"Eklentiler taranıyor…",noPluginsInstalled:"Yüklü eklenti yok",pullLatest:"Git'ten en güncelini çek",noGitRemote:"Git uzak sunucusu yok — güncelleme kullanılamıyor",uninstallPlugin:"Eklentiyi kaldır",confirmUninstall:"Onaylamak için tekrar tıkla",confirmUninstallMessage:"{{name}} kaldırılsın mı? Bu işlem geri alınamaz.",cancel:"İptal",remove:"Kaldır",updateFailed:"Güncelleme başarısız",installFailed:"Yükleme başarısız",uninstallFailed:"Kaldırma başarısız",toggleFailed:"Açıp kapama başarısız",starterPluginLabel:"Başlangıç Eklentisi",starter:"Başlangıç",docs:"Dokümanlar",starterPlugin:{name:"Proje İstatistikleri",badge:"başlangıç",description:"Projen için dosya sayıları, kod satırları, dosya türü dağılımı ve son etkinlik.",install:"Yükle"},terminalPlugin:{name:"Terminal",badge:"resmi",description:"Arayüzün içinde tam shell erişimiyle entegre terminal.",install:"Yükle"},morePlugins:"Daha Fazla",enable:"Etkinleştir",disable:"Devre Dışı Bırak",installAriaLabel:"Eklenti git deposu URL'si",tab:"sekme",runningStatus:"çalışıyor"},wbe={title:"Erisim",description:"Bu self-hosted Pixcode sunucusuna kimlerin nasil baglanacagini sec. Once ayni ag ile dene; uzaktan erisim gerekiyorsa guvenli tunnel, Tailscale veya kendi domainini kullan.",refresh:"Yenile",copy:"Kopyala",copied:"Kopyalandi",save:"Erisim yolunu kaydet",check:"URL kontrol et",qrAlt:"{{url}} icin QR",guide:{title:"Once baglanti yolunu sec",description:"Network terimi bilmen gerekmiyor. Baglanacak kisi hangi durumda ise onu sec, gosterilen linki kopyala veya telefondan QR kodu okut."},options:{sameNetwork:{title:"Ayni Wi-Fi/LAN",description:"Cihaz Pixcode sunucusuyla ayni modem, ofis agi veya LAN icindeyse bunu kullan."},secureTunnel:{title:"Gecici public link",description:"Cloudflare/ngrok tunnel baslat; Pixcode public URL ve QR kodu otomatik gostersin."},tailscale:{title:"Private ekip linki",description:"Public domain veya modem ayari istemeden ozel ekip erisimi icin Tailscale kullan."},customDomain:{title:"Kendi domainin",description:"Zaten HTTPS, reverse proxy veya Cloudflare Tunnel hostname varsa bunu kaydet."}},status:{ready:"Hazir",detecting:"Algilaniyor",guided:"Rehberli",configured:"Ayarlanmis",optional:"Istege bagli"},links:{title:"Kullanilabilir linkler",description:"Baglanacak cihaz veya ekip arkadasi icin dogru URLyi kopyala.",local:"Local",tailscale:"Tailscale private link",empty:"Henuz erisim linki algilanmadi."},local:{title:"Ayni ag erisimi",description:"Ilk deneme icin en kolay yol: ayni Wi-Fi veya LAN icinden baglan. Telefonda QR okut veya ayni agdaki ekip arkadasina linki kopyala.",thisDevice:"Sadece bu bilgisayar",loading:"Ayni ag linkleri algilaniyor...",empty:"LAN linki algilanmadi. Sunucunun aga bagli oldugundan emin olup yenile.",saveLabel:"Ayni ag erisimi",save:"Bu LAN linkini kaydet"},tunnel:{title:"Guvenli tunnel",description:"Sabit domain olmadan uzaktan erisim icin Pixcode cloudflared veya ngrok baslatip public URLyi burada gosterebilir.",secureLink:"Public link ve QR",help:"Baslata tikla. cloudflared veya ngrok kuruluysa Pixcode gecici HTTPS adresini ve QR kodunu otomatik olusturur.",running:"Tunnel calisiyor",start:"Tunnel baslat",stop:"Tunnel durdur",save:"Bu tunnel URLini kaydet",saveLabel:"Guvenli tunnel erisimi",qrLabel:"guvenli tunnel",installTitle:"Tunnel kurulumu gerekli",installNeeded:"Once cloudflared veya ngrok kur, sonra Tunnel baslat dugmesine tekrar bas."},tailscale:{title:"Tailscale private erisim",description:"Tailscale istege bagli bir private network uygulamasidir. Sunucuya ve kullanici cihazlarina kur, ayni ekibe giris yap; Pixcode private URLyi algilar.",save:"Bu Tailscale URLini kaydet",saveLabel:"Tailscale private erisim",openInstall:"Tailscale kurulumunu ac",steps:{installServer:"Pixcode calisan bilgisayara veya sunucuya Tailscale kur.",installUserDevice:"Pixcode acacak telefon, laptop veya ekip arkadasi cihazina Tailscale kur.",login:"Iki cihazda da ayni Tailscale hesabi veya ekibi ile giris yap.",refresh:"Buraya donup Yenileye bas; hazir olunca Pixcode private URLyi gosterir."},installCommand:"Kurulum komutu",installDevice:"Bu cihaza kur",signIn:"Tailscale ile giris yap",actionDone:"Tamamlandi",needsAttention:"Dikkat gerekiyor",openLogin:"Tailscale girisini ac"},advanced:{title:"Gelismis: sabit domain",description:"Kullanicilar icin kaydedilecek LAN URL, Tailscale URL, Cloudflare Tunnel hostname veya custom HTTPS domain zaten varsa bunu kullan.",badge:"Gelismis"},setup:{title:"Sabit erisim yolu",description:"Kullanicilarin kullanacagi URLyi kaydet. LAN adresi, Tailscale URL, Cloudflare Tunnel URL veya custom domain olabilir."},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"Custom domain"},fields:{label:"Etiket",url:"URL",port:"Hedef port",mode:"Mod"},health:{reachable:"Pixcode erisilebilir",unreachable:"Pixcode erisilemiyor"},configured:{title:"Kayitli erisim yollari",description:"Bu yollar adminlere, proje ortaklarina ve proje calisanlarina rollerine gore acilir.",empty:"Henuz kayitli erisim yolu yok.",noUrl:"URL yok",public:"public",private:"private"},team:{title:"Kullanicilar nasil baglanir",description:"Kullaniciyi Admin sisteminde olustur, Control Room icinde proje rolunu ata, sonra bu Access URLlerinden birini paylas. Atanmis projeye erismek icin global admin olmasi gerekmez."}},kbe={title:"Tanilar",description:"Saglayici sagligi, WebSocket durumu, bildirimler, aktif calismalar ve son hatalar.",refresh:"Yenile",copyBundle:"Paketi kopyala",copied:"Kopyalandi",runtime:"Calisma ortami",waiting:"Tanilar bekleniyor",websocket:"WebSocket",activeClients:"aktif istemci",recentErrors:"Son hatalar",redactedBundle:"gizlenmis destek paketi",providers:"Saglayicilar",notChecked:"kontrol edilmedi",emptyProviders:"Saglayici sagligi henuz toplanmadi.",status:{unknown:"bilinmiyor",loading:"yukleniyor",ok:"tamam",available:"kullanilabilir",configured:"yapilandirildi",missing:"eksik",failed:"basarisiz"}},Sbe={title:J0e,tabs:Q0e,account:ebe,mcp:tbe,appearance:nbe,actions:rbe,quickSettings:abe,terminalShortcuts:ibe,mainTabs:sbe,mobile:obe,telegram:lbe,notifications:cbe,appearanceSettings:dbe,mcpForm:ube,saveStatus:pbe,footerActions:mbe,git:hbe,apiKeys:fbe,agents:gbe,permissions:bbe,mcpServers:xbe,about:vbe,pluginSettings:ybe,access:wbe,diagnostics:kbe},Cbe={title:"Tekrar Hoş Geldin",description:"Kendi Pixcode hesabına giriş yap",username:"Kullanıcı Adı",password:"Şifre",submit:"Giriş Yap",loading:"Giriş yapılıyor...",errors:{invalidCredentials:"Kullanıcı adı veya şifre hatalı",requiredFields:"Lütfen tüm alanları doldur",networkError:"Ağ hatası. Lütfen tekrar dene."},placeholders:{username:"Kullanıcı adını gir",password:"Şifreni gir"}},Nbe={title:"Hesap Oluştur",username:"Kullanıcı Adı",password:"Şifre",confirmPassword:"Şifreyi Onayla",submit:"Hesabı Oluştur",loading:"Hesap oluşturuluyor...",errors:{passwordMismatch:"Şifreler eşleşmiyor",usernameTaken:"Bu kullanıcı adı zaten alınmış",weakPassword:"Şifre çok zayıf"}},Ebe={title:"Çıkış Yap",confirm:"Çıkış yapmak istediğinden emin misin?",button:"Çıkış Yap"},Tbe={login:Cbe,register:Nbe,logout:Ebe},Abe={title:"Projeler",newProject:"Yeni Proje",deleteProject:"Projeyi Kaldır",renameProject:"Projeyi Yeniden Adlandır",noProjects:"Proje bulunamadı",loadingProjects:"Projeler yükleniyor...",searchPlaceholder:"Projelerde ara...",projectNamePlaceholder:"Proje adı",starred:"Yıldızlı",all:"Tümü",untitledSession:"Adsız Oturum",newSession:"Yeni Oturum",codexSession:"Codex Oturumu",fetchingProjects:"Claude projelerin ve oturumların getiriliyor",projects:"proje",detectedFromHistory:"Geçmişten algİlandİ",noMatchingProjects:"Eşleşen proje yok",tryDifferentSearch:"Arama terimini değiştirmeyi dene",runClaudeCli:"Başlamak için bir proje dizininde Claude CLI çalıştır"},jbe={title:"Pixcode",subtitle:"AI kodlama asistanı arayüzü"},Rbe={title:"Oturumlar",newSession:"Yeni Oturum",deleteSession:"Oturumu Sil",renameSession:"Oturumu Yeniden Adlandır",noSessions:"Henüz oturum yok",loadingSessions:"Oturumlar yükleniyor...",unnamed:"Adsız",loading:"Yükleniyor...",showMore:"Daha fazla oturum göster",startToSee:"Burada görmek için yeni bir oturum başlat."},Ibe={section:"Orkestrasyon",fallbackTitle:"Orkestrasyon çalışması"},_be={viewEnvironments:"Ortamları Görüntüle",hideSidebar:"Kenar çubuğunu gizle",createProject:"Yeni proje oluştur",refresh:"Projeleri ve oturumları yenile (Ctrl+R)",renameProject:"Projeyi yeniden adlandır (F2)",deleteProject:"Projeyi kenar çubuğundan kaldır (Delete)",addToFavorites:"Favorilere ekle",removeFromFavorites:"Favorilerden çıkar",editSessionName:"Oturum adını elle düzenle",deleteSession:"Bu oturumu kalıcı olarak sil",save:"Kaydet",cancel:"İptal",clearSearch:"Aramayı temizle",sessionActions:"Oturum işlemleri",historyView:"Geçmiş görünümü",historyViewFlat:"Son konuşmalar",historyViewGrouped:"Projeye göre gruplanmış"},Lbe={chat:"Sohbet",files:"Dosyalar",git:"Git",terminal:"Terminal",tasks:"Görevler"},Pbe={refresh:"Yenile",settings:"Ayarlar",collapseAll:"Tümünü Daralt",expandAll:"Tümünü Genişlet",cancel:"İptal",save:"Kaydet",delete:"Sil",rename:"Yeniden Adlandır",joinCommunity:"Topluluğa Katıl",reportIssue:"Sorun Bildir",starOnGithub:"GitHub'da Yıldızla",starSession:"Yıldızla",unstarSession:"Yıldızı kaldır",controlRoom:"Kontrol Odası",controlRoomDescription:"Yönetim, erişim, çalışmalar"},Dbe={openSource:"Açık Kaynak"},Obe={active:"Aktif",inactive:"Pasif",thinking:"Düşünüyor...",error:"Hata",aborted:"Durduruldu",unknown:"Bilinmiyor"},Mbe={justNow:"Az önce",oneMinuteAgo:"1 dakika önce",minutesAgo:"{{count}} dakika önce",oneHourAgo:"1 saat önce",hoursAgo:"{{count}} saat önce",oneDayAgo:"1 gün önce",daysAgo:"{{count}} gün önce",buckets:{today:"Bugün",yesterday:"Dün",thisWeek:"Son 7 gün",thisMonth:"Son 30 gün",older:"Daha eski"}},Fbe={deleteConfirm:"Bunu silmek istediğinden emin misin?",renameSuccess:"Yeniden adlandırma başarılı",deleteSuccess:"Silme başarılı",errorOccurred:"Bir hata oluştu",deleteSessionConfirm:"Bu oturumu silmek istediğinden emin misin? Bu işlem geri alınamaz.",deleteProjectConfirm:"Bu proje kenar çubuğundan kaldırılsın mı? Proje dosyaların, bellek verilerin ve oturum verilerin silinmeyecek.",enterProjectPath:"Lütfen bir proje yolu gir",deleteSessionFailed:"Oturum silinemedi. Lütfen tekrar dene.",deleteSessionError:"Oturum silinirken hata oluştu. Lütfen tekrar dene.",renameSessionFailed:"Oturum yeniden adlandırılamadı. Lütfen tekrar dene.",renameSessionError:"Oturum yeniden adlandırılırken hata oluştu. Lütfen tekrar dene.",deleteProjectFailed:"Proje kaldırılamadı. Lütfen tekrar dene.",deleteProjectError:"Proje kaldırılırken hata oluştu. Lütfen tekrar dene.",createProjectFailed:"Proje oluşturulamadı. Lütfen tekrar dene.",createProjectError:"Proje oluşturulurken hata oluştu. Lütfen tekrar dene."},zbe={updateAvailable:"Güncelleme mevcut"},Bbe={modeProjects:"Projeler",modeConversations:"Konuşmalar",conversationsPlaceholder:"Konuşmalarda ara...",searching:"Aranıyor...",noResults:"Sonuç bulunamadı",tryDifferentQuery:"Farklı bir arama sorgusu dene",matches_one:"{{count}} eşleşme",matches_other:"{{count}} eşleşme",projectsScanned_one:"{{count}} proje tarandı",projectsScanned_other:"{{count}} proje tarandı"},Ube={deleteProject:"Projeyi Kaldır",deleteSession:"Oturumu Sil",confirmDelete:"Ne yapmak istersin:",sessionCount_one:"Bu proje {{count}} konuşma içeriyor.",sessionCount_other:"Bu proje {{count}} konuşma içeriyor.",removeFromSidebar:"Yalnızca kenar çubuğundan kaldır",deleteAllData:"Tüm veriyi kalıcı olarak sil",allConversationsDeleted:"Proje kenar çubuğundan kaldırılacak. Dosyaların, bellek verilerin ve oturum verilerin korunacak.",cannotUndo:"Projeyi sonra tekrar ekleyebilirsin."},$be={flat:"Son",grouped:"Projeye göre"},Hbe={projects:Abe,app:jbe,sessions:Rbe,orchestration:Ibe,tooltips:_be,navigation:Lbe,actions:Pbe,branding:Dbe,status:Obe,time:Mbe,messages:Fbe,version:zbe,search:Bbe,deleteConfirmation:Ube,historyView:$be},Gbe={copy:"Kopyala",copied:"Kopyalandı",copyCode:"Kodu kopyala"},Vbe={copy:"Mesajı kopyala",copied:"Mesaj kopyalandı",selectFormat:"Kopyalama biçimini seç",copyAsMarkdown:"Markdown olarak kopyala",copyAsText:"Metin olarak kopyala"},Wbe={user:"S",error:"Hata",tool:"Araç",claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code"},qbe={settings:"Araç Ayarları",error:"Araç Hatası",result:"Araç Sonucu",viewParams:"Girdi parametrelerini göster",viewRawParams:"Ham parametreleri göster",viewDiff:"Düzenleme diff'ini göster:",creatingFile:"Yeni dosya oluşturuluyor:",updatingTodo:"Yapılacaklar Listesi güncelleniyor",read:"Okundu",readFile:"Dosyayı oku",updateTodo:"Yapılacaklar listesini güncelle",readTodo:"Yapılacaklar listesini oku",searchResults:"sonuç"},Kbe={found:"{{count}} {{type}} bulundu",file:"dosya",files:"dosya",pattern:"desen:",in:"şurada:"},Ybe={updated:"Dosya başarıyla güncellendi",created:"Dosya başarıyla oluşturuldu",written:"Dosya başarıyla yazıldı",diff:"Diff",newFile:"Yeni Dosya",viewContent:"Dosya içeriğini göster",viewFullOutput:"Tam çıktıyı göster ({{count}} karakter)",contentDisplayed:"Dosya içeriği yukarıdaki diff görünümünde gösteriliyor"},Zbe={title:"Etkileşimli Prompt",waiting:"CLI'da yanıtın bekleniyor",instruction:"Lütfen Claude'un çalıştığı terminalde bir seçenek seç.",selectedOption:"✓ Claude {{number}} numaralı seçeneği seçti",instructionDetail:"CLI'da bu seçeneği ok tuşları veya numara girerek interaktif olarak seçebilirsin."},Xbe={title:"Düşünüyor...",emoji:"💭 Düşünüyor..."},Jbe={response:"JSON Yanıtı"},Qbe={grant:"{{tool}} için izin ver",added:"İzin eklendi",addTo:"{{entry}} İzin Verilen Araçlar listesine ekleniyor.",retry:"İzin kaydedildi. Aracı kullanmak için isteği tekrar dene.",error:"İzinler güncellenemedi. Lütfen tekrar dene.",openSettings:"Ayarları aç"},exe={updated:"Yapılacaklar listesi başarıyla güncellendi",current:"Mevcut Yapılacaklar Listesi"},txe={viewPlan:"📋 Uygulama planını göster",title:"Uygulama Planı"},nxe={resetAt:"Claude kullanım limitin doldu. Limitin **{{time}} {{timezone}}** — {{date}} tarihinde sıfırlanacak"},rxe={permissionMode:"İzin Modu",modes:{default:"Varsayılan Mod",acceptEdits:"Düzenlemeleri Kabul Et",bypassPermissions:"İzinleri Atla",plan:"Plan Modu"},descriptions:{default:"Sadece güvenilir komutlar (ls, cat, grep, git status, vb.) otomatik çalışır. Diğer komutlar atlanır. Çalışma alanına yazabilir.",acceptEdits:"Tüm komutlar çalışma alanı içinde otomatik çalışır. Sandbox'lu çalıştırma ile tam otomatik mod.",bypassPermissions:"Kısıtlama olmadan tam sistem erişimi. Tüm komutlar tam disk ve ağ erişimiyle otomatik çalışır. Dikkatli kullan.",plan:"Planlama modu — hiçbir komut çalıştırılmaz"},technicalDetails:"Teknik ayrıntılar"},axe={permissionMode:"Gemini İzin Modu",description:"Gemini CLI'ın işlem onaylarını nasıl yönettiğini kontrol et.",modes:{default:{title:"Standart (Onay İste)",description:"Gemini, komut çalıştırmadan, dosya yazmadan ve web kaynağı getirmeden önce onay ister."},autoEdit:{title:"Otomatik Düzenleme (Dosya Onaylarını Atla)",description:"Gemini dosya düzenlemelerini ve web getirmelerini otomatik onaylar, ama shell komutları için yine de onay ister."},yolo:{title:"YOLO (Tüm İzinleri Atla)",description:"Gemini tüm işlemleri onay almadan çalıştırır. Dikkatli kullan."}}},ixe={permissionMode:"Qwen İzin Modu",description:"Qwen Code'un işlem onaylarını nasıl yönettiğini kontrol et.",modes:{default:{title:"Standart (Onay İste)",description:"Qwen Code, komut çalıştırmadan, dosya yazmadan ve web kaynağı getirmeden önce onay ister."},autoEdit:{title:"Otomatik Düzenleme (Dosya Onaylarını Atla)",description:"Qwen Code dosya düzenlemelerini ve web getirmelerini otomatik onaylar, ama shell komutları için yine de onay ister."},yolo:{title:"YOLO (Tüm İzinleri Atla)",description:"Qwen Code tüm işlemleri onay almadan çalıştırır. Dikkatli kullan."}}},sxe={placeholder:"Komutlar için /, dosyalar için @ yaz ya da {{provider}}'a her şeyi sor...",placeholderDefault:"Mesajını yaz...",disabled:"Girdi devre dışı",attachFiles:"Dosya ekle",attachImages:"Resim ekle",send:"Gönder",stop:"Durdur",clickToChangeMode:"İzin modunu değiştirmek için tıkla (veya girdide Tab tuşuna bas)",showAllCommands:"Tüm komutları göster",clearInput:"Girdiyi temizle",scrollToBottom:"En alta git"},oxe={selector:{title:"Düşünme Modu",description:"Uzatılmış düşünme, Claude'a alternatifleri değerlendirmek için daha fazla zaman verir",active:"Aktif",tip:"Daha yüksek düşünme modları daha fazla zaman alır ama daha kapsamlı analiz sağlar"},modes:{none:{name:"Standart",description:"Normal Claude yanıtı",prefix:""},think:{name:"Düşün",description:"Temel uzatılmış düşünme",prefix:"think"},thinkHard:{name:"Daha Fazla Düşün",description:"Daha kapsamlı değerlendirme",prefix:"think hard"},thinkHarder:{name:"Derin Düşün",description:"Alternatiflerle derin analiz",prefix:"think harder"},ultrathink:{name:"Ultra Düşün",description:"Maksimum düşünme bütçesi",prefix:"ultrathink"}},buttonTitle:"Düşünme modu: {{mode}}"},lxe={title:"AI Asistanını Seç",description:"Yeni bir konuşma başlatmak için bir sağlayıcı seç",selectModel:"Model Seç",statusUnavailable:"Durum alınamadı",statusRetryHint:"Bu CLI kontrol edilemedi. Yeniden denemek için dokun.",retryStatus:"Durumu yenile",providerInfo:{anthropic:"Anthropic tarafından",openai:"OpenAI tarafından",cursorEditor:"AI Kod Editörü",google:"Google tarafından"},readyPrompt:{claude:"Claude'u {{model}} ile kullanmaya hazır. Mesajını aşağıya yazmaya başla.",cursor:"Cursor'ı {{model}} ile kullanmaya hazır. Mesajını aşağıya yazmaya başla.",codex:"Codex'i {{model}} ile kullanmaya hazır. Mesajını aşağıya yazmaya başla.",gemini:"Gemini'yi {{model}} ile kullanmaya hazır. Mesajını aşağıya yazmaya başla.",default:"Başlamak için yukarıdan bir sağlayıcı seç"}},cxe={continue:{title:"Konuşmana devam et",description:"Kodun hakkında soru sor, değişiklik iste veya geliştirme görevlerinde yardım al"},loading:{olderMessages:"Eski mesajlar yükleniyor...",sessionMessages:"Oturum mesajları yükleniyor..."},messages:{showingOf:"{{total}} mesajdan {{shown}} tanesi gösteriliyor",scrollToLoad:"Daha fazlasını yüklemek için yukarı kaydır",showingLast:"Son {{count}} mesaj gösteriliyor ({{total}} toplam)",loadEarlier:"Önceki mesajları yükle",loadAll:"Tüm mesajları yükle",loadingAll:"Tüm mesajlar yükleniyor...",allLoaded:"Tüm mesajlar yüklendi",perfWarning:'Tüm mesajlar yüklendi — kaydırma yavaşlayabilir. Performansı geri getirmek için "En alta git"e tıkla.'}},dxe={selectProject:{title:"Proje Seç",description:"O dizinde etkileşimli shell açmak için bir proje seç"},status:{newSession:"Yeni Oturum",initializing:"Başlatılıyor...",restarting:"Yeniden başlatılıyor..."},actions:{disconnect:"Bağlantıyı Kes",disconnectTitle:"Shell bağlantısını kes",restart:"Yeniden Başlat",restartTitle:"Shell'i yeniden başlat (önce bağlantıyı kes)",connect:"Shell'de Devam Et",connectTitle:"Shell'e bağlan"},loading:"Terminal yükleniyor...",connecting:"Shell'e bağlanılıyor...",startSession:"Yeni bir Claude oturumu başlat",startProviderSession:"Yeni bir {{provider}} oturumu baslat",resumeSession:"Oturuma devam et: {{displayName}}...",runCommand:"{{projectName}} içinde {{command}} çalıştır",startCli:"{{projectName}} içinde Claude CLI başlatılıyor",startProviderCli:"{{projectName}} icinde {{provider}} baslatiliyor",defaultCommand:"komut"},uxe={actions:{thinking:"Düşünüyor",processing:"İşliyor",analyzing:"Analiz ediyor",working:"Çalışıyor",computing:"Hesaplıyor",reasoning:"Mantık yürütüyor"},state:{live:"Canlı",paused:"Duraklatıldı"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}d {{seconds}}s",label:"{{time}} geçti",startingNow:"Şimdi başlıyor"},controls:{stopGeneration:"Üretmeyi Durdur",pressEscToStop:"Durdurmak için istediğin zaman Esc'ye bas"},providers:{assistant:"Asistan"}},pxe={startChatWithProvider:"{{provider}} ile sohbet etmeye başlamak için bir proje seç"},mxe={nextTaskPrompt:"Sonraki görevi başlat"},hxe={codeBlock:Gbe,copyMessage:Vbe,messageTypes:Wbe,tools:qbe,search:Kbe,fileOperations:Ybe,interactive:Zbe,thinking:Xbe,json:Jbe,permissions:Qbe,todo:exe,plan:txe,usageLimit:nxe,codex:rxe,gemini:axe,qwen:ixe,input:sxe,thinkingMode:oxe,providerSelection:lxe,session:cxe,shell:dxe,claudeStatus:uxe,projectSelection:pxe,tasks:mxe},fxe={changes:"değişiklik",previousChange:"Önceki değişiklik",nextChange:"Sonraki değişiklik",hideDiff:"Diff vurgusunu gizle",showDiff:"Diff vurgusunu göster",settings:"Editör Ayarları",collapse:"Editörü daralt",expand:"Editörü tüm genişliğe aç"},gxe="{{fileName}} yükleniyor...",bxe={showingChanges:"Diff"},xxe={download:"Dosyayı indir",save:"Kaydet",saving:"Kaydediliyor...",saved:"Kaydedildi!",exitFullscreen:"Tam ekrandan çık",fullscreen:"Tam ekran",close:"Kapat",previewMarkdown:"Markdown önizle",editMarkdown:"Markdown düzenle"},vxe={lines:"Satır:",characters:"Karakter:",shortcuts:"Kaydetmek için Ctrl+S • Kapatmak için Esc"},yxe={title:"Binary Dosya",message:'"{{fileName}}" dosyası binary olduğu için metin editöründe gösterilemez.'},wxe={toolbar:fxe,loading:gxe,header:bxe,actions:xxe,footer:vxe,binaryFile:yxe},kxe={title:"TaskMaster AI yapılandırılmamış",description:"TaskMaster, karmaşık projeleri AI destekli yardımla yönetilebilir görevlere böler",whatIsTitle:"🎯 TaskMaster nedir?",features:{aiPowered:"AI Destekli Görev Yönetimi: Karmaşık projeleri yönetilebilir alt görevlere böl",prdTemplates:"PRD Şablonları: Ürün Gereksinim Belgelerinden görev üret",dependencyTracking:"Bağımlılık Takibi: Görev ilişkilerini ve çalıştırma sırasını anla",progressVisualization:"İlerleme Görselleştirme: Kanban panoları ve detaylı görev analizleri",cliIntegration:"CLI Entegrasyonu: İleri seviye iş akışları için taskmaster komutlarını kullan"},initializeButton:"TaskMaster AI'yi Başlat"},Sxe={title:"TaskMaster'a Başlarken",subtitle:"TaskMaster hazır! Sıradaki adımların:",steps:{createPRD:{title:"Ürün Gereksinim Belgesi (PRD) oluştur",description:"Proje fikrini konuş ve ne inşa etmek istediğini anlatan bir PRD yaz.",addButton:"PRD Ekle",existingPRDs:"Mevcut PRD'ler:"},generateTasks:{title:"PRD'den Görev Üret",description:"PRD'n hazır olduğunda AI asistanına ayrıştırmasını söyle; TaskMaster bunu otomatik olarak uygulama detaylarıyla yönetilebilir görevlere bölecek."},analyzeTasks:{title:"Görevleri Analiz Et ve Genişlet",description:"AI asistanına görev karmaşıklığını analiz etmesini ve uygulamayı kolaylaştırmak için detaylı alt görevlere ayırmasını söyle."},startBuilding:{title:"İnşaya Başla",description:"AI asistanına görevler üzerinde çalışmaya başlamasını, durumlarını güncellemesini ve proje geliştikçe yeni görevler eklemesini söyle."}},tip:"💡 İpucu: TaskMaster'ın AI destekli görev üretiminden en iyi şekilde faydalanmak için bir PRD ile başla"},Cxe={title:"TaskMaster Kurulumu",subtitle:"{{projectName}} için interaktif CLI",willStart:"TaskMaster başlatma otomatik olarak başlayacak",completed:"TaskMaster kurulumu tamamlandı! Bu pencereyi kapatabilirsin.",closeButton:"Kapat",closeContinueButton:"Kapat ve Devam Et"},Nxe={title:"TaskMaster'a Başlarken",subtitle:"Verimli görev yönetimi için rehberin",examples:{parsePRD:`💬 Örnek:
|
|
835
835
|
"Claude Task Master ile yeni bir proje başlattım. .taskmaster/docs/prd.txt altında bir PRD'm var. Bunu ayrıştırıp ilk görevleri kurmama yardım eder misin?"`,expandTask:`💬 Örnek:
|
|
836
836
|
"Görev 5 karmaşık görünüyor. Bunu alt görevlere bölebilir misin?"`,addTask:`💬 Örnek:
|
|
837
837
|
"Lütfen Cloudinary kullanarak kullanıcı profil resmi yükleme özelliği için yeni bir görev ekle, en iyi yaklaşımı araştır."`},moreExamples:"Daha fazla örnek ve kullanım deseni →",proTips:{title:"💡 Pro İpuçları",search:"Belirli görevleri hızlıca bulmak için arama çubuğunu kullan",views:"Kanban, Liste ve Izgara görünümleri arasında geçiş yapmak için görünüm düğmelerini kullan",filters:"Belirli görev durumlarına veya önceliklere odaklanmak için filtreleri kullan",details:"Detaylı bilgi görmek ve alt görevleri yönetmek için herhangi bir göreve tıkla"},learnMore:{title:"📚 Daha Fazla Öğren",description:"TaskMaster AI, geliştiriciler için inşa edilmiş ileri seviye bir görev yönetim sistemidir. Dokümantasyona, örneklere bak ve projeye katkıda bulun.",githubButton:"GitHub'da Görüntüle"}},Exe={placeholder:"Görevlerde ara..."},Txe={button:"Filtreler",status:"Durum",priority:"Öncelik",sortBy:"Sıralama",allStatuses:"Tüm Durumlar",allPriorities:"Tüm Öncelikler",showing:"{{total}} görevin {{filtered}} tanesi gösteriliyor",clearFilters:"Filtreleri Temizle"},Axe={id:"ID",status:"Durum",priority:"Öncelik",idAsc:"ID (Artan)",idDesc:"ID (Azalan)",titleAsc:"Başlık (A-Z)",titleDesc:"Başlık (Z-A)",statusAsc:"Durum (Önce Bekleyen)",statusDesc:"Durum (Önce Tamamlanan)",priorityAsc:"Öncelik (Önce Yüksek)",priorityDesc:"Öncelik (Önce Düşük)"},jxe={kanban:"Kanban görünümü",list:"Liste görünümü",grid:"Izgara görünümü"},Rxe={pending:"📋 Yapılacak",inProgress:"🚀 Sürüyor",done:"✅ Tamamlandı",blocked:"🚫 Engellendi",deferred:"⏳ Ertelendi",cancelled:"❌ İptal Edildi",noTasksYet:"Henüz görev yok",tasksWillAppear:"Görevler burada görünecek",moveTasksHere:"Başlayan görevleri buraya taşı",completedTasksHere:"Tamamlanan görevler burada görünür",statusTasksHere:"Bu durumdaki görevler burada görünecek"},Ixe={help:"TaskMaster Başlangıç Rehberi",prds:"PRD'ler",addPRD:"PRD Ekle",addTask:"Görev Ekle",createNewPRD:"Yeni PRD Oluştur",prdsAvailable:"{{count}} PRD mevcut"},_xe={modified:"Değişiklik: {{date}}"},Lxe={pending:"Beklemede","in-progress":"Sürüyor",done:"Tamamlandı",blocked:"Engellendi",deferred:"Ertelendi",cancelled:"İptal Edildi"},Pxe={high:"Yüksek",medium:"Orta",low:"Düşük"},Dxe={title:"Filtrelerine uygun görev yok",description:"Arama veya filtre kriterlerini değiştirmeyi dene."},Oxe={notConfigured:kxe,gettingStarted:Sxe,setupModal:Cxe,helpGuide:Nxe,search:Exe,filters:Txe,sort:Axe,views:jxe,kanban:Rxe,buttons:Ixe,prd:_xe,statuses:Lxe,priorities:Pxe,noMatchingTasks:Dxe},Mxe={save:"Salva",cancel:"Annulla",delete:"Elimina",create:"Crea",edit:"Modifica",close:"Chiudi",confirm:"Conferma",submit:"Invia",retry:"Riprova",refresh:"Aggiorna",search:"Cerca",clear:"Cancella",copy:"Copia",download:"Scarica",upload:"Carica",browse:"Sfoglia"},Fxe={chat:"Chat",shell:"Terminale",files:"File",git:"Controllo Versione",changes:"Modifiche",liveView:"Vista live",tasks:"Attività",remote:"Remote",controlRoom:"Controllo",orchestration:"Orchestrazione"},zxe={loading:"Caricamento...",success:"Completato",error:"Errore",failed:"Fallito",pending:"In attesa",completed:"Completato",inProgress:"In corso"},Bxe={savedSuccessfully:"Salvato con successo",deletedSuccessfully:"Eliminato con successo",updatedSuccessfully:"Aggiornato con successo",operationFailed:"Operazione fallita",networkError:"Errore di rete. Controlla la tua connessione.",unauthorized:"Non autorizzato. Effettua l'accesso.",notFound:"Non trovato",invalidInput:"Input non valido",requiredField:"Questo campo è obbligatorio",unknownError:"Si è verificato un errore sconosciuto"},Uxe={settings:"Impostazioni",home:"Home",back:"Indietro",next:"Avanti",previous:"Precedente",logout:"Esci"},$xe={language:"Lingua",theme:"Tema",darkMode:"Modalità scura",lightMode:"Modalità chiara",name:"Nome",description:"Descrizione",enabled:"Abilitato",disabled:"Disabilitato",optional:"Opzionale",version:"Versione",select:"Seleziona",selectAll:"Seleziona tutto",deselectAll:"Deseleziona tutto"},Hxe={justNow:"Adesso",minutesAgo:"{{count}} min fa",hoursAgo:"{{count}} ore fa",daysAgo:"{{count}} giorni fa",yesterday:"Ieri"},Gxe={newFile:"Nuovo file",newFolder:"Nuova cartella",rename:"Rinomina",move:"Sposta",copyPath:"Copia percorso",openInEditor:"Apri nell'editor"},Vxe={loading:"Caricamento Pixcode",settingUpWorkspace:"Preparazione dell'area di lavoro...",chooseProject:"Scegli il tuo progetto",selectProjectDescription:"Seleziona un progetto dalla barra laterale per iniziare a programmare con Claude. Ogni progetto contiene le tue sessioni di chat e la cronologia dei file.",tip:"Suggerimento",createProjectMobile:"Tocca il pulsante menu in alto per accedere ai progetti",createProjectDesktop:"Crea un nuovo progetto cliccando l'icona cartella nella barra laterale",newSession:"Nuova sessione",untitledSession:"Sessione senza titolo",projectFiles:"File del progetto",landing:{title:"Avvia uno spazio di lavoro Pixcode",description:"Scegli un progetto, avvia una nuova chat oppure lancia l’Orchestrazione con un solo obiettivo. L’Orchestrazione gestisce gli agenti CLI selezionati, mostra ogni passaggio e rende visibili gli errori.",startOrchestration:"Avvia Orchestrazione",startOrchestrationDescription:"Crea automaticamente un progetto e apre la schermata Orchestrazione con controllo agenti e cronologia.",startChat:"Avvia una nuova chat",startChatDescription:"Crea automaticamente una cartella e apre la chat normale con un agente.",sidebarHint:"Quando selezioni un progetto esistente dalla barra laterale, cronologia chat, file, stato git, attività e orchestrazione restano nella stessa schermata principale."}},Wxe={loading:"Caricamento file...",files:"File",simpleView:"Vista semplice",compactView:"Vista compatta",detailedView:"Vista dettagliata",searchPlaceholder:"Cerca file e cartelle...",clearSearch:"Cancella ricerca",name:"Nome",size:"Dimensione",modified:"Modificato",permissions:"Permessi",noFilesFound:"Nessun file trovato",checkProjectPath:"Verifica che il percorso del progetto sia accessibile",noMatchesFound:"Nessuna corrispondenza trovata",tryDifferentSearch:"Prova con un termine di ricerca diverso o cancella la ricerca",justNow:"adesso",minAgo:"{{count}} min fa",hoursAgo:"{{count}} ore fa",daysAgo:"{{count}} giorni fa",newFile:"Nuovo file (Cmd+N)",newFolder:"Nuova cartella (Cmd+Shift+N)",refresh:"Aggiorna",collapseAll:"Comprimi tutto",context:{rename:"Rinomina",delete:"Elimina",copyPath:"Copia percorso",download:"Scarica",newFile:"Nuovo file",newFolder:"Nuova cartella",refresh:"Aggiorna",menuLabel:"Menu contestuale file",loading:"Caricamento..."}},qxe={title:"Crea nuovo progetto",steps:{type:"Tipo",configure:"Configura",confirm:"Conferma"},step1:{question:"Hai già un'area di lavoro o vuoi crearne una nuova?",existing:{title:"Area di lavoro esistente",description:"Ho già un'area di lavoro sul mio server e devo solo aggiungerla alla lista dei progetti"},new:{title:"Nuova area di lavoro",description:"Crea una nuova area di lavoro, opzionalmente clonando da un repository GitHub"},githubClone:{title:"Clona da GitHub",description:"Scegli una cartella di destinazione e clona un repository al suo interno"},subfolder:{title:"Crea sottocartella",description:"Scegli una cartella padre e crea al suo interno una nuova sottocartella"}},step2:{existingPath:"Percorso area di lavoro",newPath:"Percorso area di lavoro",subfolderParentPath:"Cartella padre",subfolderParentHelp:"Percorso della cartella in cui verrà creata la nuova sottocartella",subfolderName:"Nome sottocartella",subfolderNameHelp:"Una cartella con questo nome verrà creata nella cartella padre",existingPlaceholder:"/percorso/area-di-lavoro/esistente",newPlaceholder:"/percorso/nuova/area-di-lavoro",existingHelp:"Percorso completo della directory dell'area di lavoro esistente",newHelp:"Percorso completo della directory dell'area di lavoro",githubUrl:"URL GitHub (opzionale)",githubPlaceholder:"https://github.com/utente/repository",githubHelp:"Opzionale: fornisci un URL GitHub per clonare un repository",githubAuth:"Autenticazione GitHub (opzionale)",githubAuthHelp:"Richiesta solo per repository privati. I repository pubblici possono essere clonati senza autenticazione.",loadingTokens:"Caricamento token salvati...",storedToken:"Token salvato",newToken:"Nuovo token",nonePublic:"Nessuno (pubblico)",selectToken:"Seleziona token",selectTokenPlaceholder:"-- Seleziona un token --",tokenPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",tokenHelp:"Questo token verrà utilizzato solo per questa operazione",publicRepoInfo:"I repository pubblici non richiedono autenticazione. Puoi saltare il token se stai clonando un repository pubblico.",noTokensHelp:"Nessun token salvato disponibile. Puoi aggiungere token in Impostazioni → Chiavi API per un riutilizzo più semplice.",optionalTokenPublic:"Token GitHub (opzionale per repository pubblici)",tokenPublicPlaceholder:"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (lascia vuoto per repository pubblici)"},step3:{reviewConfig:"Rivedi la tua configurazione",workspaceType:"Tipo area di lavoro:",existingWorkspace:"Area di lavoro esistente",newWorkspace:"Nuova area di lavoro",subfolderWorkspace:"Nuova sottocartella",path:"Percorso:",parentPath:"Percorso padre:",subfolderName:"Nome sottocartella:",cloneFrom:"Clona da:",authentication:"Autenticazione:",usingStoredToken:"Usando token salvato:",usingProvidedToken:"Usando token fornito",noAuthentication:"Nessuna autenticazione",sshKey:"Chiave SSH",existingInfo:"L'area di lavoro verrà aggiunta alla lista dei progetti e sarà disponibile per le sessioni Claude/Cursor.",newWithClone:"Il repository verrà clonato da questa cartella.",newEmpty:"L'area di lavoro verrà aggiunta alla lista dei progetti e sarà disponibile per le sessioni Claude/Cursor.",subfolderInfo:"Una nuova sottocartella verrà creata nella cartella padre e aggiunta al tuo elenco progetti.",cloningRepository:"Clonazione repository..."},buttons:{cancel:"Annulla",back:"Indietro",next:"Avanti",createProject:"Crea progetto",creating:"Creazione...",cloning:"Clonazione..."},errors:{selectType:"Seleziona se hai un'area di lavoro esistente o vuoi crearne una nuova",providePath:"Fornisci un percorso per l'area di lavoro",provideSubfolderName:"Fornisci un nome per la sottocartella",subfolderNameInvalid:"Il nome della sottocartella non può contenere separatori di percorso o essere . / ..",failedToCreate:"Impossibile creare l'area di lavoro",failedToCreateFolder:"Impossibile creare la cartella"}},Kxe={genericTool:"uno strumento",codes:{generic:{info:{title:"Notifica"}},permission:{required:{title:"Azione richiesta",body:"{{toolName}} è in attesa della tua decisione."}},run:{stopped:{title:"Esecuzione interrotta",body:"Motivo: {{reason}}"},failed:{title:"Esecuzione fallita"}},agent:{notification:{title:"Notifica agente"}}},open:"Apri notifiche",title:"Notifiche",markRead:"Letto",close:"Chiudi notifiche",dismiss:"Ignora notifica"},Yxe={title:"Aggiornamento disponibile",newVersionReady:"Una nuova versione è pronta",currentVersion:"Versione attuale",latestVersion:"Ultima versione",whatsNew:"Novità:",viewFullRelease:"Vedi release completa",updateProgress:"Progresso aggiornamento:",manualUpgrade:"Aggiornamento manuale:",npmUpgradeCommand:"npm install -g @pixelbyte-software/pixcode@latest",pixcodeUpgradeCommand:"pixcode update --restart-daemon",manualUpgradeHint:`Oppure clicca "Aggiorna ora" per eseguire l'aggiornamento automaticamente.`,updateCompleted:"Aggiornamento completato con successo!",restartServer:"Riavvia il server per applicare le modifiche.",updateFailed:"Aggiornamento fallito",buttons:{close:"Chiudi",later:"Più tardi",copyCommand:"Copia comando",updateNow:"Aggiorna ora",updating:"Aggiornamento..."},ariaLabels:{closeModal:"Chiudi finestra aggiornamento versione",showSidebar:"Mostra barra laterale",settings:"Impostazioni",updateAvailable:"Aggiornamento disponibile",closeSidebar:"Chiudi barra laterale"}},Zxe={title:"Orchestrazione",subtitle:"Pixcode puo coordinare controlli locali, test, lavoro nel terminale e operazioni di progetto per {{project}}.",refresh:"Aggiorna",goal:"Obiettivo",goalPlaceholder:"Esempio: correggi la schermata auth per il deployment su porta singola, cattura gli errori e verifica con lint e typecheck.",mode:"Modalità di esecuzione",systemPlan:"Piano di sistema",noMode:"Nessuna modalità selezionata",loadingPlan:"Caricamento piano agenti.",start:"Avvia team",starting:"Avvio in corso",needAgent:"Abilita almeno un worker CLI.",startFailed:"Impossibile avviare il workflow.",cliControl:"Controllo team CLI",enabledCount:"{{count}} attivi",enabled:"Attivo",disabled:"Disattivo",history:"Cronologia",emptyHistory:"Nessuna esecuzione. Scrivi un obiettivo e avvia gli agenti.",steps:"{{done}}/{{total}} passaggi",notSelected:"Nessuna esecuzione selezionata",notSelectedDescription:"Seleziona un’esecuzione precedente o avvia un nuovo obiettivo. Qui appaiono messaggi degli agenti, errori, riepiloghi modifiche e anteprime.",loadFailed:"Impossibile caricare i dettagli dell’esecuzione.",loadingRun:"Caricamento esecuzione...",agentSteps:"Passaggi agenti",noStepOutput:"Nessun output del passaggio.",agentMessages:"Messaggi agenti",noAgentMessages:"Questo agente non ha ancora prodotto messaggi. Se l’esecuzione è fallita, l’errore CLI reale appare sopra.",outputs:"Output",noOutputs:"Nessun riepilogo modifiche, anteprima o output comando.",open:"Apri",artifact:{fileDiff:"Riepilogo modifiche",previewUrl:"Anteprima",commandOutput:"Output comando"},role:{user:"Utente",agent:"Agente"},status:{queued:"In coda",running:"In esecuzione",completed:"Completato",failed:"Errore",canceled:"Annullato",skipped:"Saltato"},nodes:{codex_review:"Revisione Codex",gemini_review:"Revisione Gemini",claude_review:"Revisione Claude",claude_code_review:"Revisione Claude",cursor_review:"Revisione Cursor",aggregate:"Aggregazione",architect:"Pianificazione",implement:"Implementazione",review:"Revisione",proposal:"Proposta",critique:"Critica",response:"Risposta",judge:"Decisione",coordinator:"Coordinatore",final_report:"Report finale"},workflows:{multi_model_review:{name:"Revisione multi-modello",description:"Gli agenti CLI attivi revisionano separatamente lo stesso obiettivo, poi un agente attivo aggrega il risultato."},sequential_handoff:{name:"Passaggio sequenziale",description:"Gli agenti pianificano, implementano e revisionano in ordine. I passaggi CLI disattivati vengono saltati."},adversarial_debate:{name:"Dibattito decisionale",description:"Gli agenti propongono, criticano, rispondono e producono una raccomandazione finale."},agent_team:{name:"Team agenti",description:"Un coordinatore legge obiettivo e istanze CLI attive, assegna il lavoro e raccoglie il risultato."}},adapters:{"claude-code":{label:"Claude Code",role:"Worker CLI"},cursor:{label:"Cursor",role:"Worker CLI"},codex:{label:"Codex",role:"Worker CLI"},gemini:{label:"Gemini",role:"Worker CLI"},qwen:{label:"Qwen Code",role:"Worker CLI"},opencode:{label:"OpenCode",role:"Worker CLI"}},activeCount:"{{active}}/{{total}} attivi",teamHint:"Ogni riga è un worker CLI. Puoi creare più worker Claude, Codex, Cursor, Gemini, Qwen o OpenCode e dare a ciascuno un incarico diverso.",parallelLimit:"Limite parallelo",addAgent:"Aggiungi {{agent}}",duplicateAgent:"Duplica {{agent}}",removeAgent:"Rimuovi {{agent}}",assignment:"Incarico",assignmentPlaceholder:"Opzionale: indica esattamente cosa deve gestire questo worker. Lascia vuoto per far assegnare al coordinatore.",agentInstance:"{{name}} #{{number}}",taskTitle:"Attività",taskTitlePlaceholder:"Implementa funzionalità",taskDescription:"Descrizione",taskDescriptionPlaceholder:"Ambito, vincoli, output atteso",addTask:"Aggiungi",runTask:"Esegui",cancelTask:"Annulla",dispatchTask:"Assegna attività",adapter:"Adapter",isolation:"Isolamento",dispatch:"Assegna",auto:"Automatico",waitingForStream:"In attesa dello stream...",workflow:"Workflow",input:"Input",taskStates:{todo:"Da fare",in_progress:"In corso",in_review:"In revisione",done:"Completato",failed:"Fallito",canceled:"Annullato"},isolationKind:{worktree:"Worktree",host:"Host",docker:"Docker"},stop:"Ferma team",stopping:"Arresto...",cancelFailed:"Impossibile fermare il workflow.",needRoles:"Assegna almeno un agente attivo a questi ruoli per questa modalità: {{roles}}.",quickPrompts:{label:"Prompt rapido:",liveTrading:{label:"Schermata trading live 8024",prompt:"Ciao, crea un piccolo progetto e poi avvialo sulla porta 8024. Voglio un design in stile TradingView collegato a Binance FAPI, con grafico TradingView e sistema di preferiti/stelle a sinistra. Dividi il lavoro in modo logico e gestisci automaticamente il processo."}},teamHistory:"Cronologia team",changeSummary:"Riepilogo modifiche",noChangeSummary:"Il riepilogo finale non è ancora pronto. Un riepilogo Markdown leggibile apparirà qui quando gli agenti avranno finito.",prepareTeamFromReport:"Prepara team agenti da questo report",prepareTeamTitle:"Prepara prompt team agenti",prepareTeamDescription:"L’output della discussione è stato trasformato in un nuovo prompt Agent Team. Modificalo e poi spostalo in modalità Agent Team.",usePreparedPrompt:"Usa prompt",reportToPromptPrefix:"Prepara ed esegui un team di agenti dal seguente report di discussione/decisione. Dividi le necessità in attività, proponi assegnazioni sensate per gli agenti CLI disponibili e avvia solo dopo conferma dell’utente.",generatedSummaryTitle:"Riepilogo automatico esecuzione",summaryStatus:"Stato generale",summarySteps:"Passaggi completati",summaryFailures:"Passaggi falliti",summaryCanceled:"Passaggi annullati",summaryDiffs:"Output diff/modifiche",summaryPreviews:"Output anteprima",summaryErrorPrefix:"Errore",assignedWork:"Lavoro assegnato",autoAssigned:"Automatico / decide il coordinatore",stages:{coordinator:"Coordinatore",handoff:"Passaggio",backend:"Backend",frontend:"Frontend",implementation:"Implementazione",review:"Revisione",repair:"Correzione",proposal:"Proposta",critique:"Critica",response:"Risposta",decision:"Decisione",report:"Report",final_report:"Report finale"},agentRole:"Fase",agentRoles:{auto:"Automatico",backend:"Backend",frontend:"Frontend",review:"Test / revisione",implementation:"Implementazione",proposal:"Proposta",critique:"Critica",response:"Risposta",decision:"Decisione / report",report:"Report",custom:"Personalizzato"},customRolePlaceholder:"Es. Sicurezza, UX mobile, architettura DB",roleHints:{default:"Lascia vuoto e il coordinatore assegnerà questo agente in base all’obiettivo.",agent_team:"Scegli fasi backend, frontend o revisione, oppure lascia gli agenti in automatico.",multi_model_review:"Gli agenti attivi revisionano; se è selezionato un ruolo report, quell’agente aggrega il riepilogo finale.",sequential_handoff:"Gli agenti lavorano nell’ordine scelto; il testo attività definisce ogni passaggio.",adversarial_debate:"La selezione della fase è opzionale nella discussione decisionale; se vuota, il sistema assegna gli agenti selezionati a Proposta, Critica e Risposta in ordine."},soloAgent:"Esegui solo con {{agent}}",soloAgentShort:"Solo",cliSettings:"Impostazioni CLI",workspaceTarget:"Workspace di destinazione",workspaceTargets:{selectedProject:"Progetto selezionato",pixcodeApp:"Sistema Pixcode",custom:"Percorso personalizzato"},customWorkspacePlaceholder:"/percorso/del/progetto",workspaceTargetHint:"Gli agenti verranno eseguiti in: {{path}}",autoDetect:"rilevamento automatico",needWorkspacePath:"Inserisci un percorso workspace personalizzato.",quickWorkspaceCheck:"Controllo workspace"},Xxe=JSON.parse('{"title":"Sala di controllo","subtitle":"Produzione, piattaforma, amministrazione, audit e accesso self-hosted per {{target}}","thisServer":"questo server","refresh":"Aggiorna","nav":{"overview":"Panoramica","production":"Produzione","admin":"Admin","team":"Team","secrets":"Segreti","marketplace":"Marketplace","eval":"Valutazioni","usage":"Utilizzo","security":"Sicurezza","access":"Accesso"},"overview":{"title":"v1.46 launch surface","description":"Every box below is backed by a v1.44-v1.45 API and is now visible from the UI.","latestAuditEvents":"Latest audit events","remoteAccessOptions":"Remote access options"},"metrics":{"issueRuns":"Issue-to-PR runs","reviewItems":"Review items","subUsers":"Sub-users","collaborators":"Collaborators","secrets":"Scoped secrets","marketplace":"Marketplace","evalRuns":"Eval runs","securityAudits":"Security audits","attention":"Attention","running":"Running","needsAttention":"Needs attention","runningNow":"Running now","reviews":"Reviews","checkpoints":"Checkpoints","roles":"Roles","auditEvents":"Audit events","scopedSecrets":"Scoped secrets","auditRuns":"Audit runs","findings":"Findings","usageRows":"Usage rows","evalSuites":"Eval suites"},"sections":{"production":{"title":"Production loop","description":"Start issue-to-PR runs, parse CI failures, review changes, schedule background jobs, and create checkpoints."},"admin":{"title":"Sistema admin","description":"Crea sotto-utenti, disabilita account e controlla le attività per un server Pixcode self-hosted."},"team":{"title":"Collaboratori di progetto","description":"Assegna partner, worker, reviewer e viewer per progetto senza rendere tutti admin globali."},"secrets":{"title":"Secret vault","description":"Store scoped env secrets and preview what each provider, project, workflow, Telegram, or API run receives."},"marketplace":{"title":"MCP/plugin marketplace","description":"Register MCP servers, workflow templates, provider adapters, and notification channels with permission review and health."},"eval":{"title":"Evaluation harness","description":"Create regression suites and compare provider/model runs with pass rate and latency."},"usage":{"title":"Cost, token, and latency dashboard","description":"Monitor provider/model/workflow usage for demos and operations."},"security":{"title":"Security audit mode","description":"Run dependency audit, secret scan, permission audit, and agent output leak detection workflows."},"access":{"title":"Accesso self-hosted","description":"Usa Tailscale quando non esiste un dominio fisso oppure configura Cloudflare Tunnel/custom domain per un URL pubblico stabile."}},"panels":{"issueToPr":"Issue-to-PR run","ciRepair":"CI repair parser","reviewQueue":"Review queue","schedulerCheckpoints":"Scheduler and checkpoints","createSubUser":"Create sub-user","rolePermissions":"Role permissions","addCollaborator":"Add collaborator","createSecret":"Create secret","scopedEnvPreview":"Scoped env preview","addMarketplaceEntry":"Add marketplace entry","createSuite":"Create suite","recordRun":"Record run","recordUsageEvent":"Record usage event","createAuditRun":"Create audit run","auditLog":"Audit log","remoteAccessSetup":"Remote access setup"},"lists":{"recentJobs":"Recent jobs","recentCheckpoints":"Recent checkpoints","subUsers":"Sub-users","collaborators":"Collaborators","includedEnvNames":"Included env names","vaultEntries":"Vault entries","marketplaceEntries":"Marketplace entries","suites":"Suites","runs":"Runs","auditRuns":"Audit runs","configuredAccessPaths":"Configured access paths"},"buttons":{"queueRun":"Queue run","parseFailure":"Parse failure","createReviewItem":"Create review item","scheduleJob":"Schedule job","createCheckpoint":"Create checkpoint","createUser":"Create user","disable":"Disable","enable":"Enable","addCollaborator":"Add collaborator","storeSecret":"Store secret","previewEnv":"Preview env","saveEntry":"Save entry","markHealthy":"Mark healthy","createSuite":"Create suite","recordRun":"Record run","recordUsage":"Record usage","createAudit":"Create audit","exportJson":"Export JSON","exportCsv":"Export CSV","saveAccessPath":"Save access path","checkUrl":"Check URL","checkTailscale":"Check Tailscale"},"placeholders":{"githubIssueUrl":"GitHub issue URL","manualTitle":"Manual title fallback","model":"Model","baseBranch":"Base branch","ciLog":"Paste failing CI, lint, typecheck, or build output","reviewTitle":"Review title","notes":"Notes","changedFiles":"Changed files, one per line","jobName":"Job name","cronExpression":"Cron or watch expression","checkpointReason":"Checkpoint reason","backgroundPrompt":"Background agent prompt","checkpointFiles":"Checkpoint changed files, one per line","usernameEmail":"Username or email","temporaryPassword":"Temporary password","userEmailUsername":"User email or username","secretName":"Secret name","envName":"ENV_NAME","secretTarget":"Target project/provider/workflow","secretValue":"Secret value","workflowId":"Workflow id","name":"Name","pluginSource":"Source package or repository","installCommand":"Install command","permissionScopes":"Permission scopes, one per line","suiteName":"Suite name","description":"Description","firstTaskTitle":"First task title","acceptanceCriteria":"Acceptance criteria, one per line","suiteId":"Suite id","latencyMs":"Latency ms","passedCount":"Passed count","failedCount":"Failed count","workflow":"Workflow","inputTokens":"Input tokens","outputTokens":"Output tokens","costUsd":"Cost USD","optionalFindingTitle":"Optional finding title","auditFilter":"Filter audit log by user, project, event, or file","label":"Label","url":"URL","targetPort":"Target port"},"labels":{"project":"project","path":"path","providerModel":"provider/model","branch":"branch","failedCommands":"Failed commands","files":"Files","lastActive":"Last active","role":"role","tasks":"tasks","pass":"pass","health":"Health","reachable":"reachable","installed":"installed","loggedIn":"logged in"},"columns":{"provider":"Provider","model":"Model","workflow":"Workflow","runs":"Runs","tokens":"Tokens","cost":"Cost","latency":"Latency","errorRate":"Error rate"},"fallback":{"selectedProject":"selected project","projectPath":"project path","noneDetected":"none detected","noUrl":"No URL","global":"global","noSource":"No source","regressionSuite":"Regression suite","demoTask":"Demo task","provider":"provider","reviewRequired":"Review required.","notAvailable":"not available"},"capabilities":{"partner":"can approve actions, manage secrets, and use shell","projectScoped":"project-scoped access only"},"teamAccess":{"title":"Come accedono i collaboratori","stepUsers":"Crea un sotto-utente","stepUsersDescription":"Crea la persona nel sistema admin con un ruolo come member, viewer, project_worker o project_partner.","stepRole":"Assegna il ruolo progetto","stepRoleDescription":"Aggiungi lo stesso utente come collaboratore del progetto, così vede e usa solo i progetti scelti.","stepLink":"Condividi un percorso di accesso","stepLinkDescription":"Condividi URL Tailscale, Cloudflare Tunnel, dominio personalizzato o LAN configurato in accesso self-hosted.","paths":"Link di accesso disponibili"},"badges":{"public":"public","private":"private"},"empty":{"noAuditEvents":"No audit events yet.","noRemoteAccessConfigs":"No remote access configs yet.","noReviewItems":"No review items yet.","noRecentJobs":"No recent jobs yet.","noRecentCheckpoints":"No recent checkpoints yet.","noSubUsers":"No sub-users yet.","noCollaborators":"No project collaborators yet.","noAccessPaths":"No access paths configured yet.","noIncludedEnvNames":"No included env names yet.","noSecrets":"No secrets yet.","noMarketplaceEntries":"No marketplace entries yet.","noSuites":"No suites yet.","noRuns":"No runs yet.","usageSummary":"Usage appears here after provider or workflow events are recorded.","noSecurityAudits":"No security audits yet.","noAuditMatches":"No audit entries match the current filter."},"groups":{"operations":{"label":"Operations","description":"Runs, reviews, approvals, scheduler, checkpoints"},"people":{"label":"People","description":"Admins, collaborators, roles, activity"},"access":{"label":"Access","description":"LAN, Tailscale, tunnel, domain guidance"},"security":{"label":"Security","description":"Secrets, permission risk, audit checks"},"insights":{"label":"Insights","description":"Usage, evaluations, marketplace health"}},"context":{"title":"What this means","recommendedNextStep":"Recommended next step","runTimeline":"Run timeline","runTimelineDescription":"Readable activity feed for agents, reviewers, checkpoints, and audit events.","emptyTimelineTitle":"No run timeline yet","emptyTimelineDescription":"Run activity appears here after issue runs, reviews, checkpoints, or audit events are recorded.","serverSignal":"Server signal","serverSignalDescription":"The first screen avoids raw backend sections and shows only current status."},"operations":{"runTimeline":"Run timeline","runTimelineDescription":"Readable actor, action, and result history without raw JSON.","noActivityTitle":"No activity yet","noActivityDescription":"Issue runs, review decisions, checkpoints, and audit events will appear here as a vertical timeline.","actionQueue":"Action queue","actionQueueDescription":"Review items are shown as mobile-friendly rows instead of a cramped table.","noReviewItemsTitle":"No review items","noReviewItemsDescription":"Create a review item when changed files need an accept/fix decision.","reviewRequested":"Review requested","changedFiles":"{{count}} changed files","accept":"Accept"},"people":{"projectCollaborators":"Project collaborators","projectCollaboratorsDescription":"Project partners and workers are not global admins. They get scoped access to assigned projects.","noCollaboratorsTitle":"No collaborators yet","noCollaboratorsDescription":"Create a sub-user first, then assign that person to a project role.","project":"Project","roleScoped":"role scoped","auditLog":"Audit log","auditLogDescription":"Search what sub-users, project partners, and workers changed without opening a raw database view.","searchAudit":"Search actor, action, project, or detail","noAuditMatchTitle":"No audit events match","noAuditMatchDescription":"User and project access activity appears here after actions are recorded.","system":"system","auditEvent":"Audit event","advancedTitle":"Advanced people management","advancedDescription":"Create users and assign project roles only when needed."},"access":{"openSettings":"Open Settings > Access","lanTitle":"LAN and local","lanDescription":"Use when the browser is on the same machine or network. Start here before private or public tunnels.","tailscaleTitle":"Tailscale private access","tailscaleDescription":"Best when a team needs private access without exposing Pixcode publicly. The UI should guide install, login, and URL sharing.","cloudflareTitle":"Cloudflare or custom domain","cloudflareDescription":"Best when users need a stable HTTPS URL. Configure the tunnel/domain once and share it with assigned users.","howUsersConnect":"How users connect","howUsersConnectDescription":"This keeps Access understandable for non-technical users.","stepUserTitle":"Create the user","stepUserDescription":"Add them in People so the server knows who they are.","stepRoleTitle":"Assign project role","stepRoleDescription":"Give them project access{{projectSuffix}}.","stepUrlTitle":"Share one URL","stepUrlDescription":"Use a LAN, Tailscale, Cloudflare Tunnel, or custom domain URL from Settings > Access."},"security":{"secretVault":"Secret vault","secretVaultDescription":"Rows show scope, target, and redacted env names. Values stay hidden.","noSecretsTitle":"No secrets stored","noSecretsDescription":"Store provider, project, workflow, Telegram, or API env values from the advanced form.","global":"global","advancedTitle":"Advanced security actions","advancedDescription":"Store scoped env values or queue audit checks."},"insights":{"usageSummary":"Usage summary","usageSummaryDescription":"Provider metrics are stacked as cards on mobile instead of forcing a wide table.","noUsageTitle":"No usage events yet","noUsageDescription":"Usage appears after provider or workflow events are recorded.","provider":"provider","usageRowDescription":"{{tokens}} tokens - {{cost}} - {{latency}}ms avg","errorRate":"{{rate}}% errors","marketplaceHealth":"Marketplace health","marketplaceHealthDescription":"MCP servers, workflow templates, provider adapters, and notification channels stay visible without crowding the overview.","noMarketplaceTitle":"No marketplace entries","noMarketplaceDescription":"Register entries only when a plugin or workflow template is ready to install.","noSourceConfigured":"No source configured","unknown":"unknown","advancedTitle":"Advanced insight actions","advancedDescription":"Record usage, create evaluation suites, or register marketplace entries."},"recommendations":{"attention":"Open Operations first. Clear reviews, errors, failed evals, or security findings before starting new work.","access":"Open Settings > Access and save the one URL your users should use. Then assign project roles in People.","people":"Create sub-users first, assign project roles second, then share an access path.","security":"Store secrets with the smallest scope that works, then run a permission or secret scan.","insights":"Compare provider cost, latency, and eval pass rate before changing model defaults.","operations":"Review Running now and the timeline. If nothing needs attention, start the next issue-to-PR or scheduled job."}}'),Jxe={title:"Area di lavoro VS Code",noProject:"Nessun progetto selezionato",activity:{explorer:"Esplora",projects:"Progetti",sourceControl:"Controllo sorgente",terminal:"Terminale",showPanel:"Mostra pannello sinistro",hidePanel:"Nascondi pannello sinistro"},panels:{explorer:"Esplora",projects:"Progetti",sourceControl:"Controllo sorgente",terminal:"Terminale",editor:"Editor",cli:"CLI",rightTerminal:"Terminale"},editor:{emptyTitle:"Apri un file da Esplora",closeTab:"Chiudi {{file}}",scrollLeft:"Scorri schede a sinistra",scrollRight:"Scorri schede a destra",moreActions:"Altre azioni scheda",closeSplit:"Chiudi editor diviso",context:{close:"Chiudi",closeAll:"Chiudi tutto",copyPath:"Copia percorso",splitRight:"Dividi a destra",splitMoveRight:"Dividi e sposta a destra"}},resize:{left:"Ridimensiona pannello sinistro",right:"Ridimensiona pannello CLI"},menu:{openProject:"Apri progetto...",cloneFromGithub:"Clona repository...",newChat:"Nuova chat",openProjects:"Apri progetti"},menuBar:{file:"File",edit:"Modifica",selection:"Selezione",view:"Visualizza",go:"Vai",run:"Esegui",terminal:"Terminale",help:"Aiuto",openSettingsPanel:"Apri pannello impostazioni"},projects:{openProject:"Apri progetto",cloneFromGithub:"Clona",directoryList:"Directory",refresh:"Aggiorna progetti",emptyTitle:"Nessuna directory progetto",emptyDescription:"Apri una cartella locale o clona un repository per iniziare.",selected:"Selezionato",startChat:"Chat",fileCount:"{{formattedCount}} file",fileCountPending:"File in preparazione",startTitle:"Start a Pixcode workspace",startDescription:"Pick a folder and Pixcode will bind the explorer, terminal, and chat history to that workspace.",workHere:"Work in this folder"},workspace:{empty:"Apri un progetto per creare Workspace 1.",openFirst:"Apri workspace",add:"Aggiungi workspace",scrollLeft:"Scorri workspace a sinistra",scrollRight:"Scorri workspace a destra",close:"Chiudi {{name}}",closeAction:"Chiudi workspace",closeOthers:"Chiudi altri",closeAll:"Chiudi tutto",rename:"Rinomina",star:"Aggiungi stella",unstar:"Rimuovi stella",toggleStar:"Aggiungi stella a {{name}}",moreActions:"Azioni workspace"},cli:{projectScoped:"Terminale CLI legato al progetto",chooseTitle:"Avvia terminale CLI",chooseDescription:"Scegli una CLI, poi avvia un terminale a tutta altezza.",startSelected:"Avvia {{provider}}",newSession:"Nuova sessione CLI",checking:"Controllo...",ready:"Pronto",notInstalled:"Non installato",installing:"Installazione...",updateAvailable:"Aggiorna {{version}}",installProvider:"Installa {{provider}}",updateProvider:"Aggiorna {{provider}}",manualInstall:"Questa CLI richiede installazione manuale.",installNoJob:"L'installazione non ha restituito un job id.",installFailed:"Installazione non riuscita.",installStreamLost:"Il flusso di installazione si è chiuso presto. L'installazione potrebbe essere ancora in corso.",provider:"Provider",installRunning:"si sta installando",installDone:"è pronto",installError:"richiede attenzione",showPanel:"Mostra pannello CLI",hidePanel:"Nascondi pannello CLI",close:"Chiudi terminale"},terminal:{title:"Terminale",close:"Chiudi terminale"}},Qxe={title:"Console remota",notSynced:"Non sincronizzato",refresh:"Aggiorna",runId:"Run {{id}}",metrics:{projects:"Progetti",activeRuns:"Run attivi",approvalQueue:"Coda approvazioni",webhooks:"Webhook"},sections:{projects:"Control room multi-progetto",approvals:"Coda approvazioni",webhooks:"Stato webhook"},badges:{active:"{{count}} attivi",approvals:"{{count}} approvazioni"},projectStats:{sessions:"{{count}} sessioni",failedRuns:"{{count}} run falliti",recentRuns:"{{count}} run recenti"},actions:{allow:"Consenti",deny:"Nega"},webhook:{on:"on",off:"off",ok:"ok",failed:"fallito",noDelivery:"Nessuna consegna ancora"},empty:{projects:"Nessun progetto disponibile.",approvals:"Nessuna approvazione in sospeso.",webhooks:"Nessun webhook configurato."}},eve={buttons:Mxe,tabs:Fxe,status:zxe,messages:Bxe,navigation:Uxe,common:$xe,time:Hxe,fileOperations:Gxe,mainContent:Vxe,fileTree:Wxe,projectWizard:qxe,notifications:Kxe,versionUpdate:Yxe,orchestration:Zxe,controlRoom:Xxe,vscodeWorkbench:Jxe,remoteConsole:Qxe},tve="Impostazioni",nve={account:"Account",permissions:"Permessi",mcpServers:"Server MCP",appearance:"Aspetto"},rve={title:"Account",language:"Lingua",languageLabel:"Lingua dell'interfaccia",languageDescription:"Scegli la lingua preferita per l'interfaccia",username:"Nome utente",email:"Email",profile:"Profilo",changePassword:"Cambia password"},ave={title:"Server MCP",addServer:"Aggiungi server",editServer:"Modifica server",deleteServer:"Elimina server",serverName:"Nome server",serverType:"Tipo server",config:"Configurazione",testConnection:"Testa connessione",status:"Stato",connected:"Connesso",disconnected:"Disconnesso",scope:{label:"Ambito",user:"Utente",project:"Progetto"}},ive={title:"Aspetto",theme:"Tema",codeEditor:"Editor codice",editorTheme:"Tema editor",wordWrap:"A capo automatico",showMinimap:"Mostra minimappa",lineNumbers:"Numeri di riga",fontSize:"Dimensione carattere"},sve={saveChanges:"Salva modifiche",resetToDefaults:"Ripristina predefiniti",cancelChanges:"Annulla modifiche"},ove={title:"Impostazioni rapide",sections:{appearance:"Aspetto",toolDisplay:"Visualizzazione strumenti",viewOptions:"Opzioni visualizzazione",inputSettings:"Impostazioni input",changeAwareness:"Centro controllo"},darkMode:"Modalità scura",autoExpandTools:"Espandi strumenti automaticamente",showRawParameters:"Mostra parametri grezzi",showThinking:"Mostra ragionamento",autoScrollToBottom:"Scorrimento automatico in basso",sendByCtrlEnter:"Invia con Ctrl+Invio",sendByCtrlEnterDescription:"Se abilitato, premere Ctrl+Invio invierà il messaggio invece di Invio. Utile per gli utenti IME per evitare invii accidentali.",changeAwareness:"Centro controllo",changedFiles:{title:"File modificati",description:"Segue le modifiche locali e apre il pannello File quando appare una nuova modifica.",noProject:"Seleziona un progetto per seguire le modifiche locali.",refresh:"Aggiorna file modificati",empty:"Nessuna modifica locale rilevata",disabled:"Abilita Centro controllo per monitorare le modifiche locali.",more:"+{{count}} altri file",lastChecked:"Controllato {{value}}",guideTitle:"Guida pannello destro",guideFiles:"I file modificati si illuminano in verde in File.",guidePanel:"Le nuove modifiche aprono automaticamente il pannello diviso.",status:{M:"M",A:"A",D:"D",U:"U"}},dragHandle:{dragging:"Trascinamento maniglia",closePanel:"Chiudi pannello impostazioni",openPanel:"Apri pannello impostazioni",draggingStatus:"Trascinamento...",toggleAndMove:"Clicca per attivare/disattivare, trascina per spostare"}},lve={title:"Scorciatoie terminale",sectionKeys:"Tasti",sectionNavigation:"Navigazione",escape:"Escape",tab:"Tab",shiftTab:"Shift+Tab",arrowUp:"Freccia su",arrowDown:"Freccia giù",scrollDown:"Scorri giù",handle:{closePanel:"Chiudi pannello scorciatoie",openPanel:"Apri pannello scorciatoie"}},cve={label:"Impostazioni",agents:"Agenti",appearance:"Aspetto",git:"Git",apiTokens:"API e Token",notifications:"Notifiche",plugins:"Plugin",mobile:"Usa da mobile",telegram:"Telegram",about:"Informazioni",access:"Accesso"},dve={title:"Notifiche",description:"Controlla quali notifiche ricevere.",webPush:{title:"Notifiche push web",enable:"Abilita notifiche push",disable:"Disabilita notifiche push",enabled:"Le notifiche push sono abilitate",loading:"Aggiornamento...",unsupported:"Le notifiche push non sono supportate in questo browser.",denied:"Le notifiche push sono bloccate. Abilitale nelle impostazioni del browser."},events:{title:"Tipi di evento",actionRequired:"Azione richiesta",stop:"Esecuzione interrotta",error:"Esecuzione fallita"}},uve={darkMode:{label:"Modalità scura",description:"Alterna tra tema chiaro e scuro"},projectSorting:{label:"Ordinamento progetti",description:"Come vengono ordinati i progetti nella barra laterale",alphabetical:"Alfabetico",recentActivity:"Attività recente"},codeEditor:{title:"Editor codice",theme:{label:"Tema editor",description:"Tema predefinito per l'editor di codice"},wordWrap:{label:"A capo automatico",description:"Abilita il ritorno a capo automatico nell'editor"},showMinimap:{label:"Mostra minimappa",description:"Visualizza una minimappa per facilitare la navigazione nella vista differenze"},lineNumbers:{label:"Mostra numeri di riga",description:"Visualizza i numeri di riga nell'editor"},fontSize:{label:"Dimensione carattere",description:"Dimensione del carattere dell'editor in pixel"}}},pve={title:{add:"Aggiungi server MCP",edit:"Modifica server MCP"},importMode:{form:"Input modulo",json:"Importa JSON"},scope:{label:"Ambito",userGlobal:"Utente (globale)",projectLocal:"Progetto (locale)",userDescription:"Ambito utente: disponibile in tutti i progetti sulla tua macchina",projectDescription:"Ambito locale: disponibile solo nel progetto selezionato",cannotChange:"L'ambito non può essere modificato quando si modifica un server esistente"},fields:{serverName:"Nome server",transportType:"Tipo di trasporto",command:"Comando",arguments:"Argomenti (uno per riga)",jsonConfig:"Configurazione JSON",url:"URL",envVars:"Variabili d'ambiente (CHIAVE=valore, una per riga)",headers:"Header (CHIAVE=valore, uno per riga)",selectProject:"Seleziona un progetto..."},placeholders:{serverName:"mio-server"},validation:{missingType:"Campo obbligatorio mancante: type",stdioRequiresCommand:"Il tipo stdio richiede un campo command",httpRequiresUrl:"Il tipo {{type}} richiede un campo url",invalidJson:"Formato JSON non valido",jsonHelp:"Incolla la configurazione del server MCP in formato JSON. Esempi di formato:",jsonExampleStdio:'• stdio: {"type":"stdio","command":"npx","args":["@upstash/context7-mcp"]}',jsonExampleHttp:'• http/sse: {"type":"http","url":"https://api.example.com/mcp"}'},configDetails:"Dettagli configurazione (da {{configFile}})",projectPath:"Percorso: {{path}}",actions:{cancel:"Annulla",saving:"Salvataggio...",addServer:"Aggiungi server",updateServer:"Aggiorna server"}},mve={success:"Impostazioni salvate con successo!",error:"Impossibile salvare le impostazioni",saving:"Salvataggio..."},hve={save:"Salva impostazioni",cancel:"Annulla"},fve={title:"Configurazione Git",description:"Configura la tua identità git per i commit. Queste impostazioni verranno applicate globalmente tramite git config --global",name:{label:"Nome Git",help:"Il tuo nome per i commit git"},email:{label:"Email Git",help:"La tua email per i commit git"},actions:{save:"Salva configurazione",saving:"Salvataggio..."},status:{success:"Salvato con successo"}},gve={title:"Chiavi API",description:"Genera chiavi API per accedere all'API esterna da altre applicazioni.",newKey:{alertTitle:"⚠️ Salva la tua chiave API",alertMessage:"Questa è l'unica volta che vedrai questa chiave. Conservala in modo sicuro.",iveSavedIt:"L'ho salvata"},form:{placeholder:"Nome chiave API (es. Server produzione)",createButton:"Crea",cancelButton:"Annulla"},newButton:"Nuova chiave API",empty:"Nessuna chiave API creata.",list:{created:"Creata:",lastUsed:"Ultimo utilizzo:"},confirmDelete:"Sei sicuro di voler eliminare questa chiave API?",status:{active:"Attiva",inactive:"Inattiva"},github:{title:"Token GitHub",description:"Aggiungi token di accesso personale GitHub per clonare repository privati tramite l'API esterna.",descriptionAlt:"Aggiungi token di accesso personale GitHub per clonare repository privati. Puoi anche passare i token direttamente nelle richieste API senza salvarli.",addButton:"Aggiungi token",form:{namePlaceholder:"Nome token (es. Repository personali)",tokenPlaceholder:"Token di accesso personale GitHub (ghp_...)",descriptionPlaceholder:"Descrizione (opzionale)",addButton:"Aggiungi token",cancelButton:"Annulla",howToCreate:"Come creare un token di accesso personale GitHub →"},empty:"Nessun token GitHub aggiunto.",added:"Aggiunto:",confirmDelete:"Sei sicuro di voler eliminare questo token GitHub?"},apiDocsLink:"Documentazione API",documentation:{title:"Documentazione API esterna",description:"Scopri come usare l'API esterna per avviare sessioni Claude/Cursor dalle tue applicazioni.",viewLink:"Vedi documentazione API →"},loading:"Caricamento...",version:{updateAvailable:"Aggiornamento disponibile: v{{version}}"}},bve={authStatus:{checking:"Verifica...",connected:"Connesso",notConnected:"Non connesso",disconnected:"Disconnesso",checkingAuth:"Verifica stato autenticazione...",loggedInAs:"Connesso come {{email}}",authenticatedUser:"utente autenticato"},account:{claude:{description:"Assistente AI Anthropic Claude"},cursor:{description:"Editor di codice potenziato da AI Cursor"},codex:{description:"Assistente AI OpenAI Codex"},gemini:{description:"Assistente AI Google Gemini"},qwen:{description:"Alibaba Qwen Code CLI (fork di Gemini CLI)"}},connectionStatus:"Stato connessione",login:{title:"Accedi",reAuthenticate:"Ri-autenticati",description:"Accedi al tuo account {{agent}} per abilitare le funzionalità AI",reAuthDescription:"Accedi con un account diverso o aggiorna le credenziali",button:"Accedi",reLoginButton:"Ri-accedi"},error:"Errore: {{error}}",providersLabel:"Providers",providerNames:{claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code",opencode:"OpenCode"},install:{notInstalledTitle:"{{agent}} is not installed",notInstalledDescription:"Pixcode couldn't find the {{binary}} binary on this host. Install it first and then come back to log in.",installing:"Installing...",installNow:"Install now",copyCommand:"Copy install command",copy:"Copy",copied:"Copied",qwenDocs:"View the Qwen Code docs",complete:"Install complete",failed:"Install failed",output:"Output",cancel:"Cancel",dismiss:"Dismiss",doneHint:"Refresh this tab or try Login to check the new install.",continueToLogin:"Continue to Login",errors:{missingJobId:"Server did not return a job id",failedToStart:"Install failed to start",unreadableStatus:"Install ended with an unreadable status",streamLost:"Lost connection to install stream. The install may still be running on the server."}}},xve={title:"Impostazioni permessi",skipPermissions:{label:"Salta richieste di permesso (usa con cautela)",claudeDescription:"Equivalente al flag --dangerously-skip-permissions",cursorDescription:"Equivalente al flag -f in Cursor CLI",opencodeDescription:"Equivalente al flag --dangerously-skip-permissions in OpenCode"},allowedTools:{title:"Strumenti consentiti",description:"Strumenti automaticamente consentiti senza richiedere permesso",placeholder:'es. "Bash(git log:*)" o "Write"',quickAdd:"Aggiunta rapida strumenti comuni:",empty:"Nessuno strumento consentito configurato"},blockedTools:{title:"Strumenti bloccati",description:"Strumenti automaticamente bloccati senza richiedere permesso",placeholder:'es. "Bash(rm:*)"',empty:"Nessuno strumento bloccato configurato"},allowedCommands:{title:"Comandi shell consentiti",description:"Comandi shell automaticamente consentiti senza richiedere permesso",placeholder:'es. "Shell(ls)" o "Shell(git status)"',quickAdd:"Aggiunta rapida comandi comuni:",empty:"Nessun comando consentito configurato"},blockedCommands:{title:"Comandi shell bloccati",description:"Comandi shell automaticamente bloccati",placeholder:'es. "Shell(rm -rf)" o "Shell(sudo)"',empty:"Nessun comando bloccato configurato"},toolExamples:{title:"Esempi pattern strumenti:",bashGitLog:"- Consenti tutti i comandi git log",bashGitDiff:"- Consenti tutti i comandi git diff",write:"- Consenti tutti gli utilizzi dello strumento Write",bashRm:"- Blocca tutti i comandi rm (pericoloso)"},shellExamples:{title:"Esempi comandi shell:",ls:"- Consenti comando ls",gitStatus:"- Consenti git status",npmInstall:"- Consenti npm install",rmRf:"- Blocca eliminazione ricorsiva"},opencodeAllowed:{title:"Pattern Bash Consentiti",description:"Pattern di comandi bash che OpenCode approva automaticamente senza chiedere",placeholder:'es. "git *" o "npm test"',quickAdd:"Aggiunta rapida pattern comuni:",empty:"Nessun pattern consentito configurato"},opencodeBlocked:{title:"Pattern Bash Bloccati",description:"Pattern di comandi bash che OpenCode rifiuta sempre",placeholder:'es. "rm -rf *" o "sudo *"',empty:"Nessun pattern bloccato configurato"},opencodeExamples:{title:"Esempi di pattern:",gitAll:"- Consenti tutti i comandi git",gitPush:"- Blocca solo git push",rmRf:"- Blocca cancellazione ricorsiva",npm:"- Consenti tutti i comandi npm"},codex:{permissionMode:"Modalità permessi",description:"Controlla come Codex gestisce le modifiche ai file e l'esecuzione dei comandi",modes:{default:{title:"Predefinito",description:"Solo i comandi attendibili (ls, cat, grep, git status, ecc.) vengono eseguiti automaticamente. Gli altri comandi vengono saltati. Può scrivere nell'area di lavoro."},acceptEdits:{title:"Accetta modifiche",description:"Tutti i comandi vengono eseguiti automaticamente nell'area di lavoro. Modalità completamente automatica con esecuzione sandboxed."},bypassPermissions:{title:"Ignora permessi",description:"Accesso completo al sistema senza restrizioni. Tutti i comandi vengono eseguiti automaticamente con accesso completo a disco e rete. Usa con cautela."}},technicalDetails:"Dettagli tecnici",technicalInfo:{default:"sandboxMode=workspace-write, approvalPolicy=untrusted. Comandi attendibili: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (senza -exec), ecc.",acceptEdits:"sandboxMode=workspace-write, approvalPolicy=never. Tutti i comandi vengono auto-eseguiti nella directory del progetto.",bypassPermissions:"sandboxMode=danger-full-access, approvalPolicy=never. Accesso completo al sistema, usa solo in ambienti attendibili.",overrideNote:"Puoi sovrascrivere questa impostazione per sessione usando il pulsante modalità nell'interfaccia chat."}},actions:{add:"Aggiungi"}},vve={title:"Server MCP",description:{claude:"I server Model Context Protocol forniscono strumenti e fonti dati aggiuntive a Claude",cursor:"I server Model Context Protocol forniscono strumenti e fonti dati aggiuntive a Cursor",codex:"I server Model Context Protocol forniscono strumenti e fonti dati aggiuntive a Codex"},addButton:"Aggiungi server MCP",empty:"Nessun server MCP configurato",serverType:"Tipo",scope:{local:"locale",user:"utente"},config:{command:"Comando",url:"URL",args:"Argomenti",environment:"Ambiente"},tools:{title:"Strumenti",count:"({{count}}):",more:"+{{count}} altri"},actions:{edit:"Modifica server",delete:"Elimina server"},help:{title:"Informazioni su Codex MCP",description:"Codex supporta server MCP basati su stdio. Puoi aggiungere server che estendono le capacità di Codex con strumenti e risorse aggiuntive."}},yve={title:"Plugin",description:"Estendi l'interfaccia con plugin personalizzati. Installa da git o inserisci una cartella in ~/.pixcode/plugins/",installPlaceholder:"https://github.com/utente/mio-plugin",installButton:"Installa",installing:"Installazione…",securityWarning:"Installa solo plugin di cui hai verificato il codice sorgente o di autori di cui ti fidi.",scanningPlugins:"Scansione plugin…",noPluginsInstalled:"Nessun plugin installato",pullLatest:"Aggiorna da git",noGitRemote:"Nessun remote git — aggiornamento non disponibile",uninstallPlugin:"Disinstalla plugin",confirmUninstall:"Clicca di nuovo per confermare",confirmUninstallMessage:"Rimuovere {{name}}? Questa azione non può essere annullata.",cancel:"Annulla",remove:"Rimuovi",updateFailed:"Aggiornamento fallito",installFailed:"Installazione fallita",uninstallFailed:"Disinstallazione fallita",toggleFailed:"Attivazione/disattivazione fallita",starterPluginLabel:"Plugin iniziale",starter:"Iniziale",docs:"Documentazione",starterPlugin:{name:"Statistiche progetto",badge:"iniziale",description:"Conteggio file, righe di codice, ripartizione per tipo di file e attività recente per il tuo progetto.",install:"Installa"},terminalPlugin:{name:"Terminale",badge:"ufficiale",description:"Terminale integrato con accesso completo alla shell direttamente nell'interfaccia.",install:"Installa"},morePlugins:"Altri",enable:"Abilita",disable:"Disabilita",installAriaLabel:"URL repository git del plugin",tab:"scheda",runningStatus:"in esecuzione"},wve={title:"Accesso",description:"Scegli come le persone raggiungono questo server Pixcode self-hosted. Parti dalla stessa rete; per accesso remoto usa tunnel, Tailscale o il tuo dominio.",refresh:"Aggiorna",copy:"Copia",copied:"Copiato",save:"Salva percorso",check:"Controlla URL",qrAlt:"QR per {{url}}",guide:{title:"Scegli prima il percorso di connessione",description:"Non serve conoscere il networking. Scegli il caso giusto, copia il link o scansiona il QR dal telefono."},options:{sameNetwork:{title:"Stesso Wi-Fi/LAN",description:"Usalo quando il dispositivo e Pixcode sono sullo stesso router o rete."},secureTunnel:{title:"Link pubblico temporaneo",description:"Avvia un tunnel Cloudflare/ngrok; Pixcode mostra URL pubblico e QR."},tailscale:{title:"Link privato team",description:"Accesso privato senza dominio pubblico o configurazione router."},customDomain:{title:"Dominio proprio",description:"Per HTTPS, reverse proxy o hostname Cloudflare Tunnel gia pronti."}},status:{ready:"Pronto",detecting:"Rilevamento",guided:"Guidato",configured:"Configurato",optional:"Opzionale"},links:{title:"Link disponibili",description:"Copia l URL corretto per dispositivo o collega.",local:"Locale",tailscale:"Link privato Tailscale",empty:"Nessun link rilevato."},local:{title:"Accesso stessa rete",description:"Primo test consigliato: collegati dallo stesso Wi-Fi o LAN. Scansiona il QR o copia il link.",thisDevice:"Solo questo computer",loading:"Rilevamento link di rete...",empty:"Nessun link LAN rilevato. Controlla la rete e aggiorna.",saveLabel:"Accesso stessa rete",save:"Salva questo link LAN"},tunnel:{title:"Tunnel sicuro",description:"Senza dominio fisso, Pixcode puo avviare cloudflared o ngrok e mostrare qui l URL pubblico.",secureLink:"Link pubblico e QR",help:"Premi avvia. Se cloudflared o ngrok e installato, Pixcode crea HTTPS e QR automaticamente.",running:"Tunnel attivo",start:"Avvia tunnel",stop:"Ferma tunnel",save:"Salva URL tunnel",saveLabel:"Accesso tunnel sicuro",qrLabel:"tunnel sicuro",installTitle:"Setup tunnel necessario",installNeeded:"Installa prima cloudflared o ngrok, poi avvia di nuovo il tunnel."},tailscale:{title:"Accesso privato Tailscale",description:"Tailscale e una app opzionale per rete privata. Installa su server e dispositivi, accedi allo stesso team, poi Pixcode rileva l URL privato.",save:"Salva URL Tailscale",saveLabel:"Accesso privato Tailscale",openInstall:"Apri installazione Tailscale",steps:{installServer:"Installa Tailscale sul computer o server che esegue Pixcode.",installUserDevice:"Installa Tailscale su telefono, laptop o dispositivo del collega.",login:"Accedi con lo stesso account o team Tailscale su entrambi.",refresh:"Torna qui e premi Aggiorna; Pixcode mostrera l URL privato."},installCommand:"Install command",installDevice:"Install on this device",signIn:"Sign in with Tailscale",actionDone:"Done",needsAttention:"Needs attention",openLogin:"Open Tailscale login"},advanced:{title:"Avanzato: dominio stabile",description:"Usalo quando hai gia LAN URL, Tailscale URL, hostname Cloudflare Tunnel o dominio HTTPS.",badge:"Avanzato"},setup:{title:"Percorso di accesso stabile",description:"Salva l URL che useranno gli utenti. Puo essere LAN, Tailscale, Cloudflare Tunnel o dominio personalizzato."},modes:{lan:"LAN",tailscale:"Tailscale",cloudflare_tunnel:"Cloudflare Tunnel",custom_domain:"Dominio personalizzato"},fields:{label:"Etichetta",url:"URL",port:"Porta target",mode:"Mode"},health:{reachable:"Pixcode e raggiungibile",unreachable:"Pixcode non e raggiungibile"},configured:{title:"Percorsi di accesso salvati",description:"Questi percorsi sono disponibili ad admin, partner di progetto e operatori secondo il ruolo.",empty:"Nessun percorso salvato.",noUrl:"Nessun URL",public:"pubblico",private:"privato"},team:{title:"Come si collegano gli utenti",description:"Crea l utente nel sistema Admin, assegna il ruolo progetto nel Control Room e condividi una Access URL. Non serve essere admin globali per il progetto assegnato."}},kve={title:"Diagnostics",description:"Provider health, WebSocket state, notifications, active runs, and recent errors.",refresh:"Refresh",copyBundle:"Copy bundle",copied:"Copied",runtime:"Runtime",waiting:"Waiting for diagnostics",websocket:"WebSocket",activeClients:"active clients",recentErrors:"Recent errors",redactedBundle:"redacted support bundle",providers:"Providers",notChecked:"not checked",emptyProviders:"Provider health has not been collected yet.",status:{unknown:"unknown",loading:"loading",ok:"ok",available:"available",configured:"configured",missing:"missing",failed:"failed"}},Sve={tagline:"Open-source AI coding assistant interface",checkFailedShort:"Check failed",starOnGitHub:"Star on GitHub",docs:"Docs",hosted:{title:"Try Pixcode Hosted",description:"Team collaboration, shared MCP configs, settings sync across environments, and managed infrastructure.",learnMore:"Learn more"},proFeatures:{title:"Pixcode Pro Features",syncSettings:{title:"Sync Settings",description:"Keep your preferences, MCP configs, and theme in sync across all your environments."},teamManagement:{title:"Team Management",description:"Multiple users, role-based access, and shared projects for your team."}},license:"Licensed under AGPL-3.0",relativeTime:{justNow:"just now",secondsAgo:"{{count}}s ago",minutesAgo:"{{count}}m ago",hoursAgo:"{{count}}h ago"}},Cve={title:tve,tabs:nve,account:rve,mcp:ave,appearance:ive,actions:sve,quickSettings:ove,terminalShortcuts:lve,mainTabs:cve,notifications:dve,appearanceSettings:uve,mcpForm:pve,saveStatus:mve,footerActions:hve,git:fve,apiKeys:gve,agents:bve,permissions:xve,mcpServers:vve,pluginSettings:yve,access:wve,diagnostics:kve,about:Sve},Nve={title:"Bentornato",description:"Accedi al tuo account Pixcode self-hosted",username:"Nome utente",password:"Password",submit:"Accedi",loading:"Accesso in corso...",errors:{invalidCredentials:"Nome utente o password non validi",requiredFields:"Compila tutti i campi",networkError:"Errore di rete. Riprova."},placeholders:{username:"Inserisci il tuo nome utente",password:"Inserisci la tua password"}},Eve={title:"Crea account",username:"Nome utente",password:"Password",confirmPassword:"Conferma password",submit:"Crea account",loading:"Creazione account...",errors:{passwordMismatch:"Le password non corrispondono",usernameTaken:"Nome utente già in uso",weakPassword:"La password è troppo debole"}},Tve={title:"Disconnetti",confirm:"Sei sicuro di volerti disconnettere?",button:"Disconnetti"},Ave={login:Nve,register:Eve,logout:Tve},jve={title:"Progetti",newProject:"Nuovo progetto",deleteProject:"Rimuovi progetto",renameProject:"Rinomina progetto",noProjects:"Nessun progetto trovato",loadingProjects:"Caricamento progetti...",searchPlaceholder:"Cerca progetti...",projectNamePlaceholder:"Nome progetto",starred:"Preferiti",all:"Tutti",untitledSession:"Sessione senza titolo",newSession:"Nuova sessione",codexSession:"Sessione Codex",fetchingProjects:"Recupero dei tuoi progetti e sessioni Claude",projects:"progetti",detectedFromHistory:"Rilevato dalla cronologia",noMatchingProjects:"Nessun progetto corrispondente",tryDifferentSearch:"Prova a modificare il termine di ricerca",runClaudeCli:"Esegui Claude CLI in una directory di progetto per iniziare"},Rve={title:"Pixcode",subtitle:"Interfaccia assistente di programmazione AI"},Ive={title:"Sessioni",newSession:"Nuova sessione",deleteSession:"Elimina sessione",renameSession:"Rinomina sessione",noSessions:"Nessuna sessione",loadingSessions:"Caricamento sessioni...",unnamed:"Senza nome",loading:"Caricamento...",showMore:"Mostra più sessioni",startToSee:"Inizia una nuova sessione per vederla qui."},_ve={viewEnvironments:"Visualizza ambienti",hideSidebar:"Nascondi barra laterale",createProject:"Crea nuovo progetto",refresh:"Aggiorna progetti e sessioni (Ctrl+R)",renameProject:"Rinomina progetto (F2)",deleteProject:"Rimuovi progetto dalla barra laterale (Canc)",addToFavorites:"Aggiungi ai preferiti",removeFromFavorites:"Rimuovi dai preferiti",editSessionName:"Modifica manualmente il nome della sessione",deleteSession:"Elimina questa sessione permanentemente",save:"Salva",cancel:"Annulla",clearSearch:"Cancella ricerca",sessionActions:"Azioni sessione",historyView:"Visualizzazione cronologia",historyViewFlat:"Conversazioni recenti",historyViewGrouped:"Raggruppate per progetto"},Lve={chat:"Chat",files:"File",git:"Git",terminal:"Terminale",tasks:"Attività"},Pve={refresh:"Aggiorna",settings:"Impostazioni",collapseAll:"Comprimi tutto",expandAll:"Espandi tutto",cancel:"Annulla",save:"Salva",delete:"Elimina",rename:"Rinomina",joinCommunity:"Unisciti alla community",reportIssue:"Segnala problema",starOnGithub:"Metti stella su GitHub",starSession:"Preferita",unstarSession:"Rimuovi preferita",controlRoom:"Sala di controllo",controlRoomDescription:"Admin, accesso, run"},Dve={openSource:"Open Source"},Ove={active:"Attivo",inactive:"Inattivo",thinking:"Sto pensando...",error:"Errore",aborted:"Interrotto",unknown:"Sconosciuto"},Mve={justNow:"Adesso",oneMinuteAgo:"1 min fa",minutesAgo:"{{count}} min fa",oneHourAgo:"1 ora fa",hoursAgo:"{{count}} ore fa",oneDayAgo:"1 giorno fa",daysAgo:"{{count}} giorni fa",buckets:{today:"Oggi",yesterday:"Ieri",thisWeek:"Ultimi 7 giorni",thisMonth:"Ultimi 30 giorni",older:"Più vecchi"}},Fve={deleteConfirm:"Sei sicuro di voler eliminare questo elemento?",renameSuccess:"Rinominato con successo",deleteSuccess:"Eliminato con successo",errorOccurred:"Si è verificato un errore",deleteSessionConfirm:"Sei sicuro di voler eliminare questa sessione? Questa azione non può essere annullata.",deleteProjectConfirm:"Rimuovere questo progetto dalla barra laterale? I file del progetto, le memorie e i dati delle sessioni non verranno eliminati.",enterProjectPath:"Inserisci un percorso di progetto",deleteSessionFailed:"Impossibile eliminare la sessione. Riprova.",deleteSessionError:"Errore durante l'eliminazione della sessione. Riprova.",renameSessionFailed:"Impossibile rinominare la sessione. Riprova.",renameSessionError:"Errore durante la rinomina della sessione. Riprova.",deleteProjectFailed:"Impossibile rimuovere il progetto. Riprova.",deleteProjectError:"Errore durante la rimozione del progetto. Riprova.",createProjectFailed:"Impossibile creare il progetto. Riprova.",createProjectError:"Errore durante la creazione del progetto. Riprova."},zve={updateAvailable:"Aggiornamento disponibile"},Bve={modeProjects:"Progetti",modeConversations:"Conversazioni",conversationsPlaceholder:"Cerca nelle conversazioni...",searching:"Ricerca in corso...",noResults:"Nessun risultato trovato",tryDifferentQuery:"Prova con una ricerca diversa",matches_one:"{{count}} corrispondenza",matches_other:"{{count}} corrispondenze",projectsScanned_one:"{{count}} progetto analizzato",projectsScanned_other:"{{count}} progetti analizzati"},Uve={deleteProject:"Rimuovi progetto",deleteSession:"Elimina sessione",confirmDelete:"Cosa vuoi fare con",sessionCount_one:"Questo progetto contiene {{count}} conversazione.",sessionCount_other:"Questo progetto contiene {{count}} conversazioni.",removeFromSidebar:"Rimuovi solo dalla barra laterale",deleteAllData:"Elimina tutti i dati permanentemente",allConversationsDeleted:"Il progetto verrà rimosso dalla barra laterale. I tuoi file, memorie e dati delle sessioni verranno preservati.",cannotUndo:"Puoi riaggiungerlo in seguito."},$ve={flat:"Recenti",grouped:"Per progetto"},Hve={section:"Orchestrazione",fallbackTitle:"Esecuzione orchestrazione"},Gve={projects:jve,app:Rve,sessions:Ive,tooltips:_ve,navigation:Lve,actions:Pve,branding:Dve,status:Ove,time:Mve,messages:Fve,version:zve,search:Bve,deleteConfirmation:Uve,historyView:$ve,orchestration:Hve},Vve={copy:"Copia",copied:"Copiato",copyCode:"Copia codice"},Wve={copy:"Copia messaggio",copied:"Messaggio copiato",selectFormat:"Seleziona formato copia",copyAsMarkdown:"Copia come markdown",copyAsText:"Copia come testo"},qve={user:"U",error:"Errore",tool:"Strumento",claude:"Claude",cursor:"Cursor",codex:"Codex",gemini:"Gemini",qwen:"Qwen Code"},Kve={settings:"Impostazioni strumento",error:"Errore strumento",result:"Risultato strumento",viewParams:"Vedi parametri input",viewRawParams:"Vedi parametri grezzi",viewDiff:"Vedi differenze per",creatingFile:"Creazione nuovo file:",updatingTodo:"Aggiornamento lista attività",read:"Leggi",readFile:"Leggi file",updateTodo:"Aggiorna lista attività",readTodo:"Leggi lista attività",searchResults:"risultati"},Yve={found:"Trovati {{count}} {{type}}",file:"file",files:"file",pattern:"pattern:",in:"in:"},Zve={updated:"File aggiornato con successo",created:"File creato con successo",written:"File scritto con successo",diff:"Differenze",newFile:"Nuovo file",viewContent:"Vedi contenuto file",viewFullOutput:"Vedi output completo ({{count}} caratteri)",contentDisplayed:"Il contenuto del file è visualizzato nella vista differenze sopra"},Xve={title:"Prompt interattivo",waiting:"In attesa della tua risposta nella CLI",instruction:"Seleziona un'opzione nel terminale dove Claude è in esecuzione.",selectedOption:"✓ Claude ha selezionato l'opzione {{number}}",instructionDetail:"Nella CLI, selezioneresti questa opzione interattivamente usando i tasti freccia o digitando il numero."},Jve={title:"Sto pensando...",emoji:"💭 Sto pensando..."},Qve={response:"Risposta JSON"},eye={grant:"Concedi permesso per {{tool}}",added:"Permesso aggiunto",addTo:"Aggiunge {{entry}} agli strumenti consentiti.",retry:"Permesso salvato. Riprova la richiesta per usare lo strumento.",error:"Impossibile aggiornare i permessi. Riprova.",openSettings:"Apri impostazioni"},tye={updated:"Lista attività aggiornata con successo",current:"Lista attività corrente"},nye={viewPlan:"📋 Vedi piano di implementazione",title:"Piano di implementazione"},rye={resetAt:"Limite di utilizzo Claude raggiunto. Il tuo limite verrà ripristinato alle **{{time}} {{timezone}}** - {{date}}"},aye={permissionMode:"Modalità permessi",modes:{default:"Modalità predefinita",acceptEdits:"Accetta modifiche",bypassPermissions:"Ignora permessi",plan:"Modalità piano"},descriptions:{default:"Solo i comandi attendibili (ls, cat, grep, git status, ecc.) vengono eseguiti automaticamente. Gli altri comandi vengono saltati. Può scrivere nell'area di lavoro.",acceptEdits:"Tutti i comandi vengono eseguiti automaticamente nell'area di lavoro. Modalità completamente automatica con esecuzione sandboxed.",bypassPermissions:"Accesso completo al sistema senza restrizioni. Tutti i comandi vengono eseguiti automaticamente con accesso completo a disco e rete. Usa con cautela.",plan:"Modalità pianificazione - nessun comando viene eseguito"},technicalDetails:"Dettagli tecnici"},iye={permissionMode:"Modalità permessi Gemini",description:"Controlla come Gemini CLI gestisce le approvazioni delle operazioni.",modes:{default:{title:"Standard (chiedi approvazione)",description:"Gemini chiederà l'approvazione prima di eseguire comandi, scrivere file e recuperare risorse web."},autoEdit:{title:"Modifica automatica (salta approvazioni file)",description:"Gemini approverà automaticamente modifiche ai file e recupero web, ma chiederà conferma per i comandi shell."},yolo:{title:"YOLO (ignora tutti i permessi)",description:"Gemini eseguirà tutte le operazioni senza chiedere approvazione. Usa con cautela."}}},sye={placeholder:"Digita / per i comandi, @ per i file, o chiedi qualcosa a {{provider}}...",placeholderDefault:"Scrivi il tuo messaggio...",disabled:"Input disabilitato",attachFiles:"Allega file",attachImages:"Allega immagini",send:"Invia",stop:"Ferma",clickToChangeMode:"Clicca per cambiare modalità permessi (o premi Tab nell'input)",showAllCommands:"Mostra tutti i comandi",clearInput:"Cancella input",scrollToBottom:"Scorri in basso"},oye={selector:{title:"Modalità ragionamento",description:"Il ragionamento esteso dà a Claude più tempo per valutare le alternative",active:"Attivo",tip:"Modalità di ragionamento più elevate richiedono più tempo ma forniscono un'analisi più approfondita"},modes:{none:{name:"Standard",description:"Risposta Claude normale",prefix:""},think:{name:"Pensa",description:"Ragionamento esteso base",prefix:"think"},thinkHard:{name:"Pensa di più",description:"Valutazione più approfondita",prefix:"think hard"},thinkHarder:{name:"Pensa ancora",description:"Analisi profonda con alternative",prefix:"think harder"},ultrathink:{name:"Ultrapensiero",description:"Budget massimo di ragionamento",prefix:"ultrathink"}},buttonTitle:"Modalità ragionamento: {{mode}}"},lye={title:"Scegli il tuo assistente AI",description:"Seleziona un provider per iniziare una nuova conversazione",selectModel:"Seleziona modello",statusUnavailable:"Stato non disponibile",statusRetryHint:"Impossibile verificare questa CLI. Tocca per riprovare.",retryStatus:"Riprova stato",providerInfo:{anthropic:"di Anthropic",openai:"di OpenAI",cursorEditor:"Editor codice AI",google:"di Google"},readyPrompt:{claude:"Pronto a usare Claude con {{model}}. Inizia a digitare il tuo messaggio qui sotto.",cursor:"Pronto a usare Cursor con {{model}}. Inizia a digitare il tuo messaggio qui sotto.",codex:"Pronto a usare Codex con {{model}}. Inizia a digitare il tuo messaggio qui sotto.",gemini:"Pronto a usare Gemini con {{model}}. Inizia a digitare il tuo messaggio qui sotto.",default:"Seleziona un provider sopra per iniziare"}},cye={continue:{title:"Continua la tua conversazione",description:"Fai domande sul tuo codice, richiedi modifiche o chiedi aiuto con le attività di sviluppo"},loading:{olderMessages:"Caricamento messaggi precedenti...",sessionMessages:"Caricamento messaggi della sessione..."},messages:{showingOf:"Visualizzati {{shown}} di {{total}} messaggi",scrollToLoad:"Scorri in alto per caricare altri",showingLast:"Visualizzati ultimi {{count}} messaggi ({{total}} totali)",loadEarlier:"Carica messaggi precedenti",loadAll:"Carica tutti i messaggi",loadingAll:"Caricamento di tutti i messaggi...",allLoaded:"Tutti i messaggi caricati",perfWarning:'Tutti i messaggi caricati — lo scorrimento potrebbe essere più lento. Clicca "Scorri in basso" per ripristinare le prestazioni.'}},dye={selectProject:{title:"Seleziona un progetto",description:"Scegli un progetto per aprire una shell interattiva in quella directory"},status:{newSession:"Nuova sessione",initializing:"Inizializzazione...",restarting:"Riavvio..."},actions:{disconnect:"Disconnetti",disconnectTitle:"Disconnetti dalla shell",restart:"Riavvia",restartTitle:"Riavvia shell (disconnetti prima)",connect:"Continua nella shell",connectTitle:"Connetti alla shell"},loading:"Caricamento terminale...",connecting:"Connessione alla shell...",startSession:"Avvia una nuova sessione Claude",startProviderSession:"Avvia una nuova sessione {{provider}}",resumeSession:"Riprendi sessione: {{displayName}}...",runCommand:"Esegui {{command}} in {{projectName}}",startCli:"Avvio Claude CLI in {{projectName}}",startProviderCli:"Avvio {{provider}} in {{projectName}}",defaultCommand:"comando"},uye={actions:{thinking:"Ragionamento",processing:"Elaborazione",analyzing:"Analisi",working:"In lavorazione",computing:"Calcolo",reasoning:"Ragionamento"},state:{live:"Attivo",paused:"In pausa"},elapsed:{seconds:"{{count}}s",minutesSeconds:"{{minutes}}m {{seconds}}s",label:"{{time}} trascorsi",startingNow:"Avvio in corso"},controls:{stopGeneration:"Interrompi generazione",pressEscToStop:"Premi Esc in qualsiasi momento per interrompere"},providers:{assistant:"Assistente"}},pye={startChatWithProvider:"Seleziona un progetto per iniziare a chattare con {{provider}}"},mye={nextTaskPrompt:"Inizia l'attività successiva"},hye={codeBlock:Vve,copyMessage:Wve,messageTypes:qve,tools:Kve,search:Yve,fileOperations:Zve,interactive:Xve,thinking:Jve,json:Qve,permissions:eye,todo:tye,plan:nye,usageLimit:rye,codex:aye,gemini:iye,input:sye,thinkingMode:oye,providerSelection:lye,session:cye,shell:dye,claudeStatus:uye,projectSelection:pye,tasks:mye},fye={changes:"modifiche",previousChange:"Modifica precedente",nextChange:"Modifica successiva",hideDiff:"Nascondi evidenziazione differenze",showDiff:"Mostra evidenziazione differenze",settings:"Impostazioni editor",collapse:"Comprimi editor",expand:"Espandi editor a larghezza piena"},gye="Caricamento {{fileName}}...",bye={showingChanges:"Visualizzazione modifiche"},xye={download:"Scarica file",save:"Salva",saving:"Salvataggio...",saved:"Salvato!",exitFullscreen:"Esci dalla modalità schermo intero",fullscreen:"Schermo intero",close:"Chiudi",previewMarkdown:"Anteprima markdown",editMarkdown:"Modifica markdown"},vye={lines:"Righe:",characters:"Caratteri:",shortcuts:"Premi Ctrl+S per salvare • Esc per chiudere"},yye={title:"File binario",message:`Il file "{{fileName}}" non può essere visualizzato nell'editor di testo perché è un file binario.`},wye={toolbar:fye,loading:gye,header:bye,actions:xye,footer:vye,binaryFile:yye},kye={title:"TaskMaster AI non è configurato",description:"TaskMaster aiuta a suddividere progetti complessi in attività gestibili con assistenza AI",whatIsTitle:"🎯 Cos'è TaskMaster?",features:{aiPowered:"Gestione attività AI: suddividi progetti complessi in sotto-attività gestibili",prdTemplates:"Template PRD: genera attività da documenti di requisiti del prodotto",dependencyTracking:"Tracciamento dipendenze: comprendi le relazioni tra attività e l'ordine di esecuzione",progressVisualization:"Visualizzazione progresso: board Kanban e analisi dettagliata delle attività",cliIntegration:"Integrazione CLI: usa i comandi taskmaster per flussi di lavoro avanzati"},initializeButton:"Inizializza TaskMaster AI"},Sye={title:"Inizia con TaskMaster",subtitle:"TaskMaster è inizializzato! Ecco cosa fare dopo:",steps:{createPRD:{title:"Crea un documento di requisiti del prodotto (PRD)",description:"Discuti la tua idea di progetto e crea un PRD che descriva cosa vuoi costruire.",addButton:"Aggiungi PRD",existingPRDs:"PRD esistenti:"},generateTasks:{title:"Genera attività dal PRD",description:"Una volta che hai un PRD, chiedi al tuo assistente AI di analizzarlo e TaskMaster lo suddividerà automaticamente in attività gestibili con dettagli di implementazione."},analyzeTasks:{title:"Analizza ed espandi le attività",description:"Chiedi al tuo assistente AI di analizzare la complessità delle attività ed espanderle in sotto-attività dettagliate per un'implementazione più semplice."},startBuilding:{title:"Inizia a costruire",description:"Chiedi al tuo assistente AI di iniziare a lavorare sulle attività, aggiornare il loro stato e aggiungere nuove attività man mano che il tuo progetto evolve."}},tip:"💡 Suggerimento: inizia con un PRD per ottenere il massimo dalla generazione di attività AI di TaskMaster"},Cye={title:"Configurazione TaskMaster",subtitle:"CLI interattiva per {{projectName}}",willStart:"L'inizializzazione di TaskMaster partirà automaticamente",completed:"Configurazione TaskMaster completata! Ora puoi chiudere questa finestra.",closeButton:"Chiudi",closeContinueButton:"Chiudi e continua"},Nye={title:"Inizia con TaskMaster",subtitle:"La tua guida per una gestione produttiva delle attività",examples:{parsePRD:`💬 Esempio:
|