neoctl-web 0.1.19 → 0.1.20
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var wg=Object.defineProperty;var _g=(t,r,s)=>r in t?wg(t,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[r]=s;var Se=(t,r,s)=>_g(t,typeof r!="symbol"?r+"":r,s);import{w as Oe,o as Ht,a as m,c as b,t as S,b as C,r as pr,d as ye,F as ee,e as ge,f as l,g as ne,u as $e,h as Wa,i as xg,s as Sg,j as V,_ as Ar,k as Vo,n as Y,l as Ye,m as Jn,p as Be,v as Eg,q as rt,x as ut,y as ke,z as ot,A as Tg,B as Fe,C as Ka,D as Ge,E as Va,G as Za,H as Et,I as st,T as ct,J as Ig,K as Ag,L as Cg,M as Qa,N as Ya}from"./index-
|
|
1
|
+
var wg=Object.defineProperty;var _g=(t,r,s)=>r in t?wg(t,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[r]=s;var Se=(t,r,s)=>_g(t,typeof r!="symbol"?r+"":r,s);import{w as Oe,o as Ht,a as m,c as b,t as S,b as C,r as pr,d as ye,F as ee,e as ge,f as l,g as ne,u as $e,h as Wa,i as xg,s as Sg,j as V,_ as Ar,k as Vo,n as Y,l as Ye,m as Jn,p as Be,v as Eg,q as rt,x as ut,y as ke,z as ot,A as Tg,B as Fe,C as Ka,D as Ge,E as Va,G as Za,H as Et,I as st,T as ct,J as Ig,K as Ag,L as Cg,M as Qa,N as Ya}from"./index-tzg05Zu1.js";function as(t=globalThis.window){var r,s;return typeof((s=(r=t==null?void 0:t.__TAURI__)==null?void 0:r.core)==null?void 0:s.invoke)=="function"}function Bo(t,r=globalThis.window){return`${as(r)?"在所在文件夹中显示":"下载"} ${t||"资源"}`}async function Mg(t,{scope:r=globalThis.window,fetch:s=globalThis.fetch}={}){if(!as(r))return!1;const i=new URL(t,r.location.origin);if(i.origin!==r.location.origin||i.username||i.password)throw new Error("不能定位其他站点的本地文件");const a=await s(i.href,{method:"HEAD",headers:{"X-Neo-Resource-Action":"reveal"},credentials:"same-origin",redirect:"error",cache:"no-store"});if(!a.ok)throw new Error(a.status===404||a.status===410?"资源不可用:原文件已移动、删除,或对应插件未启用":`无法定位文件(${a.status})`);const d=a.headers.get("X-Neo-Resource-Path");if(!d)throw new Error("此资源未提供本地文件定位能力;请确认桌面端和运行时均已更新");let g;try{g=decodeURIComponent(d)}catch{throw new Error("资源返回的本地路径无效")}if(!g||g.includes("\0"))throw new Error("资源返回的本地路径无效");return await r.__TAURI__.core.invoke("plugin:local-resources|reveal_file",{path:g}),!0}function Rg(t,r,s=globalThis.window){const i=Number(s==null?void 0:s.devicePixelRatio)||1;if(!t||!Number.isFinite(t.x)||!Number.isFinite(t.y)||i<=0||!r)return!1;const a=t.x/i,d=t.y/i,g=r.getBoundingClientRect();if(g.width<=0||g.height<=0||a<g.left||a>=g.right||d<g.top||d>=g.bottom)return!1;const f=s.document.elementFromPoint(a,d);return!!f&&r.contains(f)}function Ng({getTarget:t,onHover:r,onFiles:s,onError:i,scope:a=globalThis.window}){if(!as(a))return()=>{};const d=a.__TAURI__.core;if(typeof d.Channel!="function")return i(new Error("请更新桌面端后重试")),()=>{};let g=!1;const f=new Set,h=new d.Channel;h.onmessage=async y=>{if(g)return;const E=y.type!=="leave"&&Rg(y.position,t(),a);if(r(y.type==="over"&&E),!(y.type!=="drop"||!E||f.has(y.id))){if(y.error){i(new Error(y.error));return}f.add(y.id);try{const _=await d.invoke("plugin:local-resources|take_file_drop",{id:y.id});!g&&_.length&&s(_)}catch(_){g||i(_)}finally{f.delete(y.id)}}};const w=Promise.resolve().then(()=>d.invoke("plugin:local-resources|watch_file_drops",{channel:h}));return w.catch(()=>{g||i(new Error("拖拽不可用,请更新桌面端后重试"))}),()=>{g||(g=!0,h.onmessage=()=>{},r(!1),w.then(()=>d.invoke("plugin:local-resources|unwatch_file_drops",{channelId:h.id})).catch(()=>{}))}}function Zo(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var on=Zo();function Ml(t){on=t}var tn={exec:()=>null};function he(t,r=""){let s=typeof t=="string"?t:t.source,i={replace:(a,d)=>{let g=typeof d=="string"?d:d.source;return g=g.replace(qe.caret,"$1"),s=s.replace(a,g),i},getRegex:()=>new RegExp(s,r)};return i}var Lg=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),qe={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),htmlBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}>`)},$g=/^(?:[ \t]*(?:\n|$))+/,Og=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Dg=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,us=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Pg=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Qo=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Rl=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Nl=he(Rl).replace(/bull/g,Qo).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Ug=he(Rl).replace(/bull/g,Qo).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Yo=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Bg=/^[^\n]+/,Xo=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,zg=he(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Xo).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Fg=he(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Qo).getRegex(),Cr="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Jo=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Hg=he("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Jo).replace("tag",Cr).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Ll=he(Yo).replace("hr",us).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Cr).getRegex(),jg=he(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Ll).getRegex(),ei={blockquote:jg,code:Og,def:zg,fences:Dg,heading:Pg,hr:us,html:Hg,lheading:Nl,list:Fg,newline:$g,paragraph:Ll,table:tn,text:Bg},Xa=he("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",us).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Cr).getRegex(),Gg={...ei,lheading:Ug,table:Xa,paragraph:he(Yo).replace("hr",us).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Xa).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Cr).getRegex()},qg={...ei,html:he(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Jo).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:tn,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:he(Yo).replace("hr",us).replace("heading",` *#{1,6} *[^
|
|
2
2
|
]`).replace("lheading",Nl).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Wg=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Kg=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,$l=/^( {2,}|\\)\n(?!\s*$)/,Vg=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,Sn=/[\p{P}\p{S}]/u,Mr=/[\s\p{P}\p{S}]/u,ti=/[^\s\p{P}\p{S}]/u,Zg=he(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,Mr).getRegex(),Ol=/(?!~)[\p{P}\p{S}]/u,Qg=/(?!~)[\s\p{P}\p{S}]/u,Yg=/(?:[^\s\p{P}\p{S}]|~)/u,Xg=he(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Lg?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Dl=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Jg=he(Dl,"u").replace(/punct/g,Sn).getRegex(),ef=he(Dl,"u").replace(/punct/g,Ol).getRegex(),Pl="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",tf=he(Pl,"gu").replace(/notPunctSpace/g,ti).replace(/punctSpace/g,Mr).replace(/punct/g,Sn).getRegex(),nf=he(Pl,"gu").replace(/notPunctSpace/g,Yg).replace(/punctSpace/g,Qg).replace(/punct/g,Ol).getRegex(),sf=he("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ti).replace(/punctSpace/g,Mr).replace(/punct/g,Sn).getRegex(),rf=he(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,Sn).getRegex(),of="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",af=he(of,"gu").replace(/notPunctSpace/g,ti).replace(/punctSpace/g,Mr).replace(/punct/g,Sn).getRegex(),lf=he(/\\(punct)/,"gu").replace(/punct/g,Sn).getRegex(),cf=he(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),uf=he(Jo).replace("(?:-->|$)","-->").getRegex(),df=he("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",uf).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),kr=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,gf=he(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",kr).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ul=he(/^!?\[(label)\]\[(ref)\]/).replace("label",kr).replace("ref",Xo).getRegex(),Bl=he(/^!?\[(ref)\](?:\[\])?/).replace("ref",Xo).getRegex(),ff=he("reflink|nolink(?!\\()","g").replace("reflink",Ul).replace("nolink",Bl).getRegex(),Ja=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,ni={_backpedal:tn,anyPunctuation:lf,autolink:cf,blockSkip:Xg,br:$l,code:Kg,del:tn,delLDelim:tn,delRDelim:tn,emStrongLDelim:Jg,emStrongRDelimAst:tf,emStrongRDelimUnd:sf,escape:Wg,link:gf,nolink:Bl,punctuation:Zg,reflink:Ul,reflinkSearch:ff,tag:df,text:Vg,url:tn},pf={...ni,link:he(/^!?\[(label)\]\((.*?)\)/).replace("label",kr).getRegex(),reflink:he(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",kr).getRegex()},zo={...ni,emStrongRDelimAst:nf,emStrongLDelim:ef,delLDelim:rf,delRDelim:af,url:he(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Ja).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:he(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",Ja).getRegex()},hf={...zo,br:he($l).replace("{2,}","*").getRegex(),text:he(zo.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},ar={normal:ei,gfm:Gg,pedantic:qg},Qn={normal:ni,gfm:zo,breaks:hf,pedantic:pf},mf={"&":"&","<":"<",">":">",'"':""","'":"'"},el=t=>mf[t];function bt(t,r){if(r){if(qe.escapeTest.test(t))return t.replace(qe.escapeReplace,el)}else if(qe.escapeTestNoEncode.test(t))return t.replace(qe.escapeReplaceNoEncode,el);return t}function tl(t){try{t=encodeURI(t).replace(qe.percentDecode,"%")}catch{return null}return t}function nl(t,r){var d;let s=t.replace(qe.findPipe,(g,f,h)=>{let w=!1,y=f;for(;--y>=0&&h[y]==="\\";)w=!w;return w?"|":" |"}),i=s.split(qe.splitPipe),a=0;if(i[0].trim()||i.shift(),i.length>0&&!((d=i.at(-1))!=null&&d.trim())&&i.pop(),r)if(i.length>r)i.splice(r);else for(;i.length<r;)i.push("");for(;a<i.length;a++)i[a]=i[a].trim().replace(qe.slashPipe,"|");return i}function Bt(t,r,s){let i=t.length;if(i===0)return"";let a=0;for(;a<i&&t.charAt(i-a-1)===r;)a++;return t.slice(0,i-a)}function sl(t){let r=t.split(`
|
|
3
3
|
`),s=r.length-1;for(;s>=0&&qe.blankLine.test(r[s]);)s--;return r.length-s<=2?t:r.slice(0,s+1).join(`
|
|
4
4
|
`)}function bf(t,r){if(t.indexOf(r[1])===-1)return-1;let s=0;for(let i=0;i<t.length;i++)if(t[i]==="\\")i++;else if(t[i]===r[0])s++;else if(t[i]===r[1]&&(s--,s<0))return i;return s>0?-2:-1}function kf(t,r=0){let s=r,i="";for(let a of t)if(a===" "){let d=4-s%4;i+=" ".repeat(d),s+=d}else i+=a,s++;return i}function rl(t,r,s,i,a){let d=r.href,g=r.title||null,f=t[1].replace(a.other.outputLinkReplace,"$1");i.state.inLink=!0;let h={type:t[0].charAt(0)==="!"?"image":"link",raw:s,href:d,title:g,text:f,tokens:i.inlineTokens(f)};return i.state.inLink=!1,h}function yf(t,r,s){let i=t.match(s.other.indentCodeCompensation);if(i===null)return r;let a=i[1];return r.split(`
|
|
@@ -92,7 +92,7 @@ https://github.com/highlightjs/highlight.js/issues/2277`),fe=$,re=K),j===void 0&
|
|
|
92
92
|
`){ve(t),_e(t,a),t.pending=s;continue}}else{if(g===s){ve(t),_e(t,d),_e(t,a),t.pending="";continue}if(s!==" "&&s!==`
|
|
93
93
|
`){ve(t),_e(t,d),t.pending=s;continue}}break}case"~":if(t.token!==nt&&t.token!==rs){if(t.pending==="~"){if(s==="~"){t.pending=i;continue}}else if(s!==" "&&s!==`
|
|
94
94
|
`){ve(t),_e(t,rs),t.pending=s;continue}}break;case"$":if(t.token!==nt&&t.token!==rs&&t.pending==="$")if(s==="$"){t.token=Co,t.pending=i;continue}else{if(Nh(s.charCodeAt(0)))break;ve(t),_e(t,kt),t.pending=s;continue}break;case"[":if(t.token!==nt&&t.token!==wn&&t.token!==Tt&&t.token!==kt&&s!=="]"){ve(t),_e(t,wn),t.pending=s;continue}break;case"!":if(t.token!==nt&&s==="["){ve(t),_e(t,nt),t.pending="";continue}break;case" ":if(t.pending.length===1&&s===" ")continue;break}if(t.token!==nt&&t.token!==wn&&t.token!==Tt&&t.token!==kt&&s==="h"&&(t.pending===" "||t.pending==="")){t.text+=t.pending,t.pending=s,t.token=vl;continue}t.text+=t.pending,t.pending=s}ve(t)}function Lh(t){return{add_token:$h,end_token:Oh,add_text:Dh,set_attr:vc,data:{nodes:[t,,,,,],index:0}}}function $h(t,r){var a;let s=t.nodes[t.index],i;switch(r){case Sr:return;case os:i=document.createElement("blockquote");break;case jo:i=document.createElement("p");break;case zt:i=document.createElement("br");break;case pc:i=document.createElement("hr");break;case li:i=document.createElement("h1");break;case ci:i=document.createElement("h2");break;case ui:i=document.createElement("h3");break;case di:i=document.createElement("h4");break;case gi:i=document.createElement("h5");break;case fi:i=document.createElement("h6");break;case hr:case ts:i=document.createElement("em");break;case ns:case ss:i=document.createElement("strong");break;case rs:i=document.createElement("s");break;case Go:i=document.createElement("code");break;case qo:case wn:i=document.createElement("a");break;case nt:i=document.createElement("img");break;case is:i=document.createElement("ul");break;case Ir:i=document.createElement("ol");break;case En:i=document.createElement("li");break;case hc:let d=i=document.createElement("input");d.type="checkbox",d.disabled=!0;break;case Er:case Tr:s=s.appendChild(document.createElement("pre")),i=document.createElement("code");break;case Wo:i=document.createElement("table");break;case mr:switch(s.children.length){case 0:s=s.appendChild(document.createElement("thead"));break;case 1:s=s.appendChild(document.createElement("tbody"));break;default:s=s.children[1]}i=document.createElement("tr");break;case br:i=document.createElement(((a=s.parentElement)==null?void 0:a.tagName)==="THEAD"?"th":"td");break;case Tt:i=document.createElement("equation-block");break;case kt:i=document.createElement("equation-inline");break}t.nodes[++t.index]=s.appendChild(i)}function Oh(t){t.index-=1}function Dh(t,r){t.nodes[t.index].appendChild(document.createTextNode(r))}function vc(t,r,s){t.nodes[t.index].setAttribute(Th(r),s)}const Ph={__name:"StreamingMarkdown",props:{text:{type:String,default:""},exposedResources:{type:Array,default:()=>[]}},setup(t){const r=t,s=ne(null);let i,a="",d="",g;function f(){g&&clearTimeout(g),g=void 0}function h(){f(),g=setTimeout(()=>{g=void 0,i!=null&&i.pending&&a&&x(`${a}
|
|
95
|
-
`,a)},80)}function w(L){const R=String(L||"").trim();return R?/^(?:https?:|mailto:|\/|#)/i.test(R)?!0:!/^[a-z][a-z\d+.-]*:/i.test(R):!1}function y(L){const R=String(L||"").trim();return r.exposedResources.find(N=>String((N==null?void 0:N.reference)||"").trim()===R)}function E(L){const R=Number(L);if(!Number.isFinite(R)||R<=0)return"";const N=["B","KB","MB","GB"];let P=R,M=0;for(;P>=1024&&M<N.length-1;)P/=1024,M+=1;return`${P>=10||M===0?Math.round(P):P.toFixed(1)}${N[M]}`}function _(L){return{...Lh(L),set_attr(N,P,M){const U=P===_n?y(M):void 0,q=(U==null?void 0:U.url)||M;if(!((P===_n||P===pi)&&!w(q))&&(vc(N,P,q),P===_n)){const z=N.nodes[N.index];if(U){if(z.classList.add("inline-resource-link",`inline-resource-${U.kind||"link"}`),U.kind==="download"||U.downloadName){z.setAttribute("download",U.downloadName||U.label||""),z.setAttribute("title",Bo(U.label||U.downloadName)),z.removeAttribute("target"),z.removeAttribute("rel"),z.dataset.resourceDownload="true",z.dataset.resourceExpiresAt=String(Number(U.expiresAt)||0);const te=E(U.sizeBytes);te&&(z.dataset.resourceSize=`(${te})`)}}else z.setAttribute("target","_blank"),z.setAttribute("rel","noreferrer noopener")}}}}function I(L){if(!i)return;const R=String(L||"");if(f(),!R.startsWith(a)||d!==a){x(R),h();return}const N=R.slice(a.length);a=R,d=R,N&&ze(i,N),h()}function x(L=r.text,R=L){const N=s.value;N&&(i&&xl(i),N.replaceChildren(),i=Ch(_(N)),d=String(L||""),a=String(R||""),d&&ze(i,d))}return Vo(()=>{x(),h()}),Oe(()=>r.text,I,{flush:"post"}),Oe(()=>JSON.stringify(r.exposedResources),()=>{x(),h()},{flush:"post"}),Ht(()=>{f(),i&&xl(i),i=void 0}),(L,R)=>(m(),b("div",{ref_key:"root",ref:s,class:"streaming-markdown-content"},null,512))}};function At(t){const r=Number(t),s=Number.isFinite(r)?Math.floor(Math.max(0,r)/1e3):0;return s===0?"":s<60?`${s}s`:`${Math.floor(s/60)}m ${s%60}s`}function Sl(t,r=performance.now()){return(t||[]).filter(s=>(s==null?void 0:s.version)===1&&typeof s.id=="string").map(s=>({...s,receivedAt:r}))}function No(t,r=performance.now(),s=!0){if(!t)return;const i=a=>Number.isSafeInteger(a)&&a>=0;if(t.status==="finished")return i(t.durationMs)?t.durationMs:void 0;if(!(t.status!=="running"||!i(t.elapsedMs)))return t.elapsedMs+(s&&Number.isFinite(t.receivedAt)?Math.max(0,r-t.receivedAt):0)}const Uh=["aria-label"],Bh={class:"elapsed-clock-face",viewBox:"0 0 40 40","aria-hidden":"true"},zh={class:"clock-ticks"},Fh=["y1","transform"],Hh={class:"elapsed-clock-value","aria-hidden":"true"},jh={__name:"ElapsedClock",props:{elapsedMs:{type:Number,default:void 0}},setup(t){const r=t,s=V(()=>At(r.elapsedMs)),i=V(()=>Math.floor(Math.max(0,r.elapsedMs||0)/1e3)*6);return(a,d)=>s.value?(m(),b("span",{key:0,class:"elapsed-clock","aria-label":`用时 ${s.value}`},[(m(),b("svg",Bh,[d[1]||(d[1]=l("circle",{class:"clock-rim",cx:"20",cy:"20",r:"18"},null,-1)),d[2]||(d[2]=l("circle",{class:"clock-well",cx:"20",cy:"20",r:"15.5"},null,-1)),l("g",zh,[(m(),b(ee,null,ge(60,g=>l("line",{key:g,x1:"20",y1:(g-1)%5===0?6:7,x2:"20",y2:"8",class:Y({major:(g-1)%5===0}),transform:`rotate(${(g-1)*6} 20 20)`},null,10,Fh)),64))]),l("g",{class:"clock-hand",style:ot({transform:`rotate(${i.value}deg)`})},[...d[0]||(d[0]=[l("line",{x1:"20",y1:"23",x2:"20",y2:"10"},null,-1)])],4),d[3]||(d[3]=l("circle",{class:"clock-pin",cx:"20",cy:"20",r:"1.6"},null,-1))])),l("span",Hh,S(s.value),1)],8,Uh)):C("",!0)}},El=Ar(jh,[["__scopeId","data-v-490710ad"]]),Gh=["aria-label"],qh={key:0,class:"flip-status-front"},Wh={class:"flip-status-back"},Kh={__name:"FlipStatusText",props:{text:{type:String,default:""}},setup(t){const r=t,s=new Intl.Segmenter(void 0,{granularity:"grapheme"}),i=E=>Array.from(s.segment(E),_=>_.segment),a=ne(r.text),d=ne(""),g=ne(!1),f=ne(0);let h;const w=V(()=>{const E=i(a.value),_=g.value?i(d.value):[];return Array.from({length:Math.max(E.length,_.length)},(I,x)=>({before:_[x]||"",after:E[x]||""}))}),y=V(()=>Math.min(45,600/Math.max(1,w.value.length-1)));return Oe(()=>r.text,(E,_)=>{clearTimeout(h),d.value=_,a.value=E,g.value=!0,f.value+=1,h=setTimeout(()=>{g.value=!1,d.value=""},360+Math.max(0,w.value.length-1)*y.value)}),Ht(()=>clearTimeout(h)),(E,_)=>(m(),b("span",{class:"flip-status-text","aria-label":t.text},[(m(),b("span",{key:f.value,class:"flip-status-letters","aria-hidden":"true"},[(m(!0),b(ee,null,ge(w.value,(I,x)=>(m(),b("span",{key:x,class:"flip-status-slot"},[l("span",{class:Y(["flip-status-card",{"is-flipping":g.value}]),style:ot({"--flip-delay":`${x*y.value}ms`})},[g.value?(m(),b("span",qh,S(I.before),1)):C("",!0),l("span",Wh,S(I.after),1)],6)]))),128))]))],8,Gh))}},Vh=Ar(Kh,[["__scopeId","data-v-4fbb8b4f"]]);function Zh({getElement:t,requestFrame:r=f=>requestAnimationFrame(f),cancelFrame:s=f=>cancelAnimationFrame(f),now:i=()=>performance.now(),setTimer:a=(f,h)=>setTimeout(f,h),clearTimer:d=f=>clearTimeout(f),reducedMotion:g=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches}={}){let f=!0,h=0,w=0,y=0,E=0,_=!0,I=!1,x=!1,L=!1,R=0,N=!1,P=0,M=()=>{};const U=F=>Math.max(0,F.scrollHeight-F.clientHeight);function q(){h&&s(h),h=0,y=0}function z(){L=!1,f=!1,_=!1,N=!1,R=0,q(),d(w),w=0}function te(){I||!f||h||!t()||(h=r(o))}function o(F){h=0;const se=t();if(I||!f||!se||!se.clientHeight)return;const $=U(se),K=$-se.scrollTop,j=y?Math.min(32,Math.max(1,F-y)):16;y=F;const re=Math.min(K*(1-Math.exp(-j/115)),j*1.8),fe=_||g()||K<=1?$:se.scrollTop+Math.max(1,re);_=!1,se.scrollTop=fe,E=se.scrollTop,$-se.scrollTop>1?te():y=0}function oe(){if(d(w),w=0,I||x||!N)return;const F=P-i();if(F>0){w=a(oe,F);return}const se=t();se&&U(se)-se.scrollTop<=48&&(f=!0,N=!1,te())}function ce(F){z(),R=Math.sign(F),N=R>0,P=i()+180,oe()}function W(){const F=t();if(!F)return;const se=F.scrollTop-E;E=F.scrollTop,!f&&Math.abs(se)>.5&&(se<0?N=!1:(R>0||x&&R===0)&&(N=!0),P=i()+180,oe())}function Q(){var F;z(),f=!0,_=!0,R=0,x=!1,E=((F=t())==null?void 0:F.scrollTop)||0,te()}function le(F){if(M(),q(),E=(F==null?void 0:F.scrollTop)||0,!F)return;let se,$,K=!1;const j=ae=>{!ae.ctrlKey&&ae.deltaY&&ce(ae.deltaY)},re=ae=>{var Ue,et;const me=!K&&f;K=!0,x=!0,se=(Ue=ae.touches[0])==null?void 0:Ue.clientX,$=(et=ae.touches[0])==null?void 0:et.clientY,ce(0),L=me&&ae.touches.length===1},fe=ae=>{var et,ft;const me=(et=ae.touches[0])==null?void 0:et.clientX,Ue=(ft=ae.touches[0])==null?void 0:ft.clientY;Ue!==void 0&&$!==void 0&&Ue!==$&&ce($-Ue),(ae.touches.length!==1||me!==se)&&(L=!1),se=me,$=Ue},we=()=>{x=!1,P=i()+180,oe()},Te=ae=>{var Ue;if(ae.type==="touchcancel"&&(L=!1),(Ue=ae.touches)!=null&&Ue.length)return;const me=K&&L;K=!1,L=!1,we(),me&&!I&&(f=!0,N=!1,te())},De=ae=>{K||ae.pointerType==="touch"||we()},Ct=[["scroll",W],["wheel",j],["touchstart",re],["touchmove",fe],["touchend",Te],["touchcancel",Te],["pointerdown",ae=>{const me=F.getBoundingClientRect();(ae.button===1||ae.target===F&&ae.clientX>=me.left+F.clientLeft+F.clientWidth)&&(x=!0,ce(0))}],["keydown",ae=>{ae.defaultPrevented||ae.ctrlKey||ae.metaKey||ae.altKey||ae.target.closest('input, textarea, select, button, [contenteditable="true"]')||(["ArrowUp","PageUp","Home"].includes(ae.key)||ae.key===" "&&ae.shiftKey?ce(-1):["ArrowDown","PageDown","End"," "].includes(ae.key)&&ce(1))}]];for(const[ae,me]of Ct)F.addEventListener(ae,me,{passive:!0});const Je=F.ownerDocument;Je.addEventListener("pointerup",De,{passive:!0}),Je.addEventListener("pointercancel",De,{passive:!0}),M=()=>{K=!1,L=!1,x=!1;for(const[ae,me]of Ct)F.removeEventListener(ae,me);Je.removeEventListener("pointerup",De),Je.removeEventListener("pointercancel",De),M=()=>{}},te()}return{schedule:te,pause:z,reset:Q,attach:le,get following(){return f},get interacting(){return x||i()<P},dispose(){I=!0,z(),M()}}}const Qh=["onDblclick"],Yh=["aria-label","onClick"],Xh=["title","onClick"],Jh=["aria-label","onClick"],em=Object.assign({name:"CwdTreeNode"},{__name:"CwdTreeNode",props:{nodes:{type:Array,default:()=>[]},children:{type:Object,default:()=>({})},expanded:{type:Object,default:()=>({})},selectedPath:{type:String,default:""},level:{type:Number,default:0},allowDelete:{type:Boolean,default:!0}},emits:["toggle","select","delete"],setup(t,{emit:r}){const s=r;return(i,a)=>{const d=Tg("CwdTreeNode",!0);return m(!0),b(ee,null,ge(t.nodes,g=>(m(),b("div",{key:g.path,class:"cwd-tree-branch"},[l("div",{class:Y(["cwd-tree-row",{selected:t.selectedPath===g.path}]),style:ot({"--cwd-tree-level":t.level}),onDblclick:f=>s("toggle",g)},[l("button",{type:"button",class:"cwd-tree-toggle","aria-label":t.expanded[g.path]?"收起":"展开",onClick:ke(f=>s("toggle",g),["stop"])},S(t.expanded[g.path]?"▾":"▸"),9,Yh),l("button",{type:"button",class:"cwd-tree-name",title:g.path,onClick:f=>s("select",g)},[a[3]||(a[3]=l("span",{"aria-hidden":"true"},"◇",-1)),l("strong",null,S(g.name),1)],8,Xh),t.allowDelete?(m(),b("button",{key:0,type:"button",class:"cwd-tree-delete","aria-label":`删除 ${g.name}`,onClick:ke(f=>s("delete",g),["stop"])},"×",8,Jh)):C("",!0)],46,Qh),t.expanded[g.path]&&t.children[g.path]?(m(),Fe(d,{key:0,nodes:t.children[g.path],children:t.children,expanded:t.expanded,"selected-path":t.selectedPath,level:t.level+1,onToggle:a[0]||(a[0]=f=>s("toggle",f)),onSelect:a[1]||(a[1]=f=>s("select",f)),onDelete:a[2]||(a[2]=f=>s("delete",f))},null,8,["nodes","children","expanded","selected-path","level"])):C("",!0)]))),128)}}});function tm(t,r=Date.now()){const s=typeof(t==null?void 0:t.startedAt)=="string"?Date.parse(t.startedAt):NaN;if(!Number.isSafeInteger(s)||s<0)return;if(t.status==="running"){const a=r-s;return Number.isSafeInteger(a)&&a>=0?a:void 0}if(!["completed","failed","killed"].includes(t.status))return;const i=typeof t.completedAt=="string"?Date.parse(t.completedAt):NaN;return Number.isSafeInteger(i)&&i>=s&&Number.isSafeInteger(t.durationMs)&&t.durationMs>=0&&t.durationMs===i-s?t.durationMs:void 0}function nm(t){return t!=null&&t.live?{key:"running",label:"执行中"}:(t==null?void 0:t.titleStatus)==="failure"||(t==null?void 0:t.titleStatus)==="failed"||(t==null?void 0:t.kind)==="error"||t!=null&&t.toolError?{key:"failed",label:"失败"}:(t==null?void 0:t.titleStatus)==="success"?{key:"completed",label:"完成"}:{key:"unknown",label:"未提供"}}function sm(t,r){const s=String(t||"").trim();if(!s)return"模型未配置";const i=String(r||"").trim();return i?`${s}(${i})`:s}function rm(t,r){const s=t.map(g=>Math.max(1,Number(g.size)||0)),i=s.reduce((g,f)=>g+f,0);let a=0,d=0;return r(0),{update(g,f){const h=Math.floor(100*(a+s[g]*Math.max(0,Math.min(1,f)))/i);d=Math.max(d,Math.min(99,h)),r(d)},complete(g){this.update(g,1),a+=s[g]},succeed(){r(100)},fail(){r(0)}}}async function om(t,r,s){var f,h;const i=new URL(t,((f=globalThis.location)==null?void 0:f.href)||"http://localhost");i.pathname+="/chunks";const a=async(w,y,E)=>{const _=await ye(w,{method:y,headers:E?{"Content-Type":"application/json"}:{},body:E?JSON.stringify(E):void 0}),I=await _.json();if(!_.ok||(I==null?void 0:I.ok)===!1||I!=null&&I.error)throw new Error((I==null?void 0:I.error)||`上传失败 (${_.status})`);return I},d=await a(i,"POST",{name:r.name,size:r.size,mimeType:r.type||"application/octet-stream"});if(!d.uploadId||!Number.isSafeInteger(d.chunkBytes)||d.chunkBytes<=0)throw new Error("上传初始化响应无效");i.pathname+="/"+encodeURIComponent(d.uploadId);let g=0;try{for(;g<r.size;){const E=Math.min(r.size,g+d.chunkBytes);let _=!1;for(let I=0;I<3;I++)try{if((await im(i,r.slice(g,E),g,L=>s==null?void 0:s((g+L*(E-g))/r.size))).offset!==E)throw new Error("分片确认偏移无效");_=!0;break}catch(x){if(I===2)throw x;await new Promise(R=>setTimeout(R,400*(I+1)));const L=await a(i,"GET");if(L.offset===E){_=!0;break}if(L.offset!==g)throw new Error("上传进度不一致,请重新上传")}if(!_)throw new Error("分片上传失败");g=E,s==null||s(r.size?g/r.size:1)}const w=new URL(i);w.pathname+="/complete";const y=await a(w,"POST");if(!((h=y.file)!=null&&h.absolutePath))throw new Error("上传完成响应无效");return y}catch(w){throw await a(i,"DELETE").catch(()=>{}),w}}function im(t,r,s,i){return new Promise((a,d)=>{const g=new XMLHttpRequest;g.upload.onprogress=f=>{f.lengthComputable&&f.total&&i(f.loaded/f.total)},g.onload=()=>{try{const f=JSON.parse(g.responseText);if(g.status<200||g.status>=300||(f==null?void 0:f.ok)===!1||f!=null&&f.error)throw new Error((f==null?void 0:f.error)||`上传失败 (${g.status})`);a(f)}catch(f){d(f)}},g.onerror=()=>d(new Error("上传失败:网络连接异常")),g.onabort=()=>d(new Error("上传已取消")),g.ontimeout=()=>d(new Error("分片上传超时")),g.open("PATCH",t),g.setRequestHeader("Content-Type","application/octet-stream"),g.setRequestHeader("X-Upload-Offset",String(s)),g.send(r)})}function am({maxEntries:t=64,timeoutMs:r=15e3,createImage:s,fetchOriginal:i=s?null:(a,d)=>ye(a,{cache:"no-store",signal:d})}={}){if(s||(s=()=>new Image),!Number.isInteger(t)||t<1||t>512)throw new RangeError("maxEntries must be 1..512");if(!Number.isFinite(r)||r<1)throw new RangeError("timeoutMs must be positive");const a=new Map;let d="";const g=(_,I)=>JSON.stringify([_,I]);function f(_){const I=a.get(_);a.delete(_),I==null||I.cancel()}function h(){for(const _ of a.keys())f(_)}function w(_){_!==d&&(h(),d=_)}function y(_){f(g(d,_))}function E({sessionId:_,originalUrl:I,available:x=!0}){const L={sessionId:_,originalUrl:I},R=Q=>Object.freeze({...L,state:Q});if(!_||_!==d)return Promise.resolve(R("stale"));const N=g(_,I);if(x===!1)return f(N),Promise.resolve(R("unavailable"));if(typeof I!="string"||!I.trim())return Promise.resolve(R("unknown"));const P=a.get(N);if(P)return a.delete(N),a.set(N,P),P.promise;for(;a.size>=t;)f(a.keys().next().value);let M,U,q,z=!1,te;const o=new AbortController,oe=new Promise(Q=>{te=Q}),ce=Q=>{z||(z=!0,clearTimeout(U),o.abort(),q&&URL.revokeObjectURL(q),te(Object.freeze(Q)))},W={promise:oe,cancel:()=>{ce(R("stale")),M&&(M.src="")}};return a.set(N,W),U=setTimeout(()=>{ce(R("unknown")),M&&(M.src="")},r),(async()=>{try{let Q=I;if(i&&!/^(data:|blob:)/i.test(I)){const se=await i(I,o.signal);if(!se.ok)throw new Error("Original unavailable");const $=await se.blob();if(z)return;Q=q=URL.createObjectURL($)}if(z)return;M=s(),M.src=Q,await M.decode();const le=M.naturalWidth,F=M.naturalHeight;Number.isInteger(le)&&le>0&&Number.isInteger(F)&&F>0?ce({...L,state:"actual",width:le,height:F,source:"original-decode"}):ce(R("unknown"))}catch{ce(R("unknown"))}})(),oe}return{setSession:w,load:E,invalidate:y,clear:h,get size(){return a.size}}}function Lo(t,r){const s=typeof t=="string"&&/^(\d+)x(\d+)$/.exec(t),i=(r==null?void 0:r.state)==="actual"&&Number.isInteger(r.width)&&r.width>0&&Number.isInteger(r.height)&&r.height>0;return{requested:t==="auto"?"auto(自动策略)":typeof t=="string"&&t?t:"未提供",actual:i?`${r.width} × ${r.height}`:(r==null?void 0:r.state)==="unavailable"?"不可获取":"未知",mismatch:!!(i&&s&&(+s[1]!==r.width||+s[2]!==r.height))}}function $o(t,r=""){var a;const s=(t==null?void 0:t.originalSrc)||((a=t==null?void 0:t.original)==null?void 0:a.src)||(t==null?void 0:t.originalUrl)||r;if(s)return s;const i=t==null?void 0:t.src;if(typeof i!="string")return"";if(/^data:image\//i.test(i))return i;try{const d=new URL(i,"http://localhost");if(/\/api\/images\/(?:by-id\/[^/]+|[^/]+\/\d+)$/.test(d.pathname)&&!d.searchParams.has("thumbnail"))return i}catch{}return""}function lm(t,r){var a;const s=(a=t==null?void 0:t.imageResult)==null?void 0:a.images;if(!Array.isArray(s)||!(r!=null&&r.label))return;const i=s.filter(d=>(d==null?void 0:d.label)===r.label);return i.length===1?i[0]:void 0}function Tl(t){return t===!0?"有":t===!1?"无":"未知"}const cm={class:"shell"},um={class:"sidebar"},dm={class:"brand-row logo-only"},gm=["aria-label","aria-pressed","title"],fm={class:"nav"},pm=["title"],hm={class:"session-entry-main"},mm={key:0,"aria-hidden":"true"},bm={key:0,class:"sidebar-card prompt-stack"},km={class:"prompt-stack-head"},ym={class:"prompt-list"},vm={key:0,class:"prompt-list-empty"},wm={key:1,class:"prompt-list-empty"},_m=["onDragstart","onDblclick"],xm={class:"prompt-card-body"},Sm={class:"prompt-card-actions"},Em=["onClick"],Tm=["onClick"],Im={key:1,class:"sidebar-footer"},Am=["title"],Cm={class:"workspace"},Mm={class:"topbar"},Rm={class:"top-actions"},Nm=["onClick"],Lm=["onKeydown"],$m=["title"],Om=["aria-label","aria-pressed","title"],Dm={key:0,class:"content-grid chat-grid"},Pm={class:"chat-panel"},Um={key:0,class:"runtime-context-bar"},Bm={key:0,class:"runtime-context-bar-actions"},zm={key:2,class:"runtime-context-syncing"},Fm={key:1,class:"runtime-context-bar project-context-bar"},Hm={class:"runtime-context-bar-actions"},jm=["data-index"],Gm={class:"tool-group-shell"},qm=["aria-expanded","onClick"],Wm={class:"tool-group-label"},Km={class:"tool-group-label-name"},Vm={key:0,class:"tool-group-label-count"},Zm={key:1,class:"tool-group-label-separator"},Qm={key:1,class:"tool-group-lines"},Ym=["open"],Xm={class:"reasoning-reveal"},Jm={class:"reasoning-paper"},eb=["innerHTML"],tb=["onClick","onKeydown"],nb={class:"compaction-context-actions"},sb={key:0},rb={class:"tool-result-title-row"},ob={class:"tool-result-name"},ib={key:0,class:"elapsed-pill"},ab={key:1,class:"tool-result-failure-mark","aria-label":"执行失败"},lb={class:"tool-result-detail-row"},cb={key:0,class:"tool-result-primary"},ub={key:1},db={key:2,class:"tool-group-shell"},gb=["aria-expanded","onClick"],fb={class:"tool-group-label"},pb={class:"tool-group-label-name"},hb={key:0,class:"tool-group-label-count"},mb={key:1,class:"tool-group-label-separator"},bb={key:0,class:"tool-group-purposes"},kb={key:3,class:"tool-result-primary"},yb={key:0},vb={key:4,class:"tool-result-previews"},wb={class:"tool-result-preview kind-list"},_b={tabindex:"0"},xb={key:5,class:"tool-result-previews"},Sb={class:"tool-result-preview kind-code"},Eb={tabindex:"0"},Tb={key:6,class:"tool-result-previews"},Ib={tabindex:"0"},Ab={key:3},Cb={key:0,class:"message-head"},Mb={key:0,class:"tool-result-failure-mark","aria-label":"执行失败"},Rb=["innerHTML"],Nb={key:0,class:"message-body compaction-message-body"},Lb=["onClick","onKeydown"],$b={class:"compaction-context-actions"},Ob={key:0},Db={key:1,class:"message-body reasoning-body"},Pb=["open"],Ub={key:0,class:"reasoning-elapsed"},Bb={class:"reasoning-reveal"},zb={class:"reasoning-paper"},Fb=["innerHTML"],Hb={key:2,class:"message-body"},jb={key:0,class:"message-head"},Gb={key:0,class:"tool-result-failure-mark","aria-label":"执行失败"},qb={key:1},Wb={key:2,class:"elapsed-pill"},Kb={key:1,class:"image2-result-shell"},Vb=["innerHTML"],Zb={key:0,class:"message-image-attachments image2-output-images"},Qb=["data-preview-src","aria-label"],Yb=["src","alt"],Xb={key:1,class:"image-unavailable-placeholder",role:"status"},Jb={class:"image-card-actions"},ek=["href","download"],tk=["onClick"],nk=["onClick"],sk={class:"tool-result-title-row"},rk={class:"tool-result-name"},ok={key:0,class:"elapsed-pill"},ik={key:1,class:"tool-result-failure-mark","aria-label":"执行失败"},ak={class:"tool-result-detail-row"},lk={key:0,class:"tool-result-primary"},ck={key:1},uk={key:2,class:"tool-group-shell"},dk=["aria-expanded","onClick"],gk={class:"tool-group-label"},fk={class:"tool-group-label-name"},pk={key:0,class:"tool-group-label-count"},hk={key:1,class:"tool-group-label-separator"},mk={key:0,class:"tool-group-purposes"},bk={key:3,class:"tool-result-primary"},kk={key:0},yk={key:4,class:"tool-result-previews"},vk={class:"tool-result-preview kind-list"},wk={tabindex:"0"},_k={key:5,class:"tool-result-previews"},xk={class:"tool-result-preview kind-code"},Sk={tabindex:"0"},Ek={key:6,class:"tool-result-previews"},Tk={tabindex:"0"},Ik={class:"plugin-resource-stack"},Ak=["src","title"],Ck=["innerHTML"],Mk={key:1,class:"message-text markdown streaming-markdown"},Rk=["innerHTML"],Nk={key:0,class:"message-image-attachments"},Lk=["data-preview-src","aria-label"],$k=["src","alt"],Ok={key:1,class:"image-unavailable-placeholder",role:"status"},Dk=["href","download"],Pk={key:2,class:"message-loading",role:"status"},Uk={class:"message-loading-body"},Bk={key:3,class:"message-loading",role:"status","aria-live":"polite"},zk={class:"message-loading-body"},Fk={key:0,class:"queued"},Hk=["disabled"],jk=["disabled"],Gk={key:0,class:"composer-app-prompt"},qk={key:1,class:"attachments file-attachments"},Wk=["title"],Kk=["onClick"],Vk={key:2,class:"attachments image-attachments"},Zk=["src","alt"],Qk=["onClick"],Yk={class:"composer-path-row"},Xk=["title"],Jk={id:"composer-session-metrics",class:"composer-metrics","aria-label":"运行状态指标"},ey=["aria-pressed","title"],ty={class:"compress-wrap"},ny=["disabled"],sy={class:"composer-actions"},ry=["aria-expanded"],oy=["disabled","aria-busy","aria-label","title"],iy=["type","disabled","aria-busy","aria-label","title"],ay={key:0,class:"composer-button-icon composer-wait-icon","data-action":"waiting",viewBox:"0 0 20 20","aria-hidden":"true"},ly={key:1,class:"composer-button-icon","data-action":"send",viewBox:"0 0 20 20","aria-hidden":"true"},cy={key:2,class:"composer-button-icon","data-action":"interrupt-send",viewBox:"0 0 20 20","aria-hidden":"true"},uy={key:3,class:"composer-button-icon","data-action":"send-now",viewBox:"0 0 20 20","aria-hidden":"true"},dy={key:4,class:"composer-button-icon","data-action":"stop",viewBox:"0 0 20 20","aria-hidden":"true"},gy=["data-mobile-card","onKeydown"],fy={class:"background-task-section","data-card":"tasks"},py={class:"background-task-head"},hy={class:"panel-title"},my={key:0,class:"background-task-count"},by=["title"],ky={key:0,class:"background-task-more"},yy={key:1,class:"background-task-history"},vy={class:"background-task-history-list"},wy=["title","onClick"],_y={key:1,class:"quota-card","data-card":"quota"},xy={class:"quota-card-head"},Sy={class:"quota-card-controls"},Ey=["aria-valuenow"],Ty={class:"quota-card-foot"},Iy={class:"quota-card-update"},Ay={class:"quota-card memory-card","data-card":"memory"},Cy={class:"memory-card-head"},My={class:"memory-trend",viewBox:"0 0 260 44",preserveAspectRatio:"none",role:"img","aria-label":"最近一小时 RSS 趋势"},Ry=["d"],Ny=["cx","cy","r","onFocus"],Ly={key:1,class:"memory-trend-empty"},$y={class:"memory-stats"},Oy={class:"memory-card-foot"},Dy={key:1,class:"content-grid single"},Py={class:"panel-page sessions-page"},Uy={class:"page-head sessions-page-head"},By={class:"session-toolbar"},zy={class:"session-search","aria-label":"搜索会话"},Fy={class:"session-count"},Hy={key:0,class:"empty-state"},jy={key:1,class:"empty-state"},Gy={key:2,class:"empty-state"},qy={key:3,class:"session-list"},Wy={class:"session-card-main"},Ky={class:"session-card-title"},Vy={key:0,class:"current-pill"},Zy={key:1,class:"current-pill"},Qy={key:2,class:"live-pill"},Yy={class:"session-card-meta"},Xy=["title"],Jy=["datetime"],ev={class:"session-actions"},tv=["disabled","onClick"],nv=["disabled","onClick"],sv={key:4,class:"session-pagination","aria-label":"会话分页"},rv=["disabled"],ov=["aria-current","onClick"],iv=["disabled"],av={key:2,class:"content-grid single"},lv={class:"panel-page sessions-page admin-users-page"},cv=["disabled"],uv={key:0,class:"admin-user-error",role:"alert"},dv={key:1,class:"empty-state"},gv={key:2,class:"session-list admin-user-list"},fv={class:"session-card-main"},pv={class:"session-card-title"},hv={class:"current-pill"},mv={class:"session-actions"},bv=["disabled","onClick"],kv={key:3,class:"content-grid single"},yv={class:"panel-page prompt-page"},vv={class:"page-head"},wv={class:"page-head-actions"},_v={class:"prompt-workbench"},xv={class:"prompt-library-panel"},Sv={class:"prompt-library-head"},Ev={class:"prompt-library-list"},Tv={key:0,class:"prompt-list-empty"},Iv={key:1,class:"prompt-list-empty"},Av=["onClick","onDblclick","onDragstart","onDragover","onDrop"],Cv={key:0},Mv={class:"prompt-editor-panel"},Rv={class:"prompt-editor-toolbar"},Nv={class:"prompt-editor-current"},Lv={class:"prompt-editor-toolbar-actions"},$v=["disabled"],Ov=["disabled"],Dv={class:"prompt-editor-grid"},Pv={class:"prompt-editor-field"},Uv={class:"prompt-editor-field prompt-editor-field-full"},Bv={class:"prompt-editor-field prompt-editor-field-full"},zv={key:4,class:"content-grid single"},Fv={class:"panel-page settings-page"},Hv={class:"page-head settings-page-head"},jv={class:"settings-subpage-title"},Gv={class:"page-head settings-page-head"},qv=["disabled"],Wv={key:0,class:"empty-state"},Kv={class:"settings-card"},Vv={class:"settings-field-grid"},Zv={class:"settings-field"},Qv={key:0,class:"settings-required","aria-label":"必填"},Yv=["onUpdate:modelValue","type","placeholder"],Xv={key:1,class:"settings-card"},Jv={class:"settings-field-grid"},ew={class:"settings-field"},tw={class:"settings-field"},nw={key:2,class:"settings-card settings-plugin-card"},sw={class:"settings-card-head"},rw=["disabled"],ow={class:"plugin-settings-list"},iw={class:"plugin-toggle"},aw=["onUpdate:modelValue","aria-label"],lw={key:3,class:"settings-card settings-plugin-card"},cw={class:"settings-card-head"},uw=["disabled"],dw=["disabled"],gw={class:"plugin-settings-list"},fw={class:"plugin-toggle"},pw=["onUpdate:modelValue","disabled","aria-label"],hw=["disabled","onClick"],mw={key:5,class:"content-grid single"},bw={class:"panel-page"},kw={class:"capability-grid"},yw={key:0,class:"toast"},vw=["title","onKeydown"],ww={class:"cwd-picker-modal",role:"dialog","aria-modal":"true","aria-label":"选择工作目录"},_w=["disabled"],xw=["disabled"],Sw={class:"cwd-picker-shortcuts"},Ew={class:"cwd-picker-browser"},Tw={class:"cwd-picker-locations","aria-label":"常用位置"},Iw=["title","onClick"],Aw={"aria-hidden":"true"},Cw={class:"cwd-picker-tree"},Mw={key:0,class:"cwd-picker-empty"},Rw={key:1,class:"cwd-picker-error"},Nw={class:"cwd-picker-actions"},Lw=["disabled"],$w={class:"runtime-context-modal",role:"dialog","aria-modal":"true","aria-label":"项目上下文"},Ow={class:"runtime-context-modal-head"},Dw={key:0,class:"runtime-context-kicker"},Pw=["aria-label"],Uw={class:"runtime-context-modal-content"},Bw={key:0,class:"runtime-context-index"},zw=["onClick"],Fw={key:1,class:"project-context-document"},Hw=["aria-label"],jw={class:"confirm-dialog-content"},Gw={class:"confirm-dialog-actions"},qw={class:"session-model-list",role:"radiogroup","aria-label":"模型"},Ww=["value","disabled"],Kw=["disabled"],Vw=["value"],Zw={key:0,class:"context-window-error",role:"alert"},Qw={class:"context-window-actions"},Yw=["disabled"],Xw={class:"context-window-input-wrap"},Jw={key:0,class:"context-window-error",role:"alert"},e0={class:"context-window-actions"},t0=["disabled"],n0=["aria-label"],s0={class:"image-preview-canvas"},r0=["src","alt"],o0={key:0,class:"image-preview-caption"},i0={class:"runtime-context-detail-modal compaction-detail-modal",role:"dialog","aria-modal":"true","aria-label":"压缩上下文详情"},a0={class:"runtime-context-detail-content compaction-detail-content"},l0={class:"compaction-detail-stats"},c0={class:"runtime-context-modal",role:"dialog","aria-modal":"true","aria-label":"运行上下文"},u0={class:"runtime-context-modal-head"},d0={class:"runtime-context-modal-content"},g0={key:1,class:"runtime-plugin-list"},f0={key:0,class:"runtime-context-empty"},p0={class:"runtime-tool-status"},h0=["disabled","onClick"],m0={key:2,class:"runtime-plugin-list"},b0={key:0,class:"runtime-context-empty"},k0=["aria-label"],y0={class:"runtime-context-modal-head"},v0={key:0,class:"runtime-context-kicker"},w0={class:"runtime-context-detail-content"},_0={key:0},x0={key:1},S0={class:"tool-result-modal background-task-modal",role:"dialog","aria-modal":"true","aria-label":"后台任务"},E0={class:"tool-result-modal-head"},T0={class:"tool-result-modal-title"},I0={class:"background-task-modal-count"},A0={key:0,class:"background-task-index","aria-label":"后台任务列表"},C0=["title","onClick"],M0={class:"background-task-index-copy"},R0={class:"background-task-detail"},N0={class:"background-task-detail-head"},L0={class:"background-task-detail-title"},$0={class:"background-task-meta"},O0={key:0},D0={key:1,class:"wide"},P0={class:"background-task-detail-body"},U0={key:0,class:"background-task-command-section"},B0={class:"background-task-command"},z0={key:2,style:{"min-width":"0",width:"100%"}},F0=["aria-label"],H0={class:"tool-result-modal-head"},j0={class:"tool-result-modal-title"},G0={key:0},q0={class:"tool-result-modal-content"},W0=["innerHTML"],K0=2048,V0=18e5,Oo=.62,Do=10,Z0="System hint: if the user is asking you to draw, render, create, generate, or illustrate a new image, you must call the image2 tool with mode=generate instead of replying with text-only description. After the tool returns images, continue the response normally so the UI can display them in the conversation.",Q0="System hint: the user attached an image. If this request involves image editing, modification, redraw, background replacement, style transfer, repair, object removal, or localized changes, you must call the image2 tool with mode=edit and use the attached or most recent image as the source image. Image operations may take a while, so wait up to 10 minutes by default unless the tool returns an error or the user interrupts.",Y0="System hint from web UI: if your final answer produces, creates, modifies, exports, packages, or identifies local files that the user should receive, you must call the expose_downloads tool with all relevant absolute file paths before your final textual response. Do not paste absolute paths as the primary delivery method; expose them as browser downloads.",X0="<<ATTACHMENT_MANIFEST>>",J0="<</ATTACHMENT_MANIFEST>>",gr="••••••••••••••••••",Xn="neoctl-web.adminOwnerUsername",Il="neoctl-web.theme",Po="neoctl-web.clientRevision",Al="neoctl-web.clientReloadRequest",Uo="__neo_reload",e_=112,Cl=4e4,s_={__name:"App",setup(t){Ne.registerLanguage("javascript",Eo),Ne.registerLanguage("js",Eo),Ne.registerLanguage("jsx",Eo),Ne.registerLanguage("typescript",To),Ne.registerLanguage("ts",To),Ne.registerLanguage("tsx",To),Ne.registerLanguage("python",ml),Ne.registerLanguage("py",ml),Ne.registerLanguage("bash",Io),Ne.registerLanguage("sh",Io),Ne.registerLanguage("shell",Io),Ne.registerLanguage("json",Kp),Ne.registerLanguage("css",nh),Ne.registerLanguage("html",Ao),Ne.registerLanguage("xml",Ao),Ne.registerLanguage("vue",Ao),Ne.registerLanguage("markdown",bl),Ne.registerLanguage("md",bl),Ne.registerLanguage("yaml",kl),Ne.registerLanguage("yml",kl),Ne.registerLanguage("diff",sh);const r=ne(!1),s=ne(!1),i=V(Ka),a=V(()=>!Ge.isolation||i.value),d=[{value:"inherit",label:"跟随全局"},{value:"enabled",label:"启用"},{value:"disabled",label:"关闭"}],g={Assistant:"助手",You:"你",User:"你",System:"系统","Context compaction":"上下文压缩",Config:"配置",Reasoning:"思考","Runtime tool":"运行时工具",multi_tool_use:"并行执行工具",文件下载:"文件下载"},f={"API key":"API Key","Base URL":"Base URL",Model:"模型","Fallback model":"备用模型",Endpoint:"Endpoint","Reasoning effort":"推理强度","Reasoning summary":"推理摘要","Max output tokens":"最大输出 Token","Timeout ms":"请求超时(ms)","Stream idle timeout ms":"流式空闲超时(ms)","Max retries":"最大重试次数"},h={openai:"OpenAI"},w={INVALID_REQUEST:"请求参数无效",SESSION_ACTIVE:"当前会话不能删除,请先切换到其他会话",SESSION_RUNNING:"运行中的会话不能删除,请等待运行结束",SESSION_NOT_FOUND:"会话不存在或已被删除",SESSION_RESUME_FAILED:"打开会话失败",SESSION_CREATE_FAILED:"新建会话失败",SESSION_DELETE_FAILED:"删除会话失败",PLUGIN_UPDATE_BLOCKED:"模型回答期间不能修改会话插件",PLUGIN_NOT_CONFIGURED:"插件功能未配置",PLUGIN_INVALID:"插件配置无效",PLUGIN_UPDATE_FAILED:"插件配置更新失败",PLUGINS_LOCKED:"插件配置已由环境变量锁定",TOOL_UPDATE_BLOCKED:"模型回答期间不能修改会话工具",TOOL_NOT_CONFIGURED:"工具配置功能未启用",TOOL_INVALID:"工具配置无效",TOOL_UPDATE_FAILED:"工具配置更新失败",PROMPT_UPDATE_FAILED:"提示词更新失败",PROMPT_INVALID:"提示词内容无效",FAST_MODE_UPDATE_FAILED:"快速模式切换失败",CONTEXT_WINDOW_UPDATE_BLOCKED:"回答期间不能调整上下文窗口",CONTEXT_WINDOW_INVALID:"请输入大于 0 的整数",CONTEXT_WINDOW_UPDATE_FAILED:"上下文窗口调整失败",CWD_NOT_CONFIGURED:"当前运行时不支持工作目录切换",CWD_INVALID:"路径不存在或不可访问",CWD_UPDATE_BLOCKED:"模型回答期间不能切换工作目录",CWD_UPDATE_FAILED:"工作目录切换失败",CWD_CREATE_FAILED:"文件夹新建失败",CWD_DELETE_FAILED:"只能删除空文件夹,且不能删除当前目录或其上级目录",LOGIN_INVALID:"模型配置无效",LOGIN_SAVE_FAILED:"模型配置保存失败",API_NOT_FOUND:"当前运行时不支持此功能,请重启服务",WEB_REQUEST_FAILED:"请求处理失败"};Ka()&&(Ge.adminOwnerUsername=sessionStorage.getItem(Xn)||"");const y="neoctl-web.tabId"+Va(),E="neoctl-web.sessionId"+Va();let _=U(),I=sessionStorage.getItem(E)||"",x=!I,L=!1;const R=[];function N(){return{id:"",title:"",content:"",usage:""}}function P(e){if(!e||typeof e!="object")return null;const n=String(e.title||"").trim(),c=String(e.content||"").trim();return!n||!c?null:{id:String(e.id||M()).trim(),title:n,content:c,usage:String(e.usage||"").trim()}}function M(){return`prompt-${Math.random().toString(36).slice(2,10)}`}function U(){let e=sessionStorage.getItem(y);return e||(e=q(),sessionStorage.setItem(y,e)),e}function q(){var c,u;if((c=globalThis.crypto)!=null&&c.randomUUID)return globalThis.crypto.randomUUID();const e=new Uint8Array(16);if((u=globalThis.crypto)!=null&&u.getRandomValues)globalThis.crypto.getRandomValues(e);else for(let p=0;p<e.length;p+=1)e[p]=Math.floor(Math.random()*256);e[6]=e[6]&15|64,e[8]=e[8]&63|128;const n=[...e].map(p=>p.toString(16).padStart(2,"0"));return`${n.slice(0,4).join("")}-${n.slice(4,6).join("")}-${n.slice(6,8).join("")}-${n.slice(8,10).join("")}-${n.slice(10).join("")}`}function z(e){const n=new URL(e,window.location.origin);return n.searchParams.set("tabId",_),I&&n.searchParams.set("sessionId",I),st(`${n.pathname}${n.search}${n.hash}`)}function te(e,n=!1){const c=(e==null?void 0:e.sessionId)||"";!c||c===I||!n&&!x&&I||(I=c,x=!1,sessionStorage.setItem(E,c))}const o=pr({connected:!1,connecting:!0,coreVersion:"",coreEasterEgg:!1,lines:[],status:{phase:"ready",streamedOutputTokens:0},appPrompt:{hasActivePrompt:!1,activePrompt:void 0},runtimeContext:void 0,runtimeContextLoading:!0,runtimeContextError:"",runtimeContextModal:"",runtimeContextDetail:void 0,settingsPage:"",projectContextOpen:!1,projectContextDocument:void 0,globalPlugins:{items:[],locked:!1,restartRequired:!1,installationSupported:!1,loading:!1},sessionPlugins:{items:[],busy:!1,loading:!1},globalTools:{items:[],loading:!1},sessionTools:{items:[],busy:!1,loading:!1},fastMode:!1,fastModeMutating:!1,fastModeDraft:!1,pendingSessionSettings:{},compactSaving:!1,modelModalOpen:!1,modelDraft:"",reasoningDraft:"default",modelSearch:"",modelError:"",modelSaving:!1,contextWindowModalOpen:!1,contextWindowDraft:"",contextWindowError:"",contextWindowSaving:!1,busy:!1,queuedInput:void 0,backgroundTaskCount:0,backgroundTasks:[],agentTaskHistory:[],terminalTaskHistory:[],backgroundSessionRunCount:0,runningSessionIds:[],session:void 0,modelSettings:void 0,cwd:"",cwdPicker:{open:!1,cwd:"",parent:"",home:"",entries:[],locations:[],treeRoots:[],treeChildren:{},treeExpanded:{},selectedPath:"",selectionExplicit:!1,input:"",loading:!1,mutating:!1,error:""},sessionsLoading:!1,sessionResumeLoading:!1,pendingResumeSessionId:"",catalog:{commands:[],modelIds:[],reasoning:[]},interactive:{},sessions:[],adminUsers:[],adminUsersLoading:!1,adminUserBusy:!1,adminUserError:"",login:void 0,cpaConfig:{url:"",password:"",hasPassword:!1,loaded:!1},cpaQuotas:[],cpaQuotaIndex:0,memory:{current:null,history:[],sampleMs:6e4,retentionMs:864e5},activePanel:"chat",toolDetailLineId:void 0,expandedToolGroups:{},compactionDetailLineId:void 0,backgroundTaskDetail:void 0,imagePreview:void 0,confirmDialog:{open:!1,title:"",message:"",confirmLabel:"确认",cancelLabel:"取消",tone:"warning"},promptLibrary:[],promptLibraryLoading:!0,promptManagerOpen:!1,selectedPromptId:"",composerDropActive:!1,composerDropMode:"prompt",attachments:[],attachmentCounter:0,uploadingFiles:!1,uploadProgress:0,messageImagePreviews:[],coreToolTimings:[],coreQueryTiming:void 0,timingTick:performance.now(),clockTick:Date.now(),composerMetrics:{context:{display:0,target:0,bump:0,initialized:!1},inputTokens:{display:0,target:0,bump:0,initialized:!1},outputTokens:{display:0,target:0,bump:0,initialized:!1}},toast:""}),oe=ne(""),ce=ne(""),W=ne(1),Q=ne(""),le=ne(jd()),F=ne(null),se=ne(null);let $;const K=ne(null),j=ne(null),re=ne(null),fe=ne(null),we=ne(null),Te=ne(""),De=V(()=>[{id:"tasks",title:"后台任务"},..._t.value?[{id:"quota",title:"周额度"}]:[],{id:"memory",title:"服务端内存"}]),Pe=e=>{var n;return((n=De.value.find(c=>c.id===e))==null?void 0:n.title)||""};function Xe(e){ir(),o.activePanel="chat",Te.value=e,Ye(()=>{var n;return(n=document.querySelector(".mobile-card-close"))==null?void 0:n.focus()})}function Ct(){Te.value="",Ye(()=>{var e,n;return(n=(e=we.value)==null?void 0:e.querySelector("summary"))==null?void 0:n.focus()})}const Je=ne(""),ae=pr({}),me=pr(N()),Ue=ne(""),et=ne(""),ft=ne(""),pt=ne("before"),yt=ne(-1);let xe,ds;const We=Zh({getElement:()=>j.value});let X=0,vt=0,Me,be=!1,Mt,it,jt,ht=0,H=Promise.resolve(),Z=0,ue=0,pe=0,Re,Ke,gs=!1,Gt,Rt;Yc();const qt=new Map,Nt=new Map,Nr=ne(0),Wt=V(()=>[...o.lines||[]].reverse().find(e=>Ju(e))||null),wc=V(()=>{var e;return sd((e=o.status)==null?void 0:e.phase)}),_c=V(()=>{var e,n;if(Wt.value)return sa(Wt.value)?"整理图片结果":"图片生成中";if(((e=o.status)==null?void 0:e.phase)==="running_tools"){const c=(n=o.status)==null?void 0:n.currentTool;if(String((c==null?void 0:c.name)||"").toLowerCase()==="image_create")return"图片生成中";if(c!=null&&c.name)return`调用 ${c.name}${c.kind?` · ${c.kind}`:""}`}return wc.value}),hi=V(()=>{var e;return yg((e=o.status)==null?void 0:e.phase)}),xc=V(()=>hi.value||o.busy||o.sessionResumeLoading),Sc=V(()=>{var e;if(o.sessionResumeLoading)return"正在加载会话";if(Wt.value){const n=St(Wt.value),c=sa(Wt.value)?"正在载入图片结果":"图片模型正在生成";return n==="排队中"?`${c} · 排队中`:c}if(((e=o.status)==null?void 0:e.phase)==="calling_model"){const n=o.status.modelOutput;if((n==null?void 0:n.kind)==="text")return"正在生成回复";if((n==null?void 0:n.kind)==="tool_call")return n.name?`正在准备调用 ${n.name}`:"正在准备工具调用"}return`正在${_c.value}`}),Ec=V(()=>{if(!o.sessionResumeLoading){if(Wt.value){const e=Wt.value,n=o.coreToolTimings.find(c=>{var u;return c.id===((u=e.timing)==null?void 0:u.id)})??e.timing;return No(n,o.timingTick,o.connected)}return No(o.coreQueryTiming,o.timingTick,o.connected)}}),mi=e=>String(e||"").replace(/设计/g,"").trim(),bi=e=>mi(e==null?void 0:e.title)||"未命名会话",Tn=V(()=>{var n;const e=mi((n=o.session)==null?void 0:n.title);return e&&e!=="neo"?e:""}),fs=V(()=>Tn.value||"未命名会话"),ps=ne(null),ki=ne(null),Lr=ne(!1);let hs;const $r=async()=>{await Ye();const e=ps.value,n=ki.value;Lr.value=!!(e&&n&&n.scrollWidth>e.clientWidth+2)},yi=V(()=>o.cwd||"—"),In=V(()=>{var c,u;const e=o.pendingSessionSettings,n=o.modelSettings||{model:(u=(c=o.status)==null?void 0:c.metrics)==null?void 0:u.model};return{model:e.model??n.model,reasoning:Object.hasOwn(e,"reasoning")||Object.hasOwn(e,"model")?e.reasoning:n.reasoning}}),Tc=V(()=>{var e;return sm(In.value.model,(e=In.value.reasoning)==null?void 0:e.effort)}),ms=V(()=>o.fastModeMutating?o.fastModeDraft:o.pendingSessionSettings.fastMode??o.fastMode),vi=V(()=>{var e;return[...new Set([In.value.model,(e=o.modelSettings)==null?void 0:e.model,...o.catalog.modelIds||[]].filter(Boolean))]}),Ic=V(()=>vi.value.filter(e=>e.toLowerCase().includes(o.modelSearch.trim().toLowerCase()))),bs=V(()=>{var c;const e=((c=o.catalog.modelReasoning)==null?void 0:c[o.modelDraft])||[],n=o.catalog.reasoning||[];return["default","off",...e.filter(u=>n.includes(u)&&u!=="default"&&u!=="off")]});Oe(()=>o.modelDraft,()=>{bs.value.includes(o.reasoningDraft)||(o.reasoningDraft="default")});const Ac=V(()=>`${o.composerMetrics.context.display.toFixed(1)}%`),Cc=V(()=>{var n,c;const e=Number(o.pendingSessionSettings.contextWindowTokens??((c=(n=o.status)==null?void 0:n.metrics)==null?void 0:c.contextWindowTokens));return Number.isFinite(e)&&e>0?String(Math.max(1,Math.round(e/1e3))):""}),Mc=V(()=>bn(o.composerMetrics.inputTokens.display)),Rc=V(()=>bn(o.composerMetrics.outputTokens.display)),Lt=V(()=>hi.value||o.busy),ks=V(()=>o.backgroundTasks.length),ys=V(()=>[...o.agentTaskHistory,...o.terminalTaskHistory].sort((e,n)=>{const c=u=>typeof u.completedAt=="number"?u.completedAt:Date.parse(u.completedAt||u.updatedAt||"")||(typeof u.createdAt=="number"?u.createdAt:0);return c(n)-c(e)})),An=V(()=>{const e=new Set;return[...o.backgroundTasks,...ys.value].filter(n=>{const c=Xt(n);return e.has(c)?!1:(e.add(c),!0)})}),Cn=V(()=>o.backgroundTasks[0]),Or=V(()=>!!(oe.value.trim()||o.attachments.length)),wi=V(()=>r.value?"正在处理":Lt.value?Or.value?"打断并发送":o.queuedInput?"立即发送":"停止":"发送 ↵"),Mn=V(()=>{const e=ce.value.trim().toLocaleLowerCase(),n=o.sessions||[];return e?n.filter(c=>[bi(c),c.ownerUsername,c.title,c.sessionId,c.updatedAt,c.createdAt].some(u=>String(u||"").toLocaleLowerCase().includes(e))):n}),vs=V(()=>Math.max(1,Math.ceil(Mn.value.length/Do))),Nc=V(()=>{const e=(W.value-1)*Do;return Mn.value.slice(e,e+Do)}),Lc=V(()=>{const e=vs.value,n=Math.max(1,Math.min(W.value-2,e-4)),c=Math.min(e,n+4);return Array.from({length:c-n+1},(u,p)=>n+p)}),Kt=V(()=>o.sessionResumeLoading?[]:qu((o.lines||[]).filter(e=>!ed(e)))),Dr=ne(0),ln=Kf(V(()=>({count:Kt.value.length,getScrollElement:()=>j.value,estimateSize:pg,getItemKey:e=>fg(Kt.value[e]),rangeExtractor:e=>{const n=new Set(Gl(e));return Kt.value.forEach((c,u)=>{(c==null?void 0:c.live)===!0&&n.add(u)}),[...n].sort((c,u)=>c-u)},overscan:8,scrollMargin:Nr.value,anchorTo:"start",followOnAppend:!1,useAnimationFrameWithResizeObserver:!0})));ln.value.shouldAdjustScrollPositionOnItemSizeChange=(e,n,c)=>{if(We.following||We.interacting||Dr.value)return!1;const u=(c.scrollOffset||0)+c.scrollAdjustments;return c.itemSizeCache.has(e.key)?e.end<=u&&c.scrollDirection!=="backward":e.start<u};const $c=V(()=>ln.value.getVirtualItems().filter(e=>Kt.value[e.index])),Oc=V(()=>ln.value.getTotalSize()),Dc=V(()=>{var e,n;return Array.isArray((n=(e=o.runtimeContext)==null?void 0:e.prompt)==null?void 0:n.sections)?o.runtimeContext.prompt.sections:[]}),Pr=V(()=>{var e;return Array.isArray((e=o.runtimeContext)==null?void 0:e.tools)?o.runtimeContext.tools:[]}),Rn=V(()=>{var e,n;return Array.isArray((n=(e=o.runtimeContext)==null?void 0:e.project)==null?void 0:n.documents)?o.runtimeContext.project.documents:[]}),Pc=V(()=>o.sessionPlugins.items.filter(e=>e.effectiveEnabled).length),Uc=V(()=>o.sessionTools.items.filter(e=>e.effectiveEnabled).length),at=V(()=>o.lines.find(e=>String(e.id)===String(o.toolDetailLineId))||null),wt=V(()=>o.lines.find(e=>String(e.id)===String(o.compactionDetailLineId))||null),Vt=V(()=>{var e;return((e=o.appPrompt)==null?void 0:e.activePrompt)||void 0}),Bc=V(()=>{var e,n;return((e=Vt.value)==null?void 0:e.title)||((n=Vt.value)==null?void 0:n.id)||""}),ws=V(()=>o.promptLibrary.find(e=>e.id===o.selectedPromptId)||o.promptLibrary[0]||null),_s=V(()=>le.value==="dark"),xs=V(()=>_s.value?"切换到日间模式":"切换到夜间模式"),_t=V(()=>o.cpaQuotas.length?o.cpaQuotas[o.cpaQuotaIndex%o.cpaQuotas.length]||o.cpaQuotas[0]:null),Ss=V(()=>{var e;return((e=o.memory)==null?void 0:e.current)||null}),Es=V(()=>{var v;const e=(((v=o.memory)==null?void 0:v.history)||[]).filter(T=>Number.isFinite(Number(T==null?void 0:T.rss))),n=e.map(T=>Number(T.rss));if(!n.length)return[];const c=Math.min(...n),u=Math.max(...n),p=Math.max(1,u-c);return n.map((T,O)=>({entry:e[O],x:n.length===1?130:O/(n.length-1)*260,y:n.length===1?22:40-(T-c)/p*36}))}),_i=V(()=>Es.value.map((e,n)=>`${n?"L":"M"} ${e.x.toFixed(1)} ${e.y.toFixed(1)}`).join(" ")),Nn=V(()=>Es.value[yt.value]||null);Oe(le,Gd,{immediate:!0}),Oe([Lt,_s],([e,n])=>{const u=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M32 4 50 32 32 60 14 32Z" fill="${e?n?"#bef264":"#a3e635":n?"#38bdf8":"#7dd3fc"}"/></svg>`,p=document.querySelector('link[rel="icon"]');p&&(p.href=`data:image/svg+xml,${encodeURIComponent(u)}`)},{immediate:!0}),Oe(Tn,e=>{document.title=e||"对话工作台"},{immediate:!0}),Oe(fs,$r,{immediate:!0}),Oe(ce,()=>{W.value=1}),Oe(vs,e=>{W.value>e&&(W.value=e)}),Oe(()=>{var e;return(e=o.backgroundTaskDetail)==null?void 0:e.output},async()=>{await Ye();const e=fe.value;e&&(e.scrollTop=e.scrollHeight)}),Oe(j,e=>We.attach(e),{flush:"post"}),Oe(()=>Kt.value.length,async()=>{await Ye(),yo(),rr()}),Oe(()=>o.activePanel,async e=>{e==="chat"&&(await Ye(),yo(),rr())});async function zc(){sessionStorage.removeItem(Xn),(await ye("/api/auth/logout",{method:"POST"})).ok&&location.reload()}Vo(async()=>{$=Ng({getTarget:()=>se.value,onHover:e=>{o.composerDropActive=e,o.composerDropMode=e?"files":"prompt"},onFiles:e=>{var n;for(const c of e)o.attachments.push({...c,localReference:!0,label:`[file#${++o.attachmentCounter}]`});(n=F.value)==null||n.focus(),J(`已引用 ${e.length} 个本地文件(未上传)`)},onError:e=>J(String((e==null?void 0:e.message)||e))}),typeof ResizeObserver<"u"&&(Rt=new ResizeObserver(()=>{rr(),We.schedule()}),yo()),rr(),await Promise.all([Ln(),Fc(),$n(),Ur(),Ts(),xi(),Fr(),Ui()]),As(),Mt=setInterval(()=>{o.clockTick=Date.now(),o.timingTick=performance.now()},1e3),it=setInterval(Fr,6e4),jt=setInterval(Ui,6e4),window.addEventListener("keydown",wa),document.addEventListener("click",Zi),document.addEventListener("click",Qi),document.addEventListener("pointerdown",Fa,!0),typeof ResizeObserver<"u"&&ps.value&&(hs=new ResizeObserver($r),hs.observe(ps.value)),$r()}),Ht(()=>{$==null||$(),xe&&xe.close(),We.dispose(),X&&cancelAnimationFrame(X),Cs(),Me=void 0,ht&&cancelAnimationFrame(ht),Mt&&clearInterval(Mt),it&&clearInterval(it),jt&&clearInterval(jt),Gt&&clearTimeout(Gt),hs&&hs.disconnect(),Rt&&Rt.disconnect(),document.body.classList.remove("tool-detail-open","image-preview-open","runtime-context-open","context-window-open","cwd-picker-lock"),Ke&&un(!1),window.removeEventListener("keydown",wa),document.removeEventListener("click",Zi),document.removeEventListener("click",Qi),document.removeEventListener("pointerdown",Fa,!0)});async function Ln(e={}){try{const n=await ye(z("/api/state"));if(!n.ok)throw new Error(`state ${n.status}`);return Ms(await n.json()),!0}catch(n){return e.silent||J(`运行时不可用:${n.message||n}`),!1}}async function Fc(){try{const e=await ye(z("/api/client-info"),{cache:"no-store"});if(!e.ok)return;Si(await e.json())}catch{}}async function $n(){o.runtimeContextLoading=!0;try{const e=await ye(z("/api/runtime-context")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`runtime-context ${e.status}`);return Ti(n),!0}catch(e){return o.runtimeContextError=e.message||String(e),!1}finally{o.runtimeContextLoading=!1}}async function Hc(){o.globalTools.loading=!0;try{const e=await ye(z("/api/tools")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`tools ${e.status}`);o.globalTools={items:Array.isArray(n.items)?n.items.map(c=>({...c})):[],loading:!1}}catch(e){o.globalTools.loading=!1,J(e.message||String(e))}}async function jc(){const e=Object.fromEntries(o.globalTools.items.map(n=>[n.name,n.configuredEnabled!==!1]));o.globalTools.loading=!0;try{const n=await Ie("/api/tools/global",{overrides:e});o.globalTools={...n.state,loading:!1},await Promise.all([Ts(),$n()]),J("全局工具配置已保存,各会话在下一轮或刷新时生效")}catch(n){o.globalTools.loading=!1,He(n,"工具配置保存失败")}}async function Ts(){o.sessionTools.loading=!0;try{const e=await ye(z("/api/session-tools")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`session-tools ${e.status}`);o.sessionTools={...n,items:Array.isArray(n.items)?n.items:[],loading:!1}}catch(e){o.sessionTools.loading=!1,J(e.message||String(e))}}async function Gc(e,n){const c=Object.fromEntries(o.sessionTools.items.map(u=>[u.name,u.name===e.name?n:u.mode]));o.sessionTools.busy=!0;try{const u=await Ie("/api/session-tools",{overrides:c});o.sessionTools={...u.state,loading:!1,busy:!1}}catch(u){o.sessionTools.busy=!1,He(u,"会话工具更新失败")}}async function Is(){o.globalPlugins.loading=!0;try{const e=await ye(z("/api/plugins")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`plugins ${e.status}`);o.globalPlugins={items:Array.isArray(n.items)?n.items.map(c=>({...c})):[],locked:n.locked===!0,restartRequired:n.restartRequired!==!1,installationSupported:n.installationSupported===!0,loading:!1}}catch(e){o.globalPlugins.loading=!1,J(e.message||String(e))}}async function qc(){const e=o.globalPlugins.items.filter(n=>n.configuredEnabled!==!1).map(n=>n.id);o.globalPlugins.loading=!0;try{const n=await Ie("/api/plugins/global",{enabledIds:e}),c=new Set(n.enabledIds||e);o.globalPlugins.items=o.globalPlugins.items.map(u=>({...u,configuredEnabled:c.has(u.id)})),await Is(),J("插件配置已生效;运行中的会话在下一次模型调用前更新")}catch(n){He(n,"插件配置保存失败")}finally{o.globalPlugins.loading=!1}}async function Wc(){const e=window.prompt("仅安装可信插件:插件以本机权限运行。输入服务器上的插件目录绝对路径(需含 neo-plugin.json)");if(e!=null&&e.trim()){o.globalPlugins.loading=!0;try{await Ie("/api/plugins/install",{directory:e.trim()}),await Is(),J("插件已安装;运行中的会话在下一次模型调用前更新")}catch(n){He(n,"插件安装失败")}finally{o.globalPlugins.loading=!1}}}async function Kc(e){if(window.confirm(`卸载“${e.name}”?历史资源将不可访问,用户数据保留。`)){o.globalPlugins.loading=!0;try{await Ie("/api/plugins/uninstall",{id:e.id}),await Is(),J("插件已卸载,用户数据已保留")}catch(n){He(n,"插件卸载失败")}finally{o.globalPlugins.loading=!1}}}async function Ur(){o.sessionPlugins.loading=!0;try{const e=await ye(z("/api/session-plugins")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`session-plugins ${e.status}`);o.sessionPlugins={...n,items:Array.isArray(n.items)?n.items:[],loading:!1}}catch(e){o.sessionPlugins.loading=!1,J(e.message||String(e))}}async function Vc(e,n){var u;const c=Object.fromEntries(o.sessionPlugins.items.map(p=>[p.id,p.id===e.id?n:p.mode]));o.sessionPlugins.busy=!0;try{const p=await Ie("/api/session-plugins",{overrides:c});o.sessionPlugins={...p.state,loading:!1,busy:!1},(u=p.state)!=null&&u.pending&&J("已保存,将在下一次模型调用前生效")}catch(p){o.sessionPlugins.busy=!1,He(p,"会话插件更新失败")}}async function xi(){if(Ge.isolation){o.promptLibraryLoading=!1;return}o.promptLibraryLoading=!0;try{const e=await ye(z("/api/prompt-library")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`prompt-library ${e.status}`);On(Array.isArray(n.items)?n.items:R)}catch(e){On([]),J(e.message||String(e))}finally{o.promptLibraryLoading=!1}}function As(){xe&&xe.close(),X&&cancelAnimationFrame(X),X=0,Cs(),Me=void 0,be=!1,o.connecting=!0,xe=new EventSource(z("/events")),xe.addEventListener("open",()=>{be=!1,o.connected=!0,o.connecting=!1}),xe.addEventListener("error",()=>{Br(),o.connected=!1,o.connecting=!1}),xe.addEventListener("sync",e=>{if(!be){be=!0,Ai(e.data);return}Xc(e.data)}),xe.addEventListener("delta",e=>{Br(),Jc(e.data)}),xe.addEventListener("terminal.output",e=>{try{Br(),ru(JSON.parse(e.data))}catch{}}),xe.addEventListener("client.version",e=>{try{Si(JSON.parse(e.data))}catch{}}),xe.addEventListener("client.reload",e=>{try{Zc(JSON.parse(e.data))}catch{}}),xe.addEventListener("runtime.context",e=>{try{Ti(JSON.parse(e.data))}catch(n){o.runtimeContextError=n.message||String(n)}}),xe.addEventListener("runtime.context.error",e=>{try{const n=JSON.parse(e.data);o.runtimeContextError=n.message||"运行上下文同步失败"}catch{o.runtimeContextError="运行上下文同步失败"}})}function Si(e){if(Number(e==null?void 0:e.protocolVersion)!==1)return;o.coreVersion=String(e.coreVersion||"");const n=String(e.revision||"").trim();if(!n)return;const c=localStorage.getItem(Po);localStorage.setItem(Po,n),c&&c!==n&&Ei({...e,requestId:`revision:${n}`,clearCache:!0})}async function Zc(e){if(Number(e==null?void 0:e.protocolVersion)!==1)return;const n=String(e.requestId||"").trim();if(!n||sessionStorage.getItem(Al)===n)return;sessionStorage.setItem(Al,n);const c=String(e.revision||"").trim();c&&localStorage.setItem(Po,c),o.coreVersion=String(e.coreVersion||o.coreVersion||""),await Ei(e)}async function Ei(e){if(gs)return;gs=!0,e.clearCache!==!1&&await Qc();const n=new URL(window.location.href);n.searchParams.set(Uo,String(e.requestId||e.revision||Date.now())),window.location.replace(n.href)}async function Qc(){const e=[];"caches"in window&&e.push(caches.keys().then(n=>Promise.all(n.map(c=>caches.delete(c))))),"serviceWorker"in navigator&&e.push(navigator.serviceWorker.getRegistrations().then(n=>Promise.all(n.map(c=>c.unregister())))),await Promise.allSettled(e)}function Yc(){const e=new URL(window.location.href);e.searchParams.has(Uo)&&(e.searchParams.delete(Uo),window.history.replaceState(window.history.state,"",e.href))}function cn(){Gt&&clearTimeout(Gt),o.coreEasterEgg=!1,requestAnimationFrame(()=>{o.coreEasterEgg=!0,Gt=setTimeout(()=>{o.coreEasterEgg=!1},1300)})}function Ti(e){var p,v;if(![1,2].includes(Number(e==null?void 0:e.protocolVersion)))throw new Error(`不支持的运行上下文协议版本:${(e==null?void 0:e.protocolVersion)??"未知"}`);const n=Number(e.revision||0),c=Number(((p=o.runtimeContext)==null?void 0:p.revision)||0);(!e.sessionId||!((v=o.runtimeContext)!=null&&v.sessionId)||e.sessionId===o.runtimeContext.sessionId)&&n<c||(o.runtimeContext=e,o.projectContextDocument&&!Rn.value.some(T=>T.path===o.projectContextDocument.path)&&(o.projectContextDocument=void 0),o.projectContextOpen&&Rn.value.length===0&&(o.projectContextOpen=!1,document.body.classList.remove("runtime-context-open")),o.runtimeContextLoading=!1,o.runtimeContextError="")}function Xc(e){Me=e,!X&&(X=requestAnimationFrame(()=>{X=0,Ii()}))}function Br(){X&&cancelAnimationFrame(X),X=0,Ii()}function Ii(){const e=Me;Me=void 0,e&&Ai(e)}function Ai(e){try{Ms(JSON.parse(e))}catch(n){J(`运行状态同步失败:${n.message||n}`)}}function Jc(e){try{su(JSON.parse(e))}catch(n){J(`流式增量同步失败:${n.message||n}`),Ln()}}function eu(e,n){const c=String(n||"");if(!c)return;const u=String(e);Nt.set(u,`${Nt.get(u)||""}${c}`),Ci()}function Ci(){vt||(vt=requestAnimationFrame(tu))}function tu(){vt=0;const e=We.following,n=[...Nt];Nt.clear();for(const[c,u]of n){const p=o.lines.findIndex(T=>String(T.id)===c);if(p<0)continue;const v=o.lines[p];o.lines[p]={...v,text:`${v.text||""}${u}`}}e&&vo(),Nt.size&&Ci()}function nu(e){const n=String(e),c=Nt.get(n);if(!c)return;Nt.delete(n);const u=o.lines.findIndex(v=>String(v.id)===n);if(u<0)return;const p=o.lines[u];o.lines[u]={...p,text:`${p.text||""}${c}`}}function Cs(){vt&&cancelAnimationFrame(vt),vt=0,Nt.clear()}function su(e){const n=String(e.sessionId||"");if(I&&n&&n!==I&&!x){da();return}const c=We.following;for(const u of e.operations||[]){if(u.type==="line.append"){o.lines.some(v=>{var T;return String(v.id)===String((T=u.line)==null?void 0:T.id)})||o.lines.push(u.line);continue}const p=o.lines.findIndex(v=>String(v.id)===String(u.id));if(p<0)throw new Error(`找不到增量消息行 ${u.id}`);if(o.lines[p],u.type==="line.text.append")eu(u.id,u.text);else if(u.type==="line.patch"){nu(u.id);const v=o.lines[p];o.lines[p]={...v,...u.patch||{}}}}e.status&&(o.status=e.status,ra(e.status)),Qr(),o.connected=!0,o.connecting=!1,c&&vo()}function ru(e){var n,c;for(const u of(e==null?void 0:e.updates)||[]){const p=String((u==null?void 0:u.sessionId)||"");if(!p||u.ownerSessionId!==((n=o.session)==null?void 0:n.sessionId)||u.invalidated===!0)continue;const v=o.backgroundTasks.findIndex(k=>String((k==null?void 0:k.sessionId)||"")===p);if(v<0)continue;const T=String(u.text||"");if(!T)continue;const O=o.backgroundTasks[v],G=String(O.output||""),B=Number(O.outputEnd??G.length),de=Number(u.outputStart??B),Ce=Number(u.outputEnd??de+T.length),Ut=de===B?ou(G,T,Cl):T.slice(-Cl);o.backgroundTasks[v]={...O,output:Ut,outputEnd:Ce},String(((c=o.backgroundTaskDetail)==null?void 0:c.sessionId)||"")===p&&(o.backgroundTaskDetail={...o.backgroundTaskDetail,output:Ut,outputEnd:Ce})}}function ou(e,n,c){const u=`${e}${n}`;return u.length<=c?u:u.slice(-c)}function Ms(e){var p,v,T,O;Cs();const n=String(((p=e.session)==null?void 0:p.sessionId)||""),c=String(((v=o.session)==null?void 0:v.sessionId)||"");if(n&&n!==c&&fn(),I&&n&&n!==I&&!x){da();return}pe+=1;const u=We.following;if(n!==c&&(We.reset(),Ls(),bg(),o.messageImagePreviews=o.messageImagePreviews.filter(G=>G.sessionId===n),o.attachmentCounter=0),o.lines=e.lines||[],o.toolDetailLineId!==void 0&&!o.lines.some(G=>String(G.id)===String(o.toolDetailLineId))&&fn(),o.compactionDetailLineId!==void 0&&!o.lines.some(G=>String(G.id)===String(o.compactionDetailLineId))&&zs(),Yd(o.lines),o.status=e.status||o.status,ra(e.status),Qr(),o.busy=!!e.busy,o.queuedInput=e.queuedInput,o.backgroundTaskCount=e.backgroundTaskCount||0,o.backgroundTasks=e.backgroundTasks||[],o.agentTaskHistory=e.agentTaskHistory||[],o.terminalTaskHistory=e.terminalTaskHistory||[],o.backgroundTaskDetail){const G=An.value.find(B=>Xt(B)===Xt(o.backgroundTaskDetail));G?o.backgroundTaskDetail={...G}:o.backgroundTaskDetail.kind==="terminal"&&o.backgroundTaskDetail.ownerSessionId===((T=e.session)==null?void 0:T.sessionId)?o.backgroundTaskDetail={...o.backgroundTaskDetail,status:"unknown",outputAvailability:"unavailable"}:Ks()}if(o.backgroundSessionRunCount=e.backgroundSessionRunCount||0,o.runningSessionIds=e.runningSessionIds||[],o.session=e.session,o.modelSettings=e.modelSettings,o.pendingSessionSettings={...e.pendingSessionSettings||{}},o.cwd=e.cwd||"",o.fastMode=e.fastMode===!0,o.appPrompt=e.appPrompt||{hasActivePrompt:!1,activePrompt:void 0},te(e.session,x),n&&n!==c&&Promise.all([Ur(),Ts()]),o.sessionResumeLoading){const G=((O=e.session)==null?void 0:O.sessionId)||"";o.pendingResumeSessionId&&G===o.pendingResumeSessionId&&(o.sessionResumeLoading=!1,o.pendingResumeSessionId="")}e.catalog&&(o.catalog=e.catalog),e.interactive&&(o.interactive=e.interactive),e.tips&&(o.tips=e.tips),e.tipIndex!==void 0&&o.tipIndex===0&&(o.tipIndex=e.tipIndex),o.connected=!0,o.connecting=!1,nd(o.backgroundTasks),kg(),u&&vo()}function On(e,n=o.selectedPromptId){const c=(e||[]).map(P).filter(Boolean);o.promptLibrary=c;const u=c.find(p=>p.id===n)||c[0]||null;o.selectedPromptId=(u==null?void 0:u.id)||"",Dn(u||N())}function Dn(e){me.id=(e==null?void 0:e.id)||"",me.title=(e==null?void 0:e.title)||"",me.content=(e==null?void 0:e.content)||"",me.usage=(e==null?void 0:e.usage)||""}function zr(e){if(Ge.isolation)return;o.activePanel="prompts",o.promptManagerOpen=!0,e&&(o.selectedPromptId=e);const n=o.promptLibrary.find(c=>c.id===o.selectedPromptId)||o.promptLibrary[0]||N();o.selectedPromptId=n.id||"",Dn(n)}function iu(e){o.selectedPromptId=e.id,zr(e.id)}function au(){o.selectedPromptId="",Dn(N()),o.activePanel="prompts",o.promptManagerOpen=!0}function lu(e){o.selectedPromptId=e.id,Dn(e)}async function cu(){const e=P({id:me.id||M(),title:me.title,content:me.content,usage:me.usage});if(!e){J("标题和内容不能为空");return}try{const n=await Ie("/api/prompt-library",{item:e});On(n.items,e.id)}catch(n){J(n.message||String(n));return}J("已保存提示词")}async function uu(){var u;const e=String(me.id||"").trim();if(!e){Dn(N());return}const n=o.promptLibrary.find(p=>p.id===e);if(!(!n||!await Un({title:"删除提示词?",message:`“${n.title}”删除后无法恢复。`,confirmLabel:"确认删除",tone:"danger"}))){try{const p=await Ie("/api/prompt-library/delete",{id:e});On(p.items)}catch(p){J(p.message||String(p));return}((u=Vt.value)==null?void 0:u.id)===n.id&&Mi({confirm:!1}),J("已删除提示词")}}async function Pn(e){const n=P(e);if(!n){J("提示词无效");return}const c=Vt.value;if(c&&(c.id!==n.id||String(c.content||"").trim()!==n.content)){const p=c.id===n.id;if(!await Un({title:p?"更新当前提示词?":"切换当前提示词?",message:p?`“${n.title}”的内容已经变化。重新应用会影响模型对后续问题的理解和回答方式。`:`将从“${c.title||c.id||"当前提示词"}”切换为“${n.title}”。提示词变化会影响模型对后续问题的理解和回答方式。`,confirmLabel:p?"确认更新":"确认切换"}))return}try{const p=await Ie("/api/app-prompt",{id:n.id,title:n.title,usage:n.usage,source:"sidebar-library",content:n.content});(p==null?void 0:p.ok)!==!1&&(o.appPrompt=p.appPrompt||{hasActivePrompt:!0,activePrompt:n},J(`已应用:${n.title}`))}catch(p){He(p,"应用提示词失败")}}async function Mi(e={}){if(Vt.value&&!(e.confirm!==!1&&!await Un({title:"清除当前提示词?",message:"清除后,模型将不再遵循当前应用提示词,这会改变它对后续问题的理解和回答方式。",confirmLabel:"确认清除",tone:"danger"})))try{const n=await Ie("/api/app-prompt",{clear:!0});(n==null?void 0:n.ok)!==!1&&(o.appPrompt=n.appPrompt||{hasActivePrompt:!1,activePrompt:void 0},J("已清空应用提示词"))}catch(n){He(n,"清空提示词失败")}}function Un(e){return Ke&&un(!1),Object.assign(o.confirmDialog,{open:!0,title:String((e==null?void 0:e.title)||"请确认"),message:String((e==null?void 0:e.message)||""),confirmLabel:String((e==null?void 0:e.confirmLabel)||"确认"),cancelLabel:String((e==null?void 0:e.cancelLabel)||"取消"),tone:(e==null?void 0:e.tone)==="danger"?"danger":"warning"}),new Promise(n=>{Ke=n})}function un(e){const n=Ke;Ke=void 0,o.confirmDialog.open=!1,n==null||n(e===!0)}function du(e,n){Ue.value=n.id,e!=null&&e.dataTransfer&&(e.dataTransfer.effectAllowed="copy",e.dataTransfer.setData("application/x-neoctl-prompt-id",n.id),e.dataTransfer.setData("text/plain",n.title))}function gu(e){var u;const n=Array.from(((u=e==null?void 0:e.dataTransfer)==null?void 0:u.types)||[]),c=hu(e);!n.includes("application/x-neoctl-prompt-id")&&!c||(e.preventDefault(),o.composerDropActive=!0,o.composerDropMode=c?"files":"prompt",e.dataTransfer&&(e.dataTransfer.dropEffect="copy"))}function fu(e){e!=null&&e.currentTarget&&(e!=null&&e.relatedTarget)&&e.currentTarget.contains(e.relatedTarget)||(o.composerDropActive=!1,o.composerDropMode="prompt")}async function pu(e){var p,v;const n=mu(e==null?void 0:e.dataTransfer);if(n.length){if(e.preventDefault(),o.composerDropActive=!1,o.composerDropMode="prompt",Ue.value="",as()){J("桌面拖拽仅引用原路径;请更新桌面端以启用原生拖拽,不会上传文件");return}await xa(n),(p=F.value)==null||p.focus();return}const c=((v=e==null?void 0:e.dataTransfer)==null?void 0:v.getData("application/x-neoctl-prompt-id"))||Ue.value;if(o.composerDropActive=!1,o.composerDropMode="prompt",!c)return;e.preventDefault();const u=o.promptLibrary.find(T=>T.id===c);if(Ue.value="",!u){J("未找到提示词");return}await Pn(u)}function hu(e){var c,u;return Array.from(((c=e==null?void 0:e.dataTransfer)==null?void 0:c.types)||[]).includes("Files")?!0:Array.from(((u=e==null?void 0:e.dataTransfer)==null?void 0:u.items)||[]).some(p=>p.kind==="file")}function mu(e){const n=Array.from((e==null?void 0:e.files)||[]);return n.length?n:Array.from((e==null?void 0:e.items)||[]).filter(c=>c.kind==="file").map(c=>c.getAsFile()).filter(Boolean)}function bu(){Ue.value="",o.composerDropActive=!1,o.composerDropMode="prompt"}function ku(e,n){et.value=n.id,ft.value="",e!=null&&e.dataTransfer&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("application/x-neoctl-prompt-sort-id",n.id),e.dataTransfer.setData("text/plain",n.title))}function yu(e,n){var p,v,T;const c=et.value||((p=e==null?void 0:e.dataTransfer)==null?void 0:p.getData("application/x-neoctl-prompt-sort-id"));if(!c||c===n.id)return;e.preventDefault();const u=(T=(v=e.currentTarget)==null?void 0:v.getBoundingClientRect)==null?void 0:T.call(v);ft.value=n.id,pt.value=u&&e.clientY>u.top+u.height/2?"after":"before",e.dataTransfer&&(e.dataTransfer.dropEffect="move")}async function vu(e,n){var G;e.preventDefault();const c=((G=e==null?void 0:e.dataTransfer)==null?void 0:G.getData("application/x-neoctl-prompt-sort-id"))||et.value,u=pt.value;if(Ri(),!c||c===n.id)return;const p=[...o.promptLibrary],v=p.findIndex(B=>B.id===c);if(v<0)return;const[T]=p.splice(v,1),O=p.findIndex(B=>B.id===n.id);if(!(O<0)){p.splice(O+(u==="after"?1:0),0,T),o.promptLibrary=p;try{const B=await Ie("/api/prompt-library/reorder",{ids:p.map(de=>de.id)});On(B.items,o.selectedPromptId),J("提示词顺序已更新")}catch(B){await xi(),J(B.message||String(B))}}}function Ri(){et.value="",ft.value="",pt.value="before"}async function Ni(){if(r.value||i.value)return;const e=oe.value;if(!e.trim()&&o.attachments.length===0)return;if(e.trim()==="/sessions"){oe.value="",Kn(),await Ds();return}if(e.trim()==="/login"){oe.value="",Kn(),await zn();return}if(e.trim()==="/new"){oe.value="",Kn(),await Us();return}const n=[...o.attachments],c=n.filter(v=>v.kind==="image"),u=n.filter(v=>v.kind==="file"&&v.absolutePath),p=Ea(e,c);Ta(c),oe.value="",o.attachments=[],Kn(),r.value=!0;try{const v=await ye(z("/api/submit"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:p,attachments:[...c,...u]})}),T=await v.json();if(!v.ok||T!=null&&T.error)throw new Error(T.error||`submit ${v.status}`)}catch(v){J(v.message||String(v))}finally{r.value=!1}}async function wu(){if(r.value)return;if(!Or.value){o.queuedInput?await $i():await Li();return}const e=oe.value,n=[...o.attachments],c=n.filter(v=>v.kind==="image"),u=n.filter(v=>v.kind==="file"&&v.absolutePath),p=Ea(e,c);Ta(c),oe.value="",o.attachments=[],Kn(),r.value=!0;try{await Ie("/api/submit-now",{text:p,attachments:[...c,...u]})}catch(v){J(v.message||String(v))}finally{r.value=!1}}async function Li(){if(!r.value){r.value=!0;try{await Ie("/api/interrupt",{})}catch(e){He(e,"停止回答失败")}finally{r.value=!1}}}async function _u(){try{const e=await Ie("/api/queue/cancel",{});J(e.cancelled?"已撤回排队消息":"没有待撤回的消息")}catch(e){He(e,"撤回排队消息失败")}}async function $i(){if(!r.value){r.value=!0;try{const e=await Ie("/api/queue/send-now",{});J(e.interrupted?"已打断并发送排队消息":"已发送排队消息")}catch(e){He(e,"发送排队消息失败")}finally{r.value=!1}}}function Rs(e){const n=z(e),c=ue;return{url:n,revision:pe,isCurrent:()=>c===ue&&n===z(e)}}async function Ns(e,n=()=>!0){if(!e.isCurrent()||!n()||e.revision===pe)return;const c=pe;try{const u=new URL(e.url,window.location.origin);u.pathname="/api/state";const p=await ye(`${u.pathname}${u.search}`,{cache:"no-store"}),v=await p.json();p.ok&&e.isCurrent()&&n()&&c===pe&&Ms(v)}catch{}}function Ls(){ue+=1,Z+=1,H=Promise.resolve(),o.fastModeMutating=!1,o.compactSaving=!1,o.modelSaving=!1,o.contextWindowSaving=!1,o.modelModalOpen=!1,o.contextWindowModalOpen=!1,o.modelError="",o.contextWindowError="",o.pendingSessionSettings={},Re=void 0,document.body.classList.remove("context-window-open")}function $s(e,n){J(`${e}${n.deferred===!0?"将在下一轮生效":"已生效"}`)}function Oi(e){Re=document.activeElement,document.body.classList.add("context-window-open"),Ye(()=>{var n;return(n=document.querySelector(e))==null?void 0:n.focus()})}function Di(){document.body.classList.remove("context-window-open"),Re!=null&&Re.isConnected&&Re.focus(),Re=void 0}function Pi(e){if(e.key!=="Tab")return;const n=[...e.currentTarget.querySelectorAll('button:not(:disabled), input:not(:disabled), select:not(:disabled), [tabindex="0"]')].filter(p=>p.getClientRects().length),c=n[0],u=n.at(-1);e.shiftKey&&document.activeElement===c?(e.preventDefault(),u==null||u.focus()):!e.shiftKey&&document.activeElement===u&&(e.preventDefault(),c==null||c.focus())}async function xu(){if(o.compactSaving||o.pendingSessionSettings.compact)return;const e=Rs("/api/compact");o.compactSaving=!0;try{const n=await Ie(e.url,{},!0);if(!e.isCurrent())return;n.deferred&&(o.pendingSessionSettings.compact=!0),$s("压缩会话",n),await Ns(e)}catch(n){e.isCurrent()&&He(n,"压缩上下文失败")}finally{e.isCurrent()&&(o.compactSaving=!1)}}function Su(){o.modelDraft=In.value.model||vi.value[0]||"";const e=In.value.reasoning;o.reasoningDraft=e===null?"off":(e==null?void 0:e.effort)||"default",bs.value.includes(o.reasoningDraft)||(o.reasoningDraft="default"),o.modelSearch="",o.modelError="",o.modelModalOpen=!0,Oi("#session-model-search")}function Bn(){o.modelModalOpen=!1,o.modelError="",Di()}async function Eu(){if(o.modelSaving||!o.modelDraft)return;const e=Rs("/api/session-model"),n=o.modelDraft,c=bs.value.includes(o.reasoningDraft)?o.reasoningDraft:"default";o.modelSaving=!0,o.modelError="";try{const u=await Ie(e.url,{model:n,reasoning:c},!0);if(!e.isCurrent())return;delete o.pendingSessionSettings.model,delete o.pendingSessionSettings.reasoning,u.deferred?Object.assign(o.pendingSessionSettings,{model:u.modelSettings.model,reasoning:u.modelSettings.reasoning}):o.modelSettings=u.modelSettings,Bn(),$s("模型",u),await Ns(e)}catch(u){e.isCurrent()&&(o.modelError=tt(u,"模型切换失败"))}finally{e.isCurrent()&&(o.modelSaving=!1)}}function Tu(){o.contextWindowDraft=Cc.value,o.contextWindowError="",o.contextWindowModalOpen=!0,Oi("#context-window-input")}function Os(){o.contextWindowModalOpen=!1,o.contextWindowError="",Di()}function Iu(){o.contextWindowError=""}async function Au(){var c;if(o.contextWindowSaving)return;const e=String(o.contextWindowDraft||"").trim();if(!/^\d+$/.test(e)||!Number.isSafeInteger(Number(e)*1e3)||Number(e)<=0){o.contextWindowError="请输入大于 0 的整数";return}const n=Rs("/api/context-window");o.contextWindowSaving=!0,o.contextWindowError="";try{const u=await Ie(n.url,{value:e},!0);if(!n.isCurrent())return;const p=Number(u.contextWindowTokens);if(u.deferred)o.pendingSessionSettings.contextWindowTokens=p;else{delete o.pendingSessionSettings.contextWindowTokens;const v=((c=o.status)==null?void 0:c.metrics)||{};o.status={...o.status,metrics:{...v,contextWindowTokens:p,contextWindowSource:"session",contextUsageRatio:p>0?Number(v.estimatedInputTokens||0)/p:void 0}},Qr()}Os(),$s("上下文窗口",u),await Ns(n)}catch(u){n.isCurrent()&&(o.contextWindowError=tt(u,"调整失败"))}finally{n.isCurrent()&&(o.contextWindowSaving=!1)}}function Cu(){const e=!ms.value,n=++Z,c=Rs("/api/fast-mode");o.fastModeDraft=e,o.fastModeMutating=!0,H=H.catch(()=>{}).then(()=>Ie(c.url,{enabled:e},!0)).then(async u=>{!c.isCurrent()||n!==Z||(u.deferred?o.pendingSessionSettings.fastMode=u.fastMode===!0:(delete o.pendingSessionSettings.fastMode,o.fastMode=u.fastMode===!0),o.fastModeMutating=!1,$s("快速模式",u),await Ns(c,()=>n===Z))}).catch(async u=>{if(!(!c.isCurrent()||n!==Z)){o.fastModeMutating=!1,He(u,"快速模式切换失败");try{const p=await ye(c.url.replace("/api/fast-mode?","/api/state?")),v=await p.json();p.ok&&c.isCurrent()&&n===Z&&Ms(v)}catch{}}})}async function Ds(){o.activePanel="sessions",o.sessionsLoading=!0;try{if(i.value){const e=await ye("/api/admin/sessions"),n=await e.json().catch(()=>({}));if(!e.ok||n!=null&&n.error)throw xt(n,e.status);o.sessions=(n.groups||[]).flatMap(c=>(c.sessions||[]).map(u=>({...u,ownerUsername:c.user.username,ownerDeleted:c.user.deleted===!0}))),o.runningSessionIds=[]}else{const e=await ye(z("/api/sessions")),n=await e.json().catch(()=>({}));if(!e.ok||n!=null&&n.error||(n==null?void 0:n.ok)===!1)throw xt(n,e.status);o.sessions=n.sessions||[],o.runningSessionIds=n.runningSessionIds||[]}}catch(e){He(e,"加载会话失败")}finally{o.sessionsLoading=!1}}async function Ps(){if(i.value){o.activePanel="users",o.adminUsersLoading=!0,o.adminUserError="";try{const e=await ye("/api/admin/users"),n=await e.json().catch(()=>({}));if(!e.ok||n!=null&&n.error)throw xt(n,e.status);o.adminUsers=n.users||[]}catch(e){o.adminUserError=tt(e,"加载用户失败")}finally{o.adminUsersLoading=!1}}}async function Mu(){o.adminUserBusy=!0,o.adminUserError="";try{const e=await ye("/api/admin/users",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:Q.value})}),n=await e.json().catch(()=>({}));if(!e.ok||n!=null&&n.error)throw xt(n,e.status);Q.value="",J("普通用户已创建"),await Ps()}catch(e){o.adminUserError=tt(e,"创建用户失败")}finally{o.adminUserBusy=!1}}async function Ru(e){if(window.confirm(`删除账号 ${e.username}?历史会话将保留。`)){o.adminUserBusy=!0,o.adminUserError="";try{const n=await ye("/api/admin/users/delete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e.username})}),c=await n.json().catch(()=>({}));if(!n.ok||c!=null&&c.error)throw xt(c,n.status);J("普通用户已删除"),await Ps()}catch(n){o.adminUserError=tt(n,"删除用户失败")}finally{o.adminUserBusy=!1}}}async function Nu(e){const n=typeof e=="object"?e:{sessionId:e},c=n.sessionId,u=_,p=I,v=Ge.adminOwnerUsername;if(i.value&&n.ownerUsername&&(Ge.adminOwnerUsername=n.ownerUsername,sessionStorage.setItem(Xn,n.ownerUsername)),o.pendingResumeSessionId=c,o.sessionResumeLoading=!0,await ga(c))o.activePanel="chat",J(i.value?`已打开 ${n.ownerUsername} 的会话`:"已打开会话");else{Ge.adminOwnerUsername=v,v?sessionStorage.setItem(Xn,v):sessionStorage.removeItem(Xn);const O=await fa(u,p);J(O?"打开会话失败,已恢复原会话":"打开会话失败,运行时连接已断开")}o.sessionResumeLoading=!1,o.pendingResumeSessionId=""}async function Fr(){try{const e=await ye(z("/api/cpa-quota"));if(!e.ok)throw new Error(`cpa-quota ${e.status}`);const n=await e.json();o.cpaQuotas=Array.isArray(n==null?void 0:n.quotas)?n.quotas:[],o.cpaQuotaIndex>=o.cpaQuotas.length&&(o.cpaQuotaIndex=0),n!=null&&n.config&&(o.cpaConfig.loaded||(o.cpaConfig.url=String(n.config.url||""),o.cpaConfig.password=n.config.hasPassword?gr:"",o.cpaConfig.loaded=!0),o.cpaConfig.hasPassword=!!n.config.hasPassword)}catch{o.cpaQuotas=[],o.cpaQuotaIndex=0}}async function Ui(){try{const e=await ye(z("/api/memory"));if(!e.ok)throw new Error(`memory ${e.status}`);const n=await e.json();o.memory={current:(n==null?void 0:n.current)||null,history:Array.isArray(n==null?void 0:n.history)?n.history:[],sampleMs:Number(n==null?void 0:n.sampleMs)||6e4,retentionMs:Number(n==null?void 0:n.retentionMs)||864e5}}catch{}}async function Us(){if(i.value)return;Ls();const e=_,n=I;if(lo(),_=q(),I="",x=!0,sessionStorage.setItem(y,_),sessionStorage.removeItem(E),o.sessionResumeLoading=!0,o.pendingResumeSessionId="",await Ln({silent:!0}))o.activePanel="chat",J("已创建新会话"),As();else{const u=await fa(e,n);J(u?"新建会话失败,已恢复原会话":"新建会话失败,运行时连接已断开")}o.sessionResumeLoading=!1}function Hr(e){var n;return!!e&&String(((n=o.session)==null?void 0:n.sessionId)||"")===String(e)}function jr(e){return o.runningSessionIds.includes(e)}async function Lu(e){const n=o.sessions.find(u=>u.sessionId===e);if(Hr(e)){J(w.SESSION_ACTIVE);return}if(jr(e)){J(w.SESSION_RUNNING);return}if(await Un({title:"删除会话?",message:`“${(n==null?void 0:n.title)||e||"这个会话"}”删除后无法恢复。`,confirmLabel:"确认删除",tone:"danger"}))try{await Ie("/api/sessions/delete",{sessionId:e}),await Ds(),J("会话已删除")}catch(u){He(u,"删除会话失败")}}async function zn(e){if(!a.value)return;o.activePanel="settings",o.settingsPage="";const n=e?`?provider=${encodeURIComponent(e)}`:"";try{const c=await ye(z(`/api/login${n}`)),u=await c.json().catch(()=>({}));if(!c.ok||u!=null&&u.error||(u==null?void 0:u.ok)===!1)throw xt(u,c.status);o.login=u,Je.value=u.provider,Object.keys(ae).forEach(p=>delete ae[p]),Object.assign(ae,u.values||{}),await Promise.all([Fr(),Is(),Hc()])}catch(c){He(c,"加载模型配置失败")}}async function Bi(e){J(e!=null&&e.deferred?"已保存,下一轮生效":"提示词已保存"),await $n()}async function $u(){await zn(Je.value)}async function zi(){var u;if(!a.value)return;const[e,n]=await Promise.allSettled([Ie("/api/login",{provider:Je.value,values:{...ae}}),Ie("/api/cpa-config",{url:o.cpaConfig.url,password:o.cpaConfig.password===gr?"":o.cpaConfig.password,preservePassword:o.cpaConfig.hasPassword&&(!o.cpaConfig.password||o.cpaConfig.password===gr)})]);if(n.status==="fulfilled"){const p=n.value;o.cpaQuotas=Array.isArray(p==null?void 0:p.quotas)?p.quotas:[],o.cpaQuotaIndex=0,o.cpaConfig.loaded=!0,o.cpaConfig.hasPassword=!!((u=p==null?void 0:p.config)!=null&&u.hasPassword),o.cpaConfig.password=o.cpaConfig.hasPassword?gr:""}if(e.status==="fulfilled"&&n.status==="fulfilled"){J("模型配置已保存");return}const c=[];e.status==="rejected"&&c.push(tt(e.reason,"模型配置保存失败")),n.status==="rejected"&&c.push(tt(n.reason,"CPA 配置保存失败")),J(c.join(";"))}function Gr(e){const n=Number.parseFloat(String(e??"").replace("%",""));return Number.isFinite(n)?Math.max(0,Math.min(100,n)):0}function Fi(e){const n=Number.parseFloat(String(e??"").replace("%",""));if(!Number.isFinite(n))return"—";const c=Gr(n);return`${c.toFixed(c%1?1:0)}%`}function Hi(e){const n=new Date(e);return Number.isNaN(n.getTime())?"—":new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).format(n)}function ji(e){const n=new Date(e);return Number.isNaN(n.getTime())?"—":new Intl.DateTimeFormat("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).format(n)}function Gi(e){const n=o.cpaQuotas.length;n<2||(o.cpaQuotaIndex=(o.cpaQuotaIndex+e+n)%n)}function Ou(e){const n=String(e||"").trim();if(!n)return"Codex 凭据";const[c,u]=n.split("@");return!u||c.length<=3?n:`${c.slice(0,3)}***@${u}`}function Bs(e){const n=Number(e);if(!Number.isFinite(n)||n<0)return"—";const c=n/1024/1024;return`${c.toFixed(c>=100?0:1)} MB`}function Du(e){const n=new Date(e);return Number.isNaN(n.getTime())?"等待采样":new Intl.DateTimeFormat("zh-CN",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(n)}function Pu(e){const n=new Date(e);return Number.isNaN(n.getTime())?"—":new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(n)}function Uu(e){const n=Es.value.length;if(!n)return;const c=e.currentTarget.getBoundingClientRect(),u=Math.min(1,Math.max(0,(e.clientX-c.left)/Math.max(1,c.width)));yt.value=n===1?0:Math.round(u*(n-1))}function qi(){yt.value=-1}async function Ie(e,n,c=!1){const u=await ye(c?e:z(e),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),p=await u.json().catch(()=>({}));if(!u.ok||p!=null&&p.error||(p==null?void 0:p.ok)===!1)throw xt(p,u.status);return p}class Bu extends Error{constructor(n,c=""){super(n),this.name="ActionRequestError",this.code=c}}function xt(e,n){const c=String((e==null?void 0:e.errorCode)||(n===404?"API_NOT_FOUND":""));return new Bu((e==null?void 0:e.error)||`请求失败(${n})`,c)}function tt(e,n="操作失败"){const c=String((e==null?void 0:e.code)||"");if(c&&w[c])return w[c];const u=String((e==null?void 0:e.message)||e||"").trim();return u?`${n}:${u}`:n}function He(e,n){J(tt(e,n))}function Zt(e){const n=Qd(Zd(Vd(e.text||"")));return e.kind==="system"||e.kind==="meta"?zu(n):n}function zu(e){return String(e||"").replace(/^Interactive web UI enabled\.\s*Type \/help for commands\.\s*/i,"工作台已连接。输入 `/help` 可查看命令说明。").replace(/\bSession:\s*/gi,"会话:").replace(/\bTip:\s*/gi,"提示:").replace(/Start fresh/gi,"重新开始").replace(/\/reset clears the visible conversation and adds a reset marker so you can start a fresh thread in the same session\./gi,"`/reset` 会清空当前可见对话,并插入一个重置标记,方便你在同一会话中重新开始。").replace(/^new session\s+/i,"已新建会话:").replace(/^deleted session\s+/i,"已删除会话:").replace(/^resumed session\s+(.+?):\s+(\d+)\s+messages?\s+from\s+(.+)$/i,"已恢复会话:$1,共载入 $2 条消息,来源:$3").replace(/\((\d+)\s+resumed messages\)/gi,"(已恢复 $1 条消息)").replace(/\bType \/help for commands\./gi,"输入 `/help` 可查看命令说明。")}function Qt(e){var n;if(e.kind==="tool"||e.toolName){const c=Yt(e);return(n=e==null?void 0:e.toolPresentation)!=null&&n.label?String(e.toolPresentation.label):Fn(e)?"任务计划":e.title?g[e.title]||g[String(e.title).toLowerCase()]||e.title:g[c]||c}return e.title?g[e.title]||g[String(e.title).toLowerCase()]||e.title:e.kind==="assistant"?"助手":e.kind==="user"?"你":e.kind==="thinking"?"思考":"系统"}function Yt(e){return String((e==null?void 0:e.toolName)||"tool").trim()||"tool"}function Fn(e){return(e==null?void 0:e.kind)==="tool"&&Yt(e)==="plan_update"}function Fu(e){return Fn(e)||lt(e)||pn(e).length>0}function qr(e){return(e==null?void 0:e.kind)==="meta"&&String((e==null?void 0:e.title)||"")==="提示词用法"}function Hn(e){return!!(e!=null&&e.compaction&&typeof e.compaction=="object")}function Hu(e){var n;return(n=e==null?void 0:e.compaction)!=null&&n.modelDriven?"模型生成摘要":"确定性摘要"}function dn(e){Hn(e)&&(o.compactionDetailLineId=e.id,document.body.classList.add("runtime-context-open"))}function zs(){o.compactionDetailLineId=void 0,!o.runtimeContextModal&&!o.runtimeContextDetail&&!o.projectContextOpen&&document.body.classList.remove("runtime-context-open")}function jn(e){return((e==null?void 0:e.kind)==="tool"||(e==null?void 0:e.kind)==="error"&&(e==null?void 0:e.toolName))&&!Fu(e)}function Wr(e){return(e==null?void 0:e.kind)==="tool-group"&&Array.isArray(e.lines)}function ju(e){return!e||e.presentationLevel==="primary"||qr(e)||e.kind==="user"||e.kind==="assistant"?!0:lt(e)}function Gu(e){return!e||ju(e)?!1:["thinking","tool","error","meta","system","agent"].includes(String(e.kind||"system"))}function qu(e){const n=[];let c=[];const u=()=>{if(!c.length)return;const p=c.some(v=>(v==null?void 0:v.kind)!=="thinking");c.length===1||!p?n.push(...c):n.push({id:`tool-group:${c[0].id}`,kind:"tool-group",lines:c,live:c.some(v=>(v==null?void 0:v.live)===!0)}),c=[]};for(const p of e||[])Gu(p)?c.push(p):(u(),n.push(p));return u(),n}function gn(e){return o.expandedToolGroups[e==null?void 0:e.id]===!0}function Wu(e,n){if(Wr(e))return Ua(n,()=>{o.expandedToolGroups[e.id]=!gn(e)})}function Wi(e){const n=new Map;for(const u of(e==null?void 0:e.lines)||[]){const p=(u==null?void 0:u.kind)==="thinking"?"思考":Qt(u);p&&n.set(p,(n.get(p)||0)+1)}const c=[...n.entries()].map(([u,p])=>({name:u,count:p}));return c.length?c:[{name:"过程",count:1}]}function Kr(e){return((e==null?void 0:e.lines)||[]).flatMap((n,c)=>{var p;const u=String(((p=n==null?void 0:n.toolDisplay)==null?void 0:p.purpose)||"").trim();return u?[{id:`${n.id}:purpose:${c}`,text:u,live:(n==null?void 0:n.live)===!0}]:[]})}let Ki;function Vi(e,n){Pt(e)&&(Ki=document.activeElement,o.toolDetailLineId=e.id,document.body.classList.add("tool-detail-open"),Ye(()=>{var c;return(c=document.querySelector(".tool-result-modal-close"))==null?void 0:c.focus()}))}function Ku(e){return hn(kn.parse(String(e??"")))}function fn(){o.toolDetailLineId=void 0,document.body.classList.remove("tool-detail-open");const e=Ki;Ye(()=>{e!=null&&e.isConnected&&e.focus()})}function Vu(e){if(e.key!=="Tab")return;const n=Array.from(e.currentTarget.querySelectorAll('button:not(:disabled), [tabindex="0"]')),c=n[0],u=n.at(-1);e.shiftKey&&document.activeElement===c?(e.preventDefault(),u==null||u.focus()):!e.shiftKey&&document.activeElement===u&&(e.preventDefault(),c==null||c.focus())}function Zi(e){var u;const n=e.target instanceof HTMLImageElement?e.target:null;if(!n||n.closest(".image-preview-modal"))return;const c=((u=n.closest("[data-preview-src]"))==null?void 0:u.dataset.previewSrc)||n.currentSrc||n.src;c&&(e.preventDefault(),e.stopPropagation(),Zu(c,n.alt))}async function Qi(e){const n=e.target instanceof Element?e.target.closest('a[data-resource-download="true"]'):null;if(!(n instanceof HTMLAnchorElement))return;if(e.preventDefault(),e.stopPropagation(),as()){try{await Mg(n.href,{fetch:ye})}catch(u){J(u instanceof Error?u.message:String(u||"无法打开所在文件夹"))}return}const c=Number(n.dataset.resourceExpiresAt);if(Number.isFinite(c)&&c>0&&Date.now()>=c){J("下载链接已过期,请重新生成");return}try{const u=await ye(n.href);if(!u.ok){J(u.status===404||u.status===410?"下载链接已过期,请重新生成":`下载失败(${u.status})`);return}const p=URL.createObjectURL(await u.blob()),v=document.createElement("a");v.href=p,v.download=n.download||"download",document.body.appendChild(v),v.click(),v.remove(),setTimeout(()=>URL.revokeObjectURL(p),3e4)}catch{J("下载失败,请稍后重试")}}function Zu(e,n=""){o.imagePreview={src:String(e||""),caption:String(n||"").trim()},document.body.classList.add("image-preview-open")}function Vr(){o.imagePreview=void 0,document.body.classList.remove("image-preview-open")}function $t(e){return nm(e)}function Yi(e){return Yu(e).summary}function Xi(e){var n;return(((n=e==null?void 0:e.toolDisplay)==null?void 0:n.previews)||[]).filter(c=>c.content!==void 0&&c.content!==null&&String(c.content).trim()!=="")}function Ot(e){var n;return Array.isArray((n=e==null?void 0:e.toolStream)==null?void 0:n.steps)?e.toolStream.steps:[]}function Dt(e){return Yt(e)==="subagent_run"}function Fs(e){return["file_write","file_edit","write_file","edit_file"].includes(Yt(e).toLowerCase())}function Zr(e){const n=Yt(e).toLowerCase();return n==="terminal_run"||n==="terminal_control"}function Ji(e){var n;return Array.isArray((n=e==null?void 0:e.toolDisplay)==null?void 0:n.previews)&&e.toolDisplay.previews.length>0&&(!Yt(e).startsWith("subagent_")||Yt(e)==="subagent_message")&&!(Zr(e)&&(e==null?void 0:e.live)===!0&&Qu(e))}function Gn(e){var v,T,O,G;const n=Array.isArray((v=e==null?void 0:e.toolStream)==null?void 0:v.chunks)?e.toolStream.chunks:[];if(n.length)return n.map(B=>String((B==null?void 0:B.text)||"")).join("").trimEnd();const c=String(((T=e==null?void 0:e.toolStream)==null?void 0:T.stdout)||""),u=String(((O=e==null?void 0:e.toolStream)==null?void 0:O.stderr)||""),p=String(((G=e==null?void 0:e.toolStream)==null?void 0:G.output)||"");return[c,u,p].filter(Boolean).join(`
|
|
95
|
+
`,a)},80)}function w(L){const R=String(L||"").trim();return R?/^(?:https?:|mailto:|\/|#)/i.test(R)?!0:!/^[a-z][a-z\d+.-]*:/i.test(R):!1}function y(L){const R=String(L||"").trim();return r.exposedResources.find(N=>String((N==null?void 0:N.reference)||"").trim()===R)}function E(L){const R=Number(L);if(!Number.isFinite(R)||R<=0)return"";const N=["B","KB","MB","GB"];let P=R,M=0;for(;P>=1024&&M<N.length-1;)P/=1024,M+=1;return`${P>=10||M===0?Math.round(P):P.toFixed(1)}${N[M]}`}function _(L){return{...Lh(L),set_attr(N,P,M){const U=P===_n?y(M):void 0,q=(U==null?void 0:U.url)||M;if(!((P===_n||P===pi)&&!w(q))&&(vc(N,P,q),P===_n)){const z=N.nodes[N.index];if(U){if(z.classList.add("inline-resource-link",`inline-resource-${U.kind||"link"}`),U.kind==="download"||U.downloadName){z.setAttribute("download",U.downloadName||U.label||""),z.setAttribute("title",Bo(U.label||U.downloadName)),z.removeAttribute("target"),z.removeAttribute("rel"),z.dataset.resourceDownload="true",z.dataset.resourceExpiresAt=String(Number(U.expiresAt)||0);const te=E(U.sizeBytes);te&&(z.dataset.resourceSize=`(${te})`)}}else z.setAttribute("target","_blank"),z.setAttribute("rel","noreferrer noopener")}}}}function I(L){if(!i)return;const R=String(L||"");if(f(),!R.startsWith(a)||d!==a){x(R),h();return}const N=R.slice(a.length);a=R,d=R,N&&ze(i,N),h()}function x(L=r.text,R=L){const N=s.value;N&&(i&&xl(i),N.replaceChildren(),i=Ch(_(N)),d=String(L||""),a=String(R||""),d&&ze(i,d))}return Vo(()=>{x(),h()}),Oe(()=>r.text,I,{flush:"post"}),Oe(()=>JSON.stringify(r.exposedResources),()=>{x(),h()},{flush:"post"}),Ht(()=>{f(),i&&xl(i),i=void 0}),(L,R)=>(m(),b("div",{ref_key:"root",ref:s,class:"streaming-markdown-content"},null,512))}};function At(t){const r=Number(t),s=Number.isFinite(r)?Math.floor(Math.max(0,r)/1e3):0;return s===0?"":s<60?`${s}s`:`${Math.floor(s/60)}m ${s%60}s`}function Sl(t,r=performance.now()){return(t||[]).filter(s=>(s==null?void 0:s.version)===1&&typeof s.id=="string").map(s=>({...s,receivedAt:r}))}function No(t,r=performance.now(),s=!0){if(!t)return;const i=a=>Number.isSafeInteger(a)&&a>=0;if(t.status==="finished")return i(t.durationMs)?t.durationMs:void 0;if(!(t.status!=="running"||!i(t.elapsedMs)))return t.elapsedMs+(s&&Number.isFinite(t.receivedAt)?Math.max(0,r-t.receivedAt):0)}const Uh=["aria-label"],Bh={class:"elapsed-clock-face",viewBox:"0 0 40 40","aria-hidden":"true"},zh={class:"clock-ticks"},Fh=["y1","transform"],Hh={class:"elapsed-clock-value","aria-hidden":"true"},jh={__name:"ElapsedClock",props:{elapsedMs:{type:Number,default:void 0}},setup(t){const r=t,s=V(()=>At(r.elapsedMs)),i=V(()=>Math.floor(Math.max(0,r.elapsedMs||0)/1e3)*6);return(a,d)=>s.value?(m(),b("span",{key:0,class:"elapsed-clock","aria-label":`用时 ${s.value}`},[(m(),b("svg",Bh,[d[1]||(d[1]=l("circle",{class:"clock-rim",cx:"20",cy:"20",r:"18"},null,-1)),d[2]||(d[2]=l("circle",{class:"clock-well",cx:"20",cy:"20",r:"15.5"},null,-1)),l("g",zh,[(m(),b(ee,null,ge(60,g=>l("line",{key:g,x1:"20",y1:(g-1)%5===0?6:7,x2:"20",y2:"8",class:Y({major:(g-1)%5===0}),transform:`rotate(${(g-1)*6} 20 20)`},null,10,Fh)),64))]),l("g",{class:"clock-hand",style:ot({transform:`rotate(${i.value}deg)`})},[...d[0]||(d[0]=[l("line",{x1:"20",y1:"23",x2:"20",y2:"10"},null,-1)])],4),d[3]||(d[3]=l("circle",{class:"clock-pin",cx:"20",cy:"20",r:"1.6"},null,-1))])),l("span",Hh,S(s.value),1)],8,Uh)):C("",!0)}},El=Ar(jh,[["__scopeId","data-v-490710ad"]]),Gh=["aria-label"],qh={key:0,class:"flip-status-front"},Wh={class:"flip-status-back"},Kh={__name:"FlipStatusText",props:{text:{type:String,default:""}},setup(t){const r=t,s=new Intl.Segmenter(void 0,{granularity:"grapheme"}),i=E=>Array.from(s.segment(E),_=>_.segment),a=ne(r.text),d=ne(""),g=ne(!1),f=ne(0);let h;const w=V(()=>{const E=i(a.value),_=g.value?i(d.value):[];return Array.from({length:Math.max(E.length,_.length)},(I,x)=>({before:_[x]||"",after:E[x]||""}))}),y=V(()=>Math.min(45,600/Math.max(1,w.value.length-1)));return Oe(()=>r.text,(E,_)=>{clearTimeout(h),d.value=_,a.value=E,g.value=!0,f.value+=1,h=setTimeout(()=>{g.value=!1,d.value=""},360+Math.max(0,w.value.length-1)*y.value)}),Ht(()=>clearTimeout(h)),(E,_)=>(m(),b("span",{class:"flip-status-text","aria-label":t.text},[(m(),b("span",{key:f.value,class:"flip-status-letters","aria-hidden":"true"},[(m(!0),b(ee,null,ge(w.value,(I,x)=>(m(),b("span",{key:x,class:"flip-status-slot"},[l("span",{class:Y(["flip-status-card",{"is-flipping":g.value}]),style:ot({"--flip-delay":`${x*y.value}ms`})},[g.value?(m(),b("span",qh,S(I.before),1)):C("",!0),l("span",Wh,S(I.after),1)],6)]))),128))]))],8,Gh))}},Vh=Ar(Kh,[["__scopeId","data-v-4fbb8b4f"]]);function Zh({getElement:t,requestFrame:r=f=>requestAnimationFrame(f),cancelFrame:s=f=>cancelAnimationFrame(f),now:i=()=>performance.now(),setTimer:a=(f,h)=>setTimeout(f,h),clearTimer:d=f=>clearTimeout(f),reducedMotion:g=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches}={}){let f=!0,h=0,w=0,y=0,E=0,_=!0,I=!1,x=!1,L=!1,R=0,N=!1,P=0,M=()=>{};const U=F=>Math.max(0,F.scrollHeight-F.clientHeight);function q(){h&&s(h),h=0,y=0}function z(){L=!1,f=!1,_=!1,N=!1,R=0,q(),d(w),w=0}function te(){I||!f||h||!t()||(h=r(o))}function o(F){h=0;const se=t();if(I||!f||!se||!se.clientHeight)return;const $=U(se),K=$-se.scrollTop,j=y?Math.min(32,Math.max(1,F-y)):16;y=F;const re=Math.min(K*(1-Math.exp(-j/115)),j*1.8),fe=_||g()||K<=1?$:se.scrollTop+Math.max(1,re);_=!1,se.scrollTop=fe,E=se.scrollTop,$-se.scrollTop>1?te():y=0}function oe(){if(d(w),w=0,I||x||!N)return;const F=P-i();if(F>0){w=a(oe,F);return}const se=t();se&&U(se)-se.scrollTop<=48&&(f=!0,N=!1,te())}function ce(F){z(),R=Math.sign(F),N=R>0,P=i()+180,oe()}function W(){const F=t();if(!F)return;const se=F.scrollTop-E;E=F.scrollTop,!f&&Math.abs(se)>.5&&(se<0?N=!1:(R>0||x&&R===0)&&(N=!0),P=i()+180,oe())}function Q(){var F;z(),f=!0,_=!0,R=0,x=!1,E=((F=t())==null?void 0:F.scrollTop)||0,te()}function le(F){if(M(),q(),E=(F==null?void 0:F.scrollTop)||0,!F)return;let se,$,K=!1;const j=ae=>{!ae.ctrlKey&&ae.deltaY&&ce(ae.deltaY)},re=ae=>{var Ue,et;const me=!K&&f;K=!0,x=!0,se=(Ue=ae.touches[0])==null?void 0:Ue.clientX,$=(et=ae.touches[0])==null?void 0:et.clientY,ce(0),L=me&&ae.touches.length===1},fe=ae=>{var et,ft;const me=(et=ae.touches[0])==null?void 0:et.clientX,Ue=(ft=ae.touches[0])==null?void 0:ft.clientY;Ue!==void 0&&$!==void 0&&Ue!==$&&ce($-Ue),(ae.touches.length!==1||me!==se)&&(L=!1),se=me,$=Ue},we=()=>{x=!1,P=i()+180,oe()},Te=ae=>{var Ue;if(ae.type==="touchcancel"&&(L=!1),(Ue=ae.touches)!=null&&Ue.length)return;const me=K&&L;K=!1,L=!1,we(),me&&!I&&(f=!0,N=!1,te())},De=ae=>{K||ae.pointerType==="touch"||we()},Ct=[["scroll",W],["wheel",j],["touchstart",re],["touchmove",fe],["touchend",Te],["touchcancel",Te],["pointerdown",ae=>{const me=F.getBoundingClientRect();(ae.button===1||ae.target===F&&ae.clientX>=me.left+F.clientLeft+F.clientWidth)&&(x=!0,ce(0))}],["keydown",ae=>{ae.defaultPrevented||ae.ctrlKey||ae.metaKey||ae.altKey||ae.target.closest('input, textarea, select, button, [contenteditable="true"]')||(["ArrowUp","PageUp","Home"].includes(ae.key)||ae.key===" "&&ae.shiftKey?ce(-1):["ArrowDown","PageDown","End"," "].includes(ae.key)&&ce(1))}]];for(const[ae,me]of Ct)F.addEventListener(ae,me,{passive:!0});const Je=F.ownerDocument;Je.addEventListener("pointerup",De,{passive:!0}),Je.addEventListener("pointercancel",De,{passive:!0}),M=()=>{K=!1,L=!1,x=!1;for(const[ae,me]of Ct)F.removeEventListener(ae,me);Je.removeEventListener("pointerup",De),Je.removeEventListener("pointercancel",De),M=()=>{}},te()}return{schedule:te,pause:z,reset:Q,attach:le,get following(){return f},get interacting(){return x||i()<P},dispose(){I=!0,z(),M()}}}const Qh=["onDblclick"],Yh=["aria-label","onClick"],Xh=["title","onClick"],Jh=["aria-label","onClick"],em=Object.assign({name:"CwdTreeNode"},{__name:"CwdTreeNode",props:{nodes:{type:Array,default:()=>[]},children:{type:Object,default:()=>({})},expanded:{type:Object,default:()=>({})},selectedPath:{type:String,default:""},level:{type:Number,default:0},allowDelete:{type:Boolean,default:!0}},emits:["toggle","select","delete"],setup(t,{emit:r}){const s=r;return(i,a)=>{const d=Tg("CwdTreeNode",!0);return m(!0),b(ee,null,ge(t.nodes,g=>(m(),b("div",{key:g.path,class:"cwd-tree-branch"},[l("div",{class:Y(["cwd-tree-row",{selected:t.selectedPath===g.path}]),style:ot({"--cwd-tree-level":t.level}),onDblclick:f=>s("toggle",g)},[l("button",{type:"button",class:"cwd-tree-toggle","aria-label":t.expanded[g.path]?"收起":"展开",onClick:ke(f=>s("toggle",g),["stop"])},S(t.expanded[g.path]?"▾":"▸"),9,Yh),l("button",{type:"button",class:"cwd-tree-name",title:g.path,onClick:f=>s("select",g)},[a[3]||(a[3]=l("span",{"aria-hidden":"true"},"◇",-1)),l("strong",null,S(g.name),1)],8,Xh),t.allowDelete?(m(),b("button",{key:0,type:"button",class:"cwd-tree-delete","aria-label":`删除 ${g.name}`,onClick:ke(f=>s("delete",g),["stop"])},"×",8,Jh)):C("",!0)],46,Qh),t.expanded[g.path]&&t.children[g.path]?(m(),Fe(d,{key:0,nodes:t.children[g.path],children:t.children,expanded:t.expanded,"selected-path":t.selectedPath,level:t.level+1,onToggle:a[0]||(a[0]=f=>s("toggle",f)),onSelect:a[1]||(a[1]=f=>s("select",f)),onDelete:a[2]||(a[2]=f=>s("delete",f))},null,8,["nodes","children","expanded","selected-path","level"])):C("",!0)]))),128)}}});function tm(t,r=Date.now()){const s=typeof(t==null?void 0:t.startedAt)=="string"?Date.parse(t.startedAt):NaN;if(!Number.isSafeInteger(s)||s<0)return;if(t.status==="running"){const a=r-s;return Number.isSafeInteger(a)&&a>=0?a:void 0}if(!["completed","failed","killed"].includes(t.status))return;const i=typeof t.completedAt=="string"?Date.parse(t.completedAt):NaN;return Number.isSafeInteger(i)&&i>=s&&Number.isSafeInteger(t.durationMs)&&t.durationMs>=0&&t.durationMs===i-s?t.durationMs:void 0}function nm(t){return t!=null&&t.live?{key:"running",label:"执行中"}:(t==null?void 0:t.titleStatus)==="failure"||(t==null?void 0:t.titleStatus)==="failed"||(t==null?void 0:t.kind)==="error"||t!=null&&t.toolError?{key:"failed",label:"失败"}:(t==null?void 0:t.titleStatus)==="success"?{key:"completed",label:"完成"}:{key:"unknown",label:"未提供"}}function sm(t,r){const s=String(t||"").trim();if(!s)return"模型未配置";const i=String(r||"").trim();return i?`${s}(${i})`:s}function rm(t,r){const s=t.map(g=>Math.max(1,Number(g.size)||0)),i=s.reduce((g,f)=>g+f,0);let a=0,d=0;return r(0),{update(g,f){const h=Math.floor(100*(a+s[g]*Math.max(0,Math.min(1,f)))/i);d=Math.max(d,Math.min(99,h)),r(d)},complete(g){this.update(g,1),a+=s[g]},succeed(){r(100)},fail(){r(0)}}}async function om(t,r,s){var f,h;const i=new URL(t,((f=globalThis.location)==null?void 0:f.href)||"http://localhost");i.pathname+="/chunks";const a=async(w,y,E)=>{const _=await ye(w,{method:y,headers:E?{"Content-Type":"application/json"}:{},body:E?JSON.stringify(E):void 0}),I=await _.json();if(!_.ok||(I==null?void 0:I.ok)===!1||I!=null&&I.error)throw new Error((I==null?void 0:I.error)||`上传失败 (${_.status})`);return I},d=await a(i,"POST",{name:r.name,size:r.size,mimeType:r.type||"application/octet-stream"});if(!d.uploadId||!Number.isSafeInteger(d.chunkBytes)||d.chunkBytes<=0)throw new Error("上传初始化响应无效");i.pathname+="/"+encodeURIComponent(d.uploadId);let g=0;try{for(;g<r.size;){const E=Math.min(r.size,g+d.chunkBytes);let _=!1;for(let I=0;I<3;I++)try{if((await im(i,r.slice(g,E),g,L=>s==null?void 0:s((g+L*(E-g))/r.size))).offset!==E)throw new Error("分片确认偏移无效");_=!0;break}catch(x){if(I===2)throw x;await new Promise(R=>setTimeout(R,400*(I+1)));const L=await a(i,"GET");if(L.offset===E){_=!0;break}if(L.offset!==g)throw new Error("上传进度不一致,请重新上传")}if(!_)throw new Error("分片上传失败");g=E,s==null||s(r.size?g/r.size:1)}const w=new URL(i);w.pathname+="/complete";const y=await a(w,"POST");if(!((h=y.file)!=null&&h.absolutePath))throw new Error("上传完成响应无效");return y}catch(w){throw await a(i,"DELETE").catch(()=>{}),w}}function im(t,r,s,i){return new Promise((a,d)=>{const g=new XMLHttpRequest;g.upload.onprogress=f=>{f.lengthComputable&&f.total&&i(f.loaded/f.total)},g.onload=()=>{try{const f=JSON.parse(g.responseText);if(g.status<200||g.status>=300||(f==null?void 0:f.ok)===!1||f!=null&&f.error)throw new Error((f==null?void 0:f.error)||`上传失败 (${g.status})`);a(f)}catch(f){d(f)}},g.onerror=()=>d(new Error("上传失败:网络连接异常")),g.onabort=()=>d(new Error("上传已取消")),g.ontimeout=()=>d(new Error("分片上传超时")),g.open("PATCH",t),g.setRequestHeader("Content-Type","application/octet-stream"),g.setRequestHeader("X-Upload-Offset",String(s)),g.send(r)})}function am({maxEntries:t=64,timeoutMs:r=15e3,createImage:s,fetchOriginal:i=s?null:(a,d)=>ye(a,{cache:"no-store",signal:d})}={}){if(s||(s=()=>new Image),!Number.isInteger(t)||t<1||t>512)throw new RangeError("maxEntries must be 1..512");if(!Number.isFinite(r)||r<1)throw new RangeError("timeoutMs must be positive");const a=new Map;let d="";const g=(_,I)=>JSON.stringify([_,I]);function f(_){const I=a.get(_);a.delete(_),I==null||I.cancel()}function h(){for(const _ of a.keys())f(_)}function w(_){_!==d&&(h(),d=_)}function y(_){f(g(d,_))}function E({sessionId:_,originalUrl:I,available:x=!0}){const L={sessionId:_,originalUrl:I},R=Q=>Object.freeze({...L,state:Q});if(!_||_!==d)return Promise.resolve(R("stale"));const N=g(_,I);if(x===!1)return f(N),Promise.resolve(R("unavailable"));if(typeof I!="string"||!I.trim())return Promise.resolve(R("unknown"));const P=a.get(N);if(P)return a.delete(N),a.set(N,P),P.promise;for(;a.size>=t;)f(a.keys().next().value);let M,U,q,z=!1,te;const o=new AbortController,oe=new Promise(Q=>{te=Q}),ce=Q=>{z||(z=!0,clearTimeout(U),o.abort(),q&&URL.revokeObjectURL(q),te(Object.freeze(Q)))},W={promise:oe,cancel:()=>{ce(R("stale")),M&&(M.src="")}};return a.set(N,W),U=setTimeout(()=>{ce(R("unknown")),M&&(M.src="")},r),(async()=>{try{let Q=I;if(i&&!/^(data:|blob:)/i.test(I)){const se=await i(I,o.signal);if(!se.ok)throw new Error("Original unavailable");const $=await se.blob();if(z)return;Q=q=URL.createObjectURL($)}if(z)return;M=s(),M.src=Q,await M.decode();const le=M.naturalWidth,F=M.naturalHeight;Number.isInteger(le)&&le>0&&Number.isInteger(F)&&F>0?ce({...L,state:"actual",width:le,height:F,source:"original-decode"}):ce(R("unknown"))}catch{ce(R("unknown"))}})(),oe}return{setSession:w,load:E,invalidate:y,clear:h,get size(){return a.size}}}function Lo(t,r){const s=typeof t=="string"&&/^(\d+)x(\d+)$/.exec(t),i=(r==null?void 0:r.state)==="actual"&&Number.isInteger(r.width)&&r.width>0&&Number.isInteger(r.height)&&r.height>0;return{requested:t==="auto"?"auto(自动策略)":typeof t=="string"&&t?t:"未提供",actual:i?`${r.width} × ${r.height}`:(r==null?void 0:r.state)==="unavailable"?"不可获取":"未知",mismatch:!!(i&&s&&(+s[1]!==r.width||+s[2]!==r.height))}}function $o(t,r=""){var a;const s=(t==null?void 0:t.originalSrc)||((a=t==null?void 0:t.original)==null?void 0:a.src)||(t==null?void 0:t.originalUrl)||r;if(s)return s;const i=t==null?void 0:t.src;if(typeof i!="string")return"";if(/^data:image\//i.test(i))return i;try{const d=new URL(i,"http://localhost");if(/\/api\/images\/(?:by-id\/[^/]+|[^/]+\/\d+)$/.test(d.pathname)&&!d.searchParams.has("thumbnail"))return i}catch{}return""}function lm(t,r){var a;const s=(a=t==null?void 0:t.imageResult)==null?void 0:a.images;if(!Array.isArray(s)||!(r!=null&&r.label))return;const i=s.filter(d=>(d==null?void 0:d.label)===r.label);return i.length===1?i[0]:void 0}function Tl(t){return t===!0?"有":t===!1?"无":"未知"}const cm={class:"shell"},um={class:"sidebar"},dm={class:"brand-row logo-only"},gm=["aria-label","aria-pressed","title"],fm={class:"nav"},pm=["title"],hm={class:"session-entry-main"},mm={key:0,"aria-hidden":"true"},bm={key:0,class:"sidebar-card prompt-stack"},km={class:"prompt-stack-head"},ym={class:"prompt-list"},vm={key:0,class:"prompt-list-empty"},wm={key:1,class:"prompt-list-empty"},_m=["onDragstart","onDblclick"],xm={class:"prompt-card-body"},Sm={class:"prompt-card-actions"},Em=["onClick"],Tm=["onClick"],Im={key:1,class:"sidebar-footer"},Am=["title"],Cm={class:"workspace"},Mm={class:"topbar"},Rm={class:"top-actions"},Nm=["onClick"],Lm=["onKeydown"],$m=["title"],Om=["aria-label","aria-pressed","title"],Dm={key:0,class:"content-grid chat-grid"},Pm={class:"chat-panel"},Um={key:0,class:"runtime-context-bar"},Bm={key:0,class:"runtime-context-bar-actions"},zm={key:2,class:"runtime-context-syncing"},Fm={key:1,class:"runtime-context-bar project-context-bar"},Hm={class:"runtime-context-bar-actions"},jm=["data-index"],Gm={class:"tool-group-shell"},qm=["aria-expanded","onClick"],Wm={class:"tool-group-label"},Km={class:"tool-group-label-name"},Vm={key:0,class:"tool-group-label-count"},Zm={key:1,class:"tool-group-label-separator"},Qm={key:1,class:"tool-group-lines"},Ym=["open"],Xm={class:"reasoning-reveal"},Jm={class:"reasoning-paper"},eb=["innerHTML"],tb=["onClick","onKeydown"],nb={class:"compaction-context-actions"},sb={key:0},rb={class:"tool-result-title-row"},ob={class:"tool-result-name"},ib={key:0,class:"elapsed-pill"},ab={key:1,class:"tool-result-failure-mark","aria-label":"执行失败"},lb={class:"tool-result-detail-row"},cb={key:0,class:"tool-result-primary"},ub={key:1},db={key:2,class:"tool-group-shell"},gb=["aria-expanded","onClick"],fb={class:"tool-group-label"},pb={class:"tool-group-label-name"},hb={key:0,class:"tool-group-label-count"},mb={key:1,class:"tool-group-label-separator"},bb={key:0,class:"tool-group-purposes"},kb={key:3,class:"tool-result-primary"},yb={key:0},vb={key:4,class:"tool-result-previews"},wb={class:"tool-result-preview kind-list"},_b={tabindex:"0"},xb={key:5,class:"tool-result-previews"},Sb={class:"tool-result-preview kind-code"},Eb={tabindex:"0"},Tb={key:6,class:"tool-result-previews"},Ib={tabindex:"0"},Ab={key:3},Cb={key:0,class:"message-head"},Mb={key:0,class:"tool-result-failure-mark","aria-label":"执行失败"},Rb=["innerHTML"],Nb={key:0,class:"message-body compaction-message-body"},Lb=["onClick","onKeydown"],$b={class:"compaction-context-actions"},Ob={key:0},Db={key:1,class:"message-body reasoning-body"},Pb=["open"],Ub={key:0,class:"reasoning-elapsed"},Bb={class:"reasoning-reveal"},zb={class:"reasoning-paper"},Fb=["innerHTML"],Hb={key:2,class:"message-body"},jb={key:0,class:"message-head"},Gb={key:0,class:"tool-result-failure-mark","aria-label":"执行失败"},qb={key:1},Wb={key:2,class:"elapsed-pill"},Kb={key:1,class:"image2-result-shell"},Vb=["innerHTML"],Zb={key:0,class:"message-image-attachments image2-output-images"},Qb=["data-preview-src","aria-label"],Yb=["src","alt"],Xb={key:1,class:"image-unavailable-placeholder",role:"status"},Jb={class:"image-card-actions"},ek=["href","download"],tk=["onClick"],nk=["onClick"],sk={class:"tool-result-title-row"},rk={class:"tool-result-name"},ok={key:0,class:"elapsed-pill"},ik={key:1,class:"tool-result-failure-mark","aria-label":"执行失败"},ak={class:"tool-result-detail-row"},lk={key:0,class:"tool-result-primary"},ck={key:1},uk={key:2,class:"tool-group-shell"},dk=["aria-expanded","onClick"],gk={class:"tool-group-label"},fk={class:"tool-group-label-name"},pk={key:0,class:"tool-group-label-count"},hk={key:1,class:"tool-group-label-separator"},mk={key:0,class:"tool-group-purposes"},bk={key:3,class:"tool-result-primary"},kk={key:0},yk={key:4,class:"tool-result-previews"},vk={class:"tool-result-preview kind-list"},wk={tabindex:"0"},_k={key:5,class:"tool-result-previews"},xk={class:"tool-result-preview kind-code"},Sk={tabindex:"0"},Ek={key:6,class:"tool-result-previews"},Tk={tabindex:"0"},Ik={class:"plugin-resource-stack"},Ak=["src","title"],Ck=["innerHTML"],Mk={key:1,class:"message-text markdown streaming-markdown"},Rk=["innerHTML"],Nk={key:0,class:"message-image-attachments"},Lk=["data-preview-src","aria-label"],$k=["src","alt"],Ok={key:1,class:"image-unavailable-placeholder",role:"status"},Dk=["href","download"],Pk={key:2,class:"message-loading",role:"status"},Uk={class:"message-loading-body"},Bk={key:3,class:"message-loading",role:"status","aria-live":"polite"},zk={class:"message-loading-body"},Fk={key:0,class:"queued"},Hk=["disabled"],jk=["disabled"],Gk={key:0,class:"composer-app-prompt"},qk={key:1,class:"attachments file-attachments"},Wk=["title"],Kk=["onClick"],Vk={key:2,class:"attachments image-attachments"},Zk=["src","alt"],Qk=["onClick"],Yk={class:"composer-path-row"},Xk=["title"],Jk={id:"composer-session-metrics",class:"composer-metrics","aria-label":"运行状态指标"},ey=["aria-pressed","title"],ty={class:"compress-wrap"},ny=["disabled"],sy={class:"composer-actions"},ry=["aria-expanded"],oy=["disabled","aria-busy","aria-label","title"],iy=["type","disabled","aria-busy","aria-label","title"],ay={key:0,class:"composer-button-icon composer-wait-icon","data-action":"waiting",viewBox:"0 0 20 20","aria-hidden":"true"},ly={key:1,class:"composer-button-icon","data-action":"send",viewBox:"0 0 20 20","aria-hidden":"true"},cy={key:2,class:"composer-button-icon","data-action":"interrupt-send",viewBox:"0 0 20 20","aria-hidden":"true"},uy={key:3,class:"composer-button-icon","data-action":"send-now",viewBox:"0 0 20 20","aria-hidden":"true"},dy={key:4,class:"composer-button-icon","data-action":"stop",viewBox:"0 0 20 20","aria-hidden":"true"},gy=["data-mobile-card","onKeydown"],fy={class:"background-task-section","data-card":"tasks"},py={class:"background-task-head"},hy={class:"panel-title"},my={key:0,class:"background-task-count"},by=["title"],ky={key:0,class:"background-task-more"},yy={key:1,class:"background-task-history"},vy={class:"background-task-history-list"},wy=["title","onClick"],_y={key:1,class:"quota-card","data-card":"quota"},xy={class:"quota-card-head"},Sy={class:"quota-card-controls"},Ey=["aria-valuenow"],Ty={class:"quota-card-foot"},Iy={class:"quota-card-update"},Ay={class:"quota-card memory-card","data-card":"memory"},Cy={class:"memory-card-head"},My={class:"memory-trend",viewBox:"0 0 260 44",preserveAspectRatio:"none",role:"img","aria-label":"最近一小时 RSS 趋势"},Ry=["d"],Ny=["cx","cy","r","onFocus"],Ly={key:1,class:"memory-trend-empty"},$y={class:"memory-stats"},Oy={class:"memory-card-foot"},Dy={key:1,class:"content-grid single"},Py={class:"panel-page sessions-page"},Uy={class:"page-head sessions-page-head"},By={class:"session-toolbar"},zy={class:"session-search","aria-label":"搜索会话"},Fy={class:"session-count"},Hy={key:0,class:"empty-state"},jy={key:1,class:"empty-state"},Gy={key:2,class:"empty-state"},qy={key:3,class:"session-list"},Wy={class:"session-card-main"},Ky={class:"session-card-title"},Vy={key:0,class:"current-pill"},Zy={key:1,class:"current-pill"},Qy={key:2,class:"live-pill"},Yy={class:"session-card-meta"},Xy=["title"],Jy=["datetime"],ev={class:"session-actions"},tv=["disabled","onClick"],nv=["disabled","onClick"],sv={key:4,class:"session-pagination","aria-label":"会话分页"},rv=["disabled"],ov=["aria-current","onClick"],iv=["disabled"],av={key:2,class:"content-grid single"},lv={class:"panel-page sessions-page admin-users-page"},cv=["disabled"],uv={key:0,class:"admin-user-error",role:"alert"},dv={key:1,class:"empty-state"},gv={key:2,class:"session-list admin-user-list"},fv={class:"session-card-main"},pv={class:"session-card-title"},hv={class:"current-pill"},mv={class:"session-actions"},bv=["disabled","onClick"],kv={key:3,class:"content-grid single"},yv={class:"panel-page prompt-page"},vv={class:"page-head"},wv={class:"page-head-actions"},_v={class:"prompt-workbench"},xv={class:"prompt-library-panel"},Sv={class:"prompt-library-head"},Ev={class:"prompt-library-list"},Tv={key:0,class:"prompt-list-empty"},Iv={key:1,class:"prompt-list-empty"},Av=["onClick","onDblclick","onDragstart","onDragover","onDrop"],Cv={key:0},Mv={class:"prompt-editor-panel"},Rv={class:"prompt-editor-toolbar"},Nv={class:"prompt-editor-current"},Lv={class:"prompt-editor-toolbar-actions"},$v=["disabled"],Ov=["disabled"],Dv={class:"prompt-editor-grid"},Pv={class:"prompt-editor-field"},Uv={class:"prompt-editor-field prompt-editor-field-full"},Bv={class:"prompt-editor-field prompt-editor-field-full"},zv={key:4,class:"content-grid single"},Fv={class:"panel-page settings-page"},Hv={class:"page-head settings-page-head"},jv={class:"settings-subpage-title"},Gv={class:"page-head settings-page-head"},qv=["disabled"],Wv={key:0,class:"empty-state"},Kv={class:"settings-card"},Vv={class:"settings-field-grid"},Zv={class:"settings-field"},Qv={key:0,class:"settings-required","aria-label":"必填"},Yv=["onUpdate:modelValue","type","placeholder"],Xv={key:1,class:"settings-card"},Jv={class:"settings-field-grid"},ew={class:"settings-field"},tw={class:"settings-field"},nw={key:2,class:"settings-card settings-plugin-card"},sw={class:"settings-card-head"},rw=["disabled"],ow={class:"plugin-settings-list"},iw={class:"plugin-toggle"},aw=["onUpdate:modelValue","aria-label"],lw={key:3,class:"settings-card settings-plugin-card"},cw={class:"settings-card-head"},uw=["disabled"],dw=["disabled"],gw={class:"plugin-settings-list"},fw={class:"plugin-toggle"},pw=["onUpdate:modelValue","disabled","aria-label"],hw=["disabled","onClick"],mw={key:5,class:"content-grid single"},bw={class:"panel-page"},kw={class:"capability-grid"},yw={key:0,class:"toast"},vw=["title","onKeydown"],ww={class:"cwd-picker-modal",role:"dialog","aria-modal":"true","aria-label":"选择工作目录"},_w=["disabled"],xw=["disabled"],Sw={class:"cwd-picker-shortcuts"},Ew={class:"cwd-picker-browser"},Tw={class:"cwd-picker-locations","aria-label":"常用位置"},Iw=["title","onClick"],Aw={"aria-hidden":"true"},Cw={class:"cwd-picker-tree"},Mw={key:0,class:"cwd-picker-empty"},Rw={key:1,class:"cwd-picker-error"},Nw={class:"cwd-picker-actions"},Lw=["disabled"],$w={class:"runtime-context-modal",role:"dialog","aria-modal":"true","aria-label":"项目上下文"},Ow={class:"runtime-context-modal-head"},Dw={key:0,class:"runtime-context-kicker"},Pw=["aria-label"],Uw={class:"runtime-context-modal-content"},Bw={key:0,class:"runtime-context-index"},zw=["onClick"],Fw={key:1,class:"project-context-document"},Hw=["aria-label"],jw={class:"confirm-dialog-content"},Gw={class:"confirm-dialog-actions"},qw={class:"session-model-list",role:"radiogroup","aria-label":"模型"},Ww=["value","disabled"],Kw=["disabled"],Vw=["value"],Zw={key:0,class:"context-window-error",role:"alert"},Qw={class:"context-window-actions"},Yw=["disabled"],Xw={class:"context-window-input-wrap"},Jw={key:0,class:"context-window-error",role:"alert"},e0={class:"context-window-actions"},t0=["disabled"],n0=["aria-label"],s0={class:"image-preview-canvas"},r0=["src","alt"],o0={key:0,class:"image-preview-caption"},i0={class:"runtime-context-detail-modal compaction-detail-modal",role:"dialog","aria-modal":"true","aria-label":"压缩上下文详情"},a0={class:"runtime-context-detail-content compaction-detail-content"},l0={class:"compaction-detail-stats"},c0={class:"runtime-context-modal",role:"dialog","aria-modal":"true","aria-label":"运行上下文"},u0={class:"runtime-context-modal-head"},d0={class:"runtime-context-modal-content"},g0={key:1,class:"runtime-plugin-list"},f0={key:0,class:"runtime-context-empty"},p0={class:"runtime-tool-status"},h0=["disabled","onClick"],m0={key:2,class:"runtime-plugin-list"},b0={key:0,class:"runtime-context-empty"},k0=["aria-label"],y0={class:"runtime-context-modal-head"},v0={key:0,class:"runtime-context-kicker"},w0={class:"runtime-context-detail-content"},_0={key:0},x0={key:1},S0={class:"tool-result-modal background-task-modal",role:"dialog","aria-modal":"true","aria-label":"后台任务"},E0={class:"tool-result-modal-head"},T0={class:"tool-result-modal-title"},I0={class:"background-task-modal-count"},A0={key:0,class:"background-task-index","aria-label":"后台任务列表"},C0=["title","onClick"],M0={class:"background-task-index-copy"},R0={class:"background-task-detail"},N0={class:"background-task-detail-head"},L0={class:"background-task-detail-title"},$0={class:"background-task-meta"},O0={key:0},D0={key:1,class:"wide"},P0={class:"background-task-detail-body"},U0={key:0,class:"background-task-command-section"},B0={class:"background-task-command"},z0={key:2,style:{"min-width":"0",width:"100%"}},F0=["aria-label"],H0={class:"tool-result-modal-head"},j0={class:"tool-result-modal-title"},G0={key:0},q0={class:"tool-result-modal-content"},W0=["innerHTML"],K0=2048,V0=18e5,Oo=.62,Do=10,Z0="System hint: if the user is asking you to draw, render, create, generate, or illustrate a new image, you must call the image2 tool with mode=generate instead of replying with text-only description. After the tool returns images, continue the response normally so the UI can display them in the conversation.",Q0="System hint: the user attached an image. If this request involves image editing, modification, redraw, background replacement, style transfer, repair, object removal, or localized changes, you must call the image2 tool with mode=edit and use the attached or most recent image as the source image. Image operations may take a while, so wait up to 10 minutes by default unless the tool returns an error or the user interrupts.",Y0="System hint from web UI: if your final answer produces, creates, modifies, exports, packages, or identifies local files that the user should receive, you must call the expose_downloads tool with all relevant absolute file paths before your final textual response. Do not paste absolute paths as the primary delivery method; expose them as browser downloads.",X0="<<ATTACHMENT_MANIFEST>>",J0="<</ATTACHMENT_MANIFEST>>",gr="••••••••••••••••••",Xn="neoctl-web.adminOwnerUsername",Il="neoctl-web.theme",Po="neoctl-web.clientRevision",Al="neoctl-web.clientReloadRequest",Uo="__neo_reload",e_=112,Cl=4e4,s_={__name:"App",setup(t){Ne.registerLanguage("javascript",Eo),Ne.registerLanguage("js",Eo),Ne.registerLanguage("jsx",Eo),Ne.registerLanguage("typescript",To),Ne.registerLanguage("ts",To),Ne.registerLanguage("tsx",To),Ne.registerLanguage("python",ml),Ne.registerLanguage("py",ml),Ne.registerLanguage("bash",Io),Ne.registerLanguage("sh",Io),Ne.registerLanguage("shell",Io),Ne.registerLanguage("json",Kp),Ne.registerLanguage("css",nh),Ne.registerLanguage("html",Ao),Ne.registerLanguage("xml",Ao),Ne.registerLanguage("vue",Ao),Ne.registerLanguage("markdown",bl),Ne.registerLanguage("md",bl),Ne.registerLanguage("yaml",kl),Ne.registerLanguage("yml",kl),Ne.registerLanguage("diff",sh);const r=ne(!1),s=ne(!1),i=V(Ka),a=V(()=>!Ge.isolation||i.value),d=[{value:"inherit",label:"跟随全局"},{value:"enabled",label:"启用"},{value:"disabled",label:"关闭"}],g={Assistant:"助手",You:"你",User:"你",System:"系统","Context compaction":"上下文压缩",Config:"配置",Reasoning:"思考","Runtime tool":"运行时工具",multi_tool_use:"并行执行工具",文件下载:"文件下载"},f={"API key":"API Key","Base URL":"Base URL",Model:"模型","Fallback model":"备用模型",Endpoint:"Endpoint","Reasoning effort":"推理强度","Reasoning summary":"推理摘要","Max output tokens":"最大输出 Token","Timeout ms":"请求超时(ms)","Stream idle timeout ms":"流式空闲超时(ms)","Max retries":"最大重试次数"},h={openai:"OpenAI"},w={INVALID_REQUEST:"请求参数无效",SESSION_ACTIVE:"当前会话不能删除,请先切换到其他会话",SESSION_RUNNING:"运行中的会话不能删除,请等待运行结束",SESSION_NOT_FOUND:"会话不存在或已被删除",SESSION_RESUME_FAILED:"打开会话失败",SESSION_CREATE_FAILED:"新建会话失败",SESSION_DELETE_FAILED:"删除会话失败",PLUGIN_UPDATE_BLOCKED:"模型回答期间不能修改会话插件",PLUGIN_NOT_CONFIGURED:"插件功能未配置",PLUGIN_INVALID:"插件配置无效",PLUGIN_UPDATE_FAILED:"插件配置更新失败",PLUGINS_LOCKED:"插件配置已由环境变量锁定",TOOL_UPDATE_BLOCKED:"模型回答期间不能修改会话工具",TOOL_NOT_CONFIGURED:"工具配置功能未启用",TOOL_INVALID:"工具配置无效",TOOL_UPDATE_FAILED:"工具配置更新失败",PROMPT_UPDATE_FAILED:"提示词更新失败",PROMPT_INVALID:"提示词内容无效",FAST_MODE_UPDATE_FAILED:"快速模式切换失败",CONTEXT_WINDOW_UPDATE_BLOCKED:"回答期间不能调整上下文窗口",CONTEXT_WINDOW_INVALID:"请输入大于 0 的整数",CONTEXT_WINDOW_UPDATE_FAILED:"上下文窗口调整失败",CWD_NOT_CONFIGURED:"当前运行时不支持工作目录切换",CWD_INVALID:"路径不存在或不可访问",CWD_UPDATE_BLOCKED:"模型回答期间不能切换工作目录",CWD_UPDATE_FAILED:"工作目录切换失败",CWD_CREATE_FAILED:"文件夹新建失败",CWD_DELETE_FAILED:"只能删除空文件夹,且不能删除当前目录或其上级目录",LOGIN_INVALID:"模型配置无效",LOGIN_SAVE_FAILED:"模型配置保存失败",API_NOT_FOUND:"当前运行时不支持此功能,请重启服务",WEB_REQUEST_FAILED:"请求处理失败"};Ka()&&(Ge.adminOwnerUsername=sessionStorage.getItem(Xn)||"");const y="neoctl-web.tabId"+Va(),E="neoctl-web.sessionId"+Va();let _=U(),I=sessionStorage.getItem(E)||"",x=!I,L=!1;const R=[];function N(){return{id:"",title:"",content:"",usage:""}}function P(e){if(!e||typeof e!="object")return null;const n=String(e.title||"").trim(),c=String(e.content||"").trim();return!n||!c?null:{id:String(e.id||M()).trim(),title:n,content:c,usage:String(e.usage||"").trim()}}function M(){return`prompt-${Math.random().toString(36).slice(2,10)}`}function U(){let e=sessionStorage.getItem(y);return e||(e=q(),sessionStorage.setItem(y,e)),e}function q(){var c,u;if((c=globalThis.crypto)!=null&&c.randomUUID)return globalThis.crypto.randomUUID();const e=new Uint8Array(16);if((u=globalThis.crypto)!=null&&u.getRandomValues)globalThis.crypto.getRandomValues(e);else for(let p=0;p<e.length;p+=1)e[p]=Math.floor(Math.random()*256);e[6]=e[6]&15|64,e[8]=e[8]&63|128;const n=[...e].map(p=>p.toString(16).padStart(2,"0"));return`${n.slice(0,4).join("")}-${n.slice(4,6).join("")}-${n.slice(6,8).join("")}-${n.slice(8,10).join("")}-${n.slice(10).join("")}`}function z(e){const n=new URL(e,window.location.origin);return n.searchParams.set("tabId",_),I&&n.searchParams.set("sessionId",I),st(`${n.pathname}${n.search}${n.hash}`)}function te(e,n=!1){const c=(e==null?void 0:e.sessionId)||"";!c||c===I||!n&&!x&&I||(I=c,x=!1,sessionStorage.setItem(E,c))}const o=pr({connected:!1,connecting:!0,coreVersion:"",coreEasterEgg:!1,lines:[],status:{phase:"ready",streamedOutputTokens:0},appPrompt:{hasActivePrompt:!1,activePrompt:void 0},runtimeContext:void 0,runtimeContextLoading:!0,runtimeContextError:"",runtimeContextModal:"",runtimeContextDetail:void 0,settingsPage:"",projectContextOpen:!1,projectContextDocument:void 0,globalPlugins:{items:[],locked:!1,restartRequired:!1,installationSupported:!1,loading:!1},sessionPlugins:{items:[],busy:!1,loading:!1},globalTools:{items:[],loading:!1},sessionTools:{items:[],busy:!1,loading:!1},fastMode:!1,fastModeMutating:!1,fastModeDraft:!1,pendingSessionSettings:{},compactSaving:!1,modelModalOpen:!1,modelDraft:"",reasoningDraft:"default",modelSearch:"",modelError:"",modelSaving:!1,contextWindowModalOpen:!1,contextWindowDraft:"",contextWindowError:"",contextWindowSaving:!1,busy:!1,queuedInput:void 0,backgroundTaskCount:0,backgroundTasks:[],agentTaskHistory:[],terminalTaskHistory:[],backgroundSessionRunCount:0,runningSessionIds:[],session:void 0,modelSettings:void 0,cwd:"",cwdPicker:{open:!1,cwd:"",parent:"",home:"",entries:[],locations:[],treeRoots:[],treeChildren:{},treeExpanded:{},selectedPath:"",selectionExplicit:!1,input:"",loading:!1,mutating:!1,error:""},sessionsLoading:!1,sessionResumeLoading:!1,pendingResumeSessionId:"",catalog:{commands:[],modelIds:[],reasoning:[]},interactive:{},sessions:[],adminUsers:[],adminUsersLoading:!1,adminUserBusy:!1,adminUserError:"",login:void 0,cpaConfig:{url:"",password:"",hasPassword:!1,loaded:!1},cpaQuotas:[],cpaQuotaIndex:0,memory:{current:null,history:[],sampleMs:6e4,retentionMs:864e5},activePanel:"chat",toolDetailLineId:void 0,expandedToolGroups:{},compactionDetailLineId:void 0,backgroundTaskDetail:void 0,imagePreview:void 0,confirmDialog:{open:!1,title:"",message:"",confirmLabel:"确认",cancelLabel:"取消",tone:"warning"},promptLibrary:[],promptLibraryLoading:!0,promptManagerOpen:!1,selectedPromptId:"",composerDropActive:!1,composerDropMode:"prompt",attachments:[],attachmentCounter:0,uploadingFiles:!1,uploadProgress:0,messageImagePreviews:[],coreToolTimings:[],coreQueryTiming:void 0,timingTick:performance.now(),clockTick:Date.now(),composerMetrics:{context:{display:0,target:0,bump:0,initialized:!1},inputTokens:{display:0,target:0,bump:0,initialized:!1},outputTokens:{display:0,target:0,bump:0,initialized:!1}},toast:""}),oe=ne(""),ce=ne(""),W=ne(1),Q=ne(""),le=ne(jd()),F=ne(null),se=ne(null);let $;const K=ne(null),j=ne(null),re=ne(null),fe=ne(null),we=ne(null),Te=ne(""),De=V(()=>[{id:"tasks",title:"后台任务"},..._t.value?[{id:"quota",title:"周额度"}]:[],{id:"memory",title:"服务端内存"}]),Pe=e=>{var n;return((n=De.value.find(c=>c.id===e))==null?void 0:n.title)||""};function Xe(e){ir(),o.activePanel="chat",Te.value=e,Ye(()=>{var n;return(n=document.querySelector(".mobile-card-close"))==null?void 0:n.focus()})}function Ct(){Te.value="",Ye(()=>{var e,n;return(n=(e=we.value)==null?void 0:e.querySelector("summary"))==null?void 0:n.focus()})}const Je=ne(""),ae=pr({}),me=pr(N()),Ue=ne(""),et=ne(""),ft=ne(""),pt=ne("before"),yt=ne(-1);let xe,ds;const We=Zh({getElement:()=>j.value});let X=0,vt=0,Me,be=!1,Mt,it,jt,ht=0,H=Promise.resolve(),Z=0,ue=0,pe=0,Re,Ke,gs=!1,Gt,Rt;Yc();const qt=new Map,Nt=new Map,Nr=ne(0),Wt=V(()=>[...o.lines||[]].reverse().find(e=>Ju(e))||null),wc=V(()=>{var e;return sd((e=o.status)==null?void 0:e.phase)}),_c=V(()=>{var e,n;if(Wt.value)return sa(Wt.value)?"整理图片结果":"图片生成中";if(((e=o.status)==null?void 0:e.phase)==="running_tools"){const c=(n=o.status)==null?void 0:n.currentTool;if(String((c==null?void 0:c.name)||"").toLowerCase()==="image_create")return"图片生成中";if(c!=null&&c.name)return`调用 ${c.name}${c.kind?` · ${c.kind}`:""}`}return wc.value}),hi=V(()=>{var e;return yg((e=o.status)==null?void 0:e.phase)}),xc=V(()=>hi.value||o.busy||o.sessionResumeLoading),Sc=V(()=>{var e;if(o.sessionResumeLoading)return"正在加载会话";if(Wt.value){const n=St(Wt.value),c=sa(Wt.value)?"正在载入图片结果":"图片模型正在生成";return n==="排队中"?`${c} · 排队中`:c}if(((e=o.status)==null?void 0:e.phase)==="calling_model"){const n=o.status.modelOutput;if((n==null?void 0:n.kind)==="text")return"正在生成回复";if((n==null?void 0:n.kind)==="tool_call")return n.name?`正在准备调用 ${n.name}`:"正在准备工具调用"}return`正在${_c.value}`}),Ec=V(()=>{if(!o.sessionResumeLoading){if(Wt.value){const e=Wt.value,n=o.coreToolTimings.find(c=>{var u;return c.id===((u=e.timing)==null?void 0:u.id)})??e.timing;return No(n,o.timingTick,o.connected)}return No(o.coreQueryTiming,o.timingTick,o.connected)}}),mi=e=>String(e||"").replace(/设计/g,"").trim(),bi=e=>mi(e==null?void 0:e.title)||"未命名会话",Tn=V(()=>{var n;const e=mi((n=o.session)==null?void 0:n.title);return e&&e!=="neo"?e:""}),fs=V(()=>Tn.value||"未命名会话"),ps=ne(null),ki=ne(null),Lr=ne(!1);let hs;const $r=async()=>{await Ye();const e=ps.value,n=ki.value;Lr.value=!!(e&&n&&n.scrollWidth>e.clientWidth+2)},yi=V(()=>o.cwd||"—"),In=V(()=>{var c,u;const e=o.pendingSessionSettings,n=o.modelSettings||{model:(u=(c=o.status)==null?void 0:c.metrics)==null?void 0:u.model};return{model:e.model??n.model,reasoning:Object.hasOwn(e,"reasoning")||Object.hasOwn(e,"model")?e.reasoning:n.reasoning}}),Tc=V(()=>{var e;return sm(In.value.model,(e=In.value.reasoning)==null?void 0:e.effort)}),ms=V(()=>o.fastModeMutating?o.fastModeDraft:o.pendingSessionSettings.fastMode??o.fastMode),vi=V(()=>{var e;return[...new Set([In.value.model,(e=o.modelSettings)==null?void 0:e.model,...o.catalog.modelIds||[]].filter(Boolean))]}),Ic=V(()=>vi.value.filter(e=>e.toLowerCase().includes(o.modelSearch.trim().toLowerCase()))),bs=V(()=>{var c;const e=((c=o.catalog.modelReasoning)==null?void 0:c[o.modelDraft])||[],n=o.catalog.reasoning||[];return["default","off",...e.filter(u=>n.includes(u)&&u!=="default"&&u!=="off")]});Oe(()=>o.modelDraft,()=>{bs.value.includes(o.reasoningDraft)||(o.reasoningDraft="default")});const Ac=V(()=>`${o.composerMetrics.context.display.toFixed(1)}%`),Cc=V(()=>{var n,c;const e=Number(o.pendingSessionSettings.contextWindowTokens??((c=(n=o.status)==null?void 0:n.metrics)==null?void 0:c.contextWindowTokens));return Number.isFinite(e)&&e>0?String(Math.max(1,Math.round(e/1e3))):""}),Mc=V(()=>bn(o.composerMetrics.inputTokens.display)),Rc=V(()=>bn(o.composerMetrics.outputTokens.display)),Lt=V(()=>hi.value||o.busy),ks=V(()=>o.backgroundTasks.length),ys=V(()=>[...o.agentTaskHistory,...o.terminalTaskHistory].sort((e,n)=>{const c=u=>typeof u.completedAt=="number"?u.completedAt:Date.parse(u.completedAt||u.updatedAt||"")||(typeof u.createdAt=="number"?u.createdAt:0);return c(n)-c(e)})),An=V(()=>{const e=new Set;return[...o.backgroundTasks,...ys.value].filter(n=>{const c=Xt(n);return e.has(c)?!1:(e.add(c),!0)})}),Cn=V(()=>o.backgroundTasks[0]),Or=V(()=>!!(oe.value.trim()||o.attachments.length)),wi=V(()=>r.value?"正在处理":Lt.value?Or.value?"打断并发送":o.queuedInput?"立即发送":"停止":"发送 ↵"),Mn=V(()=>{const e=ce.value.trim().toLocaleLowerCase(),n=o.sessions||[];return e?n.filter(c=>[bi(c),c.ownerUsername,c.title,c.sessionId,c.updatedAt,c.createdAt].some(u=>String(u||"").toLocaleLowerCase().includes(e))):n}),vs=V(()=>Math.max(1,Math.ceil(Mn.value.length/Do))),Nc=V(()=>{const e=(W.value-1)*Do;return Mn.value.slice(e,e+Do)}),Lc=V(()=>{const e=vs.value,n=Math.max(1,Math.min(W.value-2,e-4)),c=Math.min(e,n+4);return Array.from({length:c-n+1},(u,p)=>n+p)}),Kt=V(()=>o.sessionResumeLoading?[]:qu((o.lines||[]).filter(e=>!ed(e)))),Dr=ne(0),ln=Kf(V(()=>({count:Kt.value.length,getScrollElement:()=>j.value,estimateSize:pg,getItemKey:e=>fg(Kt.value[e]),rangeExtractor:e=>{const n=new Set(Gl(e));return Kt.value.forEach((c,u)=>{(c==null?void 0:c.live)===!0&&n.add(u)}),[...n].sort((c,u)=>c-u)},overscan:8,scrollMargin:Nr.value,anchorTo:"start",followOnAppend:!1,useAnimationFrameWithResizeObserver:!0})));ln.value.shouldAdjustScrollPositionOnItemSizeChange=(e,n,c)=>{if(We.following||We.interacting||Dr.value)return!1;const u=(c.scrollOffset||0)+c.scrollAdjustments;return c.itemSizeCache.has(e.key)?e.end<=u&&c.scrollDirection!=="backward":e.start<u};const $c=V(()=>ln.value.getVirtualItems().filter(e=>Kt.value[e.index])),Oc=V(()=>ln.value.getTotalSize()),Dc=V(()=>{var e,n;return Array.isArray((n=(e=o.runtimeContext)==null?void 0:e.prompt)==null?void 0:n.sections)?o.runtimeContext.prompt.sections:[]}),Pr=V(()=>{var e;return Array.isArray((e=o.runtimeContext)==null?void 0:e.tools)?o.runtimeContext.tools:[]}),Rn=V(()=>{var e,n;return Array.isArray((n=(e=o.runtimeContext)==null?void 0:e.project)==null?void 0:n.documents)?o.runtimeContext.project.documents:[]}),Pc=V(()=>o.sessionPlugins.items.filter(e=>e.effectiveEnabled).length),Uc=V(()=>o.sessionTools.items.filter(e=>e.effectiveEnabled).length),at=V(()=>o.lines.find(e=>String(e.id)===String(o.toolDetailLineId))||null),wt=V(()=>o.lines.find(e=>String(e.id)===String(o.compactionDetailLineId))||null),Vt=V(()=>{var e;return((e=o.appPrompt)==null?void 0:e.activePrompt)||void 0}),Bc=V(()=>{var e,n;return((e=Vt.value)==null?void 0:e.title)||((n=Vt.value)==null?void 0:n.id)||""}),ws=V(()=>o.promptLibrary.find(e=>e.id===o.selectedPromptId)||o.promptLibrary[0]||null),_s=V(()=>le.value==="dark"),xs=V(()=>_s.value?"切换到日间模式":"切换到夜间模式"),_t=V(()=>o.cpaQuotas.length?o.cpaQuotas[o.cpaQuotaIndex%o.cpaQuotas.length]||o.cpaQuotas[0]:null),Ss=V(()=>{var e;return((e=o.memory)==null?void 0:e.current)||null}),Es=V(()=>{var v;const e=(((v=o.memory)==null?void 0:v.history)||[]).filter(T=>Number.isFinite(Number(T==null?void 0:T.rss))),n=e.map(T=>Number(T.rss));if(!n.length)return[];const c=Math.min(...n),u=Math.max(...n),p=Math.max(1,u-c);return n.map((T,O)=>({entry:e[O],x:n.length===1?130:O/(n.length-1)*260,y:n.length===1?22:40-(T-c)/p*36}))}),_i=V(()=>Es.value.map((e,n)=>`${n?"L":"M"} ${e.x.toFixed(1)} ${e.y.toFixed(1)}`).join(" ")),Nn=V(()=>Es.value[yt.value]||null);Oe(le,Gd,{immediate:!0}),Oe([Lt,_s],([e,n])=>{const u=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M32 4 50 32 32 60 14 32Z" fill="${e?n?"#bef264":"#a3e635":n?"#38bdf8":"#7dd3fc"}"/></svg>`,p=document.querySelector('link[rel="icon"]');p&&(p.href=`data:image/svg+xml,${encodeURIComponent(u)}`)},{immediate:!0}),Oe(Tn,e=>{document.title=e||"对话工作台"},{immediate:!0}),Oe(fs,$r,{immediate:!0}),Oe(ce,()=>{W.value=1}),Oe(vs,e=>{W.value>e&&(W.value=e)}),Oe(()=>{var e;return(e=o.backgroundTaskDetail)==null?void 0:e.output},async()=>{await Ye();const e=fe.value;e&&(e.scrollTop=e.scrollHeight)}),Oe(j,e=>We.attach(e),{flush:"post"}),Oe(()=>Kt.value.length,async()=>{await Ye(),yo(),rr()}),Oe(()=>o.activePanel,async e=>{e==="chat"&&(await Ye(),yo(),rr())});async function zc(){sessionStorage.removeItem(Xn),(await ye("/api/auth/logout",{method:"POST"})).ok&&location.reload()}Vo(async()=>{$=Ng({getTarget:()=>se.value,onHover:e=>{o.composerDropActive=e,o.composerDropMode=e?"files":"prompt"},onFiles:e=>{var n;for(const c of e)o.attachments.push({...c,localReference:!0,label:`[file#${++o.attachmentCounter}]`});(n=F.value)==null||n.focus(),J(`已添加 ${e.length} 个文件`)},onError:e=>J(String((e==null?void 0:e.message)||e))}),typeof ResizeObserver<"u"&&(Rt=new ResizeObserver(()=>{rr(),We.schedule()}),yo()),rr(),await Promise.all([Ln(),Fc(),$n(),Ur(),Ts(),xi(),Fr(),Ui()]),As(),Mt=setInterval(()=>{o.clockTick=Date.now(),o.timingTick=performance.now()},1e3),it=setInterval(Fr,6e4),jt=setInterval(Ui,6e4),window.addEventListener("keydown",wa),document.addEventListener("click",Zi),document.addEventListener("click",Qi),document.addEventListener("pointerdown",Fa,!0),typeof ResizeObserver<"u"&&ps.value&&(hs=new ResizeObserver($r),hs.observe(ps.value)),$r()}),Ht(()=>{$==null||$(),xe&&xe.close(),We.dispose(),X&&cancelAnimationFrame(X),Cs(),Me=void 0,ht&&cancelAnimationFrame(ht),Mt&&clearInterval(Mt),it&&clearInterval(it),jt&&clearInterval(jt),Gt&&clearTimeout(Gt),hs&&hs.disconnect(),Rt&&Rt.disconnect(),document.body.classList.remove("tool-detail-open","image-preview-open","runtime-context-open","context-window-open","cwd-picker-lock"),Ke&&un(!1),window.removeEventListener("keydown",wa),document.removeEventListener("click",Zi),document.removeEventListener("click",Qi),document.removeEventListener("pointerdown",Fa,!0)});async function Ln(e={}){try{const n=await ye(z("/api/state"));if(!n.ok)throw new Error(`state ${n.status}`);return Ms(await n.json()),!0}catch(n){return e.silent||J(`运行时不可用:${n.message||n}`),!1}}async function Fc(){try{const e=await ye(z("/api/client-info"),{cache:"no-store"});if(!e.ok)return;Si(await e.json())}catch{}}async function $n(){o.runtimeContextLoading=!0;try{const e=await ye(z("/api/runtime-context")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`runtime-context ${e.status}`);return Ti(n),!0}catch(e){return o.runtimeContextError=e.message||String(e),!1}finally{o.runtimeContextLoading=!1}}async function Hc(){o.globalTools.loading=!0;try{const e=await ye(z("/api/tools")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`tools ${e.status}`);o.globalTools={items:Array.isArray(n.items)?n.items.map(c=>({...c})):[],loading:!1}}catch(e){o.globalTools.loading=!1,J(e.message||String(e))}}async function jc(){const e=Object.fromEntries(o.globalTools.items.map(n=>[n.name,n.configuredEnabled!==!1]));o.globalTools.loading=!0;try{const n=await Ie("/api/tools/global",{overrides:e});o.globalTools={...n.state,loading:!1},await Promise.all([Ts(),$n()]),J("全局工具配置已保存,各会话在下一轮或刷新时生效")}catch(n){o.globalTools.loading=!1,He(n,"工具配置保存失败")}}async function Ts(){o.sessionTools.loading=!0;try{const e=await ye(z("/api/session-tools")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`session-tools ${e.status}`);o.sessionTools={...n,items:Array.isArray(n.items)?n.items:[],loading:!1}}catch(e){o.sessionTools.loading=!1,J(e.message||String(e))}}async function Gc(e,n){const c=Object.fromEntries(o.sessionTools.items.map(u=>[u.name,u.name===e.name?n:u.mode]));o.sessionTools.busy=!0;try{const u=await Ie("/api/session-tools",{overrides:c});o.sessionTools={...u.state,loading:!1,busy:!1}}catch(u){o.sessionTools.busy=!1,He(u,"会话工具更新失败")}}async function Is(){o.globalPlugins.loading=!0;try{const e=await ye(z("/api/plugins")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`plugins ${e.status}`);o.globalPlugins={items:Array.isArray(n.items)?n.items.map(c=>({...c})):[],locked:n.locked===!0,restartRequired:n.restartRequired!==!1,installationSupported:n.installationSupported===!0,loading:!1}}catch(e){o.globalPlugins.loading=!1,J(e.message||String(e))}}async function qc(){const e=o.globalPlugins.items.filter(n=>n.configuredEnabled!==!1).map(n=>n.id);o.globalPlugins.loading=!0;try{const n=await Ie("/api/plugins/global",{enabledIds:e}),c=new Set(n.enabledIds||e);o.globalPlugins.items=o.globalPlugins.items.map(u=>({...u,configuredEnabled:c.has(u.id)})),await Is(),J("插件配置已生效;运行中的会话在下一次模型调用前更新")}catch(n){He(n,"插件配置保存失败")}finally{o.globalPlugins.loading=!1}}async function Wc(){const e=window.prompt("仅安装可信插件:插件以本机权限运行。输入服务器上的插件目录绝对路径(需含 neo-plugin.json)");if(e!=null&&e.trim()){o.globalPlugins.loading=!0;try{await Ie("/api/plugins/install",{directory:e.trim()}),await Is(),J("插件已安装;运行中的会话在下一次模型调用前更新")}catch(n){He(n,"插件安装失败")}finally{o.globalPlugins.loading=!1}}}async function Kc(e){if(window.confirm(`卸载“${e.name}”?历史资源将不可访问,用户数据保留。`)){o.globalPlugins.loading=!0;try{await Ie("/api/plugins/uninstall",{id:e.id}),await Is(),J("插件已卸载,用户数据已保留")}catch(n){He(n,"插件卸载失败")}finally{o.globalPlugins.loading=!1}}}async function Ur(){o.sessionPlugins.loading=!0;try{const e=await ye(z("/api/session-plugins")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`session-plugins ${e.status}`);o.sessionPlugins={...n,items:Array.isArray(n.items)?n.items:[],loading:!1}}catch(e){o.sessionPlugins.loading=!1,J(e.message||String(e))}}async function Vc(e,n){var u;const c=Object.fromEntries(o.sessionPlugins.items.map(p=>[p.id,p.id===e.id?n:p.mode]));o.sessionPlugins.busy=!0;try{const p=await Ie("/api/session-plugins",{overrides:c});o.sessionPlugins={...p.state,loading:!1,busy:!1},(u=p.state)!=null&&u.pending&&J("已保存,将在下一次模型调用前生效")}catch(p){o.sessionPlugins.busy=!1,He(p,"会话插件更新失败")}}async function xi(){if(Ge.isolation){o.promptLibraryLoading=!1;return}o.promptLibraryLoading=!0;try{const e=await ye(z("/api/prompt-library")),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n.error||`prompt-library ${e.status}`);On(Array.isArray(n.items)?n.items:R)}catch(e){On([]),J(e.message||String(e))}finally{o.promptLibraryLoading=!1}}function As(){xe&&xe.close(),X&&cancelAnimationFrame(X),X=0,Cs(),Me=void 0,be=!1,o.connecting=!0,xe=new EventSource(z("/events")),xe.addEventListener("open",()=>{be=!1,o.connected=!0,o.connecting=!1}),xe.addEventListener("error",()=>{Br(),o.connected=!1,o.connecting=!1}),xe.addEventListener("sync",e=>{if(!be){be=!0,Ai(e.data);return}Xc(e.data)}),xe.addEventListener("delta",e=>{Br(),Jc(e.data)}),xe.addEventListener("terminal.output",e=>{try{Br(),ru(JSON.parse(e.data))}catch{}}),xe.addEventListener("client.version",e=>{try{Si(JSON.parse(e.data))}catch{}}),xe.addEventListener("client.reload",e=>{try{Zc(JSON.parse(e.data))}catch{}}),xe.addEventListener("runtime.context",e=>{try{Ti(JSON.parse(e.data))}catch(n){o.runtimeContextError=n.message||String(n)}}),xe.addEventListener("runtime.context.error",e=>{try{const n=JSON.parse(e.data);o.runtimeContextError=n.message||"运行上下文同步失败"}catch{o.runtimeContextError="运行上下文同步失败"}})}function Si(e){if(Number(e==null?void 0:e.protocolVersion)!==1)return;o.coreVersion=String(e.coreVersion||"");const n=String(e.revision||"").trim();if(!n)return;const c=localStorage.getItem(Po);localStorage.setItem(Po,n),c&&c!==n&&Ei({...e,requestId:`revision:${n}`,clearCache:!0})}async function Zc(e){if(Number(e==null?void 0:e.protocolVersion)!==1)return;const n=String(e.requestId||"").trim();if(!n||sessionStorage.getItem(Al)===n)return;sessionStorage.setItem(Al,n);const c=String(e.revision||"").trim();c&&localStorage.setItem(Po,c),o.coreVersion=String(e.coreVersion||o.coreVersion||""),await Ei(e)}async function Ei(e){if(gs)return;gs=!0,e.clearCache!==!1&&await Qc();const n=new URL(window.location.href);n.searchParams.set(Uo,String(e.requestId||e.revision||Date.now())),window.location.replace(n.href)}async function Qc(){const e=[];"caches"in window&&e.push(caches.keys().then(n=>Promise.all(n.map(c=>caches.delete(c))))),"serviceWorker"in navigator&&e.push(navigator.serviceWorker.getRegistrations().then(n=>Promise.all(n.map(c=>c.unregister())))),await Promise.allSettled(e)}function Yc(){const e=new URL(window.location.href);e.searchParams.has(Uo)&&(e.searchParams.delete(Uo),window.history.replaceState(window.history.state,"",e.href))}function cn(){Gt&&clearTimeout(Gt),o.coreEasterEgg=!1,requestAnimationFrame(()=>{o.coreEasterEgg=!0,Gt=setTimeout(()=>{o.coreEasterEgg=!1},1300)})}function Ti(e){var p,v;if(![1,2].includes(Number(e==null?void 0:e.protocolVersion)))throw new Error(`不支持的运行上下文协议版本:${(e==null?void 0:e.protocolVersion)??"未知"}`);const n=Number(e.revision||0),c=Number(((p=o.runtimeContext)==null?void 0:p.revision)||0);(!e.sessionId||!((v=o.runtimeContext)!=null&&v.sessionId)||e.sessionId===o.runtimeContext.sessionId)&&n<c||(o.runtimeContext=e,o.projectContextDocument&&!Rn.value.some(T=>T.path===o.projectContextDocument.path)&&(o.projectContextDocument=void 0),o.projectContextOpen&&Rn.value.length===0&&(o.projectContextOpen=!1,document.body.classList.remove("runtime-context-open")),o.runtimeContextLoading=!1,o.runtimeContextError="")}function Xc(e){Me=e,!X&&(X=requestAnimationFrame(()=>{X=0,Ii()}))}function Br(){X&&cancelAnimationFrame(X),X=0,Ii()}function Ii(){const e=Me;Me=void 0,e&&Ai(e)}function Ai(e){try{Ms(JSON.parse(e))}catch(n){J(`运行状态同步失败:${n.message||n}`)}}function Jc(e){try{su(JSON.parse(e))}catch(n){J(`流式增量同步失败:${n.message||n}`),Ln()}}function eu(e,n){const c=String(n||"");if(!c)return;const u=String(e);Nt.set(u,`${Nt.get(u)||""}${c}`),Ci()}function Ci(){vt||(vt=requestAnimationFrame(tu))}function tu(){vt=0;const e=We.following,n=[...Nt];Nt.clear();for(const[c,u]of n){const p=o.lines.findIndex(T=>String(T.id)===c);if(p<0)continue;const v=o.lines[p];o.lines[p]={...v,text:`${v.text||""}${u}`}}e&&vo(),Nt.size&&Ci()}function nu(e){const n=String(e),c=Nt.get(n);if(!c)return;Nt.delete(n);const u=o.lines.findIndex(v=>String(v.id)===n);if(u<0)return;const p=o.lines[u];o.lines[u]={...p,text:`${p.text||""}${c}`}}function Cs(){vt&&cancelAnimationFrame(vt),vt=0,Nt.clear()}function su(e){const n=String(e.sessionId||"");if(I&&n&&n!==I&&!x){da();return}const c=We.following;for(const u of e.operations||[]){if(u.type==="line.append"){o.lines.some(v=>{var T;return String(v.id)===String((T=u.line)==null?void 0:T.id)})||o.lines.push(u.line);continue}const p=o.lines.findIndex(v=>String(v.id)===String(u.id));if(p<0)throw new Error(`找不到增量消息行 ${u.id}`);if(o.lines[p],u.type==="line.text.append")eu(u.id,u.text);else if(u.type==="line.patch"){nu(u.id);const v=o.lines[p];o.lines[p]={...v,...u.patch||{}}}}e.status&&(o.status=e.status,ra(e.status)),Qr(),o.connected=!0,o.connecting=!1,c&&vo()}function ru(e){var n,c;for(const u of(e==null?void 0:e.updates)||[]){const p=String((u==null?void 0:u.sessionId)||"");if(!p||u.ownerSessionId!==((n=o.session)==null?void 0:n.sessionId)||u.invalidated===!0)continue;const v=o.backgroundTasks.findIndex(k=>String((k==null?void 0:k.sessionId)||"")===p);if(v<0)continue;const T=String(u.text||"");if(!T)continue;const O=o.backgroundTasks[v],G=String(O.output||""),B=Number(O.outputEnd??G.length),de=Number(u.outputStart??B),Ce=Number(u.outputEnd??de+T.length),Ut=de===B?ou(G,T,Cl):T.slice(-Cl);o.backgroundTasks[v]={...O,output:Ut,outputEnd:Ce},String(((c=o.backgroundTaskDetail)==null?void 0:c.sessionId)||"")===p&&(o.backgroundTaskDetail={...o.backgroundTaskDetail,output:Ut,outputEnd:Ce})}}function ou(e,n,c){const u=`${e}${n}`;return u.length<=c?u:u.slice(-c)}function Ms(e){var p,v,T,O;Cs();const n=String(((p=e.session)==null?void 0:p.sessionId)||""),c=String(((v=o.session)==null?void 0:v.sessionId)||"");if(n&&n!==c&&fn(),I&&n&&n!==I&&!x){da();return}pe+=1;const u=We.following;if(n!==c&&(We.reset(),Ls(),bg(),o.messageImagePreviews=o.messageImagePreviews.filter(G=>G.sessionId===n),o.attachmentCounter=0),o.lines=e.lines||[],o.toolDetailLineId!==void 0&&!o.lines.some(G=>String(G.id)===String(o.toolDetailLineId))&&fn(),o.compactionDetailLineId!==void 0&&!o.lines.some(G=>String(G.id)===String(o.compactionDetailLineId))&&zs(),Yd(o.lines),o.status=e.status||o.status,ra(e.status),Qr(),o.busy=!!e.busy,o.queuedInput=e.queuedInput,o.backgroundTaskCount=e.backgroundTaskCount||0,o.backgroundTasks=e.backgroundTasks||[],o.agentTaskHistory=e.agentTaskHistory||[],o.terminalTaskHistory=e.terminalTaskHistory||[],o.backgroundTaskDetail){const G=An.value.find(B=>Xt(B)===Xt(o.backgroundTaskDetail));G?o.backgroundTaskDetail={...G}:o.backgroundTaskDetail.kind==="terminal"&&o.backgroundTaskDetail.ownerSessionId===((T=e.session)==null?void 0:T.sessionId)?o.backgroundTaskDetail={...o.backgroundTaskDetail,status:"unknown",outputAvailability:"unavailable"}:Ks()}if(o.backgroundSessionRunCount=e.backgroundSessionRunCount||0,o.runningSessionIds=e.runningSessionIds||[],o.session=e.session,o.modelSettings=e.modelSettings,o.pendingSessionSettings={...e.pendingSessionSettings||{}},o.cwd=e.cwd||"",o.fastMode=e.fastMode===!0,o.appPrompt=e.appPrompt||{hasActivePrompt:!1,activePrompt:void 0},te(e.session,x),n&&n!==c&&Promise.all([Ur(),Ts()]),o.sessionResumeLoading){const G=((O=e.session)==null?void 0:O.sessionId)||"";o.pendingResumeSessionId&&G===o.pendingResumeSessionId&&(o.sessionResumeLoading=!1,o.pendingResumeSessionId="")}e.catalog&&(o.catalog=e.catalog),e.interactive&&(o.interactive=e.interactive),e.tips&&(o.tips=e.tips),e.tipIndex!==void 0&&o.tipIndex===0&&(o.tipIndex=e.tipIndex),o.connected=!0,o.connecting=!1,nd(o.backgroundTasks),kg(),u&&vo()}function On(e,n=o.selectedPromptId){const c=(e||[]).map(P).filter(Boolean);o.promptLibrary=c;const u=c.find(p=>p.id===n)||c[0]||null;o.selectedPromptId=(u==null?void 0:u.id)||"",Dn(u||N())}function Dn(e){me.id=(e==null?void 0:e.id)||"",me.title=(e==null?void 0:e.title)||"",me.content=(e==null?void 0:e.content)||"",me.usage=(e==null?void 0:e.usage)||""}function zr(e){if(Ge.isolation)return;o.activePanel="prompts",o.promptManagerOpen=!0,e&&(o.selectedPromptId=e);const n=o.promptLibrary.find(c=>c.id===o.selectedPromptId)||o.promptLibrary[0]||N();o.selectedPromptId=n.id||"",Dn(n)}function iu(e){o.selectedPromptId=e.id,zr(e.id)}function au(){o.selectedPromptId="",Dn(N()),o.activePanel="prompts",o.promptManagerOpen=!0}function lu(e){o.selectedPromptId=e.id,Dn(e)}async function cu(){const e=P({id:me.id||M(),title:me.title,content:me.content,usage:me.usage});if(!e){J("标题和内容不能为空");return}try{const n=await Ie("/api/prompt-library",{item:e});On(n.items,e.id)}catch(n){J(n.message||String(n));return}J("已保存提示词")}async function uu(){var u;const e=String(me.id||"").trim();if(!e){Dn(N());return}const n=o.promptLibrary.find(p=>p.id===e);if(!(!n||!await Un({title:"删除提示词?",message:`“${n.title}”删除后无法恢复。`,confirmLabel:"确认删除",tone:"danger"}))){try{const p=await Ie("/api/prompt-library/delete",{id:e});On(p.items)}catch(p){J(p.message||String(p));return}((u=Vt.value)==null?void 0:u.id)===n.id&&Mi({confirm:!1}),J("已删除提示词")}}async function Pn(e){const n=P(e);if(!n){J("提示词无效");return}const c=Vt.value;if(c&&(c.id!==n.id||String(c.content||"").trim()!==n.content)){const p=c.id===n.id;if(!await Un({title:p?"更新当前提示词?":"切换当前提示词?",message:p?`“${n.title}”的内容已经变化。重新应用会影响模型对后续问题的理解和回答方式。`:`将从“${c.title||c.id||"当前提示词"}”切换为“${n.title}”。提示词变化会影响模型对后续问题的理解和回答方式。`,confirmLabel:p?"确认更新":"确认切换"}))return}try{const p=await Ie("/api/app-prompt",{id:n.id,title:n.title,usage:n.usage,source:"sidebar-library",content:n.content});(p==null?void 0:p.ok)!==!1&&(o.appPrompt=p.appPrompt||{hasActivePrompt:!0,activePrompt:n},J(`已应用:${n.title}`))}catch(p){He(p,"应用提示词失败")}}async function Mi(e={}){if(Vt.value&&!(e.confirm!==!1&&!await Un({title:"清除当前提示词?",message:"清除后,模型将不再遵循当前应用提示词,这会改变它对后续问题的理解和回答方式。",confirmLabel:"确认清除",tone:"danger"})))try{const n=await Ie("/api/app-prompt",{clear:!0});(n==null?void 0:n.ok)!==!1&&(o.appPrompt=n.appPrompt||{hasActivePrompt:!1,activePrompt:void 0},J("已清空应用提示词"))}catch(n){He(n,"清空提示词失败")}}function Un(e){return Ke&&un(!1),Object.assign(o.confirmDialog,{open:!0,title:String((e==null?void 0:e.title)||"请确认"),message:String((e==null?void 0:e.message)||""),confirmLabel:String((e==null?void 0:e.confirmLabel)||"确认"),cancelLabel:String((e==null?void 0:e.cancelLabel)||"取消"),tone:(e==null?void 0:e.tone)==="danger"?"danger":"warning"}),new Promise(n=>{Ke=n})}function un(e){const n=Ke;Ke=void 0,o.confirmDialog.open=!1,n==null||n(e===!0)}function du(e,n){Ue.value=n.id,e!=null&&e.dataTransfer&&(e.dataTransfer.effectAllowed="copy",e.dataTransfer.setData("application/x-neoctl-prompt-id",n.id),e.dataTransfer.setData("text/plain",n.title))}function gu(e){var u;const n=Array.from(((u=e==null?void 0:e.dataTransfer)==null?void 0:u.types)||[]),c=hu(e);!n.includes("application/x-neoctl-prompt-id")&&!c||(e.preventDefault(),o.composerDropActive=!0,o.composerDropMode=c?"files":"prompt",e.dataTransfer&&(e.dataTransfer.dropEffect="copy"))}function fu(e){e!=null&&e.currentTarget&&(e!=null&&e.relatedTarget)&&e.currentTarget.contains(e.relatedTarget)||(o.composerDropActive=!1,o.composerDropMode="prompt")}async function pu(e){var p,v;const n=mu(e==null?void 0:e.dataTransfer);if(n.length){if(e.preventDefault(),o.composerDropActive=!1,o.composerDropMode="prompt",Ue.value="",as()){J("请更新桌面端后重试");return}await xa(n),(p=F.value)==null||p.focus();return}const c=((v=e==null?void 0:e.dataTransfer)==null?void 0:v.getData("application/x-neoctl-prompt-id"))||Ue.value;if(o.composerDropActive=!1,o.composerDropMode="prompt",!c)return;e.preventDefault();const u=o.promptLibrary.find(T=>T.id===c);if(Ue.value="",!u){J("未找到提示词");return}await Pn(u)}function hu(e){var c,u;return Array.from(((c=e==null?void 0:e.dataTransfer)==null?void 0:c.types)||[]).includes("Files")?!0:Array.from(((u=e==null?void 0:e.dataTransfer)==null?void 0:u.items)||[]).some(p=>p.kind==="file")}function mu(e){const n=Array.from((e==null?void 0:e.files)||[]);return n.length?n:Array.from((e==null?void 0:e.items)||[]).filter(c=>c.kind==="file").map(c=>c.getAsFile()).filter(Boolean)}function bu(){Ue.value="",o.composerDropActive=!1,o.composerDropMode="prompt"}function ku(e,n){et.value=n.id,ft.value="",e!=null&&e.dataTransfer&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("application/x-neoctl-prompt-sort-id",n.id),e.dataTransfer.setData("text/plain",n.title))}function yu(e,n){var p,v,T;const c=et.value||((p=e==null?void 0:e.dataTransfer)==null?void 0:p.getData("application/x-neoctl-prompt-sort-id"));if(!c||c===n.id)return;e.preventDefault();const u=(T=(v=e.currentTarget)==null?void 0:v.getBoundingClientRect)==null?void 0:T.call(v);ft.value=n.id,pt.value=u&&e.clientY>u.top+u.height/2?"after":"before",e.dataTransfer&&(e.dataTransfer.dropEffect="move")}async function vu(e,n){var G;e.preventDefault();const c=((G=e==null?void 0:e.dataTransfer)==null?void 0:G.getData("application/x-neoctl-prompt-sort-id"))||et.value,u=pt.value;if(Ri(),!c||c===n.id)return;const p=[...o.promptLibrary],v=p.findIndex(B=>B.id===c);if(v<0)return;const[T]=p.splice(v,1),O=p.findIndex(B=>B.id===n.id);if(!(O<0)){p.splice(O+(u==="after"?1:0),0,T),o.promptLibrary=p;try{const B=await Ie("/api/prompt-library/reorder",{ids:p.map(de=>de.id)});On(B.items,o.selectedPromptId),J("提示词顺序已更新")}catch(B){await xi(),J(B.message||String(B))}}}function Ri(){et.value="",ft.value="",pt.value="before"}async function Ni(){if(r.value||i.value)return;const e=oe.value;if(!e.trim()&&o.attachments.length===0)return;if(e.trim()==="/sessions"){oe.value="",Kn(),await Ds();return}if(e.trim()==="/login"){oe.value="",Kn(),await zn();return}if(e.trim()==="/new"){oe.value="",Kn(),await Us();return}const n=[...o.attachments],c=n.filter(v=>v.kind==="image"),u=n.filter(v=>v.kind==="file"&&v.absolutePath),p=Ea(e,c);Ta(c),oe.value="",o.attachments=[],Kn(),r.value=!0;try{const v=await ye(z("/api/submit"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:p,attachments:[...c,...u]})}),T=await v.json();if(!v.ok||T!=null&&T.error)throw new Error(T.error||`submit ${v.status}`)}catch(v){J(v.message||String(v))}finally{r.value=!1}}async function wu(){if(r.value)return;if(!Or.value){o.queuedInput?await $i():await Li();return}const e=oe.value,n=[...o.attachments],c=n.filter(v=>v.kind==="image"),u=n.filter(v=>v.kind==="file"&&v.absolutePath),p=Ea(e,c);Ta(c),oe.value="",o.attachments=[],Kn(),r.value=!0;try{await Ie("/api/submit-now",{text:p,attachments:[...c,...u]})}catch(v){J(v.message||String(v))}finally{r.value=!1}}async function Li(){if(!r.value){r.value=!0;try{await Ie("/api/interrupt",{})}catch(e){He(e,"停止回答失败")}finally{r.value=!1}}}async function _u(){try{const e=await Ie("/api/queue/cancel",{});J(e.cancelled?"已撤回排队消息":"没有待撤回的消息")}catch(e){He(e,"撤回排队消息失败")}}async function $i(){if(!r.value){r.value=!0;try{const e=await Ie("/api/queue/send-now",{});J(e.interrupted?"已打断并发送排队消息":"已发送排队消息")}catch(e){He(e,"发送排队消息失败")}finally{r.value=!1}}}function Rs(e){const n=z(e),c=ue;return{url:n,revision:pe,isCurrent:()=>c===ue&&n===z(e)}}async function Ns(e,n=()=>!0){if(!e.isCurrent()||!n()||e.revision===pe)return;const c=pe;try{const u=new URL(e.url,window.location.origin);u.pathname="/api/state";const p=await ye(`${u.pathname}${u.search}`,{cache:"no-store"}),v=await p.json();p.ok&&e.isCurrent()&&n()&&c===pe&&Ms(v)}catch{}}function Ls(){ue+=1,Z+=1,H=Promise.resolve(),o.fastModeMutating=!1,o.compactSaving=!1,o.modelSaving=!1,o.contextWindowSaving=!1,o.modelModalOpen=!1,o.contextWindowModalOpen=!1,o.modelError="",o.contextWindowError="",o.pendingSessionSettings={},Re=void 0,document.body.classList.remove("context-window-open")}function $s(e,n){J(`${e}${n.deferred===!0?"将在下一轮生效":"已生效"}`)}function Oi(e){Re=document.activeElement,document.body.classList.add("context-window-open"),Ye(()=>{var n;return(n=document.querySelector(e))==null?void 0:n.focus()})}function Di(){document.body.classList.remove("context-window-open"),Re!=null&&Re.isConnected&&Re.focus(),Re=void 0}function Pi(e){if(e.key!=="Tab")return;const n=[...e.currentTarget.querySelectorAll('button:not(:disabled), input:not(:disabled), select:not(:disabled), [tabindex="0"]')].filter(p=>p.getClientRects().length),c=n[0],u=n.at(-1);e.shiftKey&&document.activeElement===c?(e.preventDefault(),u==null||u.focus()):!e.shiftKey&&document.activeElement===u&&(e.preventDefault(),c==null||c.focus())}async function xu(){if(o.compactSaving||o.pendingSessionSettings.compact)return;const e=Rs("/api/compact");o.compactSaving=!0;try{const n=await Ie(e.url,{},!0);if(!e.isCurrent())return;n.deferred&&(o.pendingSessionSettings.compact=!0),$s("压缩会话",n),await Ns(e)}catch(n){e.isCurrent()&&He(n,"压缩上下文失败")}finally{e.isCurrent()&&(o.compactSaving=!1)}}function Su(){o.modelDraft=In.value.model||vi.value[0]||"";const e=In.value.reasoning;o.reasoningDraft=e===null?"off":(e==null?void 0:e.effort)||"default",bs.value.includes(o.reasoningDraft)||(o.reasoningDraft="default"),o.modelSearch="",o.modelError="",o.modelModalOpen=!0,Oi("#session-model-search")}function Bn(){o.modelModalOpen=!1,o.modelError="",Di()}async function Eu(){if(o.modelSaving||!o.modelDraft)return;const e=Rs("/api/session-model"),n=o.modelDraft,c=bs.value.includes(o.reasoningDraft)?o.reasoningDraft:"default";o.modelSaving=!0,o.modelError="";try{const u=await Ie(e.url,{model:n,reasoning:c},!0);if(!e.isCurrent())return;delete o.pendingSessionSettings.model,delete o.pendingSessionSettings.reasoning,u.deferred?Object.assign(o.pendingSessionSettings,{model:u.modelSettings.model,reasoning:u.modelSettings.reasoning}):o.modelSettings=u.modelSettings,Bn(),$s("模型",u),await Ns(e)}catch(u){e.isCurrent()&&(o.modelError=tt(u,"模型切换失败"))}finally{e.isCurrent()&&(o.modelSaving=!1)}}function Tu(){o.contextWindowDraft=Cc.value,o.contextWindowError="",o.contextWindowModalOpen=!0,Oi("#context-window-input")}function Os(){o.contextWindowModalOpen=!1,o.contextWindowError="",Di()}function Iu(){o.contextWindowError=""}async function Au(){var c;if(o.contextWindowSaving)return;const e=String(o.contextWindowDraft||"").trim();if(!/^\d+$/.test(e)||!Number.isSafeInteger(Number(e)*1e3)||Number(e)<=0){o.contextWindowError="请输入大于 0 的整数";return}const n=Rs("/api/context-window");o.contextWindowSaving=!0,o.contextWindowError="";try{const u=await Ie(n.url,{value:e},!0);if(!n.isCurrent())return;const p=Number(u.contextWindowTokens);if(u.deferred)o.pendingSessionSettings.contextWindowTokens=p;else{delete o.pendingSessionSettings.contextWindowTokens;const v=((c=o.status)==null?void 0:c.metrics)||{};o.status={...o.status,metrics:{...v,contextWindowTokens:p,contextWindowSource:"session",contextUsageRatio:p>0?Number(v.estimatedInputTokens||0)/p:void 0}},Qr()}Os(),$s("上下文窗口",u),await Ns(n)}catch(u){n.isCurrent()&&(o.contextWindowError=tt(u,"调整失败"))}finally{n.isCurrent()&&(o.contextWindowSaving=!1)}}function Cu(){const e=!ms.value,n=++Z,c=Rs("/api/fast-mode");o.fastModeDraft=e,o.fastModeMutating=!0,H=H.catch(()=>{}).then(()=>Ie(c.url,{enabled:e},!0)).then(async u=>{!c.isCurrent()||n!==Z||(u.deferred?o.pendingSessionSettings.fastMode=u.fastMode===!0:(delete o.pendingSessionSettings.fastMode,o.fastMode=u.fastMode===!0),o.fastModeMutating=!1,$s("快速模式",u),await Ns(c,()=>n===Z))}).catch(async u=>{if(!(!c.isCurrent()||n!==Z)){o.fastModeMutating=!1,He(u,"快速模式切换失败");try{const p=await ye(c.url.replace("/api/fast-mode?","/api/state?")),v=await p.json();p.ok&&c.isCurrent()&&n===Z&&Ms(v)}catch{}}})}async function Ds(){o.activePanel="sessions",o.sessionsLoading=!0;try{if(i.value){const e=await ye("/api/admin/sessions"),n=await e.json().catch(()=>({}));if(!e.ok||n!=null&&n.error)throw xt(n,e.status);o.sessions=(n.groups||[]).flatMap(c=>(c.sessions||[]).map(u=>({...u,ownerUsername:c.user.username,ownerDeleted:c.user.deleted===!0}))),o.runningSessionIds=[]}else{const e=await ye(z("/api/sessions")),n=await e.json().catch(()=>({}));if(!e.ok||n!=null&&n.error||(n==null?void 0:n.ok)===!1)throw xt(n,e.status);o.sessions=n.sessions||[],o.runningSessionIds=n.runningSessionIds||[]}}catch(e){He(e,"加载会话失败")}finally{o.sessionsLoading=!1}}async function Ps(){if(i.value){o.activePanel="users",o.adminUsersLoading=!0,o.adminUserError="";try{const e=await ye("/api/admin/users"),n=await e.json().catch(()=>({}));if(!e.ok||n!=null&&n.error)throw xt(n,e.status);o.adminUsers=n.users||[]}catch(e){o.adminUserError=tt(e,"加载用户失败")}finally{o.adminUsersLoading=!1}}}async function Mu(){o.adminUserBusy=!0,o.adminUserError="";try{const e=await ye("/api/admin/users",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:Q.value})}),n=await e.json().catch(()=>({}));if(!e.ok||n!=null&&n.error)throw xt(n,e.status);Q.value="",J("普通用户已创建"),await Ps()}catch(e){o.adminUserError=tt(e,"创建用户失败")}finally{o.adminUserBusy=!1}}async function Ru(e){if(window.confirm(`删除账号 ${e.username}?历史会话将保留。`)){o.adminUserBusy=!0,o.adminUserError="";try{const n=await ye("/api/admin/users/delete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e.username})}),c=await n.json().catch(()=>({}));if(!n.ok||c!=null&&c.error)throw xt(c,n.status);J("普通用户已删除"),await Ps()}catch(n){o.adminUserError=tt(n,"删除用户失败")}finally{o.adminUserBusy=!1}}}async function Nu(e){const n=typeof e=="object"?e:{sessionId:e},c=n.sessionId,u=_,p=I,v=Ge.adminOwnerUsername;if(i.value&&n.ownerUsername&&(Ge.adminOwnerUsername=n.ownerUsername,sessionStorage.setItem(Xn,n.ownerUsername)),o.pendingResumeSessionId=c,o.sessionResumeLoading=!0,await ga(c))o.activePanel="chat",J(i.value?`已打开 ${n.ownerUsername} 的会话`:"已打开会话");else{Ge.adminOwnerUsername=v,v?sessionStorage.setItem(Xn,v):sessionStorage.removeItem(Xn);const O=await fa(u,p);J(O?"打开会话失败,已恢复原会话":"打开会话失败,运行时连接已断开")}o.sessionResumeLoading=!1,o.pendingResumeSessionId=""}async function Fr(){try{const e=await ye(z("/api/cpa-quota"));if(!e.ok)throw new Error(`cpa-quota ${e.status}`);const n=await e.json();o.cpaQuotas=Array.isArray(n==null?void 0:n.quotas)?n.quotas:[],o.cpaQuotaIndex>=o.cpaQuotas.length&&(o.cpaQuotaIndex=0),n!=null&&n.config&&(o.cpaConfig.loaded||(o.cpaConfig.url=String(n.config.url||""),o.cpaConfig.password=n.config.hasPassword?gr:"",o.cpaConfig.loaded=!0),o.cpaConfig.hasPassword=!!n.config.hasPassword)}catch{o.cpaQuotas=[],o.cpaQuotaIndex=0}}async function Ui(){try{const e=await ye(z("/api/memory"));if(!e.ok)throw new Error(`memory ${e.status}`);const n=await e.json();o.memory={current:(n==null?void 0:n.current)||null,history:Array.isArray(n==null?void 0:n.history)?n.history:[],sampleMs:Number(n==null?void 0:n.sampleMs)||6e4,retentionMs:Number(n==null?void 0:n.retentionMs)||864e5}}catch{}}async function Us(){if(i.value)return;Ls();const e=_,n=I;if(lo(),_=q(),I="",x=!0,sessionStorage.setItem(y,_),sessionStorage.removeItem(E),o.sessionResumeLoading=!0,o.pendingResumeSessionId="",await Ln({silent:!0}))o.activePanel="chat",J("已创建新会话"),As();else{const u=await fa(e,n);J(u?"新建会话失败,已恢复原会话":"新建会话失败,运行时连接已断开")}o.sessionResumeLoading=!1}function Hr(e){var n;return!!e&&String(((n=o.session)==null?void 0:n.sessionId)||"")===String(e)}function jr(e){return o.runningSessionIds.includes(e)}async function Lu(e){const n=o.sessions.find(u=>u.sessionId===e);if(Hr(e)){J(w.SESSION_ACTIVE);return}if(jr(e)){J(w.SESSION_RUNNING);return}if(await Un({title:"删除会话?",message:`“${(n==null?void 0:n.title)||e||"这个会话"}”删除后无法恢复。`,confirmLabel:"确认删除",tone:"danger"}))try{await Ie("/api/sessions/delete",{sessionId:e}),await Ds(),J("会话已删除")}catch(u){He(u,"删除会话失败")}}async function zn(e){if(!a.value)return;o.activePanel="settings",o.settingsPage="";const n=e?`?provider=${encodeURIComponent(e)}`:"";try{const c=await ye(z(`/api/login${n}`)),u=await c.json().catch(()=>({}));if(!c.ok||u!=null&&u.error||(u==null?void 0:u.ok)===!1)throw xt(u,c.status);o.login=u,Je.value=u.provider,Object.keys(ae).forEach(p=>delete ae[p]),Object.assign(ae,u.values||{}),await Promise.all([Fr(),Is(),Hc()])}catch(c){He(c,"加载模型配置失败")}}async function Bi(e){J(e!=null&&e.deferred?"已保存,下一轮生效":"提示词已保存"),await $n()}async function $u(){await zn(Je.value)}async function zi(){var u;if(!a.value)return;const[e,n]=await Promise.allSettled([Ie("/api/login",{provider:Je.value,values:{...ae}}),Ie("/api/cpa-config",{url:o.cpaConfig.url,password:o.cpaConfig.password===gr?"":o.cpaConfig.password,preservePassword:o.cpaConfig.hasPassword&&(!o.cpaConfig.password||o.cpaConfig.password===gr)})]);if(n.status==="fulfilled"){const p=n.value;o.cpaQuotas=Array.isArray(p==null?void 0:p.quotas)?p.quotas:[],o.cpaQuotaIndex=0,o.cpaConfig.loaded=!0,o.cpaConfig.hasPassword=!!((u=p==null?void 0:p.config)!=null&&u.hasPassword),o.cpaConfig.password=o.cpaConfig.hasPassword?gr:""}if(e.status==="fulfilled"&&n.status==="fulfilled"){J("模型配置已保存");return}const c=[];e.status==="rejected"&&c.push(tt(e.reason,"模型配置保存失败")),n.status==="rejected"&&c.push(tt(n.reason,"CPA 配置保存失败")),J(c.join(";"))}function Gr(e){const n=Number.parseFloat(String(e??"").replace("%",""));return Number.isFinite(n)?Math.max(0,Math.min(100,n)):0}function Fi(e){const n=Number.parseFloat(String(e??"").replace("%",""));if(!Number.isFinite(n))return"—";const c=Gr(n);return`${c.toFixed(c%1?1:0)}%`}function Hi(e){const n=new Date(e);return Number.isNaN(n.getTime())?"—":new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).format(n)}function ji(e){const n=new Date(e);return Number.isNaN(n.getTime())?"—":new Intl.DateTimeFormat("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).format(n)}function Gi(e){const n=o.cpaQuotas.length;n<2||(o.cpaQuotaIndex=(o.cpaQuotaIndex+e+n)%n)}function Ou(e){const n=String(e||"").trim();if(!n)return"Codex 凭据";const[c,u]=n.split("@");return!u||c.length<=3?n:`${c.slice(0,3)}***@${u}`}function Bs(e){const n=Number(e);if(!Number.isFinite(n)||n<0)return"—";const c=n/1024/1024;return`${c.toFixed(c>=100?0:1)} MB`}function Du(e){const n=new Date(e);return Number.isNaN(n.getTime())?"等待采样":new Intl.DateTimeFormat("zh-CN",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(n)}function Pu(e){const n=new Date(e);return Number.isNaN(n.getTime())?"—":new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(n)}function Uu(e){const n=Es.value.length;if(!n)return;const c=e.currentTarget.getBoundingClientRect(),u=Math.min(1,Math.max(0,(e.clientX-c.left)/Math.max(1,c.width)));yt.value=n===1?0:Math.round(u*(n-1))}function qi(){yt.value=-1}async function Ie(e,n,c=!1){const u=await ye(c?e:z(e),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),p=await u.json().catch(()=>({}));if(!u.ok||p!=null&&p.error||(p==null?void 0:p.ok)===!1)throw xt(p,u.status);return p}class Bu extends Error{constructor(n,c=""){super(n),this.name="ActionRequestError",this.code=c}}function xt(e,n){const c=String((e==null?void 0:e.errorCode)||(n===404?"API_NOT_FOUND":""));return new Bu((e==null?void 0:e.error)||`请求失败(${n})`,c)}function tt(e,n="操作失败"){const c=String((e==null?void 0:e.code)||"");if(c&&w[c])return w[c];const u=String((e==null?void 0:e.message)||e||"").trim();return u?`${n}:${u}`:n}function He(e,n){J(tt(e,n))}function Zt(e){const n=Qd(Zd(Vd(e.text||"")));return e.kind==="system"||e.kind==="meta"?zu(n):n}function zu(e){return String(e||"").replace(/^Interactive web UI enabled\.\s*Type \/help for commands\.\s*/i,"工作台已连接。输入 `/help` 可查看命令说明。").replace(/\bSession:\s*/gi,"会话:").replace(/\bTip:\s*/gi,"提示:").replace(/Start fresh/gi,"重新开始").replace(/\/reset clears the visible conversation and adds a reset marker so you can start a fresh thread in the same session\./gi,"`/reset` 会清空当前可见对话,并插入一个重置标记,方便你在同一会话中重新开始。").replace(/^new session\s+/i,"已新建会话:").replace(/^deleted session\s+/i,"已删除会话:").replace(/^resumed session\s+(.+?):\s+(\d+)\s+messages?\s+from\s+(.+)$/i,"已恢复会话:$1,共载入 $2 条消息,来源:$3").replace(/\((\d+)\s+resumed messages\)/gi,"(已恢复 $1 条消息)").replace(/\bType \/help for commands\./gi,"输入 `/help` 可查看命令说明。")}function Qt(e){var n;if(e.kind==="tool"||e.toolName){const c=Yt(e);return(n=e==null?void 0:e.toolPresentation)!=null&&n.label?String(e.toolPresentation.label):Fn(e)?"任务计划":e.title?g[e.title]||g[String(e.title).toLowerCase()]||e.title:g[c]||c}return e.title?g[e.title]||g[String(e.title).toLowerCase()]||e.title:e.kind==="assistant"?"助手":e.kind==="user"?"你":e.kind==="thinking"?"思考":"系统"}function Yt(e){return String((e==null?void 0:e.toolName)||"tool").trim()||"tool"}function Fn(e){return(e==null?void 0:e.kind)==="tool"&&Yt(e)==="plan_update"}function Fu(e){return Fn(e)||lt(e)||pn(e).length>0}function qr(e){return(e==null?void 0:e.kind)==="meta"&&String((e==null?void 0:e.title)||"")==="提示词用法"}function Hn(e){return!!(e!=null&&e.compaction&&typeof e.compaction=="object")}function Hu(e){var n;return(n=e==null?void 0:e.compaction)!=null&&n.modelDriven?"模型生成摘要":"确定性摘要"}function dn(e){Hn(e)&&(o.compactionDetailLineId=e.id,document.body.classList.add("runtime-context-open"))}function zs(){o.compactionDetailLineId=void 0,!o.runtimeContextModal&&!o.runtimeContextDetail&&!o.projectContextOpen&&document.body.classList.remove("runtime-context-open")}function jn(e){return((e==null?void 0:e.kind)==="tool"||(e==null?void 0:e.kind)==="error"&&(e==null?void 0:e.toolName))&&!Fu(e)}function Wr(e){return(e==null?void 0:e.kind)==="tool-group"&&Array.isArray(e.lines)}function ju(e){return!e||e.presentationLevel==="primary"||qr(e)||e.kind==="user"||e.kind==="assistant"?!0:lt(e)}function Gu(e){return!e||ju(e)?!1:["thinking","tool","error","meta","system","agent"].includes(String(e.kind||"system"))}function qu(e){const n=[];let c=[];const u=()=>{if(!c.length)return;const p=c.some(v=>(v==null?void 0:v.kind)!=="thinking");c.length===1||!p?n.push(...c):n.push({id:`tool-group:${c[0].id}`,kind:"tool-group",lines:c,live:c.some(v=>(v==null?void 0:v.live)===!0)}),c=[]};for(const p of e||[])Gu(p)?c.push(p):(u(),n.push(p));return u(),n}function gn(e){return o.expandedToolGroups[e==null?void 0:e.id]===!0}function Wu(e,n){if(Wr(e))return Ua(n,()=>{o.expandedToolGroups[e.id]=!gn(e)})}function Wi(e){const n=new Map;for(const u of(e==null?void 0:e.lines)||[]){const p=(u==null?void 0:u.kind)==="thinking"?"思考":Qt(u);p&&n.set(p,(n.get(p)||0)+1)}const c=[...n.entries()].map(([u,p])=>({name:u,count:p}));return c.length?c:[{name:"过程",count:1}]}function Kr(e){return((e==null?void 0:e.lines)||[]).flatMap((n,c)=>{var p;const u=String(((p=n==null?void 0:n.toolDisplay)==null?void 0:p.purpose)||"").trim();return u?[{id:`${n.id}:purpose:${c}`,text:u,live:(n==null?void 0:n.live)===!0}]:[]})}let Ki;function Vi(e,n){Pt(e)&&(Ki=document.activeElement,o.toolDetailLineId=e.id,document.body.classList.add("tool-detail-open"),Ye(()=>{var c;return(c=document.querySelector(".tool-result-modal-close"))==null?void 0:c.focus()}))}function Ku(e){return hn(kn.parse(String(e??"")))}function fn(){o.toolDetailLineId=void 0,document.body.classList.remove("tool-detail-open");const e=Ki;Ye(()=>{e!=null&&e.isConnected&&e.focus()})}function Vu(e){if(e.key!=="Tab")return;const n=Array.from(e.currentTarget.querySelectorAll('button:not(:disabled), [tabindex="0"]')),c=n[0],u=n.at(-1);e.shiftKey&&document.activeElement===c?(e.preventDefault(),u==null||u.focus()):!e.shiftKey&&document.activeElement===u&&(e.preventDefault(),c==null||c.focus())}function Zi(e){var u;const n=e.target instanceof HTMLImageElement?e.target:null;if(!n||n.closest(".image-preview-modal"))return;const c=((u=n.closest("[data-preview-src]"))==null?void 0:u.dataset.previewSrc)||n.currentSrc||n.src;c&&(e.preventDefault(),e.stopPropagation(),Zu(c,n.alt))}async function Qi(e){const n=e.target instanceof Element?e.target.closest('a[data-resource-download="true"]'):null;if(!(n instanceof HTMLAnchorElement))return;if(e.preventDefault(),e.stopPropagation(),as()){try{await Mg(n.href,{fetch:ye})}catch(u){J(u instanceof Error?u.message:String(u||"无法打开所在文件夹"))}return}const c=Number(n.dataset.resourceExpiresAt);if(Number.isFinite(c)&&c>0&&Date.now()>=c){J("下载链接已过期,请重新生成");return}try{const u=await ye(n.href);if(!u.ok){J(u.status===404||u.status===410?"下载链接已过期,请重新生成":`下载失败(${u.status})`);return}const p=URL.createObjectURL(await u.blob()),v=document.createElement("a");v.href=p,v.download=n.download||"download",document.body.appendChild(v),v.click(),v.remove(),setTimeout(()=>URL.revokeObjectURL(p),3e4)}catch{J("下载失败,请稍后重试")}}function Zu(e,n=""){o.imagePreview={src:String(e||""),caption:String(n||"").trim()},document.body.classList.add("image-preview-open")}function Vr(){o.imagePreview=void 0,document.body.classList.remove("image-preview-open")}function $t(e){return nm(e)}function Yi(e){return Yu(e).summary}function Xi(e){var n;return(((n=e==null?void 0:e.toolDisplay)==null?void 0:n.previews)||[]).filter(c=>c.content!==void 0&&c.content!==null&&String(c.content).trim()!=="")}function Ot(e){var n;return Array.isArray((n=e==null?void 0:e.toolStream)==null?void 0:n.steps)?e.toolStream.steps:[]}function Dt(e){return Yt(e)==="subagent_run"}function Fs(e){return["file_write","file_edit","write_file","edit_file"].includes(Yt(e).toLowerCase())}function Zr(e){const n=Yt(e).toLowerCase();return n==="terminal_run"||n==="terminal_control"}function Ji(e){var n;return Array.isArray((n=e==null?void 0:e.toolDisplay)==null?void 0:n.previews)&&e.toolDisplay.previews.length>0&&(!Yt(e).startsWith("subagent_")||Yt(e)==="subagent_message")&&!(Zr(e)&&(e==null?void 0:e.live)===!0&&Qu(e))}function Gn(e){var v,T,O,G;const n=Array.isArray((v=e==null?void 0:e.toolStream)==null?void 0:v.chunks)?e.toolStream.chunks:[];if(n.length)return n.map(B=>String((B==null?void 0:B.text)||"")).join("").trimEnd();const c=String(((T=e==null?void 0:e.toolStream)==null?void 0:T.stdout)||""),u=String(((O=e==null?void 0:e.toolStream)==null?void 0:O.stderr)||""),p=String(((G=e==null?void 0:e.toolStream)==null?void 0:G.output)||"");return[c,u,p].filter(Boolean).join(`
|
|
96
96
|
`).trimEnd()}function qn(e){var u,p,v;const n=String(((u=e==null?void 0:e.toolStream)==null?void 0:u.message)||"").trim(),c=String(((p=e==null?void 0:e.toolDisplay)==null?void 0:p.purpose)||((v=e==null?void 0:e.toolDisplay)==null?void 0:v.subject)||"").trim();return n&&n!==c?n:""}function ea(e){return Ot(e).map(n=>`${(n==null?void 0:n.status)==="completed"?"✓":(n==null?void 0:n.status)==="failed"?"×":"•"} ${String((n==null?void 0:n.message)||"").trim()}${(n==null?void 0:n.status)==="unknown"||!(e!=null&&e.live)&&(n==null?void 0:n.status)==="running"?"(阶段结果未提供)":""}`.trimEnd()).join(`
|
|
97
97
|
`)}function Hs(e){const n=new Map;for(const c of Ot(e)){const u=String((c==null?void 0:c.toolName)||"").trim();if(!u)continue;const p=n.get(u);n.set(u,{label:(p==null?void 0:p.label)||String((c==null?void 0:c.toolLabel)||u),count:((p==null?void 0:p.count)||0)+1})}return[...n.entries()].map(([c,u])=>({name:c,label:u.label,count:u.count}))}function ta(e){return Ot(e).flatMap((n,c)=>{const u=String((n==null?void 0:n.message)||"").trim();return u?[{key:`${n.key}:${c}`,purpose:u}]:[]})}function js(e){return o.expandedToolGroups[`agent:${e==null?void 0:e.id}`]===!0}function na(e,n){return Ua(n,()=>{const c=`agent:${e==null?void 0:e.id}`;o.expandedToolGroups[c]=!o.expandedToolGroups[c]})}function Qu(e){return!!(qn(e)||Ot(e).length||Gn(e))}function Gs(e){var p,v,T;const n=Number((p=e==null?void 0:e.toolStream)==null?void 0:p.current),c=Number((v=e==null?void 0:e.toolStream)==null?void 0:v.total);if(!Number.isFinite(n))return"";const u=String(((T=e==null?void 0:e.toolStream)==null?void 0:T.unit)||"").trim();return Number.isFinite(c)&&c>0?`${n}/${c}${u?` ${u}`:""}`:`${n}${u?` ${u}`:""}`}function Yu(e){const n=(e==null?void 0:e.live)===!0,c=(e==null?void 0:e.titleStatus)==="failure"||(e==null?void 0:e.kind)==="error",u=n?{key:"running",label:"运行中"}:c?{key:"failed",label:"失败"}:{key:"completed",label:"成功"},p=e!=null&&e.toolDisplay&&typeof e.toolDisplay=="object"?e.toolDisplay:void 0,v=String((p==null?void 0:p.purpose)||(p==null?void 0:p.subject)||(e==null?void 0:e.bodyTitle)||"").trim();return{status:u,summary:v}}function Xu(e,n){const c=String(e||"").replace(/\s+/g," ").trim();return c.length>n?`${c.slice(0,n)}…`:c}function lt(e){return(e==null?void 0:e.kind)==="tool"&&String((e==null?void 0:e.toolName)||"").toLowerCase()==="image_create"}function Ju(e){return(e==null?void 0:e.live)&<(e)}function sa(e){return lt(e)&&(e==null?void 0:e.pendingReplacement)===!0}function ed(e){var c,u;if(sr(e)&&!lt(e)||((c=e==null?void 0:e.toolPresentation)==null?void 0:c.visibility)==="hidden"&&(e==null?void 0:e.kind)!=="error")return!0;if((e==null?void 0:e.kind)!=="user")return!1;const n=Aa(e);return Jd(n)?String((u=eg(n))==null?void 0:u.id)!==String(e==null?void 0:e.id):!Zt(e)&&er(e).length===0&&Js(e==null?void 0:e.text).length===0}function ra(e){const n=performance.now();o.coreToolTimings=Sl(e==null?void 0:e.toolTimings,n),o.coreQueryTiming=Sl(e!=null&&e.queryTiming?[e.queryTiming]:[],n)[0],o.timingTick=n}function St(e){if(!(e!=null&&e.toolUseId))return"";const n=o.coreToolTimings.find(u=>{var p;return u.id===((p=e.timing)==null?void 0:p.id)})??e.timing;if((n==null?void 0:n.status)==="queued")return"排队中";const c=No(n,o.timingTick,o.connected);return c===void 0?"":At(c)}function Qr(){var n,c,u,p,v,T,O,G,B;const e=(c=(n=o.status)==null?void 0:n.metrics)==null?void 0:c.contextUsageRatio;Yr("context",e===void 0?0:e*100),Yr("inputTokens",Number(((p=(u=o.status)==null?void 0:u.usage)==null?void 0:p.inputTokens)??((T=(v=o.status)==null?void 0:v.metrics)==null?void 0:T.estimatedInputTokens)??0)),Yr("outputTokens",Number(((G=(O=o.status)==null?void 0:O.usage)==null?void 0:G.outputTokens)??((B=o.status)==null?void 0:B.streamedOutputTokens)??0))}function Yr(e,n){const c=o.composerMetrics[e],u=Number.isFinite(n)?Math.max(0,n):0;if(!c.initialized){c.display=u,c.target=u,c.initialized=!0;return}Math.abs(c.target-u)<.001||(c.target=u,c.bump+=1,td())}function td(){if(ht)return;const e=()=>{let n=!1;for(const c of Object.values(o.composerMetrics)){const u=c.target-c.display;if(Math.abs(u)<.01){c.display=c.target;continue}const p=Math.min(.42,Math.max(.14,Math.abs(u)>1e3?.32:.2)),v=Math.sin(Date.now()/90)*Math.min(Math.abs(u)*.018,c.target*.006+1);c.display+=u*p+v,c.display<0&&(c.display=0),n=!0}n?ht=requestAnimationFrame(e):ht=0};ht=requestAnimationFrame(e)}function Xr(e){return`bump-${o.composerMetrics[e].bump%2}`}function nd(e=[]){return new Map(e.map(n=>[String(n.taskId||n.agentId||n.description||n.type),n.status]))}function Xt(e){var c;const n=String((e==null?void 0:e.taskId)||(e==null?void 0:e.agentId)||(e==null?void 0:e.sessionId)||"");return(e==null?void 0:e.kind)==="terminal"?`${e.ownerSessionId||((c=o.session)==null?void 0:c.sessionId)||""}:${n}`:n}function qs(e){return String((e==null?void 0:e.description)||(e==null?void 0:e.command)||(e==null?void 0:e.type)||"后台任务").replace(/\s+/g," ").trim()||"后台任务"}function Ws(e){const n=qs(e);return n.length>72?`${n.slice(0,72)}…`:n}function oa(e){if((e==null?void 0:e.kind)==="terminal")return e.status!=="running"?Number.isFinite(e.durationMs)&&e.durationMs>=0?At(e.durationMs):"":Number.isFinite(e.createdAt)&&e.createdAt<=o.clockTick?At(o.clockTick-e.createdAt):"";if((e==null?void 0:e.kind)==="agent"){const p=tm(e,o.clockTick);return p===void 0?"":At(p)}const n=e==null?void 0:e.createdAt,c=Number(n),u=Number.isFinite(c)&&c>0?c:Date.parse(String(n||""));return!Number.isFinite(u)||u<=0?"":At((e!=null&&e.completedAt?Date.parse(e.completedAt):o.clockTick)-u)}function ia(e){return String((e==null?void 0:e.prompt)||(e==null?void 0:e.command)||"").trim()}function Jr(e){o.backgroundTaskDetail={...e},document.body.classList.add("tool-detail-open")}function Ks(){o.backgroundTaskDetail=void 0,document.body.classList.remove("tool-detail-open")}function sd(e="ready"){return{ready:"就绪",running:"运行中",preparing:"准备中",calling_model:"调用模型",thinking:"推理中",running_tools:"调用工具",injecting_context:"注入上下文",compacting:"压缩上下文",stopped:"已停止",error:"出错"}[e]||e}function eo(e){return{pending:"排队中",running:"运行中",completed:"已完成",failed:"失败",killed:"已停止",stopped:"已停止",exited:"已退出",lost:"已失联",unknown:"未提供"}[e]||(e?"未知状态":"未提供")}function to(e){return f[e]||e}function rd(e){return(e||[]).map(n=>({value:n,label:h[n]||n}))}function od(e){return((e==null?void 0:e.options)||[]).map(n=>({value:n,label:n||"默认"}))}function id(e){return!["ansi","plain","diff"].includes(e.format)&&(qr(e)||["assistant","thinking","system","tool"].includes(e.kind))}function ad(e){return JSON.stringify((e==null?void 0:e.inputSchema)||{},null,2)}function no(e){Ge.isolation&&e==="prompt"||(o.runtimeContextModal=e,o.runtimeContextDetail=void 0,document.body.classList.add("runtime-context-open"),e==="plugins"&&Ur(),e==="tools"&&Ts())}function so(){o.runtimeContextDetail=void 0,o.runtimeContextModal="",document.body.classList.remove("runtime-context-open")}function ro(){o.runtimeContextDetail=void 0}function ld(){o.projectContextOpen=!0,o.projectContextDocument=void 0,document.body.classList.add("runtime-context-open")}function cd(e){o.projectContextDocument=e}function oo(){if(o.projectContextDocument){o.projectContextDocument=void 0;return}o.projectContextOpen=!1,document.body.classList.remove("runtime-context-open")}async function ud(){o.cwdPicker.open=!0,o.cwdPicker.input=o.cwd||"",o.cwdPicker.selectionExplicit=!1,o.cwdPicker.error="",document.body.classList.add("cwd-picker-lock"),await Zs(o.cwd)}function Vs(){o.cwdPicker.mutating||(o.cwdPicker.open=!1,o.cwdPicker.error="",document.body.classList.remove("cwd-picker-lock"))}async function Zs(e=o.cwdPicker.input){o.cwdPicker.loading=!0,o.cwdPicker.error="";try{const n=new URL("/api/cwd",window.location.origin);String(e||"").trim()&&n.searchParams.set("path",String(e).trim());const c=await ye(z(`${n.pathname}${n.search}`)),u=await c.json().catch(()=>({}));if(!c.ok||u!=null&&u.error||(u==null?void 0:u.ok)===!1)throw xt(u,c.status);io(u)}catch(n){o.cwdPicker.error=tt(n,"无法打开路径")}finally{o.cwdPicker.loading=!1}}function dd(e){return String(e||"").replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean).at(-1)||String(e||"")}function io(e){const n=String(e.cwd||""),c={name:dd(n),path:n};o.cwdPicker.cwd=n,o.cwdPicker.parent=e.parent||"",o.cwdPicker.home=e.home||"",o.cwdPicker.locations=Array.isArray(e.locations)?e.locations:o.cwdPicker.locations,o.cwdPicker.entries=Array.isArray(e.entries)?e.entries:[],o.cwdPicker.input=n,o.cwdPicker.selectedPath=e.fallback?"":n,o.cwdPicker.selectionExplicit=!1,o.cwdPicker.treeRoots=[c],o.cwdPicker.treeChildren={[n]:o.cwdPicker.entries},o.cwdPicker.treeExpanded={[n]:!0}}async function gd(e){const n=new URL("/api/cwd",window.location.origin);n.searchParams.set("path",e);const c=await ye(z(`${n.pathname}${n.search}`)),u=await c.json().catch(()=>({}));if(!c.ok||u!=null&&u.error||(u==null?void 0:u.ok)===!1)throw xt(u,c.status);return Array.isArray(u.locations)&&(o.cwdPicker.locations=u.locations),u}async function fd(e){const n=e.path;if(o.cwdPicker.treeExpanded[n]){o.cwdPicker.treeExpanded={...o.cwdPicker.treeExpanded,[n]:!1};return}o.cwdPicker.error="";try{if(!o.cwdPicker.treeChildren[n]){const c=await gd(n);o.cwdPicker.treeChildren={...o.cwdPicker.treeChildren,[n]:c.entries||[]}}o.cwdPicker.treeExpanded={...o.cwdPicker.treeExpanded,[n]:!0}}catch(c){o.cwdPicker.error=tt(c,"无法展开路径")}}function pd(e){o.cwdPicker.selectedPath=e.path,o.cwdPicker.selectionExplicit=!0,o.cwdPicker.input=e.path}async function hd(){const e=String(o.cwdPicker.input||"").trim();if(e){o.cwdPicker.mutating=!0,o.cwdPicker.error="";try{const n=await Ie("/api/cwd/create",{path:e});io(n)}catch(n){o.cwdPicker.error=tt(n,"新建失败")}finally{o.cwdPicker.mutating=!1}}}async function md(e){if(await Un({title:"删除文件夹?",message:e.path,confirmLabel:"删除",tone:"danger"})){o.cwdPicker.mutating=!0;try{const c=await Ie("/api/cwd/delete",{path:e.path});io(c)}catch(c){o.cwdPicker.error=tt(c,"删除失败")}finally{o.cwdPicker.mutating=!1}}}async function bd(){const e=String(o.cwdPicker.selectionExplicit?o.cwdPicker.selectedPath:o.cwdPicker.input).trim();if(e&&!(!o.cwdPicker.selectionExplicit&&e===o.cwdPicker.cwd&&e!==o.cwd)){o.cwdPicker.mutating=!0,o.cwdPicker.error="";try{const n=await Ie("/api/cwd/change",{path:e});o.cwd=n.cwd||e,o.cwdPicker.open=!1,document.body.classList.remove("cwd-picker-lock"),await $n(),J(n.unchanged?"工作目录未变":"工作目录已切换")}catch(n){o.cwdPicker.error=tt(n,"切换失败")}finally{o.cwdPicker.mutating=!1}}}function kd(e){e&&(o.runtimeContextDetail={kind:"tool",title:e.name,meta:e.strict?"严格模式":"兼容模式",description:e.description||"",schema:ad(e)})}function Qs(e){if(Fn(e))return vd(e);if(Pt(e))return go(e);if(pn(e).length)return ma(e);if(xd(e))return Id(e);if(Sd(e))return Ed(e);const n=Zt(e),c=ba(e),u=c.map(O=>`${O.kind}:${O.reference||""}:${O.url}:${O.label||O.downloadName||""}:${O.expiresAt||""}`).join("|"),p=[e.id,e.kind,e.format,e.title,e.titleStatus,e.live?"1":"0",u,n].join(""),v=qt.get(p);if(v!==void 0)return v;let T;return e.format==="diff"?T=ua(n):e.format==="ansi"||!id(e)?T=za(Ae(or(n))):T=Rd(hn(kn.parse(n||""),c.map(ka)),c),qt.set(p,T),T}function yd(e){if(!e)return"";if(lt(e))return Ud(e);const n=Zt(e);if(e.format==="diff"||/(?:^|\n)---\s+.+\n\+\+\+\s+/.test(n))return ua(n);if(e.format==="ansi")return`<pre class="tool-detail-pre">${Ae(or(n))}</pre>`;const c=uo(n);if(c){const u=JSON.stringify(c,null,2);return hn(kn.parse(`\`\`\`json
|
|
98
98
|
${u}
|
|
@@ -101,5 +101,5 @@ ${u}
|
|
|
101
101
|
|
|
102
102
|
${c}`:c}function Vd(e){return String(e).replace(/\s*\[img#\d+\]\s*/g," ").replace(/[ \t]{2,}/g," ").trim()}function Zd(e){return String(e).replace(Z0,"").replace(Q0,"").replace(Y0,"").replace(/[ \t]{2,}/g," ").trim()}function Qd(e){return String(e||"").replace(new RegExp(`${Wn(X0)}[\\s\\S]*?${Wn(J0)}`,"g"),"").replace(/[ \t]{2,}/g," ").replace(/\n{3,}/g,`
|
|
103
103
|
|
|
104
|
-
`).trim()}function Js(e){return Array.from(new Set(String(e||"").match(/\[img#\d+\]/g)||[]))}function Ta(e){var u;const n=String(((u=o.session)==null?void 0:u.sessionId)||I||""),c=e.filter(p=>(p==null?void 0:p.kind)==="image"&&p.imageId&&p.previewUrl).map(p=>({sessionId:n,imageId:p.imageId,label:p.label,mimeType:p.mimeType,previewUrl:p.previewUrl,originalUrl:p.previewUrl,name:p.name,available:!0,pending:!0}));Ia(c)}function Yd(e){const n=[];for(const c of e||[])tr(c,n);Ia(n.map(po).filter(Boolean))}function mn(e){var c;const n=String((e==null?void 0:e.sessionId)||((c=o.session)==null?void 0:c.sessionId)||I||"");return e!=null&&e.imageId?`${n}:image:${e.imageId}`:e!=null&&e.messageId&&Number.isInteger(Number(e==null?void 0:e.blockIndex))?`${n}:block:${e.messageId}:${Number(e.blockIndex)}`:""}function Ia(e){if(!e.length)return;const n=e.map(u=>{var p;return{...u,sessionId:String(u.sessionId||((p=o.session)==null?void 0:p.sessionId)||I||"")}}),c=new Set(n.map(mn).filter(Boolean));o.messageImagePreviews=[...o.messageImagePreviews.filter(u=>{const p=mn(u);return!p||!c.has(p)}),...n].slice(-200)}function Jt(e){var u;if(lt(e))return Xd(e);const n=(e==null?void 0:e.kind)==="user"?Aa(e):[e],c=[];for(const p of n){c.push(...er(p));for(const v of Js(p==null?void 0:p.text)){const T=String(((u=o.session)==null?void 0:u.sessionId)||I||""),O=o.messageImagePreviews.filter(B=>B.sessionId===T&&B.label===v),G=String((p==null?void 0:p.messageId)||"").startsWith("web-user-")?[...O].reverse().find(B=>B.pending):O.length===1?O[0]:void 0;G&&c.push(G)}}return ho(c)}function Xd(e){const n=[];tr(e,n);for(const c of tg(e))tr(c,n);return ho(n.map(po).filter(Boolean))}function er(e){const n=[];return tr(e,n),ho(n.map(c=>po(c)).filter(Boolean))}function Aa(e){if((e==null?void 0:e.kind)!=="user")return[e];const n=String((e==null?void 0:e.messageId)||"");return n?(o.lines||[]).filter(u=>(u==null?void 0:u.kind)==="user"&&String((u==null?void 0:u.messageId)||"")===n):[e]}function Jd(e){return e.some(n=>er(n).length>0||Js(n==null?void 0:n.text).length>0)}function eg(e){return e.find(n=>Zt(n))||e.find(n=>er(n).length>0||Js(n==null?void 0:n.text).length>0)||e[0]}function tg(e){const n=o.lines||[],c=String((e==null?void 0:e.toolUseId)||"");if(c)return n.filter(v=>sr(v)&&String((v==null?void 0:v.parentToolUseId)||"")===c);const u=n.findIndex(v=>(v==null?void 0:v.id)===(e==null?void 0:e.id));if(u<0)return[];const p=[];for(let v=u+1;v<n.length;v+=1){const T=n[v];if(sr(T)&&!lt(T)){p.push(T);continue}if((T==null?void 0:T.kind)==="tool"||(T==null?void 0:T.kind)==="user"||(T==null?void 0:T.kind)==="assistant"&&String((T==null?void 0:T.text)||"").trim())break}return p}function tr(e,n){if(!e||typeof e!="object")return;const c=p=>{var v;return n.push({...p,messageId:p.messageId||e.messageId,sessionId:p.sessionId||((v=o.session)==null?void 0:v.sessionId)||I||""})},u=[e.images,e.imageAttachments,e.attachments,e.thumbnails];for(const p of u)if(Array.isArray(p))for(const v of p)!v||v.kind&&v.kind!=="image"||v.type&&v.type!=="image"||c(v);if(Array.isArray(e.blocks))for(const p of e.blocks)(p==null?void 0:p.type)==="image"&&c(p);e.image&&c(e.image)}function po(e){var v,T,O,G,B;if(!e||typeof e!="object")return;const n=e.mimeType||((v=e.thumbnail)==null?void 0:v.mimeType)||((T=e.original)==null?void 0:T.mimeType)||"image/png",c=e.thumbnailSrc||((O=e.thumbnail)==null?void 0:O.src)||e.previewUrl||e.src||e.originalSrc||((G=e.original)==null?void 0:G.src)||e.originalUrl||nr(e.data,n);if(!c&&e.available!==!1)return;const u=c?wo(c):"",p=$o(e,nr(e.data,n))||e.src||e.previewUrl||c;return{sessionId:String(e.sessionId||((B=o.session)==null?void 0:B.sessionId)||I||""),messageId:e.messageId,blockIndex:Number.isInteger(Number(e.blockIndex??e.index))?Number(e.blockIndex??e.index):void 0,imageId:e.imageId,label:e.label,mimeType:n,available:e.available!==!1&&!!u,error:e.error,previewUrl:u,originalUrl:p?wo(p):"",originalDecodeUrl:$o(e,nr(e.data,n))?wo($o(e,nr(e.data,n))):"",name:e.name||e.filename||e.label,sizeBytes:e.sizeBytes,pending:e.pending===!0}}function nr(e,n){return!e||typeof e!="string"?"":e.startsWith("data:")?e:`data:${n};base64,${e}`}function ho(e){const n=new Set,c=[];for(const[u,p]of e.entries()){const v=mn(p)||(p.previewUrl?`url:${p.previewUrl}`:`position:${p.messageId||"unknown"}:${p.blockIndex??u}`);n.has(v)||(n.add(v),c.push(p))}return c}function en(e,n){return(e==null?void 0:e.label)||(e!=null&&e.name&&!/^\[img#\d+\]$/.test(e.name)?e.name:`图片 ${n+1}`)}function Ca(e,n){const c=ng(e==null?void 0:e.mimeType),u=((e==null?void 0:e.name)||(e==null?void 0:e.label)||`image-${n+1}`).replace(/[^\p{L}\p{N}._-]+/gu,"-").replace(/^-+|-+$/g,"")||`image-${n+1}`;return/\.[a-z0-9]{2,5}$/i.test(u)?u:`${u}.${c}`}function ng(e){const n=String(e||"").toLowerCase();return n.includes("jpeg")?"jpg":n.includes("webp")?"webp":n.includes("gif")?"gif":"png"}function sr(e){return(e==null?void 0:e.kind)==="tool"&&String((e==null?void 0:e.parentToolName)||"").toLowerCase()==="image_create"}function sg(e){return sr(e)&&Jt(e).length>0}function Ma(e){o.attachments=o.attachments.filter(n=>n.label!==e)}function Ra(){return o.attachments.filter(e=>e.kind==="file")}function Na(){return o.attachments.filter(e=>e.kind==="image")}function rg(e,n){return(e==null?void 0:e.name)||`附件 ${n+1}`}function og(e){return`${e!=null&&e.localReference?"
|
|
104
|
+
`).trim()}function Js(e){return Array.from(new Set(String(e||"").match(/\[img#\d+\]/g)||[]))}function Ta(e){var u;const n=String(((u=o.session)==null?void 0:u.sessionId)||I||""),c=e.filter(p=>(p==null?void 0:p.kind)==="image"&&p.imageId&&p.previewUrl).map(p=>({sessionId:n,imageId:p.imageId,label:p.label,mimeType:p.mimeType,previewUrl:p.previewUrl,originalUrl:p.previewUrl,name:p.name,available:!0,pending:!0}));Ia(c)}function Yd(e){const n=[];for(const c of e||[])tr(c,n);Ia(n.map(po).filter(Boolean))}function mn(e){var c;const n=String((e==null?void 0:e.sessionId)||((c=o.session)==null?void 0:c.sessionId)||I||"");return e!=null&&e.imageId?`${n}:image:${e.imageId}`:e!=null&&e.messageId&&Number.isInteger(Number(e==null?void 0:e.blockIndex))?`${n}:block:${e.messageId}:${Number(e.blockIndex)}`:""}function Ia(e){if(!e.length)return;const n=e.map(u=>{var p;return{...u,sessionId:String(u.sessionId||((p=o.session)==null?void 0:p.sessionId)||I||"")}}),c=new Set(n.map(mn).filter(Boolean));o.messageImagePreviews=[...o.messageImagePreviews.filter(u=>{const p=mn(u);return!p||!c.has(p)}),...n].slice(-200)}function Jt(e){var u;if(lt(e))return Xd(e);const n=(e==null?void 0:e.kind)==="user"?Aa(e):[e],c=[];for(const p of n){c.push(...er(p));for(const v of Js(p==null?void 0:p.text)){const T=String(((u=o.session)==null?void 0:u.sessionId)||I||""),O=o.messageImagePreviews.filter(B=>B.sessionId===T&&B.label===v),G=String((p==null?void 0:p.messageId)||"").startsWith("web-user-")?[...O].reverse().find(B=>B.pending):O.length===1?O[0]:void 0;G&&c.push(G)}}return ho(c)}function Xd(e){const n=[];tr(e,n);for(const c of tg(e))tr(c,n);return ho(n.map(po).filter(Boolean))}function er(e){const n=[];return tr(e,n),ho(n.map(c=>po(c)).filter(Boolean))}function Aa(e){if((e==null?void 0:e.kind)!=="user")return[e];const n=String((e==null?void 0:e.messageId)||"");return n?(o.lines||[]).filter(u=>(u==null?void 0:u.kind)==="user"&&String((u==null?void 0:u.messageId)||"")===n):[e]}function Jd(e){return e.some(n=>er(n).length>0||Js(n==null?void 0:n.text).length>0)}function eg(e){return e.find(n=>Zt(n))||e.find(n=>er(n).length>0||Js(n==null?void 0:n.text).length>0)||e[0]}function tg(e){const n=o.lines||[],c=String((e==null?void 0:e.toolUseId)||"");if(c)return n.filter(v=>sr(v)&&String((v==null?void 0:v.parentToolUseId)||"")===c);const u=n.findIndex(v=>(v==null?void 0:v.id)===(e==null?void 0:e.id));if(u<0)return[];const p=[];for(let v=u+1;v<n.length;v+=1){const T=n[v];if(sr(T)&&!lt(T)){p.push(T);continue}if((T==null?void 0:T.kind)==="tool"||(T==null?void 0:T.kind)==="user"||(T==null?void 0:T.kind)==="assistant"&&String((T==null?void 0:T.text)||"").trim())break}return p}function tr(e,n){if(!e||typeof e!="object")return;const c=p=>{var v;return n.push({...p,messageId:p.messageId||e.messageId,sessionId:p.sessionId||((v=o.session)==null?void 0:v.sessionId)||I||""})},u=[e.images,e.imageAttachments,e.attachments,e.thumbnails];for(const p of u)if(Array.isArray(p))for(const v of p)!v||v.kind&&v.kind!=="image"||v.type&&v.type!=="image"||c(v);if(Array.isArray(e.blocks))for(const p of e.blocks)(p==null?void 0:p.type)==="image"&&c(p);e.image&&c(e.image)}function po(e){var v,T,O,G,B;if(!e||typeof e!="object")return;const n=e.mimeType||((v=e.thumbnail)==null?void 0:v.mimeType)||((T=e.original)==null?void 0:T.mimeType)||"image/png",c=e.thumbnailSrc||((O=e.thumbnail)==null?void 0:O.src)||e.previewUrl||e.src||e.originalSrc||((G=e.original)==null?void 0:G.src)||e.originalUrl||nr(e.data,n);if(!c&&e.available!==!1)return;const u=c?wo(c):"",p=$o(e,nr(e.data,n))||e.src||e.previewUrl||c;return{sessionId:String(e.sessionId||((B=o.session)==null?void 0:B.sessionId)||I||""),messageId:e.messageId,blockIndex:Number.isInteger(Number(e.blockIndex??e.index))?Number(e.blockIndex??e.index):void 0,imageId:e.imageId,label:e.label,mimeType:n,available:e.available!==!1&&!!u,error:e.error,previewUrl:u,originalUrl:p?wo(p):"",originalDecodeUrl:$o(e,nr(e.data,n))?wo($o(e,nr(e.data,n))):"",name:e.name||e.filename||e.label,sizeBytes:e.sizeBytes,pending:e.pending===!0}}function nr(e,n){return!e||typeof e!="string"?"":e.startsWith("data:")?e:`data:${n};base64,${e}`}function ho(e){const n=new Set,c=[];for(const[u,p]of e.entries()){const v=mn(p)||(p.previewUrl?`url:${p.previewUrl}`:`position:${p.messageId||"unknown"}:${p.blockIndex??u}`);n.has(v)||(n.add(v),c.push(p))}return c}function en(e,n){return(e==null?void 0:e.label)||(e!=null&&e.name&&!/^\[img#\d+\]$/.test(e.name)?e.name:`图片 ${n+1}`)}function Ca(e,n){const c=ng(e==null?void 0:e.mimeType),u=((e==null?void 0:e.name)||(e==null?void 0:e.label)||`image-${n+1}`).replace(/[^\p{L}\p{N}._-]+/gu,"-").replace(/^-+|-+$/g,"")||`image-${n+1}`;return/\.[a-z0-9]{2,5}$/i.test(u)?u:`${u}.${c}`}function ng(e){const n=String(e||"").toLowerCase();return n.includes("jpeg")?"jpg":n.includes("webp")?"webp":n.includes("gif")?"gif":"png"}function sr(e){return(e==null?void 0:e.kind)==="tool"&&String((e==null?void 0:e.parentToolName)||"").toLowerCase()==="image_create"}function sg(e){return sr(e)&&Jt(e).length>0}function Ma(e){o.attachments=o.attachments.filter(n=>n.label!==e)}function Ra(){return o.attachments.filter(e=>e.kind==="file")}function Na(){return o.attachments.filter(e=>e.kind==="image")}function rg(e,n){return(e==null?void 0:e.name)||`附件 ${n+1}`}function og(e){return`${e!=null&&e.localReference?"本地":""}${ig(e)} ${mo(e==null?void 0:e.size)}`}function ig(e){const n=String((e==null?void 0:e.mimeType)||"").toLowerCase();return n?n.includes("pdf")?"PDF":n.includes("spreadsheet")||n.includes("excel")||n.includes("csv")?"表格":n.includes("word")||n.includes("document")?"文档":n.startsWith("text/")?"文本":n.startsWith("image/")?"图片":"文件":"文件"}function mo(e){const n=Number(e||0);return!Number.isFinite(n)||n<=0?"0 B":n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(n<10*1024?1:0).replace(/\.0$/,"")} KB`:n<1024*1024*1024?`${(n/(1024*1024)).toFixed(n<10*1024*1024?1:0).replace(/\.0$/,"")} MB`:`${(n/(1024*1024*1024)).toFixed(1).replace(/\.0$/,"")} GB`}async function La(e,n){const c=await $a(e,n);return ag(c,e.type||"image/png")}async function $a(e,n){return new Promise((c,u)=>{const p=new FileReader;p.onprogress=v=>{v.lengthComputable&&v.total>0&&(n==null||n(v.loaded/v.total))},p.onload=()=>{n==null||n(1),c(String(p.result||""))},p.onabort=()=>u(new Error("文件读取已取消")),p.onerror=()=>u(p.error||new Error("read failed")),p.readAsDataURL(e)})}async function ag(e,n="image/png"){const c=Oa(e,n),u=lg(c.base64),p=await ug(c.dataUrl).catch(()=>{});if(!p){const Ce=bo(c.base64);if(!Ce)throw new Error("图片格式异常,无法读取为有效图片");return{mimeType:c.mimeType,data:Ce,previewUrl:`data:${c.mimeType};base64,${Ce}`,compressionRate:0}}const v=Math.min(1,K0/Math.max(p.naturalWidth||p.width,p.naturalHeight||p.height));let T=Math.max(1,Math.round((p.naturalWidth||p.width)*v)),O=Math.max(1,Math.round((p.naturalHeight||p.height)*v)),G=.88,B;for(let Ce=0;Ce<8&&(B=await dg(p,T,O,"image/jpeg",G),!(B.bytes<=V0||G<=Oo&&Math.max(T,O)<=1280));Ce+=1)G>Oo?G=Math.max(Oo,G-.1):(T=Math.max(1,Math.round(T*.82)),O=Math.max(1,Math.round(O*.82)));const de=bo(B==null?void 0:B.base64);if(!de)throw new Error("图片格式异常,无法转换为有效图片");return{mimeType:B.mimeType,data:de,previewUrl:`data:${B.mimeType};base64,${de}`,compressionRate:cg(u,B.bytes)}}function Oa(e,n){var T;const c=String(e||"").trim(),u=/^data:([^;,]+);base64,([\s\S]*)$/i.exec(c),p=(T=u==null?void 0:u[1])!=null&&T.startsWith("image/")?u[1]:n,v=u?u[2]:c;return{mimeType:p,base64:v,dataUrl:u?c:`data:${p};base64,${v}`}}function lg(e){const n=bo(e);if(!n)return 0;const c=n.endsWith("==")?2:n.endsWith("=")?1:0;return Math.max(0,Math.floor(n.length*.75)-c)}function cg(e,n){return!e||!n||n>=e?0:Math.round((1-n/e)*100)}function Da(e){const n=Math.max(...e);return e.length>1?`图片已压缩,最高压缩率为 ${n}%`:`图片已压缩,压缩率为 ${n}%`}function bo(e){let n=String(e||"").trim().replace(/^data:[^;,]+;base64,/i,"").replace(/\s+/g,"");if(!n)return"";n=n.replace(/-/g,"+").replace(/_/g,"/");const c=n.length%4;if(c&&(n+="=".repeat(4-c)),!/^[A-Za-z0-9+/]*={0,2}$/.test(n))return"";try{return atob(n),n}catch{return""}}function ug(e){return new Promise((n,c)=>{const u=new Image;u.onload=()=>n(u),u.onerror=()=>c(new Error("image decode failed")),u.src=e})}async function dg(e,n,c,u,p){const v=document.createElement("canvas");v.width=n,v.height=c;const T=v.getContext("2d");if(!T)throw new Error("canvas unavailable");T.fillStyle="#fff",T.fillRect(0,0,n,c),T.drawImage(e,0,0,n,c);const O=await new Promise(de=>v.toBlob(de,u,p));if(!O)throw new Error("image encode failed");const G=await $a(O),B=Oa(G,u);return{mimeType:B.mimeType,base64:B.base64,bytes:O.size}}function Pa(){return window.matchMedia("(max-width: 820px)").matches?50:64}function Kn(){const e=F.value;e&&(e.style.height=`${Pa()}px`,e.scrollTop=0)}function gg(){const e=F.value;if(!e)return;e.style.height="auto";const n=window.innerHeight*(window.matchMedia("(max-width: 820px)").matches?.28:.34);e.style.height=`${Math.max(Pa(),Math.min(e.scrollHeight,n))}px`}function fg(e){return String((e==null?void 0:e.id)??"")}function pg(e){const n=Kt.value[e];if(!n)return e_;if(Wr(n))return gn(n)?Math.min(1200,72+n.lines.reduce((u,p)=>u+ko(p),0)):Math.max(72,52+Kr(n).length*28);if(Hn(n))return 74;if(jn(n))return 88;const c=co(n);return c.length?64+c.reduce((u,p)=>u+ha(p),0):lt(n)||hg(n)?Math.max(560,ko(n)):ko(n)}function ko(e){const n=Zt(e),c=Math.max(1,n.split(`
|
|
105
105
|
`).length),u=Math.ceil(n.length/72);return Math.max(72,Math.min(1200,52+Math.max(c,u)*24))}function hg(e){return e!=null&&e.image||[e==null?void 0:e.images,e==null?void 0:e.imageAttachments,e==null?void 0:e.thumbnails].some(n=>Array.isArray(n)&&n.length)||Array.isArray(e==null?void 0:e.attachments)&&e.attachments.some(n=>(n==null?void 0:n.kind)==="image"||(n==null?void 0:n.type)==="image"||String((n==null?void 0:n.mimeType)||"").startsWith("image/"))?!0:Array.isArray(e==null?void 0:e.blocks)&&e.blocks.some(n=>(n==null?void 0:n.type)==="image")}function rr(){const e=j.value,n=re.value;!e||!n||(Nr.value=Math.max(0,n.getBoundingClientRect().top-e.getBoundingClientRect().top+e.scrollTop))}function yo(){var e;if(Rt){Rt.disconnect(),j.value&&Rt.observe(j.value),re.value&&Rt.observe(re.value);for(const n of((e=j.value)==null?void 0:e.children)||[])Rt.observe(n)}}function mg(e){e instanceof Element&&ln.value.measureElement(e)}async function Ua(e,n){var u;const c=(u=e==null?void 0:e.currentTarget)==null?void 0:u.closest(".virtual-message-row");Dr.value++,We.pause();try{n(),await Ye(),c!=null&&c.isConnected&&ln.value.resizeItem(Number(c.dataset.index),c.getBoundingClientRect().height),await Ye()}finally{Dr.value--}}function bg(){ln.value.measure()}function vo(){We.schedule()}function kg(){if(qt.size<300)return;const e=new Set(o.lines.map(n=>n.id));for(const n of qt.keys()){const c=Number(String(n).split("",1)[0]);e.has(c)||qt.delete(n)}qt.size>500&&qt.clear()}function J(e){o.toast=e,clearTimeout(ds),ds=setTimeout(()=>{o.toast=""},3600)}function yg(e){return["running","preparing","calling_model","thinking","running_tools","compacting","injecting_context"].includes(e)}function bn(e){if(e==null||!Number.isFinite(Number(e)))return"—";const n=Math.max(0,Math.round(Number(e)));return n>=1e6?`${Ba(n/1e6)}m`:n>=1e4?`${Math.round(n/1e3)}k`:n>=1e3?`${Ba(n/1e3)}k`:String(n)}function Ba(e){return e>=10?e.toFixed(0):e.toFixed(1).replace(/\.0$/,"")}function or(e){return String(e).replace(/\x1b\[[0-9;]*m/g,"")}function vg(e){try{const n=new URL(e,window.location.href);return["http:","https:","mailto:"].includes(n.protocol)}catch{return!1}}function Ae(e){return String(e).replace(/[&<>"']/g,n=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[n])}function za(e){return e.replace(/(https?:\/\/[^\s<]+)/g,'<a target="_blank" rel="noreferrer noopener" href="$1">$1</a>')}function wo(e){const n=String(e||"");return n.startsWith("/api/images/")?z(n):n}function ir(){var e;(e=we.value)==null||e.removeAttribute("open")}function Fa(e){const n=we.value;n!=null&&n.open&&!e.composedPath().includes(n)&&ir()}function Vn(e){if(Te.value="",ir(),e==="sessions")return Ds();if(e==="users")return Ps();if(e==="prompts")return zr();if(e==="settings")return zn();o.activePanel="chat"}function Ha(){return Te.value="",ir(),Us()}return(e,n)=>{var c,u,p,v,T,O,G,B,de,Ce,Ut;return m(),b(ee,null,[l("div",cm,[l("aside",um,[l("div",dm,[l("button",{class:"theme-toggle celestial-theme-toggle",type:"button","aria-label":xs.value,"aria-pressed":_s.value,title:xs.value,onClick:_a},[...n[42]||(n[42]=[Za('<span class="theme-orbit-scene" aria-hidden="true"><i class="theme-cloud theme-cloud-one"></i><i class="theme-cloud theme-cloud-two"></i><i class="theme-star theme-star-one"></i><i class="theme-star theme-star-two"></i><i class="theme-star theme-star-three"></i><span class="theme-orbit-body"><svg class="theme-sun" viewBox="0 0 28 28"><circle cx="14" cy="14" r="5.2"></circle><path d="M14 2.5v3M14 22.5v3M2.5 14h3M22.5 14h3M5.9 5.9 8 8M20 20l2.1 2.1M22.1 5.9 20 8M8 20l-2.1 2.1"></path></svg><svg class="theme-moon" viewBox="0 0 28 28"><path d="M20.8 18.8A9.2 9.2 0 0 1 9.2 7.2a9.2 9.2 0 1 0 11.6 11.6Z"></path><circle cx="10.2" cy="16.8" r="1"></circle><circle cx="15.4" cy="21" r=".75"></circle></svg></span></span>',1)])],8,gm)]),l("nav",fm,[i.value?C("",!0):(m(),b("button",{key:0,class:Y({active:o.activePanel==="chat"}),onClick:Us},[...n[43]||(n[43]=[l("span",{class:"nav-button-content"},[l("svg",{class:"ui-icon nav-icon",viewBox:"0 0 20 20","aria-hidden":"true"},[l("path",{d:"M10 4v12M4 10h12"})]),l("span",null,"新建会话")],-1)])],2)),l("button",{class:Y({active:o.activePanel==="sessions"}),onClick:Ds},[...n[44]||(n[44]=[l("span",{class:"nav-button-content"},[l("svg",{class:"ui-icon nav-icon",viewBox:"0 0 20 20","aria-hidden":"true"},[l("path",{d:"M5 4.5h10a1.5 1.5 0 0 1 1.5 1.5v8A1.5 1.5 0 0 1 15 15.5H8l-3.5 2v-3.5A1.5 1.5 0 0 1 3 12.5V6A1.5 1.5 0 0 1 4.5 4.5Z"}),l("path",{d:"M6.75 8h6.5M6.75 11h4.5"})]),l("span",null,"会话管理")],-1)])],2),i.value?(m(),b("button",{key:1,class:Y({active:o.activePanel==="users"}),onClick:Ps},[...n[45]||(n[45]=[l("span",{class:"nav-button-content"},[l("svg",{class:"ui-icon nav-icon",viewBox:"0 0 20 20","aria-hidden":"true"},[l("circle",{cx:"7",cy:"7",r:"3"}),l("path",{d:"M2.5 16c.5-3 2-4.5 4.5-4.5s4 1.5 4.5 4.5M13 7h4M15 5v4"})]),l("span",null,"用户管理")],-1)])],2)):C("",!0),a.value?(m(),b("button",{key:2,class:Y({active:o.activePanel==="settings"}),onClick:n[0]||(n[0]=k=>zn())},[...n[46]||(n[46]=[l("span",{class:"nav-button-content"},[l("svg",{class:"ui-icon nav-icon",viewBox:"0 0 20 20","aria-hidden":"true"},[l("path",{d:"M10 3.5v2M10 14.5v2M5.4 5.4l1.4 1.4M13.2 13.2l1.4 1.4M3.5 10h2M14.5 10h2M5.4 14.6l1.4-1.4M13.2 6.8l1.4-1.4"}),l("circle",{cx:"10",cy:"10",r:"2.75"})]),l("span",null,"模型配置")],-1)])],2)):C("",!0)]),l("button",{class:Y(["sidebar-card","session-entry",{working:Lt.value}]),type:"button",onClick:n[1]||(n[1]=k=>o.activePanel="chat"),title:fs.value},[n[47]||(n[47]=l("span",{class:"session-entry-icon","aria-hidden":"true"},[l("i",{class:"session-diamond"})],-1)),l("span",hm,[l("span",{ref_key:"sessionTitleViewport",ref:ps,class:Y(["session-title-line",{marquee:Lr.value}])},[l("strong",{ref_key:"sessionTitleText",ref:ki},S(fs.value),513),Lr.value?(m(),b("strong",mm,S(fs.value),1)):C("",!0)],2)])],10,pm),$e(Ge).isolation?C("",!0):(m(),b("section",bm,[l("div",km,[l("button",{type:"button",class:"mini-button",onClick:n[2]||(n[2]=k=>zr())},"提示词管理")]),l("div",ym,[o.promptLibraryLoading?(m(),b("div",vm,"正在加载…")):o.promptLibrary.length?(m(!0),b(ee,{key:2},ge(o.promptLibrary,k=>{var A;return m(),b("article",{key:k.id,class:Y(["prompt-card",{active:((A=Vt.value)==null?void 0:A.id)===k.id}]),draggable:"true",onDragstart:Ze=>du(Ze,k),onDragend:bu,onDblclick:Ze=>Pn(k)},[l("div",xm,[l("strong",null,S(k.title),1)]),l("div",Sm,[l("button",{type:"button",class:"mini-button",onClick:Ze=>Pn(k)},"应用",8,Em),l("button",{type:"button",class:"mini-button",onClick:Ze=>iu(k)},"编辑",8,Tm)])],42,_m)}),128)):(m(),b("div",wm,"暂无提示词"))])])),$e(Ge).isolation?(m(),b("div",Im,[l("button",{class:"logout-icon-button",type:"button","aria-label":"退出登录",title:`${(c=$e(Ge).user)==null?void 0:c.username} · 退出登录`,onClick:zc},[...n[48]||(n[48]=[l("svg",{class:"ui-icon",viewBox:"0 0 20 20","aria-hidden":"true"},[l("path",{d:"M8 4H4.75A1.75 1.75 0 0 0 3 5.75v8.5A1.75 1.75 0 0 0 4.75 16H8"}),l("path",{d:"M11 6.5 14.5 10 11 13.5M6.5 10h8"})],-1)])],8,Am)])):C("",!0)]),l("main",Cm,[l("header",Mm,[l("div",Rm,[l("details",{ref_key:"mobileMenu",ref:we,class:"mobile-nav-menu"},[n[52]||(n[52]=l("summary",{"aria-label":"打开导航菜单",title:"导航菜单"},[l("svg",{class:"ui-icon",viewBox:"0 0 20 20","aria-hidden":"true"},[l("path",{d:"M4 5.5h12M4 10h12M4 14.5h12"})])],-1)),l("nav",null,[l("button",{type:"button",class:Y({active:o.activePanel==="chat"}),onClick:n[3]||(n[3]=k=>Vn("chat"))},"对话",2),i.value?C("",!0):(m(),b("button",{key:0,type:"button",onClick:Ha},"新建会话")),l("button",{type:"button",class:Y({active:o.activePanel==="sessions"}),onClick:n[4]||(n[4]=k=>Vn("sessions"))},"会话",2),i.value?(m(),b("button",{key:1,type:"button",class:Y({active:o.activePanel==="users"}),onClick:n[5]||(n[5]=k=>Vn("users"))},"用户",2)):C("",!0),$e(Ge).isolation?C("",!0):(m(),b("button",{key:2,type:"button",class:Y({active:o.activePanel==="prompts"}),onClick:n[6]||(n[6]=k=>Vn("prompts"))},"提示词",2)),a.value?(m(),b("button",{key:3,type:"button",class:Y({active:o.activePanel==="settings"}),onClick:n[7]||(n[7]=k=>Vn("settings"))},"模型配置",2)):C("",!0),(m(!0),b(ee,null,ge(De.value,k=>(m(),b("button",{key:k.id,type:"button",onClick:A=>Xe(k.id)},S(k.title),9,Nm))),128)),o.coreVersion?(m(),b("div",{key:4,class:Y(["core-version","mobile-core-version",{celebrating:o.coreEasterEgg}]),role:"button",tabindex:"0",onClick:cn,onKeydown:[ut(ke(cn,["prevent"]),["enter"]),ut(ke(cn,["prevent"]),["space"])]},[n[49]||(n[49]=l("span",{class:"core-version-spark spark-a","aria-hidden":"true"},null,-1)),n[50]||(n[50]=l("span",{class:"core-version-spark spark-b","aria-hidden":"true"},null,-1)),n[51]||(n[51]=l("span",{class:"core-version-spark spark-c","aria-hidden":"true"},null,-1)),l("span",null,"内核版本 "+S(o.coreVersion),1)],42,Lm)):C("",!0)])],512),Tn.value?(m(),b("strong",{key:0,class:"mobile-session-title",title:Tn.value},S(Tn.value),9,$m)):C("",!0),l("button",{class:"ghost mobile-theme-toggle celestial-theme-toggle",type:"button","aria-label":xs.value,"aria-pressed":_s.value,title:xs.value,onClick:_a},[...n[53]||(n[53]=[Za('<span class="theme-orbit-scene" aria-hidden="true"><i class="theme-cloud theme-cloud-one"></i><i class="theme-cloud theme-cloud-two"></i><i class="theme-star theme-star-one"></i><i class="theme-star theme-star-two"></i><i class="theme-star theme-star-three"></i><span class="theme-orbit-body"><svg class="theme-sun" viewBox="0 0 28 28"><circle cx="14" cy="14" r="5.2"></circle><path d="M14 2.5v3M14 22.5v3M2.5 14h3M22.5 14h3M5.9 5.9 8 8M20 20l2.1 2.1M22.1 5.9 20 8M8 20l-2.1 2.1"></path></svg><svg class="theme-moon" viewBox="0 0 28 28"><path d="M20.8 18.8A9.2 9.2 0 0 1 9.2 7.2a9.2 9.2 0 1 0 11.6 11.6Z"></path><circle cx="10.2" cy="16.8" r="1"></circle><circle cx="15.4" cy="21" r=".75"></circle></svg></span></span>',1)])],8,Om),a.value?(m(),b("button",{key:1,class:"ghost desktop-config-button",onClick:n[8]||(n[8]=k=>zn())},"配置模型")):C("",!0),l("button",{class:"primary new-session-button",onClick:Ha},"+ 新建")])]),o.activePanel==="chat"?(m(),b("section",Dm,[l("div",Pm,[l("div",{ref_key:"transcript",ref:j,class:"transcript",tabindex:"0","aria-label":"对话记录"},[o.runtimeContext||o.runtimeContextLoading||o.runtimeContextError?(m(),b("section",Um,[n[57]||(n[57]=l("div",{class:"runtime-context-bar-title"},[l("strong",null,"运行上下文")],-1)),o.runtimeContext?(m(),b("div",Bm,[$e(Ge).isolation?C("",!0):(m(),b("button",{key:0,type:"button",onClick:n[9]||(n[9]=k=>no("prompt"))},[n[54]||(n[54]=l("span",null,"系统提示词",-1)),l("strong",null,S(Dc.value.length),1)])),l("button",{type:"button",onClick:n[10]||(n[10]=k=>no("tools"))},[n[55]||(n[55]=l("span",null,"工具",-1)),l("strong",null,S(Pr.value.length),1)]),l("button",{type:"button",onClick:n[11]||(n[11]=k=>no("plugins"))},[n[56]||(n[56]=l("span",null,"插件",-1)),l("strong",null,S(Pc.value),1)])])):o.runtimeContextError?(m(),b("button",{key:1,type:"button",class:"runtime-context-retry",onClick:$n},"重试")):(m(),b("span",zm,"同步中"))])):C("",!0),Rn.value.length?(m(),b("section",Fm,[n[59]||(n[59]=l("div",{class:"runtime-context-bar-title"},[l("strong",null,"项目上下文")],-1)),l("div",Hm,[l("button",{type:"button",onClick:ld},[n[58]||(n[58]=l("span",null,"文档",-1)),l("strong",null,S(Rn.value.length),1)])])])):C("",!0),l("div",{ref_key:"messageList",ref:re,class:"virtual-message-list",style:ot({height:`${Oc.value}px`})},[(m(!0),b(ee,null,ge($c.value,k=>(m(),b("div",{key:k.key,ref_for:!0,ref:mg,class:"virtual-message-row","data-index":k.index,style:ot({transform:`translateY(${k.start-Nr.value}px)`})},[(m(!0),b(ee,null,ge([Kt.value[k.index]],A=>{var Ze,mt,ja,Ga;return m(),b(ee,{key:A.id},[Wr(A)?(m(),b("article",{key:0,class:Y(["message","tool-group-message",{live:A.live,expanded:gn(A)}])},[l("div",Gm,[l("button",{type:"button",class:"tool-group-trigger","aria-expanded":gn(A),onClick:D=>Wu(A,D)},[l("span",Wm,[(m(!0),b(ee,null,ge(Wi(A),(D,ie)=>(m(),b(ee,{key:D.name},[l("span",Km,S(D.name),1),D.count>1?(m(),b("span",Vm,"×"+S(D.count),1)):C("",!0),ie<Wi(A).length-1?(m(),b("span",Zm,"、")):C("",!0)],64))),128))]),n[60]||(n[60]=l("span",{class:"tool-group-chevron","aria-hidden":"true"},null,-1))],8,qm),!gn(A)&&Kr(A).length?(m(),Fe(Ag,{key:0,name:"tool-purpose",tag:"div",class:"tool-group-purposes"},{default:Ig(()=>[(m(!0),b(ee,null,ge(Kr(A),(D,ie)=>(m(),b("div",{key:D.id,class:Y(["tool-group-purpose",{live:D.live}]),style:ot({"--purpose-index":ie})},[l("span",null,S(D.text),1)],6))),128))]),_:2},1024)):C("",!0),gn(A)?(m(),b("div",Qm,[(m(!0),b(ee,null,ge(A.lines,D=>{var ie,Qe,_o,qa;return m(),b("div",{key:D.id,class:Y(["tool-group-result",`kind-${D.kind||"system"}`])},[D.kind==="thinking"?(m(),b("details",{key:0,class:"reasoning-sheet",open:D.live||void 0},[n[61]||(n[61]=l("summary",null,[l("span",{class:"reasoning-title-mark","aria-hidden":"true"},[l("i"),l("i"),l("i")]),l("span",{class:"reasoning-heading"},"思考")],-1)),l("div",Xm,[l("div",Jm,[l("div",{class:"message-text markdown reasoning-text",innerHTML:Qs(D)},null,8,eb)])])],8,Ym)):Hn(D)?(m(),b("section",{key:1,class:Y(["compaction-context-bar",{current:D.compaction.current}]),role:"button",tabindex:"0","aria-label":"查看压缩上下文",onClick:je=>dn(D),onKeydown:[ut(ke(je=>dn(D),["prevent"]),["enter"]),ut(ke(je=>dn(D),["prevent"]),["space"])]},[n[64]||(n[64]=l("div",{class:"compaction-context-title"},[l("strong",null,"压缩上下文")],-1)),l("div",nb,[l("span",null,[n[62]||(n[62]=l("span",null,"摘要",-1)),l("strong",null,S(bn(String(D.compaction.summary||"").length)),1)]),D.compaction.imageCount?(m(),b("span",sb,[n[63]||(n[63]=l("span",null,"图片",-1)),l("strong",null,S(D.compaction.imageCount),1)])):C("",!0)])],42,tb)):jn(D)?(m(),b("div",{key:2,class:Y(["tool-result-summary",`status-${$t(D).key}`])},[l("div",rb,[(m(),b("svg",{class:Y(["tool-result-diamond",{spinning:D.live}]),viewBox:"0 0 20 20","aria-hidden":"true"},[...n[65]||(n[65]=[l("path",{d:"M10 2.75 17.25 10 10 17.25 2.75 10Z"},null,-1)])],2)),l("strong",ob,S(Qt(D)),1),St(D)?(m(),b("span",ib,S(St(D)),1)):C("",!0),$t(D).key==="failed"?(m(),b("span",ab,"×")):C("",!0)]),l("div",lb,[(ie=D.toolDisplay)!=null&&ie.purpose||(Qe=D.toolDisplay)!=null&&Qe.subject?(m(),b("p",cb,S(((_o=D.toolDisplay)==null?void 0:_o.purpose)||((qa=D.toolDisplay)==null?void 0:qa.subject)),1)):C("",!0),D.toolError?(m(),b("p",ub,S(D.toolError),1)):C("",!0),Dt(D)&&Ot(D).length?(m(),b("div",db,[l("button",{type:"button",class:"tool-group-trigger","aria-expanded":js(D),onClick:je=>na(D,je)},[l("span",fb,[(m(!0),b(ee,null,ge(Hs(D),(je,Zn)=>(m(),b(ee,{key:je.name},[l("span",pb,S(je.label),1),je.count>1?(m(),b("span",hb,"×"+S(je.count),1)):C("",!0),Zn<Hs(D).length-1?(m(),b("span",mb,"、")):C("",!0)],64))),128))]),n[66]||(n[66]=l("span",{class:"tool-group-chevron","aria-hidden":"true"},null,-1))],8,gb),js(D)?(m(),b("div",bb,[(m(!0),b(ee,null,ge(ta(D),(je,Zn)=>(m(),b("div",{key:je.key,class:"tool-group-purpose",style:ot({"--purpose-index":Zn})},[l("span",null,S(je.purpose),1)],4))),128))])):C("",!0)])):!Fs(D)&&qn(D)?(m(),b("p",kb,[Jn(S(qn(D)),1),Gs(D)?(m(),b("span",yb,S(Gs(D)),1)):C("",!0)])):C("",!0),!Fs(D)&&!Dt(D)&&Ot(D).length?(m(),b("div",vb,[l("section",wb,[l("pre",_b,S(ea(D)),1)])])):C("",!0),!Dt(D)&&Gn(D)&&(!Zr(D)||D.live===!0)?(m(),b("div",xb,[l("section",Sb,[l("pre",Eb,S(Gn(D)),1)])])):C("",!0),!Dt(D)&&Ji(D)?(m(),b("div",Tb,[(m(!0),b(ee,null,ge(Xi(D),(je,Zn)=>(m(),b("section",{key:`${je.kind}-${Zn}`,class:Y(["tool-result-preview",`kind-${je.kind}`])},[l("pre",Ib,S(je.content),1)],2))),128))])):C("",!0)])],2)):(m(),b("div",Ab,[Fn(D)?C("",!0):(m(),b("div",Cb,[l("strong",null,S(Qt(D)),1),D.toolName&&$t(D).key==="failed"?(m(),b("span",Mb,"×")):C("",!0)])),l("div",{class:"message-text markdown",innerHTML:Qs(D)},null,8,Rb)]))],2)}),128))])):C("",!0)])],2)):(m(),b("article",{key:1,class:Y(["message",A.kind||"system",{live:A.live,"prompt-usage":qr(A),"context-compaction":Hn(A),"compact-tool":jn(A)}])},[l("div",{class:Y(["message-marker",{spinning:A.live}])},[...n[67]||(n[67]=[l("svg",{class:"message-marker-icon",viewBox:"0 0 20 20","aria-hidden":"true"},[l("path",{d:"M10 2.75 17.25 10 10 17.25 2.75 10Z"})],-1)])],2),Hn(A)?(m(),b("div",Nb,[l("section",{class:Y(["compaction-context-bar",{current:A.compaction.current}]),role:"button",tabindex:"0","aria-label":"查看压缩上下文",onClick:D=>dn(A),onKeydown:[ut(ke(D=>dn(A),["prevent"]),["enter"]),ut(ke(D=>dn(A),["prevent"]),["space"])]},[n[70]||(n[70]=l("div",{class:"compaction-context-title"},[l("strong",null,"压缩上下文")],-1)),l("div",$b,[l("span",null,[n[68]||(n[68]=l("span",null,"摘要",-1)),l("strong",null,S(bn(String(A.compaction.summary||"").length)),1)]),A.compaction.imageCount?(m(),b("span",Ob,[n[69]||(n[69]=l("span",null,"图片",-1)),l("strong",null,S(A.compaction.imageCount),1)])):C("",!0)])],42,Lb)])):A.kind==="thinking"?(m(),b("div",Db,[l("details",{class:"reasoning-sheet",open:A.live||void 0},[l("summary",null,[n[71]||(n[71]=l("span",{class:"reasoning-title-mark","aria-hidden":"true"},[l("i"),l("i"),l("i")],-1)),n[72]||(n[72]=l("span",{class:"reasoning-heading"},"思考",-1)),St(A)?(m(),b("span",Ub,S(St(A)),1)):C("",!0)]),l("div",Bb,[l("div",zb,[l("div",{class:"message-text markdown reasoning-text",innerHTML:Qs(A)},null,8,Fb)])])],8,Pb)])):(m(),b("div",Hb,[!Fn(A)&&(A.kind!=="tool"||pn(A).length)&&!jn(A)?(m(),b("div",jb,[l("strong",null,S(Qt(A)),1),A.toolName&&$t(A).key==="failed"?(m(),b("span",Gb,"×")):C("",!0),!A.toolName&&A.titleStatus?(m(),b("span",qb,S(A.titleStatus),1)):C("",!0),St(A)?(m(),b("span",Wb,S(St(A)),1)):C("",!0)])):C("",!0),lt(A)?(m(),b("div",Kb,[l("div",{class:"message-text markdown image2-stage-wrap",innerHTML:$d(A)},null,8,Vb),(m(!0),b(ee,null,ge([Jt(A)],D=>(m(),b(ee,{key:`${A.id}-image2-images`},[D.length?(m(),b("div",Zb,[(m(!0),b(ee,null,ge(D,(ie,Qe)=>(m(),b("figure",{key:mn(ie)||ie.previewUrl||Qe,class:Y(["message-image-attachment",{"image-unavailable":!ie.available}])},[ie.available&&ie.previewUrl?(m(),b("button",{key:0,type:"button",class:"image-preview-trigger","data-preview-src":$e(st)(ie.originalUrl||ie.previewUrl),"aria-label":`预览 ${en(ie,Qe)}`},[l("img",{src:$e(st)(ie.previewUrl),alt:en(ie,Qe),loading:"lazy",decoding:"async"},null,8,Yb)],8,Qb)):(m(),b("div",Xb,"图片不可用")),l("figcaption",null,S(en(ie,Qe)),1),l("div",Jb,[ie.available&&ie.previewUrl?(m(),b("a",{key:0,class:"image-download",href:$e(st)(ie.originalUrl||ie.previewUrl),download:Ca(ie,Qe)},"下载",8,ek)):C("",!0),Qe===0&&Pt(A)?(m(),b("button",{key:1,type:"button",class:"image2-detail-button",onClick:_o=>Vi(A)},"详情",8,tk)):C("",!0)])],2))),128))])):Pt(A)?(m(),b("button",{key:1,type:"button",class:"image2-detail-button",onClick:ie=>Vi(A)},"详情",8,nk)):C("",!0)],64))),128))])):jn(A)?(m(),b("div",{key:2,class:Y(["tool-result-summary",`status-${$t(A).key}`])},[l("div",sk,[(m(),b("svg",{class:Y(["tool-result-diamond",{spinning:A.live}]),viewBox:"0 0 20 20","aria-hidden":"true"},[...n[73]||(n[73]=[l("path",{d:"M10 2.75 17.25 10 10 17.25 2.75 10Z"},null,-1)])],2)),l("strong",rk,S(Qt(A)),1),St(A)?(m(),b("span",ok,S(St(A)),1)):C("",!0),$t(A).key==="failed"?(m(),b("span",ik,"×")):C("",!0)]),l("div",ak,[(Ze=A.toolDisplay)!=null&&Ze.purpose||(mt=A.toolDisplay)!=null&&mt.subject?(m(),b("p",lk,S(((ja=A.toolDisplay)==null?void 0:ja.purpose)||((Ga=A.toolDisplay)==null?void 0:Ga.subject)),1)):C("",!0),A.toolError?(m(),b("p",ck,S(A.toolError),1)):C("",!0),Dt(A)&&Ot(A).length?(m(),b("div",uk,[l("button",{type:"button",class:"tool-group-trigger","aria-expanded":js(A),onClick:D=>na(A,D)},[l("span",gk,[(m(!0),b(ee,null,ge(Hs(A),(D,ie)=>(m(),b(ee,{key:D.name},[l("span",fk,S(D.label),1),D.count>1?(m(),b("span",pk,"×"+S(D.count),1)):C("",!0),ie<Hs(A).length-1?(m(),b("span",hk,"、")):C("",!0)],64))),128))]),n[74]||(n[74]=l("span",{class:"tool-group-chevron","aria-hidden":"true"},null,-1))],8,dk),js(A)?(m(),b("div",mk,[(m(!0),b(ee,null,ge(ta(A),(D,ie)=>(m(),b("div",{key:D.key,class:"tool-group-purpose",style:ot({"--purpose-index":ie})},[l("span",null,S(D.purpose),1)],4))),128))])):C("",!0)])):!Fs(A)&&qn(A)?(m(),b("p",bk,[Jn(S(qn(A)),1),Gs(A)?(m(),b("span",kk,S(Gs(A)),1)):C("",!0)])):C("",!0),!Fs(A)&&!Dt(A)&&Ot(A).length?(m(),b("div",yk,[l("section",vk,[l("pre",wk,S(ea(A)),1)])])):C("",!0),!Dt(A)&&Gn(A)&&(!Zr(A)||A.live===!0)?(m(),b("div",_k,[l("section",xk,[l("pre",Sk,S(Gn(A)),1)])])):C("",!0),!Dt(A)&&Ji(A)?(m(),b("div",Ek,[(m(!0),b(ee,null,ge(Xi(A),(D,ie)=>(m(),b("section",{key:`${D.kind}-${ie}`,class:Y(["tool-result-preview",`kind-${D.kind}`])},[l("pre",Tk,S(D.content),1)],2))),128))])):C("",!0)])],2)):(m(),b(ee,{key:3},[co(A).length?(m(),b(ee,{key:0},[l("div",Ik,[(m(!0),b(ee,null,ge(co(A),D=>(m(),b("iframe",{key:D.url,class:"plugin-resource-frame",src:Md(D),title:D.label||"插件资源",style:ot({height:`${ha(D)}px`}),loading:"lazy",allow:"fullscreen",allowfullscreen:""},null,12,Ak))),128))]),pa(A).length?(m(),b("div",{key:0,class:"message-text markdown",innerHTML:ma(A)},null,8,Ck)):C("",!0)],64)):A.kind==="assistant"&&A.live?(m(),b("div",Mk,[Et(Ph,{text:A.text||"","exposed-resources":ba(A)},null,8,["text","exposed-resources"])])):sg(A)?C("",!0):(m(),b("div",{key:2,class:"message-text markdown",innerHTML:Qs(A)},null,8,Rk)),(m(!0),b(ee,null,ge([Jt(A)],D=>(m(),b(ee,{key:`${A.id}-images`},[D.length?(m(),b("div",Nk,[(m(!0),b(ee,null,ge(D,(ie,Qe)=>(m(),b("figure",{key:mn(ie)||ie.previewUrl||Qe,class:Y(["message-image-attachment",{"image-unavailable":!ie.available}])},[ie.available&&ie.previewUrl?(m(),b("button",{key:0,type:"button",class:"image-preview-trigger","data-preview-src":$e(st)(ie.originalUrl||ie.previewUrl),"aria-label":`预览 ${en(ie,Qe)}`},[l("img",{src:$e(st)(ie.previewUrl),alt:en(ie,Qe),loading:"lazy",decoding:"async"},null,8,$k)],8,Lk)):(m(),b("div",Ok,"图片不可用")),l("figcaption",null,S(en(ie,Qe)),1),ie.available&&ie.previewUrl?(m(),b("a",{key:2,class:"image-download",href:$e(st)(ie.originalUrl||ie.previewUrl),download:Ca(ie,Qe)},"下载",8,Dk)):C("",!0)],2))),128))])):C("",!0)],64))),128))],64))]))],2))],64)}),128))],12,jm))),128))],4),!o.busy&&((u=o.coreQueryTiming)==null?void 0:u.status)==="finished"&&$e(At)(o.coreQueryTiming.durationMs)?(m(),b("div",Pk,[l("div",Uk,[Et(El,{"elapsed-ms":o.coreQueryTiming.durationMs},null,8,["elapsed-ms"])])])):C("",!0),xc.value?(m(),b("div",Bk,[l("div",zk,[Et(Vh,{class:"message-loading-label",text:Sc.value},null,8,["text"]),Et(El,{"elapsed-ms":Ec.value,style:{"margin-inline-start":"10px"}},null,8,["elapsed-ms"])])])):C("",!0)],512),o.queuedInput&&!i.value?(m(),b("div",Fk,[l("span",null,"已排队:"+S(o.queuedInput),1),l("div",null,[l("button",{type:"button",disabled:r.value,onClick:$i},"立即发送",8,Hk),l("button",{type:"button",disabled:r.value,onClick:_u},"取消",8,jk)])])):C("",!0),i.value?C("",!0):(m(),b("form",{key:1,ref_key:"composerForm",ref:se,class:Y(["composer",{"drop-active":o.composerDropActive}]),onSubmit:ke(Ni,["prevent"]),onDragover:gu,onDragleave:fu,onDrop:pu},[(p=o.appPrompt)!=null&&p.hasActivePrompt?(m(),b("div",Gk,[n[75]||(n[75]=l("span",{class:"composer-app-prompt-label"},"当前提示词",-1)),l("strong",null,S(Bc.value),1),l("button",{type:"button",class:"mini-button danger",onClick:Mi},"清空")])):C("",!0),Ra().length?(m(),b("div",qk,[(m(!0),b(ee,null,ge(Ra(),(k,A)=>(m(),b("figure",{key:k.label,class:"file-attachment"},[l("figcaption",null,[l("strong",{title:k.localReference?k.absolutePath:void 0},S(rg(k,A)),9,Wk),l("span",null,S(og(k)),1)]),l("button",{type:"button","aria-label":"移除附件",onClick:Ze=>Ma(k.label)},"×",8,Kk)]))),128))])):C("",!0),Na().length?(m(),b("div",Vk,[(m(!0),b(ee,null,ge(Na(),(k,A)=>(m(),b("figure",{key:k.label,class:"image-attachment"},[l("img",{src:$e(st)(k.previewUrl),alt:k.name||`图片 ${A+1}`},null,8,Zk),l("figcaption",null,"图片 "+S(A+1),1),l("button",{type:"button","aria-label":"移除图片",onClick:Ze=>Ma(k.label)},"×",8,Qk)]))),128))])):C("",!0),l("input",{ref_key:"fileInput",ref:K,type:"file",multiple:"",hidden:"",onChange:Kd},null,544),Be(l("textarea",{ref_key:"composer",ref:F,"onUpdate:modelValue":n[12]||(n[12]=k=>oe.value=k),placeholder:"在这里输入你的问题、需求或下一步安排…",onKeydown:Hd,onPaste:qd,onInput:gg},null,544),[[rt,oe.value]]),l("div",Yk,[l("button",{type:"button",class:"composer-cwd",title:"切换工作目录","aria-label":"切换工作目录",onClick:ud},[n[76]||(n[76]=l("svg",{class:"composer-cwd-icon",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linejoin":"round","aria-hidden":"true"},[l("path",{d:"M2.5 5h5l2 2h8v9h-15Z"})],-1)),l("span",{title:yi.value},S(yi.value),9,Xk)])]),l("div",{class:Y(["composer-footer",{"session-options-open":s.value}])},[l("div",Jk,[l("button",{type:"button",class:"metric-chip model-chip context-window-trigger model-trigger","aria-label":"选择模型",onClick:Su},[n[77]||(n[77]=l("em",null,"模型",-1)),l("strong",null,S(Tc.value),1)]),(m(),b("button",{type:"button",class:Y(["metric-chip","numeric","context-window-trigger",Xr("context")]),key:`context-${o.composerMetrics.context.bump}`,onClick:Tu},[n[78]||(n[78]=l("em",null,"上下文",-1)),l("strong",null,S(Ac.value),1)],2)),(m(),b("span",{class:Y(["metric-chip numeric",Xr("inputTokens")]),key:`input-${o.composerMetrics.inputTokens.bump}`},[n[79]||(n[79]=l("em",null,"输入",-1)),l("strong",null,S(Mc.value),1)],2)),(m(),b("span",{class:Y(["metric-chip numeric",Xr("outputTokens")]),key:`output-${o.composerMetrics.outputTokens.bump}`},[n[80]||(n[80]=l("em",null,"输出",-1)),l("strong",null,S(Rc.value),1)],2)),l("button",{type:"button",class:Y(["fast-mode-button",{active:ms.value,syncing:o.fastModeMutating}]),"aria-pressed":ms.value,title:ms.value?"关闭当前会话的快速模式":"为当前会话启动快速模式",onClick:Cu},[...n[81]||(n[81]=[l("span",null,"快速模式",-1)])],10,ey),l("span",ty,[l("button",{type:"button",class:"compact-button",disabled:o.compactSaving||o.pendingSessionSettings.compact===!0,onClick:xu},"压缩会话",8,ny)])]),l("div",sy,[l("button",{type:"button",class:"session-options-toggle","aria-label":"会话选项","aria-expanded":s.value,"aria-controls":"composer-session-metrics",onClick:n[13]||(n[13]=k=>s.value=!s.value)},[...n[82]||(n[82]=[l("svg",{viewBox:"0 0 20 20","aria-hidden":"true"},[l("path",{d:"M3 6h14M3 14h14M7 3v6M13 11v6"})],-1)])],8,ry),l("button",{type:"button",class:"ghost upload-button",style:ot({"--upload-progress":o.uploadProgress+"%"}),disabled:o.uploadingFiles,"aria-busy":o.uploadingFiles,"aria-label":o.uploadingFiles?`上传中 ${o.uploadProgress}%`:"上传附件",title:o.uploadingFiles?`上传中 ${o.uploadProgress}%`:"上传附件",onClick:Wd},[...n[83]||(n[83]=[l("svg",{class:"composer-button-icon",viewBox:"0 0 20 20","aria-hidden":"true"},[l("path",{d:"m7 10 5-5a3 3 0 0 1 4 4l-7 7a4.25 4.25 0 0 1-6-6l7-7M6 11l6-6"})],-1)])],12,oy),l("button",{type:Lt.value?"button":"submit",class:Y(["primary","composer-action",{stop:Lt.value}]),disabled:r.value||!Lt.value&&(o.uploadingFiles||!oe.value.trim()&&!o.attachments.length),"aria-busy":r.value,"aria-label":wi.value,title:wi.value,onClick:n[14]||(n[14]=k=>Lt.value?wu():void 0)},[r.value?(m(),b("svg",ay,[...n[84]||(n[84]=[l("circle",{cx:"10",cy:"10",r:"6.5",opacity:".25"},null,-1),l("path",{d:"M10 3.5a6.5 6.5 0 0 1 6.5 6.5"},null,-1)])])):Lt.value?Or.value?(m(),b("svg",cy,[...n[86]||(n[86]=[l("path",{d:"M4 5v10M11 16V4m-4 4 4-4 4 4"},null,-1)])])):o.queuedInput?(m(),b("svg",uy,[...n[87]||(n[87]=[l("path",{d:"m4 5 7 5-7 5Zm10 0v10"},null,-1)])])):(m(),b("svg",dy,[...n[88]||(n[88]=[l("path",{d:"M5 5h10v10H5Z",fill:"currentColor",stroke:"none"},null,-1)])])):(m(),b("svg",ly,[...n[85]||(n[85]=[l("path",{d:"M10 16V4m-5 5 5-5 5 5"},null,-1)])]))],10,iy)])],2)],34))]),l("aside",{class:Y(["right-panel",{"mobile-card-open":Te.value}]),"data-mobile-card":Te.value,onKeydown:ut(ke(Ct,["stop"]),["esc"])},[Te.value?(m(),b("button",{key:0,type:"button",class:"mobile-card-close","aria-label":"关闭卡片",onClick:Ct},"×")):C("",!0),l("section",fy,[l("div",py,[l("div",hy,S(Pe("tasks")),1),ks.value?(m(),b("strong",my,S(ks.value),1)):C("",!0)]),Cn.value?(m(),b("button",{key:0,type:"button",class:"background-task-summary",title:qs(Cn.value),onClick:n[15]||(n[15]=k=>Jr(Cn.value))},[l("span",{class:Y(["background-task-dot",`status-${Cn.value.status}`])},null,2),l("strong",null,S(Ws(Cn.value)),1),ks.value>1?(m(),b("span",ky,"+"+S(ks.value-1),1)):C("",!0),n[89]||(n[89]=l("b",{"aria-hidden":"true"},"›",-1))],8,by)):C("",!0),ys.value.length?(m(),b("details",yy,[l("summary",null,[n[90]||(n[90]=l("span",null,"最近结束",-1)),l("strong",null,S(ys.value.length),1)]),l("div",vy,[(m(!0),b(ee,null,ge(ys.value,k=>(m(),b("button",{key:Xt(k),type:"button",class:"background-task-summary background-task-history-item",title:qs(k),onClick:A=>Jr(k)},[l("span",{class:Y(["background-task-dot",`status-${k.status}`])},null,2),l("strong",null,S(Ws(k)),1),l("span",{class:Y(["background-task-summary-status",`status-${k.status}`])},S(eo(k.status)),3)],8,wy))),128))])])):C("",!0)]),_t.value?(m(),b("section",_y,[l("div",xy,[l("div",null,[l("span",null,S(Pe("quota"))+" · "+S(Ou(_t.value.account)),1),l("strong",null,S(Fi(_t.value.remainingPercent)),1)]),l("div",Sy,[o.cpaQuotas.length>1?(m(),b("button",{key:0,type:"button","aria-label":"上一个凭据",onClick:n[16]||(n[16]=k=>Gi(-1))},"‹")):C("",!0),l("small",null,S(o.cpaQuotas.length>1?`${o.cpaQuotaIndex+1}/${o.cpaQuotas.length}`:"剩余"),1),o.cpaQuotas.length>1?(m(),b("button",{key:1,type:"button","aria-label":"下一个凭据",onClick:n[17]||(n[17]=k=>Gi(1))},"›")):C("",!0)])]),l("div",{class:"quota-progress",role:"progressbar","aria-label":"周额度剩余","aria-valuenow":Gr(_t.value.remainingPercent),"aria-valuemin":"0","aria-valuemax":"100"},[l("span",{class:"quota-progress-fill",style:ot({width:`${Gr(_t.value.remainingPercent)}%`})},null,4)],8,Ey),l("div",Ty,[l("span",null,"已使用 "+S(Fi(_t.value.usedPercent)),1),l("span",null,"续期时间 "+S(Hi(_t.value.resetAt)),1)]),l("div",Iy,"更新于 "+S(Hi(_t.value.updatedAt)),1)])):C("",!0),l("section",Ay,[l("div",Cy,[l("div",null,[l("span",null,S(Pe("memory")),1),l("strong",null,S(Bs((v=Ss.value)==null?void 0:v.rss)),1)]),n[91]||(n[91]=l("small",null,"RSS",-1))]),_i.value?(m(),b("div",{key:0,class:"memory-chart",onMousemove:Uu,onMouseleave:qi},[(m(),b("svg",My,[l("path",{d:_i.value},null,8,Ry),(m(!0),b(ee,null,ge(Es.value,(k,A)=>(m(),b("circle",{key:k.entry.at,class:Y(["memory-trend-point",{active:A===yt.value}]),cx:k.x,cy:k.y,r:A===yt.value?3.2:1.5,tabindex:"0",onFocus:Ze=>yt.value=A,onBlur:qi},null,42,Ny))),128))])),Nn.value?(m(),b("div",{key:0,class:"memory-tooltip",style:ot({left:`clamp(58px, ${Nn.value.x/260*100}%, calc(100% - 58px))`,top:`${Nn.value.y/44*100}%`})},[l("strong",null,S(Bs(Nn.value.entry.rss)),1),l("span",null,S(Pu(Nn.value.entry.at)),1)],4)):C("",!0)],32)):(m(),b("div",Ly,"—")),l("div",$y,[l("div",null,[n[92]||(n[92]=l("span",null,"V8 堆",-1)),l("strong",null,S(Bs((T=Ss.value)==null?void 0:T.heapUsed)),1)]),l("div",null,[n[93]||(n[93]=l("span",null,"外部内存",-1)),l("strong",null,S(Bs((O=Ss.value)==null?void 0:O.external)),1)])]),l("div",Oy,[l("span",null,"更新于 "+S(Du((G=Ss.value)==null?void 0:G.at)),1)])])],42,gy)])):o.activePanel==="sessions"?(m(),b("section",Dy,[l("div",Py,[l("div",Uy,[l("div",null,[n[94]||(n[94]=l("h2",null,"会话管理",-1)),l("p",null,S(i.value?"查看全部用户的历史会话":"查找、继续或整理历史会话"),1)]),i.value?C("",!0):(m(),b("button",{key:0,class:"primary",onClick:Us},"+ 新建会话"))]),l("div",By,[l("label",zy,[Be(l("input",{"onUpdate:modelValue":n[18]||(n[18]=k=>ce.value=k),type:"search",placeholder:"搜索标题或 ID",autocomplete:"off"},null,512),[[rt,ce.value]])]),l("span",Fy,S(ce.value.trim()?`${Mn.value.length} / ${o.sessions.length}`:`${o.sessions.length} 个会话`),1)]),o.sessionsLoading?(m(),b("div",Hy,"正在加载会话…")):o.sessions.length?Mn.value.length?(m(),b("div",qy,[(m(!0),b(ee,null,ge(Nc.value,k=>(m(),b("article",{key:`${k.ownerUsername||""}:${k.sessionId}`,class:Y(["session-card",{current:Hr(k.sessionId),running:jr(k.sessionId)}])},[l("div",Wy,[l("div",Ky,[l("strong",null,S(bi(k)),1),i.value?(m(),b("span",Vy,S(k.ownerUsername)+S(k.ownerDeleted?" · 已删除":""),1)):C("",!0),Hr(k.sessionId)&&(!i.value||$e(Ge).adminOwnerUsername===k.ownerUsername)?(m(),b("span",Zy,"当前")):jr(k.sessionId)?(m(),b("span",Qy,"运行中")):C("",!0)]),l("div",Yy,[l("code",{title:k.sessionId},"ID · "+S(k.sessionId),9,Xy),l("time",{datetime:k.updatedAt||k.createdAt},"更新于 "+S(ji(k.updatedAt||k.createdAt)),9,Jy)])]),l("div",ev,[l("button",{disabled:o.sessionResumeLoading||o.sessionsLoading,onClick:A=>Nu(k)},S(o.pendingResumeSessionId===k.sessionId&&o.sessionResumeLoading?"打开中…":"打开"),9,tv),i.value?C("",!0):(m(),b("button",{key:0,class:"danger",disabled:o.sessionResumeLoading||o.sessionsLoading,onClick:A=>Lu(k.sessionId)},"删除",8,nv))])],2))),128))])):(m(),b("div",Gy,"没有匹配的会话")):(m(),b("div",jy,"暂无会话")),!o.sessionsLoading&&Mn.value.length&&vs.value>1?(m(),b("nav",sv,[l("button",{type:"button",disabled:W.value===1,onClick:n[19]||(n[19]=k=>W.value-=1)},"上一页",8,rv),(m(!0),b(ee,null,ge(Lc.value,k=>(m(),b("button",{key:k,type:"button",class:Y({active:k===W.value}),"aria-current":k===W.value?"page":void 0,onClick:A=>W.value=k},S(k),11,ov))),128)),l("button",{type:"button",disabled:W.value===vs.value,onClick:n[20]||(n[20]=k=>W.value+=1)},"下一页",8,iv)])):C("",!0)])])):i.value&&o.activePanel==="users"?(m(),b("section",av,[l("div",lv,[n[96]||(n[96]=l("div",{class:"page-head sessions-page-head"},[l("div",null,[l("h2",null,"用户管理"),l("p",null,"创建和删除普通用户账号")])],-1)),l("form",{class:"admin-user-form",onSubmit:ke(Mu,["prevent"])},[l("label",null,[n[95]||(n[95]=Jn("用户名",-1)),Be(l("input",{"onUpdate:modelValue":n[21]||(n[21]=k=>Q.value=k),maxlength:"100",autocomplete:"off",required:""},null,512),[[rt,Q.value]])]),l("button",{class:"primary",disabled:o.adminUserBusy},"创建普通用户",8,cv)],32),o.adminUserError?(m(),b("p",uv,S(o.adminUserError),1)):C("",!0),o.adminUsersLoading?(m(),b("div",dv,"正在加载用户…")):(m(),b("div",gv,[(m(!0),b(ee,null,ge(o.adminUsers,k=>(m(),b("article",{key:k.username,class:"session-card"},[l("div",fv,[l("div",pv,[l("strong",null,S(k.username),1),l("span",hv,S(k.role==="admin"?"超管":"普通用户"),1)])]),l("div",mv,[k.role!=="admin"?(m(),b("button",{key:0,class:"danger",disabled:o.adminUserBusy,onClick:A=>Ru(k)},"删除账号",8,bv)):C("",!0)])]))),128))]))])])):!$e(Ge).isolation&&o.activePanel==="prompts"?(m(),b("section",kv,[l("div",yv,[l("div",vv,[n[97]||(n[97]=l("h2",null,"提示词",-1)),l("div",wv,[l("button",{class:"ghost",onClick:n[22]||(n[22]=k=>o.activePanel="chat")},"回到对话"),l("button",{class:"primary",onClick:au},"+ 新建提示词")])]),l("div",_v,[l("aside",xv,[l("div",Sv,[l("strong",null,S(o.promptLibrary.length)+" 个提示词",1)]),l("div",Ev,[o.promptLibraryLoading?(m(),b("div",Tv,"正在加载…")):o.promptLibrary.length?(m(!0),b(ee,{key:2},ge(o.promptLibrary,k=>{var A,Ze;return m(),b("button",{key:k.id,class:Y(["prompt-library-item",{active:((A=ws.value)==null?void 0:A.id)===k.id,applied:((Ze=Vt.value)==null?void 0:Ze.id)===k.id,dragging:et.value===k.id,"drop-before":ft.value===k.id&&pt.value==="before","drop-after":ft.value===k.id&&pt.value==="after"}]),type:"button",draggable:"true",onClick:mt=>lu(k),onDblclick:mt=>Pn(k),onDragstart:mt=>ku(mt,k),onDragover:mt=>yu(mt,k),onDrop:mt=>vu(mt,k),onDragend:Ri},[l("strong",null,S(k.title),1),k.usage?(m(),b("span",Cv,"用法:"+S(k.usage),1)):C("",!0)],42,Av)}),128)):(m(),b("div",Iv,"暂无提示词"))])]),l("section",Mv,[l("div",Rv,[l("strong",Nv,S(me.title||"新提示词"),1),l("div",Lv,[l("button",{class:"mini-button",type:"button",disabled:!ws.value,onClick:n[23]||(n[23]=k=>ws.value&&Pn(ws.value))},"应用",8,$v),l("button",{class:"mini-button",type:"button",onClick:cu},"保存"),l("button",{class:"mini-button danger",type:"button",disabled:!me.id,onClick:uu},"删除",8,Ov)])]),l("div",Dv,[l("label",Pv,[n[98]||(n[98]=l("span",null,"名称",-1)),Be(l("input",{"onUpdate:modelValue":n[24]||(n[24]=k=>me.title=k),type:"text",placeholder:"例如:代码评审"},null,512),[[rt,me.title]])]),l("label",Uv,[n[99]||(n[99]=l("span",null,"提示词内容",-1)),Be(l("textarea",{"onUpdate:modelValue":n[25]||(n[25]=k=>me.content=k),rows:"14",placeholder:"输入提示词内容"},null,512),[[rt,me.content]])]),l("label",Bv,[n[100]||(n[100]=l("span",null,"用法(选填)",-1)),Be(l("textarea",{"onUpdate:modelValue":n[26]||(n[26]=k=>me.usage=k),rows:"4",placeholder:"输入适用场景"},null,512),[[rt,me.usage]])])])])])])])):a.value&&o.activePanel==="settings"?(m(),b("section",zv,[l("div",Fv,[a.value&&o.settingsPage==="prompt"?(m(),b(ee,{key:0},[l("div",Hv,[l("div",jv,[l("button",{type:"button",class:"mini-button","aria-label":"返回模型配置",onClick:n[27]||(n[27]=k=>o.settingsPage="")},"←"),n[101]||(n[101]=l("h2",null,"提示词配置",-1))])]),Et(yl,{endpoint:$e(st)("/api/prompt-config"),onSaved:Bi},null,8,["endpoint"])],64)):(m(),b(ee,{key:1},[l("div",Gv,[n[102]||(n[102]=l("h2",null,"模型配置",-1)),l("button",{class:"primary",onClick:zi,disabled:!o.login},"保存",8,qv)]),o.login?(m(),b("form",{key:1,class:"settings-form",onSubmit:ke(zi,["prevent"])},[a.value?(m(),b("button",{key:0,type:"button",class:"settings-prompt-entry",onClick:n[28]||(n[28]=k=>o.settingsPage="prompt")},[...n[103]||(n[103]=[l("strong",null,"提示词配置",-1),l("span",{"aria-hidden":"true"},"›",-1)])])):C("",!0),l("section",Kv,[n[105]||(n[105]=l("header",{class:"settings-card-head"},[l("strong",null,"模型")],-1)),l("div",Vv,[l("label",Zv,[n[104]||(n[104]=l("span",null,"供应商",-1)),Et(cr,{modelValue:Je.value,"onUpdate:modelValue":n[29]||(n[29]=k=>Je.value=k),options:rd(o.login.providers),"aria-label":"供应商",onChange:$u},null,8,["modelValue","options"])]),(m(!0),b(ee,null,ge(o.login.fields,k=>(m(),b("label",{key:k.key,class:"settings-field"},[l("span",null,[Jn(S(to(k.label)),1),k.required?(m(),b("i",Qv)):C("",!0)]),k.options?(m(),Fe(cr,{key:0,modelValue:ae[k.key],"onUpdate:modelValue":A=>ae[k.key]=A,options:od(k),"aria-label":to(k.label)},null,8,["modelValue","onUpdate:modelValue","options","aria-label"])):Be((m(),b("input",{key:1,"onUpdate:modelValue":A=>ae[k.key]=A,type:k.secret?"password":"text",placeholder:k.placeholder||`请输入${to(k.label)}`},null,8,Yv)),[[Cg,ae[k.key]]])]))),128))])]),a.value?(m(),b("section",Xv,[n[108]||(n[108]=l("header",{class:"settings-card-head"},[l("strong",null,"CPA")],-1)),l("div",Jv,[l("label",ew,[n[106]||(n[106]=l("span",null,"URL",-1)),Be(l("input",{"onUpdate:modelValue":n[30]||(n[30]=k=>o.cpaConfig.url=k),type:"text",placeholder:"http://127.0.0.1:8317",autocomplete:"off"},null,512),[[rt,o.cpaConfig.url]])]),l("label",tw,[n[107]||(n[107]=l("span",null,"管理密码",-1)),Be(l("input",{"onUpdate:modelValue":n[31]||(n[31]=k=>o.cpaConfig.password=k),type:"password",placeholder:"请输入管理密码",autocomplete:"new-password"},null,512),[[rt,o.cpaConfig.password]])])])])):C("",!0),a.value?(m(),b("section",nw,[l("header",sw,[n[109]||(n[109]=l("div",null,[l("strong",null,"工具"),l("small",null,"内置与插件工具默认开启,关闭后立即对当前会话生效。")],-1)),l("button",{type:"button",class:"mini-button",disabled:o.busy||o.globalTools.loading,onClick:jc},"保存",8,rw)]),l("div",ow,[(m(!0),b(ee,null,ge(o.globalTools.items,k=>(m(),b("label",{key:k.name,class:"plugin-settings-row"},[l("span",null,[l("strong",null,[l("code",null,S(k.name),1)]),l("small",null,S(k.source==="plugin"?`插件 · ${k.pluginName||k.pluginId}`:k.source==="external"?"外部工具":"内置工具"),1)]),l("span",iw,[Be(l("input",{"onUpdate:modelValue":A=>k.configuredEnabled=A,type:"checkbox","aria-label":k.name},null,8,aw),[[Qa,k.configuredEnabled]]),n[110]||(n[110]=l("span",{"aria-hidden":"true"},null,-1))])]))),128))])])):C("",!0),a.value?(m(),b("section",lw,[l("header",cw,[n[111]||(n[111]=l("strong",null,"插件",-1)),o.globalPlugins.installationSupported?(m(),b("button",{key:0,type:"button",class:"mini-button",disabled:o.globalPlugins.locked||o.globalPlugins.loading,onClick:Wc},"安装可信插件",8,uw)):C("",!0),l("button",{type:"button",class:"mini-button",disabled:o.globalPlugins.locked||o.globalPlugins.loading,onClick:qc},"保存",8,dw)]),l("div",gw,[(m(!0),b(ee,null,ge(o.globalPlugins.items,k=>(m(),b("div",{key:k.id,class:"plugin-settings-row"},[l("span",null,[l("strong",null,S(k.name),1),l("small",null,S(k.tools.length)+" 个工具",1)]),l("span",fw,[Be(l("input",{"onUpdate:modelValue":A=>k.configuredEnabled=A,type:"checkbox",disabled:o.globalPlugins.locked,"aria-label":k.name},null,8,pw),[[Qa,k.configuredEnabled]]),n[112]||(n[112]=l("span",{"aria-hidden":"true"},null,-1))]),o.globalPlugins.installationSupported?(m(),b("button",{key:0,type:"button",class:"mini-button",disabled:o.globalPlugins.locked||o.globalPlugins.loading,onClick:A=>Kc(k)},"卸载",8,hw)):C("",!0)]))),128))])])):C("",!0)],32)):(m(),b("div",Wv,"正在加载配置…"))],64))])])):(m(),b("section",mw,[l("div",bw,[n[113]||(n[113]=l("h2",null,"运行时能力",-1)),l("div",kw,[(m(),b(ee,null,ge(["流式模型循环","工具执行","上下文指标","会话恢复","后台代理","登录配置","图片附件","Markdown 输出"],k=>l("div",{key:k,class:"capability-card"},S(k),1)),64))])])]))]),o.toast?(m(),b("div",yw,S(o.toast),1)):C("",!0)]),(m(),Fe(ct,{to:"body"},[o.coreVersion?(m(),b("div",{key:0,class:Y(["core-version",{celebrating:o.coreEasterEgg}]),role:"button",tabindex:"0",title:`内核版本 ${o.coreVersion} · 点击试试`,onClick:cn,onKeydown:[ut(ke(cn,["prevent"]),["enter"]),ut(ke(cn,["prevent"]),["space"])]},[n[114]||(n[114]=l("span",{class:"core-version-spark spark-a","aria-hidden":"true"},null,-1)),n[115]||(n[115]=l("span",{class:"core-version-spark spark-b","aria-hidden":"true"},null,-1)),n[116]||(n[116]=l("span",{class:"core-version-spark spark-c","aria-hidden":"true"},null,-1)),l("span",null,"内核版本 "+S(o.coreVersion),1)],42,vw)):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.cwdPicker.open?(m(),b("div",{key:0,class:"cwd-picker-backdrop",onClick:ke(Vs,["self"])},[l("section",ww,[l("header",{class:"cwd-picker-head"},[n[117]||(n[117]=l("strong",null,"CWD",-1)),l("button",{type:"button","aria-label":"关闭",onClick:Vs},"×")]),l("form",{class:"cwd-picker-path",onSubmit:n[33]||(n[33]=ke(k=>Zs(),["prevent"]))},[Be(l("input",{"onUpdate:modelValue":n[32]||(n[32]=k=>o.cwdPicker.input=k),autocomplete:"off",spellcheck:"false","aria-label":"工作目录路径"},null,512),[[rt,o.cwdPicker.input]]),l("button",{type:"submit",disabled:o.cwdPicker.loading},"前往",8,_w),l("button",{type:"button",disabled:o.cwdPicker.mutating,onClick:hd},"新建",8,xw)],32),l("div",Sw,[o.cwdPicker.parent?(m(),b("button",{key:0,type:"button",onClick:n[34]||(n[34]=k=>Zs(o.cwdPicker.parent))},"← 上级")):C("",!0),l("span",null,S(o.cwdPicker.selectedPath||o.cwdPicker.cwd),1)]),l("div",Ew,[l("nav",Tw,[(m(!0),b(ee,null,ge(o.cwdPicker.locations,k=>(m(),b("button",{key:`${k.id}-${k.path}`,type:"button",class:Y({active:o.cwdPicker.cwd===k.path}),title:k.path,onClick:A=>Zs(k.path)},[l("span",Aw,S(k.kind==="drive"||k.kind==="volume"?"▣":k.kind==="home"?"◆":"◇"),1),l("strong",null,S(k.label),1)],10,Iw))),128))]),l("div",Cw,[o.cwdPicker.loading?(m(),b("div",Mw,"读取中")):o.cwdPicker.error?(m(),b("div",Rw,S(o.cwdPicker.error),1)):(m(),Fe(em,{key:2,nodes:o.cwdPicker.treeRoots,children:o.cwdPicker.treeChildren,expanded:o.cwdPicker.treeExpanded,"selected-path":o.cwdPicker.selectedPath,"allow-delete":!1,onToggle:fd,onSelect:pd,onDelete:md},null,8,["nodes","children","expanded","selected-path"]))])]),l("footer",Nw,[l("button",{type:"button",onClick:Vs},"取消"),l("button",{type:"button",class:"primary",disabled:o.cwdPicker.mutating||o.cwdPicker.loading,onClick:bd},"选择",8,Lw)])])])):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.projectContextOpen?(m(),b("div",{key:0,class:"runtime-context-modal-backdrop",onClick:ke(oo,["self"])},[l("section",$w,[l("header",Ow,[l("div",null,[o.projectContextDocument?(m(),b("span",Dw,S(o.projectContextDocument.path),1)):C("",!0),l("strong",null,S(((B=o.projectContextDocument)==null?void 0:B.name)||"项目上下文"),1)]),l("button",{type:"button","aria-label":o.projectContextDocument?"返回":"关闭",onClick:oo},"×",8,Pw)]),l("div",Uw,[o.projectContextDocument?(m(),b("pre",Fw,S(o.projectContextDocument.content),1)):(m(),b("div",Bw,[(m(!0),b(ee,null,ge(Rn.value,k=>(m(),b("button",{key:k.path,type:"button",class:"runtime-context-index-item",onClick:A=>cd(k)},[l("span",null,[l("strong",null,S(k.name),1),l("small",null,S(bn(k.chars||0))+" 字符",1)]),n[118]||(n[118]=l("b",null,"›",-1))],8,zw))),128))]))])])])):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.confirmDialog.open?(m(),b("div",{key:0,class:"confirm-dialog-backdrop",onClick:n[37]||(n[37]=ke(k=>un(!1),["self"]))},[l("section",{class:"confirm-dialog",role:"alertdialog","aria-modal":"true","aria-label":o.confirmDialog.title},[l("div",{class:Y(["confirm-dialog-icon",`tone-${o.confirmDialog.tone}`]),"aria-hidden":"true"},"!",2),l("div",jw,[l("h3",null,S(o.confirmDialog.title),1),l("p",null,S(o.confirmDialog.message),1)]),l("div",Gw,[l("button",{type:"button",class:"ghost",onClick:n[35]||(n[35]=k=>un(!1))},S(o.confirmDialog.cancelLabel),1),l("button",{type:"button",class:Y(["primary",{danger:o.confirmDialog.tone==="danger"}]),onClick:n[36]||(n[36]=k=>un(!0))},S(o.confirmDialog.confirmLabel),3)])],8,Hw)])):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.modelModalOpen?(m(),b("div",{key:0,class:"context-window-backdrop",onClick:ke(Bn,["self"])},[l("section",{class:"context-window-modal session-model-modal",role:"dialog","aria-modal":"true","aria-label":"选择模型",onKeydown:Pi},[l("form",{onSubmit:ke(Eu,["prevent"])},[l("header",{class:"session-model-header"},[n[119]||(n[119]=l("h2",null,"模型",-1)),l("button",{type:"button",class:"ghost","aria-label":"关闭模型选择",onClick:Bn},"×")]),Be(l("input",{id:"session-model-search","onUpdate:modelValue":n[38]||(n[38]=k=>o.modelSearch=k),type:"search",placeholder:"搜索模型","aria-label":"搜索模型",autocomplete:"off"},null,512),[[rt,o.modelSearch]]),l("div",qw,[(m(!0),b(ee,null,ge(Ic.value,k=>(m(),b("label",{key:k,class:Y(["session-model-option",{selected:o.modelDraft===k}])},[Be(l("input",{"onUpdate:modelValue":n[39]||(n[39]=A=>o.modelDraft=A),type:"radio",name:"session-model",value:k,disabled:o.modelSaving},null,8,Ww),[[Ya,o.modelDraft]]),l("span",null,S(k),1)],2))),128))]),l("fieldset",{class:"session-reasoning-options",disabled:o.modelSaving},[n[120]||(n[120]=l("legend",null,"推理强度",-1)),(m(!0),b(ee,null,ge(bs.value,k=>(m(),b("label",{key:k,class:Y({selected:o.reasoningDraft===k})},[Be(l("input",{"onUpdate:modelValue":n[40]||(n[40]=A=>o.reasoningDraft=A),type:"radio",name:"session-reasoning",value:k},null,8,Vw),[[Ya,o.reasoningDraft]]),l("span",null,S(k==="default"?"默认":k==="off"?"关闭":k),1)],2))),128))],8,Kw),o.modelError?(m(),b("p",Zw,S(o.modelError),1)):C("",!0),l("div",Qw,[l("button",{type:"button",class:"ghost",onClick:Bn},"取消"),l("button",{type:"submit",class:"primary",disabled:o.modelSaving||!o.modelDraft},S(o.modelSaving?"保存中…":"确认"),9,Yw)])],32)],32)])):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.contextWindowModalOpen?(m(),b("div",{key:0,class:"context-window-backdrop",onClick:ke(Os,["self"])},[l("section",{class:"context-window-modal",role:"dialog","aria-modal":"true","aria-label":"上下文窗口",onKeydown:Pi},[l("form",{onSubmit:ke(Au,["prevent"])},[n[122]||(n[122]=l("label",{for:"context-window-input"},"上下文窗口",-1)),l("div",Xw,[Be(l("input",{id:"context-window-input","onUpdate:modelValue":n[41]||(n[41]=k=>o.contextWindowDraft=k),type:"text",inputmode:"numeric",autocomplete:"off",autofocus:"","aria-describedby":"context-window-unit",onInput:Iu},null,544),[[rt,o.contextWindowDraft]]),n[121]||(n[121]=l("span",{id:"context-window-unit"},"k",-1))]),o.contextWindowError?(m(),b("p",Jw,S(o.contextWindowError),1)):C("",!0),l("div",e0,[l("button",{type:"button",class:"ghost",onClick:Os},"取消"),l("button",{type:"submit",class:"primary",disabled:o.contextWindowSaving},S(o.contextWindowSaving?"保存中…":"确认"),9,t0)])],32)],32)])):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.imagePreview?(m(),b("div",{key:0,class:"image-preview-backdrop",onClick:ke(Vr,["self"])},[l("section",{class:"image-preview-modal",role:"dialog","aria-modal":"true","aria-label":o.imagePreview.caption||"图片预览"},[l("button",{type:"button",class:"image-preview-close","aria-label":"关闭图片预览",onClick:Vr},"×"),l("div",s0,[l("img",{src:o.imagePreview.src,alt:o.imagePreview.caption||"图片预览"},null,8,r0)]),o.imagePreview.caption?(m(),b("footer",o0,S(o.imagePreview.caption),1)):C("",!0)],8,n0)])):C("",!0)])),(m(),Fe(ct,{to:"body"},[wt.value?(m(),b("div",{key:0,class:"runtime-context-detail-backdrop",onClick:ke(zs,["self"])},[l("section",i0,[l("header",{class:"runtime-context-modal-head"},[n[123]||(n[123]=l("div",null,[l("strong",null,"压缩上下文详情")],-1)),l("button",{type:"button","aria-label":"关闭",onClick:zs},"×")]),l("div",a0,[l("dl",l0,[l("div",null,[n[124]||(n[124]=l("dt",null,"压缩方式",-1)),l("dd",null,S(Hu(wt.value)),1)]),l("div",null,[n[125]||(n[125]=l("dt",null,"发生时间",-1)),l("dd",null,S(ji(wt.value.compaction.createdAt)),1)]),l("div",null,[n[126]||(n[126]=l("dt",null,"新窗口消息",-1)),l("dd",null,S(wt.value.compaction.newWindowMessages),1)]),l("div",null,[n[127]||(n[127]=l("dt",null,"保留用户消息",-1)),l("dd",null,S(wt.value.compaction.preservedUserMessages),1)]),l("div",null,[n[128]||(n[128]=l("dt",null,"释放字符",-1)),l("dd",null,S(bn(wt.value.compaction.charsFreed)),1)]),l("div",null,[n[129]||(n[129]=l("dt",null,"图片引用",-1)),l("dd",null,S(wt.value.compaction.imageCount||0),1)])]),n[130]||(n[130]=l("h3",null,"实际续接上下文",-1)),l("pre",null,S(wt.value.compaction.continuationState||wt.value.compaction.summary||"未提供续接上下文"),1)])])])):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.runtimeContextModal?(m(),b("div",{key:0,class:"runtime-context-modal-backdrop",onClick:ke(so,["self"])},[l("section",c0,[l("header",u0,[l("div",null,[l("strong",null,S(o.runtimeContextModal==="prompt"?"系统提示词":o.runtimeContextModal==="tools"?"可用工具":"会话插件"),1)]),l("button",{type:"button","aria-label":"关闭",onClick:so},"×")]),l("div",d0,[!$e(Ge).isolation&&o.runtimeContextModal==="prompt"?(m(),Fe(yl,{key:0,endpoint:z("/api/session-prompt"),session:"","runtime-prompt":(de=o.runtimeContext)==null?void 0:de.prompt,onSaved:Bi},null,8,["endpoint","runtime-prompt"])):o.runtimeContextModal==="tools"?(m(),b("div",g0,[o.sessionTools.loading?(m(),b("div",f0,"同步中")):(m(),b(ee,{key:1},[l("div",p0,[l("span",null,"可用 "+S(Uc.value)+" / "+S(o.sessionTools.items.length),1)]),(m(!0),b(ee,null,ge(o.sessionTools.items,k=>(m(),b("div",{key:k.name,class:"runtime-plugin-row"},[l("button",{type:"button",class:"runtime-tool-detail-button",disabled:!Pr.value.some(A=>A.name===k.name),onClick:A=>kd(Pr.value.find(Ze=>Ze.name===k.name))},[l("code",null,S(k.name),1),l("small",null,S(k.available===!1?`插件未启用 · ${k.pluginName||k.pluginId}`:k.source==="plugin"?`插件 · ${k.pluginName||k.pluginId}`:k.source==="external"?"外部工具":"内置工具"),1)],8,h0),Et(cr,{class:"runtime-plugin-control","model-value":k.mode,options:d,disabled:o.busy||o.sessionTools.busy||k.available===!1,"aria-label":`${k.name}状态`,"data-mode":k.mode,"onUpdate:modelValue":A=>Gc(k,A)},null,8,["model-value","disabled","aria-label","data-mode","onUpdate:modelValue"])]))),128))],64))])):(m(),b("div",m0,[o.sessionPlugins.loading?(m(),b("div",b0,"同步中")):(m(!0),b(ee,{key:1},ge(o.sessionPlugins.items,k=>(m(),b("div",{key:k.id,class:"runtime-plugin-row"},[l("span",null,[l("strong",null,S(k.name),1),l("small",null,S(k.tools.length)+" 个工具",1)]),Et(cr,{class:"runtime-plugin-control","model-value":k.mode,options:d,disabled:o.sessionPlugins.busy||!k.globallyEnabled,"aria-label":`${k.name}状态`,"data-mode":k.mode,"onUpdate:modelValue":A=>Vc(k,A)},null,8,["model-value","disabled","aria-label","data-mode","onUpdate:modelValue"])]))),128))]))])])])):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.runtimeContextDetail?(m(),b("div",{key:0,class:"runtime-context-detail-backdrop",onClick:ke(ro,["self"])},[l("section",{class:"runtime-context-detail-modal",role:"dialog","aria-modal":"true","aria-label":o.runtimeContextDetail.title},[l("header",y0,[l("div",null,[o.runtimeContextDetail.meta?(m(),b("span",v0,S(o.runtimeContextDetail.meta),1)):C("",!0),l("strong",null,S(o.runtimeContextDetail.title),1)]),l("button",{type:"button","aria-label":"返回",onClick:ro},"×")]),l("div",w0,[o.runtimeContextDetail.kind==="tool"?(m(),b(ee,{key:0},[o.runtimeContextDetail.description?(m(),b("p",_0,S(o.runtimeContextDetail.description),1)):C("",!0),l("pre",null,S(o.runtimeContextDetail.schema),1)],64)):(m(),b("pre",x0,S(o.runtimeContextDetail.content),1))])],8,k0)])):C("",!0)])),(m(),Fe(ct,{to:"body"},[o.backgroundTaskDetail?(m(),b("div",{key:0,class:"tool-result-modal-backdrop",onClick:ke(Ks,["self"])},[l("section",S0,[l("header",E0,[l("div",T0,[n[131]||(n[131]=l("strong",null,"后台任务",-1)),l("span",I0,S(An.value.length),1)]),l("button",{type:"button",class:"tool-result-modal-close","aria-label":"关闭",onClick:Ks},"×")]),l("div",{class:Y(["tool-result-modal-content","background-task-page",{single:An.value.length<=1}])},[An.value.length>1?(m(),b("nav",A0,[(m(!0),b(ee,null,ge(An.value,k=>(m(),b("button",{key:Xt(k),type:"button",class:Y(["background-task-index-item",{active:Xt(k)===Xt(o.backgroundTaskDetail)}]),title:qs(k),onClick:A=>Jr(k)},[l("span",{class:Y(["background-task-dot",`status-${k.status}`])},null,2),l("span",M0,[l("strong",null,S(Ws(k)),1),l("small",null,S(eo(k.status)),1)])],10,C0))),128))])):C("",!0),l("article",R0,[l("header",N0,[l("div",L0,[l("span",{class:Y(["background-task-dot",`status-${o.backgroundTaskDetail.status}`])},null,2),l("strong",null,S(Ws(o.backgroundTaskDetail)),1)]),l("span",{class:Y(["tool-result-modal-status",`status-${o.backgroundTaskDetail.status}`])},S(eo(o.backgroundTaskDetail.status)),3)]),l("dl",$0,[oa(o.backgroundTaskDetail)?(m(),b("div",O0,[n[132]||(n[132]=l("dt",null,"耗时",-1)),l("dd",null,S(oa(o.backgroundTaskDetail)),1)])):C("",!0),o.backgroundTaskDetail.cwd?(m(),b("div",D0,[n[133]||(n[133]=l("dt",null,"目录",-1)),l("dd",null,S(o.backgroundTaskDetail.cwd),1)])):C("",!0)]),l("div",P0,[o.backgroundTaskDetail.kind!=="agent"&&ia(o.backgroundTaskDetail)?(m(),b("section",U0,[n[134]||(n[134]=l("header",null,"命令",-1)),l("pre",B0,S(ia(o.backgroundTaskDetail)),1)])):C("",!0),o.backgroundTaskDetail.kind==="terminal"?(m(),Fe(xf,{key:1,"owner-session-id":o.backgroundTaskDetail.ownerSessionId||((Ce=o.session)==null?void 0:Ce.sessionId),"run-id":o.backgroundTaskDetail.sessionId},null,8,["owner-session-id","run-id"])):C("",!0),o.backgroundTaskDetail.kind==="agent"?(m(),b("div",z0,[Et(Rf,{"owner-session-id":(Ut=o.session)==null?void 0:Ut.sessionId,task:o.backgroundTaskDetail,"render-markdown":Ku},null,8,["owner-session-id","task"])])):C("",!0)])])],2)])])):C("",!0),at.value?(m(),b("div",{key:1,class:"tool-result-modal-backdrop",onClick:ke(fn,["self"])},[l("section",{class:"tool-result-modal",onKeydown:Vu,role:"dialog","aria-modal":"true","aria-label":`${Qt(at.value)}详情`},[l("header",H0,[l("div",null,[l("div",j0,[l("strong",null,S(Qt(at.value)),1),l("span",{class:Y(["tool-result-modal-status",`status-${$t(at.value).key}`])},S($t(at.value).label),3)]),Yi(at.value)?(m(),b("p",G0,S(Yi(at.value)),1)):C("",!0)]),l("button",{type:"button",class:"tool-result-modal-close","aria-label":"关闭工具结果",onClick:fn},"×")]),l("div",q0,[Pt(at.value)?(m(),b("div",{key:0,class:"message-text markdown tool-detail-markdown",innerHTML:yd(at.value)},null,8,W0)):C("",!0)]),l("footer",{class:"tool-result-modal-footer"},[l("button",{type:"button",class:"primary",onClick:fn},"关闭")])],40,F0)])):C("",!0)]))],64)}}};export{s_ as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/App-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/App-BmzKoJTC.js","assets/App-ha0ZLeCJ.css"])))=>i.map(i=>d[i]);
|
|
2
2
|
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();/**
|
|
3
3
|
* @vue/shared v3.5.34
|
|
4
4
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
@@ -15,4 +15,4 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/App-BMRwvvLa.js
|
|
|
15
15
|
* @vue/runtime-dom v3.5.34
|
|
16
16
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
17
17
|
* @license MIT
|
|
18
|
-
**/let as;const cr=typeof window<"u"&&window.trustedTypes;if(cr)try{as=cr.createPolicy("vue",{createHTML:e=>e})}catch{}const Hi=as?e=>as.createHTML(e):e=>e,Zl="http://www.w3.org/2000/svg",Ql="http://www.w3.org/1998/Math/MathML",We=typeof document<"u"?document:null,fr=We&&We.createElement("template"),ec={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?We.createElementNS(Zl,e):t==="mathml"?We.createElementNS(Ql,e):n?We.createElement(e,{is:n}):We.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>We.createTextNode(e),createComment:e=>We.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>We.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{fr.innerHTML=Hi(s==="svg"?`<svg>${e}</svg>`:s==="mathml"?`<math>${e}</math>`:e);const l=fr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},tt="transition",Ht="animation",Pt=Symbol("_vtc"),ji={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},tc=ie({},Go,ji),pt=(e,t=[])=>{I(e)?e.forEach(n=>n(...t)):e&&e(...t)},ar=e=>e?I(e)?e.some(t=>t.length>1):e.length>1:!1;function nc(e){const t={};for(const A in e)A in ji||(t[A]=e[A]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,C=sc(r),x=C&&C[0],N=C&&C[1],{onBeforeEnter:D,onEnter:M,onEnterCancelled:F,onLeave:O,onLeaveCancelled:V,onBeforeAppear:se=D,onAppear:j=M,onAppearCancelled:G=F}=t,P=(A,X,oe,Ke)=>{A._enterCancelled=Ke,rt(A,X?a:l),rt(A,X?u:o),oe&&oe()},K=(A,X)=>{A._isLeaving=!1,rt(A,h),rt(A,v),rt(A,p),X&&X()},J=A=>(X,oe)=>{const Ke=A?j:M,ce=()=>P(X,A,oe);pt(Ke,[X,ce]),ur(()=>{rt(X,A?c:i),Ne(X,A?a:l),ar(Ke)||dr(X,s,x,ce)})};return ie(t,{onBeforeEnter(A){pt(D,[A]),Ne(A,i),Ne(A,o)},onBeforeAppear(A){pt(se,[A]),Ne(A,c),Ne(A,u)},onEnter:J(!1),onAppear:J(!0),onLeave(A,X){A._isLeaving=!0;const oe=()=>K(A,X);Ne(A,h),A._enterCancelled?(Ne(A,p),us(A)):(us(A),Ne(A,p)),ur(()=>{A._isLeaving&&(rt(A,h),Ne(A,v),ar(O)||dr(A,s,N,oe))}),pt(O,[A,oe])},onEnterCancelled(A){P(A,!1,void 0,!0),pt(F,[A])},onAppearCancelled(A){P(A,!0,void 0,!0),pt(G,[A])},onLeaveCancelled(A){K(A),pt(V,[A])}})}function sc(e){if(e==null)return null;if(q(e))return[Gn(e.enter),Gn(e.leave)];{const t=Gn(e);return[t,t]}}function Gn(e){return Xi(e)}function Ne(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Pt]||(e[Pt]=new Set)).add(t)}function rt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Pt];n&&(n.delete(t),n.size||(e[Pt]=void 0))}function ur(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let rc=0;function dr(e,t,n,s){const r=e._endId=++rc,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=Vi(e,t);if(!o)return s();const u=o+"end";let a=0;const h=()=>{e.removeEventListener(u,p),i()},p=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a<c&&h()},l+1),e.addEventListener(u,p)}function Vi(e,t){const n=window.getComputedStyle(e),s=C=>(n[C]||"").split(", "),r=s(`${tt}Delay`),i=s(`${tt}Duration`),o=hr(r,i),l=s(`${Ht}Delay`),c=s(`${Ht}Duration`),u=hr(l,c);let a=null,h=0,p=0;t===tt?o>0&&(a=tt,h=o,p=i.length):t===Ht?u>0&&(a=Ht,h=u,p=c.length):(h=Math.max(o,u),a=h>0?o>u?tt:Ht:null,p=a?a===tt?i.length:c.length:0);const v=a===tt&&/\b(?:transform|all)(?:,|$)/.test(s(`${tt}Property`).toString());return{type:a,timeout:h,propCount:p,hasTransform:v}}function hr(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,s)=>pr(n)+pr(e[s])))}function pr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function us(e){return(e?e.ownerDocument:document).body.offsetHeight}function ic(e,t,n){const s=e[Pt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const gr=Symbol("_vod"),oc=Symbol("_vsh"),lc=Symbol(""),cc=/(?:^|;)\s*display\s*:/;function fc(e,t,n){const s=e.style,r=te(n);let i=!1;if(n&&!r){if(t)if(te(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Ut(s,l,"")}else for(const o in t)n[o]==null&&Ut(s,o,"");for(const o in n){o==="display"&&(i=!0);const l=n[o];l!=null?uc(e,o,!te(t)&&t?t[o]:void 0,l)||Ut(s,o,l):Ut(s,o,"")}}else if(r){if(t!==n){const o=s[lc];o&&(n+=";"+o),s.cssText=n,i=cc.test(n)}}else t&&e.removeAttribute("style");gr in e&&(e[gr]=i?s.display:"",e[oc]&&(s.display="none"))}const mr=/\s*!important$/;function Ut(e,t,n){if(I(n))n.forEach(s=>Ut(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ac(e,t);mr.test(n)?e.setProperty(ft(s),n.replace(mr,""),"important"):e[s]=n}}const _r=["Webkit","Moz","ms"],Jn={};function ac(e,t){const n=Jn[t];if(n)return n;let s=_e(t);if(s!=="filter"&&s in e)return Jn[t]=s;s=An(s);for(let r=0;r<_r.length;r++){const i=_r[r]+s;if(i in e)return Jn[t]=i}return t}function uc(e,t,n,s){return e.tagName==="TEXTAREA"&&(t==="width"||t==="height")&&te(s)&&n===s}const yr="http://www.w3.org/1999/xlink";function br(e,t,n,s,r,i=so(t)){s&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(yr,t.slice(6,t.length)):e.setAttributeNS(yr,t,n):n==null||i&&!$r(n)?e.removeAttribute(t):e.setAttribute(t,i?"":Be(n)?String(n):n)}function vr(e,t,n,s,r){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?Hi(n):n);return}const i=e.tagName;if(t==="value"&&i!=="PROGRESS"&&!i.includes("-")){const l=i==="OPTION"?e.getAttribute("value")||"":e.value,c=n==null?e.type==="checkbox"?"on":"":String(n);(l!==c||!("_value"in e))&&(e.value=c),n==null&&e.removeAttribute(t),e._value=n;return}let o=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=$r(n):n==null&&l==="string"?(n="",o=!0):l==="number"&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(r||t)}function Ye(e,t,n,s){e.addEventListener(t,n,s)}function dc(e,t,n,s){e.removeEventListener(t,n,s)}const xr=Symbol("_vei");function hc(e,t,n,s,r=null){const i=e[xr]||(e[xr]={}),o=i[t];if(s&&o)o.value=s;else{const[l,c]=pc(t);if(s){const u=i[t]=_c(s,r);Ye(e,l,u,c)}else o&&(dc(e,l,o,c),i[t]=void 0)}}const wr=/(?:Once|Passive|Capture)$/;function pc(e){let t;if(wr.test(e)){t={};let s;for(;s=e.match(wr);)e=e.slice(0,e.length-s[0].length),t[s[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):ft(e.slice(2)),t]}let Yn=0;const gc=Promise.resolve(),mc=()=>Yn||(gc.then(()=>Yn=0),Yn=Date.now());function _c(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Pe(yc(s,n.value),t,5,[s])};return n.value=e,n.attached=mc(),n}function yc(e,t){if(I(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Sr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,bc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?ic(e,s,o):t==="style"?fc(e,n,s):Cn(t)?Tn(t)||hc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):vc(e,t,s,o))?(vr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&br(e,t,s,o,i,t!=="value")):e._isVueCE&&(xc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!te(s)))?vr(e,_e(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),br(e,t,s,o))};function vc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Sr(t)&&H(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Sr(t)&&te(n)?!1:t in e}function xc(e,t){const n=e._def.props;if(!n)return!1;const s=_e(t);return Array.isArray(n)?n.some(r=>_e(r)===s):Object.keys(n).some(r=>_e(r)===s)}const Ui=new WeakMap,Bi=new WeakMap,Sn=Symbol("_moveCb"),Cr=Symbol("_enterCb"),wc=e=>(delete e.props.mode,e),Sc=wc({name:"TransitionGroup",props:ie({},tc,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Di(),s=qo();let r,i;return hi(()=>{if(!r.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!Ac(r[0].el,n.vnode.el,o)){r=[];return}r.forEach(Cc),r.forEach(Tc);const l=r.filter(Ec);us(n.vnode.el),l.forEach(c=>{const u=c.el,a=u.style;Ne(u,o),a.transform=a.webkitTransform=a.transitionDuration="";const h=u[Sn]=p=>{p&&p.target!==u||(!p||p.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",h),u[Sn]=null,rt(u,o))};u.addEventListener("transitionend",h)}),r=[]}),()=>{const o=k(e),l=nc(o);let c=o.tag||Ce;if(r=[],i)for(let u=0;u<i.length;u++){const a=i[u];a.el&&a.el instanceof Element&&(r.push(a),Zt(a,rs(a,l,s,n)),Ui.set(a,Ki(a.el)))}i=t.default?ui(t.default()):[];for(let u=0;u<i.length;u++){const a=i[u];a.key!=null&&Zt(a,rs(a,l,s,n))}return ye(c,null,i)}}}),Mf=Sc;function Cc(e){const t=e.el;t[Sn]&&t[Sn](),t[Cr]&&t[Cr]()}function Tc(e){Bi.set(e,Ki(e.el))}function Ec(e){const t=Ui.get(e),n=Bi.get(e),s=t.left-n.left,r=t.top-n.top;if(s||r){const i=e.el,o=i.style,l=i.getBoundingClientRect();let c=1,u=1;return i.offsetWidth&&(c=l.width/i.offsetWidth),i.offsetHeight&&(u=l.height/i.offsetHeight),(!Number.isFinite(c)||c===0)&&(c=1),(!Number.isFinite(u)||u===0)&&(u=1),Math.abs(c-1)<.01&&(c=1),Math.abs(u-1)<.01&&(u=1),o.transform=o.webkitTransform=`translate(${s/c}px,${r/u}px)`,o.transitionDuration="0s",e}}function Ki(e){const t=e.getBoundingClientRect();return{left:t.left,top:t.top}}function Ac(e,t,n){const s=e.cloneNode(),r=e[Pt];r&&r.forEach(l=>{l.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:o}=Vi(s);return i.removeChild(s),o}const ct=e=>{const t=e.props["onUpdate:modelValue"]||!1;return I(t)?n=>hn(t,n):t};function Mc(e){e.target.composing=!0}function Tr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ee=Symbol("_assign");function Er(e,t,n){return t&&(e=e.trim()),n&&(e=Mn(e)),e}const ds={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[Ee]=ct(r);const i=s||r.props&&r.props.type==="number";Ye(e,t?"change":"input",o=>{o.target.composing||e[Ee](Er(e.value,n,i))}),(n||i)&&Ye(e,"change",()=>{e.value=Er(e.value,n,i)}),t||(Ye(e,"compositionstart",Mc),Ye(e,"compositionend",Tr),Ye(e,"change",Tr))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[Ee]=ct(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Mn(e.value):e.value,c=t??"";if(l===c)return;const u=e.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c)}},Oc={deep:!0,created(e,t,n){e[Ee]=ct(n),Ye(e,"change",()=>{const s=e._modelValue,r=Rt(e),i=e.checked,o=e[Ee];if(I(s)){const l=_s(s,r),c=l!==-1;if(i&&!c)o(s.concat(r));else if(!i&&c){const u=[...s];u.splice(l,1),o(u)}}else if(It(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(ki(e,i))})},mounted:Ar,beforeUpdate(e,t,n){e[Ee]=ct(n),Ar(e,t,n)}};function Ar(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(I(t))r=_s(t,s.props.value)>-1;else if(It(t))r=t.has(s.props.value);else{if(t===n)return;r=lt(t,ki(e,!0))}e.checked!==r&&(e.checked=r)}const Pc={created(e,{value:t},n){e.checked=lt(t,n.props.value),e[Ee]=ct(n),Ye(e,"change",()=>{e[Ee](Rt(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Ee]=ct(s),t!==n&&(e.checked=lt(t,s.props.value))}},Rc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=It(t);Ye(e,"change",()=>{const i=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?Mn(Rt(o)):Rt(o));e[Ee](e.multiple?r?new Set(i):i:i[0]),e._assigning=!0,si(()=>{e._assigning=!1})}),e[Ee]=ct(s)},mounted(e,{value:t}){Mr(e,t)},beforeUpdate(e,t,n){e[Ee]=ct(n)},updated(e,{value:t}){e._assigning||Mr(e,t)}};function Mr(e,t){const n=e.multiple,s=I(t);if(!(n&&!s&&!It(t))){for(let r=0,i=e.options.length;r<i;r++){const o=e.options[r],l=Rt(o);if(n)if(s){const c=typeof l;c==="string"||c==="number"?o.selected=t.some(u=>String(u)===String(l)):o.selected=_s(t,l)>-1}else o.selected=t.has(l);else if(lt(Rt(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Rt(e){return"_value"in e?e._value:e.value}function ki(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Ic={created(e,t,n){dn(e,t,n,null,"created")},mounted(e,t,n){dn(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){dn(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){dn(e,t,n,s,"updated")}};function Fc(e,t){switch(e){case"SELECT":return Rc;case"TEXTAREA":return ds;default:switch(t){case"checkbox":return Oc;case"radio":return Pc;default:return ds}}}function dn(e,t,n,s,r){const o=Fc(e.tagName,n.props&&n.props.type)[r];o&&o(e,t,n,s)}const Lc=["ctrl","shift","alt","meta"],Dc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Lc.some(n=>e[`${n}Key`]&&!t.includes(n))},Nc=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o<t.length;o++){const l=Dc[t[o]];if(l&&l(r,t))return}return e(r,...i)})},$c={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Of=(e,t)=>{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=ft(r.key);if(t.some(o=>o===i||$c[o]===i))return e(r)})},Hc=ie({patchProp:bc},ec);let Or;function jc(){return Or||(Or=Rl(Hc))}const Vc=(...e)=>{const t=jc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Bc(s);if(!r)return;const i=t._component;!H(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Uc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function Uc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Bc(e){return te(e)?document.querySelector(e):e}const Kc="modulepreload",kc=function(e){return"/"+e},Pr={},Wc=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=kc(c),c in Pr)return;Pr[c]=!0;const u=c.endsWith(".css"),a=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=u?"stylesheet":Kc,u||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),u)return new Promise((p,v)=>{h.addEventListener("load",p),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},ge=In({ready:!1,isolation:!1,user:null,adminOwnerUsername:""}),qc=()=>{var e;return ge.isolation&&((e=ge.user)==null?void 0:e.role)==="admin"},Pf=()=>{var e;return ge.isolation?`.user.${((e=ge.user)==null?void 0:e.username)||"anonymous"}`:""};function Gc(e,t="/",n=(s=>(s=globalThis.location)==null?void 0:s.origin)()||"http://localhost"){if(typeof e!="string"&&!(e instanceof URL))return e;const r=String(e);if(!r.startsWith("/")&&!/^https?:\/\//i.test(r))return e;const i=new URL(r,n);if(i.origin!==n||!/^\/(api(?:\/|$)|events(?:\/|$)|vendor(?:\/|$))/.test(i.pathname))return e;const o=`/${t.split("/").filter(Boolean).join("/")}`;return o==="/"?e:(i.pathname=o+i.pathname,`${i.pathname}${i.search}${i.hash}`)}const Jc=e=>Gc(Yc(e));function Yc(e){var s;if(!qc()||!ge.adminOwnerUsername||typeof e!="string"&&!(e instanceof URL))return e;const t=((s=globalThis.location)==null?void 0:s.origin)||"http://localhost",n=new URL(String(e),t);return n.origin!==t||!/^\/(api(?:\/|$)|events(?:\/|$))/.test(n.pathname)||/^\/api\/(auth|admin|login|memory|cpa-quota|cpa-config|prompt-config|plugins|tools)(?:\/|$)/.test(n.pathname)?e:(n.searchParams.set("ownerUsername",ge.adminOwnerUsername),`${n.pathname}${n.search}${n.hash}`)}const Rr=async(e,t)=>{var s;const n=await globalThis.fetch(Jc(e),t);return n.status===401&&!String(e).includes("/api/auth/")&&((s=globalThis.dispatchEvent)==null||s.call(globalThis,new Event("neo-auth-required"))),n},zc=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Xc={key:1,class:"auth-screen","aria-label":"用户登录"},Zc=["aria-busy"],Qc={class:"auth-fields"},ef={class:"icon-field"},tf=["aria-invalid","aria-describedby"],nf={class:"icon-field"},sf=["type","aria-invalid","aria-describedby"],rf=["aria-label","aria-pressed"],of={viewBox:"0 0 24 24","aria-hidden":"true"},lf={key:0,d:"m3 3 18 18"},cf={class:"auth-actions"},ff={class:"status-slot"},af={key:0,id:"auth-error",class:"auth-error",role:"alert"},uf={class:"sr-only"},df=["aria-label","disabled"],hf={key:0,class:"spinner","aria-hidden":"true"},pf={key:1,viewBox:"0 0 24 24","aria-hidden":"true"},gf={key:1,class:"connecting",role:"status","aria-label":"正在连接服务"},mf={key:1,class:"spinner","aria-hidden":"true"},_f={key:2,class:"sr-only",role:"alert"},yf={__name:"AuthGate",setup(e){const t=Xo(()=>Wc(()=>import("./App-BMRwvvLa.js"),__vite__mapDeps([0,1]))),n=ot(""),s=ot(""),r=ot(""),i=ot(!1),o=ot(!1);async function l(){r.value="";try{const h=await Rr("/api/auth/status",{cache:"no-store"});if(!h.ok)throw new Error("无法读取登录状态");const p=await h.json();if(typeof p.isolation!="boolean")throw new Error("登录状态无效");Object.assign(ge,p,{ready:!0})}catch(h){r.value=h.message}}async function c(){var h;if(!i.value){if(!n.value||!s.value){r.value="请输入用户名和密码",(h=document.getElementById(n.value?"auth-password":"auth-username"))==null||h.focus();return}i.value=!0,r.value="";try{const p=await Rr("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:n.value,password:s.value})}),v=await p.json();if(!p.ok)throw new Error(v.error||"登录失败");s.value="",location.reload()}catch(p){r.value=p.message}finally{i.value=!1}}}const u=()=>{ge.user=null,s.value=""};let a;return Ms(async()=>{window.addEventListener("neo-auth-required",u),await l(),a=setInterval(()=>{ge.isolation&&ge.user&&l()},3e4)}),Os(()=>{clearInterval(a),window.removeEventListener("neo-auth-required",u)}),(h,p)=>{var v;return gt(ge).ready&&(!gt(ge).isolation||gt(ge).user)?(ve(),Ii(gt(t),{key:((v=gt(ge).user)==null?void 0:v.username)||"local"})):(ve(),Ae("main",Xc,[p[12]||(p[12]=B("div",{class:"motion-field","aria-hidden":"true"},[B("i",{class:"flow flow-a"}),B("i",{class:"flow flow-b"})],-1)),B("form",{class:Pn(["auth-card",{shaking:r.value}]),"aria-label":"用户登录","aria-busy":i.value,novalidate:"",onSubmit:Nc(c,["prevent"])},[gt(ge).ready?(ve(),Ae(Ce,{key:0},[B("div",Qc,[B("div",ef,[ks(B("input",{id:"auth-username","onUpdate:modelValue":p[0]||(p[0]=C=>n.value=C),"aria-label":"用户名",name:"username",autocomplete:"username",autocapitalize:"none",spellcheck:!1,maxlength:"100",enterkeyhint:"next",required:"","aria-invalid":!!r.value,"aria-describedby":r.value?"auth-error":void 0},null,8,tf),[[ds,n.value]]),p[3]||(p[3]=B("svg",{class:"field-icon",viewBox:"0 0 24 24","aria-hidden":"true"},[B("circle",{cx:"12",cy:"8",r:"3.5"}),B("path",{d:"M5 20c0-4 2.5-6 7-6s7 2 7 6"})],-1)),p[4]||(p[4]=B("i",{class:"field-line","aria-hidden":"true"},null,-1))]),B("div",nf,[ks(B("input",{id:"auth-password","onUpdate:modelValue":p[1]||(p[1]=C=>s.value=C),"aria-label":"密码",name:"password",type:o.value?"text":"password",autocomplete:"current-password",enterkeyhint:"go",required:"","aria-invalid":!!r.value,"aria-describedby":r.value?"auth-error":void 0},null,8,sf),[[Ic,s.value]]),p[7]||(p[7]=B("svg",{class:"field-icon",viewBox:"0 0 24 24","aria-hidden":"true"},[B("rect",{x:"5",y:"10",width:"14",height:"11",rx:"3"}),B("path",{d:"M8 10V7a4 4 0 0 1 8 0v3M12 14v3"})],-1)),p[8]||(p[8]=B("i",{class:"field-line","aria-hidden":"true"},null,-1)),B("button",{class:"password-toggle",type:"button","aria-label":o.value?"隐藏密码":"显示密码","aria-pressed":o.value,onClick:p[2]||(p[2]=C=>o.value=!o.value)},[(ve(),Ae("svg",of,[p[5]||(p[5]=B("path",{d:"M2 12s4-6 10-6 10 6 10 6-4 6-10 6-10-6-10-6Z"},null,-1)),p[6]||(p[6]=B("circle",{cx:"12",cy:"12",r:"3"},null,-1)),o.value?(ve(),Ae("path",lf)):qn("",!0)]))],8,rf)])]),B("div",cf,[B("div",ff,[r.value?(ve(),Ae("div",af,[p[9]||(p[9]=B("svg",{viewBox:"0 0 24 24","aria-hidden":"true"},[B("circle",{cx:"12",cy:"12",r:"9"}),B("path",{d:"M12 7v6m0 3h.01"})],-1)),B("span",uf,zn(r.value),1)])):qn("",!0)]),B("button",{class:"submit-button",type:"submit","aria-label":i.value?"正在验证":"登录",disabled:i.value},[i.value?(ve(),Ae("i",hf)):(ve(),Ae("svg",pf,[...p[10]||(p[10]=[B("path",{d:"M5 12h14m-6-6 6 6-6 6"},null,-1)])]))],8,df)])],64)):(ve(),Ae("div",gf,[r.value?(ve(),Ae("button",{key:0,class:"retry-button",type:"button","aria-label":"重试",onClick:l},[...p[11]||(p[11]=[B("svg",{viewBox:"0 0 24 24","aria-hidden":"true"},[B("path",{d:"M20 7v5h-5M20 12a8 8 0 1 0-2 6"})],-1)])])):(ve(),Ae("i",mf)),r.value?(ve(),Ae("span",_f,zn(r.value),1)):qn("",!0)]))],42,Zc)]))}}},bf=zc(yf,[["__scopeId","data-v-67ef8410"]]);Vc(bf).mount("#app");export{Tf as A,Ii as B,qc as C,ge as D,Pf as E,Ce as F,Af as G,ye as H,Jc as I,$o as J,Mf as K,Ic as L,Oc as M,Pc as N,Cf as T,zc as _,ve as a,qn as b,Ae as c,Rr as d,Ef as e,B as f,ot as g,Sf as h,xf as i,zl as j,Ms as k,si as l,jl as m,Pn as n,Os as o,ks as p,ds as q,In as r,wf as s,zn as t,gt as u,Rc as v,Kn as w,Of as x,Nc as y,ms as z};
|
|
18
|
+
**/let as;const cr=typeof window<"u"&&window.trustedTypes;if(cr)try{as=cr.createPolicy("vue",{createHTML:e=>e})}catch{}const Hi=as?e=>as.createHTML(e):e=>e,Zl="http://www.w3.org/2000/svg",Ql="http://www.w3.org/1998/Math/MathML",We=typeof document<"u"?document:null,fr=We&&We.createElement("template"),ec={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?We.createElementNS(Zl,e):t==="mathml"?We.createElementNS(Ql,e):n?We.createElement(e,{is:n}):We.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>We.createTextNode(e),createComment:e=>We.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>We.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{fr.innerHTML=Hi(s==="svg"?`<svg>${e}</svg>`:s==="mathml"?`<math>${e}</math>`:e);const l=fr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},tt="transition",Ht="animation",Pt=Symbol("_vtc"),ji={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},tc=ie({},Go,ji),pt=(e,t=[])=>{I(e)?e.forEach(n=>n(...t)):e&&e(...t)},ar=e=>e?I(e)?e.some(t=>t.length>1):e.length>1:!1;function nc(e){const t={};for(const A in e)A in ji||(t[A]=e[A]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,C=sc(r),x=C&&C[0],N=C&&C[1],{onBeforeEnter:D,onEnter:M,onEnterCancelled:F,onLeave:O,onLeaveCancelled:V,onBeforeAppear:se=D,onAppear:j=M,onAppearCancelled:G=F}=t,P=(A,X,oe,Ke)=>{A._enterCancelled=Ke,rt(A,X?a:l),rt(A,X?u:o),oe&&oe()},K=(A,X)=>{A._isLeaving=!1,rt(A,h),rt(A,v),rt(A,p),X&&X()},J=A=>(X,oe)=>{const Ke=A?j:M,ce=()=>P(X,A,oe);pt(Ke,[X,ce]),ur(()=>{rt(X,A?c:i),Ne(X,A?a:l),ar(Ke)||dr(X,s,x,ce)})};return ie(t,{onBeforeEnter(A){pt(D,[A]),Ne(A,i),Ne(A,o)},onBeforeAppear(A){pt(se,[A]),Ne(A,c),Ne(A,u)},onEnter:J(!1),onAppear:J(!0),onLeave(A,X){A._isLeaving=!0;const oe=()=>K(A,X);Ne(A,h),A._enterCancelled?(Ne(A,p),us(A)):(us(A),Ne(A,p)),ur(()=>{A._isLeaving&&(rt(A,h),Ne(A,v),ar(O)||dr(A,s,N,oe))}),pt(O,[A,oe])},onEnterCancelled(A){P(A,!1,void 0,!0),pt(F,[A])},onAppearCancelled(A){P(A,!0,void 0,!0),pt(G,[A])},onLeaveCancelled(A){K(A),pt(V,[A])}})}function sc(e){if(e==null)return null;if(q(e))return[Gn(e.enter),Gn(e.leave)];{const t=Gn(e);return[t,t]}}function Gn(e){return Xi(e)}function Ne(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Pt]||(e[Pt]=new Set)).add(t)}function rt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Pt];n&&(n.delete(t),n.size||(e[Pt]=void 0))}function ur(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let rc=0;function dr(e,t,n,s){const r=e._endId=++rc,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=Vi(e,t);if(!o)return s();const u=o+"end";let a=0;const h=()=>{e.removeEventListener(u,p),i()},p=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a<c&&h()},l+1),e.addEventListener(u,p)}function Vi(e,t){const n=window.getComputedStyle(e),s=C=>(n[C]||"").split(", "),r=s(`${tt}Delay`),i=s(`${tt}Duration`),o=hr(r,i),l=s(`${Ht}Delay`),c=s(`${Ht}Duration`),u=hr(l,c);let a=null,h=0,p=0;t===tt?o>0&&(a=tt,h=o,p=i.length):t===Ht?u>0&&(a=Ht,h=u,p=c.length):(h=Math.max(o,u),a=h>0?o>u?tt:Ht:null,p=a?a===tt?i.length:c.length:0);const v=a===tt&&/\b(?:transform|all)(?:,|$)/.test(s(`${tt}Property`).toString());return{type:a,timeout:h,propCount:p,hasTransform:v}}function hr(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,s)=>pr(n)+pr(e[s])))}function pr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function us(e){return(e?e.ownerDocument:document).body.offsetHeight}function ic(e,t,n){const s=e[Pt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const gr=Symbol("_vod"),oc=Symbol("_vsh"),lc=Symbol(""),cc=/(?:^|;)\s*display\s*:/;function fc(e,t,n){const s=e.style,r=te(n);let i=!1;if(n&&!r){if(t)if(te(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Ut(s,l,"")}else for(const o in t)n[o]==null&&Ut(s,o,"");for(const o in n){o==="display"&&(i=!0);const l=n[o];l!=null?uc(e,o,!te(t)&&t?t[o]:void 0,l)||Ut(s,o,l):Ut(s,o,"")}}else if(r){if(t!==n){const o=s[lc];o&&(n+=";"+o),s.cssText=n,i=cc.test(n)}}else t&&e.removeAttribute("style");gr in e&&(e[gr]=i?s.display:"",e[oc]&&(s.display="none"))}const mr=/\s*!important$/;function Ut(e,t,n){if(I(n))n.forEach(s=>Ut(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ac(e,t);mr.test(n)?e.setProperty(ft(s),n.replace(mr,""),"important"):e[s]=n}}const _r=["Webkit","Moz","ms"],Jn={};function ac(e,t){const n=Jn[t];if(n)return n;let s=_e(t);if(s!=="filter"&&s in e)return Jn[t]=s;s=An(s);for(let r=0;r<_r.length;r++){const i=_r[r]+s;if(i in e)return Jn[t]=i}return t}function uc(e,t,n,s){return e.tagName==="TEXTAREA"&&(t==="width"||t==="height")&&te(s)&&n===s}const yr="http://www.w3.org/1999/xlink";function br(e,t,n,s,r,i=so(t)){s&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(yr,t.slice(6,t.length)):e.setAttributeNS(yr,t,n):n==null||i&&!$r(n)?e.removeAttribute(t):e.setAttribute(t,i?"":Be(n)?String(n):n)}function vr(e,t,n,s,r){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?Hi(n):n);return}const i=e.tagName;if(t==="value"&&i!=="PROGRESS"&&!i.includes("-")){const l=i==="OPTION"?e.getAttribute("value")||"":e.value,c=n==null?e.type==="checkbox"?"on":"":String(n);(l!==c||!("_value"in e))&&(e.value=c),n==null&&e.removeAttribute(t),e._value=n;return}let o=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=$r(n):n==null&&l==="string"?(n="",o=!0):l==="number"&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(r||t)}function Ye(e,t,n,s){e.addEventListener(t,n,s)}function dc(e,t,n,s){e.removeEventListener(t,n,s)}const xr=Symbol("_vei");function hc(e,t,n,s,r=null){const i=e[xr]||(e[xr]={}),o=i[t];if(s&&o)o.value=s;else{const[l,c]=pc(t);if(s){const u=i[t]=_c(s,r);Ye(e,l,u,c)}else o&&(dc(e,l,o,c),i[t]=void 0)}}const wr=/(?:Once|Passive|Capture)$/;function pc(e){let t;if(wr.test(e)){t={};let s;for(;s=e.match(wr);)e=e.slice(0,e.length-s[0].length),t[s[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):ft(e.slice(2)),t]}let Yn=0;const gc=Promise.resolve(),mc=()=>Yn||(gc.then(()=>Yn=0),Yn=Date.now());function _c(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Pe(yc(s,n.value),t,5,[s])};return n.value=e,n.attached=mc(),n}function yc(e,t){if(I(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Sr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,bc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?ic(e,s,o):t==="style"?fc(e,n,s):Cn(t)?Tn(t)||hc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):vc(e,t,s,o))?(vr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&br(e,t,s,o,i,t!=="value")):e._isVueCE&&(xc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!te(s)))?vr(e,_e(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),br(e,t,s,o))};function vc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Sr(t)&&H(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Sr(t)&&te(n)?!1:t in e}function xc(e,t){const n=e._def.props;if(!n)return!1;const s=_e(t);return Array.isArray(n)?n.some(r=>_e(r)===s):Object.keys(n).some(r=>_e(r)===s)}const Ui=new WeakMap,Bi=new WeakMap,Sn=Symbol("_moveCb"),Cr=Symbol("_enterCb"),wc=e=>(delete e.props.mode,e),Sc=wc({name:"TransitionGroup",props:ie({},tc,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Di(),s=qo();let r,i;return hi(()=>{if(!r.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!Ac(r[0].el,n.vnode.el,o)){r=[];return}r.forEach(Cc),r.forEach(Tc);const l=r.filter(Ec);us(n.vnode.el),l.forEach(c=>{const u=c.el,a=u.style;Ne(u,o),a.transform=a.webkitTransform=a.transitionDuration="";const h=u[Sn]=p=>{p&&p.target!==u||(!p||p.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",h),u[Sn]=null,rt(u,o))};u.addEventListener("transitionend",h)}),r=[]}),()=>{const o=k(e),l=nc(o);let c=o.tag||Ce;if(r=[],i)for(let u=0;u<i.length;u++){const a=i[u];a.el&&a.el instanceof Element&&(r.push(a),Zt(a,rs(a,l,s,n)),Ui.set(a,Ki(a.el)))}i=t.default?ui(t.default()):[];for(let u=0;u<i.length;u++){const a=i[u];a.key!=null&&Zt(a,rs(a,l,s,n))}return ye(c,null,i)}}}),Mf=Sc;function Cc(e){const t=e.el;t[Sn]&&t[Sn](),t[Cr]&&t[Cr]()}function Tc(e){Bi.set(e,Ki(e.el))}function Ec(e){const t=Ui.get(e),n=Bi.get(e),s=t.left-n.left,r=t.top-n.top;if(s||r){const i=e.el,o=i.style,l=i.getBoundingClientRect();let c=1,u=1;return i.offsetWidth&&(c=l.width/i.offsetWidth),i.offsetHeight&&(u=l.height/i.offsetHeight),(!Number.isFinite(c)||c===0)&&(c=1),(!Number.isFinite(u)||u===0)&&(u=1),Math.abs(c-1)<.01&&(c=1),Math.abs(u-1)<.01&&(u=1),o.transform=o.webkitTransform=`translate(${s/c}px,${r/u}px)`,o.transitionDuration="0s",e}}function Ki(e){const t=e.getBoundingClientRect();return{left:t.left,top:t.top}}function Ac(e,t,n){const s=e.cloneNode(),r=e[Pt];r&&r.forEach(l=>{l.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:o}=Vi(s);return i.removeChild(s),o}const ct=e=>{const t=e.props["onUpdate:modelValue"]||!1;return I(t)?n=>hn(t,n):t};function Mc(e){e.target.composing=!0}function Tr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ee=Symbol("_assign");function Er(e,t,n){return t&&(e=e.trim()),n&&(e=Mn(e)),e}const ds={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[Ee]=ct(r);const i=s||r.props&&r.props.type==="number";Ye(e,t?"change":"input",o=>{o.target.composing||e[Ee](Er(e.value,n,i))}),(n||i)&&Ye(e,"change",()=>{e.value=Er(e.value,n,i)}),t||(Ye(e,"compositionstart",Mc),Ye(e,"compositionend",Tr),Ye(e,"change",Tr))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[Ee]=ct(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Mn(e.value):e.value,c=t??"";if(l===c)return;const u=e.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c)}},Oc={deep:!0,created(e,t,n){e[Ee]=ct(n),Ye(e,"change",()=>{const s=e._modelValue,r=Rt(e),i=e.checked,o=e[Ee];if(I(s)){const l=_s(s,r),c=l!==-1;if(i&&!c)o(s.concat(r));else if(!i&&c){const u=[...s];u.splice(l,1),o(u)}}else if(It(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(ki(e,i))})},mounted:Ar,beforeUpdate(e,t,n){e[Ee]=ct(n),Ar(e,t,n)}};function Ar(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(I(t))r=_s(t,s.props.value)>-1;else if(It(t))r=t.has(s.props.value);else{if(t===n)return;r=lt(t,ki(e,!0))}e.checked!==r&&(e.checked=r)}const Pc={created(e,{value:t},n){e.checked=lt(t,n.props.value),e[Ee]=ct(n),Ye(e,"change",()=>{e[Ee](Rt(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Ee]=ct(s),t!==n&&(e.checked=lt(t,s.props.value))}},Rc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=It(t);Ye(e,"change",()=>{const i=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?Mn(Rt(o)):Rt(o));e[Ee](e.multiple?r?new Set(i):i:i[0]),e._assigning=!0,si(()=>{e._assigning=!1})}),e[Ee]=ct(s)},mounted(e,{value:t}){Mr(e,t)},beforeUpdate(e,t,n){e[Ee]=ct(n)},updated(e,{value:t}){e._assigning||Mr(e,t)}};function Mr(e,t){const n=e.multiple,s=I(t);if(!(n&&!s&&!It(t))){for(let r=0,i=e.options.length;r<i;r++){const o=e.options[r],l=Rt(o);if(n)if(s){const c=typeof l;c==="string"||c==="number"?o.selected=t.some(u=>String(u)===String(l)):o.selected=_s(t,l)>-1}else o.selected=t.has(l);else if(lt(Rt(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Rt(e){return"_value"in e?e._value:e.value}function ki(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Ic={created(e,t,n){dn(e,t,n,null,"created")},mounted(e,t,n){dn(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){dn(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){dn(e,t,n,s,"updated")}};function Fc(e,t){switch(e){case"SELECT":return Rc;case"TEXTAREA":return ds;default:switch(t){case"checkbox":return Oc;case"radio":return Pc;default:return ds}}}function dn(e,t,n,s,r){const o=Fc(e.tagName,n.props&&n.props.type)[r];o&&o(e,t,n,s)}const Lc=["ctrl","shift","alt","meta"],Dc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Lc.some(n=>e[`${n}Key`]&&!t.includes(n))},Nc=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o<t.length;o++){const l=Dc[t[o]];if(l&&l(r,t))return}return e(r,...i)})},$c={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Of=(e,t)=>{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=ft(r.key);if(t.some(o=>o===i||$c[o]===i))return e(r)})},Hc=ie({patchProp:bc},ec);let Or;function jc(){return Or||(Or=Rl(Hc))}const Vc=(...e)=>{const t=jc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Bc(s);if(!r)return;const i=t._component;!H(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Uc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function Uc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Bc(e){return te(e)?document.querySelector(e):e}const Kc="modulepreload",kc=function(e){return"/"+e},Pr={},Wc=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=kc(c),c in Pr)return;Pr[c]=!0;const u=c.endsWith(".css"),a=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=u?"stylesheet":Kc,u||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),u)return new Promise((p,v)=>{h.addEventListener("load",p),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},ge=In({ready:!1,isolation:!1,user:null,adminOwnerUsername:""}),qc=()=>{var e;return ge.isolation&&((e=ge.user)==null?void 0:e.role)==="admin"},Pf=()=>{var e;return ge.isolation?`.user.${((e=ge.user)==null?void 0:e.username)||"anonymous"}`:""};function Gc(e,t="/",n=(s=>(s=globalThis.location)==null?void 0:s.origin)()||"http://localhost"){if(typeof e!="string"&&!(e instanceof URL))return e;const r=String(e);if(!r.startsWith("/")&&!/^https?:\/\//i.test(r))return e;const i=new URL(r,n);if(i.origin!==n||!/^\/(api(?:\/|$)|events(?:\/|$)|vendor(?:\/|$))/.test(i.pathname))return e;const o=`/${t.split("/").filter(Boolean).join("/")}`;return o==="/"?e:(i.pathname=o+i.pathname,`${i.pathname}${i.search}${i.hash}`)}const Jc=e=>Gc(Yc(e));function Yc(e){var s;if(!qc()||!ge.adminOwnerUsername||typeof e!="string"&&!(e instanceof URL))return e;const t=((s=globalThis.location)==null?void 0:s.origin)||"http://localhost",n=new URL(String(e),t);return n.origin!==t||!/^\/(api(?:\/|$)|events(?:\/|$))/.test(n.pathname)||/^\/api\/(auth|admin|login|memory|cpa-quota|cpa-config|prompt-config|plugins|tools)(?:\/|$)/.test(n.pathname)?e:(n.searchParams.set("ownerUsername",ge.adminOwnerUsername),`${n.pathname}${n.search}${n.hash}`)}const Rr=async(e,t)=>{var s;const n=await globalThis.fetch(Jc(e),t);return n.status===401&&!String(e).includes("/api/auth/")&&((s=globalThis.dispatchEvent)==null||s.call(globalThis,new Event("neo-auth-required"))),n},zc=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Xc={key:1,class:"auth-screen","aria-label":"用户登录"},Zc=["aria-busy"],Qc={class:"auth-fields"},ef={class:"icon-field"},tf=["aria-invalid","aria-describedby"],nf={class:"icon-field"},sf=["type","aria-invalid","aria-describedby"],rf=["aria-label","aria-pressed"],of={viewBox:"0 0 24 24","aria-hidden":"true"},lf={key:0,d:"m3 3 18 18"},cf={class:"auth-actions"},ff={class:"status-slot"},af={key:0,id:"auth-error",class:"auth-error",role:"alert"},uf={class:"sr-only"},df=["aria-label","disabled"],hf={key:0,class:"spinner","aria-hidden":"true"},pf={key:1,viewBox:"0 0 24 24","aria-hidden":"true"},gf={key:1,class:"connecting",role:"status","aria-label":"正在连接服务"},mf={key:1,class:"spinner","aria-hidden":"true"},_f={key:2,class:"sr-only",role:"alert"},yf={__name:"AuthGate",setup(e){const t=Xo(()=>Wc(()=>import("./App-BmzKoJTC.js"),__vite__mapDeps([0,1]))),n=ot(""),s=ot(""),r=ot(""),i=ot(!1),o=ot(!1);async function l(){r.value="";try{const h=await Rr("/api/auth/status",{cache:"no-store"});if(!h.ok)throw new Error("无法读取登录状态");const p=await h.json();if(typeof p.isolation!="boolean")throw new Error("登录状态无效");Object.assign(ge,p,{ready:!0})}catch(h){r.value=h.message}}async function c(){var h;if(!i.value){if(!n.value||!s.value){r.value="请输入用户名和密码",(h=document.getElementById(n.value?"auth-password":"auth-username"))==null||h.focus();return}i.value=!0,r.value="";try{const p=await Rr("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:n.value,password:s.value})}),v=await p.json();if(!p.ok)throw new Error(v.error||"登录失败");s.value="",location.reload()}catch(p){r.value=p.message}finally{i.value=!1}}}const u=()=>{ge.user=null,s.value=""};let a;return Ms(async()=>{window.addEventListener("neo-auth-required",u),await l(),a=setInterval(()=>{ge.isolation&&ge.user&&l()},3e4)}),Os(()=>{clearInterval(a),window.removeEventListener("neo-auth-required",u)}),(h,p)=>{var v;return gt(ge).ready&&(!gt(ge).isolation||gt(ge).user)?(ve(),Ii(gt(t),{key:((v=gt(ge).user)==null?void 0:v.username)||"local"})):(ve(),Ae("main",Xc,[p[12]||(p[12]=B("div",{class:"motion-field","aria-hidden":"true"},[B("i",{class:"flow flow-a"}),B("i",{class:"flow flow-b"})],-1)),B("form",{class:Pn(["auth-card",{shaking:r.value}]),"aria-label":"用户登录","aria-busy":i.value,novalidate:"",onSubmit:Nc(c,["prevent"])},[gt(ge).ready?(ve(),Ae(Ce,{key:0},[B("div",Qc,[B("div",ef,[ks(B("input",{id:"auth-username","onUpdate:modelValue":p[0]||(p[0]=C=>n.value=C),"aria-label":"用户名",name:"username",autocomplete:"username",autocapitalize:"none",spellcheck:!1,maxlength:"100",enterkeyhint:"next",required:"","aria-invalid":!!r.value,"aria-describedby":r.value?"auth-error":void 0},null,8,tf),[[ds,n.value]]),p[3]||(p[3]=B("svg",{class:"field-icon",viewBox:"0 0 24 24","aria-hidden":"true"},[B("circle",{cx:"12",cy:"8",r:"3.5"}),B("path",{d:"M5 20c0-4 2.5-6 7-6s7 2 7 6"})],-1)),p[4]||(p[4]=B("i",{class:"field-line","aria-hidden":"true"},null,-1))]),B("div",nf,[ks(B("input",{id:"auth-password","onUpdate:modelValue":p[1]||(p[1]=C=>s.value=C),"aria-label":"密码",name:"password",type:o.value?"text":"password",autocomplete:"current-password",enterkeyhint:"go",required:"","aria-invalid":!!r.value,"aria-describedby":r.value?"auth-error":void 0},null,8,sf),[[Ic,s.value]]),p[7]||(p[7]=B("svg",{class:"field-icon",viewBox:"0 0 24 24","aria-hidden":"true"},[B("rect",{x:"5",y:"10",width:"14",height:"11",rx:"3"}),B("path",{d:"M8 10V7a4 4 0 0 1 8 0v3M12 14v3"})],-1)),p[8]||(p[8]=B("i",{class:"field-line","aria-hidden":"true"},null,-1)),B("button",{class:"password-toggle",type:"button","aria-label":o.value?"隐藏密码":"显示密码","aria-pressed":o.value,onClick:p[2]||(p[2]=C=>o.value=!o.value)},[(ve(),Ae("svg",of,[p[5]||(p[5]=B("path",{d:"M2 12s4-6 10-6 10 6 10 6-4 6-10 6-10-6-10-6Z"},null,-1)),p[6]||(p[6]=B("circle",{cx:"12",cy:"12",r:"3"},null,-1)),o.value?(ve(),Ae("path",lf)):qn("",!0)]))],8,rf)])]),B("div",cf,[B("div",ff,[r.value?(ve(),Ae("div",af,[p[9]||(p[9]=B("svg",{viewBox:"0 0 24 24","aria-hidden":"true"},[B("circle",{cx:"12",cy:"12",r:"9"}),B("path",{d:"M12 7v6m0 3h.01"})],-1)),B("span",uf,zn(r.value),1)])):qn("",!0)]),B("button",{class:"submit-button",type:"submit","aria-label":i.value?"正在验证":"登录",disabled:i.value},[i.value?(ve(),Ae("i",hf)):(ve(),Ae("svg",pf,[...p[10]||(p[10]=[B("path",{d:"M5 12h14m-6-6 6 6-6 6"},null,-1)])]))],8,df)])],64)):(ve(),Ae("div",gf,[r.value?(ve(),Ae("button",{key:0,class:"retry-button",type:"button","aria-label":"重试",onClick:l},[...p[11]||(p[11]=[B("svg",{viewBox:"0 0 24 24","aria-hidden":"true"},[B("path",{d:"M20 7v5h-5M20 12a8 8 0 1 0-2 6"})],-1)])])):(ve(),Ae("i",mf)),r.value?(ve(),Ae("span",_f,zn(r.value),1)):qn("",!0)]))],42,Zc)]))}}},bf=zc(yf,[["__scopeId","data-v-67ef8410"]]);Vc(bf).mount("#app");export{Tf as A,Ii as B,qc as C,ge as D,Pf as E,Ce as F,Af as G,ye as H,Jc as I,$o as J,Mf as K,Ic as L,Oc as M,Pc as N,Cf as T,zc as _,ve as a,qn as b,Ae as c,Rr as d,Ef as e,B as f,ot as g,Sf as h,xf as i,zl as j,Ms as k,si as l,jl as m,Pn as n,Os as o,ks as p,ds as q,In as r,wf as s,zn as t,gt as u,Rc as v,Kn as w,Of as x,Nc as y,ms as z};
|
package/dist/index.html
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
})()
|
|
20
20
|
</script>
|
|
21
21
|
<title>neo runtime</title>
|
|
22
|
-
<script type="module" crossorigin src="/assets/index-
|
|
22
|
+
<script type="module" crossorigin src="/assets/index-tzg05Zu1.js"></script>
|
|
23
23
|
<link rel="stylesheet" crossorigin href="/assets/index-BXAwT7V2.css">
|
|
24
24
|
</head>
|
|
25
25
|
<body>
|