@tea-agent/loop-agent 0.44.0-next.2 → 0.44.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -0
- package/dist/build-stamp.json +3 -3
- package/dist/worker/console/chat/db-connections.js +48 -16
- package/dist/worker/console/chat/pi-runtime.js +3 -3
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-B8EdIjdl.js → abnfDiagram-N423BO3Z-COQlLTI7.js} +1 -1
- package/dist/worker/console/static/assets/{arc-CUaduV17.js → arc-zN3QkNaV.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-bYAcxRaf.js → architectureDiagram-T3A2C74G-Pyoyj5f2.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-FfhFUEMJ.js → blockDiagram-VBNYF7ZC-BNppA5WW.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-0Rqwn2_U.js → c4Diagram-5PPSVZJV-lyxL8nTx.js} +1 -1
- package/dist/worker/console/static/assets/channel-CgLPkTw2.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-D4FbDmsM.js → chunk-2GRJ4B5K-0hgjcdK4.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-C2nu32ml.js → chunk-2Q5K7J3B-D63N9d4i.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-G2tHSClK.js → chunk-5RXB4S5H-CUw2AyB5.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-181nyzuH.js → chunk-5VM5RSS4-Q_kwZT30.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-D091VbiQ.js → chunk-6Q2QTUOP-C7vMiKcw.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-BjrMCKTH.js → chunk-GF5L2VYU-T9GbV5Hz.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-T3zFHTpb.js → chunk-JWPE2WC7-D8nUSUJI.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-CIB7wrYq.js → chunk-KBJHAD2P-BCH2ewdp.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-HwnAsgDw.js → chunk-RYQCIY6F-BTdDuDBN.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CQSdQAqo.js → chunk-XXDRQBXY-Cqm2RcKF.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-CuSD1Mhb.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-CuSD1Mhb.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CyBVLpjP.js → cose-bilkent-JH36ORCC-pjwfpVu4.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-D2Pf3U7m.js → cynefin-VYW2F7L2-BvalptKA.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-CzXuQ1a2.js → cynefinDiagram-MW4NZA55-BU4qJ6d7.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-9cMmcOsQ.js → dagre-VZM6K2ZE-DVTpq8J9.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-DTOr8GLs.js → diagram-7IWD3JNH-B8s1W6Fc.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-B8saqFHU.js → diagram-B4RE2ZJO-DPrFk9yH.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-Bvygp--w.js → diagram-LBJQPF4R-CnQIQsHC.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-CJyLwBhZ.js → diagram-Q27KOJAE-op0DEpCv.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-CkR1FDRN.js → diagram-UB23O5K3-DXQamm4T.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BsbNtwvi.js → ebnfDiagram-BXEA7PRR-b1ad2C0r.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-EVZo9AKy.js → erDiagram-JOGREHBK-B4cD-ZFJ.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-C1x91tWN.js → flowDiagram-UKHOOZJN-CrgGjlQ1.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CiNBUsrJ.js → ganttDiagram-PKOTCBZU-DovmXQNV.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-CSd50p3d.js → gitGraphDiagram-DS77QQ5N-DpFyu2Jn.js} +1 -1
- package/dist/worker/console/static/assets/{index-RFWQLUE-.js → index-JRfTUgP7.js} +5 -5
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-1JDiYCuA.js → infoDiagram-6WML65LV-D3MoQZIl.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-BZLE6zpm.js → ishikawaDiagram-WSZJBQD7-Ci6C1yjS.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-Cg0nDmbe.js → journeyDiagram-NVQOT4AX-BWMo2lIP.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-DcwEdKjq.js → kanban-definition-27J2QSJJ-BdthIAg3.js} +1 -1
- package/dist/worker/console/static/assets/{linear-CXvVge5x.js → linear-DuFAlSOj.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-5R4WTYSN.js → mermaid.core-Dqz3Slj9.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-By9pSeeq.js → mindmap-definition-FAOFIHXS-DNVTrD09.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DzbVZTqW.js → pegDiagram-VL7TDLO6-CgfZPfBh.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-B9nbfnAq.js → pieDiagram-7S7Q4E2Y-ClM9P7yo.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-D268jfWH.js → quadrantDiagram-CIZ2JOQS-DwnEak2J.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-oNOXPRNn.js → railroadDiagram-AXF67PYL-rK4hxt9P.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DXdr8K-4.js → requirementDiagram-LRYGKXZP-Cjqa6vo3.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Dtm4uOJ0.js → sankeyDiagram-W5VNT64P-D3Fa250Z.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-CeeFiof4.js → sequenceDiagram-SI44F4Z6-2PdrNajj.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CK1gARll.js → sizeCapture-X5ZJPWSS-BBcuGeZn.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-3jMoAcZw.js → stateDiagram-OKZ733FA-CSJX9X6s.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cqskj0zt.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-Div6kwoD.js → swimlanes-SLNWSIFB-pOUU1bic.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CM0ZIhNP.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-B7P_6Up9.js → timeline-definition-Z64GVDOM-CAeqfQn0.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-eOPaGUOX.js → vennDiagram-T6HMQDX7-DYPLOMVO.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-tAcDnb31.js → wardleyDiagram-T6FBY63Y-Dy2V0Cha.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-Dg_r_785.js → xychartDiagram-ELKLHX3M-Dj9o7jrn.js} +1 -1
- package/dist/worker/console/static/index.html +1 -1
- package/dist/worker/console/workspace-context.js +1 -0
- package/dist/worker/observe/static/console-theme.css +174 -0
- package/dist/worker/observe/static/console-theme.js +36 -0
- package/dist/worker/observe/static/operator-chrome.css +85 -0
- package/dist/worker/observe/static/operator-chrome.js +51 -0
- package/package.json +1 -1
- package/dist/worker/console/static/assets/channel-ICokO4I1.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0c0PBcA.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0c0PBcA.js +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cr_kaxrX.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bl4fQmZh.js +0 -8
|
@@ -305,13 +305,13 @@ l0,-`+(n+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,
|
|
|
305
305
|
|[ \r ]+
|
|
306
306
|
?)[ \r ]*`,Cv="[̀-ͯ]",YB=new RegExp(Cv+"+$"),XB="("+Zk+"+)|"+(KB+"|")+"([!-\\[\\]-‧-豈-]"+(Cv+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(Cv+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+VB)+("|"+WB+")");class rw{constructor(t,n){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=n,this.tokenRegex=new RegExp(XB,"g"),this.catcodes={"%":14,"~":13}}setCatcode(t,n){this.catcodes[t]=n}lex(){var t=this.input,n=this.tokenRegex.lastIndex;if(n===t.length)return new ji("EOF",new bi(this,n,n));var r=this.tokenRegex.exec(t);if(r===null||r.index!==n)throw new Qe("Unexpected character: '"+t[n]+"'",new ji(t[n],new bi(this,n,n+1)));var i=r[6]||r[3]||(r[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=t.indexOf(`
|
|
307
307
|
`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new ji(i,new bi(this,n,this.tokenRegex.lastIndex))}}class ZB{constructor(t,n){t===void 0&&(t={}),n===void 0&&(n={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=n,this.builtins=t,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new Qe("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var n in t)t.hasOwnProperty(n)&&(t[n]==null?delete this.current[n]:this.current[n]=t[n])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)}get(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]}set(t,n,r){if(r===void 0&&(r=!1),r){for(var i=0;i<this.undefStack.length;i++)delete this.undefStack[i][t];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][t]=n)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(t)&&(a[t]=this.current[t])}n==null?delete this.current[t]:this.current[t]=n}}var QB=Hk;J("\\noexpand",function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}});J("\\expandafter",function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}});J("\\@firstoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[0],numArgs:0}});J("\\@secondoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[1],numArgs:0}});J("\\@ifnextchar",function(e){var t=e.consumeArgs(3);e.consumeSpaces();var n=e.future();return t[0].length===1&&t[0][0].text===n.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}});J("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");J("\\TextOrMath",function(e){var t=e.consumeArgs(2);return e.mode==="text"?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}});var iw={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};J("\\char",function(e){var t=e.popToken(),n,r=0;if(t.text==="'")n=8,t=e.popToken();else if(t.text==='"')n=16,t=e.popToken();else if(t.text==="`")if(t=e.popToken(),t.text[0]==="\\")r=t.text.charCodeAt(1);else{if(t.text==="EOF")throw new Qe("\\char` missing argument");r=t.text.charCodeAt(0)}else n=10;if(n){if(r=iw[t.text],r==null||r>=n)throw new Qe("Invalid base-"+n+" digit "+t.text);for(var i;(i=iw[e.future().text])!=null&&i<n;)r*=n,r+=i,e.popToken()}return"\\@char{"+r+"}"});var uy=(e,t,n,r)=>{var i=e.consumeArg().tokens;if(i.length!==1)throw new Qe("\\newcommand's first argument must be a macro name");var a=i[0].text,l=e.isDefined(a);if(l&&!t)throw new Qe("\\newcommand{"+a+"} attempting to redefine "+(a+"; use \\renewcommand"));if(!l&&!n)throw new Qe("\\renewcommand{"+a+"} when command "+a+" does not yet exist; use \\newcommand");var u=0;if(i=e.consumeArg().tokens,i.length===1&&i[0].text==="["){for(var h="",f=e.expandNextToken();f.text!=="]"&&f.text!=="EOF";)h+=f.text,f=e.expandNextToken();if(!h.match(/^\s*[0-9]+\s*$/))throw new Qe("Invalid number of arguments: "+h);u=parseInt(h),i=e.consumeArg().tokens}return l&&r||e.macros.set(a,{tokens:i,numArgs:u}),""};J("\\newcommand",e=>uy(e,!1,!0,!1));J("\\renewcommand",e=>uy(e,!0,!1,!1));J("\\providecommand",e=>uy(e,!0,!0,!0));J("\\message",e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(n=>n.text).join("")),""});J("\\errmessage",e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(n=>n.text).join("")),""});J("\\show",e=>{var t=e.popToken(),n=t.text;return console.log(t,e.macros.get(n),ao[n],jn.math[n],jn.text[n]),""});J("\\bgroup","{");J("\\egroup","}");J("~","\\nobreakspace");J("\\lq","`");J("\\rq","'");J("\\aa","\\r a");J("\\AA","\\r A");J("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");J("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");J("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");J("ℬ","\\mathscr{B}");J("ℰ","\\mathscr{E}");J("ℱ","\\mathscr{F}");J("ℋ","\\mathscr{H}");J("ℐ","\\mathscr{I}");J("ℒ","\\mathscr{L}");J("ℳ","\\mathscr{M}");J("ℛ","\\mathscr{R}");J("ℭ","\\mathfrak{C}");J("ℌ","\\mathfrak{H}");J("ℨ","\\mathfrak{Z}");J("\\Bbbk","\\Bbb{k}");J("\\llap","\\mathllap{\\textrm{#1}}");J("\\rlap","\\mathrlap{\\textrm{#1}}");J("\\clap","\\mathclap{\\textrm{#1}}");J("\\mathstrut","\\vphantom{(}");J("\\underbar","\\underline{\\text{#1}}");J("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');J("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");J("\\ne","\\neq");J("≠","\\neq");J("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");J("∉","\\notin");J("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");J("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");J("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");J("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");J("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");J("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");J("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");J("⟂","\\perp");J("‼","\\mathclose{!\\mkern-0.8mu!}");J("∌","\\notni");J("⌜","\\ulcorner");J("⌝","\\urcorner");J("⌞","\\llcorner");J("⌟","\\lrcorner");J("©","\\copyright");J("®","\\textregistered");J("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');J("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');J("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');J("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');J("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");J("⋮","\\vdots");J("\\varGamma","\\mathit{\\Gamma}");J("\\varDelta","\\mathit{\\Delta}");J("\\varTheta","\\mathit{\\Theta}");J("\\varLambda","\\mathit{\\Lambda}");J("\\varXi","\\mathit{\\Xi}");J("\\varPi","\\mathit{\\Pi}");J("\\varSigma","\\mathit{\\Sigma}");J("\\varUpsilon","\\mathit{\\Upsilon}");J("\\varPhi","\\mathit{\\Phi}");J("\\varPsi","\\mathit{\\Psi}");J("\\varOmega","\\mathit{\\Omega}");J("\\substack","\\begin{subarray}{c}#1\\end{subarray}");J("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");J("\\boxed","\\fbox{$\\displaystyle{#1}$}");J("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");J("\\implies","\\DOTSB\\;\\Longrightarrow\\;");J("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");J("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");J("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var sw={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"},JB=new Set(["bin","rel"]);J("\\dots",function(e){var t="\\dotso",n=e.expandAfterFuture().text;return n in sw?t=sw[n]:(n.slice(0,4)==="\\not"||n in jn.math&&JB.has(jn.math[n].group))&&(t="\\dotsb"),t});var dy={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};J("\\dotso",function(e){var t=e.future().text;return t in dy?"\\ldots\\,":"\\ldots"});J("\\dotsc",function(e){var t=e.future().text;return t in dy&&t!==","?"\\ldots\\,":"\\ldots"});J("\\cdots",function(e){var t=e.future().text;return t in dy?"\\@cdots\\,":"\\@cdots"});J("\\dotsb","\\cdots");J("\\dotsm","\\cdots");J("\\dotsi","\\!\\cdots");J("\\dotsx","\\ldots\\,");J("\\DOTSI","\\relax");J("\\DOTSB","\\relax");J("\\DOTSX","\\relax");J("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");J("\\,","\\tmspace+{3mu}{.1667em}");J("\\thinspace","\\,");J("\\>","\\mskip{4mu}");J("\\:","\\tmspace+{4mu}{.2222em}");J("\\medspace","\\:");J("\\;","\\tmspace+{5mu}{.2777em}");J("\\thickspace","\\;");J("\\!","\\tmspace-{3mu}{.1667em}");J("\\negthinspace","\\!");J("\\negmedspace","\\tmspace-{4mu}{.2222em}");J("\\negthickspace","\\tmspace-{5mu}{.277em}");J("\\enspace","\\kern.5em ");J("\\enskip","\\hskip.5em\\relax");J("\\quad","\\hskip1em\\relax");J("\\qquad","\\hskip2em\\relax");J("\\tag","\\@ifstar\\tag@literal\\tag@paren");J("\\tag@paren","\\tag@literal{({#1})}");J("\\tag@literal",e=>{if(e.macros.get("\\df@tag"))throw new Qe("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});J("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");J("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");J("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");J("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");J("\\newline","\\\\\\relax");J("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Qk=rt(Ts["Main-Regular"][84][1]-.7*Ts["Main-Regular"][65][1]);J("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+Qk+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");J("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+Qk+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");J("\\hspace","\\@ifstar\\@hspacer\\@hspace");J("\\@hspace","\\hskip #1\\relax");J("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");J("\\ordinarycolon",":");J("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");J("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');J("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');J("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');J("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');J("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');J("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');J("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');J("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');J("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');J("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');J("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');J("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');J("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');J("∷","\\dblcolon");J("∹","\\eqcolon");J("≔","\\coloneqq");J("≕","\\eqqcolon");J("⩴","\\Coloneqq");J("\\ratio","\\vcentcolon");J("\\coloncolon","\\dblcolon");J("\\colonequals","\\coloneqq");J("\\coloncolonequals","\\Coloneqq");J("\\equalscolon","\\eqqcolon");J("\\equalscoloncolon","\\Eqqcolon");J("\\colonminus","\\coloneq");J("\\coloncolonminus","\\Coloneq");J("\\minuscolon","\\eqcolon");J("\\minuscoloncolon","\\Eqcolon");J("\\coloncolonapprox","\\Colonapprox");J("\\coloncolonsim","\\Colonsim");J("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");J("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");J("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");J("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");J("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");J("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");J("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");J("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");J("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");J("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");J("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");J("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");J("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");J("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");J("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");J("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");J("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");J("\\nleqq","\\html@mathml{\\@nleqq}{≰}");J("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");J("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");J("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");J("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");J("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");J("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");J("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");J("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");J("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");J("\\imath","\\html@mathml{\\@imath}{ı}");J("\\jmath","\\html@mathml{\\@jmath}{ȷ}");J("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");J("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");J("⟦","\\llbracket");J("⟧","\\rrbracket");J("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");J("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");J("⦃","\\lBrace");J("⦄","\\rBrace");J("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");J("⦵","\\minuso");J("\\darr","\\downarrow");J("\\dArr","\\Downarrow");J("\\Darr","\\Downarrow");J("\\lang","\\langle");J("\\rang","\\rangle");J("\\uarr","\\uparrow");J("\\uArr","\\Uparrow");J("\\Uarr","\\Uparrow");J("\\N","\\mathbb{N}");J("\\R","\\mathbb{R}");J("\\Z","\\mathbb{Z}");J("\\alef","\\aleph");J("\\alefsym","\\aleph");J("\\Alpha","\\mathrm{A}");J("\\Beta","\\mathrm{B}");J("\\bull","\\bullet");J("\\Chi","\\mathrm{X}");J("\\clubs","\\clubsuit");J("\\cnums","\\mathbb{C}");J("\\Complex","\\mathbb{C}");J("\\Dagger","\\ddagger");J("\\diamonds","\\diamondsuit");J("\\empty","\\emptyset");J("\\Epsilon","\\mathrm{E}");J("\\Eta","\\mathrm{H}");J("\\exist","\\exists");J("\\harr","\\leftrightarrow");J("\\hArr","\\Leftrightarrow");J("\\Harr","\\Leftrightarrow");J("\\hearts","\\heartsuit");J("\\image","\\Im");J("\\infin","\\infty");J("\\Iota","\\mathrm{I}");J("\\isin","\\in");J("\\Kappa","\\mathrm{K}");J("\\larr","\\leftarrow");J("\\lArr","\\Leftarrow");J("\\Larr","\\Leftarrow");J("\\lrarr","\\leftrightarrow");J("\\lrArr","\\Leftrightarrow");J("\\Lrarr","\\Leftrightarrow");J("\\Mu","\\mathrm{M}");J("\\natnums","\\mathbb{N}");J("\\Nu","\\mathrm{N}");J("\\Omicron","\\mathrm{O}");J("\\plusmn","\\pm");J("\\rarr","\\rightarrow");J("\\rArr","\\Rightarrow");J("\\Rarr","\\Rightarrow");J("\\real","\\Re");J("\\reals","\\mathbb{R}");J("\\Reals","\\mathbb{R}");J("\\Rho","\\mathrm{P}");J("\\sdot","\\cdot");J("\\sect","\\S");J("\\spades","\\spadesuit");J("\\sub","\\subset");J("\\sube","\\subseteq");J("\\supe","\\supseteq");J("\\Tau","\\mathrm{T}");J("\\thetasym","\\vartheta");J("\\weierp","\\wp");J("\\Zeta","\\mathrm{Z}");J("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");J("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");J("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");J("\\bra","\\mathinner{\\langle{#1}|}");J("\\ket","\\mathinner{|{#1}\\rangle}");J("\\braket","\\mathinner{\\langle{#1}\\rangle}");J("\\Bra","\\left\\langle#1\\right|");J("\\Ket","\\left|#1\\right\\rangle");var Jk=e=>t=>{var n=t.consumeArg().tokens,r=t.consumeArg().tokens,i=t.consumeArg().tokens,a=t.consumeArg().tokens,l=t.macros.get("|"),u=t.macros.get("\\|");t.macros.beginGroup();var h=g=>y=>{e&&(y.macros.set("|",l),i.length&&y.macros.set("\\|",u));var v=g;if(!g&&i.length){var S=y.future();S.text==="|"&&(y.popToken(),v=!0)}return{tokens:v?i:r,numArgs:0}};t.macros.set("|",h(!1)),i.length&&t.macros.set("\\|",h(!0));var f=t.consumeArg().tokens,p=t.expandTokens([...a,...f,...n]);return t.macros.endGroup(),{tokens:p.reverse(),numArgs:0}};J("\\bra@ket",Jk(!1));J("\\bra@set",Jk(!0));J("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");J("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");J("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");J("\\angln","{\\angl n}");J("\\blue","\\textcolor{##6495ed}{#1}");J("\\orange","\\textcolor{##ffa500}{#1}");J("\\pink","\\textcolor{##ff00af}{#1}");J("\\red","\\textcolor{##df0030}{#1}");J("\\green","\\textcolor{##28ae7b}{#1}");J("\\gray","\\textcolor{gray}{#1}");J("\\purple","\\textcolor{##9d38bd}{#1}");J("\\blueA","\\textcolor{##ccfaff}{#1}");J("\\blueB","\\textcolor{##80f6ff}{#1}");J("\\blueC","\\textcolor{##63d9ea}{#1}");J("\\blueD","\\textcolor{##11accd}{#1}");J("\\blueE","\\textcolor{##0c7f99}{#1}");J("\\tealA","\\textcolor{##94fff5}{#1}");J("\\tealB","\\textcolor{##26edd5}{#1}");J("\\tealC","\\textcolor{##01d1c1}{#1}");J("\\tealD","\\textcolor{##01a995}{#1}");J("\\tealE","\\textcolor{##208170}{#1}");J("\\greenA","\\textcolor{##b6ffb0}{#1}");J("\\greenB","\\textcolor{##8af281}{#1}");J("\\greenC","\\textcolor{##74cf70}{#1}");J("\\greenD","\\textcolor{##1fab54}{#1}");J("\\greenE","\\textcolor{##0d923f}{#1}");J("\\goldA","\\textcolor{##ffd0a9}{#1}");J("\\goldB","\\textcolor{##ffbb71}{#1}");J("\\goldC","\\textcolor{##ff9c39}{#1}");J("\\goldD","\\textcolor{##e07d10}{#1}");J("\\goldE","\\textcolor{##a75a05}{#1}");J("\\redA","\\textcolor{##fca9a9}{#1}");J("\\redB","\\textcolor{##ff8482}{#1}");J("\\redC","\\textcolor{##f9685d}{#1}");J("\\redD","\\textcolor{##e84d39}{#1}");J("\\redE","\\textcolor{##bc2612}{#1}");J("\\maroonA","\\textcolor{##ffbde0}{#1}");J("\\maroonB","\\textcolor{##ff92c6}{#1}");J("\\maroonC","\\textcolor{##ed5fa6}{#1}");J("\\maroonD","\\textcolor{##ca337c}{#1}");J("\\maroonE","\\textcolor{##9e034e}{#1}");J("\\purpleA","\\textcolor{##ddd7ff}{#1}");J("\\purpleB","\\textcolor{##c6b9fc}{#1}");J("\\purpleC","\\textcolor{##aa87ff}{#1}");J("\\purpleD","\\textcolor{##7854ab}{#1}");J("\\purpleE","\\textcolor{##543b78}{#1}");J("\\mintA","\\textcolor{##f5f9e8}{#1}");J("\\mintB","\\textcolor{##edf2df}{#1}");J("\\mintC","\\textcolor{##e0e5cc}{#1}");J("\\grayA","\\textcolor{##f6f7f7}{#1}");J("\\grayB","\\textcolor{##f0f1f2}{#1}");J("\\grayC","\\textcolor{##e3e5e6}{#1}");J("\\grayD","\\textcolor{##d6d8da}{#1}");J("\\grayE","\\textcolor{##babec2}{#1}");J("\\grayF","\\textcolor{##888d93}{#1}");J("\\grayG","\\textcolor{##626569}{#1}");J("\\grayH","\\textcolor{##3b3e40}{#1}");J("\\grayI","\\textcolor{##21242c}{#1}");J("\\kaBlue","\\textcolor{##314453}{#1}");J("\\kaGreen","\\textcolor{##71B307}{#1}");var e8={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class ez{constructor(t,n,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=n,this.expansionCount=0,this.feed(t),this.macros=new ZB(QB,n.macros),this.mode=r,this.stack=[]}feed(t){this.lexer=new rw(t,this.settings)}switchMode(t){this.mode=t}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(t){this.stack.push(t)}pushTokens(t){this.stack.push(...t)}scanArgument(t){var n,r,i;if(t){if(this.consumeSpaces(),this.future().text!=="[")return null;n=this.popToken(),{tokens:i,end:r}=this.consumeArg(["]"])}else({tokens:i,start:n,end:r}=this.consumeArg());return this.pushToken(new ji("EOF",r.loc)),this.pushTokens(i),new ji("",bi.range(n,r))}consumeSpaces(){for(;;){var t=this.future();if(t.text===" ")this.stack.pop();else break}}consumeArg(t){var n=[],r=t&&t.length>0;r||this.consumeSpaces();var i=this.future(),a,l=0,u=0;do{if(a=this.popToken(),n.push(a),a.text==="{")++l;else if(a.text==="}"){if(--l,l===-1)throw new Qe("Extra }",a)}else if(a.text==="EOF")throw new Qe("Unexpected end of input in a macro argument, expected '"+(t&&r?t[u]:"}")+"'",a);if(t&&r)if((l===0||l===1&&t[u]==="{")&&a.text===t[u]){if(++u,u===t.length){n.splice(-u,u);break}}else u=0}while(l!==0||r);return i.text==="{"&&n[n.length-1].text==="}"&&(n.pop(),n.shift()),n.reverse(),{tokens:n,start:i,end:a}}consumeArgs(t,n){if(n){if(n.length!==t+1)throw new Qe("The length of delimiters doesn't match the number of args!");for(var r=n[0],i=0;i<r.length;i++){var a=this.popToken();if(r[i]!==a.text)throw new Qe("Use of the macro doesn't match its definition",a)}}for(var l=[],u=0;u<t;u++)l.push(this.consumeArg(n&&n[u+1]).tokens);return l}countExpansion(t){if(this.expansionCount+=t,this.expansionCount>this.settings.maxExpand)throw new Qe("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(t){var n=this.popToken(),r=n.text,i=n.noexpand?null:this._getExpansion(r);if(i==null||t&&i.unexpandable){if(t&&i==null&&r[0]==="\\"&&!this.isDefined(r))throw new Qe("Undefined control sequence: "+r);return this.pushToken(n),!1}this.countExpansion(1);var a=i.tokens,l=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var u=a.length-1;u>=0;--u){var h=a[u];if(h.text==="#"){if(u===0)throw new Qe("Incomplete placeholder at end of macro body",h);if(h=a[--u],h.text==="#")a.splice(u+1,1);else if(/^[1-9]$/.test(h.text))a.splice(u,2,...l[+h.text-1]);else throw new Qe("Not a valid argument number",h)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var t=this.stack.pop();return t.treatAsRelax&&(t.text="\\relax"),t}}expandMacro(t){return this.macros.has(t)?this.expandTokens([new ji(t)]):void 0}expandTokens(t){var n=[],r=this.stack.length;for(this.pushTokens(t);this.stack.length>r;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),n.push(i)}return this.countExpansion(n.length),n}expandMacroAsText(t){var n=this.expandMacro(t);return n&&n.map(r=>r.text).join("")}_getExpansion(t){var n=this.macros.get(t);if(n==null)return n;if(t.length===1){var r=this.lexer.catcodes[t];if(r!=null&&r!==13)return}var i=typeof n=="function"?n(this):n;if(typeof i=="string"){var a=0;if(i.includes("#"))for(var l=i.replace(/##/g,"");l.includes("#"+(a+1));)++a;for(var u=new rw(i,this.settings),h=[],f=u.lex();f.text!=="EOF";)h.push(f),f=u.lex();h.reverse();var p={tokens:h,numArgs:a};return p}return i}isDefined(t){return this.macros.has(t)||ao.hasOwnProperty(t)||jn.math.hasOwnProperty(t)||jn.text.hasOwnProperty(t)||e8.hasOwnProperty(t)}isExpandable(t){var n=this.macros.get(t);return n!=null?typeof n=="string"||typeof n=="function"||!n.unexpandable:ao.hasOwnProperty(t)&&!ao[t].primitive}}var aw=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Bh=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),yg={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ow={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class _0{constructor(t,n){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new ez(t,n,this.mode),this.settings=n,this.leftrightDepth=0,this.nextToken=null}expect(t,n){if(n===void 0&&(n=!0),this.fetch().text!==t)throw new Qe("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());n&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(t){this.mode=t,this.gullet.switchMode(t)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var t=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),t}finally{this.gullet.endGroups()}}subparse(t){var n=this.nextToken;this.consume(),this.gullet.pushToken(new ji("}")),this.gullet.pushTokens(t);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=n,r}parseExpression(t,n){for(var r=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(_0.endOfExpression.has(i.text)||n&&i.text===n||t&&ao[i.text]&&ao[i.text].infix)break;var a=this.parseAtom(n);if(a){if(a.type==="internal")continue}else break;r.push(a)}return this.mode==="text"&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(t){for(var n=-1,r,i=0;i<t.length;i++){var a=t[i];if(a.type==="infix"){if(n!==-1)throw new Qe("only one infix operator per group",a.token);n=i,r=a.replaceWith}}if(n!==-1&&r){var l,u,h=t.slice(0,n),f=t.slice(n+1);h.length===1&&h[0].type==="ordgroup"?l=h[0]:l={type:"ordgroup",mode:this.mode,body:h},f.length===1&&f[0].type==="ordgroup"?u=f[0]:u={type:"ordgroup",mode:this.mode,body:f};var p;return r==="\\\\abovefrac"?p=this.callFunction(r,[l,t[n],u],[]):p=this.callFunction(r,[l,u],[]),[p]}else return t}handleSupSubscript(t){var n=this.fetch(),r=n.text;this.consume(),this.consumeSpaces();var i;do{var a;i=this.parseGroup(t)}while(((a=i)==null?void 0:a.type)==="internal");if(!i)throw new Qe("Expected group after '"+r+"'",n);return i}formatUnsupportedCmd(t){for(var n=[],r=0;r<t.length;r++)n.push({type:"textord",mode:"text",text:t[r]});var i={type:"text",mode:this.mode,body:n},a={type:"color",mode:this.mode,color:this.settings.errorColor,body:[i]};return a}parseAtom(t){var n=this.parseGroup("atom",t);if(n?.type==="internal"||this.mode==="text")return n;for(var r,i;;){this.consumeSpaces();var a=this.fetch();if(a.text==="\\limits"||a.text==="\\nolimits"){if(n&&n.type==="op"){var l=a.text==="\\limits";n.limits=l,n.alwaysHandleSupSub=!0}else if(n&&n.type==="operatorname")n.alwaysHandleSupSub&&(n.limits=a.text==="\\limits");else throw new Qe("Limit controls must follow a math operator",a);this.consume()}else if(a.text==="^"){if(r)throw new Qe("Double superscript",a);r=this.handleSupSubscript("superscript")}else if(a.text==="_"){if(i)throw new Qe("Double subscript",a);i=this.handleSupSubscript("subscript")}else if(a.text==="'"){if(r)throw new Qe("Double superscript",a);var u={type:"textord",mode:this.mode,text:"\\prime"},h=[u];for(this.consume();this.fetch().text==="'";)h.push(u),this.consume();this.fetch().text==="^"&&h.push(this.handleSupSubscript("superscript")),r={type:"ordgroup",mode:this.mode,body:h}}else if(Bh[a.text]){var f=aw.test(a.text),p=[];for(p.push(new ji(Bh[a.text])),this.consume();;){var g=this.fetch().text;if(!Bh[g]||aw.test(g)!==f)break;p.unshift(new ji(Bh[g])),this.consume()}var y=this.subparse(p);f?i={type:"ordgroup",mode:"math",body:y}:r={type:"ordgroup",mode:"math",body:y}}else break}return r||i?{type:"supsub",mode:this.mode,base:n,sup:r,sub:i}:n}parseFunction(t,n){var r=this.fetch(),i=r.text,a=ao[i];if(!a)return null;if(this.consume(),n&&n!=="atom"&&!a.allowedInArgument)throw new Qe("Got function '"+i+"' with no arguments"+(n?" as "+n:""),r);if(this.mode==="text"&&!a.allowedInText)throw new Qe("Can't use function '"+i+"' in text mode",r);if(this.mode==="math"&&a.allowedInMath===!1)throw new Qe("Can't use function '"+i+"' in math mode",r);var{args:l,optArgs:u}=this.parseArguments(i,a);return this.callFunction(i,l,u,r,t)}callFunction(t,n,r,i,a){var l={funcName:t,parser:this,token:i,breakOnTokenText:a},u=ao[t];if(u&&u.handler)return u.handler(l,n,r);throw new Qe("No function handler for "+t)}parseArguments(t,n){var r=n.numArgs+n.numOptionalArgs;if(r===0)return{args:[],optArgs:[]};for(var i=[],a=[],l=0;l<r;l++){var u=n.argTypes&&n.argTypes[l],h=l<n.numOptionalArgs;("primitive"in n&&n.primitive&&u==null||n.type==="sqrt"&&l===1&&a[0]==null)&&(u="primitive");var f=this.parseGroupOfType("argument to '"+t+"'",u,h);if(h)a.push(f);else if(f!=null)i.push(f);else throw new Qe("Null argument, please report this as a bug")}return{args:i,optArgs:a}}parseGroupOfType(t,n,r){switch(n){case"color":return this.parseColorGroup(r);case"size":return this.parseSizeGroup(r);case"url":return this.parseUrlGroup(r);case"math":case"text":return this.parseArgumentGroup(r,n);case"hbox":{var i=this.parseArgumentGroup(r,"text");return i!=null?{type:"styling",mode:i.mode,body:[i],style:"text",resetFont:!0}:null}case"raw":{var a=this.parseStringGroup("raw",r);return a!=null?{type:"raw",mode:"text",string:a.text}:null}case"primitive":{if(r)throw new Qe("A primitive argument cannot be optional");var l=this.parseGroup(t);if(l==null)throw new Qe("Expected group as "+t,this.fetch());return l}case"original":case null:case void 0:return this.parseArgumentGroup(r);default:throw new Qe("Unknown group type as "+t,this.fetch())}}consumeSpaces(){for(;this.fetch().text===" ";)this.consume()}parseStringGroup(t,n){var r=this.gullet.scanArgument(n);if(r==null)return null;for(var i="",a;(a=this.fetch()).text!=="EOF";)i+=a.text,this.consume();return this.consume(),r.text=i,r}parseRegexGroup(t,n){for(var r=this.fetch(),i=r,a="",l;(l=this.fetch()).text!=="EOF"&&t.test(a+l.text);)i=l,a+=i.text,this.consume();if(a==="")throw new Qe("Invalid "+n+": '"+r.text+"'",r);return r.range(i,a)}parseColorGroup(t){var n=this.parseStringGroup("color",t);if(n==null)return null;var r=/^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(n.text);if(!r)throw new Qe("Invalid color: '"+n.text+"'",n);var i=r[0];return/^[0-9a-f]{6}$/i.test(i)&&(i="#"+i),{type:"color-token",mode:this.mode,color:i}}parseSizeGroup(t){var n,r=!1;if(this.gullet.consumeSpaces(),!t&&this.gullet.future().text!=="{"?n=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"):n=this.parseStringGroup("size",t),!n)return null;!t&&n.text.length===0&&(n.text="0pt",r=!0);var i=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(n.text);if(!i)throw new Qe("Invalid size: '"+n.text+"'",n);var a={number:+(i[1]+i[2]),unit:i[3]};if(!ok(a))throw new Qe("Invalid unit: '"+a.unit+"'",n);return{type:"size",mode:this.mode,value:a,isBlank:r}}parseUrlGroup(t){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var n=this.parseStringGroup("url",t);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),n==null)return null;var r=n.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:r}}parseArgumentGroup(t,n){var r=this.gullet.scanArgument(t);if(r==null)return null;var i=this.mode;n&&this.switchMode(n),this.gullet.beginGroup();var a=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var l={type:"ordgroup",mode:this.mode,loc:r.loc,body:a};return n&&this.switchMode(i),l}parseGroup(t,n){var r=this.fetch(),i=r.text,a;if(i==="{"||i==="\\begingroup"){this.consume();var l=i==="{"?"}":"\\endgroup";this.gullet.beginGroup();var u=this.parseExpression(!1,l),h=this.fetch();this.expect(l),this.gullet.endGroup(),a={type:"ordgroup",mode:this.mode,loc:bi.range(r,h),body:u,semisimple:i==="\\begingroup"||void 0}}else if(a=this.parseFunction(n,t)||this.parseSymbol(),a==null&&i[0]==="\\"&&!e8.hasOwnProperty(i)){if(this.settings.throwOnError)throw new Qe("Undefined control sequence: "+i,r);a=this.formatUnsupportedCmd(i),this.consume()}return a}formLigatures(t){for(var n=t.length-1,r=0;r<n;++r){var i=t[r];if(i.type==="textord"){var a=i.text,l=t[r+1];if(!(!l||l.type!=="textord")){if(a==="-"&&l.text==="-"){var u=t[r+2];r+1<n&&u&&u.type==="textord"&&u.text==="-"?(t.splice(r,3,{type:"textord",mode:"text",loc:bi.range(i,u),text:"---"}),n-=2):(t.splice(r,2,{type:"textord",mode:"text",loc:bi.range(i,l),text:"--"}),n-=1)}(a==="'"||a==="`")&&l.text===a&&(t.splice(r,2,{type:"textord",mode:"text",loc:bi.range(i,l),text:a+a}),n-=1)}}}}parseSymbol(){var t=this.fetch(),n=t.text;if(/^\\verb[^a-zA-Z]/.test(n)){this.consume();var r=n.slice(5),i=r.charAt(0)==="*";if(i&&(r=r.slice(1)),r.length<2||r.charAt(0)!==r.slice(-1))throw new Qe(`\\verb assertion failed --
|
|
308
|
-
please report what input caused this bug`);return r=r.slice(1,-1),{type:"verb",mode:"text",body:r,star:i}}ow.hasOwnProperty(n[0])&&!jn[this.mode][n[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+n[0]+'" used in math mode',t),n=ow[n[0]]+n.slice(1));var a=YB.exec(n);a&&(n=n.substring(0,a.index),n==="i"?n="ı":n==="j"&&(n="ȷ"));var l;if(jn[this.mode][n]){this.settings.strict&&this.mode==="math"&&dv.includes(n)&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+n[0]+'" used in math mode',t);var u=jn[this.mode][n].group,h=bi.range(t),f;gB(u)?f={type:"atom",mode:this.mode,family:u,loc:h,text:n}:f={type:u,mode:this.mode,loc:h,text:n},l=f}else if(n.charCodeAt(0)>=128)this.settings.strict&&(ak(n.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+n[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+n[0]+'"'+(" ("+n.charCodeAt(0)+")"),t)),l={type:"textord",mode:"text",loc:bi.range(t),text:n};else return null;if(this.consume(),a)for(var p=0;p<a[0].length;p++){var g=a[0][p];if(!yg[g])throw new Qe("Unknown accent ' "+g+"'",t);var y=yg[g][this.mode]||yg[g].text;if(!y)throw new Qe("Accent "+g+" unsupported in "+this.mode+" mode",t);l={type:"accent",mode:this.mode,loc:bi.range(t),label:y,isStretchy:!1,isShifty:!0,base:l}}return l}}_0.endOfExpression=new Set(["}","\\endgroup","\\end","\\right","&"]);var hy=function(t,n){if(!(typeof t=="string"||t instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var r=new _0(t,n);delete r.gullet.macros.current["\\df@tag"];var i=r.parse();if(delete r.gullet.macros.current["\\current@color"],delete r.gullet.macros.current["\\color"],r.gullet.macros.get("\\df@tag")){if(!n.displayMode)throw new Qe("\\tag works only in display equations");i=[{type:"tag",mode:"text",body:i,tag:r.subparse([new ji("\\df@tag")])}]}return i},fy=function(t,n,r){n.textContent="";var i=x0(t,r).toNode();n.appendChild(i)};typeof document<"u"&&document.compatMode!=="CSS1Compat"&&(typeof console<"u"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),fy=function(){throw new Qe("KaTeX doesn't work in quirks mode.")});var t8=function(t,n){var r=x0(t,n).toMarkup();return r},n8=function(t,n){var r=new Qb(n);return hy(t,r)},r8=function(t,n,r){if(r.throwOnError||!(t instanceof Qe))throw t;var i=Ke(["katex-error"],[new Li(n)]);return i.setAttribute("title",t.toString()),i.setAttribute("style","color:"+r.errorColor),i},x0=function(t,n){var r=new Qb(n);try{var i=hy(t,r);return lB(i,t,r)}catch(a){return r8(a,t,r)}},i8=function(t,n){var r=new Qb(n);try{var i=hy(t,r);return cB(i,t,r)}catch(a){return r8(a,t,r)}},s8="0.16.47",a8={Span:xc,Anchor:l0,SymbolNode:Li,SvgNode:fa,PathNode:uo,LineNode:uv},Ev={version:s8,render:fy,renderToString:t8,ParseError:Qe,SETTINGS_SCHEMA:Df,__parse:n8,__renderToDomTree:x0,__renderToHTMLTree:i8,__setFontMetrics:dk,__defineSymbol:k,__defineFunction:dt,__defineMacro:J,__domTree:a8};const
|
|
308
|
+
please report what input caused this bug`);return r=r.slice(1,-1),{type:"verb",mode:"text",body:r,star:i}}ow.hasOwnProperty(n[0])&&!jn[this.mode][n[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+n[0]+'" used in math mode',t),n=ow[n[0]]+n.slice(1));var a=YB.exec(n);a&&(n=n.substring(0,a.index),n==="i"?n="ı":n==="j"&&(n="ȷ"));var l;if(jn[this.mode][n]){this.settings.strict&&this.mode==="math"&&dv.includes(n)&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+n[0]+'" used in math mode',t);var u=jn[this.mode][n].group,h=bi.range(t),f;gB(u)?f={type:"atom",mode:this.mode,family:u,loc:h,text:n}:f={type:u,mode:this.mode,loc:h,text:n},l=f}else if(n.charCodeAt(0)>=128)this.settings.strict&&(ak(n.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+n[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+n[0]+'"'+(" ("+n.charCodeAt(0)+")"),t)),l={type:"textord",mode:"text",loc:bi.range(t),text:n};else return null;if(this.consume(),a)for(var p=0;p<a[0].length;p++){var g=a[0][p];if(!yg[g])throw new Qe("Unknown accent ' "+g+"'",t);var y=yg[g][this.mode]||yg[g].text;if(!y)throw new Qe("Accent "+g+" unsupported in "+this.mode+" mode",t);l={type:"accent",mode:this.mode,loc:bi.range(t),label:y,isStretchy:!1,isShifty:!0,base:l}}return l}}_0.endOfExpression=new Set(["}","\\endgroup","\\end","\\right","&"]);var hy=function(t,n){if(!(typeof t=="string"||t instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var r=new _0(t,n);delete r.gullet.macros.current["\\df@tag"];var i=r.parse();if(delete r.gullet.macros.current["\\current@color"],delete r.gullet.macros.current["\\color"],r.gullet.macros.get("\\df@tag")){if(!n.displayMode)throw new Qe("\\tag works only in display equations");i=[{type:"tag",mode:"text",body:i,tag:r.subparse([new ji("\\df@tag")])}]}return i},fy=function(t,n,r){n.textContent="";var i=x0(t,r).toNode();n.appendChild(i)};typeof document<"u"&&document.compatMode!=="CSS1Compat"&&(typeof console<"u"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),fy=function(){throw new Qe("KaTeX doesn't work in quirks mode.")});var t8=function(t,n){var r=x0(t,n).toMarkup();return r},n8=function(t,n){var r=new Qb(n);return hy(t,r)},r8=function(t,n,r){if(r.throwOnError||!(t instanceof Qe))throw t;var i=Ke(["katex-error"],[new Li(n)]);return i.setAttribute("title",t.toString()),i.setAttribute("style","color:"+r.errorColor),i},x0=function(t,n){var r=new Qb(n);try{var i=hy(t,r);return lB(i,t,r)}catch(a){return r8(a,t,r)}},i8=function(t,n){var r=new Qb(n);try{var i=hy(t,r);return cB(i,t,r)}catch(a){return r8(a,t,r)}},s8="0.16.47",a8={Span:xc,Anchor:l0,SymbolNode:Li,SvgNode:fa,PathNode:uo,LineNode:uv},Ev={version:s8,render:fy,renderToString:t8,ParseError:Qe,SETTINGS_SCHEMA:Df,__parse:n8,__renderToDomTree:x0,__renderToHTMLTree:i8,__setFontMetrics:dk,__defineSymbol:k,__defineFunction:dt,__defineMacro:J,__domTree:a8};const kK=Object.freeze(Object.defineProperty({__proto__:null,ParseError:Qe,SETTINGS_SCHEMA:Df,__defineFunction:dt,__defineMacro:J,__defineSymbol:k,__domTree:a8,__parse:n8,__renderToDomTree:x0,__renderToHTMLTree:i8,__setFontMetrics:dk,default:Ev,get render(){return fy},renderToString:t8,version:s8},Symbol.toStringTag,{value:"Module"})),tz={};function nz(e){const t=this,n=e||tz,r=t.data(),i=r.micromarkExtensions||(r.micromarkExtensions=[]),a=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),l=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);i.push(cL(n)),a.push(tL()),l.push(nL(n))}const lw=/[#.]/g;function rz(e,t){const n=e||"",r={};let i=0,a,l;for(;i<n.length;){lw.lastIndex=i;const u=lw.exec(n),h=n.slice(i,u?u.index:n.length);h&&(a?a==="#"?r.id=h:Array.isArray(r.className)?r.className.push(h):r.className=[h]:l=h,i+=h.length),u&&(a=u[0],i++)}return{type:"element",tagName:l||t||"div",properties:r,children:[]}}function o8(e,t,n){const r=n?oz(n):void 0;function i(a,l,...u){let h;if(a==null){h={type:"root",children:[]};const f=l;u.unshift(f)}else{h=rz(a,t);const f=h.tagName.toLowerCase(),p=r?r.get(f):void 0;if(h.tagName=p||f,iz(l))u.unshift(l);else for(const[g,y]of Object.entries(l))sz(e,h.properties,g,y)}for(const f of u)Tv(h.children,f);return h.type==="element"&&h.tagName==="template"&&(h.content={type:"root",children:h.children},h.children=[]),h}return i}function iz(e){if(e===null||typeof e!="object"||Array.isArray(e))return!0;if(typeof e.type!="string")return!1;const t=e,n=Object.keys(e);for(const r of n){const i=t[r];if(i&&typeof i=="object"){if(!Array.isArray(i))return!0;const a=i;for(const l of a)if(typeof l!="number"&&typeof l!="string")return!0}}return!!("children"in e&&Array.isArray(e.children))}function sz(e,t,n,r){const i=s7(e,n);let a;if(r!=null){if(typeof r=="number"){if(Number.isNaN(r))return;a=r}else typeof r=="boolean"?a=r:typeof r=="string"?i.spaceSeparated?a=Bx(r):i.commaSeparated?a=Mx(r):i.commaOrSpaceSeparated?a=Bx(Mx(r).join(" ")):a=cw(i,i.property,r):Array.isArray(r)?a=[...r]:a=i.property==="style"?az(r):String(r);if(Array.isArray(a)){const l=[];for(const u of a)l.push(cw(i,i.property,u));a=l}i.property==="className"&&Array.isArray(t.className)&&(a=t.className.concat(a)),t[i.property]=a}}function Tv(e,t){if(t!=null)if(typeof t=="number"||typeof t=="string")e.push({type:"text",value:String(t)});else if(Array.isArray(t))for(const n of t)Tv(e,n);else if(typeof t=="object"&&"type"in t)t.type==="root"?Tv(e,t.children):e.push(t);else throw new Error("Expected node, nodes, or string, got `"+t+"`")}function cw(e,t,n){if(typeof n=="string"){if(e.number&&n&&!Number.isNaN(Number(n)))return Number(n);if((e.boolean||e.overloadedBoolean)&&(n===""||Yu(n)===Yu(t)))return!0}return n}function az(e){const t=[];for(const[n,r]of Object.entries(e))t.push([n,r].join(": "));return t.join("; ")}function oz(e){const t=new Map;for(const n of e)t.set(n.toLowerCase(),n);return t}const lz=["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","solidColor","textArea","textPath"],cz=o8(a7,"div"),uz=o8(r0,"g",lz),_g={html:"http://www.w3.org/1999/xhtml",svg:"http://www.w3.org/2000/svg"};function dz(e,t){return l8(e,{})||{type:"root",children:[]}}function l8(e,t){const n=hz(e,t);return n&&t.afterTransform&&t.afterTransform(e,n),n}function hz(e,t){switch(e.nodeType){case 1:return gz(e,t);case 3:return mz(e);case 8:return pz(e);case 9:return uw(e,t);case 10:return fz();case 11:return uw(e,t);default:return}}function uw(e,t){return{type:"root",children:c8(e,t)}}function fz(){return{type:"doctype"}}function mz(e){return{type:"text",value:e.nodeValue||""}}function pz(e){return{type:"comment",value:e.nodeValue||""}}function gz(e,t){const n=e.namespaceURI,r=n===_g.svg?uz:cz,i=n===_g.html?e.tagName.toLowerCase():e.tagName,a=n===_g.html&&i==="template"?e.content:e,l=e.getAttributeNames(),u={};let h=-1;for(;++h<l.length;)u[l[h]]=e.getAttribute(l[h])||"";return r(i,u,c8(a,t))}function c8(e,t){const n=e.childNodes,r=[];let i=-1;for(;++i<n.length;){const a=l8(n[i],t);a!==void 0&&r.push(a)}return r}new DOMParser;function vz(e,t){const n=bz(e);return dz(n)}function bz(e){const t=document.createElement("template");return t.innerHTML=e,t.content}const dw=(function(e,t,n){const r=cd(n);if(!e||!e.type||!e.children)throw new Error("Expected parent node");if(typeof t=="number"){if(t<0||t===Number.POSITIVE_INFINITY)throw new Error("Expected positive finite number as index")}else if(t=e.children.indexOf(t),t<0)throw new Error("Expected child node or index");for(;++t<e.children.length;)if(r(e.children[t],t,e))return e.children[t]}),cl=(function(e){if(e==null)return xz;if(typeof e=="string")return _z(e);if(typeof e=="object")return yz(e);if(typeof e=="function")return my(e);throw new Error("Expected function, string, or array as `test`")});function yz(e){const t=[];let n=-1;for(;++n<e.length;)t[n]=cl(e[n]);return my(r);function r(...i){let a=-1;for(;++a<t.length;)if(t[a].apply(this,i))return!0;return!1}}function _z(e){return my(t);function t(n){return n.tagName===e}}function my(e){return t;function t(n,r,i){return!!(Sz(n)&&e.call(this,n,typeof r=="number"?r:void 0,i||void 0))}}function xz(e){return!!(e&&typeof e=="object"&&"type"in e&&e.type==="element"&&"tagName"in e&&typeof e.tagName=="string")}function Sz(e){return e!==null&&typeof e=="object"&&"type"in e&&"tagName"in e}const hw=/\n/g,fw=/[\t ]+/g,Rv=cl("br"),mw=cl(Nz),wz=cl("p"),pw=cl("tr"),kz=cl(["datalist","head","noembed","noframes","noscript","rp","script","style","template","title",Iz,Az]),u8=cl(["address","article","aside","blockquote","body","caption","center","dd","dialog","dir","dl","dt","div","figure","figcaption","footer","form,","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","legend","li","listing","main","menu","nav","ol","p","plaintext","pre","section","ul","xmp"]);function Cz(e,t){const n=t||{},r="children"in e?e.children:[],i=u8(e),a=f8(e,{whitespace:n.whitespace||"normal"}),l=[];(e.type==="text"||e.type==="comment")&&l.push(...h8(e,{breakBefore:!0,breakAfter:!0}));let u=-1;for(;++u<r.length;)l.push(...d8(r[u],e,{whitespace:a,breakBefore:u?void 0:i,breakAfter:u<r.length-1?Rv(r[u+1]):i}));const h=[];let f;for(u=-1;++u<l.length;){const p=l[u];typeof p=="number"?f!==void 0&&p>f&&(f=p):p&&(f!==void 0&&f>-1&&h.push(`
|
|
309
309
|
`.repeat(f)||" "),f=-1,h.push(p))}return h.join("")}function d8(e,t,n){return e.type==="element"?Ez(e,t,n):e.type==="text"?n.whitespace==="normal"?h8(e,n):Tz(e):[]}function Ez(e,t,n){const r=f8(e,n),i=e.children||[];let a=-1,l=[];if(kz(e))return l;let u,h;for(Rv(e)||pw(e)&&dw(t,e,pw)?h=`
|
|
310
310
|
`:wz(e)?(u=2,h=2):u8(e)&&(u=1,h=1);++a<i.length;)l=l.concat(d8(i[a],e,{whitespace:r,breakBefore:a?void 0:u,breakAfter:a<i.length-1?Rv(i[a+1]):h}));return mw(e)&&dw(t,e,mw)&&l.push(" "),u&&l.unshift(u),h&&l.push(h),l}function h8(e,t){const n=String(e.value),r=[],i=[];let a=0;for(;a<=n.length;){hw.lastIndex=a;const h=hw.exec(n),f=h&&"index"in h?h.index:n.length;r.push(Rz(n.slice(a,f).replace(/[\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,""),a===0?t.breakBefore:!0,f===n.length?t.breakAfter:!0)),a=f+1}let l=-1,u;for(;++l<r.length;)r[l].charCodeAt(r[l].length-1)===8203||l<r.length-1&&r[l+1].charCodeAt(0)===8203?(i.push(r[l]),u=void 0):r[l]?(typeof u=="number"&&i.push(u),i.push(r[l]),u=0):(l===0||l===r.length-1)&&i.push(0);return i}function Tz(e){return[String(e.value)]}function Rz(e,t,n){const r=[];let i=0,a;for(;i<e.length;){fw.lastIndex=i;const l=fw.exec(e);a=l?l.index:e.length,!i&&!a&&l&&!t&&r.push(""),i!==a&&r.push(e.slice(i,a)),i=l?a+l[0].length:a}return i!==a&&!n&&r.push(""),r.join(" ")}function f8(e,t){if(e.type==="element"){const n=e.properties||{};switch(e.tagName){case"listing":case"plaintext":case"xmp":return"pre";case"nobr":return"nowrap";case"pre":return n.wrap?"pre-wrap":"pre";case"td":case"th":return n.noWrap?"nowrap":t.whitespace;case"textarea":return"pre-wrap"}}return t.whitespace}function Iz(e){return!!(e.properties||{}).hidden}function Nz(e){return e.tagName==="td"||e.tagName==="th"}function Az(e){return e.tagName==="dialog"&&!(e.properties||{}).open}const Mz={},Dz=[];function Oz(e){const t=e||Mz;return function(n,r){Wb(n,"element",function(i,a){const l=Array.isArray(i.properties.className)?i.properties.className:Dz,u=l.includes("language-math"),h=l.includes("math-display"),f=l.includes("math-inline");let p=h;if(!u&&!h&&!f)return;let g=a[a.length-1],y=i;if(i.tagName==="code"&&u&&g&&g.type==="element"&&g.tagName==="pre"&&(y=g,g=a[a.length-2],p=!0),!g)return;const v=Cz(y,{whitespace:"pre"});let S;try{S=Ev.renderToString(v,{...t,displayMode:p,throwOnError:!0})}catch(C){const E=C,A=E.name.toLowerCase();r.message("Could not render math with KaTeX",{ancestors:[...a,i],cause:E,place:i.position,ruleId:A,source:"rehype-katex"});try{S=Ev.renderToString(v,{...t,displayMode:p,strict:"ignore",throwOnError:!1})}catch{S=[{type:"element",tagName:"span",properties:{className:["katex-error"],style:"color:"+(t.errorColor||"#cc0000"),title:String(C)},children:[{type:"text",value:v}]}]}}typeof S=="string"&&(S=vz(S).children);const w=g.children.indexOf(y);return g.children.splice(w,1,...S),O7})}}var xg,gw;function jz(){if(gw)return xg;gw=1;function e(ie){return ie instanceof Map?ie.clear=ie.delete=ie.set=function(){throw new Error("map is read-only")}:ie instanceof Set&&(ie.add=ie.clear=ie.delete=function(){throw new Error("set is read-only")}),Object.freeze(ie),Object.getOwnPropertyNames(ie).forEach(Ee=>{const Ge=ie[Ee],lt=typeof Ge;(lt==="object"||lt==="function")&&!Object.isFrozen(Ge)&&e(Ge)}),ie}class t{constructor(Ee){Ee.data===void 0&&(Ee.data={}),this.data=Ee.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function n(ie){return ie.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function r(ie,...Ee){const Ge=Object.create(null);for(const lt in ie)Ge[lt]=ie[lt];return Ee.forEach(function(lt){for(const ut in lt)Ge[ut]=lt[ut]}),Ge}const i="</span>",a=ie=>!!ie.scope,l=(ie,{prefix:Ee})=>{if(ie.startsWith("language:"))return ie.replace("language:","language-");if(ie.includes(".")){const Ge=ie.split(".");return[`${Ee}${Ge.shift()}`,...Ge.map((lt,ut)=>`${lt}${"_".repeat(ut+1)}`)].join(" ")}return`${Ee}${ie}`};class u{constructor(Ee,Ge){this.buffer="",this.classPrefix=Ge.classPrefix,Ee.walk(this)}addText(Ee){this.buffer+=n(Ee)}openNode(Ee){if(!a(Ee))return;const Ge=l(Ee.scope,{prefix:this.classPrefix});this.span(Ge)}closeNode(Ee){a(Ee)&&(this.buffer+=i)}value(){return this.buffer}span(Ee){this.buffer+=`<span class="${Ee}">`}}const h=(ie={})=>{const Ee={children:[]};return Object.assign(Ee,ie),Ee};class f{constructor(){this.rootNode=h(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(Ee){this.top.children.push(Ee)}openNode(Ee){const Ge=h({scope:Ee});this.add(Ge),this.stack.push(Ge)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(Ee){return this.constructor._walk(Ee,this.rootNode)}static _walk(Ee,Ge){return typeof Ge=="string"?Ee.addText(Ge):Ge.children&&(Ee.openNode(Ge),Ge.children.forEach(lt=>this._walk(Ee,lt)),Ee.closeNode(Ge)),Ee}static _collapse(Ee){typeof Ee!="string"&&Ee.children&&(Ee.children.every(Ge=>typeof Ge=="string")?Ee.children=[Ee.children.join("")]:Ee.children.forEach(Ge=>{f._collapse(Ge)}))}}class p extends f{constructor(Ee){super(),this.options=Ee}addText(Ee){Ee!==""&&this.add(Ee)}startScope(Ee){this.openNode(Ee)}endScope(){this.closeNode()}__addSublanguage(Ee,Ge){const lt=Ee.root;Ge&&(lt.scope=`language:${Ge}`),this.add(lt)}toHTML(){return new u(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function g(ie){return ie?typeof ie=="string"?ie:ie.source:null}function y(ie){return w("(?=",ie,")")}function v(ie){return w("(?:",ie,")*")}function S(ie){return w("(?:",ie,")?")}function w(...ie){return ie.map(Ge=>g(Ge)).join("")}function C(ie){const Ee=ie[ie.length-1];return typeof Ee=="object"&&Ee.constructor===Object?(ie.splice(ie.length-1,1),Ee):{}}function E(...ie){return"("+(C(ie).capture?"":"?:")+ie.map(lt=>g(lt)).join("|")+")"}function A(ie){return new RegExp(ie.toString()+"|").exec("").length-1}function D(ie,Ee){const Ge=ie&&ie.exec(Ee);return Ge&&Ge.index===0}const P=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function H(ie,{joinWith:Ee}){let Ge=0;return ie.map(lt=>{Ge+=1;const ut=Ge;let ge=g(lt),Oe="";for(;ge.length>0;){const je=P.exec(ge);if(!je){Oe+=ge;break}Oe+=ge.substring(0,je.index),ge=ge.substring(je.index+je[0].length),je[0][0]==="\\"&&je[1]?Oe+="\\"+String(Number(je[1])+ut):(Oe+=je[0],je[0]==="("&&Ge++)}return Oe}).map(lt=>`(${lt})`).join(Ee)}const T=/\b\B/,I="[a-zA-Z]\\w*",$="[a-zA-Z_]\\w*",X="\\b\\d+(\\.\\d+)?",j="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",U="\\b(0b[01]+)",z="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",W=(ie={})=>{const Ee=/^#![ ]*\//;return ie.binary&&(ie.begin=w(Ee,/.*\b/,ie.binary,/\b.*/)),r({scope:"meta",begin:Ee,end:/$/,relevance:0,"on:begin":(Ge,lt)=>{Ge.index!==0&<.ignoreMatch()}},ie)},F={begin:"\\\\[\\s\\S]",relevance:0},O={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[F]},B={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[F]},L={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},V=function(ie,Ee,Ge={}){const lt=r({scope:"comment",begin:ie,end:Ee,contains:[]},Ge);lt.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ut=E("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return lt.contains.push({begin:w(/[ ]+/,"(",ut,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),lt},oe=V("//","$"),K=V("/\\*","\\*/"),Q=V("#","$"),G={scope:"number",begin:X,relevance:0},M={scope:"number",begin:j,relevance:0},ce={scope:"number",begin:U,relevance:0},Y={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[F,{begin:/\[/,end:/\]/,relevance:0,contains:[F]}]},te={scope:"title",begin:I,relevance:0},re={scope:"title",begin:$,relevance:0},ee={begin:"\\.\\s*"+$,relevance:0};var de=Object.freeze({__proto__:null,APOS_STRING_MODE:O,BACKSLASH_ESCAPE:F,BINARY_NUMBER_MODE:ce,BINARY_NUMBER_RE:U,COMMENT:V,C_BLOCK_COMMENT_MODE:K,C_LINE_COMMENT_MODE:oe,C_NUMBER_MODE:M,C_NUMBER_RE:j,END_SAME_AS_BEGIN:function(ie){return Object.assign(ie,{"on:begin":(Ee,Ge)=>{Ge.data._beginMatch=Ee[1]},"on:end":(Ee,Ge)=>{Ge.data._beginMatch!==Ee[1]&&Ge.ignoreMatch()}})},HASH_COMMENT_MODE:Q,IDENT_RE:I,MATCH_NOTHING_RE:T,METHOD_GUARD:ee,NUMBER_MODE:G,NUMBER_RE:X,PHRASAL_WORDS_MODE:L,QUOTE_STRING_MODE:B,REGEXP_MODE:Y,RE_STARTERS_RE:z,SHEBANG:W,TITLE_MODE:te,UNDERSCORE_IDENT_RE:$,UNDERSCORE_TITLE_MODE:re});function fe(ie,Ee){ie.input[ie.index-1]==="."&&Ee.ignoreMatch()}function Re(ie,Ee){ie.className!==void 0&&(ie.scope=ie.className,delete ie.className)}function qe(ie,Ee){Ee&&ie.beginKeywords&&(ie.begin="\\b("+ie.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",ie.__beforeBegin=fe,ie.keywords=ie.keywords||ie.beginKeywords,delete ie.beginKeywords,ie.relevance===void 0&&(ie.relevance=0))}function ye(ie,Ee){Array.isArray(ie.illegal)&&(ie.illegal=E(...ie.illegal))}function Ue(ie,Ee){if(ie.match){if(ie.begin||ie.end)throw new Error("begin & end are not supported with match");ie.begin=ie.match,delete ie.match}}function tt(ie,Ee){ie.relevance===void 0&&(ie.relevance=1)}const Ae=(ie,Ee)=>{if(!ie.beforeMatch)return;if(ie.starts)throw new Error("beforeMatch cannot be used with starts");const Ge=Object.assign({},ie);Object.keys(ie).forEach(lt=>{delete ie[lt]}),ie.keywords=Ge.keywords,ie.begin=w(Ge.beforeMatch,y(Ge.begin)),ie.starts={relevance:0,contains:[Object.assign(Ge,{endsParent:!0})]},ie.relevance=0,delete Ge.beforeMatch},Ve=["of","and","for","in","not","or","if","then","parent","list","value"],ot="keyword";function Xe(ie,Ee,Ge=ot){const lt=Object.create(null);return typeof ie=="string"?ut(Ge,ie.split(" ")):Array.isArray(ie)?ut(Ge,ie):Object.keys(ie).forEach(function(ge){Object.assign(lt,Xe(ie[ge],Ee,ge))}),lt;function ut(ge,Oe){Ee&&(Oe=Oe.map(je=>je.toLowerCase())),Oe.forEach(function(je){const nt=je.split("|");lt[nt[0]]=[ge,Pe(nt[0],nt[1])]})}}function Pe(ie,Ee){return Ee?Number(Ee):xe(ie)?0:1}function xe(ie){return Ve.includes(ie.toLowerCase())}const De={},_e=ie=>{console.error(ie)},Me=(ie,...Ee)=>{console.log(`WARN: ${ie}`,...Ee)},me=(ie,Ee)=>{De[`${ie}/${Ee}`]||(console.log(`Deprecated as of ${ie}. ${Ee}`),De[`${ie}/${Ee}`]=!0)},Te=new Error;function Be(ie,Ee,{key:Ge}){let lt=0;const ut=ie[Ge],ge={},Oe={};for(let je=1;je<=Ee.length;je++)Oe[je+lt]=ut[je],ge[je+lt]=!0,lt+=A(Ee[je-1]);ie[Ge]=Oe,ie[Ge]._emit=ge,ie[Ge]._multi=!0}function ze(ie){if(Array.isArray(ie.begin)){if(ie.skip||ie.excludeBegin||ie.returnBegin)throw _e("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Te;if(typeof ie.beginScope!="object"||ie.beginScope===null)throw _e("beginScope must be object"),Te;Be(ie,ie.begin,{key:"beginScope"}),ie.begin=H(ie.begin,{joinWith:""})}}function Ye(ie){if(Array.isArray(ie.end)){if(ie.skip||ie.excludeEnd||ie.returnEnd)throw _e("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Te;if(typeof ie.endScope!="object"||ie.endScope===null)throw _e("endScope must be object"),Te;Be(ie,ie.end,{key:"endScope"}),ie.end=H(ie.end,{joinWith:""})}}function pt(ie){ie.scope&&typeof ie.scope=="object"&&ie.scope!==null&&(ie.beginScope=ie.scope,delete ie.scope)}function wt(ie){pt(ie),typeof ie.beginScope=="string"&&(ie.beginScope={_wrap:ie.beginScope}),typeof ie.endScope=="string"&&(ie.endScope={_wrap:ie.endScope}),ze(ie),Ye(ie)}function Pt(ie){function Ee(Oe,je){return new RegExp(g(Oe),"m"+(ie.case_insensitive?"i":"")+(ie.unicodeRegex?"u":"")+(je?"g":""))}class Ge{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(je,nt){nt.position=this.position++,this.matchIndexes[this.matchAt]=nt,this.regexes.push([nt,je]),this.matchAt+=A(je)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const je=this.regexes.map(nt=>nt[1]);this.matcherRe=Ee(H(je,{joinWith:"|"}),!0),this.lastIndex=0}exec(je){this.matcherRe.lastIndex=this.lastIndex;const nt=this.matcherRe.exec(je);if(!nt)return null;const Rt=nt.findIndex((Er,si)=>si>0&&Er!==void 0),Ot=this.matchIndexes[Rt];return nt.splice(0,Rt),Object.assign(nt,Ot)}}class lt{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(je){if(this.multiRegexes[je])return this.multiRegexes[je];const nt=new Ge;return this.rules.slice(je).forEach(([Rt,Ot])=>nt.addRule(Rt,Ot)),nt.compile(),this.multiRegexes[je]=nt,nt}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(je,nt){this.rules.push([je,nt]),nt.type==="begin"&&this.count++}exec(je){const nt=this.getMatcher(this.regexIndex);nt.lastIndex=this.lastIndex;let Rt=nt.exec(je);if(this.resumingScanAtSamePosition()&&!(Rt&&Rt.index===this.lastIndex)){const Ot=this.getMatcher(0);Ot.lastIndex=this.lastIndex+1,Rt=Ot.exec(je)}return Rt&&(this.regexIndex+=Rt.position+1,this.regexIndex===this.count&&this.considerAll()),Rt}}function ut(Oe){const je=new lt;return Oe.contains.forEach(nt=>je.addRule(nt.begin,{rule:nt,type:"begin"})),Oe.terminatorEnd&&je.addRule(Oe.terminatorEnd,{type:"end"}),Oe.illegal&&je.addRule(Oe.illegal,{type:"illegal"}),je}function ge(Oe,je){const nt=Oe;if(Oe.isCompiled)return nt;[Re,Ue,wt,Ae].forEach(Ot=>Ot(Oe,je)),ie.compilerExtensions.forEach(Ot=>Ot(Oe,je)),Oe.__beforeBegin=null,[qe,ye,tt].forEach(Ot=>Ot(Oe,je)),Oe.isCompiled=!0;let Rt=null;return typeof Oe.keywords=="object"&&Oe.keywords.$pattern&&(Oe.keywords=Object.assign({},Oe.keywords),Rt=Oe.keywords.$pattern,delete Oe.keywords.$pattern),Rt=Rt||/\w+/,Oe.keywords&&(Oe.keywords=Xe(Oe.keywords,ie.case_insensitive)),nt.keywordPatternRe=Ee(Rt,!0),je&&(Oe.begin||(Oe.begin=/\B|\b/),nt.beginRe=Ee(nt.begin),!Oe.end&&!Oe.endsWithParent&&(Oe.end=/\B|\b/),Oe.end&&(nt.endRe=Ee(nt.end)),nt.terminatorEnd=g(nt.end)||"",Oe.endsWithParent&&je.terminatorEnd&&(nt.terminatorEnd+=(Oe.end?"|":"")+je.terminatorEnd)),Oe.illegal&&(nt.illegalRe=Ee(Oe.illegal)),Oe.contains||(Oe.contains=[]),Oe.contains=[].concat(...Oe.contains.map(function(Ot){return _t(Ot==="self"?Oe:Ot)})),Oe.contains.forEach(function(Ot){ge(Ot,nt)}),Oe.starts&&ge(Oe.starts,je),nt.matcher=ut(nt),nt}if(ie.compilerExtensions||(ie.compilerExtensions=[]),ie.contains&&ie.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return ie.classNameAliases=r(ie.classNameAliases||{}),ge(ie)}function Tt(ie){return ie?ie.endsWithParent||Tt(ie.starts):!1}function _t(ie){return ie.variants&&!ie.cachedVariants&&(ie.cachedVariants=ie.variants.map(function(Ee){return r(ie,{variants:null},Ee)})),ie.cachedVariants?ie.cachedVariants:Tt(ie)?r(ie,{starts:ie.starts?r(ie.starts):null}):Object.isFrozen(ie)?r(ie):ie}var Mt="11.11.2";class fn extends Error{constructor(Ee,Ge){super(Ee),this.name="HTMLInjectionError",this.html=Ge}}const dn=n,kt=r,Ce=Symbol("nomatch"),ct=7,at=function(ie){const Ee=Object.create(null),Ge=Object.create(null),lt=[];let ut=!0;const ge="Could not find the language '{}', did you forget to load/include a language module?",Oe={disableAutodetect:!0,name:"Plain text",contains:[]};let je={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:p};function nt(Ze){return je.noHighlightRe.test(Ze)}function Rt(Ze){let bt=Ze.className+" ";bt+=Ze.parentNode?Ze.parentNode.className:"";const Gt=je.languageDetectRe.exec(bt);if(Gt){const en=Rr(Gt[1]);return en||(Me(ge.replace("{}",Gt[1])),Me("Falling back to no-highlight mode for this block.",Ze)),en?Gt[1]:"no-highlight"}return bt.split(/\s+/).find(en=>nt(en)||Rr(en))}function Ot(Ze,bt,Gt){let en="",Dn="";typeof bt=="object"?(en=Ze,Gt=bt.ignoreIllegals,Dn=bt.language):(me("10.7.0","highlight(lang, code, ...args) has been deprecated."),me("10.7.0",`Please use highlight(code, options) instead.
|
|
311
311
|
https://github.com/highlightjs/highlight.js/issues/2277`),Dn=Ze,en=bt),Gt===void 0&&(Gt=!0);const tr={code:en,language:Dn};hr("before:highlight",tr);const Ir=tr.result?tr.result:Er(tr.language,tr.code,Gt);return Ir.code=tr.code,hr("after:highlight",Ir),Ir}function Er(Ze,bt,Gt,en){const Dn=Object.create(null);function tr(it,gt){return it.keywords[gt]}function Ir(){if(!It.keywords){Fn.addText(on);return}let it=0;It.keywordPatternRe.lastIndex=0;let gt=It.keywordPatternRe.exec(on),jt="";for(;gt;){jt+=on.substring(it,gt.index);const Vt=fr.case_insensitive?gt[0].toLowerCase():gt[0],Tn=tr(It,Vt);if(Tn){const[Wr,Ta]=Tn;if(Fn.addText(jt),jt="",Dn[Vt]=(Dn[Vt]||0)+1,Dn[Vt]<=ct&&(fs+=Ta),Wr.startsWith("_"))jt+=gt[0];else{const se=fr.classNameAliases[Wr]||Wr;Gr(gt[0],se)}}else jt+=gt[0];it=It.keywordPatternRe.lastIndex,gt=It.keywordPatternRe.exec(on)}jt+=on.substring(it),Fn.addText(jt)}function Br(){if(on==="")return;let it=null;if(typeof It.subLanguage=="string"){if(!Ee[It.subLanguage]){Fn.addText(on);return}it=Er(It.subLanguage,on,!0,ml[It.subLanguage]),ml[It.subLanguage]=it._top}else it=Ct(on,It.subLanguage.length?It.subLanguage:null);It.relevance>0&&(fs+=it.relevance),Fn.__addSublanguage(it._emitter,it.language)}function vn(){It.subLanguage!=null?Br():Ir(),on=""}function Gr(it,gt){it!==""&&(Fn.startScope(gt),Fn.addText(it),Fn.endScope())}function xa(it,gt){let jt=1;const Vt=gt.length-1;for(;jt<=Vt;){if(!it._emit[jt]){jt++;continue}const Tn=fr.classNameAliases[it[jt]]||it[jt],Wr=gt[jt];Tn?Gr(Wr,Tn):(on=Wr,Ir(),on=""),jt++}}function Sa(it,gt){return it.scope&&typeof it.scope=="string"&&Fn.openNode(fr.classNameAliases[it.scope]||it.scope),it.beginScope&&(it.beginScope._wrap?(Gr(on,fr.classNameAliases[it.beginScope._wrap]||it.beginScope._wrap),on=""):it.beginScope._multi&&(xa(it.beginScope,gt),on="")),It=Object.create(it,{parent:{value:It}}),It}function vo(it,gt,jt){let Vt=D(it.endRe,jt);if(Vt){if(it["on:end"]){const Tn=new t(it);it["on:end"](gt,Tn),Tn.isMatchIgnored&&(Vt=!1)}if(Vt){for(;it.endsParent&&it.parent;)it=it.parent;return it}}if(it.endsWithParent)return vo(it.parent,gt,jt)}function wa(it){return It.matcher.regexIndex===0?(on+=it[0],1):(is=!0,0)}function Ec(it){const gt=it[0],jt=it.rule,Vt=new t(jt),Tn=[jt.__beforeBegin,jt["on:begin"]];for(const Wr of Tn)if(Wr&&(Wr(it,Vt),Vt.isMatchIgnored))return wa(gt);return jt.skip?on+=gt:(jt.excludeBegin&&(on+=gt),vn(),!jt.returnBegin&&!jt.excludeBegin&&(on=gt)),Sa(jt,it),jt.returnBegin?0:gt.length}function En(it){const gt=it[0],jt=bt.substring(it.index),Vt=vo(It,it,jt);if(!Vt)return Ce;const Tn=It;It.endScope&&It.endScope._wrap?(vn(),Gr(gt,It.endScope._wrap)):It.endScope&&It.endScope._multi?(vn(),xa(It.endScope,it)):Tn.skip?on+=gt:(Tn.returnEnd||Tn.excludeEnd||(on+=gt),vn(),Tn.excludeEnd&&(on=gt));do It.scope&&Fn.closeNode(),!It.skip&&!It.subLanguage&&(fs+=It.relevance),It=It.parent;while(It!==Vt.parent);return Vt.starts&&Sa(Vt.starts,it),Tn.returnEnd?0:gt.length}function bo(){const it=[];for(let gt=It;gt!==fr;gt=gt.parent)gt.scope&&it.unshift(gt.scope);it.forEach(gt=>Fn.openNode(gt))}let Ps={};function ka(it,gt){const jt=gt&>[0];if(on+=it,jt==null)return vn(),0;if(Ps.type==="begin"&>.type==="end"&&Ps.index===gt.index&&jt===""){if(on+=bt.slice(gt.index,gt.index+1),!ut){const Vt=new Error(`0 width match regex (${Ze})`);throw Vt.languageName=Ze,Vt.badRule=Ps.rule,Vt}return 1}if(Ps=gt,gt.type==="begin")return Ec(gt);if(gt.type==="illegal"&&!Gt){const Vt=new Error('Illegal lexeme "'+jt+'" for mode "'+(It.scope||"<unnamed>")+'"');throw Vt.mode=It,Vt}else if(gt.type==="end"){const Vt=En(gt);if(Vt!==Ce)return Vt}if(gt.type==="illegal"&&jt==="")return gt.index===bt.length||(on+=`
|
|
312
312
|
`),1;if(Ea>1e5&&Ea>gt.index*3)throw new Error("potential infinite loop, way more iterations than matches");return on+=jt,jt.length}const fr=Rr(Ze);if(!fr)throw _e(ge.replace("{}",Ze)),new Error('Unknown language: "'+Ze+'"');const fl=Pt(fr);let Ca="",It=en||fl;const ml={},Fn=new je.__emitter(je);bo();let on="",fs=0,Pi=0,Ea=0,is=!1;try{if(fr.__emitTokens)fr.__emitTokens(bt,Fn);else{for(It.matcher.considerAll();;){Ea++,is?is=!1:It.matcher.considerAll(),It.matcher.lastIndex=Pi;const it=It.matcher.exec(bt);if(!it)break;const gt=bt.substring(Pi,it.index),jt=ka(gt,it);Pi=it.index+jt}ka(bt.substring(Pi))}return Fn.finalize(),Ca=Fn.toHTML(),{language:Ze,value:Ca,relevance:fs,illegal:!1,_emitter:Fn,_top:It}}catch(it){if(it.message&&it.message.includes("Illegal"))return{language:Ze,value:dn(bt),illegal:!0,relevance:0,_illegalBy:{message:it.message,index:Pi,context:bt.slice(Pi-100,Pi+100),mode:it.mode,resultSoFar:Ca},_emitter:Fn};if(ut)return{language:Ze,value:dn(bt),illegal:!1,relevance:0,errorRaised:it,_emitter:Fn,_top:It};throw it}}function si(Ze){const bt={value:dn(Ze),illegal:!1,relevance:0,_top:Oe,_emitter:new je.__emitter(je)};return bt._emitter.addText(Ze),bt}function Ct(Ze,bt){bt=bt||je.languages||Object.keys(Ee);const Gt=si(Ze),en=bt.filter(Rr).filter(xi).map(vn=>Er(vn,Ze,!1));en.unshift(Gt);const Dn=en.sort((vn,Gr)=>{if(vn.relevance!==Gr.relevance)return Gr.relevance-vn.relevance;if(vn.language&&Gr.language){if(Rr(vn.language).supersetOf===Gr.language)return 1;if(Rr(Gr.language).supersetOf===vn.language)return-1}return 0}),[tr,Ir]=Dn,Br=tr;return Br.secondBest=Ir,Br}function Tr(Ze,bt,Gt){const en=bt&&Ge[bt]||Gt;Ze.classList.add("hljs"),Ze.classList.add(`language-${en}`)}function hn(Ze){let bt=null;const Gt=Rt(Ze);if(nt(Gt))return;if(hr("before:highlightElement",{el:Ze,language:Gt}),Ze.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",Ze);return}if(Ze.children.length>0&&(je.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(Ze)),je.throwUnescapedHTML))throw new fn("One of your code blocks includes unescaped HTML.",Ze.innerHTML);bt=Ze;const en=bt.textContent,Dn=Gt?Ot(en,{language:Gt,ignoreIllegals:!0}):Ct(en);Ze.innerHTML=Dn.value,Ze.dataset.highlighted="yes",Tr(Ze,Gt,Dn.language),Ze.result={language:Dn.language,re:Dn.relevance,relevance:Dn.relevance},Dn.secondBest&&(Ze.secondBest={language:Dn.secondBest.language,relevance:Dn.secondBest.relevance}),hr("after:highlightElement",{el:Ze,result:Dn,text:en})}function Rn(Ze){je=kt(je,Ze)}const Ut=()=>{_a(),me("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function ds(){_a(),me("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let dl=!1;function _a(){function Ze(){_a()}if(document.readyState==="loading"){dl||window.addEventListener("DOMContentLoaded",Ze,!1),dl=!0;return}document.querySelectorAll(je.cssSelector).forEach(hn)}function hl(Ze,bt){let Gt=null;try{Gt=bt(ie)}catch(en){if(_e("Language definition for '{}' could not be registered.".replace("{}",Ze)),ut)_e(en);else throw en;Gt=Oe}Gt.name||(Gt.name=Ze),Ee[Ze]=Gt,Gt.rawDefinition=bt.bind(null,ie),Gt.aliases&&ai(Gt.aliases,{languageName:Ze})}function Bs(Ze){delete Ee[Ze];for(const bt of Object.keys(Ge))Ge[bt]===Ze&&delete Ge[bt]}function zs(){return Object.keys(Ee)}function Rr(Ze){return Ze=(Ze||"").toLowerCase(),Ee[Ze]||Ee[Ge[Ze]]}function ai(Ze,{languageName:bt}){typeof Ze=="string"&&(Ze=[Ze]),Ze.forEach(Gt=>{Ge[Gt.toLowerCase()]=bt})}function xi(Ze){const bt=Rr(Ze);return bt&&!bt.disableAutodetect}function hs(Ze){Ze["before:highlightBlock"]&&!Ze["before:highlightElement"]&&(Ze["before:highlightElement"]=bt=>{Ze["before:highlightBlock"](Object.assign({block:bt.el},bt))}),Ze["after:highlightBlock"]&&!Ze["after:highlightElement"]&&(Ze["after:highlightElement"]=bt=>{Ze["after:highlightBlock"](Object.assign({block:bt.el},bt))})}function In(Ze){hs(Ze),lt.push(Ze)}function oi(Ze){const bt=lt.indexOf(Ze);bt!==-1&<.splice(bt,1)}function hr(Ze,bt){const Gt=Ze;lt.forEach(function(en){en[Gt]&&en[Gt](bt)})}function li(Ze){return me("10.7.0","highlightBlock will be removed entirely in v12.0"),me("10.7.0","Please use highlightElement now."),hn(Ze)}Object.assign(ie,{highlight:Ot,highlightAuto:Ct,highlightAll:_a,highlightElement:hn,highlightBlock:li,configure:Rn,initHighlighting:Ut,initHighlightingOnLoad:ds,registerLanguage:hl,unregisterLanguage:Bs,listLanguages:zs,getLanguage:Rr,registerAliases:ai,autoDetection:xi,inherit:kt,addPlugin:In,removePlugin:oi}),ie.debugMode=function(){ut=!1},ie.safeMode=function(){ut=!0},ie.versionString=Mt,ie.regex={concat:w,lookahead:y,either:E,optional:S,anyNumberOfTimes:v};for(const Ze in de)typeof de[Ze]=="object"&&e(de[Ze]);return Object.assign(ie,de),ie},ve=at({});return ve.newInstance=()=>at({}),xg=ve,ve.HighlightJS=ve,ve.default=ve,xg}var Sg,vw;function Lz(){if(vw)return Sg;vw=1;function e(t){const n=t.regex,r=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),i=/[\p{L}0-9._:-]+/u,a={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},l={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},u=t.inherit(l,{begin:/\(/,end:/\)/}),h=t.inherit(t.APOS_STRING_MODE,{className:"string"}),f=t.inherit(t.QUOTE_STRING_MODE,{className:"string"}),p={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:i,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[a]},{begin:/'/,end:/'/,contains:[a]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[l,f,h,u,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[l,u,f,h]}]}]},t.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[f]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[p],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[p],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:n.concat(/</,n.lookahead(n.concat(r,n.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:r,relevance:0,starts:p}]},{className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(r,/>/))),contains:[{className:"name",begin:r,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}return Sg=e,Sg}var wg,bw;function Bz(){if(bw)return wg;bw=1;function e(t){const n=t.regex,r={},i={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[r]}]};Object.assign(r,{className:"variable",variants:[{begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},i]});const a={className:"subst",begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},l=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),u={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},h={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,r,a]};a.contains.push(h);const f={match:/\\"/},p={className:"string",begin:/'/,end:/'/},g={match:/\\'/},y={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},t.NUMBER_MODE,r]},v=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],S=t.SHEBANG({binary:`(${v.join("|")})`,relevance:10}),w={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},C=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],E=["true","false"],A={match:/(\/[a-z._-]+)+/},D=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],P=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],H=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],T=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:C,literal:E,built_in:[...D,...P,"set","shopt",...H,...T]},contains:[S,t.SHEBANG(),w,y,l,u,A,h,f,p,g,r]}}return wg=e,wg}var kg,yw;function zz(){if(yw)return kg;yw=1;function e(t){const n=t.regex,r=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),i="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",u="("+i+"|"+n.optional(a)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",h={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},p={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},g={className:"number",variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},y={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"},contains:[{begin:/\\\n/,relevance:0},t.inherit(p,{className:"string"}),{className:"string",begin:/<.*?>/},r,t.C_BLOCK_COMMENT_MODE]},v={className:"title",begin:n.optional(a)+t.IDENT_RE,relevance:0},S=n.optional(a)+t.IDENT_RE+"\\s*\\(",E={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},A=[y,h,r,t.C_BLOCK_COMMENT_MODE,g,p],D={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:E,contains:A.concat([{begin:/\(/,end:/\)/,keywords:E,contains:A.concat(["self"]),relevance:0}]),relevance:0},P={begin:"("+u+"[\\*&\\s]+)+"+S,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:E,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:i,keywords:E,relevance:0},{begin:S,returnBegin:!0,contains:[t.inherit(v,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:E,relevance:0,contains:[r,t.C_BLOCK_COMMENT_MODE,p,g,h,{begin:/\(/,end:/\)/,keywords:E,relevance:0,contains:["self",r,t.C_BLOCK_COMMENT_MODE,p,g,h]}]},h,r,t.C_BLOCK_COMMENT_MODE,y]};return{name:"C",aliases:["h"],keywords:E,disableAutodetect:!0,illegal:"</",contains:[].concat(D,P,A,[y,{begin:t.IDENT_RE+"::",keywords:E},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},t.TITLE_MODE]}]),exports:{preprocessor:y,strings:p,keywords:E}}}return kg=e,kg}var Cg,_w;function Pz(){if(_w)return Cg;_w=1;function e(t){const n=t.regex,r=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),i="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",u="(?!struct)("+i+"|"+n.optional(a)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",h={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},p={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},g={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},y={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},t.inherit(p,{className:"string"}),{className:"string",begin:/<.*?>/},r,t.C_BLOCK_COMMENT_MODE]},v={className:"title",begin:n.optional(a)+t.IDENT_RE,relevance:0},S=n.optional(a)+t.IDENT_RE+"\\s*\\(",w=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],C=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],E=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],A=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],H={type:C,keyword:w,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:E},T={className:"function.dispatch",relevance:0,keywords:{_hint:A},begin:n.concat(/\b/,`(?!${w.join("|")})`,t.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/))},I=[T,y,h,r,t.C_BLOCK_COMMENT_MODE,g,p],$={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:H,contains:I.concat([{begin:/\(/,end:/\)/,keywords:H,contains:I.concat(["self"]),relevance:0}]),relevance:0},X={className:"function",begin:"("+u+"[\\*&\\s]+)+"+S,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:H,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:i,keywords:H,relevance:0},{begin:S,returnBegin:!0,contains:[v],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[p,g]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:H,relevance:0,contains:[r,t.C_BLOCK_COMMENT_MODE,p,g,h,{begin:/\(/,end:/\)/,keywords:H,relevance:0,contains:["self",r,t.C_BLOCK_COMMENT_MODE,p,g,h]}]},h,r,t.C_BLOCK_COMMENT_MODE,y]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:H,illegal:"</",classNameAliases:{"function.dispatch":"built_in"},contains:[].concat($,X,T,I,[y,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)",end:">",keywords:H,contains:["self",h]},{begin:t.IDENT_RE+"::",keywords:H},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}return Cg=e,Cg}var Eg,xw;function Hz(){if(xw)return Eg;xw=1;function e(t){const n=["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],r=["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"],i=["default","false","null","true"],a=["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"],l=["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"],u={keyword:a.concat(l),built_in:n,literal:i},h=t.inherit(t.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),f={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9'_]+|(\\b[\\d'_]+(\\.[\\d'_]*)?|\\.[\\d'_]+)([eE][-+]?[\\d'_]+)?)"}],relevance:0},p={className:"string",begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},g={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},y=t.inherit(g,{illegal:/\n/}),v={className:"subst",begin:/\{/,end:/\}/,keywords:u},S=t.inherit(v,{illegal:/\n/}),w={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},t.BACKSLASH_ESCAPE,S]},C={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},v]},E=t.inherit(C,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},S]});v.contains=[C,w,g,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,f,t.C_BLOCK_COMMENT_MODE],S.contains=[E,w,y,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,f,t.inherit(t.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const A={variants:[p,C,w,g,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},D={begin:"<",end:">",contains:[{beginKeywords:"in out"},h]},P=t.IDENT_RE+"(<"+t.IDENT_RE+"(\\s*,\\s*"+t.IDENT_RE+")*>)?(\\[\\])?",H={begin:"@"+t.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:u,illegal:/::/,contains:[t.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"<!--|-->"},{begin:"</?",end:">"}]}]}),t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},A,f,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},h,D,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[h,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[h,D,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+P+"\\s+)+"+t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:u,contains:[{beginKeywords:r.join(" "),relevance:0},{begin:t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[t.TITLE_MODE,D],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:u,relevance:0,contains:[A,f,t.C_BLOCK_COMMENT_MODE]},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},H]}}return Eg=e,Eg}var Tg,Sw;function qz(){if(Sw)return Tg;Sw=1;const e=f=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:f.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,4}(-[0-9A-Fa-f][0-9A-Fa-f]{0,4})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:f.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],r=[...t,...n],i=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),l=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),u=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function h(f){const p=f.regex,g=e(f),y={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},v="and or not only",S=/@-?\w[\w]*(-\w+)*/,w="[a-zA-Z-][a-zA-Z0-9_-]*",C=[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[g.BLOCK_COMMENT,y,g.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+w,relevance:0},g.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+a.join("|")+")"},{begin:":(:)?("+l.join("|")+")"}]},g.CSS_VARIABLE,{className:"attribute",begin:"\\b("+u.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[g.BLOCK_COMMENT,g.HEXCOLOR,g.IMPORTANT,g.CSS_NUMBER_MODE,g.UNICODE_RANGE,...C,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...C,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},g.FUNCTION_DISPATCH]},{begin:p.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:S},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:v,attribute:i.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...C,g.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+r.join("|")+")\\b"}]}}return Tg=h,Tg}var Rg,ww;function $z(){if(ww)return Rg;ww=1;function e(t){const n=t.regex,r={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},i={begin:"^[-\\*]{3,}",end:"$"},a={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},l={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},u={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},h=/[A-Za-z][A-Za-z0-9+.-]*/,f={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:n.concat(/\[.+?\]\(/,h,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},p={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},g={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},y=t.inherit(p,{contains:[]}),v=t.inherit(g,{contains:[]});p.contains.push(v),g.contains.push(y);let S=[r,f];return[p,g,y,v].forEach(A=>{A.contains=A.contains.concat(S)}),S=S.concat(p,g),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:S},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:S}]}]},r,l,p,g,{className:"quote",begin:"^>\\s+",contains:S,end:"$"},a,i,f,u,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}return Rg=e,Rg}var Ig,kw;function Fz(){if(kw)return Ig;kw=1;function e(t){const n=t.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^@@ +-\d+ +\+\d+,\d+ +@@/,/^@@ +-\d+,\d+ +\+\d+ +@@/,/^@@ +-\d+ +\+\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}return Ig=e,Ig}var Ng,Cw;function Uz(){if(Cw)return Ng;Cw=1;function e(t){const n=t.regex,r="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",i=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),a=n.concat(i,/(::\w+)*/),u={"variable.constant":["__FILE__","__LINE__","__ENCODING__"],"variable.language":["self","super"],keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield",...["include","extend","prepend","public","private","protected","raise","throw"]],built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],literal:["true","false","nil"]},h={className:"doctag",begin:"@[A-Za-z]+"},f={begin:"#<",end:">"},p=[t.COMMENT("#","$",{contains:[h]}),t.COMMENT("^=begin","^=end",{contains:[h],relevance:10}),t.COMMENT("^__END__",t.MATCH_NOTHING_RE)],g={className:"subst",begin:/#\{/,end:/\}/,keywords:u},y={className:"string",contains:[t.BACKSLASH_ESCAPE,g],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?</,end:/>/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[t.BACKSLASH_ESCAPE,g]})]}]},v="[1-9](_?[0-9])*|0",S="[0-9](_?[0-9])*",w={className:"number",relevance:0,variants:[{begin:`\\b(${v})(\\.(${S}))?([eE][+-]?(${S})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},C={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:u}]},I=[y,{variants:[{match:[/class\s+/,a,/\s+<\s+/,a]},{match:[/\b(class|module)\s+/,a]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:u},{match:[/(include|extend)\s+/,a],scope:{2:"title.class"},keywords:u},{relevance:0,match:[a,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:i,scope:"title.class"},{match:[/def/,/\s+/,r],scope:{1:"keyword",3:"title.function"},contains:[C]},{begin:t.IDENT_RE+"::"},{className:"symbol",begin:t.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[y,{begin:r}],relevance:0},w,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:u},{begin:"("+t.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[t.BACKSLASH_ESCAPE,g],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(f,p),relevance:0}].concat(f,p);g.contains=I,C.contains=I;const U=[{begin:/^\s*=>/,starts:{end:"$",contains:I}},{className:"meta.prompt",begin:"^("+"[>?]>"+"|"+"[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]"+"|"+"(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>"+")(?=[ ])",starts:{end:"$",keywords:u,contains:I}}];return p.unshift(f),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:u,illegal:/\/\*/,contains:[t.SHEBANG({binary:"ruby"})].concat(U).concat(p).concat(I)}}return Ng=e,Ng}var Ag,Ew;function Gz(){if(Ew)return Ag;Ew=1;function e(t){const l={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:l,illegal:"</",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:"string",variants:[t.QUOTE_STRING_MODE,t.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[t.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:l,illegal:/["']/}]}]}}return Ag=e,Ag}var Mg,Tw;function Wz(){if(Tw)return Mg;Tw=1;function e(t){const n=t.regex,r=/[_A-Za-z][_0-9A-Za-z]*/;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],literal:["true","false","null"]},contains:[t.HASH_COMMENT_MODE,t.QUOTE_STRING_MODE,t.NUMBER_MODE,{scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{scope:"symbol",begin:n.concat(r,n.lookahead(/\s*:/)),relevance:0}],illegal:[/[;<']/,/BEGIN/]}}return Mg=e,Mg}var Dg,Rw;function Vz(){if(Rw)return Dg;Rw=1;function e(t){const n=t.regex,r={className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:t.NUMBER_RE}]},i=t.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const a={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},l={className:"literal",begin:/\bon|off|true|false|yes|no\b/},u={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},h={begin:/\[/,end:/\]/,contains:[i,l,a,u,r,"self"],relevance:0},f=/[A-Za-z0-9_-]+/,p=/"(\\"|[^"])*"/,g=/'[^']*'/,y=n.either(f,p,g),v=n.concat(y,"(\\s*\\.\\s*",y,")*",n.lookahead(/\s*=\s*[^#\s]/));return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:v,className:"attr",starts:{end:/$/,contains:[i,h,l,a,u,r]}}]}}return Dg=e,Dg}var Og,Iw;function Kz(){if(Iw)return Og;Iw=1;var e="[0-9](_*[0-9])*",t=`\\.(${e})`,n="[0-9a-fA-F](_*[0-9a-fA-F])*",r={className:"number",variants:[{begin:`(\\b(${e})((${t})|\\.)?|(${t}))[eE][+-]?(${e})[fFdD]?\\b`},{begin:`\\b(${e})((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:`\\b(${e})[fFdD]\\b`},{begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?(${e})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function i(l,u,h){return h===-1?"":l.replace(u,f=>i(l,u,h-1))}function a(l){const u=l.regex,h="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",f=h+i("(?:<"+h+"~~~(?:\\s*,\\s*"+h+"~~~)*>)?",/~~~/g,2),S={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},w={className:"meta",begin:"@"+h,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},C={className:"params",begin:/\(/,end:/\)/,keywords:S,relevance:0,contains:[l.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:S,illegal:/<\/|#/,contains:[l.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},l.C_LINE_COMMENT_MODE,l.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[l.BACKSLASH_ESCAPE]},l.APOS_STRING_MODE,l.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,h],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[u.concat(/(?!else)/,h),/\s+/,h,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,h],className:{1:"keyword",3:"title.class"},contains:[C,l.C_LINE_COMMENT_MODE,l.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+f+"\\s+)",l.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:S,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:S,relevance:0,contains:[w,l.APOS_STRING_MODE,l.QUOTE_STRING_MODE,r,l.C_BLOCK_COMMENT_MODE]},l.C_LINE_COMMENT_MODE,l.C_BLOCK_COMMENT_MODE]},r,w]}}return Og=a,Og}var jg,Nw;function Yz(){if(Nw)return jg;Nw=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],n=["true","false","null","undefined","NaN","Infinity"],r=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],i=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],a=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],l=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],u=[].concat(a,r,i);function h(f){const p=f.regex,g=(re,{after:ee})=>{const ne="</"+re[0].slice(1);return re.input.indexOf(ne,ee)!==-1},y=e,v={begin:"<>",end:"</>"},S=/<[A-Za-z0-9\\._:-]+\s*\/>/,w={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(re,ee)=>{const ne=re[0].length+re.index,de=re.input[ne];if(de==="<"||de===","){ee.ignoreMatch();return}de===">"&&(g(re,{after:ne})||ee.ignoreMatch());let fe;const Re=re.input.substring(ne);if(fe=Re.match(/^\s*=/)){ee.ignoreMatch();return}if((fe=Re.match(/^\s+extends\s+/))&&fe.index===0){ee.ignoreMatch();return}}},C={$pattern:e,keyword:t,literal:n,built_in:u,"variable.language":l},E="[0-9](_?[0-9])*",A=`\\.(${E})`,D="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",P={className:"number",variants:[{begin:`(\\b(${D})((${A})|\\.)?|(${A}))[eE][+-]?(${E})\\b`},{begin:`\\b(${D})\\b((${A})\\b|\\.)?|(${A})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},H={className:"subst",begin:"\\$\\{",end:"\\}",keywords:C,contains:[]},T={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[f.BACKSLASH_ESCAPE,H],subLanguage:"xml"}},I={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[f.BACKSLASH_ESCAPE,H],subLanguage:"css"}},$={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[f.BACKSLASH_ESCAPE,H],subLanguage:"graphql"}},X={className:"string",begin:"`",end:"`",contains:[f.BACKSLASH_ESCAPE,H]},U={className:"comment",variants:[f.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:y+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),f.C_BLOCK_COMMENT_MODE,f.C_LINE_COMMENT_MODE]},z=[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE,T,I,$,X,{match:/\$\d+/},P];H.contains=z.concat({begin:/\{/,end:/\}/,keywords:C,contains:["self"].concat(z)});const W=[].concat(U,H.contains),F=W.concat([{begin:/(\s*)\(/,end:/\)/,keywords:C,contains:["self"].concat(W)}]),O={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:C,contains:F},B={variants:[{match:[/class/,/\s+/,y,/\s+/,/extends/,/\s+/,p.concat(y,"(",p.concat(/\./,y),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,y],scope:{1:"keyword",3:"title.class"}}]},L={relevance:0,match:p.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...r,...i]}},V={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},oe={variants:[{match:[/function/,/\s+/,y,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[O],illegal:/%/},K={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Q(re){return p.concat("(?!",re.join("|"),")")}const G={match:p.concat(/\b/,Q([...a,"super","import","await"].map(re=>`${re}\\s*\\(`)),y,p.lookahead(/\s*\(/)),className:"title.function",relevance:0},M={begin:p.concat(/\./,p.lookahead(p.concat(y,/(?![0-9A-Za-z$_(])/))),end:y,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},ce={match:[/get|set/,/\s+/,y,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},O]},Y="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+f.UNDERSCORE_IDENT_RE+")\\s*=>",te={match:[/const|var|let/,/\s+/,y,/\s*/,/=\s*/,/(async\s*)?/,p.lookahead(Y)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[O]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:C,exports:{PARAMS_CONTAINS:F,CLASS_REFERENCE:L},illegal:/#(?![$_A-Za-z])/,contains:[f.SHEBANG({label:"shebang",binary:"node",relevance:5}),V,f.APOS_STRING_MODE,f.QUOTE_STRING_MODE,T,I,$,X,U,{match:/\$\d+/},P,L,{scope:"attr",match:y+p.lookahead(":"),relevance:0},te,{begin:"("+f.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[U,f.REGEXP_MODE,{className:"function",begin:Y,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:f.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:C,contains:F}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:v.begin,end:v.end},{match:S},{begin:w.begin,"on:begin":w.isTrulyOpeningTag,end:w.end}],subLanguage:"xml",contains:[{begin:w.begin,end:w.end,skip:!0,contains:["self"]}]}]},oe,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+f.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[O,f.inherit(f.TITLE_MODE,{begin:y,className:"title.function"})]},{match:/\.\.\./,relevance:0},M,{match:"\\$"+y,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[O]},G,K,B,ce,{match:/\$[(.]/}]}}return jg=h,jg}var Lg,Aw;function Xz(){if(Aw)return Lg;Aw=1;const t={scope:"number",match:"([-+]?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)|NaN|[-+]?Infinity",relevance:0};function n(r){const i={className:"attr",begin:/(("(\\.|[^\\"\r\n])*")|('(\\.|[^\\'\r\n])*'))(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},l=["true","false","null"],u={scope:"literal",beginKeywords:l.join(" ")};return{name:"JSON",aliases:["jsonc","json5"],keywords:{literal:l},contains:[i,a,r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,u,t,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}return Lg=n,Lg}var Bg,Mw;function Zz(){if(Mw)return Bg;Mw=1;var e="[0-9](_*[0-9])*",t=`\\.(${e})`,n="[0-9a-fA-F](_*[0-9a-fA-F])*",r={className:"number",variants:[{begin:`(\\b(${e})((${t})|\\.)?|(${t}))[eE][+-]?(${e})[fFdD]?\\b`},{begin:`\\b(${e})((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:`\\b(${e})[fFdD]\\b`},{begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?(${e})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function i(a){const l={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},u={className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},h={className:"symbol",begin:a.UNDERSCORE_IDENT_RE+"@"},f={className:"subst",begin:/\$\{/,end:/\}/,contains:[a.C_NUMBER_MODE]},p={className:"variable",begin:"\\$"+a.UNDERSCORE_IDENT_RE},g={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[p,f]},{begin:"'",end:"'",illegal:/\n/,contains:[a.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[a.BACKSLASH_ESCAPE,p,f]}]};f.contains.push(g);const y={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+a.UNDERSCORE_IDENT_RE+")?"},v={className:"meta",begin:"@"+a.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[a.inherit(g,{className:"string"}),"self"]}]},S=r,w=a.COMMENT("/\\*","\\*/",{contains:[a.C_BLOCK_COMMENT_MODE]}),C={variants:[{className:"type",begin:a.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},E=C;return E.variants[1].contains=[C],C.variants[1].contains=[E],{name:"Kotlin",aliases:["kt","kts"],keywords:l,contains:[a.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),a.C_LINE_COMMENT_MODE,w,u,h,y,v,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:l,relevance:5,contains:[{begin:a.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[a.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:l,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[C,a.C_LINE_COMMENT_MODE,w],relevance:0},a.C_LINE_COMMENT_MODE,w,y,v,g,a.C_NUMBER_MODE]},w]},{begin:[/class|interface|trait/,/\s+/,a.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},a.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},y,v]},g,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:`
|
|
313
313
|
`},S]}}return Bg=i,Bg}var zg,Dw;function Qz(){if(Dw)return zg;Dw=1;const e=p=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:p.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,4}(-[0-9A-Fa-f][0-9A-Fa-f]{0,4})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[p.APOS_STRING_MODE,p.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:p.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],r=[...t,...n],i=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),l=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),u=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),h=a.concat(l).sort().reverse();function f(p){const g=e(p),y=h,v="and or not only",S="[\\w-]+",w="("+S+"|@\\{"+S+"\\})",C=[],E=[],A=function(W){return{className:"string",begin:"~?"+W+".*?"+W}},D=function(W,F,O){return{className:W,begin:F,relevance:O}},P={$pattern:/[a-z-]+/,keyword:v,attribute:i.join(" ")},H={begin:"\\(",end:"\\)",contains:E,keywords:P,relevance:0};E.push(p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,A("'"),A('"'),g.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},g.UNICODE_RANGE,g.HEXCOLOR,H,D("variable","@@?"+S,10),D("variable","@\\{"+S+"\\}"),D("built_in","~?`[^`]*?`"),{className:"attribute",begin:S+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},g.IMPORTANT,{beginKeywords:"and not"},g.FUNCTION_DISPATCH);const T=E.concat({begin:/\{/,end:/\}/,contains:C}),I={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(E)},$={begin:w+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},g.CSS_VARIABLE,{className:"attribute",begin:"\\b("+u.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:E}}]},X={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:P,returnEnd:!0,contains:E,relevance:0}},j={className:"variable",variants:[{begin:"@"+S+"\\s*:",relevance:15},{begin:"@"+S}],starts:{end:"[;}]",returnEnd:!0,contains:T}},U={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:w,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,I,D("keyword","all\\b"),D("variable","@\\{"+S+"\\}"),{begin:"\\b("+r.join("|")+")\\b",className:"selector-tag"},g.CSS_NUMBER_MODE,D("selector-tag",w,0),D("selector-id","#"+w),D("selector-class","\\."+w,0),D("selector-tag","&",0),g.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+a.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+l.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:T},{begin:"!important"},g.FUNCTION_DISPATCH]},z={begin:S+`:(:)?(${y.join("|")})`,returnBegin:!0,contains:[U]};return C.push(p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,X,j,z,$,U,I,g.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:`[=>'/<($"]`,contains:C}}return zg=f,zg}var Pg,Ow;function Jz(){if(Ow)return Pg;Ow=1;function e(t){const n="\\[=*\\[",r="\\]=*\\]",i={begin:n,end:r,contains:["self"]},a=[t.COMMENT("--(?!"+n+")","$"),t.COMMENT("--"+n,r,{contains:[i],relevance:10})];return{name:"Lua",aliases:["pluto"],keywords:{$pattern:t.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[t.inherit(t.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},t.C_NUMBER_MODE,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,{className:"string",begin:n,end:r,contains:[i],relevance:5}])}}return Pg=e,Pg}var Hg,jw;function eP(){if(jw)return Hg;jw=1;function e(t){const n={className:"variable",variants:[{begin:"\\$\\("+t.UNDERSCORE_IDENT_RE+"\\)",contains:[t.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},r={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,n]},i={className:"variable",begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},contains:[n,r]},a={begin:"^"+t.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},l={className:"meta",begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},u={className:"section",begin:/^[^\s]+:/,end:/$/,contains:[n]};return{name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"},contains:[t.HASH_COMMENT_MODE,n,r,i,a,l,u]}}return Hg=e,Hg}var qg,Lw;function tP(){if(Lw)return qg;Lw=1;function e(t){const n=t.regex,r=["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","class","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","field","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","method","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"],i=/[dualxmsipngr]{0,12}/,a={$pattern:/[\w.]+/,keyword:r.join(" ")},l={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},u={begin:/->\{/,end:/\}/},h={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},f={scope:"variable",variants:[{begin:/\$\d/},{begin:n.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[h]},p={className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{match:/\b0b[0-1][0-1_]*\b/}],relevance:0},g=[t.BACKSLASH_ESCAPE,l,f],y=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],v=(C,E,A="\\1")=>{const D=A==="\\1"?A:n.concat(A,E);return n.concat(n.concat("(?:",C,")"),E,/(?:\\.|[^\\\/])*?/,D,/(?:\\.|[^\\\/])*?/,A,i)},S=(C,E,A)=>n.concat(n.concat("(?:",C,")"),E,/(?:\\.|[^\\\/])*?/,A,i),w=[f,t.HASH_COMMENT_MODE,t.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),u,{className:"string",contains:g,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[t.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},p,{begin:"(\\/\\/|"+t.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[t.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:v("s|tr|y",n.either(...y,{capture:!0}))},{begin:v("s|tr|y","\\(","\\)")},{begin:v("s|tr|y","\\[","\\]")},{begin:v("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:S("(?:m|qr)?",/\//,/\//)},{begin:S("m|qr",n.either(...y,{capture:!0}),/\1/)},{begin:S("m|qr",/\(/,/\)/)},{begin:S("m|qr",/\[/,/\]/)},{begin:S("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[t.TITLE_MODE,h]},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,contains:[t.TITLE_MODE,h,p]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return l.contains=w,u.contains=w,{name:"Perl",aliases:["pl","pm"],keywords:a,contains:w}}return qg=e,qg}var $g,Bw;function nP(){if(Bw)return $g;Bw=1;function e(t){const n={className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},r=/[a-zA-Z@][a-zA-Z0-9_]*/,h={"variable.language":["this","super"],$pattern:r,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},f={$pattern:r,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:h,illegal:"</",contains:[n,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.C_NUMBER_MODE,t.QUOTE_STRING_MODE,t.APOS_STRING_MODE,{className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},t.inherit(t.QUOTE_STRING_MODE,{className:"string"}),{className:"string",begin:/<.*?>/,end:/$/,illegal:"\\n"},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+f.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:f,contains:[t.UNDERSCORE_TITLE_MODE]},{begin:"\\."+t.UNDERSCORE_IDENT_RE,relevance:0}]}}return $g=e,$g}var Fg,zw;function rP(){if(zw)return Fg;zw=1;function e(t){const n=t.regex,r=/(?![A-Za-z0-9])(?![$])/,i=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,r),a=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,r),l=n.concat(/[A-Z]+/,r),u={scope:"variable",match:"\\$+"+i},h={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},f={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},p=t.inherit(t.APOS_STRING_MODE,{illegal:null}),g=t.inherit(t.QUOTE_STRING_MODE,{illegal:null,contains:t.QUOTE_STRING_MODE.contains.concat(f)}),y={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:t.QUOTE_STRING_MODE.contains.concat(f),"on:begin":(O,B)=>{B.data._beginMatch=O[1]||O[2]},"on:end":(O,B)=>{B.data._beginMatch!==O[1]&&B.ignoreMatch()}},v=t.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),S=`[
|
|
314
|
-
]`,w={scope:"string",variants:[g,p,y,v]},C={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},E=["false","null","true"],A=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],D=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],H={keyword:A,literal:(O=>{const B=[];return O.forEach(L=>{B.push(L),L.toLowerCase()===L?B.push(L.toUpperCase()):B.push(L.toLowerCase())}),B})(E),built_in:D},T=O=>O.map(B=>B.replace(/\|\d+$/,"")),I={variants:[{match:[/new/,n.concat(S,"+"),n.concat("(?!",T(D).join("\\b|"),"\\b)"),a],scope:{1:"keyword",4:"title.class"}}]},$=n.concat(i,"\\b(?!\\()"),X={variants:[{match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),$],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[a,n.concat(/::/,n.lookahead(/(?!class\b)/)),$],scope:{1:"title.class",3:"variable.constant"}},{match:[a,n.concat("::",n.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[a,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},j={scope:"attr",match:n.concat(i,n.lookahead(":"),n.lookahead(/(?!::)/))},U={relevance:0,begin:/\(/,end:/\)/,keywords:H,contains:[j,u,X,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,w,C,I]},z={relevance:0,match:[/\b/,n.concat("(?!fn\\b|function\\b|",T(A).join("\\b|"),"|",T(D).join("\\b|"),"\\b)"),i,n.concat(S,"*"),n.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[U]};U.contains.push(z);const W=[j,X,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,w,C,I],F={begin:n.concat(/#\[\s*\\?/,n.either(a,l)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:E,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:E,keyword:["new","array"]},contains:["self",...W]},...W,{scope:"meta",variants:[{match:a},{match:l}]}]};return{case_insensitive:!1,keywords:H,contains:[F,t.HASH_COMMENT_MODE,t.COMMENT("//","$"),t.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:t.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},h,{scope:"variable.language",match:/\$this\b/},u,z,X,{match:[/const/,/\s/,i],scope:{1:"keyword",3:"variable.constant"}},I,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},t.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:H,contains:["self",F,u,X,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,w,C]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[t.inherit(t.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},t.UNDERSCORE_TITLE_MODE]},w,C]}}return Fg=e,Fg}var Ug,Pw;function iP(){if(Pw)return Ug;Pw=1;function e(t){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},t.inherit(t.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),t.inherit(t.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}return Ug=e,Ug}var Gg,Hw;function sP(){if(Hw)return Gg;Hw=1;function e(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}return Gg=e,Gg}var Wg,qw;function aP(){if(qw)return Wg;qw=1;function e(t){const n=t.regex,r=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),i=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],h={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:i,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},f={className:"meta",begin:/^(>>>|\.\.\.) /},p={className:"subst",begin:/\{/,end:/\}/,keywords:h,illegal:/#/},g={begin:/\{\{/,relevance:0},y={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,f],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,f],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,f,g,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,f,g,p]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[t.BACKSLASH_ESCAPE,g,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,g,p]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},v="[0-9](_?[0-9])*",S=`(\\b(${v}))?\\.(${v})|\\b(${v})\\.`,w=`\\b|${i.join("|")}`,C={className:"number",relevance:0,variants:[{begin:`(\\b(${v})|(${S}))[eE][+-]?(${v})[jJ]?(?=${w})`},{begin:`(${S})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${w})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${w})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${w})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${w})`},{begin:`\\b(${v})[jJ](?=${w})`}]},E={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:h,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},A={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:h,contains:["self",f,C,y,t.HASH_COMMENT_MODE]}]};return p.contains=[y,C,f],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:h,illegal:/(<\/|\?)|=>/,contains:[f,C,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},y,E,t.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,r],scope:{1:"keyword",3:"title.function"},contains:[A]},{variants:[{match:[/\bclass/,/\s+/,r,/\s*/,/\(\s*/,r,/\s*\)/]},{match:[/\bclass/,/\s+/,r]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[C,A,y]}]}}return Wg=e,Wg}var Vg,$w;function oP(){if($w)return Vg;$w=1;function e(t){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}return Vg=e,Vg}var Kg,Fw;function lP(){if(Fw)return Kg;Fw=1;function e(t){const n=t.regex,r=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,i=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),a=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,l=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:r,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[t.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:r},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),t.HASH_COMMENT_MODE,{scope:"string",contains:[t.BACKSLASH_ESCAPE],variants:[t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[a,i]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,i]},{scope:{1:"punctuation",2:"number"},match:[l,i]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,i]}]},{scope:{3:"operator"},match:[r,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:a},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:l},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}return Kg=e,Kg}var Yg,Uw;function cP(){if(Uw)return Yg;Uw=1;function e(t){const n=t.regex,r=/(r#)?/,i=n.concat(r,t.UNDERSCORE_IDENT_RE),a=n.concat(r,t.IDENT_RE),l={className:"title.function.invoke",relevance:0,begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,a,n.lookahead(/\s*\(/))},u="([ui](8|16|32|64|128|size)|f(32|64))?",h=["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],f=["true","false","Some","None","Ok","Err"],p=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],g=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:t.IDENT_RE+"!?",type:g,keyword:h,literal:f,built_in:p},illegal:"</",contains:[t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*","\\*/",{contains:["self"]}),t.inherit(t.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*(?!')/},{scope:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'/,end:/'/,contains:[{scope:"char.escape",match:/\\('|\w|x\w{2}|u\w{4}|U\w{8})/}]}]},{className:"number",variants:[{begin:"\\b0b([01_]+)"+u},{begin:"\\b0o([0-7_]+)"+u},{begin:"\\b0x([A-Fa-f0-9_]+)"+u},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+u}],relevance:0},{begin:[/fn/,/\s+/,i],className:{1:"keyword",3:"title.function"}},{className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE]}]},{begin:[/let/,/\s+/,/(?:mut\s+)?/,i],className:{1:"keyword",3:"keyword",4:"variable"}},{begin:[/for/,/\s+/,i,/\s+/,/in/],className:{1:"keyword",3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,i],className:{1:"keyword",3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,i],className:{1:"keyword",3:"title.class"}},{begin:t.IDENT_RE+"::",keywords:{keyword:"Self",built_in:p,type:g}},{className:"punctuation",begin:"->"},l]}}return Yg=e,Yg}var Xg,Gw;function uP(){if(Gw)return Xg;Gw=1;const e=f=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:f.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,4}(-[0-9A-Fa-f][0-9A-Fa-f]{0,4})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:f.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],r=[...t,...n],i=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),l=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),u=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function h(f){const p=e(f),g=l,y=a,v="@[a-z-]+",S="and or not only",C={className:"variable",begin:"(\\$"+"[a-zA-Z-][a-zA-Z0-9_-]*"+")\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[f.C_LINE_COMMENT_MODE,f.C_BLOCK_COMMENT_MODE,p.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},p.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+r.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+y.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+g.join("|")+")"},C,{begin:/\(/,end:/\)/,contains:[p.CSS_NUMBER_MODE]},p.CSS_VARIABLE,{className:"attribute",begin:"\\b("+u.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[p.BLOCK_COMMENT,C,p.HEXCOLOR,p.CSS_NUMBER_MODE,p.UNICODE_RANGE,f.QUOTE_STRING_MODE,f.APOS_STRING_MODE,p.IMPORTANT,p.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:v,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:S,attribute:i.join(" ")},contains:[{begin:v,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},C,f.QUOTE_STRING_MODE,f.APOS_STRING_MODE,p.HEXCOLOR,p.CSS_NUMBER_MODE]},p.FUNCTION_DISPATCH]}}return Xg=h,Xg}var Zg,Ww;function dP(){if(Ww)return Zg;Ww=1;function e(t){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}return Zg=e,Zg}var Qg,Vw;function hP(){if(Vw)return Qg;Vw=1;function e(t){const n=t.regex,r=t.COMMENT("--","$"),i={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},a={begin:/"/,end:/"/,contains:[{match:/""/}]},l=["true","false","unknown"],u=["double precision","large object","with timezone","without timezone"],h=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],f=["add","asc","collation","desc","final","first","last","view"],p=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],g=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],y=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],v=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],S=g,w=[...p,...f].filter(T=>!g.includes(T)),C={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},E={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},A={match:n.concat(/\b/,n.either(...S),/\s*\(/),relevance:0,keywords:{built_in:S}};function D(T){return n.concat(/\b/,n.either(...T.map(I=>I.replace(/\s+/,"\\s+"))),/\b/)}const P={scope:"keyword",match:D(v),relevance:0};function H(T,{exceptions:I,when:$}={}){const X=$;return I=I||[],T.map(j=>j.match(/\|\d+$/)||I.includes(j)?j:X(j)?`${j}|0`:j)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:H(w,{when:T=>T.length<3}),literal:l,type:h,built_in:y},contains:[{scope:"type",match:D(u)},P,A,C,i,a,t.C_NUMBER_MODE,t.C_BLOCK_COMMENT_MODE,r,E]}}return Qg=e,Qg}var Jg,Kw;function fP(){if(Kw)return Jg;Kw=1;function e($){return $?typeof $=="string"?$:$.source:null}function t($){return n("(?=",$,")")}function n(...$){return $.map(j=>e(j)).join("")}function r($){const X=$[$.length-1];return typeof X=="object"&&X.constructor===Object?($.splice($.length-1,1),X):{}}function i(...$){return"("+(r($).capture?"":"?:")+$.map(U=>e(U)).join("|")+")"}const a=$=>n(/\b/,$,/\w$/.test($)?/\b/:/\B/),l=["Protocol","Type"].map(a),u=["init","self"].map(a),h=["Any","Self"],f=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],p=["false","nil","true"],g=["assignment","associativity","higherThan","left","lowerThan","none","right"],y=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],v=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],S=i(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),w=i(S,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),C=n(S,w,"*"),E=i(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),A=i(E,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),D=n(E,A,"*"),P=n(/[A-Z]/,A,"*"),H=["attached","autoclosure",n(/convention\(/,i("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",n(/objc\(/,D,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],T=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function I($){const X={match:/\s+/,relevance:0},j=$.COMMENT("/\\*","\\*/",{contains:["self"]}),U=[$.C_LINE_COMMENT_MODE,j],z={match:[/\./,i(...l,...u)],className:{2:"keyword"}},W={match:n(/\./,i(...f)),relevance:0},F=f.filter(Ce=>typeof Ce=="string").concat(["_|0"]),O=f.filter(Ce=>typeof Ce!="string").concat(h).map(a),B={variants:[{className:"keyword",match:i(...O,...u)}]},L={$pattern:i(/\b\w+/,/#\w+/),keyword:F.concat(y),literal:p},V=[z,W,B],oe={match:n(/\./,i(...v)),relevance:0},K={className:"built_in",match:n(/\b/,i(...v),/(?=\()/)},Q=[oe,K],G={match:/->/,relevance:0},M={className:"operator",relevance:0,variants:[{match:C},{match:`\\.(\\.|${w})+`}]},ce=[G,M],Y="([0-9]_*)+",te="([0-9a-fA-F]_*)+",re={className:"number",relevance:0,variants:[{match:`\\b(${Y})(\\.(${Y}))?([eE][+-]?(${Y}))?\\b`},{match:`\\b0x(${te})(\\.(${te}))?([pP][+-]?(${Y}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},ee=(Ce="")=>({className:"subst",variants:[{match:n(/\\/,Ce,/[0\\tnr"']/)},{match:n(/\\/,Ce,/u\{[0-9a-fA-F]{1,8}\}/)}]}),ne=(Ce="")=>({className:"subst",match:n(/\\/,Ce,/[\t ]*(?:[\r\n]|\r\n)/)}),de=(Ce="")=>({className:"subst",label:"interpol",begin:n(/\\/,Ce,/\(/),end:/\)/}),fe=(Ce="")=>({begin:n(Ce,/"""/),end:n(/"""/,Ce),contains:[ee(Ce),ne(Ce),de(Ce)]}),Re=(Ce="")=>({begin:n(Ce,/"/),end:n(/"/,Ce),contains:[ee(Ce),de(Ce)]}),qe={className:"string",variants:[fe(),fe("#"),fe("##"),fe("###"),Re(),Re("#"),Re("##"),Re("###")]},ye=[$.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[$.BACKSLASH_ESCAPE]}],Ue={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:ye},tt=Ce=>{const ct=n(Ce,/\//),at=n(/\//,Ce);return{begin:ct,end:at,contains:[...ye,{scope:"comment",begin:`#(?!.*${at})`,end:/$/}]}},Ae={scope:"regexp",variants:[tt("###"),tt("##"),tt("#"),Ue]},Ve={match:n(/`/,D,/`/)},ot={className:"variable",match:/\$\d+/},Xe={className:"variable",match:`\\$${A}+`},Pe=[Ve,ot,Xe],xe={match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:T,contains:[...ce,re,qe]}]}},De={scope:"keyword",match:n(/@/,i(...H),t(i(/\(/,/\s+/)))},_e={scope:"meta",match:n(/@/,D)},Me=[xe,De,_e],me={match:t(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:n(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,A,"+")},{className:"type",match:P,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:n(/\s+&\s+/,t(P)),relevance:0}]},Te={begin:/</,end:/>/,keywords:L,contains:[...U,...V,...Me,G,me]};me.contains.push(Te);const Be={match:n(D,/\s*:/),keywords:"_|0",relevance:0},ze={begin:/\(/,end:/\)/,relevance:0,keywords:L,contains:["self",Be,...U,Ae,...V,...Q,...ce,re,qe,...Pe,...Me,me]},Ye={begin:/</,end:/>/,keywords:"repeat each",contains:[...U,me]},pt={begin:i(t(n(D,/\s*:/)),t(n(D,/\s+/,D,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:D}]},wt={begin:/\(/,end:/\)/,keywords:L,contains:[pt,...U,...V,...ce,re,qe,...Me,me,ze],endsParent:!0,illegal:/["']/},Pt={match:[/(func|macro)/,/\s+/,i(Ve.match,D,C)],className:{1:"keyword",3:"title.function"},contains:[Ye,wt,X],illegal:[/\[/,/%/]},Tt={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[Ye,wt,X],illegal:/\[|%/},_t={match:[/operator/,/\s+/,C],className:{1:"keyword",3:"title"}},Mt={begin:[/precedencegroup/,/\s+/,P],className:{1:"keyword",3:"title"},contains:[me],keywords:[...g,...p],end:/}/},fn={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},dn={match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},kt={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,D,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:L,contains:[Ye,...V,{begin:/:/,end:/\{/,keywords:L,contains:[{scope:"title.class.inherited",match:P},...V],relevance:0}]};for(const Ce of qe.variants){const ct=Ce.contains.find(ve=>ve.label==="interpol");ct.keywords=L;const at=[...V,...Q,...ce,re,qe,...Pe];ct.contains=[...at,{begin:/\(/,end:/\)/,contains:["self",...at]}]}return{name:"Swift",keywords:L,contains:[...U,Pt,Tt,fn,dn,kt,_t,Mt,{beginKeywords:"import",end:/$/,contains:[...U],relevance:0},Ae,...V,...Q,...ce,re,qe,...Pe,...Me,me,ze]}}return Jg=I,Jg}var e1,Yw;function mP(){if(Yw)return e1;Yw=1;function e(t){const n="true false yes no null",r="[\\w#;/?:@&=+$,.~*'()[\\]]+",i={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},a={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},l={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},u={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[t.BACKSLASH_ESCAPE,a]},h=t.inherit(u,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),v={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},S={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},w={begin:/\{/,end:/\}/,contains:[S],illegal:"\\n",relevance:0},C={begin:"\\[",end:"\\]",contains:[S],illegal:"\\n",relevance:0},E=[i,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+r},{className:"type",begin:"!<"+r+">"},{className:"type",begin:"!"+r},{className:"type",begin:"!!"+r},{className:"meta",begin:"&"+t.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+t.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},t.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},v,{className:"number",begin:t.C_NUMBER_RE+"\\b",relevance:0},w,C,l,u],A=[...E];return A.pop(),A.push(h),S.contains=A,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:E}}return e1=e,e1}var t1,Xw;function pP(){if(Xw)return t1;Xw=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],n=["true","false","null","undefined","NaN","Infinity"],r=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],i=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],a=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],l=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],u=[].concat(a,r,i);function h(p){const g=p.regex,y=(ee,{after:ne})=>{const de="</"+ee[0].slice(1);return ee.input.indexOf(de,ne)!==-1},v=e,S={begin:"<>",end:"</>"},w=/<[A-Za-z0-9\\._:-]+\s*\/>/,C={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(ee,ne)=>{const de=ee[0].length+ee.index,fe=ee.input[de];if(fe==="<"||fe===","){ne.ignoreMatch();return}fe===">"&&(y(ee,{after:de})||ne.ignoreMatch());let Re;const qe=ee.input.substring(de);if(Re=qe.match(/^\s*=/)){ne.ignoreMatch();return}if((Re=qe.match(/^\s+extends\s+/))&&Re.index===0){ne.ignoreMatch();return}}},E={$pattern:e,keyword:t,literal:n,built_in:u,"variable.language":l},A="[0-9](_?[0-9])*",D=`\\.(${A})`,P="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",H={className:"number",variants:[{begin:`(\\b(${P})((${D})|\\.)?|(${D}))[eE][+-]?(${A})\\b`},{begin:`\\b(${P})\\b((${D})\\b|\\.)?|(${D})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},T={className:"subst",begin:"\\$\\{",end:"\\}",keywords:E,contains:[]},I={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,T],subLanguage:"xml"}},$={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,T],subLanguage:"css"}},X={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,T],subLanguage:"graphql"}},j={className:"string",begin:"`",end:"`",contains:[p.BACKSLASH_ESCAPE,T]},z={className:"comment",variants:[p.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:v+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),p.C_BLOCK_COMMENT_MODE,p.C_LINE_COMMENT_MODE]},W=[p.APOS_STRING_MODE,p.QUOTE_STRING_MODE,I,$,X,j,{match:/\$\d+/},H];T.contains=W.concat({begin:/\{/,end:/\}/,keywords:E,contains:["self"].concat(W)});const F=[].concat(z,T.contains),O=F.concat([{begin:/(\s*)\(/,end:/\)/,keywords:E,contains:["self"].concat(F)}]),B={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:O},L={variants:[{match:[/class/,/\s+/,v,/\s+/,/extends/,/\s+/,g.concat(v,"(",g.concat(/\./,v),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,v],scope:{1:"keyword",3:"title.class"}}]},V={relevance:0,match:g.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...r,...i]}},oe={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},K={variants:[{match:[/function/,/\s+/,v,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[B],illegal:/%/},Q={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function G(ee){return g.concat("(?!",ee.join("|"),")")}const M={match:g.concat(/\b/,G([...a,"super","import","await"].map(ee=>`${ee}\\s*\\(`)),v,g.lookahead(/\s*\(/)),className:"title.function",relevance:0},ce={begin:g.concat(/\./,g.lookahead(g.concat(v,/(?![0-9A-Za-z$_(])/))),end:v,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Y={match:[/get|set/,/\s+/,v,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},B]},te="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+p.UNDERSCORE_IDENT_RE+")\\s*=>",re={match:[/const|var|let/,/\s+/,v,/\s*/,/=\s*/,/(async\s*)?/,g.lookahead(te)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[B]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:E,exports:{PARAMS_CONTAINS:O,CLASS_REFERENCE:V},illegal:/#(?![$_A-Za-z])/,contains:[p.SHEBANG({label:"shebang",binary:"node",relevance:5}),oe,p.APOS_STRING_MODE,p.QUOTE_STRING_MODE,I,$,X,j,z,{match:/\$\d+/},H,V,{scope:"attr",match:v+g.lookahead(":"),relevance:0},re,{begin:"("+p.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[z,p.REGEXP_MODE,{className:"function",begin:te,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:p.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:O}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:S.begin,end:S.end},{match:w},{begin:C.begin,"on:begin":C.isTrulyOpeningTag,end:C.end}],subLanguage:"xml",contains:[{begin:C.begin,end:C.end,skip:!0,contains:["self"]}]}]},K,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+p.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[B,p.inherit(p.TITLE_MODE,{begin:v,className:"title.function"})]},{match:/\.\.\./,relevance:0},ce,{match:"\\$"+v,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[B]},M,Q,L,Y,{match:/\$[(.]/}]}}function f(p){const g=p.regex,y=h(p),v=e,S=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],w={begin:[/namespace/,/\s+/,p.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},C={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:S},contains:[y.exports.CLASS_REFERENCE]},E={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},A=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],D={$pattern:e,keyword:t.concat(A),literal:n,built_in:u.concat(S),"variable.language":l},P={className:"meta",begin:"@"+v},H=(X,j,U)=>{const z=X.contains.findIndex(W=>W.label===j);if(z===-1)throw new Error("can not find mode to replace");X.contains.splice(z,1,U)};Object.assign(y.keywords,D),y.exports.PARAMS_CONTAINS.push(P);const T=y.contains.find(X=>X.scope==="attr"),I=Object.assign({},T,{match:g.concat(v,g.lookahead(/\s*\?:/))});y.exports.PARAMS_CONTAINS.push([y.exports.CLASS_REFERENCE,T,I]),y.contains=y.contains.concat([P,w,C,I]),H(y,"shebang",p.SHEBANG()),H(y,"use_strict",E);const $=y.contains.find(X=>X.label==="func.def");return $.relevance=0,Object.assign(y,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),y}return t1=f,t1}var n1,Zw;function gP(){if(Zw)return n1;Zw=1;function e(t){const n=t.regex,r={className:"string",begin:/"(""|[^/n])"C\b/},i={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},a=/\d{1,2}\/\d{1,2}\/\d{4}/,l=/\d{4}-\d{1,2}-\d{1,2}/,u=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,h=/\d{1,2}(:\d{1,2}){1,2}/,f={className:"literal",variants:[{begin:n.concat(/# */,n.either(l,a),/ *#/)},{begin:n.concat(/# */,h,/ *#/)},{begin:n.concat(/# */,u,/ *#/)},{begin:n.concat(/# */,n.either(l,a),/ +/,n.either(u,h),/ *#/)}]},p={className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},g={className:"label",begin:/^\w+:/},y=t.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),v=t.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[r,i,f,p,g,y,v,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[v]}]}}return n1=e,n1}var r1,Qw;function vP(){if(Qw)return r1;Qw=1;function e(t){t.regex;const n=t.COMMENT(/\(;/,/;\)/);n.contains.push("self");const r=t.COMMENT(/;;/,/$/),i=["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"],a={begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},l={className:"variable",begin:/\$[\w_]+/},u={match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},h={className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/},f={match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},p={className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/};return{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:i},contains:[r,n,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},l,u,a,t.QUOTE_STRING_MODE,f,p,h]}}return r1=e,r1}var i1,Jw;function bP(){if(Jw)return i1;Jw=1;var e=jz();return e.registerLanguage("xml",Lz()),e.registerLanguage("bash",Bz()),e.registerLanguage("c",zz()),e.registerLanguage("cpp",Pz()),e.registerLanguage("csharp",Hz()),e.registerLanguage("css",qz()),e.registerLanguage("markdown",$z()),e.registerLanguage("diff",Fz()),e.registerLanguage("ruby",Uz()),e.registerLanguage("go",Gz()),e.registerLanguage("graphql",Wz()),e.registerLanguage("ini",Vz()),e.registerLanguage("java",Kz()),e.registerLanguage("javascript",Yz()),e.registerLanguage("json",Xz()),e.registerLanguage("kotlin",Zz()),e.registerLanguage("less",Qz()),e.registerLanguage("lua",Jz()),e.registerLanguage("makefile",eP()),e.registerLanguage("perl",tP()),e.registerLanguage("objectivec",nP()),e.registerLanguage("php",rP()),e.registerLanguage("php-template",iP()),e.registerLanguage("plaintext",sP()),e.registerLanguage("python",aP()),e.registerLanguage("python-repl",oP()),e.registerLanguage("r",lP()),e.registerLanguage("rust",cP()),e.registerLanguage("scss",uP()),e.registerLanguage("shell",dP()),e.registerLanguage("sql",hP()),e.registerLanguage("swift",fP()),e.registerLanguage("yaml",mP()),e.registerLanguage("typescript",pP()),e.registerLanguage("vbnet",gP()),e.registerLanguage("wasm",vP()),e.HighlightJS=e,e.default=e,i1=e,i1}var yP=bP();const e3=Zf(yP),_P=[[eL,{singleTilde:!1}],[nz,{singleDollarTextMath:!0}]],xP=[Oz];let s1=null,t3=null;async function SP(){return s1||(t3??=OI(()=>import("./mermaid.core-5R4WTYSN.js").then(e=>e.bp),[]).then(e=>{e.default.initialize({startOnLoad:!1,securityLevel:"strict",theme:"neutral"});const t=async(n,r)=>{const{svg:i}=await e.default.render(`oc-mermaid-${Math.random().toString(36).slice(2,10)}`,r);n.innerHTML=i};return s1=t,t}).catch(()=>null),t3)}function wP({code:e}){const t=_.useRef(null),[n,r]=_.useState(!1);return _.useEffect(()=>{let i=!1;return SP().then(a=>{if(i||!a||!t.current){a||r(!0);return}a(t.current,e).catch(()=>{i||r(!0)})}),()=>{i=!0}},[e]),n?c.jsx(Iv,{lang:"mermaid",text:e}):c.jsx("div",{className:"oc-mermaid",ref:t,role:"img","aria-label":"Mermaid 图表"})}function Iv({lang:e,text:t,children:n}){const[r,i]=_.useState(!1),a=_.useMemo(()=>{const u=e3.getLanguage(e)?e:"";return u?e3.highlight(t,{language:u,ignoreIllegals:!0}).value:void 0},[e,t]),l=()=>{navigator.clipboard?.writeText(t).then(()=>{i(!0),window.setTimeout(()=>i(!1),1600)},()=>{})};return c.jsxs("div",{className:"oc-codeblock",children:[c.jsxs("div",{className:"oc-codeblock-head",children:[c.jsx("span",{className:"oc-codeblock-lang",children:e||"text"}),c.jsx("button",{type:"button",className:"oc-codeblock-copy",onClick:l,children:r?"已复制":"复制"})]}),c.jsx("pre",{children:a!==void 0?c.jsx("code",{className:`hljs language-${e}`,dangerouslySetInnerHTML:{__html:a}}):c.jsx("code",{className:e?`hljs language-${e}`:"hljs",children:n??t})})]})}function kP(e){return e?.children?.find(r=>r.tagName==="thead"||r.tagName==="tbody")?.children?.find(r=>r.tagName==="tr")?.children?.filter(r=>r.tagName==="th"||r.tagName==="td").length??0}function Nv(e){if(e==null||typeof e=="boolean")return"";if(typeof e=="string"||typeof e=="number")return String(e);if(Array.isArray(e))return e.map(Nv).join("");if(typeof e=="object"&&"props"in e){const t=e.props;return Nv(t?.children)}return""}const CP={pre({children:e}){return c.jsx(c.Fragment,{children:e})},code({className:e,children:t,...n}){const r=Nv(t).replace(/\n$/,""),i=/language-([\w-]+)/.exec(e??"");return i?.[1]==="mermaid"?c.jsx(wP,{code:r}):i||e&&r.includes(`
|
|
314
|
+
]`,w={scope:"string",variants:[g,p,y,v]},C={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},E=["false","null","true"],A=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],D=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],H={keyword:A,literal:(O=>{const B=[];return O.forEach(L=>{B.push(L),L.toLowerCase()===L?B.push(L.toUpperCase()):B.push(L.toLowerCase())}),B})(E),built_in:D},T=O=>O.map(B=>B.replace(/\|\d+$/,"")),I={variants:[{match:[/new/,n.concat(S,"+"),n.concat("(?!",T(D).join("\\b|"),"\\b)"),a],scope:{1:"keyword",4:"title.class"}}]},$=n.concat(i,"\\b(?!\\()"),X={variants:[{match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),$],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[a,n.concat(/::/,n.lookahead(/(?!class\b)/)),$],scope:{1:"title.class",3:"variable.constant"}},{match:[a,n.concat("::",n.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[a,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},j={scope:"attr",match:n.concat(i,n.lookahead(":"),n.lookahead(/(?!::)/))},U={relevance:0,begin:/\(/,end:/\)/,keywords:H,contains:[j,u,X,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,w,C,I]},z={relevance:0,match:[/\b/,n.concat("(?!fn\\b|function\\b|",T(A).join("\\b|"),"|",T(D).join("\\b|"),"\\b)"),i,n.concat(S,"*"),n.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[U]};U.contains.push(z);const W=[j,X,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,w,C,I],F={begin:n.concat(/#\[\s*\\?/,n.either(a,l)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:E,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:E,keyword:["new","array"]},contains:["self",...W]},...W,{scope:"meta",variants:[{match:a},{match:l}]}]};return{case_insensitive:!1,keywords:H,contains:[F,t.HASH_COMMENT_MODE,t.COMMENT("//","$"),t.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:t.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},h,{scope:"variable.language",match:/\$this\b/},u,z,X,{match:[/const/,/\s/,i],scope:{1:"keyword",3:"variable.constant"}},I,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},t.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:H,contains:["self",F,u,X,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,w,C]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[t.inherit(t.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},t.UNDERSCORE_TITLE_MODE]},w,C]}}return Fg=e,Fg}var Ug,Pw;function iP(){if(Pw)return Ug;Pw=1;function e(t){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},t.inherit(t.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),t.inherit(t.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}return Ug=e,Ug}var Gg,Hw;function sP(){if(Hw)return Gg;Hw=1;function e(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}return Gg=e,Gg}var Wg,qw;function aP(){if(qw)return Wg;qw=1;function e(t){const n=t.regex,r=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),i=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],h={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:i,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},f={className:"meta",begin:/^(>>>|\.\.\.) /},p={className:"subst",begin:/\{/,end:/\}/,keywords:h,illegal:/#/},g={begin:/\{\{/,relevance:0},y={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,f],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,f],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,f,g,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,f,g,p]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[t.BACKSLASH_ESCAPE,g,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,g,p]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},v="[0-9](_?[0-9])*",S=`(\\b(${v}))?\\.(${v})|\\b(${v})\\.`,w=`\\b|${i.join("|")}`,C={className:"number",relevance:0,variants:[{begin:`(\\b(${v})|(${S}))[eE][+-]?(${v})[jJ]?(?=${w})`},{begin:`(${S})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${w})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${w})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${w})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${w})`},{begin:`\\b(${v})[jJ](?=${w})`}]},E={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:h,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},A={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:h,contains:["self",f,C,y,t.HASH_COMMENT_MODE]}]};return p.contains=[y,C,f],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:h,illegal:/(<\/|\?)|=>/,contains:[f,C,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},y,E,t.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,r],scope:{1:"keyword",3:"title.function"},contains:[A]},{variants:[{match:[/\bclass/,/\s+/,r,/\s*/,/\(\s*/,r,/\s*\)/]},{match:[/\bclass/,/\s+/,r]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[C,A,y]}]}}return Wg=e,Wg}var Vg,$w;function oP(){if($w)return Vg;$w=1;function e(t){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}return Vg=e,Vg}var Kg,Fw;function lP(){if(Fw)return Kg;Fw=1;function e(t){const n=t.regex,r=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,i=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),a=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,l=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:r,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[t.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:r},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),t.HASH_COMMENT_MODE,{scope:"string",contains:[t.BACKSLASH_ESCAPE],variants:[t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[a,i]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,i]},{scope:{1:"punctuation",2:"number"},match:[l,i]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,i]}]},{scope:{3:"operator"},match:[r,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:a},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:l},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}return Kg=e,Kg}var Yg,Uw;function cP(){if(Uw)return Yg;Uw=1;function e(t){const n=t.regex,r=/(r#)?/,i=n.concat(r,t.UNDERSCORE_IDENT_RE),a=n.concat(r,t.IDENT_RE),l={className:"title.function.invoke",relevance:0,begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,a,n.lookahead(/\s*\(/))},u="([ui](8|16|32|64|128|size)|f(32|64))?",h=["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],f=["true","false","Some","None","Ok","Err"],p=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],g=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:t.IDENT_RE+"!?",type:g,keyword:h,literal:f,built_in:p},illegal:"</",contains:[t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*","\\*/",{contains:["self"]}),t.inherit(t.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*(?!')/},{scope:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'/,end:/'/,contains:[{scope:"char.escape",match:/\\('|\w|x\w{2}|u\w{4}|U\w{8})/}]}]},{className:"number",variants:[{begin:"\\b0b([01_]+)"+u},{begin:"\\b0o([0-7_]+)"+u},{begin:"\\b0x([A-Fa-f0-9_]+)"+u},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+u}],relevance:0},{begin:[/fn/,/\s+/,i],className:{1:"keyword",3:"title.function"}},{className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE]}]},{begin:[/let/,/\s+/,/(?:mut\s+)?/,i],className:{1:"keyword",3:"keyword",4:"variable"}},{begin:[/for/,/\s+/,i,/\s+/,/in/],className:{1:"keyword",3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,i],className:{1:"keyword",3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,i],className:{1:"keyword",3:"title.class"}},{begin:t.IDENT_RE+"::",keywords:{keyword:"Self",built_in:p,type:g}},{className:"punctuation",begin:"->"},l]}}return Yg=e,Yg}var Xg,Gw;function uP(){if(Gw)return Xg;Gw=1;const e=f=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:f.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,4}(-[0-9A-Fa-f][0-9A-Fa-f]{0,4})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:f.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],r=[...t,...n],i=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),l=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),u=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function h(f){const p=e(f),g=l,y=a,v="@[a-z-]+",S="and or not only",C={className:"variable",begin:"(\\$"+"[a-zA-Z-][a-zA-Z0-9_-]*"+")\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[f.C_LINE_COMMENT_MODE,f.C_BLOCK_COMMENT_MODE,p.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},p.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+r.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+y.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+g.join("|")+")"},C,{begin:/\(/,end:/\)/,contains:[p.CSS_NUMBER_MODE]},p.CSS_VARIABLE,{className:"attribute",begin:"\\b("+u.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[p.BLOCK_COMMENT,C,p.HEXCOLOR,p.CSS_NUMBER_MODE,p.UNICODE_RANGE,f.QUOTE_STRING_MODE,f.APOS_STRING_MODE,p.IMPORTANT,p.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:v,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:S,attribute:i.join(" ")},contains:[{begin:v,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},C,f.QUOTE_STRING_MODE,f.APOS_STRING_MODE,p.HEXCOLOR,p.CSS_NUMBER_MODE]},p.FUNCTION_DISPATCH]}}return Xg=h,Xg}var Zg,Ww;function dP(){if(Ww)return Zg;Ww=1;function e(t){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}return Zg=e,Zg}var Qg,Vw;function hP(){if(Vw)return Qg;Vw=1;function e(t){const n=t.regex,r=t.COMMENT("--","$"),i={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},a={begin:/"/,end:/"/,contains:[{match:/""/}]},l=["true","false","unknown"],u=["double precision","large object","with timezone","without timezone"],h=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],f=["add","asc","collation","desc","final","first","last","view"],p=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],g=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],y=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],v=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],S=g,w=[...p,...f].filter(T=>!g.includes(T)),C={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},E={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},A={match:n.concat(/\b/,n.either(...S),/\s*\(/),relevance:0,keywords:{built_in:S}};function D(T){return n.concat(/\b/,n.either(...T.map(I=>I.replace(/\s+/,"\\s+"))),/\b/)}const P={scope:"keyword",match:D(v),relevance:0};function H(T,{exceptions:I,when:$}={}){const X=$;return I=I||[],T.map(j=>j.match(/\|\d+$/)||I.includes(j)?j:X(j)?`${j}|0`:j)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:H(w,{when:T=>T.length<3}),literal:l,type:h,built_in:y},contains:[{scope:"type",match:D(u)},P,A,C,i,a,t.C_NUMBER_MODE,t.C_BLOCK_COMMENT_MODE,r,E]}}return Qg=e,Qg}var Jg,Kw;function fP(){if(Kw)return Jg;Kw=1;function e($){return $?typeof $=="string"?$:$.source:null}function t($){return n("(?=",$,")")}function n(...$){return $.map(j=>e(j)).join("")}function r($){const X=$[$.length-1];return typeof X=="object"&&X.constructor===Object?($.splice($.length-1,1),X):{}}function i(...$){return"("+(r($).capture?"":"?:")+$.map(U=>e(U)).join("|")+")"}const a=$=>n(/\b/,$,/\w$/.test($)?/\b/:/\B/),l=["Protocol","Type"].map(a),u=["init","self"].map(a),h=["Any","Self"],f=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],p=["false","nil","true"],g=["assignment","associativity","higherThan","left","lowerThan","none","right"],y=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],v=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],S=i(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),w=i(S,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),C=n(S,w,"*"),E=i(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),A=i(E,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),D=n(E,A,"*"),P=n(/[A-Z]/,A,"*"),H=["attached","autoclosure",n(/convention\(/,i("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",n(/objc\(/,D,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],T=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function I($){const X={match:/\s+/,relevance:0},j=$.COMMENT("/\\*","\\*/",{contains:["self"]}),U=[$.C_LINE_COMMENT_MODE,j],z={match:[/\./,i(...l,...u)],className:{2:"keyword"}},W={match:n(/\./,i(...f)),relevance:0},F=f.filter(Ce=>typeof Ce=="string").concat(["_|0"]),O=f.filter(Ce=>typeof Ce!="string").concat(h).map(a),B={variants:[{className:"keyword",match:i(...O,...u)}]},L={$pattern:i(/\b\w+/,/#\w+/),keyword:F.concat(y),literal:p},V=[z,W,B],oe={match:n(/\./,i(...v)),relevance:0},K={className:"built_in",match:n(/\b/,i(...v),/(?=\()/)},Q=[oe,K],G={match:/->/,relevance:0},M={className:"operator",relevance:0,variants:[{match:C},{match:`\\.(\\.|${w})+`}]},ce=[G,M],Y="([0-9]_*)+",te="([0-9a-fA-F]_*)+",re={className:"number",relevance:0,variants:[{match:`\\b(${Y})(\\.(${Y}))?([eE][+-]?(${Y}))?\\b`},{match:`\\b0x(${te})(\\.(${te}))?([pP][+-]?(${Y}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},ee=(Ce="")=>({className:"subst",variants:[{match:n(/\\/,Ce,/[0\\tnr"']/)},{match:n(/\\/,Ce,/u\{[0-9a-fA-F]{1,8}\}/)}]}),ne=(Ce="")=>({className:"subst",match:n(/\\/,Ce,/[\t ]*(?:[\r\n]|\r\n)/)}),de=(Ce="")=>({className:"subst",label:"interpol",begin:n(/\\/,Ce,/\(/),end:/\)/}),fe=(Ce="")=>({begin:n(Ce,/"""/),end:n(/"""/,Ce),contains:[ee(Ce),ne(Ce),de(Ce)]}),Re=(Ce="")=>({begin:n(Ce,/"/),end:n(/"/,Ce),contains:[ee(Ce),de(Ce)]}),qe={className:"string",variants:[fe(),fe("#"),fe("##"),fe("###"),Re(),Re("#"),Re("##"),Re("###")]},ye=[$.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[$.BACKSLASH_ESCAPE]}],Ue={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:ye},tt=Ce=>{const ct=n(Ce,/\//),at=n(/\//,Ce);return{begin:ct,end:at,contains:[...ye,{scope:"comment",begin:`#(?!.*${at})`,end:/$/}]}},Ae={scope:"regexp",variants:[tt("###"),tt("##"),tt("#"),Ue]},Ve={match:n(/`/,D,/`/)},ot={className:"variable",match:/\$\d+/},Xe={className:"variable",match:`\\$${A}+`},Pe=[Ve,ot,Xe],xe={match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:T,contains:[...ce,re,qe]}]}},De={scope:"keyword",match:n(/@/,i(...H),t(i(/\(/,/\s+/)))},_e={scope:"meta",match:n(/@/,D)},Me=[xe,De,_e],me={match:t(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:n(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,A,"+")},{className:"type",match:P,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:n(/\s+&\s+/,t(P)),relevance:0}]},Te={begin:/</,end:/>/,keywords:L,contains:[...U,...V,...Me,G,me]};me.contains.push(Te);const Be={match:n(D,/\s*:/),keywords:"_|0",relevance:0},ze={begin:/\(/,end:/\)/,relevance:0,keywords:L,contains:["self",Be,...U,Ae,...V,...Q,...ce,re,qe,...Pe,...Me,me]},Ye={begin:/</,end:/>/,keywords:"repeat each",contains:[...U,me]},pt={begin:i(t(n(D,/\s*:/)),t(n(D,/\s+/,D,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:D}]},wt={begin:/\(/,end:/\)/,keywords:L,contains:[pt,...U,...V,...ce,re,qe,...Me,me,ze],endsParent:!0,illegal:/["']/},Pt={match:[/(func|macro)/,/\s+/,i(Ve.match,D,C)],className:{1:"keyword",3:"title.function"},contains:[Ye,wt,X],illegal:[/\[/,/%/]},Tt={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[Ye,wt,X],illegal:/\[|%/},_t={match:[/operator/,/\s+/,C],className:{1:"keyword",3:"title"}},Mt={begin:[/precedencegroup/,/\s+/,P],className:{1:"keyword",3:"title"},contains:[me],keywords:[...g,...p],end:/}/},fn={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},dn={match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},kt={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,D,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:L,contains:[Ye,...V,{begin:/:/,end:/\{/,keywords:L,contains:[{scope:"title.class.inherited",match:P},...V],relevance:0}]};for(const Ce of qe.variants){const ct=Ce.contains.find(ve=>ve.label==="interpol");ct.keywords=L;const at=[...V,...Q,...ce,re,qe,...Pe];ct.contains=[...at,{begin:/\(/,end:/\)/,contains:["self",...at]}]}return{name:"Swift",keywords:L,contains:[...U,Pt,Tt,fn,dn,kt,_t,Mt,{beginKeywords:"import",end:/$/,contains:[...U],relevance:0},Ae,...V,...Q,...ce,re,qe,...Pe,...Me,me,ze]}}return Jg=I,Jg}var e1,Yw;function mP(){if(Yw)return e1;Yw=1;function e(t){const n="true false yes no null",r="[\\w#;/?:@&=+$,.~*'()[\\]]+",i={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},a={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},l={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},u={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[t.BACKSLASH_ESCAPE,a]},h=t.inherit(u,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),v={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},S={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},w={begin:/\{/,end:/\}/,contains:[S],illegal:"\\n",relevance:0},C={begin:"\\[",end:"\\]",contains:[S],illegal:"\\n",relevance:0},E=[i,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+r},{className:"type",begin:"!<"+r+">"},{className:"type",begin:"!"+r},{className:"type",begin:"!!"+r},{className:"meta",begin:"&"+t.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+t.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},t.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},v,{className:"number",begin:t.C_NUMBER_RE+"\\b",relevance:0},w,C,l,u],A=[...E];return A.pop(),A.push(h),S.contains=A,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:E}}return e1=e,e1}var t1,Xw;function pP(){if(Xw)return t1;Xw=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],n=["true","false","null","undefined","NaN","Infinity"],r=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],i=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],a=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],l=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],u=[].concat(a,r,i);function h(p){const g=p.regex,y=(ee,{after:ne})=>{const de="</"+ee[0].slice(1);return ee.input.indexOf(de,ne)!==-1},v=e,S={begin:"<>",end:"</>"},w=/<[A-Za-z0-9\\._:-]+\s*\/>/,C={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(ee,ne)=>{const de=ee[0].length+ee.index,fe=ee.input[de];if(fe==="<"||fe===","){ne.ignoreMatch();return}fe===">"&&(y(ee,{after:de})||ne.ignoreMatch());let Re;const qe=ee.input.substring(de);if(Re=qe.match(/^\s*=/)){ne.ignoreMatch();return}if((Re=qe.match(/^\s+extends\s+/))&&Re.index===0){ne.ignoreMatch();return}}},E={$pattern:e,keyword:t,literal:n,built_in:u,"variable.language":l},A="[0-9](_?[0-9])*",D=`\\.(${A})`,P="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",H={className:"number",variants:[{begin:`(\\b(${P})((${D})|\\.)?|(${D}))[eE][+-]?(${A})\\b`},{begin:`\\b(${P})\\b((${D})\\b|\\.)?|(${D})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},T={className:"subst",begin:"\\$\\{",end:"\\}",keywords:E,contains:[]},I={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,T],subLanguage:"xml"}},$={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,T],subLanguage:"css"}},X={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,T],subLanguage:"graphql"}},j={className:"string",begin:"`",end:"`",contains:[p.BACKSLASH_ESCAPE,T]},z={className:"comment",variants:[p.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:v+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),p.C_BLOCK_COMMENT_MODE,p.C_LINE_COMMENT_MODE]},W=[p.APOS_STRING_MODE,p.QUOTE_STRING_MODE,I,$,X,j,{match:/\$\d+/},H];T.contains=W.concat({begin:/\{/,end:/\}/,keywords:E,contains:["self"].concat(W)});const F=[].concat(z,T.contains),O=F.concat([{begin:/(\s*)\(/,end:/\)/,keywords:E,contains:["self"].concat(F)}]),B={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:O},L={variants:[{match:[/class/,/\s+/,v,/\s+/,/extends/,/\s+/,g.concat(v,"(",g.concat(/\./,v),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,v],scope:{1:"keyword",3:"title.class"}}]},V={relevance:0,match:g.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...r,...i]}},oe={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},K={variants:[{match:[/function/,/\s+/,v,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[B],illegal:/%/},Q={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function G(ee){return g.concat("(?!",ee.join("|"),")")}const M={match:g.concat(/\b/,G([...a,"super","import","await"].map(ee=>`${ee}\\s*\\(`)),v,g.lookahead(/\s*\(/)),className:"title.function",relevance:0},ce={begin:g.concat(/\./,g.lookahead(g.concat(v,/(?![0-9A-Za-z$_(])/))),end:v,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Y={match:[/get|set/,/\s+/,v,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},B]},te="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+p.UNDERSCORE_IDENT_RE+")\\s*=>",re={match:[/const|var|let/,/\s+/,v,/\s*/,/=\s*/,/(async\s*)?/,g.lookahead(te)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[B]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:E,exports:{PARAMS_CONTAINS:O,CLASS_REFERENCE:V},illegal:/#(?![$_A-Za-z])/,contains:[p.SHEBANG({label:"shebang",binary:"node",relevance:5}),oe,p.APOS_STRING_MODE,p.QUOTE_STRING_MODE,I,$,X,j,z,{match:/\$\d+/},H,V,{scope:"attr",match:v+g.lookahead(":"),relevance:0},re,{begin:"("+p.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[z,p.REGEXP_MODE,{className:"function",begin:te,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:p.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:O}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:S.begin,end:S.end},{match:w},{begin:C.begin,"on:begin":C.isTrulyOpeningTag,end:C.end}],subLanguage:"xml",contains:[{begin:C.begin,end:C.end,skip:!0,contains:["self"]}]}]},K,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+p.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[B,p.inherit(p.TITLE_MODE,{begin:v,className:"title.function"})]},{match:/\.\.\./,relevance:0},ce,{match:"\\$"+v,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[B]},M,Q,L,Y,{match:/\$[(.]/}]}}function f(p){const g=p.regex,y=h(p),v=e,S=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],w={begin:[/namespace/,/\s+/,p.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},C={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:S},contains:[y.exports.CLASS_REFERENCE]},E={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},A=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],D={$pattern:e,keyword:t.concat(A),literal:n,built_in:u.concat(S),"variable.language":l},P={className:"meta",begin:"@"+v},H=(X,j,U)=>{const z=X.contains.findIndex(W=>W.label===j);if(z===-1)throw new Error("can not find mode to replace");X.contains.splice(z,1,U)};Object.assign(y.keywords,D),y.exports.PARAMS_CONTAINS.push(P);const T=y.contains.find(X=>X.scope==="attr"),I=Object.assign({},T,{match:g.concat(v,g.lookahead(/\s*\?:/))});y.exports.PARAMS_CONTAINS.push([y.exports.CLASS_REFERENCE,T,I]),y.contains=y.contains.concat([P,w,C,I]),H(y,"shebang",p.SHEBANG()),H(y,"use_strict",E);const $=y.contains.find(X=>X.label==="func.def");return $.relevance=0,Object.assign(y,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),y}return t1=f,t1}var n1,Zw;function gP(){if(Zw)return n1;Zw=1;function e(t){const n=t.regex,r={className:"string",begin:/"(""|[^/n])"C\b/},i={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},a=/\d{1,2}\/\d{1,2}\/\d{4}/,l=/\d{4}-\d{1,2}-\d{1,2}/,u=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,h=/\d{1,2}(:\d{1,2}){1,2}/,f={className:"literal",variants:[{begin:n.concat(/# */,n.either(l,a),/ *#/)},{begin:n.concat(/# */,h,/ *#/)},{begin:n.concat(/# */,u,/ *#/)},{begin:n.concat(/# */,n.either(l,a),/ +/,n.either(u,h),/ *#/)}]},p={className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},g={className:"label",begin:/^\w+:/},y=t.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),v=t.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[r,i,f,p,g,y,v,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[v]}]}}return n1=e,n1}var r1,Qw;function vP(){if(Qw)return r1;Qw=1;function e(t){t.regex;const n=t.COMMENT(/\(;/,/;\)/);n.contains.push("self");const r=t.COMMENT(/;;/,/$/),i=["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"],a={begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},l={className:"variable",begin:/\$[\w_]+/},u={match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},h={className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/},f={match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},p={className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/};return{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:i},contains:[r,n,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},l,u,a,t.QUOTE_STRING_MODE,f,p,h]}}return r1=e,r1}var i1,Jw;function bP(){if(Jw)return i1;Jw=1;var e=jz();return e.registerLanguage("xml",Lz()),e.registerLanguage("bash",Bz()),e.registerLanguage("c",zz()),e.registerLanguage("cpp",Pz()),e.registerLanguage("csharp",Hz()),e.registerLanguage("css",qz()),e.registerLanguage("markdown",$z()),e.registerLanguage("diff",Fz()),e.registerLanguage("ruby",Uz()),e.registerLanguage("go",Gz()),e.registerLanguage("graphql",Wz()),e.registerLanguage("ini",Vz()),e.registerLanguage("java",Kz()),e.registerLanguage("javascript",Yz()),e.registerLanguage("json",Xz()),e.registerLanguage("kotlin",Zz()),e.registerLanguage("less",Qz()),e.registerLanguage("lua",Jz()),e.registerLanguage("makefile",eP()),e.registerLanguage("perl",tP()),e.registerLanguage("objectivec",nP()),e.registerLanguage("php",rP()),e.registerLanguage("php-template",iP()),e.registerLanguage("plaintext",sP()),e.registerLanguage("python",aP()),e.registerLanguage("python-repl",oP()),e.registerLanguage("r",lP()),e.registerLanguage("rust",cP()),e.registerLanguage("scss",uP()),e.registerLanguage("shell",dP()),e.registerLanguage("sql",hP()),e.registerLanguage("swift",fP()),e.registerLanguage("yaml",mP()),e.registerLanguage("typescript",pP()),e.registerLanguage("vbnet",gP()),e.registerLanguage("wasm",vP()),e.HighlightJS=e,e.default=e,i1=e,i1}var yP=bP();const e3=Zf(yP),_P=[[eL,{singleTilde:!1}],[nz,{singleDollarTextMath:!0}]],xP=[Oz];let s1=null,t3=null;async function SP(){return s1||(t3??=OI(()=>import("./mermaid.core-Dqz3Slj9.js").then(e=>e.bp),[]).then(e=>{e.default.initialize({startOnLoad:!1,securityLevel:"strict",theme:"neutral"});const t=async(n,r)=>{const{svg:i}=await e.default.render(`oc-mermaid-${Math.random().toString(36).slice(2,10)}`,r);n.innerHTML=i};return s1=t,t}).catch(()=>null),t3)}function wP({code:e}){const t=_.useRef(null),[n,r]=_.useState(!1);return _.useEffect(()=>{let i=!1;return SP().then(a=>{if(i||!a||!t.current){a||r(!0);return}a(t.current,e).catch(()=>{i||r(!0)})}),()=>{i=!0}},[e]),n?c.jsx(Iv,{lang:"mermaid",text:e}):c.jsx("div",{className:"oc-mermaid",ref:t,role:"img","aria-label":"Mermaid 图表"})}function Iv({lang:e,text:t,children:n}){const[r,i]=_.useState(!1),a=_.useMemo(()=>{const u=e3.getLanguage(e)?e:"";return u?e3.highlight(t,{language:u,ignoreIllegals:!0}).value:void 0},[e,t]),l=()=>{navigator.clipboard?.writeText(t).then(()=>{i(!0),window.setTimeout(()=>i(!1),1600)},()=>{})};return c.jsxs("div",{className:"oc-codeblock",children:[c.jsxs("div",{className:"oc-codeblock-head",children:[c.jsx("span",{className:"oc-codeblock-lang",children:e||"text"}),c.jsx("button",{type:"button",className:"oc-codeblock-copy",onClick:l,children:r?"已复制":"复制"})]}),c.jsx("pre",{children:a!==void 0?c.jsx("code",{className:`hljs language-${e}`,dangerouslySetInnerHTML:{__html:a}}):c.jsx("code",{className:e?`hljs language-${e}`:"hljs",children:n??t})})]})}function kP(e){return e?.children?.find(r=>r.tagName==="thead"||r.tagName==="tbody")?.children?.find(r=>r.tagName==="tr")?.children?.filter(r=>r.tagName==="th"||r.tagName==="td").length??0}function Nv(e){if(e==null||typeof e=="boolean")return"";if(typeof e=="string"||typeof e=="number")return String(e);if(Array.isArray(e))return e.map(Nv).join("");if(typeof e=="object"&&"props"in e){const t=e.props;return Nv(t?.children)}return""}const CP={pre({children:e}){return c.jsx(c.Fragment,{children:e})},code({className:e,children:t,...n}){const r=Nv(t).replace(/\n$/,""),i=/language-([\w-]+)/.exec(e??"");return i?.[1]==="mermaid"?c.jsx(wP,{code:r}):i||e&&r.includes(`
|
|
315
315
|
`)?c.jsx(Iv,{lang:i?.[1]??"",text:r}):r.includes(`
|
|
316
316
|
`)?c.jsx(Iv,{lang:"",text:r}):c.jsx("code",{className:e,...n,children:t})},a({href:e,children:t,...n}){return j6(e)?c.jsx(Ku,{href:e,...n,children:t}):c.jsx("span",{...n,children:t})},img({src:e,alt:t}){return JR(e)?c.jsxs(c.Fragment,{children:[c.jsx("img",{src:e,alt:t??"",loading:"lazy",onError:n=>{const r=n.currentTarget;r.hidden=!0,r.nextElementSibling?.removeAttribute("hidden")}}),c.jsx("span",{className:"oc-md-img-fallback",hidden:!0,title:e??void 0,children:t?`[图片加载失败: ${t}]`:"[图片加载失败]"})]}):c.jsx("span",{className:"oc-md-img-fallback",title:e??void 0,children:t?`[图片: ${t}]`:"[图片已屏蔽]"})},table({children:e,node:t}){const n=kP(t)>=4;return c.jsx("div",{className:`oc-md-table-wrap ${n?"is-wide":"is-fill"}`,tabIndex:n?0:void 0,children:c.jsx("table",{children:e})})},input(e){return e.type==="checkbox"?c.jsx("input",{type:"checkbox",checked:!!e.checked,disabled:!0,readOnly:!0}):c.jsx("input",{...e,disabled:!0,readOnly:!0})}};class EP extends _.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t,n){}componentDidUpdate(t){t.text!==this.props.text&&this.state.hasError&&this.setState({hasError:!1})}render(){return this.state.hasError?c.jsx("div",{className:"oc-md",children:c.jsx("pre",{className:"oc-md-fallback",children:this.props.text})}):this.props.children}}function fd({text:e}){try{return c.jsx(EP,{text:e,children:c.jsx("div",{className:"oc-md",children:c.jsx($D,{remarkPlugins:_P,rehypePlugins:xP,components:CP,children:e})})})}catch{return c.jsx("div",{className:"oc-md",children:c.jsx("pre",{className:"oc-md-fallback",children:e})})}}const Av="allow-scripts",n3="无法在浏览器中打开:弹窗被拦截",TP="内容已截断,以下为已加载片段。";function RP(e){const t=e?.availWidth??1440,n=e?.availHeight??900,r=Math.min(1280,Math.max(880,Math.floor(t*.82))),i=Math.min(960,Math.max(640,Math.floor(n*.88)));return["popup=yes",`width=${r}`,`height=${i}`,"left=72","top=36","menubar=yes","toolbar=yes","location=yes","status=yes","resizable=yes","scrollbars=yes"].join(",")}function ti(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function S0(e){return e.trim().toLowerCase()}function hc(e){const t=S0(e);return t==="html"||t==="htm"}function py(e){const t=S0(e);return t==="md"||t==="markdown"}function IP(e){if(S0(e.language)!=="json")return e.content;try{return JSON.stringify(JSON.parse(e.content),null,2)}catch{return e.content}}function NP(e){return/^https?:\/\//i.test(e.trim())}function Au(e){const t=[];return e.replace(/`([^`]+)`/g,(a,l)=>(t.push(`<code>${l}</code>`),`\0${t.length-1}\0`)).replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(a,l,u)=>NP(u)?`<a href="${u}" rel="noopener noreferrer" target="_blank">${l}</a>`:l).replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>").replace(/__([^_]+)__/g,"<strong>$1</strong>").replace(/\*([^*]+)\*/g,"<em>$1</em>").replace(/\u0000(\d+)\u0000/g,(a,l)=>t[Number(l)]??"")}function AP(e){return e.length?`<p>${Au(e.join(" "))}</p>`:""}function r3(e){const t=e.replaceAll(`\r
|
|
317
317
|
`,`
|
|
@@ -413,8 +413,8 @@ WARNING: This link could potentially be dangerous`)){let n=window.open();if(n){t
|
|
|
413
413
|
`)){if(h.startsWith("diff --git ")){u(),n={oldPath:"",newPath:"",binary:!1,hunks:[]},t.push(n);continue}if(n===null)continue;if(h.startsWith("Binary files ")||h==="GIT binary patch"){u(),n.binary=!0;continue}if(h.startsWith("--- ")){u(),n.oldPath=h.slice(4);continue}if(h.startsWith("+++ ")){n.newPath=h.slice(4);continue}const f=bG(h);if(f!==null){u(),i={oldStart:f.oldStart,newStart:f.newStart,header:f.header,lines:[]},a=f.oldStart,l=f.newStart,r=!0;continue}if(!r||i===null)continue;const p=h[0];if(p==="\\"){i.lines.push({kind:"meta",text:h.slice(1),oldNum:null,newNum:null});continue}p===" "?(i.lines.push({kind:"ctx",text:h.slice(1),oldNum:a,newNum:l}),a+=1,l+=1):p==="-"?(i.lines.push({kind:"del",text:h.slice(1),oldNum:a,newNum:null}),a+=1):p==="+"?(i.lines.push({kind:"add",text:h.slice(1),oldNum:null,newNum:l}),l+=1):u()}return u(),{files:t}}function _G(e,t){const n=[],r=t.endsWith(`
|
|
414
414
|
`)?t.slice(0,-1):t;if(r!==""){let i=1;for(const a of r.split(`
|
|
415
415
|
`))n.push({kind:"add",text:a,oldNum:null,newNum:i}),i+=1}return{oldPath:"/dev/null",newPath:`b/${e}`,binary:!1,hunks:[{oldStart:0,newStart:1,header:"",lines:n}]}}function Gf(e){return e==="/dev/null"?e:e.startsWith("a/")||e.startsWith("b/")?e.slice(2):e}function xG(e){if(e.binary)return"二进制";if(e.oldPath==="/dev/null")return"新增";if(e.newPath==="/dev/null")return"删除";const t=Gf(e.oldPath),n=Gf(e.newPath);return t!==n?"重命名":null}const I1=500;function SG(e){const{diff:t,untrackedPath:n,untrackedContent:r}=e,i=_.useMemo(()=>n!==void 0?{files:[_G(n,r??"")]}:yG(t),[t,n,r]),[a,l]=_.useState(!1),u=_.useMemo(()=>{const w=[];return i.files.forEach((C,E)=>{w.push({key:`f${E}`,file:C,type:"path"}),!C.binary&&C.hunks.forEach((A,D)=>{w.push({key:`f${E}h${D}`,file:C,type:"hunk",hunk:A}),A.lines.forEach((P,H)=>{w.push({key:`f${E}h${D}l${H}`,file:C,type:"line",hunk:A,line:P})})})}),w},[i]),h=u.length-I1,f=h>0&&!a,p=Math.ceil(I1/2),g=I1-p,y=f?u.slice(0,p):u,v=f?u.slice(u.length-g):[];if(u.length===0)return c.jsx("div",{className:"oc-scm-diffempty",children:"无文本更改"});const S=w=>{if(w.type==="path"){const A=xG(w.file),D=Gf(w.file.oldPath),P=Gf(w.file.newPath);return c.jsxs("div",{className:"oc-scm-dvfile",children:[c.jsx("span",{className:"oc-scm-dvpath",children:P}),D!==P?c.jsx("span",{className:"oc-scm-dvold",children:`← ${D}`}):null,A!==null?c.jsx("span",{className:"oc-scm-dvtag",children:A}):null]},w.key)}if(w.type==="hunk"){const A=w.hunk;return A===void 0?null:c.jsxs("div",{className:"oc-scm-dvhunk",children:[c.jsx("span",{className:"oc-scm-dvhunkhead",children:`@@ -${A.oldStart},${A.lines.filter(D=>D.oldNum!==null).length} +${A.newStart},${A.lines.filter(D=>D.newNum!==null).length} @@`}),A.header!==""?c.jsx("span",{className:"oc-scm-dvhunksec",children:A.header}):null]},w.key)}const C=w.line;if(C===void 0)return null;const E=C.kind==="del"?"is-del":C.kind==="add"?"is-add":C.kind==="meta"?"is-meta":"is-ctx";return c.jsx("div",{className:`oc-scm-dvline ${E}`,children:C.kind==="meta"?c.jsx("span",{className:"oc-scm-dvmetatext",children:C.text}):c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"oc-scm-dvnum",children:C.oldNum??""}),c.jsx("span",{className:"oc-scm-dvnum",children:C.newNum??""}),c.jsx("span",{className:"oc-scm-dvcode",children:C.text})]})},w.key)};return c.jsxs("div",{className:"oc-scm-dv",children:[y.map(S),h>0?c.jsx("button",{type:"button",className:"oc-scm-dvexpand","aria-expanded":a,onClick:()=>l(w=>!w),children:a?"收起":`展开其余 ${h} 行`}):null,v.map(S)]})}async function Xr(e,t){const n=await fetch(e,{method:t?.method,cache:"no-store",headers:{"content-type":"application/json","x-loop-console-confirmation":gn()},body:t?.body!==void 0?JSON.stringify(t.body):void 0}),r=await n.json().catch(()=>({}));if(!n.ok||r.ok!==!0)throw new Error(r.error?.message??`${t?.method??"GET"} ${e} failed (${n.status})`);return r.data}function wG(e){const t=e.xy[0],n=e.xy[1];return t&&t!==" "&&t!=="?"?t:n&&n!==" "&&n!=="?"?n:"?"}function kG(e){return[...new Set(e.split(",").map(t=>t.trim()).filter(t=>t!=="").map(t=>t.includes(" -> ")?t.slice(t.indexOf(" -> ")+4):t).map(t=>t.startsWith("tag: ")?t.slice(5):t))]}function CG(e){const t=Date.parse(e);if(!Number.isFinite(t))return e.slice(0,10);const n=Date.now()-t,r=Math.floor(n/6e4);if(r<1)return"刚刚";if(r<60)return`${r} 分钟前`;const i=Math.floor(r/60);if(i<24)return`${i} 小时前`;const a=Math.floor(i/24);return a<30?`${a} 天前`:e.slice(0,10)}const N1=20;function S5(e){const[t,n]=_.useState(null),[r,i]=_.useState([]),[a,l]=_.useState(!0),[u,h]=_.useState(null),[f,p]=_.useState(!1),[g,y]=_.useState(""),[v,S]=_.useState(null),[w,C]=_.useState([]),[E,A]=_.useState(!1),[D,P]=_.useState(!1),[H,T]=_.useState(null),[I,$]=_.useState(null),X=_.useRef(null),j=e.workspaceId?.trim()?`workspaceId=${encodeURIComponent(e.workspaceId.trim())}`:null,U=_.useCallback(ee=>{if(!j)throw new Error("workspaceId is required for scm API");const ne=ee.includes("?")?"&":"?";return`/api/operator/v1/chat/scm${ee}${ne}${j}`},[j]),z=_.useCallback(async()=>{if(j){l(!0),h(null);try{const[ee,ne,de]=await Promise.all([Xr(U("/status")),Xr(U("/branches")).catch(()=>null),Xr(U(`/log?limit=${N1}`)).catch(()=>null)]);n(ee),i(ne?ne.branches.map(fe=>fe.name):[]),de&&(C(de.commits),A(de.commits.length<N1))}catch(ee){h(ee instanceof Error?ee.message:String(ee))}finally{l(!1)}}},[U,j]);_.useEffect(()=>{z();const ee=()=>{z()};return window.addEventListener("focus",ee),()=>window.removeEventListener("focus",ee)},[z]),_.useEffect(()=>{if(!I)return;const ee=ne=>{X.current?.contains(ne.target)||$(null)};return document.addEventListener("mousedown",ee),()=>document.removeEventListener("mousedown",ee)},[I]);const W=async ee=>{p(!0),S(null);try{await ee(),await z()}catch(ne){S(ne instanceof Error?ne.message:String(ne))}finally{p(!1)}},F=(ee,ne=!1)=>W(async()=>{await Xr(U("/stage"),{method:"POST",body:ne?{all:!0}:{paths:ee}})}),O=(ee,ne=!1)=>W(async()=>{await Xr(U("/unstage"),{method:"POST",body:ne?{all:!0,paths:ee}:{paths:ee}})}),B=ee=>W(async()=>{await Xr(U("/discard"),{method:"POST",body:{paths:[ee]}})}),L=()=>W(async()=>{if(!g.trim())throw new Error("请输入提交信息");await Xr(U("/commit"),{method:"POST",body:{message:g}}),y("")}),V=ee=>W(async()=>{await Xr(U("/branches"),{method:"POST",body:{name:ee}})}),oe=()=>W(async()=>{await Xr(U("/push"),{method:"POST",body:{}})}),K=()=>W(async()=>{await Xr(U("/pull"),{method:"POST",body:{}})}),Q=async()=>{if(!(D||E)){P(!0);try{const ee=Math.min(w.length+N1,200);if(ee<=w.length){A(!0);return}const ne=await Xr(U(`/log?limit=${ee}`));C(ne.commits),(ne.commits.length<ee||ee>=200)&&A(!0)}catch(ee){S(ee instanceof Error?ee.message:String(ee))}finally{P(!1)}}},G=(ee,ne)=>{(async()=>{try{const de=ne?"&staged=1":"";let fe=await Xr(U(`/diff?path=${encodeURIComponent(ee.path)}${de}`));if(fe.diff===""){const Re=await Xr(U(`/diff?path=${encodeURIComponent(ee.path)}${ne?"":"&staged=1"}`));Re.diff!==""&&(fe=Re)}fe.diff===""&&ee.untracked&&!ne&&(fe=await Xr(U(`/untracked-diff?path=${encodeURIComponent(ee.path)}`))),T({kind:"worktree",path:ee.path,staged:ne,untracked:ee.untracked,text:fe.diff})}catch(de){T({kind:"worktree",path:ee.path,staged:ne,untracked:!1,text:`error: ${de instanceof Error?de.message:String(de)}`})}})()},M=ee=>{(async()=>{try{const ne=await Xr(U(`/commit-diff?hash=${encodeURIComponent(ee.sha)}`));T({kind:"commit",hash:ee.sha,subject:ee.subject,text:ne.diff})}catch(ne){T({kind:"commit",hash:ee.sha,subject:ee.subject,text:`error: ${ne instanceof Error?ne.message:String(ne)}`})}})()},ce=(ee,ne,de)=>{ee.preventDefault(),ee.stopPropagation(),$({path:ne.path,staged:de,x:ee.clientX,y:ee.clientY})};if(!j)return c.jsx("div",{className:"oc-scm-panel",children:c.jsx("div",{className:"oc-scm-placeholder",children:"缺少 workspaceId,源代码管理面板不可用。"})});const Y=t?.changes.filter(ee=>ee.staged&&!ee.untracked)??[],te=t?.changes.filter(ee=>ee.unstaged||ee.untracked)??[],re=(ee,ne)=>c.jsxs("div",{className:"oc-scm-row",children:[c.jsxs("button",{type:"button",className:"oc-scm-row-main",title:ee.fromPath?`${ee.fromPath} → ${ee.path}`:ee.path,onClick:()=>G(ee,ne),onContextMenu:de=>ce(de,ee,ne),children:[c.jsx("span",{className:"oc-scm-badge",children:wG(ee)}),c.jsx("span",{className:"oc-scm-name",children:ee.path})]}),c.jsx("button",{type:"button",className:"oc-scm-rowbtn","aria-label":ne?"取消暂存":"暂存",title:ne?"取消暂存":"暂存",disabled:f,onClick:()=>{ne?O([ee.path]):F([ee.path])},children:ne?"−":"+"})]},`${ne?"s":"u"}:${ee.path}`);return c.jsxs("div",{className:"oc-scm-panel",children:[c.jsxs("div",{className:"oc-scm-header",children:[c.jsxs("select",{className:"oc-scm-branchselect",value:t?.branch??"",onChange:ee=>{V(ee.target.value)},disabled:f,children:[(t?.branch??"")!==""?c.jsx("option",{value:t.branch,children:t.branch}):null,r.filter(ee=>ee!==t?.branch).map(ee=>c.jsx("option",{value:ee,children:ee},ee))]}),t?.ahead||t?.behind?c.jsxs("span",{className:"oc-scm-ab",title:t.upstream??"",children:[t.ahead?c.jsx("span",{children:`↑${t.ahead}`}):null,t.behind?c.jsx("span",{children:`↓${t.behind}`}):null]}):null,c.jsx("button",{type:"button",className:"oc-scm-headerbtn",title:"拉取",disabled:f,onClick:()=>{K()},children:"⤓"}),c.jsx("button",{type:"button",className:"oc-scm-headerbtn",title:"推送",disabled:f,onClick:()=>{oe()},children:"⤒"}),c.jsx("button",{type:"button",className:"oc-scm-headerbtn",title:"刷新",onClick:()=>{z()},children:"↻"})]}),c.jsxs("div",{className:"oc-scm-scroll",children:[a&&!t?c.jsx("div",{className:"oc-scm-placeholder",children:"加载中…"}):null,u?c.jsx("div",{className:"oc-scm-error",children:u}):null,t?c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"oc-scm-section",children:[c.jsxs("div",{className:"oc-scm-sectionhead",children:[c.jsx("span",{children:`已暂存 (${Y.length})`}),Y.length>0?c.jsx("button",{type:"button",className:"oc-scm-link",disabled:f,onClick:()=>{O(Y.map(ee=>ee.path))},children:"全部取消暂存"}):null]}),Y.length===0?c.jsx("div",{className:"oc-scm-empty",children:"暂无更改"}):null,Y.map(ee=>re(ee,!0))]}),c.jsxs("div",{className:"oc-scm-section",children:[c.jsxs("div",{className:"oc-scm-sectionhead",children:[c.jsx("span",{children:`更改 (${te.length})`}),te.length>0?c.jsx("button",{type:"button",className:"oc-scm-link",disabled:f,onClick:()=>{F(te.map(ee=>ee.path))},children:"全部暂存"}):null]}),te.length===0?c.jsx("div",{className:"oc-scm-empty",children:"暂无更改"}):null,te.map(ee=>re(ee,!1))]}),c.jsxs("div",{className:"oc-scm-commitrow",children:[c.jsx("input",{className:"oc-scm-commitinput",placeholder:"提交信息",value:g,disabled:f,onChange:ee=>{y(ee.target.value),S(null)},onKeyDown:ee=>{(ee.ctrlKey||ee.metaKey)&&ee.key==="Enter"&&L()}}),c.jsx("button",{type:"button",className:"oc-scm-commitbtn",disabled:f||g.trim()===""||Y.length===0,onClick:()=>{L()},children:"提交"})]}),v?c.jsx("div",{className:"oc-scm-error",children:v}):null,c.jsxs("div",{className:"oc-scm-section",children:[c.jsx("div",{className:"oc-scm-sectionhead",children:c.jsx("span",{children:"历史"})}),w.map(ee=>c.jsxs("div",{role:"button",tabIndex:0,className:"oc-scm-logrow",title:`${ee.author} · ${ee.date}
|
|
416
|
-
${ee.sha}`,onClick:()=>M(ee),onKeyDown:ne=>{(ne.key==="Enter"||ne.key===" ")&&(ne.preventDefault(),M(ee))},children:[c.jsxs("span",{className:"oc-scm-logline1",children:[c.jsx("span",{className:"oc-scm-loghash",children:ee.sha}),c.jsx("span",{className:"oc-scm-logsubject",children:ee.subject})]}),c.jsxs("span",{className:"oc-scm-logline2",children:[ee.refs?kG(ee.refs).map(ne=>c.jsx("span",{className:"oc-scm-logref",children:ne},ne)):null,c.jsx("span",{className:"oc-scm-logmeta",children:`${ee.author} · ${CG(ee.date)}`})]})]},ee.sha+ee.subject)),E?null:c.jsx("button",{type:"button",className:"oc-scm-logmore",disabled:D||f,onClick:()=>{Q()},children:D?"加载中…":"加载更多"})]})]}):null]}),H?c.jsxs("div",{className:"oc-scm-diff",children:[c.jsxs("div",{className:"oc-scm-diffhead",children:[c.jsx("button",{type:"button",className:"oc-scm-headerbtn",title:"返回",onClick:()=>T(null),children:"‹"}),c.jsx("span",{className:"oc-scm-difftitle",title:H.kind==="worktree"?H.path:`${H.hash} ${H.subject}`,children:H.kind==="worktree"?H.path:`${H.hash} ${H.subject}`}),H.kind==="worktree"&&H.staged?c.jsx("span",{className:"oc-scm-difftag",children:"已暂存"}):null,H.kind==="worktree"&&H.untracked?c.jsx("span",{className:"oc-scm-difftag",children:"未跟踪"}):null,H.kind==="commit"?c.jsx("span",{className:"oc-scm-difftag",children:"提交"}):null]}),c.jsx("div",{className:"oc-scm-diffscroll",children:c.jsx(SG,{diff:H.text})})]}):null,I?c.jsxs("div",{ref:X,className:"oc-scm-menu",style:{left:I.x,top:I.y},children:[c.jsx("button",{type:"button",className:"oc-scm-menuitem",onClick:()=>{const ee=I.path;$(null),window.confirm(`放弃 ${ee} 的更改?此操作不可恢复。`)&&B(ee)},children:"放弃更改…"}),c.jsx("button",{type:"button",className:"oc-scm-menuitem",onClick:()=>{navigator.clipboard?.writeText(I.path),$(null)},children:"复制路径"})]}):null]})}function EG(e){if(e.reachable!==!0)return"unknown";const t=e.xFrameOptions?.trim().toUpperCase();return t==="DENY"||t==="SAMEORIGIN"||e.frameAncestors!==void 0&&!e.frameAncestors.some(n=>n==="*")?"blocked":"embeddable"}const TG=new Set(["javascript","data","file","about","vbscript","blob","mailto","tel","ftp","ftps","ws","wss","sftp","ssh","chrome","chrome-extension","moz-extension","edge","opera","resource","view-source"]);function w5(e){const t=e.trim();if(t==="")return{kind:"invalid"};const n=/^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(t);let r;if(n===null)r=`https://${t}`;else{const a=n[1]?.toLowerCase()??"";if(a==="http"||a==="https")r=t;else{if(TG.has(a))return{kind:"blocked",reason:"scheme"};r=`https://${t}`}}let i;try{i=new URL(r)}catch{return{kind:"invalid"}}return i.protocol!=="http:"&&i.protocol!=="https:"?{kind:"blocked",reason:"scheme"}:{kind:"ok",url:i.href}}async function RG(e,t){if(!t)return null;try{const n=await fetch(`/api/operator/v1/chat/browser/probe?url=${encodeURIComponent(e)}&${t}`,{cache:"no-store",headers:{"x-loop-console-confirmation":gn()}}),r=await n.json().catch(()=>({}));return!n.ok||r.ok!==!0?null:r.data?.probe??null}catch{return null}}function k5(e){const t=e.workspaceId?.trim()?`workspaceId=${encodeURIComponent(e.workspaceId.trim())}`:null,[n,r]=_.useState(void 0),[i,a]=_.useState(""),[l,u]=_.useState(null),[h,f]=_.useState(null),[p,g]=_.useState({history:[],cursor:-1}),[y,v]=_.useState(0),[S,w]=_.useState(null),[C,E]=_.useState(!1),[A,D]=_.useState(null),[P,H]=_.useState(null),T=_.useRef(void 0);_.useEffect(()=>{if(!t)return;let U=!1;const z=async()=>{try{const F=await fetch(`/api/operator/v1/chat/browser/state?${t}`,{cache:"no-store",headers:{"x-loop-console-confirmation":gn()}}),O=await F.json().catch(()=>({})),B=F.ok&&O.ok===!0?O.data?.page??null:null;D(B);const L=F.ok&&O.ok===!0?B?.url:void 0;if(U||!L||L===T.current)return;T.current=L;const V=w5(L);if(V.kind!=="ok")return;r(V.url),a(V.url),u(null),g(oe=>({history:[...oe.history.slice(0,oe.cursor+1),V.url],cursor:oe.cursor+1})),v(oe=>oe+1),f("已同步对话指令打开的页面")}catch{}};z();const W=window.setInterval(()=>{z()},1e3);return()=>{U=!0,window.clearInterval(W)}},[t]),_.useEffect(()=>{if(n===void 0)return;let U=!1;return w(null),E(!1),RG(n,t).then(z=>{!U&&z!==null&&EG(z)==="blocked"&&w(n)}),()=>{U=!0}},[n,t]);const I=()=>{t&&(H(null),fetch(`/api/operator/v1/chat/browser/focus?${t}`,{method:"POST",cache:"no-store",headers:{"content-type":"application/json","x-loop-console-confirmation":gn()}}).then(U=>{H(U.ok?"已聚焦外部浏览器":"外部浏览器暂不可用")}).catch(()=>H("外部浏览器暂不可用")))},$=U=>{const z=w5(U);if(z.kind!=="ok"){u(z.kind==="invalid"?"无效的网址":"该协议被禁止(仅支持 http/https)");return}const W=z.url;T.current=W,r(W),a(W),u(null),f(null),g(F=>({history:[...F.history.slice(0,F.cursor+1),W],cursor:F.cursor+1})),v(F=>F+1)},X=()=>{const U=p.cursor-1,z=p.history[U];U<0||z===void 0||(g(W=>({...W,cursor:U})),r(z),a(z),f(null),v(W=>W+1))},j=()=>{const U=p.cursor+1,z=p.history[U];U>=p.history.length||z===void 0||(g(W=>({...W,cursor:U})),r(z),a(z),f(null),v(W=>W+1))};return c.jsxs("div",{className:"oc-browser",children:[c.jsxs("div",{className:"oc-browser-bar",children:[c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"后退",title:"后退",disabled:p.cursor<=0,onClick:X,children:"‹"}),c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"前进",title:"前进",disabled:p.cursor>=p.history.length-1,onClick:j,children:"›"}),c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"刷新",title:"刷新",onClick:()=>v(U=>U+1),children:"↻"}),c.jsx("input",{className:"oc-browser-input",value:i,placeholder:"输入网址(http/https,支持 localhost)",spellCheck:!1,onChange:U=>a(U.target.value),onKeyDown:U=>{U.key==="Enter"&&$(i)}}),c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"打开",title:"打开",onClick:()=>$(i),children:"↵"}),c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"在系统浏览器打开",title:"在系统浏览器打开",disabled:n===void 0,onClick:()=>{n!==void 0&&window.open(n,"_blank","noopener")},children:"⤴"})]}),l!==null?c.jsx("div",{className:"oc-browser-message",children:l}):null,h!==null?c.jsx("div",{className:"oc-browser-message is-info",children:h}):null,A?.running?c.jsxs("div",{className:"oc-browser-shared",children:[c.jsxs("div",{className:"oc-browser-shared-copy",children:[c.jsx("span",{className:"oc-browser-shared-title",children:A.title?.trim()||NG(A.url)||"外部页面"}),c.jsx("span",{className:"oc-browser-shared-url",children:A.url})]}),c.jsx("button",{type:"button",className:"btn",onClick:I,children:"聚焦外部窗口"})]}):null,P!==null?c.jsx("div",{className:"oc-browser-message is-info",children:P}):null,n===void 0?c.jsx("div",{className:"oc-browser-start",children:"输入网址开始浏览"}):S!==null&&!C?c.jsx(IG,{url:S,shared:A,onFocusExternal:I,onLoadAnyway:()=>E(!0)}):c.jsx("iframe",{className:"oc-browser-frame",src:n,referrerPolicy:"no-referrer",allow:"",title:n},y)]})}function IG(e){let t=e.url;try{t=new URL(e.url).hostname}catch{}return c.jsxs("div",{className:"oc-browser-blocked",children:[c.jsx("span",{className:"oc-browser-blocked-ico",children:"⚠"}),c.jsx("div",{className:"oc-browser-blocked-title",children:`${t} 拒绝被嵌入`}),c.jsx("div",{className:"oc-browser-blocked-desc",children:"该站点设置了 X-Frame-Options / frame-ancestors 保护,不允许在其它页面内显示。"}),c.jsxs("div",{className:"oc-browser-blocked-actions",children:[c.jsx("button",{type:"button",className:"btn",onClick:e.onFocusExternal,disabled:!e.shared?.running,children:"聚焦外部窗口"}),c.jsx("button",{type:"button",className:"btn",onClick:e.onLoadAnyway,children:"仍要加载"})]})]})}function NG(e){try{return new URL(e).hostname}catch{return e}}const C5={sqlite:"SQLite",postgres:"PostgreSQL",mysql:"MySQL"},E5={postgres:5432,mysql:3306};function T5(e){const[t,n]=_.useState([]),[r,i]=_.useState(!1),[a,l]=_.useState(null),[u,h]=_.useState(null),[f,p]=_.useState(null),[g,y]=_.useState(""),[v,S]=_.useState("sqlite"),[w,C]=_.useState(""),[E,A]=_.useState("parameters"),[D,P]=_.useState(""),[H,T]=_.useState(""),[I,$]=_.useState(""),[X,j]=_.useState(""),[U,z]=_.useState(""),[W,F]=_.useState("runtime"),[O,B]=_.useState(""),[L,V]=_.useState(""),[oe,K]=_.useState(!1),[Q,G]=_.useState(null),[M,ce]=_.useState(!1),[Y,te]=_.useState(!1),[re,ee]=_.useState("skip"),[ne,de]=_.useState({}),fe=_.useRef(null),[Re,qe]=_.useState(null),[ye,Ue]=_.useState([]),[tt,Ae]=_.useState([]),[Ve,ot]=_.useState(""),[Xe,Pe]=_.useState(""),[xe,De]=_.useState(null),[_e,Me]=_.useState(50),[me,Te]=_.useState(!1),[Be,ze]=_.useState(null),[Ye,pt]=_.useState(!1),wt=_.useCallback((ge="")=>"/api/operator/v1/chat/database-connections"+ge+(e.workspaceId?`?workspaceId=${encodeURIComponent(e.workspaceId)}`:""),[e.workspaceId]),Pt=_.useCallback(async()=>{if(e.workspaceId){i(!0),h(null);try{const ge=await fetch(wt(),{credentials:"same-origin"}),Oe=await ge.json();if(!ge.ok)throw new Error(Oe.error?.message??"加载数据库连接失败");n(Oe.connections??[])}catch(ge){h(ge instanceof Error?ge.message:String(ge))}finally{i(!1)}}},[wt,e.workspaceId]);_.useEffect(()=>{Pt()},[Pt]);async function Tt(ge,Oe,je){const nt=await fetch(wt(ge),{method:Oe,credentials:"same-origin",headers:{[Qf]:Jf(),...je?{"Content-Type":"application/json"}:{}},...je?{body:JSON.stringify(je)}:{}}),Rt=await nt.json();if(!nt.ok)throw new Error(Rt.error?.message??"数据库连接操作失败");return Rt}function _t(){y(""),S("sqlite"),C(""),A("parameters"),P(""),T(""),$(""),j(""),z(""),F("runtime"),B(""),V(""),K(!1),G(null),te(!1)}function Mt(ge){G(ge.name),y(ge.name),S(ge.engine),C(ge.path??""),A(ge.mode??(ge.urlEnv?"url-env":"parameters")),P(ge.urlEnv??""),T(ge.host??""),$(ge.port?.toString()??""),j(ge.database??""),z(ge.username??""),F(ge.passwordMode??"runtime"),B(""),V(ge.passwordEnv??""),K(ge.ssl===!0),te(ge.mode==="parameters"&&ge.passwordMode!=="environment"&&ge.passwordMode!=="encrypted"&&ge.passwordStatus!=="runtime"),h(null),p(null),ce(!0)}async function fn(ge){ge.preventDefault(),l("__save__"),h(null),p(null);try{const Oe=v==="sqlite"?{name:g,engine:v,path:w}:E==="url-env"?{name:g,engine:v,mode:E,urlEnv:D}:{name:g,engine:v,mode:E,host:H,...I.trim()?{port:Number(I)}:{},database:X,username:U,passwordMode:W,...W==="runtime"||W==="encrypted"?O!==""?{password:O}:{}:{passwordEnv:L},ssl:oe};Q?await Tt(`/${encodeURIComponent(Q)}`,"PATCH",Oe):await Tt("","POST",Oe),p(Q?`已保存连接 ${g.trim()}。`:`已添加连接 ${g.trim()}。`),_t(),ce(!1),await Pt()}catch(Oe){h(Oe instanceof Error?Oe.message:String(Oe))}finally{l(null)}}async function dn(ge){l(ge.name),h(null),de(Oe=>({...Oe,[ge.name]:{status:"checking"}}));try{const je=(await Tt(`/${encodeURIComponent(ge.name)}/test`,"POST")).result;de(nt=>({...nt,[ge.name]:{status:"ok",elapsedMs:je?.elapsedMs}}))}catch(Oe){de(je=>({...je,[ge.name]:{status:"error",message:Oe instanceof Error?Oe.message:String(Oe)}}))}finally{l(null)}}async function kt(){l("__all__"),h(null),p(null),de(nt=>{const Rt={...nt};for(const Ot of t)Rt[Ot.name]={status:"checking"};return Rt});let ge=0,Oe=0;async function je(){for(;ge<t.length;){const nt=t[ge++];if(!nt)return;try{const Ot=(await Tt(`/${encodeURIComponent(nt.name)}/test`,"POST")).result;de(Er=>({...Er,[nt.name]:{status:"ok",elapsedMs:Ot?.elapsedMs}})),Oe+=1}catch(Rt){de(Ot=>({...Ot,[nt.name]:{status:"error",message:Rt instanceof Error?Rt.message:String(Rt)}}))}}}await Promise.all(Array.from({length:Math.min(4,t.length)},()=>je())),p(`连接检查完成:${Oe}/${t.length} 可用。`),l(null)}async function Ce(ge){if(window.confirm(`确定删除数据库连接“${ge.name}”吗?`)){l(ge.name),h(null),p(null);try{await Tt(`/${encodeURIComponent(ge.name)}`,"DELETE"),p(`已删除连接 ${ge.name}。`),de(Oe=>{const je={...Oe};return delete je[ge.name],je}),Q===ge.name&&_t(),await Pt()}catch(Oe){h(Oe instanceof Error?Oe.message:String(Oe))}finally{l(null)}}}async function ct(){h(null);try{const ge=await fetch(wt("/export"),{credentials:"same-origin"}),Oe=await ge.json();if(!ge.ok||!Oe.document)throw new Error(Oe.error?.message??"导出失败");const je=new Blob([JSON.stringify(Oe.document,null,2)+`
|
|
417
|
-
`],{type:"application/json"}),nt=URL.createObjectURL(je),Rt=document.createElement("a");Rt.href=nt,Rt.download=`loop-agent-db-connections-${new Date().toISOString().slice(0,10)}.json`,Rt.click(),URL.revokeObjectURL(nt),p(`已导出 ${Oe.document.connections.length} 个连接;密码不会导出。`)}catch(ge){h(ge instanceof Error?ge.message:String(ge))}}async function at(ge){l("__import__"),h(null),p(null);try{const Oe=JSON.parse(await ge.text()),nt=(await Tt("/import","POST",{document:Oe,conflict:re})).result;p(`导入完成:新增 ${nt.imported},更新 ${nt.updated},跳过 ${nt.skipped}。运行时密码需重新填写。`),await Pt()}catch(Oe){h(Oe instanceof Error?Oe.message:"导入文件不是有效 JSON")}finally{l(null),fe.current&&(fe.current.value="")}}async function ve(ge,Oe,je,nt=_e,Rt=Ve){Te(!0),ze(null),pt(!1);try{const Ot=wt(`/${encodeURIComponent(ge)}/browse`),Er=Ot+(Ot.includes("?")?"&":"?")+`table=${encodeURIComponent(Oe)}&page=${je}&pageSize=${nt}${Rt?`&database=${encodeURIComponent(Rt)}`:""}`,si=await fetch(Er,{credentials:"same-origin"}),Ct=await si.json();if(!si.ok||!Ct.result)throw new Error(Ct.error?.message??"加载表数据失败");Pe(Oe),De(Ct.result)}catch(Ot){ze(Ot instanceof Error?Ot.message:String(Ot))}finally{Te(!1)}}async function ie(ge,Oe=!1,je=Ve){if(!Oe&&Re===ge.name){qe(null);return}const nt=Re!==ge.name,Rt=nt?ge.database??"":je;qe(ge.name),Ue([]),Pe(""),De(null),nt&&Ae(ge.database?[ge.database]:[]),ot(Rt),Te(!0),ze(null),pt(!1);try{const Ot=wt(`/${encodeURIComponent(ge.name)}/browse`),Er=Ot+(Rt?(Ot.includes("?")?"&":"?")+`database=${encodeURIComponent(Rt)}`:""),si=await fetch(Er,{credentials:"same-origin"}),Ct=await si.json();if(!si.ok)throw new Error(Ct.error?.message??"加载数据表失败");const Tr=Array.from(new Set([...Ct.databases??[],...ge.database?[ge.database]:[]]));Ae(Tr),!Rt&&Tr.length===1&&ot(Tr[0]);const hn=Ct.tables??[];Ue(hn),hn[0]&&await ve(ge.name,hn[0].schema?`${hn[0].schema}.${hn[0].name}`:hn[0].name,1,_e,Rt)}catch(Ot){ze(Ot instanceof Error?Ot.message:String(Ot))}finally{Te(!1)}}function Ee(ge){return ge===null?"NULL":ge===void 0?"":typeof ge=="object"?JSON.stringify(ge):String(ge)}function Ge(ge){if(Re!==ge.name)return null;const Oe=xe?.columns.length?xe.columns.map(je=>je.name):xe?.rows[0]?Object.keys(xe.rows[0]):[];return c.jsxs("section",{className:"database-data-browser","aria-label":`浏览 ${ge.name} 数据`,children:[c.jsxs("div",{className:"database-browser-toolbar",children:[ge.engine!=="sqlite"?c.jsxs("label",{className:"database-browser-database",children:["数据库",c.jsxs("select",{value:Ve,disabled:me,onChange:je=>{ot(je.target.value),Pe(""),De(null),ie(ge,!0,je.target.value)},children:[c.jsx("option",{value:"",children:"请选择数据库"}),tt.map(je=>c.jsx("option",{value:je,children:je},je))]})]}):null,c.jsxs("label",{className:"database-browser-table",children:["数据表",c.jsx("select",{value:Xe,disabled:me||ye.length===0,onChange:je=>{ve(ge.name,je.target.value,1)},children:ye.map(je=>{const nt=je.schema?`${je.schema}.${je.name}`:je.name;return c.jsxs("option",{value:nt,children:[nt,je.type==="view"?"(视图)":""]},nt)})})]}),c.jsxs("label",{className:"database-browser-page-size",children:["每页",c.jsxs("select",{value:_e,onChange:je=>{const nt=Number(je.target.value);Me(nt),Xe&&ve(ge.name,Xe,1,nt)},children:[c.jsx("option",{value:"20",children:"20 行"}),c.jsx("option",{value:"50",children:"50 行"}),c.jsx("option",{value:"100",children:"100 行"})]})]}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:!xe,onClick:()=>pt(!0),children:"查看字段"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:me,onClick:()=>Xe?void ve(ge.name,Xe,xe?.page??1):void ie(ge,!0),children:"刷新"})]}),Be?c.jsx("p",{className:"database-health is-error",children:Be}):me&&!xe?c.jsx("p",{className:"muted",children:"正在读取数据库结构和数据…"}):ge.engine!=="sqlite"&&!Ve&&!ge.database?c.jsx("p",{className:"database-connections-empty",children:"请先从上方选择一个数据库,再选择数据表。"}):ye.length===0?c.jsx("p",{className:"database-connections-empty",children:"当前数据库中没有可浏览的表或视图。"}):xe?c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"database-data-table-wrap",children:c.jsxs("table",{className:"database-data-table",children:[c.jsx("thead",{children:c.jsx("tr",{children:Oe.map(je=>c.jsx("th",{children:je},je))})}),c.jsx("tbody",{children:xe.rows.length===0?c.jsx("tr",{children:c.jsx("td",{colSpan:Math.max(Oe.length,1),children:"该表当前没有数据。"})}):xe.rows.map((je,nt)=>c.jsx("tr",{children:Oe.map(Rt=>c.jsx("td",{title:Ee(je[Rt]),children:Ee(je[Rt])},Rt))},nt))})]})}),c.jsxs("div",{className:"database-browser-pagination",children:[c.jsxs("span",{children:["第 ",xe.page," 页 · 本页 ",xe.rows.length," 行"]}),c.jsxs("div",{children:[c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:me||xe.page<=1,onClick:()=>{ve(ge.name,xe.table,xe.page-1)},children:"上一页"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:me||!xe.hasNext,onClick:()=>{ve(ge.name,xe.table,xe.page+1)},children:"下一页"})]})]})]}):null,Ye&&xe?c.jsx("div",{className:"database-modal-backdrop",role:"presentation",onMouseDown:je=>{je.target===je.currentTarget&&pt(!1)},children:c.jsxs("div",{className:"database-schema-modal",role:"dialog","aria-modal":"true","aria-labelledby":"database-schema-title",children:[c.jsxs("div",{className:"database-schema-heading",children:[c.jsxs("div",{children:[c.jsx("h3",{id:"database-schema-title",children:"字段结构"}),c.jsxs("p",{children:[c.jsx("code",{children:xe.table})," · ",xe.columns.length," 个字段"]})]}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>pt(!1),children:"关闭"})]}),c.jsx("div",{className:"database-schema-table-wrap",children:c.jsxs("table",{className:"database-schema-table",children:[c.jsx("thead",{children:c.jsxs("tr",{children:[c.jsx("th",{children:"字段"}),c.jsx("th",{children:"类型"}),c.jsx("th",{children:"约束"})]})}),c.jsx("tbody",{children:xe.columns.map(je=>c.jsxs("tr",{children:[c.jsx("td",{children:c.jsx("code",{children:je.name})}),c.jsx("td",{children:je.type||"未知类型"}),c.jsx("td",{children:[je.primaryKey?"主键":"",je.nullable?"可空":"非空"].filter(Boolean).join(" · ")})]},je.name))})]})})]})}):null]})}const lt=v==="postgres"?E5.postgres:E5.mysql,ut=Re?t.find(ge=>ge.name===Re):void 0;return c.jsxs("section",{className:"panel database-connections-page","aria-labelledby":"database-connections-title",children:[c.jsxs("div",{className:"database-connections-header",children:[c.jsxs("div",{children:[c.jsx("h2",{id:"database-connections-title",children:"数据库工作台"}),c.jsx("p",{className:"panel-lead",children:"管理只读连接,并在同一视图中选择数据库、数据表和浏览数据。系统拒绝 DELETE、DROP 及所有写入或结构变更。"})]}),c.jsxs("div",{className:"database-header-actions",children:[c.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>{_t(),ce(!0)},children:"新增连接"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{Pt()},disabled:r,children:"刷新"})]})]}),c.jsxs("div",{className:"database-connection-toolbar",children:[c.jsxs("select",{value:re,onChange:ge=>ee(ge.target.value),"aria-label":"导入同名连接策略",children:[c.jsx("option",{value:"skip",children:"导入:跳过同名"}),c.jsx("option",{value:"overwrite",children:"导入:覆盖同名"})]}),c.jsx("input",{ref:fe,hidden:!0,type:"file",accept:"application/json,.json",onChange:ge=>{const Oe=ge.target.files?.[0];Oe&&at(Oe)}}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>fe.current?.click(),disabled:a!==null,children:"导入"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{ct()},disabled:t.length===0,children:"导出"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{kt()},disabled:t.length===0||a!==null,children:a==="__all__"?"检查中…":"全部测试"})]}),u?c.jsx("p",{className:"error",role:"alert",children:u}):null,f?c.jsx("p",{className:"database-connections-notice",role:"status",children:f}):null,M?c.jsx("div",{className:"database-modal-backdrop",role:"presentation",onMouseDown:ge=>{ge.target===ge.currentTarget&&(_t(),ce(!1))},children:c.jsx("div",{className:"database-modal",role:"dialog","aria-modal":"true","aria-labelledby":"database-connection-editor-title",children:c.jsxs("form",{className:"database-connection-form",onSubmit:ge=>{fn(ge)},children:[c.jsxs("div",{className:"database-form-heading",children:[c.jsx("h3",{id:"database-connection-editor-title",children:Q?`编辑 ${Q}`:"新增连接"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{_t(),ce(!1)},children:"关闭"})]}),c.jsxs("label",{children:["连接名称 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:g,onChange:ge=>y(ge.target.value),required:!0,placeholder:"例如:订单生产库"}),c.jsx("small",{children:"这是对话中引用连接时使用的名称,例如“查询订单生产库”。"})]}),c.jsxs("label",{children:["数据库类型 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsxs("select",{value:v,onChange:ge=>{const Oe=ge.target.value;S(Oe),A("parameters"),$("")},children:[c.jsx("option",{value:"sqlite",children:"SQLite"}),c.jsx("option",{value:"postgres",children:"PostgreSQL"}),c.jsx("option",{value:"mysql",children:"MySQL"})]})]}),v==="sqlite"?c.jsxs("label",{children:["数据库文件绝对路径 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:w,onChange:ge=>C(ge.target.value),required:!0,placeholder:"D:\\data\\app.db"}),c.jsx("small",{children:"文件必须已存在。Windows 示例:D:\\data\\app.db;Linux/macOS 示例:/data/app.db。"})]}):c.jsxs(c.Fragment,{children:[c.jsxs("fieldset",{className:"database-connection-mode",children:[c.jsx("legend",{children:"连接方式"}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"connection-mode",checked:E==="parameters",onChange:()=>A("parameters")}),"填写地址和账号(推荐)"]}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"connection-mode",checked:E==="url-env",onChange:()=>A("url-env")}),"完整 DSN 环境变量(高级)"]})]}),E==="parameters"?c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"database-server-fields",children:[c.jsxs("label",{className:"database-host-field",children:["主机地址 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:H,onChange:ge=>T(ge.target.value),required:!0,placeholder:"127.0.0.1 或 db.example.com"})]}),c.jsxs("label",{className:"database-port-field",children:["端口 ",c.jsx("span",{className:"field-optional",children:"可选"}),c.jsx("input",{type:"number",min:"1",max:"65535",inputMode:"numeric",value:I,onChange:ge=>$(ge.target.value),placeholder:String(lt)})]}),c.jsxs("small",{children:["本机数据库通常填写 127.0.0.1;远程数据库填写域名或 IP。端口留空时使用",v==="postgres"?" PostgreSQL 默认端口 5432":" MySQL 默认端口 3306","。"]})]}),c.jsxs("label",{children:["数据库名 ",c.jsx("span",{className:"field-optional",children:"可选"}),c.jsx("input",{value:X,onChange:ge=>j(ge.target.value),placeholder:v==="postgres"?"留空使用账号默认数据库":"留空则连接服务器"}),c.jsx("small",{children:"需要固定访问某个数据库时再填写;留空会使用驱动和数据库账号的默认行为。"})]}),c.jsxs("label",{children:["用户名 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:U,onChange:ge=>z(ge.target.value),required:!0,autoComplete:"username",placeholder:v==="postgres"?"例如:postgres":"例如:root"}),c.jsx("small",{children:"建议使用最小权限账号;只查询时优先使用只读账号。"})]}),c.jsxs("fieldset",{className:"database-password-mode",children:[c.jsx("legend",{children:"密码保存方式"}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"password-mode",checked:W==="runtime",onChange:()=>F("runtime")}),"本次运行直接输入"]}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"password-mode",checked:W==="environment",onChange:()=>F("environment")}),"从环境变量读取(推荐长期使用)"]}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"password-mode",checked:W==="encrypted",onChange:()=>F("encrypted")}),"保存到本地加密凭据库"]})]}),W==="runtime"?c.jsxs("label",{children:["密码 ",Q&&!Y?c.jsx("span",{className:"field-optional",children:"留空则保留本次运行中的密码"}):c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{type:"password",value:O,onChange:ge=>B(ge.target.value),required:!Q||Y,autoComplete:"new-password",placeholder:Q?"留空不修改;重启后需重新输入":"输入数据库密码"}),c.jsx("small",{children:"密码只保存在当前 Console 进程内存中,不写入连接文件、不显示、不导出;Console 重启后需重新输入。"})]}):W==="environment"?c.jsxs("label",{children:["密码环境变量名 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:L,onChange:ge=>V(ge.target.value),required:!0,placeholder:"例如:DB_PASSWORD"}),c.jsx("small",{children:"填写变量名,不是密码本身。启动 Console 前设置该环境变量,密码不会写入连接文件。"})]}):c.jsxs("label",{children:["本地凭据密码 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{type:"password",value:O,onChange:ge=>B(ge.target.value),required:!Q||Y,autoComplete:"new-password",placeholder:"输入后使用 AES-256-GCM 加密保存"}),c.jsx("small",{children:"密码写入当前工作区的独立加密凭据库,不会写入 connections.json、列表或导出文件;加密密钥由当前操作系统用户、主机和应用目录派生。"})]}),c.jsxs("label",{className:"database-checkbox",children:[c.jsx("input",{type:"checkbox",checked:oe,onChange:ge=>K(ge.target.checked)}),"启用 SSL/TLS 加密连接",c.jsx("small",{children:"云数据库和跨网络连接通常应开启;本机开发库通常可关闭。启用后使用数据库驱动的标准证书校验,私有 CA 环境需在系统或 Node 运行环境中配置信任链。"})]})]}):c.jsxs("label",{children:["完整 DSN 环境变量名 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:D,onChange:ge=>P(ge.target.value),required:!0,placeholder:v==="postgres"?"例如:DATABASE_URL":"例如:MYSQL_URL"}),c.jsxs("small",{children:["这里填写环境变量名称,不是连接串。变量值示例:",v==="postgres"?"postgresql://user:password@host:5432/db":"mysql://user:password@host:3306/db","。适合已有部署或集中管理密钥的环境。"]})]})]}),c.jsxs("div",{className:"database-form-security-note",children:[c.jsx("strong",{children:"保存说明"}),c.jsx("span",{children:"地址、端口、数据库名、用户名、SSL 设置会保存到本工作区 app-data;实际密码或完整 DSN 不会写入、回显或导出。"})]}),c.jsx("button",{type:"submit",className:"btn btn-primary database-add-submit",disabled:!e.workspaceId||a!==null,children:a==="__save__"?"保存中…":Q?"保存修改":"添加连接"})]})})}):null,c.jsxs("section",{className:"database-workbench-shell","aria-label":"数据库浏览工作区",children:[c.jsxs("div",{className:"database-connection-summary",children:[c.jsxs("select",{"aria-label":"选择数据库连接",value:ut?.name??"",onChange:ge=>{const Oe=t.find(je=>je.name===ge.target.value);Oe&&ie(Oe,!0,Oe.database??"")},children:[c.jsx("option",{value:"",children:"选择连接"}),t.map(ge=>c.jsxs("option",{value:ge.name,children:[ge.name," · ",C5[ge.engine]]},ge.name))]}),ut?c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"database-summary-state",children:"只读"}),c.jsx("span",{className:"database-engine-badge",children:C5[ut.engine]}),c.jsx("code",{className:"database-summary-db",children:ut.engine==="sqlite"?ut.path:ut.mode==="parameters"?`${ut.host}:${ut.port} / ${Ve||ut.database||"未选择数据库"}`:`DSN: ${ut.urlEnv}`}),c.jsxs("div",{className:"database-summary-actions",children:[c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{dn(ut)},disabled:a!==null,children:a===ut.name?"测试中…":"测试"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>Mt(ut),disabled:a!==null,children:"编辑"}),c.jsx("button",{type:"button",className:"btn btn-danger",onClick:()=>{Ce(ut)},disabled:a!==null,children:"删除"})]})]}):c.jsx("span",{className:"muted",children:"选择一个连接开始浏览"})]}),c.jsx("div",{className:"database-workbench-main",children:ut?Ge(ut):c.jsxs("div",{className:"database-workbench-empty",children:[c.jsx("strong",{children:"还没有选择连接"}),c.jsx("span",{children:"从上方选择已有连接,或点击“新增连接”创建一个只读连接。"})]})})]})]})}const AG={user:"用户",ai:"AI",thinking:"思考",tool:"工具",compaction:"压缩",activity:"活动",action:"操作",error:"错误",text:"文本",system:"系统"},MG={user:c.jsx(OR,{size:12,"aria-hidden":"true"}),ai:c.jsx(xx,{size:12,"aria-hidden":"true"}),thinking:c.jsx(T6,{size:12,"aria-hidden":"true"}),tool:c.jsx(C6,{size:12,"aria-hidden":"true"}),compaction:c.jsx(R6,{size:12,"aria-hidden":"true"}),activity:c.jsx(TR,{size:12,"aria-hidden":"true"}),action:c.jsx(E6,{size:12,"aria-hidden":"true"}),error:c.jsx(S6,{size:12,"aria-hidden":"true"}),text:c.jsx(xx,{size:12,"aria-hidden":"true"}),system:c.jsx(Nb,{size:12,"aria-hidden":"true"})};function Ns({kind:e}){return c.jsxs("span",{className:`oc-trajectory-tag is-${e}`,children:[MG[e],AG[e]]})}function DG(e){return e===null||!Number.isFinite(e)||e<=0?"":e<1e3?`${e}ms`:`${(e/1e3).toFixed(1)}s`}function OG({tool:e}){const[t,n]=_.useState(!1),r=vc(e),i=r?"error":"tool",a=r?"失败":e.status==="running"?"运行中":e.interrupted===!0?"已停止":"成功",l=e.finishedAt&&e.createdAt?e.finishedAt-e.createdAt:null,u=t?c.jsxs("div",{className:"oc-trajectory-tool-body",children:[e.args!==void 0&&e.args!==null?c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"参数"}),Mb(e.args)]}):null,e.resultText||e.result?c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"结果"}),sd(e.result??e.resultText)]}):null]}):null;return c.jsxs("div",{className:"oc-trajectory-step","data-open":t,children:[c.jsxs("div",{className:`oc-trajectory-cell is-${e.status}`,children:[c.jsx(Ns,{kind:i}),c.jsx("span",{className:"oc-trajectory-cell-toolname",children:e.toolName}),c.jsx("span",{className:`oc-trajectory-cell-status is-${e.status}`,children:a}),c.jsx("span",{className:"oc-trajectory-cell-time",children:DG(l)}),c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>n(h=>!h),"aria-expanded":t,children:t?"收起":"展开"})]}),u]})}function xC(e){const t=_.useRef(null),[n,r]=_.useState(!1),i=_.useCallback(()=>{const a=t.current;if(!a)return;const l=a.scrollWidth>a.clientWidth+1;r(u=>u===l?u:l)},[]);return _.useEffect(()=>{if(e)return;i();const a=t.current;if(!a||typeof ResizeObserver>"u")return;const l=new ResizeObserver(()=>i());return l.observe(a),()=>l.disconnect()},[e,i]),_.useEffect(()=>{e||i()}),{ref:t,overflowed:e?!0:n}}function jG({text:e}){const[t,n]=_.useState(!1),{ref:r,overflowed:i}=xC(t);return c.jsx("div",{className:"oc-trajectory-step",children:c.jsxs("div",{className:"oc-trajectory-cell is-thinking-cell","data-open":t,children:[c.jsx(Ns,{kind:"thinking"}),c.jsx("span",{ref:r,className:"oc-trajectory-cell-text oc-trajectory-think-text",children:e}),i?c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>n(a=>!a),"aria-expanded":t,children:t?"收起":"展开"}):null]})})}function A1({kind:e,text:t}){const[n,r]=_.useState(!1),{ref:i,overflowed:a}=xC(n);return c.jsxs("div",{className:`oc-trajectory-cell is-${e}-cell`,"data-open":n,children:[c.jsx(Ns,{kind:e}),c.jsx("span",{ref:i,className:"oc-trajectory-cell-text",children:t}),a?c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>r(l=>!l),"aria-expanded":n,children:n?"收起":"展开"}):null]})}function LG({action:e}){const t=new Date(e.at);return c.jsx("div",{className:"oc-trajectory-turn is-operator-action",children:c.jsxs("div",{className:"oc-trajectory-cell is-action-cell",children:[c.jsx(Ns,{kind:"action"}),c.jsxs("span",{className:"oc-trajectory-cell-text oc-trajectory-action-text",children:[c.jsx("strong",{children:"SDD 数据对齐"}),c.jsx("span",{children:e.skillName}),c.jsxs("code",{title:e.telemetrySessionId,children:["Session: ",e.telemetrySessionId]})]}),c.jsx("time",{className:"oc-trajectory-cell-time",dateTime:t.toISOString(),children:t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})})]})})}function BG(e){const t=e.identity.telemetrySessionId,[n,r]=_.useState(!1);_.useEffect(()=>r(!1),[t]);const i=_.useCallback(()=>{t&&navigator.clipboard?.writeText(t).then(()=>{r(!0),window.setTimeout(()=>r(!1),1600)},()=>{})},[t]);return c.jsxs("div",{className:"oc-trajectory-sdd-session","aria-label":"SDD 上报会话",children:[c.jsx("span",{className:"oc-trajectory-sdd-session-icon","aria-hidden":"true",children:c.jsx(E6,{size:16})}),c.jsx("span",{className:"oc-trajectory-sdd-session-label",children:"SDD Session"}),c.jsx("code",{className:t?void 0:"is-pending",title:t??void 0,children:t??"待首次请求"}),t?c.jsx("button",{type:"button",className:"oc-trajectory-sdd-session-copy","aria-label":n?"SDD Session ID 已复制":"复制 SDD Session ID",title:n?"已复制":"复制 Session ID",onClick:i,children:n?c.jsx(_6,{size:14,"aria-hidden":"true"}):c.jsx(xR,{size:14,"aria-hidden":"true"})}):null]})}function SC(e,t){const n=e.map((i,a)=>{const l=[i.user?.createdAt,...i.assistants.map(h=>h.createdAt),...i.tools.flatMap(h=>[h.createdAt,h.finishedAt])].filter(h=>typeof h=="number"&&Number.isFinite(h)),u=[i.user?.eventSeq,...i.assistants.flatMap(h=>[h.eventSeq,h.updatedSeq]),...i.tools.flatMap(h=>[h.eventSeq,h.finishedSeq])].filter(h=>typeof h=="number"&&Number.isFinite(h));return{kind:"turn",key:`turn:${i.key}`,group:i,turnIndex:a+1,at:l.length>0?Math.max(...l):a,...u.length>0?{seq:Math.max(...u)}:{}}}),r=t.map(i=>({kind:"action",key:`action:${i.eventId}`,action:i,at:i.at,seq:i.seq}));return[...n,...r].sort((i,a)=>i.seq!==void 0&&a.seq!==void 0&&i.seq!==a.seq?i.seq-a.seq:i.at-a.at||i.key.localeCompare(a.key))}function Wf(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function ic(e){if(e<1e3)return`${Math.round(e)}ms`;const t=e/1e3;if(t<60)return`${t.toFixed(1)}s`;const n=Math.round(t);return`${Math.floor(n/60)}m${n%60}s`}function zG({turn:e,index:t}){const n=e.usage,r=[];if(e.steps>0&&r.push(`${e.steps} 步`),e.llmMs>0&&r.push(`LLM ${ic(e.llmMs)}`),e.ttftMs!==void 0&&e.ttftMs>0&&r.push(`首token ${ic(e.ttftMs)}`),e.decodeMs!==void 0&&e.decodeMs>0&&e.decodeTokens){const i=e.decodeTokens/(e.decodeMs/1e3);r.push(`${i.toFixed(1)} tok/s`)}if(e.toolCalls>0&&r.push(`${e.toolCalls} 工具`),e.toolMs>0&&r.push(`工具 ${ic(e.toolMs)}`),n.inputTokens>0||n.cacheReadTokens>0||n.cacheWriteTokens>0){const i=n.inputTokens+n.cacheReadTokens+n.cacheWriteTokens;r.push(`↑${Wf(i)}`)}return n.outputTokens>0&&r.push(`↓${Wf(n.outputTokens)}`),n.cost!==void 0&&n.cost>0&&r.push(n.cost>=.01?`$${n.cost.toFixed(2)}`:"<$0.01"),c.jsxs("div",{className:"oc-trajectory-turnmeta",title:`turn ${e.turnId}`,children:[c.jsxs("span",{className:"oc-trajectory-turnmeta-index",children:["第 ",t," 轮"]}),r.map((i,a)=>c.jsx("span",{className:"oc-trajectory-turnmeta-item",children:i},a))]})}function PG({group:e,telemetry:t,turnIndex:n}){const r=e.assistants.find(l=>l.kind==="compaction"),i=e.user?.text,a=e.answer?.text;return r?c.jsx("div",{className:"oc-trajectory-turn",children:c.jsxs("div",{className:"oc-trajectory-cell is-compaction-cell",children:[c.jsx(Ns,{kind:"compaction"}),c.jsx("span",{className:"oc-trajectory-cell-text",children:r.text||"上下文已压缩"})]})}):c.jsxs("div",{className:"oc-trajectory-turn",children:[t?c.jsx(zG,{turn:t,index:n}):null,i?c.jsx(A1,{kind:"user",text:i}):null,e.processItems.map((l,u)=>{switch(l.kind){case"thinking":return c.jsx(jG,{text:l.thinking},u);case"text":return l.text.trim()?c.jsx(A1,{kind:"ai",text:l.text},u):null;case"tool":return c.jsx(OG,{tool:l.tool},u);case"activity":return c.jsxs("div",{className:"oc-trajectory-cell is-activity-cell",children:[c.jsx(Ns,{kind:"activity"}),c.jsx("span",{className:"oc-trajectory-cell-text",children:l.activity?.title??"活动"})]},u);case"provider-error":return c.jsxs("div",{className:"oc-trajectory-cell is-error-cell",children:[c.jsx(Ns,{kind:"error"}),c.jsx("span",{className:"oc-trajectory-cell-text",children:l.error?.message??"提供方错误"})]},u);default:return null}}),a?c.jsx(A1,{kind:"ai",text:a}):null]})}function HG(e){const{runtimeContext:t,toolCatalog:n,loading:r}=e,[i,a]=_.useState(!1),[l,u]=_.useState(!1);if(r&&!t)return c.jsx("div",{className:"oc-trajectory-turn oc-trajectory-injection",children:c.jsxs("div",{className:"oc-trajectory-cell is-system-cell",children:[c.jsx(Ns,{kind:"system"}),c.jsx("span",{className:"oc-trajectory-cell-text oc-trajectory-think-text",children:"正在加载会话注入(冷启动 Pi 会话)…"})]})});if(!t)return null;const h=t.systemPrompt.text??"",f=t.suffix.text??"",p=t.resources.activeTools??[],g=[...n?.operator??[],...n?.explore??[]];return c.jsxs("div",{className:"oc-trajectory-turn oc-trajectory-injection",children:[c.jsxs("div",{className:"oc-trajectory-cell is-system-cell",children:[c.jsx(Ns,{kind:"system"}),c.jsxs("span",{className:"oc-trajectory-cell-text",children:["系统提示词",h?` · ${t.systemPrompt.charCount??h.length} 字符`:" · 暂不可用",f?" · 含注入上下文":""]}),c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>a(y=>!y),"aria-expanded":i,children:i?"收起":"展开"})]}),i?c.jsxs("div",{className:"oc-trajectory-tool-body",children:[h?c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"系统提示词"}),h]}):null,f?c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"注入上下文(suffix)"}),f]}):null]}):null,c.jsxs("div",{className:"oc-trajectory-cell is-system-cell",children:[c.jsx(Ns,{kind:"system"}),c.jsxs("span",{className:"oc-trajectory-cell-text",children:["工具目录 · 当前启用 ",p.length," 个"]}),c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>u(y=>!y),"aria-expanded":l,children:l?"收起":"展开"})]}),l?c.jsx("div",{className:"oc-trajectory-tool-body",children:g.length>0?c.jsxs("div",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"模型可见工具"}),g.map(y=>c.jsxs("div",{className:"oc-trajectory-tool-catalog-row",children:[c.jsx("code",{children:y.toolId}),y.action?c.jsx("em",{children:y.action}):null,c.jsx("span",{children:y.description})]},y.toolId))]}):c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"模型可见工具"}),p.join(`
|
|
416
|
+
${ee.sha}`,onClick:()=>M(ee),onKeyDown:ne=>{(ne.key==="Enter"||ne.key===" ")&&(ne.preventDefault(),M(ee))},children:[c.jsxs("span",{className:"oc-scm-logline1",children:[c.jsx("span",{className:"oc-scm-loghash",children:ee.sha}),c.jsx("span",{className:"oc-scm-logsubject",children:ee.subject})]}),c.jsxs("span",{className:"oc-scm-logline2",children:[ee.refs?kG(ee.refs).map(ne=>c.jsx("span",{className:"oc-scm-logref",children:ne},ne)):null,c.jsx("span",{className:"oc-scm-logmeta",children:`${ee.author} · ${CG(ee.date)}`})]})]},ee.sha+ee.subject)),E?null:c.jsx("button",{type:"button",className:"oc-scm-logmore",disabled:D||f,onClick:()=>{Q()},children:D?"加载中…":"加载更多"})]})]}):null]}),H?c.jsxs("div",{className:"oc-scm-diff",children:[c.jsxs("div",{className:"oc-scm-diffhead",children:[c.jsx("button",{type:"button",className:"oc-scm-headerbtn",title:"返回",onClick:()=>T(null),children:"‹"}),c.jsx("span",{className:"oc-scm-difftitle",title:H.kind==="worktree"?H.path:`${H.hash} ${H.subject}`,children:H.kind==="worktree"?H.path:`${H.hash} ${H.subject}`}),H.kind==="worktree"&&H.staged?c.jsx("span",{className:"oc-scm-difftag",children:"已暂存"}):null,H.kind==="worktree"&&H.untracked?c.jsx("span",{className:"oc-scm-difftag",children:"未跟踪"}):null,H.kind==="commit"?c.jsx("span",{className:"oc-scm-difftag",children:"提交"}):null]}),c.jsx("div",{className:"oc-scm-diffscroll",children:c.jsx(SG,{diff:H.text})})]}):null,I?c.jsxs("div",{ref:X,className:"oc-scm-menu",style:{left:I.x,top:I.y},children:[c.jsx("button",{type:"button",className:"oc-scm-menuitem",onClick:()=>{const ee=I.path;$(null),window.confirm(`放弃 ${ee} 的更改?此操作不可恢复。`)&&B(ee)},children:"放弃更改…"}),c.jsx("button",{type:"button",className:"oc-scm-menuitem",onClick:()=>{navigator.clipboard?.writeText(I.path),$(null)},children:"复制路径"})]}):null]})}function EG(e){if(e.reachable!==!0)return"unknown";const t=e.xFrameOptions?.trim().toUpperCase();return t==="DENY"||t==="SAMEORIGIN"||e.frameAncestors!==void 0&&!e.frameAncestors.some(n=>n==="*")?"blocked":"embeddable"}const TG=new Set(["javascript","data","file","about","vbscript","blob","mailto","tel","ftp","ftps","ws","wss","sftp","ssh","chrome","chrome-extension","moz-extension","edge","opera","resource","view-source"]);function w5(e){const t=e.trim();if(t==="")return{kind:"invalid"};const n=/^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(t);let r;if(n===null)r=`https://${t}`;else{const a=n[1]?.toLowerCase()??"";if(a==="http"||a==="https")r=t;else{if(TG.has(a))return{kind:"blocked",reason:"scheme"};r=`https://${t}`}}let i;try{i=new URL(r)}catch{return{kind:"invalid"}}return i.protocol!=="http:"&&i.protocol!=="https:"?{kind:"blocked",reason:"scheme"}:{kind:"ok",url:i.href}}async function RG(e,t){if(!t)return null;try{const n=await fetch(`/api/operator/v1/chat/browser/probe?url=${encodeURIComponent(e)}&${t}`,{cache:"no-store",headers:{"x-loop-console-confirmation":gn()}}),r=await n.json().catch(()=>({}));return!n.ok||r.ok!==!0?null:r.data?.probe??null}catch{return null}}function k5(e){const t=e.workspaceId?.trim()?`workspaceId=${encodeURIComponent(e.workspaceId.trim())}`:null,[n,r]=_.useState(void 0),[i,a]=_.useState(""),[l,u]=_.useState(null),[h,f]=_.useState(null),[p,g]=_.useState({history:[],cursor:-1}),[y,v]=_.useState(0),[S,w]=_.useState(null),[C,E]=_.useState(!1),[A,D]=_.useState(null),[P,H]=_.useState(null),T=_.useRef(void 0);_.useEffect(()=>{if(!t)return;let U=!1;const z=async()=>{try{const F=await fetch(`/api/operator/v1/chat/browser/state?${t}`,{cache:"no-store",headers:{"x-loop-console-confirmation":gn()}}),O=await F.json().catch(()=>({})),B=F.ok&&O.ok===!0?O.data?.page??null:null;D(B);const L=F.ok&&O.ok===!0?B?.url:void 0;if(U||!L||L===T.current)return;T.current=L;const V=w5(L);if(V.kind!=="ok")return;r(V.url),a(V.url),u(null),g(oe=>({history:[...oe.history.slice(0,oe.cursor+1),V.url],cursor:oe.cursor+1})),v(oe=>oe+1),f("已同步对话指令打开的页面")}catch{}};z();const W=window.setInterval(()=>{z()},1e3);return()=>{U=!0,window.clearInterval(W)}},[t]),_.useEffect(()=>{if(n===void 0)return;let U=!1;return w(null),E(!1),RG(n,t).then(z=>{!U&&z!==null&&EG(z)==="blocked"&&w(n)}),()=>{U=!0}},[n,t]);const I=()=>{t&&(H(null),fetch(`/api/operator/v1/chat/browser/focus?${t}`,{method:"POST",cache:"no-store",headers:{"content-type":"application/json","x-loop-console-confirmation":gn()}}).then(U=>{H(U.ok?"已聚焦外部浏览器":"外部浏览器暂不可用")}).catch(()=>H("外部浏览器暂不可用")))},$=U=>{const z=w5(U);if(z.kind!=="ok"){u(z.kind==="invalid"?"无效的网址":"该协议被禁止(仅支持 http/https)");return}const W=z.url;T.current=W,r(W),a(W),u(null),f(null),g(F=>({history:[...F.history.slice(0,F.cursor+1),W],cursor:F.cursor+1})),v(F=>F+1)},X=()=>{const U=p.cursor-1,z=p.history[U];U<0||z===void 0||(g(W=>({...W,cursor:U})),r(z),a(z),f(null),v(W=>W+1))},j=()=>{const U=p.cursor+1,z=p.history[U];U>=p.history.length||z===void 0||(g(W=>({...W,cursor:U})),r(z),a(z),f(null),v(W=>W+1))};return c.jsxs("div",{className:"oc-browser",children:[c.jsxs("div",{className:"oc-browser-bar",children:[c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"后退",title:"后退",disabled:p.cursor<=0,onClick:X,children:"‹"}),c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"前进",title:"前进",disabled:p.cursor>=p.history.length-1,onClick:j,children:"›"}),c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"刷新",title:"刷新",onClick:()=>v(U=>U+1),children:"↻"}),c.jsx("input",{className:"oc-browser-input",value:i,placeholder:"输入网址(http/https,支持 localhost)",spellCheck:!1,onChange:U=>a(U.target.value),onKeyDown:U=>{U.key==="Enter"&&$(i)}}),c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"打开",title:"打开",onClick:()=>$(i),children:"↵"}),c.jsx("button",{type:"button",className:"oc-browser-btn","aria-label":"在系统浏览器打开",title:"在系统浏览器打开",disabled:n===void 0,onClick:()=>{n!==void 0&&window.open(n,"_blank","noopener")},children:"⤴"})]}),l!==null?c.jsx("div",{className:"oc-browser-message",children:l}):null,h!==null?c.jsx("div",{className:"oc-browser-message is-info",children:h}):null,A?.running?c.jsxs("div",{className:"oc-browser-shared",children:[c.jsxs("div",{className:"oc-browser-shared-copy",children:[c.jsx("span",{className:"oc-browser-shared-title",children:A.title?.trim()||NG(A.url)||"外部页面"}),c.jsx("span",{className:"oc-browser-shared-url",children:A.url})]}),c.jsx("button",{type:"button",className:"btn",onClick:I,children:"聚焦外部窗口"})]}):null,P!==null?c.jsx("div",{className:"oc-browser-message is-info",children:P}):null,n===void 0?c.jsx("div",{className:"oc-browser-start",children:"输入网址开始浏览"}):S!==null&&!C?c.jsx(IG,{url:S,shared:A,onFocusExternal:I,onLoadAnyway:()=>E(!0)}):c.jsx("iframe",{className:"oc-browser-frame",src:n,referrerPolicy:"no-referrer",allow:"",title:n},y)]})}function IG(e){let t=e.url;try{t=new URL(e.url).hostname}catch{}return c.jsxs("div",{className:"oc-browser-blocked",children:[c.jsx("span",{className:"oc-browser-blocked-ico",children:"⚠"}),c.jsx("div",{className:"oc-browser-blocked-title",children:`${t} 拒绝被嵌入`}),c.jsx("div",{className:"oc-browser-blocked-desc",children:"该站点设置了 X-Frame-Options / frame-ancestors 保护,不允许在其它页面内显示。"}),c.jsxs("div",{className:"oc-browser-blocked-actions",children:[c.jsx("button",{type:"button",className:"btn",onClick:e.onFocusExternal,disabled:!e.shared?.running,children:"聚焦外部窗口"}),c.jsx("button",{type:"button",className:"btn",onClick:e.onLoadAnyway,children:"仍要加载"})]})]})}function NG(e){try{return new URL(e).hostname}catch{return e}}const C5={sqlite:"SQLite",postgres:"PostgreSQL",mysql:"MySQL"},E5={postgres:5432,mysql:3306};function T5(e){const[t,n]=_.useState([]),[r,i]=_.useState(!1),[a,l]=_.useState(null),[u,h]=_.useState(null),[f,p]=_.useState(null),[g,y]=_.useState(""),[v,S]=_.useState("sqlite"),[w,C]=_.useState(""),[E,A]=_.useState("parameters"),[D,P]=_.useState(""),[H,T]=_.useState(""),[I,$]=_.useState(""),[X,j]=_.useState(""),[U,z]=_.useState(""),[W,F]=_.useState("encrypted"),[O,B]=_.useState(""),[L,V]=_.useState(""),[oe,K]=_.useState(!1),[Q,G]=_.useState(null),[M,ce]=_.useState(!1),[Y,te]=_.useState(!1),[re,ee]=_.useState("skip"),[ne,de]=_.useState({}),fe=_.useRef(null),[Re,qe]=_.useState(null),[ye,Ue]=_.useState([]),[tt,Ae]=_.useState([]),[Ve,ot]=_.useState(""),[Xe,Pe]=_.useState(""),[xe,De]=_.useState(null),[_e,Me]=_.useState(50),[me,Te]=_.useState(!1),[Be,ze]=_.useState(null),[Ye,pt]=_.useState(!1),wt=_.useCallback((ge="")=>"/api/operator/v1/chat/database-connections"+ge+(e.workspaceId?`?workspaceId=${encodeURIComponent(e.workspaceId)}`:""),[e.workspaceId]),Pt=_.useCallback(async()=>{if(e.workspaceId){i(!0),h(null);try{const ge=await fetch(wt(),{credentials:"same-origin"}),Oe=await ge.json();if(!ge.ok)throw new Error(Oe.error?.message??"加载数据库连接失败");n(Oe.connections??[])}catch(ge){h(ge instanceof Error?ge.message:String(ge))}finally{i(!1)}}},[wt,e.workspaceId]);_.useEffect(()=>{Pt()},[Pt]);async function Tt(ge,Oe,je){const nt=await fetch(wt(ge),{method:Oe,credentials:"same-origin",headers:{[Qf]:Jf(),...je?{"Content-Type":"application/json"}:{}},...je?{body:JSON.stringify(je)}:{}}),Rt=await nt.json();if(!nt.ok)throw new Error(Rt.error?.message??"数据库连接操作失败");return Rt}function _t(){y(""),S("sqlite"),C(""),A("parameters"),P(""),T(""),$(""),j(""),z(""),F("encrypted"),B(""),V(""),K(!1),G(null),te(!1)}function Mt(ge){G(ge.name),y(ge.name),S(ge.engine),C(ge.path??""),A(ge.mode??(ge.urlEnv?"url-env":"parameters")),P(ge.urlEnv??""),T(ge.host??""),$(ge.port?.toString()??""),j(ge.database??""),z(ge.username??""),F(ge.passwordMode??"runtime"),B(""),V(ge.passwordEnv??""),K(ge.ssl===!0),te(ge.mode==="parameters"&&ge.passwordMode!=="environment"&&ge.passwordMode!=="encrypted"&&ge.passwordStatus!=="runtime"),h(null),p(null),ce(!0)}async function fn(ge){ge.preventDefault(),l("__save__"),h(null),p(null);try{const Oe=v==="sqlite"?{name:g,engine:v,path:w}:E==="url-env"?{name:g,engine:v,mode:E,urlEnv:D}:{name:g,engine:v,mode:E,host:H,...I.trim()?{port:Number(I)}:{},database:X,username:U,passwordMode:W,...W==="runtime"||W==="encrypted"?O!==""?{password:O}:{}:{passwordEnv:L},ssl:oe};Q?await Tt(`/${encodeURIComponent(Q)}`,"PATCH",Oe):await Tt("","POST",Oe),p(Q?`已保存连接 ${g.trim()}。`:`已添加连接 ${g.trim()}。`),_t(),ce(!1),await Pt()}catch(Oe){h(Oe instanceof Error?Oe.message:String(Oe))}finally{l(null)}}async function dn(ge){l(ge.name),h(null),de(Oe=>({...Oe,[ge.name]:{status:"checking"}}));try{const je=(await Tt(`/${encodeURIComponent(ge.name)}/test`,"POST")).result;de(nt=>({...nt,[ge.name]:{status:"ok",elapsedMs:je?.elapsedMs}}))}catch(Oe){de(je=>({...je,[ge.name]:{status:"error",message:Oe instanceof Error?Oe.message:String(Oe)}}))}finally{l(null)}}async function kt(){l("__all__"),h(null),p(null),de(nt=>{const Rt={...nt};for(const Ot of t)Rt[Ot.name]={status:"checking"};return Rt});let ge=0,Oe=0;async function je(){for(;ge<t.length;){const nt=t[ge++];if(!nt)return;try{const Ot=(await Tt(`/${encodeURIComponent(nt.name)}/test`,"POST")).result;de(Er=>({...Er,[nt.name]:{status:"ok",elapsedMs:Ot?.elapsedMs}})),Oe+=1}catch(Rt){de(Ot=>({...Ot,[nt.name]:{status:"error",message:Rt instanceof Error?Rt.message:String(Rt)}}))}}}await Promise.all(Array.from({length:Math.min(4,t.length)},()=>je())),p(`连接检查完成:${Oe}/${t.length} 可用。`),l(null)}async function Ce(ge){if(window.confirm(`确定删除数据库连接“${ge.name}”吗?`)){l(ge.name),h(null),p(null);try{await Tt(`/${encodeURIComponent(ge.name)}`,"DELETE"),p(`已删除连接 ${ge.name}。`),de(Oe=>{const je={...Oe};return delete je[ge.name],je}),Q===ge.name&&_t(),await Pt()}catch(Oe){h(Oe instanceof Error?Oe.message:String(Oe))}finally{l(null)}}}async function ct(){h(null);try{const ge=await fetch(wt("/export"),{credentials:"same-origin"}),Oe=await ge.json();if(!ge.ok||!Oe.document)throw new Error(Oe.error?.message??"导出失败");const je=new Blob([JSON.stringify(Oe.document,null,2)+`
|
|
417
|
+
`],{type:"application/json"}),nt=URL.createObjectURL(je),Rt=document.createElement("a");Rt.href=nt,Rt.download=`loop-agent-db-connections-${new Date().toISOString().slice(0,10)}.json`,Rt.click(),URL.revokeObjectURL(nt),p(`已导出 ${Oe.document.connections.length} 个连接;密码不会导出。`)}catch(ge){h(ge instanceof Error?ge.message:String(ge))}}async function at(ge){l("__import__"),h(null),p(null);try{const Oe=JSON.parse(await ge.text()),nt=(await Tt("/import","POST",{document:Oe,conflict:re})).result;p(`导入完成:新增 ${nt.imported},更新 ${nt.updated},跳过 ${nt.skipped}。运行时密码需重新填写。`),await Pt()}catch(Oe){h(Oe instanceof Error?Oe.message:"导入文件不是有效 JSON")}finally{l(null),fe.current&&(fe.current.value="")}}async function ve(ge,Oe,je,nt=_e,Rt=Ve){Te(!0),ze(null),pt(!1);try{const Ot=wt(`/${encodeURIComponent(ge)}/browse`),Er=Ot+(Ot.includes("?")?"&":"?")+`table=${encodeURIComponent(Oe)}&page=${je}&pageSize=${nt}${Rt?`&database=${encodeURIComponent(Rt)}`:""}`,si=await fetch(Er,{credentials:"same-origin"}),Ct=await si.json();if(!si.ok||!Ct.result)throw new Error(Ct.error?.message??"加载表数据失败");Pe(Oe),De(Ct.result)}catch(Ot){ze(Ot instanceof Error?Ot.message:String(Ot))}finally{Te(!1)}}async function ie(ge,Oe=!1,je=Ve){if(!Oe&&Re===ge.name){qe(null);return}const nt=Re!==ge.name,Rt=nt?ge.database??"":je;qe(ge.name),Ue([]),Pe(""),De(null),nt&&Ae(ge.database?[ge.database]:[]),ot(Rt),Te(!0),ze(null),pt(!1);try{const Ot=wt(`/${encodeURIComponent(ge.name)}/browse`),Er=Ot+(Rt?(Ot.includes("?")?"&":"?")+`database=${encodeURIComponent(Rt)}`:""),si=await fetch(Er,{credentials:"same-origin"}),Ct=await si.json();if(!si.ok)throw new Error(Ct.error?.message??"加载数据表失败");const Tr=Array.from(new Set([...Ct.databases??[],...ge.database?[ge.database]:[]]));Ae(Tr),!Rt&&Tr.length===1&&ot(Tr[0]);const hn=Ct.tables??[];Ue(hn),hn[0]&&await ve(ge.name,hn[0].schema?`${hn[0].schema}.${hn[0].name}`:hn[0].name,1,_e,Rt)}catch(Ot){ze(Ot instanceof Error?Ot.message:String(Ot))}finally{Te(!1)}}function Ee(ge){return ge===null?"NULL":ge===void 0?"":typeof ge=="object"?JSON.stringify(ge):String(ge)}function Ge(ge){if(Re!==ge.name)return null;const Oe=xe?.columns.length?xe.columns.map(je=>je.name):xe?.rows[0]?Object.keys(xe.rows[0]):[];return c.jsxs("section",{className:"database-data-browser","aria-label":`浏览 ${ge.name} 数据`,children:[c.jsxs("div",{className:"database-browser-toolbar",children:[ge.engine!=="sqlite"?c.jsxs("label",{className:"database-browser-database",children:["数据库",c.jsxs("select",{value:Ve,disabled:me,onChange:je=>{ot(je.target.value),Pe(""),De(null),ie(ge,!0,je.target.value)},children:[c.jsx("option",{value:"",children:"请选择数据库"}),tt.map(je=>c.jsx("option",{value:je,children:je},je))]})]}):null,c.jsxs("label",{className:"database-browser-table",children:["数据表",c.jsx("select",{value:Xe,disabled:me||ye.length===0,onChange:je=>{ve(ge.name,je.target.value,1)},children:ye.map(je=>{const nt=je.schema?`${je.schema}.${je.name}`:je.name;return c.jsxs("option",{value:nt,children:[nt,je.type==="view"?"(视图)":""]},nt)})})]}),c.jsxs("label",{className:"database-browser-page-size",children:["每页",c.jsxs("select",{value:_e,onChange:je=>{const nt=Number(je.target.value);Me(nt),Xe&&ve(ge.name,Xe,1,nt)},children:[c.jsx("option",{value:"20",children:"20 行"}),c.jsx("option",{value:"50",children:"50 行"}),c.jsx("option",{value:"100",children:"100 行"})]})]}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:!xe,onClick:()=>pt(!0),children:"查看字段"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:me,onClick:()=>Xe?void ve(ge.name,Xe,xe?.page??1):void ie(ge,!0),children:"刷新"})]}),Be?c.jsx("p",{className:"database-health is-error",children:Be}):me&&!xe?c.jsx("p",{className:"muted",children:"正在读取数据库结构和数据…"}):ge.engine!=="sqlite"&&!Ve&&!ge.database?c.jsx("p",{className:"database-connections-empty",children:"请先从上方选择一个数据库,再选择数据表。"}):ye.length===0?c.jsx("p",{className:"database-connections-empty",children:"当前数据库中没有可浏览的表或视图。"}):xe?c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"database-data-table-wrap",children:c.jsxs("table",{className:"database-data-table",children:[c.jsx("thead",{children:c.jsx("tr",{children:Oe.map(je=>c.jsx("th",{children:je},je))})}),c.jsx("tbody",{children:xe.rows.length===0?c.jsx("tr",{children:c.jsx("td",{colSpan:Math.max(Oe.length,1),children:"该表当前没有数据。"})}):xe.rows.map((je,nt)=>c.jsx("tr",{children:Oe.map(Rt=>c.jsx("td",{title:Ee(je[Rt]),children:Ee(je[Rt])},Rt))},nt))})]})}),c.jsxs("div",{className:"database-browser-pagination",children:[c.jsxs("span",{children:["第 ",xe.page," 页 · 本页 ",xe.rows.length," 行"]}),c.jsxs("div",{children:[c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:me||xe.page<=1,onClick:()=>{ve(ge.name,xe.table,xe.page-1)},children:"上一页"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:me||!xe.hasNext,onClick:()=>{ve(ge.name,xe.table,xe.page+1)},children:"下一页"})]})]})]}):null,Ye&&xe?c.jsx("div",{className:"database-modal-backdrop",role:"presentation",onMouseDown:je=>{je.target===je.currentTarget&&pt(!1)},children:c.jsxs("div",{className:"database-schema-modal",role:"dialog","aria-modal":"true","aria-labelledby":"database-schema-title",children:[c.jsxs("div",{className:"database-schema-heading",children:[c.jsxs("div",{children:[c.jsx("h3",{id:"database-schema-title",children:"字段结构"}),c.jsxs("p",{children:[c.jsx("code",{children:xe.table})," · ",xe.columns.length," 个字段"]})]}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>pt(!1),children:"关闭"})]}),c.jsx("div",{className:"database-schema-table-wrap",children:c.jsxs("table",{className:"database-schema-table",children:[c.jsx("thead",{children:c.jsxs("tr",{children:[c.jsx("th",{children:"字段"}),c.jsx("th",{children:"类型"}),c.jsx("th",{children:"约束"})]})}),c.jsx("tbody",{children:xe.columns.map(je=>c.jsxs("tr",{children:[c.jsx("td",{children:c.jsx("code",{children:je.name})}),c.jsx("td",{children:je.type||"未知类型"}),c.jsx("td",{children:[je.primaryKey?"主键":"",je.nullable?"可空":"非空"].filter(Boolean).join(" · ")})]},je.name))})]})})]})}):null]})}const lt=v==="postgres"?E5.postgres:E5.mysql,ut=Re?t.find(ge=>ge.name===Re):void 0;return c.jsxs("section",{className:"panel database-connections-page","aria-labelledby":"database-connections-title",children:[c.jsxs("div",{className:"database-connections-header",children:[c.jsxs("div",{children:[c.jsx("h2",{id:"database-connections-title",children:"数据库工作台"}),c.jsx("p",{className:"panel-lead",children:"管理只读连接,并在同一视图中选择数据库、数据表和浏览数据。系统拒绝 DELETE、DROP 及所有写入或结构变更。"})]}),c.jsxs("div",{className:"database-header-actions",children:[c.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>{_t(),ce(!0)},children:"新增连接"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{Pt()},disabled:r,children:"刷新"})]})]}),c.jsxs("div",{className:"database-connection-toolbar",children:[c.jsxs("select",{value:re,onChange:ge=>ee(ge.target.value),"aria-label":"导入同名连接策略",children:[c.jsx("option",{value:"skip",children:"导入:跳过同名"}),c.jsx("option",{value:"overwrite",children:"导入:覆盖同名"})]}),c.jsx("input",{ref:fe,hidden:!0,type:"file",accept:"application/json,.json",onChange:ge=>{const Oe=ge.target.files?.[0];Oe&&at(Oe)}}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>fe.current?.click(),disabled:a!==null,children:"导入"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{ct()},disabled:t.length===0,children:"导出"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{kt()},disabled:t.length===0||a!==null,children:a==="__all__"?"检查中…":"全部测试"})]}),u?c.jsx("p",{className:"error",role:"alert",children:u}):null,f?c.jsx("p",{className:"database-connections-notice",role:"status",children:f}):null,M?c.jsx("div",{className:"database-modal-backdrop",role:"presentation",onMouseDown:ge=>{ge.target===ge.currentTarget&&(_t(),ce(!1))},children:c.jsx("div",{className:"database-modal",role:"dialog","aria-modal":"true","aria-labelledby":"database-connection-editor-title",children:c.jsxs("form",{className:"database-connection-form",onSubmit:ge=>{fn(ge)},children:[c.jsxs("div",{className:"database-form-heading",children:[c.jsx("h3",{id:"database-connection-editor-title",children:Q?`编辑 ${Q}`:"新增连接"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{_t(),ce(!1)},children:"关闭"})]}),c.jsxs("label",{children:["连接名称 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:g,onChange:ge=>y(ge.target.value),required:!0,placeholder:"例如:订单生产库"}),c.jsx("small",{children:"这是对话中引用连接时使用的名称,例如“查询订单生产库”。"})]}),c.jsxs("label",{children:["数据库类型 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsxs("select",{value:v,onChange:ge=>{const Oe=ge.target.value;S(Oe),A("parameters"),$("")},children:[c.jsx("option",{value:"sqlite",children:"SQLite"}),c.jsx("option",{value:"postgres",children:"PostgreSQL"}),c.jsx("option",{value:"mysql",children:"MySQL"})]})]}),v==="sqlite"?c.jsxs("label",{children:["数据库文件绝对路径 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:w,onChange:ge=>C(ge.target.value),required:!0,placeholder:"D:\\data\\app.db"}),c.jsx("small",{children:"文件必须已存在。Windows 示例:D:\\data\\app.db;Linux/macOS 示例:/data/app.db。"})]}):c.jsxs(c.Fragment,{children:[c.jsxs("fieldset",{className:"database-connection-mode",children:[c.jsx("legend",{children:"连接方式"}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"connection-mode",checked:E==="parameters",onChange:()=>A("parameters")}),"填写地址和账号(推荐)"]}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"connection-mode",checked:E==="url-env",onChange:()=>A("url-env")}),"完整 DSN 环境变量(高级)"]})]}),E==="parameters"?c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"database-server-fields",children:[c.jsxs("label",{className:"database-host-field",children:["主机地址 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:H,onChange:ge=>T(ge.target.value),required:!0,placeholder:"127.0.0.1 或 db.example.com"})]}),c.jsxs("label",{className:"database-port-field",children:["端口 ",c.jsx("span",{className:"field-optional",children:"可选"}),c.jsx("input",{type:"number",min:"1",max:"65535",inputMode:"numeric",value:I,onChange:ge=>$(ge.target.value),placeholder:String(lt)})]}),c.jsxs("small",{children:["本机数据库通常填写 127.0.0.1;远程数据库填写域名或 IP。端口留空时使用",v==="postgres"?" PostgreSQL 默认端口 5432":" MySQL 默认端口 3306","。"]})]}),c.jsxs("label",{children:["数据库名 ",c.jsx("span",{className:"field-optional",children:"可选"}),c.jsx("input",{value:X,onChange:ge=>j(ge.target.value),placeholder:v==="postgres"?"留空使用账号默认数据库":"留空则连接服务器"}),c.jsx("small",{children:"需要固定访问某个数据库时再填写;留空会使用驱动和数据库账号的默认行为。"})]}),c.jsxs("label",{children:["用户名 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:U,onChange:ge=>z(ge.target.value),required:!0,autoComplete:"username",placeholder:v==="postgres"?"例如:postgres":"例如:root"}),c.jsx("small",{children:"建议使用最小权限账号;只查询时优先使用只读账号。"})]}),c.jsxs("fieldset",{className:"database-password-mode",children:[c.jsx("legend",{children:"密码保存方式"}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"password-mode",checked:W==="encrypted",onChange:()=>F("encrypted")}),"保存到本地加密凭据库(默认)"]}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"password-mode",checked:W==="runtime",onChange:()=>F("runtime")}),"本次运行直接输入"]}),c.jsxs("label",{className:"database-radio",children:[c.jsx("input",{type:"radio",name:"password-mode",checked:W==="environment",onChange:()=>F("environment")}),"从环境变量读取"]})]}),W==="runtime"?c.jsxs("label",{children:["密码 ",Q&&!Y?c.jsx("span",{className:"field-optional",children:"留空则保留本次运行中的密码"}):c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{type:"password",value:O,onChange:ge=>B(ge.target.value),required:!Q||Y,autoComplete:"new-password",placeholder:Q?"留空不修改;重启后需重新输入":"输入数据库密码"}),c.jsx("small",{children:"密码只保存在当前 Console 进程内存中,不写入连接文件、不显示、不导出;Console 重启后需重新输入。"})]}):W==="environment"?c.jsxs("label",{children:["密码环境变量名 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:L,onChange:ge=>V(ge.target.value),required:!0,placeholder:"例如:DB_PASSWORD"}),c.jsx("small",{children:"填写变量名,不是密码本身。启动 Console 前设置该环境变量,密码不会写入连接文件。"})]}):c.jsxs("label",{children:["本地凭据密码 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{type:"password",value:O,onChange:ge=>B(ge.target.value),required:!Q||Y,autoComplete:"new-password",placeholder:"输入后使用 AES-256-GCM 加密保存"}),c.jsx("small",{children:"密码写入 Console 全局加密凭据库,不会写入 connections.json、列表或导出文件;加密密钥由当前操作系统用户、主机和应用目录派生。"})]}),c.jsxs("label",{className:"database-checkbox",children:[c.jsx("input",{type:"checkbox",checked:oe,onChange:ge=>K(ge.target.checked)}),"启用 SSL/TLS 加密连接",c.jsx("small",{children:"云数据库和跨网络连接通常应开启;本机开发库通常可关闭。启用后使用数据库驱动的标准证书校验,私有 CA 环境需在系统或 Node 运行环境中配置信任链。"})]})]}):c.jsxs("label",{children:["完整 DSN 环境变量名 ",c.jsx("span",{className:"field-required",children:"必填"}),c.jsx("input",{value:D,onChange:ge=>P(ge.target.value),required:!0,placeholder:v==="postgres"?"例如:DATABASE_URL":"例如:MYSQL_URL"}),c.jsxs("small",{children:["这里填写环境变量名称,不是连接串。变量值示例:",v==="postgres"?"postgresql://user:password@host:5432/db":"mysql://user:password@host:3306/db","。适合已有部署或集中管理密钥的环境。"]})]})]}),c.jsxs("div",{className:"database-form-security-note",children:[c.jsx("strong",{children:"保存说明"}),c.jsx("span",{children:"地址、端口、数据库名、用户名、SSL 设置会保存到 Console 全局 app-data;实际密码或完整 DSN 不会写入、回显或导出。"})]}),c.jsx("button",{type:"submit",className:"btn btn-primary database-add-submit",disabled:!e.workspaceId||a!==null,children:a==="__save__"?"保存中…":Q?"保存修改":"添加连接"})]})})}):null,c.jsxs("section",{className:"database-workbench-shell","aria-label":"数据库浏览工作区",children:[c.jsxs("div",{className:"database-connection-summary",children:[c.jsxs("select",{"aria-label":"选择数据库连接",value:ut?.name??"",onChange:ge=>{const Oe=t.find(je=>je.name===ge.target.value);Oe&&ie(Oe,!0,Oe.database??"")},children:[c.jsx("option",{value:"",children:"选择连接"}),t.map(ge=>c.jsxs("option",{value:ge.name,children:[ge.name," · ",C5[ge.engine]]},ge.name))]}),ut?c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"database-summary-state",children:"只读"}),c.jsx("span",{className:"database-engine-badge",children:C5[ut.engine]}),c.jsx("code",{className:"database-summary-db",children:ut.engine==="sqlite"?ut.path:ut.mode==="parameters"?`${ut.host}:${ut.port} / ${Ve||ut.database||"未选择数据库"}`:`DSN: ${ut.urlEnv}`}),c.jsxs("div",{className:"database-summary-actions",children:[c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{dn(ut)},disabled:a!==null,children:a===ut.name?"测试中…":"测试"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>Mt(ut),disabled:a!==null,children:"编辑"}),c.jsx("button",{type:"button",className:"btn btn-danger",onClick:()=>{Ce(ut)},disabled:a!==null,children:"删除"})]})]}):c.jsx("span",{className:"muted",children:"选择一个连接开始浏览"})]}),c.jsx("div",{className:"database-workbench-main",children:ut?Ge(ut):c.jsxs("div",{className:"database-workbench-empty",children:[c.jsx("strong",{children:"还没有选择连接"}),c.jsx("span",{children:"从上方选择已有连接,或点击“新增连接”创建一个只读连接。"})]})})]})]})}const AG={user:"用户",ai:"AI",thinking:"思考",tool:"工具",compaction:"压缩",activity:"活动",action:"操作",error:"错误",text:"文本",system:"系统"},MG={user:c.jsx(OR,{size:12,"aria-hidden":"true"}),ai:c.jsx(xx,{size:12,"aria-hidden":"true"}),thinking:c.jsx(T6,{size:12,"aria-hidden":"true"}),tool:c.jsx(C6,{size:12,"aria-hidden":"true"}),compaction:c.jsx(R6,{size:12,"aria-hidden":"true"}),activity:c.jsx(TR,{size:12,"aria-hidden":"true"}),action:c.jsx(E6,{size:12,"aria-hidden":"true"}),error:c.jsx(S6,{size:12,"aria-hidden":"true"}),text:c.jsx(xx,{size:12,"aria-hidden":"true"}),system:c.jsx(Nb,{size:12,"aria-hidden":"true"})};function Ns({kind:e}){return c.jsxs("span",{className:`oc-trajectory-tag is-${e}`,children:[MG[e],AG[e]]})}function DG(e){return e===null||!Number.isFinite(e)||e<=0?"":e<1e3?`${e}ms`:`${(e/1e3).toFixed(1)}s`}function OG({tool:e}){const[t,n]=_.useState(!1),r=vc(e),i=r?"error":"tool",a=r?"失败":e.status==="running"?"运行中":e.interrupted===!0?"已停止":"成功",l=e.finishedAt&&e.createdAt?e.finishedAt-e.createdAt:null,u=t?c.jsxs("div",{className:"oc-trajectory-tool-body",children:[e.args!==void 0&&e.args!==null?c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"参数"}),Mb(e.args)]}):null,e.resultText||e.result?c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"结果"}),sd(e.result??e.resultText)]}):null]}):null;return c.jsxs("div",{className:"oc-trajectory-step","data-open":t,children:[c.jsxs("div",{className:`oc-trajectory-cell is-${e.status}`,children:[c.jsx(Ns,{kind:i}),c.jsx("span",{className:"oc-trajectory-cell-toolname",children:e.toolName}),c.jsx("span",{className:`oc-trajectory-cell-status is-${e.status}`,children:a}),c.jsx("span",{className:"oc-trajectory-cell-time",children:DG(l)}),c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>n(h=>!h),"aria-expanded":t,children:t?"收起":"展开"})]}),u]})}function xC(e){const t=_.useRef(null),[n,r]=_.useState(!1),i=_.useCallback(()=>{const a=t.current;if(!a)return;const l=a.scrollWidth>a.clientWidth+1;r(u=>u===l?u:l)},[]);return _.useEffect(()=>{if(e)return;i();const a=t.current;if(!a||typeof ResizeObserver>"u")return;const l=new ResizeObserver(()=>i());return l.observe(a),()=>l.disconnect()},[e,i]),_.useEffect(()=>{e||i()}),{ref:t,overflowed:e?!0:n}}function jG({text:e}){const[t,n]=_.useState(!1),{ref:r,overflowed:i}=xC(t);return c.jsx("div",{className:"oc-trajectory-step",children:c.jsxs("div",{className:"oc-trajectory-cell is-thinking-cell","data-open":t,children:[c.jsx(Ns,{kind:"thinking"}),c.jsx("span",{ref:r,className:"oc-trajectory-cell-text oc-trajectory-think-text",children:e}),i?c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>n(a=>!a),"aria-expanded":t,children:t?"收起":"展开"}):null]})})}function A1({kind:e,text:t}){const[n,r]=_.useState(!1),{ref:i,overflowed:a}=xC(n);return c.jsxs("div",{className:`oc-trajectory-cell is-${e}-cell`,"data-open":n,children:[c.jsx(Ns,{kind:e}),c.jsx("span",{ref:i,className:"oc-trajectory-cell-text",children:t}),a?c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>r(l=>!l),"aria-expanded":n,children:n?"收起":"展开"}):null]})}function LG({action:e}){const t=new Date(e.at);return c.jsx("div",{className:"oc-trajectory-turn is-operator-action",children:c.jsxs("div",{className:"oc-trajectory-cell is-action-cell",children:[c.jsx(Ns,{kind:"action"}),c.jsxs("span",{className:"oc-trajectory-cell-text oc-trajectory-action-text",children:[c.jsx("strong",{children:"SDD 数据对齐"}),c.jsx("span",{children:e.skillName}),c.jsxs("code",{title:e.telemetrySessionId,children:["Session: ",e.telemetrySessionId]})]}),c.jsx("time",{className:"oc-trajectory-cell-time",dateTime:t.toISOString(),children:t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})})]})})}function BG(e){const t=e.identity.telemetrySessionId,[n,r]=_.useState(!1);_.useEffect(()=>r(!1),[t]);const i=_.useCallback(()=>{t&&navigator.clipboard?.writeText(t).then(()=>{r(!0),window.setTimeout(()=>r(!1),1600)},()=>{})},[t]);return c.jsxs("div",{className:"oc-trajectory-sdd-session","aria-label":"SDD 上报会话",children:[c.jsx("span",{className:"oc-trajectory-sdd-session-icon","aria-hidden":"true",children:c.jsx(E6,{size:16})}),c.jsx("span",{className:"oc-trajectory-sdd-session-label",children:"SDD Session"}),c.jsx("code",{className:t?void 0:"is-pending",title:t??void 0,children:t??"待首次请求"}),t?c.jsx("button",{type:"button",className:"oc-trajectory-sdd-session-copy","aria-label":n?"SDD Session ID 已复制":"复制 SDD Session ID",title:n?"已复制":"复制 Session ID",onClick:i,children:n?c.jsx(_6,{size:14,"aria-hidden":"true"}):c.jsx(xR,{size:14,"aria-hidden":"true"})}):null]})}function SC(e,t){const n=e.map((i,a)=>{const l=[i.user?.createdAt,...i.assistants.map(h=>h.createdAt),...i.tools.flatMap(h=>[h.createdAt,h.finishedAt])].filter(h=>typeof h=="number"&&Number.isFinite(h)),u=[i.user?.eventSeq,...i.assistants.flatMap(h=>[h.eventSeq,h.updatedSeq]),...i.tools.flatMap(h=>[h.eventSeq,h.finishedSeq])].filter(h=>typeof h=="number"&&Number.isFinite(h));return{kind:"turn",key:`turn:${i.key}`,group:i,turnIndex:a+1,at:l.length>0?Math.max(...l):a,...u.length>0?{seq:Math.max(...u)}:{}}}),r=t.map(i=>({kind:"action",key:`action:${i.eventId}`,action:i,at:i.at,seq:i.seq}));return[...n,...r].sort((i,a)=>i.seq!==void 0&&a.seq!==void 0&&i.seq!==a.seq?i.seq-a.seq:i.at-a.at||i.key.localeCompare(a.key))}function Wf(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function ic(e){if(e<1e3)return`${Math.round(e)}ms`;const t=e/1e3;if(t<60)return`${t.toFixed(1)}s`;const n=Math.round(t);return`${Math.floor(n/60)}m${n%60}s`}function zG({turn:e,index:t}){const n=e.usage,r=[];if(e.steps>0&&r.push(`${e.steps} 步`),e.llmMs>0&&r.push(`LLM ${ic(e.llmMs)}`),e.ttftMs!==void 0&&e.ttftMs>0&&r.push(`首token ${ic(e.ttftMs)}`),e.decodeMs!==void 0&&e.decodeMs>0&&e.decodeTokens){const i=e.decodeTokens/(e.decodeMs/1e3);r.push(`${i.toFixed(1)} tok/s`)}if(e.toolCalls>0&&r.push(`${e.toolCalls} 工具`),e.toolMs>0&&r.push(`工具 ${ic(e.toolMs)}`),n.inputTokens>0||n.cacheReadTokens>0||n.cacheWriteTokens>0){const i=n.inputTokens+n.cacheReadTokens+n.cacheWriteTokens;r.push(`↑${Wf(i)}`)}return n.outputTokens>0&&r.push(`↓${Wf(n.outputTokens)}`),n.cost!==void 0&&n.cost>0&&r.push(n.cost>=.01?`$${n.cost.toFixed(2)}`:"<$0.01"),c.jsxs("div",{className:"oc-trajectory-turnmeta",title:`turn ${e.turnId}`,children:[c.jsxs("span",{className:"oc-trajectory-turnmeta-index",children:["第 ",t," 轮"]}),r.map((i,a)=>c.jsx("span",{className:"oc-trajectory-turnmeta-item",children:i},a))]})}function PG({group:e,telemetry:t,turnIndex:n}){const r=e.assistants.find(l=>l.kind==="compaction"),i=e.user?.text,a=e.answer?.text;return r?c.jsx("div",{className:"oc-trajectory-turn",children:c.jsxs("div",{className:"oc-trajectory-cell is-compaction-cell",children:[c.jsx(Ns,{kind:"compaction"}),c.jsx("span",{className:"oc-trajectory-cell-text",children:r.text||"上下文已压缩"})]})}):c.jsxs("div",{className:"oc-trajectory-turn",children:[t?c.jsx(zG,{turn:t,index:n}):null,i?c.jsx(A1,{kind:"user",text:i}):null,e.processItems.map((l,u)=>{switch(l.kind){case"thinking":return c.jsx(jG,{text:l.thinking},u);case"text":return l.text.trim()?c.jsx(A1,{kind:"ai",text:l.text},u):null;case"tool":return c.jsx(OG,{tool:l.tool},u);case"activity":return c.jsxs("div",{className:"oc-trajectory-cell is-activity-cell",children:[c.jsx(Ns,{kind:"activity"}),c.jsx("span",{className:"oc-trajectory-cell-text",children:l.activity?.title??"活动"})]},u);case"provider-error":return c.jsxs("div",{className:"oc-trajectory-cell is-error-cell",children:[c.jsx(Ns,{kind:"error"}),c.jsx("span",{className:"oc-trajectory-cell-text",children:l.error?.message??"提供方错误"})]},u);default:return null}}),a?c.jsx(A1,{kind:"ai",text:a}):null]})}function HG(e){const{runtimeContext:t,toolCatalog:n,loading:r}=e,[i,a]=_.useState(!1),[l,u]=_.useState(!1);if(r&&!t)return c.jsx("div",{className:"oc-trajectory-turn oc-trajectory-injection",children:c.jsxs("div",{className:"oc-trajectory-cell is-system-cell",children:[c.jsx(Ns,{kind:"system"}),c.jsx("span",{className:"oc-trajectory-cell-text oc-trajectory-think-text",children:"正在加载会话注入(冷启动 Pi 会话)…"})]})});if(!t)return null;const h=t.systemPrompt.text??"",f=t.suffix.text??"",p=t.resources.activeTools??[],g=[...n?.operator??[],...n?.explore??[]];return c.jsxs("div",{className:"oc-trajectory-turn oc-trajectory-injection",children:[c.jsxs("div",{className:"oc-trajectory-cell is-system-cell",children:[c.jsx(Ns,{kind:"system"}),c.jsxs("span",{className:"oc-trajectory-cell-text",children:["系统提示词",h?` · ${t.systemPrompt.charCount??h.length} 字符`:" · 暂不可用",f?" · 含注入上下文":""]}),c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>a(y=>!y),"aria-expanded":i,children:i?"收起":"展开"})]}),i?c.jsxs("div",{className:"oc-trajectory-tool-body",children:[h?c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"系统提示词"}),h]}):null,f?c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"注入上下文(suffix)"}),f]}):null]}):null,c.jsxs("div",{className:"oc-trajectory-cell is-system-cell",children:[c.jsx(Ns,{kind:"system"}),c.jsxs("span",{className:"oc-trajectory-cell-text",children:["工具目录 · 当前启用 ",p.length," 个"]}),c.jsx("button",{type:"button",className:"oc-trajectory-cell-toggle",onClick:()=>u(y=>!y),"aria-expanded":l,children:l?"收起":"展开"})]}),l?c.jsx("div",{className:"oc-trajectory-tool-body",children:g.length>0?c.jsxs("div",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"模型可见工具"}),g.map(y=>c.jsxs("div",{className:"oc-trajectory-tool-catalog-row",children:[c.jsx("code",{children:y.toolId}),y.action?c.jsx("em",{children:y.action}):null,c.jsx("span",{children:y.description})]},y.toolId))]}):c.jsxs("pre",{className:"oc-trajectory-pre",children:[c.jsx("strong",{children:"模型可见工具"}),p.join(`
|
|
418
418
|
`)||"(无)"]})}):null]})}function qG(e){const t=e.turnGroups,n=e.operatorActions??[],r=SC(t,n),i=new Map;for(const h of e.turnTelemetry??[])i.set(h.turnId,h);const a=h=>{const f=h.user?.turnId??h.assistants[0]?.turnId;if(f){const y=i.get(f);if(y)return y}const p=h.user?.createdAt??h.assistants[0]?.createdAt;if(p===void 0)return;let g;for(const y of e.turnTelemetry??[])y.startedAt!==void 0&&y.startedAt>=p-2e3&&y.startedAt<=p+2e3&&(g=y);return g},l=c.jsx(HG,{runtimeContext:e.runtimeContext??null,toolCatalog:e.toolCatalog??null,loading:e.runtimeContextLoading});if(r.length===0&&!e.sddSessionIdentity&&!e.runtimeContext&&!e.runtimeContextLoading)return c.jsx("p",{className:"oc-trajectory-empty",children:"暂无对话轨迹。"});const u=()=>{const h=YG(t,{runtimeContext:e.runtimeContext??null,toolCatalog:e.toolCatalog??null},e.turnTelemetry,n,e.sddSessionIdentity),f=new Blob([h],{type:"text/html;charset=utf-8"}),p=URL.createObjectURL(f),g=document.createElement("a");g.href=p,g.download=`trajectory-${Date.now()}.html`,document.body.appendChild(g),g.click(),g.remove(),URL.revokeObjectURL(p)};return c.jsxs("div",{className:"oc-trajectory",children:[c.jsxs("div",{className:"oc-trajectory-toolbar",children:[c.jsx("span",{children:"对话轨迹"}),c.jsx("button",{type:"button",className:"oc-trajectory-export",onClick:u,children:"导出 HTML"})]}),e.sddSessionIdentity?c.jsx(BG,{identity:e.sddSessionIdentity}):null,l,r.map(h=>h.kind==="action"?c.jsx(LG,{action:h.action},h.key):c.jsx(PG,{group:h.group,telemetry:a(h.group),turnIndex:h.turnIndex},h.key))]})}const $G=`
|
|
419
419
|
body{margin:0;font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:#f6f7f9;color:#1a1d21}
|
|
420
420
|
.wrap{max-width:900px;margin:0 auto;padding:24px 20px}
|
|
@@ -475,4 +475,4 @@ ${a.join(`
|
|
|
475
475
|
`).find(t=>t.startsWith("event: "))?.slice(7).trim()??"message"}function nV(){return new Promise(e=>window.setTimeout(e,25))}const W5=[100,250,500,1e3,2e3];function Tu(e,t){t&&e(n=>n.filter(r=>!(r.id===t&&r.role==="assistant"&&!r.text.trim()&&!(r.content&&r.content.length>0))))}function rV(e){const{origin:t,refs:n,session:r,thread:i,composer:a,setError:l,setAutoScroll:u,setNotice:h,recoveryVersion:f=0,watchSessionTitle:p}=e,{applySseBlock:g,setMessages:y,setStreaming:v,setStreamingAssistantId:S,streaming:w,setTurnPhase:C,setDeferredTurn:E,setDeferredTurns:A}=i,{settleSubmission:D,settleSubmissionByRequest:P,replaceSessionDraft:H}=a,T=_.useCallback(Y=>{h&&h({id:Date.now(),message:Y})},[h]),I=_.useCallback(Y=>{const te=_s(n);mo(te,Y),xs(n,te)},[n]),$=_.useCallback((Y,te,re)=>{if(n.sessionRef.current?.sessionId!==Y||n.sessionGenerationRef.current!==te)return;const ee=n.pendingSubmissionRef.current?.clientRequestId;ee&&I(ee),n.streamingRef.current=!1,n.activeTurnIdRef.current=null,n.assistantIdRef.current=null,n.stoppingTurnIdRef.current=null,n.stopRequestedRef.current=!1,v(!1),C("idle"),S(null),Tu(y,re)},[n,I,v,C,S,y]),X=_.useCallback(async(Y,te,re)=>{const ee=[];for(;!re.aborted;){const ne=n.eventsStreamStateRef.current;if(!ne||ne.sessionId!==Y||ne.generation!==te)return;ne.ready=!1;try{const de={Accept:"text/event-stream"},fe=n.lastEventIdRef.current;fe&&(de["Last-Event-ID"]=fe);const Re=await fetch(FW(t,Y),{headers:de,credentials:"include",signal:re});if(!Re.ok||!Re.body){if(Re.status===404)return;await Pp(2e3,re);continue}const qe=Re.body.getReader(),ye=new TextDecoder;let Ue="",tt=!0,Ae=!1,Ve=null;const ot=oa("a");e:for(;;){const{done:Pe,value:xe}=await qe.read();if(Pe)break;Ue+=ye.decode(xe,{stream:!0});const De=Ue.split(`
|
|
476
476
|
|
|
477
477
|
`);Ue=De.pop()??"";for(let _e=0;_e<De.length;_e+=1){const Me=De[_e];if(Me===void 0)continue;if(!tt&&LW(Me,Ve).action==="reconnect"){ee.push(...De.slice(_e)),Ae=!0;break e}if(G5(Me)==="stream_ready"){const Be=n.eventsStreamStateRef.current;Be?.sessionId===Y&&Be.generation===te&&(Be.ready=!0),tt=!1,Ve=jW(Me)}const me=n.assistantIdRef.current??ot,Te=g(Me,me,{replay:tt,targetSessionId:Y,generation:te});if(Te&&(n.lastEventIdRef.current=O1(n.lastEventIdRef.current,Te),tt||(Ve=O1(Ve,Te))),G5(Me)==="stream_ready"&&ee.length>0){const Be=OW(ee.splice(0),Ve);for(const ze of Be){const Ye=g(ze,n.assistantIdRef.current??ot,{replay:!1,targetSessionId:Y,generation:te});Ye&&(n.lastEventIdRef.current=O1(n.lastEventIdRef.current,Ye))}}}}Ae&&await qe.cancel().catch(()=>{});const Xe=n.eventsStreamStateRef.current;Xe?.sessionId===Y&&Xe.generation===te&&(Xe.ready=!1),Ae||await Pp(1e3,re)}catch{if(re.aborted)return;await Pp(2e3,re)}}},[t,n,g]),j=_.useCallback((Y,te)=>{const re=n.eventsStreamStateRef.current;if(re?.sessionId===Y&&re.generation===te&&n.reconnectAbortRef.current)return;n.reconnectAbortRef.current?.abort();const ee=new AbortController;n.reconnectAbortRef.current=ee,n.eventsStreamStateRef.current={sessionId:Y,generation:te,ready:!1},X(Y,te,ee.signal)},[n,X]),U=_.useCallback(async(Y,te)=>{j(Y,te);const re=Date.now()+5e3;for(;Date.now()<re;){const ee=n.eventsStreamStateRef.current;if(ee?.sessionId===Y&&ee.generation===te&&ee.ready)return;if(n.sessionRef.current?.sessionId!==Y||n.sessionGenerationRef.current!==te)throw new Error("会话已切换");await nV()}throw new Error("事件连接未就绪,请检查 Console 连接后重试")},[n,j]),z=_.useCallback(async Y=>{try{const te=await fetch(H5(t,Y),{credentials:"include"}),re=await te.json().catch(()=>({}));return te.ok?re.state??null:null}catch{return null}},[t]),W=_.useCallback(async Y=>{try{const te=new URL(t,window.location.href),re=new URL($W(t,Y.sessionId),te);if(re.origin!==te.origin)throw new Error("create-turn URL escaped the Console origin");const ee=await fetch(re,{method:"POST",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",signal:Y.signal,body:JSON.stringify({clientRequestId:Y.clientRequestId,text:Y.text.trim()||"请查看附件图片。",images:Y.images.map(({type:de,mimeType:fe,data:Re})=>({type:de,mimeType:fe,data:Re}))})}),ne=await ee.json().catch(()=>({}));return{httpOk:ee.ok,status:ee.status,body:ne}}catch{return{httpOk:!1,status:0,body:{},networkError:!0}}},[t]),F=_.useCallback(()=>({showNotice:T,setError:Y=>l(Y)}),[T,l]),O=_.useCallback(async(Y,te,re)=>{n.stoppingTurnIdRef.current=re,n.streamingRef.current=!1,v(!1),C("idle"),S(null);try{const ee=await fetch(UW(t,Y,re),{method:"POST",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",body:"{}"}),ne=await ee.json().catch(()=>({}));if(n.sessionRef.current?.sessionId!==Y||n.sessionGenerationRef.current!==te||n.stoppingTurnIdRef.current!==re)return;const de=F5({httpOk:ee.ok,turnId:re,body:ne}),fe=_s(n);if(fe.stoppingTurnId=re,de.action==="owner-lost-reconcile"){const Re=await z(Y);if(!(n.sessionRef.current?.sessionId===Y&&n.sessionGenerationRef.current===te)||n.stoppingTurnIdRef.current!==re)return;j1(fe,de,F(),{sessionStillCurrent:!0,runtimeBusy:rd(Re??void 0),markIdle:()=>$(Y,te,n.assistantIdRef.current)}),xs(n,fe),C(Xh(fe));return}j1(fe,de,F(),{sessionStillCurrent:!0,markIdle:()=>$(Y,te,n.assistantIdRef.current)}),xs(n,fe),C(Xh(fe))}catch{const ee=_s(n);j1(ee,F5({httpOk:!1,turnId:re,body:{},networkError:!0}),F()),xs(n,ee),n.streamingRef.current=!1,v(!1),C("idle")}},[t,n,v,C,$,z,F]),B=_.useCallback((Y,te)=>{const re=_s(n);re.sessionId=n.sessionRef.current?.sessionId??null,re.sessionGeneration=n.sessionGenerationRef.current,re.submitGeneration=n.submitGenerationRef.current,XW(re,Y,{assistantId:te.assistantId,text:te.text,images:te.images,pending:te.pending,sessionId:te.sessionId,notice:F(),acceptedUi:{setStreaming:v,setStreamingAssistantId:S,setPendingImages:()=>{},watchSessionTitle:p},adoptUi:{clearEmptyAssistant:ne=>Tu(y,ne),setInput:()=>{},setPendingImages:()=>{},setStreaming:v,setStreamingAssistantId:S,removePendingMessage:ne=>y(de=>Yh(de,ne))},rejectedUi:{setError:l,setStreaming:v,setStreamingAssistantId:S,clearEmptyAssistant:ne=>Tu(y,ne),setInput:()=>{},setPendingImages:()=>{},formatError:es,removePendingMessage:ne=>y(de=>Yh(de,ne))},onAutoAbort:ne=>{O(te.sessionId,te.generation,ne)}}),Y.kind==="accepted"?D(te.attempt,"accepted"):(Y.kind==="adopt-active"||Y.kind==="rejected"||Y.kind==="stale")&&D(te.attempt,"rejected"),xs(n,re);const ee=Bu(re);C(Xh(re)),ee==="stopping"&&(n.streamingRef.current=!1,v(!1),S(null))},[n,F,v,C,S,D,p,y,l,O]),L=_.useCallback(async Y=>{const{attempt:te}=Y,re=n.sessionRef.current,ee=()=>n.sessionRef.current?.sessionId===te.identity.sessionId&&n.sessionGenerationRef.current===te.sessionGeneration;if(!re||re.sessionId!==te.identity.sessionId||!ee())return D(te,"rejected"),{action:"handled"};const ne=qe=>{ee()&&l(qe)},de=(qe,ye)=>{D(te,"accepted"),ee()&&(E(ye?.[0]??qe),A(ye??[qe]),l(null))},fe=()=>{D(te,"accepted"),ee()&&(E(null),A([]),l(null))},Re=async()=>{const qe=await fetch(`${t}/api/operator/v1/chat/sessions/${encodeURIComponent(te.identity.sessionId)}/deferred-turn`,{method:"PUT",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",signal:te.signal,body:JSON.stringify({clientRequestId:te.clientRequestId,blockedByTurnId:Y.blockedByTurnId,text:te.draftSnapshot,images:te.imageSnapshot})}),ye=await qe.json().catch(()=>({}));return{response:qe,body:ye}};try{for(let qe=0;qe<2;qe+=1){const{response:ye,body:Ue}=await Re();if(ye.ok&&Ue.accepted&&Ue.deferredTurn)return de(Ue.deferredTurn,Ue.deferredTurns),{action:"handled"};if(Ue.error?.code!=="TURN_NOT_ACTIVE")return ee()&&(Ue.deferredTurns&&A(Ue.deferredTurns),Ue.deferredTurn&&E(Ue.deferredTurn)),D(te,"rejected"),ne(Ue.error?.message??`待发送消息未被服务端接受(HTTP ${ye.status})`),{action:"handled"};const tt=await z(te.identity.sessionId),Ae=B5({clientRequestId:te.clientRequestId,blockedByTurnId:Y.blockedByTurnId,state:tt??void 0});if(Ae.action==="deferred")return de(Ae.deferredTurn,tt?.deferredTurns),{action:"handled"};if(Ae.action==="accepted")return fe(),{action:"handled"};if(!(Ae.action==="retry-deferred"&&qe===0))return Ae.action==="send-now"?{action:"send-now"}:(ee()&&(Ue.deferredTurns&&A(Ue.deferredTurns),Ue.deferredTurn&&E(Ue.deferredTurn)),D(te,"rejected"),ne(Ue.error?.message??"停止状态已变化,当前消息仍保留在输入框"),{action:"handled"})}return D(te,"rejected"),{action:"handled"}}catch(qe){if(te.signal.aborted)return{action:"handled"};const ye=await z(te.identity.sessionId),Ue=B5({clientRequestId:te.clientRequestId,blockedByTurnId:Y.blockedByTurnId,state:ye??void 0});return Ue.action==="deferred"?(de(Ue.deferredTurn,ye?.deferredTurns),{action:"handled"}):Ue.action==="accepted"?(fe(),{action:"handled"}):Ue.action==="send-now"?{action:"send-now"}:(D(te,"rejected"),ne(qe instanceof Error?`无法确认消息是否已排队:${qe.message}`:"无法确认消息是否已排队,请刷新后查看服务端状态"),{action:"handled"})}},[t,n,i.deferredTurn,E,A,D,l,z]),V=_.useCallback(async(Y,te)=>{const re=n.sessionRef.current,ee=te?i.deferredTurns.find(Re=>Re.clientRequestId===te.clientRequestId):i.deferredTurns[0]??i.deferredTurn;if(!re||!ee)return;const ne={...re},de=n.sessionGenerationRef.current,fe=()=>n.sessionRef.current?.sessionId===ne.sessionId&&n.sessionGenerationRef.current===de;try{const Re=await fetch(`${t}/api/operator/v1/chat/sessions/${encodeURIComponent(re.sessionId)}/deferred-turn`,{method:"DELETE",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",body:JSON.stringify({clientRequestId:ee.clientRequestId,expectedRevision:ee.revision})}),qe=await Re.json().catch(()=>({}));if(!Re.ok||!qe.cancelled){fe()&&l(qe.error?.message??"待发送消息撤回失败");return}if(Y==="restore"&&H(ne,ee.text??qe.deferredTurn?.text??"",ee.images??qe.deferredTurn?.images??[]),!fe())return;const ye=i.deferredTurns.filter(Ue=>Ue.clientRequestId!==ee.clientRequestId);A(ye),E(ye[0]??null),l(null)}catch(Re){fe()&&l(Re instanceof Error?Re.message:String(Re))}},[t,n,i.deferredTurn,i.deferredTurns,E,A,H,l]),oe=_.useCallback(()=>V("restore"),[V]),K=_.useCallback(Y=>V("discard",Y),[V]),Q=_.useCallback(async(Y,te)=>{const re=n.sessionRef.current;if(!re)return;const ee=n.sessionGenerationRef.current,ne=()=>n.sessionRef.current?.sessionId===re.sessionId&&n.sessionGenerationRef.current===ee,de=i.deferredTurns.find(fe=>fe.clientRequestId===Y.clientRequestId);if(de)try{const fe=await fetch(`${t}/api/operator/v1/chat/sessions/${encodeURIComponent(re.sessionId)}/deferred-turn`,{method:"PUT",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",body:JSON.stringify({clientRequestId:Y.clientRequestId,blockedByTurnId:de.blockedByTurnId,text:te,images:de.images??[],expectedRevision:Y.revision})}),Re=await fe.json().catch(()=>({}));if(!ne())return;if(!fe.ok)throw new Error(Re.error?.message??"编辑排队消息失败");Re.deferredTurns&&A(Re.deferredTurns),Re.deferredTurn&&E(Re.deferredTurn),l(null)}catch(fe){ne()&&l(fe instanceof Error?fe.message:"编辑排队消息失败")}},[t,n,i.deferredTurns,E,A,l]),G=_.useCallback(async Y=>{const te=n.sessionRef.current;if(!te)return;const re=n.sessionGenerationRef.current,ee=()=>n.sessionRef.current?.sessionId===te.sessionId&&n.sessionGenerationRef.current===re;try{const ne=await fetch(`${t}/api/operator/v1/chat/sessions/${encodeURIComponent(te.sessionId)}/deferred-turn/${encodeURIComponent(Y.clientRequestId)}/steer`,{method:"POST",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",body:JSON.stringify({expectedRevision:Y.revision})}),de=await ne.json().catch(()=>({}));if(!ee())return;if(!ne.ok)throw new Error(de.error?.message??"插话发送失败");const fe=de.deferredTurns??i.deferredTurns.filter(Re=>Re.clientRequestId!==Y.clientRequestId);A(fe),E(fe[0]??null),l(null)}catch(ne){ee()&&l(ne instanceof Error?ne.message:"插话发送失败")}},[t,n,i.deferredTurns,E,A,l]),M=_.useCallback(async Y=>{const te=Y.draftSnapshot,re=Y.imageSnapshot,ee=n.sessionRef.current;if(!ee||ee.sessionId!==Y.identity.sessionId||n.sessionGenerationRef.current!==Y.sessionGeneration||!te.trim()&&re.length===0){D(Y,"rejected");return}const ne=_s(n),de=BW({turnPhase:Bu(ne),blockedByTurnId:ne.stoppingTurnId??ne.activeTurnId}),fe=Y.clientRequestId;if(de.action==="hold"){const Me=Bu(ne);Me==="stopping"?T("正在确认上一轮停止状态,当前消息已保留"):Me==="running"&&T("正在确认当前回合状态,当前消息已保留"),D(Y,"rejected");return}if(de.action==="queue-deferred"&&(await L({attempt:Y,blockedByTurnId:de.blockedByTurnId})).action!=="send-now")return;const Re=n.sessionRef.current,qe=n.sessionGenerationRef.current;if(!Re||Re.sessionId!==ee.sessionId||qe!==Y.sessionGeneration||!te.trim()&&re.length===0||n.streamingRef.current||n.submitInFlightRef.current||n.pendingSubmissionRef.current){D(Y,"rejected");return}n.submitInFlightRef.current=!0;const ye=++n.submitGenerationRef.current,Ue=oa("u"),tt=oa("a"),Ae=te.trim(),Ve=[...re],ot=zW({clientRequestId:fe,submitGeneration:ye,sessionId:Re.sessionId,sessionGeneration:qe,text:Ae,images:Ve,assistantId:tt,userMessageId:Ue});n.pendingSubmissionRef.current=ot;const Xe={id:Ue,role:"user",text:Ae,createdAt:Date.now(),clientRequestId:fe},Pe={id:tt,role:"assistant",text:"",createdAt:Date.now()};y(Me=>EC(Me,{clientRequestId:fe,user:Xe,assistant:Pe})),u(!0),l(null);try{await U(Re.sessionId,qe)}catch(Me){n.sessionRef.current?.sessionId===Re.sessionId&&n.sessionGenerationRef.current===qe&&l(es(Me instanceof Error?Me.message:String(Me))),I(fe),y(me=>Yh(me,fe)),Tu(y,tt),D(Y,"rejected");return}if(n.sessionRef.current?.sessionId!==Re.sessionId||n.sessionGenerationRef.current!==qe){I(fe),n.sessionRef.current?.sessionId===Re.sessionId&&(y(Me=>Yh(Me,fe)),Tu(y,tt)),D(Y,"rejected");return}n.streamingRef.current=!0,C("running"),n.assistantIdRef.current=tt,v(!0),S(tt);const xe={sessionId:Re.sessionId,generation:qe,submitGeneration:ye,assistantId:tt,text:Ae,images:Ve,attempt:Y,pending:ot},De=await W({sessionId:Re.sessionId,clientRequestId:fe,text:Ae,images:Ve,signal:Y.signal});if(!Kf({pending:ot,sessionId:n.sessionRef.current?.sessionId,sessionGeneration:n.sessionGenerationRef.current,submitGeneration:n.submitGenerationRef.current})){ot.resolveOutcome({kind:"stale"}),I(fe),D(Y,De.httpOk&&De.body.accepted?"accepted":"rejected");return}let _e=De.networkError?z5():P5({httpOk:De.httpOk,status:De.status,body:De.body,clientRequestId:fe});if(_e.kind==="ambiguous"){const Me=await z(Re.sessionId),me=Me?HW({clientRequestId:fe,state:Me}):null;if(me)_e=me;else{const Te=await W({sessionId:Re.sessionId,clientRequestId:fe,text:Ae,images:Ve,signal:Y.signal});if(!Kf({pending:ot,sessionId:n.sessionRef.current?.sessionId,sessionGeneration:n.sessionGenerationRef.current,submitGeneration:n.submitGenerationRef.current})){ot.resolveOutcome({kind:"stale"}),I(fe),D(Y,Te.httpOk&&Te.body.accepted?"accepted":"rejected");return}if(_e=Te.networkError?z5("无法确认 Turn 是否已创建,正在与服务端对账(不会重复提交新的请求 ID)"):P5({httpOk:Te.httpOk,status:Te.status,body:Te.body,clientRequestId:fe}),_e.kind==="ambiguous"){const Be=_e.message||"无法确认 Turn 是否已创建,正在与服务端对账(不会重复提交新的请求 ID)";_e=PW(Be),T(Be)}}}B(_e,xe)},[t,n,U,W,z,B,I,T,y,D,u,l,v,C,S,L]),ce=_.useCallback(async()=>{const Y=n.sessionRef.current?.sessionId,te=n.sessionGenerationRef.current;if(!Y)return;const re=_s(n),ee=U5(re,{postAbort:()=>{}});if(xs(n,re),n.streamingRef.current=!1,v(!1),S(null),C("idle"),ee.abortedTurnId){if(n.stopInFlightRef.current)return;n.stopInFlightRef.current=!0;try{await O(Y,te,ee.abortedTurnId)}finally{n.stopInFlightRef.current=!1}return}const ne=n.pendingSubmissionRef.current;if(ne&&!n.stopInFlightRef.current){n.stopInFlightRef.current=!0;try{const de=await ne.outcomePromise;if(n.sessionRef.current?.sessionId!==Y||n.sessionGenerationRef.current!==te)return;let fe=null;if(de.kind==="accepted")fe=de.turnId;else if(de.kind==="adopt-active")fe=de.activeTurn.turnId;else if(de.kind==="ambiguous")return;if(de.kind==="rejected"||de.kind==="stale"){n.stopRequestedRef.current=!1;return}if(!fe)return;const Re=_s(n);IC(Re);const qe=U5(Re,{postAbort:()=>{}});xs(n,Re),qe.abortedTurnId&&await O(Y,te,qe.abortedTurnId)}finally{n.stopInFlightRef.current=!1}}},[n,O,v,S,C]);return _.useEffect(()=>{const Y=!!n.pendingSubmissionRef.current||n.submitInFlightRef.current||n.stopRequestedRef.current||!!n.activeTurnIdRef.current;if(!r||!w&&!Y)return;const te=r.sessionId,re={...r},ee=n.sessionGenerationRef.current;let ne=!1,de=null;const fe=async()=>{try{const ot=await fetch(H5(t,te),{credentials:"include"}),Xe=await ot.json().catch(()=>({}));if(ne||!ot.ok||n.sessionRef.current?.sessionId!==te||n.sessionGenerationRef.current!==ee)return;const Pe=Xe.state,xe=n.pendingSubmissionRef.current;if(xe){const Be=qW({clientRequestId:xe.clientRequestId,state:Pe}),ze=_s(n),Ye=ZW(ze,Be,Pe,{markIdle:()=>$(te,ee,n.assistantIdRef.current),onAutoAbort:wt=>{O(te,ee,wt)}});xs(n,ze);const pt=Bu(ze);if(C(Xh(ze)),pt==="stopping"&&(n.streamingRef.current=!1,v(!1),S(null)),Pe&&"deferredTurn"in Pe&&E(Pe.deferredTurn??null),Ye==="bound"&&pt!=="stopping"){P(re,xe.clientRequestId,"accepted"),v(!0);return}if(Ye==="released"){P(re,xe.clientRequestId,Be.action==="release-not-accepted"?"rejected":"accepted");return}if(!xe.acceptedTurnId&&!ze.pendingSubmission?.acceptedTurnId)return}const De=Pe?.activeTurn?.turnId??Pe?.activeTurnId??null;n.activeTurnIdRef.current=De;const _e=rd(Pe),Me=n.pendingSubmissionRef.current;if(Me){const Be=Pe?.latestTurn?.clientRequestId===Me.clientRequestId&&Yo(Pe?.latestTurn?.state),ze=Pe?.activeTurn?.clientRequestId===Me.clientRequestId&&Yo(Pe?.activeTurn?.state);if(Be||ze){P(re,Me.clientRequestId,"accepted");const Ye=ze?Pe?.activeTurn?.turnId??null:Pe?.latestTurn?.turnId??Me.acceptedTurnId??null,pt=_s(n);q5(pt,{clientRequestId:Me.clientRequestId,turnId:Ye,markIdle:!_e}),xs(n,pt),_e||$(te,ee,n.assistantIdRef.current);return}}if(_e)return;const me=n.assistantIdRef.current;if(De&&!(Yo(Pe?.activeTurn?.state)||Yo(Pe?.activeTurnState)))return;De&&n.settledTurnIdsRef.current.add(De);const Te=Me?.clientRequestId;if(Te){const Be=_s(n);q5(Be,{clientRequestId:Te,turnId:De,markIdle:!0}),xs(n,Be)}else I();$(te,ee,me)}catch{}},Re=()=>de||(de=fe().finally(()=>{de=null}),de),qe=()=>{document.visibilityState==="visible"&&Re()},ye=()=>{Re()},Ue=window.setInterval(()=>{Re()},15e3);let tt,Ae=0;const Ve=()=>{if(ne||Ae>=W5.length||!n.stopRequestedRef.current&&!n.stoppingTurnIdRef.current)return;const ot=W5[Ae];Ae+=1,ot!==void 0&&(tt=window.setTimeout(()=>{Re().finally(Ve)},ot))};return document.addEventListener("visibilitychange",qe),window.addEventListener("online",ye),Re().finally(Ve),()=>{ne=!0,window.clearInterval(Ue),tt!==void 0&&window.clearTimeout(tt),document.removeEventListener("visibilitychange",qe),window.removeEventListener("online",ye)}},[t,n,r,w,P,C,$,I,O]),_.useEffect(()=>{if(!r)return;const Y=n.sessionGenerationRef.current;return j(r.sessionId,Y),()=>{const te=n.eventsStreamStateRef.current;te?.sessionId===r.sessionId&&te.generation===Y&&(n.reconnectAbortRef.current?.abort(),n.reconnectAbortRef.current=null,n.eventsStreamStateRef.current=null)}},[r,f,n,j]),{sendPrompt:M,handleStop:ce,cancelDeferredTurn:oe,discardDeferredTurn:K,editDeferredTurn:Q,steerDeferredTurn:G,openEventsStream:X}}function iV(e){const{origin:t,refs:n,thread:r,setError:i}=e,{interview:a,setInterview:l}=r,[u,h]=_.useState(""),f=_.useCallback(async()=>{const y=n.sessionRef.current;if(!y)return;const v=window.prompt("Task ID(例如 2026-07-26-my-task)")?.trim();if(!v)return;const S=await fetch(`${t}/api/operator/v1/chat/sessions/${y.sessionId}/interviews`,{method:"POST",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",body:JSON.stringify({taskId:v})}),w=await S.json();if(!S.ok){i(w.error?.message??`HTTP ${S.status}`);return}l({interviewSessionId:w.interview?.sessionId,taskId:v,state:w.interview?.state,question:w.question,draft:w.draft?.draft,draftSha256:w.draft?.draftSha256,assessment:w.assessment})},[t,n,l,i]),p=_.useCallback(async y=>{const v=n.sessionRef.current;if(!v||!a?.interviewSessionId||!a.question)return;const S=await fetch(`${t}/api/operator/v1/chat/sessions/${v.sessionId}/interviews/${a.interviewSessionId}/answers`,{method:"POST",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",body:JSON.stringify({questionId:a.question.id,response:y,...y==="override"?{text:u}:{}})}),w=await S.json();if(!S.ok){i(w.error?.message??`HTTP ${S.status}`);return}l(C=>({...C??{},state:w.interview?.state,question:w.question,draft:w.draft?.draft,draftSha256:w.draft?.draftSha256,assessment:w.assessment,taskKindRecommendation:w.taskKindRecommendation??C?.taskKindRecommendation})),h("")},[t,n,a,u,l,i]),g=_.useCallback(async()=>{const y=n.sessionRef.current;if(!y||!a?.interviewSessionId||!a.taskKindRecommendation)return;const v=await fetch(`${t}/api/operator/v1/chat/sessions/${y.sessionId}/interviews/${a.interviewSessionId}/task-kind/confirm`,{method:"POST",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},credentials:"include",body:JSON.stringify({taskKind:a.taskKindRecommendation})}),S=await v.json();if(!v.ok){i(S.error?.message??`HTTP ${v.status}`);return}l(w=>({...w??{},confirmedTaskKind:w?.taskKindRecommendation,taskKindRecommendation:void 0,draft:S.draft?.draft,draftSha256:S.draft?.draftSha256,assessment:S.assessment}))},[t,n,a,l,i]);return{interviewAnswer:u,setInterviewAnswer:h,startInterview:f,answerInterview:p,confirmTaskKind:g}}const sV="/api/operator/v1/chat/repo/html/";function aV(e,t,n){const r=t?.trim(),i=n.replaceAll("\\","/").split("/").filter(Boolean);return!r||i.length===0?void 0:`${e.endsWith("/")?e.slice(0,-1):e}${sV}${encodeURIComponent(r)}/${i.map(encodeURIComponent).join("/")}`}function V5(e,t,n){const r=e.language.trim().toLowerCase();if(r!=="html"&&r!=="htm")return e;const i=aV(t,n,e.path);return i?{...e,htmlPreviewUrl:i}:e}function oV(e){const{origin:t,refs:n,sessionId:r,workspaceId:i,blocked:a,setError:l}=e,[u,h]=_.useState({}),[f,p]=_.useState(new Set),[g,y]=_.useState(null),[v,S]=_.useState([]),[w,C]=_.useState(null),[E,A]=_.useState(!1),D=_.useRef(i??null);D.current=i??null;const P=_.useRef(new Set),H=_.useRef(new Set);H.current=f;const T=i?`&workspaceId=${encodeURIComponent(i)}`:"",I=_.useCallback(async(F="")=>{if(a)return;const O=i??null;try{y(null);const B=await fetch(`${t}/api/operator/v1/chat/repo/tree?path=${encodeURIComponent(F)}${T}`,{credentials:"include"}),L=await B.json();if(D.current!==O)return;if(!B.ok)throw new Error(L.error?.message??"无法读取仓库目录");h(V=>({...V,[F]:L.data?.entries??[]}))}catch(B){if(D.current!==O)return;y(B instanceof Error?B.message:String(B))}},[t,T,i,a]);_.useEffect(()=>{I()},[I]);const[$,X]=_.useState(0),j=_.useCallback(()=>{X(F=>F+1)},[]);_.useEffect(()=>{const F=["",...H.current];for(const O of F)I(O)},[I,$]),_.useEffect(()=>{const F=()=>{document.hidden||j()};return document.addEventListener("visibilitychange",F),()=>document.removeEventListener("visibilitychange",F)},[j]);const U=_.useCallback(async F=>{if(a)return;const O=i??null;A(!0);try{const B=await fetch(`${t}/api/operator/v1/chat/repo/file?path=${encodeURIComponent(F)}${T}`,{credentials:"include"}),L=await B.json();if(D.current!==O)return;if(!B.ok||!L.data)throw new Error(L.error?.message??"无法预览文件");const V=V5(L.data,t,i);S(oe=>{const K=[...oe.filter(G=>G.path!==V.path),V],Q=n.sessionRef.current?.sessionId;return Q&&window.localStorage.setItem(`${ca}.previews.${Q}`,JSON.stringify(K.map(G=>G.path))),K}),C(V.path)}catch(B){if(D.current!==O)return;l(B instanceof Error?B.message:String(B))}finally{D.current===O&&A(!1)}},[t,T,i,n,l,a]);_.useEffect(()=>{h({}),p(new Set),y(null),S([]),C(null),A(!1)},[i]),_.useEffect(()=>{if(a||w||v.length>0)return;const F=i??"__default__";if(P.current.has(F))return;const O=(u[""]??[]).filter(L=>L.kind==="file");if(O.length===0)return;const B=O.find(L=>/^readme(?:\.[^.]+)?$/i.test(L.name))??O[0];B&&(P.current.add(F),U(B.path))},[w,a,U,v.length,u,i]),_.useEffect(()=>{if(!r)return;let F=[];try{const O=JSON.parse(window.localStorage.getItem(`${ca}.previews.${r}`)??"[]");Array.isArray(O)&&(F=O.filter(B=>typeof B=="string").slice(0,10))}catch{}F.length&&Promise.all(F.map(async O=>{const B=await fetch(`${t}/api/operator/v1/chat/repo/file?path=${encodeURIComponent(O)}${T}`,{credentials:"include"});if(!B.ok)return;const L=(await B.json()).data;return L?V5(L,t,i):void 0})).then(O=>{if(n.sessionRef.current?.sessionId!==r)return;const B=O.filter(L=>!!L);S(B),C(B.at(-1)?.path??null)})},[t,T,r,n]);const z=_.useCallback(F=>{p(O=>{const B=new Set(O);return B.has(F)?B.delete(F):B.add(F),B}),u[F]||I(F)},[u,I]),W=_.useCallback(F=>{S(O=>{const B=O.filter(L=>L.path!==F);return r&&window.localStorage.setItem(`${ca}.previews.${r}`,JSON.stringify(B.map(L=>L.path))),B}),C(O=>O===F?v.find(B=>B.path!==F)?.path??null:O)},[v,r]);return{tree:u,expandedDirs:f,treeError:g,previews:v,activePreviewPath:w,setActivePreviewPath:C,previewLoading:E,setPreviews:S,loadTree:I,refreshTree:j,openPreview:U,closePreview:W,toggleDir:z}}const L1={status:"ok"};function B1(e){return e.status!=="ok"}const K5=[{toolId:"read",kind:"explore",description:"Pi 内置读取文件。"},{toolId:"write",kind:"explore",description:"Pi 内置写入文件(软约束:大改优先走 DAG)。"},{toolId:"edit",kind:"explore",description:"Pi 内置编辑文件(软约束:大改优先走 DAG)。"},{toolId:"bash",kind:"explore",description:"Pi 内置 shell 执行(软约束:优先受治路径)。"},{toolId:"grep",kind:"explore",description:"Pi 内置内容搜索。"},{toolId:"find",kind:"explore",description:"按名称查找文件路径。"},{toolId:"ls",kind:"explore",description:"列出目录内容。"},{toolId:"safe-read",kind:"explore",description:"安全读取仓库相对路径文件;拒绝敏感文件并自动脱敏 secret。"},{toolId:"safe-grep",kind:"explore",description:"安全搜索仓库内容;跳过敏感文件并自动脱敏搜索结果。"},{toolId:"git-status",kind:"explore",description:"固定参数执行 git status --porcelain(无 shell)。"},{toolId:"git-diff",kind:"explore",description:"固定参数查看 git diff;敏感路径不可查看且结果自动脱敏。"}],lV={toolId:"Agent",kind:"explore",description:"启动内置只读 Explore 子 Agent,执行代码库搜索、符号查找和调用链追踪。"};function cV(e){if(!e)return null;const t=new Map;for(const l of[...e.tools??[],...e.builtinCustomTools??[]])t.has(l.toolId)||t.set(l.toolId,{toolId:l.toolId,action:l.action,description:l.description,kind:l.kind??"read",cli:l.cli});const n=[...t.values()],r=(e.builtinSubagents??[]).map(l=>({toolId:l.toolId,description:l.description,kind:"explore"})),a=[...r.length>0?K5:[...K5,lV],...r];return{explore:a,operator:n,total:a.length+n.length}}let uV=0;function dV(e){const{origin:t,session:n,setSession:r,refs:i,setError:a,onUnrecoverableSession:l}=e,[u,h]=_.useState(null),[f,p]=_.useState([]),[g,y]=_.useState("idle"),[v,S]=_.useState(null),[w,C]=_.useState([]),[E,A]=_.useState(null),[D,P]=_.useState(null),[H,T]=_.useState(!1),[I,$]=_.useState(!1),[X,j]=_.useState(!1),[U,z]=_.useState(!1),W=_.useRef(null),F=_.useRef(null),O=_.useRef(0);_.useEffect(()=>{O.current=-1,$(!1)},[n?.sessionId,$]);const L=ad().snapshot,V=_.useCallback(async()=>{try{const ne=n?.workspaceId??e.workspaceId??void 0,de=ne?`?workspaceId=${encodeURIComponent(ne)}`:"",fe=await fetch(`${t}/api/operator/v1/chat/capabilities${de}`);if(!fe.ok)return;const Re=await fe.json();h(Re)}catch{}},[t,n?.workspaceId,e.workspaceId]);_.useEffect(()=>{V()},[V]);const oe=_.useCallback(async()=>{if(!n){p([]),y("idle");return}const ne=n.sessionId;y("loading"),S(null);try{const de=await fetch(`${t}/api/operator/v1/chat/sessions/${encodeURIComponent(ne)}/models`,{credentials:"include"}),fe=await de.json().catch(()=>null);if(i.sessionRef.current?.sessionId!==ne)return;if(!de.ok||!fe){const Re=fe?.error;if(Tf({status:de.status,code:Re?.code,message:Re?.message})){y("idle"),S(null),l?.(ne);return}y("error"),S(Re?.message??`模型列表读取失败(HTTP ${de.status})`);return}p(fe.models??[]),C(fe.thinkingLevels??[]),y("ready")}catch(de){if(i.sessionRef.current?.sessionId!==ne)return;y("error"),S(de instanceof Error?de.message:String(de))}},[t,n,i,l]);_.useEffect(()=>{oe()},[oe]),_.useEffect(()=>{if(!n){A(null),P(null),T(!1);return}const ne=n.sessionId,de=`${t}/api/operator/v1/chat/sessions/${encodeURIComponent(ne)}`;P(null),A(fe=>fe),T(!0),fetch(`${de}/runtime-context`,{credentials:"include"}).then(async fe=>{const Re=await fe.json().catch(()=>null);if(i.sessionRef.current?.sessionId!==ne)return;if(!Re?.context){if(!fe.ok&&Tf({status:fe.status,code:Re?.error?.code,message:Re?.error?.message})){T(!1),l?.(ne);return}fe.ok||P("注入上下文读取失败,请重试");return}const qe=Re.context,ye=dI().snapshot;A(Ue=>iI(Ue,qe,ye,ne))}).finally(()=>{i.sessionRef.current?.sessionId===ne&&T(!1)}).catch(()=>{i.sessionRef.current?.sessionId===ne&&P("注入上下文读取失败,请重试")})},[t,n?.sessionId,i,l]),_.useEffect(()=>{if(!L||!n||L.sessionId!==n.sessionId)return;const ne=$6(L);r(de=>{if(!de||de.sessionId!==L.sessionId||_q(de,ne))return de;const fe=I8(de,ne);return i.sessionRef.current=fe,fe}),A(de=>{if(!de)return de;const fe={...de,...ne.model?{model:ne.model}:{},...ne.thinkingLevel?{thinkingLevel:ne.thinkingLevel}:{}};return fe.model?.provider===de.model?.provider&&fe.model?.modelId===de.model?.modelId&&fe.thinkingLevel===de.thinkingLevel?de:fe})},[L,n?.sessionId,i,r,A]);const K=_.useCallback(async ne=>{if(!n)return!1;const de=n.sessionId,fe=++uV;O.current=fe,G6({type:"mutation-start",token:fe}),$(!0);try{const Re=await fetch(`${t}/api/operator/v1/chat/sessions/${encodeURIComponent(n.sessionId)}/model`,{method:"POST",credentials:"include",headers:{"content-type":"application/json","x-loop-console-confirmation":gn()},body:JSON.stringify(ne)}),qe=await Re.json().catch(()=>({}));return O.current!==fe?!1:Re.ok?!qe.session||i.sessionRef.current?.sessionId!==de?!1:cI(fe,de,qe.snapshot):(i.sessionRef.current?.sessionId===de&&(a(qe.error?.message??`模型或思考等级切换失败(HTTP ${Re.status})`),Y1()),!1)}catch(Re){return O.current!==fe||i.sessionRef.current?.sessionId===de&&a(Re instanceof Error?Re.message:String(Re)),!1}finally{uI(fe,de,i)&&O.current===fe&&$(!1)}},[t,n,i,r,a]);_.useEffect(()=>{if(!X)return;const ne=fe=>{const Re=W.current;Re&&fe.target instanceof Node&&!Re.contains(fe.target)&&j(!1)},de=fe=>{fe.key==="Escape"&&j(!1)};return document.addEventListener("mousedown",ne),document.addEventListener("keydown",de),()=>{document.removeEventListener("mousedown",ne),document.removeEventListener("keydown",de)}},[X]),_.useEffect(()=>{if(!U)return;const ne=fe=>{const Re=F.current;Re&&fe.target instanceof Node&&!Re.contains(fe.target)&&z(!1)},de=fe=>{fe.key==="Escape"&&z(!1)};return document.addEventListener("mousedown",ne),document.addEventListener("keydown",de),()=>{document.removeEventListener("mousedown",ne),document.removeEventListener("keydown",de)}},[U]);const Q=_.useMemo(()=>cV(u),[u]),G=L?(L.models??[]).map(ne=>({provider:ne.provider,id:ne.id,...ne.name?{name:ne.name}:{},...ne.hasCredentials!==void 0?{hasCredentials:ne.hasCredentials}:{}})):f,M=L?.thinkingLevels?.length?L.thinkingLevels.map(ne=>ne.value):w,ce=n?.model??E?.model,Y=ce?il(ce.provider,ce.modelId):"",te=L?.selection?.thinkingSelection??n?.thinkingLevel??"",re=L?.selection?.effectiveThinkingLevel??n?.thinkingLevel??void 0,ee=!Y||G.some(ne=>il(ne.provider,ne.id)===Y);return{capabilities:u,models:G,modelsStatus:g,modelsError:v,onRetryModels:()=>{oe()},thinkingLevels:M,runtimeContext:E,runtimeContextError:D,runtimeContextLoading:H,onRetryRuntimeContext:()=>{P(null),Y1()},toolsOpen:X,setToolsOpen:j,runtimeContextOpen:U,setRuntimeContextOpen:z,toolsMenuRef:W,runtimeContextMenuRef:F,switchRuntime:K,switching:I,toolCatalog:Q,activeModel:ce,activeModelRef:Y,activeThinkingLevel:te,effectiveThinkingLevel:re,activeModelListed:ee}}const Y5={comfortableMin:1200,compactMin:720};function hV(e){return!Number.isFinite(e)||e<0?"narrow":e>=Y5.comfortableMin?"comfortable":e>=Y5.compactMin?"compact":"narrow"}const fV={mode:"comfortable",width:1600,landingDensity:"comfortable",emptyHeight:720};function mV(e,t){const[n,r]=_.useState(fV);return _.useEffect(()=>{const i=e.current;if(!i||typeof ResizeObserver>"u")return;const a=()=>{const p=i.getBoundingClientRect().width,g=t?.current??null,y=g?g.getBoundingClientRect().height:720;r({mode:hV(p),width:p,landingDensity:CH(y),emptyHeight:y})};a();const l=new ResizeObserver(()=>a());l.observe(i);let u=null;const h=()=>{const p=t?.current??null;p&&p!==u&&(u&&l.unobserve(u),l.observe(p),u=p,a())};h();const f=window.setInterval(h,250);return()=>{window.clearInterval(f),l.disconnect()}},[e,t]),n}const _b="loop-console.operator-shell.active-workspace.v1";function pV(e){try{return e?.getItem(_b)?.trim()||null}catch{return null}}function Zh(e,t){try{e?t?.setItem(_b,e):t?.removeItem(_b)}catch{}}function gV(e,t){return t?e.some(n=>n.workspaceId===t)?{status:"ok",workspaceId:t}:{status:"ok",workspaceId:e[0]?.workspaceId??null}:{status:"ok",workspaceId:e[0]?.workspaceId??null}}function vV(e,t,n){return e===409||t==="DUPLICATE"?n||"该目录(或等价路径)已存在为 Workspace:请直接选择既有条目,或更换其他真实目录。":e===400||t==="INVALID_PATH"?n||"目录不可用:请确认输入的是存在的真实目录绝对路径。":sc(t)?ac(t):n||`添加 Workspace 失败(HTTP ${e})`}function bV(e={}){const t=e.origin??"",n=e.fetchFn??fetch,r=e.storage,i=e.confirmationTokenFn??gn,a=new Set;let l=0,u=!1,h=null,f,p=!1,g={workspaces:[],loading:!0,error:null,workspaceId:pV(r),unknownWorkspaceId:null};const y=()=>{for(const I of a)I()},v=I=>{g={...g,...I},y()},S=()=>(u=!0,h||(h=(async()=>{for(;u&&!p;){u=!1;try{const I=await n(`${t}/api/operator/v1/workspaces`,{credentials:"include"});if(!I.ok)continue;const $=await I.json(),X=Number.isSafeInteger($.revision)?Math.max(0,$.revision??0):void 0;if(X!==void 0&&X<l)continue;X!==void 0&&(l=X);const j=$.workspaces??[],U=gV(j,g.workspaceId);if(U.status==="unknown-workspace"){v({workspaces:j,unknownWorkspaceId:U.workspaceId});continue}const z=U.workspaceId,W=g.workspaceId;v({workspaces:j,unknownWorkspaceId:null,...z!==W?{workspaceId:z}:{}}),z!==W&&Zh(z,r)}catch{}finally{g.loading&&v({loading:!1})}}})().finally(()=>{h=null,u&&!p&&S()}),h)),w=I=>{try{const $=Number(JSON.parse(I.data).revision);Number.isSafeInteger($)&&$>l&&S()}catch{}},C=()=>{if(f||p)return;const I=e.eventSourceFactory??(typeof EventSource<"u"?$=>new EventSource($,{withCredentials:!0}):void 0);I&&(f=I(`${t}/api/operator/v1/workspaces/events`),f.addEventListener("workspace_registry_ready",w),f.addEventListener("workspace_registry_changed",w))},E=async(I,$)=>{v({error:null});try{const X=await n(`${t}/api/operator/v1/workspaces`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","x-loop-console-confirmation":i()},body:JSON.stringify({directoryPath:I,...$?{name:$}:{}})}),j=await X.json().catch(()=>({}));if(!X.ok||!j.workspace){const U=vV(X.status,j.error?.code,j.error?.message);return v({error:U}),{ok:!1,error:U}}return await S(),v({workspaceId:j.workspace.workspaceId}),Zh(j.workspace.workspaceId,r),{ok:!0,workspaceId:j.workspace.workspaceId}}catch(X){const U=`添加 Workspace 失败:${X instanceof Error?X.message:String(X)}`;return v({error:U}),{ok:!1,error:U}}},A=async()=>{v({error:null});try{const I=await n(`${t}/api/operator/v1/workspaces/pick`,{method:"POST",credentials:"include",headers:{"x-loop-console-confirmation":i()}}),$=await I.json().catch(()=>({}));if(!I.ok){const X=sc($.error?.code)?ac($.error?.code??""):$.error?.message??`打开目录选择窗口失败(HTTP ${I.status})`;return v({error:X}),null}return typeof $.directoryPath=="string"&&$.directoryPath.trim()?$.directoryPath:null}catch(I){const $=I instanceof Error?I.message:String(I);return v({error:`打开目录选择窗口失败:${$}`}),null}},D=async I=>{v({error:null});try{const $=await n(`${t}/api/operator/v1/workspaces/${encodeURIComponent(I)}`,{method:"DELETE",credentials:"include",headers:{"x-loop-console-confirmation":i()}}),X=await $.json().catch(()=>({}));if(!$.ok){const j=$.status===404?"Workspace 已不存在(可能已被移除),列表将刷新。":sc(X.error?.code)?ac(X.error?.code??""):X.error?.message??`移除 Workspace 失败(HTTP ${$.status})`;return v({error:j}),await S(),{ok:!1,error:j}}if(await S(),g.workspaceId===I){const j=g.workspaces[0]?.workspaceId??null;v({workspaceId:j}),Zh(j,r)}return{ok:!0}}catch($){const j=`移除 Workspace 失败:${$ instanceof Error?$.message:String($)}`;return v({error:j}),{ok:!1,error:j}}},P=async(I,$)=>{const X=g.workspaces,j=X.find(F=>F.workspaceId===I),U=$?X.find(F=>F.workspaceId===$):void 0;if(!j||$&&!U)return{ok:!1,error:"工作区顺序已变化,请稍后重试。"};const z=X.filter(F=>F.workspaceId!==I),W=$?z.findIndex(F=>F.workspaceId===$):z.length;if(z.splice(W,0,j),z.every((F,O)=>F.workspaceId===X[O]?.workspaceId))return{ok:!0};v({workspaces:z,error:null});try{const F=await n(`${t}/api/operator/v1/workspaces/${encodeURIComponent(I)}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json","x-loop-console-confirmation":i()},body:JSON.stringify({beforeWorkspaceId:$})}),O=await F.json().catch(()=>({}));if(!F.ok){const B=sc(O.error?.code)?ac(O.error?.code??""):O.error?.message??`调整 Workspace 顺序失败(HTTP ${F.status})`;return v({workspaces:X,error:B}),S(),{ok:!1,error:B}}return{ok:!0}}catch(F){const O=`调整 Workspace 顺序失败:${F instanceof Error?F.message:String(F)}`;return v({workspaces:X,error:O}),S(),{ok:!1,error:O}}},H=I=>{I===g.workspaceId&&!g.unknownWorkspaceId||(v({workspaceId:I,unknownWorkspaceId:null}),Zh(I,r))},T=()=>{p||(p=!0,f?.close(),f=void 0,a.clear())};return S(),{get workspaces(){return g.workspaces},get loading(){return g.loading},get error(){return g.error},get workspaceId(){return g.workspaceId},get unknownWorkspaceId(){return g.unknownWorkspaceId},refresh:S,pickWorkspaceDirectory:A,addWorkspace:E,removeWorkspace:D,reorderWorkspace:P,selectWorkspace:H,dispose:T,subscribe(I){return a.add(I),C(),()=>{a.delete(I),a.size===0&&(f?.close(),f=void 0)}}}}function yV(e){const t=_.useRef(null);t.current||(t.current=bV(e));const n=t.current,[r,i]=_.useState(()=>({workspaces:n.workspaces,loading:n.loading,error:n.error,workspaceId:n.workspaceId,unknownWorkspaceId:n.unknownWorkspaceId}));return _.useEffect(()=>n.subscribe(()=>{i({workspaces:n.workspaces,loading:n.loading,error:n.error,workspaceId:n.workspaceId,unknownWorkspaceId:n.unknownWorkspaceId})}),[n]),_.useMemo(()=>({get workspaces(){return r.workspaces},get loading(){return r.loading},get error(){return r.error},get workspaceId(){return r.workspaceId},get unknownWorkspaceId(){return r.unknownWorkspaceId},refresh:n.refresh,pickWorkspaceDirectory:n.pickWorkspaceDirectory,addWorkspace:n.addWorkspace,removeWorkspace:n.removeWorkspace,reorderWorkspace:n.reorderWorkspace,selectWorkspace:n.selectWorkspace,dispose:n.dispose}),[r,n])}function _V(e="none"){return{active:e}}function Ru(e,t){return{active:t}}function Xi(e={active:"none"}){return{active:"none"}}function xV(e){return{sidebarDrawerOpen:e.active==="sidebar-drawer",processOpen:e.active==="process",runtimeContextOpen:e.active==="runtime-context",toolsOpen:e.active==="tools"}}const SV=264,wV=420,zu=280,NC=360,Go=160,AC=480,kV=240,CV=120,X5="loop-agent:operator-chat:details-width:v1",z1="loop-agent:operator-chat:details-tree-width:v1";function ws(e,t,n){return Math.min(n,Math.max(t,Math.round(e)))}function Qh(){return typeof window>"u"?NC:Math.max(zu,window.innerWidth)}function Iu(e){return Math.min(AC,Math.max(Go,Math.round(e-CV)))}function Z5(e,t,n,r){if(typeof window>"u")return t;try{const i=Number(window.localStorage.getItem(e));return Number.isFinite(i)&&i>0?ws(i,n,r):t}catch{return t}}function P1(e,t){try{window.localStorage.setItem(e,String(Math.round(t)))}catch{}}function Jh(e){const t=_.useRef(0),n=_.useRef(0),r=_.useRef(0),i=_.useRef(null),a=_.useRef(!1),l=_.useRef(null),u=_.useRef(e);u.current=e;const h=_.useCallback(()=>{i.current=null;const p=u.current,g=r.current-t.current,y=n.current+(p.side==="sidebar"?g:-g);return p.onResize(y),y},[]),f=_.useCallback((p,g,y)=>{if(!a.current)return;typeof y=="number"&&(r.current=y),a.current=!1,p&&g!==void 0&&p.hasPointerCapture(g)&&p.releasePointerCapture(g),i.current!==null&&(cancelAnimationFrame(i.current),i.current=null);const v=h(),S=p??l.current;S&&delete S.dataset.dragging,u.current.onResizeEnd?.(v),u.current.onDragChange(!1)},[h]);return _.useEffect(()=>{const p=v=>{a.current&&(r.current=v.clientX,i.current??=requestAnimationFrame(h))},g=v=>f(void 0,void 0,v.clientX),y=()=>f();return window.addEventListener("pointermove",p),window.addEventListener("pointerup",g),window.addEventListener("pointercancel",y),()=>{if(window.removeEventListener("pointermove",p),window.removeEventListener("pointerup",g),window.removeEventListener("pointercancel",y),i.current!==null&&(cancelAnimationFrame(i.current),i.current=null),a.current){a.current=!1;const v=l.current;v&&delete v.dataset.dragging,u.current.onDragChange(!1)}}},[f,h]),c.jsx("div",{ref:l,className:"oc-column-resize-handle","data-side":e.side,role:"separator","aria-orientation":"vertical","aria-label":e.side==="sidebar"?"调整左侧栏宽度":e.side==="details-tree"?"调整文件树宽度":"调整右侧栏宽度",onPointerDown:p=>{p.preventDefault(),p.currentTarget.setPointerCapture(p.pointerId),p.currentTarget.dataset.dragging="true",a.current=!0,t.current=p.clientX,r.current=p.clientX,n.current=u.current.value,u.current.onDragChange(!0)},onPointerMove:p=>{p.currentTarget.hasPointerCapture(p.pointerId)&&(r.current=p.clientX,i.current??=requestAnimationFrame(h))},onPointerUp:p=>f(p.currentTarget,p.pointerId,p.clientX),onPointerCancel:p=>f(p.currentTarget,p.pointerId),onLostPointerCapture:p=>f(p.currentTarget)})}function EV(e){const{origin:t,surface:n="standalone"}=e,r=n==="workspace",i=QG(),[a,l]=_.useState(null),[u,h]=_.useState(!1),[f,p]=_.useState(!1),[g,y]=_.useState(null),[v,S]=_.useState(!0),[w,C]=_.useState(!1),[E,A]=_.useState("files"),[D,P]=_.useState(null),[H,T]=_.useState(!1),[I,$]=_.useState(!1),[X,j]=_.useState(!1),[U,z]=_.useState(!1),[W,F]=_.useState(280),[O,B]=_.useState(()=>Z5(X5,NC,zu,Qh())),[L,V]=_.useState(()=>Z5(z1,kV,Go,AC)),[oe,K]=_.useState(!1);_.useEffect(()=>{let se=null;const Ie=()=>{se=null,B(Wt=>ws(Wt,zu,Qh()))},yt=()=>{se??=window.requestAnimationFrame(Ie)};return window.addEventListener("resize",yt),()=>{window.removeEventListener("resize",yt),se!==null&&window.cancelAnimationFrame(se)}},[]);const Q=_.useRef(!0),[G,M]=_.useState(!0),ce=_.useCallback(se=>{const Ie=typeof se=="function"?se(Q.current):se;Q.current=Ie,M(Ie)},[]),[Y,te]=_.useState(()=>_V()),[re,ee]=_.useState(null),[ne,de]=_.useState(null),[fe,Re]=_.useState(0),qe=_.useRef(null),ye=_.useRef(null),Ue=_.useRef(null),tt=_.useRef(null),Ae=_.useRef(null),Ve=_.useRef(null),ot=_.useRef(null),Xe=_.useRef(null),Pe=_.useMemo(()=>({setInput:se=>Xe.current?.setInput(se),setPendingImages:se=>Xe.current?.setPendingImages(se),recordHistory:se=>Xe.current?.recordHistory(se),claimSubmission:()=>Xe.current?.claimSubmission()??null,claimSessionSubmission:(se,Ie,yt=[])=>Xe.current?.claimSessionSubmission(se,Ie,yt)??null,seedSession:(se,Ie)=>Xe.current?.seedSession(se,Ie)??!1,replaceSessionDraft:(se,Ie,yt)=>Xe.current?.replaceSessionDraft(se,Ie,yt),releaseSession:se=>Xe.current?.releaseSession(se),settleSubmission:(se,Ie)=>Xe.current?.settleSubmission(se,Ie),settleSubmissionByRequest:(se,Ie,yt)=>Xe.current?.settleSubmissionByRequest(se,Ie,yt)}),[]),xe=mV(Ue,tt),De=xe.mode,_e=e.workspaceRegistry,Me=_.useMemo(()=>_e.workspaces.map(se=>se.workspaceId),[_e.workspaces]),[me,Te]=_.useState(null),Be=xV(Y),ze=Be.processOpen,Ye=Be.runtimeContextOpen,pt=w&&E==="activity";_.useEffect(()=>{C(!1),A("files"),T(!1),$(!1),j(!1),z(!1),te(se=>se.active==="process"||se.active==="runtime-context"?Xi(se):se)},[g?.sessionId,e.workspaceId]);const wt=_.useCallback(se=>{te(Ie=>{const yt=Ie.active==="process";return(typeof se=="function"?se(yt):se)?(A("calls"),$(!0),C(!0),Ru(Ie,"process")):(yt&&($(!1),A("files"),C(!1)),Ie.active==="process"?Xi(Ie):Ie)})},[]),Pt=_.useRef(()=>{}),Tt=_.useCallback(se=>{Pt.current(se)},[]),[_t,Mt]=_.useState(As),fn=g?.sessionMode??_t,dn=fn==="workflow",kt=Zo[fn],Ce=oV({origin:t,refs:i,sessionId:g?.sessionId,workspaceId:g?.workspaceId??e.workspaceId,blocked:B1(e.workspaceGate??L1),setError:l}),ct=_.useRef(()=>{}),at=_.useCallback(se=>{ct.current(se)},[]),ve=wW({origin:t,refs:i,sessionId:g?.sessionId,workspaceId:e.workspaceId??null,setError:l,onReconcile:at}),ie=_.useRef(null),Ee=_.useCallback(async()=>{await ve.loadEarlierMessages(()=>{const se=ye.current;se&&(ce(!1),ie.current={position:ZR(se),generation:i.sessionGenerationRef.current})})},[ve.loadEarlierMessages,i,ce]);_.useLayoutEffect(()=>{const se=ie.current;ie.current=null,se&&se.generation===i.sessionGenerationRef.current&&se.position.container===ye.current&&QR(se.position)},[ve.messages,i]);const Ge=_.useCallback(async(se,Ie)=>{const yt=i.sessionRef.current;if(!yt)return l("请先创建或打开一个会话"),!1;p(!0);try{const Wt=yt.workspaceId?`?workspaceId=${encodeURIComponent(yt.workspaceId)}`:"",Vr=await fetch(`${t}/api/operator/v1/chat/sessions/${encodeURIComponent(yt.sessionId)}/goal${Wt}`,{method:se,credentials:"include",headers:{"content-type":"application/json","x-loop-console-confirmation":gn()},body:JSON.stringify(Ie)}),zr=await Vr.json();if(!Vr.ok)throw zr.goal&&ve.setGoal(zr.goal),new Error(zr.error?.message??"目标更新失败");return ve.setGoal(zr.goal??null),l(null),!0}catch(Wt){return l(Wt instanceof Error?Wt.message:String(Wt)),!1}finally{p(!1)}},[t,i,ve.goal,ve.setGoal]),lt=_.useCallback(async se=>{const Ie=ve.goal?.phase==="complete"?null:ve.goal,yt=se.trim();return yt?Ie?Ge("PATCH",{goalId:Ie.goalId,revision:Ie.revision,action:"edit",objective:yt}):Ge("POST",{objective:yt}):!1},[ve.goal,Ge]);ct.current=se=>{const Ie=i.sessionRef.current?.sessionId;Ie&&(async()=>await ve.recoverSession(Ie)?(de({id:Date.now(),message:"已自动恢复:会话事件已重新同步,可继续对话。"}),Re(Wt=>Wt+1)):de({id:Date.now(),message:"自动恢复未完成,将在重连时重试。"}))()};const ut=ve.operationCards.length+ve.humanGateCards.length+ve.artifactCards.length,ge=_.useMemo(()=>wH(ve.operationCards),[ve.operationCards]),Oe=D??ge,je=_.useCallback(se=>kH(ve.operationCards,se),[ve.operationCards]),nt=_.useMemo(()=>{if(!Oe)return null;for(const se of ve.operationCards){if(se.dagRunId!==Oe||!se.runSummary)continue;const Ie=se.runSummary,yt=Ie.next&&Ie.nodes.every(Wt=>Wt.id!==Ie.next?.kind)?Ie.nodes.find(Wt=>!["succeeded","completed","passed"].includes(Wt.status))?.id:void 0;return{dagRunId:Oe,currentNodeId:yt,nodes:Ie.nodes,status:Ie.status}}return{dagRunId:Oe,nodes:[]}},[Oe,ve.operationCards]),Rt=_.useMemo(()=>w8(ve.operationCards).length+ve.humanGateCards.length+ve.artifactCards.length,[ve.operationCards,ve.humanGateCards.length,ve.artifactCards.length]),Ot=_.useMemo(()=>oH({operations:ve.operationCards,gates:ve.humanGateCards,artifacts:ve.artifactCards}),[ve.operationCards,ve.humanGateCards,ve.artifactCards]),Er=_.useCallback(se=>Ot.has(se),[Ot]);_.useEffect(()=>{De==="comfortable"&&Y.active==="sidebar-drawer"&&te(Ie=>Ie.active===Y.active?Xi(Ie):Ie)},[De,Y.active]),_.useEffect(()=>{ee(null),P(null)},[g?.sessionId]),_.useEffect(()=>{ut>0||!X||(j(!1),ee(null),A(se=>se==="activity"?"files":se))},[ut,X]);const si=_.useCallback(se=>{const Ie=ye.current;if(!Ie)return;const Wt=Array.from(Ie.querySelectorAll("[data-activity-ref]")).find(Vr=>se.includes(Vr.dataset.activityRef??""));if(!Wt){de({id:Date.now(),message:"详细运行记录暂时没有对应的对话位置。"});return}Wt.scrollIntoView({block:"center",behavior:"smooth"}),Wt.classList.add("is-located"),window.setTimeout(()=>Wt.classList.remove("is-located"),1400)},[]),Ct=DW({origin:t,refs:i,setSession:y,thread:ve,composer:{seedSession:Pe.seedSession,releaseSession:Pe.releaseSession},browser:{setPreviews:Ce.setPreviews,setActivePreviewPath:Ce.setActivePreviewPath},setError:l,setNotice:de,onCompactionChange:h,setProcessOpen:wt,setAutoScroll:ce,workspaceId:e.workspaceId??void 0,visibleWorkspaceIds:Me,blocked:B1(e.workspaceGate??L1)});Pt.current=Ct.forgetLostSession;const Tr=_.useRef(null);_.useEffect(()=>{const se=e.requestedSessionId?.trim();if(!se||B1(e.workspaceGate??L1)||g?.sessionId===se)return;const Ie=`${e.workspaceId??""}:${se}`;if(Tr.current===Ie)return;Tr.current=Ie;const yt=Ct.sessionList.find(Wt=>Wt.sessionId===se)?.workspaceId;Ct.activateSession(se,yt)},[e.requestedSessionId,e.workspaceGate,e.workspaceId,g?.sessionId,Ct.activateSession]);const hn=rV({origin:t,refs:i,session:g,thread:ve,composer:{settleSubmission:Pe.settleSubmission,settleSubmissionByRequest:Pe.settleSubmissionByRequest,replaceSessionDraft:Pe.replaceSessionDraft},setError:l,setNotice:de,setAutoScroll:ce,recoveryVersion:fe,watchSessionTitle:Ct.watchSessionTitle}),Rn=iV({origin:t,refs:i,thread:ve,setError:l}),Ut=dV({origin:t,session:g,setSession:y,refs:i,setError:l,workspaceId:e.workspaceId,onUnrecoverableSession:Tt});_.useEffect(()=>{if(ve.streaming){Ct.refreshSessionList();return}Ce.refreshTree();const se=window.setTimeout(()=>{Ct.refreshSessionList()},1200);return()=>window.clearTimeout(se)},[ve.streaming,ve.turnPhase,ve.deferredTurn?.revision,ve.deferredTurn?.state,Ct.refreshSessionList,Ce.refreshTree]),_.useEffect(()=>{Ut.runtimeContextOpen&&Y.active!=="runtime-context"?te(se=>Ru(se,"runtime-context")):!Ut.runtimeContextOpen&&Y.active==="runtime-context"&&te(se=>Xi(se))},[Ut.runtimeContextOpen,Y.active]),_.useEffect(()=>{Y.active!=="runtime-context"&&Ut.runtimeContextOpen&&Ut.setRuntimeContextOpen(!1)},[Y.active]),_.useEffect(()=>{ve.streaming&&Y.active==="process"&&te(Xi)},[ve.streaming,Y.active]);const{sendPrompt:ds,handleStop:dl,discardDeferredTurn:_a,editDeferredTurn:hl,steerDeferredTurn:Bs}=hn,zs=_.useRef(()=>{}),Rr=_.useCallback((se,Ie)=>zs.current(se,Ie),[]),ai=_.useCallback(async se=>{const Ie=se.draftSnapshot,yt=se.imageSnapshot,Wt=l3(Ie);if(Wt&&Wt.action!=="unknown"&&Wt.action!=="pi-prompt"){if(i.streamingRef.current){de({id:Date.now(),message:"当前回合进行中,命令请在回合结束后执行"}),Pe.settleSubmission(se,"rejected");return}Pe.settleSubmission(se,"accepted"),zs.current(Ie,yt);return}await ds(se)},[ds,i,Pe]),xi=_.useCallback(async(se,Ie=[])=>{const yt=i.sessionRef.current;if(!yt)return;const Wt=Pe.claimSessionSubmission(yt,se,Ie);Wt&&await ai(Wt)},[Pe,i,ai]),hs=_.useCallback(async(se,Ie=[])=>{!i.sessionRef.current&&(Ct.creatingSession||!await Ct.createSession({sessionMode:_t,..._e.workspaceId?{workspaceId:e.workspaceId??_e.workspaceId}:{}}))||await xi(se,Ie)},[xi,Ct,_t,i,e.workspaceId,_e.workspaceId]),In=_.useCallback(()=>{Xe.current?.textareaRef.current?.focus()},[]),oi=_.useCallback(()=>{te(se=>se.active==="sidebar-drawer"?Xi(se):se)},[]),hr=_.useCallback(se=>{if(A(se),C(!0),se==="context"){T(!0),Ut.setRuntimeContextOpen(!0),te(Ie=>Ru(Ie,"runtime-context"));return}if(se==="calls"){$(!0),Ut.setRuntimeContextOpen(!1),te(Ie=>Ru(Ie,"process"));return}Ut.setRuntimeContextOpen(!1),te(Ie=>Ie.active==="process"||Ie.active==="runtime-context"?Xi(Ie):Ie)},[Ut.setRuntimeContextOpen]),li=_.useCallback(()=>{z(!0),hr("goal")},[hr]),Ze=_.useCallback((se,Ie)=>{P(Ie),hr("dag")},[hr]),bt=_.useCallback(se=>{se==="context"?(T(!1),Ut.setRuntimeContextOpen(!1),te(Ie=>Ie.active==="runtime-context"?Xi(Ie):Ie)):se==="calls"?($(!1),te(Ie=>Ie.active==="process"?Xi(Ie):Ie)):se==="activity"?(j(!1),ee(null)):z(!1),E===se&&A("files")},[E,Ut.setRuntimeContextOpen]),Gt=_.useCallback(async se=>{const Ie=await lt(se);return Ie&&bt("goal"),Ie},[bt,lt]),en=_.useCallback(se=>{if(w&&E===se){C(!1),se==="context"&&Ut.setRuntimeContextOpen(!1),se==="calls"&&te(Ie=>Ie.active==="process"?Xi(Ie):Ie);return}hr(se)},[bt,w,E,hr]),Dn=_.useCallback(se=>{if(w&&E==="activity"&&(!se||se===re)){C(!1);return}ee(se??null),j(!0),hr("activity")},[re,w,E,hr]),tr=_.useCallback(()=>{Ut.setRuntimeContextOpen(!1),te(se=>Ru(se,"sidebar-drawer"))},[Ut.setRuntimeContextOpen]),Ir=_.useCallback((se,Ie)=>{const yt=e.workspaceId??_e.workspaceId;if(Ie&&Ie!==yt&&(e.onSwitchWorkspace?e.onSwitchWorkspace(Ie):_e.selectWorkspace(Ie),e.onNavigateWorkspace)){e.onNavigateWorkspace("chat",{workspaceId:Ie,sessionId:se});return}Ct.activateSession(se,Ie),e.onNavigateWorkspace?.("chat",{...Ie?{workspaceId:Ie}:{},sessionId:se})},[Ct,e.onNavigateWorkspace,e.onSwitchWorkspace,e.workspaceId,_e]),Br=_.useCallback((se,Ie)=>{Ir(se,Ie),oi(),queueMicrotask(()=>{ye.current?.focus?.(),In()})},[Ir,oi,In]),vn=_.useCallback(se=>{Pe.setInput(Ie=>`${Ie}${Ie&&!Ie.endsWith(" ")?" ":""}@${se} `),oi(),queueMicrotask(()=>In())},[Pe,oi,In]),Gr=_.useCallback(se=>{A("files"),C(!0),Ce.openPreview(se),oi()},[Ce,oi]),xa=_.useCallback(se=>{A("files"),C(!0),Ce.openPreview(se)},[Ce]),Sa=_.useCallback(()=>{const se=ye.current;se&&(ce(!0),se.scrollTop=se.scrollHeight)},[ce]),vo=_.useCallback(()=>{const se=ye.current;if(!se)return;const Ie=se.scrollHeight-se.scrollTop-se.clientHeight<=25;ce(Ie)},[ce]);_.useLayoutEffect(()=>{if(!Q.current)return;const se=ye.current;se&&(se.scrollTop=se.scrollHeight)},[ve.messages,ve.streaming]),_.useEffect(()=>{const se=qe.current?.parentElement;if(!se||typeof ResizeObserver>"u")return;const Ie=new ResizeObserver(()=>{if(!Q.current)return;const yt=ye.current;yt&&(yt.scrollTop=yt.scrollHeight)});return Ie.observe(se),()=>Ie.disconnect()},[g?.sessionId]),_.useEffect(()=>{if(!ne)return;const se=window.setTimeout(()=>de(null),6500);return()=>window.clearTimeout(se)},[ne]);const wa=a?{id:ne?.id??1,kind:"error",message:a}:ne?{id:ne.id,kind:"info",message:ne.message}:null,Ec=_.useCallback((se,Ie=[])=>{const yt=l3(se),Wt=se.trim(),Vr=Wt.split(/\s+/,1)[0]?.toLowerCase()??"";if(Pe.setInput(""),!yt)return;if(yt.action==="focus:interview"){if(!dn){de({id:Date.now(),message:"Pi 会话不支持需求访谈,请新建工作流会话"});return}if(!g){de({id:Date.now(),message:"请先创建或打开一个会话,再开始 Interview"});return}Rn.startInterview();return}const zr=GP(yt.action);if(zr){e.onNavigateWorkspace?.(zr,{});return}if(yt.action==="compact"){const Yn=Wt.slice(Vr.length).trim();Ct.compactSession(Yn||void 0);return}if(yt.action==="goal"){const Yn=Wt.slice(Vr.length).trim();Yn?lt(Yn):li();return}if(yt.action==="name"){const Yn=Wt.slice(Vr.length).trim(),Nr=g?.sessionId;if(!Nr){l("当前没有可重命名的会话");return}const Hi=Ct.sessionList.find(Hs=>Hs.sessionId===Nr),Ar=Yn||window.prompt("会话名称",Hi?.title??Hi?.displayTitle??"")||"";Ar.trim()&&Ct.updateSession(Nr,{title:Ar.trim()});return}if(yt.action==="session"){const Yn=g?.sessionId??"(none)",Nr=Ct.sessionList.find(Ar=>Ar.sessionId===Yn),Hi=Nr?.title||Nr?.displayTitle||"未命名对话";de({id:Date.now(),message:`当前会话:${Hi}(${Yn})`});return}if(yt.action==="copy"){const Nr=[...ve.visibleMessages??[]].reverse().find(Hi=>Hi.role==="assistant");if(!Nr?.text){l("没有可复制的助手消息");return}navigator.clipboard?.writeText(Nr.text).then(()=>de({id:Date.now(),message:"已复制最后一条助手消息"}),()=>l("复制失败"));return}if(yt.action==="sdd-bingo"){const Yn=g?.sessionId;if(!Yn){l("当前没有可上报的会话");return}const Nr=Wt.slice(Vr.length).trim();fetch(`${e.origin}/api/operator/v1/chat/sessions/${encodeURIComponent(Yn)}/sdd-bingo`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},body:JSON.stringify(Nr?{skillName:Nr}:{})}).then(async Hi=>{const Ar=await Hi.json().catch(()=>null);if(!Hi.ok){l(Ar?.error?.message||"SDD 数据对齐上报失败");return}const Hs=typeof Ar?.skillName=="string"&&Ar.skillName.trim()?Ar.skillName.trim():void 0,yo=typeof Ar?.telemetrySessionId=="string"&&Ar.telemetrySessionId.trim()?Ar.telemetrySessionId.trim():void 0;yo&&ve.setSddSessionIdentity({telemetrySessionId:yo}),de({id:Date.now(),message:Hs&&yo?`SDD数据对齐上报成功:${Hs} · Session: ${yo}`:"SDD数据对齐上报成功"})},()=>l("SDD 数据对齐上报失败"));return}if(yt.action==="unknown"){Pe.setInput(Wt),Pe.setPendingImages(Ie);const Yn=Pe.claimSubmission();Yn&&ds(Yn);return}l(`未知 shortcut:${yt.command}`)},[Pe,Rn.startInterview,dn,e.onNavigateWorkspace,e.origin,Ct,g,ve.visibleMessages,ds,li,lt]);zs.current=Ec;const En=ve.visibleMessages.length>0||ve.operationCards.length>0||ve.humanGateCards.length>0||ve.artifactCards.length>0||!!ve.interview,bo=_.useMemo(()=>ve.deferredTurns.filter(se=>se.state==="dispatching"),[ve.deferredTurns]),Ps=_.useCallback(se=>{Rn.answerInterview(se)},[Rn.answerInterview]),ka=_.useCallback(()=>{Rn.confirmTaskKind()},[Rn.confirmTaskKind]),fr=_.useCallback(se=>{xi(se)},[xi]),fl=_.useCallback(se=>{ai(se)},[ai]),Ca=_.useCallback(se=>{Ut.switchRuntime(se)},[Ut.switchRuntime]),It=_.useCallback(()=>{Ct.compactSession()},[Ct.compactSession]),ml=_.useCallback(()=>en("calls"),[en]),Fn=_.useCallback(()=>en("context"),[en]);_.useEffect(()=>{g?.sessionMode&&Mt(g.sessionMode)},[g?.sessionId,g?.sessionMode]);const on=_.useCallback(se=>{const Ie=e.workspaceId??_e.workspaceId;se!==Ie&&(e.onSwitchWorkspace?e.onSwitchWorkspace(se):_e.selectWorkspace(se)),!(!g||En)&&Ct.createSession({workspaceId:se,sessionMode:g.sessionMode??_t})},[En,_t,e.onSwitchWorkspace,e.workspaceId,g,Ct,_e]),fs=_.useCallback(se=>{if(!g||En){Mt(se);return}(g.sessionMode??_t)!==se&&Ct.createSession({workspaceId:g.workspaceId,sessionMode:se}).then(Ie=>{Ie&&Mt(se)})},[En,_t,g,Ct]),Pi=e.onNavigateWorkspace?()=>e.onNavigateWorkspace?.("models",{}):void 0,Ea=c.jsx(AI,{origin:t,readiness:e.readiness,runAction:e.runAction,operatorBusy:e.operatorBusy,workspaces:_e.workspaces,workspacesLoading:_e.loading,workspacesError:_e.error,activeWorkspaceId:e.workspaceId??_e.workspaceId,removingWorkspaceId:me,onPickWorkspaceDirectory:_e.pickWorkspaceDirectory,onAddWorkspace:se=>_e.addWorkspace(se),onRemoveWorkspace:async se=>{const yt=(e.workspaceId??_e.workspaceId)===se;Te(se);try{(await _e.removeWorkspace(se)).ok&&yt&&e.onNavigateWorkspace?.("chat",{workspaceId:_e.workspaceId??void 0,sessionId:void 0})}finally{Te(null)}},onReorderWorkspace:(se,Ie)=>_e.reorderWorkspace(se,Ie),onDismissWorkspaceError:()=>{_e.refresh()},open:v,layoutMode:De,drawerOpen:Be.sidebarDrawerOpen,activeSessionId:Ct.selectedSession?.sessionId,activeSessionStreaming:ve.streaming,activeSessionTurnPhase:ve.turnPhase,sessions:Ct.sessionList,tree:Ce.tree,expanded:Ce.expandedDirs,treeError:Ce.treeError,onToggleOpen:()=>S(se=>!se),onOpenDrawer:tr,onCloseDrawer:oi,onCreate:se=>{Ct.createSession({sessionMode:se??g?.sessionMode??_t})},onCreateInWorkspace:(se,Ie)=>{Ct.createSession({...se===(e.workspaceId??_e.workspaceId)?{}:{workspaceId:se},sessionMode:Ie??g?.sessionMode??_t})},creatingSession:Ct.creatingSession,onActivate:(se,Ie)=>{Be.sidebarDrawerOpen?Br(se,Ie):Ir(se,Ie)},onRename:(se,Ie)=>{Ct.updateSession(se,{title:Ie})},onSetState:(se,Ie)=>{Ct.updateSession(se,{state:Ie})},onDelete:se=>Ct.deleteSession(se),onRefreshTree:Ce.refreshTree,onToggleDir:Ce.toggleDir,onInsert:se=>{Be.sidebarDrawerOpen?vn(se):Pe.setInput(Ie=>`${Ie}${Ie&&!Ie.endsWith(" ")?" ":""}@${se} `)},onPreview:se=>{Be.sidebarDrawerOpen?Gr(se):xa(se)},drawerTriggerRef:Ae}),is=["oc-workspace",oe?"is-column-dragging":""].filter(Boolean).join(" "),it=De==="narrow"?0:De==="compact"?56:v?W:40,gt=De==="narrow"||!w?0:O,jt=ws(L,Go,Iu(O)),Vt={"--oc-sidebar-width":`${it}px`,"--oc-details-width":`${gt}px`,"--oc-file-tree-width":`${jt}px`,gridTemplateColumns:De==="narrow"?"minmax(0, 1fr)":`${it}px minmax(0, 1fr) ${gt}px`},Tn=c.jsxs(c.Fragment,{children:[De==="comfortable"&&v?c.jsx(Jh,{side:"sidebar",value:W,onResize:se=>F(ws(se,SV,wV)),onDragChange:K}):null,w&&De!=="narrow"?c.jsx(Jh,{side:"details",value:O,onResize:se=>B(ws(se,zu,Qh())),onResizeEnd:se=>P1(X5,ws(se,zu,Qh())),onDragChange:K}):null,!w&&De!=="narrow"?c.jsx("button",{type:"button",className:"oc-details-reopen",onClick:()=>hr(E),"aria-label":"展开右侧辅助栏",title:"展开辅助栏",children:c.jsx(X1,{side:"right"})}):null]}),Wr=c.jsxs("div",{className:"oc-composer-dock",children:[En?null:c.jsx(RH,{workspaces:_e.workspaces,workspaceId:g?.workspaceId??e.workspaceId??_e.workspaceId,sessionMode:fn,creating:Ct.creatingSession,onSelectWorkspace:on,onSelectMode:fs}),g?c.jsx(r$,{goal:ve.goal,busy:f,onCreate:li,onEdit:li,onPause:()=>{const se=ve.goal;se&&Ge("PATCH",{goalId:se.goalId,revision:se.revision,action:"pause"})},onResume:()=>{const se=ve.goal;se&&Ge("PATCH",{goalId:se.goalId,revision:se.revision,action:"resume"})},onClear:()=>{const se=ve.goal;se&&Ge("DELETE",{goalId:se.goalId,revision:se.revision})}}):null,g?c.jsx(t$,{todos:ve.todos}):null,c.jsx(N8,{ref:Xe,origin:t,sessionIdentity:Ct.selectedSession??void 0,sessionMode:fn,sessionSwitching:Ct.sessionSwitching,refs:i,setError:l,onUnrecoverableSession:Tt,streaming:ve.streaming,turnPhase:ve.turnPhase,deferredTurn:ve.deferredTurn,deferredTurns:ve.deferredTurns,hasThread:En,layoutMode:De,onSend:fl,onStop:dl,onDiscardDeferred:_a,onEditDeferred:hl,onSteerDeferred:Bs,onRunShortcut:Rr,models:Ut.models,activeModel:Ut.activeModel,activeModelRef:Ut.activeModelRef,activeModelListed:Ut.activeModelListed,activeThinkingLevel:Ut.activeThinkingLevel,thinkingLevels:Ut.thinkingLevels,onSwitchRuntime:Ca,usage:ve.usage,sessionStats:ve.sessionStats,unread:ve.unread,onCompact:It,compacting:u,processSummary:ve.streaming?null:ve.processSummary,processOpen:ze,onToggleProcess:ml,processTriggerRef:Ve,runtimeContext:Ut.runtimeContext,runtimeContextOpen:Ye,onToggleRuntimeContext:Fn,runtimeContextTriggerRef:ot})]}),Ta=se=>c.jsx("div",{className:"oc-messages is-empty",ref:tt,"data-landing-density":xe.landingDensity,children:e.readiness==="setup-required"?c.jsx(M5,{readiness:e.readiness,presentation:"landing",onOpenModels:Pi}):c.jsx(k8,{mode:se,readiness:e.readiness,density:xe.landingDensity,sessionMode:fn,onSuggest:Ie=>{Ct.creatingSession||Ct.sessionSwitching||hs(Ie)},disabled:Ct.creatingSession||Ct.sessionSwitching})});return c.jsx(B6.Provider,{value:{workspaceId:g?.workspaceId,origin:e.origin},children:c.jsxs("div",{className:"oc-shell",children:[!r&&En?c.jsxs("div",{className:"oc-banner","data-session-mode":g?fn:_t,children:[c.jsxs("span",{className:"oc-banner-title",children:[c.jsx("span",{className:"oc-banner-dot","aria-hidden":"true"}),g?kt.bannerTitle:"对话"]}),c.jsx("span",{className:`oc-session-mode is-${g?fn:_t}`,children:g?kt.shortLabel:Zo[_t].shortLabel}),c.jsx("span",{className:"oc-banner-body",children:g?kt.bannerBody:Zo[_t].bannerBody})]}):null,c.jsx(I6,{toast:wa,onDismiss:()=>{l(null),de(null)}}),Ct.selectedSession?c.jsxs("div",{className:is,ref:Ue,"data-layout-mode":De,style:Vt,children:[Ea,c.jsxs("div",{className:`oc-main${En?"":" is-landing"}`,children:[De==="narrow"||ut>0?c.jsxs("div",{className:"oc-main-topbar",children:[De==="narrow"?c.jsx("button",{type:"button",className:"oc-main-topbar-btn",ref:Ae,"aria-label":"打开会话与仓库","aria-expanded":Be.sidebarDrawerOpen,onClick:()=>Be.sidebarDrawerOpen?oi():tr(),children:"会话与仓库"}):null,ut>0?c.jsxs("button",{type:"button",className:"oc-main-topbar-btn oc-activity-trigger","aria-controls":"oc-details-rail-body","aria-expanded":pt,onClick:()=>Dn(),children:["运行活动 ",c.jsx("span",{children:Rt})]}):null]}):null,e.active!==!1&&(g?.workspaceId??e.workspaceId)&&c.jsx(D6,{origin:t,workspaceId:g?.workspaceId??e.workspaceId,sessionId:g?.sessionId},`${g?.workspaceId??e.workspaceId}:${g?.sessionId??""}`),En&&e.readiness!=="ready"?c.jsx(M5,{readiness:e.readiness,presentation:"thread",onOpenModels:Pi}):null,En?c.jsxs("div",{className:"oc-thread-anchor-wrap",children:[c.jsx(gq,{scrollContainerRef:ye,turnGroups:ve.turnGroups,measureKey:ve.visibleMessages.length}),c.jsx(dq,{scrollContainerRef:ye,messagesEndRef:qe,onScroll:vo,showScrollToLatest:!G,onScrollToLatest:Sa,hasThread:En,sessionId:g?.sessionId,readiness:e.readiness,streaming:ve.streaming,streamingAssistantId:ve.streamingAssistantId,messagesCount:ve.messages.length,visibleCount:ve.visibleMessages.length,historyHasMore:ve.historyHasMore,historyLoading:ve.historyLoading,onLoadMore:Ee,turnGroups:ve.turnGroups,pendingSteering:bo,interview:dn?ve.interview:null,interviewAnswer:Rn.interviewAnswer,onInterviewAnswerChange:Rn.setInterviewAnswer,onAnswerInterview:Ps,onConfirmTaskKind:ka,onActivateActivity:Dn,canActivateActivity:Er,resolveDagRunId:je,onActivateDagProgress:Ze,onSuggest:fr})]}):Ta("empty-session"),ve.pendingQuestion?c.jsx(Jq,{origin:t,pending:ve.pendingQuestion,workspaceId:g?.workspaceId,onSettled:()=>ve.setPendingQuestion(null)}):Wr]}),c.jsxs(i3,{open:w,onToggleOpen:()=>{C(!1),E==="context"&&Ut.setRuntimeContextOpen(!1),E==="calls"&&te(se=>se.active==="process"?Xi(se):se)},activeTab:E,onSelectTab:hr,dagRunId:Oe,dagRun:nt,terminalsContent:c.jsx(x5,{embedded:!0,workspaceId:e.workspaceId??void 0}),scmContent:c.jsx(S5,{workspaceId:e.workspaceId??void 0}),browserContent:c.jsx(k5,{workspaceId:g?.workspaceId??e.workspaceId??_e.workspaceId??void 0}),databaseContent:c.jsx(T5,{workspaceId:g?.workspaceId??e.workspaceId??_e.workspaceId}),activityContent:X&&g?c.jsx(xH,{origin:t,sessionId:g.sessionId,focusRef:re,operationCards:ve.operationCards,humanGateCards:ve.humanGateCards,artifactCards:ve.artifactCards,onLocateConversation:si,onNavigateWorkspace:e.onNavigateWorkspace}):void 0,goalContent:U?c.jsx(i$,{mode:ve.goal&&ve.goal.phase!=="complete"?"edit":"create",initialObjective:ve.goal&&ve.goal.phase!=="complete"?ve.goal.objective:"",busy:f,onCancel:()=>bt("goal"),onSave:Gt}):void 0,contextContent:H&&Ut.runtimeContext?c.jsx(ZG,{panelOnly:!0,embedded:!0,open:E==="context"&&w&&!!Ut.runtimeContext,onToggle:()=>en("context"),onClose:()=>{C(!1),Ut.setRuntimeContextOpen(!1),te(se=>se.active==="runtime-context"?Xi(se):se)},context:Ut.runtimeContext,triggerRef:ot}):void 0,callsContent:I?c.jsx(s$,{toolCalls:ve.toolCalls,overlay:!1,embedded:!0,onClose:()=>en("calls"),triggerRef:Ve}):void 0,trajectoryContent:c.jsx(qG,{turnGroups:ve.turnGroups,runtimeContext:Ut.runtimeContext,runtimeContextLoading:Ut.runtimeContextLoading,toolCatalog:Ut.toolCatalog,turnTelemetry:ve.turnTelemetry,operatorActions:ve.operatorActions,sddSessionIdentity:ve.sddSessionIdentity}),onCloseTab:bt,children:[c.jsx(s3,{previews:Ce.previews,activePath:Ce.activePreviewPath,loading:Ce.previewLoading,onActivate:Ce.setActivePreviewPath,onClose:Ce.closePreview}),c.jsx(Jh,{side:"details-tree",value:jt,onResize:se=>V(ws(se,Go,Iu(O))),onResizeEnd:se=>P1(z1,ws(se,Go,Iu(O))),onDragChange:K}),c.jsx(Ix,{workspaceName:_e.workspaces.find(se=>se.workspaceId===e.workspaceId)?.name??"Workspace",tree:Ce.tree,expanded:Ce.expandedDirs,treeError:Ce.treeError,onRefresh:Ce.refreshTree,onToggle:Ce.toggleDir,onInsert:se=>Pe.setInput(Ie=>`${Ie}${Ie&&!Ie.endsWith(" ")?" ":""}@${se} `),onPreview:se=>{xa(se)}})]}),Tn]}):c.jsxs("div",{className:is,ref:Ue,"data-layout-mode":De,style:Vt,children:[Ea,c.jsxs("div",{className:"oc-main is-landing",children:[De==="narrow"?c.jsx("div",{className:"oc-main-topbar",children:c.jsx("button",{type:"button",className:"oc-main-topbar-btn",ref:Ae,"aria-label":"打开会话与仓库","aria-expanded":Be.sidebarDrawerOpen,onClick:()=>Be.sidebarDrawerOpen?oi():tr(),children:"会话与仓库"})}):null,Ta("no-session"),Wr]}),c.jsxs(i3,{open:w,onToggleOpen:()=>C(se=>!se),activeTab:E,onSelectTab:hr,onCloseTab:bt,dagRunId:Oe,dagRun:nt,terminalsContent:c.jsx(x5,{embedded:!0,workspaceId:e.workspaceId??void 0}),scmContent:c.jsx(S5,{workspaceId:e.workspaceId??void 0}),browserContent:c.jsx(k5,{workspaceId:e.workspaceId??_e.workspaceId??void 0}),databaseContent:c.jsx(T5,{workspaceId:e.workspaceId??_e.workspaceId}),children:[c.jsx(s3,{previews:Ce.previews,activePath:Ce.activePreviewPath,loading:Ce.previewLoading,onActivate:Ce.setActivePreviewPath,onClose:Ce.closePreview}),c.jsx(Jh,{side:"details-tree",value:jt,onResize:se=>V(ws(se,Go,Iu(O))),onResizeEnd:se=>P1(z1,ws(se,Go,Iu(O))),onDragChange:K}),c.jsx(Ix,{workspaceName:_e.workspaces.find(se=>se.workspaceId===e.workspaceId)?.name??"Workspace",tree:Ce.tree,expanded:Ce.expandedDirs,treeError:Ce.treeError,onRefresh:Ce.refreshTree,onToggle:Ce.toggleDir,onInsert:se=>Pe.setInput(Ie=>`${Ie}${Ie&&!Ie.endsWith(" ")?" ":""}@${se} `),onPreview:se=>{xa(se)}})]}),Tn]})]})})}function TV(e){const{active:t}=e;return c.jsxs("section",{id:"workspace-chat",className:"workspace-pane workspace-pane--chat panel panel--chat","aria-labelledby":"chat-title",hidden:!t,"aria-hidden":!t,inert:!t,tabIndex:t?-1:void 0,style:{minWidth:0,height:"100%"},children:[c.jsx("h2",{id:"chat-title",className:"sr-only",children:"对话"}),c.jsx(EV,{active:t,origin:"",readiness:e.readiness,runAction:e.runAction,operatorBusy:e.operatorBusy,surface:"workspace",workspaceRegistry:e.workspaceRegistry,workspaceId:e.workspaceId,requestedSessionId:e.sessionId,workspaceGate:e.workspaceGate,onSwitchWorkspace:e.onSwitchWorkspace,onNavigateWorkspace:e.onNavigateWorkspace})]})}function RV(e){const{board:t,busy:n}=e;return c.jsxs("details",{className:"night-advanced","data-testid":"night-advanced",open:t.advancedOpen,onToggle:r=>t.setAdvancedOpen(r.target.open),children:[c.jsx("summary",{children:"高级 / Inspect"}),c.jsxs("p",{className:"muted",children:["只读深链:"," ",c.jsx("a",{className:"external-link",href:so("/#/inspect/night"),children:"/#/inspect/night"})]}),c.jsx("div",{className:"cta-row",children:c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:n,"data-testid":"night-morning-btn",onClick:()=>{t.onMorningReport()},children:"早晨 night 报告"})}),t.morningPreview?c.jsx("pre",{className:"cmd","data-testid":"night-morning-preview",children:t.morningPreview}):null]})}function ef(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function er(e,t){const n=e[t];return typeof n=="string"&&n.trim()?n.trim():void 0}function Q5(e,t){const n=e[t];if(!Array.isArray(n))return;const r=n.filter(i=>typeof i=="string");return r.length>0?r:void 0}function IV(e){const t=ef(e);if(!t)return null;const n=ef(t.result),r=[ef(t.reviewPacket),n?ef(n.reviewPacket):null,n,t].filter(Boolean);for(const i of r){const a=er(i,"scheduleId")??er(i,"id"),l=er(i,"gateToken")??er(i,"approveGate")??er(i,"writeSetGateToken");if(!(!a||!l))return{scheduleId:a,gateToken:l,...er(i,"featureId")?{featureId:er(i,"featureId")}:{},...er(i,"taskId")?{taskId:er(i,"taskId")}:{},...Q5(i,"writeSet")?{writeSet:Q5(i,"writeSet")}:{},...er(i,"worktreePath")?{worktreePath:er(i,"worktreePath")}:{},...er(i,"branch")?{branch:er(i,"branch")}:{},...er(i,"baseBranch")?{baseBranch:er(i,"baseBranch")}:{},...er(i,"baseCommit")?{baseCommit:er(i,"baseCommit")}:{},...er(i,"executeAtUtc")?{executeAtUtc:er(i,"executeAtUtc")}:{},...er(i,"taskCard")?{taskCard:er(i,"taskCard")}:{}}}return null}function J5(e){return`docs/features/${e.trim().replace(/^\/+|\/+$/g,"")}`}function NV(e){const t=e.trim(),n=/^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2})/.exec(t);return n?`${n[1]} ${n[2]}`:null}function e6(){const e=new Date;e.setHours(20,0,0,0);const t=n=>String(n).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}`}function MC(e){if(!e)return"—";const t=Date.parse(e);if(Number.isNaN(t))return e;try{return new Intl.DateTimeFormat("zh-CN",{dateStyle:"short",timeStyle:"short",timeZone:"Asia/Shanghai"}).format(new Date(t))}catch{return e}}function AV(e){return e.mergeState==="pending-harvest"||/\bscheduler harvest\b/i.test(e.nextAction)}function MV(e){return e.status==="failed"||e.status==="human_required"||e.status==="cancelled"||/\bscheduler discard\b/i.test(e.nextAction)}function Xf(e){return e==="failed"||e==="human_required"}function DV(e){return`${e}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}function DC(e){return{submitted:"已提交",validating:"校验中",validated:"待预约确认",scheduled:"已预约",waiting:"等待触发",dispatching:"派发中",running:"执行中",succeeded:"成功",failed:"失败",human_required:"需人工",cancelled:"已取消",rejected:"已拒绝",cancel_requested:"取消中"}[e]??e}function OV(e){const{target:t,reason:n,onReasonChange:r,force:i,onForceChange:a,busy:l}=e;return c.jsxs("div",{className:"night-discard-card","data-testid":"night-discard-card",children:[c.jsx("h3",{children:"确认 Discard"}),c.jsxs("p",{className:"muted",children:[t.featureId,"/",t.taskId,"(",DC(t.status),")"]}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"原因"}),c.jsx("input",{"data-testid":"night-discard-reason",value:n,disabled:l,placeholder:"human discard reason",onChange:u=>r(u.target.value)})]}),Xf(t.status)?c.jsxs("label",{className:"field checkbox-field",children:[c.jsx("input",{type:"checkbox","data-testid":"night-discard-force",checked:i,disabled:l,onChange:u=>a(u.target.checked)}),c.jsx("span",{className:"muted",children:"强制 Discard(failed / human_required)"})]}):null,c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:l||Xf(t.status)&&!i,"data-testid":"night-discard-confirm",onClick:e.onConfirm,children:"确认 Discard"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:l,onClick:e.onCancel,children:"返回"})]})]})}function jV(e){const{board:t}=e,{doctor:n,list:r,clockHint:i,doctorIssues:a,auxTicker:l}=t;return c.jsxs("div",{className:"night-health","data-testid":"night-health-bar",children:[c.jsxs("div",{className:"night-health-main",children:[c.jsx("span",{className:`night-health-pill${n?.ok===!1?" is-bad":""}`,children:n?.ok===!1?"Scheduler 异常":"Scheduler 健康"}),c.jsxs("span",{className:"muted",children:["计划 ",n?.scheduleCount??r?.summary.total??"—"," · 活动"," ",n?.activeCount??r?.summary.active??"—"]})]}),i?c.jsxs("p",{className:"muted night-health-hint","data-testid":"night-clock-hint",children:["时钟:",i.message,"(安装/启停请用 CLI:",c.jsx("code",{children:"agent-worker scheduler clock status --repo ."}),")"]}):c.jsxs("p",{className:"muted night-health-hint",children:["到点执行依赖本机 clock / tick,不在此面板安装。详见"," ",c.jsx("a",{className:"external-link",href:so("/#/inspect/night"),children:"/#/inspect/night"})]}),c.jsxs("div",{className:"night-aux-ticker","data-testid":"night-aux-ticker",children:[c.jsxs("p",{className:"night-aux-ticker-label",children:["开着 Console 时辅助 tick(每 ",l?.intervalSec??60,"s)"]}),c.jsx("p",{className:"muted night-health-hint","data-testid":"night-aux-ticker-disclaimer",children:l?.disclaimer??"仅在本 Console 进程开着时有效;过夜无人值守仍需 OS clock。"}),l?.lastOutcome?c.jsxs("p",{className:"muted","data-testid":"night-aux-ticker-last",children:["上次:",l.lastOutcome,l.running?"(进行中)":"",l.lastSummary?` · ${l.lastSummary}`:"",l.lastError?` · ${l.lastError}`:""]}):null]}),a.length>0?c.jsx("ul",{className:"night-doctor-list","data-testid":"night-doctor-findings",children:a.slice(0,4).map(u=>c.jsxs("li",{children:[c.jsx("strong",{children:u.severity})," ",u.message]},`${u.code}-${u.scheduleId??""}-${u.message}`))}):null]})}function LV(e){const{board:t,busy:n,onHarvest:r,onOpenDiscard:i}=e,{list:a}=t;return c.jsxs(c.Fragment,{children:[a?c.jsxs("div",{className:"night-kpi","data-testid":"night-kpi",children:[c.jsxs("span",{children:["合计 ",a.summary.total]}),c.jsxs("span",{children:["活动 ",a.summary.active]}),c.jsxs("span",{children:["待收成 ",a.summary.pendingHarvest]}),c.jsxs("span",{children:["需人工 ",a.summary.humanRequired]}),c.jsxs("span",{children:["失败 ",a.summary.failed]})]}):null,c.jsxs("div",{className:"night-board","data-testid":"night-board",children:[c.jsx("h3",{children:"计划列表"}),!a||a.schedules.length===0?c.jsxs("div",{className:"empty-state","data-testid":"night-board-empty",children:[c.jsx("p",{className:"empty-title",children:"暂无夜间计划"}),c.jsx("p",{className:"muted",children:"用下方向导预约第一个任务。"})]}):c.jsx("ul",{className:"night-schedule-list",children:a.schedules.map(l=>c.jsxs("li",{className:"night-schedule-row","data-testid":"night-schedule-row","data-status":l.status,children:[c.jsxs("div",{className:"night-schedule-head",children:[c.jsxs("strong",{children:[l.featureId,"/",l.taskId]}),c.jsx("span",{className:"night-status-chip",children:DC(l.status)})]}),c.jsxs("p",{className:"muted",children:["执行 ",MC(l.executeAtUtc),l.mergeState?` · merge ${l.mergeState}`:"",l.taskCard?` · ${l.taskCard}`:""]}),l.waitingReason?c.jsxs("p",{className:"muted",children:["等待原因:",l.waitingReason]}):null,c.jsxs("p",{className:"muted night-next-action",children:["下一步:",l.nextAction]}),c.jsxs("div",{className:"cta-row",children:[AV(l)?c.jsx("button",{type:"button",className:"btn btn-primary",disabled:n,"data-testid":"night-row-harvest",onClick:()=>r(l),children:"Harvest"}):null,MV(l)?c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:n,"data-testid":"night-row-discard",onClick:()=>i(l),children:"Discard"}):null,c.jsx("a",{className:"external-link",href:so(`/#/inspect/night/${encodeURIComponent(l.scheduleId)}`),children:"Inspect"})]})]},l.scheduleId))})]})]})}function BV(e){const{wizard:t,busy:n}=e;return c.jsxs("div",{className:"night-wizard","data-testid":"night-wizard",children:[c.jsx("h3",{children:"预约夜间任务"}),t.phase==="pick"?c.jsxs(c.Fragment,{children:[t.selectableTasks.length===0?c.jsxs("div",{className:"empty-state","data-testid":"night-task-empty",children:[c.jsx("p",{className:"empty-title",children:"没有可选任务"}),c.jsx("p",{className:"muted",children:"请先在 Feature Packet / Task Pool 中创建任务,再回到此处刷新。"})]}):c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"Feature / Task"}),c.jsxs("select",{"data-testid":"night-task-select",value:t.selectedKey,disabled:n,onChange:r=>t.setSelectedKey(r.target.value),children:[c.jsx("option",{value:"",children:"选择任务…"}),t.selectableTasks.map(r=>{const i=`${r.featureId}::${r.taskId}`;return c.jsxs("option",{value:i,children:[r.featureId,"/",r.taskId,r.status?` · ${r.status}`:""]},i)})]})]}),t.derivedFeatureDir?c.jsxs("p",{className:"muted","data-testid":"night-feature-dir",children:["Feature 目录:",c.jsx("code",{children:t.derivedFeatureDir})]}):null,c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"本地执行时间"}),c.jsx("input",{type:"datetime-local","data-testid":"night-at",value:t.nightAt,disabled:n,onChange:r=>t.setNightAt(r.target.value)})]}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"任务卡片(可选)"}),c.jsx("input",{"data-testid":"night-task-card",value:t.taskCard,disabled:n,placeholder:"UCP-LOOP#11",onChange:r=>t.setTaskCard(r.target.value)})]}),c.jsx("div",{className:"cta-row",children:c.jsx("button",{type:"button",className:"btn btn-primary",disabled:n||!t.selectedKey||!t.nightAt,"data-testid":"night-prepare-btn",onClick:()=>{t.onPrepare()},children:"准备并审阅"})})]}):c.jsxs("div",{className:"night-review-card","data-testid":"night-review-card",children:[c.jsx("p",{className:"muted",children:"请确认 writeSet 与执行环境后预约。Token 已隐藏。"}),c.jsxs("dl",{className:"kv",children:[c.jsxs("div",{children:[c.jsx("dt",{children:"Schedule"}),c.jsx("dd",{children:c.jsx("code",{children:t.review?.scheduleId})})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"任务"}),c.jsxs("dd",{children:[t.review?.featureId,"/",t.review?.taskId]})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"执行时间 (UTC)"}),c.jsx("dd",{children:MC(t.review?.executeAtUtc)})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"Worktree"}),c.jsx("dd",{children:c.jsx("code",{children:t.review?.worktreePath??"—"})})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"分支"}),c.jsx("dd",{children:c.jsx("code",{children:t.review?.branch??"—"})})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"Base"}),c.jsx("dd",{children:c.jsxs("code",{children:[t.review?.baseBranch??"—","@",(t.review?.baseCommit??"").slice(0,12)||"—"]})})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"WriteSet"}),c.jsx("dd",{children:t.review?.writeSet&&t.review.writeSet.length>0?c.jsx("ul",{className:"night-writeset",children:t.review.writeSet.map(r=>c.jsx("li",{children:c.jsx("code",{children:r})},r))}):c.jsx("span",{className:"muted",children:"(未返回显式 writeSet)"})})]})]}),c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:n||!t.review,"data-testid":"night-confirm-add-btn",onClick:()=>{t.onConfirmAdd()},children:"确认预约"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:n,"data-testid":"night-review-back-btn",onClick:t.onCancelWizard,children:"返回修改"})]})]})]})}function zV(e){const{setOpError:t}=e,[n,r]=_.useState(null),[i,a]=_.useState(null),[l,u]=_.useState([]),[h,f]=_.useState(null),[p,g]=_.useState(!1),[y,v]=_.useState(!1),[S,w]=_.useState(null),[C,E]=_.useState(null),A=_.useCallback(async()=>{g(!0),f(null);try{const[T,I,$,X]=await Promise.all([fetch(yi("/api/night-jobs"),{credentials:"same-origin"}),fetch(yi("/api/night-jobs/doctor"),{credentials:"same-origin"}),fetch(yi("/api/tasks"),{credentials:"same-origin"}),fetch(yi("/api/operator/v1/night-aux-ticker"),{credentials:"same-origin"})]);if(!T.ok)throw new Error(`加载计划列表失败(HTTP ${T.status})`);const j=await T.json();if(r(j),I.ok?a(await I.json()):a(null),$.ok){const U=await $.json();u(Array.isArray(U)?U:[])}else u([]);if(X.ok){const U=await X.json();U.ticker&&E(U.ticker)}}catch(T){f(T instanceof Error?T.message:String(T))}finally{g(!1)}},[]);_.useEffect(()=>{A()},[A]);const D=_.useCallback(async()=>{try{const T=await fetch(yi("/api/night-jobs/morning"),{credentials:"same-origin"});if(!T.ok){t(`早晨报告加载失败(HTTP ${T.status})`);return}const I=await T.json();w(JSON.stringify(I,null,2).slice(0,4e3)),v(!0)}catch(T){t(T instanceof Error?T.message:String(T))}},[t]),P=(i?.findings??[]).filter(T=>T.severity==="error"||T.severity==="warning"),H=(i?.findings??[]).find(T=>/clock/i.test(T.code)||/clock/i.test(T.message));return{list:n,doctor:i,tasks:l,loadError:h,loadingBoard:p,advancedOpen:y,setAdvancedOpen:v,morningPreview:S,auxTicker:C,refreshBoard:A,onMorningReport:D,doctorIssues:P,clockHint:H}}function PV(e){const{board:t,runAction:n,isActionSuccess:r,setOpError:i}=e,{tasks:a,refreshBoard:l}=t,[u,h]=_.useState("pick"),[f,p]=_.useState(""),[g,y]=_.useState(e6),[v,S]=_.useState(""),[w,C]=_.useState(null),[E,A]=_.useState(""),[D,P]=_.useState(null),[H,T]=_.useState(!1),I=_.useMemo(()=>{const L=a.filter(V=>typeof V.featureId=="string"&&V.featureId.trim()&&V.taskId);return L.sort((V,oe)=>{const K=V.featureId??"",Q=oe.featureId??"";return K!==Q?K.localeCompare(Q):V.taskId.localeCompare(oe.taskId)}),L},[a]),$=_.useMemo(()=>f?I.find(L=>`${L.featureId}::${L.taskId}`===f)??null:null,[I,f]),X=$?.featureId?J5($.featureId):"",j=_.useCallback(async(L,V,oe)=>{const K=await n("prepareMutationGate",{action:L,actionParams:V});if(!r(K))return;const Q=K?.result??K,G=Q.receiptId?Q:Q.result??Q;if(!G.receiptId||!G.humanGateToken){i("prepareMutationGate 未返回可消费的 Human Gate receipt");return}return n(L,{...V,confirmationId:G.receiptId,humanGateToken:G.humanGateToken},{clientRequestId:DV(oe)})},[r,n,i]),U=_.useCallback(async()=>{if(!$?.featureId){i("请先点选 Feature / Task");return}const L=NV(g);if(!L){i("执行时间格式无效,请使用日期时间选择器");return}const V={featureDir:J5($.featureId),taskId:$.taskId,at:L,tz:"Asia/Shanghai",...v.trim()?{taskCard:v.trim()}:{}},oe=await j("workerAdmissionPrepare",V,"night-prepare");if(!r(oe))return;const K=IV(oe?.result??oe);if(!K){i("准备成功但未解析到 scheduleId / gateToken。请刷新后重试,或查看 Inspect。");return}C(K),h("review")},[r,g,j,$,i,v]),z=_.useCallback(async()=>{if(!w)return;const L=await j("workerSchedulerAdd",{scheduleId:w.scheduleId,approveGate:w.gateToken},"night-add");r(L)&&(C(null),h("pick"),p(""),S(""),y(e6()),await l())},[r,l,w,j]),W=_.useCallback(()=>{h("pick"),C(null)},[]),F=_.useCallback(async L=>{const V=await j("workerSchedulerHarvest",{scheduleId:L.scheduleId},"night-harvest");r(V)&&await l()},[r,l,j]),O=_.useCallback(async()=>{if(!D)return;const L=E.trim()||"discard from console night workbench",V=Xf(D.status),oe=await j("workerSchedulerDiscard",{scheduleId:D.scheduleId,reason:L,...V||H?{force:!0}:{}},"night-discard");r(oe)&&(P(null),A(""),T(!1),await l())},[E,D,H,r,l,j]),B=_.useCallback(L=>{P(L),T(Xf(L.status)),A("")},[]);return{phase:u,selectedKey:f,setSelectedKey:p,nightAt:g,setNightAt:y,taskCard:v,setTaskCard:S,review:w,discardReason:E,setDiscardReason:A,discardTarget:D,setDiscardTarget:P,forceDiscard:H,setForceDiscard:T,selectableTasks:I,derivedFeatureDir:X,onPrepare:U,onConfirmAdd:z,onCancelWizard:W,onHarvest:F,onDiscard:O,openDiscard:B}}function HV({busy:e,runAction:t,isActionSuccess:n,setOpError:r}){const i=zV({setOpError:r}),a=PV({board:i,runAction:t,isActionSuccess:n,setOpError:r});return c.jsxs("section",{className:"panel night-workbench","aria-labelledby":"night-title","data-testid":"night-jobs-panel",children:[c.jsx("h2",{id:"night-title",children:"夜间任务"}),c.jsx("p",{className:"panel-lead",children:"白天点选任务并预约;列表查看状态;早晨在行内收成或丢弃。写操作仍经 Human Gate,列表复用 Inspect 投影。"}),c.jsx(jV,{board:i,busy:e}),c.jsx("div",{className:"cta-row",children:c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:e||i.loadingBoard,"data-testid":"night-refresh-btn",onClick:()=>{i.refreshBoard()},children:"刷新看板"})}),i.loadError?c.jsx("p",{className:"error","data-testid":"night-load-error",children:i.loadError}):null,c.jsx(LV,{board:i,busy:e,onHarvest:l=>{a.onHarvest(l)},onOpenDiscard:a.openDiscard}),a.discardTarget?c.jsx(OV,{target:a.discardTarget,reason:a.discardReason,onReasonChange:a.setDiscardReason,force:a.forceDiscard,onForceChange:a.setForceDiscard,busy:e,onConfirm:()=>{a.onDiscard()},onCancel:()=>a.setDiscardTarget(null)}):null,c.jsx(BV,{wizard:a,busy:e}),c.jsx(RV,{board:i,busy:e})]})}function qV(){return c.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12","aria-hidden":"true",children:c.jsx("path",{d:"M2.6 4.2 6 7.6l3.4-3.4",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})}function tf(e){return e.provider?il(e.provider,e.id):e.id}function $V(e){const t=e.trim();if(!t)return;const n=t.indexOf("/");return n<=0||n===t.length-1?{provider:"",id:t}:{provider:t.slice(0,n),id:t.slice(n+1)}}function FV(e){const[t,n]=_.useState(!1),[r,i]=_.useState(""),[a,l]=_.useState(0),u=_.useRef(null),h=_.useRef(null),f=_.useRef(null),p=_.useMemo(()=>{const w=[...e.models];if(e.value&&!w.some(C=>tf(C)===e.value)){const C=$V(e.value);C&&w.push(C)}return w},[e.models,e.value]),g=_.useMemo(()=>R8(p,r),[p,r]),y=_.useMemo(()=>g.flatMap(w=>w.models),[g]);_.useEffect(()=>{t&&(i(""),l(Math.max(0,p.findIndex(w=>tf(w)===e.value))),window.setTimeout(()=>f.current?.focus(),0))},[t,p,e.value]),_.useEffect(()=>{if(!t)return;const w=E=>{const A=u.current;A&&E.target instanceof Node&&!A.contains(E.target)&&n(!1)},C=E=>{E.key==="Escape"&&(n(!1),h.current?.focus())};return document.addEventListener("mousedown",w),document.addEventListener("keydown",C),()=>{document.removeEventListener("mousedown",w),document.removeEventListener("keydown",C)}},[t]);const v=w=>{if(e.disabled)return;const C=y[w];C&&(n(!1),e.onChange(tf(C)),h.current?.focus())},S=w=>{if(w.key==="ArrowDown"){w.preventDefault(),l(C=>y.length?(C+1)%y.length:0);return}if(w.key==="ArrowUp"){w.preventDefault(),l(C=>y.length?(C-1+y.length)%y.length:0);return}if(w.key==="Enter"){w.preventDefault(),v(a);return}if(w.key==="Escape"){w.preventDefault(),n(!1),h.current?.focus();return}};return c.jsxs("div",{className:"oc-select-menu models-matrix-select",ref:u,children:[c.jsxs("button",{type:"button",ref:h,id:e.id,className:"oc-select-trigger","aria-haspopup":"listbox","aria-expanded":t,"aria-invalid":e.ariaInvalid,"data-testid":e.dataTestId,disabled:e.disabled,onClick:()=>n(w=>!w),children:[c.jsx("span",{className:"oc-select-trigger-label",children:e.value||"选择模型"}),c.jsx(qV,{})]}),t&&c.jsxs("div",{className:"oc-select-panel oc-model-panel is-below",role:"listbox","aria-label":"选择模型",children:[c.jsx("input",{ref:f,className:"oc-select-search",placeholder:"搜索模型…",value:r,onChange:w=>{i(w.target.value),l(0)},onKeyDown:S}),g.length===0&&c.jsx("div",{className:"oc-select-status",children:"没有可用模型"}),g.map(w=>c.jsxs("div",{className:"oc-model-group",children:[c.jsx("div",{className:"oc-model-group-head",children:w.provider||"其他"}),w.models.map(C=>{const E=tf(C),A=E===e.value,D=y[a]===C;return c.jsxs("button",{type:"button",role:"option","aria-selected":A,disabled:e.disabled,className:`oc-select-option oc-model-option${D?" is-highlighted":""}${A?" is-active":""}`,onMouseDown:P=>P.preventDefault(),onClick:()=>{e.disabled||(n(!1),e.onChange(E))},children:[c.jsxs("span",{className:"oc-model-option-name",children:[C.name?`${C.name} · `:"",C.id]}),A&&c.jsx("span",{className:"oc-model-option-check",children:"✓"})]},E)})]},w.provider))]})]})}const UV=[{key:"sdkAvailable",detailKey:"sdkMessage",label:"Pi SDK",hint:"Node 侧 Pi SDK 可加载"},{key:"authReady",detailKey:"authMessage",label:"认证凭据",hint:"Pi auth / provider 密钥已配置"},{key:"modelsAvailable",detailKey:"modelsMessage",label:"可用模型",hint:"harness.json executors.pi(LOW/MED/HIGH)可在 Pi 凭据面解析"},{key:"interviewSessionOk",detailKey:"sessionMessage",label:"访谈会话",hint:"Interview 会话预检通过"}];function GV(e){if(!e)return null;const t=Date.parse(e);return Number.isNaN(t)?e:new Date(t).toLocaleString()}function WV(e){const t=e.readinessReport?.state??e.readiness,n=e.readinessReport?.probe,r=n?.details??{},i=e.readinessReport?.blockedActions??[],a=GV(e.readinessReport?.generatedAt),l=e.readinessReport??{state:e.readiness,health:e.health},u=n?.piModelMatrix,h=n?.piAvailableModels??[],[f,p]=_.useState(()=>px(u)),[g,y]=_.useState(!1),[v,S]=_.useState(null),[w,C]=_.useState(null);_.useEffect(()=>{p(px(u)),S(null)},[u]);const E=nT(f),A=!rT(E),D=e.busy||g||A;async function P(){if(!D){y(!0),S(null),C(null);try{const H=await e.onSaveMatrix({LOW:f.LOW,MED:f.MED,HIGH:f.HIGH});if(H&&H.ok===!1){S(H.error?.message??"保存模型矩阵失败");return}const T=window.localStorage.getItem(ca)?.trim();if(T)try{const I=await fetch(`/api/operator/v1/chat/sessions/${encodeURIComponent(T)}/reload`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json",[Qf]:Jf()},body:"{}"});I.ok?C("配置已保存,活动会话已重载。"):I.status===409?C("配置已保存;活动会话正忙(PI_SESSION_BUSY),请稍后手动重载。"):C("配置已保存;活动会话重载未完成,请手动重载。")}catch{C("配置已保存;活动会话重载未完成,请手动重载。")}else C("配置已保存,检测结果已刷新。")}catch(H){S(H instanceof Error?H.message:String(H))}finally{y(!1)}}}return c.jsxs("section",{className:"panel models-page","aria-labelledby":"models-title",children:[c.jsxs("div",{className:"models-header",children:[c.jsx("h2",{id:"models-title",children:"模型与认证"}),c.jsx("span",{className:"models-status-pill","data-state":t,"data-testid":"models-readiness-pill",children:o6[t]??t})]}),c.jsxs("p",{className:"panel-lead",children:["复用 Pi ModelRuntime 凭据平面;密钥不会回传到页面。请用"," ",c.jsx("code",{children:"pi"})," 或 Pi 认证存储完成配置,然后刷新就绪探测。"]}),c.jsxs("section",{className:"models-probe-card","aria-labelledby":"models-probe-title","data-testid":"readiness-details",children:[c.jsx("h3",{id:"models-probe-title",className:"models-subtitle",children:"就绪检查"}),c.jsx("ul",{className:"models-probe-list",children:UV.map(H=>{const T=n?.[H.key],I=r[H.detailKey],$=T===void 0;return c.jsxs("li",{className:`models-probe-item${$?" is-pending":T?" is-ok":" is-bad"}`,children:[c.jsx("span",{className:"models-probe-badge","aria-label":$?"未探测":T?"通过":"未通过",children:$?"—":T?"✓":"✕"}),c.jsxs("div",{className:"models-probe-body",children:[c.jsx("strong",{children:H.label}),c.jsx("span",{className:"muted",children:H.hint}),I?c.jsx("p",{className:"models-probe-detail",children:I}):null]})]},H.key)})})]}),c.jsxs("section",{className:"models-matrix-card","aria-labelledby":"models-matrix-title","data-testid":"models-matrix-editor",children:[c.jsx("h3",{id:"models-matrix-title",className:"models-subtitle",children:"Herness模型矩阵(LOW/MED/HIGH)"}),c.jsxs("p",{className:"models-matrix-lead",children:["从 Pi 可用模型中选择 ",c.jsx("code",{children:"provider/model"})," 或裸 model id; 保存后原子写入 ",c.jsx("code",{children:"executors.pi"})," 并自动重测就绪。"]}),c.jsx("div",{className:"models-matrix-list",children:Sb.map(H=>c.jsxs("div",{className:"models-matrix-row",children:[c.jsxs("label",{htmlFor:`pi-model-${H}`,children:[H," 档",E[H]?c.jsxs("span",{className:"error","data-testid":`pi-model-error-${H}`,children:[" ","— ",E[H]]}):null]}),c.jsx(FV,{id:`pi-model-${H}`,value:f[H],models:h,onChange:T=>p(I=>({...I,[H]:T})),ariaInvalid:E[H]!==void 0,"data-testid":`pi-model-select-${H}`})]},H))}),v?c.jsx("p",{className:"error","data-testid":"models-matrix-save-error",children:v}):null,w?c.jsx("p",{className:"muted","data-testid":"models-matrix-save-notice",children:w}):null,c.jsxs("div",{className:"models-actions",children:[c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:D,"data-testid":"models-matrix-save",onClick:()=>{P()},children:g||e.busy?"保存中…":"保存模型矩阵"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:e.busy||g,"data-testid":"models-matrix-refresh-models",onClick:e.onRefreshReadiness,children:e.busy?"刷新中…":"刷新模型"})]})]}),t==="setup-required"?c.jsxs("div",{className:"models-setup-card","data-testid":"models-setup-hint",children:[c.jsx("h3",{className:"models-subtitle",children:"如何完成配置"}),c.jsxs("ol",{className:"models-setup-steps",children:[c.jsxs("li",{children:["在终端配置 Pi 认证(例如 ",c.jsx("code",{children:"pi auth login"}),")或写入 provider API key。"]}),c.jsxs("li",{children:["确认 agent 目录下 ",c.jsx("code",{children:"models.json"})," / 认证文件可读。"]}),c.jsx("li",{children:"点击下方「刷新就绪探测」,或运行诊断命令查看详情。"})]}),c.jsx("pre",{className:"cmd",children:a6})]}):null,t==="degraded"?c.jsx("p",{className:"models-degraded-note","data-testid":"models-degraded-note",children:"Pi 暂时降级:仍可恢复草稿与需求访谈;部分写入/运行类操作会被拦截。"}):null,i.length>0?c.jsxs("div",{className:"models-blocked-card",children:[c.jsx("h3",{className:"models-subtitle",children:"当前受限操作"}),c.jsx("ul",{className:"models-blocked-list",children:i.map(H=>c.jsx("li",{children:c.jsx("code",{children:H})},H))})]}):null,c.jsxs("div",{className:"models-actions",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:e.busy,onClick:e.onRefreshReadiness,children:"刷新就绪探测"}),a?c.jsxs("span",{className:"muted models-generated-at",children:["上次探测:",a]}):null]}),c.jsxs("details",{className:"models-raw-details",children:[c.jsx("summary",{children:"查看原始探测数据(调试)"}),c.jsx("pre",{className:"cmd models-raw-json",children:JSON.stringify(l,null,2)})]})]})}const VV=[10,20,50,100],KV=800;function YV(){return c.jsx("span",{className:"oc-plugin-version-spinner","aria-hidden":"true"})}function XV(){const e=_.useRef(null);return _.useEffect(()=>{let t=0,n=performance.now();const r=i=>{const a=e.current;if(a){const l=(i-n)%1100/1100;a.style.left=`${-40+l*140}%`}t=requestAnimationFrame(r)};return t=requestAnimationFrame(r),()=>cancelAnimationFrame(t)},[]),c.jsx("span",{ref:e,className:"oc-plugin-progress-fill"})}function ZV(){const[e,t]=_.useState(null),[n,r]=_.useState(null),[i,a]=_.useState(""),[l,u]=_.useState(10),[h,f]=_.useState(null),[p,g]=_.useState(null),[y,v]=_.useState(1),[S,w]=_.useState(null),[C,E]=_.useState({}),[A,D]=_.useState({}),[P,H]=_.useState({}),[T,I]=_.useState({}),[$,X]=_.useState(void 0);async function j(Y){if(!(C[Y]!==void 0||A[Y]==="pending")){D(te=>({...te,[Y]:"pending"}));try{const te=await fetch(`/api/operator/v1/pi-plugins/versions?name=${encodeURIComponent(Y)}`,{headers:{accept:"application/json"}});if(!te.ok){D(ee=>({...ee,[Y]:"failed"}));return}const re=await te.json();re.ok&&re.data?(E(ee=>({...ee,[Y]:re.data})),D(ee=>({...ee,[Y]:void 0}))):D(ee=>({...ee,[Y]:"failed"}))}catch{D(te=>({...te,[Y]:"failed"}))}}}function U(Y){w(Y),H(te=>({...te,[Y]:"latest"})),j(Y)}async function z(){try{const Y=await fetch("/api/operator/v1/pi-plugins",{headers:{accept:"application/json"}});if(!Y.ok)throw new Error(`HTTP ${Y.status}`);const te=await Y.json();if(!te.ok||!te.data)throw new Error("invalid payload");t(te.data),r(null)}catch(Y){r(Y instanceof Error?Y.message:String(Y))}}async function W(Y=!1){if($!=="pending"){X("pending");try{const te=await fetch(`/api/operator/v1/pi-plugins/updates${Y?"?force=1":""}`,{headers:{accept:"application/json"}});if(!te.ok)throw new Error(`HTTP ${te.status}`);const re=await te.json();if(!re.ok||!re.data)throw new Error("invalid payload");const ee={};for(const ne of re.data.plugins)ee[ne.name]=ne;I(ee),X(void 0)}catch{X("failed")}}}_.useEffect(()=>{z(),W()},[]);async function F(Y,te,re){const ee=Date.now();f({name:te,kind:Y}),g(null);try{const ne=Y==="uninstall"?"uninstall":"install",de=re?{name:te,version:re}:{name:te},fe=await fetch(`/api/operator/v1/pi-plugins/${ne}`,{method:"POST",headers:{"Content-Type":"application/json","x-loop-console-confirmation":gn()},body:JSON.stringify(de)}),Re=await fe.json().catch(()=>({})),qe=Y==="install"?"安装":Y==="upgrade"?"升级":"卸载";if(!fe.ok||Re.ok!==!0){g({kind:"err",text:`${qe}失败: ${Re.error?.message??`HTTP ${fe.status}`}`});return}g({kind:"ok",text:`已${qe} ${te}${re&&Y!=="uninstall"?`@${re}`:""}。`}),w(null),await z(),Y!=="uninstall"&&await W(!0)}catch(ne){g({kind:"err",text:`${Y==="install"?"安装":Y==="upgrade"?"升级":"卸载"}出错: ${ne instanceof Error?ne.message:String(ne)}`})}finally{const ne=Date.now()-ee,de=Math.max(0,KV-ne);de>0&&await new Promise(fe=>setTimeout(fe,de)),f(null)}}const O=_.useMemo(()=>{if(!e)return[];const Y=i.trim().toLowerCase();let te=e.plugins.filter(re=>re.valid);return Y&&(te=te.filter(re=>re.name.toLowerCase().includes(Y)||(re.descriptionZh??re.description??"").toLowerCase().includes(Y))),[...te].sort((re,ee)=>{const ne=re.installed?1:0,de=ee.installed?1:0;return ne!==de?de-ne:re.name.localeCompare(ee.name)})},[e,i]),B=Math.max(1,Math.ceil(O.length/l)),L=Math.min(y,B),V=O.slice((L-1)*l,L*l),oe=O.length===0?0:(L-1)*l+1,K=Math.min(L*l,O.length);function Q(){v(1)}const G=e?e.plugins.filter(Y=>Y.installed).length:0,M=Object.values(T).filter(Y=>Y.upgradable),ce=new Set(M.map(Y=>Y.name));return c.jsxs("section",{className:"panel","aria-labelledby":"pi-plugins-title",children:[c.jsx("h2",{id:"pi-plugins-title",children:"Pi 插件"}),c.jsxs("p",{className:"muted",children:['一键安装 Pi 插件(全局用户级 ~/.pi/agent)。仅"可安装"的包在 npm 上声明了 ',c.jsx("code",{children:"pi.extensions"}),"。"]}),e?c.jsxs("p",{className:"muted",children:["可安装插件:",e.summary.valid," 个 · 已安装 ",G," 个",M.length>0?c.jsxs(c.Fragment,{children:[" · ",c.jsxs("span",{className:"oc-plugin-updates-count",children:[M.length," 个可升级"]})]}):null]}):null,c.jsxs("div",{className:"oc-plugin-controls",children:[c.jsx("input",{type:"search",placeholder:"搜索插件名 / 说明…",value:i,onChange:Y=>{a(Y.target.value),Q()},className:"oc-plugin-search"}),c.jsxs("label",{className:"oc-plugin-filter",children:["每页",c.jsx("select",{value:l,onChange:Y=>{u(Number(Y.target.value)),Q()},className:"oc-plugin-pagesize",children:VV.map(Y=>c.jsx("option",{value:Y,children:Y},Y))})]}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:$==="pending",onClick:()=>{W(!0)},children:$==="pending"?"检查更新中…":"检查更新"}),c.jsx("button",{type:"button",className:"btn",onClick:()=>{z()},children:"刷新"})]}),$==="failed"?c.jsx("p",{className:"oc-plugin-updates-note",children:"更新检查失败,已装插件暂不显示升级按钮。"}):null,n?c.jsxs("p",{className:"error",children:["加载失败:",n]}):null,p?c.jsx("p",{className:`oc-plugin-notice is-${p.kind}`,children:p.text}):null,e?c.jsx("ul",{className:"oc-plugin-list",children:V.map(Y=>{const te=h!==null&&h.name===Y.name?h:null;return c.jsxs("li",{className:"oc-plugin-row",children:[c.jsxs("div",{className:"oc-plugin-meta",children:[c.jsxs("span",{className:"oc-plugin-name",children:[Y.name,Y.installed?c.jsxs("span",{className:"oc-plugin-badge is-installed",children:["已安装",Y.installedVersion?` v${Y.installedVersion}`:""]}):null,Y.deprecated?c.jsx("span",{className:"oc-plugin-badge is-deprecated",children:"已弃用"}):null]}),c.jsx("span",{className:"oc-plugin-desc",children:Y.descriptionZh??Y.description??"(无说明)"})]}),c.jsx("div",{className:"oc-plugin-actions",children:te?c.jsxs("span",{className:"oc-plugin-progress-wrap",children:[c.jsx("span",{className:"oc-plugin-progress",children:c.jsx(XV,{})}),c.jsx("span",{className:"oc-plugin-progress-label",children:te.kind==="install"?"安装中…":te.kind==="upgrade"?"升级中…":"卸载中…"})]}):Y.installed?c.jsxs("span",{className:"oc-plugin-installed-actions",children:[ce.has(Y.name)?c.jsxs("button",{type:"button",className:"btn oc-plugin-upgrade-btn",onClick:()=>{F("upgrade",Y.name,T[Y.name]?.latest)},children:["升级",T[Y.name]?.latest?` v${T[Y.name]?.latest}`:""]}):null,c.jsx("button",{type:"button",className:"btn",onClick:()=>{F("uninstall",Y.name)},children:"卸载"})]}):S===Y.name?c.jsxs("span",{className:"oc-plugin-version-pick",children:[A[Y.name]==="pending"?c.jsxs("span",{className:"oc-plugin-version-loading",children:[c.jsx(YV,{}),c.jsx("span",{children:"正在获取版本…"})]}):null,A[Y.name]==="failed"?c.jsxs("span",{className:"oc-plugin-version-failed",children:["版本获取失败,将安装最新",c.jsx("button",{type:"button",className:"oc-plugin-version-retry",onClick:()=>{j(Y.name)},children:"重试"})]}):null,c.jsxs("select",{value:P[Y.name]??"latest",onChange:re=>H(ee=>({...ee,[Y.name]:re.target.value})),className:"oc-plugin-version-select",disabled:A[Y.name]==="pending",children:[c.jsx("option",{value:"latest",children:"最新(默认)"}),(C[Y.name]?.versions??[]).map(re=>c.jsx("option",{value:re,children:re},re))]}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:A[Y.name]==="pending",onClick:()=>{const re=P[Y.name]??"latest";F("install",Y.name,re==="latest"?void 0:re)},children:"确认安装"}),c.jsx("button",{type:"button",className:"btn",onClick:()=>w(null),children:"取消"})]}):c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:!Y.valid,onClick:()=>U(Y.name),children:"安装"})})]},Y.name)})}):c.jsx("p",{className:"muted",children:"加载中…"}),c.jsxs("div",{className:"oc-plugin-pager",children:[c.jsx("button",{type:"button",className:"btn",disabled:L<=1,onClick:()=>v(Y=>Math.max(1,Y-1)),children:"上一页"}),c.jsxs("span",{className:"oc-plugin-pager-info",children:["第 ",L," / ",B," 页 · ",oe,"-",K," / ",O.length]}),c.jsx("button",{type:"button",className:"btn",disabled:L>=B,onClick:()=>v(Y=>Math.min(B,Y+1)),children:"下一页"})]})]})}const QV=[{value:"requirements-changed",label:"需求已变更"},{value:"suspected-runaway",label:"疑似失控"},{value:"resource-protection",label:"保护资源"},{value:"operator-request",label:"操作者请求"},{value:"other",label:"其他"}];function t6(e){const{lane:t,cta:n,planSummary:r,reason:i,busy:a,confirmRef:l}=e;return!n||n.lane!==t?null:c.jsxs("div",{ref:l,className:"recovery-confirm","data-testid":"recovery-confirm",children:[c.jsxs("h3",{children:["待确认:",n.label]}),c.jsx("p",{className:"muted",children:n.id==="reconcile"?"破坏性对账需经浏览器 Human Gate 确认。请核对运行与原因后再点「确定」。":n.id==="interrupt"?"协作中止需经浏览器 Human Gate。原因已按当前运行预填,可改分类或编辑后再确定。提交只表示请求已登记,当前节点仍会跑完。":"核对上方运行 / 节点与恢复原因后直接执行;服务端会校验资格,不再走 Human Gate。"}),n.id==="interrupt"?c.jsxs("fieldset",{className:"recovery-reason-code","data-testid":"recovery-interrupt-reason-code",disabled:a,children:[c.jsx("legend",{children:"原因分类"}),c.jsx("div",{className:"recovery-reason-code-group",children:QV.map(u=>{const h=(e.reasonCode??"operator-request")===u.value;return c.jsxs("label",{className:h?"recovery-reason-code-option is-active":"recovery-reason-code-option",children:[c.jsx("input",{type:"radio",name:"recovery-interrupt-reason-code",value:u.value,checked:h,onChange:()=>e.onReasonCodeChange?.(u.value)}),u.label]},u.value)})})]}):null,r?c.jsxs("div",{className:"recovery-plan-summary",children:[c.jsxs("p",{className:"muted",children:["计划 eligible=",String(r.eligible??"—")," · 风险=",l6[r.risk??""]??r.risk??"—"]}),r.effectiveFromNodeId?c.jsxs("p",{className:"muted",children:["有效起点:",r.effectiveFromNodeId]}):null,r.estimatedExecution?c.jsxs("p",{className:"muted",children:["将执行 ",r.estimatedExecution.nodeCount??"?"," 个节点 / ",r.estimatedExecution.piCallCount??"?"," 次 Pi;预计避免"," ",r.estimatedExecution.avoidedNodeCount??"?"," 个节点"]}):null,r.planHash?c.jsxs("p",{className:"muted",children:["planHash: ",c.jsxs("code",{children:[r.planHash.slice(0,16),"…"]})]}):null]}):n.id==="dagRerun"?c.jsx("p",{className:"muted",children:"未加载计划摘要;点「确定」前将再次尝试资格检查。"}):null,c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:a||!i.trim(),"data-testid":"recovery-confirm-submit",onClick:e.onSubmit,children:"确定"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:a,"data-testid":"recovery-confirm-cancel",onClick:e.onCancel,children:"取消"})]})]})}function JV(e){const{shell:t,recovery:n,wizard:r}=e,{busy:i}=t,a=GT({interruptStatus:n.interruptEligibility?.interruptStatus,dagStatus:n.recoveryRunStatus,failureCategory:n.recoveryFailureCategory,targetOperationState:n.interruptEligibility?.targetOperationState}),l={planSummary:n.recoveryPlanSummary,reason:n.recoveryReason,reasonCode:n.interruptReasonCode,onReasonCodeChange:n.setInterruptReasonCode,busy:i,confirmRef:n.recoveryConfirmRef,onSubmit:()=>{n.submitRecoveryConfirm()},onCancel:()=>{n.setRecoveryConfirm(null),n.setRecoveryPlanSummary(null)}};return c.jsxs("section",{className:"panel","aria-labelledby":"recovery-title",children:[c.jsx("h2",{id:"recovery-title",children:"恢复"}),c.jsxs("p",{className:"muted",children:["事实分类:",c6[n.recoveryFact]," · 无 Cancel · 无「直接改代码」"]}),n.frontendRecovery?c.jsxs("div",{className:"muted","data-testid":"frontend-recovery-lineage",style:{marginBottom:"0.75rem"},children:[c.jsxs("div",{children:["前端恢复:outcome=",c.jsx("code",{children:n.frontendRecovery.outcome??"—"})," phase=",c.jsx("code",{children:n.frontendRecovery.phase??"—"})]}),c.jsxs("div",{children:["root ",c.jsx("code",{children:n.frontendRecovery.recoveryRootRunId??"—"}),n.frontendRecovery.parentRunId?` · parent ${n.frontendRecovery.parentRunId}`:"",n.frontendRecovery.childRunId?` · child ${n.frontendRecovery.childRunId}`:"",n.frontendRecovery.attemptIndex!==void 0?` · attempt ${n.frontendRecovery.attemptIndex}`:""]})]}):null,c.jsxs("ol",{className:"muted recovery-steps",children:[c.jsx("li",{children:"上方选 DAG 运行 / 节点,用「DAG 运行恢复」动作"}),c.jsx("li",{children:"Worker 持有的失败 run 用下方「Worker Task 重排队」;独立 DAG run 无法从节点恢复时才用「带反馈重新执行任务」"}),c.jsx("li",{children:"带 * 的动作:核对预填原因后点「确定」。重跑/重试直接执行;对账与中止运行走 Human Gate"})]}),a?c.jsxs("p",{className:"muted","data-testid":"recovery-interrupt-status",children:["中止进度:",a]}):null,n.recoveryFact==="running-active"&&n.interruptEligibility&&!n.interruptEligibility.eligible&&(!n.interruptEligibility.interruptStatus||n.interruptEligibility.interruptStatus==="none")?c.jsx("p",{className:"muted","data-testid":"recovery-interrupt-unavailable",children:n.interruptEligibility.ownerKind==="worker-managed"?"此运行不由当前 Console 持有,暂不支持协作中止。请用 Doctor / 报告查看。":n.interruptEligibility.message??"当前运行不具备协作中止资格。"}):null,c.jsxs("p",{className:"muted",children:[r.taskId.trim()?`按任务 ${r.taskId.trim()} 拉取候选。`:"未填任务 ID 时列出最近 DAG 运行。","Doctor 诊断可选,不是重跑前置。"," ",c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:i||n.recoveryRunsLoading,"data-testid":"recovery-refresh-candidates",onClick:()=>{n.loadRecoveryRuns()},children:n.recoveryRunsLoading?"刷新中…":"刷新候选"})]}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"DAG 运行 ID"}),!n.manualRunId&&n.recoveryRuns.length>0?c.jsxs("select",{"data-testid":"recovery-run-select",value:n.dagRunId,disabled:i||n.recoveryRunsLoading,onChange:u=>{n.setManualRunId(!1),n.setManualNodeId(!1),n.setFromNodeId(""),n.setDagRunId(u.target.value),n.recoveryReasonTouched||n.setRecoveryReasonTouched(!1)},children:[n.recoveryRuns.some(u=>u.dagRunId===n.dagRunId)?null:c.jsx("option",{value:n.dagRunId||"",children:n.dagRunId?`${n.dagRunId}(当前)`:"— 请选择 —"}),n.recoveryRuns.map(u=>c.jsx("option",{value:u.dagRunId,children:tR(u)},u.dagRunId))]}):c.jsx("input",{"data-testid":"recovery-run-input",value:n.dagRunId,disabled:i,onChange:u=>{n.setManualRunId(!0),n.setDagRunId(u.target.value.trim())},placeholder:"dag-run-id(节点恢复/完整重新执行)"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:i,"data-testid":"recovery-run-manual-toggle",onClick:()=>{if(!n.manualRunId&&n.recoveryRuns.length>0){n.setManualRunId(!0);return}n.setManualRunId(!1),n.loadRecoveryRuns()},children:!n.manualRunId&&n.recoveryRuns.length>0?"手动输入运行 ID":"刷新并改用下拉"})]}),c.jsxs("label",{className:"field",children:[c.jsxs("span",{className:"muted",children:["起始节点 ID(从失败节点恢复)",n.recoveryNodesLoading?" · 加载节点…":""]}),!n.manualNodeId&&n.recoveryNodes.length>0?c.jsxs("select",{"data-testid":"recovery-node-select",value:n.fromNodeId,disabled:i||n.recoveryNodesLoading,onChange:u=>{n.setManualNodeId(!1),n.setFromNodeId(u.target.value)},children:[n.recoveryNodes.some(u=>u.nodeId===n.fromNodeId)?null:c.jsx("option",{value:n.fromNodeId||"",children:n.fromNodeId?`${n.fromNodeId}(当前)`:"— 请选择 —"}),n.recoveryNodes.map(u=>c.jsx("option",{value:u.nodeId,children:nR(u)},u.nodeId))]}):c.jsx("input",{"data-testid":"recovery-node-input",value:n.fromNodeId,disabled:i,onChange:u=>{n.setManualNodeId(!0),n.setFromNodeId(u.target.value.trim())},placeholder:"例如 review-verdict-recovery-pi"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:i,"data-testid":"recovery-node-manual-toggle",onClick:()=>{if(!n.manualNodeId&&n.recoveryNodes.length>0){n.setManualNodeId(!0);return}n.setManualNodeId(!1),n.loadRecoveryNodes(n.dagRunId)},children:!n.manualNodeId&&n.recoveryNodes.length>0?"手动输入节点 ID":"刷新并改用下拉"})]}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"恢复原因(已按 run/节点失败事实自动预填,可编辑)"}),c.jsx("textarea",{"data-testid":"recovery-reason",value:n.recoveryReason,disabled:i,rows:4,onChange:u=>{n.setRecoveryReasonTouched(!0),n.setRecoveryReason(u.target.value)},placeholder:"将自动预填 operator-recovery / run / from-node / detail"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:i,"data-testid":"recovery-reason-refresh",onClick:()=>{n.setRecoveryReasonTouched(!1),n.setRecoveryReason(n.buildCurrentRecoveryReason(n.recoveryConfirm?.label))},children:"重新预填原因"})]}),c.jsxs("div",{className:"recovery-lane","data-testid":"recovery-lane-dag",children:[c.jsx("h3",{children:"DAG 运行恢复"}),c.jsx("p",{className:"muted",children:"针对 `.harness/dag-runs` 的 Agent DAG 运行。橙色为当前建议;带 * 需确认原因。"}),c.jsxs("div",{className:"recovery-cta-row","data-testid":"recovery-cta-row-dag",children:[n.recoveryLanes.dag.map(u=>{const h=u.id===n.recommendedCtaId;return c.jsxs("button",{type:"button",className:h?"btn btn-primary":"btn btn-secondary",disabled:i,title:u.guide,"aria-pressed":n.recoveryConfirm?.id===u.id?!0:void 0,"data-testid":`recovery-cta-${u.id}`,"data-recommended":h?"true":void 0,onClick:()=>{n.handleRecoveryCta(u)},children:[u.label,u.requiresReason?" *":""]},u.id)}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:!n.dagRunId.trim(),"data-testid":"recovery-dag-preview",title:"在本页侧栏预览,可关闭返回",onClick:()=>{if(!n.dagRunId.trim()){t.setOpError("侧栏预览需要先选择 DAG 运行 ID");return}n.setInspectSplitOpen(!0)},children:"侧栏预览"})]}),n.recoveryReport?c.jsxs("div",{className:"recovery-report","data-testid":"recovery-report",children:[c.jsxs("div",{className:"recovery-report-header",children:[c.jsx("h3",{children:"交接报告摘要"}),c.jsx("button",{type:"button",className:"btn btn-ghost","data-testid":"recovery-report-close",onClick:()=>n.setRecoveryReport(null),children:"关闭"})]}),c.jsxs("dl",{className:"recovery-report-facts",children:[c.jsxs("div",{children:[c.jsx("dt",{children:"运行"}),c.jsx("dd",{children:c.jsx("code",{children:n.recoveryReport.runId})})]}),n.recoveryReport.title?c.jsxs("div",{children:[c.jsx("dt",{children:"标题"}),c.jsx("dd",{children:n.recoveryReport.title})]}):null,c.jsxs("div",{children:[c.jsx("dt",{children:"状态"}),c.jsx("dd",{children:n.recoveryReport.status??"—"})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"失败分类"}),c.jsx("dd",{children:n.recoveryReport.category??"—"})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"建议"}),c.jsx("dd",{children:n.recoveryReport.recommendation??"暂无结构化建议"})]})]}),c.jsxs("p",{className:"muted",children:["完整 Markdown 可用 CLI:",c.jsxs("code",{children:["loop-agent dag report --run-id"," ",n.recoveryReport.runId," --markdown"]})]})]}):null,c.jsx(t6,{lane:"dag",cta:n.recoveryConfirm,...l})]}),c.jsxs("div",{className:"recovery-lane","data-testid":"recovery-lane-worker",children:[c.jsx("h3",{children:"Worker Task 重排队"}),c.jsx("p",{className:"muted",children:"针对 agent-worker Task Pool,不是 DAG run。需要 Task ID;Feature ID 可选。"}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"Task ID(Worker 重排队必填)"}),c.jsx("input",{"data-testid":"recovery-worker-task-id",value:r.taskId,disabled:i,onChange:u=>r.setTaskId(u.target.value.trim()),placeholder:"harness / worker task-id"})]}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"Feature ID(可选)"}),c.jsx("input",{"data-testid":"recovery-feature-id",value:n.featureId,disabled:i,onChange:u=>n.setFeatureId(u.target.value.trim()),placeholder:"feature-id"})]}),c.jsx("div",{className:"recovery-cta-row","data-testid":"recovery-cta-row-worker",children:n.recoveryLanes.worker.length>0?n.recoveryLanes.worker.map(u=>c.jsxs("button",{type:"button",className:u.id===n.recommendedCtaId?"btn btn-primary":"btn btn-secondary",disabled:i,title:u.guide,"data-testid":`recovery-cta-${u.id}`,"data-recommended":u.id===n.recommendedCtaId?"true":void 0,onClick:()=>{n.handleRecoveryCta(u)},children:[u.label,u.requiresReason?" *":""]},u.id)):c.jsx("p",{className:"muted","data-testid":"recovery-worker-unavailable",children:"当前事实分类下不提供 Worker 重排队。"})}),c.jsx(t6,{lane:"worker",cta:n.recoveryConfirm,...l})]}),c.jsx("div",{className:"recovery-cta-row","data-testid":"recovery-cta-row",hidden:!0,children:n.recoveryCtas.map(u=>c.jsx("span",{children:u.id},u.id))}),n.observeLinkMessage?c.jsxs("p",{className:"muted",children:["[",iT[n.observeLinkStatus],"]"," ",n.observeLinkMessage]}):null,n.observeUrl?c.jsx("p",{className:"muted",children:c.jsx("a",{className:"external-link",href:so(n.observeUrl),children:n.observeUrl})}):null]})}function eK(e){const{health:t,readiness:n,healthError:r,layers:i,setupBlocked:a,degraded:l,busy:u,runAction:h}=e;return c.jsxs(c.Fragment,{children:[c.jsxs("section",{className:"panel","aria-labelledby":"settings-title",children:[c.jsx("h2",{id:"settings-title",children:"设置"}),c.jsxs("dl",{className:"kv",children:[c.jsxs("div",{children:[c.jsx("dt",{children:"产品"}),c.jsx("dd",{children:t?.productName??"Loop Operator Console"})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"仓库根目录"}),c.jsx("dd",{children:c.jsx("code",{children:t?.repoRoot??"—"})})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"仓库指纹"}),c.jsx("dd",{children:c.jsx("code",{title:t?.repoFingerprint??void 0,children:t?.repoFingerprint?`${t.repoFingerprint.slice(0,12)}…`:"—"})})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"Pi 就绪"}),c.jsxs("dd",{children:[c.jsxs("code",{children:[o6[n]??n,"(",n,")"]}),a?c.jsx("p",{className:"muted",children:"Pi SDK / 认证 / 模型未就绪。不提供纯表单兜底。请前往「模型与认证」。"}):l?c.jsx("p",{className:"muted",children:"Pi 暂时降级:仍可恢复草稿与需求访谈。"}):null]})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"Inspect"}),c.jsxs("dd",{children:[c.jsx("code",{children:"/inspect/"}),"(同一 Console 进程)"]})]})]}),r?c.jsx("p",{className:"error",children:r}):null]}),c.jsxs("section",{className:"panel","aria-labelledby":"console-update-title",children:[c.jsx("h2",{id:"console-update-title",children:"全局程序更新"}),c.jsx("p",{className:"muted",children:"升级本机 Console 所用程序包。工作区初始化请在侧栏设置的“当前工作区”中操作。有活跃 DAG、Worker、对话回合或无法证明的全局安装时会阻断。观测页只读,不含此入口。"}),c.jsx(H6,{operatorBusy:u})]}),c.jsxs("section",{className:"panel","aria-labelledby":"layers-title",children:[c.jsx("h2",{id:"layers-title",children:"完成语义分层"}),c.jsx("p",{className:"muted",children:"MVP 不执行收尾提交;不显示「任务已关闭/已交付」。"}),c.jsxs("dl",{className:"kv","data-testid":"completion-layers",children:[c.jsxs("div",{children:[c.jsx("dt",{children:"命令"}),c.jsx("dd",{children:wh(i.command)})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"DAG 生命周期"}),c.jsx("dd",{children:wh(i.dag)})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"最终验证"}),c.jsx("dd",{children:wh(i.verification)})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"晋升"}),c.jsx("dd",{children:wh(i.promote)})]}),c.jsxs("div",{children:[c.jsx("dt",{children:"任务关闭"}),c.jsx("dd",{children:"不可用(MVP)"})]})]})]})]})}function tK(e){const t=[`fragments=${e.fragmentCount}`,`canonical=${e.canonicalRequirementCount}`,`context-only=${e.contextOnlyCount}`,`duplicate=${e.duplicateCount}`,`unresolved=${e.unresolvedCount}`,`conflict=${e.conflictCount}`];return e.bindingSchemaVersion===2&&(t.push(`binding=v2${e.stale?" · STALE(输入漂移)":""}`),e.ledgerSha256&&t.push(`ledgerSha256=${e.ledgerSha256}`),e.inputDigest&&t.push(`inputDigest=${e.inputDigest}`)),t.join(" ")}function Ny(e){const{ledgerLoading:t=!1,ledgerError:n=null,ledgerSummary:r=null}=e;return c.jsxs("div",{className:"contract-checks","data-testid":"ledger-summary-block","aria-busy":t||void 0,"aria-labelledby":"ledger-summary-heading",children:[c.jsx("h4",{id:"ledger-summary-heading",children:"Source fidelity ledger"}),t?c.jsxs("p",{className:"muted",role:"status",children:[c.jsx("span",{className:"sr-only",children:"ledger 加载中"}),"加载中…"]}):n?c.jsxs("p",{className:"muted",role:"alert",children:["ledger 只读接口失败:",n,"(安全降级,不展示敏感内容)"]}):!r||r.present!==!0?c.jsx("p",{className:"empty",role:"status",children:"无 source fidelity ledger(任务无引用或 ledger 缺失,不伪造计数)"}):c.jsxs(c.Fragment,{children:[c.jsxs("p",{children:[c.jsx("strong",{children:"gate"}),": ",eT(r.gateStatus),r.bindingSchemaVersion===2?c.jsxs(c.Fragment,{children:[" ",c.jsxs("code",{"data-testid":"ledger-binding-version",children:["binding v2",r.stale?" · STALE":""]})]}):null,r.failureCode?c.jsxs(c.Fragment,{children:[" ",c.jsx("code",{"data-testid":"ledger-failure-code",children:r.failureCode})]}):null]}),c.jsx("pre",{className:"cmd","data-testid":"ledger-summary",children:tK(r)}),r.exclusions.length>0?c.jsx("ul",{"data-testid":"ledger-exclusions",children:r.exclusions.slice(0,10).map(i=>c.jsxs("li",{className:"muted",children:[c.jsx("code",{children:i.fragmentId}),": ",i.reason]},i.fragmentId))}):null]})]})}function nK(e){const{busy:t,taskId:n,confirmationId:r,confirmationDetails:i,ledgerLoading:a=!1,ledgerError:l=null,ledgerSummary:u=null,runAction:h,onConfirmAndRun:f}=e;return c.jsxs("div",{"data-testid":"panel-dag-confirm",children:[c.jsx("h3",{children:"DAG 确认(§5.5)"}),c.jsxs("ul",{className:"checklist",children:[c.jsx("li",{children:"源绑定(source)"}),c.jsx("li",{children:"Writer 写集范围(writer-scope)"}),c.jsx("li",{children:"验证命令(verification)"}),c.jsx("li",{children:"人工门禁(human-gates)"})]}),i?c.jsx("pre",{className:"cmd",children:JSON.stringify(i,null,2).slice(0,4e3)}):null,c.jsx(Ny,{ledgerLoading:a,ledgerError:l,ledgerSummary:u}),c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:t,onClick:()=>{h("prepareDagConfirmation",{taskId:n,dagHandle:`${n}.dag.json`,profile:"auto"})},children:"生成 DAG 并准备确认"}),c.jsx("button",{type:"button",className:"btn btn-primary",disabled:t||!r,onClick:f,children:"开始运行"})]}),r?c.jsxs("p",{className:"muted",children:["确认 ID: ",c.jsx("code",{children:r})]}):null]})}function rK(e){const{busy:t,degraded:n,taskId:r,assessmentId:i,contractValidateOk:a,contractValidateSummary:l,contractDiffSummary:u,contractApplied:h,spineOk:f,ledgerLoading:p=!1,ledgerError:g=null,ledgerSummary:y=null,onRerunPreflight:v,onApplyContract:S,onRetrySpine:w}=e;return c.jsxs("div",{"data-testid":"panel-contract",children:[c.jsx("h3",{children:"契约落地"}),c.jsx("p",{className:"muted",children:"进入本步后自动跑确定性校验与差异(非 AI 代判)。写入仓库仍需你人工确认一次;应用成功后会自动跑 Spine 审计。"}),c.jsxs("p",{className:"muted",children:["评估 ID: ",c.jsx("code",{children:i??"—"})]}),c.jsxs("div",{className:"contract-checks",children:[c.jsxs("p",{children:[c.jsx("strong",{children:"校验"}),":"," ",a===null?t?"进行中…":"等待开始":a?"通过":"未通过"]}),l?c.jsx("pre",{className:"cmd","data-testid":"contract-validate-summary",children:l}):null,c.jsxs("p",{children:[c.jsx("strong",{children:"差异"}),u?"":":尚未拉取"]}),u?c.jsx("pre",{className:"cmd","data-testid":"contract-diff-summary",children:u}):null,h?c.jsxs("p",{children:[c.jsx("strong",{children:"Spine"}),":"," ",f===null?"待检查":f?"通过":"未通过"]}):null]}),c.jsx(Ny,{ledgerLoading:p,ledgerError:g,ledgerSummary:y}),c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:t||!r.trim(),onClick:v,children:"重新校验"}),c.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"contract-apply",disabled:t||n||!i||a!==!0||h,onClick:S,children:"确认并应用契约"}),h&&f===!1?c.jsx("button",{type:"button",className:"btn btn-primary",disabled:t,onClick:w,children:"重试 Spine"}):null]})]})}function iK(e){const{busy:t,taskKind:n,onTaskKindChange:r,workflowHint:i,prd:a,engineering:l,onEngineeringChange:u,onImport:h}=e,f=t||a.prdFileReading;return c.jsxs("div",{"data-testid":"panel-import-prd",children:[c.jsx("h3",{children:"导入需求"}),c.jsx("p",{className:"muted",children:"粘贴、选择或拖入一份或多份 PRD / 需求 Markdown。多文件会分别归档到 source/references,并合成一份可编辑正文。创建前可继续编辑。 系统会对 PRD 做确定性/语义结构化;工程边界(路径与验证)须人类确认,不会由模型编造。"}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"流程类型"}),c.jsx("select",{"data-testid":"workflow-kind-select",value:n,disabled:t||a.prdFileReading,onChange:p=>r(p.target.value),children:q1.map(p=>c.jsx("option",{value:p.kind,children:p.label},p.kind))})]}),c.jsxs("p",{className:"workflow-hint","data-testid":"workflow-kind-hint",children:[i," · taskKind=",c.jsx("code",{children:n})]}),c.jsxs("div",{className:`prd-drop-zone${a.prdDragOver?" is-dragover":""}`,"data-testid":"prd-drop-zone","data-dragover":a.prdDragOver?"true":"false",onDragEnter:p=>a.onDragEnter(p,f),onDragOver:p=>{p.preventDefault(),p.stopPropagation()},onDragLeave:a.onDragLeave,onDrop:p=>a.onDrop(p,f),children:[c.jsxs("div",{className:"prd-upload-toolbar",children:[c.jsxs("label",{className:`btn btn-ghost prd-upload-btn${f?" is-disabled":""}`,children:["选择需求文档",c.jsx("input",{type:"file",accept:RT,multiple:!0,hidden:!0,disabled:f,"data-testid":"prd-file-input",onChange:p=>{const g=p.currentTarget;a.loadPrdFromFiles(g.files).finally(()=>{g.value=""})}})]}),c.jsxs("span",{className:"muted prd-upload-hint",children:["支持多文件 .md / .markdown / .txt,单文件最大"," ",F1($1),",最多 ",_f," 个"]}),a.prdDocuments.length>0?c.jsx("button",{type:"button",className:"btn btn-ghost","data-testid":"prd-recompose",disabled:f,onClick:a.recomposeDocuments,children:"按文件重新合成"}):null]}),a.prdDocuments.length>0?c.jsx("ul",{className:"prd-file-list","data-testid":"prd-file-list",children:a.prdDocuments.map((p,g)=>c.jsxs("li",{className:g===a.prdPrimaryIndex?"is-primary":void 0,"data-testid":`prd-file-item-${g}`,children:[c.jsxs("span",{className:"prd-file-item-name",children:[p.fileName,g===a.prdPrimaryIndex?c.jsx("span",{className:"prd-file-primary-tag",children:"主"}):null,c.jsxs("span",{className:"muted",children:[" ","· ",F1(p.sourceBytes)]})]}),c.jsxs("span",{className:"prd-file-item-actions",children:[c.jsx("button",{type:"button",className:"btn btn-ghost",disabled:f||g===a.prdPrimaryIndex,onClick:()=>a.setPrimaryDocument(g),children:"设为主"}),c.jsx("button",{type:"button",className:"btn btn-ghost",disabled:f||g===0,onClick:()=>a.moveDocument(g,-1),children:"上移"}),c.jsx("button",{type:"button",className:"btn btn-ghost",disabled:f||g===a.prdDocuments.length-1,onClick:()=>a.moveDocument(g,1),children:"下移"}),c.jsx("button",{type:"button",className:"btn btn-ghost",disabled:f,onClick:()=>a.removeDocument(g),children:"移除"})]})]},`${p.fileName}-${g}`))}):null,a.prdDocuments.length>0?c.jsxs("div",{className:"prd-file-meta",children:[c.jsxs("span",{children:["分卷=上传原件(将分别归档);正文=本会话采用稿",a.prdComposedDirty?"(已手动编辑)":""]}),c.jsx("button",{type:"button",className:"btn btn-ghost prd-file-clear","data-testid":"prd-file-clear",disabled:f,onClick:a.clearDocuments,children:"清除来源列表"})]}):null,a.prdDragOver?c.jsx("p",{className:"prd-drop-hint","data-testid":"prd-drop-hint",children:"释放以载入"}):null,c.jsxs("label",{className:"field prd-text-field",children:[c.jsx("span",{className:"muted",children:"PRD Markdown"}),c.jsx("textarea",{rows:10,value:a.prdText,disabled:f,"data-testid":"prd-textarea",onChange:p=>a.onPrdTextChange(p.target.value)})]})]}),a.prdFileError?c.jsx("p",{className:"prd-file-error",role:"alert","aria-live":"polite","data-testid":"prd-file-error",children:a.prdFileError}):null,c.jsxs("details",{className:"engineering-boundary","data-testid":"engineering-boundary",children:[c.jsx("summary",{children:"工程边界(可选,人类确认)"}),c.jsxs("p",{className:"muted",children:["逗号或换行分隔。留空则 intake 后进入访谈补齐;不会自动填",c.jsx("code",{children:"src/worker/console/**"})," 模板。"]}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"allowedPaths"}),c.jsx("textarea",{rows:2,value:l.allowedPathsText,disabled:f,"data-testid":"prd-allowed-paths",placeholder:"src/**, test/**",onChange:p=>u({allowedPathsText:p.target.value})})]}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"forbiddenPaths"}),c.jsx("textarea",{rows:2,value:l.forbiddenPathsText,disabled:f,"data-testid":"prd-forbidden-paths",placeholder:".harness/**, node_modules/**",onChange:p=>u({forbiddenPathsText:p.target.value})})]}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"verifyCommands(label:command 或纯命令)"}),c.jsx("textarea",{rows:2,value:l.verifyCommandsText,disabled:f,"data-testid":"prd-verify-commands",placeholder:"typecheck:npm run typecheck",onChange:p=>u({verifyCommandsText:p.target.value})})]})]}),c.jsx("div",{className:"cta-row",children:c.jsxs("button",{type:"button",className:`btn btn-primary${t?" is-loading":""}`,disabled:t||a.prdFileReading||!a.prdText.trim(),"aria-busy":t||void 0,onClick:h,children:[t?c.jsx("span",{className:"spinner","aria-hidden":"true"}):null,t?"导入中…":"导入并创建任务"]})})]})}function sK(e){const{busy:t,taskId:n,taskTitle:r,taskKind:i,sessionId:a,question:l,answerText:u,onAnswerTextChange:h,draftSummary:f,assessmentId:p,runAction:g}=e;return c.jsxs("div",{"data-testid":"panel-interview",children:[c.jsx("h3",{children:"需求访谈(grill-me)"}),c.jsx("p",{className:"muted",children:"一次一问;也可跳过:系统会按推荐补齐草稿并签发评估,随后进入校验。 访谈中不可应用契约 / 运行 DAG / 对账。"}),f?c.jsx("pre",{className:"cmd","data-testid":"draft-summary",children:JSON.stringify(f,null,2)}):null,c.jsxs("div",{className:"cta-row",style:{marginBottom:"0.75rem"},children:[!a||!l?c.jsx("button",{type:"button",className:"btn btn-primary",disabled:t||!n.trim(),onClick:()=>{g("interviewStart",{taskId:n,title:r,taskKind:i})},children:"开始 / 继续访谈"}):null,c.jsx("button",{type:"button",className:"btn btn-ghost","data-testid":"interview-skip",disabled:t||!n.trim(),onClick:()=>{g("interviewSkip",{taskId:n,title:r,taskKind:i})},children:"跳过访谈"})]}),a&&l?c.jsxs("div",{className:"interview-card",children:[c.jsxs("p",{className:"interview-q",children:[c.jsx("strong",{children:l.id})," · 风险=",l6[l.risk??""]??l.risk??"—"]}),c.jsx("p",{children:l.text}),l.recommendation?c.jsxs("p",{className:"muted",children:["推荐:",l.recommendation]}):null,c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"你的回答(覆盖推荐)"}),c.jsx("textarea",{rows:3,value:u,disabled:t,onChange:y=>h(y.target.value)})]}),c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:t,onClick:()=>{g("interviewTurn",{sessionId:a,questionId:l.id,response:"accept-recommendation"}).then(()=>h(""))},children:"接受推荐"}),c.jsx("button",{type:"button",className:"btn btn-primary",disabled:t||!u.trim(),onClick:()=>{g("interviewTurn",{sessionId:a,questionId:l.id,response:"override",text:u}).then(()=>h(""))},children:"提交自定义回答"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:t||l.risk==="high",onClick:()=>{g("interviewTurn",{sessionId:a,questionId:l.id,response:"defer",text:u||l.recommendation}).then(()=>h(""))},children:"暂缓(非高风险)"})]})]}):null,p?c.jsxs("p",{className:"muted",children:["评估 ID: ",c.jsx("code",{children:p})]}):null]})}function aK({progress:e}){const t=e.total>0?Math.round(e.finished/e.total*100):0;return c.jsxs("div",{className:"run-progress","data-testid":"run-progress",children:[c.jsxs("div",{className:"run-progress-head",children:[c.jsxs("b",{children:["节点进度 ",e.finished,"/",e.total||"—",e.total>0?`(${t}%)`:""]}),c.jsx("span",{className:`run-progress-status${e.stalled?" is-stalled":""}`,"data-testid":"run-progress-status",children:e.effectiveStatus??"未知状态"})]}),c.jsx("div",{className:"run-progress-bar",role:"progressbar","aria-valuemin":0,"aria-valuemax":e.total,"aria-valuenow":e.finished,"aria-label":"DAG 节点完成进度",children:c.jsx("span",{style:{width:`${t}%`}})}),c.jsx("p",{className:"run-progress-current","data-testid":"run-progress-current",children:e.running?c.jsxs(c.Fragment,{children:["当前节点:",c.jsx("strong",{children:e.running.label}),"(已运行 ",Ov(e.currentNodeElapsedMs),")"]}):e.terminal?c.jsxs(c.Fragment,{children:["运行已结束(总时长 ",Ov(e.runElapsedMs),")"]}):c.jsx(c.Fragment,{children:"暂无正在运行的节点"})}),e.stalled?c.jsx("p",{className:"run-progress-stall","data-testid":"run-progress-stall",children:"疑似停滞:超过阈值没有实质进展。可打开检视查看节点活动,或到恢复页 使用协作中止 / 诊断入口判断是否继续等待。"}):null,e.failed?c.jsxs("p",{className:"run-progress-failed","data-testid":"run-progress-failed",children:["失败节点:",c.jsx("strong",{children:e.failed.label}),e.failed.errorPreview?` — ${e.failed.errorPreview}`:""]}):null]})}function oK(e){const{busy:t,confirmationId:n,operationId:r,dagRunId:i,observeBusy:a,ledgerLoading:l=!1,ledgerError:u=null,ledgerSummary:h=null,sseLog:f,progress:p,runAction:g,onStopFollow:y,onShowInspectSplit:v,onOpenInspectSplit:S}=e;return c.jsxs("div",{"data-testid":"panel-run",children:[c.jsx("h3",{children:"运行详情"}),c.jsxs("div",{className:"meta-row",children:[c.jsxs("div",{children:["操作 ID: ",c.jsx("code",{children:r??"—"})]}),c.jsxs("div",{children:["确认 ID: ",c.jsx("code",{children:n??"—"})]})]}),c.jsx(Ny,{ledgerLoading:l,ledgerError:u,ledgerSummary:h}),c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:t||!n,onClick:()=>{g("runDag",{confirmationId:n},{clientRequestId:pf("run")})},children:"重新运行"}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:y,children:"停止跟随日志"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:!i.trim(),onClick:v,children:"打开检视"}),c.jsx("button",{type:"button",className:"btn btn-ghost",disabled:a||!i.trim(),title:"在本页侧栏预览当前运行的 DAG,可关闭返回",onClick:S,children:"侧栏预览"})]}),p?c.jsx(aK,{progress:p}):null,c.jsxs("details",{className:"run-sse-log",children:[c.jsx("summary",{children:"原始事件日志(最近 80 条)"}),c.jsx("pre",{className:"cmd","data-testid":"sse-log",children:f.join(`
|
|
478
|
-
`)||"(尚无事件)"})]})]})}const OC=[2e3,2e3,4e3,4e3,8e3,8e3,15e3,15e3,3e4,3e4];function lK(e,t){if(e===!0)return{kind:"own"};if(e===!1)return{kind:"clear"};const n=OC[t];return n===void 0?{kind:"give-up"}:{kind:"retry",delayMs:n}}OC.reduce((e,t)=>e+t,0);function cK(){return{baseline:null,ownedRunId:"",pendingSelection:""}}function uK(e,t){const n=e.task===void 0,r=!n&&e.task!==t.task,i=!n&&e.dispatch!==t.dispatchId,a={...e,task:t.task,dispatch:t.dispatchId,pendingSelection:""};if(r)return a.baseline=null,a.ownedRunId="",{state:a,observation:{action:"reset-selection"}};if(i&&(a.ownedRunId="",t.selectedRunId))return a.baseline=t.selectedRunId,{state:a,observation:{action:"invalidate-selection"}};const l=t.selectedRunId;return l&&l!==a.ownedRunId?(a.pendingSelection=l,{state:a,observation:{action:"verify-ownership"}}):{state:a,observation:{action:l?"idle":"probe"}}}function n6(e){return{...e,baseline:null}}function dK(e,t){return{...e,baseline:t??""}}function hK(e,t){return!t.ok||!t.dagRunId?{state:e,acceptedRunId:null}:e.baseline===null||t.dagRunId===e.baseline?{state:e,acceptedRunId:null}:{state:{...e,ownedRunId:t.dagRunId},acceptedRunId:t.dagRunId}}function fK(e,t){return t?{state:{...e,ownedRunId:e.pendingSelection,pendingSelection:""},clearSelection:!1}:{state:{...e,ownedRunId:"",pendingSelection:"",baseline:null},clearSelection:!0}}async function r6(e){try{const{status:t,body:n}=await Jo("observeLink",{taskId:e});if(t>=400||n.ok===!1)return{ok:!1};const r=n.result??{};return{ok:!0,dagRunId:(typeof r.dagRunId=="string"?r.dagRunId.trim():"")||null}}catch{return{ok:!1}}}async function mK(e,t){try{const n=await fetch(yi(`/api/dag-runs/${encodeURIComponent(e)}`),{credentials:"same-origin"});if(n.status===404)return!1;if(!n.ok)return null;const r=await n.json(),i=typeof r.taskId=="string"?r.taskId.trim():"";return i?i===t.trim():null}catch{return null}}function pK(e){const{shell:t,actions:n,wizard:r,prd:i,recovery:a}=e,{busy:l,step:u,setupBlocked:h,degraded:f}=t,p=_.useRef(cK()),g=_.useRef(0),[y,v]=_.useState(""),S=_.useCallback(E=>{const A=++g.current;p.current=n6(p.current);const D=async P=>{const H=await r6(E);if(g.current===A){if(H.ok){p.current=dK(p.current,H.dagRunId);return}P>0&&window.setTimeout(()=>{D(P-1)},1500)}};D(8)},[]);_.useEffect(()=>{if(u!=="dag-confirm")return;const E=r.taskId.trim();if(!E){g.current+=1,p.current=n6(p.current);return}S(E)},[u,r.taskId,S]),_.useEffect(()=>{if(u!=="run")return;const E=r.taskId.trim();if(!E)return;const A=uK(p.current,{task:E,dispatchId:n.operationId??null,selectedRunId:a.dagRunId.trim()});switch(p.current=A.state,v(A.state.ownedRunId),A.observation.action){case"reset-selection":{a.setManualRunId(!1),a.setDagRunId(""),S(E);return}case"invalidate-selection":{a.setManualRunId(!1),a.setDagRunId("");return}case"verify-ownership":{const D=A.state.pendingSelection;let P=!1,H=0;const T=async I=>{if(P)return;const $=await mK(D,E);if(P)return;const X=lK($,I);if(X.kind==="own"||X.kind==="clear"){const j=fK(p.current,X.kind==="own");p.current=j.state,v(j.state.ownedRunId),j.clearSelection&&(a.setManualRunId(!1),a.setDagRunId(""),S(E));return}X.kind==="retry"&&(H=window.setTimeout(()=>{T(I+1)},X.delayMs))};return T(0),()=>{P=!0,window.clearTimeout(H)}}case"idle":return;case"probe":{p.current.baseline===null&&S(E);let D=!1,P=0,H=0;const T=async()=>{if(D)return;if(p.current.baseline===null){H+=1,H<120&&(P=window.setTimeout(()=>{T()},1e3));return}const I=await r6(E);if(D)return;H+=1;const $=hK(p.current,I);if(p.current=$.state,$.acceptedRunId){v($.state.ownedRunId),a.setManualRunId(!0),a.setDagRunId($.acceptedRunId);return}H<120&&(P=window.setTimeout(()=>{T()},2500))};return P=window.setTimeout(()=>{T()},1200),()=>{D=!0,window.clearTimeout(P)}}}},[u,n.operationId,r.taskId,a.dagRunId,a.setManualRunId,a.setDagRunId,S]);const w=a.dagRunId===y?a.dagRunId:"",C=C8(u==="run"?w:"");return c.jsxs("section",{className:"panel task-ops","aria-labelledby":"task-ops-title",children:[c.jsx("h2",{id:"task-ops-title",children:"任务操作"}),c.jsx("p",{className:"panel-lead",children:"按 Happy Path 推进;契约落地一步内自动校验,人工确认写入。"}),c.jsx("ol",{className:"wizard-steps","data-testid":"wizard-steps",children:r.wizardSteps.map((E,A)=>c.jsxs("li",{"data-active":u===E.id,"data-done":A<r.stepIndex,children:[c.jsx("span",{className:"step-index",children:String(A+1).padStart(2,"0")}),c.jsx("span",{className:"step-label",children:E.label})]},E.id))}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"任务 ID"}),c.jsx("input",{"data-testid":"task-id-input",value:r.taskId,disabled:l||h||u==="import-prd",placeholder:u==="import-prd"?"导入需求后自动生成":"task-id",onChange:E=>r.setTaskId(E.target.value.trim())})]}),r.taskTitle?c.jsxs("p",{className:"workflow-hint","data-testid":"task-title-chip",children:["任务名称:",r.taskTitle]}):null,u!=="import-prd"&&!h?c.jsxs("p",{className:"workflow-hint","data-testid":"workflow-kind-chip",children:["当前流程:",r.workflowMeta.label," ·"," ",c.jsx("code",{children:r.taskKind})]}):null,h||u==="setup"?c.jsxs("div",{className:"empty-state","data-testid":"setup-gate",children:[c.jsx("p",{className:"empty-title",children:"需要先完成设置"}),c.jsx("p",{className:"muted",children:"请先在「模型与认证」完成 Pi 就绪,再导入需求与访谈。"}),c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:l,onClick:()=>{t.selectNav("models"),n.runAction("refreshReadiness",{}).then(()=>t.loadHealth())},children:"刷新就绪状态"}),c.jsx("button",{type:"button",className:"btn btn-primary",disabled:l,onClick:()=>{n.runAction("doctor",{})},children:"运行诊断"}),c.jsx("pre",{className:"cmd",children:a6})]})]}):c.jsxs("div",{className:"wizard-body","data-testid":"wizard-body",children:[u==="import-prd"&&c.jsx(iK,{busy:l,taskKind:r.taskKind,onTaskKindChange:r.setTaskKind,workflowHint:r.workflowMeta.hint,prd:i,engineering:r.engineering,onEngineeringChange:r.setEngineering,onImport:()=>{r.importPrdAndCreate()}}),u==="interview"&&c.jsx(sK,{busy:l,taskId:r.taskId,taskTitle:r.taskTitle,taskKind:r.taskKind,sessionId:r.sessionId,question:r.question,answerText:r.answerText,onAnswerTextChange:r.setAnswerText,draftSummary:r.draftSummary,assessmentId:r.assessmentId,runAction:n.runAction}),u==="contract"&&c.jsx(rK,{busy:l,degraded:f,taskId:r.taskId,assessmentId:r.assessmentId,contractValidateOk:r.contractValidateOk,contractValidateSummary:r.contractValidateSummary,contractDiffSummary:r.contractDiffSummary,contractApplied:r.contractApplied,spineOk:r.spineOk,ledgerLoading:r.ledgerLoading,ledgerError:r.ledgerError,ledgerSummary:r.ledgerSummary,onRerunPreflight:()=>{r.runContractPreflight(!0)},onApplyContract:()=>{r.applyContractThenSpine()},onRetrySpine:()=>{r.retrySpineOnly()}}),u==="dag-confirm"&&c.jsx(nK,{busy:l,taskId:r.taskId,confirmationId:n.confirmationId,confirmationDetails:n.confirmationDetails,ledgerLoading:r.ledgerLoading,ledgerError:r.ledgerError,ledgerSummary:r.ledgerSummary,runAction:n.runAction,onConfirmAndRun:()=>{r.confirmAndRunDag()}}),u==="run"&&c.jsx(oK,{busy:l,confirmationId:n.confirmationId,operationId:n.operationId,dagRunId:w,observeBusy:t.observeBusy,ledgerLoading:r.ledgerLoading,ledgerError:r.ledgerError,ledgerSummary:r.ledgerSummary,sseLog:n.sseLog,progress:C,runAction:n.runAction,onStopFollow:n.stopFollowSse,onShowInspectSplit:()=>{w.trim()&&a.setInspectSplitOpen(!0)},onOpenInspectSplit:()=>{w.trim()&&a.openInspectSplit()}})]})]})}function gK(e,t){if(e.has(t))return e instanceof Set?e:new Set(e);const n=new Set(e);return n.add(t),n}function vK(e,t,n){return n===!1?e instanceof Set?e:new Set(e):gK(e,t)}function Xl(e){return{hidden:!e,inert:!e,"aria-hidden":!e}}function bK(e){const{active:t,operateTab:n,shell:r,actions:i,wizard:a,prd:l,recovery:u}=e,[h,f]=_.useState(()=>new Set),p=vK(h,n,t);return p!==h&&f(p),c.jsxs("section",{id:"workspace-operate",className:"workspace-pane workspace-pane--operate","aria-label":"操作工作区",hidden:!t,"aria-hidden":!t,inert:!t,tabIndex:t?-1:void 0,children:[p.has("tasks")?c.jsx("div",{className:"operate-subpane",...Xl(n==="tasks"),children:c.jsx(pK,{shell:r,actions:i,wizard:a,prd:l,recovery:u})}):null,p.has("recovery")?c.jsx("div",{className:"operate-subpane",...Xl(n==="recovery"),children:c.jsx(JV,{shell:r,recovery:u,wizard:a})}):null,p.has("night")?c.jsx("div",{className:"operate-subpane",...Xl(n==="night"),children:c.jsx(HV,{busy:r.busy,runAction:i.runAction,isActionSuccess:i.isActionSuccess,setOpError:r.setOpError})}):null,p.has("models")?c.jsx("div",{className:"operate-subpane",...Xl(n==="models"),children:c.jsx(WV,{busy:r.busy,readiness:r.readiness,readinessReport:r.readinessReport,health:r.health,onRefreshReadiness:()=>{i.runAction("refreshReadiness",{}).then(()=>r.loadHealth())},onSaveMatrix:async g=>{const y=await i.runAction("savePiModelMatrix",{matrix:g});return await r.loadHealth(),y}})}):null,p.has("settings")?c.jsx("div",{className:"operate-subpane",...Xl(n==="settings"),children:c.jsx(eK,{health:r.health,readiness:r.readiness,healthError:r.healthError,layers:r.layers,setupBlocked:r.setupBlocked,degraded:r.degraded,busy:r.busy,runAction:i.runAction})}):null,p.has("pi-plugins")?c.jsx("div",{className:"operate-subpane",...Xl(n==="pi-plugins"),children:c.jsx(ZV,{})}):null]})}async function yK(){return await import("/inspect/inspect-workspace.js")}function H1(e,t){if(!t.active){e.setActive(!1),e.updateRoute(t.hash);return}e.updateRoute(t.hash),e.setActive(!0)}function _K(e){const{hash:t,onNavigate:n}=e,{path:r,query:i}=ha(t),a=oc(r)==="/scheduled-goals",l=e.active&&!a,u=_.useRef(null),h=_.useRef(null),f=_.useRef(0),p=_.useRef(null),g=_.useRef(n);g.current=n;const y=_.useRef(l),v=_.useRef(t),S=_.useRef(e.workspaceId);y.current=l,v.current=t,S.current=e.workspaceId;const[w,C]=_.useState("idle"),[E,A]=_.useState(!1),D=(T,I,$)=>{T.then(X=>{if(I===f.current){if(!X){C("error");return}h.current=X,H1(X,{active:y.current,hash:v.current}),C("ready")}}).catch(()=>{I===f.current&&C("error")}).finally(()=>{p.current===T&&(p.current=null),$?.()})},P=async()=>{const T=await yK();if(!u.current)return null;typeof T.prepareInspectWorkspace=="function"&&await T.prepareInspectWorkspace(u.current);const I={active:y.current,hash:v.current};return h.current?(H1(h.current,I),h.current):T.mountInspectWorkspace(u.current,{hosted:!0,autoStart:!1,hash:I.hash,active:I.active,workspaceId:S.current??void 0,onNavigate:$=>g.current($)})};_.useEffect(()=>{window.postMessage({type:"loop-console:workspace-scope",workspaceId:e.workspaceId??null},"*")},[e.workspaceId]),_.useEffect(()=>{if(h.current){H1(h.current,{active:l,hash:t});return}if(p.current||!l||w==="error")return;const T=++f.current;C("loading");const I=P();p.current=I,D(I,T)},[l,t,w]),_.useEffect(()=>()=>{h.current?.destroy(),h.current=null},[]);const H=()=>{if(E||p.current)return;A(!0),C("loading");const T=++f.current,I=P();p.current=I,D(I,T,()=>A(!1))};return c.jsxs("section",{id:"workspace-inspect",className:"workspace-pane workspace-pane--inspect","aria-label":"观测工作区",hidden:!e.active,"aria-hidden":!e.active,inert:!e.active,tabIndex:e.active?-1:void 0,children:[c.jsx("div",{ref:u,className:"inspect-workspace-root",hidden:a}),e.active&&a&&e.workspaceId&&c.jsx(D6,{origin:window.location.origin,workspaceId:e.workspaceId,mode:"observe",goalId:i.get("goalId")??void 0},e.workspaceId),!a&&w==="loading"&&!h.current?c.jsx("p",{className:"muted",role:"status",children:"正在加载观测工作区…"}):null,!a&&w==="error"?c.jsxs("div",{className:"workspace-inspect-error",role:"alert",children:[c.jsx("p",{children:"观测工作区加载失败。"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:E,onClick:H,children:"重试"})]}):null]})}function xK(e){const t=e==="chat"?"workspace-chat":e==="operate"?"workspace-operate":"workspace-inspect",n=document.getElementById(t);if(!(n instanceof HTMLElement))return;if(e==="chat"){n.focus();return}(n.querySelector('button:not([disabled]), [href], textarea, input, select, [tabindex]:not([tabindex="-1"])')??n).focus()}function SK(){const e=xT(),t=yV({}),n=_.useRef(()=>{}),r=_.useCallback(L=>n.current(L),[]),[i,a]=_.useState("chat"),[l,u]=_.useState(null),h=l?.workspaceId??t.unknownWorkspaceId,f=h?null:t.workspaceId,p=ET({shell:e,applyInterviewPayload:r,workspaceId:f}),g=$T(),y=mR({shell:e,actions:p,prd:g}),v=hR({shell:e,actions:p,wizard:y}),[S,w]=_.useState(()=>jp(window.localStorage)),[C,E]=_.useState(()=>oR(window.localStorage)),[A,D]=_.useState(()=>zp(window.location,{lastOperateTab:jp(window.localStorage)})?.sessionId??null);_.useEffect(()=>{n.current=y.applyInterviewPayload}),_.useEffect(()=>{h||t.loading||e.loadHealth(t.workspaceId)},[e.loadHealth,h,t.loading,t.workspaceId]);const P=_.useRef(f);_.useEffect(()=>{P.current!==f&&(P.current=f,p.resetForWorkspaceScope(),y.setTaskId(""),v.setDagRunId(""),v.setFromNodeId(""),v.setFeatureId(""),v.setRecoveryConfirm(null),v.setInspectSplitOpen(!1),v.setInterruptIntent(!1),e.setBusy(!1),e.setOpError(null),e.setOpMessage(null))},[p,v,f,e,y]);const[H,T]=_.useState(null),I=_.useRef(0);_.useEffect(()=>{e.opError&&(I.current+=1,T({id:I.current,kind:"error",message:e.opError}))},[e.opError]);const $=_.useCallback((L,V={},oe={})=>{if(L==="operate"){const M=V.operateTab??S;w(M),aR(M,window.localStorage),e.selectNav(M)}else L==="chat"?(e.selectNav("chat"),"sessionId"in V&&D(V.sessionId??null)):e.selectNav("recovery");V.taskId&&y.setTaskId(V.taskId),V.dagRunId&&v.setDagRunId(V.dagRunId),V.fromNodeId&&v.setFromNodeId(V.fromNodeId),V.featureId&&v.setFeatureId(V.featureId),v.setInterruptIntent(V.intent==="interrupt"),a(L);const K=L==="inspect"?wf(V.inspectHref??C,V.workspaceId??f):Lp({workspace:L,operateTab:V.operateTab??S,...f?{workspaceId:f}:{},...V});L==="inspect"&&(E(K),lR(K,window.localStorage));const Q=K.startsWith("/#")?K.slice(1):K.startsWith("#")?K:`#${K}`;(window.location.hash.startsWith("#")?window.location.hash:`#${window.location.hash}`)!==Q&&(oe.replace&&typeof history.replaceState=="function"?history.replaceState(null,"",Q):window.location.hash=Q),queueMicrotask(()=>xK(L))},[C,S,v.setDagRunId,v.setFeatureId,v.setFromNodeId,v.setInterruptIntent,f,e.selectNav,y.setTaskId]),X=_.useCallback((L,V={})=>{if(L==="chat"){$("chat",V);return}$("operate",{...V,operateTab:L})},[$]),j=_.useCallback(L=>{const V=id(L),oe=zp({pathname:"/",hash:V.startsWith("/#")?V.slice(1):V});if(!oe){kf(V);return}$(oe.workspace,{...oe,operateTab:oe.operateTab,inspectHref:oe.canonicalHref},{replace:oe.replace})},[$]),U=_.useCallback(()=>{const L=zp(window.location,{lastOperateTab:jp(window.localStorage)});if(L){const V=sR(L.workspaceId,t.workspaces.map(oe=>oe.workspaceId));if(V.status==="unknown-workspace"){u({workspaceId:V.workspaceId});return}u(null),L.workspaceId&&L.workspaceId!==f&&t.selectWorkspace(L.workspaceId),$(L.workspace,{...L,operateTab:L.operateTab,inspectHref:L.canonicalHref},{replace:L.replace});return}u(null),$("chat",{})},[$,f,t]),z=_.useCallback(L=>{t.selectWorkspace(L),$("chat",{workspaceId:L,sessionId:void 0},{replace:!0})},[$,t]),W=_.useCallback(L=>{if(u(null),t.selectWorkspace(L),i==="chat"){$("chat",{workspaceId:L,sessionId:void 0},{replace:!0});return}const V=i==="operate"?Sf(S,{workspaceId:L}):wf(C,L);j(V)},[$,C,j,S,i,t]);_.useEffect(()=>(U(),window.addEventListener("hashchange",U),()=>window.removeEventListener("hashchange",U)),[U]);const F=cR(f),O=Tb(),B=Sf(S,f?{workspaceId:f}:{});return c.jsx(c.Fragment,{children:c.jsxs("div",{className:`console-app${i==="chat"?" is-chat-focus":i==="inspect"?" is-inspect-focus":""}`,children:[c.jsx(vR,{nav:e.nav,primary:i,chatHref:O,operateHref:B,readiness:e.readiness,setupBlocked:e.setupBlocked,degraded:e.degraded,inspectHref:F,workspaces:t.workspaces,workspaceId:f,workspacesLoading:t.loading,onSelectWorkspace:W,onNavigate:j}),c.jsxs("div",{className:`console-shell${i==="chat"?" is-chat-focus":i==="inspect"?" is-inspect-focus":""}`,children:[c.jsx(bR,{opError:e.opError,opMessage:e.opMessage}),c.jsx(I6,{toast:H,onDismiss:()=>T(null)}),h?c.jsxs("div",{className:"workspace-route-error",role:"alert","aria-live":"polite",children:[c.jsxs("p",{children:["URL 指向的 Workspace",c.jsx("code",{children:h}),"不存在或已被移除。为避免数据泄漏,不会回退到默认 Workspace。"]}),c.jsx("ul",{className:"workspace-route-error-options",children:t.workspaces.map(L=>c.jsx("li",{children:c.jsxs("button",{type:"button",className:"btn btn-secondary",onClick:()=>{u(null),t.selectWorkspace(L.workspaceId),j(Lp({workspace:"chat",workspaceId:L.workspaceId}))},children:["选择 ",L.name]})},L.workspaceId))}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{u(null);const L=t.workspaces[0]?.workspaceId??null;L&&t.selectWorkspace(L),j(Lp({workspace:"chat"}))},children:"返回对话首页"})]}):null,h?null:c.jsxs("main",{className:`console-main${i==="chat"||i==="inspect"?" console-main--fill":""}`,children:[c.jsx(TV,{active:i==="chat",readiness:e.readiness,runAction:p.runAction,operatorBusy:e.busy,workspaceRegistry:t,workspaceId:f,sessionId:A,workspaceGate:l?{status:"unknown-workspace",workspaceId:l.workspaceId}:void 0,onSwitchWorkspace:z,onNavigateWorkspace:X}),c.jsx(bK,{active:i==="operate",operateTab:S,shell:e,actions:p,wizard:y,prd:g,recovery:v}),c.jsx(_K,{active:i==="inspect",hash:C.startsWith("/#")?C.slice(1):C,workspaceId:f,onNavigate:j})]}),!h&&v.inspectSplitOpen&&v.dagRunId.trim()?c.jsx(uT,{dagRunId:v.dagRunId.trim(),nodeId:v.fromNodeId.trim()||void 0,onClose:()=>v.setInspectSplitOpen(!1),onOpenFull:()=>j(Di(`/dag/${encodeURIComponent(v.dagRunId.trim())}`,"from=recovery"))}):null]})]})})}const jC=document.getElementById("root");if(!jC)throw new Error("Loop Operator Console: #root missing");WE.createRoot(jC).render(c.jsx(_.StrictMode,{children:c.jsx(SK,{})}));export{OI as _,Zf as g,wK as k};
|
|
478
|
+
`)||"(尚无事件)"})]})]})}const OC=[2e3,2e3,4e3,4e3,8e3,8e3,15e3,15e3,3e4,3e4];function lK(e,t){if(e===!0)return{kind:"own"};if(e===!1)return{kind:"clear"};const n=OC[t];return n===void 0?{kind:"give-up"}:{kind:"retry",delayMs:n}}OC.reduce((e,t)=>e+t,0);function cK(){return{baseline:null,ownedRunId:"",pendingSelection:""}}function uK(e,t){const n=e.task===void 0,r=!n&&e.task!==t.task,i=!n&&e.dispatch!==t.dispatchId,a={...e,task:t.task,dispatch:t.dispatchId,pendingSelection:""};if(r)return a.baseline=null,a.ownedRunId="",{state:a,observation:{action:"reset-selection"}};if(i&&(a.ownedRunId="",t.selectedRunId))return a.baseline=t.selectedRunId,{state:a,observation:{action:"invalidate-selection"}};const l=t.selectedRunId;return l&&l!==a.ownedRunId?(a.pendingSelection=l,{state:a,observation:{action:"verify-ownership"}}):{state:a,observation:{action:l?"idle":"probe"}}}function n6(e){return{...e,baseline:null}}function dK(e,t){return{...e,baseline:t??""}}function hK(e,t){return!t.ok||!t.dagRunId?{state:e,acceptedRunId:null}:e.baseline===null||t.dagRunId===e.baseline?{state:e,acceptedRunId:null}:{state:{...e,ownedRunId:t.dagRunId},acceptedRunId:t.dagRunId}}function fK(e,t){return t?{state:{...e,ownedRunId:e.pendingSelection,pendingSelection:""},clearSelection:!1}:{state:{...e,ownedRunId:"",pendingSelection:"",baseline:null},clearSelection:!0}}async function r6(e){try{const{status:t,body:n}=await Jo("observeLink",{taskId:e});if(t>=400||n.ok===!1)return{ok:!1};const r=n.result??{};return{ok:!0,dagRunId:(typeof r.dagRunId=="string"?r.dagRunId.trim():"")||null}}catch{return{ok:!1}}}async function mK(e,t){try{const n=await fetch(yi(`/api/dag-runs/${encodeURIComponent(e)}`),{credentials:"same-origin"});if(n.status===404)return!1;if(!n.ok)return null;const r=await n.json(),i=typeof r.taskId=="string"?r.taskId.trim():"";return i?i===t.trim():null}catch{return null}}function pK(e){const{shell:t,actions:n,wizard:r,prd:i,recovery:a}=e,{busy:l,step:u,setupBlocked:h,degraded:f}=t,p=_.useRef(cK()),g=_.useRef(0),[y,v]=_.useState(""),S=_.useCallback(E=>{const A=++g.current;p.current=n6(p.current);const D=async P=>{const H=await r6(E);if(g.current===A){if(H.ok){p.current=dK(p.current,H.dagRunId);return}P>0&&window.setTimeout(()=>{D(P-1)},1500)}};D(8)},[]);_.useEffect(()=>{if(u!=="dag-confirm")return;const E=r.taskId.trim();if(!E){g.current+=1,p.current=n6(p.current);return}S(E)},[u,r.taskId,S]),_.useEffect(()=>{if(u!=="run")return;const E=r.taskId.trim();if(!E)return;const A=uK(p.current,{task:E,dispatchId:n.operationId??null,selectedRunId:a.dagRunId.trim()});switch(p.current=A.state,v(A.state.ownedRunId),A.observation.action){case"reset-selection":{a.setManualRunId(!1),a.setDagRunId(""),S(E);return}case"invalidate-selection":{a.setManualRunId(!1),a.setDagRunId("");return}case"verify-ownership":{const D=A.state.pendingSelection;let P=!1,H=0;const T=async I=>{if(P)return;const $=await mK(D,E);if(P)return;const X=lK($,I);if(X.kind==="own"||X.kind==="clear"){const j=fK(p.current,X.kind==="own");p.current=j.state,v(j.state.ownedRunId),j.clearSelection&&(a.setManualRunId(!1),a.setDagRunId(""),S(E));return}X.kind==="retry"&&(H=window.setTimeout(()=>{T(I+1)},X.delayMs))};return T(0),()=>{P=!0,window.clearTimeout(H)}}case"idle":return;case"probe":{p.current.baseline===null&&S(E);let D=!1,P=0,H=0;const T=async()=>{if(D)return;if(p.current.baseline===null){H+=1,H<120&&(P=window.setTimeout(()=>{T()},1e3));return}const I=await r6(E);if(D)return;H+=1;const $=hK(p.current,I);if(p.current=$.state,$.acceptedRunId){v($.state.ownedRunId),a.setManualRunId(!0),a.setDagRunId($.acceptedRunId);return}H<120&&(P=window.setTimeout(()=>{T()},2500))};return P=window.setTimeout(()=>{T()},1200),()=>{D=!0,window.clearTimeout(P)}}}},[u,n.operationId,r.taskId,a.dagRunId,a.setManualRunId,a.setDagRunId,S]);const w=a.dagRunId===y?a.dagRunId:"",C=C8(u==="run"?w:"");return c.jsxs("section",{className:"panel task-ops","aria-labelledby":"task-ops-title",children:[c.jsx("h2",{id:"task-ops-title",children:"任务操作"}),c.jsx("p",{className:"panel-lead",children:"按 Happy Path 推进;契约落地一步内自动校验,人工确认写入。"}),c.jsx("ol",{className:"wizard-steps","data-testid":"wizard-steps",children:r.wizardSteps.map((E,A)=>c.jsxs("li",{"data-active":u===E.id,"data-done":A<r.stepIndex,children:[c.jsx("span",{className:"step-index",children:String(A+1).padStart(2,"0")}),c.jsx("span",{className:"step-label",children:E.label})]},E.id))}),c.jsxs("label",{className:"field",children:[c.jsx("span",{className:"muted",children:"任务 ID"}),c.jsx("input",{"data-testid":"task-id-input",value:r.taskId,disabled:l||h||u==="import-prd",placeholder:u==="import-prd"?"导入需求后自动生成":"task-id",onChange:E=>r.setTaskId(E.target.value.trim())})]}),r.taskTitle?c.jsxs("p",{className:"workflow-hint","data-testid":"task-title-chip",children:["任务名称:",r.taskTitle]}):null,u!=="import-prd"&&!h?c.jsxs("p",{className:"workflow-hint","data-testid":"workflow-kind-chip",children:["当前流程:",r.workflowMeta.label," ·"," ",c.jsx("code",{children:r.taskKind})]}):null,h||u==="setup"?c.jsxs("div",{className:"empty-state","data-testid":"setup-gate",children:[c.jsx("p",{className:"empty-title",children:"需要先完成设置"}),c.jsx("p",{className:"muted",children:"请先在「模型与认证」完成 Pi 就绪,再导入需求与访谈。"}),c.jsxs("div",{className:"cta-row",children:[c.jsx("button",{type:"button",className:"btn btn-primary",disabled:l,onClick:()=>{t.selectNav("models"),n.runAction("refreshReadiness",{}).then(()=>t.loadHealth())},children:"刷新就绪状态"}),c.jsx("button",{type:"button",className:"btn btn-primary",disabled:l,onClick:()=>{n.runAction("doctor",{})},children:"运行诊断"}),c.jsx("pre",{className:"cmd",children:a6})]})]}):c.jsxs("div",{className:"wizard-body","data-testid":"wizard-body",children:[u==="import-prd"&&c.jsx(iK,{busy:l,taskKind:r.taskKind,onTaskKindChange:r.setTaskKind,workflowHint:r.workflowMeta.hint,prd:i,engineering:r.engineering,onEngineeringChange:r.setEngineering,onImport:()=>{r.importPrdAndCreate()}}),u==="interview"&&c.jsx(sK,{busy:l,taskId:r.taskId,taskTitle:r.taskTitle,taskKind:r.taskKind,sessionId:r.sessionId,question:r.question,answerText:r.answerText,onAnswerTextChange:r.setAnswerText,draftSummary:r.draftSummary,assessmentId:r.assessmentId,runAction:n.runAction}),u==="contract"&&c.jsx(rK,{busy:l,degraded:f,taskId:r.taskId,assessmentId:r.assessmentId,contractValidateOk:r.contractValidateOk,contractValidateSummary:r.contractValidateSummary,contractDiffSummary:r.contractDiffSummary,contractApplied:r.contractApplied,spineOk:r.spineOk,ledgerLoading:r.ledgerLoading,ledgerError:r.ledgerError,ledgerSummary:r.ledgerSummary,onRerunPreflight:()=>{r.runContractPreflight(!0)},onApplyContract:()=>{r.applyContractThenSpine()},onRetrySpine:()=>{r.retrySpineOnly()}}),u==="dag-confirm"&&c.jsx(nK,{busy:l,taskId:r.taskId,confirmationId:n.confirmationId,confirmationDetails:n.confirmationDetails,ledgerLoading:r.ledgerLoading,ledgerError:r.ledgerError,ledgerSummary:r.ledgerSummary,runAction:n.runAction,onConfirmAndRun:()=>{r.confirmAndRunDag()}}),u==="run"&&c.jsx(oK,{busy:l,confirmationId:n.confirmationId,operationId:n.operationId,dagRunId:w,observeBusy:t.observeBusy,ledgerLoading:r.ledgerLoading,ledgerError:r.ledgerError,ledgerSummary:r.ledgerSummary,sseLog:n.sseLog,progress:C,runAction:n.runAction,onStopFollow:n.stopFollowSse,onShowInspectSplit:()=>{w.trim()&&a.setInspectSplitOpen(!0)},onOpenInspectSplit:()=>{w.trim()&&a.openInspectSplit()}})]})]})}function gK(e,t){if(e.has(t))return e instanceof Set?e:new Set(e);const n=new Set(e);return n.add(t),n}function vK(e,t,n){return n===!1?e instanceof Set?e:new Set(e):gK(e,t)}function Xl(e){return{hidden:!e,inert:!e,"aria-hidden":!e}}function bK(e){const{active:t,operateTab:n,shell:r,actions:i,wizard:a,prd:l,recovery:u}=e,[h,f]=_.useState(()=>new Set),p=vK(h,n,t);return p!==h&&f(p),c.jsxs("section",{id:"workspace-operate",className:"workspace-pane workspace-pane--operate","aria-label":"操作工作区",hidden:!t,"aria-hidden":!t,inert:!t,tabIndex:t?-1:void 0,children:[p.has("tasks")?c.jsx("div",{className:"operate-subpane",...Xl(n==="tasks"),children:c.jsx(pK,{shell:r,actions:i,wizard:a,prd:l,recovery:u})}):null,p.has("recovery")?c.jsx("div",{className:"operate-subpane",...Xl(n==="recovery"),children:c.jsx(JV,{shell:r,recovery:u,wizard:a})}):null,p.has("night")?c.jsx("div",{className:"operate-subpane",...Xl(n==="night"),children:c.jsx(HV,{busy:r.busy,runAction:i.runAction,isActionSuccess:i.isActionSuccess,setOpError:r.setOpError})}):null,p.has("models")?c.jsx("div",{className:"operate-subpane",...Xl(n==="models"),children:c.jsx(WV,{busy:r.busy,readiness:r.readiness,readinessReport:r.readinessReport,health:r.health,onRefreshReadiness:()=>{i.runAction("refreshReadiness",{}).then(()=>r.loadHealth())},onSaveMatrix:async g=>{const y=await i.runAction("savePiModelMatrix",{matrix:g});return await r.loadHealth(),y}})}):null,p.has("settings")?c.jsx("div",{className:"operate-subpane",...Xl(n==="settings"),children:c.jsx(eK,{health:r.health,readiness:r.readiness,healthError:r.healthError,layers:r.layers,setupBlocked:r.setupBlocked,degraded:r.degraded,busy:r.busy,runAction:i.runAction})}):null,p.has("pi-plugins")?c.jsx("div",{className:"operate-subpane",...Xl(n==="pi-plugins"),children:c.jsx(ZV,{})}):null]})}async function yK(){return await import("/inspect/inspect-workspace.js")}function H1(e,t){if(!t.active){e.setActive(!1),e.updateRoute(t.hash);return}e.updateRoute(t.hash),e.setActive(!0)}function _K(e){const{hash:t,onNavigate:n}=e,{path:r,query:i}=ha(t),a=oc(r)==="/scheduled-goals",l=e.active&&!a,u=_.useRef(null),h=_.useRef(null),f=_.useRef(0),p=_.useRef(null),g=_.useRef(n);g.current=n;const y=_.useRef(l),v=_.useRef(t),S=_.useRef(e.workspaceId);y.current=l,v.current=t,S.current=e.workspaceId;const[w,C]=_.useState("idle"),[E,A]=_.useState(!1),D=(T,I,$)=>{T.then(X=>{if(I===f.current){if(!X){C("error");return}h.current=X,H1(X,{active:y.current,hash:v.current}),C("ready")}}).catch(()=>{I===f.current&&C("error")}).finally(()=>{p.current===T&&(p.current=null),$?.()})},P=async()=>{const T=await yK();if(!u.current)return null;typeof T.prepareInspectWorkspace=="function"&&await T.prepareInspectWorkspace(u.current);const I={active:y.current,hash:v.current};return h.current?(H1(h.current,I),h.current):T.mountInspectWorkspace(u.current,{hosted:!0,autoStart:!1,hash:I.hash,active:I.active,workspaceId:S.current??void 0,onNavigate:$=>g.current($)})};_.useEffect(()=>{window.postMessage({type:"loop-console:workspace-scope",workspaceId:e.workspaceId??null},"*")},[e.workspaceId]),_.useEffect(()=>{if(h.current){H1(h.current,{active:l,hash:t});return}if(p.current||!l||w==="error")return;const T=++f.current;C("loading");const I=P();p.current=I,D(I,T)},[l,t,w]),_.useEffect(()=>()=>{h.current?.destroy(),h.current=null},[]);const H=()=>{if(E||p.current)return;A(!0),C("loading");const T=++f.current,I=P();p.current=I,D(I,T,()=>A(!1))};return c.jsxs("section",{id:"workspace-inspect",className:"workspace-pane workspace-pane--inspect","aria-label":"观测工作区",hidden:!e.active,"aria-hidden":!e.active,inert:!e.active,tabIndex:e.active?-1:void 0,children:[c.jsx("div",{ref:u,className:"inspect-workspace-root",hidden:a}),e.active&&a&&e.workspaceId&&c.jsx(D6,{origin:window.location.origin,workspaceId:e.workspaceId,mode:"observe",goalId:i.get("goalId")??void 0},e.workspaceId),!a&&w==="loading"&&!h.current?c.jsx("p",{className:"muted",role:"status",children:"正在加载观测工作区…"}):null,!a&&w==="error"?c.jsxs("div",{className:"workspace-inspect-error",role:"alert",children:[c.jsx("p",{children:"观测工作区加载失败。"}),c.jsx("button",{type:"button",className:"btn btn-secondary",disabled:E,onClick:H,children:"重试"})]}):null]})}function xK(e){const t=e==="chat"?"workspace-chat":e==="operate"?"workspace-operate":"workspace-inspect",n=document.getElementById(t);if(!(n instanceof HTMLElement))return;if(e==="chat"){n.focus();return}(n.querySelector('button:not([disabled]), [href], textarea, input, select, [tabindex]:not([tabindex="-1"])')??n).focus()}function SK(){const e=xT(),t=yV({}),n=_.useRef(()=>{}),r=_.useCallback(L=>n.current(L),[]),[i,a]=_.useState("chat"),[l,u]=_.useState(null),h=l?.workspaceId??t.unknownWorkspaceId,f=h?null:t.workspaceId,p=ET({shell:e,applyInterviewPayload:r,workspaceId:f}),g=$T(),y=mR({shell:e,actions:p,prd:g}),v=hR({shell:e,actions:p,wizard:y}),[S,w]=_.useState(()=>jp(window.localStorage)),[C,E]=_.useState(()=>oR(window.localStorage)),[A,D]=_.useState(()=>zp(window.location,{lastOperateTab:jp(window.localStorage)})?.sessionId??null);_.useEffect(()=>{n.current=y.applyInterviewPayload}),_.useEffect(()=>{h||t.loading||e.loadHealth(t.workspaceId)},[e.loadHealth,h,t.loading,t.workspaceId]);const P=_.useRef(f);_.useEffect(()=>{P.current!==f&&(P.current=f,p.resetForWorkspaceScope(),y.setTaskId(""),v.setDagRunId(""),v.setFromNodeId(""),v.setFeatureId(""),v.setRecoveryConfirm(null),v.setInspectSplitOpen(!1),v.setInterruptIntent(!1),e.setBusy(!1),e.setOpError(null),e.setOpMessage(null))},[p,v,f,e,y]);const[H,T]=_.useState(null),I=_.useRef(0);_.useEffect(()=>{e.opError&&(I.current+=1,T({id:I.current,kind:"error",message:e.opError}))},[e.opError]);const $=_.useCallback((L,V={},oe={})=>{if(L==="operate"){const M=V.operateTab??S;w(M),aR(M,window.localStorage),e.selectNav(M)}else L==="chat"?(e.selectNav("chat"),"sessionId"in V&&D(V.sessionId??null)):e.selectNav("recovery");V.taskId&&y.setTaskId(V.taskId),V.dagRunId&&v.setDagRunId(V.dagRunId),V.fromNodeId&&v.setFromNodeId(V.fromNodeId),V.featureId&&v.setFeatureId(V.featureId),v.setInterruptIntent(V.intent==="interrupt"),a(L);const K=L==="inspect"?wf(V.inspectHref??C,V.workspaceId??f):Lp({workspace:L,operateTab:V.operateTab??S,...f?{workspaceId:f}:{},...V});L==="inspect"&&(E(K),lR(K,window.localStorage));const Q=K.startsWith("/#")?K.slice(1):K.startsWith("#")?K:`#${K}`;(window.location.hash.startsWith("#")?window.location.hash:`#${window.location.hash}`)!==Q&&(oe.replace&&typeof history.replaceState=="function"?history.replaceState(null,"",Q):window.location.hash=Q),queueMicrotask(()=>xK(L))},[C,S,v.setDagRunId,v.setFeatureId,v.setFromNodeId,v.setInterruptIntent,f,e.selectNav,y.setTaskId]),X=_.useCallback((L,V={})=>{if(L==="chat"){$("chat",V);return}$("operate",{...V,operateTab:L})},[$]),j=_.useCallback(L=>{const V=id(L),oe=zp({pathname:"/",hash:V.startsWith("/#")?V.slice(1):V});if(!oe){kf(V);return}$(oe.workspace,{...oe,operateTab:oe.operateTab,inspectHref:oe.canonicalHref},{replace:oe.replace})},[$]),U=_.useCallback(()=>{const L=zp(window.location,{lastOperateTab:jp(window.localStorage)});if(L){const V=sR(L.workspaceId,t.workspaces.map(oe=>oe.workspaceId));if(V.status==="unknown-workspace"){u({workspaceId:V.workspaceId});return}u(null),L.workspaceId&&L.workspaceId!==f&&t.selectWorkspace(L.workspaceId),$(L.workspace,{...L,operateTab:L.operateTab,inspectHref:L.canonicalHref},{replace:L.replace});return}u(null),$("chat",{})},[$,f,t]),z=_.useCallback(L=>{t.selectWorkspace(L),$("chat",{workspaceId:L,sessionId:void 0},{replace:!0})},[$,t]),W=_.useCallback(L=>{if(u(null),t.selectWorkspace(L),i==="chat"){$("chat",{workspaceId:L,sessionId:void 0},{replace:!0});return}const V=i==="operate"?Sf(S,{workspaceId:L}):wf(C,L);j(V)},[$,C,j,S,i,t]);_.useEffect(()=>(U(),window.addEventListener("hashchange",U),()=>window.removeEventListener("hashchange",U)),[U]);const F=cR(f),O=Tb(),B=Sf(S,f?{workspaceId:f}:{});return c.jsx(c.Fragment,{children:c.jsxs("div",{className:`console-app${i==="chat"?" is-chat-focus":i==="inspect"?" is-inspect-focus":""}`,children:[c.jsx(vR,{nav:e.nav,primary:i,chatHref:O,operateHref:B,readiness:e.readiness,setupBlocked:e.setupBlocked,degraded:e.degraded,inspectHref:F,workspaces:t.workspaces,workspaceId:f,workspacesLoading:t.loading,onSelectWorkspace:W,onNavigate:j}),c.jsxs("div",{className:`console-shell${i==="chat"?" is-chat-focus":i==="inspect"?" is-inspect-focus":""}`,children:[c.jsx(bR,{opError:e.opError,opMessage:e.opMessage}),c.jsx(I6,{toast:H,onDismiss:()=>T(null)}),h?c.jsxs("div",{className:"workspace-route-error",role:"alert","aria-live":"polite",children:[c.jsxs("p",{children:["URL 指向的 Workspace",c.jsx("code",{children:h}),"不存在或已被移除。为避免数据泄漏,不会回退到默认 Workspace。"]}),c.jsx("ul",{className:"workspace-route-error-options",children:t.workspaces.map(L=>c.jsx("li",{children:c.jsxs("button",{type:"button",className:"btn btn-secondary",onClick:()=>{u(null),t.selectWorkspace(L.workspaceId),j(Lp({workspace:"chat",workspaceId:L.workspaceId}))},children:["选择 ",L.name]})},L.workspaceId))}),c.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{u(null);const L=t.workspaces[0]?.workspaceId??null;L&&t.selectWorkspace(L),j(Lp({workspace:"chat"}))},children:"返回对话首页"})]}):null,h?null:c.jsxs("main",{className:`console-main${i==="chat"||i==="inspect"?" console-main--fill":""}`,children:[c.jsx(TV,{active:i==="chat",readiness:e.readiness,runAction:p.runAction,operatorBusy:e.busy,workspaceRegistry:t,workspaceId:f,sessionId:A,workspaceGate:l?{status:"unknown-workspace",workspaceId:l.workspaceId}:void 0,onSwitchWorkspace:z,onNavigateWorkspace:X}),c.jsx(bK,{active:i==="operate",operateTab:S,shell:e,actions:p,wizard:y,prd:g,recovery:v}),c.jsx(_K,{active:i==="inspect",hash:C.startsWith("/#")?C.slice(1):C,workspaceId:f,onNavigate:j})]}),!h&&v.inspectSplitOpen&&v.dagRunId.trim()?c.jsx(uT,{dagRunId:v.dagRunId.trim(),nodeId:v.fromNodeId.trim()||void 0,onClose:()=>v.setInspectSplitOpen(!1),onOpenFull:()=>j(Di(`/dag/${encodeURIComponent(v.dagRunId.trim())}`,"from=recovery"))}):null]})]})})}const jC=document.getElementById("root");if(!jC)throw new Error("Loop Operator Console: #root missing");const wK="/inspect/console-theme.js";import(wK).then(e=>e.applyStoredConsoleTheme()).catch(()=>{}).finally(()=>{WE.createRoot(jC).render(c.jsx(_.StrictMode,{children:c.jsx(SK,{})}))});export{OI as _,Zf as g,kK as k};
|