@deepseekcode/cli 1.0.10 → 1.0.11
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/cli.js +505 -505
- package/package.json +2 -2
- package/web/dist/assets/{AgentFlowView-CRwXzsUU.js → AgentFlowView-CZQeHyLi.js} +1 -1
- package/web/dist/assets/{AgentsView-CDY8XrTg.js → AgentsView-CfQ-EXdY.js} +1 -1
- package/web/dist/assets/{AskQuestionModal-CKt1m8Jo.js → AskQuestionModal-DGd7VFFR.js} +1 -1
- package/web/dist/assets/{AuditView-DbfHUxzt.js → AuditView-BVyD7ivS.js} +1 -1
- package/web/dist/assets/{AutomationView-Cy1-vLAP.js → AutomationView-3dP2f6BZ.js} +1 -1
- package/web/dist/assets/{ChannelConfigView-CprbcO4h.js → ChannelConfigView-BXvSck5e.js} +1 -1
- package/web/dist/assets/{FileTreeView-CbGQmQay.js → FileTreeView-HfjwdQz9.js} +1 -1
- package/web/dist/assets/{HookApprovalModal-DU0Gen9V.js → HookApprovalModal-dGHgJ_pM.js} +1 -1
- package/web/dist/assets/{HookConfigView-bKFZ-DDV.js → HookConfigView-F6uvScie.js} +2 -2
- package/web/dist/assets/{InboxView-B5puastg.js → InboxView-DQ1i65AD.js} +1 -1
- package/web/dist/assets/{ModelsView-Df8fwn3X.js → ModelsView-CsOKSn0l.js} +1 -1
- package/web/dist/assets/{SessionGrid-BPcnOjbx.js → SessionGrid-DPDDTcff.js} +10 -10
- package/web/dist/assets/{SettingsPanel-CWlTCD1c.js → SettingsPanel-D96vsDCf.js} +1 -1
- package/web/dist/assets/{SkillsView-m_a2rauP.js → SkillsView-DsRZm-UY.js} +1 -1
- package/web/dist/assets/{TerminalView-UaCcIjqn.js → TerminalView-CMmJ55Zj.js} +1 -1
- package/web/dist/assets/{ToolsView-DH4XhAov.js → ToolsView-CHJ8k68t.js} +1 -1
- package/web/dist/assets/{hookRisk-BkOtQiAS.js → hookRisk-DsIEdNpD.js} +1 -1
- package/web/dist/assets/{index-Bpfxw0Lr.js → index-DGWtPRgs.js} +2 -2
- package/web/dist/assets/index-DuBeChMI.css +1 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-xDhqs-ld.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ModelsView-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ModelsView-CsOKSn0l.js","assets/markdown-BUScHEtT.js","assets/icons-uody4X-4.js","assets/Toast-CcbSW0V2.js","assets/react-vendor-C5NlWs7r.js","assets/state-DKyBAq9j.js","assets/ToolsView-CHJ8k68t.js","assets/AgentFlowView-CZQeHyLi.js","assets/SkillsView-DsRZm-UY.js","assets/AgentsView-CfQ-EXdY.js","assets/HookConfigView-F6uvScie.js","assets/FileTreeView-HfjwdQz9.js","assets/TerminalView-CMmJ55Zj.js","assets/terminal-Ck_l6svU.js","assets/TerminalView-C1Mzzh8g.css","assets/SessionGrid-DPDDTcff.js","assets/hookRisk-DsIEdNpD.js","assets/SettingsPanel-D96vsDCf.js","assets/HookApprovalModal-dGHgJ_pM.js","assets/AskQuestionModal-DGd7VFFR.js","assets/ChannelConfigView-BXvSck5e.js","assets/InboxView-DQ1i65AD.js","assets/AutomationView-3dP2f6BZ.js","assets/AuditView-BVyD7ivS.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var Fn=Object.defineProperty;var Wn=(s,e,t)=>e in s?Fn(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var X=(s,e,t)=>Wn(s,typeof e!="symbol"?e+"":e,t);import{j as l}from"./markdown-BUScHEtT.js";import{r as g,L as sn,X as $e,C as Hn,a as pt,b as it,d as nn,A as es,e as Un,f as zn,S as Me,F as zt,h as Kn,D as bs,E as Gn,i as on,j as qn,P as Kt,G as Ct,k as ts,l as _t,H as xs,m as Vn,M as rn,n as Jn,o as ss,p as an,q as ks,s as Yn,t as Ss,u as Qn,v as Xn,w as Zn,I as ln,x as eo,y as to,z as so,B as no,J as oo,K as ro,W as ao,N as io,O as lo,Q as co,T as uo,U as po,V as ho,Y as mo,Z as fo,_ as go,g as yo,R as bo}from"./icons-uody4X-4.js";import{r as xo}from"./react-vendor-C5NlWs7r.js";import{s as ko,c as ue}from"./state-DKyBAq9j.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function t(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(r){if(r.ep)return;r.ep=!0;const o=t(r);fetch(r.href,o)}})();var Gt={},vs=xo;Gt.createRoot=vs.createRoot,Gt.hydrateRoot=vs.hydrateRoot;const So="modulepreload",vo=function(s){return"/"+s},ws={},se=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),i=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));r=Promise.allSettled(t.map(d=>{if(d=vo(d),d in ws)return;ws[d]=!0;const c=d.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${u}`))return;const p=document.createElement("link");if(p.rel=c?"stylesheet":So,c||(p.as="script"),p.crossOrigin="",p.href=d,i&&p.setAttribute("nonce",i),document.head.appendChild(p),c)return new Promise((h,m)=>{p.addEventListener("load",h),p.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${d}`)))})}))}function o(a){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=a,window.dispatchEvent(i),!i.defaultPrevented)throw a}return r.then(a=>{for(const i of a||[])i.status==="rejected"&&o(i.reason);return e().catch(o)})},R=s=>typeof s=="string",Ge=()=>{let s,e;const t=new Promise((n,r)=>{s=n,e=r});return t.resolve=s,t.reject=e,t},Cs=s=>s==null?"":String(s),wo=(s,e,t)=>{s.forEach(n=>{e[n]&&(t[n]=e[n])})},Co=/###/g,_s=s=>s&&s.includes("###")?s.replace(Co,"."):s,Ts=s=>!s||R(s),nt=(s,e,t)=>{const n=R(e)?e.split("."):e;let r=0;for(;r<n.length-1;){if(Ts(s))return{};const o=_s(n[r]);!s[o]&&t&&(s[o]=new t),Object.prototype.hasOwnProperty.call(s,o)?s=s[o]:s={},++r}return Ts(s)?{}:{obj:s,k:_s(n[r])}},Ns=(s,e,t)=>{const{obj:n,k:r}=nt(s,e,Object);if(n!==void 0||e.length===1){n[r]=t;return}let o=e[e.length-1],a=e.slice(0,e.length-1),i=nt(s,a,Object);for(;i.obj===void 0&&a.length;)o=`${a[a.length-1]}.${o}`,a=a.slice(0,a.length-1),i=nt(s,a,Object),i!=null&&i.obj&&typeof i.obj[`${i.k}.${o}`]<"u"&&(i.obj=void 0);i.obj[`${i.k}.${o}`]=t},_o=(s,e,t,n)=>{const{obj:r,k:o}=nt(s,e,Object);r[o]=r[o]||[],r[o].push(t)},kt=(s,e)=>{const{obj:t,k:n}=nt(s,e);if(t&&Object.prototype.hasOwnProperty.call(t,n))return t[n]},To=(s,e,t)=>{const n=kt(s,t);return n!==void 0?n:kt(e,t)},cn=(s,e,t)=>{for(const n in e)n!=="__proto__"&&n!=="constructor"&&(Object.prototype.hasOwnProperty.call(s,n)?R(s[n])||s[n]instanceof String||R(e[n])||e[n]instanceof String?t&&(s[n]=e[n]):cn(s[n],e[n],t):s[n]=e[n]);return s},we=s=>s.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),No={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},Bo=s=>R(s)?s.replace(/[&<>"'\/]/g,e=>No[e]):s;class jo{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){const t=this.regExpMap.get(e);if(t!==void 0)return t;const n=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,n),this.regExpQueue.push(e),n}}const Eo=[" ",",","?","!",";"],Ao=new jo(20),Po=(s,e,t)=>{e=e||"",t=t||"";const n=Eo.filter(a=>!e.includes(a)&&!t.includes(a));if(n.length===0)return!0;const r=Ao.getRegExp(`(${n.map(a=>a==="?"?"\\?":a).join("|")})`);let o=!r.test(s);if(!o){const a=s.indexOf(t);a>0&&!r.test(s.substring(0,a))&&(o=!0)}return o},qt=(s,e,t=".")=>{if(!s)return;if(s[e])return Object.prototype.hasOwnProperty.call(s,e)?s[e]:void 0;const n=e.split(t);let r=s;for(let o=0;o<n.length;){if(!r||typeof r!="object")return;let a,i="";for(let d=o;d<n.length;++d)if(d!==o&&(i+=t),i+=n[d],a=r[i],a!==void 0){if(["string","number","boolean"].includes(typeof a)&&d<n.length-1)continue;o+=d-o+1;break}r=a}return r},lt=s=>s==null?void 0:s.replace(/_/g,"-"),Ro={type:"logger",log(s){this.output("log",s)},warn(s){this.output("warn",s)},error(s){this.output("error",s)},output(s,e){var t,n;(n=(t=console==null?void 0:console[s])==null?void 0:t.apply)==null||n.call(t,console,e)}};class St{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||"i18next:",this.logger=e||Ro,this.options=t,this.debug=t.debug}log(...e){return this.forward(e,"log","",!0)}warn(...e){return this.forward(e,"warn","",!0)}error(...e){return this.forward(e,"error","")}deprecate(...e){return this.forward(e,"warn","WARNING DEPRECATED: ",!0)}forward(e,t,n,r){return r&&!this.debug?null:(e=e.map(o=>R(o)?o.replace(/[\r\n\x00-\x1F\x7F]/g," "):o),R(e[0])&&(e[0]=`${n}${this.prefix} ${e[0]}`),this.logger[t](e))}create(e){return new St(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return e=e||this.options,e.prefix=e.prefix||this.prefix,new St(this.logger,e)}}var Se=new St;class Tt{constructor(){this.observers={}}on(e,t){return e.split(" ").forEach(n=>{this.observers[n]||(this.observers[n]=new Map);const r=this.observers[n].get(t)||0;this.observers[n].set(t,r+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}once(e,t){const n=(...r)=>{t(...r),this.off(e,n)};return this.on(e,n),this}emit(e,...t){this.observers[e]&&Array.from(this.observers[e].entries()).forEach(([r,o])=>{for(let a=0;a<o;a++)r(...t)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([r,o])=>{for(let a=0;a<o;a++)r(e,...t)})}}class Bs extends Tt{constructor(e,t={ns:["translation"],defaultNS:"translation"}){super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.includes(e)||this.options.ns.push(e)}removeNamespaces(e){const t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,n,r={}){var c,u;const o=r.keySeparator!==void 0?r.keySeparator:this.options.keySeparator,a=r.ignoreJSONStructure!==void 0?r.ignoreJSONStructure:this.options.ignoreJSONStructure;let i;e.includes(".")?i=e.split("."):(i=[e,t],n&&(Array.isArray(n)?i.push(...n):R(n)&&o?i.push(...n.split(o)):i.push(n)));const d=kt(this.data,i);return!d&&!t&&!n&&e.includes(".")&&(e=i[0],t=i[1],n=i.slice(2).join(".")),d||!a||!R(n)?d:qt((u=(c=this.data)==null?void 0:c[e])==null?void 0:u[t],n,o)}addResource(e,t,n,r,o={silent:!1}){const a=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator;let i=[e,t];n&&(i=i.concat(a?n.split(a):n)),e.includes(".")&&(i=e.split("."),r=t,t=i[1]),this.addNamespaces(t),Ns(this.data,i,r),o.silent||this.emit("added",e,t,n,r)}addResources(e,t,n,r={silent:!1}){for(const o in n)(R(n[o])||Array.isArray(n[o]))&&this.addResource(e,t,o,n[o],{silent:!0});r.silent||this.emit("added",e,t,n)}addResourceBundle(e,t,n,r,o,a={silent:!1,skipCopy:!1}){let i=[e,t];e.includes(".")&&(i=e.split("."),r=n,n=t,t=i[1]),this.addNamespaces(t);let d=kt(this.data,i)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?cn(d,n,o):d={...d,...n},Ns(this.data,i,d),a.silent||this.emit("added",e,t,n)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||(t=this.options.defaultNS),this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(r=>t[r]&&Object.keys(t[r]).length>0)}toJSON(){return this.data}}var dn={processors:{},addPostProcessor(s){this.processors[s.name]=s},handle(s,e,t,n,r){return s.forEach(o=>{var a;e=((a=this.processors[o])==null?void 0:a.process(e,t,n,r))??e}),e}};const un=Symbol("i18next/PATH_KEY");function Lo(){const s=[],e=Object.create(null);let t;return e.get=(n,r)=>{var o;return(o=t==null?void 0:t.revoke)==null||o.call(t),r===un?s:(s.push(r),t=Proxy.revocable(n,e),t.proxy)},Proxy.revocable(Object.create(null),e).proxy}function Oe(s,e){const{[un]:t}=s(Lo()),n=(e==null?void 0:e.keySeparator)??".",r=(e==null?void 0:e.nsSeparator)??":",o=(e==null?void 0:e.enableSelector)==="strict";if(t.length>1&&r){const a=e==null?void 0:e.ns,i=o?Array.isArray(a)?a:a?[a]:null:Array.isArray(a)?a:null;if(i&&(o?i:i.length>1?i.slice(1):[]).includes(t[0]))return`${t[0]}${r}${t.slice(1).join(n)}`}return t.join(n)}const Pt=s=>!R(s)&&typeof s!="boolean"&&typeof s!="number";class vt extends Tt{constructor(e,t={}){super(),wo(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Se.create("translator"),this.checkedLoadedFor={}}changeLanguage(e){e&&(this.language=e)}exists(e,t={interpolation:{}}){const n={...t};if(e==null)return!1;const r=this.resolve(e,n);if((r==null?void 0:r.res)===void 0)return!1;const o=Pt(r.res);return!(n.returnObjects===!1&&o)}extractFromKey(e,t){let n=t.nsSeparator!==void 0?t.nsSeparator:this.options.nsSeparator;n===void 0&&(n=":");const r=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator;let o=t.ns||this.options.defaultNS||[];const a=n&&e.includes(n),i=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!Po(e,n,r);if(a&&!i){const d=e.match(this.interpolator.nestingRegexp);if(d&&d.length>0)return{key:e,namespaces:R(o)?[o]:o};const c=e.split(n);(n!==r||n===r&&this.options.ns.includes(c[0]))&&(o=c.shift()),e=c.join(r)}return{key:e,namespaces:R(o)?[o]:o}}translate(e,t,n){let r=typeof t=="object"?{...t}:t;if(typeof r!="object"&&this.options.overloadTranslationOptionHandler&&(r=this.options.overloadTranslationOptionHandler(arguments)),typeof r=="object"&&(r={...r}),r||(r={}),e==null)return"";typeof e=="function"&&(e=Oe(e,{...this.options,...r})),Array.isArray(e)||(e=[String(e)]),e=e.map(x=>typeof x=="function"?Oe(x,{...this.options,...r}):String(x));const o=r.returnDetails!==void 0?r.returnDetails:this.options.returnDetails,a=r.keySeparator!==void 0?r.keySeparator:this.options.keySeparator,{key:i,namespaces:d}=this.extractFromKey(e[e.length-1],r),c=d[d.length-1];let u=r.nsSeparator!==void 0?r.nsSeparator:this.options.nsSeparator;u===void 0&&(u=":");const p=r.lng||this.language,h=r.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if((p==null?void 0:p.toLowerCase())==="cimode")return h?o?{res:`${c}${u}${i}`,usedKey:i,exactUsedKey:i,usedLng:p,usedNS:c,usedParams:this.getUsedParamsDetails(r)}:`${c}${u}${i}`:o?{res:i,usedKey:i,exactUsedKey:i,usedLng:p,usedNS:c,usedParams:this.getUsedParamsDetails(r)}:i;const m=this.resolve(e,r);let f=m==null?void 0:m.res;const y=(m==null?void 0:m.usedKey)||i,b=(m==null?void 0:m.exactUsedKey)||i,w=["[object Number]","[object Function]","[object RegExp]"],S=r.joinArrays!==void 0?r.joinArrays:this.options.joinArrays,T=!this.i18nFormat||this.i18nFormat.handleAsObject,_=r.count!==void 0&&!R(r.count),k=vt.hasDefaultValue(r),P=_?this.pluralResolver.getSuffix(p,r.count,r):"",A=r.ordinal&&_?this.pluralResolver.getSuffix(p,r.count,{ordinal:!1}):"",$=_&&!r.ordinal&&r.count===0,M=$&&r[`defaultValue${this.options.pluralSeparator}zero`]||r[`defaultValue${P}`]||r[`defaultValue${A}`]||r.defaultValue;let F=f;T&&!f&&k&&(F=M);const ee=Pt(F),N=Object.prototype.toString.apply(F);if(T&&F&&ee&&!w.includes(N)&&!(R(S)&&Array.isArray(F))){if(!r.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const x=this.options.returnedObjectHandler?this.options.returnedObjectHandler(y,F,{...r,ns:d}):`key '${i} (${this.language})' returned an object instead of string.`;return o?(m.res=x,m.usedParams=this.getUsedParamsDetails(r),m):x}if(a){const x=Array.isArray(F),j=x?[]:{},D=x?b:y;for(const W in F)if(Object.prototype.hasOwnProperty.call(F,W)){const B=`${D}${a}${W}`;k&&!f?j[W]=this.translate(B,{...r,defaultValue:Pt(M)?M[W]:void 0,joinArrays:!1,ns:d}):j[W]=this.translate(B,{...r,joinArrays:!1,ns:d}),j[W]===B&&(j[W]=F[W])}f=j}}else if(T&&R(S)&&Array.isArray(f))f=f.join(S),f&&(f=this.extendTranslation(f,e,r,n));else{let x=!1,j=!1;!this.isValidLookup(f)&&k&&(x=!0,f=M),this.isValidLookup(f)||(j=!0,f=i);const W=(r.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&j?void 0:f,B=k&&M!==f&&this.options.updateMissing;if(j||x||B){if(this.logger.log(B?"updateKey":"missingKey",p,c,_&&!B?`${i}${this.pluralResolver.getSuffix(p,r.count,r)}`:i,B?M:f),a){const J=this.resolve(i,{...r,keySeparator:!1});J&&J.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let I=[];const O=this.languageUtils.getFallbackCodes(this.options.fallbackLng,r.lng||this.language);if(this.options.saveMissingTo==="fallback"&&O&&O[0])for(let J=0;J<O.length;J++)I.push(O[J]);else this.options.saveMissingTo==="all"?I=this.languageUtils.toResolveHierarchy(r.lng||this.language):I.push(r.lng||this.language);const ae=(J,ce,ne)=>{var Ue;const de=k&&ne!==f?ne:W;this.options.missingKeyHandler?this.options.missingKeyHandler(J,c,ce,de,B,r):(Ue=this.backendConnector)!=null&&Ue.saveMissing&&this.backendConnector.saveMissing(J,c,ce,de,B,r),this.emit("missingKey",J,c,ce,f)};this.options.saveMissing&&(this.options.saveMissingPlurals&&_?I.forEach(J=>{const ce=this.pluralResolver.getSuffixes(J,r);$&&r[`defaultValue${this.options.pluralSeparator}zero`]&&!ce.includes(`${this.options.pluralSeparator}zero`)&&ce.push(`${this.options.pluralSeparator}zero`),ce.forEach(ne=>{ae([J],i+ne,r[`defaultValue${ne}`]||M)})}):ae(I,i,M))}f=this.extendTranslation(f,e,r,m,n),j&&f===i&&this.options.appendNamespaceToMissingKey&&(f=`${c}${u}${i}`),(j||x)&&this.options.parseMissingKeyHandler&&(f=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${c}${u}${i}`:i,x?f:void 0,r))}return o?(m.res=f,m.usedParams=this.getUsedParamsDetails(r),m):f}extendTranslation(e,t,n,r,o){var d,c;if((d=this.i18nFormat)!=null&&d.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...n},n.lng||this.language||r.usedLng,r.usedNS,r.usedKey,{resolved:r});else if(!n.skipInterpolation){n.interpolation&&this.interpolator.init({...n,interpolation:{...this.options.interpolation,...n.interpolation}});const u=R(e)&&(((c=n==null?void 0:n.interpolation)==null?void 0:c.skipOnVariables)!==void 0?n.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let p;if(u){const m=e.match(this.interpolator.nestingRegexp);p=m&&m.length}let h=n.replace&&!R(n.replace)?n.replace:n;if(this.options.interpolation.defaultVariables&&(h={...this.options.interpolation.defaultVariables,...h}),e=this.interpolator.interpolate(e,h,n.lng||this.language||r.usedLng,n),u){const m=e.match(this.interpolator.nestingRegexp),f=m&&m.length;p<f&&(n.nest=!1)}!n.lng&&r&&r.res&&(n.lng=this.language||r.usedLng),n.nest!==!1&&(e=this.interpolator.nest(e,(...m)=>(o==null?void 0:o[0])===m[0]&&!n.context?(this.logger.warn(`It seems you are nesting recursively key: ${m[0]} in key: ${t[0]}`),null):this.translate(...m,t),n)),n.interpolation&&this.interpolator.reset()}const a=n.postProcess||this.options.postProcess,i=R(a)?[a]:a;return e!=null&&(i!=null&&i.length)&&n.applyPostProcessor!==!1&&(e=dn.handle(i,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...r,usedParams:this.getUsedParamsDetails(n)},...n}:n,this)),e}resolve(e,t={}){let n,r,o,a,i;return R(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(d=>typeof d=="function"?Oe(d,{...this.options,...t}):d)),e.forEach(d=>{if(this.isValidLookup(n))return;const c=this.extractFromKey(d,t),u=c.key;r=u;let p=c.namespaces;this.options.fallbackNS&&(p=p.concat(this.options.fallbackNS));const h=t.count!==void 0&&!R(t.count),m=h&&!t.ordinal&&t.count===0,f=t.context!==void 0&&(R(t.context)||typeof t.context=="number")&&t.context!=="",y=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);p.forEach(b=>{var w,S;this.isValidLookup(n)||(i=b,!this.checkedLoadedFor[`${y[0]}-${b}`]&&((w=this.utils)!=null&&w.hasLoadedNamespace)&&!((S=this.utils)!=null&&S.hasLoadedNamespace(i))&&(this.checkedLoadedFor[`${y[0]}-${b}`]=!0,this.logger.warn(`key "${r}" for languages "${y.join(", ")}" won't get resolved as namespace "${i}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),y.forEach(T=>{var P;if(this.isValidLookup(n))return;a=T;const _=[u];if((P=this.i18nFormat)!=null&&P.addLookupKeys)this.i18nFormat.addLookupKeys(_,u,T,b,t);else{let A;h&&(A=this.pluralResolver.getSuffix(T,t.count,t));const $=`${this.options.pluralSeparator}zero`,M=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(h&&(t.ordinal&&A.startsWith(M)&&_.push(u+A.replace(M,this.options.pluralSeparator)),_.push(u+A),m&&_.push(u+$)),f){const F=`${u}${this.options.contextSeparator||"_"}${t.context}`;_.push(F),h&&(t.ordinal&&A.startsWith(M)&&_.push(F+A.replace(M,this.options.pluralSeparator)),_.push(F+A),m&&_.push(F+$))}}let k;for(;k=_.pop();)this.isValidLookup(n)||(o=k,n=this.getResource(T,b,k,t))}))})}),{res:n,usedKey:r,exactUsedKey:o,usedLng:a,usedNS:i}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,t,n,r={}){var o;return(o=this.i18nFormat)!=null&&o.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}getUsedParamsDetails(e={}){const t=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],n=e.replace&&!R(e.replace);let r=n?e.replace:e;if(n&&typeof e.count<"u"&&(r={...r,count:e.count}),this.options.interpolation.defaultVariables&&(r={...this.options.interpolation.defaultVariables,...r}),!n){r={...r};for(const o of t)delete r[o]}return r}static hasDefaultValue(e){const t="defaultValue";for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&n.startsWith(t)&&e[n]!==void 0)return!0;return!1}}class js{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Se.create("languageUtils")}getScriptPartFromCode(e){if(e=lt(e),!e||!e.includes("-"))return null;const t=e.split("-");return t.length===2||(t.pop(),t[t.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(t.join("-"))}getLanguagePartFromCode(e){if(e=lt(e),!e||!e.includes("-"))return e;const t=e.split("-");return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(R(e)&&e.includes("-")){let t;try{t=Intl.getCanonicalLocales(e)[0]}catch{}return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(this.options.lowerCaseLng?e.toLowerCase():e)}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(e)}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(n=>{if(t)return;const r=this.formatLanguageCode(n);(!this.options.supportedLngs||this.isSupportedCode(r))&&(t=r)}),!t&&this.options.supportedLngs&&e.forEach(n=>{if(t)return;const r=this.getScriptPartFromCode(n);if(this.isSupportedCode(r))return t=r;const o=this.getLanguagePartFromCode(n);if(this.isSupportedCode(o))return t=o;t=this.options.supportedLngs.find(a=>a===o?!0:!a.includes("-")&&!o.includes("-")?!1:!!(a.includes("-")&&!o.includes("-")&&a.slice(0,a.indexOf("-"))===o||a.startsWith(o)&&o.length>1))}),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t}getFallbackCodes(e,t){if(!e)return[];if(typeof e=="function"&&(e=e(t)),R(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let n=e[t];return n||(n=e[this.getScriptPartFromCode(t)]),n||(n=e[this.formatLanguageCode(t)]),n||(n=e[this.getLanguagePartFromCode(t)]),n||(n=e.default),n||[]}toResolveHierarchy(e,t){const n=this.getFallbackCodes((t===!1?[]:t)||this.options.fallbackLng||[],e),r=[],o=a=>{a&&(this.isSupportedCode(a)?r.push(a):this.logger.warn(`rejecting language code not found in supportedLngs: ${a}`))};return R(e)&&(e.includes("-")||e.includes("_"))?(this.options.load!=="languageOnly"&&o(this.formatLanguageCode(e)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&o(this.getScriptPartFromCode(e)),this.options.load!=="currentOnly"&&o(this.getLanguagePartFromCode(e))):R(e)&&o(this.formatLanguageCode(e)),n.forEach(a=>{r.includes(a)||o(this.formatLanguageCode(a))}),r}}const Es={zero:0,one:1,two:2,few:3,many:4,other:5},As={select:s=>s===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class Io{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=Se.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){const n=lt(e==="dev"?"en":e),r=t.ordinal?"ordinal":"cardinal",o=JSON.stringify({cleanedCode:n,type:r});if(o in this.pluralRulesCache)return this.pluralRulesCache[o];let a;try{a=new Intl.PluralRules(n,{type:r})}catch{if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),As;if(!e.match(/-|_/))return As;const d=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(d,t)}return this.pluralRulesCache[o]=a,a}needsPlural(e,t={}){let n=this.getRule(e,t);return n||(n=this.getRule("dev",t)),(n==null?void 0:n.resolvedOptions().pluralCategories.length)>1}getPluralFormsOfKey(e,t,n={}){return this.getSuffixes(e,n).map(r=>`${t}${r}`)}getSuffixes(e,t={}){let n=this.getRule(e,t);return n||(n=this.getRule("dev",t)),n?n.resolvedOptions().pluralCategories.sort((r,o)=>Es[r]-Es[o]).map(r=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:""}${r}`):[]}getSuffix(e,t,n={}){const r=this.getRule(e,n);return r?`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${r.select(t)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix("dev",t,n))}}const Ps=(s,e,t,n=".",r=!0)=>{let o=To(s,e,t);return!o&&r&&R(t)&&(o=qt(s,t,n),o===void 0&&(o=qt(e,t,n))),o},Mo=s=>s.replace(/\$/g,"$$$$");class Rs{constructor(e={}){var t;this.logger=Se.create("interpolator"),this.options=e,this.format=((t=e==null?void 0:e.interpolation)==null?void 0:t.format)||(n=>n),this.init(e)}init(e={}){e.interpolation||(e.interpolation={escapeValue:!0});const{escape:t,escapeValue:n,useRawValueToEscape:r,prefix:o,prefixEscaped:a,suffix:i,suffixEscaped:d,formatSeparator:c,unescapeSuffix:u,unescapePrefix:p,nestingPrefix:h,nestingPrefixEscaped:m,nestingSuffix:f,nestingSuffixEscaped:y,nestingOptionsSeparator:b,maxReplaces:w,alwaysFormat:S}=e.interpolation;this.escape=t!==void 0?t:Bo,this.escapeValue=n!==void 0?n:!0,this.useRawValueToEscape=r!==void 0?r:!1,this.prefix=o?we(o):a||"{{",this.suffix=i?we(i):d||"}}",this.formatSeparator=c||",",this.unescapePrefix=u?"":p?we(p):"-",this.unescapeSuffix=this.unescapePrefix?"":u?we(u):"",this.nestingPrefix=h?we(h):m||we("$t("),this.nestingSuffix=f?we(f):y||we(")"),this.nestingOptionsSeparator=b||",",this.maxReplaces=w||1e3,this.alwaysFormat=S!==void 0?S:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(t,n)=>(t==null?void 0:t.source)===n?(t.lastIndex=0,t):new RegExp(n,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(e,t,n,r){var m;let o,a,i;const d=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},c=f=>{if(!f.includes(this.formatSeparator)){const S=Ps(t,d,f,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(S,void 0,n,{...r,...t,interpolationkey:f}):S}const y=f.split(this.formatSeparator),b=y.shift().trim(),w=y.join(this.formatSeparator).trim();return this.format(Ps(t,d,b,this.options.keySeparator,this.options.ignoreJSONStructure),w,n,{...r,...t,interpolationkey:b})};this.resetRegExp(),!this.escapeValue&&typeof e=="string"&&/\$t\([^)]*\{[^}]*\{\{/.test(e)&&this.logger.warn("nesting options string contains interpolated variables with escapeValue: false — if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.");const u=(r==null?void 0:r.missingInterpolationHandler)||this.options.missingInterpolationHandler,p=((m=r==null?void 0:r.interpolation)==null?void 0:m.skipOnVariables)!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:f=>f},{regex:this.regexp,safeValue:f=>this.escapeValue?this.escape(f):f}].forEach(f=>{for(i=0;o=f.regex.exec(e);){const y=o[1].trim();if(a=c(y),a===void 0)if(typeof u=="function"){const w=u(e,o,r);a=R(w)?w:""}else if(r&&Object.prototype.hasOwnProperty.call(r,y))a="";else if(p){a=o[0];continue}else this.logger.warn(`missed to pass in variable ${y} for interpolating ${e}`),a="";else!R(a)&&!this.useRawValueToEscape&&(a=Cs(a));const b=f.safeValue(a);if(e=e.replace(o[0],Mo(b)),p?(f.regex.lastIndex+=b.length,f.regex.lastIndex-=o[0].length):f.regex.lastIndex=0,i++,i>=this.maxReplaces)break}}),e}nest(e,t,n={}){let r,o,a;const i=(d,c)=>{const u=this.nestingOptionsSeparator;if(!d.includes(u))return d;const p=d.split(new RegExp(`${we(u)}[ ]*{`));let h=`{${p[1]}`;d=p[0],h=this.interpolate(h,a);const m=h.match(/'/g),f=h.match(/"/g);(((m==null?void 0:m.length)??0)%2===0&&!f||((f==null?void 0:f.length)??0)%2!==0)&&(h=h.replace(/'/g,'"'));try{a=JSON.parse(h),c&&(a={...c,...a})}catch(y){return this.logger.warn(`failed parsing options string in nesting for key ${d}`,y),`${d}${u}${h}`}return a.defaultValue&&a.defaultValue.includes(this.prefix)&&delete a.defaultValue,d};for(;r=this.nestingRegexp.exec(e);){let d=[];a={...n},a=a.replace&&!R(a.replace)?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;const c=/{.*}/s.test(r[1])?r[1].lastIndexOf("}")+1:r[1].indexOf(this.formatSeparator);if(c!==-1&&(d=r[1].slice(c).split(this.formatSeparator).map(u=>u.trim()).filter(Boolean),r[1]=r[1].slice(0,c)),o=t(i.call(this,r[1].trim(),a),a),o&&r[0]===e&&!R(o))return o;R(o)||(o=Cs(o)),o||(this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`),o=""),d.length&&(o=d.reduce((u,p)=>this.format(u,p,n.lng,{...n,interpolationkey:r[1].trim()}),o.trim())),e=e.replace(r[0],o),this.regexp.lastIndex=0}return e}}const Oo=s=>{let e=s.toLowerCase().trim();const t={};if(s.includes("(")){const n=s.split("(");e=n[0].toLowerCase().trim();const r=n[1].slice(0,-1);e==="currency"&&!r.includes(":")?t.currency||(t.currency=r.trim()):e==="relativetime"&&!r.includes(":")?t.range||(t.range=r.trim()):r.split(";").forEach(a=>{if(a){const[i,...d]=a.split(":"),c=d.join(":").trim().replace(/^'+|'+$/g,""),u=i.trim();t[u]||(t[u]=c),c==="false"&&(t[u]=!1),c==="true"&&(t[u]=!0),isNaN(c)||(t[u]=parseInt(c,10))}})}return{formatName:e,formatOptions:t}},Ls=s=>{const e={};return(t,n,r)=>{let o=r;r&&r.interpolationkey&&r.formatParams&&r.formatParams[r.interpolationkey]&&r[r.interpolationkey]&&(o={...o,[r.interpolationkey]:void 0});const a=n+JSON.stringify(o);let i=e[a];return i||(i=s(lt(n),r),e[a]=i),i(t)}},$o=s=>(e,t,n)=>s(lt(t),n)(e);class Do{constructor(e={}){this.logger=Se.create("formatter"),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||",";const n=t.cacheInBuiltFormats?Ls:$o;this.formats={number:n((r,o)=>{const a=new Intl.NumberFormat(r,{...o});return i=>a.format(i)}),currency:n((r,o)=>{const a=new Intl.NumberFormat(r,{...o,style:"currency"});return i=>a.format(i)}),datetime:n((r,o)=>{const a=new Intl.DateTimeFormat(r,{...o});return i=>a.format(i)}),relativetime:n((r,o)=>{const a=new Intl.RelativeTimeFormat(r,{...o});return i=>a.format(i,o.range||"day")}),list:n((r,o)=>{const a=new Intl.ListFormat(r,{...o});return i=>a.format(i)})}}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=Ls(t)}format(e,t,n,r={}){if(!t||e==null)return e;const o=t.split(this.formatSeparator),a=[];for(let d=0;d<o.length;d++){let c=o[d];for(;c.indexOf("(")>-1&&!c.includes(")")&&d+1<o.length;)c=`${c}${this.formatSeparator}${o[++d]}`;a.push(c)}return a.reduce((d,c)=>{var h;const{formatName:u,formatOptions:p}=Oo(c);if(this.formats[u]){let m=d;try{const f=((h=r==null?void 0:r.formatParams)==null?void 0:h[r.interpolationkey])||{},y=f.locale||f.lng||r.locale||r.lng||n;m=this.formats[u](d,y,{...p,...r,...f})}catch(f){this.logger.warn(f)}return m}else this.logger.warn(`there was no format function for ${u}`);return d},e)}}const Fo=(s,e)=>{s.pending[e]!==void 0&&(delete s.pending[e],s.pendingCount--)};class Wo extends Tt{constructor(e,t,n,r={}){var o,a;super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=Se.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=r.maxParallelReads||10,this.readingCalls=0,this.maxRetries=r.maxRetries>=0?r.maxRetries:5,this.retryTimeout=r.retryTimeout>=1?r.retryTimeout:350,this.state={},this.queue=[],(a=(o=this.backend)==null?void 0:o.init)==null||a.call(o,n,r.backend,r)}queueLoad(e,t,n,r){const o={},a={},i={},d={};return e.forEach(c=>{let u=!0;t.forEach(p=>{const h=`${c}|${p}`;!n.reload&&this.store.hasResourceBundle(c,p)?this.state[h]=2:this.state[h]<0||(this.state[h]===1?a[h]===void 0&&(a[h]=!0):(this.state[h]=1,u=!1,a[h]===void 0&&(a[h]=!0),o[h]===void 0&&(o[h]=!0),d[p]===void 0&&(d[p]=!0)))}),u||(i[c]=!0)}),(Object.keys(o).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(o),pending:Object.keys(a),toLoadLanguages:Object.keys(i),toLoadNamespaces:Object.keys(d)}}loaded(e,t,n){const r=e.split("|"),o=r[0],a=r[1];t&&this.emit("failedLoading",o,a,t),!t&&n&&this.store.addResourceBundle(o,a,n,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&n&&(this.state[e]=0);const i={};this.queue.forEach(d=>{_o(d.loaded,[o],a),Fo(d,e),t&&d.errors.push(t),d.pendingCount===0&&!d.done&&(Object.keys(d.loaded).forEach(c=>{i[c]||(i[c]={});const u=d.loaded[c];u.length&&u.forEach(p=>{i[c][p]===void 0&&(i[c][p]=!0)})}),d.done=!0,d.errors.length?d.callback(d.errors):d.callback())}),this.emit("loaded",i),this.queue=this.queue.filter(d=>!d.done)}read(e,t,n,r=0,o=this.retryTimeout,a){if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:n,tried:r,wait:o,callback:a});return}this.readingCalls++;const i=(c,u)=>{if(this.readingCalls--,this.waitingReads.length>0){const p=this.waitingReads.shift();this.read(p.lng,p.ns,p.fcName,p.tried,p.wait,p.callback)}if(c&&u&&r<this.maxRetries){setTimeout(()=>{this.read(e,t,n,r+1,o*2,a)},o);return}a(c,u)},d=this.backend[n].bind(this.backend);if(d.length===2){try{const c=d(e,t);c&&typeof c.then=="function"?c.then(u=>i(null,u)).catch(i):i(null,c)}catch(c){i(c)}return}return d(e,t,i)}prepareLoading(e,t,n={},r){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),r&&r();R(e)&&(e=this.languageUtils.toResolveHierarchy(e)),R(t)&&(t=[t]);const o=this.queueLoad(e,t,n,r);if(!o.toLoad.length)return o.pending.length||r(),null;o.toLoad.forEach(a=>{this.loadOne(a)})}load(e,t,n){this.prepareLoading(e,t,{},n)}reload(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}loadOne(e,t=""){const n=e.split("|"),r=n[0],o=n[1];this.read(r,o,"read",void 0,void 0,(a,i)=>{a&&this.logger.warn(`${t}loading namespace ${o} for language ${r} failed`,a),!a&&i&&this.logger.log(`${t}loaded namespace ${o} for language ${r}`,i),this.loaded(e,a,i)})}saveMissing(e,t,n,r,o,a={},i=()=>{}){var d,c,u,p,h;if((c=(d=this.services)==null?void 0:d.utils)!=null&&c.hasLoadedNamespace&&!((p=(u=this.services)==null?void 0:u.utils)!=null&&p.hasLoadedNamespace(t))){this.logger.warn(`did not save key "${n}" as the namespace "${t}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(n==null||n==="")){if((h=this.backend)!=null&&h.create){const m={...a,isUpdate:o},f=this.backend.create.bind(this.backend);if(f.length<6)try{let y;f.length===5?y=f(e,t,n,r,m):y=f(e,t,n,r),y&&typeof y.then=="function"?y.then(b=>i(null,b)).catch(i):i(null,y)}catch(y){i(y)}else f(e,t,n,r,i,m)}!e||!e[0]||this.store.addResource(e[0],t,n,r)}}}const Rt=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:s=>{let e={};if(typeof s[1]=="object"&&(e=s[1]),R(s[1])&&(e.defaultValue=s[1]),R(s[2])&&(e.tDescription=s[2]),typeof s[2]=="object"||typeof s[3]=="object"){const t=s[3]||s[2];Object.keys(t).forEach(n=>{e[n]=t[n]})}return e},interpolation:{escapeValue:!0,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),Is=s=>(R(s.ns)&&(s.ns=[s.ns]),R(s.fallbackLng)&&(s.fallbackLng=[s.fallbackLng]),R(s.fallbackNS)&&(s.fallbackNS=[s.fallbackNS]),s.supportedLngs&&!s.supportedLngs.includes("cimode")&&(s.supportedLngs=s.supportedLngs.concat(["cimode"])),s),ht=()=>{},Ho=s=>{Object.getOwnPropertyNames(Object.getPrototypeOf(s)).forEach(t=>{typeof s[t]=="function"&&(s[t]=s[t].bind(s))})};class ot extends Tt{constructor(e={},t){if(super(),this.options=Is(e),this.services={},this.logger=Se,this.modules={external:[]},Ho(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(e={},t){this.isInitializing=!0,typeof e=="function"&&(t=e,e={}),e.defaultNS==null&&e.ns&&(R(e.ns)?e.defaultNS=e.ns:e.ns.includes("translation")||(e.defaultNS=e.ns[0]));const n=Rt();this.options={...n,...this.options,...Is(e)},this.options.interpolation={...n.interpolation,...this.options.interpolation},e.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=e.keySeparator),e.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=e.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=n.overloadTranslationOptionHandler);const r=c=>c?typeof c=="function"?new c:c:null;if(!this.options.isClone){this.modules.logger?Se.init(r(this.modules.logger),this.options):Se.init(null,this.options);let c;this.modules.formatter?c=this.modules.formatter:c=Do;const u=new js(this.options);this.store=new Bs(this.options.resources,this.options);const p=this.services;p.logger=Se,p.resourceStore=this.store,p.languageUtils=u,p.pluralResolver=new Io(u,{prepend:this.options.pluralSeparator}),c&&(p.formatter=r(c),p.formatter.init&&p.formatter.init(p,this.options),this.options.interpolation.format=p.formatter.format.bind(p.formatter)),p.interpolator=new Rs(this.options),p.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},p.backendConnector=new Wo(r(this.modules.backend),p.resourceStore,p,this.options),p.backendConnector.on("*",(h,...m)=>{this.emit(h,...m)}),this.modules.languageDetector&&(p.languageDetector=r(this.modules.languageDetector),p.languageDetector.init&&p.languageDetector.init(p,this.options.detection,this.options)),this.modules.i18nFormat&&(p.i18nFormat=r(this.modules.i18nFormat),p.i18nFormat.init&&p.i18nFormat.init(this)),this.translator=new vt(this.services,this.options),this.translator.on("*",(h,...m)=>{this.emit(h,...m)}),this.modules.external.forEach(h=>{h.init&&h.init(this)})}if(this.format=this.options.interpolation.format,t||(t=ht),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const c=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);c.length>0&&c[0]!=="dev"&&(this.options.lng=c[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(c=>{this[c]=(...u)=>this.store[c](...u)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(c=>{this[c]=(...u)=>(this.store[c](...u),this)});const i=Ge(),d=()=>{const c=(u,p)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),i.resolve(p),t(u,p)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return c(null,this.t.bind(this));this.changeLanguage(this.options.lng,c)};return this.options.resources||!this.options.initAsync?d():setTimeout(d,0),i}loadResources(e,t=ht){var o,a;let n=t;const r=R(e)?e:this.language;if(typeof e=="function"&&(n=e),!this.options.resources||this.options.partialBundledLanguages){if((r==null?void 0:r.toLowerCase())==="cimode"&&(!this.options.preload||this.options.preload.length===0))return n();const i=[],d=c=>{if(!c||c==="cimode")return;this.services.languageUtils.toResolveHierarchy(c).forEach(p=>{p!=="cimode"&&(i.includes(p)||i.push(p))})};r?d(r):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(u=>d(u)),(a=(o=this.options.preload)==null?void 0:o.forEach)==null||a.call(o,c=>d(c)),this.services.backendConnector.load(i,this.options.ns,c=>{!c&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),n(c)})}else n(null)}reloadResources(e,t,n){const r=Ge();return typeof e=="function"&&(n=e,e=void 0),typeof t=="function"&&(n=t,t=void 0),e||(e=this.languages),t||(t=this.options.ns),n||(n=ht),this.services.backendConnector.reload(e,t,o=>{r.resolve(),n(o)}),r}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return e.type==="backend"&&(this.modules.backend=e),(e.type==="logger"||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type==="languageDetector"&&(this.modules.languageDetector=e),e.type==="i18nFormat"&&(this.modules.i18nFormat=e),e.type==="postProcessor"&&dn.addPostProcessor(e),e.type==="formatter"&&(this.modules.formatter=e),e.type==="3rdParty"&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!["cimode","dev"].includes(e)){for(let t=0;t<this.languages.length;t++){const n=this.languages[t];if(!["cimode","dev"].includes(n)&&this.store.hasLanguageSomeTranslations(n)){this.resolvedLanguage=n;break}}!this.resolvedLanguage&&!this.languages.includes(e)&&this.store.hasLanguageSomeTranslations(e)&&(this.resolvedLanguage=e,this.languages.unshift(e))}}changeLanguage(e,t){this.isLanguageChangingTo=e;const n=Ge();this.emit("languageChanging",e);const r=i=>{this.language=i,this.languages=this.services.languageUtils.toResolveHierarchy(i),this.resolvedLanguage=void 0,this.setResolvedLanguage(i)},o=(i,d)=>{d?this.isLanguageChangingTo===e&&(r(d),this.translator.changeLanguage(d),this.isLanguageChangingTo=void 0,this.emit("languageChanged",d),this.logger.log("languageChanged",d)):this.isLanguageChangingTo=void 0,n.resolve((...c)=>this.t(...c)),t&&t(i,(...c)=>this.t(...c))},a=i=>{var u,p;!e&&!i&&this.services.languageDetector&&(i=[]);const d=R(i)?i:i&&i[0],c=this.store.hasLanguageSomeTranslations(d)?d:this.services.languageUtils.getBestMatchFromCodes(R(i)?[i]:i);c&&(this.language||r(c),this.translator.language||this.translator.changeLanguage(c),(p=(u=this.services.languageDetector)==null?void 0:u.cacheUserLanguage)==null||p.call(u,c)),this.loadResources(c,h=>{o(h,c)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(e),n}getFixedT(e,t,n,r){const o=r==null?void 0:r.scopeNs,a=(i,d,...c)=>{let u;typeof d!="object"?u=this.options.overloadTranslationOptionHandler([i,d].concat(c)):u={...d},u.lng=u.lng||a.lng,u.lngs=u.lngs||a.lngs;const p=u.ns!==void 0&&u.ns!==null;u.ns=u.ns||a.ns,u.keyPrefix!==""&&(u.keyPrefix=u.keyPrefix||n||a.keyPrefix);const h={...this.options,...u};Array.isArray(o)&&!p&&(h.ns=o),typeof u.keyPrefix=="function"&&(u.keyPrefix=Oe(u.keyPrefix,h));const m=this.options.keySeparator||".";let f;return u.keyPrefix&&Array.isArray(i)?f=i.map(y=>(typeof y=="function"&&(y=Oe(y,h)),`${u.keyPrefix}${m}${y}`)):(typeof i=="function"&&(i=Oe(i,h)),f=u.keyPrefix?`${u.keyPrefix}${m}${i}`:i),this.t(f,u)};return R(e)?a.lng=e:a.lngs=e,a.ns=t,a.keyPrefix=n,a}t(...e){var t;return(t=this.translator)==null?void 0:t.translate(...e)}exists(...e){var t;return(t=this.translator)==null?void 0:t.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,t={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const n=t.lng||this.resolvedLanguage||this.languages[0],r=this.options?this.options.fallbackLng:!1,o=this.languages[this.languages.length-1];if(n.toLowerCase()==="cimode")return!0;const a=(i,d)=>{const c=this.services.backendConnector.state[`${i}|${d}`];return c===-1||c===0||c===2};if(t.precheck){const i=t.precheck(this,a);if(i!==void 0)return i}return!!(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(n,e)&&(!r||a(o,e)))}loadNamespaces(e,t){const n=Ge();return this.options.ns?(R(e)&&(e=[e]),e.forEach(r=>{this.options.ns.includes(r)||this.options.ns.push(r)}),this.loadResources(r=>{n.resolve(),t&&t(r)}),n):(t&&t(),Promise.resolve())}loadLanguages(e,t){const n=Ge();R(e)&&(e=[e]);const r=this.options.preload||[],o=e.filter(a=>!r.includes(a)&&this.services.languageUtils.isSupportedCode(a));return o.length?(this.options.preload=r.concat(o),this.loadResources(a=>{n.resolve(),t&&t(a)}),n):(t&&t(),Promise.resolve())}dir(e){var r,o;if(e||(e=this.resolvedLanguage||(((r=this.languages)==null?void 0:r.length)>0?this.languages[0]:this.language)),!e)return"rtl";try{const a=new Intl.Locale(e);if(a&&a.getTextInfo){const i=a.getTextInfo();if(i&&i.direction)return i.direction}}catch{}const t=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],n=((o=this.services)==null?void 0:o.languageUtils)||new js(Rt());return e.toLowerCase().indexOf("-latn")>1?"ltr":t.includes(n.getLanguagePartFromCode(e))||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(e={},t){const n=new ot(e,t);return n.createInstance=ot.createInstance,n}cloneInstance(e={},t=ht){const n=e.forkResourceStore;n&&delete e.forkResourceStore;const r={...this.options,...e,isClone:!0},o=new ot(r);if((e.debug!==void 0||e.prefix!==void 0)&&(o.logger=o.logger.clone(e)),["store","services","language"].forEach(i=>{o[i]=this[i]}),o.services={...this.services},o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},n){const i=Object.keys(this.store.data).reduce((d,c)=>(d[c]={...this.store.data[c]},d[c]=Object.keys(d[c]).reduce((u,p)=>(u[p]={...d[c][p]},u),d[c]),d),{});o.store=new Bs(i,r),o.services.resourceStore=o.store}if(e.interpolation){const d={...Rt().interpolation,...this.options.interpolation,...e.interpolation},c={...r,interpolation:d};o.services.interpolator=new Rs(c)}return o.translator=new vt(o.services,r),o.translator.on("*",(i,...d)=>{o.emit(i,...d)}),o.init(r,t),o.translator.options=r,o.translator.backendConnector.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},o}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const le=ot.createInstance();le.createInstance;le.dir;le.init;le.loadResources;le.reloadResources;le.use;le.changeLanguage;le.getFixedT;le.t;le.exists;le.setDefaultNamespace;le.hasLoadedNamespace;le.loadNamespaces;le.loadLanguages;const Uo=(s,e,t,n)=>{var o,a,i,d;const r=[t,{code:e,...n||{}}];if((a=(o=s==null?void 0:s.services)==null?void 0:o.logger)!=null&&a.forward)return s.services.logger.forward(r,"warn","react-i18next::",!0);Ae(r[0])&&(r[0]=`react-i18next:: ${r[0]}`),(d=(i=s==null?void 0:s.services)==null?void 0:i.logger)!=null&&d.warn?s.services.logger.warn(...r):console!=null&&console.warn&&console.warn(...r)},Ms={},Vt=(s,e,t,n)=>{Ae(t)&&Ms[t]||(Ae(t)&&(Ms[t]=new Date),Uo(s,e,t,n))},pn=(s,e)=>()=>{if(s.isInitialized)e();else{const t=()=>{setTimeout(()=>{s.off("initialized",t)},0),e()};s.on("initialized",t)}},Jt=(s,e,t)=>{s.loadNamespaces(e,pn(s,t))},Os=(s,e,t,n)=>{if(Ae(t)&&(t=[t]),s.options.preload&&s.options.preload.indexOf(e)>-1)return Jt(s,t,n);t.forEach(r=>{s.options.ns.indexOf(r)<0&&s.options.ns.push(r)}),s.loadLanguages(e,pn(s,n))},zo=(s,e,t={})=>!e.languages||!e.languages.length?(Vt(e,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:e.languages}),!0):e.hasLoadedNamespace(s,{lng:t.lng,precheck:(n,r)=>{if(t.bindI18n&&t.bindI18n.indexOf("languageChanging")>-1&&n.services.backendConnector.backend&&n.isLanguageChangingTo&&!r(n.isLanguageChangingTo,s))return!1}}),Ae=s=>typeof s=="string",Ko=s=>typeof s=="object"&&s!==null,Go=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,qo={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},Vo=s=>qo[s],Jo=s=>s.replace(Go,Vo);let Yt={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:Jo,transDefaultProps:void 0};const Yo=(s={})=>{Yt={...Yt,...s}},Qo=()=>Yt;let hn;const Xo=s=>{hn=s},Zo=()=>hn,er={type:"3rdParty",init(s){Yo(s.options.react),Xo(s)}},tr=g.createContext();class sr{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(t=>{this.usedNamespaces[t]||(this.usedNamespaces[t]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const nr=(s,e)=>{if(Ae(e))return e;if(Ko(e)&&Ae(e.defaultValue))return e.defaultValue;if(typeof s=="function")return"";if(Array.isArray(s)){const t=s[s.length-1];return typeof t=="function"?"":t}return s},or={t:nr,ready:!1},rr=()=>()=>{},ve=(s,e={})=>{var M,F,ee;const{i18n:t}=e,{i18n:n,defaultNS:r}=g.useContext(tr)||{},o=t||n||Zo();o&&!o.reportNamespaces&&(o.reportNamespaces=new sr),o||Vt(o,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const a=g.useMemo(()=>{var N;return{...Qo(),...(N=o==null?void 0:o.options)==null?void 0:N.react,...e}},[o,e]),{useSuspense:i,keyPrefix:d}=a,c=s||r||((M=o==null?void 0:o.options)==null?void 0:M.defaultNS),u=Ae(c)?[c]:c||["translation"],p=g.useMemo(()=>u,u);(ee=(F=o==null?void 0:o.reportNamespaces)==null?void 0:F.addUsedNamespaces)==null||ee.call(F,p);const h=g.useRef(0),m=g.useCallback(N=>{if(!o)return rr;const{bindI18n:x,bindI18nStore:j}=a,D=()=>{h.current+=1,N()};return x&&o.on(x,D),j&&o.store.on(j,D),()=>{x&&x.split(" ").forEach(W=>o.off(W,D)),j&&j.split(" ").forEach(W=>o.store.off(W,D))}},[o,a]),f=g.useRef(),y=g.useCallback(()=>{if(!o)return or;const N=!!(o.isInitialized||o.initializedStoreOnce)&&p.every(I=>zo(I,o,a)),x=e.lng||o.language,j=h.current,D=f.current;if(D&&D.ready===N&&D.lng===x&&D.keyPrefix===d&&D.revision===j)return D;const B={t:o.getFixedT(x,a.nsMode==="fallback"?p:p[0],d,{scopeNs:p}),ready:N,lng:x,keyPrefix:d,revision:j};return f.current=B,B},[o,p,d,a,e.lng]),[b,w]=g.useState(0),{t:S,ready:T}=ko.useSyncExternalStore(m,y,y);g.useEffect(()=>{if(o&&!T&&!i){const N=()=>w(x=>x+1);e.lng?Os(o,e.lng,p,N):Jt(o,p,N)}},[o,e.lng,p,T,i,b]);const _=o||{},k=g.useRef(null),P=g.useRef(),A=N=>{const x=Object.getOwnPropertyDescriptors(N);x.__original&&delete x.__original;const j=Object.create(Object.getPrototypeOf(N),x);if(!Object.prototype.hasOwnProperty.call(j,"__original"))try{Object.defineProperty(j,"__original",{value:N,writable:!1,enumerable:!1,configurable:!1})}catch{}return j},$=g.useMemo(()=>{const N=_,x=N==null?void 0:N.language;let j=N;N&&(k.current&&k.current.__original===N?P.current!==x?(j=A(N),k.current=j,P.current=x):j=k.current:(j=A(N),k.current=j,P.current=x));const D=!T&&!i?(...B)=>(Vt(o,"USE_T_BEFORE_READY","useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t."),S(...B)):S,W=[D,j,T];return W.t=D,W.i18n=j,W.ready=T,W},[S,_,T,_.resolvedLanguage,_.language,_.languages]);if(o&&i&&!T)throw new Promise(N=>{const x=()=>N();e.lng?Os(o,e.lng,p,x):Jt(o,p,x)});return $},ar={};function mn(s,e){let t;try{t=s()}catch{return}return{getItem:r=>{var o;const a=d=>d===null?null:JSON.parse(d,void 0),i=(o=t.getItem(r))!=null?o:null;return i instanceof Promise?i.then(a):a(i)},setItem:(r,o)=>t.setItem(r,JSON.stringify(o,void 0)),removeItem:r=>t.removeItem(r)}}const ct=s=>e=>{try{const t=s(e);return t instanceof Promise?t:{then(n){return ct(n)(t)},catch(n){return this}}}catch(t){return{then(n){return this},catch(n){return ct(n)(t)}}}},ir=(s,e)=>(t,n,r)=>{let o={getStorage:()=>localStorage,serialize:JSON.stringify,deserialize:JSON.parse,partialize:b=>b,version:0,merge:(b,w)=>({...w,...b}),...e},a=!1;const i=new Set,d=new Set;let c;try{c=o.getStorage()}catch{}if(!c)return s((...b)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),t(...b)},n,r);const u=ct(o.serialize),p=()=>{const b=o.partialize({...n()});let w;const S=u({state:b,version:o.version}).then(T=>c.setItem(o.name,T)).catch(T=>{w=T});if(w)throw w;return S},h=r.setState;r.setState=(b,w)=>{h(b,w),p()};const m=s((...b)=>{t(...b),p()},n,r);let f;const y=()=>{var b;if(!c)return;a=!1,i.forEach(S=>S(n()));const w=((b=o.onRehydrateStorage)==null?void 0:b.call(o,n()))||void 0;return ct(c.getItem.bind(c))(o.name).then(S=>{if(S)return o.deserialize(S)}).then(S=>{if(S)if(typeof S.version=="number"&&S.version!==o.version){if(o.migrate)return o.migrate(S.state,S.version);console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return S.state}).then(S=>{var T;return f=o.merge(S,(T=n())!=null?T:m),t(f,!0),p()}).then(()=>{w==null||w(f,void 0),a=!0,d.forEach(S=>S(f))}).catch(S=>{w==null||w(void 0,S)})};return r.persist={setOptions:b=>{o={...o,...b},b.getStorage&&(c=b.getStorage())},clearStorage:()=>{c==null||c.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>y(),hasHydrated:()=>a,onHydrate:b=>(i.add(b),()=>{i.delete(b)}),onFinishHydration:b=>(d.add(b),()=>{d.delete(b)})},y(),f||m},lr=(s,e)=>(t,n,r)=>{let o={storage:mn(()=>localStorage),partialize:y=>y,version:0,merge:(y,b)=>({...b,...y}),...e},a=!1;const i=new Set,d=new Set;let c=o.storage;if(!c)return s((...y)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),t(...y)},n,r);const u=()=>{const y=o.partialize({...n()});return c.setItem(o.name,{state:y,version:o.version})},p=r.setState;r.setState=(y,b)=>{p(y,b),u()};const h=s((...y)=>{t(...y),u()},n,r);r.getInitialState=()=>h;let m;const f=()=>{var y,b;if(!c)return;a=!1,i.forEach(S=>{var T;return S((T=n())!=null?T:h)});const w=((b=o.onRehydrateStorage)==null?void 0:b.call(o,(y=n())!=null?y:h))||void 0;return ct(c.getItem.bind(c))(o.name).then(S=>{if(S)if(typeof S.version=="number"&&S.version!==o.version){if(o.migrate)return[!0,o.migrate(S.state,S.version)];console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,S.state];return[!1,void 0]}).then(S=>{var T;const[_,k]=S;if(m=o.merge(k,(T=n())!=null?T:h),t(m,!0),_)return u()}).then(()=>{w==null||w(m,void 0),m=n(),a=!0,d.forEach(S=>S(m))}).catch(S=>{w==null||w(void 0,S)})};return r.persist={setOptions:y=>{o={...o,...y},y.storage&&(c=y.storage)},clearStorage:()=>{c==null||c.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>f(),hasHydrated:()=>a,onHydrate:y=>(i.add(y),()=>{i.delete(y)}),onFinishHydration:y=>(d.add(y),()=>{d.delete(y)})},o.skipHydration||f(),m||h},cr=(s,e)=>"getStorage"in e||"serialize"in e||"deserialize"in e?((ar?"production":void 0)!=="production"&&console.warn("[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead."),ir(s,e)):lr(s,e),We=cr,dr="deepseekcode-chat-store",ur=mn(()=>{let s=null;const e=500;return{getItem:t=>localStorage.getItem(t),setItem:(t,n)=>{s&&clearTimeout(s),s=setTimeout(()=>{localStorage.setItem(t,n),s=null},e)},removeItem:t=>{localStorage.removeItem(t)}}}),U=ue()(We((s,e)=>({messagesBySession:{},generatingSessions:[],pausedSessions:[],sessionInputs:{},getMessages:t=>e().messagesBySession[t]||[],replaceMessages:(t,n)=>s(r=>({messagesBySession:{...r.messagesBySession,[t]:n.slice(-200)}})),addMessage:(t,n)=>s(r=>{const a=[...r.messagesBySession[t]||[],n].slice(-200);return{messagesBySession:{...r.messagesBySession,[t]:a}}}),updateLastMessage:(t,n)=>s(r=>{const o=(r.messagesBySession[t]||[]).map((a,i,d)=>i===d.length-1&&a.type==="assistant"?{...a,content:n}:a);return{messagesBySession:{...r.messagesBySession,[t]:o}}}),appendToLastMessage:(t,n)=>s(r=>{const o=r.messagesBySession[t];if(!o||o.length===0)return r;const a=o.length-1,i=o[a];if(!i||i.type!=="assistant")return r;const d=o.slice();return d[a]={...i,content:i.content+n},{messagesBySession:{...r.messagesBySession,[t]:d}}}),setThinking:(t,n)=>s(r=>{const o=(r.messagesBySession[t]||[]).map((a,i,d)=>{var u;if(i!==d.length-1||a.type!=="assistant")return a;const c=(u=a.steps)==null?void 0:u.findIndex(p=>p.status==="running");if(c!==void 0&&c!==-1&&a.steps&&a.steps[c]){const p=a.steps.map((h,m)=>m===c?{...h,thought:n}:h);return{...a,steps:p}}return{...a,thinking:n}});return{messagesBySession:{...r.messagesBySession,[t]:o}}}),appendToLastMessageThinking:(t,n)=>s(r=>{var p,h;const o=r.messagesBySession[t];if(!o||o.length===0)return r;const a=o.length-1,i=o[a];if(!i||i.type!=="assistant")return r;let d;const c=(p=i.steps)==null?void 0:p.findIndex(m=>m.status==="running");if(c!==void 0&&c!==-1&&((h=i.steps)!=null&&h[c])){const m=i.steps.slice(),f=m[c];m[c]={...f,thought:(f.thought||"")+n},d={...i,steps:m}}else if(i.steps&&i.steps.length>0){const m=i.steps.length-1,f=i.steps.slice(),y=f[m];f[m]={...y,thought:(y.thought||"")+n},d={...i,steps:f}}else d={...i,thinking:(i.thinking||"")+n};const u=o.slice();return u[a]=d,{messagesBySession:{...r.messagesBySession,[t]:u}}}),addStep:(t,n)=>s(r=>{const o=(r.messagesBySession[t]||[]).map((a,i,d)=>{var h,m;if(i!==d.length-1||a.type!=="assistant")return a;const c=(h=a.toolCalls)==null?void 0:h.filter(f=>{var y;return!((y=a.steps)!=null&&y.some(b=>{var w;return(w=b.toolCalls)==null?void 0:w.some(S=>S.id===f.id)}))}),u={...n};c!=null&&c.length&&(u.toolCalls=[...u.toolCalls||[],...c]);let p=a.thinking||"";return p.trim().length>0&&(u.thought=(u.thought||"")+p,p=""),{...a,thinking:p,toolCalls:c!=null&&c.length?(m=a.toolCalls)==null?void 0:m.filter(f=>!c.some(y=>y.id===f.id)):a.toolCalls,steps:[...a.steps||[],u]}});return{messagesBySession:{...r.messagesBySession,[t]:o}}}),updateStep:(t,n,r)=>s(o=>{const a=(o.messagesBySession[t]||[]).map((i,d,c)=>{if(d!==c.length-1||!i.steps)return i;const u=i.steps.findIndex(h=>h.id===n);if(u===-1)return i;const p=i.steps.map((h,m)=>m===u?{...h,...r}:h);return{...i,steps:p}});return{messagesBySession:{...o.messagesBySession,[t]:a}}}),addToolCall:(t,n)=>s(r=>{const o=(r.messagesBySession[t]||[]).map((a,i,d)=>{var u;if(i!==d.length-1||a.type!=="assistant")return a;const c=(u=a.steps)==null?void 0:u.findIndex(p=>p.status==="running");if(c!==void 0&&c!==-1&&a.steps&&a.steps[c]){const p=a.steps.map((h,m)=>m===c?{...h,toolCalls:[...h.toolCalls||[],n]}:h);return{...a,steps:p}}if(a.steps&&a.steps.length>0){const p=a.steps.length-1,h=a.steps.map((m,f)=>f===p?{...m,toolCalls:[...m.toolCalls||[],n]}:m);return{...a,steps:h}}return{...a,toolCalls:[...a.toolCalls||[],n]}});return{messagesBySession:{...r.messagesBySession,[t]:o}}}),updateToolCall:(t,n,r)=>s(o=>{const a=d=>{if(!d)return null;const c=d.findIndex(u=>u.id===n);return c===-1?null:d.map((u,p)=>p===c?{...u,...r}:u)},i=(o.messagesBySession[t]||[]).map((d,c,u)=>{var m,f;if(c!==u.length-1||d.type!=="assistant")return d;const p=(m=d.steps)==null?void 0:m.findIndex(y=>y.status==="running");if(p!==void 0&&p!==-1&&d.steps&&d.steps[p]){const y=a((f=d.steps[p])==null?void 0:f.toolCalls);if(y){const b=d.steps.map((w,S)=>S===p?{...w,toolCalls:y}:w);return{...d,steps:b}}}if(d.steps){let y=!1;const b=d.steps.map(w=>{if(y)return w;const S=a(w.toolCalls);return S?(y=!0,{...w,toolCalls:S}):w});if(y)return{...d,steps:b}}const h=a(d.toolCalls);return h?{...d,toolCalls:h}:d});return{messagesBySession:{...o.messagesBySession,[t]:i}}}),appendToLastToolCallArgs:(t,n,r,o)=>s(a=>{const i=u=>{let p=u.args;if(typeof p=="string")p=p+r;else if(typeof p=="object"&&p!==null){const h=r.trim();if(h.startsWith("{")&&h.endsWith("}"))try{const m=JSON.parse(h);typeof p=="string"?p={...m}:p={...p,...m}}catch{p=JSON.stringify(p).slice(0,-1)+","+h.slice(1)}else typeof p=="string"?p=p+h:p=JSON.stringify(p)+h}else p=r;return{...u,args:p}},d=u=>{if(!u)return null;const p=u.findIndex(h=>o!==void 0&&h.index===o||h.id===n);return p===-1?null:u.map((h,m)=>m===p?i(h):h)},c=(a.messagesBySession[t]||[]).map((u,p,h)=>{var y,b;if(p!==h.length-1||u.type!=="assistant")return u;const m=(y=u.steps)==null?void 0:y.findIndex(w=>w.status==="running");if(m!==void 0&&m!==-1&&u.steps&&u.steps[m]){const w=d((b=u.steps[m])==null?void 0:b.toolCalls);if(w){const S=u.steps.map((T,_)=>_===m?{...T,toolCalls:w}:T);return{...u,steps:S}}}if(u.steps){let w=!1;const S=u.steps.map(T=>{if(w)return T;const _=d(T.toolCalls);return _?(w=!0,{...T,toolCalls:_}):T});if(w)return{...u,steps:S}}const f=d(u.toolCalls);return f?{...u,toolCalls:f}:u});return{messagesBySession:{...a.messagesBySession,[t]:c}}}),startGeneration:t=>s(n=>({generatingSessions:n.generatingSessions.includes(t)?n.generatingSessions:[...n.generatingSessions,t]})),endGeneration:(t,n)=>s(r=>{var c,u;const o=r.messagesBySession[t]||[],a=Date.now(),i=o.map(p=>{var y,b;let h=!1;const m=(y=p.steps)==null?void 0:y.map(w=>{if(!w.toolCalls)return w;const S=w.toolCalls.map(T=>T.status!=="running"?T:(h=!0,{...T,status:"error",result:"生成已结束(工具执行超时或连接中断)",duration:Math.floor((a-(T.timestamp||a))/1e3)}));return S!==w.toolCalls?{...w,toolCalls:S}:w}),f=(b=p.toolCalls)==null?void 0:b.map(w=>w.status!=="running"?w:(h=!0,{...w,status:"error",result:"生成已结束(工具执行超时或连接中断)",duration:Math.floor((a-(w.timestamp||a))/1e3)}));return h?{...p,steps:m,toolCalls:f}:p}),d=i[i.length-1];if(d&&d.type==="assistant"&&!d.content&&!d.thinking&&!((c=d.steps)!=null&&c.length)&&!((u=d.toolCalls)!=null&&u.length)&&!d.hookApproval){const{[t]:p,...h}=r.messagesBySession;return{generatingSessions:r.generatingSessions.filter(m=>m!==t),pausedSessions:r.pausedSessions.filter(m=>m!==t),messagesBySession:{...h,[t]:i.slice(0,-1)}}}return{generatingSessions:r.generatingSessions.filter(p=>p!==t),pausedSessions:r.pausedSessions.filter(p=>p!==t),messagesBySession:{...r.messagesBySession,[t]:i}}}),pauseGeneration:t=>s(n=>({pausedSessions:n.pausedSessions.includes(t)?n.pausedSessions:[...n.pausedSessions,t]})),resumeGeneration:t=>s(n=>({pausedSessions:n.pausedSessions.filter(r=>r!==t)})),clearMessages:t=>s(n=>{const{[t]:r,...o}=n.messagesBySession;return{messagesBySession:o}}),removeSession:t=>s(n=>{const{[t]:r,...o}=n.messagesBySession,{[t]:a,...i}=n.sessionInputs;return{messagesBySession:o,sessionInputs:i,generatingSessions:n.generatingSessions.filter(d=>d!==t)}}),setSessionInput:(t,n)=>s(r=>({sessionInputs:{...r.sessionInputs,[t]:n}})),getSessionInput:t=>e().sessionInputs[t]||"",attachHookApproval:(t,n)=>s(r=>{const o=r.messagesBySession[t]||[];if(o.length===0){const c={id:`hook-approval-${n.approvalId||Date.now()}`,type:"assistant",content:"",timestamp:Date.now(),hookApproval:n};return{messagesBySession:{...r.messagesBySession,[t]:[c]}}}const a=o.length-1,i=o[a];if(i&&i.type==="assistant"){const c=o.slice();return c[a]={...i,hookApproval:n},{messagesBySession:{...r.messagesBySession,[t]:c}}}const d={id:`hook-approval-${n.approvalId||Date.now()}`,type:"assistant",content:"",timestamp:Date.now(),hookApproval:n};return{messagesBySession:{...r.messagesBySession,[t]:[...o,d].slice(-200)}}}),updateHookApprovalStatus:(t,n,r)=>s(o=>{const a=o.messagesBySession[t];if(!a)return o;const i=a.map(d=>{var c;return((c=d.hookApproval)==null?void 0:c.approvalId)===n?{...d,hookApproval:{...d.hookApproval,status:r}}:d});return{messagesBySession:{...o.messagesBySession,[t]:i}}}),setMessageFileJob:(t,n)=>s(r=>{const o=r.messagesBySession[t]||[];if(o.length===0){const c={id:`filejob-${n.jobId}`,type:"assistant",content:"",timestamp:Date.now(),fileJob:n};return{messagesBySession:{...r.messagesBySession,[t]:[c]}}}const a=o.length-1,i=o[a];if(i&&i.type==="assistant"){const c=o.slice();return c[a]={...i,fileJob:i.fileJob?{...i.fileJob,...n,attachments:n.attachments??i.fileJob.attachments,jobId:i.fileJob.jobId,updatedAt:Date.now()}:{...n,updatedAt:Date.now()}},{messagesBySession:{...r.messagesBySession,[t]:c}}}const d={id:`filejob-${n.jobId}`,type:"assistant",content:"",timestamp:Date.now(),fileJob:n};return{messagesBySession:{...r.messagesBySession,[t]:[...o,d].slice(-200)}}}),attachErrorCard:(t,n)=>s(r=>{const o=r.messagesBySession[t];if(!o||o.length===0)return r;const a=o.length-1,i=o[a];if(i&&i.type==="assistant"){const d=o.slice();return d[a]={...i,errorCard:n},{messagesBySession:{...r.messagesBySession,[t]:d}}}return r}),applyTombstone:(t,n)=>s(r=>{const o=r.messagesBySession[t];if(!o||o.length===0)return r;const a=new Set(n),i=o.map(d=>a.has(d.id)?{...d,deleted:!0}:d);return{messagesBySession:{...r.messagesBySession,[t]:i}}}),isGenerating:t=>e().generatingSessions.includes(t),isPaused:t=>e().pausedSessions.includes(t)}),{name:dr,storage:ur,partialize:s=>({messagesBySession:s.messagesBySession,sessionInputs:s.sessionInputs})})),$s=6,Lt=50,K=ue()(We((s,e)=>({sessions:[],activeSessionId:null,sessionTabs:[],layout:"single",sessionWorkspaceDirs:{},tasksBySession:{},historySessions:[],addSession:t=>s(n=>({sessions:[t,...n.sessions],activeSessionId:t.id})),removeSession:t=>s(n=>{var r;return{sessions:n.sessions.filter(o=>o.id!==t),activeSessionId:n.activeSessionId===t?((r=n.sessions[0])==null?void 0:r.id)||null:n.activeSessionId}}),updateSession:(t,n)=>s(r=>({sessions:r.sessions.map(o=>o.id===t?{...o,...n}:o)})),setActiveSession:t=>s({activeSessionId:t}),setSessionWorkspaceDir:(t,n)=>s(r=>({sessionWorkspaceDirs:{...r.sessionWorkspaceDirs,[t]:n}})),getSessionWorkspaceDir:t=>e().sessionWorkspaceDirs[t]||"",addSessionTab:(t,n)=>{const r=e();if(r.sessionTabs.length>=$s){const h=r.sessionTabs.reduce((m,f)=>m.createdAt<f.createdAt?m:f);e().closeSessionTab(h.id)}const o=`session-${Date.now()}`,a=n&&n.split(/[\\/]/).filter(Boolean).pop()||void 0,i={id:o,title:t||`对话 ${r.sessionTabs.length+1}`,createdAt:Date.now(),project:a,status:"done"},d={id:o,title:t||`对话 ${r.sessionTabs.length+1}`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messageCount:0},c={...r.sessionWorkspaceDirs};n&&(c[o]=n);const u={...r.tasksBySession};u[o]||(u[o]=[]);const p=[i,...r.historySessions.filter(h=>h.id!==o)].slice(0,Lt);return s({sessionTabs:[...r.sessionTabs,i],sessions:[...r.sessions,d],sessionWorkspaceDirs:c,tasksBySession:u,activeSessionId:o,historySessions:p}),o},closeSessionTab:t=>{var d;const n=e(),r=n.sessionTabs.find(c=>c.id===t),o=n.sessionTabs.filter(c=>c.id!==t);if(o.length===0)return;let a=n.historySessions;r&&(a=[r,...a.filter(c=>c.id!==t)].slice(0,Lt));const i=o[o.length-1];s({sessionTabs:o,historySessions:a,activeSessionId:n.activeSessionId===t?i?i.id:((d=o[0])==null?void 0:d.id)||null:n.activeSessionId})},renameSessionTab:(t,n)=>s(r=>({sessionTabs:r.sessionTabs.map(o=>o.id===t?{...o,title:n}:o),sessions:r.sessions.map(o=>o.id===t?{...o,title:n,updatedAt:new Date().toISOString()}:o),historySessions:r.historySessions.map(o=>o.id===t?{...o,title:n}:o)})),getActiveSessionTab:()=>{const t=e();return t.sessionTabs.find(n=>n.id===t.activeSessionId)||null},getVisibleSessionTabs:()=>{const t=e(),n=t.sessionTabs.find(r=>r.id===t.activeSessionId);return n?[n]:t.sessionTabs.slice(0,1)},addSessionTask:(t,n,r,o)=>s(a=>{const i=a.tasksBySession[t]||[],d={id:`session-task-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,title:n.trim(),completed:!1,createdAt:Date.now(),backendId:r,description:o};return{tasksBySession:{...a.tasksBySession,[t]:[...i,d]}}}),toggleSessionTask:(t,n)=>s(r=>{const o=r.tasksBySession[t]||[];return{tasksBySession:{...r.tasksBySession,[t]:o.map(a=>a.id===n?{...a,completed:!a.completed}:a)}}}),removeSessionTask:(t,n)=>s(r=>({tasksBySession:{...r.tasksBySession,[t]:(r.tasksBySession[t]||[]).filter(o=>o.id!==n)}})),updateSessionTask:(t,n,r)=>s(o=>{const a=o.tasksBySession[t]||[];return{tasksBySession:{...o.tasksBySession,[t]:a.map(i=>i.id===n?{...i,title:r.trim()}:i)}}}),getSessionTasks:t=>e().tasksBySession[t]||[],setSessionTasks:(t,n)=>s(r=>({tasksBySession:{...r.tasksBySession,[t]:n}})),updateTaskPlanStatus:(t,n,r)=>s(o=>{const a=o.tasksBySession[t]||[];return{tasksBySession:{...o.tasksBySession,[t]:a.map(i=>i.id===n?{...i,...r}:i)}}}),autoNameSession:(t,n)=>{const o=e().sessionTabs.find(i=>i.id===t);if(!o||!/^对话 \d+$/.test(o.title))return;const a=n.trim().slice(0,20)+(n.trim().length>20?"...":"");a&&e().renameSessionTab(t,a)},updateSessionStatus:(t,n)=>s(r=>({sessionTabs:r.sessionTabs.map(o=>o.id===t?{...o,status:n}:o)})),getHistorySessions:()=>e().historySessions,restoreHistorySession:t=>{const n=e(),r=n.historySessions.find(i=>i.id===t);if(!r)return;const o=n.historySessions.filter(i=>i.id!==t);if(n.sessionTabs.some(i=>i.id===t)){s({historySessions:o,activeSessionId:t});return}let a=n.sessionTabs;if(a.length>=$s){const i=a.reduce((d,c)=>d.createdAt<c.createdAt?d:c);a=a.filter(d=>d.id!==i.id),o.unshift(i)}s({sessionTabs:[...a,r],historySessions:o.slice(0,Lt),activeSessionId:t})},clearHistorySessions:()=>s({historySessions:[]}),removeHistorySession:t=>s(n=>({historySessions:n.historySessions.filter(r=>r.id!==t)}))}),{name:"deepseekcode-session-storage",partialize:s=>({sessions:s.sessions,sessionTabs:s.sessionTabs,activeSessionId:s.activeSessionId,layout:s.layout,sessionWorkspaceDirs:s.sessionWorkspaceDirs,tasksBySession:s.tasksBySession,historySessions:s.historySessions})})),pr=ue(s=>({isOpen:!1,status:"idle",port:null,wsUrl:null,errorMessage:null,openTerminal:()=>s({isOpen:!0}),closeTerminal:()=>s({isOpen:!1}),toggleTerminal:()=>s(e=>({isOpen:!e.isOpen})),setStarting:()=>s({status:"starting",errorMessage:null}),setRunning:(e,t)=>s({status:"running",port:e,wsUrl:t}),setStopping:()=>s({status:"stopping"}),setIdle:()=>s({status:"idle",port:null,wsUrl:null,errorMessage:null}),setError:e=>s({status:"error",errorMessage:e})})),Ds={bg:"#0d1117",surface:"#161b22",border:"#30363d",text:"#c9d1d9",muted:"#8b949e",accentBlue:"#58a6ff",accentGreen:"#238636",accentRed:"#f85149",accentYellow:"#d29922",accentPurple:"#a855f7"},De=ue()(We(s=>({theme:"light",themePresetId:"linear",language:"zh-CN",fontSize:14,streamingEnabled:!0,yolo:{enabled:!1},autoSwarm:{enabled:!1},workspaceDir:"",workspaceGuardBypass:!0,customTheme:Ds,customThemeEnabled:!1,setTheme:e=>s({theme:e}),setThemePreset:e=>s({themePresetId:e,customThemeEnabled:!1}),setLanguage:e=>s({language:e}),setFontSize:e=>s({fontSize:e}),setStreamingEnabled:e=>s({streamingEnabled:e}),setYoloEnabled:e=>s({yolo:{enabled:e}}),setAutoSwarmEnabled:e=>s({autoSwarm:{enabled:e}}),setCustomTheme:e=>s(t=>({customTheme:{...t.customTheme,...e}})),setCustomThemeEnabled:e=>s({customThemeEnabled:e}),setWorkspaceGuardBypass:e=>s({workspaceGuardBypass:e}),resetCustomTheme:()=>s({customTheme:Ds}),setWorkspaceDir:e=>s({workspaceDir:e})}),{name:"deepseekcode-settings-storage",version:2,migrate:(s,e)=>{const t=s;return e<2&&t&&typeof t=="object"&&((t.themePresetId==="github"||t.themePresetId==="mimo")&&(t.themePresetId="linear"),t.theme==="dark"&&(t.theme="light")),t}})),hr=[{eventType:"connected",description:"WebSocket 已连接",category:"session",emittedBy:["server"],handledByCli:!0,handledByWeb:!0},{eventType:"session_created",description:"新会话已创建",category:"session",emittedBy:["server","core"],handledByCli:!0,handledByWeb:!1,note:"CLI 已处理; Web 未处理"},{eventType:"session_resumed",description:"会话从存储中恢复",category:"session",emittedBy:["core","server"],handledByCli:!0,handledByWeb:!1,note:"CLI 已处理; Web 未处理"},{eventType:"auth_required",description:"需要认证",category:"session",emittedBy:["server"],handledByCli:!0,handledByWeb:!0,note:"CLI 已处理(2026-07-18)"},{eventType:"auth_success",description:"认证成功",category:"session",emittedBy:["server"],handledByCli:!0,handledByWeb:!0,note:"CLI 已处理(2026-07-18)"},{eventType:"auth_failed",description:"认证失败",category:"session",emittedBy:["server"],handledByCli:!0,handledByWeb:!0,note:"CLI 已处理(2026-07-18)"},{eventType:"message_ack",description:"消息确认",category:"session",emittedBy:["client"],handledByCli:!1,handledByWeb:!1,note:"CLI 发送给服务器的入站事件,无需 handler"},{eventType:"workspace_changed",description:"工作空间已切换",category:"session",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"session_switched",description:"会话已切换",category:"session",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"CLI 已处理(2026-07-18)"},{eventType:"start",description:"AI 开始生成",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"content",description:"生成内容增量",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"thinking",description:"思考过程增量",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"tool_call",description:"工具调用流式增量",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"tool_result",description:"工具执行结果",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"step_start",description:"步骤开始",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"step_thinking",description:"步骤思考",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"step_action",description:"步骤动作",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"step_complete",description:"步骤完成",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"progress",description:"通用进度(当前未使用)",category:"stream",emittedBy:["none"],handledByCli:!1,handledByWeb:!1,note:"已定义但从未发送"},{eventType:"complete",description:"生成完成",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"error",description:"生成错误",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"generation_paused",description:"生成已暂停",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"generation_resumed",description:"生成已恢复",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"stall_detected",description:"流级卡死检测(自动重试/通知)",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"由 StreamHeartbeat 或 StallDetector 触发;CLI 显示重试进度"},{eventType:"task_interrupted",description:"任务中断(服务重启/异常退出)",category:"stream",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"服务启动扫描时将 running activeRun 标记为 interrupted 后触发;提示用户使用 /resume 恢复"},{eventType:"plan_start",description:"计划开始",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"由 EnterPlanMode 工具 emit"},{eventType:"plan_thinking",description:"计划思考",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"plan_tasks",description:"计划任务列表生成",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"由 ExitPlanMode 工具 emit(解析计划内容为任务列表);CLI handler 解析 data.tasks"},{eventType:"plan_task_start",description:"计划任务开始",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"plan_task_update",description:"计划任务更新",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"plan_task_result",description:"计划任务结果",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"plan_complete",description:"计划完成",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"由 ExitPlanMode 工具 emit(携带 currentPlan/proposedPlan)"},{eventType:"plan_error",description:"计划错误",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"plan_mode_change",description:"计划模式切换",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"CLI 已添加 handler(2026-07-01);Web 仍需添加"},{eventType:"plan_mode_enter",description:"进入计划模式(CLI 遗留)",category:"plan",emittedBy:["none"],handledByCli:!0,handledByWeb:!0,deprecated:!0,note:"兼容遗留代码,应改用 plan_mode_change"},{eventType:"plan_mode_exit",description:"退出计划模式(CLI 遗留)",category:"plan",emittedBy:["none"],handledByCli:!0,handledByWeb:!0,deprecated:!0,note:"兼容遗留代码,应改用 plan_mode_change"},{eventType:"plan_confirm",description:"计划等待确认",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"CLI 已处理(2026-07-18); Web 未处理"},{eventType:"plan_refine",description:"计划优化",category:"plan",emittedBy:["none"],handledByCli:!1,handledByWeb:!1,note:"已定义但从未发送"},{eventType:"token_update",description:"Token 用量更新",category:"context",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"context_compressed",description:"上下文已压缩",category:"context",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"compaction_progress",description:"压缩进度更新",category:"context",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"context_analysis",description:"上下文分布分析",category:"context",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已处理(2026-07-18); Web 有 handler 但路由不可达"},{eventType:"threshold_warning",description:"Token 阈值警告",category:"context",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已处理(2026-07-18); Web 有 handler 但路由不可达"},{eventType:"threshold_error",description:"Token 阈值错误",category:"context",emittedBy:["none"],handledByCli:!1,handledByWeb:!1,note:"已定义但从未发送"},{eventType:"context_blocked",description:"上下文已满,生成被阻止",category:"context",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已处理(2026-07-18); Web 有 handler 但路由不可达"},{eventType:"blocking_limit",description:"已达到阻止极限",category:"context",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已处理(2026-07-18); Web 有 handler 但路由不可达"},{eventType:"microcompact_progress",description:"微压缩进度",category:"context",emittedBy:["none"],handledByCli:!1,handledByWeb:!1,note:"已定义但从未发送"},{eventType:"session_memory_update",description:"会话记忆更新",category:"context",emittedBy:["none"],handledByCli:!1,handledByWeb:!1,note:"已定义但从未发送"},{eventType:"tool_retry",description:"工具重试",category:"context",emittedBy:["none"],handledByCli:!1,handledByWeb:!0,note:"Web 有 handler 但路由不可达"},{eventType:"model_fallback",description:"模型回退",category:"context",emittedBy:["none"],handledByCli:!1,handledByWeb:!0,note:"Web 有 handler 但路由不可达"},{eventType:"workflow_started",description:"工作流已启动",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_event",description:"工作流事件",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_progress",description:"工作流进度",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_finished",description:"工作流完成",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_error",description:"工作流错误",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_checkpoint",description:"工作流检查点",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_node_start",description:"工作流节点开始",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_node_complete",description:"工作流节点完成",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_paused",description:"工作流已暂停",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_resumed",description:"工作流已恢复",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_cancelled",description:"工作流已取消",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"workflow_recovered",description:"工作流已恢复(从故障)",category:"workflow",emittedBy:["none"],handledByCli:!1,handledByWeb:!1,note:"已定义但从未发送"},{eventType:"workflow_handoff",description:"ReAct 转交 workflow(范式切换)",category:"workflow",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"task_update",description:"任务更新",category:"task",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已添加 handler(2026-07-01)"},{eventType:"task_output",description:"任务输出",category:"task",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已添加 handler(2026-07-01)"},{eventType:"task_finished",description:"任务完成",category:"task",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已添加 handler(2026-07-01)"},{eventType:"task_error",description:"任务错误",category:"task",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已添加 handler(2026-07-01)"},{eventType:"goal_created",description:"目标已创建",category:"goal",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"2026-07-21: Web handled via goal_tasks/goal_task_update"},{eventType:"goal_tasks",description:"目标任务列表(批量初始化看板)",category:"goal",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"2026-07-21: 统一看板数据源"},{eventType:"goal_task_update",description:"目标任务更新",category:"goal",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"2026-07-21: Web 已添加 handler"},{eventType:"hook_ask",description:"Hook 审批请求",category:"hook",emittedBy:["server"],handledByCli:!0,handledByWeb:!0},{eventType:"hook_allow",description:"Hook 允许响应",category:"hook",emittedBy:["client"],handledByCli:!1,handledByWeb:!1,note:"入站事件(CLI→服务器),无需 handler"},{eventType:"hook_deny",description:"Hook 拒绝响应",category:"hook",emittedBy:["client"],handledByCli:!1,handledByWeb:!1,note:"入站事件(CLI→服务器),无需 handler"},{eventType:"hook_response_ack",description:"Hook 响应确认",category:"hook",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"CLI 已添加 handler(2026-07-01)"},{eventType:"mcp_update",description:"MCP 状态更新",category:"mcp",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 已添加 handler(2026-07-01)"},{eventType:"doctor_result",description:"诊断完成",category:"diagnostic",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"degradation",description:"降级状态更新(遗留)",category:"diagnostic",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"degradation_update",description:"降级状态更新",category:"diagnostic",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"commands_list",description:"命令列表(服务器→客户端)",category:"system",emittedBy:["core","server"],handledByCli:!0,handledByWeb:!1,note:"CLI 已处理(setDynamicCommands); Web 未处理"},{eventType:"ping",description:"心跳 Ping",category:"system",emittedBy:["client"],handledByCli:!1,handledByWeb:!1,note:"由 Server 的 WS 层自动处理"},{eventType:"pong",description:"心跳 Pong",category:"system",emittedBy:["server"],handledByCli:!1,handledByWeb:!1,note:"由 Client 的 WS 层自动处理"},{eventType:"log",description:"服务端日志",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"notification",description:"通知消息",category:"system",emittedBy:["server"],handledByCli:!0,handledByWeb:!0},{eventType:"channel_message",description:"频道入站消息(转发到 Web UI)",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"CLI 已处理(2026-07-18); Web 未处理"},{eventType:"channel_status",description:"频道连接状态变更",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"CLI 已处理(2026-07-18); Web 未处理"},{eventType:"channel_error",description:"频道运行时错误",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"CLI 已处理(2026-07-18); Web 未处理"},{eventType:"filejob_start",description:"文件处理任务开始(解析/渲染)",category:"task",emittedBy:["core"],handledByCli:!1,handledByWeb:!0,note:"对话内嵌文件处理面板;Web 已处理,CLI 忽略(parseTurnEvent default→null)"},{eventType:"filejob_progress",description:"文件处理进度更新",category:"task",emittedBy:["core"],handledByCli:!1,handledByWeb:!0,note:"解析/渲染进度百分比"},{eventType:"filejob_result",description:"文件处理完成(结果文件列表)",category:"task",emittedBy:["core"],handledByCli:!1,handledByWeb:!0,note:"携带 RenderedFileResult[]"},{eventType:"filejob_error",description:"文件处理失败",category:"task",emittedBy:["core"],handledByCli:!1,handledByWeb:!0,note:"脱敏错误详情"},{eventType:"todo_update",description:"待办事项更新",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"todo_item_done",description:"待办项完成",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"运行时可能发送"},{eventType:"todo_progress",description:"待办进度",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"运行时可能发送"},{eventType:"tombstone",description:"消息已删除/墓碑",category:"system",emittedBy:["none"],handledByCli:!1,handledByWeb:!1,note:"已定义但从未发送"},{eventType:"disconnected",description:"连接断开",category:"session",emittedBy:["server"],handledByCli:!0,handledByWeb:!0},{eventType:"status",description:"状态更新(modelName/connected/statusText)",category:"system",emittedBy:["core","server"],handledByCli:!0,handledByWeb:!0},{eventType:"usage",description:"Token 用量",category:"context",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"model_name",description:"当前模型名称",category:"system",emittedBy:["core","server"],handledByCli:!0,handledByWeb:!0},{eventType:"throttle",description:"速率限制状态",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"ask_user_question",description:"向用户提问",category:"hook",emittedBy:["core"],handledByCli:!0,handledByWeb:!0},{eventType:"question_answer_ack",description:"提问回答确认",category:"hook",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"hook_auto_ack",description:"Hook 自动模式确认",category:"hook",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"tool.approval_required",description:"工具调用需要审批(停放入口)",category:"inbox",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"无人值守/定时运行时写操作先停放;CLI 状态提示,Web Inbox 视图已建"},{eventType:"inbox.pending",description:"Inbox 新待办(审批/提问/通知)",category:"inbox",emittedBy:["core","server"],handledByCli:!0,handledByWeb:!0,note:"CLI 状态提示;Web Inbox 视图消费"},{eventType:"inbox.resolved",description:"Inbox 待办已解决(approve/reject)",category:"inbox",emittedBy:["core","server"],handledByCli:!0,handledByWeb:!0,note:"CLI 状态提示;Web Inbox 视图消费"},{eventType:"audit.record",description:"审计记录新增(工具批准/拒绝历史)",category:"inbox",emittedBy:["core"],handledByCli:!0,handledByWeb:!0,note:"CLI 忽略(避免刷屏);tools 页审计视图数据源"},{eventType:"automation.update",description:"自动化任务新增/更新/删除/状态变更",category:"automation",emittedBy:["server"],handledByCli:!0,handledByWeb:!0,note:"REST /api/automations 已可用;Web 自动化视图消费"},{eventType:"automation.run",description:"自动化触发运行(started/finished/error)",category:"automation",emittedBy:["core","server"],handledByCli:!0,handledByWeb:!0,note:"CLI 状态提示;Web RunDetail 消费"},{eventType:"code_review_ready",description:"代码审查结果就绪",category:"system",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"pdca_phase",description:"PDCA 循环阶段",category:"system",emittedBy:["none"],handledByCli:!0,handledByWeb:!1,note:"已退役:5-phase light pipeline 被 WorkflowRuntime 取代"},{eventType:"plan_waiting",description:"计划等待用户输入",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"plan_continue",description:"计划继续执行",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"plan_settled",description:"计划已定稿",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"plan_cleared",description:"计划已清除",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!1},{eventType:"user_exit_plan_mode",description:"用户手动退出计划模式",category:"plan",emittedBy:["client"],handledByCli:!1,handledByWeb:!1,note:"入站事件(CLI→服务器),客户端无需 handler"},{eventType:"plan_task_complete",description:"计划任务完成(单个)",category:"plan",emittedBy:["core"],handledByCli:!0,handledByWeb:!1,note:"CLI 处理 plan_task_complete 和 plan_task_result 两个独立事件"},{eventType:"step_prompt",description:"步骤提示(Web 路由用)",category:"stream",emittedBy:["none"],handledByCli:!1,handledByWeb:!0,note:"Web 路由的内部事件,不通过 WS 发送"},{eventType:"command_start",description:"命令开始(Web 路由用)",category:"system",emittedBy:["none"],handledByCli:!1,handledByWeb:!0,note:"Web systemHandler 处理"},{eventType:"command_complete",description:"命令完成(Web 路由用)",category:"system",emittedBy:["none"],handledByCli:!1,handledByWeb:!0,note:"Web systemHandler 处理"},{eventType:"command_error",description:"命令错误(Web 路由用)",category:"system",emittedBy:["none"],handledByCli:!1,handledByWeb:!0,note:"Web systemHandler 处理"}];function ke(s){return s==="auto-plan"?"plan":s==="auto-act"?"act":s==="auto-goal"?"goal":s}function Le(s){return s==="auto-plan"||s==="auto-act"||s==="auto-goal"}function mr(s){switch(s){case"plan":return"auto-plan";case"auto-plan":return"plan";case"act":return"auto-act";case"auto-act":return"act";case"goal":return"auto-goal";case"auto-goal":return"goal"}}const Tl=["plan","act","goal"];function Qt(s,e){return e?s==="plan"?"auto-plan":s==="act"?"auto-act":"auto-goal":s}function fr(s){const e=["plan","act","goal"],t=e.indexOf(ke(s)),n=e[(t+1)%e.length]??"act";return Qt(n,Le(s))}const gr={plan:{label:"Plan",accent:"blue"},"auto-plan":{label:"Auto-Plan",accent:"cyan"},act:{label:"Act",accent:"green"},"auto-act":{label:"Auto-Act",accent:"yellow"},goal:{label:"Goal",accent:"magenta"},"auto-goal":{label:"Auto-Goal",accent:"red"}},Nl={low:{label:"Low",accent:"green"},medium:{label:"Medium",accent:"cyan"},high:{label:"High",accent:"yellow"},critical:{label:"Critical",accent:"red"}},Bl={allow:{label:"Allow",key:"y"},deny:{label:"Deny",key:"n"},allow_session:{label:"Allow session",key:"s"},auto:{label:"Auto mode",key:"a"}};function yr(s){return s==="plan"||s==="auto-plan"||s==="act"||s==="auto-act"||s==="goal"||s==="auto-goal"?s:"act"}function qe(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${Math.round(s/1e3)}K`:String(s)}function br(s){return s<=0?"":s>=100?`${Math.round(s)}t/s`:`${s.toFixed(1)}t/s`}function xr(s){if(s<=0)return"";if(s>=60){const e=Math.floor(s/60),t=s%60;return`${e}m${t}s`}return`${s}s`}function jl(s,e){const t=s.toLowerCase();return/\b(rm|del|delete|drop|truncate|format|mkfs)\b/.test(t)?"critical":/\b(bash|shell|exec|cmd|powershell|terminal)\b/.test(t)?/\b(rm\s+-rf|sudo|chmod\s+777|curl.*\|\s*(ba)?sh|wget.*-O|>\/dev\/|mkfs)\b/i.test(e)?"critical":"high":/\b(write|edit|save|upload|deploy|publish)\b/i.test(t)||/\b(install|uninstall|npm|pip|cargo|gem|apt|brew|choco|yum|dnf)\b/i.test(t)?"high":/\b(git|commit|push|merge|rebase)\b/i.test(t)?/\b(push|force|hard\s*reset|rebase)\b/i.test(e)?"high":"medium":/\b(http|fetch|curl|wget|api|request|download)\b/i.test(t)?"medium":/\b(read|open|list|ls|dir|cat|view|search|find|grep|glob)\b/i.test(t)?"low":"medium"}function El(s,e){if(e==null)return null;if(/\b(bash|shell|exec|cmd|powershell|terminal)\b/i.test(s))return e||null;if(/\b(write|edit|save|create)\b/i.test(s)){const t=e.match(/(?:file_path|path|file)["\s:=]+([^\s",}]+)/i);return t?`${t[1]}
|
|
3
3
|
${e.slice(0,200)}`:e.slice(0,200)||null}return e&&e.length>0?e.length>200?`${e.slice(0,200)}...`:e:null}hr.map(s=>s.eventType);function kr(){return`err-${Date.now()}-${Math.random().toString(36).slice(2,7)}`}const Ie=ue(s=>({errors:[],push:(e,t,n,r)=>{const o=kr(),a={id:o,level:e,title:t,detail:n,action:r,timestamp:Date.now(),dismissed:!1};return s(i=>({errors:[...i.errors.slice(-49),a]})),o},dismiss:e=>s(t=>({errors:t.errors.map(n=>n.id===e?{...n,dismissed:!0}:n)})),clearAll:()=>s({errors:[]})})),Z={info:(s,e)=>Ie.getState().push("info",s,e),warn:(s,e)=>Ie.getState().push("warning",s,e),error:(s,e)=>Ie.getState().push("error",s,e),critical:(s,e)=>Ie.getState().push("critical",s,e)},Ve=20,Sr=()=>{const s=window.location.protocol==="https:"?"wss:":"ws:",e=window.location.hostname,t=window.location.port,n=t?String(Number(t)+1):"",r=n?`${e}:${n}`:e;return`${s}//${r}/ws`},vr=Sr();class wr{constructor(e){X(this,"ws",null);X(this,"url");X(this,"messageHandlers",new Set);X(this,"openHandlers",new Set);X(this,"closeHandlers",new Set);X(this,"errorHandlers",new Set);X(this,"reconnectAttempts",0);X(this,"reconnectHandlers",new Set);X(this,"reconnectSuccessHandlers",new Set);X(this,"reconnectGiveUpHandlers",new Set);X(this,"isManualClose",!1);X(this,"authenticated",!1);X(this,"sessionId",null);X(this,"heartbeatInterval",null);X(this,"reconnectTimer",null);X(this,"lastPongTime",0);X(this,"HEARTBEAT_INTERVAL",15e3);X(this,"HEARTBEAT_TIMEOUT",45e3);this.url=e||vr}setSessionId(e){this.sessionId=e}getSessionId(){return this.sessionId}getReconnectState(){var e;return{attempts:this.reconnectAttempts,maxAttempts:Ve,reconnecting:this.reconnectAttempts>0&&((e=this.ws)==null?void 0:e.readyState)!==WebSocket.OPEN}}onReconnectAttempt(e){return this.reconnectHandlers.add(e),()=>this.reconnectHandlers.delete(e)}onReconnectSuccess(e){return this.reconnectSuccessHandlers.add(e),()=>this.reconnectSuccessHandlers.delete(e)}onReconnectGiveUp(e){return this.reconnectGiveUpHandlers.add(e),()=>this.reconnectGiveUpHandlers.delete(e)}connect(){var t,n;if(((t=this.ws)==null?void 0:t.readyState)===WebSocket.OPEN||((n=this.ws)==null?void 0:n.readyState)===WebSocket.CONNECTING)return;this.isManualClose=!1;const e=this.sessionId?`${this.url}?sessionId=${encodeURIComponent(this.sessionId)}`:this.url;this.ws=new WebSocket(e),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{var o;console.log("WebSocket connected");const r=this.reconnectAttempts>0;this.reconnectAttempts=0,this.lastPongTime=Date.now(),r&&this.reconnectSuccessHandlers.forEach(a=>a()),((o=this.ws)==null?void 0:o.readyState)===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"ping"})),this.startHeartbeat(),this.openHandlers.forEach(a=>a())},this.ws.onclose=()=>{console.log("WebSocket closed"),this.stopHeartbeat(),this.closeHandlers.forEach(r=>r()),this.isManualClose||this.scheduleReconnect()},this.ws.onerror=r=>{Z.error("WebSocket connection error",r.message||"Connection failed"),this.errorHandlers.forEach(o=>o())},this.ws.onmessage=r=>{this._onMessage(r)}}async _onMessage(e){var t,n;try{let r;if(e.data instanceof Blob?r=await e.data.text():e.data instanceof ArrayBuffer?r=new TextDecoder().decode(e.data):typeof e.data=="string"?r=e.data:r=String(e.data),r=r.trim(),!r)return;const o=JSON.parse(r);if(console.log("[WS←]",o.type,o.sessionId,JSON.stringify(o.data||o.message||"").slice(0,200)),(o.type==="pong"||o.type==="ping")&&(this.lastPongTime=Date.now(),o.type==="pong"))return;o.seq!==void 0&&o.seq>=0&&this.send({type:"message_ack",data:JSON.stringify({seq:o.seq})}),this.messageHandlers.forEach(a=>a(o))}catch(r){const o=((n=(t=e.data)==null?void 0:t.constructor)==null?void 0:n.name)||typeof e.data;let a;if(e.data instanceof Blob?a=`[Blob ${e.data.size} bytes]`:e.data instanceof ArrayBuffer?a=`[ArrayBuffer ${e.data.byteLength} bytes]`:a=String(e.data).slice(0,500),typeof e.data=="string"&&e.data.trim()){const i=e.data.trim();try{this.messageHandlers.forEach(d=>d({type:"log",data:JSON.stringify({level:"info",message:i})}));return}catch{}}Z.error("Failed to parse WebSocket message",`type=${o} data=${a} error=${r}`)}}startHeartbeat(){this.stopHeartbeat(),this.lastPongTime=Date.now(),this.heartbeatInterval=setInterval(()=>{var e,t;if(Date.now()-this.lastPongTime>this.HEARTBEAT_TIMEOUT){console.warn("[WS] Heartbeat timeout, reconnecting..."),this.stopHeartbeat(),this.isManualClose=!0,(e=this.ws)==null||e.close(),this.ws=null,this.scheduleReconnect();return}((t=this.ws)==null?void 0:t.readyState)===WebSocket.OPEN&&this.send({type:"ping"})},this.HEARTBEAT_INTERVAL)}stopHeartbeat(){this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null)}scheduleReconnect(){if(this.reconnectAttempts++,this.reconnectAttempts>Ve){console.error(`[WS] Max reconnect attempts (${Ve}) reached — giving up.`),Z.error("WebSocket",`Connection lost — max reconnect attempts (${Ve}) reached. Refresh the page to try again.`),this.reconnectGiveUpHandlers.forEach(r=>r());return}const e=Math.min(3e3*Math.pow(2,this.reconnectAttempts),3e4),t=Math.random()*1e3-500,n=Math.max(100,Math.round(e+t));console.log(`[WS] Reconnecting... Attempt ${this.reconnectAttempts}, delay=${n}ms`),this.reconnectHandlers.forEach(r=>r(this.reconnectAttempts,Ve)),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},n)}disconnect(){var e;this.isManualClose=!0,this.reconnectAttempts=0,this.stopHeartbeat(),this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),(e=this.ws)==null||e.close(),this.ws=null}send(e){var t,n;if(((t=this.ws)==null?void 0:t.readyState)===WebSocket.OPEN){const r=JSON.stringify(e);console.log("[WS→]",e.type,e.sessionId,r.slice(0,200)),this.ws.send(r)}else console.warn("[WS] NOT CONNECTED — dropping:",e.type,e.sessionId,"readyState=",(n=this.ws)==null?void 0:n.readyState)}onMessage(e){return this.messageHandlers.add(e),()=>this.messageHandlers.delete(e)}onOpen(e){return this.openHandlers.add(e),()=>this.openHandlers.delete(e)}onClose(e){return this.closeHandlers.add(e),()=>this.closeHandlers.delete(e)}onError(e){return this.errorHandlers.add(e),()=>this.errorHandlers.delete(e)}get isConnected(){var e;return((e=this.ws)==null?void 0:e.readyState)===WebSocket.OPEN}setToken(e){try{sessionStorage.setItem("auth_token",e)}catch{}}get isAuthenticated(){return this.authenticated}setAuthenticated(e){this.authenticated=e}}const L=new wr,Te=ue()(We((s,e)=>({pendingApprovals:[],autoMode:!1,sessionAllowList:[],showConfigHint:!0,addApproval:t=>s(n=>({pendingApprovals:[...n.pendingApprovals,t]})),removeApproval:t=>s(n=>({pendingApprovals:n.pendingApprovals.filter(r=>r.approvalId!==t)})),clearApprovals:()=>s({pendingApprovals:[]}),setAutoMode:t=>s({autoMode:t}),addToSessionAllowList:t=>s(n=>n.sessionAllowList.includes(t)?n:{sessionAllowList:[...n.sessionAllowList,t]}),isSessionAllowed:t=>e().sessionAllowList.includes(t),setShowConfigHint:t=>s({showConfigHint:t})}),{name:"deepseekcode-hook-approval",partialize:s=>({autoMode:s.autoMode,showConfigHint:s.showConfigHint})}));function Cr(s){if(!s)return 0;const e=(s.match(/[\u4e00-\u9fff]/g)||[]).length,t=s.length-e;return Math.ceil(e*1.5+t*.25)}const V=ue((s,e)=>({currentUsage:{promptTokens:0,completionTokens:0,totalTokens:0,estimatedCost:0},maxContextTokens:1e6,degradation:null,compactingUntil:0,lastCompactInfo:null,compactionProgress:null,showTokenInfo:!1,model:"",history:[],_hasBackendData:!1,tokenRate:0,sessionBaseTotal:0,_lastTotal:0,_lastTotalTs:0,contextDistribution:null,thresholdWarning:null,retryState:null,setContextDistribution:t=>s({contextDistribution:t}),setThresholdWarning:t=>s({thresholdWarning:t}),setRetryState:t=>s({retryState:t}),updateUsage:t=>s(n=>{const r=t.totalTokens??n.currentUsage.totalTokens,o=Date.now(),a=n._lastTotal,i=n._lastTotalTs;let d=n.tokenRate;if(i>0&&a>0&&o>i&&r>a){const c=r-a,u=(o-i)/1e3,p=c/u;d=d>0?d*.6+p*.4:p}return{currentUsage:{...n.currentUsage,...t},_hasBackendData:!0,tokenRate:d,_lastTotal:r,_lastTotalTs:o}}),setModel:t=>s({model:t}),setMaxContextTokens:t=>s({maxContextTokens:t}),setDegradation:t=>s({degradation:t}),setCompacting:t=>s({compactingUntil:Date.now()+3e3,lastCompactInfo:t}),setCompactionProgress:t=>s({compactionProgress:t}),setShowTokenInfo:t=>s({showTokenInfo:t}),addToHistory:t=>s(n=>({history:[...n.history.slice(-100),{timestamp:Date.now(),usage:t}]})),estimateTokens:t=>Cr(t),recalculateFromMessages:t=>{if(!t||t.length===0){s({currentUsage:{promptTokens:0,completionTokens:0,totalTokens:0,estimatedCost:0},_hasBackendData:!1});return}const n=e().estimateTokens;let r=0,o=0;for(const d of t){let c=d.content||"";if(d.thinking&&(c+=" "+d.thinking),d.steps)for(const p of d.steps)p.thought&&(c+=" "+p.thought),p.action&&(c+=" "+p.action),p.result&&(c+=" "+p.result);if(d.toolCalls)for(const p of d.toolCalls)p.args&&(c+=" "+(typeof p.args=="string"?p.args:JSON.stringify(p.args)));const u=n(c);d.type==="user"?r+=u:o+=u}const a=r+o,i=r/1e6*.15+o/1e6*.6;s({currentUsage:{promptTokens:r,completionTokens:o,totalTokens:a,estimatedCost:i}})},resetUsage:()=>s(t=>({currentUsage:{promptTokens:0,completionTokens:0,totalTokens:0,estimatedCost:0},_hasBackendData:!1,sessionBaseTotal:t.currentUsage.totalTokens,tokenRate:0,_lastTotal:0,_lastTotalTs:0,contextDistribution:null,thresholdWarning:null}))})),fn="";function _r(s){return`${fn}${s}`}class Tr{constructor(e){X(this,"baseUrl");this.baseUrl=e}async request(e,t={}){try{const n=localStorage.getItem("auth_token"),r={"Content-Type":"application/json",...t.headers};n&&(r.Authorization=`Bearer ${n}`);const o=await fetch(`${this.baseUrl}${e}`,{headers:r,...t}),a=await o.json();return o.ok?a&&typeof a.success=="boolean"?{success:a.success,data:a.data,error:a.error}:{success:!0,data:a}:{success:!1,error:a.error||`HTTP ${o.status}`}}catch(n){return{success:!1,error:n instanceof Error?n.message:"Network error"}}}get(e){return this.request(e,{method:"GET"})}post(e,t){return this.request(e,{method:"POST",body:t?JSON.stringify(t):void 0})}put(e,t){return this.request(e,{method:"PUT",body:t?JSON.stringify(t):void 0})}delete(e,t){return this.request(e,{method:"DELETE",body:t?JSON.stringify(t):void 0})}patch(e,t){return this.request(e,{method:"PATCH",body:t?JSON.stringify(t):void 0})}}const v=new Tr(fn),z={providers:{presets:()=>v.get("/api/providers/presets"),refresh:()=>v.post("/api/providers/refresh")},models:{list:async()=>{var e;const s=await v.get("/api/models");return s.success&&((e=s.data)!=null&&e.models)&&(s.data.models=s.data.models.map(t=>({...t,isGlobalDefault:t.isDefault===!0,isPlanDefault:t.defaultFor==="plan",isActDefault:t.defaultFor==="act",isGoalDefault:t.defaultFor==="goal"}))),s},get:s=>v.get(`/api/models/${s}`),create:s=>v.post("/api/models",s),update:(s,e,t)=>v.post("/api/models/update",{provider:s,modelId:e,...t}),delete:(s,e)=>v.post("/api/models/delete",{provider:s,modelId:e}),test:s=>v.post(`/api/models/${s}/test`),fetch:(s,e)=>v.post("/api/models/fetch",{baseUrl:s,apiKey:e}),toggle:(s,e)=>v.post("/api/models/toggle",{provider:s,modelId:e}),setDefaults:s=>v.post("/api/models/defaults",s)},tools:{list:()=>v.get("/api/tools"),get:s=>v.get(`/api/tools/${s}`),update:(s,e)=>v.put(`/api/tools/${s}`,e),toggle:(s,e)=>v.post(`/api/tools/${s}/toggle`,{enabled:e})},skills:{list:()=>v.get("/api/skills"),get:s=>v.get(`/api/skills/${s}`),create:s=>v.post("/api/skills",s),update:(s,e)=>v.put(`/api/skills/${s}`,e),toggle:(s,e)=>v.post(`/api/skills/${s}/toggle`,{enabled:e}),import:s=>v.post("/api/skills/import",s)},agents:{list:()=>v.get("/api/agents"),get:s=>v.get(`/api/agents/${s}`),create:s=>v.post("/api/agents",s),update:(s,e)=>v.put(`/api/agents/${s}`,e),delete:s=>v.delete(`/api/agents/${s}`),setActive:s=>v.post(`/api/agents/${s}/activate`),toggle:(s,e)=>v.post(`/api/agents/${s}/toggle`,{enabled:e}),setModelBinding:(s,e)=>v.post(`/api/agents/${s}/model`,e)},files:{list:s=>v.get(`/api/files${s?`?path=${encodeURIComponent(s)}`:""}`),read:s=>v.get(`/api/files/read?path=${encodeURIComponent(s)}`),create:(s,e)=>v.post("/api/files",{path:s,content:e}),update:(s,e)=>v.put("/api/files/write",{path:s,content:e}),delete:s=>v.delete(`/api/files?path=${encodeURIComponent(s)}`),download:async s=>{try{const e={},t=localStorage.getItem("auth_token");t&&(e.Authorization=`Bearer ${t}`);const n=await fetch(_r(`/api/files/download?path=${encodeURIComponent(s)}`),{headers:e});if(!n.ok){let i=`HTTP ${n.status}`;try{const d=await n.json();d!=null&&d.error&&(i=d.error)}catch{}return{success:!1,error:i}}const r=await n.blob(),o=URL.createObjectURL(r),a=document.createElement("a");return a.href=o,a.download=s.split(/[\\/]/).pop()||"download",a.click(),URL.revokeObjectURL(o),{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Download failed"}}},upload:async(s,e)=>{try{const t=await Nr(s);return v.post("/api/files/upload",{path:e,content:t,base64:!0})}catch(t){return{success:!1,error:t instanceof Error?t.message:"Upload failed"}}}},sessions:{list:()=>v.get("/api/sessions"),get:s=>v.get(`/api/sessions/${s}`),create:s=>v.post("/api/sessions",{title:s}),delete:s=>v.delete(`/api/sessions/${s}`)},tasks:{list:()=>v.get("/api/tasks"),get:s=>v.get(`/api/tasks/${s}`),create:s=>v.post("/api/tasks",s),update:(s,e)=>v.put(`/api/tasks/${s}`,e),updateStatus:(s,e)=>v.patch(`/api/tasks/${s}/status`,{status:e}),delete:s=>v.delete(`/api/tasks/${s}`),clearCompleted:()=>v.delete("/api/tasks")},config:{provider:{get:()=>v.get("/api/config/provider"),save:s=>v.post("/api/config/provider",s),delete:s=>v.post("/api/config/provider/remove",{provider:s}),setDefault:s=>v.post("/api/config/provider",{provider:s,setDefault:!0})},files:{list:()=>v.get("/api/config/files"),read:s=>v.get(`/api/config/files/read?file=${encodeURIComponent(s)}`),write:(s,e)=>v.put("/api/config/files/write",{file:s,content:e})}},git:{status:()=>v.get("/api/git/status"),branches:()=>v.get("/api/git/branches"),commit:s=>v.post("/api/git/commit",s),push:()=>v.post("/api/git/push"),checkout:s=>v.post("/api/git/checkout",{branch:s}),prStatus:()=>v.get("/api/repos/pr")},fileJob:{parse:s=>v.post("/api/filejob/parse",{files:s}),parsePaths:s=>v.post("/api/filejob/parse",{paths:s}),importPaths:s=>v.post("/api/filejob/import",{paths:s}),render:s=>v.post("/api/filejob/render",s)},system:{status:()=>v.get("/api/system/status"),restart:()=>v.post("/api/system/restart"),shutdown:()=>v.post("/api/system/shutdown")},observability:{summary:()=>v.get("/api/observability/summary"),costs:()=>v.get("/api/observability/costs"),listRuns:()=>v.get("/api/observability/runs"),getRun:s=>v.get(`/api/observability/runs/${encodeURIComponent(s)}`),getRunEvents:(s,e=0,t=50)=>v.get(`/api/observability/runs/${encodeURIComponent(s)}/events?page=${e}&size=${t}`)},plans:{list:()=>v.get("/api/plans"),read:s=>v.get(`/api/plans/${encodeURIComponent(s)}`),delete:s=>v.delete(`/api/plans/${encodeURIComponent(s)}`)},logs:{list:()=>v.get("/api/logs"),read:(s,e)=>v.get(`/api/logs/read?file=${encodeURIComponent(s)}${e?`&maxLines=${e}`:""}`),downloadUrl:s=>`/api/logs/download?file=${encodeURIComponent(s)}`},hooks:{list:()=>v.get("/api/hooks/rules"),get:s=>v.get(`/api/hooks/rules/${encodeURIComponent(s)}`),create:s=>v.post("/api/hooks/rules",s),update:(s,e)=>v.put(`/api/hooks/rules/${encodeURIComponent(s)}`,e),delete:s=>v.delete(`/api/hooks/rules/${encodeURIComponent(s)}`),batchDelete:s=>v.post("/api/hooks/rules/batch-delete",{names:s}),toggle:(s,e)=>v.patch(`/api/hooks/rules/${encodeURIComponent(s)}/toggle`,{enabled:e}),batchToggle:(s,e)=>v.post("/api/hooks/rules/batch-toggle",{names:s,enabled:e}),dryRun:s=>v.post("/api/hooks/dry-run",s),stats:()=>v.get("/api/hooks/stats"),events:()=>v.get("/api/hooks/events"),agents:()=>v.get("/api/hooks/agents"),export:()=>v.get("/api/hooks/export"),import:s=>v.post("/api/hooks/import",s)},channels:{list:()=>v.get("/api/channels"),create:s=>v.post("/api/channels",s),update:(s,e)=>v.put(`/api/channels/${encodeURIComponent(s)}`,e),delete:s=>v.delete(`/api/channels/${encodeURIComponent(s)}`),toggle:(s,e)=>v.patch(`/api/channels/${encodeURIComponent(s)}/toggle`,{enabled:e}),test:s=>v.post(`/api/channels/${encodeURIComponent(s)}/test`),wechat:{qrcode:(s,e)=>v.get(`/api/channels/${encodeURIComponent(s)}/wechat/qrcode?token=${encodeURIComponent(e)}`),qrcodeStatus:(s,e,t)=>v.get(`/api/channels/${encodeURIComponent(s)}/wechat/qrcode/status?token=${encodeURIComponent(e)}&qrcode=${encodeURIComponent(t)}`)},weixin:{bind:()=>v.get("/api/weixin/bind"),bindStatus:s=>v.get(`/api/weixin/bind/status?qrcode=${encodeURIComponent(s)}`)}},inbox:{list:s=>v.get(`/api/inbox?${new URLSearchParams(s).toString()}`),stats:()=>v.get("/api/inbox/stats"),resolve:(s,e)=>v.post(`/api/inbox/${encodeURIComponent(s)}/resolve`,{resolution:e})},audit:{query:s=>v.get(`/api/audit?${new URLSearchParams(Object.fromEntries(Object.entries(s||{}).map(([e,t])=>[e,String(t)]))).toString()}`),stats:()=>v.get("/api/audit/stats")},automations:{list:()=>v.get("/api/automations"),create:s=>v.post("/api/automations",s),update:(s,e)=>v.put(`/api/automations/${encodeURIComponent(s)}`,e),remove:s=>v.delete(`/api/automations/${encodeURIComponent(s)}`),toggle:(s,e)=>v.post(`/api/automations/${encodeURIComponent(s)}/toggle`,{enabled:e}),run:s=>v.post(`/api/automations/${encodeURIComponent(s)}/run`),runs:s=>v.get(`/api/automations/${encodeURIComponent(s)}/runs`),addPermission:(s,e,t)=>v.post(`/api/automations/${encodeURIComponent(s)}/permissions`,{tool:e,target:t}),revokePermission:(s,e)=>v.delete(`/api/automations/${encodeURIComponent(s)}/permissions`,{entry:e})}};function Nr(s){return new Promise((e,t)=>{const n=new FileReader;n.onload=()=>{const r=n.result,o=r.indexOf(",");e(o>=0?r.slice(o+1):r)},n.onerror=()=>t(n.error||new Error("Failed to read file")),n.readAsDataURL(s)})}const Br=Object.freeze(Object.defineProperty({__proto__:null,api:z,apiClient:v,default:z},Symbol.toStringTag,{value:"Module"})),It=s=>s==="normal"?"act":s;let mt=0;const jr=s=>s==="normal"?"normal":s==="auto"?"auto-act":yr(typeof s=="string"?s:void 0),Je=s=>s==="normal"?"act":Le(s)?"auto":ke(s),wt=ue()(We((s,e)=>({mode:"act",currentPlanContent:null,modeHistory:[],thinkingStatusBySession:{},prePlanMode:null,setMode:t=>{const n=e().mode;if(n===t)return;s(i=>({mode:t,modeHistory:[...i.modeHistory,{previousMode:n,newMode:t,description:`Mode changed: ${n} -> ${t}`,timestamp:Date.now()}]})),Te.getState().setAutoMode(t!=="normal"&&Le(t));const r=Je(n),o=Je(t);if(r===o)return;try{const i=K.getState().activeSessionId||L.getSessionId();i&&L.send({type:"plan_mode_change",sessionId:i,data:JSON.stringify({previousMode:Je(n),newMode:Je(t),frontendMode:t,timestamp:Date.now()})})}catch(i){console.warn("[ExecutionModeStore] Failed to notify mode change via WS:",i)}const a=++mt;z.models.list().then(i=>{var m;if(a!==mt||!i.success||!((m=i.data)!=null&&m.models))return;const d=i.data.models.filter(f=>f.enabled!==!1),c=ke(It(t)),u=d.find(f=>f.defaultFor===c),p=d.find(f=>f.isDefault||f.defaultFor==="global"),h=(u==null?void 0:u.id)||(p==null?void 0:p.id)||"";h&&V.getState().setModel(h)}).catch(i=>{console.warn("[ExecutionModeStore] Failed to refresh models:",i)})},applyBackendMode:t=>{const n=e().mode;if(n===t)return;s(o=>({mode:t,prePlanMode:t!=="plan"?null:o.prePlanMode,modeHistory:[...o.modeHistory,{previousMode:n,newMode:t,description:`Backend mode changed: ${n} -> ${t}`,timestamp:Date.now()}]})),Te.getState().setAutoMode(t!=="normal"&&Le(t));const r=++mt;z.models.list().then(o=>{var p;if(r!==mt||!o.success||!((p=o.data)!=null&&p.models))return;const a=o.data.models.filter(h=>h.enabled!==!1),i=ke(It(t)),d=a.find(h=>h.defaultFor===i),c=a.find(h=>h.isDefault||h.defaultFor==="global"),u=(d==null?void 0:d.id)||(c==null?void 0:c.id)||"";u&&V.getState().setModel(u)}).catch(o=>{console.warn("[ExecutionModeStore] Failed to refresh models after backend mode change:",o)})},toggleMode:()=>{const t=e().mode,n=t==="normal"?"act":fr(t);e().setMode(n)},setBaseMode:t=>{const n=e().mode,r=n!=="normal"&&Le(n);e().setMode(Qt(t,r))},setAuto:t=>{e().setMode(Qt(ke(It(e().mode)),t))},toggleAuto:()=>{const t=e().mode;e().setMode(t==="normal"?"auto-act":mr(t))},enterPlanMode:(t,n)=>{const r=e().mode,o=r!=="normal"&&ke(r)!=="plan"?r:e().prePlanMode,a=r!=="normal"&&ke(r)==="goal"?"goal":"plan";s(i=>({mode:a,prePlanMode:o,modeHistory:[...i.modeHistory,{previousMode:r,newMode:a,description:`Enter ${a} mode: ${n}`,timestamp:Date.now()}]})),Te.getState().setAutoMode(!1)},exitPlanMode:(t,n)=>{const r=e().mode,o=e().prePlanMode,a=o&&(o==="normal"||ke(o)!=="plan")?o:"act";s(i=>({mode:a,prePlanMode:null,modeHistory:[...i.modeHistory,{previousMode:r,newMode:a,description:`Exit to ${a} mode: ${n}`,timestamp:Date.now()}]})),Te.getState().setAutoMode(a!=="normal"&&Le(a))},enterGoalMode:(t,n)=>{const r=e().mode;s(o=>({mode:"goal",modeHistory:[...o.modeHistory,{previousMode:r,newMode:"goal",description:`Enter Goal mode: ${n}`,timestamp:Date.now()}]})),Te.getState().setAutoMode(!1);try{const o=K.getState().activeSessionId||L.getSessionId()||void 0;L.send({type:"plan_mode_change",sessionId:o,data:JSON.stringify({previousMode:Je(r),newMode:"goal",frontendMode:"goal",goalDescription:n,timestamp:Date.now()})})}catch(o){console.warn("[ExecutionModeStore] Failed to notify goal mode change via WS:",o)}},exitGoalMode:()=>{const t=e().mode;s(n=>({mode:"act",modeHistory:[...n.modeHistory,{previousMode:t,newMode:"act",description:"Exit Goal mode",timestamp:Date.now()}]})),Te.getState().setAutoMode(!1)},setPlanContent:t=>s({currentPlanContent:t}),setThinkingStatus:(t,n)=>s(r=>({thinkingStatusBySession:{...r.thinkingStatusBySession,[t]:n}})),getThinkingStatus:t=>e().thinkingStatusBySession[t]||"",reset:()=>s({mode:"act",currentPlanContent:null,modeHistory:[],thinkingStatusBySession:{},prePlanMode:null})}),{name:"deepseekcode-plan-storage",version:1,migrate:s=>s,merge:(s,e)=>{const t=s??{};return{...e,...t,mode:jr(t.mode)}},partialize:s=>({mode:s.mode,currentPlanContent:s.currentPlanContent,modeHistory:s.modeHistory})})),Fs=200,Er=(s,e)=>({runId:e,sessionId:s,status:"RUNNING",completedPhases:0,totalPhases:0,completedEffects:0,totalEffects:0,tokensUsed:0,tokensRemaining:0,updatedAt:Date.now()}),je=()=>Date.now(),Fe=(s,e)=>{const t=String(s||"").toLowerCase();return e||t==="done"||t==="success"||t==="completed"||t==="complete"?"completed":t==="running"||t==="in_progress"||t==="started"?"running":t==="failed"||t==="error"?"failed":t==="skipped"||t==="cancelled"||t==="canceled"?"skipped":"pending"},Ws=s=>s.id||`${s.type||"event"}-${s.timestamp||je()}-${Math.random().toString(36).slice(2,8)}`,ie=ue()(We((s,e)=>({bySession:{},byRun:{},agentsBySession:{},tasksBySession:{},eventsBySession:{},upsert:(t,n)=>s(r=>{const o=n.runId,a=r.byRun[o]||r.bySession[t]||Er(t,o),i={...a.agentNodes||{}};n.agentNode&&(i[n.agentNode.nodeId]=n.agentNode);const{agentNode:d,...c}=n,u={...a,...c,agentNodes:i,sessionId:t,runId:o,updatedAt:je()},p={...r.agentsBySession[t]||{}};d&&(p[d.nodeId]={...p[d.nodeId]||{},id:d.nodeId,sessionId:t,name:d.role,role:d.role,source:"workflow",runId:o,phase:d.phase,status:d.status,tokens:d.tokens,error:d.error,updatedAt:d.updatedAt||je()});const h=n.lastEventType||n.status||"workflow_update",f=[{id:Ws({type:h}),sessionId:t,type:h,source:"workflow",timestamp:je(),status:u.status,runId:o,agentId:d==null?void 0:d.nodeId,message:u.error,data:c},...r.eventsBySession[t]||[]].slice(0,Fs);return{bySession:{...r.bySession,[t]:u},byRun:{...r.byRun,[o]:u},agentsBySession:{...r.agentsBySession,[t]:p},eventsBySession:{...r.eventsBySession,[t]:f}}}),fail:(t,n,r)=>e().upsert(t,{runId:n,status:"ERROR",error:r,lastEventType:"workflow_error"}),getForSession:t=>e().bySession[t],upsertAgent:(t,n)=>s(r=>{var i;const o=(i=r.agentsBySession[t])==null?void 0:i[n.id],a={id:n.id,sessionId:t,name:n.name||n.role||(o==null?void 0:o.name)||n.id,role:n.role||(o==null?void 0:o.role)||n.name||n.id,source:n.source||(o==null?void 0:o.source)||"agent",status:n.status||(o==null?void 0:o.status)||"idle",runId:n.runId??(o==null?void 0:o.runId),phase:n.phase??(o==null?void 0:o.phase),taskId:n.taskId??(o==null?void 0:o.taskId),currentTask:n.currentTask??(o==null?void 0:o.currentTask),tokens:n.tokens??(o==null?void 0:o.tokens),error:n.error??(o==null?void 0:o.error),updatedAt:n.updatedAt||je()};return{agentsBySession:{...r.agentsBySession,[t]:{...r.agentsBySession[t]||{},[n.id]:a}}}}),upsertTask:(t,n)=>s(r=>{var c;const o=(c=r.tasksBySession[t])==null?void 0:c[n.id],a=je(),i=n.status||(o==null?void 0:o.status)||"pending",d={id:n.id,sessionId:t,title:n.title||(o==null?void 0:o.title)||n.description||n.id,status:i,source:n.source||(o==null?void 0:o.source)||"task",description:n.description??(o==null?void 0:o.description),agentType:n.agentType??(o==null?void 0:o.agentType),progress:n.progress??(o==null?void 0:o.progress),result:n.result??(o==null?void 0:o.result),error:n.error??(o==null?void 0:o.error),runId:n.runId??(o==null?void 0:o.runId),dependencies:n.dependencies??(o==null?void 0:o.dependencies),startedAt:n.startedAt??(o==null?void 0:o.startedAt)??(i==="running"?a:void 0),completedAt:n.completedAt??(o==null?void 0:o.completedAt)??(i==="completed"||i==="failed"?a:void 0),createdAt:n.createdAt||(o==null?void 0:o.createdAt)||a,updatedAt:n.updatedAt||a,raw:n.raw??(o==null?void 0:o.raw)};return{tasksBySession:{...r.tasksBySession,[t]:{...r.tasksBySession[t]||{},[n.id]:d}}}}),setTasks:(t,n,r="plan")=>s(o=>{const a=o.tasksBySession[t]||{},i=Object.fromEntries(Object.entries(a).filter(([,u])=>u.source!==r)),d=je(),c=Object.fromEntries(n.map((u,p)=>{const h=a[u.id],m=u.status||(h==null?void 0:h.status)||"pending",f={id:u.id,sessionId:t,title:u.title||(h==null?void 0:h.title)||u.description||`Task ${p+1}`,status:m,source:u.source||r,description:u.description??(h==null?void 0:h.description),agentType:u.agentType??(h==null?void 0:h.agentType),progress:u.progress??(h==null?void 0:h.progress),result:u.result??(h==null?void 0:h.result),error:u.error??(h==null?void 0:h.error),runId:u.runId??(h==null?void 0:h.runId),dependencies:u.dependencies??(h==null?void 0:h.dependencies),startedAt:u.startedAt??(h==null?void 0:h.startedAt),completedAt:u.completedAt??(h==null?void 0:h.completedAt),createdAt:u.createdAt||(h==null?void 0:h.createdAt)||d+p,updatedAt:u.updatedAt||d,raw:u.raw??(h==null?void 0:h.raw)};return[f.id,f]}));return{tasksBySession:{...o.tasksBySession,[t]:{...i,...c}}}}),recordEvent:(t,n)=>s(r=>{const o={id:Ws(n),sessionId:t,type:n.type,source:n.source||"system",timestamp:n.timestamp||je(),title:n.title,message:n.message,status:n.status,runId:n.runId,agentId:n.agentId,taskId:n.taskId,data:n.data};return{eventsBySession:{...r.eventsBySession,[t]:[o,...r.eventsBySession[t]||[]].slice(0,Fs)}}}),getAgentsForSession:t=>Object.values(e().agentsBySession[t]||{}).sort((n,r)=>r.updatedAt-n.updatedAt),getTasksForSession:t=>Object.values(e().tasksBySession[t]||{}).sort((n,r)=>{const o={running:0,pending:1,failed:2,completed:3,skipped:4};return o[n.status]-o[r.status]||n.createdAt-r.createdAt}),getEventsForSession:t=>e().eventsBySession[t]||[],getAgentTree:t=>{const n=Object.values(e().agentsBySession[t]||{}),r=new Map(n.map(d=>[d.id,d])),o=n.filter(d=>!d.parentId||!r.has(d.parentId)),a=d=>n.filter(c=>c.parentId===d),i=d=>({agent:d,children:a(d.id).map(i),isRunning:d.status==="running",tokensUsed:d.tokens||0});return o.map(i)},getRunningAgentCount:t=>Object.values(e().agentsBySession[t]||{}).filter(r=>r.status==="running").length}),{name:"deepseekcode-workflow-store",partialize:s=>({bySession:s.bySession,byRun:s.byRun,agentsBySession:s.agentsBySession,tasksBySession:s.tasksBySession,eventsBySession:s.eventsBySession})})),Ar={pending:{color:"text-gray-400",bg:"bg-gray-500/10",label:"Pending"},running:{color:"text-blue-400",bg:"bg-blue-500/10",label:"Running"},completed:{color:"text-green-400",bg:"bg-green-500/10",label:"Done"},failed:{color:"text-red-400",bg:"bg-red-500/10",label:"Failed"},skipped:{color:"text-gray-500",bg:"bg-gray-500/5",label:"Skipped"}},Pr=({status:s})=>s==="running"?l.jsx(it,{size:12,className:"animate-spin text-accent-blue"}):s==="completed"?l.jsx(nn,{size:12,className:"text-accent-green"}):s==="failed"?l.jsx(es,{size:12,className:"text-accent-red"}):s==="skipped"?l.jsx(Un,{size:12,className:"text-dark-muted"}):l.jsx(zn,{size:12,className:"text-dark-muted"}),Rr=g.memo(function({sessionId:e,defaultExpanded:t,onClose:n}){const{t:r}=ve(),[o,a]=g.useState(t??!1),[i,d]=g.useState(null),c=ie(m=>m.getTasksForSession(e)),u=g.useMemo(()=>{const m=c.length,f=c.filter(S=>S.status==="completed").length,y=c.filter(S=>S.status==="running").length,b=c.filter(S=>S.status==="failed").length,w=m>0?Math.round(f/m*100):0;return{total:m,completed:f,running:y,failed:b,progress:w}},[c]),p=g.useMemo(()=>{const m={pending:[],running:[],completed:[],failed:[]};return c.forEach(f=>{const y=f.status==="skipped"?"pending":f.status;m[y].push(f)}),m},[c]);if(c.length===0)return l.jsx("div",{className:"text-xs text-dark-muted py-4 text-center",children:r("chat.noTasks")});const h=[...p.running,...p.failed,...p.pending.slice(0,5),...p.completed.slice(-3)];return l.jsxs("div",{className:"min-w-[220px] border border-dark-border rounded bg-dark-bg/70",children:[l.jsxs("div",{className:"w-full flex items-center justify-between px-2 py-1.5 hover:bg-dark-hover transition-colors cursor-pointer",onClick:()=>a(!o),children:[l.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[l.jsx(sn,{size:14,className:"text-accent-blue shrink-0"}),l.jsx("span",{className:"text-xs font-medium text-dark-text",children:"Task Board"}),l.jsxs("span",{className:"text-[10px] text-dark-muted shrink-0",children:[u.completed,"/",u.total]}),l.jsx("div",{className:"w-16 h-1.5 bg-dark-surface rounded-full overflow-hidden",children:l.jsx("div",{className:`h-full rounded-full transition-all duration-500 ${u.running>0?"bg-accent-blue":u.failed>0?"bg-accent-red":"bg-accent-green"}`,style:{width:`${u.progress}%`}})}),u.running>0&&l.jsx("span",{className:"w-1.5 h-1.5 bg-accent-blue rounded-full animate-pulse shrink-0"})]}),l.jsxs("div",{className:"flex items-center gap-1",children:[n&&o&&l.jsx("span",{role:"button",tabIndex:0,onClick:m=>{m.stopPropagation(),n()},onKeyDown:m=>{m.key==="Enter"&&(m.stopPropagation(),n())},className:"p-0.5 rounded hover:bg-dark-hover transition-colors cursor-pointer",title:"Hide task panel",children:l.jsx($e,{size:12,className:"text-dark-muted"})}),o?l.jsx(Hn,{size:14,className:"text-dark-muted"}):l.jsx(pt,{size:14,className:"text-dark-muted"})]})]}),o&&l.jsxs("div",{className:"px-2 pb-2 max-h-[260px] overflow-y-auto custom-scrollbar space-y-1.5",children:[h.map(m=>l.jsx(Ir,{task:m,isSelected:m.id===i,onClick:()=>d(i===m.id?null:m.id)},m.id)),p.pending.length>5&&l.jsxs("div",{className:"text-[10px] text-dark-muted text-center",children:[p.pending.length-5," more pending tasks"]}),p.completed.length>3&&l.jsxs("div",{className:"text-[10px] text-dark-muted text-center",children:[p.completed.length-3," more completed tasks"]})]})]})}),Lr=(s,e)=>{if(!s)return"";const t=(e||Date.now())-s;return t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`},Ir=g.memo(function({task:e,isSelected:t,onClick:n}){const r=Ar[e.status];return l.jsxs("div",{onClick:n,className:`rounded border p-2 cursor-pointer transition-all ${r.bg} border-dark-border
|
|
4
4
|
${t?"ring-1 ring-accent-blue":"hover:border-dark-muted/40"}
|
|
@@ -10,7 +10,7 @@ ${e.slice(0,200)}`:e.slice(0,200)||null}return e&&e.length>0?e.length>200?`${e.s
|
|
|
10
10
|
---
|
|
11
11
|
${a}
|
|
12
12
|
|
|
13
|
-
`),Q.info(a,5e3),V.getState().setCompacting({originalCount:o.originalCount||0,compressedCount:o.compressedCount||0,tokensSaved:o.tokensSaved||0}),V.getState().setCompactionProgress(null)}catch(o){console.error("Failed to parse context_compressed:",o)}break;case"error":{n.endGeneration(t);const o=typeof e=="string"?e:String(e||"Error occurred"),a=Vr(o),i=n.messagesBySession[t]||[],d=i[i.length-1];d&&d.type==="assistant"&&!d.errorCard?n.attachErrorCard(t,a):n.addMessage(t,{id:crypto.randomUUID(),type:"assistant",content:"",timestamp:Date.now(),errorCard:a});break}case"context_analysis":try{const o=JSON.parse(e||"{}");o&&o.total!==void 0&&V.getState().setContextDistribution(o)}catch(o){console.error("Failed to parse context_analysis:",o)}break;case"threshold_warning":try{const o=JSON.parse(e||"{}");V.getState().setThresholdWarning(o);const a=o.percentLeft!==void 0?o.percentLeft:0;a<=5?console.warn(`Context nearly full (${a}% remaining)`):a<=15&&console.info(`Context running low (${a}% remaining)`)}catch(o){console.error("Failed to parse threshold_warning:",o)}break;case"blocking_limit":try{const o=JSON.parse(e||"{}");V.getState().setThresholdWarning(o),console.error(o.message||"Context blocked")}catch(o){console.error("Failed to parse blocking_limit:",o)}break;case"context_blocked":try{const o=JSON.parse(e||"{}");V.getState().setThresholdWarning(o),console.error(o.message||"Context is full — generation blocked")}catch(o){console.error("Failed to parse context_blocked:",o)}break;case"tool_retry":try{const o=JSON.parse(e||"{}");V.getState().setRetryState({active:o.attempt<(o.maxRetries||3),attempt:o.attempt||0,maxRetries:o.maxRetries||3,errorCategory:o.errorCategory||"unknown",toolName:o.toolName})}catch(o){console.error("Failed to parse tool_retry:",o)}break;case"model_fallback":try{const o=JSON.parse(e||"{}");console.warn(`Model fallback: ${o.fromModel||"?"} → ${o.toModel||"?"}`)}catch(o){console.error("Failed to parse model_fallback:",o)}break;case"tombstone":try{const a=JSON.parse(e||"{}").messageIds||[];a.length>0&&n.applyTombstone(t,a)}catch(o){Z.warn("Failed to parse tombstone",String(o))}break}}const ns=ue()((s,e)=>({backendCommands:[],loaded:!1,setBackendCommands:t=>{s({backendCommands:t,loaded:!0})},getAllCommands:()=>e().backendCommands}));async function Qr(s="",e){try{let t=`${s}/api/commands`;e&&(t+=`?lang=${encodeURIComponent(e)}`);const n=await fetch(t);if(!n.ok)return[];const r=await n.json(),o=Array.isArray(r==null?void 0:r.data)?r.data:[];return ns.getState().setBackendCommands(o),o}catch{return[]}}function Ks(s,e,t,n,r){var o,a,i;switch(s){case"token_update":try{const c=typeof e=="string"?JSON.parse(e):e||{};c.totalTokens>0&&V.getState().updateUsage({promptTokens:c.promptTokens||0,completionTokens:c.completionTokens||0,totalTokens:c.totalTokens||0}),c.model&&V.getState().setModel(c.model)}catch{}break;case"model_name":try{const c=r&&typeof r.model=="string"&&r.model||(typeof e=="string"?e:(e==null?void 0:e.model)||"");c&&V.getState().setModel(c)}catch{}break;case"auth_required":let d=localStorage.getItem("auth_token");d||(d="default-token",localStorage.setItem("auth_token",d)),L.setToken(d),L.setAuthenticated(!1),L.send({type:"auth",token:d});break;case"auth_success":L.setAuthenticated(!0),L.send({type:"subscribe_logs"});{const c=De.getState();Qr("",(o=c.language)!=null&&o.startsWith("zh")?"zh":"en");const u=c.workspaceDir;u&&L.send({type:"workspace",message:u})}break;case"auth_failed":Z.error("Auth failed",String(e));break;case"log":try{const c=typeof e=="string"?JSON.parse(e):e,u={id:`log-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,level:c.level||"info",source:c.source||"System",message:c.message||"",timestamp:c.timestamp||Date.now()};n.setLogs(p=>[...p,u].slice(-500)),n.activeTab!=="logs"&&n.setUnreadLogs(p=>p+1)}catch(c){Z.warn("Failed to parse log entry",String(c))}break;case"commands_list":try{const c=JSON.parse(e||"[]");ns.getState().setBackendCommands(Array.isArray(c)?c:[])}catch(c){Z.warn("Failed to parse commands list",String(c))}break;case"command_start":break;case"command_complete":try{const u=((typeof e=="string"?JSON.parse(e):e||{}).result||"").toString();Q.success(u.length>120?u.slice(0,120)+"...":u||"Command completed",4e3)}catch{}break;case"command_error":try{const c=typeof e=="string"?JSON.parse(e):e||{};Q.error((c.error||"Command failed").toString(),6e3)}catch{}break;case"ping":L.send({type:"pong",data:Date.now().toString()});break;case"workspace_changed":try{const c=JSON.parse(e||"{}");c.newDir&&De.getState().setWorkspaceDir(c.newDir)}catch{}break;case"degradation_update":try{const c=typeof e=="string"?JSON.parse(e):e||{},u=c.active,p=c.mode||"normal",h=Number(c.retryCount)||0,m=Number(c.maxRetries)||0,f=c.message||"",b={normal:"normal",retrying:"retrying",alternative:"alternative model",degraded:"degraded",verifying:"verifying",verified_fail:"verify failed"}[p]||p;if(V.getState().setDegradation({active:u,retryCount:h,maxRetries:m,mode:p,message:f,label:b}),u){const w=h>0?` (${h}/${m})`:"";Q.warning(f||`API Degraded: ${b}${w}`,8e3),n.setLogs(S=>[...S,{id:`deg-${Date.now()}`,level:"warn",source:"Infrastructure",message:`Degradation: ${b} | ${f||"no details"}`,timestamp:Date.now()}].slice(-500))}else Q.success("API Normal")}catch(c){Z.warn("Degradation update parse error",String(c))}break;case"doctor_result":try{const c=typeof e=="string"?JSON.parse(e):e||{},u=c.overallStatus||c.status||"unknown",p=c.healthRate,h=c.issues||[],f={healthy:"healthy",degraded:"degraded",unhealthy:"unhealthy",unknown:"unknown"}[u]||u,y=typeof p=="number"?` (${Math.round(p*100)}%)`:"";if(u==="healthy")Q.success(`Doctor: ${f}${y}`);else if(Q.warning(`Doctor: ${f}${y}`,1e4),h&&h.length>0)for(const b of h)n.setLogs(w=>[...w,{id:`doctor-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,level:"warn",source:"Doctor",message:typeof b=="string"?b:b.message||JSON.stringify(b),timestamp:Date.now()}].slice(-500))}catch(c){Z.warn("Doctor result parse error",String(c))}break;case"session_created":{try{const c=typeof e=="string"?JSON.parse(e):e||{};c.id&&(L.setSessionId(c.id),K.getState().updateSession(c.id,c))}catch{}typeof e=="string"&&e&&Z.info(`Session event: ${s}`);break}case"session_resumed":{try{const c=typeof e=="string"?JSON.parse(e):e||{};if((a=c.session)!=null&&a.id&&(L.setSessionId(c.session.id),K.getState().updateSession(c.session.id,c.session)),c.messages&&Array.isArray(c.messages)){const u=((i=c.session)==null?void 0:i.id)||t;U.getState().replaceMessages(u,c.messages.map(p=>({id:p.id||`msg-${p.timestamp||Date.now()}`,type:p.type==="user"?"user":"assistant",content:p.content||"",timestamp:p.timestamp||Date.now(),thinking:p.thinking||void 0})))}}catch(c){Z.warn("Failed to process session_resumed",String(c))}typeof e=="string"&&e&&Z.info(`Session event: ${s}`);break}case"mcp_update":try{const c=typeof e=="string"?JSON.parse(e):e||{},u=c.server||c.name||"MCP",p=c.action||c.status||"updated";Z.info(`MCP ${u}: ${p}`)}catch{}break;case"hook_response_ack":break;case"goal_created":case"goal_update":case"goal_task_update":try{const c=typeof e=="string"?JSON.parse(e):e||{},u=c.title||c.id||"Goal";Z.info(`Goal event (${s}): ${u}`)}catch{}break}}function Xr(s,e){var t;try{const n=typeof s=="string"?JSON.parse(s):s||{},r=Te.getState(),{approvalId:o,toolName:a,askPayload:i,timeoutMs:d,timeoutAction:c}=n,u=De.getState();if(r.isSessionAllowed(a)||r.autoMode||(t=u==null?void 0:u.yolo)!=null&&t.enabled){L.send({type:"hook_allow",data:JSON.stringify({approvalId:o})});return}U.getState().addMessage(e,{id:`hook-approval-${o||Date.now()}`,type:"assistant",content:"",timestamp:Date.now(),hookApproval:{approvalId:o||"",toolName:a||"unknown",askPayload:i||"",status:"pending",timestamp:Date.now(),timeoutMs:typeof d=="number"?d:void 0,timeoutAction:c==="allow"||c==="deny"?c:void 0}}),r.addApproval({approvalId:o||"",toolName:a||"unknown",askPayload:i||"",timestamp:Date.now(),timeoutMs:typeof d=="number"?d:void 0,timeoutAction:c==="allow"||c==="deny"?c:void 0}),window.dispatchEvent(new CustomEvent("hook-approval-required"))}catch{}}function Zr(s,e){try{const t=typeof s=="string"?JSON.parse(s):s||{},n=K.getState(),r=ie.getState(),{action:o,taskId:a,data:i}=t;if(o==="created"&&i){const d={id:a||`task-${Date.now()}`,title:i.title||"",completed:i.status==="COMPLETED",createdAt:Date.parse(i.createdAt)||Date.now(),backendId:a,backendStatus:i.status,description:i.description},c=n.tasksBySession[e]||[];n.setSessionTasks(e,[...c,d]),r.upsertTask(e,{id:d.id,title:d.title,description:d.description,status:Fe(i.status),source:"task",progress:i.progress!=null?Number(i.progress):void 0,raw:t})}else if((o==="updated"||o==="status_changed")&&i)n.updateTaskPlanStatus(e,a,{backendStatus:i.status,progress:i.progress}),r.upsertTask(e,{id:a,title:i.title||a,description:i.description,status:Fe(i.status),source:"task",progress:i.progress!=null?Number(i.progress):void 0,raw:t});else if(o==="deleted"){const d=n.tasksBySession[e]||[];n.setSessionTasks(e,d.filter(c=>c.id!==a&&c.backendId!==a))}r.recordEvent(e,{type:"task_update",source:"task",title:(i==null?void 0:i.title)||a||"Task update",message:o,status:i==null?void 0:i.status,taskId:a,data:t})}catch{}}function ea(s,e,t,n){try{const r=JSON.parse(e||"{}"),o=n(t,s,r);if(o){const a=U.getState();switch(s){case"step_start":a.updateStep(t,o.id,{title:r.step||o.title,description:r.description||o.description,status:r.status==="start"?"running":r.status||"running"});break;case"step_thinking":a.updateStep(t,o.id,{thought:r.thought});break;case"step_action":a.updateStep(t,o.id,{action:r.action});break;case"step_complete":a.updateStep(t,o.id,{status:r.status??"success",result:r.result});break}}}catch(r){Z.warn("Failed to parse "+s,String(r))}}function ta(s,e){var t,n;try{const r=typeof s=="string"?JSON.parse(s):s||{};let o=[];if(Array.isArray(r)?o=r:(t=r.tasks)!=null&&t.length?o=r.tasks:(n=r.items)!=null&&n.length&&(o=r.items),o.length>0&&e){const a=K.getState(),i=ie.getState();o.forEach(d=>{const c=d.content||d.title||d.name||"";if(c.trim()){if(!a.getSessionTasks(e).find(f=>f.title===c.trim())&&(a.addSessionTask(e,c.trim()),d.completed||d.status==="completed"||d.status==="COMPLETED"||d.status==="done"||d.activeForm==="completed")){const b=a.getSessionTasks(e).find(w=>w.title===c.trim());b&&a.toggleSessionTask(e,b.id)}const h=String(d.id||d.taskId||c.trim()),m=d.completed||d.status==="completed"||d.status==="COMPLETED"||d.status==="done"||d.activeForm==="completed";i.upsertTask(e,{id:h,title:c.trim(),description:d.description,status:Fe(d.status,m),source:"todo",raw:d})}}),i.recordEvent(e,{type:"todo_update",source:"todo",title:"Todo list updated",message:`${o.length} items`,status:"updated",data:r})}}catch{}}function sa(s,e){try{const t=typeof s=="string"?JSON.parse(s):s||{},n=t.questionId||"",r=t.question||"";if(!n||!r)return;window.__pendingQuestion={questionId:n,question:r,header:t.header||void 0,options:Array.isArray(t.options)?t.options:void 0,multiSelect:t.multiSelect===!0},window.dispatchEvent(new CustomEvent("ask-question-required"))}catch{}}function na(s,e){try{const t=typeof s=="string"?JSON.parse(s):s||{},n=t.title||t.name||"";if(n&&e){const o=K.getState().getSessionTasks(e).find(a=>a.title===n&&!a.completed);o&&K.getState().toggleSessionTask(e,o.id),ie.getState().upsertTask(e,{id:(o==null?void 0:o.id)||n,title:n,status:"completed",source:"todo"}),ie.getState().recordEvent(e,{type:"todo_item_done",source:"todo",title:n,status:"completed",taskId:(o==null?void 0:o.id)||n,data:t})}}catch{}}function Qe(s){if(!s)return null;try{return JSON.parse(s)}catch{return null}}const Xe=ue((s,e)=>({items:[],pendingCount:0,audit:[],auditTotal:0,automations:[],runsByAutomation:{},loading:!1,error:null,fetchInbox:async()=>{const t=await z.inbox.list({state:"all"});if(t.success&&t.data){const n=t.data.items;s({items:n,pendingCount:n.filter(r=>r.state==="pending").length})}else s({error:t.error||"加载 Inbox 失败"})},resolveInbox:async(t,n)=>{const r=await z.inbox.resolve(t,n);return r.success?(await e().fetchInbox(),!0):(s({error:r.error||"解决失败"}),!1)},fetchAudit:async t=>{const n=await z.audit.query(t||{pageSize:100});n.success&&n.data?s({audit:n.data.records,auditTotal:n.data.total}):s({error:n.error||"加载审计失败"})},fetchAutomations:async()=>{const t=await z.automations.list();t.success&&t.data?s({automations:t.data}):s({error:t.error||"加载自动化失败"})},createAutomation:async t=>{const n=await z.automations.create(t);return n.success&&n.data?(await e().fetchAutomations(),n.data):(s({error:n.error||"创建自动化失败"}),null)},deleteAutomation:async t=>{const n=await z.automations.remove(t);return n.success?(await e().fetchAutomations(),!0):(s({error:n.error||"删除失败"}),!1)},toggleAutomation:async(t,n)=>{const r=await z.automations.toggle(t,n);r.success?await e().fetchAutomations():s({error:r.error||"切换失败"})},runAutomation:async t=>{const n=await z.automations.run(t);n.success?(await e().fetchRuns(t),await e().fetchAutomations()):s({error:n.error||"触发失败"})},fetchRuns:async t=>{const n=await z.automations.runs(t);n.success&&n.data&&s(r=>({runsByAutomation:{...r.runsByAutomation,[t]:n.data}}))},onInboxPending:t=>{s(n=>({items:[t,...n.items.filter(r=>r.id!==t.id)],pendingCount:n.pendingCount+1}))},onInboxResolved:t=>{s(n=>{var r;return{items:n.items.map(o=>o.id===t.id?t:o),pendingCount:Math.max(0,n.pendingCount-(t.state==="resolved"&&((r=n.items.find(o=>o.id===t.id))==null?void 0:r.state)==="pending"?1:0))}})},onAuditRecord:t=>{s(n=>({audit:[t,...n.audit].slice(0,200)}))},onAutomationUpdate:t=>{s(n=>({automations:n.automations.some(o=>o.id===t.id)?n.automations.map(o=>o.id===t.id?t:o):[...n.automations,t]}))},onAutomationRun:t=>{s(n=>({runsByAutomation:{...n.runsByAutomation,[t.automationId]:[t,...n.runsByAutomation[t.automationId]||[]].slice(0,50)}}))}})),Ze={pending:s=>{const e=Qe(s);e&&Xe.getState().onInboxPending(e)},resolved:s=>{const e=Qe(s);e&&Xe.getState().onInboxResolved(e)},auditRecord:s=>{const e=Qe(s);e&&Xe.getState().onAuditRecord(e)},automationUpdate:s=>{const e=Qe(s);e!=null&&e.automation&&Xe.getState().onAutomationUpdate(e.automation)},automationRun:s=>{const e=Qe(s);e!=null&&e.run&&Xe.getState().onAutomationRun(e.run)}};function oa(s,e,t){let n={};if(e&&typeof e=="object")n=e;else try{n=JSON.parse(String(e||"{}"))}catch{}const r=String(n.jobId||`fjob-${Date.now()}`),o=n.stage||(s==="filejob_result"?"complete":s==="filejob_error"?"error":"uploaded"),a={jobId:r,stage:o,parseProgress:n.parseProgress,parsedFiles:n.parsedFiles,mapping:n.mapping,renderProgress:n.renderProgress,currentRow:n.currentRow,totalRows:n.totalRows,result:n.result,error:n.error,errorDetail:n.errorDetail};n.attachments&&(a.attachments=n.attachments),U.getState().setMessageFileJob(t,a)}const ra=ue((s,e)=>({channels:[],loading:!1,error:null,formOpen:!1,editing:null,qrOpen:!1,qrChannel:null,selectedType:null,load:async()=>{s({loading:!0,error:null});const t=await z.channels.list(),n=t.success&&Array.isArray(t.data)?t.data:[];if(s({loading:!1,channels:n,...t.success&&!Array.isArray(t.data)?{error:"服务端返回的频道数据格式异常"}:t.success?{}:{error:t.error??"Failed to load"}}),!e().selectedType&&n.length>0){const o=n[0].type;s({selectedType:o})}},create:async t=>{const n=await z.channels.create(t);return n.success?(await e().load(),s({formOpen:!1,editing:null}),!0):(s({error:n.error??"Create failed"}),!1)},update:async(t,n)=>{const r=await z.channels.update(t,n);return r.success?(await e().load(),s({formOpen:!1,editing:null}),!0):(s({error:r.error??"Update failed"}),!1)},remove:async t=>{const n=await z.channels.delete(t);return n.success?(s(r=>({channels:r.channels.filter(o=>o.id!==t)})),!0):(s({error:n.error??"Delete failed"}),!1)},toggle:async(t,n)=>(await z.channels.toggle(t,n)).success?(s(o=>({channels:o.channels.map(a=>a.id===t?{...a,enabled:n}:a)})),!0):(await e().load(),!1),openForm:t=>s({formOpen:!0,editing:t??null,error:null}),closeForm:()=>s({formOpen:!1,editing:null,error:null}),openQr:t=>s({qrOpen:!0,qrChannel:t??null}),closeQr:()=>{s({qrOpen:!1,qrChannel:null}),e().load()},clearError:()=>s({error:null}),selectType:t=>s({selectedType:t,error:null}),updateChannelStatus:t=>{s(n=>({channels:n.channels.map(r=>r.id===t.channelId?{...r,connected:t.connected,_state:t.state}:r)}))}})),Xt=(s,e=[])=>{if(!s)return e;if(Array.isArray(s))return s.forEach(r=>Xt(r,e)),e;if(typeof s!="object")return e;const t=s,n=t.content;return typeof n=="string"&&n.trim()&&e.push(n.trim()),Object.entries(t).forEach(([r,o])=>{r!=="content"&&r!=="structuredOutput"&&Xt(o,e)}),e},aa=s=>{const e=Xt(s);return e[e.length-1]||""};function ia({activeTab:s,setLogs:e,setUnreadLogs:t}){const n=U,r=g.useCallback(c=>{if(!c)return{};if(typeof c=="object")return c;if(typeof c!="string")return{};try{return JSON.parse(c)}catch{return{}}},[]),o=g.useCallback((c,u,p)=>{const h=r(u),m=h.runId||"";if(!m)return;const f=ie.getState(),y=U.getState();if(c==="workflow_error"){f.fail(p,m,h.error||"Workflow failed"),(y.isGenerating(p)||y.isPaused(p))&&y.endGeneration(p,h.error||"Workflow failed");return}const b=c==="workflow_finished"?h.status||"COMPLETED":c==="workflow_started"?h.status||"RUNNING":c==="workflow_paused"?h.status||"PAUSED":c==="workflow_resumed"?h.status||"RESUMING":c==="workflow_cancelled"?h.status||"CANCELLED":c==="workflow_recovered"?h.status||"RUNNING":h.status||void 0,w=h.type||c,S=h.data&&typeof h.data=="object"?h.data:{},T=String(h.kind||S.kind||""),_=h.nodeId||h.node_id||S.nodeId||S.node_id,k=h.role||h.agentRole||h.agent_role||S.role||S.agentRole||S.agent_role,P=h.phase||h.phaseId||S.phase||S.phaseId,A=h.effectId||S.effectId||_,$=h.toolName||h.tool_name||S.toolName||S.tool_name,M=h.error||S.error,F=["effect.scheduled","effect.completed","effect.failed"].includes(w)&&_&&T!=="tool",ee=["effect.scheduled","effect.completed","effect.failed"].includes(w)&&T==="tool"&&($||_),N=_?f.getAgentsForSession(p).find(x=>x.id===String(_)):void 0;if(f.upsert(p,{runId:m,status:b,completedPhases:Number(h.completedPhases||0),totalPhases:Number(h.totalPhases||0),completedEffects:Number(h.completedEffects||0),totalEffects:Number(h.totalEffects||0),tokensUsed:Number(h.tokensUsed||0),tokensRemaining:Number(h.tokensRemaining||0),lastEventType:w,agentNode:F?{nodeId:String(_),role:String(k||(N==null?void 0:N.role)||(N==null?void 0:N.name)||"agent"),phase:P?String(P):N==null?void 0:N.phase,status:w==="effect.failed"?"failed":w==="effect.completed"?"completed":"scheduled",tokens:h.tokensUsed!=null?Number(h.tokensUsed):S.tokens!=null&&typeof S.tokens=="number"?Number(S.tokens):void 0,error:M?String(M):void 0,updatedAt:Date.now()}:void 0}),ee){const x=w==="effect.failed"?"failed":w==="effect.completed"?"completed":"running",j=String(A||`${m}-${$||_}`);f.upsertTask(p,{id:j,title:String($||_),description:_?String(_):void 0,status:x,source:"workflow",runId:m,result:S.artifactRef?String(S.artifactRef):void 0,error:M?String(M):void 0,raw:h}),f.recordEvent(p,{type:w,source:"workflow",title:String($||_),status:x,runId:m,taskId:j,message:M?String(M):void 0,data:h})}if(c==="workflow_started")y.startGeneration(p);else if(c==="workflow_finished"){const x=aa(h.output);if(x){const j=y.getMessages(p),D=j[j.length-1];(D==null?void 0:D.type)==="assistant"?y.appendToLastMessage(p,x):y.addMessage(p,{id:crypto.randomUUID(),type:"assistant",content:x,timestamp:Date.now()})}y.endGeneration(p)}else b==="PAUSED"?y.pauseGeneration(p):(b==="RUNNING"||b==="RESUMING")&&y.resumeGeneration(p)},[r]),a=g.useCallback(c=>{var m;const p=n.getState().messagesBySession[c]||[],h=p[p.length-1];return(m=h==null?void 0:h.steps)==null?void 0:m[h.steps.length-1]},[n]),i=g.useCallback((c,u,p)=>{const h=a(c),m=u==="step_complete",f=h&&(h.status==="success"||h.status==="error");if(!h||f&&!m){const y=(p==null?void 0:p.step)||u.replace("step_","").replace("_"," ");return n.getState().addStep(c,{id:`step-${Date.now()}`,title:y,description:(p==null?void 0:p.description)||"Executing...",status:"running",timestamp:Date.now()}),a(c)}return h},[a,n]),d=g.useCallback(c=>{const u=c.type,p=c.data;if(u==="model_name"){Ks(u,p,c.sessionId||"",{activeTab:s,setLogs:e,setUnreadLogs:t},c);return}if(u==="models_updated"||u==="models.updated"){window.dispatchEvent(new CustomEvent("models-updated"));return}const h=K.getState().activeSessionId,m=c.sessionId||h;if(m){if(u==="hook_ask"){Xr(p,m);return}if(u==="ask_user_question"){sa(p);return}if(u==="question_answer_ack"){window.dispatchEvent(new CustomEvent("ask-question-dismiss"));return}if(u==="task_update"){Zr(p,m);return}if(u==="task_output"){try{n.getState().appendToLastMessage(m,String(p||""))}catch{}return}if(u==="task_finished"||u==="task_error"){u==="task_error"&&Z.error("Task error",String(p));return}if(u==="filejob_start"||u==="filejob_progress"||u==="filejob_result"||u==="filejob_error"){oa(u,p,m);return}if(u.startsWith("step_")){ea(u,p,m,i);return}if(u.startsWith("plan_")){try{Mt(u,p,m)}catch(f){Z.error(`Failed to handle ${u}`,String(f))}return}if(u.startsWith("goal_")){try{Mt(u,p,m)}catch(f){Z.error(`Failed to handle ${u}`,String(f))}return}if(u==="step_prompt"){try{Mt(u,p,m)}catch(f){Z.error(`Failed to handle ${u}`,String(f))}return}if(u==="todo_update"){ta(p,m);return}if(u==="todo_item_done"){na(p,m);return}if(u!=="todo_progress"){if(u==="inbox.pending"){Ze.pending(p);return}if(u==="inbox.resolved"){Ze.resolved(p);return}if(u==="audit.record"){Ze.auditRecord(p);return}if(u==="automation.update"){Ze.automationUpdate(p);return}if(u==="automation.run"){Ze.automationRun(p);return}if(u!=="tool.approval_required"){if(["workflow_started","workflow_event","workflow_progress","workflow_finished","workflow_error","workflow_checkpoint","workflow_node_start","workflow_node_complete","workflow_paused","workflow_resumed","workflow_cancelled","workflow_handoff"].includes(u)){o(u,p,m);return}if(["start","content","thinking","tool_call","tool_result","complete","generation_paused","generation_resumed","error","context_compressed","compaction_progress","tombstone","context_analysis","threshold_warning","blocking_limit","tool_retry","model_fallback","context_blocked"].includes(u)){Yr(u,p,m);return}if(u==="channel_status"){try{const f=JSON.parse(p||"{}");ra.getState().updateChannelStatus(f)}catch{}return}if(!(u==="channel_message"||u==="channel_error")&&["token_update","auth_required","auth_success","auth_failed","log","commands_list","ping","workspace_changed","degradation_update","doctor_result","session_created","session_resumed","mcp_update","hook_response_ack","goal_created","goal_update","goal_task_update"].includes(u)){Ks(u,p,m,{activeTab:s,setLogs:e,setUnreadLogs:t});return}}}}},[s,i,o,e,t]);g.useEffect(()=>{L.connect();const c=L.onMessage(d),u=L.onClose(()=>{const p=U.getState();for(const h of p.generatingSessions)p.endGeneration(h,"WebSocket disconnected")});return()=>{c(),u()}},[d])}const rt={linear:{id:"linear",nameKey:"settings.themePresetLinear",descriptionKey:"settings.themePresetLinearDesc",dark:{bg:"#0a0a0c",surface:"#121215",border:"#26262b",text:"#e4e4e7",muted:"#8e8e96",accentBlue:"#7c83f8",accentGreen:"#4ade80",accentRed:"#f87171",accentYellow:"#fbbf24",accentPurple:"#c084fc"},light:{bg:"#ffffff",surface:"#f6f6f7",border:"#e4e4e8",text:"#18181b",muted:"#71717a",accentBlue:"#5e6ad2",accentGreen:"#16a34a",accentRed:"#dc2626",accentYellow:"#b45309",accentPurple:"#7c3aed"}},mimo:{id:"mimo",nameKey:"settings.themePresetMimo",descriptionKey:"settings.themePresetMimoDesc",dark:{bg:"#fcfaf8",surface:"#f6f1ea",border:"#e7dfd5",text:"#26251e",muted:"#5a574f",accentBlue:"#26251e",accentGreen:"#1f7a4d",accentRed:"#b84f42",accentYellow:"#a16b2d",accentPurple:"#7a5c8f"},light:{bg:"#ffffff",surface:"#f8f4ef",border:"#e2d8cd",text:"#24221c",muted:"#605b52",accentBlue:"#26251e",accentGreen:"#1f7a4d",accentRed:"#b84f42",accentYellow:"#a16b2d",accentPurple:"#7a5c8f"}},github:{id:"github",nameKey:"settings.themePresetGithub",descriptionKey:"settings.themePresetGithubDesc",dark:{bg:"#0d1117",surface:"#161b22",border:"#30363d",text:"#c9d1d9",muted:"#8b949e",accentBlue:"#58a6ff",accentGreen:"#238636",accentRed:"#f85149",accentYellow:"#d29922",accentPurple:"#a855f7"},light:{bg:"#ffffff",surface:"#f6f8fa",border:"#d0d7de",text:"#24292f",muted:"#57606a",accentBlue:"#0969da",accentGreen:"#1a7f37",accentRed:"#cf222e",accentYellow:"#9a6700",accentPurple:"#8250df"}},cherry:{id:"cherry",nameKey:"settings.themePresetCherry",descriptionKey:"settings.themePresetCherryDesc",dark:{bg:"#0f1419",surface:"#1a2332",border:"#2d3f50",text:"#e1e8ed",muted:"#8899aa",accentBlue:"#01a9ff",accentGreen:"#00c853",accentRed:"#ff5252",accentYellow:"#ffab00",accentPurple:"#7c4dff"},light:{bg:"#f5f9ff",surface:"#ffffff",border:"#cce0ff",text:"#1a2332",muted:"#5c6f87",accentBlue:"#0160ff",accentGreen:"#00a844",accentRed:"#e53935",accentYellow:"#f9a825",accentPurple:"#651fff"}},ocean:{id:"ocean",nameKey:"settings.themePresetOcean",descriptionKey:"settings.themePresetOceanDesc",dark:{bg:"#0b1e2e",surface:"#122b3d",border:"#1e4057",text:"#d4e6f5",muted:"#7a9bb5",accentBlue:"#00bcd4",accentGreen:"#26a69a",accentRed:"#ef5350",accentYellow:"#ffca28",accentPurple:"#ab47bc"},light:{bg:"#edf7fc",surface:"#ffffff",border:"#b3d9e8",text:"#0b1e2e",muted:"#4f7a94",accentBlue:"#00838f",accentGreen:"#00897b",accentRed:"#d32f2f",accentYellow:"#f57f17",accentPurple:"#8e24aa"}},mint:{id:"mint",nameKey:"settings.themePresetMint",descriptionKey:"settings.themePresetMintDesc",dark:{bg:"#0d1f1c",surface:"#162d28",border:"#264b41",text:"#d1f0e8",muted:"#7dafa3",accentBlue:"#26c6da",accentGreen:"#66bb6a",accentRed:"#ef5350",accentYellow:"#ffd54f",accentPurple:"#ad8aff"},light:{bg:"#edf7f4",surface:"#ffffff",border:"#b8d9cf",text:"#0d1f1c",muted:"#4a7f72",accentBlue:"#0097a7",accentGreen:"#388e3c",accentRed:"#d32f2f",accentYellow:"#f9a825",accentPurple:"#7c4dff"}},lavender:{id:"lavender",nameKey:"settings.themePresetLavender",descriptionKey:"settings.themePresetLavenderDesc",dark:{bg:"#1a1428",surface:"#261f38",border:"#3c3354",text:"#e2daf2",muted:"#9387b5",accentBlue:"#86bef5",accentGreen:"#81c784",accentRed:"#ef9a9a",accentYellow:"#ffe082",accentPurple:"#ce93d8"},light:{bg:"#f5f0ff",surface:"#ffffff",border:"#d4c8e8",text:"#1a1428",muted:"#6c5b8a",accentBlue:"#1565c0",accentGreen:"#2e7d32",accentRed:"#c62828",accentYellow:"#f57f17",accentPurple:"#7b1fa2"}},midnight:{id:"midnight",nameKey:"settings.themePresetMidnight",descriptionKey:"settings.themePresetMidnightDesc",dark:{bg:"#0a0e1a",surface:"#111726",border:"#1e2740",text:"#c8d2e8",muted:"#6a7596",accentBlue:"#4fc3f7",accentGreen:"#4caf50",accentRed:"#e57373",accentYellow:"#ffd54f",accentPurple:"#b39ddb"},light:{bg:"#eef1f7",surface:"#ffffff",border:"#c0c9dc",text:"#0a0e1a",muted:"#4f5a78",accentBlue:"#0288d1",accentGreen:"#2e7d32",accentRed:"#d32f2f",accentYellow:"#f57f17",accentPurple:"#5e35b1"}},sunset:{id:"sunset",nameKey:"settings.themePresetSunset",descriptionKey:"settings.themePresetSunsetDesc",dark:{bg:"#1e1410",surface:"#2a1d16",border:"#443124",text:"#f0dfcf",muted:"#b8957a",accentBlue:"#5fa5e8",accentGreen:"#81c784",accentRed:"#ff7043",accentYellow:"#ffb74d",accentPurple:"#e0a0e0"},light:{bg:"#fff6f0",surface:"#ffffff",border:"#f0d5c0",text:"#2a1d16",muted:"#8a6e5a",accentBlue:"#1976d2",accentGreen:"#388e3c",accentRed:"#e64a19",accentYellow:"#ef6c00",accentPurple:"#8e24aa"}},forest:{id:"forest",nameKey:"settings.themePresetForest",descriptionKey:"settings.themePresetForestDesc",dark:{bg:"#0e1a12",surface:"#172a1d",border:"#2a4733",text:"#d1e8d6",muted:"#7da684",accentBlue:"#5bb8e8",accentGreen:"#66bb6a",accentRed:"#ef9a9a",accentYellow:"#e6c35c",accentPurple:"#ae8ad9"},light:{bg:"#f0f7f0",surface:"#ffffff",border:"#b8d9be",text:"#0e1a12",muted:"#477a50",accentBlue:"#1565c0",accentGreen:"#2e7d32",accentRed:"#c62828",accentYellow:"#827717",accentPurple:"#6a1b9a"}},candy:{id:"candy",nameKey:"settings.themePresetCandy",descriptionKey:"settings.themePresetCandyDesc",dark:{bg:"#16101a",surface:"#22182a",border:"#3d284a",text:"#f0def5",muted:"#b28dc2",accentBlue:"#5fc3f5",accentGreen:"#81e080",accentRed:"#ff6b6b",accentYellow:"#ffd93d",accentPurple:"#e066ff"},light:{bg:"#faf0ff",surface:"#ffffff",border:"#e0cce8",text:"#1a0a24",muted:"#7a5c8a",accentBlue:"#1976d2",accentGreen:"#388e3c",accentRed:"#d32f2f",accentYellow:"#f9a825",accentPurple:"#8e24aa"}},nord:{id:"nord",nameKey:"settings.themePresetNord",descriptionKey:"settings.themePresetNordDesc",dark:{bg:"#2e3440",surface:"#3b4252",border:"#4c566a",text:"#eceff4",muted:"#81a1c1",accentBlue:"#88c0d0",accentGreen:"#a3be8c",accentRed:"#bf616a",accentYellow:"#ebcb8b",accentPurple:"#b48ead"},light:{bg:"#f5f7fa",surface:"#ffffff",border:"#d8dee9",text:"#2e3440",muted:"#5e6d85",accentBlue:"#5e81ac",accentGreen:"#6f9e6f",accentRed:"#bf616a",accentYellow:"#b48d56",accentPurple:"#8f6f9e"}}},Zt="linear";function Gs(s,e,t){const n=rt[s]||rt[Zt];if(!n)return{bg:"#fcfaf8",surface:"#f6f1ea",border:"#e7dfd5",text:"#26251e",muted:"#5a574f",accentBlue:"#26251e",accentGreen:"#1f7a4d",accentRed:"#b84f42",accentYellow:"#a16b2d",accentPurple:"#7a5c8f"};const r={...e==="dark"?n.dark:n.light};return t&&Object.assign(r,t),r}const xe=s=>{const e=parseInt(s.slice(1,3),16),t=parseInt(s.slice(3,5),16),n=parseInt(s.slice(5,7),16);return`${e} ${t} ${n}`},la=(s,e,t)=>{const n=[parseInt(s.slice(1,3),16),parseInt(s.slice(3,5),16),parseInt(s.slice(5,7),16)],r=[parseInt(e.slice(1,3),16),parseInt(e.slice(3,5),16),parseInt(e.slice(5,7),16)];return n.map((o,a)=>Math.round(o+((r[a]??o)-o)*t)).join(" ")};function qs(s,e,t,n,r){t.classList.toggle("dark",s==="dark"),t.classList.toggle("light",s==="light"),t.style.setProperty("--color-bg",xe(e.bg)),t.style.setProperty("--color-surface",xe(e.surface)),t.style.setProperty("--color-border",xe(e.border)),t.style.setProperty("--color-text",xe(e.text)),t.style.setProperty("--color-muted",xe(e.muted)),t.style.setProperty("--color-accent-blue",xe(e.accentBlue)),t.style.setProperty("--color-accent-green",xe(e.accentGreen)),t.style.setProperty("--color-accent-red",xe(e.accentRed)),t.style.setProperty("--color-accent-yellow",xe(e.accentYellow)),t.style.setProperty("--color-accent-purple",xe(e.accentPurple)),t.style.setProperty("--color-hover",la(e.surface,e.text,.06)),n&&n.setAttribute("content",e.bg),r&&r.setAttribute("content",s)}function ca({theme:s,themePresetId:e,customTheme:t,customThemeEnabled:n}){g.useEffect(()=>{const r=document.documentElement,o=document.querySelector('meta[name="theme-color"]'),a=document.querySelector('meta[name="color-scheme"]'),i=s==="dark"?"dark":s==="light"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",d=n?t:void 0,c=Gs(e||Zt,i,d);if(qs(i,c,r,o,a),s==="auto"){const u=window.matchMedia("(prefers-color-scheme: dark)"),p=()=>{const h=u.matches?"dark":"light",m=Gs(e||Zt,h,d);qs(h,m,r,o,a)};return u.addEventListener("change",p),()=>u.removeEventListener("change",p)}},[s,e,t,n])}class Vs extends g.Component{constructor(t){super(t);X(this,"handleRetry",()=>{this.setState({hasError:!1,error:null})});this.state={hasError:!1,error:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("[ErrorBoundary] Caught error:",t,n)}render(){var t;return this.state.hasError?this.props.fallback?this.props.fallback:l.jsx("div",{className:"flex items-center justify-center h-full w-full bg-dark-bg",children:l.jsxs("div",{className:"max-w-md p-8 text-center",children:[l.jsx("div",{className:"flex justify-center mb-4",children:l.jsx("div",{className:"w-16 h-16 rounded-full bg-accent-red/10 flex items-center justify-center",children:l.jsx(ss,{size:32,className:"text-accent-red"})})}),l.jsx("h2",{className:"text-xl font-semibold text-dark-text mb-2",children:"页面出现错误"}),l.jsx("p",{className:"text-sm text-dark-muted mb-6",children:((t=this.state.error)==null?void 0:t.message)||"发生了未知错误,请尝试刷新页面"}),l.jsxs("div",{className:"flex items-center justify-center gap-3",children:[l.jsxs("button",{onClick:this.handleRetry,className:"flex items-center gap-2 px-4 py-2 bg-accent-blue text-white rounded-lg hover:opacity-90 transition-opacity",children:[l.jsx(an,{size:16}),"重试"]}),l.jsx("button",{onClick:()=>window.location.reload(),className:"px-4 py-2 bg-dark-hover text-dark-text rounded-lg hover:bg-dark-border transition-colors",children:"刷新页面"})]})]})}):this.props.children}}const da=g.memo(function(e){const{t}=ve(),n=V(x=>x.currentUsage),r=V(x=>x.maxContextTokens),o=V(x=>x.model),a=V(x=>x.tokenRate),i=V(x=>x.compactingUntil),d=V(x=>x.lastCompactInfo),c=V(x=>x.degradation),u=V(x=>x.compactionProgress),p=K(x=>x.activeSessionId),h=U(x=>p?x.isGenerating(p):!1),m=ie(x=>p?x.bySession[p]:void 0),f=ie(x=>p?x.getRunningAgentCount(p):0),y=wt(x=>x.mode),b=Te(x=>x.autoMode),[w,S]=g.useState(0),T=g.useRef(0);g.useEffect(()=>{if(h&&!T.current&&(T.current=Date.now()),!h){T.current=0,S(0);return}const x=setInterval(()=>S(Math.floor((Date.now()-T.current)/1e3)),1e3);return()=>clearInterval(x)},[h]);const _=n.totalTokens,k=n.promptTokens,P=n.completionTokens,A=r>0?Math.min(100,Math.round(_/r*100)):0,$=br(a),M=y==="normal"?"act":y,F=gr[M],ee=ke(M),N=ee==="plan"?"border-accent-blue/30 text-accent-blue":ee==="goal"?"border-accent-purple/30 text-accent-purple":"border-accent-green/30 text-accent-green";return l.jsxs("div",{className:"h-9 border-t border-dark-border bg-dark-bg flex items-center px-3 gap-2 shrink-0 select-none text-xs overflow-hidden",children:[l.jsx("span",{className:"font-semibold text-dark-text whitespace-nowrap",children:"DeepSeekCode"}),l.jsx("span",{className:`px-2 py-0.5 rounded-full border whitespace-nowrap ${N}`,children:F.label}),b&&l.jsx("span",{className:"px-2 py-0.5 rounded-full border border-accent-yellow/30 text-accent-yellow whitespace-nowrap",children:"Auto"}),l.jsx("span",{className:"text-dark-muted truncate max-w-[14rem]",children:o||t("common.connecting")}),l.jsxs("span",{className:"hidden md:inline-flex items-center gap-1 text-dark-muted whitespace-nowrap",children:[l.jsx("span",{className:"text-dark-text",children:qe(k)}),l.jsx("span",{className:"text-dark-muted/60",children:"+"}),l.jsx("span",{className:"text-accent-green",children:qe(P)}),l.jsx("span",{className:"text-dark-muted/60",children:"="}),l.jsx("span",{className:"text-dark-text",children:qe(_)}),l.jsx("span",{className:"text-dark-muted/60",children:"/"}),l.jsx("span",{children:qe(r)})]}),l.jsxs("span",{className:"inline-flex items-center gap-1 shrink-0",children:[l.jsx("span",{className:"w-16 lg:w-20 h-1.5 bg-dark-border/70 rounded-full overflow-hidden inline-flex",children:l.jsx("span",{className:`h-full transition-all rounded-full ${A>=90?"bg-accent-red":A>=70?"bg-accent-yellow":"bg-dark-text/70"}`,style:{width:`${A}%`}})}),l.jsxs("span",{className:A>=90?"text-accent-red font-bold":A>=70?"text-accent-yellow":"",children:[A,"%"]})]}),h&&l.jsxs(l.Fragment,{children:[l.jsxs("span",{className:"text-dark-text flex items-center gap-1 whitespace-nowrap",children:[l.jsx(it,{size:12,className:"animate-spin"}),xr(w)]}),$&&l.jsx("span",{className:"text-accent-purple whitespace-nowrap",children:$})]}),f>0&&l.jsxs("span",{className:"text-dark-text whitespace-nowrap",children:[f," agent",f>1?"s":""]}),l.jsx("div",{className:"flex-1"}),m&&l.jsxs("span",{className:"hidden xl:flex items-center gap-2 text-[11px] text-dark-text whitespace-nowrap",children:[l.jsx("span",{className:"text-dark-muted",children:"wf"}),l.jsx("span",{className:"font-mono",children:m.status}),l.jsxs("span",{children:[m.completedPhases,"/",m.totalPhases||0]}),l.jsx("span",{className:"text-dark-muted",children:qe(m.tokensUsed)})]}),u&&l.jsxs("span",{className:"hidden lg:flex items-center gap-2 text-[11px] text-dark-text whitespace-nowrap",children:[l.jsx("span",{children:"compact"}),l.jsxs("span",{children:[u.percent,"%"]}),l.jsx("span",{className:"w-20 h-1.5 bg-dark-border/70 rounded-full overflow-hidden",children:l.jsx("span",{className:"h-full bg-dark-text/70 rounded-full block",style:{width:`${u.percent}%`}})})]}),!u&&Date.now()<i&&d&&l.jsxs("span",{className:"hidden lg:inline text-dark-muted text-[11px] whitespace-nowrap",children:[d.originalCount," ","->"," ",d.compressedCount]}),(c==null?void 0:c.active)&&l.jsxs("span",{className:"text-accent-yellow text-[11px] whitespace-nowrap",children:[c.label," ",c.retryCount>0?`${c.retryCount}/${c.maxRetries}`:""]})]})}),ge=ue()((s,e)=>({status:null,branches:null,loading:!1,refreshing:!1,lastAction:null,busy:!1,refreshStatus:async()=>{const t=await z.git.status();return t.success&&t.data?(s({status:t.data}),t.data):(s({status:{available:!1,error:t.error||"Failed to load git status"}}),null)},refreshBranches:async()=>{const t=await z.git.branches();t.success&&t.data?s({branches:t.data}):s({branches:null})},refreshAll:async()=>{if(!e().refreshing){s({refreshing:!0,loading:e().status===null});try{await e().refreshStatus(),await e().refreshBranches()}finally{s({refreshing:!1,loading:!1})}}},commit:async t=>{s({busy:!0});const n=await z.git.commit({message:t});return s({busy:!1,lastAction:n.success&&n.data?n.data:{ok:!1,error:n.error||"Commit failed"}}),e().refreshStatus(),e().lastAction},push:async()=>{s({busy:!0});const t=await z.git.push();return s({busy:!1,lastAction:t.success&&t.data?t.data:{ok:!1,error:t.error||"Push failed"}}),e().refreshStatus(),e().lastAction},checkout:async t=>{s({busy:!0});const n=await z.git.checkout(t);return s({busy:!1,lastAction:n.success&&n.data?n.data:{ok:!1,error:n.error||"Checkout failed"}}),e().refreshAll(),e().lastAction}}));function bn(s){var e,t,n="";if(typeof s=="string"||typeof s=="number")n+=s;else if(typeof s=="object")if(Array.isArray(s)){var r=s.length;for(e=0;e<r;e++)s[e]&&(t=bn(s[e]))&&(n&&(n+=" "),n+=t)}else for(t in s)s[t]&&(n&&(n+=" "),n+=t);return n}function ua(){for(var s,e,t=0,n="",r=arguments.length;t<r;t++)(s=arguments[t])&&(e=bn(s))&&(n&&(n+=" "),n+=e);return n}function Ee(...s){return ua(s)}const Ot="dsc-git-commit-draft",pa=g.memo(function(){const{t:e}=ve(),t=ge(k=>k.status),n=ge(k=>k.branches),r=ge(k=>k.busy),o=ge(k=>k.lastAction),a=De(k=>k.workspaceDir),[i,d]=g.useState(!1),[c,u]=g.useState(""),[p,h]=g.useState(!1),[m,f]=g.useState(null),y=g.useRef(null);g.useEffect(()=>{ge.getState().refreshAll();const k=setInterval(()=>{document.visibilityState==="visible"&&ge.getState().refreshStatus()},3e4);return()=>clearInterval(k)},[]),g.useEffect(()=>{const k=localStorage.getItem(Ot);k&&u(k)},[]);const b=g.useCallback(async()=>{try{const{api:k}=await se(async()=>{const{api:A}=await Promise.resolve().then(()=>Br);return{api:A}},void 0),P=await k.git.prStatus();P.success&&f(P.data||{available:!1,message:""})}catch{}},[]);g.useEffect(()=>{b()},[b]),g.useEffect(()=>{if(!i)return;const k=P=>{y.current&&!y.current.contains(P.target)&&d(!1)};return document.addEventListener("mousedown",k),()=>document.removeEventListener("mousedown",k)},[i]);const w=g.useCallback(async()=>{const k=c.trim();if(!k){Q.warning(e("git.emptyCommitMsg"));return}const A=await ge.getState().commit(k);A.ok?(Q.success(e("git.commitSuccess")),h(!1),localStorage.removeItem(Ot),u("")):Q.error(A.error||e("git.commitFailed"))},[c,e]),S=g.useCallback(async()=>{const P=await ge.getState().push();P.ok?Q.success(e("git.pushSuccess")):Q.error(P.error||e("git.pushFailed"))},[e]),T=g.useCallback(async k=>{const A=await ge.getState().checkout(k);A.ok?Q.success(e("git.checkoutSuccess",{branch:k})):Q.error(A.error||e("git.checkoutFailed"))},[e]),_=t&&t.available===!1;return l.jsxs("div",{ref:y,className:"relative",children:[l.jsxs("button",{onClick:()=>d(k=>!k),className:Ee("flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-xs transition-colors",i?"bg-dark-hover text-dark-text":"text-dark-muted hover:bg-dark-hover hover:text-dark-text"),title:e("git.panelTitle"),"aria-expanded":i,children:[l.jsx(ks,{size:13,className:Ee(_?"text-dark-muted/50":"text-accent-blue")}),l.jsx("span",{className:"max-w-[120px] truncate font-mono",children:_?e("git.noRepo"):(t==null?void 0:t.branch)||"—"}),(t==null?void 0:t.dirty)&&l.jsxs("span",{className:"hidden sm:flex items-center gap-1 text-[10px] font-mono tabular-nums",children:[l.jsxs("span",{className:"text-accent-green",children:["+",t.totalAdded??0]}),l.jsxs("span",{className:"text-accent-red",children:["−",t.totalRemoved??0]})]}),l.jsx(pt,{size:11,className:Ee("transition-transform",i&&"rotate-180")})]}),i&&l.jsxs("div",{className:"absolute right-0 top-full z-40 mt-1.5 w-[380px] max-w-[90vw] rounded-xl border border-dark-border bg-dark-surface shadow-2xl overflow-hidden",children:[l.jsxs("div",{className:"flex items-center gap-2 px-3.5 py-2.5 border-b border-dark-border bg-dark-surface",children:[l.jsx(ks,{size:14,className:"text-accent-blue"}),l.jsx("span",{className:"text-xs font-medium text-dark-text",children:e("git.panelTitle")}),l.jsx("div",{className:"flex-1"}),l.jsx("button",{onClick:()=>void ge.getState().refreshAll(),className:"rounded p-1 text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors",title:e("git.refresh"),children:l.jsx(an,{size:12,className:Ee(ge.getState().refreshing&&"animate-spin")})})]}),_?l.jsxs("div",{className:"px-3.5 py-4 text-center",children:[l.jsx(Yn,{size:20,className:"mx-auto mb-2 text-dark-muted/50"}),l.jsx("div",{className:"text-xs text-dark-muted",children:e("git.notGitDesc")}),l.jsx("div",{className:"mt-1 text-[10px] font-mono text-dark-muted/60 break-all",children:a})]}):t?l.jsxs("div",{className:"p-3.5 space-y-3 max-h-[60vh] overflow-y-auto custom-scrollbar",children:[l.jsxs("div",{children:[l.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[l.jsx("span",{className:"text-[11px] text-dark-muted",children:e("git.changes")}),l.jsxs("span",{className:"text-[11px] font-mono tabular-nums",children:[l.jsxs("span",{className:"text-accent-green",children:["+",t.totalAdded??0]}),l.jsx("span",{className:"text-dark-muted/40",children:" / "}),l.jsxs("span",{className:"text-accent-red",children:["−",t.totalRemoved??0]})]})]}),l.jsxs("div",{className:"space-y-0.5 max-h-40 overflow-y-auto custom-scrollbar",children:[(t.changes||[]).slice(0,30).map(k=>l.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] font-mono",children:[l.jsx("span",{className:Ee("w-6 shrink-0 rounded px-1 text-center text-[9px]",k.status.includes("?")?"bg-accent-purple/15 text-accent-purple":k.status===k.status.toUpperCase()&&k.status.trim()?"bg-accent-green/15 text-accent-green":"bg-accent-yellow/15 text-accent-yellow"),children:k.status}),l.jsx("span",{className:"flex-1 truncate text-dark-text",children:k.path}),l.jsxs("span",{className:"shrink-0 text-[10px] tabular-nums text-dark-muted/60",children:[k.added>0&&l.jsxs("span",{className:"text-accent-green",children:["+",k.added]}),k.removed>0&&l.jsxs("span",{className:"text-accent-red",children:["−",k.removed]})]})]},k.path)),(t.changes||[]).length===0&&l.jsx("div",{className:"py-2 text-center text-[11px] text-dark-muted/60",children:e("git.clean")})]})]}),l.jsxs("div",{children:[l.jsx("div",{className:"text-[11px] text-dark-muted mb-1",children:e("git.branch")}),l.jsx("div",{className:"flex flex-wrap gap-1",children:((n==null?void 0:n.branches)||[t.branch||""]).slice(0,8).map(k=>l.jsx("button",{onClick:()=>k!==t.branch&&T(k),disabled:k===t.branch,className:Ee("rounded-md px-2 py-1 text-[11px] font-mono transition-colors",k===t.branch?"bg-accent-blue/10 text-accent-blue cursor-default":"bg-dark-bg border border-dark-border text-dark-muted hover:border-accent-blue/40 hover:text-dark-text"),children:k},k))}),(t.ahead??0)>0||(t.behind??0)>0?l.jsxs("div",{className:"mt-1 text-[10px] text-dark-muted/70",children:[(t.ahead??0)>0&&l.jsxs("span",{className:"text-accent-green",children:["↑ ",t.ahead," "]}),(t.behind??0)>0&&l.jsxs("span",{className:"text-accent-yellow",children:["↓ ",t.behind]}),e("git.upstream")]}):null]}),l.jsx("div",{children:p?l.jsxs("div",{className:"space-y-1.5",children:[l.jsx("textarea",{value:c,onChange:k=>{u(k.target.value),localStorage.setItem(Ot,k.target.value)},placeholder:e("git.commitPlaceholder"),rows:2,className:"w-full rounded-md border border-dark-border bg-dark-bg px-2.5 py-1.5 text-xs text-dark-text placeholder-dark-muted/50 resize-none focus:outline-none focus:border-accent-blue/50"}),l.jsxs("div",{className:"flex gap-1.5",children:[l.jsxs("button",{onClick:w,disabled:r||!c.trim(),className:"flex flex-1 items-center justify-center gap-1 rounded-md bg-accent-green/15 text-accent-green px-2.5 py-1.5 text-xs hover:bg-accent-green/25 transition-colors disabled:opacity-40",children:[r?l.jsx(it,{size:12,className:"animate-spin"}):l.jsx(Ss,{size:12}),e("git.commitConfirm")]}),l.jsx("button",{onClick:()=>h(!1),className:"rounded-md px-2.5 py-1.5 text-xs text-dark-muted hover:bg-dark-hover transition-colors",children:e("common.cancel")})]})]}):l.jsxs("div",{className:"flex gap-1.5",children:[l.jsxs("button",{onClick:()=>h(!0),disabled:r,className:"flex flex-1 items-center justify-center gap-1.5 rounded-md bg-accent-blue/10 text-accent-blue px-2.5 py-1.5 text-xs hover:bg-accent-blue/20 transition-colors disabled:opacity-50",children:[l.jsx(Ss,{size:13}),e("git.commit")]}),l.jsxs("button",{onClick:S,disabled:r||!t.dirty,className:"flex items-center justify-center gap-1.5 rounded-md bg-dark-bg border border-dark-border text-dark-muted px-2.5 py-1.5 text-xs hover:border-accent-green/40 hover:text-accent-green transition-colors disabled:opacity-40",children:[l.jsx(Qn,{size:13}),e("git.push")]})]})}),l.jsxs("div",{className:"flex items-center gap-1.5 rounded-md bg-dark-bg border border-dark-border px-2.5 py-2",children:[l.jsx(Ct,{size:13,className:"text-accent-purple shrink-0"}),l.jsx("span",{className:"text-[11px] text-dark-muted truncate",children:m?m.available?e("git.prReady"):m.message||e("git.prUnavailable"):e("git.prLoading")})]}),l.jsxs("div",{className:"rounded-md bg-dark-bg border border-dark-border px-2.5 py-2 space-y-0.5",children:[l.jsx("div",{className:"text-[10px] text-dark-muted",children:e("git.environment")}),l.jsx("div",{className:"text-[11px] font-mono text-dark-text/80 break-all",children:a||"—"}),t.lastCommit&&l.jsxs("div",{className:"text-[10px] font-mono text-dark-muted/60 truncate",children:[t.lastCommit.hash.slice(0,7)," ",t.lastCommit.subject]})]}),o&&l.jsxs("div",{className:Ee("flex items-center gap-1.5 text-[11px]",o.ok?"text-accent-green":"text-accent-red"),children:[o.ok?l.jsx(nn,{size:12}):l.jsx(Xn,{size:12}),l.jsx("span",{className:"truncate",children:o.ok?e("git.ok"):o.error||""})]})]}):l.jsx("div",{className:"px-3.5 py-4 text-center text-xs text-dark-muted",children:e("git.loading")})]})]})}),ha={info:ln,success:Zn,warning:ss,error:es},ma={info:"border-accent-blue/30 bg-accent-blue/10 text-accent-blue",success:"border-accent-green/30 bg-accent-green/10 text-accent-green",warning:"border-accent-yellow/30 bg-accent-yellow/10 text-accent-yellow",error:"border-accent-red/30 bg-accent-red/10 text-accent-red"},fa=g.memo(function(){const{toasts:e,dismissToast:t}=tt();return e.length===0?null:l.jsx("div",{className:"fixed bottom-20 right-4 z-[100] flex flex-col gap-2 max-w-sm",children:e.map(n=>{const r=ha[n.type];return l.jsxs("div",{className:`flex items-start gap-2 px-3 py-2.5 rounded-lg border shadow-lg animate-fade-in-up ${ma[n.type]}`,children:[l.jsx(r,{size:16,className:"shrink-0 mt-0.5"}),l.jsx("span",{className:"text-xs flex-1",children:n.message}),l.jsx("button",{onClick:()=>t(n.id),className:"shrink-0 p-0.5 rounded hover:bg-dark-hover/50 transition-colors",children:l.jsx($e,{size:12})})]},n.id)})})}),ga={critical:{icon:eo,border:"border-accent-red",bg:"bg-accent-red/10",text:"text-accent-red"},error:{icon:es,border:"border-accent-red/60",bg:"bg-accent-red/5",text:"text-accent-red"},warning:{icon:ss,border:"border-accent-yellow/60",bg:"bg-accent-yellow/5",text:"text-accent-yellow"},info:{icon:ln,border:"border-accent-blue/60",bg:"bg-accent-blue/5",text:"text-accent-blue"}},ya=g.memo(function(){const e=Ie(n=>n.errors.filter(r=>!r.dismissed)),t=Ie(n=>n.dismiss);return e.length===0?null:l.jsx("div",{className:"fixed bottom-4 right-4 z-[110] flex flex-col gap-2 max-w-sm",children:e.map(n=>{const r=ga[n.level],o=r.icon;return l.jsx(ba,{entry:n,icon:o,config:r,onDismiss:()=>t(n.id)},n.id)})})});function ba({entry:s,icon:e,config:t,onDismiss:n}){const[r,o]=g.useState(!1);return l.jsxs("div",{className:`flex flex-col px-3 py-2.5 rounded-lg border shadow-lg animate-fade-in-up ${t.bg} ${t.border}`,children:[l.jsxs("div",{className:"flex items-start gap-2",children:[l.jsx(e,{size:16,className:`shrink-0 mt-0.5 ${t.text}`}),l.jsx("span",{className:`text-xs flex-1 ${t.text}`,children:s.title}),l.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[s.detail&&l.jsx("button",{onClick:()=>o(!r),className:"p-0.5 rounded hover:bg-dark-hover/50 transition-colors",children:r?l.jsx(pt,{size:12}):l.jsx(on,{size:12})}),l.jsx("button",{onClick:n,className:"p-0.5 rounded hover:bg-dark-hover/50 transition-colors",children:l.jsx($e,{size:12})})]})]}),r&&s.detail&&l.jsx("div",{className:"mt-1.5 ml-6 text-[11px] text-dark-muted whitespace-pre-wrap break-words leading-relaxed border-t border-dark-border/50 pt-1.5",children:s.detail}),s.action&&l.jsx("button",{onClick:s.action.onClick,className:"mt-1.5 ml-6 self-start text-[11px] px-2 py-0.5 rounded bg-dark-hover hover:bg-dark-border transition-colors",children:s.action.label})]})}function xa(s){const{t:e}=ve(),{setActiveTab:t,createNewSession:n,clearMessages:r,setTheme:o,setThemePreset:a,toggleTerminal:i,setLogs:d,setUnreadLogs:c}=s,u=ns(x=>x.backendCommands),p=Array.isArray(u)?u:[],[h,m]=g.useState(!1),[f,y]=g.useState(""),[b,w]=g.useState(0),S=g.useRef(null),T=g.useCallback((x,j)=>{const D=K.getState().activeSessionId;return D?(L.setSessionId(D),L.send({type:"command_execute",sessionId:D,data:JSON.stringify({command:`/${x}`,args:j||""})}),{success:!0,message:e("slashCommands.sent_command")+`/${x}`}):{success:!1,message:e("slashCommands.noActiveSession")}},[e]),_=g.useMemo(()=>[{id:"chat",name:"chat",description:e("slashCommands.chat_desc"),icon:"💬",local:!0,action:()=>(t("chat"),{success:!0,message:e("slashCommands.chat_result")})},{id:"terminal",name:"terminal",description:e("slashCommands.terminal_desc"),icon:"💻",local:!0,action:()=>(t("terminal"),{success:!0,message:e("slashCommands.terminal_result")})},{id:"files",name:"files",description:e("slashCommands.files_desc"),icon:"📁",local:!0,action:()=>(t("files"),{success:!0,message:e("slashCommands.files_result")})},{id:"models",name:"models",description:e("slashCommands.models_desc"),icon:"🧠",local:!0,action:()=>(t("models"),{success:!0,message:e("slashCommands.models_result")})},{id:"tools",name:"tools",description:e("slashCommands.tools_desc"),icon:"🔧",local:!0,action:()=>(t("tools"),{success:!0,message:e("slashCommands.tools_result")})},{id:"skills",name:"skills",description:e("slashCommands.skills_desc"),icon:"🎯",local:!0,action:()=>(t("skills"),{success:!0,message:e("slashCommands.skills_result")})},{id:"agents",name:"agents",description:e("slashCommands.agents_desc"),icon:"👥",local:!0,action:()=>(t("agents"),{success:!0,message:e("slashCommands.agents_result")})},{id:"settings",name:"settings",description:e("slashCommands.settings_desc"),icon:"⚙️",local:!0,action:()=>(t("settings"),{success:!0,message:e("slashCommands.settings_result")})},{id:"logs",name:"logs",description:e("slashCommands.logs_desc"),icon:"📜",local:!0,action:()=>(t("logs"),c(0),{success:!0,message:e("slashCommands.logs_result")})},{id:"new",name:"new",description:e("slashCommands.new_desc"),icon:"✨",local:!0,action:()=>(n(),{success:!0,message:e("slashCommands.new_result")})},{id:"clear",name:"clear",description:e("slashCommands.clear_desc"),icon:"🗑️",local:!0,action:()=>(r(),{success:!0,message:e("slashCommands.clear_result")})},{id:"theme",name:"theme",description:e("slashCommands.theme_desc"),args:"<dark|light|auto|preset-name>",icon:"🎨",local:!0,action:x=>{const j=x.trim().toLowerCase();if(["dark","light","auto"].includes(j))return o(j),{success:!0,message:e("slashCommands.theme_result")+j};if(rt[j])return a?(a(j),{success:!0,message:e("slashCommands.theme_preset_result")+rt[j].nameKey}):{success:!1,message:e("slashCommands.theme_preset_unavailable")};const D=Object.keys(rt).join("|");return{success:!1,message:e("slashCommands.theme_error",{presets:D})}}},{id:"terminal-toggle",name:"terminal-toggle",description:e("slashCommands.toggle_terminal_desc"),icon:"🔲",local:!0,action:()=>(i(),{success:!0,message:e("slashCommands.toggle_terminal_result")})},{id:"clear-logs",name:"clear-logs",description:e("slashCommands.logs_clear_desc"),icon:"📭",local:!0,action:()=>(d([]),c(0),{success:!0,message:e("slashCommands.logs_clear_result")})},{id:"doctor",name:"doctor",description:e("slashCommands.doctor_desc"),icon:"🩺",local:!1,action:()=>T("doctor")},{id:"compact",name:"compact",description:e("slashCommands.compact_desc"),args:"[aggressive|summary]",icon:"🗜️",local:!1,action:x=>T("compact",x)},{id:"help",name:"help",description:e("slashCommands.help_desc"),icon:"❓",local:!1,action:()=>T("help")},{id:"cost",name:"cost",description:e("slashCommands.token_desc"),args:"[detail|reset]",icon:"💰",local:!1,action:x=>T("cost",x)},{id:"model",name:"model",description:e("slashCommands.model_desc"),args:"[model-name]",icon:"🤖",local:!1,action:x=>T("model",x)},{id:"status",name:"status",description:e("slashCommands.status_desc"),icon:"📊",local:!1,action:()=>T("status")},{id:"config",name:"config",description:e("slashCommands.config_desc"),args:"<get|set|list|delete> [key] [value]",icon:"🔧",local:!1,action:x=>T("config",x)},{id:"exit",name:"exit",description:e("slashCommands.exit_desc"),icon:"🚪",local:!1,action:()=>{const x=K.getState().activeSessionId;return x&&(L.setSessionId(x),L.send({type:"exit",sessionId:x})),{success:!0,message:e("slashCommands.exit_result")}}},{id:"test",name:"test",description:e("slashCommands.benchmark_desc"),args:"[simple|medium|complex|full|list]",icon:"🧪",local:!1,action:x=>T("test",x)}],[t,n,r,o,a,i,d,c,T,e]),k=g.useMemo(()=>p.map(x=>{const j=e(`slashCommands.${x.name}_desc`,x.description||x.usage||"");return{id:`backend-${x.name}`,name:x.name,description:j,icon:"🔌",local:!1,action:D=>{const W=K.getState().activeSessionId;return W?(L.setSessionId(W),L.send({type:"command_execute",sessionId:W,data:JSON.stringify({command:`/${x.name}`,args:D||""})}),{success:!0,message:e("slashCommands.sent_command")+`/${x.name}`}):{success:!1,message:e("slashCommands.noActiveSession")}}}}),[p,e]),P=g.useMemo(()=>{const x=new Set;return[..._,...k].filter(j=>x.has(j.name)?!1:(x.add(j.name),!0))},[_,k]),A=g.useMemo(()=>{if(!f)return P;const x=f.toLowerCase();return P.filter(j=>j.name.toLowerCase().includes(x)||j.description.toLowerCase().includes(x))},[P,f]),$=g.useCallback(()=>{m(!0),y(""),w(0)},[]),M=g.useCallback(()=>{m(!1),y(""),w(0)},[]),F=g.useCallback(()=>{w(x=>x>=A.length-1?0:x+1)},[A.length]),ee=g.useCallback(()=>{w(x=>x<=0?A.length-1:x-1)},[A.length]),N=g.useCallback((x,j)=>{const D=x.action(j);return M(),D},[M]);return g.useEffect(()=>{if(h&&S.current){const x=S.current.querySelector(`[data-index="${b}"]`);x&&x.scrollIntoView({block:"nearest"})}},[b,h]),{isOpen:h,filter:f,setFilter:y,selectedIndex:b,setSelectedIndex:w,filteredCommands:A,openMenu:$,closeMenu:M,selectNext:F,selectPrev:ee,executeCommand:N,containerRef:S,commands:_}}function ka({open:s,onClose:e,options:t}){const{t:n}=ve(),{filter:r,setFilter:o,filteredCommands:a,selectedIndex:i,setSelectedIndex:d,selectNext:c,selectPrev:u,executeCommand:p,openMenu:h,closeMenu:m}=xa(t),f=g.useRef(null),y=g.useRef(null),[b,w]=g.useState(!1);if(g.useEffect(()=>{s?(h(),w(!1),setTimeout(()=>{var _;return(_=f.current)==null?void 0:_.focus()},0)):m()},[s,h,m]),g.useEffect(()=>{if(!s||!y.current)return;const _=y.current.querySelector(`[data-cmd-index="${i}"]`);_&&_.scrollIntoView({block:"nearest"})},[i,s]),!s)return null;const S=_=>{_.local||(w(!0),Q.info(n("palette.running")));const k=p(_,"");_.local&&(k!=null&&k.message)&&Q.success(k.message),e()},T=_=>{if(_.key==="ArrowDown")_.preventDefault(),c();else if(_.key==="ArrowUp")_.preventDefault(),u();else if(_.key==="Enter"){_.preventDefault();const k=a[i];k&&S(k)}else _.key==="Escape"&&(_.preventDefault(),e())};return l.jsx("div",{className:"fixed inset-0 z-[100] flex items-start justify-center bg-black/50 backdrop-blur-sm pt-[12vh] px-4 animate-fade-in",onClick:e,role:"dialog","aria-modal":"true","aria-label":n("a11y.commandPalette"),children:l.jsxs("div",{className:"w-full max-w-xl bg-dark-surface border border-dark-border rounded-xl shadow-2xl overflow-hidden",onClick:_=>_.stopPropagation(),children:[l.jsxs("div",{className:"flex items-center gap-2 px-4 py-3 border-b border-dark-border",children:[l.jsx(to,{size:16,className:"text-dark-muted shrink-0","aria-hidden":"true"}),l.jsx("input",{ref:f,value:r,onChange:_=>{o(_.target.value),d(0)},onKeyDown:T,placeholder:n("palette.placeholder"),"aria-label":n("palette.placeholder"),className:"flex-1 bg-transparent text-sm text-dark-text placeholder-dark-muted outline-none"}),b&&l.jsx("span",{className:"text-[10px] text-accent-blue animate-pulse-soft shrink-0",children:n("palette.running")})]}),l.jsx("div",{ref:y,className:"max-h-[50vh] overflow-y-auto custom-scrollbar py-1",children:a.length===0?l.jsx("div",{className:"px-4 py-8 text-center text-sm text-dark-muted",children:n("palette.empty")}):a.map((_,k)=>l.jsxs("button",{"data-cmd-index":k,onClick:()=>S(_),onMouseEnter:()=>d(k),className:`w-full px-4 py-2.5 flex items-center gap-3 text-left transition-colors ${k===i?"bg-accent-blue/10 border-l-2 border-accent-blue":"border-l-2 border-transparent hover:bg-dark-hover"}`,children:[l.jsx("span",{className:"text-lg shrink-0","aria-hidden":"true",children:_.icon}),l.jsxs("div",{className:"flex-1 min-w-0",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs("span",{className:"text-sm font-medium text-dark-text",children:["/",_.name]}),_.args&&l.jsx("span",{className:"text-xs text-dark-muted",children:_.args}),!_.local&&l.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-blue/20 text-accent-blue shrink-0",children:n("slashCommands.backend")})]}),l.jsx("div",{className:"text-xs text-dark-muted truncate",children:_.description})]}),k===i&&l.jsx(so,{size:14,className:"text-dark-muted shrink-0","aria-hidden":"true"})]},_.id))}),l.jsx("div",{className:"px-4 py-2 border-t border-dark-border text-[10px] text-dark-muted bg-dark-bg",children:n("palette.hint")})]})})}function Sa({isOpen:s,onClose:e,title:t,children:n,size:r="md",className:o}){if(g.useEffect(()=>{const i=d=>{d.key==="Escape"&&(d.preventDefault(),d.stopPropagation(),e())};return s&&(document.addEventListener("keydown",i),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",i),document.body.style.overflow=""}},[s,e]),!s)return null;const a={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl"};return l.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4",children:[l.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:e}),l.jsxs("div",{className:Ee("relative w-full mx-4 bg-dark-surface border border-dark-border rounded-xl shadow-2xl animate-fade-in","max-h-[calc(100vh-2rem)] flex flex-col overflow-hidden",a[r],o),children:[t&&l.jsxs("div",{className:"flex shrink-0 items-center justify-between px-6 py-4 border-b border-dark-border",children:[l.jsx("h2",{className:"text-lg font-semibold text-dark-text",children:t}),l.jsx("button",{onClick:e,"aria-label":"Close",className:"p-1 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors",children:l.jsx($e,{className:"w-5 h-5","aria-hidden":"true"})})]}),l.jsx("div",{className:"min-h-0 overflow-y-auto custom-scrollbar p-6",children:n})]})]})}function Ce({keys:s,label:e}){return l.jsxs("div",{className:"flex items-center justify-between py-2 border-b border-dark-border/50 last:border-0",children:[l.jsx("span",{className:"text-sm text-dark-text",children:e}),l.jsx("span",{className:"flex items-center gap-1",children:s.map(t=>l.jsx("kbd",{className:"px-2 py-0.5 text-xs font-mono bg-dark-bg rounded border border-dark-border text-dark-muted",children:t},t))})]})}function va({open:s,onClose:e}){const{t}=ve(),n=navigator.platform.toLowerCase().includes("mac")?"⌘":"Ctrl";return l.jsx(Sa,{isOpen:s,onClose:e,title:t("shortcuts.title"),size:"md",children:l.jsxs("div",{className:"space-y-0.5",children:[l.jsx(Ce,{keys:[n,"K"],label:t("shortcuts.commandPalette")}),l.jsx(Ce,{keys:[n,"L"],label:t("shortcuts.clearLogs")}),l.jsx(Ce,{keys:[n,"/"],label:t("shortcuts.help")}),l.jsx(Ce,{keys:[n,"Enter"],label:t("shortcuts.submit")}),l.jsx(Ce,{keys:["Shift","Enter"],label:t("shortcuts.newline")}),l.jsx(Ce,{keys:["/"],label:t("shortcuts.slashCommand")}),l.jsx(Ce,{keys:["@"],label:t("shortcuts.fileRef")}),l.jsx(Ce,{keys:["Esc"],label:t("shortcuts.closeDialog")}),l.jsx(Ce,{keys:["Esc","Esc"],label:t("shortcuts.stopGen")})]})})}const wa={"pull-requests":Ct,scheduled:ts,plugins:_t},Ca={"pull-requests":"Agent 发起的 PR 列表将在这里展示。配置 git 远端与 PR 提供方(如 GitHub CLI)后可用。",scheduled:"定时任务(如每晚跑测试数据)将在这里管理。",plugins:"插件管理入口。可启停文件处理技能等扩展能力。"};function _a({tabId:s}){const{t:e}=ve(),t=wa[s]||_t;return l.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 px-6 text-center",children:[l.jsx("div",{className:"flex h-14 w-14 items-center justify-center rounded-2xl border border-dark-border bg-dark-surface",children:l.jsx(t,{size:24,className:"text-accent-blue"})}),l.jsx("h2",{className:"text-sm font-medium text-dark-text",children:e(`nav.${s}`)}),l.jsx("p",{className:"max-w-sm text-xs leading-relaxed text-dark-muted",children:Ca[s]||"功能开发中…"}),l.jsx("span",{className:"mt-1 rounded-full border border-accent-blue/30 bg-accent-blue/10 px-2.5 py-0.5 text-[10px] text-accent-blue",children:e("placeholder.comingSoon")})]})}const Ta=g.lazy(()=>se(()=>import("./ModelsView-Df8fwn3X.js"),__vite__mapDeps([0,1,2,3,4,5])).then(s=>({default:s.ModelsView}))),Na=g.lazy(()=>se(()=>import("./ToolsView-DH4XhAov.js"),__vite__mapDeps([6,1,2,4,5])).then(s=>({default:s.ToolsView}))),Ba=g.lazy(()=>se(()=>import("./AgentFlowView-CRwXzsUU.js"),__vite__mapDeps([7,1,2,4,5])).then(s=>({default:s.AgentFlowView}))),ja=g.lazy(()=>se(()=>import("./SkillsView-m_a2rauP.js"),__vite__mapDeps([8,1,2,3,4,5])).then(s=>({default:s.SkillsView}))),Ea=g.lazy(()=>se(()=>import("./AgentsView-CDY8XrTg.js"),__vite__mapDeps([9,1,2,4,5])).then(s=>({default:s.AgentsView}))),Aa=g.lazy(()=>se(()=>import("./HookConfigView-bKFZ-DDV.js"),__vite__mapDeps([10,1,2,5,4])).then(s=>({default:s.HookConfigView}))),Pa=g.lazy(()=>se(()=>import("./FileTreeView-CbGQmQay.js"),__vite__mapDeps([11,1,2,4,5])).then(s=>({default:s.FileTreeView}))),Ra=g.lazy(()=>se(()=>import("./TerminalView-UaCcIjqn.js"),__vite__mapDeps([12,1,2,13,4,5,14])).then(s=>({default:s.TerminalView}))),La=g.lazy(()=>se(()=>import("./SessionGrid-BPcnOjbx.js"),__vite__mapDeps([15,1,2,4,16,5])).then(s=>({default:s.SessionGrid}))),Ia=g.lazy(()=>se(()=>import("./SettingsPanel-CWlTCD1c.js"),__vite__mapDeps([17,1,2,4,5])).then(s=>({default:s.SettingsPanel}))),Ma=g.lazy(()=>se(()=>Promise.resolve().then(()=>Dr),void 0).then(s=>({default:s.LogsPanel}))),Oa=g.lazy(()=>se(()=>import("./HookApprovalModal-DU0Gen9V.js"),__vite__mapDeps([18,1,2,16,4,5])).then(s=>({default:s.HookApprovalModal}))),$a=g.lazy(()=>se(()=>import("./AskQuestionModal-CKt1m8Jo.js"),__vite__mapDeps([19,1,2,4,5])).then(s=>({default:s.AskQuestionModal}))),Da=g.lazy(()=>se(()=>import("./ChannelConfigView-CprbcO4h.js"),__vite__mapDeps([20,1,2,4,5])).then(s=>({default:s.ChannelConfigView}))),Fa=g.lazy(()=>se(()=>import("./InboxView-B5puastg.js"),__vite__mapDeps([21,1,2,4,5])).then(s=>({default:s.InboxView}))),Wa=g.lazy(()=>se(()=>import("./AutomationView-Cy1-vLAP.js"),__vite__mapDeps([22,1,2,4,5])).then(s=>({default:s.AutomationView}))),Ha=g.lazy(()=>se(()=>import("./AuditView-DbfHUxzt.js"),__vite__mapDeps([23,1,2,4,5])).then(s=>({default:s.AuditView}))),Js=()=>l.jsx("div",{className:"flex-1 flex items-center justify-center bg-dark-bg",children:l.jsx("div",{className:"w-5 h-5 border-2 border-accent-blue border-t-transparent rounded-full animate-spin"})}),$t={chat:"nav.chat",terminal:"nav.terminal",files:"nav.files",models:"nav.models",tools:"nav.tools",skills:"nav.skills",agents:"nav.agents",hooks:"nav.hooks",channels:"nav.channels",inbox:"nav.inbox",audit:"nav.audit",settings:"nav.settings",logs:"nav.logs","pull-requests":"nav.pullRequests",scheduled:"nav.scheduled",plugins:"nav.plugins"},Ua=[{id:"chat",title:"对话"},{id:"terminal",title:"终端"},{id:"files",title:"文件"},{id:"models",title:"模型"},{id:"tools",title:"工具"},{id:"skills",title:"技能"},{id:"agents",title:"Agents"},{id:"hooks",title:"Hooks"},{id:"channels",title:"频道"},{id:"inbox",title:"Inbox"},{id:"audit",title:"审计"},{id:"scheduled",title:"自动化"},{id:"logs",title:"日志"},{id:"settings",title:"设置"},{id:"pull-requests",title:"Pull requests"},{id:"plugins",title:"Plugins"}],za={chat:rn,terminal:ho,files:po,models:uo,tools:co,skills:lo,agents:io,hooks:ao,channels:ro,inbox:oo,audit:Me,logs:Me,settings:no,"pull-requests":Ct,scheduled:ts,plugins:_t};function Ka(){const[s,e]=g.useState("chat"),[t,n]=g.useState(!1),[r,o]=g.useState([]),[,a]=g.useState(0),[i,d]=g.useState(!1),[c,u]=g.useState(!1),[p,h]=g.useState(!1),[m,f]=g.useState(!1),[y,b]=g.useState(null),[w,S]=g.useState(!1),[T,_]=g.useState(!1),[k,P]=g.useState(!0),[A,$]=g.useState(()=>window.innerWidth>=1400),[M,F]=g.useState(()=>localStorage.getItem("dsc-sidebar-collapsed")==="1"),ee=g.useCallback(()=>{F(C=>(localStorage.setItem("dsc-sidebar-collapsed",C?"0":"1"),!C))},[]);g.useEffect(()=>{const C=window.matchMedia("(min-width: 1400px)"),E=G=>$(G.matches);return C.addEventListener("change",E),()=>C.removeEventListener("change",E)},[]);const{t:N,i18n:x}=ve(),{toggleTerminal:j}=pr(),{theme:D,setTheme:W,setThemePreset:B,language:I,workspaceDir:O,setWorkspaceDir:ae}=De(),J=Te();g.useEffect(()=>{I&&x.language!==I&&x.changeLanguage(I)},[I,x]);const ce=g.useMemo(()=>Ua.filter(C=>!(C.id==="terminal"&&y===!1)),[y]),ne=g.useMemo(()=>ce.map(C=>({...C,iconComponent:za[C.id]})),[ce]),de=g.useCallback(C=>{g.startTransition(()=>{e(C)})},[]);g.useEffect(()=>{const C=G=>{const H=G.message||N("common.unknownError"),pe=G.filename||"global";pe.includes("chrome-extension://")||pe.includes("moz-extension://")||o(te=>[...te,{id:`error-${Date.now()}-${crypto.randomUUID()}`,level:"error",source:"Browser",message:`${N("toast.uncaughtError")}${H}`,timestamp:Date.now()}].slice(-500))},E=G=>{var pe;const H=((pe=G.reason)==null?void 0:pe.message)||G.reason||N("toast.unknownReason");o(te=>[...te,{id:`rejection-${Date.now()}-${crypto.randomUUID()}`,level:"error",source:"Promise",message:`${N("toast.uncaughtRejection")}${H}`,timestamp:Date.now()}].slice(-500))};return window.addEventListener("error",C),window.addEventListener("unhandledrejection",E),()=>{window.removeEventListener("error",C),window.removeEventListener("unhandledrejection",E)}},[N]);const{sessionTabs:Ue,activeSessionId:Ne,setActiveSession:is,addSessionTab:Nt,closeSessionTab:ls,renameSessionTab:cs,getVisibleSessionTabs:Nn,autoNameSession:ds}=K(),{clearMessages:us}=U(),{customTheme:Bn,customThemeEnabled:jn,themePresetId:En}=De();ca({theme:D,themePresetId:En,customTheme:Bn,customThemeEnabled:jn}),ia({activeTab:s,setLogs:o,setUnreadLogs:a}),g.useEffect(()=>{v.get("/api/terminal/status").then(C=>b(C.success&&C.data?C.data.ttydAvailable!==!1:!1)).catch(()=>b(!1))},[]),g.useEffect(()=>{const C=E=>{const G=E.detail;G&&G!==s&&de(G)};return window.addEventListener("switch-tab",C),()=>window.removeEventListener("switch-tab",C)},[s,de]),g.useEffect(()=>{const C=window.location.hash.replace(/^#\/?/,"");!C||!(C in $t)||de(C)},[]),g.useEffect(()=>{const C=L.onOpen(()=>{n(!0),Q.success(N("toast.backendConnected"))}),E=L.onClose(()=>{t&&Q.warning(N("toast.backendDisconnected")),n(!1)});return()=>{C(),E()}},[t,N]),g.useEffect(()=>{Ue.length===0&&Nt(N("chat.defaultSessionTitle",{n:1}))},[]),g.useEffect(()=>{const C=()=>u(!0);return window.addEventListener("hook-approval-required",C),()=>window.removeEventListener("hook-approval-required",C)},[]),g.useEffect(()=>{const C=()=>h(!0);return window.addEventListener("ask-question-required",C),()=>window.removeEventListener("ask-question-required",C)},[]),g.useEffect(()=>{J.autoMode&&J.pendingApprovals.length>0&&u(!1),J.pendingApprovals.length>0&&!J.autoMode&&u(!0)},[J.autoMode,J.pendingApprovals.length]);const ps=g.useRef(0);g.useEffect(()=>{const C=E=>{var re,he;if(E.key!=="Escape"||E.defaultPrevented)return;const G=(re=E.target)==null?void 0:re.tagName;if(G==="INPUT"||G==="TEXTAREA"||(he=E.target)!=null&&he.isContentEditable)return;const H=U.getState(),te=K.getState().activeSessionId;if(!te||!H.isGenerating(te))return;E.preventDefault();const fe=Date.now(),be=ps.current;ps.current=fe,be>0&&fe-be<500?(L.send({type:"stop",sessionId:te}),Q.info(N("toast.terminated"))):(L.send({type:"pause",sessionId:te}),Q.info(N("toast.paused")))};return window.addEventListener("keydown",C),()=>window.removeEventListener("keydown",C)},[N]);const Pe=g.useCallback(()=>{g.startTransition(()=>{const C=Nt(void 0,O);L.setSessionId(C),wt.getState().setMode("act"),de("chat")})},[Nt,O,de]),hs=g.useCallback(C=>{is(C),L.setSessionId(C)},[is]),ms=g.useCallback(C=>{ls(C)},[ls]),fs=g.useCallback((C,E)=>{cs(C,E)},[cs]),Bt=g.useCallback(()=>{Ne&&us(Ne)},[Ne,us]);g.useEffect(()=>{if(!Ne)return;const C=U.getState().messagesBySession[Ne];C&&C.length>0&&V.getState().recalculateFromMessages(C)},[Ne]);const jt=g.useCallback(async(C,E,G,H)=>{if(!E.trim())return;U.getState().isGenerating(C)&&(console.warn(`[sendMessage] Session ${C} stuck in generating state — force-ending`),U.getState().endGeneration(C,"Force-ended: new message"));const te=wt.getState();U.getState().resumeGeneration(C),L.setSessionId(C),U.getState().getMessages(C).some(Be=>Be.type==="user")||ds(C,E.trim());let re=E.trim();if(G&&G.length>0){const Be=[];for(const ze of G)try{const Ke=await z.files.read(ze),ys=Ke.success&&Ke.data?Ke.data:null;if(ys){re=re.replace(ze,"");const Dn=ze.split(".").pop()||"";Be.push(`<context ref="${ze}">
|
|
13
|
+
`),Q.info(a,5e3),V.getState().setCompacting({originalCount:o.originalCount||0,compressedCount:o.compressedCount||0,tokensSaved:o.tokensSaved||0}),V.getState().setCompactionProgress(null)}catch(o){console.error("Failed to parse context_compressed:",o)}break;case"error":{n.endGeneration(t);const o=typeof e=="string"?e:String(e||"Error occurred"),a=Vr(o),i=n.messagesBySession[t]||[],d=i[i.length-1];d&&d.type==="assistant"&&!d.errorCard?n.attachErrorCard(t,a):n.addMessage(t,{id:crypto.randomUUID(),type:"assistant",content:"",timestamp:Date.now(),errorCard:a});break}case"context_analysis":try{const o=JSON.parse(e||"{}");o&&o.total!==void 0&&V.getState().setContextDistribution(o)}catch(o){console.error("Failed to parse context_analysis:",o)}break;case"threshold_warning":try{const o=JSON.parse(e||"{}");V.getState().setThresholdWarning(o);const a=o.percentLeft!==void 0?o.percentLeft:0;a<=5?console.warn(`Context nearly full (${a}% remaining)`):a<=15&&console.info(`Context running low (${a}% remaining)`)}catch(o){console.error("Failed to parse threshold_warning:",o)}break;case"blocking_limit":try{const o=JSON.parse(e||"{}");V.getState().setThresholdWarning(o),console.error(o.message||"Context blocked")}catch(o){console.error("Failed to parse blocking_limit:",o)}break;case"context_blocked":try{const o=JSON.parse(e||"{}");V.getState().setThresholdWarning(o),console.error(o.message||"Context is full — generation blocked")}catch(o){console.error("Failed to parse context_blocked:",o)}break;case"tool_retry":try{const o=JSON.parse(e||"{}");V.getState().setRetryState({active:o.attempt<(o.maxRetries||3),attempt:o.attempt||0,maxRetries:o.maxRetries||3,errorCategory:o.errorCategory||"unknown",toolName:o.toolName})}catch(o){console.error("Failed to parse tool_retry:",o)}break;case"model_fallback":try{const o=JSON.parse(e||"{}");console.warn(`Model fallback: ${o.fromModel||"?"} → ${o.toModel||"?"}`)}catch(o){console.error("Failed to parse model_fallback:",o)}break;case"tombstone":try{const a=JSON.parse(e||"{}").messageIds||[];a.length>0&&n.applyTombstone(t,a)}catch(o){Z.warn("Failed to parse tombstone",String(o))}break}}const ns=ue()((s,e)=>({backendCommands:[],loaded:!1,setBackendCommands:t=>{s({backendCommands:t,loaded:!0})},getAllCommands:()=>e().backendCommands}));async function Qr(s="",e){try{let t=`${s}/api/commands`;e&&(t+=`?lang=${encodeURIComponent(e)}`);const n=await fetch(t);if(!n.ok)return[];const r=await n.json(),o=Array.isArray(r==null?void 0:r.data)?r.data:[];return ns.getState().setBackendCommands(o),o}catch{return[]}}function Ks(s,e,t,n,r){var o,a,i;switch(s){case"token_update":try{const c=typeof e=="string"?JSON.parse(e):e||{};c.totalTokens>0&&V.getState().updateUsage({promptTokens:c.promptTokens||0,completionTokens:c.completionTokens||0,totalTokens:c.totalTokens||0}),c.model&&V.getState().setModel(c.model)}catch{}break;case"model_name":try{const c=r&&typeof r.model=="string"&&r.model||(typeof e=="string"?e:(e==null?void 0:e.model)||"");c&&V.getState().setModel(c)}catch{}break;case"auth_required":let d=localStorage.getItem("auth_token");d||(d="default-token",localStorage.setItem("auth_token",d)),L.setToken(d),L.setAuthenticated(!1),L.send({type:"auth",token:d});break;case"auth_success":L.setAuthenticated(!0),L.send({type:"subscribe_logs"});{const c=De.getState();Qr("",(o=c.language)!=null&&o.startsWith("zh")?"zh":"en");const u=c.workspaceDir;u&&L.send({type:"workspace",message:u})}break;case"auth_failed":Z.error("Auth failed",String(e));break;case"log":try{const c=typeof e=="string"?JSON.parse(e):e,u={id:`log-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,level:c.level||"info",source:c.source||"System",message:c.message||"",timestamp:c.timestamp||Date.now()};n.setLogs(p=>[...p,u].slice(-500)),n.activeTab!=="logs"&&n.setUnreadLogs(p=>p+1)}catch(c){Z.warn("Failed to parse log entry",String(c))}break;case"commands_list":try{const c=JSON.parse(e||"[]");ns.getState().setBackendCommands(Array.isArray(c)?c:[])}catch(c){Z.warn("Failed to parse commands list",String(c))}break;case"command_start":break;case"command_complete":try{const u=((typeof e=="string"?JSON.parse(e):e||{}).result||"").toString();Q.success(u.length>120?u.slice(0,120)+"...":u||"Command completed",4e3)}catch{}break;case"command_error":try{const c=typeof e=="string"?JSON.parse(e):e||{};Q.error((c.error||"Command failed").toString(),6e3)}catch{}break;case"ping":L.send({type:"pong",data:Date.now().toString()});break;case"workspace_changed":try{const c=JSON.parse(e||"{}");c.newDir&&De.getState().setWorkspaceDir(c.newDir)}catch{}break;case"degradation_update":try{const c=typeof e=="string"?JSON.parse(e):e||{},u=c.active,p=c.mode||"normal",h=Number(c.retryCount)||0,m=Number(c.maxRetries)||0,f=c.message||"",b={normal:"normal",retrying:"retrying",alternative:"alternative model",degraded:"degraded",verifying:"verifying",verified_fail:"verify failed"}[p]||p;if(V.getState().setDegradation({active:u,retryCount:h,maxRetries:m,mode:p,message:f,label:b}),u){const w=h>0?` (${h}/${m})`:"";Q.warning(f||`API Degraded: ${b}${w}`,8e3),n.setLogs(S=>[...S,{id:`deg-${Date.now()}`,level:"warn",source:"Infrastructure",message:`Degradation: ${b} | ${f||"no details"}`,timestamp:Date.now()}].slice(-500))}else Q.success("API Normal")}catch(c){Z.warn("Degradation update parse error",String(c))}break;case"doctor_result":try{const c=typeof e=="string"?JSON.parse(e):e||{},u=c.overallStatus||c.status||"unknown",p=c.healthRate,h=c.issues||[],f={healthy:"healthy",degraded:"degraded",unhealthy:"unhealthy",unknown:"unknown"}[u]||u,y=typeof p=="number"?` (${Math.round(p*100)}%)`:"";if(u==="healthy")Q.success(`Doctor: ${f}${y}`);else if(Q.warning(`Doctor: ${f}${y}`,1e4),h&&h.length>0)for(const b of h)n.setLogs(w=>[...w,{id:`doctor-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,level:"warn",source:"Doctor",message:typeof b=="string"?b:b.message||JSON.stringify(b),timestamp:Date.now()}].slice(-500))}catch(c){Z.warn("Doctor result parse error",String(c))}break;case"session_created":{try{const c=typeof e=="string"?JSON.parse(e):e||{};c.id&&(L.setSessionId(c.id),K.getState().updateSession(c.id,c))}catch{}typeof e=="string"&&e&&Z.info(`Session event: ${s}`);break}case"session_resumed":{try{const c=typeof e=="string"?JSON.parse(e):e||{};if((a=c.session)!=null&&a.id&&(L.setSessionId(c.session.id),K.getState().updateSession(c.session.id,c.session)),c.messages&&Array.isArray(c.messages)){const u=((i=c.session)==null?void 0:i.id)||t;U.getState().replaceMessages(u,c.messages.map(p=>({id:p.id||`msg-${p.timestamp||Date.now()}`,type:p.type==="user"?"user":"assistant",content:p.content||"",timestamp:p.timestamp||Date.now(),thinking:p.thinking||void 0})))}}catch(c){Z.warn("Failed to process session_resumed",String(c))}typeof e=="string"&&e&&Z.info(`Session event: ${s}`);break}case"mcp_update":try{const c=typeof e=="string"?JSON.parse(e):e||{},u=c.server||c.name||"MCP",p=c.action||c.status||"updated";Z.info(`MCP ${u}: ${p}`)}catch{}break;case"hook_response_ack":break;case"goal_created":case"goal_update":case"goal_task_update":try{const c=typeof e=="string"?JSON.parse(e):e||{},u=c.title||c.id||"Goal";Z.info(`Goal event (${s}): ${u}`)}catch{}break}}function Xr(s,e){var t;try{const n=typeof s=="string"?JSON.parse(s):s||{},r=Te.getState(),{approvalId:o,toolName:a,askPayload:i,timeoutMs:d,timeoutAction:c}=n,u=De.getState();if(r.isSessionAllowed(a)||r.autoMode||(t=u==null?void 0:u.yolo)!=null&&t.enabled){L.send({type:"hook_allow",data:JSON.stringify({approvalId:o})});return}U.getState().addMessage(e,{id:`hook-approval-${o||Date.now()}`,type:"assistant",content:"",timestamp:Date.now(),hookApproval:{approvalId:o||"",toolName:a||"unknown",askPayload:i||"",status:"pending",timestamp:Date.now(),timeoutMs:typeof d=="number"?d:void 0,timeoutAction:c==="allow"||c==="deny"?c:void 0}}),r.addApproval({approvalId:o||"",toolName:a||"unknown",askPayload:i||"",timestamp:Date.now(),timeoutMs:typeof d=="number"?d:void 0,timeoutAction:c==="allow"||c==="deny"?c:void 0}),window.dispatchEvent(new CustomEvent("hook-approval-required"))}catch{}}function Zr(s,e){try{const t=typeof s=="string"?JSON.parse(s):s||{},n=K.getState(),r=ie.getState(),{action:o,taskId:a,data:i}=t;if(o==="created"&&i){const d={id:a||`task-${Date.now()}`,title:i.title||"",completed:i.status==="COMPLETED",createdAt:Date.parse(i.createdAt)||Date.now(),backendId:a,backendStatus:i.status,description:i.description},c=n.tasksBySession[e]||[];n.setSessionTasks(e,[...c,d]),r.upsertTask(e,{id:d.id,title:d.title,description:d.description,status:Fe(i.status),source:"task",progress:i.progress!=null?Number(i.progress):void 0,raw:t})}else if((o==="updated"||o==="status_changed")&&i)n.updateTaskPlanStatus(e,a,{backendStatus:i.status,progress:i.progress}),r.upsertTask(e,{id:a,title:i.title||a,description:i.description,status:Fe(i.status),source:"task",progress:i.progress!=null?Number(i.progress):void 0,raw:t});else if(o==="deleted"){const d=n.tasksBySession[e]||[];n.setSessionTasks(e,d.filter(c=>c.id!==a&&c.backendId!==a))}r.recordEvent(e,{type:"task_update",source:"task",title:(i==null?void 0:i.title)||a||"Task update",message:o,status:i==null?void 0:i.status,taskId:a,data:t})}catch{}}function ea(s,e,t,n){try{const r=JSON.parse(e||"{}"),o=n(t,s,r);if(o){const a=U.getState();switch(s){case"step_start":a.updateStep(t,o.id,{title:r.step||o.title,description:r.description||o.description,status:r.status==="start"?"running":r.status||"running"});break;case"step_thinking":a.updateStep(t,o.id,{thought:r.thought});break;case"step_action":a.updateStep(t,o.id,{action:r.action});break;case"step_complete":a.updateStep(t,o.id,{status:r.status??"success",result:r.result});break}}}catch(r){Z.warn("Failed to parse "+s,String(r))}}function ta(s,e){var t,n;try{const r=typeof s=="string"?JSON.parse(s):s||{};let o=[];if(Array.isArray(r)?o=r:(t=r.tasks)!=null&&t.length?o=r.tasks:(n=r.items)!=null&&n.length&&(o=r.items),o.length>0&&e){const a=K.getState(),i=ie.getState();o.forEach(d=>{const c=d.content||d.title||d.name||"";if(c.trim()){if(!a.getSessionTasks(e).find(f=>f.title===c.trim())&&(a.addSessionTask(e,c.trim()),d.completed||d.status==="completed"||d.status==="COMPLETED"||d.status==="done"||d.activeForm==="completed")){const b=a.getSessionTasks(e).find(w=>w.title===c.trim());b&&a.toggleSessionTask(e,b.id)}const h=String(d.id||d.taskId||c.trim()),m=d.completed||d.status==="completed"||d.status==="COMPLETED"||d.status==="done"||d.activeForm==="completed";i.upsertTask(e,{id:h,title:c.trim(),description:d.description,status:Fe(d.status,m),source:"todo",raw:d})}}),i.recordEvent(e,{type:"todo_update",source:"todo",title:"Todo list updated",message:`${o.length} items`,status:"updated",data:r})}}catch{}}function sa(s,e){try{const t=typeof s=="string"?JSON.parse(s):s||{},n=t.questionId||"",r=t.question||"";if(!n||!r)return;window.__pendingQuestion={questionId:n,question:r,header:t.header||void 0,options:Array.isArray(t.options)?t.options:void 0,multiSelect:t.multiSelect===!0},window.dispatchEvent(new CustomEvent("ask-question-required"))}catch{}}function na(s,e){try{const t=typeof s=="string"?JSON.parse(s):s||{},n=t.title||t.name||"";if(n&&e){const o=K.getState().getSessionTasks(e).find(a=>a.title===n&&!a.completed);o&&K.getState().toggleSessionTask(e,o.id),ie.getState().upsertTask(e,{id:(o==null?void 0:o.id)||n,title:n,status:"completed",source:"todo"}),ie.getState().recordEvent(e,{type:"todo_item_done",source:"todo",title:n,status:"completed",taskId:(o==null?void 0:o.id)||n,data:t})}}catch{}}function Qe(s){if(!s)return null;try{return JSON.parse(s)}catch{return null}}const Xe=ue((s,e)=>({items:[],pendingCount:0,audit:[],auditTotal:0,automations:[],runsByAutomation:{},loading:!1,error:null,fetchInbox:async()=>{const t=await z.inbox.list({state:"all"});if(t.success&&t.data){const n=t.data.items;s({items:n,pendingCount:n.filter(r=>r.state==="pending").length})}else s({error:t.error||"加载 Inbox 失败"})},resolveInbox:async(t,n)=>{const r=await z.inbox.resolve(t,n);return r.success?(await e().fetchInbox(),!0):(s({error:r.error||"解决失败"}),!1)},fetchAudit:async t=>{const n=await z.audit.query(t||{pageSize:100});n.success&&n.data?s({audit:n.data.records,auditTotal:n.data.total}):s({error:n.error||"加载审计失败"})},fetchAutomations:async()=>{const t=await z.automations.list();t.success&&t.data?s({automations:t.data}):s({error:t.error||"加载自动化失败"})},createAutomation:async t=>{const n=await z.automations.create(t);return n.success&&n.data?(await e().fetchAutomations(),n.data):(s({error:n.error||"创建自动化失败"}),null)},deleteAutomation:async t=>{const n=await z.automations.remove(t);return n.success?(await e().fetchAutomations(),!0):(s({error:n.error||"删除失败"}),!1)},toggleAutomation:async(t,n)=>{const r=await z.automations.toggle(t,n);r.success?await e().fetchAutomations():s({error:r.error||"切换失败"})},runAutomation:async t=>{const n=await z.automations.run(t);n.success?(await e().fetchRuns(t),await e().fetchAutomations()):s({error:n.error||"触发失败"})},fetchRuns:async t=>{const n=await z.automations.runs(t);n.success&&n.data&&s(r=>({runsByAutomation:{...r.runsByAutomation,[t]:n.data}}))},onInboxPending:t=>{s(n=>({items:[t,...n.items.filter(r=>r.id!==t.id)],pendingCount:n.pendingCount+1}))},onInboxResolved:t=>{s(n=>{var r;return{items:n.items.map(o=>o.id===t.id?t:o),pendingCount:Math.max(0,n.pendingCount-(t.state==="resolved"&&((r=n.items.find(o=>o.id===t.id))==null?void 0:r.state)==="pending"?1:0))}})},onAuditRecord:t=>{s(n=>({audit:[t,...n.audit].slice(0,200)}))},onAutomationUpdate:t=>{s(n=>({automations:n.automations.some(o=>o.id===t.id)?n.automations.map(o=>o.id===t.id?t:o):[...n.automations,t]}))},onAutomationRun:t=>{s(n=>({runsByAutomation:{...n.runsByAutomation,[t.automationId]:[t,...n.runsByAutomation[t.automationId]||[]].slice(0,50)}}))}})),Ze={pending:s=>{const e=Qe(s);e&&Xe.getState().onInboxPending(e)},resolved:s=>{const e=Qe(s);e&&Xe.getState().onInboxResolved(e)},auditRecord:s=>{const e=Qe(s);e&&Xe.getState().onAuditRecord(e)},automationUpdate:s=>{const e=Qe(s);e!=null&&e.automation&&Xe.getState().onAutomationUpdate(e.automation)},automationRun:s=>{const e=Qe(s);e!=null&&e.run&&Xe.getState().onAutomationRun(e.run)}};function oa(s,e,t){let n={};if(e&&typeof e=="object")n=e;else try{n=JSON.parse(String(e||"{}"))}catch{}const r=String(n.jobId||`fjob-${Date.now()}`),o=n.stage||(s==="filejob_result"?"complete":s==="filejob_error"?"error":"uploaded"),a={jobId:r,stage:o,parseProgress:n.parseProgress,parsedFiles:n.parsedFiles,mapping:n.mapping,renderProgress:n.renderProgress,currentRow:n.currentRow,totalRows:n.totalRows,result:n.result,error:n.error,errorDetail:n.errorDetail};n.attachments&&(a.attachments=n.attachments),U.getState().setMessageFileJob(t,a)}const ra=ue((s,e)=>({channels:[],loading:!1,error:null,formOpen:!1,editing:null,qrOpen:!1,qrChannel:null,selectedType:null,load:async()=>{s({loading:!0,error:null});const t=await z.channels.list(),n=t.success&&Array.isArray(t.data)?t.data:[];if(s({loading:!1,channels:n,...t.success&&!Array.isArray(t.data)?{error:"服务端返回的频道数据格式异常"}:t.success?{}:{error:t.error??"Failed to load"}}),!e().selectedType&&n.length>0){const o=n[0].type;s({selectedType:o})}},create:async t=>{const n=await z.channels.create(t);return n.success?(await e().load(),s({formOpen:!1,editing:null}),!0):(s({error:n.error??"Create failed"}),!1)},update:async(t,n)=>{const r=await z.channels.update(t,n);return r.success?(await e().load(),s({formOpen:!1,editing:null}),!0):(s({error:r.error??"Update failed"}),!1)},remove:async t=>{const n=await z.channels.delete(t);return n.success?(s(r=>({channels:r.channels.filter(o=>o.id!==t)})),!0):(s({error:n.error??"Delete failed"}),!1)},toggle:async(t,n)=>(await z.channels.toggle(t,n)).success?(s(o=>({channels:o.channels.map(a=>a.id===t?{...a,enabled:n}:a)})),!0):(await e().load(),!1),openForm:t=>s({formOpen:!0,editing:t??null,error:null}),closeForm:()=>s({formOpen:!1,editing:null,error:null}),openQr:t=>s({qrOpen:!0,qrChannel:t??null}),closeQr:()=>{s({qrOpen:!1,qrChannel:null}),e().load()},clearError:()=>s({error:null}),selectType:t=>s({selectedType:t,error:null}),updateChannelStatus:t=>{s(n=>({channels:n.channels.map(r=>r.id===t.channelId?{...r,connected:t.connected,_state:t.state}:r)}))}})),Xt=(s,e=[])=>{if(!s)return e;if(Array.isArray(s))return s.forEach(r=>Xt(r,e)),e;if(typeof s!="object")return e;const t=s,n=t.content;return typeof n=="string"&&n.trim()&&e.push(n.trim()),Object.entries(t).forEach(([r,o])=>{r!=="content"&&r!=="structuredOutput"&&Xt(o,e)}),e},aa=s=>{const e=Xt(s);return e[e.length-1]||""};function ia({activeTab:s,setLogs:e,setUnreadLogs:t}){const n=U,r=g.useCallback(c=>{if(!c)return{};if(typeof c=="object")return c;if(typeof c!="string")return{};try{return JSON.parse(c)}catch{return{}}},[]),o=g.useCallback((c,u,p)=>{const h=r(u),m=h.runId||"";if(!m)return;const f=ie.getState(),y=U.getState();if(c==="workflow_error"){f.fail(p,m,h.error||"Workflow failed"),(y.isGenerating(p)||y.isPaused(p))&&y.endGeneration(p,h.error||"Workflow failed");return}const b=c==="workflow_finished"?h.status||"COMPLETED":c==="workflow_started"?h.status||"RUNNING":c==="workflow_paused"?h.status||"PAUSED":c==="workflow_resumed"?h.status||"RESUMING":c==="workflow_cancelled"?h.status||"CANCELLED":c==="workflow_recovered"?h.status||"RUNNING":h.status||void 0,w=h.type||c,S=h.data&&typeof h.data=="object"?h.data:{},T=String(h.kind||S.kind||""),_=h.nodeId||h.node_id||S.nodeId||S.node_id,k=h.role||h.agentRole||h.agent_role||S.role||S.agentRole||S.agent_role,P=h.phase||h.phaseId||S.phase||S.phaseId,A=h.effectId||S.effectId||_,$=h.toolName||h.tool_name||S.toolName||S.tool_name,M=h.error||S.error,F=["effect.scheduled","effect.completed","effect.failed"].includes(w)&&_&&T!=="tool",ee=["effect.scheduled","effect.completed","effect.failed"].includes(w)&&T==="tool"&&($||_),N=_?f.getAgentsForSession(p).find(x=>x.id===String(_)):void 0;if(f.upsert(p,{runId:m,status:b,completedPhases:Number(h.completedPhases||0),totalPhases:Number(h.totalPhases||0),completedEffects:Number(h.completedEffects||0),totalEffects:Number(h.totalEffects||0),tokensUsed:Number(h.tokensUsed||0),tokensRemaining:Number(h.tokensRemaining||0),lastEventType:w,agentNode:F?{nodeId:String(_),role:String(k||(N==null?void 0:N.role)||(N==null?void 0:N.name)||"agent"),phase:P?String(P):N==null?void 0:N.phase,status:w==="effect.failed"?"failed":w==="effect.completed"?"completed":"scheduled",tokens:h.tokensUsed!=null?Number(h.tokensUsed):S.tokens!=null&&typeof S.tokens=="number"?Number(S.tokens):void 0,error:M?String(M):void 0,updatedAt:Date.now()}:void 0}),ee){const x=w==="effect.failed"?"failed":w==="effect.completed"?"completed":"running",j=String(A||`${m}-${$||_}`);f.upsertTask(p,{id:j,title:String($||_),description:_?String(_):void 0,status:x,source:"workflow",runId:m,result:S.artifactRef?String(S.artifactRef):void 0,error:M?String(M):void 0,raw:h}),f.recordEvent(p,{type:w,source:"workflow",title:String($||_),status:x,runId:m,taskId:j,message:M?String(M):void 0,data:h})}if(c==="workflow_started")y.startGeneration(p);else if(c==="workflow_finished"){const x=aa(h.output);if(x){const j=y.getMessages(p),D=j[j.length-1];(D==null?void 0:D.type)==="assistant"?y.appendToLastMessage(p,x):y.addMessage(p,{id:crypto.randomUUID(),type:"assistant",content:x,timestamp:Date.now()})}y.endGeneration(p)}else b==="PAUSED"?y.pauseGeneration(p):(b==="RUNNING"||b==="RESUMING")&&y.resumeGeneration(p)},[r]),a=g.useCallback(c=>{var m;const p=n.getState().messagesBySession[c]||[],h=p[p.length-1];return(m=h==null?void 0:h.steps)==null?void 0:m[h.steps.length-1]},[n]),i=g.useCallback((c,u,p)=>{const h=a(c),m=u==="step_complete",f=h&&(h.status==="success"||h.status==="error");if(!h||f&&!m){const y=(p==null?void 0:p.step)||u.replace("step_","").replace("_"," ");return n.getState().addStep(c,{id:`step-${Date.now()}`,title:y,description:(p==null?void 0:p.description)||"Executing...",status:"running",timestamp:Date.now()}),a(c)}return h},[a,n]),d=g.useCallback(c=>{const u=c.type,p=c.data;if(u==="model_name"){Ks(u,p,c.sessionId||"",{activeTab:s,setLogs:e,setUnreadLogs:t},c);return}if(u==="models_updated"||u==="models.updated"){window.dispatchEvent(new CustomEvent("models-updated"));return}const h=K.getState().activeSessionId,m=c.sessionId||h;if(m){if(u==="hook_ask"){Xr(p,m);return}if(u==="ask_user_question"){sa(p);return}if(u==="question_answer_ack"){window.dispatchEvent(new CustomEvent("ask-question-dismiss"));return}if(u==="task_update"){Zr(p,m);return}if(u==="task_output"){try{n.getState().appendToLastMessage(m,String(p||""))}catch{}return}if(u==="task_finished"||u==="task_error"){u==="task_error"&&Z.error("Task error",String(p));return}if(u==="filejob_start"||u==="filejob_progress"||u==="filejob_result"||u==="filejob_error"){oa(u,p,m);return}if(u.startsWith("step_")){ea(u,p,m,i);return}if(u.startsWith("plan_")){try{Mt(u,p,m)}catch(f){Z.error(`Failed to handle ${u}`,String(f))}return}if(u.startsWith("goal_")){try{Mt(u,p,m)}catch(f){Z.error(`Failed to handle ${u}`,String(f))}return}if(u==="step_prompt"){try{Mt(u,p,m)}catch(f){Z.error(`Failed to handle ${u}`,String(f))}return}if(u==="todo_update"){ta(p,m);return}if(u==="todo_item_done"){na(p,m);return}if(u!=="todo_progress"){if(u==="inbox.pending"){Ze.pending(p);return}if(u==="inbox.resolved"){Ze.resolved(p);return}if(u==="audit.record"){Ze.auditRecord(p);return}if(u==="automation.update"){Ze.automationUpdate(p);return}if(u==="automation.run"){Ze.automationRun(p);return}if(u!=="tool.approval_required"){if(["workflow_started","workflow_event","workflow_progress","workflow_finished","workflow_error","workflow_checkpoint","workflow_node_start","workflow_node_complete","workflow_paused","workflow_resumed","workflow_cancelled","workflow_handoff"].includes(u)){o(u,p,m);return}if(["start","content","thinking","tool_call","tool_result","complete","generation_paused","generation_resumed","error","context_compressed","compaction_progress","tombstone","context_analysis","threshold_warning","blocking_limit","tool_retry","model_fallback","context_blocked"].includes(u)){Yr(u,p,m);return}if(u==="channel_status"){try{const f=JSON.parse(p||"{}");ra.getState().updateChannelStatus(f)}catch{}return}if(!(u==="channel_message"||u==="channel_error")&&["token_update","auth_required","auth_success","auth_failed","log","commands_list","ping","workspace_changed","degradation_update","doctor_result","session_created","session_resumed","mcp_update","hook_response_ack","goal_created","goal_update","goal_task_update"].includes(u)){Ks(u,p,m,{activeTab:s,setLogs:e,setUnreadLogs:t});return}}}}},[s,i,o,e,t]);g.useEffect(()=>{L.connect();const c=L.onMessage(d),u=L.onClose(()=>{const p=U.getState();for(const h of p.generatingSessions)p.endGeneration(h,"WebSocket disconnected")});return()=>{c(),u()}},[d])}const rt={linear:{id:"linear",nameKey:"settings.themePresetLinear",descriptionKey:"settings.themePresetLinearDesc",dark:{bg:"#0a0a0c",surface:"#121215",border:"#26262b",text:"#e4e4e7",muted:"#8e8e96",accentBlue:"#7c83f8",accentGreen:"#4ade80",accentRed:"#f87171",accentYellow:"#fbbf24",accentPurple:"#c084fc"},light:{bg:"#ffffff",surface:"#f6f6f7",border:"#e4e4e8",text:"#18181b",muted:"#71717a",accentBlue:"#5e6ad2",accentGreen:"#16a34a",accentRed:"#dc2626",accentYellow:"#b45309",accentPurple:"#7c3aed"}},mimo:{id:"mimo",nameKey:"settings.themePresetMimo",descriptionKey:"settings.themePresetMimoDesc",dark:{bg:"#fcfaf8",surface:"#f6f1ea",border:"#e7dfd5",text:"#26251e",muted:"#5a574f",accentBlue:"#26251e",accentGreen:"#1f7a4d",accentRed:"#b84f42",accentYellow:"#a16b2d",accentPurple:"#7a5c8f"},light:{bg:"#ffffff",surface:"#f8f4ef",border:"#e2d8cd",text:"#24221c",muted:"#605b52",accentBlue:"#26251e",accentGreen:"#1f7a4d",accentRed:"#b84f42",accentYellow:"#a16b2d",accentPurple:"#7a5c8f"}},github:{id:"github",nameKey:"settings.themePresetGithub",descriptionKey:"settings.themePresetGithubDesc",dark:{bg:"#0d1117",surface:"#161b22",border:"#30363d",text:"#c9d1d9",muted:"#8b949e",accentBlue:"#58a6ff",accentGreen:"#238636",accentRed:"#f85149",accentYellow:"#d29922",accentPurple:"#a855f7"},light:{bg:"#ffffff",surface:"#f6f8fa",border:"#d0d7de",text:"#24292f",muted:"#57606a",accentBlue:"#0969da",accentGreen:"#1a7f37",accentRed:"#cf222e",accentYellow:"#9a6700",accentPurple:"#8250df"}},cherry:{id:"cherry",nameKey:"settings.themePresetCherry",descriptionKey:"settings.themePresetCherryDesc",dark:{bg:"#0f1419",surface:"#1a2332",border:"#2d3f50",text:"#e1e8ed",muted:"#8899aa",accentBlue:"#01a9ff",accentGreen:"#00c853",accentRed:"#ff5252",accentYellow:"#ffab00",accentPurple:"#7c4dff"},light:{bg:"#f5f9ff",surface:"#ffffff",border:"#cce0ff",text:"#1a2332",muted:"#5c6f87",accentBlue:"#0160ff",accentGreen:"#00a844",accentRed:"#e53935",accentYellow:"#f9a825",accentPurple:"#651fff"}},ocean:{id:"ocean",nameKey:"settings.themePresetOcean",descriptionKey:"settings.themePresetOceanDesc",dark:{bg:"#0b1e2e",surface:"#122b3d",border:"#1e4057",text:"#d4e6f5",muted:"#7a9bb5",accentBlue:"#00bcd4",accentGreen:"#26a69a",accentRed:"#ef5350",accentYellow:"#ffca28",accentPurple:"#ab47bc"},light:{bg:"#edf7fc",surface:"#ffffff",border:"#b3d9e8",text:"#0b1e2e",muted:"#4f7a94",accentBlue:"#00838f",accentGreen:"#00897b",accentRed:"#d32f2f",accentYellow:"#f57f17",accentPurple:"#8e24aa"}},mint:{id:"mint",nameKey:"settings.themePresetMint",descriptionKey:"settings.themePresetMintDesc",dark:{bg:"#0d1f1c",surface:"#162d28",border:"#264b41",text:"#d1f0e8",muted:"#7dafa3",accentBlue:"#26c6da",accentGreen:"#66bb6a",accentRed:"#ef5350",accentYellow:"#ffd54f",accentPurple:"#ad8aff"},light:{bg:"#edf7f4",surface:"#ffffff",border:"#b8d9cf",text:"#0d1f1c",muted:"#4a7f72",accentBlue:"#0097a7",accentGreen:"#388e3c",accentRed:"#d32f2f",accentYellow:"#f9a825",accentPurple:"#7c4dff"}},lavender:{id:"lavender",nameKey:"settings.themePresetLavender",descriptionKey:"settings.themePresetLavenderDesc",dark:{bg:"#1a1428",surface:"#261f38",border:"#3c3354",text:"#e2daf2",muted:"#9387b5",accentBlue:"#86bef5",accentGreen:"#81c784",accentRed:"#ef9a9a",accentYellow:"#ffe082",accentPurple:"#ce93d8"},light:{bg:"#f5f0ff",surface:"#ffffff",border:"#d4c8e8",text:"#1a1428",muted:"#6c5b8a",accentBlue:"#1565c0",accentGreen:"#2e7d32",accentRed:"#c62828",accentYellow:"#f57f17",accentPurple:"#7b1fa2"}},midnight:{id:"midnight",nameKey:"settings.themePresetMidnight",descriptionKey:"settings.themePresetMidnightDesc",dark:{bg:"#0a0e1a",surface:"#111726",border:"#1e2740",text:"#c8d2e8",muted:"#6a7596",accentBlue:"#4fc3f7",accentGreen:"#4caf50",accentRed:"#e57373",accentYellow:"#ffd54f",accentPurple:"#b39ddb"},light:{bg:"#eef1f7",surface:"#ffffff",border:"#c0c9dc",text:"#0a0e1a",muted:"#4f5a78",accentBlue:"#0288d1",accentGreen:"#2e7d32",accentRed:"#d32f2f",accentYellow:"#f57f17",accentPurple:"#5e35b1"}},sunset:{id:"sunset",nameKey:"settings.themePresetSunset",descriptionKey:"settings.themePresetSunsetDesc",dark:{bg:"#1e1410",surface:"#2a1d16",border:"#443124",text:"#f0dfcf",muted:"#b8957a",accentBlue:"#5fa5e8",accentGreen:"#81c784",accentRed:"#ff7043",accentYellow:"#ffb74d",accentPurple:"#e0a0e0"},light:{bg:"#fff6f0",surface:"#ffffff",border:"#f0d5c0",text:"#2a1d16",muted:"#8a6e5a",accentBlue:"#1976d2",accentGreen:"#388e3c",accentRed:"#e64a19",accentYellow:"#ef6c00",accentPurple:"#8e24aa"}},forest:{id:"forest",nameKey:"settings.themePresetForest",descriptionKey:"settings.themePresetForestDesc",dark:{bg:"#0e1a12",surface:"#172a1d",border:"#2a4733",text:"#d1e8d6",muted:"#7da684",accentBlue:"#5bb8e8",accentGreen:"#66bb6a",accentRed:"#ef9a9a",accentYellow:"#e6c35c",accentPurple:"#ae8ad9"},light:{bg:"#f0f7f0",surface:"#ffffff",border:"#b8d9be",text:"#0e1a12",muted:"#477a50",accentBlue:"#1565c0",accentGreen:"#2e7d32",accentRed:"#c62828",accentYellow:"#827717",accentPurple:"#6a1b9a"}},candy:{id:"candy",nameKey:"settings.themePresetCandy",descriptionKey:"settings.themePresetCandyDesc",dark:{bg:"#16101a",surface:"#22182a",border:"#3d284a",text:"#f0def5",muted:"#b28dc2",accentBlue:"#5fc3f5",accentGreen:"#81e080",accentRed:"#ff6b6b",accentYellow:"#ffd93d",accentPurple:"#e066ff"},light:{bg:"#faf0ff",surface:"#ffffff",border:"#e0cce8",text:"#1a0a24",muted:"#7a5c8a",accentBlue:"#1976d2",accentGreen:"#388e3c",accentRed:"#d32f2f",accentYellow:"#f9a825",accentPurple:"#8e24aa"}},nord:{id:"nord",nameKey:"settings.themePresetNord",descriptionKey:"settings.themePresetNordDesc",dark:{bg:"#2e3440",surface:"#3b4252",border:"#4c566a",text:"#eceff4",muted:"#81a1c1",accentBlue:"#88c0d0",accentGreen:"#a3be8c",accentRed:"#bf616a",accentYellow:"#ebcb8b",accentPurple:"#b48ead"},light:{bg:"#f5f7fa",surface:"#ffffff",border:"#d8dee9",text:"#2e3440",muted:"#5e6d85",accentBlue:"#5e81ac",accentGreen:"#6f9e6f",accentRed:"#bf616a",accentYellow:"#b48d56",accentPurple:"#8f6f9e"}}},Zt="linear";function Gs(s,e,t){const n=rt[s]||rt[Zt];if(!n)return{bg:"#fcfaf8",surface:"#f6f1ea",border:"#e7dfd5",text:"#26251e",muted:"#5a574f",accentBlue:"#26251e",accentGreen:"#1f7a4d",accentRed:"#b84f42",accentYellow:"#a16b2d",accentPurple:"#7a5c8f"};const r={...e==="dark"?n.dark:n.light};return t&&Object.assign(r,t),r}const xe=s=>{const e=parseInt(s.slice(1,3),16),t=parseInt(s.slice(3,5),16),n=parseInt(s.slice(5,7),16);return`${e} ${t} ${n}`},la=(s,e,t)=>{const n=[parseInt(s.slice(1,3),16),parseInt(s.slice(3,5),16),parseInt(s.slice(5,7),16)],r=[parseInt(e.slice(1,3),16),parseInt(e.slice(3,5),16),parseInt(e.slice(5,7),16)];return n.map((o,a)=>Math.round(o+((r[a]??o)-o)*t)).join(" ")};function qs(s,e,t,n,r){t.classList.toggle("dark",s==="dark"),t.classList.toggle("light",s==="light"),t.style.setProperty("--color-bg",xe(e.bg)),t.style.setProperty("--color-surface",xe(e.surface)),t.style.setProperty("--color-border",xe(e.border)),t.style.setProperty("--color-text",xe(e.text)),t.style.setProperty("--color-muted",xe(e.muted)),t.style.setProperty("--color-accent-blue",xe(e.accentBlue)),t.style.setProperty("--color-accent-green",xe(e.accentGreen)),t.style.setProperty("--color-accent-red",xe(e.accentRed)),t.style.setProperty("--color-accent-yellow",xe(e.accentYellow)),t.style.setProperty("--color-accent-purple",xe(e.accentPurple)),t.style.setProperty("--color-hover",la(e.surface,e.text,.06)),n&&n.setAttribute("content",e.bg),r&&r.setAttribute("content",s)}function ca({theme:s,themePresetId:e,customTheme:t,customThemeEnabled:n}){g.useEffect(()=>{const r=document.documentElement,o=document.querySelector('meta[name="theme-color"]'),a=document.querySelector('meta[name="color-scheme"]'),i=s==="dark"?"dark":s==="light"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",d=n?t:void 0,c=Gs(e||Zt,i,d);if(qs(i,c,r,o,a),s==="auto"){const u=window.matchMedia("(prefers-color-scheme: dark)"),p=()=>{const h=u.matches?"dark":"light",m=Gs(e||Zt,h,d);qs(h,m,r,o,a)};return u.addEventListener("change",p),()=>u.removeEventListener("change",p)}},[s,e,t,n])}class Vs extends g.Component{constructor(t){super(t);X(this,"handleRetry",()=>{this.setState({hasError:!1,error:null})});this.state={hasError:!1,error:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("[ErrorBoundary] Caught error:",t,n)}render(){var t;return this.state.hasError?this.props.fallback?this.props.fallback:l.jsx("div",{className:"flex items-center justify-center h-full w-full bg-dark-bg",children:l.jsxs("div",{className:"max-w-md p-8 text-center",children:[l.jsx("div",{className:"flex justify-center mb-4",children:l.jsx("div",{className:"w-16 h-16 rounded-full bg-accent-red/10 flex items-center justify-center",children:l.jsx(ss,{size:32,className:"text-accent-red"})})}),l.jsx("h2",{className:"text-xl font-semibold text-dark-text mb-2",children:"页面出现错误"}),l.jsx("p",{className:"text-sm text-dark-muted mb-6",children:((t=this.state.error)==null?void 0:t.message)||"发生了未知错误,请尝试刷新页面"}),l.jsxs("div",{className:"flex items-center justify-center gap-3",children:[l.jsxs("button",{onClick:this.handleRetry,className:"flex items-center gap-2 px-4 py-2 bg-accent-blue text-white rounded-lg hover:opacity-90 transition-opacity",children:[l.jsx(an,{size:16}),"重试"]}),l.jsx("button",{onClick:()=>window.location.reload(),className:"px-4 py-2 bg-dark-hover text-dark-text rounded-lg hover:bg-dark-border transition-colors",children:"刷新页面"})]})]})}):this.props.children}}const da=g.memo(function(e){const{t}=ve(),n=V(x=>x.currentUsage),r=V(x=>x.maxContextTokens),o=V(x=>x.model),a=V(x=>x.tokenRate),i=V(x=>x.compactingUntil),d=V(x=>x.lastCompactInfo),c=V(x=>x.degradation),u=V(x=>x.compactionProgress),p=K(x=>x.activeSessionId),h=U(x=>p?x.isGenerating(p):!1),m=ie(x=>p?x.bySession[p]:void 0),f=ie(x=>p?x.getRunningAgentCount(p):0),y=wt(x=>x.mode),b=Te(x=>x.autoMode),[w,S]=g.useState(0),T=g.useRef(0);g.useEffect(()=>{if(h&&!T.current&&(T.current=Date.now()),!h){T.current=0,S(0);return}const x=setInterval(()=>S(Math.floor((Date.now()-T.current)/1e3)),1e3);return()=>clearInterval(x)},[h]);const _=n.totalTokens,k=n.promptTokens,P=n.completionTokens,A=r>0?Math.min(100,Math.round(_/r*100)):0,$=br(a),M=y==="normal"?"act":y,F=gr[M],ee=ke(M),N=ee==="plan"?"border-accent-blue/30 text-accent-blue":ee==="goal"?"border-accent-purple/30 text-accent-purple":"border-accent-green/30 text-accent-green";return l.jsxs("div",{className:"h-9 border-t border-dark-border bg-dark-bg flex items-center px-3 gap-2 shrink-0 select-none text-xs overflow-hidden",children:[l.jsx("span",{className:"font-semibold text-dark-text whitespace-nowrap",children:"DeepSeekCode"}),l.jsx("span",{className:`px-2 py-0.5 rounded-full border whitespace-nowrap ${N}`,children:F.label}),b&&l.jsx("span",{className:"px-2 py-0.5 rounded-full border border-accent-yellow/30 text-accent-yellow whitespace-nowrap",children:"Auto"}),l.jsx("span",{className:"text-dark-muted truncate max-w-[14rem]",children:o||t("common.connecting")}),l.jsxs("span",{className:"hidden md:inline-flex items-center gap-1 text-dark-muted whitespace-nowrap",children:[l.jsx("span",{className:"text-dark-text",children:qe(k)}),l.jsx("span",{className:"text-dark-muted/60",children:"+"}),l.jsx("span",{className:"text-accent-green",children:qe(P)}),l.jsx("span",{className:"text-dark-muted/60",children:"="}),l.jsx("span",{className:"text-dark-text",children:qe(_)}),l.jsx("span",{className:"text-dark-muted/60",children:"/"}),l.jsx("span",{children:qe(r)})]}),l.jsxs("span",{className:"inline-flex items-center gap-1 shrink-0",children:[l.jsx("span",{className:"w-16 lg:w-20 h-1.5 bg-dark-border/70 rounded-full overflow-hidden inline-flex",children:l.jsx("span",{className:`h-full transition-all rounded-full ${A>=90?"bg-accent-red":A>=70?"bg-accent-yellow":"bg-dark-text/70"}`,style:{width:`${A}%`}})}),l.jsxs("span",{className:A>=90?"text-accent-red font-bold":A>=70?"text-accent-yellow":"",children:[A,"%"]})]}),h&&l.jsxs(l.Fragment,{children:[l.jsxs("span",{className:"text-dark-text flex items-center gap-1 whitespace-nowrap",children:[l.jsx(it,{size:12,className:"animate-spin"}),xr(w)]}),$&&l.jsx("span",{className:"text-accent-purple whitespace-nowrap",children:$})]}),f>0&&l.jsxs("span",{className:"text-dark-text whitespace-nowrap",children:[f," agent",f>1?"s":""]}),l.jsx("div",{className:"flex-1"}),m&&l.jsxs("span",{className:"hidden xl:flex items-center gap-2 text-[11px] text-dark-text whitespace-nowrap",children:[l.jsx("span",{className:"text-dark-muted",children:"wf"}),l.jsx("span",{className:"font-mono",children:m.status}),l.jsxs("span",{children:[m.completedPhases,"/",m.totalPhases||0]}),l.jsx("span",{className:"text-dark-muted",children:qe(m.tokensUsed)})]}),u&&l.jsxs("span",{className:"hidden lg:flex items-center gap-2 text-[11px] text-dark-text whitespace-nowrap",children:[l.jsx("span",{children:"compact"}),l.jsxs("span",{children:[u.percent,"%"]}),l.jsx("span",{className:"w-20 h-1.5 bg-dark-border/70 rounded-full overflow-hidden",children:l.jsx("span",{className:"h-full bg-dark-text/70 rounded-full block",style:{width:`${u.percent}%`}})})]}),!u&&Date.now()<i&&d&&l.jsxs("span",{className:"hidden lg:inline text-dark-muted text-[11px] whitespace-nowrap",children:[d.originalCount," ","->"," ",d.compressedCount]}),(c==null?void 0:c.active)&&l.jsxs("span",{className:"text-accent-yellow text-[11px] whitespace-nowrap",children:[c.label," ",c.retryCount>0?`${c.retryCount}/${c.maxRetries}`:""]})]})}),ge=ue()((s,e)=>({status:null,branches:null,loading:!1,refreshing:!1,lastAction:null,busy:!1,refreshStatus:async()=>{const t=await z.git.status();return t.success&&t.data?(s({status:t.data}),t.data):(s({status:{available:!1,error:t.error||"Failed to load git status"}}),null)},refreshBranches:async()=>{const t=await z.git.branches();t.success&&t.data?s({branches:t.data}):s({branches:null})},refreshAll:async()=>{if(!e().refreshing){s({refreshing:!0,loading:e().status===null});try{await e().refreshStatus(),await e().refreshBranches()}finally{s({refreshing:!1,loading:!1})}}},commit:async t=>{s({busy:!0});const n=await z.git.commit({message:t});return s({busy:!1,lastAction:n.success&&n.data?n.data:{ok:!1,error:n.error||"Commit failed"}}),e().refreshStatus(),e().lastAction},push:async()=>{s({busy:!0});const t=await z.git.push();return s({busy:!1,lastAction:t.success&&t.data?t.data:{ok:!1,error:t.error||"Push failed"}}),e().refreshStatus(),e().lastAction},checkout:async t=>{s({busy:!0});const n=await z.git.checkout(t);return s({busy:!1,lastAction:n.success&&n.data?n.data:{ok:!1,error:n.error||"Checkout failed"}}),e().refreshAll(),e().lastAction}}));function bn(s){var e,t,n="";if(typeof s=="string"||typeof s=="number")n+=s;else if(typeof s=="object")if(Array.isArray(s)){var r=s.length;for(e=0;e<r;e++)s[e]&&(t=bn(s[e]))&&(n&&(n+=" "),n+=t)}else for(t in s)s[t]&&(n&&(n+=" "),n+=t);return n}function ua(){for(var s,e,t=0,n="",r=arguments.length;t<r;t++)(s=arguments[t])&&(e=bn(s))&&(n&&(n+=" "),n+=e);return n}function Ee(...s){return ua(s)}const Ot="dsc-git-commit-draft",pa=g.memo(function(){const{t:e}=ve(),t=ge(k=>k.status),n=ge(k=>k.branches),r=ge(k=>k.busy),o=ge(k=>k.lastAction),a=De(k=>k.workspaceDir),[i,d]=g.useState(!1),[c,u]=g.useState(""),[p,h]=g.useState(!1),[m,f]=g.useState(null),y=g.useRef(null);g.useEffect(()=>{ge.getState().refreshAll();const k=setInterval(()=>{document.visibilityState==="visible"&&ge.getState().refreshStatus()},3e4);return()=>clearInterval(k)},[]),g.useEffect(()=>{const k=localStorage.getItem(Ot);k&&u(k)},[]);const b=g.useCallback(async()=>{try{const{api:k}=await se(async()=>{const{api:A}=await Promise.resolve().then(()=>Br);return{api:A}},void 0),P=await k.git.prStatus();P.success&&f(P.data||{available:!1,message:""})}catch{}},[]);g.useEffect(()=>{b()},[b]),g.useEffect(()=>{if(!i)return;const k=P=>{y.current&&!y.current.contains(P.target)&&d(!1)};return document.addEventListener("mousedown",k),()=>document.removeEventListener("mousedown",k)},[i]);const w=g.useCallback(async()=>{const k=c.trim();if(!k){Q.warning(e("git.emptyCommitMsg"));return}const A=await ge.getState().commit(k);A.ok?(Q.success(e("git.commitSuccess")),h(!1),localStorage.removeItem(Ot),u("")):Q.error(A.error||e("git.commitFailed"))},[c,e]),S=g.useCallback(async()=>{const P=await ge.getState().push();P.ok?Q.success(e("git.pushSuccess")):Q.error(P.error||e("git.pushFailed"))},[e]),T=g.useCallback(async k=>{const A=await ge.getState().checkout(k);A.ok?Q.success(e("git.checkoutSuccess",{branch:k})):Q.error(A.error||e("git.checkoutFailed"))},[e]),_=t&&t.available===!1;return l.jsxs("div",{ref:y,className:"relative",children:[l.jsxs("button",{onClick:()=>d(k=>!k),className:Ee("flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-xs transition-colors",i?"bg-dark-hover text-dark-text":"text-dark-muted hover:bg-dark-hover hover:text-dark-text"),title:e("git.panelTitle"),"aria-expanded":i,children:[l.jsx(ks,{size:13,className:Ee(_?"text-dark-muted/50":"text-accent-blue")}),l.jsx("span",{className:"max-w-[120px] truncate font-mono",children:_?e("git.noRepo"):(t==null?void 0:t.branch)||"—"}),(t==null?void 0:t.dirty)&&l.jsxs("span",{className:"hidden sm:flex items-center gap-1 text-[10px] font-mono tabular-nums",children:[l.jsxs("span",{className:"text-accent-green",children:["+",t.totalAdded??0]}),l.jsxs("span",{className:"text-accent-red",children:["−",t.totalRemoved??0]})]}),l.jsx(pt,{size:11,className:Ee("transition-transform",i&&"rotate-180")})]}),i&&l.jsxs("div",{className:"absolute right-0 top-full z-40 mt-1.5 w-[380px] max-w-[90vw] rounded-xl border border-dark-border bg-dark-surface shadow-2xl overflow-hidden",children:[l.jsxs("div",{className:"flex items-center gap-2 px-3.5 py-2.5 border-b border-dark-border bg-dark-surface",children:[l.jsx(ks,{size:14,className:"text-accent-blue"}),l.jsx("span",{className:"text-xs font-medium text-dark-text",children:e("git.panelTitle")}),l.jsx("div",{className:"flex-1"}),l.jsx("button",{onClick:()=>void ge.getState().refreshAll(),className:"rounded p-1 text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors",title:e("git.refresh"),children:l.jsx(an,{size:12,className:Ee(ge.getState().refreshing&&"animate-spin")})})]}),_?l.jsxs("div",{className:"px-3.5 py-4 text-center",children:[l.jsx(Yn,{size:20,className:"mx-auto mb-2 text-dark-muted/50"}),l.jsx("div",{className:"text-xs text-dark-muted",children:e("git.notGitDesc")}),l.jsx("div",{className:"mt-1 text-[10px] font-mono text-dark-muted/60 break-all",children:a})]}):t?l.jsxs("div",{className:"p-3.5 space-y-3 max-h-[60vh] overflow-y-auto custom-scrollbar",children:[l.jsxs("div",{children:[l.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[l.jsx("span",{className:"text-[11px] text-dark-muted",children:e("git.changes")}),l.jsxs("span",{className:"text-[11px] font-mono tabular-nums",children:[l.jsxs("span",{className:"text-accent-green",children:["+",t.totalAdded??0]}),l.jsx("span",{className:"text-dark-muted/40",children:" / "}),l.jsxs("span",{className:"text-accent-red",children:["−",t.totalRemoved??0]})]})]}),l.jsxs("div",{className:"space-y-0.5 max-h-40 overflow-y-auto custom-scrollbar",children:[(t.changes||[]).slice(0,30).map(k=>l.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] font-mono",children:[l.jsx("span",{className:Ee("w-6 shrink-0 rounded px-1 text-center text-[9px]",k.status.includes("?")?"bg-accent-purple/15 text-accent-purple":k.status===k.status.toUpperCase()&&k.status.trim()?"bg-accent-green/15 text-accent-green":"bg-accent-yellow/15 text-accent-yellow"),children:k.status}),l.jsx("span",{className:"flex-1 truncate text-dark-text",children:k.path}),l.jsxs("span",{className:"shrink-0 text-[10px] tabular-nums text-dark-muted/60",children:[k.added>0&&l.jsxs("span",{className:"text-accent-green",children:["+",k.added]}),k.removed>0&&l.jsxs("span",{className:"text-accent-red",children:["−",k.removed]})]})]},k.path)),(t.changes||[]).length===0&&l.jsx("div",{className:"py-2 text-center text-[11px] text-dark-muted/60",children:e("git.clean")})]})]}),l.jsxs("div",{children:[l.jsx("div",{className:"text-[11px] text-dark-muted mb-1",children:e("git.branch")}),l.jsx("div",{className:"flex flex-wrap gap-1",children:((n==null?void 0:n.branches)||[t.branch||""]).slice(0,8).map(k=>l.jsx("button",{onClick:()=>k!==t.branch&&T(k),disabled:k===t.branch,className:Ee("rounded-md px-2 py-1 text-[11px] font-mono transition-colors",k===t.branch?"bg-accent-blue/10 text-accent-blue cursor-default":"bg-dark-bg border border-dark-border text-dark-muted hover:border-accent-blue/40 hover:text-dark-text"),children:k},k))}),(t.ahead??0)>0||(t.behind??0)>0?l.jsxs("div",{className:"mt-1 text-[10px] text-dark-muted/70",children:[(t.ahead??0)>0&&l.jsxs("span",{className:"text-accent-green",children:["↑ ",t.ahead," "]}),(t.behind??0)>0&&l.jsxs("span",{className:"text-accent-yellow",children:["↓ ",t.behind]}),e("git.upstream")]}):null]}),l.jsx("div",{children:p?l.jsxs("div",{className:"space-y-1.5",children:[l.jsx("textarea",{value:c,onChange:k=>{u(k.target.value),localStorage.setItem(Ot,k.target.value)},placeholder:e("git.commitPlaceholder"),rows:2,className:"w-full rounded-md border border-dark-border bg-dark-bg px-2.5 py-1.5 text-xs text-dark-text placeholder-dark-muted/50 resize-none focus:outline-none focus:border-accent-blue/50"}),l.jsxs("div",{className:"flex gap-1.5",children:[l.jsxs("button",{onClick:w,disabled:r||!c.trim(),className:"flex flex-1 items-center justify-center gap-1 rounded-md bg-accent-green/15 text-accent-green px-2.5 py-1.5 text-xs hover:bg-accent-green/25 transition-colors disabled:opacity-40",children:[r?l.jsx(it,{size:12,className:"animate-spin"}):l.jsx(Ss,{size:12}),e("git.commitConfirm")]}),l.jsx("button",{onClick:()=>h(!1),className:"rounded-md px-2.5 py-1.5 text-xs text-dark-muted hover:bg-dark-hover transition-colors",children:e("common.cancel")})]})]}):l.jsxs("div",{className:"flex gap-1.5",children:[l.jsxs("button",{onClick:()=>h(!0),disabled:r,className:"flex flex-1 items-center justify-center gap-1.5 rounded-md bg-accent-blue/10 text-accent-blue px-2.5 py-1.5 text-xs hover:bg-accent-blue/20 transition-colors disabled:opacity-50",children:[l.jsx(Ss,{size:13}),e("git.commit")]}),l.jsxs("button",{onClick:S,disabled:r||!t.dirty,className:"flex items-center justify-center gap-1.5 rounded-md bg-dark-bg border border-dark-border text-dark-muted px-2.5 py-1.5 text-xs hover:border-accent-green/40 hover:text-accent-green transition-colors disabled:opacity-40",children:[l.jsx(Qn,{size:13}),e("git.push")]})]})}),l.jsxs("div",{className:"flex items-center gap-1.5 rounded-md bg-dark-bg border border-dark-border px-2.5 py-2",children:[l.jsx(Ct,{size:13,className:"text-accent-purple shrink-0"}),l.jsx("span",{className:"text-[11px] text-dark-muted truncate",children:m?m.available?e("git.prReady"):m.message||e("git.prUnavailable"):e("git.prLoading")})]}),l.jsxs("div",{className:"rounded-md bg-dark-bg border border-dark-border px-2.5 py-2 space-y-0.5",children:[l.jsx("div",{className:"text-[10px] text-dark-muted",children:e("git.environment")}),l.jsx("div",{className:"text-[11px] font-mono text-dark-text/80 break-all",children:a||"—"}),t.lastCommit&&l.jsxs("div",{className:"text-[10px] font-mono text-dark-muted/60 truncate",children:[t.lastCommit.hash.slice(0,7)," ",t.lastCommit.subject]})]}),o&&l.jsxs("div",{className:Ee("flex items-center gap-1.5 text-[11px]",o.ok?"text-accent-green":"text-accent-red"),children:[o.ok?l.jsx(nn,{size:12}):l.jsx(Xn,{size:12}),l.jsx("span",{className:"truncate",children:o.ok?e("git.ok"):o.error||""})]})]}):l.jsx("div",{className:"px-3.5 py-4 text-center text-xs text-dark-muted",children:e("git.loading")})]})]})}),ha={info:ln,success:Zn,warning:ss,error:es},ma={info:"border-accent-blue/30 bg-accent-blue/10 text-accent-blue",success:"border-accent-green/30 bg-accent-green/10 text-accent-green",warning:"border-accent-yellow/30 bg-accent-yellow/10 text-accent-yellow",error:"border-accent-red/30 bg-accent-red/10 text-accent-red"},fa=g.memo(function(){const{toasts:e,dismissToast:t}=tt();return e.length===0?null:l.jsx("div",{className:"fixed bottom-20 right-4 z-[100] flex flex-col gap-2 max-w-sm",children:e.map(n=>{const r=ha[n.type];return l.jsxs("div",{className:`flex items-start gap-2 px-3 py-2.5 rounded-lg border shadow-lg animate-fade-in-up ${ma[n.type]}`,children:[l.jsx(r,{size:16,className:"shrink-0 mt-0.5"}),l.jsx("span",{className:"text-xs flex-1",children:n.message}),l.jsx("button",{onClick:()=>t(n.id),className:"shrink-0 p-0.5 rounded hover:bg-dark-hover/50 transition-colors",children:l.jsx($e,{size:12})})]},n.id)})})}),ga={critical:{icon:eo,border:"border-accent-red",bg:"bg-accent-red/10",text:"text-accent-red"},error:{icon:es,border:"border-accent-red/60",bg:"bg-accent-red/5",text:"text-accent-red"},warning:{icon:ss,border:"border-accent-yellow/60",bg:"bg-accent-yellow/5",text:"text-accent-yellow"},info:{icon:ln,border:"border-accent-blue/60",bg:"bg-accent-blue/5",text:"text-accent-blue"}},ya=g.memo(function(){const e=Ie(n=>n.errors.filter(r=>!r.dismissed)),t=Ie(n=>n.dismiss);return e.length===0?null:l.jsx("div",{className:"fixed bottom-4 right-4 z-[110] flex flex-col gap-2 max-w-sm",children:e.map(n=>{const r=ga[n.level],o=r.icon;return l.jsx(ba,{entry:n,icon:o,config:r,onDismiss:()=>t(n.id)},n.id)})})});function ba({entry:s,icon:e,config:t,onDismiss:n}){const[r,o]=g.useState(!1);return l.jsxs("div",{className:`flex flex-col px-3 py-2.5 rounded-lg border shadow-lg animate-fade-in-up ${t.bg} ${t.border}`,children:[l.jsxs("div",{className:"flex items-start gap-2",children:[l.jsx(e,{size:16,className:`shrink-0 mt-0.5 ${t.text}`}),l.jsx("span",{className:`text-xs flex-1 ${t.text}`,children:s.title}),l.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[s.detail&&l.jsx("button",{onClick:()=>o(!r),className:"p-0.5 rounded hover:bg-dark-hover/50 transition-colors",children:r?l.jsx(pt,{size:12}):l.jsx(on,{size:12})}),l.jsx("button",{onClick:n,className:"p-0.5 rounded hover:bg-dark-hover/50 transition-colors",children:l.jsx($e,{size:12})})]})]}),r&&s.detail&&l.jsx("div",{className:"mt-1.5 ml-6 text-[11px] text-dark-muted whitespace-pre-wrap break-words leading-relaxed border-t border-dark-border/50 pt-1.5",children:s.detail}),s.action&&l.jsx("button",{onClick:s.action.onClick,className:"mt-1.5 ml-6 self-start text-[11px] px-2 py-0.5 rounded bg-dark-hover hover:bg-dark-border transition-colors",children:s.action.label})]})}function xa(s){const{t:e}=ve(),{setActiveTab:t,createNewSession:n,clearMessages:r,setTheme:o,setThemePreset:a,toggleTerminal:i,setLogs:d,setUnreadLogs:c}=s,u=ns(x=>x.backendCommands),p=Array.isArray(u)?u:[],[h,m]=g.useState(!1),[f,y]=g.useState(""),[b,w]=g.useState(0),S=g.useRef(null),T=g.useCallback((x,j)=>{const D=K.getState().activeSessionId;return D?(L.setSessionId(D),L.send({type:"command_execute",sessionId:D,data:JSON.stringify({command:`/${x}`,args:j||""})}),{success:!0,message:e("slashCommands.sent_command")+`/${x}`}):{success:!1,message:e("slashCommands.noActiveSession")}},[e]),_=g.useMemo(()=>[{id:"chat",name:"chat",description:e("slashCommands.chat_desc"),icon:"💬",local:!0,action:()=>(t("chat"),{success:!0,message:e("slashCommands.chat_result")})},{id:"terminal",name:"terminal",description:e("slashCommands.terminal_desc"),icon:"💻",local:!0,action:()=>(t("terminal"),{success:!0,message:e("slashCommands.terminal_result")})},{id:"files",name:"files",description:e("slashCommands.files_desc"),icon:"📁",local:!0,action:()=>(t("files"),{success:!0,message:e("slashCommands.files_result")})},{id:"models",name:"models",description:e("slashCommands.models_desc"),icon:"🧠",local:!0,action:()=>(t("models"),{success:!0,message:e("slashCommands.models_result")})},{id:"tools",name:"tools",description:e("slashCommands.tools_desc"),icon:"🔧",local:!0,action:()=>(t("tools"),{success:!0,message:e("slashCommands.tools_result")})},{id:"skills",name:"skills",description:e("slashCommands.skills_desc"),icon:"🎯",local:!0,action:()=>(t("skills"),{success:!0,message:e("slashCommands.skills_result")})},{id:"agents",name:"agents",description:e("slashCommands.agents_desc"),icon:"👥",local:!0,action:()=>(t("agents"),{success:!0,message:e("slashCommands.agents_result")})},{id:"settings",name:"settings",description:e("slashCommands.settings_desc"),icon:"⚙️",local:!0,action:()=>(t("settings"),{success:!0,message:e("slashCommands.settings_result")})},{id:"logs",name:"logs",description:e("slashCommands.logs_desc"),icon:"📜",local:!0,action:()=>(t("logs"),c(0),{success:!0,message:e("slashCommands.logs_result")})},{id:"new",name:"new",description:e("slashCommands.new_desc"),icon:"✨",local:!0,action:()=>(n(),{success:!0,message:e("slashCommands.new_result")})},{id:"clear",name:"clear",description:e("slashCommands.clear_desc"),icon:"🗑️",local:!0,action:()=>(r(),{success:!0,message:e("slashCommands.clear_result")})},{id:"theme",name:"theme",description:e("slashCommands.theme_desc"),args:"<dark|light|auto|preset-name>",icon:"🎨",local:!0,action:x=>{const j=x.trim().toLowerCase();if(["dark","light","auto"].includes(j))return o(j),{success:!0,message:e("slashCommands.theme_result")+j};if(rt[j])return a?(a(j),{success:!0,message:e("slashCommands.theme_preset_result")+rt[j].nameKey}):{success:!1,message:e("slashCommands.theme_preset_unavailable")};const D=Object.keys(rt).join("|");return{success:!1,message:e("slashCommands.theme_error",{presets:D})}}},{id:"terminal-toggle",name:"terminal-toggle",description:e("slashCommands.toggle_terminal_desc"),icon:"🔲",local:!0,action:()=>(i(),{success:!0,message:e("slashCommands.toggle_terminal_result")})},{id:"clear-logs",name:"clear-logs",description:e("slashCommands.logs_clear_desc"),icon:"📭",local:!0,action:()=>(d([]),c(0),{success:!0,message:e("slashCommands.logs_clear_result")})},{id:"doctor",name:"doctor",description:e("slashCommands.doctor_desc"),icon:"🩺",local:!1,action:()=>T("doctor")},{id:"compact",name:"compact",description:e("slashCommands.compact_desc"),args:"[aggressive|summary]",icon:"🗜️",local:!1,action:x=>T("compact",x)},{id:"help",name:"help",description:e("slashCommands.help_desc"),icon:"❓",local:!1,action:()=>T("help")},{id:"cost",name:"cost",description:e("slashCommands.token_desc"),args:"[detail|reset]",icon:"💰",local:!1,action:x=>T("cost",x)},{id:"model",name:"model",description:e("slashCommands.model_desc"),args:"[model-name]",icon:"🤖",local:!1,action:x=>T("model",x)},{id:"status",name:"status",description:e("slashCommands.status_desc"),icon:"📊",local:!1,action:()=>T("status")},{id:"config",name:"config",description:e("slashCommands.config_desc"),args:"<get|set|list|delete> [key] [value]",icon:"🔧",local:!1,action:x=>T("config",x)},{id:"exit",name:"exit",description:e("slashCommands.exit_desc"),icon:"🚪",local:!1,action:()=>{const x=K.getState().activeSessionId;return x&&(L.setSessionId(x),L.send({type:"exit",sessionId:x})),{success:!0,message:e("slashCommands.exit_result")}}},{id:"test",name:"test",description:e("slashCommands.benchmark_desc"),args:"[simple|medium|complex|full|list]",icon:"🧪",local:!1,action:x=>T("test",x)}],[t,n,r,o,a,i,d,c,T,e]),k=g.useMemo(()=>p.map(x=>{const j=e(`slashCommands.${x.name}_desc`,x.description||x.usage||"");return{id:`backend-${x.name}`,name:x.name,description:j,icon:"🔌",local:!1,action:D=>{const W=K.getState().activeSessionId;return W?(L.setSessionId(W),L.send({type:"command_execute",sessionId:W,data:JSON.stringify({command:`/${x.name}`,args:D||""})}),{success:!0,message:e("slashCommands.sent_command")+`/${x.name}`}):{success:!1,message:e("slashCommands.noActiveSession")}}}}),[p,e]),P=g.useMemo(()=>{const x=new Set;return[..._,...k].filter(j=>x.has(j.name)?!1:(x.add(j.name),!0))},[_,k]),A=g.useMemo(()=>{if(!f)return P;const x=f.toLowerCase();return P.filter(j=>j.name.toLowerCase().includes(x)||j.description.toLowerCase().includes(x))},[P,f]),$=g.useCallback(()=>{m(!0),y(""),w(0)},[]),M=g.useCallback(()=>{m(!1),y(""),w(0)},[]),F=g.useCallback(()=>{w(x=>x>=A.length-1?0:x+1)},[A.length]),ee=g.useCallback(()=>{w(x=>x<=0?A.length-1:x-1)},[A.length]),N=g.useCallback((x,j)=>{const D=x.action(j);return M(),D},[M]);return g.useEffect(()=>{if(h&&S.current){const x=S.current.querySelector(`[data-index="${b}"]`);x&&x.scrollIntoView({block:"nearest"})}},[b,h]),{isOpen:h,filter:f,setFilter:y,selectedIndex:b,setSelectedIndex:w,filteredCommands:A,openMenu:$,closeMenu:M,selectNext:F,selectPrev:ee,executeCommand:N,containerRef:S,commands:_}}function ka({open:s,onClose:e,options:t}){const{t:n}=ve(),{filter:r,setFilter:o,filteredCommands:a,selectedIndex:i,setSelectedIndex:d,selectNext:c,selectPrev:u,executeCommand:p,openMenu:h,closeMenu:m}=xa(t),f=g.useRef(null),y=g.useRef(null),[b,w]=g.useState(!1);if(g.useEffect(()=>{s?(h(),w(!1),setTimeout(()=>{var _;return(_=f.current)==null?void 0:_.focus()},0)):m()},[s,h,m]),g.useEffect(()=>{if(!s||!y.current)return;const _=y.current.querySelector(`[data-cmd-index="${i}"]`);_&&_.scrollIntoView({block:"nearest"})},[i,s]),!s)return null;const S=_=>{_.local||(w(!0),Q.info(n("palette.running")));const k=p(_,"");_.local&&(k!=null&&k.message)&&Q.success(k.message),e()},T=_=>{if(_.key==="ArrowDown")_.preventDefault(),c();else if(_.key==="ArrowUp")_.preventDefault(),u();else if(_.key==="Enter"){_.preventDefault();const k=a[i];k&&S(k)}else _.key==="Escape"&&(_.preventDefault(),e())};return l.jsx("div",{className:"fixed inset-0 z-[100] flex items-start justify-center bg-black/50 backdrop-blur-sm pt-[12vh] px-4 animate-fade-in",onClick:e,role:"dialog","aria-modal":"true","aria-label":n("a11y.commandPalette"),children:l.jsxs("div",{className:"w-full max-w-xl bg-dark-surface border border-dark-border rounded-xl shadow-2xl overflow-hidden",onClick:_=>_.stopPropagation(),children:[l.jsxs("div",{className:"flex items-center gap-2 px-4 py-3 border-b border-dark-border",children:[l.jsx(to,{size:16,className:"text-dark-muted shrink-0","aria-hidden":"true"}),l.jsx("input",{ref:f,value:r,onChange:_=>{o(_.target.value),d(0)},onKeyDown:T,placeholder:n("palette.placeholder"),"aria-label":n("palette.placeholder"),className:"flex-1 bg-transparent text-sm text-dark-text placeholder-dark-muted outline-none"}),b&&l.jsx("span",{className:"text-[10px] text-accent-blue animate-pulse-soft shrink-0",children:n("palette.running")})]}),l.jsx("div",{ref:y,className:"max-h-[50vh] overflow-y-auto custom-scrollbar py-1",children:a.length===0?l.jsx("div",{className:"px-4 py-8 text-center text-sm text-dark-muted",children:n("palette.empty")}):a.map((_,k)=>l.jsxs("button",{"data-cmd-index":k,onClick:()=>S(_),onMouseEnter:()=>d(k),className:`w-full px-4 py-2.5 flex items-center gap-3 text-left transition-colors ${k===i?"bg-accent-blue/10 border-l-2 border-accent-blue":"border-l-2 border-transparent hover:bg-dark-hover"}`,children:[l.jsx("span",{className:"text-lg shrink-0","aria-hidden":"true",children:_.icon}),l.jsxs("div",{className:"flex-1 min-w-0",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs("span",{className:"text-sm font-medium text-dark-text",children:["/",_.name]}),_.args&&l.jsx("span",{className:"text-xs text-dark-muted",children:_.args}),!_.local&&l.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-blue/20 text-accent-blue shrink-0",children:n("slashCommands.backend")})]}),l.jsx("div",{className:"text-xs text-dark-muted truncate",children:_.description})]}),k===i&&l.jsx(so,{size:14,className:"text-dark-muted shrink-0","aria-hidden":"true"})]},_.id))}),l.jsx("div",{className:"px-4 py-2 border-t border-dark-border text-[10px] text-dark-muted bg-dark-bg",children:n("palette.hint")})]})})}function Sa({isOpen:s,onClose:e,title:t,children:n,size:r="md",className:o}){if(g.useEffect(()=>{const i=d=>{d.key==="Escape"&&(d.preventDefault(),d.stopPropagation(),e())};return s&&(document.addEventListener("keydown",i),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",i),document.body.style.overflow=""}},[s,e]),!s)return null;const a={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl"};return l.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4",children:[l.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:e}),l.jsxs("div",{className:Ee("relative w-full mx-4 bg-dark-surface border border-dark-border rounded-xl shadow-2xl animate-fade-in","max-h-[calc(100vh-2rem)] flex flex-col overflow-hidden",a[r],o),children:[t&&l.jsxs("div",{className:"flex shrink-0 items-center justify-between px-6 py-4 border-b border-dark-border",children:[l.jsx("h2",{className:"text-lg font-semibold text-dark-text",children:t}),l.jsx("button",{onClick:e,"aria-label":"Close",className:"p-1 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors",children:l.jsx($e,{className:"w-5 h-5","aria-hidden":"true"})})]}),l.jsx("div",{className:"min-h-0 overflow-y-auto custom-scrollbar p-6",children:n})]})]})}function Ce({keys:s,label:e}){return l.jsxs("div",{className:"flex items-center justify-between py-2 border-b border-dark-border/50 last:border-0",children:[l.jsx("span",{className:"text-sm text-dark-text",children:e}),l.jsx("span",{className:"flex items-center gap-1",children:s.map(t=>l.jsx("kbd",{className:"px-2 py-0.5 text-xs font-mono bg-dark-bg rounded border border-dark-border text-dark-muted",children:t},t))})]})}function va({open:s,onClose:e}){const{t}=ve(),n=navigator.platform.toLowerCase().includes("mac")?"⌘":"Ctrl";return l.jsx(Sa,{isOpen:s,onClose:e,title:t("shortcuts.title"),size:"md",children:l.jsxs("div",{className:"space-y-0.5",children:[l.jsx(Ce,{keys:[n,"K"],label:t("shortcuts.commandPalette")}),l.jsx(Ce,{keys:[n,"L"],label:t("shortcuts.clearLogs")}),l.jsx(Ce,{keys:[n,"/"],label:t("shortcuts.help")}),l.jsx(Ce,{keys:[n,"Enter"],label:t("shortcuts.submit")}),l.jsx(Ce,{keys:["Shift","Enter"],label:t("shortcuts.newline")}),l.jsx(Ce,{keys:["/"],label:t("shortcuts.slashCommand")}),l.jsx(Ce,{keys:["@"],label:t("shortcuts.fileRef")}),l.jsx(Ce,{keys:["Esc"],label:t("shortcuts.closeDialog")}),l.jsx(Ce,{keys:["Esc","Esc"],label:t("shortcuts.stopGen")})]})})}const wa={"pull-requests":Ct,scheduled:ts,plugins:_t},Ca={"pull-requests":"Agent 发起的 PR 列表将在这里展示。配置 git 远端与 PR 提供方(如 GitHub CLI)后可用。",scheduled:"定时任务(如每晚跑测试数据)将在这里管理。",plugins:"插件管理入口。可启停文件处理技能等扩展能力。"};function _a({tabId:s}){const{t:e}=ve(),t=wa[s]||_t;return l.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 px-6 text-center",children:[l.jsx("div",{className:"flex h-14 w-14 items-center justify-center rounded-2xl border border-dark-border bg-dark-surface",children:l.jsx(t,{size:24,className:"text-accent-blue"})}),l.jsx("h2",{className:"text-sm font-medium text-dark-text",children:e(`nav.${s}`)}),l.jsx("p",{className:"max-w-sm text-xs leading-relaxed text-dark-muted",children:Ca[s]||"功能开发中…"}),l.jsx("span",{className:"mt-1 rounded-full border border-accent-blue/30 bg-accent-blue/10 px-2.5 py-0.5 text-[10px] text-accent-blue",children:e("placeholder.comingSoon")})]})}const Ta=g.lazy(()=>se(()=>import("./ModelsView-CsOKSn0l.js"),__vite__mapDeps([0,1,2,3,4,5])).then(s=>({default:s.ModelsView}))),Na=g.lazy(()=>se(()=>import("./ToolsView-CHJ8k68t.js"),__vite__mapDeps([6,1,2,4,5])).then(s=>({default:s.ToolsView}))),Ba=g.lazy(()=>se(()=>import("./AgentFlowView-CZQeHyLi.js"),__vite__mapDeps([7,1,2,4,5])).then(s=>({default:s.AgentFlowView}))),ja=g.lazy(()=>se(()=>import("./SkillsView-DsRZm-UY.js"),__vite__mapDeps([8,1,2,3,4,5])).then(s=>({default:s.SkillsView}))),Ea=g.lazy(()=>se(()=>import("./AgentsView-CfQ-EXdY.js"),__vite__mapDeps([9,1,2,4,5])).then(s=>({default:s.AgentsView}))),Aa=g.lazy(()=>se(()=>import("./HookConfigView-F6uvScie.js"),__vite__mapDeps([10,1,2,5,4])).then(s=>({default:s.HookConfigView}))),Pa=g.lazy(()=>se(()=>import("./FileTreeView-HfjwdQz9.js"),__vite__mapDeps([11,1,2,4,5])).then(s=>({default:s.FileTreeView}))),Ra=g.lazy(()=>se(()=>import("./TerminalView-CMmJ55Zj.js"),__vite__mapDeps([12,1,2,13,4,5,14])).then(s=>({default:s.TerminalView}))),La=g.lazy(()=>se(()=>import("./SessionGrid-DPDDTcff.js"),__vite__mapDeps([15,1,2,4,16,5])).then(s=>({default:s.SessionGrid}))),Ia=g.lazy(()=>se(()=>import("./SettingsPanel-D96vsDCf.js"),__vite__mapDeps([17,1,2,4,5])).then(s=>({default:s.SettingsPanel}))),Ma=g.lazy(()=>se(()=>Promise.resolve().then(()=>Dr),void 0).then(s=>({default:s.LogsPanel}))),Oa=g.lazy(()=>se(()=>import("./HookApprovalModal-dGHgJ_pM.js"),__vite__mapDeps([18,1,2,16,4,5])).then(s=>({default:s.HookApprovalModal}))),$a=g.lazy(()=>se(()=>import("./AskQuestionModal-DGd7VFFR.js"),__vite__mapDeps([19,1,2,4,5])).then(s=>({default:s.AskQuestionModal}))),Da=g.lazy(()=>se(()=>import("./ChannelConfigView-BXvSck5e.js"),__vite__mapDeps([20,1,2,4,5])).then(s=>({default:s.ChannelConfigView}))),Fa=g.lazy(()=>se(()=>import("./InboxView-DQ1i65AD.js"),__vite__mapDeps([21,1,2,4,5])).then(s=>({default:s.InboxView}))),Wa=g.lazy(()=>se(()=>import("./AutomationView-3dP2f6BZ.js"),__vite__mapDeps([22,1,2,4,5])).then(s=>({default:s.AutomationView}))),Ha=g.lazy(()=>se(()=>import("./AuditView-BVyD7ivS.js"),__vite__mapDeps([23,1,2,4,5])).then(s=>({default:s.AuditView}))),Js=()=>l.jsx("div",{className:"flex-1 flex items-center justify-center bg-dark-bg",children:l.jsx("div",{className:"w-5 h-5 border-2 border-accent-blue border-t-transparent rounded-full animate-spin"})}),$t={chat:"nav.chat",terminal:"nav.terminal",files:"nav.files",models:"nav.models",tools:"nav.tools",skills:"nav.skills",agents:"nav.agents",hooks:"nav.hooks",channels:"nav.channels",inbox:"nav.inbox",audit:"nav.audit",settings:"nav.settings",logs:"nav.logs","pull-requests":"nav.pullRequests",scheduled:"nav.scheduled",plugins:"nav.plugins"},Ua=[{id:"chat",title:"对话"},{id:"terminal",title:"终端"},{id:"files",title:"文件"},{id:"models",title:"模型"},{id:"tools",title:"工具"},{id:"skills",title:"技能"},{id:"agents",title:"Agents"},{id:"hooks",title:"Hooks"},{id:"channels",title:"频道"},{id:"inbox",title:"Inbox"},{id:"audit",title:"审计"},{id:"scheduled",title:"自动化"},{id:"logs",title:"日志"},{id:"settings",title:"设置"},{id:"pull-requests",title:"Pull requests"},{id:"plugins",title:"Plugins"}],za={chat:rn,terminal:ho,files:po,models:uo,tools:co,skills:lo,agents:io,hooks:ao,channels:ro,inbox:oo,audit:Me,logs:Me,settings:no,"pull-requests":Ct,scheduled:ts,plugins:_t};function Ka(){const[s,e]=g.useState("chat"),[t,n]=g.useState(!1),[r,o]=g.useState([]),[,a]=g.useState(0),[i,d]=g.useState(!1),[c,u]=g.useState(!1),[p,h]=g.useState(!1),[m,f]=g.useState(!1),[y,b]=g.useState(null),[w,S]=g.useState(!1),[T,_]=g.useState(!1),[k,P]=g.useState(!0),[A,$]=g.useState(()=>window.innerWidth>=1400),[M,F]=g.useState(()=>localStorage.getItem("dsc-sidebar-collapsed")==="1"),ee=g.useCallback(()=>{F(C=>(localStorage.setItem("dsc-sidebar-collapsed",C?"0":"1"),!C))},[]);g.useEffect(()=>{const C=window.matchMedia("(min-width: 1400px)"),E=G=>$(G.matches);return C.addEventListener("change",E),()=>C.removeEventListener("change",E)},[]);const{t:N,i18n:x}=ve(),{toggleTerminal:j}=pr(),{theme:D,setTheme:W,setThemePreset:B,language:I,workspaceDir:O,setWorkspaceDir:ae}=De(),J=Te();g.useEffect(()=>{I&&x.language!==I&&x.changeLanguage(I)},[I,x]);const ce=g.useMemo(()=>Ua.filter(C=>!(C.id==="terminal"&&y===!1)),[y]),ne=g.useMemo(()=>ce.map(C=>({...C,iconComponent:za[C.id]})),[ce]),de=g.useCallback(C=>{g.startTransition(()=>{e(C)})},[]);g.useEffect(()=>{const C=G=>{const H=G.message||N("common.unknownError"),pe=G.filename||"global";pe.includes("chrome-extension://")||pe.includes("moz-extension://")||o(te=>[...te,{id:`error-${Date.now()}-${crypto.randomUUID()}`,level:"error",source:"Browser",message:`${N("toast.uncaughtError")}${H}`,timestamp:Date.now()}].slice(-500))},E=G=>{var pe;const H=((pe=G.reason)==null?void 0:pe.message)||G.reason||N("toast.unknownReason");o(te=>[...te,{id:`rejection-${Date.now()}-${crypto.randomUUID()}`,level:"error",source:"Promise",message:`${N("toast.uncaughtRejection")}${H}`,timestamp:Date.now()}].slice(-500))};return window.addEventListener("error",C),window.addEventListener("unhandledrejection",E),()=>{window.removeEventListener("error",C),window.removeEventListener("unhandledrejection",E)}},[N]);const{sessionTabs:Ue,activeSessionId:Ne,setActiveSession:is,addSessionTab:Nt,closeSessionTab:ls,renameSessionTab:cs,getVisibleSessionTabs:Nn,autoNameSession:ds}=K(),{clearMessages:us}=U(),{customTheme:Bn,customThemeEnabled:jn,themePresetId:En}=De();ca({theme:D,themePresetId:En,customTheme:Bn,customThemeEnabled:jn}),ia({activeTab:s,setLogs:o,setUnreadLogs:a}),g.useEffect(()=>{v.get("/api/terminal/status").then(C=>b(C.success&&C.data?C.data.ttydAvailable!==!1:!1)).catch(()=>b(!1))},[]),g.useEffect(()=>{const C=E=>{const G=E.detail;G&&G!==s&&de(G)};return window.addEventListener("switch-tab",C),()=>window.removeEventListener("switch-tab",C)},[s,de]),g.useEffect(()=>{const C=window.location.hash.replace(/^#\/?/,"");!C||!(C in $t)||de(C)},[]),g.useEffect(()=>{const C=L.onOpen(()=>{n(!0),Q.success(N("toast.backendConnected"))}),E=L.onClose(()=>{t&&Q.warning(N("toast.backendDisconnected")),n(!1)});return()=>{C(),E()}},[t,N]),g.useEffect(()=>{Ue.length===0&&Nt(N("chat.defaultSessionTitle",{n:1}))},[]),g.useEffect(()=>{const C=()=>u(!0);return window.addEventListener("hook-approval-required",C),()=>window.removeEventListener("hook-approval-required",C)},[]),g.useEffect(()=>{const C=()=>h(!0);return window.addEventListener("ask-question-required",C),()=>window.removeEventListener("ask-question-required",C)},[]),g.useEffect(()=>{J.autoMode&&J.pendingApprovals.length>0&&u(!1),J.pendingApprovals.length>0&&!J.autoMode&&u(!0)},[J.autoMode,J.pendingApprovals.length]);const ps=g.useRef(0);g.useEffect(()=>{const C=E=>{var re,he;if(E.key!=="Escape"||E.defaultPrevented)return;const G=(re=E.target)==null?void 0:re.tagName;if(G==="INPUT"||G==="TEXTAREA"||(he=E.target)!=null&&he.isContentEditable)return;const H=U.getState(),te=K.getState().activeSessionId;if(!te||!H.isGenerating(te))return;E.preventDefault();const fe=Date.now(),be=ps.current;ps.current=fe,be>0&&fe-be<500?(L.send({type:"stop",sessionId:te}),Q.info(N("toast.terminated"))):(L.send({type:"pause",sessionId:te}),Q.info(N("toast.paused")))};return window.addEventListener("keydown",C),()=>window.removeEventListener("keydown",C)},[N]);const Pe=g.useCallback(()=>{g.startTransition(()=>{const C=Nt(void 0,O);L.setSessionId(C),wt.getState().setMode("act"),de("chat")})},[Nt,O,de]),hs=g.useCallback(C=>{is(C),L.setSessionId(C)},[is]),ms=g.useCallback(C=>{ls(C)},[ls]),fs=g.useCallback((C,E)=>{cs(C,E)},[cs]),Bt=g.useCallback(()=>{Ne&&us(Ne)},[Ne,us]);g.useEffect(()=>{if(!Ne)return;const C=U.getState().messagesBySession[Ne];C&&C.length>0&&V.getState().recalculateFromMessages(C)},[Ne]);const jt=g.useCallback(async(C,E,G,H)=>{if(!E.trim())return;U.getState().isGenerating(C)&&(console.warn(`[sendMessage] Session ${C} stuck in generating state — force-ending`),U.getState().endGeneration(C,"Force-ended: new message"));const te=wt.getState();U.getState().resumeGeneration(C),L.setSessionId(C),U.getState().getMessages(C).some(Be=>Be.type==="user")||ds(C,E.trim());let re=E.trim();if(G&&G.length>0){const Be=[];for(const ze of G)try{const Ke=await z.files.read(ze),ys=Ke.success&&Ke.data?Ke.data:null;if(ys){re=re.replace(ze,"");const Dn=ze.split(".").pop()||"";Be.push(`<context ref="${ze}">
|
|
14
14
|
\`\`\`${Dn}
|
|
15
15
|
${ys}
|
|
16
16
|
\`\`\`
|